ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpLWRldmljZXMtY2Npc3MKaW5kZXggMGE5MmE3Yy4uNGYyOWU1ZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzCkBAIC0zMSwzICszMSwzMSBAQAogS2VybmVsIFZlcnNpb246IDIuNi4zMAogQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCiBEZXNjcmlwdGlvbjoJQSBzeW1ib2xpYyBsaW5rIHRvIC9zeXMvYmxvY2svY2Npc3MhY1hkWQorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9yZXNjYW4KK0RhdGU6CQlBdWd1c3QgMjAwOQorS2VybmVsIFZlcnNpb246CTIuNi4zMQorQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCitEZXNjcmlwdGlvbjoJS2lja3Mgb2YgYSByZXNjYW4gb2YgdGhlIGNvbnRyb2xsZXIgdG8gZGlzY292ZXIgbG9naWNhbAorCQlkcml2ZSB0b3BvbG9neSBjaGFuZ2VzLgorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9jWGRZL2x1bmlkCitEYXRlOgkJQXVndXN0IDIwMDkKK0tlcm5lbCBWZXJzaW9uOiAyLjYuMzEKK0NvbnRhY3Q6CWlzc19zdG9yYWdlZGV2QGhwLmNvbQorRGVzY3JpcHRpb246CURpc3BsYXlzIHRoZSA4LWJ5dGUgTFVOIElEIHVzZWQgdG8gYWRkcmVzcyBsb2dpY2FsCisJCWRyaXZlIFkgb2YgY29udHJvbGxlciBYLgorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9jWGRZL3JhaWRfbGV2ZWwKK0RhdGU6CQlBdWd1c3QgMjAwOQorS2VybmVsIFZlcnNpb246IDIuNi4zMQorQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCitEZXNjcmlwdGlvbjoJRGlzcGxheXMgdGhlIFJBSUQgbGV2ZWwgb2YgbG9naWNhbCBkcml2ZSBZIG9mCisJCWNvbnRyb2xsZXIgWC4KKworV2hlcmU6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy88ZGV2Pi9jY2lzc1gvY1hkWS91c2FnZV9jb3VudAorRGF0ZToJCUF1Z3VzdCAyMDA5CitLZXJuZWwgVmVyc2lvbjogMi42LjMxCitDb250YWN0Oglpc3Nfc3RvcmFnZWRldkBocC5jb20KK0Rlc2NyaXB0aW9uOglEaXNwbGF5cyB0aGUgdXNhZ2UgY291bnQgKG51bWJlciBvZiBvcGVucykgb2YgbG9naWNhbCBkcml2ZSBZCisJCW9mIGNvbnRyb2xsZXIgWC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX2hvc3QgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXV3Yl9yYy13dXNiaGMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2JfaG9zdApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11d2JfcmMtd3VzYmhjCmluZGV4IDQ2YjY2YWQxLi40ZTgxMDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXVzYl9ob3N0CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXdiX3JjLXd1c2JoYwpAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3VzYl9ob3N0L3VzYl9ob3N0Ti93dXNiX2NoaWQKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL3d1c2JoYy93dXNiX2NoaWQKIERhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKIEtlcm5lbFZlcnNpb246ICAyLjYuMjcKIENvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgpAQCAtOSw3ICs5LDcgQEAKIAogICAgICAgICAgICAgICAgIFNldCBhbiBhbGwgemVybyBDSElEIHRvIHN0b3AgdGhlIGhvc3QgY29udHJvbGxlci4KIAotV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXNiX2hvc3QvdXNiX2hvc3ROL3d1c2JfdHJ1c3RfdGltZW91dAorV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vd3VzYmhjL3d1c2JfdHJ1c3RfdGltZW91dAogRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAogS2VybmVsVmVyc2lvbjogIDIuNi4yNwogQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtY2FjaGVfZGlzYWJsZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzViYjRmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotV2hhdDogICAgICAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4Ki9jYWNoZV9kaXNhYmxlX1gKLURhdGU6ICAgICAgQXVndXN0IDIwMDgKLUtlcm5lbFZlcnNpb246CTIuNi4yNwotQ29udGFjdDoJbWFyay5sYW5nc2RvcmZAYW1kLmNvbQotRGVzY3JpcHRpb246CVRoZXNlIGZpbGVzIGV4aXN0IGluIGV2ZXJ5IGNwdSdzIGNhY2hlIGluZGV4IGRpcmVjdG9yaWVzLgotCQlUaGVyZSBhcmUgY3VycmVudGx5IDIgY2FjaGVfZGlzYWJsZV8jIGZpbGVzIGluIGVhY2gKLQkJZGlyZWN0b3J5LiAgUmVhZGluZyBmcm9tIHRoZXNlIGZpbGVzIG9uIGEgc3VwcG9ydGVkCi0JCXByb2Nlc3NvciB3aWxsIHJldHVybiB0aGF0IGNhY2hlIGRpc2FibGUgaW5kZXggdmFsdWUKLQkJZm9yIHRoYXQgcHJvY2Vzc29yIGFuZCBub2RlLiAgV3JpdGluZyB0byBvbmUgb2YgdGhlc2UKLQkJZmlsZXMgd2lsbCBjYXVzZSB0aGUgc3BlY2lmaWNlZCBjYWNoZSBpbmRleCB0byBiZSBkaXNhYmxlZC4KLQotCQlDdXJyZW50bHksIG9ubHkgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyBzdXBwb3J0IGNhY2hlIGluZGV4Ci0JCWRpc2FibGUsIGFuZCBvbmx5IGZvciB0aGVpciBMMyBjYWNoZXMuICBTZWUgdGhlIEJJT1MgYW5kCi0JCUtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBhdAotCQlodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLjIwXzItNC0wOS5wZGYKLQkJZm9yIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gYW5kIG90aGVyIGRldGFpbHMgb24gdGhlCi0JCWNhY2hlIGluZGV4IGRpc2FibGUuCi1Vc2VyczogICAgam9hY2hpbS5kZWd1YXJhQGFtZC5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwM2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CkBAIC0wLDAgKzEsMTU2IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvCitEYXRlOgkJcHJlLWdpdCBoaXN0b3J5CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CisJCUEgY29sbGVjdGlvbiBvZiBib3RoIGdsb2JhbCBhbmQgaW5kaXZpZHVhbCBDUFUgYXR0cmlidXRlcworCisJCUluZGl2aWR1YWwgQ1BVIGF0dHJpYnV0ZXMgYXJlIGNvbnRhaW5lZCBpbiBzdWJkaXJlY3RvcmllcworCQluYW1lZCBieSB0aGUga2VybmVsJ3MgbG9naWNhbCBDUFUgbnVtYmVyLCBlLmcuOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9zY2hlZF9tY19wb3dlcl9zYXZpbmdzCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzCitEYXRlOgkJSnVuZSAyMDA2CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGFuZCBhZGp1c3QgdGhlIGtlcm5lbCdzIG11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQuCisKKwkJUG9zc2libGUgdmFsdWVzIGFyZToKKworCQkwIC0gTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAoZGVmYXVsdCB2YWx1ZSkKKwkJMSAtIEZpbGwgb25lIHRocmVhZC9jb3JlL3BhY2thZ2UgZmlyc3QgZm9yIGxvbmcgcnVubmluZyB0aHJlYWRzCisJCTIgLSBBbHNvIGJpYXMgdGFzayB3YWtldXBzIHRvIHNlbWktaWRsZSBjcHUgcGFja2FnZSBmb3IgcG93ZXIKKwkJICAgIHNhdmluZ3MKKworCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX01DLCB3aGljaCBpcworCQlpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworCQlzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyBpcyBkZXBlbmRlbnQgdXBvbiBTQ0hFRF9TTVQsIHdoaWNoCisJCWlzIGl0c2VsZiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorCisJCVRoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCisJCXRoYXQgb25lIGZpbGUgbWF5IGJlIHByZXNlbnQgd2l0aG91dCB0aGUgb3RoZXIuCisKKwkJSW50cm9kdWNlZCBieSBnaXQgY29tbWl0IDVjNDViZjI3LgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9rZXJuZWxfbWF4CisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29mZmxpbmUKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3Bvc3NpYmxlCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQKK0RhdGU6CQlEZWNlbWJlciAyMDA4CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CUNQVSB0b3BvbG9neSBmaWxlcyB0aGF0IGRlc2NyaWJlIGtlcm5lbCBsaW1pdHMgcmVsYXRlZCB0bworCQlob3RwbHVnLiBCcmllZmx5OgorCisJCWtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIGNwdSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwKKwkJY29uZmlndXJhdGlvbi4KKworCQlvZmZsaW5lOiBjcHVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgorCQlIT1RQTFVHR0VEIG9mZiBvciBleGNlZWQgdGhlIGxpbWl0IG9mIGNwdXMgYWxsb3dlZCBieSB0aGUKKwkJa2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXggYWJvdmUpLgorCisJCW9ubGluZTogY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZC4KKworCQlwb3NzaWJsZTogY3B1cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFuZCBjYW4gYmUKKwkJYnJvdWdodCBvbmxpbmUgaWYgdGhleSBhcmUgcHJlc2VudC4KKworCQlwcmVzZW50OiBjcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbgorCQl0aGUgc3lzdGVtLgorCisJCVNlZSBEb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL25vZGUKK0RhdGU6CQlPY3RvYmVyIDIwMDkKK0NvbnRhY3Q6CUxpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IG1haWxpbmcgbGlzdCA8bGludXgtbW1Aa3ZhY2sub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIE5VTUEgbm9kZSBhIENQVSBiZWxvbmdzIHRvCisKKwkJV2hlbiBDT05GSUdfTlVNQSBpcyBlbmFibGVkLCBhIHN5bWJvbGljIGxpbmsgdGhhdCBwb2ludHMKKwkJdG8gdGhlIGNvcnJlc3BvbmRpbmcgTlVNQSBub2RlIGRpcmVjdG9yeS4KKworCQlGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzeW1saW5rIGlzIGNyZWF0ZWQgZm9yIGNwdTQyCisJCWluIE5VTUEgbm9kZSAyOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyL25vZGUyIC0+IC4uLy4uL25vZGUvbm9kZTIKKworCitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS9jb3JlX2lkCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvdG9wb2xvZ3kvY29yZV9zaWJsaW5ncworCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L2NvcmVfc2libGluZ3NfbGlzdAorCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3MKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3NfbGlzdAorRGF0ZToJCURlY2VtYmVyIDIwMDgKK0NvbnRhY3Q6CUxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoJQ1BVIHRvcG9sb2d5IGZpbGVzIHRoYXQgZGVzY3JpYmUgYSBsb2dpY2FsIENQVSdzIHJlbGF0aW9uc2hpcAorCQl0byBvdGhlciBjb3JlcyBhbmQgdGhyZWFkcyBpbiB0aGUgc2FtZSBwaHlzaWNhbCBwYWNrYWdlLgorCisJCU9uZSBjcHUjIGRpcmVjdG9yeSBpcyBjcmVhdGVkIHBlciBsb2dpY2FsIENQVSBpbiB0aGUgc3lzdGVtLAorCQllLmcuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyLy4KKworCQlCcmllZmx5LCB0aGUgZmlsZXMgYWJvdmUgYXJlOgorCisJCWNvcmVfaWQ6IHRoZSBDUFUgY29yZSBJRCBvZiBjcHUjLiBUeXBpY2FsbHkgaXQgaXMgdGhlCisJCWhhcmR3YXJlIHBsYXRmb3JtJ3MgaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4KKwkJVGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKworCQljb3JlX3NpYmxpbmdzOiBpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZSB0aHJlYWRzCisJCXdpdGhpbiB0aGUgc2FtZSBwaHlzaWNhbF9wYWNrYWdlX2lkLgorCisJCWNvcmVfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiB0aGUgbG9naWNhbCBDUFUKKwkJbnVtYmVycyB3aXRoaW4gdGhlIHNhbWUgcGh5c2ljYWxfcGFja2FnZV9pZCBhcyBjcHUjLgorCisJCXBoeXNpY2FsX3BhY2thZ2VfaWQ6IHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1Iy4gVHlwaWNhbGx5CisJCWNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwgc29ja2V0IG51bWJlciwgYnV0IHRoZSBhY3R1YWwgdmFsdWUKKwkJaXMgYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKKwkJdGhyZWFkX3NpYmxpbmdzOiBpbnRlcm5lbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZQorCQl0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZSBjb3JlIGFzIGNwdSMKKworCQl0aHJlYWRfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiBjcHUjJ3MgaGFyZHdhcmUKKwkJdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUgY29yZSBhcyBjcHUjCisKKwkJU2VlIERvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVpZGxlL2N1cnJlbnRfZHJpdmVyCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdWlkbGUvY3VycmVudF9nb3Zlcm5lcl9ybworRGF0ZToJCVNlcHRlbWJlciAyMDA3CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGNwdWlkbGUgcG9saWN5IGFuZCBtZWNoYW5pc20KKworCQlWYXJpb3VzIENQVXMgdG9kYXkgc3VwcG9ydCBtdWx0aXBsZSBpZGxlIGxldmVscyB0aGF0IGFyZQorCQlkaWZmZXJlbnRpYXRlZCBieSB2YXJ5aW5nIGV4aXQgbGF0ZW5jaWVzIGFuZCBwb3dlcgorCQljb25zdW1wdGlvbiBkdXJpbmcgaWRsZS4KKworCQlJZGxlIHBvbGljeSAoZ292ZXJub3IpIGlzIGRpZmZlcmVudGlhdGVkIGZyb20gaWRsZSBtZWNoYW5pc20KKwkJKGRyaXZlcikKKworCQljdXJyZW50X2RyaXZlcjogZGlzcGxheXMgY3VycmVudCBpZGxlIG1lY2hhbmlzbQorCisJCWN1cnJlbnRfZ292ZXJub3Jfcm86IGRpc3BsYXlzIGN1cnJlbnQgaWRsZSBwb2xpY3kKKworCQlTZWUgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9jcHVpZGxlLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitXaGF0OiAgICAgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY2FjaGUvaW5kZXgqL2NhY2hlX2Rpc2FibGVfWAorRGF0ZTogICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI3CitDb250YWN0OgltYXJrLmxhbmdzZG9yZkBhbWQuY29tCitEZXNjcmlwdGlvbjoJVGhlc2UgZmlsZXMgZXhpc3QgaW4gZXZlcnkgY3B1J3MgY2FjaGUgaW5kZXggZGlyZWN0b3JpZXMuCisJCVRoZXJlIGFyZSBjdXJyZW50bHkgMiBjYWNoZV9kaXNhYmxlXyMgZmlsZXMgaW4gZWFjaAorCQlkaXJlY3RvcnkuICBSZWFkaW5nIGZyb20gdGhlc2UgZmlsZXMgb24gYSBzdXBwb3J0ZWQKKwkJcHJvY2Vzc29yIHdpbGwgcmV0dXJuIHRoYXQgY2FjaGUgZGlzYWJsZSBpbmRleCB2YWx1ZQorCQlmb3IgdGhhdCBwcm9jZXNzb3IgYW5kIG5vZGUuICBXcml0aW5nIHRvIG9uZSBvZiB0aGVzZQorCQlmaWxlcyB3aWxsIGNhdXNlIHRoZSBzcGVjaWZpY2VkIGNhY2hlIGluZGV4IHRvIGJlIGRpc2FibGVkLgorCisJCUN1cnJlbnRseSwgb25seSBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzIHN1cHBvcnQgY2FjaGUgaW5kZXgKKwkJZGlzYWJsZSwgYW5kIG9ubHkgZm9yIHRoZWlyIEwzIGNhY2hlcy4gIFNlZSB0aGUgQklPUyBhbmQKKwkJS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGF0CisJCWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzMxMTE2LVB1YmxpYy1HSC1CS0RHXzMuMjBfMi00LTA5LnBkZgorCQlmb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgZGV0YWlscyBvbiB0aGUKKwkJY2FjaGUgaW5kZXggZGlzYWJsZS4KK1VzZXJzOiAgICBqb2FjaGltLmRlZ3VhcmFAYW1kLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggYjdmOWQzYi4uNzI2NTFmNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0yMzIsNyArMjMyLDcgQEAKIFdoZW4gc2VuZGluZyBwYXRjaGVzIHRvIExpbnVzLCBhbHdheXMgZm9sbG93IHN0ZXAgIzcuCiAKIExhcmdlIGNoYW5nZXMgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgbWFpbGluZyBsaXN0cywgYW5kIHNvbWUKLW1haW50YWluZXJzLiAgSWYgeW91ciBwYXRjaCwgdW5jb21wcmVzc2VkLCBleGNlZWRzIDQwIGtCIGluIHNpemUsCittYWludGFpbmVycy4gIElmIHlvdXIgcGF0Y2gsIHVuY29tcHJlc3NlZCwgZXhjZWVkcyAzMDAga0IgaW4gc2l6ZSwKIGl0IGlzIHByZWZlcnJlZCB0aGF0IHlvdSBzdG9yZSB5b3VyIHBhdGNoIG9uIGFuIEludGVybmV0LWFjY2Vzc2libGUKIHNlcnZlciwgYW5kIHByb3ZpZGUgaW5zdGVhZCBhIFVSTCAobGluaykgcG9pbnRpbmcgdG8geW91ciBwYXRjaC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vdGNtLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmZDkzNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKQEAgLTAsMCArMSwxNDcgQEAKK0FSTSBUQ00gKFRpZ2h0bHktQ291cGxlZCBNZW1vcnkpIGhhbmRsaW5nIGluIExpbnV4CistLS0tCitXcml0dGVuIGJ5IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CisKK1NvbWUgQVJNIFNvQzpzIGhhdmUgYSBzby1jYWxsZWQgVENNIChUaWdodGx5LUNvdXBsZWQgTWVtb3J5KS4KK1RoaXMgaXMgdXN1YWxseSBqdXN0IGEgZmV3ICg0LTY0KSBLaUIgb2YgUkFNIGluc2lkZSB0aGUgQVJNCitwcm9jZXNzb3IuCisKK0R1ZSB0byBiZWluZyBlbWJlZGRlZCBpbnNpZGUgdGhlIENQVSBUaGUgVENNIGhhcyBhCitIYXJ2YXJkLWFyY2hpdGVjdHVyZSwgc28gdGhlcmUgaXMgYW4gSVRDTSAoaW5zdHJ1Y3Rpb24gVENNKQorYW5kIGEgRFRDTSAoZGF0YSBUQ00pLiBUaGUgRFRDTSBjYW4gbm90IGNvbnRhaW4gYW55CitpbnN0cnVjdGlvbnMsIGJ1dCB0aGUgSVRDTSBjYW4gYWN0dWFsbHkgY29udGFpbiBkYXRhLgorVGhlIHNpemUgb2YgRFRDTSBvciBJVENNIGlzIG1pbmltdW0gNEtpQiBzbyB0aGUgdHlwaWNhbAorbWluaW11bSBjb25maWd1cmF0aW9uIGlzIDRLaUIgSVRDTSBhbmQgNEtpQiBEVENNLgorCitBUk0gQ1BVOnMgaGF2ZSBzcGVjaWFsIHJlZ2lzdGVycyB0byByZWFkIG91dCBzdGF0dXMsIHBoeXNpY2FsCitsb2NhdGlvbiBhbmQgc2l6ZSBvZiBUQ00gbWVtb3JpZXMuIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAorZGVmaW5lcyBhIENQVUlEX1RDTSByZWdpc3RlciB0aGF0IHlvdSBjYW4gcmVhZCBvdXQgZnJvbSB0aGUKK3N5c3RlbSBjb250cm9sIGNvcHJvY2Vzc29yLiBEb2N1bWVudGF0aW9uIGZyb20gQVJNIGNhbiBiZSBmb3VuZAorYXQgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbSwgc2VhcmNoIGZvciAiVENNIFN0YXR1cyBSZWdpc3RlciIKK3RvIHNlZSBkb2N1bWVudHMgZm9yIGFsbCBDUFVzLiBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgeW91IGNhbgorZGV0ZXJtaW5lIGlmIElUQ00gKGJpdCAwKSBhbmQvb3IgRFRDTSAoYml0IDE2KSBpcyBwcmVzZW50IGluIHRoZQorbWFjaGluZS4KKworVGhlcmUgaXMgZnVydGhlciBhIFRDTSByZWdpb24gcmVnaXN0ZXIgKHNlYXJjaCBmb3IgIlRDTSBSZWdpb24KK1JlZ2lzdGVycyIgYXQgdGhlIEFSTSBzaXRlKSB0aGF0IGNhbiByZXBvcnQgYW5kIG1vZGlmeSB0aGUgbG9jYXRpb24KK3NpemUgb2YgVENNIG1lbW9yaWVzIGF0IHJ1bnRpbWUuIFRoaXMgaXMgdXNlZCB0byByZWFkIG91dCBhbmQgbW9kaWZ5CitUQ00gbG9jYXRpb24gYW5kIHNpemUuIE5vdGljZSB0aGF0IHRoaXMgaXMgbm90IGEgTU1VIHRhYmxlOiB5b3UKK2FjdHVhbGx5IG1vdmUgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBUQ00gYXJvdW5kLiBBdCB0aGUKK3BsYWNlIHlvdSBwdXQgaXQsIGl0IHdpbGwgbWFzayBhbnkgdW5kZXJseWluZyBSQU0gZnJvbSB0aGUKK0NQVSBzbyBpdCBpcyB1c3VhbGx5IHdpc2Ugbm90IHRvIG92ZXJsYXAgYW55IHBoeXNpY2FsIFJBTSB3aXRoCit0aGUgVENNLgorCitUaGUgVENNIG1lbW9yeSBjYW4gdGhlbiBiZSByZW1hcHBlZCB0byBhbm90aGVyIGFkZHJlc3MgYWdhaW4gdXNpbmcKK3RoZSBNTVUsIGJ1dCBub3RpY2UgdGhhdCB0aGUgVENNIGlmIG9mdGVuIHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZQordGhlIE1NVSBpcyB0dXJuZWQgb2ZmLiBUbyBhdm9pZCBjb25mdXNpb24gdGhlIGN1cnJlbnQgTGludXgKK2ltcGxlbWVudGF0aW9uIHdpbGwgbWFwIHRoZSBUQ00gMSB0byAxIGZyb20gcGh5c2ljYWwgdG8gdmlydHVhbAorbWVtb3J5IGluIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIG1hY2hpbmUuCisKK1RDTSBpcyB1c2VkIGZvciBhIGZldyB0aGluZ3M6CisKKy0gRklRIGFuZCBvdGhlciBpbnRlcnJ1cHQgaGFuZGxlcnMgdGhhdCBuZWVkIGRldGVybWluaXN0aWMKKyAgdGltaW5nIGFuZCBjYW5ub3Qgd2FpdCBmb3IgY2FjaGUgbWlzc2VzLgorCistIElkbGUgbG9vcHMgd2hlcmUgYWxsIGV4dGVybmFsIFJBTSBpcyBzZXQgdG8gc2VsZi1yZWZyZXNoCisgIHJldGVudGlvbiBtb2RlLCBzbyBvbmx5IG9uLWNoaXAgUkFNIGlzIGFjY2Vzc2libGUgYnkKKyAgdGhlIENQVSBhbmQgdGhlbiB3ZSBoYW5nIGluc2lkZSBJVENNIHdhaXRpbmcgZm9yIGFuCisgIGludGVycnVwdC4KKworLSBPdGhlciBvcGVyYXRpb25zIHdoaWNoIGltcGxpZXMgc2h1dHRpbmcgb2ZmIG9yIHJlY29uZmlndXJpbmcKKyAgdGhlIGV4dGVybmFsIFJBTSBjb250cm9sbGVyLgorCitUaGVyZSBpcyBhbiBpbnRlcmZhY2UgZm9yIHVzaW5nIFRDTSBvbiB0aGUgQVJNIGFyY2hpdGVjdHVyZQoraW4gPGFzbS90Y20uaD4uIFVzaW5nIHRoaXMgaW50ZXJmYWNlIGl0IGlzIHBvc3NpYmxlIHRvOgorCistIERlZmluZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiBJVENNIGFuZCBEVENNLgorCistIFRhZyBmdW5jdGlvbnMgdG8gYmUgY29tcGlsZWQgaW50byBJVENNLgorCistIFRhZyBkYXRhIGFuZCBjb25zdGFudHMgdG8gYmUgYWxsb2NhdGVkIHRvIERUQ00gYW5kIElUQ00uCisKKy0gSGF2ZSB0aGUgcmVtYWluaW5nIFRDTSBSQU0gYWRkZWQgdG8gYSBzcGVjaWFsCisgIGFsbG9jYXRpb24gcG9vbCB3aXRoIGdlbl9wb29sX2NyZWF0ZSgpIGFuZCBnZW5fcG9vbF9hZGQoKQorICBhbmQgcHJvdmljZSB0Y21fYWxsb2MoKSBhbmQgdGNtX2ZyZWUoKSBmb3IgdGhpcworICBtZW1vcnkuIFN1Y2ggYSBoZWFwIGlzIGdyZWF0IGZvciB0aGluZ3MgbGlrZSBzYXZpbmcKKyAgZGV2aWNlIHN0YXRlIHdoZW4gc2h1dHRpbmcgb2ZmIGRldmljZSBwb3dlciBkb21haW5zLgorCitBIG1hY2hpbmUgdGhhdCBoYXMgVENNIG1lbW9yeSBzaGFsbCBzZWxlY3QgSEFWRV9UQ00gaW4KK2FyY2gvYXJtL0tjb25maWcgZm9yIGl0c2VsZiwgYW5kIHRoZW4gdGhlCityZXN0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdpbGwgZGVwZW5kIG9uIHRoZSBwaHlzaWNhbAorbG9jYXRpb24gYW5kIHNpemUgb2YgSVRDTSBhbmQgRFRDTSB0byBiZSBkZWZpbmVkIGluCittYWNoL21lbW9yeS5oIGZvciB0aGUgbWFjaGluZS4gQ29kZSB0aGF0IG5lZWRzIHRvIHVzZQorVENNIHNoYWxsICNpbmNsdWRlIDxhc20vdGNtLmg+IElmIHRoZSBUQ00gaXMgbm90IGxvY2F0ZWQKK2F0IHRoZSBwbGFjZSBnaXZlbiBpbiBtZW1vcnkuaCBpdCB3aWxsIGJlIG1vdmVkIHVzaW5nCit0aGUgVENNIFJlZ2lvbiByZWdpc3RlcnMuCisKK0Z1bmN0aW9ucyB0byBnbyBpbnRvIGl0Y20gY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CitpbnQgX190Y21mdW5jIGZvbyhpbnQgYmFyKTsKKworVmFyaWFibGVzIHRvIGdvIGludG8gZHRjbSBjYW4gYmUgdGFnZ2VkIGxpa2UgdGhpczoKK2ludCBfX3RjbWRhdGEgZm9vOworCitDb25zdGFudHMgY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CitpbnQgX190Y21jb25zdCBmb287CisKK1RvIHB1dCBhc3NlbWJsZXIgaW50byBUQ00ganVzdCB1c2UKKy5zZWN0aW9uICIudGNtLnRleHQiIG9yIC5zZWN0aW9uICIudGNtLmRhdGEiCityZXNwZWN0aXZlbHkuCisKK0V4YW1wbGUgY29kZToKKworI2luY2x1ZGUgPGFzbS90Y20uaD4KKworLyogVW5pbml0aWFsaXplZCBkYXRhICovCitzdGF0aWMgdTMyIF9fdGNtZGF0YSB0Y212YXI7CisvKiBJbml0aWFsaXplZCBkYXRhICovCitzdGF0aWMgdTMyIF9fdGNtZGF0YSB0Y21hc3NpZ25lZCA9IDB4MkJBREJBQkVVOworLyogQ29uc3RhbnQgKi8KK3N0YXRpYyBjb25zdCB1MzIgX190Y21jb25zdCB0Y21jb25zdCA9IDB4Q0FGRUJBQkVVOworCitzdGF0aWMgdm9pZCBfX3RjbWxvY2FsZnVuYyB0Y21fdG9fdGNtKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQorCQl0Y212YXIgKys7Cit9CisKK3N0YXRpYyB2b2lkIF9fdGNtZnVuYyBoZWxsb190Y20odm9pZCkKK3sKKwkvKiBTb21lIGFic3RyYWN0IGNvZGUgdGhhdCBydW5zIGluIElUQ00gKi8KKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJdGNtdmFyICsrOworCX0KKwl0Y21fdG9fdGNtKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZXN0X3RjbSh2b2lkKQoreworCXUzMiAqdGNtZW07CisJaW50IGk7CisKKwloZWxsb190Y20oKTsKKwlwcmludGsoIkhlbGxvIFRDTSBleGVjdXRlZCBmcm9tIElUQ00gUkFNXG4iKTsKKworCXByaW50aygiVENNIHZhcmlhYmxlIGZyb20gdGVzdHJ1bjogJXUgQCAlcFxuIiwgdGNtdmFyLCAmdGNtdmFyKTsKKwl0Y212YXIgPSAweERFQURCRUVGVTsKKwlwcmludGsoIlRDTSB2YXJpYWJsZTogMHgleCBAICVwXG4iLCB0Y212YXIsICZ0Y212YXIpOworCisJcHJpbnRrKCJUQ00gYXNzaWduZWQgdmFyaWFibGU6IDB4JXggQCAlcFxuIiwgdGNtYXNzaWduZWQsICZ0Y21hc3NpZ25lZCk7CisKKwlwcmludGsoIlRDTSBjb25zdGFudDogMHgleCBAICVwXG4iLCB0Y21jb25zdCwgJnRjbWNvbnN0KTsKKworCS8qIEFsbG9jYXRlIHNvbWUgVENNIG1lbW9yeSBmcm9tIHRoZSBwb29sICovCisJdGNtZW0gPSB0Y21fYWxsb2MoMjApOworCWlmICh0Y21lbSkgeworCQlwcmludGsoIlRDTSBBbGxvY2F0ZWQgMjAgYnl0ZXMgb2YgVENNIEAgJXBcbiIsIHRjbWVtKTsKKwkJdGNtZW1bMF0gPSAweERFQURCRUVGVTsKKwkJdGNtZW1bMV0gPSAweDJCQURCQUJFVTsKKwkJdGNtZW1bMl0gPSAweENBRkVCQUJFVTsKKwkJdGNtZW1bM10gPSAweERFQURCRUVGVTsKKwkJdGNtZW1bNF0gPSAweDJCQURCQUJFVTsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJCXByaW50aygiVENNIHRjbWVtWyVkXSA9ICUwOHhcbiIsIGksIHRjbWVtW2ldKTsKKwkJdGNtX2ZyZWUodGNtZW0sIDIwKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKaW5kZXggNDU1ZDRlNi4uMGIzM2JmZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dApAQCAtMjI3LDcgKzIyNywxNCBAQAogRWFjaCBjZ3JvdXAgaXMgcmVwcmVzZW50ZWQgYnkgYSBkaXJlY3RvcnkgaW4gdGhlIGNncm91cCBmaWxlIHN5c3RlbQogY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGZpbGVzIGRlc2NyaWJpbmcgdGhhdCBjZ3JvdXA6CiAKLSAtIHRhc2tzOiBsaXN0IG9mIHRhc2tzIChieSBwaWQpIGF0dGFjaGVkIHRvIHRoYXQgY2dyb3VwCisgLSB0YXNrczogbGlzdCBvZiB0YXNrcyAoYnkgcGlkKSBhdHRhY2hlZCB0byB0aGF0IGNncm91cC4gIFRoaXMgbGlzdAorICAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgc29ydGVkLiAgV3JpdGluZyBhIHRocmVhZCBpZCBpbnRvIHRoaXMgZmlsZQorICAgbW92ZXMgdGhlIHRocmVhZCBpbnRvIHRoaXMgY2dyb3VwLgorIC0gY2dyb3VwLnByb2NzOiBsaXN0IG9mIHRnaWRzIGluIHRoZSBjZ3JvdXAuICBUaGlzIGxpc3QgaXMgbm90CisgICBndWFyYW50ZWVkIHRvIGJlIHNvcnRlZCBvciBmcmVlIG9mIGR1cGxpY2F0ZSB0Z2lkcywgYW5kIHVzZXJzcGFjZQorICAgc2hvdWxkIHNvcnQvdW5pcXVpZnkgdGhlIGxpc3QgaWYgdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4KKyAgIFdyaXRpbmcgYSB0Z2lkIGludG8gdGhpcyBmaWxlIG1vdmVzIGFsbCB0aHJlYWRzIHdpdGggdGhhdCB0Z2lkIGludG8KKyAgIHRoaXMgY2dyb3VwLgogIC0gbm90aWZ5X29uX3JlbGVhc2UgZmxhZzogcnVuIHRoZSByZWxlYXNlIGFnZW50IG9uIGV4aXQ/CiAgLSByZWxlYXNlX2FnZW50OiB0aGUgcGF0aCB0byB1c2UgZm9yIHJlbGVhc2Ugbm90aWZpY2F0aW9ucyAodGhpcyBmaWxlCiAgICBleGlzdHMgaW4gdGhlIHRvcCBjZ3JvdXAgb25seSkKQEAgLTM3NCw3ICszODEsNyBAQAogCiBJbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGZpbmQgc2V2ZXJhbCBmaWxlczoKICMgbHMKLW5vdGlmeV9vbl9yZWxlYXNlIHRhc2tzCitjZ3JvdXAucHJvY3Mgbm90aWZ5X29uX3JlbGVhc2UgdGFza3MKIChwbHVzIHdoYXRldmVyIGZpbGVzIGFkZGVkIGJ5IHRoZSBhdHRhY2hlZCBzdWJzeXN0ZW1zKQogCiBOb3cgYXR0YWNoIHlvdXIgc2hlbGwgdG8gdGhpcyBjZ3JvdXA6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBiL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CmluZGV4IGI0MWYzZTUuLmYxYzVjNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CkBAIC0xLDE1ICsxLDI4IEBACiAKLUV4cG9ydCBjcHUgdG9wb2xvZ3kgaW5mbyB2aWEgc3lzZnMuIEl0ZW1zIChhdHRyaWJ1dGVzKSBhcmUgc2ltaWxhcgorRXhwb3J0IENQVSB0b3BvbG9neSBpbmZvIHZpYSBzeXNmcy4gSXRlbXMgKGF0dHJpYnV0ZXMpIGFyZSBzaW1pbGFyCiB0byAvcHJvYy9jcHVpbmZvLgogCiAxKSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQ6Ci1yZXByZXNlbnQgdGhlIHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgIGNwdSBYOworCisJcGh5c2ljYWwgcGFja2FnZSBpZCBvZiBjcHVYLiBUeXBpY2FsbHkgY29ycmVzcG9uZHMgdG8gYSBwaHlzaWNhbAorCXNvY2tldCBudW1iZXIsIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIGlzIGFyY2hpdGVjdHVyZSBhbmQgcGxhdGZvcm0KKwlkZXBlbmRlbnQuCisKIDIpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvY29yZV9pZDoKLXJlcHJlc2VudCB0aGUgY3B1IGNvcmUgaWQgdG8gY3B1IFg7CisKKwl0aGUgQ1BVIGNvcmUgSUQgb2YgY3B1WC4gVHlwaWNhbGx5IGl0IGlzIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSdzCisJaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4gIFRoZSBhY3R1YWwgdmFsdWUgaXMKKwlhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKwogMykgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS90aHJlYWRfc2libGluZ3M6Ci1yZXByZXNlbnQgdGhlIHRocmVhZCBzaWJsaW5ncyB0byBjcHUgWCBpbiB0aGUgc2FtZSBjb3JlOworCisJaW50ZXJuZWwga2VybmVsIG1hcCBvZiBjcHVYJ3MgaGFyZHdhcmUgdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUKKwljb3JlIGFzIGNwdVgKKwogNCkgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS9jb3JlX3NpYmxpbmdzOgotcmVwcmVzZW50IHRoZSB0aHJlYWQgc2libGluZ3MgdG8gY3B1IFggaW4gdGhlIHNhbWUgcGh5c2ljYWwgcGFja2FnZTsKKworCWludGVybmFsIGtlcm5lbCBtYXAgb2YgY3B1WCdzIGhhcmR3YXJlIHRocmVhZHMgd2l0aGluIHRoZSBzYW1lCisJcGh5c2ljYWxfcGFja2FnZV9pZC4KIAogVG8gaW1wbGVtZW50IGl0IGluIGFuIGFyY2hpdGVjdHVyZS1uZXV0cmFsIHdheSwgYSBuZXcgc291cmNlIGZpbGUsCiBkcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYywgaXMgdG8gZXhwb3J0IHRoZSA0IGF0dHJpYnV0ZXMuCkBAIC0zMiwzMiArNDUsMzIgQEAKIDMpIHRocmVhZF9zaWJsaW5nczoganVzdCB0aGUgZ2l2ZW4gQ1BVCiA0KSBjb3JlX3NpYmxpbmdzOiBqdXN0IHRoZSBnaXZlbiBDUFUKIAotQWRkaXRpb25hbGx5LCBjcHUgdG9wb2xvZ3kgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgdW5kZXIKK0FkZGl0aW9uYWxseSwgQ1BVIHRvcG9sb2d5IGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHVuZGVyCiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdSBhbmQgaW5jbHVkZXMgdGhlc2UgZmlsZXMuICBUaGUgaW50ZXJuYWwKIHNvdXJjZSBmb3IgdGhlIG91dHB1dCBpcyBpbiBicmFja2V0cyAoIltdIikuCiAKLSAgICBrZXJuZWxfbWF4OiB0aGUgbWF4aW11bSBjcHUgaW5kZXggYWxsb3dlZCBieSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCisgICAga2VybmVsX21heDogdGhlIG1heGltdW0gQ1BVIGluZGV4IGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgogCQlbTlJfQ1BVUy0xXQogCi0gICAgb2ZmbGluZToJY3B1cyB0aGF0IGFyZSBub3Qgb25saW5lIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4KKyAgICBvZmZsaW5lOglDUFVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgogCQlIT1RQTFVHR0VEIG9mZiAoc2VlIGNwdS1ob3RwbHVnLnR4dCkgb3IgZXhjZWVkIHRoZSBsaW1pdAotCQlvZiBjcHVzIGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIChrZXJuZWxfbWF4CisJCW9mIENQVXMgYWxsb3dlZCBieSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXgKIAkJYWJvdmUpLiBbfmNwdV9vbmxpbmVfbWFzayArIGNwdXMgPj0gTlJfQ1BVU10KIAotICAgIG9ubGluZToJY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZCBbY3B1X29ubGluZV9tYXNrXQorICAgIG9ubGluZToJQ1BVcyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZCBbY3B1X29ubGluZV9tYXNrXQogCi0gICAgcG9zc2libGU6CWNwdXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlc291cmNlcyBhbmQgY2FuIGJlCisgICAgcG9zc2libGU6CUNQVXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlc291cmNlcyBhbmQgY2FuIGJlCiAJCWJyb3VnaHQgb25saW5lIGlmIHRoZXkgYXJlIHByZXNlbnQuIFtjcHVfcG9zc2libGVfbWFza10KIAotICAgIHByZXNlbnQ6CWNwdXMgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyBiZWluZyBwcmVzZW50IGluIHRoZQorICAgIHByZXNlbnQ6CUNQVXMgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyBiZWluZyBwcmVzZW50IGluIHRoZQogCQlzeXN0ZW0uIFtjcHVfcHJlc2VudF9tYXNrXQogCiBUaGUgZm9ybWF0IGZvciB0aGUgYWJvdmUgb3V0cHV0IGlzIGNvbXBhdGlibGUgd2l0aCBjcHVsaXN0X3BhcnNlKCkKIFtzZWUgPGxpbnV4L2NwdW1hc2suaD5dLiAgU29tZSBleGFtcGxlcyBmb2xsb3cuCiAKLUluIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDY0IGNwdXMgaW4gdGhlIHN5c3RlbSBidXQgY3B1cyAzMi02MyBleGNlZWQKK0luIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDY0IENQVXMgaW4gdGhlIHN5c3RlbSBidXQgY3B1cyAzMi02MyBleGNlZWQKIHRoZSBrZXJuZWwgbWF4IHdoaWNoIGlzIGxpbWl0ZWQgdG8gMC4uMzEgYnkgdGhlIE5SX0NQVVMgY29uZmlnIG9wdGlvbgotYmVpbmcgMzIuICBOb3RlIGFsc28gdGhhdCBjcHVzIDIgYW5kIDQtMzEgYXJlIG5vdCBvbmxpbmUgYnV0IGNvdWxkIGJlCitiZWluZyAzMi4gIE5vdGUgYWxzbyB0aGF0IENQVXMgMiBhbmQgNC0zMSBhcmUgbm90IG9ubGluZSBidXQgY291bGQgYmUKIGJyb3VnaHQgb25saW5lIGFzIHRoZXkgYXJlIGJvdGggcHJlc2VudCBhbmQgcG9zc2libGUuCiAKICAgICAga2VybmVsX21heDogMzEKQEAgLTY3LDggKzgwLDggQEAKICAgICAgICAgcHJlc2VudDogMC0zMQogCiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBOUl9DUFVTIGNvbmZpZyBvcHRpb24gaXMgMTI4LCBidXQgdGhlIGtlcm5lbCB3YXMKLXN0YXJ0ZWQgd2l0aCBwb3NzaWJsZV9jcHVzPTE0NC4gIFRoZXJlIGFyZSA0IGNwdXMgaW4gdGhlIHN5c3RlbSBhbmQgY3B1Mgotd2FzIG1hbnVhbGx5IHRha2VuIG9mZmxpbmUgKGFuZCBpcyB0aGUgb25seSBjcHUgdGhhdCBjYW4gYmUgYnJvdWdodAorc3RhcnRlZCB3aXRoIHBvc3NpYmxlX2NwdXM9MTQ0LiAgVGhlcmUgYXJlIDQgQ1BVcyBpbiB0aGUgc3lzdGVtIGFuZCBjcHUyCit3YXMgbWFudWFsbHkgdGFrZW4gb2ZmbGluZSAoYW5kIGlzIHRoZSBvbmx5IENQVSB0aGF0IGNhbiBiZSBicm91Z2h0CiBvbmxpbmUuKQogCiAgICAgIGtlcm5lbF9tYXg6IDEyNwpAQCAtNzgsNCArOTEsNCBAQAogICAgICAgICBwcmVzZW50OiAwLTMKIAogU2VlIGNwdS1ob3RwbHVnLnR4dCBmb3IgdGhlIHBvc3NpYmxlX2NwdXM9TlVNIGtlcm5lbCBzdGFydCBwYXJhbWV0ZXIKLWFzIHdlbGwgYXMgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyBjcHVtYXNrJ3MuCithcyB3ZWxsIGFzIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMgY3B1bWFza3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dAppbmRleCA1OWE5MWU1Li42MTFmNWE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKQEAgLTY0LDE0ICs2NCwxNCBAQAogCiBCZXJuaGFyZCBLYWluZGwgZW5oYW5jZWQgZmlyZXNjb3BlIHRvIHN1cHBvcnQgYWNjZXNzaW5nIDY0LWJpdCBtYWNoaW5lcwogZnJvbSAzMi1iaXQgZmlyZXNjb3BlIGFuZCB2aWNlIHZlcnNhOgotLSBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL3Rvb2xzL2ZpcmVzY29wZS0wLjIuMi50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZXNjb3BlLTAuMi4yLnRhci5iejIKIAogYW5kIGhlIGltcGxlbWVudGVkIGZhc3Qgc3lzdGVtIGR1bXAgKGFscGhhIHZlcnNpb24gLSByZWFkIFJFQURNRS50eHQpOgotLSBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL3Rvb2xzL2ZpcmVkdW1wLTAuMS50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZWR1bXAtMC4xLnRhci5iejIKIAogVGhlcmUgaXMgYWxzbyBhIGdkYiBwcm94eSBmb3IgZmlyZXdpcmUgd2hpY2ggYWxsb3dzIHRvIHVzZSBnZGIgdG8gYWNjZXNzCiBkYXRhIHdoaWNoIGNhbiBiZSByZWZlcmVuY2VkIGZyb20gc3ltYm9scyBmb3VuZCBieSBnZGIgaW4gdm1saW51eDoKLS0gZnRwOi8vZnRwLnN1c2UuZGUvcHJpdmF0ZS9iay9maXJld2lyZS90b29scy9maXJlcHJveHktMC4zMy50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZXByb3h5LTAuMzMudGFyLmJ6MgogCiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBnZGIgcHJveHkgKGZpcmVwcm94eS0wLjM0KSBjYW4gY29tbXVuaWNhdGUgKG5vdAogeWV0IHN0YWJsZSkgd2l0aCBrZ2RiIG92ZXIgYW4gbWVtb3J5LWJhc2VkIGNvbW11bmljYXRpb24gbW9kdWxlIChrZ2Rib20pLgpAQCAtMTc4LDcgKzE3OCw3IEBACiAKIE5vdGVzCiAtLS0tLQotRG9jdW1lbnRhdGlvbiBhbmQgc3BlY2lmaWNhdGlvbnM6IGZ0cDovL2Z0cC5zdXNlLmRlL3ByaXZhdGUvYmsvZmlyZXdpcmUvZG9jcworRG9jdW1lbnRhdGlvbiBhbmQgc3BlY2lmaWNhdGlvbnM6IGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvCiAKIEZpcmVXaXJlIGlzIGEgdHJhZGVtYXJrIG9mIEFwcGxlIEluYy4gLSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2UgcmVmZXIgdG86CiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZpcmVXaXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggODlhNDdiNS4uYmM2OTNmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNDE4LDYgKzQxOCwxNCBAQAogV2h5OglTaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdXNlcnNwYWNlLCBwb2xpY3kgZGFlbW9uLgogV2hvOglKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJQ09ORklHX0lOT1RJRlkKK1doZW46CTIuNi4zMworV2h5OglsYXN0IHVzZXIgKGF1ZGl0KSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgbmV3ZXIgbW9yZSBnZW5lcmljCisJYW5kIG1vcmUgZWFzaWx5IG1haW50YWluZWQgZnNub3RpZnkgc3Vic3lzdGVtCitXaG86CUVyaWMgUGFyaXMgPGVwYXJpc0ByZWRoYXQuY29tPgorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQ6CWxvY2tfcG9saWN5X3J3c2VtXyogYW5kIHVubG9ja19wb2xpY3lfcndzZW1fKiB3aWxsIG5vdCBiZQpAQCAtNDUxLDMgKzQ1OSwzMyBAQAogCXdpbGwgYWxzbyBhbGxvdyBtYWtpbmcgQUxTQSBPU1MgZW11bGF0aW9uIGluZGVwZW5kZW50IG9mCiAJc291bmRfY29yZS4gIFRoZSBkZXBlbmRlbmN5IHdpbGwgYmUgYnJva2VuIHRoZW4gdG9vLgogV2hvOglUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJU3VwcG9ydCBmb3IgVk13YXJlJ3MgZ3Vlc3QgcGFyYXZpcnR1bGlhemF0aW9uIHRlY2huaXF1ZSBbVk1JXSB3aWxsIGJlCisJZHJvcHBlZC4KK1doZW46CTIuNi4zNyBvciBlYXJsaWVyLgorV2h5OglXaXRoIHRoZSByZWNlbnQgaW5ub3ZhdGlvbnMgaW4gQ1BVIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB0ZWNobm9sb2dpZXMKKwlmcm9tIEludGVsIGFuZCBBTUQsIFZNd2FyZSByYW4gYSBmZXcgZXhwZXJpbWVudHMgdG8gY29tcGFyZSB0aGVzZQorCXRlY2huaXF1ZXMgdG8gZ3Vlc3QgcGFyYXZpcnR1YWxpemF0aW9uIHRlY2huaXF1ZSBvbiBWTXdhcmUncyBwbGF0Zm9ybS4KKwlUaGVzZSBoYXJkd2FyZSBhc3Npc3RlZCB2aXJ0dWFsaXphdGlvbiB0ZWNobmlxdWVzIGhhdmUgb3V0cGVyZm9ybWVkIHRoZQorCXBlcmZvcm1hbmNlIGJlbmVmaXRzIHByb3ZpZGVkIGJ5IFZNSSBpbiBtb3N0IG9mIHRoZSB3b3JrbG9hZHMuIFZNd2FyZQorCWV4cGVjdHMgdGhhdCB0aGVzZSBoYXJkd2FyZSBmZWF0dXJlcyB3aWxsIGJlIHViaXF1aXRvdXMgaW4gYSBjb3VwbGUgb2YKKwl5ZWFycywgYXMgYSByZXN1bHQsIFZNd2FyZSBoYXMgc3RhcnRlZCBhIHBoYXNlZCByZXRpcmVtZW50IG9mIHRoaXMKKwlmZWF0dXJlIGZyb20gdGhlIGh5cGVydmlzb3IuIFdlIHdpbGwgYmUgcmVtb3ZpbmcgdGhpcyBmZWF0dXJlIGZyb20gdGhlCisJS2VybmVsIHRvby4gUmlnaHQgbm93IHdlIGFyZSB0YXJnZXRpbmcgMi42LjM3IGJ1dCBjYW4gcmV0aXJlIGVhcmxpZXIgaWYKKwl0ZWNobmljYWwgcmVhc29ucyAocmVhZCBvcHBvcnR1bml0eSB0byByZW1vdmUgbWFqb3IgY2h1bmsgb2YgcHZvcHMpCisJYXJpc2UuCisKKwlQbGVhc2Ugbm90ZSB0aGF0IFZNSSBoYXMgYWx3YXlzIGJlZW4gYW4gb3B0aW1pemF0aW9uIGFuZCBub24tVk1JIGtlcm5lbHMKKwlzdGlsbCB3b3JrIGZpbmUgb24gVk13YXJlJ3MgcGxhdGZvcm0uCisJTGF0ZXN0IHZlcnNpb25zIG9mIFZNd2FyZSdzIHByb2R1Y3Qgd2hpY2ggc3VwcG9ydCBWTUkgYXJlLAorCVdvcmtzdGF0aW9uIDcuMCBhbmQgVlNwaGVyZSA0LjAgb24gRVNYIHNpZGUsIGZ1dHVyZSBtYWludGFpbmVuY2UKKwlyZWxlYXNlcyBmb3IgdGhlc2UgcHJvZHVjdHMgd2lsbCBjb250aW51ZSBzdXBwb3J0aW5nIFZNSS4KKworCUZvciBtb3JlIGRldGFpbHMgYWJvdXQgVk1JIHJldGlyZW1lbnQgdGFrZSBhIGxvb2sgYXQgdGhpcywKKwlodHRwOi8vYmxvZ3Mudm13YXJlLmNvbS9ndWVzdG9zZ3VpZGUvMjAwOS8wOS92bWktcmV0aXJlbWVudC5odG1sCisKK1dobzoJQWxvayBOIEthdGFyaWEgPGFrYXRhcmlhQHZtd2FyZS5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CmluZGV4IDU3MGY5YmQuLjA1ZDVjZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dApAQCAtMTIzLDEwICsxMjMsMTggQEAKIAogc2I9bgkJCVVzZSBhbHRlcm5hdGUgc3VwZXJibG9jayBhdCB0aGlzIGxvY2F0aW9uLgogCi1xdW90YQotbm9xdW90YQotZ3JwcXVvdGEKLXVzcnF1b3RhCitxdW90YQkJCVRoZXNlIG9wdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIGZpbGVzeXN0ZW0uIFRoZXkKK25vcXVvdGEJCQlhcmUgdXNlZCBvbmx5IGJ5IHF1b3RhIHRvb2xzIHRvIHJlY29nbml6ZSB2b2x1bWVzCitncnBxdW90YQkJd2hlcmUgcXVvdGEgc2hvdWxkIGJlIHR1cm5lZCBvbi4gU2VlIGRvY3VtZW50YXRpb24KK3VzcnF1b3RhCQlpbiB0aGUgcXVvdGEtdG9vbHMgcGFja2FnZSBmb3IgbW9yZSBkZXRhaWxzCisJCQkoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhKS4KKworanFmbXQ9PHF1b3RhIHR5cGU+CVRoZXNlIG9wdGlvbnMgdGVsbCBmaWxlc3lzdGVtIGRldGFpbHMgYWJvdXQgcXVvdGEKK3VzcmpxdW90YT08ZmlsZT4Jc28gdGhhdCBxdW90YSBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvcGVybHkgdXBkYXRlZAorZ3JwanF1b3RhPTxmaWxlPglkdXJpbmcgam91cm5hbCByZXBsYXkuIFRoZXkgcmVwbGFjZSB0aGUgYWJvdmUKKwkJCXF1b3RhIG9wdGlvbnMuIFNlZSBkb2N1bWVudGF0aW9uIGluIHRoZSBxdW90YS10b29scworCQkJcGFja2FnZSBmb3IgbW9yZSBkZXRhaWxzCisJCQkoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhKS4KIAogYmgJCSgqKQlleHQzIGFzc29jaWF0ZXMgYnVmZmVyIGhlYWRzIHRvIGRhdGEgcGFnZXMgdG8KIG5vYmgJCQkoYSkgY2FjaGUgZGlzayBibG9jayBtYXBwaW5nIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAppbmRleCAxOGI1ZWM4Li42ZDk0ZTA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKQEAgLTEzNCw5ICsxMzQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgIAltb3VudCBvcHRpb25zICJybyxub2xvYWQiIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQKIAkJICAgICAJd3JpdGVzIHRvIHRoZSBmaWxlc3lzdGVtLgogCitqb3VybmFsX2NoZWNrc3VtCUVuYWJsZSBjaGVja3N1bW1pbmcgb2YgdGhlIGpvdXJuYWwgdHJhbnNhY3Rpb25zLgorCQkJVGhpcyB3aWxsIGFsbG93IHRoZSByZWNvdmVyeSBjb2RlIGluIGUyZnNjayBhbmQgdGhlCisJCQlrZXJuZWwgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gaW4gdGhlIGtlcm5lbC4gIEl0IGlzIGEKKwkJCWNvbXBhdGlibGUgY2hhbmdlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgb2xkZXIga2VybmVscy4KKwogam91cm5hbF9hc3luY19jb21taXQJQ29tbWl0IGJsb2NrIGNhbiBiZSB3cml0dGVuIHRvIGRpc2sgd2l0aG91dCB3YWl0aW5nCiAJCQlmb3IgZGVzY3JpcHRvciBibG9ja3MuIElmIGVuYWJsZWQgb2xkZXIga2VybmVscyBjYW5ub3QKLQkJCW1vdW50IHRoZSBkZXZpY2UuCisJCQltb3VudCB0aGUgZGV2aWNlLiBUaGlzIHdpbGwgZW5hYmxlICdqb3VybmFsX2NoZWNrc3VtJworCQkJaW50ZXJuYWxseS4KIAogam91cm5hbD11cGRhdGUJCVVwZGF0ZSB0aGUgZXh0NCBmaWxlIHN5c3RlbSdzIGpvdXJuYWwgdG8gdGhlIGN1cnJlbnQKIAkJCWZvcm1hdC4KQEAgLTI4Miw5ICsyODgsMTYgQEAKIAkJCXRvIHVzZSBmb3IgYWxsb2NhdGlvbiBzaXplIGFuZCBhbGlnbm1lbnQuIEZvciBSQUlENS82CiAJCQlzeXN0ZW1zIHRoaXMgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgZGF0YQogCQkJZGlza3MgKiAgUkFJRCBjaHVuayBzaXplIGluIGZpbGUgc3lzdGVtIGJsb2Nrcy4KLWRlbGFsbG9jCSgqKQlEZWZlcnJpbmcgYmxvY2sgYWxsb2NhdGlvbiB1bnRpbCB3cml0ZS1vdXQgdGltZS4KLW5vZGVsYWxsb2MJCURpc2FibGUgZGVsYXllZCBhbGxvY2F0aW9uLiBCbG9ja3MgYXJlIGFsbG9jYXRpb24KLQkJCXdoZW4gZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHRvIHBhZ2UgY2FjaGUuCisKK2RlbGFsbG9jCSgqKQlEZWZlciBibG9jayBhbGxvY2F0aW9uIHVudGlsIGp1c3QgYmVmb3JlIGV4dDQKKwkJCXdyaXRlcyBvdXQgdGhlIGJsb2NrKHMpIGluIHF1ZXN0aW9uLiAgVGhpcworCQkJYWxsb3dzIGV4dDQgdG8gYmV0dGVyIGFsbG9jYXRpb24gZGVjaXNpb25zCisJCQltb3JlIGVmZmljaWVudGx5Lgorbm9kZWxhbGxvYwkJRGlzYWJsZSBkZWxheWVkIGFsbG9jYXRpb24uICBCbG9ja3MgYXJlIGFsbG9jYXRlZAorCQkJd2hlbiB0aGUgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdG8gdGhlCisJCQlwYWdlIGNhY2hlLCBlaXRoZXIgdmlhIHRoZSB3cml0ZSgyKSBzeXN0ZW0gY2FsbAorCQkJb3Igd2hlbiBhbiBtbWFwJ2VkIHBhZ2Ugd2hpY2ggd2FzIHByZXZpb3VzbHkKKwkJCXVuYWxsb2NhdGVkIGlzIHdyaXR0ZW4gZm9yIHRoZSBmaXJzdCB0aW1lLgogCiBtYXhfYmF0Y2hfdGltZT11c2VjCU1heGltdW0gYW1vdW50IG9mIHRpbWUgZXh0NCBzaG91bGQgd2FpdCBmb3IKIAkJCWFkZGl0aW9uYWwgZmlsZXN5c3RlbSBvcGVyYXRpb25zIHRvIGJlIGJhdGNoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBiNWFlZTc4Li4yYzQ4Zjk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTExMTMsNyArMTExMyw2IEBACiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KICBGaWxlICAgICAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBtYl9ncm91cHMgICAgICAgZGV0YWlscyBvZiBtdWx0aWJsb2NrIGFsbG9jYXRvciBidWRkeSBjYWNoZSBvZiBmcmVlIGJsb2NrcwotIG1iX2hpc3RvcnkgICAgICBtdWx0aWJsb2NrIGFsbG9jYXRpb24gaGlzdG9yeQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKaW5kZXggYjU4Yjg0Yi4uZWVkNTIwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQudHh0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJIHdpbm50OiBlbXVsYXRlIHRoZSBXaW5kb3dzIE5UIHJ1bGUgZm9yIGRpc3BsYXkvY3JlYXRlLgogCQkgbWl4ZWQ6IGVtdWxhdGUgdGhlIFdpbmRvd3MgTlQgcnVsZSBmb3IgZGlzcGxheSwKIAkJCWVtdWxhdGUgdGhlIFdpbmRvd3MgOTUgcnVsZSBmb3IgY3JlYXRlLgotCQkgRGVmYXVsdCBzZXR0aW5nIGlzIGBsb3dlcicuCisJCSBEZWZhdWx0IHNldHRpbmcgaXMgYG1peGVkJy4KIAogdHo9VVRDICAgICAgICAtLSBJbnRlcnByZXQgdGltZXN0YW1wcyBhcyBVVEMgcmF0aGVyIHRoYW4gbG9jYWwgdGltZS4KICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIGNvbnZlcnNpb24gb2YgdGltZXN0YW1wcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CmluZGV4IDg0ZWIyNjguLmNiOGEzYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTEsNSArMSw1IEBACiBVc2luZyBmbGV4aWJsZSBhcnJheXMgaW4gdGhlIGtlcm5lbAotTGFzdCB1cGRhdGVkIGZvciAyLjYuMzEKK0xhc3QgdXBkYXRlZCBmb3IgMi42LjMyCiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgogCiBMYXJnZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gYmUgdW5yZWxpYWJsZSBpbiB0aGUgTGludXgga2VybmVsLgpAQCAtNDAsNiArNDAsMTMgQEAKIHRoZSBjdXJyZW50IGNvZGUsIHVzaW5nIGZsYWdzIHRvIGFzayBmb3IgaGlnaCBtZW1vcnkgaXMgbGlrZWx5IHRvIGxlYWQgdG8KIG5vdGFibHkgdW5wbGVhc2FudCBzaWRlIGVmZmVjdHMuCiAKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZGVmaW5lIGZsZXhpYmxlIGFycmF5cyBhdCBjb21waWxlIHRpbWUgd2l0aDoKKworICAgIERFRklORV9GTEVYX0FSUkFZKG5hbWUsIGVsZW1lbnRfc2l6ZSwgdG90YWwpOworCitUaGlzIG1hY3JvIHdpbGwgcmVzdWx0IGluIGEgZGVmaW5pdGlvbiBvZiBhbiBhcnJheSB3aXRoIHRoZSBnaXZlbiBuYW1lOyB0aGUKK2VsZW1lbnQgc2l6ZSBhbmQgdG90YWwgd2lsbCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBhdCBjb21waWxlIHRpbWUuCisKIFN0b3JpbmcgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBjYWxsIHRvOgogCiAgICAgaW50IGZsZXhfYXJyYXlfcHV0KHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIsCkBAIC03NiwxNiArODMsMzAgQEAKIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYmFjayBhIHZhbGlkIHBvaW50ZXIgZm9yIGFuIGVsZW1lbnQgd2hpY2gKIGhhcyBuZXZlciBiZWVuIHN0b3JlZCBpbiB0aGUgYXJyYXkuICBNZW1vcnkgZm9yIGFycmF5IGVsZW1lbnRzIGlzIGFsbG9jYXRlZAogb25lIHBhZ2UgYXQgYSB0aW1lOyBhIHNpbmdsZSBhbGxvY2F0aW9uIGNvdWxkIHByb3ZpZGUgbWVtb3J5IGZvciBzZXZlcmFsCi1hZGphY2VudCBlbGVtZW50cy4gIFRoZSBmbGV4aWJsZSBhcnJheSBjb2RlIGRvZXMgbm90IGtub3cgaWYgYSBzcGVjaWZpYwotZWxlbWVudCBoYXMgYmVlbiB3cml0dGVuOyBpdCBvbmx5IGtub3dzIGlmIHRoZSBhc3NvY2lhdGVkIG1lbW9yeSBpcwotcHJlc2VudC4gIFNvIGEgZmxleF9hcnJheV9nZXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgd2hpY2ggd2FzIG5ldmVyIHN0b3JlZAotaW4gdGhlIGFycmF5IGhhcyB0aGUgcG90ZW50aWFsIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gcmFuZG9tIGRhdGEuICBJZiB0aGUKLWNhbGxlciBkb2VzIG5vdCBoYXZlIGEgc2VwYXJhdGUgd2F5IHRvIGtub3cgd2hpY2ggZWxlbWVudHMgd2VyZSBhY3R1YWxseQotc3RvcmVkLCBpdCBtaWdodCBiZSB3aXNlLCBhdCBsZWFzdCwgdG8gYWRkIEdGUF9aRVJPIHRvIHRoZSBmbGFncyBhcmd1bWVudAotdG8gZW5zdXJlIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSB6ZXJvZWQuCithZGphY2VudCBlbGVtZW50cy4gIEZsZXhpYmxlIGFycmF5IGVsZW1lbnRzIGFyZSBub3JtYWxseSBpbml0aWFsaXplZCB0byB0aGUKK3ZhbHVlIEZMRVhfQVJSQVlfRlJFRSAoZGVmaW5lZCBhcyAweDZjIGluIDxsaW51eC9wb2lzb24uaD4pLCBzbyBlcnJvcnMKK2ludm9sdmluZyB0aGF0IG51bWJlciBwcm9iYWJseSByZXN1bHQgZnJvbSB1c2Ugb2YgdW5zdG9yZWQgYXJyYXkgZW50cmllcy4KK05vdGUgdGhhdCwgaWYgYXJyYXkgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX1pFUk8sIHRoZXkgd2lsbCBiZQoraW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhpcyBwb2lzb25pbmcgd2lsbCBub3QgaGFwcGVuLgogCi1UaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuICBJdCBpcyBwb3NzaWJsZSwKLXRob3VnaCwgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyB3aXRoIGEgY2FsbCB0bzoKK0luZGl2aWR1YWwgZWxlbWVudHMgaW4gdGhlIGFycmF5IGNhbiBiZSBjbGVhcmVkIHdpdGg6CisKKyAgICBpbnQgZmxleF9hcnJheV9jbGVhcihzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIGludCBlbGVtZW50X25yKTsKKworVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ2l2ZW4gZWxlbWVudCB0byBGTEVYX0FSUkFZX0ZSRUUgYW5kIHJldHVybgoremVyby4gIElmIHN0b3JhZ2UgZm9yIHRoZSBpbmRpY2F0ZWQgZWxlbWVudCBpcyBub3QgYWxsb2NhdGVkIGZvciB0aGUgYXJyYXksCitmbGV4X2FycmF5X2NsZWFyKCkgd2lsbCByZXR1cm4gLUVJTlZBTCBpbnN0ZWFkLiAgTm90ZSB0aGF0IGNsZWFyaW5nIGFuCitlbGVtZW50IGRvZXMgbm90IHJlbGVhc2UgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0OyB0byByZWR1Y2UgdGhlCithbGxvY2F0ZWQgc2l6ZSBvZiBhbiBhcnJheSwgY2FsbDoKKworICAgIGludCBmbGV4X2FycmF5X3NocmluayhzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXkpOworCitUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIG51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnkgYWN0dWFsbHkgZnJlZWQuCitUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHNjYW5uaW5nIHRoZSBhcnJheSBmb3IgcGFnZXMgY29udGFpbmluZyBub3RoaW5nIGJ1dAorRkxFWF9BUlJBWV9GUkVFIGJ5dGVzLCBzbyAoMSkgaXQgY2FuIGJlIGV4cGVuc2l2ZSwgYW5kICgyKSBpdCB3aWxsIG5vdCB3b3JrCitpZiB0aGUgYXJyYXkncyBwYWdlcyBhcmUgYWxsb2NhdGVkIHdpdGggX19HRlBfWkVSTy4KKworSXQgaXMgcG9zc2libGUgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyBvZiBhbiBhcnJheSB3aXRoIGEgY2FsbCB0bzoKIAogICAgIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDIxNSBiL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDIxNQppbmRleCAyZTZhMjFlLi5jMTk2YTE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyMTUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjE1CkBAIC0yMiwxMiArMjIsMTMgQEAKIC0tLS0tLS0tLS0tCiAKIFRoaXMgZHJpdmVyIGRvZXMgbm90IHByb2JlIGZvciBMVEM0MjE1IGRldmljZXMsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHNvbWUKLW9mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgbmVlZCB0byB1c2UKLXRoZSAiZm9yY2UiIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBkcml2ZXIgd2hlcmUgdG8gZmluZCB0aGUgZGV2aWNlLgorb2YgdGhlIHBvc3NpYmxlIGFkZHJlc3NlcyBhcmUgdW5mcmllbmRseSB0byBwcm9iaW5nLiBZb3Ugd2lsbCBoYXZlIHRvCitpbnN0YW50aWF0ZSB0aGUgZGV2aWNlcyBleHBsaWNpdGx5LgogCiBFeGFtcGxlOiB0aGUgZm9sbG93aW5nIHdpbGwgbG9hZCB0aGUgZHJpdmVyIGZvciBhbiBMVEM0MjE1IGF0IGFkZHJlc3MgMHg0NAogb24gSTJDIGJ1cyAjMDoKLSQgbW9kcHJvYmUgbHRjNDIxNSBmb3JjZT0wLDB4NDQKKyQgbW9kcHJvYmUgbHRjNDIxNQorJCBlY2hvIGx0YzQyMTUgMHg0NCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2UKIAogCiBTeXNmcyBlbnRyaWVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNDUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNDUKaW5kZXggYmFlN2EzYS4uMDI4MzhhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjQ1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDI0NQpAQCAtMjMsMTIgKzIzLDEzIEBACiAtLS0tLS0tLS0tLQogCiBUaGlzIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBmb3IgTFRDNDI0NSBkZXZpY2VzLCBkdWUgdG8gdGhlIGZhY3QgdGhhdCBzb21lCi1vZiB0aGUgcG9zc2libGUgYWRkcmVzc2VzIGFyZSB1bmZyaWVuZGx5IHRvIHByb2JpbmcuIFlvdSB3aWxsIG5lZWQgdG8gdXNlCi10aGUgImZvcmNlIiBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgZHJpdmVyIHdoZXJlIHRvIGZpbmQgdGhlIGRldmljZS4KK29mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgaGF2ZSB0bworaW5zdGFudGlhdGUgdGhlIGRldmljZXMgZXhwbGljaXRseS4KIAogRXhhbXBsZTogdGhlIGZvbGxvd2luZyB3aWxsIGxvYWQgdGhlIGRyaXZlciBmb3IgYW4gTFRDNDI0NSBhdCBhZGRyZXNzIDB4MjMKIG9uIEkyQyBidXMgIzE6Ci0kIG1vZHByb2JlIGx0YzQyNDUgZm9yY2U9MSwweDIzCiskIG1vZHByb2JlIGx0YzQyNDUKKyQgZWNobyBsdGM0MjQ1IDB4MjMgPiAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMS9uZXdfZGV2aWNlCiAKIAogU3lzZnMgZW50cmllcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQppbmRleCBkY2JkNTAyLi44MmRlZjg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQpAQCAtMzUzLDEwICszNTMsMjAgQEAKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwogCi1wb3dlclsxLSpdX2F2ZXJhZ2VfaW50ZXJ2YWwJUG93ZXIgdXNlIGF2ZXJhZ2luZyBpbnRlcnZhbAorcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsCVBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwuICBBIHBvbGwKKwkJCQlub3RpZmljYXRpb24gaXMgc2VudCB0byB0aGlzIGZpbGUgaWYgdGhlCisJCQkJaGFyZHdhcmUgY2hhbmdlcyB0aGUgYXZlcmFnaW5nIGludGVydmFsLgogCQkJCVVuaXQ6IG1pbGxpc2Vjb25kcwogCQkJCVJXCiAKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbF9tYXgJTWF4aW11bSBwb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsCisJCQkJVW5pdDogbWlsbGlzZWNvbmRzCisJCQkJUk8KKworcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsX21pbglNaW5pbXVtIHBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwKKwkJCQlVbml0OiBtaWxsaXNlY29uZHMKKwkJCQlSTworCiBwb3dlclsxLSpdX2F2ZXJhZ2VfaGlnaGVzdAlIaXN0b3JpY2FsIGF2ZXJhZ2UgbWF4aW11bSBwb3dlciB1c2UKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwpAQCAtMzY1LDYgKzM3NSwxOCBAQAogCQkJCVVuaXQ6IG1pY3JvV2F0dAogCQkJCVJPCiAKK3Bvd2VyWzEtKl1fYXZlcmFnZV9tYXgJCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0bworCQkJCXBvd2VyWzEtKl1fYXZlcmFnZSB3aGVuIHBvd2VyIHVzZQorCQkJCXJpc2VzIGFib3ZlIHRoaXMgdmFsdWUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKworcG93ZXJbMS0qXV9hdmVyYWdlX21pbgkJQSBwb2xsIG5vdGlmaWNhdGlvbiBpcyBzZW50IHRvCisJCQkJcG93ZXJbMS0qXV9hdmVyYWdlIHdoZW4gcG93ZXIgdXNlCisJCQkJc2lua3MgYmVsb3cgdGhpcyB2YWx1ZS4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSVworCiBwb3dlclsxLSpdX2lucHV0CQlJbnN0YW50YW5lb3VzIHBvd2VyIHVzZQogCQkJCVVuaXQ6IG1pY3JvV2F0dAogCQkJCVJPCkBAIC0zODEsNiArNDAzLDM5IEBACiAJCQkJYXZlcmFnZV9oaWdoZXN0IGFuZCBhdmVyYWdlX2xvd2VzdC4KIAkJCQlXTwogCitwb3dlclsxLSpdX2FjY3VyYWN5CQlBY2N1cmFjeSBvZiB0aGUgcG93ZXIgbWV0ZXIuCisJCQkJVW5pdDogUGVyY2VudAorCQkJCVJPCisKK3Bvd2VyWzEtKl1fYWxhcm0JCTEgaWYgdGhlIHN5c3RlbSBpcyBkcmF3aW5nIG1vcmUgcG93ZXIgdGhhbiB0aGUKKwkJCQljYXAgYWxsb3dzOyAwIG90aGVyd2lzZS4gIEEgcG9sbCBub3RpZmljYXRpb24gaXMKKwkJCQlzZW50IHRvIHRoaXMgZmlsZSB3aGVuIHRoZSBwb3dlciB1c2UgZXhjZWVkcyB0aGUKKwkJCQljYXAuICBUaGlzIGZpbGUgb25seSBhcHBlYXJzIGlmIHRoZSBjYXAgaXMga25vd24KKwkJCQl0byBiZSBlbmZvcmNlZCBieSBoYXJkd2FyZS4KKwkJCQlSTworCitwb3dlclsxLSpdX2NhcAkJCUlmIHBvd2VyIHVzZSByaXNlcyBhYm92ZSB0aGlzIGxpbWl0LCB0aGUKKwkJCQlzeXN0ZW0gc2hvdWxkIHRha2UgYWN0aW9uIHRvIHJlZHVjZSBwb3dlciB1c2UuCisJCQkJQSBwb2xsIG5vdGlmaWNhdGlvbiBpcyBzZW50IHRvIHRoaXMgZmlsZSBpZiB0aGUKKwkJCQljYXAgaXMgY2hhbmdlZCBieSB0aGUgaGFyZHdhcmUuICBUaGUgKl9jYXAKKwkJCQlmaWxlcyBvbmx5IGFwcGVhciBpZiB0aGUgY2FwIGlzIGtub3duIHRvIGJlCisJCQkJZW5mb3JjZWQgYnkgaGFyZHdhcmUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKworcG93ZXJbMS0qXV9jYXBfaHlzdAkJTWFyZ2luIG9mIGh5c3RlcmVzaXMgYnVpbHQgYXJvdW5kIGNhcHBpbmcgYW5kCisJCQkJbm90aWZpY2F0aW9uLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fY2FwX21heAkJTWF4aW11bSBjYXAgdGhhdCBjYW4gYmUgc2V0LgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJPCisKK3Bvd2VyWzEtKl1fY2FwX21pbgkJTWluaW11bSBjYXAgdGhhdCBjYW4gYmUgc2V0LgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJPCisKICoqKioqKioqKioKICogRW5lcmd5ICoKICoqKioqKioqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CmluZGV4IGM1YjM3YzUuLmFjNTQwYzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NApAQCAtOCw3ICs4LDcgQEAKICAgICBEYXRhc2hlZXQ6IE9ubHkgYXZhaWxhYmxlIHZpYSBOREEgZnJvbSBTZXJ2ZXJXb3JrcwogICAqIEFUSSBJWFAyMDAsIElYUDMwMCwgSVhQNDAwLCBTQjYwMCwgU0I3MDAgYW5kIFNCODAwIHNvdXRoYnJpZGdlcwogICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZQotICAqIEFNRCBTQjkwMAorICAqIEFNRCBIdWRzb24tMgogICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZQogICAqIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyAoU01TQykgU0xDOTBFNjYgKFZpY3Rvcnk2Nikgc291dGhicmlkZ2UKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgU01TQyB3ZWJzaXRlIGh0dHA6Ly93d3cuc21zYy5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBiL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcwppbmRleCBjNzQwYjdiLi5lODk0OTAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzCkBAIC0xODgsNyArMTg4LDcgQEAKIGRlbGV0ZWQuCiAKIEV4YW1wbGU6Ci0jIGVjaG8gZWVwcm9tIDB4NTAgPiAvc3lzL2NsYXNzL2kyYy1hZGFwdGVyL2kyYy0zL25ld19kZXZpY2UKKyMgZWNobyBlZXByb20gMHg1MCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0zL25ld19kZXZpY2UKIAogV2hpbGUgdGhpcyBpbnRlcmZhY2Ugc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGluLWtlcm5lbCBkZXZpY2UgZGVjbGFyYXRpb24KIGNhbid0IGJlIGRvbmUsIHRoZXJlIGlzIGEgdmFyaWV0eSBvZiBjYXNlcyB3aGVyZSBpdCBjYW4gYmUgaGVscGZ1bDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl9tYWQudHh0CmluZGV4IDc0NDY4N2QuLjhhMzY2OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfbWFkLnR4dApAQCAtMTI4LDggKzEyOCw4IEBACiAgIFRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgY2hhcmFjdGVyIGRldmljZSBmaWxlcyBhdXRvbWF0aWNhbGx5IHdpdGgKICAgdWRldiwgYSBydWxlIGxpa2UKIAotICAgIEtFUk5FTD0idW1hZCoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgotICAgIEtFUk5FTD0iaXNzbSoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD09InVtYWQqIiwgTkFNRT0iaW5maW5pYmFuZC8layIKKyAgICBLRVJORUw9PSJpc3NtKiIsIE5BTUU9ImluZmluaWJhbmQvJWsiCiAKICAgY2FuIGJlIHVzZWQuICBUaGlzIHdpbGwgY3JlYXRlIGRldmljZSBub2RlcyBuYW1lZAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQKaW5kZXggZjg0NzUwMS4uYWZlM2Y4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfdmVyYnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX3ZlcmJzLnR4dApAQCAtNTgsNyArNTgsNyBAQAogICBUbyBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGNoYXJhY3RlciBkZXZpY2UgZmlsZXMgYXV0b21hdGljYWxseSB3aXRoCiAgIHVkZXYsIGEgcnVsZSBsaWtlCiAKLSAgICBLRVJORUw9InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD09InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgogCiAgIGNhbiBiZSB1c2VkLiAgVGhpcyB3aWxsIGNyZWF0ZSBkZXZpY2Ugbm9kZXMgbmFtZWQKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA2ZmE3MjkyLi45MTA3YjM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNjcxLDYgKzY3MSw3IEBACiAJZWFybHlwcmludGs9CVtYODYsU0gsQkxBQ0tGSU5dCiAJCQllYXJseXByaW50az12Z2EKIAkJCWVhcmx5cHJpbnRrPXNlcmlhbFssdHR5U25bLGJhdWRyYXRlXV0KKwkJCWVhcmx5cHJpbnRrPXR0eVNuWyxiYXVkcmF0ZV0KIAkJCWVhcmx5cHJpbnRrPWRiZ3BbZGVidWdDb250cm9sbGVyI10KIAogCQkJQXBwZW5kICIsa2VlcCIgdG8gbm90IGRpc2FibGUgaXQgd2hlbiB0aGUgcmVhbCBjb25zb2xlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKaW5kZXggNmQwMzQ4Ny4uYWFmY2FhNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dApAQCAtMTk5LDE4ICsxOTksMjIgQEAKIAogTm90IGFsbCBiaXRzIGluIHRoZSBtYXNrIGNhbiBiZSBtb2RpZmllZC4gIE5vdCBhbGwgYml0cyB0aGF0IGNhbiBiZQogbW9kaWZpZWQgZG8gYW55dGhpbmcuICBOb3QgYWxsIGhvdCBrZXlzIGNhbiBiZSBpbmRpdmlkdWFsbHkgY29udHJvbGxlZAotYnkgdGhlIG1hc2suICBTb21lIG1vZGVscyBkbyBub3Qgc3VwcG9ydCB0aGUgbWFzayBhdCBhbGwsIGFuZCBpbiB0aG9zZQotbW9kZWxzLCBob3Qga2V5cyBjYW5ub3QgYmUgY29udHJvbGxlZCBpbmRpdmlkdWFsbHkuICBUaGUgYmVoYXZpb3VyIG9mCi10aGUgbWFzayBpcywgdGhlcmVmb3JlLCBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBUaGlua1BhZCBtb2RlbC4KK2J5IHRoZSBtYXNrLiAgU29tZSBtb2RlbHMgZG8gbm90IHN1cHBvcnQgdGhlIG1hc2sgYXQgYWxsLiAgVGhlIGJlaGF2aW91cgorb2YgdGhlIG1hc2sgaXMsIHRoZXJlZm9yZSwgaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgVGhpbmtQYWQgbW9kZWwuCisKK1RoZSBkcml2ZXIgd2lsbCBmaWx0ZXIgb3V0IGFueSB1bm1hc2tlZCBob3RrZXlzLCBzbyBldmVuIGlmIHRoZSBmaXJtd2FyZQorZG9lc24ndCBhbGxvdyBkaXNhYmxpbmcgYW4gc3BlY2lmaWMgaG90a2V5LCB0aGUgZHJpdmVyIHdpbGwgbm90IHJlcG9ydAorZXZlbnRzIGZvciB1bm1hc2tlZCBob3RrZXlzLgogCiBOb3RlIHRoYXQgdW5tYXNraW5nIHNvbWUga2V5cyBwcmV2ZW50cyB0aGVpciBkZWZhdWx0IGJlaGF2aW9yLiAgRm9yCiBleGFtcGxlLCBpZiBGbitGNSBpcyB1bm1hc2tlZCwgdGhhdCBrZXkgd2lsbCBubyBsb25nZXIgZW5hYmxlL2Rpc2FibGUKLUJsdWV0b290aCBieSBpdHNlbGYuCitCbHVldG9vdGggYnkgaXRzZWxmIGluIGZpcm13YXJlLgogCi1Ob3RlIGFsc28gdGhhdCBub3QgYWxsIEZuIGtleSBjb21iaW5hdGlvbnMgYXJlIHN1cHBvcnRlZCB0aHJvdWdoIEFDUEkuCi1Gb3IgZXhhbXBsZSwgb24gdGhlIFg0MCwgdGhlIGJyaWdodG5lc3MsIHZvbHVtZSBhbmQgIkFjY2VzcyBJQk0iIGJ1dHRvbnMKLWRvIG5vdCBnZW5lcmF0ZSBBQ1BJIGV2ZW50cyBldmVuIHdpdGggdGhpcyBkcml2ZXIuICBUaGV5ICpjYW4qIGJlIHVzZWQKLXRocm91Z2ggdGhlICJUaGlua1BhZCBCdXR0b25zIiB1dGlsaXR5LCBzZWUgaHR0cDovL3d3dy5ub25nbnUub3JnL3RwYi8KK05vdGUgYWxzbyB0aGF0IG5vdCBhbGwgRm4ga2V5IGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkIHRocm91Z2ggQUNQSQorZGVwZW5kaW5nIG9uIHRoZSBUaGlua1BhZCBtb2RlbCBhbmQgZmlybXdhcmUgdmVyc2lvbi4gIE9uIHRob3NlCitUaGlua1BhZHMsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHN1cHBvcnQgc29tZSBleHRyYSBob3RrZXlzIGJ5Citwb2xsaW5nIHRoZSAiQ01PUyBOVlJBTSIgYXQgbGVhc3QgMTAgdGltZXMgcGVyIHNlY29uZC4gIFRoZSBkcml2ZXIKK2F0dGVtcHRzIHRvIGVuYWJsZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGF1dG9tYXRpY2FsbHkgd2hlbiByZXF1aXJlZC4KIAogcHJvY2ZzIG5vdGVzOgogCkBAIC0yNTUsMTggKzI1OSwxMSBAQAogCQkxOiBkb2VzIG5vdGhpbmcKIAogCWhvdGtleV9tYXNrOgotCQliaXQgbWFzayB0byBlbmFibGUgZHJpdmVyLWhhbmRsaW5nIChhbmQgZGVwZW5kaW5nIG9uCisJCWJpdCBtYXNrIHRvIGVuYWJsZSByZXBvcnRpbmcgKGFuZCBkZXBlbmRpbmcgb24KIAkJdGhlIGZpcm13YXJlLCBBQ1BJIGV2ZW50IGdlbmVyYXRpb24pIGZvciBlYWNoIGhvdCBrZXkKIAkJKHNlZSBhYm92ZSkuICBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaG90IGtleXMKIAkJbWFzaywgYW5kIGFsbG93cyBvbmUgdG8gbW9kaWZ5IGl0LgogCi0JCU5vdGU6IHdoZW4gTlZSQU0gcG9sbGluZyBpcyBhY3RpdmUsIHRoZSBmaXJtd2FyZSBtYXNrCi0JCXdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHJldHVybmVkIGJ5Ci0JCWhvdGtleV9tYXNrLiAgVGhlIGRyaXZlciB3aWxsIHJldGFpbiBlbmFibGVkIGJpdHMgZm9yCi0JCWhvdGtleXMgdGhhdCBhcmUgdW5kZXIgTlZSQU0gcG9sbGluZyBldmVuIGlmIHRoZQotCQlmaXJtd2FyZSByZWZ1c2VzIHRoZW0sIGFuZCB3aWxsIG5vdCBzZXQgdGhlc2UgYml0cyBvbgotCQl0aGUgZmlybXdhcmUgaG90IGtleSBtYXNrLgotCiAJaG90a2V5X2FsbF9tYXNrOgogCQliaXQgbWFzayB0aGF0IHNob3VsZCBlbmFibGUgZXZlbnQgcmVwb3J0aW5nIGZvciBhbGwKIAkJc3VwcG9ydGVkIGhvdCBrZXlzLCB3aGVuIGVjaG9lZCB0byBob3RrZXlfbWFzayBhYm92ZS4KQEAgLTI3OSw3ICsyNzYsOCBAQAogCQliaXQgbWFzayB0aGF0IHNob3VsZCBlbmFibGUgZXZlbnQgcmVwb3J0aW5nIGZvciBhbGwKIAkJc3VwcG9ydGVkIGhvdCBrZXlzLCBleGNlcHQgdGhvc2Ugd2hpY2ggYXJlIGFsd2F5cwogCQloYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZSBhbnl3YXkuICBFY2hvIGl0IHRvCi0JCWhvdGtleV9tYXNrIGFib3ZlLCB0byB1c2UuCisJCWhvdGtleV9tYXNrIGFib3ZlLCB0byB1c2UuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1hc2sKKwkJdXNlZCBieSB0aGUgZHJpdmVyLgogCiAJaG90a2V5X3NvdXJjZV9tYXNrOgogCQliaXQgbWFzayB0aGF0IHNlbGVjdHMgd2hpY2ggaG90IGtleXMgd2lsbCB0aGUgZHJpdmVyCkBAIC0yODcsOSArMjg1LDEwIEBACiAJCWJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgcmVwb3J0ZWQgYnkgdGhlIEFDUEkgZmlybXdhcmUsCiAJCWJ1dCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBydW50aW1lLgogCi0JCUhvdCBrZXlzIHdob3NlIGJpdHMgYXJlIHNldCBpbiBib3RoIGhvdGtleV9zb3VyY2VfbWFzawotCQlhbmQgYWxzbyBvbiBob3RrZXlfbWFzayBhcmUgcG9sbGVkIGZvciBpbiBOVlJBTS4gIE9ubHkgYQotCQlmZXcgaG90IGtleXMgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIENNT1MgTlZSQU0gcG9sbGluZy4KKwkJSG90IGtleXMgd2hvc2UgYml0cyBhcmUgc2V0IGluIGhvdGtleV9zb3VyY2VfbWFzayBhcmUKKwkJcG9sbGVkIGZvciBpbiBOVlJBTSwgYW5kIHJlcG9ydGVkIGFzIGhvdGtleSBldmVudHMgaWYKKwkJZW5hYmxlZCBpbiBob3RrZXlfbWFzay4gIE9ubHkgYSBmZXcgaG90IGtleXMgYXJlCisJCWF2YWlsYWJsZSB0aHJvdWdoIENNT1MgTlZSQU0gcG9sbGluZy4KIAogCQlXYXJuaW5nOiB3aGVuIGluIE5WUkFNIG1vZGUsIHRoZSB2b2x1bWUgdXAvZG93bi9tdXRlCiAJCWtleXMgYXJlIHN5bnRoZXNpemVkIGFjY29yZGluZyB0byBjaGFuZ2VzIGluIHRoZSBtaXhlciwKQEAgLTUyNSw2ICs1MjQsNyBAQAogMHgyMzA1CQlTeXN0ZW0gaXMgd2FraW5nIHVwIGZyb20gc3VzcGVuZCB0byBlamVjdCBiYXkKIDB4MjQwNAkJU3lzdGVtIGlzIHdha2luZyB1cCBmcm9tIGhpYmVybmF0aW9uIHRvIHVuZG9jawogMHgyNDA1CQlTeXN0ZW0gaXMgd2FraW5nIHVwIGZyb20gaGliZXJuYXRpb24gdG8gZWplY3QgYmF5CisweDUwMTAJCUJyaWdodG5lc3MgbGV2ZWwgY2hhbmdlZC9jb250cm9sIGV2ZW50CiAKIFRoZSBhYm92ZSBldmVudHMgYXJlIG5ldmVyIHByb3BhZ2F0ZWQgYnkgdGhlIGRyaXZlci4KIApAQCAtNTMyLDcgKzUzMiw2IEBACiAweDQwMDMJCVVuZG9ja2VkIChzZWUgMHgyeDA0KSwgY2FuIHNsZWVwIGFnYWluCiAweDUwMEIJCVRhYmxldCBwZW4gaW5zZXJ0ZWQgaW50byBpdHMgc3RvcmFnZSBiYXkKIDB4NTAwQwkJVGFibGV0IHBlbiByZW1vdmVkIGZyb20gaXRzIHN0b3JhZ2UgYmF5Ci0weDUwMTAJCUJyaWdodG5lc3MgbGV2ZWwgY2hhbmdlZCAobmV3ZXIgTGVub3ZvIEJJT1NlcykKIAogVGhlIGFib3ZlIGV2ZW50cyBhcmUgcHJvcGFnYXRlZCBieSB0aGUgZHJpdmVyLgogCkBAIC02MjEsNiArNjIwLDggQEAKIDIuIERvICpOT1QqIGxvYWQgdXAgQUNQSSB2aWRlbywgZW5hYmxlIHRoZSBob3RrZXlzIGluIHRoaW5rcGFkLWFjcGksCiAgICBhbmQgbWFwIHRoZW0gdG8gS0VZX0JSSUdIVE5FU1NfVVAgYW5kIEtFWV9CUklHSFRORVNTX0RPV04uICBQcm9jZXNzCiAgICB0aGVzZSBrZXlzIG9uIHVzZXJzcGFjZSBzb21laG93IChlLmcuIGJ5IGNhbGxpbmcgeGJhY2tsaWdodCkuCisgICBUaGUgZHJpdmVyIHdpbGwgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IGlmIGl0IGRldGVjdHMgdGhhdCBBQ1BJIHZpZGVvCisgICBoYXMgYmVlbiBkaXNhYmxlZC4KIAogCiBCbHVldG9vdGgKQEAgLTE0NTksMyArMTQ2MCw4IEBACiAweDAyMDQwMDoJTWFya2VyIGZvciAxNiBMRURzIHN1cHBvcnQuICBBbHNvLCBMRURzIHRoYXQgYXJlIGtub3duCiAJCXRvIG5vdCBleGlzdCBpbiBhIGdpdmVuIG1vZGVsIGFyZSBub3QgcmVnaXN0ZXJlZCB3aXRoCiAJCXRoZSBMRUQgc3lzZnMgY2xhc3MgYW55bW9yZS4KKworMHgwMjA1MDA6CVVwZGF0ZWQgaG90a2V5IGRyaXZlciwgaG90a2V5X21hc2sgaXMgYWx3YXlzIGF2YWlsYWJsZQorCQlhbmQgaXQgaXMgYWx3YXlzIGFibGUgdG8gZGlzYWJsZSBob3Qga2V5cy4gIFZlcnkgb2xkCisJCXRoaW5rcGFkcyBhcmUgcHJvcGVybHkgc3VwcG9ydGVkLiAgaG90a2V5X2Jpb3NfbWFzaworCQlpcyBkZXByZWNhdGVkIGFuZCBtYXJrZWQgZm9yIHJlbW92YWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IGJhOTM3M2YuLjA5OGRlNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSAibGludXgvbGd1ZXN0X2xhdW5jaGVyLmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2NvbmZpZy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlICJsaW51eC92aXJ0aW9fbmV0LmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2Jsay5oIgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19jb25zb2xlLmgiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9lZXByb20gYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9lZXByb20Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaTJjL2NoaXBzL2VlcHJvbQpyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvZWVwcm9tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9tYXg2ODc1IGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWF4Njg3NQpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9tYXg2ODc1CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9tYXg2ODc1CmluZGV4IDEwY2E0M2MuLjFlODllZTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL21heDY4NzUKKysrIGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWF4Njg3NQpAQCAtNDIsMTAgKzQyLDEyIEBACiAKIFZhbGlkIGFkZHJlc3NlcyBmb3IgdGhlIE1BWDY4NzUgYXJlIDB4NTAgYW5kIDB4NTIuCiBWYWxpZCBhZGRyZXNzZXMgZm9yIHRoZSBNQVg2ODc0IGFyZSAweDUwLCAweDUyLCAweDU0IGFuZCAweDU2LgotVGhlIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBhbnkgYWRkcmVzcywgc28geW91IG11c3QgZm9yY2UgdGhlIGFkZHJlc3MuCitUaGUgZHJpdmVyIGRvZXMgbm90IHByb2JlIGFueSBhZGRyZXNzLCBzbyB5b3UgZXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGUKK2RldmljZXMuCiAKIEV4YW1wbGU6Ci0kIG1vZHByb2JlIG1heDY4NzUgZm9yY2U9MCwweDUwCiskIG1vZHByb2JlIG1heDY4NzUKKyQgZWNobyBtYXg2ODc1IDB4NTAgPiAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlCiAKIFRoZSBNQVg2ODc0L01BWDY4NzUgaWdub3JlcyBhZGRyZXNzIGJpdCAwLCBzbyB0aGlzIGRyaXZlciBhdHRhY2hlcyB0byBtdWx0aXBsZQogYWRkcmVzc2VzLiAgRm9yIGV4YW1wbGUsIGZvciBhZGRyZXNzIDB4NTAsIGl0IGFsc28gcmVzZXJ2ZXMgMHg1MS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9ocHRpb3AudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKaW5kZXggYTZlYjRhZC4uOTYwNTE3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKQEAgLTMsNiArMywyNSBAQAogQ29udHJvbGxlciBSZWdpc3RlciBNYXAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRm9yIFJSNDR4eCBJbnRlbCBJT1AgYmFzZWQgYWRhcHRlcnMsIHRoZSBjb250cm9sbGVyIElPUCBpcyBhY2Nlc3NlZCB2aWEgUENJIEJBUjAgYW5kIEJBUjI6CisKKyAgICAgQkFSMCBvZmZzZXQgICAgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MTFDNUMgTGluayBJbnRlcmZhY2UgSVJRIFNldAorICAgICAgICAgICAgMHgxMUM2MCBMaW5rIEludGVyZmFjZSBJUlEgQ2xlYXIKKworICAgICBCQVIyIG9mZnNldCAgICBSZWdpc3RlcgorICAgICAgICAgICAgMHgxMCAgICBJbmJvdW5kIE1lc3NhZ2UgUmVnaXN0ZXIgMAorICAgICAgICAgICAgMHgxNCAgICBJbmJvdW5kIE1lc3NhZ2UgUmVnaXN0ZXIgMQorICAgICAgICAgICAgMHgxOCAgICBPdXRib3VuZCBNZXNzYWdlIFJlZ2lzdGVyIDAKKyAgICAgICAgICAgIDB4MUMgICAgT3V0Ym91bmQgTWVzc2FnZSBSZWdpc3RlciAxCisgICAgICAgICAgICAweDIwICAgIEluYm91bmQgRG9vcmJlbGwgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MjQgICAgSW5ib3VuZCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAweDI4ICAgIEluYm91bmQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MzAgICAgT3V0Ym91bmQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgMHgzNCAgICBPdXRib3VuZCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgorICAgICAgICAgICAgMHg0MCAgICBJbmJvdW5kIFF1ZXVlIFBvcnQKKyAgICAgICAgICAgIDB4NDQgICAgT3V0Ym91bmQgUXVldWUgUG9ydAorCiBGb3IgSW50ZWwgSU9QIGJhc2VkIGFkYXB0ZXJzLCB0aGUgY29udHJvbGxlciBJT1AgaXMgYWNjZXNzZWQgdmlhIFBDSSBCQVIwOgogCiAgICAgIEJBUjAgb2Zmc2V0ICAgIFJlZ2lzdGVyCkBAIC05Myw3ICsxMTIsNyBAQAogCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDFjOGViNDUuLmZkOWEyZjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC01MjIsNyArNTIyLDcgQEAKICAgICBwY21fZGV2cyAgICAgICAtIE51bWJlciBvZiBQQ00gZGV2aWNlcyBhc3NpZ25lZCB0byBlYWNoIGNhcmQKICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gMSwgdXAgdG8gNCkKICAgICBwY21fc3Vic3RyZWFtcyAtIE51bWJlciBvZiBQQ00gc3Vic3RyZWFtcyBhc3NpZ25lZCB0byBlYWNoIFBDTQotICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgPSA4LCB1cCB0byAxNikKKyAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gOCwgdXAgdG8gMTI4KQogICAgIGhydGltZXIgICAgICAgIC0gVXNlIGhydGltZXIgKD0xLCBkZWZhdWx0KSBvciBzeXN0ZW0gdGltZXIgKD0wKQogICAgIGZha2VfYnVmZmVyICAgIC0gRmFrZSBidWZmZXIgYWxsb2NhdGlvbnMgKGRlZmF1bHQgPSAxKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IGYxNzA4YjcuLjRjN2Y5YWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0yMDksNiArMjA5LDcgQEAKICAgbGFwdG9wCWxhcHRvcCB3aXRoIEhQIGphY2sgc2Vuc2luZwogICBtb2JpbGUJbW9iaWxlIGRldmljZXMgd2l0aCBIUCBqYWNrIHNlbnNpbmcKICAgdGhpbmtwYWQJTGVub3ZvIFRoaW5rcGFkIFgzMDAKKyAgdG91Y2hzbWFydAlIUCBUb3VjaHNtYXJ0CiAKIEFEMTg4NAogPT09PT09CkBAIC0zNTgsNiArMzU5LDcgQEAKICAgNXN0YWNrLW5vLWZwCUQ5NjUgNXN0YWNrIHdpdGhvdXQgZnJvbnQgcGFuZWwKICAgZGVsbC0zc3RhY2sJRGVsbCBEaW1lbnNpb24gRTUyMAogICBkZWxsLWJpb3MJRml4ZXMgd2l0aCBEZWxsIEJJT1Mgc2V0dXAKKyAgdm9sa25vYglGaXhlcyB3aXRoIHZvbHVtZS1rbm9iIHdpZGdldCAweDI0CiAgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhENzFCKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAppbmRleCA3MGQ2OGNlLi5hODdkYzI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dApAQCAtMSw1ICsxLDUgQEAKIEdlbmVyaWMgVGhlcm1hbCBTeXNmcyBkcml2ZXIgSG93IFRvCi09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBXcml0dGVuIGJ5IFN1aml0aCBUaG9tYXMgPHN1aml0aC50aG9tYXNAaW50ZWwuY29tPiwgWmhhbmcgUnVpIDxydWkuemhhbmdAaW50ZWwuY29tPgogCkBAIC0xMCwyMCArMTAsMjAgQEAKIAogMC4gSW50cm9kdWN0aW9uCiAKLVRoZSBnZW5lcmljIHRoZXJtYWwgc3lzZnMgcHJvdmlkZXMgYSBzZXQgb2YgaW50ZXJmYWNlcyBmb3IgdGhlcm1hbCB6b25lIGRldmljZXMgKHNlbnNvcnMpCi1hbmQgdGhlcm1hbCBjb29saW5nIGRldmljZXMgKGZhbiwgcHJvY2Vzc29yLi4uKSB0byByZWdpc3RlciB3aXRoIHRoZSB0aGVybWFsIG1hbmFnZW1lbnQKLXNvbHV0aW9uIGFuZCB0byBiZSBhIHBhcnQgb2YgaXQuCitUaGUgZ2VuZXJpYyB0aGVybWFsIHN5c2ZzIHByb3ZpZGVzIGEgc2V0IG9mIGludGVyZmFjZXMgZm9yIHRoZXJtYWwgem9uZQorZGV2aWNlcyAoc2Vuc29ycykgYW5kIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIChmYW4sIHByb2Nlc3Nvci4uLikgdG8gcmVnaXN0ZXIKK3dpdGggdGhlIHRoZXJtYWwgbWFuYWdlbWVudCBzb2x1dGlvbiBhbmQgdG8gYmUgYSBwYXJ0IG9mIGl0LgogCi1UaGlzIGhvdy10byBmb2N1c2VzIG9uIGVuYWJsaW5nIG5ldyB0aGVybWFsIHpvbmUgYW5kIGNvb2xpbmcgZGV2aWNlcyB0byBwYXJ0aWNpcGF0ZQotaW4gdGhlcm1hbCBtYW5hZ2VtZW50LgotVGhpcyBzb2x1dGlvbiBpcyBwbGF0Zm9ybSBpbmRlcGVuZGVudCBhbmQgYW55IHR5cGUgb2YgdGhlcm1hbCB6b25lIGRldmljZXMgYW5kCi1jb29saW5nIGRldmljZXMgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhlIGluZnJhc3RydWN0dXJlLgorVGhpcyBob3ctdG8gZm9jdXNlcyBvbiBlbmFibGluZyBuZXcgdGhlcm1hbCB6b25lIGFuZCBjb29saW5nIGRldmljZXMgdG8KK3BhcnRpY2lwYXRlIGluIHRoZXJtYWwgbWFuYWdlbWVudC4KK1RoaXMgc29sdXRpb24gaXMgcGxhdGZvcm0gaW5kZXBlbmRlbnQgYW5kIGFueSB0eXBlIG9mIHRoZXJtYWwgem9uZSBkZXZpY2VzCithbmQgY29vbGluZyBkZXZpY2VzIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRoZSBpbmZyYXN0cnVjdHVyZS4KIAotVGhlIG1haW4gdGFzayBvZiB0aGUgdGhlcm1hbCBzeXNmcyBkcml2ZXIgaXMgdG8gZXhwb3NlIHRoZXJtYWwgem9uZSBhdHRyaWJ1dGVzIGFzIHdlbGwKLWFzIGNvb2xpbmcgZGV2aWNlIGF0dHJpYnV0ZXMgdG8gdGhlIHVzZXIgc3BhY2UuCi1BbiBpbnRlbGxpZ2VudCB0aGVybWFsIG1hbmFnZW1lbnQgYXBwbGljYXRpb24gY2FuIG1ha2UgZGVjaXNpb25zIGJhc2VkIG9uIGlucHV0cwotZnJvbSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcyAodGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgYW5kIHRyaXAgcG9pbnQgdGVtcGVyYXR1cmUpCi1hbmQgdGhyb3R0bGUgYXBwcm9wcmlhdGUgZGV2aWNlcy4KK1RoZSBtYWluIHRhc2sgb2YgdGhlIHRoZXJtYWwgc3lzZnMgZHJpdmVyIGlzIHRvIGV4cG9zZSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcworYXMgd2VsbCBhcyBjb29saW5nIGRldmljZSBhdHRyaWJ1dGVzIHRvIHRoZSB1c2VyIHNwYWNlLgorQW4gaW50ZWxsaWdlbnQgdGhlcm1hbCBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uIGNhbiBtYWtlIGRlY2lzaW9ucyBiYXNlZCBvbgoraW5wdXRzIGZyb20gdGhlcm1hbCB6b25lIGF0dHJpYnV0ZXMgKHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGFuZCB0cmlwIHBvaW50Cit0ZW1wZXJhdHVyZSkgYW5kIHRocm90dGxlIGFwcHJvcHJpYXRlIGRldmljZXMuCiAKIFswLSpdCWRlbm90ZXMgYW55IHBvc2l0aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDAKIFsxLSpdCWRlbm90ZXMgYW55IHBvc2l0aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDEKQEAgLTMxLDc3ICszMSw3NyBAQAogMS4gdGhlcm1hbCBzeXNmcyBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucwogCiAxLjEgdGhlcm1hbCB6b25lIGRldmljZSBpbnRlcmZhY2UKLTEuMS4xIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsIGludCB0cmlwcywKLQkJCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgKm9wcykKKzEuMS4xIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsCisJCWludCB0cmlwcywgdm9pZCAqZGV2ZGF0YSwgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzICpvcHMpCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBhZGRzIGEgbmV3IHRoZXJtYWwgem9uZSBkZXZpY2UgKHNlbnNvcikgdG8KLQkvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFzIHRoZXJtYWxfem9uZVswLSpdLgotCUl0IHRyaWVzIHRvIGJpbmQgYWxsIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyByZWdpc3RlcmVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIHpvbmUgZGV2aWNlIChzZW5zb3IpIHRvCisgICAgL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhcyB0aGVybWFsX3pvbmVbMC0qXS4gSXQgdHJpZXMgdG8gYmluZCBhbGwgdGhlCisgICAgdGhlcm1hbCBjb29saW5nIGRldmljZXMgcmVnaXN0ZXJlZCBhdCB0aGUgc2FtZSB0aW1lLgogCi0JbmFtZTogdGhlIHRoZXJtYWwgem9uZSBuYW1lLgotCXRyaXBzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lIHN1cHBvcnRzLgotCWRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKLQlvcHM6IHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KLQkJLmJpbmQ6IGJpbmQgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCi0JCS51bmJpbmQ6IHVuYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KLQkJLmdldF90ZW1wOiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwgem9uZS4KLQkJLmdldF9tb2RlOiBnZXQgdGhlIGN1cnJlbnQgbW9kZSAodXNlci9rZXJuZWwpIG9mIHRoZSB0aGVybWFsIHpvbmUuCi0JCQkgICAia2VybmVsIiBtZWFucyB0aGVybWFsIG1hbmFnZW1lbnQgaXMgZG9uZSBpbiBrZXJuZWwuCi0JCQkgICAidXNlciIgd2lsbCBwcmV2ZW50IGtlcm5lbCB0aGVybWFsIGRyaXZlciBhY3Rpb25zIHVwb24gdHJpcCBwb2ludHMKLQkJCSAgIHNvIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIHRha2UgY2hhcmdlIG9mIHRoZXJtYWwgbWFuYWdlbWVudC4KLQkJLnNldF9tb2RlOiBzZXQgdGhlIG1vZGUgKHVzZXIva2VybmVsKSBvZiB0aGUgdGhlcm1hbCB6b25lLgotCQkuZ2V0X3RyaXBfdHlwZTogZ2V0IHRoZSB0eXBlIG9mIGNlcnRhaW4gdHJpcCBwb2ludC4KLQkJLmdldF90cmlwX3RlbXA6IGdldCB0aGUgdGVtcGVyYXR1cmUgYWJvdmUgd2hpY2ggdGhlIGNlcnRhaW4gdHJpcCBwb2ludAotCQkJCXdpbGwgYmUgZmlyZWQuCisgICAgbmFtZTogdGhlIHRoZXJtYWwgem9uZSBuYW1lLgorICAgIHRyaXBzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lIHN1cHBvcnRzLgorICAgIGRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKKyAgICBvcHM6IHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KKwkuYmluZDogYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KKwkudW5iaW5kOiB1bmJpbmQgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCisJLmdldF90ZW1wOiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkuZ2V0X21vZGU6IGdldCB0aGUgY3VycmVudCBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkgICAgLSAia2VybmVsIiBtZWFucyB0aGVybWFsIG1hbmFnZW1lbnQgaXMgZG9uZSBpbiBrZXJuZWwuCisJICAgIC0gInVzZXIiIHdpbGwgcHJldmVudCBrZXJuZWwgdGhlcm1hbCBkcml2ZXIgYWN0aW9ucyB1cG9uIHRyaXAgcG9pbnRzCisJICAgICAgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9ucyBjYW4gdGFrZSBjaGFyZ2Ugb2YgdGhlcm1hbCBtYW5hZ2VtZW50LgorCS5zZXRfbW9kZTogc2V0IHRoZSBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkuZ2V0X3RyaXBfdHlwZTogZ2V0IHRoZSB0eXBlIG9mIGNlcnRhaW4gdHJpcCBwb2ludC4KKwkuZ2V0X3RyaXBfdGVtcDogZ2V0IHRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0aGUgY2VydGFpbiB0cmlwIHBvaW50CisJCQl3aWxsIGJlIGZpcmVkLgogCiAxLjEuMiB2b2lkIHRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHopCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCUl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZCB1bmJpbmQgYWxsCi0JdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGl0IHVzZXMuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdGhlcm1hbCB6b25lIGRldmljZS4KKyAgICBJdCBkZWxldGVzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGZvcm0gL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhbmQKKyAgICB1bmJpbmQgYWxsIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyBpdCB1c2VzLgogCiAxLjIgdGhlcm1hbCBjb29saW5nIGRldmljZSBpbnRlcmZhY2UKIDEuMi4xIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICp0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsCi0JCQkJCXZvaWQgKmRldmRhdGEsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX29wcyAqKQorCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgKikKIAotCVRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIGFkZHMgYSBuZXcgdGhlcm1hbCBjb29saW5nIGRldmljZSAoZmFuL3Byb2Nlc3Nvci8uLi4pIHRvCi0JL3N5cy9jbGFzcy90aGVybWFsLyBmb2xkZXIgYXMgY29vbGluZ19kZXZpY2VbMC0qXS4KLQlJdCB0cmllcyB0byBiaW5kIGl0c2VsZiB0byBhbGwgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzIHJlZ2lzdGVyIGF0IHRoZSBzYW1lIHRpbWUuCi0JbmFtZTogdGhlIGNvb2xpbmcgZGV2aWNlIG5hbWUuCi0JZGV2ZGF0YTogZGV2aWNlIHByaXZhdGUgZGF0YS4KLQlvcHM6IHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGNhbGwtYmFja3MuCi0JCS5nZXRfbWF4X3N0YXRlOiBnZXQgdGhlIE1heGltdW0gdGhyb3R0bGUgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlLgotCQkuZ2V0X2N1cl9zdGF0ZTogZ2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KLQkJLnNldF9jdXJfc3RhdGU6IHNldCB0aGUgQ3VycmVudCB0aHJvdHRsZSBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIChmYW4vcHJvY2Vzc29yLy4uLikKKyAgICB0byAvc3lzL2NsYXNzL3RoZXJtYWwvIGZvbGRlciBhcyBjb29saW5nX2RldmljZVswLSpdLiBJdCB0cmllcyB0byBiaW5kIGl0c2VsZgorICAgIHRvIGFsbCB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgcmVnaXN0ZXIgYXQgdGhlIHNhbWUgdGltZS4KKyAgICBuYW1lOiB0aGUgY29vbGluZyBkZXZpY2UgbmFtZS4KKyAgICBkZXZkYXRhOiBkZXZpY2UgcHJpdmF0ZSBkYXRhLgorICAgIG9wczogdGhlcm1hbCBjb29saW5nIGRldmljZXMgY2FsbC1iYWNrcy4KKwkuZ2V0X21heF9zdGF0ZTogZ2V0IHRoZSBNYXhpbXVtIHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKwkuZ2V0X2N1cl9zdGF0ZTogZ2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKwkuc2V0X2N1cl9zdGF0ZTogc2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KIAogMS4yLjIgdm9pZCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYpCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmUgdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCi0JSXQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmb3JtIC9zeXMvY2xhc3MvdGhlcm1hbCBmb2xkZXIgYW5kIHVuYmluZAotCWl0c2VsZiBmcm9tIGFsbAl0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgdXNpbmcgaXQuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gcmVtb3ZlIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlLgorICAgIEl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZAorICAgIHVuYmluZCBpdHNlbGYgZnJvbSBhbGwgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzIHVzaW5nIGl0LgogCiAxLjMgaW50ZXJmYWNlIGZvciBiaW5kaW5nIGEgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZQogMS4zLjEgaW50IHRoZXJtYWxfem9uZV9iaW5kX2Nvb2xpbmdfZGV2aWNlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwKLQkJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CisJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBiaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSB0byB0aGUgY2VydGFpbiB0cmlwIHBvaW50Ci0Jb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCVRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLmJpbmQgY2FsbGJhY2suCi0JdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCi0JY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQotCXRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCi0JCSBpbiB0aGlzIHRoZXJtYWwgem9uZS4KKyAgICBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBiaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSB0byB0aGUgY2VydGFpbiB0cmlwCisgICAgcG9pbnQgb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLmJpbmQgY2FsbGJhY2suCisgICAgdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCisgICAgY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQorICAgIHRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCisJICBpbiB0aGlzIHRoZXJtYWwgem9uZS4KIAogMS4zLjIgaW50IHRoZXJtYWxfem9uZV91bmJpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LAotCQkJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CisJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiB1bmJpbmQgYSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIGZyb20gdGhlIGNlcnRhaW4gdHJpcCBwb2ludAotCW9mIGEgdGhlcm1hbCB6b25lIGRldmljZS4KLQlUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGluIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIC51bmJpbmQgY2FsbGJhY2suCi0JdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCi0JY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQotCXRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCi0JCWluIHRoaXMgdGhlcm1hbCB6b25lLgorICAgIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHVuYmluZCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UgZnJvbSB0aGUgY2VydGFpbgorICAgIHRyaXAgcG9pbnQgb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGluCisgICAgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLnVuYmluZCBjYWxsYmFjay4KKyAgICB0ejogdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UKKyAgICBjZGV2OiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlCisgICAgdHJpcDogaW5kaWNhdGVzIHdoaWNoIHRyaXAgcG9pbnQgdGhlIGNvb2xpbmcgZGV2aWNlcyBpcyBhc3NvY2lhdGVkIHdpdGgKKwkgIGluIHRoaXMgdGhlcm1hbCB6b25lLgogCiAyLiBzeXNmcyBhdHRyaWJ1dGVzIHN0cnVjdHVyZQogCkBAIC0xMTQsMTUzICsxMTQsMTY2IEBACiAKIFRoZXJtYWwgem9uZSBkZXZpY2Ugc3lzIEkvRiwgY3JlYXRlZCBvbmNlIGl0J3MgcmVnaXN0ZXJlZDoKIC9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKLQl8LS0tLS10eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQotCXwtLS0tLXRlbXA6CQkJQ3VycmVudCB0ZW1wZXJhdHVyZQotCXwtLS0tLW1vZGU6CQkJV29ya2luZyBtb2RlIG9mIHRoZSB0aGVybWFsIHpvbmUKLQl8LS0tLS10cmlwX3BvaW50X1swLSpdX3RlbXA6CVRyaXAgcG9pbnQgdGVtcGVyYXR1cmUKLQl8LS0tLS10cmlwX3BvaW50X1swLSpdX3R5cGU6CVRyaXAgcG9pbnQgdHlwZQorICAgIHwtLS10eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQorICAgIHwtLS10ZW1wOgkJCUN1cnJlbnQgdGVtcGVyYXR1cmUKKyAgICB8LS0tbW9kZToJCQlXb3JraW5nIG1vZGUgb2YgdGhlIHRoZXJtYWwgem9uZQorICAgIHwtLS10cmlwX3BvaW50X1swLSpdX3RlbXA6CVRyaXAgcG9pbnQgdGVtcGVyYXR1cmUKKyAgICB8LS0tdHJpcF9wb2ludF9bMC0qXV90eXBlOglUcmlwIHBvaW50IHR5cGUKIAogVGhlcm1hbCBjb29saW5nIGRldmljZSBzeXMgSS9GLCBjcmVhdGVkIG9uY2UgaXQncyByZWdpc3RlcmVkOgogL3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlWzAtKl06Ci0JfC0tLS0tdHlwZSA6CQkJVHlwZSBvZiB0aGUgY29vbGluZyBkZXZpY2UocHJvY2Vzc29yL2Zhbi8uLi4pCi0JfC0tLS0tbWF4X3N0YXRlOgkJTWF4aW11bSBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQotCXwtLS0tLWN1cl9zdGF0ZToJCUN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UKKyAgICB8LS0tdHlwZToJCQlUeXBlIG9mIHRoZSBjb29saW5nIGRldmljZShwcm9jZXNzb3IvZmFuLy4uLikKKyAgICB8LS0tbWF4X3N0YXRlOgkJTWF4aW11bSBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQorICAgIHwtLS1jdXJfc3RhdGU6CQlDdXJyZW50IGNvb2xpbmcgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlCiAKIAotVGhlc2UgdHdvIGR5bmFtaWMgYXR0cmlidXRlcyBhcmUgY3JlYXRlZC9yZW1vdmVkIGluIHBhaXJzLgotVGhleSByZXByZXNlbnQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGEgdGhlcm1hbCB6b25lIGFuZCBpdHMgYXNzb2NpYXRlZCBjb29saW5nIGRldmljZS4KLVRoZXkgYXJlIGNyZWF0ZWQvcmVtb3ZlZCBmb3IgZWFjaAotdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2UvdGhlcm1hbF96b25lX3VuYmluZF9jb29saW5nX2RldmljZSBzdWNjZXNzZnVsIGV4ZWN1dGlvbi4KK1RoZW4gbmV4dCB0d28gZHluYW1pYyBhdHRyaWJ1dGVzIGFyZSBjcmVhdGVkL3JlbW92ZWQgaW4gcGFpcnMuIFRoZXkgcmVwcmVzZW50Cit0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSB0aGVybWFsIHpvbmUgYW5kIGl0cyBhc3NvY2lhdGVkIGNvb2xpbmcgZGV2aWNlLgorVGhleSBhcmUgY3JlYXRlZC9yZW1vdmVkIGZvciBlYWNoIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mCit0aGVybWFsX3pvbmVfYmluZF9jb29saW5nX2RldmljZS90aGVybWFsX3pvbmVfdW5iaW5kX2Nvb2xpbmdfZGV2aWNlLgogCi0vc3lzL2NsYXNzL3RoZXJtYWwvdGhlcm1hbF96b25lWzAtKl0KLQl8LS0tLS1jZGV2WzAtKl06CQlUaGUgWzAtKl10aCBjb29saW5nIGRldmljZSBpbiB0aGUgY3VycmVudCB0aGVybWFsIHpvbmUKLQl8LS0tLS1jZGV2WzAtKl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIHdpdGgKKy9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKKyAgICB8LS0tY2RldlswLSpdOgkJWzAtKl10aCBjb29saW5nIGRldmljZSBpbiBjdXJyZW50IHRoZXJtYWwgem9uZQorICAgIHwtLS1jZGV2WzAtKl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIHdpdGgKIAogQmVzaWRlcyB0aGUgdGhlcm1hbCB6b25lIGRldmljZSBzeXNmcyBJL0YgYW5kIGNvb2xpbmcgZGV2aWNlIHN5c2ZzIEkvRiwKLXRoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIGFsc28gY3JlYXRlcyBhIGh3bW9uIHN5c2ZzIEkvRiBmb3IgZWFjaCBfdHlwZV8gb2YKLXRoZXJtYWwgem9uZSBkZXZpY2UuIEUuZy4gdGhlIGdlbmVyaWMgdGhlcm1hbCBkcml2ZXIgcmVnaXN0ZXJzIG9uZSBod21vbiBjbGFzcyBkZXZpY2UKLWFuZCBidWlsZCB0aGUgYXNzb2NpYXRlZCBod21vbiBzeXNmcyBJL0YgZm9yIGFsbCB0aGUgcmVnaXN0ZXJlZCBBQ1BJIHRoZXJtYWwgem9uZXMuCit0aGUgZ2VuZXJpYyB0aGVybWFsIGRyaXZlciBhbHNvIGNyZWF0ZXMgYSBod21vbiBzeXNmcyBJL0YgZm9yIGVhY2ggX3R5cGVfCitvZiB0aGVybWFsIHpvbmUgZGV2aWNlLiBFLmcuIHRoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIHJlZ2lzdGVycyBvbmUgaHdtb24KK2NsYXNzIGRldmljZSBhbmQgYnVpbGQgdGhlIGFzc29jaWF0ZWQgaHdtb24gc3lzZnMgSS9GIGZvciBhbGwgdGhlIHJlZ2lzdGVyZWQKK0FDUEkgdGhlcm1hbCB6b25lcy4KKwogL3N5cy9jbGFzcy9od21vbi9od21vblswLSpdOgotCXwtLS0tLW5hbWU6CQkJVGhlIHR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzLgotCXwtLS0tLXRlbXBbMS0qXV9pbnB1dDoJCVRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIG9mIHRoZXJtYWwgem9uZSBbMS0qXS4KLQl8LS0tLS10ZW1wWzEtKl1fY3JpdGljYWw6CVRoZSBjcml0aWNhbCB0cmlwIHBvaW50IG9mIHRoZXJtYWwgem9uZSBbMS0qXS4KKyAgICB8LS0tbmFtZToJCQlUaGUgdHlwZSBvZiB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMKKyAgICB8LS0tdGVtcFsxLSpdX2lucHV0OglUaGUgY3VycmVudCB0ZW1wZXJhdHVyZSBvZiB0aGVybWFsIHpvbmUgWzEtKl0KKyAgICB8LS0tdGVtcFsxLSpdX2NyaXRpY2FsOglUaGUgY3JpdGljYWwgdHJpcCBwb2ludCBvZiB0aGVybWFsIHpvbmUgWzEtKl0KKwogUGxlYXNlIHJlYWQgRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBUaGVybWFsIHpvbmUgYXR0cmlidXRlcyAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotdHlwZQkJCQlTdHJpbmdzIHdoaWNoIHJlcHJlc2VudCB0aGUgdGhlcm1hbCB6b25lIHR5cGUuCi0JCQkJVGhpcyBpcyBnaXZlbiBieSB0aGVybWFsIHpvbmUgZHJpdmVyIGFzIHBhcnQgb2YgcmVnaXN0cmF0aW9uLgotCQkJCUVnOiAiYWNwaXR6IiBpbmRpY2F0ZXMgaXQncyBhbiBBQ1BJIHRoZXJtYWwgZGV2aWNlLgotCQkJCUluIG9yZGVyIHRvIGtlZXAgaXQgY29uc2lzdGVudCB3aXRoIGh3bW9uIHN5cyBhdHRyaWJ1dGUsCi0JCQkJdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbG93ZXJjYXNlIHN0cmluZywKLQkJCQlub3QgY29udGFpbmluZyBzcGFjZXMgbm9yIGRhc2hlcy4KLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0eXBlCisJU3RyaW5ncyB3aGljaCByZXByZXNlbnQgdGhlIHRoZXJtYWwgem9uZSB0eXBlLgorCVRoaXMgaXMgZ2l2ZW4gYnkgdGhlcm1hbCB6b25lIGRyaXZlciBhcyBwYXJ0IG9mIHJlZ2lzdHJhdGlvbi4KKwlFLmc6ICJhY3BpdHoiIGluZGljYXRlcyBpdCdzIGFuIEFDUEkgdGhlcm1hbCBkZXZpY2UuCisJSW4gb3JkZXIgdG8ga2VlcCBpdCBjb25zaXN0ZW50IHdpdGggaHdtb24gc3lzIGF0dHJpYnV0ZTsgdGhpcyBzaG91bGQKKwliZSBhIHNob3J0LCBsb3dlcmNhc2Ugc3RyaW5nLCBub3QgY29udGFpbmluZyBzcGFjZXMgbm9yIGRhc2hlcy4KKwlSTywgUmVxdWlyZWQKIAotdGVtcAkJCQlDdXJyZW50IHRlbXBlcmF0dXJlIGFzIHJlcG9ydGVkIGJ5IHRoZXJtYWwgem9uZSAoc2Vuc29yKQotCQkJCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0ZW1wCisJQ3VycmVudCB0ZW1wZXJhdHVyZSBhcyByZXBvcnRlZCBieSB0aGVybWFsIHpvbmUgKHNlbnNvcikuCisJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cworCVJPLCBSZXF1aXJlZAogCi1tb2RlCQkJCU9uZSBvZiB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgaW4gW2tlcm5lbCwgdXNlcl0KLQkJCQlUaGlzIGZpbGUgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFsZ29yaXRobQotCQkJCXRoYXQgaXMgY3VycmVudGx5IG1hbmFnaW5nIHRoZSB0aGVybWFsIHpvbmUuCi0JCQkJSXQgY2FuIGJlIGVpdGhlciBkZWZhdWx0IGtlcm5lbCBiYXNlZCBhbGdvcml0aG0KLQkJCQlvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgotCQkJCVJXCi0JCQkJT3B0aW9uYWwKLQkJCQlrZXJuZWwJPSBUaGVybWFsIG1hbmFnZW1lbnQgaW4ga2VybmVsIHRoZXJtYWwgem9uZSBkcml2ZXIuCi0JCQkJdXNlcgk9IFByZXZlbnRpbmcga2VybmVsIHRoZXJtYWwgem9uZSBkcml2ZXIgYWN0aW9ucyB1cG9uCi0JCQkJCSAgdHJpcCBwb2ludHMgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9uIGNhbiB0YWtlIGZ1bGwKLQkJCQkJICBjaGFyZ2Ugb2YgdGhlIHRoZXJtYWwgbWFuYWdlbWVudC4KK21vZGUKKwlPbmUgb2YgdGhlIHByZWRlZmluZWQgdmFsdWVzIGluIFtrZXJuZWwsIHVzZXJdLgorCVRoaXMgZmlsZSBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxnb3JpdGhtIHRoYXQgaXMgY3VycmVudGx5CisJbWFuYWdpbmcgdGhlIHRoZXJtYWwgem9uZS4gSXQgY2FuIGJlIGVpdGhlciBkZWZhdWx0IGtlcm5lbCBiYXNlZAorCWFsZ29yaXRobSBvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgorCWtlcm5lbAk9IFRoZXJtYWwgbWFuYWdlbWVudCBpbiBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlci4KKwl1c2VyCT0gUHJldmVudGluZyBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlciBhY3Rpb25zIHVwb24KKwkJICB0cmlwIHBvaW50cyBzbyB0aGF0IHVzZXIgYXBwbGljYXRpb24gY2FuIHRha2UgZnVsbAorCQkgIGNoYXJnZSBvZiB0aGUgdGhlcm1hbCBtYW5hZ2VtZW50LgorCVJXLCBPcHRpb25hbAogCi10cmlwX3BvaW50X1swLSpdX3RlbXAJCVRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0cmlwIHBvaW50IHdpbGwgYmUgZmlyZWQKLQkJCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCi0JCQkJUk8KLQkJCQlPcHRpb25hbAordHJpcF9wb2ludF9bMC0qXV90ZW1wCisJVGhlIHRlbXBlcmF0dXJlIGFib3ZlIHdoaWNoIHRyaXAgcG9pbnQgd2lsbCBiZSBmaXJlZC4KKwlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCisJUk8sIE9wdGlvbmFsCiAKLXRyaXBfcG9pbnRfWzAtKl1fdHlwZSAJCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQKLQkJCQlFLmcuIGl0IGNhbiBiZSBvbmUgb2YgY3JpdGljYWwsIGhvdCwgcGFzc2l2ZSwKLQkJCQkgICAgYWN0aXZlWzAtKl0gZm9yIEFDUEkgdGhlcm1hbCB6b25lLgotCQkJCVJPCi0JCQkJT3B0aW9uYWwKK3RyaXBfcG9pbnRfWzAtKl1fdHlwZQorCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQuCisJRS5nLiBpdCBjYW4gYmUgb25lIG9mIGNyaXRpY2FsLCBob3QsIHBhc3NpdmUsIGFjdGl2ZVswLSpdIGZvciBBQ1BJCisJdGhlcm1hbCB6b25lLgorCVJPLCBPcHRpb25hbAogCi1jZGV2WzAtKl0JCQlTeXNmcyBsaW5rIHRvIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIG5vZGUgd2hlcmUgdGhlIHN5cyBJL0YKLQkJCQlmb3IgY29vbGluZyBkZXZpY2UgdGhyb3R0bGluZyBjb250cm9sIHJlcHJlc2VudHMuCi0JCQkJUk8KLQkJCQlPcHRpb25hbAorY2RldlswLSpdCisJU3lzZnMgbGluayB0byB0aGUgdGhlcm1hbCBjb29saW5nIGRldmljZSBub2RlIHdoZXJlIHRoZSBzeXMgSS9GCisJZm9yIGNvb2xpbmcgZGV2aWNlIHRocm90dGxpbmcgY29udHJvbCByZXByZXNlbnRzLgorCVJPLCBPcHRpb25hbAogCi1jZGV2WzAtKl1fdHJpcF9wb2ludAkJVGhlIHRyaXAgcG9pbnQgd2l0aCB3aGljaCBjZGV2WzAtKl0gaXMgYXNzb2NpYXRlZCBpbiB0aGlzIHRoZXJtYWwgem9uZQotCQkJCS0xIG1lYW5zIHRoZSBjb29saW5nIGRldmljZSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSB0cmlwIHBvaW50LgotCQkJCVJPCi0JCQkJT3B0aW9uYWwKK2NkZXZbMC0qXV90cmlwX3BvaW50CisJVGhlIHRyaXAgcG9pbnQgd2l0aCB3aGljaCBjZGV2WzAtKl0gaXMgYXNzb2NpYXRlZCBpbiB0aGlzIHRoZXJtYWwKKwl6b25lOyAtMSBtZWFucyB0aGUgY29vbGluZyBkZXZpY2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgdHJpcAorCXBvaW50LgorCVJPLCBPcHRpb25hbAogCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29vbGluZyBkZXZpY2UgIGF0dHJpYnV0ZXMgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitwYXNzaXZlCisJQXR0cmlidXRlIGlzIG9ubHkgcHJlc2VudCBmb3Igem9uZXMgaW4gd2hpY2ggdGhlIHBhc3NpdmUgY29vbGluZworCXBvbGljeSBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSB0aGVybWFsIGRyaXZlci4gRGVmYXVsdCBpcyB6ZXJvCisJYW5kIGNhbiBiZSBzZXQgdG8gYSB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzKSB0byBlbmFibGUgYQorCXBhc3NpdmUgdHJpcCBwb2ludCBmb3IgdGhlIHpvbmUuIEFjdGl2YXRpb24gaXMgZG9uZSBieSBwb2xsaW5nIHdpdGgKKwlhbiBpbnRlcnZhbCBvZiAxIHNlY29uZC4KKwlVbml0OiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cworCVJXLCBPcHRpb25hbAogCi10eXBlCQkJCVN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZQotCQkJCWVnOiBGb3IgZ2VuZXJpYyBBQ1BJOiB0aGlzIHNob3VsZCBiZSAiRmFuIiwKLQkJCQkiUHJvY2Vzc29yIiBvciAiTENEIgotCQkJCWVnLiBGb3IgbWVtb3J5IGNvbnRyb2xsZXIgZGV2aWNlIG9uIGludGVsX21lbmxvdyBwbGF0Zm9ybToKLQkJCQl0aGlzIHNob3VsZCBiZSAiTWVtb3J5IGNvbnRyb2xsZXIiCi0JCQkJUk8KLQkJCQlSZXF1aXJlZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29vbGluZyBkZXZpY2UgYXR0cmlidXRlcyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1tYXhfc3RhdGUJCQlUaGUgbWF4aW11bSBwZXJtaXNzaWJsZSBjb29saW5nIHN0YXRlIG9mIHRoaXMgY29vbGluZyBkZXZpY2UuCi0JCQkJUk8KLQkJCQlSZXF1aXJlZAordHlwZQorCVN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZSwgZS5nOgorCS0gZm9yIGdlbmVyaWMgQUNQSTogc2hvdWxkIGJlICJGYW4iLCAiUHJvY2Vzc29yIiBvciAiTENEIgorCS0gZm9yIG1lbW9yeSBjb250cm9sbGVyIGRldmljZSBvbiBpbnRlbF9tZW5sb3cgcGxhdGZvcm06CisJICBzaG91bGQgYmUgIk1lbW9yeSBjb250cm9sbGVyIi4KKwlSTywgUmVxdWlyZWQKIAotY3VyX3N0YXRlCQkJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgotCQkJCXRoZSB2YWx1ZSBjYW4gYW55IGludGVnZXIgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heF9zdGF0ZSwKLQkJCQljdXJfc3RhdGUgPT0gMCBtZWFucyBubyBjb29saW5nCi0JCQkJY3VyX3N0YXRlID09IG1heF9zdGF0ZSBtZWFucyB0aGUgbWF4aW11bSBjb29saW5nLgotCQkJCVJXCi0JCQkJUmVxdWlyZWQKK21heF9zdGF0ZQorCVRoZSBtYXhpbXVtIHBlcm1pc3NpYmxlIGNvb2xpbmcgc3RhdGUgb2YgdGhpcyBjb29saW5nIGRldmljZS4KKwlSTywgUmVxdWlyZWQKKworY3VyX3N0YXRlCisJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgorCVRoZSB2YWx1ZSBjYW4gYW55IGludGVnZXIgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heF9zdGF0ZToKKwktIGN1cl9zdGF0ZSA9PSAwIG1lYW5zIG5vIGNvb2xpbmcKKwktIGN1cl9zdGF0ZSA9PSBtYXhfc3RhdGUgbWVhbnMgdGhlIG1heGltdW0gY29vbGluZy4KKwlSVywgUmVxdWlyZWQKIAogMy4gQSBzaW1wbGUgaW1wbGVtZW50YXRpb24KIAotQUNQSSB0aGVybWFsIHpvbmUgbWF5IHN1cHBvcnQgbXVsdGlwbGUgdHJpcCBwb2ludHMgbGlrZSBjcml0aWNhbC9ob3QvcGFzc2l2ZS9hY3RpdmUuCi1JZiBhbiBBQ1BJIHRoZXJtYWwgem9uZSBzdXBwb3J0cyBjcml0aWNhbCwgcGFzc2l2ZSwgYWN0aXZlWzBdIGFuZCBhY3RpdmVbMV0gYXQgdGhlIHNhbWUgdGltZSwKLWl0IG1heSByZWdpc3RlciBpdHNlbGYgYXMgYSB0aGVybWFsX3pvbmVfZGV2aWNlICh0aGVybWFsX3pvbmUxKSB3aXRoIDQgdHJpcCBwb2ludHMgaW4gYWxsLgotSXQgaGFzIG9uZSBwcm9jZXNzb3IgYW5kIG9uZSBmYW4sIHdoaWNoIGFyZSBib3RoIHJlZ2lzdGVyZWQgYXMgdGhlcm1hbF9jb29saW5nX2RldmljZS4KLUlmIHRoZSBwcm9jZXNzb3IgaXMgbGlzdGVkIGluIF9QU0wgbWV0aG9kLCBhbmQgdGhlIGZhbiBpcyBsaXN0ZWQgaW4gX0FMMCBtZXRob2QsCi10aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBidWlsdCBsaWtlIHRoaXM6CitBQ1BJIHRoZXJtYWwgem9uZSBtYXkgc3VwcG9ydCBtdWx0aXBsZSB0cmlwIHBvaW50cyBsaWtlIGNyaXRpY2FsLCBob3QsCitwYXNzaXZlLCBhY3RpdmUuIElmIGFuIEFDUEkgdGhlcm1hbCB6b25lIHN1cHBvcnRzIGNyaXRpY2FsLCBwYXNzaXZlLAorYWN0aXZlWzBdIGFuZCBhY3RpdmVbMV0gYXQgdGhlIHNhbWUgdGltZSwgaXQgbWF5IHJlZ2lzdGVyIGl0c2VsZiBhcyBhCit0aGVybWFsX3pvbmVfZGV2aWNlICh0aGVybWFsX3pvbmUxKSB3aXRoIDQgdHJpcCBwb2ludHMgaW4gYWxsLgorSXQgaGFzIG9uZSBwcm9jZXNzb3IgYW5kIG9uZSBmYW4sIHdoaWNoIGFyZSBib3RoIHJlZ2lzdGVyZWQgYXMKK3RoZXJtYWxfY29vbGluZ19kZXZpY2UuCisKK0lmIHRoZSBwcm9jZXNzb3IgaXMgbGlzdGVkIGluIF9QU0wgbWV0aG9kLCBhbmQgdGhlIGZhbiBpcyBsaXN0ZWQgaW4gX0FMMAorbWV0aG9kLCB0aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBidWlsdCBsaWtlIHRoaXM6CiAKIC9zeXMvY2xhc3MvdGhlcm1hbDoKIAogfHRoZXJtYWxfem9uZTE6Ci0JfC0tLS0tdHlwZToJCQlhY3BpdHoKLQl8LS0tLS10ZW1wOgkJCTM3MDAwCi0JfC0tLS0tbW9kZToJCQlrZXJuZWwKLQl8LS0tLS10cmlwX3BvaW50XzBfdGVtcDoJMTAwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8wX3R5cGU6CWNyaXRpY2FsCi0JfC0tLS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8xX3R5cGU6CXBhc3NpdmUKLQl8LS0tLS10cmlwX3BvaW50XzJfdGVtcDoJNzAwMDAKLQl8LS0tLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlMAotCXwtLS0tLXRyaXBfcG9pbnRfM190ZW1wOgk2MDAwMAotCXwtLS0tLXRyaXBfcG9pbnRfM190eXBlOglhY3RpdmUxCi0JfC0tLS0tY2RldjA6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTAKLQl8LS0tLS1jZGV2MF90cmlwX3BvaW50OgkJMQkvKiBjZGV2MCBjYW4gYmUgdXNlZCBmb3IgcGFzc2l2ZSAqLwotCXwtLS0tLWNkZXYxOgkJCS0tLT4vc3lzL2NsYXNzL3RoZXJtYWwvY29vbGluZ19kZXZpY2UzCi0JfC0tLS0tY2RldjFfdHJpcF9wb2ludDoJCTIJLyogY2RldjEgY2FuIGJlIHVzZWQgZm9yIGFjdGl2ZVswXSovCisgICAgfC0tLXR5cGU6CQkJYWNwaXR6CisgICAgfC0tLXRlbXA6CQkJMzcwMDAKKyAgICB8LS0tbW9kZToJCQlrZXJuZWwKKyAgICB8LS0tdHJpcF9wb2ludF8wX3RlbXA6CTEwMDAwMAorICAgIHwtLS10cmlwX3BvaW50XzBfdHlwZToJY3JpdGljYWwKKyAgICB8LS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCisgICAgfC0tLXRyaXBfcG9pbnRfMV90eXBlOglwYXNzaXZlCisgICAgfC0tLXRyaXBfcG9pbnRfMl90ZW1wOgk3MDAwMAorICAgIHwtLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlMAorICAgIHwtLS10cmlwX3BvaW50XzNfdGVtcDoJNjAwMDAKKyAgICB8LS0tdHJpcF9wb2ludF8zX3R5cGU6CWFjdGl2ZTEKKyAgICB8LS0tY2RldjA6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTAKKyAgICB8LS0tY2RldjBfdHJpcF9wb2ludDoJMQkvKiBjZGV2MCBjYW4gYmUgdXNlZCBmb3IgcGFzc2l2ZSAqLworICAgIHwtLS1jZGV2MToJCQktLS0+L3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlMworICAgIHwtLS1jZGV2MV90cmlwX3BvaW50OgkyCS8qIGNkZXYxIGNhbiBiZSB1c2VkIGZvciBhY3RpdmVbMF0qLwogCiB8Y29vbGluZ19kZXZpY2UwOgotCXwtLS0tLXR5cGU6CQkJUHJvY2Vzc29yCi0JfC0tLS0tbWF4X3N0YXRlOgkJOAotCXwtLS0tLWN1cl9zdGF0ZToJCTAKKyAgICB8LS0tdHlwZToJCQlQcm9jZXNzb3IKKyAgICB8LS0tbWF4X3N0YXRlOgkJOAorICAgIHwtLS1jdXJfc3RhdGU6CQkwCiAKIHxjb29saW5nX2RldmljZTM6Ci0JfC0tLS0tdHlwZToJCQlGYW4KLQl8LS0tLS1tYXhfc3RhdGU6CQkyCi0JfC0tLS0tY3VyX3N0YXRlOgkJMAorICAgIHwtLS10eXBlOgkJCUZhbgorICAgIHwtLS1tYXhfc3RhdGU6CQkyCisgICAgfC0tLWN1cl9zdGF0ZToJCTAKIAogL3N5cy9jbGFzcy9od21vbjoKIAogfGh3bW9uMDoKLQl8LS0tLS1uYW1lOgkJCWFjcGl0egotCXwtLS0tLXRlbXAxX2lucHV0OgkJMzcwMDAKLQl8LS0tLS10ZW1wMV9jcml0OgkJMTAwMDAwCisgICAgfC0tLW5hbWU6CQkJYWNwaXR6CisgICAgfC0tLXRlbXAxX2lucHV0OgkJMzcwMDAKKyAgICB8LS0tdGVtcDFfY3JpdDoJCTEwMDAwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CmluZGV4IDk1N2IyMmYuLjgxNzk2OTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKQEAgLTEyMzEsNiArMTIzMSw3IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjZGVmaW5lIF9TVFIoeCkgI3gKICNkZWZpbmUgU1RSKHgpIF9TVFIoeCkKQEAgLTEyNjUsNiArMTI2Niw3IEBACiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICB9CiAKKyAgICAgICBzdHJjYXQoZGVidWdmcywgIi90cmFjaW5nLyIpOwogICAgICAgIGRlYnVnZnNfZm91bmQgPSAxOwogCiAgICAgICAgcmV0dXJuIGRlYnVnZnM7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZmFkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dApAQCAtMCwwICsxLDEzNiBAQAorV2hhdCBpcyBod3BvaXNvbj8KKworVXBjb21pbmcgSW50ZWwgQ1BVcyBoYXZlIHN1cHBvcnQgZm9yIHJlY292ZXJpbmcgZnJvbSBzb21lIG1lbW9yeSBlcnJvcnMKKyhgYE1DQSByZWNvdmVyeScnKS4gVGhpcyByZXF1aXJlcyB0aGUgT1MgdG8gZGVjbGFyZSBhIHBhZ2UgInBvaXNvbmVkIiwKK2tpbGwgdGhlIHByb2Nlc3NlcyBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIGF2b2lkIHVzaW5nIGl0IGluIHRoZSBmdXR1cmUuCisKK1RoaXMgcGF0Y2hraXQgaW1wbGVtZW50cyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGluIHRoZSBWTS4KKworVG8gcXVvdGUgdGhlIG92ZXJ2aWV3IGNvbW1lbnQ6CisKKyAqIEhpZ2ggbGV2ZWwgbWFjaGluZSBjaGVjayBoYW5kbGVyLiBIYW5kbGVzIHBhZ2VzIHJlcG9ydGVkIGJ5IHRoZQorICogaGFyZHdhcmUgYXMgYmVpbmcgY29ycnVwdGVkIHVzdWFsbHkgZHVlIHRvIGEgMmJpdCBFQ0MgbWVtb3J5IG9yIGNhY2hlCisgKiBmYWlsdXJlLgorICoKKyAqIFRoaXMgZm9jdXNzZXMgb24gcGFnZXMgZGV0ZWN0ZWQgYXMgY29ycnVwdGVkIGluIHRoZSBiYWNrZ3JvdW5kLgorICogV2hlbiB0aGUgY3VycmVudCBDUFUgdHJpZXMgdG8gY29uc3VtZSBjb3JydXB0aW9uIHRoZSBjdXJyZW50bHkKKyAqIHJ1bm5pbmcgcHJvY2VzcyBjYW4ganVzdCBiZSBraWxsZWQgZGlyZWN0bHkgaW5zdGVhZC4gVGhpcyBpbXBsaWVzCisgKiB0aGF0IGlmIHRoZSBlcnJvciBjYW5ub3QgYmUgaGFuZGxlZCBmb3Igc29tZSByZWFzb24gaXQncyBzYWZlIHRvCisgKiBqdXN0IGlnbm9yZSBpdCBiZWNhdXNlIG5vIGNvcnJ1cHRpb24gaGFzIGJlZW4gY29uc3VtZWQgeWV0LiBJbnN0ZWFkCisgKiB3aGVuIHRoYXQgaGFwcGVucyBhbm90aGVyIG1hY2hpbmUgY2hlY2sgd2lsbCBoYXBwZW4uCisgKgorICogSGFuZGxlcyBwYWdlIGNhY2hlIHBhZ2VzIGluIHZhcmlvdXMgc3RhdGVzLiBUaGUgdHJpY2t5IHBhcnQKKyAqIGhlcmUgaXMgdGhhdCB3ZSBjYW4gYWNjZXNzIGFueSBwYWdlIGFzeW5jaHJvbm91cyB0byBvdGhlciBWTQorICogdXNlcnMsIGJlY2F1c2UgbWVtb3J5IGZhaWx1cmVzIGNvdWxkIGhhcHBlbiBhbnl0aW1lIGFuZCBhbnl3aGVyZSwKKyAqIHBvc3NpYmx5IHZpb2xhdGluZyBzb21lIG9mIHRoZWlyIGFzc3VtcHRpb25zLiBUaGlzIGlzIHdoeSB0aGlzIGNvZGUKKyAqIGhhcyB0byBiZSBleHRyZW1lbHkgY2FyZWZ1bC4gR2VuZXJhbGx5IGl0IHRyaWVzIHRvIHVzZSBub3JtYWwgbG9ja2luZworICogcnVsZXMsIGFzIGluIGdldCB0aGUgc3RhbmRhcmQgbG9ja3MsIGV2ZW4gaWYgdGhhdCBtZWFucyB0aGUKKyAqIGVycm9yIGhhbmRsaW5nIHRha2VzIHBvdGVudGlhbGx5IGEgbG9uZyB0aW1lLgorICoKKyAqIFNvbWUgb2YgdGhlIG9wZXJhdGlvbnMgaGVyZSBhcmUgc29tZXdoYXQgaW5lZmZpY2llbnQgYW5kIGhhdmUgbm9uCisgKiBsaW5lYXIgYWxnb3JpdGhtaWMgY29tcGxleGl0eSwgYmVjYXVzZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgbm90CisgKiBiZWVuIG9wdGltaXplZCBmb3IgdGhpcyBjYXNlLiBUaGlzIGlzIGluIHBhcnRpY3VsYXIgdGhlIGNhc2UKKyAqIGZvciB0aGUgbWFwcGluZyBmcm9tIGEgdm1hIHRvIGEgcHJvY2Vzcy4gU2luY2UgdGhpcyBjYXNlIGlzIGV4cGVjdGVkCisgKiB0byBiZSByYXJlIHdlIGhvcGUgd2UgY2FuIGdldCBhd2F5IHdpdGggdGhpcy4KKworVGhlIGNvZGUgY29uc2lzdHMgb2YgYSB0aGUgaGlnaCBsZXZlbCBoYW5kbGVyIGluIG1tL21lbW9yeS1mYWlsdXJlLmMsCithIG5ldyBwYWdlIHBvaXNvbiBiaXQgYW5kIHZhcmlvdXMgY2hlY2tzIGluIHRoZSBWTSB0byBoYW5kbGUgcG9pc29uZWQKK3BhZ2VzLgorCitUaGUgbWFpbiB0YXJnZXQgcmlnaHQgbm93IGlzIEtWTSBndWVzdHMsIGJ1dCBpdCB3b3JrcyBmb3IgYWxsIGtpbmRzCitvZiBhcHBsaWNhdGlvbnMuIEtWTSBzdXBwb3J0IHJlcXVpcmVzIGEgcmVjZW50IHFlbXUta3ZtIHJlbGVhc2UuCisKK0ZvciB0aGUgS1ZNIHVzZSB0aGVyZSB3YXMgbmVlZCBmb3IgYSBuZXcgc2lnbmFsIHR5cGUgc28gdGhhdAorS1ZNIGNhbiBpbmplY3QgdGhlIG1hY2hpbmUgY2hlY2sgaW50byB0aGUgZ3Vlc3Qgd2l0aCB0aGUgcHJvcGVyCithZGRyZXNzLiBUaGlzIGluIHRoZW9yeSBhbGxvd3Mgb3RoZXIgYXBwbGljYXRpb25zIHRvIGhhbmRsZQorbWVtb3J5IGZhaWx1cmVzIHRvby4gVGhlIGV4cGVjdGlvbiBpcyB0aGF0IG5lYXIgYWxsIGFwcGxpY2F0aW9ucword29uJ3QgZG8gdGhhdCwgYnV0IHNvbWUgdmVyeSBzcGVjaWFsaXplZCBvbmVzIG1pZ2h0LgorCistLS0KKworVGhlcmUgYXJlIHR3byAoYWN0dWFsbHkgdGhyZWUpIG1vZGkgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgY2FuIGJlIGluOgorCit2bS5tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBzeXNjdGwgc2V0IHRvIHplcm86CisJQWxsIG1lbW9yeSBmYWlsdXJlcyBjYXVzZSBhIHBhbmljLiBEbyBub3QgYXR0ZW1wdCByZWNvdmVyeS4KKwkob24geDg2IHRoaXMgY2FuIGJlIGFsc28gYWZmZWN0ZWQgYnkgdGhlIHRvbGVyYW50IGxldmVsIG9mIHRoZQorCU1DRSBzdWJzeXN0ZW0pCisKK2Vhcmx5IGtpbGwKKwkoY2FuIGJlIGNvbnRyb2xsZWQgZ2xvYmFsbHkgYW5kIHBlciBwcm9jZXNzKQorCVNlbmQgU0lHQlVTIHRvIHRoZSBhcHBsaWNhdGlvbiBhcyBzb29uIGFzIHRoZSBlcnJvciBpcyBkZXRlY3RlZAorCVRoaXMgYWxsb3dzIGFwcGxpY2F0aW9ucyB3aG8gY2FuIHByb2Nlc3MgbWVtb3J5IGVycm9ycyBpbiBhIGdlbnRsZQorCXdheSAoZS5nLiBkcm9wIGFmZmVjdGVkIG9iamVjdCkKKwlUaGlzIGlzIHRoZSBtb2RlIHVzZWQgYnkgS1ZNIHFlbXUuCisKK2xhdGUga2lsbAorCVNlbmQgU0lHQlVTIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHJ1bnMgaW50byB0aGUgY29ycnVwdGVkIHBhZ2UuCisJVGhpcyBpcyBiZXN0IGZvciBtZW1vcnkgZXJyb3IgdW5hd2FyZSBhcHBsaWNhdGlvbnMgYW5kIGRlZmF1bHQKKwlOb3RlIHNvbWUgcGFnZXMgYXJlIGFsd2F5cyBoYW5kbGVkIGFzIGxhdGUga2lsbC4KKworLS0tCisKK1VzZXIgY29udHJvbDoKKwordm0ubWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkKKwlTZWUgc3lzY3RsLnR4dAorCit2bS5tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsCisJRW5hYmxlIGVhcmx5IGtpbGwgbW9kZSBnbG9iYWxseQorCitQUl9NQ0VfS0lMTAorCVNldCBlYXJseS9sYXRlIGtpbGwgbW9kZS9yZXZlcnQgdG8gc3lzdGVtIGRlZmF1bHQKKwlhcmcxOiBQUl9NQ0VfS0lMTF9DTEVBUjogUmV2ZXJ0IHRvIHN5c3RlbSBkZWZhdWx0CisJYXJnMTogUFJfTUNFX0tJTExfU0VUOiBhcmcyIGRlZmluZXMgdGhyZWFkIHNwZWNpZmljIG1vZGUKKwkJUFJfTUNFX0tJTExfRUFSTFk6IEVhcmx5IGtpbGwKKwkJUFJfTUNFX0tJTExfTEFURTogIExhdGUga2lsbAorCQlQUl9NQ0VfS0lMTF9ERUZBVUxUOiBVc2Ugc3lzdGVtIGdsb2JhbCBkZWZhdWx0CitQUl9NQ0VfS0lMTF9HRVQKKwlyZXR1cm4gY3VycmVudCBtb2RlCisKKworLS0tCisKK1Rlc3Rpbmc6CisKK21hZHZpc2UoTUFEVl9QT0lTT04sIC4uLi4pCisJKGFzIHJvb3QpCisJUG9pc29uIGEgcGFnZSBpbiB0aGUgcHJvY2VzcyBmb3IgdGVzdGluZworCisKK2h3cG9pc29uLWluamVjdCBtb2R1bGUgdGhyb3VnaCBkZWJ1Z2ZzCisJL3N5cy9kZWJ1Zy9od3BvaXNvbi9jb3JydXB0LXBmbgorCitJbmplY3QgaHdwb2lzb24gZmF1bHQgYXQgUEZOIGVjaG9lZCBpbnRvIHRoaXMgZmlsZQorCisKK0FyY2hpdGVjdHVyZSBzcGVjaWZpYyBNQ0UgaW5qZWN0b3IKKworeDg2IGhhcyBtY2UtaW5qZWN0LCBtY2UtdGVzdAorCitTb21lIHBvcnRhYmxlIGh3cG9pc29uIHRlc3QgcHJvZ3JhbXMgaW4gbWNlLXRlc3QsIHNlZSBibG93LgorCistLS0KKworUmVmZXJlbmNlczoKKworaHR0cDovL2hhbG9iYXRlcy5kZS9tY2UtbGMwOS0yLnBkZgorCU92ZXJ2aWV3IHByZXNlbnRhdGlvbiBmcm9tIExpbnV4Q29uIDA5CisKK2dpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvY3B1L21jZS9tY2UtdGVzdC5naXQKKwlUZXN0IHN1aXRlIChod3BvaXNvbiBzcGVjaWZpYyBwb3J0YWJsZSB0ZXN0cyBpbiB0c3JjKQorCitnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2NwdS9tY2UvbWNlLWluamVjdC5naXQKKwl4ODYgc3BlY2lmaWMgaW5qZWN0b3IKKworCistLS0KKworTGltaXRhdGlvbnM6CisKKy0gTm90IGFsbCBwYWdlIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYW5kIG5ldmVyIHdpbGwuIE1vc3Qga2VybmVsIGludGVybmFsCitvYmplY3RzIGNhbm5vdCBiZSByZWNvdmVyZWQsIG9ubHkgTFJVIHBhZ2VzIGZvciBub3cuCistIFJpZ2h0IG5vdyBodWdlcGFnZSBzdXBwb3J0IGlzIG1pc3NpbmcuCisKKy0tLQorQW5kaSBLbGVlbiwgT2N0IDIwMDkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0IGIvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0CmluZGV4IDcyYTIyZjYuLjI2MmQ4ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0va3NtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQKQEAgLTUyLDE1ICs1MiwxNSBAQAogcmVhZGFibGUgYnkgYWxsIGJ1dCB3cml0YWJsZSBvbmx5IGJ5IHJvb3Q6CiAKIG1heF9rZXJuZWxfcGFnZXMgLSBzZXQgdG8gbWF4aW11bSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRoYXQgS1NNIG1heSB1c2UKLSAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDIwMDAgPiAvc3lzL2tlcm5lbC9tbS9rc20vbWF4X2tlcm5lbF9wYWdlcyIKKyAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDEwMDAwMCA+IC9zeXMva2VybmVsL21tL2tzbS9tYXhfa2VybmVsX3BhZ2VzIgogICAgICAgICAgICAgICAgICAgIFZhbHVlIDAgaW1wb3NlcyBubyBsaW1pdCBvbiB0aGUga2VybmVsIHBhZ2VzIEtTTSBtYXkgdXNlOwogICAgICAgICAgICAgICAgICAgIGJ1dCBub3RlIHRoYXQgYW55IHByb2Nlc3MgdXNpbmcgTUFEVl9NRVJHRUFCTEUgY2FuIGNhdXNlCiAgICAgICAgICAgICAgICAgICAgS1NNIHRvIGFsbG9jYXRlIHRoZXNlIHBhZ2VzLCB1bnN3YXBwYWJsZSB1bnRpbCBpdCBleGl0cy4KLSAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAyMDAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogcXVhcnRlciBvZiBtZW1vcnkgKGNob3NlbiB0byBub3QgcGluIHRvbyBtdWNoKQogCiBwYWdlc190b19zY2FuICAgIC0gaG93IG1hbnkgcHJlc2VudCBwYWdlcyB0byBzY2FuIGJlZm9yZSBrc21kIGdvZXMgdG8gc2xlZXAKLSAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDIwMCA+IC9zeXMva2VybmVsL21tL2tzbS9wYWdlc190b19zY2FuIgotICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IDIwMCAoY2hvc2VuIGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzKQorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMTAwID4gL3N5cy9rZXJuZWwvbW0va3NtL3BhZ2VzX3RvX3NjYW4iCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMTAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCiAKIHNsZWVwX21pbGxpc2VjcyAgLSBob3cgbWFueSBtaWxsaXNlY29uZHMga3NtZCBzaG91bGQgc2xlZXAgYmVmb3JlIG5leHQgc2NhbgogICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAgPiAvc3lzL2tlcm5lbC9tbS9rc20vc2xlZXBfbWlsbGlzZWNzIgpAQCAtNzAsNyArNzAsOCBAQAogICAgICAgICAgICAgICAgICAgIHNldCAxIHRvIHJ1biBrc21kIGUuZy4gImVjaG8gMSA+IC9zeXMva2VybmVsL21tL2tzbS9ydW4iLAogICAgICAgICAgICAgICAgICAgIHNldCAyIHRvIHN0b3Aga3NtZCBhbmQgdW5tZXJnZSBhbGwgcGFnZXMgY3VycmVudGx5IG1lcmdlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgbGVhdmUgbWVyZ2VhYmxlIGFyZWFzIHJlZ2lzdGVyZWQgZm9yIG5leHQgcnVuCi0gICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMSAoZm9yIGltbWVkaWF0ZSB1c2UgYnkgYXBwcyB3aGljaCByZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAwIChtdXN0IGJlIGNoYW5nZWQgdG8gMSB0byBhY3RpdmF0ZSBLU00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGlmIENPTkZJR19TWVNGUyBpcyBkaXNhYmxlZCkKIAogVGhlIGVmZmVjdGl2ZW5lc3Mgb2YgS1NNIGFuZCBNQURWX01FUkdFQUJMRSBpcyBzaG93biBpbiAvc3lzL2tlcm5lbC9tbS9rc20vOgogCkBAIC04Niw0ICs4Nyw0IEBACiBwcm9wb3J0aW9uIHRoZXJlIHdvdWxkIGFsc28gaW5kaWNhdGUgcG9vciB1c2Ugb2YgbWFkdmlzZSBNQURWX01FUkdFQUJMRS4KIAogSXppayBFaWR1cywKLUh1Z2ggRGlja2lucywgMzAgSnVseSAyMDA5CitIdWdoIERpY2tpbnMsIDI0IFNlcHQgMjAwOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlLXR5cGVzLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwppbmRleCBmYTFhMzBkLi40NzkzYzZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYworKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwpAQCAtMiw3ICsyLDEwIEBACiAgKiBwYWdlLXR5cGVzOiBUb29sIGZvciBxdWVyeWluZyBwYWdlIGZsYWdzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIGNvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgV3UgRmVuZ2d1YW5nIDxmZW5nZ3Vhbmcud3VAaW50ZWwuY29tPgorICoKKyAqIEF1dGhvcnM6IFd1IEZlbmdndWFuZyA8ZmVuZ2d1YW5nLnd1QGludGVsLmNvbT4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KICAqLwogCiAjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKQEAgLTY5LDcgKzcyLDkgQEAKICNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwJMTYKICNkZWZpbmUgS1BGX0hVR0UJCTE3CiAjZGVmaW5lIEtQRl9VTkVWSUNUQUJMRQkJMTgKKyNkZWZpbmUgS1BGX0hXUE9JU09OCQkxOQogI2RlZmluZSBLUEZfTk9QQUdFCQkyMAorI2RlZmluZSBLUEZfS1NNCQkJMjEKIAogLyogWzMyLV0ga2VybmVsIGhhY2tpbmcgYXNzaXN0YW5jZXMgKi8KICNkZWZpbmUgS1BGX1JFU0VSVkVECQkzMgpAQCAtMTE2LDcgKzEyMSw5IEBACiAJW0tQRl9DT01QT1VORF9UQUlMXQk9ICJUOmNvbXBvdW5kX3RhaWwiLAogCVtLUEZfSFVHRV0JCT0gIkc6aHVnZSIsCiAJW0tQRl9VTkVWSUNUQUJMRV0JPSAidTp1bmV2aWN0YWJsZSIsCisJW0tQRl9IV1BPSVNPTl0JCT0gIlg6aHdwb2lzb24iLAogCVtLUEZfTk9QQUdFXQkJPSAibjpub3BhZ2UiLAorCVtLUEZfS1NNXQkJPSAieDprc20iLAogCiAJW0tQRl9SRVNFUlZFRF0JCT0gInI6cmVzZXJ2ZWQiLAogCVtLUEZfTUxPQ0tFRF0JCT0gIm06bWxvY2tlZCIsCkBAIC0xNTIsOSArMTU5LDYgQEAKIHN0YXRpYyBpbnQJCW5yX3ZtYXM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwZ19zdGFydFtNQVhfVk1BU107CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwZ19lbmRbTUFYX1ZNQVNdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcJdm9mZnNldDsKLQotc3RhdGljIGludAkJcGFnZW1hcF9mZDsKIAogI2RlZmluZSBNQVhfQklUX0ZJTFRFUlMJNjQKIHN0YXRpYyBpbnQJCW5yX2JpdF9maWx0ZXJzOwpAQCAtMTYzLDkgKzE2NywxNiBAQAogCiBzdGF0aWMgaW50CQlwYWdlX3NpemU7CiAKLSNkZWZpbmUgUEFHRVNfQkFUQ0gJKDY0IDw8IDEwKQkvKiA2NGsgcGFnZXMgKi8KK3N0YXRpYyBpbnQJCXBhZ2VtYXBfZmQ7CiBzdGF0aWMgaW50CQlrcGFnZWZsYWdzX2ZkOwogCitzdGF0aWMgaW50CQlvcHRfaHdwb2lzb247CitzdGF0aWMgaW50CQlvcHRfdW5wb2lzb247CisKK3N0YXRpYyBjaGFyCQkqaHdwb2lzb25fZGVidWdfZnMgPSAiL2RlYnVnL2h3cG9pc29uIjsKK3N0YXRpYyBpbnQJCWh3cG9pc29uX2luamVjdF9mZDsKK3N0YXRpYyBpbnQJCWh3cG9pc29uX2ZvcmdldF9mZDsKKwogI2RlZmluZSBIQVNIX1NISUZUCTEzCiAjZGVmaW5lIEhBU0hfU0laRQkoMSA8PCBIQVNIX1NISUZUKQogI2RlZmluZSBIQVNIX01BU0sJKEhBU0hfU0laRSAtIDEpCkBAIC0yMDcsNiArMjE4LDc0IEBACiAJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCitzdGF0aWMgaW50IGNoZWNrZWRfb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzKQoreworCWludCBmZCA9IG9wZW4ocGF0aG5hbWUsIGZsYWdzKTsKKworCWlmIChmZCA8IDApIHsKKwkJcGVycm9yKHBhdGhuYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXJldHVybiBmZDsKK30KKworLyoKKyAqIHBhZ2VtYXAva3BhZ2VmbGFncyByb3V0aW5lcworICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3U2NF9yZWFkKGludCBmZCwgY2hhciAqbmFtZSwKKwkJCQkgdWludDY0X3QgKmJ1ZiwKKwkJCQkgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJCQkgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlsb25nIGJ5dGVzOworCisJaWYgKGluZGV4ID4gVUxPTkdfTUFYIC8gOCkKKwkJZmF0YWwoImluZGV4IG92ZXJmbG93OiAlbHVcbiIsIGluZGV4KTsKKworCWlmIChsc2VlayhmZCwgaW5kZXggKiA4LCBTRUVLX1NFVCkgPCAwKSB7CisJCXBlcnJvcihuYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWJ5dGVzID0gcmVhZChmZCwgYnVmLCBjb3VudCAqIDgpOworCWlmIChieXRlcyA8IDApIHsKKwkJcGVycm9yKG5hbWUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChieXRlcyAlIDgpCisJCWZhdGFsKCJwYXJ0aWFsIHJlYWQ6ICVsdSBieXRlc1xuIiwgYnl0ZXMpOworCisJcmV0dXJuIGJ5dGVzIC8gODsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcga3BhZ2VmbGFnc19yZWFkKHVpbnQ2NF90ICpidWYsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlcykKK3sKKwlyZXR1cm4gZG9fdTY0X3JlYWQoa3BhZ2VmbGFnc19mZCwgUFJPQ19LUEFHRUZMQUdTLCBidWYsIGluZGV4LCBwYWdlcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcmVhZCh1aW50NjRfdCAqYnVmLAorCQkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGFnZXMpCit7CisJcmV0dXJuIGRvX3U2NF9yZWFkKHBhZ2VtYXBfZmQsICIvcHJvYy9waWQvcGFnZW1hcCIsIGJ1ZiwgaW5kZXgsIHBhZ2VzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9wZm4odWludDY0X3QgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcGZuOworCisJaWYgKHZhbCAmIFBNX1BSRVNFTlQpCisJCXBmbiA9IFBNX1BGUkFNRSh2YWwpOworCWVsc2UKKwkJcGZuID0gMDsKKworCXJldHVybiBwZm47Cit9CisKIAogLyoKICAqIHBhZ2UgZmxhZyBuYW1lcwpAQCAtMjU1LDcgKzMzNCw4IEBACiAgKiBwYWdlIGxpc3QgYW5kIHN1bW1hcnkKICAqLwogCi1zdGF0aWMgdm9pZCBzaG93X3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgc2hvd19wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7CiAJc3RhdGljIHVpbnQ2NF90ICAgICAgZmxhZ3MwOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHZvZmY7CkBAIC0yODEsNyArMzYxLDggQEAKIAljb3VudCAgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgc2hvd19wYWdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQogewogCWlmIChvcHRfcGlkKQogCQlwcmludGYoIiVseFx0Iiwgdm9mZnNldCk7CkBAIC0zNjIsNiArNDQzLDYyIEBACiAJcmV0dXJuIGZsYWdzOwogfQogCitzdGF0aWMgdWludDY0X3Qga3BhZ2VmbGFnc19mbGFncyh1aW50NjRfdCBmbGFncykKK3sKKwlmbGFncyA9IGV4cGFuZF9vdmVybG9hZGVkX2ZsYWdzKGZsYWdzKTsKKworCWlmICghb3B0X3JhdykKKwkJZmxhZ3MgPSB3ZWxsX2tub3duX2ZsYWdzKGZsYWdzKTsKKworCXJldHVybiBmbGFnczsKK30KKworLyoKKyAqIHBhZ2UgYWN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIHByZXBhcmVfaHdwb2lzb25fZmQodm9pZCkKK3sKKwljaGFyIGJ1ZlsxMDBdOworCisJaWYgKG9wdF9od3BvaXNvbiAmJiAhaHdwb2lzb25faW5qZWN0X2ZkKSB7CisJCXNwcmludGYoYnVmLCAiJXMvY29ycnVwdC1wZm4iLCBod3BvaXNvbl9kZWJ1Z19mcyk7CisJCWh3cG9pc29uX2luamVjdF9mZCA9IGNoZWNrZWRfb3BlbihidWYsIE9fV1JPTkxZKTsKKwl9CisKKwlpZiAob3B0X3VucG9pc29uICYmICFod3BvaXNvbl9mb3JnZXRfZmQpIHsKKwkJc3ByaW50ZihidWYsICIlcy9yZW5ldy1wZm4iLCBod3BvaXNvbl9kZWJ1Z19mcyk7CisJCWh3cG9pc29uX2ZvcmdldF9mZCA9IGNoZWNrZWRfb3BlbihidWYsIE9fV1JPTkxZKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaHdwb2lzb25fcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwljaGFyIGJ1ZlsxMDBdOworCWludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBvZmZzZXQpOworCWxlbiA9IHdyaXRlKGh3cG9pc29uX2luamVjdF9mZCwgYnVmLCBsZW4pOworCWlmIChsZW4gPCAwKSB7CisJCXBlcnJvcigiaHdwb2lzb24gaW5qZWN0Iik7CisJCXJldHVybiBsZW47CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVucG9pc29uX3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJY2hhciBidWZbMTAwXTsKKwlpbnQgbGVuOworCisJbGVuID0gc3ByaW50ZihidWYsICIweCVseFxuIiwgb2Zmc2V0KTsKKwlsZW4gPSB3cml0ZShod3BvaXNvbl9mb3JnZXRfZmQsIGJ1ZiwgbGVuKTsKKwlpZiAobGVuIDwgMCkgeworCQlwZXJyb3IoImh3cG9pc29uIGZvcmdldCIpOworCQlyZXR1cm4gbGVuOworCX0KKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIHBhZ2UgZnJhbWUgd2Fsa2VyCkBAIC0zOTQsMTA0ICs1MzEsODMgQEAKIAlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9wYWdlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1aW50NjRfdCBmbGFncykKK3N0YXRpYyB2b2lkIGFkZF9wYWdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7Ci0JZmxhZ3MgPSBleHBhbmRfb3ZlcmxvYWRlZF9mbGFncyhmbGFncyk7Ci0KLQlpZiAoIW9wdF9yYXcpCi0JCWZsYWdzID0gd2VsbF9rbm93bl9mbGFncyhmbGFncyk7CisJZmxhZ3MgPSBrcGFnZWZsYWdzX2ZsYWdzKGZsYWdzKTsKIAogCWlmICghYml0X21hc2tfb2soZmxhZ3MpKQogCQlyZXR1cm47CiAKKwlpZiAob3B0X2h3cG9pc29uKQorCQlod3BvaXNvbl9wYWdlKG9mZnNldCk7CisJaWYgKG9wdF91bnBvaXNvbikKKwkJdW5wb2lzb25fcGFnZShvZmZzZXQpOworCiAJaWYgKG9wdF9saXN0ID09IDEpCi0JCXNob3dfcGFnZV9yYW5nZShvZmZzZXQsIGZsYWdzKTsKKwkJc2hvd19wYWdlX3JhbmdlKHZvZmZzZXQsIG9mZnNldCwgZmxhZ3MpOwogCWVsc2UgaWYgKG9wdF9saXN0ID09IDIpCi0JCXNob3dfcGFnZShvZmZzZXQsIGZsYWdzKTsKKwkJc2hvd19wYWdlKHZvZmZzZXQsIG9mZnNldCwgZmxhZ3MpOwogCiAJbnJfcGFnZXNbaGFzaF9zbG90KGZsYWdzKV0rKzsKIAl0b3RhbF9wYWdlcysrOwogfQogCi1zdGF0aWMgdm9pZCB3YWxrX3Bmbih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGNvdW50KQorI2RlZmluZSBLUEFHRUZMQUdTX0JBVENICSg2NCA8PCAxMCkJLyogNjRrIHBhZ2VzICovCitzdGF0aWMgdm9pZCB3YWxrX3Bmbih1bnNpZ25lZCBsb25nIHZvZmZzZXQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGNvdW50KQogeworCXVpbnQ2NF90IGJ1ZltLUEFHRUZMQUdTX0JBVENIXTsKIAl1bnNpZ25lZCBsb25nIGJhdGNoOwotCXVuc2lnbmVkIGxvbmcgbjsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmIChpbmRleCA+IFVMT05HX01BWCAvIEtQRl9CWVRFUykKLQkJZmF0YWwoImluZGV4IG92ZXJmbG93OiAlbHVcbiIsIGluZGV4KTsKLQotCWxzZWVrKGtwYWdlZmxhZ3NfZmQsIGluZGV4ICogS1BGX0JZVEVTLCBTRUVLX1NFVCk7Ci0KIAl3aGlsZSAoY291bnQpIHsKLQkJdWludDY0X3Qga3BhZ2VmbGFnc19idWZbS1BGX0JZVEVTICogUEFHRVNfQkFUQ0hdOwotCi0JCWJhdGNoID0gbWluX3QodW5zaWduZWQgbG9uZywgY291bnQsIFBBR0VTX0JBVENIKTsKLQkJbiA9IHJlYWQoa3BhZ2VmbGFnc19mZCwga3BhZ2VmbGFnc19idWYsIGJhdGNoICogS1BGX0JZVEVTKTsKLQkJaWYgKG4gPT0gMCkKKwkJYmF0Y2ggPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBjb3VudCwgS1BBR0VGTEFHU19CQVRDSCk7CisJCXBhZ2VzID0ga3BhZ2VmbGFnc19yZWFkKGJ1ZiwgaW5kZXgsIGJhdGNoKTsKKwkJaWYgKHBhZ2VzID09IDApCiAJCQlicmVhazsKLQkJaWYgKG4gPCAwKSB7Ci0JCQlwZXJyb3IoUFJPQ19LUEFHRUZMQUdTKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQogCi0JCWlmIChuICUgS1BGX0JZVEVTICE9IDApCi0JCQlmYXRhbCgicGFydGlhbCByZWFkOiAlbHUgYnl0ZXNcbiIsIG4pOwotCQluID0gbiAvIEtQRl9CWVRFUzsKKwkJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspCisJCQlhZGRfcGFnZSh2b2Zmc2V0ICsgaSwgaW5kZXggKyBpLCBidWZbaV0pOwogCi0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCQlhZGRfcGFnZShpbmRleCArIGksIGtwYWdlZmxhZ3NfYnVmW2ldKTsKLQotCQlpbmRleCArPSBiYXRjaDsKLQkJY291bnQgLT0gYmF0Y2g7CisJCWluZGV4ICs9IHBhZ2VzOworCQljb3VudCAtPSBwYWdlczsKIAl9CiB9CiAKLQotI2RlZmluZSBQQUdFTUFQX0JBVENICTQwOTYKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRhc2tfcGZuKHVuc2lnbmVkIGxvbmcgcGdvZmYpCisjZGVmaW5lIFBBR0VNQVBfQkFUQ0gJKDY0IDw8IDEwKQorc3RhdGljIHZvaWQgd2Fsa192bWEodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQlzdGF0aWMgdWludDY0X3QgYnVmW1BBR0VNQVBfQkFUQ0hdOwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0OwotCXN0YXRpYyBsb25nIGNvdW50OwotCXVpbnQ2NF90IHBmbjsKKwl1aW50NjRfdCBidWZbUEFHRU1BUF9CQVRDSF07CisJdW5zaWduZWQgbG9uZyBiYXRjaDsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmIChwZ29mZiA8IHN0YXJ0IHx8IHBnb2ZmID49IHN0YXJ0ICsgY291bnQpIHsKLQkJaWYgKGxzZWVrNjQocGFnZW1hcF9mZCwKLQkJCSAgICAodWludDY0X3QpcGdvZmYgKiBQTV9FTlRSWV9CWVRFUywKLQkJCSAgICBTRUVLX1NFVCkgPCAwKSB7Ci0JCQlwZXJyb3IoInBhZ2VtYXAgc2VlayIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCXdoaWxlIChjb3VudCkgeworCQliYXRjaCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGNvdW50LCBQQUdFTUFQX0JBVENIKTsKKwkJcGFnZXMgPSBwYWdlbWFwX3JlYWQoYnVmLCBpbmRleCwgYmF0Y2gpOworCQlpZiAocGFnZXMgPT0gMCkKKwkJCWJyZWFrOworCisJCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CisJCQlwZm4gPSBwYWdlbWFwX3BmbihidWZbaV0pOworCQkJaWYgKHBmbikKKwkJCQl3YWxrX3BmbihpbmRleCArIGksIHBmbiwgMSk7CiAJCX0KLQkJY291bnQgPSByZWFkKHBhZ2VtYXBfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQlpZiAoY291bnQgPT0gMCkKLQkJCXJldHVybiAwOwotCQlpZiAoY291bnQgPCAwKSB7Ci0JCQlwZXJyb3IoInBhZ2VtYXAgcmVhZCIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9Ci0JCWlmIChjb3VudCAlIFBNX0VOVFJZX0JZVEVTKSB7Ci0JCQlmYXRhbCgicGFnZW1hcCByZWFkIG5vdCBhbGlnbmVkLlxuIik7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQkJY291bnQgLz0gUE1fRU5UUllfQllURVM7Ci0JCXN0YXJ0ID0gcGdvZmY7CisKKwkJaW5kZXggKz0gcGFnZXM7CisJCWNvdW50IC09IHBhZ2VzOwogCX0KLQotCXBmbiA9IGJ1ZltwZ29mZiAtIHN0YXJ0XTsKLQlpZiAocGZuICYgUE1fUFJFU0VOVCkKLQkJcGZuID0gUE1fUEZSQU1FKHBmbik7Ci0JZWxzZQotCQlwZm4gPSAwOwotCi0JcmV0dXJuIHBmbjsKIH0KIAogc3RhdGljIHZvaWQgd2Fsa190YXNrKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JaW50IGkgPSAwOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kID0gaW5kZXggKyBjb3VudDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWludCBpID0gMDsKIAogCXdoaWxlIChpbmRleCA8IGVuZCkgewogCkBAIC01MDEsMTUgKzYxNywxMSBAQAogCQlpZiAocGdfc3RhcnRbaV0gPj0gZW5kKQogCQkJcmV0dXJuOwogCi0JCXZvZmZzZXQgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBwZ19zdGFydFtpXSwgaW5kZXgpOwotCQlpbmRleCAgID0gbWluX3QodW5zaWduZWQgbG9uZywgcGdfZW5kW2ldLCBlbmQpOworCQlzdGFydCA9IG1heF90KHVuc2lnbmVkIGxvbmcsIHBnX3N0YXJ0W2ldLCBpbmRleCk7CisJCWluZGV4ID0gbWluX3QodW5zaWduZWQgbG9uZywgcGdfZW5kW2ldLCBlbmQpOwogCi0JCWFzc2VydCh2b2Zmc2V0IDwgaW5kZXgpOwotCQlmb3IgKDsgdm9mZnNldCA8IGluZGV4OyB2b2Zmc2V0KyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgcGZuID0gdGFza19wZm4odm9mZnNldCk7Ci0JCQlpZiAocGZuKQotCQkJCXdhbGtfcGZuKHBmbiwgMSk7Ci0JCX0KKwkJYXNzZXJ0KHN0YXJ0IDwgaW5kZXgpOworCQl3YWxrX3ZtYShzdGFydCwgaW5kZXggLSBzdGFydCk7CiAJfQogfQogCkBAIC01MjcsMTggKzYzOSwxNCBAQAogewogCWludCBpOwogCi0Ja3BhZ2VmbGFnc19mZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7Ci0JaWYgKGtwYWdlZmxhZ3NfZmQgPCAwKSB7Ci0JCXBlcnJvcihQUk9DX0tQQUdFRkxBR1MpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQorCWtwYWdlZmxhZ3NfZmQgPSBjaGVja2VkX29wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7CiAKIAlpZiAoIW5yX2FkZHJfcmFuZ2VzKQogCQlhZGRfYWRkcl9yYW5nZSgwLCBVTE9OR19NQVgpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX2FkZHJfcmFuZ2VzOyBpKyspCiAJCWlmICghb3B0X3BpZCkKLQkJCXdhbGtfcGZuKG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKKwkJCXdhbGtfcGZuKDAsIG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKIAkJZWxzZQogCQkJd2Fsa190YXNrKG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKIApAQCAtNTc1LDYgKzY4Myw4IEBACiAiICAgICAgICAgICAgLWx8LS1saXN0ICAgICAgICAgICAgICAgICBTaG93IHBhZ2UgZGV0YWlscyBpbiByYW5nZXNcbiIKICIgICAgICAgICAgICAtTHwtLWxpc3QtZWFjaCAgICAgICAgICAgIFNob3cgcGFnZSBkZXRhaWxzIG9uZSBieSBvbmVcbiIKICIgICAgICAgICAgICAtTnwtLW5vLXN1bW1hcnkgICAgICAgICAgIERvbid0IHNob3cgc3VtbWF5IGluZm9cbiIKKyIgICAgICAgICAgICAtWHwtLWh3cG9pc29uICAgICAgICAgICAgIGh3cG9pc29uIHBhZ2VzXG4iCisiICAgICAgICAgICAgLXh8LS11bnBvaXNvbiAgICAgICAgICAgICB1bnBvaXNvbiBwYWdlc1xuIgogIiAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgICAgICAgICAgU2hvdyB0aGlzIHVzYWdlIG1lc3NhZ2VcbiIKICJhZGRyLXNwZWM6XG4iCiAiICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgcGFnZSBhdCBvZmZzZXQgTiAodW5pdDogcGFnZXMpXG4iCkBAIC02MjQsMTEgKzczNCw3IEBACiAJb3B0X3BpZCA9IHBhcnNlX251bWJlcihzdHIpOwogCiAJc3ByaW50ZihidWYsICIvcHJvYy8lZC9wYWdlbWFwIiwgb3B0X3BpZCk7Ci0JcGFnZW1hcF9mZCA9IG9wZW4oYnVmLCBPX1JET05MWSk7Ci0JaWYgKHBhZ2VtYXBfZmQgPCAwKSB7Ci0JCXBlcnJvcihidWYpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQorCXBhZ2VtYXBfZmQgPSBjaGVja2VkX29wZW4oYnVmLCBPX1JET05MWSk7CiAKIAlzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL21hcHMiLCBvcHRfcGlkKTsKIAlmaWxlID0gZm9wZW4oYnVmLCAiciIpOwpAQCAtNzg4LDYgKzg5NCw4IEBACiAJeyAibGlzdCIgICAgICAsIDAsIE5VTEwsICdsJyB9LAogCXsgImxpc3QtZWFjaCIgLCAwLCBOVUxMLCAnTCcgfSwKIAl7ICJuby1zdW1tYXJ5IiwgMCwgTlVMTCwgJ04nIH0sCisJeyAiaHdwb2lzb24iICAsIDAsIE5VTEwsICdYJyB9LAorCXsgInVucG9pc29uIiAgLCAwLCBOVUxMLCAneCcgfSwKIAl7ICJoZWxwIiAgICAgICwgMCwgTlVMTCwgJ2gnIH0sCiAJeyBOVUxMICAgICAgICAsIDAsIE5VTEwsIDAgfQogfTsKQEAgLTc5OSw3ICs5MDcsNyBAQAogCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CiAKIAl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LAotCQkJCSJycDpmOmE6YjpsTE5oIiwgb3B0cywgTlVMTCkpICE9IC0xKSB7CisJCQkJInJwOmY6YTpiOmxMTlh4aCIsIG9wdHMsIE5VTEwpKSAhPSAtMSkgewogCQlzd2l0Y2ggKGMpIHsKIAkJY2FzZSAncic6CiAJCQlvcHRfcmF3ID0gMTsKQEAgLTgyNSw2ICs5MzMsMTQgQEAKIAkJY2FzZSAnTic6CiAJCQlvcHRfbm9fc3VtbWFyeSA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSAnWCc6CisJCQlvcHRfaHdwb2lzb24gPSAxOworCQkJcHJlcGFyZV9od3BvaXNvbl9mZCgpOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJb3B0X3VucG9pc29uID0gMTsKKwkJCXByZXBhcmVfaHdwb2lzb25fZmQoKTsKKwkJCWJyZWFrOwogCQljYXNlICdoJzoKIAkJCXVzYWdlKCk7CiAJCQlleGl0KDApOwpAQCAtODQ0LDcgKzk2MCw3IEBACiAJd2Fsa19hZGRyX3JhbmdlcygpOwogCiAJaWYgKG9wdF9saXN0ID09IDEpCi0JCXNob3dfcGFnZV9yYW5nZSgwLCAwKTsgIC8qIGRyYWluIHRoZSBidWZmZXIgKi8KKwkJc2hvd19wYWdlX3JhbmdlKDAsIDAsIDApOyAgLyogZHJhaW4gdGhlIGJ1ZmZlciAqLwogCiAJaWYgKG9wdF9ub19zdW1tYXJ5KQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vcGFnZW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VtYXAudHh0CmluZGV4IDYwMGEzMDQuLmRmMDliOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vcGFnZW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9wYWdlbWFwLnR4dApAQCAtNTcsNyArNTcsOSBAQAogICAgIDE2LiBDT01QT1VORF9UQUlMCiAgICAgMTYuIEhVR0UKICAgICAxOC4gVU5FVklDVEFCTEUKKyAgICAxOS4gSFdQT0lTT04KICAgICAyMC4gTk9QQUdFCisgICAgMjEuIEtTTQogCiBTaG9ydCBkZXNjcmlwdGlvbnMgdG8gdGhlIHBhZ2UgZmxhZ3M6CiAKQEAgLTg2LDkgKzg4LDE1IEBACiAxNy4gSFVHRQogICAgIHRoaXMgaXMgYW4gaW50ZWdyYWwgcGFydCBvZiBhIEh1Z2VUTEIgcGFnZQogCisxOS4gSFdQT0lTT04KKyAgICBoYXJkd2FyZSBkZXRlY3RlZCBtZW1vcnkgY29ycnVwdGlvbiBvbiB0aGlzIHBhZ2U6IGRvbid0IHRvdWNoIHRoZSBkYXRhIQorCiAyMC4gTk9QQUdFCiAgICAgbm8gcGFnZSBmcmFtZSBleGlzdHMgYXQgdGhlIHJlcXVlc3RlZCBhZGRyZXNzCiAKKzIxLiBLU00KKyAgICBpZGVudGljYWwgbWVtb3J5IHBhZ2VzIGR5bmFtaWNhbGx5IHNoYXJlZCBiZXR3ZWVuIG9uZSBvciBtb3JlIHByb2Nlc3NlcworCiAgICAgW0lPIHJlbGF0ZWQgcGFnZSBmbGFnc10KICAxLiBFUlJPUiAgICAgSU8gZXJyb3Igb2NjdXJyZWQKICAzLiBVUFRPREFURSAgcGFnZSBoYXMgdXAtdG8tZGF0ZSBkYXRhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyIGIvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ4MgppbmRleCA5MjEwZDZmLi4yOTliOTFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyCisrKyBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0ODIKQEAgLTI0LDggKzI0LDggQEAKIAogVmFsaWQgYWRkcmVzc2VzIGFyZSAweDE4LCAweDE5LCAweDFhLCBhbmQgMHgxYi4KIEhvd2V2ZXIsIHRoZSBkZXZpY2UgY2Fubm90IGJlIGRldGVjdGVkIHdpdGhvdXQgd3JpdGluZyB0byB0aGUgaTJjIGJ1cywgc28gbm8KLWRldGVjdGlvbiBpcyBkb25lLgotWW91IHNob3VsZCBmb3JjZSB0aGUgZGV2aWNlIGFkZHJlc3MuCitkZXRlY3Rpb24gaXMgZG9uZS4gWW91IHNob3VsZCBpbnN0YW50aWF0ZSB0aGUgZGV2aWNlIGV4cGxpY2l0bHkuCiAKLSQgbW9kcHJvYmUgZHMyNDgyIGZvcmNlPTAsMHgxOAorJCBtb2Rwcm9iZSBkczI0ODIKKyQgZWNobyBkczI0ODIgMHgxOCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2UKIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA4ODdiNTBiLi5jODI0YjRkIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNjUsNDMgKzY1LDUxIEBACiAKIDguCUhhcHB5IGhhY2tpbmcuCiAKLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Rlc2NyaXB0aW9ucyBvZiBzZWN0aW9uIGVudHJpZXM6CiAKLU1haW50YWluZXJzIExpc3QgKHRyeSB0byBsb29rIGZvciBtb3N0IHByZWNpc2UgYXJlYXMgZmlyc3QpCisJUDogUGVyc29uIChvYnNvbGV0ZSkKKwlNOiBNYWlsIHBhdGNoZXMgdG86IEZ1bGxOYW1lIDxhZGRyZXNzQGRvbWFpbj4KKwlMOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKKwlXOiBXZWItcGFnZSB3aXRoIHN0YXR1cy9pbmZvCisJVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQsIHN0Z2l0LgorCVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisJICAgU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgorCSAgIE1haW50YWluZWQ6CVNvbWVvbmUgYWN0dWFsbHkgbG9va3MgYWZ0ZXIgaXQuCisJICAgT2RkIEZpeGVzOglJdCBoYXMgYSBtYWludGFpbmVyIGJ1dCB0aGV5IGRvbid0IGhhdmUgdGltZSB0byBkbworCQkJbXVjaCBvdGhlciB0aGFuIHRocm93IHRoZSBvZGQgcGF0Y2ggaW4uIFNlZSBiZWxvdy4uCisJICAgT3JwaGFuOglObyBjdXJyZW50IG1haW50YWluZXIgW2J1dCBtYXliZSB5b3UgY291bGQgdGFrZSB0aGUKKwkJCXJvbGUgYXMgeW91IHdyaXRlIHlvdXIgbmV3IGNvZGVdLgorCSAgIE9ic29sZXRlOglPbGQgY29kZS4gU29tZXRoaW5nIHRhZ2dlZCBvYnNvbGV0ZSBnZW5lcmFsbHkgbWVhbnMKKwkJCWl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIHN5c3RlbSBhbmQgeW91CisJCQlzaG91bGQgYmUgdXNpbmcgdGhhdC4KKwlGOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCB3aWxkY2FyZCBwYXR0ZXJucy4KKwkgICBBIHRyYWlsaW5nIHNsYXNoIGluY2x1ZGVzIGFsbCBmaWxlcyBhbmQgc3ViZGlyZWN0b3J5IGZpbGVzLgorCSAgIEY6CWRyaXZlcnMvbmV0LwlhbGwgZmlsZXMgaW4gYW5kIGJlbG93IGRyaXZlcnMvbmV0CisJICAgRjoJZHJpdmVycy9uZXQvKglhbGwgZmlsZXMgaW4gZHJpdmVycy9uZXQsIGJ1dCBub3QgYmVsb3cKKwkgICBGOgkqL25ldC8qCQlhbGwgZmlsZXMgaW4gImFueSB0b3AgbGV2ZWwgZGlyZWN0b3J5Ii9uZXQKKwkgICBPbmUgcGF0dGVybiBwZXIgbGluZS4gIE11bHRpcGxlIEY6IGxpbmVzIGFjY2VwdGFibGUuCisJWDogRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgYXJlIE5PVCBtYWludGFpbmVkLCBzYW1lIHJ1bGVzIGFzIEY6CisJICAgRmlsZXMgZXhjbHVzaW9ucyBhcmUgdGVzdGVkIGJlZm9yZSBmaWxlIG1hdGNoZXMuCisJICAgQ2FuIGJlIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIGEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBmb3IgaW5zdGFuY2U6CisJICAgRjoJbmV0LworCSAgIFg6CW5ldC9pcHY2LworCSAgIG1hdGNoZXMgYWxsIGZpbGVzIGluIGFuZCBiZWxvdyBuZXQgZXhjbHVkaW5nIG5ldC9pcHY2LworCUs6IEtleXdvcmQgcGVybCBleHRlbmRlZCByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGNvbnRlbnQgaW4gYQorCSAgIHBhdGNoIG9yIGZpbGUuICBGb3IgaW5zdGFuY2U6CisJICAgSzogb2ZfZ2V0X3Byb2ZpbGUKKwkgICAgICBtYXRjaGVzIHBhdGNoZXMgb3IgZmlsZXMgdGhhdCBjb250YWluICJvZl9nZXRfcHJvZmlsZSIKKwkgICBLOiBcYihwcmludGt8cHJfKGluZm98ZXJyKSlcYgorCSAgICAgIG1hdGNoZXMgcGF0Y2hlcyBvciBmaWxlcyB0aGF0IGNvbnRhaW4gb25lIG9yIG1vcmUgb2YgdGhlIHdvcmRzCisJICAgICAgcHJpbnRrLCBwcl9pbmZvIG9yIHByX2VycgorCSAgIE9uZSByZWdleCBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgSzogbGluZXMgYWNjZXB0YWJsZS4KIAogTm90ZTogRm9yIHRoZSBoYXJkIG9mIHRoaW5raW5nLCB0aGlzIGxpc3QgaXMgbWVhbnQgdG8gcmVtYWluIGluIGFscGhhYmV0aWNhbAogb3JkZXIuIElmIHlvdSBjb3VsZCBhZGQgeW91cnNlbHZlcyB0byBpdCBpbiBhbHBoYWJldGljYWwgb3JkZXIgdGhhdCB3b3VsZCBiZQogc28gbXVjaCBlYXNpZXIgW0VkXQogCi1QOiBQZXJzb24gKG9ic29sZXRlKQotTTogTWFpbCBwYXRjaGVzIHRvOiBGdWxsTmFtZSA8YWRkcmVzc0Bkb21haW4+Ci1MOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKLVc6IFdlYi1wYWdlIHdpdGggc3RhdHVzL2luZm8KLVQ6IFNDTSB0cmVlIHR5cGUgYW5kIGxvY2F0aW9uLiAgVHlwZSBpcyBvbmUgb2Y6IGdpdCwgaGcsIHF1aWx0LCBzdGdpdC4KLVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CitNYWludGFpbmVycyBMaXN0ICh0cnkgdG8gbG9vayBmb3IgbW9zdCBwcmVjaXNlIGFyZWFzIGZpcnN0KQogCi0JU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgotCU1haW50YWluZWQ6CVNvbWVvbmUgYWN0dWFsbHkgbG9va3MgYWZ0ZXIgaXQuCi0JT2RkIEZpeGVzOglJdCBoYXMgYSBtYWludGFpbmVyIGJ1dCB0aGV5IGRvbid0IGhhdmUgdGltZSB0byBkbwotCQkJbXVjaCBvdGhlciB0aGFuIHRocm93IHRoZSBvZGQgcGF0Y2ggaW4uIFNlZSBiZWxvdy4uCi0JT3JwaGFuOgkJTm8gY3VycmVudCBtYWludGFpbmVyIFtidXQgbWF5YmUgeW91IGNvdWxkIHRha2UgdGhlCi0JCQlyb2xlIGFzIHlvdSB3cml0ZSB5b3VyIG5ldyBjb2RlXS4KLQlPYnNvbGV0ZToJT2xkIGNvZGUuIFNvbWV0aGluZyB0YWdnZWQgb2Jzb2xldGUgZ2VuZXJhbGx5IG1lYW5zCi0JCQlpdCBoYXMgYmVlbiByZXBsYWNlZCBieSBhIGJldHRlciBzeXN0ZW0gYW5kIHlvdQotCQkJc2hvdWxkIGJlIHVzaW5nIHRoYXQuCi0KLUY6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHdpbGRjYXJkIHBhdHRlcm5zLgotICAgQSB0cmFpbGluZyBzbGFzaCBpbmNsdWRlcyBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yeSBmaWxlcy4KLQlGOglkcml2ZXJzL25ldC8JYWxsIGZpbGVzIGluIGFuZCBiZWxvdyBkcml2ZXJzL25ldAotCUY6CWRyaXZlcnMvbmV0LyoJYWxsIGZpbGVzIGluIGRyaXZlcnMvbmV0LCBidXQgbm90IGJlbG93Ci0JRjoJKi9uZXQvKgkJYWxsIGZpbGVzIGluICJhbnkgdG9wIGxldmVsIGRpcmVjdG9yeSIvbmV0Ci0gICBPbmUgcGF0dGVybiBwZXIgbGluZS4gIE11bHRpcGxlIEY6IGxpbmVzIGFjY2VwdGFibGUuCi1YOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgTk9UIG1haW50YWluZWQsIHNhbWUgcnVsZXMgYXMgRjoKLSAgIEZpbGVzIGV4Y2x1c2lvbnMgYXJlIHRlc3RlZCBiZWZvcmUgZmlsZSBtYXRjaGVzLgotICAgQ2FuIGJlIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIGEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBmb3IgaW5zdGFuY2U6Ci0JRjoJbmV0LwotCVg6CW5ldC9pcHY2LwotICAgbWF0Y2hlcyBhbGwgZmlsZXMgaW4gYW5kIGJlbG93IG5ldCBleGNsdWRpbmcgbmV0L2lwdjYvCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIDNDNTA1IE5FVFdPUksgRFJJVkVSCiBNOglQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CkBAIC0xNzQsNyArMTgyLDcgQEAKIE06CUxhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+CiBMOgl2OWZzLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly9zd2lrLm5ldC92OWZzCi1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZXJpY3ZoL3Y5ZnMuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2VyaWN2aC92OWZzLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKIEY6CWZzLzlwLwpAQCAtMjU3LDYgKzI2NSwxMyBAQAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL2FjcGkvZmFuLmMKIAorQUNQSSBQUk9DRVNTT1IgQUdHUkVHQVRPUiBEUklWRVIKK006CVNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgorTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL2FjcGkvYWNwaV9wYWQuYworCiBBQ1BJIFRIRVJNQUwgRFJJVkVSCiBNOglaaGFuZyBSdWkgPHJ1aS56aGFuZ0BpbnRlbC5jb20+CiBMOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZwpAQCAtNTcwLDYgKzU4NSwxMSBAQAogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAorQVJNL0NPTlRFQyBNSUNSTzkgTUFDSElORSBTVVBQT1JUCitNOglIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4KK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCisKIEFSTS9DT1JHSSBNQUNISU5FIFNVUFBPUlQKIE06CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KIFM6CU1haW50YWluZWQKQEAgLTY0NiwyNCArNjY2LDI0IEBACiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJT1AzM1ggQVJNIEFSQ0hJVEVDVFVSRQogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJT1AxM1hYIEFSTSBBUkNISVRFQ1RVUkUKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIAogQVJNL0lOVEVMIElRODEzNDJFWCBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIAogQVJNL0lOVEVMIElYUDIwMDAgQVJNIEFSQ0hJVEVDVFVSRQogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KQEAgLTY4Myw3ICs3MDMsNyBAQAogQVJNL0lOVEVMIElYUDRYWCBBUk0gQVJDSElURUNUVVJFCiBNOglJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KIE06CUtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLWl4cDR4eC8KIApAQCAtNjkxLDcgKzcxMSw3IEBACiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JUCBGQUJSSUNTIERPVUJMRSBFU1BSRVNTTyBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CkBAIC03NDAsMjAgKzc2MCwzNyBAQAogTToJRGlyayBPcGZlciA8ZGlya0BvcGZlci1vbmxpbmUuZGU+CiBTOglNYWludGFpbmVkCiAKLUFSTS9QQUxNVFgsUEFMTVQ1LFBBTE1MRCxQQUxNVEUyIFNVUFBPUlQKK0FSTS9QQUxNVFgsUEFMTVQ1LFBBTE1MRCxQQUxNVEUyLFBBTE1UQyBTVVBQT1JUCiBNOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCiBXOglodHRwOi8vaGFja25kZXYuY29tCiBTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXR4LmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXQ1LmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbWxkLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRlMi5oCitGOglhcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdGMuaAorRjoJYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKIAogQVJNL1BBTE0gVFJFTyA2ODAgU1VQUE9SVAogTToJVG9tYXMgQ2VjaCA8c2xlZXBfd2Fsa2VyQHN1c2UuY3o+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKIFc6CWh0dHA6Ly9oYWNrbmRldi5jb20KIFM6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90cmVvNjgwLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYwogCiBBUk0vUEFMTVo3MiBTVVBQT1JUCiBNOglTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwogVzoJaHR0cDovL2hhY2tuZGV2LmNvbQogUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG16NzIuaAorRjoJYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCiAKIEFSTS9QTEVCIFNVUFBPUlQKIE06CVBldGVyIENodWJiIDxwbGViQGdlbGF0by51bnN3LmVkdS5hdT4KQEAgLTg2OSw3ICs5MDYsNiBAQAogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAotRjoJYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwogCiBBU1VTIEFTQjEwMCBIQVJEV0FSRSBNT05JVE9SIERSSVZFUgpAQCAtOTYzLDcgKzk5OSw3IEBACiAKIEFUTQogTToJQ2hhcyBXaWxsaWFtcyA8Y2hhc0BjbWYubnJsLm5hdnkubWlsPgotTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eC1hdG0uc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCkBAIC0xMjA3LDYgKzEyNDMsMTIgQEAKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvdGczLioKIAorQlJPQ0FERSBCRkEgRkMgU0NTSSBEUklWRVIKK006CUppbmcgSHVhbmcgPGh1YW5nakBicm9jYWRlLmNvbT4KK0w6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvc2NzaS9iZmEvCisKIEJTRyAoYmxvY2sgbGF5ZXIgZ2VuZXJpYyBzZyB2NCBkcml2ZXIpCiBNOglGVUpJVEEgVG9tb25vcmkgPGZ1aml0YS50b21vbm9yaUBsYWIubnR0LmNvLmpwPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTE0NDQsNiArMTQ4Niw3IEBACiAKIENPUkVURU1QIEhBUkRXQVJFIE1PTklUT1JJTkcgRFJJVkVSCiBNOglSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgorTToJSHVheHUgV2FuIDxodWF4dS53YW5AaW50ZWwuY29tPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcApAQCAtMjAzNCw3ICsyMDc3LDcgQEAKIEY6CWZzLyoKIAogRklOVEVLIEY3NTM3NVMgSEFSRFdBUkUgTU9OSVRPUiBBTkQgRkFOIENPTlRST0xMRVIgRFJJVkVSCi1NOglSaWt1IFZvaXBpbyA8cmlrdS52aXBpb0Bpa2kuZmk+CitNOglSaWt1IFZvaXBpbyA8cmlrdS52b2lwaW9AaWtpLmZpPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9od21vbi9mNzUzNzVzLmMKQEAgLTIxMTUsNyArMjE1OCw3IEBACiBGOglhcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi8KIEY6CWFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS8qcWUuaAogCi1GUkVFU0NBTEUgVVNCIFBFUklQSEVSSUFMIERSSVZFUlMKK0ZSRUVTQ0FMRSBVU0IgUEVSSVBIRVJBTCBEUklWRVJTCiBNOglMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKQEAgLTIxNjYsMTggKzIyMDksNiBAQAogRjoJZnMvZnNjYWNoZS8KIEY6CWluY2x1ZGUvbGludXgvZnNjYWNoZSouaAogCi1UUkFDSU5HCi1NOglTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KLU06CUZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KLU06CUluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXAvbGludXgtMi42LXRpcC5naXQgdHJhY2luZy9jb3JlCi1TOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKLUY6CWFyY2gvKi8qLyovZnRyYWNlLmgKLUY6CWFyY2gvKi9rZXJuZWwvZnRyYWNlLmMKLUY6CWluY2x1ZGUvKi9mdHJhY2UuaCBpbmNsdWRlL3RyYWNlLyBpbmNsdWRlL2xpbnV4L3RyYWNlKi5oCi1GOglrZXJuZWwvdHJhY2UvCi0KIEZVSklUU1UgRlItViAoRlJWKSBQT1JUCiBNOglEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgogUzoJTWFpbnRhaW5lZApAQCAtMjIzNiw5ICsyMjY3LDggQEAKIEY6CWluY2x1ZGUvYXNtLWdlbmVyaWMKIAogR0VORVJJQyBVSU8gRFJJVkVSIEZPUiBQQ0kgREVWSUNFUwotTToJTWljaGFlbCBTLiBUc2lya2luIDxtc3RAcmVkaGF0LmNvbT4KK006CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KIEw6CWt2bUB2Z2VyLmtlcm5lbC5vcmcKLUw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy91aW8vdWlvX3BjaV9nZW5lcmljLmMKIApAQCAtMjU3OSw2ICsyNjA5LDcgQEAKIFc6CWh0dHA6Ly93d3cubGludXgxMzk0Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaWVlZTEzOTQvbGludXgxMzk0LTIuNi5naXQKIFM6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKIEY6CWRyaXZlcnMvaWVlZTEzOTQvCiAKIElFRUUgMTM5NCBSQVcgSS9PIERSSVZFUgpAQCAtMjY3OCw3ICsyNzA5LDcgQEAKIAogSU5URUwgSU9QLUFETUEgRE1BIERSSVZFUgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+Ci1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZG1hL2lvcC1hZG1hLmMKIAogSU5URUwgSVhQNFhYIFFNR1IsIE5QRSwgRVRIRVJORVQgYW5kIEhTUyBTVVBQT1JUCkBAIC0yNzkyLDcgKzI4MjMsNyBAQAogCiBJUE1JIFNVQlNZU1RFTQogTToJQ29yZXkgTWlueWFyZCA8bWlueWFyZEBhY20ub3JnPgotTDoJb3BlbmlwbWktZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJb3BlbmlwbWktZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vb3BlbmlwbWkuc291cmNlZm9yZ2UubmV0LwogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL0lQTUkudHh0CkBAIC0yOTY3LDggKzI5OTgsOCBAQAogCiBLRVJORUwgSkFOSVRPUlMKIEw6CWtlcm5lbC1qYW5pdG9yc0B2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cua2VybmVsamFuaXRvcnMub3JnLwotUzoJTWFpbnRhaW5lZAorVzoJaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCitTOglPZGQgRml4ZXMKIAogS0VSTkVMIE5GU0QsIFNVTlJQQywgQU5EIExPQ0tEIFNFUlZFUlMKIE06CSJKLiBCcnVjZSBGaWVsZHMiIDxiZmllbGRzQGZpZWxkc2VzLm9yZz4KQEAgLTMwNTMsOSArMzA4NCwxMyBAQAogCiBLTUVNQ0hFQ0sKIE06CVZlZ2FyZCBOb3NzdW0gPHZlZ2FyZG5vQGlmaS51aW8ubm8+Ci1QCVBla2thIEVuYmVyZwotTToJcGVuYmVyZ0Bjcy5oZWxzaW5raS5maQorTToJUGVra2EgRW5iZXJnIDxwZW5iZXJnQGNzLmhlbHNpbmtpLmZpPgogUzoJTWFpbnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9rbWVtY2hlY2sudHh0CitGOglhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rbWVtY2hlY2suaAorRjoJYXJjaC94ODYvbW0va21lbWNoZWNrLworRjoJaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaAorRjoJbW0va21lbWNoZWNrLmMKIAogS01FTUxFQUsKIE06CUNhdGFsaW4gTWFyaW5hcyA8Y2F0YWxpbi5tYXJpbmFzQGFybS5jb20+CkBAIC0zNTg1LDcgKzM2MjAsNyBAQAogTDoJY29yZXRlYW1AbmV0ZmlsdGVyLm9yZwogVzoJaHR0cDovL3d3dy5uZXRmaWx0ZXIub3JnLwogVzoJaHR0cDovL3d3dy5pcHRhYmxlcy5vcmcvCi1UOglnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva2FiZXIvbmYtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9rYWJlci9uZi0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CWluY2x1ZGUvbGludXgvbmV0ZmlsdGVyKgogRjoJaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvCkBAIC0zNzQ5LDcgKzM3ODQsNyBAQAogRjoJZHJpdmVycy92aWRlby9udmlkaWEvCiAKIE9NQVAgU1VQUE9SVAotTToJIlRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+IiA8dG9ueUBhdG9taWRlLmNvbT4KK006CVRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5tdXJ1LmNvbS9saW51eC9vbWFwLwogVzoJaHR0cDovL2xpbnV4Lm9tYXAuY29tLwpAQCAtMzg1NCw2ICszODg5LDE1IEBACiBGOglEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW9jb3JlcwogRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vY29yZXMuYwogCitPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUUKK006CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KK0w6CWRldmljZXRyZWUtZGlzY3Vzc0BsaXN0cy5vemxhYnMub3JnCitXOglodHRwOi8vZmR0LnNlY3JldGxhYi5jYQorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9vZgorRjoJaW5jbHVkZS9saW51eC9vZiouaAorSzoJb2ZfZ2V0X3Byb3BlcnR5CisKIE9QUk9GSUxFCiBNOglSb2JlcnQgUmljaHRlciA8cm9iZXJ0LnJpY2h0ZXJAYW1kLmNvbT4KIEw6CW9wcm9maWxlLWxpc3RAbGlzdHMuc2YubmV0CkBAIC0zOTU4LDYgKzQwMDIsNyBAQAogUEFSSVNDIEFSQ0hJVEVDVFVSRQogTToJS3lsZSBNY01hcnRpbiA8a3lsZUBtY21hcnRpbi5jYT4KIE06CUhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KK006CSJKYW1lcyBFLkouIEJvdHRvbWxleSIgPGplamJAcGFyaXNjLWxpbnV4Lm9yZz4KIEw6CWxpbnV4LXBhcmlzY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cucGFyaXNjLWxpbnV4Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva3lsZS9wYXJpc2MtMi42LmdpdApAQCAtNDA0MSw2ICs0MDg2LDEzIEBACiBNOglQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KIE06CUluZ28gTW9sbmFyIDxtaW5nb0BlbHRlLmh1PgogUzoJU3VwcG9ydGVkCitGOglrZXJuZWwvcGVyZl9ldmVudC5jCitGOglpbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorRjoJYXJjaC8qLyova2VybmVsL3BlcmZfZXZlbnQuYworRjoJYXJjaC8qL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorRjoJYXJjaC8qL2xpYi9wZXJmX2V2ZW50LmMKK0Y6CWFyY2gvKi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYworRjoJdG9vbHMvcGVyZi8KIAogUEVSU09OQUxJVFkgSEFORExJTkcKIE06CUNocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4KQEAgLTQ0OTIsMTIgKzQ1NDQsMTEgQEAKIEY6CWluY2x1ZGUvbGludXgvc2NoZWQuaAogCiBTQ09SRSBBUkNISVRFQ1RVUkUKLVA6CUNoZW4gTGlxaW4KLU06CWxpcWluLmNoZW5Ac3VucGx1c2N0LmNvbQotUDoJTGVubm94IFd1Ci1NOglsZW5ub3gud3VAZ21haWwuY29tCitNOglDaGVuIExpcWluIDxsaXFpbi5jaGVuQHN1bnBsdXNjdC5jb20+CitNOglMZW5ub3ggV3UgPGxlbm5veC53dUBnbWFpbC5jb20+CiBXOglodHRwOi8vd3d3LnN1bnBsdXNjdC5jb20KIFM6CVN1cHBvcnRlZAorRjoJYXJjaC9zY29yZS8KIAogU0NTSSBDRFJPTSBEUklWRVIKIE06CUplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KQEAgLTQ1NzAsMjcgKzQ2MjEsMjcgQEAKIEY6CWRyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UgKFNESENJKSBEUklWRVIKLVM6ICAgICBPcnBoYW4KLUw6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCi1GOiAgICAgZHJpdmVycy9tbWMvaG9zdC9zZGhjaS4qCitTOglPcnBoYW4KK0w6CWxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKK0Y6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuKgogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFLCBPUEVOIEZJUk1XQVJFIEJJTkRJTkdTIChTREhDSS1PRikKIE06CUFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKLUw6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCitMOglsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCi1GOiAgICAgZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi4qCitGOglkcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLioKIAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSAoU0RIQ0kpIFNBTVNVTkcgRFJJVkVSCiBNOglCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+Ci1MOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZworTDoJbGludXgtbW1jQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwogCiBTRUNVUklUWSBTVUJTWVNURU0KIE06CUphbWVzIE1vcnJpcyA8am1vcnJpc0BuYW1laS5vcmc+CiBMOglsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJuZWwub3JnIChzdWdnZXN0ZWQgQ2M6KQotVDoJZ2l0IGdpdDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qbW9ycmlzL3NlY3VyaXR5LXRlc3RpbmctMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qbW9ycmlzL3NlY3VyaXR5LXRlc3RpbmctMi42LmdpdAogVzoJaHR0cDovL3NlY3VyaXR5Lndpa2kua2VybmVsLm9yZy8KIFM6CVN1cHBvcnRlZAogRjoJc2VjdXJpdHkvCkBAIC00NjI1LDYgKzQ2NzYsMTMgQEAKIEY6CWluY2x1ZGUvbGludXgvYXRhLmgKIEY6CWluY2x1ZGUvbGludXgvbGliYXRhLmgKIAorU0VSVkVSIEVOR0lORVMgMTBHYnBzIGlTQ1NJIC0gQmxhZGVFbmdpbmUgMiBEUklWRVIKK006CUpheWFtb2hhbiBLYWxsaWNrYWwgPGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20+CitMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5zZXJ2ZXJlbmdpbmVzLmNvbQorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3Njc2kvYmUyaXNjc2kvCisKIFNFUlZFUiBFTkdJTkVTIDEwR2JwcyBOSUMgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgogTToJU2F0aHlhIFBlcmxhIDxzYXRoeWFwQHNlcnZlcmVuZ2luZXMuY29tPgogTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1c0BzZXJ2ZXJlbmdpbmVzLmNvbT4KQEAgLTQ2NzgsOCArNDczNiw3IEBACiBGOglkcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwKgogCiBTSU1QTEUgRklSTVdBUkUgSU5URVJGQUNFIChTRkkpCi1QOglMZW4gQnJvd24KLU06CWxlbmJAa2VybmVsLm9yZworTToJTGVuIEJyb3duIDxsZW5iQGtlcm5lbC5vcmc+CiBMOglzZmktZGV2ZWxAc2ltcGxlZmlybXdhcmUub3JnCiBXOglodHRwOi8vc2ltcGxlZmlybXdhcmUub3JnLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sZW5iL2xpbnV4LXNmaS0yLjYuZ2l0CkBAIC01MTI3LDYgKzUxODQsMjAgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvY2hhci90cG0vCiAKK1RSQUNJTkcKK006CVN0ZXZlbiBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2RtaXMub3JnPgorTToJRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgorTToJSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RpcC9saW51eC0yLjYtdGlwLmdpdCB0cmFjaW5nL2NvcmUKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorRjoJYXJjaC8qLyovKi9mdHJhY2UuaAorRjoJYXJjaC8qL2tlcm5lbC9mdHJhY2UuYworRjoJaW5jbHVkZS8qL2Z0cmFjZS5oCitGOglpbmNsdWRlL2xpbnV4L3RyYWNlKi5oCitGOglpbmNsdWRlL3RyYWNlLworRjoJa2VybmVsL3RyYWNlLworCiBUUklWSUFMIFBBVENIRVMKIE06CUppcmkgS29zaW5hIDx0cml2aWFsQGtlcm5lbC5vcmc+CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2ppa29zL3RyaXZpYWwuZ2l0CkBAIC01NjE2LDExICs1Njg3LDExIEBACiBGOglpbmNsdWRlL2xpbnV4L3ZseW5xLmgKIAogVk1XQVJFIFZNWE5FVDMgRVRIRVJORVQgRFJJVkVSCi1NOiAgICAgU2hyZXlhcyBCaGF0ZXdhcmEgPHNiaGF0ZXdhcmFAdm13YXJlLmNvbT4KLU06ICAgICBWTXdhcmUsIEluYy4gPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KLUw6ICAgICBuZXRkZXZAdmdlci5rZXJuZWwub3JnCi1TOiAgICAgTWFpbnRhaW5lZAotRjogICAgIGRyaXZlcnMvbmV0L3ZteG5ldDMvCitNOglTaHJleWFzIEJoYXRld2FyYSA8c2JoYXRld2FyYUB2bXdhcmUuY29tPgorTToJIlZNd2FyZSwgSW5jLiIgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvbmV0L3ZteG5ldDMvCiAKIFZPTFRBR0UgQU5EIENVUlJFTlQgUkVHVUxBVE9SIEZSQU1FV09SSwogTToJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KQEAgLTU2OTMsOCArNTc2NCw3IEBACiBGOglkcml2ZXJzL3Njc2kvd2Q3MDAwLmMKIAogV0lOQk9ORCBDSVIgRFJJVkVSCi1QOglEYXZpZCBI5HJkZW1hbgotTToJZGF2aWRAaGFyZGVtYW4ubnUKK006CURhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2lucHV0L21pc2Mvd2luYm9uZC1jaXIuYwogCkBAIC01NzUxLDkgKzU4MjEsNyBAQAogRjoJaW5jbHVkZS9saW51eC93bTk3eHguaAogCiBXT0xGU09OIE1JQ1JPRUxFQ1RST05JQ1MgUE1JQyBEUklWRVJTCi1QOglNYXJrIEJyb3duCi1NOglicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbQotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworTToJTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CiBUOglnaXQgZ2l0Oi8vb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tL2xpbnV4LTIuNi1hdWRpb3BsdXMKIFc6CWh0dHA6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbm9kZS84CiBTOglTdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZjkwOGFjYy4uYWEzZTEzYSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKLVNVQkxFVkVMID0gMzEKLUVYVFJBVkVSU0lPTiA9CitTVUJMRVZFTCA9IDMyCitFWFRSQVZFUlNJT04gPSAtcmM3CiBOQU1FID0gTWFuLUVhdGluZyBTZWFscyBvZiBBbnRpcXVpdHkKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTE3OSw0NiArMTc5LDkgQEAKICMgQWx0ZXJuYXRpdmVseSBDUk9TU19DT01QSUxFIGNhbiBiZSBzZXQgaW4gdGhlIGVudmlyb25tZW50LgogIyBEZWZhdWx0IHZhbHVlIGZvciBDUk9TU19DT01QSUxFIGlzIG5vdCB0byBwcmVmaXggZXhlY3V0YWJsZXMKICMgTm90ZTogU29tZSBhcmNoaXRlY3R1cmVzIGFzc2lnbiBDUk9TU19DT01QSUxFIGluIHRoZWlyIGFyY2gvKi9NYWtlZmlsZQotIwotIyBUbyBmb3JjZSBBUkNIIGFuZCBDUk9TU19DT01QSUxFIHNldHRpbmdzIGluY2x1ZGUga2VybmVsLiogZmlsZXMKLSMgaW4gdGhlIGtlcm5lbCB0cmVlIC0gZG8gbm90IHBhdGNoIHRoaXMgZmlsZS4KIGV4cG9ydCBLQlVJTERfQlVJTERIT1NUIDo9ICQoU1VCQVJDSCkKLQotIyBLYnVpbGQgc2F2ZSB0aGUgQVJDSCBhbmQgQ1JPU1NfQ09NUElMRSBzZXR0aW5nIGluIGtlcm5lbC4qIGZpbGVzLgotIyBSZXN0b3JlIHRoZXNlIHNldHRpbmdzIGFuZCBjaGVjayB0aGF0IHVzZXIgZGlkIG5vdCBzcGVjaWZ5Ci0jIGNvbmZsaWN0aW5nIHZhbHVlcy4KLQotc2F2ZWRfYXJjaCAgOj0gJChzaGVsbCBjYXQgaW5jbHVkZS9nZW5lcmF0ZWQva2VybmVsLmFyY2ggIDI+IC9kZXYvbnVsbCkKLXNhdmVkX2Nyb3NzIDo9ICQoc2hlbGwgY2F0IGluY2x1ZGUvZ2VuZXJhdGVkL2tlcm5lbC5jcm9zcyAyPiAvZGV2L251bGwpCi0KLWlmbmVxICgkKENST1NTX0NPTVBJTEUpLCkKLSAgICAgICAgaWZuZXEgKCQoc2F2ZWRfY3Jvc3MpLCkKLSAgICAgICAgICAgICAgICBpZm5lcSAoJChDUk9TU19DT01QSUxFKSwkKHNhdmVkX2Nyb3NzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICQoZXJyb3IgQ1JPU1NfQ09NUElMRSBjaGFuZ2VkIGZyb20gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJChzYXZlZF9jcm9zcykiIHRvIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvICIkKENST1NTX0NPTVBJTEUpIi4gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlICJtYWtlIG1ycHJvcGVyIiB0byBmaXggaXQgdXApCi0gICAgICAgICAgICAgICAgZW5kaWYKLSAgICAgICAgZW5kaWYKLWVsc2UKLSAgICBDUk9TU19DT01QSUxFIDo9ICQoc2F2ZWRfY3Jvc3MpCi1lbmRpZgotCi1pZm5lcSAoJChBUkNIKSwpCi0gICAgICAgIGlmbmVxICgkKHNhdmVkX2FyY2gpLCkKLSAgICAgICAgICAgICAgICBpZm5lcSAoJChzYXZlZF9hcmNoKSwkKEFSQ0gpKQotICAgICAgICAgICAgICAgICAgICAgICAgJChlcnJvciBBUkNIIGNoYW5nZWQgZnJvbSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkKHNhdmVkX2FyY2gpIiB0byAiJChBUkNIKSIuIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSAibWFrZSBtcnByb3BlciIgdG8gZml4IGl0IHVwKQotICAgICAgICAgICAgICAgIGVuZGlmCi0gICAgICAgIGVuZGlmCi1lbHNlCi0gICAgICAgIGlmbmVxICgkKHNhdmVkX2FyY2gpLCkKLSAgICAgICAgICAgICAgICBBUkNIIDo9ICQoc2F2ZWRfYXJjaCkKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEFSQ0ggOj0gJChTVUJBUkNIKQotICAgICAgICBlbmRpZgotZW5kaWYKK0FSQ0gJCT89ICQoU1VCQVJDSCkKK0NST1NTX0NPTVBJTEUJPz0KIAogIyBBcmNoaXRlY3R1cmUgYXMgcHJlc2VudCBpbiBjb21waWxlLmgKIFVUU19NQUNISU5FIAk6PSAkKEFSQ0gpCkBAIC0yNTgsNyArMjIxLDcgQEAKIAogSE9TVENDICAgICAgID0gZ2NjCiBIT1NUQ1hYICAgICAgPSBnKysKLUhPU1RDRkxBR1MgICA9IC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCitIT1NUQ0ZMQUdTICAgPSAtV2FsbCAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgogSE9TVENYWEZMQUdTID0gLU8yCiAKICMgRGVjaWRlIHdoZXRoZXIgdG8gYnVpbGQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGJvdGguCkBAIC00ODMsMTEgKzQ0Niw2IEBACiBpbmNsdWRlICQoc3JjdHJlZSkvYXJjaC8kKFNSQ0FSQ0gpL01ha2VmaWxlCiBleHBvcnQgS0JVSUxEX0RFRkNPTkZJRyBLQlVJTERfS0NPTkZJRwogCi0jIHNhdmUgQVJDSCAmIENST1NTX0NPTVBJTEUgc2V0dGluZ3MKLSQoc2hlbGwgbWtkaXIgLXAgaW5jbHVkZS9nZW5lcmF0ZWQgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlY2hvICQoQVJDSCkgICAgICAgICAgPiBpbmNsdWRlL2dlbmVyYXRlZC9rZXJuZWwuYXJjaCAmJiBcCi0gICAgICAgIGVjaG8gJChDUk9TU19DT01QSUxFKSA+IGluY2x1ZGUvZ2VuZXJhdGVkL2tlcm5lbC5jcm9zcykKLQogY29uZmlnOiBzY3JpcHRzX2Jhc2ljIG91dHB1dG1ha2VmaWxlIEZPUkNFCiAJJChRKW1rZGlyIC1wIGluY2x1ZGUvbGludXggaW5jbHVkZS9jb25maWcKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT1zY3JpcHRzL2tjb25maWcgJEAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvYm9vdC90b29scy9vYmpzdHJpcC5jIGIvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKaW5kZXggOWQwNzI3ZC4uMzY3ZDUzZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKKysrIGIvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIGNvbnN0IGNoYXIgKiBwcm9nX25hbWU7CiAKIAotdm9pZAorc3RhdGljIHZvaWQKIHVzYWdlICh2b2lkKQogewogICAgIGZwcmludGYoc3RkZXJyLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oCmluZGV4IGU0MjgyM2UuLjI1ZGEwMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZmNudGwuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2ZjbnRsLmgKQEAgLTI2LDggKzI2LDYgQEAKICNkZWZpbmUgRl9HRVRPV04JNgkvKiAgZm9yIHNvY2tldHMuICovCiAjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLwotI2RlZmluZSBGX1NFVE9XTl9FWAkxMgotI2RlZmluZSBGX0dFVE9XTl9FWAkxMwogCiAvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLwogI2RlZmluZSBGX1JETENLCQkxCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNTA3NmE4OC4uODE1NjgwYiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNTAsMTIgKzUwLDEyIEBACiByZWdpc3RlciBzdHJ1Y3QgdGhyZWFkX2luZm8gKl9fY3VycmVudF90aHJlYWRfaW5mbyBfX2FzbV9fKCIkOCIpOwogI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkgIF9fY3VycmVudF90aHJlYWRfaW5mbwogCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKIC8qIFRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uLiAgKi8KICNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgMQogI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCiAKLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwMAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaW5pdF90YXNrLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCAxOWI4NjMyLi42ZjgwY2E0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYwpAQCAtMTMsNiArMTMsNSBAQAogc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayA9IElOSVRfVEFTSyhpbml0X3Rhc2spOwogRVhQT1JUX1NZTUJPTChpbml0X3Rhc2spOwogCi11bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24KLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZGF0YS5pbml0X3RocmVhZCIpKSkKLQk9IHsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07Cit1bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24gX19pbml0X3Rhc2tfZGF0YSA9CisJeyBJTklUX1RIUkVBRF9JTkZPKGluaXRfdGFzaykgfTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZkYzAzYzMuLjAwM2VmNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIE9VVFBVVF9GT1JNQVQoImVsZjY0LWFscGhhIikKQEAgLTMxLDg4ICszMiwyMSBAQAogCX0gOmtlcm5lbAogCiAJUk9EQVRBCi0KLQkvKiBFeGNlcHRpb24gdGFibGUgKi8KLQkuID0gQUxJR04oMTYpOwotCV9fZXhfdGFibGUgOiB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0KKwlFWENFUFRJT05fVEFCTEUoMTYpCiAKIAkvKiBXaWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KLQlfX2luaXRfYmVnaW4gPSAuOwotCS5pbml0LnRleHQgOiB7Ci0JCV9zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX2Vpbml0dGV4dCA9IC47Ci0JfQotCS5pbml0LmRhdGEgOiB7Ci0JCUlOSVRfREFUQQotCX0KLQotCS4gPSBBTElHTigxNik7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCi0JLiA9IEFMSUdOKDgpOwotCS5pbml0Y2FsbC5pbml0IDogewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuaW5pdC5yYW1mcyA6IHsKLQkJX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkqKC5pbml0LnJhbWZzKQotCQlfX2luaXRyYW1mc19lbmQgPSAuOwotCX0KLSNlbmRpZgotCi0JLiA9IEFMSUdOKDgpOwotCS5jb25faW5pdGNhbGwuaW5pdCA6IHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLQkuID0gQUxJR04oOCk7Ci0JU0VDVVJJVFlfSU5JVAotCisJX19pbml0X2JlZ2luID0gQUxJR04oUEFHRV9TSVpFKTsKKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAJUEVSQ1BVKFBBR0VfU0laRSkKLQotCS4gPSBBTElHTigyICogUEFHRV9TSVpFKTsKKwkvKiBBbGlnbiB0byBUSFJFQURfU0laRSByYXRoZXIgdGhhbiBQQUdFX1NJWkUgaGVyZSBzbyBhbnkgcGFkZGluZyBwYWdlCisJICAgbmVlZGVkIGZvciB0aGUgVEhSRUFEX1NJWkUgYWxpZ25lZCBpbml0X3Rhc2sgZ2V0cyBmcmVlZCBhZnRlciBpbml0ICovCisJLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsKIAlfX2luaXRfZW5kID0gLjsKIAkvKiBGcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCi0JLyogTm90ZSAyIHBhZ2UgYWxpZ25tZW50IGFib3ZlLiAgKi8KLQkuZGF0YS5pbml0X3RocmVhZCA6IHsKLQkJKiguZGF0YS5pbml0X3RocmVhZCkKLQl9Ci0KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuZGF0YS5wYWdlX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEucGFnZV9hbGlnbmVkKQotCX0KLQotCS4gPSBBTElHTig2NCk7Ci0JLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCi0JfQotCiAJX2RhdGEgPSAuOwotCS8qIERhdGEgKi8KLQkuZGF0YSA6IHsKLQkJREFUQV9EQVRBCi0JCUNPTlNUUlVDVE9SUwotCX0KKwlSV19EQVRBX1NFQ1RJT04oNjQsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAKIAkuZ290IDogewogCQkqKC5nb3QpCkBAIC0xMjIsMTYgKzU2LDcgQEAKIAl9CiAJX2VkYXRhID0gLjsJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0JX19ic3Nfc3RhcnQgPSAuOwotCS5zYnNzIDogewotCQkqKC5zYnNzKQotCQkqKC5zY29tbW9uKQotCX0KLQkuYnNzIDogewotCQkqKC5ic3MpCi0JCSooQ09NTU9OKQotCX0KLQlfX2Jzc19zdG9wID0gLjsKKwlCU1NfU0VDVElPTigwLCAwLCAwKQogCV9lbmQgPSAuOwogCiAJLm1kZWJ1ZyAwIDogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggZDc3OGE2OS4uMWM0MTE5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC00Niw2ICs0NiwxMCBAQAogCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlZmF1bHQgeSBpZiBTTVAgJiYgIUxPQ0FMX1RJTUVSUwogCitjb25maWcgSEFWRV9UQ00KKwlib29sCisJc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SCisKIGNvbmZpZyBOT19JT1BPUlQKIAlib29sCiAKQEAgLTY0OSw2ICs2NTMsNyBAQAogCWJvb2wgIlNULUVyaWNzc29uIFUzMDAgU2VyaWVzIgogCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEhBVkVfVENNCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9WSUMKIAlzZWxlY3QgR0VORVJJQ19USU1FCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKaW5kZXggMjI5M2YwYy4uYmQzNmM3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwpAQCAtODY1LDYgKzg2NSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19zZXRfZGlyKTsKIAogaW50IGxvY29tb19ncGlvX3JlYWRfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKQEAgLTg4Miw2ICs4ODMsNyBAQAogCXJldCAmPSBiaXRzOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfbGV2ZWwpOwogCiBpbnQgbG9jb21vX2dwaW9fcmVhZF9vdXRwdXQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKQEAgLTg5OSw2ICs5MDEsNyBAQAogCXJldCAmPSBiaXRzOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfb3V0cHV0KTsKIAogdm9pZCBsb2NvbW9fZ3Bpb193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgc2V0KQogewpAQCAtOTIwLDYgKzkyMyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb193cml0ZSk7CiAKIHN0YXRpYyB2b2lkIGxvY29tb19tNjIzMzJfc2VuZGJpdCh2b2lkICptYXBiYXNlLCBpbnQgYml0KQogewpAQCAtMTA4NCwxMyArMTA4OCwxMiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX202MjMzMl9zZW5kZGF0YSk7CiAKIC8qCiAgKglGcm9udGxpZ2h0IGNvbnRyb2wKICAqLwogCi1zdGF0aWMgc3RydWN0IGxvY29tbyAqbG9jb21vX2NoaXBfZHJpdmVyKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2KTsKLQogdm9pZCBsb2NvbW9fZnJvbnRsaWdodF9zZXQoc3RydWN0IGxvY29tb19kZXYgKmRldiwgaW50IGR1dHksIGludCB2ciwgaW50IGJwd2YpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExODIsMTEgKzExODUsMTMgQEAKIAlkcml2ZXItPmRydi5idXMgPSAmbG9jb21vX2J1c190eXBlOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl9yZWdpc3Rlcik7CiAKIHZvaWQgbG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBsb2NvbW9fZHJpdmVyICpkcml2ZXIpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgbG9jb21vX2luaXQodm9pZCkKIHsKQEAgLTEyMDgsMTEgKzEyMTMsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFycCBMb0NvTW8gY29yZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkpvaG4gTGVueiA8bGVuekBjcy53aXNjLmVkdT4iKTsKLQotRVhQT1JUX1NZTUJPTChsb2NvbW9fZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX2dwaW9fc2V0X2Rpcik7Ci1FWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfbGV2ZWwpOwotRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19yZWFkX291dHB1dCk7Ci1FWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX202MjMzMl9zZW5kZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMgYi9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKaW5kZXggZWYxMjc5NC4uOGJhNzA0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwpAQCAtMTAzMiw2ICsxMDMyLDcgQEAKIAogCXJldHVybiBfX3NhMTExMV9wbGxfY2xvY2soc2FjaGlwKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3BsbF9jbG9jayk7CiAKIC8qKgogICoJc2ExMTExX3NlbGVjdF9hdWRpb19tb2RlIC0gc2VsZWN0IEkyUyBvciBBQyBsaW5rIG1vZGUKQEAgLTEwNTksNiArMTA2MCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NlbGVjdF9hdWRpb19tb2RlKTsKIAogLyoqCiAgKglzYTExMTFfc2V0X2F1ZGlvX3JhdGUgLSBzZXQgdGhlIGF1ZGlvIHNhbXBsZSByYXRlCkBAIC0xMDgzLDYgKzEwODUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfYXVkaW9fcmF0ZSk7CiAKIC8qKgogICoJc2ExMTExX2dldF9hdWRpb19yYXRlIC0gZ2V0IHRoZSBhdWRpbyBzYW1wbGUgcmF0ZQpAQCAtMTEwMCw2ICsxMTAzLDcgQEAKIAogCXJldHVybiBfX3NhMTExMV9wbGxfY2xvY2soc2FjaGlwKSAvICgyNTYgKiBkaXYpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfZ2V0X2F1ZGlvX3JhdGUpOwogCiB2b2lkIHNhMTExMV9zZXRfaW9fZGlyKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiwKIAkJICAgICAgIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGlyLApAQCAtMTEyOCw2ICsxMTMyLDcgQEAKIAlNT0RJRllfQklUUyhncGlvICsgU0ExMTExX0dQSU9fUENTRFIsIChiaXRzID4+IDE2KSAmIDI1NSwgc2xlZXBfZGlyID4+IDE2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pb19kaXIpOwogCiB2b2lkIHNhMTExMV9zZXRfaW8oc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IHYpCiB7CkBAIC0xMTQyLDYgKzExNDcsNyBAQAogCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQ0RXUiwgKGJpdHMgPj4gMTYpICYgMjU1LCB2ID4+IDE2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pbyk7CiAKIHZvaWQgc2ExMTExX3NldF9zbGVlcF9pbyhzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgdikKIHsKQEAgLTExNTYsNiArMTE2Miw3IEBACiAJTU9ESUZZX0JJVFMoZ3BpbyArIFNBMTExMV9HUElPX1BDU1NSLCAoYml0cyA+PiAxNikgJiAyNTUsIHYgPj4gMTYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfc2V0X3NsZWVwX2lvKTsKIAogLyoKICAqIEluZGl2aWR1YWwgZGV2aWNlIG9wZXJhdGlvbnMuCkBAIC0xMTc2LDYgKzExODMsNyBAQAogCXNhMTExMV93cml0ZWwodmFsIHwgc2FkZXYtPnNrcGNyX21hc2ssIHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS1BDUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FjaGlwLT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNhMTExMV9lbmFibGVfZGV2aWNlKTsKIAogLyoqCiAgKglzYTExMTFfZGlzYWJsZV9kZXZpY2UgLSBkaXNhYmxlIGFuIG9uLWNoaXAgU0ExMTExIGZ1bmN0aW9uIGJsb2NrCkBAIC0xMTkyLDYgKzEyMDAsNyBAQAogCXNhMTExMV93cml0ZWwodmFsICYgfnNhZGV2LT5za3Bjcl9tYXNrLCBzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tQQ1IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfZGlzYWJsZV9kZXZpY2UpOwogCiAvKgogICoJU0ExMTExICJSZWdpc3RlciBBY2Nlc3MgQnVzLiIKQEAgLTEyNTksMTcgKzEyNjgsMjAgQEAKIAkuc3VzcGVuZAk9IHNhMTExMV9idXNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTExMV9idXNfcmVzdW1lLAogfTsKK0VYUE9SVF9TWU1CT0woc2ExMTExX2J1c190eXBlKTsKIAogaW50IHNhMTExMV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHNhMTExMV9kcml2ZXIgKmRyaXZlcikKIHsKIAlkcml2ZXItPmRydi5idXMgPSAmc2ExMTExX2J1c190eXBlOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl9yZWdpc3Rlcik7CiAKIHZvaWQgc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBzYTExMTFfZHJpdmVyICpkcml2ZXIpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgc2ExMTExX2luaXQodm9pZCkKIHsKQEAgLTEyOTAsMTYgKzEzMDIsMyBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIENvcnBvcmF0aW9uIFNBMTExMSBjb3JlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZWxlY3RfYXVkaW9fbW9kZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfYXVkaW9fcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9nZXRfYXVkaW9fcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfaW9fZGlyKTsKLUVYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pbyk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfc2xlZXBfaW8pOwotRVhQT1JUX1NZTUJPTChzYTExMTFfZW5hYmxlX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9kaXNhYmxlX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9wbGxfY2xvY2spOwotRVhQT1JUX1NZTUJPTChzYTExMTFfYnVzX3R5cGUpOwotRVhQT1JUX1NZTUJPTChzYTExMTFfZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYyBiL2FyY2gvYXJtL2NvbW1vbi92aWMuYwppbmRleCA5MjBjZWQwLi5mMjMyOTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vdmljLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCmluZGV4IDc2NDczMjUuLmU4ZjczODBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCkBAIC01NSwxMCArNTUsMTAgQEAKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMjI0LDcgKzIyNCw3IEBACiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwogIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0g9eQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAorQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMjk5LDcgKzI5OSw5IEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTY3MCw3ICs2NzIsNyBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTc4NCw2ICs3ODYsNyBAQAogIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQogCiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKQEAgLTgyMCw2ICs4MjMsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODk2LDcgKzkwMCwxMyBAQAogIwogIyBTb3VuZAogIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19BTVNfREVMVEE9eQogCiAjCiAjIEhJRCBEZXZpY2VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCmluZGV4IDE1MDI5NTcuLmY2YWVkNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCkBAIC05MCw3ICs5MCw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX0gzNjAwPXkKLUNPTkZJR19TQTExMDBfSDNYWFg9eQogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKaW5kZXggZWVjNDg4Mi4uZWQyZDU5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZwpAQCAtMSwyOSArMSwyNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNQotIyBXZWQgRGVjIDEyIDE2OjExOjI3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzYKKyMgVHVlIEF1ZyAxOCAxMzo0MTo0MSAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci0jIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsMjEgKzM3LDM5IEBACiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNjcsMjkgKzgyLDQ4IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTAzLDYgKzEzNyw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSBUeXBlCkBAIC0xMTIsMTUgKzE0NywxNSBAQAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JT1AzM1g9eQpAQCAtMTI4LDE5ICsxNjMsMjYgQEAKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19JT1AzWFhfQVRVPXkKIAogIwogIyBJT1AzM3ggSW1wbGVtZW50YXRpb24gT3B0aW9ucwpAQCAtMTUxLDE0ICsxOTMsNiBAQAogIwogQ09ORklHX0FSQ0hfSVE4MDMzMT15CiBDT05GSUdfTUFDSF9JUTgwMzMyPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCiBDT05GSUdfUExBVF9JT1A9eQogCiAjCkBAIC0xNjgsNiArMjAyLDcgQEAKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQogQ09ORklHX0NQVV9DUDE1PXkKQEAgLTE3OCw3ICsyMTMsNiBAQAogIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JV01NWFQgaXMgbm90IHNldAogQ09ORklHX1hTQ0FMRV9QTVU9eQogCkBAIC0xOTAsNDEgKzIyNCw1NSBAQAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAogIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CiAKICMKICMgQm9vdCBvcHRpb25zCiAjCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIGNhY2hlcG9saWN5PXdyaXRlYWxsb2MiCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCBjYWNoZXBvbGljeT13cml0ZWFsbG9jIGlvcDN4eF9pbml0X2F0dT15IgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKICMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KICMKIApAQCAtMjM5LDYgKzI4Nyw4IEBACiAjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CiBDT05GSUdfQklORk1UX0FPVVQ9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKQEAgLTI0NywxMSArMjk3LDcgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMjY0LDYgKzMxMCw3IEBACiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTMxMCw2ICszNTcsNyBAQAogIyBDT05GSUdfSVBWNl9TSVQgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKQEAgLTMxNyw2ICszNjUsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zMjYsMjQgKzM3NSwzMSBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM1Nyw3ICs0MTMsOSBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKQEAgLTM2NiwxMiArNDI0LDE0IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQyMSw5ICs0ODEsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTEKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CkBAIC00NDcsNiArNTA1LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTQ2MywxNCArNTI2LDI5IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ5MiwxMCArNTcwLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUxMiw2ICs1ODYsOCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTUyMCwxMyArNTk2LDE4IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKQEAgLTU0MywxNSArNjI0LDE4IEBACiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENDU2PXkKLSMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09eQpAQCAtNTY4LDI3ICs2NTIsMzQgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotQ09ORklHX0UxMDAwX05BUEk9eQotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01OTYsMjMgKzY4NywzNCBAQAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02MjAsMTMgKzcyMiwxNiBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTY3MCwxMCArNzc1LDEzIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNjkyLDExICs4MDAsMTIgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03MDUsNjcgKzgxNCw5NyBAQAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIwogIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotQ09ORklHX0kyQ19JT1AzWFg9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0kyQ19JT1AzWFg9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKIAogIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldApAQCAtNzczLDEzICs5MTIsMTcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC03OTQsMTYgKzkzNywyMyBAQAogIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtODEyLDI4ICs5NjIsMzggQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04NTQsMTUgKzEwMTQsMTYgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTg3MCwxNCArMTAzMSwyMSBAQAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CkBAIC04OTMsNiArMTA2MSwxMiBAQAogIyBETUEgQ2xpZW50cwogIwogQ09ORklHX05FVF9ETUE9eQorIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtOTAxLDEwICsxMDc1LDExIEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkxMywxNyArMTA4OCwyMyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtOTQxLDE1ICsxMTIyLDEzIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC05NTksMjkgKzExMzgsMzEgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMDEzLDkgKzExOTQsNiBAQAogIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDIzLDYgKzEyMDEsNyBAQAogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CkBAIC0xMDMwLDEwICsxMjA5LDE3IEBACiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTA0NywxNiArMTIzMyw0MSBAQAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiAjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKICMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CiAKQEAgLTEwNjUsMjQgKzEyNzYsMTE3IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX1hPUl9CTE9DS1M9eQogQ09ORklHX0FTWU5DX0NPUkU9eQogQ09ORklHX0FTWU5DX01FTUNQWT15CiBDT05GSUdfQVNZTkNfWE9SPXkKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwppbmRleCBhZjc0Y2MyLi5iY2ZhZGUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjNAotIyBNb24gTWF5ICA0IDExOjU4OjU3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKKyMgU2F0IE5vdiAgNyAyMDozMToxOCAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE2LDEyIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDYsMTEgKzQzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTkKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTczLDcgKzcxLDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtODYsNiArODMsMTAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTk1LDEzICs5NiwxNyBAQAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CiBDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTQsNyArMTE5LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEzNSwxOSArMTQwLDIyIEBACiAjCiAjIFN5c3RlbSBUeXBlCiAjCitDT05GSUdfTU1VPXkKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldApAQCAtMTU2LDI1ICsxNjQsMjcgQEAKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfS0lSS1dPT0Q9eQotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKIAogIwogIyBNYXJ2ZWxsIEtpcmt3b29kIEltcGxlbWVudGF0aW9ucwpAQCAtMTg1LDYgKzE5NSw3IEBACiBDT05GSUdfTUFDSF9NVjg4RjYyODFHVFdfR0U9eQogQ09ORklHX01BQ0hfU0hFRVZBUExVRz15CiBDT05GSUdfTUFDSF9UUzIxOT15CitDT05GSUdfTUFDSF9PUEVOUkRfQkFTRT15CiBDT05GSUdfUExBVF9PUklPTj15CiAKICMKQEAgLTE5NSw3ICsyMDYsNyBAQAogIyBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9GRVJPQ0VPTj15CiBDT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTj15CkBAIC0yMTEsNiArMjIyLDcgQEAKIENPTkZJR19PVVRFUl9DQUNIRT15CiBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDI9eQogIyBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDJfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIEJ1cyBzdXBwb3J0CkBAIC0yMzUsMTEgKzI0NywxMiBAQAogIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKICMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldApAQCAtMjU0LDEwICsyNjcsMTIgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKK0NPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTM0NSw2ICszNjAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Nyw2ICszODMsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4MywxNyArNDAwLDE4IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPXkKKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCisjIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPXkKICMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT15Ci0KLSMKLSMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KLSMKIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CiAjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CkBAIC00MTQsNiArNDMyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDI1LDkgKzQ0NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CkBAIC00OTQsNiArNTEzLDcgQEAKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogQ09ORklHX01URF9NMjVQODA9eQogQ09ORklHX00yNVBYWF9VU0VfRkFTVF9SRUFEPXkKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTU0Myw2ICs1NjMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC01NjcsMTAgKzU4OCw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTg3LDYgKzYwNCw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU5NSw2ICs2MTQsNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNjExLDcgKzYzMSw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MjMsMTEgKzY0MiwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NDksNiArNjcxLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NzYsNiArNjk5LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjkzLDEzICs3MTcsMTYgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNzY4LDYgKzc5NSw5IEBACiAjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTc4OSw2ICs4MTksNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogQ09ORklHX01WNjQzWFhfRVRIPXkKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CkBAIC03OTcsMTAgKzgyOCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogQ09ORklHX1dMQU5fODAyMTE9eQogQ09ORklHX0xJQkVSVEFTPXkKQEAgLTgyMCw5ICs4NDgsNyBAQAogIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAogIyBDT05GSUdfTVdMOEsgaXMgbm90IHNldAogIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEg1SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEg5SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUjkxNzBfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldApAQCAtODMyLDYgKzg1OCw4IEBACiAjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19JV00gaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTg1NSw2ICs4ODMsNyBAQAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC04NzgsMTMgKzkwNywxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTQzLDYgKzk3OCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05OTgsMTAgKzEwMzQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDIzLDExICsxMDU1LDQ3IEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwNDEsMzMgKzExMDksMjggQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwODcsNyArMTE1MCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEwNiwxMCArMTE2OCwxMiBAQAogQ09ORklHX0hJRF9DSEVSUlk9eQogQ09ORklHX0hJRF9DSElDT05ZPXkKIENPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQogIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPXkKIENPTkZJR19ISURfS1lFPXkKIENPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKIENPTkZJR19ISURfS0VOU0lOR1RPTj15CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTExMjMsOSArMTE4NywxNCBAQAogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQogIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQogIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQogIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTExNTAsMTggKzEyMTksMjEgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTI1MiwxMSArMTMyNCwxNCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX01WU0RJTz15CiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVklBX1NETU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtMTI2Niw3ICsxMzQxLDcgQEAKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKIENPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CkBAIC0xMjc4LDExICsxMzUzLDE0IEBACiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKIAogIwogIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiAjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtMTMxNCw2ICsxMzkyLDcgQEAKIENPTkZJR19SVENfRFJWX1MzNTM5MEE9eQogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTMyNSw2ICsxNDA0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEzNjAsOCArMTQ0MCwxMSBAQAogIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNzksMTAgKzE0NjIsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNDU1LDcgKzE1NDEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTMwLDYgKzE2MTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTQ3LDYgKzE2MzMsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xNTY3LDEyICsxNjU0LDE0IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xNTgxLDI1ICsxNjcwLDEyIEBACiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xNjIzLDcgKzE2OTksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE2NjUsMTEgKzE3NDAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE3MTQsNiArMTc5MSw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKK0NPTkZJR19DUllQVE9fREVWX01WX0NFU0E9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xpdHRsZXRvbl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xpdHRsZXRvbl9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYjQ5NjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9saXR0bGV0b25fZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNzgzICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzUKLSMgRnJpIERlYyAyMSAxMTowNjoxOSAyMDA3Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cwotIwotQ09ORklHX0NQVV9QWEEzMDA9eQotQ09ORklHX0NQVV9QWEEzMTA9eQotIyBDT05GSUdfQ1BVX1BYQTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UUklaRVBTNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSF9MSVRUTEVUT049eQotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19QWEEzeHg9eQotQ09ORklHX1BYQV9TU1A9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMj15Ci1DT05GSUdfQ1BVX1hTQzM9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci1DT05GSUdfSU9fMzY9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVdNTVhUPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgcm9vdGZzdHlwZT1uZnMgbmZzcm9vdD0xOTIuMTY4LjEuMTAwOi9uZnNyb290LyBpcD0xOTIuMTY4LjEuMTAxOjE5Mi4xNjguMS4xMDA6OjI1NS4yNTUuMjU1LjA6OmV0aDA6b24gY29uc29sZT10dHlTMiwzODQwMCBtZW09NjRNIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi1DT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci1DT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9QWEE9eQotQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLUNPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfUFhBPXkKLSMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHgxNj15Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1YzX0FDTD15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19ERUJVR19FUlJPUlM9eQotQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZwppbmRleCA4ZGE3NWRlLi4yNjRmNTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKQEAgLTMwNCw3ICszMDQsNyBAQAogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MTBDMDgwMDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MTAyMDAwMDAKICMgQ09ORklHX1pCT09UX1JPTSBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORT0icm9vdD0xZjAzIHJvb3Rmc3R5cGU9amZmczIgY29uc29sZT10dHlTMCwxMTUyMDBuOCIKK0NPTkZJR19DTURMSU5FPSJyb290PTFmMDMgcm9vdGZzdHlwZT1qZmZzMiBjb25zb2xlPXR0eVMyLDExNTIwMG44IgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwppbmRleCAzNTdkNDAyLi5iM2M4Y2NlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCkBAIC05NjksNyArOTY5LDYgQEAKICMKIENPTkZJR19VU0JfT1RHX1VUSUxTPXkKICMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX1VTQj15CiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKaW5kZXggYjU0YWQyZS4uMTUwZGVhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCkBAIC02MTEsNyArNjExLDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9HUElPPXkKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTYzNCw3ICs2MzQsOCBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OPXkKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKQEAgLTgzNCw3ICs4MzUsMjkgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0pBQ0s9eQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQorQ09ORklHX1NORF9EUklWRVJTPXkKK0NPTkZJR19TTkRfVVNCPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15CitDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorQ09ORklHX1NORF9TT0NfVFdMNDAzMD15CisKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMDIwLDcgKzEwNDMsMTMgQEAKICMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorQ09ORklHX0xFRFNfR1BJTz15CitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CisKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEwODQsOSArMTExMywxMiBAQAogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFPXkKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CisKICMKICMgRmlsZSBzeXN0ZW1zCiAjCkBAIC0xNDA3LDMgKzE0MzksMTAgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorCisjIGFkZGVkIGJ5IGhhbmQgZm9yIG5vdworQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQorQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorQ09ORklHX1RXTDQwMzBfVVNCPXkKK0NPTkZJR19NTUNfT01BUF9IUz15CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwppbmRleCA4YTRhN2UyLi41YTMwNWYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCkBAIC0xNzAzLDcgKzE3MDMsMTQgQEAKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCmluZGV4IDllMjM4NTIuLjUzODNjZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjNAotIyBNb24gTWF5ICA0IDE0OjA3OjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKKyMgU2F0IE5vdiAgNyAyMDo1MjoyMSAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE2LDEyIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDYsMTEgKzQzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTY5LDcgKzY3LDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTgyLDYgKzc5LDEwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTkxLDEzICs5MiwxNyBAQAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CiBDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEwOSw3ICsxMTQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTMwLDE5ICsxMzUsMjIgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNTEsMjUgKzE1OSwyNyBAQAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT1JJT041WD15CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAogCiAjCiAjIE9yaW9uIEltcGxlbWVudGF0aW9ucwpAQCAtMTg3LDYgKzE5Nyw5IEBACiBDT05GSUdfTUFDSF9UUzc4WFg9eQogQ09ORklHX01BQ0hfTVYyMTIwPXkKIENPTkZJR19NQUNIX0VETUlOSV9WMj15CitDT05GSUdfTUFDSF9EMk5FVD15CitDT05GSUdfTUFDSF9CSUdESVNLPXkKK0NPTkZJR19NQUNIX05FVDJCSUc9eQogQ09ORklHX01BQ0hfTVNTMj15CiBDT05GSUdfTUFDSF9XTlI4NTRUPXkKIENPTkZJR19NQUNIX1JEODhGNTE4MUxfR0U9eQpAQCAtMjAyLDcgKzIxNSw3IEBACiBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9GRVJPQ0VPTj15CiBDT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTj15CkBAIC0yMTUsNyArMjI4LDcgQEAKIENPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBCdXMgc3VwcG9ydApAQCAtMjQwLDExICsyNTMsMTIgQEAKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiBDT05GSUdfT0FCSV9DT01QQVQ9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQogIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CkBAIC0yNTksMTIgKzI3MywxNCBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfTEVEUz15CiBDT05GSUdfTEVEU19DUFU9eQogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKK0NPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTMwOCw2ICszMjQsNyBAQAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIApAQCAtMzU2LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc4LDYgKzM5Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzk0LDExICs0MTMsMTUgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMSw2ICs0MzQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjIsOSArNDQ2LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUzNyw2ICs1NjEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldApAQCAtNTUyLDcgKzU3Nyw5IEBACiAjCiAjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NzYsMTAgKzYwMyw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTk2LDYgKzYxOSw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYwNCw2ICs2MjksNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNjIwLDcgKzY0Niw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MzIsMTEgKzY1NywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY1OCw2ICs2ODYsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY4NSw2ICs3MTQsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MDMsMTMgKzczMywxNiBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03NzcsNiArODEwLDggQEAKICMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC03OTgsNiArODMzLDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKIENPTkZJR19NVjY0M1hYX0VUSD15CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldApAQCAtODA2LDEwICs4NDIsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzUsNiArODY4LDcgQEAKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydApAQCAtODU1LDEzICs4ODksMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTEyLDYgKzk1Miw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05NjcsMjAgKzEwMDgsNTUgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwMzAsNiArMTEwNiw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDQxLDkgKzExMTksNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTA1NywzMyArMTEzMywyNiBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDk3LDcgKzExNjYsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMTYsMTAgKzExODQsMTEgQEAKICMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTEzMCwxMCArMTE5OSwxMSBAQAogIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMTYwLDE4ICsxMjMwLDIxIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTEyNDgsNyArMTMyMSw2IEBACiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtMTI1OCw3ICsxMzMwLDcgQEAKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKIENPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIApAQCAtMTI2OSwxMSArMTM0MSwxNCBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiAjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CiAKICMKICMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQogIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEzMDYsNiArMTM4MSw3IEBACiBDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEzNDQsOCArMTQyMCwxMSBAQAogIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNTgsMTAgKzE0MzcsMTAgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPW0KLSMgQ09ORklHX0VYVDRERVZfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEMj1tCkBAIC0xMzcwLDEwICsxNDQ5LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTQ0Niw3ICsxNTI4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTUzNyw2ICsxNjE4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU1Miw2ICsxNjM0LDcgQEAKIENPTkZJR19TQ0hFRFNUQVRTPXkKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTU3Miw2ICsxNjU1LDcgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldApAQCAtMTU3OSw2ICsxNjYzLDcgQEAKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19MQVRFTkNZVE9QPXkKQEAgLTE1ODcsMjUgKzE2NzIsMTIgQEAKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTE2MjksMjAgKzE3MDEsMTkgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQotQ09ORklHX0NSWVBUT19BRUFEMj1tCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQotQ09ORklHX0NSWVBUT19IQVNIMj1tCi1DT05GSUdfQ1JZUFRPX1JORzI9bQotQ09ORklHX0NSWVBUT19QQ09NUD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT1tCitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE2NzAsMTEgKzE3NDEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTY5MSw3ICsxNzY0LDcgQEAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CkBAIC0xNzE5LDYgKzE3OTIsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CitDT05GSUdfQ1JZUFRPX0RFVl9NVl9DRVNBPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIENPTkZJR19CSU5BUllfUFJJTlRGPXkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczM2I4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3B4YTN4eF9kZWZjb25maWcKQEAgLTAsMCArMSwxMzMyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMxCisjIE1vbiBKdWwgMTMgMjI6NDg6NDkgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfSEFWRV9QV009eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE4CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQT15CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKworIworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucworIworCisjCisjIFN1cHBvcnRlZCBQWEEzeHggUHJvY2Vzc29yIFZhcmlhbnRzCisjCitDT05GSUdfQ1BVX1BYQTMwMD15CitDT05GSUdfQ1BVX1BYQTMxMD15CitDT05GSUdfQ1BVX1BYQTMyMD15CitDT05GSUdfQ1BVX1BYQTkzMD15CitDT05GSUdfQ1BVX1BYQTkzNT15CisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FWEVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMyMCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9aWUxPTklURT15CitDT05GSUdfTUFDSF9MSVRUTEVUT049eQorQ09ORklHX01BQ0hfVEFWT1JFVkI9eQorQ09ORklHX01BQ0hfU0FBUj15CisjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDQ3MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0hJTUFMQVlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCNzI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAorQ09ORklHX1BYQTN4eD15CitDT05GSUdfUFhBX1NTUD15CitDT05GSUdfUFhBX0hBVkVfQk9BUkRfSVJRUz15CitDT05GSUdfUExBVF9QWEE9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDMz15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKK0NPTkZJR19JT18zNj15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfT1VURVJfQ0FDSEU9eQorQ09ORklHX0NBQ0hFX1hTQzNMMj15CitDT05GSUdfSVdNTVhUPXkKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMS4xMDA6L25mc3Jvb3QvIGlwPTE5Mi4xNjguMS4xMDE6MTkyLjE2OC4xLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09NjRNIGRlYnVnIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1NIQVJQU0wgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BYQTN4eD15CitDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU49eQorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkQ9eQorQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURT15CitDT05GSUdfTVREX09ORU5BTkRfR0VORVJJQz15CisjIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX1BYQTI3eD15CitDT05GSUdfS0VZQk9BUkRfUFhBOTMwX1JPVEFSWT15CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfUFhBOTMwX1RSS0JBTEw9eQorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX0RBOTAzND15CisjIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9eQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX1BYQTJYWD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCitDT05GSUdfR1BJT19NQVg3MzJYPXkKK0NPTkZJR19HUElPX1BDQTk1M1g9eQorQ09ORklHX0dQSU9fUENGODU3WD15CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKK0NPTkZJR19HUElPX01BWDczMDE9eQorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPXkKK0NPTkZJR19QT1dFUl9TVVBQTFlfREVCVUc9eQorQ09ORklHX1BEQV9QT1dFUj15CisjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAorQ09ORklHX0JBVFRFUllfREE5MDMwPXkKKyMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKK0NPTkZJR19QTUlDX0RBOTAzWD15CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBPXkKKyMgQ09ORklHX0ZCX1BYQV9PVkVSTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9XMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CitDT05GSUdfTENEX1RETzI0TT15CisjIENPTkZJR19MQ0RfVkdHMjQzMkE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX1BXTT15CitDT05GSUdfQkFDS0xJR0hUX0RBOTAzWD15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorQ09ORklHX0ZPTlRTPXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF82eDExPXkKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19QWEE9eQorIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9bQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz1tCitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKKyMgQ09ORklHX0xFRFNfTFA1NTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19EQTkwM1g9bQorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUFdNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPW0KK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj1tCisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIworQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfREVCVUc9eQorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9EQTkwM1g9eQorIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKK0NPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NISVJRPXkKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUM9eQorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTEKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0FSTV9VTldJTkQ9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCmluZGV4IDdkNjFhZTYuLjk1M2JhMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjMwotIyBUaHUgSnVsIDE2IDIzOjM2OjEwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgU2F0IE9jdCAxNyAyMzozMjoyNCAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15CitDT05GSUdfSEFWRV9UQ009eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNDQsMTEgKzQ0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTgwLDE3ICs4MSwxNSBAQAogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIwogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMzMsNiArMTMyLDcgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CkBAIC0xNDcsNiArMTQ3LDcgQEAKICMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNjksMTEgKzE3MCwxMyBAQAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfVTMwMD15CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CiAKICMKICMgU1QtRXJpY3Nzb24gQUIgVTMwMC9VMzMwL1UzMzUvVTM2NSBQbGF0Zm9ybQpAQCAtMTk1LDYgKzE5OCw3IEBACiBDT05GSUdfTUFDSF9VMzAwX0RVQUxfUkFNPXkKIENPTkZJR19VMzAwX0RFQlVHPXkKICMgQ09ORklHX01BQ0hfVTMwMF9TRU1JX0lTX1NIQVJFRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9VMzAwX1NQSURVTU1ZPXkKIAogIwogIyBBbGwgdGhlIHNldHRpbmdzIGJlbG93IG11c3QgbWF0Y2ggdGhlIGJvb3Rsb2FkZXIncyBzZXR0aW5ncwpAQCAtMjA3LDcgKzIxMSw3IEBACiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWT15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQpAQCAtMjIyLDYgKzIyNiw3IEBACiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQogQ09ORklHX0FSTV9WSUM9eQogQ09ORklHX0FSTV9WSUNfTlI9MgogQ09ORklHX0NPTU1PTl9DTEtERVY9eQpAQCAtMjQ1LDYgKzI1MCw4IEBACiAjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQpAQCAtMjY1LDYgKzI3Miw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CkBAIC0zMTMsNiArMzIxLDcgQEAKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKQEAgLTM1MSw2ICszNjAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5MSw2ICs0MDEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQwMiw5ICs0MTMsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldApAQCAtNDUzLDYgKzQ2NCw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTIwLDYgKzUzMiw3IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC01NDAsMTIgKzU1MywxNiBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKQEAgLTU5Nyw2ICs2MTQsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02MjksOSArNjQ3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC02NTMsMTYgKzY2OCwyMSBAQAogIwogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKICMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3ODIgaXMgbm90IHNldAogIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTY5MCwxMCArNzEwLDI0IEBACiAjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiBDT05GSUdfQUIzMTAwX0NPUkU9eQorQ09ORklHX0FCMzEwMF9PVFA9eQogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUj15CisjIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfQUIzMTAwPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1ggaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc5Miw5ICs4MjYsMTAgQEAKICMKIENPTkZJR19NTUNfQVJNTU1DST15CiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQogCkBAIC04MjAsMTAgKzg1NSwxMCBAQAogIwogIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiAjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC04NjMsNiArODk4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTg3OCwyNyArOTE0LDI1IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FCMzEwMD15CiAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX1BMMDMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUEwwMzEgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQ09IOTAxMzMxPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKIAogIwogIyBETUEgRGV2aWNlcwogIwogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci1DT05GSUdfUkVHVUxBVE9SPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTkxMyw2ICs5NDcsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTk3NSw3ICsxMDEwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzMyw2ICsxMDY3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNjYsMTEgKzExMDEsMTMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTIxLDYgKzExNTgsNyBAQAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiYjcyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTI5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2CisjIFRodSBBdWcgMjAgMDk6MDI6MzcgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIueGNlcC1pdGVjaCIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CisjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9CPXkKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX01BUktFUlM9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CisjIENPTkZJR19CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FWEVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INDcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSElNQUxBWUEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9YQ0VQPXkKK0NPTkZJR19QWEEyNXg9eQorQ09ORklHX1BYQV9TU1A9eQorQ09ORklHX1BMQVRfUFhBPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD1tdGQ0IHJvb3Rmc3R5cGU9amZmczIgcm8gY29uc29sZT10dHlTMCwxMTUyMDAiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD1tCitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BYQTJYWD15CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPW0KK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9bQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj1tCisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfQURNMTAyMT1tCisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX01BWDY2NTA9bQorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9bQorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX1NBMTEwMD1tCisjIENPTkZJR19SVENfRFJWX1BYQSBpcyBub3Qgc2V0CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05MUz1tCitDT05GSUdfTkxTX0RFRkFVTFQ9InV0ZjgiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1VOV0lORCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPW0KKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvenlsb25pdGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy96eWxvbml0ZV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NDlkMDQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy96eWxvbml0ZV9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3MzYgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzCi0jIFR1ZSBPY3QgMjMgMTM6MzM6MjAgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cwotIwotQ09ORklHX0NQVV9QWEEzMDA9eQotQ09ORklHX0NQVV9QWEEzMTA9eQotQ09ORklHX0NQVV9QWEEzMjA9eQotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX1pZTE9OSVRFPXkKLSMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBM3h4PXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9YU0MzPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotQ09ORklHX0lPXzM2PXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0lXTU1YVD15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMS4xMDA6L25mcy9yb290ZnMvIGlwPTE5Mi4xNjguMS4xMDE6MTkyLjE2OC4xLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDM4NDAwIG1lbT02NE0gZGVidWciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfUFhBPXkKLUNPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotQ09ORklHX0ZCX1BYQT15Ci0jIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UUz15Ci0jIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfNngxMT15Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1YzX0FDTD15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA5ZWQyMzc3Li5kMGRhZWFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMTksMzEgKzE5LDIxIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKy8qCisgKiBPbiBBUk0sIG9yZGluYXJ5IGFzc2lnbm1lbnQgKHN0ciBpbnN0cnVjdGlvbikgZG9lc24ndCBjbGVhciB0aGUgbG9jYWwKKyAqIHN0cmV4L2xkcmV4IG1vbml0b3Igb24gc29tZSBpbXBsZW1lbnRhdGlvbnMuIFRoZSByZWFzb24gd2UgY2FuIHVzZSBpdCBmb3IKKyAqIGF0b21pY19zZXQoKSBpcyB0aGUgY2xyZXggb3IgZHVtbXkgc3RyZXggZG9uZSBvbiBldmVyeSBleGNlcHRpb24gcmV0dXJuLgorICovCiAjZGVmaW5lIGF0b21pY19yZWFkKHYpCSgodiktPmNvdW50ZXIpCisjZGVmaW5lIGF0b21pY19zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCiAKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgogCiAvKgogICogQVJNdjYgVVAgYW5kIFNNUCBzYWZlIGF0b21pYyBvcHMuICBXZSB1c2UgbG9hZCBleGNsdXNpdmUgYW5kCiAgKiBzdG9yZSBleGNsdXNpdmUgdG8gZW5zdXJlIHRoYXQgdGhlc2UgYXJlIGF0b21pYy4gIFdlIG1heSBsb29wCi0gKiB0byBlbnN1cmUgdGhhdCB0aGUgdXBkYXRlIGhhcHBlbnMuICBXcml0aW5nIHRvICd2LT5jb3VudGVyJwotICogd2l0aG91dCB1c2luZyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgV0lMTCBicmVhayB0aGUgYXRvbWljCi0gKiBuYXR1cmUgb2YgdGhlc2Ugb3BzLgorICogdG8gZW5zdXJlIHRoYXQgdGhlIHVwZGF0ZSBoYXBwZW5zLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IGkpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWNfc2V0XG4iCi0iMToJbGRyZXgJJTAsIFslMV1cbiIKLSIJc3RyZXgJJTAsICUyLCBbJTFdXG4iCi0iCXRlcQklMCwgIzBcbiIKLSIJYm5lCTFiIgotCTogIj0mciIgKHRtcCkKLQk6ICJyIiAoJnYtPmNvdW50ZXIpLCAiciIgKGkpCi0JOiAiY2MiKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwpAQCAtMTYzLDggKzE1Myw2IEBACiAjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQgb24gcHJlLUFSTXY2IENQVXMKICNlbmRpZgogCi0jZGVmaW5lIGF0b21pY19zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCi0KIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA2M2E0ODFmLi4zMzhmZjE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtODQsNyArODQsNyBAQAogCSpwID0gcmVzIHwgbWFzazsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIHJlcyAmIG1hc2s7CisJcmV0dXJuIChyZXMgJiBtYXNrKSAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTAxLDcgKzEwMSw3IEBACiAJKnAgPSByZXMgJiB+bWFzazsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIHJlcyAmIG1hc2s7CisJcmV0dXJuIChyZXMgJiBtYXNrKSAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTE4LDcgKzExOCw3IEBACiAJKnAgPSByZXMgXiBtYXNrOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlyZXR1cm4gcmVzICYgbWFzazsKKwlyZXR1cm4gKHJlcyAmIG1hc2spICE9IDA7CiB9CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlLmgKaW5kZXggZmVhYTc1Zi4uNjZjMTYwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC00LDcgKzQsNyBAQAogI2lmbmRlZiBfX0FTTUFSTV9DQUNIRV9ICiAjZGVmaW5lIF9fQVNNQVJNX0NBQ0hFX0gKIAotI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJNQorI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVAogI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggZmQwM2ZiNi4uM2QwY2RkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNDE0LDkgKzQxNCwxNCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF9pY2FjaGVfYWxsKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCisJZXh0ZXJuIHZvaWQgdjZfaWNhY2hlX2ludmFsX2FsbCh2b2lkKTsKKwl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7CisjZWxzZQogCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSS1jYWNoZVxuIgogCSAgICA6CiAJICAgIDogInIiICgwKSk7CisjZW5kaWYKIH0KIAogI2RlZmluZSBBUkNIX0hBU19GTFVTSF9BTk9OX1BBR0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAppbmRleCBiM2U2NTZjLi4yMGFlOTZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oCkBAIC02Myw2ICs2MywxMSBAQAogCXJldHVybiByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX2NvbnN0X18gcmVhZF9jcHVpZF90Y21zdGF0dXModm9pZCkKK3sKKwlyZXR1cm4gcmVhZF9jcHVpZChDUFVJRF9UQ00pOworfQorCiAvKgogICogSW50ZWwncyBYU2NhbGUzIGNvcmUgc3VwcG9ydHMgc29tZSB2NiBmZWF0dXJlcyAoc3VwZXJzZWN0aW9ucywgTDIpCiAgKiBidXQgYWR2ZXJ0aXNlcyBpdHNlbGYgYXMgdjUgYXMgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgdjYgSVNBLiAgRm9yCkBAIC03Myw3ICs3OCwxMCBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGNwdV9pc194c2MzKHZvaWQpCiB7Ci0JaWYgKChyZWFkX2NwdWlkX2lkKCkgJiAweGZmZmZlMDAwKSA9PSAweDY5MDU2MDAwKQorCXVuc2lnbmVkIGludCBpZDsKKwlpZCA9IHJlYWRfY3B1aWRfaWQoKSAmIDB4ZmZmZmUwMDA7CisJLyogSXQgY292ZXJzIGJvdGggSW50ZWwgSUQgYW5kIE1hcnZlbGwgSUQgKi8KKwlpZiAoKGlkID09IDB4NjkwNTYwMDApIHx8IChpZCA9PSAweDU2MDU2MDAwKSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYzNiOTExZS4uNmFhYzNmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTk4LDYgKzk4LDkgQEAKIGV4dGVybiBpbnQgYXJtX2VsZl9yZWFkX2ltcGxpZXNfZXhlYyhjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICosIGludCk7CiAjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCxzdGspIGFybV9lbGZfcmVhZF9pbXBsaWVzX2V4ZWMoJihleCksIHN0aykKIAoraW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgZWxmX2dyZWdzZXRfdCAqZWxmcmVncyk7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTIGR1bXBfdGFza19yZWdzCisKICNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmgKaW5kZXggYTBlMzlkNWQwMC4uMjM0YTNmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaApAQCAtMTIwLDI1ICsxMjAsMzkgQEAKICNlbmRpZgogCiAvKgotICogUHJlZmV0Y2ggYWJvcnQgaGFuZGxlci4gIElmIHRoZSBDUFUgaGFzIGFuIElGQVIgdXNlIHRoYXQsIG90aGVyd2lzZQotICogdXNlIHRoZSBhZGRyZXNzIG9mIHRoZSBhYm9ydGVkIGluc3RydWN0aW9uCisgKglQcmVmZXRjaCBBYm9ydCBNb2RlbAorICoJPT09PT09PT09PT09PT09PQorICoKKyAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKKyAqCSAgbGVnYWN5CS0gbm8gSUZTUiwgbm8gSUZBUgorICoJICB2NgkJLSBBUk12NjogSUZTUiwgbm8gSUZBUgorICoJICB2NwkJLSBBUk12NzogSUZTUiBhbmQgSUZBUgogICovCisKICN1bmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKICN1bmRlZiBNVUxUSV9QQUJPUlQKIAotI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfSUZBUgorI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfTEVHQUNZCiAjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgogIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCiAjIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIocmVnLCBpbnNuKQltcmMgcDE1LCAwLCByZWcsIGNyNiwgY3IwLCAyCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIGxlZ2FjeV9wYWJvcnQKICMgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0NQVV9QQUJSVF9OT0lGQVIKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y2CiAjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgogIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCiAjIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIocmVnLCBpbnNuKQltb3YgcmVnLCBpbnNuCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIHY2X3BhYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y3CisjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgdjdfcGFib3J0CiAjIGVuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaW9wM3h4LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb3AzeHguaAppbmRleCA0YjhlN2Y1Li44ZDYwYWQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb3AzeHguaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb3AzeHguaApAQCAtMjE1LDYgKzIxNSw3IEBACiAgKiBJT1AzWFggSS9PIGFuZCBNZW0gc3BhY2UgcmVnaW9ucyBmb3IgUENJIGF1dG9jb25maWd1cmF0aW9uCiAgKi8KICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9NRU1fUEEJMHg4MDAwMDAwMAorI2RlZmluZSBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRQkweDA4MDAwMDAwCiAKICNkZWZpbmUgSU9QM1hYX1BDSV9JT19XSU5ET1dfU0laRQkweDAwMDEwMDAwCiAjZGVmaW5lIElPUDNYWF9QQ0lfTE9XRVJfSU9fUEEJCTB4OTAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9wbGF0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfcGxhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzAzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfcGxhdC5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBBUk0gc3BlY2lmaWMgU01QIGhlYWRlciwgdGhpcyBjb250YWlucyBvdXIgaW1wbGVtZW50YXRpb24KKyAqIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01BUk1fU01QX1BMQVRfSAorI2RlZmluZSBfX0FTTUFSTV9TTVBfUExBVF9ICisKKyNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgorCisvKiBhbGwgU01QIGNvbmZpZ3VyYXRpb25zIGhhdmUgdGhlIGV4dGVuZGVkIENQVUlEIHJlZ2lzdGVycyAqLworc3RhdGljIGlubGluZSBpbnQgdGxiX29wc19uZWVkX2Jyb2FkY2FzdCh2b2lkKQoreworCXJldHVybiAoKHJlYWRfY3B1aWRfZXh0KENQVUlEX0VYVF9NTUZSMykgPj4gMTIpICYgMHhmKSA8IDI7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGNtLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90Y20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTI5ZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGNtLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogQXV0aG9yOiBSaWNrYXJkIEFuZGVyc3NvbiA8cmlja2FyZC5hbmRlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CisgKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CisgKgorICovCisjaWZuZGVmIF9fQVNNQVJNX1RDTV9ICisjZGVmaW5lIF9fQVNNQVJNX1RDTV9ICisKKyNpZm5kZWYgQ09ORklHX0hBVkVfVENNCisjZXJyb3IgIllvdSBzaG91bGQgbm90IGJlIGluY2x1ZGluZyB0Y20uaCB1bmxlc3MgeW91IGhhdmUgYSBUQ00hIgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBUYWcgdmFyaWFibGVzIHdpdGggdGhpcyAqLworI2RlZmluZSBfX3RjbWRhdGEgX19zZWN0aW9uKC50Y20uZGF0YSkKKy8qIFRhZyBjb25zdGFudHMgd2l0aCB0aGlzICovCisjZGVmaW5lIF9fdGNtY29uc3QgX19zZWN0aW9uKC50Y20ucm9kYXRhKQorLyogVGFnIGZ1bmN0aW9ucyBpbnNpZGUgVENNIGNhbGxlZCBmcm9tIG91dHNpZGUgVENNIHdpdGggdGhpcyAqLworI2RlZmluZSBfX3RjbWZ1bmMgX19hdHRyaWJ1dGVfXygobG9uZ19jYWxsKSkgX19zZWN0aW9uKC50Y20udGV4dCkgbm9pbmxpbmUKKy8qIFRhZyBmdW5jdGlvbiBpbnNpZGUgVENNIGNhbGxlZCBmcm9tIGluc2lkZSBUQ00gIHdpdGggdGhpcyAqLworI2RlZmluZSBfX3RjbWxvY2FsZnVuYyBfX3NlY3Rpb24oLnRjbS50ZXh0KQorCit2b2lkICp0Y21fYWxsb2Moc2l6ZV90IGxlbik7Cit2b2lkIHRjbV9mcmVlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGE0NWFiNWQuLmMyZjE2MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMzUwLDcgKzM1MCw3IEBACiAJaWYgKHRsYl9mbGFnKFRMQl9XQikpCiAJCWRzYigpOwogCi0JaWYgKGNwdW1hc2tfdGVzdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKG1tKSkpIHsKKwlpZiAoY3B1bWFza190ZXN0X2NwdShnZXRfY3B1KCksIG1tX2NwdW1hc2sobW0pKSkgewogCQlpZiAodGxiX2ZsYWcoVExCX1YzX0ZVTEwpKQogCQkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzYsIGMwLCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCQlpZiAodGxiX2ZsYWcoVExCX1Y0X1VfRlVMTCkpCkBAIC0zNjAsNiArMzYwLDcgQEAKIAkJaWYgKHRsYl9mbGFnKFRMQl9WNF9JX0ZVTEwpKQogCQkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCX0KKwlwdXRfY3B1KCk7CiAKIAlpZiAodGxiX2ZsYWcoVExCX1Y2X1VfQVNJRCkpCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNywgMiIgOiA6ICJyIiAoYXNpZCkgOiAiY2MiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaWZpZWQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaWZpZWQuaAppbmRleCAwNzNlODViLi5iYzYzMTE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlmaWVkLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pZmllZC5oCkBAIC0zNSw3ICszNSw5IEBACiAKICNkZWZpbmUgQVJNKHguLi4pCiAjZGVmaW5lIFRIVU1CKHguLi4pCXgKKyNpZmRlZiBfX0FTU0VNQkxZX18KICNkZWZpbmUgVyhpbnN0cikJaW5zdHIudworI2VuZGlmCiAjZGVmaW5lIEJTWU0oc3ltKQlzeW0gKyAxCiAKICNlbHNlCS8qICFDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwpAQCAtNDUsNyArNDcsOSBAQAogCiAjZGVmaW5lIEFSTSh4Li4uKQl4CiAjZGVmaW5lIFRIVU1CKHguLi4pCisjaWZkZWYgX19BU1NFTUJMWV9fCiAjZGVmaW5lIFcoaW5zdHIpCWluc3RyCisjZW5kaWYKICNkZWZpbmUgQlNZTShzeW0pCXN5bQogCiAjZW5kaWYJLyogQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggODlmN2VhZC4uNGU1MDZkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTQwMyw2ICs0MDMsMTUgQEAKICNkZWZpbmUgX19BUk1fTlJfc2V0X3RscwkJKF9fQVJNX05SX0JBU0UrNSkKIAogLyoKKyAqICpOT1RFKjogVGhpcyBpcyBhIGdob3N0IHN5c2NhbGwgcHJpdmF0ZSB0byB0aGUga2VybmVsLiAgT25seSB0aGUKKyAqIF9fa3VzZXJfY21weGNoZyBjb2RlIGluIGVudHJ5LWFybXYuUyBzaG91bGQgYmUgYXdhcmUgb2YgaXRzCisgKiBleGlzdGVuY2UuICBEb24ndCBldmVyIHVzZSB0aGlzIGZyb20gdXNlciBjb2RlLgorICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSTV9OUl9jbXB4Y2hnCQkoX19BUk1fTlJfQkFTRSsweDAwZmZmMCkKKyNlbmRpZgorCisvKgogICogVGhlIGZvbGxvd2luZyBzeXNjYWxscyBhcmUgb2Jzb2xldGUgYW5kIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIEVBQkkuCiAgKi8KICNpZiBkZWZpbmVkKF9fQVJNX0VBQklfXykgJiYgIWRlZmluZWQoX19LRVJORUxfXykKQEAgLTQ1Niw2ICs0NjUsNyBAQAogICogVW5pbXBsZW1lbnRlZCAob3IgYWx0ZXJuYXRpdmVseSBpbXBsZW1lbnRlZCkgc3lzY2FsbHMKICAqLwogI2RlZmluZSBfX0lHTk9SRV9mYWR2aXNlNjRfNjQJCTEKKyNkZWZpbmUgX19JR05PUkVfbWlncmF0ZV9wYWdlcwkJMQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX0FSTV9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IGM0NDZhZWYuLjc5MDg3ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTM1LDYgKzM1LDcgQEAKIG9iai0kKENPTkZJR19BUk1fVEhVTUJFRSkJKz0gdGh1bWJlZS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwogb2JqLSQoQ09ORklHX0FSTV9VTldJTkQpCSs9IHVud2luZC5vCitvYmotJChDT05GSUdfSEFWRV9UQ00pCQkrPSB0Y20ubwogCiBvYmotJChDT05GSUdfQ1JVTkNIKQkJKz0gY3J1bmNoLm8gY3J1bmNoLWJpdHMubwogQUZMQUdTX2NydW5jaC1iaXRzLm8JCTo9IC1XYSwtbWNwdT1lcDkzMTIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IDNkNzI3YTguLmQyOTAzZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPG1hY2gvZW50cnktbWFjcm8uUz4KICNpbmNsdWRlIDxhc20vdGhyZWFkX25vdGlmeS5oPgogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKICNpbmNsdWRlICJlbnRyeS1oZWFkZXIuUyIKIApAQCAtMjcyLDcgKzI3MywxNSBAQAogCUAKIAlAICByMCAtIGluc3RydWN0aW9uCiAJQAorI2lmbmRlZglDT05GSUdfVEhVTUIyX0tFUk5FTAogCWxkcglyMCwgW3IyLCAjLTRdCisjZWxzZQorCWxkcmgJcjAsIFtyMiwgIy0yXQkJCUAgVGh1bWIgaW5zdHJ1Y3Rpb24gYXQgTFIgLSAyCisJYW5kCXI5LCByMCwgIzB4ZjgwMAorCWNtcAlyOSwgIzB4ZTgwMAkJCUAgMzItYml0IGluc3RydWN0aW9uIGlmIHh4ID49IDAKKwlsZHJoaHMJcjksIFtyMl0JCQlAIGJvdHRvbSAxNiBiaXRzCisJb3JyaHMJcjAsIHI5LCByMCwgbHNsICMxNgorI2VuZGlmCiAJYWRyCXI5LCBCU1lNKDFmKQogCWJsCWNhbGxfZnBlCiAKQEAgLTMwMywyMiArMzEyLDE2IEBACiAJdHN0CXIzLCAjUFNSX0lfQklUCiAJYmljZXEJcjksIHI5LCAjUFNSX0lfQklUCiAKLQlACi0JQCBzZXQgYXJncywgdGhlbiBjYWxsIG1haW4gaGFuZGxlcgotCUAKLQlAICByMCAtIGFkZHJlc3Mgb2YgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KLQlAICByMSAtIHBvaW50ZXIgdG8gcmVnaXN0ZXJzIG9uIHN0YWNrCi0JQAotI2lmZGVmIE1VTFRJX1BBQk9SVAogCW1vdglyMCwgcjIJCQlAIHBhc3MgYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uLgorI2lmZGVmIE1VTFRJX1BBQk9SVAogCWxkcglyNCwgLkxDcHJvY2ZucwogCW1vdglsciwgcGMKIAlsZHIJcGMsIFtyNCwgI1BST0NFU1NPUl9QQUJUX0ZVTkNdCiAjZWxzZQotCUNQVV9QQUJPUlRfSEFORExFUihyMCwgcjIpCisJYmwJQ1BVX1BBQk9SVF9IQU5ETEVSCiAjZW5kaWYKIAltc3IJY3Bzcl9jLCByOQkJCUAgTWF5YmUgZW5hYmxlIGludGVycnVwdHMKLQltb3YJcjEsIHNwCQkJCUAgcmVncworCW1vdglyMiwgc3AJCQkJQCByZWdzCiAJYmwJZG9fUHJlZmV0Y2hBYm9ydAkJQCBjYWxsIGFib3J0IGhhbmRsZXIKIAogCUAKQEAgLTYwNiwzMyArNjA5LDMzIEBACiAgVEhVTUIoCWFkZAlwYywgcjgJCQkpCiAJbm9wCiAKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMAorCW1vdndfcGMJbHIJCQkJQCBDUCMwCiAJVyhiKQlkb19mcGUJCQkJQCBDUCMxIChGUEUpCiAJVyhiKQlkb19mcGUJCQkJQCBDUCMyIChGUEUpCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzMKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMwogI2lmZGVmIENPTkZJR19DUlVOQ0gKIAliCWNydW5jaF90YXNrX2VuYWJsZQkJQCBDUCM0IChNYXZlcmlja0NydW5jaCkKIAliCWNydW5jaF90YXNrX2VuYWJsZQkJQCBDUCM1IChNYXZlcmlja0NydW5jaCkKIAliCWNydW5jaF90YXNrX2VuYWJsZQkJQCBDUCM2IChNYXZlcmlja0NydW5jaCkKICNlbHNlCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzQKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNQotCVcobW92KQlwYywgbHIJCQkJQCBDUCM2CisJbW92d19wYwlscgkJCQlAIENQIzQKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNQorCW1vdndfcGMJbHIJCQkJQCBDUCM2CiAjZW5kaWYKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNwotCVcobW92KQlwYywgbHIJCQkJQCBDUCM4Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNworCW1vdndfcGMJbHIJCQkJQCBDUCM4CisJbW92d19wYwlscgkJCQlAIENQIzkKICNpZmRlZiBDT05GSUdfVkZQCiAJVyhiKQlkb192ZnAJCQkJQCBDUCMxMCAoVkZQKQogCVcoYikJZG9fdmZwCQkJCUAgQ1AjMTEgKFZGUCkKICNlbHNlCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzEwIChWRlApCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzExIChWRlApCisJbW92d19wYwlscgkJCQlAIENQIzEwIChWRlApCisJbW92d19wYwlscgkJCQlAIENQIzExIChWRlApCiAjZW5kaWYKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTIKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTMKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTQgKERlYnVnKQotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxNSAoQ29udHJvbCkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTIKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTMKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTQgKERlYnVnKQorCW1vdndfcGMJbHIJCQkJQCBDUCMxNSAoQ29udHJvbCkKIAogI2lmZGVmIENPTkZJR19ORU9OCiAJLmFsaWduCTYKQEAgLTY3OCw3ICs2ODEsOSBAQAogCS53b3JkCW5vX2ZwCiAJLnByZXZpb3VzCiAKLW5vX2ZwOgltb3YJcGMsIGxyCitFTlRSWShub19mcCkKKwltb3YJcGMsIGxyCitFTkRQUk9DKG5vX2ZwKQogCiBfX3VuZF91c3JfdW5rbm93bjoKIAllbmFibGVfaXJxCkBAIC02OTEsMTYgKzY5NiwxNiBAQAogX19wYWJ0X3VzcjoKIAl1c3JfZW50cnkKIAotI2lmZGVmIE1VTFRJX1BBQk9SVAogCW1vdglyMCwgcjIJCQlAIHBhc3MgYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uLgorI2lmZGVmIE1VTFRJX1BBQk9SVAogCWxkcglyNCwgLkxDcHJvY2ZucwogCW1vdglsciwgcGMKIAlsZHIJcGMsIFtyNCwgI1BST0NFU1NPUl9QQUJUX0ZVTkNdCiAjZWxzZQotCUNQVV9QQUJPUlRfSEFORExFUihyMCwgcjIpCisJYmwJQ1BVX1BBQk9SVF9IQU5ETEVSCiAjZW5kaWYKIAllbmFibGVfaXJxCQkJCUAgRW5hYmxlIGludGVycnVwdHMKLQltb3YJcjEsIHNwCQkJCUAgcmVncworCW1vdglyMiwgc3AJCQkJQCByZWdzCiAJYmwJZG9fUHJlZmV0Y2hBYm9ydAkJQCBjYWxsIGFib3J0IGhhbmRsZXIKICBVTldJTkQoLmZuZW5kCQkpCiAJLyogZmFsbCB0aHJvdWdoICovCkBAIC03MzQsMTMgKzczOSw2IEBACiAjaWZkZWYgQ09ORklHX01NVQogCWxkcglyNiwgW3IyLCAjVElfQ1BVX0RPTUFJTl0KICNlbmRpZgotI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2Ci0jaWZkZWYgQ09ORklHX0NQVV8zMnY2SwotCWNscmV4Ci0jZWxzZQotCXN0cmV4CXI1LCByNCwgW2lwXQkJCUAgQ2xlYXIgZXhjbHVzaXZlIG1vbml0b3IKLSNlbmRpZgotI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfSEFTX1RMU19SRUcpCiAJbWNyCXAxNSwgMCwgcjMsIGMxMywgYzAsIDMJCUAgc2V0IFRMUyByZWdpc3RlcgogI2VsaWYgIWRlZmluZWQoQ09ORklHX1RMU19SRUdfRU1VTCkKQEAgLTkxMSwxMCArOTA5LDEwIEBACiAJICogQSBzcGVjaWFsIGdob3N0IHN5c2NhbGwgaXMgdXNlZCBmb3IgdGhhdCAoc2VlIHRyYXBzLmMpLgogCSAqLwogCXN0bWZkCXNwISwge3I3LCBscn0KLQltb3YJcjcsICMweGZmMDAJCUAgMHhmZmYwIGludG8gcjcgZm9yIEVBQkkKLQlvcnIJcjcsIHI3LCAjMHhmMAotCXN3aQkjMHg5ZmZmZjAKKwlsZHIJcjcsID0xZgkJCUAgaXQncyAyMCBiaXRzCisJc3dpCV9fQVJNX05SX2NtcHhjaGcKIAlsZG1mZAlzcCEsIHtyNywgcGN9CisxOgkud29yZAlfX0FSTV9OUl9jbXB4Y2hnCiAKICNlbGlmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IDgwN2NmZWIuLmYwZmU5NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWNtcCByMCwgcjIKIAlibmUgZ251X3RyYWNlCiAJbGRtaWEgc3AhLCB7cjAtcjMsIGlwLCBscn0KLQlieCBpcAorCW1vdiBwYywgaXAKIAogZ251X3RyYWNlOgogCWxkciByMSwgW3NwLCAjMjBdCQkJQCBsciBvZiBpbnN0cnVtZW50ZWQgcm91dGluZQpAQCAtMTM1LDcgKzEzNSw3IEBACiAJbW92IGxyLCBwYwogCW1vdiBwYywgcjIKIAlsZG1pYSBzcCEsIHtyMC1yMywgaXAsIGxyfQotCWJ4IGlwCisJbW92IHBjLCBpcAogCiBFTlRSWShtY291bnQpCiAJc3RtZGIgc3AhLCB7cjAtcjMsIGxyfQpAQCAtNDI1LDEzICs0MjUsNiBAQAogI2VuZGlmCiBFTkRQUk9DKHN5c19tbWFwMikKIAotRU5UUlkocGFib3J0X2lmYXIpCi0JCW1yYwlwMTUsIDAsIHIwLCBjcjYsIGNyMCwgMgotRU5UUlkocGFib3J0X25vaWZhcikKLQkJbW92CXBjLCBscgotRU5EUFJPQyhwYWJvcnRfaWZhcikKLUVORFBST0MocGFib3J0X25vaWZhcikKLQogI2lmZGVmIENPTkZJR19PQUJJX0NPTVBBVAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCmluZGV4IGE0ZWFmNGYuLjdlOWVkMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKQEAgLTc2LDEzICs3NiwyNyBAQAogI2lmbmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAogCS5tYWNybwlzdmNfZXhpdCwgcnBzcgogCW1zcglzcHNyX2N4c2YsIFxycHNyCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVXzMydjZLKQorCWNscmV4CQkJCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgogCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKyNlbGlmIGRlZmluZWQgKENPTkZJR19DUFVfVjYpCisJbGRyCXIwLCBbc3BdCisJc3RyZXgJcjEsIHIyLCBbc3BdCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKKwlsZG1pYglzcCwge3IxIC0gcGN9XgkJCUAgbG9hZCByMSAtIHBjLCBjcHNyCisjZWxzZQorCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKyNlbmRpZgogCS5lbmRtCiAKIAkubWFjcm8JcmVzdG9yZV91c2VyX3JlZ3MsIGZhc3QgPSAwLCBvZmZzZXQgPSAwCiAJbGRyCXIxLCBbc3AsICNcb2Zmc2V0ICsgU19QU1JdCUAgZ2V0IGNhbGxpbmcgY3BzcgogCWxkcglsciwgW3NwLCAjXG9mZnNldCArIFNfUENdIQlAIGdldCBwYwogCW1zcglzcHNyX2N4c2YsIHIxCQkJQCBzYXZlIGluIHNwc3Jfc3ZjCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVXzMydjZLKQorCWNscmV4CQkJCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgorI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9WNikKKwlzdHJleAlyMSwgcjIsIFtzcF0JCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgorI2VuZGlmCiAJLmlmCVxmYXN0CiAJbGRtZGIJc3AsIHtyMSAtIGxyfV4JCQlAIGdldCBjYWxsaW5nIHIxIC0gbHIKIAkuZWxzZQpAQCAtOTYsOCArMTEwLDE2IEBACiAJbW92CVxyZCwgc3AsIGxzciAjMTMKIAltb3YJXHJkLCBccmQsIGxzbCAjMTMKIAkuZW5kbQorCisJQAorCUAgMzItYml0IHdpZGUgIm1vdiBwYywgcmVnIgorCUAKKwkubWFjcm8JbW92d19wYywgcmVnCisJbW92CXBjLCBccmVnCisJLmVuZG0KICNlbHNlCS8qIENPTkZJR19USFVNQjJfS0VSTkVMICovCiAJLm1hY3JvCXN2Y19leGl0LCBycHNyCisJY2xyZXgJCQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCiAJbGRyCXIwLCBbc3AsICNTX1NQXQkJCUAgdG9wIG9mIHRoZSBzdGFjawogCWxkcglyMSwgW3NwLCAjU19QQ10JCQlAIHJldHVybiBhZGRyZXNzCiAJdHN0CXIwLCAjNAkJCQlAIG9yaWcgc3RhY2sgOC1ieXRlIGFsaWduZWQ/CkBAIC0xMTAsNiArMTMyLDcgQEAKIAkuZW5kbQogCiAJLm1hY3JvCXJlc3RvcmVfdXNlcl9yZWdzLCBmYXN0ID0gMCwgb2Zmc2V0ID0gMAorCWNscmV4CQkJCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgogCW1vdglyMiwgc3AKIAlsb2FkX3VzZXJfc3BfbHIgcjIsIHIzLCBcb2Zmc2V0ICsgU19TUAlAIGNhbGxpbmcgc3AsIGxyCiAJbGRyCXIxLCBbc3AsICNcb2Zmc2V0ICsgU19QU1JdCUAgZ2V0IGNhbGxpbmcgY3BzcgpAQCAtMTMwLDYgKzE1MywxNCBAQAogCWxzcglccmQsIFxyZCwgIzEzCiAJbW92CVxyZCwgXHJkLCBsc2wgIzEzCiAJLmVuZG0KKworCUAKKwlAIDMyLWJpdCB3aWRlICJtb3YgcGMsIHJlZyIKKwlACisJLm1hY3JvCW1vdndfcGMsIHJlZworCW1vdglwYywgXHJlZworCW5vcAorCS5lbmRtCiAjZW5kaWYJLyogIUNPTkZJR19USFVNQjJfS0VSTkVMICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCmluZGV4IDkzYWQ1NzYuLmI5NTA1YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCkBAIC0xMyw2ICsxMyw3IEBACiAKICNkZWZpbmUgQVRBR19DT1JFIDB4NTQ0MTAwMDEKICNkZWZpbmUgQVRBR19DT1JFX1NJWkUgKCgyKjQgKyAzKjQpID4+IDIpCisjZGVmaW5lIEFUQUdfQ09SRV9TSVpFX0VNUFRZICgoMio0KSA+PiAyKQogCiAJLmFsaWduCTIKIAkudHlwZQlfX3N3aXRjaF9kYXRhLCAlb2JqZWN0CkBAIC05Niw3ICs5Nyw3IEBACiAJYmwJcHJpbnRoZXg4CiAJYWRyCXIwLCBzdHJfYTIKIAlibAlwcmludGFzY2lpCi0JYWRyCXIzLCAzZgorCWFkcglyMywgNGYKIAlsZG1pYQlyMywge3I0LCByNSwgcjZ9CQlAIGdldCBtYWNoaW5lIGRlc2MgbGlzdAogCXN1YglyNCwgcjMsIHI0CQkJQCBnZXQgb2Zmc2V0IGJldHdlZW4gdmlydCZwaHlzCiAJYWRkCXI1LCByNSwgcjQJCQlAIGNvbnZlcnQgdmlydCBhZGRyZXNzZXMgdG8KQEAgLTI1MSw3ICsyNTIsOCBAQAogCWJuZQkxZgogCiAJbGRyCXI1LCBbcjIsICMwXQkJCUAgaXMgZmlyc3QgdGFnIEFUQUdfQ09SRT8KLQlzdWJzCXI1LCByNSwgI0FUQUdfQ09SRV9TSVpFCisJY21wCXI1LCAjQVRBR19DT1JFX1NJWkUKKwljbXBuZQlyNSwgI0FUQUdfQ09SRV9TSVpFX0VNUFRZCiAJYm5lCTFmCiAJbGRyCXI1LCBbcjIsICM0XQogCWxkcglyNiwgPUFUQUdfQ09SRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYyBiL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggZjY5MmVmZC4uNjBjNjJjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0b3BfbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC04MywxMCArODQsMjQgQEAKIAlmbHVzaF9pbnNucyhwLT5hZGRyLCAxKTsKIH0KIAorLyoKKyAqIFRoZSBhY3R1YWwgZGlzYXJtaW5nIGlzIGRvbmUgaGVyZSBvbiBlYWNoIENQVSBhbmQgc3luY2hyb25pemVkIHVzaW5nCisgKiBzdG9wX21hY2hpbmUuIFRoaXMgc3luY2hyb25pemF0aW9uIGlzIG5lY2Vzc2FyeSBvbiBTTVAgdG8gYXZvaWQgcmVtb3ZpbmcKKyAqIGEgcHJvYmUgYmV0d2VlbiB0aGUgbW9tZW50IHRoZSAnVW5kZWZpbmVkIEluc3RydWN0aW9uJyBleGNlcHRpb24gaXMgcmFpc2VkCisgKiBhbmQgdGhlIG1vbWVudCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgcmVhZHMgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGZyb20KKyAqIG1lbW9yeS4KKyAqLworaW50IF9fa3Byb2JlcyBfX2FyY2hfZGlzYXJtX2twcm9iZSh2b2lkICpwKQoreworCXN0cnVjdCBrcHJvYmUgKmtwID0gcDsKKwkqa3AtPmFkZHIgPSBrcC0+b3Bjb2RlOworCWZsdXNoX2luc25zKGtwLT5hZGRyLCAxKTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBfX2twcm9iZXMgYXJjaF9kaXNhcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7Ci0JKnAtPmFkZHIgPSBwLT5vcGNvZGU7Ci0JZmx1c2hfaW5zbnMocC0+YWRkciwgMSk7CisJc3RvcF9tYWNoaW5lKF9fYXJjaF9kaXNhcm1fa3Byb2JlLCBwLCAmY3B1X29ubGluZV9tYXApOwogfQogCiB2b2lkIF9fa3Byb2JlcyBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDc5MGZiZWUuLjBkOTZkMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpAQCAtMzI4LDYgKzMyOCwxNSBAQAogfQogCiAvKgorICogRmlsbCBpbiB0aGUgdGFzaydzIGVsZnJlZ3Mgc3RydWN0dXJlIGZvciBhIGNvcmUgZHVtcC4KKyAqLworaW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgZWxmX2dyZWdzZXRfdCAqZWxmcmVncykKK3sKKwllbGZfY29yZV9jb3B5X3JlZ3MoZWxmcmVncywgdGFza19wdF9yZWdzKHQpKTsKKwlyZXR1cm4gMTsKK30KKworLyoKICAqIGZpbGwgaW4gdGhlIGZwZSBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLi4uCiAgKi8KIGludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB1c2VyX2ZwICpmcCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggZDRkNGY3Ny4uYzZjNTdiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAogI2luY2x1ZGUgImNvbXBhdC5oIgogI2luY2x1ZGUgImF0YWdzLmgiCisjaW5jbHVkZSAidGNtLmgiCiAKICNpZm5kZWYgTUVNX1NJWkUKICNkZWZpbmUgTUVNX1NJWkUJKDE2KjEwMjQqMTAyNCkKQEAgLTc0OSw2ICs3NTAsNyBAQAogI2VuZGlmCiAKIAljcHVfaW5pdCgpOworCXRjbV9pbml0KCk7CiAKIAkvKgogCSAqIFNldCB1cCB2YXJpb3VzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwb2ludGVycwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCmluZGV4IDE0MjNhMzQuLjJhNTczZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOSBSdXNzZWxsIEtpbmcKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI5LDYgKzI5LDcgQEAKICAqLwogI2RlZmluZSBTV0lfU1lTX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9zaWdyZXR1cm4pfChfX05SX09BQklfU1lTQ0FMTF9CQVNFKSkKICNkZWZpbmUgU1dJX1NZU19SVF9TSUdSRVRVUk4JKDB4ZWYwMDAwMDB8KF9fTlJfcnRfc2lncmV0dXJuKXwoX19OUl9PQUJJX1NZU0NBTExfQkFTRSkpCisjZGVmaW5lIFNXSV9TWVNfUkVTVEFSVAkJKDB4ZWYwMDAwMDB8X19OUl9yZXN0YXJ0X3N5c2NhbGx8X19OUl9PQUJJX1NZU0NBTExfQkFTRSkKIAogLyoKICAqIFdpdGggRUFCSSwgdGhlIHN5c2NhbGwgbnVtYmVyIGhhcyB0byBiZSBsb2FkZWQgaW50byByNy4KQEAgLTQ5LDYgKzUwLDE4IEBACiB9OwogCiAvKgorICogRWl0aGVyIHdlIHN1cHBvcnQgT0FCSSBvbmx5LCBvciB3ZSBoYXZlIEVBQkkgd2l0aCB0aGUgT0FCSQorICogY29tcGF0IGxheWVyIGVuYWJsZWQuICBJbiB0aGUgbGF0ZXIgY2FzZSB3ZSBkb24ndCBrbm93IGlmCisgKiB1c2VyIHNwYWNlIGlzIEVBQkkgb3Igbm90LCBhbmQgaWYgbm90IHdlIG11c3Qgbm90IGNsb2JiZXIgcjcuCisgKiBBbHdheXMgdXNpbmcgdGhlIE9BQkkgc3lzY2FsbCBzb2x2ZXMgdGhhdCBpc3N1ZSBhbmQgd29ya3MgZm9yCisgKiBhbGwgdGhvc2UgY2FzZXMuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGxvbmcgc3lzY2FsbF9yZXN0YXJ0X2NvZGVbMl0gPSB7CisJU1dJX1NZU19SRVNUQVJULAkvKiBzd2kJX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KKwkweGU0OWRmMDA0LAkJLyogbGRyCXBjLCBbc3BdLCAjNCAqLworfTsKKworLyoKICAqIGF0b21pY2FsbHkgc3dhcCBpbiB0aGUgbmV3IHNpZ25hbCBtYXNrLCBhbmQgd2FpdCBmb3IgYSBzaWduYWwuCiAgKi8KIGFzbWxpbmthZ2UgaW50IHN5c19zaWdzdXNwZW5kKGludCByZXN0YXJ0LCB1bnNpZ25lZCBsb25nIG9sZG1hc2ssIG9sZF9zaWdzZXRfdCBtYXNrKQpAQCAtNjQ1LDMyICs2NTgsMTIgQEAKIAkJCQlyZWdzLT5BUk1fcGMgLT0gNDsKICNlbHNlCiAJCQkJdTMyIF9fdXNlciAqdXNwOwotCQkJCXUzMiBzd2l2YWwgPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKIAotCQkJCXJlZ3MtPkFSTV9zcCAtPSAxMjsKKwkJCQlyZWdzLT5BUk1fc3AgLT0gNDsKIAkJCQl1c3AgPSAodTMyIF9fdXNlciAqKXJlZ3MtPkFSTV9zcDsKIAotCQkJCS8qCi0JCQkJICogRWl0aGVyIHdlIHN1cHBvcnRzIE9BQkkgb25seSwgb3Igd2UgaGF2ZQotCQkJCSAqIEVBQkkgd2l0aCB0aGUgT0FCSSBjb21wYXQgbGF5ZXIgZW5hYmxlZC4KLQkJCQkgKiBJbiB0aGUgbGF0ZXIgY2FzZSB3ZSBkb24ndCBrbm93IGlmIHVzZXIKLQkJCQkgKiBzcGFjZSBpcyBFQUJJIG9yIG5vdCwgYW5kIGlmIG5vdCB3ZSBtdXN0Ci0JCQkJICogbm90IGNsb2JiZXIgcjcuICBBbHdheXMgdXNpbmcgdGhlIE9BQkkKLQkJCQkgKiBzeXNjYWxsIHNvbHZlcyB0aGF0IGlzc3VlIGFuZCB3b3JrcyBmb3IKLQkJCQkgKiBhbGwgdGhvc2UgY2FzZXMuCi0JCQkJICovCi0JCQkJc3dpdmFsID0gc3dpdmFsIC0gX19OUl9TWVNDQUxMX0JBU0UgKyBfX05SX09BQklfU1lTQ0FMTF9CQVNFOwotCi0JCQkJcHV0X3VzZXIocmVncy0+QVJNX3BjLCAmdXNwWzBdKTsKLQkJCQkvKiBzd2kgX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KLQkJCQlwdXRfdXNlcigweGVmMDAwMDAwIHwgc3dpdmFsLCAmdXNwWzFdKTsKLQkJCQkvKiBsZHIJcGMsIFtzcF0sICMxMiAqLwotCQkJCXB1dF91c2VyKDB4ZTQ5ZGYwMGMsICZ1c3BbMl0pOwotCi0JCQkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXVzcCwKLQkJCQkJCSAgICh1bnNpZ25lZCBsb25nKSh1c3AgKyAzKSk7Ci0KLQkJCQlyZWdzLT5BUk1fcGMgPSByZWdzLT5BUk1fc3AgKyA0OworCQkJCXB1dF91c2VyKHJlZ3MtPkFSTV9wYywgdXNwKTsKKwkJCQlyZWdzLT5BUk1fcGMgPSBLRVJOX1JFU1RBUlRfQ09ERTsKICNlbmRpZgogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmggYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKaW5kZXggMjdiZWVjZS4uNmZjZmU4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuaApAQCAtMSwxMiArMSwxNCBAQAogLyoKICAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFJ1c3NlbGwgS2luZy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBSdXNzZWxsIEtpbmcuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogI2RlZmluZSBLRVJOX1NJR1JFVFVSTl9DT0RFCShDT05GSUdfVkVDVE9SU19CQVNFICsgMHgwMDAwMDUwMCkKKyNkZWZpbmUgS0VSTl9SRVNUQVJUX0NPREUJKEtFUk5fU0lHUkVUVVJOX0NPREUgKyBzaXplb2Yoc2lncmV0dXJuX2NvZGVzKSkKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgc2lncmV0dXJuX2NvZGVzWzddOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3lzY2FsbF9yZXN0YXJ0X2NvZGVbMl07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKaW5kZXggZTBkMzI3Ny4uNTcxNjJhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbG9jYWx0aW1lci5oPgorI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogCiAvKgogICogYXMgZnJvbSAyLjUsIGtlcm5lbHMgbm8gbG9uZ2VyIGhhdmUgYW4gaW5pdF90YXNrcyBzdHJ1Y3R1cmUKQEAgLTE1Myw3ICsxNTQsNyBAQAogLyoKICAqIF9fY3B1X2Rpc2FibGUgcnVucyBvbiB0aGUgcHJvY2Vzc29yIHRvIGJlIHNodXRkb3duLgogICovCi1pbnQgX19jcHVleGl0IF9fY3B1X2Rpc2FibGUodm9pZCkKK2ludCBfX2NwdV9kaXNhYmxlKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CkBAIC0yMDAsNyArMjAxLDcgQEAKICAqIGNhbGxlZCBvbiB0aGUgdGhyZWFkIHdoaWNoIGlzIGFza2luZyBmb3IgYSBDUFUgdG8gYmUgc2h1dGRvd24gLQogICogd2FpdHMgdW50aWwgc2h1dGRvd24gaGFzIGNvbXBsZXRlZCwgb3IgaXQgaXMgdGltZWQgb3V0LgogICovCi12b2lkIF9fY3B1ZXhpdCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKK3ZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJaWYgKCFwbGF0Zm9ybV9jcHVfa2lsbChjcHUpKQogCQlwcmludGsoIkNQVSV1OiB1bmFibGUgdG8ga2lsbFxuIiwgY3B1KTsKQEAgLTIxNCw3ICsyMTUsNyBAQAogICogb2YgdGhlIG90aGVyIGhvdHBsdWctY3B1IGNhcGFibGUgY29yZXMsIHNvIHByZXN1bWFibHkgY29taW5nCiAgKiBvdXQgb2YgaWRsZSBmaXhlcyB0aGlzLgogICovCi12b2lkIF9fY3B1ZXhpdCBjcHVfZGllKHZvaWQpCit2b2lkIF9fcmVmIGNwdV9kaWUodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCkBAIC01ODYsMTIgKzU4Nyw2IEBACiAJdW5zaWduZWQgbG9uZyB0YV9lbmQ7CiB9OwogCi0vKiBhbGwgU01QIGNvbmZpZ3VyYXRpb25zIGhhdmUgdGhlIGV4dGVuZGVkIENQVUlEIHJlZ2lzdGVycyAqLwotc3RhdGljIGlubGluZSBpbnQgdGxiX29wc19uZWVkX2Jyb2FkY2FzdCh2b2lkKQotewotCXJldHVybiAoKHJlYWRfY3B1aWRfZXh0KENQVUlEX0VYVF9NTUZSMykgPj4gMTIpICYgMHhmKSA8IDI7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcGlfZmx1c2hfdGxiX2FsbCh2b2lkICppZ25vcmVkKQogewogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jCmluZGV4IGQzODMxZjYuLjlhYjQxNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF9zY3UuYwpAQCAtMzcsNiArMzcsMTAgQEAKIAl1MzIgc2N1X2N0cmw7CiAKIAlzY3VfY3RybCA9IF9fcmF3X3JlYWRsKHNjdV9iYXNlICsgU0NVX0NUUkwpOworCS8qIGFscmVhZHkgZW5hYmxlZD8gKi8KKwlpZiAoc2N1X2N0cmwgJiAxKQorCQlyZXR1cm47CisKIAlzY3VfY3RybCB8PSAxOwogCV9fcmF3X3dyaXRlbChzY3VfY3RybCwgc2N1X2Jhc2UgKyBTQ1VfQ1RSTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCmluZGV4IGQ4Yzg4YzYuLmE3M2EzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwpAQCAtMTY2LDEwICsxNjYsMTIgQEAKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2xrKTsKIH0KIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogLyoKICAqIHRha2UgYSBsb2NhbCB0aW1lciBkb3duCiAgKi8KLXZvaWQgX19jcHVleGl0IHR3ZF90aW1lcl9zdG9wKHZvaWQpCit2b2lkIHR3ZF90aW1lcl9zdG9wKHZvaWQpCiB7CiAJX19yYXdfd3JpdGVsKDAsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0NPTlRST0wpOwogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGNtLmMgYi9hcmNoL2FybS9rZXJuZWwvdGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwMzAzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90Y20uYwpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIFRDTSBtZW1vcnkgaGFuZGxpbmcgZm9yIEFSTSBzeXN0ZW1zCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBSaWNrYXJkIEFuZGVyc3NvbiA8cmlja2FyZC5hbmRlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZ2VuYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4gLyogbWVtY3B5ICovCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4gLyogUEFHRV9TSElGVCAqLworI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9tZW1vcnkuaD4KKyNpbmNsdWRlICJ0Y20uaCIKKworLyogU2NyZWFtIGFuZCB3YXJuIGFib3V0IG1pc3VzZSAqLworI2lmICFkZWZpbmVkKElUQ01fT0ZGU0VUKSB8fCAhZGVmaW5lZChJVENNX0VORCkgfHwgXAorICAgICFkZWZpbmVkKERUQ01fT0ZGU0VUKSB8fCAhZGVmaW5lZChEVENNX0VORCkKKyNlcnJvciAiVENNIHN1cHBvcnQgc2VsZWN0ZWQgYnV0IG9mZnNldHMgbm90IGRlZmluZWQhIgorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgZ2VuX3Bvb2wgKnRjbV9wb29sOworCisvKiBUQ00gc2VjdGlvbiBkZWZpbml0aW9ucyBmcm9tIHRoZSBsaW5rZXIgKi8KK2V4dGVybiBjaGFyIF9faXRjbV9zdGFydCwgX19zaXRjbV90ZXh0LCBfX2VpdGNtX3RleHQ7CitleHRlcm4gY2hhciBfX2R0Y21fc3RhcnQsIF9fc2R0Y21fZGF0YSwgX19lZHRjbV9kYXRhOworCisvKgorICogVENNIG1lbW9yeSByZXNvdXJjZXMKKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkdGNtX3JlcyA9IHsKKwkubmFtZSA9ICJEVENNIFJBTSIsCisJLnN0YXJ0ID0gRFRDTV9PRkZTRVQsCisJLmVuZCA9IERUQ01fRU5ELAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGl0Y21fcmVzID0geworCS5uYW1lID0gIklUQ00gUkFNIiwKKwkuc3RhcnQgPSBJVENNX09GRlNFVCwKKwkuZW5kID0gSVRDTV9FTkQsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgZHRjbV9pb21hcFtdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IERUQ01fT0ZGU0VULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oRFRDTV9PRkZTRVQpLAorCQkubGVuZ3RoCQk9IChEVENNX0VORCAtIERUQ01fT0ZGU0VUICsgMSksCisJCS50eXBlCQk9IE1UX1VOQ0FDSEVECisJfQorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpdGNtX2lvbWFwW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gSVRDTV9PRkZTRVQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihJVENNX09GRlNFVCksCisJCS5sZW5ndGgJCT0gKElUQ01fRU5EIC0gSVRDTV9PRkZTRVQgKyAxKSwKKwkJLnR5cGUJCT0gTVRfVU5DQUNIRUQKKwl9Cit9OworCisvKgorICogQWxsb2NhdGUgYSBjaHVuayBvZiBUQ00gbWVtb3J5CisgKi8KK3ZvaWQgKnRjbV9hbGxvYyhzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisKKwlpZiAoIXRjbV9wb29sKQorCQlyZXR1cm4gTlVMTDsKKworCXZhZGRyID0gZ2VuX3Bvb2xfYWxsb2ModGNtX3Bvb2wsIGxlbik7CisJaWYgKCF2YWRkcikKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gKHZvaWQgKikgdmFkZHI7Cit9CitFWFBPUlRfU1lNQk9MKHRjbV9hbGxvYyk7CisKKy8qCisgKiBGcmVlIGEgY2h1bmsgb2YgVENNIG1lbW9yeQorICovCit2b2lkIHRjbV9mcmVlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pCit7CisJZ2VuX3Bvb2xfZnJlZSh0Y21fcG9vbCwgKHVuc2lnbmVkIGxvbmcpIGFkZHIsIGxlbik7Cit9CitFWFBPUlRfU1lNQk9MKHRjbV9mcmVlKTsKKworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdGNtX2JhbmsodTggdHlwZSwgdTMyIG9mZnNldCwgdTMyIGV4cGVjdGVkX3NpemUpCit7CisJY29uc3QgaW50IHRjbV9zaXplc1sxNl0gPSB7IDAsIC0xLCAtMSwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4LAorCQkJCSAgICAyNTYsIDUxMiwgMTAyNCwgLTEsIC0xLCAtMSwgLTEgfTsKKwl1MzIgdGNtX3JlZ2lvbjsKKwlpbnQgdGNtX3NpemU7CisKKwkvKiBSZWFkIHRoZSBzcGVjaWFsIFRDTSByZWdpb24gcmVnaXN0ZXIgYzksIDAgKi8KKwlpZiAoIXR5cGUpCisJCWFzbSgibXJjCXAxNSwgMCwgJTAsIGM5LCBjMSwgMCIKKwkJICAgIDogIj1yIiAodGNtX3JlZ2lvbikpOworCWVsc2UKKwkJYXNtKCJtcmMJcDE1LCAwLCAlMCwgYzksIGMxLCAxIgorCQkgICAgOiAiPXIiICh0Y21fcmVnaW9uKSk7CisKKwl0Y21fc2l6ZSA9IHRjbV9zaXplc1sodGNtX3JlZ2lvbiA+PiAyKSAmIDB4MGZdOworCWlmICh0Y21fc2l6ZSA8IDApIHsKKwkJcHJfZXJyKCJDUFU6ICVzVENNIG9mIHVua25vd24gc2l6ZSFcbiIsCisJCQl0eXBlID8gIkkiIDogIkQiKTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCJDUFU6IGZvdW5kICVzVENNICVkayBAICUwOHgsICVzZW5hYmxlZFxuIiwKKwkJCXR5cGUgPyAiSSIgOiAiRCIsCisJCQl0Y21fc2l6ZSwKKwkJCSh0Y21fcmVnaW9uICYgMHhmZmZmZjAwMFUpLAorCQkJKHRjbV9yZWdpb24gJiAxKSA/ICIiIDogIm5vdCAiKTsKKwl9CisKKwlpZiAodGNtX3NpemUgIT0gZXhwZWN0ZWRfc2l6ZSkgeworCQlwcl9jcml0KCJDUFU6ICVzVENNIHdhcyBkZXRlY3RlZCAlZGsgYnV0IGV4cGVjdGVkICVkayFcbiIsCisJCSAgICAgICB0eXBlID8gIkkiIDogIkQiLAorCQkgICAgICAgdGNtX3NpemUsCisJCSAgICAgICBleHBlY3RlZF9zaXplKTsKKwkJLyogQWRqdXN0IHRvIHRoZSBleHBlY3RlZCBzaXplPyB3aGF0IGNhbiB3ZSBkby4uLiAqLworCX0KKworCS8qIEZvcmNlIG1vdmUgdGhlIFRDTSBiYW5rIHRvIHdoZXJlIHdlIHdhbnQgaXQsIGVuYWJsZSAqLworCXRjbV9yZWdpb24gPSBvZmZzZXQgfCAodGNtX3JlZ2lvbiAmIDB4MDAwMDBmZmVVKSB8IDE7CisKKwlpZiAoIXR5cGUpCisJCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM5LCBjMSwgMCIKKwkJICAgIDogLyogTm8gb3V0cHV0IG9wZXJhbmRzICovCisJCSAgICA6ICJyIiAodGNtX3JlZ2lvbikpOworCWVsc2UKKwkJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzksIGMxLCAxIgorCQkgICAgOiAvKiBObyBvdXRwdXQgb3BlcmFuZHMgKi8KKwkJICAgIDogInIiICh0Y21fcmVnaW9uKSk7CisKKwlwcl9kZWJ1ZygiQ1BVOiBtb3ZlZCAlc1RDTSAlZGsgdG8gJTA4eCwgZW5hYmxlZFxuIiwKKwkJIHR5cGUgPyAiSSIgOiAiRCIsCisJCSB0Y21fc2l6ZSwKKwkJICh0Y21fcmVnaW9uICYgMHhmZmZmZjAwMFUpKTsKK30KKworLyoKKyAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIFRDTSBtZW1vcnkKKyAqLwordm9pZCBfX2luaXQgdGNtX2luaXQodm9pZCkKK3sKKwl1MzIgdGNtX3N0YXR1cyA9IHJlYWRfY3B1aWRfdGNtc3RhdHVzKCk7CisJY2hhciAqc3RhcnQ7CisJY2hhciAqZW5kOworCWNoYXIgKnJhbTsKKworCS8qIFNldHVwIERUQ00gaWYgcHJlc2VudCAqLworCWlmICh0Y21fc3RhdHVzICYgKDEgPDwgMTYpKSB7CisJCXNldHVwX3RjbV9iYW5rKDAsIERUQ01fT0ZGU0VULAorCQkJICAgICAgIChEVENNX0VORCAtIERUQ01fT0ZGU0VUICsgMSkgPj4gMTApOworCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmR0Y21fcmVzKTsKKwkJaW90YWJsZV9pbml0KGR0Y21faW9tYXAsIDEpOworCQkvKiBDb3B5IGRhdGEgZnJvbSBSQU0gdG8gRFRDTSAqLworCQlzdGFydCA9ICZfX3NkdGNtX2RhdGE7CisJCWVuZCAgID0gJl9fZWR0Y21fZGF0YTsKKwkJcmFtICAgPSAmX19kdGNtX3N0YXJ0OworCQltZW1jcHkoc3RhcnQsIHJhbSwgKGVuZC1zdGFydCkpOworCQlwcl9kZWJ1ZygiQ1BVIERUQ006IGNvcGllZCBkYXRhIGZyb20gJXAgLSAlcFxuIiwgc3RhcnQsIGVuZCk7CisJfQorCisJLyogU2V0dXAgSVRDTSBpZiBwcmVzZW50ICovCisJaWYgKHRjbV9zdGF0dXMgJiAxKSB7CisJCXNldHVwX3RjbV9iYW5rKDEsIElUQ01fT0ZGU0VULAorCQkJICAgICAgIChJVENNX0VORCAtIElUQ01fT0ZGU0VUICsgMSkgPj4gMTApOworCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJml0Y21fcmVzKTsKKwkJaW90YWJsZV9pbml0KGl0Y21faW9tYXAsIDEpOworCQkvKiBDb3B5IGNvZGUgZnJvbSBSQU0gdG8gSVRDTSAqLworCQlzdGFydCA9ICZfX3NpdGNtX3RleHQ7CisJCWVuZCAgID0gJl9fZWl0Y21fdGV4dDsKKwkJcmFtICAgPSAmX19pdGNtX3N0YXJ0OworCQltZW1jcHkoc3RhcnQsIHJhbSwgKGVuZC1zdGFydCkpOworCQlwcl9kZWJ1ZygiQ1BVIElUQ006IGNvcGllZCBjb2RlIGZyb20gJXAgLSAlcFxuIiwgc3RhcnQsIGVuZCk7CisJfQorfQorCisvKgorICogVGhpcyBjcmVhdGVzIHRoZSBUQ00gbWVtb3J5IHBvb2wgYW5kIGhhcyB0byBiZSBkb25lIGxhdGVyLAorICogZHVyaW5nIHRoZSBjb3JlX2luaXRpY2FsbHMsIHNpbmNlIHRoZSBhbGxvY2F0b3IgaXMgbm90IHlldAorICogdXAgYW5kIHJ1bm5pbmcgd2hlbiB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24gcnVucy4KKyAqLworc3RhdGljIGludCBfX2luaXQgc2V0dXBfdGNtX3Bvb2wodm9pZCkKK3sKKwl1MzIgdGNtX3N0YXR1cyA9IHJlYWRfY3B1aWRfdGNtc3RhdHVzKCk7CisJdTMyIGR0Y21fcG9vbF9zdGFydCA9ICh1MzIpICZfX2VkdGNtX2RhdGE7CisJdTMyIGl0Y21fcG9vbF9zdGFydCA9ICh1MzIpICZfX2VpdGNtX3RleHQ7CisJaW50IHJldDsKKworCS8qCisJICogU2V0IHVwIG1hbGxvYyBwb29sLCAyXjIgPSA0IGJ5dGVzIGdyYW51bGFyaXR5IHNpbmNlCisJICogdGhlIFRDTSBpcyBzb21ldGltZXMganVzdCA0IEtpQi4gTkI6IHBhZ2VzIGFuZCBjYWNoZQorCSAqIGxpbmUgYWxpZ25tZW50cyBkb2VzIG5vdCBtYXR0ZXIgaW4gVENNIQorCSAqLworCXRjbV9wb29sID0gZ2VuX3Bvb2xfY3JlYXRlKDIsIC0xKTsKKworCXByX2RlYnVnKCJTZXR0aW5nIHVwIFRDTSBtZW1vcnkgcG9vbFxuIik7CisKKwkvKiBBZGQgdGhlIHJlc3Qgb2YgRFRDTSB0byB0aGUgVENNIHBvb2wgKi8KKwlpZiAodGNtX3N0YXR1cyAmICgxIDw8IDE2KSkgeworCQlpZiAoZHRjbV9wb29sX3N0YXJ0IDwgRFRDTV9FTkQpIHsKKwkJCXJldCA9IGdlbl9wb29sX2FkZCh0Y21fcG9vbCwgZHRjbV9wb29sX3N0YXJ0LAorCQkJCQkgICBEVENNX0VORCAtIGR0Y21fcG9vbF9zdGFydCArIDEsIC0xKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcl9lcnIoIkNQVSBEVENNOiBjb3VsZCBub3QgYWRkIERUQ00gIiBcCisJCQkJICAgICAgICJyZW1haW5kZXIgdG8gcG9vbCFcbiIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlwcl9kZWJ1ZygiQ1BVIERUQ006IEFkZGVkICUwOHggYnl0ZXMgQCAlMDh4IHRvICIgXAorCQkJCSAidGhlIFRDTSBtZW1vcnkgcG9vbFxuIiwKKwkJCQkgRFRDTV9FTkQgLSBkdGNtX3Bvb2xfc3RhcnQgKyAxLAorCQkJCSBkdGNtX3Bvb2xfc3RhcnQpOworCQl9CisJfQorCisJLyogQWRkIHRoZSByZXN0IG9mIElUQ00gdG8gdGhlIFRDTSBwb29sICovCisJaWYgKHRjbV9zdGF0dXMgJiAxKSB7CisJCWlmIChpdGNtX3Bvb2xfc3RhcnQgPCBJVENNX0VORCkgeworCQkJcmV0ID0gZ2VuX3Bvb2xfYWRkKHRjbV9wb29sLCBpdGNtX3Bvb2xfc3RhcnQsCisJCQkJCSAgIElUQ01fRU5EIC0gaXRjbV9wb29sX3N0YXJ0ICsgMSwgLTEpOworCQkJaWYgKHJldCkgeworCQkJCXByX2VycigiQ1BVIElUQ006IGNvdWxkIG5vdCBhZGQgSVRDTSAiIFwKKwkJCQkgICAgICAgInJlbWFpbmRlciB0byBwb29sIVxuIik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCXByX2RlYnVnKCJDUFUgSVRDTTogQWRkZWQgJTA4eCBieXRlcyBAICUwOHggdG8gIiBcCisJCQkJICJ0aGUgVENNIG1lbW9yeSBwb29sXG4iLAorCQkJCSBJVENNX0VORCAtIGl0Y21fcG9vbF9zdGFydCArIDEsCisJCQkJIGl0Y21fcG9vbF9zdGFydCk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2NvcmVfaW5pdGNhbGwoc2V0dXBfdGNtX3Bvb2wpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RjbS5oIGIvYXJjaC9hcm0va2VybmVsL3RjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTVhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvdGNtLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIFRDTSBtZW1vcnkgaGFuZGxpbmcgZm9yIEFSTSBzeXN0ZW1zCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBSaWNrYXJkIEFuZGVyc3NvbiA8cmlja2FyZC5hbmRlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CisgKi8KKworI2lmZGVmIENPTkZJR19IQVZFX1RDTQordm9pZCBfX2luaXQgdGNtX2luaXQodm9pZCk7CisjZWxzZQorLyogTm8gVENNIHN1cHBvcnQsIGp1c3QgYmxhbmsgaW5saW5lcyB0byBiZSBvcHRpbWl6ZWQgb3V0ICovCitpbmxpbmUgdm9pZCB0Y21faW5pdCh2b2lkKQoreworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwppbmRleCA0Y2RjNGEwLi5kMzhjZGYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCA1N2ViMGY2Li4zZjM2MWE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDkgUnVzc2VsbCBLaW5nCiAgKiAgRnJhZ21lbnRzIHRoYXQgYXBwZWFyIHRoZSBzYW1lIGFzIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYyAoQykgTGludXMgVG9ydmFsZHMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDUsMjEgKzQ1LDIxIEBACiBfX3NldHVwKCJ1c2VyX2RlYnVnPSIsIHVzZXJfZGVidWdfc2V0dXApOwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sIHVuc2lnbmVkIGxvbmcgdG9wKTsKK3N0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIAogdm9pZCBkdW1wX2JhY2t0cmFjZV9lbnRyeSh1bnNpZ25lZCBsb25nIHdoZXJlLCB1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgZnJhbWUpCiB7CiAjaWZkZWYgQ09ORklHX0tBTExTWU1TCi0JcHJpbnRrKCJbPCUwOGx4Pl0gIiwgd2hlcmUpOwotCXByaW50X3N5bWJvbCgiKCVzKSAiLCB3aGVyZSk7Ci0JcHJpbnRrKCJmcm9tIFs8JTA4bHg+XSAiLCBmcm9tKTsKLQlwcmludF9zeW1ib2woIiglcylcbiIsIGZyb20pOworCWNoYXIgc3ltMVtLU1lNX1NZTUJPTF9MRU5dLCBzeW0yW0tTWU1fU1lNQk9MX0xFTl07CisJc3ByaW50X3N5bWJvbChzeW0xLCB3aGVyZSk7CisJc3ByaW50X3N5bWJvbChzeW0yLCBmcm9tKTsKKwlwcmludGsoIls8JTA4bHg+XSAoJXMpIGZyb20gWzwlMDhseD5dICglcylcbiIsIHdoZXJlLCBzeW0xLCBmcm9tLCBzeW0yKTsKICNlbHNlCiAJcHJpbnRrKCJGdW5jdGlvbiBlbnRlcmVkIGF0IFs8JTA4bHg+XSBmcm9tIFs8JTA4bHg+XVxuIiwgd2hlcmUsIGZyb20pOwogI2VuZGlmCiAKIAlpZiAoaW5fZXhjZXB0aW9uX3RleHQod2hlcmUpKQotCQlkdW1wX21lbSgiRXhjZXB0aW9uIHN0YWNrIiwgZnJhbWUgKyA0LCBmcmFtZSArIDQgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwkJZHVtcF9tZW0oIiIsICJFeGNlcHRpb24gc3RhY2siLCBmcmFtZSArIDQsIGZyYW1lICsgNCArIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwogfQogCiAjaWZuZGVmIENPTkZJR19BUk1fVU5XSU5ECkBAIC04MSw5ICs4MSwxMCBAQAogLyoKICAqIER1bXAgb3V0IHRoZSBjb250ZW50cyBvZiBzb21lIG1lbW9yeSBuaWNlbHkuLi4KICAqLwotc3RhdGljIHZvaWQgZHVtcF9tZW0oY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBsb25nIGJvdHRvbSwgdW5zaWduZWQgbG9uZyB0b3ApCitzdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICpsdmwsIGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sCisJCSAgICAgdW5zaWduZWQgbG9uZyB0b3ApCiB7Ci0JdW5zaWduZWQgbG9uZyBwID0gYm90dG9tICYgfjMxOworCXVuc2lnbmVkIGxvbmcgZmlyc3Q7CiAJbW1fc2VnbWVudF90IGZzOwogCWludCBpOwogCkBAIC05NSwzMyArOTYsMzcgQEAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCi0JcHJpbnRrKCIlcygweCUwOGx4IHRvIDB4JTA4bHgpXG4iLCBzdHIsIGJvdHRvbSwgdG9wKTsKKwlwcmludGsoIiVzJXMoMHglMDhseCB0byAweCUwOGx4KVxuIiwgbHZsLCBzdHIsIGJvdHRvbSwgdG9wKTsKIAotCWZvciAocCA9IGJvdHRvbSAmIH4zMTsgcCA8IHRvcDspIHsKLQkJcHJpbnRrKCIlMDRseDogIiwgcCAmIDB4ZmZmZik7CisJZm9yIChmaXJzdCA9IGJvdHRvbSAmIH4zMTsgZmlyc3QgPCB0b3A7IGZpcnN0ICs9IDMyKSB7CisJCXVuc2lnbmVkIGxvbmcgcDsKKwkJY2hhciBzdHJbc2l6ZW9mKCIgMTIzNDU2NzgiKSAqIDggKyAxXTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrLCBwICs9IDQpIHsKLQkJCXVuc2lnbmVkIGludCB2YWw7CisJCW1lbXNldChzdHIsICcgJywgc2l6ZW9mKHN0cikpOworCQlzdHJbc2l6ZW9mKHN0cikgLSAxXSA9ICdcMCc7CiAKLQkJCWlmIChwIDwgYm90dG9tIHx8IHAgPj0gdG9wKQotCQkJCXByaW50aygiICAgICAgICAgIik7Ci0JCQllbHNlIHsKLQkJCQlfX2dldF91c2VyKHZhbCwgKHVuc2lnbmVkIGxvbmcgKilwKTsKLQkJCQlwcmludGsoIiUwOHggIiwgdmFsKTsKKwkJZm9yIChwID0gZmlyc3QsIGkgPSAwOyBpIDwgOCAmJiBwIDwgdG9wOyBpKyssIHAgKz0gNCkgeworCQkJaWYgKHAgPj0gYm90dG9tICYmIHAgPCB0b3ApIHsKKwkJCQl1bnNpZ25lZCBsb25nIHZhbDsKKwkJCQlpZiAoX19nZXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopcCkgPT0gMCkKKwkJCQkJc3ByaW50ZihzdHIgKyBpICogOSwgIiAlMDhseCIsIHZhbCk7CisJCQkJZWxzZQorCQkJCQlzcHJpbnRmKHN0ciArIGkgKiA5LCAiID8/Pz8/Pz8/Iik7CiAJCQl9CiAJCX0KLQkJcHJpbnRrICgiXG4iKTsKKwkJcHJpbnRrKCIlcyUwNGx4OiVzXG4iLCBsdmwsIGZpcnN0ICYgMHhmZmZmLCBzdHIpOwogCX0KIAogCXNldF9mcyhmcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBfaW5zdHIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBkdW1wX2luc3RyKGNvbnN0IGNoYXIgKmx2bCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKIAljb25zdCBpbnQgdGh1bWIgPSB0aHVtYl9tb2RlKHJlZ3MpOwogCWNvbnN0IGludCB3aWR0aCA9IHRodW1iID8gNCA6IDg7CiAJbW1fc2VnbWVudF90IGZzOworCWNoYXIgc3RyW3NpemVvZigiMDAwMDAwMDAgIikgKiA1ICsgMiArIDFdLCAqcCA9IHN0cjsKIAlpbnQgaTsKIAogCS8qCkBAIC0xMzIsNyArMTM3LDYgQEAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCi0JcHJpbnRrKCJDb2RlOiAiKTsKIAlmb3IgKGkgPSAtNDsgaSA8IDE7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdmFsLCBiYWQ7CiAKQEAgLTE0MiwxMyArMTQ2LDE0IEBACiAJCQliYWQgPSBfX2dldF91c2VyKHZhbCwgJigodTMyICopYWRkcilbaV0pOwogCiAJCWlmICghYmFkKQotCQkJcHJpbnRrKGkgPT0gMCA/ICIoJTAqeCkgIiA6ICIlMCp4ICIsIHdpZHRoLCB2YWwpOworCQkJcCArPSBzcHJpbnRmKHAsIGkgPT0gMCA/ICIoJTAqeCkgIiA6ICIlMCp4ICIsCisJCQkJCXdpZHRoLCB2YWwpOwogCQllbHNlIHsKLQkJCXByaW50aygiYmFkIFBDIHZhbHVlLiIpOworCQkJcCArPSBzcHJpbnRmKHAsICJiYWQgUEMgdmFsdWUiKTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXByaW50aygiXG4iKTsKKwlwcmludGsoIiVzQ29kZTogJXNcbiIsIGx2bCwgc3RyKTsKIAogCXNldF9mcyhmcyk7CiB9CkBAIC0yMjQsMTggKzIyOSwxOSBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gdGhyZWFkLT50YXNrOwogCXN0YXRpYyBpbnQgZGllX2NvdW50ZXI7CiAKLQlwcmludGsoIkludGVybmFsIGVycm9yOiAlczogJXggWyMlZF0iIFNfUFJFRU1QVCBTX1NNUCAiXG4iLAorCXByaW50ayhLRVJOX0VNRVJHICJJbnRlcm5hbCBlcnJvcjogJXM6ICV4IFsjJWRdIiBTX1BSRUVNUFQgU19TTVAgIlxuIiwKIAkgICAgICAgc3RyLCBlcnIsICsrZGllX2NvdW50ZXIpOworCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKIAlwcmludF9tb2R1bGVzKCk7CiAJX19zaG93X3JlZ3MocmVncyk7Ci0JcHJpbnRrKCJQcm9jZXNzICVzIChwaWQ6ICVkLCBzdGFjayBsaW1pdCA9IDB4JXApXG4iLAotCQl0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIHRocmVhZCArIDEpOworCXByaW50ayhLRVJOX0VNRVJHICJQcm9jZXNzICUuKnMgKHBpZDogJWQsIHN0YWNrIGxpbWl0ID0gMHglcClcbiIsCisJCVRBU0tfQ09NTV9MRU4sIHRzay0+Y29tbSwgdGFza19waWRfbnIodHNrKSwgdGhyZWFkICsgMSk7CiAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSB8fCBpbl9pbnRlcnJ1cHQoKSkgewotCQlkdW1wX21lbSgiU3RhY2s6ICIsIHJlZ3MtPkFSTV9zcCwKKwkJZHVtcF9tZW0oS0VSTl9FTUVSRywgIlN0YWNrOiAiLCByZWdzLT5BUk1fc3AsCiAJCQkgVEhSRUFEX1NJWkUgKyAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UodHNrKSk7CiAJCWR1bXBfYmFja3RyYWNlKHJlZ3MsIHRzayk7Ci0JCWR1bXBfaW5zdHIocmVncyk7CisJCWR1bXBfaW5zdHIoS0VSTl9FTUVSRywgcmVncyk7CiAJfQogfQogCkBAIC0yNTAsMTMgKzI1NiwxNCBAQAogCiAJb29wc19lbnRlcigpOwogCi0JY29uc29sZV92ZXJib3NlKCk7CiAJc3Bpbl9sb2NrX2lycSgmZGllX2xvY2spOworCWNvbnNvbGVfdmVyYm9zZSgpOwogCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCV9fZGllKHN0ciwgZXJyLCB0aHJlYWQsIHJlZ3MpOwogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWFkZF90YWludChUQUlOVF9ESUUpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOworCW9vcHNfZXhpdCgpOwogCiAJaWYgKGluX2ludGVycnVwdCgpKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIGluIGludGVycnVwdCIpOwpAQCAtMjY0LDcgKzI3MSw2IEBACiAJaWYgKHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKIAotCW9vcHNfZXhpdCgpOwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKQEAgLTM0OSw3ICszNTUsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19VTkRFRklORUQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgKCVkKTogdW5kZWZpbmVkIGluc3RydWN0aW9uOiBwYz0lcFxuIiwKIAkJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBwYyk7Ci0JCWR1bXBfaW5zdHIocmVncyk7CisJCWR1bXBfaW5zdHIoS0VSTl9JTkZPLCByZWdzKTsKIAl9CiAjZW5kaWYKIApAQCAtNDAwLDcgKzQwNiw3IEBACiAJaWYgKHVzZXJfZGVidWcgJiBVREJHX1NZU0NBTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJbJWRdICVzOiBvYnNvbGV0ZSBzeXN0ZW0gY2FsbCAlMDh4LlxuIiwKIAkJCXRhc2tfcGlkX25yKGN1cnJlbnQpLCBjdXJyZW50LT5jb21tLCBuKTsKLQkJZHVtcF9pbnN0cihyZWdzKTsKKwkJZHVtcF9pbnN0cihLRVJOX0VSUiwgcmVncyk7CiAJfQogI2VuZGlmCiAKQEAgLTQxOCwxMiArNDI0LDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIGRvX2NhY2hlX29wKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmxhZ3MpCiB7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5hY3RpdmVfbW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKIAlpZiAoZW5kIDwgc3RhcnQgfHwgZmxhZ3MpCiAJCXJldHVybjsKIAotCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPmFjdGl2ZV9tbSwgc3RhcnQpOworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOwogCWlmICh2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZCkgewogCQlpZiAoc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KQogCQkJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwpAQCAtNDMyLDYgKzQ0MCw3IEBACiAKIAkJZmx1c2hfY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOwogCX0KKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogfQogCiAvKgpAQCAtNTE5LDcgKzUyOCw3IEBACiAJICogX19rdXNlcl9jbXB4Y2hnIGNvZGUgaW4gZW50cnktYXJtdi5TIHNob3VsZCBiZSBhd2FyZSBvZiBpdHMKIAkgKiBleGlzdGVuY2UuICBEb24ndCBldmVyIHVzZSB0aGlzIGZyb20gdXNlciBjb2RlLgogCSAqLwotCWNhc2UgMHhmZmYwOgorCWNhc2UgTlIoY21weGNoZyk6CiAJZm9yICg7OykgewogCQlleHRlcm4gdm9pZCBkb19EYXRhQWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAogCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpAQCAtNTY0LDcgKzU3Myw3IEBACiAJCSAgIGlmIG5vdCBpbXBsZW1lbnRlZCwgcmF0aGVyIHRoYW4gcmFpc2luZyBTSUdJTEwuICBUaGlzCiAJCSAgIHdheSB0aGUgY2FsbGluZyBwcm9ncmFtIGNhbiBncmFjZWZ1bGx5IGRldGVybWluZSB3aGV0aGVyCiAJCSAgIGEgZmVhdHVyZSBpcyBzdXBwb3J0ZWQuICAqLwotCQlpZiAobm8gPD0gMHg3ZmYpCisJCWlmICgobm8gJiAweGZmZmYpIDw9IDB4N2ZmKQogCQkJcmV0dXJuIC1FTk9TWVM7CiAJCWJyZWFrOwogCX0KQEAgLTU3Niw3ICs1ODUsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19TWVNDQUxMKSB7CiAJCXByaW50aygiWyVkXSAlczogYXJtIHN5c2NhbGwgJWRcbiIsCiAJCSAgICAgICB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgbm8pOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKCIiLCByZWdzKTsKIAkJaWYgKHVzZXJfbW9kZShyZWdzKSkgewogCQkJX19zaG93X3JlZ3MocmVncyk7CiAJCQljX2JhY2t0cmFjZShyZWdzLT5BUk1fZnAsIHByb2Nlc3Nvcl9tb2RlKHJlZ3MpKTsKQEAgLTY1Myw3ICs2NjIsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19CQURBQk9SVCkgewogCQlwcmludGsoS0VSTl9FUlIgIlslZF0gJXM6IGJhZCBkYXRhIGFib3J0OiBjb2RlICVkIGluc3RyIDB4JTA4bHhcbiIsCiAJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgY29kZSwgaW5zdHIpOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKEtFUk5fRVJSLCByZWdzKTsKIAkJc2hvd19wdGUoY3VycmVudC0+bW0sIGFkZHIpOwogCX0KICNlbmRpZgpAQCAtNzQyLDYgKzc1MSw4IEBACiAJICovCiAJbWVtY3B5KCh2b2lkICopS0VSTl9TSUdSRVRVUk5fQ09ERSwgc2lncmV0dXJuX2NvZGVzLAogCSAgICAgICBzaXplb2Yoc2lncmV0dXJuX2NvZGVzKSk7CisJbWVtY3B5KCh2b2lkICopS0VSTl9SRVNUQVJUX0NPREUsIHN5c2NhbGxfcmVzdGFydF9jb2RlLAorCSAgICAgICBzaXplb2Yoc3lzY2FsbF9yZXN0YXJ0X2NvZGUpKTsKIAogCWZsdXNoX2ljYWNoZV9yYW5nZSh2ZWN0b3JzLCB2ZWN0b3JzICsgUEFHRV9TSVpFKTsKIAltb2RpZnlfZG9tYWluKERPTUFJTl9VU0VSLCBET01BSU5fQ0xJRU5UKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwppbmRleCAzOWJhZjExLi43ODZhYzJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCkBAIC0yNiw2ICsyNiwxNSBAQAogICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLnN1YnNldC5zd2Rldi5hYmkvaW5kZXguaHRtbAogICovCiAKKyNpZiAhZGVmaW5lZCAoX19BUk1fRUFCSV9fKQorI3dhcm5pbmcgWW91ciBjb21waWxlciBkb2VzIG5vdCBoYXZlIEVBQkkgc3VwcG9ydC4KKyN3YXJuaW5nICAgIEFSTSB1bndpbmQgaXMga25vd24gdG8gY29tcGlsZSBvbmx5IHdpdGggRUFCSSBjb21waWxlcnMuCisjd2FybmluZyAgICBDaGFuZ2UgY29tcGlsZXIgb3IgZGlzYWJsZSBBUk1fVU5XSU5EIG9wdGlvbi4KKyNlbGlmIChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDw9IDIpCisjd2FybmluZyBZb3VyIGNvbXBpbGVyIGlzIHRvbyBidWdneTsgaXQgaXMga25vd24gdG8gbm90IGNvbXBpbGUgQVJNIHVud2luZCBzdXBwb3J0LgorI3dhcm5pbmcgICAgQ2hhbmdlIGNvbXBpbGVyIG9yIGRpc2FibGUgQVJNX1VOV0lORCBvcHRpb24uCisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNWNjNDgxMi4uYWVjZjg3ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xOTksNiArMTk5LDYzIEBACiAJfQogCV9lZGF0YV9sb2MgPSBfX2RhdGFfbG9jICsgU0laRU9GKC5kYXRhKTsKIAorI2lmZGVmIENPTkZJR19IQVZFX1RDTQorICAgICAgICAvKgorCSAqIFdlIGFsaWduIGV2ZXJ5dGhpbmcgdG8gYSBwYWdlIGJvdW5kYXJ5IHNvIHdlIGNhbgorCSAqIGZyZWUgaXQgYWZ0ZXIgaW5pdCBoYXMgY29tbWVuY2VkIGFuZCBUQ00gY29udGVudHMgaGF2ZQorCSAqIGJlZW4gY29waWVkIHRvIGl0cyBkZXN0aW5hdGlvbi4KKwkgKi8KKwkudGNtX3N0YXJ0IDogeworCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwkJX190Y21fc3RhcnQgPSAuOworCQlfX2l0Y21fc3RhcnQgPSAuOworCX0KKworCS8qCisJICogTGluayB0aGVzZSB0byB0aGUgSVRDTSBSQU0KKwkgKiBQdXQgVk1BIHRvIHRoZSBUQ00gYWRkcmVzcyBhbmQgTE1BIHRvIHRoZSBjb21tb24gUkFNCisJICogYW5kIHdlJ2xsIHVwbG9hZCB0aGUgY29udGVudHMgZnJvbSBSQU0gdG8gVENNIGFuZCBmcmVlCisJICogdGhlIHVzZWQgUkFNIGFmdGVyIHRoYXQuCisJICovCisJLnRleHRfaXRjbSBJVENNX09GRlNFVCA6IEFUKF9faXRjbV9zdGFydCkKKwl7CisJCV9fc2l0Y21fdGV4dCA9IC47CisJCSooLnRjbS50ZXh0KQorCQkqKC50Y20ucm9kYXRhKQorCQkuID0gQUxJR04oNCk7CisJCV9fZWl0Y21fdGV4dCA9IC47CisJfQorCisJLyoKKwkgKiBSZXNldCB0aGUgZG90IHBvaW50ZXIsIHRoaXMgaXMgbmVlZGVkIHRvIGNyZWF0ZSB0aGUKKwkgKiByZWxhdGl2ZSBfX2R0Y21fc3RhcnQgYmVsb3cgKHRvIGJlIHVzZWQgYXMgZXh0ZXJuIGluIGNvZGUpLgorCSAqLworCS4gPSBBRERSKC50Y21fc3RhcnQpICsgU0laRU9GKC50Y21fc3RhcnQpICsgU0laRU9GKC50ZXh0X2l0Y20pOworCisJLmR0Y21fc3RhcnQgOiB7CisJCV9fZHRjbV9zdGFydCA9IC47CisJfQorCisJLyogVE9ETzogYWRkIHJlbWFpbmRlciBvZiBJVENNIGFzIHdlbGwsIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRhdGEhICovCisJLmRhdGFfZHRjbSBEVENNX09GRlNFVCA6IEFUKF9fZHRjbV9zdGFydCkKKwl7CisJCS4gPSBBTElHTig0KTsKKwkJX19zZHRjbV9kYXRhID0gLjsKKwkJKigudGNtLmRhdGEpCisJCS4gPSBBTElHTig0KTsKKwkJX19lZHRjbV9kYXRhID0gLjsKKwl9CisKKwkvKiBSZXNldCB0aGUgZG90IHBvaW50ZXIgb3IgdGhlIGxpbmtlciBnZXRzIGNvbmZ1c2VkICovCisJLiA9IEFERFIoLmR0Y21fc3RhcnQpICsgU0laRU9GKC5kYXRhX2R0Y20pOworCisJLyogRW5kIG1hcmtlciBmb3IgZnJlZWluZyBUQ00gY29weSBpbiBsaW5rZWQgb2JqZWN0ICovCisJLnRjbV9lbmQgOiBBVChBRERSKC5kdGNtX3N0YXJ0KSArIFNJWkVPRiguZGF0YV9kdGNtKSl7CisJCS4gPSBBTElHTihQQUdFX1NJWkUpOworCQlfX3RjbV9lbmQgPSAuOworCX0KKyNlbmRpZgorCiAJLmJzcyA6IHsKIAkJX19ic3Nfc3RhcnQgPSAuOwkvKiBCU1MJCQkJKi8KIAkJKiguYnNzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NvcHlfcGFnZS5TIGIvYXJjaC9hcm0vbGliL2NvcHlfcGFnZS5TCmluZGV4IDZhZTA0ZGIuLjZlZTJmNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jb3B5X3BhZ2UuUworKysgYi9hcmNoL2FybS9saWIvY29weV9wYWdlLlMKQEAgLTEyLDggKzEyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCi0jZGVmaW5lIENPUFlfQ09VTlQgKFBBR0VfU1ovNjQgUExEKCAtMSApKQorI2RlZmluZSBDT1BZX0NPVU5UIChQQUdFX1NaIC8gKDIgKiBMMV9DQUNIRV9CWVRFUykgUExEKCAtMSApKQogCiAJCS50ZXh0CiAJCS5hbGlnbgk1CkBAIC0yNiwxNyArMjcsMTYgQEAKIEVOVFJZKGNvcHlfcGFnZSkKIAkJc3RtZmQJc3AhLCB7cjQsIGxyfQkJCUAJMgogCVBMRCgJcGxkCVtyMSwgIzBdCQkpCi0JUExEKAlwbGQJW3IxLCAjMzJdCQkpCisJUExEKAlwbGQJW3IxLCAjTDFfQ0FDSEVfQllURVNdCQkpCiAJCW1vdglyMiwgI0NPUFlfQ09VTlQJCQlACTEKIAkJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQotMToJUExEKAlwbGQJW3IxLCAjNjRdCQkpCi0JUExEKAlwbGQJW3IxLCAjOTZdCQkpCi0yOgkJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKLQkJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQotCQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAotCQlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAJNCsxCisxOglQTEQoCXBsZAlbcjEsICMyICogTDFfQ0FDSEVfQllURVNdKQorCVBMRCgJcGxkCVtyMSwgIzMgKiBMMV9DQUNIRV9CWVRFU10pCisyOgorCS5yZXB0CSgyICogTDFfQ0FDSEVfQllURVMgLyAxNiAtIDEpCiAJCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CiAJCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CisJLmVuZHIKIAkJc3VicwlyMiwgcjIsICMxCQkJQAkxCiAJCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CiAJCWxkbWd0aWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKaW5kZXggZTM1ZDU0ZC4uMmZkODg0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKQEAgLTI4OSwxMyArMjg5LDYgQEAKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIHRoZSBBZGVuZW8gTmVvY29yZSA5MjYgYm9hcmQuCiAKLWNvbmZpZyBNQUNIX0FUOTFTQU05RzIwRUtfMk1NQwotCWJvb2wgIkF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0IG1vZGlmaWVkIGZvciAyIE1NQyBTbG90cyIKLQlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVNBTTlHMjAKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGFuIEF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0Ci0JICBSZXYgQSBvciBCIG1vZGlmaWVkIGZvciAyIE1NQyBTbG90cy4KLQogZW5kaWYKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjIsNyArMzE1LDE2IEBACiAJYm9vbCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgRXZhbHVhdGlvbiBLaXQiCiAJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05RzIwCiAJaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0LgorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0CisJICB0aGF0IGVtYmVkcyBvbmx5IG9uZSBTRC9NTUMgc2xvdC4KKworY29uZmlnIE1BQ0hfQVQ5MVNBTTlHMjBFS18yTU1DCisJYm9vbCAiQXRtZWwgQVQ5MVNBTTlHMjAtRUsgRXZhbHVhdGlvbiBLaXQgd2l0aCAyIFNEL01NQyBTbG90cyIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVNBTTlHMjAKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGFuIEF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0CisJICB3aXRoIDIgU0QvTU1DIFNsb3RzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBBVDkxU0FNOUcyMC1FSyByZXYuIEMgYW5kCisJICBvbndhcmRzLgogCiBjb25maWcgTUFDSF9DUFU5RzIwCiAJYm9vbCAiRXVrcmVhIENQVTlHMjAgYm9hcmQiCkBAIC0zOTIsNyArMzk0LDcgQEAKIAogY29uZmlnIE1URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2CiAJYm9vbCAiRW5hYmxlIDE2LWJpdCBkYXRhIGJ1cyBpbnRlcmZhY2UgdG8gTkFORCBmbGFzaCIKLQlkZXBlbmRzIG9uIChNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTlHMTBFSyB8fCBNQUNIX0FUOTFTQU05MjYzRUsgfHwgTUFDSF9BVDkxU0FNOUcyMEVLIHx8IE1BQ0hfQVQ5MVNBTTlHNDVFS0VTIHx8IE1BQ0hfQVQ5MUNBUDlBREspCisJZGVwZW5kcyBvbiAoTUFDSF9BVDkxU0FNOTI2MEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjFFSyB8fCBNQUNIX0FUOTFTQU05RzEwRUsgfHwgTUFDSF9BVDkxU0FNOTI2M0VLIHx8IE1BQ0hfQVQ5MVNBTTlHMjBFSyB8fCBNQUNIX0FUOTFTQU05RzIwRUtfMk1NQyB8fCBNQUNIX0FUOTFTQU05RzQ1RUtFUyB8fCBNQUNIX0FUOTFDQVA5QURLKQogCWhlbHAKIAkgIE9uIEFUOTFTQU05MjZ4IGJvYXJkcyBib3RoIHR5cGVzIG9mIE5BTkQgZmxhc2ggY2FuIGJlIHByZXNlbnQKIAkgICg4IGFuZCAxNiBiaXQgZGF0YSBidXMgd2lkdGgpLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMKaW5kZXggNDEyYWE0OS4uZDFmNzc1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jCkBAIC03NzEsOSArNzcxLDkgQEAKICAqICBBQzk3CiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0FUOTFfQUM5NykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUOTFfQUM5N19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQogc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgYWM5N19kYXRhOworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTc4OSw3ICs3ODksNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MWNhcDlfYWM5N19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImFjOTdjIiwKKwkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAogCS5pZAkJPSAxLAogCS5kZXYJCT0gewogCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLApAQCAtODAwLDcgKzgwMCw3IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFjOTdfcmVzb3VyY2VzKSwKIH07CiAKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgKmRhdGEpCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKIHsKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKQEAgLTgxOCw3ICs4MTgsNyBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MWNhcDlfYWM5N19kZXZpY2UpOwogfQogI2Vsc2UKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgKmRhdGEpIHt9Cit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCmluZGV4IGQ3NDZlODYuLjMzMmI3ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYwpAQCAtMjQsMTEgKzI0LDU5IEBACiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NS5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlnNDVfbWF0cml4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2F0X2hkbWFjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBIRE1BQyAtIEFIQiBETUEgQ29udHJvbGxlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUX0hETUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVF9IRE1BQ19NT0RVTEUpCitzdGF0aWMgdTY0IGhkbWFjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IGF0X2RtYV9wbGF0Zm9ybV9kYXRhIGF0ZG1hX3BkYXRhID0geworCS5ucl9jaGFubmVscwk9IDgsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhkbWFjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRE1BLAorCQkuZW5kCT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRE1BICsgU1pfNTEyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX0RNQSwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0lEX0RNQSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0X2hkbWFjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRfaGRtYWMiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJmhkbWFjX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmYXRkbWFfcGRhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBoZG1hY19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhkbWFjX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkKK3sKKwlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBhdGRtYV9wZGF0YS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBhdGRtYV9wZGF0YS5jYXBfbWFzayk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdF9oZG1hY19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9oZG1hYyh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBVU0IgSG9zdCAoT0hDSSkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTU1MCw2ICs1OTgsNjEgQEAKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEFDOTcKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3Q19NT0RVTEUpCitzdGF0aWMgdTY0IGFjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgYWM5N19kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGFjOTdfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9CQVNFX0FDOTdDLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9BQzk3QyArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9BQzk3QywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0lEX0FDOTdDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfYWM5N19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX2FjOTdjIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJmFjOTdfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhYzk3X2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBhYzk3X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYWM5N19yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDgsIDApOwkvKiBBQzk3RlMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDksIDApOwkvKiBBQzk3Q0sgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDcsIDApOwkvKiBBQzk3VFggKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDYsIDApOwkvKiBBQzk3UlggKi8KKworCS8qIHJlc2V0ICovCisJaWYgKGRhdGEtPnJlc2V0X3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cmVzZXRfcGluLCAwKTsKKworCWFjOTdfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfYWM5N19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBMQ0QgQ29udHJvbGxlcgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNzM1LDcgKzgzOCw3IEBACiAgKiAgV2F0Y2hkb2cKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0dfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3dkdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImF0OTFfd2R0IiwKIAkuaWQJCT0gLTEsCkBAIC0xMjIwLDYgKzEzMjMsNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCiB7CisJYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3J0YygpOwogCWF0OTFfYWRkX2RldmljZV9ydHQoKTsKIAlhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2coKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYwppbmRleCA3MjgxODY1Li5kMzQ1ZjU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCkBAIC0yMSwxMSArMjEsNTcgQEAKICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05cmwuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05cmxfbWF0cml4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2F0X2hkbWFjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBIRE1BQyAtIEFIQiBETUEgQ29udHJvbGxlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUX0hETUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVF9IRE1BQ19NT0RVTEUpCitzdGF0aWMgdTY0IGhkbWFjX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IGF0X2RtYV9wbGF0Zm9ybV9kYXRhIGF0ZG1hX3BkYXRhID0geworCS5ucl9jaGFubmVscwk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhkbWFjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRE1BLAorCQkuZW5kCT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRE1BICsgU1pfNTEyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfRE1BLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9JRF9ETUEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdF9oZG1hY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0X2hkbWFjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZoZG1hY19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmF0ZG1hX3BkYXRhLAorCX0sCisJLnJlc291cmNlCT0gaGRtYWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZG1hY19yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKHZvaWQpCit7CisJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgYXRkbWFfcGRhdGEuY2FwX21hc2spOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXRfaGRtYWNfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkge30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFVTQiBIUyBEZXZpY2UgKEdhZGdldCkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTM5OCw2ICs0NDQsNjEgQEAKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEFDOTcKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3Q19NT0RVTEUpCitzdGF0aWMgdTY0IGFjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgYWM5N19kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGFjOTdfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfQUM5N0MsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9JRF9BQzk3QywKKwkJLmVuZAk9IEFUOTFTQU05UkxfSURfQUM5N0MsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX2FjOTdfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9hYzk3YyIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZhYzk3X2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmYWM5N19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gYWM5N19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFjOTdfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKQoreworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxLCAwKTsJLyogQUM5N0ZTICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQyLCAwKTsJLyogQUM5N0NLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQzLCAwKTsJLyogQUM5N1RYICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ0LCAwKTsJLyogQUM5N1JYICovCisKKwkvKiByZXNldCAqLworCWlmIChkYXRhLT5yZXNldF9waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnJlc2V0X3BpbiwgMCk7CisKKwlhYzk3X2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05cmxfYWM5N19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBMQ0QgQ29udHJvbGxlcgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMTEwMyw2ICsxMjA0LDcgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQogeworCWF0OTFfYWRkX2RldmljZV9oZG1hYygpOwogCWF0OTFfYWRkX2RldmljZV9ydGMoKTsKIAlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FwOWFkay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYwppbmRleCA4M2ExYTBmLi5kNjk0MDg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FwOWFkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXA5YWRrLmMKQEAgLTM2NCw3ICszNjQsNyBAQAogLyoKICAqIEFDOTcKICAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgY2FwOWFka19hYzk3X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgY2FwOWFka19hYzk3X2RhdGEgPSB7CiAvLwkucmVzZXRfcGluCT0gLi4uIG5vdCBjb25uZWN0ZWQKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1uZW9jb3JlOTI2LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jCmluZGV4IDhjMGI3MWMuLjdjMWUzODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1uZW9jb3JlOTI2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLW5lb2NvcmU5MjYuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAvKgogICogQUM5NwogICovCi1zdGF0aWMgc3RydWN0IGF0bWVsX2FjOTdfZGF0YSBuZW9jb3JlOTI2X2FjOTdfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBuZW9jb3JlOTI2X2FjOTdfZGF0YSA9IHsKIAkucmVzZXRfcGluCT0gQVQ5MV9QSU5fUEExMywKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWstMnNsb3QtbW1jLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jCmluZGV4IGEyOGU1M2YuLmE0MTAyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWstMnNsb3QtbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay0yc2xvdC1tbWMuYwpAQCAtOTAsNyArOTAsNyBAQAogICogU1BJIGRldmljZXMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZWtfc3BpX2RldmljZXNbXSA9IHsKLSNpZiAhZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJKQorI2lmICEoZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfQVQ5MSkpCiAJewkvKiBEYXRhRmxhc2ggY2hpcCAqLwogCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCiAJCS5jaGlwX3NlbGVjdAk9IDEsCkBAIC0xMTMsNyArMTEzLDcgQEAKICAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBfX2luaXRkYXRhIGVrX21hY2JfZGF0YSA9IHsKLQkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzEyLAorCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BCMCwKIAkuaXNfcm1paQk9IDEsCiB9OwogCkBAIC0xOTQsMjQgKzE5NCwyNyBAQAogCiAvKgogICogTUNJIChTRC9NTUMpCi0gKiBkZXRfcGluIGFuZCB3cF9waW4gYXJlIG5vdCBjb25uZWN0ZWQKKyAqIHdwX3BpbiBpcyBub3QgY29ubmVjdGVkCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0kpIHx8IGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSV9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbW1jX2RhdGEgPSB7CiAJLnNsb3RbMF0gPSB7CiAJCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IC1FTk9ERVYsCisJCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEMyLAogCQkud3BfcGluCQk9IC1FTk9ERVYsCiAJfSwKIAkuc2xvdFsxXSA9IHsKIAkJLmJ1c193aWR0aAk9IDQsCi0JCS5kZXRlY3RfcGluCT0gLUVOT0RFViwKKwkJLmRldGVjdF9waW4JPSBBVDkxX1BJTl9QQzksCiAJCS53cF9waW4JCT0gLUVOT0RFViwKIAl9LAogCiB9OwogI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgYW1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgZWtfbW1jX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgX19pbml0ZGF0YSBla19tbWNfZGF0YSA9IHsKKwkuc2xvdF9iCQk9IDEsCS8qIE9ubHkgb25lIHNsb3Qgc28gdXNlIHNsb3QgQiAqLworCS53aXJlNAkJPSAxLAorCS5kZXRfcGluCT0gQVQ5MV9QSU5fUEM5LAogfTsKICNlbmRpZgogCkBAIC0yMjEsMTMgKzIyNCwxMyBAQAogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7CiAJewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMSB0byBiZSBkZWZpbmVkICovCiAJCS5uYW1lCQkJPSAiZHM1IiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjgsCiAJCS5hY3RpdmVfbG93CQk9IDEsCiAJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCiAJfSwKIAl7CS8qICJwb3dlciIgbGVkLCB5ZWxsb3cgKi8KIAkJLm5hbWUJCQk9ICJkczEiLAotCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEIxMywKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BCOSwKIAkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAogCX0KIH07CkBAIC0yNTQsNyArMjU3LDExIEBACiAJLyogRXRoZXJuZXQgKi8KIAlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOwogCS8qIE1NQyAqLworI2lmIGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJX01PRFVMRSkKIAlhdDkxX2FkZF9kZXZpY2VfbWNpKDAsICZla19tbWNfZGF0YSk7CisjZWxzZQorCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmVrX21tY19kYXRhKTsKKyNlbmRpZgogCS8qIEkyQyAqLwogCWF0OTFfYWRkX2RldmljZV9pMmMoZWtfaTJjX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfaTJjX2RldmljZXMpKTsKIAkvKiBMRURzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMKaW5kZXggYjg1NThlYS4uNjRjMzg0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYwpAQCAtMzExLDYgKzMxMSwxNCBAQAogCiAKIC8qCisgKiBBQzk3CisgKiByZXNldF9waW4gaXMgbm90IGNvbm5lY3RlZDogTlJTVAorICovCitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgZWtfYWM5N19kYXRhID0geworfTsKKworCisvKgogICogTEVEcyAuLi4gdGhlc2UgY291bGQgYWxsIGJlIFBXTS1kcml2ZW4sIGZvciB2YXJpYWJsZSBicmlnaHRuZXNzCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewpAQCAtMzcyLDYgKzM4MCw4IEBACiAJYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7CiAJLyogUHVzaCBCdXR0b25zICovCiAJZWtfYWRkX2RldmljZV9idXR0b25zKCk7CisJLyogQUM5NyAqLworCWF0OTFfYWRkX2RldmljZV9hYzk3KCZla19hYzk3X2RhdGEpOwogCS8qIExFRHMgKi8KIAlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKIAlhdDkxX3B3bV9sZWRzKGVrX3B3bV9sZWQsIEFSUkFZX1NJWkUoZWtfcHdtX2xlZCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYwppbmRleCA5NGZmYjVjLi5iZDI4ZTk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYwpAQCAtMjExLDYgKzIxMSwxNCBAQAogCiAKIC8qCisgKiBBQzk3CisgKiByZXNldF9waW4gaXMgbm90IGNvbm5lY3RlZDogTlJTVAorICovCitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgZWtfYWM5N19kYXRhID0geworfTsKKworCisvKgogICogTEVEcwogICovCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKQEAgLTI5OSw2ICszMDcsOCBAQAogCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmVrX21tY19kYXRhKTsKIAkvKiBMQ0QgQ29udHJvbGxlciAqLwogCWF0OTFfYWRkX2RldmljZV9sY2RjKCZla19sY2RjX2RhdGEpOworCS8qIEFDOTcgKi8KKwlhdDkxX2FkZF9kZXZpY2VfYWM5NygmZWtfYWM5N19kYXRhKTsKIAkvKiBUb3VjaCBTY3JlZW4gQ29udHJvbGxlciAqLwogCWF0OTFfYWRkX2RldmljZV90c2FkY2MoKTsKIAkvKiBMRURzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCAzNGE5NTAyLi5jMjJkZjMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTI1LDYgKzI1LDggQEAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUcyMAkweDAxOTkwNWEwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlSTDY0CTB4MDE5YjAzYTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUc0NQkweDgxOWIwNWEwCisjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHNDVNUkwJMHg4MTliMDVhMgkvKiBha2EgOUc0NS1FUzIgJiBub24gRVMgbG90cyAqLworI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1RVMJMHg4MTliMDVhMQkvKiA5RzQ1LUVTIChFbmdpbmVlcmluZyBTYW1wbGUpICovCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MUNBUDkJMHgwMzlBMDNBMAogCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlYRTEyOAkweDMyOTk3M2EwCkBAIC00MSw2ICs0MywxMSBAQAogCXJldHVybiAoYXQ5MV9zeXNfcmVhZChBVDkxX0RCR1VfQ0lEUikgJiB+QVQ5MV9DSURSX1ZFUlNJT04pOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXQ5MV9jcHVfZnVsbHlfaWRlbnRpZnkodm9pZCkKK3sKKwlyZXR1cm4gYXQ5MV9zeXNfcmVhZChBVDkxX0RCR1VfQ0lEUik7Cit9CisKICNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05TTExCTB4MDAwMDAwMDEKICNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05TTEwCTB4MDAwMDAwMDIKICNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzQ1CTB4MDAwMDAwMDQKQEAgLTExOCw4ICsxMjUsMTAgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX0FUOTFTQU05RzQ1CiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NSgpCShhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MVNBTTlHNDUpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NWVzKCkJKGF0OTFfY3B1X2Z1bGx5X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxU0FNOUc0NUVTKQogI2Vsc2UKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NWVzKCkJKDApCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX0FUOTFDQVA5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYwppbmRleCA0OTJjNjQ5Li5lNTkwYmJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bWFjaC9jc3AvbW1fYWRkci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CkBAIC00NSw3ICs0NCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSA8Y2ZnX2dsb2JhbC5oPgogCkBAIC0yNzMsMTIgKzI3MSwxMiBAQAogCS5oYW5kbGVyID0gYmNtcmluZ190aW1lcl9pbnRlcnJ1cHQsCiB9OwogCi1zdGF0aWMgY3ljbGVfdCBiY21yaW5nX2dldF9jeWNsZXNfdGltZXIxKHZvaWQpCitzdGF0aWMgY3ljbGVfdCBiY21yaW5nX2dldF9jeWNsZXNfdGltZXIxKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIH5yZWFkbChUSU1FUjFfVkFfQkFTRSArIFRJTUVSX1ZBTFVFKTsKIH0KIAotc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMyh2b2lkKQorc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCXJldHVybiB+cmVhZGwoVElNRVIzX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBjZGJmOTNjLi4zOGIzNzA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNoYXIgKmNtZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCXByaW50aygiYXJjaF9yZXNldDolYyAleFxuIiwgbW9kZSwgYmNtcmluZ19hcmNoX3dhcm1fcmVib290KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCmluZGV4IGExZDVlN2QuLjUyZGQ4MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCmluZGV4IGQ3MjkxYzYuLjkxNjdjM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpAQCAtMTcsMTMgKzE3LDMxIEBACiAJYm9vbCAiMHgwMDAwMDAwMCAtIFNEQ0UzL1N5bmNCb290IgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBFUDkzeHggYm9hcmRzIHdpdGggdGhlCi0JICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4MDAwMDAwMDAKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHgwMDAwMDAwMC4KIAogY29uZmlnIEVQOTNYWF9TRENFMF9QSFlTX09GRlNFVAogCWJvb2wgIjB4YzAwMDAwMDAgLSBTRENFTyIKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQotCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGMwMDAwMDAwCisJICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4YzAwMDAwMDAuCisKK2NvbmZpZyBFUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQKKwlib29sICIweGQwMDAwMDAwIC0gU0RDRTEiCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIEVQOTN4eCBib2FyZHMgd2l0aCB0aGUKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHhkMDAwMDAwMC4KKworY29uZmlnIEVQOTNYWF9TRENFMl9QSFlTX09GRlNFVAorCWJvb2wgIjB4ZTAwMDAwMDAgLSBTRENFMiIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGUwMDAwMDAwLgorCitjb25maWcgRVA5M1hYX1NEQ0UzX0FTWU5DX1BIWVNfT0ZGU0VUCisJYm9vbCAiMHhmMDAwMDAwMCAtIFNEQ0UzL0FzeW5jQm9vdCIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGYwMDAwMDAwLgogCiBlbmRjaG9pY2UKIApAQCAtMTEyLDI4ICsxMzAsMzYgQEAKIAlib29sCiAKIGNvbmZpZyBNQUNIX01JQ1JPOUgKLQlib29sICJTdXBwb3J0IENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUgiCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LUhpZ2giCiAJZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTNfU1lOQ19QSFlTX09GRlNFVAogCXNlbGVjdCBNQUNIX01JQ1JPOQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktSCBib2FyZC4KKwkgIENvbnRlYyBNaWNybzktSGlnaCBib2FyZC4KIAogY29uZmlnIE1BQ0hfTUlDUk85TQotCWJvb2wgIlN1cHBvcnQgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSIKLQlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19TWU5DX1BIWVNfT0ZGU0VUCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LU1pZCIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAogCXNlbGVjdCBNQUNIX01JQ1JPOQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSBib2FyZC4KKwkgIENvbnRlYyBNaWNybzktTWlkIGJvYXJkLgogCiBjb25maWcgTUFDSF9NSUNSTzlMCi0JYm9vbCAiU3VwcG9ydCBDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1MIgorCWJvb2wgIlN1cHBvcnQgQ29udGVjIE1pY3JvOS1MaXRlIgogCWRlcGVuZHMgb24gRVA5M1hYX1NEQ0UzX1NZTkNfUEhZU19PRkZTRVQKIAlzZWxlY3QgTUFDSF9NSUNSTzkKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUwgYm9hcmQuCisJICBDb250ZWMgTWljcm85LUxpdGUgYm9hcmQuCisKK2NvbmZpZyBNQUNIX01JQ1JPOVMKKwlib29sICJTdXBwb3J0IENvbnRlYyBNaWNybzktU2xpbSIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAorCXNlbGVjdCBNQUNIX01JQ1JPOQorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgQ29udGVjIE1pY3JvOS1TbGltIGJvYXJkLgogCiBjb25maWcgTUFDSF9UUzcyWFgKIAlib29sICJTdXBwb3J0IFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzJ4eCBTQkMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUuYm9vdAppbmRleCAyN2EwODVhLi4wYWQzM2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290CisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlLmJvb3QKQEAgLTMsMyArMywxMiBAQAogCiAgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCQk6PSAweGMwMDA4MDAwCiBwYXJhbXNfcGh5cy0kKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCQk6PSAweGMwMDAwMTAwCisKKyAgIHpyZWxhZGRyLSQoQ09ORklHX0VQOTNYWF9TRENFMV9QSFlTX09GRlNFVCkJCTo9IDB4ZDAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFMV9QSFlTX09GRlNFVCkJCTo9IDB4ZDAwMDAxMDAKKworICAgenJlbGFkZHItJChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQkJOj0gMHhlMDAwODAwMAorcGFyYW1zX3BoeXMtJChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQkJOj0gMHhlMDAwMDEwMAorCisgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTNfQVNZTkNfUEhZU19PRkZTRVQpCTo9IDB4ZjAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVCkJOj0gMHhmMDAwMDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKaW5kZXggZGRhMTljZDcuLjFkMGY5ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtMTYsMTMgKzE2LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogCiBzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgY2xrCSpwYXJlbnQ7CiAJdW5zaWduZWQgbG9uZwlyYXRlOwogCWludAkJdXNlcnM7CiAJaW50CQlzd19sb2NrZWQ7CkBAIC0zOSw0MCArNDIsNjAgQEAKIHN0YXRpYyBpbnQgc2V0X2tleXRjaGNsa19yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHN0YXRpYyBpbnQgc2V0X2Rpdl9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIAorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfeHRhbGkgPSB7CisJLnJhdGUJCT0gRVA5M1hYX0VYVF9DTEtfUkFURSwKK307CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5zd19sb2NrZWQJPSAxLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkcsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkdfVTFFTiwKIAkuZ2V0X3JhdGUJPSBnZXRfdWFydF9yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MiA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0RFVkNGRywKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VMkVOLAogCS5nZXRfcmF0ZQk9IGdldF91YXJ0X3JhdGUsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQzID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKIAkuc3dfbG9ja2VkCT0gMSwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHLAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UzRU4sCiAJLmdldF9yYXRlCT0gZ2V0X3VhcnRfcmF0ZSwKIH07Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcGxsMTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mOwotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2g7Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcDsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyOworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BsbDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKK307CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdXNiX2hvc3QgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BsbDIsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VU0hfRU4sCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX2tleXBhZCA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJViwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9LRU4sCiAJLnNldF9yYXRlCT0gc2V0X2tleXRjaGNsa19yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wd20gPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5yYXRlCQk9IEVQOTNYWF9FWFRfQ0xLX1JBVEUsCiB9OwogCkBAIC04NSw1MCArMTA4LDYyIEBACiAKIC8qIERNQSBDbG9ja3MgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAwID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDAsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQMSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMiA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlAyLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAzID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDMsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDQgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwNSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA1LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA2ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDYsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDcgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNywKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwOCA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA4LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA5ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDksCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ybTAgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJNMCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJtMSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMk0xLAogfTsKQEAgLTEzNyw2ICsxNzIsNyBAQAogCXsgLmRldl9pZCA9IGRldiwgLmNvbl9pZCA9IGNvbiwgLmNsayA9IGNrIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGNsb2Nrc1tdID0geworCUlOSVRfQ0soTlVMTCwJCQkieHRhbGkiLAkmY2xrX3h0YWxpKSwKIAlJTklUX0NLKCJhcGI6dWFydDEiLAkJTlVMTCwJCSZjbGtfdWFydDEpLAogCUlOSVRfQ0soImFwYjp1YXJ0MiIsCQlOVUxMLAkJJmNsa191YXJ0MiksCiAJSU5JVF9DSygiYXBiOnVhcnQzIiwJCU5VTEwsCQkmY2xrX3VhcnQzKSwKQEAgLTE2Myw0OCArMTk5LDg0IEBACiAJSU5JVF9DSyhOVUxMLAkJCSJtMm0xIiwJCSZjbGtfbTJtMSksCiB9OwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKKworc3RhdGljIHZvaWQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsay0+dXNlcnMrKykgeworCQlpZiAoY2xrLT5wYXJlbnQpCisJCQlfX2Nsa19lbmFibGUoY2xrLT5wYXJlbnQpOworCisJCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJCXUzMiB2OworCisJCQl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXYgfD0gY2xrLT5lbmFibGVfbWFzazsKKwkJCWlmIChjbGstPnN3X2xvY2tlZCkKKwkJCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCQllbHNlCisJCQkJX19yYXdfd3JpdGVsKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9Cit9CiAKIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoIWNsay0+dXNlcnMrKyAmJiBjbGstPmVuYWJsZV9yZWcpIHsKLQkJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQl2YWx1ZSB8PSBjbGstPmVuYWJsZV9tYXNrOwotCQlpZiAoY2xrLT5zd19sb2NrZWQpCi0JCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCQllbHNlCi0JCQlfX3Jhd193cml0ZWwodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JfQorCWlmICghY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCV9fY2xrX2VuYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CiAKK3N0YXRpYyB2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmICghLS1jbGstPnVzZXJzKSB7CisJCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJCXUzMiB2OworCisJCQl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXYgJj0gfmNsay0+ZW5hYmxlX21hc2s7CisJCQlpZiAoY2xrLT5zd19sb2NrZWQpCisJCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2LCBjbGstPmVuYWJsZV9yZWcpOworCQkJZWxzZQorCQkJCV9fcmF3X3dyaXRlbCh2LCBjbGstPmVuYWJsZV9yZWcpOworCQl9CisKKwkJaWYgKGNsay0+cGFyZW50KQorCQkJX19jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJfQorfQorCiB2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoIS0tY2xrLT51c2VycyAmJiBjbGstPmVuYWJsZV9yZWcpIHsKLQkJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQl2YWx1ZSAmPSB+Y2xrLT5lbmFibGVfbWFzazsKLQkJaWYgKGNsay0+c3dfbG9ja2VkKQotCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKLQkJZWxzZQotCQkJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCX0KKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CisJX19jbGtfZGlzYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAl1MzIgdmFsdWU7CiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fUFdSQ05UKTsKIAlpZiAodmFsdWUgJiBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VQVJUQkFVRCkKLQkJcmV0dXJuIEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCXJldHVybiByYXRlOwogCWVsc2UKLQkJcmV0dXJuIEVQOTNYWF9FWFRfQ0xLX1JBVEUgLyAyOworCQlyZXR1cm4gcmF0ZSAvIDI7CiB9CiAKIHVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTI0NCwxNiArMzE2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfY2xrX2Rpdih1bnNpZ25lZCBsb25nIHJhdGUsIGludCAqcHNlbCwgaW50ICplc2VsLAotCQkJCSAgaW50ICpwZGl2LCBpbnQgKmRpdikKK3N0YXRpYyBpbnQgY2FsY19jbGtfZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJaW50ICpwc2VsLCBpbnQgKmVzZWwsIGludCAqcGRpdiwgaW50ICpkaXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSwgYmVzdF9yYXRlID0gMCwKLQkJYWN0dWFsX3JhdGUgPSAwLCBtY2xrX3JhdGUgPSAwLCByYXRlX2VyciA9IC0xOworCXN0cnVjdCBjbGsgKm1jbGs7CisJdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSwgYWN0dWFsX3JhdGUsIG1jbGtfcmF0ZSwgcmF0ZV9lcnIgPSAtMTsKIAlpbnQgaSwgZm91bmQgPSAwLCBfX2RpdiA9IDAsIF9fcGRpdiA9IDA7CiAKIAkvKiBEb24ndCBleGNlZWQgdGhlIG1heGltdW0gcmF0ZSAqLwogCW1heF9yYXRlID0gbWF4KG1heChjbGtfcGxsMS5yYXRlIC8gNCwgY2xrX3BsbDIucmF0ZSAvIDQpLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpRVA5M1hYX0VYVF9DTEtfUkFURSAvIDQpOworCQkgICAgICAgY2xrX3h0YWxpLnJhdGUgLyA0KTsKIAlyYXRlID0gbWluKHJhdGUsIG1heF9yYXRlKTsKIAogCS8qCkBAIC0yNjcsMTEgKzMzOSwxMiBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJaWYgKGkgPT0gMCkKLQkJCW1jbGtfcmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEUgKiAyOworCQkJbWNsayA9ICZjbGtfeHRhbGk7CiAJCWVsc2UgaWYgKGkgPT0gMSkKLQkJCW1jbGtfcmF0ZSA9IGNsa19wbGwxLnJhdGUgKiAyOwotCQllbHNlIGlmIChpID09IDIpCi0JCQltY2xrX3JhdGUgPSBjbGtfcGxsMi5yYXRlICogMjsKKwkJCW1jbGsgPSAmY2xrX3BsbDE7CisJCWVsc2UKKwkJCW1jbGsgPSAmY2xrX3BsbDI7CisJCW1jbGtfcmF0ZSA9IG1jbGstPnJhdGUgKiAyOwogCiAJCS8qIFRyeSBlYWNoIHByZWRpdmlkZXIgdmFsdWUgKi8KIAkJZm9yIChfX3BkaXYgPSA0OyBfX3BkaXYgPD0gNjsgX19wZGl2KyspIHsKQEAgLTI4Niw3ICszNTksOCBAQAogCQkJCSpkaXYgPSBfX2RpdjsKIAkJCQkqcHNlbCA9IChpID09IDIpOwogCQkJCSplc2VsID0gKGkgIT0gMCk7Ci0JCQkJYmVzdF9yYXRlID0gYWN0dWFsX3JhdGU7CisJCQkJY2xrLT5wYXJlbnQgPSBtY2xrOworCQkJCWNsay0+cmF0ZSA9IGFjdHVhbF9yYXRlOwogCQkJCXJhdGVfZXJyID0gYWJzKGFjdHVhbF9yYXRlIC0gcmF0ZSk7CiAJCQkJZm91bmQgPSAxOwogCQkJfQpAQCAtMjk0LDIxICszNjgsMTkgQEAKIAl9CiAKIAlpZiAoIWZvdW5kKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gYmVzdF9yYXRlOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNldF9kaXZfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQl1bnNpZ25lZCBsb25nIGFjdHVhbF9yYXRlOwotCWludCBwc2VsID0gMCwgZXNlbCA9IDAsIHBkaXYgPSAwLCBkaXYgPSAwOworCWludCBlcnIsIHBzZWwgPSAwLCBlc2VsID0gMCwgcGRpdiA9IDAsIGRpdiA9IDA7CiAJdTMyIHZhbDsKIAotCWFjdHVhbF9yYXRlID0gY2FsY19jbGtfZGl2KHJhdGUsICZwc2VsLCAmZXNlbCwgJnBkaXYsICZkaXYpOwotCWlmIChhY3R1YWxfcmF0ZSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQljbGstPnJhdGUgPSBhY3R1YWxfcmF0ZTsKKwllcnIgPSBjYWxjX2Nsa19kaXYoY2xrLCByYXRlLCAmcHNlbCwgJmVzZWwsICZwZGl2LCAmZGl2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQ2xlYXIgdGhlIGVzZWwsIHBzZWwsIHBkaXYgYW5kIGRpdiBiaXRzICovCiAJdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKQEAgLTM0NCw3ICs0MTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyByYXRlOwogCWludCBpOwogCi0JcmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJcmF0ZSA9IGNsa194dGFsaS5yYXRlOwogCXJhdGUgKj0gKChjb25maWdfd29yZCA+PiAxMSkgJiAweDFmKSArIDE7CQkvKiBYMUZCRCAqLwogCXJhdGUgKj0gKChjb25maWdfd29yZCA+PiA1KSAmIDB4M2YpICsgMTsJCS8qIFgyRkJEICovCiAJZG9fZGl2KHJhdGUsIChjb25maWdfd29yZCAmIDB4MWYpICsgMSk7CQkJLyogWDJJUEQgKi8KQEAgLTM3Nyw3ICs0NDksNyBAQAogCiAJdmFsdWUgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0NMT0NLX1NFVDEpOwogCWlmICghKHZhbHVlICYgMHgwMDgwMDAwMCkpIHsJCQkvKiBQTEwxIGJ5cGFzc2VkPyAgKi8KLQkJY2xrX3BsbDEucmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCWNsa19wbGwxLnJhdGUgPSBjbGtfeHRhbGkucmF0ZTsKIAl9IGVsc2UgewogCQljbGtfcGxsMS5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7CiAJfQpAQCAtMzg4LDcgKzQ2MCw3IEBACiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMik7CiAJaWYgKCEodmFsdWUgJiAweDAwMDgwMDAwKSkgewkJCS8qIFBMTDIgYnlwYXNzZWQ/ICAqLwotCQljbGtfcGxsMi5yYXRlID0gRVA5M1hYX0VYVF9DTEtfUkFURTsKKwkJY2xrX3BsbDIucmF0ZSA9IGNsa194dGFsaS5yYXRlOwogCX0gZWxzZSBpZiAodmFsdWUgJiAweDAwMDQwMDAwKSB7CQkvKiBQTEwyIGVuYWJsZWQ/ICAqLwogCQljbGtfcGxsMi5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCBmN2ViZWQ5Li5iNDM1N2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC0yMDYsNyArMjA2LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgewogCQkJaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9CKDApKSArIGk7Ci0JCQlkZXNjID0gaXJxX2Rlc2MgKyBncGlvX2lycTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7CiAJCX0KIAl9CkBAIC01NTAsMTMgKzU0OSwxMSBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXA5M3h4X2V0aF9kZXZpY2UpOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgZXA5M3h4X2kyY19kYXRhID0gewotCS5zZGFfcGluCQk9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMCwKLQkuc2NsX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFQ0xLLAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDAsCi0JLnVkZWxheQkJCT0gMiwKLX07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFUDkzeHggaTJjIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVwOTN4eF9pMmNfZGF0YTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2kyY19kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCkBAIC01NjQsOCArNTYxLDI1IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmVwOTN4eF9pMmNfZGF0YSwKIH07CiAKLXZvaWQgX19pbml0IGVwOTN4eF9yZWdpc3Rlcl9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnVtKQordm9pZCBfX2luaXQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSAqZGF0YSwKKwkJCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pCiB7CisJLyoKKwkgKiBTZXQgdGhlIEVFUFJPTSBpbnRlcmZhY2UgcGluIGRyaXZlIHR5cGUgY29udHJvbC4KKwkgKiBEZWZpbmVzIHRoZSBkcml2ZXIgdHlwZSBmb3IgdGhlIEVFQ0xLIGFuZCBFRURBVCBwaW5zIGFzIGVpdGhlcgorCSAqIG9wZW4gZHJhaW4sIHdoaWNoIHdpbGwgcmVxdWlyZSBhbiBleHRlcm5hbCBwdWxsLXVwLCBvciBhIG5vcm1hbAorCSAqIENNT1MgZHJpdmVyLgorCSAqLworCWlmIChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zZGFfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQpCisJCXByX3dhcm5pbmcoImVwOTN4eDogc2RhICE9IEVFREFULCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCWlmIChkYXRhLT5zY2xfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zY2xfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVDTEspCisJCXByX3dhcm5pbmcoImVwOTN4eDogc2NsICE9IEVFQ0xLLCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCisJX19yYXdfd3JpdGVsKChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiA8PCAxKSB8CisJCSAgICAgKGRhdGEtPnNjbF9pc19vcGVuX2RyYWluIDw8IDApLAorCQkgICAgIEVQOTNYWF9HUElPX0VFRFJJVkUpOworCisJZXA5M3h4X2kyY19kYXRhID0gKmRhdGE7CiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnVtKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9pMmNfZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwppbmRleCA3MzE0NWFlLi5hNGE3YmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC03NiwxMyArNzgsMjYgQEAKIAkucGh5X2lkCQk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGFfaTJjX2RhdGFbXSA9IHsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVEQjkzeHggaTJjIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVkYjkzeHhfaTJjX2dwaW9fZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFREFULAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnNjbF9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSywKKwkuc2NsX2lzX29wZW5fZHJhaW4JPSAwLAorCS51ZGVsYXkJCQk9IDAsCS8qIGRlZmF1bHQgdG8gMTAwIGtIeiAqLworCS50aW1lb3V0CQk9IDAsCS8qIGRlZmF1bHQgdG8gMTAwIG1zICovCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGFfaTJjX2JvYXJkX2luZm9bXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZiksCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBlZGI5M3h4X2kyY19kYXRhW10gPSB7CitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eF9pMmNfYm9hcmRfaW5mb1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oImRzMTMzNyIsIDB4NjgpLAogCX0sCkBAIC05MiwxMiArMTA3LDE0IEBACiB7CiAJaWYgKG1hY2hpbmVfaXNfZWRiOTMwMmEoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDdhKCkgfHwKIAkgICAgbWFjaGluZV9pc19lZGI5MzE1YSgpKSB7Ci0JCWVwOTN4eF9yZWdpc3Rlcl9pMmMoZWRiOTN4eGFfaTJjX2RhdGEsCi0JCQkJQVJSQVlfU0laRShlZGI5M3h4YV9pMmNfZGF0YSkpOworCQllcDkzeHhfcmVnaXN0ZXJfaTJjKCZlZGI5M3h4X2kyY19ncGlvX2RhdGEsCisJCQkJICAgIGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvLAorCQkJCSAgICBBUlJBWV9TSVpFKGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvKSk7CiAJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2VkYjkzMDcoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMTIoKSB8fAogCQkgICBtYWNoaW5lX2lzX2VkYjkzMTUoKSkgewotCQllcDkzeHhfcmVnaXN0ZXJfaTJjKGVkYjkzeHhfaTJjX2RhdGEsCi0JCQkJQVJSQVlfU0laRShlZGI5M3h4X2kyY19kYXRhKSk7CisJCWVwOTN4eF9yZWdpc3Rlcl9pMmMoJmVkYjkzeHhfaTJjX2dwaW9fZGF0YSwKKwkJCQkgICAgZWRiOTN4eF9pMmNfYm9hcmRfaW5mbywKKwkJCQkgICAgQVJSQVlfU0laRShlZGI5M3h4X2kyY19ib2FyZF9pbmZvKSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCmluZGV4IDBmYmY4N2IuLmIxZjkzN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCkBAIC01MiwyNSArNTIsMjcgQEAKICNkZWZpbmUgRVA5M1hYX0FIQl9WSVJUX0JBU0UJCTB4ZmVmMDAwMDAKICNkZWZpbmUgRVA5M1hYX0FIQl9TSVpFCQkJMHgwMDEwMDAwMAogCisjZGVmaW5lIEVQOTNYWF9BSEJfUEhZUyh4KQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgKHgpKQogI2RlZmluZSBFUDkzWFhfQUhCX0lPTUVNKHgpCQlJT01FTShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArICh4KSkKIAogI2RlZmluZSBFUDkzWFhfQVBCX1BIWVNfQkFTRQkJMHg4MDgwMDAwMAogI2RlZmluZSBFUDkzWFhfQVBCX1ZJUlRfQkFTRQkJMHhmZWQwMDAwMAogI2RlZmluZSBFUDkzWFhfQVBCX1NJWkUJCQkweDAwMjAwMDAwCiAKKyNkZWZpbmUgRVA5M1hYX0FQQl9QSFlTKHgpCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAoeCkpCiAjZGVmaW5lIEVQOTNYWF9BUEJfSU9NRU0oeCkJCUlPTUVNKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgKHgpKQogCiAKIC8qIEFIQiBwZXJpcGhlcmFscyAqLwogI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX1BIWVNfQkFTRQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfUEhZU19CQVNFCUVQOTNYWF9BSEJfUEhZUygweDAwMDEwMDAwKQogI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMDEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9VU0JfUEhZU19CQVNFCQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDIwMDAwKQorI2RlZmluZSBFUDkzWFhfVVNCX1BIWVNfQkFTRQkJRVA5M1hYX0FIQl9QSFlTKDB4MDAwMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9VU0JfQkFTRQkJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAyMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfUkFTVEVSX1BIWVNfQkFTRQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgMHgwMDAzMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1JBU1RFUl9QSFlTX0JBU0UJCUVQOTNYWF9BSEJfUEhZUygweDAwMDMwMDAwKQogI2RlZmluZSBFUDkzWFhfUkFTVEVSX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAzMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwNDAwMDApCkBAIC0xMTIsMjEgKzExNCwxMCBAQAogCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDA0MDAwMCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fUkVHKHgpCQkoRVA5M1hYX0dQSU9fQkFTRSArICh4KSkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfVFlQRTEJCUVQOTNYWF9HUElPX1JFRygweDRjKQotI2RlZmluZSBFUDkzWFhfR1BJT19GX0lOVF9UWVBFMgkJRVA5M1hYX0dQSU9fUkVHKDB4NTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX0FDSwkJRVA5M1hYX0dQSU9fUkVHKDB4NTQpCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX0VOQUJMRQlFUDkzWFhfR1BJT19SRUcoMHg1OCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfU1RBVFVTCUVQOTNYWF9HUElPX1JFRygweDVjKQotI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9UWVBFMQkJRVA5M1hYX0dQSU9fUkVHKDB4OTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0FfSU5UX1RZUEUyCQlFUDkzWFhfR1BJT19SRUcoMHg5NCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfQUNLCQlFUDkzWFhfR1BJT19SRUcoMHg5OCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfRU5BQkxFCUVQOTNYWF9HUElPX1JFRygweDljKQogI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9TVEFUVVMJRVA5M1hYX0dQSU9fUkVHKDB4YTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1RZUEUxCQlFUDkzWFhfR1BJT19SRUcoMHhhYykKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfVFlQRTIJCUVQOTNYWF9HUElPX1JFRygweGIwKQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9BQ0sJCUVQOTNYWF9HUElPX1JFRygweGI0KQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9FTkFCTEUJRVA5M1hYX0dQSU9fUkVHKDB4YjgpCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1NUQVRVUwlFUDkzWFhfR1BJT19SRUcoMHhiYykKKyNkZWZpbmUgRVA5M1hYX0dQSU9fRUVEUklWRQkJRVA5M1hYX0dQSU9fUkVHKDB4YzgpCiAKICNkZWZpbmUgRVA5M1hYX0FBQ19CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMDgwMDAwKQogCkBAIC0xMzQsMTMgKzEyNSwxMyBAQAogCiAjZGVmaW5lIEVQOTNYWF9JUkRBX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBiMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDFfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGMwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDFfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBjMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQxX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBjMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDJfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGQwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDJfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBkMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQyX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBkMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDNfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGUwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDNfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBlMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQzX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBlMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfS0VZX01BVFJJWF9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZjAwMDApCkBAIC0xNDgsMTAgKzEzOSwxMCBAQAogI2RlZmluZSBFUDkzWFhfQURDX0JBU0UJCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAjZGVmaW5lIEVQOTNYWF9UT1VDSFNDUkVFTl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1BXTV9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAxMTAwMDApCisjZGVmaW5lIEVQOTNYWF9QV01fUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDExMDAwMCkKICNkZWZpbmUgRVA5M1hYX1BXTV9CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMTEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9SVENfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMTIwMDAwKQorI2RlZmluZSBFUDkzWFhfUlRDX1BIWVNfQkFTRQkJRVA5M1hYX0FQQl9QSFlTKDB4MDAxMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9SVENfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDEyMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDEzMDAwMCkKQEAgLTIxOCw2ICsyMDksMTcgQEAKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfQURJVgkoMTw8MTYpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tFTgkoMTw8MTUpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tESVYJKDE8PDApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHCQlFUDkzWFhfU1lTQ09OX1JFRygweDljKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19SRVZfTUFTSwkoMHhmMDAwMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfUkVWX1NISUZUCSgyOCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfU0JPT1QJKDE8PDgpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU043CSgxPDw3KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NONgkoMTw8NikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTEFTRE8JKDE8PDUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xFRURBCSgxPDw0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MRUVDTEsJKDE8PDMpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU04yCSgxPDwxKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NOMQkoMTw8MCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TV0xPQ0sJCUVQOTNYWF9TWVNDT05fUkVHKDB4YzApCiAKICNkZWZpbmUgRVA5M1hYX1dBVENIRE9HX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDE0MDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDBhMTQ5OGEuLmM5OTFiMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMTE0LDE3ICsxMTQsOSBAQAogICogICAgICAgICAgQjAuLkI3ICAoNy4uMTUpIHRvIGlycSA3Mi4uNzksIGFuZAogICogICAgICAgICAgRjAuLkY3ICgxNi4uMjQpIHRvIGlycSA4MC4uODcuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKGdwaW8gPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKQotCQlyZXR1cm4gNjQgKyBncGlvOworI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlcCisJKCgoZ3BpbykgPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKSA/ICg2NCArIChncGlvKSkgOiAtRUlOVkFMKQogCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gaXJxIC0gZ3Bpb190b19pcnEoMCk7Ci19CisjZGVmaW5lIGlycV90b19ncGlvKGlycSkJKChpcnEpIC0gZ3Bpb190b19pcnEoMCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDkyNWIxMmUuLjU1NDA2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTksNiArOSwxMiBAQAogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwMDAwMDAwMCkKICNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFMF9QSFlTX09GRlNFVCkKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4YzAwMDAwMDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19FUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQpCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweGQwMDAwMDAwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQorI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhlMDAwMDAwMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVCkKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ZjAwMDAwMDApCiAjZWxzZQogI2Vycm9yICJLY29uZmlnIGJ1ZzogTm8gRVA5M3h4IFBIWVNfT0ZGU0VUIHNldCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCAwMWEwZjA4Li40NjlmZDk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtNCw2ICs0LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgaTJjX2JvYXJkX2luZm87CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbzsKQEAgLTE2LDcgKzE3LDYgQEAKIAogdm9pZCBlcDkzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBlcDkzeHhfaW5pdF9pcnEodm9pZCk7Ci12b2lkIGVwOTN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7CiAKIC8qIEVQOTN4eCBTeXN0ZW0gQ29udHJvbGxlciBzb2Z0d2FyZSBsb2NrZWQgcmVnaXN0ZXIgd3JpdGUgKi8KIHZvaWQgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZyk7CkBAIC0zMyw3ICszMyw4IEBACiB9CiAKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX2V0aChzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhICpkYXRhLCBpbnQgY29weV9hZGRyKTsKLXZvaWQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pOwordm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhICpkYXRhLAorCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSk7CiB2b2lkIGVwOTN4eF9yZWdpc3Rlcl9mYihzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvICpkYXRhKTsKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX3B3bShpbnQgcHdtMCwgaW50IHB3bTEpOwogaW50IGVwOTN4eF9wd21fYWNxdWlyZV9ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwppbmRleCAwYTMxM2U4Li5mMzc1N2ExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwpAQCAtMiw3ICsyLDkgQEAKICAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBDb250ZWMgU3RldWVydW5nc3RlY2huaWsgJiBBdXRvbWF0aW9uIEdtYkgKLSAqICAgICAgICAgICAgICAgICAgIE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+CisgKiAgICAgICAgICAgICAgICAgICAgTWFuZnJlZCBHcnViZXIgPG0uZ3J1YmVyQHRpcm9sLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBDb250ZWMgU3RldWVydW5nc3RlY2huaWsgJiBBdXRvbWF0aW9uIEdtYkgKKyAqICAgICAgICAgICAgICAgICAgICBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTEzLDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC0yMCwxMDQgKzIzLDEyNCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAogCi1zdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBtaWNybzlfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pZAkJPSAweDFmLAotfTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNaWNybzkgTk9SIEZsYXNoCisgKgorICogTWljcm85LUhpZ2ggaGFzIHVwIHRvIDY0TUIgb2YgMzItYml0IGZsYXNoIG9uIENTMQorICogTWljcm85LU1pZCBoYXMgdXAgdG8gNjRNQiBvZiBlaXRoZXIgMzItYml0IG9yIDE2LWJpdCBmbGFzaCBvbiBDUzEKKyAqIE1pY3JvOS1MaXRlIHVzZXMgYSBzZXBlcmF0ZSBNVEQgbWFwIGRyaXZlciBmb3IgZmxhc2ggc3VwcG9ydAorICogTWljcm85LVNsaW0gaGFzIHVwIHRvIDY0TUIgb2YgZWl0aGVyIDMyLWJpdCBvciAxNi1iaXQgZmxhc2ggb24gQ1MxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG1pY3JvOV9mbGFzaF9kYXRhOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85X2luaXQodm9pZCkKLXsKLQllcDkzeHhfcmVnaXN0ZXJfZXRoKCZtaWNybzlfZXRoX2RhdGEsIDEpOwotfQotCi0vKgotICogTWljcm85LUgKLSAqLwotI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOUgKLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG1pY3JvOWhfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWljcm85aF9mbGFzaF9yZXNvdXJjZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWljcm85X2ZsYXNoX3Jlc291cmNlID0gewogCS5zdGFydAkJPSBFUDkzWFhfQ1MxX1BIWVNfQkFTRSwKIAkuZW5kCQk9IEVQOTNYWF9DUzFfUEhZU19CQVNFICsgU1pfNjRNIC0gMSwKIAkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaWNybzloX2ZsYXNoID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWljcm85X2ZsYXNoID0gewogCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbWljcm85aF9mbGFzaF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZtaWNybzlfZmxhc2hfZGF0YSwKIAl9LAogCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmbWljcm85aF9mbGFzaF9yZXNvdXJjZSwKKwkucmVzb3VyY2UJPSAmbWljcm85X2ZsYXNoX3Jlc291cmNlLAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOWhfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IF9fbWljcm85X3JlZ2lzdGVyX2ZsYXNoKHVuc2lnbmVkIGludCB3aWR0aCkKIHsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1pY3JvOWhfZmxhc2gpOworCW1pY3JvOV9mbGFzaF9kYXRhLndpZHRoID0gd2lkdGg7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1pY3JvOV9mbGFzaCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzloX2luaXRfbWFjaGluZSh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgbWljcm85X2RldGVjdF9ib290d2lkdGgodm9pZCkKK3sKKwl1MzIgdjsKKworCS8qIERldGVjdCB0aGUgYnVzIHdpZHRoIG9mIHRoZSBleHRlcm5hbCBmbGFzaCBtZW1vcnkgKi8KKwl2ID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9TWVNDRkcpOworCWlmICh2ICYgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTENTTjcpCisJCXJldHVybiA0OyAvKiAzMi1iaXQgKi8KKwllbHNlCisJCXJldHVybiAyOyAvKiAxNi1iaXQgKi8KK30KKworc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOV9yZWdpc3Rlcl9mbGFzaCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX21pY3JvOSgpKQorCQlfX21pY3JvOV9yZWdpc3Rlcl9mbGFzaCg0KTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX21pY3JvOW0oKSB8fCBtYWNoaW5lX2lzX21pY3JvOXMoKSkKKwkJX19taWNybzlfcmVnaXN0ZXJfZmxhc2gobWljcm85X2RldGVjdF9ib290d2lkdGgoKSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1pY3JvOSBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBtaWNybzlfZXRoX2RhdGEgPSB7CisJLnBoeV9pZAkJPSAweDFmLAorfTsKKworCitzdGF0aWMgdm9pZCBfX2luaXQgbWljcm85X2luaXRfbWFjaGluZSh2b2lkKQogewogCWVwOTN4eF9pbml0X2RldmljZXMoKTsKLQltaWNybzlfaW5pdCgpOwotCW1pY3JvOWhfaW5pdCgpOworCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJm1pY3JvOV9ldGhfZGF0YSwgMSk7CisJbWljcm85X3JlZ2lzdGVyX2ZsYXNoKCk7CiB9CiAKLU1BQ0hJTkVfU1RBUlQoTUlDUk85LCAiQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktSCIpCi0JLyogTWFpbnRhaW5lcjogTWFuZnJlZCBHcnViZXIgPG1hbmZyZWQuZ3J1YmVyQGNvbnRlYy5hdD4gKi8KKworI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOUgKK01BQ0hJTkVfU1RBUlQoTUlDUk85LCAiQ29udGVjIE1pY3JvOS1IaWdoIikKKwkvKiBNYWludGFpbmVyOiBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4gKi8KIAkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAogCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKIAkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBtaWNybzloX2luaXRfbWFjaGluZSwKKwkuaW5pdF9tYWNoaW5lCT0gbWljcm85X2luaXRfbWFjaGluZSwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKIAotLyoKLSAqIE1pY3JvOS1NCi0gKi8KICNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlNCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85bV9pbml0X21hY2hpbmUodm9pZCkKLXsKLQllcDkzeHhfaW5pdF9kZXZpY2VzKCk7Ci0JbWljcm85X2luaXQoKTsKLX0KLQotTUFDSElORV9TVEFSVChNSUNSTzlNLCAiQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSIpCi0JLyogTWFpbnRhaW5lcjogTWFuZnJlZCBHcnViZXIgPG1hbmZyZWQuZ3J1YmVyQGNvbnRlYy5hdD4gKi8KK01BQ0hJTkVfU1RBUlQoTUlDUk85TSwgIkNvbnRlYyBNaWNybzktTWlkIikKKwkvKiBNYWludGFpbmVyOiBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4gKi8KIAkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAogCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX0FTWU5DICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gbWljcm85bV9pbml0X21hY2hpbmUsCisJLmluaXRfbWFjaGluZQk9IG1pY3JvOV9pbml0X21hY2hpbmUsCiBNQUNISU5FX0VORAogI2VuZGlmCiAKLS8qCi0gKiBNaWNybzktTAotICovCiAjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85TAotc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOWxfaW5pdF9tYWNoaW5lKHZvaWQpCi17Ci0JZXA5M3h4X2luaXRfZGV2aWNlcygpOwotCW1pY3JvOV9pbml0KCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoTUlDUk85TCwgIkNvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUwiKQotCS8qIE1haW50YWluZXI6IE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+ICovCitNQUNISU5FX1NUQVJUKE1JQ1JPOUwsICJDb250ZWMgTWljcm85LUxpdGUiKQorCS8qIE1haW50YWluZXI6IEh1YmVydCBGZXVyc3RlaW4gPGh1YmVydC5mZXVyc3RlaW5AY29udGVjLmF0PiAqLwogCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfU1lOQyArIDB4MTAwLAogCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCi0JLmluaXRfbWFjaGluZQk9IG1pY3JvOWxfaW5pdF9tYWNoaW5lLAorCS5pbml0X21hY2hpbmUJPSBtaWNybzlfaW5pdF9tYWNoaW5lLAogTUFDSElORV9FTkQKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85UworTUFDSElORV9TVEFSVChNSUNSTzlTLCAiQ29udGVjIE1pY3JvOS1TbGltIikKKwkvKiBNYWludGFpbmVyOiBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4gKi8KKwkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX0FTWU5DICsgMHgxMDAsCisJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gbWljcm85X2luaXRfbWFjaGluZSwKK01BQ0hJTkVfRU5ECisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDJiMmU3YTEuLjQ4OTE4MjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjgsNSArMjgsNiBAQAogI2RlZmluZSBCVVNfT0ZGU0VUCVVMKDB4ODAwMDAwMDApCiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKCh4KSAtIFBBR0VfT0ZGU0VUICsgQlVTX09GRlNFVCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoKHgpIC0gQlVTX09GRlNFVCArIFBBR0VfT0ZGU0VUKQorI2RlZmluZSBfX3Bmbl90b19idXMoeCkJCSgoKHgpIDw8IFBBR0VfU0hJRlQpICsgQlVTX09GRlNFVCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwppbmRleCAyYTMxOGViLi4zZjM1MjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEva21pLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KQEAgLTM1LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKQEAgLTQwMCw3ICs0MDAsNyBAQAogCXJldHVybiBzdGF0dXMgJiA4OwogfQogCi1zdGF0aWMgc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIG1tY19kYXRhID0geworc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW1jX2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gbW1jX3N0YXR1cywKIAkuZ3Bpb193cAk9IC0xLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCmluZGV4IGYxZDcyYjIuLjE0OGQyNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KQEAgLTQ4Niw3ICs0ODcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBwY2lfYnVzICpwY2lfdjNfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCitzdHJ1Y3QgcGNpX2J1cyAqIF9faW5pdCBwY2lfdjNfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJcmV0dXJuIHBjaV9zY2FuX2J1cyhzeXMtPmJ1c25yLCAmcGNpX3YzX29wcywgc3lzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pb3AzMnguaCBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pb3AzMnguaAppbmRleCBhYmQ5ZWI0Li45NDFmMzYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvaW9wMzJ4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2lvcDMyeC5oCkBAIC0zMSw3ICszMSw1IEBACiAjZGVmaW5lIElPUDMyWF9NQVhfUkFNX1NJWkUgICAgICAgICAgICAweDQwMDAwMDAwVUwKICNkZWZpbmUgSU9QM1hYX01BWF9SQU1fU0laRSAgICAgICAgICAgIElPUDMyWF9NQVhfUkFNX1NJWkUKICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9NRU1fQkEgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgSU9QMzJYX1BDSV9NRU1fV0lORE9XX1NJWkUgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgSU9QM1hYX1BDSV9NRU1fV0lORE9XX1NJWkUgICAgIElPUDMyWF9QQ0lfTUVNX1dJTkRPV19TSVpFCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2lvcDMzeC5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2lvcDMzeC5oCmluZGV4IDI0NTY3MzEuLmE4OWMwYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9pb3AzM3guaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW9wMzN4LmgKQEAgLTM2LDggKzM2LDYgQEAKICNkZWZpbmUgSU9QMzNYX01BWF9SQU1fU0laRQkJMHg4MDAwMDAwMFVMCiAjZGVmaW5lIElPUDNYWF9NQVhfUkFNX1NJWkUJCUlPUDMzWF9NQVhfUkFNX1NJWkUKICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9NRU1fQkEJKFBIWVNfT0ZGU0VUICsgSU9QMzNYX01BWF9SQU1fU0laRSkKLSNkZWZpbmUgSU9QMzNYX1BDSV9NRU1fV0lORE9XX1NJWkUJMHgwODAwMDAwMAotI2RlZmluZSBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRQlJT1AzM1hfUENJX01FTV9XSU5ET1dfU0laRQogCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCmluZGV4IDFkYTVkMWMuLjJlNjkxNjhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2FkZHItbWFwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlzZXR1cF9jcHVfd2luKDAsIEtJUktXT09EX1BDSUVfSU9fUEhZU19CQVNFLCBLSVJLV09PRF9QQ0lFX0lPX1NJWkUsCiAJCSAgICAgIFRBUkdFVF9QQ0lFLCBBVFRSX1BDSUVfSU8sIEtJUktXT09EX1BDSUVfSU9fQlVTX0JBU0UpOwogCXNldHVwX2NwdV93aW4oMSwgS0lSS1dPT0RfUENJRV9NRU1fUEhZU19CQVNFLCBLSVJLV09PRF9QQ0lFX01FTV9TSVpFLAotCQkgICAgICBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX01FTSwgLTEpOworCQkgICAgICBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX01FTSwgS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0UpOwogCiAJLyoKIAkgKiBTZXR1cCB3aW5kb3cgZm9yIE5BTkQgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCmluZGV4IDBhY2I2MWYuLjI0MmRkMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwpAQCAtODQ1LDcgKzg0NSw3IEBACiAJcmV0dXJuIDE2NjY2NjY2NzsKIH0KIAotc3RhdGljIHZvaWQga2lya3dvb2RfdGltZXJfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGtpcmt3b29kX3RpbWVyX2luaXQodm9pZCkKIHsKIAlraXJrd29vZF90Y2xrID0ga2lya3dvb2RfZmluZF90Y2xrKCk7CiAJb3Jpb25fdGltZV9pbml0KElSUV9LSVJLV09PRF9CUklER0UsIGtpcmt3b29kX3RjbGspOwpAQCAtOTE1LDYgKzkxNSwxNCBAQAogCWtpcmt3b29kX3VhcnQwX2RhdGFbMF0udWFydGNsayA9IGtpcmt3b29kX3RjbGs7CiAJa2lya3dvb2RfdWFydDFfZGF0YVswXS51YXJ0Y2xrID0ga2lya3dvb2RfdGNsazsKIAorCS8qCisJICogRGlzYWJsZSBwcm9wYWdhdGlvbiBvZiBtYnVzIGVycm9ycyB0byB0aGUgQ1BVIGxvY2FsIGJ1cywKKwkgKiBhcyB0aGlzIGNhdXNlcyBtYnVzIGVycm9ycyAod2hpY2ggY2FuIG9jY3VyIGZvciBleGFtcGxlCisJICogZm9yIFBDSSBhYm9ydHMpIHRvIHRocm93IENQVSBhYm9ydHMsIHdoaWNoIHdlJ3JlIG5vdCBzZXQKKwkgKiB1cCB0byBkZWFsIHdpdGguCisJICovCisJd3JpdGVsKHJlYWRsKENQVV9DT05GSUcpICYgfkNQVV9DT05GSUdfRVJST1JfUFJPUCwgQ1BVX0NPTkZJRyk7CisKIAlraXJrd29vZF9zZXR1cF9jcHVfbWJ1cygpOwogCiAjaWZkZWYgQ09ORklHX0NBQ0hFX0ZFUk9DRU9OX0wyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaAppbmRleCA5ZTgwZDkyLi40MThmNTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKQEAgLTEzLDYgKzEzLDkgQEAKIAogI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KIAorI2RlZmluZSBDUFVfQ09ORklHCQkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDEwMCkKKyNkZWZpbmUgQ1BVX0NPTkZJR19FUlJPUl9QUk9QCTB4MDAwMDAwMDQKKwogI2RlZmluZSBDUFVfQ09OVFJPTAkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAxMDQpCiAjZGVmaW5lIENQVV9SRVNFVAkJMHgwMDAwMDAwMgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCBhNjQzYTg0Li40NGU4YmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKl9faW8odW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiAodm9pZCBfX2lvbWVtICopKChhZGRyIC0gS0lSS1dPT0RfUENJRV9JT19QSFlTX0JBU0UpCisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoKGFkZHIgLSBLSVJLV09PRF9QQ0lFX0lPX0JVU19CQVNFKQogCQkJCQkrIEtJUktXT09EX1BDSUVfSU9fVklSVF9CQVNFKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKaW5kZXggNTRjMTMyNy4uYTE1Y2YwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lIEtJUktXT09EX1JFR1NfU0laRQkJU1pfMU0KIAogI2RlZmluZSBLSVJLV09PRF9QQ0lFX01FTV9QSFlTX0JBU0UJMHhlMDAwMDAwMAorI2RlZmluZSBLSVJLV09PRF9QQ0lFX01FTV9CVVNfQkFTRQkweGUwMDAwMDAwCiAjZGVmaW5lIEtJUktXT09EX1BDSUVfTUVNX1NJWkUJCVNaXzEyOE0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYwppbmRleCA5NDdkZmI4Li43NzYxN2M3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZF9iYXNlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jCkBAIC03MCw4ICs3MCwyMCBAQAogCWtpcmt3b29kX2dlMDBfaW5pdCgmb3BlbnJkX2Jhc2VfZ2UwMF9kYXRhKTsKIAlraXJrd29vZF9zYXRhX2luaXQoJm9wZW5yZF9iYXNlX3NhdGFfZGF0YSk7CiAJa2lya3dvb2Rfc2Rpb19pbml0KCZvcGVucmRfYmFzZV9tdnNkaW9fZGF0YSk7CisKKwlraXJrd29vZF9pMmNfaW5pdCgpOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBvcGVucmRfYmFzZV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX29wZW5yZF9iYXNlKCkpCisJCWtpcmt3b29kX3BjaWVfaW5pdCgpOworCisJcmV0dXJuIDA7CisgfQorc3Vic3lzX2luaXRjYWxsKG9wZW5yZF9iYXNlX3BjaV9pbml0KTsKKworCiBNQUNISU5FX1NUQVJUKE9QRU5SRF9CQVNFLCAiTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZCIpCiAJLyogTWFpbnRhaW5lcjogRGhhdmFsIFZhc2EgPGRoYXZhbC52YXNhQGVpbmZvY2hpcHMuY29tPiAqLwogCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3BjaWUuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCmluZGV4IGQ5MGI5YWEuLmE2MDRiMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCkBAIC05Myw3ICs5Myw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQga2lya3dvb2RfcGNpZV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3N0YXRpYyBpbnQgX19pbml0IGtpcmt3b29kX3BjaWVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJZXh0ZXJuIHVuc2lnbmVkIGludCBraXJrd29vZF9jbGtfY3RybDsKQEAgLTExNSw3ICsxMTUsNyBAQAogCSAqLwogCXJlc1swXS5uYW1lID0gIlBDSWUgSS9PIFNwYWNlIjsKIAlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotCXJlc1swXS5zdGFydCA9IEtJUktXT09EX1BDSUVfSU9fUEhZU19CQVNFOworCXJlc1swXS5zdGFydCA9IEtJUktXT09EX1BDSUVfSU9fQlVTX0JBU0U7CiAJcmVzWzBdLmVuZCA9IHJlc1swXS5zdGFydCArIEtJUktXT09EX1BDSUVfSU9fU0laRSAtIDE7CiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSkpCiAJCXBhbmljKCJSZXF1ZXN0IFBDSWUgSU8gcmVzb3VyY2UgZmFpbGVkXG4iKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogCSAqLwogCXJlc1sxXS5uYW1lID0gIlBDSWUgTWVtb3J5IFNwYWNlIjsKIAlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKLQlyZXNbMV0uc3RhcnQgPSBLSVJLV09PRF9QQ0lFX01FTV9QSFlTX0JBU0U7CisJcmVzWzFdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0U7CiAJcmVzWzFdLmVuZCA9IHJlc1sxXS5zdGFydCArIEtJUktXT09EX1BDSUVfTUVNX1NJWkUgLSAxOwogCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSkpCiAJCXBhbmljKCJSZXF1ZXN0IFBDSWUgTWVtb3J5IHJlc291cmNlIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvcmVncy1zd2l0Y2guaCBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCmluZGV4IDU2ZDEyZTguLjk3ZThhY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIEtTODY5NV9TRUMxCQkoMHgwNCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAxICovCiAjZGVmaW5lIEtTODY5NV9TRUMyCQkoMHgwOCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAyICovCiAKLSNkZWZpbmUgS1M4Njk1X1AoeClfQyh6KQkoMHhjMCArICgoKHgpLTEpKjMgKyAoKHopLTEpKSo0KQkvKiBQb3J0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEtTODY5NV9TRVBYQ1ooeCx6KQkoMHgwYyArICgoKHgpLTEpKjMgKyAoKHopLTEpKSo0KQkvKiBQb3J0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgS1M4Njk1X1NFUDEyQU4JCSgweDQ4KQkJLyogUG9ydCAxICYgMiBBdXRvLU5lZ290aWF0aW9uICovCiAjZGVmaW5lIEtTODY5NV9TRVAzNEFOCQkoMHg0YykJCS8qIFBvcnQgMyAmIDQgQXV0by1OZWdvdGlhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTEwLmgKaW5kZXggYmYxMTg5Zi4uN2U4YTgwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTkxMC5oCkBAIC0xNjAsNyArMTYwLDcgQEAKICNkZWZpbmUgTU1DMV9XUF9NTUMxX1dQCQlNRlBfQ0ZHX0RSVihNTUMxX1dQLCBBRjAsIE1FRElVTSkKIAogLyogUFdNICovCi0jZGVmaW5lIEdQSU8yNyBQV00zIEFGMgkJTUZQX0NGRyhHUElPMjcsIEFGMikKKyNkZWZpbmUgR1BJTzI3X1BXTTNfQUYyCQlNRlBfQ0ZHKEdQSU8yNywgQUYyKQogI2RlZmluZSBHUElPNTFfUFdNMl9PVVQJCU1GUF9DRkcoR1BJTzUxLCBBRjIpCiAjZGVmaW5lIEdQSU8xMTdfUFdNMV9PVVQJTUZQX0NGRyhHUElPMTE3LCBBRjIpCiAjZGVmaW5lIEdQSU8xMThfUFdNMl9PVVQJTUZQX0NGRyhHUElPMTE4LCBBRjIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKaW5kZXggMWIyMmU0YS4uMDg0NjVlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYwpAQCAtODQ1LDYgKzg0NSw4IEBACiAJfSBlbHNlIGlmIChkZXYgPT0gTVY3ODEwMF9ERVZfSUQpIHsKIAkJaWYgKHJldiA9PSBNVjc4MTAwX1JFVl9BMCkKIAkJCXJldHVybiAiTVY3ODEwMC1BMCI7CisJCWVsc2UgaWYgKHJldiA9PSBNVjc4MTAwX1JFVl9BMSkKKwkJCXJldHVybiAiTVY3ODEwMC1BMSI7CiAJCWVsc2UKIAkJCXJldHVybiAiTVY3ODEwMC1SZXYtVW5zdXBwb3J0ZWQiOwogCX0gZWxzZSBpZiAoZGV2ID09IE1WNzgyMDBfREVWX0lEKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL212Nzh4eDAuaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCmluZGV4IGQ3MTViOTIuLjc4OGJkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCkBAIC0xMTIsNiArMTEyLDcgQEAKIAogI2RlZmluZSBNVjc4MTAwX0RFVl9JRAkJMHg3ODEwCiAjZGVmaW5lIE1WNzgxMDBfUkVWX0EwCQkxCisjZGVmaW5lIE1WNzgxMDBfUkVWX0ExCQkyCiAKICNkZWZpbmUgTVY3ODIwMF9ERVZfSUQJCTB4NzgyMAogI2RlZmluZSBNVjc4MjAwX1JFVl9BMAkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKaW5kZXggNDA4OTk1MS4uZmY1ZTMzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCkBAIC02MzgsOSArNjM4LDkgQEAKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMCIsIE5VTEwsIHNkaGMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMSIsIE5VTEwsIHNkaGMyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMiIsIE5VTEwsIHNkaGMzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkxIiwgY3NwaTFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTIiLCBjc3BpMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMyIsIGNzcGkzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMSIsIE5VTEwsIGNzcGkyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMiIsIE5VTEwsIGNzcGkzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1mYi4wIiwgTlVMTCwgbGNkY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc2kiLCBjc2lfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYl9jbGspCkBAIC02NjUsNyArNjY1LDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNhaGFyYTIiLCBzYWhhcmEyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc3RpY2siLCBtc3RpY2tfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAid2RvZyIsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncGlvIiwgZ3Bpb19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYwppbmRleCBlZTY1ZGRhLi45MDZkNTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYwpAQCAtMjMsNiArMjMsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTM1LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCkBAIC03OCw4ICs4Myw2IEBACiAJUEM2X1BGX0kyQzJfU0NMLAogCS8qIFNQSTEgKi8KIAlQRDI1X1BGX0NTUEkxX1JEWSwKLQlQRDI3X1BGX0NTUEkxX1NTMSwKLQlQRDI4X1BGX0NTUEkxX1NTMCwKIAlQRDI5X1BGX0NTUEkxX1NDTEssCiAJUEQzMF9QRl9DU1BJMV9NSVNPLAogCVBEMzFfUEZfQ1NQSTFfTU9TSSwKQEAgLTE5Niw2ICsxOTksODYgQEAKIAl9CiB9OwogCitzdGF0aWMgaW50IHBjbTAzOF9zcGlfY3NbXSA9IHtHUElPX1BPUlREICsgMjh9OworCitzdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHBjbTAzOF9zcGlfMF9kYXRhID0geworCS5jaGlwc2VsZWN0ID0gcGNtMDM4X3NwaV9jcywKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHBjbTAzOF9zcGlfY3MpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkaGMxX2NvbnN1bWVyc1tdID0geworCXsKKwkJLmRldgk9ICZteGNfc2RoY19kZXZpY2UxLmRldiwKKwkJLnN1cHBseQk9ICJzZGhjX3ZjYyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZGhjMV9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDMwMDAwMDAsCisJCS5tYXhfdVYgPSAzNDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCVJFR1VMQVRPUl9NT0RFX0ZBU1QsCisJCS5hbHdheXNfb24gPSAwLAorCQkuYm9vdF9vbiA9IDAsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShzZGhjMV9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHNkaGMxX2NvbnN1bWVycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBjYW1fY29uc3VtZXJzW10gPSB7CisJeworCQkuZGV2CT0gTlVMTCwKKwkJLnN1cHBseQk9ICJpbXhfY2FtX3ZjYyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBjYW1fZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYgPSAzMDAwMDAwLAorCQkubWF4X3VWID0gMzQwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8CisJCQlSRUdVTEFUT1JfTU9ERV9GQVNULAorCQkuYWx3YXlzX29uID0gMCwKKwkJLmJvb3Rfb24gPSAwLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoY2FtX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gY2FtX2NvbnN1bWVycywKK307CisKK3N0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0X2RhdGEgcGNtMDM4X3JlZ3VsYXRvcnNbXSA9IHsKKwl7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9WQ0FNLAorCQkuaW5pdF9kYXRhID0gJmNhbV9kYXRhLAorCX0sIHsKKwkJLmlkID0gTUMxMzc4M19SRUdVX1ZNTUMxLAorCQkuaW5pdF9kYXRhID0gJnNkaGMxX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhIHBjbTAzOF9wbWljID0geworCS5yZWd1bGF0b3JzID0gcGNtMDM4X3JlZ3VsYXRvcnMsCisJLm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShwY20wMzhfcmVndWxhdG9ycyksCisJLmZsYWdzID0gTUMxMzc4M19VU0VfQURDIHwgTUMxMzc4M19VU0VfUkVHVUxBVE9SIHwKKwkJIE1DMTM3ODNfVVNFX1RPVUNIU0NSRUVOLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY20wMzhfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gIm1jMTM3ODMiLAorCQkuaXJxID0gSVJRX0dQSU9CKDIzKSwKKwkJLm1heF9zcGVlZF9oeiA9IDMwMDAwMCwKKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAwLAorCQkucGxhdGZvcm1fZGF0YSA9ICZwY20wMzhfcG1pYywKKwkJLm1vZGUgPSBTUElfQ1NfSElHSCwKKwl9Cit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM4X2luaXQodm9pZCkKIHsKIAlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHBjbTAzOF9waW5zLCBBUlJBWV9TSVpFKHBjbTAzOF9waW5zKSwKQEAgLTIxOSw2ICszMDIsMTUgQEAKIAkvKiBQRTE4IGZvciB1c2VyLUxFRCBENDAgKi8KIAlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCAxOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKIAorCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJLyogTUMxMzc4MyBJUlEgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCAyMyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UwLCAmcGNtMDM4X3NwaV8wX2RhdGEpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBjbTAzOF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHBjbTAzOF9zcGlfYm9hcmRfaW5mbykpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKICNpZmRlZiBDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKaW5kZXggYzI2MWY1OS4uM2NiN2Y0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYwpAQCAtMzksNyArMzksNiBAQAogCVBCN19QRl9TRDJfRDMsCiAJUEI4X1BGX1NEMl9DTUQsCiAJUEI5X1BGX1NEMl9DTEssCi0JR1BJT19QT1JUQyB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19JTiwgLyogY2FyZCBkZXRlY3QgKi8KIAkvKiBkaXNwbGF5ICovCiAJUEE1X1BGX0xTQ0xLLAogCVBBNl9QRl9MRDAsCkBAIC0yMjgsNiArMjI3LDcgQEAKIAkJCSJQQ005NzAiKTsKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19mYl9kZXZpY2UsICZwY20wMzhfZmJfZGF0YSk7CisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoY19wZGF0YSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205NzBfc2phMTAwMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwppbmRleCBlYjEyZGUxLi42MzUxMWRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKQEAgLTEsNCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKaW5kZXggOTJhYTRmZC4uZDIzYWU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIsIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTIzLDE5ICs0MSwxMiBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19pbml0KHZvaWQpCiB7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgTlVMTCk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmbmFuZF9ib2FyZF9pbmZvKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka190aW1lcl9pbml0KHZvaWQpCiB7CiAJbXgyNV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwppbmRleCBmZTVjNDIxLi5jNTk1MjYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYm90Z19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGNfd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWF4IiwgbWF4X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFkbXV4IiwgYWRtdXhfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2NsaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCmluZGV4IDA2YmQ2MTguLmIyYTNiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwpAQCAtNTMwLDcgKzUzMCw3IEBACiAJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQiLCBncHRfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0MV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDJfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCmluZGV4IDhhNTc3ZjMuLmU2YWJlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogICogU1BJIG1hc3RlciBjb250cm9sbGVyCiAgKiAzIGNoYW5uZWxzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3NwaV8wX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpXzBfcmVzb3VyY2VzW10gPSB7CiAJewogCSAgICAgICAuc3RhcnQgPSBDU1BJMV9CQVNFX0FERFIsCiAJICAgICAgIC5lbmQgPSBDU1BJMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCkBAIC00NzEsNyArNDcxLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3BpXzFfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfMV9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydCA9IENTUEkyX0JBU0VfQUREUiwKIAkJLmVuZCA9IENTUEkyX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zcGlfMl9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV8yX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ID0gQ1NQSTNfQkFTRV9BRERSLAogCQkuZW5kID0gQ1NQSTNfQkFTRV9BRERSICsgU1pfNEsgLSAxLApAQCAtNDk1LDI1ICs0OTUsMjUgQEAKIAl9LAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTAgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMCA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzBfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTEgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMSA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAxLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzFfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTIgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMiA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzJfcmVzb3VyY2VzLAogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMzUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAppbmRleCA3OWYyYmU0Li5hYjg3NDE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCkBAIC0yMCw3ICsyMCw3IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcm5nYV9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTE7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCmluZGV4IGFkNWExMTIuLmJlZGY1YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbW0uYwpAQCAtODEsNiArODEsNyBAQAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQogdm9pZCBfX2luaXQgbXgzNV9tYXBfaW8odm9pZCkKIHsKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgzNSk7CkBAIC04OSw2ICs5MCw3IEBACiAKIAlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKIH0KKyNlbmRpZgogCiB2b2lkIF9faW5pdCBteDMxX2luaXRfaXJxKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvY2xvY2suYwppbmRleCA0NGVkMjBkLi5jZjgxY2JjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2Nsb2NrLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjbGtfZGVidWdmc19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2xrX2RlYnVnZnNfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNsa19kZWJ1Z2ZzX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4gPSBjbGtfZGVidWdmc19vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCmluZGV4IDQyOTIwZjkuLjhhZDVjYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwpAQCAtMjE5LDYgKzIxOSwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgYW1zX2RlbHRhX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCiAJaW90YWJsZV9pbml0KGFtc19kZWx0YV9pb19kZXNjLCBBUlJBWV9TSVpFKGFtc19kZWx0YV9pb19kZXNjKSk7CiAKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGFtc19kZWx0YV9jb25maWc7CkBAIC0yMzEsNiArMjM1LDggQEAKIAogCW9tYXBfdXNiX2luaXQoJmFtc19kZWx0YV91c2JfY29uZmlnKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhhbXNfZGVsdGFfZGV2aWNlcywgQVJSQVlfU0laRShhbXNfZGVsdGFfZGV2aWNlcykpOworCisJb21hcF93cml0ZXcob21hcF9yZWFkdyhBUk1fUlNUQ1QxKSB8IDB4MDAwNCwgQVJNX1JTVENUMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgYW1zX2RlbHRhX21vZGVtX3BvcnRzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IGZiNDcyMzkuLjZjOGE0MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCkBAIC02NCw2ICs2NCwxNCBAQAogewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCQlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAkJb21hcF91c2JfaW5pdCgmZ2VuZXJpYzE1MTBfdXNiX2NvbmZpZyk7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCBjYzJhYmJiLi5jZDZjMzk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTM3Niw2ICszNzYsMjYgQEAKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQl1bnNpZ25lZCBjaGFyIHJlZzsKKworCQkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCisJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTFfRU47CisJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwkJdWRlbGF5KDEwKTsKKworCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00yX0VOOworCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXVkZWxheSgxMCk7CisKIAkJcGxhdGZvcm1fYWRkX2RldmljZXMoaW5ub3ZhdG9yMTUxMF9kZXZpY2VzLCBBUlJBWV9TSVpFKGlubm92YXRvcjE1MTBfZGV2aWNlcykpOwogCQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhpbm5vdmF0b3IxNTEwX2JvYXJkaW5mbywKIAkJCQlBUlJBWV9TSVpFKGlubm92YXRvcjE1MTBfYm9hcmRpbmZvKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwppbmRleCA5MGRkMDQzLi40ZGUyNTg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKQEAgLTM0Miw2ICszNDIsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGFsbXRlX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJb21hcF9ib2FyZF9jb25maWcgPSBwYWxtdGVfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHBhbG10ZV9jb25maWcpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYwppbmRleCA4MjU2MTM5Li5kOTcyY2Y5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKQEAgLTI4OSw2ICsyODksMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGFsbXR0X2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJb21hcF9tcHVfd2R0X21vZGUoMCk7CiAKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHBhbG10dF9jb25maWc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCmluZGV4IDgxYjZiZGUuLjk4NmJkNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCkBAIC0zMDcsNiArMzA3LDE0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQKIG9tYXBfcGFsbXo3MV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCXBhbG16NzFfZ3Bpb19zZXR1cCgxKTsKIAlvbWFwX21wdV93ZHRfbW9kZSgwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKaW5kZXggMDJjODVjYS4uMDU2YWU2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCkBAIC0zNzcsNiArMzc3LDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3N4MV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHN4MV9kZXZpY2VzLCBBUlJBWV9TSVpFKHN4MV9kZXZpY2VzKSk7CiAKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHN4MV9jb25maWc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwppbmRleCBjMDZlN2E1Li4wN2IwNzUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKQEAgLTE1Miw2ICsxNTIsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHZvaWNlYmx1ZV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCS8qIFdhdGNoZG9nICovCiAJZ3Bpb19yZXF1ZXN0KDAsICJXYXRjaGRvZyIpOwogCS8qIHNtYzkxeCByZXNldCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCmluZGV4IDRlZjI2ZmEuLmU1ZGNkZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAl7IC5qdGFnX2lkID0gMHhiNTc0LCAuZGllX3JldiA9IDB4MiwgLm9tYXBfaWQgPSAweDAzMzEwMzE1LCAudHlwZSA9IDB4MDMxMDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweDM1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgwNzMwMDEwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjU1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDA3MzAwMzAwfSwKLQl7IC5qdGFnX2lkID0gMHhiNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwNTAwLCAudHlwZSA9IDB4MDg1MDAwMDB9LAorCXsgLmp0YWdfaWQgPSAweGI2MmMsIC5kaWVfcmV2ID0gMHgxLCAub21hcF9pZCA9IDB4MDMzMjA1MDAsIC50eXBlID0gMHgwODUwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjQ3MCwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMxMDEwMCwgLnR5cGUgPSAweDE1MTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNTc2LCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MTYxMDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgyLCAub21hcF9pZCA9IDB4MDMzMjAxMDAsIC50eXBlID0gMHgxNjExMDAwMH0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCBkNDk2ZTUwLi5kMjM5NzliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKQEAgLTEzMSw4ICsxMzEsNiBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBPTUFQX01BWF9OUl9QT1JUUzsgaSsrKSB7Ci0JCXVuc2lnbmVkIGNoYXIgcmVnOwotCiAJCXN3aXRjaCAoaSkgewogCQljYXNlIDA6CiAJCQl1YXJ0MV9jayA9IGNsa19nZXQoTlVMTCwgInVhcnQxX2NrIik7CkBAIC0xNDMsMTYgKzE0MSw2IEBACiAJCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQkJCQljbGtfc2V0X3JhdGUodWFydDFfY2ssIDEyMDAwMDAwKTsKIAkJCX0KLQkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7Ci0JCQkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkgewotCQkJCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7Ci0JCQkJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00xX0VOOwotCQkJCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7Ci0JCQkJCXVkZWxheSgxMCk7Ci0JCQkJfQotCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgMToKIAkJCXVhcnQyX2NrID0gY2xrX2dldChOVUxMLCAidWFydDJfY2siKTsKQEAgLTE2NSwxNiArMTUzLDYgQEAKIAkJCQllbHNlCiAJCQkJCWNsa19zZXRfcmF0ZSh1YXJ0Ml9jaywgNDgwMDAwMDApOwogCQkJfQotCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKLQkJCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7Ci0JCQkJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTJfRU47Ci0JCQkJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQl9Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSAyOgogCQkJdWFydDNfY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0M19jayIpOwpAQCAtMTg1LDEwICsxNjMsNiBAQAogCQkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKIAkJCQkJY2xrX3NldF9yYXRlKHVhcnQzX2NrLCAxMjAwMDAwMCk7CiAJCQl9Ci0JCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOwotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7Ci0JCQl9CiAJCQlicmVhazsKIAkJfQogCQlvbWFwX3NlcmlhbF9yZXNldCgmc2VyaWFsX3BsYXRmb3JtX2RhdGFbaV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IDc1YjFjN2UuLmFhZDE5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTczLDkgKzczLDIxIEBACiAJYm9vbCAiT01BUCAzNDMwIFNEUCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAogCitjb25maWcgTUFDSF9OT0tJQV9OODAwCisgICAgICAgYm9vbAorCitjb25maWcgTUFDSF9OT0tJQV9OODEwCisgICAgICAgYm9vbAorCitjb25maWcgTUFDSF9OT0tJQV9OODEwX1dJTUFYCisgICAgICAgYm9vbAorCiBjb25maWcgTUFDSF9OT0tJQV9OOFgwCiAJYm9vbCAiTm9raWEgTjgwMC9OODEwIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMjQyMAorCXNlbGVjdCBNQUNIX05PS0lBX044MDAKKwlzZWxlY3QgTUFDSF9OT0tJQV9OODEwCisJc2VsZWN0IE1BQ0hfTk9LSUFfTjgxMF9XSU1BWAogCiBjb25maWcgTUFDSF9OT0tJQV9SWDUxCiAJYm9vbCAiTm9raWEgUlgtNTEgYm9hcmQiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCmluZGV4IGJkNTdlYzcuLjBhY2I1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgpAQCAtMzgsNyArMzksNiBAQAogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgogCiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMtc21jOTF4Lmg+CiAKICNpbmNsdWRlICJzZHJhbS1xaW1vbmRhLWh5YjE4bTUxMjE2MGFmLTYuaCIKQEAgLTU0LDcgKzU0LDcgQEAKIAogI2RlZmluZSBUV0w0MDMwX01TRUNVUkVfR1BJTyAyMgogCi1zdGF0aWMgaW50IHNkcDM0MzBfa2V5bWFwW10gPSB7CitzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfTEVGVCksCiAJS0VZKDAsIDEsIEtFWV9SSUdIVCksCiAJS0VZKDAsIDIsIEtFWV9BKSwKQEAgLTg4LDExICs4OCwxNSBAQAogCTAKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHNkcDM0MzBfa3BfZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJPSAmYm9hcmRfbWFwX2RhdGEsCiAJLnJvd3MJCT0gNSwKIAkuY29scwkJPSA2LAotCS5rZXltYXAJCT0gc2RwMzQzMF9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKHNkcDM0MzBfa2V5bWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCmluZGV4IGViMzdjNDAuLjYwOWE1YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCkBAIC01OCw2ICs1OCw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfaW5pdF9pcnEodm9pZCkKIHsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDQ0MzBfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDQ0MzBfY29uZmlnKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKICNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKIAlvbWFwMl9ncF9jbG9ja2V2ZW50X3NldF9ncHRpbWVyKDEpOwpAQCAtNzAsOCArNzIsNiBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfNDQzMHNkcF9pbml0KHZvaWQpCiB7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoc2RwNDQzMF9kZXZpY2VzLCBBUlJBWV9TSVpFKHNkcDQ0MzBfZGV2aWNlcykpOwotCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwNDQzMF9jb25maWc7Ci0Jb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwNDQzMF9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKaW5kZXggZWM2ODU0Yy4uZDU3ZWMyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTQxLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxtYWNoL3VzYi5oPgotI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCkBAIC04MCw3ICs4MCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgbGRwX3R3bDQwMzBfa2V5bWFwW10gPSB7CitzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfMSksCiAJS0VZKDEsIDAsIEtFWV8yKSwKIAlLRVkoMiwgMCwgS0VZXzMpLApAQCAtMTAxLDExICsxMDEsMTUgQEAKIAkwCiB9OwogCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBsZHBfa3BfdHdsNDAzMF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA2LAogCS5jb2xzCQk9IDYsCi0JLmtleW1hcAkJPSBsZHBfdHdsNDAzMF9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKGxkcF90d2w0MDMwX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IDUwMGM5OTUuLjA4YjA4MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTEzOSw4ICsxMzksMTMgQEAKIHN0YXRpYyBpbnQgYmVhZ2xlX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7CisJaWYgKHN5c3RlbV9yZXYgPj0gMHgyMCAmJiBzeXN0ZW1fcmV2IDw9IDB4MzQzMDEwMDApIHsKKwkJb21hcF9jZmdfcmVnKEFHOV8zNFhYX0dQSU8yMyk7CisJCW1tY1swXS5ncGlvX3dwID0gMjM7CisJfSBlbHNlIHsKKwkJb21hcF9jZmdfcmVnKEFIOF8zNFhYX0dQSU8yOSk7CisJfQogCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLwotCW9tYXBfY2ZnX3JlZyhBSDhfMzRYWF9HUElPMjkpOwogCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CiAJdHdsNDAzMF9tbWNfaW5pdChtbWMpOwogCkBAIC0xNTcsNyArMTYyLDcgQEAKIAogCS8qIFRXTDQwMzBfR1BJT19NQVggKyAwID09IGxlZEEsIEVIQ0kgbkVOX1VTQl9QV1IgKG91dCwgYWN0aXZlIGxvdykgKi8KIAlncGlvX3JlcXVlc3QoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsICJuRU5fVVNCX1BXUiIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvICsgVFdMNDAzMF9HUElPX01BWCwgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLCAwKTsKIAogCS8qIFRXTDQwMzBfR1BJT19NQVggKyAxID09IGxlZEIsIFBNVV9TVEFUIChvdXQsIGFjdGl2ZSBsb3cgTEVEKSAqLwogCWdwaW9fbGVkc1syXS5ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCmluZGV4IGQ1MGI5YmUuLjRjNGQ3ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgpAQCAtMzcsNyArMzgsNiBAQAogI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KIAogI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCkBAIC0xNTksNyArMTU5LDcgQEAKIAkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAogfTsKIAotc3RhdGljIGludCBvbWFwM2V2bV9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9MRUZUKSwKIAlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKIAlLRVkoMCwgMiwgS0VZX0EpLApAQCAtMTc4LDExICsxNzgsMTUgQEAKIAlLRVkoMywgMywgS0VZX1ApCiB9OwogCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBvbWFwM2V2bV9rcF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA0LAogCS5jb2xzCQk9IDQsCi0JLmtleW1hcAkJPSBvbWFwM2V2bV9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKG9tYXAzZXZtX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKaW5kZXggYjQzZjZlMy4uNzUxOWVkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzksNyArNDAsNiBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKQEAgLTEzMyw1OCArMTMzLDYyIEBACiAJb21hcF9zZXRfZ3Bpb19kZWJvdW5jZV90aW1lKDMyICogNSwgR1BJT19ERUJPVU5DRV9USU1FKTsKIH0KIAotc3RhdGljIGludCBwYW5kb3JhX2tleXBhZF9tYXBbXSA9IHsKLQkvKiBjb2wsIHJvdywgY29kZSAqLworc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKKwkvKiByb3csIGNvbCwgY29kZSAqLwogCUtFWSgwLCAwLCBLRVlfOSksCi0JS0VZKDAsIDEsIEtFWV8wKSwKLQlLRVkoMCwgMiwgS0VZX0JBQ0tTUEFDRSksCi0JS0VZKDAsIDMsIEtFWV9PKSwKLQlLRVkoMCwgNCwgS0VZX1ApLAotCUtFWSgwLCA1LCBLRVlfSyksCi0JS0VZKDAsIDYsIEtFWV9MKSwKLQlLRVkoMCwgNywgS0VZX0VOVEVSKSwKLQlLRVkoMSwgMCwgS0VZXzgpLAorCUtFWSgwLCAxLCBLRVlfOCksCisJS0VZKDAsIDIsIEtFWV9JKSwKKwlLRVkoMCwgMywgS0VZX0opLAorCUtFWSgwLCA0LCBLRVlfTiksCisJS0VZKDAsIDUsIEtFWV9NKSwKKwlLRVkoMSwgMCwgS0VZXzApLAogCUtFWSgxLCAxLCBLRVlfNyksCi0JS0VZKDEsIDIsIEtFWV82KSwKLQlLRVkoMSwgMywgS0VZXzUpLAotCUtFWSgxLCA0LCBLRVlfNCksCi0JS0VZKDEsIDUsIEtFWV8zKSwKLQlLRVkoMSwgNiwgS0VZXzIpLAotCUtFWSgxLCA3LCBLRVlfMSksCi0JS0VZKDIsIDAsIEtFWV9JKSwKLQlLRVkoMiwgMSwgS0VZX1UpLAorCUtFWSgxLCAyLCBLRVlfVSksCisJS0VZKDEsIDMsIEtFWV9IKSwKKwlLRVkoMSwgNCwgS0VZX0IpLAorCUtFWSgxLCA1LCBLRVlfU1BBQ0UpLAorCUtFWSgyLCAwLCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoMiwgMSwgS0VZXzYpLAogCUtFWSgyLCAyLCBLRVlfWSksCi0JS0VZKDIsIDMsIEtFWV9UKSwKLQlLRVkoMiwgNCwgS0VZX1IpLAotCUtFWSgyLCA1LCBLRVlfRSksCi0JS0VZKDIsIDYsIEtFWV9XKSwKLQlLRVkoMiwgNywgS0VZX1EpLAotCUtFWSgzLCAwLCBLRVlfSiksCi0JS0VZKDMsIDEsIEtFWV9IKSwKLQlLRVkoMywgMiwgS0VZX0cpLAorCUtFWSgyLCAzLCBLRVlfRyksCisJS0VZKDIsIDQsIEtFWV9WKSwKKwlLRVkoMiwgNSwgS0VZX0ZOKSwKKwlLRVkoMywgMCwgS0VZX08pLAorCUtFWSgzLCAxLCBLRVlfNSksCisJS0VZKDMsIDIsIEtFWV9UKSwKIAlLRVkoMywgMywgS0VZX0YpLAotCUtFWSgzLCA0LCBLRVlfRCksCi0JS0VZKDMsIDUsIEtFWV9TKSwKLQlLRVkoMywgNiwgS0VZX0EpLAotCUtFWSgzLCA3LCBLRVlfTEVGVFNISUZUKSwKLQlLRVkoNCwgMCwgS0VZX04pLAotCUtFWSg0LCAxLCBLRVlfQiksCi0JS0VZKDQsIDIsIEtFWV9WKSwKLQlLRVkoNCwgMywgS0VZX0MpLAorCUtFWSgzLCA0LCBLRVlfQyksCisJS0VZKDQsIDAsIEtFWV9QKSwKKwlLRVkoNCwgMSwgS0VZXzQpLAorCUtFWSg0LCAyLCBLRVlfUiksCisJS0VZKDQsIDMsIEtFWV9EKSwKIAlLRVkoNCwgNCwgS0VZX1gpLAotCUtFWSg0LCA1LCBLRVlfWiksCi0JS0VZKDQsIDYsIEtFWV9ET1QpLAotCUtFWSg0LCA3LCBLRVlfQ09NTUEpLAotCUtFWSg1LCAwLCBLRVlfTSksCi0JS0VZKDUsIDEsIEtFWV9TUEFDRSksCi0JS0VZKDUsIDIsIEtFWV9GTiksCisJS0VZKDUsIDAsIEtFWV9LKSwKKwlLRVkoNSwgMSwgS0VZXzMpLAorCUtFWSg1LCAyLCBLRVlfRSksCisJS0VZKDUsIDMsIEtFWV9TKSwKKwlLRVkoNSwgNCwgS0VZX1opLAorCUtFWSg2LCAwLCBLRVlfTCksCisJS0VZKDYsIDEsIEtFWV8yKSwKKwlLRVkoNiwgMiwgS0VZX1cpLAorCUtFWSg2LCAzLCBLRVlfQSksCisJS0VZKDYsIDQsIEtFWV9ET1QpLAorCUtFWSg3LCAwLCBLRVlfRU5URVIpLAorCUtFWSg3LCAxLCBLRVlfMSksCisJS0VZKDcsIDIsIEtFWV9RKSwKKwlLRVkoNywgMywgS0VZX0xFRlRTSElGVCksCisJS0VZKDcsIDQsIEtFWV9DT01NQSksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBwYW5kb3JhX2twX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gNiwKLQkua2V5bWFwCQk9IHBhbmRvcmFfa2V5cGFkX21hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUocGFuZG9yYV9rZXlwYWRfbWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IGU2ZTgyOTAuLmUzNGQ5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgpAQCAtMjcsNyArMjgsNiBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvb25lbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIApAQCAtMzYsNTggKzM2LDYyIEBACiAjZGVmaW5lIFNZU1RFTV9SRVZfQl9VU0VTX1ZBVVgzCTB4MTY5OQogI2RlZmluZSBTWVNURU1fUkVWX1NfVVNFU19WQVVYMyAweDgKIAotc3RhdGljIGludCByeDUxX2tleW1hcFtdID0geworc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX1EpLAotCUtFWSgwLCAxLCBLRVlfVyksCi0JS0VZKDAsIDIsIEtFWV9FKSwKLQlLRVkoMCwgMywgS0VZX1IpLAotCUtFWSgwLCA0LCBLRVlfVCksCi0JS0VZKDAsIDUsIEtFWV9ZKSwKLQlLRVkoMCwgNiwgS0VZX1UpLAotCUtFWSgwLCA3LCBLRVlfSSksCi0JS0VZKDEsIDAsIEtFWV9PKSwKKwlLRVkoMCwgMSwgS0VZX08pLAorCUtFWSgwLCAyLCBLRVlfUCksCisJS0VZKDAsIDMsIEtFWV9DT01NQSksCisJS0VZKDAsIDQsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgwLCA2LCBLRVlfQSksCisJS0VZKDAsIDcsIEtFWV9TKSwKKwlLRVkoMSwgMCwgS0VZX1cpLAogCUtFWSgxLCAxLCBLRVlfRCksCi0JS0VZKDEsIDIsIEtFWV9ET1QpLAotCUtFWSgxLCAzLCBLRVlfViksCi0JS0VZKDEsIDQsIEtFWV9ET1dOKSwKLQlLRVkoMiwgMCwgS0VZX1ApLAotCUtFWSgyLCAxLCBLRVlfRiksCisJS0VZKDEsIDIsIEtFWV9GKSwKKwlLRVkoMSwgMywgS0VZX0cpLAorCUtFWSgxLCA0LCBLRVlfSCksCisJS0VZKDEsIDUsIEtFWV9KKSwKKwlLRVkoMSwgNiwgS0VZX0spLAorCUtFWSgxLCA3LCBLRVlfTCksCisJS0VZKDIsIDAsIEtFWV9FKSwKKwlLRVkoMiwgMSwgS0VZX0RPVCksCiAJS0VZKDIsIDIsIEtFWV9VUCksCi0JS0VZKDIsIDMsIEtFWV9CKSwKLQlLRVkoMiwgNCwgS0VZX1JJR0hUKSwKLQlLRVkoMywgMCwgS0VZX0NPTU1BKSwKLQlLRVkoMywgMSwgS0VZX0cpLAotCUtFWSgzLCAyLCBLRVlfRU5URVIpLAorCUtFWSgyLCAzLCBLRVlfRU5URVIpLAorCUtFWSgyLCA1LCBLRVlfWiksCisJS0VZKDIsIDYsIEtFWV9YKSwKKwlLRVkoMiwgNywgS0VZX0MpLAorCUtFWSgzLCAwLCBLRVlfUiksCisJS0VZKDMsIDEsIEtFWV9WKSwKKwlLRVkoMywgMiwgS0VZX0IpLAogCUtFWSgzLCAzLCBLRVlfTiksCi0JS0VZKDQsIDAsIEtFWV9CQUNLU1BBQ0UpLAotCUtFWSg0LCAxLCBLRVlfSCksCi0JS0VZKDQsIDMsIEtFWV9NKSwKKwlLRVkoMywgNCwgS0VZX00pLAorCUtFWSgzLCA1LCBLRVlfU1BBQ0UpLAorCUtFWSgzLCA2LCBLRVlfU1BBQ0UpLAorCUtFWSgzLCA3LCBLRVlfTEVGVCksCisJS0VZKDQsIDAsIEtFWV9UKSwKKwlLRVkoNCwgMSwgS0VZX0RPV04pLAorCUtFWSg0LCAyLCBLRVlfUklHSFQpLAogCUtFWSg0LCA0LCBLRVlfTEVGVENUUkwpLAotCUtFWSg1LCAxLCBLRVlfSiksCi0JS0VZKDUsIDIsIEtFWV9aKSwKLQlLRVkoNSwgMywgS0VZX1NQQUNFKSwKLQlLRVkoNSwgNCwgS0VZX0xFRlRTSElGVCksCi0JS0VZKDYsIDAsIEtFWV9BKSwKLQlLRVkoNiwgMSwgS0VZX0spLAotCUtFWSg2LCAyLCBLRVlfWCksCi0JS0VZKDYsIDMsIEtFWV9TUEFDRSksCi0JS0VZKDYsIDQsIEtFWV9GTiksCi0JS0VZKDcsIDAsIEtFWV9TKSwKLQlLRVkoNywgMSwgS0VZX0wpLAotCUtFWSg3LCAyLCBLRVlfQyksCi0JS0VZKDcsIDMsIEtFWV9MRUZUKSwKLQlLRVkoMHhmZiwgMCwgS0VZX0Y2KSwKLQlLRVkoMHhmZiwgMSwgS0VZX0Y3KSwKLQlLRVkoMHhmZiwgMiwgS0VZX0Y4KSwKLQlLRVkoMHhmZiwgNCwgS0VZX0Y5KSwKLQlLRVkoMHhmZiwgNSwgS0VZX0YxMCksCisJS0VZKDQsIDUsIEtFWV9SSUdIVEFMVCksCisJS0VZKDQsIDYsIEtFWV9MRUZUU0hJRlQpLAorCUtFWSg1LCAwLCBLRVlfWSksCisJS0VZKDYsIDAsIEtFWV9VKSwKKwlLRVkoNywgMCwgS0VZX0kpLAorCUtFWSg3LCAxLCBLRVlfRjcpLAorCUtFWSg3LCAyLCBLRVlfRjgpLAorCUtFWSgweGZmLCAyLCBLRVlfRjkpLAorCUtFWSgweGZmLCA0LCBLRVlfRjEwKSwKKwlLRVkoMHhmZiwgNSwgS0VZX0YxMSksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSByeDUxX2twX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gOCwKLQkua2V5bWFwCQk9IHJ4NTFfa2V5bWFwLAotCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShyeDUxX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApAQCAtNDQwLDcgKzQ0NCw3IEBACiAJCXJ4NTFfdHdsZGF0YS52YXV4MyA9ICZyeDUxX3ZhdXgzX2NhbTsKIAkJcng1MV90d2xkYXRhLnZtbWMyID0gJnJ4NTFfdm1tYzI7CiAJfQotCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCByeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzEsCisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDIyMDAsIHJ4NTFfcGVyaXBoZXJhbHNfaTJjX2JvYXJkX2luZm9fMSwKIAkJCUFSUkFZX1NJWkUocng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xKSk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDEwMCwgTlVMTCwgMCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IGY5MTk2YzMuLjc4ODY5YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYwppbmRleCAzMjQwMDllLi41MWUwYjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CkBAIC0yMiw3MSArMjMsNzQgQEAKIAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKIAogLyogWm9vbTIgaGFzIFF3ZXJ0eSBrZXlib2FyZCovCi1zdGF0aWMgaW50IHpvb20yX3R3bDQwMzBfa2V5bWFwW10gPSB7CitzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfRSksCi0JS0VZKDEsIDAsIEtFWV9SKSwKLQlLRVkoMiwgMCwgS0VZX1QpLAotCUtFWSgzLCAwLCBLRVlfSE9NRSksCi0JS0VZKDYsIDAsIEtFWV9JKSwKLQlLRVkoNywgMCwgS0VZX0xFRlRTSElGVCksCi0JS0VZKDAsIDEsIEtFWV9EKSwKKwlLRVkoMCwgMSwgS0VZX1IpLAorCUtFWSgwLCAyLCBLRVlfVCksCisJS0VZKDAsIDMsIEtFWV9IT01FKSwKKwlLRVkoMCwgNiwgS0VZX0kpLAorCUtFWSgwLCA3LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoMSwgMCwgS0VZX0QpLAogCUtFWSgxLCAxLCBLRVlfRiksCi0JS0VZKDIsIDEsIEtFWV9HKSwKLQlLRVkoMywgMSwgS0VZX1NFTkQpLAotCUtFWSg2LCAxLCBLRVlfSyksCi0JS0VZKDcsIDEsIEtFWV9FTlRFUiksCi0JS0VZKDAsIDIsIEtFWV9YKSwKLQlLRVkoMSwgMiwgS0VZX0MpLAorCUtFWSgxLCAyLCBLRVlfRyksCisJS0VZKDEsIDMsIEtFWV9TRU5EKSwKKwlLRVkoMSwgNiwgS0VZX0spLAorCUtFWSgxLCA3LCBLRVlfRU5URVIpLAorCUtFWSgyLCAwLCBLRVlfWCksCisJS0VZKDIsIDEsIEtFWV9DKSwKIAlLRVkoMiwgMiwgS0VZX1YpLAotCUtFWSgzLCAyLCBLRVlfRU5EKSwKLQlLRVkoNiwgMiwgS0VZX0RPVCksCi0JS0VZKDcsIDIsIEtFWV9DQVBTTE9DSyksCi0JS0VZKDAsIDMsIEtFWV9aKSwKLQlLRVkoMSwgMywgS0VZX0tQUExVUyksCi0JS0VZKDIsIDMsIEtFWV9CKSwKKwlLRVkoMiwgMywgS0VZX0VORCksCisJS0VZKDIsIDYsIEtFWV9ET1QpLAorCUtFWSgyLCA3LCBLRVlfQ0FQU0xPQ0spLAorCUtFWSgzLCAwLCBLRVlfWiksCisJS0VZKDMsIDEsIEtFWV9LUFBMVVMpLAorCUtFWSgzLCAyLCBLRVlfQiksCiAJS0VZKDMsIDMsIEtFWV9GMSksCi0JS0VZKDYsIDMsIEtFWV9PKSwKLQlLRVkoNywgMywgS0VZX1NQQUNFKSwKLQlLRVkoMCwgNCwgS0VZX1cpLAotCUtFWSgxLCA0LCBLRVlfWSksCi0JS0VZKDIsIDQsIEtFWV9VKSwKLQlLRVkoMywgNCwgS0VZX0YyKSwKKwlLRVkoMywgNiwgS0VZX08pLAorCUtFWSgzLCA3LCBLRVlfU1BBQ0UpLAorCUtFWSg0LCAwLCBLRVlfVyksCisJS0VZKDQsIDEsIEtFWV9ZKSwKKwlLRVkoNCwgMiwgS0VZX1UpLAorCUtFWSg0LCAzLCBLRVlfRjIpLAogCUtFWSg0LCA0LCBLRVlfVk9MVU1FVVApLAotCUtFWSg2LCA0LCBLRVlfTCksCi0JS0VZKDcsIDQsIEtFWV9MRUZUKSwKLQlLRVkoMCwgNSwgS0VZX1MpLAotCUtFWSgxLCA1LCBLRVlfSCksCi0JS0VZKDIsIDUsIEtFWV9KKSwKLQlLRVkoMywgNSwgS0VZX0YzKSwKKwlLRVkoNCwgNiwgS0VZX0wpLAorCUtFWSg0LCA3LCBLRVlfTEVGVCksCisJS0VZKDUsIDAsIEtFWV9TKSwKKwlLRVkoNSwgMSwgS0VZX0gpLAorCUtFWSg1LCAyLCBLRVlfSiksCisJS0VZKDUsIDMsIEtFWV9GMyksCiAJS0VZKDUsIDUsIEtFWV9WT0xVTUVET1dOKSwKLQlLRVkoNiwgNSwgS0VZX00pLAotCUtFWSg0LCA1LCBLRVlfRU5URVIpLAotCUtFWSg3LCA1LCBLRVlfUklHSFQpLAotCUtFWSgwLCA2LCBLRVlfUSksCi0JS0VZKDEsIDYsIEtFWV9BKSwKLQlLRVkoMiwgNiwgS0VZX04pLAotCUtFWSgzLCA2LCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoNSwgNiwgS0VZX00pLAorCUtFWSg1LCA3LCBLRVlfRU5URVIpLAorCUtFWSg2LCAwLCBLRVlfUSksCisJS0VZKDYsIDEsIEtFWV9BKSwKKwlLRVkoNiwgMiwgS0VZX04pLAorCUtFWSg2LCAzLCBLRVlfQkFDS1NQQUNFKSwKIAlLRVkoNiwgNiwgS0VZX1ApLAotCUtFWSg3LCA2LCBLRVlfVVApLAogCUtFWSg2LCA3LCBLRVlfU0VMRUNUKSwKLQlLRVkoNywgNywgS0VZX0RPV04pLAotCUtFWSgwLCA3LCBLRVlfUFJPRzEpLAkvKk1BQ1JPIDEgPFVzZXIgZGVmaW5lZD4gKi8KLQlLRVkoMSwgNywgS0VZX1BST0cyKSwJLypNQUNSTyAyIDxVc2VyIGRlZmluZWQ+ICovCi0JS0VZKDIsIDcsIEtFWV9QUk9HMyksCS8qTUFDUk8gMyA8VXNlciBkZWZpbmVkPiAqLwotCUtFWSgzLCA3LCBLRVlfUFJPRzQpLAkvKk1BQ1JPIDQgPFVzZXIgZGVmaW5lZD4gKi8KLQkwCisJS0VZKDcsIDAsIEtFWV9QUk9HMSksCS8qTUFDUk8gMSA8VXNlciBkZWZpbmVkPiAqLworCUtFWSg3LCAxLCBLRVlfUFJPRzIpLAkvKk1BQ1JPIDIgPFVzZXIgZGVmaW5lZD4gKi8KKwlLRVkoNywgMiwgS0VZX1BST0czKSwJLypNQUNSTyAzIDxVc2VyIGRlZmluZWQ+ICovCisJS0VZKDcsIDMsIEtFWV9QUk9HNCksCS8qTUFDUk8gNCA8VXNlciBkZWZpbmVkPiAqLworCUtFWSg3LCA1LCBLRVlfUklHSFQpLAorCUtFWSg3LCA2LCBLRVlfVVApLAorCUtFWSg3LCA3LCBLRVlfRE9XTikKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAogfTsKIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHpvb20yX2twX3R3bDQwMzBfZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJPSAmYm9hcmRfbWFwX2RhdGEsCiAJLnJvd3MJCT0gOCwKIAkuY29scwkJPSA4LAotCS5rZXltYXAJCT0gem9vbTJfdHdsNDAzMF9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKHpvb20yX3R3bDQwMzBfa2V5bWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCkBAIC0yMDksNyArMjEzLDggQEAKIHsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHpvb20yX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRSh6b29tMl9jb25maWcpOwotCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwsIE5VTEwpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsCisJCQkJIG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKaW5kZXggYmM1ZDNhYy4uZTJkYmVkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCkBAIC03NjksNiArNzY5LDcgQEAKIAkJaWYgKGMtPmNwdSAmIGNwdV9tYXNrKSB7CiAJCQljbGtkZXZfYWRkKCZjLT5sayk7CiAJCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKKwkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CiAJCX0KIAogCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKaW5kZXggZmFmY2QzMi4uN2M1YzAwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCkBAIC0zMzgsNiArMzM4LDEzIEBACiAgKi8KICNkZWZpbmUgU0RSQ19NUFVSQVRFX0xPT1BTCQk5NgogCisvKgorICogRFBMTDVfRlJFUV9GT1JfVVNCSE9TVDogVVNCSE9TVCBhbmQgVVNCVExMIGFyZSB0aGUgb25seSBjbG9ja3MKKyAqIHRoYXQgYXJlIHNvdXJjZWQgYnkgRFBMTDUsIGFuZCBib3RoIG9mIHRoZXNlIHJlcXVpcmUgdGhpcyBjbG9jaworICogdG8gYmUgYXQgMTIwIE1IeiBmb3IgcHJvcGVyIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBEUExMNV9GUkVRX0ZPUl9VU0JIT1NUCQkxMjAwMDAwMDAKKwogLyoqCiAgKiBvbWFwMzQzMGVzMl9jbGtfc3NpX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIENNX0lETEVTVCBpbmZvIGZvciBTU0kKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWluZyBlbmFibGVkCkBAIC00NjYsNyArNDczLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZpbnQ7CiAJdTE2IGYgPSAwOwogCi0JZmludCA9IGNsay0+ZHBsbF9kYXRhLT5jbGtfcmVmLT5yYXRlIC8gKG4gKyAxKTsKKwlmaW50ID0gY2xrLT5kcGxsX2RhdGEtPmNsa19yZWYtPnJhdGUgLyBuOwogCiAJcHJfZGVidWcoImNsb2NrOiBmaW50IGlzICVsdVxuIiwgZmludCk7CiAKQEAgLTEwNTYsNiArMTA2MywyOCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIG9tYXAzX2Nsa19sb2NrX2RwbGw1KHZvaWQpCit7CisJc3RydWN0IGNsayAqZHBsbDVfY2xrOworCXN0cnVjdCBjbGsgKmRwbGw1X20yX2NsazsKKworCWRwbGw1X2NsayA9IGNsa19nZXQoTlVMTCwgImRwbGw1X2NrIik7CisJY2xrX3NldF9yYXRlKGRwbGw1X2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7CisJY2xrX2VuYWJsZShkcGxsNV9jbGspOworCisJLyogRW5hYmxlIGF1dG9pZGxlIHRvIGFsbG93IGl0IHRvIGVudGVyIGxvdyBwb3dlciBieXBhc3MgKi8KKwlvbWFwM19kcGxsX2FsbG93X2lkbGUoZHBsbDVfY2xrKTsKKworCS8qIFByb2dyYW0gZHBsbDVfbTJfY2xrIGRpdmlkZXIgZm9yIG5vIGRpdmlzaW9uICovCisJZHBsbDVfbTJfY2xrID0gY2xrX2dldChOVUxMLCAiZHBsbDVfbTJfY2siKTsKKwljbGtfZW5hYmxlKGRwbGw1X20yX2Nsayk7CisJY2xrX3NldF9yYXRlKGRwbGw1X20yX2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7CisKKwljbGtfZGlzYWJsZShkcGxsNV9tMl9jbGspOworCWNsa19kaXNhYmxlKGRwbGw1X2Nsayk7CisJcmV0dXJuOworfQorCiAvKiBSRVZJU0lUOiBNb3ZlIHRoaXMgaW5pdCBzdHVmZiBvdXQgaW50byBjbG9jay5jICovCiAKIC8qCkBAIC0xMTQ4LDYgKzExNzcsMTIgQEAKIAkgKi8KIAljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7CiAKKwkvKgorCSAqIExvY2sgRFBMTDUgYW5kIHB1dCBpdCBpbiBhdXRvaWRsZS4KKwkgKi8KKwlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzApCisJCW9tYXAzX2Nsa19sb2NrX2RwbGw1KCk7CisKIAkvKiBBdm9pZCBzbGVlcGluZyBkdXJpbmcgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpICovCiAJLyogUkVWSVNJVDogbm90IHlldCByZWFkeSBmb3IgMzQzeCAqLwogI2lmIDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCmluZGV4IGM4MTE5NzguLjk1NjVjMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaApAQCAtNDg5LDkgKzQ4OSw5IEBACiBzdGF0aWMgc3RydWN0IGNsayBkcGxsM19tMngyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsM19tMngyX2NrIiwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM194Ml9jaywKKwkucGFyZW50CQk9ICZkcGxsM19tMl9jaywKIAkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCiAvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwppbmRleCA0ZWY3YjRmLi41OGFmZjg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0xMzcsNiArMTM3LDM2IEBACiAJfQogfQogCisvKgorICogX29tYXAyX2Nsa2RtX3NldF9od3N1cCAtIHNldCB0aGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9uIGJpdAorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICogQGVuYWJsZTogaW50IDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGUKKyAqCisgKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGFjdHVhbGx5IHN3aXRjaGluZyB0aGUgYml0IHRoYXQgY29udHJvbHMgaHdzdXAKKyAqIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsa2RtLgorICovCitzdGF0aWMgdm9pZCBfb21hcDJfY2xrZG1fc2V0X2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIGludCBlbmFibGUpCit7CisJdTMyIHY7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJCWVsc2UKKwkJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJCWVsc2UKKwkJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCX0gZWxzZSB7CisJCUJVRygpOworCX0KKworCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAorCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKKwkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKl9jbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTQ1Niw4ICs0ODYsNiBAQAogICovCiB2b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQl1MzIgdjsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybjsKIApAQCAtNDczLDE4ICs1MDEsNyBAQAogCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQotCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQotCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAotCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKLQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkgICAgQ01fQ0xLU1RDVFJMKTsKKwlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKIAogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CiB9CkBAIC01MDAsOCArNTE3LDYgQEAKICAqLwogdm9pZCBvbWFwMl9jbGtkbV9kZW55X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQl1MzIgdjsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybjsKIApAQCAtNTE0LDE2ICs1MjksNyBAQAogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZGlzYWJsaW5nIGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGZvciAlc1xuIiwKIAkJIGNsa2RtLT5uYW1lKTsKIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKLQkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCi0JCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDApOwogCiAJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKIAkJX2Nsa2RtX2RlbF9hdXRvZGVwcyhjbGtkbSk7CkBAIC01NjksMTAgKzU3NSwxNCBAQAogCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fAotCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKQorCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKSB7CisJCS8qIERpc2FibGUgSFcgdHJhbnNpdGlvbnMgd2hlbiB3ZSBhcmUgY2hhbmdpbmcgZGVwcyAqLworCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAwKTsKIAkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7Ci0JZWxzZQorCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKKwl9IGVsc2UgewogCQlvbWFwMl9jbGtkbV93YWtldXAoY2xrZG0pOworCX0KIAogCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihjbGtkbS0+cHdyZG0ucHRyKTsKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwpAQCAtNjIzLDEwICs2MzMsMTQgQEAKIAl2ID0gb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQoY2xrZG0pOwogCiAJaWYgKChjcHVfaXNfb21hcDM0eHgoKSAmJiB2ID09IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgfHwKLQkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkKKwkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkgeworCQkvKiBEaXNhYmxlIEhXIHRyYW5zaXRpb25zIHdoZW4gd2UgYXJlIGNoYW5naW5nIGRlcHMgKi8KKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMCk7CiAJCV9jbGtkbV9kZWxfYXV0b2RlcHMoY2xrZG0pOwotCWVsc2UKKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CisJfSBlbHNlIHsKIAkJb21hcDJfY2xrZG1fc2xlZXAoY2xrZG0pOworCX0KIAogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200eHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNHh4eC5jCmluZGV4IGU0ZWJkNmQuLjRhZjc2YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200eHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTR4eHguYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy00eHh4LmgiCiAKIC8qIFhYWCBtb3ZlIHRoaXMgdG8gY20uaCAqLwogLyogTUFYX01PRFVMRV9SRUFEWV9USU1FOiBtYXggbWlsbGlzZWNvbmRzIGZvciBtb2R1bGUgdG8gbGVhdmUgaWRsZSAqLwpAQCAtNTAsMTkgKzQ5LDcgQEAKICAqLwogaW50IG9tYXA0X2NtX3dhaXRfaWRsZXN0X3JlYWR5KHUzMiBwcmNtX21vZCwgdTggcHJjbV9kZXZfb2ZmcykKIHsKLQlpbnQgaSA9IDA7Ci0JdTggY21faWQ7Ci0JdTE2IHByY21fbW9kX29mZnM7Ci0JdTMyIG1hc2sgPSBPTUFQNF9QUkNNX0NNX0NMS0NUUkxfSURMRVNUX01BU0s7Ci0KLQljbV9pZCA9IHByY21fbW9kID4+IE9NQVA0X1BSQ01fTU9EX0NNX0lEX1NISUZUOwotCXByY21fbW9kX29mZnMgPSBwcmNtX21vZCAmIE9NQVA0X1BSQ01fTU9EX09GRlNfTUFTSzsKLQotCXdoaWxlICgoKG9tYXA0X2NtX3JlYWRfbW9kX3JlZyhjbV9pZCwgcHJjbV9tb2Rfb2ZmcywgcHJjbV9kZXZfb2ZmcywKLQkJCQkgICAgICAgT01BUDRfQ01fQ0xLQ1RSTF9EUkVHKSAmIG1hc2spICE9IDApICYmCi0JICAgICAgIChpKysgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpKQotCQl1ZGVsYXkoMSk7Ci0KLQlyZXR1cm4gKGkgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpID8gMCA6IC1FQlVTWTsKKwkvKiBGSVhNRTogQWRkIGNsb2NrIG1hbmFnZXIgcmVsYXRlZCBjb2RlICovCisJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggYmNmY2ZjNy4uZmFmN2ExZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTM1NSwyOSArMzU1LDYwIEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQorI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDRfbWNzcGlfZml4dXAodm9pZCkKIHsKLQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMV9CQVNFOwotCQlvbWFwMl9tY3NwaTFfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMV9CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGkyX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMl9CQVNFOwotCQlvbWFwMl9tY3NwaTJfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMl9CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGkzX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJM19CQVNFOwotCQlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJM19CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJNF9CQVNFOwotCQlvbWFwMl9tY3NwaTRfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJNF9CQVNFICsgMHhmZjsKLQl9Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTEpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkyKTsKKwlvbWFwMl9tY3NwaTFfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEkxX0JBU0U7CisJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTFfQkFTRSArIDB4ZmY7CisJb21hcDJfbWNzcGkyX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMl9CQVNFOworCW9tYXAyX21jc3BpMl9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEkyX0JBU0UgKyAweGZmOworCW9tYXAyX21jc3BpM19yZXNvdXJjZXNbMF0uc3RhcnQJPSBPTUFQNF9NQ1NQSTNfQkFTRTsKKwlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJM19CQVNFICsgMHhmZjsKKwlvbWFwMl9tY3NwaTRfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEk0X0JBU0U7CisJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTRfQkFTRSArIDB4ZmY7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXA0X21jc3BpX2ZpeHVwKHZvaWQpCit7Cit9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21jc3BpM19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTNfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWlmIChjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTQpOworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21jc3BpNF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTRfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQoreworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJb21hcDRfbWNzcGlfZml4dXAoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkxKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMik7CisKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXAyX21jc3BpM19pbml0KCk7CisKKwlpZiAoY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXAyX21jc3BpNF9pbml0KCk7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCmluZGV4IDE1ODc2ODIuLmYzYzk5MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCkBAIC0zNjYsNyArMzY2LDcgQEAKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCi0JZ3BtY19jc19lbmFibGVfbWVtKGNzLCByZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlncG1jX2NzX2VuYWJsZV9tZW0oY3MsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJKmJhc2UgPSByZXMtPnN0YXJ0OwogCWdwbWNfY3Nfc2V0X3Jlc2VydmVkKGNzLCAxKTsKIG91dDoKQEAgLTM3OCw3ICszNzgsNyBAQAogdm9pZCBncG1jX2NzX2ZyZWUoaW50IGNzKQogewogCXNwaW5fbG9jaygmZ3BtY19tZW1fbG9jayk7Ci0JaWYgKGNzID49IEdQTUNfQ1NfTlVNIHx8ICFncG1jX2NzX3Jlc2VydmVkKGNzKSkgeworCWlmIChjcyA+PSBHUE1DX0NTX05VTSB8fCBjcyA8IDAgfHwgIWdwbWNfY3NfcmVzZXJ2ZWQoY3MpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGZyZWUgbm9uLXJlc2VydmVkIEdQTUMgQ1MlZFxuIiwgY3MpOwogCQlCVUcoKTsKIAkJc3Bpbl91bmxvY2soJmdwbWNfbWVtX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IDc1NzRiNmYuLjU2YmU4N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTI5NCwxNSArMjk0LDE3IEBACiAJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCiAJCWh3bW9kcyA9IG9tYXAzNHh4X2h3bW9kczsKIAotCW9tYXBfaHdtb2RfaW5pdChod21vZHMpOwotCW9tYXAyX211eF9pbml0KCk7CiAjaWZuZGVmIENPTkZJR19BUkNIX09NQVA0IC8qIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHRoZSBjbGtkZXYgaXMgcmVhZHkgKi8KIAkvKiBUaGUgT1BQIHRhYmxlcyBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgYmVmb3JlIGEgY2xrIGluaXQgKi8KKwlvbWFwX2h3bW9kX2luaXQoaHdtb2RzKTsKKwlvbWFwMl9tdXhfaW5pdCgpOwogCW9tYXBfcG1faWZfZWFybHlfaW5pdChtcHVfb3BwcywgZHNwX29wcHMsIGwzX29wcHMpOwogCXB3cmRtX2luaXQocG93ZXJkb21haW5zX29tYXApOwogCWNsa2RtX2luaXQoY2xvY2tkb21haW5zX29tYXAsIGNsa2RtX3B3cmRtX2F1dG9kZXBzKTsKIAlvbWFwMl9jbGtfaW5pdCgpOworI2VuZGlmCiAJb21hcF9zZXJpYWxfZWFybHlfaW5pdCgpOworI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNAogCW9tYXBfaHdtb2RfbGF0ZV9pbml0KCk7CiAJb21hcF9wbV9pZl9pbml0KCk7CiAJb21hcDJfc2RyY19pbml0KHNkcmNfY3MwLCBzZHJjX2NzMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pb21tdTIuYwppbmRleCAyZDliNWNjLi40YTBlMWNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW9tbXUyLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkJbCA9IGlvbW11X3JlYWRfcmVnKG9iaiwgTU1VX1NZU1NUQVRVUyk7CiAJCWlmIChsICYgTU1VX1NZU19SRVNFVERPTkUpCiAJCQlicmVhazsKLQl9IHdoaWxlICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKKwl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSk7CiAKIAlpZiAoIShsICYgTU1VX1NZU19SRVNFVERPTkUpKSB7CiAJCWRldl9lcnIob2JqLT5kZXYsICJjYW4ndCB0YWtlIG1tdSBvdXQgb2YgcmVzZXRcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwppbmRleCA2ZjcxZjM3Li5lZjU3YjM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwpAQCAtMzAsNiArMzAsMTQgQEAKICNkZWZpbmUgTUFJTEJPWF9JUlFfTkVXTVNHKHUpCQkoMSA8PCAoMiAqICh1KSkpCiAjZGVmaW5lIE1BSUxCT1hfSVJRX05PVEZVTEwodSkJCSgxIDw8ICgyICogKHUpICsgMSkpCiAKKy8qIFNZU0NPTkZJRzogcmVnaXN0ZXIgYml0IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgQVVUT0lETEUJKDEgPDwgMCkKKyNkZWZpbmUgU09GVFJFU0VUCSgxIDw8IDEpCisjZGVmaW5lIFNNQVJUSURMRQkoMiA8PCAzKQorCisvKiBTWVNTVEFUVVM6IHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9uICovCisjZGVmaW5lIFJFU0VURE9ORQkoMSA8PCAwKQorCiAjZGVmaW5lIE1CT1hfUkVHX1NJWkUJCQkweDEyMAogI2RlZmluZSBNQk9YX05SX1JFR1MJCQkoTUJPWF9SRUdfU0laRSAvIHNpemVvZih1MzIpKQogCkBAIC02OSwyMSArNzcsMzMgQEAKIC8qIE1haWxib3ggSC9XIHByZXBhcmF0aW9ucyAqLwogc3RhdGljIGludCBvbWFwMl9tYm94X3N0YXJ0dXAoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKIHsKLQl1bnNpZ25lZCBpbnQgbDsKKwl1MzIgbDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAltYm94X2lja19oYW5kbGUgPSBjbGtfZ2V0KE5VTEwsICJtYWlsYm94ZXNfaWNrIik7CiAJaWYgKElTX0VSUihtYm94X2lja19oYW5kbGUpKSB7Ci0JCXByaW50aygiQ291bGQgbm90IGdldCBtYWlsYm94ZXNfaWNrXG4iKTsKKwkJcHJfZXJyKCJDYW4ndCBnZXQgbWFpbGJveGVzX2lja1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAljbGtfZW5hYmxlKG1ib3hfaWNrX2hhbmRsZSk7CiAKKwltYm94X3dyaXRlX3JlZyhTT0ZUUkVTRVQsIE1BSUxCT1hfU1lTQ09ORklHKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCWRvIHsKKwkJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9TWVNTVEFUVVMpOworCQlpZiAobCAmIFJFU0VURE9ORSkKKwkJCWJyZWFrOworCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKKworCWlmICghKGwgJiBSRVNFVERPTkUpKSB7CisJCXByX2VycigiQ2FuJ3QgdGFrZSBtbXUgb3V0IG9mIHJlc2V0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9SRVZJU0lPTik7CiAJcHJfaW5mbygib21hcCBtYWlsYm94IHJldiAlZC4lZFxuIiwgKGwgJiAweGYwKSA+PiA0LCAobCAmIDB4MGYpKTsKIAotCS8qIHNldCBzbWFydC1pZGxlICYgYXV0b2lkbGUgKi8KLQlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU0NPTkZJRyk7Ci0JbCB8PSAweDAwMDAwMDExOworCWwgPSBTTUFSVElETEUgfCBBVVRPSURMRTsKIAltYm94X3dyaXRlX3JlZyhsLCBNQUlMQk9YX1NZU0NPTkZJRyk7CiAKIAlvbWFwMl9tYm94X2VuYWJsZV9pcnEobWJveCwgSVJRX1JYKTsKQEAgLTE1Niw2ICsxNzYsOSBAQAogCXUzMiBiaXQgPSAoaXJxID09IElSUV9UWCkgPyBwLT5ub3RmdWxsX2JpdCA6IHAtPm5ld21zZ19iaXQ7CiAKIAltYm94X3dyaXRlX3JlZyhiaXQsIHAtPmlycXN0YXR1cyk7CisKKwkvKiBGbHVzaCBwb3N0ZWQgd3JpdGUgZm9yIGlycSBzdGF0dXMgdG8gYXZvaWQgc3B1cmlvdXMgaW50ZXJydXB0cyAqLworCW1ib3hfcmVhZF9yZWcocC0+aXJxc3RhdHVzKTsKIH0KIAogc3RhdGljIGludCBvbWFwMl9tYm94X2lzX2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LApAQCAtMjc3LDcgKzMwMCw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbWVtIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCW1ib3hfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKKwltYm94X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFtYm94X2Jhc2UpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCAyZGFhNTk1Li5iNWZhYzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTQ2MCw2ICs0NjAsOCBAQAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFGMjJfMzRYWF9HUElPOSIsIDB4YTE4LAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkFHOV8zNFhYX0dQSU8yMyIsIDB4NWVlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFIOF8zNFhYX0dQSU8yOSIsIDB4NWZhLAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIlU4XzM0WFhfR1BJTzU0X09VVCIsIDB4MGI0LApAQCAtNDcyLDYgKzQ3NCw4IEBACiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFHNF8zNFhYX0dQSU8xMzRfT1VUIiwgMHgxNjAsCiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFGNF8zNFhYX0dQSU8xMzVfT1VUIiwgMHgxNjIsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFFNF8zNFhYX0dQSU8xMzZfT1VUIiwgMHgxNjQsCiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFGNl8zNFhYX0dQSU8xNDBfVVAiLCAweDE2YywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwppbmRleCAxYjRjMTYwLi4yZmM0ZDZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCkBAIC01NDEsNyArNTQxLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb25seSBPTUFQMyBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCQkKKwogCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInBtX2RlYnVnIiwgTlVMTCk7CiAJaWYgKElTX0VSUihkKSkKIAkJcmV0dXJuIFBUUl9FUlIoZCk7CkBAIC01NTEsNyArNTUxLDcgQEAKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgidGltZSIsIFNfSVJVR08sCiAJCWQsICh2b2lkICopREVCVUdfRklMRV9USU1FUlMsICZkZWJ1Z19mb3BzKTsKIAotCXB3cmRtX2Zvcl9lYWNoKHB3cmRtc19zZXR1cCwgKHZvaWQgKilkKTsKKwlwd3JkbV9mb3JfZWFjaF9ub2xvY2socHdyZG1zX3NldHVwLCAodm9pZCAqKWQpOwogCiAJcG1fZGJnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigicmVnaXN0ZXJzIiwgZCk7CiAJaWYgKElTX0VSUihwbV9kYmdfZGlyKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDBmZjVhNmMuLjg5NDYzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtNTEsOTcgKzUxLDExMiBAQAogCiBzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICptcHVfcHdyZG07CiAKLS8qIFBSQ00gSW50ZXJydXB0IEhhbmRsZXIgZm9yIHdha2V1cHMgKi8KKy8qCisgKiBQUkNNIEludGVycnVwdCBIYW5kbGVyIEhlbHBlciBGdW5jdGlvbgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gY2xlYXIgYW55IHdha2UtdXAgZXZlbnRzIGxhdGNoZWQKKyAqIGluIHRoZSBQUkNNIFBNX1dLU1RfeCByZWdpc3RlcnMuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSB3YWtlLXVwIGV2ZW50CisgKiBtYXkgb2NjdXIgd2hpbHN0IGF0dGVtcHRpbmcgdG8gY2xlYXIgYSBQTV9XS1NUX3ggcmVnaXN0ZXIgYW5kIHRodXMKKyAqIHNldCBhbm90aGVyIGJpdCBpbiB0aGlzIHJlZ2lzdGVyLiBBIHdoaWxlIGxvb3AgaXMgdXNlZCB0byBlbnN1cmUKKyAqIHRoYXQgYW55IHBlcmlwaGVyYWwgd2FrZS11cCBldmVudHMgb2NjdXJyaW5nIHdoaWxlIGF0dGVtcHRpbmcgdG8KKyAqIGNsZWFyIHRoZSBQTV9XS1NUX3ggYXJlIGRldGVjdGVkIGFuZCBjbGVhcmVkLgorICovCitzdGF0aWMgaW50IHByY21fY2xlYXJfbW9kX2lycXMoczE2IG1vZHVsZSwgdTggcmVncykKK3sKKwl1MzIgd2tzdCwgZmNsaywgaWNsaywgY2xrZW47CisJdTE2IHdrc3Rfb2ZmID0gKHJlZ3MgPT0gMykgPyBPTUFQMzQzMEVTMl9QTV9XS1NUMyA6IFBNX1dLU1QxOworCXUxNiBmY2xrX29mZiA9IChyZWdzID09IDMpID8gT01BUDM0MzBFUzJfQ01fRkNMS0VOMyA6IENNX0ZDTEtFTjE7CisJdTE2IGljbGtfb2ZmID0gKHJlZ3MgPT0gMykgPyBDTV9JQ0xLRU4zIDogQ01fSUNMS0VOMTsKKwl1MTYgZ3Jwc2VsX29mZiA9IChyZWdzID09IDMpID8KKwkJT01BUDM0MzBFUzJfUE1fTVBVR1JQU0VMMyA6IE9NQVAzNDMwX1BNX01QVUdSUFNFTDsKKwlpbnQgYyA9IDA7CisKKwl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIHdrc3Rfb2ZmKTsKKwl3a3N0ICY9IHBybV9yZWFkX21vZF9yZWcobW9kdWxlLCBncnBzZWxfb2ZmKTsKKwlpZiAod2tzdCkgeworCQlpY2xrID0gY21fcmVhZF9tb2RfcmVnKG1vZHVsZSwgaWNsa19vZmYpOworCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKG1vZHVsZSwgZmNsa19vZmYpOworCQl3aGlsZSAod2tzdCkgeworCQkJY2xrZW4gPSB3a3N0OworCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBpY2xrX29mZik7CisJCQkvKgorCQkJICogRm9yIFVTQkhPU1QsIHdlIGRvbid0IGtub3cgd2hldGhlciBIT1NUMSBvcgorCQkJICogSE9TVDIgd29rZSB1cyB1cCwgc28gZW5hYmxlIGJvdGggZi1jbG9ja3MKKwkJCSAqLworCQkJaWYgKG1vZHVsZSA9PSBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCkKKwkJCQljbGtlbiB8PSAxIDw8IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZUOworCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBmY2xrX29mZik7CisJCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBtb2R1bGUsIHdrc3Rfb2ZmKTsKKwkJCXdrc3QgPSBwcm1fcmVhZF9tb2RfcmVnKG1vZHVsZSwgd2tzdF9vZmYpOworCQkJYysrOworCQl9CisJCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgbW9kdWxlLCBpY2xrX29mZik7CisJCWNtX3dyaXRlX21vZF9yZWcoZmNsaywgbW9kdWxlLCBmY2xrX29mZik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQgX3ByY21faW50X2hhbmRsZV93YWtldXAodm9pZCkKK3sKKwlpbnQgYzsKKworCWMgPSBwcmNtX2NsZWFyX21vZF9pcnFzKFdLVVBfTU9ELCAxKTsKKwljICs9IHByY21fY2xlYXJfbW9kX2lycXMoQ09SRV9NT0QsIDEpOworCWMgKz0gcHJjbV9jbGVhcl9tb2RfaXJxcyhPTUFQMzQzMF9QRVJfTU9ELCAxKTsKKwlpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkgeworCQljICs9IHByY21fY2xlYXJfbW9kX2lycXMoQ09SRV9NT0QsIDMpOworCQljICs9IHByY21fY2xlYXJfbW9kX2lycXMoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIDEpOworCX0KKworCXJldHVybiBjOworfQorCisvKgorICogUFJDTSBJbnRlcnJ1cHQgSGFuZGxlcgorICoKKyAqIFRoZSBQUk1fSVJRU1RBVFVTX01QVSByZWdpc3RlciBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nCisgKiBpbnRlcnJ1cHRzIGZyb20gdGhlIFBSQ00gZm9yIHRoZSBNUFUuIFRoZXNlIGJpdHMgbXVzdCBiZSBjbGVhcmVkIGluCisgKiBvcmRlciB0byBjbGVhciB0aGUgUFJDTSBpbnRlcnJ1cHQuIFRoZSBQUkNNIGludGVycnVwdCBoYW5kbGVyIGlzCisgKiBpbXBsZW1lbnRlZCB0byBzaW1wbHkgY2xlYXIgdGhlIFBSTV9JUlFTVEFUVVNfTVBVIGluIG9yZGVyIHRvIGNsZWFyCisgKiB0aGUgUFJDTSBpbnRlcnJ1cHQuIFBsZWFzZSBub3RlIHRoYXQgYml0IDAgb2YgdGhlIFBSTV9JUlFTVEFUVVNfTVBVCisgKiByZWdpc3RlciBpbmRpY2F0ZXMgdGhhdCBhIHdha2UtdXAgZXZlbnQgaXMgcGVuZGluZyBmb3IgdGhlIE1QVSBhbmQKKyAqIHRoaXMgYml0IGNhbiBvbmx5IGJlIGNsZWFyZWQgaWYgdGhlIGFsbCB0aGUgd2FrZS11cCBldmVudHMgbGF0Y2hlZAorICogaW4gdGhlIHZhcmlvdXMgUE1fV0tTVF94IHJlZ2lzdGVycyBoYXZlIGJlZW4gY2xlYXJlZC4gVGhlIGludGVycnVwdAorICogaGFuZGxlciBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIGRvLXdoaWxlIGxvb3Agc28gdGhhdCBpZiBhIHdha2UtdXAKKyAqIGV2ZW50IG9jY3VycmVkIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgcHJjbSBpbnRlcnJ1cHQgaGFuZGxlcgorICogKHNldHRpbmcgYSBiaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgUE1fV0tTVF94IHJlZ2lzdGVyIGFuZCB0aHVzCisgKiBwcmV2ZW50aW5nIHVzIGZyb20gY2xlYXJpbmcgYml0IDAgb2YgdGhlIFBSTV9JUlFTVEFUVVNfTVBVIHJlZ2lzdGVyKQorICogdGhpcyB3b3VsZCBiZSBoYW5kbGVkLgorICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgcHJjbV9pbnRlcnJ1cHRfaGFuZGxlciAoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXUzMiB3a3N0LCBpcnFzdGF0dXNfbXB1OwotCXUzMiBmY2xrLCBpY2xrOworCXUzMiBpcnFzdGF0dXNfbXB1OworCWludCBjID0gMDsKIAotCS8qIFdLVVAgKi8KLQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUE1fV0tTVCk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJZmNsayA9IGNtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQkJcHJtX3dyaXRlX21vZF9yZWcod2tzdCwgV0tVUF9NT0QsIFBNX1dLU1QpOwotCQl3aGlsZSAocHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUE1fV0tTVCkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhmY2xrLCBXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQl9CisJZG8geworCQlpcnFzdGF0dXNfbXB1ID0gcHJtX3JlYWRfbW9kX3JlZyhPQ1BfTU9ELAorCQkJCQlPTUFQM19QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQpOwogCi0JLyogQ09SRSAqLwotCXdrc3QgPSBwcm1fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBQTV9XS1NUMSk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fSUNMS0VOMSk7Ci0JCWZjbGsgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0ZDTEtFTjEpOwotCQljbV9zZXRfbW9kX3JlZ19iaXRzKHdrc3QsIENPUkVfTU9ELCBDTV9JQ0xLRU4xKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBDT1JFX01PRCwgQ01fRkNMS0VOMSk7Ci0JCXBybV93cml0ZV9tb2RfcmVnKHdrc3QsIENPUkVfTU9ELCBQTV9XS1NUMSk7Ci0JCXdoaWxlIChwcm1fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBQTV9XS1NUMSkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBDT1JFX01PRCwgQ01fSUNMS0VOMSk7Ci0JCWNtX3dyaXRlX21vZF9yZWcoZmNsaywgQ09SRV9NT0QsIENNX0ZDTEtFTjEpOwotCX0KLQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpOwotCWlmICh3a3N0KSB7Ci0JCWljbGsgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0lDTEtFTjMpOwotCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBDT1JFX01PRCwgQ01fSUNMS0VOMyk7Ci0JCWNtX3NldF9tb2RfcmVnX2JpdHMod2tzdCwgQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpOwotCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpOwotCQl3aGlsZSAocHJtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpKQotCQkJY3B1X3JlbGF4KCk7Ci0JCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgQ09SRV9NT0QsIENNX0lDTEtFTjMpOwotCQljbV93cml0ZV9tb2RfcmVnKGZjbGssIENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKTsKLQl9CisJCWlmIChpcnFzdGF0dXNfbXB1ICYgKE9NQVAzNDMwX1dLVVBfU1QgfCBPTUFQMzQzMF9JT19TVCkpIHsKKwkJCWMgPSBfcHJjbV9pbnRfaGFuZGxlX3dha2V1cCgpOwogCi0JLyogUEVSICovCi0Jd2tzdCA9IHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgUE1fV0tTVCk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pOwotCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTik7Ci0JCWNtX3NldF9tb2RfcmVnX2JpdHMod2tzdCwgT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pOwotCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS1NUKTsKLQkJd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgUE1fV0tTVCkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pOwotCQljbV93cml0ZV9tb2RfcmVnKGZjbGssIE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTik7Ci0JfQotCi0JaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApIHsKLQkJLyogVVNCSE9TVCAqLwotCQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fV0tTVCk7Ci0JCWlmICh3a3N0KSB7Ci0JCQlpY2xrID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgICAgICAgQ01fSUNMS0VOKTsKLQkJCWZjbGsgPSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCSAgICAgICBDTV9GQ0xLRU4pOwotCQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKLQkJCQkJICAgIENNX0lDTEtFTik7Ci0JCQljbV9zZXRfbW9kX3JlZ19iaXRzKHdrc3QsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgICAgQ01fRkNMS0VOKTsKLQkJCXBybV93cml0ZV9tb2RfcmVnKHdrc3QsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgIFBNX1dLU1QpOwotCQkJd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCQlQTV9XS1NUKSkKLQkJCQljcHVfcmVsYXgoKTsKLQkJCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCSBDTV9JQ0xLRU4pOwotCQkJY21fd3JpdGVfbW9kX3JlZyhmY2xrLCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKLQkJCQkJIENNX0ZDTEtFTik7CisJCQkvKgorCQkJICogSXMgdGhlIE1QVSBQUkNNIGludGVycnVwdCBoYW5kbGVyIHJhY2luZyB3aXRoIHRoZQorCQkJICogSVZBMiBQUkNNIGludGVycnVwdCBoYW5kbGVyID8KKwkJCSAqLworCQkJV0FSTihjID09IDAsICJwcmNtOiBXQVJOSU5HOiBQUkNNIGluZGljYXRlZCBNUFUgd2FrZXVwICIKKwkJCSAgICAgImJ1dCBubyB3YWtldXAgc291cmNlcyBhcmUgbWFya2VkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFhYWCB3ZSBuZWVkIHRvIGV4cGFuZCBvdXIgUFJDTSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCQkJV0FSTigxLCAicHJjbTogV0FSTklORzogUFJDTSBpbnRlcnJ1cHQgcmVjZWl2ZWQsIGJ1dCAiCisJCQkgICAgICJubyBjb2RlIHRvIGhhbmRsZSBpdCAoJTA4eClcbiIsIGlycXN0YXR1c19tcHUpOwogCQl9Ci0JfQogCi0JaXJxc3RhdHVzX21wdSA9IHBybV9yZWFkX21vZF9yZWcoT0NQX01PRCwKLQkJCQkJIE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoaXJxc3RhdHVzX21wdSwgT0NQX01PRCwKLQkJCSAgT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKKwkJcHJtX3dyaXRlX21vZF9yZWcoaXJxc3RhdHVzX21wdSwgT0NQX01PRCwKKwkJCQkJT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKIAotCXdoaWxlIChwcm1fcmVhZF9tb2RfcmVnKE9DUF9NT0QsIE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCkpCi0JCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT0NQX01PRCwgT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC02MjQsNiArNjM5LDE3IEBACiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfSU9fRU4gfCBPTUFQMzQzMF9XS1VQX0VOLAogCQkJICBPQ1BfTU9ELCBPTUFQM19QUk1fSVJRRU5BQkxFX01QVV9PRkZTRVQpOwogCisJLyogRW5hYmxlIHdha2V1cHMgaW4gUEVSICovCisJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfRU5fR1BJTzIgfCBPTUFQMzQzMF9FTl9HUElPMyB8CisJCQkgIE9NQVAzNDMwX0VOX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAorCQkJICBPTUFQMzQzMF9FTl9HUElPNiB8IE9NQVAzNDMwX0VOX1VBUlQzLAorCQkJICBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS0VOKTsKKwkvKiBhbmQgYWxsb3cgdGhlbSB0byB3YWtlIHVwIE1QVSAqLworCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0dSUFNFTF9HUElPMiB8IE9NQVAzNDMwX0VOX0dQSU8zIHwKKwkJCSAgT01BUDM0MzBfR1JQU0VMX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAorCQkJICBPTUFQMzQzMF9HUlBTRUxfR1BJTzYgfCBPTUFQMzQzMF9FTl9VQVJUMywKKwkJCSAgT01BUDM0MzBfUEVSX01PRCwgT01BUDM0MzBfUE1fTVBVR1JQU0VMKTsKKwogCS8qIERvbid0IGF0dGFjaCBJVkEgaW50ZXJydXB0cyAqLwogCXBybV93cml0ZV9tb2RfcmVnKDAsIFdLVVBfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwpOwogCXBybV93cml0ZV9tb2RfcmVnKDAsIENPUkVfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwppbmRleCAyNTk0Y2JmLi5mMDAyODlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCkBAIC0yNzMsMzUgKzI3Myw1MCBAQAogfQogCiAvKioKLSAqIHB3cmRtX2Zvcl9lYWNoIC0gY2FsbCBmdW5jdGlvbiBvbiBlYWNoIHJlZ2lzdGVyZWQgY2xvY2tkb21haW4KKyAqIHB3cmRtX2Zvcl9lYWNoX25vbG9jayAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCiAgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKICAqCiAgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLiAgVGhlCiAgKiBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20KLSAqIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcHdyZG1fcndsb2NrCi0gKiBoZWxkIGZvciByZWFkaW5nLCBzbyBubyBwb3dlcmRvbWFpbiBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uCi0gKiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBjYWxsYmFjaywgYWx0aG91Z2ggaGFyZHdhcmUKLSAqIHBvd2VyZG9tYWluIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBmaW5lLiAgUmV0dXJucyB0aGUgbGFzdCByZXR1cm4KLSAqIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIDAgZm9yIHN1Y2Nlc3Mgb3IKLSAqIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZiB0aGUgZnVuY3Rpb24KLSAqIHBvaW50ZXIgaXMgbnVsbC4KKyAqIHRoZSBpdGVyYXRvci4gIFJldHVybnMgdGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2gKKyAqIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZgorICogdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaXMgbnVsbC4KICAqLwotaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKLQkJCXZvaWQgKnVzZXIpCitpbnQgcHdyZG1fZm9yX2VhY2hfbm9sb2NrKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCQl2b2lkICp1c2VyKQogewogCXN0cnVjdCBwb3dlcmRvbWFpbiAqdGVtcF9wd3JkbTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFmbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWFkX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wX3B3cmRtLCAmcHdyZG1fbGlzdCwgbm9kZSkgewogCQlyZXQgPSAoKmZuKSh0ZW1wX3B3cmRtLCB1c2VyKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcHdyZG1fZm9yX2VhY2ggLSBjYWxsIGZ1bmN0aW9uIG9uIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbgorICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyAncHdyZG1fZm9yX2VhY2hfbm9sb2NrKCknLCBidXQga2VlcHMgdGhlCisgKiAmcHdyZG1fcndsb2NrIGxvY2tlZCBmb3IgcmVhZGluZywgc28gbm8gcG93ZXJkb21haW4gc3RydWN0dXJlIG1hbmlwdWxhdGlvbgorICogZnVuY3Rpb25zIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgY2FsbGJhY2ssIGFsdGhvdWdoIGhhcmR3YXJlIHBvd2VyZG9tYWluCisgKiBjb250cm9sIGZ1bmN0aW9ucyBhcmUgZmluZS4KKyAqLworaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCXZvaWQgKnVzZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCXJldCA9IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhmbiwgdXNlcik7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggM2E1MjljNy4uNTRkZmViNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0xMDksMTYgKzEwOSw2IEBACiAJCS5yZWdzaGlmdAk9IDIsCiAJCS51YXJ0Y2xrCT0gT01BUDI0WFhfQkFTRV9CQVVEICogMTYsCiAJfSwgewotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQ0X0JBU0UpLAotCQkubWFwYmFzZQk9IE9NQVBfVUFSVDRfQkFTRSwKLQkJLmlycQkJPSA3MCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAotCX0sIHsKLSNlbmRpZgogCQkuZmxhZ3MJCT0gMAogCX0KIH07CkBAIC0xMjYsNyArMTE2LDcgQEAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YTNbXSA9IHsKIAl7Ci0JCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQ0X0JBU0UpLAorCQkubWVtYmFzZQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUF9VQVJUNF9CQVNFKSwKIAkJLm1hcGJhc2UJPSBPTUFQX1VBUlQ0X0JBU0UsCiAJCS5pcnEJCT0gNzAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKQEAgLTU3OSw3ICs1NjksNyBAQAogCXsKIAkJLnBkZXYgPSB7CiAJCQkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAotCQkJLmlkCQkJPSAzCisJCQkuaWQJCQk9IDMsCiAJCQkuZGV2CQkJPSB7CiAJCQkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YTMsCiAJCQl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggODljOTkyYi4uYTZmOGVhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC0yMSw2ICsyMSwxMSBAQAogCiBjb25maWcgQ1BVX1BYQTkzNQogCWJvb2wgIlBYQTkzNSAoY29kZW5hbWUgVGF2b3ItUDY1KSIKKwlzZWxlY3QgQ1BVX1BYQTkzMAorCitjb25maWcgQ1BVX1BYQTk1MAorCWJvb2wgIlBYQTk1MCAoY29kZW5hbWUgVGF2b3ItUFYyKSIKKwlzZWxlY3QgQ1BVX1BYQTkzMAogCiBlbmRtZW51CiAKQEAgLTc5LDYgKzg0LDEyIEBACiAJYm9vbCAiTmVjIE1vYmlsZXBybyA5MDAvYyIKIAlzZWxlY3QgUFhBMjV4CiAKK2NvbmZpZyBNQUNIX0JBTExPT04zCisJYm9vbCAiQmFsbG9vbiAzIGJvYXJkIgorCXNlbGVjdCBQWEEyN3gKKwlzZWxlY3QgSVdNTVhUCisJc2VsZWN0IFBYQV9IQVZFX0JPQVJEX0lSUVMKKwogY29uZmlnIEFSQ0hfUFhBX0lEUAogCWJvb2wgIkFjY2VsZW50IFhzY2FsZSBJRFAiCiAJc2VsZWN0IFBYQTI1eApAQCAtMzcxLDYgKzM4MiwxNSBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFBhbG0gVHVuZ3N0ZW58RTIKIAkgIGhhbmRoZWxkIGNvbXB1dGVyLgogCitjb25maWcgTUFDSF9QQUxNVEMKKwlib29sICJQYWxtIFR1bmdzdGVufEMiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX1BYQV9QQUxNCisJc2VsZWN0IFBYQTI1eAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBQYWxtIFR1bmdzdGVufEMKKwkgIGhhbmRoZWxkIGNvbXB1dGVyLgorCiBjb25maWcgTUFDSF9QQUxNVDUKIAlib29sICJQYWxtIFR1bmdzdGVufFQ1IgogCWRlZmF1bHQgeQpAQCAtNDU4LDYgKzQ3OCw3IEBACiAJc2VsZWN0IFBYQTI3eAogCXNlbGVjdCBJV01NWFQKIAlzZWxlY3QgSEFWRV9QV00KKwlzZWxlY3QgUFhBX0hBVkVfQk9BUkRfSVJRUwogCiBjb25maWcgTUFDSF9FWlhfQTc4MAogCWJvb2wgIk1vdG9yb2xhIEVaWCBBNzgwIgpAQCAtNDg5LDYgKzUxMCwyMSBAQAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gUFhBX0VaWAogCitjb25maWcgTUFDSF9YQ0VQCisJYm9vbCAiSXNrcmF0ZWwgRWxlY3Ryb25pY3MgWENFUCIKKwlzZWxlY3QgUFhBMjV4CisJc2VsZWN0IE1URAorCXNlbGVjdCBNVERfUEFSVElUSU9OUworCXNlbGVjdCBNVERfUEhZU01BUAorCXNlbGVjdCBNVERfQ0ZJX0lOVEVMRVhUCisJc2VsZWN0IE1URF9DRkkKKwlzZWxlY3QgTVREX0NIQVIKKwlzZWxlY3QgU01DOTFYCisJc2VsZWN0IFBYQV9TU1AKKwloZWxwCisJICBQWEEyNTUgYmFzZWQgU2luZ2xlIEJvYXJkIENvbXB1dGVyIHdpdGggU01DIDkxQzExMSBldGhlcm5ldCBjaGlwIGFuZCA2NCBNQiBvZiBmbGFzaC4KKwkgIFR1bmVkIGZvciB1c2FnZSBpbiBMaWJlcmEgaW5zdHJ1bWVudHMgZm9yIHBhcnRpY2xlIGFjY2VsZXJhdG9ycy4KKwogZW5kbWVudQogCiBjb25maWcgUFhBMjV4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IGQ0YzYxMjIuLmYxMGUxNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBACiBvYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKQkrPSBsdWJib2NrLm8KIG9iai0kKENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwKSArPSBscGQyNzAubwogb2JqLSQoQ09ORklHX01BQ0hfTUFJTlNUT05FKQkrPSBtYWluc3RvbmUubworb2JqLSQoQ09ORklHX01BQ0hfQkFMTE9PTjMpCSs9IGJhbGxvb24zLm8KIG9iai0kKENPTkZJR19NQUNIX01QOTAwQykJKz0gbXA5MDAubwogb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0lEUCkJKz0gaWRwLm8KIG9iai0kKENPTkZJR19NQUNIX1RSSVpFUFM0KQkrPSB0cml6ZXBzNC5vCkBAIC01OCw2ICs1OSw3IEBACiBvYmotJChDT05GSUdfTUFDSF9FNDAwKQkJKz0gZTQwMC5vCiBvYmotJChDT05GSUdfTUFDSF9FODAwKQkJKz0gZTgwMC5vCiBvYmotJChDT05GSUdfTUFDSF9QQUxNVEUyKQkrPSBwYWxtdGUyLm8KK29iai0kKENPTkZJR19NQUNIX1BBTE1UQykJKz0gcGFsbXRjLm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1UNSkJKz0gcGFsbXQ1Lm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1UWCkJKz0gcGFsbXR4Lm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1MRCkJKz0gcGFsbWxkLm8KQEAgLTc4LDYgKzgwLDggQEAKIG9iai0kKENPTkZJR19NQUNIX0NNX1gzMDApICAgICAgKz0gY20teDMwMC5vCiBvYmotJChDT05GSUdfUFhBX0VaWCkgICAgICAgICAgICs9IGV6eC5vCiAKK29iai0kKENPTkZJR19NQUNIX1hDRVApICAgICAgICAgKz0geGNlcC5vCisKIG9iai0kKENPTkZJR19NQUNIX0lOVEVMTU9URTIpICAgKz0gaW1vdGUyLm8KIG9iai0kKENPTkZJR19NQUNIX1NUQVJHQVRFMikJKz0gc3RhcmdhdGUyLm8KIG9iai0kKENPTkZJR19NQUNIX0NTQjcyNikJKz0gY3NiNzI2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMzEzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCkBAIC0wLDAgKzEsMzYxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgQmFsbG9vbmJvYXJkLm9yZyBCYWxsb29uMyBib2FyZC4KKyAqCisgKiAgQXV0aG9yOglOaWNrIEJhbmUsIFdvb2tleSwgSm9uYXRoYW4gTWNEb3dlbGwKKyAqICBDcmVhdGVkOglKdW5lLCAyMDA2CisgKiAgQ29weXJpZ2h0OglUb2J5IENodXJjaGlsbCBMdGQKKyAqICBEZXJpdmVkIGZyb20gbWFpbnN0b25lLmMsIGJ5IE5pY28gUGl0cmUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9iYWxsb29uMy5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3VkYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2lycV9lbmFibGVkOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxsb29uM19mZWF0dXJlc19wcmVzZW50ID0KKwkJKDEgPDwgQkFMTE9PTjNfRkVBVFVSRV9PSENJKSB8ICgxIDw8IEJBTExPT04zX0ZFQVRVUkVfQ0YpIHwKKwkJKDEgPDwgQkFMTE9PTjNfRkVBVFVSRV9BVURJTykgfAorCQkoMSA8PCBCQUxMT09OM19GRUFUVVJFX1RPUFBPTFkpOworCitpbnQgYmFsbG9vbjNfaGFzKGVudW0gYmFsbG9vbjNfZmVhdHVyZXMgZmVhdHVyZSkKK3sKKwlyZXR1cm4gKGJhbGxvb24zX2ZlYXR1cmVzX3ByZXNlbnQgJiAoMSA8PCBmZWF0dXJlKSkgPyAxIDogMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJhbGxvb24zX2hhcyk7CisKK2ludCBfX2luaXQgcGFyc2VfYmFsbG9vbjNfZmVhdHVyZXMoY2hhciAqYXJnKQoreworCWlmICghYXJnKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzdHJpY3Rfc3RydG91bChhcmcsIDAsICZiYWxsb29uM19mZWF0dXJlc19wcmVzZW50KTsKK30KK2Vhcmx5X3BhcmFtKCJiYWxsb29uM19mZWF0dXJlcyIsIHBhcnNlX2JhbGxvb24zX2ZlYXR1cmVzKTsKKworc3RhdGljIHZvaWQgYmFsbG9vbjNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgYmFsbG9vbjNfaXJxID0gKGlycSAtIEJBTExPT04zX0lSUSgwKSk7CisJYmFsbG9vbjNfaXJxX2VuYWJsZWQgJj0gfigxIDw8IGJhbGxvb24zX2lycSk7CisJX19yYXdfd3JpdGVsKH5iYWxsb29uM19pcnFfZW5hYmxlZCwgQkFMTE9PTjNfSU5UX0NPTlRST0xfUkVHKTsKK30KKworc3RhdGljIHZvaWQgYmFsbG9vbjNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBiYWxsb29uM19pcnEgPSAoaXJxIC0gQkFMTE9PTjNfSVJRKDApKTsKKwliYWxsb29uM19pcnFfZW5hYmxlZCB8PSAoMSA8PCBiYWxsb29uM19pcnEpOworCV9fcmF3X3dyaXRlbCh+YmFsbG9vbjNfaXJxX2VuYWJsZWQsIEJBTExPT04zX0lOVF9DT05UUk9MX1JFRyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmFsbG9vbjNfaXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIkZQR0EiLAorCS5hY2sJCT0gYmFsbG9vbjNfbWFza19pcnEsCisJLm1hc2sJCT0gYmFsbG9vbjNfbWFza19pcnEsCisJLnVubWFzawkJPSBiYWxsb29uM191bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgYmFsbG9vbjNfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGxvbmcgcGVuZGluZyA9IF9fcmF3X3JlYWRsKEJBTExPT04zX0lOVF9DT05UUk9MX1JFRykgJgorCQkJCQliYWxsb29uM19pcnFfZW5hYmxlZDsKKworCWRvIHsKKwkJLyogY2xlYXIgdXNlbGVzcyBlZGdlIG5vdGlmaWNhdGlvbiAqLworCQlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQkJZGVzYy0+Y2hpcC0+YWNrKEJBTExPT04zX0FVWF9OSVJRKTsKKwkJd2hpbGUgKHBlbmRpbmcpIHsKKwkJCWlycSA9IEJBTExPT04zX0lSUSgwKSArIF9fZmZzKHBlbmRpbmcpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJCQlwZW5kaW5nICY9IHBlbmRpbmcgLSAxOworCQl9CisJCXBlbmRpbmcgPSBfX3Jhd19yZWFkbChCQUxMT09OM19JTlRfQ09OVFJPTF9SRUcpICYKKwkJCQliYWxsb29uM19pcnFfZW5hYmxlZDsKKwl9IHdoaWxlIChwZW5kaW5nKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGlycTsKKworCXB4YTI3eF9pbml0X2lycSgpOworCS8qIHNldHVwIGV4dHJhIEJhbGxvb24zIGlycXMgKi8KKwlmb3IgKGlycSA9IEJBTExPT04zX0lSUSgwKTsgaXJxIDw9IEJBTExPT04zX0lSUSg3KTsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJmJhbGxvb24zX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoQkFMTE9PTjNfQVVYX05JUlEsIGJhbGxvb24zX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX3R5cGUoQkFMTE9PTjNfQVVYX05JUlEsIElSUV9UWVBFX0VER0VfRkFMTElORyk7CisKKwlwcl9kZWJ1ZygiJXM6IGNoYWluZWQgaGFuZGxlciBpbnN0YWxsZWQgLSBpcnEgJWQgYXV0b21hdGljYWxseSAiCisJCSJlbmFibGVkXG4iLCBfX2Z1bmNfXywgQkFMTE9PTjNfQVVYX05JUlEpOworfQorCitzdGF0aWMgdm9pZCBiYWxsb29uM19iYWNrbGlnaHRfcG93ZXIoaW50IG9uKQoreworCXByX2RlYnVnKCIlczogcG93ZXIgaXMgJXNcbiIsIF9fZnVuY19fLCBvbiA/ICJvbiIgOiAib2ZmIik7CisJZ3Bpb19zZXRfdmFsdWUoQkFMTE9PTjNfR1BJT19SVU5fQkFDS0xJR0hULCBvbik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2xjZF9waW5fY29uZmlnW10gPSB7CisJLyogTENEIC0gMTZicHAgQWN0aXZlIFRGVCAqLworCUdQSU81OF9MQ0RfTEREXzAsCisJR1BJTzU5X0xDRF9MRERfMSwKKwlHUElPNjBfTENEX0xERF8yLAorCUdQSU82MV9MQ0RfTEREXzMsCisJR1BJTzYyX0xDRF9MRERfNCwKKwlHUElPNjNfTENEX0xERF81LAorCUdQSU82NF9MQ0RfTEREXzYsCisJR1BJTzY1X0xDRF9MRERfNywKKwlHUElPNjZfTENEX0xERF84LAorCUdQSU82N19MQ0RfTEREXzksCisJR1BJTzY4X0xDRF9MRERfMTAsCisJR1BJTzY5X0xDRF9MRERfMTEsCisJR1BJTzcwX0xDRF9MRERfMTIsCisJR1BJTzcxX0xDRF9MRERfMTMsCisJR1BJTzcyX0xDRF9MRERfMTQsCisJR1BJTzczX0xDRF9MRERfMTUsCisJR1BJTzc0X0xDRF9GQ0xLLAorCUdQSU83NV9MQ0RfTENMSywKKwlHUElPNzZfTENEX1BDTEssCisJR1BJTzc3X0xDRF9CSUFTLAorCisJR1BJTzk5X0dQSU8sCQkvKiBCYWNrbGlnaHQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIGJhbGxvb24zX2xjZF9tb2Rlc1tdID0geworCXsKKwkJLnBpeGNsb2NrCQk9IDM4MDAwLAorCQkueHJlcwkJCT0gNDgwLAorCQkueXJlcwkJCT0gNjQwLAorCQkuYnBwCQkJPSAxNiwKKwkJLmhzeW5jX2xlbgkJPSA4LAorCQkubGVmdF9tYXJnaW4JCT0gOCwKKwkJLnJpZ2h0X21hcmdpbgkJPSA4LAorCQkudnN5bmNfbGVuCQk9IDIsCisJCS51cHBlcl9tYXJnaW4JCT0gNCwKKwkJLmxvd2VyX21hcmdpbgkJPSA1LAorCQkuc3luYwkJCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gYmFsbG9vbjNfcHhhZmJfaW5mbyA9IHsKKwkubW9kZXMJCQk9IGJhbGxvb24zX2xjZF9tb2RlcywKKwkubnVtX21vZGVzCQk9IEFSUkFZX1NJWkUoYmFsbG9vbjNfbGNkX21vZGVzKSwKKwkubGNkX2Nvbm4JCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKKwkucHhhZmJfYmFja2xpZ2h0X3Bvd2VyCT0gYmFsbG9vbjNfYmFja2xpZ2h0X3Bvd2VyLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfbW1jX3Bpbl9jb25maWdbXSA9IHsKKwlHUElPMzJfTU1DX0NMSywKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCUdQSU8xMTJfTU1DX0NNRCwKK307CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCit7CisJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoKDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKKwkJcHJfZGVidWcoIiVzOiBvblxuIiwgX19mdW5jX18pOworCQkvKiBGSVhNRSBzb21ldGhpbmcgdG8gcHJvZCBoZXJlPyAqLworCX0gZWxzZSB7CisJCXByX2RlYnVnKCIlczogb2ZmXG4iLCBfX2Z1bmNfXyk7CisJCS8qIEZJWE1FIHNvbWV0aGluZyB0byBwcm9kIGhlcmU/ICovCisJfQorfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGJhbGxvb24zX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuc2V0cG93ZXIgCT0gYmFsbG9vbjNfbWNpX3NldHBvd2VyLAorfTsKKworc3RhdGljIGludCBiYWxsb29uM191ZGNfaXNfY29ubmVjdGVkKHZvaWQpCit7CisJcHJfZGVidWcoIiVzOiB1ZGMgY29ubmVjdGVkXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX3VkY19jb21tYW5kKGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0NPTk5FQ1Q6CisJCVVQMk9DUiB8PSAoVVAyT0NSX0RQUFVFICsgVVAyT0NSX0RQUFVCRSk7CisJCXByX2RlYnVnKCIlczogY29ubmVjdFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6CisJCVVQMk9DUiAmPSB+VVAyT0NSX0RQUFVFOworCQlwcl9kZWJ1ZygiJXM6IGRpc2Nvbm5lY3RcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIGJhbGxvb24zX3VkY19pbmZvID0geworCS51ZGNfaXNfY29ubmVjdGVkID0gYmFsbG9vbjNfdWRjX2lzX2Nvbm5lY3RlZCwKKwkudWRjX2NvbW1hbmQgICAgICA9IGJhbGxvb24zX3VkY19jb21tYW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxsb29uM19vaGNpX3Bpbl9jb25maWdbXSA9IHsKKwlHUElPODhfVVNCSDFfUFdSLAorCUdQSU84OV9VU0JIMV9QRU4sCit9OworCitzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBiYWxsb29uM19vaGNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLnBvcnRfbW9kZQk9IFBNTV9QRVJQT1JUX01PREUsCisJLmZsYWdzCQk9IEVOQUJMRV9QT1JUX0FMTCB8IFBPV0VSX0NPTlRST0xfTE9XIHwgUE9XRVJfU0VOU0VfTE9XLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogU2VsZWN0IEJUVUFSVCAnQ09NMS90dHlTMCcgYXMgSU8gb3B0aW9uIGZvciBwaW5zIDQyLzQzLzQ0LzQ1ICovCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ0X0JUVUFSVF9DVFMsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwkvKiBXYWtldXAgR1BJTyAqLworCUdQSU8xX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAorCisJLyogTkFORCAmIElETEUgTEVEIEdQSU9zICovCisJR1BJTzlfR1BJTywKKwlHUElPMTBfR1BJTywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgYmFsbG9vbjNfZ3Bpb19sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOmlkbGUiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19HUElPX0xFRF9JRExFLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOm5hbmQiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19HUElPX0xFRF9OQU5ELAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfZ3Bpb19sZWRzX3BsYXRmb3JtX2RhdGEgPSB7CisJLmxlZHMJCT0gYmFsbG9vbjNfZ3Bpb19sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoYmFsbG9vbjNfZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJhbGxvb24zbGVkX2RldmljZSA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmJhbGxvb24zX2dwaW9fbGVkc19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYmFsbG9vbjNfaW5pdCh2b2lkKQoreworCXByX2luZm8oIkluaXRpYWxpc2luZyBCYWxsb29uM1xuIik7CisKKwkvKiBzeXN0ZW0gYnVzIGFyYml0ZXIgc2V0dGluZworCSAqIC0gQ29yZV9QYXJrCisJICogLSBMQ0Rfd3Q6RE1BX3d0OkNPUkVfV3QgPSAyOjM6NAorCSAqLworCUFSQl9DTlRSTCA9IEFSQl9DT1JFX1BBUksgfCAweDIzNDsKKworCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CisJaWYgKGJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX0FVRElPKSkKKwkJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CisKKwlpZiAoYmFsbG9vbjNfaGFzKEJBTExPT04zX0ZFQVRVUkVfVE9QUE9MWSkpIHsKKwkJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfbGNkX3Bpbl9jb25maWcpKTsKKwkJZ3Bpb19yZXF1ZXN0KEJBTExPT04zX0dQSU9fUlVOX0JBQ0tMSUdIVCwKKwkJCSJMQ0QgQmFja2xpZ2h0IFBvd2VyIik7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChCQUxMT09OM19HUElPX1JVTl9CQUNLTElHSFQsIDEpOworCQlzZXRfcHhhX2ZiX2luZm8oJmJhbGxvb24zX3B4YWZiX2luZm8pOworCX0KKworCWlmIChiYWxsb29uM19oYXMoQkFMTE9PTjNfRkVBVFVSRV9NTUMpKSB7CisJCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX21tY19waW5fY29uZmlnKSk7CisJCXB4YV9zZXRfbWNpX2luZm8oJmJhbGxvb24zX21jaV9wbGF0Zm9ybV9kYXRhKTsKKwl9CisJcHhhX3NldF9maWNwX2luZm8oJmJhbGxvb24zX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CisJaWYgKGJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX09IQ0kpKSB7CisJCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX29oY2lfcGluX2NvbmZpZykpOworCQlweGFfc2V0X29oY2lfaW5mbygmYmFsbG9vbjNfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKKwl9CisJcHhhX3NldF91ZGNfaW5mbygmYmFsbG9vbjNfdWRjX2luZm8pOworCisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfcGluX2NvbmZpZykpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiYWxsb29uM2xlZF9kZXZpY2UpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGJhbGxvb24zX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsJLyogQ1BMRC9GUEdBICovCisJCS52aXJ0dWFsCT0gIEJBTExPT04zX0ZQR0FfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEJBTExPT04zX0ZQR0FfUEhZUyksCisJCS5sZW5ndGgJCT0gQkFMTE9PTjNfRlBHQV9MRU5HVEgsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQoYmFsbG9vbjNfaW9fZGVzYywgQVJSQVlfU0laRShiYWxsb29uM19pb19kZXNjKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQkFMTE9PTjMsICJCYWxsb29uMyIpCisJLyogTWFpbnRhaW5lcjogTmljayBCYW5lLiAqLworCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IGJhbGxvb24zX21hcF9pbywKKwkuaW5pdF9pcnEJPSBiYWxsb29uM19pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gYmFsbG9vbjNfaW5pdCwKKwkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MTAwLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCmluZGV4IDU1OTliY2UuLjk3OGEzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaApAQCAtMTIsNyArMTIsNiBAQAogCXVuc2lnbmVkIGludAkJY2tlbjsKIAl1bnNpZ25lZCBpbnQJCWRlbGF5OwogCXVuc2lnbmVkIGludAkJZW5hYmxlZDsKLQlzdHJ1Y3QgY2xrCQkqb3RoZXI7CiB9OwogCiAjZGVmaW5lIElOSVRfQ0xLUkVHKF9jbGssX2Rldm5hbWUsX2Nvbm5hbWUpCQlcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKaW5kZXggMWQyY2VjMi4uZWVhNzhiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwpAQCAtMTMsMTMgKzEzLDE4IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9ydGMtdjMwMjAuaD4KICNpbmNsdWRlIDx2aWRlby9tYnhmYi5oPgogCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9saWJlcnRhc19zcGkuaD4KKwogI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtMzQsNiArMzksMTAgQEAKIC8qIE1NQyBwb3dlciBlbmFibGUgKi8KICNkZWZpbmUgR1BJTzEwNV9NTUNfUE9XRVIJKDEwNSkKIAorLyogV0xBTiBHUElPUyAqLworI2RlZmluZSBHUElPMTlfV0xBTl9TVFJBUAkoMTkpCisjZGVmaW5lIEdQSU8xMDJfV0xBTl9SU1QJKDEwMikKKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY214MjcwX3Bpbl9jb25maWdbXSA9IHsKIAkvKiBBQyc5NyAqLwogCUdQSU8yOF9BQzk3X0JJVENMSywKQEAgLTk0LDggKzEwMyw4IEBACiAJR1BJTzI2X1NTUDFfUlhELAogCiAJLyogU1NQMiAqLwotCUdQSU8xOV9TU1AyX1NDTEssCi0JR1BJTzE0X1NTUDJfU0ZSTSwKKwlHUElPMTlfR1BJTywJLyogU1NQMiBjbG9jayBpcyB1c2VkIGFzIEdQSU8gZm9yIExpYmVydGFzIHBpbi1zdHJhcCAqLworCUdQSU8xNF9HUElPLAogCUdQSU84N19TU1AyX1RYRCwKIAlHUElPODhfU1NQMl9SWEQsCiAKQEAgLTEyMyw2ICsxMzIsNyBAQAogCUdQSU8wX0dQSU8JfCBXQUtFVVBfT05fRURHRV9CT1RILAogCUdQSU8xMDVfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTU1DL1NEIHBvd2VyICovCiAJR1BJTzUzX0dQSU8sCQkJCS8qIFBDIGNhcmQgcmVzZXQgKi8KKwlHUElPMTAyX0dQSU8sCQkJCS8qIFdMQU4gcmVzZXQgKi8KIAogCS8qIE5BTkQgY29udHJvbHMgKi8KIAlHUElPMTFfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTkFORCBDRSMgKi8KQEAgLTEzMSw2ICsxNDEsNyBAQAogCS8qIGludGVycnVwdHMgKi8KIAlHUElPMTBfR1BJTywJLyogRE05MDAwIGludGVycnVwdCAqLwogCUdQSU84M19HUElPLAkvKiBNTUMgY2FyZCBkZXRlY3QgKi8KKwlHUElPOTVfR1BJTywJLyogV0xBTiBpbnRlcnJ1cHQgKi8KIH07CiAKIC8qIFYzMDIwIFJUQyAqLwpAQCAtMjcxLDU2ICsyODIsMTIgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfTU9EVUxFKQotc3RhdGljIGludCBjbXgyNzBfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgaXJxX2hhbmRsZXJfdCBjbXgyNzBfZGV0ZWN0X2ludCwKLQkJCSAgIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMTA1X01NQ19QT1dFUiwgIk1NQy9TRCBwb3dlciIpOwotCWlmIChlcnIpIHsKLQkJZGV2X3dhcm4oZGV2LCAicG93ZXIgZ3BpbyB1bmF2YWlsYWJsZVxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMDVfTU1DX1BPV0VSLCAwKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKENNWDI3MF9NTUNfSVJRLCBjbXgyNzBfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlncGlvX2ZyZWUoR1BJTzEwNV9NTUNfUE9XRVIpOwotCQlkZXZfZXJyKGRldiwgImNteDI3MF9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCIKLQkJCSIgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBjbXgyNzBfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgewotCQlkZXZfZGJnKGRldiwgInBvd2VyIG9uXG4iKTsKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzEwNV9NTUNfUE9XRVIsIDApOwotCX0gZWxzZSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDVfTU1DX1BPV0VSLCAxKTsKLQkJZGV2X2RiZyhkZXYsICJwb3dlciBvZmZcbiIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY214MjcwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShDTVgyNzBfTU1DX0lSUSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU8xMDVfTU1DX1BPV0VSKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbXgyNzBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjbXgyNzBfbWNpX2luaXQsCi0JLnNldHBvd2VyIAk9IGNteDI3MF9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gY214MjcwX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPODNfTU1DX0lSUSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU8xMDVfTU1DX1BPV0VSLAorCS5ncGlvX3Bvd2VyX2ludmVydAk9IDEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY214MjcwX2luaXRfbW1jKHZvaWQpCkBAIC0zMzEsNiArMjk4LDEwMCBAQAogc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X21tYyh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYKSB8fCBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgY21feDI3MF9zcGlfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSAxLAorCS5lbmFibGVfZG1hCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIGNtX3gyNzBfbGliZXJ0YXNfY2hpcCA9IHsKKwkucnhfdGhyZXNob2xkCT0gMSwKKwkudHhfdGhyZXNob2xkCT0gMSwKKwkudGltZW91dAk9IDEwMDAsCisJLmdwaW9fY3MJPSAxNCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNtX3gyNzBfbGliZXJ0YXNfcGluX2NvbmZpZ1tdID0geworCS8qIFNTUDIgKi8KKwlHUElPMTlfU1NQMl9TQ0xLLAorCUdQSU8xNF9HUElPLAorCUdQSU84N19TU1AyX1RYRCwKKwlHUElPODhfU1NQMl9SWEQsCisKK307CisKK3N0YXRpYyBpbnQgY21feDI3MF9saWJlcnRhc19zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCBlcnIgPSBncGlvX3JlcXVlc3QoR1BJTzE5X1dMQU5fU1RSQVAsICJXTEFOIFNUUkFQIik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMTAyX1dMQU5fUlNULCAiV0xBTiBSU1QiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX3N0cmFwOworCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMDJfV0xBTl9SU1QsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc3RyYXA7CisJbXNsZWVwKDEwMCk7CisKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJTzE5X1dMQU5fU1RSQVAsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc3RyYXA7CisJbXNsZWVwKDEwMCk7CisKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjbV94MjcwX2xpYmVydGFzX3Bpbl9jb25maWcpKTsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDJfV0xBTl9SU1QsIDEpOworCW1zbGVlcCgxMDApOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpX3NldHVwKHNwaSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfc3RyYXA6CisJZ3Bpb19mcmVlKEdQSU8xOV9XTEFOX1NUUkFQKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY21feDI3MF9saWJlcnRhc190ZWFyZG93bihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDJfV0xBTl9SU1QsIDApOworCWdwaW9fZnJlZShHUElPMTAyX1dMQU5fUlNUKTsKKwlncGlvX2ZyZWUoR1BJTzE5X1dMQU5fU1RSQVApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsaWJlcnRhc19zcGlfcGxhdGZvcm1fZGF0YSBjbV94MjcwX2xpYmVydGFzX3BkYXRhID0geworCS51c2VfZHVtbXlfd3JpdGVzCT0gMSwKKwkuc2V0dXAJCQk9IGNtX3gyNzBfbGliZXJ0YXNfc2V0dXAsCisJLnRlYXJkb3duCQk9IGNtX3gyNzBfbGliZXJ0YXNfdGVhcmRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGNtX3gyNzBfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzCQk9ICJsaWJlcnRhc19zcGkiLAorCQkubWF4X3NwZWVkX2h6CQk9IDEzMDAwMDAwLAorCQkuYnVzX251bQkJPSAyLAorCQkuaXJxCQkJPSBncGlvX3RvX2lycSg5NSksCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJmNtX3gyNzBfbGliZXJ0YXNfY2hpcCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmNtX3gyNzBfbGliZXJ0YXNfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbXgyNzBfaW5pdF9zcGkodm9pZCkKK3sKKwlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZjbV94MjcwX3NwaV9pbmZvKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhBUlJBWV9BTkRfU0laRShjbV94MjcwX3NwaV9kZXZpY2VzKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X3NwaSh2b2lkKSB7fQorI2VuZGlmCisKIHZvaWQgX19pbml0IGNteDI3MF9pbml0KHZvaWQpCiB7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY214MjcwX3Bpbl9jb25maWcpKTsKQEAgLTM0Myw0ICs0MDQsNSBAQAogCWNteDI3MF9pbml0X21tYygpOwogCWNteDI3MF9pbml0X29oY2koKTsKIAljbXgyNzBfaW5pdF8yNzAwRygpOworCWNteDI3MF9pbml0X3NwaSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCmluZGV4IDQ2NWRhMjYuLjEwMjkxNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKQEAgLTQzLDEwICs0MywxMCBAQAogCiAjZGVmaW5lIENNX1gzMDBfRVRIX1BIWVMJMHgwODAwMDAxMAogCi0jZGVmaW5lIEdQSU84Ml9NTUMyX0lSUQkJKDgyKQotI2RlZmluZSBHUElPODVfTU1DMl9XUAkJKDg1KQorI2RlZmluZSBHUElPODJfTU1DX0lSUQkJKDgyKQorI2RlZmluZSBHUElPODVfTU1DX1dQCQkoODUpCiAKLSNkZWZpbmUJQ01fWDMwMF9NTUMyX0lSUQlJUlFfR1BJTyhHUElPODJfTU1DMl9JUlEpCisjZGVmaW5lCUNNX1gzMDBfTU1DX0lSUQkJSVJRX0dQSU8oR1BJTzgyX01NQ19JUlEpCiAKICNkZWZpbmUgR1BJTzk1X1JUQ19DUwkJKDk1KQogI2RlZmluZSBHUElPOTZfUlRDX1dSCQkoOTYpCkBAIC0yOTIsODIgKzI5MiwzNSBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NTUMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19NT0RVTEUpCi0vKiBUaGUgZmlyc3QgTU1DIHNsb3Qgb2YgQ00tWDMwMCBpcyBoYXJkd2lyZWQgdG8gTGliZXJ0YXMgY2FyZCBhbmQgaGFzCi0gICBubyBkZXRlY3Rpb24vcm8gcGlucyAqLwotc3RhdGljIGludCBjbV94MzAwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBpcnFfaGFuZGxlcl90IGNtX3gzMDBfZGV0ZWN0X2ludCwKLQkJCSAgICB2b2lkICpkYXRhKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjbV94MzAwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5kZXRlY3RfZGVsYXkJPSAyMCwKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGNtX3gzMDBfbWNpX2luaXQsCi0JLmV4aXQJCT0gY21feDMwMF9tY2lfZXhpdCwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPODJfTU1DX0lSUSwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU84NV9NTUNfV1AsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCi1zdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU84NV9NTUMyX1dQKTsKLX0KLQorLyogVGhlIHNlY29uZCBNTUMgc2xvdCBvZiBDTS1YMzAwIGlzIGhhcmR3aXJlZCB0byBMaWJlcnRhcyBjYXJkIGFuZCBoYXMKKyAgIG5vIGRldGVjdGlvbi9ybyBwaW5zICovCiBzdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgaXJxX2hhbmRsZXJfdCBjbV94MzAwX2RldGVjdF9pbnQsCi0JCQkgICAgIHZvaWQgKmRhdGEpCisJdm9pZCAqZGF0YSkKIHsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBzZXR1cCBHUElPIGZvciBDTS1YMzAwIE1NQyBjb250cm9sbGVyCi0JICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU84Ml9NTUMyX0lSUSwgIm1tYyBjYXJkIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfY2Q7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJTzgyX01NQzJfSVJRKTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPODVfTU1DMl9XUCwgIm1tYyB3cml0ZSBwcm90ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF93cDsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPODVfTU1DMl9XUCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShDTV9YMzAwX01NQzJfSVJRLCBjbV94MzAwX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogTU1DL1NEL1NESU86ICIKLQkJCQkiY2FuJ3QgcmVxdWVzdCBjYXJkIGRldGVjdCBJUlFcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7Ci0JfQotCiAJcmV0dXJuIDA7Ci0KLWVycl9yZXF1ZXN0X2lycToKLQlncGlvX2ZyZWUoR1BJTzg1X01NQzJfV1ApOwotZXJyX3JlcXVlc3Rfd3A6Ci0JZ3Bpb19mcmVlKEdQSU84Ml9NTUMyX0lSUSk7Ci1lcnJfcmVxdWVzdF9jZDoKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBjbV94MzAwX21jaTJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZnJlZV9pcnEoQ01fWDMwMF9NTUMyX0lSUSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU84Ml9NTUMyX0lSUSk7Ci0JZ3Bpb19mcmVlKEdQSU84NV9NTUMyX1dQKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjbV94MzAwX21jaTJfaW5pdCwKLQkuZXhpdAkJPSBjbV94MzAwX21jaTJfZXhpdCwKLQkuZ2V0X3JvCQk9IGNtX3gzMDBfbWNpMl9ybywKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQkJPSBjbV94MzAwX21jaTJfaW5pdCwKKwkuZXhpdAkJCT0gY21feDMwMF9tY2kyX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGNtX3gzMDBfaW5pdF9tbWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCmluZGV4IDdjOWMzNGMuLjM3YzIzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYwpAQCAtMTcyLDYgKzE3Miw3IEBACiB7CiAJY29saWJyaV9weGEzMDBfaW5pdF9ldGgoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X29oY2koKTsKKwljb2xpYnJpX3B4YTN4eF9pbml0X25hbmQoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X2xjZCgpOwogCWNvbGlicmlfcHhhM3h4X2luaXRfbGNkKG1mcF90b19ncGlvKEdQSU8zOV9HUElPKSk7CiAJY29saWJyaV9weGEzMTBfaW5pdF9hYzk3KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMjAuYwppbmRleCBhMThkMzdiLi5lYzBlMTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKQEAgLTE0NSw3ICsxNDYsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzIwX2luaXRfbGNkKHZvaWQpIHt9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoU05EX0FDOTdfQ09ERUMpIHx8IGRlZmluZWQoU05EX0FDOTdfQ09ERUNfTU9EVUxFKQorI2lmCWRlZmluZWQoQ09ORklHX1NORF9BQzk3X0NPREVDKSB8fCBcCisJZGVmaW5lZChDT05GSUdfU05EX0FDOTdfQ09ERUNfTU9EVUxFKQogc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF9hYzk3X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewogCUdQSU8zNF9BQzk3X1NZU0NMSywKIAlHUElPMzVfQUM5N19TREFUQV9JTl8wLApAQCAtMTY0LDE1ICsxNjYsNDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTMyMF9pbml0X2FjOTcodm9pZCkge30KICNlbmRpZgogCisvKgorICogVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGlzIHZlcmlmaWVkIHRvIHdvcmsgd2l0aCB0aGUgVG9yYWRleCBPcmNoaWQKKyAqIGNhcnJpZXIgYm9hcmQKKyAqLworc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF91YXJ0X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIFVBUlQgMSBjb25maWd1cmF0aW9uIChtYXkgYmUgc2V0IGJ5IGJvb3Rsb2FkZXIpICovCisJR1BJTzk5X1VBUlQxX0NUUywKKwlHUElPMTA0X1VBUlQxX1JUUywKKwlHUElPOTdfVUFSVDFfUlhELAorCUdQSU85OF9VQVJUMV9UWEQsCisJR1BJTzEwMV9VQVJUMV9EVFIsCisJR1BJTzEwM19VQVJUMV9EU1IsCisJR1BJTzEwMF9VQVJUMV9EQ0QsCisJR1BJTzEwMl9VQVJUMV9SSSwKKworCS8qIFVBUlQgMiBjb25maWd1cmF0aW9uICovCisJR1BJTzEwOV9VQVJUMl9DVFMsCisJR1BJTzExMl9VQVJUMl9SVFMsCisJR1BJTzExMF9VQVJUMl9SWEQsCisJR1BJTzExMV9VQVJUMl9UWEQsCisKKwkvKiBVQVJUIDMgY29uZmlndXJhdGlvbiAqLworCUdQSU8zMF9VQVJUM19SWEQsCisJR1BJTzMxX1VBUlQzX1RYRCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMyMF9pbml0X3VhcnQodm9pZCkKK3sKKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMyMF91YXJ0X3Bpbl9jb25maWcpKTsKK30KKwogdm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdCh2b2lkKQogewogCWNvbGlicmlfcHhhMzIwX2luaXRfZXRoKCk7CiAJY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKCk7CisJY29saWJyaV9weGEzeHhfaW5pdF9uYW5kKCk7CiAJY29saWJyaV9weGEzMjBfaW5pdF9sY2QoKTsKIAljb2xpYnJpX3B4YTN4eF9pbml0X2xjZChtZnBfdG9fZ3BpbyhHUElPNDlfR1BJTykpOwogCWNvbGlicmlfcHhhMzIwX2luaXRfYWM5NygpOwogCWNvbGlicmlfcHhhM3h4X2luaXRfbW1jKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX21tY19waW5fY29uZmlnKSwKIAkJCQltZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8yOCkpOworCWNvbGlicmlfcHhhMzIwX2luaXRfdWFydCgpOwogfQogCiBNQUNISU5FX1NUQVJUKENPTElCUkkzMjAsICJUb3JhZGV4IENvbGlicmkgUFhBMzIwIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTN4eC5jCmluZGV4IGVhMzRlMzQuLmVmZWJhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzeHguYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPG1hY2gvY29saWJyaS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4X25hbmQuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC05NSwxMCArOTYsMTMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb2xpYnJpX3B4YTN4eF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQJCT0gY29saWJyaV9weGEzeHhfbWNpX2luaXQsCi0JLmV4aXQJCT0gY29saWJyaV9weGEzeHhfbWNpX2V4aXQsCisJLmRldGVjdF9kZWxheQkJPSAyMCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmluaXQJCQk9IGNvbGlicmlfcHhhM3h4X21jaV9pbml0LAorCS5leGl0CQkJPSBjb2xpYnJpX3B4YTN4eF9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTN4eF9pbml0X21tYyhtZnBfY2ZnX3QgKnBpbnMsIGludCBsZW4sIGludCBkZXRlY3RfcGluKQpAQCAtMTU0LDMgKzE1OCw0MyBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QWEEzeHgpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BYQTN4eF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY29saWJyaV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lICAgICAgICA9ICJib290bG9hZGVyIiwKKwkJLm9mZnNldCAgICAgID0gMCwKKwkJLnNpemUgICAgICAgID0gU1pfNTEySywKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lICAgICAgICA9ICJrZXJuZWwiLAorCQkub2Zmc2V0ICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplICAgICAgICA9IFNaXzRNLAorCQkubWFza19mbGFncyAgPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUgICAgICAgID0gInJlc2VydmVkIiwKKwkJLm9mZnNldCAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSAgICAgICAgPSBTWl8xTSwKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lICAgICAgICA9ICJmcyIsCisJCS5vZmZzZXQgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgICAgICAgID0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfbmFuZF9pbmZvID0geworCS5lbmFibGVfYXJiaXRlcgk9IDEsCisJLmtlZXBfY29uZmlnCT0gMSwKKwkucGFydHMJCT0gY29saWJyaV9uYW5kX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShjb2xpYnJpX25hbmRfcGFydGl0aW9ucyksCit9OworCit2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTN4eF9pbml0X25hbmQodm9pZCkKK3sKKwlweGEzeHhfc2V0X25hbmRfaW5mbygmY29saWJyaV9uYW5kX2luZm8pOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCmluZGV4IDUzNjNlMWEuLmI1MzZiNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2NvcmdpX2xjZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9zaGFycHNsLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0xMDQsNiArMTA1LDI4IEBACiAJR1BJTzZfTU1DX0NMSywKIAlHUElPOF9NTUNfQ1MwLAogCisJLyogR1BJTyBNYXRyaXggS2V5cGFkICovCisJR1BJTzY2X0dQSU8sCS8qIGNvbHVtbiAwICovCisJR1BJTzY3X0dQSU8sCS8qIGNvbHVtbiAxICovCisJR1BJTzY4X0dQSU8sCS8qIGNvbHVtbiAyICovCisJR1BJTzY5X0dQSU8sCS8qIGNvbHVtbiAzICovCisJR1BJTzcwX0dQSU8sCS8qIGNvbHVtbiA0ICovCisJR1BJTzcxX0dQSU8sCS8qIGNvbHVtbiA1ICovCisJR1BJTzcyX0dQSU8sCS8qIGNvbHVtbiA2ICovCisJR1BJTzczX0dQSU8sCS8qIGNvbHVtbiA3ICovCisJR1BJTzc0X0dQSU8sCS8qIGNvbHVtbiA4ICovCisJR1BJTzc1X0dQSU8sCS8qIGNvbHVtbiA5ICovCisJR1BJTzc2X0dQSU8sCS8qIGNvbHVtbiAxMCAqLworCUdQSU83N19HUElPLAkvKiBjb2x1bW4gMTEgKi8KKwlHUElPNThfR1BJTywJLyogcm93IDAgKi8KKwlHUElPNTlfR1BJTywJLyogcm93IDEgKi8KKwlHUElPNjBfR1BJTywJLyogcm93IDIgKi8KKwlHUElPNjFfR1BJTywJLyogcm93IDMgKi8KKwlHUElPNjJfR1BJTywJLyogcm93IDQgKi8KKwlHUElPNjNfR1BJTywJLyogcm93IDUgKi8KKwlHUElPNjRfR1BJTywJLyogcm93IDYgKi8KKwlHUElPNjVfR1BJTywJLyogcm93IDcgKi8KKwogCS8qIEdQSU8gKi8KIAlHUElPOV9HUElPLAkvKiBDT1JHSV9HUElPX25TRF9ERVRFQ1QgKi8KIAlHUElPN19HUElPLAkvKiBDT1JHSV9HUElPX25TRF9XUCAqLwpAQCAtMjY3LDkgKzI5MCwxMTUgQEAKIC8qCiAgKiBDb3JnaSBLZXlib2FyZCBEZXZpY2UKICAqLworI2RlZmluZSBDT1JHSV9LRVlfQ0FMRU5ERVIJS0VZX0YxCisjZGVmaW5lIENPUkdJX0tFWV9BRERSRVNTCUtFWV9GMgorI2RlZmluZSBDT1JHSV9LRVlfRk4JCUtFWV9GMworI2RlZmluZSBDT1JHSV9LRVlfQ0FOQ0VMCUtFWV9GNAorI2RlZmluZSBDT1JHSV9LRVlfT0ZGCQlLRVlfU1VTUEVORAorI2RlZmluZSBDT1JHSV9LRVlfRVhPSwkJS0VZX0Y1CisjZGVmaW5lIENPUkdJX0tFWV9FWENBTkNFTAlLRVlfRjYKKyNkZWZpbmUgQ09SR0lfS0VZX0VYSk9HRE9XTglLRVlfRjcKKyNkZWZpbmUgQ09SR0lfS0VZX0VYSk9HVVAJS0VZX0Y4CisjZGVmaW5lIENPUkdJX0tFWV9KQVAxCQlLRVlfTEVGVENUUkwKKyNkZWZpbmUgQ09SR0lfS0VZX0pBUDIJCUtFWV9MRUZUQUxUCisjZGVmaW5lIENPUkdJX0tFWV9NQUlMCQlLRVlfRjEwCisjZGVmaW5lIENPUkdJX0tFWV9PSwkJS0VZX0YxMQorI2RlZmluZSBDT1JHSV9LRVlfTUVOVQkJS0VZX0YxMgorCitzdGF0aWMgY29uc3QgdWludDMyX3QgY29yZ2lrYmRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDEsIEtFWV8xKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfNSksCisJS0VZKDAsIDQsIEtFWV82KSwKKwlLRVkoMCwgNSwgS0VZXzcpLAorCUtFWSgwLCA2LCBLRVlfOSksCisJS0VZKDAsIDcsIEtFWV8wKSwKKwlLRVkoMCwgOCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDEsIDEsIEtFWV8yKSwKKwlLRVkoMSwgMiwgS0VZXzQpLAorCUtFWSgxLCAzLCBLRVlfUiksCisJS0VZKDEsIDQsIEtFWV9ZKSwKKwlLRVkoMSwgNSwgS0VZXzgpLAorCUtFWSgxLCA2LCBLRVlfSSksCisJS0VZKDEsIDcsIEtFWV9PKSwKKwlLRVkoMSwgOCwgS0VZX1ApLAorCUtFWSgyLCAwLCBLRVlfVEFCKSwKKwlLRVkoMiwgMSwgS0VZX1EpLAorCUtFWSgyLCAyLCBLRVlfRSksCisJS0VZKDIsIDMsIEtFWV9UKSwKKwlLRVkoMiwgNCwgS0VZX0cpLAorCUtFWSgyLCA1LCBLRVlfVSksCisJS0VZKDIsIDYsIEtFWV9KKSwKKwlLRVkoMiwgNywgS0VZX0spLAorCUtFWSgzLCAwLCBDT1JHSV9LRVlfQ0FMRU5ERVIpLAorCUtFWSgzLCAxLCBLRVlfVyksCisJS0VZKDMsIDIsIEtFWV9TKSwKKwlLRVkoMywgMywgS0VZX0YpLAorCUtFWSgzLCA0LCBLRVlfViksCisJS0VZKDMsIDUsIEtFWV9IKSwKKwlLRVkoMywgNiwgS0VZX00pLAorCUtFWSgzLCA3LCBLRVlfTCksCisJS0VZKDMsIDksIEtFWV9SSUdIVFNISUZUKSwKKwlLRVkoNCwgMCwgQ09SR0lfS0VZX0FERFJFU1MpLAorCUtFWSg0LCAxLCBLRVlfQSksCisJS0VZKDQsIDIsIEtFWV9EKSwKKwlLRVkoNCwgMywgS0VZX0MpLAorCUtFWSg0LCA0LCBLRVlfQiksCisJS0VZKDQsIDUsIEtFWV9OKSwKKwlLRVkoNCwgNiwgS0VZX0RPVCksCisJS0VZKDQsIDgsIEtFWV9FTlRFUiksCisJS0VZKDQsIDEwLCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoNSwgMCwgQ09SR0lfS0VZX01BSUwpLAorCUtFWSg1LCAxLCBLRVlfWiksCisJS0VZKDUsIDIsIEtFWV9YKSwKKwlLRVkoNSwgMywgS0VZX01JTlVTKSwKKwlLRVkoNSwgNCwgS0VZX1NQQUNFKSwKKwlLRVkoNSwgNSwgS0VZX0NPTU1BKSwKKwlLRVkoNSwgNywgS0VZX1VQKSwKKwlLRVkoNSwgMTEsIENPUkdJX0tFWV9GTiksCisJS0VZKDYsIDAsIEtFWV9TWVNSUSksCisJS0VZKDYsIDEsIENPUkdJX0tFWV9KQVAxKSwKKwlLRVkoNiwgMiwgQ09SR0lfS0VZX0pBUDIpLAorCUtFWSg2LCAzLCBDT1JHSV9LRVlfQ0FOQ0VMKSwKKwlLRVkoNiwgNCwgQ09SR0lfS0VZX09LKSwKKwlLRVkoNiwgNSwgQ09SR0lfS0VZX01FTlUpLAorCUtFWSg2LCA2LCBLRVlfTEVGVCksCisJS0VZKDYsIDcsIEtFWV9ET1dOKSwKKwlLRVkoNiwgOCwgS0VZX1JJR0hUKSwKKwlLRVkoNywgMCwgQ09SR0lfS0VZX09GRiksCisJS0VZKDcsIDEsIENPUkdJX0tFWV9FWE9LKSwKKwlLRVkoNywgMiwgQ09SR0lfS0VZX0VYQ0FOQ0VMKSwKKwlLRVkoNywgMywgQ09SR0lfS0VZX0VYSk9HRE9XTiksCisJS0VZKDcsIDQsIENPUkdJX0tFWV9FWEpPR1VQKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGNvcmdpa2JkX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gY29yZ2lrYmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUoY29yZ2lrYmRfa2V5bWFwKSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29yZ2lrYmRfcm93X2dwaW9zW10gPQorCQl7IDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSB9Oworc3RhdGljIGNvbnN0IGludCBjb3JnaWtiZF9jb2xfZ3Bpb3NbXSA9CisJCXsgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NyB9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBjb3JnaWtiZF9wZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJCT0gJmNvcmdpa2JkX2tleW1hcF9kYXRhLAorCS5yb3dfZ3Bpb3MJCT0gY29yZ2lrYmRfcm93X2dwaW9zLAorCS5jb2xfZ3Bpb3MJCT0gY29yZ2lrYmRfY29sX2dwaW9zLAorCS5udW1fcm93X2dwaW9zCQk9IEFSUkFZX1NJWkUoY29yZ2lrYmRfcm93X2dwaW9zKSwKKwkubnVtX2NvbF9ncGlvcwkJPSBBUlJBWV9TSVpFKGNvcmdpa2JkX2NvbF9ncGlvcyksCisJLmNvbF9zY2FuX2RlbGF5X3VzCT0gMTAsCisJLmRlYm91bmNlX21zCQk9IDEwLAorCS53YWtldXAJCQk9IDEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb3JnaWtiZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImNvcmdpLWtleWJvYXJkIiwKKwkubmFtZQkJPSAibWF0cml4LWtleXBhZCIsCiAJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZjb3JnaWtiZF9wZGF0YSwKKwl9LAogfTsKIAogLyoKQEAgLTMwNywxMTEgKzQzNiwyMCBAQAogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhOwotCi1zdGF0aWMgaW50IGNvcmdpX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBjb3JnaV9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoQ09SR0lfR1BJT19uU0RfREVURUNULCAiblNEX0RFVEVDVCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX25TRF9XUCwgIm5TRF9XUCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfMTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX1NEX1BXUiwgIlNEX1BXUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfMjsKLQotCWdwaW9fZGlyZWN0aW9uX2lucHV0KENPUkdJX0dQSU9fblNEX0RFVEVDVCk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ09SR0lfR1BJT19uU0RfV1ApOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChDT1JHSV9HUElPX1NEX1BXUiwgMCk7Ci0KLQljb3JnaV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShDT1JHSV9JUlFfR1BJT19uU0RfREVURUNULCBjb3JnaV9kZXRlY3RfaW50LAotCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwKLQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQkiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoIiVzOiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2ZyZWVfMzsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9mcmVlXzM6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fU0RfUFdSKTsKLWVycl9mcmVlXzI6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX1dQKTsKLWVycl9mcmVlXzE6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcmdpX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX1NEX1BXUiwgKCgxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY29yZ2lfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKENPUkdJX0dQSU9fblNEX1dQKTsKLX0KLQotc3RhdGljIHZvaWQgY29yZ2lfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWZyZWVfaXJxKENPUkdJX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwotCWdwaW9fZnJlZShDT1JHSV9HUElPX1NEX1BXUik7Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX1dQKTsKLQlncGlvX2ZyZWUoQ09SR0lfR1BJT19uU0RfREVURUNUKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGNvcmdpX21jaV9pbml0LAotCS5nZXRfcm8JCT0gY29yZ2lfbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgCT0gY29yZ2lfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IGNvcmdpX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IENPUkdJX0dQSU9fblNEX1dQLAorCS5ncGlvX3Bvd2VyCQk9IENPUkdJX0dQSU9fU0RfUFdSLAogfTsKIAogCiAvKgogICogSXJkYQogICovCi1zdGF0aWMgdm9pZCBjb3JnaV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCi1zdGF0aWMgaW50IGNvcmdpX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX0lSX09OLCAiSVJfT04iKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KENPUkdJX0dQSU9fSVJfT04sIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjb3JnaV9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoQ09SR0lfR1BJT19JUl9PTik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGNvcmdpX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19wd2Rvd24JCT0gQ09SR0lfR1BJT19JUl9PTiwKIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IGNvcmdpX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc3RhcnR1cAkJPSBjb3JnaV9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IGNvcmdpX2lyZGFfc2h1dGRvd24sCiB9OwogCiAKQEAgLTYzNiw2ICs2NzQsNyBAQAogCWNvcmdpX2luaXRfc3BpKCk7CiAKICAJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOworCWNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9maWNwX2luZm8oJmNvcmdpX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCmluZGV4IDNhOGVlMjIuLjk4M2NjOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIHN0YXRpYyBweGFfZnJlcXNfdCBweGEyN3hfZnJlcXNbXSA9IHsKIAl7MTA0MDAwLCAxMDQwMDAsIFBYQTI3eF9DQ0NSKDEsCSA4LCAyKSwgMCwgQ0NMS0NGRzIoMSwgMCwgMSksICA5MDAwMDAsIDE3MDUwMDAgfSwKLQl7MTU2MDAwLCAxMDQwMDAsIFBYQTI3eF9DQ0NSKDEsCSA4LCA2KSwgMCwgQ0NMS0NGRzIoMSwgMSwgMSksIDEwMDAwMDAsIDE3MDUwMDAgfSwKKwl7MTU2MDAwLCAxMDQwMDAsIFBYQTI3eF9DQ0NSKDEsCSA4LCAzKSwgMCwgQ0NMS0NGRzIoMSwgMCwgMSksIDEwMDAwMDAsIDE3MDUwMDAgfSwKIAl7MjA4MDAwLCAyMDgwMDAsIFBYQTI3eF9DQ0NSKDAsIDE2LCAyKSwgMSwgQ0NMS0NGRzIoMCwgMCwgMSksIDExODAwMDAsIDE3MDUwMDAgfSwKIAl7MzEyMDAwLCAyMDgwMDAsIFBYQTI3eF9DQ0NSKDEsIDE2LCAzKSwgMSwgQ0NMS0NGRzIoMSwgMCwgMSksIDEyNTAwMDAsIDE3MDUwMDAgfSwKIAl7NDE2MDAwLCAyMDgwMDAsIFBYQTI3eF9DQ0NSKDEsIDE2LCA0KSwgMSwgQ0NMS0NGRzIoMSwgMCwgMSksIDEzNTAwMDAsIDE3MDUwMDAgfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKaW5kZXggN2QzZTFiNC4uOTY1NDgwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKQEAgLTEzMCw2MSArMTMwLDE3IEBACiBzdGF0aWMgaW50IGNzYjcyNl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCWlycV9oYW5kbGVyX3QgZGV0ZWN0LCB2b2lkICpkYXRhKQogewotCWludCBlcnI7Ci0KIAljc2I3MjZfbWNpX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyg1MDApOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QsICJNTUMgZGV0ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZGV0X3JlcTsKLQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2RldF9kaXI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoQ1NCNzI2X0dQSU9fTU1DX1JPLCAiTU1DIHJvIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcm9fcmVxOwotCi0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yb19kaXI7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGV0ZWN0LAotCQkJSVJRRl9ESVNBQkxFRCwgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2lycTsKLQogCXJldHVybiAwOwotCi1lcnJfaXJxOgotZXJyX3JvX2RpcjoKLQlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKLWVycl9yb19yZXE6Ci1lcnJfZGV0X2RpcjoKLQlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX0RFVEVDVCk7Ci1lcnJfZGV0X3JlcToKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGNzYjcyNl9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKLX0KLQotc3RhdGljIHZvaWQgY3NiNzI2X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19STyk7Ci0JZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNzYjcyNl9tY2kgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0CQk9IGNzYjcyNl9tY2lfaW5pdCwKLQkuZ2V0X3JvCQk9IGNzYjcyNl9tY2lfZ2V0X3JvLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQJCQk9IGNzYjcyNl9tY2lfaW5pdCwKIAkvKiBGSVhNRSBzZXRwb3dlciAqLwotCS5leGl0CQk9IGNzYjcyNl9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IENTQjcyNl9HUElPX01NQ19ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSBDU0I3MjZfR1BJT19NTUNfUk8sCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBjc2I3MjZfb2hjaV9wbGF0Zm9ybV9kYXRhID0gewpAQCAtMjgyLDcgKzIzOCw3IEBACiB9OwogCiBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIGNzYjcyNl9sYW5fY29uZmlnID0gewotCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKIAkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9QVVNIX1BVTEwsCiAJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCwKIAkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKaW5kZXggZWNjMDhmMy4uNDZmYWJlMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKQEAgLTkzNSw2ICs5MzUsMzMgQEAKIHsKIAlweGFfcmVnaXN0ZXJfZGV2aWNlKCZweGEzeHhfZGV2aWNlX25hbmQsIGluZm8pOwogfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YTN4eF9yZXNvdXJjZXNfZ2N1W10gPSB7CisJeworCQkuc3RhcnQJPSAweDU0MDAwMDAwLAorCQkuZW5kCT0gMHg1NDAwMGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9HQ1UsCisJCS5lbmQJPSBJUlFfR0NVLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBweGEzeHhfZ2N1X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfZ2N1ID0geworCS5uYW1lCQk9ICJweGEzeHgtZ2N1IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YTN4eF9yZXNvdXJjZXNfZ2N1KSwKKwkucmVzb3VyY2UJPSBweGEzeHhfcmVzb3VyY2VzX2djdSwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrID0gJnB4YTN4eF9nY3VfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorfTsKKwogI2VuZGlmIC8qIENPTkZJR19QWEEzeHggKi8KIAogLyogcHhhMnh4LXNwaSBwbGF0Zm9ybS1kZXZpY2UgSUQgZXF1YWxzIHJlc3BlY3RpdmUgU1NQIHBsYXRmb3JtLWRldmljZSBJRCArIDEuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKaW5kZXggZWNjMjRhNC4uOTM4MTdkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuaApAQCAtMzUsNCArMzUsNiBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9uYW5kOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9pMmNfcG93ZXI7CiAKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfZ2N1OworCiB2b2lkIF9faW5pdCBweGFfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKaW5kZXggYTM2ZmMxNy4uNDlhY2RmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwpAQCAtMTk5LDcgKzE5OSw2IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJcHhhX3NldF91ZGNfaW5mbygmZTd4eF91ZGNfbWFjaF9pbmZvKTsKIAlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKLQllN3h4X2lyZGFfaW5pdCgpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZlN3h4X2ZpY3BfcGxhdGZvcm1fZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwppbmRleCAxZDAwMTEwLi40MDUyZWNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCkBAIC0yMDAsNyArMjAwLDYgQEAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOwogCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOwotCWU3eHhfaXJkYV9pbml0KCk7CiAJcHhhX3NldF9maWNwX2luZm8oJmU3eHhfZmljcF9wbGF0Zm9ybV9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCmluZGV4IDljZDA5NDYuLmFlYzdmNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKQEAgLTY0NiwxMyArNjQ2LDE2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzIwXzIxfE1NQ19WRERfMjFfMjJ8TU1DX1ZERF8yMl8yM3wKLQkJCSAgTU1DX1ZERF8yNF8yNXxNTUNfVkREXzI1XzI2fE1NQ19WRERfMjZfMjd8Ci0JCQkgIE1NQ19WRERfMjdfMjh8TU1DX1ZERF8yOF8yOXxNTUNfVkREXzI5XzMwfAotCQkJICBNTUNfVkREXzMwXzMxfE1NQ19WRERfMzFfMzIsCi0JLmluaXQgCQk9IGVtX3gyNzBfbWNpX2luaXQsCi0JLnNldHBvd2VyIAk9IGVtX3gyNzBfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IGVtX3gyNzBfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMjBfMjF8TU1DX1ZERF8yMV8yMnxNTUNfVkREXzIyXzIzfAorCQkJCSAgTU1DX1ZERF8yNF8yNXxNTUNfVkREXzI1XzI2fE1NQ19WRERfMjZfMjd8CisJCQkJICBNTUNfVkREXzI3XzI4fE1NQ19WRERfMjhfMjl8TU1DX1ZERF8yOV8zMHwKKwkJCQkgIE1NQ19WRERfMzBfMzF8TU1DX1ZERF8zMV8zMiwKKwkuaW5pdCAJCQk9IGVtX3gyNzBfbWNpX2luaXQsCisJLnNldHBvd2VyIAkJPSBlbV94MjcwX21jaV9zZXRwb3dlciwKKwkuZXhpdAkJCT0gZW1feDI3MF9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X21tYyh2b2lkKQpAQCAtMTAyMiwyMiArMTAyNSwzMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmsgPSB7Ci0JLmJ1c19pZAk9IDAsCi0JLnBvd2VyID0gZW1feDI3MF9zZW5zb3JfcG93ZXIsCi19OwotCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGVtX3gyNzBfaTJjX2NhbV9pbmZvW10gPSB7CiAJewogCQlJMkNfQk9BUkRfSU5GTygibXQ5bTExMSIsIDB4NDgpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmsgPSB7CisJLmJ1c19pZAkJPSAwLAorCS5wb3dlcgkJPSBlbV94MjcwX3NlbnNvcl9wb3dlciwKKwkuYm9hcmRfaW5mbwk9ICZlbV94MjcwX2kyY19jYW1faW5mb1swXSwKKwkuaTJjX2FkYXB0ZXJfaWQJPSAwLAorCS5tb2R1bGVfbmFtZQk9ICJtdDltMTExIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVtX3gyNzBfY2FtZXJhID0geworCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rLAogCX0sCiB9OwogCiBzdGF0aWMgdm9pZCAgX19pbml0IGVtX3gyNzBfaW5pdF9jYW1lcmEodm9pZCkKIHsKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShlbV94MjcwX2kyY19jYW1faW5mbykpOwogCXB4YV9zZXRfY2FtZXJhX2luZm8oJmVtX3gyNzBfY2FtZXJhX3BsYXRmb3JtX2RhdGEpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZW1feDI3MF9jYW1lcmEpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfY2FtZXJhKHZvaWQpIHt9CkBAIC0xMTAzLDYgKzExMTYsNyBAQAogUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzEwLCAmcHhhX2RldmljZV9tY2kuZGV2LCAidmNjIHNkaW8iKTsKIFJFR1VMQVRPUl9DT05TVU1FUihsZG8xMiwgTlVMTCwgInZjYyB1c2IiKTsKIFJFR1VMQVRPUl9DT05TVU1FUihsZG8xOSwgJmVtX3gyNzBfZ3Byc191c2Vyc3BhY2VfY29uc3VtZXIuZGV2LCAidmNjIGdwcnMiKTsKK1JFR1VMQVRPUl9DT05TVU1FUihidWNrMiwgTlVMTCwgInZjY19jb3JlIik7CiAKICNkZWZpbmUgUkVHVUxBVE9SX0lOSVQoX2xkbywgX21pbl91ViwgX21heF91ViwgX29wc19tYXNrKQkJXAogCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBfbGRvIyNfZGF0YSA9IHsJCVwKQEAgLTExMjUsNiArMTEzOSw3IEBACiAJICAgICAgIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTIHwgUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFKTsKIFJFR1VMQVRPUl9JTklUKGxkbzEyLCAzMDAwMDAwLCAzMDAwMDAwLCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUyk7CiBSRUdVTEFUT1JfSU5JVChsZG8xOSwgMzIwMDAwMCwgMzIwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOworUkVHVUxBVE9SX0lOSVQoYnVjazIsIDEwMDAwMDAsIDE2NTAwMDAsIFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSk7CiAKIHN0cnVjdCBsZWRfaW5mbyBlbV94MjcwX2xlZF9pbmZvID0gewogCS5uYW1lID0gImVtLXgyNzA6b3JhbmdlIiwKQEAgLTExOTQsNiArMTIwOSw4IEBACiAJREE5MDMwX0xETygxMiksCiAJREE5MDMwX0xETygxOSksCiAKKwlEQTkwMzBfU1VCREVWKHJlZ3VsYXRvciwgQlVDSzIsICZidWNrMl9kYXRhKSwKKwogCURBOTAzMF9TVUJERVYobGVkLCBMRURfUEMsICZlbV94MjcwX2xlZF9pbmZvKSwKIAlEQTkwMzBfU1VCREVWKGJhY2tsaWdodCwgV0xFRCwgJmVtX3gyNzBfbGVkX2luZm8pLAogCURBOTAzMF9TVUJERVYoYmF0dGVyeSwgQkFULCAmZW1feDI3MF9iYXR0ZXJ0eV9pbmZvKSwKQEAgLTEyNDUsNyArMTI2Miw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX21vZHVsZV9pbml0KHZvaWQpCiB7Ci0JcHJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlbV94MjcwX3Bpbl9jb25maWcpKTsKIAogCW1tY19jZCA9IEdQSU8xM19NTUNfQ0Q7CkBAIC0xMjU3LDcgKzEyNzMsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9leGVkYV9pbml0KHZvaWQpCiB7Ci0JcHJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShleGVkYV9waW5fY29uZmlnKSk7CiAKIAltbWNfY2QgPSBHUElPMTE0X01NQ19DRDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwppbmRleCBjNjBkYWRmLi45MTQxN2YwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCkBAIC00Nyw0NCArNDcsOSBAQAogCS5ncGlvX3B1bGx1cF9pbnZlcnRlZCA9IDEKIH07CiAKLXN0YXRpYyB2b2lkIGU3eHhfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JaWYgKG1vZGUgJiBJUl9PRkYpIHsKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FN1hYX0lSX09GRiwgMSk7Ci0JCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci0JfSBlbHNlIHsKLQkJcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FN1hYX0lSX09GRiwgMCk7Ci0JfQotfQotCi1pbnQgZTd4eF9pcmRhX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTdYWF9JUl9PRkYsICJJckRBIHBvd2VyIik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FN1hYX0lSX09GRiwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQllN3h4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShOVUxMLCBJUl9TSVJNT0RFIHwgSVJfT0ZGKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBlN3h4X2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWU3eHhfaXJkYV90cmFuc2NlaXZlcl9tb2RlKGRldiwgSVJfU0lSTU9ERSB8IElSX09GRik7Ci0JZ3Bpb19mcmVlKEdQSU9fRTdYWF9JUl9PRkYpOwotfQotCiBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGU3eHhfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IGU3eHhfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAotCS5zaHV0ZG93biA9IGU3eHhfaXJkYV9zaHV0ZG93biwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19FN1hYX0lSX09GRiwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIGludCBlc2VyaWVzX3RtaW9fZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYwppbmRleCBjYTk5MTJlLi4xNzA4YzAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCkBAIC04OCw3ICs4OCwxMCBAQAogCiAjaWZkZWYgQ09ORklHX01NQ19QWEEKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgZ3Vtc3RpeF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdCAJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGd1bXN0aXhfbW1jX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKaW5kZXggODEzNTlkNS4uODNiZDNjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAorI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgogI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtMTc0LDE0ICsxNzUsOSBAQAogICogSVJEQQogICovCiAKLXN0YXRpYyB2b2lkIGlyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDVfSFg0NzAwX25JUl9PTiwgbW9kZSAmIElSX09GRik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGZpY3BfaW5mbyA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUgPSBpcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU8xMDVfSFg0NzAwX25JUl9PTiwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qCkBAIC0zNjgsOCArMzY0LDYgQEAKICAqIExDRCAtIFNvbnkgZGlzcGxheSBjb25uZWN0ZWQgdG8gQVRJIEltYWdlb24gdzMyMjAKICAqLwogCi1zdGF0aWMgaW50IGxjZF9wb3dlcjsKLQogc3RhdGljIHZvaWQgc29ueV9sY2RfaW5pdCh2b2lkKQogewogCWdwaW9fc2V0X3ZhbHVlKEdQSU84NF9IWDQ3MDBfTENEX1NRTiwgMSk7CkBAIC00MTAsMzUgKzQwNCw2IEBACiAJZ3Bpb19zZXRfdmFsdWUoR1BJTzExMF9IWDQ3MDBfTENEX0xWRERfM1YzX09OLCAwKTsKIH0KIAotc3RhdGljIGludCBoeDQ3MDBfbGNkX3NldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqbGRldiwgaW50IGxldmVsKQotewotCXN3aXRjaCAobGV2ZWwpIHsKLQljYXNlIEZCX0JMQU5LX1VOQkxBTks6Ci0JCXNvbnlfbGNkX2luaXQoKTsKLQkJYnJlYWs7Ci0JY2FzZSBGQl9CTEFOS19OT1JNQUw6Ci0JY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgotCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKLQljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKLQkJc29ueV9sY2Rfb2ZmKCk7Ci0JCWJyZWFrOwotCX0KLQlsY2RfcG93ZXIgPSBsZXZlbDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoeDQ3MDBfbGNkX2dldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqbG0pCi17Ci0JcmV0dXJuIGxjZF9wb3dlcjsKLX0KLQotc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGh4NDcwMF9sY2Rfb3BzID0gewotCS5nZXRfcG93ZXIgPSBoeDQ3MDBfbGNkX2dldF9wb3dlciwKLQkuc2V0X3Bvd2VyID0gaHg0NzAwX2xjZF9zZXRfcG93ZXIsCi19OwotCi1zdGF0aWMgc3RydWN0IGxjZF9kZXZpY2UgKmh4NDcwMF9sY2RfZGV2aWNlOwotCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCB3MzIyMF9sY2Rfc3VzcGVuZChzdHJ1Y3QgdzEwMGZiX3BhciAqd2ZiKQogewpAQCAtNTczLDYgKzUzOCwyNyBAQAogCS5yZXNvdXJjZSAgICAgID0gdzMyMjBfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHZvaWQgaHg0NzAwX2xjZF9zZXRfcG93ZXIoc3RydWN0IHBsYXRfbGNkX2RhdGEgKnBkLCB1bnNpZ25lZCBpbnQgcG93ZXIpCit7CisJaWYgKHBvd2VyKQorCQlzb255X2xjZF9pbml0KCk7CisJZWxzZQorCQlzb255X2xjZF9vZmYoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0X2xjZF9kYXRhIGh4NDcwMF9sY2RfZGF0YSA9IHsKKwkuc2V0X3Bvd2VyID0gaHg0NzAwX2xjZF9zZXRfcG93ZXIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoeDQ3MDBfbGNkID0geworCS5uYW1lID0gInBsYXRmb3JtLWxjZCIsCisJLmlkICAgPSAtMSwKKwkuZGV2ICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaHg0NzAwX2xjZF9kYXRhLAorCQkucGFyZW50ICAgICAgICA9ICZ3MzIyMC5kZXYsCisJfSwKK307CisKIC8qCiAgKiBCYWNrbGlnaHQKICAqLwpAQCAtNjE4LDcgKzYwNCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSB0c2MyMDQ2X2luZm8gPSB7CiAJLm1vZGVsICAgICAgICAgICAgPSA3ODQ2LAogCS52cmVmX2RlbGF5X3VzZWNzID0gMTAwLAotCS5wcmVzc3VyZV9tYXggICAgID0gNTEyLAorCS5wcmVzc3VyZV9tYXggICAgID0gMTAyNCwKIAkuZGVib3VuY2VfbWF4ICAgICA9IDEwLAogCS5kZWJvdW5jZV90b2wgICAgID0gMywKIAkuZGVib3VuY2VfcmVwICAgICA9IDEsCkBAIC04NzIsOSArODU4LDYgQEAKIAlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZweGFfc3NwMl9tYXN0ZXJfaW5mbyk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oQVJSQVlfQU5EX1NJWkUodHNjMjA0Nl9ib2FyZF9pbmZvKSk7CiAKLQloeDQ3MDBfbGNkX2RldmljZSA9IGxjZF9kZXZpY2VfcmVnaXN0ZXIoIncxMDBmYiIsIE5VTEwsCi0JCQkJCSh2b2lkICopJnczMjIwX2luZm8sICZoeDQ3MDBfbGNkX29wcyk7Ci0KIAlncGlvX3NldF92YWx1ZShHUElPNzFfSFg0NzAwX0FTSUMzX25SRVNFVCwgMCk7CiAJbWRlbGF5KDEwKTsKIAlncGlvX3NldF92YWx1ZShHUElPNzFfSFg0NzAwX0FTSUMzX25SRVNFVCwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCmluZGV4IGI2MjQzYjUuLmI2NDg2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCkBAIC0xNjgsNyArMTY4LDEwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGlkcF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgaWRwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKaW5kZXggOTYxODA3ZC4uMmE0OTQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKQEAgLTM4OSw2ICszODksOSBAQAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBpbW90ZTJfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm9jcl9tYXNrID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsIC8qIGRlZmF1bHQgYW55d2F5ICovCiAJLmdldF9ybyA9IGltb3RlMl9tY2lfZ2V0X3JvLAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gLTEsCisJLmdwaW9fY2FyZF9ybwk9IC0xLAorCS5ncGlvX3Bvd2VyID0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaW1vdGUyZmxhc2hfcGFydGl0aW9uc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYmFsbG9vbjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmVjMDliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2JhbGxvb24zLmgKKyAqCisgKiAgQXV0aG9yczoJTmljayBCYW5lIGFuZCBXb29rZXkKKyAqICBDcmVhdGVkOglPY3QsIDIwMDUKKyAqICBDb3B5cmlnaHQ6CVRvYnkgQ2h1cmNoaWxsIEx0ZAorICogIENyaWJiZWQgZnJvbSBtYWluc3RvbmUuYywgYnkgTmljaG9sYXMgUGl0cmUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgQVNNX0FSQ0hfQkFMTE9PTjNfSAorI2RlZmluZSBBU01fQVJDSF9CQUxMT09OM19ICisKK2VudW0gYmFsbG9vbjNfZmVhdHVyZXMgeworCUJBTExPT04zX0ZFQVRVUkVfT0hDSSwKKwlCQUxMT09OM19GRUFUVVJFX01NQywKKwlCQUxMT09OM19GRUFUVVJFX0NGLAorCUJBTExPT04zX0ZFQVRVUkVfQVVESU8sCisJQkFMTE9PTjNfRkVBVFVSRV9UT1BQT0xZLAorfTsKKworI2RlZmluZSBCQUxMT09OM19GUEdBX1BIWVMJUFhBX0NTNF9QSFlTCisjZGVmaW5lIEJBTExPT04zX0ZQR0FfVklSVAkoMHhmMTAwMDAwMCkJLyogYXMgcGVyIGJhbGxvb24yICovCisjZGVmaW5lIEJBTExPT04zX0ZQR0FfTEVOR1RICTB4MDEwMDAwMDAKKworLyogRlBHQS9DUExEIHJlZ2lzdGVycyAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUEwX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMDgpCisvKiBmaXhtZSAtIHNhbWUgZm9yIG5vdyAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUExX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMDgpCisjZGVmaW5lIEJBTExPT04zX05BTkRJT19JT19SRUcJCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDAwKQorLyogZnBnYS9jcGxkIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEJBTExPT04zX0lOVF9DT05UUk9MX1JFRwkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAwQykKKyNkZWZpbmUgQkFMTE9PTjNfTkFORElPX0NUTDJfUkVHIAkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAxMCkKKyNkZWZpbmUgQkFMTE9PTjNfTkFORElPX0NUTF9SRUcgCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDE0KQorI2RlZmluZSBCQUxMT09OM19WRVJTSU9OX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMWMpCisKKyNkZWZpbmUgQkFMTE9PTjNfU0FNT1NBX0FERFJfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwYzAwMDAwKQorI2RlZmluZSBCQUxMT09OM19TQU1PU0FfREFUQV9SRUcJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBjMDAwMDQpCisjZGVmaW5lIEJBTExPT04zX1NBTU9TQV9TVEFUVVNfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwYzAwMDFjKQorCisvKiBHUElPcyBmb3IgaXJxcyAqLworI2RlZmluZSBCQUxMT09OM19HUElPX0FVWF9OSVJRCQkoOTQpCisjZGVmaW5lIEJBTExPT04zX0dQSU9fQ09ERUNfSVJRCQkoOTUpCisKKy8qIFRpbWVyIGFuZCBJZGxlIExFRCBsb2NhdGlvbnMgKi8KKyNkZWZpbmUgQkFMTE9PTjNfR1BJT19MRURfTkFORAkJKDkpCisjZGVmaW5lIEJBTExPT04zX0dQSU9fTEVEX0lETEUJCSgxMCkKKworLyogYmFja2xpZ2h0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkFMTE9PTjNfR1BJT19SVU5fQkFDS0xJR0hUCSg5OSkKKworI2RlZmluZSBCQUxMT09OM19HUElPX1MwX0NECQkoMTA1KQorCisvKiBGUEdBIEludGVycnVwdCBNYXNrL0Fja25vd2xlZGdlIFJlZ2lzdGVyICovCisjZGVmaW5lIEJBTExPT04zX0lOVF9TMF9JUlEJCSgxIDw8IDApICAvKiBQQ01DSUEgMCBJUlEgKi8KKyNkZWZpbmUgQkFMTE9PTjNfSU5UX1MwX1NUU0NIRwkJKDEgPDwgMSkgIC8qIFBDTUNJQSAwIHN0YXR1cyBjaGFuZ2VkICovCisKKy8qIENGIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUFfbklSUQkJKDEgPDwgMCkgIC8qIElSUSAvIHJlYWR5IHNpZ25hbCAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUFfblNUU0NIR19CVkQxCSgxIDw8IDEpCisJCQkJCS8qIFZERCBzZW5zZSAvIGNhcmQgc3RhdHVzIGNoYW5nZWQgKi8KKworLyogQ0YgY29udHJvbCByZWdpc3RlciAod3JpdGUpICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQV9SRVNFVAkJKDEgPDwgMCkgICAvKiBDYXJkIHJlc2V0IHNpZ25hbCAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUFfRU5BQkxFCQkoMSA8PCAxKQorI2RlZmluZSBCQUxMT09OM19QQ01DSUFfQUREX0VOQUJMRQkoMSA8PCAyKQorCisvKiBDUExEIChhbmQgRlBHQSkgaW50ZXJmYWNlIGRlZmluaXRpb25zICovCisjZGVmaW5lIENQTERfTENEMF9EQVRBX1NFVCAgICAgICAgICAgICAweDAwCisjZGVmaW5lIENQTERfTENEMF9EQVRBX0NMUiAgICAgICAgICAgICAweDEwCisjZGVmaW5lIENQTERfTENEMF9DT01NQU5EX1NFVCAgICAgICAgICAweDAxCisjZGVmaW5lIENQTERfTENEMF9DT01NQU5EX0NMUiAgICAgICAgICAweDExCisjZGVmaW5lIENQTERfTENEMV9EQVRBX1NFVCAgICAgICAgICAgICAweDAyCisjZGVmaW5lIENQTERfTENEMV9EQVRBX0NMUiAgICAgICAgICAgICAweDEyCisjZGVmaW5lIENQTERfTENEMV9DT01NQU5EX1NFVCAgICAgICAgICAweDAzCisjZGVmaW5lIENQTERfTENEMV9DT01NQU5EX0NMUiAgICAgICAgICAweDEzCisKKyNkZWZpbmUgQ1BMRF9NSVNDX1NFVCAgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgQ1BMRF9NSVNDX0NMUiAgICAgICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgQ1BMRF9NSVNDX0xPT05fTlJFU0VUX0JJVCAgICAgIDAKKyNkZWZpbmUgQ1BMRF9NSVNDX0xPT05fVU5TVVNQX0JJVCAgICAgIDEKKyNkZWZpbmUgQ1BMRF9NSVNDX1JVTl81Vl9CSVQgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BMRF9NSVNDX0NIR19EMF9CSVQgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BMRF9NSVNDX0NIR19EMV9CSVQgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BMRF9NSVNDX0RBQ19OQ1NfQklUICAgICAgICAgIDUKKworI2RlZmluZSBDUExEX0xDRF9TRVQgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBDUExEX0xDRF9DTFIgICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBDUExEX0xDRF9CQUNLTElHSFRfRU5fMF9CSVQgICAgMAorI2RlZmluZSBDUExEX0xDRF9CQUNLTElHSFRfRU5fMV9CSVQgICAgMQorI2RlZmluZSBDUExEX0xDRF9MRURfUkVEX0JJVCAgICAgICAgICAgNAorI2RlZmluZSBDUExEX0xDRF9MRURfR1JFRU5fQklUICAgICAgICAgNQorI2RlZmluZSBDUExEX0xDRF9OUkVTRVRfQklUICAgICAgICAgICAgNworCisjZGVmaW5lIENQTERfTENEX1JPX1NFVCAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIENQTERfTENEX1JPX0NMUiAgICAgICAgICAgICAgICAweDE5CisjZGVmaW5lIENQTERfTENEX1JPX0xDRDBfbldBSVRfQklUICAgICAwCisjZGVmaW5lIENQTERfTENEX1JPX0xDRDFfbldBSVRfQklUICAgICAxCisKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfU0VUICAgICAgICAgICAgICAgIDB4MGEKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfQ0xSICAgICAgICAgICAgICAgIDB4MWEKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfR1NNX1JJX0JJVCAgICAgICAgIDAKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfR1NNX0NUU19CSVQgICAgICAgIDEKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfR1NNX0RUUl9CSVQgICAgICAgIDIKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfTFBSX0NUU19CSVQgICAgICAgIDMKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfVEMyMzJfQ1RTX0JJVCAgICAgIDQKKyNkZWZpbmUgQ1BMRF9TRVJJQUxfVEMyMzJfRFNSX0JJVCAgICAgIDUKKworI2RlZmluZSBDUExEX1NST1VUSU5HX1NFVCAgICAgICAgICAgICAgMHgwYgorI2RlZmluZSBDUExEX1NST1VUSU5HX0NMUiAgICAgICAgICAgICAgMHgxYgorI2RlZmluZSBDUExEX1NST1VUSU5HX01TUDQzMF9MUFIgICAgICAgMAorI2RlZmluZSBDUExEX1NST1VUSU5HX01TUDQzMF9UQzIzMiAgICAgMQorI2RlZmluZSBDUExEX1NST1VUSU5HX01TUDQzMF9HU00gICAgICAgMgorI2RlZmluZSBDUExEX1NST1VUSU5HX0xPT05fTFBSICAgICAgICAgKDAgPDwgNCkKKyNkZWZpbmUgQ1BMRF9TUk9VVElOR19MT09OX1RDMjMyICAgICAgICgxIDw8IDQpCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTE9PTl9HU00gICAgICAgICAoMiA8PCA0KQorCisjZGVmaW5lIENQTERfQVJPVVRJTkdfU0VUICAgICAgICAgICAgICAweDBjCisjZGVmaW5lIENQTERfQVJPVVRJTkdfQ0xSICAgICAgICAgICAgICAweDFjCisjZGVmaW5lIENQTERfQVJPVVRJTkdfTUlDMlBIT05FX0JJVCAgICAwCisjZGVmaW5lIENQTERfQVJPVVRJTkdfUEhPTkUySU5UX0JJVCAgICAxCisjZGVmaW5lIENQTERfQVJPVVRJTkdfUEhPTkUyRVhUX0JJVCAgICAyCisjZGVmaW5lIENQTERfQVJPVVRJTkdfTE9PTkwySU5UX0JJVCAgICAzCisjZGVmaW5lIENQTERfQVJPVVRJTkdfTE9PTkwyRVhUX0JJVCAgICA0CisjZGVmaW5lIENQTERfQVJPVVRJTkdfTE9PTlIyUEhPTkVfQklUICA1CisjZGVmaW5lIENQTERfQVJPVVRJTkdfTE9PTlIySU5UX0JJVCAgICA2CisjZGVmaW5lIENQTERfQVJPVVRJTkdfTE9PTlIyRVhUX0JJVCAgICA3CisKK2V4dGVybiBpbnQgYmFsbG9vbjNfaGFzKGVudW0gYmFsbG9vbjNfZmVhdHVyZXMgZmVhdHVyZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKaW5kZXggYTg4ZDdjYS4uODExNzQzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCkBAIC0yMyw2ICsyMywxMiBAQAogZXh0ZXJuIHZvaWQgY29saWJyaV9weGEzeHhfaW5pdF9ldGgoc3RydWN0IGF4X3BsYXRfZGF0YSAqcGxhdF9kYXRhKTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUFhBM3h4KSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QWEEzeHhfTU9EVUxFKQorZXh0ZXJuIHZvaWQgY29saWJyaV9weGEzeHhfaW5pdF9uYW5kKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTN4eF9pbml0X25hbmQodm9pZCkge30KKyNlbmRpZgorCiAvKiBwaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyAqLwogI2RlZmluZSBDT0xJQlJJX1NEUkFNX0JBU0UJMHhhMDAwMDAwMCAgICAgIC8qIFNEUkFNIHJlZ2lvbiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IGY2YjRiZjMuLmE3M2JjODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0yNCwzNCArMjQsMjggQEAKIAkJbW92CVx0bXAsIFx0bXAsIGxzciAjMTMKIAkJYW5kCVx0bXAsIFx0bXAsICMweDcJCUAgQ29yZSBHCiAJCWNtcAlcdG1wLCAjMQotCQliaGkJMTAwNGYKKwkJYmhpCTEwMDJmCiAKKwkJQCBDb3JlIEdlbmVyYXRpb24gMSAoUFhBMjV4KQogCQltb3YJXGJhc2UsICNpb19wMnYoMHg0MDAwMDAwMCkJQCBJSVIgQ3RsID0gMHg0MGQwMDAwMAogCQlhZGQJXGJhc2UsIFxiYXNlLCAjMHgwMGQwMDAwMAogCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgIzBdCQlAIElDSVAKIAkJbGRyCVxpcnFuciwgW1xiYXNlLCAjNF0JCUAgSUNNUgotCQliCTEwMDJmCiAKLTEwMDQ6Ci0JCW1yYwlwNiwgMCwgXGlycXN0YXQsIGM2LCBjMCwgMAlAIElDSVAyCi0JCW1yYwlwNiwgMCwgXGlycW5yLCBjNywgYzAsIDAJQCBJQ01SMgotCQlhbmRzCVxpcnFuciwgXGlycXN0YXQsIFxpcnFucgotCQliZXEJMTAwM2YKLQkJcnNiCVxpcnFzdGF0LCBcaXJxbnIsICMwCi0JCWFuZAlcaXJxc3RhdCwgXGlycXN0YXQsIFxpcnFucgotCQljbHoJXGlycW5yLCBcaXJxc3RhdAotCQlyc2IJXGlycW5yLCBcaXJxbnIsICMzMQotCQlhZGQJXGlycW5yLCBcaXJxbnIsICMoMzIgKyBQWEFfSVJRKDApKQotCQliCTEwMDFmCi0xMDAzOgotCQltcmMJcDYsIDAsIFxpcnFzdGF0LCBjMCwgYzAsIDAJQCBJQ0lQCi0JCW1yYwlwNiwgMCwgXGlycW5yLCBjMSwgYzAsIDAJQCBJQ01SCi0xMDAyOgogCQlhbmRzCVxpcnFuciwgXGlycXN0YXQsIFxpcnFucgogCQliZXEJMTAwMWYKIAkJcnNiCVxpcnFzdGF0LCBcaXJxbnIsICMwCiAJCWFuZAlcaXJxc3RhdCwgXGlycXN0YXQsIFxpcnFucgogCQljbHoJXGlycW5yLCBcaXJxc3RhdAogCQlyc2IJXGlycW5yLCBcaXJxbnIsICMoMzEgKyBQWEFfSVJRKDApKQorCQliCTEwMDFmCisxMDAyOgorCQlAIENvcmUgR2VuZXJhdGlvbiAyIChQWEEyN3gpIG9yIENvcmUgR2VuZXJhdGlvbiAzIChQWEEzeHgpCisJCW1yYwlwNiwgMCwgXGlycXN0YXQsIGM1LCBjMCwgMAlAIElDSFAKKwkJdHN0CVxpcnFzdGF0LCAjMHg4MDAwMDAwMAorCQliZXEJMTAwMWYKKwkJYmljCVxpcnFzdGF0LCBcaXJxc3RhdCwgIzB4ODAwMDAwMDAKKwkJbW92CVxpcnFuciwgXGlycXN0YXQsIGxzciAjMTYKKwkJYWRkCVxpcnFuciwgXGlycW5yLCAjKFBYQV9JUlEoMCkpCiAxMDAxOgogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCAxNmFiNzk1Li5hYTNkOWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMTk3LDYgKzE5NywxNiBAQAogI2RlZmluZSBfX2NwdV9pc19weGE5MzUoaWQpCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTk1MAorI2RlZmluZSBfX2NwdV9pc19weGE5NTAoaWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl1bnNpZ25lZCBpbnQgX2lkID0gKGlkKSA+PiA0ICYgMHhmZmY7CVwKKwkJaWQgPT0gMHg2OTc7CQkJCVwKKwkgfSkKKyNlbHNlCisjZGVmaW5lIF9fY3B1X2lzX3B4YTk1MChpZCkJKDApCisjZW5kaWYKKwogI2RlZmluZSBjcHVfaXNfcHhhMjEwKCkJCQkJCVwKIAkoewkJCQkJCVwKIAkJX19jcHVfaXNfcHhhMjEwKHJlYWRfY3B1aWRfaWQoKSk7CVwKQEAgLTI0OSw2ICsyNTksMTMgQEAKIAkJX19jcHVfaXNfcHhhOTM1KGlkKTsJCQlcCiAJIH0pCiAKKyNkZWZpbmUgY3B1X2lzX3B4YTk1MCgpCQkJCQlcCisJKHsJCQkJCQlcCisJCXVuc2lnbmVkIGludCBpZCA9IHJlYWRfY3B1aWQoQ1BVSURfSUQpOwlcCisJCV9fY3B1X2lzX3B4YTk1MChpZCk7CQkJXAorCSB9KQorCisKIC8qCiAgKiBDUFVJRCBDb3JlIEdlbmVyYXRpb24gQml0CiAgKiA8PSAweDIgZm9yIHB4YTIxeC9weGEyNXgvcHhhMjZ4L3B4YTI3eApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lyZGEuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcmRhLmgKaW5kZXggMGE1MGMzYy4uM2NkNDFmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lyZGEuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJkYS5oCkBAIC0xMiw2ICsxMiw4IEBACiAJdm9pZCAoKnRyYW5zY2VpdmVyX21vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpOwogCWludCAoKnN0YXJ0dXApKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCWludCBncGlvX3B3ZG93bjsJCS8qIHBvd2VyZG93biBHUElPIGZvciB0aGUgSXJEQSBjaGlwICovCisJYm9vbCBncGlvX3B3ZG93bl9pbnZlcnRlZDsJLyogZ3Bpb19wd2Rvd24gaXMgaW52ZXJ0ZWQgKi8KIH07CiAKIGV4dGVybiB2b2lkIHB4YV9zZXRfZmljcF9pbmZvKHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgKmluZm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggNmExZDk1OS4uMzY3N2E5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC02OCw5ICs2OCwxMCBAQAogI2lmZGVmIENPTkZJR19QWEEzeHgKICNkZWZpbmUgSVJRX1NTUDQJUFhBX0lSUSgxMykJLyogU1NQNCBzZXJ2aWNlIHJlcXVlc3QgKi8KICNkZWZpbmUgSVJRX0NJUgkJUFhBX0lSUSgzNCkJLyogQ29uc3VtZXIgSVIgKi8KKyNkZWZpbmUgSVJRX0NPTU1fV0RUCVBYQV9JUlEoMzUpIAkvKiBDb21tIFdEVCBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVJRX1RTSQkJUFhBX0lSUSgzNikJLyogVG91Y2ggU2NyZWVuIEludGVyZmFjZSAoUFhBMzIwKSAqLwogI2RlZmluZSBJUlFfVVNJTTIJUFhBX0lSUSgzOCkJLyogVVNJTTIgQ29udHJvbGxlciAqLwotI2RlZmluZSBJUlFfR1JQSElDUwlQWEFfSVJRKDM5KQkvKiBHcmFwaGljcyBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9HQ1UJCVBYQV9JUlEoMzkpCS8qIEdyYXBoaWNzIENvbnRyb2xsZXIgKi8KICNkZWZpbmUgSVJRX01NQzIJUFhBX0lSUSg0MSkJLyogTU1DMiBDb250cm9sbGVyICovCiAjZGVmaW5lIElSUV8xV0lSRQlQWEFfSVJRKDQ0KQkvKiAxLVdpcmUgQ29udHJvbGxlciAqLwogI2RlZmluZSBJUlFfTkFORAlQWEFfSVJRKDQ1KQkvKiBOQU5EIENvbnRyb2xsZXIgKi8KQEAgLTgxLDggKzgyLDMxIEBACiAjZGVmaW5lIElSUV9NTUMzCVBYQV9JUlEoNTUpCS8qIE1NQzMgQ29udHJvbGxlciAoUFhBMzEwKSAqLwogI2VuZGlmCiAKLSNkZWZpbmUgUFhBX0dQSU9fSVJRX0JBU0UJUFhBX0lSUSg2NCkKLSNkZWZpbmUgUFhBX0dQSU9fSVJRX05VTQkoMTI4KQorI2lmZGVmIENPTkZJR19DUFVfUFhBOTM1CisjZGVmaW5lIElSUV9VMk8JCVBYQV9JUlEoNjQpCS8qIFVTQiBPVEcgMi4wIENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KKyNkZWZpbmUgSVJRX1UySAkJUFhBX0lSUSg2NSkJLyogVVNCIEhvc3QgMi4wIENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KKworI2RlZmluZSBJUlFfTU1DM19QWEE5MzUJUFhBX0lSUSg3MikJLyogTU1DMyBDb250cm9sbGVyIChQWEE5MzUpICovCisjZGVmaW5lIElSUV9NTUM0X1BYQTkzNQlQWEFfSVJRKDczKQkvKiBNTUM0IENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KKyNkZWZpbmUgSVJRX01NQzVfUFhBOTM1CVBYQV9JUlEoNzQpCS8qIE1NQzUgQ29udHJvbGxlciAoUFhBOTM1KSAqLworCisjZGVmaW5lIElSUV9VMlAJCVBYQV9JUlEoOTMpCS8qIFVTQiBQSFkgRCsvRC0gTGluZXMgKFBYQTkzNSkgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9QWEE5MzAKKyNkZWZpbmUgSVJRX0VOSFJPVAlQWEFfSVJRKDM3KQkvKiBFbmhhbmNlZCBSb3RhcnkgKFBYQTkzMCkgKi8KKyNkZWZpbmUgSVJRX0FDSVBDMAlQWEFfSVJRKDUpCisjZGVmaW5lIElSUV9BQ0lQQzEJUFhBX0lSUSg0MCkKKyNkZWZpbmUgSVJRX0FDSVBDMglQWEFfSVJRKDE5KQorI2RlZmluZSBJUlFfVFJLQkFMTAlQWEFfSVJRKDQzKQkvKiBUcmFjayBCYWxsICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfUFhBOTUwCisjZGVmaW5lIElSUV9HQzUwMAlQWEFfSVJRKDcwKQkvKiBHcmFwaGljcyBDb250cm9sbGVyIChQWEE5NTApICovCisjZW5kaWYKKworI2RlZmluZSBQWEFfR1BJT19JUlFfQkFTRQlQWEFfSVJRKDk2KQorI2RlZmluZSBQWEFfR1BJT19JUlFfTlVNCSgxOTIpCiAKICNkZWZpbmUgR1BJT18yX3hfVE9fSVJRKHgpCShQWEFfR1BJT19JUlFfQkFTRSArICh4KSkKICNkZWZpbmUgSVJRX0dQSU8oeCkJKCgoeCkgPCAyKSA/IChJUlFfR1BJTzAgKyAoeCkpIDogR1BJT18yX3hfVE9fSVJRKHgpKQpAQCAtMTA1LDYgKzEyOSw4IEBACiAjZGVmaW5lIElSUV9CT0FSRF9FTkQJCShJUlFfQk9BUkRfU1RBUlQgKyA3MCkKICNlbGlmIGRlZmluZWQoQ09ORklHX01BQ0hfWllMT05JVEUpCiAjZGVmaW5lIElSUV9CT0FSRF9FTkQJCShJUlFfQk9BUkRfU1RBUlQgKyAzMikKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BYQV9FWlgpCisjZGVmaW5lIElSUV9CT0FSRF9FTkQJCShJUlFfQk9BUkRfU1RBUlQgKyAyMykKICNlbHNlCiAjZGVmaW5lIElSUV9CT0FSRF9FTkQJCShJUlFfQk9BUkRfU1RBUlQgKyAxNikKICNlbmRpZgpAQCAtMjM3LDYgKzI2MywxNiBAQAogI2RlZmluZSBNQUlOU1RPTkVfUzFfU1RTQ0hHX0lSUQlNQUlOU1RPTkVfSVJRKDE0KQogI2RlZmluZSBNQUlOU1RPTkVfUzFfSVJRCU1BSU5TVE9ORV9JUlEoMTUpCiAKKy8qIEJhbGxvb24zIEludGVycnVwdHMgKi8KKyNkZWZpbmUgQkFMTE9PTjNfSVJRKHgpCQkoSVJRX0JPQVJEX1NUQVJUICsgKHgpKQorCisjZGVmaW5lIEJBTExPT04zX0JQX0NGX05SRFlfSVJRCUJBTExPT04zX0lSUSgwKQorI2RlZmluZSBCQUxMT09OM19CUF9OU1RTQ0hHX0lSUQlCQUxMT09OM19JUlEoMSkKKworI2RlZmluZSBCQUxMT09OM19BVVhfTklSUQlJUlFfR1BJTyhCQUxMT09OM19HUElPX0FVWF9OSVJRKQorI2RlZmluZSBCQUxMT09OM19DT0RFQ19JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19DT0RFQ19JUlEpCisjZGVmaW5lIEJBTExPT04zX1MwX0NEX0lSUQlJUlFfR1BJTyhCQUxMT09OM19HUElPX1MwX0NEKQorCiAvKiBMb0NvTW8gSW50ZXJydXB0cyAoQ09ORklHX1NIQVJQX0xPQ09NTykgKi8KICNkZWZpbmUgSVJRX0xPQ09NT19LRVlfQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMCkKICNkZWZpbmUgSVJRX0xPQ09NT19HUElPX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLmgKaW5kZXggNDgyMTg1MC4uMjcxZTI0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAuaApAQCAtMTYsMzA1ICsxNiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRlBfSAogCi0jZGVmaW5lIG1mcF90b19ncGlvKG0pCSgobSkgJSAxMjgpCi0KLS8qIGxpc3Qgb2YgYWxsIHRoZSBjb25maWd1cmFibGUgTUZQIHBpbnMgKi8KLWVudW0gewotCU1GUF9QSU5fSU5WQUxJRCA9IC0xLAotCi0JTUZQX1BJTl9HUElPMCA9IDAsCi0JTUZQX1BJTl9HUElPMSwKLQlNRlBfUElOX0dQSU8yLAotCU1GUF9QSU5fR1BJTzMsCi0JTUZQX1BJTl9HUElPNCwKLQlNRlBfUElOX0dQSU81LAotCU1GUF9QSU5fR1BJTzYsCi0JTUZQX1BJTl9HUElPNywKLQlNRlBfUElOX0dQSU84LAotCU1GUF9QSU5fR1BJTzksCi0JTUZQX1BJTl9HUElPMTAsCi0JTUZQX1BJTl9HUElPMTEsCi0JTUZQX1BJTl9HUElPMTIsCi0JTUZQX1BJTl9HUElPMTMsCi0JTUZQX1BJTl9HUElPMTQsCi0JTUZQX1BJTl9HUElPMTUsCi0JTUZQX1BJTl9HUElPMTYsCi0JTUZQX1BJTl9HUElPMTcsCi0JTUZQX1BJTl9HUElPMTgsCi0JTUZQX1BJTl9HUElPMTksCi0JTUZQX1BJTl9HUElPMjAsCi0JTUZQX1BJTl9HUElPMjEsCi0JTUZQX1BJTl9HUElPMjIsCi0JTUZQX1BJTl9HUElPMjMsCi0JTUZQX1BJTl9HUElPMjQsCi0JTUZQX1BJTl9HUElPMjUsCi0JTUZQX1BJTl9HUElPMjYsCi0JTUZQX1BJTl9HUElPMjcsCi0JTUZQX1BJTl9HUElPMjgsCi0JTUZQX1BJTl9HUElPMjksCi0JTUZQX1BJTl9HUElPMzAsCi0JTUZQX1BJTl9HUElPMzEsCi0JTUZQX1BJTl9HUElPMzIsCi0JTUZQX1BJTl9HUElPMzMsCi0JTUZQX1BJTl9HUElPMzQsCi0JTUZQX1BJTl9HUElPMzUsCi0JTUZQX1BJTl9HUElPMzYsCi0JTUZQX1BJTl9HUElPMzcsCi0JTUZQX1BJTl9HUElPMzgsCi0JTUZQX1BJTl9HUElPMzksCi0JTUZQX1BJTl9HUElPNDAsCi0JTUZQX1BJTl9HUElPNDEsCi0JTUZQX1BJTl9HUElPNDIsCi0JTUZQX1BJTl9HUElPNDMsCi0JTUZQX1BJTl9HUElPNDQsCi0JTUZQX1BJTl9HUElPNDUsCi0JTUZQX1BJTl9HUElPNDYsCi0JTUZQX1BJTl9HUElPNDcsCi0JTUZQX1BJTl9HUElPNDgsCi0JTUZQX1BJTl9HUElPNDksCi0JTUZQX1BJTl9HUElPNTAsCi0JTUZQX1BJTl9HUElPNTEsCi0JTUZQX1BJTl9HUElPNTIsCi0JTUZQX1BJTl9HUElPNTMsCi0JTUZQX1BJTl9HUElPNTQsCi0JTUZQX1BJTl9HUElPNTUsCi0JTUZQX1BJTl9HUElPNTYsCi0JTUZQX1BJTl9HUElPNTcsCi0JTUZQX1BJTl9HUElPNTgsCi0JTUZQX1BJTl9HUElPNTksCi0JTUZQX1BJTl9HUElPNjAsCi0JTUZQX1BJTl9HUElPNjEsCi0JTUZQX1BJTl9HUElPNjIsCi0JTUZQX1BJTl9HUElPNjMsCi0JTUZQX1BJTl9HUElPNjQsCi0JTUZQX1BJTl9HUElPNjUsCi0JTUZQX1BJTl9HUElPNjYsCi0JTUZQX1BJTl9HUElPNjcsCi0JTUZQX1BJTl9HUElPNjgsCi0JTUZQX1BJTl9HUElPNjksCi0JTUZQX1BJTl9HUElPNzAsCi0JTUZQX1BJTl9HUElPNzEsCi0JTUZQX1BJTl9HUElPNzIsCi0JTUZQX1BJTl9HUElPNzMsCi0JTUZQX1BJTl9HUElPNzQsCi0JTUZQX1BJTl9HUElPNzUsCi0JTUZQX1BJTl9HUElPNzYsCi0JTUZQX1BJTl9HUElPNzcsCi0JTUZQX1BJTl9HUElPNzgsCi0JTUZQX1BJTl9HUElPNzksCi0JTUZQX1BJTl9HUElPODAsCi0JTUZQX1BJTl9HUElPODEsCi0JTUZQX1BJTl9HUElPODIsCi0JTUZQX1BJTl9HUElPODMsCi0JTUZQX1BJTl9HUElPODQsCi0JTUZQX1BJTl9HUElPODUsCi0JTUZQX1BJTl9HUElPODYsCi0JTUZQX1BJTl9HUElPODcsCi0JTUZQX1BJTl9HUElPODgsCi0JTUZQX1BJTl9HUElPODksCi0JTUZQX1BJTl9HUElPOTAsCi0JTUZQX1BJTl9HUElPOTEsCi0JTUZQX1BJTl9HUElPOTIsCi0JTUZQX1BJTl9HUElPOTMsCi0JTUZQX1BJTl9HUElPOTQsCi0JTUZQX1BJTl9HUElPOTUsCi0JTUZQX1BJTl9HUElPOTYsCi0JTUZQX1BJTl9HUElPOTcsCi0JTUZQX1BJTl9HUElPOTgsCi0JTUZQX1BJTl9HUElPOTksCi0JTUZQX1BJTl9HUElPMTAwLAotCU1GUF9QSU5fR1BJTzEwMSwKLQlNRlBfUElOX0dQSU8xMDIsCi0JTUZQX1BJTl9HUElPMTAzLAotCU1GUF9QSU5fR1BJTzEwNCwKLQlNRlBfUElOX0dQSU8xMDUsCi0JTUZQX1BJTl9HUElPMTA2LAotCU1GUF9QSU5fR1BJTzEwNywKLQlNRlBfUElOX0dQSU8xMDgsCi0JTUZQX1BJTl9HUElPMTA5LAotCU1GUF9QSU5fR1BJTzExMCwKLQlNRlBfUElOX0dQSU8xMTEsCi0JTUZQX1BJTl9HUElPMTEyLAotCU1GUF9QSU5fR1BJTzExMywKLQlNRlBfUElOX0dQSU8xMTQsCi0JTUZQX1BJTl9HUElPMTE1LAotCU1GUF9QSU5fR1BJTzExNiwKLQlNRlBfUElOX0dQSU8xMTcsCi0JTUZQX1BJTl9HUElPMTE4LAotCU1GUF9QSU5fR1BJTzExOSwKLQlNRlBfUElOX0dQSU8xMjAsCi0JTUZQX1BJTl9HUElPMTIxLAotCU1GUF9QSU5fR1BJTzEyMiwKLQlNRlBfUElOX0dQSU8xMjMsCi0JTUZQX1BJTl9HUElPMTI0LAotCU1GUF9QSU5fR1BJTzEyNSwKLQlNRlBfUElOX0dQSU8xMjYsCi0JTUZQX1BJTl9HUElPMTI3LAotCU1GUF9QSU5fR1BJTzBfMiwKLQlNRlBfUElOX0dQSU8xXzIsCi0JTUZQX1BJTl9HUElPMl8yLAotCU1GUF9QSU5fR1BJTzNfMiwKLQlNRlBfUElOX0dQSU80XzIsCi0JTUZQX1BJTl9HUElPNV8yLAotCU1GUF9QSU5fR1BJTzZfMiwKLQlNRlBfUElOX0dQSU83XzIsCi0JTUZQX1BJTl9HUElPOF8yLAotCU1GUF9QSU5fR1BJTzlfMiwKLQlNRlBfUElOX0dQSU8xMF8yLAotCU1GUF9QSU5fR1BJTzExXzIsCi0JTUZQX1BJTl9HUElPMTJfMiwKLQlNRlBfUElOX0dQSU8xM18yLAotCU1GUF9QSU5fR1BJTzE0XzIsCi0JTUZQX1BJTl9HUElPMTVfMiwKLQlNRlBfUElOX0dQSU8xNl8yLAotCU1GUF9QSU5fR1BJTzE3XzIsCi0KLQlNRlBfUElOX1VMUElfU1RQLAotCU1GUF9QSU5fVUxQSV9OWFQsCi0JTUZQX1BJTl9VTFBJX0RJUiwKLQotCU1GUF9QSU5fblhDVlJFTiwKLQlNRlBfUElOX0RGX0NMRV9uT0UsCi0JTUZQX1BJTl9ERl9uQURWMV9BTEUsCi0JTUZQX1BJTl9ERl9TQ0xLX0UsCi0JTUZQX1BJTl9ERl9TQ0xLX1MsCi0JTUZQX1BJTl9uQkUwLAotCU1GUF9QSU5fbkJFMSwKLQlNRlBfUElOX0RGX25BRFYyX0FMRSwKLQlNRlBfUElOX0RGX0lOVF9SbkIsCi0JTUZQX1BJTl9ERl9uQ1MwLAotCU1GUF9QSU5fREZfbkNTMSwKLQlNRlBfUElOX25MVUEsCi0JTUZQX1BJTl9uTExBLAotCU1GUF9QSU5fREZfbldFLAotCU1GUF9QSU5fREZfQUxFX25XRSwKLQlNRlBfUElOX0RGX25SRV9uT0UsCi0JTUZQX1BJTl9ERl9BRERSMCwKLQlNRlBfUElOX0RGX0FERFIxLAotCU1GUF9QSU5fREZfQUREUjIsCi0JTUZQX1BJTl9ERl9BRERSMywKLQlNRlBfUElOX0RGX0lPMCwKLQlNRlBfUElOX0RGX0lPMSwKLQlNRlBfUElOX0RGX0lPMiwKLQlNRlBfUElOX0RGX0lPMywKLQlNRlBfUElOX0RGX0lPNCwKLQlNRlBfUElOX0RGX0lPNSwKLQlNRlBfUElOX0RGX0lPNiwKLQlNRlBfUElOX0RGX0lPNywKLQlNRlBfUElOX0RGX0lPOCwKLQlNRlBfUElOX0RGX0lPOSwKLQlNRlBfUElOX0RGX0lPMTAsCi0JTUZQX1BJTl9ERl9JTzExLAotCU1GUF9QSU5fREZfSU8xMiwKLQlNRlBfUElOX0RGX0lPMTMsCi0JTUZQX1BJTl9ERl9JTzE0LAotCU1GUF9QSU5fREZfSU8xNSwKLQotCS8qIGFkZGl0aW9uYWwgcGlucyBvbiBQWEE5MzAgKi8KLQlNRlBfUElOX0dTSU1fVUlPLAotCU1GUF9QSU5fR1NJTV9VQ0xLLAotCU1GUF9QSU5fR1NJTV9VREVULAotCU1GUF9QSU5fR1NJTV9uVVJTVCwKLQlNRlBfUElOX1BNSUNfSU5ULAotCU1GUF9QSU5fUkRZLAotCi0JTUZQX1BJTl9NQVgsCi19OwotCi0vKgotICogYSBwb3NzaWJsZSBNRlAgY29uZmlndXJhdGlvbiBpcyByZXByZXNlbnRlZCBieSBhIDMyLWJpdCBpbnRlZ2VyCi0gKgotICogYml0ICAwLi4gOSAtIE1GUCBQaW4gTnVtYmVyICgxMDI0IFBpbnMgTWF4aW11bSkKLSAqIGJpdCAxMC4uMTIgLSBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0aW9uCi0gKiBiaXQgMTMuLjE1IC0gRHJpdmUgU3RyZW5ndGgKLSAqIGJpdCAxNi4uMTggLSBMb3cgUG93ZXIgTW9kZSBTdGF0ZQotICogYml0IDE5Li4yMCAtIExvdyBQb3dlciBNb2RlIEVkZ2UgRGV0ZWN0aW9uCi0gKiBiaXQgMjEuLjIyIC0gUnVuIE1vZGUgUHVsbCBTdGF0ZQotICoKLSAqIHRvIGZhY2lsaXRhdGUgdGhlIGRlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBwcm92aWRlZAotICoKLSAqIE1GUF9DRkdfREVGQVVMVCAtIGRlZmF1bHQgTUZQIGNvbmZpZ3VyYXRpb24gdmFsdWUsIHdpdGgKLSAqIAkJICBhbHRlcm5hdGUgZnVuY3Rpb24gPSAwLAotICogCQkgIGRyaXZlIHN0cmVuZ3RoID0gZmFzdCAzbUEgKE1GUF9EUzAzWCkKLSAqIAkJICBsb3cgcG93ZXIgbW9kZSA9IGRlZmF1bHQKLSAqIAkJICBlZGdlIGRldGVjdGlvbiA9IG5vbmUKLSAqCi0gKiBNRlBfQ0ZHCS0gZGVmYXVsdCBNRlBSIHZhbHVlIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uCi0gKiBNRlBfQ0ZHX0RSVgktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiBhbmQKLSAqIAkJICBwaW4gZHJpdmUgc3RyZW5ndGgKLSAqIE1GUF9DRkdfTFBNCS0gZGVmYXVsdCBNRlBSIHZhbHVlIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uIGFuZAotICogCQkgIGxvdyBwb3dlciBtb2RlCi0gKiBNRlBfQ0ZHX1gJLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24sCi0gKiAJCSAgcGluIGRyaXZlIHN0cmVuZ3RoIGFuZCBsb3cgcG93ZXIgbW9kZQotICovCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBtZnBfY2ZnX3Q7Ci0KLSNkZWZpbmUgTUZQX1BJTih4KQkJKCh4KSAmIDB4M2ZmKQotCi0jZGVmaW5lIE1GUF9BRjAJCQkoMHgwIDw8IDEwKQotI2RlZmluZSBNRlBfQUYxCQkJKDB4MSA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGMgkJCSgweDIgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjMJCQkoMHgzIDw8IDEwKQotI2RlZmluZSBNRlBfQUY0CQkJKDB4NCA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGNQkJCSgweDUgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjYJCQkoMHg2IDw8IDEwKQotI2RlZmluZSBNRlBfQUY3CQkJKDB4NyA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGX01BU0sJCSgweDcgPDwgMTApCi0jZGVmaW5lIE1GUF9BRih4KQkJKCgoeCkgPj4gMTApICYgMHg3KQotCi0jZGVmaW5lIE1GUF9EUzAxWAkJKDB4MCA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMDJYCQkoMHgxIDw8IDEzKQotI2RlZmluZSBNRlBfRFMwM1gJCSgweDIgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzA0WAkJKDB4MyA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMDZYCQkoMHg0IDw8IDEzKQotI2RlZmluZSBNRlBfRFMwOFgJCSgweDUgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzEwWAkJKDB4NiA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMTNYCQkoMHg3IDw8IDEzKQotI2RlZmluZSBNRlBfRFNfTUFTSwkJKDB4NyA8PCAxMykKLSNkZWZpbmUgTUZQX0RTKHgpCQkoKCh4KSA+PiAxMykgJiAweDcpCi0KLSNkZWZpbmUgTUZQX0xQTV9ERUZBVUxUCQkoMHgwIDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX0RSSVZFX0xPVwkoMHgxIDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX0RSSVZFX0hJR0gJKDB4MiA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9QVUxMX0xPVwkoMHgzIDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX1BVTExfSElHSAkoMHg0IDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX0ZMT0FUCQkoMHg1IDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX0lOUFVUCQkoMHg2IDw8IDE2KQotI2RlZmluZSBNRlBfTFBNX1NUQVRFX01BU0sJKDB4NyA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9TVEFURSh4KQkoKCh4KSA+PiAxNikgJiAweDcpCi0KLSNkZWZpbmUgTUZQX0xQTV9FREdFX05PTkUJKDB4MCA8PCAxOSkKLSNkZWZpbmUgTUZQX0xQTV9FREdFX1JJU0UJKDB4MSA8PCAxOSkKLSNkZWZpbmUgTUZQX0xQTV9FREdFX0ZBTEwJKDB4MiA8PCAxOSkKLSNkZWZpbmUgTUZQX0xQTV9FREdFX0JPVEgJKDB4MyA8PCAxOSkKLSNkZWZpbmUgTUZQX0xQTV9FREdFX01BU0sJKDB4MyA8PCAxOSkKLSNkZWZpbmUgTUZQX0xQTV9FREdFKHgpCQkoKCh4KSA+PiAxOSkgJiAweDMpCi0KLSNkZWZpbmUgTUZQX1BVTExfTk9ORQkJKDB4MCA8PCAyMSkKLSNkZWZpbmUgTUZQX1BVTExfTE9XCQkoMHgxIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTF9ISUdICQkoMHgyIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTF9CT1RICQkoMHgzIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTF9NQVNLCQkoMHgzIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTCh4KQkJKCgoeCkgPj4gMjEpICYgMHgzKQotCi0jZGVmaW5lIE1GUF9DRkdfREVGQVVMVAkJKE1GUF9BRjAgfCBNRlBfRFMwM1ggfCBNRlBfTFBNX0RFRkFVTFQgfFwKLQkJCQkgTUZQX0xQTV9FREdFX05PTkUgfCBNRlBfUFVMTF9OT05FKQotCi0jZGVmaW5lIE1GUF9DRkcocGluLCBhZikJCVwKLQkoKE1GUF9DRkdfREVGQVVMVCAmIH5NRlBfQUZfTUFTSykgfFwKLQkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZikpCi0KLSNkZWZpbmUgTUZQX0NGR19EUlYocGluLCBhZiwgZHJ2KQlcCi0JKChNRlBfQ0ZHX0RFRkFVTFQgJiB+KE1GUF9BRl9NQVNLIHwgTUZQX0RTX01BU0spKSB8XAotCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmIHwgTUZQXyMjZHJ2KSkKLQotI2RlZmluZSBNRlBfQ0ZHX0xQTShwaW4sIGFmLCBscG0pCVwKLQkoKE1GUF9DRkdfREVGQVVMVCAmIH4oTUZQX0FGX01BU0sgfCBNRlBfTFBNX1NUQVRFX01BU0spKSB8XAotCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmIHwgTUZQX0xQTV8jI2xwbSkpCi0KLSNkZWZpbmUgTUZQX0NGR19YKHBpbiwgYWYsIGRydiwgbHBtKQlcCi0JKChNRlBfQ0ZHX0RFRkFVTFQgJiB+KE1GUF9BRl9NQVNLIHwgTUZQX0RTX01BU0sgfCBNRlBfTFBNX1NUQVRFX01BU0spKSB8XAotCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmIHwgTUZQXyMjZHJ2IHwgTUZQX0xQTV8jI2xwbSkpCisjaW5jbHVkZSA8cGxhdC9tZnAuaD4KIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUZQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tbWMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tbWMuaAppbmRleCA2ZDEzMDRjLi4wMmE2OWRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbW1jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21tYy5oCkBAIC0xNCw2ICsxNCwxMSBAQAogCWludCAoKmdldF9ybykoc3RydWN0IGRldmljZSAqKTsKIAl2b2lkICgqc2V0cG93ZXIpKHN0cnVjdCBkZXZpY2UgKiwgdW5zaWduZWQgaW50KTsKIAl2b2lkICgqZXhpdCkoc3RydWN0IGRldmljZSAqLCB2b2lkICopOworCWludCBncGlvX2NhcmRfZGV0ZWN0OwkJCS8qIGdwaW8gZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0aW9uICovCisJaW50IGdwaW9fY2FyZF9ybzsJCQkvKiBncGlvIGRldGVjdGluZyByZWFkIG9ubHkgdG9nZ2xlICovCisJYm9vbCBncGlvX2NhcmRfcm9faW52ZXJ0OwkJLyogZ3BpbyBybyBpcyBpbnZlcnRlZCAqLworCWludCBncGlvX3Bvd2VyOwkJCQkvKiBncGlvIHBvd2VyaW5nIHVwIE1NQyBidXMgKi8KKwlib29sIGdwaW9fcG93ZXJfaW52ZXJ0OwkJCS8qIGdwaW8gcG93ZXIgaXMgaW52ZXJ0ZWQgKi8KIH07CiAKIGV4dGVybiB2b2lkIHB4YV9zZXRfbWNpX2luZm8oc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdGMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGM5YjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10Yy5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcGFsbXRjLWdwaW8uaAorICoKKyAqIEdQSU9zIGFuZCBpbnRlcnJ1cHRzIGZvciBQYWxtIFR1bmdzdGVufEMgSGFuZGhlbGQgQ29tcHV0ZXIKKyAqCisgKiBBdXRob3JzOglBbGV4IE9zYm9ybmUgPGJvYm9mZG9vbUBnbWFpbC5jb20+CisgKgkJTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCQlIb2xnZXIgQm9ja2xldCA8Yml0ei5lbWFpbEBnbXgubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfUEFMTVRDX0hfCisjZGVmaW5lIF9JTkNMVURFX1BBTE1UQ19IXworCisvKiogSEVSRSBBUkUgR1BJT3MgKiovCisKKy8qIEdQSU9zICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0VBUlBIT05FX0RFVEVDVAkyCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0NSQURMRV9ERVRFQ1QJNQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19IT1RTWU5DX0JVVFRPTgk3CisKKy8qIFNEL01NQyAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19TRF9ERVRFQ1RfTgkxMgorI2RlZmluZSBHUElPX05SX1BBTE1UQ19TRF9QT1dFUgkJMzIKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfU0RfUkVBRE9OTFkJNTQKKworLyogV0xBTiAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkJMTMKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUENNQ0lBX1BXUlJFQURZCTE0CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjEJMTUKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMgkzMworI2RlZmluZSBHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzCTU1CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVAk3OAorCisvKiBVREMgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfVVNCX0RFVEVDVF9OCTQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfVVNCX1BPV0VSCTM2CisKKy8qIExDRC9CQUNLTElHSFQgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfQkxfUE9XRVIJCTE2CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0xDRF9QT1dFUgk0NAorI2RlZmluZSBHUElPX05SX1BBTE1UQ19MQ0RfQkxBTksJMzgKKworLyogVUFSVCAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19SUzIzMl9QT1dFUgkzNworCisvKiBJUkRBICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0lSX0RJU0FCTEUJNDUKKworLyogSVJRcyAqLworI2RlZmluZSBJUlFfR1BJT19QQUxNVENfU0RfREVURUNUX04JSVJRX0dQSU8oR1BJT19OUl9QQUxNVENfU0RfREVURUNUX04pCisjZGVmaW5lIElSUV9HUElPX1BBTE1UQ19XTEFOX1JFQURZCUlSUV9HUElPKEdQSU9fTlJfUEFMTVRDX1dMQU5fUkVBRFkpCisKKy8qIFVDQjE0MDAgR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUE9XRVJfREVURUNUCSgweDgwIHwgMHgwMCkKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfSEVBRFBIT05FX0RFVEVDVAkoMHg4MCB8IDB4MDEpCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1NQRUFLRVJfRU5BQkxFCSgweDgwIHwgMHgwMykKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfVklCUkFfUE9XRVIJKDB4ODAgfCAweDA1KQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19MRURfUE9XRVIJKDB4ODAgfCAweDA3KQorCisvKiogSEVSRSBBUkUgSU5JVCBWQUxVRVMgKiovCisjZGVmaW5lIFBBTE1UQ19VQ0IxNDAwX0dQSU9fT0ZGU0VUCTB4ODAKKworLyogQkFUVEVSWSAqLworI2RlZmluZSBQQUxNVENfQkFUX01BWF9WT0xUQUdFCQk0MDAwCS8qIDQuMDBWIG1heGltdW0gdm9sdGFnZSAqLworI2RlZmluZSBQQUxNVENfQkFUX01JTl9WT0xUQUdFCQkzNTUwCS8qIDMuNTVWIGNyaXRpY2FsIHZvbHRhZ2UgKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NQVhfQ1VSUkVOVAkJMAkvKiB1bmtub2tuICovCisjZGVmaW5lIFBBTE1UQ19CQVRfTUlOX0NVUlJFTlQJCTAJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVENfQkFUX01BWF9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVENfQkFUX01JTl9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNVENfTUFYX0xJRkVfTUlOUwkJMjQwCS8qIG9uLWxpZmUgaW4gbWludXRlcyAqLworCisjZGVmaW5lIFBBTE1UQ19CQVRfTUVBU1VSRV9ERUxBWQkoSFogKiAxKQorCisvKiBCQUNLTElHSFQgKi8KKyNkZWZpbmUgUEFMTVRDX01BWF9JTlRFTlNJVFkJCTB4RkUKKyNkZWZpbmUgUEFMTVRDX0RFRkFVTFRfSU5URU5TSVRZCTB4N0UKKyNkZWZpbmUgUEFMTVRDX0xJTUlUX01BU0sJCTB4N0YKKyNkZWZpbmUgUEFMTVRDX1BSRVNDQUxFUgkJMHgzRgorI2RlZmluZSBQQUxNVENfUEVSSU9EX05TCQkzNTAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10eC5oCmluZGV4IGU3NDA4MmMuLjFiZTBkYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdHguaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXR4LmgKQEAgLTgyLDYgKzgyLDExIEBACiAjZGVmaW5lIFBBTE1UWF9QSFlTX0ZMQVNIX1NUQVJUCVBYQV9DUzBfUEhZUwkvKiBDaGlwU2VsZWN0IDAgKi8KICNkZWZpbmUgUEFMTVRYX1BIWVNfTkFORF9TVEFSVAlQWEFfQ1MxX1BIWVMJLyogQ2hpcFNlbGVjdCAxICovCiAKKyNkZWZpbmUgUEFMTVRYX05BTkRfQUxFX1BIWVMJKFBBTE1UWF9QSFlTX05BTkRfU1RBUlQgfCAoMSA8PCAyNCkpCisjZGVmaW5lIFBBTE1UWF9OQU5EX0NMRV9QSFlTCShQQUxNVFhfUEhZU19OQU5EX1NUQVJUIHwgKDEgPDwgMjUpKQorI2RlZmluZSBQQUxNVFhfTkFORF9BTEVfVklSVAkweGZmMTAwMDAwCisjZGVmaW5lIFBBTE1UWF9OQU5EX0NMRV9WSVJUCTB4ZmYyMDAwMDAKKwogLyogVE9VQ0hTQ1JFRU4gKi8KICNkZWZpbmUgQUM5N19MSU5LX0ZSQU1FCQkJMjEKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaAppbmRleCA3ZDFhMDU5Li5lOTFkNjNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaApAQCAtMjA4LDcgKzIwOCw3IEBACiAjZGVmaW5lIENLRU5fTVZFRAk0MwkvKiA8IE1WRUQgY2xvY2sgZW5hYmxlICovCiAKIC8qIE5vdGU6IEdDVSBjbG9jayBlbmFibGUgYml0IGRpZmZlcnMgb24gUFhBMzAwL1BYQTMxMCBhbmQgUFhBMzIwICovCi0jZGVmaW5lIFBYQTMwMF9DS0VOX0dSQVBISUNTCTQyCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgY2xvY2sgZW5hYmxlICovCi0jZGVmaW5lIFBYQTMyMF9DS0VOX0dSQVBISUNTCTcJLyogR3JhcGhpY3MgY29udHJvbGxlciBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgQ0tFTl9QWEEzMDBfR0NVCQk0MgkvKiBHcmFwaGljcyBjb250cm9sbGVyIGNsb2NrIGVuYWJsZSAqLworI2RlZmluZSBDS0VOX1BYQTMyMF9HQ1UJCTcJLyogR3JhcGhpY3MgY29udHJvbGxlciBjbG9jayBlbmFibGUgKi8KIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUFhBM1hYX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YWZiLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaAppbmRleCA2OTMyNzIwLi5mNzMwNjFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaApAQCAtMTE4LDcgKzExOCw4IEBACiAJdV9pbnQJCWZpeGVkX21vZGVzOjEsCiAJCQljbWFwX2ludmVyc2U6MSwKIAkJCWNtYXBfc3RhdGljOjEsCi0JCQl1bnVzZWQ6Mjk7CisJCQlhY2NlbGVyYXRpb25fZW5hYmxlZDoxLAorCQkJdW51c2VkOjI4OwogCiAJLyogVGhlIGZvbGxvd2luZyBzaG91bGQgYmUgZGVmaW5lZCBpbiBMQ0NSMAogCSAqICAgICAgTENDUjBfQWN0IG9yIExDQ1IwX1BhcyAgICAgICAgICBBY3RpdmUgb3IgUGFzc2l2ZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oCmluZGV4IGFkMjNlNzQuLjY4NDY0Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1pbnRjLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgSUNGUAkJX19SRUcoMHg0MEQwMDAwQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyICovCiAjZGVmaW5lIElDUFIJCV9fUkVHKDB4NDBEMDAwMTApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyICovCiAjZGVmaW5lIElDQ1IJCV9fUkVHKDB4NDBEMDAwMTQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIElDSFAJCV9fUkVHKDB4NDBEMDAwMTgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBIaWdoZXN0IFByaW9yaXR5IFJlZ2lzdGVyICovCiAKICNkZWZpbmUgSUNJUDIJCV9fUkVHKDB4NDBEMDAwOUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAyICovCiAjZGVmaW5lIElDTVIyCQlfX1JFRygweDQwRDAwMEEwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAyICovCkBAIC0yMCw0ICsyMSwxNCBAQAogI2RlZmluZSBJQ0ZQMgkJX19SRUcoMHg0MEQwMDBBOCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KICNkZWZpbmUgSUNQUjIJCV9fUkVHKDB4NDBEMDAwQUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KIAorI2RlZmluZSBJQ0lQMwkJX19SRUcoMHg0MEQwMDEzMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIElSUSBQZW5kaW5nIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgSUNNUjMJCV9fUkVHKDB4NDBEMDAxMzQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBNYXNrIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgSUNMUjMJCV9fUkVHKDB4NDBEMDAxMzgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBMZXZlbCBSZWdpc3RlciAzICovCisjZGVmaW5lIElDRlAzCQlfX1JFRygweDQwRDAwMTNDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRklRIFBlbmRpbmcgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBJQ1BSMwkJX19SRUcoMHg0MEQwMDE0MCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIFBlbmRpbmcgUmVnaXN0ZXIgMyAqLworCisjZGVmaW5lIElQUih4KQkJX19SRUcoMHg0MEQwMDAxQyArICh4IDwgMzIgPyAoeCA8PCAyKQkJXAorCQkJCTogKHggPCA2NCA/ICgweDk0ICsgKCh4IC0gMzIpIDw8IDIpKQlcCisJCQkJOiAoMHgxMjggKyAoKHggLSA2NCkgPDwgMikpKSkpCisKICNlbmRpZiAvKiBfX0FTTV9NQUNIX1JFR1NfSU5UQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBiNTQ3NDk0Li4yMzc3MzRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTM3LDcgKzM3LDcgQEAKIHsKIAlpZiAobWFjaGluZV9pc19saXR0bGV0b24oKSB8fCBtYWNoaW5lX2lzX2ludGVsbW90ZTIoKQogCSAgICB8fCBtYWNoaW5lX2lzX2NzYjcyNigpIHx8IG1hY2hpbmVfaXNfc3RhcmdhdGUyKCkKLQkgICAgfHwgbWFjaGluZV9pc19jbV94MzAwKCkpCisJICAgIHx8IG1hY2hpbmVfaXNfY21feDMwMCgpIHx8IG1hY2hpbmVfaXNfYmFsbG9vbjMoKSkKIAkJVUFSVCA9IFNUVUFSVDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwppbmRleCBmNmUwMzAwLi42MTEyYWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwpAQCAtMjUsNiArMjUsOCBAQAogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCisjZGVmaW5lIE1BWF9JTlRFUk5BTF9JUlFTCTEyOAorCiAjZGVmaW5lIElSUV9CSVQobikJKCgobikgLSBQWEFfSVJRKDApKSAmIDB4MWYpCiAjZGVmaW5lIF9JQ01SKG4pCSgqKCgoKG4pIC0gUFhBX0lSUSgwKSkgJiB+MHgxZikgPyAmSUNNUjIgOiAmSUNNUikpCiAjZGVmaW5lIF9JQ0xSKG4pCSgqKCgoKG4pIC0gUFhBX0lSUSgwKSkgJiB+MHgxZikgPyAmSUNMUjIgOiAmSUNMUikpCkBAIC0xMjAsNyArMTIyLDkgQEAKIAogdm9pZCBfX2luaXQgcHhhX2luaXRfaXJxKGludCBpcnFfbnIsIHNldF93YWtlX3QgZm4pCiB7Ci0JaW50IGlycTsKKwlpbnQgaXJxLCBpOworCisJQlVHX09OKGlycV9uciA+IE1BWF9JTlRFUk5BTF9JUlFTKTsKIAogCXB4YV9pbnRlcm5hbF9pcnFfbnIgPSBpcnFfbnI7CiAKQEAgLTEyOSw2ICsxMzMsMTIgQEAKIAkJX0lDTFIoaXJxKSA9IDA7CS8qIGFsbCBJUlFzIGFyZSBJUlEsIG5vdCBGSVEgKi8KIAl9CiAKKwkvKiBpbml0aWFsaXplIGludGVycnVwdCBwcmlvcml0eSAqLworCWlmIChjcHVfaXNfcHhhMjd4KCkgfHwgY3B1X2lzX3B4YTN4eCgpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpcnFfbnI7IGkrKykKKwkJCUlQUihpKSA9IGkgfCAoMSA8PCAzMSk7CisJfQorCiAJLyogb25seSB1bm1hc2tlZCBpbnRlcnJ1cHRzIGtpY2sgdXMgb3V0IG9mIGlkbGUgKi8KIAlJQ0NSID0gMTsKIApAQCAtMTQzLDcgKzE1Myw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2ljbXJbMl07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9pY21yW01BWF9JTlRFUk5BTF9JUlFTLzMyXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2lwcltNQVhfSU5URVJOQUxfSVJRU107CiAKIHN0YXRpYyBpbnQgcHhhX2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTE1Myw2ICsxNjQsOCBAQAogCQlzYXZlZF9pY21yW2ldID0gX0lDTVIoaXJxKTsKIAkJX0lDTVIoaXJxKSA9IDA7CiAJfQorCWZvciAoaSA9IDA7IGkgPCBweGFfaW50ZXJuYWxfaXJxX25yOyBpKyspCisJCXNhdmVkX2lwcltpXSA9IElQUihpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY1LDYgKzE3OCw4IEBACiAJCV9JQ01SKGlycSkgPSBzYXZlZF9pY21yW2ldOwogCQlfSUNMUihpcnEpID0gMDsKIAl9CisJZm9yIChpID0gMDsgaSA8IHB4YV9pbnRlcm5hbF9pcnFfbnI7IGkrKykKKwkJSVBSKGkpID0gc2F2ZWRfaXByW2ldOwogCiAJSUNDUiA9IDE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCmluZGV4IDU1YjM3ODguLjEzODQ4OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCkBAIC0yNjUsNDUgKzI2NSwxMiBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NTUNfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfUFhBX01PRFVMRSkKLXN0YXRpYyBpbnQgbGl0dGxldG9uX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIGlycV9oYW5kbGVyX3QgbGl0dGxldG9uX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciwgZ3Bpb19jZCA9IEdQSU9fTU1DMV9DQVJEX0RFVEVDVDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChncGlvX2NkLCAibW1jIGNhcmQgZGV0ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF9jZDsKLQotCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fY2QpOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoZ3Bpb19jZCksIGxpdHRsZXRvbl9kZXRlY3RfaW50LAotCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICJtbWMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgY2FyZCBkZXRlY3QgSVJRXG4iKTsKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7Ci0JfQotCXJldHVybiAwOwotCi1lcnJfcmVxdWVzdF9pcnE6Ci0JZ3Bpb19mcmVlKGdwaW9fY2QpOwotZXJyX3JlcXVlc3RfY2Q6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgbGl0dGxldG9uX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZ3Bpb19jZCA9IEdQSU9fTU1DMV9DQVJEX0RFVEVDVDsKLQotCWZyZWVfaXJxKGdwaW9fdG9faXJxKGdwaW9fY2QpLCBkYXRhKTsKLQlncGlvX2ZyZWUoZ3Bpb19jZCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbGl0dGxldG9uX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5kZXRlY3RfZGVsYXkJPSAyMCwKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuaW5pdCAJCT0gbGl0dGxldG9uX21jaV9pbml0LAotCS5leGl0CQk9IGxpdHRsZXRvbl9tY2lfZXhpdCwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTU1DMV9DQVJEX0RFVEVDVCwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGxpdHRsZXRvbl9pbml0X21tYyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCmluZGV4IGYwNGM4MzMuLmM2YTk0ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKQEAgLTQ4MiwxMSArNDgyLDE0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbHViYm9ja19tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmRldGVjdF9kZWxheQk9IDEsCi0JLmluaXQgCQk9IGx1YmJvY2tfbWNpX2luaXQsCi0JLmdldF9ybwkJPSBsdWJib2NrX21jaV9nZXRfcm8sCi0JLmV4aXQgCQk9IGx1YmJvY2tfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuZGV0ZWN0X2RlbGF5CQk9IDEsCisJLmluaXQgCQkJPSBsdWJib2NrX21jaV9pbml0LAorCS5nZXRfcm8JCQk9IGx1YmJvY2tfbWNpX2dldF9ybywKKwkuZXhpdCAJCQk9IGx1YmJvY2tfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgbHViYm9ja19pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKQEAgLTUwNCw4ICs1MDcsOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBsdWJib2NrX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFLAotCS50cmFuc2NlaXZlcl9tb2RlID0gbHViYm9ja19pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IC0xLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSwKKwkudHJhbnNjZWl2ZXJfbW9kZQk9IGx1YmJvY2tfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGx1YmJvY2tfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKaW5kZXggY2EzOTY2OS4uNTM2MGMwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCkBAIC0xNDAsMTUgKzE0MCw5IEBACiAgKiBJUkRBCiAgKi8KIAotc3RhdGljIHZvaWQgbWFnaWNpYW5faXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJTzgzX01BR0lDSUFOX25JUl9FTiwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgbWFnaWNpYW5fZmljcF9pbmZvID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IG1hZ2ljaWFuX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJTzgzX01BR0lDSUFOX25JUl9FTiwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qCkBAIC02NTEsNTUgKzY0NSwyNCBAQAogc3RhdGljIGludCBtYWdpY2lhbl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLCB2b2lkICpkYXRhKQogewotCWludCBlcnI7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShJUlFfTUFHSUNJQU5fU0QsIGRldGVjdF9pcnEsCisJcmV0dXJuIHJlcXVlc3RfaXJxKElSUV9NQUdJQ0lBTl9TRCwgZGV0ZWN0X2lycSwKIAkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLAotCQkJCSJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKLQllcnIgPSBncGlvX3JlcXVlc3QoRUdQSU9fTUFHSUNJQU5fU0RfUE9XRVIsICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfcG93ZXI7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEVHUElPX01BR0lDSUFOX25TRF9SRUFET05MWSwgIm5TRF9SRUFET05MWSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfcmVhZG9ubHk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX3JlcXVlc3RfcmVhZG9ubHk6Ci0JZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX1NEX1BPV0VSKTsKLWVycl9yZXF1ZXN0X3Bvd2VyOgotCWZyZWVfaXJxKElSUV9NQUdJQ0lBTl9TRCwgZGF0YSk7Ci1lcnJfcmVxdWVzdF9pcnE6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgbWFnaWNpYW5fbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0JZ3Bpb19zZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fU0RfUE9XRVIsICgxIDw8IHZkZCkgJiBwZGF0YS0+b2NyX21hc2spOwotfQotCi1zdGF0aWMgaW50IG1hZ2ljaWFuX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiAoIWdwaW9fZ2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX25TRF9SRUFET05MWSkpOworCQkJCSJtbWMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgbWFnaWNpYW5fbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCWdwaW9fZnJlZShFR1BJT19NQUdJQ0lBTl9uU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShFR1BJT19NQUdJQ0lBTl9TRF9QT1dFUik7CiAJZnJlZV9pcnEoSVJRX01BR0lDSUFOX1NELCBkYXRhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBtYWdpY2lhbl9tY2lfaW5mbyA9IHsKLQkub2NyX21hc2sgPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgICAgID0gbWFnaWNpYW5fbWNpX2luaXQsCi0JLmdldF9ybyAgID0gbWFnaWNpYW5fbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgPSBtYWdpY2lhbl9tY2lfc2V0cG93ZXIsCi0JLmV4aXQgICAgID0gbWFnaWNpYW5fbWNpX2V4aXQsCisJLm9jcl9tYXNrIAkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgICAgIAkJPSBtYWdpY2lhbl9tY2lfaW5pdCwKKwkuZXhpdCAgICAgCQk9IG1hZ2ljaWFuX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSBFR1BJT19NQUdJQ0lBTl9uU0RfUkVBRE9OTFksCisJLmdwaW9fY2FyZF9yb19pbnZlcnQJPSAxLAorCS5ncGlvX3Bvd2VyCQk9IEVHUElPX01BR0lDSUFOX1NEX1BPV0VSLAogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCmluZGV4IGY0ZGFiZjAuLmE0ZWVhZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCkBAIC00NTAsMTAgKzQ1MCwxMyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIG1haW5zdG9uZV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IG1haW5zdG9uZV9tY2lfaW5pdCwKLQkuc2V0cG93ZXIgCT0gbWFpbnN0b25lX21jaV9zZXRwb3dlciwKLQkuZXhpdAkJPSBtYWluc3RvbmVfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuaW5pdCAJCQk9IG1haW5zdG9uZV9tY2lfaW5pdCwKKwkuc2V0cG93ZXIgCQk9IG1haW5zdG9uZV9tY2lfc2V0cG93ZXIsCisJLmV4aXQJCQk9IG1haW5zdG9uZV9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgdm9pZCBtYWluc3RvbmVfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCkBAIC00NzYsOCArNDc5LDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgbWFpbnN0b25lX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlID0gbWFpbnN0b25lX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gLTEsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gbWFpbnN0b25lX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBncGlvX2tleXNfYnV0dG9uW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKaW5kZXggMmQyODEzMi4uM2NhYjQ1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwpAQCAtNDM0LDcyICs0MzQsMTUgQEAKIC8qCiAgKiBTRElPL01NQyBDYXJkIGNvbnRyb2xsZXIKICAqLwotc3RhdGljIHZvaWQgbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzkxX1NESU9fRU4sIDEpOwkvKiBlbmFibGUgU0RJTyBwb3dlciAqLwotCWVsc2UKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzkxX1NESU9fRU4sIDApOwkvKiBkaXNhYmxlIFNESU8gcG93ZXIgKi8KLX0KLQotc3RhdGljIGludCBtY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJTzc4X1NESU9fUk8pOwotfQotCi1zdHJ1Y3QgZ3Bpb19yZXNzIG1jaV9ncGlvc1tdID0gewotCU1JT19HUElPX0lOKEdQSU83OF9TRElPX1JPLCAJIlNESU8gcmVhZG9ubHkgZGV0ZWN0IiksCi0JTUlPX0dQSU9fSU4oR1BJTzE1X1NESU9fSU5TRVJULAkiU0RJTyBpbnNlcnRpb24gZGV0ZWN0IiksCi0JTUlPX0dQSU9fT1VUKEdQSU85MV9TRElPX0VOLCAwLAkiU0RJTyBwb3dlciBlbmFibGUiKQotfTsKLQotc3RhdGljIHZvaWQgbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCW1pb19ncGlvX2ZyZWUoQVJSQVlfQU5EX1NJWkUobWNpX2dwaW9zKSk7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJTzE1X1NESU9fSU5TRVJUKSwgZGF0YSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbWlvYTcwMV9tY2lfaW5mbzsKLQogLyoqCiAgKiBUaGUgY2FyZCBkZXRlY3QgaW50ZXJydXB0IGlzbid0IGRlYm91bmNlZCBzbyB3ZSBkZWxheSBpdCBieSAyNTBtcwogICogdG8gZ2l2ZSB0aGUgY2FyZCBhIGNoYW5jZSB0byBmdWxseSBpbnNlcnQvZWplY3QuCiAgKi8KLXN0YXRpYyBpbnQgbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGRldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IHJjOwotCWludCBpcnEgPSBncGlvX3RvX2lycShHUElPMTVfU0RJT19JTlNFUlQpOwotCi0JcmMgPSBtaW9fZ3Bpb19yZXF1ZXN0KEFSUkFZX0FORF9TSVpFKG1jaV9ncGlvcykpOwotCWlmIChyYykKLQkJZ290byBlcnJfZ3BpbzsKLQkvKiBlbmFibGUgUkUvRkUgaW50ZXJydXB0IG9uIGNhcmQgaW5zZXJ0aW9uIGFuZCByZW1vdmFsICovCi0JcmMgPSByZXF1ZXN0X2lycShpcnEsIGRldGVjdF9pbnQsCi0JCQkgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfAotCQkJIElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2lycTsKLQotCW1pb2E3MDFfbWNpX2luZm8uZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwotCXJldHVybiAwOwotCi1lcnJfaXJxOgotCWRldl9lcnIoZGV2LCAibWlvYTcwMV9tY2lfaW5pdDogTU1DL1NEOiIKLQkJIiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOwotCW1pb19ncGlvX2ZyZWUoQVJSQVlfQU5EX1NJWkUobWNpX2dwaW9zKSk7Ci1lcnJfZ3BpbzoKLQlyZXR1cm4gcmM7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbWlvYTcwMV9tY2lfaW5mbyA9IHsKLQkub2NyX21hc2sgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuaW5pdAkgID0gbWNpX2luaXQsCi0JLmdldF9ybwkgID0gbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgPSBtY2lfc2V0cG93ZXIsCi0JLmV4aXQJICA9IG1jaV9leGl0LAorCS5vY3JfbWFzayAJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPMTVfU0RJT19JTlNFUlQsCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPNzhfU0RJT19STywKKwkuZ3Bpb19wb3dlcgkJPSBHUElPOTFfU0RJT19FTiwKIH07CiAKIC8qIEZsYXNoUkFNICovCkBAIC03NjUsMTkgKzcwOCwyMCBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmsgPSB7Ci0JLmJ1c19pZAk9IDAsIC8qIE11c3QgbWF0Y2ggaWQgaW4gcHhhMjd4X2RldmljZV9jYW1lcmEgaW4gZGV2aWNlLmMgKi8KLX07Ci0KIC8qIEJvYXJkIEkyQyBkZXZpY2VzLiAqLwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG1pb2E3MDFfaTJjX2RldmljZXNbXSA9IHsKIAl7Ci0JCS8qIE11c3QgaW5pdGlhbGl6ZSBiZWZvcmUgdGhlIGNhbWVyYShzKSAqLwogCQlJMkNfQk9BUkRfSU5GTygibXQ5bTExMSIsIDB4NWQpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmssCiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKKwkuYnVzX2lkCQk9IDAsIC8qIE1hdGNoIGlkIGluIHB4YTI3eF9kZXZpY2VfY2FtZXJhIGluIGRldmljZS5jICovCisJLmJvYXJkX2luZm8JPSAmbWlvYTcwMV9pMmNfZGV2aWNlc1swXSwKKwkuaTJjX2FkYXB0ZXJfaWQJPSAwLAorCS5tb2R1bGVfbmFtZQk9ICJtdDltMTExIiwKK307CisKIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgaTJjX3BkYXRhID0gewogCS5mYXN0X21vZGUgPSAxLAogfTsKQEAgLTgxMSw2ICs3NTUsNyBAQAogTUlPX1NJTVBMRV9ERVYobWlvYTcwMV9zb3VuZCwJICAibWlvYTcwMS13bTk3MTMiLCBOVUxMKQogTUlPX1NJTVBMRV9ERVYobWlvYTcwMV9ib2FyZCwJICAibWlvYTcwMS1ib2FyZCIsICBOVUxMKQogTUlPX1NJTVBMRV9ERVYoZ3Bpb192YnVzLAkgICJncGlvLXZidXMiLCAgICAgICZncGlvX3ZidXNfZGF0YSk7CitNSU9fU0lNUExFX0RFVihtaW9hNzAxX2NhbWVyYSwJICAic29jLWNhbWVyYS1wZHJ2IiwmaWNsaW5rKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtaW9hNzAxX2dwaW9fa2V5cywKQEAgLTgyMSw2ICs3NjYsNyBAQAogCSZwb3dlcl9kZXYsCiAJJnN0cmF0YWZsYXNoLAogCSZncGlvX3ZidXMsCisJJm1pb2E3MDFfY2FtZXJhLAogCSZtaW9hNzAxX2JvYXJkLAogfTsKIApAQCAtODQxLDcgKzc4Nyw3IEBACiBzdGF0aWMgc3RydWN0IGdwaW9fcmVzcyBnbG9iYWxfZ3Bpb3NbXSA9IHsKIAlNSU9fR1BJT19PVVQoR1BJTzlfQ0hBUkdFX0VOLCAxLCAiQ2hhcmdlciBlbmFibGUiKSwKIAlNSU9fR1BJT19PVVQoR1BJTzE4X1BPV0VST0ZGLCAwLCAiUG93ZXIgT2ZmIiksCi0JTUlPX0dQSU9fT1VUKEdQSU84N19MQ0RfUE9XRVIsIDAsICJMQ0QgUG93ZXIiKQorCU1JT19HUElPX09VVChHUElPODdfTENEX1BPV0VSLCAwLCAiTENEIFBvd2VyIiksCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgbWlvYTcwMV9tYWNoaW5lX2luaXQodm9pZCkKQEAgLTg1NSw2ICs4MDEsNyBAQAogCW1pb19ncGlvX3JlcXVlc3QoQVJSQVlfQU5EX1NJWkUoZ2xvYmFsX2dwaW9zKSk7CiAJYm9vdHN0cmFwX2luaXQoKTsKIAlzZXRfcHhhX2ZiX2luZm8oJm1pb2E3MDFfcHhhZmJfaW5mbyk7CisJbWlvYTcwMV9tY2lfaW5mby5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CiAJcHhhX3NldF9tY2lfaW5mbygmbWlvYTcwMV9tY2lfaW5mbyk7CiAJcHhhX3NldF9rZXlwYWRfaW5mbygmbWlvYTcwMV9rZXlwYWRfaW5mbyk7CiAJd205N3h4X2JhdF9zZXRfcGRhdGEoJm1pb2E3MDFfYmF0dGVyeV9kYXRhKTsKQEAgLTg2OSw3ICs4MTYsNiBAQAogCXB4YV9zZXRfaTJjX2luZm8oJmkyY19wZGF0YSk7CiAJcHhhMjd4X3NldF9pMmNfcG93ZXJfaW5mbyhOVUxMKTsKIAlweGFfc2V0X2NhbWVyYV9pbmZvKCZtaW9hNzAxX3B4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhKTsKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShtaW9hNzAxX2kyY19kZXZpY2VzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1pb2E3MDFfbWFjaGluZV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCmluZGV4IDE2OWZjYzEuLjFhZDAyOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCkBAIC0yNSw2ICsyNSw5IEBACiAjaW5jbHVkZSA8bGludXgvd205N3h4X2JhdHQuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0xNDEsODUgKzE0NCw1MCBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9SIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhbG1sZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiRmxhc2giLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gMAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHBhbG1sZF9mbGFzaF9kYXRhW10gPSB7CisJeworCQkud2lkdGgJCT0gMiwJCQkvKiBiYW5rd2lkdGggaW4gYnl0ZXMgKi8KKwkJLnBhcnRzCQk9IHBhbG1sZF9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHBhbG1sZF9wYXJ0aXRpb25zKQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGFsbWxkX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfNE0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbWxkX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSAmcGFsbWxkX2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkuZGV2IAkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gcGFsbWxkX2ZsYXNoX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG1sZF9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgcGFsbWxkX2RldGVjdF9pbnQsCi0JCQkJdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04sICJTRCBJUlEiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKSwKLQkJCXBhbG1sZF9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKLQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFksICJTRF9SRUFET05MWSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI1OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnEgcmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIDA7Ci0KLWVycjU6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pLCBkYXRhKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtbGRfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSKTsKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG1sZF9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbWxkX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbWxkX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHBhbG1sZF9tY2lfcG93ZXIsCi0JLmdldF9ybwkJPSBwYWxtbGRfbWNpX2dldF9ybywKLQkuaW5pdCAJCT0gcGFsbWxkX21jaV9pbml0LAotCS5leGl0CQk9IHBhbG1sZF9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTUxEX1NEX1BPV0VSLAorCS5kZXRlY3RfZGVsYXkJCT0gMjAsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMzYsMzUgKzMwNCw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtbGRfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSk7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbWxkX2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbWxkX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG1sZF9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbWxkX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gcGFsbWxkX2lyZGFfc2h1dGRvd24sCi0JLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbWxkX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU2MCw2ICs1MDIsNyBAQAogCSZwb3dlcl9zdXBwbHksCiAJJnBhbG1sZF9hc29jLAogCSZwYWxtbGRfaGRkLAorCSZwYWxtbGRfZmxhc2gsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHBhbG1sZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKaW5kZXggMzNmNzI2Zi4uMmRkN2NlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKQEAgLTEyNCw4MyArMTI0LDEyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdDVfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBhbG10NV9kZXRlY3RfaW50LAotCQkJCXZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiksCi0JCQlwYWxtdDVfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwgIlNEX1BPV0VSIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIzOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAwOwotCi1lcnI1OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSk7Ci1lcnI0OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9QT1dFUik7Ci1lcnIzOgotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTik7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXQ1X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9QT1dFUik7Ci0JZnJlZV9pcnEoSVJRX0dQSU9fUEFMTVQ1X1NEX0RFVEVDVF9OLCBkYXRhKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdDVfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOwotfQotCi1zdGF0aWMgaW50IHBhbG10NV9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG10NV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSBwYWxtdDVfbWNpX3Bvd2VyLAotCS5nZXRfcm8JCT0gcGFsbXQ1X21jaV9nZXRfcm8sCi0JLmluaXQgCQk9IHBhbG10NV9tY2lfaW5pdCwKLQkuZXhpdAkJPSBwYWxtdDVfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04sCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSwKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzE0LDM1ICsyNDMsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSXJEQQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXQ1X2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwgIklSIERJU0FCTEUiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwgMSk7Ci0JaWYgKGVycikKLQkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUpOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10NV9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10NV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdDVfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS5zdGFydHVwCQk9IHBhbG10NV9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBhbG10NV9pcmRhX3NodXRkb3duLAotCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHBhbG10NV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTIyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYwpAQCAtMCwwICsxLDQzNiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCisgKgorICogU3VwcG9ydCBmb3IgdGhlIFBhbG0gVHVuZ3N0ZW58QworICoKKyAqIEF1dGhvcjoJTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiB3b3JrIG9mOgorICoJCVBldHIgQmxhaGEgPHAzdDNAY2VudHJ1bS5jej4KKyAqCQlDaGV0YW4gUy4gS3VtYXIgPHNoaXZha3VtYXIuY2hldGFuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CisjaW5jbHVkZSA8bGludXgvdWNiMTQwMC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3BhbG10Yy5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvdWRjLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGluIGNvbmZpZ3VyYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWxtdGNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogTU1DICovCisJR1BJTzZfTU1DX0NMSywKKwlHUElPOF9NTUNfQ1MwLAorCUdQSU8xMl9HUElPLAkvKiBkZXRlY3QgKi8KKwlHUElPMzJfR1BJTywJLyogcG93ZXIgKi8KKwlHUElPNTRfR1BJTywJLyogci9vIHN3aXRjaCAqLworCisJLyogUENNQ0lBICovCisJR1BJTzUyX25QQ0VfMSwKKwlHUElPNTNfblBDRV8yLAorCUdQSU81MF9uUElPUiwKKwlHUElPNTFfblBJT1csCisJR1BJTzQ5X25QV0UsCisJR1BJTzQ4X25QT0UsCisJR1BJTzUyX25QQ0VfMSwKKwlHUElPNTNfblBDRV8yLAorCUdQSU81N19uSU9JUzE2LAorCUdQSU81Nl9uUFdBSVQsCisKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisKKwkvKiBJckRBICovCisJR1BJTzQ1X0dQSU8sCS8qIGlyIGRpc2FibGUgKi8KKwlHUElPNDZfRklDUF9SWEQsCisJR1BJTzQ3X0ZJQ1BfVFhELAorCisJLyogUFdNICovCisJR1BJTzE3X1BXTTFfT1VULAorCisJLyogVVNCICovCisJR1BJTzRfR1BJTywJLyogZGV0ZWN0ICovCisJR1BJTzM2X0dQSU8sCS8qIHB1bGx1cCAqLworCisJLyogTENEICovCisJR1BJTzU4X0xDRF9MRERfMCwKKwlHUElPNTlfTENEX0xERF8xLAorCUdQSU82MF9MQ0RfTEREXzIsCisJR1BJTzYxX0xDRF9MRERfMywKKwlHUElPNjJfTENEX0xERF80LAorCUdQSU82M19MQ0RfTEREXzUsCisJR1BJTzY0X0xDRF9MRERfNiwKKwlHUElPNjVfTENEX0xERF83LAorCUdQSU82Nl9MQ0RfTEREXzgsCisJR1BJTzY3X0xDRF9MRERfOSwKKwlHUElPNjhfTENEX0xERF8xMCwKKwlHUElPNjlfTENEX0xERF8xMSwKKwlHUElPNzBfTENEX0xERF8xMiwKKwlHUElPNzFfTENEX0xERF8xMywKKwlHUElPNzJfTENEX0xERF8xNCwKKwlHUElPNzNfTENEX0xERF8xNSwKKwlHUElPNzRfTENEX0ZDTEssCisJR1BJTzc1X0xDRF9MQ0xLLAorCUdQSU83Nl9MQ0RfUENMSywKKwlHUElPNzdfTENEX0JJQVMsCisKKwkvKiBNQVRSSVggS0VZUEFEICovCisJR1BJTzBfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCS8qIGluIDAgKi8KKwlHUElPOV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogaW4gMSAqLworCUdQSU8xMF9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogaW4gMiAqLworCUdQSU8xMV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogaW4gMyAqLworCUdQSU8xOF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCAwICovCisJR1BJTzE5X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDEgKi8KKwlHUElPMjBfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgMiAqLworCUdQSU8yMV9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCAzICovCisJR1BJTzIyX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDQgKi8KKwlHUElPMjNfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgNSAqLworCUdQSU8yNF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCA2ICovCisJR1BJTzI1X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDcgKi8KKwlHUElPMjZfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgOCAqLworCUdQSU8yN19HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCA5ICovCisJR1BJTzc5X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDEwICovCisJR1BJTzgwX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDExICovCisKKwkvKiBQWEEgR1BJTyBLRVlTICovCisJR1BJTzdfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCS8qIGhvdHN5bmMgYnV0dG9uIG9uIGNyYWRsZSAqLworCisJLyogTUlTQyAqLworCUdQSU8xX1JTVCwJLyogcmVzZXQgKi8KKwlHUElPMl9HUElPLAkvKiBlYXJwaG9uZSBkZXRlY3QgKi8KKwlHUElPMTZfR1BJTywJLyogYmFja2xpZ2h0IHN3aXRjaCAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXRjX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1UQ19TRF9QT1dFUiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTVRDX1NEX1JFQURPTkxZLAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNVENfU0RfREVURUNUX04sCisJLmRldGVjdF9kZWxheQkJPSAyMCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8ga2V5cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBwYWxtdGNfcHhhX2J1dHRvbnNbXSA9IHsKKwl7S0VZX0Y4LCBHUElPX05SX1BBTE1UQ19IT1RTWU5DX0JVVFRPTiwgMSwgIkhvdFN5bmMgQnV0dG9uIiwgRVZfS0VZLCAxfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgcGFsbXRjX3B4YV9rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBwYWxtdGNfcHhhX2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShwYWxtdGNfcHhhX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX3B4YV9rZXlzID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFsbXRjX3B4YV9rZXlzX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJhY2tsaWdodAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcGFsbXRjX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSLCAiQkwgUE9XRVIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVENfQkxfUE9XRVIsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCXJldHVybiAwOworCitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19CTF9QT1dFUik7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYWxtdGNfYmFja2xpZ2h0X25vdGlmeShpbnQgYnJpZ2h0bmVzcykKK3sKKwkvKiBiYWNrbGlnaHQgaXMgb24gd2hlbiBHUElPMTYgQUYwIGlzIGhpZ2ggKi8KKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19CTF9QT1dFUiwgYnJpZ2h0bmVzcyk7CisJcmV0dXJuIGJyaWdodG5lc3M7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10Y19iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgcGFsbXRjX2JhY2tsaWdodF9kYXRhID0geworCS5wd21faWQJCT0gMSwKKwkubWF4X2JyaWdodG5lc3MJPSBQQUxNVENfTUFYX0lOVEVOU0lUWSwKKwkuZGZ0X2JyaWdodG5lc3MJPSBQQUxNVENfTUFYX0lOVEVOU0lUWSwKKwkucHdtX3BlcmlvZF9ucwk9IFBBTE1UQ19QRVJJT0RfTlMsCisJLmluaXQJCT0gcGFsbXRjX2JhY2tsaWdodF9pbml0LAorCS5ub3RpZnkJCT0gcGFsbXRjX2JhY2tsaWdodF9ub3RpZnksCisJLmV4aXQJCT0gcGFsbXRjX2JhY2tsaWdodF9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX2JhY2tsaWdodCA9IHsKKwkubmFtZQk9ICJwd20tYmFja2xpZ2h0IiwKKwkuZGV2CT0geworCQkucGFyZW50CQk9ICZweGEyNXhfZGV2aWNlX3B3bTEuZGV2LAorCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtdGNfYmFja2xpZ2h0X2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElyREEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdGNfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1UQ19JUl9ESVNBQkxFLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogS2V5Ym9hcmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY29uc3QgdWludDMyX3QgcGFsbXRjX21hdHJpeF9rZXlzW10gPSB7CisJS0VZKDAsIDAsIEtFWV9GMSksCisJS0VZKDAsIDEsIEtFWV9YKSwKKwlLRVkoMCwgMiwgS0VZX1BPV0VSKSwKKwlLRVkoMCwgMywgS0VZX1RBQiksCisJS0VZKDAsIDQsIEtFWV9BKSwKKwlLRVkoMCwgNSwgS0VZX1EpLAorCUtFWSgwLCA2LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoMCwgNywgS0VZX1opLAorCUtFWSgwLCA4LCBLRVlfUyksCisJS0VZKDAsIDksIEtFWV9XKSwKKwlLRVkoMCwgMTAsIEtFWV9FKSwKKwlLRVkoMCwgMTEsIEtFWV9VUCksCisKKwlLRVkoMSwgMCwgS0VZX0YyKSwKKwlLRVkoMSwgMSwgS0VZX0RPV04pLAorCUtFWSgxLCAzLCBLRVlfRCksCisJS0VZKDEsIDQsIEtFWV9DKSwKKwlLRVkoMSwgNSwgS0VZX0YpLAorCUtFWSgxLCA2LCBLRVlfUiksCisJS0VZKDEsIDcsIEtFWV9TUEFDRSksCisJS0VZKDEsIDgsIEtFWV9WKSwKKwlLRVkoMSwgOSwgS0VZX0cpLAorCUtFWSgxLCAxMCwgS0VZX1QpLAorCUtFWSgxLCAxMSwgS0VZX0xFRlQpLAorCisJS0VZKDIsIDAsIEtFWV9GMyksCisJS0VZKDIsIDEsIEtFWV9MRUZUQ1RSTCksCisJS0VZKDIsIDMsIEtFWV9IKSwKKwlLRVkoMiwgNCwgS0VZX1kpLAorCUtFWSgyLCA1LCBLRVlfTiksCisJS0VZKDIsIDYsIEtFWV9KKSwKKwlLRVkoMiwgNywgS0VZX1UpLAorCUtFWSgyLCA4LCBLRVlfTSksCisJS0VZKDIsIDksIEtFWV9LKSwKKwlLRVkoMiwgMTAsIEtFWV9JKSwKKwlLRVkoMiwgMTEsIEtFWV9SSUdIVCksCisKKwlLRVkoMywgMCwgS0VZX0Y0KSwKKwlLRVkoMywgMSwgS0VZX0VOVEVSKSwKKwlLRVkoMywgMywgS0VZX0RPVCksCisJS0VZKDMsIDQsIEtFWV9MKSwKKwlLRVkoMywgNSwgS0VZX08pLAorCUtFWSgzLCA2LCBLRVlfTEVGVEFMVCksCisJS0VZKDMsIDcsIEtFWV9FTlRFUiksCisJS0VZKDMsIDgsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgzLCA5LCBLRVlfUCksCisJS0VZKDMsIDEwLCBLRVlfQiksCisJS0VZKDMsIDExLCBLRVlfRk4pLAorfTsKKworY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBwYWxtdGNfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJCT0gcGFsbXRjX21hdHJpeF9rZXlzLAorCS5rZXltYXBfc2l6ZQkJPSBBUlJBWV9TSVpFKHBhbG10Y19tYXRyaXhfa2V5cyksCit9OworCitjb25zdCBzdGF0aWMgdW5zaWduZWQgaW50IHBhbG10Y19rZXlwYWRfcm93X2dwaW9zW10gPSB7CisJMCwgOSwgMTAsIDExCit9OworCitjb25zdCBzdGF0aWMgdW5zaWduZWQgaW50IHBhbG10Y19rZXlwYWRfY29sX2dwaW9zW10gPSB7CisJMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDc5LCA4MAorfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgcGFsbXRjX2tleXBhZF9wbGF0Zm9ybV9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZwYWxtdGNfa2V5bWFwX2RhdGEsCisJLnJvd19ncGlvcwk9IHBhbG10Y19rZXlwYWRfcm93X2dwaW9zLAorCS5udW1fcm93X2dwaW9zCT0gQVJSQVlfU0laRShwYWxtdGNfa2V5cGFkX3Jvd19ncGlvcyksCisJLmNvbF9ncGlvcwk9IHBhbG10Y19rZXlwYWRfY29sX2dwaW9zLAorCS5udW1fY29sX2dwaW9zCT0gQVJSQVlfU0laRShwYWxtdGNfa2V5cGFkX2NvbF9ncGlvcyksCisJLmFjdGl2ZV9sb3cJPSAxLAorCisJLmRlYm91bmNlX21zCQk9IDIwLAorCS5jb2xfc2Nhbl9kZWxheV91cwk9IDUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfa2V5Ym9hcmQgPSB7CisJLm5hbWUJPSAibWF0cml4LWtleXBhZCIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFsbXRjX2tleXBhZF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVREMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHBhbG10Y191ZGNfaW5mbyBfX2luaXRkYXRhID0geworCS5ncGlvX3ZidXMJCT0gR1BJT19OUl9QQUxNVENfVVNCX0RFVEVDVF9OLAorCS5ncGlvX3ZidXNfaW52ZXJ0ZWQJPSAxLAorCS5ncGlvX3B1bGx1cAkJPSBHUElPX05SX1BBTE1UQ19VU0JfUE9XRVIsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUb3VjaHNjcmVlbiAvIEJhdHRlcnkgLyBHUElPLWV4dGVuZGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX3VjYjE0MDBfY29yZSA9IHsKKwkubmFtZQk9ICJ1Y2IxNDAwX2NvcmUiLAorCS5pZAk9IC0xLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9SIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwYWxtdGNfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAorCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl8xNk0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhbG10Y19mbGFzaF9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUJPSAiVS1Cb290IEJvb3Rsb2FkZXIiLAorCQkub2Zmc2V0CT0gMHgwLAorCQkuc2l6ZQk9IDB4NDAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gIkxpbnV4IEtlcm5lbCIsCisJCS5vZmZzZXQJPSAweDQwMDAwLAorCQkuc2l6ZQk9IDB4MmMwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJGaWxlc3lzdGVtIiwKKwkJLm9mZnNldAk9IDB4MzAwMDAwLAorCQkuc2l6ZQk9IDB4Y2MwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJVLUJvb3QgRW52aXJvbm1lbnQiLAorCQkub2Zmc2V0CT0gMHhmYzAwMDAsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGFsbXRjX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDQsCisJLnBhcnRzCQk9IHBhbG10Y19mbGFzaF9wYXJ0cywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHBhbG10Y19mbGFzaF9wYXJ0cyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSAmcGFsbXRjX2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtdGNfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnJhbWVidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBwYWxtdGNfbGNkX21vZGVzW10gPSB7Cit7CisJLnBpeGNsb2NrCT0gMTE1Mzg0LAorCS54cmVzCQk9IDMyMCwKKwkueXJlcwkJPSAzMjAsCisJLmJwcAkJPSAxNiwKKworCS5sZWZ0X21hcmdpbgk9IDI3LAorCS5yaWdodF9tYXJnaW4JPSA3LAorCS51cHBlcl9tYXJnaW4JPSA3LAorCS5sb3dlcl9tYXJnaW4JPSA4LAorCisJLmhzeW5jX2xlbgk9IDYsCisJLnZzeW5jX2xlbgk9IDEsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gcGFsbXRjX2xjZF9zY3JlZW4gPSB7CisJLm1vZGVzCQkJPSBwYWxtdGNfbGNkX21vZGVzLAorCS5udW1fbW9kZXMJCT0gQVJSQVlfU0laRShwYWxtdGNfbGNkX21vZGVzKSwKKwkubGNkX2Nvbm4JCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY2hpbmUgaW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmcGFsbXRjX2JhY2tsaWdodCwKKwkmcGFsbXRjX3VjYjE0MDBfY29yZSwKKwkmcGFsbXRjX2tleWJvYXJkLAorCSZwYWxtdGNfcHhhX2tleXMsCisJJnBhbG10Y19mbGFzaCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdGNfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHBhbG10Y19waW5fY29uZmlnKSk7CisKKwlzZXRfcHhhX2ZiX2luZm8oJnBhbG10Y19sY2Rfc2NyZWVuKTsKKwlweGFfc2V0X21jaV9pbmZvKCZwYWxtdGNfbWNpX3BsYXRmb3JtX2RhdGEpOworCXB4YV9zZXRfdWRjX2luZm8oJnBhbG10Y191ZGNfaW5mbyk7CisJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CisJcHhhX3NldF9maWNwX2luZm8oJnBhbG10Y19maWNwX3BsYXRmb3JtX2RhdGEpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9OworCitNQUNISU5FX1NUQVJUKFBBTE1UQywgIlBhbG0gVHVuZ3N0ZW58QyIpCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5ib290X3BhcmFtcyAJPSAweGEwMDAwMTAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyNXhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHBhbG10Y19pbml0CitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jCmluZGV4IGQ4MjNiMDkuLjI3N2M0MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKQEAgLTExNyw4MyArMTE3LDExIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdGUyX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlpcnFfaGFuZGxlcl90IHBhbG10ZTJfZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKSwKLQkJCXBhbG10ZTJfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1URTJfU0RfUE9XRVIsICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMzsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVEUyX1NEX1BPV0VSLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVEUyX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVEUyX1NEX1JFQURPTkxZKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjU7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyNToKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX1JFQURPTkxZKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9QT1dFUik7Ci1lcnIzOgotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTiksIGRhdGEpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdGUyX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX1JFQURPTkxZKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX1BPV0VSKTsKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04pLCBkYXRhKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXRlMl9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRFMl9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOwotfQotCi1zdGF0aWMgaW50IHBhbG10ZTJfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXRlMl9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSBwYWxtdGUyX21jaV9wb3dlciwKLQkuZ2V0X3JvCQk9IHBhbG10ZTJfbWNpX2dldF9ybywKLQkuaW5pdCAJCT0gcGFsbXRlMl9tY2lfaW5pdCwKLQkuZXhpdAkJPSBwYWxtdGUyX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSwKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1URTJfU0RfUE9XRVIsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yODcsMzUgKzIxNSw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdGUyX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVEUyX0lSX0RJU0FCTEUsICJJUiBESVNBQkxFIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX0lSX0RJU0FCTEUpOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10ZTJfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXRlMl9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1URTJfSVJfRElTQUJMRSwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbXRlMl9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbXRlMl9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBhbG10ZTJfaXJkYV9zaHV0ZG93biwKLQkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwYWxtdGUyX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNVEUyX0lSX0RJU0FCTEUsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCmluZGV4IDgzZDAyMDguLjc2YTJiMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCkBAIC0yOCw2ICsyOCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3dtOTd4eF9iYXR0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dwaW9fdmJ1cy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMTMxLDYgKzEzNSwxMCBAQAogCUdQSU8zNF9GRlVBUlRfUlhELAogCUdQSU8zOV9GRlVBUlRfVFhELAogCisJLyogTkFORCAqLworCUdQSU8xNV9uQ1NfMSwKKwlHUElPMThfUkRZLAorCiAJLyogTUlTQy4gKi8KIAlHUElPMTBfR1BJTywJLyogaG90c3luYyBidXR0b24gKi8KIAlHUElPMTJfR1BJTywJLyogcG93ZXIgZGV0ZWN0ICovCkBAIC0xMzgsODUgKzE0Niw1MCBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9SIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhbG10eF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiRmxhc2giLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gMAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHBhbG10eF9mbGFzaF9kYXRhW10gPSB7CisJeworCQkud2lkdGgJCT0gMiwJCQkvKiBiYW5rd2lkdGggaW4gYnl0ZXMgKi8KKwkJLnBhcnRzCQk9IHBhbG10eF9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHBhbG10eF9wYXJ0aXRpb25zKQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGFsbXR4X2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfOE0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXR4X2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSAmcGFsbXR4X2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkuZGV2IAkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gcGFsbXR4X2ZsYXNoX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG10eF9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgcGFsbXR4X2RldGVjdF9pbnQsCi0JCQkJdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04sICJTRCBJUlEiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OKSwKLQkJCXBhbG10eF9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKLQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFksICJTRF9SRUFET05MWSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI1OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnEgcmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIDA7Ci0KLWVycjU6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04pLCBkYXRhKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdHhfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSKTsKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10eF9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbXR4X21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXR4X21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHBhbG10eF9tY2lfcG93ZXIsCi0JLmdldF9ybwkJPSBwYWxtdHhfbWNpX2dldF9ybywKLQkuaW5pdCAJCT0gcGFsbXR4X21jaV9pbml0LAotCS5leGl0CQk9IHBhbG10eF9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTVRYX1NEX1BPV0VSLAorCS5kZXRlY3RfZGVsYXkJCT0gMjAsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMzAsMzUgKzMwMyw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdHhfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSk7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXR4X2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXR4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG10eF9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbXR4X2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gcGFsbXR4X2lyZGFfc2h1dGRvd24sCi0JLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbXR4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ5Myw2ICs0NDAsNjggQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5BTkQgRmxhc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBwYWxtdHhfbmFuZF9jbWRfY3RsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJCSB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVuc2lnbmVkIGxvbmcgbmFuZGFkZHIgPSAodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1c7CisKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKKworCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIFBBTE1UWF9OQU5EX0NMRV9WSVJUKTsKKwllbHNlIGlmIChjdHJsICYgTkFORF9BTEUpCisJCXdyaXRlYihjbWQsIFBBTE1UWF9OQU5EX0FMRV9WSVJUKTsKKwllbHNlCisJCXdyaXRlYihjbWQsIG5hbmRhZGRyKTsKK30KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhbG10eF9wYXJ0aXRpb25faW5mb1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAicGFsbXR4LTAiLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWxtdHhfcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OworCitzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIHBhbG10eF9uYW5kX3BsYXRkYXRhID0geworCS5jaGlwCT0geworCQkubnJfY2hpcHMJCT0gMSwKKwkJLmNoaXBfb2Zmc2V0CQk9IDAsCisJCS5ucl9wYXJ0aXRpb25zCQk9IEFSUkFZX1NJWkUocGFsbXR4X3BhcnRpdGlvbl9pbmZvKSwKKwkJLnBhcnRpdGlvbnMJCT0gcGFsbXR4X3BhcnRpdGlvbl9pbmZvLAorCQkuY2hpcF9kZWxheQkJPSAyMCwKKwkJLnBhcnRfcHJvYmVfdHlwZXMgCT0gcGFsbXR4X3BhcnRfcHJvYmVzLAorCX0sCisJLmN0cmwJPSB7CisJCS5jbWRfY3RybAk9IHBhbG10eF9uYW5kX2NtZF9jdGwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGFsbXR4X25hbmRfcmVzb3VyY2VbXSA9IHsKKwlbMF0JPSB7CisJCS5zdGFydAk9IFBYQV9DUzFfUEhZUywKKwkJLmVuZAk9IFBYQV9DUzFfUEhZUyArIFNaXzFNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10eF9uYW5kID0geworCS5uYW1lCQk9ICJnZW5fbmFuZCIsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHBhbG10eF9uYW5kX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBwYWxtdHhfbmFuZF9yZXNvdXJjZSwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10eF9uYW5kX3BsYXRkYXRhLAorCX0KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFBvd2VyIG1hbmFnZW1lbnQgLSBzdGFuZGJ5CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgX19pbml0IHBhbG10eF9wbV9pbml0KHZvaWQpCkBAIC01MTgsNiArNTI3LDggQEAKIAkmcG93ZXJfc3VwcGx5LAogCSZwYWxtdHhfYXNvYywKIAkmcGFsbXR4X2dwaW9fdmJ1cywKKwkmcGFsbXR4X2ZsYXNoLAorCSZwYWxtdHhfbmFuZCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcGFsbXR4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewpAQCAtNTI1LDggKzUzNiwxOCBAQAogCS52aXJ0dWFsCT0gUEFMTVRYX1BDTUNJQV9WSVJULAogCS5wZm4JCT0gX19waHlzX3RvX3BmbihQQUxNVFhfUENNQ0lBX1BIWVMpLAogCS5sZW5ndGgJCT0gUEFMTVRYX1BDTUNJQV9TSVpFLAotCS50eXBlCQk9IE1UX0RFVklDRQotfSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UsCit9LCB7CisJLnZpcnR1YWwJPSBQQUxNVFhfTkFORF9BTEVfVklSVCwKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUEFMTVRYX05BTkRfQUxFX1BIWVMpLAorCS5sZW5ndGgJCT0gU1pfMU0sCisJLnR5cGUJCT0gTVRfREVWSUNFLAorfSwgeworCS52aXJ0dWFsCT0gUEFMTVRYX05BTkRfQ0xFX1ZJUlQsCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBBTE1UWF9OQU5EX0NMRV9QSFlTKSwKKwkubGVuZ3RoCQk9IFNaXzFNLAorCS50eXBlCQk9IE1UX0RFVklDRSwKK30KIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwYWxtdHhfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKaW5kZXggYzM2NDVhYS4uYzJiZjQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwpAQCAtMTI5LDg4ICsxMjksMTQgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG16NzJfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCWlycV9oYW5kbGVyX3QgcGFsbXo3Ml9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCBlcnIgPSAwOwotCi0JLyogU2V0dXAgYW4gaW50ZXJydXB0IGZvciBkZXRlY3RpbmcgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cyAqLwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1aNzJfU0RfREVURUNUX04sICJTRCBJUlEiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1aNzJfU0RfREVURUNUX04pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1aNzJfU0RfREVURUNUX04pLAotCQkJcGFsbXo3Ml9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKLQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JLyogU0RfUE9XRVIgaXMgbm90IGFjdHVhbGx5IHBvd2VyLCBidXQgaXQgaXMgbW9yZSBsaWtlIGNoaXAKLQkgKiBzZWxlY3QsIGkuZS4gaXQgaXMgaW52ZXJ0ZWQgKi8KLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1aNzJfU0RfUE9XRVJfTiwgIlNEX1BPV0VSIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIzOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1aNzJfU0RfUE9XRVJfTiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1aNzJfU0RfUk8sICJTRF9STyIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1aNzJfU0RfUk8pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAwOwotCi1lcnI1OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfU0RfUk8pOwotZXJyNDoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04pOwotZXJyMzoKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1aNzJfU0RfREVURUNUX04pLCBkYXRhKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTik7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXo3Ml9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OKTsKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1aNzJfU0RfREVURUNUX04pLCBkYXRhKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX1NEX1JPKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXo3Ml9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWlmIChwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSkKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04sIDApOwotCWVsc2UKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04sIDEpOwotfQotCi1zdGF0aWMgaW50IHBhbG16NzJfbWNpX3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNWjcyX1NEX1JPKTsKLX0KLQorLyogU0RfUE9XRVIgaXMgbm90IGFjdHVhbGx5IHBvd2VyLCBidXQgaXQgaXMgbW9yZSBsaWtlIGNoaXAKKyAqIHNlbGVjdCwgaS5lLiBpdCBpcyBpbnZlcnRlZCAqLwogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtejcyX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHBhbG16NzJfbWNpX3Bvd2VyLAotCS5nZXRfcm8JCT0gcGFsbXo3Ml9tY2lfcm8sCi0JLmluaXQgCQk9IHBhbG16NzJfbWNpX2luaXQsCi0JLmV4aXQJCT0gcGFsbXo3Ml9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1aNzJfU0RfREVURUNUX04sCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1BBTE1aNzJfU0RfUk8sCisJLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04sCisJLmdwaW9fcG93ZXJfaW52ZXJ0CT0gMSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMwNCwzNSArMjMwLDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElyREEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG16NzJfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1aNzJfSVJfRElTQUJMRSwgIklSIERJU0FCTEUiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUsIDEpOwotCWlmIChlcnIpCi0JCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfSVJfRElTQUJMRSk7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXo3Ml9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtejcyX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9JUl9ESVNBQkxFLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtejcyX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkuc3RhcnR1cAkJPSBwYWxtejcyX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gcGFsbXo3Ml9pcmRhX3NodXRkb3duLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1aNzJfSVJfRElTQUJMRSwKIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHBhbG16NzJfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCmluZGV4IDAxNzkxZDcuLmJiZGE1NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKQEAgLTMyMSwxMSArMzIxLDE0IEBACiAjZGVmaW5lIE1TRUNTX1BFUl9KSUZGWSAoMTAwMC9IWikKIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwY205OTBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmRldGVjdF9kZWxheQk9IDI1MCAvIE1TRUNTX1BFUl9KSUZGWSwKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuaW5pdCAJCT0gcGNtOTkwX21jaV9pbml0LAotCS5zZXRwb3dlciAJPSBwY205OTBfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IHBjbTk5MF9tY2lfZXhpdCwKKwkuZGV0ZWN0X2RlbGF5CQk9IDI1MCAvIE1TRUNTX1BFUl9KSUZGWSwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQkJPSBwY205OTBfbWNpX2luaXQsCisJLnNldHBvd2VyIAkJPSBwY205OTBfbWNpX3NldHBvd2VyLAorCS5leGl0CQkJPSBwY205OTBfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgcGNtOTkwX29oY2lfcGxhdGZvcm1fZGF0YSA9IHsKQEAgLTQyNywyNSArNDMwLDU2IEBACiAJZ3Bpb19idXNfc3dpdGNoID0gLUVJTlZBTDsKIH0KIAotc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0gewotCS5idXNfaWQJPSAwLCAvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCBhYm92ZSAqLwotCS5xdWVyeV9idXNfcGFyYW0gPSBwY205OTBfY2FtZXJhX3F1ZXJ5X2J1c19wYXJhbSwKLQkuc2V0X2J1c19wYXJhbSA9IHBjbTk5MF9jYW1lcmFfc2V0X2J1c19wYXJhbSwKLQkuZnJlZV9idXMgPSBwY205OTBfY2FtZXJhX2ZyZWVfYnVzLAotfTsKLQogLyogQm9hcmQgSTJDIGRldmljZXMuICovCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcGNtOTkwX2kyY19kZXZpY2VzW10gPSB7CiAJewogCQkvKiBNdXN0IGluaXRpYWxpemUgYmVmb3JlIHRoZSBjYW1lcmEocykgKi8KIAkJSTJDX0JPQVJEX0lORk8oInBjYTk1MzYiLCAweDQxKSwKIAkJLnBsYXRmb3JtX2RhdGEgPSAmcGNhOTUzNl9kYXRhLAotCX0sIHsKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY205OTBfY2FtZXJhX2kyY1tdID0geworCXsKIAkJSTJDX0JPQVJEX0lORk8oIm10OXYwMjIiLCAweDQ4KSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rLCAvKiBXaXRoIGV4dGVuZGVyICovCiAJfSwgewogCQlJMkNfQk9BUkRfSU5GTygibXQ5bTAwMSIsIDB4NWQpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmssIC8qIFdpdGggZXh0ZW5kZXIgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rW10gPSB7CisJeworCQkuYnVzX2lkCQkJPSAwLCAvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCAqLworCQkuYm9hcmRfaW5mbwkJPSAmcGNtOTkwX2NhbWVyYV9pMmNbMF0sCisJCS5pMmNfYWRhcHRlcl9pZAkJPSAwLAorCQkucXVlcnlfYnVzX3BhcmFtCT0gcGNtOTkwX2NhbWVyYV9xdWVyeV9idXNfcGFyYW0sCisJCS5zZXRfYnVzX3BhcmFtCQk9IHBjbTk5MF9jYW1lcmFfc2V0X2J1c19wYXJhbSwKKwkJLmZyZWVfYnVzCQk9IHBjbTk5MF9jYW1lcmFfZnJlZV9idXMsCisJCS5tb2R1bGVfbmFtZQkJPSAibXQ5djAyMiIsCisJfSwgeworCQkuYnVzX2lkCQkJPSAwLCAvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCAqLworCQkuYm9hcmRfaW5mbwkJPSAmcGNtOTkwX2NhbWVyYV9pMmNbMV0sCisJCS5pMmNfYWRhcHRlcl9pZAkJPSAwLAorCQkucXVlcnlfYnVzX3BhcmFtCT0gcGNtOTkwX2NhbWVyYV9xdWVyeV9idXNfcGFyYW0sCisJCS5zZXRfYnVzX3BhcmFtCQk9IHBjbTk5MF9jYW1lcmFfc2V0X2J1c19wYXJhbSwKKwkJLmZyZWVfYnVzCQk9IHBjbTk5MF9jYW1lcmFfZnJlZV9idXMsCisJCS5tb2R1bGVfbmFtZQkJPSAibXQ5bTAwMSIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTk5MF9jYW1lcmFbXSA9IHsKKwl7CisJCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCisJCS5pZAk9IDAsCisJCS5kZXYJPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmtbMF0sCisJCX0sCisJfSwgeworCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCQkuaWQJPSAxLAorCQkuZGV2CT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rWzFdLAorCQl9LAogCX0sCiB9OwogI2VuZGlmIC8qIENPTkZJR19WSURFT19QWEEyN3ggfHxDT05GSUdfVklERU9fUFhBMjd4X01PRFVMRSAqLwpAQCAtNTAxLDYgKzUzNSw5IEBACiAJcHhhX3NldF9jYW1lcmFfaW5mbygmcGNtOTkwX3B4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhKTsKIAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKHBjbTk5MF9pMmNfZGV2aWNlcykpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205OTBfY2FtZXJhWzBdKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjbTk5MF9jYW1lcmFbMV0pOwogI2VuZGlmCiAKIAlwcmludGsoS0VSTl9JTkZPICJQQ00tOTkwIEV2YWx1YXRpb24gYmFzZWJvYXJkIGluaXRpYWxpemVkXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKaW5kZXggOTM1MmQ0YS4uYTE4Njk5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKQEAgLTI0NSwyMCArMjQ1LDEwIEBACiAgKiBUaGUgY2FyZCBkZXRlY3QgaW50ZXJydXB0IGlzbid0IGRlYm91bmNlZCBzbyB3ZSBkZWxheSBpdCBieSAyNTBtcwogICogdG8gZ2l2ZSB0aGUgY2FyZCBhIGNoYW5jZSB0byBmdWxseSBpbnNlcnQvZWplY3QuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhOwotCiBzdGF0aWMgaW50IHBvb2RsZV9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgcG9vZGxlX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGdwaW9fcmVxdWVzdChQT09ETEVfR1BJT19uU0RfREVURUNULCAiblNEX0RFVEVDVCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChQT09ETEVfR1BJT19uU0RfV1AsICJuU0RfV1AiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9mcmVlXzE7Ci0KIAllcnIgPSBncGlvX3JlcXVlc3QoUE9PRExFX0dQSU9fU0RfUFdSLCAiU0RfUFdSIik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV8yOwpAQCAtMjY3LDM0ICsyNTcsMTQgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlXzM7CiAKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChQT09ETEVfR1BJT19uU0RfREVURUNUKTsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChQT09ETEVfR1BJT19uU0RfV1ApOwotCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFBPT0RMRV9HUElPX1NEX1BXUiwgMCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFBPT0RMRV9HUElPX1NEX1BXUjEsIDApOwogCi0JcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKFBPT0RMRV9JUlFfR1BJT19uU0RfREVURUNULCBwb29kbGVfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJyKCIlczogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycl9mcmVlXzQ7Ci0JfQotCiAJcmV0dXJuIDA7CiAKLWVycl9mcmVlXzQ6Ci0JZ3Bpb19mcmVlKFBPT0RMRV9HUElPX1NEX1BXUjEpOwogZXJyX2ZyZWVfMzoKIAlncGlvX2ZyZWUoUE9PRExFX0dQSU9fU0RfUFdSKTsKIGVycl9mcmVlXzI6Ci0JZ3Bpb19mcmVlKFBPT0RMRV9HUElPX25TRF9XUCk7Ci1lcnJfZnJlZV8xOgotCWdwaW9fZnJlZShQT09ETEVfR1BJT19uU0RfREVURUNUKTsKLWVycl9vdXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzEyLDYyICsyODIsMjkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcG9vZGxlX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiAhIWdwaW9fZ2V0X3ZhbHVlKFBPT0RMRV9HUElPX25TRF9XUCk7Ci0JcmV0dXJuIEdQTFIoUE9PRExFX0dQSU9fblNEX1dQKSAmIEdQSU9fYml0KFBPT0RMRV9HUElPX25TRF9XUCk7Ci19Ci0KLQogc3RhdGljIHZvaWQgcG9vZGxlX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlmcmVlX2lycShQT09ETEVfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7CiAJZ3Bpb19mcmVlKFBPT0RMRV9HUElPX1NEX1BXUjEpOwogCWdwaW9fZnJlZShQT09ETEVfR1BJT19TRF9QV1IpOwotCWdwaW9fZnJlZShQT09ETEVfR1BJT19uU0RfV1ApOwotCWdwaW9fZnJlZShQT09ETEVfR1BJT19uU0RfREVURUNUKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBwb29kbGVfbWNpX2luaXQsCi0JLmdldF9ybwkJPSBwb29kbGVfbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgCT0gcG9vZGxlX21jaV9zZXRwb3dlciwKLQkuZXhpdAkJPSBwb29kbGVfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuaW5pdCAJCQk9IHBvb2RsZV9tY2lfaW5pdCwKKwkuc2V0cG93ZXIgCQk9IHBvb2RsZV9tY2lfc2V0cG93ZXIsCisJLmV4aXQJCQk9IHBvb2RsZV9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IFBPT0RMRV9JUlFfR1BJT19uU0RfREVURUNULAorCS5ncGlvX2NhcmRfcm8JCT0gUE9PRExFX0dQSU9fblNEX1dQLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogCiAvKgogICogSXJkYQogICovCi1zdGF0aWMgdm9pZCBwb29kbGVfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoUE9PRExFX0dQSU9fSVJfT04sIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KLXN0YXRpYyBpbnQgcG9vZGxlX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChQT09ETEVfR1BJT19JUl9PTiwgIklSX09OIik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWdwaW9fZGlyZWN0aW9uX291dHB1dChQT09ETEVfR1BJT19JUl9PTiwgMSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBvb2RsZV9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fSVJfT04pOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwb29kbGVfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS5ncGlvX3B3ZG93bgkJPSBQT09ETEVfR1BJT19JUl9PTiwKIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHBvb2RsZV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCi0JLnN0YXJ0dXAJCT0gcG9vZGxlX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gcG9vZGxlX2lyZGFfc2h1dGRvd24sCiB9OwogCiAKQEAgLTUyMSw2ICs0NTgsNyBAQAogCXNldF9weGFfZmJfcGFyZW50KCZwb29kbGVfbG9jb21vX2RldmljZS5kZXYpOwogCXNldF9weGFfZmJfaW5mbygmcG9vZGxlX2ZiX2luZm8pOwogCXB4YV9zZXRfdWRjX2luZm8oJnVkY19pbmZvKTsKKwlwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCXB4YV9zZXRfbWNpX2luZm8oJnBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9maWNwX2luZm8oJnBvb2RsZV9maWNwX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jCmluZGV4IDJmMzM5NGYuLjg2ODI3MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jCkBAIC01MiwzICs1Miw0IEBACiAJfSBlbHNlCiAJCUJVRygpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocHhhMnh4X3RyYW5zY2VpdmVyX21vZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYwppbmRleCA0YmE2ZDIxLi5mNGFmNmUyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKQEAgLTg0LDkgKzg0LDExIEBACiB9OwogCiBzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihjb21tb25fbmFuZCwgTkFORCwgMTU2MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKGdjdSwgUFhBMzAwX0dDVSwgMCwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBjb21tb25fY2xrcmVnc1tdID0gewogCUlOSVRfQ0xLUkVHKCZjbGtfY29tbW9uX25hbmQsICJweGEzeHgtbmFuZCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfZ2N1LCAicHhhM3h4LWdjdSIsIE5VTEwpLAogfTsKIAogc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhMzEwX21tYzMsIE1NQzMsIDE5NTAwMDAwLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKaW5kZXggOGIzZDk3ZS4uYzczNzNlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKQEAgLTc4LDkgKzc4LDExIEBACiB9OwogCiBzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzMjBfbmFuZCwgTkFORCwgMTA0MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKGdjdSwgUFhBMzIwX0dDVSwgMCwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGEzMjBfY2xrcmVnc1tdID0gewogCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMzIwX25hbmQsICJweGEzeHgtbmFuZCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfZ2N1LCAicHhhM3h4LWdjdSIsIE5VTEwpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcHhhMzIwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKaW5kZXggNzExMzE3NC4uMDY0MjkyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKQEAgLTE3NiwxMyArMTc2LDMwIEBACiAJTUZQX0FERFJfRU5ELAogfTsKIAorc3RhdGljIHN0cnVjdCBtZnBfYWRkcl9tYXAgcHhhOTM1X21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CisJTUZQX0FERFIoR1BJTzE1OSwgMHgwNTI0KSwKKwlNRlBfQUREUihHUElPMTYzLCAweDA1MzQpLAorCU1GUF9BRERSKEdQSU8xNjcsIDB4MDU0NCksCisJTUZQX0FERFIoR1BJTzE2OCwgMHgwNTQ4KSwKKwlNRlBfQUREUihHUElPMTY5LCAweDA1NGMpLAorCU1GUF9BRERSKEdQSU8xNzAsIDB4MDU1MCksCisJTUZQX0FERFIoR1BJTzE3MSwgMHgwNTU0KSwKKwlNRlBfQUREUihHUElPMTcyLCAweDA1NTgpLAorCU1GUF9BRERSKEdQSU8xNzMsIDB4MDU1YyksCisKKwlNRlBfQUREUl9FTkQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBweGE5MzBfaW5pdCh2b2lkKQogewotCWlmIChjcHVfaXNfcHhhOTMwKCkpIHsKKwlpZiAoY3B1X2lzX3B4YTkzMCgpIHx8IGNwdV9pc19weGE5MzUoKSkgewogCQltZnBfaW5pdF9iYXNlKGlvX3AydihNRlBSX0JBU0UpKTsKIAkJbWZwX2luaXRfYWRkcihweGE5MzBfbWZwX2FkZHJfbWFwKTsKIAl9CiAKKwlpZiAoY3B1X2lzX3B4YTkzNSgpKQorCQltZnBfaW5pdF9hZGRyKHB4YTkzNV9tZnBfYWRkcl9tYXApOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IGRkYTMxMGYuLjNkYTQ1ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgpAQCAtMjQsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2NvcmdpX2xjZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9zaGFycHNsLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTExMSw2ICsxMTMsMjYgQEAKIAlHUElPMTA1X0dQSU8sCS8qIFNQSVRaX0dQSU9fQ0ZfSVJRICovCiAJR1BJTzEwNl9HUElPLAkvKiBTUElUWl9HUElPX0NGMl9JUlEgKi8KIAorCS8qIEdQSU8gbWF0cml4IGtleXBhZCAqLworCUdQSU84OF9HUElPLAkvKiBjb2x1bW4gMCAqLworCUdQSU8yM19HUElPLAkvKiBjb2x1bW4gMSAqLworCUdQSU8yNF9HUElPLAkvKiBjb2x1bW4gMiAqLworCUdQSU8yNV9HUElPLAkvKiBjb2x1bW4gMyAqLworCUdQSU8yNl9HUElPLAkvKiBjb2x1bW4gNCAqLworCUdQSU8yN19HUElPLAkvKiBjb2x1bW4gNSAqLworCUdQSU81Ml9HUElPLAkvKiBjb2x1bW4gNiAqLworCUdQSU8xMDNfR1BJTywJLyogY29sdW1uIDcgKi8KKwlHUElPMTA3X0dQSU8sCS8qIGNvbHVtbiA4ICovCisJR1BJTzEwOF9HUElPLAkvKiBjb2x1bW4gOSAqLworCUdQSU8xMTRfR1BJTywJLyogY29sdW1uIDEwICovCisJR1BJTzEyX0dQSU8sCS8qIHJvdyAwICovCisJR1BJTzE3X0dQSU8sCS8qIHJvdyAxICovCisJR1BJTzkxX0dQSU8sCS8qIHJvdyAyICovCisJR1BJTzM0X0dQSU8sCS8qIHJvdyAzICovCisJR1BJTzM2X0dQSU8sCS8qIHJvdyA0ICovCisJR1BJTzM4X0dQSU8sCS8qIHJvdyA1ICovCisJR1BJTzM5X0dQSU8sCS8qIHJvdyA2ICovCisKIAkvKiBJMkMgKi8KIAlHUElPMTE3X0kyQ19TQ0wsCiAJR1BJTzExOF9JMkNfU0RBLApAQCAtMjQyLDkgKzI2NCwxNTIgQEAKIC8qCiAgKiBTcGl0eiBLZXlib2FyZCBEZXZpY2UKICAqLworI2RlZmluZSBTUElUWl9LRVlfQ0FMRU5EQVIJS0VZX0YxCisjZGVmaW5lIFNQSVRaX0tFWV9BRERSRVNTCUtFWV9GMgorI2RlZmluZSBTUElUWl9LRVlfRk4JCUtFWV9GMworI2RlZmluZSBTUElUWl9LRVlfQ0FOQ0VMCUtFWV9GNAorI2RlZmluZSBTUElUWl9LRVlfRVhPSwkJS0VZX0Y1CisjZGVmaW5lIFNQSVRaX0tFWV9FWENBTkNFTAlLRVlfRjYKKyNkZWZpbmUgU1BJVFpfS0VZX0VYSk9HRE9XTglLRVlfRjcKKyNkZWZpbmUgU1BJVFpfS0VZX0VYSk9HVVAJS0VZX0Y4CisjZGVmaW5lIFNQSVRaX0tFWV9KQVAxCQlLRVlfTEVGVEFMVAorI2RlZmluZSBTUElUWl9LRVlfSkFQMgkJS0VZX1JJR0hUQ1RSTAorI2RlZmluZSBTUElUWl9LRVlfU1lOQwkJS0VZX0Y5CisjZGVmaW5lIFNQSVRaX0tFWV9NQUlMCQlLRVlfRjEwCisjZGVmaW5lIFNQSVRaX0tFWV9PSwkJS0VZX0YxMQorI2RlZmluZSBTUElUWl9LRVlfTUVOVQkJS0VZX0YxMgorCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc3BpdHprYmRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9MRUZUQ1RSTCksCisJS0VZKDAsIDEsIEtFWV8xKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfNSksCisJS0VZKDAsIDQsIEtFWV82KSwKKwlLRVkoMCwgNSwgS0VZXzcpLAorCUtFWSgwLCA2LCBLRVlfOSksCisJS0VZKDAsIDcsIEtFWV8wKSwKKwlLRVkoMCwgOCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDAsIDksIFNQSVRaX0tFWV9FWE9LKSwJLyogRVhPSyAqLworCUtFWSgwLCAxMCwgU1BJVFpfS0VZX0VYQ0FOQ0VMKSwJLyogRVhDQU5DRUwgKi8KKwlLRVkoMSwgMSwgS0VZXzIpLAorCUtFWSgxLCAyLCBLRVlfNCksCisJS0VZKDEsIDMsIEtFWV9SKSwKKwlLRVkoMSwgNCwgS0VZX1kpLAorCUtFWSgxLCA1LCBLRVlfOCksCisJS0VZKDEsIDYsIEtFWV9JKSwKKwlLRVkoMSwgNywgS0VZX08pLAorCUtFWSgxLCA4LCBLRVlfUCksCisJS0VZKDEsIDksIFNQSVRaX0tFWV9FWEpPR0RPV04pLAkvKiBFWEpPR0RPV04gKi8KKwlLRVkoMSwgMTAsIFNQSVRaX0tFWV9FWEpPR1VQKSwJLyogRVhKT0dVUCAqLworCUtFWSgyLCAwLCBLRVlfVEFCKSwKKwlLRVkoMiwgMSwgS0VZX1EpLAorCUtFWSgyLCAyLCBLRVlfRSksCisJS0VZKDIsIDMsIEtFWV9UKSwKKwlLRVkoMiwgNCwgS0VZX0cpLAorCUtFWSgyLCA1LCBLRVlfVSksCisJS0VZKDIsIDYsIEtFWV9KKSwKKwlLRVkoMiwgNywgS0VZX0spLAorCUtFWSgzLCAwLCBTUElUWl9LRVlfQUREUkVTUyksCS8qIEFERFJFU1MgKi8KKwlLRVkoMywgMSwgS0VZX1cpLAorCUtFWSgzLCAyLCBLRVlfUyksCisJS0VZKDMsIDMsIEtFWV9GKSwKKwlLRVkoMywgNCwgS0VZX1YpLAorCUtFWSgzLCA1LCBLRVlfSCksCisJS0VZKDMsIDYsIEtFWV9NKSwKKwlLRVkoMywgNywgS0VZX0wpLAorCUtFWSgzLCA5LCBLRVlfUklHSFRTSElGVCksCisJS0VZKDQsIDAsIFNQSVRaX0tFWV9DQUxFTkRBUiksCS8qIENBTEVOREFSICovCisJS0VZKDQsIDEsIEtFWV9BKSwKKwlLRVkoNCwgMiwgS0VZX0QpLAorCUtFWSg0LCAzLCBLRVlfQyksCisJS0VZKDQsIDQsIEtFWV9CKSwKKwlLRVkoNCwgNSwgS0VZX04pLAorCUtFWSg0LCA2LCBLRVlfRE9UKSwKKwlLRVkoNCwgOCwgS0VZX0VOVEVSKSwKKwlLRVkoNCwgOSwgS0VZX0xFRlRTSElGVCksCisJS0VZKDUsIDAsIFNQSVRaX0tFWV9NQUlMKSwJLyogTUFJTCAqLworCUtFWSg1LCAxLCBLRVlfWiksCisJS0VZKDUsIDIsIEtFWV9YKSwKKwlLRVkoNSwgMywgS0VZX01JTlVTKSwKKwlLRVkoNSwgNCwgS0VZX1NQQUNFKSwKKwlLRVkoNSwgNSwgS0VZX0NPTU1BKSwKKwlLRVkoNSwgNywgS0VZX1VQKSwKKwlLRVkoNSwgMTAsIFNQSVRaX0tFWV9GTiksCS8qIEZOICovCisJS0VZKDYsIDAsIEtFWV9TWVNSUSksCisJS0VZKDYsIDEsIFNQSVRaX0tFWV9KQVAxKSwJLyogSkFQMSAqLworCUtFWSg2LCAyLCBTUElUWl9LRVlfSkFQMiksCS8qIEpBUDIgKi8KKwlLRVkoNiwgMywgU1BJVFpfS0VZX0NBTkNFTCksCS8qIENBTkNFTCAqLworCUtFWSg2LCA0LCBTUElUWl9LRVlfT0spLAkvKiBPSyAqLworCUtFWSg2LCA1LCBTUElUWl9LRVlfTUVOVSksCS8qIE1FTlUgKi8KKwlLRVkoNiwgNiwgS0VZX0xFRlQpLAorCUtFWSg2LCA3LCBLRVlfRE9XTiksCisJS0VZKDYsIDgsIEtFWV9SSUdIVCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBzcGl0emtiZF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHNwaXR6a2JkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKHNwaXR6a2JkX2tleW1hcCksCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc3BpdHprYmRfcm93X2dwaW9zW10gPQorCQl7IDEyLCAxNywgOTEsIDM0LCAzNiwgMzgsIDM5IH07CitzdGF0aWMgY29uc3QgdWludDMyX3Qgc3BpdHprYmRfY29sX2dwaW9zW10gPQorCQl7IDg4LCAyMywgMjQsIDI1LCAyNiwgMjcsIDUyLCAxMDMsIDEwNywgMTA4LCAxMTQgfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgc3BpdHprYmRfcGRhdGEgPSB7CisJLmtleW1hcF9kYXRhCQk9ICZzcGl0emtiZF9rZXltYXBfZGF0YSwKKwkucm93X2dwaW9zCQk9IHNwaXR6a2JkX3Jvd19ncGlvcywKKwkuY29sX2dwaW9zCQk9IHNwaXR6a2JkX2NvbF9ncGlvcywKKwkubnVtX3Jvd19ncGlvcwkJPSBBUlJBWV9TSVpFKHNwaXR6a2JkX3Jvd19ncGlvcyksCisJLm51bV9jb2xfZ3Bpb3MJCT0gQVJSQVlfU0laRShzcGl0emtiZF9jb2xfZ3Bpb3MpLAorCS5jb2xfc2Nhbl9kZWxheV91cwk9IDEwLAorCS5kZWJvdW5jZV9tcwkJPSAxMCwKKwkud2FrZXVwCQkJPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHprYmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzcGl0ei1rZXlib2FyZCIsCisJLm5hbWUJCT0gIm1hdHJpeC1rZXlwYWQiLAogCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpdHprYmRfcGRhdGEsCisJfSwKK307CisKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHNwaXR6X2dwaW9fa2V5c1tdID0geworCXsKKwkJLnR5cGUJPSBFVl9QV1IsCisJCS5jb2RlCT0gS0VZX1NVU1BFTkQsCisJCS5ncGlvCT0gU1BJVFpfR1BJT19PTl9LRVksCisJCS5kZXNjCT0gIk9uL09mZiIsCisJCS53YWtldXAJPSAxLAorCX0sCisJLyogVHdvIGJ1dHRvbnMgZGV0ZWN0aW5nIHRoZSBsaWQgc3RhdGUgKi8KKwl7CisJCS50eXBlCT0gRVZfU1csCisJCS5jb2RlCT0gMCwKKwkJLmdwaW8JPSBTUElUWl9HUElPX1NXQSwKKwkJLmRlc2MJPSAi77u/RGlzcGxheSBEb3duIiwKKwl9LAorCXsKKwkJLnR5cGUJPSBFVl9TVywKKwkJLmNvZGUJPSAxLAorCQkuZ3Bpbwk9IFNQSVRaX0dQSU9fU1dCLAorCQkuZGVzYwk9ICLvu79MaWQgQ2xvc2VkIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBzcGl0el9ncGlvX2tleXNfcGxhdGZvcm1fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHNwaXR6X2dwaW9fa2V5cywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHNwaXR6X2dwaW9fa2V5cyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGl0el9ncGlvX2tleXNfZGV2aWNlID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc3BpdHpfZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEsCisJfSwKIH07CiAKIApAQCAtMjk2LDYgKzQ2MSw3IEBACiAJLnZyZWZfZGVsYXlfdXNlY3MJPSAxMDAsCiAJLnhfcGxhdGVfb2htcwkJPSA0MTksCiAJLnlfcGxhdGVfb2htcwkJPSA0ODYsCisJLnByZXNzdXJlX21heAkJPSAxMDI0LAogCS5ncGlvX3BlbmRvd24JCT0gU1BJVFpfR1BJT19UUF9JTlQsCiAJLndhaXRfZm9yX3N5bmMJCT0gc3BpdHpfd2FpdF9mb3JfaHN5bmMsCiB9OwpAQCAtMzc4LDQ1ICs1NDQsNiBAQAogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi0KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGE7Ci0KLXN0YXRpYyBpbnQgc3BpdHpfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHNwaXR6X2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChTUElUWl9HUElPX25TRF9ERVRFQ1QsICJuU0RfREVURUNUIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFNQSVRaX0dQSU9fblNEX1dQLCAiblNEX1dQIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZnJlZV8xOwotCi0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoU1BJVFpfR1BJT19uU0RfREVURUNUKTsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChTUElUWl9HUElPX25TRF9XUCk7Ci0KLQlzcGl0el9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19uU0RfREVURUNULCBzcGl0el9kZXRlY3RfaW50LAotCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8Ci0JCQkgIElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoIiVzOiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2ZyZWVfMjsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9mcmVlXzI6Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fblNEX1dQKTsKLWVycl9mcmVlXzE6Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIHNwaXR6X21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCiB7CiAJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CkBAIC00MjcsMjQgKzU1NCwxMiBAQAogCQlzcGl0el9jYXJkX3B3cl9jdHJsKFNQSVRaX1BXUl9TRCwgMHgwMDAwKTsKIH0KIAotc3RhdGljIGludCBzcGl0el9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoU1BJVFpfR1BJT19uU0RfV1ApOwotfQotCi1zdGF0aWMgdm9pZCBzcGl0el9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZnJlZV9pcnEoU1BJVFpfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fblNEX1dQKTsKLQlncGlvX2ZyZWUoU1BJVFpfR1BJT19uU0RfREVURUNUKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBzcGl0el9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IHNwaXR6X21jaV9pbml0LAotCS5nZXRfcm8JCT0gc3BpdHpfbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgCT0gc3BpdHpfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IHNwaXR6X21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLnNldHBvd2VyIAkJPSBzcGl0el9tY2lfc2V0cG93ZXIsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBTUElUWl9HUElPX25TRF9ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSBTUElUWl9HUElPX25TRF9XUCwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIApAQCAtNDg0LDUwICs1OTksMTAgQEAKIC8qCiAgKiBJcmRhCiAgKi8KLXN0YXRpYyBpbnQgc3BpdHpfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IGdwaW9fcmVxdWVzdChTUElUWl9HUElPX0lSX09OLCAiSXJEQSBvbiIpOwotCWlmIChyYykKLQkJZ290byBlcnI7Ci0KLQlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChTUElUWl9HUElPX0lSX09OLCAxKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2RpcjsKLQotCXJldHVybiAwOwotCi1lcnJfZGlyOgotCWdwaW9fZnJlZShTUElUWl9HUElPX0lSX09OKTsKLWVycjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwaXR6X2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShTUElUWl9HUElPX0lSX09OKTsKLX0KLQotc3RhdGljIHZvaWQgc3BpdHpfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19JUl9PTiwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQotI2lmZGVmIENPTkZJR19NQUNIX0FLSVRBCi1zdGF0aWMgdm9pZCBha2l0YV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShBS0lUQV9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKy8qIC5ncGlvX3B3ZG93biBpcyBzZXQgaW4gc3BpdHpfaW5pdCgpIGFuZCBha2l0YV9pbml0KCkgYWNjb3JkaW5nbHkgKi8KIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHNwaXR6X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc3RhcnR1cAkJPSBzcGl0el9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHNwaXR6X2lyZGFfc2h1dGRvd24sCiB9OwogCiAKQEAgLTY1Miw2ICs3MjcsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzcGl0enNjb29wX2RldmljZSwKIAkmc3BpdHprYmRfZGV2aWNlLAorCSZzcGl0el9ncGlvX2tleXNfZGV2aWNlLAogCSZzcGl0emxlZF9kZXZpY2UsCiAJJnNoYXJwc2xfbmFuZF9kZXZpY2UsCiAJJnNoYXJwc2xfcm9tX2RldmljZSwKQEAgLTY5NSw2ICs3NzEsNyBAQAogCXNwaXR6X2luaXRfc3BpKCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwlzcGl0el9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CiAJcHhhX3NldF9tY2lfaW5mbygmc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfb2hjaV9pbmZvKCZzcGl0el9vaGNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEpOwpAQCAtNzAyLDkgKzc3OSwzNCBAQAogCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0FLSVRBKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0JPUlpPSSkKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3Igc2hhcnBzbF9ha2l0YV9iYnQgPSB7CisJLm9wdGlvbnMgPSAwLAorCS5vZmZzID0gNCwKKwkubGVuID0gMSwKKwkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBha2l0YV9vb2JpbmZvID0geworCS5lY2NieXRlcyA9IDI0LAorCS5lY2Nwb3MgPSB7CisJCSAgIDB4NSwgMHgxLCAweDIsIDB4MywgMHg2LCAweDcsIDB4MTUsIDB4MTEsCisJCSAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MjUsIDB4MjEsIDB4MjIsIDB4MjMsCisJCSAgIDB4MjYsIDB4MjcsIDB4MzUsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzYsIDB4Mzd9LAorCS5vb2JmcmVlID0ge3sweDA4LCAweDA5fX0KK307CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BJVFopIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfQk9SWk9JKQogc3RhdGljIHZvaWQgX19pbml0IHNwaXR6X2luaXQodm9pZCkKIHsKKwlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEuZ3Bpb19wd2Rvd24gPSBTUElUWl9HUElPX0lSX09OOworCisJaWYgKG1hY2hpbmVfaXNfYm9yem9pKCkpIHsKKwkJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuYmFkYmxvY2tfcGF0dGVybiA9ICZzaGFycHNsX2FraXRhX2JidDsKKwkJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuZWNjX2xheW91dCA9ICZha2l0YV9vb2JpbmZvOworCX0KKwogCXBsYXRmb3JtX3Njb29wX2NvbmZpZyA9ICZzcGl0el9wY21jaWFfY29uZmlnOwogCiAJY29tbW9uX2luaXQoKTsKQEAgLTcyOSwyNSArODMxLDkgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBzaGFycHNsX2FraXRhX2JidCA9IHsKLQkub3B0aW9ucyA9IDAsCi0JLm9mZnMgPSA0LAotCS5sZW4gPSAxLAotCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCi19OwotCi1zdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGFraXRhX29vYmluZm8gPSB7Ci0JLmVjY2J5dGVzID0gMjQsCi0JLmVjY3BvcyA9IHsKLQkJICAgMHg1LCAweDEsIDB4MiwgMHgzLCAweDYsIDB4NywgMHgxNSwgMHgxMSwKLQkJICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKLQkJICAgMHgyNiwgMHgyNywgMHgzNSwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNiwgMHgzN30sCi0JLm9vYmZyZWUgPSB7ezB4MDgsIDB4MDl9fQotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IGFraXRhX2luaXQodm9pZCkKIHsKLQlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEudHJhbnNjZWl2ZXJfbW9kZSA9IGFraXRhX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZTsKKwlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEuZ3Bpb19wd2Rvd24gPSBBS0lUQV9HUElPX0lSX09OOwogCiAJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuYmFkYmxvY2tfcGF0dGVybiA9ICZzaGFycHNsX2FraXRhX2JidDsKIAlzaGFycHNsX25hbmRfcGxhdGZvcm1fZGF0YS5lY2NfbGF5b3V0ID0gJmFraXRhX29vYmluZm87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKaW5kZXggMTE3YWQ1OS4uZTgxYTUyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwpAQCAtMjQ3LDQ5ICsyNDcsMTAgQEAKIC8qCiAgKiBNTUMvU0QgRGV2aWNlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgdG9zYV9tY2lfcGxhdGZvcm1fZGF0YTsKLQogc3RhdGljIGludCB0b3NhX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCB0b3NhX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCiB7CiAJaW50IGVycjsKIAotCXRvc2FfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19uU0RfREVURUNULCAiTU1DL1NEIGNhcmQgZGV0ZWN0Iik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgblNEX0RFVEVDVCBncGlvXG4iKTsKLQkJZ290byBlcnJfZ3Bpb19kZXRlY3Q7Ci0JfQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KFRPU0FfR1BJT19uU0RfREVURUNUKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9ncGlvX2RldGVjdF9kaXI7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShUT1NBX0lSUV9HUElPX25TRF9ERVRFQ1QsIHRvc2FfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQkiTU1DL1NEIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKLQkJZ290byBlcnJfaXJxOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fU0RfV1AsICJTRCBXcml0ZSBQcm90ZWN0Iik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgU0RfV1AgZ3Bpb1xuIik7Ci0JCWdvdG8gZXJyX2dwaW9fd3A7Ci0JfQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KFRPU0FfR1BJT19TRF9XUCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZ3Bpb193cF9kaXI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX1BXUl9PTiwgIlNEIFBvd2VyIik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgU0RfUFdSIGdwaW9cbiIpOwotCQlnb3RvIGVycl9ncGlvX3B3cjsKLQl9Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRPU0FfR1BJT19QV1JfT04sIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2dwaW9fcHdyX2RpcjsKLQogCWVyciA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fblNEX0lOVCwgIlNEIEludCIpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0b3NhX21jaV9pbml0OiBjYW4ndCByZXF1ZXN0IFNEX1BXUiBncGlvXG4iKTsKQEAgLTMwNCw1MSArMjY1LDIxIEBACiBlcnJfZ3Bpb19pbnRfZGlyOgogCWdwaW9fZnJlZShUT1NBX0dQSU9fblNEX0lOVCk7CiBlcnJfZ3Bpb19pbnQ6Ci1lcnJfZ3Bpb19wd3JfZGlyOgotCWdwaW9fZnJlZShUT1NBX0dQSU9fUFdSX09OKTsKLWVycl9ncGlvX3B3cjoKLWVycl9ncGlvX3dwX2RpcjoKLQlncGlvX2ZyZWUoVE9TQV9HUElPX1NEX1dQKTsKLWVycl9ncGlvX3dwOgotCWZyZWVfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Ci1lcnJfaXJxOgotZXJyX2dwaW9fZGV0ZWN0X2RpcjoKLQlncGlvX2ZyZWUoVE9TQV9HUElPX25TRF9ERVRFQ1QpOwotZXJyX2dwaW9fZGV0ZWN0OgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHRvc2FfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWlmICgoIDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKLQkJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX1BXUl9PTiwgMSk7Ci0JfSBlbHNlIHsKLQkJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX1BXUl9PTiwgMCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHRvc2FfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKFRPU0FfR1BJT19TRF9XUCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHRvc2FfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCWdwaW9fZnJlZShUT1NBX0dQSU9fblNEX0lOVCk7Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19QV1JfT04pOwotCWdwaW9fZnJlZShUT1NBX0dQSU9fU0RfV1ApOwotCWZyZWVfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19uU0RfREVURUNUKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSB0b3NhX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzayAgICAgICA9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAgICAgICAgICAgPSB0b3NhX21jaV9pbml0LAotCS5nZXRfcm8JCT0gdG9zYV9tY2lfZ2V0X3JvLAotCS5zZXRwb3dlciAgICAgICA9IHRvc2FfbWNpX3NldHBvd2VyLAotCS5leGl0ICAgICAgICAgICA9IHRvc2FfbWNpX2V4aXQsCisJLm9jcl9tYXNrICAgICAgIAk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuaW5pdCAgICAgICAgICAgCT0gdG9zYV9tY2lfaW5pdCwKKwkuZXhpdCAgICAgICAgICAgCT0gdG9zYV9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IFRPU0FfR1BJT19uU0RfREVURUNULAorCS5ncGlvX2NhcmRfcm8JCT0gVE9TQV9HUElPX1NEX1dQLAorCS5ncGlvX3Bvd2VyCQk9IFRPU0FfR1BJT19QV1JfT04sCiB9OwogCiAvKgpAQCAtNDA2LDEwICszMzcsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgdG9zYV9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlID0gdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCi0JLnN0YXJ0dXAgPSB0b3NhX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24gPSB0b3NhX2lyZGFfc2h1dGRvd24sCisJLmdwaW9fcHdkb3duCQk9IC0xLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLnN0YXJ0dXAJCT0gdG9zYV9pcmRhX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IHRvc2FfaXJkYV9zaHV0ZG93biwKIH07CiAKIC8qCkBAIC05MTAsNiArODQyLDcgQEAKIAlkdW1teSA9IGdwaW9jaGlwX3Jlc2VydmUoVE9TQV9TQ09PUF9KQ19HUElPX0JBU0UsIDEyKTsKIAlkdW1teSA9IGdwaW9jaGlwX3Jlc2VydmUoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UsIDE2KTsKIAorCXRvc2FfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCXB4YV9zZXRfbWNpX2luZm8oJnRvc2FfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfdWRjX2luZm8oJnVkY19pbmZvKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmdG9zYV9maWNwX3BsYXRmb3JtX2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdHJlbzY4MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJlbzY4MC5jCmluZGV4IDc1M2VjNGQuLmZlMDg1MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90cmVvNjgwLmMKQEAgLTE1Myw4NyArMTUzLDExIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCB0cmVvNjgwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJaXJxX2hhbmRsZXJfdCB0cmVvNjgwX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOwotCi0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiksCi0JCQl0cmVvNjgwX2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCi0JaWYgKGVycikgewotCQlkZXZfZXJyKGRldiwgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJICAgICBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLCAxKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNTsKLQotCXJldHVybiAwOwotCi1lcnI1OgotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFkpOwotZXJyNDoKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyZW82ODBfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfUE9XRVIpOwotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pOwotfQotCi1zdGF0aWMgdm9pZCB0cmVvNjgwX21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgdHJlbzY4MF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSB0cmVvNjgwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHRyZW82ODBfbWNpX3Bvd2VyLAotCS5nZXRfcm8JCT0gdHJlbzY4MF9tY2lfZ2V0X3JvLAotCS5pbml0IAkJPSB0cmVvNjgwX21jaV9pbml0LAotCS5leGl0CQk9IHRyZW82ODBfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfVFJFTzY4MF9TRF9QT1dFUiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzMCwxNiArMjU0LDkgQEAKIAlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9UUkVPNjgwX0JMX1BPV0VSLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjI7Ci0JcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIsICJMQ0QgUE9XRVIiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjI7Ci0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMzsKIAogCXJldHVybiAwOwotZXJyMzoKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUik7CisKIGVycjI6CiAJZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9CTF9QT1dFUik7CiBlcnI6CkBAIC0zNTUsNyArMjcyLDYgQEAKIHN0YXRpYyB2b2lkIHRyZW82ODBfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfQkxfUE9XRVIpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfTENEX1BPV0VSKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgdHJlbzY4MF9iYWNrbGlnaHRfZGF0YSA9IHsKQEAgLTM3OSw0NCArMjk1LDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElyREEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCB0cmVvNjgwX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1RSRU82ODBfSVJfRU4sIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KLXN0YXRpYyBpbnQgdHJlbzY4MF9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX0lSX0VOLCAiSXIgcG9ydCBkaXNhYmxlIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIxOwotCi0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9JUl9FTiwgMSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCi0JcmV0dXJuIDA7Ci0KLWVycjI6Ci0JZGV2X2VycihkZXYsICJ0cmVvNjgwX2lyZGE6IGNhbm5vdCBjaGFuZ2UgSVIgZ3BpbyBkaXJlY3Rpb25cbiIpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfSVJfRU4pOwotZXJyMToKLQlkZXZfZXJyKGRldiwgInRyZW82ODBfaXJkYTogY2Fubm90IGFsbG9jYXRlIElSIGdwaW9cbiIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyZW82ODBfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9JUl9FTik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHRyZW82ODBfZmljcF9pbmZvID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfRklSTU9ERSB8IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnN0YXJ0dXAgICAgICAgICAgPSB0cmVvNjgwX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24gICAgICAgICA9IHRyZW82ODBfaXJkYV9zaHV0ZG93biwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IHRyZW82ODBfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9UUkVPNjgwX0lSX0VOLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTQ2LDYgKzQyNywxMSBAQAogfSwKIH07CiAKK3N0YXRpYyB2b2lkIHRyZW82ODBfbGNkX3Bvd2VyKGludCBvbiwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICppbmZvKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfVFJFTzY4MF9CTF9QT1dFUiwgb24pOworfQorCiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyB0cmVvNjgwX2xjZF9zY3JlZW4gPSB7CiAJLm1vZGVzCQk9IHRyZW82ODBfbGNkX21vZGVzLAogCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKHRyZW82ODBfbGNkX21vZGVzKSwKQEAgLTU4NSwxMSArNDcxLDMyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgdHJlbzY4MF9sY2RfcG93ZXJfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUiwgIkxDRCBQT1dFUiIpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJUcmVvNjgwOiBMQ0QgcG93ZXIgR1BJTyByZXF1ZXN0IGZhaWxlZCFcbiIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIsIDApOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJUcmVvNjgwOiBzZXR0aW5nIExDRCBwb3dlciBHUElPIGRpcmVjdGlvbiBmYWlsZWQhXG4iKTsKKwkJZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIpOworCQlyZXR1cm47CisJfQorCisJdHJlbzY4MF9sY2Rfc2NyZWVuLnB4YWZiX2xjZF9wb3dlciA9IHRyZW82ODBfbGNkX3Bvd2VyOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgdHJlbzY4MF9pbml0KHZvaWQpCiB7CiAJdHJlbzY4MF9wbV9pbml0KCk7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUodHJlbzY4MF9waW5fY29uZmlnKSk7CiAJcHhhX3NldF9rZXlwYWRfaW5mbygmdHJlbzY4MF9rZXlwYWRfcGxhdGZvcm1fZGF0YSk7CisJdHJlbzY4MF9sY2RfcG93ZXJfaW5pdCgpOwogCXNldF9weGFfZmJfaW5mbygmdHJlbzY4MF9sY2Rfc2NyZWVuKTsKIAlweGFfc2V0X21jaV9pbmZvKCZ0cmVvNjgwX21jaV9wbGF0Zm9ybV9kYXRhKTsKIAl0cmVvNjgwX3VkY19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwppbmRleCA4MjVmNTQwLi4zOTgxZTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKQEAgLTM2Nyw2ICszNjcsOSBAQAogCS5leGl0CQk9IHRyaXplcHM0X21jaV9leGl0LAogCS5nZXRfcm8JCT0gTlVMTCwJLyogd3JpdGUtcHJvdGVjdGlvbiBub3Qgc3VwcG9ydGVkICovCiAJLnNldHBvd2VyIAk9IE5VTEwsCS8qIHBvd2VyLXN3aXRjaGluZyBub3Qgc3VwcG9ydGVkICovCisJLmdwaW9fY2FyZF9kZXRlY3QgPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCT0gLTEsCisJLmdwaW9fcG93ZXIJPSAtMSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MTIsNiArNDE1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgdHJpemVwczRfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS5ncGlvX3B3ZG93bgkJPSAtMSwKIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCiAJLnRyYW5zY2VpdmVyX21vZGUJPSB0cml6ZXBzNF9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCiAJLnN0YXJ0dXAJCT0gdHJpemVwczRfaXJkYV9zdGFydHVwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEveGNlcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEveGNlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDc5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMKQEAgLTAsMCArMSwxODcgQEAKKy8qICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgdGhlIElza3JhdGVsIEVsZWN0cm9uaWNzIFhDRVAgcGxhdGZvcm0gYXMgdXNlZCBpbgorICogIHRoZSBMaWJlcmEgaW5zdHJ1bWVudHMgZnJvbSBJbnN0cnVtZW50YXRpb24gVGVjaG5vbG9naWVzLgorICoKKyAqICBBdXRob3I6ICAgICBBbGVzIEJhcmRvcmZlciA8YWxlc0BpLXRlY2guc2k+CisgKiAgQ29udHJpYnV0aW9ucyBieTogQWJib3R0LCBNRyAoTWljaGFlbCkgPG1pY2hhZWwuYWJib3R0QGRpYW1vbmQuYWMudWs+CisgKiAgQ29udHJpYnV0aW9ucyBieTogTWF0ZWogS2VuZGEgPG1hdGVqLmtlbmRhQGktdGVjaC5zaT4KKyAqICBDcmVhdGVkOiAgICBKdW5lIDIwMDYKKyAqICBDb3B5cmlnaHQ6ICAoQykgMjAwNi0yMDA5IEluc3RydW1lbnRhdGlvbiBUZWNobm9sb2dpZXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2kyYy5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworI2RlZmluZSBYQ0VQX0VUSF9QSFlTCQkoUFhBX0NTM19QSFlTICsgMHgwMDAwMDMwMCkKKyNkZWZpbmUgWENFUF9FVEhfUEhZU19FTkQJKFBYQV9DUzNfUEhZUyArIDB4MDAwZmZmZmYpCisjZGVmaW5lIFhDRVBfRVRIX0FUVFIJCShQWEFfQ1MzX1BIWVMgKyAweDAyMDAwMDAwKQorI2RlZmluZSBYQ0VQX0VUSF9BVFRSX0VORAkoUFhBX0NTM19QSFlTICsgMHgwMjBmZmZmZikKKyNkZWZpbmUgWENFUF9FVEhfSVJRCQlJUlFfR1BJTzAKKworLyogIFhDRVAgQ1BMRCBiYXNlICovCisjZGVmaW5lIFhDRVBfQ1BMRF9CQVNFCQkweGYwMDAwMDAwCisKKworLyogRmxhc2ggcGFydGl0aW9ucy4gKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHhjZXBfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgPQkJIkJvb3Rsb2FkZXIiLAorCQkuc2l6ZSA9CQkweDAwMDQwMDAwLAorCQkub2Zmc2V0ID0JMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFCisJfSwgeworCQkubmFtZSA9CQkiQm9vdGxvYWRlciBFTlYiLAorCQkuc2l6ZSA9CQkweDAwMDQwMDAwLAorCQkub2Zmc2V0ID0JMHgwMDA0MDAwMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFCisJfSwgeworCQkubmFtZSA9CQkiS2VybmVsIiwKKwkJLnNpemUgPQkJMHgwMDEwMDAwMCwKKwkJLm9mZnNldCA9CTB4MDAwODAwMDAsCisJfSwgeworCQkubmFtZSA9CQkiUmVzY3VlIGZzIiwKKwkJLnNpemUgPQkJMHgwMDI4MDAwMCwKKwkJLm9mZnNldCA9CTB4MDAxODAwMDAsCisJfSwgeworCQkubmFtZSA9CQkiRmlsZXN5c3RlbSIsCisJCS5zaXplID0JCU1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPQkweDAwNDAwMDAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgeGNlcF9mbGFzaF9kYXRhW10gPSB7CisJeworCQkud2lkdGgJCT0gNCwJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLworCQkucGFydHMJCT0geGNlcF9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHhjZXBfcGFydGl0aW9ucykKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZsYXNoX2RldmljZSA9IHsKKwkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJPSAwLAorCS5kZXYgCT0geworCQkucGxhdGZvcm1fZGF0YSA9IHhjZXBfZmxhc2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9ICZmbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCisKKworLyogU01DIExBTjkxQzExMSBuZXR3b3JrIGNvbnRyb2xsZXIuICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAic21jOTF4LXJlZ3MiLAorCQkuc3RhcnQJPSBYQ0VQX0VUSF9QSFlTLAorCQkuZW5kCT0gWENFUF9FVEhfUEhZU19FTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBYQ0VQX0VUSF9JUlEsCisJCS5lbmQJPSBYQ0VQX0VUSF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkubmFtZQk9ICJzbWM5MXgtYXR0cmliIiwKKwkJLnN0YXJ0CT0gWENFUF9FVEhfQVRUUiwKKwkJLmVuZAk9IFhDRVBfRVRIX0FUVFJfRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgeGNlcF9zbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfVVNFXzMyQklUIHwgU01DOTFYX05PV0FJVCB8IFNNQzkxWF9VU0VfRE1BLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnhjZXBfc21jOTF4X2luZm8sCisJfSwKK307CisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZmbGFzaF9kZXZpY2UsCisJJnNtYzkxeF9kZXZpY2UsCit9OworCisKKy8qIFdlIGhhdmUgdG8gc3RhdGUgdGhhdCB0aGVyZSBhcmUgSFdNT04gZGV2aWNlcyBvbiB0aGUgSTJDIGJ1cyBvbiBYQ0VQLgorICogRHJpdmVycyBmb3IgSFdNT04gdmVyaWZ5IGNhcGFiaWxpdGllcyBvZiB0aGUgYWRhcHRlciB3aGVuIGxvYWRpbmcgYW5kCisgKiByZWZ1c2UgdG8gYXR0YWNoIGlmIHRoZSBhZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBIV01PTiBjbGFzcyBvZiBkZXZpY2VzLgorICogU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9pMmMvcG9ydGluZy1jbGllbnRzLiAqLworc3RhdGljIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgeGNlcF9pMmNfcGxhdGZvcm1fZGF0YSAgPSB7CisJLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OCit9OworCisKK3N0YXRpYyBtZnBfY2ZnX3QgeGNlcF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPNzlfbkNTXzMsCS8qIFNNQyA5MUMxMTEgY2hpcCBzZWxlY3QuICovCisJR1BJTzgwX25DU180LAkvKiBDUExEIGNoaXAgc2VsZWN0LiAqLworCS8qIFNTUCBjb21tdW5pY2F0aW9uIHRvIE1TUDQzMCAqLworCUdQSU8yM19TU1AxX1NDTEssCisJR1BJTzI0X1NTUDFfU0ZSTSwKKwlHUElPMjVfU1NQMV9UWEQsCisJR1BJTzI2X1NTUDFfUlhELAorCUdQSU8yN19TU1AxX0VYVENMSworfTsKKworc3RhdGljIHZvaWQgX19pbml0IHhjZXBfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHhjZXBfcGluX2NvbmZpZykpOworCisJLyogU2VlIEludGVsIFhTY2FsZSBEZXZlbG9wZXIncyBHdWlkZSBmb3IgZGV0YWlscyAqLworCS8qIFNldCBSREYgYW5kIFJETiB0byBhcHByb3ByaWF0ZSB2YWx1ZXMgKGNoaXAgc2VsZWN0IDMgKHNtYzkxeCkpICovCisJTVNDMSA9IChNU0MxICYgMHhmZmZmKSB8IDB4RDU1NDAwMDA7CisJLyogU2V0IFJERiBhbmQgUkROIHRvIGFwcHJvcHJpYXRlIHZhbHVlcyAoY2hpcCBzZWxlY3QgNSAoZnBnYSkpICovCisJTVNDMiA9IChNU0MyICYgMHhmZmZmKSB8IDB4NzJBMDAwMDA7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShkZXZpY2VzKSk7CisJcHhhX3NldF9pMmNfaW5mbygmeGNlcF9pMmNfcGxhdGZvcm1fZGF0YSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoWENFUCwgIklza3JhdGVsIFhDRVAiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSB4Y2VwX2luaXQsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCmluZGV4IDIxOGQyMDAuLjA5Nzg0ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYwpAQCAtMjkwLDYgKzI5MCw5IEBACiAJLmluaXQgCQk9IHp5bG9uaXRlX21jaV9pbml0LAogCS5leGl0CQk9IHp5bG9uaXRlX21jaV9leGl0LAogCS5nZXRfcm8JCT0genlsb25pdGVfbWNpX3JvLAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gLTEsCisJLmdwaW9fY2FyZF9ybwk9IC0xLAorCS5ncGlvX3Bvd2VyCT0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHp5bG9uaXRlX21jaTJfcGxhdGZvcm1fZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCBkZmM5YjBiLi5jNDhlMWYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC03MCw2ICs3MCw4IEBACiAJYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQlggcGxhdGZvcm0iCiAJc2VsZWN0IEFSTV9HSUMKIAlzZWxlY3QgSEFWRV9QQVRBX1BMQVRGT1JNCisJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRSBpZiBDUFVfVjcgJiYgIUhJR0hfUEhZU19PRkZTRVQKKwlzZWxlY3QgWk9ORV9ETUEgaWYgU1BBUlNFTUVNCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3IFBCWCBwbGF0Zm9ybS4KIApAQCAtODIsNiArODQsNyBAQAogCSAgMHg3MDAwMDAwMCwgMjU2TUIgb2Ygd2hpY2ggYmVpbmcgbWlycm9yZWQgYXQgMHgwMDAwMDAwMC4gSWYKIAkgIHRoZSBib2FyZCBzdXBwb3J0cyA1MTJNQiBvZiBSQU0sIHRoaXMgb3B0aW9uIGFsbG93cyB0aGUKIAkgIG1lbW9yeSB0byBiZSBhY2Nlc3NlZCBjb250aWd1b3VzbHkgYXQgdGhlIGhpZ2ggcGh5c2ljYWwKLQkgIG9mZnNldC4KKwkgIG9mZnNldC4gT24gdGhlIFBCWCBib2FyZCwgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGFsbG93cyAxR0Igb2YKKwkgIFJBTSB0byBiZSB1c2VkIHdpdGggU1BBUlNFTUVNLgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCmluZGV4IGRjMzUxOWMuLjlmMjkzNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogCiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTQ0LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogCkBAIC01OSw2ICs1OSwyNSBAQAogLyogdXNlZCBieSBlbnRyeS1tYWNyby5TIGFuZCBwbGF0c21wLmMgKi8KIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CiAKKyNpZmRlZiBDT05GSUdfWk9ORV9ETUEKKy8qCisgKiBBZGp1c3QgdGhlIHpvbmVzIGlmIHRoZXJlIGFyZSByZXN0cmljdGlvbnMgZm9yIERNQSBhY2Nlc3MuCisgKi8KK3ZvaWQgX19pbml0IHJlYWx2aWV3X2FkanVzdF96b25lcyhpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKmhvbGUpCit7CisJdW5zaWduZWQgbG9uZyBkbWFfc2l6ZSA9IFNaXzI1Nk0gPj4gUEFHRV9TSElGVDsKKworCWlmICghbWFjaGluZV9pc19yZWFsdmlld19wYngoKSB8fCBub2RlIHx8IChzaXplWzBdIDw9IGRtYV9zaXplKSkKKwkJcmV0dXJuOworCisJc2l6ZVtaT05FX05PUk1BTF0gPSBzaXplWzBdIC0gZG1hX3NpemU7CisJc2l6ZVtaT05FX0RNQV0gPSBkbWFfc2l6ZTsKKwlob2xlW1pPTkVfTk9STUFMXSA9IGhvbGVbMF07CisJaG9sZVtaT05FX0RNQV0gPSAwOworfQorI2VuZGlmCisKIC8qCiAgKiBUaGlzIGlzIHRoZSBSZWFsVmlldyBzY2hlZF9jbG9jayBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgaGFzCiAgKiBhIHJlc29sdXRpb24gb2YgNDEuN25zLCBhbmQgYSBtYXhpbXVtIHZhbHVlIG9mIGFib3V0IDE3OXMuCkBAIC0yMzcsMTQgKzI1NiwxNCBAQAogCXJldHVybiByZWFkbChSRUFMVklFV19TWVNNQ0kpICYgbWFzazsKIH0KIAotc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhID0geworc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSByZWFsdmlld19tbWNfc3RhdHVzLAogCS5ncGlvX3dwCT0gMTcsCiAJLmdwaW9fY2QJPSAxNiwKIH07CiAKLXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMxX3BsYXRfZGF0YSA9IHsKK3N0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gcmVhbHZpZXdfbW1jX3N0YXR1cywKIAkuZ3Bpb193cAk9IDE5LApAQCAtMjk2LDMxICszMTUsMzEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAl7CS8qIFVBUlQwICovCi0JCS5kZXZfaWQJCT0gImRldjpmMSIsCisJCS5kZXZfaWQJCT0gImRldjp1YXJ0MCIsCiAJCS5jbGsJCT0gJnJlZjI0X2NsaywKIAl9LCB7CS8qIFVBUlQxICovCi0JCS5kZXZfaWQJCT0gImRldjpmMiIsCisJCS5kZXZfaWQJCT0gImRldjp1YXJ0MSIsCiAJCS5jbGsJCT0gJnJlZjI0X2NsaywKIAl9LCB7CS8qIFVBUlQyICovCi0JCS5kZXZfaWQJCT0gImRldjpmMyIsCisJCS5kZXZfaWQJCT0gImRldjp1YXJ0MiIsCiAJCS5jbGsJCT0gJnJlZjI0X2NsaywKIAl9LCB7CS8qIFVBUlQzICovCi0JCS5kZXZfaWQJCT0gImZwZ2E6MDkiLAorCQkuZGV2X2lkCQk9ICJmcGdhOnVhcnQzIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogS01JMCAqLwotCQkuZGV2X2lkCQk9ICJmcGdhOjA2IiwKKwkJLmRldl9pZAkJPSAiZnBnYTprbWkwIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogS01JMSAqLwotCQkuZGV2X2lkCQk9ICJmcGdhOjA3IiwKKwkJLmRldl9pZAkJPSAiZnBnYTprbWkxIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogTU1DMCAqLwotCQkuZGV2X2lkCQk9ICJmcGdhOjA1IiwKKwkJLmRldl9pZAkJPSAiZnBnYTptbWMwIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogRUI6Q0xDRCAqLwotCQkuZGV2X2lkCQk9ICJkZXY6MjAiLAorCQkuZGV2X2lkCQk9ICJkZXY6Y2xjZCIsCiAJCS5jbGsJCT0gJm9zY3Zjb19jbGssCiAJfSwgewkvKiBQQjpDTENEICovCi0JCS5kZXZfaWQJCT0gImlzc3A6MjAiLAorCQkuZGV2X2lkCQk9ICJpc3NwOmNsY2QiLAogCQkuY2xrCQk9ICZvc2N2Y29fY2xrLAogCX0KIH07CkBAIC01NDMsNyArNTYyLDcgQEAKIAlmYi0+cGFuZWwJCT0gcmVhbHZpZXdfY2xjZF9wYW5lbCgpOwogCiAJZmItPmZiLnNjcmVlbl9iYXNlID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZSgmZmItPmRldi0+ZGV2LCBmcmFtZXNpemUsCi0JCQkJCQkgICAgJmRtYSwgR0ZQX0tFUk5FTCk7CisJCQkJCQkgICAgJmRtYSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghZmItPmZiLnNjcmVlbl9iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ0xDRDogdW5hYmxlIHRvIG1hcCBmcmFtZWJ1ZmZlclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzg4LDMgKzgwNywyNCBAQAogCXJlYWx2aWV3X2Nsb2Nrc291cmNlX2luaXQoKTsKIAlyZWFsdmlld19jbG9ja2V2ZW50c19pbml0KHRpbWVyX2lycSk7CiB9CisKKy8qCisgKiBTZXR1cCB0aGUgbWVtb3J5IGJhbmtzLgorICovCit2b2lkIHJlYWx2aWV3X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLCBjaGFyICoqZnJvbSwKKwkJICAgIHN0cnVjdCBtZW1pbmZvICptZW1pbmZvKQoreworCS8qCisJICogTW9zdCBSZWFsVmlldyBwbGF0Zm9ybXMgaGF2ZSA1MTJNQiBjb250aWd1b3VzIFJBTSBhdCAweDcwMDAwMDAwLgorCSAqIEhhbGYgb2YgdGhpcyBpcyBtaXJyb3JlZCBhdCAwLgorCSAqLworI2lmZGVmIENPTkZJR19SRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUCisJbWVtaW5mby0+YmFua1swXS5zdGFydCA9IDB4NzAwMDAwMDA7CisJbWVtaW5mby0+YmFua1swXS5zaXplID0gU1pfNTEyTTsKKwltZW1pbmZvLT5ucl9iYW5rcyA9IDE7CisjZWxzZQorCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzI1Nk07CisJbWVtaW5mby0+bnJfYmFua3MgPSAxOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCmluZGV4IDU5YTMzN2IuLjc4MWJjYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KIAogI2RlZmluZSBBTUJBX0RFVklDRShuYW1lLGJ1c2lkLGJhc2UscGxhdCkJCQlcCkBAIC00NCwxMSArNDUsMTMgQEAKIAkvKiAuZG1hCQk9IGJhc2UjI19ETUEsKi8JCQkJXAogfQogCitzdHJ1Y3QgbWFjaGluZV9kZXNjOworCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19mbGFzaF9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19jZl9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19pMmNfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YTsKLWV4dGVybiBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGE7CitleHRlcm4gc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YTsKK2V4dGVybiBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzFfcGxhdF9kYXRhOwogZXh0ZXJuIHN0cnVjdCBjbGNkX2JvYXJkIGNsY2RfcGxhdF9kYXRhOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CiBleHRlcm4gdm9pZCBfX2lvbWVtICp0aW1lcjBfdmFfYmFzZTsKQEAgLTYxLDUgKzY0LDggQEAKIGV4dGVybiBpbnQgcmVhbHZpZXdfZmxhc2hfcmVnaXN0ZXIoc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiBudW0pOwogZXh0ZXJuIGludCByZWFsdmlld19ldGhfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlc291cmNlICpyZXMpOwogZXh0ZXJuIGludCByZWFsdmlld191c2JfcmVnaXN0ZXIoc3RydWN0IHJlc291cmNlICpyZXMpOworZXh0ZXJuIHZvaWQgcmVhbHZpZXdfZml4dXAoc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MsIHN0cnVjdCB0YWcgKnRhZ3MsCisJCQkgICBjaGFyICoqZnJvbSwgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pOworZXh0ZXJuIHZvaWQgKCpyZWFsdmlld19yZXNldCkoY2hhcik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMTc2LmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaAppbmRleCA5OGY4ZTdlLi4zNGI4MGI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaApAQCAtNzMsNCArNzMsOSBAQAogI2RlZmluZSBSRUFMVklFV19QQjExNzZfR0lDX0RJU1RfQkFTRQkJMHgxMDA0MTAwMCAvKiBHSUMgZGlzdHJpYnV0b3IsIG9uIEZQR0EgKi8KICNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X0wyMjBfQkFTRQkJMHgxMDExMDAwMCAvKiBMMjIwIHJlZ2lzdGVycyAqLwogCisvKgorICogQ29udHJvbCByZWdpc3RlciBTWVNfUkVTRVRDVEwgaXMgc2V0IHRvIDEgdG8gZm9yY2UgYSBzb2Z0IHJlc2V0CisgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1NZU19MT0NLVkFMX1JTVENUTCAgICAweDAxMDAKKwogI2VuZGlmCS8qIF9fQVNNX0FSQ0hfQk9BUkRfUEIxMTc2X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTFtcC5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKaW5kZXggZjBkNjhlMC4uN2FiZjkxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKQEAgLTgxLDQgKzgxLDE2IEBACiAjZGVmaW5lIFJFQUxWSUVXX1RDMTFNUF9HSUNfRElTVF9CQVNFCQkweDFGMDAxMDAwCS8qIFRlc3QgY2hpcCBpbnRlcnJ1cHQgY29udHJvbGxlciBkaXN0cmlidXRvciAqLwogI2RlZmluZSBSRUFMVklFV19UQzExTVBfTDIyMF9CQVNFCQkweDFGMDAyMDAwCS8qIEwyMjAgcmVnaXN0ZXJzICovCiAKKyAvKgorICogVmFsdWVzIGZvciBSRUFMVklFV19TWVNfUkVTRVRfQ1RSTAorICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9DT05GSUdDTFIgICAgMHgwMQorI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfQ09ORklHSU5JVCAgIDB4MDIKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0RMTFJFU0VUICAgICAweDAzCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9QTExSRVNFVCAgICAgMHgwNAorI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfUE9SICAgICAgICAgIDB4MDUKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0RvQyAgICAgICAgICAweDA2CisKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX0xFRCAgICAgICAgICgxIDw8IDApCisKICNlbmRpZgkvKiBfX0FTTV9BUkNIX0JPQVJEX1BCMTFNUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDI5M2MzMDAuLjI0MTdiYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yOSw0ICsyOSw1MyBAQAogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwMDAwMDAwMCkKICNlbmRpZgogCisjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiBkZWZpbmVkKENPTkZJR19aT05FX0RNQSkKK2V4dGVybiB2b2lkIHJlYWx2aWV3X2FkanVzdF96b25lcyhpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKmhvbGUpOworI2RlZmluZSBhcmNoX2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlKSBcCisJcmVhbHZpZXdfYWRqdXN0X3pvbmVzKG5vZGUsIHNpemUsIGhvbGUpCisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKFBIWVNfT0ZGU0VUICsgU1pfMjU2TSAtIDEpCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUICsgU1pfMjU2TSkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorCisvKgorICogU3BhcnNlbWVtIGRlZmluaXRpb25zIGZvciBSZWFsVmlldyBQQlguCisgKgorICogVGhlIFJlYWxWaWV3IFBCWCBib2FyZCBoYXMgYW5vdGhlciBibG9jayBvZiA1MTJNQiBvZiBSQU0gYXQgMHgyMDAwMDAwMCwKKyAqIGhvd2V2ZXIgb25seSB0aGUgYmxvY2sgYXQgMHg3MDAwMDAwMCAob3IgdGhlIDI1Nk1CIG1pcnJvciBhdCAweDAwMDAwMDAwKQorICogbWF5IGJlIHVzZWQgZm9yIERNQS4KKyAqCisgKiBUaGUgbWFjcm9zIGJlbG93IGRlZmluZSBhIHNlY3Rpb24gc2l6ZSBvZiAyNTZNQiBhbmQgYSBub24tbGluZWFyIHZpcnR1YWwgdG8KKyAqIHBoeXNpY2FsIG1hcHBpbmc6CisgKgorICogMjU2TUIgQCAweDAwMDAwMDAwIC0+IFBBR0VfT0ZGU0VUCisgKiA1MTJNQiBAIDB4MjAwMDAwMDAgLT4gUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwCisgKiAyNTZNQiBAIDB4ODAwMDAwMDAgLT4gUEFHRV9PRkZTRVQgKyAweDMwMDAwMDAwCisgKi8KKyNpZmRlZiBDT05GSUdfUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAorI2Vycm9yICJTUEFSU0VNRU0gbm90IGF2YWlsYWJsZSB3aXRoIFJFQUxWSUVXX0hJR0hfUEhZU19PRkZTRVQiCisjZW5kaWYKKworI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTCTMyCisjZGVmaW5lIFNFQ1RJT05fU0laRV9CSVRTCTI4CisKKy8qIGJhbmsgcGFnZSBvZmZzZXRzICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUMQkoUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwKQorI2RlZmluZSBQQUdFX09GRlNFVDIJKFBBR0VfT0ZGU0VUICsgMHgzMDAwMDAwMCkKKworI2RlZmluZSBfX3BoeXNfdG9fdmlydChwaHlzKQkJCQkJCVwKKwkoKHBoeXMpID49IDB4ODAwMDAwMDAgPwkocGh5cykgLSAweDgwMDAwMDAwICsgUEFHRV9PRkZTRVQyIDoJXAorCSAocGh5cykgPj0gMHgyMDAwMDAwMCA/CShwaHlzKSAtIDB4MjAwMDAwMDAgKyBQQUdFX09GRlNFVDEgOglcCisJIChwaHlzKSArIFBBR0VfT0ZGU0VUKQorCisjZGVmaW5lIF9fdmlydF90b19waHlzKHZpcnQpCQkJCQkJXAorCSAoKHZpcnQpID49IFBBR0VfT0ZGU0VUMiA/ICh2aXJ0KSAtIFBBR0VfT0ZGU0VUMiArIDB4ODAwMDAwMDAgOglcCisJICAodmlydCkgPj0gUEFHRV9PRkZTRVQxID8gKHZpcnQpIC0gUEFHRV9PRkZTRVQxICsgMHgyMDAwMDAwMCA6CVwKKwkgICh2aXJ0KSAtIFBBR0VfT0ZGU0VUKQorCisjZW5kaWYJLyogQ09ORklHX1NQQVJTRU1FTSAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCmluZGV4IGM4ZjUwODMuLjRmNDZiZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtMTE5LDE5ICsxMTksNiBAQAogI2RlZmluZSBSRUFMVklFV19TWVNfVEVTVF9PU0MzICAgICAgICAgICAgICAgKFJFQUxWSUVXX1NZU19CQVNFICsgUkVBTFZJRVdfU1lTX1RFU1RfT1NDM19PRkZTRVQpCiAjZGVmaW5lIFJFQUxWSUVXX1NZU19URVNUX09TQzQgICAgICAgICAgICAgICAoUkVBTFZJRVdfU1lTX0JBU0UgKyBSRUFMVklFV19TWVNfVEVTVF9PU0M0X09GRlNFVCkKIAotLyogCi0gKiBWYWx1ZXMgZm9yIFJFQUxWSUVXX1NZU19SRVNFVF9DVFJMCi0gKi8KLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfQ09ORklHQ0xSICAgIDB4MDEKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfQ09ORklHSU5JVCAgIDB4MDIKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfRExMUkVTRVQgICAgIDB4MDMKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfUExMUkVTRVQgICAgIDB4MDQKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfUE9SICAgICAgICAgIDB4MDUKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfRG9DICAgICAgICAgIDB4MDYKLQotI2RlZmluZSBSRUFMVklFV19TWVNfQ1RSTF9MRUQgICAgICAgICAoMSA8PCAwKQotCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFJlYWxWaWV3IGNvbnRyb2wgcmVnaXN0ZXJzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1Myw3ICsxNDAsNyBAQAogICogICAgIFNZU19DTEQsIFNZU19CT09UQ1MKICAqLwogI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS19MT0NLRUQgICAgKDEgPDwgMTYpCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19MT0NLVkFMX01BU0sJMHhGRkZGCQkvKiB3cml0ZSAweEEwNUYgdG8gZW5hYmxlIHdyaXRlIGFjY2VzcyAqLworI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLCTB4QTA1RgkgICAgICAgLyogRW5hYmxlIHdyaXRlIGFjY2VzcyAqLwogCiAvKgogICogUkVBTFZJRVdfU1lTX0ZMQVNICmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDFhMTVhNDQuLmEzMGYyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KIAordm9pZCAoKnJlYWx2aWV3X3Jlc2V0KShjaGFyIG1vZGUpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CiAJLyoKQEAgLTM2LDE2ICszOCwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIFJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7Ci0JdW5zaWduZWQgaW50IHZhbDsKLQogCS8qCiAJICogVG8gcmVzZXQsIHdlIGhpdCB0aGUgb24tYm9hcmQgcmVzZXQgcmVnaXN0ZXIKIAkgKiBpbiB0aGUgc3lzdGVtIEZQR0EKIAkgKi8KLQl2YWwgPSBfX3Jhd19yZWFkbChoZHJfY3RybCk7Ci0JdmFsIHw9IFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKLQlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7CisJaWYgKHJlYWx2aWV3X3Jlc2V0KQorCQlyZWFsdmlld19yZXNldChtb2RlKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCmluZGV4IGE4ODQ1OGIuLjAwOTI2NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCkBAIC0xNDYsMTEgKzE0Niw4IEBACiAJICogcmVnaXN0ZXIuIFRoZSBCb290TW9uaXRvciB3YWl0cyBmb3IgdGhpcyByZWdpc3RlciB0byBiZWNvbWUKIAkgKiBub24temVyby4KIAkgKi8KLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0ZMQUdTU19PRkZTRVQgMHgzMAotI2RlZmluZSBSRUFMVklFV19TWVNfRkxBR1NDX09GRlNFVCAweDM0CiAJX19yYXdfd3JpdGVsKEJTWU0odmlydF90b19waHlzKHJlYWx2aWV3X3NlY29uZGFyeV9zdGFydHVwKSksCi0JCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCi0JCSAgICAgUkVBTFZJRVdfU1lTX0ZMQUdTU19PRkZTRVQpOworCQkgICAgIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfRkxBR1NTRVQpKTsKIAogCW1iKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKaW5kZXggYWJkMTNiNC4uOTE3ZjhjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zNyw3ICszOCw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1lYi5oPgpAQCAtMTkzLDI3ICsxOTMsMjcgQEAKICNkZWZpbmUgRUJfU1NQX0RNQQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksICAiZnBnYTowNCIsIEFBQ0ksICAgICBOVUxMKTsKLUFNQkFfREVWSUNFKG1tYzAsICAiZnBnYTowNSIsIE1NQ0kwLCAgICAmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0Uoa21pMCwgICJmcGdhOjA2IiwgS01JMCwgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwgICJmcGdhOjA3IiwgS01JMSwgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsICJmcGdhOjA5IiwgRUJfVUFSVDMsIE5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwgICJmcGdhOmFhY2kiLCAgQUFDSSwgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UobW1jMCwgICJmcGdhOm1tYzAiLCAgTU1DSTAsICAgICZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLCAgImZwZ2E6a21pMCIsICBLTUkwLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRShrbWkxLCAgImZwZ2E6a21pMSIsICBLTUkxLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywgImZwZ2E6dWFydDMiLCBFQl9VQVJUMywgTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0Uoc21jLCAgICJkZXY6MDAiLCAgRUJfU01DLCAgIE5VTEwpOwotQU1CQV9ERVZJQ0UoY2xjZCwgICJkZXY6MjAiLCAgRUJfQ0xDRCwgICZjbGNkX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShkbWFjLCAgImRldjozMCIsICBETUFDLCAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLCAgImRldjplMCIsICBTQ1RMLCAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRSh3ZG9nLCAgImRldjplMSIsICBFQl9XQVRDSERPRywgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBFQl9HUElPMCwgJmdwaW8wX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgJmdwaW8xX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMiwgImRldjplNiIsICBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShydGMsICAgImRldjplOCIsICBFQl9SVEMsICAgTlVMTCk7Ci1BTUJBX0RFVklDRShzY2kwLCAgImRldjpmMCIsICBTQ0ksICAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MCwgImRldjpmMSIsICBFQl9VQVJUMCwgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwgImRldjpmMiIsICBFQl9VQVJUMSwgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwgImRldjpmMyIsICBFQl9VQVJUMiwgTlVMTCk7Ci1BTUJBX0RFVklDRShzc3AwLCAgImRldjpmNCIsICBFQl9TU1AsICAgTlVMTCk7CitBTUJBX0RFVklDRShzbWMsICAgImRldjpzbWMiLCAgIEVCX1NNQywgICBOVUxMKTsKK0FNQkFfREVWSUNFKGNsY2QsICAiZGV2OmNsY2QiLCAgRUJfQ0xDRCwgICZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLCAgImRldjpkbWFjIiwgIERNQUMsICAgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNjdGwsICAiZGV2OnNjdGwiLCAgU0NUTCwgICAgIE5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywgICJkZXY6d2RvZyIsICBFQl9XQVRDSERPRywgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwgImRldjpncGlvMCIsIEVCX0dQSU8wLCAmZ3BpbzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8xLCAiZGV2OmdwaW8xIiwgR1BJTzEsICAgICZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsICJkZXY6Z3BpbzIiLCBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsICAgImRldjpydGMiLCAgIEVCX1JUQywgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTAsICAiZGV2OnNjaTAiLCAgU0NJLCAgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UodWFydDAsICJkZXY6dWFydDAiLCBFQl9VQVJUMCwgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MSwgImRldjp1YXJ0MSIsIEVCX1VBUlQxLCBOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLCAiZGV2OnVhcnQyIiwgRUJfVUFSVDIsIE5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwgICJkZXY6c3NwMCIsICBFQl9TU1AsICAgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJmRtYWNfZGV2aWNlLApAQCAtNDE1LDYgKzQxNSw3IEBACiAJLnBoeXNfaW8JPSBSRUFMVklFV19FQl9VQVJUMF9CQVNFLAogCS5pb19wZ19vZmZzdAk9IChJT19BRERSRVNTKFJFQUxWSUVXX0VCX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfZWJfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKIAkudGltZXIJCT0gJnJlYWx2aWV3X2ViX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKaW5kZXggMTdmYmIwZS4uN2ZiNzI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLXBiMTE3Ni5oPgpAQCAtMTcwLDI5ICsxNzAsMjkgQEAKICNkZWZpbmUgUEIxMTc2X1NTUF9ETUEJCXsgOSwgOCB9CiAKIC8qIEZQR0EgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6MDQiLAlBQUNJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShtbWMwLAkiZnBnYTowNSIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGttaTAsCSJmcGdhOjA2IiwJS01JMCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6MDciLAlLTUkxLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6MDkiLAlQQjExNzZfVUFSVDMsCU5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6YWFjaSIsCUFBQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKG1tYzAsCSJmcGdhOm1tYzAiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLAkiZnBnYTprbWkwIiwJS01JMCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6a21pMSIsCUtNSTEsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTp1YXJ0MyIsCVBCMTE3Nl9VQVJUMywJTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OjAwIiwJUEIxMTc2X1NNQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCMTE3Nl9XQVRDSERPRywJTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwJImRldjplNCIsCVBCMTE3Nl9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMSwJImRldjplNSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMiwJImRldjplNiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShydGMsCSJkZXY6ZTgiLAlQQjExNzZfUlRDLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjaTAsCSJkZXY6ZjAiLAlTQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OmYxIiwJUEIxMTc2X1VBUlQwLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQxLAkiZGV2OmYyIiwJUEIxMTc2X1VBUlQxLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQyLAkiZGV2OmYzIiwJUEIxMTc2X1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6ZjQiLAlQQjExNzZfU1NQLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNtYywJImRldjpzbWMiLAlQQjExNzZfU01DLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjdGwsCSJkZXY6c2N0bCIsCVNDVEwsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHdkb2csCSJkZXY6d2RvZyIsCVBCMTE3Nl9XQVRDSERPRywJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCMTE3Nl9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEIxMTc2X1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OnNjaTAiLAlTQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEIxMTc2X1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEIxMTc2X1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEIxMTc2X1VBUlQyLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCMTE3Nl9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCMTE3Nl9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotLy9BTUJBX0RFVklDRShkbWFjLAkiaXNzcDozMCIsCVBCMTE3Nl9ETUFDLAlOVUxMKTsKK0FNQkFfREVWSUNFKGNsY2QsCSJpc3NwOmNsY2QiLAlQQjExNzZfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKKy8vQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6ZG1hYyIsCVBCMTE3Nl9ETUFDLAlOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIC8vCSZkbWFjX2RldmljZSwKQEAgLTI5MCw2ICsyOTAsMjggQEAKIAkuaW5pdAkJPSByZWFsdmlld19wYjExNzZfdGltZXJfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BiMTE3Nl9yZXNldChjaGFyIG1vZGUpCit7CisJdm9pZCBfX2lvbWVtICpoZHJfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKworCQlSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VUOworCXZvaWQgX19pb21lbSAqcnN0X2hkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCisJCVJFQUxWSUVXX1NZU19MT0NLX09GRlNFVDsKKwlfX3Jhd193cml0ZWwoUkVBTFZJRVdfU1lTX0xPQ0tWQUxfTUFTSywgcnN0X2hkcl9jdHJsKTsKKwlfX3Jhd193cml0ZWwoUkVBTFZJRVdfUEIxMTc2X1NZU19MT0NLVkFMX1JTVENUTCwgaGRyX2N0cmwpOworfQorCitzdGF0aWMgdm9pZCByZWFsdmlld19wYjExNzZfZml4dXAoc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MsCisJCQkJICBzdHJ1Y3QgdGFnICp0YWdzLCBjaGFyICoqZnJvbSwKKwkJCQkgIHN0cnVjdCBtZW1pbmZvICptZW1pbmZvKQoreworCS8qCisJICogUmVhbFZpZXcgUEIxMTc2IG9ubHkgaGFzIDEyOE1CIG9mIFJBTSBtYXBwZWQgYXQgMC4KKwkgKi8KKwltZW1pbmZvLT5iYW5rWzBdLnN0YXJ0ID0gMDsKKwltZW1pbmZvLT5iYW5rWzBdLnNpemUgPSBTWl8xMjhNOworCW1lbWluZm8tPm5yX2JhbmtzID0gMTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X3BiMTE3Nl9pbml0KHZvaWQpCiB7CiAJaW50IGk7CkBAIC0zMTMsNiArMzM1LDcgQEAKICNpZmRlZiBDT05GSUdfTEVEUwogCWxlZHNfZXZlbnQgPSByZWFsdmlld19sZWRzX2V2ZW50OwogI2VuZGlmCisJcmVhbHZpZXdfcmVzZXQgPSByZWFsdmlld19wYjExNzZfcmVzZXQ7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoUkVBTFZJRVdfUEIxMTc2LCAiQVJNLVJlYWxWaWV3IFBCMTE3NiIpCkBAIC0zMjAsNiArMzQzLDcgQEAKIAkucGh5c19pbwk9IFJFQUxWSUVXX1BCMTE3Nl9VQVJUMF9CQVNFLAogCS5pb19wZ19vZmZzdAk9IChJT19BRERSRVNTKFJFQUxWSUVXX1BCMTE3Nl9VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDAwMDAwMTAwLAorCS5maXh1cAkJPSByZWFsdmlld19wYjExNzZfZml4dXAsCiAJLm1hcF9pbwkJPSByZWFsdmlld19wYjExNzZfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKIAkudGltZXIJCT0gJnJlYWx2aWV3X3BiMTE3Nl90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCmluZGV4IGZkZDA0MmIuLjliYmJmYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1wYjExbXAuaD4KQEAgLTE3MiwyOSArMTcyLDI5IEBACiAjZGVmaW5lIFBCMTFNUF9TU1BfRE1BCQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksCSJmcGdhOjA0IiwJQUFDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6MDUiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShrbWkwLAkiZnBnYTowNiIsCUtNSTAsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGttaTEsCSJmcGdhOjA3IiwJS01JMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOjA5IiwJUEIxMU1QX1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQjExTVBfVUFSVDMsCU5VTEwpOwogCiAvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCMTFNUF9TTUMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQjExTVBfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEIxMU1QX1JUQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwJImRldjpmMiIsCVBCMTFNUF9VQVJUMSwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwJImRldjpmMyIsCVBCMTFNUF9VQVJUMiwJTlVMTCk7Ci1BTUJBX0RFVklDRShzc3AwLAkiZGV2OmY0IiwJUEIxMU1QX1NTUCwJTlVMTCk7CitBTUJBX0RFVklDRShzbWMsCSJkZXY6c21jIiwJUEIxMU1QX1NNQywJTlVMTCk7CitBTUJBX0RFVklDRShzY3RsLAkiZGV2OnNjdGwiLAlTQ1RMLAkJTlVMTCk7CitBTUJBX0RFVklDRSh3ZG9nLAkiZGV2Ondkb2ciLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6Z3BpbzAiLAlQQjExTVBfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6Z3BpbzEiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6Z3BpbzIiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UocnRjLAkiZGV2OnJ0YyIsCVBCMTFNUF9SVEMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpzY2kwIiwJU0NJLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MCwJImRldjp1YXJ0MCIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MSwJImRldjp1YXJ0MSIsCVBCMTFNUF9VQVJUMSwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MiwJImRldjp1YXJ0MiIsCVBCMTFNUF9VQVJUMiwJTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLAkiZGV2OnNzcDAiLAlQQjExTVBfU1NQLAlOVUxMKTsKIAogLyogUHJpbWVjZWxscyBvbiB0aGUgTkVDIElTU1AgY2hpcCAqLwotQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6MjAiLAlQQjExTVBfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGRtYWMsCSJpc3NwOjMwIiwJRE1BQywJCU5VTEwpOworQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCMTFNUF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6ZG1hYyIsCURNQUMsCQlOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmZG1hY19kZXZpY2UsCkBAIC0yOTksNiArMjk5LDIxIEBACiAJLmluaXQJCT0gcmVhbHZpZXdfcGIxMW1wX3RpbWVyX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCByZWFsdmlld19wYjExbXBfcmVzZXQoY2hhciBtb2RlKQoreworCXZvaWQgX19pb21lbSAqaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKKwkJUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyoKKwkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgorCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQorCSAqLworCXZhbCA9IF9fcmF3X3JlYWRsKGhkcl9jdHJsKTsKKwl2YWwgfD0gUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKKwlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYjExbXBfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMzI0LDYgKzMzOSw3IEBACiAjaWZkZWYgQ09ORklHX0xFRFMKIAlsZWRzX2V2ZW50ID0gcmVhbHZpZXdfbGVkc19ldmVudDsKICNlbmRpZgorCXJlYWx2aWV3X3Jlc2V0ID0gcmVhbHZpZXdfcGIxMW1wX3Jlc2V0OwogfQogCiBNQUNISU5FX1NUQVJUKFJFQUxWSUVXX1BCMTFNUCwgIkFSTS1SZWFsVmlldyBQQjExTVBDb3JlIikKQEAgLTMzMSw2ICszNDcsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGIxMW1wX21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19wYjExbXBfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCmluZGV4IDcwYmJhOTkuLmZlODYxZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTM0LDcgKzM1LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0xNjIsMjkgKzE2MiwyOSBAQAogI2RlZmluZSBQQkE4X1NTUF9ETUEJCXsgOSwgOCB9CiAKIC8qIEZQR0EgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6MDQiLAlBQUNJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShtbWMwLAkiZnBnYTowNSIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGttaTAsCSJmcGdhOjA2IiwJS01JMCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6MDciLAlLTUkxLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6MDkiLAlQQkE4X1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQkE4X1VBUlQzLAlOVUxMKTsKIAogLyogRGV2Q2hpcCBQcmltZWNlbGxzICovCi1BTUJBX0RFVklDRShzbWMsCSJkZXY6MDAiLAlQQkE4X1NNQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCQThfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQkE4X0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKHJ0YywJImRldjplOCIsCVBCQThfUlRDLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjaTAsCSJkZXY6ZjAiLAlTQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OmYxIiwJUEJBOF9VQVJUMCwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwJImRldjpmMiIsCVBCQThfVUFSVDEsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDIsCSJkZXY6ZjMiLAlQQkE4X1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6ZjQiLAlQQkE4X1NTUCwJTlVMTCk7CitBTUJBX0RFVklDRShzbWMsCSJkZXY6c21jIiwJUEJBOF9TTUMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjpzY3RsIiwJU0NUTCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywJImRldjp3ZG9nIiwJUEJBOF9XQVRDSERPRywgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCQThfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6Z3BpbzEiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6Z3BpbzIiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UocnRjLAkiZGV2OnJ0YyIsCVBCQThfUlRDLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTAsCSJkZXY6c2NpMCIsCVNDSSwJCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6dWFydDAiLAlQQkE4X1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEJBOF9VQVJUMSwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MiwJImRldjp1YXJ0MiIsCVBCQThfVUFSVDIsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpzc3AwIiwJUEJBOF9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCQThfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGRtYWMsCSJpc3NwOjMwIiwJRE1BQywJCU5VTEwpOworQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCQThfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGRtYWMsCSJpc3NwOmRtYWMiLAlETUFDLAkJTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJmRtYWNfZGV2aWNlLApAQCAtMjk4LDYgKzI5OCw3IEBACiAJLnBoeXNfaW8JPSBSRUFMVklFV19QQkE4X1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEJBOF9VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDAwMDAwMTAwLAorCS5maXh1cAkJPSByZWFsdmlld19maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BiYThfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKIAkudGltZXIJCT0gJnJlYWx2aWV3X3BiYThfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwppbmRleCBjZTZjNWQyLi5lYzM5NDg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMzQsNyArMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTE4MiwyOSArMTgyLDI5IEBACiAjZGVmaW5lIFBCWF9TU1BfRE1BCQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksCSJmcGdhOjA0IiwJQUFDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6MDUiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShrbWkwLAkiZnBnYTowNiIsCUtNSTAsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGttaTEsCSJmcGdhOjA3IiwJS01JMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOjA5IiwJUEJYX1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQlhfVUFSVDMsCU5VTEwpOwogCiAvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCWF9TTUMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQlhfV0FUQ0hET0csIAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEJYX0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKHJ0YywJImRldjplOCIsCVBCWF9SVEMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpmMCIsCVNDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6ZjEiLAlQQlhfVUFSVDAsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6ZjIiLAlQQlhfVUFSVDEsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDIsCSJkZXY6ZjMiLAlQQlhfVUFSVDIsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpmNCIsCVBCWF9TU1AsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OnNtYyIsCVBCWF9TTUMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjpzY3RsIiwJU0NUTCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywJImRldjp3ZG9nIiwJUEJYX1dBVENIRE9HLCAJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCWF9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEJYX1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OnNjaTAiLAlTQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEJYX1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEJYX1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEJYX1VBUlQyLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCWF9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCWF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6MzAiLAlETUFDLAkJTlVMTCk7CitBTUJBX0RFVklDRShjbGNkLAkiaXNzcDpjbGNkIiwJUEJYX0NMQ0QsCSZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLAkiaXNzcDpkbWFjIiwJRE1BQywJCU5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZkbWFjX2RldmljZSwKQEAgLTMwNCw2ICszMDQsMjYgQEAKIAkuaW5pdAkJPSByZWFsdmlld19wYnhfdGltZXJfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BieF9maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywgc3RydWN0IHRhZyAqdGFncywKKwkJCSAgICAgICBjaGFyICoqZnJvbSwgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pCit7CisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorCS8qCisJICogTWVtb3J5IGNvbmZpZ3VyYXRpb24gd2l0aCBTUEFSU0VNRU0gZW5hYmxlZCBvbiBSZWFsVmlldyBQQlggKHNlZQorCSAqIGFzbS9tYWNoL21lbW9yeS5oIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKwkgKi8KKwltZW1pbmZvLT5iYW5rWzBdLnN0YXJ0ID0gMDsKKwltZW1pbmZvLT5iYW5rWzBdLnNpemUgPSBTWl8yNTZNOworCW1lbWluZm8tPmJhbmtbMV0uc3RhcnQgPSAweDIwMDAwMDAwOworCW1lbWluZm8tPmJhbmtbMV0uc2l6ZSA9IFNaXzUxMk07CisJbWVtaW5mby0+YmFua1syXS5zdGFydCA9IDB4ODAwMDAwMDA7CisJbWVtaW5mby0+YmFua1syXS5zaXplID0gU1pfMjU2TTsKKwltZW1pbmZvLT5ucl9iYW5rcyA9IDM7CisjZWxzZQorCXJlYWx2aWV3X2ZpeHVwKG1kZXNjLCB0YWdzLCBmcm9tLCBtZW1pbmZvKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGJ4X2luaXQodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTM0NSw2ICszNjUsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEJYX1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEJYX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X3BieF9maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BieF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGJ4X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwppbmRleCBkOGMwMjNkLi4zZDRlOWRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwpAQCAtNzcsNiArNzcsNyBAQAogCXNlbGVjdCBDUFVfUzNDMjQxMAogCXNlbGVjdCBQTV9IMTk0MCBpZiBQTQogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgSFAgSVBBUSBIMTk0MAogCkBAIC04OSw2ICs5MCw3IEBACiAJYm9vbCAiQWNlciBOMzAgZmFtaWx5IgogCXNlbGVjdCBDUFVfUzNDMjQxMAogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcHQgZm9yIHRoZSBBY2VyIE4zMCwgQWNlciBOMzUsCiAJICBOYXZtYW4gUGlONTcwLCBZYWt1bW8gQWxwaGFYIG9yIEFpcmlzIE5DMDUgUERBcy4KQEAgLTEwMyw2ICsxMDUsNyBAQAogCXNlbGVjdCBTM0MyNFhYX0RDTEsKIAlzZWxlY3QgSVNBCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTaW10ZWMgRWxlY3Ryb25pY3MgRUIyNDEwSVRYCiAJICBkZXZlbG9wbWVudCBib2FyZCAoYWxzbyBrbm93biBhcyBCQVNUKQpAQCAtMTExLDYgKzExNCw3IEBACiAgCWJvb2wgIk5leFZpc2lvbiBPVE9NIEJvYXJkIgogIAlzZWxlY3QgQ1BVX1MzQzI0MTAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAgCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOZXggVmlzaW9uIE9UT00gYm9hcmQKIApAQCAtMTU0LDYgKzE1OCw3IEBACiAJYm9vbCAiUVQyNDEwIgogCXNlbGVjdCBDUFVfUzNDMjQxMAogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFybXpvbmUgUVQyNDEwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jCmluZGV4IDc5NzRhZmMuLjk2NjRlMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWZucy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaAppbmRleCBjM2EyNjI5Li45MmUyNjg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTExMCw2ICsxMTAsOCBAQAogCQkJCQkgICAgKiB3YWl0aW5nIGZvciByZWxvYWRzICovCiAjZGVmaW5lIFMzQzI0MTBfRE1BRl9BVVRPU1RBUlQgICAgKDE8PDEpICAgLyogYXV0by1zdGFydCBpZiBidWZmZXIgcXVldWVkICovCiAKKyNkZWZpbmUgUzNDMjQxMF9ETUFGX0NJUkNVTEFSCSgxIDw8IDIpCS8qIG5vIGNpcmN1bGFyIGRtYSBzdXBwb3J0ICovCisKIC8qIGRtYSBidWZmZXIgKi8KIAogc3RydWN0IHMzYzI0MTBfZG1hX2J1ZjsKQEAgLTE5NCw0ICsxOTYsOSBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZG1hX2RldmljZV90OwogCitzdGF0aWMgaW5saW5lIGJvb2wgczNjX2RtYV9oYXNfY2lyY3VsYXIodm9pZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCmluZGV4IDM1YzFiZGUuLmMyYmRjNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCkBAIC00OCw2ICs0OCw3IEBACiAJYm9vbCAiTG9naXRlY2ggSml2ZSIKIAlzZWxlY3QgQ1BVX1MzQzI0MTIKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIExvZ2l0ZWNoIEppdmUuCiAKQEAgLTYxLDYgKzYyLDcgQEAKIAlzZWxlY3QgTUFDSF9TM0MyNDEzCiAJc2VsZWN0IE1BQ0hfU01ESwogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhbiBTTURLMjQxMwogCkBAIC04NCw2ICs4Niw3IEBACiAJYm9vbCAiVk1TVE1TIgogCXNlbGVjdCBDUFVfUzNDMjQxMgogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhbiBWU1RNUyBib2FyZAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCmluZGV4IDhhZTFiMjguLmE4YjY5ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCkBAIC00OCw2ICs0OCw3IEBACiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xMjAwMDAwMAogCXNlbGVjdCBTM0MyNDEwX0lPVElNSU5HIGlmIFMzQzI0NDBfQ1BVRlJFUQogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIElNMjQ0MEQyMCBtb2R1bGUsIGFsc28KIAkgIGtub3duIGFzIHRoZSBPc2lyaXMuCkBAIC01Nyw2ICs1OCw3IEBACiAJc2VsZWN0IENQVV9TM0MyNDQwCiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xNjkzNDQwMAogCXNlbGVjdCBQTV9IMTk0MCBpZiBQTQorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEhQIGlQQVEgcngzNzE1LgogCkBAIC02Niw2ICs2OCw3IEBACiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xNjkzNDQwMAogCXNlbGVjdCBNQUNIX1NNREsKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNNREsyNDQwLgogCkBAIC03NCw2ICs3Nyw3IEBACiAgCXNlbGVjdCBDUFVfUzNDMjQ0MAogCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAgCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOZXggVmlzaW9uIE5FWENPREVSIDI0NDAgTGlnaHQgQm9hcmQKIApAQCAtODgsNiArOTIsNyBAQAogCWJvb2wgIkF2YW50ZWNoIEFUMjQ0MEVWQiBkZXZlbG9wbWVudCBib2FyZCIKIAlzZWxlY3QgQ1BVX1MzQzI0NDAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFUMjQ0MEVWQiBkZXZlbG9wbWVudCBib2FyZAogCkBAIC05Nyw2ICsxMDIsOCBAQAogCXNlbGVjdCBFRVBST01fQVQyNAogCXNlbGVjdCBMRURTX1RSSUdHRVJfQkFDS0xJR0hUCiAJc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19TM0MyNFhYX1VEQTEzNFgKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECisJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCBzdXBwb3J0IGZvciB0aGUgTUlOSTI0NDAuIElzIGEgMTBjbSB4IDEwY20gYm9hcmQKIAkgIGF2YWlsYWJsZSB2aWEgdmFyaW91cyBzb3VyY2VzLiBJdCBjYW4gY29tZSB3aXRoIGEgMy41IiBvciA3IiB0b3VjaCBMQ0QuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYwppbmRleCBlYzcxYTY5Li4xYzMzODJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCS50eXBlCQk9IChTM0MyNDEwX0xDRENPTjFfVEZUMTZCUFAgfFwKIAkJCSAgIFMzQzI0MTBfTENEQ09OMV9URlQpCiAKLXN0cnVjdCBzM2MyNDEwZmJfZGlzcGxheSBtaW5pMjQ0MF9sY2RfY2ZnW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMGZiX2Rpc3BsYXkgbWluaTI0NDBfbGNkX2NmZ1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewkvKiBtaW5pMjQ0MCArIDMuNSIgVEZUICsgdG91Y2hzY3JlZW4gKi8KIAkJX0xDRF9ERUNMQVJFKAogCQkJNywJCQkvKiBUaGUgMy41IGlzIHF1aXRlIGZhc3QgKi8KQEAgLTE5MSw3ICsxOTEsNyBAQAogI2RlZmluZSBTM0MyNDEwX0dQQ0NPTl9NQVNLKHgpCSgzIDw8ICgoeCkgKiAyKSkKICNkZWZpbmUgUzNDMjQxMF9HUERDT05fTUFTSyh4KQkoMyA8PCAoKHgpICogMikpCiAKLXN0cnVjdCBzM2MyNDEwZmJfbWFjaF9pbmZvIG1pbmkyNDQwX2ZiX2luZm8gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMGZiX21hY2hfaW5mbyBtaW5pMjQ0MF9mYl9pbmZvIF9faW5pdGRhdGEgPSB7CiAJLmRpc3BsYXlzCSA9ICZtaW5pMjQ0MF9sY2RfY2ZnWzBdLCAvKiBub3QgY29uc3RhbnQhIHNlZSBpbml0ICovCiAJLm51bV9kaXNwbGF5cwkgPSAxLAogCS5kZWZhdWx0X2Rpc3BsYXkgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZwppbmRleCBmNWFmMjEyLi43NzBiNzIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZwpAQCAtMjYsNiArMjYsNyBAQAogICAgICAgIGJvb2wgIlNNREs2NDAwIgogCXNlbGVjdCBDUFVfUzNDNjQwMAogCXNlbGVjdCBTM0NfREVWX0hTTU1DCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCXNlbGVjdCBTM0M2NDAwX1NFVFVQX1NESENJCiAJaGVscAogCSAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBTTURLNjQwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZG1hLmgKaW5kZXggMTA2NzYxOS4uNjcyMzg2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC01OCwxMiArNTgsOSBAQAogCURNQUNIX01BWAkJLyogdGhlIGVuZCAqLwogfTsKIAotc3RhdGljIF9faW5saW5lX18gaW50IHMzY19kbWFfaGFzX2NpcmN1bGFyKHZvaWQpCitzdGF0aWMgX19pbmxpbmVfXyBib29sIHMzY19kbWFfaGFzX2NpcmN1bGFyKHZvaWQpCiB7Ci0JLyogd2Ugd2lsbCBiZSBzdXBwb3J0aW5nIGNpcnVjbGFyIGJ1ZmZlcnMgYXMgc29vbiBhcyB3ZSBoYXZlIERNQQotCSAqIGVuZ2luZSBzdXBwb3J0LgotCSAqLwotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAjZGVmaW5lIFMzQzI0MTBfRE1BRl9DSVJDVUxBUgkJKDEgPDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcKaW5kZXggZjlkMGYwOS4uNzJkNGIxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcKQEAgLTc3LDYgKzc3LDcgQEAKIAlkZXBlbmRzIG9uIE1BQ0hfU01ESzY0MTAKIAlzZWxlY3QgUkVHVUxBVE9SCiAJc2VsZWN0IFJFR1VMQVRPUl9XTTgzNTAKKwlzZWxlY3QgUzNDMjRYWF9HUElPX0VYVFJBNjQKIAlzZWxlY3QgTUZEX1dNODM1MF9JMkMKIAlzZWxlY3QgTUZEX1dNODM1MF9DT05GSUdfTU9ERV8wCiAJc2VsZWN0IE1GRF9XTTgzNTBfQ09ORklHX01PREVfMwpAQCAtMTAyLDYgKzEwMyw3IEBACiAJYm9vbCAiQWlyZ29vIEhNVCIKIAlzZWxlY3QgQ1BVX1MzQzY0MTAKIAlzZWxlY3QgUzNDX0RFVl9GQgorCXNlbGVjdCBTM0NfREVWX05BTkQKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCXNlbGVjdCBTM0M2NFhYX1NFVFVQX0ZCXzI0QlBQCiAJc2VsZWN0IEhBVkVfUFdNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwppbmRleCBlYTUxZGJlLi45ZjFhMjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKQEAgLTMyMCw2ICszMjAsOSBAQAogewogCWludCBpOwogCisJLyogQ29uZmlndXJlIHRoZSBJUlEgbGluZSAqLworCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUE4oMTIpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwogCS8qIEluc3RhbnRpYXRlIHRoZSByZWd1bGF0b3JzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod20xMTkwX3JlZ3VsYXRvcnMpOyBpKyspCiAJCXdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcKaW5kZXggODFmZmZmNy4uNGU1YzA3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnCkBAIC03MSwxMSArNzEsNiBAQAogCSAgPGh0dHA6Ly93d3cuaGFuZGhlbGRzLm9yZy9Db21wYXEvaW5kZXguaHRtbCNpUEFRX0gzNjAwPgogCSAgPGh0dHA6Ly93d3cuY29tcGFxLmNvbS9wcm9kdWN0cy9oYW5kaGVsZHMvcG9ja2V0cGMvPgogCi1jb25maWcgU0ExMTAwX0gzWFhYCi0JYm9vbAotCWRlcGVuZHMgb24gU0ExMTAwX0gzMTAwIHx8IFNBMTEwMF9IMzYwMAotCWRlZmF1bHQgeQotCiBjb25maWcgU0ExMTAwX0JBREdFNAogCWJvb2wgIkhQIExhYnMgQmFkZ2VQQUQgNCIKIAlzZWxlY3QgU0ExMTExCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCmluZGV4IDhhNTU0NmUuLmJiN2I4MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCkBAIC0yNSw2ICsyNSw3IEBACiAKIG9iai0kKENPTkZJR19TQTExMDBfQ09MTElFKQkJKz0gY29sbGllLm8KIAorb2JqLSQoQ09ORklHX1NBMTEwMF9IMzEwMCkJCSs9IGgzNjAwLm8KIG9iai0kKENPTkZJR19TQTExMDBfSDM2MDApCQkrPSBoMzYwMC5vCiAKIG9iai0kKENPTkZJR19TQTExMDBfSEFDS0tJVCkJCSs9IGhhY2traXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYwppbmRleCA5NWY5YzVhLi5jYjQ1MjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYwpAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgc2ExMTAwX2RtYV90IGRtYV9jaGFuW1NBMTEwMF9ETUFfQ0hBTk5FTFNdOwogCi1zdGF0aWMgc3BpbmxvY2tfdCBkbWFfbGlzdF9sb2NrOworc3RhdGljIERFRklORV9TUElOTE9DSyhkbWFfbGlzdF9sb2NrKTsKIAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwppbmRleCA5NWQ5MmU4Li5iOWNiYjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJLnNldF9tb2RlCT0gc2ExMTAwX29zbXIwX3NldF9tb2RlLAogfTsKIAotc3RhdGljIGN5Y2xlX3Qgc2ExMTAwX3JlYWRfb3Njcih2b2lkKQorc3RhdGljIGN5Y2xlX3Qgc2ExMTAwX3JlYWRfb3NjcihzdHJ1Y3QgY2xvY2tzb3VyY2UgKnMpCiB7CiAJcmV0dXJuIE9TQ1I7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCmluZGV4IDMzN2I5YWEuLjgwMWIyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCkBAIC04MSw2ICs4MSwxOCBAQAogCQlNZW1vcnkgSW50ZXJmYWNlKSBmcm9tIGJvdGggZnJvbSBhY2Nlc3MgYW5kIGFwcGxpY2F0aW9uCiAJCXNpZGUuCiAKK2NvbmZpZyBNQUNIX1UzMDBfU1BJRFVNTVkKKwlib29sICJTU1AvU1BJIGR1bW15IGNoaXAiCisJc2VsZWN0IFNQSQorCXNlbGVjdCBTUElfTUFTVEVSCisJc2VsZWN0IFNQSV9QTDAyMgorCWhlbHAKKwkJVGhpcyBjcmVhdGVzIGEgc21hbGwga2VybmVsIG1vZHVsZSB0aGF0IGNyZWF0ZXMgYSBkdW1teQorCQlTUEkgZGV2aWNlIHRvIGJlIHVzZWQgZm9yIGxvb3BiYWNrIHRlc3RzLiBSZWd1bGFybHkgdXNlZAorCQl0byB0ZXN0IHJlZmVyZW5jZSBkZXNpZ25zLiBJZiB5b3UncmUgbm90IHRlc3RpbmcgU1BJLAorCQl5b3UgZG9uJ3QgbmVlZCBpdC4gU2VsZWN0aW5nIHRoaXMgd2lsbCBhY3RpdmF0ZSB0aGUKKwkJU1BJIGZyYW1ld29yayBhbmQgQVJNIFBMMDIyIHN1cHBvcnQuCisKIGNvbW1lbnQgIkFsbCB0aGUgc2V0dGluZ3MgYmVsb3cgbXVzdCBtYXRjaCB0aGUgYm9vdGxvYWRlcidzIHNldHRpbmdzIgogCiBjb25maWcgTUFDSF9VMzAwX0FDQ0VTU19NRU1fU0laRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC11MzAwL01ha2VmaWxlCmluZGV4IDI0OTUwZTAuLjg4NWI1YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvTWFrZWZpbGUKQEAgLTksMyArOSw2IEBACiAKIG9iai0kKENPTkZJR19BUkNIX1UzMDApCSAgICAgICAgICArPSB1MzAwLm8KIG9iai0kKENPTkZJR19NTUMpICAgICAgICAgICAgICAgICArPSBtbWMubworb2JqLSQoQ09ORklHX1NQSV9QTDAyMikgICAgICAgICAgICs9IHNwaS5vCitvYmotJChDT05GSUdfTUFDSF9VMzAwX1NQSURVTU1ZKSAgKz0gZHVtbXlzcGljaGlwLm8KK29iai0kKENPTkZJR19JMkNfU1RVMzAwKSAgICAgICAgICArPSBpMmMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKaW5kZXggMmU5YjhjYy4uNjUzZTI1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCkBAIC0zMiw2ICszMiw4IEBACiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgIm1tYy5oIgorI2luY2x1ZGUgInNwaS5oIgorI2luY2x1ZGUgImkyYy5oIgogCiAvKgogICogU3RhdGljIEkvTyBtYXBwaW5ncyB0aGF0IGFyZSBuZWVkZWQgZm9yIGJvb3RpbmcgdGhlIFUzMDAgcGxhdGZvcm1zLiBUaGUKQEAgLTM3OCwxNCArMzgwLDE0IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMwX2RldmljZSA9IHsKLQkubmFtZSA9ICJzdGRkY2kyYyIsCisJLm5hbWUgPSAic3R1MzAwIiwKIAkuaWQgPSAwLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpMmMwX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gaTJjMF9yZXNvdXJjZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMxX2RldmljZSA9IHsKLQkubmFtZSA9ICJzdGRkY2kyYyIsCisJLm5hbWUgPSAic3R1MzAwIiwKIAkuaWQgPSAxLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpMmMxX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gaTJjMV9yZXNvdXJjZXMsCkBAIC00MDYsNyArNDA4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicnRjMCIsCisJLm5hbWUgPSAicnRjLWNvaDkwMTMzMSIsCiAJLmlkID0gLTEsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZSA9IHJ0Y19yZXNvdXJjZXMsCkBAIC02MTEsNiArNjEzLDggQEAKIAkvKiBXYWl0IGZvciB0aGUgUExMMjA4IHRvIGxvY2sgaWYgbm90IGxvY2tlZCBpbiB5ZXQgKi8KIAl3aGlsZSAoIShyZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX0NTUikgJgogCQkgVTMwMF9TWVNDT05fQ1NSX1BMTDIwOF9MT0NLX0lORCkpOworCS8qIEluaXRpYWxpemUgU1BJIGRldmljZSB3aXRoIHNvbWUgYm9hcmQgc3BlY2lmaWNzICovCisJdTMwMF9zcGlfaW5pdCgmcGwwMjJfZGV2aWNlKTsKIAogCS8qIFJlZ2lzdGVyIHRoZSBBTUJBIGRldmljZXMgaW4gdGhlIEFNQkEgYnVzIGFic3RyYWN0aW9uIGxheWVyICovCiAJdTMwMF9jbG9ja19wcmltZWNlbGxzKCk7CkBAIC02MjIsNiArNjI2LDEyIEBACiAKIAl1MzAwX2Fzc2lnbl9waHlzbWVtKCk7CiAKKwkvKiBSZWdpc3RlciBzdWJkZXZpY2VzIG9uIHRoZSBJMkMgYnVzZXMgKi8KKwl1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKCk7CisKKwkvKiBSZWdpc3RlciBzdWJkZXZpY2VzIG9uIHRoZSBTUEkgYnVzICovCisJdTMwMF9zcGlfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcygpOworCiAJLyogUmVnaXN0ZXIgdGhlIHBsYXRmb3JtIGRldmljZXMgKi8KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldnMpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MmY5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBUaGlzIGlzIGEgZHVtbXkgbG9vcGJhY2sgU1BJICJjaGlwIiB1c2VkIGZvciB0ZXN0aW5nIFNQSS4KKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisvKgorICogV0FSTklORyEgRG8gbm90IGluY2x1ZGUgdGhpcyBwbDAyMi1zcGVjaWZpYyBjb250cm9sbGVyIGhlYWRlcgorICogZm9yIGFueSBnZW5lcmljIGRyaXZlci4gSXQgaXMgb25seSBkb25lIGluIHRoaXMgZHVtbXkgY2hpcAorICogYmVjYXVzZSB3ZSBhbHRlciB0aGUgY2hpcCBjb25maWd1cmF0aW9uIGluIG9yZGVyIHRvIHRlc3Qgc29tZQorICogZGlmZmVyZW50IHNldHRpbmdzIG9uIHRoZSBsb29wYmFjayBkZXZpY2UuIE5vcm1hbCBjaGlwIGNvbmZpZ3MKKyAqIHNoYWxsIGJlIFNUQVRJQyBhbmQgbm90IGFsdGVyZWQgYnkgdGhlIGRyaXZlciEKKyAqLworI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KKworc3RydWN0IGR1bW15IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7Cit9OworCisjZGVmaW5lIERNQV9URVNUX1NJWkUgMjA0OAorCisvKiBXaGVuIHdlIGNhdCAvc3lzL2J1cy9zcGkvZGV2aWNlcy9zcGkwLjAvbG9vcHRlc3QgdGhpcyB3aWxsIGJlIHRyaWdnZXJlZCAqLworc3RhdGljIHNzaXplX3QgZHVtbXlfbG9vcHRlc3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGR1bW15ICpwX2R1bW15ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwkvKgorCSAqIFdBUk5JTkchIERvIG5vdCBkZXJlZmVyZW5jZSB0aGUgY2hpcC1zcGVjaWZpYyBkYXRhIGluIGFueSBub3JtYWwKKwkgKiBkcml2ZXIgZm9yIGEgY2hpcC4gSXQgaXMgdXN1YWxseSBTVEFUSUMgYW5kIHNoYWxsIG5vdCBiZSByZWFkCisJICogb3Igd3JpdHRlbiB0by4gWW91ciBjaGlwIGRyaXZlciBzaG91bGQgTk9UIGRlcGVuZCBvbiBmaWVsZHMgaW4gdGhpcworCSAqIHN0cnVjdCwgdGhpcyBpcyBqdXN0IHVzZWQgaGVyZSB0byBhbHRlciB0aGUgYmVoYXZpb3VyIG9mIHRoZSBjaGlwCisJICogaW4gb3JkZXIgdG8gcGVyZm9ybSB0ZXN0cy4KKwkgKi8KKwlzdHJ1Y3QgcGwwMjJfY29uZmlnX2NoaXAgKmNoaXBfaW5mbyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOworCWludCBzdGF0dXM7CisJdTggdHhidWZbMTRdID0gezB4REUsIDB4QUQsIDB4QkUsIDB4RUYsIDB4MkIsIDB4QUQsCisJCQkweENBLCAweEZFLCAweEJBLCAweEJFLCAweEIxLCAweDA1LAorCQkJMHhGMCwgMHgwRH07CisJdTggcnhidWZbMTRdOworCXU4ICpiaWd0eGJ1Zl92aXJ0dWFsOworCXU4ICpiaWdyeGJ1Zl92aXJ0dWFsOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcF9kdW1teS0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwliaWd0eGJ1Zl92aXJ0dWFsID0ga21hbGxvYyhETUFfVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoYmlndHhidWZfdmlydHVhbCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwliaWdyeGJ1Zl92aXJ0dWFsID0ga21hbGxvYyhETUFfVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKworCS8qIEZpbGwgVFhCVUYgd2l0aCBzb21lIGhhcHB5IHBhdHRlcm4gKi8KKwltZW1zZXQoYmlndHhidWZfdmlydHVhbCwgMHhBQSwgRE1BX1RFU1RfU0laRSk7CisKKwkvKgorCSAqIEZvcmNlIGNoaXAgdG8gOCBiaXQgbW9kZQorCSAqIFdBUk5JTkc6IE5FVkVSIERPIFRISVMgSU4gUkVBTCBEUklWRVIgQ09ERSwgVEhJUyBTSE9VTEQgQkUgU1RBVElDIQorCSAqLworCWNoaXBfaW5mby0+ZGF0YV9zaXplID0gU1NQX0RBVEFfQklUU184OworCS8qIFlvdSBzaG91bGQgTk9UIERPIFRISVMgRUlUSEVSICovCisJc3BpLT5tYXN0ZXItPnNldHVwKHNwaSk7CisKKwkvKiBOb3cgcnVuIHRoZSB0ZXN0cyBmb3IgOGJpdCBtb2RlICovCisJcHJfaW5mbygiU2ltcGxlIHRlc3QgMTogd3JpdGUgMHhBQSBieXRlLCByZWFkIGJhY2sgZ2FyYmFnZSBieXRlICIKKwkJImluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3c4cjgoc3BpLCAweEFBKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2lwbGUgdGVzdCAxOiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAyOiB3cml0ZSA4IGJ5dGVzLCByZWFkIGJhY2sgOCBieXRlcyBnYXJiYWdlICIKKwkJImluIDhiaXQgbW9kZSAoZnVsbCBGSUZPKVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgOCwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMjogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAyOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAzOiB3cml0ZSAxNCBieXRlcywgcmVhZCBiYWNrIDE0IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gOGJpdCBtb2RlIChzZWUgaWYgd2Ugb3ZlcmZsb3cgRklGTylcbiIpOworCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCAmdHhidWZbMF0sIDE0LCAmcnhidWZbMF0sIDE0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMzogRkFJTFVSRTogZmFpbGVkIHdpdGggc3RhdHVzICVkICIKKwkJCSAgICIocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDM6IFNVQ0NFU1MhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQ6IHdyaXRlIDggYnl0ZXMgd2l0aCBzcGlfd3JpdGUoKSwgcmVhZCA4ICIKKwkJImJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJnR4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNCBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQgc3RlcCAyOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA1OiB3cml0ZSAxNCBieXRlcyB3aXRoIHNwaV93cml0ZSgpLCByZWFkICIKKwkJIjE0IGJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJnR4YnVmWzBdLCAxNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBTVUNDRVNTIVxuIik7CisJc3RhdHVzID0gc3BpX3JlYWQoc3BpLCAmcnhidWZbMF0sIDE0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNSBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA1OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2OiB3cml0ZSAlZCBieXRlcyB3aXRoIHNwaV93cml0ZSgpLCAiCisJCSJyZWFkICVkIGJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIiwKKwkJRE1BX1RFU1RfU0laRSwgRE1BX1RFU1RfU0laRSk7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJmJpZ3R4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJmJpZ3J4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDY6IFNVQ0NFU1MhXG4iKTsKKworCisJLyoKKwkgKiBGb3JjZSBjaGlwIHRvIDE2IGJpdCBtb2RlCisJICogV0FSTklORzogTkVWRVIgRE8gVEhJUyBJTiBSRUFMIERSSVZFUiBDT0RFLCBUSElTIFNIT1VMRCBCRSBTVEFUSUMhCisJICovCisJY2hpcF9pbmZvLT5kYXRhX3NpemUgPSBTU1BfREFUQV9CSVRTXzE2OworCS8qIFlvdSBzaG91bGQgTk9UIERPIFRISVMgRUlUSEVSICovCisJc3BpLT5tYXN0ZXItPnNldHVwKHNwaSk7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA3OiB3cml0ZSAweEFBIGJ5dGUsIHJlYWQgYmFjayBnYXJiYWdlIGJ5dGUgIgorCQkiaW4gMTZiaXQgYnVzIG1vZGVcbiIpOworCXN0YXR1cyA9IHNwaV93OHI4KHNwaSwgMHhBQSk7CisJaWYgKHN0YXR1cyA9PSAtRUlPKQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA3OiBTVUNDRVNTISAoZXhwZWN0ZWQgZmFpbHVyZSB3aXRoICIKKwkJCSJzdGF0dXMgRUlPKVxuIik7CisJZWxzZSBpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2lwbGUgdGVzdCA3OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl93YXJuaW5nKCJTaXBsZSB0ZXN0IDc6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgIgorCQkJICAgInN1Y2NlZWRlZCBidXQgaXQgd2FzIGV4cGVjdGVkIHRvIGZhaWwhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDg6IHdyaXRlIDggYnl0ZXMsIHJlYWQgYmFjayA4IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gMTZiaXQgbW9kZSAoZnVsbCBGSUZPKVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgOCwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgODogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA4OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA5OiB3cml0ZSAxNCBieXRlcywgcmVhZCBiYWNrIDE0IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gMTZiaXQgbW9kZSAoc2VlIGlmIHdlIG92ZXJmbG93IEZJRk8pXG4iKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCAxNCwgJnJ4YnVmWzBdLCAxNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDk6IEZBSUxVUkU6IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAiCisJCQkgICAiKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA5OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMDogd3JpdGUgJWQgYnl0ZXMgd2l0aCBzcGlfd3JpdGUoKSwgIgorCSAgICAgICAicmVhZCAlZCBieXRlcyBnYXJiYWdlIHdpdGggc3BpX3JlYWQoKSBpbiAxNmJpdCBtb2RlXG4iLAorCSAgICAgICBETUFfVEVTVF9TSVpFLCBETUFfVEVTVF9TSVpFKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGUoc3BpLCAmYmlndHhidWZfdmlydHVhbFswXSwgRE1BX1RFU1RfU0laRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDEwIHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDE6IFNVQ0NFU1MhXG4iKTsKKworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJmJpZ3J4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMDogU1VDQ0VTUyFcbiIpOworCisJc3RhdHVzID0gc3ByaW50ZihidWYsICJsb29wIHRlc3QgY29tcGxldGVcbiIpOworCWtmcmVlKGJpZ3J4YnVmX3ZpcnR1YWwpOworCWtmcmVlKGJpZ3R4YnVmX3ZpcnR1YWwpOworIG91dDoKKwltdXRleF91bmxvY2soJnBfZHVtbXktPmxvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihsb29wdGVzdCwgU19JUlVHTywgZHVtbXlfbG9vcHRlc3QsIE5VTEwpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbDAyMl9kdW1teV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBkdW1teSAqcF9kdW1teTsKKwlpbnQgc3RhdHVzOworCisJZGV2X2luZm8oJnNwaS0+ZGV2LCAicHJvYmluZyBkdW1teSBTUEkgZGV2aWNlXG4iKTsKKworCXBfZHVtbXkgPSBremFsbG9jKHNpemVvZiAqcF9kdW1teSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwX2R1bW15KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHBfZHVtbXkpOworCW11dGV4X2luaXQoJnBfZHVtbXktPmxvY2spOworCisJLyogc3lzZnMgaG9vayAqLworCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9sb29wdGVzdCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKCZzcGktPmRldiwgImRldmljZV9jcmVhdGVfZmlsZSBsb29wdGVzdCBmYWlsdXJlLlxuIik7CisJCWdvdG8gb3V0X2Rldl9jcmVhdGVfbG9vcHRlc3RfZmFpbGVkOworCX0KKworCXJldHVybiAwOworCitvdXRfZGV2X2NyZWF0ZV9sb29wdGVzdF9mYWlsZWQ6CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7CisJa2ZyZWUocF9kdW1teSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcGwwMjJfZHVtbXlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGR1bW15ICpwX2R1bW15ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJyZW1vdmluZyBkdW1teSBTUEkgZGV2aWNlXG4iKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfbG9vcHRlc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOworCWtmcmVlKHBfZHVtbXkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBwbDAyMl9kdW1teV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAic3BpLWR1bW15IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJPSBwbDAyMl9kdW1teV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AocGwwMjJfZHVtbXlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsMDIyX2luaXRfZHVtbXkodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmcGwwMjJfZHVtbXlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBsMDIyX2V4aXRfZHVtbXkodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnBsMDIyX2R1bW15X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBsMDIyX2luaXRfZHVtbXkpOworbW9kdWxlX2V4aXQocGwwMjJfZXhpdF9kdW1teSk7CisKK01PRFVMRV9BVVRIT1IoIkxpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBMMDIyIFNTUC9TUEkgRFVNTVkgTGludXggZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYwppbmRleCAzMDhjZGIxLi4wYjM1ODI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMKQEAgLTI1LDExICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi0vKiBOZWVkIGFjY2VzcyB0byBTWVNDT04gcmVnaXN0ZXJzIGZvciBQQURtdXhpbmcgKi8KLSNpbmNsdWRlIDxtYWNoL3N5c2Nvbi5oPgotCi0jaW5jbHVkZSAicGFkbXV4LmgiCi0KIC8qIFJlZmVyZW5jZSB0byBHUElPIGJsb2NrIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrOwogCkBAIC0yODYsNiArMjgxLDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGdwaW9fdW5yZWdpc3Rlcl9jYWxsYmFjayk7CiAKKy8qIE5vbi16ZXJvIG1lYW5zIHZhbGlkICovCitpbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKQoreworCWlmIChudW1iZXIgPj0gMCAmJgorCSAgICBudW1iZXIgPCAoVTMwMF9HUElPX05VTV9QT1JUUyAqIFUzMDBfR1BJT19QSU5TX1BFUl9QT1JUKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9faXNfdmFsaWQpOworCiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQogewogCWlmIChncGlvX3BpbltncGlvXS51c2VycykKQEAgLTYwNiwxNCArNjExLDYgQEAKIAl3cml0ZWwoVTMwMF9HUElPX0NSX0JMT0NLX0NMS1JRX0VOQUJMRSwgdmlydGJhc2UgKyBVMzAwX0dQSU9fQ1IpOwogI2VuZGlmCiAKLQkvKiBTZXQgdXAgc29tZSBwYWRtdXhpbmcgaGVyZSAqLwotI2lmZGVmIENPTkZJR19NTUMKLQlwbXhfc2V0X21pc3Npb25fbW9kZV9tbWMoKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TUElfUEwwMjIKLQlwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkoKTsKLSNlbmRpZgotCiAJZ3Bpb19zZXRfaW5pdGlhbF92YWx1ZXMoKTsKIAogCWZvciAobnVtX2lycXMgPSAwIDsgbnVtX2lycXMgPCBVMzAwX0dQSU9fTlVNX1BPUlRTOyBudW1faXJxcysrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiZTFmOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pMmMuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqCisgKiBSZWdpc3RlciBib2FyZCBpMmMgZGV2aWNlcworICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBidXMwX2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQkudHlwZSA9ICJhYjMxMDAiLAorCQkuYWRkciA9IDB4NDgsCisJCS5pcnEgPSBJUlFfVTMwMF9JUlEwX0VYVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGJ1czFfaTJjX2JvYXJkX2luZm9bXSA9IHsKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisJeworCQkudHlwZSA9ICJmd2NhbSIsCisJCS5hZGRyID0gMHgxMCwKKwl9LAorCXsKKwkJLnR5cGUgPSAiZndjYW0iLAorCQkuYWRkciA9IDB4NWQsCisJfSwKKyNlbHNlCisJeyB9LAorI2VuZGlmCit9OworCit2b2lkIF9faW5pdCB1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpCit7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYnVzMF9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGJ1czBfaTJjX2JvYXJkX2luZm8pKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBidXMxX2kyY19ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUoYnVzMV9pMmNfYm9hcmRfaW5mbykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWMwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9pMmMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogUmVnaXN0ZXIgYm9hcmQgaTJjIGRldmljZXMKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworCisjaWZuZGVmIE1BQ0hfVTMwMF9JMkNfSAorI2RlZmluZSBNQUNIX1UzMDBfSTJDX0gKKworI2lmZGVmIENPTkZJR19JMkNfU1RVMzAwCit2b2lkIF9faW5pdCB1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpOworI2Vsc2UKKy8qIENvbXBpbGUgb3V0IHRoaXMgc3R1ZmYgaWYgbm8gSTJDIGFkYXB0ZXIgaXMgYXZhaWxhYmxlICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHUzMDBfaTJjX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCkKK3sKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggYzgxNzQxMi4uN2IxZmM5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTI1OCw2ICsyNTgsNyBAQAogI2RlZmluZSBQSU5fVE9fUE9SVCh2YWwpICh2YWwgPj4gMykKIAogLyogVGhlc2UgY2FuIGJlIGZvdW5kIGluIGFyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMgKi8KK2V4dGVybiBpbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKTsKIGV4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKIGV4dGVybiB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKIGV4dGVybiBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBiZjEzNGJjLi5hYjAwMGRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTM1LDYgKzM1LDE0IEBACiAjZW5kaWYKIAogLyoKKyAqIFRDTSBtZW1vcnkgd2hlcmVhYm91dHMKKyAqLworI2RlZmluZSBJVENNX09GRlNFVAkweGZmZmYyMDAwCisjZGVmaW5lIElUQ01fRU5ECTB4ZmZmZjNmZmYKKyNkZWZpbmUgRFRDTV9PRkZTRVQJMHhmZmZmNDAwMAorI2RlZmluZSBEVENNX0VORAkweGZmZmY1ZmZmCisKKy8qCiAgKiBXZSBlbmFibGUgYSByZWFsIGJpZyBETUEgYnVmZmVyIGlmIG5lZWQgYmUuCiAgKi8KICNkZWZpbmUgQ09OU0lTVEVOVF9ETUFfU0laRSBTWl80TQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9zeXNjb24uaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvc3lzY29uLmgKaW5kZXggMWM5MGQxYi4uNzQ0NGY1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9zeXNjb24uaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3N5c2Nvbi5oCkBAIC0yNDAsOCArMjQwLDEzIEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfTUFTSwkJCQkoMHhDMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX0NESQkJCQkoMHgwMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX0VNSUYJCQkJKDB4NDAwMCkKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfQ0RJMgkJCQkoMHg4MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX1dDRE1BX0FQUF9HUElPCQkJKDB4QzAwMCkKKyNlbGlmIENPTkZJR19NQUNIX1UzMDBfQlMzNjUKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX0NESV9HUElPCQkJCSgweDgwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfV0NETUEJCQkJKDB4QzAwMCkKKyNlbmRpZgogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfUERJX01BU0sJCQkJKDB4MzAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX1BESV9QREkJCQkJKDB4MDAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX1BESV9FR0cJCQkJKDB4MTAwMCkKQEAgLTM0NSwxOSArMzUwLDY5IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX01NQ1JfTUFTSwkJCQkJKDB4MDAwMykKICNkZWZpbmUgVTMwMF9TWVNDT05fTU1DUl9NTUNfRkJfQ0xLX1NFTF9FTkFCTEUJCQkoMHgwMDAyKQogI2RlZmluZSBVMzAwX1NZU0NPTl9NTUNSX01TUFJPX0ZSRVFTRUxfRU5BQkxFCQkJKDB4MDAwMSkKLQorLyogUHVsbCB1cC9kb3duIGNvbnRyb2wgKFIvVykgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUgkJCQkJKDB4MTA0KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0VNSUZfMV9XQUlUX05fUFVfRU5BQkxFCQkoMHgwMjAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0VNSUZfMV9ORklGX1JFQURZX1BVX0VOQUJMRQkJKDB4MDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUl9FTUlGXzFfMTZCSVRfUFVfRU5BQkxFCQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUl9FTUlGXzFfOEJJVF9QVV9FTkFCTEUJCQkoMHgwMDQwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0tFWV9JTl9QVV9FTl9NQVNLCQkJKDB4MDAzRikKKy8qIFBhZG11eCAyIGNvbnRyb2wgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlIJCQkJCSgweDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9NQVNLCQkJKDB4MDBDMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzBfRU1JRl9TRFJBTQkJCSgweDAwNDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzBfTU1DCQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9DREkyCQkJKDB4MDBDMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9NQVNLCQkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzFfRU1JRl9TRFJBTQkJCSgweDAxMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzFfTU1DCQkJKDB4MDIwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9DREkyCQkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9NQVNLCQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzJfRU1JRl9TRFJBTQkJCSgweDA0MDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzJfTU1DCQkJKDB4MDgwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9DREkyCQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19NQVNLCQkJKDB4MzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzNfRU1JRl9TRFJBTQkJCSgweDEwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzNfTU1DCQkJKDB4MjAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19DREkyCQkJKDB4MzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9NQVNLCQkJKDB4QzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzRfRU1JRl9TRFJBTQkJCSgweDQwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzRfTU1DCQkJKDB4ODAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9BQ0NfR1BJTwkJCSgweEMwMDApCiAvKiBUT0RPOiBNb3JlIFNZU0NPTiByZWdpc3RlcnMgbWlzc2luZyAqLwogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMzUgkJCQkJKDB4MTBjKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMzUl9BUFBfTUlTQ18xMV9NQVNLCQkJKDB4YzAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DM1JfQVBQX01JU0NfMTFfU1BJCQkJKDB4NDAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DM1JfQVBQX01JU0NfMTBfTUFTSwkJCSgweDMwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzNSX0FQUF9NSVNDXzEwX1NQSQkJCSgweDEwMDApCi0vKiBUT0RPOiBNaXNzaW5nIG90aGVyIGNvbmZpZ3MsIEkganVzdCBhZGRlZCB0aGUgU1BJIHN0dWZmICovCi0KKy8qIFRPRE86IE1pc3Npbmcgb3RoZXIgY29uZmlncyAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0UgkJCQkJKDB4MTY4KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xMl9NQVNLCQkJKDB4MDAwMykKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTJfQVBQX0dQSU8JCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xM19NQVNLCQkJKDB4MDAwQykKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfQ0RJCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfU01JQQkJCSgweDAwMDQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzEzX1NNSUEyCQkJKDB4MDAwOCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfQVBQX0dQSU8JCQkoMHgwMDBDKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNF9NQVNLCQkJKDB4MDAzMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTRfQ0RJCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTRfU01JQQkJCSgweDAwMTApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE0X0NESTIJCQkoMHgwMDIwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNF9BUFBfR1BJTwkJCSgweDAwMzApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE2X01BU0sJCQkoMHgwMzAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNl9BUFBfR1BJT18xMwkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTZfQVBQX1VBUlQxX0NUUwkJKDB4MDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTZfRU1JRl8xX1NUQVRJQ19DUzVfTgkoMHgwMjAwKQogLyogU1lTXzBfQ0xLX0NPTlRST0wgZmlyc3QgY2xvY2sgY29udHJvbCAxNmJpdCAoUi9XKSAqLwogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUgkJCQkJKDB4MTIwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9GSUVMRF9NQVNLCQkJCSgweDQzRkYpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX1JFUQkJCQkoMHg0MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19SRVFfTU9OSVRPUgkJCSgweDIwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX0lOVgkJCQkoMHgwMjAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19GUkVRX01BU0sJCQkoMHgwMUUwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19TRUxFQ1RfTUFTSwkJCSgweDAwMUUpCkBAIC0zNzUsNiArNDMwLDcgQEAKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1IJCQkJCSgweDEyNCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfRklFTERfTUFTSwkJCQkoMHg0M0ZGKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19SRVEJCQkJKDB4NDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfUkVRX01PTklUT1IJCQkoMHgyMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19JTlYJCQkJKDB4MDIwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfRlJFUV9NQVNLCQkJKDB4MDFFMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfU0VMRUNUX01BU0sJCQkoMHgwMDFFKQpAQCAtMzkzLDYgKzQ0OSw3IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0ZJRUxEX01BU0sJCQkJKDB4QzNGRikKICNkZWZpbmUgVTMwMF9TWVNDT05fUzJDQ1JfQ0xLX1NURUFMCQkJCSgweDgwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX1JFUQkJCQkoMHg0MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19SRVFfTU9OSVRPUgkJCSgweDIwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX0lOVgkJCQkoMHgwMjAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19GUkVRX01BU0sJCQkoMHgwMUUwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19TRUxFQ1RfTUFTSwkJCSgweDAwMUUpCkBAIC00MjUsNiArNDgyLDQ0IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX01DUl9QTUdFTl9DUl8wX0VNSUZfMF9TRFJBTQkJCSgweDAwMEMpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX01DUl9QTTFHX01PREVfRU5BQkxFCQkJKDB4MDAwMikKICNkZWZpbmUgVTMwMF9TWVNDT05fTUNSX1BNVEc1X01PREVfRU5BQkxFCQkJKDB4MDAwMSkKKy8qIFNDX1BMTF9JUlFfQ09OVFJPTCAxNmJpdCAoUi9XKSAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSCQkJCQkoMHgwMTMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX01BU0sJCQkJCSgweDAwRkYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfRk9SQ0VfUExMMjA4X0xPQ0tfTE9XX0VOQUJMRQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9GT1JDRV9QTEwyMDhfTE9DS19ISUdIX0VOQUJMRQkJKDB4MDA0MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9GT1JDRV9QTEwxM19MT0NLX0xPV19FTkFCTEUJCSgweDAwMjApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfRk9SQ0VfUExMMTNfTE9DS19ISUdIX0VOQUJMRQkJKDB4MDAxMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9JUlFNQVNLX1BMTDEzX1VOTE9DS19FTkFCTEUJCSgweDAwMDgpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfSVJRTUFTS19QTEwxM19MT0NLX0VOQUJMRQkJKDB4MDAwNCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9JUlFNQVNLX1BMTDIwOF9VTkxPQ0tfRU5BQkxFCQkoMHgwMDAyKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX0lSUU1BU0tfUExMMjA4X0xPQ0tfRU5BQkxFCQkoMHgwMDAxKQorLyogU0NfUExMX0lSUV9TVEFUVVMgMTYgYml0IChSLy0pICovCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJU1IJCQkJCSgweDAxMzQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJU1JfTUFTSwkJCQkJKDB4MDAwRikKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwxM19VTkxPQ0tfSU5ECQkJKDB4MDAwOCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwxM19MT0NLX0lORAkJCQkoMHgwMDA0KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSVNSX1BMTDIwOF9VTkxPQ0tfSU5ECQkJKDB4MDAwMikKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwyMDhfTE9DS19JTkQJCQkoMHgwMDAxKQorLyogU0NfUExMX0lSUV9DTEVBUiAxNiBiaXQgKC0vVykgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDTFIJCQkJCSgweDAxMzgpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX01BU0sJCQkJCSgweDAwMEYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1JXTUFTSwkJCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwxM19VTkxPQ0tfU0MJCQkoMHgwMDA4KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwxM19MT0NLX1NDCQkJCSgweDAwMDQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1BMTDIwOF9VTkxPQ0tfU0MJCQkoMHgwMDAyKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwyMDhfTE9DS19TQwkJCSgweDAwMDEpCisvKiBDQU1JRl9DT05UUk9MIDE2IGJpdCAoLS9XKSAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSCQkJCQkoMHgwMTNDKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX01BU0sJCQkJCSgweDBGRkYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfQVBQX1NVQkxWRFNfVEVTVE1PREVfTUFTSwkJKDB4MEYwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19URVNUTU9ERV9QT1JUMQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19URVNUTU9ERV9QT1JUMAkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19SRVNDT05fTUFTSwkJKDB4MDBGMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19SRVNDT05fUE9SVDEJCSgweDAwQzApCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfQVBQX1NVQkxWRFNfUkVTQ09OX1BPUlQwCQkoMHgwMDMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1BXUl9EV05fTl9NQVNLCQkoMHgwMDBGKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1BXUl9EV05fTl9QT1JUMQkJKDB4MDAwQykKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19QV1JfRFdOX05fUE9SVDAJCSgweDAwMDMpCiAvKiBDbG9jayBhY3Rpdml0eSBvYnNlcnZhYmlsaXR5IHJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgVTMwMF9TWVNDT05fQzBPQVIJCQkJCSgweDE0MCkKICNkZWZpbmUgVTMwMF9TWVNDT05fQzBPQVJfTUFTSwkJCQkJKDB4RkZGRikKQEAgLTUxMyw3ICs2MDgsNyBAQAogLyoqCiAgKiBDUFUgbWVkaXVtIGZyZXF1ZW5jeSBpbiBNSHoKICAqLwotI2RlZmluZSBTWVNDT05fQ1BVX0NMT0NLX01FRElVTSAgMTA0CisjZGVmaW5lIFNZU0NPTl9DUFVfQ0xPQ0tfTUVESVVNICAgNTIKIC8qKgogICogQ1BVIGxvdyBmcmVxdWVuY3kgaW4gTUh6CiAgKi8KQEAgLTUyNyw3ICs2MjIsNyBAQAogLyoqCiAgKiBFTUlGIG1lZGl1bSBmcmVxdWVuY3kgaW4gTUh6CiAgKi8KLSNkZWZpbmUgU1lTQ09OX0VNSUZfQ0xPQ0tfTUVESVVNIDEwNAorI2RlZmluZSBTWVNDT05fRU1JRl9DTE9DS19NRURJVU0gIDUyCiAvKioKICAqIEVNSUYgbG93IGZyZXF1ZW5jeSBpbiBNSHoKICAqLwpAQCAtNTQxLDcgKzYzNiw3IEBACiAvKioKICAqIEFIQiBtZWRpdW0gZnJlcXVlbmN5IGluIE1IegogICovCi0jZGVmaW5lIFNZU0NPTl9BSEJfQ0xPQ0tfTUVESVVNICAgNTIKKyNkZWZpbmUgU1lTQ09OX0FIQl9DTE9DS19NRURJVU0gICAyNgogLyoqCiAgKiBBSEIgbG93IGZyZXF1ZW5jeSBpbiBNSHoKICAqLwpAQCAtNTUzLDYgKzY0OCwxNSBAQAogICBTWVNDT05fQk1fVklERU9fRU5DCiB9OwogCisvKiBTZWxlY3RyIGEgcmVzaXN0b3Igb3IgYSBzZXQgb2YgcmVzaXN0b3JzICovCitlbnVtIHN5c2Nvbl9wdWxsX3VwX2Rvd24geworICBTWVNDT05fUFVfS0VZX0lOX0VOLAorICBTWVNDT05fUFVfRU1JRl8xXzhfQklUX0VOLAorICBTWVNDT05fUFVfRU1JRl8xXzE2X0JJVF9FTiwKKyAgU1lTQ09OX1BVX0VNSUZfMV9ORklGX1JFQURZX0VOLAorICBTWVNDT05fUFVfRU1JRl8xX05GSUZfV0FJVF9OX0VOLAorfTsKKwogLyoKICAqIE5vdGUgdGhhdCB0aGlzIGFycmF5IG11c3QgbWF0Y2ggdGhlIG9yZGVyIG9mIHRoZSBhcnJheSAiY2xrX3JlZyIKICAqIGluIHN5c2Nvbi5jCkBAIC01NzUsNiArNjc5LDcgQEAKICAgU1lTQ09OX0NMS0NPTlRST0xfU1BJLAogICBTWVNDT05fQ0xLQ09OVFJPTF9JMlMwX0NPUkUsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0kyUzFfQ09SRSwKKyAgU1lTQ09OX0NMS0NPTlRST0xfVUFSVDEsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0FBSUYsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0FIQiwKICAgU1lTQ09OX0NMS0NPTlRST0xfQVBFWCwKQEAgLTYwNCw3ICs3MDksOCBAQAogCiBlbnVtIHN5c2Nvbl9zeXNjbGtfcmVxIHsKICAgU1lTQ09OX1NZU0NMS1JFUV9ESVNBQkxFRCwKLSAgU1lTQ09OX1NZU0NMS1JFUV9BQ1RJVkVfTE9XCisgIFNZU0NPTl9TWVNDTEtSRVFfQUNUSVZFX0xPVywKKyAgU1lTQ09OX1NZU0NMS1JFUV9NT05JVE9SCiB9OwogCiBlbnVtIHN5c2Nvbl9jbGtfbW9kZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMKaW5kZXggNTg1Y2MwMS4uN2I2YjAxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYwpAQCAtMTksMTUgKzE5LDE2IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlICJtbWMuaCIKKyNpbmNsdWRlICJwYWRtdXguaCIKIAogc3RydWN0IG1tY2lfY2FyZF9ldmVudCB7CiAJc3RydWN0IGlucHV0X2RldiAqbW1jX2lucHV0OwogCWludCBtbWNfaW5zZXJ0ZWQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtxOwotCXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YTsKKwlzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIG1tYzBfcGxhdF9kYXRhOwogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBtbWNfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTE0Niw2ICsxNDcsNyBAQAogewogCXN0cnVjdCBtbWNpX2NhcmRfZXZlbnQgKm1tY2lfY2FyZDsKIAlzdHJ1Y3QgZGV2aWNlICptbWNzZF9kZXZpY2UgPSAmYWRldi0+ZGV2OworCXN0cnVjdCBwbXggKnBteDsKIAlpbnQgcmV0ID0gMDsKIAogCW1tY2lfY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbWNpX2NhcmRfZXZlbnQpLCBHRlBfS0VSTkVMKTsKQEAgLTE1OCw2ICsxNjAsOCBAQAogCW1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGEuc3RhdHVzID0gbW1jX3N0YXR1czsKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmdwaW9fd3AgPSAtMTsKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmdwaW9fY2QgPSAtMTsKKwltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmNhcGFiaWxpdGllcyA9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8CisJCU1NQ19DQVBfU0RfSElHSFNQRUVEIHwgTU1DX0NBUF80X0JJVF9EQVRBOwogCiAJbW1jc2RfZGV2aWNlLT5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikgJm1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGE7CiAKQEAgLTIwNyw2ICsyMTEsMjAgQEAKIAogCWlucHV0X3NldF9kcnZkYXRhKG1tY2lfY2FyZC0+bW1jX2lucHV0LCBtbWNpX2NhcmQpOwogCisJLyoKKwkgKiBTZXR1cCBwYWRtdXhpbmcgZm9yIE1NQy4gU2luY2UgdGhpcyBtdXN0IGFsd2F5cyBiZQorCSAqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgcG14IGlzIG5ldmVyIHJlbGVhc2VkLgorCSAqLworCXBteCA9IHBteF9nZXQobW1jc2RfZGV2aWNlLCBVMzAwX0FQUF9QTVhfTU1DX1NFVFRJTkcpOworCisJaWYgKElTX0VSUihwbXgpKQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgZ2V0IHBhZG11eCBoYW5kbGVcbiIpOworCWVsc2UgeworCQlyZXQgPSBwbXhfYWN0aXZhdGUobW1jc2RfZGV2aWNlLCBwbXgpOworCQlpZiAoSVNfRVJSX1ZBTFVFKHJldCkpCisJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgYWN0aXZhdGUgcGFkbXV4aW5nXG4iKTsKKwl9CisKIAlyZXQgPSBncGlvX3JlZ2lzdGVyX2NhbGxiYWNrKFUzMDBfR1BJT19QSU5fTU1DX0NELCBtbWNpX2NhbGxiYWNrLAogCQkJCSAgICAgbW1jaV9jYXJkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5jCmluZGV4IGYzNjY0NTYuLjRjOTNjNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9wYWRtdXguYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmMKQEAgLTYsNTMgKzYsMzYyIEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24gQUIKICAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgogICogVTMwMCBQQURNVVggZnVuY3Rpb25zCi0gKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+Ci0gKgorICogQXV0aG9yOiBNYXJ0aW4gUGVyc3NvbiA8bWFydGluLnBlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bWFjaC91MzAwLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3N5c2Nvbi5oPgotCiAjaW5jbHVkZSAicGFkbXV4LmgiCiAKLS8qIFNldCB0aGUgUEFEIE1VWCB0byByb3V0ZSB0aGUgTU1DIHJlYWRlciBjb3JyZWN0bHkgdG8gR1BJTzAuICovCi12b2lkIHBteF9zZXRfbWlzc2lvbl9tb2RlX21tYyh2b2lkKQotewotCXUxNiB2YWw7CitzdGF0aWMgREVGSU5FX01VVEVYKHBteF9tdXRleCk7CiAKLQl2YWwgPSByZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFMUik7Ci0JdmFsICY9IH5VMzAwX1NZU0NPTl9QTUMxTFJfTU1DU0RfTUFTSzsKLQl3cml0ZXcodmFsLCBVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFMUik7Ci0JdmFsID0gcmVhZHcoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpOwotCXZhbCAmPSB+VTMwMF9TWVNDT05fUE1DMUhSX0FQUF9HUElPXzFfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9HUElPXzFfTU1DOwotCXdyaXRldyh2YWwsIFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUhSKTsKK2NvbnN0IHUzMiBwbXhfcmVnaXN0ZXJzW10gPSB7CisJKFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUxSKSwKKwkoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpLAorCShVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzJSKSwKKwkoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMzUiksCisJKFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DNFIpCit9OworCisvKiBIaWdoIGxldmVsIGZ1bmN0aW9uYWxpdHkgKi8KKworLyogTGF6eSBkb2c6CisgKiBvbm1hc2sgPSB7CisgKiAgIHsiUE1DMUxSIiBtYXNrLCAiUE1DMUxSIiB2YWx1ZX0sCisgKiAgIHsiUE1DMUhSIiBtYXNrLCAiUE1DMUhSIiB2YWx1ZX0sCisgKiAgIHsiUE1DMlIiICBtYXNrLCAiUE1DMlIiICB2YWx1ZX0sCisgKiAgIHsiUE1DM1IiICBtYXNrLCAiUE1DM1IiICB2YWx1ZX0sCisgKiAgIHsiUE1DNFIiICBtYXNrLCAiUE1DNFIiICB2YWx1ZX0KKyAqIH0KKyAqLworc3RhdGljIHN0cnVjdCBwbXggbW1jX3NldHRpbmcgPSB7CisJLnNldHRpbmcgPSBVMzAwX0FQUF9QTVhfTU1DX1NFVFRJTkcsCisJLmRlZmF1bHRfb24gPSBmYWxzZSwKKwkuYWN0aXZhdGVkID0gZmFsc2UsCisJLm5hbWUgPSAiTU1DIiwKKwkub25tYXNrID0geworCQkgICB7VTMwMF9TWVNDT05fUE1DMUxSX01NQ1NEX01BU0ssCisJCSAgICBVMzAwX1NZU0NPTl9QTUMxTFJfTU1DU0RfTU1DU0R9LAorCQkgICB7MCwgMH0sCisJCSAgIHswLCAwfSwKKwkJICAgezAsIDB9LAorCQkgICB7VTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTJfTUFTSywKKwkJICAgIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzEyX0FQUF9HUElPfQorCQkgICB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbXggc3BpX3NldHRpbmcgPSB7CisJLnNldHRpbmcgPSBVMzAwX0FQUF9QTVhfU1BJX1NFVFRJTkcsCisJLmRlZmF1bHRfb24gPSBmYWxzZSwKKwkuYWN0aXZhdGVkID0gZmFsc2UsCisJLm5hbWUgPSAiU1BJIiwKKwkub25tYXNrID0ge3swLCAwfSwKKwkJICAge1UzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJXzJfTUFTSyB8CisJCSAgICBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV9DU18xX01BU0sgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9NQVNLLAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfMl9TUEkgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMV9TUEkgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9TUEl9LAorCQkgICB7MCwgMH0sCisJCSAgIHswLCAwfSwKKwkJICAgezAsIDB9CisJCSAgIH0sCit9OworCisvKiBBdmFpbGFibGUgcGFkbXV4IHNldHRpbmdzICovCitzdGF0aWMgc3RydWN0IHBteCAqcG14X3NldHRpbmdzW10gPSB7CisJJm1tY19zZXR0aW5nLAorCSZzcGlfc2V0dGluZywKK307CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWdpc3RlcnMoc3RydWN0IHBteCAqcG14LCBib29sIGFjdGl2YXRlKQoreworCXUxNiByZWd2YWwsIHZhbCwgbWFzazsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9yZWdpc3RlcnMpOyBpKyspIHsKKwkJaWYgKGFjdGl2YXRlKQorCQkJdmFsID0gcG14LT5vbm1hc2tbaV0udmFsOworCQllbHNlCisJCQl2YWwgPSAwOworCisJCW1hc2sgPSBwbXgtPm9ubWFza1tpXS5tYXNrOworCQlpZiAobWFzayAhPSAwKSB7CisJCQlyZWd2YWwgPSByZWFkdyhwbXhfcmVnaXN0ZXJzW2ldKTsKKwkJCXJlZ3ZhbCAmPSB+bWFzazsKKwkJCXJlZ3ZhbCB8PSB2YWw7CisJCQl3cml0ZXcocmVndmFsLCBwbXhfcmVnaXN0ZXJzW2ldKTsKKwkJfQorCX0KIH0KIAotdm9pZCBwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkodm9pZCkKK3N0cnVjdCBwbXggKnBteF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIHBteF9zZXR0aW5ncyBzZXR0aW5nKQogewotCXUxNiB2YWw7CisJaW50IGk7CisJc3RydWN0IHBteCAqcG14ID0gRVJSX1BUUigtRU5PRU5UKTsKIAotCS8qIFNldCB1cCBwYWRtdXhpbmcgc28gdGhlIFNQSSBwb3J0IGFuZCBpdHMgY2hpcHNlbGVjdHMgYXJlIGFjdGl2ZSAqLwotCXZhbCA9IHJlYWR3KFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUhSKTsKLQkvKgotCSAqIEFjdGl2YXRlIHRoZSBTUEkgcG9ydCAoZGlzYWJsZSB0aGUgdXNlIG9mIHRoZXNlIHBpbnMgZm9yIGdlbmVyaWMKLQkgKiBHUElPLCBEU1AsIEFBSUYKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJXzJfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfMl9TUEk7Ci0JLyoKLQkgKiBVc2UgR1BJTyBwaW4gU1BJIENTMSBmb3IgQ1MxIGFjdHVhbGx5IChpdCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIKLQkgKiB0aGluZ3MgYWxzbykKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJX0NTXzFfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMV9TUEk7Ci0JLyoKLQkgKiBVc2UgR1BJTyBwaW4gU1BJIENTMiBmb3IgQ1MyIGFjdHVhbGx5IChpdCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIKLQkgKiB0aGluZ3MgYWxzbykKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJX0NTXzJfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9TUEk7Ci0Jd3JpdGV3KHZhbCwgVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwltdXRleF9sb2NrKCZwbXhfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmIChzZXR0aW5nID09IHBteF9zZXR0aW5nc1tpXS0+c2V0dGluZykgeworCisJCQlpZiAocG14X3NldHRpbmdzW2ldLT5kZXYgIT0gTlVMTCkgeworCQkJCVdBUk4oMSwgInBhZG11eDogcmVxdWlyZWQgc2V0dGluZyAiCisJCQkJICAgICAiaW4gdXNlIGJ5IGFub3RoZXIgY29uc3VtZXJcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwbXggPSBwbXhfc2V0dGluZ3NbaV07CisJCQkJcG14LT5kZXYgPSBkZXY7CisJCQkJZGV2X2RiZyhkZXYsICJwYWRtdXg6IHNldHRpbmcgbnIgJWQgaXMgbm93ICIKKwkJCQkJImJvdW5kIHRvICVzIGFuZCByZWFkeSB0byB1c2VcbiIsCisJCQkJCXNldHRpbmcsIGRldl9uYW1lKGRldikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmcG14X211dGV4KTsKKworCXJldHVybiBwbXg7CiB9CitFWFBPUlRfU1lNQk9MKHBteF9nZXQpOworCitpbnQgcG14X3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbXggKnBteCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCWlmIChwbXggPT0gTlVMTCB8fCBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwbXhfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmIChwbXgtPnNldHRpbmcgPT0gcG14X3NldHRpbmdzW2ldLT5zZXR0aW5nKSB7CisKKwkJCWlmIChkZXYgIT0gcG14LT5kZXYpIHsKKwkJCQlXQVJOKDEsICJwYWRtdXg6IGNhbm5vdCByZWxlYXNlIGhhbmRsZSBhcyAiCisJCQkJCSJpdCBpcyBib3VuZCB0byBhbm90aGVyIGNvbnN1bWVyXG4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlwbXhfc2V0dGluZ3NbaV0tPmRldiA9IE5VTEw7CisJCQkJcmV0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJnBteF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwbXhfcHV0KTsKKworaW50IHBteF9hY3RpdmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbXggKnBteCkKK3sKKwlpbnQgaSwgaiwgcmV0OworCXJldCA9IDA7CisKKwlpZiAocG14ID09IE5VTEwgfHwgZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcG14X211dGV4KTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgcmVxdWlyZWQgYml0cyBhcmUgbm90IHVzZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXhfc2V0dGluZ3MpOyBpKyspIHsKKworCQlpZiAocG14X3NldHRpbmdzW2ldLT5kZXYgPT0gTlVMTCB8fCBwbXhfc2V0dGluZ3NbaV0gPT0gcG14KQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocG14X3JlZ2lzdGVycyk7IGorKykgeworCisJCQlpZiAocG14X3NldHRpbmdzW2ldLT5vbm1hc2tbal0ubWFzayAmIHBteC0+CisJCQkJb25tYXNrW2pdLm1hc2spIHsKKwkJCQkvKiBNb3JlIHRoYW4gb25lIGVudHJ5IG9uIHRoZSBzYW1lIGJpdHMgKi8KKwkJCQlXQVJOKDEsICJwYWRtdXg6IGNhbm5vdCBhY3RpdmF0ZSAiCisJCQkJCSJzZXR0aW5nLiBCaXQgY29uZmxpY3Qgd2l0aCAiCisJCQkJCSJhbiBhY3RpdmUgc2V0dGluZ1xuIik7CisKKwkJCQlyZXQgPSAtRVVTRVJTOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCX0KKwl1cGRhdGVfcmVnaXN0ZXJzKHBteCwgdHJ1ZSk7CisJcG14LT5hY3RpdmF0ZWQgPSB0cnVlOworCWRldl9kYmcoZGV2LCAicGFkbXV4OiBzZXR0aW5nIG5yICVkIGlzIGFjdGl2YXRlZFxuIiwKKwkJcG14LT5zZXR0aW5nKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnBteF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG14X2FjdGl2YXRlKTsKKworaW50IHBteF9kZWFjdGl2YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KQoreworCWludCBpOworCWludCByZXQgPSAtRU5PRU5UOworCisJaWYgKHBteCA9PSBOVUxMIHx8IGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBteF9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG14X3NldHRpbmdzKTsgaSsrKSB7CisKKwkJaWYgKHBteF9zZXR0aW5nc1tpXS0+ZGV2ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAocG14LT5zZXR0aW5nID09IHBteF9zZXR0aW5nc1tpXS0+c2V0dGluZykgeworCisJCQlpZiAoZGV2ICE9IHBteC0+ZGV2KSB7CisJCQkJV0FSTigxLCAicGFkbXV4OiBjYW5ub3QgZGVhY3RpdmF0ZSAiCisJCQkJICAgICAicG14IHNldHRpbmcgYXMgaXQgd2FzIGFjdGl2YXRlZCAiCisJCQkJICAgICAiYnkgYW5vdGhlciBjb25zdW1lclxuIik7CisKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCXVwZGF0ZV9yZWdpc3RlcnMocG14LCBmYWxzZSk7CisJCQkJcG14X3NldHRpbmdzW2ldLT5kZXYgPSBOVUxMOworCQkJCXBteC0+YWN0aXZhdGVkID0gZmFsc2U7CisJCQkJcmV0ID0gMDsKKwkJCQlkZXZfZGJnKGRldiwgInBhZG11eDogc2V0dGluZyBuciAlZCBpcyBkZWFjdGl2YXRlZCIsCisJCQkJCXBteC0+c2V0dGluZyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwbXhfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG14X2RlYWN0aXZhdGUpOworCisvKgorICogRm9yIGludGVybmFsIHVzZSBvbmx5LiBJZiBpdCBpcyB0byBiZSBleHBvcnRlZCwKKyAqIGl0IHNob3VsZCBiZSByZWVudHJhbnQuIE5vdGljZSB0aGF0IHBteF9hY3RpdmF0ZQorICogKGkuZS4gcnVudGltZSBzZXR0aW5ncykgYWx3YXlzIG92ZXJyaWRlIGRlZmF1bHQgc2V0dGluZ3MuCisgKi8KK3N0YXRpYyBpbnQgcG14X3NldF9kZWZhdWx0KHZvaWQpCit7CisJLyogVXNlZCB0byBpZGVudGlmeSBzZXZlcmFsIGVudHJpZXMgb24gdGhlIHNhbWUgYml0cyAqLworCXUxNiBtb2RiaXRzW0FSUkFZX1NJWkUocG14X3JlZ2lzdGVycyldOworCisJaW50IGksIGo7CisKKwltZW1zZXQobW9kYml0cywgMCwgQVJSQVlfU0laRShwbXhfcmVnaXN0ZXJzKSAqIHNpemVvZih1MTYpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmICghcG14X3NldHRpbmdzW2ldLT5kZWZhdWx0X29uKQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocG14X3JlZ2lzdGVycyk7IGorKykgeworCisJCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgb25seSBvbmUgZW50cnkgb24gdGhlIHNhbWUgYml0cyAqLworCQkJaWYgKG1vZGJpdHNbal0gJiBwbXhfc2V0dGluZ3NbaV0tPm9ubWFza1tqXS5tYXNrKSB7CisJCQkJQlVHKCk7CisJCQkJcmV0dXJuIC1FVVNFUlM7CisJCQl9CisJCQltb2RiaXRzW2pdIHw9IHBteF9zZXR0aW5nc1tpXS0+b25tYXNrW2pdLm1hc2s7CisJCX0KKwkJdXBkYXRlX3JlZ2lzdGVycyhwbXhfc2V0dGluZ3NbaV0sIHRydWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmIChkZWZpbmVkKENPTkZJR19ERUJVR19GUykgJiYgZGVmaW5lZChDT05GSUdfVTMwMF9ERUJVRykpCitzdGF0aWMgaW50IHBteF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlzZXFfcHJpbnRmKHMsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlzZXFfcHJpbnRmKHMsICJTRVRUSU5HICAgICBCT1VORCBUTyBERVZJQ0UgICAgICAgICAgICAgICBTVEFURVxuIik7CisJc2VxX3ByaW50ZihzLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJbXV0ZXhfbG9jaygmcG14X211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXhfc2V0dGluZ3MpOyBpKyspIHsKKwkJLyogRm9ybWF0IHBteCBhbmQgZGV2aWNlIG5hbWUgbmljZWx5ICovCisJCWNoYXIgY2RwWzMzXTsKKwkJaW50IGNoYXJzOworCisJCWNoYXJzID0gc25wcmludGYoJmNkcFswXSwgMTcsICIlcyIsIHBteF9zZXR0aW5nc1tpXS0+bmFtZSk7CisJCXdoaWxlIChjaGFycyA8IDE2KSB7CisJCQljZHBbY2hhcnNdID0gJyAnOworCQkJY2hhcnMrKzsKKwkJfQorCQljaGFycyA9IHNucHJpbnRmKCZjZHBbMTZdLCAxNywgIiVzIiwgcG14X3NldHRpbmdzW2ldLT5kZXYgPworCQkJCWRldl9uYW1lKHBteF9zZXR0aW5nc1tpXS0+ZGV2KSA6ICJOL0EiKTsKKwkJd2hpbGUgKGNoYXJzIDwgMTYpIHsKKwkJCWNkcFtjaGFycysxNl0gPSAnICc7CisJCQljaGFycysrOworCQl9CisJCWNkcFszMl0gPSAnXDAnOworCisJCXNlcV9wcmludGYocywKKwkJCSIlc1x0JXNcbiIsCisJCQkmY2RwWzBdLAorCQkJcG14X3NldHRpbmdzW2ldLT5hY3RpdmF0ZWQgPworCQkJIkFDVElWQVRFRCIgOiAiREVBQ1RJVkFURUQiCisJCQkpOworCisJfQorCW11dGV4X3VubG9jaygmcG14X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbXhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcG14X3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbXhfb3BlcmF0aW9ucyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcG14X29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcG14X3JlYWRfZGVidWdmcyh2b2lkKQoreworCS8qIEV4cG9zZSBhIHNpbXBsZSBkZWJ1Z2ZzIGludGVyZmFjZSB0byB2aWV3IHBteCBzZXR0aW5ncyAqLworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwYWRtdXgiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgICBOVUxMLCBOVUxMLAorCQkJCSAgICZwbXhfb3BlcmF0aW9ucyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIG5lZWRzIHRvIGNvbWUgaW4gYWZ0ZXIgdGhlIGNvcmVfaW5pdGNhbGwoKSwKKyAqIGJlY2F1c2UgZGVidWdmcyBpcyBub3QgYXZhaWxhYmxlIHVudGlsCisgKiB0aGUgc3Vic3lzdGVtcyBjb21lIHVwLgorICovCittb2R1bGVfaW5pdChpbml0X3BteF9yZWFkX2RlYnVnZnMpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHBteF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBteF9zZXRfZGVmYXVsdCgpOworCisJaWYgKElTX0VSUl9WQUxVRShyZXQpKQorCQlwcl9jcml0KCJwYWRtdXg6IGRlZmF1bHQgc2V0dGluZ3MgY291bGQgbm90IGJlIHNldFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdW1lcnMgKi8KK2NvcmVfaW5pdGNhbGwocG14X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5oCmluZGV4IDhjMjA5OWEuLjZlOGI4NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9wYWRtdXguaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmgKQEAgLTYsMTQgKzYsMzQgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgogICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCiAgKiBVMzAwIFBBRE1VWCBBUEkKLSAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KLSAqCisgKiBBdXRob3I6IE1hcnRpbiBQZXJzc29uIDxtYXJ0aW4ucGVyc3NvbkBzdGVyaWNzc29uLmNvbT4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9VMzAwX1BBRE1VWF9ICiAjZGVmaW5lIF9fTUFDSF9VMzAwX1BBRE1VWF9ICiAKLXZvaWQgcG14X3NldF9taXNzaW9uX21vZGVfbW1jKHZvaWQpOwotdm9pZCBwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkodm9pZCk7CitlbnVtIHBteF9zZXR0aW5ncyB7CisJVTMwMF9BUFBfUE1YX01NQ19TRVRUSU5HLAorCVUzMDBfQVBQX1BNWF9TUElfU0VUVElORworfTsKKworc3RydWN0IHBteF9vbm1hc2sgeworCXUxNiBtYXNrOwkJLyogTWFzayBiaXRzICovCisJdTE2IHZhbDsJCS8qIFZhbHVlIHdoZW4gYWN0aXZlICovCit9OworCitzdHJ1Y3QgcG14IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJZW51bSBwbXhfc2V0dGluZ3Mgc2V0dGluZzsKKwljaGFyICpuYW1lOworCWJvb2wgYWN0aXZhdGVkOworCWJvb2wgZGVmYXVsdF9vbjsKKwlzdHJ1Y3QgcG14X29ubWFzayBvbm1hc2tbXTsKK307CisKK3N0cnVjdCBwbXggKnBteF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIHBteF9zZXR0aW5ncyBzZXR0aW5nKTsKK2ludCBwbXhfcHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KTsKK2ludCBwbXhfYWN0aXZhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcG14ICpwbXgpOworaW50IHBteF9kZWFjdGl2YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvc3BpLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlODg3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuYwpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9zcGkuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9wbDAyMi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgInBhZG11eC5oIgorCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgdGhlIGFjdHVhbCBkZXZpY2VzIG9uIHRoZSBTU1AvU1BJIGJ1cworICovCisjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9TUElEVU1NWQorc3RhdGljIHZvaWQgc2VsZWN0X2R1bW15X2NoaXAodTMyIGNoaXBzZWxlY3QpCit7CisJcHJfZGVidWcoIkNPUkU6ICVzIGNhbGxlZCB3aXRoIENTPTB4JXggKCVzKVxuIiwKKwkJIF9fZnVuY19fLAorCQkgY2hpcHNlbGVjdCwKKwkJIGNoaXBzZWxlY3QgPyAidW5zZWxlY3QgY2hpcCIgOiAic2VsZWN0IGNoaXAiKTsKKwkvKgorCSAqIEhlcmUgeW91IHdvdWxkIHdyaXRlIHRoZSBjaGlwIHNlbGVjdCB2YWx1ZSB0byB0aGUgR1BJTyBwaW5zIGlmCisJICogdGhpcyB3YXMgYSByZWFsIGNoaXAgKGJ1dCB0aGlzIGlzIGEgbG9vcGJhY2sgZHVtbXkpLgorCSAqLworfQorCitzdHJ1Y3QgcGwwMjJfY29uZmlnX2NoaXAgZHVtbXlfY2hpcF9pbmZvID0geworCS8qIE5vbWluYWxseSB0aGlzIGlzIExPT1BCQUNLX0RJU0FCTEVELCBidXQgdGhpcyBpcyBvdXIgZHVtbXkgY2hpcCEgKi8KKwkubGJtID0gTE9PUEJBQ0tfRU5BQkxFRCwKKwkvKgorCSAqIGF2YWlsYWJsZSBQT0xMSU5HX1RSQU5TRkVSIGFuZCBJTlRFUlJVUFRfVFJBTlNGRVIsCisJICogRE1BX1RSQU5TRkVSIGRvZXMgbm90IHdvcmsKKwkgKi8KKwkuY29tX21vZGUgPSBJTlRFUlJVUFRfVFJBTlNGRVIsCisJLmlmYWNlID0gU1NQX0lOVEVSRkFDRV9NT1RPUk9MQV9TUEksCisJLyogV2UgY2FuIG9ubHkgYWN0IGFzIG1hc3RlciBidXQgU1NQX1NMQVZFIGlzIHBvc3NpYmxlIGluIHRoZW9yeSAqLworCS5oaWVyYXJjaHkgPSBTU1BfTUFTVEVSLAorCS8qIDAgPSBkcml2ZSBUWCBldmVuIGFzIHNsYXZlLCAxID0gZG8gbm90IGRyaXZlIFRYIGFzIHNsYXZlICovCisJLnNsYXZlX3R4X2Rpc2FibGUgPSAwLAorCS8qIExTQiBmaXJzdCAqLworCS5lbmRpYW5fdHggPSBTU1BfVFhfTFNCLAorCS5lbmRpYW5fcnggPSBTU1BfUlhfTFNCLAorCS5kYXRhX3NpemUgPSBTU1BfREFUQV9CSVRTXzgsIC8qIHVzZWQgdG8gYmUgMTIgaW4gc29tZSBkZWZhdWx0ICovCisJLnJ4X2xldl90cmlnID0gU1NQX1JYXzFfT1JfTU9SRV9FTEVNLAorCS50eF9sZXZfdHJpZyA9IFNTUF9UWF8xX09SX01PUkVfRU1QVFlfTE9DLAorCS5jbGtfcGhhc2UgPSBTU1BfQ0xLX1NFQ09ORF9FREdFLAorCS5jbGtfcG9sID0gU1NQX0NMS19QT0xfSURMRV9MT1csCisJLmN0cmxfbGVuID0gU1NQX0JJVFNfMTIsCisJLndhaXRfc3RhdGUgPSBTU1BfTVdJUkVfV0FJVF9aRVJPLAorCS5kdXBsZXggPSBTU1BfTUlDUk9XSVJFX0NIQU5ORUxfRlVMTF9EVVBMRVgsCisJLyoKKwkgKiBUaGlzIGlzIHdoZXJlIHlvdSBpbnNlcnQgYSBjYWxsIHRvIGEgZnVuY3Rpb24gdG8gZW5hYmxlIENTCisJICogKHVzdWFsbHkgR1BJTykgZm9yIGEgY2VydGFpbiBjaGlwLgorCSAqLworCS5jc19jb250cm9sID0gc2VsZWN0X2R1bW15X2NoaXAsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gdTMwMF9zcGlfZGV2aWNlc1tdID0geworI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfU1BJRFVNTVkKKwl7CisJCS8qIEEgZHVtbXkgY2hpcCB1c2VkIGZvciBsb29wYmFjayB0ZXN0cyAqLworCQkubW9kYWxpYXMgICAgICAgPSAic3BpLWR1bW15IiwKKwkJLyogUmVhbGx5IGR1bW15LCBwYXNzIGluIGFkZGl0aW9uYWwgY2hpcCBjb25maWcgaGVyZSAqLworCQkucGxhdGZvcm1fZGF0YSAgPSBOVUxMLAorCQkvKiBUaGlzIGRlZmluZXMgaG93IHRoZSBjb250cm9sbGVyIHNoYWxsIGhhbmRsZSB0aGUgZGV2aWNlICovCisJCS5jb250cm9sbGVyX2RhdGEgPSAmZHVtbXlfY2hpcF9pbmZvLAorCQkvKiAuaXJxIC0gbm8gZXh0ZXJuYWwgSVJRIHJvdXRlZCBmcm9tIHRoaXMgZGV2aWNlICovCisJCS5tYXhfc3BlZWRfaHogICA9IDEwMDAwMDAsCisJCS5idXNfbnVtICAgICAgICA9IDAsIC8qIE9ubHkgb25lIGJ1cyBvbiB0aGlzIGNoaXAgKi8KKwkJLmNoaXBfc2VsZWN0ICAgID0gMCwKKwkJLyogTWVhbnMgU1BJX0NTX0hJR0gsIGNoYW5nZSBpZiBlLmcgbG93IENTICovCisJCS5tb2RlICAgICAgICAgICA9IDAsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkvKiBJZiB5b3UgaGF2ZSBzZXZlcmFsIFNQSSBidXNlcyB0aGlzIHZhcmllcywgd2UgaGF2ZSBvbmx5IGJ1cyAwICovCisJLmJ1c19pZCA9IDAsCisJLyogU2V0IHRoaXMgdG8gMSB3aGVuIHdlIHRoaW5rIHdlIGdvdCBETUEgd29ya2luZyAqLworCS5lbmFibGVfZG1hID0gMCwKKwkvKgorCSAqIE9uIHRoZSBBUFAgQ1BVIEdQSU8gNCwgNSBhbmQgNiBhcmUgY29ubmVjdGVkIGFzIGdlbmVyaWMKKwkgKiBjaGlwIHNlbGVjdHMgZm9yIFNQSS4gKFNhbWUgb24gVTMzMCwgVTMzNSBhbmQgVTM2NS4pCisJICogVE9ETzogbWFrZSBzdXJlIHRoZSBHUElPIGRyaXZlciBjYW4gc2VsZWN0IHRoZXNlIHByb3Blcmx5CisJICogYW5kIGRvIHBhZG11eGluZyBhY2NvcmRpbmdseSB0b28uCisJICovCisJLm51bV9jaGlwc2VsZWN0ID0gMywKK307CisKKwordm9pZCBfX2luaXQgdTMwMF9zcGlfaW5pdChzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHBteCAqcG14OworCisJYWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmc3NwX3BsYXRmb3JtX2RhdGE7CisJLyoKKwkgKiBTZXR1cCBwYWRtdXhpbmcgZm9yIFNQSS4gU2luY2UgdGhpcyBtdXN0IGFsd2F5cyBiZQorCSAqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgcG14IGlzIG5ldmVyIHJlbGVhc2VkLgorCSAqLworCXBteCA9IHBteF9nZXQoJmFkZXYtPmRldiwgVTMwMF9BUFBfUE1YX1NQSV9TRVRUSU5HKTsKKworCWlmIChJU19FUlIocG14KSkKKwkJZGV2X3dhcm4oJmFkZXYtPmRldiwgIkNvdWxkIG5vdCBnZXQgcGFkbXV4IGhhbmRsZVxuIik7CisJZWxzZSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gcG14X2FjdGl2YXRlKCZhZGV2LT5kZXYsIHBteCk7CisJCWlmIChJU19FUlJfVkFMVUUocmV0KSkKKwkJCWRldl93YXJuKCZhZGV2LT5kZXYsICJDb3VsZCBub3QgYWN0aXZhdGUgcGFkbXV4aW5nXG4iKTsKKwl9CisKK30KK3ZvaWQgX19pbml0IHUzMDBfc3BpX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCkKK3sKKwkvKiBSZWdpc3RlciBhbnkgU1BJIGRldmljZXMgKi8KKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyh1MzAwX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKHUzMDBfc3BpX2RldmljZXMpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNkODY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL3NwaS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXUzMDAvc3BpLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24gQUIKKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworI2lmbmRlZiBTUElfSAorI2RlZmluZSBTUElfSAorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisKKyNpZmRlZiBDT05GSUdfU1BJX1BMMDIyCit2b2lkIF9faW5pdCB1MzAwX3NwaV9pbml0KHN0cnVjdCBhbWJhX2RldmljZSAqYWRldik7Cit2b2lkIF9faW5pdCB1MzAwX3NwaV9yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpOworI2Vsc2UKKy8qIENvbXBpbGUgb3V0IFNQSSBzdXBwb3J0IGlmIFBMMDIyIGlzIG5vdCBzZWxlY3RlZCAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB1MzAwX3NwaV9pbml0KHN0cnVjdCBhbWJhX2RldmljZSAqYWRldikKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgdTMwMF9zcGlfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcyh2b2lkKQoreworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYwppbmRleCBjY2U1MzIwLi4yNmQyNmY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYwpAQCAtMzQ2LDYgKzM0NiwyMSBAQAogCS5mbGFncyAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAorLyoKKyAqIE92ZXJyaWRlIHRoZSBnbG9iYWwgd2VhayBzY2hlZF9jbG9jayBzeW1ib2wgd2l0aCB0aGlzCisgKiBsb2NhbCBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIHRoZSBjbG9ja3NvdXJjZSB0byBnZXQgc29tZQorICogYmV0dGVyIHJlc29sdXRpb24gd2hlbiBzY2hlZHVsaW5nIHRoZSBrZXJuZWwuIFdlIGFjY2VwdCB0aGF0CisgKiB0aGlzIHdyYXBzIGFyb3VuZCBmb3Igbm93LCBzaW5jZSBpdCBpcyBqdXN0IGEgcmVsYXRpdmUgdGltZQorICogc3RhbXAuIChJbnNwaXJlZCBieSBPTUFQIGltcGxlbWVudGF0aW9uLikKKyAqLwordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gY2xvY2tzb3VyY2VfY3ljMm5zKGNsb2Nrc291cmNlX3UzMDBfMW1oei5yZWFkKAorCQkJCSAgJmNsb2Nrc291cmNlX3UzMDBfMW1oeiksCisJCQkJICBjbG9ja3NvdXJjZV91MzAwXzFtaHoubXVsdCwKKwkJCQkgIGNsb2Nrc291cmNlX3UzMDBfMW1oei5zaGlmdCk7Cit9CisKIAogLyoKICAqIFRoaXMgc2V0cyB1cCB0aGUgc3lzdGVtIHRpbWVycywgY2xvY2sgc291cmNlIGFuZCBjbG9jayBldmVudC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwppbmRleCA5NzVlYWU0Li5lMTNiZTdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvY250MzJfdG9fNjMuaD4KQEAgLTQ3LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKQEAgLTM2OSw3ICszNjksNyBAQAogCXJldHVybiByZWFkbChWRVJTQVRJTEVfU1lTTUNJKSAmIG1hc2s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgbW1jMF9wbGF0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSBtbWNfc3RhdHVzLAogCS5ncGlvX3dwCT0gLTEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfcGIuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCmluZGV4IDlhZjhkODEuLjIzOWNkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTMxLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgogCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIElSUV9NTUNJMUEJSVJRX1NJQ19NTUNJMUEKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIG1tYzFfcGxhdF9kYXRhID0geworc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW1jMV9wbGF0X2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gbW1jX3N0YXR1cywKIAkuZ3Bpb193cAk9IC0xLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggNWZlNTk1YS4uOTI2NGQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xNyw3ICsxNyw3IEBACiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WMyBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WMyBpZiBNTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJaGVscAogCSAgVGhlIEFSTTYxMCBpcyB0aGUgc3VjY2Vzc29yIHRvIHRoZSBBUk0zIHByb2Nlc3NvcgogCSAgYW5kIHdhcyBwcm9kdWNlZCBieSBWTFNJIFRlY2hub2xvZ3kgSW5jLgpAQCAtMzEsNyArMzEsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CiAJaGVscAogCSAgQSAzMi1iaXQgUklTQyBtaWNyb3Byb2Nlc3NvciBiYXNlZCBvbiB0aGUgQVJNNyBwcm9jZXNzb3IgY29yZQpAQCAtNDksNyArNDksNyBAQAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjMgaWYgTU1VCiAJc2VsZWN0IENQVV9UTEJfVjMgaWYgTU1VCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCWhlbHAKIAkgIEEgMzItYml0IFJJU0MgbWljcm9wcm9jZXNzb3IgYmFzZWQgb24gdGhlIEFSTTcgcHJvY2Vzc29yIGNvcmUKIAkgIGRlc2lnbmVkIGJ5IEFkdmFuY2VkIFJJU0MgTWFjaGluZXMgTHRkLiBUaGUgQVJNNzEwIGlzIHRoZQpAQCAtNjQsNyArNjQsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNNzIwVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtODMsNyArODMsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1YzCSMgYWx0aG91Z2ggdGhlIGNvcmUgaXMgdjR0CiAJc2VsZWN0IENQVV9DUDE1X01QVQogCWhlbHAKQEAgLTEwMCw3ICsxMDAsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTk9NTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNAogCWhlbHAKIAkgIEEgMzItYml0IFJJU0MgbWljcm9wcm9jZXNzb3IgYmFzZWQgb24gdGhlIEFSTTkgcHJvY2Vzc29yIGNvcmUKQEAgLTExNCw3ICsxMTQsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNOTIwVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0xMjIsMTAgKzEyMiw3IEBACiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJaGVscAogCSAgVGhlIEFSTTkyMFQgaXMgbGljZW5zZWQgdG8gYmUgcHJvZHVjZWQgYnkgbnVtZXJvdXMgdmVuZG9ycywKLQkgIGFuZCBpcyB1c2VkIGluIHRoZSBNYXZlcmljayBFUDkzMTIgYW5kIHRoZSBTYW1zdW5nIFMzQzI0MTAuCi0KLQkgIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIE1hdmVyaWNrIEVQOTMxMiBhdAotCSAgPGh0dHA6Ly9saW51eGRldmljZXMuY29tL3Byb2R1Y3RzL1BEMjM4Mjg2NjA2OC5odG1sPi4KKwkgIGFuZCBpcyB1c2VkIGluIHRoZSBDaXJydXMgRVA5M3h4IGFuZCB0aGUgU2Ftc3VuZyBTM0MyNDEwLgogCiAJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNOTIwVCBwcm9jZXNzb3IuCiAJICBPdGhlcndpc2UsIHNheSBOLgpAQCAtMTM1LDcgKzEzMiw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk05MjJUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTE1NCw3ICsxNTEsNyBAQAogIAlib29sICJTdXBwb3J0IEFSTTkyNVQgcHJvY2Vzc29yIiBpZiBBUkNIX09NQVAxCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTE3Myw3ICsxNzAsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNOTI2VCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVRKCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKQEAgLTE5MSw3ICsxODgsNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVXzMydjQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0Ci0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NBQ0hFX0ZBCkBAIC0yMTAsNyArMjA3LDcgQEAKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX05PTU1VCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NUFUKIAloZWxwCkBAIC0yMjgsNyArMjI1LDcgQEAKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfTk9NTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01QVQogCWhlbHAKQEAgLTI0NCw3ICsyNDEsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyMFQgKHJldiAwKSBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTI2Miw3ICsyNTksNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyMEUgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0yNzUsNyArMjcyLDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTEwMjJFIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WNFdCIGlmIE1NVSAjIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIKQEAgLTI5Myw3ICsyOTAsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyNkVKLVMgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VCAjIEJ1dCBuZWVkIEphemVsbGUsIGJ1dCBFVjVUSiBpZ25vcmVzIGJpdCAxMAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VICMgY2FuIHByb2JhYmx5IGRvIGJldHRlcgpAQCAtMzExLDcgKzMwOCw3IEBACiAJc2VsZWN0IENQVV8zMnYzIGlmIEFSQ0hfUlBDCiAJc2VsZWN0IENQVV8zMnY0IGlmICFBUkNIX1JQQwogCXNlbGVjdCBDUFVfQUJSVF9FVjQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdCCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMzMxLDcgKzMyOCw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NAogCXNlbGVjdCBDUFVfQUJSVF9FVjQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdCCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMzQyLDcgKzMzOSw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKQEAgLTM1Miw3ICszNDksNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCkBAIC0zNjMsNyArMzYwLDcgQEAKIAlib29sCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQpAQCAtMzc0LDcgKzM3MSw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfRkVST0NFT04gaWYgTU1VCkBAIC0zOTQsNyArMzkxLDcgQEAKIAlib29sICJTdXBwb3J0IEFSTSBWNiBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IE1BQ0hfUkVBTFZJRVdfUEJYCiAJc2VsZWN0IENQVV8zMnY2CiAJc2VsZWN0IENQVV9BQlJUX0VWNgotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9WNgogCXNlbGVjdCBDUFVfQ0FDSEVfVjYKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJUFQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC00MjAsNyArNDE3LDcgQEAKIAlzZWxlY3QgQ1BVXzMydjZLCiAJc2VsZWN0IENQVV8zMnY3CiAJc2VsZWN0IENQVV9BQlJUX0VWNwotCXNlbGVjdCBDUFVfUEFCUlRfSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfVjcKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y3CiAJc2VsZWN0IENQVV9DQUNIRV9WSVBUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtNDgyLDEwICs0NzksMTMgQEAKIGNvbmZpZyBDUFVfQUJSVF9FVjcKIAlib29sCiAKLWNvbmZpZyBDUFVfUEFCUlRfSUZBUgorY29uZmlnIENQVV9QQUJSVF9MRUdBQ1kKIAlib29sCiAKLWNvbmZpZyBDUFVfUEFCUlRfTk9JRkFSCitjb25maWcgQ1BVX1BBQlJUX1Y2CisJYm9vbAorCitjb25maWcgQ1BVX1BBQlJUX1Y3CiAJYm9vbAogCiAjIFRoZSBjYWNoZSBtb2RlbApAQCAtNzcxLDMgKzc3MSw4IEBACiAJc2VsZWN0IE9VVEVSX0NBQ0hFCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgTDIgY2FjaGUgb24gWFNjYWxlMy4KKworY29uZmlnIEFSTV9MMV9DQUNIRV9TSElGVAorCWludAorCWRlZmF1bHQgNiBpZiBBUkNIX09NQVAzCisJZGVmYXVsdCA1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21tL01ha2VmaWxlCmluZGV4IDYzZTNmNmQuLjA1NWNiMmFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tbS9NYWtlZmlsZQpAQCAtMjcsNiArMjcsMTAgQEAKIG9iai0kKENPTkZJR19DUFVfQUJSVF9FVjYpCSs9IGFib3J0LWV2Ni5vCiBvYmotJChDT05GSUdfQ1BVX0FCUlRfRVY3KQkrPSBhYm9ydC1ldjcubwogCitvYmotJChDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWSkJKz0gcGFib3J0LWxlZ2FjeS5vCitvYmotJChDT05GSUdfQ1BVX1BBQlJUX1Y2KQkrPSBwYWJvcnQtdjYubworb2JqLSQoQ09ORklHX0NQVV9QQUJSVF9WNykJKz0gcGFib3J0LXY3Lm8KKwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WMykJKz0gY2FjaGUtdjMubwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNCkJKz0gY2FjaGUtdjQubwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNFdUKQkrPSBjYWNoZS12NHd0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCmluZGV4IDhmNWMxM2YuLjI5NWUyNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCiAKQEAgLTEyMSwxMSArMTIyLDEzIEBACiAgKgktIHRoZSBJY2FjaGUgZG9lcyBub3QgcmVhZCBkYXRhIGZyb20gdGhlIHdyaXRlIGJ1ZmZlcgogICovCiBFTlRSWSh2Nl9jb2hlcmVudF91c2VyX3JhbmdlKQotCisgVU5XSU5EKC5mbnN0YXJ0CQkpCiAjaWZkZWYgSEFSVkFSRF9DQUNIRQogCWJpYwlyMCwgcjAsICNDQUNIRV9MSU5FX1NJWkUgLSAxCi0xOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmUKKzE6CisgVVNFUigJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJKQlAIGNsZWFuIEQgbGluZQogCWFkZAlyMCwgcjAsICNDQUNIRV9MSU5FX1NJWkUKKzI6CiAJY21wCXIwLCByMQogCWJsbwkxYgogI2VuZGlmCkBAIC0xNDMsNiArMTQ2LDE5IEBACiAJbW92CXBjLCBscgogCiAvKgorICogRmF1bHQgaGFuZGxpbmcgZm9yIHRoZSBjYWNoZSBvcGVyYXRpb24gYWJvdmUuIElmIHRoZSB2aXJ0dWFsIGFkZHJlc3MgaW4gcjAKKyAqIGlzbid0IG1hcHBlZCwganVzdCB0cnkgdGhlIG5leHQgcGFnZS4KKyAqLworOTAwMToKKwltb3YJcjAsIHIwLCBsc3IgIzEyCisJbW92CXIwLCByMCwgbHNsICMxMgorCWFkZAlyMCwgcjAsICM0MDk2CisJYgkyYgorIFVOV0lORCguZm5lbmQJCSkKK0VORFBST0ModjZfY29oZXJlbnRfdXNlcl9yYW5nZSkKK0VORFBST0ModjZfY29oZXJlbnRfa2Vybl9yYW5nZSkKKworLyoKICAqCXY2X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uoa2FkZHIpCiAgKgogICoJRW5zdXJlIHRoYXQgdGhlIGRhdGEgaGVsZCBpbiB0aGUgcGFnZSBrYWRkciBpcyB3cml0dGVuIGJhY2sKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCmluZGV4IGJkYTBlYzMuLmUxYmQ5NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCiAKQEAgLTE1MywxMyArMTU0LDE2IEBACiAgKgktIHRoZSBJY2FjaGUgZG9lcyBub3QgcmVhZCBkYXRhIGZyb20gdGhlIHdyaXRlIGJ1ZmZlcgogICovCiBFTlRSWSh2N19jb2hlcmVudF91c2VyX3JhbmdlKQorIFVOV0lORCguZm5zdGFydAkJKQogCWRjYWNoZV9saW5lX3NpemUgcjIsIHIzCiAJc3ViCXIzLCByMiwgIzEKIAliaWMJcjAsIHIwLCByMwotMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTEsIDEJCUAgY2xlYW4gRCBsaW5lIHRvIHRoZSBwb2ludCBvZiB1bmlmaWNhdGlvbgorMToKKyBVU0VSKAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMSwgMQkpCUAgY2xlYW4gRCBsaW5lIHRvIHRoZSBwb2ludCBvZiB1bmlmaWNhdGlvbgogCWRzYgotCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGxpbmUKKyBVU0VSKAltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCSkJQCBpbnZhbGlkYXRlIEkgbGluZQogCWFkZAlyMCwgcjAsIHIyCisyOgogCWNtcAlyMCwgcjEKIAlibG8JMWIKIAltb3YJcjAsICMwCkBAIC0xNjcsNiArMTcxLDE3IEBACiAJZHNiCiAJaXNiCiAJbW92CXBjLCBscgorCisvKgorICogRmF1bHQgaGFuZGxpbmcgZm9yIHRoZSBjYWNoZSBvcGVyYXRpb24gYWJvdmUuIElmIHRoZSB2aXJ0dWFsIGFkZHJlc3MgaW4gcjAKKyAqIGlzbid0IG1hcHBlZCwganVzdCB0cnkgdGhlIG5leHQgcGFnZS4KKyAqLworOTAwMToKKwltb3YJcjAsIHIwLCBsc3IgIzEyCisJbW92CXIwLCByMCwgbHNsICMxMgorCWFkZAlyMCwgcjAsICM0MDk2CisJYgkyYgorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0ModjdfY29oZXJlbnRfa2Vybl9yYW5nZSkKIEVORFBST0ModjdfY29oZXJlbnRfdXNlcl9yYW5nZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29udGV4dC5jIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCmluZGV4IDZiZGE3NmEuLmE5ZTIyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvbnRleHQuYworKysgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKQEAgLTUwLDEwICs1MCw3IEBACiAJCWlzYigpOwogCQlmbHVzaF90bGJfYWxsKCk7CiAJCWlmIChpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpKSB7Ci0JCQlhc20oIm1jcglwMTUsIDAsICUwLCBjNywgYzUsIDAJQCBpbnZhbGlkYXRlIEktY2FjaGVcbiIKLQkJCSAgICAibWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgNglAIGZsdXNoIEJUQUMvQlRCXG4iCi0JCQkgICAgOgotCQkJICAgIDogInIiICgwKSk7CisJCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAkJCWRzYigpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKaW5kZXggYjMwOTI1Zi4uYjk1OTBhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwogCi0JaWYgKG1hc2sgIT0gMHhmZmZmZmZmZikKKwlpZiAobWFzayA8IDB4ZmZmZmZmZmZVTEwpCiAJCWdmcCB8PSBHRlBfRE1BOwogCiAJcGFnZSA9IGFsbG9jX3BhZ2VzKGdmcCwgb3JkZXIpOwpAQCAtMjg5LDcgKzI4OSw3IEBACiAJaWYgKCFtYXNrKQogCQlnb3RvIGVycm9yOwogCi0JaWYgKG1hc2sgIT0gMHhmZmZmZmZmZikKKwlpZiAobWFzayA8IDB4ZmZmZmZmZmZVTEwpCiAJCWdmcCB8PSBHRlBfRE1BOwogCXZpcnQgPSBrbWFsbG9jKHNpemUsIGdmcCk7CiAJaWYgKCF2aXJ0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jIGIvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCmluZGV4IGJjMDA5OWQuLmQwZDE3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKQEAgLTE1MywxNCArMTUzLDExIEBACiAKIAlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAltYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwotCWlmIChtYXBwaW5nKSB7CiAjaWZuZGVmIENPTkZJR19TTVAKLQkJaW50IGRpcnR5ID0gdGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKLQotCQlpZiAoZGlydHkpCi0JCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKG1hcHBpbmcsIHBhZ2UpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpKQorCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKG1hcHBpbmcsIHBhZ2UpOwogI2VuZGlmCi0KKwlpZiAobWFwcGluZykgewogCQlpZiAoY2FjaGVfaXNfdml2dCgpKQogCQkJbWFrZV9jb2hlcmVudChtYXBwaW5nLCB2bWEsIGFkZHIsIHBmbik7CiAJCWVsc2UgaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKaW5kZXggY2M4ODI5ZC4uMTBlMDY4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC5jCkBAIC0yNSw2ICsyNSwxOSBAQAogCiAjaW5jbHVkZSAiZmF1bHQuaCIKIAorLyoKKyAqIEZhdWx0IHN0YXR1cyByZWdpc3RlciBlbmNvZGluZ3MuICBXZSBzdGVhbCBiaXQgMzEgZm9yIG91ciBvd24gcHVycG9zZXMuCisgKi8KKyNkZWZpbmUgRlNSX0xOWF9QRgkJKDEgPDwgMzEpCisjZGVmaW5lIEZTUl9XUklURQkJKDEgPDwgMTEpCisjZGVmaW5lIEZTUl9GUzQJCQkoMSA8PCAxMCkKKyNkZWZpbmUgRlNSX0ZTM18wCQkoMTUpCisKK3N0YXRpYyBpbmxpbmUgaW50IGZzcl9mcyh1bnNpZ25lZCBpbnQgZnNyKQoreworCXJldHVybiAoZnNyICYgRlNSX0ZTM18wKSB8IChmc3IgJiBGU1JfRlM0KSA+PiA2OworfQorCiAjaWZkZWYgQ09ORklHX01NVQogCiAjaWZkZWYgQ09ORklHX0tQUk9CRVMKQEAgLTE4MiwxOCArMTk1LDM1IEBACiAjZGVmaW5lIFZNX0ZBVUxUX0JBRE1BUAkJMHgwMTAwMDAKICNkZWZpbmUgVk1fRkFVTFRfQkFEQUNDRVNTCTB4MDIwMDAwCiAKLXN0YXRpYyBpbnQKKy8qCisgKiBDaGVjayB0aGF0IHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgVk1BIGFsbG93IGZvciB0aGUgZmF1bHQgd2hpY2ggb2NjdXJyZWQuCisgKiBJZiB3ZSBlbmNvdW50ZXJlZCBhIHdyaXRlIGZhdWx0LCB3ZSBtdXN0IGhhdmUgd3JpdGUgcGVybWlzc2lvbiwgb3RoZXJ3aXNlCisgKiB3ZSBhbGxvdyBhbnkgcGVybWlzc2lvbi4KKyAqLworc3RhdGljIGlubGluZSBib29sIGFjY2Vzc19lcnJvcih1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUM7CisKKwlpZiAoZnNyICYgRlNSX1dSSVRFKQorCQltYXNrID0gVk1fV1JJVEU7CisJaWYgKGZzciAmIEZTUl9MTlhfUEYpCisJCW1hc2sgPSBWTV9FWEVDOworCisJcmV0dXJuIHZtYS0+dm1fZmxhZ3MgJiBtYXNrID8gZmFsc2UgOiB0cnVlOworfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcwogX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCWludCBmYXVsdCwgbWFzazsKKwlpbnQgZmF1bHQ7CiAKIAl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CiAJZmF1bHQgPSBWTV9GQVVMVF9CQURNQVA7Ci0JaWYgKCF2bWEpCisJaWYgKHVubGlrZWx5KCF2bWEpKQogCQlnb3RvIG91dDsKLQlpZiAodm1hLT52bV9zdGFydCA+IGFkZHIpCisJaWYgKHVubGlrZWx5KHZtYS0+dm1fc3RhcnQgPiBhZGRyKSkKIAkJZ290byBjaGVja19zdGFjazsKIAogCS8qCkBAIC0yMDEsNDcgKzIzMSwyNCBAQAogCSAqIG1lbW9yeSBhY2Nlc3MsIHNvIHdlIGNhbiBoYW5kbGUgaXQuCiAJICovCiBnb29kX2FyZWE6Ci0JaWYgKGZzciAmICgxIDw8IDExKSkgLyogd3JpdGU/ICovCi0JCW1hc2sgPSBWTV9XUklURTsKLQllbHNlCi0JCW1hc2sgPSBWTV9SRUFEfFZNX0VYRUN8Vk1fV1JJVEU7Ci0KLQlmYXVsdCA9IFZNX0ZBVUxUX0JBREFDQ0VTUzsKLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgbWFzaykpCisJaWYgKGFjY2Vzc19lcnJvcihmc3IsIHZtYSkpIHsKKwkJZmF1bHQgPSBWTV9GQVVMVF9CQURBQ0NFU1M7CiAJCWdvdG8gb3V0OworCX0KIAogCS8qCi0JICogSWYgZm9yIGFueSByZWFzb24gYXQgYWxsIHdlIGNvdWxkbid0IGhhbmRsZQotCSAqIHRoZSBmYXVsdCwgbWFrZSBzdXJlIHdlIGV4aXQgZ3JhY2VmdWxseSByYXRoZXIKLQkgKiB0aGFuIGVuZGxlc3NseSByZWRvIHRoZSBmYXVsdC4KKwkgKiBJZiBmb3IgYW55IHJlYXNvbiBhdCBhbGwgd2UgY291bGRuJ3QgaGFuZGxlIHRoZSBmYXVsdCwgbWFrZQorCSAqIHN1cmUgd2UgZXhpdCBncmFjZWZ1bGx5IHJhdGhlciB0aGFuIGVuZGxlc3NseSByZWRvIHRoZSBmYXVsdC4KIAkgKi8KLXN1cnZpdmU6Ci0JZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkciAmIFBBR0VfTUFTSywgKGZzciAmICgxIDw8IDExKSkgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCk7Ci0JaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7Ci0JCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKLQkJCWdvdG8gb3V0X29mX21lbW9yeTsKLQkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCi0JCQlyZXR1cm4gZmF1bHQ7Ci0JCUJVRygpOwotCX0KKwlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyICYgUEFHRV9NQVNLLCAoZnNyICYgRlNSX1dSSVRFKSA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKTsKKwlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpCisJCXJldHVybiBmYXVsdDsKIAlpZiAoZmF1bHQgJiBWTV9GQVVMVF9NQUpPUikKIAkJdHNrLT5tYWpfZmx0Kys7CiAJZWxzZQogCQl0c2stPm1pbl9mbHQrKzsKIAlyZXR1cm4gZmF1bHQ7CiAKLW91dF9vZl9tZW1vcnk6Ci0JaWYgKCFpc19nbG9iYWxfaW5pdCh0c2spKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICogSWYgd2UgYXJlIG91dCBvZiBtZW1vcnkgZm9yIHBpZDEsIHNsZWVwIGZvciBhIHdoaWxlIGFuZCByZXRyeQotCSAqLwotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JeWllbGQoKTsKLQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JZ290byBzdXJ2aXZlOwotCiBjaGVja19zdGFjazoKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTiAmJiAhZXhwYW5kX3N0YWNrKHZtYSwgYWRkcikpCiAJCWdvdG8gZ29vZF9hcmVhOwpAQCAtMjc4LDYgKzI4NSwxOCBAQAogCQlpZiAoIXVzZXJfbW9kZShyZWdzKSAmJiAhc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+QVJNX3BjKSkKIAkJCWdvdG8gbm9fY29udGV4dDsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBhYm92ZSBkb3duX3JlYWRfdHJ5bG9jaygpIG1pZ2h0IGhhdmUgc3VjY2VlZGVkIGluCisJCSAqIHdoaWNoIGNhc2UsIHdlJ2xsIGhhdmUgbWlzc2VkIHRoZSBtaWdodF9zbGVlcCgpIGZyb20KKwkJICogZG93bl9yZWFkKCkKKwkJICovCisJCW1pZ2h0X3NsZWVwKCk7CisjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCisJCWlmICghdXNlcl9tb2RlKHJlZ3MpICYmCisJCSAgICAhc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+QVJNX3BjKSkKKwkJCWdvdG8gbm9fY29udGV4dDsKKyNlbmRpZgogCX0KIAogCWZhdWx0ID0gX19kb19wYWdlX2ZhdWx0KG1tLCBhZGRyLCBmc3IsIHRzayk7CkBAIC0yODksNiArMzA4LDE2IEBACiAJaWYgKGxpa2VseSghKGZhdWx0ICYgKFZNX0ZBVUxUX0VSUk9SIHwgVk1fRkFVTFRfQkFETUFQIHwgVk1fRkFVTFRfQkFEQUNDRVNTKSkpKQogCQlyZXR1cm4gMDsKIAorCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgeworCQkvKgorCQkgKiBXZSByYW4gb3V0IG9mIG1lbW9yeSwgY2FsbCB0aGUgT09NIGtpbGxlciwgYW5kIHJldHVybiB0bworCQkgKiB1c2Vyc3BhY2UgKHdoaWNoIHdpbGwgcmV0cnkgdGhlIGZhdWx0LCBvciBraWxsIHVzIGlmIHdlCisJCSAqIGdvdCBvb20ta2lsbGVkKQorCQkgKi8KKwkJcGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKIAkgKiBJZiB3ZSBhcmUgaW4ga2VybmVsIG1vZGUgYXQgdGhpcyBwb2ludCwgd2UKIAkgKiBoYXZlIG5vIGNvbnRleHQgdG8gaGFuZGxlIHRoaXMgZmF1bHQgd2l0aC4KQEAgLTI5NiwxNiArMzI1LDYgQEAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkKIAkJZ290byBub19jb250ZXh0OwogCi0JaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7Ci0JCS8qCi0JCSAqIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBzb21lIG90aGVyIHRoaW5nCi0JCSAqIGhhcHBlbmVkIHRvIHVzIHRoYXQgbWFkZSB1cyB1bmFibGUgdG8gaGFuZGxlCi0JCSAqIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCi0JCSAqLwotCQlwcmludGsoIlZNOiBraWxsaW5nIHByb2Nlc3MgJXNcbiIsIHRzay0+Y29tbSk7Ci0JCWRvX2dyb3VwX2V4aXQoU0lHS0lMTCk7Ci0JCXJldHVybiAwOwotCX0KIAlpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJLyoKIAkJICogV2UgaGFkIHNvbWUgbWVtb3J5LCBidXQgd2VyZSB1bmFibGUgdG8KQEAgLTQ4OSwxMCArNTA4LDEwIEBACiBhc21saW5rYWdlIHZvaWQgX19leGNlcHRpb24KIGRvX0RhdGFBYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWNvbnN0IHN0cnVjdCBmc3JfaW5mbyAqaW5mID0gZnNyX2luZm8gKyAoZnNyICYgMTUpICsgKChmc3IgJiAoMSA8PCAxMCkpID4+IDYpOworCWNvbnN0IHN0cnVjdCBmc3JfaW5mbyAqaW5mID0gZnNyX2luZm8gKyBmc3JfZnMoZnNyKTsKIAlzdHJ1Y3Qgc2lnaW5mbyBpbmZvOwogCi0JaWYgKCFpbmYtPmZuKGFkZHIsIGZzciwgcmVncykpCisJaWYgKCFpbmYtPmZuKGFkZHIsIGZzciAmIH5GU1JfTE5YX1BGLCByZWdzKSkKIAkJcmV0dXJuOwogCiAJcHJpbnRrKEtFUk5fQUxFUlQgIlVuaGFuZGxlZCBmYXVsdDogJXMgKDB4JTAzeCkgYXQgMHglMDhseFxuIiwKQEAgLTUwNSw5ICs1MjQsNTggQEAKIAlhcm1fbm90aWZ5X2RpZSgiIiwgcmVncywgJmluZm8sIGZzciwgMCk7CiB9CiAKKworc3RhdGljIHN0cnVjdCBmc3JfaW5mbyBpZnNyX2luZm9bXSA9IHsKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAwIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJkZWJ1ZyBldmVudCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJzZWN0aW9uIGFjY2VzcyBmbGFnIGZhdWx0IgkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDQiCQkJICAgfSwKKwl7IGRvX3RyYW5zbGF0aW9uX2ZhdWx0LAlTSUdTRUdWLCBTRUdWX01BUEVSUiwJInNlY3Rpb24gdHJhbnNsYXRpb24gZmF1bHQiCSAgIH0sCisJeyBkb19iYWQsCQlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJInBhZ2UgYWNjZXNzIGZsYWcgZmF1bHQiCSAgIH0sCisJeyBkb19wYWdlX2ZhdWx0LAlTSUdTRUdWLCBTRUdWX01BUEVSUiwJInBhZ2UgdHJhbnNsYXRpb24gZmF1bHQiCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsCSAwLAkJImV4dGVybmFsIGFib3J0IG9uIG5vbi1saW5lZmV0Y2giICB9LAorCXsgZG9fYmFkLAkJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJzZWN0aW9uIGRvbWFpbiBmYXVsdCIJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMTAiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkicGFnZSBkb21haW4gZmF1bHQiCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLAkgMCwJCSJleHRlcm5hbCBhYm9ydCBvbiB0cmFuc2xhdGlvbiIJICAgfSwKKwl7IGRvX3NlY3RfZmF1bHQsCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkic2VjdGlvbiBwZXJtaXNzaW9uIGZhdWx0IgkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLAkgMCwJCSJleHRlcm5hbCBhYm9ydCBvbiB0cmFuc2xhdGlvbiIJICAgfSwKKwl7IGRvX3BhZ2VfZmF1bHQsCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkicGFnZSBwZXJtaXNzaW9uIGZhdWx0IgkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAxNiIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDE3IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMTgiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAxOSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDIwIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjEiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyMiIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDIzIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjQiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyNSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI2IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjciCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyOCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI5IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMzAiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAzMSIJCQkgICB9LAorfTsKKwogYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uCi1kb19QcmVmZXRjaEFib3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitkb19QcmVmZXRjaEFib3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGlmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWRvX3RyYW5zbGF0aW9uX2ZhdWx0KGFkZHIsIDAsIHJlZ3MpOworCWNvbnN0IHN0cnVjdCBmc3JfaW5mbyAqaW5mID0gaWZzcl9pbmZvICsgZnNyX2ZzKGlmc3IpOworCXN0cnVjdCBzaWdpbmZvIGluZm87CisKKwlpZiAoIWluZi0+Zm4oYWRkciwgaWZzciB8IEZTUl9MTlhfUEYsIHJlZ3MpKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9BTEVSVCAiVW5oYW5kbGVkIHByZWZldGNoIGFib3J0OiAlcyAoMHglMDN4KSBhdCAweCUwOGx4XG4iLAorCQlpbmYtPm5hbWUsIGlmc3IsIGFkZHIpOworCisJaW5mby5zaV9zaWdubyA9IGluZi0+c2lnOworCWluZm8uc2lfZXJybm8gPSAwOworCWluZm8uc2lfY29kZSAgPSBpbmYtPmNvZGU7CisJaW5mby5zaV9hZGRyICA9ICh2b2lkIF9fdXNlciAqKWFkZHI7CisJYXJtX25vdGlmeV9kaWUoIiIsIHJlZ3MsICZpbmZvLCBpZnNyLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmx1c2guYyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKaW5kZXggYjI3OTQyOS4uN2YyOTRmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmx1c2guYworKysgYi9hcmNoL2FybS9tbS9mbHVzaC5jCkBAIC0xOCwxMCArMTgsNiBAQAogCiAjaW5jbHVkZSAibW0uaCIKIAotI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotZXh0ZXJuIHZvaWQgdjZfaWNhY2hlX2ludmFsX2FsbCh2b2lkKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9WSVBUCiAKICNkZWZpbmUgQUxJQVNfRkxVU0hfU1RBUlQJMHhmZmZmNDAwMApAQCAtMzUsMTYgKzMxLDExIEBACiAJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHRvKTsKIAogCWFzbSgJIm1jcnIJcDE1LCAwLCAlMSwgJTAsIGMxNFxuIgotCSIJbWNyCXAxNSwgMCwgJTIsIGM3LCBjMTAsIDRcbiIKLSNpZm5kZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JIgltY3IJcDE1LCAwLCAlMiwgYzcsIGM1LCAwXG4iCi0jZW5kaWYKKwkiCW1jcglwMTUsIDAsICUyLCBjNywgYzEwLCA0IgogCSAgICA6CiAJICAgIDogInIiICh0byksICJyIiAodG8gKyBQQUdFX1NJWkUgLSBMMV9DQUNIRV9CWVRFUyksICJyIiAoemVybykKIAkgICAgOiAiY2MiKTsKLSNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7Ci0jZW5kaWYKKwlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIH0KIAogdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKQEAgLTU3LDE2ICs0OCwxMSBAQAogCiAJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgewogCQlhc20oCSJtY3IJcDE1LCAwLCAlMCwgYzcsIGMxNCwgMFxuIgotCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0XG4iCi0jaWZuZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzUsIDBcbiIKLSNlbmRpZgorCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0IgogCQkgICAgOgogCQkgICAgOiAiciIgKDApCiAJCSAgICA6ICJjYyIpOwotI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCQl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7Ci0jZW5kaWYKKwkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJfQogfQogCkBAIC04MSwxNiArNjcsMTEgQEAKIAogCWlmIChjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpIHsKIAkJYXNtKAkibWNyCXAxNSwgMCwgJTAsIGM3LCBjMTQsIDBcbiIKLQkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNFxuIgotI2lmbmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCAwXG4iCi0jZW5kaWYKKwkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIKIAkJICAgIDoKIAkJICAgIDogInIiICgwKQogCQkgICAgOiAiY2MiKTsKLSNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkJdjZfaWNhY2hlX2ludmFsX2FsbCgpOwotI2VuZGlmCisJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaGlnaG1lbS5jIGIvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCmluZGV4IDczY2FlNTcuLjMwZjgyZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2hpZ2htZW0uYworKysgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKQEAgLTQ2LDYgKzQ2LDggQEAKIAlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQogCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCisJZGVidWdfa21hcF9hdG9taWModHlwZSk7CisKIAlrbWFwID0ga21hcF9oaWdoX2dldChwYWdlKTsKIAlpZiAoa21hcCkKIAkJcmV0dXJuIGttYXA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggZjk4MjYwNi4uNTJjNDBkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMjczLDcgKzI3Myw2IEBACiAJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW2ldOwogCQlpZiAoIWJhbmstPmhpZ2htZW0pCiAJCQlmcmVlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgYmFua19waHlzX3N0YXJ0KGJhbmspLCBiYW5rX3BoeXNfc2l6ZShiYW5rKSk7Ci0JCW1lbW9yeV9wcmVzZW50KG5vZGUsIGJhbmtfcGZuX3N0YXJ0KGJhbmspLCBiYW5rX3Bmbl9lbmQoYmFuaykpOwogCX0KIAogCS8qCkBAIC0zNzAsNiArMzY5LDE5IEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHBmbl92YWxpZCk7CisKK3N0YXRpYyB2b2lkIGFybV9tZW1vcnlfcHJlc2VudChzdHJ1Y3QgbWVtaW5mbyAqbWksIGludCBub2RlKQoreworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGFybV9tZW1vcnlfcHJlc2VudChzdHJ1Y3QgbWVtaW5mbyAqbWksIGludCBub2RlKQoreworCWludCBpOworCWZvcl9lYWNoX25vZGViYW5rKGksIG1pLCBub2RlKSB7CisJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW2ldOworCQltZW1vcnlfcHJlc2VudChub2RlLCBiYW5rX3Bmbl9zdGFydChiYW5rKSwgYmFua19wZm5fZW5kKGJhbmspKTsKKwl9Cit9CiAjZW5kaWYKIAogc3RhdGljIGludCBfX2luaXQgbWVtaW5mb19jbXAoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQpAQCAtNDI3LDYgKzQzOSwxMiBAQAogCQkgKi8KIAkJaWYgKG5vZGUgPT0gaW5pdHJkX25vZGUpCiAJCQlib290bWVtX3Jlc2VydmVfaW5pdHJkKG5vZGUpOworCisJCS8qCisJCSAqIFNwYXJzZW1lbSB0cmllcyB0byBhbGxvY2F0ZSBib290bWVtIGluIG1lbW9yeV9wcmVzZW50KCksCisJCSAqIHNvIG11c3QgYmUgZG9uZSBhZnRlciB0aGUgZml4ZWQgcmVzZXJ2YXRpb25zCisJCSAqLworCQlhcm1fbWVtb3J5X3ByZXNlbnQobWksIG5vZGUpOwogCX0KIAogCS8qCkBAIC00ODMsNyArNTAxLDcgQEAKIAkvKgogCSAqIENvbnZlcnQgc3RhcnRfcGZuL2VuZF9wZm4gdG8gYSBzdHJ1Y3QgcGFnZSBwb2ludGVyLgogCSAqLwotCXN0YXJ0X3BnID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTsKKwlzdGFydF9wZyA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiAtIDEpICsgMTsKIAllbmRfcGcgPSBwZm5fdG9fcGFnZShlbmRfcGZuKTsKIAogCS8qCkBAIC02MTMsNiArNjMxLDE0IEBACiAKIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0hBVkVfVENNCisJZXh0ZXJuIGNoYXIgKl9fdGNtX3N0YXJ0LCAqX190Y21fZW5kOworCisJdG90YWxyYW1fcGFnZXMgKz0gZnJlZV9hcmVhKF9fcGh5c190b19wZm4oX19wYShfX3RjbV9zdGFydCkpLAorCQkJCSAgICBfX3BoeXNfdG9fcGZuKF9fcGEoX190Y21fZW5kKSksCisJCQkJICAgICJUQ00gbGluayIpOworI2VuZGlmCisKIAlpZiAoIW1hY2hpbmVfaXNfaW50ZWdyYXRvcigpICYmICFtYWNoaW5lX2lzX2NpbnRlZ3JhdG9yKCkpCiAJCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYXJlYShfX3BoeXNfdG9fcGZuKF9fcGEoX19pbml0X2JlZ2luKSksCiAJCQkJCSAgICBfX3BoeXNfdG9fcGZuKF9fcGEoX19pbml0X2VuZCkpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW1hcC5jIGIvYXJjaC9hcm0vbW0vbW1hcC5jCmluZGV4IGY3NDU3ZmUuLjJiNzk5NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tYXAuYworKysgYi9hcmNoL2FybS9tbS9tbWFwLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogewogCWlmIChhZGRyIDwgUEhZU19PRkZTRVQpCiAJCXJldHVybiAwOwotCWlmIChhZGRyICsgc2l6ZSA+PSBfX3BhKGhpZ2hfbWVtb3J5IC0gMSkpCisJaWYgKGFkZHIgKyBzaXplID4gX19wYShoaWdoX21lbW9yeSAtIDEpICsgMSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tdS5jIGIvYXJjaC9hcm0vbW0vbW11LmMKaW5kZXggNDQyNmVlNi4uZWE2N2JlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbW11LmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS9oaWdobWVtLmg+CiAKQEAgLTExNiw2ICsxMTcsMTMgQEAKIAl9CiAJaWYgKGkgPT0gQVJSQVlfU0laRShjYWNoZV9wb2xpY2llcykpCiAJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IHVua25vd24gb3IgdW5zdXBwb3J0ZWQgY2FjaGUgcG9saWN5XG4iKTsKKwkvKgorCSAqIFRoaXMgcmVzdHJpY3Rpb24gaXMgcGFydGx5IHRvIGRvIHdpdGggdGhlIHdheSB3ZSBib290OyBpdCBpcworCSAqIHVucHJlZGljdGFibGUgdG8gaGF2ZSBtZW1vcnkgbWFwcGVkIHVzaW5nIHR3byBkaWZmZXJlbnQgc2V0cyBvZgorCSAqIG1lbW9yeSBhdHRyaWJ1dGVzIChzaGFyZWQsIHR5cGUsIGFuZCBjYWNoZSBhdHRyaWJzKS4gIFdlIGNhbiBub3QKKwkgKiBjaGFuZ2UgdGhlc2UgYXR0cmlidXRlcyBvbmNlIHRoZSBpbml0aWFsIGFzc2VtYmx5IGhhcyBzZXR1cCB0aGUKKwkgKiBwYWdlIHRhYmxlcy4KKwkgKi8KIAlpZiAoY3B1X2FyY2hpdGVjdHVyZSgpID49IENQVV9BUkNIX0FSTXY2KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk9ubHkgY2FjaGVwb2xpY3k9d3JpdGViYWNrIHN1cHBvcnRlZCBvbiBBUk12NiBhbmQgbGF0ZXJcbiIpOwogCQljYWNoZXBvbGljeSA9IENQT0xJQ1lfV1JJVEVCQUNLOwpAQCAtNzA5LDEwICs3MTcsNiBAQAogCQkJaWYgKG1lbWluZm8ubnJfYmFua3MgPj0gTlJfQkFOS1MpIHsKIAkJCQlwcmludGsoS0VSTl9DUklUICJOUl9CQU5LUyB0b28gbG93LCAiCiAJCQkJCQkgImlnbm9yaW5nIGhpZ2ggbWVtb3J5XG4iKTsKLQkJCX0gZWxzZSBpZiAoY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fQ1JJVCAiSElHSE1FTSBpcyBub3QgeWV0IHN1cHBvcnRlZCAiCi0JCQkJCQkgIndpdGggVklQVCBhbGlhc2luZyBjYWNoZSwgIgotCQkJCQkJICJpZ25vcmluZyBoaWdoIG1lbW9yeVxuIik7CiAJCQl9IGVsc2UgewogCQkJCW1lbW1vdmUoYmFuayArIDEsIGJhbmssCiAJCQkJCShtZW1pbmZvLm5yX2JhbmtzIC0gaSkgKiBzaXplb2YoKmJhbmspKTsKQEAgLTcyNiw2ICs3MzAsOCBAQAogCQkJYmFuay0+c2l6ZSA9IFZNQUxMT0NfTUlOIC0gX192YShiYW5rLT5zdGFydCk7CiAJCX0KICNlbHNlCisJCWJhbmstPmhpZ2htZW0gPSBoaWdobWVtOworCiAJCS8qCiAJCSAqIENoZWNrIHdoZXRoZXIgdGhpcyBtZW1vcnkgYmFuayB3b3VsZCBlbnRpcmVseSBvdmVybGFwCiAJCSAqIHRoZSB2bWFsbG9jIGFyZWEuCkBAIC03NTQsNiArNzYwLDM4IEBACiAjZW5kaWYKIAkJaisrOwogCX0KKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCWlmIChoaWdobWVtKSB7CisJCWNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7CisKKwkJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgeworCQkJLyoKKwkJCSAqIEludGVyYWN0aW9ucyBiZXR3ZWVuIGttYXAgYW5kIG90aGVyIG1hcHBpbmdzCisJCQkgKiBtYWtlIGhpZ2htZW0gc3VwcG9ydCB3aXRoIGFsaWFzaW5nIFZJUFQgY2FjaGVzCisJCQkgKiByYXRoZXIgZGlmZmljdWx0LgorCQkJICovCisJCQlyZWFzb24gPSAid2l0aCBWSVBUIGFsaWFzaW5nIGNhY2hlIjsKKyNpZmRlZiBDT05GSUdfU01QCisJCX0gZWxzZSBpZiAodGxiX29wc19uZWVkX2Jyb2FkY2FzdCgpKSB7CisJCQkvKgorCQkJICoga21hcF9oaWdoIG5lZWRzIHRvIG9jY2FzaW9uYWxseSBmbHVzaCBUTEIgZW50cmllcywKKwkJCSAqIGhvd2V2ZXIsIGlmIHRoZSBUTEIgZW50cmllcyBuZWVkIHRvIGJlIGJyb2FkY2FzdAorCQkJICogd2UgbWF5IGRlYWRsb2NrOgorCQkJICogIGttYXBfaGlnaChpcnFzIG9mZiktPmZsdXNoX2FsbF96ZXJvX3BrbWFwcy0+CisJCQkgKiAgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZS0+c21wX2NhbGxfZnVuY3Rpb25fbWFueQorCQkJICogICAobXVzdCBub3QgYmUgY2FsbGVkIHdpdGggaXJxcyBvZmYpCisJCQkgKi8KKwkJCXJlYXNvbiA9ICJ3aXRob3V0IGhhcmR3YXJlIFRMQiBvcHMgYnJvYWRjYXN0aW5nIjsKKyNlbmRpZgorCQl9CisJCWlmIChyZWFzb24pIHsKKwkJCXByaW50ayhLRVJOX0NSSVQgIkhJR0hNRU0gaXMgbm90IHN1cHBvcnRlZCAlcywgaWdub3JpbmcgaGlnaCBtZW1vcnlcbiIsCisJCQkJcmVhc29uKTsKKwkJCXdoaWxlIChqID4gMCAmJiBtZW1pbmZvLmJhbmtbaiAtIDFdLmhpZ2htZW0pCisJCQkJai0tOworCQl9CisJfQorI2VuZGlmCiAJbWVtaW5mby5ucl9iYW5rcyA9IGo7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3BhYm9ydC1sZWdhY3kuUyBiL2FyY2gvYXJtL21tL3BhYm9ydC1sZWdhY3kuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzk3MGViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcGFib3J0LWxlZ2FjeS5TCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisvKgorICogRnVuY3Rpb246IGxlZ2FjeV9wYWJvcnQKKyAqCisgKiBQYXJhbXMgIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24KKyAqCisgKiBSZXR1cm5zIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0CisgKgkgICA6IHIxID0gU2ltdWxhdGVkIElGU1Igd2l0aCBzZWN0aW9uIHRyYW5zbGF0aW9uIGZhdWx0IHN0YXR1cworICoKKyAqIFB1cnBvc2UgOiBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBwcmVmZXRjaCBhYm9ydC4KKyAqLworCisJLmFsaWduCTUKK0VOVFJZKGxlZ2FjeV9wYWJvcnQpCisJbW92CXIxLCAjNQorCW1vdglwYywgbHIKK0VORFBST0MobGVnYWN5X3BhYm9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3BhYm9ydC12Ni5TIGIvYXJjaC9hcm0vbW0vcGFib3J0LXY2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlM2QxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3BhYm9ydC12Ni5TCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisvKgorICogRnVuY3Rpb246IHY2X3BhYm9ydAorICoKKyAqIFBhcmFtcyAgOiByMCA9IGFkZHJlc3Mgb2YgYWJvcnRlZCBpbnN0cnVjdGlvbgorICoKKyAqIFJldHVybnMgOiByMCA9IGFkZHJlc3Mgb2YgYWJvcnQKKyAqCSAgIDogcjEgPSBJRlNSCisgKgorICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IHByZWZldGNoIGFib3J0LgorICovCisKKwkuYWxpZ24JNQorRU5UUlkodjZfcGFib3J0KQorCW1yYwlwMTUsIDAsIHIxLCBjNSwgYzAsIDEJCUAgZ2V0IElGU1IKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY2X3BhYm9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3BhYm9ydC12Ny5TIGIvYXJjaC9hcm0vbW0vcGFib3J0LXY3LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiM2IzMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3BhYm9ydC12Ny5TCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisvKgorICogRnVuY3Rpb246IHY2X3BhYm9ydAorICoKKyAqIFBhcmFtcyAgOiByMCA9IGFkZHJlc3Mgb2YgYWJvcnRlZCBpbnN0cnVjdGlvbgorICoKKyAqIFJldHVybnMgOiByMCA9IGFkZHJlc3Mgb2YgYWJvcnQKKyAqCSAgIDogcjEgPSBJRlNSCisgKgorICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IHByZWZldGNoIGFib3J0LgorICovCisKKwkuYWxpZ24JNQorRU5UUlkodjdfcGFib3J0KQorCW1yYwlwMTUsIDAsIHIwLCBjNiwgYzAsIDIJCUAgZ2V0IElGQVIKKwltcmMJcDE1LCAwLCByMSwgYzUsIGMwLCAxCQlAIGdldCBJRlNSCisJbW92CXBjLCBscgorRU5EUFJPQyh2N19wYWJvcnQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCmluZGV4IGI1NTUxYmYuLmQ5ZmI0YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCkBAIC00NDksNyArNDQ5LDcgQEAKIAkudHlwZQlhcm0xMDIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTEwMjBfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NHRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm0xMDIwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm0xMDIwX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTEwMjBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwppbmRleCA4YmM2NzQwLi43NDUzYjc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCkBAIC00MzAsNyArNDMwLDcgQEAKIAkudHlwZQlhcm0xMDIwZV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm0xMDIwZV9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTEwMjBlX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm0xMDIwZV9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm0xMDIwZV9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwppbmRleCAyY2QwM2U2Li44ZWI3MmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwpAQCAtNDEzLDcgKzQxMyw3IEBACiAJLnR5cGUJYXJtMTAyMl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm0xMDIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjR0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtMTAyMl9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtMTAyMl9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm0xMDIyX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCmluZGV4IGFkOTYxYTguLjNiNTlmMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCkBAIC00MDgsNyArNDA4LDcgQEAKIAkudHlwZQlhcm0xMDI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTEwMjZfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NXRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm0xMDI2X3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm0xMDI2X3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTEwMjZfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCmluZGV4IDgwZDZlMWQuLjNmOWNkM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJCS50eXBlCWFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtNl9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCQkud29yZAljcHVfYXJtNl9kYXRhX2Fib3J0Ci0JCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkJLndvcmQJbGVnYWN5X3BhYm9ydAogCQkud29yZAljcHVfYXJtNl9wcm9jX2luaXQKIAkJLndvcmQJY3B1X2FybTZfcHJvY19maW4KIAkJLndvcmQJY3B1X2FybTZfcmVzZXQKQEAgLTI5NSw3ICsyOTUsNyBAQAogCQkudHlwZQlhcm03X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkJLndvcmQJY3B1X2FybTdfZGF0YV9hYm9ydAotCQkud29yZAlwYWJvcnRfbm9pZmFyCisJCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkJLndvcmQJY3B1X2FybTdfcHJvY19pbml0CiAJCS53b3JkCWNwdV9hcm03X3Byb2NfZmluCiAJCS53b3JkCWNwdV9hcm03X3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwppbmRleCA4NWFlMTg2Li4wYjYyZGUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKQEAgLTE4MSw3ICsxODEsNyBAQAogCQkudHlwZQlhcm03MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtNzIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJCS53b3JkCXY0dF9sYXRlX2Fib3J0Ci0JCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkJLndvcmQJbGVnYWN5X3BhYm9ydAogCQkud29yZAljcHVfYXJtNzIwX3Byb2NfaW5pdAogCQkud29yZAljcHVfYXJtNzIwX3Byb2NfZmluCiAJCS53b3JkCWNwdV9hcm03MjBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TCmluZGV4IDRmOTViZWUuLjAxODYwY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJLnR5cGUJYXJtNzQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTc0MF9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY0dF9sYXRlX2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtNzQwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm03NDBfcHJvY19maW4KIAkud29yZAljcHVfYXJtNzQwX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKaW5kZXggOTNlMDVmYS4uMTIwMWI5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUwpAQCAtNjQsNyArNjQsNyBAQAogCQkudHlwZQlhcm03dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm03dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCQkud29yZAl2NHRfbGF0ZV9hYm9ydAotCQkud29yZAlwYWJvcnRfbm9pZmFyCisJCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkJLndvcmQJY3B1X2FybTd0ZG1pX3Byb2NfaW5pdAogCQkud29yZAljcHVfYXJtN3RkbWlfcHJvY19maW4KIAkJLndvcmQJY3B1X2FybTd0ZG1pX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwppbmRleCA5MTRkNjg4Li4yYjdjMTk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKQEAgLTM5NSw3ICszOTUsNyBAQAogCS50eXBlCWFybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm05MjBfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NHRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm05MjBfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTkyMF9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm05MjBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCmluZGV4IDUxYzljOTguLjA2YTFhYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJLnR5cGUJYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTkyMl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTkyMl9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtOTIyX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTkyMl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKaW5kZXggMjcyNDUyNi4uY2I1MzQzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC00NjIsNyArNDYyLDcgQEAKIAkudHlwZQlhcm05MjVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtOTI1X3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjR0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtOTI1X3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm05MjVfcHJvY19maW4KIAkud29yZAljcHVfYXJtOTI1X3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCA1NDQ2NjkzLi4xYzQ4NDg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTQxNSw3ICs0MTUsNyBAQAogCS50eXBlCWFybTkyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm05MjZfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NXRqX2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtOTI2X3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm05MjZfcHJvY19maW4KIAkud29yZAljcHVfYXJtOTI2X3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUwppbmRleCBmNTk1MTE3Li41YjBmODQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKQEAgLTMyMiw3ICszMjIsNyBAQAogCS50eXBlCWFybTk0MF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm05NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAlub21tdV9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTk0MF9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtOTQwX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTk0MF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKaW5kZXggZTAzZjZmZi4uNDBjMDQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCkBAIC0zNzcsNyArMzc3LDcgQEAKIAkudHlwZQlhcm05NDZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtOTQ2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJbm9tbXVfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm05NDZfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTk0Nl9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm05NDZfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUwppbmRleCBiZTZjMTFkLi4yODU0NWMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCkBAIC02NCw3ICs2NCw3IEBACiAJCS50eXBlCWFybTl0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTl0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJCS53b3JkCW5vbW11X2Vhcmx5X2Fib3J0Ci0JCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkJLndvcmQJbGVnYWN5X3BhYm9ydAogCQkud29yZAljcHVfYXJtOXRkbWlfcHJvY19pbml0CiAJCS53b3JkCWNwdV9hcm05dGRtaV9wcm9jX2ZpbgogCQkud29yZAljcHVfYXJtOXRkbWlfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUwppbmRleCAwOGI4YTk1Li4wOGY1YWMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkudHlwZQlmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfZmE1MjZfcHJvY19pbml0CiAJLndvcmQJY3B1X2ZhNTI2X3Byb2NfZmluCiAJLndvcmQJY3B1X2ZhNTI2X3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMgYi9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKaW5kZXggMGZlMWY4Zi4uZDBkNzc5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJLnR5cGUJZmVyb2Nlb25fcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogZmVyb2Nlb25fcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NXRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9mZXJvY2Vvbl9wcm9jX2luaXQKIAkud29yZAljcHVfZmVyb2Nlb25fcHJvY19maW4KIAkud29yZAljcHVfZmVyb2Nlb25fcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCmluZGV4IDU0MGY1MDcuLjUyYjVmZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUwpAQCAtMzU5LDcgKzM1OSw3IEBACiAJLnR5cGUJbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIG1vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY1dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X21vaGF3a19wcm9jX2luaXQKIAkud29yZAljcHVfbW9oYXdrX3Byb2NfZmluCiAJLndvcmQJY3B1X21vaGF3a19yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCmluZGV4IDkwYTdlNTIuLjdiNzA2YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKQEAgLTE5OSw3ICsxOTksNyBAQAogCS50eXBlCXNhMTEwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHNhMTEwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9zYTExMF9wcm9jX2luaXQKIAkud29yZAljcHVfc2ExMTBfcHJvY19maW4KIAkud29yZAljcHVfc2ExMTBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCmluZGV4IDQ1MWUyZDkuLmVlNzcwMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJLnR5cGUJc2ExMTAwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHNhMTEwMF9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfc2ExMTAwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9zYTExMDBfcHJvY19maW4KIAkud29yZAljcHVfc2ExMTAwX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKaW5kZXggNTI0ZGRhZS4uNzBmNzVkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwpAQCAtMzIsOCArMzIsMTAgQEAKIAogI2lmbmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIFRUQl9GTEFHUwlUVEJfUkdOX1dCV0EKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCCiAjZWxzZQogI2RlZmluZSBUVEJfRkxBR1MJVFRCX1JHTl9XQldBfFRUQl9TCisjZGVmaW5lIFBNRF9GTEFHUwlQTURfU0VDVF9XQldBfFBNRF9TRUNUX1MKICNlbmRpZgogCiBFTlRSWShjcHVfdjZfcHJvY19pbml0KQpAQCAtMTkxLDcgKzE5Myw3IEBACiAJLnR5cGUJdjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkodjZfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAl2Nl9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAl2Nl9wYWJvcnQKIAkud29yZAljcHVfdjZfcHJvY19pbml0CiAJLndvcmQJY3B1X3Y2X3Byb2NfZmluCiAJLndvcmQJY3B1X3Y2X3Jlc2V0CkBAIC0yMjIsMTAgKzIyNCw5IEBACiAJLmxvbmcJMHgwMDA3YjAwMAogCS5sb25nCTB4MDAwN2YwMDAKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCi0JCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCi0JCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCi0JCVBNRF9TRUNUX0FQX1JFQUQKKwkJUE1EX1NFQ1RfQVBfUkVBRCB8IFwKKwkJUE1EX0ZMQUdTCiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAogCQlQTURfU0VDVF9YTiB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKaW5kZXggZjNmYTFjMy4uM2EyODUyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwpAQCAtMzMsOSArMzMsMTEgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogLyogUFRXcyBjYWNoZWFibGUsIGlubmVyIFdCIG5vdCBzaGFyZWFibGUsIG91dGVyIFdCIG5vdCBzaGFyZWFibGUgKi8KICNkZWZpbmUgVFRCX0ZMQUdTCVRUQl9JUkdOX1dCfFRUQl9SR05fT0NfV0IKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCCiAjZWxzZQogLyogUFRXcyBjYWNoZWFibGUsIGlubmVyIFdCV0Egc2hhcmVhYmxlLCBvdXRlciBXQldBIG5vdCBzaGFyZWFibGUgKi8KICNkZWZpbmUgVFRCX0ZMQUdTCVRUQl9JUkdOX1dCV0F8VFRCX1N8VFRCX05PU3xUVEJfUkdOX09DX1dCV0EKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCV0F8UE1EX1NFQ1RfUwogI2VuZGlmCiAKIEVOVFJZKGNwdV92N19wcm9jX2luaXQpCkBAIC0xODQsOSArMTg2LDEwIEBACiAgKi8KIF9fdjdfc2V0dXA6CiAjaWZkZWYgQ09ORklHX1NNUAotCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDEJCUAgRW5hYmxlIFNNUC9uQU1QIG1vZGUgYW5kCi0Jb3JyCXIwLCByMCwgIygxIDw8IDYpIHwgKDEgPDwgMCkJQCBUTEIgb3BzIGJyb2FkY2FzdGluZwotCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDEKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAxCisJdHN0CXIwLCAjKDEgPDwgNikJCQlAIFNNUC9uQU1QIG1vZGUgZW5hYmxlZD8KKwlvcnJlcQlyMCwgcjAsICMoMSA8PCA2KSB8ICgxIDw8IDApCUAgRW5hYmxlIFNNUC9uQU1QIG1vZGUgYW5kCisJbWNyZXEJcDE1LCAwLCByMCwgYzEsIGMwLCAxCQlAIFRMQiBvcHMgYnJvYWRjYXN0aW5nCiAjZW5kaWYKIAlhZHIJcjEyLCBfX3Y3X3NldHVwX3N0YWNrCQlAIHRoZSBsb2NhbCBzdGFjawogCXN0bWlhCXIxMiwge3IwLXI1LCByNywgcjksIHIxMSwgbHJ9CkBAIC0yOTUsNyArMjk4LDcgQEAKIAkudHlwZQl2N19wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWSh2N19wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY3X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X2lmYXIKKwkud29yZAl2N19wYWJvcnQKIAkud29yZAljcHVfdjdfcHJvY19pbml0CiAJLndvcmQJY3B1X3Y3X3Byb2NfZmluCiAJLndvcmQJY3B1X3Y3X3Jlc2V0CkBAIC0zMjYsMTAgKzMyOSw5IEBACiAJLmxvbmcJMHgwMDBmMDAwMAkJQCBSZXF1aXJlZCBJRCB2YWx1ZQogCS5sb25nCTB4MDAwZjAwMDAJCUAgTWFzayBmb3IgSUQKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCi0JCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCi0JCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCi0JCVBNRF9TRUNUX0FQX1JFQUQKKwkJUE1EX1NFQ1RfQVBfUkVBRCB8IFwKKwkJUE1EX0ZMQUdTCiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAogCQlQTURfU0VDVF9YTiB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCmluZGV4IDMzNTE1YzIuLjIwMjhmMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCkBAIC00MjgsNyArNDI4LDcgQEAKIAkudHlwZQl4c2MzX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHhzYzNfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAl2NXRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV94c2MzX3Byb2NfaW5pdAogCS53b3JkCWNwdV94c2MzX3Byb2NfZmluCiAJLndvcmQJY3B1X3hzYzNfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IDQyMzM5NDIuLmYwNTZjMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtNTExLDcgKzUxMSw3IEBACiAJLnR5cGUJeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY1dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X3hzY2FsZV9wcm9jX2luaXQKIAkud29yZAljcHVfeHNjYWxlX3Byb2NfZmluCiAJLndvcmQJY3B1X3hzY2FsZV9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKaW5kZXggZmU1ODEzOC4uZjdkMmVjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCkBAIC0zMyw2ICszMyw5IEBACiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKIAkzLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfQkNNUklORworCUlSUV9QTVVJUlEsIC8qIGZvciBCQ01SSU5HLCBBUk0gUE1VIGludGVycnVwdCBpcyA0MyAqLworI2VuZGlmCiB9OwogCiBzdGF0aWMgdm9pZCBhcm12Nl9wbXVfc3RvcCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3AvcGNpLmMgYi9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYwppbmRleCA3N2ZhN2NjLi5jZTMxZjMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYworKysgYi9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYwpAQCAtMjU3LDcgKzI1Nyw4IEBACiAJKklPUDNYWF9PVU1XVFZSMCA9IDA7CiAKIAkvKiBPdXRib3VuZCB3aW5kb3cgMSAqLwotCSpJT1AzWFhfT01XVFZSMSA9IElPUDNYWF9QQ0lfTE9XRVJfTUVNX0JBICsgSU9QM1hYX1BDSV9NRU1fV0lORE9XX1NJWkU7CisJKklPUDNYWF9PTVdUVlIxID0gSU9QM1hYX1BDSV9MT1dFUl9NRU1fQkEgKworCQkJICBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRSAvIDI7CiAJKklPUDNYWF9PVU1XVFZSMSA9IDA7CiAKIAkvKiBCQVIgMyAoIERpc2FibGVkICkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYwppbmRleCAzNjk1YmJlLi44ZGE5NWQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCkBAIC04NSw3ICs4NSw3IEBACiB7CiAJdTMyIHRpbWVyX2N0bDsKIAotCXRpY2tzX3Blcl9qaWZmeSA9ICh0aWNrX3JhdGUgKyBIWi8yKSAvIEhaOworCXRpY2tzX3Blcl9qaWZmeSA9IERJVl9ST1VORF9DTE9TRVNUKHRpY2tfcmF0ZSwgSFopOwogCXRpY2tzX3Blcl91c2VjID0gdGlja19yYXRlIC8gMTAwMDAwMDsKIAluZXh0X2ppZmZ5X3RpbWUgPSAweGZmZmZmZmZmOwogCWlvcF90aWNrX3JhdGUgPSB0aWNrX3JhdGU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCmluZGV4IDE4NjhjMGQuLjM0MTIzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAl9CiAKIAkvKiBGSVhNRTogd2hhdCdzIHRoZSBhY3R1YWwgdHJhbnNpdGlvbiB0aW1lPyAqLwotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMCAqIDEwMDAgKiAxMDAwOworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAzMDAgKiAxMDAwOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggZmQzMTU0YS4uNjhlYWFlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtNjkxLDEzICs2OTEsMTYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9lbmFibGVfaXJxX2xjaChpbnQgbGNoKQogewogCXUzMiB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghY3B1X2NsYXNzX2lzX29tYXAyKCkpCiAJCXJldHVybjsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAJdmFsID0gZG1hX3JlYWQoSVJRRU5BQkxFX0wwKTsKIAl2YWwgfD0gMSA8PCBsY2g7CiAJZG1hX3dyaXRlKHZhbCwgSVJRRU5BQkxFX0wwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiB9CiAKIGludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLApAQCAtNzk5LDEwICs4MDIsMTMgQEAKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgewogCQl1MzIgdmFsOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCQl2YWwgPSBkbWFfcmVhZChJUlFFTkFCTEVfTDApOwogCQl2YWwgJj0gfigxIDw8IGxjaCk7CiAJCWRtYV93cml0ZSh2YWwsIElSUUVOQUJMRV9MMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAogCQkvKiBDbGVhciB0aGUgQ1NSIHJlZ2lzdGVyIGFuZCBJUlEgc3RhdHVzIHJlZ2lzdGVyICovCiAJCWRtYV93cml0ZShPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0ssIENTUihsY2gpKTsKQEAgLTgyOSwxMCArODM1LDEwIEBACiAgKgogICogQHBhcmFtIGFyYl9yYXRlCiAgKiBAcGFyYW0gbWF4X2ZpZm9fZGVwdGgKLSAqIEBwYXJhbSB0cGFyYW1zIC0gTnVtYmVyIG9mIHRoZXJlYWRzIHRvIHJlc2VydmUgOiBETUFfVEhSRUFEX1JFU0VSVkVfTk9STQotICogCQkJCQkJICAgIERNQV9USFJFQURfUkVTRVJWRV9PTkVUCi0gKiAJCQkJCQkgICAgRE1BX1RIUkVBRF9SRVNFUlZFX1RXT1QKLSAqIAkJCQkJCSAgICBETUFfVEhSRUFEX1JFU0VSVkVfVEhSRUVUCisgKiBAcGFyYW0gdHBhcmFtcyAtIE51bWJlciBvZiB0aHJlYWRzIHRvIHJlc2VydmUgOiBETUFfVEhSRUFEX1JFU0VSVkVfTk9STQorICogCQkJCQkJICAgRE1BX1RIUkVBRF9SRVNFUlZFX09ORVQKKyAqIAkJCQkJCSAgIERNQV9USFJFQURfUkVTRVJWRV9UV09UCisgKiAJCQkJCQkgICBETUFfVEhSRUFEX1JFU0VSVkVfVEhSRUVUCiAgKi8KIHZvaWQKIG9tYXBfZG1hX3NldF9nbG9iYWxfcGFyYW1zKGludCBhcmJfcmF0ZSwgaW50IG1heF9maWZvX2RlcHRoLCBpbnQgdHBhcmFtcykKQEAgLTg0NCwxMSArODUwLDE0IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAobWF4X2ZpZm9fZGVwdGggPT0gMCkKKwkJbWF4X2ZpZm9fZGVwdGggPSAxOwogCWlmIChhcmJfcmF0ZSA9PSAwKQogCQlhcmJfcmF0ZSA9IDE7CiAKLQlyZWcgPSAoYXJiX3JhdGUgJiAweGZmKSA8PCAxNjsKLQlyZWcgfD0gKDB4ZmYgJiBtYXhfZmlmb19kZXB0aCk7CisJcmVnID0gMHhmZiAmIG1heF9maWZvX2RlcHRoOworCXJlZyB8PSAoMHgzICYgdHBhcmFtcykgPDwgMTI7CisJcmVnIHw9IChhcmJfcmF0ZSAmIDB4ZmYpIDw8IDE2OwogCiAJZG1hX3dyaXRlKHJlZywgR0NSKTsKIH0KQEAgLTk3NSw2ICs5ODQsMTQgQEAKIHsKIAl1MzIgbDsKIAorCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOworCisJbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwlsICY9IH5PTUFQX0RNQV9DQ1JfRU47CisJZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKKwogCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgewogCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2ggPSBsY2g7CiAJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9ETUE0X0xPR0lDQUxfRE1BX0NIX0NPVU5UXTsKQEAgLTk5MiwxOCArMTAwOSw4IEBACiAJCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOwogCQkJY3VyX2xjaCA9IG5leHRfbGNoOwogCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7Ci0KLQkJcmV0dXJuOwogCX0KIAotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOwotCi0JbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKLQlsICY9IH5PTUFQX0RNQV9DQ1JfRU47Ci0JZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKLQogCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zdG9wX2RtYSk7CkBAIC0xMTA3LDYgKzExMTQsMTQgQEAKIHsKIAlpbnQgbGNoOwogCisJLyoKKwkgKiBPbiBPTUFQMTUxMCwgaW50ZXJuYWwgTENEIGNvbnRyb2xsZXIgd2lsbCBzdGFydCB0aGUgdHJhbnNmZXIKKwkgKiB3aGVuIGl0IGdldHMgZW5hYmxlZCwgc28gYXNzdW1lIERNQSBydW5uaW5nIGlmIExDRCBlbmFibGVkLgorCSAqLworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJaWYgKG9tYXBfcmVhZHcoMHhmZmZlYzAwMCArIDB4MDApICYgKDEgPDwgMCkpCisJCQlyZXR1cm4gMTsKKwogCS8qIENoZWNrIGlmIExDRCBETUEgaXMgcnVubmluZyAqLwogCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKIAkJaWYgKG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgT01BUF9ETUFfQ0NSX0VOKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggNjkzODM5Yy4uN2MzNDViNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua184NTBbN10gPSB7Ci0JeyBPTUFQMV9NUFVJT19CQVNFLCAgICAgSU5UXzg1MF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsCU1FVEhPRF9NUFVJTyB9LAorCXsgT01BUDFfTVBVSU9fVkJBU0UsICAgICBJTlRfODUwX01QVUlPLAkgICAgSUhfTVBVSU9fQkFTRSwJTUVUSE9EX01QVUlPIH0sCiAJeyBPTUFQODUwX0dQSU8xX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzEsICBJSF9HUElPX0JBU0UsCU1FVEhPRF9HUElPXzg1MCB9LAogCXsgT01BUDg1MF9HUElPMl9CQVNFLCAgSU5UXzg1MF9HUElPX0JBTksyLCAgSUhfR1BJT19CQVNFICsgMzIsCU1FVEhPRF9HUElPXzg1MCB9LAogCXsgT01BUDg1MF9HUElPM19CQVNFLCAgSU5UXzg1MF9HUElPX0JBTkszLCAgSUhfR1BJT19CQVNFICsgNjQsCU1FVEhPRF9HUElPXzg1MCB9LApAQCAtMzczLDcgKzM3Myw3IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tfZ3BpbyhpbnQgZ3BpbykKIHsKLQlpZiAodW5saWtlbHkoZ3Bpb192YWxpZChncGlvKSkgPCAwKSB7CisJaWYgKHVubGlrZWx5KGdwaW9fdmFsaWQoZ3BpbykgPCAwKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm9tYXAtZ3BpbzogaW52YWxpZCBHUElPICVkXG4iLCBncGlvKTsKIAkJZHVtcF9zdGFjaygpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCAxMWU3M2Q5Li5mMTI5ZWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTMwMywzMiArMzAzLDIxIEBACiAjZGVmaW5lIGNwdV9pc19vbWFwMjQzMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMzQzMCgpCQkwCiAKLSNpZiBkZWZpbmVkKE1VTFRJX09NQVAxKQotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCi0jICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKLSMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQlpc19vbWFwNzMwKCkKLSMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwODUwCi0jICBkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJaXNfb21hcDg1MCgpCi0jIGVuZGlmCi0jZWxzZQotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCi0jICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKLSMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQkxCi0jIGVuZGlmCi0jZW5kaWYKLSNlbHNlCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKLSMgIHVuZGVmICBjcHVfaXNfb21hcDg1MAotIyAgZGVmaW5lIGNwdV9pc19vbWFwODUwKCkJCTEKLSMgZW5kaWYKLSNlbmRpZgotCiAvKgogICogV2hldGhlciB3ZSBoYXZlIE1VTFRJX09NQVAxIG9yIG5vdCwgd2Ugc3RpbGwgbmVlZCB0byBkaXN0aW5ndWlzaAotICogYmV0d2VlbiAzMzAgdnMuIDE1MTAgYW5kIDE2MTFCLzU5MTIgdnMuIDE3MTAuCisgKiBiZXR3ZWVuIDczMCB2cyA4NTAsIDMzMCB2cy4gMTUxMCBhbmQgMTYxMUIvNTkxMiB2cy4gMTcxMC4KICAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQorIyB1bmRlZiAgY3B1X2lzX29tYXA3MzAKKyMgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjIHVuZGVmICBjcHVfaXNfb21hcDg1MAorIyBkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJaXNfb21hcDg1MCgpCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiAjIHVuZGVmICBjcHVfaXNfb21hcDMxMAogIyB1bmRlZiAgY3B1X2lzX29tYXAxNTEwCkBAIC00MzMsMyArNDIyLDUgQEAKIAogaW50IG9tYXBfY2hpcF9pcyhzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9jaSk7CiB2b2lkIG9tYXAyX2NoZWNrX3JldmlzaW9uKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2tleXBhZC5oCmluZGV4IDQ1ZWEzYWUuLjNhZTUyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9rZXlwYWQuaApAQCAtMTAsNiArMTAsOCBAQAogI2lmbmRlZiBBU01BUk1fQVJDSF9LRVlQQURfSAogI2RlZmluZSBBU01BUk1fQVJDSF9LRVlQQURfSAogCisjd2FybmluZzogUGxlYXNlIHVwZGF0ZSB0aGUgYm9hcmQgdG8gdXNlIG1hdHJpeF9rZXlwYWQuaCBpbnN0ZWFkCisKIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgewogCWludCByb3dzOwogCWludCBjb2xzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKaW5kZXggOThkZmFiNi4uMGY0OWQyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCkBAIC04NDAsMTIgKzg0MCwxNCBAQAogCSAqLwogCUFGMjZfMzRYWF9HUElPMCwKIAlBRjIyXzM0WFhfR1BJTzksCisJQUc5XzM0WFhfR1BJTzIzLAogCUFIOF8zNFhYX0dQSU8yOSwKIAlVOF8zNFhYX0dQSU81NF9PVVQsCiAJVThfMzRYWF9HUElPNTRfRE9XTiwKIAlMOF8zNFhYX0dQSU82MywKIAlHMjVfMzRYWF9HUElPODZfT1VULAogCUFHNF8zNFhYX0dQSU8xMzRfT1VULAorCUFGNF8zNFhYX0dQSU8xMzVfT1VULAogCUFFNF8zNFhYX0dQSU8xMzZfT1VULAogCUFGNl8zNFhYX0dQSU8xNDBfVVAsCiAJQUU2XzM0WFhfR1BJTzE0MSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaAppbmRleCA2MjcxZDg1Li5mYTY0NjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCkBAIC0xMzUsNiArMTM1LDggQEAKIAogaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKIAkJCXZvaWQgKnVzZXIpOworaW50IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdXNlciksCisJCQl2b2lkICp1c2VyKTsKIAogaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKIGludCBwd3JkbV9kZWxfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW9tbXUuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCmluZGV4IDRiNjAxMjcuLjk0NTg0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCkBAIC02NjQsNyArNjY0LDcgQEAKIAkJbmVudCA9IDE7IC8qIGZvciB0aGUgbmV4dCBMMSBlbnRyeSAqLwogCX0gZWxzZSB7CiAJCWJ5dGVzID0gSU9QR0RfU0laRTsKLQkJaWYgKCppb3BnZCAmIElPUEdEX1NVUEVSKSB7CisJCWlmICgoKmlvcGdkICYgSU9QR0RfU1VQRVIpID09IElPUEdEX1NVUEVSKSB7CiAJCQluZW50ICo9IDE2OwogCQkJLyogcmV3aW5kIHRvIHRoZSAxc3QgZW50cnkgKi8KIAkJCWlvcGdkID0gKHUzMiAqKSgodTMyKWlvcGdkICYgSU9TVVBFUl9NQVNLKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb3ZtbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKaW5kZXggNmZjNTJmYy4uZGMzZmFjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqCSd2YSc6CW1wdSB2aXJ0dWFsIGFkZHJlc3MKICAqCiAgKgknYyc6CWNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEKLSAqCSdkJzoJZGljb250aWd1b3VzIG1lbW9yeSBhcmVhCisgKgknZCc6CWRpc2NvbnRpZ3VvdXMgbWVtb3J5IGFyZWEKICAqCSdhJzoJYW5vbnltb3VzIG1lbW9yeSBhbGxvY2F0aW9uCiAgKgknKCknOglvcHRpb25hbCBmZWF0dXJlCiAgKgpAQCAtMTk5LDcgKzE5OSw4IEBACiAJCXZhICs9IGJ5dGVzOwogCX0KIAotCWZsdXNoX2NhY2hlX3ZtYXAobmV3LT5hZGRyLCBuZXctPmFkZHIgKyB0b3RhbCk7CisJZmx1c2hfY2FjaGVfdm1hcCgodW5zaWduZWQgbG9uZyluZXctPmFkZHIsCisJCQkJKHVuc2lnbmVkIGxvbmcpKG5ldy0+YWRkciArIHRvdGFsKSk7CiAJcmV0dXJuIG5ldy0+YWRkcjsKIAogZXJyX291dDoKQEAgLTM2Miw4ICszNjMsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAJdmEgPSBhcmVhLT52YTsKLQltdXRleF91bmxvY2soJm9iai0+bW1hcF9sb2NrKTsKIG91dDoKKwltdXRleF91bmxvY2soJm9iai0+bW1hcF9sb2NrKTsKKwogCXJldHVybiB2YTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRhX3RvX3ZhKTsKQEAgLTM5MCwxNCArMzkyLDE0IEBACiAJfQogCiAJdmFfZW5kID0gX3ZhICsgUEFHRV9TSVpFICogaTsKLQlmbHVzaF9jYWNoZV92bWFwKF92YSwgdmFfZW5kKTsKKwlmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKV92YSwgKHVuc2lnbmVkIGxvbmcpdmFfZW5kKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNndGFibGVfZHJhaW5fdm1hbGxvYyhzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKIHsKIAkvKgogCSAqIEFjdHVhbGx5IHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBhdCBhbGwsIGp1c3QgZXhpc3RzIGZvcgotCSAqIGNvbnNpc3RlbmN5IG9mIHRoZSBjb2RlIHJlYWRpYmlsaXR5LgorCSAqIGNvbnNpc3RlbmN5IG9mIHRoZSBjb2RlIHJlYWRhYmlsaXR5LgogCSAqLwogCUJVR19PTighc2d0KTsKIH0KQEAgLTQzMyw3ICs0MzUsNyBAQAogewogCS8qCiAJICogQWN0dWFsbHkgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGF0IGFsbCwganVzdCBleGlzdHMgZm9yCi0JICogY29uc2lzdGVuY3kgb2YgdGhlIGNvZGUgcmVhZGliaWxpdHkKKwkgKiBjb25zaXN0ZW5jeSBvZiB0aGUgY29kZSByZWFkYWJpbGl0eQogCSAqLwogCUJVR19PTighc2d0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKaW5kZXggODhhYzk3Ni4uZTY2NGI5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKQEAgLTU5NSw3ICs1OTUsNyBAQAogCXJ4ICY9IDE7CiAJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgUkNDUik7Ci0JCXcgfD0gKHR4ID8gUkRJU0FCTEUgOiAwKTsKKwkJdyB8PSAocnggPyBSRElTQUJMRSA6IDApOwogCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFJDQ1IsIHcpOwogCX0KIAl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IDkyNWY2NDcuLjc1ZDFmMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMjcwLDcgKzI3MCw4IEBACiAJb21hcF9zcmFtX2NlaWwgLT0gc2l6ZTsKIAlvbWFwX3NyYW1fY2VpbCA9IFJPVU5EX0RPV04ob21hcF9zcmFtX2NlaWwsIHNpemVvZih2b2lkICopKTsKIAltZW1jcHkoKHZvaWQgKilvbWFwX3NyYW1fY2VpbCwgc3RhcnQsIHNpemUpOwotCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzdGFydCwgKHVuc2lnbmVkIGxvbmcpKHN0YXJ0ICsgc2l6ZSkpOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylvbWFwX3NyYW1fY2VpbCwKKwkJKHVuc2lnbmVkIGxvbmcpKG9tYXBfc3JhbV9jZWlsICsgc2l6ZSkpOwogCiAJcmV0dXJuICh2b2lkICopb21hcF9zcmFtX2NlaWw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCmluZGV4IDcwYWVlZTQuLjI5NzU3OTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCkBAIC0xNywyMiArMTcsMjY2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKKyNkZWZpbmUgRE1BX0RFQlVHX05BTUUJCSJweGFfZG1hIgorI2RlZmluZSBETUFfTUFYX1JFUVVFU1RFUlMJNjQKKwogc3RydWN0IGRtYV9jaGFubmVsIHsKIAljaGFyICpuYW1lOwogCXB4YV9kbWFfcHJpbyBwcmlvOwogCXZvaWQgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICopOwogCXZvaWQgKmRhdGE7CisJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCAqZG1hX2NoYW5uZWxzOwogc3RhdGljIGludCBudW1fZG1hX2NoYW5uZWxzOwogCisvKgorICogRGVidWcgZnMKKyAqLworI2lmZGVmIENPTkZJR19ERUJVR19GUworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRiZ2ZzX3Jvb3QsICpkYmdmc19zdGF0ZSwgKipkYmdmc19jaGFuOworCitzdGF0aWMgaW50IGRiZ19zaG93X3JlcXVlc3Rlcl9jaGFuKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKK3sKKwlpbnQgcG9zID0gMDsKKwlpbnQgY2hhbiA9IChpbnQpcy0+cHJpdmF0ZTsKKwlpbnQgaTsKKwl1MzIgZHJjbXI7CisKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiRE1BIGNoYW5uZWwgJWQgcmVxdWVzdGVycyBsaXN0IDpcbiIsIGNoYW4pOworCWZvciAoaSA9IDA7IGkgPCBETUFfTUFYX1JFUVVFU1RFUlM7IGkrKykgeworCQlkcmNtciA9IERSQ01SKGkpOworCQlpZiAoKGRyY21yICYgRFJDTVJfQ0hMTlVNKSA9PSBjaGFuKQorCQkJcG9zICs9IHNlcV9wcmludGYocywgIlx0UmVxdWVzdGVyICVkIChNQVBWTEQ9JWQpXG4iLCBpLAorCQkJCQkgICEhKGRyY21yICYgRFJDTVJfTUFQVkxEKSk7CisJfQorCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19idXJzdF9mcm9tX2RjbWQodTMyIGRjbWQpCit7CisJaW50IGJ1cnN0ID0gKGRjbWQgPj4gMTYpICYgMHgzOworCisJcmV0dXJuIGJ1cnN0ID8gNCA8PCBidXJzdCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfcGh5c192YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIHBmbl92YWxpZChfX3BoeXNfdG9fcGZuKGFkZHIpKTsKK30KKworI2RlZmluZSBEQ1NSX1NUUihmbGFnKSAoZGNzciAmIERDU1JfIyNmbGFnID8gI2ZsYWciICIgOiAiIikKKyNkZWZpbmUgRENNRF9TVFIoZmxhZykgKGRjbWQgJiBEQ01EXyMjZmxhZyA/ICNmbGFnIiAiIDogIiIpCisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfZGVzY3JpcHRvcnMoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCWludCBwb3MgPSAwOworCWludCBjaGFuID0gKGludClzLT5wcml2YXRlOworCWludCBpLCBtYXhfc2hvdyA9IDIwLCBidXJzdCwgd2lkdGg7CisJdTMyIGRjbWQ7CisJdW5zaWduZWQgbG9uZyBwaHlzX2Rlc2M7CisJc3RydWN0IHB4YV9kbWFfZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFubmVsc1tjaGFuXS5sb2NrLCBmbGFncyk7CisJcGh5c19kZXNjID0gRERBRFIoY2hhbik7CisKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiRE1BIGNoYW5uZWwgJWQgZGVzY3JpcHRvcnMgOlxuIiwgY2hhbik7CisJcG9zICs9IHNlcV9wcmludGYocywgIlslMDNkXSBGaXJzdCBkZXNjcmlwdG9yIHVua25vd25cbiIsIDApOworCWZvciAoaSA9IDE7IGkgPCBtYXhfc2hvdyAmJiBpc19waHlzX3ZhbGlkKHBoeXNfZGVzYyk7IGkrKykgeworCQlkZXNjID0gcGh5c190b192aXJ0KHBoeXNfZGVzYyk7CisJCWRjbWQgPSBkZXNjLT5kY21kOworCQlidXJzdCA9IGRiZ19idXJzdF9mcm9tX2RjbWQoZGNtZCk7CisJCXdpZHRoID0gKDEgPDwgKChkY21kID4+IDE0KSAmIDB4MykpID4+IDE7CisKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlslMDNkXSBEZXNjIGF0ICUwOGx4KHZpcnQgJXApXG4iLAorCQkJCSAgaSwgcGh5c19kZXNjLCBkZXNjKTsKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlx0RERBRFIgPSAlMDh4XG4iLCBkZXNjLT5kZGFkcik7CisJCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERTQURSID0gJTA4eFxuIiwgZGVzYy0+ZHNhZHIpOworCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHREVEFEUiA9ICUwOHhcbiIsIGRlc2MtPmR0YWRyKTsKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlx0RENNRCAgPSAlMDh4ICglcyVzJXMlcyVzJXMlc2J1cnN0PSVkIgorCQkJCSAgIiB3aWR0aD0lZCBsZW49JWQpXG4iLAorCQkJCSAgZGNtZCwKKwkJCQkgIERDTURfU1RSKElOQ1NSQ0FERFIpLCBEQ01EX1NUUihJTkNUUkdBRERSKSwKKwkJCQkgIERDTURfU1RSKEZMT1dTUkMpLCBEQ01EX1NUUihGTE9XVFJHKSwKKwkJCQkgIERDTURfU1RSKFNUQVJUSVJRRU4pLCBEQ01EX1NUUihFTkRJUlFFTiksCisJCQkJICBEQ01EX1NUUihFTkRJQU4pLCBidXJzdCwgd2lkdGgsCisJCQkJICBkY21kICYgRENNRF9MRU5HVEgpOworCQlwaHlzX2Rlc2MgPSBkZXNjLT5kZGFkcjsKKwl9CisJaWYgKGkgPT0gbWF4X3Nob3cpCisJCXBvcyArPSBzZXFfcHJpbnRmKHMsICJbJTAzZF0gRGVzYyBhdCAlMDhseCAuLi4gbWF4IGRpc3BsYXkgcmVhY2hlZFxuIiwKKwkJCQkgIGksIHBoeXNfZGVzYyk7CisJZWxzZQorCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiWyUwM2RdIERlc2MgYXQgJTA4bHggaXMgJXNcbiIsCisJCQkJICBpLCBwaHlzX2Rlc2MsIHBoeXNfZGVzYyA9PSBEREFEUl9TVE9QID8KKwkJCQkgICJEREFEUl9TVE9QIiA6ICJpbnZhbGlkIik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbm5lbHNbY2hhbl0ubG9jaywgZmxhZ3MpOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfY2hhbl9zdGF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCit7CisJaW50IHBvcyA9IDA7CisJaW50IGNoYW4gPSAoaW50KXMtPnByaXZhdGU7CisJdTMyIGRjc3IsIGRjbWQ7CisJaW50IGJ1cnN0LCB3aWR0aDsKKwlzdGF0aWMgY2hhciAqc3RyX3ByaW9bXSA9IHsgImhpZ2giLCAibm9ybWFsIiwgImxvdyIgfTsKKworCWRjc3IgPSBEQ1NSKGNoYW4pOworCWRjbWQgPSBEQ01EKGNoYW4pOworCWJ1cnN0ID0gZGJnX2J1cnN0X2Zyb21fZGNtZChkY21kKTsKKwl3aWR0aCA9ICgxIDw8ICgoZGNtZCA+PiAxNCkgJiAweDMpKSA+PiAxOworCisJcG9zICs9IHNlcV9wcmludGYocywgIkRNQSBjaGFubmVsICVkXG4iLCBjaGFuKTsKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHRQcmlvcml0eSA6ICVzXG4iLAorCQkJICBzdHJfcHJpb1tkbWFfY2hhbm5lbHNbY2hhbl0ucHJpb10pOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdFVuYWxpZ25lZCB0cmFuc2ZlciBiaXQ6ICVzXG4iLAorCQkJICBEQUxHTiAmICgxIDw8IGNoYW4pID8gInllcyIgOiAibm8iKTsKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHREQ1NSICA9ICUwOHggKCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcylcbiIsCisJCQkgIGRjc3IsIERDU1JfU1RSKFJVTiksIERDU1JfU1RSKE5PREVTQyksCisJCQkgIERDU1JfU1RSKFNUT1BJUlFFTiksIERDU1JfU1RSKEVPUklSUUVOKSwKKwkJCSAgRENTUl9TVFIoRU9SSk1QRU4pLCBEQ1NSX1NUUihFT1JTVE9QRU4pLAorCQkJICBEQ1NSX1NUUihTRVRDTVBTVCksIERDU1JfU1RSKENMUkNNUFNUKSwKKwkJCSAgRENTUl9TVFIoQ01QU1QpLCBEQ1NSX1NUUihFT1JJTlRSKSwgRENTUl9TVFIoUkVRUEVORCksCisJCQkgIERDU1JfU1RSKFNUT1BTVEFURSksIERDU1JfU1RSKEVORElOVFIpLAorCQkJICBEQ1NSX1NUUihTVEFSVElOVFIpLCBEQ1NSX1NUUihCVVNFUlIpKTsKKworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERDTUQgID0gJTA4eCAoJXMlcyVzJXMlcyVzJXNidXJzdD0lZCB3aWR0aD0lZCIKKwkJCSAgIiBsZW49JWQpXG4iLAorCQkJICBkY21kLAorCQkJICBEQ01EX1NUUihJTkNTUkNBRERSKSwgRENNRF9TVFIoSU5DVFJHQUREUiksCisJCQkgIERDTURfU1RSKEZMT1dTUkMpLCBEQ01EX1NUUihGTE9XVFJHKSwKKwkJCSAgRENNRF9TVFIoU1RBUlRJUlFFTiksIERDTURfU1RSKEVORElSUUVOKSwKKwkJCSAgRENNRF9TVFIoRU5ESUFOKSwgYnVyc3QsIHdpZHRoLCBkY21kICYgRENNRF9MRU5HVEgpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERTQURSID0gJTA4eFxuIiwgRFNBRFIoY2hhbikpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERUQURSID0gJTA4eFxuIiwgRFRBRFIoY2hhbikpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdEREQURSID0gJTA4eFxuIiwgRERBRFIoY2hhbikpOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfc3RhdGUoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCWludCBwb3MgPSAwOworCisJLyogYmFzaWMgZGV2aWNlIHN0YXR1cyAqLworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJETUEgZW5naW5lIHN0YXR1c1xuIik7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0Q2hhbm5lbCBudW1iZXI6ICVkXG4iLCBudW1fZG1hX2NoYW5uZWxzKTsKKworCXJldHVybiBwb3M7Cit9CisKKyNkZWZpbmUgREJHRlNfRlVOQ19ERUNMKG5hbWUpIFwKK3N0YXRpYyBpbnQgZGJnX29wZW5fIyNuYW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSBcCit7IFwKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGJnX3Nob3dfIyNuYW1lLCBpbm9kZS0+aV9wcml2YXRlKTsgXAorfSBcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYmdfZm9wc18jI25hbWUgPSB7IFwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsIFwKKwkub3BlbgkJPSBkYmdfb3Blbl8jI25hbWUsIFwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywgXAorCS5yZWFkCQk9IHNlcV9yZWFkLCBcCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwgXAorfQorCitEQkdGU19GVU5DX0RFQ0woc3RhdGUpOworREJHRlNfRlVOQ19ERUNMKGNoYW5fc3RhdGUpOworREJHRlNfRlVOQ19ERUNMKGRlc2NyaXB0b3JzKTsKK0RCR0ZTX0ZVTkNfREVDTChyZXF1ZXN0ZXJfY2hhbik7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpweGFfZG1hX2RiZ19hbGxvY19jaGFuKGludCBjaCwgc3RydWN0IGRlbnRyeSAqY2hhbmRpcikKK3sKKwljaGFyIGNoYW5fbmFtZVsxMV07CisJc3RydWN0IGRlbnRyeSAqY2hhbiwgKmNoYW5fc3RhdGUgPSBOVUxMLCAqY2hhbl9kZXNjciA9IE5VTEw7CisJc3RydWN0IGRlbnRyeSAqY2hhbl9yZXFzID0gTlVMTDsKKwl2b2lkICpkdDsKKworCXNjbnByaW50ZihjaGFuX25hbWUsIHNpemVvZihjaGFuX25hbWUpLCAiJWQiLCBjaCk7CisJY2hhbiA9IGRlYnVnZnNfY3JlYXRlX2RpcihjaGFuX25hbWUsIGNoYW5kaXIpOworCWR0ID0gKHZvaWQgKiljaDsKKworCWlmIChjaGFuKQorCQljaGFuX3N0YXRlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGUiLCAwNDAwLCBjaGFuLCBkdCwKKwkJCQkJCSAmZGJnX2ZvcHNfY2hhbl9zdGF0ZSk7CisJaWYgKGNoYW5fc3RhdGUpCisJCWNoYW5fZGVzY3IgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkZXNjcmlwdG9ycyIsIDA0MDAsIGNoYW4sIGR0LAorCQkJCQkJICZkYmdfZm9wc19kZXNjcmlwdG9ycyk7CisJaWYgKGNoYW5fZGVzY3IpCisJCWNoYW5fcmVxcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlcXVlc3RlcnMiLCAwNDAwLCBjaGFuLCBkdCwKKwkJCQkJCSZkYmdfZm9wc19yZXF1ZXN0ZXJfY2hhbik7CisJaWYgKCFjaGFuX3JlcXMpCisJCWdvdG8gZXJyX3N0YXRlOworCisJcmV0dXJuIGNoYW47CisKK2Vycl9zdGF0ZToKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2hhbik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV9kbWFfaW5pdF9kZWJ1Z2ZzKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGRlbnRyeSAqY2hhbmRpcjsKKworCWRiZ2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoRE1BX0RFQlVHX05BTUUsIE5VTEwpOworCWlmIChJU19FUlIoZGJnZnNfcm9vdCkgfHwgIWRiZ2ZzX3Jvb3QpCisJCWdvdG8gZXJyX3Jvb3Q7CisKKwlkYmdmc19zdGF0ZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YXRlIiwgMDQwMCwgZGJnZnNfcm9vdCwgTlVMTCwKKwkJCQkJICAmZGJnX2ZvcHNfc3RhdGUpOworCWlmICghZGJnZnNfc3RhdGUpCisJCWdvdG8gZXJyX3N0YXRlOworCisJZGJnZnNfY2hhbiA9IGttYWxsb2Moc2l6ZW9mKCpkYmdmc19zdGF0ZSkgKiBudW1fZG1hX2NoYW5uZWxzLAorCQkJICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRiZ2ZzX3N0YXRlKQorCQlnb3RvIGVycl9hbGxvYzsKKworCWNoYW5kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNoYW5uZWxzIiwgZGJnZnNfcm9vdCk7CisJaWYgKCFjaGFuZGlyKQorCQlnb3RvIGVycl9jaGFuZGlyOworCisJZm9yIChpID0gMDsgaSA8IG51bV9kbWFfY2hhbm5lbHM7IGkrKykgeworCQlkYmdmc19jaGFuW2ldID0gcHhhX2RtYV9kYmdfYWxsb2NfY2hhbihpLCBjaGFuZGlyKTsKKwkJaWYgKCFkYmdmc19jaGFuW2ldKQorCQkJZ290byBlcnJfY2hhbnM7CisJfQorCisJcmV0dXJuOworZXJyX2NoYW5zOgorZXJyX2NoYW5kaXI6CisJa2ZyZWUoZGJnZnNfY2hhbik7CitlcnJfYWxsb2M6CitlcnJfc3RhdGU6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRiZ2ZzX3Jvb3QpOworZXJyX3Jvb3Q6CisJcHJfZXJyKCJweGFfZG1hOiBkZWJ1Z2ZzIGlzIG5vdCBhdmFpbGFibGVcbiIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHhhX2RtYV9jbGVhbnVwX2RlYnVnZnModm9pZCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGJnZnNfcm9vdCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHB4YV9kbWFfaW5pdF9kZWJ1Z2ZzKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcHhhX2RtYV9jbGVhbnVwX2RlYnVnZnModm9pZCkge30KKyNlbmRpZgorCiBpbnQgcHhhX3JlcXVlc3RfZG1hIChjaGFyICpuYW1lLCBweGFfZG1hX3ByaW8gcHJpbywKIAkJCXZvaWQgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICopLAogCQkJdm9pZCAqZGF0YSkKQEAgLTcxLDYgKzMxNSw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiBpOwogfQorRVhQT1JUX1NZTUJPTChweGFfcmVxdWVzdF9kbWEpOwogCiB2b2lkIHB4YV9mcmVlX2RtYSAoaW50IGRtYV9jaCkKIHsKQEAgLTg4LDI0ICszMzMsMjYgQEAKIAlkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lID0gTlVMTDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHB4YV9mcmVlX2RtYSk7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCWludCBpLCBkaW50ID0gRElOVDsKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2RtYV9jaGFubmVsczsgaSsrKSB7Ci0JCWlmIChkaW50ICYgKDEgPDwgaSkpIHsKLQkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9ICZkbWFfY2hhbm5lbHNbaV07Ci0JCQlpZiAoY2hhbm5lbC0+bmFtZSAmJiBjaGFubmVsLT5pcnFfaGFuZGxlcikgewotCQkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksIGNoYW5uZWwtPmRhdGEpOwotCQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsOgotCQkJCSAqIGxldCdzIGNsZWFyIHRoZSBpbnRlcnJ1cHRzIGFuZCBkaXNhYmxlIGl0LgotCQkJCSAqLwotCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJzcHVyaW91cyBJUlEgZm9yIERNQSBjaGFubmVsICVkXG4iLCBpKTsKLQkJCQlEQ1NSKGkpID0gRENTUl9TVEFSVElOVFJ8RENTUl9FTkRJTlRSfERDU1JfQlVTRVJSOwotCQkJfQorCXdoaWxlIChkaW50KSB7CisJCWkgPSBfX2ZmcyhkaW50KTsKKwkJZGludCAmPSAoZGludCAtIDEpOworCQljaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKKwkJaWYgKGNoYW5uZWwtPm5hbWUgJiYgY2hhbm5lbC0+aXJxX2hhbmRsZXIpIHsKKwkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksIGNoYW5uZWwtPmRhdGEpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsOgorCQkJICogbGV0J3MgY2xlYXIgdGhlIGludGVycnVwdHMgYW5kIGRpc2FibGUgaXQuCisJCQkgKi8KKwkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJzcHVyaW91cyBJUlEgZm9yIERNQSBjaGFubmVsICVkXG4iLCBpKTsKKwkJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7CiAJCX0KIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTI3LDYgKzM3NCw3IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9jaDsgaSsrKSB7CiAJCURDU1IoaSkgPSAwOwogCQlkbWFfY2hhbm5lbHNbaV0ucHJpbyA9IG1pbigoaSAmIDB4ZikgPj4gMiwgRE1BX1BSSU9fTE9XKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmRtYV9jaGFubmVsc1tpXS5sb2NrKTsKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGRtYV9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwgIkRNQSIsIE5VTEwpOwpAQCAtMTM1LDEwICszODMsOSBAQAogCQlrZnJlZShkbWFfY2hhbm5lbHMpOwogCQlyZXR1cm4gcmV0OwogCX0KLQogCW51bV9kbWFfY2hhbm5lbHMgPSBudW1fY2g7CisKKwlweGFfZG1hX2luaXRfZGVidWdmcygpOworCiAJcmV0dXJuIDA7CiB9Ci0KLUVYUE9SVF9TWU1CT0wocHhhX3JlcXVlc3RfZG1hKTsKLUVYUE9SVF9TWU1CT0wocHhhX2ZyZWVfZG1hKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaCBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaAppbmRleCA2NDAxOTQ2Li44NTdhNjgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCkBAIC0xNiw3ICsxNiw3IEBACiAjaWZuZGVmIF9fQVNNX1BMQVRfTUZQX0gKICNkZWZpbmUgX19BU01fUExBVF9NRlBfSAogCi0jZGVmaW5lIG1mcF90b19ncGlvKG0pCSgobSkgJSAxMjgpCisjZGVmaW5lIG1mcF90b19ncGlvKG0pCSgobSkgJSAyNTYpCiAKIC8qIGxpc3Qgb2YgYWxsIHRoZSBjb25maWd1cmFibGUgTUZQIHBpbnMgKi8KIGVudW0gewpAQCAtMTUwLDYgKzE1MCw3NCBAQAogCU1GUF9QSU5fR1BJTzEyNSwKIAlNRlBfUElOX0dQSU8xMjYsCiAJTUZQX1BJTl9HUElPMTI3LAorCisJTUZQX1BJTl9HUElPMTI4LAorCU1GUF9QSU5fR1BJTzEyOSwKKwlNRlBfUElOX0dQSU8xMzAsCisJTUZQX1BJTl9HUElPMTMxLAorCU1GUF9QSU5fR1BJTzEzMiwKKwlNRlBfUElOX0dQSU8xMzMsCisJTUZQX1BJTl9HUElPMTM0LAorCU1GUF9QSU5fR1BJTzEzNSwKKwlNRlBfUElOX0dQSU8xMzYsCisJTUZQX1BJTl9HUElPMTM3LAorCU1GUF9QSU5fR1BJTzEzOCwKKwlNRlBfUElOX0dQSU8xMzksCisJTUZQX1BJTl9HUElPMTQwLAorCU1GUF9QSU5fR1BJTzE0MSwKKwlNRlBfUElOX0dQSU8xNDIsCisJTUZQX1BJTl9HUElPMTQzLAorCU1GUF9QSU5fR1BJTzE0NCwKKwlNRlBfUElOX0dQSU8xNDUsCisJTUZQX1BJTl9HUElPMTQ2LAorCU1GUF9QSU5fR1BJTzE0NywKKwlNRlBfUElOX0dQSU8xNDgsCisJTUZQX1BJTl9HUElPMTQ5LAorCU1GUF9QSU5fR1BJTzE1MCwKKwlNRlBfUElOX0dQSU8xNTEsCisJTUZQX1BJTl9HUElPMTUyLAorCU1GUF9QSU5fR1BJTzE1MywKKwlNRlBfUElOX0dQSU8xNTQsCisJTUZQX1BJTl9HUElPMTU1LAorCU1GUF9QSU5fR1BJTzE1NiwKKwlNRlBfUElOX0dQSU8xNTcsCisJTUZQX1BJTl9HUElPMTU4LAorCU1GUF9QSU5fR1BJTzE1OSwKKwlNRlBfUElOX0dQSU8xNjAsCisJTUZQX1BJTl9HUElPMTYxLAorCU1GUF9QSU5fR1BJTzE2MiwKKwlNRlBfUElOX0dQSU8xNjMsCisJTUZQX1BJTl9HUElPMTY0LAorCU1GUF9QSU5fR1BJTzE2NSwKKwlNRlBfUElOX0dQSU8xNjYsCisJTUZQX1BJTl9HUElPMTY3LAorCU1GUF9QSU5fR1BJTzE2OCwKKwlNRlBfUElOX0dQSU8xNjksCisJTUZQX1BJTl9HUElPMTcwLAorCU1GUF9QSU5fR1BJTzE3MSwKKwlNRlBfUElOX0dQSU8xNzIsCisJTUZQX1BJTl9HUElPMTczLAorCU1GUF9QSU5fR1BJTzE3NCwKKwlNRlBfUElOX0dQSU8xNzUsCisJTUZQX1BJTl9HUElPMTc2LAorCU1GUF9QSU5fR1BJTzE3NywKKwlNRlBfUElOX0dQSU8xNzgsCisJTUZQX1BJTl9HUElPMTc5LAorCU1GUF9QSU5fR1BJTzE4MCwKKwlNRlBfUElOX0dQSU8xODEsCisJTUZQX1BJTl9HUElPMTgyLAorCU1GUF9QSU5fR1BJTzE4MywKKwlNRlBfUElOX0dQSU8xODQsCisJTUZQX1BJTl9HUElPMTg1LAorCU1GUF9QSU5fR1BJTzE4NiwKKwlNRlBfUElOX0dQSU8xODcsCisJTUZQX1BJTl9HUElPMTg4LAorCU1GUF9QSU5fR1BJTzE4OSwKKwlNRlBfUElOX0dQSU8xOTAsCisJTUZQX1BJTl9HUElPMTkxLAorCisJTUZQX1BJTl9HUElPMjU1ID0gMjU1LAorCiAJTUZQX1BJTl9HUElPMF8yLAogCU1GUF9QSU5fR1BJTzFfMiwKIAlNRlBfUElOX0dQSU8yXzIsCkBAIC0zMjUsOCArMzkzLDkgQEAKICNkZWZpbmUgTUZQX1BVTExfTE9XCQkoMHgxIDw8IDIxKQogI2RlZmluZSBNRlBfUFVMTF9ISUdICQkoMHgyIDw8IDIxKQogI2RlZmluZSBNRlBfUFVMTF9CT1RICQkoMHgzIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTF9NQVNLCQkoMHgzIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTCh4KQkJKCgoeCkgPj4gMjEpICYgMHgzKQorI2RlZmluZSBNRlBfUFVMTF9GTE9BVAkJKDB4NCA8PCAyMSkKKyNkZWZpbmUgTUZQX1BVTExfTUFTSwkJKDB4NyA8PCAyMSkKKyNkZWZpbmUgTUZQX1BVTEwoeCkJCSgoKHgpID4+IDIxKSAmIDB4NykKIAogI2RlZmluZSBNRlBfQ0ZHX0RFRkFVTFQJCShNRlBfQUYwIHwgTUZQX0RTMDNYIHwgTUZQX0xQTV9ERUZBVUxUIHxcCiAJCQkJIE1GUF9MUE1fRURHRV9OT05FIHwgTUZQX1BVTExfTk9ORSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jIGIvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKaW5kZXggZTcxNmM2Mi4uYmU1OGY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKQEAgLTc3LDExICs3NywxMyBAQAogICogTUZQUl9QVUxMX0xPVyAgICAgICAgMSAgICAgICAgIDAgICAgICAgIDEKICAqIE1GUFJfUFVMTF9ISUdIICAgICAgIDEgICAgICAgICAxICAgICAgICAwCiAgKiBNRlBSX1BVTExfQk9USCAgICAgICAxICAgICAgICAgMSAgICAgICAgMQorICogTUZQUl9QVUxMX0ZMT0FUCTEgICAgICAgICAwICAgICAgICAwCiAgKi8KICNkZWZpbmUgTUZQUl9QVUxMX05PTkUJCSgwKQogI2RlZmluZSBNRlBSX1BVTExfTE9XCQkoTUZQUl9QVUxMX1NFTCB8IE1GUFJfUFVMTERPV05fRU4pCiAjZGVmaW5lIE1GUFJfUFVMTF9CT1RICQkoTUZQUl9QVUxMX0xPVyB8IE1GUFJfUFVMTFVQX0VOKQogI2RlZmluZSBNRlBSX1BVTExfSElHSAkJKE1GUFJfUFVMTF9TRUwgfCBNRlBSX1BVTExVUF9FTikKKyNkZWZpbmUgTUZQUl9QVUxMX0ZMT0FUCQkoTUZQUl9QVUxMX1NFTCkKIAogLyogbWZwX3NwaW5fbG9jayBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IE1GUCByZWdpc3RlciBjb25maWd1cmF0aW9uCiAgKiAobW9zdCBsaWtlbHkgYSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb24pIGlzIGF0b21pYywgYW5kIHRoYXQKQEAgLTExNiw2ICsxMTgsNyBAQAogCU1GUFJfUFVMTF9MT1csCiAJTUZQUl9QVUxMX0hJR0gsCiAJTUZQUl9QVUxMX0JPVEgsCisJTUZQUl9QVUxMX0ZMT0FULAogfTsKIAogLyogbWFwcGluZyBvZiBNRlBfTFBNX0VER0VfKiBkZWZpbml0aW9ucyB0byBNRlBSX0VER0VfKiByZWdpc3RlciBiaXRzICovCkBAIC0yMDQsNyArMjA3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7CiAKLQlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKKwlCVUdfT04obWZwIDwgMCB8fCBtZnAgPj0gTUZQX1BJTl9NQVgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKIAl2YWwgPSBtZnByX3JlYWRsKG1mcF90YWJsZVttZnBdLm1mcHJfb2ZmKTsKQEAgLTIxNyw3ICsyMjAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKKwlCVUdfT04obWZwIDwgMCB8fCBtZnAgPj0gTUZQX1BJTl9NQVgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKIAltZnByX3dyaXRlbChtZnBfdGFibGVbbWZwXS5tZnByX29mZiwgdmFsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYwppbmRleCAyNjBmZGM2Li41ZmYyNGUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIAlncG4gPSBjaGlwLT5jaGlwLmJhc2U7CiAJZm9yIChpID0gMDsgaSA8IGNoaXAtPmNoaXAubmdwaW87IGkrKywgZ3BuKyspIHsKLQkJQlVHX09OKGdwbiA+IEFSUkFZX1NJWkUoczNjX2dwaW9zKSk7CisJCUJVR19PTihncG4gPj0gQVJSQVlfU0laRShzM2NfZ3Bpb3MpKTsKIAkJczNjX2dwaW9zW2dwbl0gPSBjaGlwOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYwppbmRleCAxMTExN2E3Li5kZjQ3MzIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CkBAIC0xODgsNyArMTg5LDcgQEAKIGVycjoKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTF9HUEwoczNjX2FkY19jb252ZXJ0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19hZGNfcmVhZCk7CiAKIHN0YXRpYyB2b2lkIHMzY19hZGNfZGVmYXVsdF9zZWxlY3Qoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQsCiAJCQkJICAgdW5zaWduZWQgc2VsZWN0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCmluZGV4IDU0NDdlNjAuLjRhZjlkZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKQEAgLTYxLDYgKzYxLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQxMltdICA9ICJTM0MyNDEyIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MFtdICA9ICJTM0MyNDQwIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MltdICA9ICJTM0MyNDQyIjsKK3N0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MmJbXSAgPSAiUzNDMjQ0MkIiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQzW10gID0gIlMzQzI0NDMiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDEwYVtdID0gIlMzQzI0MTBBIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MGFbXSA9ICJTM0MyNDQwQSI7CkBAIC0xMTIsNiArMTEzLDE1IEBACiAJCS5uYW1lCQk9IG5hbWVfczNjMjQ0MgogCX0sCiAJeworCQkuaWRjb2RlCQk9IDB4MzI0NDBhYWIsCisJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKKwkJLm1hcF9pbwkJPSBzM2MyNDR4X21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczNjMjQ0eF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzM2MyNDR4X2luaXRfdWFydHMsCisJCS5pbml0CQk9IHMzYzI0NDJfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9zM2MyNDQyYgorCX0sCisJewogCQkuaWRjb2RlCQk9IDB4MzI0MTIwMDEsCiAJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKIAkJLm1hcF9pbwkJPSBzM2MyNDEyX21hcF9pbywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwppbmRleCAxOTZiMTkxLi5mMDQ2ZjhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCkBAIC0yMDgsMTQgKzIwOCwxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgcmVsb2FkOwogCi0JcHJfZGVidWcoInMzYzI0MTBfY2hhbl9sb2FkYnVmZmVyOiBsb2FkaW5nIGJ1ZmYgJXAgKDB4JTA4bHgsMHglMDZ4KVxuIiwKLQkJIGJ1ZiwgKHVuc2lnbmVkIGxvbmcpYnVmLT5kYXRhLCBidWYtPnNpemUpOwotCiAJaWYgKGJ1ZiA9PSBOVUxMKSB7CiAJCWRtYXdhcm4oImJ1ZmZlciBpcyBOVUxMXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJcHJfZGVidWcoInMzYzI0MTBfY2hhbl9sb2FkYnVmZmVyOiBsb2FkaW5nIGJ1ZmYgJXAgKDB4JTA4bHgsMHglMDZ4KVxuIiwKKwkJIGJ1ZiwgKHVuc2lnbmVkIGxvbmcpYnVmLT5kYXRhLCBidWYtPnNpemUpOworCiAJLyogY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBjaGFubmVsIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyAqLwogCiAJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZ3Bpby5jCmluZGV4IDk1ZGYwNTkuLjU0Njc0NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWZucy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCmluZGV4IGVmZWIwMjUuLmM3NzYxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCkBAIC0yMjIsNyArMjIyLDkgQEAKIC8qIFMzQzI0MTAgYW5kIGNvbXBhdGlibGUgZXhwb3J0ZWQgZnVuY3Rpb25zICovCiAKIGV4dGVybiB2b2lkIHMzYzI0MTBfY3B1ZnJlcV9zZXRyZWZyZXNoKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CitleHRlcm4gdm9pZCBzM2MyNDEwX3NldF9mdmNvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CiAKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9JT1RJTUlORwogZXh0ZXJuIGludCBzM2MyNDEwX2lvdGltaW5nX2NhbGMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAogCQkJCSBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqaW90KTsKIApAQCAtMjMxLDggKzIzMywxMSBAQAogCiBleHRlcm4gdm9pZCBzM2MyNDEwX2lvdGltaW5nX3NldChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCiAJCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpOwotCi1leHRlcm4gdm9pZCBzM2MyNDEwX3NldF9mdmNvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CisjZWxzZQorI2RlZmluZSBzM2MyNDEwX2lvdGltaW5nX2NhbGMgTlVMTAorI2RlZmluZSBzM2MyNDEwX2lvdGltaW5nX2dldCBOVUxMCisjZGVmaW5lIHMzYzI0MTBfaW90aW1pbmdfc2V0IE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUzNDMjQxMF9JT1RJTUlORyAqLwogCiAvKiBTM0MyNDEyIGNvbXBhdGlibGUgcm91dGluZXMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWNpLmgKaW5kZXggMmQwODUyYS4uYzJjZWY2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21jaS5oCkBAIC0yLDggKzIsMTEgQEAKICNkZWZpbmUgX0FSQ0hfTUNJX0gKIAogc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhIHsKKwl1bnNpZ25lZCBpbnQJbm9fd3Byb3RlY3QgOiAxOworCXVuc2lnbmVkIGludAlub19kZXRlY3QgOiAxOwogCXVuc2lnbmVkIGludAl3cHJvdGVjdF9pbnZlcnQgOiAxOwogCXVuc2lnbmVkIGludAlkZXRlY3RfaW52ZXJ0IDogMTsgICAvKiBzZXQgPT4gZGV0ZWN0IGFjdGl2ZSBoaWdoLiAqLworCXVuc2lnbmVkIGludAl1c2VfZG1hIDogMTsKIAogCXVuc2lnbmVkIGludAlncGlvX2RldGVjdDsKIAl1bnNpZ25lZCBpbnQJZ3Bpb193cHJvdGVjdDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKaW5kZXggYjZkZWVlZi4uODJhYjRhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIHMzYzI0MTBfaW5pdF91YXJ0cyBOVUxMCiAjZGVmaW5lIHMzYzI0MTBfbWFwX2lvIE5VTEwKICNkZWZpbmUgczNjMjQxMF9pbml0IE5VTEwKKyNkZWZpbmUgczNjMjQxMGFfaW5pdCBOVUxMCiAjZW5kaWYKIAogZXh0ZXJuIGludCBzM2MyNDEwX2Jhc2VjbGtfYWRkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jCmluZGV4IDY3YWE5M2QuLmQ1NTRiOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMKQEAgLTE1MSw4ICsxNTEsNiBAQAogCQlzcmMgPSBjaGFuLT5kZXZfYWRkcjsKIAkJZHN0ID0gZGF0YTsKIAkJY29udHJvbDAgPSBQTDA4MF9DT05UUk9MX1NSQ19BSEIyOwotCQljb250cm9sMCB8PSAodTMyKWNoYW4tPmh3X3dpZHRoIDw8IFBMMDgwX0NPTlRST0xfU1dJRFRIX1NISUZUOwotCQljb250cm9sMCB8PSAyIDw8IFBMMDgwX0NPTlRST0xfRFdJRFRIX1NISUZUOwogCQljb250cm9sMCB8PSBQTDA4MF9DT05UUk9MX0RTVF9JTkNSOwogCQlicmVhazsKIApAQCAtMTYwLDggKzE1OCw2IEBACiAJCXNyYyA9IGRhdGE7CiAJCWRzdCA9IGNoYW4tPmRldl9hZGRyOwogCQljb250cm9sMCA9IFBMMDgwX0NPTlRST0xfRFNUX0FIQjI7Ci0JCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9EV0lEVEhfU0hJRlQ7Ci0JCWNvbnRyb2wwIHw9IDIgPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQ7CiAJCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfU1JDX0lOQ1I7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNzMsNiArMTY5LDggQEAKIAljb250cm9sMSA9IHNpemUgPj4gY2hhbi0+aHdfd2lkdGg7CS8qIHNpemUgaW4gbm8gb2YgeGZlcnMgKi8KIAljb250cm9sMCB8PSBQTDA4MF9DT05UUk9MX1BST1RfU1lTOwkvKiBhbHdheXMgaW4gcHJpdi4gbW9kZSAqLwogCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfVENfSVJRX0VOOwkvKiBhbHdheXMgZmlyZSBJUlEgKi8KKwljb250cm9sMCB8PSAodTMyKWNoYW4tPmh3X3dpZHRoIDw8IFBMMDgwX0NPTlRST0xfRFdJRFRIX1NISUZUOworCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQ7CiAKIAlsbGktPnNyY19hZGRyID0gc3JjOwogCWxsaS0+ZHN0X2FkZHIgPSBkc3Q7CkBAIC0zMzksMTkgKzMzNywyMCBAQAogCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpuZXh0OwogCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpidWZmOwogCXN0cnVjdCBwbDA4MHNfbGxpICpsbGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCiAJV0FSTl9PTighY2hhbik7CiAJaWYgKCFjaGFuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ1ZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiksIEdGUF9LRVJORUwpOworCWJ1ZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiksIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIGJ1ZmZlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlsbGkgPSBkbWFfcG9vbF9hbGxvYyhkbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJmJ1ZmYtPmxsaV9kbWEpOworCWxsaSA9IGRtYV9wb29sX2FsbG9jKGRtYV9wb29sLCBHRlBfQVRPTUlDLCAmYnVmZi0+bGxpX2RtYSk7CiAJaWYgKCFsbGkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gbWVtb3J5IGZvciBsbGlcbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTM2Niw2ICszNjUsOCBAQAogCiAJczNjNjR4eF9kbWFfZmlsbF9sbGkoY2hhbiwgbGxpLCBkYXRhLCBzaXplKTsKIAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwogCWlmICgobmV4dCA9IGNoYW4tPm5leHQpICE9IE5VTEwpIHsKIAkJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmVuZCA9IGNoYW4tPmVuZDsKIAkJc3RydWN0IHBsMDgwc19sbGkgKmVuZGxsaSA9IGVuZC0+bGxpOwpAQCAtMzk3LDYgKzM5OCw4IEBACiAJCXMzYzY0eHhfbGxpX3RvX3JlZ3MoY2hhbiwgbGxpKTsKIAl9CiAKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAlzaG93X2xsaShsbGkpOwogCiAJZGJnX3Nob3djaGFuKGNoYW4pOwpAQCAtNTYwLDI2ICs1NjMsMTEgQEAKIAogRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9mcmVlKTsKIAotCi1zdGF0aWMgdm9pZCBzM2M2NHh4X2RtYV90Y2lycShzdHJ1Y3QgczNjNjR4eF9kbWFjICpkbWFjLCBpbnQgb2ZmcykKLXsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGRtYWMtPmNoYW5uZWxzICsgb2ZmczsKLQotCS8qIG5vdGUsIHdlIGN1cnJlbnRseSBkbyBub3QgYm90aGVyIHRvIHdvcmsgb3V0IHdoaWNoIGJ1ZmZlcgotCSAqIG9yIGJ1ZmZlcnMgaGF2ZSBiZWVuIGNvbXBsZXRlZCBzaW5jZSB0aGUgbGFzdCB0Yy1pcnEuICovCi0KLQlpZiAoY2hhbi0+Y2FsbGJhY2tfZm4pCi0JCShjaGFuLT5jYWxsYmFja19mbikoY2hhbiwgY2hhbi0+Y3Vyci0+cHcsIDAsIFMzQzI0MTBfUkVTX09LKTsKLX0KLQotc3RhdGljIHZvaWQgczNjNjR4eF9kbWFfZXJyaXJxKHN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMsIGludCBvZmZzKQotewotCXByaW50ayhLRVJOX0RFQlVHICIlczogb2ZmcyAlZFxuIiwgX19mdW5jX18sIG9mZnMpOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgczNjNjR4eF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKnB3KQogewogCXN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMgPSBwdzsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbjsKKwllbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzOwogCXUzMiB0Y3N0YXQsIGVycnN0YXQ7CiAJdTMyIGJpdDsKIAlpbnQgb2ZmczsKQEAgLTU4OCwxNCArNTc2LDU0IEBACiAJZXJyc3RhdCA9IHJlYWRsKGRtYWMtPnJlZ3MgKyBQTDA4MF9FUlJfU1RBVFVTKTsKIAogCWZvciAob2ZmcyA9IDAsIGJpdCA9IDE7IG9mZnMgPCA4OyBvZmZzKyssIGJpdCA8PD0gMSkgeworCQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqYnVmZjsKKworCQlpZiAoIShlcnJzdGF0ICYgYml0KSAmJiAhKHRjc3RhdCAmIGJpdCkpCisJCQljb250aW51ZTsKKworCQljaGFuID0gZG1hYy0+Y2hhbm5lbHMgKyBvZmZzOworCQlyZXMgPSBTM0MyNDEwX1JFU19FUlI7CisKIAkJaWYgKHRjc3RhdCAmIGJpdCkgewogCQkJd3JpdGVsKGJpdCwgZG1hYy0+cmVncyArIFBMMDgwX1RDX0NMRUFSKTsKLQkJCXMzYzY0eHhfZG1hX3RjaXJxKGRtYWMsIG9mZnMpOworCQkJcmVzID0gUzNDMjQxMF9SRVNfT0s7CiAJCX0KIAotCQlpZiAoZXJyc3RhdCAmIGJpdCkgewotCQkJczNjNjR4eF9kbWFfZXJyaXJxKGRtYWMsIG9mZnMpOworCQlpZiAoZXJyc3RhdCAmIGJpdCkKIAkJCXdyaXRlbChiaXQsIGRtYWMtPnJlZ3MgKyBQTDA4MF9FUlJfQ0xFQVIpOworCisJCS8qICduZXh0JyBwb2ludHMgdG8gdGhlIGJ1ZmZlciB0aGF0IGlzIG5leHQgdG8gdGhlCisJCSAqIGN1cnJlbnRseSBhY3RpdmUgYnVmZmVyLgorCQkgKiBGb3IgQ0lSQ1VMQVIgcXVldWVzLCAnbmV4dCcgd2lsbCBiZSBzYW1lIGFzICdjdXJyJworCQkgKiB3aGVuICdlbmQnIGlzIHRoZSBhY3RpdmUgYnVmZmVyLgorCQkgKi8KKwkJYnVmZiA9IGNoYW4tPmN1cnI7CisJCXdoaWxlIChidWZmICYmIGJ1ZmYgIT0gY2hhbi0+bmV4dAorCQkJCSYmIGJ1ZmYtPm5leHQgIT0gY2hhbi0+bmV4dCkKKwkJCWJ1ZmYgPSBidWZmLT5uZXh0OworCisJCWlmICghYnVmZikKKwkJCUJVRygpOworCisJCWlmIChidWZmID09IGNoYW4tPm5leHQpCisJCQlidWZmID0gY2hhbi0+ZW5kOworCisJCXMzYzY0eHhfZG1hX2J1ZmZmZG9uZShjaGFuLCBidWZmLCByZXMpOworCisJCS8qIEZyZWUgdGhlIG5vZGUgYW5kIHVwZGF0ZSBjdXJyLCBpZiBub24tY2lyY3VsYXIgcXVldWUgKi8KKwkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBTM0MyNDEwX0RNQUZfQ0lSQ1VMQVIpKSB7CisJCQljaGFuLT5jdXJyID0gYnVmZi0+bmV4dDsKKwkJCXMzYzY0eHhfZG1hX2ZyZWVidWZmKGJ1ZmYpOworCQl9CisKKwkJLyogVXBkYXRlICduZXh0JyAqLworCQlidWZmID0gY2hhbi0+bmV4dDsKKwkJaWYgKGNoYW4tPm5leHQgPT0gY2hhbi0+ZW5kKSB7CisJCQljaGFuLT5uZXh0ID0gY2hhbi0+Y3VycjsKKwkJCWlmICghKGNoYW4tPmZsYWdzICYgUzNDMjQxMF9ETUFGX0NJUkNVTEFSKSkKKwkJCQljaGFuLT5lbmQgPSBOVUxMOworCQl9IGVsc2UgeworCQkJY2hhbi0+bmV4dCA9IGJ1ZmYtPm5leHQ7CiAJCX0KIAl9CiAKQEAgLTY5Nyw3ICs3MjUsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlZ2lzdGVyaW5nIERNQSBjaGFubmVsc1xuIiwgX19mdW5jX18pOwogCi0JZG1hX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoIkRNQS1MTEkiLCBOVUxMLCAzMiwgMTYsIDApOworCWRtYV9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJETUEtTExJIiwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBwbDA4MHNfbGxpKSwgMTYsIDApOwogCWlmICghZG1hX3Bvb2wpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNyZWF0ZSBwb29sXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oCmluZGV4IDBjMzBkZDkuLjhmNzZhMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZG1hLXBsYXQuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2RtYS1wbGF0LmgKQEAgLTI2LDcgKzI2LDcgQEAKIAlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqbmV4dDsKIAogCXZvaWQJCQkqcHc7Ci0Jc3RydWN0IHBsMDgwX2xsaQkqbGxpOworCXN0cnVjdCBwbDA4MHNfbGxpCSpsbGk7CiAJZG1hX2FkZHJfdAkJIGxsaV9kbWE7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCmluZGV4IDc0M2E3MDAuLjc5NTZmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCkBAIC0xOTQsOSArMTk0LDE3IEBACiAKICNkZWZpbmUgSVJRX0VJTlRfR1JPVVAoZ3JvdXAsIG5vKQkoSVJRX0VJTlRfR1JPVVAjI2dyb3VwIyNfQkFTRSArIChubykpCiAKKy8qIERlZmluZSBhIGdyb3VwIG9mIGludGVycnVwdHMgZm9yIGJvYXJkLXNwZWNpZmljIHVzZSAoZWcsIGZvciBNRkQKKyAqIGludGVycnVwdCBjb250cm9sbGVycykuICovCisjZGVmaW5lIElSUV9CT0FSRF9TVEFSVCAoSVJRX0VJTlRfR1JPVVA5X0JBU0UgKyBJUlFfRUlOVF9HUk9VUDlfTlIgKyAxKQorCisjZGVmaW5lIElSUV9CT0FSRF9OUiAxNgorCisjZGVmaW5lIElSUV9CT0FSRF9FTkQgKElSUV9CT0FSRF9TVEFSVCArIElSUV9CT0FSRF9OUikKKwogLyogU2V0IHRoZSBkZWZhdWx0IE5SX0lSUVMgKi8KIAotI2RlZmluZSBOUl9JUlFTCShJUlFfRUlOVF9HUk9VUDlfQkFTRSArIElSUV9FSU5UX0dST1VQOV9OUiArIDEpCisjZGVmaW5lIE5SX0lSUVMJKElSUV9CT0FSRF9FTkQgKyAxKQogCiAjZW5kaWYgLyogX19BU01fUExBVF9TM0M2NFhYX0lSUVNfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCmluZGV4IGE4Nzc3YTcuLmZmNDZlN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCkBAIC01MSw4ICs1MSw4IEBACiAjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9IQ0xLX1NISUZUCSg4KQogI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfTVBMTF9NQVNLCSgweDEgPDwgNCkKICNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX01QTExfU0hJRlQJKDQpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fTUFTSwkoMHgzIDw8IDApCi0jZGVmaW5lIFMzQzY0MTBfQ0xLRElWMF9BUk1fTUFTSwkoMHg3IDw8IDApCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fTUFTSwkoMHg3IDw8IDApCisjZGVmaW5lIFMzQzY0MTBfQ0xLRElWMF9BUk1fTUFTSwkoMHhmIDw8IDApCiAjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fU0hJRlQJKDApCiAKIC8qIENMS0RJVjEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCmluZGV4IGZlYmFjMTkuLjZmZmEyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYwpAQCAtMzAyLDggKzMwMiw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJdmFsID0gX19yYXdfcmVhZGwocmVnKTsKLQl2YWwgJj0gfigweGYgPDwgc2Nsay0+c2hpZnQpOwotCXZhbCB8PSAoZGl2IC0gMSkgPDwgc2Nsay0+c2hpZnQ7CisJdmFsICY9IH4oMHhmIDw8IHNjbGstPmRpdmlkZXJfc2hpZnQpOworCXZhbCB8PSAoZGl2IC0gMSkgPDwgc2Nsay0+ZGl2aWRlcl9zaGlmdDsKIAlfX3Jhd193cml0ZWwodmFsLCByZWcpOwogCiAJcmV0dXJuIDA7CkBAIC0zMjgsNiArMzI4LDggQEAKIAkJY2xrc3JjIHw9IHNyY19uciA8PCBzY2xrLT5zaGlmdDsKIAogCQlfX3Jhd193cml0ZWwoY2xrc3JjLCBTM0NfQ0xLX1NSQyk7CisKKwkJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzQzLDcgKzM0NSw3IEBACiAJaWYgKHJhdGUgPiBwYXJlbnRfcmF0ZSkKIAkJcmF0ZSA9IHBhcmVudF9yYXRlOwogCWVsc2UgewotCQlkaXYgPSByYXRlIC8gcGFyZW50X3JhdGU7CisJCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKIAogCQlpZiAoZGl2ID09IDApCiAJCQlkaXYgPSAxOwpAQCAtNjc1LDYgKzY3Nyw5IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHh0YWwgaXMgJWxkXG4iLCBfX2Z1bmNfXywgeHRhbCk7CiAKKwkvKiBGb3Igbm93IGFzc3VtZSB0aGUgbXV4IGFsd2F5cyBzZWxlY3RzIHRoZSBjcnlzdGFsICovCisJY2xrX2V4dF94dGFsX211eC5wYXJlbnQgPSB4dGFsX2NsazsKKwogCWVwbGwgPSBzM2M2NDAwX2dldF9lcGxsKHh0YWwpOwogCW1wbGwgPSBzM2M2NDAwX2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzNDX01QTExfQ09OKSk7CiAJYXBsbCA9IHMzYzY0MDBfZ2V0X3BsbCh4dGFsLCBfX3Jhd19yZWFkbChTM0NfQVBMTF9DT04pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2RtYS5jCmluZGV4IGQyZjQ5NzcuLmVmODhmMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9kbWEuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCQkJCXN0bXAzeHh4X2RtYV9mcmVlX2NvbW1hbmQoY2gsCiAJCQkJCQkJCSAgJmRlc2NyaXB0b3JzCiAJCQkJCQkJCSAgW2ldKTsKLQkJCQl9IHdoaWxlIChpLS0gPj0gMCk7CisJCQkJfSB3aGlsZSAoaS0tID4gMCk7CiAJCQl9CiAJCQlyZXR1cm4gZXJyOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCBjOGM1NWI0Li45NGJlN2JiIDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBTYXQgU2VwIDEyIDEyOjAwOjE2IDIwMDkKKyMgTGFzdCB1cGRhdGU6IEZyaSBTZXAgMTggMjE6NDI6MDAgMjAwOQogIwogIyBtYWNoaW5lX2lzX3h4eAlDT05GSUdfeHh4eAkJTUFDSF9UWVBFX3h4eAkJbnVtYmVyCiAjCkBAIC0xNjM4LDcgKzE2MzgsNyBAQAogYW1sX204MDUwCQlNQUNIX0FNTF9NODA1MAkJQU1MX004MDUwCQkxNjQ0CiBteDM1XzNkcwkJTUFDSF9NWDM1XzNEUwkJTVgzNV8zRFMJCTE2NDUKIG1hcnMJCQlNQUNIX01BUlMJCU1BUlMJCQkxNjQ2Ci1udG9zZF82NDR4YQkJTUFDSF9OVE9TRF82NDRYQQlOVE9TRF82NDRYQQkJMTY0NworbmV1cm9zX29zZDIJCU1BQ0hfTkVVUk9TX09TRDIJTkVVUk9TX09TRDIJCTE2NDcKIGJhZGdlcgkJCU1BQ0hfQkFER0VSCQlCQURHRVIJCQkxNjQ4CiB0cml6ZXBzNHdsCQlNQUNIX1RSSVpFUFM0V0wJCVRSSVpFUFM0V0wJCTE2NDkKIHRyaXplcHM1CQlNQUNIX1RSSVpFUFM1CQlUUklaRVBTNQkJMTY1MApAQCAtMTY1NCw3ICsxNjU0LDcgQEAKIHpvcmFuNDN4eAkJTUFDSF9aT1JBTjQzWFgJCVpPUkFONDNYWAkJMTY2MAogc29uaXg5MjYJCU1BQ0hfU09OSVg5MjYJCVNPTklYOTI2CQkxNjYxCiBjZWxlc3RpYWxzZW1pCQlNQUNIX0NFTEVTVElBTFNFTUkJQ0VMRVNUSUFMU0VNSQkJMTY2MgotY2M5bTI0NDMJCU1BQ0hfQ0M5TTI0NDMJCUNDOU0yNDQzCQkxNjYzCitjYzltMjQ0M2pzCQlNQUNIX0NDOU0yNDQzSlMJCUNDOU0yNDQzSlMJCTE2NjMKIHR3NTMzNAkJCU1BQ0hfVFc1MzM0CQlUVzUzMzQJCQkxNjY0CiBvbWFwX2h0Y2FydGVtaXMJCU1BQ0hfSFRDQVJURU1JUwkJSFRDQVJURU1JUwkJMTY2NQogbmFsX2hsaXRlCQlNQUNIX05BTF9ITElURQkJTkFMX0hMSVRFCQkxNjY2CkBAIC0xODAyLDcgKzE4MDIsNyBAQAogcmQ4OGY1MTgxbF9nZQkJTUFDSF9SRDg4RjUxODFMX0dFCVJEODhGNTE4MUxfR0UJCTE4MTIKIHNpZm1haW4JCQlNQUNIX1NJRk1BSU4JCVNJRk1BSU4JCQkxODEzCiBzYW05X2w5MjYxCQlNQUNIX1NBTTlfTDkyNjEJCVNBTTlfTDkyNjEJCTE4MTQKLWNjOW0yNDQzanMJCU1BQ0hfQ0M5TTI0NDNKUwkJQ0M5TTI0NDNKUwkJMTgxNQorY2M5bTI0NDMJCU1BQ0hfQ0M5TTI0NDMJCUNDOU0yNDQzCQkxODE1CiB4YXJpYTMwMAkJTUFDSF9YQVJJQTMwMAkJWEFSSUEzMDAJCTE4MTYKIGl0OTIwMAkJCU1BQ0hfSVQ5MjAwCQlJVDkyMDAJCQkxODE3CiByZDg4ZjUxODFsX2Z4bwkJTUFDSF9SRDg4RjUxODFMX0ZYTwlSRDg4RjUxODFMX0ZYTwkJMTgxOApAQCAtMjQwOSwzICsyNDA5LDE1IEBACiBwc3MyCQkJTUFDSF9QU1MyCQlQU1MyCQkJMjQyMwogZGF2aW5jaV9hcG0xNTAJCU1BQ0hfREFWSU5DSV9BUE0xNTAJREFWSU5DSV9BUE0xNTAJCTI0MjQKIHN0cjkxMDAJCQlNQUNIX1NUUjkxMDAJCVNUUjkxMDAJCQkyNDI1CituZXQ1YmlnCQkJTUFDSF9ORVQ1QklHCQlORVQ1QklHCQkJMjQyNgorc2VhYmVkOTI2MwkJTUFDSF9TRUFCRUQ5MjYzCQlTRUFCRUQ5MjYzCQkyNDI3CitteDUxX20yaWQJCU1BQ0hfTVg1MV9NMklECQlNWDUxX00ySUQJCTI0MjgKK29jdHZvY3BsdXNfZWIJCU1BQ0hfT0NUVk9DUExVU19FQglPQ1RWT0NQTFVTX0VCCQkyNDI5CitrbGtfZmlyZWZveAkJTUFDSF9LTEtfRklSRUZPWAlLTEtfRklSRUZPWAkJMjQzMAora2xrX3dpcm1hX21vZHVsZQlNQUNIX0tMS19XSVJNQV9NT0RVTEUJS0xLX1dJUk1BX01PRFVMRQkyNDMxCitrbGtfd2lybWFfbW1pCQlNQUNIX0tMS19XSVJNQV9NTUkJS0xLX1dJUk1BX01NSQkJMjQzMgorc3VwZXJzb25pYwkJTUFDSF9TVVBFUlNPTklDCQlTVVBFUlNPTklDCQkyNDMzCitsaWJlcnR5CQkJTUFDSF9MSUJFUlRZCQlMSUJFUlRZCQkJMjQzNAorbWgzNTUJCQlNQUNIX01IMzU1CQlNSDM1NQkJCTI0MzUKK3BjNzgwMgkJCU1BQ0hfUEM3ODAyCQlQQzc4MDIJCQkyNDM2CitnbmV0X3NnYwkJTUFDSF9HTkVUX1NHQwkJR05FVF9TR0MJCTI0MzcKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggNDRkMGJmYS4uOWM5NmExMyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTMxLDUgKzMxLDggQEAKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05MjYzKCkJKDApCiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXJsKCkJKDApCiAjZGVmaW5lIGNwdV9pc19hdDkxY2FwOSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnMTAoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NWVzKCkJKDApCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0NQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL0FESV9CU0QudHh0IGIvYXJjaC9ibGFja2Zpbi9BRElfQlNELnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDFkMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9BRElfQlNELnR4dApAQCAtMCwwICsxLDQxIEBACitUaGlzIEJTRC1TdHlsZSBMaWNlbnNlIGFwcGxpZXMgdG8gYSBmZXcgZmlsZXMgaW4gLi9hcmNoL2JsYWNrZmluIGRpcmVjdG9yeSwKK2FuZCBpcyBpbmNsdWRlZCBoZXJlLCBzbyBwZW9wbGUgdW5kZXJzdGFuZCB3aGljaCBjb2RlIHRoZXkgY2FuIHVzZSBvdXRzaWRlCit0aGUgTGludXgga2VybmVsLCBpbiBub24tR1BMIGJhc2VkIHByb2plY3RzLgorCitVc2luZyB0aGUgZmlsZXMgcmVsZWFzZWQgdW5kZXIgdGhlICJBREkgQlNEIiBsaWNlbnNlLCBtdXN0IGNvbXBseSB3aXRoCit0aGVzZSBsaWNlbnNlIHRlcm1zLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgQW5hbG9nIERldmljZXMsIEluYy4KKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICAgZGlzdHJpYnV0aW9uLgorICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQW5hbG9nIERldmljZXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgIC0gVGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlIG1heSBvciBtYXkgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgcmlnaHRzCisgICAgb2Ygb25lIG9yIG1vcmUgcGF0ZW50IGhvbGRlcnMuICBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgcmVsZWFzZSB5b3UKKyAgICBmcm9tIHRoZSByZXF1aXJlbWVudCB0aGF0IHlvdSBvYnRhaW4gc2VwYXJhdGUgbGljZW5zZXMgZnJvbSB0aGVzZQorICAgIHBhdGVudCBob2xkZXJzIHRvIHVzZSB0aGlzIHNvZnR3YXJlLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFOQUxPRyBERVZJQ0VTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIEFOQUxPRyBERVZJQ0VTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCitCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCmluZGV4IDlhMDFkNDQuLmFlNmE2MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKQEAgLTQ3LDYgKzQ3LDkgQEAKIGNvbmZpZyBHRU5FUklDX0lSUV9QUk9CRQogCWRlZl9ib29sIHkKIAorY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorCWRlZl9ib29sIHkKKwogY29uZmlnIEdFTkVSSUNfR1BJTwogCWRlZl9ib29sIHkKIApAQCAtMjI5LDcgKzIzMiw3IEBACiAKIGNvbmZpZyBTTVAKIAlkZXBlbmRzIG9uIEJGNTYxCi0Jc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLApAQCAtNjEzLDEyICs2MTYsMTAgQEAKIHNvdXJjZSBrZXJuZWwvS2NvbmZpZy5oegogCiBjb25maWcgR0VORVJJQ19USU1FCi0JYm9vbCAiR2VuZXJpYyB0aW1lIgotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKIAogY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlib29sICJHZW5lcmljIGNsb2NrIGV2ZW50cyIKLQlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRQogCWRlZmF1bHQgeQogCiBjaG9pY2UKQEAgLTY1Myw2ICs2NTQsMTAgQEAKIAlkZXBlbmRzIG9uIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZXBlbmRzIG9uICFUSUNLU09VUkNFX0dQVE1SMAogCitjb25maWcgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKKwlkZXBlbmRzIG9uICFHRU5FUklDX0NMT0NLRVZFTlRTCisJZGVmX2Jvb2wgeQorCiBzb3VyY2Uga2VybmVsL3RpbWUvS2NvbmZpZwogCiBjb21tZW50ICJNaXNjIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggODhmMzZkNS4uZDI3YzYyNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KK8KgKi8KKwogI2lmbmRlZiBfX0FSQ0hfQkxBQ0tGSU5fQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX0JMQUNLRklOX0FUT01JQ19fCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaAppbmRleCBhZWYwNTk0Li4xMDA2NGY5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tZ2xvYmFsLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oCkBAIC0xLDI5ICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL2JmaW4tZ2xvYmFsLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBHbG9iYWwgZXh0ZXJuIGRlZmluZXMgZm9yIGJsYWNrZmluCisgKiBHbG9iYWwgZXh0ZXJuIGRlZmluZXMgZm9yIGJsYWNrZmluCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkZJTl9HTE9CQUxfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbjV4eF9zcGkuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbjV4eF9zcGkuaAppbmRleCBjMjgxYzYzLi5lZDRmOGM2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW41eHhfc3BpLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oCkBAIC0zLDggKzMsNiBAQAogICoKICAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fcm90YXJ5LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fcm90YXJ5LmgKaW5kZXggNDI1ZWNlNi4uYWJkYjJhZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaApAQCAtMSw2ICsxLDEwIEBACiAvKgogICogYm9hcmQgaW5pdGlhbGl6YXRpb24gc2hvdWxkIHB1dCBvbmUgb2YgdGhlc2Ugc3RydWN0dXJlcyBpbnRvIHBsYXRmb3JtX2RhdGEKICAqIGFuZCBwbGFjZSB0aGUgYmZpbi1yb3Rhcnkgb250byBwbGF0Zm9ybV9idXMgbmFtZWQgImJmaW4tcm90YXJ5Ii4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JGSU5fUk9UQVJZX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zaW1wbGVfdGltZXIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zaW1wbGVfdGltZXIuaAppbmRleCBmY2NiYjU5Li41MjQ4YzEzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2ltcGxlX3RpbWVyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NpbXBsZV90aW1lci5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9iZmluX3NpbXBsZV90aW1lcl9oXwogI2RlZmluZSBfYmZpbl9zaW1wbGVfdGltZXJfaF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggZGFmZmE3MS4uYTJmZjNmYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9CSVRPUFNfSAogI2RlZmluZSBfQkxBQ0tGSU5fQklUT1BTX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ibGFja2Zpbi5oCmluZGV4IDRkNDQzOTUuLmViN2MxNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JsYWNrZmluLmgKQEAgLTEsNiArMSw5IEBACiAvKgotICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBibGFja2ZpbiBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KKyAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgQmxhY2tmaW4gZmFtaWx5IG9mIHByb2Nlc3NvcnMuCiAgKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J1Zy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9idWcuaAppbmRleCA2NTVlNDk1Li42ZjQ1NDhhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J1Zy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnVnLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JMQUNLRklOX0JVR19ICiAjZGVmaW5lIF9CTEFDS0ZJTl9CVUdfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaAppbmRleCAzZTY5MTA2Li45NTU4NDE2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKQEAgLTEsNiArMSBAQAotI2lmbmRlZiBfQkxBQ0tGSU5fQllURU9SREVSX0gKLSNkZWZpbmUgX0JMQUNLRklOX0JZVEVPUkRFUl9ICi0KICNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgotCi0jZW5kaWYJCQkJLyogX0JMQUNLRklOX0JZVEVPUkRFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlLmgKaW5kZXggNDc3MDUwYS4uODU0MmJjMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMSw2ICsxLDkgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9jYWNoZS5oCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2lmbmRlZiBfX0FSQ0hfQkxBQ0tGSU5fQ0FDSEVfSAogI2RlZmluZSBfX0FSQ0hfQkxBQ0tGSU5fQ0FDSEVfSAogCkBAIC0zNSwxMCArMzgsMTAgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgXAogICAgICFkZWZpbmVkKENPTkZJR19CRklOX0NBQ0hFX0NPSEVSRU5UKQotIyBpZiBkZWZpbmVkKENPTkZJR19CRklOX0lDQUNIRUFCTEUpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTDJfSUNBQ0hFQUJMRSkKKyMgaWYgZGVmaW5lZChDT05GSUdfQkZJTl9FWFRNRU1fSUNBQ0hFQUJMRSkgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9MMl9JQ0FDSEVBQkxFKQogIyBkZWZpbmUgX19BUkNIX1NZTkNfQ09SRV9JQ0FDSEUKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQkZJTl9EQ0FDSEVBQkxFKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0wyX0RDQUNIRUFCTEUpCisjIGlmIGRlZmluZWQoQ09ORklHX0JGSU5fRVhUTUVNX0RDQUNIRUFCTEUpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTDJfRENBQ0hFQUJMRSkKICMgZGVmaW5lIF9fQVJDSF9TWU5DX0NPUkVfRENBQ0hFCiAjIGVuZGlmCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA3ZTU1NTQ5ZS4uYWYwM2EzNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vY2FjaGVmbHVzaC5oCi0gKiBCYXNlZCBvbjoJIGluY2x1ZGUvYXNtLW02OGtub21tdS9jYWNoZWZsdXNoLmgKLSAqIEF1dGhvcjogICAgICAgTEcgU29mdCBJbmRpYQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDQgQW5hbG9nIERldmljZXMgSW5jLgotICogQ3JlYXRlZDogICAgICBUdWUgU2VwIDIxIDIwMDQKLSAqIERlc2NyaXB0aW9uOiAgQmxhY2tmaW4gbG93LWxldmVsIGNhY2hlIHJvdXRpbmVzIGFkYXB0ZWQgZnJvbSB0aGUgaTM4NgotICogCQkgYW5kIFBQQyB2ZXJzaW9ucyBieSBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQorICogQmxhY2tmaW4gbG93LWxldmVsIGNhY2hlIHJvdXRpbmVzCiAgKgotICogTW9kaWZpZWQ6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CTEFDS0ZJTl9DQUNIRUZMVVNIX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2RlZl9MUEJsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NkZWZfTFBCbGFja2Zpbi5oCmluZGV4IDM1Zjg0MWIuLjg3NzhlMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2RlZl9MUEJsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jZGVmX0xQQmxhY2tmaW4uaApAQCAtMSwzMCArMSw4IEBACi0gLyoKLSAgKiBGaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1jb21tb24vY2RlZl9MUEJsYWNrZmluLmgKLSAgKiBCYXNlZCBvbjoKLSAgKiBBdXRob3I6ICAgICAgdW5rbm93bgotICAqICAgICAgICAgICAgICBDT1BZUklHSFQgMjAwNSBBbmFsb2cgRGV2aWNlcwotICAqIENyZWF0ZWQ6ICAgICA/Ci0gICogRGVzY3JpcHRpb246Ci0gICoKLSAgKiBNb2RpZmllZDoKLSAgKgotICAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gICoKLSAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAqIGFueSBsYXRlciB2ZXJzaW9uLgotICAqCi0gICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgKgotICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICAqLworLyoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLwogCiAjaWZuZGVmIF9DREVGX0xQQkxBQ0tGSU5fSAogI2RlZmluZSBfQ0RFRl9MUEJMQUNLRklOX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2hlY2tzdW0uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2hlY2tzdW0uaAppbmRleCA3OTM1ODFmLi5hMjM0MTViIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCkBAIC0xLDkgKzEsMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgICAgICAgYWtiYXIuaHVzc2FpbkBsaW5lby5jb20KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9DSEVDS1NVTV9ICiAjZGVmaW5lIF9CRklOX0NIRUNLU1VNX0gKIAogLyoKLSAqIE1PRElGSUVEIEZPUiBCRklOIEFwcmlsIDMwLCAyMDAxIGFrYmFyLmh1c3NhaW5AbGluZW8uY29tCi0gKgogICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCiAgKiBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KQogICoKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2xvY2tzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Nsb2Nrcy5oCmluZGV4IDAzM2JiYTkuLmY4MGRhZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2xvY2tzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jbG9ja3MuaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWNvbW1vbi9jbG9ja3MuaAotICogQmFzZWQgb246ICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmNTM3LmgKLSAqIEF1dGhvcjoJIFJvYmluIEdldHogPHJnZXR6QGJsYWNrZmluLnVjbGludXgub3JnPgorICogQ29tbW9uIENsb2NrIGRlZmluaXRpb25zIGZvciB2YXJpb3VzIGtlcm5lbCBmaWxlcwogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjVKdWwwNwotICogRGVzY3JpcHRpb246ICBDb21tb24gQ2xvY2sgZGVmaW5pdGlvbnMgZm9yIHZhcmlvdXMga2VybmVsIGZpbGVzCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkZJTl9DTE9DS1NfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jb250ZXh0LlMgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NvbnRleHQuUwppbmRleCBmOGE2NjRmLi41ZGZmYWY1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NvbnRleHQuUworKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NvbnRleHQuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9jb250ZXh0LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaAppbmRleCBkMThkMTY4Li5mZGE5NjI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9jcGxiLmgKLSAqIEJhc2VkIG9uOiAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9iZjUzNy5oCi0gKiBBdXRob3I6ICAgICAgIFJvYmluIEdldHogPHJnZXR6QGJsYWNrZmluLnVjbGludXgub3JnPgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDogICAgICAyMDAwCi0gKiBEZXNjcmlwdGlvbjogIENvbW1vbiBDUExCIGRlZmluaXRpb25zIGZvciBDUExCIGluaXQKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ1BMQl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGJpbml0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGJpbml0LmgKaW5kZXggMDViMTRhNi4uZjMxNWM4MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9jcGxiaW5pdC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvbW1vbiBDUExCIGRlZmluaXRpb25zIGZvciBDUExCIGluaXQKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9DUExCSU5JVF9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IGZhZGZhODIuLmIxOTFkYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcHUuaApAQCAtMSwyMyArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwdS5oLgotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQVNNX0JMQUNLRklOX0NQVV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RlZl9MUEJsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RlZl9MUEJsYWNrZmluLmgKaW5kZXggNjM0MWVlYi4uMjU5MDY0NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kZWZfTFBCbGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaApAQCAtMSwzMiArMSwxMCBAQAotIC8qCi0gICogRmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtY29tbW9uL2RlZl9MUEJsYWNrZmluLmgKLSAgKiBCYXNlZCBvbjoKLSAgKiBBdXRob3I6ICAgICAgdW5rbm93bgotICAqICAgICAgICAgICAgICBDT1BZUklHSFQgMjAwNSBBbmFsb2cgRGV2aWNlcwotICAqIENyZWF0ZWQ6ICAgICA/Ci0gICogRGVzY3JpcHRpb246Ci0gICoKLSAgKiBNb2RpZmllZDoKLSAgKgotICAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gICoKLSAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAqIGFueSBsYXRlciB2ZXJzaW9uLgotICAqCi0gICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgKgotICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICAqLwotCi0vKiBMUCBCbGFja2ZpbiBDT1JFIFJFR0lTVEVSIEJJVCAmIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MzIvMzMgKi8KKy8qCisgKiBCbGFja2ZpbiBjb3JlIHJlZ2lzdGVyIGJpdCAmIGFkZHJlc3MgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIEdQTC0yIChvciBsYXRlcikuCisgKi8KIAogI2lmbmRlZiBfREVGX0xQQkxBQ0tGSU5fSAogI2RlZmluZSBfREVGX0xQQkxBQ0tGSU5fSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IGVkNmIxZjMuLjdhMjNkODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JMQUNLRklOX0RNQV9NQVBQSU5HX0gKICNkZWZpbmUgX0JMQUNLRklOX0RNQV9NQVBQSU5HX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kcG1jLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RwbWMuaAppbmRleCA5NmU4MjA4Li45MjVlNjZjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RwbWMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RwbWMuaApAQCAtMSw5ICsxLDExIEBACiAvKgotICogaW5jbHVkZS9hc20tYmxhY2tmaW4vZHBtYy5oIC0gIE1pc2NlbGxhbmVvdXMgSU9DVEwgY29tbWFuZHMgZm9yIER5bmFtaWMgUG93ZXIKLSAqICAgCQkJIAlNYW5hZ2VtZW50IENvbnRyb2xsZXIgRHJpdmVyLgorICogTWlzY2VsbGFuZW91cyBJT0NUTCBjb21tYW5kcyBmb3IgRHluYW1pYyBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xsZXIgRHJpdmVyCisgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggQW5hbG9nIERldmljZSBJbmMuCiAgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fRFBNQ19IXwogI2RlZmluZSBfQkxBQ0tGSU5fRFBNQ19IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Vhcmx5X3ByaW50ay5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lYXJseV9wcmludGsuaAppbmRleCA1M2E3NjJiLi42OGE5MTBkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Vhcmx5X3ByaW50ay5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWFybHlfcHJpbnRrLmgKQEAgLTEsMjcgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL2Vhcmx5X3ByaW50ay5oCi0gKiBBdXRob3I6ICAgICAgIFJvYmluIEdldHogPHJnZXR6QGJsYWNrZmluLnVjbGludXgub3JnCisgKiBmdW5jdGlvbiBwcm90b3RweWVzIGZvciBlYXJseSBwcmludGsKICAqCi0gKiBDcmVhdGVkOiAgICAgIDE0QXVnMjAwNwotICogRGVzY3JpcHRpb246ICBmdW5jdGlvbiBwcm90b3RweWVzIGZvciBlYXJseSBwcmludGsKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0KICNpZm5kZWYgX19BU01fRUFSTFlfUFJJTlRLX0hfXwogI2RlZmluZSBfX0FTTV9FQVJMWV9QUklOVEtfSF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGM4MjNlOGUuLjhlMDc2NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMSw0ICsxLDggQEAKLS8qIENoYW5nZXMgbWFkZSBieSAgTEcgU29mdCBPY3QgMjAwNCovCisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCiAKICNpZm5kZWYgX19BU01CRklOX0VMRl9ICiAjZGVmaW5lIF9fQVNNQkZJTl9FTEZfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbnRyeS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbnRyeS5oCmluZGV4IDU1YjgwOGYuLmE2ODg2ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZW50cnkuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VudHJ5LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX19CRklOX0VOVFJZX0gKICNkZWZpbmUgX19CRklOX0VOVFJZX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mY250bC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mY250bC5oCmluZGV4IDljNDAzNzEuLjg3MjdiMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZmNudGwuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZjbnRsLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fRkNOVExfSAogI2RlZmluZSBfQkZJTl9GQ05UTF9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZml4ZWRfY29kZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9maXhlZF9jb2RlLmgKaW5kZXggMzJjNGQ0OS4uNzNmZTUzZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9maXhlZF9jb2RlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9maXhlZF9jb2RlLmgKQEAgLTEsNSArMSwxMSBAQAotLyogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGZpeGVkIGFkZHJlc3NlcyB3aGVyZSB1c2Vyc3BhY2UgcHJvZ3JhbXMgY2FuIGZpbmQKLSAgIGF0b21pYyBjb2RlIHNlcXVlbmNlcy4gICovCisvKgorICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGZpeGVkIGFkZHJlc3NlcyB3aGVyZSB1c2Vyc3BhY2UgcHJvZ3JhbXMKKyAqIGNhbiBmaW5kIGF0b21pYyBjb2RlIHNlcXVlbmNlcy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KIAogI2lmbmRlZiBfX0JGSU5fQVNNX0ZJWEVEX0NPREVfSF9fCiAjZGVmaW5lIF9fQkZJTl9BU01fRklYRURfQ09ERV9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZmxhdC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mbGF0LmgKaW5kZXggNzMzYTE3OC4uYzEzMTRjNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mbGF0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mbGF0LmgKQEAgLTEsOCArMSw5IEBACiAvKgotICogaW5jbHVkZS9hc20tYmxhY2tmaW4vZmxhdC5oIC0tIHVDbGludXggZmxhdC1mb3JtYXQgZXhlY3V0YWJsZXMKKyAqIHVDbGludXggZmxhdC1mb3JtYXQgZXhlY3V0YWJsZXMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsCisgKiBDb3B5cmlnaHQgMjAwMy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaWZuZGVmIF9fQkxBQ0tGSU5fRkxBVF9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncGlvLmgKaW5kZXggZmUxMzk2MS4uNWI0NGQwNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncGlvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncGlvLmgKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgkgTWljaGFlbCBIZW5uZXJpY2ggKGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZykKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX0FSQ0hfQkxBQ0tGSU5fR1BJT19IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggMGI3OGI4Ny4uYzA3OGRkNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX19CRklOX0hBUkRJUlFfSAogI2RlZmluZSBfX0JGSU5fSEFSRElSUV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaAppbmRleCAzNzA1M2VjLi5kMWY1MDI5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX0lPX0gKICNkZWZpbmUgX0JGSU5fSU9fSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCA0MmExNWY1Li5lN2MwNjIzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxLmgKQEAgLTEsMTcgKzEsMTAgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDMgSHVUYW8KKyAqICAgICAgICAgICAgICAgIDIwMDIgQXJjdHVydXMgTmV0d29ya3MgSW5jLiAod3d3LmFyY3R1cnVzbmV0d29ya3MuY29tCisgKiAgICAgICAgICAgICAgICAgICAgICAgVGVkIE1hIDxtYXRlZEBzeW1wYXRpY28uY2E+CiAgKgotICogQ2hhbmdlZCBieSBIdVRhbyBBcHIxOCwgMjAwMwotICoKLSAqIENvcHlyaWdodCB3YXMgbWlzc2luZyB3aGVuIEkgZ290IHRoZSBjb2RlIHNvIHRvb2sgZnJvbSBNSVBTIGFyY2ggLi4uTWFUZWQtLS0KLSAqIENvcHlyaWdodCAoQykgMTk5NCBieSBXYWxkb3JmIEdNQkgsIHdyaXR0ZW4gYnkgUmFsZiBCYWVjaGxlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDk2LCA5NywgOTgsIDk5LCAyMDAwLCAyMDAxIGJ5IFJhbGYgQmFlY2hsZQotICoKLSAqIEFkYXB0ZWQgZm9yIEJsYWNrRmluIChBREkpIGJ5IFRlZCBNYSA8bWF0ZWRAc3ltcGF0aWNvLmNhPgotICogQ29weXJpZ2h0IChjKSAyMDAyIEFyY3R1cnVzIE5ldHdvcmtzIEluYy4gKHd3dy5hcmN0dXJ1c25ldHdvcmtzLmNvbSkKLSAqIENvcHlyaWdodCAoYykgMjAwMiBMaW5lbywgSW5jLiA8bWF0dHdAbGluZW8uY29tPgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2lmbmRlZiBfQkZJTl9JUlFfSF8KQEAgLTE5LDYgKzEyLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAKKyNpbmNsdWRlIDxtYWNoL2Fub21hbHkuaD4KKwogLyogU1lTX0lSUVMgYW5kIE5SX0lSUVMgYXJlIGRlZmluZWQgaW4gPG1hY2gtYmY1eHgvaXJxLmg+ICovCiAjaW5jbHVkZSA8bWFjaC9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnFfaGFuZGxlci5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnFfaGFuZGxlci5oCmluZGV4IDdkOWUyZDMuLjdmYmU0MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxX2hhbmRsZXIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycV9oYW5kbGVyLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0lSUV9IQU5ETEVSX0gKICNkZWZpbmUgX0lSUV9IQU5ETEVSX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9sMWxheW91dC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9sMWxheW91dC5oCmluZGV4IDc5ZGJlZmFhLi5jODdlNjg2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2wxbGF5b3V0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9sMWxheW91dC5oCkBAIC0xLDYgKzEsOSBAQAogLyoKLSAqIGwxbGF5b3V0LmgKICAqIERlZmluZXMgYSBsYXlvdXQgb2YgTDEgc2NyYXRjaHBhZCBtZW1vcnkgdGhhdCB1c2Vyc3BhY2UgY2FuIHJlbHkgb24uCisgKgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0wxTEFZT1VUX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xpbmthZ2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbGlua2FnZS5oCmluZGV4IDVhODIyYmIuLmY3ZDZkNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbGlua2FnZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbGlua2FnZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9fQVNNX0xJTktBR0VfSAogI2RlZmluZSBfX0FTTV9MSU5LQUdFX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11LmgKaW5kZXggZGJmZDY4Ni4uMjZmNmI3MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdS5oCkBAIC0xLDggKzEsMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDIgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHNuYXBnZWFyLmNvbT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCisgKi8KKwogI2lmbmRlZiBfX01NVV9ICiAjZGVmaW5lIF9fTU1VX0gKIAotLyogQ29weXJpZ2h0IChDKSAyMDAyLCBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1Ac25hcGdlYXIuY29tPiAqLwotCiBzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCB7CiAJc3RydWN0IHNyYW1fbGlzdF9zdHJ1Y3QgKm5leHQ7CiAJdm9pZCAqYWRkcjsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCAwNDA0MTBiLi40YTNiZTM3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21tdV9jb250ZXh0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQkxBQ0tGSU5fTU1VX0NPTlRFWFRfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tb2R1bGUuaAppbmRleCBlMzEyOGRmLi45YzFjZmZmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTEsMyArMSw5IEBACisvKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorwqAqLworCiAjaWZuZGVmIF9BU01fQkZJTl9NT0RVTEVfSAogI2RlZmluZSBfQVNNX0JGSU5fTU9EVUxFX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tdXRleC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tdXRleC5oCmluZGV4IDVjYzY0MWMuLmY3MjZlM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbXV0ZXguaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL211dGV4LmgKQEAgLTQsNiArNCwxMCBAQAogICogVE9ETzogaW1wbGVtZW50IG9wdGltaXplZCBwcmltaXRpdmVzIGluc3RlYWQsIG9yIGxlYXZlIHRoZSBnZW5lcmljCiAgKiBpbXBsZW1lbnRhdGlvbiBpbiBwbGFjZSwgb3IgcGljayB0aGUgYXRvbWljX3hjaGcoKSBiYXNlZCBnZW5lcmljCiAgKiBpbXBsZW1lbnRhdGlvbi4gKHNlZSBhc20tZ2VuZXJpYy9tdXRleC14Y2hnLmggZm9yIGRldGFpbHMpCisgKgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0FTTV9NVVRFWF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbmFuZC5oCmluZGV4IGFmYmFhZmEuLjNhZThiNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbmFuZC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbmFuZC5oCkBAIC0xLDEzICsxLDkgQEAKLS8qIGxpbnV4L2luY2x1ZGUvYXNtLWJsYWNrZmluL25hbmQuaAotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNyBBbmFsb2cgRGV2aWNlcywgSW5jLgotICoJQnJ5YW4gV3UgPGJyeWFuLnd1QGFuYWxvZy5jb20+Ci0gKgorLyoKICAqIEJGNVhYIC0gTkFORCBmbGFzaCBjb250cm9sbGVyIHBsYXRmcm9tX2RldmljZSBpbmZvCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAvKiBzdHJ1Y3QgYmY1eHhfbmFuZF9wbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCAyOWRjZjc1Li45NDRhMDdjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMSwzICsxLDkgQEAKKy8qCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCivCoCovCisKICNpZm5kZWYgX0JMQUNLRklOX1BBR0VfSAogI2RlZmluZSBfQkxBQ0tGSU5fUEFHRV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZV9vZmZzZXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZV9vZmZzZXQuaAppbmRleCBjYmFmZjI0Li5kMDZhODliOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlX29mZnNldC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZV9vZmZzZXQuaApAQCAtMSw1ICsxLDEwIEBACi0KLS8qIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4uICovCisvKgorICogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCiAKICNpZmRlZiBDT05GSUdfQkxBQ0tGSU4KICNkZWZpbmUgUEFHRV9PRkZTRVRfUkFXCQkweDAwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BkYS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZGEuaAppbmRleCBhNmY5NTY5Li5kNDliYjI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BkYS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGRhLmgKQEAgLTEsMjMgKzEsOCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZGEuaAotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9BU01fQkxBQ0tGSU5fUERBX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggNzgzYzhmNy4uODIxYzY5OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JMQUNLRklOX1BHVEFCTEVfSAogI2RlZmluZSBfQkxBQ0tGSU5fUEdUQUJMRV9ICiAKQEAgLTkyLDYgKzk4LDEyIEBACiAjZGVmaW5lCVZNQUxMT0NfU1RBUlQJMAogI2RlZmluZQlWTUFMTE9DX0VORAkweGZmZmZmZmZmCiAKKy8qIHByb3ZpZGUgYSBzcGVjaWFsIGdldF91bm1hcHBlZF9hcmVhIGZvciBmcmFtZWJ1ZmZlciBtbWFwcyBvZiBub21tdSAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2ZiX3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwkJCQkJICB1bnNpZ25lZCBsb25nKTsKKyNkZWZpbmUgSEFWRV9BUkNIX0ZCX1VOTUFQUEVEX0FSRUEKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KIAogI2VuZGlmCQkJCS8qIF9CTEFDS0ZJTl9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9sbC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb2xsLmgKaW5kZXggYTA1NTY2Ny4uMDcyZDg5NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb2xsLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb2xsLmgKQEAgLTEsMyArMSwxMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqCisgKi8KKwogI2lmbmRlZiBfX0JGSU5fUE9MTF9ICiAjZGVmaW5lIF9fQkZJTl9QT0xMX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BvcnRtdXguaAppbmRleCA4OGViNWMwLi5lZGQ4ZWYzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BvcnRtdXguaApAQCAtMSw2ICsxLDkgQEAKIC8qCi0gKiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIGJsYWNrZmluIGZhbWlseSBvZiBwcm9jZXNzb3JzLgorICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBCbGFja2ZpbiBmYW1pbHkgb2YgcHJvY2Vzc29ycwogICoKK8KgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9QT1JUTVVYX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgKaW5kZXggODBjOWQ2NC4uNDFiYzE4NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FSQ0hfQkZJTl9QT1NJWF9UWVBFU19ICiAjZGVmaW5lIF9fQVJDSF9CRklOX1BPU0lYX1RZUEVTX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggYTM2YWQ4ZC4uYWVhODgwMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9fQVNNX0JGSU5fUFJPQ0VTU09SX0gKICNkZWZpbmUgX19BU01fQkZJTl9QUk9DRVNTT1JfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBlM2YwODZkLi4yNzI5MGM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fUFRSQUNFX0gKICNkZWZpbmUgX0JGSU5fUFRSQUNFX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmluZGV4IGFlNGRhZTEuLjFmNTM4MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKQEAgLTEsMyArMSw5IEBACisvKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorwqAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9TRUNUSU9OU19ICiAjZGVmaW5lIF9CTEFDS0ZJTl9TRUNUSU9OU19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VnbWVudC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWdtZW50LmgKaW5kZXggMDJjZmQwOS4uZjhlMTk4NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWdtZW50LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWdtZW50LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fU0VHTUVOVF9ICiAjZGVmaW5lIF9CRklOX1NFR01FTlRfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCmluZGV4IGNlMDBiMDMuLmNlNDA4MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KK8KgKi8KKwogI2lmbmRlZiBfQVNNX0JMQUNLRklOX1NJR0NPTlRFWFRfSAogI2RlZmluZSBfQVNNX0JMQUNLRklOX1NJR0NPTlRFWFRfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2luZm8uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2lnaW5mby5oCmluZGV4IGVjYTQ1NjUuLjNlODEzMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2lnaW5mby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2lnaW5mby5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX1NJR0lORk9fSAogI2RlZmluZSBfQkZJTl9TSUdJTkZPX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMTE4ZGVlZS4uNmEwZmU5NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmgKLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19BU01fQkxBQ0tGSU5fU01QX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBkNmZmNGI1Li5iMGM3ZjBlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xLDMgKzEsOSBAQAorLyoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KK8KgKi8KKwogI2lmbmRlZiBfX0JGSU5fU1BJTkxPQ0tfSAogI2RlZmluZSBfX0JGSU5fU1BJTkxPQ0tfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKaW5kZXggYjFlM2M0Yy4uYmU3NTc2MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX19BU01fU1BJTkxPQ0tfVFlQRVNfSAogI2RlZmluZSBfX0FTTV9TUElOTE9DS19UWVBFU19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RhdC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdGF0LmgKaW5kZXggZDJiNmYxMS4uMmUyNzY2NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdGF0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdGF0LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgorICovCisKICNpZm5kZWYgX0JGSU5fU1RBVF9ICiAjZGVmaW5lIF9CRklOX1NUQVRfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0cmluZy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdHJpbmcuaAppbmRleCAzMjFmNGQ5Li5kN2YwY2NiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0cmluZy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RyaW5nLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JMQUNLRklOX1NUUklOR19IXwogI2RlZmluZSBfQkxBQ0tGSU5fU1RSSU5HX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggZDQ0MjExMy4uODlkZTY1MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9TV0FCX0gKICNkZWZpbmUgX0JMQUNLRklOX1NXQUJfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA4NWU4ZjE2Li5kZGUxOWIxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTEsMzQgKzEsOCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS9zeXN0ZW0uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgVG9ueSBLb3UgKHRvbnlrb0BsaW5lby5jYSkKLSAqICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgQXJjdHVydXMgTmV0d29ya3MgSW5jLgotICogICAgICAgICAgICAgICAgICAgICh3d3cuYXJjdHVydXNuZXR3b3Jrcy5jb20pCi0gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAzIE1ldHJvd2Vya3MgKHd3dy5tZXRyb3dlcmtzLmNvbSkKLSAqICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDQgQW5hbG9nIERldmljZSBJbmMuCi0gKiBDcmVhdGVkOiAgICAgMjVKYW4yMDAxIC0gVG9ueSBLb3UKLSAqIERlc2NyaXB0aW9uOiBzeXN0ZW0uaCBpbmNsdWRlIGZpbGUKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICBUb255IEtvdSAodG9ueWtvQGxpbmVvLmNhKQogICoKLSAqIE1vZGlmaWVkOiAgICAgMjJTZXAyMDA2IC0gUm9iaW4gR2V0egotICogICAgICAgICAgICAgICAgLSBtb3ZlIGluY2x1ZGUgYmxhY2tmaW4uaCBkb3duLCBzbyBJIGNhbiBnZXQgYWNjZXNzIHRvCi0gKiAgICAgICAgICAgICAgICAgICBpcnEgZnVuY3Rpb25zIGluIG90aGVyIGluY2x1ZGUgZmlsZXMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9CTEFDS0ZJTl9TWVNURU1fSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDJiYmZkZDkuLmFmYjNhODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTEsMjcgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vdGhyZWFkX2luZm8uaAotICogQmFzZWQgb246ICAgICBpbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGhyZWFkX2luZm8uaAotICogQXV0aG9yOiAgICAgICBMRyBTb2Z0IEluZGlhCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqIENyZWF0ZWQ6ICAgICAgVHVlIFNlcCAyMSAyMDA0Ci0gKiBEZXNjcmlwdGlvbjogIEJsYWNrZmluIGxvdy1sZXZlbCB0aHJlYWQgaW5mb3JtYXRpb24KLSAqIE1vZGlmaWVkOgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9BU01fVEhSRUFEX0lORk9fSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggODlhMTJlZS4uYTc0YWUwOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9UTEJfSAogI2RlZmluZSBfQkxBQ0tGSU5fVExCX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFjZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFjZS5oCmluZGV4IDMxMmI1OTYuLjYwOWFkM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhY2UuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYWNlLmgKQEAgLTEsNiArMSw5IEBACiAvKgotICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBibGFja2ZpbiBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KKyAqIGhlYWRlciBmaWxlIGZvciBoYXJkd2FyZSB0cmFjZSBmdW5jdGlvbnMKICAqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkxBQ0tGSU5fVFJBQ0VfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmgKaW5kZXggM2NkYzQ1NC4uOWZlMGRhNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaApAQCAtMSwxMyArMSwxMCBAQAogLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS90cmFwcy5oCisgKiAgQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAgMjAwMSBMaW5lbywgSW5jCisgKiAgICAgICAgICAgICAgICAgICAgICAgIFRvbnkgS291CisgKiAgICAgICAgICAgICAgICAgMTk5MyBIYW1pc2ggTWFjZG9uYWxkCiAgKgotICogIENvcHlyaWdodCAoQykgMTk5MyAgICAgICAgSGFtaXNoIE1hY2RvbmFsZAotICoKLSAqICBMaW5lbywgSW5jICAgIEp1bCAyMDAxICAgIFRvbnkgS291Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2lmbmRlZiBfQkZJTl9UUkFQU19ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDJmNDY5YTEuLmMwM2I4NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0xLDQgKzEsNyBAQAotLyogQ2hhbmdlcyBtYWRlIGJ5IExpbmVvIEluYy4gICAgTWF5IDIwMDEKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKgogICogQmFzZWQgb246IGluY2x1ZGUvYXNtLW02OGtub21tdS91YWNjZXNzLmgKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggMDJiMTUyOS4uNzc5YmUwMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9fQVNNX0JGSU5fVU5JU1REX0gKICNkZWZpbmUgX19BU01fQkZJTl9VTklTVERfSAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGYwNWQxYjkuLmJkMzJjMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIGdlbmVyYXRlIGRlZmluaXRpb25zIG5lZWRlZCBieSBhc3NlbWJseSBsYW5ndWFnZSBtb2R1bGVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgbmVlZGVkIGJ5IGFzc2VtYmx5IGxhbmd1YWdlIG1vZHVsZXMuCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jCmluZGV4IDM4NDg2OGQuLjFmMTcwMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jCkBAIC0yLDYgKzIsNyBAQAogICogYmZpbl9kbWFfNXh4LmMgLSBCbGFja2ZpbiBETUEgaW1wbGVtZW50YXRpb24KICAqCiAgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYwppbmRleCBmYzQ2ODFjLi4yMjcwNWVlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoIChoZW5uZXJpY2hAYmxhY2tmaW4udWNsaW51eC5vcmcpCisgKiBHUElPIEFic3RyYWN0aW9uIExheWVyCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgR1BJTyBBYnN0cmFjdGlvbiBMYXllcgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMKaW5kZXggMzYxOTNlZS4uZjdiOWNkYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jCkBAIC0xLDI1ICsxLDExIEBACiAvKgogICogQmxhY2tmaW4gQ1BMQiBpbml0aWFsaXphdGlvbgogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYwppbmRleCA4ZTFlOWU5Li42OWUwZTUzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCkBAIC0xLDIyICsxLDExIEBACiAvKgotICogICAgICAgICAgICAgICBCbGFja2ZpbiBDUExCIGV4Y2VwdGlvbiBoYW5kbGluZy4KLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBCbGFja2ZpbiBDUExCIGV4Y2VwdGlvbiBoYW5kbGluZyBmb3Igd2hlbiBNUFUgaW4gb24KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jCmluZGV4IDVkOGFkNTAuLmZkOWEyZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKQEAgLTEsMjQgKzEsOSBAQAogLyoKICAqIEJsYWNrZmluIENQTEIgaW5pdGlhbGl6YXRpb24KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxibWdyLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJtZ3IuYwppbmRleCBkOWVhNDZjLi41Yjg4ODYxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJtZ3IuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJtZ3IuYwpAQCAtMSwyNiArMSwxNCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS1jL2NwbGJtZ3IuYwogICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKICAqIEF1dGhvcjogICAgICAgTWljaGFlbCBNY1Rlcm5hbiA8bW1jdGVybmFuQGFpcnZhbmEuY29tPgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMDFOb3YyMDA4CiAgKiBEZXNjcmlwdGlvbjogIENQTEIgbWlzcyBoYW5kbGVyLgogICoKICAqIE1vZGlmaWVkOgogICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOCBBaXJ2YW5hIEluYy4KLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYmluZm8uYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGJpbmZvLmMKaW5kZXggNjRkNzgzMC4uMGJkYWE1MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYmluZm8uYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiaW5mby5jCkBAIC0yLDYgKzIsNyBAQAogICogYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYmluZm8uYyAtIGRpc3BsYXkgQ1BMQiBzdGF0dXMKICAqCiAgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIApAQCAtMTExLDI0ICsxMTIsMjEgQEAKIAkuc2hvdyAgPSBjcGxiaW5mb19zaG93LAogfTsKIAorI2RlZmluZSBDUExCSU5GT19EQ1BMQl9GTEFHIDB4ODAwMDAwMDAKKwogc3RhdGljIGludCBjcGxiaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWNoYXIgYnVmWzI1Nl0sICpwYXRoLCAqcDsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwljaGFyIGNwbGJfdHlwZTsKIAl1bnNpZ25lZCBpbnQgY3B1OwotCWNoYXIgKnNfY3B1LCAqc19jcGxiOwogCWludCByZXQ7CiAJc3RydWN0IHNlcV9maWxlICptOwogCXN0cnVjdCBjcGxiaW5mb19kYXRhICpjZGF0YTsKIAotCXBhdGggPSBkX3BhdGgoJmZpbGUtPmZfcGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKElTX0VSUihwYXRoKSkKLQkJcmV0dXJuIFBUUl9FUlIocGF0aCk7Ci0Jc19jcHUgPSBzdHJzdHIocGF0aCwgIi9jcHUiKTsKLQlzX2NwbGIgPSBzdHJyY2hyKHBhdGgsICcvJyk7Ci0JaWYgKCFzX2NwdSB8fCAhc19jcGxiKQotCQlyZXR1cm4gLUVJTlZBTDsKKwljcHUgPSAodW5zaWduZWQgaW50KXBkZS0+ZGF0YTsKKwljcGxiX3R5cGUgPSBjcHUgJiBDUExCSU5GT19EQ1BMQl9GTEFHID8gJ0QnIDogJ0knOworCWNwdSAmPSB+Q1BMQklORk9fRENQTEJfRkxBRzsKIAotCWNwdSA9IHNpbXBsZV9zdHJ0b3VsKHNfY3B1ICsgNCwgJnAsIDEwKTsKIAlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTEzOSw3ICsxMzcsNyBAQAogCWNkYXRhID0gbS0+cHJpdmF0ZTsKIAogCWNkYXRhLT5wb3MgPSAwOwotCWNkYXRhLT5jcGxiX3R5cGUgPSB0b3VwcGVyKHNfY3BsYlsxXSk7CisJY2RhdGEtPmNwbGJfdHlwZSA9IGNwbGJfdHlwZTsKIAljcGxiaW5mb19zZXFfaW5pdChjZGF0YSwgY3B1KTsKIAogCXJldHVybiAwOwpAQCAtMTY4LDggKzE2NiwxMCBAQAogCQlpZiAoIWNwdV9kaXIpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlwcm9jX2NyZWF0ZSgiaWNwbGIiLCBTX0lSVUdPLCBjcHVfZGlyLCAmY3BsYmluZm9fZm9wcyk7Ci0JCXByb2NfY3JlYXRlKCJkY3BsYiIsIFNfSVJVR08sIGNwdV9kaXIsICZjcGxiaW5mb19mb3BzKTsKKwkJcHJvY19jcmVhdGVfZGF0YSgiaWNwbGIiLCBTX0lSVUdPLCBjcHVfZGlyLCAmY3BsYmluZm9fZm9wcywKKwkJCSh2b2lkICopY3B1KTsKKwkJcHJvY19jcmVhdGVfZGF0YSgiZGNwbGIiLCBTX0lSVUdPLCBjcHVfZGlyLCAmY3BsYmluZm9fZm9wcywKKwkJCSh2b2lkICopKGNwdSB8IENQTEJJTkZPX0RDUExCX0ZMQUcpKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9kbWEtbWFwcGluZy5jCmluZGV4IDJmNjJhOWYuLmU3NGU3NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZG1hLW1hcHBpbmcuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9kbWEtbWFwcGluZy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIER5bmFtaWMgRE1BIG1hcHBpbmcgc3VwcG9ydAogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIER5bmFtaWMgRE1BIG1hcHBpbmcgc3VwcG9ydC4KKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCA5MzFjNzhiLi44NGVkODM3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMSwyNSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5X3ByaW50ay5jCi0gKiBBdXRob3I6ICAgICAgIFJvYmluIEdldHogPHJnZXR6QGJsYWNrZmluLnVjbGludXgub3JnCisgKiBhbGxvdyBhIGNvbnNvbGUgdG8gYmUgdXNlZCBmb3IgZWFybHkgcHJpbnRrCisgKiBkZXJpdmVkIGZyb20gYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCiAgKgotICogQ3JlYXRlZDogICAgICAxNEF1ZzIwMDcKLSAqIERlc2NyaXB0aW9uOiAgYWxsb3cgYSBjb25zb2xlIHRvIGJlIHVzZWQgZm9yIGVhcmx5IHByaW50aworICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2VudHJ5LlMKaW5kZXggM2Y4NzY5Yi4uZjI3ZGMyMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9lbnRyeS5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2VudHJ5LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9maXhlZF9jb2RlLlMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9maXhlZF9jb2RlLlMKaW5kZXggMGQyZDllMC4uMDU2NTkxNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZml4ZWRfY29kZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZpeGVkX2NvZGUuUwpAQCAtNiw3ICs2LDEyIEBACiAgKiBUaGVzZSBhcmUgYWxpZ25lZCB0byAxNiBieXRlcywgc28gdGhhdCB3ZSBoYXZlIHNvbWUgc3BhY2UgdG8gcmVwbGFjZQogICogdGhlc2Ugc2VxdWVuY2VzIHdpdGggc29tZXRoaW5nIGVsc2UgKGUuZy4ga2VybmVsIHRyYXBzIGlmIHdlIGV2ZXIgZG8KICAqIEJGNTYxIFNNUCkuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZmxhdC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZmxhdC5jCmluZGV4IGQxODhiMjQuLmE4OGRhZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZsYXQuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9mbGF0LmMKQEAgLTEsMjEgKzEsNyBAQAogLyoKLSAqICBhcmNoL2JsYWNrZmluL2tlcm5lbC9mbGF0LmMKKyAqIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFuYWxvZyBEZXZpY2VzLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2luaXRfdGFzay5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaW5pdF90YXNrLmMKaW5kZXggYzI2YzM0ZC4uMTE4YzViOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaW5pdF90YXNrLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaW5pdF90YXNrLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvaW5pdF90YXNrLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCmluZGV4IDRiNWZkMzYuLmRiOWY5YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL21vZHVsZS5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNjdmYzdhNS4uYTZkZmE2YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvbW9kdWxlLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvbW9kdWxlLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNkZWZpbmUgcHJfZm10KGZtdCkgIm1vZHVsZSAlczogIiBmbXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwppbmRleCBmNWIyODYxLi40MzBhZTM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBCbGFja2ZpbiBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHByb2Nlc3MgaGFuZGxpbmcKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBCbGFja2ZpbiBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHByb2Nlc3MgaGFuZGxpbmcuCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCmluZGV4IDMwZjQ4MjguLjA5ODJiNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCkBAIC0xLDMwICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCi0gKiBCYXNlZCBvbjogICAgIFRha2VuIGZyb20gbGludXgva2VybmVsL3B0cmFjZS5jCi0gKiBBdXRob3I6ICAgICAgIGxpbnV4L2tlcm5lbC9wdHJhY2UuYyBpcyBieSBSb3NzIEJpcm8gMS8yMy85MiwgZWRpdGVkIGJ5IExpbnVzIFRvcnZhbGRzCisgKiBsaW51eC9rZXJuZWwvcHRyYWNlLmMgaXMgYnkgUm9zcyBCaXJvIDEvMjMvOTIsIGVkaXRlZCBieSBMaW51cyBUb3J2YWxkcworICogdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDogICAgICAxLzIzLzkyCi0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwppbmRleCAzNjk1MzViLi5jMjAyYTQ0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKQEAgLTEsOSArMSw1IEBACiAvKgotICogYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwotICoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaGFkb3dfY29uc29sZS5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2hhZG93X2NvbnNvbGUuYwppbmRleCA4YjhjNzEwLi41NTdlOWZlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaGFkb3dfY29uc29sZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NoYWRvd19jb25zb2xlLmMKQEAgLTQsOCArNCw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NpZ25hbC5jCmluZGV4IGRiYzNiYmYuLjlkOTBjMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NpZ25hbC5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3NpZ25hbC5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zeXNfYmZpbi5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc3lzX2JmaW4uYwppbmRleCAzZGE2MGZiLi5hZmNlZjEyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zeXNfYmZpbi5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3N5c19iZmluLmMKQEAgLTEsMzIgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3N5c19iZmluLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogY29udGFpbnMgdmFyaW91cyByYW5kb20gc3lzdGVtIGNhbGxzIHRoYXQgaGF2ZSBhIG5vbi1zdGFuZGFyZAorICogY2FsbGluZyBzZXF1ZW5jZSBvbiB0aGUgTGludXgvQmxhY2tmaW4gcGxhdGZvcm0uCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHZhcmlvdXMgcmFuZG9tIHN5c3RlbSBjYWxscyB0aGF0Ci0gKiAgICAgICAgICAgICAgIGhhdmUgYSBub24tc3RhbmRhcmQgY2FsbGluZyBzZXF1ZW5jZSBvbiB0aGUgTGludXgvYmZpbgotICogICAgICAgICAgICAgICBwbGF0Zm9ybS4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtOTEsMyArNjksMTQgQEAKIHsKIAlyZXR1cm4gc2FmZV9kbWFfbWVtY3B5KGRlc3QsIHNyYywgbGVuKTsKIH0KKworI2lmIGRlZmluZWQoQ09ORklHX0ZCKSB8fCBkZWZpbmVkKENPTkZJR19GQl9NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvZmIuaD4KK3Vuc2lnbmVkIGxvbmcgZ2V0X2ZiX3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgb3JpZ19hZGRyLAorCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXJldHVybiAodW5zaWduZWQgbG9uZylpbmZvLT5zY3JlZW5fYmFzZTsKK30KK0VYUE9SVF9TWU1CT0woZ2V0X2ZiX3VubWFwcGVkX2FyZWEpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMKaW5kZXggZjk3MTU3Ni4uMzU5Y2ZiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYwpAQCAtMSwxMyArMSwxMyBAQAogLyoKLSAqIGxpbnV4L2FyY2gva2VybmVsL3RpbWUtdHMuYwotICoKICAqIEJhc2VkIG9uIGFybSBjbG9ja2V2ZW50cyBpbXBsZW1lbnRhdGlvbiBhbmQgb2xkIGJmaW4gdGltZSB0aWNrLgogICoKLSAqIENvcHlyaWdodChDKSAyMDA4LCBHZW9UZWNobm9sb2dpZXMsIFZpdGphIE1ha2Fyb3YKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA4IEdlb1RlY2hub2xvZ2llcworICogICAgICAgICAgICAgICAgICAgICBWaXRqYSBNYWthcm92CiAgKgotICogVGhpcyBjb2RlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAyLiBGb3IgZGV0YWlscyBzZWUKLSAqIGtlcm5lbC1iYXNlL0NPUFlJTkcuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS5jCmluZGV4IGFkYjU0YWEuLmJkM2I1M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KQEAgLTgxLDExICs4MiwxMSBAQAogI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKIC8qCiAgKiBTaG91bGQgcmV0dXJuIHVzZWNvbmRzIHNpbmNlIGxhc3QgdGltZXIgdGljawogICovCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX1RJTUUKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldHRpbWVvZmZzZXQodm9pZCkKK3UzMiBhcmNoX2dldHRpbWVvZmZzZXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIGNsb2Nrc19wZXJfamlmZnk7CkBAIC0xODQsNjUgKzE4NSw2IEBACiAJdGltZV9zY2hlZF9pbml0KHRpbWVyX2ludGVycnVwdCk7CiB9CiAKLSNpZm5kZWYgQ09ORklHX0dFTkVSSUNfVElNRQotdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBzZXE7Ci0JdW5zaWduZWQgbG9uZyB1c2VjLCBzZWM7Ci0KLQlkbyB7Ci0JCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCQl1c2VjID0gZ2V0dGltZW9mZnNldCgpOwotCQlzZWMgPSB4dGltZS50dl9zZWM7Ci0JCXVzZWMgKz0gKHh0aW1lLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDKTsKLQl9Ci0Jd2hpbGUgKHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgc2VxLCBmbGFncykpOwotCi0Jd2hpbGUgKHVzZWMgPj0gVVNFQ19QRVJfU0VDKSB7Ci0JCXVzZWMgLT0gVVNFQ19QRVJfU0VDOwotCQlzZWMrKzsKLQl9Ci0KLQl0di0+dHZfc2VjID0gc2VjOwotCXR2LT50dl91c2VjID0gdXNlYzsKLX0KLUVYUE9SVF9TWU1CT0woZG9fZ2V0dGltZW9mZGF5KTsKLQotaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQotewotCXRpbWVfdCB3dG1fc2VjLCBzZWMgPSB0di0+dHZfc2VjOwotCWxvbmcgd3RtX25zZWMsIG5zZWMgPSB0di0+dHZfbnNlYzsKLQotCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwotCS8qCi0JICogVGhpcyBpcyByZXZvbHRpbmcuIFdlIG5lZWQgdG8gc2V0IHRoZSB4dGltZS50dl91c2VjCi0JICogY29ycmVjdGx5LiBIb3dldmVyLCB0aGUgdmFsdWUgaW4gdGhpcyBsb2NhdGlvbiBpcwotCSAqIGlzIHZhbHVlIGF0IHRoZSBsYXN0IHRpY2suCi0JICogRGlzY292ZXIgd2hhdCBjb3JyZWN0aW9uIGdldHRpbWVvZmRheQotCSAqIHdvdWxkIGhhdmUgZG9uZSwgYW5kIHRoZW4gdW5kbyBpdCEKLQkgKi8KLQluc2VjIC09IChnZXR0aW1lb2Zmc2V0KCkgKiBOU0VDX1BFUl9VU0VDKTsKLQotCXd0bV9zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOwotCi0JbnRwX2NsZWFyKCk7Ci0KLQl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQljbG9ja193YXNfc2V0KCk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKLSNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfVElNRSAqLwotCiAvKgogICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKaW5kZXggNTY0NjRjYi4uNmI3MzI1ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBIYW1pc2ggTWFjZG9uYWxkCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICB1c2VzIFMvVyBpbnRlcnJ1cHQgMTUgZm9yIHRoZSBzeXN0ZW0gY2FsbHMKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAyMWFjN2MyLi4xMGUxMjUzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUwotICogQmFzZWQgb246ICAgICBub25lIC0gb3JpZ2luYWwgd29yawotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDogICAgICBUdWUgU2VwIDIxIDIwMDQKLSAqIERlc2NyaXB0aW9uOiAgTWFzdGVyIGxpbmtlciBzY3JpcHQgZm9yIGJsYWNrZmluIGFyY2hpdGVjdHVyZQotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNkZWZpbmUgVk1MSU5VWF9TWU1CT0woX3N5bV8pIF8jI19zeW1fCkBAIC05Niw4ICs3Myw3IEBACiAJewogCQlfX3NkYXRhID0gLjsKIAkJLyogVGhpcyBnZXRzIGRvbmUgZmlyc3QsIHNvIHRoZSBnbG9iIGRvZXNuJ3Qgc3VjayBpdCBpbiAqLwotCQkuID0gQUxJR04oMzIpOwotCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQorCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKDMyKQogCiAjaWYgIUwxX0RBVEFfQV9MRU5HVEgKIAkJLiA9IEFMSUdOKDMyKTsKQEAgLTExNiwxMiArOTIsNyBAQAogCQlEQVRBX0RBVEEKIAkJQ09OU1RSVUNUT1JTCiAKLQkJLyogbWFrZSBzdXJlIHRoZSBpbml0X3Rhc2sgaXMgYWxpZ25lZCB0byB0aGUKLQkJICoga2VybmVsIHRocmVhZCBzaXplIHNvIHdlIGNhbiBsb2NhdGUgdGhlIGtlcm5lbAotCQkgKiBzdGFjayBwcm9wZXJseSBhbmQgcXVpY2tseS4KLQkJICovCi0JCS4gPSBBTElHTihUSFJFQURfU0laRSk7Ci0JCSooLmluaXRfdGFzay5kYXRhKQorCQlJTklUX1RBU0tfREFUQShUSFJFQURfU0laRSkKIAogCQlfX2VkYXRhID0gLjsKIAl9CkBAIC0xMzQsMzkgKzEwNSwxMCBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9fX2luaXRfYmVnaW4gPSAuOwogCi0JLmluaXQudGV4dCA6Ci0JewotCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkJX19zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX19laW5pdHRleHQgPSAuOwotCX0KLQkuaW5pdC5kYXRhIDoKLQl7Ci0JCS4gPSBBTElHTigxNik7Ci0JCUlOSVRfREFUQQotCX0KLQkuaW5pdC5zZXR1cCA6Ci0JewotCQkuID0gQUxJR04oMTYpOwotCQlfX19zZXR1cF9zdGFydCA9IC47Ci0JCSooLmluaXQuc2V0dXApCi0JCV9fX3NldHVwX2VuZCA9IC47Ci0JfQotCS5pbml0Y2FsbC5pbml0IDoKLQl7Ci0JCV9fX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9fX2luaXRjYWxsX2VuZCA9IC47Ci0JfQotCS5jb25faW5pdGNhbGwuaW5pdCA6Ci0JewotCQlfX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19fY29uX2luaXRjYWxsX2VuZCA9IC47Ci0JfQorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKKwkuID0gQUxJR04oMTYpOworCUlOSVRfREFUQV9TRUNUSU9OKDE2KQogCVBFUkNQVSg0KQotCVNFQ1VSSVRZX0lOSVQKIAogCS8qIHdlIGhhdmUgdG8gZGlzY2FyZCBleGl0IHRleHQgYW5kIHN1Y2ggYXQgcnVudGltZSwgbm90IGxpbmsgdGltZSwgdG8KIAkgKiBoYW5kbGUgZW1iZWRkZWQgY3Jvc3Mtc2VjdGlvbiByZWZlcmVuY2VzIChhbHQgaW5zdHJ1Y3Rpb25zLCBidWcKQEAgLTE4MSwxOCArMTIzLDkgQEAKIAkJRVhJVF9EQVRBCiAJfQogCi0JLmluaXQucmFtZnMgOgotCXsKLQkJLiA9IEFMSUdOKDQpOwotCQlfX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkqKC5pbml0LnJhbWZzKQotCQkuID0gQUxJR04oNCk7Ci0JCV9fX2luaXRyYW1mc19lbmQgPSAuOwotCX0KLQogCV9fbDFfbG1hX3N0YXJ0ID0gLjsKIAotCS50ZXh0X2wxIEwxX0NPREVfU1RBUlQgOiBBVChMT0FEQUREUiguaW5pdC5yYW1mcykgKyBTSVpFT0YoLmluaXQucmFtZnMpKQorCS50ZXh0X2wxIEwxX0NPREVfU1RBUlQgOiBBVChMT0FEQUREUiguZXhpdC5kYXRhKSArIFNJWkVPRiguZXhpdC5kYXRhKSkKIAl7CiAJCS4gPSBBTElHTig0KTsKIAkJX19zdGV4dF9sMSA9IC47CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9hc2hsZGkzLmMgYi9hcmNoL2JsYWNrZmluL2xpYi9hc2hsZGkzLmMKaW5kZXggYThjMjc5ZS4uYWI2OWQ4NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvYXNobGRpMy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2FzaGxkaTMuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9hc2hsZGkzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSAiZ2NjbGliLmgiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9hc2hyZGkzLmMgYi9hcmNoL2JsYWNrZmluL2xpYi9hc2hyZGkzLmMKaW5kZXggYTBkMzQxOS4uYjViMzUxZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvYXNocmRpMy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2FzaHJkaTMuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9hc2hyZGkzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSAiZ2NjbGliLmgiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9jaGVja3N1bS5jIGIvYXJjaC9ibGFja2Zpbi9saWIvY2hlY2tzdW0uYwppbmRleCBjZDYwNWU3Li5jNjI5NjlkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9jaGVja3N1bS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2NoZWNrc3VtLmMKQEAgLTEsMzIgKzEsMTIgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL2NoZWNrc3VtLmMKLSAqIEJhc2VkIG9uOiAgICAgbm9uZSAtIG9yaWdpbmFsIHdvcmsKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAotICogICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKLSAqICAgICAgICAgICAgICAgaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYIG9wZXJhdGluZworICogc3lzdGVtLiBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBCU0QgU29ja2V0IGludGVyZmFjZSBhcyB0aGUKKyAqIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KICAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9kaXZzaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL2RpdnNpMy5TCmluZGV4IDJhYzU5YzcuLmY4OWM1YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2RpdnNpMy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2RpdnNpMy5TCkBAIC0xLDEwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL2RpdnNpMy5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIDE2IC8gMzIgYml0IHNpZ25lZCBkaXZpc2lvbi4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKKyAqCisgKiAxNiAvIDMyIGJpdCBzaWduZWQgZGl2aXNpb24uCiAgKiAgICAgICAgICAgICAgICAgU3BlY2lhbCBjYXNlcyA6CiAgKiAgICAgICAgICAgICAgICAgICAgICAxKSAgSWYobnVtZXJhdG9yID09IDApCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKQEAgLTIyLDI1ICsyMSw2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUjAgLSBRdW90aWVudCAgICAobykKICAqICAgICAgICAgICAgICAgICBSZWdpc3RlcnMgVXNlZCA6IFIyLVI3LFAwLVAyCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKIC5nbG9iYWwgICBfX19kaXZzaTM7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9nY2NsaWIuaCBiL2FyY2gvYmxhY2tmaW4vbGliL2djY2xpYi5oCmluZGV4IDljY2QzOWEuLjcyNGYwN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2djY2xpYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2djY2xpYi5oCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL2djY2xpYi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2RlZmluZSBCSVRTX1BFUl9VTklUICA4CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9sc2hyZGkzLmMgYi9hcmNoL2JsYWNrZmluL2xpYi9sc2hyZGkzLmMKaW5kZXggZTU3YmY2Zi4uNTNmMTc0MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbHNocmRpMy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL2xzaHJkaTMuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9sc2hyZGkzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSAiZ2NjbGliLmgiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1jaHIuUyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbWNoci5TCmluZGV4IDVkYTQyODEuLjU0MmU0MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL21lbWNoci5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbWNoci5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL21lbWNoci5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL21lbWNtcC5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKaW5kZXggMjE5ZmEyOC4uY2U1YjlmMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jcHkuUwppbmRleCBlNjU0YTE4Li5jMzFiZjIyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1jcHkuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jcHkuUwpAQCAtMSwzNiArMSwxMyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogaW50ZXJuYWwgdmVyc2lvbiBvZiBtZW1jcHkoKSwgaXNzdWVkIGJ5IHRoZSBjb21waWxlciB0byBjb3B5IGJsb2NrcyBvZgorICogZGF0YSBhcm91bmQuIFRoaXMgaXMgcmVhbGx5IG1lbW1vdmUoKSAtIGl0IGhhcyB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aAorICogcG9zc2libGUgb3ZlcmxhcHMsIGJlY2F1c2UgdGhhdCBhbWJpZ3VpdHkgaXMgd2hlbiB0aGUgY29tcGlsZXIgZ2l2ZXMgdXAKKyAqIGFuZCBjYWxscyBhIGZ1bmN0aW9uLiBXZSBoYXZlIG91ciBvd24sIGludGVybmFsIHZlcnNpb24gc28gdGhhdCB3ZSBnZXQKKyAqIHNvbWV0aGluZyB3ZSB0cnVzdCwgZXZlbiBpZiB0aGUgdXNlciBoYXMgcmVkZWZpbmVkIHRoZSBub3JtYWwgc3ltYm9sLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIGludGVybmFsIHZlcnNpb24gb2YgbWVtY3B5KCksIGlzc3VlZCBieSB0aGUgY29tcGlsZXIKLSAqICAgICAgICAgICAgICAgdG8gY29weSBibG9ja3Mgb2YgZGF0YSBhcm91bmQuCi0gKiAgICAgICAgICAgICAgIFRoaXMgaXMgcmVhbGx5IG1lbW1vdmUoKSAtIGl0IGhhcyB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aAotICogICAgICAgICAgICAgICBwb3NzaWJsZSBvdmVybGFwcywgYmVjYXVzZSB0aGF0IGFtYmlndWl0eSBpcyB3aGVuIHRoZSBjb21waWxlcgotICogICAgICAgICAgICAgICBnaXZlcyB1cCBhbmQgY2FsbHMgYSBmdW5jdGlvbi4gV2UgaGF2ZSBvdXIgb3duLCBpbnRlcm5hbCB2ZXJzaW9uCi0gKiAgICAgICAgICAgICAgIHNvIHRoYXQgd2UgZ2V0IHNvbWV0aGluZyB3ZSB0cnVzdCwgZXZlbiBpZiB0aGUgdXNlciBoYXMgcmVkZWZpbmVkCi0gKiAgICAgICAgICAgICAgIHRoZSBub3JtYWwgc3ltYm9sLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMKaW5kZXggMzNmODY1My4uODBjMjQwYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbW1vdmUuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1zZXQuUwppbmRleCA4MTU5MTM2Li5jMzBkOTliIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1zZXQuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1zZXQuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9tZW1zZXQuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL21vZHNpMy5TCmluZGV4IGNhMWRkMzkuLjhiMGM3ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL21vZHNpMy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL21vZHNpMy5TCkBAIC0xLDM2ICsxLDEyIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBUaGlzIHByb2dyYW0gY29tcHV0ZXMgMzIgYml0IHNpZ25lZCByZW1haW5kZXIuIEl0IGNhbGxzIGRpdjMyIGZ1bmN0aW9uCisgKiBmb3IgcXVvdGllbnQgZXN0aW1hdGlvbi4KKyAqICAgUmVnaXN0ZXJzIGluOiAgUjAsIFIxID0gTnVtZXJhdG9yLyBEZW5vbWluYXRvcgorICogICBSZWdpc3RlcnMgb3V0OiBSMCAgICAgPSBSZW1haW5kZXIKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIHByb2dyYW0gY29tcHV0ZXMgMzIgYml0IHNpZ25lZCByZW1haW5kZXIuIEl0IGNhbGxzIGRpdjMyIGZ1bmN0aW9uCi0gKiAgICAgICAgICAgICAgIGZvciBxdW90aWVudCBlc3RpbWF0aW9uLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogICAgICAgICAgICAgICBSZWdpc3RlcnMgdXNlZCA6Ci0gKiAgICAgICAgICAgICAgIE51bWVyYXRvci8gRGVub21pbmF0b3IgaW4gIFIwLCBSMQotICogICAgICAgICAgICAgICAgIFIwICAtICByZXR1cm5zIHJlbWFpbmRlci4KLSAqICAgICAgICAgICAgICAgICBSMi1SNwotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAuZ2xvYmFsIF9fX21vZHNpMzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbXVsZGkzLlMKaW5kZXggYWJkZTEyMC4uOTUzYTM4YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbXVsZGkzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbXVsZGkzLlMKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKKyAqLworCiAuYWxpZ24gMgogLmdsb2JhbCBfX19tdWxkaTM7CiAudHlwZSBfX19tdWxkaTMsIFNUVF9GVU5DOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvb3V0cy5TIGIvYXJjaC9ibGFja2Zpbi9saWIvb3V0cy5TCmluZGV4IDQ2ODViN2EuLjI1MGY0ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKQEAgLTEsMzAgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL291dHMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIEJhcyBWZXJtZXVsZW4gPGJhc0BidXl3YXlzLm5sPgorICogSW1wbGVtZW50YXRpb24gb2Ygb3V0c3tid2x9IGZvciBCbGFja0ZpbiBwcm9jZXNzb3JzIHVzaW5nIHplcm8gb3ZlcmhlYWQgbG9vcHMuCiAgKgotICogQ3JlYXRlZDogICAgICBUdWUgTWFyIDIyIDE1OjI3OjI0IENFU1QgMjAwNQotICogRGVzY3JpcHRpb246ICBJbXBsZW1lbnRhdGlvbiBvZiBvdXRze2J3bH0gZm9yIEJsYWNrRmluIHByb2Nlc3NvcnMgdXNpbmcgemVybyBvdmVyaGVhZCBsb29wcy4KKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBCdXlXYXlzIEJWCisgKiAgICAgICAgICAgICAgICAgICAgICBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KICAqCi0gKiBNb2RpZmllZDogICAgIENvcHlyaWdodCAoQykgMjAwNSBCYXMgVmVybWV1bGVuLCBCdXlXYXlzIEJWIDxiYXNAYnV5d2F5cy5ubD4KLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL3NtdWxzaTNfaGlnaHBhcnQuUyBiL2FyY2gvYmxhY2tmaW4vbGliL3NtdWxzaTNfaGlnaHBhcnQuUwppbmRleCBlMzgzY2QzLi45OWVlOGM1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9zbXVsc2kzX2hpZ2hwYXJ0LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvc211bHNpM19oaWdocGFydC5TCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCisgKi8KKwogLmFsaWduIDIKIC5nbG9iYWwgX19fc211bHNpM19oaWdocGFydDsKIC50eXBlIF9fX3NtdWxzaTNfaGlnaHBhcnQsIFNUVF9GVU5DOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvdWRpdnNpMy5TIGIvYXJjaC9ibGFja2Zpbi9saWIvdWRpdnNpMy5TCmluZGV4IDU4ZmQ5NmQuLjk3ZTkwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi91ZGl2c2kzLlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvdWRpdnNpMy5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL3Vtb2RzaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL3Vtb2RzaTMuUwppbmRleCA0ZjJiNzZlLi4xNjhlYmE3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvdW1vZHNpMy5TCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL3Vtb2RzaTMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBsaWJnY2MxIHJvdXRpbmVzIGZvciBCbGFja2ZpbiA1eHgKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBsaWJnY2MxIHJvdXRpbmVzIGZvciBCbGFja2ZpbiA1eHgKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZkZWYgQ09ORklHX0FSSVRITUVUSUNfT1BTX0wxCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi91bXVsc2kzX2hpZ2hwYXJ0LlMgYi9hcmNoL2JsYWNrZmluL2xpYi91bXVsc2kzX2hpZ2hwYXJ0LlMKaW5kZXggNjdiNzk5My4uMDUxODI0YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvdW11bHNpM19oaWdocGFydC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL3VtdWxzaTNfaGlnaHBhcnQuUwpAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQorICovCisKIC5hbGlnbiAyCiAuZ2xvYmFsIF9fX3VtdWxzaTNfaGlnaHBhcnQ7CiAudHlwZSBfX191bXVsc2kzX2hpZ2hwYXJ0LCBTVFRfRlVOQzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYwppbmRleCAwM2U0YTk5Li4wMTk3NWMwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2JvYXJkcy9lemJyZC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKLSAqIEF1dGhvcjogICAgICAgQnJ5YW4gV3UgPGNvb2xvbmV5QGtlcm5lbC5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTU3MSwxOSArNTQ5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KIHsKIAlWUlBBSVIoVkxFVl8xMDAsIDQwMDAwMDAwMCksCkBAIC02NjAsOCArNjI1LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZlemJyZF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV6YnJkX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9kbWEuYwppbmRleCA2OThlODhjLi43OGI0MzYwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2RtYS5jCkBAIC0xLDMxICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBCcnlhbiBXdSA8Y29vbG9uZXlAa2VybmVsLm9yZz4KKyAqIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmNTE4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmNTE4LmgKaW5kZXggNzhkYTFhMC4uODU2YjMzMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZjUxOC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmY1MTguaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2JmNTE4LmgKLSAqIEJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2JmNTI3LmgKLSAqIEF1dGhvcjoJTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjUxOAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjUxOF9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGRiYWRlOTMuLjk3MGQzMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkIGZpbGUKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggODM0MjFkMy4uNmNmYjI0NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2JsYWNrZmluLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTIuaAppbmRleCA4MjBjMTNjLi40OTMwMjBkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTEyLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9jZGVmYmY1MTIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUxMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaAppbmRleCBkZmU0OTJkLi5lMWQ5OTkxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE0LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9jZGVmYmY1MTQuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTE0X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oCmluZGV4IDE0ZGY0M2QuLjZiMzY0ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTYuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2NkZWZiZjUxNi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MTZfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmgKaW5kZXggYmFmYjM3MC4uOTI5YjkwNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxOC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZmJmNTE4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUxOF9ICkBAIC0yMTEsNiArMTg2LDQ3IEBACiAjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19BQk9SVCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19BQk9SVCkKICNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19BQk9SVCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfQUJPUlQsIHZhbCkKIAorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfQ1RMKCkgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRU1BQ19QVFBfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0NUTCh2YWwpICAgICAgICAgICAgYmZpbl93cml0ZTE2KEVNQUNfUFRQX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfSUUoKSAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRU1BQ19QVFBfSUUpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfSUUodmFsKSAgICAgICAgICAgICBiZmluX3dyaXRlMTYoRU1BQ19QVFBfSUUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lTVEFUKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0lTVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0lTVEFUKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTE2KEVNQUNfUFRQX0lTVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GT0ZGKCkgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GT0ZGKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0ZPRkYodmFsKSAgICAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX0ZPRkYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0ZWMSgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX0ZWMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9GVjEodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9GVjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0ZWMigpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX0ZWMikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9GVjIodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9GVjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0ZWMygpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX0ZWMykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9GVjModmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9GVjMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0FEREVORCgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX0FEREVORCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9BRERFTkQodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9BRERFTkQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0FDQ1IoKSAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX0FDQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfQUNDUih2YWwpICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfQUNDUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfT0ZGU0VUKCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfT0ZGU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX09GRlNFVCh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX09GRlNFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfVElNRUxPKCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfVElNRUxPKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX1RJTUVMTyh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX1RJTUVMTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfVElNRUhJKCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfVElNRUhJKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX1RJTUVISSh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX1RJTUVISSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfUlhTTkFQTE8oKSAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfUlhTTkFQTE8pCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9SWFNOQVBISSgpICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9SWFNOQVBISSkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RYU05BUExPKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RYU05BUExPKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfVFhTTkFQSEkoKSAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfVFhTTkFQSEkpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BTEFSTUxPKCkgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BTEFSTUxPKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0FMQVJNTE8odmFsKSAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX0FMQVJNTE8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0FMQVJNSEkoKSAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX0FMQVJNSEkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfQUxBUk1ISSh2YWwpICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfQUxBUk1ISSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfSURfT0ZGKCkgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRU1BQ19QVFBfSURfT0ZGKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0lEX09GRih2YWwpICAgICAgICAgYmZpbl93cml0ZTE2KEVNQUNfUFRQX0lEX09GRiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfSURfU05BUCgpICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfSURfU05BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9JRF9TTkFQKHZhbCkgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9JRF9TTkFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9QUFNfU1RBUlRISSgpICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9QUFNfU1RBUlRISSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9QUFNfU1RBUlRISSh2YWwpICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9QUFNfU1RBUlRISSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfUFBTX1BFUklPRCgpICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfUFBTX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9QUFNfUEVSSU9EKHZhbCkgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9QUFNfUEVSSU9ELCB2YWwpCisKIC8qIFJlbW92YWJsZSBTdG9yYWdlIEludGVyZmFjZSBSZWdpc3RlcnMgKi8KIAogI2RlZmluZSBiZmluX3JlYWRfUlNJX1BXUl9DVEwoKSAgICAgICAgYmZpbl9yZWFkMTYoUlNJX1BXUl9DT05UUk9MKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MXhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MXhfYmFzZS5oCmluZGV4IGVlM2Q0NzMuLjFkOTcwZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTF4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxeF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9jZGVmQkY1MXhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUyWF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTEyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTEyLmgKaW5kZXggYTk2Y2E5MC4uOWI1MDViYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTIuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2RlZkJGNTEyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTEyX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTQuaAppbmRleCA1NmVlNWE3Li5iNWFkY2EyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvZGVmQkY1MTQuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxNF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE2LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE2LmgKaW5kZXggZGZjOTM4NC4uN2ViMTg3NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2RlZkJGNTE2LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MTZfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxOC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxOC5oCmluZGV4IDZlOTgyYWIuLjc5NGNmMDZlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxOC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvZGVmQkY1MTguaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxOF9ICkBAIC02NDgsNCArNjI0LDMyIEBACiAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJXUiAgMHgxICAgICAgICAvKiBSZWFkIFdhaXQgUmVxdWVzdCAqLwogCisvKiBCaXQgbWFza3MgZm9yIEVNQUNfUFRQX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQVFBfRU4gIDB4MSAgICAgICAgLyogRW5hYmxlIHRoZSBQVFBfVFNZTkMgbW9kdWxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVEwgIDB4MiAgICAgICAgLyogVGltZXN0YW1wIGxvY2sgY29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBU0VOICAweDEwICAgICAgIC8qIEF1eGlsaWFyeSBzbmFwc2hvdCBjb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUFBTRU4gIDB4ODAgICAgICAgLyogUHVsc2UtcGVyLXNlY29uZCAoUFBTKSBjb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0tPRU4gIDB4MjAwMCAgICAgLyogQ2xvY2sgb3V0cHV0IGNvbnRyb2wgKi8KKworLyogQml0IG1hc2tzIGZvciBFTUFDX1BUUF9JRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFMSUUgIDB4MSAgICAgICAgLyogQWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJYRUlFICAweDIgICAgICAgIC8qIFJlY2VpdmUgZXZlbnQgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJYR0lFICAweDQgICAgICAgIC8qIFJlY2VpdmUgZ2VuZXJhbCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRYSUUgIDB4OCAgICAgICAgLyogVHJhbnNtaXQgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJYT1ZFICAweDEwICAgICAgIC8qIFJlY2VpdmUgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFhPVkUgIDB4MjAgICAgICAgLyogVHJhbnNtaXQgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFTSUUgIDB4NDAgICAgICAgLyogQXV4aWxpYXJ5IHNuYXBzaG90IGludGVycnVwdCBlbmFibGUgKi8KKworLyogQml0IG1hc2tzIGZvciBFTUFDX1BUUF9JU1RBVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBTFMgIDB4MSAgICAgICAgLyogQWxhcm0gc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJYRUwgIDB4MiAgICAgICAgLyogUmVjZWl2ZSBldmVudCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJYR0wgIDB4NCAgICAgICAgLyogUmVjZWl2ZSBnZW5lcmFsIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFhUTCAgMHg4ICAgICAgICAvKiBUcmFuc21pdCBzbmFwc2hvdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUlhPViAgMHgxMCAgICAgICAvKiBSZWNlaXZlIHNuYXBzaG90IG92ZXJydW4gc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRYT1YgIDB4MjAgICAgICAgLyogVHJhbnNtaXQgc25hcHNob3Qgb3ZlcnJ1biBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFTTCAgMHg0MCAgICAgICAvKiBBdXhpbGlhcnkgc25hcHNob3QgaW50ZXJydXB0IHN0YXR1cyAqLworCiAjZW5kaWYgLyogX0RFRl9CRjUxOF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTF4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCmluZGV4IDFiZWM4ZDEuLmUwNmY0MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvZGVmQkY1MXhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxWF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDk3NTc2ODMuLmJiYWIyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCAzZmYwZjA5Li4xNGU1MmVjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvaXJxLmgKLSAqIGJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2lycS5oCi0gKiBhdXRob3I6CU1pY2hhZWwgSGVubmVyaWNoIChtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkY1MThfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IGEwZmM3N2YuLmUzNTI5MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW50cy1wcmlvcml0eS5jCmluZGV4IDMxNTFmZDUuLmJiMDViZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgQnJ5YW4gV3UgPGNvb2xvbmV5QGtlcm5lbC5vcmc+CisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMKaW5kZXggMDhhM2YwMS4uZjE5OTZiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbS1iZjUyNy5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC02MTYsMTIgKzU5NSw2IEBACiB9OwogI2VuZGlmICAvKiBzcGkgbWFzdGVyIGFuZCBkZXZpY2VzICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNzg2LDYgKzc1OSwxMSBAQAogCQkuaXJxID0gSVJRX1BGOCwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtODIxLDE5ICs3OTksNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQogewogCVZSUEFJUihWTEVWXzEwMCwgNDAwMDAwMDAwKSwKQEAgLTkwOSwxMCArODc0LDYgQEAKIAkmYmZpbl9zcGkwX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogCSZiZmluX3VhcnRfZGV2aWNlLAogI2VuZGlmCkBAIC05NDIsOCArOTAzLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIAkmY21fZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjbV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKaW5kZXggNjhiNGM4MC4uY2FkMjNiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTYxMSwxOSArNTg5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KIHsKIAlWUlBBSVIoVkxFVl8xMDAsIDQwMDAwMDAwMCksCkBAIC03MzIsOCArNjk3LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZlemJyZF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV6YnJkX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwppbmRleCAyODQ5YjA5Li5mMDk2NjVmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtNzE2LDEyICs2OTQsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9hZHY3MzkzX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLWFkdjczOTMiLAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl91YXJ0X3Jlc291cmNlc1tdID0gewogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMApAQCAtODM3LDYgKzgwOSwxMSBAQAogCQkuaXJxID0gSVJRX1BGOCwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtOTA1LDE5ICs4ODIsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQogewogCVZSUEFJUihWTEVWXzEwMCwgNDAwMDAwMDAwKSwKQEAgLTEwMDEsMTAgKzk2NSw2IEBACiAJJmJmNTJ4X3QzNTBtY3FiX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogCSZiZmluX3VhcnRfZGV2aWNlLAogI2VuZGlmCkBAIC0xMDM4LDggKzk5OCw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpraXRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemtpdF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvZG1hLmMKaW5kZXggMjMxODc3NS4uN2JjNzU3NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmgKaW5kZXggMzgzMmFhYi4uZmY2OGM4OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZjUyNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmY1MjcuaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2JmNTI3LmgKLSAqIEJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmNTM3LmgKLSAqIEF1dGhvcjoJTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTI3Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTI3X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggZWJkNmNlYi4uYzFkNTViOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9iZmluX3NlcmlhbF81eHguaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglibGFja2ZpbiBzZXJpYWwgZHJpdmVyIGhlYWQgZmlsZQotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCBlYTljYjBmLi5lN2Q2MDM0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTIyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyMi5oCmluZGV4IDY2M2MyYmIuLjEwNzlhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTIyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjIuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmgKaW5kZXggMDAzNzdlYi4uZGMzMTE5ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyNS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjVfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKaW5kZXggZmNhOGRiNy4uZDY1Nzk0NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjdfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oCmluZGV4IDFmZTc2ZDguLjcwMTRkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTJ4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyeF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MnhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTJYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaAppbmRleCAwYThjZGNkLi5jYjEzOWEyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTIyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyMi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvZGVmQkY1MjIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUyMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmgKaW5kZXggNWNkNzU3Ni4uODJhYmVmYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjUuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTI1LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MjVfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oCmluZGV4IGYwNDBmMzYuLjU3MGExMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI3LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTI3X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKaW5kZXggNjhiNTVkMC4uZjgyMTcwMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyeF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MlhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAwNmI2ZWViLi4xMDRiZmY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggOGVhNjYwZC4uYWE2NTc5YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkY1MjdfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDcyYjE2NTIuLmQ0NTE4YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW50cy1wcmlvcml0eS5jCmluZGV4IGY4YzhhY2QuLjQ0Y2EyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYwppbmRleCA2YzJiNDdmLi40M2Y0M2EwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCkBAIC0xLDMyICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvSDg2MDYuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBKYXZpZXIgSGVycmVybyA8amhlcnJlcm9AaHZzaXN0ZW1hcy5lcz4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDctMjAwOCBIViBTaXN0ZW1hcyBTLkwuCisgKiAgICAgICAgICAgICAgICAgICAgICBKYXZpZXIgSGVycmVybyA8amhlcnJlcm9AaHZzaXN0ZW1hcy5lcz4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNwotICogRGVzY3JpcHRpb246ICBCb2FyZCBJbmZvIEZpbGUgZm9yIHRoZSBIViBTaXN0ZW1hcyBIODYwNiBib2FyZAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMKLSAqCQkgQ29weXJpZ2h0IDIwMDcsMjAwOCBIViBTaXN0ZW1hcyBTLkwuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYwppbmRleCA4MjA4ZDY3Li5iNTgwODg0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYwpAQCAtMSwxNiArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JsYWNrc3RhbXAuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBCZW5qYW1pbiBNYXR0aGV3cyA8Ym1hdEBsbGUucm9jaGVzdGVyLmVkdT4KLSAqICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIEJvYXJkIEluZm8gRmlsZSBmb3IgdGhlIEJsYWNrU3RhbXAKICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDgKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgSW5mbyBGaWxlIGZvciB0aGUgQmxhY2tTdGFtcAotICoKLSAqIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiAgICAgICAgICAgICAgICAyMDA4IEJlbmphbWluIE1hdHRoZXdzIDxibWF0QGxsZS5yb2NoZXN0ZXIuZWR1PgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgogICogTW9yZSBpbmZvIGFib3V0IHRoZSBCbGFja1N0YW1wIGF0OgogICogCWh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy9nZi9wcm9qZWN0L2JsYWNrc3RhbXAvCkBAIC0yODEsMTkgKzI3NSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCkBAIC0zODQsOCArMzY1LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogCSZpMmNfZ3Bpb19kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJsYWNrc3RhbXBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jCmluZGV4IDc0NDNiMjYuLjdmYzNiODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTMzLmMKQEAgLTEsMzAgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4gQ29weXJpZ2h0IDIwMDUKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjYxLDE5ICsyNDEsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdWFydF9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC01MDYsOCArNDczLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZwYXJhX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1MzNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCmluZGV4IGZkNTE4ZTMuLmQ0Njg5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2V6a2l0LmMKLSAqIEJhc2VkIG9uOiAgICAgT3JpZ2luYWwgV29yawotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDUKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOiAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+IC0gTmFtZWQgdGhlIGJvYXJkcwotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMzMsMTIgKzExLDE0IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxMzYyLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+CiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KQEAgLTU2LDEyICszNiw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KIC8qCiAgKiAgVVNCLUxBTiBFekV4dGVuZGVyIGJvYXJkCiAgKiAgRHJpdmVyIG5lZWRzIHRvIGtub3cgYWRkcmVzcywgaXJxIGFuZCBmbGFnIHBpbi4KQEAgLTk4LDU0ICs3Miw2OSBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX1BTRDQyNTZHKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUFNENDI1NkdfTU9EVUxFKQotc3RhdGljIGNvbnN0IGNoYXIgKm1hcF9wcm9iZXNbXSA9IHsKLQkic3RtX2ZsYXNoIiwKLQlOVUxMLAorI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZXpraXRfcGFydGl0aW9uc19hW10gPSB7CisJeworCQkubmFtZSAgICAgICA9ICJib290bG9hZGVyKG5vciBhKSIsCisJCS5zaXplICAgICAgID0gMHg0MDAwMCwKKwkJLm9mZnNldCAgICAgPSAwLAorCX0sIHsKKwkJLm5hbWUgICAgICAgPSAibGludXgga2VybmVsKG5vciBhKSIsCisJCS5zaXplICAgICAgID0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldCAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBzdG1fcHJpX2RhdGFfYSA9IHsKLQkubWFwbmFtZSAgICA9ICJGbGFzaCBBIFByaW1hcnkiLAotCS5tYXBfcHJvYmVzID0gbWFwX3Byb2JlcywKLQkuYmFua3dpZHRoICA9IDIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlemtpdF9mbGFzaF9kYXRhX2EgPSB7CisJLndpZHRoICAgICAgPSAyLAorCS5wYXJ0cyAgICAgID0gZXpraXRfcGFydGl0aW9uc19hLAorCS5ucl9wYXJ0cyAgID0gQVJSQVlfU0laRShlemtpdF9wYXJ0aXRpb25zX2EpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdG1fcHJpX3Jlc291cmNlX2EgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV6a2l0X2ZsYXNoX3Jlc291cmNlX2EgPSB7CiAJLnN0YXJ0ID0gMHgyMDAwMDAwMCwKIAkuZW5kICAgPSAweDIwMGZmZmZmLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RtX3ByaV9kZXZpY2VfYSA9IHsKLQkubmFtZSAgICAgICAgICA9ICJtdGQtcmFtIiwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV6a2l0X2ZsYXNoX2RldmljZV9hID0geworCS5uYW1lICAgICAgICAgID0gInBoeXNtYXAtZmxhc2giLAogCS5pZCAgICAgICAgICAgID0gMCwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzdG1fcHJpX2RhdGFfYSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXpraXRfZmxhc2hfZGF0YV9hLAogCX0sCiAJLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSAgICAgID0gJnN0bV9wcmlfcmVzb3VyY2VfYSwKKwkucmVzb3VyY2UgICAgICA9ICZlemtpdF9mbGFzaF9yZXNvdXJjZV9hLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0ZGF0YV9tdGRfcmFtIHN0bV9wcmlfZGF0YV9iID0gewotCS5tYXBuYW1lICAgID0gIkZsYXNoIEIgUHJpbWFyeSIsCi0JLm1hcF9wcm9iZXMgPSBtYXBfcHJvYmVzLAotCS5iYW5rd2lkdGggID0gMiwKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlemtpdF9wYXJ0aXRpb25zX2JbXSA9IHsKKwl7CisJCS5uYW1lICAgPSAiZmlsZSBzeXN0ZW0obm9yIGIpIiwKKwkJLnNpemUgICA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RtX3ByaV9yZXNvdXJjZV9iID0geworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZXpraXRfZmxhc2hfZGF0YV9iID0geworCS53aWR0aCAgICAgID0gMiwKKwkucGFydHMgICAgICA9IGV6a2l0X3BhcnRpdGlvbnNfYiwKKwkubnJfcGFydHMgICA9IEFSUkFZX1NJWkUoZXpraXRfcGFydGl0aW9uc19iKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXpraXRfZmxhc2hfcmVzb3VyY2VfYiA9IHsKIAkuc3RhcnQgPSAweDIwMTAwMDAwLAogCS5lbmQgICA9IDB4MjAxZmZmZmYsCiAJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdG1fcHJpX2RldmljZV9iID0gewotCS5uYW1lICAgICAgICAgID0gIm10ZC1yYW0iLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXpraXRfZmxhc2hfZGV2aWNlX2IgPSB7CisJLm5hbWUgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkICAgICAgICAgICAgPSA0LAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnN0bV9wcmlfZGF0YV9iLAorCQkucGxhdGZvcm1fZGF0YSA9ICZlemtpdF9mbGFzaF9kYXRhX2IsCiAJfSwKIAkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlICAgICAgPSAmc3RtX3ByaV9yZXNvdXJjZV9iLAorCS5yZXNvdXJjZSAgICAgID0gJmV6a2l0X2ZsYXNoX3Jlc291cmNlX2IsCiB9OwogI2VuZGlmCiAKQEAgLTQwMCwxOSArMzg5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ2MCwxMyArNDM2LDIxIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBiZmluX2kyY19ib2FyZF9pbmZvW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplemtpdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAogCSZiZmluX2RwbWMsCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfUFNENDI1NkcpIHx8IGRlZmluZWQoQ09ORklHX01URF9QU0Q0MjU2R19NT0RVTEUpCi0JJnN0bV9wcmlfZGV2aWNlX2EsCi0JJnN0bV9wcmlfZGV2aWNlX2IsCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKKwkmZXpraXRfZmxhc2hfZGV2aWNlX2EsCisJJmV6a2l0X2ZsYXNoX2RldmljZV9iLAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUExBVFJBTSkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BMQVRSQU1fTU9EVUxFKQpAQCAtNDgyLDEwICs0NjYsNiBAQAogCSZiZmluX3NwaTBfZGV2aWNlLAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi0JJmJmaW5fZmJfYWR2NzM5M19kZXZpY2UsCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKIAkmcnRjX2RldmljZSwKICNlbmRpZgpAQCAtNTA3LDggKzQ4Nyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKIAkmaTJjX2dwaW9fZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemtpdF9pbml0KHZvaWQpCkBAIC01MTYsNiArNDk0LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICIlcygpOiByZWdpc3RlcmluZyBkZXZpY2UgcmVzb3VyY2VzXG4iLCBfX2Z1bmNfXyk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZXpraXRfZGV2aWNlcywgQVJSQVlfU0laRShlemtpdF9kZXZpY2VzKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYmZpbl9zcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShiZmluX3NwaV9ib2FyZF9pbmZvKSk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYmZpbl9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGJmaW5faTJjX2JvYXJkX2luZm8pKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYwppbmRleCBmMTliNjMzNy4uNjQ0YmU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMKQEAgLTEsMzQgKzEsMTIgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pcDB4LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JmMS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9zdGFtcC5jCi0gKiBBdXRob3I6ICAgICAgIEl2YW4gRGFub3YgPGlkYW5vdkBnbWFpbC5jb20+Ci0gKiAgICAgICAgICAgICAgIE1vZGlmaWVkIGZvciBJUDBYIERhdmlkIFJvd2UKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNyBEYXZpZCBSb3dlCisgKiAgICAgICAgICAgICAgICAyMDA2IEludHJhdHJhZGUgTHRkLgorICogICAgICAgICAgICAgICAgICAgICBJdmFuIERhbm92IDxpZGFub3ZAZ21haWwuY29tPgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDcKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgaW5mbyBmaWxlIGZvciB0aGUgSVAwNC9JUDA4IGJvYXJkcywgd2hpY2gKLSAqICAgICAgICAgICAgICAgYXJlIGRlcml2ZWQgZnJvbSB0aGUgQmxhY2tmaW5PbmUgVjIuMCBib2FyZHMuCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENPcHlyaWdodCAyMDA3IERhdmlkIFJvd2UKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDYgSW50cmF0cmFkZSBMdGQuCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMTQ1LDcgKzEyMyw2IEBACiAJLmN0bF9yZWcgPSAweDEwMDAsCQkvKiBDUE9MPTAsQ1BIQT0wLFNhbmRpc2sgMUcgd29yayAqLwogCS5lbmFibGVfZG1hID0gMCwJCS8qIGlmIDEgLSBibG9jayEhISAqLwogCS5iaXRzX3Blcl93b3JkID0gOCwKLQkuY3NfY2hhbmdlX3Blcl93b3JkID0gMCwKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCmluZGV4IDcyOWZkN2MuLjgyZjcwZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL3N0YW1wLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIEluZm8gRmlsZSBmb3IgdGhlIEJGNTMzLVNUQU1QCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC05NSwxMiArNzMsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9hZHY3MzkzX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLWFkdjczOTMiLAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX05FVDIyNzIpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9ORVQyMjcyX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmV0MjI3Ml9iZmluX3Jlc291cmNlc1tdID0gewogCXsKQEAgLTQzNiwxOSArNDA4LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ4Nyw2ICs0NDYsMTEgQEAKIAkJLmlycSA9IDM5LAogCX0sCiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCisJeworCQlJMkNfQk9BUkRfSU5GTygiYmZpbi1hZHY3MzkzIiwgMHgyQiksCisJfSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQpAQCAtNTI4LDEwICs0OTIsNiBAQAogCSZzbWM5MXhfZGV2aWNlLAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi0JJmJmaW5fZmJfYWR2NzM5M19kZXZpY2UsCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9ORVQyMjcyKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfTkVUMjI3Ml9NT0RVTEUpCiAJJm5ldDIyNzJfYmZpbl9kZXZpY2UsCiAjZW5kaWYKQEAgLTU2Myw4ICs1MjMsNiBAQAogCSZpMmNfZ3Bpb19kZXZpY2UsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9CRklOX0FTWU5DKSB8fCBkZWZpbmVkKENPTkZJR19NVERfQkZJTl9BU1lOQ19NT0RVTEUpCiAJJnN0YW1wX2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2RtYS5jCmluZGV4IDdhNDQzYzMuLjRhMTRhNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmY1MzMuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmY1MzMuaAppbmRleCBjZjQ0MjdjLi5lM2UwNWY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmNTMzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZjUzMy5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvYmY1MzMuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTYxCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTMzX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggNjk2NWI0MC4uOWUxZjNkZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9iZmluX3NlcmlhbF81eHguaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglibGFja2ZpbiBzZXJpYWwgZHJpdmVyIGhlYWQgZmlsZQotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCA0OTllODk3Li5mNGJkNmRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9jZGVmQkY1MzIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvY2RlZkJGNTMyLmgKaW5kZXggYmJjM2M4My4uZmViMjM5MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9jZGVmQkY1MzIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2NkZWZCRjUzMi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvY2RlZkJGNTMyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MzJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9kZWZCRjUzMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9kZWZCRjUzMi5oCmluZGV4IDdmNDYzMzIuLjAyYjMyOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZGVmQkY1MzIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2RlZkJGNTMyLmgKQEAgLTEsNDggKzEsMTAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBQdWJsaWMKLSAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBOb24tR1BMIExpY2Vuc2UgYWxzbyBhdmFpbGFibGUgYXMgcGFydCBvZiBWaXN1YWxEU1ArKwotICogaHR0cDovL3d3dy5hbmFsb2cuY29tL3Byb2Nlc3NvcnMvcmVzb3VyY2VzL2Nyb3NzY29yZS92aXN1YWxEc3BEZXZTb2Z0d2FyZS5odG1sCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAxLTIwMDUgQW5hbG9nIERldmljZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAotICoKLSAqIFRoaXMgZmlsZSB1bmRlciBzb3VyY2UgY29kZSBjb250cm9sLCBwbGVhc2Ugc2VuZCBidWdzIG9yIGNoYW5nZXMgdG86Ci0gKiBkc3B0b29scy5zdXBwb3J0QGFuYWxvZy5jb20KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9kZWZCRjUzMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFN5c3RlbSAmIE1NUiBiaXQgYW5kIEFkZHJlc3MgZGVmaW5pdGlvbnMgZm9yIEFEU1AtQkY1MzIKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KLS8qIFNZU1RFTSAmIE1NIFJFR0lTVEVSIEJJVCAmIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MzIgKi8KIAogI2lmbmRlZiBfREVGX0JGNTMyX0gKICNkZWZpbmUgX0RFRl9CRjUzMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGU0NWMxNzAuLjJhZjE5ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCBkYjFlMzQ2Li5jMzE0OThiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9kZWZCRjUzMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9CRjUzM19JUlFfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKaW5kZXggMmY1OWNlMC4uMDc1ZGFlMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCisgKi8KKwogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKaW5kZXggZjUxOTk0Yi4uOGY3MTRjZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaAorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICoKLSAqIENyZWF0ZWQ6ICAgICAgPwotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzdlLmMKaW5kZXggODdhY2I3ZC4uYzg1ZjRkNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3ZS5jCkBAIC0xLDMxICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAyMDA4LTIwMDkgQmx1ZXRlY2huaXgKKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNQotICogRGVzY3JpcHRpb246ICBCb2FyZCBkZXNjcmlwdGlvbiBmaWxlCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yOTcsMTkgKzI3Niw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY21fcGFydGl0aW9uc1tdID0gewogCXsKQEAgLTY5OSw4ICs2NjUsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFIpIHx8IGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFJfTU9EVUxFKQogCSZjbV9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNtX2JmNTM3ZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3dS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN3UuYwppbmRleCA4MjE5ZGMzLi5lYTExYWE4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3dS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMKQEAgLTEsMzEgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAyMDA4LTIwMDkgQmx1ZXRlY2huaXgKKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNQotICogRGVzY3JpcHRpb246ICBCb2FyZCBkZXNjcmlwdGlvbiBmaWxlCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yOTgsMTkgKzI3Nyw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY21fcGFydGl0aW9uc1tdID0gewogCXsKQEAgLTYwNSw4ICs1NzEsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFIpIHx8IGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFJfTU9EVUxFKQogCSZjbV9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNtX2JmNTM3dV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL21pbm90YXVyLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL21pbm90YXVyLmMKaW5kZXggMzk5ZjgxZC4uMGRhOTI3MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9taW5vdGF1ci5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvbWlub3RhdXIuYwpAQCAtMSw0ICsxLDEwIEBACiAvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IENhbWJyaWRnZSBTaWduYWwgUHJvY2Vzc2luZworICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvcG5hdjEwLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3BuYXYxMC5jCmluZGV4IDEwYjM1YjguLjliYTI5MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvcG5hdjEwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTMwMiw3ICsyODAsNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzdfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZDc4NzdfY2hpcF9pbmZvID0gewotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDE2LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwppbmRleCA5ZGI2YjQwLi5jNDZiYWE1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMTIxLDE5ICs5OSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9DRlBDTUNJQSkgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9DRlBDTUNJQV9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fcGNtY2lhX2NmX3Jlc291cmNlc1tdID0gewogCXsKQEAgLTEwNzgsMTIgKzEwNDMsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9hZHY3MzkzX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLWFkdjczOTMiLAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTFfTU9EVUxFKQogI2luY2x1ZGUgPGFzbS9iZmluLWxxMDM1cTEuaD4KIApAQCAtMTQ5OCw2ICsxNDU3LDExIEBACiAJCS5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikmYWRwNTU4OF9ncGlvX2RhdGEsCiAJfSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJiZmluLWFkdjczOTMiLCAweDJCKSwKKwl9LAorI2VuZGlmCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX01PRFVMRSkKQEAgLTE2NjgsMTAgKzE2MzIsNiBAQAogCSZiZmluX2xxMDM1cTFfZGV2aWNlLAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi0JJmJmaW5fZmJfYWR2NzM5M19kZXZpY2UsCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCiAJJmJmaW5fdWFydF9kZXZpY2UsCiAjZW5kaWYKQEAgLTE3MDIsOCArMTY2Miw2IEBACiAJJmJmaW5fZGV2aWNlX2dwaW9rZXlzLAogI2VuZGlmCiAKLQkmYmZpbl9ncGlvc19kZXZpY2UsCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QTEFURk9STSkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUExBVEZPUk1fTU9EVUxFKQogCSZiZmluX2FzeW5jX25hbmRfZGV2aWNlLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYwppbmRleCA2MTM1M2Y3Li41NzE2M2I2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMKQEAgLTEsMzEgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzNy5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAyMDA4LTIwMDkgQmx1ZXRlY2huaXgKKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNQotICogRGVzY3JpcHRpb246ICBCb2FyZCBkZXNjcmlwdGlvbiBmaWxlCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yOTgsMTkgKzI3Nyw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY21fcGFydGl0aW9uc1tdID0gewogCXsKQEAgLTYwNyw4ICs1NzMsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFIpIHx8IGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFJfTU9EVUxFKQogCSZjbV9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHRjbV9iZjUzN19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvZG1hLmMKaW5kZXggZDIzZmMwZS4uNWM4YzRlZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmgKaW5kZXggZjE5NGE4NC4uMTdmYWI0NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZjUzNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmNTM3LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogU3lzdGVtIE1NUiBSZWdpc3RlciBhbmQgbWVtb3J5IG1hcCBmb3IgQURTUC1CRjUzNwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1MzcKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjUzN19IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGU5NWQ1NGYuLjYzNWM5MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZGVyIGZpbGVzCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDllZTg4MzQuLmVhYjAwNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM0LmgKaW5kZXggNWY4YjVmOC4uOTE4MjVjOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvY2RlZmJmNTM0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUzNF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzcuaAppbmRleCBiOGZjOTQ5Li45MzYzYzM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM3LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9jZGVmQkY1MzcuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKglTeXN0ZW0gTU1SIFJlZ2lzdGVyIE1hcAotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MzdfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oCmluZGV4IGEzMjI3ZjkuLmNlYmIxNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9jZGVmQkY1MzcuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUzNF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM3LmgKaW5kZXggM2Q2YzgzZS4uOGNiNWQ1YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzcuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2RlZmJmNTM3LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTM3X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggZDc3YTMxZS4uMTA0YmZmOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTEsNyArMSw0IEBACiAvKgotICogRmlsZTogYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ncGlvLmgKLSAqIEJ1Z3M6IEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvaXJxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2lycS5oCmluZGV4IGIyYTcxZDUuLjBkZWZhOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9pcnEuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2lycS5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkY1MzdfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDg3Mjg1ZTcuLmRhOTc2MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCmluZGV4IDUxYzQ4MDguLmY2NTAwNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2gKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2JvYXJkcy9lemtpdC5jCmluZGV4IGYyYWMzYjAuLjE0YWY1YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2JvYXJkcy9lemtpdC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTIzNyw3ICsyMTUsNiBAQAogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9mbGFzaF9jaGlwX2luZm8gPSB7CiAJLmVuYWJsZV9kbWEgPSAwLCAgICAgICAgIC8qIHVzZSBkbWEgdHJhbnNmZXIgd2l0aCB0aGlzIGNoaXAqLwogCS5iaXRzX3Blcl93b3JkID0gOCwKLQkuY3NfY2hhbmdlX3Blcl93b3JkID0gMCwKIH07CiAjZW5kaWYKIApAQCAtNTA2LDE5ICs0ODMsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KIApAQCAtNjU4LDggKzYyMiw2IEBACiAJJmJmaW5fZGV2aWNlX2dwaW9rZXlzLAogI2VuZGlmCiAKLQkmYmZpbl9ncGlvc19kZXZpY2UsCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZlemtpdF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9kbWEuYwppbmRleCBkNjgzN2ZiLi41ZGMwMjI1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jCkBAIC0xLDMxICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvZG1hLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmNTM4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmNTM4LmgKaW5kZXggOWM4YWJiMy4uMGNmNWJmOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZjUzOC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmY1MzguaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2JmNTM4LmgKLSAqIEJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmNTM3LmgKLSAqIEF1dGhvcjoJTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTM4CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjUyNworICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjUzOF9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IDk5OWYyMzkuLjVjMTQ4MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZGVyIGZpbGVzCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCA1ZWNlZTE2Li4yNzhlODk0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2NkZWZCRjUzOC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzguaAppbmRleCAxZGU2NzUxLi40MDFlYmQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2NkZWZCRjUzOC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzOC9jZGVmQkY1MzguaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MzhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oCmluZGV4IDFjNTg5MTQuLjVmNmMzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmgKQEAgLTEsNDcgKzEsOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIFB1YmxpYwotICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIE5vbi1HUEwgTGljZW5zZSBhbHNvIGF2YWlsYWJsZSBhcyBwYXJ0IG9mIFZpc3VhbERTUCsrCi0gKiBodHRwOi8vd3d3LmFuYWxvZy5jb20vcHJvY2Vzc29ycy9yZXNvdXJjZXMvY3Jvc3Njb3JlL3Zpc3VhbERzcERldlNvZnR3YXJlLmh0bWwKLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDEtMjAwNSBBbmFsb2cgRGV2aWNlcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCi0gKgotICogVGhpcyBmaWxlIHVuZGVyIHNvdXJjZSBjb2RlIGNvbnRyb2wsIHBsZWFzZSBzZW5kIGJ1Z3Mgb3IgY2hhbmdlcyB0bzoKLSAqIGRzcHRvb2xzLnN1cHBvcnRAYW5hbG9nLmNvbQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2RlZkJGNTM5LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLworCiAvKiBTWVNURU0gJiBNTSBSRUdJU1RFUiBCSVQgJiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTM4LzkgKi8KIAogI2lmbmRlZiBfREVGX0JGNTM5X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggMzBmNGY3Mi4uMjk1Yzc4YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTEsNyArMSw0IEBACiAvKgotICogRmlsZTogYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmgKLSAqIEJ1Z3M6IEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvaXJxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2lycS5oCmluZGV4IGZkYzg3ZmUuLmE0YjdmY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9pcnEuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZToJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzOC9pcnEuaAotICogYmFzZWQgb246CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvaXJxLmgKLSAqIGF1dGhvcjoJTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkY1MzhfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IGM4ZGIyNjQuLjYxMjFjZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2ludHMtcHJpb3JpdHkuYwppbmRleCA3MGQxN2U1Li4xZmE3OTNjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCmluZGV4IGU1NjVhYWUuLmNjZGNkNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMKQEAgLTEsMzEgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMzgwLDE5ICszNTksNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfQkY1NFgpIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfQkY1NFhfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2F0YXBpX3Jlc291cmNlc1tdID0gewogCXsKQEAgLTU0NiwxMyArNTEyLDExIEBACiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2ZsYXNoX2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDAsICAgICAgICAgLyogdXNlIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogfTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzdfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZDc4NzdfY2hpcF9pbmZvID0gewotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDE2LAogfTsKQEAgLTg1Myw4ICs4MTcsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJnBhcmFfZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjbV9iZjU0OF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKaW5kZXggYzY2ZjM4MC4uMWE1Mjg2YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTIwOCw3ICsxODYsNiBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9BRFhMMzRYKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9BRFhMMzRYX01PRFVMRSkKLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHhsMzR4Lmg+CiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkeGwzNHhfcGxhdGZvcm1fZGF0YSBhZHhsMzR4X2luZm8gPSB7CiAJLnhfYXhpc19vZmZzZXQgPSAwLApAQCAtNjM2LDcgKzYxMyw2IEBACiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2ZsYXNoX2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDAsICAgICAgICAgLyogdXNlIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogfTsKICNlbmRpZgogCkBAIC02NTAsNyArNjI2LDYgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3X01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfYWQ3ODc3X2NoaXBfaW5mbyA9IHsKLQkuY3NfY2hhbmdlX3Blcl93b3JkID0gMCwKIAkuZW5hYmxlX2RtYSA9IDAsCiAJLmJpdHNfcGVyX3dvcmQgPSAxNiwKIH07CkBAIC02ODEsNyArNjU2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfYWR4bDM0eF9jaGlwX2luZm8gPSB7CiAJLmVuYWJsZV9kbWEgPSAwLCAgICAgICAgIC8qIHVzZSBkbWEgdHJhbnNmZXIgd2l0aCB0aGlzIGNoaXAqLwogCS5iaXRzX3Blcl93b3JkID0gOCwKLQkuY3NfY2hhbmdlX3Blcl93b3JkID0gMCwKIH07CiAjZW5kaWYKIApAQCAtOTA4LDE5ICs4ODIsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQogewogLyoKQEAgLTEwMjgsOCArOTg5LDYgQEAKIAkmYmZpbl9kZXZpY2VfZ3Bpb2tleXMsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2RtYS5jCmluZGV4IGQ5MjM5YmMuLjAzOWE2ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTQ4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTQ4LmgKaW5kZXggY2QzMWY3Mi4uN2JlYWQ1YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0OC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2JmNTQ4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU3lzdGVtIE1NUiByZWdpc3RlciBhbmQgbWVtb3J5IG1hcCBmb3IgQURTUC1CRjU0OAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjU0OF9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHgtbHEwNDMuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHgtbHEwNDMuaAppbmRleCA5YzdjYTYyLi44ODIxZWZlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTR4LWxxMDQzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eC1scTA0My5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIEJGNTRYX0xRMDQzX0gKICNkZWZpbmUgQkY1NFhfTFEwNDNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTR4X2tleXMuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHhfa2V5cy5oCmluZGV4IDFmYjRlYzcuLjQ5MzM4YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHhfa2V5cy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHhfa2V5cy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX0tQQURfSAogI2RlZmluZSBfQkZJTl9LUEFEX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggMmQxYjVmYS4uZGQ0NGFhNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9iZmluX3NlcmlhbF81eHguaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglibGFja2ZpbiBzZXJpYWwgZHJpdmVyIGhlYWQgZmlsZQotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggMzE4NjY3Yi4uMTMzMDJiNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2JsYWNrZmluLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQyLmgKaW5kZXggMDdhZWZiOS4uNDJmNGE5NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Mi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTQyX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0NC5oCmluZGV4IDQzMWE2OTIuLjIyMDc3OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDQuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0NC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjU0NF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Ny5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDcuaAppbmRleCA5MzM3NmU5Li40MjM0MjE1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Ny5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NDcuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTQ4X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OC5oCmluZGV4IDljZDc0MzguLmRmODQxODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0OC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjU0OF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDkuaAppbmRleCBlYWQzNjBiLi4zNGM4NGM3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OS9jZGVmQkY1NDkuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NDlfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NHhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NHhfYmFzZS5oCmluZGV4IDZlNjM2YzQuLmEyZTlkOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTR4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NHhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjU0WF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQyLmgKaW5kZXggYjEzMTY1NC4uZDNiYzZkMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Mi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NDJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oCmluZGV4IGMyYzc4NWIuLmRkNDE0YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0NC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTQ0X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaAppbmRleCA2NjFmMGQ4Li41YTlkYmFiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDcuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NDhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OC5oCmluZGV4IDg1ZDRiYWQuLjgyY2Q1OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0OC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTQ4X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDkuaAppbmRleCAwOTY3MzQ1Li42ZmM2ZTM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDkuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU0OV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTR4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NHhfYmFzZS5oCmluZGV4IGUwMjJlODkuLjg1OTBjOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NHhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NHhfYmFzZS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NHhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTRYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggM2EyMDUxNy4uODUwZTM5ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTEsMzQgKzEsOCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9ncGlvLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgkgTWljaGFlbCBIZW5uZXJpY2ggKGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZykKLSAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAotCi0KICNkZWZpbmUgR1BJT19QQTAJMAogI2RlZmluZSBHUElPX1BBMQkxCiAjZGVmaW5lIEdQSU9fUEEyCTIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvaXJxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2lycS5oCmluZGV4IGYxOTQ2MjUuLjEwNmRiMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZToJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9pcnEuaAotICogYmFzZWQgb246CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvaXJxLmgKLSAqIGF1dGhvcjoJUm95IEh1YW5nIChyb3kuaHVhbmdAYW5hbG9nLmNvbSkKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JGNTQ4X0lSUV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCBjZTM3MmJhLi44OWFkNmE4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbnRzLXByaW9yaXR5LmMKaW5kZXggOWRkMGZhMy4uNDhkZDNhNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW50cy1wcmlvcml0eS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbnRzLXByaW9yaXR5LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYwotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaAorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYXRvbWljLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYXRvbWljLlMKaW5kZXggOTQzOWJjNi4uMDI2MWE1ZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2F0b21pYy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwpAQCAtMSwyMyArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYXRvbWljLlMKLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMKaW5kZXggNjU3N2VjZi4uZGZjOGQ1YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9jbV9iZjU2MS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYwpAQCAtMSwzMCArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjU2MS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PiBDb3B5cmlnaHQgMjAwNQorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA2Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjg1LDE5ICsyNjUsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXNwMTM2Ml9oY2RfcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtNTMyLDggKzQ5OSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmcGFyYV9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNtX2JmNTYxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZXpraXQuYwppbmRleCBjYWVkOTZiLi45ZTJkOGNmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9lemtpdC5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0zODcsMTkgKzM2Niw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCkBAIC00OTMsOCArNDU5LDYgQEAKIAkmaXNwMTM2Ml9oY2RfZGV2aWNlLAogI2VuZGlmCiAKLQkmYmZpbl9ncGlvc19kZXZpY2UsCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZlemtpdF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvdGVwbGEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvdGVwbGEuYwppbmRleCA2Zjc3ZGJlLi44YmE3MjUyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL3RlcGxhLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy90ZXBsYS5jCkBAIC0xLDE1ICsxLDEzIEBACiAvKgotICogIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS90ZXBsYS5jCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqICBPbmx5IFNNU0M5MUMxMTExIHdhcyByZWdpc3RlcmVkLCBtYXkgZG8gbW9yZSBsYXRlci4KKyAqIFRoYW5rcyB0byBKYW1leSBIaWNrcy4KICAqCi0gKiAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpLCBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgotICogIFRoYW5rcyB0byBKYW1leSBIaWNrcy4KKyAqIE9ubHkgU01TQzkxQzExMTEgd2FzIHJlZ2lzdGVyZWQsIG1heSBkbyBtb3JlIGxhdGVyLgogICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvY29yZWIuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9jb3JlYi5jCmluZGV4IDkzNjM1YTcuLjFlNjBhOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9jb3JlYi5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9jb3JlYi5jCkBAIC00OCw3ICs0OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29yZWJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvcmViX2ZvcHMgPSB7CiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIAkuaW9jdGwgICA9IGNvcmViX2lvY3RsLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYwppbmRleCA0MmIwMDM3Li5jOTM4YzNjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jCkBAIC0xLDMxICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvZG1hLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZjU2MS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZjU2MS5oCmluZGV4IDk5NjgzNjIuLjlmOWEzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmY1NjEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmgKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9iZjU2MS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1NjEKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTYxCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX01BQ0hfQkY1NjFfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCBmZDVlODg3Li5lMzNlMTU4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZCBmaWxlCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCA4YmUzMTM1Li42N2Q2YmRjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvY2RlZkJGNTYxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2NkZWZCRjU2MS5oCmluZGV4IDlkOTg1OGMuLjgxZWNkYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvY2RlZkJGNTYxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9jZGVmQkY1NjEuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2NkZWZCRjU2MS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIEMgUE9JTlRFUlMgVE8gU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTYxX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZGVmQkY1NjEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZGVmQkY1NjEuaAppbmRleCA1ZmMwZjA1Li5hMzFlNTA5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2RlZkJGNTYxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oCkBAIC0xLDMyICsxLDcgQEAKLQogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9kZWZCRjU2MS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1NjEKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NjFfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA3ODgyZjc5Li5hNjUxYThjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggNjY5ODM4OS4uN2IyMDhkYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKLQogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9pcnEuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JGNTYxX0lSUV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCAyZTVhZDYzLi4zYTdiNDZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BvcnRtdXguaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9zbXAuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvc21wLmgKaW5kZXggZjllNjVlYi4uMzkwYzdmNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9zbXAuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3NtcC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9NQUNIX0JGNTYxX1NNUAogI2RlZmluZSBfTUFDSF9CRjU2MV9TTVAKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbnRzLXByaW9yaXR5LmMKaW5kZXggOWQyZjIzMy4uYjQ0MjQxNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW50cy1wcmlvcml0eS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbnRzLXByaW9yaXR5LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYwotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaAorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMKaW5kZXggZjcyYTZhZi4uOGU2MDUwMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NlY29uZGFyeS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zZWNvbmRhcnkuUwpAQCAtMSwyNiArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NlY29uZGFyeS5TCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9oZWFkLlMKLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KKyAqIEJGNTYxIGNvcmVCIGJvb3RzdHJhcCBmaWxlCiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiBEZXNjcmlwdGlvbjogIEJGNTYxIGNvcmVCIGJvb3RzdHJhcCBmaWxlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMKaW5kZXggOGMxMDcwMS4uNTEwZjU3NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYwpAQCAtMSwyMyArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMKLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCmluZGV4IDU5OThkODYuLjlkYmFmY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoJIFJvYmluIEdldHogPHJnZXR6QGJsYWNrZmluLnVjbGludXgub3JnPgorICogRG8gc29tZSBjaGVja2luZyB0byBtYWtlIHN1cmUgdGhpbmdzIGFyZSBPSwogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjVKdWwwNwotICogRGVzY3JpcHRpb246ICBEbyBzb21lIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIE9LCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGFzbS9maXhlZF9jb2RlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLWMuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUtYy5jCmluZGV4IDRlYmJkNzguLmE2MGEyNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUtYy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUtYy5jCkBAIC0zLDggKzMsNiBAQAogICoKICAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKaW5kZXggZDk2NjZmZS4uZWE1NDAzMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwpAQCAtMyw4ICszLDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYwppbmRleCA4NWM2NTgwLi4wMTUwNjUwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZToJIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIEJsYWNrZmluIGNvcmUgY2xvY2sgc2NhbGluZwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoJIEJsYWNrZmluIGNvcmUgY2xvY2sgc2NhbGluZworICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKgkJIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6CSBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQkwMjExMC0xMzAxCVVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwppbmRleCAxZTdjYWMyLi45NGEwMzc1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCkBAIC0xLDMyICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBMaW51cyBUb3J2YWxkcworICogQ29udGFpbnMgdGhlIHN5c3RlbS1jYWxsIGFuZCBmYXVsdCBsb3ctbGV2ZWwgaGFuZGxpbmcgcm91dGluZXMuCisgKiBUaGlzIGFsc28gY29udGFpbnMgdGhlIHRpbWVyLWludGVycnVwdCBoYW5kbGVyLCBhcyB3ZWxsIGFzIGFsbAorICogaW50ZXJydXB0cyBhbmQgZmF1bHRzIHRoYXQgY2FuIHJlc3VsdCBpbiBhIHRhc2stc3dpdGNoLgogICoKLSAqIENyZWF0ZWQ6ICAgICAgPwotICogRGVzY3JpcHRpb246ICBjb250YWlucyB0aGUgc3lzdGVtLWNhbGwgYW5kIGZhdWx0IGxvdy1sZXZlbCBoYW5kbGluZyByb3V0aW5lcy4KLSAqICAgICAgICAgICAgICAgVGhpcyBhbHNvIGNvbnRhaW5zIHRoZSB0aW1lci1pbnRlcnJ1cHQgaGFuZGxlciwgYXMgd2VsbCBhcyBhbGwKLSAqICAgICAgICAgICAgICAgaW50ZXJydXB0cyBhbmQgZmF1bHRzIHRoYXQgY2FuIHJlc3VsdCBpbiBhIHRhc2stc3dpdGNoLgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKIC8qIE5PVEU6IFRoaXMgY29kZSBoYW5kbGVzIHNpZ25hbC1yZWNvZ25pdGlvbiwgd2hpY2ggaGFwcGVucyBldmVyeSB0aW1lCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2hlYWQuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TCmluZGV4IDljNzlkZmUuLmNhYjBhMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TCkBAIC0zLDggKzMsNiBAQAogICoKICAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwppbmRleCA4MmQ0MTdlLi44MDg1ZmYxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBELiBKZWZmIERpb25uZSA8amVmZkByeWVoYW0uZWUucnllcnNvbi5jYT4KKyAqIEludGVycnVwdCBFbnRyaWVzCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIEQuIEplZmYgRGlvbm5lIDxqZWZmQHJ5ZWhhbS5lZS5yeWVyc29uLmNhPgogICogICAgICAgICAgICAgICBLZW5uZXRoIEFsYmFub3dza2kgPGtqYWhkc0BramFoZHMuY29tPgogICoKLSAqIENyZWF0ZWQ6ICAgICAgPwotICogRGVzY3JpcHRpb246ICBJbnRlcnJ1cHQgRW50cmllcwotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCmluZGV4IDZmZmRhNzguLjY2MGVhMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCkBAIC0xLDMzICsxLDE0IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYworICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0ICAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgIDIwMDMgQmFzIFZlcm1ldWxlbiA8YmFzQGJ1eXdheXMubmw+CisgKiAgICAgICAgICAgICAgICAgMjAwMiBBcmN0dXJ1cyBOZXR3b3JrcyBJbmMuIE1hVGVkIDxtYXRlZEBzeW1wYXRpY28uY2E+CisgKiAgICAgICAgICAgIDIwMDAtMjAwMSBMaW5lbywgSW5jLiBELiBKZWZmZiBEaW9ubmUgPGplZmZAbGluZW8uY2E+CisgKiAgICAgICAgICAgICAgICAgMTk5OSBELiBKZWZmIERpb25uZSA8amVmZkB1Y2xpbnV4Lm9yZz4KKyAqICAgICAgICAgICAgICAgICAxOTk2IFJvbWFuIFppcHBlbAogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICAxOTk2IFJvbWFuIFppcHBlbAotICogICAgICAgICAgICAgICAxOTk5IEQuIEplZmYgRGlvbm5lIDxqZWZmQHVjbGludXgub3JnPgotICogICAgICAgICAgICAgICAyMDAwLTIwMDEgTGluZW8sIEluYy4gRC4gSmVmZmYgRGlvbm5lIDxqZWZmQGxpbmVvLmNhPgotICogICAgICAgICAgICAgICAyMDAyIEFyY3R1cnVzIE5ldHdvcmtzIEluYy4gTWFUZWQgPG1hdGVkQHN5bXBhdGljby5jYT4KLSAqICAgICAgICAgICAgICAgMjAwMyBNZXRyb3dlcmtzL01vdG9yb2xhCi0gKiAgICAgICAgICAgICAgIDIwMDMgQmFzIFZlcm1ldWxlbiA8YmFzQGJ1eXdheXMubmw+Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pcnFwYW5pYy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pcnFwYW5pYy5jCmluZGV4IDg4M2UzMjQuLmM2NDk2MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaXJxcGFuaWMuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pcnFwYW5pYy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIHBhbmljIGtlcm5lbCB3aXRoIGR1bXAgaW5mb3JtYXRpb24KICAqCi0gKiBDcmVhdGVkOiAgICAgID8KLSAqIERlc2NyaXB0aW9uOiAgcGFuaWMga2VybmVsIHdpdGggZHVtcCBpbmZvcm1hdGlvbgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6ICAgICByZ2V0eiAtIGFkZGVkIGNhY2hlIGNoZWNraW5nIGNvZGUgMTRGZWIwNgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKaW5kZXggMGUzZDRmZi4uODgzN2JlNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYwpAQCAtMSwzNSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCi0gKiBCYXNlZCBvbjogICAgIGFybS9tYWNoLW9tYXAvcG0uYwotICogQXV0aG9yOiAgICAgICBDbGlmZiBCcmFrZSA8Y2JyYWtlQGFjY2VsZW50LmNvbT4gQ29weXJpZ2h0IChjKSAyMDAxCisgKiBCbGFja2ZpbiBwb3dlciBtYW5hZ2VtZW50CiAgKgotICogQ3JlYXRlZDogICAgICAyMDAxCi0gKiBEZXNjcmlwdGlvbjogIEJsYWNrZmluIHBvd2VyIG1hbmFnZW1lbnQKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOiAgICAgTmljb2xhcyBQaXRyZSAtIFBYQTI1MCBzdXBwb3J0Ci0gKiAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgICAgICAgRGF2aWQgU2luZ2xldG9uIC0gT01BUDE1MTAKLSAqICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMiBNb250YSBWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAgICAgICBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4gLSBPTUFQMTUxMC8xNjEwCi0gKiAgICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNAotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgorICogYmFzZWQgb24gYXJtL21hY2gtb21hcC9wbS5jCisgKiAgICBDb3B5cmlnaHQgMjAwMSwgQ2xpZmYgQnJha2UgPGNicmFrZUBhY2NlbGVudC5jb20+IGFuZCBvdGhlcnMKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKaW5kZXggMzQ5ZWUzZi4uZDk4NTg1ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCkBAIC0xLDI0ICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9zbXAuYwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgotICogSVBJIG1hbmFnZW1lbnQgYmFzZWQgb24gYXJjaC9hcm0va2VybmVsL3NtcC5jLgorICogSVBJIG1hbmFnZW1lbnQgYmFzZWQgb24gYXJjaC9hcm0va2VybmVsL3NtcC5jIChDb3B5cmlnaHQgMjAwMiBBUk0gTGltaXRlZCkKICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9ibGFja2Zpbl9zcmFtLmggYi9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uaAppbmRleCBiYzAwNjI4Li5mYjBiMTU5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uaAorKysgYi9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uaAotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uYwotICogQXV0aG9yOiAgICAgICBNaWtlIEZyeXNpbmdlcgorICogTG9jYWwgcHJvdG90eXBlcyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKICAqCi0gKiBDcmVhdGVkOiAgICAgIEF1ZyAyMDA2Ci0gKiBEZXNjcmlwdGlvbjogIExvY2FsIHByb3RvdHlwZXMgbWVhbnQgZm9yIGludGVybmFsIHVzZSBvbmx5CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19CTEFDS0ZJTl9TUkFNX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9pbml0LmMgYi9hcmNoL2JsYWNrZmluL21tL2luaXQuYwppbmRleCBiODhjZTdmLi5iYjljOThmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL2luaXQuYworKysgYi9hcmNoL2JsYWNrZmluL21tL2luaXQuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21tL2luaXQuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jIGIvYXJjaC9ibGFja2Zpbi9tbS9pc3JhbS1kcml2ZXIuYwppbmRleCBiZWIxYTYwLi44NGNkYzVhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vaXNyYW0tZHJpdmVyLmMKQEAgLTEsMTkgKzEsOSBAQAogLyoKLSAqIERlc2NyaXB0aW9uOiBJbnN0cnVjdGlvbiBTUkFNIGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgdGhlIEJsYWNrZmluCisgKiBJbnN0cnVjdGlvbiBTUkFNIGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgdGhlIEJsYWNrZmluCiAgKgogICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6IEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjZGVmaW5lIHByX2ZtdChmbXQpICJpc3JhbTogIiBmbXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jIGIvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMKaW5kZXggZWI2M2FiMy4uZjA2OGMxMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogU1JBTSBhbGxvY2F0b3IgZm9yIEJsYWNrZmluIG9uLWNoaXAgbWVtb3J5CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1JBTSBhbGxvY2F0b3IgZm9yIEJsYWNrZmluIEwxIGFuZCBMMiBtZW1vcnkKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9zeW5jX3NlcmlhbC5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYwppbmRleCA2Y2MxYTAzLi41NjJiOWE3ZiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9zeW5jX3NlcmlhbC5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAogI2RlZmluZSBOVU1CRVJfT0ZfUE9SVFMgMgogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5jX3NlcmlhbF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY19zZXJpYWxfZm9wcyA9IHsKIAkub3duZXIgICA9IFRISVNfTU9EVUxFLAogCS53cml0ZSAgID0gc3luY19zZXJpYWxfd3JpdGUsCiAJLnJlYWQgICAgPSBzeW5jX3NlcmlhbF9yZWFkLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3RpbWUuYwppbmRleCAyYjczYzdhLi4zMWNhMTQxIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3RpbWUuYwpAQCAtMjgsNyArMjgsNiBAQAogCiBleHRlcm4gdm9pZCB1cGRhdGVfeHRpbWVfZnJvbV9jbW9zKHZvaWQpOwogZXh0ZXJuIGludCBzZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKTsKLWV4dGVybiBpbnQgc2V0dXBfaXJxKGludCwgc3RydWN0IGlycWFjdGlvbiAqKTsKIGV4dGVybiBpbnQgaGF2ZV9ydGM7CiAKIHVuc2lnbmVkIGxvbmcgZ2V0X25zX2luX2ppZmZpZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWZzL2dwaW8uYwppbmRleCBmZTFmZGU4Li5kODlhYjgwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWZzL2dwaW8uYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWZzL2dwaW8uYwpAQCAtODU1LDcgKzg1NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3Bpb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3Bpb19mb3BzID0gewogCS5vd25lciAgICAgICA9IFRISVNfTU9EVUxFLAogCS5wb2xsICAgICAgICA9IGdwaW9fcG9sbCwKIAkuaW9jdGwgICAgICAgPSBncGlvX2lvY3RsLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKaW5kZXggZDJhM2ZmOC4uMDU4YWRkZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCkBAIC01Miw4ICs1Miw2IEBACiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0KiBmbHVzaF92bWE7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmbHVzaF9hZGRyOwogCi1leHRlcm4gaW50IHNldHVwX2lycShpbnQsIHN0cnVjdCBpcnFhY3Rpb24gKik7Ci0KIC8qIE1vZGUgcmVnaXN0ZXJzICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpcnFfcmVnc1tOUl9DUFVTXSA9IHsKICAgcmVnaV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jCmluZGV4IDY1NjMzZDAuLmIxOTIwZDggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jCkBAIC00Niw3ICs0Niw2IEBACiAKIGV4dGVybiB2b2lkIHVwZGF0ZV94dGltZV9mcm9tX2Ntb3Modm9pZCk7CiBleHRlcm4gaW50IHNldF9ydGNfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpOwotZXh0ZXJuIGludCBzZXR1cF9pcnEoaW50LCBzdHJ1Y3QgaXJxYWN0aW9uICopOwogZXh0ZXJuIGludCBoYXZlX3J0YzsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvaW8uYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2lvLmMKaW5kZXggYzIyZjY3ZS4uMDkwY2ViOSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvaW8uYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9pby5jCkBAIC0zNiw3ICszNiw3IEBACiAJfSwKIH07CiAKLSNkZWZpbmUgTkJSX09GX1BPUlRTIHNpemVvZihjcmlzdjMyX2lvcG9ydHMpL3NpemVvZihzdHJ1Y3QgY3Jpc3YzMl9pb3BvcnQpCisjZGVmaW5lIE5CUl9PRl9QT1JUUyBBUlJBWV9TSVpFKGNyaXN2MzJfaW9wb3J0cykKIAogc3RydWN0IGNyaXN2MzJfaW9waW4gY3Jpc3YzMl9sZWRfbmV0MF9ncmVlbjsKIHN0cnVjdCBjcmlzdjMyX2lvcGluIGNyaXN2MzJfbGVkX25ldDBfcmVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvaW8uYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2lvLmMKaW5kZXggY2I2MzI3Yi4uYTY5NTg2NiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvaW8uYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9pby5jCkBAIC01Miw3ICs1Miw3IEBACiAJfQogfTsKIAotI2RlZmluZSBOQlJfT0ZfUE9SVFMgc2l6ZW9mKGNyaXN2MzJfaW9wb3J0cykvc2l6ZW9mKHN0cnVjdCBjcmlzdjMyX2lvcG9ydCkKKyNkZWZpbmUgTkJSX09GX1BPUlRTIEFSUkFZX1NJWkUoY3Jpc3YzMl9pb3BvcnRzKQogCiBzdHJ1Y3QgY3Jpc3YzMl9pb3BpbiBjcmlzdjMyX2xlZF9uZXQwX2dyZWVuOwogc3RydWN0IGNyaXN2MzJfaW9waW4gY3Jpc3YzMl9sZWRfbmV0MF9yZWQ7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYxMC9hcmNoL21tdS5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MTAvYXJjaC9tbXUuaAppbmRleCBkZjg0ZjE3Li5lODI5ZTVhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYxMC9hcmNoL21tdS5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjEwL2FyY2gvbW11LmgKQEAgLTMzLDEwICszMywxMCBAQAogCiAvKiBDUklTIFBURSBiaXRzIChzZWUgUl9UTEJfTE8gaW4gdGhlIHJlZ2lzdGVyIGRlc2NyaXB0aW9uKQogICoKLSAqICAgQml0OiAgMzEtMTMgMTItLS0tLS0tNCAgICAzICAgICAgICAyICAgICAgIDEgICAgICAgMCAgCi0gKiAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotICogICAgICAgIHwgcGZuIHwgcmVzZXJ2ZWQgfCBnbG9iYWwgfCB2YWxpZCB8IGtlcm5lbCB8IHdlICB8Ci0gKiAgICAgICAgfF9fX19ffF9fX19fX19fX198X19fX19fX198X19fX19fX3xfX19fX19fX3xfX19fX3wKKyAqICAgQml0OiAgMzEgICAgIDMwLTEzIDEyLS0tLS0tLTQgICAgMyAgICAgICAgMiAgICAgICAxICAgICAgIDAKKyAqICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICogICAgICAgIHwgY2FjaGUgfHBmbiB8IHJlc2VydmVkIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3ZSAgfAorICogICAgICAgIHxfX19fX19ffF9fX198X19fX19fX19fX3xfX19fX19fX3xfX19fX19ffF9fX19fX19ffF9fX19ffAogICoKICAqIChwZm4gPSBwaHlzaWNhbCBmcmFtZSBudW1iZXIpCiAgKi8KQEAgLTUzLDYgKzUzLDcgQEAKICNkZWZpbmUgX1BBR0VfVkFMSUQJICAgKDE8PDIpIC8qIHBhZ2UgaXMgdmFsaWQgKi8KICNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICgxPDwyKSAvKiBzeW5vbnltICovCiAjZGVmaW5lIF9QQUdFX0dMT0JBTCAgICAgICAoMTw8MykgLyogZ2xvYmFsIHBhZ2UgLSBjb250ZXh0IGlzIGlnbm9yZWQgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJICAgKDE8PDMxKSAvKiBwYXJ0IG9mIHRoZSB1bmNhY2hlZCBtZW1vcnkgbWFwICovCiAKIC8qIEJpdHMgdGhlIEhXIGRvZXNuJ3QgY2FyZSBhYm91dCBidXQgdGhlIGtlcm5lbCB1c2VzIHRoZW0gaW4gU1cgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9tbXUuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmgKaW5kZXggNmJjZGMzZi4uYzFhMTNlMCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9tbXUuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL21tdS5oCkBAIC0yOCwxMCArMjgsMTAgQEAKIC8qCiAgKiBDUklTdjMyIFBURSBiaXRzOgogICoKLSAqICBCaXQ6ICAzMS0xMyAgMTItNSAgICAgNCAgICAgICAgMyAgICAgICAyICAgICAgICAxICAgICAgICAwCi0gKiAgICAgICArLS0tLS0rLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rCi0gKiAgICAgICB8IHBmbiB8IHplcm8gfCBnbG9iYWwgfCB2YWxpZCB8IGtlcm5lbCB8IHdyaXRlIHwgZXhlY3V0ZSB8Ci0gKiAgICAgICArLS0tLS0rLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rCisgKiAgQml0OiAgIDMxICAgICAzMC0xMyAgMTItNSAgICAgNCAgICAgICAgMyAgICAgICAyICAgICAgICAxICAgICAgICAwCisgKiAgICAgICArLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLSsKKyAqICAgICAgIHwgY2FjaGUgfCBwZm4gfCB6ZXJvIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3cml0ZSB8IGV4ZWN1dGUgfAorICogICAgICAgKy0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rCiAgKi8KIAogLyoKQEAgLTQ1LDYgKzQ1LDggQEAKICNkZWZpbmUgX1BBR0VfVkFMSUQgICAgICAgICAoMSA8PCAzKQkvKiBQYWdlIGlzIHZhbGlkLiAqLwogI2RlZmluZSBfUEFHRV9TSUxFTlRfUkVBRCAgICgxIDw8IDMpCS8qIFNhbWUgYXMgYWJvdmUuICovCiAjZGVmaW5lIF9QQUdFX0dMT0JBTCAgICAgICAgKDEgPDwgNCkJLyogR2xvYmFsIHBhZ2UuICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCSAgICAoMSA8PCAzMSkJLyogcGFydCBvZiB0aGUgdW5jYWNoZWQgbWVtb3J5IG1hcCAqLworCiAKIC8qCiAgKiBUaGUgaGFyZHdhcmUgZG9lc24ndCBjYXJlIGFib3V0IHRoZXNlIGJpdHMsIGJ1dCB0aGUga2VybmVsIHVzZXMgdGhlbSBpbgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggNzQxNzhhZC4uMTdiYjEyZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0yLDE2ICsyLDYgQEAKICNkZWZpbmUgX19BU01fSEFSRElSUV9ICiAKICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwotCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4gLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KLQotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIAogI2RlZmluZSBIQVJESVJRX0JJVFMJOAogCkBAIC0yNCw0ICsxNCw2IEBACiAjIGVycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQogI2VuZGlmCiAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CisKICNlbmRpZiAvKiBfX0FTTV9IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDUwYWE5NzQuLjFmY2NlMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTk3LDYgKzE5Nyw4IEBACiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQogeyBwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KTsgcmV0dXJuIHB0ZTsgfQogCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkgX19wZ3Byb3QoKHBncHJvdF92YWwocHJvdCkgfCBfUEFHRV9OT19DQUNIRSkpCisKIAogLyogcHRlX3ZhbCByZWZlcnMgdG8gYSBwYWdlIGluIHRoZSAweDR4eHh4eHh4IHBoeXNpY2FsIERSQU0gaW50ZXJ2YWwKICAqIF9fcHRlX3BhZ2UocHRlX3ZhbCkgcmVmZXJzIHRvIHRoZSAidmlydHVhbCIgRFJBTSBpbnRlcnZhbApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKaW5kZXggN2Y2NDJmYy4uMGNhN2Q5OCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCkBAIC0zOCwxMSArMzgsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlwcmludGsoInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7Ci19Ci0KIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewogCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA2YzgxODM2Li5iYmZkYTY3IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC01MSwxMCArNTEsNyBAQAogCV9ldGV4dCA9IC4gOwkJCS8qIEVuZCBvZiB0ZXh0IHNlY3Rpb24uICovCiAJX19ldGV4dCA9IC47CiAKLQkuID0gQUxJR04oNCk7CQkJLyogRXhjZXB0aW9uIHRhYmxlLiAqLwotCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0JX19zdG9wX19fZXhfdGFibGUgPSAuOworCUVYQ0VQVElPTl9UQUJMRSg0KQogCiAJUk9EQVRBCiAKQEAgLTY3LDM2ICs2NCwyNCBAQAogCV9fZWRhdGEgPSAuIDsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uLiAqLwogCV9lZGF0YSA9IC4gOwogCi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7CS8qIGluaXRfdGFzayBhbmQgc3RhY2ssIG11c3QgYmUgYWxpZ25lZC4gKi8KLQkuZGF0YS5pbml0X3Rhc2sgOiB7ICooLmRhdGEuaW5pdF90YXNrKSB9CisJSU5JVF9UQVNLX0RBVEFfU0VDVElPTihQQUdFX1NJWkUpCiAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YS4gKi8KIAlfX2luaXRfYmVnaW4gPSAuOwotCS5pbml0LnRleHQgOiB7Ci0JCSAgIF9zaW5pdHRleHQgPSAuOwotCQkgICBJTklUX1RFWFQKLQkJICAgX2Vpbml0dGV4dCA9IC47Ci0JfQorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKIAkuaW5pdC5kYXRhIDogeyBJTklUX0RBVEEgfQotCS4gPSBBTElHTigxNik7Ci0JX19zZXR1cF9zdGFydCA9IC47Ci0JLmluaXQuc2V0dXAgOiB7ICooLmluaXQuc2V0dXApIH0KLQlfX3NldHVwX2VuZCA9IC47CisJLmluaXQuc2V0dXAgOiB7IElOSVRfU0VUVVAoMTYpIH0KICNpZmRlZiBDT05GSUdfRVRSQVhfQVJDSF9WMzIKIAlfX3N0YXJ0X19fcGFyYW0gPSAuOwogCV9fcGFyYW0gOiB7ICooX19wYXJhbSkgfQogCV9fc3RvcF9fX3BhcmFtID0gLjsKICNlbmRpZgogCS5pbml0Y2FsbC5pbml0IDogewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKKwkJSU5JVF9DQUxMUwogCX0KIAogCS5jb25faW5pdGNhbGwuaW5pdCA6IHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKKwkJQ09OX0lOSVRDQUxMCiAJfQogCVNFQ1VSSVRZX0lOSVQKIApAQCAtMTE0LDkgKzk5LDcgQEAKIAlQRVJDUFUoUEFHRV9TSVpFKQogCiAJLmluaXQucmFtZnMgOiB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKKwkJSU5JVF9SQU1fRlMKIAl9CiAjZW5kaWYKIApAQCAtMTMwLDExICsxMTMsNyBAQAogCV9faW5pdF9lbmQgPSAuOwogCiAJX19kYXRhX2VuZCA9IC4gOwkJLyogTW92ZSB0byBfZWRhdGEgPyAqLwotCV9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUy4gKi8KLQkuYnNzIDogewotCQkqKENPTU1PTikKLQkJKiguYnNzKQotCX0KKwlCU1NfU0VDVElPTigwLCAwLCAwKQogCiAJLiA9ICBBTElHTiAoMHgyMCk7CiAJX2VuZCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNmIwYTJiNi4uMDk3NGMwZSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYwpAQCAtNTI3LDcgKzUyNyw3IEBACiAKIG5vX3NpZ25hbDoKIAkvKiBEaWQgd2UgY29tZSBmcm9tIGEgc3lzdGVtIGNhbGw/ICovCi0JaWYgKF9fZnJhbWUtPnN5c2NhbGxubyA+PSAwKSB7CisJaWYgKF9fZnJhbWUtPnN5c2NhbGxubyAhPSAtMSkgewogCQkvKiBSZXN0YXJ0IHRoZSBzeXN0ZW0gY2FsbCAtIG5vIGhhbmRsZXJzIHByZXNlbnQgKi8KIAkJc3dpdGNoIChfX2ZyYW1lLT5ncjgpIHsKIAkJY2FzZSAtRVJFU1RBUlROT0hBTkQ6CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvTWFrZWZpbGUgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvTWFrZWZpbGUKaW5kZXggNzY1OTVlOC4uYjczYjU0MiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL01ha2VmaWxlCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9NYWtlZmlsZQpAQCAtMTEsMyArMTEsNSBAQAogb2JqLXkgKz0gcGNpLWRtYS1ub21tdS5vCiBlbmRpZgogZW5kaWYKKworb2JqLSQoQ09ORklHX01URCkgKz0gZmxhc2gubwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL2ZsYXNoLmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGUzNzA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL2ZsYXNoLmMKQEAgLTAsMCArMSw5MCBAQAorLyogRmxhc2ggbWFwcGluZ3MgZm9yIHRoZSBNQjkzMDkwLU1CMDAgbW90aGVyYm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisKKyNkZWZpbmUgTUI5MzA5MF9CT09UUk9NX0FERFIJMHhGRjAwMDAwMAkvKiBCb290IFJPTSAqLworI2RlZmluZSBNQjkzMDkwX0JPT1RST01fU0laRQkoMiAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBNQjkzMDkwX1VTRVJST01fQUREUgkweEZGMjAwMDAwCS8qIFVzZXIgUk9NICovCisjZGVmaW5lIE1COTMwOTBfVVNFUlJPTV9TSVpFCSgyICogMTAyNCAqIDEwMjQpCisKKy8qCisgKiBkZWZhdWx0IE1URCBwYXJ0aXRpb24gdGFibGUgZm9yIGJvdGggbWFpbiBmbGFzaCBkZXZpY2VzLCBleHBlY3RlZCB0byBiZQorICogb3ZlcnJpZGRlbiBieSBSZWRCb290CisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBtYjkzMDkwX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJGaWxlc3lzdGVtIiwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldAkJPSAwLAorCX0KK307CisKKy8qCisgKiBEZWZpbml0aW9uIG9mIHRoZSBNQjkzMDkwIEJvb3QgUk9NIChvbiB0aGUgQ1BVIGNhcmQpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG1iOTMwOTBfYm9vdHJvbV9kYXRhID0geworCS53aWR0aAkJPSAyLAorCS5ucl9wYXJ0cwk9IDIsCisJLnBhcnRzCQk9IG1iOTMwOTBfcGFydGl0aW9ucywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWI5MzA5MF9ib290cm9tX3Jlc291cmNlID0geworCS5zdGFydAkJPSBNQjkzMDkwX0JPT1RST01fQUREUiwKKwkuZW5kCQk9IE1COTMwOTBfQk9PVFJPTV9BRERSICsgTUI5MzA5MF9CT09UUk9NX1NJWkUgLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1iOTMwOTBfYm9vdHJvbSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJm1iOTMwOTBfYm9vdHJvbV9kYXRhLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmbWI5MzA5MF9ib290cm9tX3Jlc291cmNlLAorfTsKKworLyoKKyAqIERlZmluaXRpb24gb2YgdGhlIE1COTMwOTAgVXNlciBST00gZGVmaW5pdGlvbiAob24gdGhlIG1vdGhlcmJvYXJkKQorICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBtYjkzMDkwX3VzZXJyb21fZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkubnJfcGFydHMJPSAyLAorCS5wYXJ0cwkJPSBtYjkzMDkwX3BhcnRpdGlvbnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1iOTMwOTBfdXNlcnJvbV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gTUI5MzA5MF9VU0VSUk9NX0FERFIsCisJLmVuZAkJPSBNQjkzMDkwX1VTRVJST01fQUREUiArIE1COTMwOTBfVVNFUlJPTV9TSVpFIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYjkzMDkwX3VzZXJyb20gPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAxLAorCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZtYjkzMDkwX3VzZXJyb21fZGF0YSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJm1iOTMwOTBfdXNlcnJvbV9yZXNvdXJjZSwKK307CisKKy8qCisgKiByZWdpc3RlciB0aGUgTUI5MzA5MCBmbGFzaGVzCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG1iOTMwOTBfbXRkX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1iOTMwOTBfYm9vdHJvbSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtYjkzMDkwX3VzZXJyb20pOworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChtYjkzMDkwX210ZF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDY2MmIwMmUuLmI5ZTI0OTA3IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEsNSArMSw2IEBACiAjZGVmaW5lIFZNTElOVVhfU1lNQk9MKF9zeW1fKSBfIyNfc3ltXwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyogdGFyZ2V0IG1lbW9yeSBtYXAgKi8KICNpZmRlZiBDT05GSUdfSDgzMDBIX0dFTkVSSUMKQEAgLTc5LDExICs4MCw4IEBACiAJU0NIRURfVEVYVAogCUxPQ0tfVEVYVAogCV9fZXRleHQgPSAuIDsKLQkuID0gQUxJR04oMTYpOyAgICAgICAgICAvKiBFeGNlcHRpb24gdGFibGUgICAgICAgICAgICAgICovCi0JX19fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQlfX19zdG9wX19fZXhfdGFibGUgPSAuOwogCX0KKwlFWENFUFRJT05fVEFCTEUoMTYpCiAKIAlST0RBVEEKICNpZiBkZWZpbmVkKENPTkZJR19ST01LRVJORUwpCkBAIC0xMDAsOCArOTgsNyBAQAogCV9fc2RhdGEgPSAuIDsKIAlfX19kYXRhX3N0YXJ0ID0gLiA7CiAKLQkuID0gQUxJR04oMHgyMDAwKSA7Ci0JCSooLmRhdGEuaW5pdF90YXNrKQorCUlOSVRfVEFTS19EQVRBKDB4MjAwMCkKIAkuID0gQUxJR04oMHg0KSA7CiAJCURBVEFfREFUQQogCS4gPSBBTElHTigweDQpIDsKQEAgLTExNCwyNCArMTExLDE2IEBACiAJX19laW5pdHRleHQgPSAuOyAKIAkJSU5JVF9EQVRBCiAJLiA9IEFMSUdOKDB4NCkgOworCUlOSVRfU0VUVVAoMHg0KQogCV9fX3NldHVwX3N0YXJ0ID0gLjsKIAkJKiguaW5pdC5zZXR1cCkKIAkuID0gQUxJR04oMHg0KSA7CiAJX19fc2V0dXBfZW5kID0gLjsKLQlfX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCV9fX2luaXRjYWxsX2VuZCA9IC47Ci0JX19fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JX19fY29uX2luaXRjYWxsX2VuZCA9IC47CisJSU5JVF9DQUxMUworCUNPTl9JTklUQ0FMTAogCQlFWElUX1RFWFQKIAkJRVhJVF9EQVRBCi0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTklUUkQpCi0JCS4gPSBBTElHTig0KTsKLQlfX19pbml0cmFtZnNfc3RhcnQgPSAuOwotICAJCSooLmluaXQucmFtZnMpCi0gIAlfX19pbml0cmFtZnNfZW5kID0gLjsKLSNlbmRpZgorCUlOSVRfUkFNX0ZTCiAJLiA9IEFMSUdOKDB4NCkgOwogCV9fX2luaXRfZW5kID0gLjsKIAlfX2VkYXRhID0gLiA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IDY4NTFlNTIuLjFlZTU5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC02MCw5ICs2MCw3IEBACiAgICAgICAgYm9vbAogCiBjb25maWcgR0VORVJJQ19MT0NLQlJFQUsKLQlib29sCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBTTVAgJiYgUFJFRU1QVAorCWRlZl9ib29sIG4KIAogY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMgYi9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYwppbmRleCBmOTJiZGFhLi5jNjk1NTJiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYworKysgYi9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYwpAQCAtNjksMTEgKzY5LDExIEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpYTMyX3NoYXJlZF9wYWdlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaWEzMl9zaGFyZWRfcGFnZV92bV9vcHMgPSB7CiAJLmZhdWx0ID0gaWEzMl9pbnN0YWxsX3NoYXJlZF9wYWdlCiB9OwogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlhMzJfZ2F0ZV9wYWdlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaWEzMl9nYXRlX3BhZ2Vfdm1fb3BzID0gewogCS5mYXVsdCA9IGlhMzJfaW5zdGFsbF9nYXRlX3BhZ2UKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDBmODJjYzIuLjkxZGY5NjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaApAQCAtODksMTAgKzg5LDEyIEBACiAjZGVmaW5lIEFDUElfUkVMRUFTRV9HTE9CQUxfTE9DSyhmYWNzLCBBY3EpCQkJCVwKIAkoKEFjcSkgPSBpYTY0X2FjcGlfcmVsZWFzZV9nbG9iYWxfbG9jaygmZmFjcy0+Z2xvYmFsX2xvY2spKQogCisjaWZkZWYJQ09ORklHX0FDUEkKICNkZWZpbmUgYWNwaV9kaXNhYmxlZCAwCS8qIEFDUEkgYWx3YXlzIGVuYWJsZWQgb24gSUE2NCAqLwogI2RlZmluZSBhY3BpX25vaXJxIDAJLyogQUNQSSBhbHdheXMgZW5hYmxlZCBvbiBJQTY0ICovCiAjZGVmaW5lIGFjcGlfcGNpX2Rpc2FibGVkIDAgLyogQUNQSSBQQ0kgYWx3YXlzIGVuYWJsZWQgb24gSUE2NCAqLwogI2RlZmluZSBhY3BpX3N0cmljdCAxCS8qIG5vIEFDUEkgc3BlYyB3b3JrYXJvdW5kcyBvbiBJQTY0ICovCisjZW5kaWYKICNkZWZpbmUgYWNwaV9wcm9jZXNzb3JfY3N0YXRlX2NoZWNrKHgpICh4KSAvKiBubyBpZGxlIGxpbWl0cyBvbiBJQTY0IDopICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9hY3BpKHZvaWQpIHsgfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IDEzYWI3MTUuLjIzOWVjZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xOSwxMDMgKzE5LDEyNiBAQAogCiAjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19pbml0KHgpCQkJKCh4KS0+bG9jayA9IDApCiAKLSNpZmRlZiBBU01fU1VQUE9SVEVECiAvKgotICogVHJ5IHRvIGdldCB0aGUgbG9jay4gIElmIHdlIGZhaWwgdG8gZ2V0IHRoZSBsb2NrLCBtYWtlIGEgbm9uLXN0YW5kYXJkIGNhbGwgdG8KLSAqIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbigpLiAgV2UgZG8gbm90IHVzZSBhIG5vcm1hbCBjYWxsIGJlY2F1c2UgdGhhdCB3b3VsZCBmb3JjZSBhbGwKLSAqIGNhbGxlcnMgb2YgX19yYXdfc3Bpbl9sb2NrKCkgdG8gYmUgbm9uLWxlYWYgcm91dGluZXMuICBJbnN0ZWFkLCBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb24oKSBpcwotICogY2FyZWZ1bGx5IGNvZGVkIHRvIHRvdWNoIG9ubHkgdGhvc2UgcmVnaXN0ZXJzIHRoYXQgX19yYXdfc3Bpbl9sb2NrKCkgbWFya3MgImNsb2JiZXJlZCIuCisgKiBUaWNrZXQgbG9ja3MgYXJlIGNvbmNlcHR1YWxseSB0d28gcGFydHMsIG9uZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IGhlYWQgb2YKKyAqIHRoZSBxdWV1ZSwgYW5kIHRoZSBvdGhlciBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHRhaWwuIFRoZSBsb2NrIGlzIGFjcXVpcmVkCisgKiBieSBhdG9taWNhbGx5IG5vdGluZyB0aGUgdGFpbCBhbmQgaW5jcmVtZW50aW5nIGl0IGJ5IG9uZSAodGh1cyBhZGRpbmcKKyAqIG91cnNlbGYgdG8gdGhlIHF1ZXVlIGFuZCBub3Rpbmcgb3VyIHBvc2l0aW9uKSwgdGhlbiB3YWl0aW5nIHVudGlsIHRoZSBoZWFkCisgKiBiZWNvbWVzIGVxdWFsIHRvIHRoZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgdGFpbC4KKyAqIFRoZSBwYWQgYml0cyBpbiB0aGUgbWlkZGxlIGFyZSB1c2VkIHRvIHByZXZlbnQgdGhlIG5leHRfdGlja2V0IG51bWJlcgorICogb3ZlcmZsb3dpbmcgaW50byB0aGUgbm93X3NlcnZpbmcgbnVtYmVyLgorICoKKyAqICAgMzEgICAgICAgICAgICAgMTcgIDE2ICAgIDE1ICAxNCAgICAgICAgICAgICAgICAgICAgMAorICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogIHwgIG5vd19zZXJ2aW5nICAgICB8IHBhZGRpbmcgfCAgIG5leHRfdGlja2V0ICAgICAgICAgfAorICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICovCiAKLSNkZWZpbmUgSUE2NF9TUElOTE9DS19DTE9CQkVSUyAiYXIuY2N2IiwgImFyLnBmcyIsICJwMTQiLCAicDE1IiwgInIyNyIsICJyMjgiLCAicjI5IiwgInIzMCIsICJiNiIsICJtZW1vcnkiCisjZGVmaW5lIFRJQ0tFVF9TSElGVAkxNworI2RlZmluZSBUSUNLRVRfQklUUwkxNQorI2RlZmluZQlUSUNLRVRfTUFTSwkoKDEgPDwgVElDS0VUX0JJVFMpIC0gMSkKIAotc3RhdGljIGlubGluZSB2b2lkCi1fX3Jhd19zcGluX2xvY2tfZmxhZ3MgKHJhd19zcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlyZWdpc3RlciB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnB0ciBhc20gKCJyMzEiKSA9ICZsb2NrLT5sb2NrOworCWludAkqcCA9IChpbnQgKikmbG9jay0+bG9jaywgdGlja2V0LCBzZXJ2ZTsKIAotI2lmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDwgMykKLSMgaWZkZWYgQ09ORklHX0lUQU5JVU0KLQkvKiBkb24ndCB1c2UgYnJsIG9uIEl0YW5pdW0uLi4gKi8KLQlhc20gdm9sYXRpbGUgKCJ7XG5cdCIKLQkJICAgICAgIiAgbW92IGFyLmNjdiA9IHIwXG5cdCIKLQkJICAgICAgIiAgbW92IHIyOCA9IGlwXG5cdCIKLQkJICAgICAgIiAgbW92IHIzMCA9IDE7O1xuXHQiCi0JCSAgICAgICJ9XG5cdCIKLQkJICAgICAgImNtcHhjaGc0LmFjcSByMzAgPSBbJTFdLCByMzAsIGFyLmNjdlxuXHQiCi0JCSAgICAgICJtb3ZsIHIyOSA9IGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQ7O1xuXHQiCi0JCSAgICAgICJjbXA0Lm5lIHAxNCwgcDAgPSByMzAsIHIwXG5cdCIKLQkJICAgICAgIm1vdiBiNiA9IHIyOTs7XG5cdCIKLQkJICAgICAgIm1vdiByMjc9JTJcblx0IgotCQkgICAgICAiKHAxNCkgYnIuY29uZC5zcG50Lm1hbnkgYjYiCi0JCSAgICAgIDogIj1yIihwdHIpIDogInIiKHB0ciksICJyIiAoZmxhZ3MpIDogSUE2NF9TUElOTE9DS19DTE9CQkVSUyk7Ci0jIGVsc2UKLQlhc20gdm9sYXRpbGUgKCJ7XG5cdCIKLQkJICAgICAgIiAgbW92IGFyLmNjdiA9IHIwXG5cdCIKLQkJICAgICAgIiAgbW92IHIyOCA9IGlwXG5cdCIKLQkJICAgICAgIiAgbW92IHIzMCA9IDE7O1xuXHQiCi0JCSAgICAgICJ9XG5cdCIKLQkJICAgICAgImNtcHhjaGc0LmFjcSByMzAgPSBbJTFdLCByMzAsIGFyLmNjdjs7XG5cdCIKLQkJICAgICAgImNtcDQubmUgcDE0LCBwMCA9IHIzMCwgcjBcblx0IgotCQkgICAgICAibW92IHIyNz0lMlxuXHQiCi0JCSAgICAgICIocDE0KSBicmwuY29uZC5zcG50Lm1hbnkgaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNDs7IgotCQkgICAgICA6ICI9ciIocHRyKSA6ICJyIihwdHIpLCAiciIgKGZsYWdzKSA6IElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMpOwotIyBlbmRpZiAvKiBDT05GSUdfTUNLSU5MRVkgKi8KLSNlbHNlCi0jIGlmZGVmIENPTkZJR19JVEFOSVVNCi0JLyogZG9uJ3QgdXNlIGJybCBvbiBJdGFuaXVtLi4uICovCi0JLyogbWlzLWRlY2xhcmUsIHNvIHdlIGdldCB0aGUgZW50cnktcG9pbnQsIG5vdCBpdCdzIGZ1bmN0aW9uIGRlc2NyaXB0b3I6ICovCi0JYXNtIHZvbGF0aWxlICgibW92IHIzMCA9IDFcblx0IgotCQkgICAgICAibW92IHIyNz0lMlxuXHQiCi0JCSAgICAgICJtb3YgYXIuY2N2ID0gcjA7O1xuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUwXSwgcjMwLCBhci5jY3Zcblx0IgotCQkgICAgICAibW92bCByMjkgPSBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb247O1xuXHQiCi0JCSAgICAgICJjbXA0Lm5lIHAxNCwgcDAgPSByMzAsIHIwXG5cdCIKLQkJICAgICAgIm1vdiBiNiA9IHIyOTs7XG5cdCIKLQkJICAgICAgIihwMTQpIGJyLmNhbGwuc3BudC5tYW55IGI2ID0gYjYiCi0JCSAgICAgIDogIj1yIihwdHIpIDogInIiKHB0ciksICJyIiAoZmxhZ3MpIDogSUE2NF9TUElOTE9DS19DTE9CQkVSUyk7Ci0jIGVsc2UKLQlhc20gdm9sYXRpbGUgKCJtb3YgcjMwID0gMVxuXHQiCi0JCSAgICAgICJtb3YgcjI3PSUyXG5cdCIKLQkJICAgICAgIm1vdiBhci5jY3YgPSByMDs7XG5cdCIKLQkJICAgICAgImNtcHhjaGc0LmFjcSByMzAgPSBbJTBdLCByMzAsIGFyLmNjdjs7XG5cdCIKLQkJICAgICAgImNtcDQubmUgcDE0LCBwMCA9IHIzMCwgcjBcblx0IgotCQkgICAgICAiKHAxNCkgYnJsLmNhbGwuc3BudC5tYW55IGI2PWlhNjRfc3BpbmxvY2tfY29udGVudGlvbjs7IgotCQkgICAgICA6ICI9ciIocHRyKSA6ICJyIihwdHIpLCAiciIgKGZsYWdzKSA6IElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMpOwotIyBlbmRpZiAvKiBDT05GSUdfTUNLSU5MRVkgKi8KLSNlbmRpZgorCXRpY2tldCA9IGlhNjRfZmV0Y2hhZGQoMSwgcCwgYWNxKTsKKworCWlmICghKCgodGlja2V0ID4+IFRJQ0tFVF9TSElGVCkgXiB0aWNrZXQpICYgVElDS0VUX01BU0spKQorCQlyZXR1cm47CisKKwlpYTY0X2ludmFsYSgpOworCisJZm9yICg7OykgeworCQlhc20gdm9sYXRpbGUgKCJsZDQuYy5uYyAlMD1bJTFdIiA6ICI9ciIoc2VydmUpIDogInIiKHApIDogIm1lbW9yeSIpOworCisJCWlmICghKCgoc2VydmUgPj4gVElDS0VUX1NISUZUKSBeIHRpY2tldCkgJiBUSUNLRVRfTUFTSykpCisJCQlyZXR1cm47CisJCWNwdV9yZWxheCgpOworCX0KIH0KIAotI2RlZmluZSBfX3Jhd19zcGluX2xvY2sobG9jaykgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIDApCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3RpY2tldF9zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJaW50IHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCi0vKiBVbmxvY2sgYnkgZG9pbmcgYW4gb3JkZXJlZCBzdG9yZSBhbmQgcmVsZWFzaW5nIHRoZSBjYWNoZWxpbmUgd2l0aCBudGEgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqeCkgewotCWJhcnJpZXIoKTsKLQlhc20gdm9sYXRpbGUgKCJzdDQucmVsLm50YSBbJTBdID0gcjBcblx0IiA6OiAiciIoeCkpOworCWlmICghKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgXiB0bXApICYgVElDS0VUX01BU0spKQorCQlyZXR1cm4gaWE2NF9jbXB4Y2hnKGFjcSwgJmxvY2stPmxvY2ssIHRtcCwgdG1wICsgMSwgc2l6ZW9mICh0bXApKSA9PSB0bXA7CisJcmV0dXJuIDA7CiB9CiAKLSNlbHNlIC8qICFBU01fU1VQUE9SVEVEICovCi0jZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCi0jIGRlZmluZSBfX3Jhd19zcGluX2xvY2soeCkJCQkJCQkJCVwKLWRvIHsJCQkJCQkJCQkJCVwKLQlfX3UzMiAqaWE2NF9zcGlubG9ja19wdHIgPSAoX191MzIgKikgKHgpOwkJCQkJXAotCV9fdTY0IGlhNjRfc3BpbmxvY2tfdmFsOwkJCQkJCQlcCi0JaWE2NF9zcGlubG9ja192YWwgPSBpYTY0X2NtcHhjaGc0X2FjcShpYTY0X3NwaW5sb2NrX3B0ciwgMSwgMCk7CQkJXAotCWlmICh1bmxpa2VseShpYTY0X3NwaW5sb2NrX3ZhbCkpIHsJCQkJCQlcCi0JCWRvIHsJCQkJCQkJCQlcCi0JCQl3aGlsZSAoKmlhNjRfc3BpbmxvY2tfcHRyKQkJCQkJXAotCQkJCWlhNjRfYmFycmllcigpOwkJCQkJCVwKLQkJCWlhNjRfc3BpbmxvY2tfdmFsID0gaWE2NF9jbXB4Y2hnNF9hY3EoaWE2NF9zcGlubG9ja19wdHIsIDEsIDApOwlcCi0JCX0gd2hpbGUgKGlhNjRfc3BpbmxvY2tfdmFsKTsJCQkJCQlcCi0JfQkJCQkJCQkJCQlcCi19IHdoaWxlICgwKQotI2RlZmluZSBfX3Jhd19zcGluX3VubG9jayh4KQlkbyB7IGJhcnJpZXIoKTsgKChyYXdfc3BpbmxvY2tfdCAqKSB4KS0+bG9jayA9IDA7IH0gd2hpbGUgKDApCi0jZW5kaWYgLyogIUFTTV9TVVBQT1JURUQgKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwl1bnNpZ25lZCBzaG9ydAkqcCA9ICh1bnNpZ25lZCBzaG9ydCAqKSZsb2NrLT5sb2NrICsgMSwgdG1wOwogCi0jZGVmaW5lIF9fcmF3X3NwaW5faXNfbG9ja2VkKHgpCQkoKHgpLT5sb2NrICE9IDApCi0jZGVmaW5lIF9fcmF3X3NwaW5fdHJ5bG9jayh4KQkJKGNtcHhjaGdfYWNxKCYoeCktPmxvY2ssIDAsIDEpID09IDApCi0jZGVmaW5lIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQobG9jaykgXAotCWRvIHsgd2hpbGUgKF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spKSBjcHVfcmVsYXgoKTsgfSB3aGlsZSAoMCkKKwlhc20gdm9sYXRpbGUgKCJsZDIuYmlhcyAlMD1bJTFdIiA6ICI9ciIodG1wKSA6ICJyIihwKSk7CisJQUNDRVNTX09OQ0UoKnApID0gKHRtcCArIDIpICYgfjE7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9ja193YWl0KHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWludAkqcCA9IChpbnQgKikmbG9jay0+bG9jaywgdGlja2V0OworCisJaWE2NF9pbnZhbGEoKTsKKworCWZvciAoOzspIHsKKwkJYXNtIHZvbGF0aWxlICgibGQ0LmMubmMgJTA9WyUxXSIgOiAiPXIiKHRpY2tldCkgOiAiciIocCkgOiAibWVtb3J5Iik7CisJCWlmICghKCgodGlja2V0ID4+IFRJQ0tFVF9TSElGVCkgXiB0aWNrZXQpICYgVElDS0VUX01BU0spKQorCQkJcmV0dXJuOworCQljcHVfcmVsYXgoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGlja2V0X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWxvbmcgdG1wID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CisKKwlyZXR1cm4gISEoKCh0bXAgPj4gVElDS0VUX1NISUZUKSBeIHRtcCkgJiBUSUNLRVRfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWxvbmcgdG1wID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CisKKwlyZXR1cm4gKCh0bXAgLSAodG1wID4+IFRJQ0tFVF9TSElGVCkpICYgVElDS0VUX01BU0spID4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fdGlja2V0X3NwaW5faXNfbG9ja2VkKGxvY2spOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gX190aWNrZXRfc3Bpbl9pc19jb250ZW5kZWQobG9jayk7Cit9CisjZGVmaW5lIF9fcmF3X3NwaW5faXNfY29udGVuZGVkCV9fcmF3X3NwaW5faXNfY29udGVuZGVkCisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJX190aWNrZXRfc3Bpbl9sb2NrKGxvY2spOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fdGlja2V0X3NwaW5fdHJ5bG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fdW5sb2NrKGxvY2spOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKHJhd19zcGlubG9ja190ICpsb2NrLAorCQkJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCV9fcmF3X3NwaW5fbG9jayhsb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJX190aWNrZXRfc3Bpbl91bmxvY2tfd2FpdChsb2NrKTsKK30KIAogI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHJ3KQkJKCoodm9sYXRpbGUgaW50ICopKHJ3KSA+PSAwKQogI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayhydykJKCoodm9sYXRpbGUgaW50ICopKHJ3KSA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwppbmRleCAxYTZlNDQ1Li42OTZlZmYyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwpAQCAtMTEzMCw5NSArMTEzMCw2IEBACiAjZW5kaWYgLyogQ09ORklHX0lBNjRfQlJMX0VNVSAqLwogCiAjaWZkZWYgQ09ORklHX1NNUAotCS8qCi0JICogVGhpcyByb3V0aW5lIGhhbmRsZXMgc3BpbmxvY2sgY29udGVudGlvbi4gIEl0IHVzZXMgYSBub24tc3RhbmRhcmQgY2FsbGluZwotCSAqIGNvbnZlbnRpb24gdG8gYXZvaWQgY29udmVydGluZyBsZWFmIHJvdXRpbmVzIGludG8gaW50ZXJpb3Igcm91dGluZXMuICBCZWNhdXNlCi0JICogb2YgdGhpcyBzcGVjaWFsIGNvbnZlbnRpb24sIHRoZXJlIGFyZSBzZXZlcmFsIHJlc3RyaWN0aW9uczoKLQkgKgotCSAqIC0gZG8gbm90IHVzZSBncCByZWxhdGl2ZSB2YXJpYWJsZXMsIHRoaXMgY29kZSBpcyBjYWxsZWQgZnJvbSB0aGUga2VybmVsCi0JICogICBhbmQgZnJvbSBtb2R1bGVzLCByMSBpcyB1bmRlZmluZWQuCi0JICogLSBkbyBub3QgdXNlIHN0YWNrZWQgcmVnaXN0ZXJzLCB0aGUgY2FsbGVyIG93bnMgdGhlbS4KLQkgKiAtIGRvIG5vdCB1c2UgdGhlIHNjcmF0Y2ggc3RhY2sgc3BhY2UsIHRoZSBjYWxsZXIgb3ducyBpdC4KLQkgKiAtIGRvIG5vdCB1c2UgYW55IHJlZ2lzdGVycyBvdGhlciB0aGFuIHRoZSBvbmVzIGxpc3RlZCBiZWxvdwotCSAqCi0JICogSW5wdXRzOgotCSAqICAgYXIucGZzIC0gc2F2ZWQgQ0ZNIG9mIGNhbGxlcgotCSAqICAgYXIuY2N2IC0gMCAoYW5kIGF2YWlsYWJsZSBmb3IgdXNlKQotCSAqICAgcjI3ICAgIC0gZmxhZ3MgZnJvbSBzcGluX2xvY2tfaXJxc2F2ZSBvciAwLiAgTXVzdCBiZSBwcmVzZXJ2ZWQuCi0JICogICByMjggICAgLSBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIHIyOSAgICAtIGF2YWlsYWJsZSBmb3IgdXNlLgotCSAqICAgcjMwICAgIC0gYXZhaWxhYmxlIGZvciB1c2UuCi0JICogICByMzEgICAgLSBhZGRyZXNzIG9mIGxvY2ssIGF2YWlsYWJsZSBmb3IgdXNlLgotCSAqICAgYjYgICAgIC0gcmV0dXJuIGFkZHJlc3MKLQkgKiAgIHAxNCAgICAtIGF2YWlsYWJsZSBmb3IgdXNlLgotCSAqICAgcDE1ICAgIC0gdXNlZCB0byB0cmFjayBmbGFnIHN0YXR1cy4KLQkgKgotCSAqIElmIHlvdSBwYXRjaCB0aGlzIGNvZGUgdG8gdXNlIG1vcmUgcmVnaXN0ZXJzLCBkbyBub3QgZm9yZ2V0IHRvIHVwZGF0ZQotCSAqIHRoZSBjbG9iYmVyIGxpc3RzIGZvciBzcGluX2xvY2soKSBpbiBhcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaC4KLQkgKi8KLQotI2lmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDwgMykKLQotR0xPQkFMX0VOVFJZKGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQpCi0JLnByb2xvZ3VlCi0JLnNhdmUgYXIucGZzLCByMAkvLyB0aGlzIGNvZGUgZWZmZWN0aXZlbHkgaGFzIGEgemVybyBmcmFtZSBzaXplCi0JLnNhdmUgcnAsIHIyOAotCS5ib2R5Ci0Jbm9wIDAKLQl0Yml0Lm56IHAxNSxwMD1yMjcsSUE2NF9QU1JfSV9CSVQKLQkucmVzdG9yZSBzcAkJLy8gcG9wIGV4aXN0aW5nIHByb2xvZ3VlIGFmdGVyIG5leHQgaW5zbgotCW1vdiBiNiA9IHIyOAotCS5wcm9sb2d1ZQotCS5zYXZlIGFyLnBmcywgcjAKLQkuYWx0cnAgYjYKLQkuYm9keQotCTs7Ci0ocDE1KQlzc20gcHNyLmkJCS8vIHJlZW5hYmxlIGludGVycnVwdHMgaWYgdGhleSB3ZXJlIG9uCi0JCQkJLy8gRGF2aWRNIHNheXMgdGhhdCBzcmx6LmQgaXMgc2xvdyBhbmQgaXMgbm90IHJlcXVpcmVkIGluIHRoaXMgY2FzZQotLndhaXQ6Ci0JLy8gZXhwb25lbnRpYWwgYmFja29mZiwga2RiLCBsb2NrbWV0ZXIgZXRjLiBnbyBpbiBoZXJlCi0JaGludCBAcGF1c2UKLQlsZDQgcjMwPVtyMzFdCQkvLyBkb24ndCB1c2UgbGQ0LmJpYXM7IGlmIGl0J3MgY29udGVuZGVkLCB3ZSB3b24ndCB3cml0ZSB0aGUgd29yZAotCW5vcCAwCi0JOzsKLQljbXA0Lm5lIHAxNCxwMD1yMzAscjAKLShwMTQpCWJyLmNvbmQuc3B0ay5mZXcgLndhaXQKLShwMTUpCXJzbSBwc3IuaQkJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzIGlmIHdlIHJlZW5hYmxlZCB0aGVtCi0JYnIuY29uZC5zcHRrLmZldyBiNgkvLyBsb2NrIGlzIG5vdyBmcmVlLCB0cnkgdG8gYWNxdWlyZQotCS5nbG9iYWwgaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNF9lbmQJLy8gZm9yIGtlcm5wcm9mCi1pYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180X2VuZDoKLUVORChpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180KQotCi0jZWxzZQotCi1HTE9CQUxfRU5UUlkoaWE2NF9zcGlubG9ja19jb250ZW50aW9uKQotCS5wcm9sb2d1ZQotCS5hbHRycCBiNgotCS5ib2R5Ci0JdGJpdC5ueiBwMTUscDA9cjI3LElBNjRfUFNSX0lfQklUCi0JOzsKLS53YWl0OgotKHAxNSkJc3NtIHBzci5pCQkvLyByZWVuYWJsZSBpbnRlcnJ1cHRzIGlmIHRoZXkgd2VyZSBvbgotCQkJCS8vIERhdmlkTSBzYXlzIHRoYXQgc3Jsei5kIGlzIHNsb3cgYW5kIGlzIG5vdCByZXF1aXJlZCBpbiB0aGlzIGNhc2UKLS53YWl0MjoKLQkvLyBleHBvbmVudGlhbCBiYWNrb2ZmLCBrZGIsIGxvY2ttZXRlciBldGMuIGdvIGluIGhlcmUKLQloaW50IEBwYXVzZQotCWxkNCByMzA9W3IzMV0JCS8vIGRvbid0IHVzZSBsZDQuYmlhczsgaWYgaXQncyBjb250ZW5kZWQsIHdlIHdvbid0IHdyaXRlIHRoZSB3b3JkCi0JOzsKLQljbXA0Lm5lIHAxNCxwMD1yMzAscjAKLQltb3YgcjMwID0gMQotKHAxNCkJYnIuY29uZC5zcHRrLmZldyAud2FpdDIKLShwMTUpCXJzbSBwc3IuaQkJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzIGlmIHdlIHJlZW5hYmxlZCB0aGVtCi0JOzsKLQljbXB4Y2hnNC5hY3EgcjMwPVtyMzFdLCByMzAsIGFyLmNjdgotCTs7Ci0JY21wNC5uZSBwMTQscDA9cjAscjMwCi0ocDE0KQlici5jb25kLnNwdGsuZmV3IC53YWl0Ci0KLQlici5yZXQuc3B0ay5tYW55IGI2CS8vIGxvY2sgaXMgbm93IHRha2VuCi1FTkQoaWE2NF9zcGlubG9ja19jb250ZW50aW9uKQotCi0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogR0xPQkFMX0VOVFJZKGlhNjRfanVtcF90b19zYWwpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCmluZGV4IDhlYmNjYjUuLjE0ZDM5ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCkBAIC04NCwyNiArODQsNiBAQAogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIEVYUE9SVF9TWU1CT0wodW53X2luaXRfcnVubmluZyk7CiAKLSNpZmRlZiBBU01fU1VQUE9SVEVECi0jIGlmZGVmIENPTkZJR19TTVAKLSMgIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDwgMykKLS8qCi0gKiBUaGlzIGlzIG5vdCBhIG5vcm1hbCByb3V0aW5lIGFuZCB3ZSBkb24ndCB3YW50IGEgZnVuY3Rpb24gZGVzY3JpcHRvciBmb3IgaXQsIHNvIHdlIHVzZQotICogYSBmYWtlIGRlY2xhcmF0aW9uIGhlcmUuCi0gKi8KLWV4dGVybiBjaGFyIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQ7Ci1FWFBPUlRfU1lNQk9MKGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQpOwotIyAgZWxzZQotLyoKLSAqIFRoaXMgaXMgbm90IGEgbm9ybWFsIHJvdXRpbmUgYW5kIHdlIGRvbid0IHdhbnQgYSBmdW5jdGlvbiBkZXNjcmlwdG9yIGZvciBpdCwgc28gd2UgdXNlCi0gKiBhIGZha2UgZGVjbGFyYXRpb24gaGVyZS4KLSAqLwotZXh0ZXJuIGNoYXIgaWE2NF9zcGlubG9ja19jb250ZW50aW9uOwotRVhQT1JUX1NZTUJPTChpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb24pOwotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfSUE2NF9FU0kpIHx8IGRlZmluZWQoQ09ORklHX0lBNjRfRVNJX01PRFVMRSkKIGV4dGVybiB2b2lkIGVzaV9jYWxsX3BoeXMgKHZvaWQpOwogRVhQT1JUX1NZTUJPTF9HUEwoZXNpX2NhbGxfcGh5cyk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwppbmRleCBkMjg3N2E3Li40OTZhYzdhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKQEAgLTg4Nyw2ICs4ODcsNjAgQEAKIAltZW1jcHkoY3VycmVudC0+Y29tbSwgY29tbSwgc2l6ZW9mKGN1cnJlbnQtPmNvbW0pKTsKIH0KIAorc3RhdGljIHZvaWQKK2ZpbmlzaF9wdF9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBwYWxfbWluX3N0YXRlX2FyZWFfdCAqbXMsCisJCXVuc2lnbmVkIGxvbmcgKm5hdCkKK3sKKwljb25zdCB1NjQgKmJhbms7CisKKwkvKiBJZiBpcHNyLmljIHRoZW4gdXNlIHBtc2Ffe2lpcCxpcHNyLGlmc30sIGVsc2UgdXNlCisJICogcG1zYV97eGlwLHhwc3IseGZzfQorCSAqLworCWlmIChpYTY0X3BzcihyZWdzKS0+aWMpIHsKKwkJcmVncy0+Y3JfaWlwID0gbXMtPnBtc2FfaWlwOworCQlyZWdzLT5jcl9pcHNyID0gbXMtPnBtc2FfaXBzcjsKKwkJcmVncy0+Y3JfaWZzID0gbXMtPnBtc2FfaWZzOworCX0gZWxzZSB7CisJCXJlZ3MtPmNyX2lpcCA9IG1zLT5wbXNhX3hpcDsKKwkJcmVncy0+Y3JfaXBzciA9IG1zLT5wbXNhX3hwc3I7CisJCXJlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX3hmczsKKwl9CisJcmVncy0+cHIgPSBtcy0+cG1zYV9wcjsKKwlyZWdzLT5iMCA9IG1zLT5wbXNhX2JyMDsKKwlyZWdzLT5hcl9yc2MgPSBtcy0+cG1zYV9yc2M7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzEtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjEsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzItMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjIsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzMtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjMsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzgtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjgsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzktMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjksIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzEwLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxMCwgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTEtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjExLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMi0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTIsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzEzLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxMywgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTQtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE0LCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxNS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTUsIG5hdCk7CisJaWYgKGlhNjRfcHNyKHJlZ3MpLT5ibikKKwkJYmFuayA9IG1zLT5wbXNhX2JhbmsxX2dyOworCWVsc2UKKwkJYmFuayA9IG1zLT5wbXNhX2JhbmswX2dyOworCWNvcHlfcmVnKCZiYW5rWzE2LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTYsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMTctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxNywgbmF0KTsKKwljb3B5X3JlZygmYmFua1sxOC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE4LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzE5LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTksIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyMCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syMS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjIxLCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzIyLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjIsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjMtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyMywgbmF0KTsKKwljb3B5X3JlZygmYmFua1syNC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI0LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI1LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjUsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjYtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyNiwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syNy0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI3LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI4LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjgsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjktMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyOSwgbmF0KTsKKwljb3B5X3JlZygmYmFua1szMC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjMwLCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzMxLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMzEsIG5hdCk7Cit9CisKIC8qIE9uIGVudHJ5IHRvIHRoaXMgcm91dGluZSwgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIHBlciBjcHUgc3RhY2ssIHNlZQogICogbWNhX2FzbS5oLiAgVGhlIG9yaWdpbmFsIHN0YWNrIGhhcyBub3QgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgZXZlbnQuICBTb21lIG9mCiAgKiB0aGUgb3JpZ2luYWwgc3RhY2sncyByZWdpc3RlcnMgd2lsbCBiZSBpbiB0aGUgUkJTIG9uIHRoaXMgc3RhY2suICBUaGlzIHN0YWNrCkBAIC05MjEsNyArOTc1LDYgQEAKIAl1NjQgcjEyID0gbXMtPnBtc2FfZ3JbMTItMV0sIHIxMyA9IG1zLT5wbXNhX2dyWzEzLTFdOwogCXU2NCBhcl9ic3BzdG9yZSA9IHJlZ3MtPmFyX2JzcHN0b3JlOwogCXU2NCBhcl9ic3AgPSByZWdzLT5hcl9ic3BzdG9yZSArIChsb2FkcnMgPj4gMTYpOwotCWNvbnN0IHU2NCAqYmFuazsKIAljb25zdCBjaGFyICptc2c7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtMTAyNCw1NCArMTA3Nyw5IEBACiAJcCA9IChjaGFyICopcjEyIC0gc2l6ZW9mKCpyZWdzKTsKIAlvbGRfcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKXA7CiAJbWVtY3B5KG9sZF9yZWdzLCByZWdzLCBzaXplb2YoKnJlZ3MpKTsKLQkvKiBJZiBpcHNyLmljIHRoZW4gdXNlIHBtc2Ffe2lpcCxpcHNyLGlmc30sIGVsc2UgdXNlCi0JICogcG1zYV97eGlwLHhwc3IseGZzfQotCSAqLwotCWlmIChpYTY0X3BzcihyZWdzKS0+aWMpIHsKLQkJb2xkX3JlZ3MtPmNyX2lpcCA9IG1zLT5wbXNhX2lpcDsKLQkJb2xkX3JlZ3MtPmNyX2lwc3IgPSBtcy0+cG1zYV9pcHNyOwotCQlvbGRfcmVncy0+Y3JfaWZzID0gbXMtPnBtc2FfaWZzOwotCX0gZWxzZSB7Ci0JCW9sZF9yZWdzLT5jcl9paXAgPSBtcy0+cG1zYV94aXA7Ci0JCW9sZF9yZWdzLT5jcl9pcHNyID0gbXMtPnBtc2FfeHBzcjsKLQkJb2xkX3JlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX3hmczsKLQl9Ci0Jb2xkX3JlZ3MtPnByID0gbXMtPnBtc2FfcHI7Ci0Jb2xkX3JlZ3MtPmIwID0gbXMtPnBtc2FfYnIwOwogCW9sZF9yZWdzLT5sb2FkcnMgPSBsb2FkcnM7Ci0Jb2xkX3JlZ3MtPmFyX3JzYyA9IG1zLT5wbXNhX3JzYzsKIAlvbGRfdW5hdCA9IG9sZF9yZWdzLT5hcl91bmF0OwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMSwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMi0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjIsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzMtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIzLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9ncls4LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yOCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbOS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjksICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzEwLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTAsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzExLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTEsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzEyLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTIsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzEzLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTMsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzE0LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTQsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzE1LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTUsICZvbGRfdW5hdCk7Ci0JaWYgKGlhNjRfcHNyKG9sZF9yZWdzKS0+Ym4pCi0JCWJhbmsgPSBtcy0+cG1zYV9iYW5rMV9ncjsKLQllbHNlCi0JCWJhbmsgPSBtcy0+cG1zYV9iYW5rMF9ncjsKLQljb3B5X3JlZygmYmFua1sxNi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIxNiwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1sxNy0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIxNywgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1sxOC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIxOCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1sxOS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIxOSwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syMC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyMCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syMS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyMSwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syMi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyMiwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syMy0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyMywgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syNC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyNCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syNS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyNSwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syNi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyNiwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syNy0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyNywgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syOC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyOCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syOS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyOSwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1szMC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIzMCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1szMS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIzMSwgJm9sZF91bmF0KTsKKwlmaW5pc2hfcHRfcmVncyhvbGRfcmVncywgbXMsICZvbGRfdW5hdCk7CiAKIAkvKiBOZXh0IHN0YWNrIGEgc3RydWN0IHN3aXRjaF9zdGFjay4gIG1jYV9hc20uUyBidWlsdCBhIHBhcnRpYWwKIAkgKiBzd2l0Y2hfc3RhY2ssIGNvcHkgaXQgYW5kIGZpbGwgaW4gdGhlIGJsYW5rcyB1c2luZyBwdF9yZWdzIGFuZApAQCAtMTE0MSw2ICsxMTQ5LDggQEAKIG5vX21vZDoKIAltcHJpbnRrKEtFUk5fSU5GTyAiY3B1ICVkLCAlcyAlcywgb3JpZ2luYWwgc3RhY2sgbm90IG1vZGlmaWVkXG4iLAogCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCB0eXBlLCBtc2cpOworCW9sZF91bmF0ID0gcmVncy0+YXJfdW5hdDsKKwlmaW5pc2hfcHRfcmVncyhyZWdzLCBtcywgJm9sZF91bmF0KTsKIAlyZXR1cm4gcHJldmlvdXNfY3VycmVudDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMKaW5kZXggNmRiMDg1OS4uNzc2ZGQ0MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jCkBAIC02MCw3ICs2MCw2IEBACiAgKi8KIGludCBub191bmFsaWduZWRfd2FybmluZzsKIGludCB1bmFsaWduZWRfZHVtcF9zdGFjazsKLXN0YXRpYyBpbnQgbm9wcmludF93YXJuaW5nOwogCiAvKgogICogRm9yIE0tdW5pdDoKQEAgLTEzNTcsOSArMTM1Niw4IEBACiAJCQkvKiB3YXRjaCBmb3IgY29tbWFuZCBuYW1lcyBjb250YWluaW5nICVzICovCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyIsIGJ1Zik7CiAJCX0gZWxzZSB7Ci0JCQlpZiAobm9fdW5hbGlnbmVkX3dhcm5pbmcgJiYgIW5vcHJpbnRfd2FybmluZykgewotCQkJCW5vcHJpbnRfd2FybmluZyA9IDE7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMoJWQpIGVuY291bnRlcmVkIGFuICIKKwkJCWlmIChub191bmFsaWduZWRfd2FybmluZykgeworCQkJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiJXMoJWQpIGVuY291bnRlcmVkIGFuICIKIAkJCQkgICAgICAgInVuYWxpZ25lZCBleGNlcHRpb24gd2hpY2ggcmVxdWlyZWRcbiIKIAkJCQkgICAgICAgImtlcm5lbCBhc3Npc3RhbmNlLCB3aGljaCBkZWdyYWRlcyAiCiAJCQkJICAgICAgICJ0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGFwcGxpY2F0aW9uLlxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL3RsYi5jIGIvYXJjaC9pYTY0L21tL3RsYi5jCmluZGV4IGY0MjZkYzcuLmVlMDlkMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS90bGIuYworKysgYi9hcmNoL2lhNjQvbW0vdGxiLmMKQEAgLTEwMCwyNCArMTAwLDM2IEBACiAgKiB0aGlzIHByaW1pdGl2ZSBpdCBjYW4gYmUgbW92ZWQgdXAgdG8gYSBzcGluYXBob3JlLmggaGVhZGVyLgogICovCiBzdHJ1Y3Qgc3BpbmFwaG9yZSB7Ci0JYXRvbWljX3QJY3VyOworCXVuc2lnbmVkIGxvbmcJdGlja2V0OworCXVuc2lnbmVkIGxvbmcJc2VydmU7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3BpbmFwaG9yZV9pbml0KHN0cnVjdCBzcGluYXBob3JlICpzcywgaW50IHZhbCkKIHsKLQlhdG9taWNfc2V0KCZzcy0+Y3VyLCB2YWwpOworCXNzLT50aWNrZXQgPSAwOworCXNzLT5zZXJ2ZSA9IHZhbDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRvd25fc3BpbihzdHJ1Y3Qgc3BpbmFwaG9yZSAqc3MpCiB7Ci0Jd2hpbGUgKHVubGlrZWx5KCFhdG9taWNfYWRkX3VubGVzcygmc3MtPmN1ciwgLTEsIDApKSkKLQkJd2hpbGUgKGF0b21pY19yZWFkKCZzcy0+Y3VyKSA9PSAwKQotCQkJY3B1X3JlbGF4KCk7CisJdW5zaWduZWQgbG9uZyB0ID0gaWE2NF9mZXRjaGFkZCgxLCAmc3MtPnRpY2tldCwgYWNxKSwgc2VydmU7CisKKwlpZiAodGltZV9iZWZvcmUodCwgc3MtPnNlcnZlKSkKKwkJcmV0dXJuOworCisJaWE2NF9pbnZhbGEoKTsKKworCWZvciAoOzspIHsKKwkJYXNtIHZvbGF0aWxlICgibGQ0LmMubmMgJTA9WyUxXSIgOiAiPXIiKHNlcnZlKSA6ICJyIigmc3MtPnNlcnZlKSA6ICJtZW1vcnkiKTsKKwkJaWYgKHRpbWVfYmVmb3JlKHQsIHNlcnZlKSkKKwkJCXJldHVybjsKKwkJY3B1X3JlbGF4KCk7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBfc3BpbihzdHJ1Y3Qgc3BpbmFwaG9yZSAqc3MpCiB7Ci0JYXRvbWljX2FkZCgxLCAmc3MtPmN1cik7CisJaWE2NF9mZXRjaGFkZCgxLCAmc3MtPnNlcnZlLCByZWwpOwogfQogCiBzdGF0aWMgc3RydWN0IHNwaW5hcGhvcmUgcHRjZ19zZW07CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvb3Byb2ZpbGUvYmFja3RyYWNlLmMgYi9hcmNoL2lhNjQvb3Byb2ZpbGUvYmFja3RyYWNlLmMKaW5kZXggYWRiMDE1Ni4uNWNkZDdlNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jCisrKyBiL2FyY2gvaWE2NC9vcHJvZmlsZS9iYWNrdHJhY2UuYwpAQCAtMzIsMjQgKzMyLDYgQEAKIAl1NjQgKnByZXZfcGZzX2xvYzsJLyogc3RhdGUgZm9yIFdBUiBmb3Igb2xkIHNwaW5sb2NrIG9vbCBjb2RlICovCiB9IGlhNjRfYmFja3RyYWNlX3Q7CiAKLSNpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0vKgotICogUmV0dXJucyBub24temVybyBpZiB0aGUgUEMgaXMgaW4gdGhlIHNwaW5sb2NrIGNvbnRlbnRpb24gb3V0LW9mLWxpbmUgY29kZQotICogd2l0aCBub24tc3RhbmRhcmQgY2FsbGluZyBzZXF1ZW5jZSAob24gb2xkZXIgY29tcGlsZXJzKS4KLSAqLwotc3RhdGljIF9faW5saW5lX18gaW50IGluX29sZF9vb2xfc3BpbmxvY2tfY29kZSh1bnNpZ25lZCBsb25nIHBjKQotewotCWV4dGVybiBjb25zdCBjaGFyIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzRbXSBfX2F0dHJpYnV0ZV9fICgod2VhaykpOwotCWV4dGVybiBjb25zdCBjaGFyIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzRfZW5kW10gX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKLQl1bnNpZ25lZCBsb25nIHNjX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNDsKLQl1bnNpZ25lZCBsb25nIHNjX2VuZCA9ICh1bnNpZ25lZCBsb25nKWlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzRfZW5kOwotCXJldHVybiAoc2Nfc3RhcnQgJiYgc2NfZW5kICYmIHBjID49IHNjX3N0YXJ0ICYmIHBjIDwgc2NfZW5kKTsKLX0KLSNlbHNlCi0vKiBOZXdlciBzcGlubG9jayBjb2RlIGRvZXMgYSBwcm9wZXIgYnIuY2FsbCBhbmQgd29ya3MgZmluZSB3aXRoIHRoZSB1bndpbmRlciAqLwotI2RlZmluZSBpbl9vbGRfb29sX3NwaW5sb2NrX2NvZGUocGMpCTAKLSNlbmRpZgotCiAvKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBQQyBpcyBpbiB0aGUgSW50ZXJydXB0IFZlY3RvciBUYWJsZSAqLwogc3RhdGljIF9faW5saW5lX18gaW50IGluX2l2dF9jb2RlKHVuc2lnbmVkIGxvbmcgcGMpCiB7CkBAIC04MCw3ICs2Miw3IEBACiAJICovCiAJaWYgKGJ0LT5wcmV2X3Bmc19sb2MgJiYgYnQtPnJlZ3MgJiYgYnQtPmZyYW1lLnBmc19sb2MgPT0gYnQtPnByZXZfcGZzX2xvYykKIAkJYnQtPmZyYW1lLnBmc19sb2MgPSAmYnQtPnJlZ3MtPmFyX3BmczsKLQlidC0+cHJldl9wZnNfbG9jID0gKGluX29sZF9vb2xfc3BpbmxvY2tfY29kZShidC0+ZnJhbWUuaXApID8gYnQtPmZyYW1lLnBmc19sb2MgOiBOVUxMKTsKKwlidC0+cHJldl9wZnNfbG9jID0gTlVMTDsKIAogCXJldHVybiB1bndfdW53aW5kKCZidC0+ZnJhbWUpID09IDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL3BjaS5jIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwppbmRleCA3ZGU3NmRkLi5jMGZjYTJjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvcGNpL3BjaS5jCisrKyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKQEAgLTU2LDEwICs1NiwxMyBAQAogCWlmICgoc2VnIHwgcmVnKSA8PSAyNTUpIHsKIAkJYWRkciA9IFBDSV9TQUxfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAwOwotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChzYWxfcmV2aXNpb24gPj0gU0FMX1ZFUlNJT05fQ09ERSgzLDIpKSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0VYVF9BRERSRVNTKHNlZywgYnVzLCBkZXZmbiwgcmVnKTsKIAkJbW9kZSA9IDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCiAJcmVzdWx0ID0gaWE2NF9zYWxfcGNpX2NvbmZpZ19yZWFkKGFkZHIsIG1vZGUsIGxlbiwgJmRhdGEpOwogCWlmIChyZXN1bHQgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MCw5ICs4MywxMSBAQAogCWlmICgoc2VnIHwgcmVnKSA8PSAyNTUpIHsKIAkJYWRkciA9IFBDSV9TQUxfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAwOwotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChzYWxfcmV2aXNpb24gPj0gU0FMX1ZFUlNJT05fQ09ERSgzLDIpKSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0VYVF9BRERSRVNTKHNlZywgYnVzLCBkZXZmbiwgcmVnKTsKIAkJbW9kZSA9IDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJlc3VsdCA9IGlhNjRfc2FsX3BjaV9jb25maWdfd3JpdGUoYWRkciwgbW9kZSwgbGVuLCB2YWx1ZSk7CiAJaWYgKHJlc3VsdCAhPSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKaW5kZXggMjU4MzFjNC4uMzA4ZTY1OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCkBAIC0xMTksNyArMTE5LDYgQEAKICAqIEFkZGl0aW9uYWxseSBub3RlIHRoYXQgdGhlIHN0cnVjdCBzbl9mbHVzaF9kZXZpY2Vfd2FyIGFsc28gaGFzIHRvIGJlCiAgKiByZW1vdmVkIGZyb20gYXJjaC9pYTY0L3NuL2luY2x1ZGUveHRhbGsvaHViZGV2LmgKICAqLwotc3RhdGljIHU4IHdhcl9pbXBsZW1lbnRlZCA9IDA7CiAKIHN0YXRpYyBzNjQgc25fZGV2aWNlX2ZpeHVwX3dhcih1NjQgbmFzaWQsIHU2NCB3aWRnZXQsIGludCBkZXZpY2UsCiAJCQkgICAgICAgc3RydWN0IHNuX2ZsdXNoX2RldmljZV9jb21tb24gKmNvbW1vbikKQEAgLTEyOCwxMSArMTI3LDggQEAKIAlzdHJ1Y3Qgc25fZmx1c2hfZGV2aWNlX3dhciAqZGV2X2VudHJ5OwogCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgaXNydiA9IHswLDAsMCwwfTsKIAotCWlmICghd2FyX2ltcGxlbWVudGVkKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlBST00gdmVyc2lvbiA8IDQuNTAgLS0gaW1wbGVtZW50aW5nIG9sZCAiCi0JCSAgICAgICAiUFJPTSBmbHVzaCBXQVJcbiIpOwotCQl3YXJfaW1wbGVtZW50ZWQgPSAxOwotCX0KKwlwcmludGtfb25jZShLRVJOX1dBUk5JTkcKKwkJIlBST00gdmVyc2lvbiA8IDQuNTAgLS0gaW1wbGVtZW50aW5nIG9sZCBQUk9NIGZsdXNoIFdBUlxuIik7CiAKIAl3YXJfbGlzdCA9IGt6YWxsb2MoREVWX1BFUl9XSURHRVQgKiBzaXplb2YoKndhcl9saXN0KSwgR0ZQX0tFUk5FTCk7CiAJQlVHX09OKCF3YXJfbGlzdCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCmluZGV4IDRjN2U3NDcuLjU1YWMzYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCkBAIC03ODYsMTcgKzc4NiwxOCBAQAogCQlicmVhazsKIAogCWNhc2UgU05fSFdQRVJGX0dFVF9PQkpfTk9ERToKLQkJaWYgKGEuc3ogIT0gc2l6ZW9mKHU2NCkgfHwgYS5hcmcgPCAwKSB7CisJCWkgPSBhLmFyZzsKKwkJaWYgKGEuc3ogIT0gc2l6ZW9mKHU2NCkgfHwgaSA8IDApIHsKIAkJCXIgPSAtRUlOVkFMOwogCQkJZ290byBlcnJvcjsKIAkJfQogCQlpZiAoKHIgPSBzbl9od3BlcmZfZW51bV9vYmplY3RzKCZub2JqLCAmb2JqcykpID09IDApIHsKLQkJCWlmIChhLmFyZyA+PSBub2JqKSB7CisJCQlpZiAoaSA+PSBub2JqKSB7CiAJCQkJciA9IC1FSU5WQUw7CiAJCQkJdmZyZWUob2Jqcyk7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KLQkJCWlmIChvYmpzWyhpID0gYS5hcmcpXS5pZCAhPSBhLmFyZykgeworCQkJaWYgKG9ianNbaV0uaWQgIT0gYS5hcmcpIHsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgbm9iajsgaSsrKSB7CiAJCQkJCWlmIChvYmpzW2ldLmlkID09IGEuYXJnKQogCQkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvS2NvbmZpZyBiL2FyY2gvbTMyci9LY29uZmlnCmluZGV4IGM0MTIzNGYuLjNhOTMxOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9LY29uZmlnCisrKyBiL2FyY2gvbTMyci9LY29uZmlnCkBAIC0xMSw2ICsxMSw5IEBACiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSU5JVF9BTExfUE9TU0lCTEUKKwlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAorCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgorCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCiAKIGNvbmZpZyBTQlVTCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggNTYwNDg0YS4uMTc3NzE2YiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0xLDExICsxLDExIEBACiAjCi0jIGxpbnV4L2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisjIGxpbnV4L2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKICMKICMgY3JlYXRlIGEgY29tcHJlc3NlZCB2bWxpbnV4IGltYWdlIGZyb20gdGhlIG9yaWdpbmFsIHZtbGludXgKICMKIAotdGFyZ2V0cwkJOj0gdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiBoZWFkLm8gbWlzYy5vIFwKLQkJICAgcGlnZ3kubyB2bWxpbnV4LmxkcwordGFyZ2V0cwkJOj0gdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgXAorCQkgICB2bWxpbnV4LmJpbi5sem1hIGhlYWQubyBtaXNjLm8gcGlnZ3kubyB2bWxpbnV4LmxkcwogCiBPQkpFQ1RTID0gJChvYmopL2hlYWQubyAkKG9iaikvbWlzYy5vCiAKQEAgLTI3LDYgKzI3LDEyIEBACiAkKG9iaikvdm1saW51eC5iaW4uZ3o6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiAKKyQob2JqKS92bWxpbnV4LmJpbi5iejI6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGJ6aXAyKQorCiskKG9iaikvdm1saW51eC5iaW4ubHptYTogJChvYmopL3ZtbGludXguYmluIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKKwogQ0ZMQUdTX21pc2MubyArPSAtZnBpYwogCiBpZmRlZiBDT05GSUdfTU1VCkBAIC0zNyw1ICs0Myw5IEBACiAKIE9CSkNPUFlGTEFHUyArPSAtUiAuZW1wdHlfemVyb19wYWdlCiAKLSQob2JqKS9waWdneS5vOiAkKG9iaikvdm1saW51eC5zY3IgJChvYmopL3ZtbGludXguYmluLmd6IEZPUkNFCitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0daSVApCT0gZ3oKK3N1ZmZpeF8kKENPTkZJR19LRVJORUxfQlpJUDIpCT0gYnoyCitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0xaTUEpCT0gbHptYQorCiskKG9iaikvcGlnZ3kubzogJChvYmopL3ZtbGludXguc2NyICQob2JqKS92bWxpbnV4LmJpbi4kKHN1ZmZpeC15KSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCBkMzk0MjkyLi4zNzBkNjA4IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtOSwxNDAgKzksNDkgQEAKICAqIEFkYXB0ZWQgZm9yIFNIIGJ5IFN0dWFydCBNZW5lZnksIEF1ZyAxOTk5CiAgKgogICogMjAwMy0wMi0xMjoJU3VwcG9ydCBNMzJSIGJ5IFRha2VvIFRha2FoYXNoaQotICogCQlUaGlzIGlzIGJhc2VkIG9uIGFyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0KIC8qCiAgKiBnemlwIGRlY2xhcmF0aW9ucwogICovCi0KLSNkZWZpbmUgT0YoYXJncykgIGFyZ3MKICNkZWZpbmUgU1RBVElDIHN0YXRpYwogCiAjdW5kZWYgbWVtc2V0CiAjdW5kZWYgbWVtY3B5CiAjZGVmaW5lIG1lbXplcm8ocywgbikgICAgIG1lbXNldCAoKHMpLCAwLCAobikpCiAKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgdWNoOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2g7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKLQotI2RlZmluZSBXU0laRSAweDgwMDAJCS8qIFdpbmRvdyBzaXplIG11c3QgYmUgYXQgbGVhc3QgMzJrLCAqLwotCQkJCS8qIGFuZCBhIHBvd2VyIG9mIHR3byAqLwotCi1zdGF0aWMgdWNoICppbmJ1ZjsJICAgICAvKiBpbnB1dCBidWZmZXIgKi8KLXN0YXRpYyB1Y2ggd2luZG93W1dTSVpFXTsgICAgLyogU2xpZGluZyB3aW5kb3cgYnVmZmVyICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnNpemUgPSAwOyAgLyogdmFsaWQgYnl0ZXMgaW4gaW5idWYgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnB0ciA9IDA7ICAgLyogaW5kZXggb2YgbmV4dCBieXRlIHRvIGJlIHByb2Nlc3NlZCBpbiBpbmJ1ZiAqLwotc3RhdGljIHVuc2lnbmVkIG91dGNudCA9IDA7ICAvKiBieXRlcyBpbiBvdXRwdXQgYnVmZmVyICovCi0KLS8qIGd6aXAgZmxhZyBieXRlICovCi0jZGVmaW5lIEFTQ0lJX0ZMQUcgICAweDAxIC8qIGJpdCAwIHNldDogZmlsZSBwcm9iYWJseSBBU0NJSSB0ZXh0ICovCi0jZGVmaW5lIENPTlRJTlVBVElPTiAweDAyIC8qIGJpdCAxIHNldDogY29udGludWF0aW9uIG9mIG11bHRpLXBhcnQgZ3ppcCBmaWxlICovCi0jZGVmaW5lIEVYVFJBX0ZJRUxEICAweDA0IC8qIGJpdCAyIHNldDogZXh0cmEgZmllbGQgcHJlc2VudCAqLwotI2RlZmluZSBPUklHX05BTUUgICAgMHgwOCAvKiBiaXQgMyBzZXQ6IG9yaWdpbmFsIGZpbGUgbmFtZSBwcmVzZW50ICovCi0jZGVmaW5lIENPTU1FTlQgICAgICAweDEwIC8qIGJpdCA0IHNldDogZmlsZSBjb21tZW50IHByZXNlbnQgKi8KLSNkZWZpbmUgRU5DUllQVEVEICAgIDB4MjAgLyogYml0IDUgc2V0OiBmaWxlIGlzIGVuY3J5cHRlZCAqLwotI2RlZmluZSBSRVNFUlZFRCAgICAgMHhDMCAvKiBiaXQgNiw3OiAgIHJlc2VydmVkICovCi0KLSNkZWZpbmUgZ2V0X2J5dGUoKSAgKGlucHRyIDwgaW5zaXplID8gaW5idWZbaW5wdHIrK10gOiBmaWxsX2luYnVmKCkpCi0KLS8qIERpYWdub3N0aWMgZnVuY3Rpb25zICovCi0jaWZkZWYgREVCVUcKLSMgIGRlZmluZSBBc3NlcnQoY29uZCxtc2cpIHtpZighKGNvbmQpKSBlcnJvcihtc2cpO30KLSMgIGRlZmluZSBUcmFjZSh4KSBmcHJpbnRmIHgKLSMgIGRlZmluZSBUcmFjZXYoeCkge2lmICh2ZXJib3NlKSBmcHJpbnRmIHggO30KLSMgIGRlZmluZSBUcmFjZXZ2KHgpIHtpZiAodmVyYm9zZT4xKSBmcHJpbnRmIHggO30KLSMgIGRlZmluZSBUcmFjZWMoYyx4KSB7aWYgKHZlcmJvc2UgJiYgKGMpKSBmcHJpbnRmIHggO30KLSMgIGRlZmluZSBUcmFjZWN2KGMseCkge2lmICh2ZXJib3NlPjEgJiYgKGMpKSBmcHJpbnRmIHggO30KLSNlbHNlCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKQotIyAgZGVmaW5lIFRyYWNlKHgpCi0jICBkZWZpbmUgVHJhY2V2KHgpCi0jICBkZWZpbmUgVHJhY2V2dih4KQotIyAgZGVmaW5lIFRyYWNlYyhjLHgpCi0jICBkZWZpbmUgVHJhY2VjdihjLHgpCi0jZW5kaWYKLQotc3RhdGljIGludCAgZmlsbF9pbmJ1Zih2b2lkKTsKLXN0YXRpYyB2b2lkIGZsdXNoX3dpbmRvdyh2b2lkKTsKIHN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKm0pOwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciAqaW5wdXRfZGF0YTsKLXN0YXRpYyBpbnQgaW5wdXRfbGVuOwotCi1zdGF0aWMgbG9uZyBieXRlc19vdXQgPSAwOwotc3RhdGljIHVjaCAqb3V0cHV0X2RhdGE7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBvdXRwdXRfcHRyID0gMDsKLQogI2luY2x1ZGUgIm0zMnJfc2lvLmMiCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX3B0cjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX2VuZF9wdHI7CiAKLSNkZWZpbmUgSEVBUF9TSVpFICAgICAgICAgICAgIDB4MTAwMDAKLQotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9pbmZsYXRlLmMiCi0KLXZvaWQqIG1lbXNldCh2b2lkKiBzLCBpbnQgYywgc2l6ZV90IG4pCisjaWZkZWYgQ09ORklHX0tFUk5FTF9CWklQMgorc3RhdGljIHZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pCiB7Ci0JaW50IGk7Ci0JY2hhciAqc3MgPSAoY2hhciopczsKKwljaGFyICpzcyA9IHM7CiAKLQlmb3IgKGk9MDtpPG47aSsrKSBzc1tpXSA9IGM7CisJd2hpbGUgKG4tLSkKKwkgICAgICAgCSpzcysrID0gYzsKIAlyZXR1cm4gczsKIH0KKyNlbmRpZgogCi12b2lkKiBtZW1jcHkodm9pZCogX19kZXN0LCBfX2NvbnN0IHZvaWQqIF9fc3JjLAotCQkJICAgIHNpemVfdCBfX24pCi17Ci0JaW50IGk7Ci0JY2hhciAqZCA9IChjaGFyICopX19kZXN0LCAqcyA9IChjaGFyICopX19zcmM7CisjaWZkZWYgQ09ORklHX0tFUk5FTF9HWklQCisjZGVmaW5lIEJPT1RfSEVBUF9TSVpFICAgICAgICAgICAgIDB4MTAwMDAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMiCisjZW5kaWYKIAotCWZvciAoaT0wO2k8X19uO2krKykgZFtpXSA9IHNbaV07Ci0JcmV0dXJuIF9fZGVzdDsKLX0KKyNpZmRlZiBDT05GSUdfS0VSTkVMX0JaSVAyCisjZGVmaW5lIEJPT1RfSEVBUF9TSVpFICAgICAgICAgICAgIDB4NDAwMDAwCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfYnVuemlwMi5jIgorI2VuZGlmCiAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmlsbCB0aGUgaW5wdXQgYnVmZmVyLiBUaGlzIGlzIGNhbGxlZCBvbmx5IHdoZW4gdGhlIGJ1ZmZlciBpcyBlbXB0eQotICogYW5kIGF0IGxlYXN0IG9uZSBieXRlIGlzIHJlYWxseSBuZWVkZWQuCi0gKi8KLXN0YXRpYyBpbnQgZmlsbF9pbmJ1Zih2b2lkKQotewotCWlmIChpbnNpemUgIT0gMCkgewotCQllcnJvcigicmFuIG91dCBvZiBpbnB1dCBkYXRhIik7Ci0JfQotCi0JaW5idWYgPSBpbnB1dF9kYXRhOwotCWluc2l6ZSA9IGlucHV0X2xlbjsKLQlpbnB0ciA9IDE7Ci0JcmV0dXJuIGluYnVmWzBdOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFdyaXRlIHRoZSBvdXRwdXQgd2luZG93IHdpbmRvd1swLi5vdXRjbnQtMV0gYW5kIHVwZGF0ZSBjcmMgYW5kIGJ5dGVzX291dC4KLSAqIChVc2VkIGZvciB0aGUgZGVjb21wcmVzc2VkIGRhdGEgb25seS4pCi0gKi8KLXN0YXRpYyB2b2lkIGZsdXNoX3dpbmRvdyh2b2lkKQotewotICAgIHVsZyBjID0gY3JjOyAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZSAqLwotICAgIHVuc2lnbmVkIG47Ci0gICAgdWNoICppbiwgKm91dCwgY2g7Ci0KLSAgICBpbiA9IHdpbmRvdzsKLSAgICBvdXQgPSAmb3V0cHV0X2RhdGFbb3V0cHV0X3B0cl07Ci0gICAgZm9yIChuID0gMDsgbiA8IG91dGNudDsgbisrKSB7Ci0JICAgIGNoID0gKm91dCsrID0gKmluKys7Ci0JICAgIGMgPSBjcmNfMzJfdGFiWygoaW50KWMgXiBjaCkgJiAweGZmXSBeIChjID4+IDgpOwotICAgIH0KLSAgICBjcmMgPSBjOwotICAgIGJ5dGVzX291dCArPSAodWxnKW91dGNudDsKLSAgICBvdXRwdXRfcHRyICs9ICh1bGcpb3V0Y250OwotICAgIG91dGNudCA9IDA7Ci19CisjaWZkZWYgQ09ORklHX0tFUk5FTF9MWk1BCisjZGVmaW5lIEJPT1RfSEVBUF9TSVpFICAgICAgICAgICAgIDB4MTAwMDAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6bWEuYyIKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBlcnJvcihjaGFyICp4KQogewpAQCAtMTUzLDIwICs2MiwyMCBAQAogCXdoaWxlKDEpOwkvKiBIYWx0ICovCiB9CiAKLS8qIHJldHVybiBkZWNvbXByZXNzZWQgc2l6ZSAqLwogdm9pZAogZGVjb21wcmVzc19rZXJuZWwoaW50IG1tdV9vbiwgdW5zaWduZWQgY2hhciAqemltYWdlX2RhdGEsCiAJCSAgdW5zaWduZWQgaW50IHppbWFnZV9sZW4sIHVuc2lnbmVkIGxvbmcgaGVhcCkKIHsKKwl1bnNpZ25lZCBjaGFyICppbnB1dF9kYXRhID0gemltYWdlX2RhdGE7CisJaW50IGlucHV0X2xlbiA9IHppbWFnZV9sZW47CisJdW5zaWduZWQgY2hhciAqb3V0cHV0X2RhdGE7CisKIAlvdXRwdXRfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopQ09ORklHX01FTU9SWV9TVEFSVCArIDB4MjAwMAogCQkrIChtbXVfb24gPyAweDgwMDAwMDAwIDogMCk7CiAJZnJlZV9tZW1fcHRyID0gaGVhcDsKLQlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgSEVBUF9TSVpFOwotCWlucHV0X2RhdGEgPSB6aW1hZ2VfZGF0YTsKLQlpbnB1dF9sZW4gPSB6aW1hZ2VfbGVuOworCWZyZWVfbWVtX2VuZF9wdHIgPSBmcmVlX21lbV9wdHIgKyBCT09UX0hFQVBfU0laRTsKIAotCW1ha2VjcmMoKTsKLQlwdXRzKCJVbmNvbXByZXNzaW5nIExpbnV4Li4uICIpOwotCWd1bnppcCgpOwotCXB1dHMoIk9rLCBib290aW5nIHRoZSBrZXJuZWwuXG4iKTsKKwlwdXRzKCJcbkRlY29tcHJlc3NpbmcgTGludXguLi4gIik7CisJZGVjb21wcmVzcyhpbnB1dF9kYXRhLCBpbnB1dF9sZW4sIE5VTEwsIE5VTEwsIG91dHB1dF9kYXRhLCBOVUxMLCBlcnJvcik7CisJcHV0cygiZG9uZS5cbkJvb3RpbmcgdGhlIGtlcm5lbC5cbiIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaAppbmRleCBkMDY5MzNiLi40MDEwZjFmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaApAQCAtMTYyLDYgKzE2MiwxMyBAQAogI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CiAjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKIAorI2RlZmluZSBpb3JlYWQ4IHJlYWQKKyNkZWZpbmUgaW9yZWFkMTYgcmVhZHcKKyNkZWZpbmUgaW9yZWFkMzIgcmVhZGwKKyNkZWZpbmUgaW93cml0ZTggd3JpdGViCisjZGVmaW5lIGlvd3JpdGUxNiB3cml0ZXcKKyNkZWZpbmUgaW93cml0ZTMyIHdyaXRlbAorCiAjZGVmaW5lIG1taW93YigpCiAKICNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpIGRvIHsgfSB3aGlsZSAoMCkgIC8qIE0zMlJfRklYTUUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDExNzc3ZjcuLjcyNWVkZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMSw5ICsxLDExIEBACiAjaWZuZGVmIF9BU01fTTMyUl9QQUdFX0gKICNkZWZpbmUgX0FTTV9NMzJSX1BBR0VfSAogCisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKwogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KICNkZWZpbmUgUEFHRV9TSElGVAkxMgotI2RlZmluZSBQQUdFX1NJWkUJKDFVTCA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX1NJWkUJKF9BQygxLCBVTCkgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCAxYTk5N2ZjLi44Mzk3YzI0IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xNDAsOCArMTQwLDYgQEAKICNkZWZpbmUgS1NUS19FSVAodHNrKSAgKCh0c2spLT50aHJlYWQubHIpCiAjZGVmaW5lIEtTVEtfRVNQKHRzaykgICgodHNrKS0+dGhyZWFkLnNwKQogCi0jZGVmaW5lIFRIUkVBRF9TSVpFICgyKlBBR0VfU0laRSkKLQogI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKIAogI2VuZGlmIC8qIF9BU01fTTMyUl9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA3MTU3ODE1Li5lZDI0MGI2IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNTUsNiArNTUsOCBAQAogCiAjZGVmaW5lIFBSRUVNUFRfQUNUSVZFCQkweDEwMDAwMDAwCiAKKyNkZWZpbmUgVEhSRUFEX1NJWkUgKFBBR0VfU0laRSA8PCAxKQorCiAvKgogICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICAqLwpAQCAtNzYsOCArNzgsNiBAQAogI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKICNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQogCi0jZGVmaW5lIFRIUkVBRF9TSVpFICgyKlBBR0VfU0laRSkKLQogLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCiB7CkBAIC0xMjUsMTcgKzEyNSw2IEBACiAJcmV0dXJuIHRpLT5mbGFncyA+PiBUSV9GTEFHX0ZBVUxUX0NPREVfU0hJRlQ7CiB9CiAKLSNlbHNlIC8qICFfX0FTU0VNQkxZX18gKi8KLQotI2RlZmluZSBUSFJFQURfU0laRQk4MTkyCi0KLS8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBBU00gKi8KLSNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPKHJlZykJR0VUX1RIUkVBRF9JTkZPIHJlZwotCS5tYWNybyBHRVRfVEhSRUFEX0lORk8gcmVnCi0JbGRpCVxyZWcsICMtVEhSRUFEX1NJWkUKLQlhbmQJXHJlZywgc3AKLQkuZW5kbQotCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUwppbmRleCA2MTJkMzViLi40MDM4Njk4IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCkBAIC0xMTgsNiArMTE4LDEzIEBACiAjZGVmaW5lIHJlc3VtZV9rZXJuZWwJCXJlc3RvcmVfYWxsCiAjZW5kaWYKIAorLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEFTTSAqLworI2RlZmluZSBHRVRfVEhSRUFEX0lORk8ocmVnKQlHRVRfVEhSRUFEX0lORk8gcmVnCisJLm1hY3JvIEdFVF9USFJFQURfSU5GTyByZWcKKwlsZGkJXHJlZywgIy1USFJFQURfU0laRQorCWFuZAlccmVnLCBzcAorCS5lbmRtCisKIEVOVFJZKHJldF9mcm9tX2ZvcmspCiAJcG9wCXIwCiAJYmwJc2NoZWR1bGVfdGFpbApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9oZWFkLlMgYi9hcmNoL20zMnIva2VybmVsL2hlYWQuUwppbmRleCAwYTcxOTQ0Li5hNDY2NTJkIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2hlYWQuUworKysgYi9hcmNoL20zMnIva2VybmVsL2hlYWQuUwpAQCAtMjY4LDEzICsyNjgsMTMgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTdGFjayBhcmVhCiAgKi8KLQkuc2VjdGlvbiAuc3BpCisJLnNlY3Rpb24gLmluaXQuZGF0YSwgImF3IgogCUFMSUdOCiAJLmdsb2JhbCBzcGlfc3RhY2tfdG9wCiAJLnplcm8JMTAyNAogc3BpX3N0YWNrX3RvcDoKIAotCS5zZWN0aW9uIC5zcHUKKwkuc2VjdGlvbiAuaW5pdC5kYXRhLCAiYXciCiAJQUxJR04KIAkuZ2xvYmFsIHNwdV9zdGFja190b3AKIAkuemVybwkxMDI0CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYyBiL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCmluZGV4IDIyNjI0YjUuLjcwMDU3MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCkBAIC0yMywxMiArMjMsNiBAQAogRVhQT1JUX1NZTUJPTChpb3VubWFwKTsKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKLS8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwotLyogRGVsYXkgbG9vcHMgKi8KLUVYUE9SVF9TWU1CT0woX191ZGVsYXkpOwotRVhQT1JUX1NZTUJPTChfX2RlbGF5KTsKLUVYUE9SVF9TWU1CT0woX19jb25zdF91ZGVsYXkpOwotCiBFWFBPUlRfU1lNQk9MKHN0cm5jcHlfZnJvbV91c2VyKTsKIEVYUE9SVF9TWU1CT0woX19zdHJuY3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKGNsZWFyX3VzZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYyBiL2FyY2gvbTMyci9rZXJuZWwvc21wLmMKaW5kZXggMWI3NTk4ZS4uMzFjZWYyMCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NtcC5jCkBAIC0xNyw2ICsxNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KQEAgLTgwNSw3ICs4MDYsNyBAQAogCiAJaWYgKG1hc2sgJiB+cGh5c2lkc19jb2VyY2UocGh5c19jcHVfcHJlc2VudF9tYXApKQogCQlCVUcoKTsKLQlpZiAoaXBpX251bSA+PSBOUl9JUElTKQorCWlmIChpcGlfbnVtID49IE5SX0lQSVMgfHwgaXBpX251bSA8IDApCiAJCUJVRygpOwogCiAJbWFzayA8PD0gSVBJX1NISUZUOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMgYi9hcmNoL20zMnIva2VybmVsL3RpbWUuYwppbmRleCBiYTYxYzRjLi45Y2VkY2VmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL20zMnIva2VybmVsL3RpbWUuYwpAQCAtMzMsNiArMzMsMTUgQEAKIAogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KIAorI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQ01PUykgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9DTU9TX01PRFVMRSkKKy8qIHRoaXMgbmVlZHMgYSBiZXR0ZXIgaG9tZSAqLworREVGSU5FX1NQSU5MT0NLKHJ0Y19sb2NrKTsKKworI2lmZGVmIENPTkZJR19SVENfRFJWX0NNT1NfTU9EVUxFCitFWFBPUlRfU1lNQk9MKHJ0Y19sb2NrKTsKKyNlbmRpZgorI2VuZGlmICAvKiBwYy1zdHlsZSAnQ01PUycgUlRDIHN1cHBvcnQgKi8KKwogI2lmZGVmIENPTkZJR19TTVAKIGV4dGVybiB2b2lkIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQodm9pZCk7CiAjZW5kaWYKQEAgLTY2LDcgKzc1LDcgQEAKIAkJY291bnQgPSAwOwogCiAJY291bnQgPSAobGF0Y2ggLSBjb3VudCkgKiBUSUNLX1NJWkU7Ci0JZWxhcHNlZF90aW1lID0gKGNvdW50ICsgbGF0Y2ggLyAyKSAvIGxhdGNoOworCWVsYXBzZWRfdGltZSA9IERJVl9ST1VORF9DTE9TRVNUKGNvdW50LCBsYXRjaCk7CiAJLyogTk9URTogTEFUQ0ggaXMgZXF1YWwgdG8gdGhlICJpbnRlcnZhbCIgdmFsdWUgKD0gcmVsb2FkIGNvdW50KS4gKi8KIAogI2Vsc2UgLyogQ09ORklHX1NNUCAqLwpAQCAtODQsNyArOTMsNyBAQAogCXBfY291bnQgPSBjb3VudDsKIAogCWNvdW50ID0gKGxhdGNoIC0gY291bnQpICogVElDS19TSVpFOwotCWVsYXBzZWRfdGltZSA9IChjb3VudCArIGxhdGNoIC8gMikgLyBsYXRjaDsKKwllbGFwc2VkX3RpbWUgPSBESVZfUk9VTkRfQ0xPU0VTVChjb3VudCwgbGF0Y2gpOwogCS8qIE5PVEU6IExBVENIIGlzIGVxdWFsIHRvIHRoZSAiaW50ZXJ2YWwiIHZhbHVlICg9IHJlbG9hZCBjb3VudCkuICovCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogI2VsaWYgZGVmaW5lZChDT05GSUdfQ0hJUF9NMzIzMTApCkBAIC0yMDIsNyArMjExLDcgQEAKIAogCQlidXNfY2xvY2sgPSBib290X2NwdV9kYXRhLmJ1c19jbG9jazsKIAkJZGl2aWRlID0gYm9vdF9jcHVfZGF0YS50aW1lcl9kaXZpZGU7Ci0JCWxhdGNoID0gKGJ1c19jbG9jay9kaXZpZGUgKyBIWiAvIDIpIC8gSFo7CisJCWxhdGNoID0gRElWX1JPVU5EX0NMT1NFU1QoYnVzX2Nsb2NrL2RpdmlkZSwgSFopOwogCiAJCXByaW50aygiVGltZXIgc3RhcnQgOiBsYXRjaCA9ICVsZFxuIiwgbGF0Y2gpOwogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3RyYXBzLmMgYi9hcmNoL20zMnIva2VybmVsL3RyYXBzLmMKaW5kZXggMDNiMTRlNS4uZmJkMTA5MCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvdHJhcHMuYwpAQCAtMTA0LDggKzEwNCw4IEBACiAJZWl0X3ZlY3RvclsxODZdID0gKHVuc2lnbmVkIGxvbmcpc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0OwogCWVpdF92ZWN0b3JbMTg3XSA9ICh1bnNpZ25lZCBsb25nKXNtcF9pcGlfdGltZXJfaW50ZXJydXB0OwogCWVpdF92ZWN0b3JbMTg4XSA9ICh1bnNpZ25lZCBsb25nKXNtcF9mbHVzaF9jYWNoZV9hbGxfaW50ZXJydXB0OwotCWVpdF92ZWN0b3JbMTg5XSA9ICh1bnNpZ25lZCBsb25nKXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQ7Ci0JZWl0X3ZlY3RvclsxOTBdID0gMDsKKwllaXRfdmVjdG9yWzE4OV0gPSAwOwkvKiBDUFVfQk9PVF9JUEkgKi8KKwllaXRfdmVjdG9yWzE5MF0gPSAodW5zaWduZWQgbG9uZylzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0OwogCWVpdF92ZWN0b3JbMTkxXSA9IDA7CiAjZW5kaWYKIAlfZmx1c2hfY2FjaGVfY29weWJhY2tfYWxsKCk7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggZGU1ZTIxYy4uN2RhOTRlYSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogCiBPVVRQVVRfQVJDSChtMzJyKQogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCkBAIC00MCw4MyArNDEsMjQgQEAKICNlbmRpZgogICBfZXRleHQgPSAuOwkJCS8qIEVuZCBvZiB0ZXh0IHNlY3Rpb24gKi8KIAotICAuID0gQUxJR04oMTYpOwkJLyogRXhjZXB0aW9uIHRhYmxlICovCi0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47CisgIEVYQ0VQVElPTl9UQUJMRSgxNikKKyAgTk9URVMKIAogICBST0RBVEEKLQotICAvKiB3cml0ZWFibGUgKi8KLSAgLmRhdGEgOiB7CQkJLyogRGF0YSAqLwotCSooLnNwdSkKLQkqKC5zcGkpCi0JREFUQV9EQVRBCi0JQ09OU1RSVUNUT1JTCi0JfQotCi0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19ub3NhdmVfYmVnaW4gPSAuOwotICAuZGF0YV9ub3NhdmUgOiB7ICooLmRhdGEubm9zYXZlKSB9Ci0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19ub3NhdmVfZW5kID0gLjsKLQotICAuID0gQUxJR04oMzIpOwotICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsgKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgfQotCisgIFJXX0RBVEFfU0VDVElPTigzMiwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKICAgX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCiAKLSAgLiA9IEFMSUdOKDgxOTIpOwkJLyogaW5pdF90YXNrICovCi0gIC5kYXRhLmluaXRfdGFzayA6IHsgKiguZGF0YS5pbml0X3Rhc2spIH0KLQogICAvKiB3aWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KLSAgLiA9IEFMSUdOKDQwOTYpOwkJLyogSW5pdCBjb2RlIGFuZCBkYXRhICovCisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwkJLyogSW5pdCBjb2RlIGFuZCBkYXRhICovCiAgIF9faW5pdF9iZWdpbiA9IC47Ci0gIC5pbml0LnRleHQgOiB7Ci0JX3Npbml0dGV4dCA9IC47Ci0JSU5JVF9URVhUCi0JX2Vpbml0dGV4dCA9IC47Ci0gIH0KLSAgLmluaXQuZGF0YSA6IHsgSU5JVF9EQVRBIH0KLSAgLiA9IEFMSUdOKDE2KTsKLSAgX19zZXR1cF9zdGFydCA9IC47Ci0gIC5pbml0LnNldHVwIDogeyAqKC5pbml0LnNldHVwKSB9Ci0gIF9fc2V0dXBfZW5kID0gLjsKLSAgX19pbml0Y2FsbF9zdGFydCA9IC47Ci0gIC5pbml0Y2FsbC5pbml0IDogewotCUlOSVRDQUxMUwotICB9Ci0gIF9faW5pdGNhbGxfZW5kID0gLjsKLSAgX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotICAuY29uX2luaXRjYWxsLmluaXQgOiB7ICooLmNvbl9pbml0Y2FsbC5pbml0KSB9Ci0gIF9fY29uX2luaXRjYWxsX2VuZCA9IC47Ci0gIFNFQ1VSSVRZX0lOSVQKLSAgLiA9IEFMSUdOKDQpOwotICBfX2FsdF9pbnN0cnVjdGlvbnMgPSAuOwotICAuYWx0aW5zdHJ1Y3Rpb25zIDogeyAqKC5hbHRpbnN0cnVjdGlvbnMpIH0KLSAgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCA9IC47Ci0gIC5hbHRpbnN0cl9yZXBsYWNlbWVudCA6IHsgKiguYWx0aW5zdHJfcmVwbGFjZW1lbnQpIH0KLSAgLyogLmV4aXQudGV4dCBpcyBkaXNjYXJkIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsIHRvIGRlYWwgd2l0aCByZWZlcmVuY2VzCi0gICAgIGZyb20gLmFsdGluc3RydWN0aW9ucyBhbmQgLmVoX2ZyYW1lICovCi0gIC5leGl0LnRleHQgOiB7IEVYSVRfVEVYVCB9Ci0gIC5leGl0LmRhdGEgOiB7IEVYSVRfREFUQSB9Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX2luaXRyYW1mc19zdGFydCA9IC47Ci0gIC5pbml0LnJhbWZzIDogeyAqKC5pbml0LnJhbWZzKSB9Ci0gIF9faW5pdHJhbWZzX2VuZCA9IC47Ci0jZW5kaWYKLQotICBQRVJDUFUoNDA5NikKLSAgLiA9IEFMSUdOKDQwOTYpOworICBJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCisgIElOSVRfREFUQV9TRUNUSU9OKDE2KQorICBQRVJDUFUoUEFHRV9TSVpFKQorICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2VuZCA9IC47CiAgIC8qIGZyZWVkIGFmdGVyIGluaXQgZW5kcyBoZXJlICovCiAKLSAgX19ic3Nfc3RhcnQgPSAuOwkJLyogQlNTICovCi0gIC5ic3MgOiB7ICooLmJzcykgfQotICAuID0gQUxJR04oNCk7Ci0gIF9fYnNzX3N0b3AgPSAuOworICBCU1NfU0VDVElPTigwLCAwLCA0KQogCiAgIF9lbmQgPSAuIDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9kZWxheS5jIGIvYXJjaC9tMzJyL2xpYi9kZWxheS5jCmluZGV4IGNlZDU0OWIuLjk0MGY0ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9saWIvZGVsYXkuYworKysgYi9hcmNoL20zMnIvbGliL2RlbGF5LmMKQEAgLTEyMiw0ICsxMjIsOCBAQAogewogCV9fY29uc3RfdWRlbGF5KG5zZWNzICogMHgwMDAwNSk7ICAvKiAyKiozMiAvIDEwMDAwMDAwMDAgKHJvdW5kZWQgdXApICovCiB9CisKK0VYUE9SVF9TWU1CT0woX19kZWxheSk7CitFWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKK0VYUE9SVF9TWU1CT0woX191ZGVsYXkpOwogRVhQT1JUX1NZTUJPTChfX25kZWxheSk7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMgYi9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMKaW5kZXggYjdhNzhhZC4uNWQyODU4ZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYwpAQCAtMzIsNiArMzIsOSBAQAogfSBtZW1fcHJvZl90Owogc3RhdGljIG1lbV9wcm9mX3QgbWVtX3Byb2ZbTUFYX05VTU5PREVTXTsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2VuZDsKKwogc3RhdGljIHZvaWQgX19pbml0IG1lbV9wcm9mX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgaG9sZXMsIGZyZWVfcGZuOwpAQCAtNDIsNyArNDUsNyBAQAogCS8qIE5vZGUjMCBTRFJBTSAqLwogCW1wID0gJm1lbV9wcm9mWzBdOwogCW1wLT5zdGFydF9wZm4gPSBQRk5fVVAoQ09ORklHX01FTU9SWV9TVEFSVCk7Ci0JbXAtPnBhZ2VzID0gUEZOX0RPV04oQ09ORklHX01FTU9SWV9TSVpFKTsKKwltcC0+cGFnZXMgPSBQRk5fRE9XTihtZW1vcnlfZW5kIC0gbWVtb3J5X3N0YXJ0KTsKIAltcC0+aG9sZXMgPSAwOwogCW1wLT5mcmVlX3BmbiA9IFBGTl9VUChfX3BhKF9lbmQpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL21tdS5TIGIvYXJjaC9tMzJyL21tL21tdS5TCmluZGV4IDQ5YTZkMTYuLmU5NDkxYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9tbXUuUworKysgYi9hcmNoL20zMnIvbW0vbW11LlMKQEAgLTE1MCw5ICsxNTAsMTMgQEAKIAogCTsgcG1kID0gcG1kX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCWxkCXIzLCBAcjMJCQk7IHIzOiBwbWQgZGF0YQotCWxkaQlyMiwgIy00MDk2CiAJYmVxeglyMywgM2YJCQk7IHBtZF9ub25lKCpwbWQpID8KIAorCWFuZDMJcjIsIHIzLCAjMHhmZmYKKwlhZGQzCXIyLCByMiwgIy0zNTUJCTsgX0tFUk5QR19UQUJMRSg9MHgxNjMpCisJYm5leglyMiwgM2YJCQk7IHBtZF9iYWQoKnBtZCkgPworCWxkaQlyMiwgIy00MDk2CisKIAk7IHB0ZSA9IHB0ZV9vZmZzZXQocG1kLCBhZGRyZXNzKTsKIAlhbmQJcjIsIHIzCQkJOyByMjogcHRlIGJhc2UgYWRkcgogCXNybDMJcjMsIHIwLCAjMTAKQEAgLTI2Myw5ICsyNjcsOSBAQAogCWxkCXIxLCBAcjMJCQk7IHIxOiBwbWQKIAliZXF6CXIxLCAzZgkJCTsgcG1kX25vbmUoKnBtZCkgPwogOwotCWFuZDMJcjEsIHIxLCAjMHhlZmYKLQlsZGkJcjQsICM2MTEJCTsgX0tFUk5QR19UQUJMRSg9NjExKQotCWJuZQlyMSwgcjQsIDNmCQk7ICFwbWRfYmFkKCpwbWQpID8KKwlhbmQzCXIxLCByMSwgIzB4M2ZmCisJbGRpCXI0LCAjMHgxNjMJCTsgX0tFUk5QR19UQUJMRSg9MHgxNjMpCisJYm5lCXIxLCByNCwgM2YJCTsgcG1kX2JhZCgqcG1kKSA/CiAKIAkuZmlsbGluc24KIDQ6CmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IDI5ZGQ4NDguLmVjZGMxOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC01NjEsNyArNTYxLDcgQEAKIAogY29uZmlnIE1WTUUxNDdfU0NDCiAJYm9vbCAiU0NDIHN1cHBvcnQgZm9yIE1WTUUxNDcgc2VyaWFsIHBvcnRzIgotCWRlcGVuZHMgb24gTVZNRTE0NworCWRlcGVuZHMgb24gTVZNRTE0NyAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBzZXJpYWwgcG9ydHMgb24gdGhlIE1vdG9yb2xhIE1WTUUxNDcKIAkgIGJvYXJkcy4gIEV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMgc2hvdWxkIHNheSBZIGhlcmUuCkBAIC01NzYsMTQgKzU3NiwxNCBAQAogCiBjb25maWcgTVZNRTE2Ml9TQ0MKIAlib29sICJTQ0Mgc3VwcG9ydCBmb3IgTVZNRTE2MiBzZXJpYWwgcG9ydHMiCi0JZGVwZW5kcyBvbiBNVk1FMTZ4CisJZGVwZW5kcyBvbiBNVk1FMTZ4ICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgTW90b3JvbGEgTVZNRTE2MiBhbmQKIAkgIDE3MiBib2FyZHMuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkgWSBoZXJlLgogCiBjb25maWcgQlZNRTYwMDBfU0NDCiAJYm9vbCAiU0NDIHN1cHBvcnQgZm9yIEJWTUU2MDAwIHNlcmlhbCBwb3J0cyIKLQlkZXBlbmRzIG9uIEJWTUU2MDAwCisJZGVwZW5kcyBvbiBCVk1FNjAwMCAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBzZXJpYWwgcG9ydHMgb24gdGhlIEJWTUU0MDAwIGFuZCBCVk1FNjAwMAogCSAgYm9hcmRzIGZyb20gQlZNIEx0ZC4gIEV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMgc2hvdWxkIHNheQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2hhcmRpcnFfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmgKaW5kZXggNTU0ZjY1Yi4uMzk0ZWU5NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2hhcmRpcnFfbW0uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaGFyZGlycV9tbS5oCkBAIC0xLDggKzEsMTYgQEAKICNpZm5kZWYgX19NNjhLX0hBUkRJUlFfSAogI2RlZmluZSBfX002OEtfSEFSRElSUV9ICiAKLSNkZWZpbmUgSEFSRElSUV9CSVRTCTgKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KKy8qIGVudHJ5LlMgaXMgc2Vuc2l0aXZlIHRvIHRoZSBvZmZzZXRzIG9mIHRoZXNlIGZpZWxkcyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7CisKKyNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLworCisjZGVmaW5lIEhBUkRJUlFfQklUUwk4CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA1OTRlZTBlLi45YTg4NzZmIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNDUsMjUgKzQ1LDI1IEBACiAJREVGSU5FKFRIUkVBRF9GUFNUQVRFLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgZnBzdGF0ZSkpOwogCiAJLyogb2Zmc2V0cyBpbnRvIHRoZSBwdF9yZWdzICovCi0JREVGSU5FKFBUX0QwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDApKTsKLQlERUZJTkUoUFRfT1JJR19EMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIG9yaWdfZDApKTsKLQlERUZJTkUoUFRfRDEsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMSkpOwotCURFRklORShQVF9EMiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQyKSk7Ci0JREVGSU5FKFBUX0QzLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDMpKTsKLQlERUZJTkUoUFRfRDQsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNCkpOwotCURFRklORShQVF9ENSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ1KSk7Ci0JREVGSU5FKFBUX0EwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTApKTsKLQlERUZJTkUoUFRfQTEsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMSkpOwotCURFRklORShQVF9BMiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEyKSk7Ci0JREVGSU5FKFBUX1BDLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpKTsKLQlERUZJTkUoUFRfU1IsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzcikpOworCURFRklORShQVF9PRkZfRDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMCkpOworCURFRklORShQVF9PRkZfT1JJR19EMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIG9yaWdfZDApKTsKKwlERUZJTkUoUFRfT0ZGX0QxLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDEpKTsKKwlERUZJTkUoUFRfT0ZGX0QyLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDIpKTsKKwlERUZJTkUoUFRfT0ZGX0QzLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDMpKTsKKwlERUZJTkUoUFRfT0ZGX0Q0LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDQpKTsKKwlERUZJTkUoUFRfT0ZGX0Q1LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDUpKTsKKwlERUZJTkUoUFRfT0ZGX0EwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTApKTsKKwlERUZJTkUoUFRfT0ZGX0ExLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTEpKTsKKwlERUZJTkUoUFRfT0ZGX0EyLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTIpKTsKKwlERUZJTkUoUFRfT0ZGX1BDLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpKTsKKwlERUZJTkUoUFRfT0ZGX1NSLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3IpKTsKIAogI2lmZGVmIENPTkZJR19DT0xERklSRQogCS8qIGJpdGZpZWxkcyBhcmUgYSBiaXQgZGlmZmljdWx0ICovCi0JREVGSU5FKFBUX0ZPUk1BVFZFQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNyKSAtIDIpOworCURFRklORShQVF9PRkZfRk9STUFUVkVDLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3IpIC0gMik7CiAjZWxzZQogCS8qIGJpdGZpZWxkcyBhcmUgYSBiaXQgZGlmZmljdWx0ICovCi0JREVGSU5FKFBUX1ZFQ1RPUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSArIDQpOworCURFRklORShQVF9PRkZfVkVDVE9SLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpICsgNCk7CiAjZW5kaWYKIAogCS8qIHNpZ25hbCBkZWZpbmVzICovCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9lbnRyeS5TCmluZGV4IGY1NmZhYTUuLjU2MDQzYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9lbnRyeS5TCkBAIC00Niw3ICs0Niw3IEBACiBFTlRSWShidXNlcnIpCiAJU0FWRV9BTEwKIAltb3ZlcQkjLTEsJWQwCi0JbW92ZWwJJWQwLCVzcEAoUFRfT1JJR19EMCkKKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfT1JJR19EMCkKIAltb3ZlbAklc3AsJXNwQC0gCQkvKiBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50ICovCiAJanNyCWJ1c2Vycl9jCiAJYWRkcWwJIzQsJXNwCkBAIC01NSw3ICs1NSw3IEBACiBFTlRSWSh0cmFwKQogCVNBVkVfQUxMCiAJbW92ZXEJIy0xLCVkMAotCW1vdmVsCSVkMCwlc3BAKFBUX09SSUdfRDApCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX09SSUdfRDApCiAJbW92ZWwJJXNwLCVzcEAtIAkJLyogc3RhY2sgZnJhbWUgcG9pbnRlciBhcmd1bWVudCAqLwogCWpzcgl0cmFwX2MKIAlhZGRxbAkjNCwlc3AKQEAgLTY3LDcgKzY3LDcgQEAKIEVOVFJZKGRiZ2ludGVycnVwdCkKIAlTQVZFX0FMTAogCW1vdmVxCSMtMSwlZDAKLQltb3ZlbAklZDAsJXNwQChQVF9PUklHX0QwKQorCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9PUklHX0QwKQogCW1vdmVsCSVzcCwlc3BALSAJCS8qIHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQgKi8KIAlqc3IJZGJnaW50ZXJydXB0X2MKIAlhZGRxbAkjNCwlc3AKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L21tL2luaXQuYyBiL2FyY2gvbTY4a25vbW11L21tL2luaXQuYwppbmRleCBiMTcwM2M2Li5mMzIzNmQwIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9tbS9pbml0LmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAkJcGFnZXMrKzsKIAl9Ci0JcHJpbnRrIChLRVJOX05PVElDRSAiRnJlZWluZyBpbml0cmQgbWVtb3J5OiAlZGsgZnJlZWRcbiIsIHBhZ2VzKTsKKwlwcmludGsgKEtFUk5fTk9USUNFICJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVkayBmcmVlZFxuIiwgcGFnZXMgKiAoUEFHRV9TSVpFIC8gMTAyNCkpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNmUvY29uZmlnLmMKaW5kZXggMGY0MWJhOC4uOTQyMzk3OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNmUvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNmUvY29uZmlnLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxhc20vbWNmc2ltLmg+CiAjaW5jbHVkZSA8YXNtL21jZnVhcnQuaD4KICNpbmNsdWRlIDxhc20vbWNmZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL21jZnVhcnQuaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMKaW5kZXggYjFhZWY3Mi4uOWQ4MGQyYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TCkBAIC0zOSwxNyArMzksMTcgQEAKIC5nbG9ibCBpbnRoYW5kbGVyNwogCiBiYWRzeXM6Ci0JbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9EMCkKKwltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX09GRl9EMCkKIAlqcmEJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIGRvX3RyYWNlOgotCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfRDApCS8qIG5lZWRlZCBmb3Igc3RyYWNlKi8KKwltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX09GRl9EMCkJLyogbmVlZGVkIGZvciBzdHJhY2UqLwogCXN1YnFsCSM0LCVzcAogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCiAJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKIAlhZGRxbAkjNCwlc3AKLQltb3ZlbAklc3BAKFBUX09SSUdfRDApLCVkMQorCW1vdmVsCSVzcEAoUFRfT0ZGX09SSUdfRDApLCVkMQogCW1vdmVsCSMtRU5PU1lTLCVkMAogCWNtcGwJI05SX3N5c2NhbGxzLCVkMQogCWpjYwkxZgpAQCAtNTcsNyArNTcsNyBAQAogCWxlYQlzeXNfY2FsbF90YWJsZSwgJWEwCiAJamJzcgklYTBAKCVkMSkKIAotMToJbW92ZWwJJWQwLCVzcEAoUFRfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KKzE6CW1vdmVsCSVkMCwlc3BAKFBUX09GRl9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLwogCXN1YnFsCSM0LCVzcAkJCS8qIGR1bW15IHJldHVybiBhZGRyZXNzICovCiAJU0FWRV9TV0lUQ0hfU1RBQ0sKIAlqYnNyCXN5c2NhbGxfdHJhY2UKQEAgLTc1LDcgKzc1LDcgQEAKIAlqYnNyICAgIHNldF9lc3AwCiAJYWRkcWwgICAjNCwlc3AKIAotCW1vdmVsCSVzcEAoUFRfT1JJR19EMCksJWQwCisJbW92ZWwJJXNwQChQVF9PRkZfT1JJR19EMCksJWQwCiAKIAltb3ZlbAklc3AsJWQxCQkJLyogZ2V0IHRocmVhZF9pbmZvIHBvaW50ZXIgKi8KIAlhbmRsCSMtVEhSRUFEX1NJWkUsJWQxCkBAIC04OCwxMCArODgsMTAgQEAKIAlsZWEJc3lzX2NhbGxfdGFibGUsJWEwCiAJbW92ZWwJJWEwQCglZDApLCAlYTAKIAlqYnNyCSVhMEAKLQltb3ZlbAklZDAsJXNwQChQVF9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSovCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlKi8KIAogcmV0X2Zyb21fZXhjZXB0aW9uOgotCWJ0c3QJIzUsJXNwQChQVF9TUikJCS8qIGNoZWNrIGlmIHJldHVybmluZyB0byBrZXJuZWwqLworCWJ0c3QJIzUsJXNwQChQVF9PRkZfU1IpCQkvKiBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsKi8KIAlqZXEJTHVzZXJfcmV0dXJuCQkvKiBpZiBzbywgc2tpcCByZXNjaGVkLCBzaWduYWxzKi8KIAogTGtlcm5lbF9yZXR1cm46CkBAIC0xMzMsNyArMTMzLDcgQEAKICAqLwogaW50aGFuZGxlcjE6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZAkjMHgzZmYsICVkMAogCiAJbW92ZWwJJXNwLCVzcEAtCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogaW50aGFuZGxlcjI6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZAkjMHgzZmYsICVkMAogCiAJbW92ZWwJJXNwLCVzcEAtCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogaW50aGFuZGxlcjM6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZAkjMHgzZmYsICVkMAogCiAJbW92ZWwJJXNwLCVzcEAtCkBAIC0xNjYsNyArMTY2LDcgQEAKIAogaW50aGFuZGxlcjQ6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZAkjMHgzZmYsICVkMAogCiAJbW92ZWwJJXNwLCVzcEAtCkBAIC0xNzcsNyArMTc3LDcgQEAKIAogaW50aGFuZGxlcjU6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZAkjMHgzZmYsICVkMAogCiAJbW92ZWwJJXNwLCVzcEAtCkBAIC0xODgsNyArMTg4LDcgQEAKIAogaW50aGFuZGxlcjY6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZAkjMHgzZmYsICVkMAogCiAJbW92ZWwJJXNwLCVzcEAtCkBAIC0xOTksNyArMTk5LDcgQEAKIAogaW50aGFuZGxlcjc6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZAkjMHgzZmYsICVkMAogCiAJbW92ZWwJJXNwLCVzcEAtCkBAIC0yMTAsNyArMjEwLDcgQEAKIAogaW50aGFuZGxlcjoKIAlTQVZFX0FMTAotCW1vdmV3CSVzcEAoUFRfVkVDVE9SKSwgJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfVkVDVE9SKSwgJWQwCiAJYW5kCSMweDNmZiwgJWQwCiAKIAltb3ZlbAklc3AsJXNwQC0KQEAgLTIyNCw3ICsyMjQsNyBAQAogMjoKIAlSRVNUT1JFX0FMTAogMToKLQltb3ZlYgklc3BAKFBUX1NSKSwgJWQwCisJbW92ZWIJJXNwQChQVF9PRkZfU1IpLCAlZDAKIAlhbmQJIzcsICVkMAogCWpoaQkyYgogCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUwppbmRleCA1NWRmZWZlLi42ZDM0NjBhIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMKQEAgLTM1LDE3ICszNSwxNyBAQAogLmdsb2JsIGludGhhbmRsZXIKIAogYmFkc3lzOgotCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfRDApCisJbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9PRkZfRDApCiAJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgogCiBkb190cmFjZToKLQltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX0QwKQkvKiBuZWVkZWQgZm9yIHN0cmFjZSovCisJbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9PRkZfRDApIC8qIG5lZWRlZCBmb3Igc3RyYWNlKi8KIAlzdWJxbAkjNCwlc3AKIAlTQVZFX1NXSVRDSF9TVEFDSwogCWpic3IJc3lzY2FsbF90cmFjZQogCVJFU1RPUkVfU1dJVENIX1NUQUNLCiAJYWRkcWwJIzQsJXNwCi0JbW92ZWwJJXNwQChQVF9PUklHX0QwKSwlZDEKKwltb3ZlbAklc3BAKFBUX09GRl9PUklHX0QwKSwlZDEKIAltb3ZlbAkjLUVOT1NZUywlZDAKIAljbXBsCSNOUl9zeXNjYWxscywlZDEKIAlqY2MJMWYKQEAgLTUzLDcgKzUzLDcgQEAKIAlsZWEJc3lzX2NhbGxfdGFibGUsICVhMAogCWpic3IJJWEwQCglZDEpCiAKLTE6CW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCisxOgltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLwogCXN1YnFsCSM0LCVzcAkJCS8qIGR1bW15IHJldHVybiBhZGRyZXNzICovCiAJU0FWRV9TV0lUQ0hfU1RBQ0sKIAlqYnNyCXN5c2NhbGxfdHJhY2UKQEAgLTc5LDEwICs3OSwxMCBAQAogCWxlYQlzeXNfY2FsbF90YWJsZSwlYTAKIAltb3ZlbAklYTBAKCVkMCksICVhMAogCWpic3IJJWEwQAotCW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlKi8KKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSovCiAKIHJldF9mcm9tX2V4Y2VwdGlvbjoKLQlidHN0CSM1LCVzcEAoUFRfU1IpCQkvKiBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsKi8KKwlidHN0CSM1LCVzcEAoUFRfT0ZGX1NSKQkvKiBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsKi8KIAlqZXEJTHVzZXJfcmV0dXJuCQkvKiBpZiBzbywgc2tpcCByZXNjaGVkLCBzaWduYWxzKi8KIAogTGtlcm5lbF9yZXR1cm46CkBAIC0xMjQsNyArMTI0LDcgQEAKICAqLwogaW50aGFuZGxlcjoKIAlTQVZFX0FMTAotCW1vdmV3CSVzcEAoUFRfVkVDVE9SKSwgJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfVkVDVE9SKSwgJWQwCiAJYW5kLmwJIzB4M2ZmLCAlZDAKIAlsc3IubCAgICMweDAyLCAgJWQwCiAKQEAgLTEzOSw3ICsxMzksNyBAQAogMjoKIAlSRVNUT1JFX0FMTAogMToKLQltb3ZlYgklc3BAKFBUX1NSKSwgJWQwCisJbW92ZWIJJXNwQChQVF9PRkZfU1IpLCAlZDAKIAlhbmQJIzcsICVkMAogCWpoaQkyYgogCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gZG8gc29mdHdhcmUgaW50ZXJydXB0cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKaW5kZXggM2I0NzFjMC4uZGQ3ZDU5MSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9lbnRyeS5TCkBAIC04MSwxMSArODEsMTEgQEAKIAogCW1vdmVsCSVkMywlYTAKIAlqYnNyCSVhMEAKLQltb3ZlbAklZDAsJXNwQChQVF9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLworCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9EMCkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCiAJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgogMToKLQltb3ZlbAkjLUVOT1NZUywlZDIJCS8qIHN0cmFjZSBuZWVkcyAtRU5PU1lTIGluIFBUX0QwICovCi0JbW92ZWwJJWQyLFBUX0QwKCVzcCkJCS8qIG9uIHN5c2NhbGwgZW50cnkgKi8KKwltb3ZlbAkjLUVOT1NZUywlZDIJCS8qIHN0cmFjZSBuZWVkcyAtRU5PU1lTIGluIFBUX09GRl9EMCAqLworCW1vdmVsCSVkMixQVF9PRkZfRDAoJXNwKQkvKiBvbiBzeXNjYWxsIGVudHJ5ICovCiAJc3VicWwJIzQsJXNwCiAJU0FWRV9TV0lUQ0hfU1RBQ0sKIAlqYnNyCXN5c2NhbGxfdHJhY2UKQEAgLTkzLDcgKzkzLDcgQEAKIAlhZGRxbAkjNCwlc3AKIAltb3ZlbAklZDMsJWEwCiAJamJzcgklYTBACi0JbW92ZWwJJWQwLCVzcEAoUFRfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KIAlzdWJxbAkjNCwlc3AJCQkvKiBkdW1teSByZXR1cm4gYWRkcmVzcyAqLwogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogcmV0X2Zyb21fZXhjZXB0aW9uOgogCW1vdmUJIzB4MjcwMCwlc3IJCS8qIGRpc2FibGUgaW50cnMgKi8KLQlidHN0CSM1LCVzcEAoUFRfU1IpCQkvKiBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsICovCisJYnRzdAkjNSwlc3BAKFBUX09GRl9TUikJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCAqLwogCWplcQlMdXNlcl9yZXR1cm4JCS8qIGlmIHNvLCBza2lwIHJlc2NoZWQsIHNpZ25hbHMgKi8KIAogI2lmZGVmIENPTkZJR19QUkVFTVBUCkBAIC0xNDIsOCArMTQyLDggQEAKIExyZXR1cm46CiAJbW92ZQkjMHgyNzAwLCVzcgkJLyogZGlzYWJsZSBpbnRycyAqLwogCW1vdmVsCXN3X3VzcCwlYTAJCS8qIGdldCB1c3AgKi8KLQltb3ZlbAklc3BAKFBUX1BDKSwlYTBALQkvKiBjb3B5IGV4Y2VwdGlvbiBwcm9ncmFtIGNvdW50ZXIgKi8KLQltb3ZlbAklc3BAKFBUX0ZPUk1BVFZFQyksJWEwQC0vKiBjb3B5IGV4Y2VwdGlvbiBmb3JtYXQvdmVjdG9yL3NyICovCisJbW92ZWwJJXNwQChQVF9PRkZfUEMpLCVhMEAtCS8qIGNvcHkgZXhjZXB0aW9uIHByb2dyYW0gY291bnRlciAqLworCW1vdmVsCSVzcEAoUFRfT0ZGX0ZPUk1BVFZFQyksJWEwQC0gLyogY29weSBleGNlcHRpb24gZm9ybWF0L3ZlY3Rvci9zciAqLwogCW1vdmVtbAklc3BALCVkMS0lZDUvJWEwLSVhMgogCWxlYQklc3BAKDMyKSwlc3AJCS8qIHNwYWNlIGZvciA4IHJlZ3MgKi8KIAltb3ZlbAklc3BAKywlZDAKQEAgLTE4MSw5ICsxODEsOSBAQAogRU5UUlkoaW50aGFuZGxlcikKIAlTQVZFX0FMTAogCW1vdmVxCSMtMSwlZDAKLQltb3ZlbAklZDAsJXNwQChQVF9PUklHX0QwKQorCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9PUklHX0QwKQogCi0JbW92ZXcJJXNwQChQVF9GT1JNQVRWRUMpLCVkMAkvKiBwdXQgZXhjZXB0aW9uICMgaW4gZDAgKi8KKwltb3Zldwklc3BAKFBUX09GRl9GT1JNQVRWRUMpLCVkMCAvKiBwdXQgZXhjZXB0aW9uICMgaW4gZDAgKi8KIAlhbmRsCSMweDAzZmMsJWQwCQkvKiBtYXNrIG91dCB2ZWN0b3Igb25seSAqLwogCiAJbW92ZWwJJXNwLCVzcEAtCQkvKiBwdXNoIHJlZ3MgYXJnICovCkBAIC0yMDMsNyArMjAzLDcgQEAKIEVOVFJZKGZhc3RoYW5kbGVyKQogCVNBVkVfTE9DQUwKIAotCW1vdmV3CSVzcEAoUFRfRk9STUFUVkVDKSwlZDAKKwltb3Zldwklc3BAKFBUX09GRl9GT1JNQVRWRUMpLCVkMAogCWFuZGwJIzB4MDNmYywlZDAJCS8qIG1hc2sgb3V0IHZlY3RvciBvbmx5ICovCiAKIAltb3ZlbAklc3AsJXNwQC0JCS8qIHB1c2ggcmVncyBhcmcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUwppbmRleCBhY2MxZjA1Li5lM2VjYjM2IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TCkBAIC01OTIsNiArNTkyLDggQEAKIAlub3AKIAltZnMJcjcsIHJmc3I7CQkvKiBzYXZlIEZTUiAqLwogCW5vcAorCW10cwlyZnNyLCByMDsJLyogQ2xlYXIgc3RpY2t5IGZzciAqLworCW5vcAogCWxhCXIxMiwgcjAsIGZ1bGxfZXhjZXB0aW9uCiAJc2V0X3ZtczsKIAlydGJkCXIxMiwgMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUwppbmRleCA2YjAyODhlLi4yYjg2YzAzIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCkBAIC0zODQsNyArMzg0LDcgQEAKIAlhZGRrCXI4LCByMTcsIHIwOyAvKiBMb2FkIGV4Y2VwdGlvbiBhZGRyZXNzICovCiAJYnJhbGlkCXIxNSwgZnVsbF9leGNlcHRpb247IC8qIEJyYW5jaCB0byB0aGUgaGFuZGxlciAqLwogCW5vcDsKLQltdHMJcjAsIHJmc3I7CS8qIENsZWFyIHN0aWNreSBmc3IgKi8KKwltdHMJcmZzciwgcjA7CS8qIENsZWFyIHN0aWNreSBmc3IgKi8KIAlub3AKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDQyMDFjNzQuLmM1OTJkNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMzUsNyArMjM1LDkgQEAKIAlyZWdzLT5wYyA9IHBjOwogCXJlZ3MtPnIxID0gdXNwOwogCXJlZ3MtPnB0X21vZGUgPSAwOworI2lmZGVmIENPTkZJR19NTVUKIAlyZWdzLT5tc3IgfD0gTVNSX1VNUzsKKyNlbmRpZgogfQogCiAjaWZkZWYgQ09ORklHX01NVQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCA3MDVhN2E5Li4xYWFkMGQ5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBNSVBTCiAJYm9vbAogCWRlZmF1bHQgeQorCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9BUkNIX0tHREIKQEAgLTEwMTIsOSArMTAxMyw5IEBACiAKIGNvbmZpZyBNSVBTX0wxX0NBQ0hFX1NISUZUCiAJaW50Ci0JZGVmYXVsdCAiNCIgaWYgTUFDSF9ERUNTVEFUSU9OIHx8IE1JS1JPVElLX1JCNTMyCisJZGVmYXVsdCAiNCIgaWYgTUFDSF9ERUNTVEFUSU9OIHx8IE1JS1JPVElLX1JCNTMyIHx8IFBNQ19NU1A0MjAwX0VWQUwKKwlkZWZhdWx0ICI2IiBpZiBNSVBTX0NQVV9TQ0FDSEUKIAlkZWZhdWx0ICI3IiBpZiBTR0lfSVAyMiB8fCBTR0lfSVAyNyB8fCBTR0lfSVAyOCB8fCBTTklfUk0gfHwgQ1BVX0NBVklVTV9PQ1RFT04KLQlkZWZhdWx0ICI0IiBpZiBQTUNfTVNQNDIwMF9FVkFMCiAJZGVmYXVsdCAiNSIKIAogY29uZmlnIEhBVkVfU1REX1BDX1NFUklBTF9QT1JUCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCmluZGV4IDNhYjZkODAuLjE5YzFjODIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCkBAIC0xNzUsNyArMTc1LDcgQEAKICNkZWZpbmUgREJERVZfVEFCX1NJWkUJQVJSQVlfU0laRShkYmRldl90YWIpCiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyB1MzIgYXUxeHh4X2RiZG1hX3BtX3JlZ3NbTlVNX0RCRE1BX0NIQU5TICsgMV1bOF07CitzdGF0aWMgdTMyIGF1MXh4eF9kYmRtYV9wbV9yZWdzW05VTV9EQkRNQV9DSEFOUyArIDFdWzZdOwogI2VuZGlmCiAKIApAQCAtOTkzLDE0ICs5OTMsMTMgQEAKIAlhdTF4eHhfZGJkbWFfcG1fcmVnc1swXVszXSA9IGF1X3JlYWRsKGFkZHIgKyAweDBjKTsKIAogCS8qIHNhdmUgY2hhbm5lbCBjb25maWd1cmF0aW9ucyAqLwotCWZvciAoaSA9IDEsIGFkZHIgPSBERE1BX0NIQU5ORUxfQkFTRTsgaSA8IE5VTV9EQkRNQV9DSEFOUzsgaSsrKSB7CisJZm9yIChpID0gMSwgYWRkciA9IERETUFfQ0hBTk5FTF9CQVNFOyBpIDw9IE5VTV9EQkRNQV9DSEFOUzsgaSsrKSB7CiAJCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzBdID0gYXVfcmVhZGwoYWRkciArIDB4MDApOwogCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVsxXSA9IGF1X3JlYWRsKGFkZHIgKyAweDA0KTsKIAkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMl0gPSBhdV9yZWFkbChhZGRyICsgMHgwOCk7CiAJCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzNdID0gYXVfcmVhZGwoYWRkciArIDB4MGMpOwogCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVs0XSA9IGF1X3JlYWRsKGFkZHIgKyAweDEwKTsKIAkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bNV0gPSBhdV9yZWFkbChhZGRyICsgMHgxNCk7Ci0JCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzZdID0gYXVfcmVhZGwoYWRkciArIDB4MTgpOwogCiAJCS8qIGhhbHQgY2hhbm5lbCAqLwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMF0gJiB+MSwgYWRkciArIDB4MDApOwpAQCAtMTAyNywxNCArMTAyNiwxMyBAQAogCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1swXVszXSwgYWRkciArIDB4MGMpOwogCiAJLyogcmVzdG9yZSBjaGFubmVsIGNvbmZpZ3VyYXRpb25zICovCi0JZm9yIChpID0gMSwgYWRkciA9IERETUFfQ0hBTk5FTF9CQVNFOyBpIDwgTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKKwlmb3IgKGkgPSAxLCBhZGRyID0gRERNQV9DSEFOTkVMX0JBU0U7IGkgPD0gTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzBdLCBhZGRyICsgMHgwMCk7CiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVsxXSwgYWRkciArIDB4MDQpOwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMl0sIGFkZHIgKyAweDA4KTsKIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzNdLCBhZGRyICsgMHgwYyk7CiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVs0XSwgYWRkciArIDB4MTApOwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bNV0sIGFkZHIgKyAweDE0KTsKLQkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzZdLCBhZGRyICsgMHgxOCk7CiAJCWF1X3N5bmMoKTsKIAkJYWRkciArPSAweDEwMDsJLyogbmV4dCBjaGFubmVsIGJhc2UgKi8KIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKaW5kZXggYzg4YzgyMS4uZDY3MDkyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYwpAQCAtMzU0LDYgKzM1NCwyOCBAQAogCWF1X3N5bmMoKTsKIH0KIAorc3RhdGljIHZvaWQgYXUxeF9pYzBfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIGludCBiaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7CisKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9XQUtFQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9NQVNLQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9SSVNJTkdDTFIpOworCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX0ZBTExJTkdDTFIpOworCWF1X3N5bmMoKTsKK30KKworc3RhdGljIHZvaWQgYXUxeF9pYzFfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIGludCBiaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CisKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9XQUtFQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9NQVNLQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9SSVNJTkdDTFIpOworCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX0ZBTExJTkdDTFIpOworCWF1X3N5bmMoKTsKK30KKwogc3RhdGljIGludCBhdTF4X2ljMV9zZXR3YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOwpAQCAtMzc5LDI1ICs0MDEsMjEgQEAKIC8qCiAgKiBpcnFfY2hpcHMgZm9yIGJvdGggSUNzOyB0aGlzIHdheSB0aGUgbWFzayBoYW5kbGVycyBjYW4gYmUKICAqIGFzIHNob3J0IGFzIHBvc3NpYmxlLgotICoKLSAqIE5PVEU6IHRoZSAtPmFjaygpIGNhbGxiYWNrIGlzIHVzZWQgYnkgdGhlIGhhbmRsZV9lZGdlX2lycQotICoJIGZsb3doYW5kbGVyIG9ubHksIHRoZSAtPm1hc2tfYWNrKCkgb25lIGJ5IGhhbmRsZV9sZXZlbF9pcnEsCi0gKgkgc28gbm8gbmVlZCBmb3IgYW4gaXJxX2NoaXAgZm9yIGVhY2ggdHlwZSBvZiBpcnEgKGxldmVsL2VkZ2UpLgogICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGF1MXhfaWMwX2NoaXAgPSB7CiAJLm5hbWUJCT0gIkFsY2hlbXktSUMwIiwKLQkuYWNrCQk9IGF1MXhfaWMwX2FjaywJCS8qIGVkZ2UgKi8KKwkuYWNrCQk9IGF1MXhfaWMwX2FjaywKIAkubWFzawkJPSBhdTF4X2ljMF9tYXNrLAotCS5tYXNrX2Fjawk9IGF1MXhfaWMwX21hc2ssCS8qIGxldmVsICovCisJLm1hc2tfYWNrCT0gYXUxeF9pYzBfbWFza2FjaywKIAkudW5tYXNrCQk9IGF1MXhfaWMwX3VubWFzaywKIAkuc2V0X3R5cGUJPSBhdTF4X2ljX3NldHR5cGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGF1MXhfaWMxX2NoaXAgPSB7CiAJLm5hbWUJCT0gIkFsY2hlbXktSUMxIiwKLQkuYWNrCQk9IGF1MXhfaWMxX2FjaywJCS8qIGVkZ2UgKi8KKwkuYWNrCQk9IGF1MXhfaWMxX2FjaywKIAkubWFzawkJPSBhdTF4X2ljMV9tYXNrLAotCS5tYXNrX2Fjawk9IGF1MXhfaWMxX21hc2ssCS8qIGxldmVsICovCisJLm1hc2tfYWNrCT0gYXUxeF9pYzFfbWFza2FjaywKIAkudW5tYXNrCQk9IGF1MXhfaWMxX3VubWFzaywKIAkuc2V0X3R5cGUJPSBhdTF4X2ljX3NldHR5cGUsCiAJLnNldF93YWtlCT0gYXUxeF9pYzFfc2V0d2FrZSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCmluZGV4IGNjMzJjNjkuLjQ1YjYxYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYwpAQCAtNjksNiArNjksNyBAQAogI2Vsc2UKIAlhdV93cml0ZWwoMHhmLCBBdTE1MDBfUENJX0NGRyk7CiAjZW5kaWYKKwlib2FyZF9wY2lfaWRzZWwgPSBtdHgxX3BjaV9pZHNlbDsKICNlbmRpZgogCiAJLyogSW5pdGlhbGl6ZSBzeXNfcGluZnVuYyAqLwpAQCAtODUsOCArODYsNiBAQAogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxMSwgMSk7CS8qIGdyZWVuIG9uICovCiAJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjEyLCAwKTsJLyogcmVkIG9mZiAqLwogCi0JYm9hcmRfcGNpX2lkc2VsID0gbXR4MV9wY2lfaWRzZWw7Ci0KIAlwcmludGsoS0VSTl9JTkZPICI0RyBTeXN0ZW1zIE1UWC0xIEJvYXJkXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCmluZGV4IGUyMjc4YzAuLjgzNWYzZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKQEAgLTUwMyw2ICs1MDMsNyBAQAogewogCXUxNiBjaGlwX2lkOwogCWludCByZXM7CisJdTMyICpib290Y3IsIHZhbDsKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTAKIAlzdGF0aWMgc3RydWN0IHVhcnRfcG9ydCB1YXJ0X3BvcnRbMl07CiAKQEAgLTU5NSw3ICs1OTYsMTMgQEAKIAogCWFyN193ZHRfcmVzLmVuZCA9IGFyN193ZHRfcmVzLnN0YXJ0ICsgMHgyMDsKIAotCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXI3X3dkdCk7CisJYm9vdGNyID0gKHUzMiAqKWlvcmVtYXBfbm9jYWNoZShBUjdfUkVHU19EQ0wsIDQpOworCXZhbCA9ICpib290Y3I7CisJaW91bm1hcChib290Y3IpOworCisJLyogUmVnaXN0ZXIgd2F0Y2hkb2cgb25seSBpZiBlbmFibGVkIGluIGhhcmR3YXJlICovCisJaWYgKHZhbCAmIEFSN19XRFRfSFdfRU5BKQorCQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFyN193ZHQpOwogCiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKaW5kZXggZGZiZmQ3ZS4uOTM4YjFkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKQEAgLTExMiwxMCArMTEyLDggQEAKIHsKIAlpbnQgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKIAlyZXQgPSByZXF1ZXN0X2lycShpb2Rldl9pcnEsIGlvZGV2X2lycWhkbCwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgIGlvZGV2X25hbWUsICZtaXNjZGV2KTsKLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCmluZGV4IDA3OWUzM2QuLmZiMjg0YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYworKysgYi9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiBzdGF0aWMgX19pbml0IHZvaWQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKLQljaGFyIGJ1ZltDTF9TSVpFXTsKKwlzdGF0aWMgY2hhciBidWZbQ0xfU0laRV0gX19pbml0ZGF0YTsKIAogCS8qIEdldCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBmcm9tIENGRSAqLwogCWlmIChjZmVfZ2V0ZW52KCJMSU5VWF9DTURMSU5FIiwgYnVmLCBDTF9TSVpFKSA+PSAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9iY202M3h4L01ha2VmaWxlCmluZGV4IGFhYTU4NWMuLjAwMDY0YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogb2JqLXkJCSs9IGNsay5vIGNwdS5vIGNzLm8gZ3Bpby5vIGlycS5vIHByb20ubyBzZXR1cC5vIHRpbWVyLm8gXAotCQkgICBkZXYtZHNwLm8gZGV2LWVuZXQubworCQkgICBkZXYtZHNwLm8gZGV2LWVuZXQubyBkZXYtcGNtY2lhLm8gZGV2LXVhcnQubyBkZXYtd2R0Lm8KIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCiAKIG9iai15CQkrPSBib2FyZHMvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYyBiL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCmluZGV4IGZkNzdmNTQuLjA1YTM1Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCkBAIC0yMCwxMCArMjAsMTAgQEAKICNpbmNsdWRlIDxiY202M3h4X2NwdS5oPgogI2luY2x1ZGUgPGJjbTYzeHhfcmVncy5oPgogI2luY2x1ZGUgPGJjbTYzeHhfaW8uaD4KLSNpbmNsdWRlIDxiY202M3h4X2JvYXJkLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9kZXZfcGNpLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9kZXZfZW5ldC5oPgogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X2RzcC5oPgorI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3BjbWNpYS5oPgogI2luY2x1ZGUgPGJvYXJkX2JjbTk2M3h4Lmg+CiAKICNkZWZpbmUgUEZYCSJib2FyZF9iY205NjN4eDogIgpAQCAtNzkzLDYgKzc5Myw5IEBACiB7CiAJdTMyIHZhbDsKIAorCWlmIChib2FyZC5oYXNfcGNjYXJkKQorCQliY202M3h4X3BjbWNpYV9yZWdpc3RlcigpOworCiAJaWYgKGJvYXJkLmhhc19lbmV0MCAmJgogCSAgICAhYm9hcmRfZ2V0X21hY19hZGRyZXNzKGJvYXJkLmVuZXQwLm1hY19hZGRyKSkKIAkJYmNtNjN4eF9lbmV0X3JlZ2lzdGVyKDAsICZib2FyZC5lbmV0MCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYyBiL2FyY2gvbWlwcy9iY202M3h4L2NwdS5jCmluZGV4IDZkYzQzZjAuLjcwMzc4YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L2NwdS5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2NwdS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2NwdS1pbmZvLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9jcHUuaD4KICNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KICNpbmNsdWRlIDxiY202M3h4X2lvLmg+CkBAIC0yODQsNiArMjg1LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdG1wLCBleHBlY3RlZF9jcHVfaWQ7CiAJc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBzb2MgcmVnaXN0ZXJzIGxvY2F0aW9uIGRlcGVuZHMgb24gY3B1IHR5cGUgKi8KIAlleHBlY3RlZF9jcHVfaWQgPSAwOwpAQCAtMjkzLDYgKzI5NSw3IEBACiAJICogQkNNNjMzOCBhcyB0aGUgc2FtZSBQcklkIGFzIEJDTTMzMDIgc2VlIGFyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKIAkgKi8KIAljYXNlIENQVV9CQ00zMzAyOgorCQlfX2NwdV9uYW1lW2NwdV0gPSAiQnJvYWRjb20gQkNNNjMzOCI7CiAJCWV4cGVjdGVkX2NwdV9pZCA9IEJDTTYzMzhfQ1BVX0lEOwogCQliY202M3h4X3JlZ3NfYmFzZSA9IGJjbTk2MzM4X3JlZ3NfYmFzZTsKIAkJYmNtNjN4eF9pcnFzID0gYmNtOTYzMzhfaXJxczsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi1wY21jaWEuYyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi1wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTRkOTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXBjbWNpYS5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1heGltZSBCaXpvbiA8bWJpem9uQGZyZWVib3guZnI+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxiY202M3h4X2NzLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9jcHUuaD4KKyNpbmNsdWRlIDxiY202M3h4X2Rldl9wY21jaWEuaD4KKyNpbmNsdWRlIDxiY202M3h4X2lvLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtY2lhX3Jlc291cmNlc1tdID0geworCS8qIHBjbWNpYSByZWdpc3RlcnMgKi8KKwl7CisJCS8qIHN0YXJ0ICYgZW5kIGZpbGxlZCBhdCBydW50aW1lICovCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCisJLyogcGNtY2lhIG1lbW9yeSB6b25lIHJlc291cmNlcyAqLworCXsKKwkJLnN0YXJ0CQk9IEJDTV9QQ01DSUFfQ09NTU9OX0JBU0VfUEEsCisJCS5lbmQJCT0gQkNNX1BDTUNJQV9DT01NT05fRU5EX1BBLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBCQ01fUENNQ0lBX0FUVFJfQkFTRV9QQSwKKwkJLmVuZAkJPSBCQ01fUENNQ0lBX0FUVFJfRU5EX1BBLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBCQ01fUENNQ0lBX0lPX0JBU0VfUEEsCisJCS5lbmQJCT0gQkNNX1BDTUNJQV9JT19FTkRfUEEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCisJLyogUENNQ0lBIGlycSAqLworCXsKKwkJLyogc3RhcnQgZmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisKKwkvKiBkZWNsYXJlIFBDTUNJQSBJTyByZXNvdXJjZSBhbHNvICovCisJeworCQkuc3RhcnQJCT0gQkNNX1BDTUNJQV9JT19CQVNFX1BBLAorCQkuZW5kCQk9IEJDTV9QQ01DSUFfSU9fRU5EX1BBLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JTywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBiY202M3h4X3BjbWNpYV9wbGF0Zm9ybV9kYXRhIHBkOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiY202M3h4X3BjbWNpYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImJjbTYzeHhfcGNtY2lhIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocGNtY2lhX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gcGNtY2lhX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGQsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNvbmZpZ19wY21jaWFfY3ModW5zaWduZWQgaW50IGNzLAorCQkJCSAgIHUzMiBiYXNlLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYmNtNjN4eF9zZXRfY3Nfc3RhdHVzKGNzLCAwKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gYmNtNjN4eF9zZXRfY3NfYmFzZShjcywgYmFzZSwgc2l6ZSk7CisJaWYgKCFyZXQpCisJCXJldCA9IGJjbTYzeHhfc2V0X2NzX3N0YXR1cyhjcywgMSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IF9faW5pdGRhdGEgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY3M7CisJdW5zaWduZWQgaW50CWJhc2U7CisJdW5zaWduZWQgaW50CXNpemU7Cit9IHBjbWNpYV9jc1szXSA9IHsKKwl7CisJCS5jcwk9IE1QSV9DU19QQ01DSUFfQ09NTU9OLAorCQkuYmFzZQk9IEJDTV9QQ01DSUFfQ09NTU9OX0JBU0VfUEEsCisJCS5zaXplCT0gQkNNX1BDTUNJQV9DT01NT05fU0laRQorCX0sCisJeworCQkuY3MJPSBNUElfQ1NfUENNQ0lBX0FUVFIsCisJCS5iYXNlCT0gQkNNX1BDTUNJQV9BVFRSX0JBU0VfUEEsCisJCS5zaXplCT0gQkNNX1BDTUNJQV9BVFRSX1NJWkUKKwl9LAorCXsKKwkJLmNzCT0gTVBJX0NTX1BDTUNJQV9JTywKKwkJLmJhc2UJPSBCQ01fUENNQ0lBX0lPX0JBU0VfUEEsCisJCS5zaXplCT0gQkNNX1BDTUNJQV9JT19TSVpFCisJfSwKK307CisKK2ludCBfX2luaXQgYmNtNjN4eF9wY21jaWFfcmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgcmV0LCBpOworCisJaWYgKCFCQ01DUFVfSVNfNjM0OCgpICYmICFCQ01DUFVfSVNfNjM1OCgpKQorCQlyZXR1cm4gMDsKKworCS8qIHVzZSBjb3JyZWN0IHBjbWNpYSByZWFkeSBncGlvIGRlcGVuZGluZyBvbiBwcm9jZXNzb3IgKi8KKwlzd2l0Y2ggKGJjbTYzeHhfZ2V0X2NwdV9pZCgpKSB7CisJY2FzZSBCQ002MzQ4X0NQVV9JRDoKKwkJcGQucmVhZHlfZ3BpbyA9IDIyOworCQlicmVhazsKKworCWNhc2UgQkNNNjM1OF9DUFVfSUQ6CisJCXBkLnJlYWR5X2dwaW8gPSAxODsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwY21jaWFfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gYmNtNjN4eF9yZWdzZXRfYWRkcmVzcyhSU0VUX1BDTUNJQSk7CisJcGNtY2lhX3Jlc291cmNlc1swXS5lbmQgPSBwY21jaWFfcmVzb3VyY2VzWzBdLnN0YXJ0ICsKKwkJUlNFVF9QQ01DSUFfU0laRSAtIDE7CisJcGNtY2lhX3Jlc291cmNlc1s0XS5zdGFydCA9IGJjbTYzeHhfZ2V0X2lycV9udW1iZXIoSVJRX1BDTUNJQSk7CisKKwkvKiBjb25maWd1cmUgcGNtY2lhIGNoaXAgc2VsZWN0cyAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJcmV0ID0gY29uZmlnX3BjbWNpYV9jcyhwY21jaWFfY3NbaV0uY3MsCisJCQkJICAgICAgIHBjbWNpYV9jc1tpXS5iYXNlLAorCQkJCSAgICAgICBwY21jaWFfY3NbaV0uc2l6ZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9lcnI7CisJfQorCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYmNtNjN4eF9wY21jaWFfZGV2aWNlKTsKKworb3V0X2VycjoKKwlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBzZXQgcGNtY2lhIGNoaXAgc2VsZWN0XG4iKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXVhcnQuYyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi11YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1MTk0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi11YXJ0LmMKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9jcHUuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZW5kCQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSAtMSwgLyogZmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiY202M3h4X3VhcnRfZGV2aWNlID0geworCS5uYW1lCQk9ICJiY202M3h4X3VhcnQiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdWFydF9yZXNvdXJjZXMsCit9OworCitpbnQgX19pbml0IGJjbTYzeHhfdWFydF9yZWdpc3Rlcih2b2lkKQoreworCXVhcnRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gYmNtNjN4eF9yZWdzZXRfYWRkcmVzcyhSU0VUX1VBUlQwKTsKKwl1YXJ0X3Jlc291cmNlc1swXS5lbmQgPSB1YXJ0X3Jlc291cmNlc1swXS5zdGFydDsKKwl1YXJ0X3Jlc291cmNlc1swXS5lbmQgKz0gUlNFVF9VQVJUX1NJWkUgLSAxOworCXVhcnRfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gYmNtNjN4eF9nZXRfaXJxX251bWJlcihJUlFfVUFSVDApOworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJjbTYzeHhfdWFydF9kZXZpY2UpOworfQorYXJjaF9pbml0Y2FsbChiY202M3h4X3VhcnRfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXdkdC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXdkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNmM3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtd2R0LmMKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9jcHUuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3ZHRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gLTEsIC8qIGZpbGxlZCBhdCBydW50aW1lICovCisJCS5lbmQJCT0gLTEsIC8qIGZpbGxlZCBhdCBydW50aW1lICovCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmNtNjN4eF93ZHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJiY202M3h4LXdkdCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHdkdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHdkdF9yZXNvdXJjZXMsCit9OworCitpbnQgX19pbml0IGJjbTYzeHhfd2R0X3JlZ2lzdGVyKHZvaWQpCit7CisJd2R0X3Jlc291cmNlc1swXS5zdGFydCA9IGJjbTYzeHhfcmVnc2V0X2FkZHJlc3MoUlNFVF9XRFQpOworCXdkdF9yZXNvdXJjZXNbMF0uZW5kID0gd2R0X3Jlc291cmNlc1swXS5zdGFydDsKKwl3ZHRfcmVzb3VyY2VzWzBdLmVuZCArPSBSU0VUX1dEVF9TSVpFIC0gMTsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJjbTYzeHhfd2R0X2RldmljZSk7Cit9CithcmNoX2luaXRjYWxsKGJjbTYzeHhfd2R0X3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L3NldHVwLmMgYi9hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jCmluZGV4IGIxOGEwY2EuLmQwMDU2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvc2V0dXAuYwpAQCAtNzUsNyArNzUsOSBAQAogCQliY202MzQ4X2ExX3JlYm9vdCgpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAidHJpZ2dlcmluZyB3YXRjaGRvZyBzb2Z0LXJlc2V0Li4uXG4iKTsKLQliY21fcGVyZl93cml0ZWwoU1lTX1BMTF9TT0ZUX1JFU0VULCBQRVJGX1NZU19QTExfQ1RMX1JFRyk7CisJcmVnID0gYmNtX3BlcmZfcmVhZGwoUEVSRl9TWVNfUExMX0NUTF9SRUcpOworCXJlZyB8PSBTWVNfUExMX1NPRlRfUkVTRVQ7CisJYmNtX3BlcmZfd3JpdGVsKHJlZywgUEVSRl9TWVNfUExMX0NUTF9SRUcpOwogCXdoaWxlICgxKQogCQk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKaW5kZXggMzg0ZjE4NC4uNmYyYWNmMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYwpAQCAtMTcsNiArMTcsMTUgQEAKIERFRklORV9SV0xPQ0sob2N0ZW9uX2lycV9jaXUxX3J3bG9jayk7CiBERUZJTkVfU1BJTkxPQ0sob2N0ZW9uX2lycV9tc2lfbG9jayk7CiAKK3N0YXRpYyBpbnQgb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXJldHVybiBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKyNlbHNlCisJcmV0dXJuIGN2bXhfZ2V0X2NvcmVfbnVtKCk7CisjZW5kaWYKK30KKwogc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jb3JlX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1NXMDsKQEAgLTE1MiwxMSArMTYxLDEwIEBACiAJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV09SS1EwOwkvKiBCaXQgMC02MyBvZiBFTjAgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVpbnQ2NF90IGVuMDsKLSNpZmRlZiBDT05GSUdfU01QCiAJaW50IGNwdTsKIAl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpbnQgY29yZWlkID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJZW4wID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSk7CiAJCWVuMCAmPSB+KDF1bGwgPDwgYml0KTsKIAkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMiksIGVuMCk7CkBAIC0xNjcsMjYgKzE3NSw1NyBAQAogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIpKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOwotI2Vsc2UKLQlpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZW4wID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSk7Ci0JZW4wICY9IH4oMXVsbCA8PCBiaXQpOwotCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpLCBlbjApOwotCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgorfQorCisvKgorICogRW5hYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZW5hYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CisJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CisKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMVMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CisJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CisKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMUMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgYWxsIGNvcmVzIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCWludCBpbmRleDsKKwlpbnQgY3B1OworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyOworCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMUMoaW5kZXgpLCBtYXNrKTsKKwl9CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCiB7CiAJaW50IGNwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dPUktRMDsJLyogQml0IDAtNjMgb2YgRU4wICovCiAKLQl3cml0ZV9sb2NrKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpbnQgY29yZWlkID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJdWludDY0X3QgZW4wID0KIAkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwogCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRlc3QpKQpAQCAtMjAwLDEyICsyMzksNDYgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIpKTsKLQl3cml0ZV91bmxvY2soJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2spOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KKworLyoKKyAqIFNldCBhZmZpbml0eSBmb3IgdGhlIGlycSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgaW50IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHlfdjIodW5zaWduZWQgaW50IGlycSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCit7CisJaW50IGNwdTsKKwlpbnQgaW5kZXg7CisJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaW5kZXggPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KSAqIDI7CisJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgZGVzdCkpCisJCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMVMoaW5kZXgpLCBtYXNrKTsKKwkJZWxzZQorCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFDKGluZGV4KSwgbWFzayk7CisJfQorCXJldHVybiAwOworfQogI2VuZGlmCiAKKy8qCisgKiBOZXdlciBvY3Rlb24gY2hpcHMgaGF2ZSBzdXBwb3J0IGZvciBsb2NrbGVzcyBDSVUgb3BlcmF0aW9uLgorICovCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwX3YyID0geworCS5uYW1lID0gIkNJVTAiLAorCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlX3YyLAorCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfYWxsX3YyLAorCS5hY2sgPSBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV92MiwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHlfdjIsCisjZW5kaWYKK307CisKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTAgPSB7CiAJLm5hbWUgPSAiQ0lVMCIsCiAJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGUsCkBAIC0yNjksMTEgKzM0MiwxMCBAQAogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOwkvKiBCaXQgMC02MyBvZiBFTjEgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVpbnQ2NF90IGVuMTsKLSNpZmRlZiBDT05GSUdfU01QCiAJaW50IGNwdTsKIAl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpbnQgY29yZWlkID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJZW4xID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOwogCQllbjEgJj0gfigxdWxsIDw8IGJpdCk7CiAJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSwgZW4xKTsKQEAgLTI4NCwyNiArMzU2LDU4IEBACiAJICovCiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjdm14X2dldF9jb3JlX251bSgpICogMiArIDEpKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOwotI2Vsc2UKLQlpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZW4xID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOwotCWVuMSAmPSB+KDF1bGwgPDwgYml0KTsKLQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSksIGVuMSk7Ci0JY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgorfQorCisvKgorICogRW5hYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZW5hYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMVMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMUMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgYWxsIGNvcmVzIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX2FsbF92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisJaW50IGluZGV4OworCWludCBjcHU7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaW5kZXggPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KSAqIDIgKyAxOworCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMUMoaW5kZXgpLCBtYXNrKTsKKwl9CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgaW50IG9jdGVvbl9pcnFfY2l1MV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCitzdGF0aWMgaW50IG9jdGVvbl9pcnFfY2l1MV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwKKwkJCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCiB7CiAJaW50IGNwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOwkvKiBCaXQgMC02MyBvZiBFTjEgKi8KIAotCXdyaXRlX2xvY2soJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2spOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCWludCBjb3JlaWQgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKKwkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQl1aW50NjRfdCBlbjEgPQogCQkJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMQogCQkJCShjb3JlaWQgKiAyICsgMSkpOwpAQCAtMzE4LDEyICs0MjIsNDYgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxKSk7Ci0Jd3JpdGVfdW5sb2NrKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBTZXQgYWZmaW5pdHkgZm9yIHRoZSBpcnEgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5X3YyKHVuc2lnbmVkIGludCBpcnEsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQoreworCWludCBjcHU7CisJaW50IGluZGV4OworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaW5kZXggPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KSAqIDIgKyAxOworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRlc3QpKQorCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFTKGluZGV4KSwgbWFzayk7CisJCWVsc2UKKwkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxQyhpbmRleCksIG1hc2spOworCX0KKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCisvKgorICogTmV3ZXIgb2N0ZW9uIGNoaXBzIGhhdmUgc3VwcG9ydCBmb3IgbG9ja2xlc3MgQ0lVIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MV92MiA9IHsKKwkubmFtZSA9ICJDSVUwIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92MiwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX2FsbF92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGVfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MV9lbmFibGVfdjIsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5X3YyLAorI2VuZGlmCit9OworCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUxID0gewogCS5uYW1lID0gIkNJVTEiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlLApAQCAtNDIwLDYgKzU1OCw4IEBACiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJaW50IGlycTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAwOworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDE7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogU2V0IHRoZSBkZWZhdWx0IGFmZmluaXR5IHRvIHRoZSBib290IGNwdS4gKi8KQEAgLTQzMCw2ICs1NzAsMTYgQEAKIAlpZiAoTlJfSVJRUyA8IE9DVEVPTl9JUlFfTEFTVCkKIAkJcHJfZXJyKCJvY3Rlb25faXJxX2luaXQ6IE5SX0lSUVMgaXMgc2V0IHRvbyBsb3dcbiIpOwogCisJaWYgKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041OFhYX1BBU1MyX1gpIHx8CisJICAgIE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041NlhYX1BBU1MyX1gpIHx8CisJICAgIE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYX1BBU1MyX1gpKSB7CisJCWNoaXAwID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUwX3YyOworCQljaGlwMSA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MV92MjsKKwl9IGVsc2UgeworCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MDsKKwkJY2hpcDEgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTE7CisJfQorCiAJLyogMCAtIDE1IHJlc2VydmVkIGZvciBpODI1OSBtYXN0ZXIgYW5kIHNsYXZlIGNvbnRyb2xsZXIuICovCiAKIAkvKiAxNyAtIDIzIE1pcHMgaW50ZXJuYWwgKi8KQEAgLTQ0MCwxNCArNTkwLDEyIEBACiAKIAkvKiAyNCAtIDg3IENJVV9JTlRfU1VNMCAqLwogCWZvciAoaXJxID0gT0NURU9OX0lSUV9XT1JLUTA7IGlycSA8PSBPQ1RFT05fSVJRX0JPT1RETUE7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZvY3Rlb25faXJxX2NoaXBfY2l1MCwKLQkJCQkJIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgY2hpcDAsIGhhbmRsZV9wZXJjcHVfaXJxKTsKIAl9CiAKIAkvKiA4OCAtIDE1MSBDSVVfSU5UX1NVTTEgKi8KIAlmb3IgKGlycSA9IE9DVEVPTl9JUlFfV0RPRzA7IGlycSA8PSBPQ1RFT05fSVJRX1JFU0VSVkVEMTUxOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmb2N0ZW9uX2lycV9jaGlwX2NpdTEsCi0JCQkJCSBoYW5kbGVfcGVyY3B1X2lycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAxLCBoYW5kbGVfcGVyY3B1X2lycSk7CiAJfQogCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKQEAgLTUwNSwxNCArNjUzLDEwIEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBzdGF0aWMgaW50IGlzX2lycV9lbmFibGVkX29uX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgY3B1KQogewotICAgICAgIHVuc2lnbmVkIGludCBpc3NldDsKLSNpZmRlZiBDT05GSUdfU01QCi0gICAgICAgaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOwotI2Vsc2UKLQlpbnQgY29yZWlkID0gY3ZteF9nZXRfY29yZV9udW0oKTsKLSNlbmRpZgorCXVuc2lnbmVkIGludCBpc3NldDsKKwlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJaW50IGJpdCA9IChpcnEgPCBPQ1RFT05fSVJRX1dET0cwKSA/Ci0JCWlycSAtIE9DVEVPTl9JUlFfV09SS1EwIDogaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsKKwkJICAgaXJxIC0gT0NURU9OX0lSUV9XT1JLUTAgOiBpcnEgLSBPQ1RFT05fSVJRX1dET0cwOwogICAgICAgIGlmIChpcnEgPCA2NCkgewogCQlpc3NldCA9IChjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKSAmCiAJCQkoMXVsbCA8PCBiaXQpKSA+PiBiaXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCmluZGV4IDMyZDUxYTMuLmMxOThlZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCkBAIC02NSwxMSArNjUsMTIgQEAKIAljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9NQk9YX1NFVFgoY29yZWlkKSwgYWN0aW9uKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9jdGVvbl9zZW5kX2lwaV9tYXNrKGNwdW1hc2tfdCBtYXNrLCB1bnNpZ25lZCBpbnQgYWN0aW9uKQorc3RhdGljIGlubGluZSB2b2lkIG9jdGVvbl9zZW5kX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJCQl1bnNpZ25lZCBpbnQgYWN0aW9uKQogewogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yX2VhY2hfY3B1X21hc2soaSwgbWFzaykKKwlmb3JfZWFjaF9jcHVfbWFzayhpLCAqbWFzaykKIAkJb2N0ZW9uX3NlbmRfaXBpX3NpbmdsZShpLCBhY3Rpb24pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcKaW5kZXggYzY5ODEzYi4uNmM2YTE5YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzcKLSMgV2VkIE1hciAgNCAyMzowODowNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2CisjIFN1biBOb3YgIDggMjI6NTk6NDcgMjAwOQogIwogQ09ORklHX01JUFM9eQogCkBAIC05LDE2ICs5LDE4IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAotIyBDT05GSUdfTEVNT1RFX0ZVTE9ORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FTU1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKICMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldApAQCAtNDUsNiArNDcsNyBAQAogIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVFhYOT15CiBDT05GSUdfVE9TSElCQV9SQlRYNDkyNz15CiBDT05GSUdfVE9TSElCQV9SQlRYNDkzOD15CkBAIC04Niw3ICs4OSw2IEBACiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15Ci0jIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQpAQCAtMTAxLDcgKzEwMyw3IEBACiAjCiAjIENQVSBzZWxlY3Rpb24KICMKLSMgQ09ORklHX0NQVV9MT09OR1NPTjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFMzMl9SMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtMTM3LDYgKzEzOSw3IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKQEAgLTE1NCw3ICsxNTcsMTAgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CkBAIC0xNzUsNiArMTgxLDcgQEAKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMTk0LDExICsyMDEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTIwOSw4ICsyMTcsMTIgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC0yMjAsMjUgKzIzMiwzNSBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotIyBDT05GSUdfRlVURVggaXMgbm90IHNldAotQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19GVVRFWD15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMjQ2LDggKzI2OCw4IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMjc0LDYgKzI5Niw3IEBACiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX01NVT15CiAKICMKQEAgLTI4OCw2ICszMTEsNyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX05FVD15CkBAIC0yOTUsNyArMzE5LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzExLDYgKzMzNCw3IEBACiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CkBAIC0zMzYsNiArMzYwLDcgQEAKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAogIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzQ3LDcgKzM3Miw2IEBACiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKQEAgLTM2NSw5ICszODksOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtMzc2LDkgKzQwMCw5IEBACiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQotIyBDT05GSUdfTVREX0JMS0RFVlMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0JMS0RFVlM9bQorQ09ORklHX01URF9CTE9DSz1tCitDT05GSUdfTVREX0JMT0NLX1JPPW0KICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKQEAgLTQxNCwxNiArNDM4LDIwIEBACiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQogIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0dQSU9fQUREUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUkJUWDQ5Mzk9eQogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIwogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC00MzUsNyArNDYzLDE1IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPW0KKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz1tCisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1RYWDlOREZNQz1tCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKQEAgLTQ3MSw2ICs1MDcsNyBAQAogIwogIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CiBDT05GSUdfSURFX1RJTUlOR1M9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfSURFX0dEPXkKQEAgLTUzNCw4ICs1NzEsMTMgQEAKICMKIAogIwotIyBBIG5ldyBhbHRlcm5hdGl2ZSBGaXJlV2lyZSBzdGFjayBpcyBhdmFpbGFibGUgd2l0aCBFWFBFUklNRU5UQUw9eQorIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgogIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CkBAIC01NzQsNiArNjE2LDggQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTkUyMDAwPXkKQEAgLTYwMiwxOCArNjQ2LDE1IEBACiAjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02NTMsNiArNjk0LDcgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfVFhYOT15CkBAIC02NjYsNyArNzA4LDkgQEAKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT1tCisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NX1RYNDkzOT1tCiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTY4Niw2ICs3MzAsMTAgQEAKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKICMKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIwogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKIApAQCAtNzAxLDE3ICs3NDksMjIgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc0MCwyOCArNzkzLDE3IEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC03NzIsNyArODE0LDQyIEBACiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9bQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZNQVNURVI9eQorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FDOTdfQ09ERUM9bQorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPW0KK0NPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKK0NPTkZJR19TTkRfU09DX1RYWDlBQ0xDPW0KK0NPTkZJR19IQVNfVFhYOV9BQ0xDPXkKK0NPTkZJR19TTkRfU09DX1RYWDlBQ0xDX0FDOTc9bQorQ09ORklHX1NORF9TT0NfVFhYOUFDTENfR0VORVJJQz1tCitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST1tCisjIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0NfQUM5N19DT0RFQz1tCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9bQogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTc4Myw2ICs4NjAsOCBAQAogIyBMRUQgZHJpdmVycwogIwogQ09ORklHX0xFRFNfR1BJTz15CitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKKyMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CiAKICMKICMgTEVEIFRyaWdnZXJzCkBAIC03OTIsNyArODcxLDEyIEBACiBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CkBAIC04MjAsNiArOTA0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfUlM1QzM0OD15CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC04NDAsOCArOTI1LDI2IEBACiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogQ09ORklHX1JUQ19EUlZfVFg0OTM5PXkKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCitDT05GSUdfVFhYOV9ETUFDPW0KK0NPTkZJR19ETUFfRU5HSU5FPXkKKworIworIyBETUEgQ2xpZW50cworIworIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC04NTMsOSArOTU2LDEwIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtODY2LDYgKzk3MCwxMCBAQAogQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIworIyBDYWNoZXMKKyMKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTg5MCw3ICs5OTgsMjcgQEAKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9bQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtOTIyLDYgKzEwNTAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05MjksMTEgKzEwNTgsOSBAQAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogQ09ORklHX0NNRExJTkU9IiIKQEAgLTk0Niw2ICsxMDczLDcgQEAKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTk1OSw2ICsxMDg3LDEwIEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggZDE2YWZkZC4uNjY0YmE1MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtY29oZXJlbnQuaD4KIAogdm9pZCAqZG1hX2FsbG9jX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKTsKQEAgLTczLDE0ICs3NCw0IEBACiBleHRlcm4gdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKIAkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAotI2lmIDAKLSNkZWZpbmUgQVJDSF9IQVNfRE1BX0RFQ0xBUkVfQ09IRVJFTlRfTUVNT1JZCi0KLWV4dGVybiBpbnQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBidXNfYWRkciwKLQlkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKLWV4dGVybiB2b2lkIGRtYV9yZWxlYXNlX2RlY2xhcmVkX21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgKiBkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQoc3RydWN0IGRldmljZSAqZGV2LAotCWRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKTsKLSNlbmRpZgotCiAjZW5kaWYgLyogX0FTTV9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZml4bWFwLmgKaW5kZXggZWZlZGRjOC4uMGI4OWI4MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtNDgsOSArNDgsOSBAQAogI2RlZmluZSBGSVhfTl9DT0xPVVJTIDgKIAlGSVhfQ01BUF9CRUdJTiwKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMpLAorCUZJWF9DTUFQX0VORCA9IEZJWF9DTUFQX0JFR0lOICsgKEZJWF9OX0NPTE9VUlMgKiBOUl9DUFVTICogMiksCiAjZWxzZQotCUZJWF9DTUFQX0VORCA9IEZJWF9DTUFQX0JFR0lOICsgRklYX05fQ09MT1VSUywKKwlGSVhfQ01BUF9FTkQgPSBGSVhfQ01BUF9CRUdJTiArIChGSVhfTl9DT0xPVVJTICogMiksCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCS8qIHJlc2VydmVkIHB0ZSdzIGZvciB0ZW1wb3Jhcnkga2VybmVsIG1hcHBpbmdzICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2NtcHJlZ3MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9nY21wcmVncy5oCmluZGV4IDM2ZmQ5NjkuLmMwY2Y3NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9nY21wcmVncy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9nY21wcmVncy5oCkBAIC0xOSwxNSArMTksMjAgQEAKICNkZWZpbmUgR0NNUF9HREJfT0ZTCQkweDgwMDAgLyogR2xvYmFsIERlYnVnIEJsb2NrICovCiAKIC8qIE9mZnNldHMgdG8gaW5kaXZpZHVhbCBHQ01QIHJlZ2lzdGVycyBmcm9tIEdDTVAgYmFzZSAqLwotI2RlZmluZSBHQ01QT0ZTKGJsb2NrLCB0YWcsIHJlZykJKEdDTVBfIyNibG9jayMjX09GUyArIEdDTVBfIyN0YWcjI18jI3JlZyMjX09GUykKKyNkZWZpbmUgR0NNUE9GUyhibG9jaywgdGFnLCByZWcpCVwKKwkoR0NNUF8jI2Jsb2NrIyNfT0ZTICsgR0NNUF8jI3RhZyMjXyMjcmVnIyNfT0ZTKQorI2RlZmluZSBHQ01QT0ZTbihibG9jaywgdGFnLCByZWcsIG4pIFwKKwkoR0NNUF8jI2Jsb2NrIyNfT0ZTICsgR0NNUF8jI3RhZyMjXyMjcmVnIyNfT0ZTKG4pKQogCiAjZGVmaW5lIEdDTVBHQ0JPRlMocmVnKQkJR0NNUE9GUyhHQ0IsIEdDQiwgcmVnKQorI2RlZmluZSBHQ01QR0NCT0ZTbihyZWcsIG4pCUdDTVBPRlNuKEdDQiwgR0NCLCByZWcsIG4pCiAjZGVmaW5lIEdDTVBDTENCT0ZTKHJlZykJR0NNUE9GUyhDTENCLCBDQ0IsIHJlZykKICNkZWZpbmUgR0NNUENPQ0JPRlMocmVnKQlHQ01QT0ZTKENPQ0IsIENDQiwgcmVnKQogI2RlZmluZSBHQ01QR0RCT0ZTKHJlZykJCUdDTVBPRlMoR0RCLCBHREIsIHJlZykKIAogLyogR0NNUCByZWdpc3RlciBhY2Nlc3MgKi8KICNkZWZpbmUgR0NNUEdDQihyZWcpCQkJUkVHUChfZ2NtcF9iYXNlLCBHQ01QR0NCT0ZTKHJlZykpCisjZGVmaW5lIEdDTVBHQ0JuKHJlZywgbikgICAgICAgICAgICAgICBSRUdQKF9nY21wX2Jhc2UsIEdDTVBHQ0JPRlNuKHJlZywgbikpCiAjZGVmaW5lIEdDTVBDTENCKHJlZykJCQlSRUdQKF9nY21wX2Jhc2UsIEdDTVBDTENCT0ZTKHJlZykpCiAjZGVmaW5lIEdDTVBDT0NCKHJlZykJCQlSRUdQKF9nY21wX2Jhc2UsIEdDTVBDT0NCT0ZTKHJlZykpCiAjZGVmaW5lIEdDTVBHREIocmVnKQkJCVJFR1AoX2djbXBfYmFzZSwgR0NNUEdEQk9GUyhyZWcpKQpAQCAtNDksMTAgKzU0LDEwIEBACiAjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9HQ01QQkFTRV9NU0sJR0NNUEdDQk1TSyhHQ01QQl9HQ01QQkFTRSwgMTcpCiAjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9TSEYJMAogI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfTVNLCUdDTVBHQ0JNU0soR0NNUEJfQ01ERUZUR1QsIDIpCi0jZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9NRU0JMAotI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfTUVNMQkxCi0jZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMSAyCi0jZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMiAzCisjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9ESVNBQkxFRAkwCisjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9NRU0JCTEKKyNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UxCQkyCisjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMgkJMwogI2RlZmluZSBHQ01QX0dDQl9DQ01DX09GUwkJMHgwMDEwCS8qIEdsb2JhbCBDTSBDb250cm9sICovCiAjZGVmaW5lIEdDTVBfR0NCX0dDU1JBUF9PRlMJCTB4MDAyMAkvKiBHbG9iYWwgQ1NSIEFjY2VzcyBQcml2aWxlZ2UgKi8KICNkZWZpbmUgIEdDTVBfR0NCX0dDU1JBUF9DTUFDQ0VTU19TSEYJMApAQCAtMTE1LDUgKzEyMCw2IEBACiAjZGVmaW5lIEdDTVBfQ0NCX0RCR0dST1VQX09GUwkJMHgwMTAwCQkvKiBEZWJ1Z0JyZWFrIEdyb3VwICovCiAKIGV4dGVybiBpbnQgX19pbml0IGdjbXBfcHJvYmUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci0KK2V4dGVybiBpbnQgX19pbml0IGdjbXBfbmlvY3Uodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgZ2NtcF9zZXRyZWdpb24oaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQpOwogI2VuZGlmIC8qIF9BU01fR0NNUFJFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2dpYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2dpYy5oCmluZGV4IGE4ZjU3MzQuLjliOTQzNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9naWMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2ljLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUgX0FTTV9HSUNSRUdTX0gKIAogI3VuZGVmCUdJQ0lTQllURUxJVFRMRUVORElBTgotI2RlZmluZSBHSUNJU1dPUkRMSVRUTEVFTkRJQU4KIAogLyogQ29uc3RhbnRzICovCiAjZGVmaW5lIEdJQ19QT0xfUE9TCQkJMQpAQCAtMjAsMTEgKzE5LDcgQEAKICNkZWZpbmUgR0lDX1RSSUdfRURHRQkJCTEKICNkZWZpbmUgR0lDX1RSSUdfTEVWRUwJCQkwCiAKLSNpZmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIEdJQ19OVU1fSU5UUlMJCQkoMjQgKyBOUl9DUFVTICogMikKLSNlbHNlCi0jZGVmaW5lIEdJQ19OVU1fSU5UUlMJCQkzMgotI2VuZGlmCiAKICNkZWZpbmUgTVNLKG4pICgoMSA8PCAobikpIC0gMSkKICNkZWZpbmUgUkVHMzIoYWRkcikJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoYWRkcikpCkBAIC03MCwxMyArNjUsMTMgQEAKICNkZWZpbmUgVVNNX1ZJU0lCTEVfU0VDVElPTl9TSVpFCTB4MTAwMDAKIAogLyogUmVnaXN0ZXIgTWFwIGZvciBTaGFyZWQgU2VjdGlvbiAqLwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOKSB8fCBkZWZpbmVkKEdJQ0lTV09SRExJVFRMRUVORElBTikKIAogI2RlZmluZQlHSUNfU0hfQ09ORklHX09GUwkJMHgwMDAwCiAKIC8qIFNoYXJlZCBHbG9iYWwgQ291bnRlciAqLwogI2RlZmluZSBHSUNfU0hfQ09VTlRFUl8zMV8wMF9PRlMJMHgwMDEwCiAjZGVmaW5lIEdJQ19TSF9DT1VOVEVSXzYzXzMyX09GUwkweDAwMTQKKyNkZWZpbmUgR0lDX1NIX1JFVklTSU9OSURfT0ZTCQkweDAwMjAKIAogLyogSW50ZXJydXB0IFBvbGFyaXR5ICovCiAjZGVmaW5lIEdJQ19TSF9QT0xfMzFfMF9PRlMJCTB4MDEwMApAQCAtMTY0LDI0ICsxNTksMzEgQEAKIAkoR0lDX1NIX0lOVFJfTUFQX1RPX1ZQRV9CQVNFX09GUyArICgzMiAqIChpbnRyKSkgKyAoKCh2cGUpIC8gMzIpICogNCkpCiAjZGVmaW5lIEdJQ19TSF9NQVBfVE9fVlBFX1JFR19CSVQodnBlKQkoMSA8PCAoKHZwZSkgJSAzMikpCiAKKy8qIENvbnZlcnQgYW4gaW50ZXJydXB0IG51bWJlciB0byBhIGJ5dGUgb2Zmc2V0L2JpdCBmb3IgbXVsdGktd29yZCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0lDX0lOVFJfT0ZTKGludHIpICgoKGludHIpIC8gMzIpKjQpCisjZGVmaW5lIEdJQ19JTlRSX0JJVChpbnRyKSAoKGludHIpICUgMzIpCisKIC8qIFBvbGFyaXR5IDogUmVzZXQgVmFsdWUgaXMgYWx3YXlzIDAgKi8KICNkZWZpbmUgR0lDX1NIX1NFVF9QT0xBUklUWV9PRlMJCTB4MDEwMAogI2RlZmluZSBHSUNfU0VUX1BPTEFSSVRZKGludHIsIHBvbCkgXAotCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1BPTEFSSVRZX09GUyArICgoKGludHIpIC8gMzIpICogNCkpLCAocG9sKSA8PCAoKGludHIpICUgMzIpKQorCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1BPTEFSSVRZX09GUyArIFwKKwkJR0lDX0lOVFJfT0ZTKGludHIpKSwgKHBvbCkgPDwgR0lDX0lOVFJfQklUKGludHIpKQogCiAvKiBUcmlnZ2VyaW5nIDogUmVzZXQgVmFsdWUgaXMgYWx3YXlzIDAgKi8KICNkZWZpbmUgR0lDX1NIX1NFVF9UUklHR0VSX09GUwkJMHgwMTgwCiAjZGVmaW5lIEdJQ19TRVRfVFJJR0dFUihpbnRyLCB0cmlnKSBcCi0JR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfVFJJR0dFUl9PRlMgKyAoKChpbnRyKSAvIDMyKSAqIDQpKSwgKHRyaWcpIDw8ICgoaW50cikgJSAzMikpCisJR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfVFJJR0dFUl9PRlMgKyBcCisJCUdJQ19JTlRSX09GUyhpbnRyKSksICh0cmlnKSA8PCBHSUNfSU5UUl9CSVQoaW50cikpCiAKIC8qIE1hc2sgbWFuaXB1bGF0aW9uICovCiAjZGVmaW5lIEdJQ19TSF9TTUFTS19PRlMJCTB4MDM4MAotI2RlZmluZSBHSUNfU0VUX0lOVFJfTUFTSyhpbnRyLCB2YWwpIFwKLQlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU01BU0tfT0ZTICsgKCgoaW50cikgLyAzMikgKiA0KSksICgodmFsKSA8PCAoKGludHIpICUgMzIpKSkKLQorI2RlZmluZSBHSUNfU0VUX0lOVFJfTUFTSyhpbnRyKSBcCisJR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NNQVNLX09GUyArIFwKKwkJR0lDX0lOVFJfT0ZTKGludHIpKSwgMSA8PCBHSUNfSU5UUl9CSVQoaW50cikpCiAjZGVmaW5lIEdJQ19TSF9STUFTS19PRlMJCTB4MDMwMAotI2RlZmluZSBHSUNfQ0xSX0lOVFJfTUFTSyhpbnRyLCB2YWwpIFwKLQlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfUk1BU0tfT0ZTICsgKCgoaW50cikgLyAzMikgKiA0KSksICgodmFsKSA8PCAoKGludHIpICUgMzIpKSkKKyNkZWZpbmUgR0lDX0NMUl9JTlRSX01BU0soaW50cikgXAorCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9STUFTS19PRlMgKyBcCisJCUdJQ19JTlRSX09GUyhpbnRyKSksIDEgPDwgR0lDX0lOVFJfQklUKGludHIpKQogCiAvKiBSZWdpc3RlciBNYXAgZm9yIExvY2FsIFNlY3Rpb24gKi8KICNkZWZpbmUgR0lDX1ZQRV9DVExfT0ZTCQkJMHgwMDAwCkBAIC0yMTksMTYxICsyMjEsNiBAQAogI2RlZmluZSBHSUNfVU1WX1NIX0NPVU5URVJfMzFfMDBfT0ZTCTB4MDAwMAogI2RlZmluZSBHSUNfVU1WX1NIX0NPVU5URVJfNjNfMzJfT0ZTCTB4MDAwNAogCi0jZWxzZSAvKiBDT05GSUdfQ1BVX0JJR19FTkRJQU4gKi8KLQotI2RlZmluZQlHSUNfU0hfQ09ORklHX09GUwkJMHgwMDAwCi0KLS8qIFNoYXJlZCBHbG9iYWwgQ291bnRlciAqLwotI2RlZmluZSBHSUNfU0hfQ09VTlRFUl8zMV8wMF9PRlMJMHgwMDE0Ci0jZGVmaW5lIEdJQ19TSF9DT1VOVEVSXzYzXzMyX09GUwkweDAwMTAKLQotLyogSW50ZXJydXB0IFBvbGFyaXR5ICovCi0jZGVmaW5lIEdJQ19TSF9QT0xfMzFfMF9PRlMJCTB4MDEwNAotI2RlZmluZSBHSUNfU0hfUE9MXzYzXzMyX09GUwkJMHgwMTAwCi0jZGVmaW5lIEdJQ19TSF9QT0xfOTVfNjRfT0ZTCQkweDAxMGMKLSNkZWZpbmUgR0lDX1NIX1BPTF8xMjdfOTZfT0ZTCQkweDAxMDgKLSNkZWZpbmUgR0lDX1NIX1BPTF8xNTlfMTI4X09GUwkJMHgwMTE0Ci0jZGVmaW5lIEdJQ19TSF9QT0xfMTkxXzE2MF9PRlMJCTB4MDExMAotI2RlZmluZSBHSUNfU0hfUE9MXzIyM18xOTJfT0ZTCQkweDAxMWMKLSNkZWZpbmUgR0lDX1NIX1BPTF8yNTVfMjI0X09GUwkJMHgwMTE4Ci0KLS8qIEVkZ2UvTGV2ZWwgVHJpZ2dlcmluZyAqLwotI2RlZmluZSBHSUNfU0hfVFJJR18zMV8wX09GUwkJMHgwMTg0Ci0jZGVmaW5lIEdJQ19TSF9UUklHXzYzXzMyX09GUwkJMHgwMTgwCi0jZGVmaW5lIEdJQ19TSF9UUklHXzk1XzY0X09GUwkJMHgwMThjCi0jZGVmaW5lIEdJQ19TSF9UUklHXzEyN185Nl9PRlMJCTB4MDE4OAotI2RlZmluZSBHSUNfU0hfVFJJR18xNTlfMTI4X09GUwkJMHgwMTk0Ci0jZGVmaW5lIEdJQ19TSF9UUklHXzE5MV8xNjBfT0ZTCQkweDAxOTAKLSNkZWZpbmUgR0lDX1NIX1RSSUdfMjIzXzE5Ml9PRlMJCTB4MDE5YwotI2RlZmluZSBHSUNfU0hfVFJJR18yNTVfMjI0X09GUwkJMHgwMTk4Ci0KLS8qIER1YWwgRWRnZSBUcmlnZ2VyaW5nICovCi0jZGVmaW5lIEdJQ19TSF9EVUFMXzMxXzBfT0ZTCQkweDAyMDQKLSNkZWZpbmUgR0lDX1NIX0RVQUxfNjNfMzJfT0ZTCQkweDAyMDAKLSNkZWZpbmUgR0lDX1NIX0RVQUxfOTVfNjRfT0ZTCQkweDAyMGMKLSNkZWZpbmUgR0lDX1NIX0RVQUxfMTI3Xzk2X09GUwkJMHgwMjA4Ci0jZGVmaW5lIEdJQ19TSF9EVUFMXzE1OV8xMjhfT0ZTCQkweDAyMTQKLSNkZWZpbmUgR0lDX1NIX0RVQUxfMTkxXzE2MF9PRlMJCTB4MDIxMAotI2RlZmluZSBHSUNfU0hfRFVBTF8yMjNfMTkyX09GUwkJMHgwMjFjCi0jZGVmaW5lIEdJQ19TSF9EVUFMXzI1NV8yMjRfT0ZTCQkweDAyMTgKLQotLyogU2V0L0NsZWFyIGNvcnJlc3BvbmRpbmcgYml0IGluIEVkZ2UgRGV0ZWN0IFJlZ2lzdGVyICovCi0jZGVmaW5lIEdJQ19TSF9XRURHRV9PRlMJCTB4MDI4MAotCi0vKiBSZXNldCBNYXNrIC0gRGlzYWJsZXMgSW50ZXJydXB0ICovCi0jZGVmaW5lIEdJQ19TSF9STUFTS18zMV8wX09GUwkJMHgwMzA0Ci0jZGVmaW5lIEdJQ19TSF9STUFTS182M18zMl9PRlMJCTB4MDMwMAotI2RlZmluZSBHSUNfU0hfUk1BU0tfOTVfNjRfT0ZTCQkweDAzMGMKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzEyN185Nl9PRlMJCTB4MDMwOAotI2RlZmluZSBHSUNfU0hfUk1BU0tfMTU5XzEyOF9PRlMJMHgwMzE0Ci0jZGVmaW5lIEdJQ19TSF9STUFTS18xOTFfMTYwX09GUwkweDAzMTAKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzIyM18xOTJfT0ZTCTB4MDMxYwotI2RlZmluZSBHSUNfU0hfUk1BU0tfMjU1XzIyNF9PRlMJMHgwMzE4Ci0KLS8qIFNldCBNYXNrIChXTykgLSBFbmFibGVzIEludGVycnVwdCAqLwotI2RlZmluZSBHSUNfU0hfU01BU0tfMzFfMF9PRlMJCTB4MDM4NAotI2RlZmluZSBHSUNfU0hfU01BU0tfNjNfMzJfT0ZTCQkweDAzODAKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzk1XzY0X09GUwkJMHgwMzhjCi0jZGVmaW5lIEdJQ19TSF9TTUFTS18xMjdfOTZfT0ZTCQkweDAzODgKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzE1OV8xMjhfT0ZTCTB4MDM5NAotI2RlZmluZSBHSUNfU0hfU01BU0tfMTkxXzE2MF9PRlMJMHgwMzkwCi0jZGVmaW5lIEdJQ19TSF9TTUFTS18yMjNfMTkyX09GUwkweDAzOWMKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzI1NV8yMjRfT0ZTCTB4MDM5OAotCi0vKiBHbG9iYWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKFJPKSAtIEJpdCBTZXQgPT0gSW50ZXJydXB0IGVuYWJsZWQgKi8KLSNkZWZpbmUgR0lDX1NIX01BU0tfMzFfMF9PRlMJCTB4MDQwNAotI2RlZmluZSBHSUNfU0hfTUFTS182M18zMl9PRlMJCTB4MDQwMAotI2RlZmluZSBHSUNfU0hfTUFTS185NV82NF9PRlMJCTB4MDQwYwotI2RlZmluZSBHSUNfU0hfTUFTS18xMjdfOTZfT0ZTCQkweDA0MDgKLSNkZWZpbmUgR0lDX1NIX01BU0tfMTU5XzEyOF9PRlMJCTB4MDQxNAotI2RlZmluZSBHSUNfU0hfTUFTS18xOTFfMTYwX09GUwkJMHgwNDEwCi0jZGVmaW5lIEdJQ19TSF9NQVNLXzIyM18xOTJfT0ZTCQkweDA0MWMKLSNkZWZpbmUgR0lDX1NIX01BU0tfMjU1XzIyNF9PRlMJCTB4MDQxOAotCi0vKiBQZW5kaW5nIEdsb2JhbCBJbnRlcnJ1cHRzIChSTykgKi8KLSNkZWZpbmUgR0lDX1NIX1BFTkRfMzFfMF9PRlMJCTB4MDQ4NAotI2RlZmluZSBHSUNfU0hfUEVORF82M18zMl9PRlMJCTB4MDQ4MAotI2RlZmluZSBHSUNfU0hfUEVORF85NV82NF9PRlMJCTB4MDQ4YwotI2RlZmluZSBHSUNfU0hfUEVORF8xMjdfOTZfT0ZTCQkweDA0ODgKLSNkZWZpbmUgR0lDX1NIX1BFTkRfMTU5XzEyOF9PRlMJCTB4MDQ5NAotI2RlZmluZSBHSUNfU0hfUEVORF8xOTFfMTYwX09GUwkJMHgwNDkwCi0jZGVmaW5lIEdJQ19TSF9QRU5EXzIyM18xOTJfT0ZTCQkweDA0OWMKLSNkZWZpbmUgR0lDX1NIX1BFTkRfMjU1XzIyNF9PRlMJCTB4MDQ5OAotCi0jZGVmaW5lIEdJQ19TSF9JTlRSX01BUF9UT19QSU5fQkFTRV9PRlMJMHgwNTAwCi0KLS8qIE1hcHMgSW50ZXJydXB0IFggdG8gYSBQaW4gKi8KLSNkZWZpbmUgR0lDX1NIX01BUF9UT19QSU4oaW50cikgXAotCShHSUNfU0hfSU5UUl9NQVBfVE9fUElOX0JBU0VfT0ZTICsgKDQgKiBpbnRyKSkKLQotI2RlZmluZSBHSUNfU0hfSU5UUl9NQVBfVE9fVlBFX0JBU0VfT0ZTCTB4MjAwNAotCi0vKgotICogTWFwcyBJbnRlcnJ1cHQgWCB0byBhIFZQRS4gIFRoaXMgaXMgbW9yZSBjb21wbGV4IHRoYW4gdGhlIExFIGNhc2UsIGFzCi0gKiBvZGQgYW5kIGV2ZW4gcmVnaXN0ZXJzIG5lZWQgdG8gYmUgdHJhbnNwb3NlZC4gIEl0IGRvZXMgd29yayAtIHRydXN0IG1lIQotICovCi0jZGVmaW5lIEdJQ19TSF9NQVBfVE9fVlBFX1JFR19PRkYoaW50ciwgdnBlKSBcCi0JKEdJQ19TSF9JTlRSX01BUF9UT19WUEVfQkFTRV9PRlMgKyAoMzIgKiAoaW50cikpICsgXAotCSgoKCgodnBlKSAvIDMyKSBeIDEpIC0gMSkgKiA0KSkKLSNkZWZpbmUgR0lDX1NIX01BUF9UT19WUEVfUkVHX0JJVCh2cGUpCSgxIDw8ICgodnBlKSAlIDMyKSkKLQotLyogUG9sYXJpdHkgKi8KLSNkZWZpbmUgR0lDX1NIX1NFVF9QT0xBUklUWV9PRlMJCTB4MDEwMAotI2RlZmluZSBHSUNfU0VUX1BPTEFSSVRZKGludHIsIHBvbCkgXAotCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1BPTEFSSVRZX09GUyArIDQgKyAoKCgoKGludHIpIC8gMzIpIF4gMSkgLSAxKSAqIDQpKSwgKHBvbCkgPDwgKChpbnRyKSAlIDMyKSkKLQotLyogVHJpZ2dlcmluZyAqLwotI2RlZmluZSBHSUNfU0hfU0VUX1RSSUdHRVJfT0ZTCQkweDAxODAKLSNkZWZpbmUgR0lDX1NFVF9UUklHR0VSKGludHIsIHRyaWcpIFwKLQlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9UUklHR0VSX09GUyArIDQgKyAoKCgoKGludHIpIC8gMzIpIF4gMSkgLSAxKSAqIDQpKSwgKHRyaWcpIDw8ICgoaW50cikgJSAzMikpCi0KLS8qIE1hc2sgbWFuaXB1bGF0aW9uICovCi0jZGVmaW5lIEdJQ19TSF9TTUFTS19PRlMJCTB4MDM4MAotI2RlZmluZSBHSUNfU0VUX0lOVFJfTUFTSyhpbnRyLCB2YWwpIFwKLQlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU01BU0tfT0ZTICsgNCArICgoKCgoaW50cikgLyAzMikgXiAxKSAtIDEpICogNCkpLCAoKHZhbCkgPDwgKChpbnRyKSAlIDMyKSkpCi0KLSNkZWZpbmUgR0lDX1NIX1JNQVNLX09GUwkJMHgwMzAwCi0jZGVmaW5lIEdJQ19DTFJfSU5UUl9NQVNLKGludHIsIHZhbCkgXAotCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9STUFTS19PRlMgKyA0ICsgKCgoKChpbnRyKSAvIDMyKSBeIDEpIC0gMSkgKiA0KSksICgodmFsKSA8PCAoKGludHIpICUgMzIpKSkKLQotLyogUmVnaXN0ZXIgTWFwIGZvciBMb2NhbCBTZWN0aW9uICovCi0jZGVmaW5lIEdJQ19WUEVfQ1RMX09GUwkJCTB4MDAwMAotI2RlZmluZSBHSUNfVlBFX1BFTkRfT0ZTCQkweDAwMDQKLSNkZWZpbmUgR0lDX1ZQRV9NQVNLX09GUwkJMHgwMDA4Ci0jZGVmaW5lIEdJQ19WUEVfUk1BU0tfT0ZTCQkweDAwMGMKLSNkZWZpbmUgR0lDX1ZQRV9TTUFTS19PRlMJCTB4MDAxMAotI2RlZmluZSBHSUNfVlBFX1dEX01BUF9PRlMJCTB4MDA0MAotI2RlZmluZSBHSUNfVlBFX0NPTVBBUkVfTUFQX09GUwkJMHgwMDQ0Ci0jZGVmaW5lIEdJQ19WUEVfVElNRVJfTUFQX09GUwkJMHgwMDQ4Ci0jZGVmaW5lIEdJQ19WUEVfUEVSRkNUUl9NQVBfT0ZTCQkweDAwNTAKLSNkZWZpbmUgR0lDX1ZQRV9TV0lOVDBfTUFQX09GUwkJMHgwMDU0Ci0jZGVmaW5lIEdJQ19WUEVfU1dJTlQxX01BUF9PRlMJCTB4MDA1OAotI2RlZmluZSBHSUNfVlBFX09USEVSX0FERFJfT0ZTCQkweDAwODAKLSNkZWZpbmUgR0lDX1ZQRV9XRF9DT05GSUcwX09GUwkJMHgwMDkwCi0jZGVmaW5lIEdJQ19WUEVfV0RfQ09VTlQwX09GUwkJMHgwMDk0Ci0jZGVmaW5lIEdJQ19WUEVfV0RfSU5JVElBTDBfT0ZTCQkweDAwOTgKLSNkZWZpbmUgR0lDX1ZQRV9DT01QQVJFX0xPX09GUwkJMHgwMGE0Ci0jZGVmaW5lIEdJQ19WUEVfQ09NUEFSRV9ISV9PRlMJCTB4MDBhMAotCi0jZGVmaW5lIEdJQ19WUEVfRUlDX1NIQURPV19TRVRfQkFTRQkweDAxMDAKLSNkZWZpbmUgR0lDX1ZQRV9FSUNfU1MoaW50cikgXAotCShHSUNfRUlDX1NIQURPV19TRVRfQkFTRSArICg0ICogaW50cikpCi0KLSNkZWZpbmUgR0lDX1ZQRV9FSUNfVkVDX0JBU0UJCTB4MDgwMAotI2RlZmluZSBHSUNfVlBFX0VJQ19WRUMoaW50cikgXAotCShHSUNfVlBFX0VJQ19WRUNfQkFTRSArICg0ICogaW50cikpCi0KLSNkZWZpbmUgR0lDX1ZQRV9URU5BQkxFX05NSV9PRlMJCTB4MTAwMAotI2RlZmluZSBHSUNfVlBFX1RFTkFCTEVfWVFfT0ZTCQkweDEwMDQKLSNkZWZpbmUgR0lDX1ZQRV9URU5BQkxFX0lOVF8zMV8wX09GUwkweDEwODAKLSNkZWZpbmUgR0lDX1ZQRV9URU5BQkxFX0lOVF82M18zMl9PRlMJMHgxMDg0Ci0KLS8qIFVzZXIgTW9kZSBWaXNpYmxlIFNlY3Rpb24gUmVnaXN0ZXIgTWFwICovCi0jZGVmaW5lIEdJQ19VTVZfU0hfQ09VTlRFUl8zMV8wMF9PRlMJMHgwMDA0Ci0jZGVmaW5lIEdJQ19VTVZfU0hfQ09VTlRFUl82M18zMl9PRlMJMHgwMDAwCi0KLSNlbmRpZiAvKiAhTEUgKi8KLQogLyogTWFza3MgKi8KICNkZWZpbmUgR0lDX1NIX0NPTkZJR19DT1VOVFNUT1BfU0hGCTI4CiAjZGVmaW5lIEdJQ19TSF9DT05GSUdfQ09VTlRTVE9QX01TSwkoTVNLKDEpIDw8IEdJQ19TSF9DT05GSUdfQ09VTlRTVE9QX1NIRikKQEAgLTQ3MywxMiArMzIwLDEzIEBACiAgKiBpbiBidWlsZGluZyBpcGlfbWFwLgogICovCiBzdHJ1Y3QgZ2ljX2ludHJfbWFwIHsKLQl1bnNpZ25lZCBpbnQgaW50cm51bTsgCS8qIEV4dCBJbnRyIE51bSAJKi8KIAl1bnNpZ25lZCBpbnQgY3B1bnVtOwkvKiBEaXJlY3RlZCB0byB0aGlzIENQVSAqLwogCXVuc2lnbmVkIGludCBwaW47CS8qIERpcmVjdGVkIHRvIHRoaXMgUGluICovCiAJdW5zaWduZWQgaW50IHBvbGFyaXR5OwkvKiBQb2xhcml0eSA6ICsvLQkqLwogCXVuc2lnbmVkIGludCB0cmlndHlwZTsJLyogVHJpZ2dlciAgOiBFZGdlL0xldmwgKi8KLQl1bnNpZ25lZCBpbnQgaXBpZmxhZzsJLyogSXMgdXNlZCBmb3IgSVBJID8JKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CS8qIE1pc2MgZmxhZ3MJKi8KKyNkZWZpbmUgR0lDX0ZMQUdfSVBJICAgICAgICAgICAweDAxCisjZGVmaW5lIEdJQ19GTEFHX1RSQU5TUEFSRU5UICAgMHgwMgogfTsKIAogZXh0ZXJuIHZvaWQgZ2ljX2luaXQodW5zaWduZWQgbG9uZyBnaWNfYmFzZV9hZGRyLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCmluZGV4IGRlNzE2OTQuLjIxY2JiYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKQEAgLTc4LDYgKzc4LDkgQEAKICNkZWZpbmUgQVI3X1JFRl9DTE9DSwkyNTAwMDAwMAogI2RlZmluZSBBUjdfWFRBTF9DTE9DSwkyNDAwMDAwMAogCisvKiBEQ0wgKi8KKyNkZWZpbmUgQVI3X1dEVF9IV19FTkEJMHgxMAorCiBzdHJ1Y3QgcGxhdF9jcG1hY19kYXRhIHsKIAlpbnQgcmVzZXRfYml0OwogCWludCBwb3dlcl9iaXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCmluZGV4IGZlZWEwMDEuLjkxNTk1ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCkBAIC0xMDQsNiArMTA0LDggQEAKIAogCWlmICgoZ3BpbyA+PSA4KSAmJiAoZ3BpbyA8PSAxNSkpCiAJCXJldHVybiBNQUtFX0lSUSgwLCAyOSk7CQkvKiBzaGFyZWQgR1BJTzIwOF8yMTUgKi8KKworCXJldHVybiAtRU5YSU87CiB9CiAKICNpZmRlZiBDT05GSUdfU09DX0FVMTEwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X2Rldl9wY21jaWEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9kZXZfcGNtY2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlYjM5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9kZXZfcGNtY2lhLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBCQ002M1hYX0RFVl9QQ01DSUFfSF8KKyNkZWZpbmUgQkNNNjNYWF9ERVZfUENNQ0lBX0hfCisKKy8qCisgKiBQQ01DSUEgZHJpdmVyIHBsYXRmb3JtIGRhdGEKKyAqLworc3RydWN0IGJjbTYzeHhfcGNtY2lhX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCByZWFkeV9ncGlvOworfTsKKworaW50IGJjbTYzeHhfcGNtY2lhX3JlZ2lzdGVyKHZvaWQpOworCisjZW5kaWYgLyogQkNNNjNYWF9ERVZfUENNQ0lBX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmgKaW5kZXggZjY4Mzc0Mi4uMDlhNTliYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaApAQCAtNDQsOCArNDQsOCBAQAogCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQlcCiAJLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKIAkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCisJLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UgfAlcCisJCQkJICBTRF9CQUxBTkNFX0VYRUMsCVwKIAkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCiAJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKIAkubnJfYmFsYW5jZV9mYWlsZWQJPSAwLAkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggY2U1YjZlMjcuLjk5NDdlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9wCTAKICNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3MJMAogI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKLSNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCTEKKyNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCShQQUdFX1NJWkUgPCAweDQwMDApCiAjZGVmaW5lIGNwdV9oYXNfZGl2ZWMJCTAKICNkZWZpbmUgY3B1X2hhc19kc3AJCTAKICNkZWZpbmUgY3B1X2hhc19lanRhZwkJMApAQCAtNTQsNiArNTQsNSBAQAogI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAogI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCTAKICNkZWZpbmUgY3B1X2hhc193YXRjaAkJMQotI2RlZmluZSBjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUJMQogCiAjZW5kaWYgLyogX19BU01fTUFDSF9MT09OR1NPTl9DUFVfRkVBVFVSRV9PVkVSUklERVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBkOTc0MzUzLi42MDgzZGI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9oYXphcmRzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwogI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CkBAIC0zNiwxMSArMzcsMTMgQEAKICNpZmRlZiBDT05GSUdfMzJCSVQKICNkZWZpbmUgVExCTUlTU19IQU5ETEVSX1NFVFVQKCkJCQkJCQlcCiAJd3JpdGVfYzBfY29udGV4dCgodW5zaWduZWQgbG9uZykgc21wX3Byb2Nlc3Nvcl9pZCgpIDw8IDI1KTsJXAorCWJhY2tfdG9fYmFja19jMF9oYXphcmQoKTsJCQkJCVwKIAlUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKHN3YXBwZXJfcGdfZGlyKQogI2VuZGlmCiAjaWZkZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIFRMQk1JU1NfSEFORExFUl9TRVRVUCgpCQkJCQkJXAogCXdyaXRlX2MwX2NvbnRleHQoKHVuc2lnbmVkIGxvbmcpIHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAyNik7CVwKKwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkKCk7CQkJCQlcCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChzd2FwcGVyX3BnX2RpcikKICNlbmRpZgogCkBAIC0xNjUsMTIgKzE2OCwxMiBAQAogCSAqIGhhdmluZyBBU0lEX01BU0sgc21hbGxlciB0aGFuIHRoZSBoYXJkd2FyZSBtYXhpbXVtLAogCSAqIG1ha2Ugc3VyZSBubyAic29mdCIgYml0cyBiZWNvbWUgImhhcmQiLi4uCiAJICovCi0Jd3JpdGVfYzBfZW50cnloaSgocmVhZF9jMF9lbnRyeWhpKCkgJiB+SFdfQVNJRF9NQVNLKQotCQkJfCAoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSAmIEFTSURfTUFTSykpOworCXdyaXRlX2MwX2VudHJ5aGkoKHJlYWRfYzBfZW50cnloaSgpICYgfkhXX0FTSURfTUFTSykgfAorCQkJIGNwdV9hc2lkKGNwdSwgbmV4dCkpOwogCWVoYigpOyAvKiBNYWtlIHN1cmUgaXQgcHJvcGFnYXRlcyB0byBUQ1N0YXR1cyAqLwogCWV2cGUobXRmbGFncyk7CiAjZWxzZQotCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSk7CisJd3JpdGVfYzBfZW50cnloaShjcHVfYXNpZChjcHUsIG5leHQpKTsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOwogCkBAIC0yMjYsMTEgKzIyOSwxMSBAQAogCX0KIAkvKiBTZWUgY29tbWVudHMgZm9yIHNpbWlsYXIgY29kZSBhYm92ZSAqLwogCXdyaXRlX2MwX2VudHJ5aGkoKHJlYWRfYzBfZW50cnloaSgpICYgfkhXX0FTSURfTUFTSykgfAotCSAgICAgICAgICAgICAgICAgKGNwdV9jb250ZXh0KGNwdSwgbmV4dCkgJiBBU0lEX01BU0spKTsKKwkgICAgICAgICAgICAgICAgIGNwdV9hc2lkKGNwdSwgbmV4dCkpOwogCWVoYigpOyAvKiBNYWtlIHN1cmUgaXQgcHJvcGFnYXRlcyB0byBUQ1N0YXR1cyAqLwogCWV2cGUobXRmbGFncyk7CiAjZWxzZQotCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSk7CisJd3JpdGVfYzBfZW50cnloaShjcHVfYXNpZChjcHUsIG5leHQpKTsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IGU2MDBjZWQuLjUwNTExYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfTUlQU19TRVRVUF9ICiAjZGVmaW5lIF9NSVBTX1NFVFVQX0gKIAotI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQkyNTYKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJNDA5NgogCiAjaWZkZWYgIF9fS0VSTkVMX18KIGV4dGVybiB2b2lkIHNldHVwX2Vhcmx5X3ByaW50ayh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCBlMTVmMTFhLi5hZjQyMzg1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC03Nyw3ICs3NywxOCBAQAogCiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpCit7CisJZXh0ZXJuIHN0cnVjdCBwbGF0X3NtcF9vcHMgKm1wX29wczsgICAgIC8qIHByaXZhdGUgKi8KKworCW1wX29wcy0+c2VuZF9pcGlfbWFzaygmY3B1bWFza19vZl9jcHUoY3B1KSwgU01QX0NBTExfRlVOQ1RJT04pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCit7CisJZXh0ZXJuIHN0cnVjdCBwbGF0X3NtcF9vcHMgKm1wX29wczsgICAgIC8qIHByaXZhdGUgKi8KKworCW1wX29wcy0+c2VuZF9pcGlfbWFzayhtYXNrLCBTTVBfQ0FMTF9GVU5DVElPTik7Cit9CiAKICNlbmRpZiAvKiBfX0FTTV9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc210Y19pcGkuaAppbmRleCA4Y2U1MTc1Li4xNTI3OGRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc210Y19pcGkuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc210Y19pcGkuaApAQCAtNDUsNiArNDUsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3Qgc210Y19pcGkgKnRhaWw7CiAJaW50IGRlcHRoOworCWludCByZXNjaGVkX2ZsYWc7CS8qIHJlc2NoZWR1bGUgYWxyZWFkeSBxdWV1ZWQgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXRjX2lwaV9ucShzdHJ1Y3Qgc210Y19pcGlfcSAqcSwgc3RydWN0IHNtdGNfaXBpICpwKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwcmFtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3ByYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjg5MDA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwcmFtLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfTUlQU19TUFJBTV9ICisjZGVmaW5lIF9NSVBTX1NQUkFNX0gKKworI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyCitleHRlcm4gX19pbml0IHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcHJhbV9jb25maWcodm9pZCkgeyB9OworI2VuZGlmIC8qIENPTkZJR19DUFVfTUlQU1IyICovCisKKyNlbmRpZiAvKiBfTUlQU19TUFJBTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDAxY2MxNjMuLjg0NWRhMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC04NiwxNCArODYsNyBAQAogI2RlZmluZSBfX0hBVkVfQVJDSF9USFJFQURfSU5GT19BTExPQ0FUT1IKIAogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spCQkJCQlcCi0oewkJCQkJCQkJXAotCXN0cnVjdCB0aHJlYWRfaW5mbyAqcmV0OwkJCQlcCi0JCQkJCQkJCVwKLQlyZXQgPSBremFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKTsJCQlcCi0JCQkJCQkJCVwKLQlyZXQ7CQkJCQkJCVwKLX0pCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykga3phbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKICNlbHNlCiAjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oCmluZGV4IDc5MjQwNDkuLjQyZjY2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKQEAgLTEyLDE3ICsxMiwxNyBAQAogI2lmIGRlZmluZWQoX19NSVBTRUJfXykKICMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX3N0cnVjdC5oPgogIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvbGVfYnl0ZXNoaWZ0Lmg+Ci0jIGluY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+CiAjIGRlZmluZSBnZXRfdW5hbGlnbmVkCV9fZ2V0X3VuYWxpZ25lZF9iZQogIyBkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfYmUKICNlbGlmIGRlZmluZWQoX19NSVBTRUxfXykKICMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2xlX3N0cnVjdC5oPgogIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvYmVfYnl0ZXNoaWZ0Lmg+Ci0jIGluY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+CiAjIGRlZmluZSBnZXRfdW5hbGlnbmVkCV9fZ2V0X3VuYWxpZ25lZF9sZQogIyBkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfbGUKICNlbHNlCiAjICBlcnJvciAiTUlQUywgYnV0IG5laXRoZXIgX19NSVBTRUJfXywgbm9yIF9fTUlQU0VMX18/Pz8iCiAjZW5kaWYKIAorIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgorCiAjZW5kaWYgLyogX0FTTV9NSVBTX1VOQUxJR05FRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9pcnEuYyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCmluZGV4IDdmZDE3MGQuLjdiZDMyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qYXp6L2lycS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcjQwMzBfdGltZXJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gcjQwMzBfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAiUjQwMzAgdGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZTk2MTIyMS4uZWVjZDJhOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCkBAIC0yLDYgKzIsOCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4L01JUFMga2VybmVsLgogIwogCitDUFBGTEFHU192bWxpbnV4LmxkcyA6PSAkKEtCVUlMRF9DRkxBR1MpCisKIGV4dHJhLXkJCTo9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCiBvYmoteQkJKz0gY3B1LXByb2JlLm8gYnJhbmNoLm8gZW50cnkubyBnZW5leC5vIGlycS5vIHByb2Nlc3MubyBcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWJjbTE0ODAuYwppbmRleCBlMDJmNzliLi5iZmVhMzI3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1iY20xNDgwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCWJjbTE0ODBfdW5tYXNrX2lycShjcHUsIGlycSk7CiAKIAlhY3Rpb24tPmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyOwotCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFU7CisJYWN0aW9uLT5mbGFncwk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVI7CiAJYWN0aW9uLT5uYW1lCT0gbmFtZTsKIAlhY3Rpb24tPmRldl9pZAk9IGNkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtZHMxMjg3LmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZHMxMjg3LmMKaW5kZXggNjk5NmRhNC4uMDBhNGRhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWRzMTI4Ny5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1kczEyODcuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGRzMTI4N19pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBkczEyODdfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gImRzMTI4NyIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYwppbmRleCA5MjM1MWUwLi5mNWQyNjVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBndDY0MXh4X3RpbWVyMF9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBndDY0MXh4X3RpbWVyMF9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAiZ3Q2NDF4eF90aW1lcjAiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jCmluZGV4IDI2NTIzNjIuLmI0NjlhZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtcjRrLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAogc3RydWN0IGlycWFjdGlvbiBjMF9jb21wYXJlX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IGMwX2NvbXBhcmVfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0gInRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYwppbmRleCBhYzU5MDNkLi5kYTc4ZWVhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNiMTI1MC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAlzYjEyNTBfdW5tYXNrX2lycShjcHUsIGlycSk7CiAKIAlhY3Rpb24tPmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyOwotCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFU7CisJYWN0aW9uLT5mbGFncwk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVI7CiAJYWN0aW9uLT5uYW1lCT0gbmFtZTsKIAlhY3Rpb24tPmRldl9pZAk9IGNkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtc210Yy5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNtdGMuYwppbmRleCA5OGJkN2RlLi5iMTAyZTRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zbXRjLmMKQEAgLTE3MywxMSArMTczLDEyIEBACiAJdW5zaWduZWQgaW50IG10ZmxhZ3M7CiAJaW50IGNwdTsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZDsKLQl1bnNpZ25lZCBsb25nIG5leHRzdGFtcCA9IDBMOworCXVuc2lnbmVkIGxvbmcgbmV4dHN0YW1wOwogCXVuc2lnbmVkIGxvbmcgcmVmZXJlbmNlOwogCiAKIHJlcGVhdDoKKwluZXh0c3RhbXAgPSAwTDsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCSAgICAvKgogCSAgICAgKiBGaW5kIHZpcnR1YWwgQ1BVcyB3aXRoaW4gdGhlIGN1cnJlbnQgVlBFIHdobyBoYXZlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXR4eDkuYwppbmRleCAwMDM3ZjIxLi4yMThlZTZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC10eHg5LmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0eHg5dG1yX2lycSA9IHsKIAkuaGFuZGxlcgk9IHR4eDl0bXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gInR4eDl0bXIiLAogCS5kZXZfaWQJCT0gJnR4eDlfY2xvY2tfZXZlbnRfZGV2aWNlLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IGY3MDk2NTcuLjdhNTE4NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vd2F0Y2guaD4KLQorI2luY2x1ZGUgPGFzbS9zcHJhbS5oPgogLyoKICAqIE5vdCBhbGwgb2YgdGhlIE1JUFMgQ1BVcyBoYXZlIHRoZSAid2FpdCIgaW5zdHJ1Y3Rpb24gYXZhaWxhYmxlLiBNb3Jlb3ZlciwKICAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgIndhaXQiIGZlYXR1cmUgZGlmZmVycyBiZXR3ZWVuIENQVSBmYW1pbGllcy4gVGhpcwpAQCAtNzExLDEyICs3MTEsNiBAQAogCW1pcHNfcHJvYmVfd2F0Y2hfcmVnaXN0ZXJzKGMpOwogfQogCi0jaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKLWV4dGVybiB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpIHt9Ci0jZW5kaWYKLQogc3RhdGljIGlubGluZSB2b2lkIGNwdV9wcm9iZV9taXBzKHN0cnVjdCBjcHVpbmZvX21pcHMgKmMsIHVuc2lnbmVkIGludCBjcHUpCiB7CiAJZGVjb2RlX2NvbmZpZ3MoYyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCmluZGV4IDUzMWNlN2IuLmVhNjk1ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCkBAIC0xOTEsNiArMTkxLDcgQEAKIAkvKiBTZXQgdGhlIFNQIGFmdGVyIGFuIGVtcHR5IHB0X3JlZ3MuICAqLwogCVBUUl9MSQkJc3AsIF9USFJFQURfU0laRSAtIDMyIC0gUFRfU0laRQogCVBUUl9BRERVCXNwLCAkMjgKKwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkCiAJc2V0X3NhdmVkX3NwCXNwLCB0MCwgdDEKIAlQVFJfU1VCVQlzcCwgNCAqIFNaUkVHCQkjIGluaXQgc3RhY2sgcG9pbnRlcgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMgYi9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKaW5kZXggZjdkOGQ1ZC4uZWQ1YzQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYwpAQCAtOTgsNyArOTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORywKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORyB8IElSUUZfVElNRVIsCiAJLm5hbWUgPSAidGltZXIiCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCmluZGV4IGQyMDcyY2QuLmIxODFmMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCkBAIC0xNCwzOCArMTQsMjMgQEAKIAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfZ2ljX2Jhc2U7Ci1zdGF0aWMgdW5zaWduZWQgaW50IF9pcnFiYXNlLCBfbWFwc2l6ZSwgbnVtdnBlcywgbnVtaW50cnM7Ci1zdGF0aWMgc3RydWN0IGdpY19pbnRyX21hcCAqX2ludHJtYXA7CitzdGF0aWMgdW5zaWduZWQgaW50IF9pcnFiYXNlOworc3RhdGljIHVuc2lnbmVkIGludCBnaWNfaXJxX2ZsYWdzW0dJQ19OVU1fSU5UUlNdOworI2RlZmluZSBHSUNfSVJRX0ZMQUdfRURHRSAgICAgIDB4MDAwMQogCi1zdGF0aWMgc3RydWN0IGdpY19wY3B1X21hc2sgcGNwdV9tYXNrc1tOUl9DUFVTXTsKK3N0cnVjdCBnaWNfcGNwdV9tYXNrIHBjcHVfbWFza3NbTlJfQ1BVU107CiBzdGF0aWMgc3RydWN0IGdpY19wZW5kaW5nX3JlZ3MgcGVuZGluZ19yZWdzW05SX0NQVVNdOwogc3RhdGljIHN0cnVjdCBnaWNfaW50cm1hc2tfcmVncyBpbnRybWFza19yZWdzW05SX0NQVVNdOwogCi0jZGVmaW5lIGdpY193ZWRnZWIyYm9rIDAJLyoKLQkJCQkgKiBDYW4gR0lDIGhhbmRsZSBiMmIgd3JpdGVzIHRvIHdlZGdlIHJlZ2lzdGVyPwotCQkJCSAqLwotI2lmIGdpY193ZWRnZWIyYm9rID09IDAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ2ljX3dlZGdlYjJiX2xvY2spOwotI2VuZGlmCi0KIHZvaWQgZ2ljX3NlbmRfaXBpKHVuc2lnbmVkIGludCBpbnRyKQogewotI2lmIGdpY193ZWRnZWIyYm9rID09IDAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCiAJcHJfZGVidWcoIkNQVSVkOiAlcyBzdGF0dXMgJTA4eFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywKIAkJIHJlYWRfYzBfc3RhdHVzKCkpOwotCWlmICghZ2ljX3dlZGdlYjJib2spCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZnaWNfd2VkZ2ViMmJfbG9jaywgZmxhZ3MpOwogCUdJQ1dSSVRFKEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfV0VER0UpLCAweDgwMDAwMDAwIHwgaW50cik7Ci0JaWYgKCFnaWNfd2VkZ2ViMmJvaykgewotCQkodm9pZCkgR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnaWNfd2VkZ2ViMmJfbG9jaywgZmxhZ3MpOwotCX0KIH0KIAogLyogVGhpcyBpcyBNYWx0YSBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQgKi8KLXN0YXRpYyB2b2lkIHZwZV9sb2NhbF9zZXR1cCh1bnNpZ25lZCBpbnQgbnVtdnBlcykKK3N0YXRpYyB2b2lkIF9faW5pdCB2cGVfbG9jYWxfc2V0dXAodW5zaWduZWQgaW50IG51bXZwZXMpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyB0aW1lcl9pbnRlcnJ1cHQgPSA1LCBwZXJmX2ludGVycnVwdCA9IDU7CkBAIC0xMDUsNDQgKzkwLDM0IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2ljX2lycV9zdGFydHVwKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CiAJaXJxIC09IF9pcnFiYXNlOwotCUdJQ19TRVRfSU5UUl9NQVNLKGlycSwgMSk7CisJcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CisJR0lDX1NFVF9JTlRSX01BU0soaXJxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZ2ljX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKLSNpZiBnaWNfd2VkZ2ViMmJvayA9PSAwCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSNlbmRpZgotCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOwogCWlycSAtPSBfaXJxYmFzZTsKLQlHSUNfQ0xSX0lOVFJfTUFTSyhpcnEsIDEpOworCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOworCUdJQ19DTFJfSU5UUl9NQVNLKGlycSk7CiAKLQlpZiAoX2ludHJtYXBbaXJxXS50cmlndHlwZSA9PSBHSUNfVFJJR19FREdFKSB7Ci0JCWlmICghZ2ljX3dlZGdlYjJib2spCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKKwlpZiAoZ2ljX2lycV9mbGFnc1tpcnFdICYgR0lDX0lSUV9GTEFHX0VER0UpCiAJCUdJQ1dSSVRFKEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfV0VER0UpLCBpcnEpOwotCQlpZiAoIWdpY193ZWRnZWIyYm9rKSB7Ci0JCQkodm9pZCkgR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KIH0KIAogc3RhdGljIHZvaWQgZ2ljX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CiAJaXJxIC09IF9pcnFiYXNlOwotCUdJQ19DTFJfSU5UUl9NQVNLKGlycSwgMSk7CisJcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CisJR0lDX0NMUl9JTlRSX01BU0soaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgZ2ljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKIAlpcnEgLT0gX2lycWJhc2U7Ci0JR0lDX1NFVF9JTlRSX01BU0soaXJxLCAxKTsKKwlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKKwlHSUNfU0VUX0lOVFJfTUFTSyhpcnEpOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTU1LDkgKzEzMCw4IEBACiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAlpbnQJCWk7CiAKLQlwcl9kZWJ1ZyhLRVJOX0RFQlVHICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKIAlpcnEgLT0gX2lycWJhc2U7Ci0KKwlwcl9kZWJ1ZyhLRVJOX0RFQlVHICIlcyglZCkgY2FsbGVkXG4iLCBfX2Z1bmNfXywgaXJxKTsKIAljcHVtYXNrX2FuZCgmdG1wLCBjcHVtYXNrLCBjcHVfb25saW5lX21hc2spOwogCWlmIChjcHVzX2VtcHR5KHRtcCkpCiAJCXJldHVybiAtMTsKQEAgLTE2OCwxMyArMTQyLDYgQEAKIAkJLyogUmUtcm91dGUgdGhpcyBJUlEgKi8KIAkJR0lDX1NIX01BUF9UT19WUEVfU01BU0soaXJxLCBmaXJzdF9jcHUodG1wKSk7CiAKLQkJLyoKLQkJICogRklYTUU6IGFzc3VtcHRpb24gdGhhdCBfaW50cm1hcCBpcyBvcmRlcmVkIGFuZCBoYXMgbm8gaG9sZXMKLQkJICovCi0KLQkJLyogVXBkYXRlIHRoZSBpbnRyX21hcCAqLwotCQlfaW50cm1hcFtpcnFdLmNwdW51bSA9IGZpcnN0X2NwdSh0bXApOwotCiAJCS8qIFVwZGF0ZSB0aGUgcGNwdV9tYXNrcyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQogCQkJY2xlYXJfYml0KGlycSwgcGNwdV9tYXNrc1tpXS5wY3B1X21hc2spOwpAQCAtMjAxLDggKzE2OCw5IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pbnRyKHVuc2lnbmVkIGludCBpbnRyLCB1bnNpZ25lZCBpbnQgY3B1LAotCXVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBwb2xhcml0eSwgdW5zaWduZWQgaW50IHRyaWd0eXBlKQorc3RhdGljIHZvaWQgX19pbml0IGdpY19zZXR1cF9pbnRyKHVuc2lnbmVkIGludCBpbnRyLCB1bnNpZ25lZCBpbnQgY3B1LAorCXVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBwb2xhcml0eSwgdW5zaWduZWQgaW50IHRyaWd0eXBlLAorCXVuc2lnbmVkIGludCBmbGFncykKIHsKIAkvKiBTZXR1cCBJbnRyIHRvIFBpbiBtYXBwaW5nICovCiAJaWYgKHBpbiAmIEdJQ19NQVBfVE9fTk1JX01TSykgewpAQCAtMjI3LDM4ICsxOTUsNDMgQEAKIAlHSUNfU0VUX1RSSUdHRVIoaW50ciwgdHJpZ3R5cGUpOwogCiAJLyogSW5pdCBJbnRyIE1hc2tzICovCi0JR0lDX1NFVF9JTlRSX01BU0soaW50ciwgMCk7CisJR0lDX0NMUl9JTlRSX01BU0soaW50cik7CisJLyogSW5pdGlhbGlzZSBwZXItY3B1IEludGVycnVwdCBzb2Z0d2FyZSBtYXNrcyAqLworCWlmIChmbGFncyAmIEdJQ19GTEFHX0lQSSkKKwkJc2V0X2JpdChpbnRyLCBwY3B1X21hc2tzW2NwdV0ucGNwdV9tYXNrKTsKKwlpZiAoZmxhZ3MgJiBHSUNfRkxBR19UUkFOU1BBUkVOVCkKKwkJR0lDX1NFVF9JTlRSX01BU0soaW50cik7CisJaWYgKHRyaWd0eXBlID09IEdJQ19UUklHX0VER0UpCisJCWdpY19pcnFfZmxhZ3NbaW50cl0gfD0gR0lDX0lSUV9GTEFHX0VER0U7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBnaWNfYmFzaWNfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGdpY19iYXNpY19pbml0KGludCBudW1pbnRycywgaW50IG51bXZwZXMsCisJCQlzdHJ1Y3QgZ2ljX2ludHJfbWFwICppbnRybWFwLCBpbnQgbWFwc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY3B1OwogCiAJLyogU2V0dXAgZGVmYXVsdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgR0lDX05VTV9JTlRSUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG51bWludHJzOyBpKyspIHsKIAkJR0lDX1NFVF9QT0xBUklUWShpLCBHSUNfUE9MX1BPUyk7CiAJCUdJQ19TRVRfVFJJR0dFUihpLCBHSUNfVFJJR19MRVZFTCk7Ci0JCUdJQ19TRVRfSU5UUl9NQVNLKGksIDApOworCQlHSUNfQ0xSX0lOVFJfTUFTSyhpKTsKKwkJaWYgKGkgPCBHSUNfTlVNX0lOVFJTKQorCQkJZ2ljX2lycV9mbGFnc1tpXSA9IDA7CiAJfQogCiAJLyogU2V0dXAgc3BlY2lmaWNzICovCi0JZm9yIChpID0gMDsgaSA8IF9tYXBzaXplOyBpKyspIHsKLQkJY3B1ID0gX2ludHJtYXBbaV0uY3B1bnVtOworCWZvciAoaSA9IDA7IGkgPCBtYXBzaXplOyBpKyspIHsKKwkJY3B1ID0gaW50cm1hcFtpXS5jcHVudW07CiAJCWlmIChjcHUgPT0gWCkKIAkJCWNvbnRpbnVlOwotCi0JCWlmIChjcHUgPT0gMCAmJiBpICE9IDAgJiYgX2ludHJtYXBbaV0uaW50cm51bSA9PSAwICYmCi0JCQkJCV9pbnRybWFwW2ldLmlwaWZsYWcgPT0gMCkKKwkJaWYgKGNwdSA9PSAwICYmIGkgIT0gMCAmJiBpbnRybWFwW2ldLmZsYWdzID09IDApCiAJCQljb250aW51ZTsKLQotCQlzZXR1cF9pbnRyKF9pbnRybWFwW2ldLmludHJudW0sCi0JCQkJX2ludHJtYXBbaV0uY3B1bnVtLAotCQkJCV9pbnRybWFwW2ldLnBpbiwKLQkJCQlfaW50cm1hcFtpXS5wb2xhcml0eSwKLQkJCQlfaW50cm1hcFtpXS50cmlndHlwZSk7Ci0JCS8qIEluaXRpYWxpc2UgcGVyLWNwdSBJbnRlcnJ1cHQgc29mdHdhcmUgbWFza3MgKi8KLQkJaWYgKF9pbnRybWFwW2ldLmlwaWZsYWcpCi0JCQlzZXRfYml0KF9pbnRybWFwW2ldLmludHJudW0sIHBjcHVfbWFza3NbY3B1XS5wY3B1X21hc2spOworCQlnaWNfc2V0dXBfaW50cihpLAorCQkJaW50cm1hcFtpXS5jcHVudW0sCisJCQlpbnRybWFwW2ldLnBpbiwKKwkJCWludHJtYXBbaV0ucG9sYXJpdHksCisJCQlpbnRybWFwW2ldLnRyaWd0eXBlLAorCQkJaW50cm1hcFtpXS5mbGFncyk7CiAJfQogCiAJdnBlX2xvY2FsX3NldHVwKG51bXZwZXMpOwpAQCAtMjczLDEyICsyNDYsMTEgQEAKIAkJICAgICB1bnNpZ25lZCBpbnQgaXJxYmFzZSkKIHsKIAl1bnNpZ25lZCBpbnQgZ2ljY29uZmlnOworCWludCBudW12cGVzLCBudW1pbnRyczsKIAogCV9naWNfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX25vY2FjaGUoZ2ljX2Jhc2VfYWRkciwKIAkJCQkJCSAgICBnaWNfYWRkcnNwYWNlX3NpemUpOwogCV9pcnFiYXNlID0gaXJxYmFzZTsKLQlfaW50cm1hcCA9IGludHJfbWFwOwotCV9tYXBzaXplID0gaW50cl9tYXBfc2l6ZTsKIAogCUdJQ1JFQUQoR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpLCBnaWNjb25maWcpOwogCW51bWludHJzID0gKGdpY2NvbmZpZyAmIEdJQ19TSF9DT05GSUdfTlVNSU5UUlNfTVNLKSA+PgpAQCAtMjkwLDUgKzI2Miw1IEBACiAKIAlwcl9kZWJ1ZygiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAKLQlnaWNfYmFzaWNfaW5pdCgpOworCWdpY19iYXNpY19pbml0KG51bWludHJzLCBudW12cGVzLCBpbnRyX21hcCwgaW50cl9tYXBfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2tzcGQuYyBiL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCmluZGV4IGYyMzk3ZjAuLmFkNGUwMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCkBAIC0xNzIsMTMgKzE3MiwyMCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHNwX3NldGZzdWlkZ2lkKCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKK3N0YXRpYyBpbnQgc3Bfc2V0ZnN1aWRnaWQodWlkX3QgdWlkLCBnaWRfdCBnaWQpCiB7Ci0JY3VycmVudC0+Y3JlZC0+ZnN1aWQgPSB1aWQ7Ci0JY3VycmVudC0+Y3JlZC0+ZnNnaWQgPSBnaWQ7CisJc3RydWN0IGNyZWQgKm5ldzsKIAotCWtleV9mc3VpZF9jaGFuZ2VkKGN1cnJlbnQpOwotCWtleV9mc2dpZF9jaGFuZ2VkKGN1cnJlbnQpOworCW5ldyA9IHByZXBhcmVfY3JlZHMoKTsKKwlpZiAoIW5ldykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwluZXctPmZzdWlkID0gdWlkOworCW5ldy0+ZnNnaWQgPSBnaWQ7CisKKwljb21taXRfY3JlZHMobmV3KTsKKworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTk2LDcgKzIwMyw3IEBACiAJbW1fc2VnbWVudF90IG9sZF9mczsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAlzdHJ1Y3QgdGltZXpvbmUgdHo7Ci0JaW50IGNtZDsKKwlpbnQgZXJyLCBjbWQ7CiAKIAljaGFyICp2Y3dkOwogCWludCBzaXplOwpAQCAtMjI1LDggKzIzMiwxMSBAQAogCS8qIFJ1biB0aGUgc3lzY2FsbCBhdCB0aGUgcHJpdmlsZWdlIG9mIHRoZSB1c2VyIHdobyBsb2FkZWQgdGhlCiAJICAgU1AgcHJvZ3JhbSAqLwogCi0JaWYgKHZwZV9nZXR1aWQodGNsaW1pdCkpCi0JCXNwX3NldGZzdWlkZ2lkKHZwZV9nZXR1aWQodGNsaW1pdCksIHZwZV9nZXRnaWQodGNsaW1pdCkpOworCWlmICh2cGVfZ2V0dWlkKHRjbGltaXQpKSB7CisJCWVyciA9IHNwX3NldGZzdWlkZ2lkKHZwZV9nZXR1aWQodGNsaW1pdCksIHZwZV9nZXRnaWQodGNsaW1pdCkpOworCQlpZiAoIWVycikKKwkJCXByX2VycigiQ2hhbmdlIG9mIGNyZWRzIGZhaWxlZFxuIik7CisJfQogCiAJc3dpdGNoIChzYy5jbWQpIHsKIAkvKiBuZWVkcyB0aGUgZmxhZ3MgYXJndW1lbnQgdHJhbnNsYXRpbmcgZnJvbSBTREUga2l0IHRvCkBAIC0yODMsOCArMjkzLDExIEBACiAJCWJyZWFrOwogIAl9IC8qIHN3aXRjaCAqLwogCi0JaWYgKHZwZV9nZXR1aWQodGNsaW1pdCkpCi0JCXNwX3NldGZzdWlkZ2lkKCAwLCAwKTsKKwlpZiAodnBlX2dldHVpZCh0Y2xpbWl0KSkgeworCQllcnIgPSBzcF9zZXRmc3VpZGdpZCgwLCAwKTsKKwkJaWYgKCFlcnIpCisJCQlwcl9lcnIoInJlc3RvcmluZyBvbGQgY3JlZHMgZmFpbGVkXG4iKTsKKwl9CiAKIAlvbGRfZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggNjI0MmJjNi4uYjc3ZmVmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTQyOCwzICs0MjgsOSBAQAogCXJldHVybiBkb19mb3JrKGNsb25lX2ZsYWdzLCBuZXdzcCwgJnJlZ3MsIDAsCiAJICAgICAgICAgICAgICAgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyKTsKIH0KKworYXNtbGlua2FnZSBsb25nIHN5czMyX2xvb2t1cF9kY29va2llKHUzMiBhMCwgdTMyIGExLCBjaGFyIF9fdXNlciAqYnVmLAorCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN5c19sb29rdXBfZGNvb2tpZShtZXJnZV82NChhMCwgYTEpLCBidWYsIGxlbik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3J0bHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCmluZGV4IGExMGViZmQuLjM2NGYwNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCkBAIC03Miw4ICs3Miw5IEBACiAqLwogc3RhdGljIGlycXJldHVybl90IHJ0bHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgdnBlZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHZwZWZsYWdzOwogCiAJLyogT3VnaHQgbm90IHRvIGJlIHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgU01UQyBidWlsZHMgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0zOTIsMjAgKzM5MywxMiBAQAogCiBzdGF0aWMgaW50IGZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCWludCBlcnI7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCWVyciA9IHJ0bHhfb3BlbihtaW5vciwgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSA/IDAgOiAxKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcnRseF9vcGVuKGltaW5vcihpbm9kZSksIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyAwIDogMSk7CiB9CiAKIHN0YXRpYyBpbnQgZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0KLQlyZXR1cm4gcnRseF9yZWxlYXNlKG1pbm9yKTsKKwlyZXR1cm4gcnRseF9yZWxlYXNlKGltaW5vcihpbm9kZSkpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbGVfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggOWJiZjk3Ny4uMTRkZGU0YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJUFRSCXN5c19pb19zdWJtaXQKIAlQVFIJc3lzX2lvX2NhbmNlbAkJCS8qIDQyNDUgKi8KIAlQVFIJc3lzX2V4aXRfZ3JvdXAKLQlQVFIJc3lzX2xvb2t1cF9kY29va2llCisJUFRSCXN5czMyX2xvb2t1cF9kY29va2llCiAJUFRSCXN5c19lcG9sbF9jcmVhdGUKIAlQVFIJc3lzX2Vwb2xsX2N0bAogCVBUUglzeXNfZXBvbGxfd2FpdAkJCS8qIDQyNTAgKi8KQEAgLTUwNSw3ICs1MDUsNyBAQAogCVBUUglzeXNfZmNobW9kYXQKIAlQVFIJc3lzX2ZhY2Nlc3NhdAkJCS8qIDQzMDAgKi8KIAlQVFIJY29tcGF0X3N5c19wc2VsZWN0NgotCVBUUglzeXNfcHBvbGwKKwlQVFIJY29tcGF0X3N5c19wcG9sbAogCVBUUglzeXNfdW5zaGFyZQogCVBUUglzeXNfc3BsaWNlCiAJUFRSCXN5czMyX3N5bmNfZmlsZV9yYW5nZQkJLyogNDMwNSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKaW5kZXggNGViMTA2Yy4uZTcyZTY4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KQEAgLTEyOCwxOSArMTI3LDYgQEAKIAljcHVfaWRsZSgpOwogfQogCi12b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQotewotCW1wX29wcy0+c2VuZF9pcGlfbWFzayhtYXNrLCBTTVBfQ0FMTF9GVU5DVElPTik7Ci19Ci0KLS8qCi0gKiBXZSByZXVzZSB0aGUgc2FtZSB2ZWN0b3IgZm9yIHRoZSBzaW5nbGUgSVBJCi0gKi8KLXZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KQotewotCW1wX29wcy0+c2VuZF9pcGlfbWFzayhjcHVtYXNrX29mX2NwdShjcHUpLCBTTVBfQ0FMTF9GVU5DVElPTik7Ci19Ci0KIC8qCiAgKiBDYWxsIGludG8gYm90aCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFzIHdlIHNoYXJlIHRoZSBJUEkgZm9yIHRoZW0KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwppbmRleCA2NzE1M2EwLi4yNDYzMGZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwpAQCAtNzUsNyArNzUsNiBAQAogCiBhc2lkdXNlIHNtdGNfbGl2ZV9hc2lkW01BWF9TTVRDX1RMQlNdW01BWF9TTVRDX0FTSURTXTsKIAotCiAvKgogICogTnVtYmVyIG9mIEludGVyUHJvY2Vzc29yIEludGVycnVwdCAoSVBJKSBtZXNzYWdlIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKICAqLwpAQCAtMzg4LDYgKzM4Nyw3IEBACiAJCUlQSVFbaV0uaGVhZCA9IElQSVFbaV0udGFpbCA9IE5VTEw7CiAJCXNwaW5fbG9ja19pbml0KCZJUElRW2ldLmxvY2spOwogCQlJUElRW2ldLmRlcHRoID0gMDsKKwkJSVBJUVtpXS5yZXNjaGVkX2ZsYWcgPSAwOyAvKiBObyByZXNjaGVkdWxlcyBxdWV1ZWQgaW5pdGlhbGx5ICovCiAJfQogCiAJLyogY3B1X2RhdGEgaW5kZXggc3RhcnRzIGF0IHplcm8gKi8KQEAgLTc0MSwxMSArNzQxLDI0IEBACiBzdGF0aWMgdm9pZCBzbXRjX2lwaV9xZHVtcCh2b2lkKQogewogCWludCBpOworCXN0cnVjdCBzbXRjX2lwaSAqdGVtcDsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTIDtpKyspIHsKLQkJcHJpbnRrKCJJUElRWyVkXTogaGVhZCA9IDB4JXgsIHRhaWwgPSAweCV4LCBkZXB0aCA9ICVkXG4iLAorCQlwcl9pbmZvKCJJUElRWyVkXTogaGVhZCA9IDB4JXgsIHRhaWwgPSAweCV4LCBkZXB0aCA9ICVkXG4iLAogCQkJaSwgKHVuc2lnbmVkKUlQSVFbaV0uaGVhZCwgKHVuc2lnbmVkKUlQSVFbaV0udGFpbCwKIAkJCUlQSVFbaV0uZGVwdGgpOworCQl0ZW1wID0gSVBJUVtpXS5oZWFkOworCisJCXdoaWxlICh0ZW1wICE9IElQSVFbaV0udGFpbCkgeworCQkJcHJfZGVidWcoIiVkICVkICVkOiAiLCB0ZW1wLT50eXBlLCB0ZW1wLT5kZXN0LAorCQkJICAgICAgIChpbnQpdGVtcC0+YXJnKTsKKyNpZmRlZglTTVRDX0lQSV9ERUJVRworCQkgICAgcHJfZGVidWcoIiV1ICVsdVxuIiwgdGVtcC0+c2VuZGVyLCB0ZW1wLT5zdGFtcCk7CisjZWxzZQorCQkgICAgcHJfZGVidWcoIlxuIik7CisjZW5kaWYKKwkJICAgIHRlbXAgPSB0ZW1wLT5mbGluazsKKwkJfQogCX0KIH0KIApAQCAtNzg0LDExICs3OTcsMTYgQEAKIAlpbnQgbXRmbGFnczsKIAl1bnNpZ25lZCBsb25nIHRjcmVzdGFydDsKIAlleHRlcm4gdm9pZCByNGtfd2FpdF9pcnFvZmYodm9pZCksIF9fcGFzdHdhaXQodm9pZCk7CisJaW50IHNldF9yZXNjaGVkX2ZsYWcgPSAodHlwZSA9PSBMSU5VWF9TTVBfSVBJICYmCisJCQkJYWN0aW9uID09IFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGKTsKIAogCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CiAJCXByaW50aygiQ2Fubm90IFNlbmQgSVBJIHRvIHNlbGYhXG4iKTsKIAkJcmV0dXJuOwogCX0KKwlpZiAoc2V0X3Jlc2NoZWRfZmxhZyAmJiBJUElRW2NwdV0ucmVzY2hlZF9mbGFnICE9IDApCisJCXJldHVybjsgLyogVGhlcmUgaXMgYSByZXNjaGVkdWxlIHF1ZXVlZCBhbHJlYWR5ICovCisKIAkvKiBTZXQgdXAgYSBkZXNjcmlwdG9yLCB0byBiZSBkZWxpdmVyZWQgZWl0aGVyIHByb21wdGx5IG9yIHF1ZXVlZCAqLwogCXBpcGkgPSBzbXRjX2lwaV9kcSgmZnJlZUlQSXEpOwogCWlmIChwaXBpID09IE5VTEwpIHsKQEAgLTgwMSw2ICs4MTksNyBAQAogCXBpcGktPmRlc3QgPSBjcHU7CiAJaWYgKGNwdV9kYXRhW2NwdV0udnBlX2lkICE9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udnBlX2lkKSB7CiAJCS8qIElmIG5vdCBvbiBzYW1lIFZQRSwgZW5xdWV1ZSBhbmQgc2VuZCBjcm9zcy1WUEUgaW50ZXJydXB0ICovCisJCUlQSVFbY3B1XS5yZXNjaGVkX2ZsYWcgfD0gc2V0X3Jlc2NoZWRfZmxhZzsKIAkJc210Y19pcGlfbnEoJklQSVFbY3B1XSwgcGlwaSk7CiAJCUxPQ0tfQ09SRV9QUkEoKTsKIAkJc2V0dGMoY3B1X2RhdGFbY3B1XS50Y19pZCk7CkBAIC04NDcsNiArODY2LDcgQEAKIAkJCSAqLwogCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDApOwogCQkJVU5MT0NLX0NPUkVfUFJBKCk7CisJCQlJUElRW2NwdV0ucmVzY2hlZF9mbGFnIHw9IHNldF9yZXNjaGVkX2ZsYWc7CiAJCQlzbXRjX2lwaV9ucSgmSVBJUVtjcHVdLCBwaXBpKTsKIAkJfSBlbHNlIHsKIHBvc3RkaXJlY3Q6CkBAIC05OTYsMTIgKzEwMTYsMTUgQEAKIAkJICogYWxyZWFkeSBlbmFibGVkLgogCQkgKi8KIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCiAJCXNwaW5fbG9jaygmcS0+bG9jayk7CiAJCXBpcGkgPSBfX3NtdGNfaXBpX2RxKHEpOwogCQlzcGluX3VubG9jaygmcS0+bG9jayk7Ci0JCWlmIChwaXBpICE9IE5VTEwpCisJCWlmIChwaXBpICE9IE5VTEwpIHsKKwkJCWlmIChwaXBpLT50eXBlID09IExJTlVYX1NNUF9JUEkgJiYKKwkJCSAgICAoaW50KXBpcGktPmFyZyA9PSBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRikKKwkJCQlJUElRW2NwdV0ucmVzY2hlZF9mbGFnID0gMDsKIAkJCWlwaV9kZWNvZGUocGlwaSk7CisJCX0KIAkJLyoKIAkJICogVGhlIHVzZSBvZiB0aGUgX19yYXdfbG9jYWwgcmVzdG9yZSBpc24ndAogCQkgKiBhcyBvYnZpb3VzbHkgbmVjZXNzYXJ5IGhlcmUgYXMgaW4gc210Y19pcGlfcmVwbGF5KCksCkBAIC0xMDgyLDYgKzExMDUsOSBAQAogCQkJCSAqIHdpdGggaW50ZXJydXB0cyBvZmYKIAkJCQkgKi8KIAkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQkJaWYgKHBpcGktPnR5cGUgPT0gTElOVVhfU01QX0lQSSAmJgorCQkJCSAgICAoaW50KXBpcGktPmFyZyA9PSBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRikKKwkJCQkJSVBJUVtjcHVdLnJlc2NoZWRfZmxhZyA9IDA7CiAJCQkJaXBpX2RlY29kZShwaXBpKTsKIAkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCQl9CkBAIC0xMDk4LDkgKzExMjQsOCBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfaXBpID0gewogCS5oYW5kbGVyCT0gaXBpX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKLQkubmFtZQkJPSAiU01UQ19JUEkiLAotCS5mbGFncwkJPSBJUlFGX1BFUkNQVQorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLm5hbWUJCT0gIlNNVENfSVBJIgogfTsKIAogc3RhdGljIHZvaWQgc2V0dXBfY3Jvc3NfdnBlX2ludGVycnVwdHModW5zaWduZWQgaW50IG52cGUpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NwcmFtLmMgYi9hcmNoL21pcHMva2VybmVsL3NwcmFtLmMKaW5kZXggNmRkYjUwNy4uMTgyMWQxMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zcHJhbS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3ByYW0uYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogCi0jaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xOTgsOCArMTk3LDcgQEAKIAkJb2Zmc2V0ICs9IDIgKiBTUFJBTV9UQUdfU1RSSURFOwogCX0KIH0KLQotX19jcHVpbml0IHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpCit2b2lkIF9fY3B1aW5pdCBzcHJhbV9jb25maWcodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1aW5mb19taXBzICpjID0gJmN1cnJlbnRfY3B1X2RhdGE7CiAJdW5zaWduZWQgaW50IGNvbmZpZzA7CkBAIC0yMDgsNiArMjA2LDcgQEAKIAljYXNlIENQVV8yNEs6CiAJY2FzZSBDUFVfMzRLOgogCWNhc2UgQ1BVXzc0SzoKKwljYXNlIENQVV8xMDA0SzoKIAkJY29uZmlnMCA9IHJlYWRfYzBfY29uZmlnKCk7CiAJCS8qIEZJWE1FOiBhZGRyZXNzZXMgYXJlIE1hbHRhIHNwZWNpZmljICovCiAJCWlmIChjb25maWcwICYgKDE8PDI0KSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDliZjBlM2QuLjE2MmIyOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTExLDE1ICsxMSwxNSBAQAogCW5vdGUgUFRfTk9URSBGTEFHUyg0KTsJLyogUl9fICovCiB9CiAKLWlmZGVmIENPTkZJR18zMkJJVAotCWlmZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgorI2lmZGVmIENPTkZJR18zMkJJVAorCSNpZmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KIAkJamlmZmllcyAgPSBqaWZmaWVzXzY0OwotCWVsc2UKKwkjZWxzZQogCQlqaWZmaWVzICA9IGppZmZpZXNfNjQgKyA0OwotCWVuZGlmCi1lbHNlCisJI2VuZGlmCisjZWxzZQogCWppZmZpZXMgID0gamlmZmllc182NDsKLWVuZGlmCisjZW5kaWYKIAogU0VDVElPTlMKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCmluZGV4IGViNmM0YzUuLjYwNDc3NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwpAQCAtMTQ0LDE0ICsxNDQsMTUgQEAKIH07CiAKIHN0cnVjdCB7Ci0JLyogVmlydHVhbCBwcm9jZXNzaW5nIGVsZW1lbnRzICovCi0Jc3RydWN0IGxpc3RfaGVhZCB2cGVfbGlzdDsKLQotCS8qIFRocmVhZCBjb250ZXh0cyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdGNfbGlzdDsKKwlzcGlubG9ja190IHZwZV9saXN0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCB2cGVfbGlzdDsJLyogVmlydHVhbCBwcm9jZXNzaW5nIGVsZW1lbnRzICovCisJc3BpbmxvY2tfdCB0Y19saXN0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCB0Y19saXN0OwkvKiBUaHJlYWQgY29udGV4dHMgKi8KIH0gdnBlY29udHJvbCA9IHsKLQkudnBlX2xpc3QgPSBMSVNUX0hFQURfSU5JVCh2cGVjb250cm9sLnZwZV9saXN0KSwKLQkudGNfbGlzdCA9IExJU1RfSEVBRF9JTklUKHZwZWNvbnRyb2wudGNfbGlzdCkKKwkudnBlX2xpc3RfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkudnBlX2xpc3QJPSBMSVNUX0hFQURfSU5JVCh2cGVjb250cm9sLnZwZV9saXN0KSwKKwkudGNfbGlzdF9sb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELAorCS50Y19saXN0CT0gTElTVF9IRUFEX0lOSVQodnBlY29udHJvbC50Y19saXN0KQogfTsKIAogc3RhdGljIHZvaWQgcmVsZWFzZV9wcm9nbWVtKHZvaWQgKnB0cik7CkBAIC0xNTksMjggKzE2MCwzOCBAQAogLyogZ2V0IHRoZSB2cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWlub3IgKi8KIHN0YXRpYyBzdHJ1Y3QgdnBlICpnZXRfdnBlKGludCBtaW5vcikKIHsKLQlzdHJ1Y3QgdnBlICp2OworCXN0cnVjdCB2cGUgKnJlcywgKnY7CiAKIAlpZiAoIWNwdV9oYXNfbWlwc210KQogCQlyZXR1cm4gTlVMTDsKIAorCXJlcyA9IE5VTEw7CisJc3Bpbl9sb2NrKCZ2cGVjb250cm9sLnZwZV9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodiwgJnZwZWNvbnRyb2wudnBlX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHYtPm1pbm9yID09IG1pbm9yKQotCQkJcmV0dXJuIHY7CisJCWlmICh2LT5taW5vciA9PSBtaW5vcikgeworCQkJcmVzID0gdjsKKwkJCWJyZWFrOworCQl9CiAJfQorCXNwaW5fdW5sb2NrKCZ2cGVjb250cm9sLnZwZV9saXN0X2xvY2spOwogCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHJlczsKIH0KIAogLyogZ2V0IHRoZSB2cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWlub3IgKi8KIHN0YXRpYyBzdHJ1Y3QgdGMgKmdldF90YyhpbnQgaW5kZXgpCiB7Ci0Jc3RydWN0IHRjICp0OworCXN0cnVjdCB0YyAqcmVzLCAqdDsKIAorCXJlcyA9IE5VTEw7CisJc3Bpbl9sb2NrKCZ2cGVjb250cm9sLnRjX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmdnBlY29udHJvbC50Y19saXN0LCBsaXN0KSB7Ci0JCWlmICh0LT5pbmRleCA9PSBpbmRleCkKLQkJCXJldHVybiB0OworCQlpZiAodC0+aW5kZXggPT0gaW5kZXgpIHsKKwkJCXJlcyA9IHQ7CisJCQlicmVhazsKKwkJfQogCX0KKwlzcGluX3VubG9jaygmdnBlY29udHJvbC50Y19saXN0X2xvY2spOwogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xOTAsMTUgKzIwMSwxNyBAQAogewogCXN0cnVjdCB2cGUgKnY7CiAKLQlpZiAoKHYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnBlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwlpZiAoKHYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnBlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCX0KIAogCUlOSVRfTElTVF9IRUFEKCZ2LT50Yyk7CisJc3Bpbl9sb2NrKCZ2cGVjb250cm9sLnZwZV9saXN0X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJnYtPmxpc3QsICZ2cGVjb250cm9sLnZwZV9saXN0KTsKKwlzcGluX3VubG9jaygmdnBlY29udHJvbC52cGVfbGlzdF9sb2NrKTsKIAogCUlOSVRfTElTVF9IRUFEKCZ2LT5ub3RpZnkpOwogCXYtPm1pbm9yID0gbWlub3I7CisKIAlyZXR1cm4gdjsKIH0KIApAQCAtMjEyLDcgKzIyNSwxMCBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnRjLT50Yyk7CiAJdGMtPmluZGV4ID0gaW5kZXg7CisKKwlzcGluX2xvY2soJnZwZWNvbnRyb2wudGNfbGlzdF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZ0Yy0+bGlzdCwgJnZwZWNvbnRyb2wudGNfbGlzdCk7CisJc3Bpbl91bmxvY2soJnZwZWNvbnRyb2wudGNfbGlzdF9sb2NrKTsKIAogb3V0OgogCXJldHVybiB0YzsKQEAgLTIyNyw3ICsyNDMsNyBAQAogCWtmcmVlKHYpOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX210cmVncyh2b2lkKQorc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgZHVtcF9tdHJlZ3Modm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIApAQCAtMTA0OCwyMCArMTA2NCwxOSBAQAogCWVudW0gdnBlX3N0YXRlIHN0YXRlOwogCXN0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyAqbm90OwogCXN0cnVjdCB2cGUgKnY7Ci0JaW50IHJldCwgZXJyID0gMDsKKwlpbnQgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKIAlpZiAobWlub3IgIT0gaW1pbm9yKGlub2RlKSkgewogCQkvKiBhc3N1bWUgb25seSAxIGRldmljZSBhdCB0aGUgbW9tZW50LiAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBvbmx5IHZwZTEgaXMgc3VwcG9ydGVkXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7CisJCXByX3dhcm5pbmcoIlZQRSBsb2FkZXI6IG9ubHkgdnBlMSBpcyBzdXBwb3J0ZWRcbiIpOworCisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICgodiA9IGdldF92cGUodGNsaW1pdCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogdW5hYmxlIHRvIGdldCB2cGVcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKKwkJcHJfd2FybmluZygiVlBFIGxvYWRlcjogdW5hYmxlIHRvIGdldCB2cGVcbiIpOworCisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXN0YXRlID0geGNoZygmdi0+c3RhdGUsIFZQRV9TVEFURV9JTlVTRSk7CkBAIC0xMTAxLDggKzExMTYsNiBAQAogCXYtPnNoYXJlZF9wdHIgPSBOVUxMOwogCXYtPl9fc3RhcnQgPSAwOwogCi1vdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTk0LDE0ICsxNjA3LDE0IEBACiB7CiAJc3RydWN0IHZwZSAqdiwgKm47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodiwgbiwgJnZwZWNvbnRyb2wudnBlX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHYtPnN0YXRlICE9IFZQRV9TVEFURV9VTlVTRUQpIHsKLQkJCXJlbGVhc2VfdnBlKHYpOwotCQl9Ci0JfQotCiAJZGV2aWNlX2RlbCgmdnBlX2RldmljZSk7CiAJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3IsIG1vZHVsZV9uYW1lKTsKKworCS8qIE5vIGxvY2tpbmcgbmVlZGVkIGhlcmUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodiwgbiwgJnZwZWNvbnRyb2wudnBlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHYtPnN0YXRlICE9IFZQRV9TVEFURV9VTlVTRUQpCisJCQlyZWxlYXNlX3ZwZSh2KTsKKwl9CiB9CiAKIG1vZHVsZV9pbml0KHZwZV9tb2R1bGVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYwppbmRleCBmMzY4YzczLi5iMzJiNGEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMKQEAgLTU1LDcgKzU1LDYgQEAKIAkgKiBpbnQtaGFuZGxlciBpcyBub3Qgb24gYm9vdHN0cmFwCiAJICovCiAJY2xlYXJfYzBfc3RhdHVzKFNUMF9JTSB8IFNUMF9CRVYpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKIAkvKiBzZXR0aW5nIGlycSB0cmlnZ2VyIG1vZGUgKi8KIAlzZXRfaXJxX3RyaWdnZXJfbW9kZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jIGIvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jCmluZGV4IDg5MGY3NzkuLjQ1NGI1MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKQEAgLTE2MywzMyArMTYzLDM0IEBACiAKIC8qCiAgKiBJbiB0aGUgTGludXgga2VybmVsLCB3ZSBzdXBwb3J0IHNlbGVjdGlvbiBvZiBGUFIgZm9ybWF0IG9uIHRoZQotICogYmFzaXMgb2YgdGhlIFN0YXR1cy5GUiBiaXQuICBUaGlzIGRvZXMgaW1wbHkgdGhhdCwgaWYgYSBmdWxsIDMyCi0gKiBGUFJzIGFyZSBkZXNpcmVkLCB0aGVyZSBuZWVkcyB0byBiZSBhIGZsaXAtZmxvcCB0aGF0IGNhbiBiZSB3cml0dGVuCi0gKiB0byBvbmUgYXQgdGhhdCBiaXQgcG9zaXRpb24uICBJbiBhbnkgY2FzZSwgTzMyIE1JUFMgQUJJIHVzZXMKLSAqIG9ubHkgdGhlIGV2ZW4gRlBScyAoU3RhdHVzLkZSID0gMCkuCisgKiBiYXNpcyBvZiB0aGUgU3RhdHVzLkZSIGJpdC4gIElmIGFuIEZQVSBpcyBub3QgcHJlc2VudCwgdGhlIEZSIGJpdAorICogaXMgaGFyZHdpcmVkIHRvIHplcm8sIHdoaWNoIHdvdWxkIGltcGx5IGEgMzItYml0IEZQVSBldmVuIGZvcgorICogNjQtYml0IENQVXMuICBGb3IgNjQtYml0IGtlcm5lbHMgd2l0aCBubyBGUFUgd2UgdXNlIFRJRl8zMkJJVF9SRUdTCisgKiBhcyBhIHByb3h5IGZvciB0aGUgRlIgYml0IHNvIHRoYXQgYSA2NC1iaXQgRlBVIGlzIGVtdWxhdGVkLiAgSW4gYW55CisgKiBjYXNlLCBmb3IgYSAzMi1iaXQga2VybmVsIHdoaWNoIHVzZXMgdGhlIE8zMiBNSVBTIEFCSSwgb25seSB0aGUKKyAqIGV2ZW4gRlBScyBhcmUgdXNlZCAoU3RhdHVzLkZSID0gMCkuCiAgKi8KLQotI2RlZmluZSBDUDBfU1RBVFVTX0ZSX1NVUFBPUlQKLQotI2lmZGVmIENQMF9TVEFUVVNfRlJfU1VQUE9SVAotI2RlZmluZSBGUl9CSVQgU1QwX0ZSCitzdGF0aWMgaW5saW5lIGludCBjb3AxXzY0Yml0KHN0cnVjdCBwdF9yZWdzICp4Y3ApCit7CisJaWYgKGNwdV9oYXNfZnB1KQorCQlyZXR1cm4geGNwLT5jcDBfc3RhdHVzICYgU1QwX0ZSOworI2lmZGVmIENPTkZJR182NEJJVAorCXJldHVybiAhdGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVRfUkVHUyk7CiAjZWxzZQotI2RlZmluZSBGUl9CSVQgMAorCXJldHVybiAwOwogI2VuZGlmCit9CiAKLSNkZWZpbmUgU0lGUk9NUkVHKHNpLCB4KSAoKHNpKSA9IFwKLQkJCSh4Y3AtPmNwMF9zdGF0dXMgJiBGUl9CSVQpIHx8ICEoeCAmIDEpID8gXAotCQkJKGludCljdHgtPmZwclt4XSA6IFwKLQkJCShpbnQpKGN0eC0+ZnByW3ggJiB+MV0gPj4gMzIgKSkKLSNkZWZpbmUgU0lUT1JFRyhzaSwgeCkJKGN0eC0+ZnByW3ggJiB+KCh4Y3AtPmNwMF9zdGF0dXMgJiBGUl9CSVQpID09IDApXSA9IFwKLQkJCSh4Y3AtPmNwMF9zdGF0dXMgJiBGUl9CSVQpIHx8ICEoeCAmIDEpID8gXAorI2RlZmluZSBTSUZST01SRUcoc2ksIHgpICgoc2kpID0gY29wMV82NGJpdCh4Y3ApIHx8ICEoeCAmIDEpID8gXAorCQkJKGludCljdHgtPmZwclt4XSA6IChpbnQpKGN0eC0+ZnByW3ggJiB+MV0gPj4gMzIpKQorCisjZGVmaW5lIFNJVE9SRUcoc2ksIHgpCShjdHgtPmZwclt4ICYgfihjb3AxXzY0Yml0KHhjcCkgPT0gMCldID0gXAorCQkJY29wMV82NGJpdCh4Y3ApIHx8ICEoeCAmIDEpID8gXAogCQkJY3R4LT5mcHJbeCAmIH4xXSA+PiAzMiA8PCAzMiB8ICh1MzIpKHNpKSA6IFwKIAkJCWN0eC0+ZnByW3ggJiB+MV0gPDwgMzIgPj4gMzIgfCAodTY0KShzaSkgPDwgMzIpCiAKLSNkZWZpbmUgRElGUk9NUkVHKGRpLCB4KSAoKGRpKSA9IFwKLQkJCWN0eC0+ZnByW3ggJiB+KCh4Y3AtPmNwMF9zdGF0dXMgJiBGUl9CSVQpID09IDApXSkKLSNkZWZpbmUgRElUT1JFRyhkaSwgeCkJKGN0eC0+ZnByW3ggJiB+KCh4Y3AtPmNwMF9zdGF0dXMgJiBGUl9CSVQpID09IDApXSBcCi0JCQk9IChkaSkpCisjZGVmaW5lIERJRlJPTVJFRyhkaSwgeCkgKChkaSkgPSBjdHgtPmZwclt4ICYgfihjb3AxXzY0Yml0KHhjcCkgPT0gMCldKQorI2RlZmluZSBESVRPUkVHKGRpLCB4KQkoY3R4LT5mcHJbeCAmIH4oY29wMV82NGJpdCh4Y3ApID09IDApXSA9IChkaSkpCiAKICNkZWZpbmUgU1BGUk9NUkVHKHNwLCB4KSBTSUZST01SRUcoKHNwKS5iaXRzLCB4KQogI2RlZmluZSBTUFRPUkVHKHNwLCB4KQlTSVRPUkVHKChzcCkuYml0cywgeCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9zaW1wbGUuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9zaW1wbGUuYwppbmRleCAxYzU1NWU2Li5kOWFlMWRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfc2ltcGxlLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2RwX3NpbXBsZS5jCkBAIC02Miw4ICs2Miw2IEBACiAJCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdCh5LCAibmVnIik7CiAJfQogCi0JaWYgKGllZWU3NTRkcF9pc25hbih4KSkJLyogYnV0IG5vdCBpbmZpbml0eSAqLwotCQlyZXR1cm4gaWVlZTc1NGRwX25hbnhjcHQoeCwgIm5lZyIsIHgpOwogCXJldHVybiB4OwogfQogCkBAIC03NiwxNSArNzQsMTIgQEAKIAlDTEVBUkNYOwogCUZMVVNIWERQOwogCisJLyogQ2xlYXIgc2lnbiBBTFdBWVMsIGlycmVzcGVjdGl2ZSBvZiBOYU4gKi8KKwlEUFNJR04oeCkgPSAwOworCiAJaWYgKHhjID09IElFRUU3NTRfQ0xBU1NfU05BTikgewotCQlTRVRDWChJRUVFNzU0X0lOVkFMSURfT1BFUkFUSU9OKTsKLQkJcmV0dXJuIGllZWU3NTRkcF9uYW54Y3B0KGllZWU3NTRkcF9pbmRlZigpLCAibmVnIik7CisJCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdChpZWVlNzU0ZHBfaW5kZWYoKSwgImFicyIpOwogCX0KIAotCWlmIChpZWVlNzU0ZHBfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRkcF9uYW54Y3B0KHgsICJhYnMiLCB4KTsKLQotCS8qIHF1aWNrIGZpeCB1cCAqLwotCURQU0lHTih4KSA9IDA7CiAJcmV0dXJuIHg7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvc3Bfc2ltcGxlLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3Bfc2ltcGxlLmMKaW5kZXggNzcwZjBmNC4uMzE3NTQ3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L3NwX3NpbXBsZS5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9zaW1wbGUuYwpAQCAtNjIsOCArNjIsNiBAQAogCQlyZXR1cm4gaWVlZTc1NHNwX25hbnhjcHQoeSwgIm5lZyIpOwogCX0KIAotCWlmIChpZWVlNzU0c3BfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRzcF9uYW54Y3B0KHgsICJuZWciLCB4KTsKIAlyZXR1cm4geDsKIH0KIApAQCAtNzYsMTUgKzc0LDEyIEBACiAJQ0xFQVJDWDsKIAlGTFVTSFhTUDsKIAorCS8qIENsZWFyIHNpZ24gQUxXQVlTLCBpcnJlc3BlY3RpdmUgb2YgTmFOICovCisJU1BTSUdOKHgpID0gMDsKKwogCWlmICh4YyA9PSBJRUVFNzU0X0NMQVNTX1NOQU4pIHsKLQkJU0VUQ1goSUVFRTc1NF9JTlZBTElEX09QRVJBVElPTik7CiAJCXJldHVybiBpZWVlNzU0c3BfbmFueGNwdChpZWVlNzU0c3BfaW5kZWYoKSwgImFicyIpOwogCX0KIAotCWlmIChpZWVlNzU0c3BfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRzcF9uYW54Y3B0KHgsICJhYnMiLCB4KTsKLQotCS8qIHF1aWNrIGZpeCB1cCAqLwotCVNQU0lHTih4KSA9IDA7CiAJcmV0dXJuIHg7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYyBiL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCmluZGV4IDdlNDhlNzYuLjkzNjdlMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCkBAIC05MCw2ICs5MCw5IEBACiB7CiAJdm9pZCAqcmV0OwogCisJaWYgKGRtYV9hbGxvY19mcm9tX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgJnJldCkpCisJCXJldHVybiByZXQ7CisKIAlnZnAgPSBtYXNzYWdlX2dmcF9mbGFncyhkZXYsIGdmcCk7CiAKIAlyZXQgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKGdmcCwgZ2V0X29yZGVyKHNpemUpKTsKQEAgLTEyMiw2ICsxMjUsMTAgQEAKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGUpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHZhZGRyOworCWludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKKworCWlmIChkbWFfcmVsZWFzZV9mcm9tX2NvaGVyZW50KGRldiwgb3JkZXIsIHZhZGRyKSkKKwkJcmV0dXJuOwogCiAJcGxhdF91bm1hcF9kbWFfbWVtKGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCAxNWFhMTkwLi44ZDFmNGYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgpAQCAtMTMyLDcgKzEzMywxMCBAQAogCWluY19wcmVlbXB0X2NvdW50KCk7CiAJaWR4ID0gKGFkZHIgPj4gUEFHRV9TSElGVCkgJiAoRklYX05fQ09MT1VSUyAtIDEpOwogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQlpZHggKz0gRklYX05fQ09MT1VSUyAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpZHggKz0gRklYX05fQ09MT1VSUyAqIHNtcF9wcm9jZXNzb3JfaWQoKSArCisJCShpbl9pbnRlcnJ1cHQoKSA/IChGSVhfTl9DT0xPVVJTICogTlJfQ1BVUykgOiAwKTsKKyNlbHNlCisJaWR4ICs9IGluX2ludGVycnVwdCgpID8gRklYX05fQ09MT1VSUyA6IDA7CiAjZW5kaWYKIAl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0NNQVBfRU5EIC0gaWR4KTsKIAlwdGUgPSBta19wdGUocGFnZSwgUEFHRV9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3NjLW1pcHMuYyBiL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMKaW5kZXggYjU1YzJkMS4uNWFiNWZhOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3NjLW1pcHMuYworKysgYi9hcmNoL21pcHMvbW0vc2MtbWlwcy5jCkBAIC0zMiw2ICszMiwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBtaXBzX3NjX2ludih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKKwl1bnNpZ25lZCBsb25nIGxzaXplID0gY3B1X3NjYWNoZV9saW5lX3NpemUoKTsKKwl1bnNpZ25lZCBsb25nIGFsbWFzayA9IH4obHNpemUgLSAxKTsKKworCWNhY2hlX29wKEhpdF9Xcml0ZWJhY2tfSW52X1NELCBhZGRyICYgYWxtYXNrKTsKKwljYWNoZV9vcChIaXRfV3JpdGViYWNrX0ludl9TRCwgKGFkZHIgKyBzaXplIC0gMSkgJiBhbG1hc2spOwogCWJsYXN0X2ludl9zY2FjaGVfcmFuZ2UoYWRkciwgYWRkciArIHNpemUpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtYW1vbi5jCmluZGV4IGRmOWU1MjYuLjQ2OWQ5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtYW1vbi5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtYW1vbi5jCkBAIC03MCwxMSArNzAsMTIgQEAKIAlsYXVuY2gtPnNwID0gc3A7CiAJbGF1bmNoLT5hMCA9IGEwOwogCi0JLyogTWFrZSBzdXJlIHRhcmdldCBzZWVzIHBhcmFtZXRlcnMgYmVmb3JlIHRoZSBnbyBiaXQgKi8KLQlzbXBfbWIoKTsKLQorCXNtcF93bWIoKTsgICAgICAgICAgICAgIC8qIFRhcmdldCBtdXN0IHNlZSBwYXJhbWV0ZXJzIGJlZm9yZSBnbyAqLwogCWxhdW5jaC0+ZmxhZ3MgfD0gTEFVTkNIX0ZHTzsKKwlzbXBfd21iKCk7ICAgICAgICAgICAgICAvKiBUYXJnZXQgbXVzdCBzZWUgZ28gYmVmb3JlIHdlIHBvbGwgICovCisKIAl3aGlsZSAoKGxhdW5jaC0+ZmxhZ3MgJiBMQVVOQ0hfRkdPTkUpID09IDApCiAJCTsKKwlzbXBfcm1iKCk7ICAgICAgLyogVGFyZ2V0IHdpbGwgYmUgdXBkYXRpbmcgZmxhZ3Mgc29vbiAqLwogCXByX2RlYnVnKCJsYXVuY2g6IGNwdSVkIGdvbmUhXG4iLCBjcHUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKaW5kZXggM2UwYTliMy4uNGMzZmNhMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJCWR1bW15ID0gQk9OSVRPX1BDSU1BUF9DRkc7CiAJCWlvYigpOyAgICAvKiBzeW5jICovCiAKLQkJaXJxID0gcmVhZGwoKHUzMiAqKV9wY2ljdHJsX2Jvbml0b19wY2ljZmcpOworCQlpcnEgPSBfX3Jhd19yZWFkbCgodTMyICopX3BjaWN0cmxfYm9uaXRvX3BjaWNmZyk7CiAJCWlvYigpOyAgICAvKiBzeW5jICovCiAJCWlycSAmPSAweGZmOwogCQlCT05JVE9fUENJTUFQX0NGRyA9IDA7CkBAIC0zNzksMzggKzM3OSw0MyBAQAogCiBzdGF0aWMgaW50IF9faW5pdGRhdGEgbXNjX25yX2VpY2lycXMgPSBBUlJBWV9TSVpFKG1zY19laWNpcnFtYXApOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAvKgogICogVGhpcyBHSUMgc3BlY2lmaWMgdGFidWxhciBhcnJheSBkZWZpbmVzIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIEV4dGVybmFsCiAgKiBJbnRlcnJ1cHRzIGFuZCBDUFVzL0NvcmUgSW50ZXJydXB0cy4gVGhlIG5hdHVyZSBvZiB0aGUgRXh0ZXJuYWwKICAqIEludGVycnVwdHMgaXMgYWxzbyBkZWZpbmVkIGhlcmUgLSBwb2xhcml0eS90cmlnZ2VyLgogICovCisKKyNkZWZpbmUgR0lDX0NQVV9OTUkgR0lDX01BUF9UT19OTUlfTVNLCiBzdGF0aWMgc3RydWN0IGdpY19pbnRyX21hcCBnaWNfaW50cl9tYXBbR0lDX05VTV9JTlRSU10gPSB7Ci0JeyBHSUNfRVhUX0lOVFIoMCksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDEpLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigyKSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMyksIAkwLAlHSUNfQ1BVX0lOVDAsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig0KSwgCTAsCUdJQ19DUFVfSU5UMSwJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDUpLCAJMCwJR0lDX0NQVV9JTlQyLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoNiksIAkwLAlHSUNfQ1BVX0lOVDMsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig3KSwgCTAsCUdJQ19DUFVfSU5UNCwJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDgpLCAJMCwJR0lDX0NQVV9JTlQzLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoOSksIAkwLAlHSUNfQ1BVX0lOVDMsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxMCksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDExKSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTIpLCAJMCwJR0lDX0NQVV9JTlQzLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTMpLCAJMCwJR0lDX01BUF9UT19OTUlfTVNLLAlHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxNCksIAkwLAlHSUNfTUFQX1RPX05NSV9NU0ssCUdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDE1KSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0vKiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIGdlbmVyYWwgaW50ZXJydXB0cyBub3cgd2UgZG8gSVBJIG9uZXMgKi8KKwl7IFgsIFgsCQkgICBYLAkJWCwJCTAgfSwKKwl7IFgsIFgsCQkgICBYLAkgCVgsCQkwIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDAsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMSwgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQyLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDMsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UNCwgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQzLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDMsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IFgsIFgsCQkgICBYLAkJWCwJCTAgfSwKKwl7IFgsIFgsCQkgICBYLAkJWCwJCTAgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMywgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9OTUksICBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX05NSSwgIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IFgsIFgsCQkgICBYLAkJWCwJICAgICAgICAwIH0sCisJLyogVGhlIHJlbWFpbmRlciBvZiB0aGlzIHRhYmxlIGlzIGluaXRpYWxpc2VkIGJ5IGZpbGxfaXBpX21hcCAqLwogfTsKLSNlbmRpZgogCiAvKgogICogR0NNUCBuZWVkcyB0byBiZSBkZXRlY3RlZCBiZWZvcmUgYW55IFNNUCBpbml0aWFsaXNhdGlvbgogICovCiBpbnQgX19pbml0IGdjbXBfcHJvYmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisJaWYgKG1pcHNfcmV2aXNpb25fc2NvbmlkICE9IE1JUFNfUkVWSVNJT05fU0NPTl9ST0NJVCkgeworCQlnY21wX3ByZXNlbnQgPSAwOworCQlyZXR1cm4gZ2NtcF9wcmVzZW50OworCX0KKwogCWlmIChnY21wX3ByZXNlbnQgPj0gMCkKIAkJcmV0dXJuIGdjbXBfcHJlc2VudDsKIApAQCAtNDE5LDIwICs0MjQsMzUgQEAKIAlnY21wX3ByZXNlbnQgPSAoR0NNUEdDQihHQ01QQikgJiBHQ01QX0dDQl9HQ01QQl9HQ01QQkFTRV9NU0spID09IEdDTVBfQkFTRV9BRERSOwogCiAJaWYgKGdjbXBfcHJlc2VudCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkdDTVAgcHJlc2VudFxuIik7CisJCXByX2RlYnVnKCJHQ01QIHByZXNlbnRcbiIpOwogCXJldHVybiBnY21wX3ByZXNlbnQ7CiB9CiAKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIElPQ1UncyBwcmVzZW50ICovCitpbnQgX19pbml0IGdjbXBfbmlvY3Uodm9pZCkKK3sKKyAgcmV0dXJuIGdjbXBfcHJlc2VudCA/CisgICAgKEdDTVBHQ0IoR0MpICYgR0NNUF9HQ0JfR0NfTlVNSU9DVV9NU0spID4+IEdDTVBfR0NCX0dDX05VTUlPQ1VfU0hGIDoKKyAgICAwOworfQorCisvKiBTZXQgR0NNUCByZWdpb24gYXR0cmlidXRlcyAqLwordm9pZCBfX2luaXQgZ2NtcF9zZXRyZWdpb24oaW50IHJlZ2lvbiwgdW5zaWduZWQgbG9uZyBiYXNlLAorCQkJICAgdW5zaWduZWQgbG9uZyBtYXNrLCBpbnQgdHlwZSkKK3sKKwlHQ01QR0NCbihDTXhCQVNFLCByZWdpb24pID0gYmFzZTsKKwlHQ01QR0NCbihDTXhNQVNLLCByZWdpb24pID0gbWFzayB8IHR5cGU7Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkKIHN0YXRpYyB2b2lkIF9faW5pdCBmaWxsX2lwaV9tYXAxKGludCBiYXNlaW50ciwgaW50IGNwdSwgaW50IGNwdXBpbikKIHsKIAlpbnQgaW50ciA9IGJhc2VpbnRyICsgY3B1OwotCWdpY19pbnRyX21hcFtpbnRyXS5pbnRybnVtID0gR0lDX0VYVF9JTlRSKGludHIpOwogCWdpY19pbnRyX21hcFtpbnRyXS5jcHVudW0gPSBjcHU7CiAJZ2ljX2ludHJfbWFwW2ludHJdLnBpbiA9IGNwdXBpbjsKIAlnaWNfaW50cl9tYXBbaW50cl0ucG9sYXJpdHkgPSBHSUNfUE9MX1BPUzsKIAlnaWNfaW50cl9tYXBbaW50cl0udHJpZ3R5cGUgPSBHSUNfVFJJR19FREdFOwotCWdpY19pbnRyX21hcFtpbnRyXS5pcGlmbGFnID0gMTsKKwlnaWNfaW50cl9tYXBbaW50cl0uZmxhZ3MgPSBHSUNfRkxBR19JUEk7CiAJaXBpX21hcFtjcHVdIHw9ICgxIDw8IChjcHVwaW4gKyAyKSk7CiB9CiAKQEAgLTQ0Nyw2ICs0NjcsMTIgQEAKIH0KICNlbmRpZgogCit2b2lkIF9faW5pdCBhcmNoX2luaXRfaXBpaXJxKGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKK3sKKwlzZXR1cF9pcnEoaXJxLCBhY3Rpb24pOworCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9wZXJjcHVfaXJxKTsKK30KKwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewogCWluaXRfaTgyNTlfaXJxcygpOwpAQCAtNDU4LDEyICs0ODQsMTcgQEAKIAkJR0NNUEdDQihHSUNCQSkgPSBHSUNfQkFTRV9BRERSIHwgR0NNUF9HQ0JfR0lDQkFfRU5fTVNLOwogCQlnaWNfcHJlc2VudCA9IDE7CiAJfSBlbHNlIHsKLQkJX21zYzAxX2JpdV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXBfbm9jYWNoZShNU0MwMV9CSVVfUkVHX0JBU0UsIE1TQzAxX0JJVV9BRERSU1BBQ0VfU1opOwotCQlnaWNfcHJlc2VudCA9IChSRUcoX21zYzAxX2JpdV9iYXNlLCBNU0MwMV9TQ19DRkcpICYKLQkJTVNDMDFfU0NfQ0ZHX0dJQ1BSRVNfTVNLKSA+PiBNU0MwMV9TQ19DRkdfR0lDUFJFU19TSEY7CisJCWlmIChtaXBzX3JldmlzaW9uX3Njb25pZCA9PSBNSVBTX1JFVklTSU9OX1NDT05fUk9DSVQpIHsKKwkJCV9tc2MwMV9iaXVfYmFzZSA9ICh1bnNpZ25lZCBsb25nKQorCQkJCQlpb3JlbWFwX25vY2FjaGUoTVNDMDFfQklVX1JFR19CQVNFLAorCQkJCQkJTVNDMDFfQklVX0FERFJTUEFDRV9TWik7CisJCQlnaWNfcHJlc2VudCA9IChSRUcoX21zYzAxX2JpdV9iYXNlLCBNU0MwMV9TQ19DRkcpICYKKwkJCQkJTVNDMDFfU0NfQ0ZHX0dJQ1BSRVNfTVNLKSA+PgorCQkJCQlNU0MwMV9TQ19DRkdfR0lDUFJFU19TSEY7CisJCX0KIAl9CiAJaWYgKGdpY19wcmVzZW50KQotCQlwcmludGsoS0VSTl9ERUJVRyAiR0lDIHByZXNlbnRcbiIpOworCQlwcl9kZWJ1ZygiR0lDIHByZXNlbnRcbiIpOwogCiAJc3dpdGNoIChtaXBzX3JldmlzaW9uX3Njb25pZCkgewogCWNhc2UgTUlQU19SRVZJU0lPTl9TQ09OX1NPQ0lUOgpAQCAtNTI2LDE2ICs1NTcsMTYgQEAKIAkJCQkJCSZjb3JlaGlfaXJxYWN0aW9uKTsKIAl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkKIAlpZiAoZ2ljX3ByZXNlbnQpIHsKIAkJLyogRklYTUUgKi8KIAkJaW50IGk7Ci0KKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkKIAkJZ2ljX2NhbGxfaW50X2Jhc2UgPSBHSUNfTlVNX0lOVFJTIC0gTlJfQ1BVUzsKIAkJZ2ljX3Jlc2NoZWRfaW50X2Jhc2UgPSBnaWNfY2FsbF9pbnRfYmFzZSAtIE5SX0NQVVM7Ci0KIAkJZmlsbF9pcGlfbWFwKCk7Ci0JCWdpY19pbml0KEdJQ19CQVNFX0FERFIsIEdJQ19BRERSU1BBQ0VfU1osIGdpY19pbnRyX21hcCwgQVJSQVlfU0laRShnaWNfaW50cl9tYXApLCBNSVBTX0dJQ19JUlFfQkFTRSk7CisjZW5kaWYKKwkJZ2ljX2luaXQoR0lDX0JBU0VfQUREUiwgR0lDX0FERFJTUEFDRV9TWiwgZ2ljX2ludHJfbWFwLAorCQkJCUFSUkFZX1NJWkUoZ2ljX2ludHJfbWFwKSwgTUlQU19HSUNfSVJRX0JBU0UpOwogCQlpZiAoIWdjbXBfcHJlc2VudCkgewogCQkJLyogRW5hYmxlIHRoZSBHSUMgKi8KIAkJCWkgPSBSRUcoX21zYzAxX2JpdV9iYXNlLCBNU0MwMV9TQ19DRkcpOwpAQCAtNTQzLDcgKzU3NCw3IEBACiAJCQkJKGkgfCAoMHgxIDw8IE1TQzAxX1NDX0NGR19HSUNFTkFfU0hGKSk7CiAJCQlwcl9kZWJ1ZygiR0lDIEVuYWJsZWRcbiIpOwogCQl9Ci0KKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkKIAkJLyogc2V0IHVwIGlwaSBpbnRlcnJ1cHRzICovCiAJCWlmIChjcHVfaGFzX3ZpbnQpIHsKIAkJCXNldF92aV9oYW5kbGVyKE1JUFNDUFVfSU5UX0lQSTAsIG1hbHRhX2lwaV9pcnFkaXNwYXRjaCk7CkBAIC01NTYsMTYgKzU4NywxNCBAQAogCQl3cml0ZV9jMF9zdGF0dXMoMHgxMTAwZGMwMCk7CiAJCXByaW50aygiQ1BVJWQ6IHN0YXR1cyByZWdpc3RlciBmcmMgJTA4eFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCByZWFkX2MwX3N0YXR1cygpKTsKIAkJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQkJc2V0dXBfaXJxKE1JUFNfR0lDX0lSUV9CQVNFICsKLQkJCQkJR0lDX1JFU0NIRURfSU5UKGkpLCAmaXJxX3Jlc2NoZWQpOwotCQkJc2V0dXBfaXJxKE1JUFNfR0lDX0lSUV9CQVNFICsKLQkJCQkJR0lDX0NBTExfSU5UKGkpLCAmaXJxX2NhbGwpOwotCQkJc2V0X2lycV9oYW5kbGVyKE1JUFNfR0lDX0lSUV9CQVNFICsKLQkJCQkJR0lDX1JFU0NIRURfSU5UKGkpLCBoYW5kbGVfcGVyY3B1X2lycSk7Ci0JCQlzZXRfaXJxX2hhbmRsZXIoTUlQU19HSUNfSVJRX0JBU0UgKwotCQkJCQlHSUNfQ0FMTF9JTlQoaSksIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwkJCWFyY2hfaW5pdF9pcGlpcnEoTUlQU19HSUNfSVJRX0JBU0UgKworCQkJCQkgR0lDX1JFU0NIRURfSU5UKGkpLCAmaXJxX3Jlc2NoZWQpOworCQkJYXJjaF9pbml0X2lwaWlycShNSVBTX0dJQ19JUlFfQkFTRSArCisJCQkJCSBHSUNfQ0FMTF9JTlQoaSksICZpcnFfY2FsbCk7CiAJCX0KKyNlbmRpZgogCX0gZWxzZSB7CisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJCS8qIHNldCB1cCBpcGkgaW50ZXJydXB0cyAqLwogCQlpZiAoY3B1X2hhc192ZWljKSB7CiAJCQlzZXRfdmlfaGFuZGxlciAoTVNDMDFFX0lOVF9TVzAsIGlwaV9yZXNjaGVkX2Rpc3BhdGNoKTsKQEAgLTU4MCwxNCArNjA5LDEwIEBACiAJCQljcHVfaXBpX3Jlc2NoZWRfaXJxID0gTUlQU19DUFVfSVJRX0JBU0UgKyBNSVBTX0NQVV9JUElfUkVTQ0hFRF9JUlE7CiAJCQljcHVfaXBpX2NhbGxfaXJxID0gTUlQU19DUFVfSVJRX0JBU0UgKyBNSVBTX0NQVV9JUElfQ0FMTF9JUlE7CiAJCX0KLQotCQlzZXR1cF9pcnEoY3B1X2lwaV9yZXNjaGVkX2lycSwgJmlycV9yZXNjaGVkKTsKLQkJc2V0dXBfaXJxKGNwdV9pcGlfY2FsbF9pcnEsICZpcnFfY2FsbCk7Ci0KLQkJc2V0X2lycV9oYW5kbGVyKGNwdV9pcGlfcmVzY2hlZF9pcnEsIGhhbmRsZV9wZXJjcHVfaXJxKTsKLQkJc2V0X2lycV9oYW5kbGVyKGNwdV9pcGlfY2FsbF9pcnEsIGhhbmRsZV9wZXJjcHVfaXJxKTsKLQl9CisJCWFyY2hfaW5pdF9pcGlpcnEoY3B1X2lwaV9yZXNjaGVkX2lycSwgJmlycV9yZXNjaGVkKTsKKwkJYXJjaF9pbml0X2lwaWlycShjcHVfaXBpX2NhbGxfaXJxLCAmaXJxX2NhbGwpOwogI2VuZGlmCisJfQogfQogCiB2b2lkIG1hbHRhX2JlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jCmluZGV4IDYxODg4ZmYuLjkwMzVjNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1tZW1vcnkuYwpAQCAtNTQsNyArNTQsOCBAQAogewogCWNoYXIgKm1lbXNpemVfc3RyOwogCXVuc2lnbmVkIGludCBtZW1zaXplOwotCWNoYXIgY21kbGluZVtDTF9TSVpFXSwgKnB0cjsKKwljaGFyICpwdHI7CisJc3RhdGljIGNoYXIgY21kbGluZVtDTF9TSVpFXSBfX2luaXRkYXRhOwogCiAJLyogb3RoZXJ3aXNlIGxvb2sgaW4gdGhlIGVudmlyb25tZW50ICovCiAJbWVtc2l6ZV9zdHIgPSBwcm9tX2dldGVudigibWVtc2l6ZSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtcGNpLmMKaW5kZXggYjk3NDMxOS4uMmZiZmExYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXBjaS5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KLQorI2luY2x1ZGUgPGFzbS9nY21wcmVncy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2Jvbml0bzY0Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL21zYzAxX3BjaS5oPgpAQCAtMjAxLDcgKzIwMSwxMSBAQAogCQltc2NfbWVtX3Jlc291cmNlLnN0YXJ0ID0gc3RhcnQgJiBtYXNrOwogCQltc2NfbWVtX3Jlc291cmNlLmVuZCA9IChzdGFydCAmIG1hc2spIHwgfm1hc2s7CiAJCW1zY19jb250cm9sbGVyLm1lbV9vZmZzZXQgPSAoc3RhcnQgJiBtYXNrKSAtIChtYXAgJiBtYXNrKTsKLQorI2lmZGVmIENPTkZJR19NSVBTX0NNUAorCQlpZiAoZ2NtcF9uaW9jdSgpKQorCQkJZ2NtcF9zZXRyZWdpb24oMCwgc3RhcnQsIG1hc2ssCisJCQkJR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTEpOworI2VuZGlmCiAJCU1TQ19SRUFEKE1TQzAxX1BDSV9TQzJQSU9CQVNMLCBzdGFydCk7CiAJCU1TQ19SRUFEKE1TQzAxX1BDSV9TQzJQSU9NU0tMLCBtYXNrKTsKIAkJTVNDX1JFQUQoTVNDMDFfUENJX1NDMlBJT01BUEwsIG1hcCk7CkBAIC0yMDksNyArMjEzLDExIEBACiAJCW1zY19pb19yZXNvdXJjZS5lbmQgPSAobWFwICYgbWFzaykgfCB+bWFzazsKIAkJbXNjX2NvbnRyb2xsZXIuaW9fb2Zmc2V0ID0gMDsKIAkJaW9wb3J0X3Jlc291cmNlLmVuZCA9IH5tYXNrOwotCisjaWZkZWYgQ09ORklHX01JUFNfQ01QCisJCWlmIChnY21wX25pb2N1KCkpCisJCQlnY21wX3NldHJlZ2lvbigxLCBzdGFydCwgbWFzaywKKwkJCQlHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMSk7CisjZW5kaWYKIAkJLyogSWYgcmFuZ2VzIG92ZXJsYXAgSS9PIHRha2VzIHByZWNlZGVuY2UuICAqLwogCQlzdGFydCA9IHN0YXJ0ICYgbWFzazsKIAkJZW5kID0gc3RhcnQgfCB+bWFzazsKQEAgLTI0MSwzICsyNDksMTYgQEAKIAogCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKGNvbnRyb2xsZXIpOwogfQorCisvKiBFbmFibGUgUENJIDIuMSBjb21wYXRpYmlsaXR5IGluIFBJSVg0ICovCitzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfZGxjc2V0dXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1OCBvZGxjLCBuZGxjOworCSh2b2lkKSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4ODIsICZvZGxjKTsKKwkvKiBFbmFibGUgcGFzc2l2ZSByZWxlYXNlcyBhbmQgZGVsYXllZCB0cmFuc2FjdGlvbiAqLworCW5kbGMgPSBvZGxjIHwgNzsKKwkodm9pZCkgcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4MiwgbmRsYyk7Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8wLAorCXF1aXJrX2RsY3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vaW50LmMgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL2ludC5jCmluZGV4IGYwODBmMTEuLjdhY2E3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vaW50LmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9pbnQuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyX2FjdGlvbiA9IHsKIAkuaGFuZGxlciA9CW5vX2FjdGlvbiwKLQkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAorCS5mbGFncyA9CUlSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0JCSJUaW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vdGltZS5jCmluZGV4IDE4YjE5MjcuLjg4MzZjNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vdGltZS5jCkBAIC01OSw3ICs1OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHBueDh4eHhfdGltZXJfaXJxID0gewogCS5oYW5kbGVyCT0gcG54OHh4eF90aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAicG54OHh4eF90aW1lciIsCiB9OwogCkBAIC03Miw3ICs3Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG1vbm90b25pY19pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPSBtb25vdG9uaWNfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLm5hbWUgPSAiTW9ub3RvbmljIHRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwppbmRleCA2NTVjYjhkLi41NzVjZDE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKiBvdGhlcndpc2UsIHRoZSBvcHJvZmlsZSB0b29sIHdpbGwgbm90IHJlY29nbml6ZSB0aGlzIGFuZCBjb21wbGFpbiBhYm91dAogICogImNwdV90eXBlICd1bnNldCcgaXMgbm90IHZhbGlkIi4KICAqLwotI2RlZmluZSBMT09OR1NPTjJfQ1BVX1RZUEUJIm1pcHMvZ29kc29uMiIKKyNkZWZpbmUgTE9PTkdTT04yX0NQVV9UWVBFCSJtaXBzL2xvb25nc29uMiIKIAogI2RlZmluZSBMT09OR1NPTjJfQ09VTlRFUjFfRVZFTlQoZXZlbnQpCSgoZXZlbnQgJiAweDBmKSA8PCA1KQogI2RlZmluZSBMT09OR1NPTjJfQ09VTlRFUjJfRVZFTlQoZXZlbnQpCSgoZXZlbnQgJiAweDBmKSA8PCA5KQpAQCAtNDQsNyArNDQsNyBAQAogCXVuc2lnbmVkIGludCBjdHJsOwogCXVuc2lnbmVkIGxvbmcgbG9uZyByZXNldF9jb3VudGVyMTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcmVzZXRfY291bnRlcjI7Ci0JaW50IGNudDFfZW5hbGJlZCwgY250Ml9lbmFsYmVkOworCWludCBjbnQxX2VuYWJsZWQsIGNudDJfZW5hYmxlZDsKIH0gcmVnOwogCiBERUZJTkVfU1BJTkxPQ0soc2FtcGxlX2xvY2spOwpAQCAtODEsOCArODEsOCBAQAogCiAJcmVnLmN0cmwgPSBjdHJsOwogCi0JcmVnLmNudDFfZW5hbGJlZCA9IGNmZ1swXS5lbmFibGVkOwotCXJlZy5jbnQyX2VuYWxiZWQgPSBjZmdbMV0uZW5hYmxlZDsKKwlyZWcuY250MV9lbmFibGVkID0gY2ZnWzBdLmVuYWJsZWQ7CisJcmVnLmNudDJfZW5hYmxlZCA9IGNmZ1sxXS5lbmFibGVkOwogCiB9CiAKQEAgLTk5LDcgKzk5LDcgQEAKIHN0YXRpYyB2b2lkIGxvb25nc29uMl9jcHVfc3RhcnQodm9pZCAqYXJncykKIHsKIAkvKiBTdGFydCBhbGwgY291bnRlcnMgb24gY3VycmVudCBDUFUgKi8KLQlpZiAocmVnLmNudDFfZW5hbGJlZCB8fCByZWcuY250Ml9lbmFsYmVkKQorCWlmIChyZWcuY250MV9lbmFibGVkIHx8IHJlZy5jbnQyX2VuYWJsZWQpCiAJCXdyaXRlX2MwX3BlcmZjdHJsKHJlZy5jdHJsKTsKIH0KIApAQCAtMTI1LDcgKzEyNSw3IEBACiAJICovCiAKIAkvKiBDaGVjayB3aGV0aGVyIHRoZSBpcnEgYmVsb25ncyB0byBtZSAqLwotCWVuYWJsZWQgPSByZWcuY250MV9lbmFsYmVkIHwgcmVnLmNudDJfZW5hbGJlZDsKKwllbmFibGVkID0gcmVnLmNudDFfZW5hYmxlZCB8IHJlZy5jbnQyX2VuYWJsZWQ7CiAJaWYgKCFlbmFibGVkKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKQEAgLTEzNiwxMiArMTM2LDEyIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNhbXBsZV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoY291bnRlcjEgJiBMT09OR1NPTjJfUEVSRkNOVF9PVkVSRkxPVykgewotCQlpZiAocmVnLmNudDFfZW5hbGJlZCkKKwkJaWYgKHJlZy5jbnQxX2VuYWJsZWQpCiAJCQlvcHJvZmlsZV9hZGRfc2FtcGxlKHJlZ3MsIDApOwogCQljb3VudGVyMSA9IHJlZy5yZXNldF9jb3VudGVyMTsKIAl9CiAJaWYgKGNvdW50ZXIyICYgTE9PTkdTT04yX1BFUkZDTlRfT1ZFUkZMT1cpIHsKLQkJaWYgKHJlZy5jbnQyX2VuYWxiZWQpCisJCWlmIChyZWcuY250Ml9lbmFibGVkKQogCQkJb3Byb2ZpbGVfYWRkX3NhbXBsZShyZWdzLCAxKTsKIAkJY291bnRlcjIgPSByZWcucmVzZXRfY291bnRlcjI7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMgYi9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYwppbmRleCAxMDljOTVjLi4zMjU0OGI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYwpAQCAtMzg1LDYgKzM4NSw3IEBACiAJdW5zaWduZWQgbG9uZyBpbnRyOwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJc3RhdGljIGNoYXIgcGNpaXJxZmxhZzsKKwlpbnQgcmV0OwogI2lmIGRlZmluZWQoQ09ORklHX1BNQ19NU1A3MTIwX0dXKSB8fCBkZWZpbmVkKENPTkZJR19QTUNfTVNQNzEyMF9FVkFMKQogCXVuc2lnbmVkIGludAl2cGVfc3RhdHVzOwogI2VuZGlmCkBAIC00MDIsMTEgKzQwMywxMyBAQAogCSAqIGFsbG9jYXRpb24gYXNzaWducyBhbiBpbnRlcnJ1cHQgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgogCSAqLwogCWlmIChwY2lpcnFmbGFnID09IDApIHsKLQkJcmVxdWVzdF9pcnEoTVNQX0lOVF9QQ0ksLyogSGFyZGNvZGVkIGludGVybmFsIE1TUDcxMjAgd2lyaW5nICovCisJCXJldCA9IHJlcXVlc3RfaXJxKE1TUF9JTlRfUENJLC8qIEhhcmRjb2RlZCBpbnRlcm5hbCBNU1A3MTIwIHdpcmluZyAqLwogCQkJCWJwY2lfaW50ZXJydXB0LAogCQkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKIAkJCQkiUE1DIE1TUCBQQ0kgSG9zdCIsCiAJCQkJcHJlZyk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CiAJCXBjaWlycWZsYWcgPSB+MDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9yYjUzMi9wcm9tLmMgYi9hcmNoL21pcHMvcmI1MzIvcHJvbS5jCmluZGV4IDQ2Y2EyNGQuLmFkNWJkMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9yYjUzMi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL3JiNTMyL3Byb20uYwpAQCAtNjksNyArNjksNyBAQAogCiB2b2lkIF9faW5pdCBwcm9tX3NldHVwX2NtZGxpbmUodm9pZCkKIHsKLQljaGFyIGNtZF9saW5lW0NMX1NJWkVdOworCXN0YXRpYyBjaGFyIGNtZF9saW5lW0NMX1NJWkVdIF9faW5pdGRhdGE7CiAJY2hhciAqY3AsICpib2FyZDsKIAlpbnQgcHJvbV9hcmdjOwogCWNoYXIgKipwcm9tX2FyZ3YsICoqcHJvbV9lbnZwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctc21wLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYwppbmRleCA5YWE4ZjI5Li5jNjg1MWRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJUkVNT1RFX0hVQl9TRU5EX0lOVFIoQ09NUEFDVF9UT19OQVNJRF9OT0RFSUQoY3B1X3RvX25vZGUoZGVzdGlkKSksIGlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwMjdfc2VuZF9pcGkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBhY3Rpb24pCitzdGF0aWMgdm9pZCBpcDI3X3NlbmRfaXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBhY3Rpb24pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCmluZGV4IDZkMGU1OWYuLmQ2ODAyZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAKIHN0cnVjdCBpcnFhY3Rpb24gaHViX3J0X2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlcgk9IGh1Yl9ydF9jb3VudGVyX2hhbmRsZXIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAiaHViLXJ0IiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwppbmRleCBiYTU5ODM5Li40MDcwMjY4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCkBAIC0xMTcsMTAgKzExNyw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaXJxX2RpcnR5OwogCi0JaWYgKGNwdW1hc2tfd2VpZ2h0KG1hc2spICE9IDEpIHsKLQkJcHJpbnRrKCJhdHRlbXB0ZWQgdG8gc2V0IGlycSBhZmZpbml0eSBmb3IgaXJxICVkIHRvIG11bHRpcGxlIENQVXNcbiIsIGlycSk7Ci0JCXJldHVybiAtMTsKLQl9CiAJaSA9IGNwdW1hc2tfZmlyc3QobWFzayk7CiAKIAkvKiBDb252ZXJ0IGxvZ2ljYWwgQ1BVIHRvIHBoeXNpY2FsIENQVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMgYi9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYwppbmRleCA2MzdhMTk0Li4xNWVhNzc4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYworKysgYi9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYwpAQCAtNDAzLDM2ICs0MDMsMzEgQEAKIHN0YXRpYyBpbnQgc2Jwcm9mX3RiX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaW50IG1pbm9yOwotCWludCBlcnIgPSAwOwogCi0JbG9ja19rZXJuZWwoKTsKIAltaW5vciA9IGltaW5vcihpbm9kZSk7Ci0JaWYgKG1pbm9yICE9IDApIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChtaW5vciAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICh4Y2hnKCZzYnAub3BlbiwgU0JfT1BFTklORykgIT0gU0JfQ0xPU0VEKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICh4Y2hnKCZzYnAub3BlbiwgU0JfT1BFTklORykgIT0gU0JfQ0xPU0VEKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJbWVtc2V0KCZzYnAsIDAsIHNpemVvZihzdHJ1Y3Qgc2Jwcm9mX3RiKSk7CiAJc2JwLnNicHJvZl90YmJ1ZiA9IHZtYWxsb2MoTUFYX1RCU0FNUExFX0JZVEVTKTsKIAlpZiAoIXNicC5zYnByb2ZfdGJidWYpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CisJCXNicC5vcGVuID0gU0JfQ0xPU0VEOworCQl3bWIoKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQorCiAJbWVtc2V0KHNicC5zYnByb2ZfdGJidWYsIDAsIE1BWF9UQlNBTVBMRV9CWVRFUyk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2JwLnRiX3N5bmMpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNicC50Yl9yZWFkKTsKIAltdXRleF9pbml0KCZzYnAubG9jayk7CiAKIAlzYnAub3BlbiA9IFNCX09QRU47CisJd21iKCk7CiAKLSAgb3V0OgotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNicHJvZl90Yl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtNDQwLDcgKzQzNSw3IEBACiAJaW50IG1pbm9yOwogCiAJbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCWlmIChtaW5vciAhPSAwIHx8ICFzYnAub3BlbikKKwlpZiAobWlub3IgIT0gMCB8fCBzYnAub3BlbiAhPSBTQl9DTE9TRUQpCiAJCXJldHVybiAtRU5PREVWOwogCiAJbXV0ZXhfbG9jaygmc2JwLmxvY2spOwpAQCAtNDQ5LDcgKzQ0NCw4IEBACiAJCXNicHJvZl96YnByb2Zfc3RvcCgpOwogCiAJdmZyZWUoc2JwLnNicHJvZl90YmJ1Zik7Ci0Jc2JwLm9wZW4gPSAwOworCXNicC5vcGVuID0gU0JfQ0xPU0VEOworCXdtYigpOwogCiAJbXV0ZXhfdW5sb2NrKCZzYnAubG9jayk7CiAKQEAgLTU4Myw3ICs1NzksOCBAQAogCX0KIAl0Yl9kZXYgPSBkZXY7CiAKLQlzYnAub3BlbiA9IDA7CisJc2JwLm9wZW4gPSBTQl9DTE9TRUQ7CisJd21iKCk7CiAJdGJfcGVyaW9kID0gemJidXNfbWh6ICogMTAwMDBMTDsKIAlwcl9pbmZvKERFVk5BTUUgIjogaW5pdGlhbGl6ZWQgLSB0Yl9wZXJpb2QgPSAlbGxkXG4iLAogCQkobG9uZyBsb25nKSB0Yl9wZXJpb2QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jCmluZGV4IDYyM2ZmYzkuLjUyNzdhYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3NldHVwLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCQlicmVhazsKIAl9CiAJdHMtPnR2X3NlYyA9IHNlYzsKLQl0di0+dHZfbnNlYyA9IDA7CisJdHMtPnR2X25zZWMgPSAwOwogfQogCiBpbnQgcnRjX21pcHNfc2V0X3RpbWUodW5zaWduZWQgbG9uZyBzZWMpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3RpbWUuYyBiL2FyY2gvbWlwcy9zbmkvdGltZS5jCmluZGV4IDYyZGY2YTUuLmYzYjYwZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zbmkvdGltZS5jCkBAIC02Nyw3ICs2Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGEyMHJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gYTIwcl9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAiYTIwci10aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKaW5kZXggYzg2MDgxMC4uZDY2ODAyZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYwpAQCAtODUsNyArODUsNyBAQAogc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQogewogCWlmICghc3RyY21wKGlkLCAic3BpLWJhc2VjbGsiKSkKLQkJcmV0dXJuIChzdHJ1Y3QgY2xrICopKCh1bnNpZ25lZCBsb25nKXR4eDlfZ2J1c19jbG9jayAvIDIgLyA0KTsKKwkJcmV0dXJuIChzdHJ1Y3QgY2xrICopKCh1bnNpZ25lZCBsb25nKXR4eDlfZ2J1c19jbG9jayAvIDIgLyAyKTsKIAlpZiAoIXN0cmNtcChpZCwgImltYnVzX2NsayIpKQogCQlyZXR1cm4gKHN0cnVjdCBjbGsgKikoKHVuc2lnbmVkIGxvbmcpdHh4OV9nYnVzX2Nsb2NrIC8gMik7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CkBAIC0xNjAsNyArMTYwLDcgQEAKIAlpbnQgYXJnYzsKIAlpbnQgKmFyZ3YzMjsKIAlpbnQgaTsJCQkvKiBBbHdheXMgaWdub3JlIHRoZSAiLWMiIGF0IGFyZ3ZbMF0gKi8KLQljaGFyIGJ1aWx0aW5bQ0xfU0laRV07CisJc3RhdGljIGNoYXIgYnVpbHRpbltDTF9TSVpFXSBfX2luaXRkYXRhOwogCiAJaWYgKGZ3X2FyZzAgPj0gQ0tTRUcwIHx8IGZ3X2FyZzEgPCBDS1NFRzApIHsKIAkJLyoKQEAgLTMxNSw3ICszMTUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJlcHJvY2Vzc19jbWRsaW5lKHZvaWQpCiB7Ci0JY2hhciBjbWRsaW5lW0NMX1NJWkVdOworCXN0YXRpYyBjaGFyIGNtZGxpbmVbQ0xfU0laRV0gX19pbml0ZGF0YTsKIAljaGFyICpzOwogCiAJc3RyY3B5KGNtZGxpbmUsIGFyY3NfY21kbGluZSk7CkBAIC04MTcsNyArODE3LDggQEAKIG91dF9wZGV2OgogCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiBvdXRfZ3BpbzoKLQlncGlvX3JlbW92ZSgmaW9jbGVkLT5jaGlwKTsKKwlpZiAoZ3Bpb2NoaXBfcmVtb3ZlKCZpb2NsZWQtPmNoaXApKQorCQlyZXR1cm47CiBvdXRfdW5tYXA6CiAJaW91bm1hcChpb2NsZWQtPm1taW9hZGRyKTsKIG91dF9mcmVlOgpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggOGEzYTRkZC4uMTY3ZTEwZiAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0xMjksNDIgKzEyOSw0NyBAQAogc3RydWN0IF9fbGFyZ2Vfc3RydWN0IHsgdW5zaWduZWQgbG9uZyBidWZbMTAwXTsgfTsKICNkZWZpbmUgX19tKHgpICgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKSh4KSkKIAotI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKQlcCi0oewkJCQkJCVwKLQlfX3R5cGVvZigqKHB0cikpIF9fZ3VfdmFsOwkJXAotCXVuc2lnbmVkIGxvbmcgX19ndV9hZGRyOwkJXAotCWludCBfX2d1X2VycjsJCQkJXAotCV9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSAocHRyKTsJXAotCXN3aXRjaCAoc2l6ZSkgewkJCQlcCi0JY2FzZSAxOiAgX19nZXRfdXNlcl9hc20oImJ1Iik7IGJyZWFrOwlcCi0JY2FzZSAyOiAgX19nZXRfdXNlcl9hc20oImh1Iik7IGJyZWFrOwlcCi0JY2FzZSA0OiAgX19nZXRfdXNlcl9hc20oIiIgICk7IGJyZWFrOwlcCi0JZGVmYXVsdDogX19nZXRfdXNlcl91bmtub3duKCk7IGJyZWFrOwlcCi0JfQkJCQkJXAotCXggPSAoX190eXBlb2ZfXygqKHB0cikpKSBfX2d1X3ZhbDsJXAotCV9fZ3VfZXJyOwkJCQlcCisjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LCBwdHIsIHNpemUpCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19ndV9hZGRyOwkJCQkJXAorCWludCBfX2d1X2VycjsJCQkJCQkJXAorCV9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSAocHRyKTsJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJY2FzZSAxOiB7CQkJCQkJCVwKKwkJdW5zaWduZWQgY2hhciBfX2d1X3ZhbDsJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20oImJ1Iik7CQkJCQlcCisJCSh4KSA9ICooX19mb3JjZSBfX3R5cGVvZl9fKCoocHRyKSkqKSAmX19ndV92YWw7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCWNhc2UgMjogewkJCQkJCQlcCisJCXVuc2lnbmVkIHNob3J0IF9fZ3VfdmFsOwkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKCJodSIpOwkJCQkJXAorCQkoeCkgPSAqKF9fZm9yY2UgX190eXBlb2ZfXygqKHB0cikpKikgJl9fZ3VfdmFsOwkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwljYXNlIDQ6IHsJCQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgX19ndV92YWw7CQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKCIiKTsJCQkJCVwKKwkJKHgpID0gKihfX2ZvcmNlIF9fdHlwZW9mX18oKihwdHIpKSopICZfX2d1X3ZhbDsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX2dldF91c2VyX3Vua25vd24oKTsJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJX19ndV9lcnI7CQkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgX19nZXRfdXNlcl9jaGVjayh4LCBwdHIsIHNpemUpCQkJXAotKHsJCQkJCQkJXAotCV9fdHlwZW9mX18oKihwdHIpKSBfX2d1X3ZhbDsJCQlcCi0JdW5zaWduZWQgbG9uZyBfX2d1X2FkZHI7CQkJXAotCWludCBfX2d1X2VycjsJCQkJCVwKLQlfX2d1X2FkZHIgPSAodW5zaWduZWQgbG9uZykgKHB0cik7CQlcCi0JaWYgKGxpa2VseShfX2FjY2Vzc19vayhfX2d1X2FkZHIsc2l6ZSkpKSB7CVwKLQkJc3dpdGNoIChzaXplKSB7CQkJCVwKLQkJY2FzZSAxOiAgX19nZXRfdXNlcl9hc20oImJ1Iik7IGJyZWFrOwlcCi0JCWNhc2UgMjogIF9fZ2V0X3VzZXJfYXNtKCJodSIpOyBicmVhazsJXAotCQljYXNlIDQ6ICBfX2dldF91c2VyX2FzbSgiIiAgKTsgYnJlYWs7CVwKLQkJZGVmYXVsdDogX19nZXRfdXNlcl91bmtub3duKCk7IGJyZWFrOwlcCi0JCX0JCQkJCVwKLQl9CQkJCQkJXAotCWVsc2UgewkJCQkJCVwKLQkJX19ndV9lcnIgPSAtRUZBVUxUOwkJCVwKLQkJX19ndV92YWwgPSAwOwkJCQlcCi0JfQkJCQkJCVwKLQl4ID0gKF9fdHlwZW9mX18oKihwdHIpKSkgX19ndV92YWw7CQlcCi0JX19ndV9lcnI7CQkJCQlcCisjZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2soeCwgcHRyLCBzaXplKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJaW50IF9lOwkJCQkJCQkJXAorCWlmIChsaWtlbHkoX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpIChwdHIpLCAoc2l6ZSkpKSkJCVwKKwkJX2UgPSBfX2dldF91c2VyX25vY2hlY2soKHgpLCAocHRyKSwgKHNpemUpKTsJCVwKKwllbHNlIHsJCQkJCQkJCVwKKwkJX2UgPSAtRUZBVUxUOwkJCQkJCVwKKwkJKHgpID0gKF9fdHlwZW9mX18oeCkpMDsJCQkJCVwKKwl9CQkJCQkJCQlcCisJX2U7CQkJCQkJCQlcCiB9KQogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKElOU04pCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNzZmNDFiZC4uMTA1NDlkYyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDQsMjQgKzQ0LDggQEAKICAgUk9fREFUQShQQUdFX1NJWkUpCiAKICAgLyogd3JpdGVhYmxlICovCi0gIC5kYXRhIDogewkJCS8qIERhdGEgKi8KLQlEQVRBX0RBVEEKLQlDT05TVFJVQ1RPUlMKLQl9Ci0KLSAgLmRhdGFfbm9zYXZlIDogeyBOT1NBVkVfREFUQTsgfQotCi0gIC5kYXRhLnBhZ2VfYWxpZ25lZCA6IHsgUEFHRV9BTElHTkVEX0RBVEEoUEFHRV9TSVpFKTsgfQotICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsgQ0FDSEVMSU5FX0FMSUdORURfREFUQSgzMik7IH0KLQotICAvKiByYXJlbHkgY2hhbmdlZCBkYXRhIGxpa2UgY3B1IG1hcHMgKi8KLSAgLiA9IEFMSUdOKDMyKTsKLSAgLmRhdGEucmVhZF9tb3N0bHkgOiBBVChBRERSKC5kYXRhLnJlYWRfbW9zdGx5KSkgewotCVJFQURfTU9TVExZX0RBVEEoMzIpOwotCV9lZGF0YSA9IC47CQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCi0gIH0KLQotICAuZGF0YS5pbml0X3Rhc2sgOiB7IElOSVRfVEFTS19EQVRBKFRIUkVBRF9TSVpFKTsgfQorICBSV19EQVRBX1NFQ1RJT04oMzIsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCisgIF9lZGF0YSA9IC47CiAKICAgLyogbWlnaHQgZ2V0IGZyZWVkIGFmdGVyIGluaXQgKi8KICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CkBAIC03NCwyMiArNTgsOCBAQAogICAvKiB3aWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IHsKLQlfc2luaXR0ZXh0ID0gLjsKLQlJTklUX1RFWFQ7Ci0JX2Vpbml0dGV4dCA9IC47Ci0gIH0KLSAgLmluaXQuZGF0YSA6IHsgSU5JVF9EQVRBOyB9Ci0gIC5zZXR1cC5pbml0IDogeyBJTklUX1NFVFVQKDE2KTsgfQotCi0gIF9faW5pdGNhbGxfc3RhcnQgPSAuOwotICAuaW5pdGNhbGwuaW5pdCA6IHsKLQlJTklUQ0FMTFMKLSAgfQotICBfX2luaXRjYWxsX2VuZCA9IC47Ci0gIC5jb25faW5pdGNhbGwuaW5pdCA6IHsgQ09OX0lOSVRDQUxMOyB9Ci0KLSAgU0VDVVJJVFlfSU5JVAorICBJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCisgIElOSVRfREFUQV9TRUNUSU9OKDE2KQogICAuID0gQUxJR04oNCk7CiAgIF9fYWx0X2luc3RydWN0aW9ucyA9IC47CiAgIC5hbHRpbnN0cnVjdGlvbnMgOiB7ICooLmFsdGluc3RydWN0aW9ucykgfQpAQCAtMTAwLDggKzcwLDYgQEAKIAkuZXhpdC50ZXh0IDogeyBFWElUX1RFWFQ7IH0KIAkuZXhpdC5kYXRhIDogeyBFWElUX0RBVEE7IH0KIAotICAuaW5pdC5yYW1mcyA6IHsgSU5JVF9SQU1fRlM7IH0KLQogICBQRVJDUFUoMzIpCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBfX2luaXRfZW5kID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDMvaW5jbHVkZS91bml0L2Nsb2NrLmggYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzAzL2luY2x1ZGUvdW5pdC9jbG9jay5oCmluZGV4IDhiNDUwZTkuLjJhMGJmNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDMvaW5jbHVkZS91bml0L2Nsb2NrLmgKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwMy9pbmNsdWRlL3VuaXQvY2xvY2suaApAQCAtMjAsOSArMjAsOSBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW4xMDMwMF9pb2JjbGs7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtbjEwMzAwX3RzY19wZXJfSFo7CiAKLSNkZWZpbmUgTU4xMDMwMF9JT0NMSwkJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfaW9jbGspCisjZGVmaW5lIE1OMTAzMDBfSU9DTEsJCW1uMTAzMDBfaW9jbGsKIC8qIElmIHRoaXMgcHJvY2Vzc29ycyBoYXMgYSBhbm90aGVyIGNsb2NrLCB1bmNvbW1lbnQgdGhlIGJlbG93LiAqLwotLyogI2RlZmluZSBNTjEwMzAwX0lPQkNMSwkoKHVuc2lnbmVkIGxvbmcpbW4xMDMwMF9pb2JjbGspICovCisvKiAjZGVmaW5lIE1OMTAzMDBfSU9CQ0xLCW1uMTAzMDBfaW9iY2xrICovCiAKICNlbHNlIC8qICFDT05GSUdfTU4xMDMwMF9SVEMgKi8KIApAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBNTjEwMzAwX1RTQ0NMSwkJTU4xMDMwMF9JT0NMSwogCiAjaWZkZWYgQ09ORklHX01OMTAzMDBfUlRDCi0jZGVmaW5lIE1OMTAzMDBfVFNDX1BFUl9IWgkoKHVuc2lnbmVkIGxvbmcpbW4xMDMwMF90c2NfcGVyX0haKQorI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJbW4xMDMwMF90c2NfcGVyX0haCiAjZWxzZSAvKiAhQ09ORklHX01OMTAzMDBfUlRDICovCiAjZGVmaW5lIE1OMTAzMDBfVFNDX1BFUl9IWgkoTU4xMDMwMF9UU0NDTEsvSFopCiAjZW5kaWYgLyogIUNPTkZJR19NTjEwMzAwX1JUQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9pbmNsdWRlL3VuaXQvY2xvY2suaCBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L2Nsb2NrLmgKaW5kZXggN2Q1MTQ4NC4uNjdiZTNmMiAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9pbmNsdWRlL3VuaXQvY2xvY2suaAorKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L2luY2x1ZGUvdW5pdC9jbG9jay5oCkBAIC0yMCw5ICsyMCw5IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBtbjEwMzAwX2lvYmNsazsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1uMTAzMDBfdHNjX3Blcl9IWjsKIAotI2RlZmluZSBNTjEwMzAwX0lPQ0xLCQkoKHVuc2lnbmVkIGxvbmcpbW4xMDMwMF9pb2NsaykKKyNkZWZpbmUgTU4xMDMwMF9JT0NMSwkJbW4xMDMwMF9pb2NsawogLyogSWYgdGhpcyBwcm9jZXNzb3JzIGhhcyBhIGFub3RoZXIgY2xvY2ssIHVuY29tbWVudCB0aGUgYmVsb3cuICovCi0vKiAjZGVmaW5lIE1OMTAzMDBfSU9CQ0xLCSgodW5zaWduZWQgbG9uZyltbjEwMzAwX2lvYmNsaykgKi8KKy8qICNkZWZpbmUgTU4xMDMwMF9JT0JDTEsJbW4xMDMwMF9pb2JjbGsgKi8KIAogI2Vsc2UgLyogIUNPTkZJR19NTjEwMzAwX1JUQyAqLwogCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIE1OMTAzMDBfVFNDQ0xLCQlNTjEwMzAwX0lPQ0xLCiAKICNpZmRlZiBDT05GSUdfTU4xMDMwMF9SVEMKLSNkZWZpbmUgTU4xMDMwMF9UU0NfUEVSX0haCSgodW5zaWduZWQgbG9uZyltbjEwMzAwX3RzY19wZXJfSFopCisjZGVmaW5lIE1OMTAzMDBfVFNDX1BFUl9IWgltbjEwMzAwX3RzY19wZXJfSFoKICNlbHNlIC8qICFDT05GSUdfTU4xMDMwMF9SVEMgKi8KICNkZWZpbmUgTU4xMDMwMF9UU0NfUEVSX0haCShNTjEwMzAwX1RTQ0NMSy9IWikKICNlbmRpZiAvKiAhQ09ORklHX01OMTAzMDBfUlRDICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCBmMzg4ZGM2Li41MjRkOTM1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTE4LDYgKzE4LDcgQEAKIAlzZWxlY3QgQlVHCiAJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKIAlzZWxlY3QgR0VORVJJQ19BVE9NSUM2NCBpZiAhNjRCSVQKKwlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCWhlbHAKIAkgIFRoZSBQQS1SSVNDIG1pY3JvcHJvY2Vzc29yIGlzIGRlc2lnbmVkIGJ5IEhld2xldHQtUGFja2FyZCBhbmQgdXNlZAogCSAgaW4gbWFueSBvZiB0aGVpciB3b3Jrc3RhdGlvbnMgJiBzZXJ2ZXJzIChIUDkwMDAgNzAwIGFuZCA4MDAgc2VyaWVzLApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmNudGwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZjbnRsLmgKaW5kZXggNWYzOWQ1NS4uMWUxYzgyNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmNudGwuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mY250bC5oCkBAIC0yOCw4ICsyOCw2IEBACiAjZGVmaW5lIEZfU0VUT1dOCTEyCS8qICBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9TRVRTSUcJMTMJLyogIGZvciBzb2NrZXRzLiAqLwogI2RlZmluZSBGX0dFVFNJRwkxNAkvKiAgZm9yIHNvY2tldHMuICovCi0jZGVmaW5lIEZfR0VUT1dOX0VYCTE1Ci0jZGVmaW5lIEZfU0VUT1dOX0VYCTE2CiAKIC8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigpICovCiAjZGVmaW5lIEZfUkRMQ0sJCTAxCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IGRlM2ZlM2EuLjZmZWM0ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0yMSw5ICsyMSw5IEBACiAjZGVmaW5lIEtFUk5FTF9NQVBfRU5ECQkoVE1QQUxJQVNfTUFQX1NUQVJUKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgKnZtYWxsb2Nfc3RhcnQ7CitleHRlcm4gdm9pZCAqcGFyaXNjX3ZtYWxsb2Nfc3RhcnQ7CiAjZGVmaW5lIFBDWExfRE1BX01BUF9TSVpFCSg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkJKCh1bnNpZ25lZCBsb25nKXZtYWxsb2Nfc3RhcnQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJCSgodW5zaWduZWQgbG9uZylwYXJpc2Nfdm1hbGxvY19zdGFydCkKICNkZWZpbmUgVk1BTExPQ19FTkQJCShLRVJORUxfTUFQX0VORCkKICNlbmRpZiAvKl9fQVNTRU1CTFlfXyovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCBjZTkzMTMzLi4wZDY4MTg0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0xLDI5ICsxLDExIEBACiAvKiBoYXJkaXJxLmg6IFBBLVJJU0MgaGFyZCBJUlEgc3VwcG9ydC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTWF0dGhldyBXaWxjb3ggPG1hdHRoZXdAd2lsLmN4PgotICoKLSAqIFRoZSBsb2NraW5nIGlzIHJlYWxseSBxdWl0ZSBpbnRlcmVzdGluZy4gIFRoZXJlJ3MgYSBjcHUtbG9jYWwKLSAqIGNvdW50IG9mIGhvdyBtYW55IGludGVycnVwdHMgYXJlIGJlaW5nIGhhbmRsZWQsIGFuZCBhIGdsb2JhbAotICogbG9jay4gIEFuIGludGVycnVwdCBjYW4gb25seSBiZSBzZXJ2aWNlZCBpZiB0aGUgZ2xvYmFsIGxvY2sKLSAqIGlzIGZyZWUuICBZb3UgY2FuJ3QgYmUgc3VyZSBubyBtb3JlIGludGVycnVwdHMgYXJlIGJlaW5nCi0gKiBzZXJ2aWNlZCB1bnRpbCB5b3UndmUgYWNxdWlyZWQgdGhlIGxvY2sgYW5kIHRoZW4gY2hlY2tlZAotICogYWxsIHRoZSBwZXItY3B1IGludGVycnVwdCBjb3VudHMgYXJlIGFsbCB6ZXJvLiAgSXQncyBhIHNwZWNpYWxpc2VkCi0gKiBicl9sb2NrLCBhbmQgdGhhdCdzIGV4YWN0bHkgaG93IFNwYXJjIGRvZXMgaXQuICBXZSBkb24ndCBiZWNhdXNlCi0gKiBpdCdzIG1vcmUgbG9ja2luZyBmb3IgdXMuICBUaGlzIHdheSBpcyBsb2NrLWZyZWUgaW4gdGhlIGludGVycnVwdCBwYXRoLgogICovCiAKICNpZm5kZWYgX1BBUklTQ19IQVJESVJRX0gKICNkZWZpbmUgX1BBUklTQ19IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgX19zb2Z0aXJxX3BlbmRpbmc7IC8qIHNldF9iaXQgaXMgdXNlZCBvbiB0aGlzICovCi19IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwotCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KLQotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CiAKICNlbmRpZiAvKiBfUEFSSVNDX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCAzMDJmNjhkLi5hZWFkNDBiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNTksOCArNTksMTEgQEAKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpCQkJKCgocmVncyktPmlhb3FbMF0gJiAzKSA/IDEgOiAwKQogI2RlZmluZSB1c2VyX3NwYWNlKHJlZ3MpCQkoKChyZWdzKS0+aWFzcVsxXSAhPSAwKSA/IDEgOiAwKQogI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCSgocmVncyktPmlhb3FbMF0gJiB+MykKKyNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpCSgocmVncyktPmdyWzMwXSkKIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKLSNlbmRpZgorCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGZkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTAsMCArMSw0MCBAQAorLyogc3lzY2FsbC5oICovCisKKyNpZm5kZWYgX0FTTV9QQVJJU0NfU1lTQ0FMTF9IXworI2RlZmluZSBfQVNNX1BBUklTQ19TWVNDQUxMX0hfCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5nclsyMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2dldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGksCisJCQkJCSB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKwlCVUdfT04oaSk7CisKKwlzd2l0Y2ggKG4pIHsKKwljYXNlIDY6CisJCWFyZ3NbNV0gPSByZWdzLT5nclsyMV07CisJY2FzZSA1OgorCQlhcmdzWzRdID0gcmVncy0+Z3JbMjJdOworCWNhc2UgNDoKKwkJYXJnc1szXSA9IHJlZ3MtPmdyWzIzXTsKKwljYXNlIDM6CisJCWFyZ3NbMl0gPSByZWdzLT5nclsyNF07CisJY2FzZSAyOgorCQlhcmdzWzFdID0gcmVncy0+Z3JbMjVdOworCWNhc2UgMToKKwkJYXJnc1swXSA9IHJlZ3MtPmdyWzI2XTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCisjZW5kaWYgLypfQVNNX1BBUklTQ19TWVNDQUxMX0hfKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGFjNzc1YTcuLjdlY2MxMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMzIsNiArMzIsMTEgQEAKICNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbyAgICAgICAgKGluaXRfdGhyZWFkX3VuaW9uLnRocmVhZF9pbmZvKQogI2RlZmluZSBpbml0X3N0YWNrICAgICAgICAgICAgICAoaW5pdF90aHJlYWRfdW5pb24uc3RhY2spCiAKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCisjZGVmaW5lIGN1cnJlbnRfdGhyZWFkX2luZm8oKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKW1mY3RsKDMwKSkKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZICovCisKIC8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCiAKICNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgICAgICAgICAgICAyCkBAIC00MCwxMSArNDUsNiBAQAogI2RlZmluZSBUSFJFQURfU0laRSAgICAgICAgICAgICAoUEFHRV9TSVpFIDw8IFRIUkVBRF9TSVpFX09SREVSKQogI2RlZmluZSBUSFJFQURfU0hJRlQgICAgICAgICAgICAoUEFHRV9TSElGVCArIFRIUkVBRF9TSVpFX09SREVSKQogCi0vKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLwotI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkJKChzdHJ1Y3QgdGhyZWFkX2luZm8gKiltZmN0bCgzMCkpCi0KLSNlbmRpZiAvKiAhX19BU1NFTUJMWSAqLwotCiAjZGVmaW5lIFBSRUVNUFRfQUNUSVZFX0JJVAkyOAogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJKDEgPDwgUFJFRU1QVF9BQ1RJVkVfQklUKQogCkBAIC02MCw2ICs2MCw4IEBACiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNgkvKiByZXN0b3JlIHNhdmVkIHNpZ25hbCBtYXNrICovCiAjZGVmaW5lIFRJRl9GUkVFWkUJCTcJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KICNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJOAkvKiBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgKi8KKyNkZWZpbmUgVElGX1NJTkdMRVNURVAJCTkJLyogc2luZ2xlIHN0ZXBwaW5nPyAqLworI2RlZmluZSBUSUZfQkxPQ0tTVEVQCQkxMAkvKiBicmFuY2ggc3RlcHBpbmc/ICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxIDw8IFRJRl9TSUdQRU5ESU5HKQpAQCAtNjksNiArNzEsOCBAQAogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMSA8PCBUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX0ZSRUVaRQkJKDEgPDwgVElGX0ZSRUVaRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxIDw8IFRJRl9OT1RJRllfUkVTVU1FKQorI2RlZmluZSBfVElGX1NJTkdMRVNURVAJCSgxIDw8IFRJRl9TSU5HTEVTVEVQKQorI2RlZmluZSBfVElGX0JMT0NLU1RFUAkJKDEgPDwgVElGX0JMT0NLU1RFUCkKIAogI2RlZmluZSBfVElGX1VTRVJfV09SS19NQVNLICAgICAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9OT1RJRllfUkVTVU1FIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RJRl9ORUVEX1JFU0NIRUQgfCBfVElGX1JFU1RPUkVfU0lHTUFTSykKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNjk5Y2Y4ZS4uZmNkM2M3MCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTI3MCw4ICsyNzAsOCBAQAogCURFRklORShEVExCX09GRl9DT1VOVCwgb2Zmc2V0b2Yoc3RydWN0IHBkY19jYWNoZV9pbmZvLCBkdF9vZmZfY291bnQpKTsKIAlERUZJTkUoRFRMQl9MT09QLCBvZmZzZXRvZihzdHJ1Y3QgcGRjX2NhY2hlX2luZm8sIGR0X2xvb3ApKTsKIAlCTEFOSygpOwotCURFRklORShQQV9CTE9DS1NURVBfQklULCAzMS1QVF9CTE9DS1NURVBfQklUKTsKLQlERUZJTkUoUEFfU0lOR0xFU1RFUF9CSVQsIDMxLVBUX1NJTkdMRVNURVBfQklUKTsKKwlERUZJTkUoVElGX0JMT0NLU1RFUF9QQV9CSVQsIDMxLVRJRl9CTE9DS1NURVApOworCURFRklORShUSUZfU0lOR0xFU1RFUF9QQV9CSVQsIDMxLVRJRl9TSU5HTEVTVEVQKTsKIAlCTEFOSygpOwogCURFRklORShBU01fUE1EX1NISUZULCBQTURfU0hJRlQpOwogCURFRklORShBU01fUEdESVJfU0hJRlQsIFBHRElSX1NISUZUKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKaW5kZXggOGM0NzEyYi4uM2E0NGY3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKQEAgLTIwNDcsMTIgKzIwNDcsMTMgQEAKIAliLG4gICAgIHN5c2NhbGxfY2hlY2tfc2lnCiAKIHN5c2NhbGxfcmVzdG9yZToKLQkvKiBBcmUgd2UgYmVpbmcgcHRyYWNlZD8gKi8KIAlMRFJFRwlUSV9UQVNLLVRIUkVBRF9TWl9BTEdOLUZSQU1FX1NJWkUoJXIzMCksJXIxCiAKLQlsZHcJVEFTS19QVFJBQ0UoJXIxKSwgJXIxOQotCWJiLDwJJXIxOSwzMSxzeXNjYWxsX3Jlc3RvcmVfcmZpCi0Jbm9wCisJLyogQXJlIHdlIGJlaW5nIHB0cmFjZWQ/ICovCisJbGR3CVRBU0tfRkxBR1MoJXIxKSwlcjE5CisJbGRpCShfVElGX1NJTkdMRVNURVB8X1RJRl9CTE9DS1NURVApLCVyMgorCWFuZCxDT05EKD0pCSVyMTksJXIyLCVyMAorCWIsbglzeXNjYWxsX3Jlc3RvcmVfcmZpCiAKIAlsZG8JVEFTS19QVF9GUjMxKCVyMSksJXIxOQkJICAgLyogcmVsb2FkIGZwcmVncyAqLwogCXJlc3RfZnAJJXIxOQpAQCAtMjExMywxNiArMjExNCwxNiBAQAogCWxkaQkweDBiLCVyMjAJCQkgICAvKiBDcmVhdGUgbmV3IFBTVyAqLwogCWRlcGkJLTEsMTMsMSwlcjIwCQkJICAgLyogQywgUSwgRCwgYW5kIEkgYml0cyAqLwogCi0JLyogVGhlIHZhbHVlcyBvZiBQQV9TSU5HTEVTVEVQX0JJVCBhbmQgUEFfQkxPQ0tTVEVQX0JJVCBhcmUKLQkgKiBzZXQgaW4gaW5jbHVkZS9saW51eC9wdHJhY2UuaCBhbmQgY29udmVydGVkIHRvIFBBIGJpdG1hcAorCS8qIFRoZSB2YWx1ZXMgb2YgU0lOR0xFU1RFUF9CSVQgYW5kIEJMT0NLU1RFUF9CSVQgYXJlCisJICogc2V0IGluIHRocmVhZF9pbmZvLmggYW5kIGNvbnZlcnRlZCB0byBQQSBiaXRtYXAKIAkgKiBudW1iZXJzIGluIGFzbS1vZmZzZXRzLmMgKi8KIAotCS8qIGlmICgoJXIxOS5QQV9TSU5HTEVTVEVQX0JJVCkpIHsgJXIyMC4yNz0xfSAqLwotCWV4dHJ1LD0JJXIxOSxQQV9TSU5HTEVTVEVQX0JJVCwxLCVyMAorCS8qIGlmICgoJXIxOS5TSU5HTEVTVEVQX0JJVCkpIHsgJXIyMC4yNz0xfSAqLworCWV4dHJ1LD0JJXIxOSxUSUZfU0lOR0xFU1RFUF9QQV9CSVQsMSwlcjAKIAlkZXBpCS0xLDI3LDEsJXIyMAkJCSAgIC8qIFIgYml0ICovCiAKLQkvKiBpZiAoKCVyMTkuUEFfQkxPQ0tTVEVQX0JJVCkpIHsgJXIyMC43PTF9ICovCi0JZXh0cnUsPSAlcjE5LFBBX0JMT0NLU1RFUF9CSVQsMSwlcjAKKwkvKiBpZiAoKCVyMTkuQkxPQ0tTVEVQX0JJVCkpIHsgJXIyMC43PTF9ICovCisJZXh0cnUsPSAlcjE5LFRJRl9CTE9DS1NURVBfUEFfQklULDEsJXIwCiAJZGVwaQktMSw3LDEsJXIyMAkJCSAgIC8qIFQgYml0ICovCiAKIAlTVFJFRwklcjIwLFRBU0tfUFRfUFNXKCVyMSkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwppbmRleCAzMzBmNTM2Li4yZTc2MTBjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCkBAIC00MjMsOCArNDIzLDMgQEAKICAgICAgICAgc2V0X2VpZW0oY3B1X2VpZW0pOwkvKiBFSUVNIDogZW5hYmxlIGFsbCBleHRlcm5hbCBpbnRyICovCiAKIH0KLQotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXByaW50ayhLRVJOX1dBUk5JTkcgInVuZXhwZWN0ZWQgSVJRICVkXG4iLCBpcnEpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCmluZGV4IDYxZWUwZWUuLjIxMjA3NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKQEAgLTg5Myw3ICs4OTMsNyBAQAogCSAqIG91cnNlbHZlcyAqLwogCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgewogCQlpZihzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQgotCQkgICAmJiAoc2VjaGRyc1tpXS5zaF90eXBlICYgU0hGX0FMTE9DKSkgeworCQkgICAmJiAoc2VjaGRyc1tpXS5zaF9mbGFncyAmIFNIRl9BTExPQykpIHsKIAkJCWludCBzdHJpbmRleCA9IHNlY2hkcnNbaV0uc2hfbGluazsKIAkJCS8qIEZJWE1FOiBBV0ZVTCBIQUNLCiAJCQkgKiBUaGUgY2FzdCBpcyB0byBkcm9wIHRoZSBjb25zdCBmcm9tCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOTI3ZGIzNi4uYzRmNDllNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KQEAgLTM1LDcgKzM2LDggQEAKICAqLwogdm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0JdGFzay0+cHRyYWNlICY9IH4oUFRfU0lOR0xFU1RFUHxQVF9CTE9DS1NURVApOworCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfU0lOR0xFU1RFUCk7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9CTE9DS1NURVApOwogCiAJLyogbWFrZSBzdXJlIHRoZSB0cmFwIGJpdHMgYXJlIG5vdCBzZXQgKi8KIAlwYV9wc3codGFzayktPnIgPSAwOwpAQCAtNTUsOCArNTcsOCBAQAogCiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQl0YXNrLT5wdHJhY2UgJj0gflBUX0JMT0NLU1RFUDsKLQl0YXNrLT5wdHJhY2UgfD0gUFRfU0lOR0xFU1RFUDsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX0JMT0NLU1RFUCk7CisJc2V0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfU0lOR0xFU1RFUCk7CiAKIAlpZiAocGFfcHN3KHRhc2spLT5uKSB7CiAJCXN0cnVjdCBzaWdpbmZvIHNpOwpAQCAtOTgsOCArMTAwLDggQEAKIAogdm9pZCB1c2VyX2VuYWJsZV9ibG9ja19zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQl0YXNrLT5wdHJhY2UgJj0gflBUX1NJTkdMRVNURVA7Ci0JdGFzay0+cHRyYWNlIHw9IFBUX0JMT0NLU1RFUDsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRVNURVApOworCXNldF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX0JMT0NLU1RFUCk7CiAKIAkvKiBFbmFibGUgdGFrZW4gYnJhbmNoIHRyYXAuICovCiAJcGFfcHN3KHRhc2spLT5yID0gMDsKQEAgLTI2MywyMiArMjY1LDIwIEBACiB9CiAjZW5kaWYKIAotCi12b2lkIHN5c2NhbGxfdHJhY2Uodm9pZCkKK2xvbmcgZG9fc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQotCQlyZXR1cm47Ci0JaWYgKCEoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCi0JCXJldHVybjsKLQlwdHJhY2Vfbm90aWZ5KFNJR1RSQVAgfCAoKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1RSQUNFU1lTR09PRCkKLQkJCQkgPyAweDgwIDogMCkpOwotCS8qCi0JICogdGhpcyBpc24ndCB0aGUgc2FtZSBhcyBjb250aW51aW5nIHdpdGggYSBzaWduYWwsIGJ1dCBpdCB3aWxsIGRvCi0JICogZm9yIG5vcm1hbCB1c2UuICBzdHJhY2Ugb25seSBjb250aW51ZXMgd2l0aCBhIHNpZ25hbCBpZiB0aGUKLQkgKiBzdG9wcGluZyBzaWduYWwgaXMgbm90IFNJR1RSQVAuICAtYnJsCi0JICovCi0JaWYgKGN1cnJlbnQtPmV4aXRfY29kZSkgewotCQlzZW5kX3NpZyhjdXJyZW50LT5leGl0X2NvZGUsIGN1cnJlbnQsIDEpOwotCQljdXJyZW50LT5leGl0X2NvZGUgPSAwOwotCX0KKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkgJiYKKwkgICAgdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHJlZ3MpKQorCQlyZXR1cm4gLTFMOworCisJcmV0dXJuIHJlZ3MtPmdyWzIwXTsKK30KKwordm9pZCBkb19zeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHN0ZXBwaW5nID0gdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkgfHwKKwkJdGVzdF90aHJlYWRfZmxhZyhUSUZfQkxPQ0tTVEVQKTsKKworCWlmIChzdGVwcGluZyB8fCB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKKwkJdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2V4aXQocmVncywgc3RlcHBpbmcpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCmluZGV4IDhlYjNjNjMuLmU4NDY3ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KQEAgLTM0LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogI2lmZGVmIENPTkZJR19DT01QQVQKLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlICJzaWduYWwzMi5oIgogI2VuZGlmCiAKQEAgLTQ2OCw2ICs0NjgsOSBAQAogCQlzaWdhZGRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsc2lnKTsKIAlyZWNhbGNfc2lncGVuZGluZygpOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwl0cmFjZWhvb2tfc2lnbmFsX2hhbmRsZXIoc2lnLCBpbmZvLCBrYSwgcmVncywgMCk7CisKIAlyZXR1cm4gMTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKaW5kZXggNTlmYzFhNC4uZjVmOTYwMiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCkBAIC0yODgsMTggKzI4OCwyMyBAQAogCVNUUkVHCSVyMTgsUFRfR1IxOCglcjIpCiAJLyogRmluaXNoZWQgc2F2aW5nIHRoaW5ncyBmb3IgdGhlIGRlYnVnZ2VyICovCiAKLQlsZGlsCUwlc3lzY2FsbF90cmFjZSwlcjEKKwljb3B5CSVyMiwlcjI2CisJbGRpbAlMJWRvX3N5c2NhbGxfdHJhY2VfZW50ZXIsJXIxCiAJbGRpbAlMJXRyYWNlc3lzX25leHQsJXIyCi0JYmUJUiVzeXNjYWxsX3RyYWNlKCVzcjcsJXIxKQorCWJlCVIlZG9fc3lzY2FsbF90cmFjZV9lbnRlciglc3I3LCVyMSkKIAlsZG8JUiV0cmFjZXN5c19uZXh0KCVyMiksJXIyCiAJCi10cmFjZXN5c19uZXh0OgkKK3RyYWNlc3lzX25leHQ6CisJLyogZG9fc3lzY2FsbF90cmFjZV9lbnRlciBlaXRoZXIgcmV0dXJuZWQgdGhlIHN5c2NhbGxubywgb3IgLTFMLAorCSAqICBzbyB3ZSBza2lwIHJlc3RvcmluZyB0aGUgUFRfR1IyMCBiZWxvdywgc2luY2Ugd2UgcHVsbGVkIGl0IGZyb20KKwkgKiAgdGFzay0+dGhyZWFkLnJlZ3MuZ3JbMjBdIGFib3ZlLgorCSAqLworCWNvcHkJJXJldDAsJXIyMAogCWxkaWwJTCVzeXNfY2FsbF90YWJsZSwlcjEKIAlsZG8gICAgIFIlc3lzX2NhbGxfdGFibGUoJXIxKSwgJXIxOQogCiAJbGRvICAgICAtVEhSRUFEX1NaX0FMR04tRlJBTUVfU0laRSglcjMwKSwlcjEgICAgICAvKiBnZXQgdGFzayBwdHIgKi8KIAlMRFJFRwlUSV9UQVNLKCVyMSksICVyMQotCUxEUkVHICAgVEFTS19QVF9HUjIwKCVyMSksICVyMjAKIAlMRFJFRyAgIFRBU0tfUFRfR1IyNiglcjEpLCAlcjI2CQkvKiBSZXN0b3JlIHRoZSB1c2VycyBhcmdzICovCiAJTERSRUcgICBUQVNLX1BUX0dSMjUoJXIxKSwgJXIyNQogCUxEUkVHICAgVEFTS19QVF9HUjI0KCVyMSksICVyMjQKQEAgLTMzNiw3ICszNDEsOCBAQAogI2lmZGVmIENPTkZJR182NEJJVAogCWxkbwktMTYoJXIzMCksJXIyOQkJCS8qIFJlZmVyZW5jZSBwYXJhbSBzYXZlIGFyZWEgKi8KICNlbmRpZgotCWJsCXN5c2NhbGxfdHJhY2UsICVyMgorCWxkbwlUQVNLX1JFR1MoJXIxKSwlcjI2CisJYmwJZG9fc3lzY2FsbF90cmFjZV9leGl0LCVyMgogCVNUUkVHICAgJXIyOCxUQVNLX1BUX0dSMjgoJXIxKSAgICAgICAgICAvKiBzYXZlIHJldHVybiB2YWx1ZSBub3cgKi8KIAlsZG8gICAgIC1USFJFQURfU1pfQUxHTi1GUkFNRV9TSVpFKCVyMzApLCVyMSAgICAgIC8qIGdldCB0YXNrIHB0ciAqLwogCUxEUkVHCVRJX1RBU0soJXIxKSwgJXIxCkBAIC0zNTMsMTIgKzM1OSwxMiBAQAogCiB0cmFjZXN5c19zaWdleGl0OgogCWxkbyAgICAgLVRIUkVBRF9TWl9BTEdOLUZSQU1FX1NJWkUoJXIzMCksJXIxICAgICAgLyogZ2V0IHRhc2sgcHRyICovCi0JTERSRUcJMCglcjEpLCAlcjEKKwlMRFJFRwlUSV9UQVNLKCVyMSksICVyMQogI2lmZGVmIENPTkZJR182NEJJVAogCWxkbwktMTYoJXIzMCksJXIyOQkJCS8qIFJlZmVyZW5jZSBwYXJhbSBzYXZlIGFyZWEgKi8KICNlbmRpZgotCWJsCXN5c2NhbGxfdHJhY2UsICVyMgotCW5vcAorCWJsCWRvX3N5c2NhbGxfdHJhY2VfZXhpdCwlcjIKKwlsZG8JVEFTS19SRUdTKCVyMSksJXIyNgogCiAJbGRpbAlMJXN5c2NhbGxfZXhpdF9yZmksJXIxCiAJYmUsbglSJXN5c2NhbGxfZXhpdF9yZmkoJXNyNywlcjEpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGFlYTE3ODQuLmZkYTRiYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAkKIC8qIGxkIHNjcmlwdCB0byBtYWtlIGhwcGEgTGludXgga2VybmVsICovCiAjaWZuZGVmIENPTkZJR182NEJJVApAQCAtNzcsMTMgKzc4LDcgQEAKIAkgKi8KIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlkYXRhX3N0YXJ0ID0gLjsKLQkuID0gQUxJR04oMTYpOwotCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLwotCV9fZXhfdGFibGUgOiB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0KKwlFWENFUFRJT05fVEFCTEUoMTYpCiAKIAlOT1RFUwogCkBAIC05NCwyMyArODksOCBAQAogCQlfX3N0b3BfX191bndpbmQgPSAuOwogCX0KIAotCS8qIHJhcmVseSBjaGFuZ2VkIGRhdGEgbGlrZSBjcHUgbWFwcyAqLwotCS4gPSBBTElHTigxNik7Ci0JLmRhdGEucmVhZF9tb3N0bHkgOiB7Ci0JCSooLmRhdGEucmVhZF9tb3N0bHkpCi0JfQotCi0JLiA9IEFMSUdOKEwxX0NBQ0hFX0JZVEVTKTsKIAkvKiBEYXRhICovCi0JLmRhdGEgOiB7Ci0JCURBVEFfREFUQQotCQlDT05TVFJVQ1RPUlMKLQl9Ci0KLQkuID0gQUxJR04oTDFfQ0FDSEVfQllURVMpOwotCS5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogewotCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQotCX0KKwlSV19EQVRBX1NFQ1RJT04oTDFfQ0FDSEVfQllURVMsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAKIAkvKiBQQS1SSVNDIGxvY2tzIHJlcXVpcmVzIDE2LWJ5dGUgYWxpZ25tZW50ICovCiAJLiA9IEFMSUdOKDE2KTsKQEAgLTExOCwxNyArOTgsNiBAQAogCQkqKC5kYXRhLmxvY2tfYWxpZ25lZCkKIAl9CiAKLQkvKiBub3NhdmUgZGF0YSBpcyByZWFsbHkgb25seSB1c2VkIGZvciBzb2Z0d2FyZSBzdXNwZW5kLi4uaXQncyBoZXJlCi0JICoganVzdCBpbiBjYXNlIHdlIGV2ZXIgaW1wbGVtZW50IGl0Ci0JICovCi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JX19ub3NhdmVfYmVnaW4gPSAuOwotCS5kYXRhX25vc2F2ZSA6IHsKLQkJKiguZGF0YS5ub3NhdmUpCi0JfQotCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCV9fbm9zYXZlX2VuZCA9IC47Ci0KIAkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCiAJX2VkYXRhID0gLjsKIApAQCAtMTQ3LDE0ICsxMTYsNiBAQAogCX0KIAlfX2Jzc19zdG9wID0gLjsKIAotCi0JLyogYXNzZW1ibGVyIGNvZGUgZXhwZWN0cyBpbml0X3Rhc2sgdG8gYmUgMTZrIGFsaWduZWQgKi8KLQkuID0gQUxJR04oMTYzODQpOwotCS8qIGluaXRfdGFzayAqLwotCS5kYXRhLmluaXRfdGFzayA6IHsKLQkJKiguZGF0YS5pbml0X3Rhc2spCi0JfQotCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJLiA9IEFMSUdOKDE2KTsKIAkvKiBMaW5rYWdlIHRhYmxlcyAqLwpAQCAtMTcyLDY0ICsxMzMsMTcgQEAKIAkvKiByZXNlcnZlIHNwYWNlIGZvciBpbnRlcnJ1cHQgc3RhY2sgYnkgYWxpZ25pbmcgX19pbml0KiB0byAxNmsgKi8KIAkuID0gQUxJR04oMTYzODQpOwogCV9faW5pdF9iZWdpbiA9IC47Ci0JLmluaXQudGV4dCA6IHsgCi0JCV9zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX2Vpbml0dGV4dCA9IC47Ci0JfQotCS5pbml0LmRhdGEgOiB7Ci0JCUlOSVRfREFUQQotCX0KLQkuID0gQUxJR04oMTYpOwotCS5pbml0LnNldHVwIDogewotCQlfX3NldHVwX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5zZXR1cCkKLQkJX19zZXR1cF9lbmQgPSAuOwotCX0KLQkuaW5pdGNhbGwuaW5pdCA6IHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47Ci0JfQotCS5jb25faW5pdGNhbGwuaW5pdCA6IHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0JU0VDVVJJVFlfSU5JVAotCi0JLyogYWx0ZXJuYXRlIGluc3RydWN0aW9uIHJlcGxhY2VtZW50LiAgVGhpcyBpcyBhIG1lY2hhbmlzbSB4ODYgdXNlcwotCSAqIHRvIGRldGVjdCB0aGUgQ1BVIHR5cGUgYW5kIHJlcGxhY2UgZ2VuZXJpYyBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMKLQkgKiB3aXRoIENQVSBzcGVjaWZpYyBvbmVzLiAgV2UgZG9uJ3QgY3VycmVudGx5IGRvIHRoaXMgaW4gUEEsIGJ1dAotCSAqIGl0IHNlZW1zIGxpa2UgYSBnb29kIGlkZWEuLi4KLQkgKi8KLQkuID0gQUxJR04oNCk7Ci0JLmFsdGluc3RydWN0aW9ucyA6IHsKLQkJX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKLQkJKiguYWx0aW5zdHJ1Y3Rpb25zKQotCQlfX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsgCi0JfSAKLQkuYWx0aW5zdHJfcmVwbGFjZW1lbnQgOiB7Ci0JCSooLmFsdGluc3RyX3JlcGxhY2VtZW50KQotCX0gCi0KLQkvKiAuZXhpdC50ZXh0IGlzIGRpc2NhcmQgYXQgcnVudGltZSwgbm90IGxpbmsgdGltZSwgdG8gZGVhbCB3aXRoIHJlZmVyZW5jZXMKLQkgKiAgZnJvbSAuYWx0aW5zdHJ1Y3Rpb25zIGFuZCAuZWhfZnJhbWUKLQkgKi8KLQkuZXhpdC50ZXh0IDogeworCUlOSVRfVEVYVF9TRUNUSU9OKDE2Mzg0KQorCUlOSVRfREFUQV9TRUNUSU9OKDE2KQorCS8qIHdlIGhhdmUgdG8gZGlzY2FyZCBleGl0IHRleHQgYW5kIHN1Y2ggYXQgcnVudGltZSwgbm90IGxpbmsgdGltZSAqLworCS5leGl0LnRleHQgOgorCXsKIAkJRVhJVF9URVhUCiAJfQotCS5leGl0LmRhdGEgOiB7CisJLmV4aXQuZGF0YSA6CisJewogCQlFWElUX0RBVEEKIAl9Ci0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JLmluaXQucmFtZnMgOiB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKLQl9Ci0jZW5kaWYKIAogCVBFUkNQVShQQUdFX1NJWkUpCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKaW5kZXggZDVhY2EzMS4uMTNiNmUzZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCisrKyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwpAQCAtNDM0LDggKzQzNCw4IEBACiAjZGVmaW5lIFNFVF9NQVBfT0ZGU0VUKHgpICgodm9pZCAqKSgoKHVuc2lnbmVkIGxvbmcpKHgpICsgVk1fTUFQX09GRlNFVCkgXAogCQkJCSAgICAgJiB+KFZNX01BUF9PRkZTRVQtMSkpKQogCi12b2lkICp2bWFsbG9jX3N0YXJ0IF9fcmVhZF9tb3N0bHk7Ci1FWFBPUlRfU1lNQk9MKHZtYWxsb2Nfc3RhcnQpOwordm9pZCAqcGFyaXNjX3ZtYWxsb2Nfc3RhcnQgX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0wocGFyaXNjX3ZtYWxsb2Nfc3RhcnQpOwogCiAjaWZkZWYgQ09ORklHX1BBMTEKIHVuc2lnbmVkIGxvbmcgcGN4bF9kbWFfc3RhcnQgX19yZWFkX21vc3RseTsKQEAgLTQ5NiwxMyArNDk2LDE0IEBACiAjaWZkZWYgQ09ORklHX1BBMTEKIAlpZiAoaHBwYV9kbWFfb3BzID09ICZwY3hsX2RtYV9vcHMpIHsKIAkJcGN4bF9kbWFfc3RhcnQgPSAodW5zaWduZWQgbG9uZylTRVRfTUFQX09GRlNFVChNQVBfU1RBUlQpOwotCQl2bWFsbG9jX3N0YXJ0ID0gU0VUX01BUF9PRkZTRVQocGN4bF9kbWFfc3RhcnQgKyBQQ1hMX0RNQV9NQVBfU0laRSk7CisJCXBhcmlzY192bWFsbG9jX3N0YXJ0ID0gU0VUX01BUF9PRkZTRVQocGN4bF9kbWFfc3RhcnQKKwkJCQkJCSsgUENYTF9ETUFfTUFQX1NJWkUpOwogCX0gZWxzZSB7CiAJCXBjeGxfZG1hX3N0YXJ0ID0gMDsKLQkJdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKE1BUF9TVEFSVCk7CisJCXBhcmlzY192bWFsbG9jX3N0YXJ0ID0gU0VUX01BUF9PRkZTRVQoTUFQX1NUQVJUKTsKIAl9CiAjZWxzZQotCXZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChNQVBfU1RBUlQpOworCXBhcmlzY192bWFsbG9jX3N0YXJ0ID0gU0VUX01BUF9PRkZTRVQoTUFQX1NUQVJUKTsKICNlbmRpZgogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlICglZGsga2VybmVsIGNvZGUsICVkayByZXNlcnZlZCwgJWRrIGRhdGEsICVkayBpbml0KVxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggNGZkNDc5MC4uMmJhMTRlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTM4NSw5ICszODUsMTUgQEAKIAogY29uZmlnIE5PREVTX1NISUZUCiAJaW50CisJZGVmYXVsdCAiOCIgaWYgUFBDNjQKIAlkZWZhdWx0ICI0IgogCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUwogCitjb25maWcgTUFYX0FDVElWRV9SRUdJT05TCisJaW50CisJZGVmYXVsdCAiMjU2IiBpZiBQUEM2NAorCWRlZmF1bHQgIjMyIgorCiBjb25maWcgQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gUFBDNjQKQEAgLTQwOCw2ICs0MTQsMTAgQEAKIGNvbmZpZyBBUkNIX1BPUFVMQVRFU19OT0RFX01BUAogCWRlZl9ib29sIHkKIAorY29uZmlnIFNZU19TVVBQT1JUU19IVUdFVExCRlMKKyAgICAgICBkZWZfYm9vbCB5CisgICAgICAgZGVwZW5kcyBvbiBQUENfQk9PSzNTXzY0CisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIEFSQ0hfTUVNT1JZX1BST0JFCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKaW5kZXggYWFjZjYyOS4uMWE1NGEzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQpAQCAtMTY0LDYgKzE2NCwxNyBAQAogCiBib290IDo9IGFyY2gvJChBUkNIKS9ib290CiAKK2lmZXEgKCQoQ09ORklHX1JFTE9DQVRBQkxFKSx5KQorcXVpZXRfY21kX3JlbG9jc19jaGVjayA9IENBTEwgICAgJDwKKyAgICAgIGNtZF9yZWxvY3NfY2hlY2sgPSBwZXJsICQ8ICIkKE9CSkRVTVApIiAiJChvYmopL3ZtbGludXgiCisKK1BIT05ZICs9IHJlbG9jc19jaGVjaworcmVsb2NzX2NoZWNrOiBhcmNoL3Bvd2VycGMvcmVsb2NzX2NoZWNrLnBsIHZtbGludXgKKwkkKGNhbGwgY21kLHJlbG9jc19jaGVjaykKKworekltYWdlOiByZWxvY3NfY2hlY2sKK2VuZGlmCisKICQoQk9PVF9UQVJHRVRTKTogdm1saW51eAogCSQoUSkkKE1BS0UpIEFSQ0g9cHBjNjQgJChidWlsZCk9JChib290KSAkKHBhdHN1YnN0ICUsJChib290KS8lLCRAKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9hZGRSYW1EaXNrLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9hZGRSYW1EaXNrLmMKaW5kZXggYzAyYTk5OS4uODkzZjQ0NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkUmFtRGlzay5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2FkZFJhbURpc2suYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJcmV0dXJuIDY0OwogfQotdm9pZCBnZXQ0ayhGSUxFICpmaWxlLCBjaGFyICpidWYgKQorc3RhdGljIHZvaWQgZ2V0NGsoRklMRSAqZmlsZSwgY2hhciAqYnVmICkKIHsKIAl1bnNpZ25lZCBqOwogCXVuc2lnbmVkIG51bSA9IGZyZWFkKGJ1ZiwgMSwgNDA5NiwgZmlsZSk7CkBAIC02NiwxMiArNjYsMTIgQEAKIAkJYnVmW2pdID0gMDsKIH0KIAotdm9pZCBwdXQ0ayhGSUxFICpmaWxlLCBjaGFyICpidWYgKQorc3RhdGljIHZvaWQgcHV0NGsoRklMRSAqZmlsZSwgY2hhciAqYnVmICkKIHsKIAlmd3JpdGUoYnVmLCAxLCA0MDk2LCBmaWxlKTsKIH0KIAotdm9pZCBkZWF0aChjb25zdCBjaGFyICptc2csIEZJTEUgKmZkZXNjLCBjb25zdCBjaGFyICpmbmFtZSkgCitzdGF0aWMgdm9pZCBkZWF0aChjb25zdCBjaGFyICptc2csIEZJTEUgKmZkZXNjLCBjb25zdCBjaGFyICpmbmFtZSkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgbXNnKTsKIAlmY2xvc2UoZmRlc2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NtNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwppbmRleCBjZWU4MDgwLi5kZDM4NjA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwpAQCAtMjEwLDcgKzIxMCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCXNyYW1AODAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCmluZGV4IDRjMzYxODYuLjhlOWJlNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCkBAIC0xOTksNyArMTk5LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAKIAkJCXJ0Y0A1MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJhdCwyNGMwOCI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwppbmRleCBkZTMwYjNmLi44MmZmMmIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKQEAgLTI0Nyw3ICsyNDcsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTI1Niw3ICsyNTUsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCQlzcmFtQDgwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1zcmFtIjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKaW5kZXggZDEzY2IxMS4uZTQ1YTYzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKQEAgLTI1MSw3ICsyNTEsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yNjAsNyArMjU5LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZWRpYTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKaW5kZXggZTI5N2Q4Yi4uMGMzOTAyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKQEAgLTIyMyw3ICsyMjMsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yMzIsNyArMjMxLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKaW5kZXggN2JlOGNhMC4uNmNhNGZjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKQEAgLTIyMiw3ICsyMjIsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCmluZGV4IGMyYjhkYmYuLmMzNTNkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKQEAgLTIwOSw3ICsyMDksNiBAQAogCQkJcmVnID0gPDB4MTcwMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8OSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDE3MjAgewpAQCAtMjIwLDcgKzIxOSw2IEBACiAJCQlyZWcgPSA8MHgxNzIwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwxMCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDE3NDAgewpAQCAtMjMxLDcgKzIyOSw2IEBACiAJCQlyZWcgPSA8MHgxNzQwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwxMSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjY29udHJvbEAxNzYwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3dsYW4uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfd2xhbi5kdHMKaW5kZXggOWE2MDM2OS4uOWVhNzgzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfd2xhbi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfd2xhbi5kdHMKQEAgLTY3LDcgKzY3LDcgQEAKIAkJCWRldmljZS13aWR0aCA9IDwxPjsKIAogCQkJcGFydGl0aW9uQDAgewotCQkJCXJlZyA9IDwwIDB4ODAwMD47CisJCQkJcmVnID0gPDAgMHg4MDAwMD47CiAJCQkJbGFiZWwgPSAidS1ib290IjsKIAkJCQlyZWFkLW9ubHk7CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzCmluZGV4IDA2MzMyZDYuLjFlM2VjOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY5bWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMKQEAgLTQ4Nyw4ICs0ODcsOCBAQAogCQkJCSAmcWVfcGlvX2YgNSAwICAgLyogVVNCVE4gKi8KIAkJCQkgJnFlX3Bpb19mIDYgMCAgIC8qIFVTQlJQICovCiAJCQkJICZxZV9waW9fZiA4IDAgICAvKiBVU0JSTiAqLwotCQkJCSAmYmNzcjE3ICAgNiAwICAgLyogU1BFRUQgKi8KLQkJCQkgJmJjc3IxNyAgIDUgMT47IC8qIFBPV0VSICovCisJCQkJICZiY3NyMTcgICAxIDAgICAvKiBTUEVFRCAqLworCQkJCSAmYmNzcjE3ICAgMiAwPjsgLyogUE9XRVIgKi8KIAkJfTsKIAogCQllbmV0MDogdWNjQDIwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL211Y21jNTIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL211Y21jNTIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MmE3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXVjbWM1Mi5kdHMKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBNYW5yb2xhbmQgbXVjbWM1MiBib2FyZCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIm1hbnJvbGFuZCxtdWNtYzUyIjsKKwljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsNTIwMEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gZnJvbSBib290bG9hZGVyCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwNDAwMDAwMD47CS8vIDY0TUIKKwl9OworCisJc29jNTIwMEBmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7CisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCXJlZyA9IDwweGYwMDAwMDAwIDB4MDAwMDAxMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCXN5c3RlbS1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKworCQljZG1AMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWNkbSIsImZzbCxtcGM1MjAwLWNkbSI7CisJCQlyZWcgPSA8MHgyMDAgMHgzOD47CisJCX07CisKKwkJbXBjNTIwMF9waWM6IGludGVycnVwdC1jb250cm9sbGVyQDUwMCB7CisJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGljIiwiZnNsLG1wYzUyMDAtcGljIjsKKwkJCXJlZyA9IDwweDUwMCAweDgwPjsKKwkJfTsKKworCQlncHQwOiB0aW1lckA2MDAgewkvLyBHUFQgMCBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDE6IHRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQyOiB0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjIwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MzogdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYzMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CisJCQlyZWcgPSA8MHhiMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKKwkJCXJlZyA9IDwweGMwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKKwkJCXJlZyA9IDwweDEyMDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCisJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCisJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKKwkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKKwkJfTsKKworCQl4bGJAMWYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi14bGIiLCJmc2wsbXBjNTIwMC14bGIiOworCQkJcmVnID0gPDB4MWYwMCAweDEwMD47CisJCX07CisKKwkJc2VyaWFsQDIwMDAgeyAvKiBQU0MxIGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxIDA+OworCQl9OworCisJCXNlcmlhbEAyMjAwIHsgLyogUFNDMiBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MjIwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKKwkJfTsKKworCQlzZXJpYWxAMmMwMCB7IC8qIFBTQzYgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDJjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDQgMD47CisJCX07CisKKwkJZXRoZXJuZXRAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCX07CisKKwkJbWRpb0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsgCS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47IAkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWNvbXBhdGlibGUgPSAiaW50ZWwsbHh0OTcxIjsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCisJCWF0YUAzYTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CisJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OworCQl9OworCisJCWkyY0AzZDQwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkNDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47CisJCQlod21vbkAyYyB7CisJCQkJY29tcGF0aWJsZSA9ICJhZCxhZG05MjQwIjsKKwkJCQlyZWcgPSA8MHgyYz47CisJCQl9OworCQkJcnRjQDUxIHsKKwkJCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKKwkJCQlyZWcgPSA8MHg1MT47CisJCQl9OworCQl9OworCisJCXNyYW1AODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CisJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CisJCX07CisJfTsKKworCXBjaUBmMDAwMGQwMCB7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGNpIiwiZnNsLG1wYzUyMDAtcGNpIjsKKwkJcmVnID0gPDB4ZjAwMDBkMDAgMHgxMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCQkvKiBJRFNFTCAweDEwICovCisJCQkJMHg4MDAwIDAgMCAxICZtcGM1MjAwX3BpYyAwIDMgMworCQkJCTB4ODAwMCAwIDAgMiAmbXBjNTIwMF9waWMgMCAzIDMKKwkJCQkweDgwMDAgMCAwIDMgJm1wYzUyMDBfcGljIDAgMiAzCisJCQkJMHg4MDAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDEgMworCQkJCT47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgorCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgMTAgMD47CisJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4NjAwMDAwMDAgMHg2MDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMjAwMDAwMCAwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MDEwMDAwMDA+OworCX07CisKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsImZzbCxtcGM1MjAwLWxwYiIsInNpbXBsZS1idXMiOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmY4MDAwMDAgMHgwMDgwMDAwMAorCQkJICAxIDAgMHg4MDAwMDAwMCAweDAwODAwMDAwCisJCQkgIDMgMCAweDgwMDAwMDAwIDB4MDA4MDAwMDA+OworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDB4MDA4MDAwMDA+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiRFRTIjsKKwkJCQlyZWcgPSA8MHgwIDB4MDAxMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCWxhYmVsID0gIktlcm5lbCI7CisJCQkJcmVnID0gPDB4MTAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAzMDAwMDAgeworCQkJCWxhYmVsID0gIlJvb3RGUyI7CisJCQkJcmVnID0gPDB4MDAzMDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDUwMDAwMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4MDA1MDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDcwMDAwMCB7CisJCQkJbGFiZWwgPSAiVS1Cb290IjsKKwkJCQlyZWcgPSA8MHgwMDcwMDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzQwMDAwIHsKKwkJCQlsYWJlbCA9ICJFbnYiOworCQkJCXJlZyA9IDwweDAwNzQwMDAwIDB4MDAwMjAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3NjAwMDAgeworCQkJCWxhYmVsID0gInJlZC4gRW52IjsKKwkJCQlyZWcgPSA8MHgwMDc2MDAwMCAweDAwMDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzgwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZXNlcnZlIjsKKwkJCQlyZWcgPSA8MHgwMDc4MDAwMCAweDAwMDgwMDAwPjsKKwkJCX07CisJCX07CisKKwkJc2ltcGxlMTAwOiBncGlvLWNvbnRyb2xsZXItMTAwQDMsNjAwMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDEwMCAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTEwNDogZ3Bpby1jb250cm9sbGVyLTEwNEAzLDYwMDEwNCB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAxMDQgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDA6IGdwaW8tY29udHJvbGxlci0yMDBAMyw2MDAyMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjAwIDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjAxOiBncGlvLWNvbnRyb2xsZXItMjAxQDMsNjAwMjAxIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwMSAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwMjogZ3Bpby1jb250cm9sbGVyLTIwMkAzLDYwMDIwMiB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDIgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDM6IGdwaW8tY29udHJvbGxlci0yMDNAMyw2MDAyMDMgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjAzIDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjA0OiBncGlvLWNvbnRyb2xsZXItMjA0QDMsNjAwMjA0IHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwNCAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwNjogZ3Bpby1jb250cm9sbGVyLTIwNkAzLDYwMDIwNiB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDYgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDc6IGdwaW8tY29udHJvbGxlci0yMDdAMyw2MDAyMDcgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjA3IDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjBmOiBncGlvLWNvbnRyb2xsZXItMjBmQDMsNjAwMjBmIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwZiAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKaW5kZXggMzBiZmRjMC4uOGE0ZWMzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKQEAgLTI0NCw3ICsyNDQsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yNTMsNyArMjUyLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCQlydGNANTEgewogCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOwogCQkJCXJlZyA9IDwweDUxPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMKaW5kZXggMDMwMDQyNi4uODVkODU3YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMKQEAgLTI0NCw3ICsyNDQsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yNTMsNyArMjUyLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCQlydGNANTEgewogCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOwogCQkJCXJlZyA9IDwweDUxPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cwppbmRleCA5ZWVmZTAwLi45NGEzMzIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzCkBAIC0yNiw4ICsyNiw3IEBACiAJCXNlcmlhbDAgPSAmc2VyaWFsMDsKIAkJc2VyaWFsMSA9ICZzZXJpYWwxOwogCQlwY2kwID0gJnBjaTA7Ci0JCS8qIHBjaTEgZG9lc24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBwaHlzaWNhbCBjb25uZWN0b3IgKi8KLQkJcGNpMiA9ICZwY2kyOworCQlwY2kxID0gJnBjaTE7CiAJfTsKIAogCWNwdXMgewpAQCAtMzgxLDcgKzM4MCw3IEBACiAJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMjAwMDAwMCAweDAgMHgwMDgwMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjAwMDAwMD47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKQEAgLTM5MCw3ICszODksNyBAQAogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CiAKLQlwY2kyOiBwY2llQGUwMDBhMDAwIHsKKwlwY2kxOiBwY2llQGUwMDBhMDAwIHsKIAkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAKQEAgLTQwMyw5ICs0MDIsOSBAQAogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwweDFhIDB4Mj47CiAJCWJ1cy1yYW5nZSA9IDwweDAgMHhmZj47Ci0JCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKLQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUzMDAwMDAwIDB4MCAweDA4MDAwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTI4MDAwMDAgMHgwIDB4MDgwMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMwMDAwMDA+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CkBAIC00MTksMTEgKzQxOCwxMSBAQAogCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweGEwMDAwMDAwCiAJCQkJICAweDAyMDAwMDAwIDB4MCAweGEwMDAwMDAwCi0JCQkJICAweDAgMHgyMDAwMDAwMAorCQkJCSAgMHgwIDB4MTAwMDAwMDAKIAogCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAogCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAotCQkJCSAgMHgwIDB4MDgwMDAwMDA+OworCQkJCSAgMHgwIDB4MDA4MDAwMDA+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCmluZGV4IGM5NTkwYjUuLjFkYjA3ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKQEAgLTE2MCw3ICsxNjAsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCiAJCQkgcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMDciOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3VjMTAxLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy91YzEwMS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5MjY0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy91YzEwMS5kdHMKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBNYW5yb2xhbmQgdWMxMDEgYm9hcmQgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3IFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJtYW5yb2xhbmQsdWMxMDEiOworCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLHVjMTAxIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsNTIwMEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gZnJvbSBib290bG9hZGVyCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwNDAwMDAwMD47CS8vIDY0TUIKKwl9OworCisJc29jNTIwMEBmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7CisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCXJlZyA9IDwweGYwMDAwMDAwIDB4MDAwMDAxMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCXN5c3RlbS1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKworCQljZG1AMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWNkbSIsImZzbCxtcGM1MjAwLWNkbSI7CisJCQlyZWcgPSA8MHgyMDAgMHgzOD47CisJCX07CisKKwkJbXBjNTIwMF9waWM6IGludGVycnVwdC1jb250cm9sbGVyQDUwMCB7CisJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGljIiwiZnNsLG1wYzUyMDAtcGljIjsKKwkJCXJlZyA9IDwweDUwMCAweDgwPjsKKwkJfTsKKworCQlncHQwOiB0aW1lckA2MDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjAwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQxOiB0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjEwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MjogdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYyMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDM6IHRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ0OiB0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjQwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NTogdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY1MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDY6IHRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ3OiB0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjcwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE2IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKKwkJCXJlZyA9IDwweGIwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA3IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOworCQkJcmVnID0gPDB4YzAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlkbWEtY29udHJvbGxlckAxMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWJlc3Rjb21tIiwiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOworCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKKwkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKKwkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKKwkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAorCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OworCQl9OworCisJCXhsYkAxZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXhsYiIsImZzbCxtcGM1MjAwLXhsYiI7CisJCQlyZWcgPSA8MHgxZjAwIDB4MTAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjAwMCB7IC8qIFBTQzEgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47CisJCX07CisKKwkJc2VyaWFsQDIyMDAgeyAvKiBQU0MyIGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyMjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAyIDA+OworCQl9OworCisJCXNlcmlhbEAyYzAwIHsJCS8qIFBTQzYgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDJjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDQgMD47CisJCX07CisKKwkJZXRoZXJuZXRAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCX07CisKKwkJbWRpb0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsJLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQljb21wYXRpYmxlID0gImludGVsLGx4dDk3MSI7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlhdGFAM2EwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOworCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKKwkJfTsKKworCQlpMmNAM2Q0MCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OworCQkJZnNsLHByZXNlcnZlLWNsb2NraW5nOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CisKKwkJCWh3bW9uQDJjIHsKKwkJCQljb21wYXRpYmxlID0gImFkLGFkbTkyNDAiOworCQkJCXJlZyA9IDwweDJjPjsKKwkJCX07CisJCQlydGNANTEgeworCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOworCQkJCXJlZyA9IDwweDUxPjsKKwkJCX07CisJCX07CisKKwkJc3JhbUA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIjsKKwkJCXJlZyA9IDwweDgwMDAgMHg0MDAwPjsKKwkJfTsKKwl9OworCisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1scGIiLCJmc2wsbXBjNTIwMC1scGIiLCJzaW1wbGUtYnVzIjsKKworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJcmFuZ2VzID0gPDAgMCAweGZmODAwMDAwIDB4MDA4MDAwMDAKKwkJCSAgMSAwIDB4ODAwMDAwMDAgMHgwMDgwMDAwMAorCQkJICAzIDAgMHg4MDAwMDAwMCAweDAwODAwMDAwPjsKKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDAwODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiRFRTIjsKKwkJCQlyZWcgPSA8MHgwIDB4MDAxMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCWxhYmVsID0gIktlcm5lbCI7CisJCQkJcmVnID0gPDB4MTAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAzMDAwMDAgeworCQkJCWxhYmVsID0gIlJvb3RGUyI7CisJCQkJcmVnID0gPDB4MDAzMDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDUwMDAwMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4MDA1MDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDcwMDAwMCB7CisJCQkJbGFiZWwgPSAiVS1Cb290IjsKKwkJCQlyZWcgPSA8MHgwMDcwMDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzQwMDAwIHsKKwkJCQlsYWJlbCA9ICJFbnYiOworCQkJCXJlZyA9IDwweDAwNzQwMDAwIDB4MDAwMTAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3NTAwMDAgeworCQkJCWxhYmVsID0gInJlZC4gRW52IjsKKwkJCQlyZWcgPSA8MHgwMDc1MDAwMCAweDAwMDEwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzYwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZXNlcnZlIjsKKwkJCQlyZWcgPSA8MHgwMDc2MDAwMCAweDAwMGEwMDAwPjsKKwkJCX07CisJCX07CisKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZwppbmRleCAzODM4Yjc3Li4wMzk2Y2U3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDc6NDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03NywxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNSw3ICsxMTIsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSwxNCArMTM4LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDAsNyArMTU4LDcgQEAKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMTksMTEgKzIzNywxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjM5LDkgKzI1OSwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI1Miw2ICsyNzMsNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTMyOCw2ICszNTAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM0Miw2ICszNjUsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM2Nyw2ICszOTEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ1Nyw2ICs0ODIsNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTQ5NSwxMCArNTIxLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUxOSw3ICs1NDEsNiBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTU4LDE0ICs1NzksMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYzNiw2ICs2NTcsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjQ2LDYgKzY2OCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTY2NiwyMyArNjg5LDIzIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzEzLDI1ICs3MzYsMTIgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC03NzUsMTEgKzc4NSwxMiBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQz15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CiAjIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTg2Niw2ICs4NzcsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODg1LDEwICs5MDAsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05NTksMTIgKzk3NywxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTEwNjQsNiArMTA4Miw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEwNzMsNiArMTA5Miw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDkwLDEwICsxMTEwLDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTEwNSwxMSArMTEyOSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMTE4LDIzICsxMTQzLDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTE1OSw3ICsxMTg2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjAwLDExICsxMjI2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKaW5kZXggMjliMGYzNC4uZjVjMDdmZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjA0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyNCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTIgKzU2LDE0IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03OCwxMSArODQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNiw3ICsxMTMsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTksNiArMTI1LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTEyNywxNCArMTQwLDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDcsNyArMTY1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyOCwxMSArMjQ2LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDgsOSArMjY4LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjY0LDYgKzI4NSw3IEBACiBDT05GSUdfUE1fU0xFRVA9eQogQ09ORklHX1NVU1BFTkQ9eQogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTM0OCw2ICszNzAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Miw2ICszODUsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4Nyw2ICs0MTEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MjIsNyBAQAogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNDMxLDcgKzQ1Nyw5IEBACiAjCiAjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00NTQsMTAgKzQ4Miw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTQ3NSw2ICs0OTksOCBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTQ4Myw2ICs1MDksNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNTAyLDcgKzUyOSw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC01MTQsMTEgKzU0MCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU0MCw2ICs1NjksNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU2OCw2ICs1OTgsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC01ODYsMTQgKzYxNywxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02NDAsOSArNjc0LDEyIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NjEsNiArNjk4LDggQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC02ODYsMTAgKzcyNSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc1OSw2ICs3OTUsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc4Nyw2ICs4MjQsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC04MTIsMjMgKzg1MCwyMyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04NDcsMzAgKzg4NSwxOCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTkxMyw2ICs5MzksMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtOTMyLDEwICs5NjIsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05OTIsMTIgKzEwMjUsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMDQxLDYgKzEwNzQsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDUwLDYgKzEwODQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA2NywxMCArMTEwMiwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTEwODIsMTEgKzExMjEsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTA5NSwyMyArMTEzNSwyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTExMzYsNyArMTE3OCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE3OCwxMSArMTIxOSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCmluZGV4IDA3YjZiMjYuLjRmNzdhMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0ODoyMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxMyBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc3LDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTA1LDcgKzExMiw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOCw2ICsxMjQsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDE0ICsxMzgsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0MCw3ICsxNTgsNyBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyMCwxMSArMjM4LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDAsOSArMjYwLDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjUzLDYgKzI3NCw3IEBACiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzI5LDYgKzM1MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzQzLDYgKzM2Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzY4LDYgKzM5Miw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDU4LDYgKzQ4Myw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNDgzLDYgKzUwOSw3IEBACiAjCiAjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiBDT05GSUdfRUVQUk9NX0xFR0FDWT15CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC01MDYsMTAgKzUzMyw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MzIsNiArNTU1LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNTQwLDcgKzU2NCw2IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NzksMTQgKzYwMiwxNCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjQ3LDYgKzY3MCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NTcsNiArNjgxLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNjc2LDIyICs3MDEsMjggQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC03MzgsNiArNzY5LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CkBAIC03NDcsOSArNzgwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzc1LDI1ICs4MDYsMTIgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtODE3LDcgKzgzNSw3IEBACiAjCiAjIExFRCBkcml2ZXJzCiAjCi0jIENPTkZJR19MRURTX0xQNTUyMSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAogCkBAIC04NjYsNiArODg0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC04OTMsNiArOTEyLDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTkxMiwxMCArOTM1LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTg2LDEyICsxMDEyLDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTA5MSw2ICsxMTE3LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTEwMCw2ICsxMTI3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMTcsMTAgKzExNDUsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMTMyLDExICsxMTY0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTExNDUsMjMgKzExNzgsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMTg2LDcgKzEyMjEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyMjcsMTEgKzEyNjEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwppbmRleCBhZmIxYTNkLi5mOTE2OGMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6NDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjI1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03OSwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEwNSw3ICsxMTIsNiBAQAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOCw2ICsxMjQsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsNyArMTM4LDYgQEAKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTEzMyw3ICsxNDUsMTMgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0Niw3ICsxNjQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjI3LDExICsyNDUsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0Nyw5ICsyNjcsMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMzYsNiArMzU3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNTAsNiArMzcyLDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzUsNiArMzk4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zODIsOSArNDA2LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDY3LDYgKzQ5MSw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKQEAgLTQ5MiwxMCArNTE3LDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTE1LDYgKzUzNiw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT1tCiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01MzYsNiArNTU4LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01NjQsNiArNTg3LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNTgyLDE0ICs2MDYsMTcgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjM2LDE2ICs2NjMsMTYgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcyMiw2ICs3NDksNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc1MCw2ICs3NzgsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC03NzYsMjMgKzgwNSwyMyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MTEsMzAgKzg0MCwxOCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtODcxLDE1ICs4ODgsMTcgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKQEAgLTk5NSw2ICsxMDE0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMDIyLDYgKzEwNDIsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA0MSwxMiArMTA2NSwxNiBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CkBAIC0xMTE0LDcgKzExNDIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjAxLDYgKzEyMjgsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMjEwLDYgKzEyMzgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIyMywyMyArMTI1MiwxMiBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKaW5kZXggODU4NWM3Yy4uNzVjODM1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6NTcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03NywxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNSw3ICsxMTIsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSwxNCArMTM4LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDUsNyArMTYzLDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjUsMTEgKzI0MywxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ1LDkgKzI2NSwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI1OCw2ICsyNzksNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTMzNCw2ICszNTYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM0OCw2ICszNzEsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM3Myw2ICszOTcsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM4Miw5ICs0MDcsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDY0LDYgKzQ4OSw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNTAyLDEwICs1MjgsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTI5LDYgKzU1MSw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTUzOCw3ICs1NjEsNiBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTc3LDE0ICs1OTksMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY1NCw2ICs2NzYsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjY0LDYgKzY4Nyw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTY4NSwyMiArNzA5LDI4IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtNzQ3LDYgKzc3Nyw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldApAQCAtNzU2LDkgKzc4OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc4OSwyNSArODE5LDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtODUxLDExICs4NjgsMTIgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0M9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQogIyBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CkBAIC05NjksNiArOTg3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC05OTYsNiArMTAxNSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xMDE1LDEwICsxMDM4LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTA4OSwxMiArMTExNSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTExOTQsNiArMTIyMCw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEyMDMsNiArMTIzMCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjIwLDEwICsxMjQ4LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTIzNSwxMSArMTI2NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMjQ4LDIzICsxMjgxLDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTI4OSw3ICsxMzI0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMzMxLDExICsxMzY1LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZwppbmRleCBhMmRmMDYzLi40NjZmMDlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjIwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTcsNiArMjYwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNSw5ICs0MzIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15CkBAIC02MjgsNyArNjM1LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NTgsMTAgKzY2Nyw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc2MCw2ICs3NjYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgxNCw5ICs4MjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTgzNCw2ICs4MzgsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtODgzLDYgKzg5Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTg5NCw3ICs5MDQsNiBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKQEAgLTkzNCw2ICs5NDMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05NDQsNiArOTU0LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTkwLDYgKzEwMDEsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTA0NSw2ICsxMDU3LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTExNDYsNiArMTE1OSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjE1LDcgKzEyMjksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzI3LDYgKzEzNDAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM0NCw2ICsxMzU4LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzNjUsNyArMTM4MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQwNywxMSArMTQyMSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKaW5kZXggOTNlYmQ0NC4uNjY5NGZiNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODYsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTExOSwyMCArMTIxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQwLDYgKzE0MSw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjUwLDYgKzI1Myw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjcsNiArMjcxLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDgsNiArMzUzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9bQpAQCAtMzk2LDkgKzQwMiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNTY1LDE4ICs1NzEsMTYgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjYzLDYgKzY2Nyw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02OTMsOSArNjk4LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03MTMsNyArNzE1LDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTczMiw2ICs3MzMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC03ODQsNiArNzg2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODU0LDcgKzg1Nyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTkyNiw2ICs5MjgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk0Miw2ICs5NDUsNyBAQAogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCmluZGV4IGZmMzNhN2QuLjg2ZGYxOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNSw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsNiArNDI0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjcsOSArNDM0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDg4LDYgKzQ5NSw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MDUsNiArNjEzLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NDMsNyArNjUyLDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTc0MSw5ICs3NTIsMTEgQEAKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03OTEsMTAgKzgwNCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg5Niw2ICs5MDYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk1MCw5ICs5NjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk4NCw2ICs5OTIsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTEwMzYsNiArMTA0OSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNDgsOSArMTA2Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTA4OCw4ICsxMTAwLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xMDk5LDYgKzExMTMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTEyLDcgKzExMjcsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNjQsNiArMTE3OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEyNzAsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKQEAgLTEyNzMsNiArMTI4OSw3IEBACiAjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9eQogQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTEzMzQsNiArMTM1MSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMzg0LDYgKzE0MDIsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ1Myw3ICsxNDcyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU2OSw2ICsxNTg3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1ODYsNiArMTYwNSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjA0LDEwICsxNjI0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2MzAsMTAgKzE2NTIsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNjYwLDcgKzE2ODIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3MDIsMTEgKzE3MjMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKaW5kZXggNzYyMzdkNC4uN2JmNzFkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjIzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNyw5ICs0MzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ4OCw2ICs0OTUsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjA1LDYgKzYxMyw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjQ0LDExICs2NTMsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NzEsNiArNjgzLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02OTgsNiArNzExLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODAyLDkgKzgxNiwxMSBAQAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTg1MiwxMCArODY4LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTU3LDYgKzk3MCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTAxMSw5ICsxMDI1LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDQ1LDYgKzEwNTYsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTEwOTcsNiArMTExMyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMDksOSArMTEyNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTE0OSw4ICsxMTY0LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xMTYwLDYgKzExNzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTczLDcgKzExOTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMjUsNiArMTI0Miw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzE2LDYgKzEzMzQsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKQEAgLTEzMzQsNiArMTM1Myw3IEBACiAjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9eQogQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTEzOTUsNiArMTQxNSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xNDQ1LDYgKzE0NjYsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTUxNCw3ICsxNTM2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTYzMCw2ICsxNjUxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NDcsNiArMTY2OSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjY1LDEwICsxNjg4LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2OTEsMTAgKzE3MTYsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNzIxLDcgKzE3NDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3NjMsMTEgKzE3ODcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKaW5kZXggZTBlMzZhMS4uN2RlZjgzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTcsNiArMjYwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUwNCw2ICs1MTEsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU0Miw3ICs1NTAsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjEyLDcgKzYyMiw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjM1LDcgKzY0Nyw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTY2MywxMCArNjc0LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzU5LDYgKzc2Nyw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODEyLDkgKzgyMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODMyLDYgKzgzOCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC04ODEsNiArODkyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtODkyLDkgKzkwNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTkyNyw2ICs5MzcsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05MzcsNiArOTQ4LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTUwLDcgKzk2Miw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDcwLDYgKzEwODEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEyOCw3ICsxMTQwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwMiw2ICsxMjEzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMTksNiArMTIzMSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjQwLDcgKzEyNTMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyODIsMTEgKzEyOTQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKaW5kZXggNGYyN2Q0NS4uYjM5OGI5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTcsNiArMjYwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUwNyw2ICs1MTQsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU0NSw3ICs1NTMsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjE3LDcgKzYyNyw5IEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NDAsNyArNjUyLDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNjY4LDEwICs2NzksNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NzYsNiArNzg0LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MzAsOSArODM5LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NjMsNiArODY5LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC05MTUsNiArOTI2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTI3LDkgKzkzOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTY3LDggKzk3NywxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtOTc4LDYgKzk5MCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTk5MSw3ICsxMDA0LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDQzLDYgKzEwNTUsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTE0Niw2ICsxMTU5LDggQEAKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAogQ09ORklHX01NQ19TUEk9eQogIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKQEAgLTExODYsNiArMTIwMSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjQ3LDcgKzEyNjMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzY1LDYgKzEzODAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM4Miw2ICsxMzk4LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE0MDMsNyArMTQyMCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQ0NSwxMSArMTQ2MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZwppbmRleCA2NDhkYWMwLi5mNjczMTdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY4LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI0LDkgKzQzMSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDgzLDYgKzQ5MCw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MzcsNiArNjQ1LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NzYsMTEgKzY4NSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTcwMyw2ICs3MTUsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTczMCw2ICs3NDMsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04NDUsMTAgKzg1OSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkzMCw2ICs5NDEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk4NCw5ICs5OTYsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PXkKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDE3LDcgKzEwMjYsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDU1LDggKzEwNjMsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEwNjYsNiArMTA3Niw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExMTEsNiArMTEyMiw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTIzOCw2ICsxMjUwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEyODgsNiArMTMwMSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzUwLDcgKzEzNjQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNDY1LDYgKzE0NzgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQ4Miw2ICsxNDk2LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE1MDMsNyArMTUxOCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTU0NSwxMSArMTU1OSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKaW5kZXggYmY2ZGViOC4uYTY2ODExMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjQsOSArNDMxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00ODMsNiArNDkwLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTU4OSw2ICs1OTcsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYyNyw3ICs2MzYsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNzI1LDEwICs3MzYsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MTAsNiArODE4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NjQsOSArODczLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfUENGODU3ND15Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODk3LDcgKzkwMyw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTkzNSw4ICs5NDAsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTk0Niw2ICs5NTMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05OTEsNiArOTk5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMDU5LDYgKzEwNjgsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTExNyw2ICsxMTI3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTExNjcsNiArMTE3OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjI5LDcgKzEyNDEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzQ0LDYgKzEzNTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM2MSw2ICsxMzczLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzODIsNyArMTM5NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQyNCwxMSArMTQzNiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwppbmRleCAzMjM2YzQ3Li5jNGU5MmJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY4LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTU2LDkgKzU2MywxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjA2LDEwICs2MTUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02OTksNiArNzA1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03NTIsOSArNzU5LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03NzIsNiArNzc2LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTgyMSw2ICs4MzAsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC04MzIsOSArODQyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODY3LDYgKzg3NSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTg3Nyw2ICs4ODYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC04OTAsNyArOTAwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwMTAsNiArMTAxOSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDY4LDcgKzEwNzgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMTQwLDYgKzExNDksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE1Nyw2ICsxMTY3LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExNzgsNyArMTE4OSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTIyMCwxMSArMTIzMCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwppbmRleCA4YzUyOTlkLi40ZjQzNGIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1NSw2ICsyNTgsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjcyLDYgKzI3Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY3LDYgKzM3Miw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk2LDYgKzQwMiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDMsNyArNDEwLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE2LDYgKzQyMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDIzLDkgKzQzMCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU4NSw2ICs1OTIsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYyMyw3ICs2MzEsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjkzLDcgKzcwMyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzE2LDcgKzcyOCw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTc0NCwxMCArNzU1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODQwLDYgKzg0OCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODkzLDkgKzkwMiw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTEzLDYgKzkxOSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NjIsNiArOTczLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTczLDkgKzk4NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEwMDgsNiArMTAxOCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMTgsNiArMTAyOSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEwMzEsNyArMTA0Myw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTUxLDYgKzExNjIsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTIxMCw3ICsxMjIyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTI4NCw2ICsxMjk1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzMDEsNiArMTMxMyw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzIyLDcgKzEzMzUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEzNjQsMTEgKzEzNzYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKaW5kZXggZmYzMTY2Ny4uYjUyZWMwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjMwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTUsNiArMjU4LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Miw2ICsyNzYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjcsOSArNDM0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDkzLDYgKzUwMCw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MzksNyArNjQ3LDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNjQ5LDEwICs2NTYsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NTAsNiArNzU0LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MDQsOSArODA5LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NTMsMTcgKzg1NSwyMiBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODk3LDggKzkwNCwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtOTA4LDYgKzkxNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTkyLDcgKzEwMDIsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTAzOCw2ICsxMDQ3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMDcsNyArMTExNyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTExODMsNiArMTE5Miw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjAwLDYgKzEyMTAsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTIzMiw3ICsxMjQzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjc0LDExICsxMjg0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCmluZGV4IGUyODVlYzAuLjczMDA2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjExIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyOSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyMSArMTI3LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ3LDYgKzE0OCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MDMsNiArNTEwLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01NDIsMTEgKzU1MCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU2OSw2ICs1ODAsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU5Niw2ICs2MDgsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NzIsNyArNjg1LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03MjAsMTAgKzczNSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgxNiw2ICs4MjgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg2OSw5ICs4ODIsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg4OSw2ICs4OTksMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTM4LDYgKzk1Myw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk0OSw5ICs5NjUsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05ODQsNiArOTk4LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTk0LDYgKzEwMDksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMDA3LDcgKzEwMjMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTA3Miw2ICsxMDg3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMzAsNyArMTE0Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEyMDYsNiArMTIyMSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjIxLDYgKzEyMzcsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI0Miw3ICsxMjU5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjg0LDExICsxMzAwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCmluZGV4IDFhYjNlNGMuLjllOTE1OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjEzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyMSArMTI3LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ3LDYgKzE0OCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjMsNiArMzY4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTIsNiArMzk4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5OSw3ICs0MDYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDE4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00OTgsNiArNTA1LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTM3LDExICs1NDUsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01NjQsNiArNTc1LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01OTEsNiArNjAzLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjEwLDYgKzYyMyw3IEBACiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ0NTY9eQogQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKQEAgLTY3OCw3ICs2OTIsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcwOCwxMCArNzI0LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODEzLDYgKzgyNiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODY3LDkgKzg4MSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODg3LDYgKzg5OCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05MzYsNiArOTUyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTQ3LDkgKzk2NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTk4Nyw2ICsxMDAyLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTk3LDYgKzEwMTMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMDEwLDcgKzEwMjcsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzMsNiArMTA0OSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEwODUsNiArMTEwMiw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMTQyLDYgKzExNjAsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTE4OCw2ICsxMjA3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyNDYsNyArMTI2Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzNjEsNiArMTM4MCw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzNzYsNiArMTM5Niw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzk2LDEyICsxNDE3LDEzIEBACiBDT05GSUdfQVNZTkNfQ09SRT15CiBDT05GSUdfQVNZTkNfTUVNQ1BZPXkKIENPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0NDMsMTEgKzE0NjUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCmluZGV4IDNhNjhmODYuLjZiMzk5MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzUKLSMgVHVlIEF1ZyAxMSAxOTo1Nzo1MSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjcgKzEyNiwyOCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1NCw2ICsyNTcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjcxLDYgKzI3NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY2LDYgKzM3MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk1LDYgKzQwMSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDIsNyArNDA5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE1LDYgKzQyMSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDIyLDkgKzQyOSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjUxLDcgKzY1OCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjgxLDEwICs2OTAsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03ODYsNiArNzkyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NDAsOSArODQ3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NjAsNiArODY0LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTkwOSw2ICs5MTgsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05MjAsOSArOTMwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTYwLDYgKzk2OCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk3MCw2ICs5NzksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTk4Myw3ICs5OTMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzUsNiArMTA0NCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDYgKzExNTgsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTIwNyw3ICsxMjE4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTMwNiw2ICsxMzE2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzMjEsNiArMTMzMiw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzQyLDcgKzEzNTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEzODQsMTEgKzEzOTUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnCmluZGV4IGZmMDRlMTAuLmE1YmRlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xMjMsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODgsNiArMTkyLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiBDT05GSUdfS1NJODU2MD15CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDMsNiArMjQ4LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw2ICsyNjYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OCw2ICszNTUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3Nyw2ICszODUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg0LDcgKzM5Myw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MDUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTU4Miw2ICs1OTEsOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNTkxLDEwICs2MDIsNyBAQAogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MDQsMTAgKzcxMiwxOSBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNzE5LDkgKzczNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03NTUsNyArNzcwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTgxOCw2ICs4MzIsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODc3LDcgKzg5Miw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTQ1LDYgKzk1OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTYyLDYgKzk3Nyw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC05ODEsMTAgKzk5NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDA4LDEwICsxMDI2LDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEwMzksNyArMTA1Nyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMDcwLDExICsxMDg3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKaW5kZXggZmIxMGNjOC4uYzEwZTI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjMzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNiwyNyArMTI5LDI4IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg5LDYgKzE5Myw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDQsNiArMjQ5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MSw2ICsyNjcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OSw2ICszNTYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OCw2ICszODYsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg1LDcgKzM5NCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ4MywxNSArNDkyLDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTg4LDYgKzU5NiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC01OTgsOSArNjExLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTYzNCw3ICs2NDUsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNjk2LDYgKzcwNiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03NTQsNyArNzY1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04MjIsNiArODMyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgzOSw2ICs4NTAsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtODU3LDEwICs4NjksMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtODgzLDEwICs4OTcsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC05MTIsNyArOTI2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTk0MywxMSArOTU2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKaW5kZXggNWM4Y2U2OS4uOGQ5ZjBhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNywyOSArMTMwLDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Miw2ICsxOTYsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ3LDYgKzI1Miw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjQsNiArMjcwLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjEsNiArMzY4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTAsNiArMzk4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Nyw3ICs0MDYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTAsNiArNDE4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MzAsNyArNTM5LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTU4MiwxMCArNTkzLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjk4LDE0ICs3MDYsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtNzIxLDkgKzczOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03NDYsNiArNzYyLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtNzU5LDcgKzc3Niw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC04MjQsNiArODQwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTg4Miw3ICs4OTksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTk1MCw2ICs5NjYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTY3LDYgKzk4NCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC05ODUsMTAgKzEwMDMsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTAxMSwxMCArMTAzMSwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEwNDAsNyArMTA2MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMDcxLDExICsxMDkwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKaW5kZXggMTU4ZTYzZS4uOWI2M2UyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNiwyOCArMTI5LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkwLDYgKzE5NCw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDUsNiArMjUwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Miw2ICsyNjgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1OSw2ICszNjYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4OCw2ICszOTYsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk1LDcgKzQwNCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQwOCw2ICs0MTYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTU4Miw3ICs1OTEsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTYzMCwxMCArNjQxLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzM3LDYgKzc0NSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC03NTEsOSArNzY0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc3Niw2ICs3ODcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC03ODksNyArODAxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTg1NCw2ICs4NjUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTEyLDcgKzkyNCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTgwLDYgKzk5MSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05OTcsNiArMTAwOSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMDE1LDEwICsxMDI4LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwNDEsMTAgKzEwNTYsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMDcwLDcgKzEwODUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTEwMSwxMSArMTExNSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZwppbmRleCAyNzI2ZmNhMS4uMWIyMzU2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjcgKzEyOCwyOCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OCw2ICsxOTIsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQyLDYgKzI0Nyw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTksNiArMjY1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTUsNiArMzYyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODQsNiArMzkyLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5MSw3ICs0MDAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MDQsNiArNDEyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MjEsNyArNTMwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC01NjksMTAgKzU4MCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY3Niw2ICs2ODQsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtNjkwLDkgKzcwMyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MTUsNiArNzI2LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtNzU4LDYgKzc3MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MTYsNyArODI5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04NzIsNiArODg0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg4Nyw2ICs5MDAsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtOTA3LDcgKzkyMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MzgsMTEgKzk1MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTYwX2RlZmNvbmZpZwppbmRleCBiMGM0Njk4Li45NTlkMDI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNiwyNiArMTI5LDI3IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg4LDYgKzE5Miw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDIsNiArMjQ3LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OSw2ICsyNjUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0Nyw2ICszNTQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3Niw2ICszODQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzgzLDcgKzM5Miw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0MDQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ4MSwxNSArNDkwLDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTg0LDYgKzU5MiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC01OTQsOSArNjA3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTYzMCw3ICs2NDEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNzIxLDYgKzczMSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03NzksNyArNzkwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04NDcsNiArODU3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NjMsNiArODc0LDcgQEAKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC04ODEsMTAgKzg5MywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC05MDcsMTAgKzkyMSwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTk0Nyw3ICs5NjEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTc4LDExICs5OTEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZwppbmRleCAwNGM4NWRhLi43ZjVlYzM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTMsNiArMTk3LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiBDT05GSUdfU09DUkFURVM9eQogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDcsNiArMjUyLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2NCw2ICsyNzAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1OCw2ICszNjUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDMsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDIxLDkgKzQyOSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDgyLDYgKzQ5MCw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02NjgsNyArNjc3LDkgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY5OCwxMCArNzA5LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzY1LDYgKzc3Myw3IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKQEAgLTc3NCw3ICs3ODMsNiBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtODM0LDYgKzg0Miw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODg4LDkgKzg5Nyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTIxLDYgKzkyNywxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiBDT05GSUdfSFdNT05fVklEPXkKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC05NzMsNiArOTg0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTg1LDkgKzk5Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDA2LDggKzEwMTYsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEwMTcsNiArMTAyOSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTExMiw3ICsxMTI1LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTM1LDYgKzExNDcsNyBAQAogIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTExODQsNiArMTE5Nyw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzE5LDYgKzEzMzMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTM2OSw2ICsxMzg0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0MzgsNyArMTQ1NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1NTIsNiArMTU2Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTY5LDYgKzE1ODUsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTU4OSw3ICsxNjA2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE2MjEsMTEgKzE2MzcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcKaW5kZXggZTdlODFkNi4uYzgzMjdlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjIwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozOCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjcsMjIgKzEzMCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MCw3ICsxNTIsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTcsNiArMjAxLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI1Miw2ICsyNTcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY5LDYgKzI3NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDI2LDYgKzQzMyw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDU1LDYgKzQ2Myw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NjIsNyArNDcxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDc1LDYgKzQ4Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjIyLDYgKzYzMSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjYyLDcgKzY3Miw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC03MzIsOCArNzQ0LDEwIEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03ODIsMTAgKzc5Niw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgyNywxMSArODM4LDE1IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtODQyLDYgKzg1Nyw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtOTA5LDYgKzkyNSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT0JJVD1tCkBAIC05NjcsOSArOTg0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDAzLDE0ICsxMDE3LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwNjEsNiArMTA4NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNzIsOSArMTA5Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDkyLDYgKzExMTUsNyBAQAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTAyLDYgKzExMjYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiBDT05GSUdfQUdQPW0KK0NPTkZJR19WR0FfQVJCPXkKIENPTkZJR19EUk09bQogIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldApAQCAtMTEyNSw3ICsxMTUwLDYgQEAKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExOTAsNiArMTIxNCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjU0LDcgKzEyNzksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzUyLDYgKzEzNzYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM2OSw2ICsxMzk0LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEzODgsMTAgKzE0MTQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTQxNCwxMCArMTQ0MiwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE0NDMsNyArMTQ3MSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xNDc1LDExICsxNTAyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCmluZGV4IDJjNDA3NTIuLjgyNTYzNzAzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI3LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg4LDYgKzE5Miw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDMsNiArMjQ4LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw2ICsyNjYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1NCw2ICszNjEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4Myw2ICszOTEsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzkwLDcgKzM5OSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTY3Nyw5ICs2ODUsMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcyNywxMCArNzM3LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODI0LDYgKzgzMSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODc2LDkgKzg4NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODk2LDYgKzkwMSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTQ1LDYgKzk1NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk1Niw5ICs5NjcsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTk3Nyw2ICs5ODYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05ODcsNiArOTk3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDAwLDcgKzEwMTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTA2NSw2ICsxMDc1LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMzQsNyArMTE0NSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTIwMyw2ICsxMjEzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMjAsNiArMTIzMSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjQwLDcgKzEyNTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTI3MSwxMSArMTI4MiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZwppbmRleCA4NDU3MzFkLi45MWQ4NWQ3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjIyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0MCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjkgKzEyOCwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTAsNiArMTk0LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Niw2ICsyNTEsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYzLDYgKzI2OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU3LDYgKzM2NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg2LDYgKzM5NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTMsNyArNDAyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjgxLDkgKzY4OSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldApAQCAtNzMyLDEwICs3NDIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzEsNiArODM4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04ODYsOSArODk0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MjEsMTQgKzkyNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTc5LDYgKzk5NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk5MCw5ICsxMDA2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDEyLDYgKzEwMjYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDIyLDYgKzEwMzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMzUsNyArMTA1MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTAwLDYgKzExMTUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTE2OSw3ICsxMTg1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMjM4LDYgKzEyNTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI1NSw2ICsxMjcxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNzUsNyArMTI5Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMzA2LDExICsxMzIyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnCmluZGV4IDRmMjI4YTkuLmRlYmUyNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI2LDIyICsxMjksMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDksNiArMTUxLDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTYsNiArMjAwLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI1Miw2ICsyNTcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY5LDYgKzI3NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzcxLDYgKzM3OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDExLDYgKzQxOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDIwLDkgKzQyOSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTYzMCw3ICs2MzksOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY3OCwxMCArNjg5LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzcyLDYgKzc4MCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODI1LDkgKzgzNCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODQ1LDYgKzg1MSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC04OTQsNiArOTA1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTA1LDkgKzkxNyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05MjYsNiArOTM2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTM2LDYgKzk0Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTk0OSw3ICs5NjEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTA0Miw2ICsxMDUzLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMTEsNyArMTEyMyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTE4MCw2ICsxMTkxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExOTcsNiArMTIwOSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMjE2LDEwICsxMjI5LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEyNDIsMTAgKzEyNTcsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMjcxLDcgKzEyODYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTMwMywxMSArMTMxNywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZwppbmRleCA5MTk2NzI0Li43NDUxNTUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyOSArMTI4LDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5MCw2ICsxOTQsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ2LDYgKzI1MSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjMsNiArMjY5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTcsNiArMzY0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODYsNiArMzk0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Myw3ICs0MDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02ODEsOSArNjg5LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03MzIsMTAgKzc0Miw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgzMSw2ICs4MzgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg4Niw5ICs4OTQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkyMSwxNCArOTI2LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NzksNiArOTk0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTkwLDkgKzEwMDYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMTIsNiArMTAyNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMjIsNiArMTAzNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzNSw3ICsxMDUxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExMDAsNiArMTExNSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTY5LDcgKzExODUsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEyMzgsNiArMTI1Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEyNzEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI3NSw3ICsxMjkyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEzMDYsMTEgKzEzMjIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcKaW5kZXggMmU0OWE2ZS4uNjMxZDkyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0MyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjkgKzEyOCwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTAsNiArMTk0LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Niw2ICsyNTEsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYzLDYgKzI2OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU3LDYgKzM2NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg2LDYgKzM5NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTMsNyArNDAyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjgxLDkgKzY4OSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldApAQCAtNzMyLDEwICs3NDIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzEsNiArODM4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04ODYsOSArODk0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MjEsMTQgKzkyNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTc5LDYgKzk5NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk5MCw5ICsxMDA2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDEyLDYgKzEwMjYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDIyLDYgKzEwMzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMzUsNyArMTA1MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTAwLDYgKzExMTUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTE2OSw3ICsxMTg1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMjM4LDYgKzEyNTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI1NSw2ICsxMjcxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNzUsNyArMTI5Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMzA2LDExICsxMzIyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKaW5kZXggMTAyNWRhMi4uNTJhY2JhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX1NNUD15CkBAIC0zNyw2ICszOCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODksMTEgKzkxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMjgsMjIgKzEzMSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MSw3ICsxNTMsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yMDEsNiArMjA1LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKIENPTkZJR19YRVNfTVBDODV4eD15CkBAIC0yNTYsNiArMjYxLDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQwNSw2ICs0MTIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0Niw2ICs0NTQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NTcsOSArNDY2LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CkBAIC02MzUsNiArNjQ0LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjc0LDExICs2ODQsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzAxLDYgKzcxNCw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTcyOCw2ICs3NDIsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04MDQsNyArODE5LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04MzQsMTAgKzg1MSw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk1MSw2ICs5NjUsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwMDYsOCArMTAyMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDQxLDE0ICsxMDU0LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwOTksNiArMTEyMiw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMTAsOSArMTEzNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNTEsNiArMTE3Myw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNjEsNiArMTE4NCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTExODEsNyArMTIwNSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIwNCw2ICsxMjI3LDcgQEAKICMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CkBAIC0xMjQ5LDYgKzEyNzMsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9JU1AxNzYwX0hDRD15CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTE0NjYsNiArMTQ5MSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTQxLDcgKzE1NjcsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjU4LDYgKzE2ODMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY3NSw2ICsxNzAxLDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2OTQsMTAgKzE3MjEsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNzIwLDEwICsxNzQ5LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTc0OSw3ICsxNzc4LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzkwLDExICsxODE4LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCmluZGV4IDUyN2FkMWEuLjI4OTgwNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MzEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs4OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMwLDIxICsxMzIsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTIsMTIgKzE1MywxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTYsNiArMjU5LDcgQEAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDU4LDYgKzQ2NCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ2Nyw5ICs0NzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjgwLDYgKzY4Nyw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTcxOSwxMiArNzI3LDE1IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzQ3LDYgKzc1OCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzc1LDYgKzc4Nyw3IEBACiAjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODUxLDcgKzg2NCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODgxLDEwICs4OTYsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC0xMDE2LDYgKzEwMjgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwNzEsOSArMTA4NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogQ09ORklHX0RTMTY4Mj15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTExMDYsMTQgKzExMTYsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTE2NCw2ICsxMTg0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTE3NSw5ICsxMTk2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTIxNyw2ICsxMjM2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTIyNyw2ICsxMjQ3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTI0Nyw3ICsxMjY4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjcwLDYgKzEyOTAsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMzIyLDYgKzEzNDMsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzk3LDYgKzE0MTksNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTUwMSw2ICsxNTI0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1NzYsNyArMTYwMCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2ODIsNiArMTcwNSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY5Nyw2ICsxNzIxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE3MTgsNyArMTc0Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xNzYxLDExICsxNzg1LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9bQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCmluZGV4IGNkMzM4ZDQuLmUxOTlkMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzg5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzAsMjEgKzEzMiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MiwxMiArMTUzLDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI1Niw2ICsyNTksNyBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NTgsNiArNDY0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDY3LDkgKzQ3NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02ODAsNiArNjg3LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNzE5LDEyICs3MjcsMTUgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogQ09ORklHX1NBVEFfU0lMMjQ9eQpAQCAtNzk2LDcgKzgwNyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODI2LDEwICs4MzksNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05NjEsNiArOTcxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDE2LDkgKzEwMjcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKIENPTkZJR19EUzE2ODI9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDUxLDE0ICsxMDU5LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTExMDksNiArMTEyNyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMjAsOSArMTEzOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNjIsNiArMTE3OSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNzIsNiArMTE5MCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExOTIsNyArMTIxMSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIxNSw2ICsxMjMzLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTI2Nyw2ICsxMjg2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTM0Miw2ICsxMzYyLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTE0NDYsNiArMTQ2Nyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTIxLDcgKzE1NDMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjI3LDYgKzE2NDgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NDIsNiArMTY2NCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xNjYzLDcgKzE2ODYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9bQpAQCAtMTcwNiwxMSArMTcyOCwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPW0KICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwppbmRleCBiYTQ3ODgzLi4zYjBmYmZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MzAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs4OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMxLDIxICsxMzMsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTMsMTIgKzE1NCwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTcsNiArMjYwLDcgQEAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc0LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNTAzLDYgKzUwOCw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogQ09ORklHX1RJUEM9bQogIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU4Miw2ICs1ODgsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC01ODksNyArNTk2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjAyLDYgKzYwOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjExLDkgKzYxOCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTc4MCw2ICs3ODcsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC04MTksMTEgKzgyNywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTg0Niw2ICs4NTcsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTg3Myw2ICs4ODUsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC05NDksNyArOTYyLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC05NzksMTAgKzk5NCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTExMjAsNiArMTEzMiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTE3NSw5ICsxMTg4LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiBDT05GSUdfRFMxNjgyPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTIxMSwxNCArMTIyMSwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMjY5LDYgKzEyODksNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMjgwLDkgKzEzMDEsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMzIyLDYgKzEzNDEsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMzMyLDYgKzEzNTIsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMzUyLDcgKzEzNzMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNzUsNiArMTM5NSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTE0MjcsNiArMTQ0OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE1MDIsNiArMTUyNCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUTSBpcyBub3Qgc2V0CkBAIC0xNjA3LDYgKzE2MzAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTY2OSw3ICsxNjkzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTc3NSw2ICsxNzk4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNzkxLDYgKzE4MTUsNyBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19QUkVFTVBUPXkKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKQEAgLTE4MTAsMTAgKzE4MzUsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTgzNywxMCArMTg2NCwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE4NzIsNyArMTg5OSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xOTE1LDExICsxOTQxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCmluZGV4IGE2MWYxODMuLmRlNGQ1MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgzLDExICs4NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTI2LDIyICsxMjgsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDksNiArMTUwLDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTEsNiArMjU0LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2OCw2ICsyNzIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM4NSw2ICszOTAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxNCw2ICs0MjAsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDIxLDcgKzQyOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzNCw2ICs0NDAsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NDUsOSArNDUyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNjYyLDYgKzY2OSw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTcwMSwxMSArNzA5LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTcyOCw2ICs3MzksNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03NTUsNiArNzY3LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODE4LDE0ICs4MzEsMTMgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05MjksNiArOTQxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk4Miw5ICs5OTUsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwMDIsNyArMTAxMiw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDIxLDYgKzEwMzAsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMxLDYgKzEwNDEsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMTA3LDYgKzExMTgsNyBAQAogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtMTIwOSw3ICsxMjIxLDYgQEAKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEzMjksNiArMTM0MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTEzODgsNyArMTQwMCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1MDUsNiArMTUxNiw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTIyLDYgKzE1MzQsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTU0MSwxMCArMTU1NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNTY3LDEwICsxNTgyLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTU5Nyw3ICsxNjEyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE2MjksMTEgKzE2NDMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCmluZGV4IDcwMTZjZTcuLjc1NGE3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ2IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg3LDExICs4OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMwLDIyICsxMzIsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTMsNyArMTU0LDkgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjUxLDEzICsyNTQsMTMgQEAKIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19TV0lPVExCPXkKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc1LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDA0LDYgKzQwOCw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQzNCw2ICs0MzksNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDEsNyArNDQ3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDU0LDYgKzQ1OSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU0Niw2ICs1NTIsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU4NSwxMSArNTkyLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYxMiw2ICs2MjIsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MzksNiArNjUwLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzE1LDcgKzcyNyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzYzLDEwICs3NzcsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04ODAsNiArODkxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTkzNCw5ICs5NDYsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk1NCw3ICs5NjMsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTczLDYgKzk4MSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk4Myw2ICs5OTIsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMDAyLDYgKzEwMTIsNyBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExMDUsNyArMTExNiw2IEBACiBDT05GSUdfQUM5N19CVVM9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMjgsNiArMTEzOCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTExODAsNiArMTE5MSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQpAQCAtMTM1OCw2ICsxMzcwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0MjgsNyArMTQ0MSw2IEBACiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTQ2LDYgKzE1NTgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU2Myw2ICsxNTc2LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE1ODIsMTAgKzE1OTYsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTYwOCwxMCArMTYyNCwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE2MzgsNyArMTY1NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTY4MCwxMSArMTY5NSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCmluZGV4IGY1Y2EyZTAuLjg5OTkxZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0NSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NywxMSArODgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMCwyMSArMTMyLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUyLDEzICsxNTMsMTUgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwogIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjU3LDYgKzI2MCw3IEBACiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTUwMiw2ICs1MDcsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKIENPTkZJR19USVBDPW0KICMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAogIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC01ODEsNiArNTg3LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNTg4LDcgKzU5NSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTYwMSw2ICs2MDcsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTYxMCw5ICs2MTcsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC04MzMsNyArODQwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04NjMsMTAgKzg3Miw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk5Niw2ICsxMDAyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDQ5LDkgKzEwNTYsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNjksNiArMTA3MywxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMTE4LDYgKzExMjcsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTI5LDkgKzExMzksNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMTY0LDYgKzExNzIsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTc0LDYgKzExODMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTk0LDcgKzEyMDQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTI3NCw2ICsxMjgzLDcgQEAKICMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM0Myw3ICsxMzUzLDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE0NTEsNiArMTQ2MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0NjcsNiArMTQ3Nyw3IEBACiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTQ4NiwxMCArMTQ5NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNTE0LDEwICsxNTI3LDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE1NTAsNyArMTU2Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xNTkzLDExICsxNjA1LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnCmluZGV4IGFlY2U2YmIuLjA1MmNmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzgsMTEgKzgwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTYsMjggKzExOSwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIzNSwxMCArMjM5LDEwIEBACiAjIENPTkZJR184WFhfTUlOSU1BTF9GUEVNVSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1Niw2ICsyNjAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMzOCw2ICszNDMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Nyw2ICszNzMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzc0LDcgKzM4MSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM4Nyw2ICszOTMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUzMCwxNiArNTM3LDE1IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTgwLDYgKzU4Niw3IEBACiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNTkwLDYgKzU5Nyw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldApAQCAtNzE2LDYgKzcyNCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTc3NSw3ICs3ODQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04NDcsNiArODU1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODY0LDYgKzg3Myw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldApAQCAtODgwLDEwICs4OTAsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtOTA2LDEwICs5MTgsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKaW5kZXggODEwNTM2MC4uMGZiNjVhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjQ4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowNSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CitDT05GSUdfUFBDX1BFUkZfQ1RSUz15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZPXkKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArOTAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEzNSwyMyArMTM4LDI0IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CkBAIC0xNjEsMTIgKzE2NSwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKICMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI3NSwxMiArMjgxLDEyIEBACiBDT05GSUdfQklORk1UX01JU0M9eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI5OCw2ICszMDQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMwOSw2ICszMTYsNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTY3NCwxMCArNjgyLDEyIEBACiAjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAogQ09ORklHX0JUX0hDSUJGVVNCPW0KIENPTkZJR19CVF9IQ0lWSENJPW0KKyMgQ09ORklHX0JUX01SVkwgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC02ODYsNyArNjk2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjk5LDYgKzcwOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTcxMCw5ICs3MjAsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD1tCiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNzYzLDYgKzc3Myw3IEBACiAjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQogIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC04NTcsNiArODY4LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEPW0KIENPTkZJR19TQ1NJXzNXXzlYWFg9bQogQ09ORklHX1NDU0lfQUNBUkQ9bQpAQCAtOTEyLDcgKzkyNCw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC05ODIsNyArOTk2LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC0xMDEwLDEwICsxMDI2LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTE0NSw2ICsxMTU4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMjAwLDkgKzEyMTQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PW0KLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMjIwLDYgKzEyMzEsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049bQogQ09ORklHX0hXTU9OX1ZJRD1tCisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfQURNMTAyMT1tCkBAIC0xMjY5LDYgKzEyODUsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX1ZJQTY4NkE9bQogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTI4MCw3ICsxMjk3LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGPW0KICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldApAQCAtMTMxNyw2ICsxMzMzLDcgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMzI3LDYgKzEzNDQsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEzNzgsNiArMTM5Niw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xNTg4LDYgKzE2MDcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTY2OCw3ICsxNjg4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTc3MCw3ICsxNzg5LDcgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCi0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMTY9bQogQ09ORklHX0NSQ19UMTBESUY9bQogQ09ORklHX0NSQ19JVFVfVD1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTc5Nyw2ICsxODE2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTgxNCw2ICsxODM0LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15CkBAIC0xODM0LDExICsxODU1LDEzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xODUyLDYgKzE4NzUsNyBAQAogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTE4NjksNiArMTg5Myw3IEBACiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xODk5LDYgKzE5MjQsNyBAQAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0xTTV9NTUFQX01JTl9BRERSPTY1NTM2CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWD15CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU09eQogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNX1ZBTFVFPTEKQEAgLTE5MTMsNyArMTkzOSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xOTU2LDExICsxOTgxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZwppbmRleCAwYWE1YjQzLi5lZjVlZGM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo0OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDYgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODIsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMTYsMjggKzExOCwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xNTAsNiArMTUzLDcgQEAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKIENPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC0yMzMsNiArMjM3LDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CkBAIC0yNDYsNiArMjUxLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zOTQsNiArNDAwLDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMSw3ICs0MDgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIApAQCAtNDEzLDYgKzQxOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjAwLDcgKzYwNyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC02NDgsMTAgKzY1Nyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTczNiwxNSArNzQyLDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03NjcsNiArNzc3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05NjgsNiArOTc5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05OTgsMTAgKzEwMTAsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTAyNCw2ICsxMDM4LDcgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTA1Miw3ICsxMDY3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMDk0LDYgKzExMDgsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnCmluZGV4IDJjMjkyZTIuLjczZWY5YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo0OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03NywxMSArNzksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExNSwyOCArMTE4LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjM0LDEwICsyMzgsMTAgQEAKIENPTkZJR184WFhfTUlOSU1BTF9GUEVNVT15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1NSw2ICsyNTksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMzNyw2ICszNDIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Niw2ICszNzIsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzczLDcgKzM4MCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM4Niw2ICszOTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUyOSwxNiArNTM2LDE1IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjExLDcgKzYxNyw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02NzIsNiArNjc3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzMxLDcgKzczNyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTgwMyw2ICs4MDgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgyMCw2ICs4MjYsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKQEAgLTgzNiwxMCArODQzLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTg2MSwxMCArODcwLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCmluZGV4IDQ1NjcxZTcuLjYzYzNlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgzLDExICs4NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMxLDIyICsxMzMsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1NCwxMSArMTU1LDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjU4LDYgKzI2MSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzUsNiArMjc5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00ODIsNiArNDg3LDcgQEAKIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTUxMSw2ICs1MTcsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNTE5LDcgKzUyNiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTUzMiw2ICs1MzgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NDMsOSArNTUwLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC03MTEsNiArNzE4LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC03NTAsMTEgKzc1OCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTc3Nyw2ICs3ODgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTgwNCw2ICs4MTYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04NzAsNyArODgzLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC05MTgsMTAgKzkzMyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTEwNDMsNiArMTA1NSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTA5Nyw5ICsxMTEwLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMTE3LDYgKzExMjcsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTE2Niw2ICsxMTgxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTE3Nyw5ICsxMTkzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTExOTgsNiArMTIxMiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEyMDgsNiArMTIyMyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEyMjcsNyArMTI0Myw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD1tCi0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI3MSw2ICsxMjg2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE1MDAsNiArMTUxNiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTY3LDcgKzE1ODQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjgxLDYgKzE2OTcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2OTgsNiArMTcxNSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNzE2LDEwICsxNzM0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE3NDIsNiArMTc2Miw3IEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xNzcxLDcgKzE3OTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE4MTMsMTEgKzE4MzMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCmluZGV4IDMwYjY4YmYuLjUyMGIwNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzUKLSMgRnJpIEF1ZyAgNyAwODoxOToxNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDkgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMjMsMjggKzEyNSwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDcsNiArMjUwLDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CkBAIC0yNjAsNiArMjY0LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zOTAsNiArMzk1LDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Nyw3ICs0MDMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIApAQCAtNDA5LDYgKzQxNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjA4LDcgKzYxNCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNjE2LDEwICs2MjQsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY4NSw2ICs2OTAsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc0MCw3ICs3NDYsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC03NzEsMTUgKzc3NiwxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzk5LDYgKzgwOCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTgwOSw2ICs4MTksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMjIsNiArMTAzMyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNTIsMTAgKzEwNjQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTA3OSw2ICsxMDkzLDcgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExMDksNyArMTEyNCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE1MSw2ICsxMTY1LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZwppbmRleCAxYWU4NWEzLi40M2MzYzRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjEwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzYsMTEgKzc4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTcsMjcgKzEyMCwyOCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIzNywxMCArMjQxLDEwIEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTgsNiArMjYyLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDQsNiArMzQ5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzMsNiArMzc5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4MCw3ICszODcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC01NTMsMTYgKzU1OSwxNSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiAjIENPTkZJR19GU19FTkVUX0hBU19GRUMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjM1LDcgKzY0MCw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MDcsNiArNzExLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc3Niw3ICs3ODEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04NTEsNiArODU1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NjUsNiArODcwLDcgQEAKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtODg3LDcgKzg5Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MTgsMTEgKzkyMywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCmluZGV4IGFhYTQ0MTYuLjUyM2Q1ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIE1vbiBBcHIgMjAgMTE6MDY6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CkBAIC01MywxMiArNTcsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc5LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xMDMsNyArMTEwLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE2LDYgKzEyMiwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CkBAIC0xMjQsMTQgKzEzNywxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ0LDcgKzE2Miw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMDUsNyArMjIzLDcgQEAKIENPTkZJR19QUENfQkVTVENPTU09eQogQ09ORklHX1BQQ19CRVNUQ09NTV9BVEE9eQogQ09ORklHX1BQQ19CRVNUQ09NTV9GRUM9eQotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1NJTVBMRV9HUElPPXkKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMjI5LDExICsyNDcsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0OSw5ICsyNjksMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNjUsNiArMjg2LDcgQEAKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzQ5LDYgKzM3MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzYzLDYgKzM4Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzg4LDYgKzQxMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzk3LDkgKzQyMiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDU4LDYgKzQ4Myw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC00OTMsNiArNTE5LDcgQEAKIENPTkZJR19PRl9HUElPPXkKIENPTkZJR19PRl9JMkM9eQogQ09ORklHX09GX1NQST15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNTI5LDcgKzU1Niw5IEBACiBDT05GSUdfRUVQUk9NX0FUMjQ9eQogIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTUyLDEwICs1ODEsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTcyLDYgKzU5Nyw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU4MCw2ICs2MDcsNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNTk5LDcgKzYyNyw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MTEsMTEgKzYzOCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYzNyw2ICs2NjcsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY2NSw2ICs2OTYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02ODQsMTQgKzcxNiwxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03MzksMTYgKzc3NCwxNyBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg1NCw2ICs4OTAsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09CSVQ9eQpAQCAtODgzLDYgKzkyMCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CkBAIC05MTAsMTAgKzk0OCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkzNSw2ICs5NjksMTEgQEAKICMKIENPTkZJR19TUElfU1BJREVWPW0KICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQpAQCAtOTU3LDE2ICs5OTYsMjcgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC0xMDE5LDYgKzEwNjksOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTAzMSw5ICsxMDgzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDczLDMxICsxMTIzLDIwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKIENPTkZJR19EUk09eQogIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldApAQCAtMTE2Nyw2ICsxMjA2LDcgQEAKICMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCisjIENPTkZJR19MQ0RfTE1TMjgzR0YwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAogIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAogIyBDT05GSUdfTENEX1RETzI0TSBpcyBub3Qgc2V0CkBAIC0xMTk4LDcgKzEyMzgsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMTcsMTAgKzEyNTYsMTEgQEAKIENPTkZJR19ISURfQ0hFUlJZPXkKICMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQ1lQUkVTUz15Ci0jIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTIzMSwxMCArMTI3MSwxMSBAQAogIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMjYxLDE1ICsxMzAyLDE3IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKQEAgLTE0MDAsNiArMTQ0Myw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTQxMSw2ICsxNDU1LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTE0MzQsNiArMTQ3OSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xNDUzLDEwICsxNTAyLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTUzMywxMiArMTU4NSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTE2MjQsNiArMTY3Niw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE2MzMsNiArMTY4Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjUwLDEwICsxNzA0LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTY2NSwxMSArMTcyMywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xNjc4LDIzICsxNzM3LDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTcxOSw3ICsxNzgwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzYxLDExICsxODIxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwppbmRleCBmMjM0MjhjLi5kOGIzNjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjEwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTIzLDI4ICsxMjUsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDEsNiArMjQ0LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OCw2ICsyNjIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1MCw2ICszNTUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OSw2ICszODUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg2LDcgKzM5Myw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5OSw2ICs0MDUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ3OCw2ICs0ODUsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTUxNywxMSArNTI1LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTQzLDYgKzU1NCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTcwLDYgKzU4Miw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY2Niw5ICs2NzksMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcxNSwxMCArNzMwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODIyLDYgKzgzNCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC04MzYsOSArODUzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg2MSw2ICs4NzYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC04NzQsNyArODkwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTkzOSw2ICs5NTQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTk3LDcgKzEwMTMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEwNjksNiArMTA4NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDg2LDYgKzExMDIsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTEwNyw3ICsxMTI0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTExMzgsMTEgKzExNTQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCmluZGV4IDAyNzE2ZjcuLjAwZmFkODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjExIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTE2LDI5ICsxMTgsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTUxLDYgKzE1NCw3IEBACiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15CiBDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMjM2LDYgKzI0MCw3IEBACiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQpAQCAtMjQ5LDYgKzI1NCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKQEAgLTQxNiw2ICs0MjIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ3Nyw3ICs0ODQsNiBAQAogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9TQkM4MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC02MDQsNyArNjEwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTY1MiwxMCArNjYwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzA0LDYgKzcwOSw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC03MTQsNiArNzIwLDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC03OTMsMTUgKzgwMCwxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODI0LDYgKzgzNSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzMiw2ICsxMDQ0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDY3LDEwICsxMDgwLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwOTMsNiArMTEwOCw3IEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExMjEsNyArMTEzNyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE2Myw2ICsxMTc4LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCmluZGV4IDRhOTZjYjYuLjY0ZGZmMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NiwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNywyMSArMTI5LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ5LDYgKzE1MCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjYzLDYgKzI2Niw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yODAsNiArMjg0LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDMsNyArMzQ4LDggQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM1OCw3ICszNjQsNyBAQAogIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9FU1A9eQogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zNzcsNiArMzgzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDYsNiArNDEzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxMyw3ICs0MjEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjYsNiArNDMzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MzMsOSArNDQxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjA4LDYgKzYxNiw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjQ3LDExICs2NTYsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NzQsNiArNjg2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MDEsNiArNzE0LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzc3LDcgKzc5MSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODAwLDcgKzgxNiw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC04MjgsMTAgKzg0Myw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkzNSw2ICs5NDcsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk5MCw5ICsxMDAzLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDI1LDE0ICsxMDM1LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwODMsNiArMTEwMyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwOTQsOSArMTExNSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExMzUsNiArMTE1NCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNDUsNiArMTE2NSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExNTgsNyArMTE3OSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE4MSw2ICsxMjAxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIzMyw2ICsxMjU0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRkhDSV9IQ0QgaXMgbm90IHNldApAQCAtMTI5MSw2ICsxMzEzLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTEzMzgsNiArMTM2MSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzk3LDcgKzE0MjEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTE0LDYgKzE1MzcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTUyOSw2ICsxNTUzLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE1NTAsNyArMTU3NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNTkxLDEzICsxNjE1LDE1IEBACiAjCiAjIEhhc2ggbW9kZXMKICMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNjA1LDE2ICsxNjMxLDE2IEBACiAjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKK0NPTkZJR19DUllQVE9fU0hBNTEyPXkKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKIAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKaW5kZXggZWU2YWNjNi4uYTEyZTdiYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjI1OjIwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArOTAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMSwyMiArMTM0LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTU0LDcgKzE1Niw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OSw2ICsxOTMsNyBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0yMDYsNyArMjExLDcgQEAKIENPTkZJR19NUEM4NXh4X1JEQj15CiBDT05GSUdfU09DUkFURVM9eQogQ09ORklHX0tTSTg1NjA9eQotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAorQ09ORklHX1hFU19NUEM4NXh4PXkKIENPTkZJR19TVFhfR1AzPXkKIENPTkZJR19UUU04NTQwPXkKIENPTkZJR19UUU04NTQxPXkKQEAgLTI1OSwxMCArMjY0LDEwIEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfU1dJT1RMQj15Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI4MCw2ICsyODUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMwNyw3ICszMTMsNyBAQAogQ09ORklHX1BDSV9TWVNDQUxMPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTVNJPXkKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKQEAgLTMxNSw3ICszMjEsOCBAQAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIENPTkZJR19IQVNfUkFQSURJTz15Ci0jIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKK0NPTkZJR19SQVBJRElPPXkKK0NPTkZJR19SQVBJRElPX0RJU0NfVElNRU9VVD0zMAogCiAjCiAjIEFkdmFuY2VkIHNldHVwCkBAIC0zNDUsNyArMzUyLDcgQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfS0VZPW0KK0NPTkZJR19ORVRfS0VZPXkKICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTM2OSwxMiArMzc2LDEyIEBACiBDT05GSUdfQVJQRD15CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0VTUD15CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1RVTk5FTD15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQpAQCAtNDExLDYgKzQxOCw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0MSw2ICs0NDksNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDgsNyArNDU3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDYxLDYgKzQ2OSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU1NCw2ICs1NjMsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU5MywxMSArNjAzLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYyMCw2ICs2MzMsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NDcsNiArNjYxLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzIzLDcgKzczOCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNzUwLDcgKzc2Nyw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC03NzgsMTAgKzc5NCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc5OCw2ICs4MTEsNyBAQAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUklPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKQEAgLTg5OCw2ICs5MTIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTU1LDkgKzk3MCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTkxLDE1ICsxMDAzLDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDIwLDYgKzEwMzYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMwLDYgKzEwNDcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMDQ5LDYgKzEwNjcsNyBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExNTIsNyArMTE3MSw2IEBACiBDT05GSUdfQUM5N19CVVM9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNzUsNiArMTE5Myw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMjcsNiArMTI0Niw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQpAQCAtMTI0MSw3ICsxMjYxLDYgQEAKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTQyOSw2ICsxNDQ4LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0OTksNyArMTUxOSw2IEBACiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjIwLDYgKzE2MzksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2MzcsNiArMTY1Nyw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjU2LDEwICsxNjc3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2ODMsMTAgKzE3MDYsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTcxNCw3ICsxNzM3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTE3NTcsMTEgKzE3NzksMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTc2OSwxNiArMTc5MywxNiBAQAogIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9eQorQ09ORklHX0NSWVBUT19TSEE1MTI9eQogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogCiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BRVM9eQogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCmluZGV4IGRiMDgyY2UuLmNkNzBiNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjI2OjAxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX1NNUD15CkBAIC0zNyw2ICszOCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODksMTEgKzkxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzIsMjIgKzEzNSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1NSw4ICsxNTcsMTAgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Miw2ICsxOTYsNyBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0yMDYsOSArMjExLDEwIEBACiBDT05GSUdfTVBDODV4eF9NRFM9eQogQ09ORklHX01QQzg1MzZfRFM9eQogQ09ORklHX01QQzg1eHhfRFM9eQorQ09ORklHX01QQzg1eHhfUkRCPXkKIENPTkZJR19TT0NSQVRFUz15CiBDT05GSUdfS1NJODU2MD15Ci0jIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CitDT05GSUdfWEVTX01QQzg1eHg9eQogQ09ORklHX1NUWF9HUDM9eQogQ09ORklHX1RRTTg1NDA9eQogQ09ORklHX1RRTTg1NDE9eQpAQCAtMjYxLDExICsyNjcsMTEgQEAKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiBDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19TV0lPVExCPXkKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI4Myw2ICsyODksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMxMCw3ICszMTcsNyBAQAogQ09ORklHX1BDSV9TWVNDQUxMPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTVNJPXkKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKQEAgLTMxOCw3ICszMjUsOCBAQAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIENPTkZJR19IQVNfUkFQSURJTz15Ci0jIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKK0NPTkZJR19SQVBJRElPPXkKK0NPTkZJR19SQVBJRElPX0RJU0NfVElNRU9VVD0zMAogCiAjCiAjIEFkdmFuY2VkIHNldHVwCkBAIC0zNDgsNyArMzU2LDcgQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfS0VZPW0KK0NPTkZJR19ORVRfS0VZPXkKICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTM3MiwxMiArMzgwLDEyIEBACiBDT05GSUdfQVJQRD15CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0VTUD15CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1RVTk5FTD15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQpAQCAtNDE0LDYgKzQyMiw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0NCw2ICs0NTMsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NTEsNyArNDYxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDY0LDYgKzQ3Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU1Nyw2ICs1NjcsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU5NiwxMSArNjA3LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYyMyw2ICs2MzcsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NTAsNiArNjY1LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzI2LDcgKzc0Miw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNzUzLDcgKzc3MSw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC03ODEsMTAgKzc5OCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgwMSw2ICs4MTUsNyBAQAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUklPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKQEAgLTkwMSw2ICs5MTYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTU4LDkgKzk3NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTk0LDE1ICsxMDA3LDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDIzLDYgKzEwNDAsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMzLDYgKzEwNTEsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMDUyLDYgKzEwNzEsNyBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExNTUsNyArMTE3NSw2IEBACiBDT05GSUdfQUM5N19CVVM9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNzgsNiArMTE5Nyw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMzAsNiArMTI1MCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQpAQCAtMTI0NCw3ICsxMjY1LDYgQEAKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTQzMiw2ICsxNDUyLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1MDIsNyArMTUyMyw2IEBACiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjIzLDYgKzE2NDMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NDAsNiArMTY2MSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjU5LDEwICsxNjgxLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2ODYsMTAgKzE3MTAsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTcxNyw3ICsxNzQxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTE3NjAsMTEgKzE3ODMsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTc3MiwxNiArMTc5NywxNiBAQAogIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9eQorQ09ORklHX0NSWVBUT19TSEE1MTI9eQogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogCiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BRVM9eQogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwppbmRleCA2ODA5YjYxLi40MGQ2ZjA1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03NiwxMSArNzgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExMywyOCArMTE2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjMzLDEwICsyMzcsMTAgQEAKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1NCw2ICsyNTgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0MCw2ICszNDUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzc2LDcgKzM4Myw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2Nyw2ICs0NzMsOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKQEAgLTQ3NiwxMCArNDg0LDcgQEAKICMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01MjAsNiArNTI1LDcgQEAKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC01MzAsNiArNTM2LDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC01OTUsNiArNjAyLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTYwNSw5ICs2MTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjQxLDcgKzY1MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC03MDUsNiArNzE0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc2Myw3ICs3NzMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04MzYsNiArODQ1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg1MSw2ICs4NjEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtODcxLDcgKzg4Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MDIsMTEgKzkxMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCmluZGV4IDBlODY4NGEuLjViM2FiYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArODksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMSwyMiArMTMzLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTU0LDcgKzE1NSw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1MywxMyArMjU2LDEzIEBACiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfU1dJT1RMQj15Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Nyw2ICsyODAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQwNiw2ICs0MTAsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MzYsNiArNDQxLDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQzLDcgKzQ0OSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ1Niw2ICs0NjEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NDksNiArNTU1LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01ODgsMTEgKzU5NSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTUsNiArNjI1LDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjQyLDYgKzY1Myw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcxOCw3ICs3MzAsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTc2NiwxMCArNzgwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODgzLDYgKzg5NCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05MzgsOSArOTUwLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05NzQsMTUgKzk4MywxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAwMyw2ICsxMDE2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAxMyw2ICsxMDI3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTAzMiw2ICsxMDQ3LDcgQEAKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMTM1LDcgKzExNTEsNiBAQAogQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTU4LDYgKzExNzMsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjEwLDYgKzEyMjYsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKQEAgLTEzODksNiArMTQwNiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDU5LDcgKzE0NzcsNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU3Nyw2ICsxNTk0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1OTQsNiArMTYxMiw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjEzLDEwICsxNjMyLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2MzksMTAgKzE2NjAsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNjY5LDcgKzE2OTAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3MTEsMTEgKzE3MzEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZwppbmRleCBkYmU4ZTg2OS4uMWRhMzQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzcsMTEgKzc5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTUsMjggKzExOCwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0MSwxMCArMjQ1LDEwIEBACiBDT05GSUdfOFhYX01JTklNQUxfRlBFTVU9eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjIsNiArMjY2LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDQsNiArMzQ5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzMsNiArMzc5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4MCw3ICszODcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTMsNiArMzk5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01NDAsMTYgKzU0NywxNSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GRUM9eQogQ09ORklHX0ZTX0VORVRfTURJT19GRUM9eQogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYyMiw3ICs2MjgsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjgzLDYgKzY4OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTc0Miw3ICs3NDgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04MTQsNiArODE5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04MzEsNiArODM3LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC04NDcsMTAgKzg1NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC04NzIsMTAgKzg4MSwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnCmluZGV4IDRmODY4MWMuLjIwYmEwY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZwpAQCAtMSw0OSArMSw1OCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2LXJjMwotIyBUdWUgTWF5IDI3IDE2OjA4OjA2IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzMKKyMgVHVlIE9jdCAgNiAxMDoyNzoxOCAyMDA5CiAjCiBDT05GSUdfUFBDNjQ9eQogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCitDT05GSUdfUFBDX0JPT0szU182ND15CisjIENPTkZJR19QUENfQk9PSzNFXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQk9PSzNTPXkKIENPTkZJR19QT1dFUjRfT05MWT15CiBDT05GSUdfUE9XRVI0PXkKICMgQ09ORklHX1RVTkVfQ0VMTCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15CisjIENPTkZJR19WU1ggaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV82ND15CiBDT05GSUdfUFBDX01NX1NMSUNFUz15CiAjIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CitDT05GSUdfUFBDX1BFUkZfQ1RSUz15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKIENPTkZJR182NEJJVD15CiBDT05GSUdfV09SRF9TSVpFPTY0Ci1DT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKK0NPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19QUEM9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKIENPTkZJR19QUENfT0Y9eQogQ09ORklHX09GPXkKQEAgLTUxLDExICs2MCwxNCBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0kgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03MiwxMCArODQsMjAgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9NjQKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC04NCwxMyArMTA2LDE3IEBACiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTk4LDMyICsxMjQsNTIgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTMxLDExICsxNzcsMTAgQEAKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAogQ09ORklHX1NUT1BfTUFDSElORT15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0tfQ09NUEFUPXkKIAogIwpAQCAtMTUwLDE5ICsxOTUsMTQgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01TSV9CSVRNQVA9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKICMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogQ09ORklHX1BQQ19QQVNFTUk9eQpAQCAtMTc4LDggKzIxOCwxMCBAQAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTEVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX1FQQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX05BVElWRT15CitDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15CiAjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldApAQCAtMjEzLDYgKzI1NSw3IEBACiAjCiBDT05GSUdfUFBDX1BBU0VNSV9DUFVGUkVRPXkKICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMjI2LDE2ICsyNjksMTkgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15CiBDT05GSUdfSFo9MTAwMAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19DT01QQVRfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKIENPTkZJR19JT01NVV9WTUVSR0U9eQogQ09ORklHX0lPTU1VX0hFTFBFUj15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQpAQCAtMjQzLDYgKzI4OSw3IEBACiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MjU2CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQpAQCAtMjUzLDIwICszMDAsMjggQEAKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDX0hBU19IQVNIXzY0Sz15CisjIENPTkZJR19QUENfNEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzY0S19QQUdFUz15CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj05CiAjIENPTkZJR19QUENfU1VCUEFHRV9QUk9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQpAQCAtMjg1LDYgKzM0MCw4IEBACiBDT05GSUdfUENJX01TST15CiBDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKIENPTkZJR19QQ01DSUFfREVCVUc9eQogQ09ORklHX1BDTUNJQT15CkBAIC0zMDEsMTMgKzM1OCwxMCBAQAogQ09ORklHX0VMRUNUUkFfQ0Y9eQogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVMT0NBVEFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAwMDAwMDAwMAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwMDAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTM1Niw5ICs0MTAsMTEgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzY4LDI1ICs0MjQsMzIgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM5OCwxNSArNDYxLDE5IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAogCkBAIC00NzgsMTEgKzU0NSwxNyBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTUwMSwyOSArNTc0LDQxIEBACiAjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NX0xFR0FDWT15CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLUNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CiBDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFU0NTST15CiBDT05GSUdfSURFX1RBU0tfSU9DVEw9eQogQ09ORklHX0lERV9QUk9DX0ZTPXkKIApAQCAtNTQyLDE0ICs2MjcsMTMgQEAKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CkBAIC01NjMsOCArNjQ3LDYgQEAKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRF9PTkxZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKQEAgLTU4NiwxMCArNjY4LDYgQEAKIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15CiBDT05GSUdfQ0hSX0RFVl9TQ0g9eQotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKQEAgLTYwNiw2ICs2ODQsOCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYxNCwxMSArNjk0LDE2IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CkBAIC02MjYsNyArNzExLDYgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTYzNywxMCArNzIxLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUwyND15CkBAIC02NjIsNiArNzUwLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02OTAsNiArNzc5LDcgQEAKIENPTkZJR19QQVRBX1BDTUNJQT15CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzAzLDEyICs3OTMsMTUgQEAKICMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD15CiBDT05GSUdfTURfUkFJRDQ1Nj15Ci1DT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CisjIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NiBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDZfUFE9eQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTcyNSwxMiArODE4LDE5IEBACiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZPXkKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03NTMsNiArODUzLDkgQEAKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzYxLDE5ICs4NjQsMjMgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKICMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldApAQCAtNzgzLDE5ICs4OTAsMjIgQEAKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLUNPTkZJR19FMTAwMF9OQVBJPXkKLSMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtODA2LDMwICs5MTYsNDAgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPXkKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CiBDT05GSUdfUEFTRU1JX01BQz15CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtODc0LDE3ICs5OTQsMjMgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CkBAIC05MDAsNiArMTAyNiw3IEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CkBAIC05MjYsMTAgKzEwNTMsMTMgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD00CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NX1BBU0VNST15CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC05NDgsNTcgKzEwNzgsODUgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIwogIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX1BBU0VNST15Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QQVNFTUk9eQorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIwogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiBDT05GSUdfSFdNT05fVklEPXkKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKQEAgLTEwMDYsMTQgKzExNjQsMTcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC0xMDI4LDEwICsxMTg5LDE0IEBACiBDT05GSUdfU0VOU09SU19MTTkwPXkKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldApAQCAtMTAzOSw2ICsxMjA0LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNTAsNDQgKzEyMTcsNDAgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKIENPTkZJR19EUk09eQorQ09ORklHX0RSTV9LTVNfSEVMUEVSPXkKK0NPTkZJR19EUk1fVFRNPXkKICMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9SMTI4IGlzIG5vdCBzZXQKIENPTkZJR19EUk1fUkFERU9OPXkKQEAgLTEwOTksNiArMTI2Miw3IEBACiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCX0REQz15CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtMTE0MCw2ICsxMzA0LDcgQEAKICMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDEyICsxMzEzLDE2IEBACiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKQEAgLTExNzcsMTUgKzEzNDYsOSBAQAogQ09ORklHX0xPR09fTElOVVhfTU9OTz15CiBDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExOTgsMjQgKzEzNjEsMjQgQEAKIENPTkZJR19TTkRfUENNX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCitDT05GSUdfU05EX1JBV01JRElfU0VRPXkKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQogIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgZGV2aWNlcwotIworQ09ORklHX1NORF9QQ0k9eQogIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKQEAgLTEyMzQsNiArMTM5Nyw3IEBACiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CkBAIC0xMjQ2LDYgKzE0MTAsOCBAQAogIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldApAQCAtMTI2Miw2ICsxNDI4LDcgQEAKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTFg2NDY0RVMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKQEAgLTEyNzcsNTcgKzE0NDQsNjQgQEAKICMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBQb3dlck1hYyBkZXZpY2VzCi0jCi0KLSMKLSMgQUxTQSBQb3dlclBDIGRldmljZXMKLSMKLQotIwotIyBVU0IgZGV2aWNlcwotIworQ09ORklHX1NORF9QUEM9eQorQ09ORklHX1NORF9VU0I9eQogQ09ORklHX1NORF9VU0JfQVVESU89eQogQ09ORklHX1NORF9VU0JfVVNYMlk9eQogIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGRldmljZXMKLSMKK0NPTkZJR19TTkRfUENNQ0lBPXkKICMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKLSMKLQotIwotIyBTb0MgQXVkaW8gZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQCi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQorIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMzQzLDE4ICsxNTE3LDI2IEBACiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xMzYzLDYgKzE1NDUsOCBAQAogQ09ORklHX1VTQl9TTDgxMV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTEzNzAsMjAgKzE1NTQsMjAgQEAKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtMTM5OSw3ICsxNTgzLDYgQEAKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTE0MTIsNyArMTU5NSw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTE0MjAsNyArMTYwMyw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTQyOSw3ICsxNjExLDE1IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC0xNDQzLDYgKzE2MzMsNyBAQAogIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRURBQ19NTV9FREFDPXkKIENPTkZJR19FREFDX1BBU0VNST15CisjIENPTkZJR19FREFDX0NQQzkyNSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CkBAIC0xNDcyLDYgKzE2NjMsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xNDgxLDIxICsxNjc1LDMxIEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xNTA0LDExICsxNzA4LDEzIEBACiAjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldApAQCAtMTUxNiw2ICsxNzIyLDEwIEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNTI1LDYgKzE3MzUsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogQ09ORklHX0lTTzk2NjBfRlM9eQpAQCAtMTU0OSwxNiArMTc2NCwxNCBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1NzgsOCArMTc5MSwxMCBAQAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTU5MCwxOCArMTgwNSwxNyBAQAogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTE2NzIsMjUgKzE4ODYsMzAgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKIENPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE3MDAsMTggKzE5MTksMjUgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNzIxLDI2ICsxOTQ3LDcxIEBACiAjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR0dFUj15CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfWE1PTj15CiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKIENPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKK0NPTkZJR19ERUJVR0dFUj15CiAjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTE3NDksMjMgKzIwMjAsMzQgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfWE9SX0JMT0NLUz15CiBDT05GSUdfQVNZTkNfQ09SRT15CiBDT05GSUdfQVNZTkNfTUVNQ1BZPXkKIENPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE3OTMsMTQgKzIwNzUsMjAgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END15CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9eQogQ09ORklHX0NSWVBUT19TSEE1MTI9eQpAQCAtMTgzMCw3ICsyMTE4LDEzIEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YWY0NjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCkBAIC0wLDAgKzEsMjE5OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBGcmkgT2N0IDE2IDExOjM3OjE1IDIwMDkKKyMKK0NPTkZJR19QUEM2ND15CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19CT09LM1NfNjQgaXMgbm90IHNldAorQ09ORklHX1BQQ19CT09LM0VfNjQ9eQorQ09ORklHX1BQQ19CT09LM0U9eQorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfNjQ9eQorQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKK0NPTkZJR19QUENfUEVSRl9DVFJTPXkKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MzIKK0NPTkZJR182NEJJVD15CitDT05GSUdfV09SRF9TSVpFPTY0CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CitDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfQ09NUEFUPXkKK0NPTkZJR19TWVNWSVBDX0NPTVBBVD15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CisjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLU1RBVFM9eQorQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CisjIENPTkZJR19UQVNLX1hBQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9NjQKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVVNFVFM9eQorQ09ORklHX1BST0NfUElEX0NQVVNFVD15CisjIENPTkZJR19DR1JPVVBfQ1BVQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfUkVMQVk9eQorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0tfQ09NUEFUPXkKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCisjCisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX0lPTU1VX1ZNRVJHRT15CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfQUxMX0NQVVM9eQorIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKK0NPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQorQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKKyMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CisjIENPTkZJR19QUENfSEFTX0hBU0hfNjRLIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCisjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CitDT05GSUdfUENJX01TST15CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0NBUkQ9eQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9eQorQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CitDT05GSUdfUENNQ0lBX0lPQ1RMPXkKK0NPTkZJR19DQVJEQlVTPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKyMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CisjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUdfUENJPW0KKyMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX05FVD15CitDT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD1tCitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPXkKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKK0NPTkZJR19JTkVUX0xSTz15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CisjIENPTkZJR19ORl9DVF9QUk9UT19EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorIyBDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURSBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9UUFJPWFk9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEw9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUFJPWFk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0YgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0RFRlJBR19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQorQ09ORklHX05GX05BVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCitDT05GSUdfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1BQVFA9bQorQ09ORklHX05GX05BVF9IMzIzPW0KK0NPTkZJR19ORl9OQVRfU0lQPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPXkKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKK0NPTkZJR19CTEtfREVWX0ZEPXkKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfVElNSU5HUz15CitDT05GSUdfSURFX0FUQVBJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworQ09ORklHX0JMS19ERVZfSURFUENJPXkKK0NPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0FNRDc0WFg9eQorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTkVUTElOSz15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CitDT05GSUdfU0NTSV9GQ19BVFRSUz15CitDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1JQX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQorQ09ORklHX1NDU0lfSVBSPXkKK0NPTkZJR19TQ1NJX0lQUl9UUkFDRT15CitDT05GSUdfU0NTSV9JUFJfRFVNUD15CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xQRkM9bQorIyBDT05GSUdfU0NTSV9MUEZDX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0RFQlVHPW0KKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUwyND15CitDT05GSUdfQVRBX1NGRj15CitDT05GSUdfU0FUQV9TVlc9eQorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQorQ09ORklHX01EX0xJTkVBUj15CitDT05GSUdfTURfUkFJRDA9eQorQ09ORklHX01EX1JBSUQxPXkKK0NPTkZJR19NRF9SQUlEMTA9eQorQ09ORklHX01EX1JBSUQ0NTY9eQorIyBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAorQ09ORklHX01EX01VTFRJUEFUSD1tCitDT05GSUdfTURfRkFVTFRZPW0KK0NPTkZJR19CTEtfREVWX0RNPXkKKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCisjIENPTkZJR19ETV9MT0dfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9aRVJPPW0KK0NPTkZJR19ETV9NVUxUSVBBVEg9bQorIyBDT05GSUdfRE1fTVVMVElQQVRIX1FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX01VTFRJUEFUSF9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTEzOTQ9eQorQ09ORklHX0lFRUUxMzk0X09IQ0kxMzk0PXkKKyMgQ09ORklHX0lFRUUxMzk0X1BDSUxZTlggaXMgbm90IHNldAorQ09ORklHX0lFRUUxMzk0X1NCUDI9bQorQ09ORklHX0lFRUUxMzk0X0VUSDEzOTRfUk9NX0VOVFJZPXkKK0NPTkZJR19JRUVFMTM5NF9FVEgxMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9SQVdJTz15CitDT05GSUdfSUVFRTEzOTRfVklERU8xMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9EVjEzOTQ9bQorIyBDT05GSUdfSUVFRTEzOTRfVkVSQk9TRURFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQorIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKK0NPTkZJR19XSU5ERkFSTT15CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQlJPQURDT01fUEhZPW0KKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1VOR0VNPXkKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CitDT05GSUdfVk9SVEVYPXkKKyMgQ09ORklHX1RZUEhPT04gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CitDT05GSUdfUENORVQzMj15CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CitDT05GSUdfQUNFTklDPXkKK0NPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JPXkKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorQ09ORklHX0UxMDAwPXkKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorQ09ORklHX1RJR09OMz15CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorQ09ORklHX0lYR0I9bQorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAorQ09ORklHX1RSPXkKK0NPTkZJR19JQk1PTD15CisjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRDT05TT0xFPXkKKyMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CitDT05GSUdfTkVUUE9MTF9UUkFQPXkKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1JBV19EUklWRVI9eQorQ09ORklHX01BWF9SQVdfREVWUz0yNTYKKyMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0FNRDgxMTE9eQorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCitDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorQ09ORklHX0ZCX0REQz15CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CitDT05GSUdfRkJfTUFDTU9ERVM9eQorQ09ORklHX0ZCX0JBQ0tMSUdIVD15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKK0NPTkZJR19GQl9USUxFQkxJVFRJTkc9eQorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT0Y9eQorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorQ09ORklHX0ZCX01BVFJPWD15CitDT05GSUdfRkJfTUFUUk9YX01JTExFTklVTT15CitDT05GSUdfRkJfTUFUUk9YX01ZU1RJUVVFPXkKK0NPTkZJR19GQl9NQVRST1hfRz15CitDT05GSUdfRkJfTUFUUk9YX0kyQz1tCitDT05GSUdfRkJfTUFUUk9YX01BVkVOPW0KK0NPTkZJR19GQl9SQURFT049eQorQ09ORklHX0ZCX1JBREVPTl9JMkM9eQorQ09ORklHX0ZCX1JBREVPTl9CQUNLTElHSFQ9eQorIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9JQk1fR1hUNDUwMD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQorQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KK0NPTkZJR19TTkRfU0VRX0RVTU1ZPW0KK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTFg2NDY0RVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BQQz15CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVVNYMlkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BDTUNJQT15CisjIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQorIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FQUExFRElTUExBWT1tCisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EPW0KKyMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TPXkKK0NPTkZJR19JTkZJTklCQU5EX01USENBPW0KK0NPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKKyMgQ09ORklHX0lORklOSUJBTkRfSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQorIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTSBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CisjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9TUlAgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVNFUj1tCitDT05GSUdfRURBQz15CisKKyMKKyMgUmVwb3J0aW5nIHN1YnN5c3RlbXMKKyMKKyMgQ09ORklHX0VEQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0VEQUNfTU1fRURBQz15CisjIENPTkZJR19FREFDX0NQQzkyNSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CitDT05GSUdfRVhUNF9GUz15CitDT05GSUdfRVhUNF9GU19YQVRUUj15CitDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDRfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfWElQPXkKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQyPXkKKyMgQ09ORklHX0pCRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorQ09ORklHX1JFSVNFUkZTX0ZTPXkKKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGU19GUz15CitDT05GSUdfSkZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FVVE9GUzRfRlM9bQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CisjIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjJfQUNMPXkKK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1YzX0FDTD15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1NVTlJQQ19YUFJUX1JETUE9bQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CitDT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PXkKK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9bQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKK0NPTkZJR19TQ0hFRFNUQVRTPXkKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorQ09ORklHX1RSQUNFX0lSUUZMQUdTPXkKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTEFURU5DWVRPUD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX0dFTkVSSUNfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0lSUVNPRkZfVFJBQ0VSPXkKK0NPTkZJR19TQ0hFRF9UUkFDRVI9eQorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKK0NPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKK0NPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1Q9eQorQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVD15CitDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVD15CitDT05GSUdfWE1PTj15CisjIENPTkZJR19YTU9OX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQorQ09ORklHX0RFQlVHR0VSPXkKK0NPTkZJR19JUlFTVEFDS1M9eQorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfWE9SX0JMT0NLUz15CitDT05GSUdfQVNZTkNfQ09SRT15CitDT05GSUdfQVNZTkNfTUVNQ1BZPXkKK0NPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkc9bQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fU0VRSVY9bQorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX0NUUj1tCisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MWk89bQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCmluZGV4IGZmOTZiYjQuLmI3OTExMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjAwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04MiwxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEyMCwyOSArMTIyLDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE1NSw2ICsxNTgsNyBAQAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQogQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKQEAgLTIzOSw2ICsyNDMsNyBAQAogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19GTEFUTUVNPXkKQEAgLTI1Miw2ICsyNTcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQwMSw2ICs0MDcsNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA4LDcgKzQxNSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MjAsNiArNDI2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00ODEsNyArNDg4LDYgQEAKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfU0JDODI0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIApAQCAtNjY0LDcgKzY3MCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC03MTIsMTAgKzcyMCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc2NCw2ICs3NjksNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNzc0LDYgKzc4MCw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtODU1LDE1ICs4NjIsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg4Niw2ICs4OTcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC05MDUsNyArOTE3LDYgQEAKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKQEAgLTkyMiw2ICs5MzMsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKQEAgLTk0MCw2ICs5NTIsNyBAQAogIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPXkKIENPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDYgKzExNjEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExODMsMTAgKzExOTcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTIwOSw2ICsxMjI1LDcgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTIzNyw3ICsxMjU0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjc5LDYgKzEyOTUsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnCmluZGV4IDEyOTNjNDYuLmVmNTBjZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMzEsMjggKzEzMywyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0NCwxMiArMjQ3LDEyIEBACiBDT05GSUdfQklORk1UX01JU0M9eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Nyw2ICsyNzAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2MCw2ICszNjQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4OSw2ICszOTQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk2LDcgKzQwMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQwOSw2ICs0MTQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC02MzMsNiArNjM5LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NzIsMTEgKzY3OSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY5OCw2ICs3MDgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTcyNSw2ICs3MzYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04MjMsOSArODM1LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04NzEsMTAgKzg4NSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk3Nyw2ICs5ODgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwMzEsOSArMTA0Myw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTA1MSw2ICsxMDYwLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTExMDAsNiArMTExNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMTEsOSArMTEyNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMTMyLDYgKzExNDUsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTQyLDYgKzExNTYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMTYyLDcgKzExNzcsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExODYsNiArMTIwMCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKIENPTkZJR19ISURfS1lFPXkKIENPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKIENPTkZJR19ISURfS0VOU0lOR1RPTj15CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMzksNiArMTI1NCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE0MDQsNiArMTQyMCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDYzLDcgKzE0ODAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTE1NzYsNiArMTU5Miw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTkzLDYgKzE2MTAsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTYxNCw3ICsxNjMyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE2NDUsMTEgKzE2NjIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwppbmRleCAyODM4NGRjLi41MjQyNjMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTkgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODIsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTgsMjggKzEyMCwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0Myw2ICsyNDYsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYwLDYgKzI2NCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ5LDYgKzM1NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc4LDYgKzM4NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODUsNyArMzkyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDA1LDkgKzQxMiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02MTksNiArNjI2LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjU3LDcgKzY2NSw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC02NzAsNiArNjgwLDcgQEAKICMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDQ1Nj15CiBDT05GSUdfTURfUkFJRDZfUFE9eQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldApAQCAtNzI5LDEwICs3NDAsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MTMsNiArODIxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NjcsOSArODc2LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04ODcsNyArODkzLDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTkwNiw2ICs5MTEsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05MTYsNiArOTIyLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05NjEsNiArOTY4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTE0MSw2ICsxMTQ5LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyMTAsNyArMTIxOSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiBDT05GSUdfRVhQT1JURlM9bQogCkBAIC0xMzA3LDYgKzEzMTUsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzI0LDYgKzEzMzMsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTM0NCw2ICsxMzU0LDggQEAKIENPTkZJR19BU1lOQ19DT1JFPXkKIENPTkZJR19BU1lOQ19NRU1DUFk9eQogQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQVNZTkNfUFE9eQorQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPXkKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCmluZGV4IDlkYWRlMTUuLjZkOTRkMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTE1LDcgKzE1LDE2IEBACiAKIAkvKiBETUEgb3BlcmF0aW9ucyBvbiB0aGF0IGRldmljZSAqLwogCXN0cnVjdCBkbWFfbWFwX29wcwkqZG1hX29wczsKLQl2b2lkCQkJKmRtYV9kYXRhOworCisJLyoKKwkgKiBXaGVuIGFuIGlvbW11IGlzIGluIHVzZSwgZG1hX2RhdGEgaXMgdXNlZCBhcyBhIHB0ciB0byB0aGUgYmFzZSBvZiB0aGUKKwkgKiBpb21tdV90YWJsZS4gIE90aGVyd2lzZSwgaXQgaXMgYSBzaW1wbGUgbnVtZXJpY2FsIG9mZnNldC4KKwkgKi8KKwl1bmlvbiB7CisJCWRtYV9hZGRyX3QJZG1hX29mZnNldDsKKwkJdm9pZAkJKmlvbW11X3RhYmxlX2Jhc2U7CisJfSBkbWFfZGF0YTsKKwogI2lmZGVmIENPTkZJR19TV0lPVExCCiAJZG1hX2FkZHJfdAkJbWF4X2RpcmVjdF9kbWFfYWRkcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBjYjJjYTQxLi5lMjgxZGFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMjYsNyArMjYsNiBAQAogZXh0ZXJuIHZvaWQgZG1hX2RpcmVjdF9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KHN0cnVjdCBkZXZpY2UgKmRldik7CiAKICNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCiAvKgpAQCAtOTAsNiArODksMjggQEAKIAlkZXYtPmFyY2hkYXRhLmRtYV9vcHMgPSBvcHM7CiB9CiAKKy8qCisgKiBnZXRfZG1hX29mZnNldCgpCisgKgorICogR2V0IHRoZSBkbWEgb2Zmc2V0IG9uIGNvbmZpZ3VyYXRpb25zIHdoZXJlIHRoZSBkbWEgYWRkcmVzcyBjYW4gYmUgZGV0ZXJtaW5lZAorICogZnJvbSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBieSBsb29raW5nIGF0IGEgc2ltcGxlIG9mZnNldC4gIERpcmVjdCBkbWEgYW5kCisgKiBzd2lvdGxiIHVzZSB0aGlzIGZ1bmN0aW9uLCBidXQgaXQgaXMgdHlwaWNhbGx5IG5vdCB1c2VkIGJ5IGltcGxlbWVudGF0aW9ucworICogd2l0aCBhbiBpb21tdS4KKyAqLworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGdldF9kbWFfb2Zmc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2KQorCQlyZXR1cm4gZGV2LT5hcmNoZGF0YS5kbWFfZGF0YS5kbWFfb2Zmc2V0OworCisJcmV0dXJuIFBDSV9EUkFNX09GRlNFVDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9kbWFfb2Zmc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBvZmYpCit7CisJaWYgKGRldikKKwkJZGV2LT5hcmNoZGF0YS5kbWFfZGF0YS5kbWFfb2Zmc2V0ID0gb2ZmOworfQorCiAvKiB0aGlzIHdpbGwgYmUgcmVtb3ZlZCBzb29uICovCiAjZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKQogCkBAIC0xODEsMTIgKzIwMiwxMiBAQAogCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGh5c190b19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkcikKIHsKLQlyZXR1cm4gcGFkZHIgKyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKKwlyZXR1cm4gcGFkZHIgKyBnZXRfZG1hX29mZnNldChkZXYpOwogfQogCiBzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IGRtYV90b19waHlzKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkYWRkcikKIHsKLQlyZXR1cm4gZGFkZHIgLSBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKKwlyZXR1cm4gZGFkZHIgLSBnZXRfZG1hX29mZnNldChkZXYpOwogfQogCiAjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKaW5kZXggM2ExNzk4Mi4uMjA3NzhhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNkZWZpbmUgRldfRkVBVFVSRV9WSU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDQwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfUkRNQQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwODAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9MTEFOCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDEwMDAwKQotI2RlZmluZSBGV19GRUFUVVJFX0JVTEsJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMjAwMDApCisjZGVmaW5lIEZXX0ZFQVRVUkVfQlVMS19SRU1PVkUJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAyMDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9YREFCUglBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDQwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX01VTFRJVENFCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwODAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfU1BMUEFSCUFTTV9DT05TVCgweDAwMDAwMDAwMDAxMDAwMDApCkBAIC00NSw4ICs0NSw3IEBACiAjZGVmaW5lIEZXX0ZFQVRVUkVfTFBBUgkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDQwMDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9QUzNfTFYxCUFTTV9DT05TVCgweDAwMDAwMDAwMDA4MDAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfQkVBVAkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMTAwMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9CVUxLX1JFTU9WRQlBU01fQ09OU1QoMHgwMDAwMDAwMDAyMDAwMDAwKQotI2RlZmluZSBGV19GRUFUVVJFX0NNTwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwNDAwMDAwMCkKKyNkZWZpbmUgRldfRkVBVFVSRV9DTU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDIwMDAwMDApCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTU4LDggKzU3LDkgQEAKIAkJRldfRkVBVFVSRV9QRVJGIHwgRldfRkVBVFVSRV9EVU1QIHwgRldfRkVBVFVSRV9JTlRFUlJVUFQgfAogCQlGV19GRUFUVVJFX01JR1JBVEUgfCBGV19GRUFUVVJFX1BFUkZNT04gfCBGV19GRUFUVVJFX0NSUSB8CiAJCUZXX0ZFQVRVUkVfVklPIHwgRldfRkVBVFVSRV9SRE1BIHwgRldfRkVBVFVSRV9MTEFOIHwKLQkJRldfRkVBVFVSRV9CVUxLIHwgRldfRkVBVFVSRV9YREFCUiB8IEZXX0ZFQVRVUkVfTVVMVElUQ0UgfAotCQlGV19GRUFUVVJFX1NQTFBBUiB8IEZXX0ZFQVRVUkVfTFBBUiB8IEZXX0ZFQVRVUkVfQ01PLAorCQlGV19GRUFUVVJFX0JVTEtfUkVNT1ZFIHwgRldfRkVBVFVSRV9YREFCUiB8CisJCUZXX0ZFQVRVUkVfTVVMVElUQ0UgfCBGV19GRUFUVVJFX1NQTFBBUiB8IEZXX0ZFQVRVUkVfTFBBUiB8CisJCUZXX0ZFQVRVUkVfQ01PLAogCUZXX0ZFQVRVUkVfUFNFUklFU19BTFdBWVMgPSAwLAogCUZXX0ZFQVRVUkVfSVNFUklFU19QT1NTSUJMRSA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKIAlGV19GRUFUVVJFX0lTRVJJRVNfQUxXQVlTID0gRldfRkVBVFVSRV9JU0VSSUVTIHwgRldfRkVBVFVSRV9MUEFSLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaAppbmRleCA3NDY0YzBkLi5lZGZjOTgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaApAQCAtNzAsNiArNzAsMTYgQEAKIAogc3RydWN0IHNjYXR0ZXJsaXN0OwogCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lvbW11X3RhYmxlX2Jhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpiYXNlKQoreworCWRldi0+YXJjaGRhdGEuZG1hX2RhdGEuaW9tbXVfdGFibGVfYmFzZSA9IGJhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZ2V0X2lvbW11X3RhYmxlX2Jhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLmlvbW11X3RhYmxlX2Jhc2U7Cit9CisKIC8qIEZyZWVzIHRhYmxlIGZvciBhbiBpbmRpdmlkdWFsIGRldmljZSBub2RlICovCiBleHRlcm4gdm9pZCBpb21tdV9mcmVlX3RhYmxlKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBjb25zdCBjaGFyICpub2RlX25hbWUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1jLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1jLmgKaW5kZXggY2NjNjhiNS4uNWE5ZWRlNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWMuaApAQCAtMjksNyArMjksNyBAQAogdm9pZCByZWxlYXNlX3BtY19oYXJkd2FyZSh2b2lkKTsKIHZvaWQgcHBjX2VuYWJsZV9wbWNzKHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX1BQQzY0CisjaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKICNpbmNsdWRlIDxhc20vbHBwYWNhLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcGNfc2V0X3BtdV9pbnVzZShpbnQgaW51c2UpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaAppbmRleCA2YzNlMWY0Li5lYzBiMGIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNkZWZpbmUJX1BBR0VfTk9fQ0FDSEUJMHgwMDQJLyogSTogY2FjaGluZyBpcyBpbmhpYml0ZWQgKi8KICNkZWZpbmUJX1BBR0VfV1JJVEVUSFJVCTB4MDA4CS8qIFc6IGNhY2hpbmcgaXMgd3JpdGUtdGhyb3VnaCAqLwogI2RlZmluZQlfUEFHRV9VU0VSCTB4MDEwCS8qIG1hdGNoZXMgb25lIG9mIHRoZSB6b25lIHBlcm1pc3Npb24gYml0cyAqLworI2RlZmluZQlfUEFHRV9TUEVDSUFMCTB4MDIwCS8qIHNvZnR3YXJlOiBTcGVjaWFsIHBhZ2UgKi8KICNkZWZpbmUJX1BBR0VfUlcJMHgwNDAJLyogc29mdHdhcmU6IFdyaXRlcyBwZXJtaXR0ZWQgKi8KICNkZWZpbmUJX1BBR0VfRElSVFkJMHgwODAJLyogc29mdHdhcmU6IGRpcnR5IHBhZ2UgKi8KICNkZWZpbmUgX1BBR0VfSFdXUklURQkweDEwMAkvKiBoYXJkd2FyZTogRGlydHkgJiBSVywgc2V0IGluIGV4Y2VwdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmgKaW5kZXggOTRlOTc5Ny4uZGQ1ZWE5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KICNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDAyCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KICNkZWZpbmUgX1BBR0VfU0hBUkVECTB4MDAwNAkvKiBObyBBU0lEIChjb250ZXh0KSBjb21wYXJlICovCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDA4CS8qIFNXIGVudHJ5LCBmb3JjZWQgdG8gMCBieSB0aGUgVExCIG1pc3MgKi8KIAogLyogVGhlc2UgZml2ZSBzb2Z0d2FyZSBiaXRzIG11c3QgYmUgbWFza2VkIG91dCB3aGVuIHRoZSBlbnRyeSBpcyBsb2FkZWQKICAqIGludG8gdGhlIFRMQi4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCmluZGV4IGMzYjY1MDcuLmYyYjM3MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaApAQCAtMjUsOSArMjUsNiBAQAogI2lmbmRlZiBfUEFHRV9XUklURVRIUlUKICNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTAKICNlbmRpZgotI2lmbmRlZiBfUEFHRV9TUEVDSUFMCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMAotI2VuZGlmCiAjaWZuZGVmIF9QQUdFXzRLX1BGTgogI2RlZmluZSBfUEFHRV80S19QRk4JCTAKICNlbmRpZgpAQCAtMTc5LDcgKzE3Niw1IEBACiAjZGVmaW5lIEhBVkVfUEFHRV9BR1AKIAogLyogQWR2ZXJ0aXNlIHN1cHBvcnQgZm9yIF9QQUdFX1NQRUNJQUwgKi8KLSNpZmRlZiBfUEFHRV9TUEVDSUFMCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0jZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDBiOWM5MTMuLjAzYzg2MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTcxMSw2ICs3MTEsOCBAQAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCisJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NTAiLAorCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCiAJfSwKIAl7CS8qIDc0NS83NTUgKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZmYwMDAsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYwppbmRleCA4N2RkYjNmLi4zNzc3MWE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMKQEAgLTE4LDcgKzE4LDcgQEAKIHN0YXRpYyB2b2lkICpkbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewotCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsCisJcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2l6ZSwKIAkJCQkgICAgZG1hX2hhbmRsZSwgZGV2aWNlX3RvX21hc2soZGV2KSwgZmxhZywKIAkJCQkgICAgZGV2X3RvX25vZGUoZGV2KSk7CiB9CkBAIC0yNiw3ICsyNiw3IEBACiBzdGF0aWMgdm9pZCBkbWFfaW9tbXVfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCSAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewotCWlvbW11X2ZyZWVfY29oZXJlbnQoZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworCWlvbW11X2ZyZWVfY29oZXJlbnQoZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwogfQogCiAvKiBDcmVhdGVzIFRDRXMgZm9yIGEgdXNlciBwcm92aWRlZCBidWZmZXIuICBUaGUgdXNlciBidWZmZXIgbXVzdCBiZQpAQCAtMzksOCArMzksOCBAQAogCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JcmV0dXJuIGlvbW11X21hcF9wYWdlKGRldiwgZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgcGFnZSwgb2Zmc2V0LCBzaXplLAotCQkJICAgICAgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CisJcmV0dXJuIGlvbW11X21hcF9wYWdlKGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgcGFnZSwgb2Zmc2V0LAorCQkJICAgICAgc2l6ZSwgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIApAQCAtNDgsNyArNDgsNyBAQAogCQkJCSBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCSBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKLQlpb21tdV91bm1hcF9wYWdlKGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbiwKKwlpb21tdV91bm1hcF9wYWdlKGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbiwKIAkJCSBhdHRycyk7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAKIAkJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JcmV0dXJuIGlvbW11X21hcF9zZyhkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNnbGlzdCwgbmVsZW1zLAorCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCBnZXRfaW9tbXVfdGFibGVfYmFzZShkZXYpLCBzZ2xpc3QsIG5lbGVtcywKIAkJCSAgICBkZXZpY2VfdG9fbWFzayhkZXYpLCBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIApAQCAtNjUsMTQgKzY1LDE0IEBACiAJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JaW9tbXVfdW5tYXBfc2coZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2dsaXN0LCBuZWxlbXMsIGRpcmVjdGlvbiwKKwlpb21tdV91bm1hcF9zZyhnZXRfaW9tbXVfdGFibGVfYmFzZShkZXYpLCBzZ2xpc3QsIG5lbGVtcywgZGlyZWN0aW9uLAogCQkgICAgICAgYXR0cnMpOwogfQogCiAvKiBXZSBzdXBwb3J0IERNQSB0by9mcm9tIGFueSBtZW1vcnkgcGFnZSB2aWEgdGhlIGlvbW11ICovCiBzdGF0aWMgaW50IGRtYV9pb21tdV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7Ci0Jc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhOworCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KTsKIAogCWlmICghdGJsIHx8IHRibC0+aXRfb2Zmc2V0ID4gbWFzaykgewogCQlwcmludGsoS0VSTl9JTkZPCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYwppbmRleCAyMWI3ODRkLi42MjE1MDYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLmMKQEAgLTIxLDEzICsyMSw2IEBACiAgKiBkZWZhdWx0IHRoZSBvZmZzZXQgaXMgUENJX0RSQU1fT0ZGU0VULgogICovCiAKLXVuc2lnbmVkIGxvbmcgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpZiAoZGV2KQotCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZGV2LT5hcmNoZGF0YS5kbWFfZGF0YTsKLQotCXJldHVybiBQQ0lfRFJBTV9PRkZTRVQ7Ci19CiAKIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQpAQCAtMzcsNyArMzAsNyBAQAogCXJldCA9IF9fZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZyk7CiAJaWYgKHJldCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQkqZG1hX2hhbmRsZSArPSBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKKwkqZG1hX2hhbmRsZSArPSBnZXRfZG1hX29mZnNldChkZXYpOwogCXJldHVybiByZXQ7CiAjZWxzZQogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtNTEsNyArNDQsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAlyZXQgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJbWVtc2V0KHJldCwgMCwgc2l6ZSk7Ci0JKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2FicyhyZXQpICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2FicyhyZXQpICsgZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIAogCXJldHVybiByZXQ7CiAjZW5kaWYKQEAgLTc1LDcgKzY4LDcgQEAKIAlpbnQgaTsKIAogCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbnRzLCBpKSB7Ci0JCXNnLT5kbWFfYWRkcmVzcyA9IHNnX3BoeXMoc2cpICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJCXNnLT5kbWFfYWRkcmVzcyA9IHNnX3BoeXMoc2cpICsgZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIAkJc2ctPmRtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOwogCQlfX2RtYV9zeW5jX3BhZ2Uoc2dfcGFnZShzZyksIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIGRpcmVjdGlvbik7CiAJfQpAQCAtMTEwLDcgKzEwMyw3IEBACiB7CiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAJX19kbWFfc3luY19wYWdlKHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyKTsKLQlyZXR1cm4gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0ICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJcmV0dXJuIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldCArIGdldF9kbWFfb2Zmc2V0KGRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZGlyZWN0X3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDkwMGUwZWUuLjk3NjMyNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTY1OCw0MiArNjU4LDQzIEBACiAJY21wZGkJcjAsMAogCWNyYW5kYwllcSxjcjEqNCtlcSxlcQogCWJuZQlyZXN0b3JlCi0JLyogaGVyZSB3ZSBhcmUgcHJlZW1wdGluZyB0aGUgY3VycmVudCB0YXNrICovCi0xOgotI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCWJsCS50cmFjZV9oYXJkaXJxc19vbgotCS8qIE5vdGU6IHdlIGp1c3QgY2xvYmJlcmVkIHIxMCB3aGljaCB1c2VkIHRvIGNvbnRhaW4gdGhlIHByZXZpb3VzCi0JICogTVNSIGJlZm9yZSB0aGUgaGFyZC1kaXNhYmxpbmcgZG9uZSBieSB0aGUgY2FsbGVyIG9mIGRvX3dvcmsuCi0JICogV2UgZG9uJ3QgaGF2ZSB0aGF0IHZhbHVlIGFueW1vcmUsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBhcwotCSAqIHdlIHdpbGwgaGFyZC1lbmFibGUgdW5jb25kaXRpb25hbGx5LCB3ZSBjYW4ganVzdCByZWxvYWQgdGhlCi0JICogY3VycmVudCBNU1IgaW50byByMTAKKworCS8qIEhlcmUgd2UgYXJlIHByZWVtcHRpbmcgdGhlIGN1cnJlbnQgdGFzay4KKwkgKgorCSAqIEVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBzb2Z0LWRpc2FibGVkLiBXZSBhbHNvIHByb3Blcmx5IG1hcmsKKwkgKiB0aGUgUEFDQSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgaGFyZC1kaXNhYmxlZAorCSAqIGFuZCB0cmFjZSB0aGUgY2hhbmdlCiAJICovCi0JbWZtc3IJcjEwCi0jZW5kaWYgLyogQ09ORklHX1RSQUNFX0lSUUZMQUdTICovCi0JbGkJcjAsMQorCWxpCXIwLDAKIAlzdGIJcjAsUEFDQVNPRlRJUlFFTihyMTMpCiAJc3RiCXIwLFBBQ0FIQVJESVJRRU4ocjEzKQorCVRSQUNFX0RJU0FCTEVfSU5UUworCisJLyogQ2FsbCB0aGUgc2NoZWR1bGVyIHdpdGggc29mdCBJUlFzIG9mZiAqLworMToJYmwJLnByZWVtcHRfc2NoZWR1bGVfaXJxCisKKwkvKiBIYXJkLWRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbiAoYW5kIHVwZGF0ZSBQQUNBKSAqLwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCi0Jd3J0ZWVpCTEKLQlibAkucHJlZW1wdF9zY2hlZHVsZQogCXdydGVlaQkwCiAjZWxzZQotCW9yaQlyMTAscjEwLE1TUl9FRQotCW10bXNyZAlyMTAsMQkJLyogcmVlbmFibGUgaW50ZXJydXB0cyAqLwotCWJsCS5wcmVlbXB0X3NjaGVkdWxlCiAJbWZtc3IJcjEwCi0JY2xycmRpCXI5LHIxLFRIUkVBRF9TSElGVAotCXJsZGljbAlyMTAscjEwLDQ4LDEJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluICovCisJcmxkaWNsCXIxMCxyMTAsNDgsMQogCXJvdGxkaQlyMTAscjEwLDE2CiAJbXRtc3JkCXIxMCwxCiAjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KKwlsaQlyMCwwCisJc3RiCXIwLFBBQ0FIQVJESVJRRU4ocjEzKQorCisJLyogUmUtdGVzdCBmbGFncyBhbmQgZXZlbnR1YWxseSBsb29wICovCisJY2xycmRpCXI5LHIxLFRIUkVBRF9TSElGVAogCWxkCXI0LFRJX0ZMQUdTKHI5KQogCWFuZGkuCXIwLHI0LF9USUZfTkVFRF9SRVNDSEVECiAJYm5lCTFiCiAJYglyZXN0b3JlCiAKIHVzZXJfd29yazoKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCisKIAkvKiBFbmFibGUgaW50ZXJydXB0cyAqLwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCiAJd3J0ZWVpCTEKQEAgLTEwMzgsOCArMTAzOSw3IEBACiAJICogV2UgYXJlIGluIGEgbW9kdWxlIHVzaW5nIHRoZSBtb2R1bGUncyBUT0MuCiAJICogU3dpdGNoIHRvIG91ciBUT0MgdG8gcnVuIGluc2lkZSB0aGUgY29yZSBrZXJuZWwuCiAJICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcikKLQlsZAlyMiwgOChyNCkKKwlsZAlyMiwgUEFDQVRPQyhyMTMpCiAKIAlibAkuZnRyYWNlX3JldHVybl90b19oYW5kbGVyCiAJbm9wCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMKaW5kZXggOTA0OGY5Ni4uMjRkY2MwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgotI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLTY0ZS5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KICNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKaW5kZXggZmU4ZjcxZC4uNjQxYzc0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKQEAgLTI4MiwxMiArMjgyLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nICpwdHIgPSBnZGJfcmVnczsKIAlpbnQgcmVnOwotI2lmZGVmIENPTkZJR19TUEUKLQl1bmlvbiB7Ci0JCXUzMiB2MzJbMl07Ci0JCXU2NCB2NjQ7Ci0JfSBhY2M7Ci0jZW5kaWYKIAogCWZvciAocmVnID0gMDsgcmVnIDwgMzI7IHJlZysrKQogCQlVTlBBQ0s2NChyZWdzLT5ncHJbcmVnXSwgcHRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKaW5kZXggZTlmNDg0MC4uZThkZmRiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTExMTcsNyArMTExNyw3IEBACiAKIAkJLyogSG9vayB1cCBkZWZhdWx0IERNQSBvcHMgKi8KIAkJc2QtPmRtYV9vcHMgPSBwY2lfZG1hX29wczsKLQkJc2QtPmRtYV9kYXRhID0gKHZvaWQgKilQQ0lfRFJBTV9PRkZTRVQ7CisJCXNldF9kbWFfb2Zmc2V0KCZkZXYtPmRldiwgUENJX0RSQU1fT0ZGU0VUKTsKIAogCQkvKiBBZGRpdGlvbmFsIHBsYXRmb3JtIERNQS9pb21tdSBzZXR1cCAqLwogCQlpZiAocHBjX21kLnBjaV9kbWFfZGV2X3NldHVwKQpAQCAtMTE5MCw3ICsxMTkwLDcgQEAKICAqIFJlcGFyZW50IHJlc291cmNlIGNoaWxkcmVuIG9mIHByIHRoYXQgY29uZmxpY3Qgd2l0aCByZXMKICAqIHVuZGVyIHJlcywgYW5kIG1ha2UgcmVzIHJlcGxhY2UgdGhvc2UgY2hpbGRyZW4uCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHJlcGFyZW50X3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwKK3N0YXRpYyBpbnQgcmVwYXJlbnRfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LAogCQkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHJlc291cmNlICpwLCAqKnBwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggYmE5NDlhMi4uY2NmNTZhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC05Nyw3ICs5Nyw5IEBACiAJICogdG8gZG8gYW4gYXBwcm9wcmlhdGUgVExCIGZsdXNoIGhlcmUgdG9vCiAJICovCiAJaWYgKGJ1cy0+c2VsZikgeworI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NAogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGJ1cy0+cmVzb3VyY2VbMF07CisjZW5kaWYKIAogCQlwcl9kZWJ1ZygiSU8gdW5tYXBwaW5nIGZvciBQQ0ktUENJIGJyaWRnZSAlc1xuIiwKIAkJCSBwY2lfbmFtZShidXMtPnNlbGYpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggYmJjYmFlMS4uODdmMTY2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTExNiwyMCArMTE2LDIzIEBACiBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX2dldF9taXNjX2ZsYWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSByZWdzLT5kc2lzcjsKKwl1bnNpZ25lZCBsb25nIHNpaHYgPSBNTUNSQV9TSUhWOworCXVuc2lnbmVkIGxvbmcgc2lwciA9IE1NQ1JBX1NJUFI7CiAKIAlpZiAoVFJBUChyZWdzKSAhPSAweGYwMCkKIAkJcmV0dXJuIDA7CS8qIG5vdCBhIFBNVSBpbnRlcnJ1cHQgKi8KIAogCWlmIChwcG11LT5mbGFncyAmIFBQTVVfQUxUX1NJUFIpIHsKLQkJaWYgKG1tY3JhICYgUE9XRVI2X01NQ1JBX1NJSFYpCi0JCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SOwotCQlyZXR1cm4gKG1tY3JhICYgUE9XRVI2X01NQ1JBX1NJUFIpID8KLQkJCVBFUkZfUkVDT1JEX01JU0NfVVNFUiA6IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCQlzaWh2ID0gUE9XRVI2X01NQ1JBX1NJSFY7CisJCXNpcHIgPSBQT1dFUjZfTU1DUkFfU0lQUjsKIAl9Ci0JaWYgKG1tY3JhICYgTU1DUkFfU0lIVikKKworCS8qIFBSIGhhcyBwcmlvcml0eSBvdmVyIEhWLCBzbyBvcmRlciBiZWxvdyBpcyBpbXBvcnRhbnQgKi8KKwlpZiAobW1jcmEgJiBzaXByKQorCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOworCWlmICgobW1jcmEgJiBzaWh2KSAmJiAoZnJlZXplX2V2ZW50c19rZXJuZWwgIT0gTU1DUjBfRkNIVikpCiAJCXJldHVybiBQRVJGX1JFQ09SRF9NSVNDX0hZUEVSVklTT1I7Ci0JcmV0dXJuIChtbWNyYSAmIE1NQ1JBX1NJUFIpID8gUEVSRl9SRUNPUkRfTUlTQ19VU0VSIDoKLQkJUEVSRl9SRUNPUkRfTUlTQ19LRVJORUw7CisJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwYTMyMTY0Li5jOTMwYWMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTAxNiw5ICsxMDE2LDEzIEBACiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCWludCBjdXJyX2ZyYW1lID0gY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7CiAJZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcmV0dXJuX3RvX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBydGggPSAodW5zaWduZWQgbG9uZylyZXR1cm5fdG9faGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIG1ydGggPSAtMTsKICNpZmRlZiBDT05GSUdfUFBDNjQKLQlhZGRyID0gKih1bnNpZ25lZCBsb25nKilhZGRyOworCWV4dGVybiB2b2lkIG1vZF9yZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKwlydGggPSAqKHVuc2lnbmVkIGxvbmcgKilydGg7CisJbXJ0aCA9ICh1bnNpZ25lZCBsb25nKW1vZF9yZXR1cm5fdG9faGFuZGxlcjsKKwltcnRoID0gKih1bnNpZ25lZCBsb25nICopbXJ0aDsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTEwNDQsNyArMTA0OCw3IEBACiAJCWlmICghZmlyc3RmcmFtZSB8fCBpcCAhPSBscikgewogCQkJcHJpbnRrKCJbIlJFRyJdIFsiUkVHIl0gJXBTIiwgc3AsIGlwLCAodm9pZCAqKWlwKTsKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0JCQlpZiAoaXAgPT0gYWRkciAmJiBjdXJyX2ZyYW1lID49IDApIHsKKwkJCWlmICgoaXAgPT0gcnRoIHx8IGlwID09IG1ydGgpICYmIGN1cnJfZnJhbWUgPj0gMCkgewogCQkJCXByaW50aygiICglcFMpIiwKIAkJCQkgICAgICAgKHZvaWQgKiljdXJyZW50LT5yZXRfc3RhY2tbY3Vycl9mcmFtZV0ucmV0KTsKIAkJCQljdXJyX2ZyYW1lLS07CkBAIC0xMTY1LDcgKzExNjksMjIgQEAKIAogdW5zaWduZWQgbG9uZyBhcmNoX3JhbmRvbWl6ZV9icmsoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSBQQUdFX0FMSUdOKG1tLT5icmsgKyBicmtfcm5kKCkpOworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5icms7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKyNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKKwkvKgorCSAqIElmIHdlIGFyZSB1c2luZyAxVEIgc2VnbWVudHMgYW5kIHdlIGFyZSBhbGxvd2VkIHRvIHJhbmRvbWlzZQorCSAqIHRoZSBoZWFwLCB3ZSBjYW4gcHV0IGl0IGFib3ZlIDFUQiBzbyBpdCBpcyBiYWNrZWQgYnkgYSAxVEIKKwkgKiBzZWdtZW50LiBPdGhlcndpc2UgdGhlIGhlYXAgd2lsbCBiZSBpbiB0aGUgYm90dG9tIDFUQgorCSAqIHdoaWNoIGFsd2F5cyB1c2VzIDI1Nk1CIHNlZ21lbnRzIGFuZCB0aGlzIG1heSByZXN1bHQgaW4gYQorCSAqIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisJICovCisJaWYgKCFpc18zMmJpdF90YXNrKCkgJiYgKG1tdV9oaWdodXNlcl9zc2l6ZSA9PSBNTVVfU0VHU0laRV8xVCkpCisJCWJhc2UgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBtbS0+YnJrLCAxVUwgPDwgU0lEX1NISUZUXzFUKTsKKyNlbmRpZgorCisJcmV0ID0gUEFHRV9BTElHTihiYXNlICsgYnJrX3JuZCgpKTsKIAogCWlmIChyZXQgPCBtbS0+YnJrKQogCQlyZXR1cm4gbW0tPmJyazsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IDg2NDMzNGIuLmJhZmFjMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtODAwLDcgKzgwMCw3IEBACiAJcm9vdCA9IGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsIEFERFIoIi8iKSk7CiAJaWYgKHJvb3QgIT0gMCkgewogCQkvKiB0cnkgY2FsbGluZyB0aGUgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCBtZXRob2QgKi8KLQkJcHJvbV9wcmludGYoIkNhbGxpbmcgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUuLi4iKTsKKwkJcHJvbV9wcmludGYoIkNhbGxpbmcgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydC4uLiIpOwogCQlpZiAoY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCAzLCAyLCAmcmV0LAogCQkJCSAgQUREUigiaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCIpLAogCQkJCSAgcm9vdCwKQEAgLTgxNCw2ICs4MTQsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWNhbGxfcHJvbSgiY2xvc2UiLCAxLCAwLCByb290KTsKKwkJcHJvbV9wcmludGYoIiBub3QgaW1wbGVtZW50ZWRcbiIpOwogCX0KIAogCS8qIG5vIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQgY2FsbCwgdHJ5IHRoZSBvbGQgd2F5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggNzk3ZWE5NS4uMDRmNjM4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgotI2luY2x1ZGUgPGFzbS9tbXUtaGFzaDY0Lmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA5MmRjODQ0Li5hMTM2YTExYzQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTc3Nyw3ICs3NzcsNyBAQAogCXJldHVybiBwcGNfbWQuc2V0X3J0Y190aW1lKCZ0bSk7CiB9CiAKLXZvaWQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpCitzdGF0aWMgdm9pZCBfX3JlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQogewogCXN0cnVjdCBydGNfdGltZSB0bTsKIAlzdGF0aWMgaW50IGZpcnN0ID0gMTsKQEAgLTgwMCwxMCArODAwLDIzIEBACiAJCXJldHVybjsKIAl9CiAJcHBjX21kLmdldF9ydGNfdGltZSgmdG0pOworCiAJdHMtPnR2X3NlYyA9IG1rdGltZSh0bS50bV95ZWFyKzE5MDAsIHRtLnRtX21vbisxLCB0bS50bV9tZGF5LAogCQkJICAgIHRtLnRtX2hvdXIsIHRtLnRtX21pbiwgdG0udG1fc2VjKTsKIH0KIAordm9pZCByZWFkX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlfX3JlYWRfcGVyc2lzdGVudF9jbG9jayh0cyk7CisKKwkvKiBTYW5pdGl6ZSBpdCBpbiBjYXNlIHJlYWwgdGltZSBjbG9jayBpcyBzZXQgYmVsb3cgRVBPQ0ggKi8KKwlpZiAodHMtPnR2X3NlYyA8IDApIHsKKwkJdHMtPnR2X3NlYyA9IDA7CisJCXRzLT50dl9uc2VjID0gMDsKKwl9CisJCQorfQorCiAvKiBjbG9ja3NvdXJjZSBjb2RlICovCiBzdGF0aWMgY3ljbGVfdCBydGNfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwppbmRleCAzZmFhZjI5Li4xMzdkYzIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwpAQCAtNTAsNiArNTAsOSBAQAogLyogTWF4IHN1cHBvcnRlZCBzaXplIGZvciBzeW1ib2wgbmFtZXMgKi8KICNkZWZpbmUgTUFYX1NZTU5BTUUJNjQKIAorLyogVGhlIGFsaWdubWVudCBvZiB0aGUgdkRTTyAqLworI2RlZmluZSBWRFNPX0FMSUdOTUVOVAkoMSA8PCAxNikKKwogZXh0ZXJuIGNoYXIgdmRzbzMyX3N0YXJ0LCB2ZHNvMzJfZW5kOwogc3RhdGljIHZvaWQgKnZkc28zMl9rYmFzZSA9ICZ2ZHNvMzJfc3RhcnQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IHZkc28zMl9wYWdlczsKQEAgLTIzMSwxNSArMjM0LDI4IEBACiAJICogcGljayBhIGJhc2UgYWRkcmVzcyBmb3IgdGhlIHZEU08gaW4gcHJvY2VzcyBzcGFjZS4gV2UgdHJ5IHRvIHB1dCBpdAogCSAqIGF0IHZkc29fYmFzZSB3aGljaCBpcyB0aGUgIm5hdHVyYWwiIGJhc2UgZm9yIGl0LCBidXQgd2UgbWlnaHQgZmFpbAogCSAqIGFuZCBlbmQgdXAgcHV0dGluZyBpdCBlbHNld2hlcmUuCisJICogQWRkIGVub3VnaCB0byB0aGUgc2l6ZSBzbyB0aGF0IHRoZSByZXN1bHQgY2FuIGJlIGFsaWduZWQuCiAJICovCiAJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAl2ZHNvX2Jhc2UgPSBnZXRfdW5tYXBwZWRfYXJlYShOVUxMLCB2ZHNvX2Jhc2UsCi0JCQkJICAgICAgdmRzb19wYWdlcyA8PCBQQUdFX1NISUZULCAwLCAwKTsKKwkJCQkgICAgICAodmRzb19wYWdlcyA8PCBQQUdFX1NISUZUKSArCisJCQkJICAgICAgKChWRFNPX0FMSUdOTUVOVCAtIDEpICYgUEFHRV9NQVNLKSwKKwkJCQkgICAgICAwLCAwKTsKIAlpZiAoSVNfRVJSX1ZBTFVFKHZkc29fYmFzZSkpIHsKIAkJcmMgPSB2ZHNvX2Jhc2U7CiAJCWdvdG8gZmFpbF9tbWFwc2VtOwogCX0KIAorCS8qIEFkZCByZXF1aXJlZCBhbGlnbm1lbnQuICovCisJdmRzb19iYXNlID0gQUxJR04odmRzb19iYXNlLCBWRFNPX0FMSUdOTUVOVCk7CisKKwkvKgorCSAqIFB1dCB2RFNPIGJhc2UgaW50byBtbSBzdHJ1Y3QuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgY2FsbGluZworCSAqIGluc3RhbGxfc3BlY2lhbF9tYXBwaW5nIG9yIHRoZSBwZXJmIGNvdW50ZXIgbW1hcCB0cmFja2luZyBjb2RlCisJICogd2lsbCBmYWlsIHRvIHJlY29nbmlzZSBpdCBhcyBhIHZEU08gKHNpbmNlIGFyY2hfdm1hX25hbWUgZmFpbHMpLgorCSAqLworCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IHZkc29fYmFzZTsKKwogCS8qCiAJICogb3VyIHZtYSBmbGFncyBkb24ndCBoYXZlIFZNX1dSSVRFIHNvIGJ5IGRlZmF1bHQsIHRoZSBwcm9jZXNzIGlzbid0CiAJICogYWxsb3dlZCB0byB3cml0ZSB0aG9zZSBwYWdlcy4KQEAgLTI2MCwxMSArMjc2LDEwIEBACiAJCQkJICAgICBWTV9NQVlSRUFEfFZNX01BWVdSSVRFfFZNX01BWUVYRUN8CiAJCQkJICAgICBWTV9BTFdBWVNEVU1QLAogCQkJCSAgICAgdmRzb19wYWdlbGlzdCk7Ci0JaWYgKHJjKQorCWlmIChyYykgeworCQljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSAwOwogCQlnb3RvIGZhaWxfbW1hcHNlbTsKLQotCS8qIFB1dCB2RFNPIGJhc2UgaW50byBtbSBzdHJ1Y3QgKi8KLQljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSB2ZHNvX2Jhc2U7CisJfQogCiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKaW5kZXggOTA0ZWYxMy4uMDU0NmJjZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwpAQCAtMjUsNyArMjUsNyBAQAogCS4gPSBBTElHTigxNik7CiAJLnRleHQJCTogewogCQkqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiogX19mdHJfYWx0XyopCi0JfQorCX0JCSAgICAgIAkgICAgICAJCQk6dGV4dAogCVBST1ZJREUoX19ldGV4dCA9IC4pOwogCVBST1ZJREUoX2V0ZXh0ID0gLik7CiAJUFJPVklERShldGV4dCA9IC4pOwpAQCAtNTYsNyArNTYsNyBAQAogCS5maXh1cAkJOiB7ICooLmZpeHVwKSB9CiAKIAkuZHluYW1pYwk6IHsgKiguZHluYW1pYykgfQkJOnRleHQJOmR5bmFtaWMKLQkuZ290CQk6IHsgKiguZ290KSB9CisJLmdvdAkJOiB7ICooLmdvdCkgfQkJCTp0ZXh0CiAJLnBsdAkJOiB7ICooLnBsdCkgfQogCiAJX2VuZCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCBiYzdiNDFlLi43N2Y2NDIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKQEAgLTEwNTQsNiArMTA1NCw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJdGJsID0ga21hbGxvYyhzaXplb2YoKnRibCksIEdGUF9LRVJORUwpOworCWlmICh0YmwgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CiAKIAlvZl9wYXJzZV9kbWFfd2luZG93KGRldi0+ZGV2LmFyY2hkYXRhLm9mX25vZGUsIGRtYV93aW5kb3csCiAJCQkgICAgJnRibC0+aXRfaW5kZXgsICZvZmZzZXQsICZzaXplKTsKQEAgLTEyMzMsNyArMTIzNSw3IEBACiAJCXZpb19jbW9fc2V0X2RtYV9vcHModmlvZGV2KTsKIAllbHNlCiAJCXZpb2Rldi0+ZGV2LmFyY2hkYXRhLmRtYV9vcHMgPSAmZG1hX2lvbW11X29wczsKLQl2aW9kZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IHZpb19idWlsZF9pb21tdV90YWJsZSh2aW9kZXYpOworCXNldF9pb21tdV90YWJsZV9iYXNlKCZ2aW9kZXYtPmRldiwgdmlvX2J1aWxkX2lvbW11X3RhYmxlKHZpb2RldikpOwogCXNldF9kZXZfbm9kZSgmdmlvZGV2LT5kZXYsIG9mX25vZGVfdG9fbmlkKG9mX25vZGUpKTsKIAogCS8qIGluaXQgZ2VuZXJpYyAnc3RydWN0IGRldmljZScgZmllbGRzOiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDU4ZGE0MDcuLjI3NzM1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogCiBFTlRSWShfc3RleHQpCiAKQEAgLTcxLDEyICs3Miw3IEBACiAJLyogUmVhZC1vbmx5IGRhdGEgKi8KIAlST0RBVEEKIAotCS8qIEV4Y2VwdGlvbiAmIGJ1ZyB0YWJsZXMgKi8KLQlfX2V4X3RhYmxlIDogQVQoQUREUihfX2V4X3RhYmxlKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0KKwlFWENFUFRJT05fVEFCTEUoMCkKIAogCU5PVEVTIDprZXJuZWwgOm5vdGVzCiAKQEAgLTkzLDEyICs4OSw3IEBACiAgKi8KIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfX2luaXRfYmVnaW4gPSAuOwotCi0JLmluaXQudGV4dCA6IEFUKEFERFIoLmluaXQudGV4dCkgLSBMT0FEX09GRlNFVCkgewotCQlfc2luaXR0ZXh0ID0gLjsKLQkJSU5JVF9URVhUCi0JCV9laW5pdHRleHQgPSAuOwotCX0gOmtlcm5lbAorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkgOmtlcm5lbAogCiAJLyogLmV4aXQudGV4dCBpcyBkaXNjYXJkZWQgYXQgcnVudGltZSwgbm90IGxpbmsgdGltZSwKIAkgKiB0byBkZWFsIHdpdGggcmVmZXJlbmNlcyBmcm9tIF9fYnVnX3RhYmxlCkBAIC0xMjIsMjMgKzExMywxNiBAQAogI2VuZGlmCiAJfQogCi0JLiA9IEFMSUdOKDE2KTsKIAkuaW5pdC5zZXR1cCA6IEFUKEFERFIoLmluaXQuc2V0dXApIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19zZXR1cF9zdGFydCA9IC47Ci0JCSooLmluaXQuc2V0dXApCi0JCV9fc2V0dXBfZW5kID0gLjsKKwkJSU5JVF9TRVRVUCgxNikKIAl9CiAKIAkuaW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47Ci0JCX0KKwkJSU5JVF9DQUxMUworCX0KIAogCS5jb25faW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmNvbl9pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJCUNPTl9JTklUQ0FMTAogCX0KIAogCVNFQ1VSSVRZX0lOSVQKQEAgLTE2OSwxNCArMTUzLDEwIEBACiAJCV9fc3RvcF9fX2Z3X2Z0cl9maXh1cCA9IC47CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmluaXQucmFtZnMgOiBBVChBRERSKC5pbml0LnJhbWZzKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKKwkJSU5JVF9SQU1fRlMKIAl9Ci0jZW5kaWYKKwogCVBFUkNQVShQQUdFX1NJWkUpCiAKIAkuID0gQUxJR04oOCk7CkBAIC0yNDAsMzYgKzIyMCwyNSBAQAogI2VuZGlmCiAKIAkvKiBUaGUgaW5pdGlhbCB0YXNrIGFuZCBrZXJuZWwgc3RhY2sgKi8KLSNpZmRlZiBDT05GSUdfUFBDMzIKLQkuID0gQUxJR04oODE5Mik7Ci0jZWxzZQotCS4gPSBBTElHTigxNjM4NCk7Ci0jZW5kaWYKIAkuZGF0YS5pbml0X3Rhc2sgOiBBVChBRERSKC5kYXRhLmluaXRfdGFzaykgLSBMT0FEX09GRlNFVCkgewotCQkqKC5kYXRhLmluaXRfdGFzaykKKwkJSU5JVF9UQVNLX0RBVEEoVEhSRUFEX1NJWkUpCiAJfQogCi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmRhdGEucGFnZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5wYWdlX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJKiguZGF0YS5wYWdlX2FsaWduZWQpCisJCVBBR0VfQUxJR05FRF9EQVRBKFBBR0VfU0laRSkKIAl9CiAKLQkuID0gQUxJR04oTDFfQ0FDSEVfQllURVMpOwogCS5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgewotCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQorCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKEwxX0NBQ0hFX0JZVEVTKQogCX0KIAotCS4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7CiAJLmRhdGEucmVhZF9tb3N0bHkgOiBBVChBRERSKC5kYXRhLnJlYWRfbW9zdGx5KSAtIExPQURfT0ZGU0VUKSB7Ci0JCSooLmRhdGEucmVhZF9tb3N0bHkpCisJCVJFQURfTU9TVExZX0RBVEEoTDFfQ0FDSEVfQllURVMpCiAJfQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmRhdGFfbm9zYXZlIDogQVQoQUREUiguZGF0YV9ub3NhdmUpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19ub3NhdmVfYmVnaW4gPSAuOwotCQkqKC5kYXRhLm5vc2F2ZSkKLQkJLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JCV9fbm9zYXZlX2VuZCA9IC47CisJCU5PU0FWRV9EQVRBCiAJfQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CkBAIC0yODAsMTQgKzI0OSw3IEBACiAgKiBBbmQgZmluYWxseSB0aGUgYnNzCiAgKi8KIAotCS5ic3MgOiBBVChBRERSKC5ic3MpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19ic3Nfc3RhcnQgPSAuOwotCQkqKC5zYnNzKSAqKC5zY29tbW9uKQotCQkqKC5keW5ic3MpCi0JCSooLmJzcykKLQkJKihDT01NT04pCi0JCV9fYnNzX3N0b3AgPSAuOwotCX0KKwlCU1NfU0VDVElPTigwLCAwLCAwKQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX2VuZCA9IC4gOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYyBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmMKaW5kZXggNDdlZTYwMy4uMmFhMzcxZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwga3ZtcHBjX2V4aXRfdGltaW5nX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrdm1wcGNfZXhpdF90aW1pbmdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGt2bXBwY19leGl0X3RpbWluZ19mb3BzID0gewogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgPSBrdm1wcGNfZXhpdF90aW1pbmdfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuaCBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmgKaW5kZXggYmIxM2IxZi4uODA2ZWY2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuaAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5oCkBAIC00OCw3ICs0OCwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19hY2NvdW50X2V4aXRfc3RhdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0eXBlKQogewogCS8qIHR5cGUgaGFzIHRvIGJlIGtub3duIGF0IGJ1aWxkIHRpbWUgZm9yIG9wdGltaXphdGlvbiAqLworCisJLyogVGhlIEJVSUxEX0JVR19PTiBiZWxvdyBicmVha3MgaW4gZnVubnkgd2F5cywgY29tbWVudGVkIG91dAorCSAqIGZvciBub3cgLi4uIC1CZW5ICiAJQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHR5cGUpKTsKKwkqLwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgRVhUX0lOVFJfRVhJVFM6CiAJCXZjcHUtPnN0YXQuZXh0X2ludHJfZXhpdHMrKzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwppbmRleCBjMmY5M2RjLi5iZTRmMzRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCkBAIC0yNSw4ICsyNSw4IEBACiAgKiAgICAgYWxzbyBjbGVhciBtbS0+Y3B1X3ZtX21hc2sgYml0cyB3aGVuIHByb2Nlc3NlcyBhcmUgbWlncmF0ZWQKICAqLwogCi0jZGVmaW5lIERFQlVHX01BUF9DT05TSVNURU5DWQotI2RlZmluZSBERUJVR19DTEFNUF9MQVNUX0NPTlRFWFQgICAzMQorLy8jZGVmaW5lIERFQlVHX01BUF9DT05TSVNURU5DWQorLy8jZGVmaW5lIERFQlVHX0NMQU1QX0xBU1RfQ09OVEVYVCAgIDMxCiAvLyNkZWZpbmUgREVCVUdfSEFSREVSCiAKIC8qIFdlIGRvbid0IHVzZSBERUJVRyBiZWNhdXNlIGl0IHRlbmRzIHRvIGJlIGNvbXBpbGVkIGluIGFsd2F5cyBub3dhZGF5cwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKaW5kZXggODNmMTU1MS4uNTMwNDA5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogCisjaW5jbHVkZSAibW11X2RlY2wuaCIKKwogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTE2Niw3ICsxNjgsNyBAQAogICogc3VwcG9ydCBmYWxscyBpbnRvIHRoZSBzYW1lIGNhdGVnb3J5LgogICovCiAKLXN0YXRpYyBwdGVfdCBzZXRfcHRlX2ZpbHRlcihwdGVfdCBwdGUpCitzdGF0aWMgcHRlX3Qgc2V0X3B0ZV9maWx0ZXIocHRlX3QgcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcHRlID0gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hQVEVGTEFHUyk7CiAJaWYgKHB0ZV9sb29rc19ub3JtYWwocHRlKSAmJiAhKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSkgfHwKQEAgLTE3NSw2ICsxNzcsMTcgQEAKIAkJaWYgKCFwZykKIAkJCXJldHVybiBwdGU7CiAJCWlmICghdGVzdF9iaXQoUEdfYXJjaF8xLCAmcGctPmZsYWdzKSkgeworI2lmZGVmIENPTkZJR184eHgKKwkJCS8qIE9uIDh4eCwgY2FjaGUgY29udHJvbCBpbnN0cnVjdGlvbnMgKHBhcnRpY3VsYXJseQorCQkJICogImRjYnN0IiBmcm9tIGZsdXNoX2RjYWNoZV9pY2FjaGUpIGZhdWx0IGFzIHdyaXRlCisJCQkgKiBvcGVyYXRpb24gaWYgdGhlcmUgaXMgYW4gdW5wb3B1bGF0ZWQgVExCIGVudHJ5CisJCQkgKiBmb3IgdGhlIGFkZHJlc3MgaW4gcXVlc3Rpb24uIFRvIHdvcmthcm91bmQgdGhhdCwKKwkJCSAqIHdlIGludmFsaWRhdGUgdGhlIFRMQiBoZXJlLCB0aHVzIGF2b2lkaW5nIGRjYnN0CisJCQkgKiBtaXNiZWhhdmlvdXIuCisJCQkgKi8KKwkJCS8qIDh4eCBkb2Vzbid0IGNhcmUgYWJvdXQgUElELCBzaXplIG9yIGluZCBhcmdzICovCisJCQlfdGxiaWxfdmEoYWRkciwgMCwgMCwgMCk7CisjZW5kaWYgLyogQ09ORklHXzh4eCAqLwogCQkJZmx1c2hfZGNhY2hlX2ljYWNoZV9wYWdlKHBnKTsKIAkJCXNldF9iaXQoUEdfYXJjaF8xLCAmcGctPmZsYWdzKTsKIAkJfQpAQCAtMTk0LDcgKzIwNyw3IEBACiAgKiBhcyB3ZSBkb24ndCBoYXZlIHR3byBiaXRzIHRvIHNwYXJlIGZvciBfUEFHRV9FWEVDIGFuZCBfUEFHRV9IV0VYRUMgc28KICAqIGluc3RlYWQgd2UgImZpbHRlciBvdXQiIHRoZSBleGVjIHBlcm1pc3Npb24gZm9yIG5vbiBjbGVhbiBwYWdlcy4KICAqLwotc3RhdGljIHB0ZV90IHNldF9wdGVfZmlsdGVyKHB0ZV90IHB0ZSkKK3N0YXRpYyBwdGVfdCBzZXRfcHRlX2ZpbHRlcihwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlzdHJ1Y3QgcGFnZSAqcGc7CiAKQEAgLTI3Niw3ICsyODksNyBAQAogCSAqIHRoaXMgY29udGV4dCBtaWdodCBub3QgaGF2ZSBiZWVuIGFjdGl2YXRlZCB5ZXQgd2hlbiB0aGlzCiAJICogaXMgY2FsbGVkLgogCSAqLwotCXB0ZSA9IHNldF9wdGVfZmlsdGVyKHB0ZSk7CisJcHRlID0gc2V0X3B0ZV9maWx0ZXIocHRlLCBhZGRyKTsKIAogCS8qIFBlcmZvcm0gdGhlIHNldHRpbmcgb2YgdGhlIFBURSAqLwogCV9fc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMgYi9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCmluZGV4IGJjNDRkYzQuLjk1Y2UzNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUwpAQCAtNzIsMTkgKzcyLDE3IEBACiAxOgogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUCAqLwogCi0JLyogdm1hbGxvYy9pb3JlbWFwIG1hcHBpbmcgZW5jb2RpbmcgYml0cywgdGhlICJsaSIgaW5zdHJ1Y3Rpb25zIGJlbG93Ci0JICogd2lsbCBiZSBwYXRjaGVkIGJ5IHRoZSBrZXJuZWwgYXQgYm9vdAorCS8qIHZtYWxsb2MgbWFwcGluZyBnZXRzIHRoZSBlbmNvZGluZyBmcm9tIHRoZSBQQUNBIGFzIHRoZSBtYXBwaW5nCisJICogY2FuIGJlIGRlbW90ZWQgZnJvbSA2NEsgLT4gNEsgZHluYW1pY2FsbHkgb24gc29tZSBtYWNoaW5lcwogCSAqLwotQkVHSU5fRlRSX1NFQ1RJT04KLQkvKiBjaGVjayB3aGV0aGVyIHRoaXMgaXMgaW4gdm1hbGxvYyBvciBpb3JlbWFwIHNwYWNlICovCiAJY2xybGRpCXIxMSxyMTAsNDgKIAljbXBsZGkJcjExLChWTUFMTE9DX1NJWkUgPj4gMjgpIC0gMQogCWJndAk1ZgogCWxoeglyMTEsUEFDQVZNQUxMT0NTTExQKHIxMykKIAliCTZmCiA1OgotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkKLV9HTE9CQUwoc2xiX21pc3Nfa2VybmVsX2xvYWRfaW8pCisJLyogSU8gbWFwcGluZyAqLworCV9HTE9CQUwoc2xiX21pc3Nfa2VybmVsX2xvYWRfaW8pCiAJbGkJcjExLDAKIDY6CiBCRUdJTl9GVFJfU0VDVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9sb3dfNjRlLlMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUwppbmRleCBlZjFjY2NmLi5mMjg4Mjc5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9leGNlcHRpb24tNjRlLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwppbmRleCBjMzFlNWI1Li5kNDViZTViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwpAQCAtNTEsNiArNTEsOCBAQAogLyogbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGJvYXJkcyAqLwogc3RhdGljIGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKIAkiaW50ZXJjb250cm9sLGRpZ3N5LW10YyIsCisJIm1hbnJvbGFuZCxtdWNtYzUyIiwKKwkibWFucm9sYW5kLHVjMTAxIiwKIAkicGh5dGVjLHBjbTAzMCIsCiAJInBoeXRlYyxwY20wMzIiLAogCSJwcm9tZXNzLG1vdGlvbnBybyIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYwppbmRleCA1MWZjYWU0Li5mOWFlZTE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMKQEAgLTEzMiwxMiArMTMyLDI1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJYnVzLT5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpICogUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVzLT5pcnEgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2J1czsKKwl9CiAKIAlidXMtPm5hbWUgPSAiZXA4MjQ4ZS1tZGlvLWJpdGJhbmciOwogCWJ1cy0+cGFyZW50ID0gJm9mZGV2LT5kZXY7CiAJc25wcmludGYoYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCByZXMuc3RhcnQpOwogCi0JcmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi0+bm9kZSk7CisJcmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG9mZGV2LT5ub2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCXJldHVybiAwOworZXJyX2ZyZWVfaXJxOgorCWtmcmVlKGJ1cy0+aXJxKTsKK2Vycl9mcmVlX2J1czoKKwlmcmVlX21kaW9fYml0YmFuZyhidXMpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZXA4MjQ4ZV9tZGlvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKaW5kZXggYWNhNTc0MS4uYTg2YzM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJheG9uX21zaTogY291bGRuJ3QgcGFyc2UgZGNyIHByb3BlcnRpZXMgb24gJXNcbiIsCiAJCQlkbi0+ZnVsbF9uYW1lKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfbXNpYzsKIAl9CiAKIAltc2ljLT5kY3JfaG9zdCA9IGRjcl9tYXAoZG4sIGRjcl9iYXNlLCBkY3JfbGVuKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pb21tdS5jCmluZGV4IDkzYjBlZmQuLjM5ZDM2MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW9tbXUuYwpAQCAtNzcsNyArNzcsNyBAQAogc3RhdGljIHZvaWQgY2VsbGViX2RtYV9kZXZfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2KQogewogCWRldi0+YXJjaGRhdGEuZG1hX29wcyA9IGdldF9wY2lfZG1hX29wcygpOwotCWRldi0+YXJjaGRhdGEuZG1hX2RhdGEgPSAodm9pZCAqKWNlbGxlYl9kbWFfZGlyZWN0X29mZnNldDsKKwlzZXRfZG1hX29mZnNldChkZXYsIGNlbGxlYl9kbWFfZGlyZWN0X29mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNlbGxlYl9wY2lfZG1hX2Rldl9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKaW5kZXggNDE2ZGIxNy4uY2E1YmZkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKQEAgLTY1NywxNSArNjU3LDEzIEBACiAKIHN0YXRpYyB2b2lkIGNlbGxfZG1hX2Rldl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRldl9hcmNoZGF0YSAqYXJjaGRhdGEgPSAmZGV2LT5hcmNoZGF0YTsKLQogCS8qIE9yZGVyIGlzIGltcG9ydGFudCBoZXJlLCB0aGVzZSBhcmUgbm90IG11dHVhbGx5IGV4Y2x1c2l2ZSAqLwogCWlmIChnZXRfZG1hX29wcyhkZXYpID09ICZkbWFfaW9tbXVfZml4ZWRfb3BzKQogCQljZWxsX2RtYV9kZXZfc2V0dXBfZml4ZWQoZGV2KTsKIAllbHNlIGlmIChnZXRfcGNpX2RtYV9vcHMoKSA9PSAmZG1hX2lvbW11X29wcykKLQkJYXJjaGRhdGEtPmRtYV9kYXRhID0gY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KTsKKwkJc2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2LCBjZWxsX2dldF9pb21tdV90YWJsZShkZXYpKTsKIAllbHNlIGlmIChnZXRfcGNpX2RtYV9vcHMoKSA9PSAmZG1hX2RpcmVjdF9vcHMpCi0JCWFyY2hkYXRhLT5kbWFfZGF0YSA9ICh2b2lkICopY2VsbF9kbWFfZGlyZWN0X29mZnNldDsKKwkJc2V0X2RtYV9vZmZzZXQoZGV2LCBjZWxsX2RtYV9kaXJlY3Rfb2Zmc2V0KTsKIAllbHNlCiAJCUJVRygpOwogfQpAQCAtOTczLDExICs5NzEsMTAgQEAKIAogc3RhdGljIHZvaWQgY2VsbF9kbWFfZGV2X3NldHVwX2ZpeGVkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGV2X2FyY2hkYXRhICphcmNoZGF0YSA9ICZkZXYtPmFyY2hkYXRhOwogCXU2NCBhZGRyOwogCiAJYWRkciA9IGNlbGxfaW9tbXVfZ2V0X2ZpeGVkX2FkZHJlc3MoZGV2KSArIGRtYV9pb21tdV9maXhlZF9iYXNlOwotCWFyY2hkYXRhLT5kbWFfZGF0YSA9ICh2b2lkICopYWRkcjsKKwlzZXRfZG1hX29mZnNldChkZXYsIGFkZHIpOwogCiAJZGV2X2RiZyhkZXYsICJpb21tdTogZml4ZWQgYWRkciA9ICVsbHhcbiIsIGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKaW5kZXggOGYwNzliOC4uODg0ZThiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAlfX3NpbXBsZV9hdHRyX2NoZWNrX2Zvcm1hdChfX2ZtdCwgMHVsbCk7CQkJXAogCXJldHVybiBzcHVmc19hdHRyX29wZW4oaW5vZGUsIGZpbGUsIF9fZ2V0LCBfX3NldCwgX19mbXQpOwlcCiB9CQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19mb3BzID0gewkJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBfX2ZvcHMgPSB7CQkJCVwKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCQkJCQkJXAogCS5vcGVuCSA9IF9fZm9wcyAjIyBfb3BlbiwJCQkJCVwKIAkucmVsZWFzZSA9IHNwdWZzX2F0dHJfcmVsZWFzZSwJCQkJCVwKQEAgLTMwOSw3ICszMDksNyBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbWVtX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX21lbV9tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX21lbV9tbWFwX2ZhdWx0LAogCS5hY2Nlc3MgPSBzcHVmc19tZW1fbW1hcF9hY2Nlc3MsCiB9OwpAQCAtNDM2LDcgKzQzNiw3IEBACiAJcmV0dXJuIHNwdWZzX3BzX2ZhdWx0KHZtYSwgdm1mLCAweDQwMDAsIFNQVUZTX0NOVExfTUFQX1NJWkUpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX2NudGxfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfY250bF9tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX2NudGxfbW1hcF9mYXVsdCwKIH07CiAKQEAgLTExNDMsNyArMTE0Myw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19zaWduYWwxX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX3NpZ25hbDFfbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19zaWduYWwxX21tYXBfZmF1bHQsCiB9OwogCkBAIC0xMjc5LDcgKzEyNzksNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfc2lnbmFsMl9tbWFwX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19zaWduYWwyX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfc2lnbmFsMl9tbWFwX2ZhdWx0LAogfTsKIApAQCAtMTM5Nyw3ICsxMzk3LDcgQEAKIAlyZXR1cm4gc3B1ZnNfcHNfZmF1bHQodm1hLCB2bWYsIDB4MDAwMCwgU1BVRlNfTVNTX01BUF9TSVpFKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19tc3NfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbXNzX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfbXNzX21tYXBfZmF1bHQsCiB9OwogCkBAIC0xNDU4LDcgKzE0NTgsNyBAQAogCXJldHVybiBzcHVmc19wc19mYXVsdCh2bWEsIHZtZiwgMHgwMDAwLCBTUFVGU19QU19NQVBfU0laRSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfcHNtYXBfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfcHNtYXBfbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19wc21hcF9tbWFwX2ZhdWx0LAogfTsKIApAQCAtMTUxNyw3ICsxNTE3LDcgQEAKIAlyZXR1cm4gc3B1ZnNfcHNfZmF1bHQodm1hLCB2bWYsIDB4MzAwMCwgU1BVRlNfTUZDX01BUF9TSVpFKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19tZmNfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbWZjX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfbWZjX21tYXBfZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUKaW5kZXggY2M3MTYxZi4uY2UwMTQ5MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZQpAQCAtMSwxOCArMSw5IEBACiBFWFRSQV9DRkxBR1MJKz0gLW1uby1taW5pbWFsLXRvYwogCi1leHRyYS15ICs9IGR0Lm8KLQogb2JqLXkgKz0gZXhjZXB0aW9uLm8KLW9iai15ICs9IGh2bG9nLm8gaHZscGNvbmZpZy5vIGxwYXJkYXRhLm8gc2V0dXAubyBkdF9tb2QubyBtZi5vIGxwZXZlbnRzLm8gXAorb2JqLXkgKz0gaHZsb2cubyBodmxwY29uZmlnLm8gbHBhcmRhdGEubyBzZXR1cC5vIGR0Lm8gbWYubyBscGV2ZW50cy5vIFwKIAlodmNhbGwubyBwcm9jLm8gaHRhYi5vIGlvbW11Lm8gbWlzYy5vIGlycS5vCiBvYmotJChDT05GSUdfUENJKSArPSBwY2kubwogb2JqLSQoQ09ORklHX1NNUCkgKz0gc21wLm8KIG9iai0kKENPTkZJR19WSU9QQVRIKSArPSB2aW9wYXRoLm8gdmlvLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKSArPSBrc3ltcy5vCi0KLXF1aWV0X2NtZF9kdF9zdHJpbmdzID0gRFRfU1RSICAkQAotICAgICAgY21kX2R0X3N0cmluZ3MgPSAkKE9CSkNPUFkpIC0tcmVuYW1lLXNlY3Rpb24gLnJvZGF0YS5zdHIxLjg9LmR0X3N0cmluZ3MgXAotCQkJCSQ8ICRACi0KLSQob2JqKS9kdF9tb2QubzoJJChvYmopL2R0Lm8KLQkkKGNhbGwgaWZfY2hhbmdlZCxkdF9zdHJpbmdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYwppbmRleCBjNWE4N2E3Li43ZjQ1YTUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYwpAQCAtNTEsMTEgKzUxLDE2IEBACiAKIC8qCiAgKiBUaGVzZSBhcmUgY3JlYXRlZCBieSB0aGUgbGlua2VyIHNjcmlwdCBhdCB0aGUgc3RhcnQgYW5kIGVuZAotICogb2YgdGhlIHNlY3Rpb24gY29udGFpbmluZyBhbGwgdGhlIHN0cmluZ3MgZnJvbSB0aGlzIGZpbGUuCisgKiBvZiB0aGUgc2VjdGlvbiBjb250YWluaW5nIGFsbCB0aGUgc3RyaW5ncyBtYXJrZWQgd2l0aCB0aGUgRFMgbWFjcm8uCiAgKi8KIGV4dGVybiBjaGFyIF9fZHRfc3RyaW5nc19zdGFydFtdOwogZXh0ZXJuIGNoYXIgX19kdF9zdHJpbmdzX2VuZFtdOwogCisjZGVmaW5lIERTKHMpCSh7CVwKKwlzdGF0aWMgY29uc3QgY2hhciBfX3NbXSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZHRfc3RyaW5ncyIpKSkgPSBzOyBcCisJX19zOwkJXAorfSkKKwogc3RydWN0IGlzZXJpZXNfZmxhdF9kdCB7CiAJc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyIGhlYWRlcjsKIAl1NjQgcmVzZXJ2ZV9tYXBbMl07CkBAIC02NCw5ICs2OSw4IEBACiBzdGF0aWMgdm9pZCAqIF9faW5pdGRhdGEgZHRfZGF0YTsKIAogLyoKLSAqIFB1dHRpbmcgdGhlc2Ugc3RyaW5ncyBoZXJlIGtlZXBzIHRoZW0gb3V0IG9mIHRoZSBzZWN0aW9uCi0gKiB0aGF0IHdlIHJlbmFtZSB0byAuZHRfc3RyaW5ncyB1c2luZyBvYmpjb3B5IGFuZCBjYXB0dXJlCi0gKiBmb3IgdGhlIHN0cmluZ3MgYmxvYiBvZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlLgorICogUHV0dGluZyB0aGVzZSBzdHJpbmdzIGhlcmUga2VlcHMgdGhlbSBvdXQgb2YgdGhlIC5kdF9zdHJpbmdzIHNlY3Rpb24KKyAqIHRoYXQgd2UgY2FwdHVyZSBmb3IgdGhlIHN0cmluZ3MgYmxvYiBvZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlLgogICovCiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX2NwdVtdID0gImNwdSI7CiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX21lbW9yeVtdID0gIm1lbW9yeSI7CkBAIC0xNzMsNyArMTc3LDcgQEAKIAogI2RlZmluZSBkdF9lbmRfbm9kZShkdCkgZHRfcHVzaF91MzIoZHQsIE9GX0RUX0VORF9OT0RFKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2R0X3Byb3Aoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CkBAIC0xOTEsNDQgKzE5NSwzMiBAQAogCS8qIFRoZSBhY3R1YWwgZGF0YS4gKi8KIAlkdF9wdXNoX2J5dGVzKGR0LCBkYXRhLCBsZW4pOwogfQorI2RlZmluZSBkdF9wcm9wKGR0LCBuYW1lLCBkYXRhLCBsZW4pCV9fZHRfcHJvcCgoZHQpLCBEUyhuYW1lKSwgKGRhdGEpLCAobGVuKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3Bfc3RyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAotCQljb25zdCBjaGFyICpkYXRhKQotewotCWR0X3Byb3AoZHQsIG5hbWUsIGRhdGEsIHN0cmxlbihkYXRhKSArIDEpOyAvKiArIDEgZm9yIE5VTEwgKi8KLX0KKyNkZWZpbmUgZHRfcHJvcF9zdHIoZHQsIG5hbWUsIGRhdGEpCVwKKwlkdF9wcm9wKChkdCksIG5hbWUsIChkYXRhKSwgc3RybGVuKChkYXRhKSkgKyAxKTsgLyogKyAxIGZvciBOVUxMICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wX3UzMihzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2R0X3Byb3BfdTMyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAogCQl1MzIgZGF0YSkKIHsKLQlkdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHUzMikpOworCV9fZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1MzIpKTsKIH0KKyNkZWZpbmUgZHRfcHJvcF91MzIoZHQsIG5hbWUsIGRhdGEpCV9fZHRfcHJvcF91MzIoKGR0KSwgRFMobmFtZSksIChkYXRhKSkKIAotc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkIGR0X3Byb3BfdTY0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAotCQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAotCQl1NjQgZGF0YSkKK3N0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZCBfX2R0X3Byb3BfdTY0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAorCQljb25zdCBjaGFyICpuYW1lLCB1NjQgZGF0YSkKIHsKLQlkdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHU2NCkpOworCV9fZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1NjQpKTsKIH0KKyNkZWZpbmUgZHRfcHJvcF91NjQoZHQsIG5hbWUsIGRhdGEpCV9fZHRfcHJvcF91NjQoKGR0KSwgRFMobmFtZSksIChkYXRhKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTY0X2xpc3Qoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHU2NCAqZGF0YSwgaW50IG4pCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc2l6ZW9mKHU2NCkgKiBuKTsKLX0KKyNkZWZpbmUgZHRfcHJvcF91NjRfbGlzdChkdCwgbmFtZSwgZGF0YSwgbikJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzaXplb2YodTY0KSAqIChuKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTMyX2xpc3Qoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHUzMiAqZGF0YSwgaW50IG4pCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc2l6ZW9mKHUzMikgKiBuKTsKLX0KKyNkZWZpbmUgZHRfcHJvcF91MzJfbGlzdChkdCwgbmFtZSwgZGF0YSwgbikJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzaXplb2YodTMyKSAqIChuKSkKIAotI2lmZGVmIG5vdHlldAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfZW1wdHkoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgTlVMTCwgMCk7Ci19Ci0jZW5kaWYKKyNkZWZpbmUgZHRfcHJvcF9lbXB0eShkdCwgbmFtZSkJCWR0X3Byb3AoKGR0KSwgbmFtZSwgTlVMTCwgMCkKIAogc3RhdGljIHZvaWQgX19pbml0IGR0X2NwdXMoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCmluZGV4IDZjMWUxMDEuLjlkNTNjYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJcGRuLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsLCAtMSk7CiAJZWxzZQogCQlrZnJlZSh0YmwpOwotCXBkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IHBkbi0+aW9tbXVfdGFibGU7CisJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJnBkZXYtPmRldiwgcGRuLT5pb21tdV90YWJsZSk7CiB9CiAjZWxzZQogI2RlZmluZSBwY2lfZG1hX2Rldl9zZXR1cF9pc2VyaWVzCU5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jCmluZGV4IGEwZmYwM2EuLjdiMWQ2MDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaW9tbXUuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJfQogI2VuZGlmCiAKLQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9ICZpb21tdV90YWJsZV9pb2JtYXA7CisJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJmRldi0+ZGV2LCAmaW9tbXVfdGFibGVfaW9ibWFwKTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2RtYV9idXNfc2V0dXBfbnVsbChzdHJ1Y3QgcGNpX2J1cyAqYikgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCmluZGV4IDIxMjI2YjcuLjQxNGNhOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCkBAIC01NDAsOCArNTQwLDExIEBACiAJLyogTWFrZSBzdXJlIElSUSBpcyBkaXNhYmxlZCAqLwogCWt3X3dyaXRlX3JlZyhyZWdfaWVyLCAwKTsKIAotCS8qIFJlcXVlc3QgY2hpcCBpbnRlcnJ1cHQgKi8KLQlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBrd19pMmNfaXJxLCAwLCAia2V5d2VzdCBpMmMiLCBob3N0KSkKKwkvKiBSZXF1ZXN0IGNoaXAgaW50ZXJydXB0LiBXZSBzZXQgSVJRRl9USU1FUiBiZWNhdXNlIHdlIGRvbid0CisJICogd2FudCB0aGF0IGludGVycnVwdCBkaXNhYmxlZCBiZXR3ZWVuIHRoZSAyIHBhc3NlcyBvZiBkcml2ZXIKKwkgKiBzdXNwZW5kIG9yIHdlJ2xsIGhhdmUgaXNzdWVzIHJ1bm5pbmcgdGhlIHBmdW5jcworCSAqLworCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIElSUUZfVElNRVIsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQogCQlob3N0LT5pcnEgPSBOT19JUlE7CiAKIAlwcmludGsoS0VSTl9JTkZPICJLZXlXZXN0IGkyYyBAMHglMDh4IGlycSAlZCAlc1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwppbmRleCBhYjY5OTI1Li45MzdhNTQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2R0bC5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAlyZXR1cm4gbl9yZWFkICogc2l6ZW9mKHN0cnVjdCBkdGxfZW50cnkpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdGxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR0bF9mb3BzID0gewogCS5vcGVuCQk9IGR0bF9maWxlX29wZW4sCiAJLnJlbGVhc2UJPSBkdGxfZmlsZV9yZWxlYXNlLAogCS5yZWFkCQk9IGR0bF9maWxlX3JlYWQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCmluZGV4IDVhNzA3ZGEuLjBhMTRkOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCkBAIC01MSwxMSArNTEsMTAgQEAKIAl7RldfRkVBVFVSRV9WSU8sCQkiaGNhbGwtdmlvIn0sCiAJe0ZXX0ZFQVRVUkVfUkRNQSwJCSJoY2FsbC1yZG1hIn0sCiAJe0ZXX0ZFQVRVUkVfTExBTiwJCSJoY2FsbC1sTEFOIn0sCi0Je0ZXX0ZFQVRVUkVfQlVMSywJCSJoY2FsbC1idWxrIn0sCisJe0ZXX0ZFQVRVUkVfQlVMS19SRU1PVkUsCSJoY2FsbC1idWxrIn0sCiAJe0ZXX0ZFQVRVUkVfWERBQlIsCQkiaGNhbGwteGRhYnIifSwKIAl7RldfRkVBVFVSRV9NVUxUSVRDRSwJCSJoY2FsbC1tdWx0aS10Y2UifSwKIAl7RldfRkVBVFVSRV9TUExQQVIsCQkiaGNhbGwtc3BscGFyIn0sCi0Je0ZXX0ZFQVRVUkVfQlVMS19SRU1PVkUsCSJoY2FsbC1idWxrIn0sCiB9OwogCiAvKiBCdWlsZCB1cCB0aGUgZmlybXdhcmUgZmVhdHVyZXMgYml0bWFzayB1c2luZyB0aGUgY29udGVudHMgb2YKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggNjYxYzhlMC4uMWEwMDAwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTQ4Miw3ICs0ODIsNyBAQAogCQkJCSAgIHBoYi0+bm9kZSk7CiAJCWlvbW11X3RhYmxlX3NldHBhcm1zKHBoYiwgZG4sIHRibCk7CiAJCVBDSV9ETihkbiktPmlvbW11X3RhYmxlID0gaW9tbXVfaW5pdF90YWJsZSh0YmwsIHBoYi0+bm9kZSk7Ci0JCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gUENJX0ROKGRuKS0+aW9tbXVfdGFibGU7CisJCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgUENJX0ROKGRuKS0+aW9tbXVfdGFibGUpOwogCQlyZXR1cm47CiAJfQogCkBAIC00OTQsNyArNDk0LDcgQEAKIAkJZG4gPSBkbi0+cGFyZW50OwogCiAJaWYgKGRuICYmIFBDSV9ETihkbikpCi0JCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gUENJX0ROKGRuKS0+aW9tbXVfdGFibGU7CisJCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgUENJX0ROKGRuKS0+aW9tbXVfdGFibGUpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW9tbXU6IERldmljZSAlcyBoYXMgbm8gaW9tbXUgdGFibGVcbiIsCiAJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKQEAgLTUzOCw3ICs1MzgsNyBAQAogCSAqLwogCWlmIChkbWFfd2luZG93ID09IE5VTEwgfHwgcGRuLT5wYXJlbnQgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygiICBubyBkbWEgd2luZG93IGZvciBkZXZpY2UsIGxpbmtpbmcgdG8gcGFyZW50XG4iKTsKLQkJZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSBQQ0lfRE4ocGRuKS0+aW9tbXVfdGFibGU7CisJCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgUENJX0ROKHBkbiktPmlvbW11X3RhYmxlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTU0LDcgKzU1NCw3IEBACiAJCXByX2RlYnVnKCIgIGZvdW5kIERNQSB3aW5kb3csIHRhYmxlOiAlcFxuIiwgcGNpLT5pb21tdV90YWJsZSk7CiAJfQogCi0JZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSBwY2ktPmlvbW11X3RhYmxlOworCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgcGNpLT5pb21tdV90YWJsZSk7CiB9CiAjZWxzZSAgLyogQ09ORklHX1BDSSAqLwogI2RlZmluZSBwY2lfZG1hX2J1c19zZXR1cF9wU2VyaWVzCU5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYwppbmRleCBiZjJlMWFjLi4xMTY0YzM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCkBAIC00MzIsOCArNDMyLDYgQEAKIAkJLyogUmVhZCBjb25maWcgc3BhY2UgYmFjayBzbyB3ZSBjYW4gcmVzdG9yZSBhZnRlciByZXNldCAqLwogCQlyZWFkX21zaV9tc2codmlycSwgJm1zZyk7CiAJCWVudHJ5LT5tc2cgPSBtc2c7Ci0KLQkJdW5tYXNrX21zaV9pcnEodmlycSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwppbmRleCA0MTlmOGE2Li5iOWJmMGVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFkaXgtdHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KQEAgLTIxOSw2ICsyMjAsMTQgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX3N0YXJ0dXAodW5zaWduZWQgaW50IHZpcnEpCiB7CisJLyoKKwkgKiBUaGUgZ2VuZXJpYyBNU0kgY29kZSByZXR1cm5zIHdpdGggdGhlIGludGVycnVwdCBkaXNhYmxlZCBvbiB0aGUKKwkgKiBjYXJkLCB1c2luZyB0aGUgTVNJIG1hc2sgYml0cy4gRmlybXdhcmUgZG9lc24ndCBhcHBlYXIgdG8gdW5tYXNrCisJICogYXQgdGhhdCBsZXZlbCwgc28gd2UgZG8gaXQgaGVyZSBieSBoYW5kLgorCSAqLworCWlmIChpcnFfdG9fZGVzYyh2aXJxKS0+bXNpX2Rlc2MpCisJCXVubWFza19tc2lfaXJxKHZpcnEpOworCiAJLyogdW5tYXNrIGl0ICovCiAJeGljc191bm1hc2tfaXJxKHZpcnEpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3JlbG9jc19jaGVjay5wbCBiL2FyY2gvcG93ZXJwYy9yZWxvY3NfY2hlY2sucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDI1NzEwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9yZWxvY3NfY2hlY2sucGwKQEAgLTAsMCArMSw1NiBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgQ29weXJpZ2h0IMKpIDIwMDkgSUJNIENvcnBvcmF0aW9uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyMgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHNjcmlwdCBjaGVja3MgdGhlIHJlbGNvYXRpb25zIG9mIGEgdm1saW51eCBmb3IgInN1c3BpY2lvdXMiCisjIHJlbG9jYXRpb25zLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCitpZiAoJCNBUkdWICE9IDEpIHsKKwlkaWUgIiQwIFtwYXRoIHRvIG9iamR1bXBdIFtwYXRoIHRvIHZtbGludXhdXG4iOworfQorCisjIEhhdmUgS2J1aWxkIHN1cHBseSB0aGUgcGF0aCB0byBvYmpkdW1wIHNvIHdlIGhhbmRsZSBjcm9zcyBjb21waWxhdGlvbi4KK215ICRvYmpkdW1wID0gc2hpZnQ7CitteSAkdm1saW51eCA9IHNoaWZ0OworbXkgJGJhZF9yZWxvY3NfY291bnQgPSAwOworbXkgJGJhZF9yZWxvY3MgPSAiIjsKK215ICRvbGRfYmludXRpbHMgPSAwOworCitvcGVuKEZELCAiJG9iamR1bXAgLVIgJHZtbGludXh8Iikgb3IgZGllOword2hpbGUgKDxGRD4pIHsKKwlzdHVkeSAkXzsKKworCSMgT25seSBsb29rIGF0IHJlbGNvYXRpb24gbGluZXMuCisJbmV4dCBpZiAoIS9ccytSXy8pOworCisJIyBUaGVzZSByZWxvY2F0aW9ucyBhcmUgb2theQorCW5leHQgaWYgKC9SX1BQQzY0X1JFTEFUSVZFLyBvciAvUl9QUEM2NF9OT05FLyBvcgorCSAgICAgICAgIC9SX1BQQzY0X0FERFI2NFxzK21hY2hfLyk7CisKKwkjIElmIHdlIHNlZSB0aGlzIHR5cGUgb2YgcmVsY29hdGlvbiBpdCdzIGFuIGlkaWNhdGlvbiB0aGF0CisJIyB3ZSAvbWF5LyBiZSB1c2luZyBhbiBvbGQgdmVyc2lvbiBvZiBiaW51dGlscy4KKwlpZiAoL1JfUFBDNjRfVUFERFI2NC8pIHsKKwkJJG9sZF9iaW51dGlscysrOworCX0KKworCSRiYWRfcmVsb2NzX2NvdW50Kys7CisJJGJhZF9yZWxvY3MgLj0gJF87Cit9CisKK2lmICgkYmFkX3JlbG9jc19jb3VudCkgeworCXByaW50ICJXQVJOSU5HOiAkYmFkX3JlbG9jc19jb3VudCBiYWQgcmVsb2NhdGlvbnNcbiI7CisJcHJpbnQgJGJhZF9yZWxvY3M7Cit9CisKK2lmICgkb2xkX2JpbnV0aWxzKSB7CisJcHJpbnQgIldBUk5JTkc6IFlvdSBuZWVkIGF0IGJpbnV0aWxzID49IDIuMTkgdG8gYnVpbGQgYSAiLgorCSAgICAgICJDT05GSUdfUkVMQ09BVEFCTEUga2VybmVsXG4iOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYwppbmRleCA4OTYzOWVjLi5hZTNjNGRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJLyogV2Ugb25seSBoYXZlIG9uZSBpb21tdSB0YWJsZSBvbiB0aGUgbWFjIGZvciBub3csIHdoaWNoIG1ha2VzCiAJICogdGhpbmdzIHNpbXBsZS4gU2V0dXAgYWxsIFBDSSBkZXZpY2VzIHRvIHBvaW50IHRvIHRoaXMgdGFibGUKIAkgKi8KLQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9ICZpb21tdV90YWJsZV9kYXJ0OworCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgJmlvbW11X3RhYmxlX2RhcnQpOwogfQogCiBzdGF0aWMgdm9pZCBwY2lfZG1hX2J1c19zZXR1cF9kYXJ0KHN0cnVjdCBwY2lfYnVzICpidXMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKaW5kZXggMGUwOWE0NS4uYmRiZTk2YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwpAQCAtMzM1LDYgKzMzNSwxNiBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgaW50IHVucmVjb3ZlcmFibGVfZXhjcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZmRlZiBDT05GSUdfNHh4CisJLyogV2UgaGF2ZSBubyBNU1JfUkkgYml0IG9uIDR4eCwgc28gd2Ugc2ltcGx5IHJldHVybiBmYWxzZSAqLworCXJldHVybiAwOworI2Vsc2UKKwlyZXR1cm4gKChyZWdzLT5tc3IgJiBNU1JfUkkpID09IDApOworI2VuZGlmCit9CisKIHN0YXRpYyBpbnQgeG1vbl9jb3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZnJvbWlwaSkKIHsKIAlpbnQgY21kID0gMDsKQEAgLTM4OCw3ICszOTgsNyBAQAogCWJwID0gTlVMTDsKIAlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl9TRikpID09IChNU1JfSVJ8TVNSX1NGKSkKIAkJYnAgPSBhdF9icmVha3BvaW50KHJlZ3MtPm5pcCk7Ci0JaWYgKGJwIHx8IChyZWdzLT5tc3IgJiBNU1JfUkkpID09IDApCisJaWYgKGJwIHx8IHVucmVjb3ZlcmFibGVfZXhjcChyZWdzKSkKIAkJZnJvbWlwaSA9IDA7CiAKIAlpZiAoIWZyb21pcGkpIHsKQEAgLTM5OSw3ICs0MDksNyBAQAogCQkJICAgICAgIGNwdSwgQlBfTlVNKGJwKSk7CiAJCQl4bW9uX3ByaW50X3N5bWJvbChyZWdzLT5uaXAsICIgIiwgIilcbiIpOwogCQl9Ci0JCWlmICgocmVncy0+bXNyICYgTVNSX1JJKSA9PSAwKQorCQlpZiAodW5yZWNvdmVyYWJsZV9leGNwKHJlZ3MpKQogCQkJcHJpbnRmKCJXQVJOSU5HOiBleGNlcHRpb24gaXMgbm90IHJlY292ZXJhYmxlLCAiCiAJCQkgICAgICAgImNhbid0IGNvbnRpbnVlXG4iKTsKIAkJcmVsZWFzZV9vdXRwdXRfbG9jaygpOwpAQCAtNDkwLDcgKzUwMCw3IEBACiAJCQlwcmludGYoIlN0b3BwZWQgYXQgYnJlYWtwb2ludCAleCAoIiwgQlBfTlVNKGJwKSk7CiAJCQl4bW9uX3ByaW50X3N5bWJvbChyZWdzLT5uaXAsICIgIiwgIilcbiIpOwogCQl9Ci0JCWlmICgocmVncy0+bXNyICYgTVNSX1JJKSA9PSAwKQorCQlpZiAodW5yZWNvdmVyYWJsZV9leGNwKHJlZ3MpKQogCQkJcHJpbnRmKCJXQVJOSU5HOiBleGNlcHRpb24gaXMgbm90IHJlY292ZXJhYmxlLCAiCiAJCQkgICAgICAgImNhbid0IGNvbnRpbnVlXG4iKTsKIAkJcmVtb3ZlX2JwdHMoKTsKQEAgLTUwNyw2ICs1MTcsMTUgQEAKIAlpbl94bW9uID0gMDsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0JPT0tFCisJaWYgKHJlZ3MtPm1zciAmIE1TUl9ERSkgeworCQlicCA9IGF0X2JyZWFrcG9pbnQocmVncy0+bmlwKTsKKwkJaWYgKGJwICE9IE5VTEwpIHsKKwkJCXJlZ3MtPm5pcCA9ICh1bnNpZ25lZCBsb25nKSAmYnAtPmluc3RyWzBdOworCQkJYXRvbWljX2luYygmYnAtPnJlZl9jb3VudCk7CisJCX0KKwl9CisjZWxzZQogCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSX1NGKSkgPT0gKE1TUl9JUnxNU1JfU0YpKSB7CiAJCWJwID0gYXRfYnJlYWtwb2ludChyZWdzLT5uaXApOwogCQlpZiAoYnAgIT0gTlVMTCkgewpAQCAtNTIwLDcgKzUzOSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0KKyNlbmRpZgogCWluc2VydF9jcHVfYnB0cygpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtODg0LDYgKzkwMywxNCBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19CT09LRQorc3RhdGljIGludCBkb19zdGVwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJlZ3MtPm1zciB8PSBNU1JfREU7CisJbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgfCBEQkNSMF9JQyB8IERCQ1IwX0lETSk7CisJcmV0dXJuIDE7Cit9CisjZWxzZQogLyoKICAqIFN0ZXAgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCiAgKiBTb21lIGluc3RydWN0aW9ucyB3ZSBlbXVsYXRlLCBvdGhlcnMgd2UgZXhlY3V0ZSB3aXRoIE1TUl9TRSBzZXQuCkBAIC05MTQsNiArOTQxLDcgQEAKIAlyZWdzLT5tc3IgfD0gTVNSX1NFOwogCXJldHVybiAxOwogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGJvb3RjbWRzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwppbmRleCA3MDRkZDM5Li43N2RmNzI2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKQEAgLTQzOCw3ICs0MzgsNyBAQAogCQl9CiAJCWlmIChkaWFnMjA0KCh1bnNpZ25lZCBsb25nKVNVQkNfU1RJQjYgfAogCQkJICAgICh1bnNpZ25lZCBsb25nKUlORk9fRVhULCBwYWdlcywgYnVmKSA+PSAwKSB7Ci0JCQlkaWFnMjA0X3N0b3JlX3NjID0gU1VCQ19TVElCNzsKKwkJCWRpYWcyMDRfc3RvcmVfc2MgPSBTVUJDX1NUSUI2OwogCQkJZGlhZzIwNF9pbmZvX3R5cGUgPSBJTkZPX0VYVDsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAppbmRleCAyNGIxMjQ0Li5mMjM5NjFhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKQEAgLTc4LDcgKzc4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBjcHV0aW1lX3RvX21zZWNzKGNvbnN0IGNwdXRpbWVfdCBjcHV0aW1lKQogewotCXJldHVybiBfX2RpdihjcHV0aW1lLCA0MDk2MDAwKTsKKwlyZXR1cm4gY3B1dGltZV9kaXYoY3B1dGltZSwgNDA5NjAwMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZV90CkBAIC0xNjAsNyArMTYwLDcgQEAKIHN0YXRpYyBpbmxpbmUgY2xvY2tfdAogY3B1dGltZV90b19jbG9ja190KGNwdXRpbWVfdCBjcHV0aW1lKQogewotCXJldHVybiBfX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CisJcmV0dXJuIGNwdXRpbWVfZGl2KGNwdXRpbWUsIDQwOTYwMDAwMDBVTEwgLyBVU0VSX0haKTsKIH0KIAogc3RhdGljIGlubGluZSBjcHV0aW1lX3QKQEAgLTE3NSw3ICsxNzUsNyBAQAogc3RhdGljIGlubGluZSBjbG9ja190CiBjcHV0aW1lNjRfdG9fY2xvY2tfdChjcHV0aW1lNjRfdCBjcHV0aW1lKQogewotICAgICAgIHJldHVybiBfX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CisgICAgICAgcmV0dXJuIGNwdXRpbWVfZGl2KGNwdXRpbWUsIDQwOTYwMDAwMDBVTEwgLyBVU0VSX0haKTsKIH0KIAogc3RydWN0IHMzOTBfaWRsZV9kYXRhIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RlbGF5LmgKaW5kZXggYTM1NmM5NS4uOGEwOTZiOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RlbGF5LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RlbGF5LmgKQEAgLTE0LDEwICsxNCwxMSBAQAogI2lmbmRlZiBfUzM5MF9ERUxBWV9ICiAjZGVmaW5lIF9TMzkwX0RFTEFZX0gKIAotZXh0ZXJuIHZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2Vjcyk7Ci1leHRlcm4gdm9pZCB1ZGVsYXlfc2ltcGxlKHVuc2lnbmVkIGxvbmcgdXNlY3MpOworZXh0ZXJuIHZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIHVkZWxheV9zaW1wbGUodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKTsKIGV4dGVybiB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcyk7CiAKLSNkZWZpbmUgdWRlbGF5KG4pIF9fdWRlbGF5KG4pCisjZGVmaW5lIHVkZWxheShuKSBfX3VkZWxheSgodW5zaWduZWQgbG9uZyBsb25nKSAobikpCisjZGVmaW5lIG1kZWxheShuKSBfX3VkZWxheSgodW5zaWduZWQgbG9uZyBsb25nKSAobikgKiAxMDAwKQogCiAjZW5kaWYgLyogZGVmaW5lZChfUzM5MF9ERUxBWV9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDc0ZDBiYmIuLmU4ODU0NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTkyLDYgKzkyLDE4IEBACiAvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICAqLwogI2RlZmluZSBSXzM5MF9OVU0JNjEKIAorLyogQml0cyBwcmVzZW50IGluIEFUX0hXQ0FQLiAqLworI2RlZmluZSBIV0NBUF9TMzkwX0VTQU4zCTEKKyNkZWZpbmUgSFdDQVBfUzM5MF9aQVJDSAkyCisjZGVmaW5lIEhXQ0FQX1MzOTBfU1RGTEUJNAorI2RlZmluZSBIV0NBUF9TMzkwX01TQQkJOAorI2RlZmluZSBIV0NBUF9TMzkwX0xESVNQCTE2CisjZGVmaW5lIEhXQ0FQX1MzOTBfRUlNTQkJMzIKKyNkZWZpbmUgSFdDQVBfUzM5MF9ERlAJCTY0CisjZGVmaW5lIEhXQ0FQX1MzOTBfSFBBR0UJMTI4CisjZGVmaW5lIEhXQ0FQX1MzOTBfRVRGM0VICTI1NgorI2RlZmluZSBIV0NBUF9TMzkwX0hJR0hfR1BSUwk1MTIKKwogLyoKICAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggNTM5MjYzZi4uOTVkY2YxOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMzExLDYgKzMxMSwxMCBAQAogCV9fdTMyCQlvcmlnX2dwcjI7CiB9IHMzOTBfY29tcGF0X3JlZ3M7CiAKK3R5cGVkZWYgc3RydWN0Cit7CisJX191MzIJCWdwcnNfaGlnaFtOVU1fR1BSU107Cit9IHMzOTBfY29tcGF0X3JlZ3NfaGlnaDsKIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWNvbnRleHQuaAppbmRleCBkNjliZWMwLi5jZmI4NzRlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWNvbnRleHQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWNvbnRleHQuaApAQCAtOSw2ICs5LDIxIEBACiAjaWZuZGVmIF9BU01fUzM5MF9VQ09OVEVYVF9ICiAjZGVmaW5lIF9BU01fUzM5MF9VQ09OVEVYVF9ICiAKKyNkZWZpbmUgVUNfRVhURU5ERUQJMHgwMDAwMDAwMQorCisjaWZuZGVmIF9fczM5MHhfXworCitzdHJ1Y3QgdWNvbnRleHRfZXh0ZW5kZWQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJX3NpZ3JlZ3MJICB1Y19tY29udGV4dDsKKwl1bnNpZ25lZCBsb25nCSAgdWNfc2lnbWFza1syXTsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZ3Byc19oaWdoWzE2XTsKK307CisKKyNlbmRpZgorCiBzdHJ1Y3QgdWNvbnRleHQgewogCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKIAlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYwppbmRleCBiNTM3Y2IwLi5lZWU5OTk4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYwpAQCAtMzksNiArMzksNyBAQAogCXN0cnVjdCBzaWdjb250ZXh0MzIgc2M7CiAJX3NpZ3JlZ3MzMiBzcmVnczsKIAlpbnQgc2lnbm87CisJX191MzIgZ3Byc19oaWdoW05VTV9HUFJTXTsKIAlfX3U4IHJldGNvZGVbUzM5MF9TWVNDQUxMX1NJWkVdOwogfSBzaWdmcmFtZTMyOwogCkBAIC00OCw2ICs0OSw3IEBACiAJX191OCByZXRjb2RlW1MzOTBfU1lTQ0FMTF9TSVpFXTsKIAljb21wYXRfc2lnaW5mb190IGluZm87CiAJc3RydWN0IHVjb250ZXh0MzIgdWM7CisJX191MzIgZ3Byc19oaWdoW05VTV9HUFJTXTsKIH0gcnRfc2lnZnJhbWUzMjsKIAogaW50IGNvcHlfc2lnaW5mb190b191c2VyMzIoY29tcGF0X3NpZ2luZm9fdCBfX3VzZXIgKnRvLCBzaWdpbmZvX3QgKmZyb20pCkBAIC0zNDQsNiArMzQ2LDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2F2ZV9zaWdyZWdzX2dwcnNfaGlnaChzdHJ1Y3QgcHRfcmVncyAqcmVncywgX191MzIgX191c2VyICp1cmVncykKK3sKKwlfX3UzMiBncHJzX2hpZ2hbTlVNX0dQUlNdOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9HUFJTOyBpKyspCisJCWdwcnNfaGlnaFtpXSA9IHJlZ3MtPmdwcnNbaV0gPj4gMzI7CisKKwlyZXR1cm4gX19jb3B5X3RvX3VzZXIodXJlZ3MsICZncHJzX2hpZ2gsIHNpemVvZihncHJzX2hpZ2gpKTsKK30KKworc3RhdGljIGludCByZXN0b3JlX3NpZ3JlZ3NfZ3Byc19oaWdoKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBfX3UzMiBfX3VzZXIgKnVyZWdzKQoreworCV9fdTMyIGdwcnNfaGlnaFtOVU1fR1BSU107CisJaW50IGVyciwgaTsKKworCWVyciA9IF9fY29weV9mcm9tX3VzZXIoJmdwcnNfaGlnaCwgdXJlZ3MsIHNpemVvZihncHJzX2hpZ2gpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWZvciAoaSA9IDA7IGkgPCBOVU1fR1BSUzsgaSsrKQorCQkqKF9fdTMyICopJnJlZ3MtPmdwcnNbaV0gPSBncHJzX2hpZ2hbaV07CisJcmV0dXJuIDA7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9zaWdyZXR1cm4odm9pZCkKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKQEAgLTM2Myw2ICszODksOCBAQAogCiAJaWYgKHJlc3RvcmVfc2lncmVnczMyKHJlZ3MsICZmcmFtZS0+c3JlZ3MpKQogCQlnb3RvIGJhZGZyYW1lOworCWlmIChyZXN0b3JlX3NpZ3JlZ3NfZ3Byc19oaWdoKHJlZ3MsIGZyYW1lLT5ncHJzX2hpZ2gpKQorCQlnb3RvIGJhZGZyYW1lOwogCiAJcmV0dXJuIHJlZ3MtPmdwcnNbMl07CiAKQEAgLTM5NCw2ICs0MjIsOCBAQAogCiAJaWYgKHJlc3RvcmVfc2lncmVnczMyKHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQpKQogCQlnb3RvIGJhZGZyYW1lOworCWlmIChyZXN0b3JlX3NpZ3JlZ3NfZ3Byc19oaWdoKHJlZ3MsIGZyYW1lLT5ncHJzX2hpZ2gpKQorCQlnb3RvIGJhZGZyYW1lOwogCiAJZXJyID0gX19nZXRfdXNlcihzc19zcCwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zcCk7CiAJc3Quc3Nfc3AgPSBjb21wYXRfcHRyKHNzX3NwKTsKQEAgLTQ3NCw2ICs1MDQsOCBAQAogCiAJaWYgKHNhdmVfc2lncmVnczMyKHJlZ3MsICZmcmFtZS0+c3JlZ3MpKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKKwlpZiAoc2F2ZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKSkKKwkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAJaWYgKF9fcHV0X3VzZXIoKHVuc2lnbmVkIGxvbmcpICZmcmFtZS0+c3JlZ3MsICZmcmFtZS0+c2Muc3JlZ3MpKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKIApAQCAtNTI5LDEzICs1NjEsMTQgQEAKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKIAkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KLQllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKKwllcnIgfD0gX19wdXRfdXNlcihVQ19FWFRFTkRFRCwgJmZyYW1lLT51Yy51Y19mbGFncyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19saW5rKTsKIAllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwogCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5ncHJzWzE1XSksCiAJICAgICAgICAgICAgICAgICAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7CiAJZXJyIHw9IHNhdmVfc2lncmVnczMyKHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQpOworCWVyciB8PSBzYXZlX3NpZ3JlZ3NfZ3Byc19oaWdoKHJlZ3MsIGZyYW1lLT5ncHJzX2hpZ2gpOwogCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKIAlpZiAoZXJyKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwppbmRleCA2ODJmYjY5Li5jYmQ5OTAxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCkBAIC00MDksNyArNDA5LDcgQEAKIAkuZ2xvYmwJc3lzMzJfdHJ1bmNhdGVfd3JhcHBlcgogc3lzMzJfdHJ1bmNhdGVfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKLQlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBsb25nCisJbGdmcgklcjMsJXIzCQkJIyBsb25nCiAJamcJc3lzX3RydW5jYXRlCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCiAJLmdsb2JsCXN5czMyX2Z0cnVuY2F0ZV93cmFwcGVyCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKaW5kZXggYmY4YjRhZS4uZTQ5ZTllMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYwpAQCAtNTUsNiArNTUsNyBAQAogCQlkaXNhYmxlZF93YWl0KDApOwogCiAJc2NoZWRfY2xvY2tfYmFzZV9jYyA9IFRPRF9VTklYX0VQT0NIOworCVMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV9jbG9jayA9IHNjaGVkX2Nsb2NrX2Jhc2VfY2M7CiB9CiAKICNpZmRlZiBDT05GSUdfU0hBUkVEX0tFUk5FTApAQCAtMTY3LDYgKzE2OCwxNCBAQAogCQlyZXR1cm47CiAJfQogCisJLyogcmUtaW5pdGlhbGl6ZSBjcHV0aW1lIGFjY291bnRpbmcuICovCisJc2NoZWRfY2xvY2tfYmFzZV9jYyA9IGdldF9jbG9jaygpOworCVMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV9jbG9jayA9IHNjaGVkX2Nsb2NrX2Jhc2VfY2M7CisJUzM5MF9sb3djb3JlLmxhc3RfdXBkYXRlX3RpbWVyID0gMHg3ZmZmZmZmZmZmZmZmZmZmVUxMOworCVMzOTBfbG93Y29yZS51c2VyX3RpbWVyID0gMDsKKwlTMzkwX2xvd2NvcmUuc3lzdGVtX3RpbWVyID0gMDsKKwlhc20gdm9sYXRpbGUoIlNQVCAwKCUwKSIgOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lcikpOworCiAJLyogcmUtc2V0dXAgYm9vdCBjb21tYW5kIGxpbmUgd2l0aCBuZXcgaXBsIHZtIHBhcm1zICovCiAJaXBsX3VwZGF0ZV9wYXJhbWV0ZXJzKCk7CiAJc2V0dXBfYm9vdF9jb21tYW5kX2xpbmUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwppbmRleCBmNDNkMmVlLi40ODIxNWQxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCkBAIC01NjUsMTAgKzU2NSwxMCBAQAogCWxoCSVyNywweDhhCQkjIGdldCBzdmMgbnVtYmVyIGZyb20gbG93Y29yZQogCWwJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJVFJBQ0VfSVJRU19PRkYKLQlsCSVyMSxfX1RJX3Rhc2soJXI5KQotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjEpLF9fTENfUEVSX0FUTUlECi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDQsJXIxKSxfX0xDX1BFUl9BRERSRVNTCi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjEpLF9fTENfUEVSX0FDQ0VTU19JRAorCWwJJXI4LF9fVElfdGFzayglcjkpCisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hdG1pZCgyLCVyOCksX19MQ19QRVJfQVRNSUQKKwltdmMJX19USFJFQURfcGVyK19fUEVSX2FkZHJlc3MoNCwlcjgpLF9fTENfUEVSX0FERFJFU1MKKwltdmMJX19USFJFQURfcGVyK19fUEVSX2FjY2Vzc19pZCgxLCVyOCksX19MQ19QRVJfQUNDRVNTX0lECiAJb2kJX19USV9mbGFncyszKCVyOSksX1RJRl9TSU5HTEVfU1RFUCAjIHNldCBUSUZfU0lOR0xFX1NURVAKIAlUUkFDRV9JUlFTX09OCiAJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDAzCSMgcmVlbmFibGUgaW50ZXJydXB0cwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwppbmRleCBhNmY3YjIwLi45YWZmMWQ0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwpAQCAtNTQzLDEwICs1NDMsMTAgQEAKIAltdmMJX19MQ19MQVNUX1VQREFURV9USU1FUig4KSxfX0xDX1NZTkNfRU5URVJfVElNRVIKIAlsbGdoCSVyNyxfX0xDX1NWQ19JTlRfQ09ERQkjIGdldCBzdmMgbnVtYmVyIGZyb20gbG93Y29yZQogCWxnCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAotCWxnCSVyMSxfX1RJX3Rhc2soJXI5KQotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjEpLF9fTENfUEVSX0FUTUlECi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDgsJXIxKSxfX0xDX1BFUl9BRERSRVNTCi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjEpLF9fTENfUEVSX0FDQ0VTU19JRAorCWxnCSVyOCxfX1RJX3Rhc2soJXI5KQorCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjgpLF9fTENfUEVSX0FUTUlECisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDgsJXI4KSxfX0xDX1BFUl9BRERSRVNTCisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjgpLF9fTENfUEVSX0FDQ0VTU19JRAogCW9pCV9fVElfZmxhZ3MrNyglcjkpLF9USUZfU0lOR0xFX1NURVAgIyBzZXQgVElGX1NJTkdMRV9TVEVQCiAJVFJBQ0VfSVJRU19PTgogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwMwkjIHJlZW5hYmxlIGludGVycnVwdHMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCmluZGV4IDU3YmRjYjEuLmY1ZmUzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYwpAQCAtMTg1LDkgKzE4NSw2IEBACiB7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgdHJhY2U7CiAKLQkvKiBObWkncyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkLiAqLwotCWlmICh1bmxpa2VseShpbl9ubWkoKSkpCi0JCWdvdG8gb3V0OwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2luZ19ncmFwaF9wYXVzZSkpKQogCQlnb3RvIG91dDsKIAlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHBhcmVudCwgaXAsICZ0cmFjZS5kZXB0aCwgMCkgPT0gLUVCVVNZKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggZWU1N2E0Mi4uNDg5MGFjNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC0xNTk1LDEwICsxNTk1LDkgQEAKIHsKIAlpZiAoc3RyY21wKHRyaWdnZXItPm5hbWUsIE9OX1BBTklDX1NUUikgPT0gMCkKIAkJZGlzYWJsZWRfd2FpdCgodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQllbHNlIHsKLQkJc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCk7Ci0JCWZvciAoOzspOwotCX0KKwl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQorCQljcHVfcmVsYXgoKTsKKwlmb3IgKDs7KTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaHV0ZG93bl9hY3Rpb24gc3RvcF9hY3Rpb24gPSB7U0hVVERPV05fQUNUSU9OX1NUT1BfU1RSLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYWIyZTNlZC4uNjM5MzgwYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCkBAIC01NSw2ICs1NSw4IEBACiAvKiBGcmVlIG1lbW9yeSByZXR1cm5lZCBmcm9tIG1vZHVsZV9hbGxvYyAqLwogdm9pZCBtb2R1bGVfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCiB7CisJdmZyZWUobW9kLT5hcmNoLnN5bWluZm8pOworCW1vZC0+YXJjaC5zeW1pbmZvID0gTlVMTDsKIAl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKIH0KIApAQCAtNDAyLDYgKzQwNCw3IEBACiAJCSAgICBzdHJ1Y3QgbW9kdWxlICptZSkKIHsKIAl2ZnJlZShtZS0+YXJjaC5zeW1pbmZvKTsKKwltZS0+YXJjaC5zeW1pbmZvID0gTlVMTDsKIAlyZXR1cm4gbW9kdWxlX2J1Z19maW5hbGl6ZShoZHIsIHNlY2hkcnMsIG1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKaW5kZXggODAyYzhhYi4uMDcyOWYzNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCkBAIC0zMSw5ICszMSw5IEBACiAKIHN0YXRpYyBpbnQgc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyWzldID0geworCXN0YXRpYyBjb25zdCBjaGFyICpod2NhcF9zdHJbMTBdID0gewogCQkiZXNhbjMiLCAiemFyY2giLCAic3RmbGUiLCAibXNhIiwgImxkaXNwIiwgImVpbW0iLCAiZGZwIiwKLQkJImVkYXQiLCAiZXRmM2VoIgorCQkiZWRhdCIsICJldGYzZWgiLCAiaGlnaGdwcnMiCiAJfTsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmxjOwogCXVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJCSAgIG51bV9vbmxpbmVfY3B1cygpLCBsb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksCiAJCQkgICAobG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSklMTAwKTsKIAkJc2VxX3B1dHMobSwgImZlYXR1cmVzXHQ6ICIpOwotCQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKIAkJCWlmIChod2NhcF9zdHJbaV0gJiYgKGVsZl9od2NhcCAmICgxVUwgPDwgaSkpKQogCQkJCXNlcV9wcmludGYobSwgIiVzICIsIGh3Y2FwX3N0cltpXSk7CiAJCXNlcV9wdXRzKG0sICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYTg3Mzg2Ny4uNjUzYzZhMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCkBAIC01Nyw2ICs1Nyw3IEBACiBlbnVtIHMzOTBfcmVnc2V0IHsKIAlSRUdTRVRfR0VORVJBTCwKIAlSRUdTRVRfRlAsCisJUkVHU0VUX0dFTkVSQUxfRVhURU5ERUQsCiB9OwogCiBzdGF0aWMgdm9pZApAQCAtODc5LDYgKzg4MCw2NyBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBzMzkwX2NvbXBhdF9yZWdzX2hpZ2hfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQkJICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwljb21wYXRfdWxvbmdfdCAqZ3Byc19oaWdoOworCisJZ3Byc19oaWdoID0gKGNvbXBhdF91bG9uZ190ICopCisJCSZ0YXNrX3B0X3JlZ3ModGFyZ2V0KS0+Z3Byc1twb3MgLyBzaXplb2YoY29tcGF0X3Vsb25nX3QpXTsKKwlpZiAoa2J1ZikgeworCQljb21wYXRfdWxvbmdfdCAqayA9IGtidWY7CisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCSprKysgPSAqZ3Byc19oaWdoOworCQkJZ3Byc19oaWdoICs9IDI7CisJCQljb3VudCAtPSBzaXplb2YoKmspOworCQl9CisJfSBlbHNlIHsKKwkJY29tcGF0X3Vsb25nX3QgX191c2VyICp1ID0gdWJ1ZjsKKwkJd2hpbGUgKGNvdW50ID4gMCkgeworCQkJaWYgKF9fcHV0X3VzZXIoKmdwcnNfaGlnaCwgdSsrKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWdwcnNfaGlnaCArPSAyOworCQkJY291bnQgLT0gc2l6ZW9mKCp1KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzMzkwX2NvbXBhdF9yZWdzX2hpZ2hfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQkJICAgICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwljb21wYXRfdWxvbmdfdCAqZ3Byc19oaWdoOworCWludCByYyA9IDA7CisKKwlncHJzX2hpZ2ggPSAoY29tcGF0X3Vsb25nX3QgKikKKwkJJnRhc2tfcHRfcmVncyh0YXJnZXQpLT5ncHJzW3BvcyAvIHNpemVvZihjb21wYXRfdWxvbmdfdCldOworCWlmIChrYnVmKSB7CisJCWNvbnN0IGNvbXBhdF91bG9uZ190ICprID0ga2J1ZjsKKwkJd2hpbGUgKGNvdW50ID4gMCkgeworCQkJKmdwcnNfaGlnaCA9ICprKys7CisJCQkqZ3Byc19oaWdoICs9IDI7CisJCQljb3VudCAtPSBzaXplb2YoKmspOworCQl9CisJfSBlbHNlIHsKKwkJY29uc3QgY29tcGF0X3Vsb25nX3QgIF9fdXNlciAqdSA9IHVidWY7CisJCXdoaWxlIChjb3VudCA+IDAgJiYgIXJjKSB7CisJCQl1bnNpZ25lZCBsb25nIHdvcmQ7CisJCQlyYyA9IF9fZ2V0X3VzZXIod29yZCwgdSsrKTsKKwkJCWlmIChyYykKKwkJCQlicmVhazsKKwkJCSpncHJzX2hpZ2ggPSB3b3JkOworCQkJKmdwcnNfaGlnaCArPSAyOworCQkJY291bnQgLT0gc2l6ZW9mKCp1KTsKKwkJfQorCX0KKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBzMzkwX2NvbXBhdF9yZWdzZXRzW10gPSB7CiAJW1JFR1NFVF9HRU5FUkFMXSA9IHsKIAkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJTVEFUVVMsCkBAIC04OTYsNiArOTU4LDE0IEBACiAJCS5nZXQgPSBzMzkwX2ZwcmVnc19nZXQsCiAJCS5zZXQgPSBzMzkwX2ZwcmVnc19zZXQsCiAJfSwKKwlbUkVHU0VUX0dFTkVSQUxfRVhURU5ERURdID0geworCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlhTVEFUVVMsCisJCS5uID0gc2l6ZW9mKHMzOTBfY29tcGF0X3JlZ3NfaGlnaCkgLyBzaXplb2YoY29tcGF0X2xvbmdfdCksCisJCS5zaXplID0gc2l6ZW9mKGNvbXBhdF9sb25nX3QpLAorCQkuYWxpZ24gPSBzaXplb2YoY29tcGF0X2xvbmdfdCksCisJCS5nZXQgPSBzMzkwX2NvbXBhdF9yZWdzX2hpZ2hfZ2V0LAorCQkuc2V0ID0gczM5MF9jb21wYXRfcmVnc19oaWdoX3NldCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfczM5MF9jb21wYXRfdmlldyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCA5ZWQxM2ExLi4wNjE0NzlmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC03MjksNyArNzI5LDcgQEAKIAogCWlmICgoZmFjaWxpdHlfbGlzdCAmICgxVUwgPDwgKDMxIC0gMjIpKSkKIAkgICAgJiYgKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIDMwKSkpKQotCQllbGZfaHdjYXAgfD0gMVVMIDw8IDg7CisJCWVsZl9od2NhcCB8PSBIV0NBUF9TMzkwX0VURjNFSDsKIAogCS8qCiAJICogQ2hlY2sgZm9yIGFkZGl0aW9uYWwgZmFjaWxpdGllcyB3aXRoIHN0b3JlLWZhY2lsaXR5LWxpc3QtZXh0ZW5kZWQuCkBAIC03NDgsMTEgKzc0OCwyMCBAQAogCSAgICBfX3N0ZmxlKCZmYWNpbGl0eV9saXN0X2V4dGVuZGVkLCAxKSA+IDApIHsKIAkJaWYgKChmYWNpbGl0eV9saXN0X2V4dGVuZGVkICYgKDFVTEwgPDwgKDYzIC0gNDIpKSkKIAkJICAgICYmIChmYWNpbGl0eV9saXN0X2V4dGVuZGVkICYgKDFVTEwgPDwgKDYzIC0gNDQpKSkpCi0JCQllbGZfaHdjYXAgfD0gMVVMIDw8IDY7CisJCQllbGZfaHdjYXAgfD0gSFdDQVBfUzM5MF9ERlA7CiAJfQogCisJLyoKKwkgKiBIdWdlIHBhZ2Ugc3VwcG9ydCBIV0NBUF9TMzkwX0hQQUdFIGlzIGJpdCA3LgorCSAqLwogCWlmIChNQUNISU5FX0hBU19IUEFHRSkKLQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA3OworCQllbGZfaHdjYXAgfD0gSFdDQVBfUzM5MF9IUEFHRTsKKworCS8qCisJICogNjQtYml0IHJlZ2lzdGVyIHN1cHBvcnQgZm9yIDMxLWJpdCBwcm9jZXNzZXMKKwkgKiBIV0NBUF9TMzkwX0hJR0hfR1BSUyBpcyBiaXQgOS4KKwkgKi8KKwllbGZfaHdjYXAgfD0gSFdDQVBfUzM5MF9ISUdIX0dQUlM7CiAKIAlzd2l0Y2ggKFMzOTBfbG93Y29yZS5jcHVfaWQubWFjaGluZSkgewogCWNhc2UgMHg5NjcyOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggYzkzMmNhYS4uOTNlNTIwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC03Niw3ICs3Niw2IEBACiAJX191MzIgc3RhdHVzOwogCiAJc3dpdGNoIChzaWduYWxfcHJvY2Vzc29yX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZSkpIHsKLQljYXNlIHNpZ3Bfb3JkZXJfY29kZV9hY2NlcHRlZDoKIAljYXNlIHNpZ3Bfc3RhdHVzX3N0b3JlZDoKIAkJLyogQ2hlY2sgZm9yIHN0b3BwZWQgYW5kIGNoZWNrIHN0b3Agc3RhdGUgKi8KIAkJaWYgKHN0YXR1cyAmIDB4NTApCkBAIC02MzgsNiArNjM3LDggQEAKIAkvKiBXYWl0IHVudGlsIHRhcmdldCBjcHUgaXMgZG93biAqLwogCXdoaWxlICghY3B1X3N0b3BwZWQoY3B1KSkKIAkJY3B1X3JlbGF4KCk7CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3JfcCgwLCBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCkgPT0gc2lncF9idXN5KQorCQl1ZGVsYXkoMTApOwogCXNtcF9mcmVlX2xvd2NvcmUoY3B1KTsKIAlwcl9pbmZvKCJQcm9jZXNzb3IgJWQgc3RvcHBlZFxuIiwgY3B1KTsKIH0KQEAgLTY0NSw4ICs2NDYsOCBAQAogdm9pZCBjcHVfZGllKHZvaWQpCiB7CiAJaWRsZV90YXNrX2V4aXQoKTsKLQlzaWduYWxfcHJvY2Vzc29yKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wKTsKLQlCVUcoKTsKKwl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQorCQljcHVfcmVsYXgoKTsKIAlmb3IgKDs7KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKaW5kZXggZmU5MjdkMC4uMGMyNmNjMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCkBAIC00Myw3ICs0Myw3IEBACiAJbGdoaQklcjEsMHgxMDAwCiAKIAkvKiBTYXZlIENQVSBhZGRyZXNzICovCi0Jc3RhcAlfX0xDX0NQVV9BRERSRVNTKCVyMSkKKwlzdGFwCV9fTENfQ1BVX0FERFJFU1MoJXIwKQogCiAJLyogU3RvcmUgcmVnaXN0ZXJzICovCiAJbXZjCTB4MzE4KDQsJXIxKSxfX1NGX0VNUFRZKCVyMTUpCS8qIG1vdmUgcHJlZml4IHRvIGxvd2NvcmUgKi8KQEAgLTY5LDggKzY5LDIxIEBACiAJc3RtZwklcjAsJXIxNSwweDI4MCglcjEpCQkvKiBzdG9yZSBnZW5lcmFsIHJlZ2lzdGVycyAqLwogCiAJc3RwdAkweDMyOCglcjEpCQkJLyogc3RvcmUgdGltZXIgKi8KKwlzdGNrCV9fU0ZfRU1QVFkoJXIxNSkJCS8qIHN0b3JlIGNsb2NrICovCiAJc3Rja2MJMHgzMzAoJXIxKQkJCS8qIHN0b3JlIGNsb2NrIGNvbXBhcmF0b3IgKi8KIAorCS8qIFVwZGF0ZSBjcHV0aW1lIGFjY291bnRpbmcgYmVmb3JlIGdvaW5nIHRvIHNsZWVwICovCisJbGcJJXIwLF9fTENfTEFTVF9VUERBVEVfVElNRVIKKwlzbGcJJXIwLDB4MzI4KCVyMSkKKwlhbGcJJXIwLF9fTENfU1lTVEVNX1RJTUVSCisJc3RnCSVyMCxfX0xDX1NZU1RFTV9USU1FUgorCW12YwlfX0xDX0xBU1RfVVBEQVRFX1RJTUVSKDgpLDB4MzI4KCVyMSkKKwlsZwklcjAsX19MQ19MQVNUX1VQREFURV9DTE9DSworCXNsZwklcjAsX19TRl9FTVBUWSglcjE1KQorCWFsZwklcjAsX19MQ19TVEVBTF9USU1FUgorCXN0ZwklcjAsX19MQ19TVEVBTF9USU1FUgorCW12YwlfX0xDX0xBU1RfVVBEQVRFX0NMT0NLKDgpLF9fU0ZfRU1QVFkoJXIxNSkKKwogCS8qIEFjdGl2YXRlIERBVCAqLwogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwNAogCkBAIC0xNTksOCArMTcyLDcgQEAKIAlsYXJsCSVyMSwuTHJlc3VtZV9jcHUJCS8qIFJlc3VtZSBDUFUgYWRkcmVzczogcjIgKi8KIAlzdGFwCTAoJXIxKQogCWxsZ2gJJXIyLDAoJXIxKQotCWxnaGkJJXIzLDB4MTAwMAotCWxsZ2gJJXIxLF9fTENfQ1BVX0FERFJFU1MoJXIzKQkvKiBTdXNwZW5kIENQVSBhZGRyZXNzOiByMSAqLworCWxsZ2gJJXIxLF9fTENfQ1BVX0FERFJFU1MoJXIwKQkvKiBTdXNwZW5kIENQVSBhZGRyZXNzOiByMSAqLwogCWNncgklcjEsJXIyCiAJamUJcmVzdG9yZV9yZWdpc3RlcnMJCS8qIHIxID0gcjIgLT4gbm90aGluZyB0byBkbyAqLwogCWxhcmwJJXI0LC5McmVzdGFydF9zdXNwZW5kX3BzdwkvKiBTZXQgbmV3IHJlc3RhcnQgUFNXICovCkBAIC0xODcsNiArMTk5LDcgQEAKIAlicmMJMiw0YgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLwogNToKIAlzaWdwCSVyOSwlcjIsX19TSUdQX1NUT1AJLyogc3RvcCByZXN1bWUgKGN1cnJlbnQpIENQVSAqLworCWJyYwkyLDViCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCiA2OglqCTZiCiAKIHJlc3RhcnRfc3VzcGVuZDoKQEAgLTE5NCwxNCArMjA3LDE4IEBACiAJbGxnaAklcjIsMCglcjEpCiA3OgogCXNpZ3AJJXI5LCVyMixfX1NJR1BfU0VOU0UJLyogV2FpdCBmb3IgcmVzdW1lIENQVSAqLworCWJyYwk4LDdiCQkJLyogYWNjZXB0ZWQsIHN0YXR1cyAwLCBzdGlsbCBydW5uaW5nICovCiAJYnJjCTIsN2IJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KIAl0bWxsCSVyOSwweDQwCQkvKiBUZXN0IGlmIHJlc3VtZSBDUFUgaXMgc3RvcHBlZCAqLwogCWp6CTdiCiAKIHJlc3RvcmVfcmVnaXN0ZXJzOgogCS8qIFJlc3RvcmUgcmVnaXN0ZXJzICovCi0JbGdoaQklcjEzLDB4MTAwMAkJLyogJXIxID0gcG9pbnRlciB0byBzYXZlIGFyYWUgKi8KKwlsZ2hpCSVyMTMsMHgxMDAwCQkvKiAlcjEgPSBwb2ludGVyIHRvIHNhdmUgYXJlYSAqLwogCisJLyogSWdub3JlIHRpbWUgc3BlbnQgaW4gc3VzcGVuZGVkIHN0YXRlLiAqLworCWxsZ2YJJXIxLDB4MzE4KCVyMTMpCisJc3RjawlfX0xDX0xBU1RfVVBEQVRFX0NMT0NLKCVyMSkKIAlzcHQJMHgzMjgoJXIxMykJCS8qIHJlcHJvZ3JhbSB0aW1lciAqLwogCS8vc2NrYwkweDMzMCglcjEzKQkJLyogc2V0IGNsb2NrIGNvbXBhcmF0b3IgKi8KIApAQCAtMjI5LDkgKzI0Niw2IEBACiAJLyogTG9hZCBvbGQgc3RhY2sgKi8KIAlsZwklcjE1LDB4MmY4KCVyMTMpCiAKLQkvKiBQb2ludGVyIHRvIHNhdmUgYXJlYSAqLwotCWxnaGkJJXIxMywweDEwMDAKLQogCS8qIFJlc3RvcmUgcHJlZml4IHJlZ2lzdGVyICovCiAJc3B4CTB4MzE4KCVyMTMpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKaW5kZXggNDVhM2U5YS4uYWRmYjMyYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKQEAgLTI0Nyw2ICsyNDcsMTMgQEAKIAl9CiAKIAkvKgorCSAqIFB1dCB2RFNPIGJhc2UgaW50byBtbSBzdHJ1Y3QuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgY2FsbGluZworCSAqIGluc3RhbGxfc3BlY2lhbF9tYXBwaW5nIG9yIHRoZSBwZXJmIGNvdW50ZXIgbW1hcCB0cmFja2luZyBjb2RlCisJICogd2lsbCBmYWlsIHRvIHJlY29nbmlzZSBpdCBhcyBhIHZEU08gKHNpbmNlIGFyY2hfdm1hX25hbWUgZmFpbHMpLgorCSAqLworCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IHZkc29fYmFzZTsKKworCS8qCiAJICogb3VyIHZtYSBmbGFncyBkb24ndCBoYXZlIFZNX1dSSVRFIHNvIGJ5IGRlZmF1bHQsIHRoZSBwcm9jZXNzCiAJICogaXNuJ3QgYWxsb3dlZCB0byB3cml0ZSB0aG9zZSBwYWdlcy4KIAkgKiBnZGIgY2FuIGJyZWFrIHRoYXQgd2l0aCBwdHJhY2UgaW50ZXJmYWNlLCBhbmQgdGh1cyB0cmlnZ2VyIENPVwpAQCAtMjY3LDE0ICsyNzQsNyBAQAogCQkJCSAgICAgVk1fQUxXQVlTRFVNUCwKIAkJCQkgICAgIHZkc29fcGFnZWxpc3QpOwogCWlmIChyYykKLQkJZ290byBvdXRfdXA7Ci0KLQkvKiBQdXQgdkRTTyBiYXNlIGludG8gbW0gc3RydWN0ICovCi0JY3VycmVudC0+bW0tPmNvbnRleHQudmRzb19iYXNlID0gdmRzb19iYXNlOwotCi0JdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIDA7Ci0KKwkJY3VycmVudC0+bW0tPmNvbnRleHQudmRzb19iYXNlID0gMDsKIG91dF91cDoKIAl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYmMxNWVmOS4uYTY4YWMxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNTEsNiArNTEsNyBAQAogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX2VzaGFyZWQgPSAuOwkJLyogRW5kIG9mIHNoYXJlYWJsZSBkYXRhICovCisJX3NkYXRhID0gLjsJCS8qIFN0YXJ0IG9mIGRhdGEgc2VjdGlvbiAqLwogCiAJRVhDRVBUSU9OX1RBQkxFKDE2KSA6ZGF0YQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmggYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKaW5kZXggZWM1ZWVlNy4uMDZjY2U4MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaApAQCAtNTgsNyArNTgsNyBAQAogaW50IGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjb2RlKTsKIGludCBrdm1fczM5MF9pbmplY3Rfc2lncF9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFjdGlvbik7CiAKLXN0YXRpYyBpbmxpbmUgaW50IGt2bV9zMzkwX3ZjcHVfZ2V0X21lbXNpemUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIGlubGluZSBsb25nIGt2bV9zMzkwX3ZjcHVfZ2V0X21lbXNpemUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zbG0KIAkJLSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3IKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvZGVsYXkuYyBiL2FyY2gvczM5MC9saWIvZGVsYXkuYwppbmRleCA5N2MxZWNhOC4uNzUyYjM2MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jCisrKyBiL2FyY2gvczM5MC9saWIvZGVsYXkuYwpAQCAtMjUsMTMgKzI1LDEzIEBACiAJYXNtIHZvbGF0aWxlKCIwOiBicmN0ICUwLDBiIiA6IDogImQiICgobG9vcHMvMikgKyAxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdWRlbGF5X2Rpc2FibGVkKHVuc2lnbmVkIGxvbmcgdXNlY3MpCitzdGF0aWMgdm9pZCBfX3VkZWxheV9kaXNhYmxlZCh1bnNpZ25lZCBsb25nIGxvbmcgdXNlY3MpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCBjcjAsIGNyMF9zYXZlZDsKIAl1NjQgY2xvY2tfc2F2ZWQ7CiAKIAljbG9ja19zYXZlZCA9IGxvY2FsX3RpY2tfZGlzYWJsZSgpOwotCXNldF9jbG9ja19jb21wYXJhdG9yKGdldF9jbG9jaygpICsgKCh1NjQpIHVzZWNzIDw8IDEyKSk7CisJc2V0X2Nsb2NrX2NvbXBhcmF0b3IoZ2V0X2Nsb2NrKCkgKyAodXNlY3MgPDwgMTIpKTsKIAlfX2N0bF9zdG9yZShjcjBfc2F2ZWQsIDAsIDApOwogCWNyMCA9IChjcjBfc2F2ZWQgJiAweGZmZmYwMGUwKSB8IDB4MDAwMDA4MDA7CiAJX19jdGxfbG9hZChjcjAgLCAwLCAwKTsKQEAgLTQ2LDIwICs0NiwyNSBAQAogCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yKTsKIH0KIAotc3RhdGljIHZvaWQgX191ZGVsYXlfZW5hYmxlZCh1bnNpZ25lZCBsb25nIHVzZWNzKQorc3RhdGljIHZvaWQgX191ZGVsYXlfZW5hYmxlZCh1bnNpZ25lZCBsb25nIGxvbmcgdXNlY3MpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwotCXU2NCBlbmQsIHRpbWU7CisJdTY0IGNsb2NrX3NhdmVkOworCXU2NCBlbmQ7CiAKIAltYXNrID0gcHN3X2tlcm5lbF9iaXRzIHwgUFNXX01BU0tfV0FJVCB8IFBTV19NQVNLX0VYVCB8IFBTV19NQVNLX0lPOwotCWVuZCA9IGdldF9jbG9jaygpICsgKCh1NjQpIHVzZWNzIDw8IDEyKTsKKwllbmQgPSBnZXRfY2xvY2soKSArICh1c2VjcyA8PCAxMik7CiAJZG8gewotCQl0aW1lID0gZW5kIDwgUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IgPwotCQkJZW5kIDogUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3I7Ci0JCXNldF9jbG9ja19jb21wYXJhdG9yKHRpbWUpOworCQljbG9ja19zYXZlZCA9IDA7CisJCWlmIChlbmQgPCBTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcikgeworCQkJY2xvY2tfc2F2ZWQgPSBsb2NhbF90aWNrX2Rpc2FibGUoKTsKKwkJCXNldF9jbG9ja19jb21wYXJhdG9yKGVuZCk7CisJCX0KIAkJdHJhY2VfaGFyZGlycXNfb24oKTsKIAkJX19sb2FkX3Bzd19tYXNrKG1hc2spOwogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlpZiAoY2xvY2tfc2F2ZWQpCisJCQlsb2NhbF90aWNrX2VuYWJsZShjbG9ja19zYXZlZCk7CiAJfSB3aGlsZSAoZ2V0X2Nsb2NrKCkgPCBlbmQpOwogCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yKTsKIH0KQEAgLTY3LDcgKzcyLDcgQEAKIC8qCiAgKiBXYWl0cyBmb3IgJ3VzZWNzJyBtaWNyb3NlY29uZHMgdXNpbmcgdGhlIFRPRCBjbG9jayBjb21wYXJhdG9yLgogICovCi12b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgbG9uZyB1c2VjcykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMDEsMTEgKzEwNiwxMSBAQAogICogU2ltcGxlIHVkZWxheSB2YXJpYW50LiBUbyBiZSB1c2VkIG9uIHN0YXJ0dXAgYW5kIHJlYm9vdAogICogd2hlbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXNuJ3Qgd29ya2luZy4KICAqLwotdm9pZCB1ZGVsYXlfc2ltcGxlKHVuc2lnbmVkIGxvbmcgdXNlY3MpCit2b2lkIHVkZWxheV9zaW1wbGUodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKQogewogCXU2NCBlbmQ7CiAKLQllbmQgPSBnZXRfY2xvY2soKSArICgodTY0KSB1c2VjcyA8PCAxMik7CisJZW5kID0gZ2V0X2Nsb2NrKCkgKyAodXNlY3MgPDwgMTIpOwogCXdoaWxlIChnZXRfY2xvY2soKSA8IGVuZCkKIAkJY3B1X3JlbGF4KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19tdmNvcy5jCmluZGV4IDNmMTVhYWYuLjU4ZGEzZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19tdmNvcy5jCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19tdmNvcy5jCkBAIC0zNiw3ICszNiw3IEBACiAJdG1wMSA9IC00MDk2VUw7CiAJYXNtIHZvbGF0aWxlKAogCQkiMDogLmluc24gc3MsMHhjODAwMDAwMDAwMDAsMCglMCwlMiksMCglMSksMFxuIgotCQkiICAganogICAgN2ZcbiIKKwkJIjk6IGp6ICAgIDdmXG4iCiAJCSIxOiJBTFIiICAlMCwlM1xuIgogCQkiICAiU0xSIiAgJTEsJTNcbiIKIAkJIiAgIlNMUiIgICUyLCUzXG4iCkBAIC00Nyw3ICs0Nyw3IEBACiAJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLwogCQkiICAgam5oICAgNGZcbiIKIAkJIjM6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTQsJTIpLDAoJTEpLDBcbiIKLQkJIiAgIlNMUiIgICUwLCU0XG4iCisJCSIxMDoiU0xSIiAgJTAsJTRcbiIKIAkJIiAgIkFMUiIgICUyLCU0XG4iCiAJCSI0OiJMSEkiICAlNCwtMVxuIgogCQkiICAiQUxSIiAgJTQsJTBcbiIJLyogY29weSByZW1haW5pbmcgc2l6ZSwgc3VidHJhY3QgMSAqLwpAQCAtNjEsNyArNjEsNyBAQAogCQkiICAgaiAgICAgOGZcbiIKIAkJIjc6IlNMUiIgICUwLCUwXG4iCiAJCSI4OiBcbiIKLQkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDNiLDRiKQorCQlFWF9UQUJMRSgwYiwyYikgRVhfVEFCTEUoM2IsNGIpIEVYX1RBQkxFKDliLDJiKSBFWF9UQUJMRSgxMGIsNGIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiAiZCIgKHJlZzApIDogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBzaXplOwpAQCAtODIsNyArODIsNyBAQAogCXRtcDEgPSAtNDA5NlVMOwogCWFzbSB2b2xhdGlsZSgKIAkJIjA6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTAsJTEpLDAoJTIpLDBcbiIKLQkJIiAgIGp6ICAgIDRmXG4iCisJCSI2OiBqeiAgICA0ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIlNMUiIgICUxLCUzXG4iCiAJCSIgICJTTFIiICAlMiwlM1xuIgpAQCAtOTMsMTEgKzkzLDExIEBACiAJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLwogCQkiICAgam5oICAgNWZcbiIKIAkJIjM6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTQsJTEpLDAoJTIpLDBcbiIKLQkJIiAgIlNMUiIgICUwLCU0XG4iCisJCSI3OiJTTFIiICAlMCwlNFxuIgogCQkiICAgaiAgICAgNWZcbiIKIAkJIjQ6IlNMUiIgICUwLCUwXG4iCiAJCSI1OiBcbiIKLQkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDNiLDViKQorCQlFWF9UQUJMRSgwYiwyYikgRVhfVEFCTEUoM2IsNWIpIEVYX1RBQkxFKDZiLDJiKSBFWF9UQUJMRSg3Yiw1YikKIAkJOiAiK2EiIChzaXplKSwgIithIiAocHRyKSwgIithIiAoeCksICIrYSIgKHRtcDEpLCAiPWEiICh0bXAyKQogCQk6ICJkIiAocmVnMCkgOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIHNpemU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKaW5kZXggZDJmZmJhZC4uMDdkZWFlZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwpAQCAtMzYsMTIgKzM2LDEyIEBACiAJdG1wMSA9IC0yNTZVTDsKIAlhc20gdm9sYXRpbGUoCiAJCSIwOiBtdmNwICAwKCUwLCUyKSwwKCUxKSwlM1xuIgotCQkiICAganogICAgOGZcbiIKKwkJIjEwOmp6ICAgIDhmXG4iCiAJCSIxOiJBTFIiICAlMCwlM1xuIgogCQkiICAgbGEgICAgJTEsMjU2KCUxKVxuIgogCQkiICAgbGEgICAgJTIsMjU2KCUyKVxuIgogCQkiMjogbXZjcCAgMCglMCwlMiksMCglMSksJTNcbiIKLQkJIiAgIGpueiAgIDFiXG4iCisJCSIxMTpqbnogICAxYlxuIgogCQkiICAgaiAgICAgOGZcbiIKIAkJIjM6IGxhICAgICU0LDI1NSglMSlcbiIJLyogJTQgPSBwdHIgKyAyNTUgKi8KIAkJIiAgIkxISSIgICUzLC00MDk2XG4iCkBAIC01MCw3ICs1MCw3IEBACiAJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLwogCQkiICAgam5oICAgNWZcbiIKIAkJIjQ6IG12Y3AgIDAoJTQsJTIpLDAoJTEpLCUzXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgorCQkiMTI6IlNMUiIgICUwLCU0XG4iCiAJCSIgICJBTFIiICAlMiwlNFxuIgogCQkiNToiTEhJIiAgJTQsLTFcbiIKIAkJIiAgIkFMUiIgICU0LCUwXG4iCS8qIGNvcHkgcmVtYWluaW5nIHNpemUsIHN1YnRyYWN0IDEgKi8KQEAgLTY1LDYgKzY1LDcgQEAKIAkJIjg6IlNMUiIgICUwLCUwXG4iCiAJCSI5OiBcbiIKIAkJRVhfVEFCTEUoMGIsM2IpIEVYX1RBQkxFKDJiLDNiKSBFWF9UQUJMRSg0Yiw1YikKKwkJRVhfVEFCTEUoMTBiLDNiKSBFWF9UQUJMRSgxMWIsM2IpIEVYX1RBQkxFKDEyYiw1YikKIAkJOiAiK2EiIChzaXplKSwgIithIiAocHRyKSwgIithIiAoeCksICIrYSIgKHRtcDEpLCAiPWEiICh0bXAyKQogCQk6IDogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBzaXplOwpAQCAtODUsMTIgKzg2LDEyIEBACiAJdG1wMSA9IC0yNTZVTDsKIAlhc20gdm9sYXRpbGUoCiAJCSIwOiBtdmNzICAwKCUwLCUxKSwwKCUyKSwlM1xuIgotCQkiICAganogICAgNWZcbiIKKwkJIjc6IGp6ICAgIDVmXG4iCiAJCSIxOiJBTFIiICAlMCwlM1xuIgogCQkiICAgbGEgICAgJTEsMjU2KCUxKVxuIgogCQkiICAgbGEgICAgJTIsMjU2KCUyKVxuIgogCQkiMjogbXZjcyAgMCglMCwlMSksMCglMiksJTNcbiIKLQkJIiAgIGpueiAgIDFiXG4iCisJCSI4OiBqbnogICAxYlxuIgogCQkiICAgaiAgICAgNWZcbiIKIAkJIjM6IGxhICAgICU0LDI1NSglMSlcbiIgLyogJTQgPSBwdHIgKyAyNTUgKi8KIAkJIiAgIkxISSIgICUzLC00MDk2XG4iCkBAIC05OSwxMSArMTAwLDEyIEBACiAJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLwogCQkiICAgam5oICAgNmZcbiIKIAkJIjQ6IG12Y3MgIDAoJTQsJTEpLDAoJTIpLCUzXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgorCQkiOToiU0xSIiAgJTAsJTRcbiIKIAkJIiAgIGogICAgIDZmXG4iCiAJCSI1OiJTTFIiICAlMCwlMFxuIgogCQkiNjogXG4iCiAJCUVYX1RBQkxFKDBiLDNiKSBFWF9UQUJMRSgyYiwzYikgRVhfVEFCTEUoNGIsNmIpCisJCUVYX1RBQkxFKDdiLDNiKSBFWF9UQUJMRSg4YiwzYikgRVhfVEFCTEUoOWIsNmIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IGM2MGJmYjMuLjI3NTdjNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMjc5LDcgKzI3OSwxMCBAQAogCS8qIGxldHMgY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gcmVwbGFjZSB0aGUgbW0gKi8KIAl0YXNrX2xvY2sodHNrKTsKIAlpZiAoIXRzay0+bW0gfHwgYXRvbWljX3JlYWQoJnRzay0+bW0tPm1tX3VzZXJzKSA+IDEgfHwKLQkgICAgdHNrLT5tbSAhPSB0c2stPmFjdGl2ZV9tbSB8fCAhaGxpc3RfZW1wdHkoJnRzay0+bW0tPmlvY3R4X2xpc3QpKSB7CisjaWZkZWYgQ09ORklHX0FJTworCSAgICAhaGxpc3RfZW1wdHkoJnRzay0+bW0tPmlvY3R4X2xpc3QpIHx8CisjZW5kaWYKKwkgICAgdHNrLT5tbSAhPSB0c2stPmFjdGl2ZV9tbSkgewogCQl0YXNrX3VubG9jayh0c2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yOTUsNyArMjk4LDEwIEBACiAJLyogTm93IGxldHMgY2hlY2sgYWdhaW4gaWYgc29tZXRoaW5nIGhhcHBlbmVkICovCiAJdGFza19sb2NrKHRzayk7CiAJaWYgKCF0c2stPm1tIHx8IGF0b21pY19yZWFkKCZ0c2stPm1tLT5tbV91c2VycykgPiAxIHx8Ci0JICAgIHRzay0+bW0gIT0gdHNrLT5hY3RpdmVfbW0gfHwgIWhsaXN0X2VtcHR5KCZ0c2stPm1tLT5pb2N0eF9saXN0KSkgeworI2lmZGVmIENPTkZJR19BSU8KKwkgICAgIWhsaXN0X2VtcHR5KCZ0c2stPm1tLT5pb2N0eF9saXN0KSB8fAorI2VuZGlmCisJICAgIHRzay0+bW0gIT0gdHNrLT5hY3RpdmVfbW0pIHsKIAkJbW1wdXQobW0pOwogCQl0YXNrX3VubG9jayh0c2spOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCBiOTQwNDI0Li44OGNkZWI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0zNyw3ICszNyw2IEBACiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCi0Jc2VsZWN0IEhBVkVfRlRSQUNFX1NZU0NBTExTCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaWYgTU1VCkBAIC0xMjIsNiArMTIxLDkgQEAKIAlib29sCiAJc2VsZWN0IEFSQ0hfU1VTUEVORF9QT1NTSUJMRQogCitjb25maWcgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUworCWJvb2wKKwogY29uZmlnIFNZU19TVVBQT1JUU19TTVAKIAlib29sCiAKQEAgLTE5Niw2ICsxOTgsNyBAQAogCXNlbGVjdCBDUFVfSEFTX1NSX1JCCiAJc2VsZWN0IENQVV9IQVNfRlBVIGlmICFDUFVfU0g0QUxfRFNQCiAJc2VsZWN0IFNZU19TVVBQT1JUU19UTVUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBNTVUKIAogY29uZmlnIENQVV9TSDRBCiAJYm9vbApAQCAtMjEwLDYgKzIxMyw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfSEFTX0ZQVQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfVE1VCisJc2VsZWN0IFNZU19TVVBQT1JUU19IVUdFVExCRlMgaWYgTU1VCiAKIGNvbmZpZyBDUFVfU0hYMgogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IGZjNTFhOTEuLjY2ZTQwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMTk5LDcgKzE5OSw3IEBACiBsaWJzLSQoQ09ORklHX1NVUEVSSDMyKQkJOj0gYXJjaC9zaC9saWIvCSQobGlicy15KQogbGlicy0kKENPTkZJR19TVVBFUkg2NCkJCTo9IGFyY2gvc2gvbGliNjQvICQobGlicy15KQogCi1CT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnNyZWMgXAorQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS5zcmVjIHVJbWFnZS5iaW4gXAogCSAgICAgICB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlCiBQSE9OWSArPSBtYWtldG9vbHMgJChCT09UX1RBUkdFVFMpIEZPUkNFCiAKQEAgLTIyNSw2ICsyMjUsNyBAQAogCUBlY2hvICcgIHZtbGludXguc3JlYwkgICAgICAgICAgIC0gQ3JlYXRlIGFuIEVMRiBTLXJlY29yZCcKIAlAZWNobyAnKiB1SW1hZ2UgIAkgICAgICAgICAgIC0gQWxpYXMgdG8gYm9vdGFibGUgVS1Cb290IGltYWdlJwogCUBlY2hvICcgIHVJbWFnZS5zcmVjCSAgICAgICAgICAgLSBDcmVhdGUgYW4gUy1yZWNvcmQgZm9yIFUtQm9vdCcKKwlAZWNobyAnICB1SW1hZ2UuYmluCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiaW4pJwogCUBlY2hvICcqIHVJbWFnZS5negkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoZ3ppcCknCiAJQGVjaG8gJyAgdUltYWdlLmJ6MgkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYnppcDIpJwogCUBlY2hvICcgIHVJbWFnZS5sem1hCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChsem1hKScKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKaW5kZXggMGEzN2M4Yi4uOTlmZmM1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMKQEAgLTIwNSw4ICsyMDUsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXByMl9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCV9fc2V0X2lvX3BvcnRfYmFzZSgweGEwMDAwMDAwKTsKLQogCS8qIHNldCBQaW4gU2VsZWN0IFJlZ2lzdGVyIEE6CiAJICogL1BDQ19DRDEsIC9QQ0NfQ0QyLCAgUENDX0JWRDEsIFBDQ19CVkQyLAogCSAqIC9JT0lTMTYsICBJUlE0LAlJUlE1LAkgIFVTQjFkX1NVU1BFTkQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jCmluZGV4IGViZTk5MjIuLmE0Yjc0MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYwpAQCAtNDIsOCArNDIsNiBAQAogCS8qIEFja25vd2xlZGdlIGFueSBwcmV2aW91cyBldmVudHMgKi8KIAkvKiBYWFggKi8KIAotCV9fc2V0X2lvX3BvcnRfYmFzZSgweGEwMDAwMDAwKTsKLQogCS8qIEFzc2lnbiBhbGwgdmlydHVhbCBJUlFzIHRvIHRoZSBTeXN0ZW0gQVNJQyBpbnQuIGhhbmRsZXIgKi8KIAlmb3IgKGkgPSBIV19FVkVOVF9JUlFfQkFTRTsgaSA8IEhXX0VWRU5UX0lSUV9NQVg7IGkrKykKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZzeXN0ZW1hc2ljX2ludCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwppbmRleCA5NmJjMTY5Li4zYjFjZWI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvcjhhNjY1OTcuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHNjMjAwNy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KICNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CkBAIC0zOCw2ICszOSwyMCBAQAogICogIDB4MTgwMF8wMDAwICBNRkkgICAgICAgICAgICAgIDE2Yml0CiAgKi8KIAorLyogU1dJVENICisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRFMyWzFdID0gRmxhc2hST00gd3JpdGUgcHJvdGVjdCAgT04gICAgIDogd3JpdGUgcHJvdGVjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGICAgIDogTm8gd3JpdGUgcHJvdGVjdAorICogRFMyWzJdID0gUk1JSSAvIFRTLCBTQ0lGICAgICAgICAgT04gICAgIDogUk1JSQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGICAgIDogVFMsIFNDSUYzCisgKiBEUzJbM10gPSBDYW1lcmEgLyBWaWRlbyAgICAgICAgICBPTiAgICAgOiBDYW1lcmEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IE5UU0MvUEFMIChJTikKKyAqIERTMls1XSA9IE5UU0NfT1VUIENsb2NrICAgICAgICAgIE9OICAgICA6IE9uIGJvYXJkIE9TQworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGICAgIDogU0g3NzI0IERWX0NMSworICogRFMyWzYtN10gPSBNTUMgLyBTRCAgICAgICAgICAgICAgT04tT0ZGIDogU0QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRi1PTiA6IE1NQworICovCisKIC8qIEhlYXJ0YmVhdCAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgbGVkX3Bvc1tdID0geyAwLCAxLCAyLCAzIH07CiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewpAQCAtNzAsNyArODUsNyBAQAogCQkubmFtZSA9ICJib290IGxvYWRlciIsCiAJCS5vZmZzZXQgPSAwLAogCQkuc2l6ZSA9ICg1ICogMTAyNCAqIDEwMjQpLAotCQkubWFza19mbGFncyA9IE1URF9DQVBfUk9NLAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KIAl9LCB7CiAJCS5uYW1lID0gImZyZWUtYXJlYSIsCiAJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCkBAIC0xMjEsNiArMTM2LDcgQEAKIHN0cnVjdCBzaF9ldGhfcGxhdF9kYXRhIHNoX2V0aF9wbGF0ID0gewogCS5waHkgPSAweDFmLCAvKiBTTVNDIExBTjg3MDAgKi8KIAkuZWRtYWNfZW5kaWFuID0gRURNQUNfTElUVExFX0VORElBTiwKKwkuZXRoZXJfbGlua19hY3RpdmVfbG93ID0gMQogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hfZXRoX2RldmljZSA9IHsKQEAgLTM3NSw2ICszOTEsNDMgQEAKIAl9LAogfTsKIAorLyogVG91Y2hTY3JlZW4gKi8KKyNkZWZpbmUgSVJRMCAzMgorc3RhdGljIGludCB0c19nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCWludCB2YWwgPSAwOworCWdwaW9fZnJlZShHUElPX0ZOX0lOVENfSVJRMCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRaMCwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVFowKTsKKworCXZhbCA9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUFRaMCk7CisKKwlncGlvX2ZyZWUoR1BJT19QVFowKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JTlRDX0lSUTAsIE5VTEwpOworCisJcmV0dXJuIHZhbCA/IDAgOiAxOworfQorCitzdGF0aWMgaW50IHRzX2luaXQodm9pZCkKK3sKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JTlRDX0lSUTAsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdHNjMjAwN19wbGF0Zm9ybV9kYXRhIHRzYzIwMDdfaW5mbyA9IHsKKwkubW9kZWwJCQk9IDIwMDcsCisJLnhfcGxhdGVfb2htcwkJPSAxODAsCisJLmdldF9wZW5kb3duX3N0YXRlCT0gdHNfZ2V0X3BlbmRvd25fc3RhdGUsCisJLmluaXRfcGxhdGZvcm1faHcJPSB0c19pbml0LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB0c19pMmNfY2xpZW50cyA9IHsKKwlJMkNfQk9BUkRfSU5GTygidHNjMjAwNyIsIDB4NDgpLAorCS50eXBlCQk9ICJ0c2MyMDA3IiwKKwkucGxhdGZvcm1fZGF0YQk9ICZ0c2MyMDA3X2luZm8sCisJLmlycQkJPSBJUlEwLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVjb3ZlY19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmaGVhcnRiZWF0X2RldmljZSwKIAkmbm9yX2ZsYXNoX2RldmljZSwKQEAgLTQ1OSw2ICs1MTIsMTEgQEAKICNkZWZpbmUgSU9EUklWRUEgIDB4QTQwNTAxOEEKIHN0YXRpYyBpbnQgX19pbml0IGFyY2hfc2V0dXAodm9pZCkKIHsKKwkvKiBlbmFibGUgU1RBVFVTMCwgU1RBVFVTMiBhbmQgUERTVEFUVVMgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TVEFUVVMwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TVEFUVVMyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QRFNUQVRVUywgTlVMTCk7CisKIAkvKiBlbmFibGUgU0NJRkEwICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRjBfVFhELCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TQ0lGMF9SWEQsIE5VTEwpOwpAQCAtNTg5LDYgKzY0NywxMCBAQAogCQkgKi8KIAkJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRGNCwgTlVMTCk7CiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BURjQsIDEpOworCisJCS8qIGVuYWJsZSBUb3VjaFNjcmVlbiAqLworCQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmdHNfaTJjX2NsaWVudHMsIDEpOworCQlzZXRfaXJxX3R5cGUoSVJRMCwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKIAl9CiAKIAkvKiBlbmFibGUgQ0VVMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCmluZGV4IDI1Y2RmNzM1Li41MjgwMTMxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTM1LDcgKzM0LDcgQEAKIAlpbnQgbWlub3I7CiAJaW50IHJldCA9IC1FTk9FTlQ7CiAKLQlsb2NrX2tlcm5lbCgpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCW1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CiAJaWYgKG1pbm9yIDwgREVWQ09VTlQpIHsKIAkJaWYgKG9wZW5DbnQgPiAwKSB7CkBAIC00NSw3ICs0NCw3IEBACiAJCQlyZXQgPSAwOwogCQl9CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYwLDggKzU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgZ2lvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YTsKIAlzdGF0aWMgdW5zaWduZWQgaW50IGFkZHIgPSAwOwpAQCAtMTI5LDcgKzEyNyw3IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBnaW9fb3BlbiwJLyogb3BlbiAqLwogCS5yZWxlYXNlID0gZ2lvX2Nsb3NlLAkvKiByZWxlYXNlICovCi0JLmlvY3RsID0gZ2lvX2lvY3RsLAkvKiBpb2N0bCAqLworCS51bmxvY2tlZF9pb2N0bCA9IGdpb19pb2N0bCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGdpb19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCmluZGV4IDRhZjNhNzcuLmMzNzYxN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCkBAIC0xMSwxMCArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMKaW5kZXggYWY2NGQwMy4uYTVjMGRmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9zZXR1cC5jCkBAIC0xNSwxNCArMTUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2lmZGVmIENPTkZJR19NVEQKICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjZW5kaWYKICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydGl0aW9uczsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHJza19wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZQkJPSAiQm9vdGxvYWRlciIsCkBAIC00MSw2ICszOSw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBmbGFzaF9kYXRhID0geworCS5wYXJ0cwkJPSByc2tfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHJza19wYXJ0aXRpb25zKSwKIAkud2lkdGgJCT0gMiwKIH07CiAKQEAgLTYwLDcgKzYwLDggQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2hfbXRkOworI2lmZGVmIENPTkZJR19NVEQKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9pbmZvIHJza19mbGFzaF9tYXAgPSB7CiAJLm5hbWUJCT0gIlJTSysgRmxhc2giLApAQCAtNjgsNiArNjksMTAgQEAKIAkuYmFua3dpZHRoCT0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoX210ZDsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydGl0aW9uczsKKwogc3RhdGljIHZvaWQgX19pbml0IHNldF9tdGRfcGFydGl0aW9ucyh2b2lkKQogewogCWludCBucl9wYXJ0cyA9IDA7CkBAIC03NywxNCArODIsMTQgQEAKIAlucl9wYXJ0cyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKGZsYXNoX210ZCwgcHJvYmVzLAogCQkJCQkmcGFyc2VkX3BhcnRpdGlvbnMsIDApOwogCS8qIElmIHRoZXJlIGlzIG5vIHBhcnRpdGlvbiB0YWJsZSwgdXNlZCB0aGUgaGFyZCBjb2RlZCB0YWJsZSAqLwotCWlmIChucl9wYXJ0cyA8PSAwKSB7Ci0JCWZsYXNoX2RhdGEucGFydHMgPSByc2tfcGFydGl0aW9uczsKLQkJZmxhc2hfZGF0YS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUocnNrX3BhcnRpdGlvbnMpOwotCX0gZWxzZSB7CisJaWYgKG5yX3BhcnRzID4gMCkgewogCQlmbGFzaF9kYXRhLm5yX3BhcnRzID0gbnJfcGFydHM7CiAJCWZsYXNoX2RhdGEucGFydHMgPSBwYXJzZWRfcGFydGl0aW9uczsKIAl9CiB9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldF9tdGRfcGFydGl0aW9ucyh2b2lkKSB7fQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyc2tfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmZsYXNoX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMKaW5kZXggMDA5NzNlMC4uZTc4YzNiZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvcjhhNjY1OTcuaD4KICNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgogI2luY2x1ZGUgPG1lZGlhL3NoX21vYmlsZV9jZXUuaD4KKyNpbmNsdWRlIDxzb3VuZC9zaF9mc2kuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CiAjaW5jbHVkZSA8YXNtL3NoX2V0aC5oPgpAQCAtMjU1LDYgKzI1Niw2NSBAQAogCX0sCiB9OwogCisvKiBGU0kgKi8KKy8qCisgKiBGU0ktQSB1c2UgZXh0ZXJuYWwgY2xvY2sgd2hpY2ggY2FtZSBmcm9tIGFrNDY0eC4KKyAqIFNvLCB3ZSBzaG91bGQgY2hhbmdlIHBhcmVudCBvZiBmc2kKKyAqLworI2RlZmluZSBGQ0xLQUNSCQkweGE0MTUwMDA4CitzdGF0aWMgdm9pZCBmc2ltY2tfaW5pdChzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHN0YXR1cyA9IGN0cmxfaW5sKGNsay0+ZW5hYmxlX3JlZyk7CisKKwkvKiB1c2UgZXh0ZXJuYWwgY2xvY2sgKi8KKwlzdGF0dXMgJj0gfjB4MDAwMDAwZmY7CisJc3RhdHVzIHw9IDB4MDAwMDAwODA7CisJY3RybF9vdXRsKHN0YXR1cywgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGZzaW1ja19jbGtfb3BzID0geworCS5pbml0ID0gZnNpbWNrX2luaXQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmc2ltY2thX2NsayA9IHsKKwkubmFtZQkJPSAiZnNpbWNrYV9jbGsiLAorCS5pZAkJPSAtMSwKKwkub3BzCQk9ICZmc2ltY2tfY2xrX29wcywKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilGQ0xLQUNSLAorCS5yYXRlCQk9IDAsIC8qIHVua25vd24gKi8KK307CisKK3N0cnVjdCBzaF9mc2lfcGxhdGZvcm1faW5mbyBmc2lfaW5mbyA9IHsKKwkucG9ydGFfZmxhZ3MgPSBTSF9GU0lfQlJTX0lOViB8CisJCSAgICAgICBTSF9GU0lfT1VUX1NMQVZFX01PREUgfAorCQkgICAgICAgU0hfRlNJX0lOX1NMQVZFX01PREUgfAorCQkgICAgICAgU0hfRlNJX09GTVQoUENNKSB8CisJCSAgICAgICBTSF9GU0lfSUZNVChQQ00pLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmc2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJGU0kiLAorCQkuc3RhcnQJPSAweEZFM0MwMDAwLAorCQkuZW5kCT0gMHhGRTNDMDIxZCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAxMDgsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZnNpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfZnNpIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZnNpX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gZnNpX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZmc2lfaW5mbywKKwl9LAorfTsKKwogLyogS0VZU0MgaW4gU29DIChOZWVkcyBTVzMzLTIgc2V0IHRvIE9OKSAqLwogc3RhdGljIHN0cnVjdCBzaF9rZXlzY19pbmZvIGtleXNjX2luZm8gPSB7CiAJLm1vZGUgPSBTSF9LRVlTQ19NT0RFXzEsCkBAIC0zOTksNiArNDU5LDcgQEAKIAkmc2hfZXRoX2RldmljZSwKIAkmc2g3NzI0X3VzYjBfaG9zdF9kZXZpY2UsCiAJJnNoNzcyNF91c2IxX2dhZGdldF9kZXZpY2UsCisJJmZzaV9kZXZpY2UsCiB9OwogCiAjZGVmaW5lIEVFUFJPTV9PUCAgIDB4QkEyMDYwMDAKQEAgLTQ2NiwxMSArNTI3LDEzIEBACiBzdGF0aWMgaW50IF9faW5pdCBkZXZpY2VzX3NldHVwKHZvaWQpCiB7CiAJdTE2IHN3ID0gY3RybF9pbncoU1c0MTQwKTsgLyogc2VsZWN0IGNhbWVyYSwgbW9uaXRvciAqLworCXN0cnVjdCBjbGsgKmZzaWFfY2xrOwogCiAJLyogUmVzZXQgUmVsZWFzZSAqLwogCWN0cmxfb3V0dyhjdHJsX2ludyhGUEdBX09VVCkgJgogCQkgIH4oKDEgPDwgMSkgIHwgLyogTEFOICovCiAJCSAgICAoMSA8PCA2KSAgfCAvKiBWSURFTyBEQUMgKi8KKwkJICAgICgxIDw8IDcpICB8IC8qIEFLNDY0MyAqLwogCQkgICAgKDEgPDwgMTIpIHwgLyogVVNCMCAqLwogCQkgICAgKDEgPDwgMTQpKSwgLyogUk1JSSAqLwogCQkgIEZQR0FfT1VUKTsKQEAgLTYwOSw2ICs2NzIsMzIgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQxLCAgICAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgICAgIE5VTEwpOwogCisJLyogZW5hYmxlIEZTSSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU1DS0IsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU1DS0EsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9BU0QsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlBQkNLLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlBTFJDSywgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9BQkNLLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9BTFJDSywgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NMS0FVRElPQU8sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlCU0QsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9CU0QsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlCQkNLLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlCTFJDSywgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9CQkNLLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9CTFJDSywgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NMS0FVRElPQk8sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlBU0QsICAgIE5VTEwpOworCisJLyogY2hhbmdlIHBhcmVudCBvZiBGU0kgQSAqLworCWZzaWFfY2xrID0gY2xrX2dldChOVUxMLCAiZnNpYV9jbGsiKTsKKwljbGtfcmVnaXN0ZXIoJmZzaW1ja2FfY2xrKTsKKwljbGtfc2V0X3BhcmVudChmc2lhX2NsaywgJmZzaW1ja2FfY2xrKTsKKwljbGtfc2V0X3JhdGUoZnNpYV9jbGssIDExMDAwKTsKKwljbGtfc2V0X3JhdGUoJmZzaW1ja2FfY2xrLCAxMTAwMCk7CisJY2xrX3B1dChmc2lhX2Nsayk7CisKIAkvKgogCSAqIGVuYWJsZSBTSC1FdGgKIAkgKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L01ha2VmaWxlIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCmluZGV4IGExMzE2ODcuLmNiOGNmNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKQEAgLTIwLDExICsyMCwxMiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQJPz0gMHgwMDAwMTAwMAogQ09ORklHX0VOVFJZX09GRlNFVAk/PSAweDAwMDAxMDAwCiAKK3N1ZmZpeC15IDo9IGJpbgogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9HWklQKSAgOj0gZ3oKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfQlpJUDIpIDo9IGJ6Mgogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk1BKSAgOj0gbHptYQogCi10YXJnZXRzIDo9IHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UgdUltYWdlIHVJbWFnZS5zcmVjIHVJbWFnZS5neiB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hCit0YXJnZXRzIDo9IHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UgdUltYWdlIHVJbWFnZS5zcmVjIHVJbWFnZS5neiB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hIHVJbWFnZS5iaW4KIGV4dHJhLXkgKz0gdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEKIHN1YmRpci0gOj0gY29tcHJlc3NlZCByb21pbWFnZQogCkBAIC04OCw2ICs4OSw5IEBACiAkKG9iaikvdUltYWdlLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbi5sem1hCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bWEpCiAKKyQob2JqKS91SW1hZ2UuYmluOiAkKG9iaikvdm1saW51eC5iaW4KKwkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2Usbm9uZSkKKwogT0JKQ09QWUZMQUdTX3ZtbGludXguc3JlYyA6PSAtSSBiaW5hcnkgLU8gc3JlYwogJChvYmopL3ZtbGludXguc3JlYzogJChvYmopL2NvbXByZXNzZWQvdm1saW51eAogCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZwppbmRleCA2YzM4YTQzLi4yZjc4ZDAxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxNjowNDoxMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgRnJpIFNlcCAyNSAxMToyMjo1MCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDcgKzI5LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUxLDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODgsMTggKzk4LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMDcsNiArMTE4LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExOSw3ICsxMzQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTM1LDcgKzE1MCw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xNjksNiArMTg0LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMz15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTYsNyArMzEzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MSBjb25zb2xlPXR0eVNDNSwzODQwMCByb290PS9kZXYvbmZzIGlwPWRoY3AiCiAKICMKQEAgLTMxNiw3ICszMzQsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM2NCw2ICszODgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Myw2ICs0MTgsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDAsNyArNDI2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDEzLDYgKzQzOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyMiw5ICs0NDgsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ4MCw2ICs1MDYsNyBAQAogIwogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTU4Myw3ICs2MTAsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNjM3LDEyICs2NjMsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzI2LDYgKzc1MCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03MzYsNiArNzYxLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKQEAgLTc1Nyw5ICs3ODMsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTc4MCw2ICs4MDMsMTEgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldApAQCAtODA0LDExICs4MzIsMTUgQEAKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgyOCw4ICs4NjAsMTIgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIApAQCAtOTU3LDYgKzk5Myw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTk5Miw2ICsxMDMwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMDAzLDYgKzEwNDIsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTA1Niw4ICsxMDk2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEyMiw3ICsxMTY0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwMiw2ICsxMjQzLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIxMiw4ICsxMjU0LDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMjIxLDYgKzEyNjYsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjM0LDcgKzEyODAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyNzUsMTEgKzEzMjAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTM0MSw1ICsxMzg4LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2RyZWFtY2FzdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZwppbmRleCA5NTcxN2EwLi5hZWRiZDRmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI0OjQ4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU2OjA3IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw3ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTg2LDE5ICs5NiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEwOCw2ICsxMTksMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIwLDcgKzEzNSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjcsNiArMTgyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE4LDYgKzIzNCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMyMiw3ICszMzksOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcGFuaWM9MyIKIAogIwpAQCAtMzk1LDYgKzQxMyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDI0LDYgKzQ0Myw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQzMSw3ICs0NTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NDQsNiArNDYzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ5Niw3ICs1MTYsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC01NjEsMTAgKzU4NSw3IEBACiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjA1LDEzICs2MjYsMTQgQEAKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9NQVBMRT15CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CkBAIC02NzUsMTEgKzY5NywxNSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTcxNiw2ICs3NDIsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTgwNyw3ICs4MzQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtODYxLDggKzg4NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC05MjIsNyArOTUwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC05NDksNiArOTc2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk1OCw4ICs5ODYsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC05NjcsNiArOTk4LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtOTgwLDcgKzEwMTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTAxMiwxMSArMTA0MywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDc5LDUgKzExMTIsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZwppbmRleCA5YTIyYzY0Li4wNzc0OTI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNC1yb21pbWFnZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM3Ci0jIFR1ZSBTZXAgIDggMTM6NTY6MTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NTY6NDEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNTksMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC03OSwxNSArODAsOSBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQ9MAotQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRD0wCiBDT05GSUdfUkRfR1pJUD15CiAjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTUEgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTEwNywyMCArMTAyLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTIzNyw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTksNyArMzE0LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCIKIAogIwpAQCAtMzgyLDYgKzM3OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDIyLDYgKzQxOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTUzMCwxMCArNTI4LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjI1LDYgKzYyMCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY1Nyw5ICs2NTMsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTY5MywxMSArNjg2LDE0IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzE3LDYgKzcxMyw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTc3MSw2ICs3NjgsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKQEAgLTg3NSw2ICs4NzMsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX0ZTTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtOTc1LDYgKzk3NCw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05ODksNyArOTg5LDcgQEAKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9TWVNDQUxMUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcKaW5kZXggMjA1MGE3Ni4uYWM2NDY5NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNwotIyBXZWQgQXVnIDI2IDA5OjA5OjA3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjQ1OjM5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTYwLDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTcsMjAgKzk4LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTIzMiw2ICsyMzIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTQsNyArMzE1LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCwgY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCBtZW09MTIwTSBtZW1jaHVuay52cHU9NG0iCiAKICMKQEAgLTM4OCw2ICszOTAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjAsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MjQsNyArNDI4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDM3LDYgKzQ0MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ0Niw5ICs0NTAsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUwNCw2ICs1MDgsNyBAQAogIwogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTY2NiwxMCArNjcxLDcgQEAKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzEzLDExICs3MTUsMTUgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQz15CkBAIC03NzEsNiArNzc3LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgwNCw5ICs4MTEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg1NiwxMSArODYwLDE1IEBACiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04ODAsOCArODg4LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC05MzYsOCArOTQ2LDEwIEBACiBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVT15CiAjIENPTkZJR19WNExfVVNCX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX1JBRElPX0FEQVBURVJTPXkKKyMgQ09ORklHX0kyQ19TSTQ3MTMgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0k0NzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSTQ3MFggaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0k0NzBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NUjgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQURJT19URUE1NzY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CkBAIC0xMDAzLDcgKzEwMTUsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMjYsNiArMTAzNyw3IEBACiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTA3MCw2ICsxMDgyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC0xMTYxLDYgKzExNzQsOCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NQST15CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC0xMjA4LDYgKzEyMjMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTI2NSw2ICsxMjgxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEzMjksNyArMTM0Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE0MDksNiArMTQyNSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDIzLDcgKzE0NDAsNyBAQAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX0hBVkVfRlRSQUNFX1NZU0NBTExTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNDQ2LDcgKzE0NjMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0ODcsMTEgKzE1MDMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzcwNV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZwppbmRleCA0OTc0MTRjLi44NmM5YmMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI1OjM1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU3OjEzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNiw3ICsyNyw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzYsMTcgKzM5LDI0IEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogCiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldApAQCAtNzAsMTggKzgwLDE5IEBACiAjIENPTkZJR19FVkVOVEZEIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTg5LDYgKzEwMCwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19CQVNFX1NNQUxMPTEKQEAgLTEyNSw2ICsxNDAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0xNjUsNyArMTgxLDYgQEAKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0xNzMsNiArMTg4LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjUwLDcgKzI2Niw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTMyMSwxMSArMzM4LDE0IEBACiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNDA5LDYgKzQyOSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CkBAIC00MTYsOCArNDM3LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtNDI1LDYgKzQ0OSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTQ0OSw0ICs0NzQsNSBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzc2MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZwppbmRleCA3NzY4NGVkLi40YzBmODJiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI1OjU1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU3OjMwIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Il9lZG9zazc3NjAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUxLDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwpAQCAtOTEsMTkgKzEwMSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTEyLDYgKzEyMywxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjQsNyArMTM5LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3MSw2ICsxODYsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTYsNiArMjMyLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzA0LDcgKzMyMSw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAyMDAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTQzIsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0xOTIuMTY4LjAuMzovc2NyaXB0cy9maWxlc3lzIGlwPTE5Mi4xNjguMC40IgogCiAjCkBAIC0zNjcsNiArMzg1LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTYsNiArNDE1LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDAzLDcgKzQyMyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxNiw2ICs0MzUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNiw5ICs0NDYsOSBAQAogQ09ORklHX01URD15CiBDT05GSUdfTVREX0RFQlVHPXkKIENPTkZJR19NVERfREVCVUdfVkVSQk9TRT0wCisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NjMsMTAgKzU4Myw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY0OSw2ICs2NjYsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjU5LDYgKzY3Nyw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NINzc2MD15CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKQEAgLTY4MCwyMCArNjk5LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CiBDT05GSUdfSTJDX0RFQlVHX0JVUz15CiBDT05GSUdfSTJDX0RFQlVHX0NISVA9eQogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTcxMiw4ICs3MzIsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC04MzcsOCArODU5LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTAwLDcgKzkyNCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTc0LDYgKzk5Nyw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTAxMCwxOCArMTAzNCwyMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKQEAgLTEwMjksNiArMTA1OCw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTA0NSwxMSArMTA3NSwxMSBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmU4MDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xMDY0LDcgKzEwOTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQpAQCAtMTEwMCwxMSArMTEyOSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTE2OCw1ICsxMTk5LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCmluZGV4IDg4MTEyOGUuLjliNzg1NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyNzoyMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxNzo1ODoxOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDYgKzQwLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ4LDExICs1NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTIsMTkgKzEwMiwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNCw2ICsxMjYsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI1LDcgKzE0Miw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzMsNiArMTkwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2Mz15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNCw3ICsyMzIsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMjIsNiArMjM5LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAzLDcgKzMyMSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCIKIAogIwpAQCAtMzcxLDYgKzM5MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDEyLDYgKzQzMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyMSw5ICs0NDIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDc3LDYgKzQ5OCw3IEBACiBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQogQ09ORklHX01URF9QSFlTTUFQPXkKICMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTU0LDcgKzU3Niw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02MTAsMTAgKzYzMSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcwNSwxMSArNzIzLDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODE5LDYgKzg0MSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC04ODgsNiArOTExLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTkzMCw4ICs5NTQsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC05OTcsNyArMTAyMyw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEwNzEsNiArMTA5Niw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDgyLDExICsxMTA4LDE1IEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC0xMDk2LDYgKzExMjYsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTA5LDcgKzExNDAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTE0MSwxMSArMTE3MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMjA4LDUgKzEyNDAsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZwppbmRleCAzMjQ5ZDQ2Li5mNTliZTQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyODoxMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxNzo1OTo0NSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CkBAIC00NiwxMSArNTUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTgxLDE4ICs5MSwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTAwLDYgKzExMSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMDcsNyArMTIyLDcgQEAKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNTQsNiArMTY5LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMTk5LDYgKzIxNSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI4OCw3ICszMDUsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMjIsNiArMzQwLDcgQEAKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQogIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAogQ09ORklHX0FQTV9FTVVMQVRJT049eQorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVQgaXMgbm90IHNldAogCkBAIC0zOTAsNyArNDA5LDYgQEAKICMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTM5OSw2ICs0MTcsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC00MjgsMTMgKzQ0NywxNCBAQAogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0hQNlhYPXkKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC00NTIsNiArNDcyLDcgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCkBAIC01MDcsMTEgKzUyOCwxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY2Myw3ICs2ODgsOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNzI1LDcgKzc1Miw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtNzgyLDYgKzgwOCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC03OTEsOCArODE4LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtODAwLDYgKzgzMCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTgxMyw3ICs4NDQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTg1NCwxMSArODg0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC05MjAsNCArOTUyLDUgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9rZnIycjA5LXJvbWltYWdlX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9rZnIycjA5LXJvbWltYWdlX2RlZmNvbmZpZwppbmRleCBjMGY5MjYzLi4wMjU5MGUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOS1yb21pbWFnZV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNgotIyBUaHUgQXVnIDIwIDE1OjA5OjE2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjAxOjQ4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTU4LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtNzgsMTUgKzc5LDkgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfSU5JVFJBTUZTX1JPT1RfVUlEPTAKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQ9MAogQ09ORklHX1JEX0daSVA9eQogIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0daSVA9eQotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC0xMDYsMjAgKzEwMSwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xNzMsNiArMTY3LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxOSw2ICsyMTQsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDEsNyArMjk3LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCBxdWlldCIKIAogIwpAQCAtMzI0LDYgKzMyMSw3IEBACiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzYyLDYgKzM2MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAyLDYgKzQwMSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ4OSw2ICs0ODksNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC01MjAsOSArNTIxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC01NTYsMTEgKzU1NCwxNCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTU4MCw2ICs1ODEsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC03MTgsNiArNzIwLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTczMiw3ICs3MzUsNyBAQAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX0hBVkVfRlRSQUNFX1NZU0NBTExTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOV9kZWZjb25maWcKaW5kZXggY2VmNjEzMS4uOGFlNjVkMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2tmcjJyMDlfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9rZnIycjA5X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzYKLSMgVGh1IEF1ZyAyMCAyMTo1ODo1MiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgRnJpIFNlcCAyNSAxMTo1NDoyMiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC02MCwxMSArNjAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEwMiwyMCArMTAzLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTE5MCw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyND15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjM2LDYgKzIzNyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxOSw3ICszMjEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MxLDExNTIwMCIKIAogIwpAQCAtMzQzLDYgKzM0Niw3IEBACiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQpAQCAtMzgzLDYgKzM4Nyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDIzLDYgKzQyOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQzMiw5ICs0MzgsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUwMCw3ICs1MDYsMTIgQEAKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkQ9eQorIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT05FTkFORF9HRU5FUklDPXkKKyMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF8yWF9QUk9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX1NJTSBpcyBub3Qgc2V0CiAKICMKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKQEAgLTU2NCwxMSArNTc1LDE1IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0M9eQpAQCAtNjIxLDYgKzYzNiw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY1Myw5ICs2NjksNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTY4OSwxMSArNzAyLDE0IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzEzLDYgKzcyOSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTg1Niw2ICs4NzMsOCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKQEAgLTk0MSw2ICs5NjAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTAwMiw2ICsxMDIyLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwMTYsNyArMTAzNyw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZwppbmRleCBiYTA1NzM5Li5jMmE5YTM5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6Mjg6NDUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MDU6NDkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDcgKzI5LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OSwxMSArNTgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODMsMTkgKzkzLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDQsNiArMTE1LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNiw3ICsxMzEsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYzLDYgKzE3OCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwOCw2ICsyMjQsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTUsNyArMzEyLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC00MTEsNiArNDI5LDcgQEAKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDIsNiArNDYxLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQ5LDcgKzQ2OSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2Miw2ICs0ODEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC02MzEsNiArNjUxLDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CkBAIC02NTMsNyArNjc0LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzI5LDYgKzc1NCw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzU0LDEwICs3ODAsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NjgsMTAgKzg5MSwyMCBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTg4Niw5ICs5MTksNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTEwLDYgKzk0MSw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05MjgsMTEgKzk2MCwxMSBAQAogQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfU09VTkQ9bQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiAjIENPTkZJR19TTkQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EX1BSSU1FPW0KIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC05NjEsNiArOTkzLDcgQEAKIENPTkZJR19ISURfRVpLRVk9bQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPW0KKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9bQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTAxMSw2ICsxMDQ0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTExNzcsOCArMTIxMSwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI1MSw3ICsxMjg3LDYgQEAKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzMzEsNiArMTM2Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzQwLDggKzEzNzYsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMzUwLDYgKzEzODksNyBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTM2Myw3ICsxNDAzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEzOTUsMTEgKzE0MzQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTQ2Miw1ICsxNTAzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnCmluZGV4IGMwYmMyZmQuLmVjMGMwYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyOTo1MCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODowOTo1OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04MywxOSArOTMsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwNCw2ICsxMTUsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE2LDcgKzEzMSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjMsNiArMTc4LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjA4LDYgKzIyNCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5NSw3ICszMTIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKQEAgLTQxMSw2ICs0MjksNyBAQAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0MCw2ICs0NTksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDcsNyArNDY3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDYwLDYgKzQ3OSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU3MiwxMiArNTkyLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTk5LDYgKzYyMSw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjI3LDYgKzY1MCw3IEBACiAjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjQ1LDcgKzY2OSwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTcyNSw2ICs3NTMsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTc1MCwxMCArNzc5LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODYzLDEwICs4ODksMjAgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC04ODEsOSArOTE3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTkwNSw2ICs5MzksNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTIzLDcgKzk1OCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDIxLDggKzEwNTUsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwODksNyArMTEyNSw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTExNTUsNiArMTE5MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTY0LDggKzEyMDAsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMTc0LDYgKzEyMTMsNyBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTE4Nyw3ICsxMjI3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEyMTksMTEgKzEyNTgsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI4Niw1ICsxMzI3LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21hZ2ljcGFuZWxyMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZwppbmRleCBjNTg1OWU4Li43OTA5MWUzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjMwOjMxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjEwOjQ5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTkxLDE4ICsxMDEsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTExMSw2ICsxMjIsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIzLDcgKzEzOCw3IEBACiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3MCw2ICsxODUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTUsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzA2LDcgKzMyMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM2OCw2ICszODYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MTYsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDI0LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE3LDYgKzQzNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjgsOSArNDQ4LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CkBAIC01ODksMTAgKzYwOSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYzMSwxMyArNjQ4LDE1IEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldApAQCAtNzAxLDYgKzcyMCwxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKQEAgLTcyMSwxMSArNzQ1LDE0IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODI5LDggKzg1NiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC05MDAsNyArOTI5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtOTc2LDYgKzEwMDQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwMDYsMjQgKzEwMzUsMzAgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTEwMzYsMTYgKzEwNzEsMTUgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhhNDQzMDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNzcsNSArMTExMSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnCmluZGV4IGU1YTIxZTEuLjZiYjU5NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjMxOjU2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjE0OjM1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CkBAIC00OSwxMSArNTgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODcsMTggKzk3LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMDYsNiArMTE3LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExMyw3ICsxMjgsNyBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2MCw2ICsxNzUsNyBAQAogQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDI9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjExLDYgKzIyNyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5Niw3ICszMTMsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L2hkYTEiCiAKICMKQEAgLTM2NCw2ICszODIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Myw2ICs0MTIsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDAsNyArNDIwLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDEzLDYgKzQzMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDk5LDEwICs1MTksNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTU2MSwxMCArNTc4LDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC01NzUsOSArNjAyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY2Miw4ICs2ODcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTcyNiwxMiArNzUzLDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtODAzLDYgKzgzMCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04MTIsOCArODQwLDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtODIxLDYgKzg1Miw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTgzNCw3ICs4NjYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTg3NSwxMSArOTA2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC05NDMsNSArOTc2LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKaW5kZXggYjE4Y2ZkMy4uNjUwMTgyOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTY6MDY6NDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MTc6NDEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw3ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC04OSwxOSArOTksMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMTEsNiArMTIzLDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMiw3ICsxMzksNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTM4LDcgKzE1NSw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE3Myw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMjQsNiArMjQyLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzA4LDcgKzMyNyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzAsMTE1MjAwIGVhcmx5cHJpbnRrPXNlcmlhbCBpcD1vbiByb290PS9kZXYvbmZzIGlwPWRoY3AiCiAKICMKQEAgLTMyOCw3ICszNDgsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM3Niw2ICs0MDIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwNiw2ICs0MzMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MTQsNyArNDQyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDI3LDYgKzQ1NCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KQEAgLTQzNiw5ICs0NjQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU4NSw3ICs2MTMsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNjIxLDEwICs2NDgsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NTksMTQgKzY4MywxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0M9eQorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTcxNSw2ICs3NDQsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03MjUsNiArNzU1LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKQEAgLTc0NiwxNSArNzc3LDE3IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldApAQCAtNzc3LDExICs4MTAsMTQgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MDEsOCArODM3LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfU1VQUE9SVD15CiAKQEAgLTkyMiw3ICs5NjAsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtOTUyLDEzICs5ODksMTMgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX002NjU5Mj15CiBDT05GSUdfVVNCX002NjU5Mj15Ci1DT05GSUdfU1VQRVJIX0JVSUxUX0lOX002NjU5Mj15CiAjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKQEAgLTEwMTcsNiArMTA1NCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTA2NCw4ICsxMTAyLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTExMjYsNyArMTE2Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTE2MSw2ICsxMjAwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTcyLDExICsxMjEyLDE1IEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC0xMTg4LDYgKzEyMzIsNyBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmUwMDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIwMSw3ICsxMjQ2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQpAQCAtMTI0MCwxMSArMTI4NCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMzA4LDUgKzEzNTQsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKaW5kZXggNjdlZGQzZi4uN2ZjMTk1MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjMzOjI4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjIwOjUzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTEsMTggKzEwMSwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTExLDYgKzEyMiwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjMsNyArMTM4LDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzAsNiArMTg1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE1LDYgKzIzMSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMiw3ICszMTksOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT1qZmZzMiBtZW09NjNNIG10ZHBhcnRzPXBoeXNtYXAtZmxhc2guMDoweDAwMTAwMDAwKGJvb3Rsb2FkZXIpcm8sMHgwMDUwMDAwMChLZXJuZWwpcm8sMHgwMEEwMDAwMChGaWxlc3lzdGVtKSIKIAogIwpAQCAtMzYzLDYgKzM4MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAzLDYgKzQyMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQxNCw5ICs0MzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTc3LDEwICs1OTcsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NjYsMTEgKzY4MywxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc3MCw4ICs3OTEsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODQxLDcgKzg2NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTg3Nyw2ICs4OTksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTE2LDE4ICs5MzksMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NHPXkKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKQEAgLTkzNSw2ICs5NjMsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTk0NywxNiArOTc2LDE1IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4MDAwMDAwMDAKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGE0MDAwMTUwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTg3LDUgKzEwMTUsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKaW5kZXggMTA3YThlMy4uOTAzYjAyMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjM0OjQ0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjI0OjMxIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw4ICsyOSwxMCBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTIsMjAgKzEwMiwyMiBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNSw2ICsxMjcsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI2LDcgKzE0Myw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzQsNiArMTkxLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKQEAgLTIyOSw2ICsyNDcsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTUsNyArMzM0LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSIKIAogIwpAQCAtMzk2LDYgKzQxNiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiBDT05GSUdfU1RQPW0KQEAgLTQyOCw2ICs0NDksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MzYsNyArNDU4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDQ5LDYgKzQ3MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KQEAgLTQ2MCw5ICs0ODIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01MTMsNiArNTM1LDcgQEAKIENPTkZJR19NVERfUEhZU01BUD15CiAjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC02NTEsMTEgKzY3NCwxMyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY3Nyw2ICs3MDIsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTcwNCw2ICs3MzAsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MjIsNyArNzQ5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtODA0LDYgKzgzNSw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtODI5LDEwICs4NjEsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NzMsMTMgKzkwMiwxNyBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTMzLDYgKzk2Niw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTYxLDYgKzk5NSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19ISUdITEFOREVSPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CkBAIC05ODcsMTkgKzEwMjIsMjYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwNDksNiArMTA5MSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNjAsNyArMTEwMyw2IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CkBAIC0xMDgxLDE0ICsxMTIzLDE3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTEwMSwxMSArMTE0NiwxMSBAQAogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD1tCiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKICMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9bQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTE2OSw2ICsxMjE0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMjIxLDggKzEyNjcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjg5LDEyICsxMzM3LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTM3MCw2ICsxNDE4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQwNCwyMSArMTQ1MywyNyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC0xNDI3LDYgKzE0ODIsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTE0NDUsMTEgKzE1MDEsMTEgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlMDAwMDAKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xNDY0LDcgKzE1MjAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE1MDYsMTEgKzE1NjEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTczLDUgKzE2MzAsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcKaW5kZXggOGEzZGMzMC4uMjdmZjQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjM3OjIwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjI5OjIzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksOCArMzAsMTAgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC00MSw2ICs0NCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01NiwxMiArNjUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVPXkKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfVFJBQ0U9eQotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFPXkKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVV9UUkFDRT15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTkzLDIwICsxMDIsMjIgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQpAQCAtMTE3LDYgKzEyOCwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjksNyArMTQ1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3OCw2ICsxOTQsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMzEsNyArMjQ4LDYgQEAKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldApAQCAtMjM5LDYgKzI1NSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMzOCw3ICszNTUsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgogCiAjCkBAIC00MTksNiArNDM3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9bQpAQCAtNDUyLDYgKzQ3MSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQ2MCw3ICs0ODAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NzMsNiArNDkyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNTkxLDExICs2MTEsMTMgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTcsNiArNjM5LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NDQsNiArNjY3LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjYyLDcgKzY4NiwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTcyMSw2ICs3NDksNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTc0NiwxMCArNzc1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzkwLDE0ICs4MTYsMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC04NTEsNiArODgyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NzksNiArOTExLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hJR0hMQU5ERVI9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CkBAIC05MDYsMTUgKzkzOSwxNyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKQEAgLTkzNSwxNCArOTcwLDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTk5Myw2ICsxMDM4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTAwNCw5ICsxMDUwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMjYsMTQgKzEwNzAsMTcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDk5LDExICsxMTQ2LDExIEBACiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD1tCiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKICMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9bQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTE2Nyw2ICsxMjE0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMjE5LDggKzEyNjcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjg2LDEyICsxMzM2LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTM2Nyw2ICsxNDE3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQwMSwyMiArMTQ1MiwyOSBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC0xNDI1LDYgKzE0ODMsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTE0NDIsMTEgKzE1MDEsMTEgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR180S1NUQUNLUz15CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ2MSw3ICsxNTIwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNTAzLDExICsxNTYxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTU3MSw1ICsxNjMxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnCmluZGV4IDU1YzM2NTYuLmM0MGRiMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjozOTo1NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODozNDoyOSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDYgKzQwLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQpAQCAtNDUsMTEgKzU0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKICMgQ09ORklHX0lLQ09ORklHX1BST0MgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTg2LDE5ICs5NiwyMSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMDcsNiArMTE5LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTE3LDcgKzEzNCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjUsNiArMTgyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjg1LDcgKzMwMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgZWFybHlwcmludGs9c2VyaWFsIGlnbm9yZV9sb2dsZXZlbCIKIAogIwpAQCAtMzA5LDYgKzMyOCw3IEBACiAjCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0lETEU9eQogQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQogIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKQEAgLTMyNyw5ICszNDcsOSBAQAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTQ5OCw2ICs1MTgsMTEgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNTk3LDcgKzYyMiw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GSUxFX0xPQ0tJTkcgaXMgbm90IHNldAogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNjMyLDcgKzY1OSw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC02NjgsNyArNjk0LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtNjg2LDYgKzcxMSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNjk4LDExICs3MjQsMTUgQEAKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldApAQCAtNzEyLDYgKzc0Miw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTc0MSw0ICs3NzIsNSBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCmluZGV4IDY5ZTYxOTkuLjVjYWJkYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0MDo0NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODozNTowNCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDcgKzI5LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKICMgQ09ORklHX0lLQ09ORklHX1BST0MgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTkzLDE5ICsxMDMsMjEgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNCw2ICsxMjYsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMjQsNyArMTQxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3Miw2ICsxODksNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0zMDgsNyArMzI2LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCBlYXJseXByaW50az1zZXJpYWwgaWdub3JlX2xvZ2xldmVsIgogCiAjCkBAIC0zMzIsNiArMzUxLDcgQEAKICMKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfTkVUPXkKQEAgLTM3Myw2ICszOTMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwMyw2ICs0MjQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTAsNyArNDMyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDMyLDkgKzQ1Myw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTU5MSwxMCArNjEyLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjc5LDYgKzY5NywxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKQEAgLTY5OSw2ICs3MjIsMTAgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNzQxLDcgKzc2OCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY0LDYgKzc5MCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTgxMSw2ICs4MzgsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKQEAgLTk1NCw4ICs5ODIsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtOTkwLDcgKzEwMjAsNiBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtMTAxNiw3ICsxMDQ1LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA5MCw2ICsxMTE4LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTI5LDIyICsxMTU4LDI4IEBACiBDT05GSUdfREVCVUdfTElTVD15CiBDT05GSUdfREVCVUdfU0c9eQogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC0xMTUyLDYgKzExODcsNyBAQAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTExNzAsMTAgKzEyMDYsMTAgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZmZTgwMDAKIENPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0RFQlVHX0JPT1RNRU09eQotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xMjAzLDUgKzEyMzksNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZwppbmRleCBjNmU5YjFjLi5mNTIxZTgyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0MjoyNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODozNjoyNSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsOCArMjksMTAgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODQsMjAgKzk0LDIyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTA3LDYgKzExOSwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTgsNyArMTM1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2NSw2ICsxODIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTAsNiArMjI4LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAzLDcgKzMyMiw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEgZWFybHlwcmludGs9c2VyaWFsIgogCiAjCkBAIC0zNzgsNiArMzk4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDgsNiArNDI5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDE2LDcgKzQzOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQyOSw2ICs0NTAsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCkBAIC01NDIsMTEgKzU2NCwxMyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU2OCw2ICs1OTIsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU5NSw2ICs2MjAsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02MTMsNyArNjM5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNjczLDYgKzcwMyw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC02OTQsNiArNzI1LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC03MTksMTAgKzc1MSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg0MCwxMCArODY5LDIwIEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldApAQCAtODYyLDkgKzkwMSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg4MCwxMiArOTE3LDE1IEBACiBDT05GSUdfTUZEX1NNNTAxPXkKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTY5LDYgKzEwMDksNyBAQAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KQEAgLTEwNzEsNyArMTExMiw2IEBACiBDT05GSUdfQUM5N19CVVM9bQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwOTQsNiArMTEzNCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTExNDIsNiArMTE4Myw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xMjEzLDYgKzEyNTUsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTI1Miw2ICsxMjk1LDcgQEAKIENPTkZJR19SVENfRFJWX1I5NzAxPXkKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMjkzLDggKzEzMzcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEzNTcsNyArMTQwMyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtMTQyMyw2ICsxNDY4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDM0LDExICsxNDgwLDE1IEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC0xNDUwLDYgKzE1MDAsNyBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmU4MDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTQ2Myw3ICsxNTE0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE0OTUsMTEgKzE1NDUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTU2Miw1ICsxNjE0LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcKaW5kZXggYmMxMDQ2OS4uYTE1NmNkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NDM6MTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6Mzk6NDggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDggKzI5LDEwIEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTg0LDIwICs5NCwyMiBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEwNyw2ICsxMTksMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE4LDcgKzEzNSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjUsNiArMTgyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDYgKzIyOCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMyw3ICszMjIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIGVhcmx5cHJpbnRrPXNlcmlhbCIKIAogIwpAQCAtMzc4LDYgKzM5OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDA4LDYgKzQyOSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQxNiw3ICs0MzgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjksNiArNDUwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNDM4LDkgKzQ2MCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDk5LDYgKzUyMSw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MjcsMTEgKzY1MCwxMyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY1Myw2ICs2NzgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY4MCw2ICs3MDYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02OTgsNyArNzI1LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzU4LDYgKzc4OSw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC03NzksNiArODExLDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC04MDQsMTAgKzgzNyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkyNSwxMCArOTU1LDIwIEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldApAQCAtOTQ3LDkgKzk4Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTk2NSwxMiArMTAwMywxNSBAQAogQ09ORklHX01GRF9TTTUwMT15CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEwNTQsNiArMTA5NSw3IEBACiBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQpAQCAtMTE1Niw3ICsxMTk4LDYgQEAKIENPTkZJR19BQzk3X0JVUz1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3OSw2ICsxMjIwLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIyNyw2ICsxMjY5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEyOTgsNiArMTM0MSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMzM3LDYgKzEzODEsNyBAQAogQ09ORklHX1JUQ19EUlZfUjk3MDE9eQogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEzNzgsOCArMTQyMywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ0Myw3ICsxNDkwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC0xNTA5LDYgKzE1NTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1MjAsMTEgKzE1NjcsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTE1MzYsNiArMTU4Nyw3IEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNTQ5LDcgKzE2MDEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTU4MSwxMSArMTYzMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNjQ4LDUgKzE3MDEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKaW5kZXggNzUzZmIyNy4uMDU1NTM2YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQzOjU0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjQwOjI1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Il9TREs3NzgwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MiwxMSArNjEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKQEAgLTg4LDIwICs5OCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTEwLDYgKzEyMSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjIsNyArMTM3LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzAsNiArMTg1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKQEAgLTIyNSw2ICsyNDEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTQsNyArMzMxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDE4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9Im1lbT0xMjhNIGNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgaXA9Ym9vdHAgcm9vdD0vZGV2L25mcyBuZnNyb290PTE5Mi4xNjguMC4xOi9ob21lL3Jvb3RmcyIKIAogIwpAQCAtNDM1LDYgKzQ1Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDk2LDYgKzUxNSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTUwMyw3ICs1MjMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC01MTYsNiArNTM1LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNjc3LDEyICs2OTcsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC03MDQsNiArNzI2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MzIsNiArNzU1LDcgQEAKICMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03NjAsNyArNzg0LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtODA0LDEwICs4MzIsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg2MiwxMiArODg3LDEzIEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiBDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQpAQCAtODc1LDYgKzkwMSw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtOTQ3LDYgKzk3NCwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKICMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CkBAIC05NTQsNyArOTg2LDYgQEAKICMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTg2LDYgKzEwMTcsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTA3MiwxMSArMTEwNCwxMSBAQAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5OSw2ICsxMTMxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTE0OSw2ICsxMTgyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTEyNzgsNiArMTMxMiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzQ1LDcgKzEzODAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNDI1LDYgKzE0NTksNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19VTlVTRURfU1lNQk9MUz15CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0NjEsMTggKzE0OTYsMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CkBAIC0xNDgwLDYgKzE1MjAsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTE0OTUsMTEgKzE1MzYsMTEgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUxNCw3ICsxNTU1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKQEAgLTE1NTAsMTEgKzE1OTAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE2MTcsNSArMTY1OSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKaW5kZXggOGRkMmYxMy4uMWNkMTc3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0NjoxNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo0NToyOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDYgKzQyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNTMsMTIgKzYyLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVT15CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX1RSQUNFPXkKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVV9UUkFDRT15CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1VfVFJBQ0U9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTEwNSwxOSArMTE0LDIxIEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEyNiw2ICsxMzcsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzcsNyArMTUzLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE4NSw2ICsyMDEsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0zMTksNyArMzM2LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MzLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgZWFybHlwcmludGs9c2VyaWFsIgogCiAjCkBAIC0zODksNiArNDA3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTksNiArNDM4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDI2LDcgKzQ0Niw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ0OCw5ICs0NjcsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTg4LDEwICs2MDcsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NDcsMTEgKzY2MywxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc0Niw4ICs3NjYsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzgyLDggKzgwNCw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19DT05GSUdGU19GUz15CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC04MDksNyArODI5LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTg0Niw2ICs4NjUsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODgyLDIwICs5MDIsMjcgQEAKIENPTkZJR19ERUJVR19MSVNUPXkKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC05MDQsNiArOTMxLDcgQEAKICMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CkBAIC05MjAsMTAgKzk0OCwxMCBAQAogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTM4LDcgKzk2Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CkBAIC05NzQsMTEgKzEwMDEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEwNDYsNSArMTA3NSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKaW5kZXggMThmNDZkZS4uNTUzMTQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0NzowNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo0Njo1NSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04OCwxOCArOTgsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA4LDYgKzExOSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTksNyArMTM0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEzNSw3ICsxNTAsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE2OSw2ICsxODQsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTQsNiArMjMwLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk2LDcgKzMxMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAiCiAKICMKQEAgLTMxNiw3ICszMzQsMTIgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM2MCw2ICszODMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4OSw2ICs0MTMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTYsNyArNDIxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDkgKzQ0Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NjAsMTAgKzU4NCw3IEBACiBDT05GSUdfTUlJPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NzEsNiArNjkyLDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjgxLDYgKzcwMyw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NIX01PQklMRT15CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTcwMiwyMCArNzI1LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzM0LDggKzc1OCwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTc4OCw2ICs4MTQsNyBAQAogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtODIyLDcgKzg0OSw2IEBACiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtODQ1LDYgKzg3MSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTg3Nyw2ICs5MDQsNyBAQAogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldApAQCAtODkxLDYgKzkxOSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSVNQMTE2WF9IQ0Q9eQogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtOTkwLDggKzEwMTksMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtMTAyOCw4ICsxMDU5LDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDYyLDcgKzEwOTEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMTQwLDYgKzExNjgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE0OSw4ICsxMTc4LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtMTE2MCw2ICsxMTkyLDcgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlMDAwMDAKIENPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExNzMsNyArMTIwNiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMjA1LDExICsxMjM3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyNzMsNSArMTMwNyw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc2MTlfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKaW5kZXggNzI0YmI3Ny4uNjkyMWIxOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0Nzo1NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo1MDowNSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDE3ICs0MCwyNCBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC03MywzMSArODMsMzYgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfQkFTRV9TTUFMTD0xCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQ0LDYgKzE1OSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTI2Miw3ICsyNzgsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC00NjksMTEgKzQ4NiwxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTUwNyw3ICs1MjgsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNTU5LDcgKzU3OSw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTU5NCw3ICs2MTYsNiBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKICMgQ09ORklHX1NZU0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKQEAgLTYxOSw3ICs2NDAsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC02MzcsNiArNjU3LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTY0NSw4ICs2NjYsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02NTQsNiArNjc4LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjgwLDQgKzcwNSw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCmluZGV4IDZjYTZhMmYuLjNhYmIwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NDg6MTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NTA6NTIgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtNDgsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTgzLDE4ICs5MywxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTAyLDYgKzExMywxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTMsNyArMTI4LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2MCw2ICsxNzUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDUsNiArMjIxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjg5LDcgKzMwNiw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM1NSw2ICszNzMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4NCw2ICs0MDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTEsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDA5LDkgKzQyOCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU0NywxMCArNTY2LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NDIsMTAgKzY1OCwyMCBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNjU2LDkgKzY4Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02OTIsNyArNzE2LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTc0Niw3ICs3NjksOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODE1LDcgKzg0MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtODQ5LDYgKzg3Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldApAQCAtODU3LDggKzg4MiwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTg2Niw2ICs4OTQsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC04NzgsNyArOTA3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTkxMCwxMSArOTM4LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTk3OSw1ICsxMDA5LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwppbmRleCBiOGFhZTExLi4xYTQzY2ZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQ5OjAwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjUzOjMyIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNiw3ICsyNyw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzYsNiArMzksMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NCwxOCArOTQsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA0LDYgKzExNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTUsNyArMTMwLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Miw2ICsxNzcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDcsNiArMjIzLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjkxLDcgKzMwOCw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKQEAgLTM2OCw2ICszODYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQzMyw2ICs0NTIsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0MCw3ICs0NjAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjQsOSArNDgzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU5Nyw3ICs2MTYsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNjA1LDYgKzYyMyw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTY1OCwxMCArNjc3LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MTksMTEgKzczNSwxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgyOCw4ICs4NDgsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTg2Niw4ICs4ODgsNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkwMCw3ICs5MjAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTkzNSw2ICs5NTQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTY0LDI0ICs5ODQsMzAgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTk5NCwxNCArMTAyMCwxMyBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMTYsNyArMTA0MSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xMDU5LDExICsxMDgzLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTEyNyw1ICsxMTUzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwppbmRleCAzMDZlMjFjLi5iOGEzYzhjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjUwOjQ5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjU3OjExIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUwLDExICs1OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODksMTggKzk5LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwOSw2ICsxMjAsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIwLDcgKzEzNSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjcsNiArMTgyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEyLDYgKzIyOCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5Niw3ICszMTMsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGEyIgogCiAjCkBAIC0zNzMsNiArMzkxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MzgsNiArNDU3LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDUsNyArNDY1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDY5LDkgKzQ4OCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC02MDYsNiArNjI1LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNjIxLDEwICs2NDEsNyBAQAogIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY3MiwxMiArNjg5LDEzIEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTcyNSw2ICs3NDMsMTEgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNzYyLDcgKzc4NSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtNzg1LDYgKzgwNyw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTgzMSw2ICs4NTQsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtOTAwLDYgKzkyNCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC05NjEsOCArOTg2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC0xMDAyLDggKzEwMjksNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMzYsNyArMTA2MSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwOTUsNiArMTExOSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTI0LDI0ICsxMTQ5LDMwIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTExNTQsMTQgKzExODUsMTMgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1QX0NPREUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xMTc2LDcgKzEyMDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQpAQCAtMTIxOSwxMSArMTI0OCwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyODcsNSArMTMxOCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKaW5kZXggNjE5NDM4Mi4uZDcwOWI3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo1NDoyNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo1Nzo0MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksNyArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTEsMTkgKzEwMSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExMyw2ICsxMjQsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI1LDcgKzE0MSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDEsNyArMTU3LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xNzYsNiArMTkyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjMzLDYgKzI1MCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNyw3ICszMzUsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMzYsNyArMzU1LDEzIEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zODEsNiArNDA2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTAsNiArNDM2LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDE3LDcgKzQ0NCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzMCw2ICs0NTYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ5NCw3ICs1MjEsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNTAyLDYgKzUyOCw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTUzNSwxMCArNTYyLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01NzcsMTIgKzYwMSwxMyBAQAogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTYzMSwxMCArNjU2LDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC02NDUsOSArNjgwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY4MSw3ICs3MTQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNzc4LDggKzgxMCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODM5LDcgKzg3Myw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtODY2LDYgKzg5OSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODc4LDggKzkxMiwxMSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC04ODksNiArOTI2LDcgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTkwMiw3ICs5NDAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTM0LDExICs5NzEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTAwMiw1ICsxMDQxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzI0X2RlZmNvbmZpZwppbmRleCAzZWU3ODNhMC4uNTZiMGI5ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgTW9uIEp1biAyOSAxNjoyODo0MyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgRnJpIFNlcCAyNSAxMTo1MDo1OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC00Miw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU0LDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTEsMjAgKzk4LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTE0NCw3ICsxNTAsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTc4LDYgKzE4NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMjQsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjQ5LDYgKzI1Nyw4IEBACiAjCiBDT05GSUdfU09MVVRJT05fRU5HSU5FPXkKIENPTkZJR19TSF83NzI0X1NPTFVUSU9OX0VOR0lORT15CisjIENPTkZJR19TSF9LRlIyUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0VDT1ZFQyBpcyBub3Qgc2V0CiAKICMKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KQEAgLTI2OSw3ICsyNzksMTAgQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLSMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfU0hfRE1BX0FQST15CitDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTEyCisjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgQ29tcGFuaW9uIENoaXBzCkBAIC0zMDUsNyArMzE4LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MSBjb25zb2xlPXR0eVNDMywxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIG1lbWNodW5rLnZwdT00bSIKIAogIwpAQCAtMzI1LDcgKzMzOSwxMyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzczLDYgKzM5Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAyLDYgKzQyMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwOSw3ICs0MzEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjIsNiArNDQzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDMxLDkgKzQ1Myw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDg5LDYgKzUxMSw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjQ4LDEyICs2NzEsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjk3LDE0ICs3MTgsMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDPXkKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC03NTQsNiArNzgwLDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc2NCw2ICs3OTEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19TSF9NT0JJTEU9eQpAQCAtNzg2LDkgKzgxNCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODM4LDExICs4NjMsMTUgQEAKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg2Miw4ICs4OTEsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTg3NiwyNCArOTA3LDI0IEBACiBDT05GSUdfVklERU9fVjRMMl9DT01NT049eQogIyBDT05GSUdfVklERU9fQUxMT1dfVjRMMSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX01FRElBPXkKK0NPTkZJR19EVkJfQ09SRT1tCitDT05GSUdfVklERU9fTUVESUE9bQogCiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIwogIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUj15CitDT05GSUdfTUVESUFfVFVORVI9bQogIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9eQotQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9eQotQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9eQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9eQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9eQotQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD15Ci1DT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PXkKLUNPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9eQotQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPXkKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPW0KIENPTkZJR19WSURFT19WNEwyPXkKIENPTkZJR19WSURFT0JVRl9HRU49eQogQ09ORklHX1ZJREVPQlVGX0RNQV9DT05USUc9eQpAQCAtOTA0LDYgKzkzNSw3IEBACiAjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQVUwODI4IGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQ0FNRVJBPXkKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTEgaXMgbm90IHNldApAQCAtOTE5LDE1ICs5NTEsMTggQEAKIENPTkZJR19VU0JfR1NQQ0E9bQogIyBDT05GSUdfVVNCX001NjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVFYwNlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HTDg2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfQ09ORVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX0VUT01TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9KRUlMSU5KIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9NQVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX09WNTM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NOOUMyMFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1NPTklYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5vdCBzZXQKQEAgLTk1Nyw2ICs5OTIsMjYgQEAKICMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfTUFYX0FEQVBURVJTPTgKKyMgQ09ORklHX0RWQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15CisjIENPTkZJR19UVFBDSV9FRVBST00gaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBVU0IgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfU01TX1NJQU5PX01EVFYgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCkBAIC0xMDE3LDEwICsxMDcyLDgwIEBACiAjIENPTkZJR19MT0dPX1NVUEVSSF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBFUkggaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPW0KKworIworIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICisjCitDT05GSUdfU05EX1NPQ19TSDRfRlNJPW0KK0NPTkZJR19TTkRfRlNJX0FLNDY0Mj15CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST1tCitDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTPW0KK0NPTkZJR19TTkRfU09DX1dNX0hVQlM9bQorQ09ORklHX1NORF9TT0NfQUQxODM2PW0KK0NPTkZJR19TTkRfU09DX0FEMTkzOD1tCitDT05GSUdfU05EX1NPQ19BRDczMzExPW0KK0NPTkZJR19TTkRfU09DX0FLNDEwND1tCitDT05GSUdfU05EX1NPQ19BSzQ1MzU9bQorQ09ORklHX1NORF9TT0NfQUs0NjQyPW0KK0NPTkZJR19TTkRfU09DX0NTNDI3MD1tCitDT05GSUdfU05EX1NPQ19MMz1tCitDT05GSUdfU05EX1NPQ19QQ00zMDA4PW0KK0NPTkZJR19TTkRfU09DX1NQRElGPW0KK0NPTkZJR19TTkRfU09DX1NTTTI2MDI9bQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjM9bQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjY9bQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDM1g9bQorQ09ORklHX1NORF9TT0NfVURBMTM0WD1tCitDT05GSUdfU05EX1NPQ19VREExMzgwPW0KK0NPTkZJR19TTkRfU09DX1dNODUxMD1tCitDT05GSUdfU05EX1NPQ19XTTg1MjM9bQorQ09ORklHX1NORF9TT0NfV004NTgwPW0KK0NPTkZJR19TTkRfU09DX1dNODcyOD1tCitDT05GSUdfU05EX1NPQ19XTTg3MzE9bQorQ09ORklHX1NORF9TT0NfV004NzUwPW0KK0NPTkZJR19TTkRfU09DX1dNODc1Mz1tCitDT05GSUdfU05EX1NPQ19XTTg3NzY9bQorQ09ORklHX1NORF9TT0NfV004OTAwPW0KK0NPTkZJR19TTkRfU09DX1dNODkwMz1tCitDT05GSUdfU05EX1NPQ19XTTg5NDA9bQorQ09ORklHX1NORF9TT0NfV004OTYwPW0KK0NPTkZJR19TTkRfU09DX1dNODk2MT1tCitDT05GSUdfU05EX1NPQ19XTTg5NzE9bQorQ09ORklHX1NORF9TT0NfV004OTc0PW0KK0NPTkZJR19TTkRfU09DX1dNODk4OD1tCitDT05GSUdfU05EX1NPQ19XTTg5OTA9bQorQ09ORklHX1NORF9TT0NfV004OTkzPW0KK0NPTkZJR19TTkRfU09DX1dNOTA4MT1tCitDT05GSUdfU05EX1NPQ19NQVg5ODc3PW0KKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDQzLDYgKzExNjgsNyBAQAogIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTEwNzIsNiArMTE5OCw3IEBACiAjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKQEAgLTEwODYsOSArMTIxMywxMSBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTExNTEsOSArMTI4MCw0NiBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTc9eQorQ09ORklHX1VTQl9SOEE2NjU5Nz15CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKIAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKQEAgLTExNzYsNiArMTM0Miw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTEyMjMsNiArMTM5MSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMjc5LDYgKzE0NDgsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM0Myw3ICsxNTEzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTQyMyw2ICsxNTkyLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQzMyw4ICsxNjAzLDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNDQyLDYgKzE2MTUsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNDU1LDcgKzE2MjksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0OTYsMTEgKzE2NjksMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTU2Miw1ICsxNzM3LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZwppbmRleCA1NjRiZjdiLi43YmM5MjZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjAwOjAxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjU4OjU4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OSwxMSArNTgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTg0LDE4ICs5NCwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA0LDYgKzExNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTUsNyArMTMwLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Miw2ICsxNzcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDcsNiArMjIzLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjkxLDcgKzMwOCw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzU4LDYgKzM3Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg3LDYgKzQwNiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5NCw3ICs0MTQsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTIsOSArNDMxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTYzLDcgKzU4Miw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01OTksMTAgKzYxNyw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjY1LDEwICs2ODAsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTY3OSw5ICs3MDQsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03NjYsOCArNzg5LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MzgsNyArODYzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04ODUsNiArOTA5LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODk0LDggKzkxOSwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTkwMyw2ICs5MzEsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC05MTYsNyArOTQ1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTk0OCwxMSArOTc2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEwMTYsNSArMTA0Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKaW5kZXggZWI0MzFjNC4uYzIwYWU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowMjoyNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTowMTo0MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDYgKzQwLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NywxOCArOTcsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwNyw2ICsxMTgsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE4LDcgKzEzMyw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjUsNiArMTgwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDYgKzIyNiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5NSw3ICszMTIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwzODQwMCIKIAogIwpAQCAtMzgyLDYgKzQwMCw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDExLDYgKzQzMCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxOCw3ICs0MzgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzYsOSArNDU1LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTc0LDEwICs1OTMsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYzMiwxMCArNjQ4LDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC02NDYsOSArNjcyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzM0LDggKzc1OCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODA2LDcgKzgzMiw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtODMzLDYgKzg1OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NDIsOCArODY4LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtODUxLDYgKzg4MCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTg2NCw3ICs4OTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtODk2LDExICs5MjUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtOTY1LDUgKzk5Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKaW5kZXggNzU2YmVlYy4uODJiYWVlZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowMzo1NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTowMzo1OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDgsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC04MSwxOSArOTEsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTEwMSw2ICsxMTIsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTEyLDcgKzEyOCw4IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU5LDYgKzE3Niw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MD15CkBAIC0xOTksNyArMjE3LDYgQEAKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMDcsNiArMjI0LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjg3LDggKzMwNSw5IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODEwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLjExNTIwMCByb290PS9kZXYvc2RhMSIKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zODIsNiArNDAxLDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg5LDcgKzQwOSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MDYsOSArNDI1LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTQ5LDYgKzU2OCw3IEBACiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKQEAgLTU4NywxMSArNjA3LDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjEyLDYgKzYzNCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CkBAIC02MzAsNiArNjUzLDcgQEAKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjQ4LDggKzY3MiwxMyBAQAogIwogCiAjCi0jIEEgbmV3IGFsdGVybmF0aXZlIEZpcmVXaXJlIHN0YWNrIGlzIGF2YWlsYWJsZSB3aXRoIEVYUEVSSU1FTlRBTD15CisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCiAjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKQEAgLTcyNCwxMCArNzUzLDcgQEAKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MjEsMTAgKzg0NywxOSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CkBAIC04MzMsNyArODY4LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKQEAgLTg1Nyw2ICs4OTEsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTM3LDExICs5NzIsMTEgQEAKIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKICMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTk2NCw2ICs5OTksNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMDA5LDYgKzEwNDUsNyBAQAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xMjQzLDYgKzEyODAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyNTMsOCArMTI5MSwxMSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMjYzLDYgKzEzMDQsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjc2LDcgKzEzMTgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC0xMzA5LDYgKzEzNTAsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTM3MSw1ICsxNDEzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnCmluZGV4IDdmZWRhYWUuLmRkMGU4OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowNDo0MSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTowNzoxNCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksNyArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUzLDExICs2MiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC05MSwyMCArMTAxLDIyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE0LDYgKzEyNiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjYsNyArMTQzLDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzMsNiArMTkwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE4LDYgKzIzNiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMiw3ICszMjEsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgbWVtPTY0TSByb290PS9kZXYvbmZzIgogCiAjCkBAIC0zODIsNiArNDAyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDMzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDE5LDcgKzQ0MSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzMiw2ICs0NTMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01OTEsNiArNjEzLDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldApAQCAtNjAzLDcgKzYyNiwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTY3OSw2ICs3MDYsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTcwNCwxMCArNzMyLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODA0LDEwICs4MjksMjAgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC04MjIsOSArODU3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODYxLDYgKzg5NCw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC04NzksNyArOTEzLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTk0NCw4ICs5NzcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDExLDEyICsxMDQ2LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTEwOCw2ICsxMTQzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTE5LDExICsxMTU1LDE1IEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC0xMTM0LDYgKzExNzQsNyBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTE0Nyw3ICsxMTg4LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMTg5LDExICsxMjI5LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI1OSw1ICsxMzAxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzcxMHZvaXBnd19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwppbmRleCBjMjk2Y2E1Li42NjIxNTZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA2OjEzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjExOjQ5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OSwxMSArNTgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg3LDE4ICs5NywxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDcsNiArMTE4LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExOCw3ICsxMzQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTY1LDYgKzE4MSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxMCw2ICsyMjcsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTIsNyArMzEwLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzc0LDYgKzM5Myw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQwLDYgKzQ2MCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0Nyw3ICs0NjgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjksOSArNDg5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNjA1LDEwICs2MjUsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY4Niw2ICs3MDMsMTEgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNzIzLDcgKzc0NSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC03NzUsOCArNzk2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTgxMyw4ICs4MzYsNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg0Nyw3ICs4NjgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTg3NCw2ICs4OTQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg4Myw4ICs5MDQsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC04OTMsNiArOTE3LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtOTA2LDcgKzkzMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MzgsMTEgKzk2MiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDA2LDUgKzEwMzIsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzI0X2dlbmVyaWNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzcyNF9nZW5lcmljX2RlZmNvbmZpZwppbmRleCBiYTI2YmUxLi5lMDY3MTlhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzI0X2dlbmVyaWNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MjRfZ2VuZXJpY19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowNjo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToxNDowMCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDYsMTQgKzU1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTkyLDE5ICs5OSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTMsMTMgKzEyMiwxOCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjksNiArMTgzLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNCw3ICsyMjksNiBAQAogIwogIyBNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZAogIwotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMjIsNiArMjM2LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjQ2LDYgKzI2MSw4IEBACiAjIEJvYXJkIHN1cHBvcnQKICMKICMgQ09ORklHX1NIXzc3MjRfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0tGUjJSMDkgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRUNPVkVDIGlzIG5vdCBzZXQKIAogIwogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgpAQCAtMzE4LDcgKzMzNSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM0NSw2ICszNjMsNyBAQAogQ09ORklHX0hJQkVSTkFUSU9OX05WUz15CiBDT05GSUdfSElCRVJOQVRJT049eQogQ09ORklHX1BNX1NURF9QQVJUSVRJT049IiIKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQpAQCAtNDI3LDYgKzQ0Niw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC00MzcsNiArNDU3LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNDU2LDIwICs0NzcsMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00ODgsOCArNTEwLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtNTQwLDYgKzU2NCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtNTg3LDcgKzYxMiw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTY0Miw2ICs2NjksNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNjU0LDExICs2ODIsMTUgQEAKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC02NjgsNiArNzAwLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjkyLDQgKzcyNSw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzYzcmRwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCmluZGV4IGIxZDliMjMuLjE5NGZmNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDc6MTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MTU6MzcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OCwxMSArNTcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTkyLDE5ICsxMDIsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMTQsNiArMTI2LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNSw3ICsxNDIsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTczLDYgKzE5MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjM9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTQsNyArMjMyLDYgQEAKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldApAQCAtMjIyLDYgKzIzOSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMyw3ICszMjEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzIsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIHJvb3RkZWxheT0xMCIKIAogIwpAQCAtMzcxLDYgKzM5MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAxLDYgKzQyMSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQwOSw3ICs0MzAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjIsNiArNDQyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDMxLDkgKzQ1Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00ODgsNiArNTA5LDcgQEAKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQogIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01NjUsNyArNTg3LDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTYyMSwxMCArNjQyLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzE2LDExICs3MzQsMTUgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MzAsNiArODUyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTg5OSw2ICs5MjIsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtOTIzLDYgKzk0Nyw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtOTU2LDggKzk4MiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwMjIsNyArMTA1MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA5Niw2ICsxMTIzLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMDcsMTEgKzExMzUsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTExMjEsNiArMTE1Myw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExMzQsNyArMTE2Nyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMTY2LDExICsxMTk4LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyMzIsNSArMTI2Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3NzBfZ2VuZXJpY19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzcwX2dlbmVyaWNfZGVmY29uZmlnCmluZGV4IDQyNmE4OGYuLjM0YmVkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3NzBfZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc3MF9nZW5lcmljX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA4OjA1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjE3OjE2IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00NSwxNCArNTQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAogQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTEsMTkgKzk4LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTExMiwxMyArMTIxLDE4IEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Niw2ICsxODAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MD15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDcgKzIyNSw2IEBACiAjCiAjIE1lbW9yeSBob3RwbHVnIGlzIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBTb2Z0d2FyZSBTdXNwZW5kCiAjCi1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIxOCw2ICsyMzIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTMsNyArMzI4LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzM4LDYgKzM1NCw3IEBACiBDT05GSUdfSElCRVJOQVRJT05fTlZTPXkKIENPTkZJR19ISUJFUk5BVElPTj15CiBDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0lETEU9eQogQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQogQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKQEAgLTQyMCw2ICs0MzcsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNDMwLDYgKzQ0OCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NIX01PQklMRT15CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTQ0OSwyMCArNDY4LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNDgxLDggKzUwMSwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTUzMyw2ICs1NTUsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTU4MCw3ICs2MDMsOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC02MzUsNiArNjYwLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTY0NywxMSArNjczLDE1IEBACiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldApAQCAtNjYxLDYgKzY5MSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTY4NSw0ICs3MTYsNSBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwppbmRleCBlZDMxNmY2Li41MWNiYWVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA4OjI5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBGcmkgU2VwIDI1IDExOjM5OjIwIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw4ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15Ci1DT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDEsMTAgKzQzLDE3IEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKQEAgLTUzLDExICs2MiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtNjcsOCArNzcsNyBAQAogQ09ORklHX1VTRVJfU0NIRUQ9eQogIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKQEAgLTc5LDcgKzg4LDcgQEAKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CkBAIC05MywyOCArMTAyLDM3IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CitDT05GSUdfUEVSRl9DT1VOVEVSUz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCitDT05GSUdfR0NPVl9LRVJORUw9eQogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjcsNyArMTQ1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTc2LDYgKzE5NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzQsMTIgQEAKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0Sz15CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8yNTZLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV81MTJNQiBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTIyMyw3ICsyNDgsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMzEsNiArMjU1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjU2LDYgKzI4MSw3IEBACiAjCiAjIENPTkZJR19TSF9ISUdITEFOREVSIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TSDc3ODVMQ1I9eQorIyBDT05GSUdfU0hfU0g3Nzg1TENSX1BUIGlzIG5vdCBzZXQKIAogIwogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgpAQCAtMjY0LDE0ICsyOTAsMjkgQEAKIENPTkZJR19TSF9QQ0xLX0ZSRVE9NTAwMDAwMDAKIENPTkZJR19TSF9DTEtfQ1BHPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwogIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CitDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX1NIX0NQVV9GUkVRPXkKIAogIwogIyBETUEgc3VwcG9ydApAQCAtMjk5LDEyICszNDAsMTIgQEAKIENPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAotIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0dVU0E9eQotIyBDT05GSUdfU1BBUlNFX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFX0lSUT15CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0zMTIsNyArMzUzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzIxLDggKzM2Myw3IEBACiBDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKQEAgLTMzOSw4ICszODAsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0lETEU9eQorQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQorQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zOTIsNiArNDM4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTQsNiArNDYxLDggQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKQEAgLTQyMSw2ICs0NzAsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MjksNyArNDc5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDQyLDE4ICs0OTEsMTcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUzOCw3ICs1ODYsOCBAQAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNTYxLDcgKzYxMCw3IEBACiBDT05GSUdfU0NTSV9ETUE9eQogIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQpAQCAtNTkxLDYgKzY0MCw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTIsNiArNjYyLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MzksNiArNjkwLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjU3LDcgKzcwOSwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTY5MCw2ICs3NDYsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTY5NywxMiArNzU0LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTczOSwyNSArNzkxLDQyIEBACiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKIENPTkZJR19JTlBVVF9NT1VTRURFVj15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorQ09ORklHX0lOUFVUX0VWQlVHPW0KIAogIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CkBAIC03NjYsNyArODM1LDEyIEBACiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03NzcsNyArODUxLDcgQEAKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIApAQCAtNzk2LDEyICs4NzAsMTAgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtODA5LDYgKzg4MSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPUENBPXkKQEAgLTgzOCw2ICs5MTEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTg2NCwyMSArOTM4LDQyIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CitDT05GSUdfU0hfV0RUPXkKKyMgQ09ORklHX1NIX1dEVF9NTUFQIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKQEAgLTg5NiwxNCArOTkxLDE3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05MTUsMTIgKzEwMTMsMTEgQEAKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQogIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfU1lTX0ZJTExSRUNUPW0KLUNPTkZJR19GQl9TWVNfQ09QWUFSRUE9bQotQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQ9bQorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TWVNfRk9QUz1tCi1DT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtOTU1LDcgKzEwNTIsNyBAQAogIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TSF9NT0JJTEVfTENEQz1tCisjIENPTkZJR19GQl9TSF9NT0JJTEVfTENEQyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfU001MDE9eQogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldApAQCAtOTgxLDE0ICsxMDc4LDExMiBAQAogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19MT0dPX1NVUEVSSF9NT05PIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX1NVUEVSSF9NT05PPXkKK0NPTkZJR19MT0dPX1NVUEVSSF9WR0ExNj15CitDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9IV0RFUD15CitDT05GSUdfU05EX1JBV01JREk9eQorQ09ORklHX1NORF9TRVFVRU5DRVI9eQorIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0hSVElNRVI9eQorQ09ORklHX1NORF9TRVFfSFJUSU1FUl9ERUZBVUxUPXkKK0NPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1JBV01JRElfU0VRPXkKK0NPTkZJR19TTkRfT1BMM19MSUJfU0VRPXkKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9NUFU0MDFfVUFSVD15CitDT05GSUdfU05EX09QTDNfTElCPXkKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CitDT05GSUdfU05EX0NNSVBDST15CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBFUkggaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMDEsMzQgKzExOTYsMzkgQEAKICMKICMgU3BlY2lhbCBISUQgZHJpdmVycwogIwotQ09ORklHX0hJRF9BNFRFQ0g9eQotQ09ORklHX0hJRF9BUFBMRT15Ci1DT05GSUdfSElEX0JFTEtJTj15Ci1DT05GSUdfSElEX0NIRVJSWT15Ci1DT05GSUdfSElEX0NISUNPTlk9eQotQ09ORklHX0hJRF9DWVBSRVNTPXkKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfRVpLRVk9eQotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX0dZUkFUSU9OPXkKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQorQ09ORklHX0hJRF9BNFRFQ0g9bQorQ09ORklHX0hJRF9BUFBMRT1tCitDT05GSUdfSElEX0JFTEtJTj1tCitDT05GSUdfSElEX0NIRVJSWT1tCitDT05GSUdfSElEX0NISUNPTlk9bQorQ09ORklHX0hJRF9DWVBSRVNTPW0KK0NPTkZJR19ISURfRFJBR09OUklTRT1tCisjIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfRVpLRVk9bQorQ09ORklHX0hJRF9LWUU9bQorQ09ORklHX0hJRF9HWVJBVElPTj1tCitDT05GSUdfSElEX1RXSU5IQU49bQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPW0KK0NPTkZJR19ISURfTE9HSVRFQ0g9bQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAogIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotQ09ORklHX0hJRF9NT05URVJFWT15Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CitDT05GSUdfSElEX01JQ1JPU09GVD1tCitDT05GSUdfSElEX01PTlRFUkVZPW0KK0NPTkZJR19ISURfTlRSSUc9bQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCiAjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1BFVEFMWU5YPXkKLUNPTkZJR19ISURfU0FNU1VORz15Ci1DT05GSUdfSElEX1NPTlk9eQotQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPW0KK0NPTkZJR19ISURfU0FNU1VORz1tCitDT05GSUdfSElEX1NPTlk9bQorQ09ORklHX0hJRF9TVU5QTFVTPW0KK0NPTkZJR19ISURfR1JFRU5BU0lBPW0KKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NNQVJUSk9ZUExVUz1tCisjIENPTkZJR19TTUFSVEpPWVBMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPW0KICMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9bQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMDQwLDEzICsxMjQwLDE0IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCkBAIC0xMDYxLDEwICsxMjYyLDggQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CkBAIC0xMTMzLDcgKzEzMzIsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfVEVTVD1tCisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTExNDMsNyArMTM0MiwyOSBAQAogIwogIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19TREhDST1tCisjIENPTkZJR19NTUNfU0RIQ0lfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfU0RIQ0lfUExURk09bQorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVklBX1NETU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtMTE3OSw2ICsxNDAwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMjAzLDkgKzE0MjUsMjAgQEAKICMKICMgQ09ORklHX1JUQ19EUlZfU0ggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CitDT05GSUdfVUlPPW0KKyMgQ09ORklHX1VJT19DSUYgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1BEUlYgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1BEUlZfR0VOSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TTVggaXMgbm90IHNldAorIyBDT05GSUdfVUlPX0FFQyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU0VSQ09TMyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUENJX0dFTkVSSUMgaXMgbm90IHNldAogCiAjCiAjIFRJIFZMWU5RCkBAIC0xMjI1LDEzICsxNDU4LDE1IEBACiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI3NSw5ICsxNTEwLDkgQEAKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKK0NPTkZJR19DT05GSUdGU19GUz15CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldApAQCAtMTI5NywyMCArMTUzMiwyMCBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1Y0PXkKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQorQ09ORklHX0VYUE9SVEZTPW0KIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQpAQCAtMTM3Myw4NSArMTYwOCw2OSBAQAogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRFNUQVRTPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHUz15CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19MQVRFTkNZVE9QPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQorQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX0dFTkVSSUNfVFJBQ0VSPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19JUlFTT0ZGX1RSQUNFUj15CiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfVFJBQ0VSPXkKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX1NUQUNLX1RSQUNFUj15CitDT05GSUdfS01FTVRSQUNFPXkKK0NPTkZJR19XT1JLUVVFVUVfVFJBQ0VSPXkKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1BST0ZJTEVSIGlzIG5vdCBzZXQKK0NPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKK0NPTkZJR19EV0FSRl9VTldJTkRFUj15CitDT05GSUdfTUNPVU5UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNDY1LDcgKzE2ODQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE1MDcsMTEgKzE3MjUsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTU2LDcgKzE3NzYsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTE1NzMsNSArMTc5Myw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKaW5kZXggMDA0ZTZmNS4uOGMyYzQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowOTozNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToyMzoxOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksOCArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQotQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQxLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUzLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTMsMTkgKzEwMiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNSw2ICsxMjUsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI3LDcgKzE0MSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzYsNiArMTkwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjI0LDYgKzIzOSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwNiw3ICszMjIsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zODYsNiArNDAzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTUsNiArNDMzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDIzLDcgKzQ0Miw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzNiw2ICs0NTQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ0NSw5ICs0NjQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTg1LDYgKzYwNCw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MDYsNiArNjI2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MzMsNiArNjU0LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjUxLDcgKzY3MywxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTY4NCw2ICs3MTAsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTY5MSwxMCArNzE4LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzQ0LDEzICs3NjgsMTcgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtODAzLDYgKzgzMSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPUENBPXkKQEAgLTgzMiw2ICs4NjEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTg1OCwyMCArODg4LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODkwLDE0ICs5MjEsMTcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05ODIsNyArMTAxNiw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwNSw2ICsxMDM4LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTA1NSw2ICsxMDg5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTExNzMsNiArMTIwOCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTIyNCw4ICsxMjYwLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI5MSwxMiArMTMyOSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKQEAgLTEzNzIsNiArMTQxMCw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0MDcsMTggKzE0NDYsMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CkBAIC0xNDI2LDYgKzE0NzAsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTE0NDAsMTEgKzE0ODUsMTEgQEAKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NTksNyArMTUwNCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTUwMSwxMSArMTU0NSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE1NjcsNSArMTYxMyw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCmluZGV4IGFkN2Q2MDkuLjkyMTE1ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjEwOjMzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjI3OjE3IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNiw3ICsyNyw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzYsNiArMzksMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ2LDExICs1NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC03NywxOCArODcsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtOTYsMTIgKzEwNywxNiBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19CQVNFX1NNQUxMPTEKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDgsNiArMTYzLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMTkzLDYgKzIwOSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI3NCw3ICsyOTEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDIxMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHJvb3Q9MWYwMSBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo2NGsoZmlybSlybywtKHN5cykgbmV0ZGV2PTM0LDB4MzAwLGV0aDAgIgogCiAjCkBAIC0zMzksNiArMzU3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzg3LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzc1LDcgKzM5NSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTUyOSwxMCArNTQ4LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01OTEsMTEgKzYwNywxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY3Miw3ICs2OTIsOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC03MDksOCArNzMxLDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogIyBDT05GSUdfU1lTRlMgaXMgbm90IHNldAotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTczMiw3ICs3NTIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC03NjgsNiArNzg3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CkBAIC03NzUsOCArNzk1LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtNzg1LDYgKzgwOCw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNzk3LDcgKzgyMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC04MjgsMTEgKzg1MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC04OTUsNSArOTIwLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnCmluZGV4IDIwN2IwYzkuLmUzODU4ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxMTowMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToyOToyNiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMzAsNyArMzEsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU1LDEyICs2NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1U9eQorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogQ09ORklHX1JDVV9UUkFDRT15Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0U9eQorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVX1RSQUNFPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTExLDE5ICsxMjAsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQpAQCAtMTM1LDYgKzE0NiwxMSBAQAogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xNDcsNyArMTYzLDcgQEAKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTk2LDYgKzIxMiw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTI1Niw2ICsyNzMsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zNTMsNyArMzcxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMTAwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAxMDAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCBlYXJseXByaW50az1iaW9zIGlnbm9yZV9sb2dsZXZlbCIKIAogIwpAQCAtNDM4LDYgKzQ1Nyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDg5LDYgKzUwOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTYyLDcgKzU4Myw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01NzAsNiArNTkwLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNjAyLDEyICs2MjMsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjc1LDYgKzY5NCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY4NSw2ICs3MDUsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTcwNiw5ICs3MjcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTcyOSwxMSArNzQ3LDE1IEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzYyLDggKzc4NCwxMiBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtODA4LDYgKzgzNCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9bQogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtODYyLDYgKzg4OSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQpAQCAtODc2LDEwICs5MDQsMTEgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX002NjU5Mj15CiBDT05GSUdfVVNCX002NjU5Mj15CiAjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldApAQCAtOTM5LDYgKzk2OCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtOTUwLDYgKzk4MCw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMDAyLDggKzEwMzMsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwNjMsNyArMTA5Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtMTEyOSw2ICsxMTYxLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTY0LDIyICsxMTk3LDI5IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC0xMTg4LDYgKzEyMjgsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTEyMDUsMTAgKzEyNDYsMTAgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xMjIzLDcgKzEyNjQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTI1NSwxMSArMTI5NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMzIyLDUgKzEzNjQsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZwppbmRleCAyYmUyZDc1Li5jYjkxOWEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2Ci0jIFRodSBBdWcgMjAgMTU6MDM6MDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MzM6MDAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNTcsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTk1LDIxICs5NiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xNzUsNiArMTc1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjIwLDYgKzIyMSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxMiw3ICszMTQsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM3NCw2ICszNzcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwMyw2ICs0MDcsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTAsNyArNDE1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjE4LDEwICs2MjIsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcxNCw3ICs3MTUsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzM2LDYgKzczNiw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC04MTgsNiArODE5LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODgyLDcgKzg4NCw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTkwOSw2ICs5MTAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTIyLDcgKzkyNCw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZwppbmRleCA1ZDk3MDI2Li5iOWZlOTYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MTI6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MzU6MDMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CkBAIC00NSwxMSArNTQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODMsMTggKzkzLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDMsNiArMTE0LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNSw3ICsxMzAsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYyLDYgKzE3Nyw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwNyw2ICsyMjMsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTQsNyArMzExLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC00MDIsMTAgKzQyMCwyMCBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNDE2LDkgKzQ0NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00OTUsNyArNTIxLDkgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTU1OSw3ICs1ODcsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC01NzcsNiArNjA0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTU4Niw4ICs2MTQsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01OTUsNiArNjI2LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjIzLDQgKzY1NSw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZwppbmRleCA3YWQwODBlLi4yY2E3OWVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxMjo1NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTozNjozNiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CkBAIC05MCwxOSArMTAwLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTEsNiArMTIyLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMyw3ICsxMzgsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcwLDYgKzE4NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDcsNyArMzI0LDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA5ZTAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMzg0MDBOODEgcm9vdD0vZGV2L25mcyBpcD06Ojo6OmV0aDE6YXV0b2NvbmYgcnciCiAKICMKQEAgLTUwOSw2ICs1MjcsNyBAQAogIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD15CkBAIC01OTUsNiArNjE0LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC02MDMsNyArNjIzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjE2LDYgKzYzNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KQEAgLTYyOCw5ICs2NDgsOSBAQAogQ09ORklHX01URD1tCiBDT05GSUdfTVREX0RFQlVHPXkKIENPTkZJR19NVERfREVCVUdfVkVSQk9TRT0wCisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC04MjAsNiArODQwLDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldApAQCAtODMyLDcgKzg1MywxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTkzMSw2ICs5NTYsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTk1NiwxMCArOTgyLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTA4NywxMCArMTExMCwyMCBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTExMDUsOSArMTEzOCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNDksNiArMTE4MCw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMTY3LDcgKzExOTksNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMTcsNiArMTI0OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xNDE2LDggKzE0NDgsMTAgQEAKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDg5LDcgKzE1MjMsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU5MSw2ICsxNjI0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjIxLDIzICsxNjU1LDI5IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTY1MCwxNCArMTY5MCwxMyBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE2NzIsNyArMTcxMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNzE1LDExICsxNzUzLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQpAQCAtMTc5MCw1ICsxODMwLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZwppbmRleCA2MDhmZTU2Li5iMDEyY2E3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjE0OjM2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjQyOjMzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw3ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MSwxOSArMTAxLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTEzLDYgKzEyNCwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjUsNyArMTQwLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0MSw3ICsxNTYsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE3Niw2ICsxOTEsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMzMsNiArMjQ5LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzE0LDcgKzMzMSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIgogCiAjCkBAIC0zMzQsNyArMzUyLDEzIEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zODIsNiArNDA2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTEsMTkgKzQzNiwxNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKIENPTkZJR19DRkc4MDIxMT15CisjIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9eQorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MQogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKIENPTkZJR19MSUI4MDIxMT1tCiAjIENPTkZJR19MSUI4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTE9eQotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFM9eQotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MQotCi0jCi0jIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCi0jCiBDT05GSUdfTUFDODAyMTFfUkNfUElEPXkKICMgQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CkBAIC00NDQsNiArNDY3LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDUzLDkgKzQ3Nyw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01OTAsNyArNjE0LDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU5OCw2ICs2MjEsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC02MzEsMTAgKzY1NSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogQ09ORklHX1dMQU5fODAyMTE9eQogQ09ORklHX0xJQkVSVEFTPW0KQEAgLTY0OCwxMiArNjY5LDEzIEBACiAjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKICMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQVI5MTcwX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEhfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDMgaXMgbm90IHNldAogIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTDEyWFggaXMgbm90IHNldAogIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKIAogIwpAQCAtNzUwLDEwICs3NzIsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTc2NCw5ICs3OTYsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODEzLDYgKzg0Myw3IEBACiAjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKQEAgLTgyNyw5ICs4NTgsOSBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKLSMgQ09ORklHX1NVUEVSSF9PTl9DSElQX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIAogIwpAQCAtODkzLDYgKzkyNCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC05MTcsNiArOTQ5LDggQEAKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CkBAIC05NDksOCArOTgzLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDE0LDcgKzEwNTAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEwOTEsNiArMTEyNiw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMDMsOCArMTEzOSwxMSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMTEyLDYgKzExNTEsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTI1LDcgKzExNjUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTExNjcsMTEgKzEyMDYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKQEAgLTEyMzUsNSArMTI3Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwppbmRleCBlZTE5ODdlLi45ZjhhZWU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MTU6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6NDY6MTMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsMTEgKzE0LDEzIEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX1NNUD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQpAQCAtMjksNyArMzEsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU0LDE0ICs2NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMTEsMjAgKzExOSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKICMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTM0LDYgKzE0MiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDYsNyArMTU5LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE5NSw2ICsyMDgsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yNDQsNyArMjU4LDYgQEAKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldApAQCAtMjUyLDYgKzI2NSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMyMiw2ICszMzYsNyBAQAogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0zMzQsNyArMzQ5LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzQzLDYgKzM1OSw4IEBACiAjIENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1BDSUVQT1JUQlVTPXkKIENPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVfRUNSQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFQUVSX0lOSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfUENJRUFTUE09eQogQ09ORklHX1BDSUVBU1BNX0RFQlVHPXkKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKQEAgLTM2Nyw2ICszODUsNyBAQAogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKIENPTkZJR19ORVQ9eQpAQCAtNDIwLDYgKzQzOSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQyLDcgKzQ2Miw2IEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKQEAgLTQ1MCw2ICs0NjksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00NTgsNyArNDc4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDcxLDYgKzQ5MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDgwLDkgKzUwMCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC02MjAsNiArNjQwLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUwyND15CkBAIC02NDEsNiArNjYyLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NjgsNiArNjkwLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjg2LDcgKzcwOSwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTc4Miw2ICs4MDksNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTc4OSwxMCArODE3LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODQyLDE0ICs4NjcsMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTkwMiw2ICs5MzIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT1BDQT15CkBAIC05MzEsNiArOTYyLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldApAQCAtOTU4LDE1ICs5OTAsMTcgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CkBAIC05ODcsMTQgKzEwMjEsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTA0NSw2ICsxMDg5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA1Niw5ICsxMTAxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLUNPTkZJR19USEVSTUFMX0hXTU9OPXkKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDc5LDggKzExMjIsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIApAQCAtMTA5OSw2ICsxMTQ0LDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTExODMsNyArMTIyOSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIwNiw2ICsxMjUxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTI1NSw2ICsxMzAxLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEzNzMsNiArMTQyMCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTQyMiw2ICsxNDcwLDcgQEAKIENPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEMj15CkBAIC0xNDMxLDkgKzE0ODAsMTEgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0JUUkZTX0ZTPXkKICMgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ5OSwxMiArMTU1MCwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTE1NzYsNiArMTYyNyw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjEwLDE4ICsxNjYyLDIzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE2MzMsMTEgKzE2OTAsMTEgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlYjAwMDAKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE2NTIsNyArMTcwOSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTY5NCwxMSArMTc1MCwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNzY0LDUgKzE4MjIsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J3c2VtLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3J3c2VtLmgKaW5kZXggMTk4N2YzZS4uMDZlMjI1MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9yd3NlbS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcndzZW0uaApAQCAtNDEsNyArNDEsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCi0JeyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBcCisJeyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgX19TUElOX0xPQ0tfVU5MT0NLRUQoKG5hbWUpLndhaXRfbG9jayksIFwKIAkgIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIFwKIAkgIF9fUldTRU1fREVQX01BUF9JTklUKG5hbWUpIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbWFzay5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbWFzay5jCmluZGV4IDZiNWQxOTEuLmEzNTFlZDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ltYXNrLmMKQEAgLTY4LDcgKzY4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbWFza19pcnFfY2hpcCA9IHsKLQkudHlwZW5hbWUJPSAiU1IuSU1BU0siLAorCS5uYW1lCQk9ICJTUi5JTUFTSyIsCiAJLm1hc2sJCT0gbWFza19pbWFza19pcnEsCiAJLnVubWFzawkJPSB1bm1hc2tfaW1hc2tfaXJxLAogCS5tYXNrX2Fjawk9IG1hc2tfaW1hc2tfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jCmluZGV4IDZjMDkyZjEuLjA2ZTdlMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMKQEAgLTg1LDcgKzg1LDcgQEAKIHN0YXRpYyB2b2lkIGVuZF9pbnRjX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbnRjX2lycV90eXBlID0gewotCS50eXBlbmFtZSA9ICJJTlRDIiwKKwkubmFtZSA9ICJJTlRDIiwKIAkuc3RhcnR1cCA9IHN0YXJ0dXBfaW50Y19pcnEsCiAJLnNodXRkb3duID0gc2h1dGRvd25faW50Y19pcnEsCiAJLmVuYWJsZSA9IGVuYWJsZV9pbnRjX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwppbmRleCAwMTUxOTMzLi5iYjQwN2VmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCkBAIC0xNTIsOCArMTUyLDYgQEAKIAltb3YubAkxZiwgcjAKIAltb3YubAlAcjAsIHI2CiAKLQlzdGkKLQogCW1vdi5sCTNmLCByMAogCW1vdi5sCTRmLCByMQogCW1vdglyMTUsIHI0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCmluZGV4IDM1MDk3NzUuLjU0OTFiMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgogI2luY2x1ZGUgPGNwdS9zaDc3MjIuaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CkBAIC0zNzMsNiArMzc0LDE4IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubW9kZSA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRtYV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzIyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZjbXRfZGV2aWNlLAogCSZ0bXUwX2RldmljZSwKQEAgLTM4NSw2ICszOTgsNyBAQAogCSZ2cHVfZGV2aWNlLAogCSZ2ZXVfZGV2aWNlLAogCSZqcHVfZGV2aWNlLAorCSZkbWFfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2g3NzIyX2RldmljZXNfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKaW5kZXggMmM5MDFmNC4uMTJmZjU2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KIAogc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgdG11MF9wbGF0Zm9ybV9kYXRhID0gewogCS5uYW1lID0gIlRNVTAiLApAQCAtMjQwLDYgKzI0MSwxOCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1vZGUgPSAoU0hETUFfTUlYX0lSUSB8IFNIRE1BX0RNQU9SMSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWFfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZkbWFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmdG11MF9kZXZpY2UsCiAJJnRtdTFfZGV2aWNlLApAQCAtMjQ5LDYgKzI2Miw3IEBACiAJJnRtdTVfZGV2aWNlLAogCSZydGNfZGV2aWNlLAogCSZzY2lfZGV2aWNlLAorCSZkbWFfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2g3NzgwX2RldmljZXNfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCmluZGV4IGJjNGQ4ZDcuLmQ3NmEyMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYwpAQCAtMjAsMTEgKzIwLDExIEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9kd2FyZi5oPgogI2luY2x1ZGUgPGFzbS91bndpbmRlci5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KLSNpbmNsdWRlIDxhc20vZHdhcmYuaD4KICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCiAvKiBSZXNlcnZlIGVub3VnaCBtZW1vcnkgZm9yIHR3byBzdGFjayBmcmFtZXMgKi8KQEAgLTU1NSw5ICs1NTUsMzAgQEAKIAkgKiBOT1RFOiB0aGUgcmV0dXJuIGFkZHJlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXR1cCBieSB0aGUKIAkgKiB0aW1lIHRoaXMgZnVuY3Rpb24gbWFrZXMgaXRzIGZpcnN0IGZ1bmN0aW9uIGNhbGwuCiAJICovCi0JaWYgKCFwYyAmJiAhcHJldikKKwlpZiAoIXBjIHx8ICFwcmV2KQogCQlwYyA9ICh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGV4dF9hZGRyKCk7CiAKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJLyoKKwkgKiBJZiBvdXIgc3RhY2sgaGFzIGJlZW4gcGF0Y2hlZCBieSB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyCisJICogdGhlbiB3ZSBtaWdodCBzZWUgdGhlIGFkZHJlc3Mgb2YgcmV0dXJuX3RvX2hhbmRsZXIoKSB3aGVyZSB3ZQorCSAqIGV4cGVjdGVkIHRvIGZpbmQgdGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MuCisJICovCisJaWYgKHBjID09ICh1bnNpZ25lZCBsb25nKSZyZXR1cm5fdG9faGFuZGxlcikgeworCQlpbnQgaW5kZXggPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKKworCQkvKgorCQkgKiBXZSBjdXJyZW50bHkgaGF2ZSBubyB3YXkgb2YgdHJhY2tpbmcgaG93IG1hbnkKKwkJICogcmV0dXJuX3RvX2hhbmRsZXIoKSdzIHdlJ3ZlIHNlZW4uIElmIHRoZXJlIGlzIG1vcmUKKwkJICogdGhhbiBvbmUgcGF0Y2hlZCByZXR1cm4gYWRkcmVzcyBvbiBvdXIgc3RhY2ssCisJCSAqIGNvbXBsYWluIGxvdWRseS4KKwkJICovCisJCVdBUk5fT04oaW5kZXggPiAwKTsKKworCQlwYyA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0OworCX0KKyNlbmRpZgorCiAJZnJhbWUgPSBtZW1wb29sX2FsbG9jKGR3YXJmX2ZyYW1lX3Bvb2wsIEdGUF9BVE9NSUMpOwogCWlmICghZnJhbWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgYSBkd2FyZiBmcmFtZVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IDY4ZDkyMjMuLjNlYjg0OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0xMjEsNyArMTIxLDcgQEAKIEVOVFJZKHJlc3VtZV91c2Vyc3BhY2UpCiAJISByODogY3VycmVudF90aHJlYWRfaW5mbwogCWNsaQotCVRSQUNFX0lSUVNfT2ZGCisJVFJBQ0VfSVJRU19PRkYKIAltb3YubAlAKFRJX0ZMQUdTLHI4KSwgcjAJCSEgY3VycmVudF90aHJlYWRfaW5mby0+ZmxhZ3MKIAl0c3QJIyhfVElGX1dPUktfTUFTSyAmIDB4ZmYpLCByMAogCWJ0L3MJX19yZXN0b3JlX2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYwppbmRleCBhM2RjYzZkLi4yYzQ4ZTI2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYwpAQCAtMjkxLDMxICsyOTEsNDggQEAKIAlyZXR1cm4gc3lzY2FsbHNfbWV0YWRhdGFbbnJdOwogfQogCi12b2lkIGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKK2ludCBzeXNjYWxsX25hbWVfdG9fbnIoY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKworCWlmICghc3lzY2FsbHNfbWV0YWRhdGEpCisJCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfc3lzY2FsbHM7IGkrKykKKwkJaWYgKHN5c2NhbGxzX21ldGFkYXRhW2ldKQorCQkJaWYgKCFzdHJjbXAoc3lzY2FsbHNfbWV0YWRhdGFbaV0tPm5hbWUsIG5hbWUpKQorCQkJCXJldHVybiBpOworCXJldHVybiAtMTsKK30KKwordm9pZCBzZXRfc3lzY2FsbF9lbnRlcl9pZChpbnQgbnVtLCBpbnQgaWQpCit7CisJc3lzY2FsbHNfbWV0YWRhdGFbbnVtXS0+ZW50ZXJfaWQgPSBpZDsKK30KKwordm9pZCBzZXRfc3lzY2FsbF9leGl0X2lkKGludCBudW0sIGludCBpZCkKK3sKKwlzeXNjYWxsc19tZXRhZGF0YVtudW1dLT5leGl0X2lkID0gaWQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqbWV0YTsKIAl1bnNpZ25lZCBsb25nICoqcHN5c19zeXNjYWxsX3RhYmxlID0gJnN5c19jYWxsX3RhYmxlOwotCXN0YXRpYyBhdG9taWNfdCByZWZzOwotCi0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZyZWZzKSAhPSAxKQotCQlnb3RvIGVuZDsKIAogCXN5c2NhbGxzX21ldGFkYXRhID0ga3phbGxvYyhzaXplb2YoKnN5c2NhbGxzX21ldGFkYXRhKSAqCiAJCQkJCUZUUkFDRV9TWVNDQUxMX01BWCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzeXNjYWxsc19tZXRhZGF0YSkgewogCQlXQVJOX09OKDEpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1lTQ0FMTF9NQVg7IGkrKykgewogCQltZXRhID0gZmluZF9zeXNjYWxsX21ldGEocHN5c19zeXNjYWxsX3RhYmxlW2ldKTsKIAkJc3lzY2FsbHNfbWV0YWRhdGFbaV0gPSBtZXRhOwogCX0KLQlyZXR1cm47CiAKLQkvKiBQYXJhbm9pZDogYXZvaWQgb3ZlcmZsb3cgKi8KLWVuZDoKLQlhdG9taWNfZGVjKCZyZWZzKTsKKwlyZXR1cm4gMDsKIH0KK2FyY2hfaW5pdGNhbGwoYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyk7CiAjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCmluZGV4IDRmZjUwNzIuLmI4ZmE2NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKQEAgLTE0Nyw2ICsxNDcsOSBAQAogCiB2b2lkIF9faW9tZW0gKmdlbmVyaWNfaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKQogeworCWlmIChQWFNFRyhhZGRyKSA+PSBQMVNFRykKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOworCiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoYWRkciArIGdlbmVyaWNfaW9fYmFzZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lycS5jIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKaW5kZXggN2NiOTMzYi4uZWFjN2RhNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTEwNiw3ICsxMDcsNyBAQAogc3RhdGljIHVuaW9uIGlycV9jdHggKnNvZnRpcnFfY3R4W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7CiAjZW5kaWYKIAotYXNtbGlua2FnZSBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSBfX2lycV9lbnRyeSBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKICNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMgYi9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMKaW5kZXggNTQ4ZjY2MC4uY2JjZTYzOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTEzMyw0ICsxMzQsNiBAQAogCiAJaWYgKCFzaF9tdi5tdl9ucl9pcnFzKQogCQlzaF9tdi5tdl9ucl9pcnFzID0gTlJfSVJRUzsKKworCV9fc2V0X2lvX3BvcnRfYmFzZShQMlNFRyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwppbmRleCBmOWQ0NGY4Li45OWI0ZmI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKQEAgLTU0OSw2ICs1NDksOCBAQAogCiAJaWYgKGNwdSA9PSAwKQogCQlzZXFfcHJpbnRmKG0sICJtYWNoaW5lXHRcdDogJXNcbiIsIGdldF9zeXN0ZW1fdHlwZSgpKTsKKwllbHNlCisJCXNlcV9wcmludGYobSwgIlxuIik7CiAKIAlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdDogJWRcbiIsIGNwdSk7CiAJc2VxX3ByaW50ZihtLCAiY3B1IGZhbWlseVx0OiAlc1xuIiwgaW5pdF91dHNuYW1lKCktPm1hY2hpbmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKaW5kZXggOGRiZTI2Yi4uNDQ0Y2NlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCkBAIC04NCw2ICs4NCwyMSBAQAogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJfaTRfZXZlbik7CiBERUNMQVJFX0VYUE9SVChfX21vdnN0cl9pNF9vZGQpOwogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJTSTEyX2k0KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k4KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kxMik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMTYpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTIwKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kyNCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMjgpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTMyKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kzNik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNDApOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTQ0KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k0OCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNTIpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTU2KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k2MCk7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbV9pNF9ldmVuKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92bWVtX2k0X29kZCk7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMTJfaTQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCA2NzI5NzAzLi4zZGIzNzQyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JaWYgKCEoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKKwlpZiAoIShib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQogCQlyZXR1cm4gMDsKIAogCXNldF91c2VkX21hdGgoKTsKQEAgLTE1OCw3ICsxNTgsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCWlmICghKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCisJaWYgKCEoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXVzZWRfbWF0aCgpKSB7CkBAIC0xOTksNyArMTk5LDcgQEAKICN1bmRlZiBDT1BZCiAKICNpZmRlZiBDT05GSUdfU0hfRlBVCi0JaWYgKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgeworCWlmIChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpIHsKIAkJaW50IG93bmVkX2ZwOwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKQEAgLTQ3Miw2ICs0NzIsNyBAQAogCQllcnIgfD0gX19wdXRfdXNlcihPUl9SMF9SMCwgJmZyYW1lLT5yZXRjb2RlWzZdKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIoKF9fTlJfcnRfc2lncmV0dXJuKSwgJmZyYW1lLT5yZXRjb2RlWzddKTsKIAkJcmVncy0+cHIgPSAodW5zaWduZWQgbG9uZykgZnJhbWUtPnJldGNvZGU7CisJCWZsdXNoX2ljYWNoZV9yYW5nZShyZWdzLT5wciwgcmVncy0+cHIgKyBzaXplb2YoZnJhbWUtPnJldGNvZGUpKTsKIAl9CiAKIAlpZiAoZXJyKQpAQCAtNDk3LDggKzQ5OCw2IEBACiAJcHJfZGVidWcoIlNJRyBkZWxpdmVyICglczolZCk6IHNwPSVwIHBjPSUwOGx4IHByPSUwOGx4XG4iLAogCQkgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIGZyYW1lLCByZWdzLT5wYywgcmVncy0+cHIpOwogCi0JZmx1c2hfaWNhY2hlX3JhbmdlKHJlZ3MtPnByLCByZWdzLT5wciArIHNpemVvZihmcmFtZS0+cmV0Y29kZSkpOwotCiAJcmV0dXJuIDA7CiAKIGdpdmVfc2lnc2VndjoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NtcC5jIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKaW5kZXggNDQyZDhkNC4uMTYwZGIxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKQEAgLTM1LDYgKzM1LDggQEAKIHsKIAlzdHJ1Y3Qgc2hfY3B1aW5mbyAqYyA9IGNwdV9kYXRhICsgY3B1OwogCisJbWVtY3B5KGMsICZib290X2NwdV9kYXRhLCBzaXplb2Yoc3RydWN0IHNoX2NwdWluZm8pKTsKKwogCWMtPmxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKaW5kZXggNmFiYTlhZi4uN2EyZWUzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CkBAIC01NCw4ICs1NSw4IEBACiAvKiBiaXRmaWVsZDogMTogd2FybiAyOiBmaXh1cCA0OiBzaWduYWwgLT4gY29tYmluYXRpb25zIDJ8NCAmJiAxfDJ8NCBhcmUgbm90CiAgICB2YWxpZCEgKi8KIHN0YXRpYyBpbnQgc2VfdXNlcm1vZGUgPSAzOwotLyogMDogbm8gd2FybmluZyAxOiBwcmludCBhIHdhcm5pbmcgbWVzc2FnZSAqLwotc3RhdGljIGludCBzZV9rZXJubW9kZV93YXJuID0gMTsKKy8qIDA6IG5vIHdhcm5pbmcgMTogcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UsIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KK3N0YXRpYyBpbnQgc2Vfa2Vybm1vZGVfd2FybjsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgY29uc3QgY2hhciAqc2VfdXNlcm1vZGVfYWN0aW9uW10gPSB7CkBAIC0xNTksMTIgKzE2MCwxMiBAQAogCiAJb29wc19lbnRlcigpOwogCi0JY29uc29sZV92ZXJib3NlKCk7CiAJc3Bpbl9sb2NrX2lycSgmZGllX2xvY2spOworCWNvbnNvbGVfdmVyYm9zZSgpOwogCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCiAJcHJpbnRrKCIlczogJTA0bHggWyMlZF1cbiIsIHN0ciwgZXJyICYgMHhmZmZmLCArK2RpZV9jb3VudGVyKTsKLQorCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKIAlwcmludF9tb2R1bGVzKCk7CiAJc2hvd19yZWdzKHJlZ3MpOwogCkBAIC0xODAsNiArMTgxLDcgQEAKIAlidXN0X3NwaW5sb2NrcygwKTsKIAlhZGRfdGFpbnQoVEFJTlRfRElFKTsKIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKKwlvb3BzX2V4aXQoKTsKIAogCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpCiAJCWNyYXNoX2tleGVjKHJlZ3MpOwpAQCAtMTkwLDcgKzE5Miw2IEBACiAJaWYgKHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKIAotCW9vcHNfZXhpdCgpOwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKQEAgLTQ1Miw2ICs0NTMsMTIgQEAKIAl1X2ludCBybTsKIAlpbnQgcmV0LCBpbmRleDsKIAorCS8qCisJICogWFhYOiBXZSBjYW4ndCBoYW5kbGUgbWl4ZWQgMTYvMzItYml0IGluc3RydWN0aW9ucyB5ZXQKKwkgKi8KKwlpZiAoaW5zdHJ1Y3Rpb25fc2l6ZShpbnN0cnVjdGlvbikgIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpbmRleCA9IChpbnN0cnVjdGlvbj4+OCkmMTU7CS8qIDB4MEYwMCAqLwogCXJtID0gcmVncy0+cmVnc1tpbmRleF07CiAKQEAgLTYxOSw5ICs2MjYsOSBAQAogCiAJCXNlX3VzZXIgKz0gMTsKIAotI2lmbmRlZiBDT05GSUdfQ1BVX1NIMkEKIAkJc2V0X2ZzKFVTRVJfRFMpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAodTE2ICopKHJlZ3MtPnBjICYgfjEpLCAyKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAoaW5zbl9zaXplX3QgKikocmVncy0+cGMgJiB+MSksCisJCQkJICAgc2l6ZW9mKGluc3RydWN0aW9uKSkpIHsKIAkJCXNldF9mcyhvbGRmcyk7CiAJCQlnb3RvIHVzcGFjZV9zZWd2OwogCQl9CkBAIC02MzMsNyArNjQwLDYgQEAKIAkJCSAgICAgICAiaW4gXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAogCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKHZvaWQgKilyZWdzLT5wYywKIAkJCSAgICAgICBpbnN0cnVjdGlvbik7Ci0jZW5kaWYKIAogCQlpZiAoc2VfdXNlcm1vZGUgJiAyKQogCQkJZ290byBmaXh1cDsKQEAgLTY3MywxMiArNjc5LDYgQEAKIAl9IGVsc2UgewogCQlzZV9zeXMgKz0gMTsKIAotCQlpZiAoc2Vfa2Vybm1vZGVfd2FybikKLQkJCXByaW50ayhLRVJOX05PVElDRSAiVW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3MgIgotCQkJICAgICAgICJvbiBiZWhhbGYgb2YgXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAotCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKHZvaWQgKilyZWdzLT5wYywKLQkJCSAgICAgICBpbnN0cnVjdGlvbik7Ci0KIAkJaWYgKHJlZ3MtPnBjICYgMSkKIAkJCWRpZSgidW5hbGlnbmVkIHByb2dyYW0gY291bnRlciIsIHJlZ3MsIGVycm9yX2NvZGUpOwogCkBAIC02OTIsNiArNjkyLDEyIEBACiAJCQlkaWUoImluc24gZmF1bHRpbmcgaW4gZG9fYWRkcmVzc19lcnJvciIsIHJlZ3MsIDApOwogCQl9CiAKKwkJaWYgKHNlX2tlcm5tb2RlX3dhcm4pCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVuYWxpZ25lZCBrZXJuZWwgYWNjZXNzICIKKwkJCSAgICAgICAib24gYmVoYWxmIG9mIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKKwkJCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsICh2b2lkICopcmVncy0+cGMsCisJCQkgICAgICAgaW5zdHJ1Y3Rpb24pOworCiAJCWhhbmRsZV91bmFsaWduZWRfYWNjZXNzKGluc3RydWN0aW9uLCByZWdzLAogCQkJCQkmdXNlcl9tZW1fYWNjZXNzLCAwKTsKIAkJc2V0X2ZzKG9sZGZzKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCA2NGRjMWFkLi43ZjdiNTJmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC0yMjcsNyArMjI3LDcgQEAKIAogY2hvaWNlCiAJcHJvbXB0ICJIdWdlVExCIHBhZ2Ugc2l6ZSIKLQlkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRSAmJiAoQ1BVX1NINCB8fCBDUFVfU0g1KSAmJiBNTVUKKwlkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRQogCWRlZmF1bHQgSFVHRVRMQl9QQUdFX1NJWkVfMU1CIGlmIFBBR0VfU0laRV82NEtCCiAJZGVmYXVsdCBIVUdFVExCX1BBR0VfU0laRV82NEsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKaW5kZXggYjI0NTNiYi4uYjdmMjM1YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5lIE1BWF9EQ0FDSEVfUEFHRVMJNjQJLyogWFhYOiBUdW5lIGZvciB3YXlzICovCiAjZGVmaW5lIE1BWF9JQ0FDSEVfUEFHRVMJMzIKIAotc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAorc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV9vbmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBleGVjX29mZnNldCk7CiAKIC8qCkBAIC00Myw3ICs0Myw3IEBACiAgKiBDYWxsZWQgZnJvbSBrZXJuZWwvbW9kdWxlLmM6c3lzX2luaXRfbW9kdWxlIGFuZCByb3V0aW5lIGZvciBhLm91dCBmb3JtYXQsCiAgKiBzaWduYWwgaGFuZGxlciBjb2RlIGFuZCBrcHJvYmVzIGNvZGUKICAqLwotc3RhdGljIHZvaWQgc2g0X2ZsdXNoX2ljYWNoZV9yYW5nZSh2b2lkICphcmdzKQorc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgc2g0X2ZsdXNoX2ljYWNoZV9yYW5nZSh2b2lkICphcmdzKQogewogCXN0cnVjdCBmbHVzaGVyX2RhdGEgKmRhdGEgPSBhcmdzOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKQEAgLTcyLDYgKzcyLDcgQEAKIAogCWZvciAodiA9IHN0YXJ0OyB2IDwgZW5kOyB2ICs9IEwxX0NBQ0hFX0JZVEVTKSB7CiAJCXVuc2lnbmVkIGxvbmcgaWNhY2hlYWRkcjsKKwkJaW50IGosIG47CiAKIAkJX19vY2J3Yih2KTsKIApAQCAtNzksOCArODAsMTAgQEAKIAkJCQljcHVfZGF0YS0+aWNhY2hlLmVudHJ5X21hc2spOwogCiAJCS8qIENsZWFyIGktY2FjaGUgbGluZSB2YWxpZC1iaXQgKi8KKwkJbiA9IGJvb3RfY3B1X2RhdGEuaWNhY2hlLm5fYWxpYXNlczsKIAkJZm9yIChpID0gMDsgaSA8IGNwdV9kYXRhLT5pY2FjaGUud2F5czsgaSsrKSB7Ci0JCQlfX3Jhd193cml0ZWwoMCwgaWNhY2hlYWRkcik7CisJCQlmb3IgKGogPSAwOyBqIDwgbjsgaisrKQorCQkJCV9fcmF3X3dyaXRlbCgwLCBpY2FjaGVhZGRyICsgKGogKiBQQUdFX1NJWkUpKTsKIAkJCWljYWNoZWFkZHIgKz0gY3B1X2RhdGEtPmljYWNoZS53YXlfaW5jcjsKIAkJfQogCX0KQEAgLTg5LDggKzkyLDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgcGh5cykKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9vbmUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBwaHlzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGV4ZWNfb2Zmc2V0ID0gMDsKIApAQCAtMTAzLDggKzEwNSw3IEBACiAJCWV4ZWNfb2Zmc2V0ID0gMHgyMDAwMDAwMDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX2ZsdXNoX2NhY2hlXzQwOTYoc3RhcnQgfCBTSF9DQUNIRV9BU1NPQywKLQkJCSAgIFAxU0VHQUREUihwaHlzKSwgZXhlY19vZmZzZXQpOworCV9fZmx1c2hfY2FjaGVfb25lKHN0YXJ0IHwgU0hfQ0FDSEVfQVNTT0MsIFAxU0VHQUREUihwaHlzKSwgZXhlY19vZmZzZXQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMTI5LDggKzEzMCw4IEBACiAKIAkJLyogTG9vcCBhbGwgdGhlIEQtY2FjaGUgKi8KIAkJbiA9IGJvb3RfY3B1X2RhdGEuZGNhY2hlLm5fYWxpYXNlczsKLQkJZm9yIChpID0gMDsgaSA8IG47IGkrKywgYWRkciArPSA0MDk2KQotCQkJZmx1c2hfY2FjaGVfNDA5NihhZGRyLCBwaHlzKTsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKywgYWRkciArPSBQQUdFX1NJWkUpCisJCQlmbHVzaF9jYWNoZV9vbmUoYWRkciwgcGh5cyk7CiAJfQogCiAJd21iKCk7CkBAIC0zMTgsMTEgKzMxOSwxMSBAQAogCS8qIFdlIG9ubHkgbmVlZCB0byBmbHVzaCBELWNhY2hlIHdoZW4gd2UgaGF2ZSBhbGlhcyAqLwogCWlmICgoYWRkcmVzc15waHlzKSAmIGFsaWFzX21hc2spIHsKIAkJLyogTG9vcCA0SyBvZiB0aGUgRC1jYWNoZSAqLwotCQlmbHVzaF9jYWNoZV80MDk2KAorCQlmbHVzaF9jYWNoZV9vbmUoCiAJCQlDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKGFkZHJlc3MgJiBhbGlhc19tYXNrKSwKIAkJCXBoeXMpOwogCQkvKiBMb29wIGFub3RoZXIgNEsgb2YgdGhlIEQtY2FjaGUgKi8KLQkJZmx1c2hfY2FjaGVfNDA5NigKKwkJZmx1c2hfY2FjaGVfb25lKAogCQkJQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IChwaHlzICYgYWxpYXNfbWFzayksCiAJCQlwaHlzKTsKIAl9CkBAIC0zMzcsNyArMzM4LDcgQEAKIAkJICoga2VybmVsIGhhcyBuZXZlciBleGVjdXRlZCB0aGUgY29kZSB0aHJvdWdoIGl0cyBpZGVudGl0eQogCQkgKiB0cmFuc2xhdGlvbi4KIAkJICovCi0JCWZsdXNoX2NhY2hlXzQwOTYoCisJCWZsdXNoX2NhY2hlX29uZSgKIAkJCUNBQ0hFX0lDX0FERFJFU1NfQVJSQVkgfCAoYWRkcmVzcyAmIGFsaWFzX21hc2spLAogCQkJcGh5cyk7CiAJfQpAQCAtMzkzLDcgKzM5NCw3IEBACiB9CiAKIC8qKgotICogX19mbHVzaF9jYWNoZV80MDk2CisgKiBfX2ZsdXNoX2NhY2hlX29uZQogICoKICAqIEBhZGRyOiAgYWRkcmVzcyBpbiBtZW1vcnkgbWFwcGVkIGNhY2hlIGFycmF5CiAgKiBAcGh5czogIFAxIGFkZHJlc3MgdG8gZmx1c2ggKGhhcyB0byBtYXRjaCB0YWdzIGlmIGFkZHIgaGFzICdBJyBiaXQKQEAgLTQwNiw3ICs0MDcsNyBAQAogICogb3BlcmF0aW9uIChwdXJnZS93cml0ZS1iYWNrKSBpcyBzZWxlY3RlZCBieSB0aGUgbG93ZXIgMiBiaXRzIG9mCiAgKiAncGh5cycuCiAgKi8KLXN0YXRpYyB2b2lkIF9fZmx1c2hfY2FjaGVfNDA5Nih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKK3N0YXRpYyB2b2lkIF9fZmx1c2hfY2FjaGVfb25lKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXhlY19vZmZzZXQpCiB7CiAJaW50IHdheV9jb3VudDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCmluZGV4IDJjYWRlZTIuLjI2MDE5MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYwpAQCAtNzgsNyArNzgsNyBAQAogLyoKICAqIFdyaXRlYmFjayZJbnZhbGlkYXRlIHRoZSBELWNhY2hlIG9mIHRoZSBwYWdlCiAgKi8KLXN0YXRpYyB2b2lkIF9fZmx1c2hfZGNhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyBwaHlzKQorc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgX19mbHVzaF9kY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIHBoeXMpCiB7CiAJdW5zaWduZWQgbG9uZyB3YXlzLCB3YXlzaXplLCBhZGRyc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKFBIWVNBRERSKHBhZ2VfYWRkcmVzcyhwYWdlKSkpOwogfQogCi1zdGF0aWMgdm9pZCBzaDc3MDVfZmx1c2hfY2FjaGVfYWxsKHZvaWQgKmFyZ3MpCitzdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBzaDc3MDVfZmx1c2hfY2FjaGVfYWxsKHZvaWQgKmFyZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS5jIGIvYXJjaC9zaC9tbS9jYWNoZS5jCmluZGV4IDM1YzM3YjcuLmEyZGM3ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCQlyZXR1cm47CiAKIAlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLQlpZiAocGZuX3ZhbGlkKHBmbikgJiYgcGFnZV9tYXBwaW5nKHBhZ2UpKSB7CisJaWYgKHBmbl92YWxpZChwZm4pKSB7CiAJCWludCBkaXJ0eSA9IHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7CiAJCWlmIChkaXJ0eSkgewogCQkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwpAQCAtMjY1LDYgKzI2NSw4IEBACiAKIHZvaWQgX19pbml0IGNwdV9jYWNoZV9pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgaW50IGNhY2hlX2Rpc2FibGVkID0gIShfX3Jhd19yZWFkbChDQ1IpICYgQ0NSX0NBQ0hFX0VOQUJMRSk7CisKIAljb21wdXRlX2FsaWFzKCZib290X2NwdV9kYXRhLmljYWNoZSk7CiAJY29tcHV0ZV9hbGlhcygmYm9vdF9jcHVfZGF0YS5kY2FjaGUpOwogCWNvbXB1dGVfYWxpYXMoJmJvb3RfY3B1X2RhdGEuc2NhY2hlKTsKQEAgLTI3Myw2ICsyNzUsMTMgQEAKIAlfX2ZsdXNoX3B1cmdlX3JlZ2lvbgkJPSBub29wX19mbHVzaF9yZWdpb247CiAJX19mbHVzaF9pbnZhbGlkYXRlX3JlZ2lvbgk9IG5vb3BfX2ZsdXNoX3JlZ2lvbjsKIAorCS8qCisJICogTm8gZmx1c2hpbmcgaXMgbmVjZXNzYXJ5IGluIHRoZSBkaXNhYmxlZCBjYWNoZSBjYXNlIHNvIHdlIGNhbgorCSAqIGp1c3Qga2VlcCB0aGUgbm9vcCBmdW5jdGlvbnMgaW4gbG9jYWxfZmx1c2hfLi4oKSBhbmQgX19mbHVzaF8uLigpCisJICovCisJaWYgKHVubGlrZWx5KGNhY2hlX2Rpc2FibGVkKSkKKwkJZ290byBza2lwOworCiAJaWYgKGJvb3RfY3B1X2RhdGEuZmFtaWx5ID09IENQVV9GQU1JTFlfU0gyKSB7CiAJCWV4dGVybiB2b2lkIF9fd2VhayBzaDJfY2FjaGVfaW5pdCh2b2lkKTsKIApAQCAtMzEyLDUgKzMyMSw2IEBACiAJCXNoNV9jYWNoZV9pbml0KCk7CiAJfQogCitza2lwOgogCWVtaXRfY2FjaGVfcGFyYW1zKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCmluZGV4IGMzMjUwNjEuLmE4NmVhYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCkBAIC04Myw3ICs4Myw3IEBACiAJICoKIAkgKiBQTUIgZW50cmllcyBhcmUgYWxsIHByZS1mYXVsdGVkLgogCSAqLwotCWlmICh1bmxpa2VseShzaXplID49IDB4MTAwMDAwMCkpIHsKKwlpZiAodW5saWtlbHkocGh5c19hZGRyID49IFAxU0VHKSkgewogCQl1bnNpZ25lZCBsb25nIG1hcHBlZCA9IHBtYl9yZW1hcChhZGRyLCBwaHlzX2FkZHIsIHNpemUsIGZsYWdzKTsKIAogCQlpZiAobGlrZWx5KG1hcHBlZCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLmMgYi9hcmNoL3NoL21tL3BtYi5jCmluZGV4IGIxYTcxNGEuLmFhZGUzMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vcG1iLmMKKysrIGIvYXJjaC9zaC9tbS9wbWIuYwpAQCAtMzMsNiArMzMsOCBAQAogCiAjZGVmaW5lIE5SX1BNQl9FTlRSSUVTCTE2CiAKK3N0YXRpYyB2b2lkIF9fcG1iX3VubWFwKHN0cnVjdCBwbWJfZW50cnkgKik7CisKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcG1iX2NhY2hlOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcG1iX21hcDsKIApAQCAtMjE4LDkgKzIyMCwxMCBAQAogbG9uZyBwbWJfcmVtYXAodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAogCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IHBtYl9lbnRyeSAqcG1icDsKKwlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJwLCAqcG1iZTsKIAl1bnNpZ25lZCBsb25nIHdhbnRlZDsKIAlpbnQgcG1iX2ZsYWdzLCBpOworCWxvbmcgZXJyOwogCiAJLyogQ29udmVydCB0eXBpY2FsIHBncHJvdCB2YWx1ZSB0byB0aGUgUE1CIGVxdWl2YWxlbnQgKi8KIAlpZiAoZmxhZ3MgJiBfUEFHRV9DQUNIQUJMRSkgewpAQCAtMjM2LDIwICsyMzksMjIgQEAKIAogYWdhaW46CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKSB7Ci0JCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CiAJCWludCByZXQ7CiAKIAkJaWYgKHNpemUgPCBwbWJfc2l6ZXNbaV0uc2l6ZSkKIAkJCWNvbnRpbnVlOwogCiAJCXBtYmUgPSBwbWJfYWxsb2ModmFkZHIsIHBoeXMsIHBtYl9mbGFncyB8IHBtYl9zaXplc1tpXS5mbGFnKTsKLQkJaWYgKElTX0VSUihwbWJlKSkKLQkJCXJldHVybiBQVFJfRVJSKHBtYmUpOworCQlpZiAoSVNfRVJSKHBtYmUpKSB7CisJCQllcnIgPSBQVFJfRVJSKHBtYmUpOworCQkJZ290byBvdXQ7CisJCX0KIAogCQlyZXQgPSBzZXRfcG1iX2VudHJ5KHBtYmUpOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCXBtYl9mcmVlKHBtYmUpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OwogCQl9CiAKIAkJcGh5cwkrPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKQEAgLTI2NCwxMiArMjY5LDI1IEBACiAJCQlwbWJwLT5saW5rID0gcG1iZTsKIAogCQlwbWJwID0gcG1iZTsKKworCQkvKgorCQkgKiBJbnN0ZWFkIG9mIHRyeWluZyBzbWFsbGVyIHNpemVzIG9uIGV2ZXJ5IGl0ZXJhdGlvbgorCQkgKiAoZXZlbiBpZiB3ZSBzdWNjZWVkIGluIGFsbG9jYXRpbmcgc3BhY2UpLCB0cnkgdXNpbmcKKwkJICogcG1iX3NpemVzW2ldLnNpemUgYWdhaW4uCisJCSAqLworCQlpLS07CiAJfQogCiAJaWYgKHNpemUgPj0gMHgxMDAwMDAwKQogCQlnb3RvIGFnYWluOwogCiAJcmV0dXJuIHdhbnRlZCAtIHNpemU7CisKK291dDoKKwlpZiAocG1icCkKKwkJX19wbWJfdW5tYXAocG1icCk7CisKKwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIHBtYl91bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC0yODMsMTIgKzMwMSwxOSBAQAogCWlmICh1bmxpa2VseSghcG1iZSkpCiAJCXJldHVybjsKIAorCV9fcG1iX3VubWFwKHBtYmUpOworfQorCitzdGF0aWMgdm9pZCBfX3BtYl91bm1hcChzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQorewogCVdBUk5fT04oIXRlc3RfYml0KHBtYmUtPmVudHJ5LCAmcG1iX21hcCkpOwogCiAJZG8gewogCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJsaW5rID0gcG1iZTsKIAotCQljbGVhcl9wbWJfZW50cnkocG1iZSk7CisJCWlmIChwbWJlLT5lbnRyeSAhPSBQTUJfTk9fRU5UUlkpCisJCQljbGVhcl9wbWJfZW50cnkocG1iZSk7CisKIAkJcG1iZSA9IHBtYmxpbmstPmxpbms7CiAKIAkJcG1iX2ZyZWUocG1ibGluayk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggOTdmY2E0Ni4uMDVlZjUzOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtMjYsNiArMjYsNyBAQAogCXNlbGVjdCBSVENfQ0xBU1MKIAlzZWxlY3QgUlRDX0RSVl9NNDhUNTkKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUworCXNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DCiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCkBAIC00OCw2ICs0OSw3IEBACiAJc2VsZWN0IFJUQ19EUlZfU1VONFYKIAlzZWxlY3QgUlRDX0RSVl9TVEFSRklSRQogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCisJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKIAogY29uZmlnIEFSQ0hfREVGQ09ORklHCiAJc3RyaW5nCkBAIC0xMDIsNiArMTA0LDkgQEAKIGNvbmZpZyBORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksKIAlkZWZfYm9vbCB5IGlmIFNQQVJDNjQKIAorY29uZmlnIE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCisJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CisKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlib29sCiAJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2Jvb3QvYnRmaXh1cHByZXAuYyBiL2FyY2gvc3BhcmMvYm9vdC9idGZpeHVwcHJlcC5jCmluZGV4IDUyYTQyMDguLmJiZjkxYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvYm9vdC9idGZpeHVwcHJlcC5jCisrKyBiL2FyY2gvc3BhcmMvYm9vdC9idGZpeHVwcHJlcC5jCkBAIC02MSwxNCArNjEsMTQgQEAKIHVuc2lnbmVkIGxvbmcgbGFzdGZyZWxubzsKIGJ0Zml4dXAgKmxhc3RmOwogCi12b2lkIGZhdGFsKHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci12b2lkIGZhdGFsKHZvaWQpCitzdGF0aWMgdm9pZCBmYXRhbCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworc3RhdGljIHZvaWQgZmF0YWwodm9pZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIk1hbGZvcm1lZCBvdXRwdXQgZnJvbSBvYmpkdW1wXG4lc1xuIiwgYnVmZmVyKTsKIAlleGl0KDEpOwogfQogCi1idGZpeHVwICpmaW5kKGludCB0eXBlLCBjaGFyICpuYW1lKQorc3RhdGljIGJ0Zml4dXAgKmZpbmQoaW50IHR5cGUsIGNoYXIgKm5hbWUpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgewpAQCAtODgsNyArODgsNyBAQAogCXJldHVybiBhcnJheSArIGxhc3QgLSAxOwogfQogCi12b2lkIHNldF9tb2RlIChjaGFyICpidWZmZXIpCitzdGF0aWMgdm9pZCBzZXRfbW9kZSAoY2hhciAqYnVmZmVyKQogewogICAJZm9yIChtb2RlID0gMDs7IG1vZGUrKykKIAkJaWYgKGJ1ZmZlclttb2RlXSA8ICcwJyB8fCBidWZmZXJbbW9kZV0gPiAnOScpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzMyLmMgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzMyLmMKaW5kZXggZThkYzlhZC4uYWM5NDRhZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja18zMi5jCisrKyBiL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfMzIuYwpAQCAtMzUsMTcgKzM1LDE3IEBACiAgKiBhcyBQUk9NIGxvb2tzIGZvciBhLm91dCBpbWFnZSBvbmx5LgogICovCiAKLXVuc2lnbmVkIHNob3J0IGxkMihjaGFyICpwKQorc3RhdGljIHVuc2lnbmVkIHNob3J0IGxkMihjaGFyICpwKQogewogCXJldHVybiAocFswXSA8PCA4KSB8IHBbMV07CiB9CiAKLXVuc2lnbmVkIGludCBsZDQoY2hhciAqcCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGQ0KGNoYXIgKnApCiB7CiAJcmV0dXJuIChwWzBdIDw8IDI0KSB8IChwWzFdIDw8IDE2KSB8IChwWzJdIDw8IDgpIHwgcFszXTsKIH0KIAotdm9pZCBzdDQoY2hhciAqcCwgdW5zaWduZWQgaW50IHgpCitzdGF0aWMgdm9pZCBzdDQoY2hhciAqcCwgdW5zaWduZWQgaW50IHgpCiB7CiAJcFswXSA9IHggPj4gMjQ7CiAJcFsxXSA9IHggPj4gMTY7CkBAIC01Myw3ICs1Myw3IEBACiAJcFszXSA9IHg7CiB9CiAKLXZvaWQgdXNhZ2Uodm9pZCkKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiB7CiAJLyogZnNfaW1nLmd6IGlzIGFuIGltYWdlIG9mIGluaXRpYWwgcmFtZGlzay4gKi8KIAlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBwaWdneWJhY2sgdm1saW51eC5hb3V0IFN5c3RlbS5tYXAgZnNfaW1nLmd6XG4iKTsKQEAgLTYxLDcgKzYxLDcgQEAKIAlleGl0KDEpOwogfQogCi12b2lkIGRpZShjaGFyICpzdHIpCitzdGF0aWMgdm9pZCBkaWUoY2hhciAqc3RyKQogewogCXBlcnJvciAoc3RyKTsKIAlleGl0KDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja182NC5jIGIvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja182NC5jCmluZGV4IGM2M2ZkMWIuLmEyNmE2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfNjQuYworKysgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzY0LmMKQEAgLTMyLDcgKzMyLDcgQEAKIC8qIE5vdGU6IHJ1biB0aGlzIG9uIGFuIGEub3V0IGtlcm5lbCAodXNlIGVsZnRvYW91dCBmb3IgaXQpLCBhcyBQUk9NIGxvb2tzIGZvciBhLm91dCBpbWFnZSBvbmxseQogICAgdXNhZ2U6IHBpZ2d5YmFjayB2bWxpbnV4IFN5c3RlbS5tYXAgdGFpbCwgd2hlcmUgdGFpbCBpcyBnemlwcGVkIGZzIG9mIHRoZSBpbml0aWFsIHJhbWRpc2sgKi8KIAotdm9pZCBkaWUoY2hhciAqc3RyKQorc3RhdGljIHZvaWQgZGllKGNoYXIgKnN0cikKIHsKIAlwZXJyb3IgKHN0cik7CiAJZXhpdCgxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaGFyZGlycV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oYXJkaXJxXzMyLmgKaW5kZXggNGY2M2VkOC4uMTYyMDA3NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oYXJkaXJxXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oYXJkaXJxXzMyLmgKQEAgLTcsMTcgKzcsNyBAQAogI2lmbmRlZiBfX1NQQVJDX0hBUkRJUlFfSAogI2RlZmluZSBfX1NQQVJDX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLQotLyogZW50cnkuUyBpcyBzZW5zaXRpdmUgdG8gdGhlIG9mZnNldHMgb2YgdGhlc2UgZmllbGRzICovIC8qIFhYWCBQMyBJcyBpdD8gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwotCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KLQogI2RlZmluZSBIQVJESVJRX0JJVFMgICAgOAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KIAogI2VuZGlmIC8qIF9fU1BBUkNfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfMzIuaAppbmRleCBlYTQzMDU3Li5jYmY0ODAxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmgKQEAgLTYsMTAgKzYsMTAgQEAKICNpZm5kZWYgX1NQQVJDX0lSUV9ICiAjZGVmaW5lIF9TUEFSQ19JUlFfSAogCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KICNkZWZpbmUgTlJfSVJRUyAgICAxNgogCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKICNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCiAKIGV4dGVybiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKaW5kZXggMGZmOTJmYS4uZjNjYjc5MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKQEAgLTQxLDggKzQxLDggQEAKICNkZWZpbmUgTE9XX09CUF9BRERSRVNTCQlfQUMoMHgwMDAwMDAwMGYwMDAwMDAwLFVMKQogI2RlZmluZSBISV9PQlBfQUREUkVTUwkJX0FDKDB4MDAwMDAwMDEwMDAwMDAwMCxVTCkKICNkZWZpbmUgVk1BTExPQ19TVEFSVAkJX0FDKDB4MDAwMDAwMDEwMDAwMDAwMCxVTCkKLSNkZWZpbmUgVk1BTExPQ19FTkQJCV9BQygweDAwMDAwMDAyMDAwMDAwMDAsVUwpCi0jZGVmaW5lIFZNRU1NQVBfQkFTRQkJX0FDKDB4MDAwMDAwMDIwMDAwMDAwMCxVTCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJCV9BQygweDAwMDAwMTAwMDAwMDAwMDAsVUwpCisjZGVmaW5lIFZNRU1NQVBfQkFTRQkJX0FDKDB4MDAwMDAxMDAwMDAwMDAwMCxVTCkKIAogI2RlZmluZSB2bWVtbWFwCQkJKChzdHJ1Y3QgcGFnZSAqKVZNRU1NQVBfQkFTRSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKaW5kZXggMjVlODQ4Zi4uZDQ3YTk4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCkBAIC02Myw2ICs2MywxMCBAQAogCQkJICAgICA6IDogOiAibWVtb3J5Iik7IFwKIH0gd2hpbGUgKDApCiAKKy8qIFRoZSBrZXJuZWwgYWx3YXlzIGV4ZWN1dGVzIGluIFRTTyBtZW1vcnkgbW9kZWwgdGhlc2UgZGF5cywKKyAqIGFuZCBmdXJ0aGVybW9yZSBtb3N0IHNwYXJjNjQgY2hpcHMgaW1wbGVtZW50IG1vcmUgc3RyaW5nZW50CisgKiBtZW1vcnkgb3JkZXJpbmcgdGhhbiByZXF1aXJlZCBieSB0aGUgc3BlY2lmaWNhdGlvbnMuCisgKi8KICNkZWZpbmUgbWIoKQltZW1iYXJfc2FmZSgiI1N0b3JlTG9hZCIpCiAjZGVmaW5lIHJtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCiAjZGVmaW5lIHdtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Zpby5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS92aW8uaAppbmRleCA2Y2RiZjdlLi45ZDgzZDNiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Zpby5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdmlvLmgKQEAgLTI1OCw4ICsyNTgsNiBAQAogc3RhdGljIGlubGluZSB1MzIgdmlvX2RyaW5nX2F2YWlsKHN0cnVjdCB2aW9fZHJpbmdfc3RhdGUgKmRyLAogCQkJCSAgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSkKIHsKLQlNQVlCRV9CVUlMRF9CVUdfT04oIWlzX3Bvd2VyX29mXzIocmluZ19zaXplKSk7Ci0KIAlyZXR1cm4gKGRyLT5wZW5kaW5nIC0KIAkJKChkci0+cHJvZCAtIGRyLT5jb25zKSAmIChyaW5nX3NpemUgLSAxKSkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwva3RsYi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwva3RsYi5TCmluZGV4IDNlYTZlOGMuLjFkMzYxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2t0bGIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9rdGxiLlMKQEAgLTI4MCw4ICsyODAsOCBAQAogCiAjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQCiAJLyogRG8gbm90IHVzZSB0aGUgVFNCIGZvciB2bWVtbWFwLiAgKi8KLQltb3YJCShWTUVNTUFQX0JBU0UgPj4gMjQpLCAlZzUKLQlzbGx4CQklZzUsIDI0LCAlZzUKKwltb3YJCShWTUVNTUFQX0JBU0UgPj4gNDApLCAlZzUKKwlzbGx4CQklZzUsIDQwLCAlZzUKIAljbXAJCSVnNCwlZzUKIAliZ2V1LHBuCQkleGNjLCBrdm1hcF92bWVtbWFwCiAJIG5vcApAQCAtMjkzLDggKzI5Myw4IEBACiAJc2V0aGkJCSVoaShNT0RVTEVTX1ZBRERSKSwgJWc1CiAJY21wCQklZzQsICVnNQogCWJsdSxwbgkJJXhjYywga3ZtYXBfZHRsYl9sb25ncGF0aAotCSBtb3YJCShWTUFMTE9DX0VORCA+PiAyNCksICVnNQotCXNsbHgJCSVnNSwgMjQsICVnNQorCSBtb3YJCShWTUFMTE9DX0VORCA+PiA0MCksICVnNQorCXNsbHgJCSVnNSwgNDAsICVnNQogCWNtcAkJJWc0LCAlZzUKIAliZ2V1LHBuCQkleGNjLCBrdm1hcF9kdGxiX2xvbmdwYXRoCiAJIG5vcApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGRjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYwppbmRleCBhZGY1ZjI3Li5jYjNjNzJjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYwpAQCAtMTI0MiwxMyArMTI0MiwxMyBAQAogCXNucHJpbnRmKGxwLT50eF9pcnFfbmFtZSwgTERDX0lSUV9OQU1FX01BWCwgIiVzIFRYIiwgbmFtZSk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShscC0+Y2ZnLnJ4X2lycSwgbGRjX3J4LAotCQkJICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX1NIQVJFRCwKKwkJCSAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAogCQkJICBscC0+cnhfaXJxX25hbWUsIGxwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gcmVxdWVzdF9pcnEobHAtPmNmZy50eF9pcnEsIGxkY190eCwKLQkJCSAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9TSEFSRUQsCisJCQkgIElSUUZfU0FNUExFX1JBTkRPTSB8IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKIAkJCSAgbHAtPnR4X2lycV9uYW1lLCBscCk7CiAJaWYgKGVycikgewogCQlmcmVlX2lycShscC0+Y2ZnLnJ4X2lycSwgbHApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDJkNmExYjEuLmZhNTkzNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTU2LDcgKzU2LDggQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRzW01BWF9IV0VWRU5UU107CiAJdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoTUFYX0hXRVZFTlRTKV07CiAJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhNQVhfSFdFVkVOVFMpXTsKLQlpbnQgZW5hYmxlZDsKKwl1NjQJCQlwY3I7CisJaW50CQkJZW5hYmxlZDsKIH07CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2h3X2V2ZW50cywgY3B1X2h3X2V2ZW50cykgPSB7IC5lbmFibGVkID0gMSwgfTsKIApAQCAtNjgsOCArNjksMzAgQEAKICNkZWZpbmUgUElDX0xPV0VSCTB4MDIKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmZfZXZlbnRfZW5jb2RlKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqcG1hcCkKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBwbWFwLT5lbmNvZGluZyA8PCAxNikgfCBwbWFwLT5waWNfbWFzazsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9kZWNvZGUodW5zaWduZWQgbG9uZyB2YWwsIHUxNiAqZW5jLCB1OCAqbXNrKQoreworCSptc2sgPSB2YWwgJiAweGZmOworCSplbmMgPSB2YWwgPj4gMTY7Cit9CisKKyNkZWZpbmUgQyh4KSBQRVJGX0NPVU5UX0hXX0NBQ0hFXyMjeAorCisjZGVmaW5lIENBQ0hFX09QX1VOU1VQUE9SVEVECTB4ZmZmZQorI2RlZmluZSBDQUNIRV9PUF9OT05TRU5TRQkweGZmZmYKKwordHlwZWRlZiBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgY2FjaGVfbWFwX3QKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdOworCiBzdHJ1Y3Qgc3BhcmNfcG11IHsKIAljb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAJKigqZXZlbnRfbWFwKShpbnQpOworCWNvbnN0IGNhY2hlX21hcF90CQkqY2FjaGVfbWFwOwogCWludAkJCQltYXhfZXZlbnRzOwogCWludAkJCQl1cHBlcl9zaGlmdDsKIAlpbnQJCQkJbG93ZXJfc2hpZnQ7CkBAIC04MCwyMSArMTAzLDEwOSBAQAogCWludAkJCQlsb3dlcl9ub3A7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwIHVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgdWx0cmEzX3BlcmZtb25fZXZlbnRfbWFwW10gPSB7CiAJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10gPSB7IDB4MDAwMCwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCiAJW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXSA9IHsgMHgwMDAxLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKIAlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSA9IHsgMHgwMDA5LCBQSUNfTE9XRVIgfSwKIAlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdID0geyAweDAwMDksIFBJQ19VUFBFUiB9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqdWx0cmEzaV9ldmVudF9tYXAoaW50IGV2ZW50X2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqdWx0cmEzX2V2ZW50X21hcChpbnQgZXZlbnRfaWQpCiB7Ci0JcmV0dXJuICZ1bHRyYTNpX3BlcmZtb25fZXZlbnRfbWFwW2V2ZW50X2lkXTsKKwlyZXR1cm4gJnVsdHJhM19wZXJmbW9uX2V2ZW50X21hcFtldmVudF9pZF07CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IHVsdHJhM2lfcG11ID0gewotCS5ldmVudF9tYXAJPSB1bHRyYTNpX2V2ZW50X21hcCwKLQkubWF4X2V2ZW50cwk9IEFSUkFZX1NJWkUodWx0cmEzaV9wZXJmbW9uX2V2ZW50X21hcCksCitzdGF0aWMgY29uc3QgY2FjaGVfbWFwX3QgdWx0cmEzX2NhY2hlX21hcCA9IHsKK1tDKEwxRCldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDA5LCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDksIFBJQ19VUFBFUiwgfSwKKwl9LAorCVtDKE9QX1dSSVRFKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwYSwgUElDX0xPV0VSIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MGEsIFBJQ19VUFBFUiB9LAorCX0sCisJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoTDFJKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MDksIFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwOSwgUElDX1VQUEVSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfTk9OU0VOU0UgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX05PTlNFTlNFIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKExMKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MGMsIFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwYywgUElDX1VQUEVSLCB9LAorCX0sCisJW0MoT1BfV1JJVEUpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDBjLCBQSUNfTE9XRVIgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwYywgUElDX1VQUEVSIH0sCisJfSwKKwlbQyhPUF9QUkVGRVRDSCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhEVExCKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MTIsIFBJQ19VUFBFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhJVExCKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MTEsIFBJQ19VUFBFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhCUFUpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwYXJjX3BtdSB1bHRyYTNfcG11ID0geworCS5ldmVudF9tYXAJPSB1bHRyYTNfZXZlbnRfbWFwLAorCS5jYWNoZV9tYXAJPSAmdWx0cmEzX2NhY2hlX21hcCwKKwkubWF4X2V2ZW50cwk9IEFSUkFZX1NJWkUodWx0cmEzX3BlcmZtb25fZXZlbnRfbWFwKSwKIAkudXBwZXJfc2hpZnQJPSAxMSwKIAkubG93ZXJfc2hpZnQJPSA0LAogCS5ldmVudF9tYXNrCT0gMHgzZiwKQEAgLTEwMiw2ICsyMTMsMTIxIEBACiAJLmxvd2VyX25vcAk9IDB4MTQsCiB9OwogCisvKiBOaWFnYXJhMSBpcyB2ZXJ5IGxpbWl0ZWQuICBUaGUgdXBwZXIgUElDIGlzIGhhcmQtbG9ja2VkIHRvIGNvdW50CisgKiBvbmx5IGluc3RydWN0aW9ucywgc28gaXQgaXMgZnJlZSBydW5uaW5nIHdoaWNoIGNyZWF0ZXMgYWxsIGtpbmRzIG9mCisgKiBwcm9ibGVtcy4gIFNvbWUgaGFyZHdhcmUgZGVzaWducyBtYWtlIG9uZSB3b25kZXIgaWYgdGhlIGNyZWF0b3IKKyAqIGV2ZW4gbG9va2VkIGF0IGhvdyB0aGlzIHN0dWZmIGdldHMgdXNlZCBieSBzb2Z0d2FyZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCBuaWFnYXJhMV9wZXJmbW9uX2V2ZW50X21hcFtdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdID0geyAweDAwLCBQSUNfVVBQRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdID0geyAweDAwLCBQSUNfVVBQRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSA9IHsgMCwgUElDX05PTkUgfSwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdID0geyAweDAzLCBQSUNfTE9XRVIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKm5pYWdhcmExX2V2ZW50X21hcChpbnQgZXZlbnRfaWQpCit7CisJcmV0dXJuICZuaWFnYXJhMV9wZXJmbW9uX2V2ZW50X21hcFtldmVudF9pZF07Cit9CisKK3N0YXRpYyBjb25zdCBjYWNoZV9tYXBfdCBuaWFnYXJhMV9jYWNoZV9tYXAgPSB7CitbQyhMMUQpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwMywgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfV1JJVEUpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDAzLCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9QUkVGRVRDSCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhMMUkpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwMCwgUElDX1VQUEVSIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDIsIFBJQ19MT1dFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX05PTlNFTlNFIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9OT05TRU5TRSB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhMTCldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDA3LCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9XUklURSldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDcsIFBJQ19MT1dFUiwgfSwKKwl9LAorCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKERUTEIpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwNSwgUElDX0xPV0VSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKElUTEIpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwNCwgUElDX0xPV0VSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKEJQVSldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IG5pYWdhcmExX3BtdSA9IHsKKwkuZXZlbnRfbWFwCT0gbmlhZ2FyYTFfZXZlbnRfbWFwLAorCS5jYWNoZV9tYXAJPSAmbmlhZ2FyYTFfY2FjaGVfbWFwLAorCS5tYXhfZXZlbnRzCT0gQVJSQVlfU0laRShuaWFnYXJhMV9wZXJmbW9uX2V2ZW50X21hcCksCisJLnVwcGVyX3NoaWZ0CT0gMCwKKwkubG93ZXJfc2hpZnQJPSA0LAorCS5ldmVudF9tYXNrCT0gMHg3LAorCS51cHBlcl9ub3AJPSAweDAsCisJLmxvd2VyX25vcAk9IDB4MCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgbmlhZ2FyYTJfcGVyZm1vbl9ldmVudF9tYXBbXSA9IHsKIAlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXSA9IHsgMHgwMmZmLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKIAlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdID0geyAweDAyZmYsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LApAQCAtMTE2LDE0ICszNDIsMTAyIEBACiAJcmV0dXJuICZuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcFtldmVudF9pZF07CiB9CiAKK3N0YXRpYyBjb25zdCBjYWNoZV9tYXBfdCBuaWFnYXJhMl9jYWNoZV9tYXAgPSB7CitbQyhMMUQpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwMjA4LCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDMwMiwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfV1JJVEUpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDAyMTAsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwMzAyLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9QUkVGRVRDSCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhMMUkpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwMmZmLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDMwMSwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfTk9OU0VOU0UgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX05PTlNFTlNFIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKExMKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MDIwOCwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDAzMzAsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwl9LAorCVtDKE9QX1dSSVRFKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwMjEwLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDMyMCwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoRFRMQildID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDBiMDgsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhJVExCKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4YjA0LCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoQlBVKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgbmlhZ2FyYTJfcG11ID0gewogCS5ldmVudF9tYXAJPSBuaWFnYXJhMl9ldmVudF9tYXAsCisJLmNhY2hlX21hcAk9ICZuaWFnYXJhMl9jYWNoZV9tYXAsCiAJLm1heF9ldmVudHMJPSBBUlJBWV9TSVpFKG5pYWdhcmEyX3BlcmZtb25fZXZlbnRfbWFwKSwKIAkudXBwZXJfc2hpZnQJPSAxOSwKIAkubG93ZXJfc2hpZnQJPSA2LAogCS5ldmVudF9tYXNrCT0gMHhmZmYsCiAJLmh2X2JpdAkJPSAweDgsCi0JLmlycV9iaXQJPSAweDAzLAorCS5pcnFfYml0CT0gMHgzMCwKIAkudXBwZXJfbm9wCT0gMHgyMjAsCiAJLmxvd2VyX25vcAk9IDB4MjIwLAogfTsKQEAgLTE1MSwyMyArNDY1LDMwIEBACiAJCQkgICAgICBzcGFyY19wbXUtPmxvd2VyX25vcCwgaWR4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywKLQkJCQkJICAgIGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKIAl1NjQgdmFsLCBtYXNrID0gbWFza19mb3JfaW5kZXgoaWR4KTsKIAotCXZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKLQlwY3Jfb3BzLT53cml0ZSgodmFsICYgfm1hc2spIHwgaHdjLT5jb25maWcpOworCXZhbCA9IGNwdWMtPnBjcjsKKwl2YWwgJj0gfm1hc2s7CisJdmFsIHw9IGh3Yy0+Y29uZmlnOworCWNwdWMtPnBjciA9IHZhbDsKKworCXBjcl9vcHMtPndyaXRlKGNwdWMtPnBjcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGFyY19wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAotCQkJCQkgICAgIGludCBpZHgpCitzdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJdTY0IG1hc2sgPSBtYXNrX2Zvcl9pbmRleChpZHgpOwogCXU2NCBub3AgPSBub3BfZm9yX2luZGV4KGlkeCk7Ci0JdTY0IHZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKKwl1NjQgdmFsOwogCi0JcGNyX29wcy0+d3JpdGUoKHZhbCAmIH5tYXNrKSB8IG5vcCk7CisJdmFsID0gY3B1Yy0+cGNyOworCXZhbCAmPSB+bWFzazsKKwl2YWwgfD0gbm9wOworCWNwdWMtPnBjciA9IHZhbDsKKworCXBjcl9vcHMtPndyaXRlKGNwdWMtPnBjcik7CiB9CiAKIHZvaWQgaHdfcGVyZl9lbmFibGUodm9pZCkKQEAgLTE4Miw3ICs1MDMsNyBAQAogCWNwdWMtPmVuYWJsZWQgPSAxOwogCWJhcnJpZXIoKTsKIAotCXZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKKwl2YWwgPSBjcHVjLT5wY3I7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXRVZFTlRTOyBpKyspIHsKIAkJc3RydWN0IHBlcmZfZXZlbnQgKmNwID0gY3B1Yy0+ZXZlbnRzW2ldOwpAQCAtMTk0LDcgKzUxNSw5IEBACiAJCXZhbCB8PSBod2MtPmNvbmZpZ19iYXNlOwogCX0KIAotCXBjcl9vcHMtPndyaXRlKHZhbCk7CisJY3B1Yy0+cGNyID0gdmFsOworCisJcGNyX29wcy0+d3JpdGUoY3B1Yy0+cGNyKTsKIH0KIAogdm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKQEAgLTIwNywxMCArNTMwLDEyIEBACiAKIAljcHVjLT5lbmFibGVkID0gMDsKIAotCXZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKKwl2YWwgPSBjcHVjLT5wY3I7CiAJdmFsICY9IH4oUENSX1VUUkFDRSB8IFBDUl9TVFJBQ0UgfAogCQkgc3BhcmNfcG11LT5odl9iaXQgfCBzcGFyY19wbXUtPmlycV9iaXQpOwotCXBjcl9vcHMtPndyaXRlKHZhbCk7CisJY3B1Yy0+cGNyID0gdmFsOworCisJcGNyX29wcy0+d3JpdGUoY3B1Yy0+cGNyKTsKIH0KIAogc3RhdGljIHUzMiByZWFkX3BtYyhpbnQgaWR4KQpAQCAtMjQyLDcgKzU2Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgc3BhcmNfcGVyZl9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKLQkJCQkJIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCisJCQkJICAgICAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJczY0IGxlZnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKIAlzNjQgcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwpAQCAtMjgyLDE5ICs2MDcsMTkgQEAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzaykpCiAJCXJldHVybiAtRUFHQUlOOwogCi0Jc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOworCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGNwdWMsIGh3YywgaWR4KTsKIAogCWNwdWMtPmV2ZW50c1tpZHhdID0gZXZlbnQ7CiAJc2V0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKIAogCXNwYXJjX3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpOwotCXNwYXJjX3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOworCXNwYXJjX3BtdV9lbmFibGVfZXZlbnQoY3B1YywgaHdjLCBpZHgpOwogCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU2NCBzcGFyY19wZXJmX2V2ZW50X3VwZGF0ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCi0JCQkJICAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQorCQkJCSAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJaW50IHNoaWZ0ID0gNjQgLSAzMjsKIAl1NjQgcHJldl9yYXdfY291bnQsIG5ld19yYXdfY291bnQ7CkBAIC0zMjQsNyArNjQ5LDcgQEAKIAlpbnQgaWR4ID0gaHdjLT5pZHg7CiAKIAljbGVhcl9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7Ci0Jc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOworCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGNwdWMsIGh3YywgaWR4KTsKIAogCWJhcnJpZXIoKTsKIApAQCAtMzM4LDE4ICs2NjMsMjkgQEAKIHN0YXRpYyB2b2lkIHNwYXJjX3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwogCXNwYXJjX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGh3Yy0+aWR4KTsKIH0KIAogc3RhdGljIHZvaWQgc3BhcmNfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogeworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0Jc3BhcmNfcG11X2VuYWJsZV9ldmVudChod2MsIGh3Yy0+aWR4KTsKKworCXNwYXJjX3BtdV9lbmFibGVfZXZlbnQoY3B1YywgaHdjLCBod2MtPmlkeCk7CiB9CiAKIHN0YXRpYyBhdG9taWNfdCBhY3RpdmVfZXZlbnRzID0gQVRPTUlDX0lOSVQoMCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHBtY19ncmFiX211dGV4KTsKIAorc3RhdGljIHZvaWQgcGVyZl9zdG9wX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKworCXN0b3Bfbm1pX3dhdGNoZG9nKE5VTEwpOworCWNwdWMtPnBjciA9IHBjcl9vcHMtPnJlYWQoKTsKK30KKwogdm9pZCBwZXJmX2V2ZW50X2dyYWJfcG1jKHZvaWQpCiB7CiAJaWYgKGF0b21pY19pbmNfbm90X3plcm8oJmFjdGl2ZV9ldmVudHMpKQpAQCAtMzU4LDcgKzY5NCw3IEBACiAJbXV0ZXhfbG9jaygmcG1jX2dyYWJfbXV0ZXgpOwogCWlmIChhdG9taWNfcmVhZCgmYWN0aXZlX2V2ZW50cykgPT0gMCkgewogCQlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpID4gMCkgewotCQkJb25fZWFjaF9jcHUoc3RvcF9ubWlfd2F0Y2hkb2csIE5VTEwsIDEpOworCQkJb25fZWFjaF9jcHUocGVyZl9zdG9wX25taV93YXRjaGRvZywgTlVMTCwgMSk7CiAJCQlCVUdfT04oYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICE9IDApOwogCQl9CiAJCWF0b21pY19pbmMoJmFjdGl2ZV9ldmVudHMpOwpAQCAtMzc1LDMwICs3MTEsMTYwIEBACiAJfQogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpzcGFyY19tYXBfY2FjaGVfZXZlbnQodTY0IGNvbmZpZykKK3sKKwl1bnNpZ25lZCBpbnQgY2FjaGVfdHlwZSwgY2FjaGVfb3AsIGNhY2hlX3Jlc3VsdDsKKwljb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnBtYXA7CisKKwlpZiAoIXNwYXJjX3BtdS0+Y2FjaGVfbWFwKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKworCWNhY2hlX3R5cGUgPSAoY29uZmlnID4+ICAwKSAmIDB4ZmY7CisJaWYgKGNhY2hlX3R5cGUgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9NQVgpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJY2FjaGVfb3AgPSAoY29uZmlnID4+ICA4KSAmIDB4ZmY7CisJaWYgKGNhY2hlX29wID49IFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWNhY2hlX3Jlc3VsdCA9IChjb25maWcgPj4gMTYpICYgMHhmZjsKKwlpZiAoY2FjaGVfcmVzdWx0ID49IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlwbWFwID0gJigoKnNwYXJjX3BtdS0+Y2FjaGVfbWFwKVtjYWNoZV90eXBlXVtjYWNoZV9vcF1bY2FjaGVfcmVzdWx0XSk7CisKKwlpZiAocG1hcC0+ZW5jb2RpbmcgPT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJaWYgKHBtYXAtPmVuY29kaW5nID09IENBQ0hFX09QX05PTlNFTlNFKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXJldHVybiBwbWFwOworfQorCiBzdGF0aWMgdm9pZCBod19wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXBlcmZfZXZlbnRfcmVsZWFzZV9wbWMoKTsKIH0KIAorLyogTWFrZSBzdXJlIGFsbCBldmVudHMgY2FuIGJlIHNjaGVkdWxlZCBpbnRvIHRoZSBoYXJkd2FyZSBhdAorICogdGhlIHNhbWUgdGltZS4gIFRoaXMgaXMgc2ltcGxpZmllZCBieSB0aGUgZmFjdCB0aGF0IHdlIG9ubHkKKyAqIG5lZWQgdG8gc3VwcG9ydCAyIHNpbXVsdGFuZW91cyBIVyBldmVudHMuCisgKi8KK3N0YXRpYyBpbnQgc3BhcmNfY2hlY2tfY29uc3RyYWludHModW5zaWduZWQgbG9uZyAqZXZlbnRzLCBpbnQgbl9ldikKK3sKKwlpZiAobl9ldiA8PSBwZXJmX21heF9ldmVudHMpIHsKKwkJdTggbXNrMSwgbXNrMjsKKwkJdTE2IGR1bW15OworCisJCWlmIChuX2V2ID09IDEpCisJCQlyZXR1cm4gMDsKKwkJQlVHX09OKG5fZXYgIT0gMik7CisJCXBlcmZfZXZlbnRfZGVjb2RlKGV2ZW50c1swXSwgJmR1bW15LCAmbXNrMSk7CisJCXBlcmZfZXZlbnRfZGVjb2RlKGV2ZW50c1sxXSwgJmR1bW15LCAmbXNrMik7CisKKwkJLyogSWYgYm90aCBldmVudHMgY2FuIGdvIG9uIGFueSBjb3VudGVyLCBPSy4gICovCisJCWlmIChtc2sxID09IChQSUNfVVBQRVIgfCBQSUNfTE9XRVIpICYmCisJCSAgICBtc2syID09IChQSUNfVVBQRVIgfCBQSUNfTE9XRVIpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSWYgb25lIGV2ZW50IGlzIGxpbWl0ZWQgdG8gYSBzcGVjaWZpYyBjb3VudGVyLAorCQkgKiBhbmQgdGhlIG90aGVyIGNhbiBnbyBvbiBib3RoLCBPSy4KKwkJICovCisJCWlmICgobXNrMSA9PSBQSUNfVVBQRVIgfHwgbXNrMSA9PSBQSUNfTE9XRVIpICYmCisJCSAgICBtc2syID09IChQSUNfVVBQRVIgfCBQSUNfTE9XRVIpKQorCQkJcmV0dXJuIDA7CisJCWlmICgobXNrMiA9PSBQSUNfVVBQRVIgfHwgbXNrMiA9PSBQSUNfTE9XRVIpICYmCisJCSAgICBtc2sxID09IChQSUNfVVBQRVIgfCBQSUNfTE9XRVIpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSWYgdGhlIGV2ZW50cyBhcmUgZml4ZWQgdG8gZGlmZmVyZW50IGNvdW50ZXJzLCBPSy4gICovCisJCWlmICgobXNrMSA9PSBQSUNfVVBQRVIgJiYgbXNrMiA9PSBQSUNfTE9XRVIpIHx8CisJCSAgICAobXNrMSA9PSBQSUNfTE9XRVIgJiYgbXNrMiA9PSBQSUNfVVBQRVIpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogT3RoZXJ3aXNlLCB0aGVyZSBpcyBhIGNvbmZsaWN0LiAgKi8KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZXhjbHVkZXMoc3RydWN0IHBlcmZfZXZlbnQgKipldnRzLCBpbnQgbl9wcmV2LCBpbnQgbl9uZXcpCit7CisJaW50IGV1ID0gMCwgZWsgPSAwLCBlaCA9IDA7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCWludCBpLCBuLCBmaXJzdDsKKworCW4gPSBuX3ByZXYgKyBuX25ldzsKKwlpZiAobiA8PSAxKQorCQlyZXR1cm4gMDsKKworCWZpcnN0ID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWV2ZW50ID0gZXZ0c1tpXTsKKwkJaWYgKGZpcnN0KSB7CisJCQlldSA9IGV2ZW50LT5hdHRyLmV4Y2x1ZGVfdXNlcjsKKwkJCWVrID0gZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWw7CisJCQllaCA9IGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaHY7CisJCQlmaXJzdCA9IDA7CisJCX0gZWxzZSBpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyICE9IGV1IHx8CisJCQkgICBldmVudC0+YXR0ci5leGNsdWRlX2tlcm5lbCAhPSBlayB8fAorCQkJICAgZXZlbnQtPmF0dHIuZXhjbHVkZV9odiAhPSBlaCkgeworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2xsZWN0X2V2ZW50cyhzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXAsIGludCBtYXhfY291bnQsCisJCQkgIHN0cnVjdCBwZXJmX2V2ZW50ICpldnRzW10sIHVuc2lnbmVkIGxvbmcgKmV2ZW50cykKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJaW50IG4gPSAwOworCisJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChncm91cCkpIHsKKwkJaWYgKG4gPj0gbWF4X2NvdW50KQorCQkJcmV0dXJuIC0xOworCQlldnRzW25dID0gZ3JvdXA7CisJCWV2ZW50c1tuKytdID0gZ3JvdXAtPmh3LmV2ZW50X2Jhc2U7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZncm91cC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSAmJgorCQkgICAgZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKSB7CisJCQlpZiAobiA+PSBtYXhfY291bnQpCisJCQkJcmV0dXJuIC0xOworCQkJZXZ0c1tuXSA9IGV2ZW50OworCQkJZXZlbnRzW24rK10gPSBldmVudC0+aHcuZXZlbnRfYmFzZTsKKwkJfQorCX0KKwlyZXR1cm4gbjsKK30KKwogc3RhdGljIGludCBfX2h3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciA9ICZldmVudC0+YXR0cjsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZ0c1tNQVhfSFdFVkVOVFNdOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXVuc2lnbmVkIGxvbmcgZXZlbnRzW01BWF9IV0VWRU5UU107CiAJY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpwbWFwOwogCXU2NCBlbmM7CisJaW50IG47CiAKIAlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoYXR0ci0+dHlwZSAhPSBQRVJGX1RZUEVfSEFSRFdBUkUpCisJaWYgKGF0dHItPnR5cGUgPT0gUEVSRl9UWVBFX0hBUkRXQVJFKSB7CisJCWlmIChhdHRyLT5jb25maWcgPj0gc3BhcmNfcG11LT5tYXhfZXZlbnRzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXBtYXAgPSBzcGFyY19wbXUtPmV2ZW50X21hcChhdHRyLT5jb25maWcpOworCX0gZWxzZSBpZiAoYXR0ci0+dHlwZSA9PSBQRVJGX1RZUEVfSFdfQ0FDSEUpIHsKKwkJcG1hcCA9IHNwYXJjX21hcF9jYWNoZV9ldmVudChhdHRyLT5jb25maWcpOworCQlpZiAoSVNfRVJSKHBtYXApKQorCQkJcmV0dXJuIFBUUl9FUlIocG1hcCk7CisJfSBlbHNlCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChhdHRyLT5jb25maWcgPj0gc3BhcmNfcG11LT5tYXhfZXZlbnRzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBlcmZfZXZlbnRfZ3JhYl9wbWMoKTsKLQlldmVudC0+ZGVzdHJveSA9IGh3X3BlcmZfZXZlbnRfZGVzdHJveTsKLQogCS8qIFdlIHNhdmUgdGhlIGVuYWJsZSBiaXRzIGluIHRoZSBjb25maWdfYmFzZS4gIFNvIHRvCiAJICogdHVybiBvZmYgc2FtcGxpbmcganVzdCB3cml0ZSAnY29uZmlnJywgYW5kIHRvIGVuYWJsZQogCSAqIHRoaW5ncyB3cml0ZSAnY29uZmlnIHwgY29uZmlnX2Jhc2UnLgpAQCAtNDExLDE1ICs4NzcsMzkgQEAKIAlpZiAoIWF0dHItPmV4Y2x1ZGVfaHYpCiAJCWh3Yy0+Y29uZmlnX2Jhc2UgfD0gc3BhcmNfcG11LT5odl9iaXQ7CiAKKwlod2MtPmV2ZW50X2Jhc2UgPSBwZXJmX2V2ZW50X2VuY29kZShwbWFwKTsKKworCWVuYyA9IHBtYXAtPmVuY29kaW5nOworCisJbiA9IDA7CisJaWYgKGV2ZW50LT5ncm91cF9sZWFkZXIgIT0gZXZlbnQpIHsKKwkJbiA9IGNvbGxlY3RfZXZlbnRzKGV2ZW50LT5ncm91cF9sZWFkZXIsCisJCQkJICAgcGVyZl9tYXhfZXZlbnRzIC0gMSwKKwkJCQkgICBldnRzLCBldmVudHMpOworCQlpZiAobiA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZXZlbnRzW25dID0gaHdjLT5ldmVudF9iYXNlOworCWV2dHNbbl0gPSBldmVudDsKKworCWlmIChjaGVja19leGNsdWRlcyhldnRzLCBuLCAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3BhcmNfY2hlY2tfY29uc3RyYWludHMoZXZlbnRzLCBuICsgMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVHJ5IHRvIGRvIGFsbCBlcnJvciBjaGVja2luZyBiZWZvcmUgdGhpcyBwb2ludCwgYXMgdW53aW5kaW5nCisJICogc3RhdGUgYWZ0ZXIgZ3JhYmJpbmcgdGhlIFBNQyBpcyBkaWZmaWN1bHQuCisJICovCisJcGVyZl9ldmVudF9ncmFiX3BtYygpOworCWV2ZW50LT5kZXN0cm95ID0gaHdfcGVyZl9ldmVudF9kZXN0cm95OworCiAJaWYgKCFod2MtPnNhbXBsZV9wZXJpb2QpIHsKIAkJaHdjLT5zYW1wbGVfcGVyaW9kID0gTUFYX1BFUklPRDsKIAkJaHdjLT5sYXN0X3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKIAkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOwogCX0KIAotCXBtYXAgPSBzcGFyY19wbXUtPmV2ZW50X21hcChhdHRyLT5jb25maWcpOwotCi0JZW5jID0gcG1hcC0+ZW5jb2Rpbmc7CiAJaWYgKHBtYXAtPnBpY19tYXNrICYgUElDX1VQUEVSKSB7CiAJCWh3Yy0+aWR4ID0gUElDX1VQUEVSX0lOREVYOwogCQllbmMgPDw9IHNwYXJjX3BtdS0+dXBwZXJfc2hpZnQ7CkBAIC00NzIsNyArOTYyLDcgQEAKIH0KIAogc3RhdGljIGludCBfX2twcm9iZXMgcGVyZl9ldmVudF9ubWlfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICpfX2FyZ3MpCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqX19hcmdzKQogewogCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IF9fYXJnczsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwpAQCAtNTEzLDcgKzEwMDMsNyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKLQkJCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKKwkJCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGNwdWMsIGh3YywgaWR4KTsKIAl9CiAKIAlyZXR1cm4gTk9USUZZX1NUT1A7CkBAIC01MjUsOCArMTAxNSwxNSBAQAogCiBzdGF0aWMgYm9vbCBfX2luaXQgc3VwcG9ydGVkX3BtdSh2b2lkKQogewotCWlmICghc3RyY21wKHNwYXJjX3BtdV90eXBlLCAidWx0cmEzaSIpKSB7Ci0JCXNwYXJjX3BtdSA9ICZ1bHRyYTNpX3BtdTsKKwlpZiAoIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgInVsdHJhMyIpIHx8CisJICAgICFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJ1bHRyYTMrIikgfHwKKwkgICAgIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgInVsdHJhM2kiKSB8fAorCSAgICAhc3RyY21wKHNwYXJjX3BtdV90eXBlLCAidWx0cmE0KyIpKSB7CisJCXNwYXJjX3BtdSA9ICZ1bHRyYTNfcG11OworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJuaWFnYXJhIikpIHsKKwkJc3BhcmNfcG11ID0gJm5pYWdhcmExX3BtdTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCWlmICghc3RyY21wKHNwYXJjX3BtdV90eXBlLCAibmlhZ2FyYTIiKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKaW5kZXggMTM4OTEwYy4uZDgwYTY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCkBAIC03OSw2ICs3OSw3IEBACiAKIAllcnIgPSAtRU5PREVWOwogCisJbXV0ZXhfbG9jaygmb2Zfc2V0X3Byb3BlcnR5X211dGV4KTsKIAl3cml0ZV9sb2NrKCZkZXZ0cmVlX2xvY2spOwogCXByZXZwID0gJmRwLT5wcm9wZXJ0aWVzOwogCXdoaWxlICgqcHJldnApIHsKQEAgLTg4LDkgKzg5LDcgQEAKIAkJCXZvaWQgKm9sZF92YWwgPSBwcm9wLT52YWx1ZTsKIAkJCWludCByZXQ7CiAKLQkJCW11dGV4X2xvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7CiAJCQlyZXQgPSBwcm9tX3NldHByb3AoZHAtPm5vZGUsIG5hbWUsIHZhbCwgbGVuKTsKLQkJCW11dGV4X3VubG9jaygmb2Zfc2V0X3Byb3BlcnR5X211dGV4KTsKIAogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWlmIChyZXQgPj0gMCkgewpAQCAtMTA5LDYgKzEwOCw3IEBACiAJCXByZXZwID0gJigqcHJldnApLT5uZXh0OwogCX0KIAl3cml0ZV91bmxvY2soJmRldnRyZWVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOwogCiAJLyogWFhYIFVwYXRlIHByb2NmcyBpZiBuZWNlc3NhcnkuLi4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwppbmRleCBmZjY4MzczLi5hYTM2MjIzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtMTQyMCw3ICsxNDIwLDcgQEAKIAlmcmVlX2Jvb3RtZW0oX19wYShwdHIpLCBzaXplKTsKIH0KIAotc3RhdGljIGludCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKQorc3RhdGljIGludCBfX2luaXQgcGNwdV9jcHVfZGlzdGFuY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bykKIHsKIAlpZiAoY3B1X3RvX25vZGUoZnJvbSkgPT0gY3B1X3RvX25vZGUodG8pKQogCQlyZXR1cm4gTE9DQUxfRElTVEFOQ0U7CkBAIC0xNDI4LDE4ICsxNDI4LDUzIEBACiAJCXJldHVybiBSRU1PVEVfRElTVEFOQ0U7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJaWYgKHB1ZF9ub25lKCpwdWQpKSB7CisJCXBtZF90ICpuZXc7CisKKwkJbmV3ID0gX19hbGxvY19ib290bWVtKFBBR0VfU0laRSwgUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCQlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgbmV3KTsKKwl9CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkgeworCQlwdGVfdCAqbmV3OworCisJCW5ldyA9IF9fYWxsb2NfYm9vdG1lbShQQUdFX1NJWkUsIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBuZXcpOworCX0KK30KKwogdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZGVsdGE7CiAJdW5zaWduZWQgaW50IGNwdTsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVJTlZBTDsKIAotCXJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsCi0JCQkJICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIDQgPDwgMjAsCi0JCQkJICAgIHBjcHVfY3B1X2Rpc3RhbmNlLCBwY3B1X2FsbG9jX2Jvb3RtZW0sCi0JCQkJICAgIHBjcHVfZnJlZV9ib290bWVtKTsKLQlpZiAocmMpCi0JCXBhbmljKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJzdCBjaHVuayAoJWQpIiwgcmMpOworCWlmIChwY3B1X2Nob3Nlbl9mYyAhPSBQQ1BVX0ZDX1BBR0UpIHsKKwkJcmMgPSBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwKKwkJCQkJICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIDQgPDwgMjAsCisJCQkJCSAgICBwY3B1X2NwdV9kaXN0YW5jZSwKKwkJCQkJICAgIHBjcHVfYWxsb2NfYm9vdG1lbSwKKwkJCQkJICAgIHBjcHVfZnJlZV9ib290bWVtKTsKKwkJaWYgKHJjKQorCQkJcHJfd2FybmluZygiUEVSQ1BVOiAlcyBhbGxvY2F0b3IgZmFpbGVkICglZCksICIKKwkJCQkgICAiZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxuIiwKKwkJCQkgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpOworCX0KKwlpZiAocmMgPCAwKQorCQlyYyA9IHBjcHVfcGFnZV9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsCisJCQkJCSAgIHBjcHVfYWxsb2NfYm9vdG1lbSwKKwkJCQkJICAgcGNwdV9mcmVlX2Jvb3RtZW0sCisJCQkJCSAgIHBjcHVfcG9wdWxhdGVfcHRlKTsKKwlpZiAocmMgPCAwKQorCQlwYW5pYygiY2Fubm90IGluaXRpYWxpemUgcGVyY3B1IGFyZWEgKGVycj0lZCkiLCByYyk7CiAKIAlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKaW5kZXggYjk1NmZkNy4uZDIzMWNiZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYwpAQCAtNjE3LDcgKzYxNyw3IEBACiAJCXJzMiA9IGZwc19yZWd2YWwoZiwgUlMyKGluc24pKTsKIAogCQlyZF92YWwgPSAwOwotCQlzcmMyID0gKHJzMiA+PiAob3BmID09IEZNVUw4eDE2QVVfT1BGKSA/IDE2IDogMCk7CisJCXNyYzIgPSByczIgPj4gKG9wZiA9PSBGTVVMOHgxNkFVX09QRiA/IDE2IDogMCk7CiAJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCA0OyBieXRlKyspIHsKIAkJCXUxNiBzcmMxID0gKHJzMSA+PiAoYnl0ZSAqIDgpKSAmIDB4MDBmZjsKIAkJCXUzMiBwcm9kID0gc3JjMSAqIHNyYzI7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCmluZGV4IGE3MGE1ZTEuLjE4ODZkMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCWlmIChwYWdlICYmIHBhZ2VfbWFwcGluZyhwYWdlKSkgeworCWlmIChwYWdlKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGdfZmxhZ3M7CiAKIAkJcGdfZmxhZ3MgPSBwYWdlLT5mbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jIGIvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKaW5kZXggZjk3Y2I4Yi4uZjkwMjRiYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CS8qIGZvciBIWiAqLwogIAogI2lmZGVmIENPTkZJR19TUEFSQzY0CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9saW5lLmMgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCmluZGV4IDE0YTEwMmUuLmNmOGE5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwpAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgImxpbnV4L2lycXJldHVybi5oIgogI2luY2x1ZGUgImxpbnV4L2tkLmgiCisjaW5jbHVkZSAibGludXgvc2NoZWQuaCIKICNpbmNsdWRlICJjaGFuX2tlcm4uaCIKICNpbmNsdWRlICJpcnFfa2Vybi5oIgogI2luY2x1ZGUgImlycV91c2VyLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMKaW5kZXggMTk5MzAwOC4uNGViYzhhMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3BvcnRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9wb3J0X2tlcm4uYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJsaW51eC9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJsaW51eC9saXN0LmgiCiAjaW5jbHVkZSAibGludXgvbXV0ZXguaCIKKyNpbmNsdWRlICJsaW51eC93b3JrcXVldWUuaCIKICNpbmNsdWRlICJhc20vYXRvbWljLmgiCiAjaW5jbHVkZSAiaW5pdC5oIgogI2luY2x1ZGUgImlycV9rZXJuLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL2NvbW1vbi5sZHMuUyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCmluZGV4IDM3ZWNjNTUuLmFjNTViOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCkBAIC0xNiwxMSArMTYsNyBAQAogCiAgIC4gPSBBTElHTig0MDk2KTsKICAgLm5vdGUgOiB7ICooLm5vdGUuKikgfQotICBfX2V4X3RhYmxlIDogewotCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JKihfX2V4X3RhYmxlKQotCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLSAgfQorICBFWENFUFRJT05fVEFCTEUoMCkKIAogICBCVUdfVEFCTEUKIApAQCAtNDMsMjggKzM5LDE3IEBACiAgIH0KIAkKICAgLmluaXQuc2V0dXAgOiB7Ci0JX19zZXR1cF9zdGFydCA9IC47Ci0JKiguaW5pdC5zZXR1cCkKLQlfX3NldHVwX2VuZCA9IC47CisJSU5JVF9TRVRVUCgwKQogICB9CiAKLSAgLiA9IEFMSUdOKDMyKTsKLSAgLmRhdGEucGVyY3B1IDogewotCV9fcGVyX2NwdV9zdGFydCA9IC4gOwotCSooLmRhdGEucGVyY3B1KQotCV9fcGVyX2NwdV9lbmQgPSAuIDsKLSAgfQorICBQRVJDUFUoMzIpCiAJCiAgIC5pbml0Y2FsbC5pbml0IDogewotCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCUlOSVRDQUxMUwotCV9faW5pdGNhbGxfZW5kID0gLjsKKwlJTklUX0NBTExTCiAgIH0KIAogICAuY29uX2luaXRjYWxsLmluaXQgOiB7Ci0JX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJQ09OX0lOSVRDQUxMCiAgIH0KIAogICAudW1sLmluaXRjYWxsLmluaXQgOiB7CkBAIC0xMTgsOCArMTAzLDYgQEAKIAogICAgLiA9IEFMSUdOKDQwOTYpOwogICAuaW5pdC5yYW1mcyA6IHsKLQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JKiguaW5pdC5yYW1mcykKLQlfX2luaXRyYW1mc19lbmQgPSAuOworCUlOSVRfUkFNX0ZTCiAgIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TIGIvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TCmluZGV4IDcxNWExODguLjdmY2FkNTggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUworKysgYi9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMKQEAgLTE2LDExICsxNiw3IEBACiAgIF90ZXh0ID0gLjsKICAgX3N0ZXh0ID0gLjsKICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IHsKLQlfc2luaXR0ZXh0ID0gLjsKLQlJTklUX1RFWFQKLQlfZWluaXR0ZXh0ID0gLjsKLSAgfQorICBJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAKQEAgLTk2LDggKzkyLDcgQEAKICAgLmluaXRfYXJyYXkgICAgIDogeyAqKC5pbml0X2FycmF5KSB9CiAgIC5maW5pX2FycmF5ICAgICA6IHsgKiguZmluaV9hcnJheSkgfQogICAuZGF0YSAgICAgICAgICAgOiB7Ci0gICAgLiA9IEFMSUdOKEtFUk5FTF9TVEFDS19TSVpFKTsJCS8qIGluaXRfdGFzayAqLwotICAgICooLmRhdGEuaW5pdF90YXNrKQorICAgIElOSVRfVEFTS19EQVRBKEtFUk5FTF9TVEFDS19TSVpFKQogICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CiAgICAgKiguZGF0YS5pbml0X2lycXN0YWNrKQogICAgIERBVEFfREFUQQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvaXJxLmMgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwppbmRleCA0NTRjZGI0Li4wMzkyNzBiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgImxpbnV4L2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpbnV4L2tlcm5lbF9zdGF0LmgiCiAjaW5jbHVkZSAibGludXgvbW9kdWxlLmgiCisjaW5jbHVkZSAibGludXgvc2NoZWQuaCIKICNpbmNsdWRlICJsaW51eC9zZXFfZmlsZS5oIgogI2luY2x1ZGUgImFzLWxheW91dC5oIgogI2luY2x1ZGUgImtlcm5fdXRpbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TIGIvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TCmluZGV4IDJlYmQzOTcuLmU3YTZjY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUworKysgYi9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMKQEAgLTIyLDExICsyMiw3IEBACiAgIF90ZXh0ID0gLjsKICAgX3N0ZXh0ID0gLjsKICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IHsKLQlfc2luaXR0ZXh0ID0gLjsKLQlJTklUX1RFWFQKLQlfZWluaXR0ZXh0ID0gLjsKLSAgfQorICBJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogCiAgIC50ZXh0ICAgICAgOgpAQCAtNTIsOCArNDgsNyBAQAogICBpbml0LmRhdGEgOiB7IElOSVRfREFUQSB9CiAgIC5kYXRhICAgIDoKICAgewotICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CQkvKiBpbml0X3Rhc2sgKi8KLSAgICAqKC5kYXRhLmluaXRfdGFzaykKKyAgICBJTklUX1RBU0tfREFUQShLRVJORUxfU1RBQ0tfU0laRSkKICAgICAuID0gQUxJR04oS0VSTkVMX1NUQUNLX1NJWkUpOwogICAgICooLmRhdGEuaW5pdF9pcnFzdGFjaykKICAgICBEQVRBX0RBVEEKQEAgLTgxLDE5ICs3NiwxMCBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICAuc2JzcyAgICAgIDoKLSAgewotICAgX19ic3Nfc3RhcnQgPSAuOwotICAgUFJPVklERShfYnNzX3N0YXJ0ID0gLik7Ci0gICAqKC5zYnNzKQotICAgKiguc2NvbW1vbikKLSAgfQotICAuYnNzICAgICAgIDoKLSAgewotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gIH0KKyAgX19ic3Nfc3RhcnQgPSAuOworICBQUk9WSURFKF9ic3Nfc3RhcnQgPSAuKTsKKyAgU0JTUygwKQorICBCU1MoMCkKICAgX2VuZCA9IC47CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCA5MzY5ODc5Li43MmFjZTk1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTg2LDEwICs4Niw2IEBACiBjb25maWcgSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBGQVNUX0NNUFhDSEdfTE9DQUwKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBNTVUKIAlkZWZfYm9vbCB5CiAKQEAgLTQzMiw2ICs0MjgsMTcgQEAKIAkgIG9mIEZsYXQgTG9naWNhbC4gIFlvdSB3aWxsIG5lZWQgYSBuZXcgbHlueGVyLmVsZiBmaWxlIHRvIGZsYXNoIHlvdXIKIAkgIGZpcm13YXJlIHdpdGggLSBzZW5kIGVtYWlsIHRvIDxNYXJ0aW4uQmxpZ2hAdXMuaWJtLmNvbT4uCiAKK2NvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUKKwlib29sCisJIyBNQ0UgY29kZSBjYWxscyBtZW1vcnlfZmFpbHVyZSgpOgorCWRlcGVuZHMgb24gWDg2X01DRQorCSMgT24gMzItYml0IHRoaXMgYWRkcyB0b28gYmlnIG9mIE5PREVTX1NISUZUIGFuZCB3ZSBydW4gb3V0IG9mIHBhZ2UgZmxhZ3M6CisJZGVwZW5kcyBvbiAhWDg2X05VTUFRCisJIyBPbiAzMi1iaXQgU1BBUlNFTUVNIGFkZHMgdG9vIGJpZyBvZiBTRUNUSU9OU19XSURUSDoKKwlkZXBlbmRzIG9uIFg4Nl82NCB8fCAhU1BBUlNFTUVNCisJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUKKwlkZWZhdWx0IHkKKwogY29uZmlnIFg4Nl9WSVNXUwogCWJvb2wgIlNHSSAzMjAvNTQwIChWaXN1YWwgV29ya3N0YXRpb24pIgogCWRlcGVuZHMgb24gWDg2XzMyICYmIFBDSSAmJiBYODZfTVBQQVJTRSAmJiBQQ0lfR09ESVJFQ1QKQEAgLTQ4NCw3ICs0OTEsNyBAQAogc291cmNlICJhcmNoL3g4Ni94ZW4vS2NvbmZpZyIKIAogY29uZmlnIFZNSQotCWJvb2wgIlZNSSBHdWVzdCBzdXBwb3J0IgorCWJvb2wgIlZNSSBHdWVzdCBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlzZWxlY3QgUEFSQVZJUlQKIAlkZXBlbmRzIG9uIFg4Nl8zMgogCS0tLWhlbHAtLS0KQEAgLTQ5Myw2ICs1MDAsMTUgQEAKIAkgIGF0IHRoZSBtb21lbnQpLCBieSBsaW5raW5nIHRoZSBrZXJuZWwgdG8gYSBHUEwtZWQgUk9NIG1vZHVsZQogCSAgcHJvdmlkZWQgYnkgdGhlIGh5cGVydmlzb3IuCiAKKwkgIEFzIG9mIFNlcHRlbWJlciAyMDA5LCBWTXdhcmUgaGFzIHN0YXJ0ZWQgYSBwaGFzZWQgcmV0aXJlbWVudAorCSAgb2YgdGhpcyBmZWF0dXJlIGZyb20gVk13YXJlJ3MgcHJvZHVjdHMuIFBsZWFzZSBzZWUKKwkgIGZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgZm9yIGRldGFpbHMuICBJZiB5b3UgYXJlCisJICBwbGFubmluZyB0byBlbmFibGUgdGhpcyBvcHRpb24sIHBsZWFzZSBub3RlIHRoYXQgeW91IGNhbm5vdAorCSAgbGl2ZSBtaWdyYXRlIGEgVk1JIGVuYWJsZWQgVk0gdG8gYSBmdXR1cmUgVk13YXJlIHByb2R1Y3QsCisJICB3aGljaCBkb2Vzbid0IHN1cHBvcnQgVk1JLiBTbyBpZiB5b3UgZXhwZWN0IHlvdXIga2VybmVsIHRvCisJICBzZWFtbGVzc2x5IG1pZ3JhdGUgdG8gbmV3ZXIgVk13YXJlIHByb2R1Y3RzLCBrZWVwIHRoaXMKKwkgIGRpc2FibGVkLgorCiBjb25maWcgS1ZNX0NMT0NLCiAJYm9vbCAiS1ZNIHBhcmF2aXJ0dWFsaXplZCBjbG9jayIKIAlzZWxlY3QgUEFSQVZJUlQKQEAgLTE0MjcsMTIgKzE0NDMsOCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLiBPbmx5IGVtYmVkZGVkIHNob3VsZCBzYXkgTiBoZXJlLgogCi1jb25maWcgQ0NfU1RBQ0tQUk9URUNUT1JfQUxMCi0JYm9vbAotCiBjb25maWcgQ0NfU1RBQ0tQUk9URUNUT1IKIAlib29sICJFbmFibGUgLWZzdGFjay1wcm90ZWN0b3IgYnVmZmVyIG92ZXJmbG93IGRldGVjdGlvbiAoRVhQRVJJTUVOVEFMKSIKLQlzZWxlY3QgQ0NfU1RBQ0tQUk9URUNUT1JfQUxMCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gdHVybnMgb24gdGhlIC1mc3RhY2stcHJvdGVjdG9yIEdDQyBmZWF0dXJlLiBUaGlzCiAJICBmZWF0dXJlIHB1dHMsIGF0IHRoZSBiZWdpbm5pbmcgb2YgZnVuY3Rpb25zLCBhIGNhbmFyeSB2YWx1ZSBvbgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5jcHUgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQppbmRleCA1Mjc1MTliLi4yNjQ5ODQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtNDAwLDcgKzQwMCw3IEBACiAKIGNvbmZpZyBYODZfQ01QWENIRzY0CiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWDg2X1BBRSB8fCBYODZfNjQKKwlkZXBlbmRzIG9uICFNMzg2ICYmICFNNDg2CiAKICMgdGhpcyBzaG91bGQgYmUgc2V0IGZvciBhbGwgLW1hcmNoPS4uIG9wdGlvbnMgd2hlcmUgdGhlIGNvbXBpbGVyCiAjIGdlbmVyYXRlcyBjbW92LgpAQCAtNDEyLDYgKzQxMiw3IEBACiAJaW50CiAJZGVmYXVsdCAiNjQiIGlmIFg4Nl82NAogCWRlZmF1bHQgIjYiIGlmIFg4Nl8zMiAmJiBYODZfUDZfTk9QCisJZGVmYXVsdCAiNSIgaWYgWDg2XzMyICYmIFg4Nl9DTVBYQ0hHNjQKIAlkZWZhdWx0ICI0IiBpZiBYODZfMzIgJiYgKFg4Nl9YQUREIHx8IFg4Nl9DTVBYQ0hHIHx8IFg4Nl9CU1dBUCB8fCBYODZfV1BfV09SS1NfT0spCiAJZGVmYXVsdCAiMyIKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCBhMDEyZWU4Li5kMmQyNGM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtNzYsNyArNzYsNiBAQAogCWNjX2hhc19zcCA6PSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2NjLXg4Nl8kKEJJVFMpLWhhcy1zdGFjay1wcm90ZWN0b3Iuc2gKICAgICAgICAgaWZlcSAoJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjY19oYXNfc3ApICQoQ0MpICQoYmlhcmNoKSkseSkKICAgICAgICAgICAgICAgICBzdGFja3AteSA6PSAtZnN0YWNrLXByb3RlY3RvcgotICAgICAgICAgICAgICAgIHN0YWNrcC0kKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUl9BTEwpICs9IC1mc3RhY2stcHJvdGVjdG9yLWFsbAogICAgICAgICAgICAgICAgIEtCVUlMRF9DRkxBR1MgKz0gJChzdGFja3AteSkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICQod2FybmluZyBzdGFjayBwcm90ZWN0b3IgZW5hYmxlZCBidXQgbm8gY29tcGlsZXIgc3VwcG9ydCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCmluZGV4IDc1ZTRmMDAuLmY1NDNiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUwpAQCAtMjMsMTMgKzIzLDE0IEBACiAgKi8KIAkudGV4dAogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3QuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAotCS5zZWN0aW9uICIudGV4dC5oZWFkIiwiYXgiLEBwcm9nYml0cworCV9fSEVBRAogRU5UUlkoc3RhcnR1cF8zMikKIAljbGQKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKaW5kZXggZjYyYzI4NC4uMDc3ZTFiNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCkBAIC0yNCw2ICsyNCw3IEBACiAJLmNvZGUzMgogCS50ZXh0CiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KQEAgLTMzLDcgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKLQkuc2VjdGlvbiAiLnRleHQuaGVhZCIKKwlfX0hFQUQKIAkuY29kZTMyCiBFTlRSWShzdGFydHVwXzMyKQogCWNsZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwppbmRleCBjYzM1M2UxLi5mNDE5M2JiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwpAQCAtMSwzICsxLDUgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorCiBPVVRQVVRfRk9STUFUKENPTkZJR19PVVRQVVRfRk9STUFULCBDT05GSUdfT1VUUFVUX0ZPUk1BVCwgQ09ORklHX09VVFBVVF9GT1JNQVQpCiAKICN1bmRlZiBpMzg2CkBAIC0xOCw5ICsyMCw5IEBACiAJICogYWRkcmVzcyAwLgogCSAqLwogCS4gPSAwOwotCS50ZXh0LmhlYWQgOiB7CisJLmhlYWQudGV4dCA6IHsKIAkJX2hlYWQgPSAuIDsKLQkJKigudGV4dC5oZWFkKQorCQlIRUFEX1RFWFQKIAkJX2VoZWFkID0gLiA7CiAJfQogCS5yb2RhdGEuY29tcHJlc3NlZCA6IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQgYi9hcmNoL3g4Ni9ib290L3NldHVwLmxkCmluZGV4IDBmNmVjNDU1Li4wM2MwNjgzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3NldHVwLmxkCisrKyBiL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKQEAgLTUzLDYgKzUzLDkgQEAKIAogCS9ESVNDQVJELyA6IHsgKigubm90ZSopIH0KIAorCS8qCisJICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKwkgKi8KIAkuID0gQVNTRVJUKF9lbmQgPD0gMHg4MDAwLCAiU2V0dXAgdG9vIGJpZyEiKTsKIAkuID0gQVNTRVJUKGhkciA9PSAweDFmMSwgIlRoZSBzZXR1cCBoZWFkZXIgaGFzIHRoZSB3cm9uZyBvZmZzZXQhIik7CiAJLyogTmVjZXNzYXJ5IGZvciB0aGUgdmVyeS1vbGQtbG9hZGVyIGNoZWNrIHRvIHdvcmsuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCmluZGV4IDU4NWVkZWIuLjQ5YzU1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwpAQCAtODIsNyArODIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpCiAJCWVyciA9IGNyeXB0b19hZXNfZXhwYW5kX2tleShjdHgsIGluX2tleSwga2V5X2xlbik7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogewogCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKQorCWlmICghaXJxX2ZwdV91c2FibGUoKSkKIAkJY3J5cHRvX2Flc19lbmNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMTE2LDcgKzExNiw3IEBACiB7CiAJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpCisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKQogCQljcnlwdG9fYWVzX2RlY3J5cHRfeDg2KGN0eCwgZHN0LCBzcmMpOwogCWVsc2UgewogCQlrZXJuZWxfZnB1X2JlZ2luKCk7CkBAIC0zNDIsNyArMzQyLDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwogCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKSB7CisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKSB7CiAJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQogCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOwogCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKIAlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkgeworCWlmICghaXJxX2ZwdV91c2FibGUoKSkgewogCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpjcnlwdGRfcmVxID0KIAkJCWFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKIAkJbWVtY3B5KGNyeXB0ZF9yZXEsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IDc0NjE5YzQuLjU4MWIwNTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwpAQCAtMjEsOCArMjEsOCBAQAogI2RlZmluZSBfX0FVRElUX0FSQ0hfTEUJICAgMHg0MDAwMDAwMAogCiAjaWZuZGVmIENPTkZJR19BVURJVFNZU0NBTEwKLSNkZWZpbmUgc3lzZXhpdF9hdWRpdCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKLSNkZWZpbmUgc3lzcmV0bF9hdWRpdCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKKyNkZWZpbmUgc3lzZXhpdF9hdWRpdCBpYTMyX3JldF9mcm9tX3N5c19jYWxsCisjZGVmaW5lIHN5c3JldGxfYXVkaXQgaWEzMl9yZXRfZnJvbV9zeXNfY2FsbAogI2VuZGlmCiAKICNkZWZpbmUgSUEzMl9OUl9zeXNjYWxscyAoKGlhMzJfc3lzY2FsbF9lbmQgLSBpYTMyX3N5c19jYWxsX3RhYmxlKS84KQpAQCAtMzksMTIgKzM5LDEyIEBACiAJLmVuZG0gCiAKIAkvKiBjbG9iYmVycyAlZWF4ICovCQotCS5tYWNybyAgQ0xFQVJfUlJFR1MgX3I5PXJheAorCS5tYWNybyAgQ0xFQVJfUlJFR1Mgb2Zmc2V0PTAsIF9yOT1yYXgKIAl4b3JsIAklZWF4LCVlYXgKLQltb3ZxCSVyYXgsUjExKCVyc3ApCi0JbW92cQklcmF4LFIxMCglcnNwKQotCW1vdnEJJVxfcjksUjkoJXJzcCkKLQltb3ZxCSVyYXgsUjgoJXJzcCkKKwltb3ZxCSVyYXgsXG9mZnNldCtSMTEoJXJzcCkKKwltb3ZxCSVyYXgsXG9mZnNldCtSMTAoJXJzcCkKKwltb3ZxCSVcX3I5LFxvZmZzZXQrUjkoJXJzcCkKKwltb3ZxCSVyYXgsXG9mZnNldCtSOCglcnNwKQogCS5lbmRtCiAKIAkvKgpAQCAtMTcyLDYgKzE3MiwxMCBAQAogCW1vdmwJUklQLVIxMSglcnNwKSwlZWR4CQkvKiBVc2VyICVlaXAgKi8KIAlDRklfUkVHSVNURVIgcmlwLHJkeAogCVJFU1RPUkVfQVJHUyAxLDI0LDEsMSwxLDEKKwl4b3JxCSVyOCwlcjgKKwl4b3JxCSVyOSwlcjkKKwl4b3JxCSVyMTAsJXIxMAorCXhvcnEJJXIxMSwlcjExCiAJcG9wZnEKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTgKIAkvKkNGSV9SRVNUT1JFIHJmbGFncyovCkBAIC0yMDAsOSArMjA0LDkgQEAKIAltb3ZsIFJESS1BUkdPRkZTRVQoJXJzcCksJXI4ZAkvKiByZWxvYWQgNXRoIHN5c2NhbGwgYXJnICovCiAJLmVuZG0KIAotCS5tYWNybyBhdWRpdHN5c19leGl0IGV4aXQsZWJwc2F2ZT1SQlAKKwkubWFjcm8gYXVkaXRzeXNfZXhpdCBleGl0CiAJdGVzdGwgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLFRJX2ZsYWdzKCVyMTApCi0Jam56IGludF9yZXRfZnJvbV9zeXNfY2FsbAorCWpueiBpYTMyX3JldF9mcm9tX3N5c19jYWxsCiAJVFJBQ0VfSVJRU19PTgogCXN0aQogCW1vdmwgJWVheCwlZXNpCQkvKiBzZWNvbmQgYXJnLCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLwpAQCAtMjEzLDEzICsyMTcsMTMgQEAKIAljYWxsIGF1ZGl0X3N5c2NhbGxfZXhpdAogCUdFVF9USFJFQURfSU5GTyglcjEwKQogCW1vdmwgUkFYLUFSR09GRlNFVCglcnNwKSwlZWF4CS8qIHJlbG9hZCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLwotCW1vdmwgXGVicHNhdmUtQVJHT0ZGU0VUKCVyc3ApLCVlYnAgLyogcmVsb2FkIHVzZXIgcmVnaXN0ZXIgdmFsdWUgKi8KIAltb3ZsICQoX1RJRl9BTExXT1JLX01BU0sgJiB+X1RJRl9TWVNDQUxMX0FVRElUKSwlZWRpCiAJY2xpCiAJVFJBQ0VfSVJRU19PRkYKIAl0ZXN0bCAlZWRpLFRJX2ZsYWdzKCVyMTApCi0Jam56IGludF93aXRoX2NoZWNrCi0Jam1wIFxleGl0CisJanogXGV4aXQKKwlDTEVBUl9SUkVHUyAtQVJHT0ZGU0VUCisJam1wIGludF93aXRoX2NoZWNrCiAJLmVuZG0KIAogc3lzZW50ZXJfYXVkaXRzeXM6CkBAIC0zMjksNiArMzMzLDkgQEAKIAlDRklfUkVHSVNURVIgcmlwLHJjeAogCW1vdmwgRUZMQUdTLUFSR09GRlNFVCglcnNwKSwlcjExZAkKIAkvKkNGSV9SRUdJU1RFUiByZmxhZ3MscjExKi8KKwl4b3JxCSVyMTAsJXIxMAorCXhvcnEJJXI5LCVyOQorCXhvcnEJJXI4LCVyOAogCVRSQUNFX0lSUVNfT04KIAltb3ZsIFJTUC1BUkdPRkZTRVQoJXJzcCksJWVzcAogCUNGSV9SRVNUT1JFIHJzcApAQCAtMzQzLDcgKzM1MCw3IEBACiAJam1wIGNzdGFyX2Rpc3BhdGNoCiAKIHN5c3JldGxfYXVkaXQ6Ci0JYXVkaXRzeXNfZXhpdCBzeXNyZXRsX2Zyb21fc3lzX2NhbGwsIFJDWCAvKiB1c2VyICVlYnAgaW4gUkNYIHNsb3QgKi8KKwlhdWRpdHN5c19leGl0IHN5c3JldGxfZnJvbV9zeXNfY2FsbAogI2VuZGlmCiAKIGNzdGFyX3RyYWNlc3lzOgpAQCAtMzUzLDcgKzM2MCw3IEBACiAjZW5kaWYKIAl4Y2hnbCAlcjlkLCVlYnAKIAlTQVZFX1JFU1QKLQlDTEVBUl9SUkVHUyByOQorCUNMRUFSX1JSRUdTIDAsIHI5CiAJbW92cSAkLUVOT1NZUyxSQVgoJXJzcCkJLyogcHRyYWNlIGNhbiBjaGFuZ2UgdGhpcyBmb3IgYSBiYWQgc3lzY2FsbCAqLwogCW1vdnEgJXJzcCwlcmRpICAgICAgICAvKiAmcHRfcmVncyAtPiBhcmcxICovCiAJY2FsbCBzeXNjYWxsX3RyYWNlX2VudGVyCkBAIC00MjUsNiArNDMyLDggQEAKIAljYWxsICppYTMyX3N5c19jYWxsX3RhYmxlKCwlcmF4LDgpICMgeHh4OiByaXAgcmVsYXRpdmUKIGlhMzJfc3lzcmV0OgogCW1vdnEgJXJheCxSQVgtQVJHT0ZGU0VUKCVyc3ApCitpYTMyX3JldF9mcm9tX3N5c19jYWxsOgorCUNMRUFSX1JSRUdTIC1BUkdPRkZTRVQKIAlqbXAgaW50X3JldF9mcm9tX3N5c19jYWxsIAogCiBpYTMyX3RyYWNlc3lzOgkJCSAKQEAgLTQ0Miw4ICs0NTEsOCBAQAogCiBpYTMyX2JhZHN5czoKIAltb3ZxICQwLE9SSUdfUkFYLUFSR09GRlNFVCglcnNwKQotCW1vdnEgJC1FTk9TWVMsUkFYLUFSR09GRlNFVCglcnNwKQotCWptcCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKKwltb3ZxICQtRU5PU1lTLCVyYXgKKwlqbXAgaWEzMl9zeXNyZXQKIAogcXVpZXRfbmlfc3lzY2FsbDoKIAltb3ZxICQtRU5PU1lTLCVyYXgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmgKaW5kZXggYWM5NTk5NS4uNGIxODA4OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmgKQEAgLTMxLDYgKzMxLDcgQEAKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZG9tYWlucyh2b2lkKTsKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZGV2aWNlcyh2b2lkKTsKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9zaHV0ZG93bih2b2lkKTsKK2V4dGVybiB2b2lkIGFtZF9pb21tdV9hcHBseV9lcnJhdHVtXzYzKHUxNiBkZXZpZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X2luaXQodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfQogc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCkgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2hlY2tzdW1fMzIuaAppbmRleCA3YzVlZjhiLi40NmZjNDc0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NoZWNrc3VtXzMyLmgKQEAgLTE2MSw3ICsxNjEsOCBAQAogCSAgICAiYWRjbCAkMCwgJTAJO1xuIgogCSAgICA6ICI9JnIiIChzdW0pCiAJICAgIDogInIiIChzYWRkciksICJyIiAoZGFkZHIpLAotCSAgICAgICJyIiAoaHRvbmwobGVuKSksICJyIiAoaHRvbmwocHJvdG8pKSwgIjAiIChzdW0pKTsKKwkgICAgICAiciIgKGh0b25sKGxlbikpLCAiciIgKGh0b25sKHByb3RvKSksICIwIiAoc3VtKQorCSAgICA6ICJtZW1vcnkiKTsKIAogCXJldHVybiBjc3VtX2ZvbGQoc3VtKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaAppbmRleCA4MmNlYjc4Li5lZTE5MzFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oCkBAIC0zMTIsMTkgKzMxMiwyMyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGNtcHhjaGdfNDg2X3U2NCh2b2xhdGlsZSB2b2lkICosIHU2NCwgdTY0KTsKIAotI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKLQlpZiAobGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2ID4gNCkpCQkJCVwKLQkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZzY0KChwdHIpLAkJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAkJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKTsJCVwKLQllbHNlCQkJCQkJCQlcCi0JCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzQ4Nl91NjQoKHB0ciksCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCi0JX19yZXQ7CQkJCQkJCQlcCi19KQorI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7CQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19vbGQgPSAobyk7CQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19uZXcgPSAobik7CQkJCVwKKwlhbHRlcm5hdGl2ZV9pbygiY2FsbCBjbXB4Y2hnOGJfZW11IiwJCQlcCisJCQkibG9jazsgY21weGNoZzhiICglJWVzaSkiICwJCVwKKwkJICAgICAgIFg4Nl9GRUFUVVJFX0NYOCwJCQkJXAorCQkgICAgICAgIj1BIiAoX19yZXQpLAkJCQlcCisJCSAgICAgICAiUyIgKChwdHIpKSwgIjAiIChfX29sZCksCQlcCisJCSAgICAgICAiYiIgKCh1bnNpZ25lZCBpbnQpX19uZXcpLAkJXAorCQkgICAgICAgImMiICgodW5zaWduZWQgaW50KShfX25ldz4+MzIpKQkJXAorCQkgICAgICAgOiAibWVtb3J5Iik7CQkJCVwKKwlfX3JldDsgfSkKKworCisKICNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikJCQkJCVwKICh7CQkJCQkJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAppbmRleCBlOGRlMmY2Li42MTdiZDU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCkBAIC0yODgsNyArMjg4LDcgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9kZXNjX2Jhc2UoY29uc3Qgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjKQogewotCXJldHVybiBkZXNjLT5iYXNlMCB8ICgoZGVzYy0+YmFzZTEpIDw8IDE2KSB8ICgoZGVzYy0+YmFzZTIpIDw8IDI0KTsKKwlyZXR1cm4gKHVuc2lnbmVkKShkZXNjLT5iYXNlMCB8ICgoZGVzYy0+YmFzZTEpIDw8IDE2KSB8ICgoZGVzYy0+YmFzZTIpIDw8IDI0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVzY19iYXNlKHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywgdW5zaWduZWQgbG9uZyBiYXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggMGVlNzcwZC4uNmEyNWQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xNCw2ICsxNCwxMiBAQAogI2luY2x1ZGUgPGFzbS9zd2lvdGxiLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLWNvaGVyZW50Lmg+CiAKKyNpZmRlZiBDT05GSUdfSVNBCisjIGRlZmluZSBJU0FfRE1BX0JJVF9NQVNLIERNQV9CSVRfTUFTSygyNCkKKyNlbHNlCisjIGRlZmluZSBJU0FfRE1BX0JJVF9NQVNLIERNQV9CSVRfTUFTSygzMikKKyNlbmRpZgorCiBleHRlcm4gZG1hX2FkZHJfdCBiYWRfZG1hX2FkZHJlc3M7CiBleHRlcm4gaW50IGlvbW11X21lcmdlOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgeDg2X2RtYV9mYWxsYmFja19kZXY7CkBAIC0xMjQsMTAgKzEzMCw4IEBACiAJaWYgKGRtYV9hbGxvY19mcm9tX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgJm1lbW9yeSkpCiAJCXJldHVybiBtZW1vcnk7CiAKLQlpZiAoIWRldikgeworCWlmICghZGV2KQogCQlkZXYgPSAmeDg2X2RtYV9mYWxsYmFja19kZXY7Ci0JCWdmcCB8PSBHRlBfRE1BOwotCX0KIAogCWlmICghaXNfZGV2aWNlX2RtYV9jYXBhYmxlKGRldikpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggM2JlMDAwNC4uZDgzODkyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC03OTYsNiArNzk2LDcgQEAKICNkZWZpbmUgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIKIGludCBrdm1fdW5tYXBfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEpOwogaW50IGt2bV9hZ2VfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEpOwordm9pZCBrdm1fc2V0X3NwdGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsIHB0ZV90IHB0ZSk7CiBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9jcHVfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9hcmNoX2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCmluZGV4IGI2MDhhNjQuLmYxMzYzYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCkBAIC0xMzMsNiArMTMzLDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfcDVfbWNlKHZvaWQpIHt9CiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgKCp4ODZfbWNlX2RlY29kZV9jYWxsYmFjaykoc3RydWN0IG1jZSAqbSk7CisKIHZvaWQgbWNlX3NldHVwKHN0cnVjdCBtY2UgKm0pOwogdm9pZCBtY2VfbG9nKHN0cnVjdCBtY2UgKm0pOwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBzeXNfZGV2aWNlLCBtY2VfZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IDhhZWJjYzQuLmVmYjM4OTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtODQwLDQyICs4NDAsMjIgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3Modm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGY7Ci0KLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOiAiPWEiKGYpCi0JCSAgICAgOiBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMuc2F2ZV9mbCksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwotCXJldHVybiBmOworCXJldHVybiBQVk9QX0NBTExFRTAodW5zaWduZWQgbG9uZywgcHZfaXJxX29wcy5zYXZlX2ZsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGYpCiB7Ci0JYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQotCQkgICAgIDogIj1hIihmKQotCQkgICAgIDogUFZfRkxBR1NfQVJHKGYpLAotCQkgICAgICAgcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnJlc3RvcmVfZmwpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKwlQVk9QX1ZDQUxMRUUxKHB2X2lycV9vcHMucmVzdG9yZV9mbCwgZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKIHsKLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOgotCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLmlycV9kaXNhYmxlKSwKLQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCi0JCSAgICAgOiAibWVtb3J5IiwgImVheCIsICJjYyIpOworCVBWT1BfVkNBTExFRTAocHZfaXJxX29wcy5pcnFfZGlzYWJsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkKLQkJICAgICA6Ci0JCSAgICAgOiBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMuaXJxX2VuYWJsZSksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJlYXgiLCAiY2MiKTsKKwlQVk9QX1ZDQUxMRUUwKHB2X2lycV9vcHMuaXJxX2VuYWJsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9pcnFfc2F2ZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKaW5kZXggZGQwZjViMy4uOTM1NzQ3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCkBAIC00OTQsMTAgKzQ5NCwxMSBAQAogI2RlZmluZSBFWFRSQV9DTE9CQkVSUwogI2RlZmluZSBWRVhUUkFfQ0xPQkJFUlMKICNlbHNlICAvKiBDT05GSUdfWDg2XzY0ICovCisvKiBbcmVdYXggaXNuJ3QgYW4gYXJnLCBidXQgdGhlIHJldHVybiB2YWwgKi8KICNkZWZpbmUgUFZPUF9WQ0FMTF9BUkdTCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBfX2VkaSA9IF9fZWRpLCBfX2VzaSA9IF9fZXNpLAlcCi0JCV9fZWR4ID0gX19lZHgsIF9fZWN4ID0gX19lY3gKLSNkZWZpbmUgUFZPUF9DQUxMX0FSR1MJCVBWT1BfVkNBTExfQVJHUywgX19lYXgKKwkJX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeCwgX19lYXggPSBfX2VheAorI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJUFZPUF9WQ0FMTF9BUkdTCiAKICNkZWZpbmUgUFZPUF9DQUxMX0FSRzEoeCkJCSJEIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQogI2RlZmluZSBQVk9QX0NBTExfQVJHMih4KQkJIlMiICgodW5zaWduZWQgbG9uZykoeCkpCkBAIC01MDksNiArNTEwLDcgQEAKIAkJCQkiPWMiIChfX2VjeCkKICNkZWZpbmUgUFZPUF9DQUxMX0NMT0JCRVJTCVBWT1BfVkNBTExfQ0xPQkJFUlMsICI9YSIgKF9fZWF4KQogCisvKiB2b2lkIGZ1bmN0aW9ucyBhcmUgc3RpbGwgYWxsb3dlZCBbcmVdYXggZm9yIHNjcmF0Y2ggKi8KICNkZWZpbmUgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCSI9YSIgKF9fZWF4KQogI2RlZmluZSBQVk9QX0NBTExFRV9DTE9CQkVSUwlQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMKIApAQCAtNTgzLDggKzU4NSw4IEBACiAJCSAgICAgICBWRVhUUkFfQ0xPQkJFUlMsCQkJCQlcCiAJCSAgICAgICBwcmUsIHBvc3QsICMjX19WQV9BUkdTX18pCiAKLSNkZWZpbmUgX19QVk9QX1ZDQUxMRUVTQVZFKHJldHR5cGUsIG9wLCBwcmUsIHBvc3QsIC4uLikJCQlcCi0JX19fX1BWT1BfQ0FMTChyZXR0eXBlLCBvcC5mdW5jLCBDTEJSX1JFVF9SRUcsCQkJXAorI2RlZmluZSBfX1BWT1BfVkNBTExFRVNBVkUob3AsIHByZSwgcG9zdCwgLi4uKQkJCQlcCisJX19fX1BWT1BfVkNBTEwob3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCQlcCiAJCSAgICAgIFBWT1BfVkNBTExFRV9DTE9CQkVSUywgLAkJCQlcCiAJCSAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCmluZGV4IDdiNDY3YmYuLmQxZjRhNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKQEAgLTI3Nyw2ICsyNzcsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCiBleHRlcm4gcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2s7CitleHRlcm4gdm9pZCBzZXRfbngodm9pZCk7CiBleHRlcm4gaW50IG54X2VuYWJsZWQ7CiAKICNkZWZpbmUgcGdwcm90X3dyaXRlY29tYmluZQlwZ3Byb3Rfd3JpdGVjb21iaW5lCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGMzNDI5ZTguLmM5Nzg2NDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModCkJKCoodW5zaWduZWQgbG9uZyAqKSgodCktPnRocmVhZC5zcCAtIDgpKQogCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0c2spCSgoc3RydWN0IHB0X3JlZ3MgKikodHNrKS0+dGhyZWFkLnNwMCAtIDEpCi0jZGVmaW5lIEtTVEtfRVNQKHRzaykJCS0xIC8qIHNvcnJ5LiBkb2Vzbid0IHdvcmsgZm9yIHN5c2NhbGwuICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBLU1RLX0VTUChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAogZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG5ld19pcCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDZmMDY5NWQuLjQwZTM3YjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtMTQzLDYgKzE0Myw3IEBACiAJCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwkJCVwKIAkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCQkJXAogCQkJCXwgMSpTRF9XQUtFX0FGRklORQkJCVwKKwkJCQl8IDAqU0RfUFJFRkVSX0xPQ0FMCQkJXAogCQkJCXwgMCpTRF9TSEFSRV9DUFVQT1dFUgkJCVwKIAkJCQl8IDAqU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UJCVwKIAkJCQl8IDAqU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkJXApAQCAtMTY1LDIxICsxNjYsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX25vZGUoaW50IGNwdSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKQotewotCXJldHVybiBjcHVfb25saW5lX21hc2s7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKHZvaWQpIHsgfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggMDRlYjZjOS4uZDE0MTRhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KKyNpbmNsdWRlIDxhc20vaXJxX3ZlY3RvcnMuaD4KKyNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogCiAKIC8qCkBAIC0xMTQsNyArMTE2LDcgQEAKIC8qCiAgKiBUaGUgbGFyZ2VzdCBwb3NzaWJsZSBOQVNJRCBvZiBhIEMgb3IgTSBicmljayAoKyAyKQogICovCi0jZGVmaW5lIFVWX01BWF9OQVNJRF9WQUxVRQkoVVZfTUFYX05VTUFMSU5LX05PREVTICogMikKKyNkZWZpbmUgVVZfTUFYX05BU0lEX1ZBTFVFCShVVl9NQVhfTlVNQUxJTktfQkxBREVTICogMikKIAogc3RydWN0IHV2X3NjaXJfcyB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CkBAIC0yMzAsNiArMjMyLDIwIEBACiAJcmV0dXJuIHV2X3NvY19waHlzX3JhbV90b19ncGEoX19wYSh2KSk7CiB9CiAKKy8qIGdub2RlIC0+IHBub2RlICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfZ3BhX3RvX2dub2RlKHVuc2lnbmVkIGxvbmcgZ3BhKQoreworCXJldHVybiBncGEgPj4gdXZfaHViX2luZm8tPm1fdmFsOworfQorCisvKiBncGEgLT4gcG5vZGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV2X2dwYV90b19wbm9kZSh1bnNpZ25lZCBsb25nIGdwYSkKK3sKKwl1bnNpZ25lZCBsb25nIG5fbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm5fdmFsKSAtIDE7CisKKwlyZXR1cm4gdXZfZ3BhX3RvX2dub2RlKGdwYSkgJiBuX21hc2s7Cit9CisKIC8qIHBub2RlLCBvZmZzZXQgLS0+IHNvY2tldCB2aXJ0dWFsICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKnV2X3Bub2RlX29mZnNldF90b192YWRkcihpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewpAQCAtNDIxLDkgKzQzNywxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIHV2X2h1Yl9zZW5kX2lwaShpbnQgcG5vZGUsIGludCBhcGljaWQsIGludCB2ZWN0b3IpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBkbW9kZSA9IGRlc3RfRml4ZWQ7CisKKwlpZiAodmVjdG9yID09IE5NSV9WRUNUT1IpCisJCWRtb2RlID0gZGVzdF9OTUk7CiAKIAl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAogCQkJKChhcGljaWQpIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAorCQkJKGRtb2RlIDw8IFVWSF9JUElfSU5UX0RFTElWRVJZX01PREVfU0hGVCkgfAogCQkJKHZlY3RvciA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7CiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfSVBJX0lOVCwgdmFsKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMKaW5kZXggOGM0NGMyMy4uNTljZGZhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkgKiBQNCwgQ29yZSBhbmQgYmV5b25kIENQVXMKIAkgKi8KIAlpZiAoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMICYmCi0JICAgIChjLT54ODYgPiAweDYgfHwgKGMtPng4NiA9PSA2ICYmIGMtPng4Nl9tb2RlbCA+PSAxNCkpKQorCSAgICAoYy0+eDg2ID4gMHhmIHx8IChjLT54ODYgPT0gNiAmJiBjLT54ODZfbW9kZWwgPj0gMTQpKSkKIAkJCWZsYWdzLT5ibV9jb250cm9sID0gMDsKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9wcm9jZXNzb3JfcG93ZXJfaW5pdF9ibV9jaGVjayk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMKaW5kZXggN2RhMDBiNy4uMDYwZmZmOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUwpAQCAtNTcsNSArNTcsOCBAQAogCQkqKC5ub3RlKikKIAl9CiAKKwkvKgorCSAqIFRoZSBBU1NFUlQoKSBzaW5rIHRvIC4gaXMgaW50ZW50aW9uYWwsIGZvciBiaW51dGlscyAyLjE0IGNvbXBhdGliaWxpdHk6CisJICovCiAJLiA9IEFTU0VSVChfZW5kIDw9IFdBS0VVUF9TSVpFLCAiV2FrZXVwIHRvbyBiaWchIik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKaW5kZXggOThmMjMwZi4uMDI4NTUyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwpAQCAtMTIyMCw2ICsxMjIwLDggQEAKIAlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzFdID0gMDsKIAlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzJdID0gMDsKIAorCWFtZF9pb21tdV9hcHBseV9lcnJhdHVtXzYzKGRldmlkKTsKKwogCS8qIGRlY3JlYXNlIHJlZmVyZW5jZSBjb3VudGVyICovCiAJZG9tYWluLT5kZXZfY250IC09IDE7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKaW5kZXggYjRiNjFkNC4uYzIwMDAxZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCXdyaXRlbChjdHJsLCBpb21tdS0+bW1pb19iYXNlICsgTU1JT19DT05UUk9MX09GRlNFVCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpb21tdV9mZWF0dXJlX2Rpc2FibGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU4IGJpdCkKK3N0YXRpYyB2b2lkIGlvbW11X2ZlYXR1cmVfZGlzYWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTggYml0KQogewogCXUzMiBjdHJsOwogCkBAIC01MTksNiArNTE5LDI2IEBACiAJYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVtpXSB8PSAoMSA8PCBfYml0KTsKIH0KIAorc3RhdGljIGludCBnZXRfZGV2X2VudHJ5X2JpdCh1MTYgZGV2aWQsIHU4IGJpdCkKK3sKKwlpbnQgaSA9IChiaXQgPj4gNSkgJiAweDA3OworCWludCBfYml0ID0gYml0ICYgMHgxZjsKKworCXJldHVybiAoYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVtpXSAmICgxIDw8IF9iaXQpKSA+PiBfYml0OworfQorCisKK3ZvaWQgYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fNjModTE2IGRldmlkKQoreworCWludCBzeXNtZ3Q7CisKKwlzeXNtZ3QgPSBnZXRfZGV2X2VudHJ5X2JpdChkZXZpZCwgREVWX0VOVFJZX1NZU01HVDEpIHwKKwkJIChnZXRfZGV2X2VudHJ5X2JpdChkZXZpZCwgREVWX0VOVFJZX1NZU01HVDIpIDw8IDEpOworCisJaWYgKHN5c21ndCA9PSAweDAxKQorCQlzZXRfZGV2X2VudHJ5X2JpdChkZXZpZCwgREVWX0VOVFJZX0lXKTsKK30KKwogLyogV3JpdGVzIHRoZSBzcGVjaWZpYyBJT01NVSBmb3IgYSBkZXZpY2UgaW50byB0aGUgcmxvb2t1cCB0YWJsZSAqLwogc3RhdGljIHZvaWQgX19pbml0IHNldF9pb21tdV9mb3JfZGV2aWNlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1MTYgZGV2aWQpCiB7CkBAIC01NDcsNiArNTY3LDggQEAKIAlpZiAoZmxhZ3MgJiBBQ1BJX0RFVkZMQUdfTElOVDEpCiAJCXNldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfTElOVDFfUEFTUyk7CiAKKwlhbWRfaW9tbXVfYXBwbHlfZXJyYXR1bV82MyhkZXZpZCk7CisKIAlzZXRfaW9tbXVfZm9yX2RldmljZShpb21tdSwgZGV2aWQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCBmNWY1ODg2Li4zMjZjMjU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKQEAgLTM1MiwxNCArMzUyLDE0IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWRpcl9hZGRycyk7IGkrKykgewogCQlhbGlhcy52ID0gdXZfcmVhZF9sb2NhbF9tbXIocmVkaXJfYWRkcnNbaV0uYWxpYXMpOwotCQlpZiAoYWxpYXMucy5iYXNlID09IDApIHsKKwkJaWYgKGFsaWFzLnMuZW5hYmxlICYmIGFsaWFzLnMuYmFzZSA9PSAwKSB7CiAJCQkqc2l6ZSA9ICgxVUwgPDwgYWxpYXMucy5tX2FsaWFzKTsKIAkJCXJlZGlyZWN0LnYgPSB1dl9yZWFkX2xvY2FsX21tcihyZWRpcl9hZGRyc1tpXS5yZWRpcmVjdCk7CiAJCQkqYmFzZSA9ICh1bnNpZ25lZCBsb25nKXJlZGlyZWN0LnMuZGVzdF9iYXNlIDw8IERFU1RfU0hJRlQ7CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JQlVHKCk7CisJKmJhc2UgPSAqc2l6ZSA9IDA7CiB9CiAKIGVudW0gbWFwX3R5cGUge21hcF93YiwgbWFwX3VjfTsKQEAgLTYxOSwxMiArNjE5LDEyIEBACiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5sb3dtZW1fcmVtYXBfYmFzZSA9IGxvd21lbV9yZWRpcl9iYXNlOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bG93bWVtX3JlbWFwX3RvcCA9IGxvd21lbV9yZWRpcl9zaXplOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bV92YWwgPSBtX3ZhbDsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm5fdmFsID0gbV92YWw7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5uX3ZhbCA9IG5fdmFsOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bnVtYV9ibGFkZV9pZCA9IGJsYWRlOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+YmxhZGVfcHJvY2Vzc29yX2lkID0gbGNwdTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlID0gcG5vZGU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5wbm9kZV9tYXNrID0gcG5vZGVfbWFzazsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdwYV9tYXNrID0gKDEgPDwgKG1fdmFsICsgbl92YWwpKSAtIDE7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ncGFfbWFzayA9ICgxVUwgPDwgKG1fdmFsICsgbl92YWwpKSAtIDE7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV91cHBlciA9IGdub2RlX3VwcGVyOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z25vZGVfZXh0cmEgPSBnbm9kZV9leHRyYTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdsb2JhbF9tbXJfYmFzZSA9IG1tcl9iYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IDdkNWMzYjAuLjhiNTgxZDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTUyNiwxNSArNTI2LDIxIEBACiAKIHN0YXRpYyBpbnQgYWNwaV9jcHVmcmVxX2JsYWNrbGlzdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JLyogaHR0cDovL3d3dy5pbnRlbC5jb20vQXNzZXRzL1BERi9zcGVjdXBkYXRlLzMxNDU1NC5wZGYKKwkvKiBJbnRlbCBYZW9uIFByb2Nlc3NvciA3MTAwIFNlcmllcyBTcGVjaWZpY2F0aW9uIFVwZGF0ZQorCSAqIGh0dHA6Ly93d3cuaW50ZWwuY29tL0Fzc2V0cy9QREYvc3BlY3VwZGF0ZS8zMTQ1NTQucGRmCiAJICogQUwzMDogQSBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbiAoTUNFKSBPY2N1cnJpbmcgZHVyaW5nIGFuCiAJICogRW5oYW5jZWQgSW50ZWwgU3BlZWRTdGVwIFRlY2hub2xvZ3kgUmF0aW8gQ2hhbmdlIE1heSBDYXVzZQotCSAqIEJvdGggUHJvY2Vzc29yIENvcmVzIHRvIExvY2sgVXAgd2hlbiBIVCBpcyBlbmFibGVkKi8KKwkgKiBCb3RoIFByb2Nlc3NvciBDb3JlcyB0byBMb2NrIFVwLiAqLwogCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpIHsKIAkJaWYgKChjLT54ODYgPT0gMTUpICYmCiAJCSAgICAoYy0+eDg2X21vZGVsID09IDYpICYmCi0JCSAgICAoYy0+eDg2X21hc2sgPT0gOCkgJiYgc210X2NhcGFibGUoKSkKKwkJICAgIChjLT54ODZfbWFzayA9PSA4KSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiYWNwaS1jcHVmcmVxOiBJbnRlbChSKSAiCisJCQkgICAgIlhlb24oUikgNzEwMCBFcnJhdGEgQUwzMCwgcHJvY2Vzc29ycyBtYXkgIgorCQkJICAgICJsb2NrIHVwIG9uIGZyZXF1ZW5jeSBjaGFuZ2VzOiBkaXNhYmxpbmcgIgorCQkJICAgICJhY3BpLWNwdWZyZXEuXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOworCQkgICAgfQogCQl9CiAJcmV0dXJuIDA7CiB9CkBAIC01NDksMTMgKzU1NSwxOCBAQAogCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShwb2xpY3ktPmNwdSk7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlICpwZXJmOworI2lmZGVmIENPTkZJR19TTVAKKwlzdGF0aWMgaW50IGJsYWNrbGlzdGVkOworI2VuZGlmCiAKIAlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfY3B1X2luaXRcbiIpOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCXJlc3VsdCA9IGFjcGlfY3B1ZnJlcV9ibGFja2xpc3QoYyk7Ci0JaWYgKHJlc3VsdCkKLQkJcmV0dXJuIHJlc3VsdDsKKwlpZiAoYmxhY2tsaXN0ZWQpCisJCXJldHVybiBibGFja2xpc3RlZDsKKwlibGFja2xpc3RlZCA9IGFjcGlfY3B1ZnJlcV9ibGFja2xpc3QoYyk7CisJaWYgKGJsYWNrbGlzdGVkKQorCQlyZXR1cm4gYmxhY2tsaXN0ZWQ7CiAjZW5kaWYKIAogCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKaW5kZXggY2UyZWQzZS4uY2FiZDJmYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTgxMyw3ICs4MTMsNyBAQAogCQkJbWVtY3B5KGVibGNyLCBzYW11ZWwyX2VibGNyLCBzaXplb2Yoc2FtdWVsMl9lYmxjcikpOwogCQkJYnJlYWs7CiAJCWNhc2UgMSAuLi4gMTU6Ci0JCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9MT05HSEFVTF9WMTsKKwkJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YyOwogCQkJaWYgKGMtPng4Nl9tYXNrIDwgOCkgewogCQkJCWNwdV9tb2RlbCA9IENQVV9TQU1VRUwyOwogCQkJCWNwdW5hbWUgPSAiQzMgJ1NhbXVlbCAyJyBbQzVCXSI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDYzOTRhYTUuLjNmMTJkYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC0xMDIyLDcgKzEwMjIsNyBAQAogCQkgKiBzZXQgaXQgdG8gMSB0byBhdm9pZCBwcm9ibGVtcyBpbiB0aGUgZnV0dXJlLgogCQkgKiBGb3IgYWxsIG90aGVycyBpdCdzIGEgQklPUyBidWcuCiAJCSAqLwotCQlpZiAoIWJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTEpCisJCWlmIChib290X2NwdV9kYXRhLng4NiAhPSAweDExKQogCQkJcHJpbnRrKEtFUk5fRVJSIEZXX1dBUk4gUEZYICJJbnZhbGlkIHplcm8gdHJhbnNpdGlvbiAiCiAJCQkJImxhdGVuY3lcbiIpOwogCQltYXhfbGF0ZW5jeSA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwppbmRleCA2OTExZTkxLi4zYWU1YTdhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKQEAgLTIzMiwyOCArMjMyLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBnZXRfZnJlcV9kYXRhIHsKLQl1bnNpZ25lZCBpbnQgc3BlZWQ7Ci0JdW5zaWduZWQgaW50IHByb2Nlc3NvcjsKLX07Ci0KLXN0YXRpYyB2b2lkIGdldF9mcmVxX2RhdGEodm9pZCAqX2RhdGEpCitzdGF0aWMgdm9pZCBnZXRfZnJlcV9kYXRhKHZvaWQgKl9zcGVlZCkKIHsKLQlzdHJ1Y3QgZ2V0X2ZyZXFfZGF0YSAqZGF0YSA9IF9kYXRhOworCXVuc2lnbmVkIGludCAqc3BlZWQgPSBfc3BlZWQ7CiAKLQlkYXRhLT5zcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KGRhdGEtPnByb2Nlc3Nvcik7CisJKnNwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2dldCh1bnNpZ25lZCBpbnQgY3B1KQogewotCXN0cnVjdCBnZXRfZnJlcV9kYXRhIGRhdGEgPSB7IC5wcm9jZXNzb3IgPSBjcHUgfTsKKwl1bnNpZ25lZCBpbnQgc3BlZWQ7CiAKIAkvKiBZb3UncmUgc3VwcG9zZWQgdG8gZW5zdXJlIENQVSBpcyBvbmxpbmUuICovCi0JaWYgKHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGdldF9mcmVxX2RhdGEsICZkYXRhLCAxKSAhPSAwKQorCWlmIChzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBnZXRfZnJlcV9kYXRhLCAmc3BlZWQsIDEpICE9IDApCiAJCUJVRygpOwogCi0JZHByaW50aygiZGV0ZWN0ZWQgJXUga0h6IGFzIGN1cnJlbnQgZnJlcXVlbmN5XG4iLCBkYXRhLnNwZWVkKTsKLQlyZXR1cm4gZGF0YS5zcGVlZDsKKwlkcHJpbnRrKCJkZXRlY3RlZCAldSBrSHogYXMgY3VycmVudCBmcmVxdWVuY3lcbiIsIHNwZWVkKTsKKwlyZXR1cm4gc3BlZWQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jCmluZGV4IDcwMjlmMGUuLjQ3Mjc2M2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbmplY3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMKQEAgLTk4LDggKzk4LDkgQEAKIH07CiAKIC8qIEluamVjdCBtY2Ugb24gY3VycmVudCBDUFUgKi8KLXN0YXRpYyBpbnQgcmFpc2VfbG9jYWwoc3RydWN0IG1jZSAqbSkKK3N0YXRpYyBpbnQgcmFpc2VfbG9jYWwodm9pZCkKIHsKKwlzdHJ1Y3QgbWNlICptID0gJl9fZ2V0X2NwdV92YXIoaW5qZWN0bSk7CiAJaW50IGNvbnRleHQgPSBNQ0pfQ1RYKG0tPmluamVjdF9mbGFncyk7CiAJaW50IHJldCA9IDA7CiAJaW50IGNwdSA9IG0tPmV4dGNwdTsKQEAgLTE2NywxMiArMTY4LDEyIEBACiAJCQl9CiAJCQljcHVfcmVsYXgoKTsKIAkJfQotCQlyYWlzZV9sb2NhbChtKTsKKwkJcmFpc2VfbG9jYWwoKTsKIAkJcHV0X2NwdSgpOwogCQlwdXRfb25saW5lX2NwdXMoKTsKIAl9IGVsc2UKICNlbmRpZgotCQlyYWlzZV9sb2NhbChtKTsKKwkJcmFpc2VfbG9jYWwoKTsKIH0KIAogLyogRXJyb3IgaW5qZWN0aW9uIGludGVyZmFjZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwppbmRleCAyZjVhYWIyLi43MjFhNzdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwpAQCAtODUsNiArODUsMTggQEAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbWNlLCBtY2VzX3NlZW4pOwogc3RhdGljIGludAkJCWNwdV9taXNzaW5nOwogCitzdGF0aWMgdm9pZCBkZWZhdWx0X2RlY29kZV9tY2Uoc3RydWN0IG1jZSAqbSkKK3sKKwlwcl9lbWVyZygiTm8gaHVtYW4gcmVhZGFibGUgTUNFIGRlY29kaW5nIHN1cHBvcnQgb24gdGhpcyBDUFUgdHlwZS5cbiIpOworCXByX2VtZXJnKCJSdW4gdGhlIG1lc3NhZ2UgdGhyb3VnaCAnbWNlbG9nIC0tYXNjaWknIHRvIGRlY29kZS5cbiIpOworfQorCisvKgorICogQ1BVL2NoaXBzZXQgc3BlY2lmaWMgRURBQyBjb2RlIGNhbiByZWdpc3RlciBhIGNhbGxiYWNrIGhlcmUgdG8gcHJpbnQKKyAqIE1DRSBlcnJvcnMgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtOgorICovCit2b2lkICgqeDg2X21jZV9kZWNvZGVfY2FsbGJhY2spKHN0cnVjdCBtY2UgKm0pID0gZGVmYXVsdF9kZWNvZGVfbWNlOworRVhQT1JUX1NZTUJPTCh4ODZfbWNlX2RlY29kZV9jYWxsYmFjayk7CiAKIC8qIE1DQSBiYW5rcyBwb2xsZWQgYnkgdGhlIHBlcmlvZCBwb2xsaW5nIHRpbWVyIGZvciBjb3JyZWN0ZWQgZXZlbnRzICovCiBERUZJTkVfUEVSX0NQVShtY2VfYmFua3NfdCwgbWNlX3BvbGxfYmFua3MpID0gewpAQCAtMTY1LDQ5ICsxNzcsNDYgQEAKIAlzZXRfYml0KDAsICZtY2VfbmVlZF9ub3RpZnkpOwogfQogCi12b2lkIF9fd2VhayBkZWNvZGVfbWNlKHN0cnVjdCBtY2UgKm0pCi17Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgdm9pZCBwcmludF9tY2Uoc3RydWN0IG1jZSAqbSkKIHsKLQlwcmludGsoS0VSTl9FTUVSRwotCSAgICAgICAiQ1BVICVkOiBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbjogJTE2THggQmFuayAlZDogJTAxNkx4XG4iLAorCXByX2VtZXJnKCJDUFUgJWQ6IE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uOiAlMTZMeCBCYW5rICVkOiAlMDE2THhcbiIsCiAJICAgICAgIG0tPmV4dGNwdSwgbS0+bWNnc3RhdHVzLCBtLT5iYW5rLCBtLT5zdGF0dXMpOworCiAJaWYgKG0tPmlwKSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJSSVAlcyAlMDJ4OjwlMDE2THg+ICIsCi0JCSAgICAgICAhKG0tPm1jZ3N0YXR1cyAmIE1DR19TVEFUVVNfRUlQVikgPyAiICFJTkVYQUNUISIgOiAiIiwKLQkJICAgICAgIG0tPmNzLCBtLT5pcCk7CisJCXByX2VtZXJnKCJSSVAlcyAlMDJ4OjwlMDE2THg+ICIsCisJCQkhKG0tPm1jZ3N0YXR1cyAmIE1DR19TVEFUVVNfRUlQVikgPyAiICFJTkVYQUNUISIgOiAiIiwKKwkJCQltLT5jcywgbS0+aXApOworCiAJCWlmIChtLT5jcyA9PSBfX0tFUk5FTF9DUykKIAkJCXByaW50X3N5bWJvbCgieyVzfSIsIG0tPmlwKTsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJcHJfY29udCgiXG4iKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlRTQyAlbGx4ICIsIG0tPnRzYyk7Ci0JaWYgKG0tPmFkZHIpCi0JCXByaW50ayhLRVJOX0NPTlQgIkFERFIgJWxseCAiLCBtLT5hZGRyKTsKLQlpZiAobS0+bWlzYykKLQkJcHJpbnRrKEtFUk5fQ09OVCAiTUlTQyAlbGx4ICIsIG0tPm1pc2MpOwotCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlBST0NFU1NPUiAldToleCBUSU1FICVsbHUgU09DS0VUICV1IEFQSUMgJXhcbiIsCi0JCQltLT5jcHV2ZW5kb3IsIG0tPmNwdWlkLCBtLT50aW1lLCBtLT5zb2NrZXRpZCwKLQkJCW0tPmFwaWNpZCk7CiAKLQlkZWNvZGVfbWNlKG0pOworCXByX2VtZXJnKCJUU0MgJWxseCAiLCBtLT50c2MpOworCWlmIChtLT5hZGRyKQorCQlwcl9jb250KCJBRERSICVsbHggIiwgbS0+YWRkcik7CisJaWYgKG0tPm1pc2MpCisJCXByX2NvbnQoIk1JU0MgJWxseCAiLCBtLT5taXNjKTsKKworCXByX2NvbnQoIlxuIik7CisJcHJfZW1lcmcoIlBST0NFU1NPUiAldToleCBUSU1FICVsbHUgU09DS0VUICV1IEFQSUMgJXhcbiIsCisJCW0tPmNwdXZlbmRvciwgbS0+Y3B1aWQsIG0tPnRpbWUsIG0tPnNvY2tldGlkLCBtLT5hcGljaWQpOworCisJLyoKKwkgKiBQcmludCBvdXQgaHVtYW4tcmVhZGFibGUgZGV0YWlscyBhYm91dCB0aGUgTUNFIGVycm9yLAorCSAqIChpZiB0aGUgQ1BVIGhhcyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhhdCk6CisJICovCisJeDg2X21jZV9kZWNvZGVfY2FsbGJhY2sobSk7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X21jZV9oZWFkKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlxuSEFSRFdBUkUgRVJST1JcbiIpOworCXByX2VtZXJnKCJcbkhBUkRXQVJFIEVSUk9SXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfbWNlX3RhaWwodm9pZCkKIHsKLQlwcmludGsoS0VSTl9FTUVSRyAiVGhpcyBpcyBub3QgYSBzb2Z0d2FyZSBwcm9ibGVtIVxuIgotI2lmICghZGVmaW5lZChDT05GSUdfRURBQykgfHwgIWRlZmluZWQoQ09ORklHX0NQVV9TVVBfQU1EKSkKLQkgICAgICAgIlJ1biB0aHJvdWdoIG1jZWxvZyAtLWFzY2lpIHRvIGRlY29kZSBhbmQgY29udGFjdCB5b3VyIGhhcmR3YXJlIHZlbmRvclxuIgotI2VuZGlmCi0JICAgICAgICk7CisJcHJfZW1lcmcoIlRoaXMgaXMgbm90IGEgc29mdHdhcmUgcHJvYmxlbSFcbiIpOwogfQogCiAjZGVmaW5lIFBBTklDX1RJTUVPVVQgNSAvKiA1IHNlY29uZHMgKi8KQEAgLTIyMSw2ICsyMzAsNyBAQAogc3RhdGljIHZvaWQgd2FpdF9mb3JfcGFuaWModm9pZCkKIHsKIAlsb25nIHRpbWVvdXQgPSBQQU5JQ19USU1FT1VUKlVTRUNfUEVSX1NFQzsKKwogCXByZWVtcHRfZGlzYWJsZSgpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAl3aGlsZSAodGltZW91dC0tID4gMCkKQEAgLTI4OCw2ICsyOTgsNyBAQAogc3RhdGljIGludCBtc3JfdG9fb2Zmc2V0KHUzMiBtc3IpCiB7CiAJdW5zaWduZWQgYmFuayA9IF9fZ2V0X2NwdV92YXIoaW5qZWN0bS5iYW5rKTsKKwogCWlmIChtc3IgPT0gcmlwX21zcikKIAkJcmV0dXJuIG9mZnNldG9mKHN0cnVjdCBtY2UsIGlwKTsKIAlpZiAobXNyID09IE1TUl9JQTMyX01DeF9TVEFUVVMoYmFuaykpCkBAIC0zMDUsMTMgKzMxNiwyNSBAQAogc3RhdGljIHU2NCBtY2VfcmRtc3JsKHUzMiBtc3IpCiB7CiAJdTY0IHY7CisKIAlpZiAoX19nZXRfY3B1X3ZhcihpbmplY3RtKS5maW5pc2hlZCkgewogCQlpbnQgb2Zmc2V0ID0gbXNyX3RvX29mZnNldChtc3IpOworCiAJCWlmIChvZmZzZXQgPCAwKQogCQkJcmV0dXJuIDA7CiAJCXJldHVybiAqKHU2NCAqKSgoY2hhciAqKSZfX2dldF9jcHVfdmFyKGluamVjdG0pICsgb2Zmc2V0KTsKIAl9Ci0JcmRtc3JsKG1zciwgdik7CisKKwlpZiAocmRtc3JsX3NhZmUobXNyLCAmdikpIHsKKwkJV0FSTl9PTkNFKDEsICJtY2U6IFVuYWJsZSB0byByZWFkIG1zciAlZCFcbiIsIG1zcik7CisJCS8qCisJCSAqIFJldHVybiB6ZXJvIGluIGNhc2UgdGhlIGFjY2VzcyBmYXVsdGVkLiBUaGlzIHNob3VsZAorCQkgKiBub3QgaGFwcGVuIG5vcm1hbGx5IGJ1dCBjYW4gaGFwcGVuIGlmIHRoZSBDUFUgZG9lcworCQkgKiBzb21ldGhpbmcgd2VpcmQsIG9yIGlmIHRoZSBjb2RlIGlzIGJ1Z2d5LgorCQkgKi8KKwkJdiA9IDA7CisJfQorCiAJcmV0dXJuIHY7CiB9CiAKQEAgLTMxOSw2ICszNDIsNyBAQAogewogCWlmIChfX2dldF9jcHVfdmFyKGluamVjdG0pLmZpbmlzaGVkKSB7CiAJCWludCBvZmZzZXQgPSBtc3JfdG9fb2Zmc2V0KG1zcik7CisKIAkJaWYgKG9mZnNldCA+PSAwKQogCQkJKih1NjQgKikoKGNoYXIgKikmX19nZXRfY3B1X3ZhcihpbmplY3RtKSArIG9mZnNldCkgPSB2OwogCQlyZXR1cm47CkBAIC00MTUsNyArNDM5LDcgQEAKIAkJbS0+aXAgPSBtY2VfcmRtc3JsKHJpcF9tc3IpOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDIAorI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogLyoKICAqIENhbGxlZCBhZnRlciBpbnRlcnJ1cHRzIGhhdmUgYmVlbiByZWVuYWJsZWQgYWdhaW4KICAqIHdoZW4gYSBNQ0UgaGFwcGVuZWQgZHVyaW5nIGFuIGludGVycnVwdHMgb2ZmIHJlZ2lvbgpAQCAtMTE3Miw2ICsxMTk2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKIAkJc3RydWN0IG1jZV9iYW5rICpiID0gJm1jZV9iYW5rc1tpXTsKKwogCQliLT5jdGwgPSAtMVVMTDsKIAkJYi0+aW5pdCA9IDE7CiAJfQpAQCAtMTE4OSw3ICsxMjE0LDggQEAKIAlyZG1zcmwoTVNSX0lBMzJfTUNHX0NBUCwgY2FwKTsKIAogCWIgPSBjYXAgJiBNQ0dfQkFOS0NOVF9NQVNLOwotCXByaW50ayhLRVJOX0lORk8gIm1jZTogQ1BVIHN1cHBvcnRzICVkIE1DRSBiYW5rc1xuIiwgYik7CisJaWYgKCFiYW5rcykKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWNlOiBDUFUgc3VwcG9ydHMgJWQgTUNFIGJhbmtzXG4iLCBiKTsKIAogCWlmIChiID4gTUFYX05SX0JBTktTKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTEyMDMsNiArMTIyOSw3IEBACiAJYmFua3MgPSBiOwogCWlmICghbWNlX2JhbmtzKSB7CiAJCWludCBlcnIgPSBtY2VfYmFua3NfaW5pdCgpOworCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTEyMzcsNiArMTI2NCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgewogCQlzdHJ1Y3QgbWNlX2JhbmsgKmIgPSAmbWNlX2JhbmtzW2ldOworCiAJCWlmICghYi0+aW5pdCkKIAkJCWNvbnRpbnVlOwogCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTChpKSwgYi0+Y3RsKTsKQEAgLTE2MjYsNiArMTY1NCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgewogCQlzdHJ1Y3QgbWNlX2JhbmsgKmIgPSAmbWNlX2JhbmtzW2ldOworCiAJCWlmIChiLT5pbml0KQogCQkJd3Jtc3JsKE1TUl9JQTMyX01DeF9DVEwoaSksIDApOwogCX0KQEAgLTE5MTEsNiArMTk0MCw3IEBACiAJCWNtY2lfY2xlYXIoKTsKIAlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgewogCQlzdHJ1Y3QgbWNlX2JhbmsgKmIgPSAmbWNlX2JhbmtzW2ldOworCiAJCWlmIChiLT5pbml0KQogCQkJd3Jtc3JsKE1TUl9JQTMyX01DeF9DVEwoaSksIDApOwogCX0KQEAgLTE5MjgsNiArMTk1OCw3IEBACiAJCWNtY2lfcmVlbmFibGUoKTsKIAlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgewogCQlzdHJ1Y3QgbWNlX2JhbmsgKmIgPSAmbWNlX2JhbmtzW2ldOworCiAJCWlmIChiLT5pbml0KQogCQkJd3Jtc3JsKE1TUl9JQTMyX01DeF9DVEwoaSksIGItPmN0bCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWwuYwppbmRleCA4ODlmNjY1Li43Yzc4NTYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWwuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwppbmRleCA2M2E1NmQxLi5iM2ExZGJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKQEAgLTM0LDIwICszNCwzMSBAQAogLyogSG93IGxvbmcgdG8gd2FpdCBiZXR3ZWVuIHJlcG9ydGluZyB0aGVybWFsIGV2ZW50cyAqLwogI2RlZmluZSBDSEVDS19JTlRFUlZBTAkJKDMwMCAqIEhaKQogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoX191NjQsIG5leHRfY2hlY2spID0gSU5JVElBTF9KSUZGSUVTOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHRoZXJtYWxfdGhyb3R0bGVfY291bnQpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHRoZXJtYWxfdGhyb3R0bGVfYWN0aXZlKTsKKy8qCisgKiBDdXJyZW50IHRoZXJtYWwgdGhyb3R0bGluZyBzdGF0ZToKKyAqLworc3RydWN0IHRoZXJtYWxfc3RhdGUgeworCWJvb2wJCQlpc190aHJvdHRsZWQ7CiAKLXN0YXRpYyBhdG9taWNfdCB0aGVybV90aHJvdF9lbgkJPSBBVE9NSUNfSU5JVCgwKTsKKwl1NjQJCQluZXh0X2NoZWNrOworCXVuc2lnbmVkIGxvbmcJCXRocm90dGxlX2NvdW50OworCXVuc2lnbmVkIGxvbmcJCWxhc3RfdGhyb3R0bGVfY291bnQ7Cit9OworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRoZXJtYWxfc3RhdGUsIHRoZXJtYWxfc3RhdGUpOworCitzdGF0aWMgYXRvbWljX3QgdGhlcm1fdGhyb3RfZW4JPSBBVE9NSUNfSU5JVCgwKTsKIAogI2lmZGVmIENPTkZJR19TWVNGUwogI2RlZmluZSBkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X29uZV9ybyhfbmFtZSkJCQkJXAogCXN0YXRpYyBTWVNERVZfQVRUUihfbmFtZSwgMDQ0NCwgdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfIyNfbmFtZSwgTlVMTCkKIAogI2RlZmluZSBkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfZnVuYyhuYW1lKQkJCVwKLXN0YXRpYyBzc2l6ZV90IHRoZXJtX3Rocm90X3N5c2Rldl9zaG93XyMjbmFtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAlcCi0JCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCSAgICAgIGNoYXIgKmJ1ZikJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHRoZXJtX3Rocm90X3N5c2Rldl9zaG93XyMjbmFtZSgJCQkJXAorCQkJc3RydWN0IHN5c19kZXZpY2UgKmRldiwJCQkJXAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCQkJXAorCQkJY2hhciAqYnVmKQkJCQkJXAogewkJCQkJCQkJCVwKIAl1bnNpZ25lZCBpbnQgY3B1ID0gZGV2LT5pZDsJCQkJCVwKIAlzc2l6ZV90IHJldDsJCQkJCQkJXApAQCAtNTUsNyArNjYsNyBAQAogCXByZWVtcHRfZGlzYWJsZSgpOwkvKiBDUFUgaG90cGx1ZyAqLwkJCVwKIAlpZiAoY3B1X29ubGluZShjcHUpKQkJCQkJCVwKIAkJcmV0ID0gc3ByaW50ZihidWYsICIlbHVcbiIsCQkJCVwKLQkJCSAgICAgIHBlcl9jcHUodGhlcm1hbF90aHJvdHRsZV8jI25hbWUsIGNwdSkpOwlcCisJCQkgICAgICBwZXJfY3B1KHRoZXJtYWxfc3RhdGUsIGNwdSkubmFtZSk7CVwKIAllbHNlCQkJCQkJCQlcCiAJCXJldCA9IDA7CQkJCQkJXAogCXByZWVtcHRfZW5hYmxlKCk7CQkJCQkJXApAQCAtNjMsMTEgKzc0LDExIEBACiAJcmV0dXJuIHJldDsJCQkJCQkJXAogfQogCi1kZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfZnVuYyhjb3VudCk7Ci1kZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X29uZV9ybyhjb3VudCk7CitkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfZnVuYyh0aHJvdHRsZV9jb3VudCk7CitkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X29uZV9ybyh0aHJvdHRsZV9jb3VudCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0aGVybWFsX3Rocm90dGxlX2F0dHJzW10gPSB7Ci0JJmF0dHJfY291bnQuYXR0ciwKKwkmYXR0cl90aHJvdHRsZV9jb3VudC5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTkzLDMzICsxMDQsMzkgQEAKICAqICAgICAgICAgIDEgOiBFdmVudCBzaG91bGQgYmUgbG9nZ2VkIGZ1cnRoZXIsIGFuZCBhIG1lc3NhZ2UgaGFzIGJlZW4KICAqICAgICAgICAgICAgICBwcmludGVkIHRvIHRoZSBzeXNsb2cuCiAgKi8KLXN0YXRpYyBpbnQgdGhlcm1fdGhyb3RfcHJvY2VzcyhpbnQgY3VycikKK3N0YXRpYyBpbnQgdGhlcm1fdGhyb3RfcHJvY2Vzcyhib29sIGlzX3Rocm90dGxlZCkKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCV9fdTY0IHRtcF9qaWZmcyA9IGdldF9qaWZmaWVzXzY0KCk7Ci0JYm9vbCB3YXNfdGhyb3R0bGVkID0gX19nZXRfY3B1X3Zhcih0aGVybWFsX3Rocm90dGxlX2FjdGl2ZSk7Ci0JYm9vbCBpc190aHJvdHRsZWQgPSBfX2dldF9jcHVfdmFyKHRoZXJtYWxfdGhyb3R0bGVfYWN0aXZlKSA9IGN1cnI7CisJc3RydWN0IHRoZXJtYWxfc3RhdGUgKnN0YXRlOworCXVuc2lnbmVkIGludCB0aGlzX2NwdTsKKwlib29sIHdhc190aHJvdHRsZWQ7CisJdTY0IG5vdzsKKworCXRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCW5vdyA9IGdldF9qaWZmaWVzXzY0KCk7CisJc3RhdGUgPSAmcGVyX2NwdSh0aGVybWFsX3N0YXRlLCB0aGlzX2NwdSk7CisKKwl3YXNfdGhyb3R0bGVkID0gc3RhdGUtPmlzX3Rocm90dGxlZDsKKwlzdGF0ZS0+aXNfdGhyb3R0bGVkID0gaXNfdGhyb3R0bGVkOwogCiAJaWYgKGlzX3Rocm90dGxlZCkKLQkJX19nZXRfY3B1X3Zhcih0aGVybWFsX3Rocm90dGxlX2NvdW50KSsrOworCQlzdGF0ZS0+dGhyb3R0bGVfY291bnQrKzsKIAotCWlmICghKHdhc190aHJvdHRsZWQgXiBpc190aHJvdHRsZWQpICYmCi0JICAgIHRpbWVfYmVmb3JlNjQodG1wX2ppZmZzLCBfX2dldF9jcHVfdmFyKG5leHRfY2hlY2spKSkKKwlpZiAodGltZV9iZWZvcmU2NChub3csIHN0YXRlLT5uZXh0X2NoZWNrKSAmJgorCQkJc3RhdGUtPnRocm90dGxlX2NvdW50ICE9IHN0YXRlLT5sYXN0X3Rocm90dGxlX2NvdW50KQogCQlyZXR1cm4gMDsKIAotCV9fZ2V0X2NwdV92YXIobmV4dF9jaGVjaykgPSB0bXBfamlmZnMgKyBDSEVDS19JTlRFUlZBTDsKKwlzdGF0ZS0+bmV4dF9jaGVjayA9IG5vdyArIENIRUNLX0lOVEVSVkFMOworCXN0YXRlLT5sYXN0X3Rocm90dGxlX2NvdW50ID0gc3RhdGUtPnRocm90dGxlX2NvdW50OwogCiAJLyogaWYgd2UganVzdCBlbnRlcmVkIHRoZSB0aGVybWFsIGV2ZW50ICovCiAJaWYgKGlzX3Rocm90dGxlZCkgewotCQlwcmludGsoS0VSTl9DUklUICJDUFUlZDogVGVtcGVyYXR1cmUgYWJvdmUgdGhyZXNob2xkLCAiCi0JCSAgICAgICAiY3B1IGNsb2NrIHRocm90dGxlZCAodG90YWwgZXZlbnRzID0gJWx1KVxuIiwKLQkJICAgICAgIGNwdSwgX19nZXRfY3B1X3Zhcih0aGVybWFsX3Rocm90dGxlX2NvdW50KSk7CisJCXByaW50ayhLRVJOX0NSSVQgIkNQVSVkOiBUZW1wZXJhdHVyZSBhYm92ZSB0aHJlc2hvbGQsIGNwdSBjbG9jayB0aHJvdHRsZWQgKHRvdGFsIGV2ZW50cyA9ICVsdSlcbiIsIHRoaXNfY3B1LCBzdGF0ZS0+dGhyb3R0bGVfY291bnQpOwogCiAJCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLKTsKIAkJcmV0dXJuIDE7CiAJfQogCWlmICh3YXNfdGhyb3R0bGVkKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNQVSVkOiBUZW1wZXJhdHVyZS9zcGVlZCBub3JtYWxcbiIsIGNwdSk7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVSVkOiBUZW1wZXJhdHVyZS9zcGVlZCBub3JtYWxcbiIsIHRoaXNfY3B1KTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0yMTMsNyArMjMwLDcgQEAKIAlfX3U2NCBtc3JfdmFsOwogCiAJcmRtc3JsKE1TUl9JQTMyX1RIRVJNX1NUQVRVUywgbXNyX3ZhbCk7Ci0JaWYgKHRoZXJtX3Rocm90X3Byb2Nlc3MobXNyX3ZhbCAmIFRIRVJNX1NUQVRVU19QUk9DSE9UKSkKKwlpZiAodGhlcm1fdGhyb3RfcHJvY2VzcygobXNyX3ZhbCAmIFRIRVJNX1NUQVRVU19QUk9DSE9UKSAhPSAwKSkKIAkJbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChtc3JfdmFsKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKaW5kZXggMzE1NzM4Yy4uNzNjODZkYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCkBAIC04NDYsNyArODQ2LDcgQEAKIAlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOwogCiAJcmFuZ2Vfc3VtcyA9IHN1bV9yYW5nZXMocmFuZ2UsIG5yX3JhbmdlKTsKLQlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJyZWQ6ICVsZE1cbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAidG90YWwgUkFNIGNvdmVyZWQ6ICVsZE1cbiIsCiAJICAgICAgIHJhbmdlX3N1bXMgPj4gKDIwIC0gUEFHRV9TSElGVCkpOwogCiAJaWYgKG10cnJfY2h1bmtfc2l6ZSAmJiBtdHJyX2dyYW5fc2l6ZSkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYwppbmRleCBmMDRlNzI1Li4zYzFiMTJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYwpAQCAtOTYsMTcgKzk2LDI0IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIGJhc2UsIHNpemU7CiAJY2hhciAqcHRyOwogCWNoYXIgbGluZVtMSU5FX1NJWkVdOworCWludCBsZW5ndGg7CiAJc2l6ZV90IGxpbmVsZW47CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07Ci0JaWYgKCFsZW4pCi0JCXJldHVybiAtRUlOVkFMOwogCiAJbWVtc2V0KGxpbmUsIDAsIExJTkVfU0laRSk7Ci0JaWYgKGxlbiA+IExJTkVfU0laRSkKLQkJbGVuID0gTElORV9TSVpFOwotCWlmIChjb3B5X2Zyb21fdXNlcihsaW5lLCBidWYsIGxlbiAtIDEpKQorCisJbGVuZ3RoID0gbGVuOworCWxlbmd0aC0tOworCisJaWYgKGxlbmd0aCA+IExJTkVfU0laRSAtIDEpCisJCWxlbmd0aCA9IExJTkVfU0laRSAtIDE7CisKKwlpZiAobGVuZ3RoIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIobGluZSwgYnVmLCBsZW5ndGgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWxpbmVsZW4gPSBzdHJsZW4obGluZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCmluZGV4IGEzYzdhZGIuLmI1ODAxYzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCkBAIC0xNzkwLDYgKzE3OTAsOSBAQAogdm9pZCBzZXRfcGVyZl9ldmVudF9wZW5kaW5nKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJaWYgKCF4ODZfcG11LmFwaWMgfHwgIXg4Nl9wbXVfaW5pdGlhbGl6ZWQoKSkKKwkJcmV0dXJuOworCiAJYXBpYy0+c2VuZF9JUElfc2VsZihMT0NBTF9QRU5ESU5HX1ZFQ1RPUik7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCmluZGV4IGY3Y2RiM2IuLmNkOTdjZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYwpAQCAtMTYsNiArMTYsMjIgQEAKIC8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwogdW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19jcmFzaGVkX3Bmbl92YWxpZCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKyNpZm5kZWYgQ09ORklHX1g4Nl9QQUUKKwkvKgorCSAqIG5vbi1QQUUga2R1bXAga2VybmVsIGV4ZWN1dGVkIGZyb20gYSBQQUUgb25lIHdpbGwgY3JvcCBoaWdoIHB0ZQorCSAqIGJpdHMgYW5kIHBva2UgdW53YW50ZWQgc3BhY2UgY291bnRpbmcgYWdhaW4gZnJvbSBhZGRyZXNzIDAsIHdlCisJICogZG9uJ3Qgd2FudCB0aGF0LiBwdGUgbXVzdCBmaXQgaW50byB1bnNpZ25lZCBsb25nLiBJbiBmYWN0IHRoZQorCSAqIHRlc3QgY2hlY2tzIGhpZ2ggMTIgYml0cyBmb3IgYmVpbmcgemVybyAocGZuIHdpbGwgYmUgc2hpZnRlZCBsZWZ0CisJICogYnkgUEFHRV9TSElGVCkuCisJICovCisJcmV0dXJuIHB0ZV9wZm4ocGZuX3B0ZShwZm4sIF9fcGdwcm90KDApKSkgPT0gcGZuOworI2Vsc2UKKwlyZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCiAvKioKICAqIGNvcHlfb2xkbWVtX3BhZ2UgLSBjb3B5IG9uZSBwYWdlIGZyb20gIm9sZG1lbSIKICAqIEBwZm46IHBhZ2UgZnJhbWUgbnVtYmVyIHRvIGJlIGNvcGllZApAQCAtNDEsNiArNTcsOSBAQAogCWlmICghY3NpemUpCiAJCXJldHVybiAwOwogCisJaWYgKCFpc19jcmFzaGVkX3Bmbl92YWxpZChwZm4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCXZhZGRyID0ga21hcF9hdG9taWNfcGZuKHBmbiwgS01fUFRFMCk7CiAKIAlpZiAoIXVzZXJidWYpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IDg1NDE5YmIuLmQxN2Q0ODIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwpAQCAtMTM3OCw4ICsxMzc4LDggQEAKIAlpZiAobWIgPCAxNikKIAkJcmV0dXJuIDEwMjQqMTAyNDsKIAotCS8qIFRvIDMyTUIgZm9yIGFueXRoaW5nIGFib3ZlIHRoYXQgKi8KLQlyZXR1cm4gMzIqMTAyNCoxMDI0OworCS8qIFRvIDY0TUIgZm9yIGFueXRoaW5nIGFib3ZlIHRoYXQgKi8KKwlyZXR1cm4gNjQqMTAyNCoxMDI0OwogfQogCiAjZGVmaW5lIE1BWF9SRVNPVVJDRV9TSVpFICgocmVzb3VyY2Vfc2l6ZV90KS0xKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDJhY2ZkM2YuLmI5YzgzMGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTE3OCw2ICsxNzgsMTEgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2NvbnNvbGVfcmVnaXN0ZXIoc3RydWN0IGNvbnNvbGUgKmNvbiwgaW50IGtlZXBfZWFybHkpCiB7CisJaWYgKGVhcmx5X2NvbnNvbGUtPmluZGV4ICE9IC0xKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIkVSUk9SOiBlYXJseXByaW50az0gJXMgYWxyZWFkeSB1c2VkXG4iLAorCQkgICAgICAgY29uLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KIAllYXJseV9jb25zb2xlID0gY29uOwogCWlmIChrZWVwX2Vhcmx5KQogCQllYXJseV9jb25zb2xlLT5mbGFncyAmPSB+Q09OX0JPT1Q7CkBAIC0yMDEsOCArMjA2LDExIEBACiAKIAl3aGlsZSAoKmJ1ZiAhPSAnXDAnKSB7CiAJCWlmICghc3RybmNtcChidWYsICJzZXJpYWwiLCA2KSkgewotCQkJZWFybHlfc2VyaWFsX2luaXQoYnVmICsgNik7CisJCQlidWYgKz0gNjsKKwkJCWVhcmx5X3NlcmlhbF9pbml0KGJ1Zik7CiAJCQllYXJseV9jb25zb2xlX3JlZ2lzdGVyKCZlYXJseV9zZXJpYWxfY29uc29sZSwga2VlcCk7CisJCQlpZiAoIXN0cm5jbXAoYnVmLCAiLHR0eVMiLCA1KSkKKwkJCQlidWYgKz0gNTsKIAkJfQogCQlpZiAoIXN0cm5jbXAoYnVmLCAidHR5UyIsIDQpKSB7CiAJCQllYXJseV9zZXJpYWxfaW5pdChidWYgKyA0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwppbmRleCBhZDViZDk4Li5jZGNmYjEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCkBAIC00NTQsOCArNDU0LDEwIEBACiAJaWYgKGFkZF9lZmlfbWVtbWFwKQogCQlkb19hZGRfZWZpX21lbW1hcCgpOwogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCXg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0gZWZpX2dldF90aW1lOwogCXg4Nl9wbGF0Zm9ybS5zZXRfd2FsbGNsb2NrID0gZWZpX3NldF9ydGNfbW1zczsKKyNlbmRpZgogCiAJLyogU2V0dXAgZm9yIEVGSSBydW50aW1lIHNlcnZpY2UgKi8KIAlyZWJvb3RfdHlwZSA9IEJPT1RfRUZJOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggMjE4YWFkNy4uMDUwYzI3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC03OSw3ICs3OSw3IEBACiAgKiBhbnkgcGFydGljdWxhciBHRFQgbGF5b3V0LCBiZWNhdXNlIHdlIGxvYWQgb3VyIG93biBhcyBzb29uIGFzIHdlCiAgKiBjYW4uCiAgKi8KLS5zZWN0aW9uIC50ZXh0LmhlYWQsImF4IixAcHJvZ2JpdHMKK19fSEVBRAogRU5UUlkoc3RhcnR1cF8zMikKIAkvKiB0ZXN0IEtFRVBfU0VHTUVOVFMgZmxhZyB0byBzZWUgaWYgdGhlIGJvb3Rsb2FkZXIgaXMgYXNraW5nCiAJCXVzIHRvIG5vdCByZWxvYWQgc2VnbWVudHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCmluZGV4IGQwYmMwYTEuLjc4MGNkOTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUwpAQCAtNDAsNyArNDAsNyBAQAogTDNfU1RBUlRfS0VSTkVMID0gcHVkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCkKIAogCS50ZXh0Ci0JLnNlY3Rpb24gLnRleHQuaGVhZAorCV9fSEVBRAogCS5jb2RlNjQKIAkuZ2xvYmwgc3RhcnR1cF82NAogc3RhcnR1cF82NDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pMzg2X2tzeW1zXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Nl9rc3ltc18zMi5jCmluZGV4IDQzY2VjNmIuLjljM2JkNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pMzg2X2tzeW1zXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2kzODZfa3N5bXNfMzIuYwpAQCAtMTAsNiArMTAsMTYgQEAKIEVYUE9SVF9TWU1CT0wobWNvdW50KTsKICNlbmRpZgogCisvKgorICogTm90ZSwgdGhpcyBpcyBhIHByb3RvdHlwZSB0byBnZXQgYXQgdGhlIHN5bWJvbCBmb3IKKyAqIHRoZSBleHBvcnQsIGJ1dCBkb250IHVzZSBpdCBmcm9tIEMgY29kZSwgaXQgaXMgdXNlZAorICogYnkgYXNzZW1ibHkgY29kZSBhbmQgaXMgbm90IHVzaW5nIEMgY2FsbGluZyBjb252ZW50aW9uIQorICovCisjaWZuZGVmIENPTkZJR19YODZfQ01QWENIRzY0CitleHRlcm4gdm9pZCBjbXB4Y2hnOGJfZW11KHZvaWQpOworRVhQT1JUX1NZTUJPTChjbXB4Y2hnOGJfZW11KTsKKyNlbmRpZgorCiAvKiBOZXR3b3JraW5nIGhlbHBlciByb3V0aW5lcy4gKi8KIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCA3NDY1NmQxLi4wNGJiZDUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC02MywxMCArNjMsMTAgQEAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOwogCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7Ci0Jc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiQ05UIik7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiUE1JIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+YXBpY19wZXJmX2lycXMpOwotCXNlcV9wcmludGYocCwgIiAgUGVyZm9ybWFuY2UgY291bnRlciBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHJpbnRmKHAsICIgIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW50ZXJydXB0c1xuIik7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiUE5EIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+YXBpY19wZW5kaW5nX2lycXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKaW5kZXggMzY2YmFhMS4uZjRjNTM4YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCkBAIC0zMTcsNiArMzE3LDEyIEBACiAJCXJldHVybiBVQ09ERV9ORk9VTkQ7CiAJfQogCisJaWYgKCoodTMyICopZmlybXdhcmUtPmRhdGEgIT0gVUNPREVfTUFHSUMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGludmFsaWQgVUNPREVfTUFHSUMgKDB4JTA4eClcbiIsCisJCSAgICAgICAqKHUzMiAqKWZpcm13YXJlLT5kYXRhKTsKKwkJcmV0dXJuIFVDT0RFX0VSUk9SOworCX0KKwogCXJldCA9IGdlbmVyaWNfbG9hZF9taWNyb2NvZGUoY3B1LCBmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUpOwogCiAJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwppbmRleCA2NGI4MzhlLi5hNmU4MDRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogLyoKICAqIFRoaXMgdmFyaWFibGUgYmVjb21lcyAxIGlmIGlvbW11PXB0IGlzIHBhc3NlZCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KLSAqIElmIHRoaXMgdmFyaWFibGUgaXMgMSwgSU9NTVUgaW1wbGVtZW50YXRpb25zIGRvIG5vIERNQSByYW5zbGF0aW9uIGZvcgorICogSWYgdGhpcyB2YXJpYWJsZSBpcyAxLCBJT01NVSBpbXBsZW1lbnRhdGlvbnMgZG8gbm8gRE1BIHRyYW5zbGF0aW9uIGZvcgogICogZGV2aWNlcyBhbmQgYWxsb3cgZXZlcnkgZGV2aWNlIHRvIGFjY2VzcyB0byB3aG9sZSBwaHlzaWNhbCBtZW1vcnkuIFRoaXMgaXMKICAqIHVzZWZ1bCBpZiBhIHVzZXIgd2FudCB0byB1c2UgYW4gSU9NTVUgb25seSBmb3IgS1ZNIGRldmljZSBhc3NpZ25tZW50IHRvCiAgKiBndWVzdHMgYW5kIG5vdCBmb3IgZHJpdmVyIGRtYSB0cmFuc2xhdGlvbi4KQEAgLTQ1LDEyICs0NSwxMCBAQAogZG1hX2FkZHJfdCBiYWRfZG1hX2FkZHJlc3MgX19yZWFkX21vc3RseSA9IDA7CiBFWFBPUlRfU1lNQk9MKGJhZF9kbWFfYWRkcmVzcyk7CiAKLS8qIER1bW15IGRldmljZSB1c2VkIGZvciBOVUxMIGFyZ3VtZW50cyAobm9ybWFsbHkgSVNBKS4gQmV0dGVyIHdvdWxkCi0gICBiZSBwcm9iYWJseSBhIHNtYWxsZXIgRE1BIG1hc2ssIGJ1dCB0aGlzIGlzIGJ1Zy10by1idWcgY29tcGF0aWJsZQotICAgdG8gb2xkZXIgaTM4Ni4gKi8KKy8qIER1bW15IGRldmljZSB1c2VkIGZvciBOVUxMIGFyZ3VtZW50cyAobm9ybWFsbHkgSVNBKS4gKi8KIHN0cnVjdCBkZXZpY2UgeDg2X2RtYV9mYWxsYmFja19kZXYgPSB7CiAJLmluaXRfbmFtZSA9ICJmYWxsYmFjayBkZXZpY2UiLAotCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJLmNvaGVyZW50X2RtYV9tYXNrID0gSVNBX0RNQV9CSVRfTUFTSywKIAkuZG1hX21hc2sgPSAmeDg2X2RtYV9mYWxsYmFja19kZXYuY29oZXJlbnRfZG1hX21hc2ssCiB9OwogRVhQT1JUX1NZTUJPTCh4ODZfZG1hX2ZhbGxiYWNrX2Rldik7CkBAIC0zMTEsNyArMzA5LDcgQEAKIAlhbWRfaW9tbXVfc2h1dGRvd24oKTsKIH0KIC8qIE11c3QgZXhlY3V0ZSBhZnRlciBQQ0kgc3Vic3lzdGVtICovCi1mc19pbml0Y2FsbChwY2lfaW9tbXVfaW5pdCk7Cityb290ZnNfaW5pdGNhbGwocGNpX2lvbW11X2luaXQpOwogCiAjaWZkZWYgQ09ORklHX1BDSQogLyogTWFueSBWSUEgYnJpZGdlcyBzZWVtIHRvIGNvcnJ1cHQgZGF0YSBmb3IgREFDLiBEaXNhYmxlIGl0IGhlcmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKaW5kZXggOThhODI3ZS4uYTdmMWI2NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGFkNTM1YjYuLmViNjJjYmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtNjY0LDMgKzY2NCw4IEBACiAJcmV0dXJuIGRvX2FyY2hfcHJjdGwoY3VycmVudCwgY29kZSwgYWRkcik7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgS1NUS19FU1Aoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiAodGVzdF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX0lBMzIpKSA/CisJCQkodGFza19wdF9yZWdzKHRhc2spLT5zcCkgOiAoKHRhc2spLT50aHJlYWQudXNlcnNwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCAyNzM0OWY5Li5mOTMwNzg3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90Ym9vdC5oPgogI2luY2x1ZGUgPGFjcGkvcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC00MzUsNiArNDM2LDE0IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81IiksCiAJCX0sCiAJfSwKKwl7CS8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBBcHBsZSBNYWNtaW5pMywxICovCisJCS5jYWxsYmFjayA9IHNldF9wY2lfcmVib290LAorCQkuaWRlbnQgPSAiQXBwbGUgTWFjbWluaTMsMSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNtaW5pMywxIiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggZTA5ZjBlMi4uMmEzNGY5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTY2MCw2ICs2NjAsMTMgQEAKIAkJfSwKIAl9LAogCXsKKwkJLmNhbGxiYWNrID0gZG1pX2xvd19tZW1vcnlfY29ycnVwdGlvbiwKKwkJLmlkZW50ID0gIlBob2VuaXgvTVNDIEJJT1MiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJQaG9lbml4L01TQyIpLAorCQl9LAorCX0sCisJewogCS8qCiAJICogQU1JIEJJT1Mgd2l0aCBsb3cgbWVtb3J5IGNvcnJ1cHRpb24gd2FzIGZvdW5kIG9uIEludGVsIERHNDVJRCBib2FyZC4KIAkgKiBJdCBoYXNlIGRpZmZlcmVudCBETUlfQklPU19WRU5ET1IgPSAiSW50ZWwgQ29ycC4iLCBmb3Igbm93IHdlIHdpbGwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCmluZGV4IGRjYjAwZDIuLmJlMjU3MzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RpbWUuYwpAQCAtMzgsNyArMzgsOCBAQAogI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCiAJCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKikocmVncy0+YnAgKyBzaXplb2YobG9uZykpOwogI2Vsc2UKLQkJdW5zaWduZWQgbG9uZyAqc3AgPSAodW5zaWduZWQgbG9uZyAqKXJlZ3MtPnNwOworCQl1bnNpZ25lZCBsb25nICpzcCA9CisJCQkodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOwogCQkvKgogCQkgKiBSZXR1cm4gYWRkcmVzcyBpcyBlaXRoZXIgZGlyZWN0bHkgYXQgc3RhY2sgcG9pbnRlcgogCQkgKiBvciBhYm92ZSBhIHNhdmVkIGZsYWdzLiBFZmxhZ3MgaGFzIGJpdHMgMjItMzEgemVybywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwppbmRleCA1MDNjMWYyLi4xNzQwYzg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCkBAIC0yMyw4ICsyMyw2IEBACiBzdGF0aWMgc3RydWN0IGJhdV9jb250cm9sCSoqdXZfYmF1X3RhYmxlX2Jhc2VzIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgaW50CQkJdXZfYmF1X3JldHJ5X2xpbWl0IF9fcmVhZF9tb3N0bHk7CiAKLS8qIHBvc2l0aW9uIG9mIHBub2RlICh3aGljaCBpcyBuYXNpZD4+MSk6ICovCi1zdGF0aWMgaW50CQkJdXZfbnNoaWZ0IF9fcmVhZF9tb3N0bHk7CiAvKiBiYXNlIHBub2RlIGluIHRoaXMgcGFydGl0aW9uICovCiBzdGF0aWMgaW50CQkJdXZfcGFydGl0aW9uX2Jhc2VfcG5vZGUgX19yZWFkX21vc3RseTsKIApAQCAtNzIzLDcgKzcyMSw3IEBACiAJQlVHX09OKCFhZHApOwogCiAJcGEgPSB1dl9ncGEoYWRwKTsgLyogbmVlZCB0aGUgcmVhbCBuYXNpZCovCi0JbiA9IHBhID4+IHV2X25zaGlmdDsKKwluID0gdXZfZ3BhX3RvX3Bub2RlKHBhKTsKIAltID0gcGEgJiB1dl9tbWFzazsKIAogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0xCX0JBVV9TQl9ERVNDUklQVE9SX0JBU0UsCkBAIC03NzgsNyArNzc2LDcgQEAKIAkgKiBuZWVkIHRoZSBwbm9kZSBvZiB3aGVyZSB0aGUgbWVtb3J5IHdhcyByZWFsbHkgYWxsb2NhdGVkCiAJICovCiAJcGEgPSB1dl9ncGEocHFwKTsKLQlwbiA9IHBhID4+IHV2X25zaGlmdDsKKwlwbiA9IHV2X2dwYV90b19wbm9kZShwYSk7CiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLAogCQkJICAgICAgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfRklSU1QsCiAJCQkgICAgICAoKHVuc2lnbmVkIGxvbmcpcG4gPDwgVVZfUEFZTE9BRFFfUE5PREVfU0hJRlQpIHwKQEAgLTg0Myw4ICs4NDEsNyBAQAogCQkJCSAgICAgICBHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShjdXJfY3B1KSk7CiAKIAl1dl9iYXVfcmV0cnlfbGltaXQgPSAxOwotCXV2X25zaGlmdCA9IHV2X2h1Yl9pbmZvLT5uX3ZhbDsKLQl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm5fdmFsKSAtIDE7CisJdXZfbW1hc2sgPSAoMVVMIDw8IHV2X2h1Yl9pbmZvLT5tX3ZhbCkgLSAxOwogCW5ibGFkZXMgPSB1dl9udW1fcG9zc2libGVfYmxhZGVzKCk7CiAKIAl1dl9iYXVfdGFibGVfYmFzZXMgPSAoc3RydWN0IGJhdV9jb250cm9sICoqKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMKaW5kZXggNjk5ZjdlZS4uY2QwMjIxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jCkBAIC0zLDggKzMsMTYgQEAKICNpbmNsdWRlIDxhc20vdHJhbXBvbGluZS5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmIGRlZmluZWQoQ09ORklHX0FDUElfU0xFRVApCisjZGVmaW5lIF9fdHJhbXBpbml0CisjZGVmaW5lIF9fdHJhbXBpbml0ZGF0YQorI2Vsc2UKKyNkZWZpbmUgX190cmFtcGluaXQgX19jcHVpbml0CisjZGVmaW5lIF9fdHJhbXBpbml0ZGF0YSBfX2NwdWluaXRkYXRhCisjZW5kaWYKKwogLyogcmVhZHkgZm9yIHg4Nl82NCBhbmQgeDg2ICovCi11bnNpZ25lZCBjaGFyICpfX2NwdWluaXRkYXRhIHRyYW1wb2xpbmVfYmFzZSA9IF9fdmEoVFJBTVBPTElORV9CQVNFKTsKK3Vuc2lnbmVkIGNoYXIgKl9fdHJhbXBpbml0ZGF0YSB0cmFtcG9saW5lX2Jhc2UgPSBfX3ZhKFRSQU1QT0xJTkVfQkFTRSk7CiAKIHZvaWQgX19pbml0IHJlc2VydmVfdHJhbXBvbGluZV9tZW1vcnkodm9pZCkKIHsKQEAgLTI2LDcgKzM0LDcgQEAKICAqIGJvb3RzdHJhcCBpbnRvIHRoZSBwYWdlIGNvbmNlcm5lZC4gVGhlIGNhbGxlcgogICogaGFzIG1hZGUgc3VyZSBpdCdzIHN1aXRhYmx5IGFsaWduZWQuCiAgKi8KLXVuc2lnbmVkIGxvbmcgX19jcHVpbml0IHNldHVwX3RyYW1wb2xpbmUodm9pZCkKK3Vuc2lnbmVkIGxvbmcgX190cmFtcGluaXQgc2V0dXBfdHJhbXBvbGluZSh2b2lkKQogewogCW1lbWNweSh0cmFtcG9saW5lX2Jhc2UsIHRyYW1wb2xpbmVfZGF0YSwgVFJBTVBPTElORV9TSVpFKTsKIAlyZXR1cm4gdmlydF90b19waHlzKHRyYW1wb2xpbmVfYmFzZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwppbmRleCA1OTZkNTRjLi4zYWYyZGZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKQEAgLTMyLDggKzMyLDEyIEBACiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAKKyNpZmRlZiBDT05GSUdfQUNQSV9TTEVFUAorLnNlY3Rpb24gLnJvZGF0YSwgImEiLCBAcHJvZ2JpdHMKKyNlbHNlCiAvKiBXZSBjYW4gZnJlZSB1cCB0aGUgdHJhbXBvbGluZSBhZnRlciBib290dXAgaWYgY3B1IGhvdHBsdWcgaXMgbm90IHN1cHBvcnRlZC4gKi8KIF9fQ1BVSU5JVFJPREFUQQorI2VuZGlmCiAuY29kZTE2CiAKIEVOVFJZKHRyYW1wb2xpbmVfZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggYTY2NWM3MS4uN2UzN2RjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTcyLDExICs3Miw5IEBACiAKIC8qCiAgKiBUaGUgSURUIGhhcyB0byBiZSBwYWdlLWFsaWduZWQgdG8gc2ltcGxpZnkgdGhlIFBlbnRpdW0KLSAqIEYwIDBGIGJ1ZyB3b3JrYXJvdW5kLi4gV2UgaGF2ZSBhIHNwZWNpYWwgbGluayBzZWdtZW50Ci0gKiBmb3IgdGhpcy4KKyAqIEYwIDBGIGJ1ZyB3b3JrYXJvdW5kLgogICovCi1nYXRlX2Rlc2MgaWR0X3RhYmxlW05SX1ZFQ1RPUlNdCi0JX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLmlkdCIpKSkgPSB7IHsgeyB7IDAsIDAgfSB9IH0sIH07CitnYXRlX2Rlc2MgaWR0X3RhYmxlW05SX1ZFQ1RPUlNdIF9fcGFnZV9hbGlnbmVkX2RhdGEgPSB7IHsgeyB7IDAsIDAgfSB9IH0sIH07CiAjZW5kaWYKIAogREVDTEFSRV9CSVRNQVAodXNlZF92ZWN0b3JzLCBOUl9WRUNUT1JTKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2Nfc3luYy5jIGIvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKaW5kZXggMDI3YjViNC4uZjM3OTMwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSkpIHsKLQkJcHJfaW5mbygiU2tpcHBpbmcgc3luY2hyb25pemF0aW9uIGNoZWNrcyBhcyBUU0MgaXMgcmVsaWFibGUuXG4iKTsKKwkJcHJpbnRrX29uY2UoS0VSTl9JTkZPICJTa2lwcGluZyBzeW5jaHJvbml6YXRpb24gY2hlY2tzIGFzIFRTQyBpcyByZWxpYWJsZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKaW5kZXggMzFlNmY2Yy4uZDQzMGU0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAKIAlwdl9pbmZvLnBhcmF2aXJ0X2VuYWJsZWQgPSAxOwogCXB2X2luZm8ua2VybmVsX3JwbCA9IGtlcm5lbF9jcyAmIFNFR01FTlRfUlBMX01BU0s7Ci0JcHZfaW5mby5uYW1lID0gInZtaSI7CisJcHZfaW5mby5uYW1lID0gInZtaSBbZGVwcmVjYXRlZF0iOwogCiAJcHZfaW5pdF9vcHMucGF0Y2ggPSB2bWlfcGF0Y2g7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYTQ2YWNjYy4uM2M2OGZlMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTY1LDE3ICs2NSwxMSBAQAogI2VuZGlmCiAKIAkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLwotCi0JLyogYm9vdHN0cmFwcGluZyBjb2RlICovCi0JLnRleHQuaGVhZCA6IEFUKEFERFIoLnRleHQuaGVhZCkgLSBMT0FEX09GRlNFVCkgewotCQlfdGV4dCA9IC47Ci0JCSooLnRleHQuaGVhZCkKLQl9IDp0ZXh0ID0gMHg5MDkwCi0KLQkvKiBUaGUgcmVzdCBvZiB0aGUgdGV4dCAqLwogCS50ZXh0IDogIEFUKEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKKwkJX3RleHQgPSAuOworCQkvKiBib290c3RyYXBwaW5nIGNvZGUgKi8KKwkJSEVBRF9URVhUCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCQkvKiBub3QgcmVhbGx5IG5lZWRlZCwgYWxyZWFkeSBwYWdlIGFsaWduZWQgKi8KIAkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJCSooLnRleHQucGFnZV9hbGlnbmVkKQogI2VuZGlmCkBAIC05NCwxMyArODgsNyBAQAogCiAJTk9URVMgOnRleHQgOm5vdGUKIAotCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLwotCS4gPSBBTElHTigxNik7Ci0JX19leF90YWJsZSA6IEFUKEFERFIoX19leF90YWJsZSkgLSBMT0FEX09GRlNFVCkgewotCQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCQkqKF9fZXhfdGFibGUpCi0JCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQl9IDp0ZXh0ID0gMHg5MDkwCisJRVhDRVBUSU9OX1RBQkxFKDE2KSA6dGV4dCA9IDB4OTA5MAogCiAJUk9fREFUQShQQUdFX1NJWkUpCiAKQEAgLTExOCw3ICsxMDYsNiBAQAogI2VuZGlmCiAKIAkJUEFHRV9BTElHTkVEX0RBVEEoUEFHRV9TSVpFKQotCQkqKC5kYXRhLmlkdCkKIAogCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKENPTkZJR19YODZfTDFfQ0FDSEVfQllURVMpCiAKQEAgLTEzNSwyNCArMTIyLDIxIEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCiAjZGVmaW5lIFZTWVNDQUxMX0FERFIgKC0xMCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZTWVNDQUxMX1BIWVNfQUREUiAoKExPQURBRERSKC5kYXRhKSArIFNJWkVPRiguZGF0YSkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9TSVpFIC0gMSkgJiB+KFBBR0VfU0laRSAtIDEpKQotI2RlZmluZSBWU1lTQ0FMTF9WSVJUX0FERFIgKChBRERSKC5kYXRhKSArIFNJWkVPRiguZGF0YSkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9TSVpFIC0gMSkgJiB+KFBBR0VfU0laRSAtIDEpKQogCi0jZGVmaW5lIFZMT0FEX09GRlNFVCAoVlNZU0NBTExfQUREUiAtIFZTWVNDQUxMX1BIWVNfQUREUikKKyNkZWZpbmUgVkxPQURfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gX192c3lzY2FsbF8wICsgTE9BRF9PRkZTRVQpCiAjZGVmaW5lIFZMT0FEKHgpIChBRERSKHgpIC0gVkxPQURfT0ZGU0VUKQogCi0jZGVmaW5lIFZWSVJUX09GRlNFVCAoVlNZU0NBTExfQUREUiAtIFZTWVNDQUxMX1ZJUlRfQUREUikKKyNkZWZpbmUgVlZJUlRfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gX192c3lzY2FsbF8wKQogI2RlZmluZSBWVklSVCh4KSAoQUREUih4KSAtIFZWSVJUX09GRlNFVCkKIAorCS4gPSBBTElHTig0MDk2KTsKKwlfX3ZzeXNjYWxsXzAgPSAuOworCiAJLiA9IFZTWVNDQUxMX0FERFI7Ci0JLnZzeXNjYWxsXzAgOiBBVChWU1lTQ0FMTF9QSFlTX0FERFIpIHsKKwkudnN5c2NhbGxfMCA6IEFUKFZMT0FEKC52c3lzY2FsbF8wKSkgewogCQkqKC52c3lzY2FsbF8wKQogCX0gOnVzZXIKIAotCV9fdnN5c2NhbGxfMCA9IFZTWVNDQUxMX1ZJUlRfQUREUjsKLQogCS4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKIAkudnN5c2NhbGxfZm4gOiBBVChWTE9BRCgudnN5c2NhbGxfZm4pKSB7CiAJCSooLnZzeXNjYWxsX2ZuKQpAQCAtMTkyLDExICsxNzYsOSBAQAogCQkqKC52c3lzY2FsbF8zKQogCX0KIAotCS4gPSBWU1lTQ0FMTF9WSVJUX0FERFIgKyBQQUdFX1NJWkU7CisJLiA9IF9fdnN5c2NhbGxfMCArIFBBR0VfU0laRTsKIAogI3VuZGVmIFZTWVNDQUxMX0FERFIKLSN1bmRlZiBWU1lTQ0FMTF9QSFlTX0FERFIKLSN1bmRlZiBWU1lTQ0FMTF9WSVJUX0FERFIKICN1bmRlZiBWTE9BRF9PRkZTRVQKICN1bmRlZiBWTE9BRAogI3VuZGVmIFZWSVJUX09GRlNFVApAQCAtMjE5LDM2ICsyMDEsMTIgQEAKIAlQRVJDUFVfVkFERFIoMCwgOnBlcmNwdSkKICNlbmRpZgogCi0JLmluaXQudGV4dCA6IEFUKEFERFIoLmluaXQudGV4dCkgLSBMT0FEX09GRlNFVCkgewotCQlfc2luaXR0ZXh0ID0gLjsKLQkJSU5JVF9URVhUCi0JCV9laW5pdHRleHQgPSAuOwotCX0KKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCTppbml0CiAjZW5kaWYKIAotCS5pbml0LmRhdGEgOiBBVChBRERSKC5pbml0LmRhdGEpIC0gTE9BRF9PRkZTRVQpIHsKLQkJSU5JVF9EQVRBCi0JfQotCi0JLiA9IEFMSUdOKDE2KTsKLQkuaW5pdC5zZXR1cCA6IEFUKEFERFIoLmluaXQuc2V0dXApIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19zZXR1cF9zdGFydCA9IC47Ci0JCSooLmluaXQuc2V0dXApCi0JCV9fc2V0dXBfZW5kID0gLjsKLQl9Ci0JLmluaXRjYWxsLmluaXQgOiBBVChBRERSKC5pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQkJX19pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQotCS5jb25faW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmNvbl9pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47Ci0JfQorCUlOSVRfREFUQV9TRUNUSU9OKDE2KQogCiAJLng4Nl9jcHVfZGV2LmluaXQgOiBBVChBRERSKC54ODZfY3B1X2Rldi5pbml0KSAtIExPQURfT0ZGU0VUKSB7CiAJCV9feDg2X2NwdV9kZXZfc3RhcnQgPSAuOwpAQCAtMjU2LDggKzIxNCw2IEBACiAJCV9feDg2X2NwdV9kZXZfZW5kID0gLjsKIAl9CiAKLQlTRUNVUklUWV9JTklUCi0KIAkuID0gQUxJR04oOCk7CiAJLnBhcmFpbnN0cnVjdGlvbnMgOiBBVChBRERSKC5wYXJhaW5zdHJ1Y3Rpb25zKSAtIExPQURfT0ZGU0VUKSB7CiAJCV9fcGFyYWluc3RydWN0aW9ucyA9IC47CkBAIC0yODgsMTUgKzI0NCw2IEBACiAJCUVYSVRfREFUQQogCX0KIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCS5pbml0LnJhbWZzIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkgewotCQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCV9faW5pdHJhbWZzX2VuZCA9IC47Ci0JfQotI2VuZGlmCi0KICNpZiAhZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCAhZGVmaW5lZChDT05GSUdfU01QKQogCVBFUkNQVShQQUdFX1NJWkUpCiAjZW5kaWYKQEAgLTM1OCw2ICszMDUsOSBAQAogCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKyAqLwogLiA9IEFTU0VSVCgoX2VuZCAtIExPQURfT0ZGU0VUIDw9IEtFUk5FTF9JTUFHRV9TSVpFKSwKIAkgICAia2VybmVsIGltYWdlIGJpZ2dlciB0aGFuIEtFUk5FTF9JTUFHRV9TSVpFIik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCA4MmFkNTIzLi4xNDRlN2Y2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJICogaXRzZWxmIHdpdGggdGhlIGluaXRpYWwgY291bnQgYW5kIGNvbnRpbnVlcyBjb3VudGluZwogCSAqIGZyb20gdGhlcmUuCiAJICovCi0JcmVtYWluaW5nID0gaHJ0aW1lcl9leHBpcmVzX3JlbWFpbmluZygmcHMtPnBpdF90aW1lci50aW1lcik7CisJcmVtYWluaW5nID0gaHJ0aW1lcl9nZXRfcmVtYWluaW5nKCZwcy0+cGl0X3RpbWVyLnRpbWVyKTsKIAllbGFwc2VkID0gcHMtPnBpdF90aW1lci5wZXJpb2QgLSBrdGltZV90b19ucyhyZW1haW5pbmcpOwogCWVsYXBzZWQgPSBtb2RfNjQoZWxhcHNlZCwgcHMtPnBpdF90aW1lci5wZXJpb2QpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCmluZGV4IDFhZTVjZWIuLjIzYzIxNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9sYXBpYy5jCisrKyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCkBAIC01MjEsNyArNTIxLDcgQEAKIAlpZiAoYXBpY19nZXRfcmVnKGFwaWMsIEFQSUNfVE1JQ1QpID09IDApCiAJCXJldHVybiAwOwogCi0JcmVtYWluaW5nID0gaHJ0aW1lcl9leHBpcmVzX3JlbWFpbmluZygmYXBpYy0+bGFwaWNfdGltZXIudGltZXIpOworCXJlbWFpbmluZyA9IGhydGltZXJfZ2V0X3JlbWFpbmluZygmYXBpYy0+bGFwaWNfdGltZXIudGltZXIpOwogCWlmIChrdGltZV90b19ucyhyZW1haW5pbmcpIDwgMCkKIAkJcmVtYWluaW5nID0ga3RpbWVfc2V0KDAsIDApOwogCkBAIC02NjQsNyArNjY0LDcgQEAKIHsKIAlrdGltZV90IG5vdyA9IGFwaWMtPmxhcGljX3RpbWVyLnRpbWVyLmJhc2UtPmdldF90aW1lKCk7CiAKLQlhcGljLT5sYXBpY190aW1lci5wZXJpb2QgPSBhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCkgKgorCWFwaWMtPmxhcGljX3RpbWVyLnBlcmlvZCA9ICh1NjQpYXBpY19nZXRfcmVnKGFwaWMsIEFQSUNfVE1JQ1QpICoKIAkJICAgIEFQSUNfQlVTX0NZQ0xFX05TICogYXBpYy0+ZGl2aWRlX2NvdW50OwogCWF0b21pY19zZXQoJmFwaWMtPmxhcGljX3RpbWVyLnBlbmRpbmcsIDApOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11LmMKaW5kZXggZWNhNDFhZS4uODE4YjkyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS5jCisrKyBiL2FyY2gveDg2L2t2bS9tbXUuYwpAQCAtMTU2LDYgKzE1Niw4IEBACiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlICJtbXV0cmFjZS5oIgogCisjZGVmaW5lIFNQVEVfSE9TVF9XUklURUFCTEUgKDFVTEwgPDwgUFRfRklSU1RfQVZBSUxfQklUU19TSElGVCkKKwogI2RlZmluZSBTSEFET1dfUFRfSU5ERVgoYWRkciwgbGV2ZWwpIFBUNjRfSU5ERVgoYWRkciwgbGV2ZWwpCiAKIHN0cnVjdCBrdm1fcm1hcF9kZXNjIHsKQEAgLTYzNCw5ICs2MzYsNyBAQAogCWlmICgqc3B0ZSAmIHNoYWRvd19hY2Nlc3NlZF9tYXNrKQogCQlrdm1fc2V0X3Bmbl9hY2Nlc3NlZChwZm4pOwogCWlmIChpc193cml0ZWJsZV9wdGUoKnNwdGUpKQotCQlrdm1fcmVsZWFzZV9wZm5fZGlydHkocGZuKTsKLQllbHNlCi0JCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOworCQlrdm1fc2V0X3Bmbl9kaXJ0eShwZm4pOwogCXJtYXBwID0gZ2ZuX3RvX3JtYXAoa3ZtLCBzcC0+Z2Zuc1tzcHRlIC0gc3AtPnNwdF0sIHNwLT5yb2xlLmxldmVsKTsKIAlpZiAoISpybWFwcCkgewogCQlwcmludGsoS0VSTl9FUlIgInJtYXBfcmVtb3ZlOiAlcCAlbGx4IDAtPkJVR1xuIiwgc3B0ZSwgKnNwdGUpOwpAQCAtNzQ4LDcgKzc0OCw4IEBACiAJcmV0dXJuIHdyaXRlX3Byb3RlY3RlZDsKIH0KIAotc3RhdGljIGludCBrdm1fdW5tYXBfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCkKK3N0YXRpYyBpbnQga3ZtX3VubWFwX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkgICB1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJdTY0ICpzcHRlOwogCWludCBuZWVkX3RsYl9mbHVzaCA9IDA7CkBAIC03NjMsOCArNzY0LDQ3IEBACiAJcmV0dXJuIG5lZWRfdGxiX2ZsdXNoOwogfQogCitzdGF0aWMgaW50IGt2bV9zZXRfcHRlX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlpbnQgbmVlZF9mbHVzaCA9IDA7CisJdTY0ICpzcHRlLCBuZXdfc3B0ZTsKKwlwdGVfdCAqcHRlcCA9IChwdGVfdCAqKWRhdGE7CisJcGZuX3QgbmV3X3BmbjsKKworCVdBUk5fT04ocHRlX2h1Z2UoKnB0ZXApKTsKKwluZXdfcGZuID0gcHRlX3BmbigqcHRlcCk7CisJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBOVUxMKTsKKwl3aGlsZSAoc3B0ZSkgeworCQlCVUdfT04oIWlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZSkpOworCQlybWFwX3ByaW50aygia3ZtX3NldF9wdGVfcm1hcHA6IHNwdGUgJXAgJWxseFxuIiwgc3B0ZSwgKnNwdGUpOworCQluZWVkX2ZsdXNoID0gMTsKKwkJaWYgKHB0ZV93cml0ZSgqcHRlcCkpIHsKKwkJCXJtYXBfcmVtb3ZlKGt2bSwgc3B0ZSk7CisJCQlfX3NldF9zcHRlKHNwdGUsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJCXNwdGUgPSBybWFwX25leHQoa3ZtLCBybWFwcCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQluZXdfc3B0ZSA9ICpzcHRlICZ+IChQVDY0X0JBU0VfQUREUl9NQVNLKTsKKwkJCW5ld19zcHRlIHw9ICh1NjQpbmV3X3BmbiA8PCBQQUdFX1NISUZUOworCisJCQluZXdfc3B0ZSAmPSB+UFRfV1JJVEFCTEVfTUFTSzsKKwkJCW5ld19zcHRlICY9IH5TUFRFX0hPU1RfV1JJVEVBQkxFOworCQkJaWYgKGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZSkpCisJCQkJa3ZtX3NldF9wZm5fZGlydHkoc3B0ZV90b19wZm4oKnNwdGUpKTsKKwkJCV9fc2V0X3NwdGUoc3B0ZSwgbmV3X3NwdGUpOworCQkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBzcHRlKTsKKwkJfQorCX0KKwlpZiAobmVlZF9mbHVzaCkKKwkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBrdm1faGFuZGxlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhLAotCQkJICBpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwKSkKKwkJCSAgdW5zaWduZWQgbG9uZyBkYXRhLAorCQkJICBpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLAorCQkJCQkgdW5zaWduZWQgbG9uZyBkYXRhKSkKIHsKIAlpbnQgaSwgajsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTc4NiwxMyArODI2LDE1IEBACiAJCWlmIChodmEgPj0gc3RhcnQgJiYgaHZhIDwgZW5kKSB7CiAJCQlnZm5fdCBnZm5fb2Zmc2V0ID0gKGh2YSAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUOwogCi0JCQlyZXR2YWwgfD0gaGFuZGxlcihrdm0sICZtZW1zbG90LT5ybWFwW2dmbl9vZmZzZXRdKTsKKwkJCXJldHZhbCB8PSBoYW5kbGVyKGt2bSwgJm1lbXNsb3QtPnJtYXBbZ2ZuX29mZnNldF0sCisJCQkJCSAgZGF0YSk7CiAKIAkJCWZvciAoaiA9IDA7IGogPCBLVk1fTlJfUEFHRV9TSVpFUyAtIDE7ICsraikgewogCQkJCWludCBpZHggPSBnZm5fb2Zmc2V0OwogCQkJCWlkeCAvPSBLVk1fUEFHRVNfUEVSX0hQQUdFKFBUX0RJUkVDVE9SWV9MRVZFTCArIGopOwogCQkJCXJldHZhbCB8PSBoYW5kbGVyKGt2bSwKLQkJCQkJJm1lbXNsb3QtPmxwYWdlX2luZm9bal1baWR4XS5ybWFwX3BkZSk7CisJCQkJCSZtZW1zbG90LT5scGFnZV9pbmZvW2pdW2lkeF0ucm1hcF9wZGUsCisJCQkJCWRhdGEpOwogCQkJfQogCQl9CiAJfQpAQCAtODAyLDEwICs4NDQsMTYgQEAKIAogaW50IGt2bV91bm1hcF9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSkKIHsKLQlyZXR1cm4ga3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsIGt2bV91bm1hcF9ybWFwcCk7CisJcmV0dXJuIGt2bV9oYW5kbGVfaHZhKGt2bSwgaHZhLCAwLCBrdm1fdW5tYXBfcm1hcHApOwogfQogCi1zdGF0aWMgaW50IGt2bV9hZ2Vfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCkKK3ZvaWQga3ZtX3NldF9zcHRlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhLCBwdGVfdCBwdGUpCit7CisJa3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsICh1bnNpZ25lZCBsb25nKSZwdGUsIGt2bV9zZXRfcHRlX3JtYXBwKTsKK30KKworc3RhdGljIGludCBrdm1fYWdlX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkgdW5zaWduZWQgbG9uZyBkYXRhKQogewogCXU2NCAqc3B0ZTsKIAlpbnQgeW91bmcgPSAwOwpAQCAtODQxLDEzICs4ODksMTMgQEAKIAlnZm4gPSB1bmFsaWFzX2dmbih2Y3B1LT5rdm0sIGdmbik7CiAJcm1hcHAgPSBnZm5fdG9fcm1hcCh2Y3B1LT5rdm0sIGdmbiwgc3AtPnJvbGUubGV2ZWwpOwogCi0Ja3ZtX3VubWFwX3JtYXBwKHZjcHUtPmt2bSwgcm1hcHApOworCWt2bV91bm1hcF9ybWFwcCh2Y3B1LT5rdm0sIHJtYXBwLCAwKTsKIAlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKIH0KIAogaW50IGt2bV9hZ2VfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEpCiB7Ci0JcmV0dXJuIGt2bV9oYW5kbGVfaHZhKGt2bSwgaHZhLCBrdm1fYWdlX3JtYXBwKTsKKwlyZXR1cm4ga3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsIDAsIGt2bV9hZ2Vfcm1hcHApOwogfQogCiAjaWZkZWYgTU1VX0RFQlVHCkBAIC0xNzU2LDcgKzE4MDQsNyBAQAogCQkgICAgdW5zaWduZWQgcHRlX2FjY2VzcywgaW50IHVzZXJfZmF1bHQsCiAJCSAgICBpbnQgd3JpdGVfZmF1bHQsIGludCBkaXJ0eSwgaW50IGxldmVsLAogCQkgICAgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4sIGJvb2wgc3BlY3VsYXRpdmUsCi0JCSAgICBib29sIGNhbl91bnN5bmMpCisJCSAgICBib29sIGNhbl91bnN5bmMsIGJvb2wgcmVzZXRfaG9zdF9wcm90ZWN0aW9uKQogewogCXU2NCBzcHRlOwogCWludCByZXQgPSAwOwpAQCAtMTc4Myw2ICsxODMxLDkgQEAKIAkJc3B0ZSB8PSBrdm1feDg2X29wcy0+Z2V0X210X21hc2sodmNwdSwgZ2ZuLAogCQkJa3ZtX2lzX21taW9fcGZuKHBmbikpOwogCisJaWYgKHJlc2V0X2hvc3RfcHJvdGVjdGlvbikKKwkJc3B0ZSB8PSBTUFRFX0hPU1RfV1JJVEVBQkxFOworCiAJc3B0ZSB8PSAodTY0KXBmbiA8PCBQQUdFX1NISUZUOwogCiAJaWYgKChwdGVfYWNjZXNzICYgQUNDX1dSSVRFX01BU0spCkBAIC0xODI4LDcgKzE4NzksOCBAQAogCQkJIHVuc2lnbmVkIHB0X2FjY2VzcywgdW5zaWduZWQgcHRlX2FjY2VzcywKIAkJCSBpbnQgdXNlcl9mYXVsdCwgaW50IHdyaXRlX2ZhdWx0LCBpbnQgZGlydHksCiAJCQkgaW50ICpwdHdyaXRlLCBpbnQgbGV2ZWwsIGdmbl90IGdmbiwKLQkJCSBwZm5fdCBwZm4sIGJvb2wgc3BlY3VsYXRpdmUpCisJCQkgcGZuX3QgcGZuLCBib29sIHNwZWN1bGF0aXZlLAorCQkJIGJvb2wgcmVzZXRfaG9zdF9wcm90ZWN0aW9uKQogewogCWludCB3YXNfcm1hcHBlZCA9IDA7CiAJaW50IHdhc193cml0ZWJsZSA9IGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZXApOwpAQCAtMTg2MCw3ICsxOTEyLDggQEAKIAl9CiAKIAlpZiAoc2V0X3NwdGUodmNwdSwgc3B0ZXAsIHB0ZV9hY2Nlc3MsIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAotCQkgICAgICBkaXJ0eSwgbGV2ZWwsIGdmbiwgcGZuLCBzcGVjdWxhdGl2ZSwgdHJ1ZSkpIHsKKwkJICAgICAgZGlydHksIGxldmVsLCBnZm4sIHBmbiwgc3BlY3VsYXRpdmUsIHRydWUsCisJCSAgICAgIHJlc2V0X2hvc3RfcHJvdGVjdGlvbikpIHsKIAkJaWYgKHdyaXRlX2ZhdWx0KQogCQkJKnB0d3JpdGUgPSAxOwogCQlrdm1feDg2X29wcy0+dGxiX2ZsdXNoKHZjcHUpOwpAQCAtMTg3Nyw4ICsxOTMwLDcgQEAKIAlwYWdlX2hlYWRlcl91cGRhdGVfc2xvdCh2Y3B1LT5rdm0sIHNwdGVwLCBnZm4pOwogCWlmICghd2FzX3JtYXBwZWQpIHsKIAkJcm1hcF9jb3VudCA9IHJtYXBfYWRkKHZjcHUsIHNwdGVwLCBnZm4pOwotCQlpZiAoIWlzX3JtYXBfc3B0ZSgqc3B0ZXApKQotCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOwogCQlpZiAocm1hcF9jb3VudCA+IFJNQVBfUkVDWUNMRV9USFJFU0hPTEQpCiAJCQlybWFwX3JlY3ljbGUodmNwdSwgc3B0ZXAsIGdmbik7CiAJfSBlbHNlIHsKQEAgLTE5MDksNyArMTk2MSw3IEBACiAJCWlmIChpdGVyYXRvci5sZXZlbCA9PSBsZXZlbCkgewogCQkJbW11X3NldF9zcHRlKHZjcHUsIGl0ZXJhdG9yLnNwdGVwLCBBQ0NfQUxMLCBBQ0NfQUxMLAogCQkJCSAgICAgMCwgd3JpdGUsIDEsICZwdF93cml0ZSwKLQkJCQkgICAgIGxldmVsLCBnZm4sIHBmbiwgZmFsc2UpOworCQkJCSAgICAgbGV2ZWwsIGdmbiwgcGZuLCBmYWxzZSwgdHJ1ZSk7CiAJCQkrK3ZjcHUtPnN0YXQucGZfZml4ZWQ7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmggYi9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaAppbmRleCBkMmZlYzljLi43MjU1OGY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaAorKysgYi9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaApAQCAtMjczLDkgKzI3MywxMyBAQAogCWlmIChtbXVfbm90aWZpZXJfcmV0cnkodmNwdSwgdmNwdS0+YXJjaC51cGRhdGVfcHRlLm1tdV9zZXEpKQogCQlyZXR1cm47CiAJa3ZtX2dldF9wZm4ocGZuKTsKKwkvKgorCSAqIHdlIGNhbGwgbW11X3NldF9zcHRlKCkgd2l0aCByZXNldF9ob3N0X3Byb3RlY3Rpb24gPSB0cnVlIGJlYWN1c2UgdGhhdAorCSAqIHZjcHUtPmFyY2gudXBkYXRlX3B0ZS5wZm4gd2FzIGZldGNoZWQgZnJvbSBnZXRfdXNlcl9wYWdlcyh3cml0ZSA9IDEpLgorCSAqLwogCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlLCBwYWdlLT5yb2xlLmFjY2VzcywgcHRlX2FjY2VzcywgMCwgMCwKIAkJICAgICBncHRlICYgUFRfRElSVFlfTUFTSywgTlVMTCwgUFRfUEFHRV9UQUJMRV9MRVZFTCwKLQkJICAgICBncHRlX3RvX2dmbihncHRlKSwgcGZuLCB0cnVlKTsKKwkJICAgICBncHRlX3RvX2dmbihncHRlKSwgcGZuLCB0cnVlLCB0cnVlKTsKIH0KIAogLyoKQEAgLTMwOCw3ICszMTIsNyBAQAogCQkJCSAgICAgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCiAJCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9ESVJUWV9NQVNLLAogCQkJCSAgICAgcHR3cml0ZSwgbGV2ZWwsCi0JCQkJICAgICBndy0+Z2ZuLCBwZm4sIGZhbHNlKTsKKwkJCQkgICAgIGd3LT5nZm4sIHBmbiwgZmFsc2UsIHRydWUpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNTU4LDYgKzU2Miw3IEBACiBzdGF0aWMgaW50IEZOQU1FKHN5bmNfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKIHsKIAlpbnQgaSwgb2Zmc2V0LCBucl9wcmVzZW50OworCWJvb2wgcmVzZXRfaG9zdF9wcm90ZWN0aW9uOwogCiAJb2Zmc2V0ID0gbnJfcHJlc2VudCA9IDA7CiAKQEAgLTU5NSw5ICs2MDAsMTYgQEAKIAogCQlucl9wcmVzZW50Kys7CiAJCXB0ZV9hY2Nlc3MgPSBzcC0+cm9sZS5hY2Nlc3MgJiBGTkFNRShncHRlX2FjY2VzcykodmNwdSwgZ3B0ZSk7CisJCWlmICghKHNwLT5zcHRbaV0gJiBTUFRFX0hPU1RfV1JJVEVBQkxFKSkgeworCQkJcHRlX2FjY2VzcyAmPSB+QUNDX1dSSVRFX01BU0s7CisJCQlyZXNldF9ob3N0X3Byb3RlY3Rpb24gPSAwOworCQl9IGVsc2UgeworCQkJcmVzZXRfaG9zdF9wcm90ZWN0aW9uID0gMTsKKwkJfQogCQlzZXRfc3B0ZSh2Y3B1LCAmc3AtPnNwdFtpXSwgcHRlX2FjY2VzcywgMCwgMCwKIAkJCSBpc19kaXJ0eV9ncHRlKGdwdGUpLCBQVF9QQUdFX1RBQkxFX0xFVkVMLCBnZm4sCi0JCQkgc3B0ZV90b19wZm4oc3AtPnNwdFtpXSksIHRydWUsIGZhbHNlKTsKKwkJCSBzcHRlX3RvX3BmbihzcC0+c3B0W2ldKSwgdHJ1ZSwgZmFsc2UsCisJCQkgcmVzZXRfaG9zdF9wcm90ZWN0aW9uKTsKIAl9CiAKIAlyZXR1cm4gIW5yX3ByZXNlbnQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKaW5kZXggOTQ0Y2M5Yy4uYzE3NDA0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS5jCisrKyBiL2FyY2gveDg2L2t2bS9zdm0uYwpAQCAtNzY3LDYgKzc2Nyw4IEBACiAJCXJkdHNjbGwodHNjX3RoaXMpOwogCQlkZWx0YSA9IHZjcHUtPmFyY2guaG9zdF90c2MgLSB0c2NfdGhpczsKIAkJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgKz0gZGVsdGE7CisJCWlmIChpc19uZXN0ZWQoc3ZtKSkKKwkJCXN2bS0+bmVzdGVkLmhzYXZlLT5jb250cm9sLnRzY19vZmZzZXQgKz0gZGVsdGE7CiAJCXZjcHUtPmNwdSA9IGNwdTsKIAkJa3ZtX21pZ3JhdGVfdGltZXJzKHZjcHUpOwogCQlzdm0tPmFzaWRfZ2VuZXJhdGlvbiA9IDA7CkBAIC0yMDU3LDEwICsyMDU5LDE0IEBACiAKIAlzd2l0Y2ggKGVjeCkgewogCWNhc2UgTVNSX0lBMzJfVFNDOiB7Ci0JCXU2NCB0c2M7CisJCXU2NCB0c2Nfb2Zmc2V0OwogCi0JCXJkdHNjbGwodHNjKTsKLQkJKmRhdGEgPSBzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCArIHRzYzsKKwkJaWYgKGlzX25lc3RlZChzdm0pKQorCQkJdHNjX29mZnNldCA9IHN2bS0+bmVzdGVkLmhzYXZlLT5jb250cm9sLnRzY19vZmZzZXQ7CisJCWVsc2UKKwkJCXRzY19vZmZzZXQgPSBzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldDsKKworCQkqZGF0YSA9IHRzY19vZmZzZXQgKyBuYXRpdmVfcmVhZF90c2MoKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVNSX0s2X1NUQVI6CkBAIC0yMTQ2LDEwICsyMTUyLDE3IEBACiAKIAlzd2l0Y2ggKGVjeCkgewogCWNhc2UgTVNSX0lBMzJfVFNDOiB7Ci0JCXU2NCB0c2M7CisJCXU2NCB0c2Nfb2Zmc2V0ID0gZGF0YSAtIG5hdGl2ZV9yZWFkX3RzYygpOworCQl1NjQgZ190c2Nfb2Zmc2V0ID0gMDsKIAotCQlyZHRzY2xsKHRzYyk7Ci0JCXN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ID0gZGF0YSAtIHRzYzsKKwkJaWYgKGlzX25lc3RlZChzdm0pKSB7CisJCQlnX3RzY19vZmZzZXQgPSBzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCAtCisJCQkJICAgICAgIHN2bS0+bmVzdGVkLmhzYXZlLT5jb250cm9sLnRzY19vZmZzZXQ7CisJCQlzdm0tPm5lc3RlZC5oc2F2ZS0+Y29udHJvbC50c2Nfb2Zmc2V0ID0gdHNjX29mZnNldDsKKwkJfQorCisJCXN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ID0gdHNjX29mZnNldCArIGdfdHNjX29mZnNldDsKKwogCQlicmVhazsKIAl9CiAJY2FzZSBNU1JfSzZfU1RBUjoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguYyBiL2FyY2gveDg2L2t2bS92bXguYwppbmRleCBmMzgxMjAxLi5lZDUzYjQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC03MDksNyArNzA5LDcgQEAKIAlpZiAodmNwdS0+Y3B1ICE9IGNwdSkgewogCQl2Y3B1X2NsZWFyKHZteCk7CiAJCWt2bV9taWdyYXRlX3RpbWVycyh2Y3B1KTsKLQkJdnBpZF9zeW5jX3ZjcHVfYWxsKHZteCk7CisJCXNldF9iaXQoS1ZNX1JFUV9UTEJfRkxVU0gsICZ2Y3B1LT5yZXF1ZXN0cyk7CiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWxpc3RfYWRkKCZ2bXgtPmxvY2FsX3ZjcHVzX2xpbmssCiAJCQkgJnBlcl9jcHUodmNwdXNfb25fY3B1LCBjcHUpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCBiZTQ1MWVlLi5hZTA3ZDI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0xNTkxLDYgKzE1OTEsOCBAQAogCiAJaWYgKGNwdWlkLT5uZW50IDwgMSkKIAkJZ290byBvdXQ7CisJaWYgKGNwdWlkLT5uZW50ID4gS1ZNX01BWF9DUFVJRF9FTlRSSUVTKQorCQljcHVpZC0+bmVudCA9IEtWTV9NQVhfQ1BVSURfRU5UUklFUzsKIAlyID0gLUVOT01FTTsKIAljcHVpZF9lbnRyaWVzID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpICogY3B1aWQtPm5lbnQpOwogCWlmICghY3B1aWRfZW50cmllcykKQEAgLTE2OTAsNyArMTY5Miw3IEBACiAJdW5zaWduZWQgYmFua19udW0gPSBtY2dfY2FwICYgMHhmZiwgYmFuazsKIAogCXIgPSAtRUlOVkFMOwotCWlmICghYmFua19udW0pCisJaWYgKCFiYW5rX251bSB8fCBiYW5rX251bSA+PSBLVk1fTUFYX01DRV9CQU5LUykKIAkJZ290byBvdXQ7CiAJaWYgKG1jZ19jYXAgJiB+KEtWTV9NQ0VfQ0FQX1NVUFBPUlRFRCB8IDB4ZmYgfCAweGZmMDAwMCkpCiAJCWdvdG8gb3V0OwpAQCAtNDA0OSw3ICs0MDUxLDcgQEAKIAlyZXR1cm4ga3ZtX3dyaXRlX2d1ZXN0X3ZpcnQoZHRhYmxlLmJhc2UgKyBpbmRleCo4LCBzZWdfZGVzYywgc2l6ZW9mKCpzZWdfZGVzYyksIHZjcHUpOwogfQogCi1zdGF0aWMgdTMyIGdldF90c3NfYmFzZV9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKK3N0YXRpYyBncGFfdCBnZXRfdHNzX2Jhc2VfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqc2VnX2Rlc2MpCiB7CiAJdTMyIGJhc2VfYWRkciA9IGdldF9kZXNjX2Jhc2Uoc2VnX2Rlc2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IDllNjA5MjAuLjg1ZjVkYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTE2LDcgKzE2LDkgQEAKICAgICAgICAgbGliLXkgKz0gY2hlY2tzdW1fMzIubwogICAgICAgICBsaWIteSArPSBzdHJzdHJfMzIubwogICAgICAgICBsaWIteSArPSBzZW1hcGhvcmVfMzIubyBzdHJpbmdfMzIubwotCitpZm5lcSAoJChDT05GSUdfWDg2X0NNUFhDSEc2NCkseSkKKyAgICAgICAgbGliLXkgKz0gY21weGNoZzhiX2VtdS5vCitlbmRpZgogICAgICAgICBsaWItJChDT05GSUdfWDg2X1VTRV8zRE5PVykgKz0gbW14XzMyLm8KIGVsc2UKICAgICAgICAgb2JqLXkgKz0gaW9fNjQubyBpb21hcF9jb3B5XzY0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jbXB4Y2hnOGJfZW11LlMgYi9hcmNoL3g4Ni9saWIvY21weGNoZzhiX2VtdS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGNiNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvY21weGNoZzhiX2VtdS5TCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICoJb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgorI2luY2x1ZGUgPGFzbS9mcmFtZS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworCisudGV4dAorCisvKgorICogSW5wdXRzOgorICogJWVzaSA6IG1lbW9yeSBsb2NhdGlvbiB0byBjb21wYXJlCisgKiAlZWF4IDogbG93IDMyIGJpdHMgb2Ygb2xkIHZhbHVlCisgKiAlZWR4IDogaGlnaCAzMiBiaXRzIG9mIG9sZCB2YWx1ZQorICogJWVieCA6IGxvdyAzMiBiaXRzIG9mIG5ldyB2YWx1ZQorICogJWVjeCA6IGhpZ2ggMzIgYml0cyBvZiBuZXcgdmFsdWUKKyAqLworRU5UUlkoY21weGNoZzhiX2VtdSkKK0NGSV9TVEFSVFBST0MKKworIworIyBFbXVsYXRlICdjbXB4Y2hnOGIgKCVlc2kpJyBvbiBVUCBleGNlcHQgd2UgZG9uJ3QKKyMgc2V0IHRoZSB3aG9sZSBaRiB0aGluZyAoY2FsbGVyIHdpbGwganVzdCBjb21wYXJlCisjIGVheDplZHggd2l0aCB0aGUgZXhwZWN0ZWQgdmFsdWUpCisjCitjbXB4Y2hnOGJfZW11OgorCXB1c2hmbAorCWNsaQorCisJY21wbCAgKCVlc2kpLCAlZWF4CisJam5lIG5vdF9zYW1lCisJY21wbCA0KCVlc2kpLCAlZWR4CisJam5lIGhhbGZfc2FtZQorCisJbW92bCAlZWJ4LCAgKCVlc2kpCisJbW92bCAlZWN4LCA0KCVlc2kpCisKKwlwb3BmbAorCXJldAorCisgbm90X3NhbWU6CisJbW92bCAgKCVlc2kpLCAlZWF4CisgaGFsZl9zYW1lOgorCW1vdmwgNCglZXNpKSwgJWVkeAorCisJcG9wZmwKKwlyZXQKKworQ0ZJX0VORFBST0MKK0VORFBST0MoY21weGNoZzhiX2VtdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL01ha2VmaWxlIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKaW5kZXggOWI1YTlmNS4uMDY2MzBkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKQEAgLTEsOSArMSwxMCBAQAogb2JqLXkJOj0gIGluaXQubyBpbml0XyQoQklUUykubyBmYXVsdC5vIGlvcmVtYXAubyBleHRhYmxlLm8gcGFnZWF0dHIubyBtbWFwLm8gXAotCSAgICBwYXQubyBwZ3RhYmxlLm8gcGh5c2FkZHIubyBndXAubworCSAgICBwYXQubyBwZ3RhYmxlLm8gcGh5c2FkZHIubyBndXAubyBzZXR1cF9ueC5vCiAKICMgTWFrZSBzdXJlIF9fcGh5c19hZGRyIGhhcyBubyBzdGFja3Byb3RlY3Rvcgogbm9zdGFja3AgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCiBDRkxBR1NfcGh5c2FkZHIubwkJOj0gJChub3N0YWNrcCkKK0NGTEFHU19zZXR1cF9ueC5vCQk6PSAkKG5vc3RhY2twKQogCiBvYmotJChDT05GSUdfU01QKQkJKz0gdGxiLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IDA2MDcxMTkuLjczZmZkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTI4LDY5ICsyOCw2IEBACiAjZW5kaWYKIDsKIAotaW50IG54X2VuYWJsZWQ7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCi1zdGF0aWMgaW50IGRpc2FibGVfbnggX19jcHVpbml0ZGF0YTsKLQotLyoKLSAqIG5vZXhlYyA9IG9ufG9mZgotICoKLSAqIENvbnRyb2wgbm9uLWV4ZWN1dGFibGUgbWFwcGluZ3MgZm9yIHByb2Nlc3Nlcy4KLSAqCi0gKiBvbiAgICAgIEVuYWJsZQotICogb2ZmICAgICBEaXNhYmxlCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IG5vZXhlY19zZXR1cChjaGFyICpzdHIpCi17Ci0JaWYgKCFzdHIpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghc3RybmNtcChzdHIsICJvbiIsIDIpKSB7Ci0JCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOwotCQlkaXNhYmxlX254ID0gMDsKLQl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIm9mZiIsIDMpKSB7Ci0JCWRpc2FibGVfbnggPSAxOwotCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7Ci0JfQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vZXhlYyIsIG5vZXhlY19zZXR1cCk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfUEFFCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X254KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHZbNF0sIGwsIGg7Ci0KLQlpZiAoY3B1X2hhc19wYWUgJiYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+IDB4ODAwMDAwMDEpKSB7Ci0JCWNwdWlkKDB4ODAwMDAwMDEsICZ2WzBdLCAmdlsxXSwgJnZbMl0sICZ2WzNdKTsKLQotCQlpZiAoKHZbM10gJiAoMSA8PCAyMCkpICYmICFkaXNhYmxlX254KSB7Ci0JCQlyZG1zcihNU1JfRUZFUiwgbCwgaCk7Ci0JCQlsIHw9IEVGRVJfTlg7Ci0JCQl3cm1zcihNU1JfRUZFUiwgbCwgaCk7Ci0JCQlueF9lbmFibGVkID0gMTsKLQkJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOwotCQl9Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbngodm9pZCkKLXsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotdm9pZCBfX2NwdWluaXQgY2hlY2tfZWZlcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZWZlcjsKLQotCXJkbXNybChNU1JfRUZFUiwgZWZlcik7Ci0JaWYgKCEoZWZlciAmIEVGRVJfTlgpIHx8IGRpc2FibGVfbngpCi0JCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9OWDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBfX2luaXQgZmluZF9lYXJseV90YWJsZV9zcGFjZSh1bnNpZ25lZCBsb25nIGVuZCwgaW50IHVzZV9wc2UsCiAJCQkJCSAgaW50IHVzZV9nYnBhZ2VzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCmluZGV4IDMzNGU2M2MuLjJmZWI5YmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvcmVtYXAuYworKysgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKQEAgLTE3MCw4ICsxNzAsNyBAQAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGh5c19hZGRyLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKHBoeXNfYWRkciArIHNpemUpLAogCQkJCXByb3RfdmFsLCBuZXdfcHJvdF92YWwpOwotCQkJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCWdvdG8gZXJyX2ZyZWVfbWVtdHlwZTsKIAkJfQogCQlwcm90X3ZhbCA9IG5ld19wcm90X3ZhbDsKIAl9CkBAIC0xOTcsMjYgKzE5NiwyNSBAQAogCSAqLwogCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwgY2FsbGVyKTsKIAlpZiAoIWFyZWEpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycl9mcmVlX21lbXR5cGU7CiAJYXJlYS0+cGh5c19hZGRyID0gcGh5c19hZGRyOwogCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGFyZWEtPmFkZHI7CiAKLQlpZiAoa2VybmVsX21hcF9zeW5jX21lbXR5cGUocGh5c19hZGRyLCBzaXplLCBwcm90X3ZhbCkpIHsKLQkJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7Ci0JCWZyZWVfdm1fYXJlYShhcmVhKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwaHlzX2FkZHIsIHNpemUsIHByb3RfdmFsKSkKKwkJZ290byBlcnJfZnJlZV9hcmVhOwogCi0JaWYgKGlvcmVtYXBfcGFnZV9yYW5nZSh2YWRkciwgdmFkZHIgKyBzaXplLCBwaHlzX2FkZHIsIHByb3QpKSB7Ci0JCWZyZWVfbWVtdHlwZShwaHlzX2FkZHIsIHBoeXNfYWRkciArIHNpemUpOwotCQlmcmVlX3ZtX2FyZWEoYXJlYSk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKHZhZGRyLCB2YWRkciArIHNpemUsIHBoeXNfYWRkciwgcHJvdCkpCisJCWdvdG8gZXJyX2ZyZWVfYXJlYTsKIAogCXJldF9hZGRyID0gKHZvaWQgX19pb21lbSAqKSAodmFkZHIgKyBvZmZzZXQpOwogCW1taW90cmFjZV9pb3JlbWFwKHVuYWxpZ25lZF9waHlzX2FkZHIsIHVuYWxpZ25lZF9zaXplLCByZXRfYWRkcik7CiAKIAlyZXR1cm4gcmV0X2FkZHI7CitlcnJfZnJlZV9hcmVhOgorCWZyZWVfdm1fYXJlYShhcmVhKTsKK2Vycl9mcmVlX21lbXR5cGU6CisJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCA3MjU3Y2YzLi5lNzhjZDBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtODEsNiArODEsNyBAQAogdm9pZCBwYXRfaW5pdCh2b2lkKQogewogCXU2NCBwYXQ7CisJYm9vbCBib290X2NwdSA9ICFib290X3BhdF9zdGF0ZTsKIAogCWlmICghcGF0X2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTEyMiw4ICsxMjMsMTAgQEAKIAkJcmRtc3JsKE1TUl9JQTMyX0NSX1BBVCwgYm9vdF9wYXRfc3RhdGUpOwogCiAJd3Jtc3JsKE1TUl9JQTMyX0NSX1BBVCwgcGF0KTsKLQlwcmludGsoS0VSTl9JTkZPICJ4ODYgUEFUIGVuYWJsZWQ6IGNwdSAlZCwgb2xkIDB4JUx4LCBuZXcgMHglTHhcbiIsCi0JICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgYm9vdF9wYXRfc3RhdGUsIHBhdCk7CisKKwlpZiAoYm9vdF9jcHUpCisJCXByaW50ayhLRVJOX0lORk8gIng4NiBQQVQgZW5hYmxlZDogY3B1ICVkLCBvbGQgMHglTHgsIG5ldyAweCVMeFxuIiwKKwkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgYm9vdF9wYXRfc3RhdGUsIHBhdCk7CiB9CiAKICN1bmRlZiBQQVQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NldHVwX254LmMgYi9hcmNoL3g4Ni9tbS9zZXR1cF9ueC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxM2Q4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9tbS9zZXR1cF9ueC5jCkBAIC0wLDAgKzEsNjkgQEAKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworaW50IG54X2VuYWJsZWQ7CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCitzdGF0aWMgaW50IGRpc2FibGVfbnggX19jcHVpbml0ZGF0YTsKKworLyoKKyAqIG5vZXhlYyA9IG9ufG9mZgorICoKKyAqIENvbnRyb2wgbm9uLWV4ZWN1dGFibGUgbWFwcGluZ3MgZm9yIHByb2Nlc3Nlcy4KKyAqCisgKiBvbiAgICAgIEVuYWJsZQorICogb2ZmICAgICBEaXNhYmxlCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG5vZXhlY19zZXR1cChjaGFyICpzdHIpCit7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghc3RybmNtcChzdHIsICJvbiIsIDIpKSB7CisJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOworCQlkaXNhYmxlX254ID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIm9mZiIsIDMpKSB7CisJCWRpc2FibGVfbnggPSAxOworCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7CisJfQorCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5vZXhlYyIsIG5vZXhlY19zZXR1cCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfUEFFCit2b2lkIF9faW5pdCBzZXRfbngodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdls0XSwgbCwgaDsKKworCWlmIChjcHVfaGFzX3BhZSAmJiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID4gMHg4MDAwMDAwMSkpIHsKKwkJY3B1aWQoMHg4MDAwMDAwMSwgJnZbMF0sICZ2WzFdLCAmdlsyXSwgJnZbM10pOworCisJCWlmICgodlszXSAmICgxIDw8IDIwKSkgJiYgIWRpc2FibGVfbngpIHsKKwkJCXJkbXNyKE1TUl9FRkVSLCBsLCBoKTsKKwkJCWwgfD0gRUZFUl9OWDsKKwkJCXdybXNyKE1TUl9FRkVSLCBsLCBoKTsKKwkJCW54X2VuYWJsZWQgPSAxOworCQkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfTlg7CisJCX0KKwl9Cit9CisjZWxzZQordm9pZCBzZXRfbngodm9pZCkKK3sKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAordm9pZCBfX2NwdWluaXQgY2hlY2tfZWZlcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZWZlcjsKKworCXJkbXNybChNU1JfRUZFUiwgZWZlcik7CisJaWYgKCEoZWZlciAmIEVGRVJfTlgpIHx8IGRpc2FibGVfbngpCisJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9OWDsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jIGIvYXJjaC94ODYvcGNpL2kzODYuYwppbmRleCA1MmU2MmU1Li5iMjJkMTNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jCisrKyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCBsYXQpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9tbWFwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX21tYXBfb3BzID0gewogCS5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2RlYnVnZnMuYyBiL2FyY2gveDg2L3hlbi9kZWJ1Z2ZzLmMKaW5kZXggYjUzMjI1ZC4uZTEzM2NlMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2RlYnVnZnMuYworKysgYi9hcmNoL3g4Ni94ZW4vZGVidWdmcy5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdTMyX2FycmF5X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1MzJfYXJyYXlfZm9wcyA9IHsKIAkub3duZXIJPSBUSElTX01PRFVMRSwKIAkub3Blbgk9IHUzMl9hcnJheV9vcGVuLAogCS5yZWxlYXNlPSB4ZW5fYXJyYXlfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCA1NDRlYjc0Li5kZmJmNzBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC0xNzgsNiArMTc4LDcgQEAKIHN0YXRpYyB2b2lkIHhlbl9jcHVpZCh1bnNpZ25lZCBpbnQgKmF4LCB1bnNpZ25lZCBpbnQgKmJ4LAogCQkgICAgICB1bnNpZ25lZCBpbnQgKmN4LCB1bnNpZ25lZCBpbnQgKmR4KQogeworCXVuc2lnbmVkIG1hc2tlYnggPSB+MDsKIAl1bnNpZ25lZCBtYXNrZWN4ID0gfjA7CiAJdW5zaWduZWQgbWFza2VkeCA9IH4wOwogCkBAIC0xODUsOSArMTg2LDE2IEBACiAJICogTWFzayBvdXQgaW5jb252ZW5pZW50IGZlYXR1cmVzLCB0byB0cnkgYW5kIGRpc2FibGUgYXMgbWFueQogCSAqIHVuc3VwcG9ydGVkIGtlcm5lbCBzdWJzeXN0ZW1zIGFzIHBvc3NpYmxlLgogCSAqLwotCWlmICgqYXggPT0gMSkgeworCXN3aXRjaCAoKmF4KSB7CisJY2FzZSAxOgogCQltYXNrZWN4ID0gY3B1aWRfbGVhZjFfZWN4X21hc2s7CiAJCW1hc2tlZHggPSBjcHVpZF9sZWFmMV9lZHhfbWFzazsKKwkJYnJlYWs7CisKKwljYXNlIDB4YjoKKwkJLyogU3VwcHJlc3MgZXh0ZW5kZWQgdG9wb2xvZ3kgc3R1ZmYgKi8KKwkJbWFza2VieCA9IDA7CisJCWJyZWFrOwogCX0KIAogCWFzbShYRU5fRU1VTEFURV9QUkVGSVggImNwdWlkIgpAQCAtMTk3LDYgKzIwNSw3IEBACiAJCSAgIj1kIiAoKmR4KQogCQk6ICIwIiAoKmF4KSwgIjIiICgqY3gpKTsKIAorCSpieCAmPSBtYXNrZWJ4OwogCSpjeCAmPSBtYXNrZWN4OwogCSpkeCAmPSBtYXNrZWR4OwogfQpAQCAtMTA3NSw2ICsxMDg0LDggQEAKIAkgKiBTZXQgdXAgc29tZSBwYWdldGFibGUgc3RhdGUgYmVmb3JlIHN0YXJ0aW5nIHRvIHNldCBhbnkgcHRlcy4KIAkgKi8KIAorCXhlbl9pbml0X21tdV9vcHMoKTsKKwogCS8qIFByZXZlbnQgdW53YW50ZWQgYml0cyBmcm9tIGJlaW5nIHNldCBpbiBQVEVzLiAqLwogCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9HTE9CQUw7CiAJaWYgKCF4ZW5faW5pdGlhbF9kb21haW4oKSkKQEAgLTEwODIsNiArMTA5MywxMSBAQAogCiAJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfSU9NQVA7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyogV29yayBvdXQgaWYgd2Ugc3VwcG9ydCBOWCAqLworCWNoZWNrX2VmZXIoKTsKKyNlbmRpZgorCiAJeGVuX3NldHVwX2ZlYXR1cmVzKCk7CiAKIAkvKiBHZXQgbWZuIGxpc3QgKi8KQEAgLTEwOTQsNyArMTExMCw2IEBACiAJICovCiAJeGVuX3NldHVwX3N0YWNrcHJvdGVjdG9yKCk7CiAKLQl4ZW5faW5pdF9tbXVfb3BzKCk7CiAJeGVuX2luaXRfaXJxX29wcygpOwogCXhlbl9pbml0X2NwdWlkX21hc2soKTsKIApAQCAtMTEyMywxMSArMTEzOCw2IEBACiAKIAlwZ2QgPSAocGdkX3QgKil4ZW5fc3RhcnRfaW5mby0+cHRfYmFzZTsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQkvKiBXb3JrIG91dCBpZiB3ZSBzdXBwb3J0IE5YICovCi0JY2hlY2tfZWZlcigpOwotI2VuZGlmCi0KIAkvKiBEb24ndCBkbyB0aGUgZnVsbCB2Y3B1X2luZm8gcGxhY2VtZW50IHN0dWZmIHVudGlsIHdlIGhhdmUgYQogCSAgIHBvc3NpYmxlIG1hcCBhbmQgYSBub24tZHVtbXkgc2hhcmVkX2luZm8uICovCiAJcGVyX2NwdSh4ZW5fdmNwdSwgMCkgPSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKaW5kZXggMTkwODVmZi4uMTlmN2RmMyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggOTIxYjZmZi4uOWI1MjYxNSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE1LDYgKzE1LDggQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogCiAjaW5jbHVkZSA8dmFyaWFudC9jb3JlLmg+CiAjaW5jbHVkZSA8cGxhdGZvcm0vaGFyZHdhcmUuaD4KQEAgLTEwNyw0MSArMTA5LDE4IEBACiAKICAgLmZpeHVwICAgOiB7ICooLmZpeHVwKSB9CiAKLSAgLiA9IEFMSUdOKDE2KTsKLQotICBfX2V4X3RhYmxlIDogewotICAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gICAgKihfX2V4X3RhYmxlKQotICAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLSAgfQotCisgIEVYQ0VQVElPTl9UQUJMRSgxNikKICAgLyogRGF0YSBzZWN0aW9uICovCiAKLSAgLiA9IEFMSUdOKFhDSEFMX0lDQUNIRV9MSU5FU0laRSk7CiAgIF9mZGF0YSA9IC47Ci0gIC5kYXRhIDoKLSAgewotICAgIERBVEFfREFUQQotICAgIENPTlNUUlVDVE9SUwotICAgIC4gPSBBTElHTihYQ0hBTF9JQ0FDSEVfTElORVNJWkUpOwotICAgICooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCi0gIH0KLQorICBSV19EQVRBX1NFQ1RJT04oWENIQUxfSUNBQ0hFX0xJTkVTSVpFLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQogICBfZWRhdGEgPSAuOwogCi0gIC8qIFRoZSBpbml0aWFsIHRhc2sgKi8KLSAgLiA9IEFMSUdOKDgxOTIpOwotICAuZGF0YS5pbml0X3Rhc2sgOiB7ICooLmRhdGEuaW5pdF90YXNrKSB9Ci0KICAgLyogSW5pdGlhbGl6YXRpb24gY29kZSBhbmQgZGF0YTogKi8KIAotICAuID0gQUxJR04oMSA8PCAxMik7CisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBfX2luaXRfYmVnaW4gPSAuOwotICAuaW5pdC50ZXh0IDogewotICAJX3Npbml0dGV4dCA9IC47Ci0JSU5JVF9URVhUCi0JX2Vpbml0dGV4dCA9IC47Ci0gIH0KKyAgSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQogCiAgIC5pbml0LmRhdGEgOgogICB7CkBAIC0xNjgsMzYgKzE0NywxNSBAQAogCQkgICAuRGVidWdJbnRlcnJ1cHRWZWN0b3IudGV4dCk7CiAgIAogICAgIF9fYm9vdF9yZWxvY190YWJsZV9lbmQgPSBBQlNPTFVURSguKSA7CisKKyAgICBJTklUX1NFVFVQKFhDSEFMX0lDQUNIRV9MSU5FU0laRSkKKyAgICBJTklUX0NBTExTCisgICAgQ09OX0lOSVRDQUxMCisgICAgU0VDVVJJVFlfSU5JVENBTEwKKyAgICBJTklUX1JBTV9GUwogICB9CiAKLSAgLiA9IEFMSUdOKFhDSEFMX0lDQUNIRV9MSU5FU0laRSk7Ci0KLSAgX19zZXR1cF9zdGFydCA9IC47Ci0gIC5pbml0LnNldHVwIDogeyAqKC5pbml0LnNldHVwKSB9Ci0gIF9fc2V0dXBfZW5kID0gLjsKLQotICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLSAgLmluaXRjYWxsLmluaXQgOiB7Ci0JSU5JVENBTExTCi0gIH0KLSAgX19pbml0Y2FsbF9lbmQgPSAuOwotCi0gIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLSAgLmNvbl9pbml0Y2FsbC5pbml0IDogeyAqKC5jb25faW5pdGNhbGwuaW5pdCkgfQotICBfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotCi0gIFNFQ1VSSVRZX0lOSVQKLQotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0cmFtZnNfc3RhcnQgPS47Ci0gIC5pbml0LnJhbWZzIDogeyAqKC5pbml0LnJhbWZzKSB9Ci0gIF9faW5pdHJhbWZzX2VuZCA9IC47Ci0jZW5kaWYKLQotICBQRVJDUFUoNDA5NikKLQorICBQRVJDUFUoUEFHRV9TSVpFKQogCiAgIC8qIFdlIG5lZWQgdGhpcyBkdW1teSBzZWdtZW50IGhlcmUgKi8KIApAQCAtMjUyLDE2ICsyMTAsMTEgQEAKIAkJICAuRG91YmxlRXhjZXB0aW9uVmVjdG9yLmxpdGVyYWwpCiAKICAgLiA9IChMT0FEQUREUiggLkRvdWJsZUV4Y2VwdGlvblZlY3Rvci50ZXh0ICkgKyBTSVpFT0YoIC5Eb3VibGVFeGNlcHRpb25WZWN0b3IudGV4dCApICsgMykgJiB+IDM7Ci0gIC4gPSBBTElHTigxIDw8IDEyKTsKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAKICAgX19pbml0X2VuZCA9IC47CiAKLSAgLiA9IEFMSUdOKDgxOTIpOwotCi0gIC8qIEJTUyBzZWN0aW9uICovCi0gIF9ic3Nfc3RhcnQgPSAuOwotICAuYnNzIDogeyAqKC5ic3MucGFnZV9hbGlnbmVkKSAqKC5ic3MpIH0KLSAgX2Jzc19lbmQgPSAuOworICBCU1NfU0VDVElPTigwLCA4MTkyLCAwKQogCiAgIF9lbmQgPSAuOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstYmFycmllci5jIGIvYmxvY2svYmxrLWJhcnJpZXIuYwppbmRleCA2NTkzYWIzLi44ODczYjliIDEwMDY0NAotLS0gYS9ibG9jay9ibGstYmFycmllci5jCisrKyBiL2Jsb2NrL2Jsay1iYXJyaWVyLmMKQEAgLTM1MCw2ICszNTAsNyBAQAogCiAJaWYgKGJpby0+YmlfcHJpdmF0ZSkKIAkJY29tcGxldGUoYmlvLT5iaV9wcml2YXRlKTsKKwlfX2ZyZWVfcGFnZShiaW9fcGFnZShiaW8pKTsKIAogCWJpb19wdXQoYmlvKTsKIH0KQEAgLTM3MiwzMCArMzczLDUwIEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKIAlpbnQgdHlwZSA9IGZsYWdzICYgRElTQ0FSRF9GTF9CQVJSSUVSID8KIAkJRElTQ0FSRF9CQVJSSUVSIDogRElTQ0FSRF9OT0JBUlJJRVI7CisJc3RydWN0IGJpbyAqYmlvOworCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFxKQogCQlyZXR1cm4gLUVOWElPOwogCi0JaWYgKCFxLT5wcmVwYXJlX2Rpc2NhcmRfZm4pCisJaWYgKCFibGtfcXVldWVfZGlzY2FyZChxKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJd2hpbGUgKG5yX3NlY3RzICYmICFyZXQpIHsKLQkJc3RydWN0IGJpbyAqYmlvID0gYmlvX2FsbG9jKGdmcF9tYXNrLCAwKTsKLQkJaWYgKCFiaW8pCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJdW5zaWduZWQgaW50IHNlY3Rvcl9zaXplID0gcS0+bGltaXRzLmxvZ2ljYWxfYmxvY2tfc2l6ZTsKKwkJdW5zaWduZWQgaW50IG1heF9kaXNjYXJkX3NlY3RvcnMgPQorCQkJbWluKHEtPmxpbWl0cy5tYXhfZGlzY2FyZF9zZWN0b3JzLCBVSU5UX01BWCA+PiA5KTsKIAorCQliaW8gPSBiaW9fYWxsb2MoZ2ZwX21hc2ssIDEpOworCQlpZiAoIWJpbykKKwkJCWdvdG8gb3V0OworCQliaW8tPmJpX3NlY3RvciA9IHNlY3RvcjsKIAkJYmlvLT5iaV9lbmRfaW8gPSBibGtkZXZfZGlzY2FyZF9lbmRfaW87CiAJCWJpby0+YmlfYmRldiA9IGJkZXY7CiAJCWlmIChmbGFncyAmIERJU0NBUkRfRkxfV0FJVCkKIAkJCWJpby0+YmlfcHJpdmF0ZSA9ICZ3YWl0OwogCi0JCWJpby0+Ymlfc2VjdG9yID0gc2VjdG9yOworCQkvKgorCQkgKiBBZGQgYSB6ZXJvZWQgb25lLXNlY3RvciBwYXlsb2FkIGFzIHRoYXQncyB3aGF0CisJCSAqIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBuZWVkLiAgSWYgd2UnbGwgZXZlciBuZWVkCisJCSAqIG1vcmUgdGhlIGludGVyZmFjZSB3aWxsIG5lZWQgcmV2aXNpdGluZy4KKwkJICovCisJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwkJaWYgKCFwYWdlKQorCQkJZ290byBvdXRfZnJlZV9iaW87CisJCWlmIChiaW9fYWRkX3BjX3BhZ2UocSwgYmlvLCBwYWdlLCBzZWN0b3Jfc2l6ZSwgMCkgPCBzZWN0b3Jfc2l6ZSkKKwkJCWdvdG8gb3V0X2ZyZWVfcGFnZTsKIAotCQlpZiAobnJfc2VjdHMgPiBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKSkgewotCQkJYmlvLT5iaV9zaXplID0gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkgPDwgOTsKLQkJCW5yX3NlY3RzIC09IHF1ZXVlX21heF9od19zZWN0b3JzKHEpOwotCQkJc2VjdG9yICs9IHF1ZXVlX21heF9od19zZWN0b3JzKHEpOworCQkvKgorCQkgKiBBbmQgb3ZlcnJpZGUgdGhlIGJpbyBzaXplIC0gdGhlIHdheSBkaXNjYXJkIHdvcmtzIHdlCisJCSAqIHRvdWNoIG1hbnkgbW9yZSBibG9ja3Mgb24gZGlzayB0aGFuIHRoZSBhY3R1YWwgcGF5bG9hZAorCQkgKiBsZW5ndGguCisJCSAqLworCQlpZiAobnJfc2VjdHMgPiBtYXhfZGlzY2FyZF9zZWN0b3JzKSB7CisJCQliaW8tPmJpX3NpemUgPSBtYXhfZGlzY2FyZF9zZWN0b3JzIDw8IDk7CisJCQlucl9zZWN0cyAtPSBtYXhfZGlzY2FyZF9zZWN0b3JzOworCQkJc2VjdG9yICs9IG1heF9kaXNjYXJkX3NlY3RvcnM7CiAJCX0gZWxzZSB7CiAJCQliaW8tPmJpX3NpemUgPSBucl9zZWN0cyA8PCA5OwogCQkJbnJfc2VjdHMgPSAwOwpAQCAtNDE0LDUgKzQzNSwxMSBAQAogCQliaW9fcHV0KGJpbyk7CiAJfQogCXJldHVybiByZXQ7CitvdXRfZnJlZV9wYWdlOgorCV9fZnJlZV9wYWdlKHBhZ2UpOworb3V0X2ZyZWVfYmlvOgorCWJpb19wdXQoYmlvKTsKK291dDoKKwlyZXR1cm4gLUVOT01FTTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrZGV2X2lzc3VlX2Rpc2NhcmQpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggODEzNTIyOC4uNzFkYTUxMSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiYmxrLmgiCiAKIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoYmxvY2tfcmVtYXApOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChibG9ja19ycV9yZW1hcCk7CiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGJsb2NrX2Jpb19jb21wbGV0ZSk7CiAKIHN0YXRpYyBpbnQgX19tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyk7CkBAIC0xMDI5LDcgKzEwMzAsNyBAQAogCWlmIChub3cgPT0gcGFydC0+c3RhbXApCiAJCXJldHVybjsKIAotCWlmIChwYXJ0LT5pbl9mbGlnaHQpIHsKKwlpZiAocGFydF9pbl9mbGlnaHQocGFydCkpIHsKIAkJX19wYXJ0X3N0YXRfYWRkKGNwdSwgcGFydCwgdGltZV9pbl9xdWV1ZSwKIAkJCQlwYXJ0X2luX2ZsaWdodChwYXJ0KSAqIChub3cgLSBwYXJ0LT5zdGFtcCkpOwogCQlfX3BhcnRfc3RhdF9hZGQoY3B1LCBwYXJ0LCBpb190aWNrcywgKG5vdyAtIHBhcnQtPnN0YW1wKSk7CkBAIC0xMTI0LDcgKzExMjUsNiBAQAogCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRElTQ0FSRDsKIAkJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKQogCQkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX1NPRlRCQVJSSUVSOwotCQlyZXEtPnEtPnByZXBhcmVfZGlzY2FyZF9mbihyZXEtPnEsIHJlcSk7CiAJfSBlbHNlIGlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpCiAJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9IQVJEQkFSUklFUjsKIApAQCAtMTE2MSw3ICsxMTYxLDcgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgZmYgPSBiaW8tPmJpX3J3ICYgUkVRX0ZBSUxGQVNUX01BU0s7CiAJaW50IHJ3X2ZsYWdzOwogCi0JaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpICYmIGJpb19oYXNfZGF0YShiaW8pICYmCisJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpICYmCiAJICAgIChxLT5uZXh0X29yZGVyZWQgPT0gUVVFVUVfT1JERVJFRF9OT05FKSkgewogCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CiAJCXJldHVybiAwOwpAQCAtMTQzNyw3ICsxNDM3LDggQEAKIAkJCWdvdG8gZW5kX2lvOwogCQl9CiAKLQkJaWYgKHVubGlrZWx5KG5yX3NlY3RvcnMgPiBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKSkpIHsKKwkJaWYgKHVubGlrZWx5KCFiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19ESVNDQVJEKSAmJgorCQkJICAgICBucl9zZWN0b3JzID4gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImJpbyB0b28gYmlnIGRldmljZSAlcyAoJXUgPiAldSlcbiIsCiAJCQkgICAgICAgYmRldm5hbWUoYmlvLT5iaV9iZGV2LCBiKSwKIAkJCSAgICAgICBiaW9fc2VjdG9ycyhiaW8pLApAQCAtMTQ3MCw3ICsxNDcxLDcgQEAKIAkJCWdvdG8gZW5kX2lvOwogCiAJCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19ESVNDQVJEKSAmJgotCQkgICAgIXEtPnByZXBhcmVfZGlzY2FyZF9mbikgeworCQkgICAgIWJsa19xdWV1ZV9kaXNjYXJkKHEpKSB7CiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJCWdvdG8gZW5kX2lvOwogCQl9CmRpZmYgLS1naXQgYS9ibG9jay9ibGstc2V0dGluZ3MuYyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCmluZGV4IDgzNDEzZmYuLjY2ZDRhYTggMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCisrKyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCkBAIC0zNCwyMyArMzQsNiBAQAogRVhQT1JUX1NZTUJPTChibGtfcXVldWVfcHJlcF9ycSk7CiAKIC8qKgotICogYmxrX3F1ZXVlX3NldF9kaXNjYXJkIC0gc2V0IGEgZGlzY2FyZF9zZWN0b3JzIGZ1bmN0aW9uIGZvciBxdWV1ZQotICogQHE6CQlxdWV1ZQotICogQGRmbjoJcHJlcGFyZV9kaXNjYXJkIGZ1bmN0aW9uCi0gKgotICogSXQncyBwb3NzaWJsZSBmb3IgYSBxdWV1ZSB0byByZWdpc3RlciBhIGRpc2NhcmQgY2FsbGJhY2sgd2hpY2ggaXMgdXNlZAotICogdG8gdHJhbnNmb3JtIGEgZGlzY2FyZCByZXF1ZXN0IGludG8gdGhlIGFwcHJvcHJpYXRlIHR5cGUgZm9yIHRoZQotICogaGFyZHdhcmUuIElmIG5vbmUgaXMgcmVnaXN0ZXJlZCwgdGhlbiBkaXNjYXJkIHJlcXVlc3RzIGFyZSBmYWlsZWQKLSAqIHdpdGggJUVPUE5PVFNVUFAuCi0gKgotICovCi12b2lkIGJsa19xdWV1ZV9zZXRfZGlzY2FyZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgcHJlcGFyZV9kaXNjYXJkX2ZuICpkZm4pCi17Ci0JcS0+cHJlcGFyZV9kaXNjYXJkX2ZuID0gZGZuOwotfQotRVhQT1JUX1NZTUJPTChibGtfcXVldWVfc2V0X2Rpc2NhcmQpOwotCi0vKioKICAqIGJsa19xdWV1ZV9tZXJnZV9idmVjIC0gc2V0IGEgbWVyZ2VfYnZlYyBmdW5jdGlvbiBmb3IgcXVldWUKICAqIEBxOgkJcXVldWUKICAqIEBtYmZuOgltZXJnZV9idmVjX2ZuCkBAIC0xMTEsNyArOTQsOSBAQAogCWxpbS0+bWF4X2h3X3NlZ21lbnRzID0gTUFYX0hXX1NFR01FTlRTOwogCWxpbS0+c2VnX2JvdW5kYXJ5X21hc2sgPSBCTEtfU0VHX0JPVU5EQVJZX01BU0s7CiAJbGltLT5tYXhfc2VnbWVudF9zaXplID0gTUFYX1NFR01FTlRfU0laRTsKLQlsaW0tPm1heF9zZWN0b3JzID0gbGltLT5tYXhfaHdfc2VjdG9ycyA9IFNBRkVfTUFYX1NFQ1RPUlM7CisJbGltLT5tYXhfc2VjdG9ycyA9IEJMS19ERUZfTUFYX1NFQ1RPUlM7CisJbGltLT5tYXhfaHdfc2VjdG9ycyA9IElOVF9NQVg7CisJbGltLT5tYXhfZGlzY2FyZF9zZWN0b3JzID0gU0FGRV9NQVhfU0VDVE9SUzsKIAlsaW0tPmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGxpbS0+cGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGxpbS0+aW9fbWluID0gNTEyOwogCWxpbS0+Ym91bmNlX3BmbiA9ICh1bnNpZ25lZCBsb25nKShCTEtfQk9VTkNFX0FOWSA+PiBQQUdFX1NISUZUKTsKIAlsaW0tPmFsaWdubWVudF9vZmZzZXQgPSAwOwpAQCAtMTY0LDYgKzE0OSw3IEBACiAJcS0+dW5wbHVnX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylxOwogCiAJYmxrX3NldF9kZWZhdWx0X2xpbWl0cygmcS0+bGltaXRzKTsKKwlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgU0FGRV9NQVhfU0VDVE9SUyk7CiAKIAkvKgogCSAqIElmIHRoZSBjYWxsZXIgZGlkbid0IHN1cHBseSBhIGxvY2ssIGZhbGwgYmFjayB0byBvdXIgZW1iZWRkZWQKQEAgLTI1NCw2ICsyNDAsMTggQEAKIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKTsKIAogLyoqCisgKiBibGtfcXVldWVfbWF4X2Rpc2NhcmRfc2VjdG9ycyAtIHNldCBtYXggc2VjdG9ycyBmb3IgYSBzaW5nbGUgZGlzY2FyZAorICogQHE6ICB0aGUgcmVxdWVzdCBxdWV1ZSBmb3IgdGhlIGRldmljZQorICogQG1heF9kaXNjYXJkX3NlY3RvcnM6IG1heGltdW0gbnVtYmVyIG9mIHNlY3RvcnMgdG8gZGlzY2FyZAorICoqLwordm9pZCBibGtfcXVldWVfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJdW5zaWduZWQgaW50IG1heF9kaXNjYXJkX3NlY3RvcnMpCit7CisJcS0+bGltaXRzLm1heF9kaXNjYXJkX3NlY3RvcnMgPSBtYXhfZGlzY2FyZF9zZWN0b3JzOworfQorRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWF4X2Rpc2NhcmRfc2VjdG9ycyk7CisKKy8qKgogICogYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzIC0gc2V0IG1heCBwaHlzIHNlZ21lbnRzIGZvciBhIHJlcXVlc3QgZm9yIHRoaXMgcXVldWUKICAqIEBxOiAgdGhlIHJlcXVlc3QgcXVldWUgZm9yIHRoZSBkZXZpY2UKICAqIEBtYXhfc2VnbWVudHM6ICBtYXggbnVtYmVyIG9mIHNlZ21lbnRzCmRpZmYgLS1naXQgYS9ibG9jay9ibGstc3lzZnMuYyBiL2Jsb2NrL2Jsay1zeXNmcy5jCmluZGV4IGI3OGM5YzMuLjhhNmQ4MWEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zeXNmcy5jCisrKyBiL2Jsb2NrL2Jsay1zeXNmcy5jCkBAIC00NTIsNiArNDUyLDcgQEAKIAlpZiAocmV0KSB7CiAJCWtvYmplY3RfdWV2ZW50KCZxLT5rb2JqLCBLT0JKX1JFTU9WRSk7CiAJCWtvYmplY3RfZGVsKCZxLT5rb2JqKTsKKwkJYmxrX3RyYWNlX3JlbW92ZV9zeXNmcyhkaXNrX3RvX2RldihkaXNrKSk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC00NjUsMTEgKzQ2NiwxMSBAQAogCWlmIChXQVJOX09OKCFxKSkKIAkJcmV0dXJuOwogCi0JaWYgKHEtPnJlcXVlc3RfZm4pIHsKKwlpZiAocS0+cmVxdWVzdF9mbikKIAkJZWx2X3VucmVnaXN0ZXJfcXVldWUocSk7CiAKLQkJa29iamVjdF91ZXZlbnQoJnEtPmtvYmosIEtPQkpfUkVNT1ZFKTsKLQkJa29iamVjdF9kZWwoJnEtPmtvYmopOwotCQlrb2JqZWN0X3B1dCgmZGlza190b19kZXYoZGlzayktPmtvYmopOwotCX0KKwlrb2JqZWN0X3VldmVudCgmcS0+a29iaiwgS09CSl9SRU1PVkUpOworCWtvYmplY3RfZGVsKCZxLT5rb2JqKTsKKwlibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKGRpc2tfdG9fZGV2KGRpc2spKTsKKwlrb2JqZWN0X3B1dCgmZGlza190b19kZXYoZGlzayktPmtvYmopOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRhZy5jIGIvYmxvY2svYmxrLXRhZy5jCmluZGV4IDJlNWNmZWIuLjZiMGY1MmMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10YWcuYworKysgYi9ibG9jay9ibGstdGFnLmMKQEAgLTM1OSw3ICszNTksNyBAQAogCQltYXhfZGVwdGggLT0gMjsKIAkJaWYgKCFtYXhfZGVwdGgpCiAJCQltYXhfZGVwdGggPSAxOwotCQlpZiAocS0+aW5fZmxpZ2h0WzBdID4gbWF4X2RlcHRoKQorCQlpZiAocS0+aW5fZmxpZ2h0W0JMS19SV19BU1lOQ10gPiBtYXhfZGVwdGgpCiAJCQlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDFjYTgxM2IuLmFhMWU5NTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTczLDYgKzE3Myw3IEBACiAJdW5zaWduZWQgaW50IGNmcV9zbGljZVsyXTsKIAl1bnNpZ25lZCBpbnQgY2ZxX3NsaWNlX2FzeW5jX3JxOwogCXVuc2lnbmVkIGludCBjZnFfc2xpY2VfaWRsZTsKKwl1bnNpZ25lZCBpbnQgY2ZxX2xhdGVuY3k7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNpY19saXN0OwogCkBAIC0xODAsNiArMTgxLDggQEAKIAkgKiBGYWxsYmFjayBkdW1teSBjZnFxIGZvciBleHRyZW1lIE9PTSBjb25kaXRpb25zCiAJICovCiAJc3RydWN0IGNmcV9xdWV1ZSBvb21fY2ZxcTsKKworCXVuc2lnbmVkIGxvbmcgbGFzdF9lbmRfc3luY19ycTsKIH07CiAKIGVudW0gY2ZxcV9zdGF0ZV9mbGFncyB7CkBAIC0xOTMsNiArMTk2LDcgQEAKIAlDRlFfQ0ZRUV9GTEFHX3NsaWNlX25ldywJLyogbm8gcmVxdWVzdHMgZGlzcGF0Y2hlZCBpbiBzbGljZSAqLwogCUNGUV9DRlFRX0ZMQUdfc3luYywJCS8qIHN5bmNocm9ub3VzIHF1ZXVlICovCiAJQ0ZRX0NGUVFfRkxBR19jb29wLAkJLyogaGFzIGRvbmUgYSBjb29wIGp1bXAgb2YgdGhlIHF1ZXVlICovCisJQ0ZRX0NGUVFfRkxBR19jb29wX3ByZWVtcHQsCS8qIGNvb3AgcHJlZW1wdCAqLwogfTsKIAogI2RlZmluZSBDRlFfQ0ZRUV9GTlMobmFtZSkJCQkJCQlcCkBAIC0yMTksNiArMjIzLDcgQEAKIENGUV9DRlFRX0ZOUyhzbGljZV9uZXcpOwogQ0ZRX0NGUVFfRk5TKHN5bmMpOwogQ0ZRX0NGUVFfRk5TKGNvb3ApOworQ0ZRX0NGUVFfRk5TKGNvb3BfcHJlZW1wdCk7CiAjdW5kZWYgQ0ZRX0NGUVFfRk5TCiAKICNkZWZpbmUgY2ZxX2xvZ19jZnFxKGNmcWQsIGNmcXEsIGZtdCwgYXJncy4uLikJXApAQCAtMjI3LDcgKzIzMiw3IEBACiAJYmxrX2FkZF90cmFjZV9tc2coKGNmcWQpLT5xdWV1ZSwgImNmcSAiIGZtdCwgIyNhcmdzKQogCiBzdGF0aWMgdm9pZCBjZnFfZGlzcGF0Y2hfaW5zZXJ0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwotc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcV9nZXRfcXVldWUoc3RydWN0IGNmcV9kYXRhICosIGludCwKK3N0YXRpYyBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFfZ2V0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqLCBib29sLAogCQkJCSAgICAgICBzdHJ1Y3QgaW9fY29udGV4dCAqLCBnZnBfdCk7CiBzdGF0aWMgc3RydWN0IGNmcV9pb19jb250ZXh0ICpjZnFfY2ljX2xvb2t1cChzdHJ1Y3QgY2ZxX2RhdGEgKiwKIAkJCQkJCXN0cnVjdCBpb19jb250ZXh0ICopOwpAQCAtMjM4LDI3ICsyNDMsMjQgQEAKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZxX3F1ZXVlICpjaWNfdG9fY2ZxcShzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYywKLQkJCQkJICAgIGludCBpc19zeW5jKQorCQkJCQkgICAgYm9vbCBpc19zeW5jKQogewotCXJldHVybiBjaWMtPmNmcXFbISFpc19zeW5jXTsKKwlyZXR1cm4gY2ljLT5jZnFxW2lzX3N5bmNdOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2ljX3NldF9jZnFxKHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljLAotCQkJCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEsIGludCBpc19zeW5jKQorCQkJCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEsIGJvb2wgaXNfc3luYykKIHsKLQljaWMtPmNmcXFbISFpc19zeW5jXSA9IGNmcXE7CisJY2ljLT5jZnFxW2lzX3N5bmNdID0gY2ZxcTsKIH0KIAogLyoKICAqIFdlIHJlZ2FyZCBhIHJlcXVlc3QgYXMgU1lOQywgaWYgaXQncyBlaXRoZXIgYSByZWFkIG9yIGhhcyB0aGUgU1lOQyBiaXQKICAqIHNldCAoaW4gd2hpY2ggY2FzZSBpdCBjb3VsZCBhbHNvIGJlIGRpcmVjdCBXUklURSkuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNmcV9iaW9fc3luYyhzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgaW5saW5lIGJvb2wgY2ZxX2Jpb19zeW5jKHN0cnVjdCBiaW8gKmJpbykKIHsKLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCB8fCBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19TWU5DSU8pKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOworCXJldHVybiBiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEIHx8IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTyk7CiB9CiAKIC8qCkBAIC0yODUsNyArMjg3LDcgQEAKICAqIGlmIGEgcXVldWUgaXMgbWFya2VkIHN5bmMgYW5kIGhhcyBzeW5jIGlvIHF1ZXVlZC4gQSBzeW5jIHF1ZXVlIHdpdGggYXN5bmMKICAqIGlvIG9ubHksIHNob3VsZCBub3QgZ2V0IGZ1bGwgc3luYyBzbGljZSBsZW5ndGguCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNmcV9wcmlvX3NsaWNlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgaW50IHN5bmMsCitzdGF0aWMgaW5saW5lIGludCBjZnFfcHJpb19zbGljZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGJvb2wgc3luYywKIAkJCQkgdW5zaWduZWQgc2hvcnQgcHJpbykKIHsKIAljb25zdCBpbnQgYmFzZV9zbGljZSA9IGNmcWQtPmNmcV9zbGljZVtzeW5jXTsKQEAgLTMxMyw3ICszMTUsNyBAQAogICogaXNuJ3QgdmFsaWQgdW50aWwgdGhlIGZpcnN0IHJlcXVlc3QgZnJvbSB0aGUgZGlzcGF0Y2ggaXMgYWN0aXZhdGVkCiAgKiBhbmQgdGhlIHNsaWNlIHRpbWUgc2V0LgogICovCi1zdGF0aWMgaW5saW5lIGludCBjZnFfc2xpY2VfdXNlZChzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQorc3RhdGljIGlubGluZSBib29sIGNmcV9zbGljZV91c2VkKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7CiAJaWYgKGNmcV9jZnFxX3NsaWNlX25ldyhjZnFxKSkKIAkJcmV0dXJuIDA7CkBAIC00ODgsNyArNDkwLDcgQEAKICAqIHdlIHdpbGwgc2VydmljZSB0aGUgcXVldWVzLgogICovCiBzdGF0aWMgdm9pZCBjZnFfc2VydmljZV90cmVlX2FkZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCi0JCQkJIGludCBhZGRfZnJvbnQpCisJCQkJIGJvb2wgYWRkX2Zyb250KQogewogCXN0cnVjdCByYl9ub2RlICoqcCwgKnBhcmVudDsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpfX2NmcXE7CkBAIC01MDQsMTEgKzUwNiwyMCBAQAogCQl9IGVsc2UKIAkJCXJiX2tleSArPSBqaWZmaWVzOwogCX0gZWxzZSBpZiAoIWFkZF9mcm9udCkgeworCQkvKgorCQkgKiBHZXQgb3VyIHJiIGtleSBvZmZzZXQuIFN1YnRyYWN0IGFueSByZXNpZHVhbCBzbGljZQorCQkgKiB2YWx1ZSBjYXJyaWVkIGZyb20gbGFzdCBzZXJ2aWNlLiBBIG5lZ2F0aXZlIHJlc2lkCisJCSAqIGNvdW50IGluZGljYXRlcyBzbGljZSBvdmVycnVuLCBhbmQgdGhpcyBzaG91bGQgcG9zaXRpb24KKwkJICogdGhlIG5leHQgc2VydmljZSB0aW1lIGZ1cnRoZXIgYXdheSBpbiB0aGUgdHJlZS4KKwkJICovCiAJCXJiX2tleSA9IGNmcV9zbGljZV9vZmZzZXQoY2ZxZCwgY2ZxcSkgKyBqaWZmaWVzOwotCQlyYl9rZXkgKz0gY2ZxcS0+c2xpY2VfcmVzaWQ7CisJCXJiX2tleSAtPSBjZnFxLT5zbGljZV9yZXNpZDsKIAkJY2ZxcS0+c2xpY2VfcmVzaWQgPSAwOwotCX0gZWxzZQotCQlyYl9rZXkgPSAwOworCX0gZWxzZSB7CisJCXJiX2tleSA9IC1IWjsKKwkJX19jZnFxID0gY2ZxX3JiX2ZpcnN0KCZjZnFkLT5zZXJ2aWNlX3RyZWUpOworCQlyYl9rZXkgKz0gX19jZnFxID8gX19jZnFxLT5yYl9rZXkgOiBqaWZmaWVzOworCX0KIAogCWlmICghUkJfRU1QVFlfTk9ERSgmY2ZxcS0+cmJfbm9kZSkpIHsKIAkJLyoKQEAgLTU0Miw3ICs1NTMsNyBAQAogCQkJbiA9ICYoKnApLT5yYl9sZWZ0OwogCQllbHNlIGlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSA+IGNmcV9jbGFzc19pZGxlKF9fY2ZxcSkpCiAJCQluID0gJigqcCktPnJiX3JpZ2h0OwotCQllbHNlIGlmIChyYl9rZXkgPCBfX2NmcXEtPnJiX2tleSkKKwkJZWxzZSBpZiAodGltZV9iZWZvcmUocmJfa2V5LCBfX2NmcXEtPnJiX2tleSkpCiAJCQluID0gJigqcCktPnJiX2xlZnQ7CiAJCWVsc2UKIAkJCW4gPSAmKCpwKS0+cmJfcmlnaHQ7CkBAIC04MjIsOCArODMzLDEwIEBACiAJICogcmVwb3NpdGlvbiBpbiBmaWZvIGlmIG5leHQgaXMgb2xkZXIgdGhhbiBycQogCSAqLwogCWlmICghbGlzdF9lbXB0eSgmcnEtPnF1ZXVlbGlzdCkgJiYgIWxpc3RfZW1wdHkoJm5leHQtPnF1ZXVlbGlzdCkgJiYKLQkgICAgdGltZV9iZWZvcmUobmV4dC0+c3RhcnRfdGltZSwgcnEtPnN0YXJ0X3RpbWUpKQorCSAgICB0aW1lX2JlZm9yZShycV9maWZvX3RpbWUobmV4dCksIHJxX2ZpZm9fdGltZShycSkpKSB7CiAJCWxpc3RfbW92ZSgmcnEtPnF1ZXVlbGlzdCwgJm5leHQtPnF1ZXVlbGlzdCk7CisJCXJxX3NldF9maWZvX3RpbWUocnEsIHJxX2ZpZm9fdGltZShuZXh0KSk7CisJfQogCiAJY2ZxX3JlbW92ZV9yZXF1ZXN0KG5leHQpOwogfQpAQCAtODM5LDcgKzg1Miw3IEBACiAJICogRGlzYWxsb3cgbWVyZ2Ugb2YgYSBzeW5jIGJpbyBpbnRvIGFuIGFzeW5jIHJlcXVlc3QuCiAJICovCiAJaWYgKGNmcV9iaW9fc3luYyhiaW8pICYmICFycV9pc19zeW5jKHJxKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCS8qCiAJICogTG9va3VwIHRoZSBjZnFxIHRoYXQgdGhpcyBiaW8gd2lsbCBiZSBxdWV1ZWQgd2l0aC4gQWxsb3cKQEAgLTg0NywxMyArODYwLDEwIEBACiAJICovCiAJY2ljID0gY2ZxX2NpY19sb29rdXAoY2ZxZCwgY3VycmVudC0+aW9fY29udGV4dCk7CiAJaWYgKCFjaWMpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAljZnFxID0gY2ljX3RvX2NmcXEoY2ljLCBjZnFfYmlvX3N5bmMoYmlvKSk7Ci0JaWYgKGNmcXEgPT0gUlFfQ0ZRUShycSkpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNmcXEgPT0gUlFfQ0ZRUShycSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY2ZxX3NldF9hY3RpdmVfcXVldWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLApAQCAtODgxLDcgKzg5MSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkCiBfX2NmcV9zbGljZV9leHBpcmVkKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwKLQkJICAgIGludCB0aW1lZF9vdXQpCisJCSAgICBib29sIHRpbWVkX291dCkKIHsKIAljZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgInNsaWNlIGV4cGlyZWQgdD0lZCIsIHRpbWVkX291dCk7CiAKQEAgLTkwOSw3ICs5MTksNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNmcV9zbGljZV9leHBpcmVkKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgaW50IHRpbWVkX291dCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjZnFfc2xpY2VfZXhwaXJlZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGJvb2wgdGltZWRfb3V0KQogewogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEgPSBjZnFkLT5hY3RpdmVfcXVldWU7CiAKQEAgLTkzNywxMCArOTQ3LDEzIEBACiB7CiAJaWYgKCFjZnFxKSB7CiAJCWNmcXEgPSBjZnFfZ2V0X25leHRfcXVldWUoY2ZxZCk7Ci0JCWlmIChjZnFxKQorCQlpZiAoY2ZxcSAmJiAhY2ZxX2NmcXFfY29vcF9wcmVlbXB0KGNmcXEpKQogCQkJY2ZxX2NsZWFyX2NmcXFfY29vcChjZnFxKTsKIAl9CiAKKwlpZiAoY2ZxcSkKKwkJY2ZxX2NsZWFyX2NmcXFfY29vcF9wcmVlbXB0KGNmcXEpOworCiAJX19jZnFfc2V0X2FjdGl2ZV9xdWV1ZShjZnFkLCBjZnFxKTsKIAlyZXR1cm4gY2ZxcTsKIH0KQEAgLTEwMjEsNyArMTAzNCw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFfY2xvc2VfY29vcGVyYXRvcihzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsCiAJCQkJCSAgICAgIHN0cnVjdCBjZnFfcXVldWUgKmN1cl9jZnFxLAotCQkJCQkgICAgICBpbnQgcHJvYmUpCisJCQkJCSAgICAgIGJvb2wgcHJvYmUpCiB7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKIApAQCAtMTA4NSw2ICsxMDk4LDE1IEBACiAJaWYgKCFjaWMgfHwgIWF0b21pY19yZWFkKCZjaWMtPmlvYy0+bnJfdGFza3MpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIElmIG91ciBhdmVyYWdlIHRoaW5rIHRpbWUgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlbWFpbmluZyB0aW1lCisJICogc2xpY2UsIHRoZW4gZG9uJ3QgaWRsZS4gVGhpcyBhdm9pZHMgb3ZlcnJ1bm5pbmcgdGhlIGFsbG90dGVkCisJICogdGltZSBzbGljZS4KKwkgKi8KKwlpZiAoc2FtcGxlX3ZhbGlkKGNpYy0+dHRpbWVfc2FtcGxlcykgJiYKKwkgICAgKGNmcXEtPnNsaWNlX2VuZCAtIGppZmZpZXMgPCBjaWMtPnR0aW1lX21lYW4pKQorCQlyZXR1cm47CisKIAljZnFfbWFya19jZnFxX3dhaXRfcmVxdWVzdChjZnFxKTsKIAogCS8qCkBAIC0xMTI0LDkgKzExNDYsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IHJlcXVlc3QgKmNmcV9jaGVja19maWZvKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7Ci0Jc3RydWN0IGNmcV9kYXRhICpjZnFkID0gY2ZxcS0+Y2ZxZDsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JaW50IGZpZm87CisJc3RydWN0IHJlcXVlc3QgKnJxID0gTlVMTDsKIAogCWlmIChjZnFfY2ZxcV9maWZvX2V4cGlyZShjZnFxKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMTM2LDEzICsxMTU2LDExIEBACiAJaWYgKGxpc3RfZW1wdHkoJmNmcXEtPmZpZm8pKQogCQlyZXR1cm4gTlVMTDsKIAotCWZpZm8gPSBjZnFfY2ZxcV9zeW5jKGNmcXEpOwogCXJxID0gcnFfZW50cnlfZmlmbyhjZnFxLT5maWZvLm5leHQpOwotCi0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHJxLT5zdGFydF90aW1lICsgY2ZxZC0+Y2ZxX2ZpZm9fZXhwaXJlW2ZpZm9dKSkKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgcnFfZmlmb190aW1lKHJxKSkpCiAJCXJxID0gTlVMTDsKIAotCWNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCAiZmlmbz0lcCIsIHJxKTsKKwljZnFfbG9nX2NmcXEoY2ZxcS0+Y2ZxZCwgY2ZxcSwgImZpZm89JXAiLCBycSk7CiAJcmV0dXJuIHJxOwogfQogCkBAIC0xMjQzLDE2ICsxMjYxLDgzIEBACiAJcmV0dXJuIGRpc3BhdGNoZWQ7CiB9CiAKK3N0YXRpYyBib29sIGNmcV9tYXlfZGlzcGF0Y2goc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQoreworCXVuc2lnbmVkIGludCBtYXhfZGlzcGF0Y2g7CisKKwkvKgorCSAqIERyYWluIGFzeW5jIHJlcXVlc3RzIGJlZm9yZSB3ZSBzdGFydCBzeW5jIElPCisJICovCisJaWYgKGNmcV9jZnFxX2lkbGVfd2luZG93KGNmcXEpICYmIGNmcWQtPnJxX2luX2RyaXZlcltCTEtfUldfQVNZTkNdKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYW4gYXN5bmMgcXVldWUgYW5kIHdlIGhhdmUgc3luYyBJTyBpbiBmbGlnaHQsIGxldCBpdCB3YWl0CisJICovCisJaWYgKGNmcWQtPnN5bmNfZmxpZ2h0ICYmICFjZnFfY2ZxcV9zeW5jKGNmcXEpKQorCQlyZXR1cm4gZmFsc2U7CisKKwltYXhfZGlzcGF0Y2ggPSBjZnFkLT5jZnFfcXVhbnR1bTsKKwlpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkpCisJCW1heF9kaXNwYXRjaCA9IDE7CisKKwkvKgorCSAqIERvZXMgdGhpcyBjZnFxIGFscmVhZHkgaGF2ZSB0b28gbXVjaCBJTyBpbiBmbGlnaHQ/CisJICovCisJaWYgKGNmcXEtPmRpc3BhdGNoZWQgPj0gbWF4X2Rpc3BhdGNoKSB7CisJCS8qCisJCSAqIGlkbGUgcXVldWUgbXVzdCBhbHdheXMgb25seSBoYXZlIGEgc2luZ2xlIElPIGluIGZsaWdodAorCQkgKi8KKwkJaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpKQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qCisJCSAqIFdlIGhhdmUgb3RoZXIgcXVldWVzLCBkb24ndCBhbGxvdyBtb3JlIElPIGZyb20gdGhpcyBvbmUKKwkJICovCisJCWlmIChjZnFkLT5idXN5X3F1ZXVlcyA+IDEpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJLyoKKwkJICogU29sZSBxdWV1ZSB1c2VyLCBhbGxvdyBiaWdnZXIgc2xpY2UKKwkJICovCisJCW1heF9kaXNwYXRjaCAqPSA0OworCX0KKworCS8qCisJICogQXN5bmMgcXVldWVzIG11c3Qgd2FpdCBhIGJpdCBiZWZvcmUgYmVpbmcgYWxsb3dlZCBkaXNwYXRjaC4KKwkgKiBXZSBhbHNvIHJhbXAgdXAgdGhlIGRpc3BhdGNoIGRlcHRoIGdyYWR1YWxseSBmb3IgYXN5bmMgSU8sCisJICogYmFzZWQgb24gdGhlIGxhc3Qgc3luYyBJTyB3ZSBzZXJ2aWNlZAorCSAqLworCWlmICghY2ZxX2NmcXFfc3luYyhjZnFxKSAmJiBjZnFkLT5jZnFfbGF0ZW5jeSkgeworCQl1bnNpZ25lZCBsb25nIGxhc3Rfc3luYyA9IGppZmZpZXMgLSBjZnFkLT5sYXN0X2VuZF9zeW5jX3JxOworCQl1bnNpZ25lZCBpbnQgZGVwdGg7CisKKwkJZGVwdGggPSBsYXN0X3N5bmMgLyBjZnFkLT5jZnFfc2xpY2VbMV07CisJCWlmICghZGVwdGggJiYgIWNmcXEtPmRpc3BhdGNoZWQpCisJCQlkZXB0aCA9IDE7CisJCWlmIChkZXB0aCA8IG1heF9kaXNwYXRjaCkKKwkJCW1heF9kaXNwYXRjaCA9IGRlcHRoOworCX0KKworCS8qCisJICogSWYgd2UncmUgYmVsb3cgdGhlIGN1cnJlbnQgbWF4LCBhbGxvdyBhIGRpc3BhdGNoCisJICovCisJcmV0dXJuIGNmcXEtPmRpc3BhdGNoZWQgPCBtYXhfZGlzcGF0Y2g7Cit9CisKIC8qCiAgKiBEaXNwYXRjaCBhIHJlcXVlc3QgZnJvbSBjZnFxLCBtb3ZpbmcgdGhlbSB0byB0aGUgcmVxdWVzdCBxdWV1ZQogICogZGlzcGF0Y2ggbGlzdC4KICAqLwotc3RhdGljIHZvaWQgY2ZxX2Rpc3BhdGNoX3JlcXVlc3Qoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQorc3RhdGljIGJvb2wgY2ZxX2Rpc3BhdGNoX3JlcXVlc3Qoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAogCUJVR19PTihSQl9FTVBUWV9ST09UKCZjZnFxLT5zb3J0X2xpc3QpKTsKIAorCWlmICghY2ZxX21heV9kaXNwYXRjaChjZnFkLCBjZnFxKSkKKwkJcmV0dXJuIGZhbHNlOworCiAJLyoKIAkgKiBmb2xsb3cgZXhwaXJlZCBwYXRoLCBlbHNlIGdldCBmaXJzdCBuZXh0IGF2YWlsYWJsZQogCSAqLwpAQCAtMTI3MSw2ICsxMzU2LDggQEAKIAkJYXRvbWljX2xvbmdfaW5jKCZjaWMtPmlvYy0+cmVmY291bnQpOwogCQljZnFkLT5hY3RpdmVfY2ljID0gY2ljOwogCX0KKworCXJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtMTI4MSw3ICsxMzY4LDYgQEAKIHsKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxOwotCXVuc2lnbmVkIGludCBtYXhfZGlzcGF0Y2g7CiAKIAlpZiAoIWNmcWQtPmJ1c3lfcXVldWVzKQogCQlyZXR1cm4gMDsKQEAgLTEyOTQsNDggKzEzODAsMTEgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKgotCSAqIERyYWluIGFzeW5jIHJlcXVlc3RzIGJlZm9yZSB3ZSBzdGFydCBzeW5jIElPCisJICogRGlzcGF0Y2ggYSByZXF1ZXN0IGZyb20gdGhpcyBjZnFxLCBpZiBpdCBpcyBhbGxvd2VkCiAJICovCi0JaWYgKGNmcV9jZnFxX2lkbGVfd2luZG93KGNmcXEpICYmIGNmcWQtPnJxX2luX2RyaXZlcltCTEtfUldfQVNZTkNdKQorCWlmICghY2ZxX2Rpc3BhdGNoX3JlcXVlc3QoY2ZxZCwgY2ZxcSkpCiAJCXJldHVybiAwOwogCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGFuIGFzeW5jIHF1ZXVlIGFuZCB3ZSBoYXZlIHN5bmMgSU8gaW4gZmxpZ2h0LCBsZXQgaXQgd2FpdAotCSAqLwotCWlmIChjZnFkLT5zeW5jX2ZsaWdodCAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKLQkJcmV0dXJuIDA7Ci0KLQltYXhfZGlzcGF0Y2ggPSBjZnFkLT5jZnFfcXVhbnR1bTsKLQlpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkpCi0JCW1heF9kaXNwYXRjaCA9IDE7Ci0KLQkvKgotCSAqIERvZXMgdGhpcyBjZnFxIGFscmVhZHkgaGF2ZSB0b28gbXVjaCBJTyBpbiBmbGlnaHQ/Ci0JICovCi0JaWYgKGNmcXEtPmRpc3BhdGNoZWQgPj0gbWF4X2Rpc3BhdGNoKSB7Ci0JCS8qCi0JCSAqIGlkbGUgcXVldWUgbXVzdCBhbHdheXMgb25seSBoYXZlIGEgc2luZ2xlIElPIGluIGZsaWdodAotCQkgKi8KLQkJaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyoKLQkJICogV2UgaGF2ZSBvdGhlciBxdWV1ZXMsIGRvbid0IGFsbG93IG1vcmUgSU8gZnJvbSB0aGlzIG9uZQotCQkgKi8KLQkJaWYgKGNmcWQtPmJ1c3lfcXVldWVzID4gMSkKLQkJCXJldHVybiAwOwotCi0JCS8qCi0JCSAqIHdlIGFyZSB0aGUgb25seSBxdWV1ZSwgYWxsb3cgdXAgdG8gNCB0aW1lcyBvZiAncXVhbnR1bScKLQkJICovCi0JCWlmIChjZnFxLT5kaXNwYXRjaGVkID49IDQgKiBtYXhfZGlzcGF0Y2gpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIERpc3BhdGNoIGEgcmVxdWVzdCBmcm9tIHRoaXMgY2ZxcQotCSAqLwotCWNmcV9kaXNwYXRjaF9yZXF1ZXN0KGNmcWQsIGNmcXEpOwogCWNmcXEtPnNsaWNlX2Rpc3BhdGNoKys7CiAJY2ZxX2NsZWFyX2NmcXFfbXVzdF9kaXNwYXRjaChjZnFxKTsKIApAQCAtMTYzNSw3ICsxNjg0LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgY2ZxX2luaXRfY2ZxcShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCi0JCQkgIHBpZF90IHBpZCwgaW50IGlzX3N5bmMpCisJCQkgIHBpZF90IHBpZCwgYm9vbCBpc19zeW5jKQogewogCVJCX0NMRUFSX05PREUoJmNmcXEtPnJiX25vZGUpOwogCVJCX0NMRUFSX05PREUoJmNmcXEtPnBfbm9kZSk7CkBAIC0xNjU1LDcgKzE3MDQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqCi1jZnFfZmluZF9hbGxvY19xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGludCBpc19zeW5jLAorY2ZxX2ZpbmRfYWxsb2NfcXVldWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBib29sIGlzX3N5bmMsCiAJCSAgICAgc3RydWN0IGlvX2NvbnRleHQgKmlvYywgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwgKm5ld19jZnFxID0gTlVMTDsKQEAgLTE3MTksNyArMTc2OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2ZxX3F1ZXVlICoKLWNmcV9nZXRfcXVldWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgaXNfc3luYywgc3RydWN0IGlvX2NvbnRleHQgKmlvYywKK2NmcV9nZXRfcXVldWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBib29sIGlzX3N5bmMsIHN0cnVjdCBpb19jb250ZXh0ICppb2MsCiAJICAgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJY29uc3QgaW50IGlvcHJpbyA9IHRhc2tfaW9wcmlvKGlvYyk7CkBAIC0xOTUxLDEwICsyMDAwLDEzIEBACiAJZW5hYmxlX2lkbGUgPSBvbGRfaWRsZSA9IGNmcV9jZnFxX2lkbGVfd2luZG93KGNmcXEpOwogCiAJaWYgKCFhdG9taWNfcmVhZCgmY2ljLT5pb2MtPm5yX3Rhc2tzKSB8fCAhY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUgfHwKLQkgICAgKGNmcWQtPmh3X3RhZyAmJiBDSUNfU0VFS1koY2ljKSkpCisJICAgICghY2ZxZC0+Y2ZxX2xhdGVuY3kgJiYgY2ZxZC0+aHdfdGFnICYmIENJQ19TRUVLWShjaWMpKSkKIAkJZW5hYmxlX2lkbGUgPSAwOwogCWVsc2UgaWYgKHNhbXBsZV92YWxpZChjaWMtPnR0aW1lX3NhbXBsZXMpKSB7Ci0JCWlmIChjaWMtPnR0aW1lX21lYW4gPiBjZnFkLT5jZnFfc2xpY2VfaWRsZSkKKwkJdW5zaWduZWQgaW50IHNsaWNlX2lkbGUgPSBjZnFkLT5jZnFfc2xpY2VfaWRsZTsKKwkJaWYgKHNhbXBsZV92YWxpZChjaWMtPnNlZWtfc2FtcGxlcykgJiYgQ0lDX1NFRUtZKGNpYykpCisJCQlzbGljZV9pZGxlID0gbXNlY3NfdG9famlmZmllcyhDRlFfTUlOX1RUKTsKKwkJaWYgKGNpYy0+dHRpbWVfbWVhbiA+IHNsaWNlX2lkbGUpCiAJCQllbmFibGVfaWRsZSA9IDA7CiAJCWVsc2UKIAkJCWVuYWJsZV9pZGxlID0gMTsKQEAgLTE5NzMsNyArMjAyNSw3IEBACiAgKiBDaGVjayBpZiBuZXdfY2ZxcSBzaG91bGQgcHJlZW1wdCB0aGUgY3VycmVudGx5IGFjdGl2ZSBxdWV1ZS4gUmV0dXJuIDAgZm9yCiAgKiBubyBvciBpZiB3ZSBhcmVuJ3Qgc3VyZSwgYSAxIHdpbGwgY2F1c2UgYSBwcmVlbXB0LgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgYm9vbAogY2ZxX3Nob3VsZF9wcmVlbXB0KHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqbmV3X2NmcXEsCiAJCSAgIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKQEAgLTE5ODEsNDggKzIwMzMsNTYgQEAKIAogCWNmcXEgPSBjZnFkLT5hY3RpdmVfcXVldWU7CiAJaWYgKCFjZnFxKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGNmcV9zbGljZV91c2VkKGNmcXEpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoY2ZxX2NsYXNzX2lkbGUobmV3X2NmcXEpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAkvKgogCSAqIGlmIHRoZSBuZXcgcmVxdWVzdCBpcyBzeW5jLCBidXQgdGhlIGN1cnJlbnRseSBydW5uaW5nIHF1ZXVlIGlzCiAJICogbm90LCBsZXQgdGhlIHN5bmMgcmVxdWVzdCBoYXZlIHByaW9yaXR5LgogCSAqLwogCWlmIChycV9pc19zeW5jKHJxKSAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBTbyBib3RoIHF1ZXVlcyBhcmUgc3luYy4gTGV0IHRoZSBuZXcgcmVxdWVzdCBnZXQgZGlzayB0aW1lIGlmCiAJICogaXQncyBhIG1ldGFkYXRhIHJlcXVlc3QgYW5kIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGRvaW5nIHJlZ3VsYXIgSU8uCiAJICovCiAJaWYgKHJxX2lzX21ldGEocnEpICYmICFjZnFxLT5tZXRhX3BlbmRpbmcpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCiAJICogQWxsb3cgYW4gUlQgcmVxdWVzdCB0byBwcmUtZW1wdCBhbiBvbmdvaW5nIG5vbi1SVCBjZnFxIHRpbWVzbGljZS4KIAkgKi8KIAlpZiAoY2ZxX2NsYXNzX3J0KG5ld19jZnFxKSAmJiAhY2ZxX2NsYXNzX3J0KGNmcXEpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoIWNmcWQtPmFjdGl2ZV9jaWMgfHwgIWNmcV9jZnFxX3dhaXRfcmVxdWVzdChjZnFxKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCS8qCiAJICogaWYgdGhpcyByZXF1ZXN0IGlzIGFzLWdvb2QgYXMgb25lIHdlIHdvdWxkIGV4cGVjdCBmcm9tIHRoZQogCSAqIGN1cnJlbnQgY2ZxcSwgbGV0IGl0IHByZWVtcHQKIAkgKi8KLQlpZiAoY2ZxX3JxX2Nsb3NlKGNmcWQsIHJxKSkKLQkJcmV0dXJuIDE7CisJaWYgKGNmcV9ycV9jbG9zZShjZnFkLCBycSkgJiYgKCFjZnFfY2ZxcV9jb29wKG5ld19jZnFxKSB8fAorCSAgICBjZnFkLT5idXN5X3F1ZXVlcyA9PSAxKSkgeworCQkvKgorCQkgKiBNYXJrIG5ldyBxdWV1ZSBjb29wX3ByZWVtcHQsIHNvIGl0cyBjb29wIGZsYWcgd2lsbCBub3QgYmUKKwkJICogY2xlYXJlZCB3aGVuIG5ldyBxdWV1ZSBnZXRzIHNjaGVkdWxlZCBhdCB0aGUgdmVyeSBmaXJzdCB0aW1lCisJCSAqLworCQljZnFfbWFya19jZnFxX2Nvb3BfcHJlZW1wdChuZXdfY2ZxcSk7CisJCWNmcV9tYXJrX2NmcXFfY29vcChuZXdfY2ZxcSk7CisJCXJldHVybiB0cnVlOworCX0KIAotCXJldHVybiAwOworCXJldHVybiBmYWxzZTsKIH0KIAogLyoKQEAgLTIxMDcsNiArMjE2Nyw3IEBACiAKIAljZnFfYWRkX3JxX3JiKHJxKTsKIAorCXJxX3NldF9maWZvX3RpbWUocnEsIGppZmZpZXMgKyBjZnFkLT5jZnFfZmlmb19leHBpcmVbcnFfaXNfc3luYyhycSldKTsKIAlsaXN0X2FkZF90YWlsKCZycS0+cXVldWVsaXN0LCAmY2ZxcS0+Zmlmbyk7CiAKIAljZnFfcnFfZW5xdWV1ZWQoY2ZxZCwgY2ZxcSwgcnEpOwpAQCAtMjE1Nyw4ICsyMjE4LDEwIEBACiAJaWYgKGNmcV9jZnFxX3N5bmMoY2ZxcSkpCiAJCWNmcWQtPnN5bmNfZmxpZ2h0LS07CiAKLQlpZiAoc3luYykKKwlpZiAoc3luYykgewogCQlSUV9DSUMocnEpLT5sYXN0X2VuZF9yZXF1ZXN0ID0gbm93OworCQljZnFkLT5sYXN0X2VuZF9zeW5jX3JxID0gbm93OworCX0KIAogCS8qCiAJICogSWYgdGhpcyBpcyB0aGUgYWN0aXZlIHF1ZXVlLCBjaGVjayBpZiBpdCBuZWVkcyB0byBiZSBleHBpcmVkLApAQCAtMjI4NCw3ICsyMzQ3LDcgQEAKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKIAlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKIAljb25zdCBpbnQgcncgPSBycV9kYXRhX2RpcihycSk7Ci0JY29uc3QgaW50IGlzX3N5bmMgPSBycV9pc19zeW5jKHJxKTsKKwljb25zdCBib29sIGlzX3N5bmMgPSBycV9pc19zeW5jKHJxKTsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI0ODAsOCArMjU0Myw5IEBACiAJY2ZxZC0+Y2ZxX3NsaWNlWzFdID0gY2ZxX3NsaWNlX3N5bmM7CiAJY2ZxZC0+Y2ZxX3NsaWNlX2FzeW5jX3JxID0gY2ZxX3NsaWNlX2FzeW5jX3JxOwogCWNmcWQtPmNmcV9zbGljZV9pZGxlID0gY2ZxX3NsaWNlX2lkbGU7CisJY2ZxZC0+Y2ZxX2xhdGVuY3kgPSAxOwogCWNmcWQtPmh3X3RhZyA9IDE7Ci0KKwljZnFkLT5sYXN0X2VuZF9zeW5jX3JxID0gamlmZmllczsKIAlyZXR1cm4gY2ZxZDsKIH0KIApAQCAtMjU0OSw2ICsyNjEzLDcgQEAKIFNIT1dfRlVOQ1RJT04oY2ZxX3NsaWNlX3N5bmNfc2hvdywgY2ZxZC0+Y2ZxX3NsaWNlWzFdLCAxKTsKIFNIT1dfRlVOQ1RJT04oY2ZxX3NsaWNlX2FzeW5jX3Nob3csIGNmcWQtPmNmcV9zbGljZVswXSwgMSk7CiBTSE9XX0ZVTkNUSU9OKGNmcV9zbGljZV9hc3luY19ycV9zaG93LCBjZnFkLT5jZnFfc2xpY2VfYXN5bmNfcnEsIDApOworU0hPV19GVU5DVElPTihjZnFfbG93X2xhdGVuY3lfc2hvdywgY2ZxZC0+Y2ZxX2xhdGVuY3ksIDApOwogI3VuZGVmIFNIT1dfRlVOQ1RJT04KIAogI2RlZmluZSBTVE9SRV9GVU5DVElPTihfX0ZVTkMsIF9fUFRSLCBNSU4sIE1BWCwgX19DT05WKQkJCVwKQEAgLTI1ODAsNiArMjY0NSw3IEBACiBTVE9SRV9GVU5DVElPTihjZnFfc2xpY2VfYXN5bmNfc3RvcmUsICZjZnFkLT5jZnFfc2xpY2VbMF0sIDEsIFVJTlRfTUFYLCAxKTsKIFNUT1JFX0ZVTkNUSU9OKGNmcV9zbGljZV9hc3luY19ycV9zdG9yZSwgJmNmcWQtPmNmcV9zbGljZV9hc3luY19ycSwgMSwKIAkJVUlOVF9NQVgsIDApOworU1RPUkVfRlVOQ1RJT04oY2ZxX2xvd19sYXRlbmN5X3N0b3JlLCAmY2ZxZC0+Y2ZxX2xhdGVuY3ksIDAsIDEsIDApOwogI3VuZGVmIFNUT1JFX0ZVTkNUSU9OCiAKICNkZWZpbmUgQ0ZRX0FUVFIobmFtZSkgXApAQCAtMjU5NSw2ICsyNjYxLDcgQEAKIAlDRlFfQVRUUihzbGljZV9hc3luYyksCiAJQ0ZRX0FUVFIoc2xpY2VfYXN5bmNfcnEpLAogCUNGUV9BVFRSKHNsaWNlX2lkbGUpLAorCUNGUV9BVFRSKGxvd19sYXRlbmN5KSwKIAlfX0FUVFJfTlVMTAogfTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svY29tcGF0X2lvY3RsLmMgYi9ibG9jay9jb21wYXRfaW9jdGwuYwppbmRleCA3ODY1YTM0Li45YmQwODZjIDEwMDY0NAotLS0gYS9ibG9jay9jb21wYXRfaW9jdGwuYworKysgYi9ibG9jay9jb21wYXRfaW9jdGwuYwpAQCAtMjEsNiArMjEsMTEgQEAKIAlyZXR1cm4gcHV0X3VzZXIodmFsLCAoY29tcGF0X2ludF90IF9fdXNlciAqKWNvbXBhdF9wdHIoYXJnKSk7CiB9CiAKK3N0YXRpYyBpbnQgY29tcGF0X3B1dF91aW50KHVuc2lnbmVkIGxvbmcgYXJnLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXJldHVybiBwdXRfdXNlcih2YWwsIChjb21wYXRfdWludF90IF9fdXNlciAqKWNvbXBhdF9wdHIoYXJnKSk7Cit9CisKIHN0YXRpYyBpbnQgY29tcGF0X3B1dF9sb25nKHVuc2lnbmVkIGxvbmcgYXJnLCBsb25nIHZhbCkKIHsKIAlyZXR1cm4gcHV0X3VzZXIodmFsLCAoY29tcGF0X2xvbmdfdCBfX3VzZXIgKiljb21wYXRfcHRyKGFyZykpOwpAQCAtNzM0LDYgKzczOSwxNCBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBIRElPX0dFVEdFTzoKIAkJcmV0dXJuIGNvbXBhdF9oZGlvX2dldGdlbyhkaXNrLCBiZGV2LCBjb21wYXRfcHRyKGFyZykpOworCWNhc2UgQkxLUEJTWkdFVDoKKwkJcmV0dXJuIGNvbXBhdF9wdXRfdWludChhcmcsIGJkZXZfcGh5c2ljYWxfYmxvY2tfc2l6ZShiZGV2KSk7CisJY2FzZSBCTEtJT01JTjoKKwkJcmV0dXJuIGNvbXBhdF9wdXRfdWludChhcmcsIGJkZXZfaW9fbWluKGJkZXYpKTsKKwljYXNlIEJMS0lPT1BUOgorCQlyZXR1cm4gY29tcGF0X3B1dF91aW50KGFyZywgYmRldl9pb19vcHQoYmRldikpOworCWNhc2UgQkxLQUxJR05PRkY6CisJCXJldHVybiBjb21wYXRfcHV0X2ludChhcmcsIGJkZXZfYWxpZ25tZW50X29mZnNldChiZGV2KSk7CiAJY2FzZSBCTEtGTFNCVUY6CiAJY2FzZSBCTEtST1NFVDoKIAljYXNlIEJMS0RJU0NBUkQ6CmRpZmYgLS1naXQgYS9ibG9jay9lbGV2YXRvci5jIGIvYmxvY2svZWxldmF0b3IuYwppbmRleCAxOTc1YjYxLi5hODQ3MDQ2IDEwMDY0NAotLS0gYS9ibG9jay9lbGV2YXRvci5jCisrKyBiL2Jsb2NrL2VsZXZhdG9yLmMKQEAgLTEwNTksOSArMTA1OSw3IEBACiAJCXJldHVybiBjb3VudDsKIAogCXN0cmxjcHkoZWxldmF0b3JfbmFtZSwgbmFtZSwgc2l6ZW9mKGVsZXZhdG9yX25hbWUpKTsKLQlzdHJzdHJpcChlbGV2YXRvcl9uYW1lKTsKLQotCWUgPSBlbGV2YXRvcl9nZXQoZWxldmF0b3JfbmFtZSk7CisJZSA9IGVsZXZhdG9yX2dldChzdHJzdHJpcChlbGV2YXRvcl9uYW1lKSk7CiAJaWYgKCFlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZWxldmF0b3I6IHR5cGUgJXMgbm90IGZvdW5kXG4iLCBlbGV2YXRvcl9uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9ibG9jay9pb2N0bC5jIGIvYmxvY2svaW9jdGwuYwppbmRleCBkM2U2YjU4Li4xZjRkMWRlIDEwMDY0NAotLS0gYS9ibG9jay9pb2N0bC5jCisrKyBiL2Jsb2NrL2lvY3RsLmMKQEAgLTEzOCw2ICsxMzgsMTEgQEAKIAlyZXR1cm4gcHV0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKWFyZyk7CiB9CiAKK3N0YXRpYyBpbnQgcHV0X3VpbnQodW5zaWduZWQgbG9uZyBhcmcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuIHB1dF91c2VyKHZhbCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmcpOworfQorCiBzdGF0aWMgaW50IHB1dF9sb25nKHVuc2lnbmVkIGxvbmcgYXJnLCBsb25nIHZhbCkKIHsKIAlyZXR1cm4gcHV0X3VzZXIodmFsLCAobG9uZyBfX3VzZXIgKilhcmcpOwpAQCAtMjYzLDEwICsyNjgsMTggQEAKIAkJcmV0dXJuIHB1dF9sb25nKGFyZywgKGJkaS0+cmFfcGFnZXMgKiBQQUdFX0NBQ0hFX1NJWkUpIC8gNTEyKTsKIAljYXNlIEJMS1JPR0VUOgogCQlyZXR1cm4gcHV0X2ludChhcmcsIGJkZXZfcmVhZF9vbmx5KGJkZXYpICE9IDApOwotCWNhc2UgQkxLQlNaR0VUOiAvKiBnZXQgdGhlIGxvZ2ljYWwgYmxvY2sgc2l6ZSAoY2YuIEJMS1NTWkdFVCkgKi8KKwljYXNlIEJMS0JTWkdFVDogLyogZ2V0IGJsb2NrIGRldmljZSBzb2Z0IGJsb2NrIHNpemUgKGNmLiBCTEtTU1pHRVQpICovCiAJCXJldHVybiBwdXRfaW50KGFyZywgYmxvY2tfc2l6ZShiZGV2KSk7Ci0JY2FzZSBCTEtTU1pHRVQ6IC8qIGdldCBibG9jayBkZXZpY2UgaGFyZHdhcmUgc2VjdG9yIHNpemUgKi8KKwljYXNlIEJMS1NTWkdFVDogLyogZ2V0IGJsb2NrIGRldmljZSBsb2dpY2FsIGJsb2NrIHNpemUgKi8KIAkJcmV0dXJuIHB1dF9pbnQoYXJnLCBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KSk7CisJY2FzZSBCTEtQQlNaR0VUOiAvKiBnZXQgYmxvY2sgZGV2aWNlIHBoeXNpY2FsIGJsb2NrIHNpemUgKi8KKwkJcmV0dXJuIHB1dF91aW50KGFyZywgYmRldl9waHlzaWNhbF9ibG9ja19zaXplKGJkZXYpKTsKKwljYXNlIEJMS0lPTUlOOgorCQlyZXR1cm4gcHV0X3VpbnQoYXJnLCBiZGV2X2lvX21pbihiZGV2KSk7CisJY2FzZSBCTEtJT09QVDoKKwkJcmV0dXJuIHB1dF91aW50KGFyZywgYmRldl9pb19vcHQoYmRldikpOworCWNhc2UgQkxLQUxJR05PRkY6CisJCXJldHVybiBwdXRfaW50KGFyZywgYmRldl9hbGlnbm1lbnRfb2Zmc2V0KGJkZXYpKTsKIAljYXNlIEJMS1NFQ1RHRVQ6CiAJCXJldHVybiBwdXRfdXNob3J0KGFyZywgcXVldWVfbWF4X3NlY3RvcnMoYmRldl9nZXRfcXVldWUoYmRldikpKTsKIAljYXNlIEJMS1JBU0VUOgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FlYWQuYyBiL2NyeXB0by9hZWFkLmMKaW5kZXggZDlhYTczMy4uMGE1NWRhNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FlYWQuYworKysgYi9jcnlwdG8vYWVhZC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3BxLmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcHEuYwppbmRleCBiODhkYjZkLi42YjVjYzRmIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcHEuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcHEuYwpAQCAtMjYsMTQgKzI2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvYXN5bmNfdHguaD4KIAogLyoqCi0gKiBzY3JpYmJsZSAtIHNwYWNlIHRvIGhvbGQgdGhyb3dhd2F5IFAgYnVmZmVyIGZvciBzeW5jaHJvbm91cyBnZW5fc3luZHJvbWUKKyAqIHBxX3NjcmliYmxlX3BhZ2UgLSBzcGFjZSB0byBob2xkIHRocm93YXdheSBQIG9yIFEgYnVmZmVyIGZvcgorICogc3luY2hyb25vdXMgZ2VuX3N5bmRyb21lCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqc2NyaWJibGU7Ci0KLXN0YXRpYyBib29sIGlzX3JhaWQ2X3plcm9fYmxvY2soc3RydWN0IHBhZ2UgKnApCi17Ci0JcmV0dXJuIHAgPT0gKHZvaWQgKikgcmFpZDZfZW1wdHlfemVyb19wYWdlOwotfQorc3RhdGljIHN0cnVjdCBwYWdlICpwcV9zY3JpYmJsZV9wYWdlOwogCiAvKiB0aGUgc3RydWN0IHBhZ2UgKmJsb2Nrc1tdIHBhcmFtZXRlciBwYXNzZWQgdG8gYXN5bmNfZ2VuX3N5bmRyb21lKCkKICAqIGFuZCBhc3luY19zeW5kcm9tZV92YWwoKSBjb250YWlucyB0aGUgJ1AnIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXQKQEAgLTgzLDcgKzc5LDcgQEAKIAkgKiBzb3VyY2VzIGFuZCB1cGRhdGUgdGhlIGNvZWZmaWNpZW50cyBhY2NvcmRpbmdseQogCSAqLwogCWZvciAoaSA9IDAsIGlkeCA9IDA7IGkgPCBzcmNfY250OyBpKyspIHsKLQkJaWYgKGlzX3JhaWQ2X3plcm9fYmxvY2soYmxvY2tzW2ldKSkKKwkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCWRtYV9zcmNbaWR4XSA9IGRtYV9tYXBfcGFnZShkbWEtPmRldiwgYmxvY2tzW2ldLCBvZmZzZXQsIGxlbiwKIAkJCQkJICAgIERNQV9UT19ERVZJQ0UpOwpAQCAtMTYwLDkgKzE1Niw5IEBACiAJCXNyY3MgPSAodm9pZCAqKikgYmxvY2tzOwogCiAJZm9yIChpID0gMDsgaSA8IGRpc2tzOyBpKyspIHsKLQkJaWYgKGlzX3JhaWQ2X3plcm9fYmxvY2soYmxvY2tzW2ldKSkgeworCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpIHsKIAkJCUJVR19PTihpID4gZGlza3MgLSAzKTsgLyogUCBvciBRIGNhbid0IGJlIHplcm8gKi8KLQkJCXNyY3NbaV0gPSBibG9ja3NbaV07CisJCQlzcmNzW2ldID0gKHZvaWQqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKIAkJfSBlbHNlCiAJCQlzcmNzW2ldID0gcGFnZV9hZGRyZXNzKGJsb2Nrc1tpXSkgKyBvZmZzZXQ7CiAJfQpAQCAtMTg2LDEwICsxODIsMTQgQEAKICAqIGJsb2Nrc1tkaXNrcy0xXSB0byBOVUxMLiAgV2hlbiBQIG9yIFEgaXMgb21pdHRlZCAnbGVuJyBtdXN0IGJlIDw9CiAgKiBQQUdFX1NJWkUgYXMgYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHRoaXMgc2l6ZSBpcyB1c2VkIGluIHRoZQogICogc3luY2hyb25vdXMgcGF0aC4gICdkaXNrcycgYWx3YXlzIGFjY291bnRzIGZvciBib3RoIGRlc3RpbmF0aW9uCi0gKiBidWZmZXJzLgorICogYnVmZmVycy4gIElmIGFueSBzb3VyY2UgYnVmZmVycyAoYmxvY2tzW2ldIHdoZXJlIGkgPCBkaXNrcyAtIDIpIGFyZQorICogc2V0IHRvIE5VTEwgdGhvc2UgYnVmZmVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIHJhaWQ2X3plcm9fcGFnZQorICogaW4gdGhlIHN5bmNocm9ub3VzIHBhdGggYW5kIG9taXR0ZWQgaW4gdGhlIGhhcmR3YXJlLWFzeW5jaHJvbm91cworICogcGF0aC4KICAqCiAgKiAnYmxvY2tzJyBub3RlOiBpZiBzdWJtaXQtPnNjcmliYmxlIGlzIE5VTEwgdGhlbiB0aGUgY29udGVudHMgb2YKLSAqICdibG9ja3MnIG1heSBiZSBvdmVycmlkZGVuCisgKiAnYmxvY2tzJyBtYXkgYmUgb3ZlcndyaXR0ZW4gdG8gcGVyZm9ybSBhZGRyZXNzIGNvbnZlcnNpb25zCisgKiAoZG1hX21hcF9wYWdlKCkgb3IgcGFnZV9hZGRyZXNzKCkpLgogICovCiBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgogYXN5bmNfZ2VuX3N5bmRyb21lKHN0cnVjdCBwYWdlICoqYmxvY2tzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgZGlza3MsCkBAIC0yMjcsMTEgKzIyNywxMSBAQAogCWFzeW5jX3R4X3F1aWVzY2UoJnN1Ym1pdC0+ZGVwZW5kX3R4KTsKIAogCWlmICghUChibG9ja3MsIGRpc2tzKSkgewotCQlQKGJsb2NrcywgZGlza3MpID0gc2NyaWJibGU7CisJCVAoYmxvY2tzLCBkaXNrcykgPSBwcV9zY3JpYmJsZV9wYWdlOwogCQlCVUdfT04obGVuICsgb2Zmc2V0ID4gUEFHRV9TSVpFKTsKIAl9CiAJaWYgKCFRKGJsb2NrcywgZGlza3MpKSB7Ci0JCVEoYmxvY2tzLCBkaXNrcykgPSBzY3JpYmJsZTsKKwkJUShibG9ja3MsIGRpc2tzKSA9IHBxX3NjcmliYmxlX3BhZ2U7CiAJCUJVR19PTihsZW4gKyBvZmZzZXQgPiBQQUdFX1NJWkUpOwogCX0KIAlkb19zeW5jX2dlbl9zeW5kcm9tZShibG9ja3MsIG9mZnNldCwgZGlza3MsIGxlbiwgc3VibWl0KTsKQEAgLTI2NSw4ICsyNjUsMTAgQEAKIAkJCQkJCSAgICAgIGxlbik7CiAJc3RydWN0IGRtYV9kZXZpY2UgKmRldmljZSA9IGNoYW4gPyBjaGFuLT5kZXZpY2UgOiBOVUxMOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHg7CisJdW5zaWduZWQgY2hhciBjb2Vmc1tkaXNrcy0yXTsKIAllbnVtIGRtYV9jdHJsX2ZsYWdzIGRtYV9mbGFncyA9IHN1Ym1pdC0+Y2JfZm4gPyBETUFfUFJFUF9JTlRFUlJVUFQgOiAwOwogCWRtYV9hZGRyX3QgKmRtYV9zcmMgPSBOVUxMOworCWludCBzcmNfY250ID0gMDsKIAogCUJVR19PTihkaXNrcyA8IDQpOwogCkBAIC0yODUsMjIgKzI4NywzMiBAQAogCQkJIF9fZnVuY19fLCBkaXNrcywgbGVuKTsKIAkJaWYgKCFQKGJsb2NrcywgZGlza3MpKQogCQkJZG1hX2ZsYWdzIHw9IERNQV9QUkVQX1BRX0RJU0FCTEVfUDsKKwkJZWxzZQorCQkJcHFbMF0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBQKGJsb2NrcywgZGlza3MpLAorCQkJCQkgICAgIG9mZnNldCwgbGVuLAorCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOwogCQlpZiAoIVEoYmxvY2tzLCBkaXNrcykpCiAJCQlkbWFfZmxhZ3MgfD0gRE1BX1BSRVBfUFFfRElTQUJMRV9ROworCQllbHNlCisJCQlwcVsxXSA9IGRtYV9tYXBfcGFnZShkZXYsIFEoYmxvY2tzLCBkaXNrcyksCisJCQkJCSAgICAgb2Zmc2V0LCBsZW4sCisJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CisKIAkJaWYgKHN1Ym1pdC0+ZmxhZ3MgJiBBU1lOQ19UWF9GRU5DRSkKIAkJCWRtYV9mbGFncyB8PSBETUFfUFJFUF9GRU5DRTsKLQkJZm9yIChpID0gMDsgaSA8IGRpc2tzOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBkaXNrcy0yOyBpKyspCiAJCQlpZiAobGlrZWx5KGJsb2Nrc1tpXSkpIHsKLQkJCQlCVUdfT04oaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKTsKLQkJCQlkbWFfc3JjW2ldID0gZG1hX21hcF9wYWdlKGRldiwgYmxvY2tzW2ldLAotCQkJCQkJCSAgb2Zmc2V0LCBsZW4sCi0JCQkJCQkJICBETUFfVE9fREVWSUNFKTsKKwkJCQlkbWFfc3JjW3NyY19jbnRdID0gZG1hX21hcF9wYWdlKGRldiwgYmxvY2tzW2ldLAorCQkJCQkJCQlvZmZzZXQsIGxlbiwKKwkJCQkJCQkJRE1BX1RPX0RFVklDRSk7CisJCQkJY29lZnNbc3JjX2NudF0gPSByYWlkNl9nZmV4cFtpXTsKKwkJCQlzcmNfY250Kys7CiAJCQl9CiAKIAkJZm9yICg7OykgewogCQkJdHggPSBkZXZpY2UtPmRldmljZV9wcmVwX2RtYV9wcV92YWwoY2hhbiwgcHEsIGRtYV9zcmMsCi0JCQkJCQkJICAgIGRpc2tzIC0gMiwKLQkJCQkJCQkgICAgcmFpZDZfZ2ZleHAsCisJCQkJCQkJICAgIHNyY19jbnQsCisJCQkJCQkJICAgIGNvZWZzLAogCQkJCQkJCSAgICBsZW4sIHBxcmVzLAogCQkJCQkJCSAgICBkbWFfZmxhZ3MpOwogCQkJaWYgKGxpa2VseSh0eCkpCkBAIC0zNzMsOSArMzg1LDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgYXN5bmNfcHFfaW5pdCh2b2lkKQogewotCXNjcmliYmxlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwlwcV9zY3JpYmJsZV9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKIAotCWlmIChzY3JpYmJsZSkKKwlpZiAocHFfc2NyaWJibGVfcGFnZSkKIAkJcmV0dXJuIDA7CiAKIAlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgc3BhcmUgcGFnZVxuIiwgX19mdW5jX18pOwpAQCAtMzg1LDcgKzM5Nyw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhc3luY19wcV9leGl0KHZvaWQpCiB7Ci0JcHV0X3BhZ2Uoc2NyaWJibGUpOworCXB1dF9wYWdlKHBxX3NjcmliYmxlX3BhZ2UpOwogfQogCiBtb2R1bGVfaW5pdChhc3luY19wcV9pbml0KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY19yYWlkNl9yZWNvdi5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3JhaWQ2X3JlY292LmMKaW5kZXggNmQ3M2RkZS4uOTQzZjJhYiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3JhaWQ2X3JlY292LmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3JhaWQ2X3JlY292LmMKQEAgLTEzMSw4ICsxMzEsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKLV9fMmRhdGFfcmVjb3ZfNChzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLCBzdHJ1Y3QgcGFnZSAqKmJsb2NrcywKLQkgICAgICBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQorX18yZGF0YV9yZWNvdl80KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwKKwkJc3RydWN0IHBhZ2UgKipibG9ja3MsIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCiB7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCA9IE5VTEw7CiAJc3RydWN0IHBhZ2UgKnAsICpxLCAqYSwgKmI7CkBAIC0xNDMsOCArMTQzLDggQEAKIAl2b2lkICpjYl9wYXJhbSA9IHN1Ym1pdC0+Y2JfcGFyYW07CiAJdm9pZCAqc2NyaWJibGUgPSBzdWJtaXQtPnNjcmliYmxlOwogCi0JcCA9IGJsb2Nrc1s0LTJdOwotCXEgPSBibG9ja3NbNC0xXTsKKwlwID0gYmxvY2tzW2Rpc2tzLTJdOworCXEgPSBibG9ja3NbZGlza3MtMV07CiAKIAlhID0gYmxvY2tzW2ZhaWxhXTsKIAliID0gYmxvY2tzW2ZhaWxiXTsKQEAgLTE3MCw4ICsxNzAsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKLV9fMmRhdGFfcmVjb3ZfNShzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLCBzdHJ1Y3QgcGFnZSAqKmJsb2NrcywKLQkgICAgICBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQorX18yZGF0YV9yZWNvdl81KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwKKwkJc3RydWN0IHBhZ2UgKipibG9ja3MsIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCiB7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCA9IE5VTEw7CiAJc3RydWN0IHBhZ2UgKnAsICpxLCAqZywgKmRwLCAqZHE7CkBAIC0xODEsMjEgKzE4MSwyMiBAQAogCWRtYV9hc3luY190eF9jYWxsYmFjayBjYl9mbiA9IHN1Ym1pdC0+Y2JfZm47CiAJdm9pZCAqY2JfcGFyYW0gPSBzdWJtaXQtPmNiX3BhcmFtOwogCXZvaWQgKnNjcmliYmxlID0gc3VibWl0LT5zY3JpYmJsZTsKLQlpbnQgdW5pbml0aWFsaXplZF92YXIoZ29vZCk7Ci0JaW50IGk7CisJaW50IGdvb2Rfc3JjcywgZ29vZCwgaTsKIAotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwlnb29kX3NyY3MgPSAwOworCWdvb2QgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3MtMjsgaSsrKSB7CisJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoaSA9PSBmYWlsYSB8fCBpID09IGZhaWxiKQogCQkJY29udGludWU7Ci0JCWVsc2UgewotCQkJZ29vZCA9IGk7Ci0JCQlicmVhazsKLQkJfQorCQlnb29kID0gaTsKKwkJZ29vZF9zcmNzKys7CiAJfQotCUJVR19PTihpID49IDMpOworCUJVR19PTihnb29kX3NyY3MgPiAxKTsKIAotCXAgPSBibG9ja3NbNS0yXTsKLQlxID0gYmxvY2tzWzUtMV07CisJcCA9IGJsb2Nrc1tkaXNrcy0yXTsKKwlxID0gYmxvY2tzW2Rpc2tzLTFdOwogCWcgPSBibG9ja3NbZ29vZF07CiAKIAkvKiBDb21wdXRlIHN5bmRyb21lIHdpdGggemVybyBmb3IgdGhlIG1pc3NpbmcgZGF0YSBwYWdlcwpAQCAtMjYzLDEwICsyNjQsMTAgQEAKIAkgKiBkZWx0YSBwIGFuZCBkZWx0YSBxCiAJICovCiAJZHAgPSBibG9ja3NbZmFpbGFdOwotCWJsb2Nrc1tmYWlsYV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwlibG9ja3NbZmFpbGFdID0gTlVMTDsKIAlibG9ja3NbZGlza3MtMl0gPSBkcDsKIAlkcSA9IGJsb2Nrc1tmYWlsYl07Ci0JYmxvY2tzW2ZhaWxiXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCWJsb2Nrc1tmYWlsYl0gPSBOVUxMOwogCWJsb2Nrc1tkaXNrcy0xXSA9IGRxOwogCiAJaW5pdF9hc3luY19zdWJtaXQoc3VibWl0LCBBU1lOQ19UWF9GRU5DRSwgdHgsIE5VTEwsIE5VTEwsIHNjcmliYmxlKTsKQEAgLTMyMyw2ICszMjQsOCBAQAogYXN5bmNfcmFpZDZfMmRhdGFfcmVjb3YoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAogCQkJc3RydWN0IHBhZ2UgKipibG9ja3MsIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCiB7CisJaW50IG5vbl96ZXJvX3NyY3MsIGk7CisKIAlCVUdfT04oZmFpbGEgPT0gZmFpbGIpOwogCWlmIChmYWlsYiA8IGZhaWxhKQogCQlzd2FwKGZhaWxhLCBmYWlsYik7CkBAIC0zMzQsMTEgKzMzNywxMyBAQAogCSAqLwogCWlmICghc3VibWl0LT5zY3JpYmJsZSkgewogCQl2b2lkICoqcHRycyA9ICh2b2lkICoqKSBibG9ja3M7Ci0JCWludCBpOwogCiAJCWFzeW5jX3R4X3F1aWVzY2UoJnN1Ym1pdC0+ZGVwZW5kX3R4KTsKIAkJZm9yIChpID0gMDsgaSA8IGRpc2tzOyBpKyspCi0JCQlwdHJzW2ldID0gcGFnZV9hZGRyZXNzKGJsb2Nrc1tpXSk7CisJCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpCisJCQkJcHRyc1tpXSA9ICh2b2lkICopIHJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJCWVsc2UKKwkJCQlwdHJzW2ldID0gcGFnZV9hZGRyZXNzKGJsb2Nrc1tpXSk7CiAKIAkJcmFpZDZfMmRhdGFfcmVjb3YoZGlza3MsIGJ5dGVzLCBmYWlsYSwgZmFpbGIsIHB0cnMpOwogCkBAIC0zNDcsMTkgKzM1MiwzMCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlzd2l0Y2ggKGRpc2tzKSB7Ci0JY2FzZSA0OgorCW5vbl96ZXJvX3NyY3MgPSAwOworCWZvciAoaSA9IDA7IGkgPCBkaXNrcy0yICYmIG5vbl96ZXJvX3NyY3MgPCA0OyBpKyspCisJCWlmIChibG9ja3NbaV0pCisJCQlub25femVyb19zcmNzKys7CisJc3dpdGNoIChub25femVyb19zcmNzKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJLyogVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAyIHNvdXJjZXMgLSB0aGUgZmFpbGVkIGRldmljZXMuICovCisJCUJVRygpOworCisJY2FzZSAyOgogCQkvKiBkbWEgZGV2aWNlcyBkbyBub3QgdW5pZm9ybWx5IHVuZGVyc3RhbmQgYSB6ZXJvIHNvdXJjZSBwcQogCQkgKiBvcGVyYXRpb24gKGluIGNvbnRyYXN0IHRvIHRoZSBzeW5jaHJvbm91cyBjYXNlKSwgc28KLQkJICogZXhwbGljaXRseSBoYW5kbGUgdGhlIDQgZGlzayBzcGVjaWFsIGNhc2UKKwkJICogZXhwbGljaXRseSBoYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIDQgZGlzayBhcnJheSB3aXRoCisJCSAqIGJvdGggZGF0YSBkaXNrcyBtaXNzaW5nLgogCQkgKi8KLQkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfNChieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7Ci0JY2FzZSA1OgorCQlyZXR1cm4gX18yZGF0YV9yZWNvdl80KGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CisJY2FzZSAzOgogCQkvKiBkbWEgZGV2aWNlcyBkbyBub3QgdW5pZm9ybWx5IHVuZGVyc3RhbmQgYSBzaW5nbGUKIAkJICogc291cmNlIHBxIG9wZXJhdGlvbiAoaW4gY29udHJhc3QgdG8gdGhlIHN5bmNocm9ub3VzCi0JCSAqIGNhc2UpLCBzbyBleHBsaWNpdGx5IGhhbmRsZSB0aGUgNSBkaXNrIHNwZWNpYWwgY2FzZQorCQkgKiBjYXNlKSwgc28gZXhwbGljaXRseSBoYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIDUgZGlzaworCQkgKiBhcnJheSB3aXRoIDIgb2YgMyBkYXRhIGRpc2tzIG1pc3NpbmcuCiAJCSAqLwotCQlyZXR1cm4gX18yZGF0YV9yZWNvdl81KGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKKwkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfNShkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOwogCWRlZmF1bHQ6CiAJCXJldHVybiBfXzJkYXRhX3JlY292X24oZGlza3MsIGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKIAl9CkBAIC0zODUsNiArNDAxLDcgQEAKIAlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2JfZm4gPSBzdWJtaXQtPmNiX2ZuOwogCXZvaWQgKmNiX3BhcmFtID0gc3VibWl0LT5jYl9wYXJhbTsKIAl2b2lkICpzY3JpYmJsZSA9IHN1Ym1pdC0+c2NyaWJibGU7CisJaW50IGdvb2Rfc3JjcywgZ29vZCwgaTsKIAlzdHJ1Y3QgcGFnZSAqc3Jjc1syXTsKIAogCXByX2RlYnVnKCIlczogZGlza3M6ICVkIGxlbjogJXp1XG4iLCBfX2Z1bmNfXywgZGlza3MsIGJ5dGVzKTsKQEAgLTM5NCwxMSArNDExLDEzIEBACiAJICovCiAJaWYgKCFzY3JpYmJsZSkgewogCQl2b2lkICoqcHRycyA9ICh2b2lkICoqKSBibG9ja3M7Ci0JCWludCBpOwogCiAJCWFzeW5jX3R4X3F1aWVzY2UoJnN1Ym1pdC0+ZGVwZW5kX3R4KTsKIAkJZm9yIChpID0gMDsgaSA8IGRpc2tzOyBpKyspCi0JCQlwdHJzW2ldID0gcGFnZV9hZGRyZXNzKGJsb2Nrc1tpXSk7CisJCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpCisJCQkJcHRyc1tpXSA9ICh2b2lkKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJCQllbHNlCisJCQkJcHRyc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pOwogCiAJCXJhaWQ2X2RhdGFwX3JlY292KGRpc2tzLCBieXRlcywgZmFpbGEsIHB0cnMpOwogCkBAIC00MDcsNiArNDI2LDIwIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCWdvb2Rfc3JjcyA9IDA7CisJZ29vZCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBkaXNrcy0yOyBpKyspIHsKKwkJaWYgKGkgPT0gZmFpbGEpCisJCQljb250aW51ZTsKKwkJaWYgKGJsb2Nrc1tpXSkgeworCQkJZ29vZCA9IGk7CisJCQlnb29kX3NyY3MrKzsKKwkJCWlmIChnb29kX3NyY3MgPiAxKQorCQkJCWJyZWFrOworCQl9CisJfQorCUJVR19PTihnb29kX3NyY3MgPT0gMCk7CisKIAlwID0gYmxvY2tzW2Rpc2tzLTJdOwogCXEgPSBibG9ja3NbZGlza3MtMV07CiAKQEAgLTQxNCwxNCArNDQ3LDEzIEBACiAJICogVXNlIHRoZSBkZWFkIGRhdGEgcGFnZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgZGVsdGEgcQogCSAqLwogCWRxID0gYmxvY2tzW2ZhaWxhXTsKLQlibG9ja3NbZmFpbGFdID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJYmxvY2tzW2ZhaWxhXSA9IE5VTEw7CiAJYmxvY2tzW2Rpc2tzLTFdID0gZHE7CiAKLQkvKiBpbiB0aGUgNCBkaXNrIGNhc2Ugd2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gYSBzaW5nbGUgc291cmNlCi0JICogbXVsdGlwbGljYXRpb24KKwkvKiBpbiB0aGUgNC1kaXNrIGNhc2Ugd2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gYSBzaW5nbGUgc291cmNlCisJICogbXVsdGlwbGljYXRpb24gd2l0aCB0aGUgb25lIGdvb2QgZGF0YSBibG9jay4KIAkgKi8KLQlpZiAoZGlza3MgPT0gNCkgewotCQlpbnQgZ29vZCA9IGZhaWxhID09IDAgPyAxIDogMDsKKwlpZiAoZ29vZF9zcmNzID09IDEpIHsKIAkJc3RydWN0IHBhZ2UgKmcgPSBibG9ja3NbZ29vZF07CiAKIAkJaW5pdF9hc3luY19zdWJtaXQoc3VibWl0LCBBU1lOQ19UWF9GRU5DRSwgdHgsIE5VTEwsIE5VTEwsCmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKaW5kZXggYjQ1OWE5MC4uNzkxODJkYyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYwpAQCAtNDQsMjAgKzQ0LDIzIEBACiAJdm9pZCAqY2JfcGFyYW1fb3JpZyA9IHN1Ym1pdC0+Y2JfcGFyYW07CiAJZW51bSBhc3luY190eF9mbGFncyBmbGFnc19vcmlnID0gc3VibWl0LT5mbGFnczsKIAllbnVtIGRtYV9jdHJsX2ZsYWdzIGRtYV9mbGFnczsKLQlpbnQgeG9yX3NyY19jbnQ7CisJaW50IHhvcl9zcmNfY250ID0gMDsKIAlkbWFfYWRkcl90IGRtYV9kZXN0OwogCiAJLyogbWFwIHRoZSBkZXN0IGJpZHJlY3Rpb25hbCBpbiBjYXNlIGl0IGlzIHJlLXVzZWQgYXMgYSBzb3VyY2UgKi8KIAlkbWFfZGVzdCA9IGRtYV9tYXBfcGFnZShkbWEtPmRldiwgZGVzdCwgb2Zmc2V0LCBsZW4sIERNQV9CSURJUkVDVElPTkFMKTsKIAlmb3IgKGkgPSAwOyBpIDwgc3JjX2NudDsgaSsrKSB7CiAJCS8qIG9ubHkgbWFwIHRoZSBkZXN0IG9uY2UgKi8KKwkJaWYgKCFzcmNfbGlzdFtpXSkKKwkJCWNvbnRpbnVlOwogCQlpZiAodW5saWtlbHkoc3JjX2xpc3RbaV0gPT0gZGVzdCkpIHsKLQkJCWRtYV9zcmNbaV0gPSBkbWFfZGVzdDsKKwkJCWRtYV9zcmNbeG9yX3NyY19jbnQrK10gPSBkbWFfZGVzdDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWRtYV9zcmNbaV0gPSBkbWFfbWFwX3BhZ2UoZG1hLT5kZXYsIHNyY19saXN0W2ldLCBvZmZzZXQsCi0JCQkJCSAgbGVuLCBETUFfVE9fREVWSUNFKTsKKwkJZG1hX3NyY1t4b3Jfc3JjX2NudCsrXSA9IGRtYV9tYXBfcGFnZShkbWEtPmRldiwgc3JjX2xpc3RbaV0sIG9mZnNldCwKKwkJCQkJCSAgICAgIGxlbiwgRE1BX1RPX0RFVklDRSk7CiAJfQorCXNyY19jbnQgPSB4b3Jfc3JjX2NudDsKIAogCXdoaWxlIChzcmNfY250KSB7CiAJCXN1Ym1pdC0+ZmxhZ3MgPSBmbGFnc19vcmlnOwpAQCAtMTIzLDcgKzEyNiw3IEBACiAJICAgIGludCBzcmNfY250LCBzaXplX3QgbGVuLCBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogewogCWludCBpOwotCWludCB4b3Jfc3JjX2NudDsKKwlpbnQgeG9yX3NyY19jbnQgPSAwOwogCWludCBzcmNfb2ZmID0gMDsKIAl2b2lkICpkZXN0X2J1ZjsKIAl2b2lkICoqc3JjczsKQEAgLTEzNSw4ICsxMzgsOSBAQAogCiAJLyogY29udmVydCB0byBidWZmZXIgcG9pbnRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc3JjX2NudDsgaSsrKQotCQlzcmNzW2ldID0gcGFnZV9hZGRyZXNzKHNyY19saXN0W2ldKSArIG9mZnNldDsKLQorCQlpZiAoc3JjX2xpc3RbaV0pCisJCQlzcmNzW3hvcl9zcmNfY250KytdID0gcGFnZV9hZGRyZXNzKHNyY19saXN0W2ldKSArIG9mZnNldDsKKwlzcmNfY250ID0geG9yX3NyY19jbnQ7CiAJLyogc2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KIAlkZXN0X2J1ZiA9IHBhZ2VfYWRkcmVzcyhkZXN0KSArIG9mZnNldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCBkZDg3MjlkLi45M2QyYzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtMjExLDYgKzIxMSwxOCBAQAogCXNlbGVjdCBBQ1BJX0NPTlRBSU5FUgogCWRlZmF1bHQgeQogCitjb25maWcgQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUgorCXRyaXN0YXRlICJQcm9jZXNzb3IgQWdncmVnYXRvciIKKwlkZXBlbmRzIG9uIEFDUElfUFJPQ0VTU09SCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFg4NgorCWhlbHAKKwkgIEFDUEkgNC4wIGRlZmluZXMgcHJvY2Vzc29yIEFnZ3JlZ2F0b3IsIHdoaWNoIGVuYWJsZXMgT1MgdG8gcGVyZm9ybQorCSAgc3BlY2lmaWMgcHJvY2Vzc29yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgdGhhdCBhcHBsaWVzIHRvIGFsbAorCSAgcHJvY2Vzc29ycyBpbiB0aGUgcGxhdGZvcm0uIEN1cnJlbnRseSBvbmx5IGxvZ2ljYWwgcHJvY2Vzc29yIGlkbGluZworCSAgaXMgZGVmaW5lZCwgd2hpY2ggaXMgdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLiBUaGlzIGRyaXZlcgorCSAgc3VwcG9ydHMgdGhlIG5ldyBkZXZpY2UuCisKIGNvbmZpZyBBQ1BJX1RIRVJNQUwKIAl0cmlzdGF0ZSAiVGhlcm1hbCBab25lIgogCWRlcGVuZHMgb24gQUNQSV9QUk9DRVNTT1IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQppbmRleCA4MmNkNDlkLi43NzAyMTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCkBAIC02MiwzICs2Miw1IEBACiBwcm9jZXNzb3IteQkJCTo9IHByb2Nlc3Nvcl9jb3JlLm8gcHJvY2Vzc29yX3Rocm90dGxpbmcubwogcHJvY2Vzc29yLXkJCQkrPSBwcm9jZXNzb3JfaWRsZS5vIHByb2Nlc3Nvcl90aGVybWFsLm8KIHByb2Nlc3Nvci0kKENPTkZJR19DUFVfRlJFUSkJKz0gcHJvY2Vzc29yX3BlcmZsaWIubworCitvYmotJChDT05GSUdfQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUikgKz0gYWNwaV9wYWQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjLmMgYi9kcml2ZXJzL2FjcGkvYWMuYwppbmRleCA5OGI5NjkwLi5iNmVkNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWMuYworKysgYi9kcml2ZXJzL2FjcGkvYWMuYwpAQCAtMjQ1LDYgKzI0NSw3IEBACiAJCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQoZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLAogCQkJCQkJICBkZXZfbmFtZSgmZGV2aWNlLT5kZXYpLCBldmVudCwKIAkJCQkJCSAgKHUzMikgYWMtPnN0YXRlKTsKKwkJYWNwaV9ub3RpZmllcl9jYWxsX2NoYWluKGRldmljZSwgZXZlbnQsICh1MzIpIGFjLT5zdGF0ZSk7CiAjaWZkZWYgQ09ORklHX0FDUElfU1lTRlNfUE9XRVIKIAkJa29iamVjdF91ZXZlbnQoJmFjLT5jaGFyZ2VyLmRldi0+a29iaiwgS09CSl9DSEFOR0UpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaV9wYWQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX3BhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9wYWQuYwpAQCAtMCwwICsxLDUxNCBAQAorLyoKKyAqIGFjcGlfcGFkLmMgQUNQSSBQcm9jZXNzb3IgQWdncmVnYXRvciBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CisKKyNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9DTEFTUwkicHJvY2Vzc29yX2FnZ3JlZ2F0b3IiCisjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfREVWSUNFX05BTUUgIlByb2Nlc3NvciBBZ2dyZWdhdG9yIgorI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX05PVElGWSAweDgwCitzdGF0aWMgREVGSU5FX01VVEVYKGlzb2xhdGVkX2NwdXNfbG9jayk7CisKKyNkZWZpbmUgTVdBSVRfU1VCU1RBVEVfTUFTSwkoMHhmKQorI2RlZmluZSBNV0FJVF9DU1RBVEVfTUFTSwkoMHhmKQorI2RlZmluZSBNV0FJVF9TVUJTVEFURV9TSVpFCSg0KQorI2RlZmluZSBDUFVJRF9NV0FJVF9MRUFGICg1KQorI2RlZmluZSBDUFVJRDVfRUNYX0VYVEVOU0lPTlNfU1VQUE9SVEVEICgweDEpCisjZGVmaW5lIENQVUlENV9FQ1hfSU5URVJSVVBUX0JSRUFLCSgweDIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwb3dlcl9zYXZpbmdfbXdhaXRfZWF4Oworc3RhdGljIHZvaWQgcG93ZXJfc2F2aW5nX213YWl0X2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OworCXVuc2lnbmVkIGludCBoaWdoZXN0X2NzdGF0ZSA9IDA7CisJdW5zaWduZWQgaW50IGhpZ2hlc3Rfc3ViY3N0YXRlID0gMDsKKwlpbnQgaTsKKworCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01XQUlUKSkKKwkJcmV0dXJuOworCWlmIChib290X2NwdV9kYXRhLmNwdWlkX2xldmVsIDwgQ1BVSURfTVdBSVRfTEVBRikKKwkJcmV0dXJuOworCisJY3B1aWQoQ1BVSURfTVdBSVRfTEVBRiwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKKwlpZiAoIShlY3ggJiBDUFVJRDVfRUNYX0VYVEVOU0lPTlNfU1VQUE9SVEVEKSB8fAorCSAgICAhKGVjeCAmIENQVUlENV9FQ1hfSU5URVJSVVBUX0JSRUFLKSkKKwkJcmV0dXJuOworCisJZWR4ID4+PSBNV0FJVF9TVUJTVEFURV9TSVpFOworCWZvciAoaSA9IDA7IGkgPCA3ICYmIGVkeDsgaSsrLCBlZHggPj49IE1XQUlUX1NVQlNUQVRFX1NJWkUpIHsKKwkJaWYgKGVkeCAmIE1XQUlUX1NVQlNUQVRFX01BU0spIHsKKwkJCWhpZ2hlc3RfY3N0YXRlID0gaTsKKwkJCWhpZ2hlc3Rfc3ViY3N0YXRlID0gZWR4ICYgTVdBSVRfU1VCU1RBVEVfTUFTSzsKKwkJfQorCX0KKwlwb3dlcl9zYXZpbmdfbXdhaXRfZWF4ID0gKGhpZ2hlc3RfY3N0YXRlIDw8IE1XQUlUX1NVQlNUQVRFX1NJWkUpIHwKKwkJKGhpZ2hlc3Rfc3ViY3N0YXRlIC0gMSk7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCisJCWNsb2NrZXZlbnRzX25vdGlmeShDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9PTiwgJmkpOworCisjaWYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19USU1FKSAmJiBkZWZpbmVkKENPTkZJR19YODYpCisJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJLyoKKwkJICogQU1EIEZhbTEwaCBUU0Mgd2lsbCB0aWNrIGluIGFsbAorCQkgKiBDL1AvUzAvUzEgc3RhdGVzIHdoZW4gdGhpcyBiaXQgaXMgc2V0LgorCQkgKi8KKwkJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OT05TVE9QX1RTQykpCisJCQlyZXR1cm47CisKKwkJLypGQUxMIFRIUk9VR0gqLworCWRlZmF1bHQ6CisJCS8qIFRTQyBjb3VsZCBoYWx0IGluIGlkbGUsIHNvIG5vdGlmeSB1c2VycyAqLworCQltYXJrX3RzY191bnN0YWJsZSgiVFNDIGhhbHRzIGluIGlkbGUiKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X3dlaWdodFtOUl9DUFVTXTsKK3N0YXRpYyBpbnQgdHNrX2luX2NwdVtOUl9DUFVTXSA9IHtbMCAuLi4gTlJfQ1BVUy0xXSA9IC0xfTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChwYWRfYnVzeV9jcHVzX2JpdHMsIE5SX0NQVVMpOworc3RhdGljIHZvaWQgcm91bmRfcm9iaW5fY3B1KHVuc2lnbmVkIGludCB0c2tfaW5kZXgpCit7CisJc3RydWN0IGNwdW1hc2sgKnBhZF9idXN5X2NwdXMgPSB0b19jcHVtYXNrKHBhZF9idXN5X2NwdXNfYml0cyk7CisJY3B1bWFza192YXJfdCB0bXA7CisJaW50IGNwdTsKKwl1bnNpZ25lZCBsb25nIG1pbl93ZWlnaHQgPSAtMSwgcHJlZmVycmVkX2NwdTsKKworCWlmICghYWxsb2NfY3B1bWFza192YXIoJnRtcCwgR0ZQX0tFUk5FTCkpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJY3B1bWFza19jbGVhcih0bXApOworCWZvcl9lYWNoX2NwdShjcHUsIHBhZF9idXN5X2NwdXMpCisJCWNwdW1hc2tfb3IodG1wLCB0bXAsIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGNwdSkpOworCWNwdW1hc2tfYW5kbm90KHRtcCwgY3B1X29ubGluZV9tYXNrLCB0bXApOworCS8qIGF2b2lkIEhUIHNpYmlsaW5ncyBpZiBwb3NzaWJsZSAqLworCWlmIChjcHVtYXNrX2VtcHR5KHRtcCkpCisJCWNwdW1hc2tfYW5kbm90KHRtcCwgY3B1X29ubGluZV9tYXNrLCBwYWRfYnVzeV9jcHVzKTsKKwlpZiAoY3B1bWFza19lbXB0eSh0bXApKSB7CisJCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlmb3JfZWFjaF9jcHUoY3B1LCB0bXApIHsKKwkJaWYgKGNwdV93ZWlnaHRbY3B1XSA8IG1pbl93ZWlnaHQpIHsKKwkJCW1pbl93ZWlnaHQgPSBjcHVfd2VpZ2h0W2NwdV07CisJCQlwcmVmZXJyZWRfY3B1ID0gY3B1OworCQl9CisJfQorCisJaWYgKHRza19pbl9jcHVbdHNrX2luZGV4XSAhPSAtMSkKKwkJY3B1bWFza19jbGVhcl9jcHUodHNrX2luX2NwdVt0c2tfaW5kZXhdLCBwYWRfYnVzeV9jcHVzKTsKKwl0c2tfaW5fY3B1W3Rza19pbmRleF0gPSBwcmVmZXJyZWRfY3B1OworCWNwdW1hc2tfc2V0X2NwdShwcmVmZXJyZWRfY3B1LCBwYWRfYnVzeV9jcHVzKTsKKwljcHVfd2VpZ2h0W3ByZWZlcnJlZF9jcHVdKys7CisJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZihwcmVmZXJyZWRfY3B1KSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4aXRfcm91bmRfcm9iaW4odW5zaWduZWQgaW50IHRza19pbmRleCkKK3sKKwlzdHJ1Y3QgY3B1bWFzayAqcGFkX2J1c3lfY3B1cyA9IHRvX2NwdW1hc2socGFkX2J1c3lfY3B1c19iaXRzKTsKKwljcHVtYXNrX2NsZWFyX2NwdSh0c2tfaW5fY3B1W3Rza19pbmRleF0sIHBhZF9idXN5X2NwdXMpOworCXRza19pbl9jcHVbdHNrX2luZGV4XSA9IC0xOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlkbGVfcGN0ID0gNTsgLyogcGVyY2VudGFnZSAqLworc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9yb2Jpbl90aW1lID0gMTA7IC8qIHNlY29uZCAqLworc3RhdGljIGludCBwb3dlcl9zYXZpbmdfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0gey5zY2hlZF9wcmlvcml0eSA9IDF9OworCWludCBkb19zbGVlcDsKKwl1bnNpZ25lZCBpbnQgdHNrX2luZGV4ID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKKwl1NjQgbGFzdF9qaWZmaWVzID0gMDsKKworCXNjaGVkX3NldHNjaGVkdWxlcihjdXJyZW50LCBTQ0hFRF9SUiwgJnBhcmFtKTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWludCBjcHU7CisJCXU2NCBleHBpcmVfdGltZTsKKworCQl0cnlfdG9fZnJlZXplKCk7CisKKwkJLyogcm91bmQgcm9iaW4gdG8gY3B1cyAqLworCQlpZiAobGFzdF9qaWZmaWVzICsgcm91bmRfcm9iaW5fdGltZSAqIEhaIDwgamlmZmllcykgeworCQkJbGFzdF9qaWZmaWVzID0gamlmZmllczsKKwkJCXJvdW5kX3JvYmluX2NwdSh0c2tfaW5kZXgpOworCQl9CisKKwkJZG9fc2xlZXAgPSAwOworCisJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19QT0xMSU5HOworCQkvKgorCQkgKiBUU19QT0xMSU5HLWNsZWFyZWQgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0ZXN0CisJCSAqIE5FRURfUkVTQ0hFRDoKKwkJICovCisJCXNtcF9tYigpOworCisJCWV4cGlyZV90aW1lID0gamlmZmllcyArIEhaICogKDEwMCAtIGlkbGVfcGN0KSAvIDEwMDsKKworCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCQkJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQlJPQURDQVNUX0VOVEVSLAorCQkJCSZjcHUpOworCQkJc3RvcF9jcml0aWNhbF90aW1pbmdzKCk7CisKKwkJCV9fbW9uaXRvcigodm9pZCAqKSZjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzLCAwLCAwKTsKKwkJCXNtcF9tYigpOworCQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCQlfX213YWl0KHBvd2VyX3NhdmluZ19td2FpdF9lYXgsIDEpOworCisJCQlzdGFydF9jcml0aWNhbF90aW1pbmdzKCk7CisJCQljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRVhJVCwKKwkJCQkmY3B1KTsKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKKworCQkJaWYgKGppZmZpZXMgPiBleHBpcmVfdGltZSkgeworCQkJCWRvX3NsZWVwID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CisKKwkJLyoKKwkJICogY3VycmVudCBzY2hlZF9ydCBoYXMgdGhyZXNob2xkIGZvciBydCB0YXNrIHJ1bm5pbmcgdGltZS4KKwkJICogV2hlbiBhIHJ0IHRhc2sgdXNlcyA5NSUgQ1BVIHRpbWUsIHRoZSBydCB0aHJlYWQgd2lsbCBiZQorCQkgKiBzY2hlZHVsZWQgb3V0IGZvciA1JSBDUFUgdGltZSB0byBub3Qgc3RhcnZlIG90aGVyIHRhc2tzLiBCdXQKKwkJICogdGhlIG1lY2hhbmlzbSBvbmx5IHdvcmtzIHdoZW4gYWxsIENQVXMgaGF2ZSBSVCB0YXNrIHJ1bm5pbmcsCisJCSAqIGFzIGlmIG9uZSBDUFUgaGFzbid0IFJUIHRhc2ssIFJUIHRhc2sgZnJvbSBvdGhlciBDUFVzIHdpbGwKKwkJICogYm9ycm93IENQVSB0aW1lIGZyb20gdGhpcyBDUFUgYW5kIGNhdXNlIFJUIHRhc2sgdXNlID4gOTUlCisJCSAqIENQVSB0aW1lLiBUbyBtYWtlICdhdm9pZCBzdGFyYXRpb24nIHdvcmssIHRha2VzIGEgbmFwIGhlcmUuCisJCSAqLworCQlpZiAoZG9fc2xlZXApCisJCQlzY2hlZHVsZV90aW1lb3V0X2tpbGxhYmxlKEhaICogaWRsZV9wY3QgLyAxMDApOworCX0KKworCWV4aXRfcm91bmRfcm9iaW4odHNrX2luZGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHNfdHNrc1tOUl9DUFVTXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHNfdHNrX251bTsKK3N0YXRpYyBpbnQgY3JlYXRlX3Bvd2VyX3NhdmluZ190YXNrKHZvaWQpCit7CisJcHNfdHNrc1twc190c2tfbnVtXSA9IGt0aHJlYWRfcnVuKHBvd2VyX3NhdmluZ190aHJlYWQsCisJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpcHNfdHNrX251bSwKKwkJInBvd2VyX3NhdmluZy8lZCIsIHBzX3Rza19udW0pOworCWlmIChwc190c2tzW3BzX3Rza19udW1dKSB7CisJCXBzX3Rza19udW0rKzsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X3Bvd2VyX3NhdmluZ190YXNrKHZvaWQpCit7CisJaWYgKHBzX3Rza19udW0gPiAwKSB7CisJCXBzX3Rza19udW0tLTsKKwkJa3RocmVhZF9zdG9wKHBzX3Rza3NbcHNfdHNrX251bV0pOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X3Bvd2VyX3NhdmluZ190YXNrX251bSh1bnNpZ25lZCBpbnQgbnVtKQoreworCWlmIChudW0gPiBwc190c2tfbnVtKSB7CisJCXdoaWxlIChwc190c2tfbnVtIDwgbnVtKSB7CisJCQlpZiAoY3JlYXRlX3Bvd2VyX3NhdmluZ190YXNrKCkpCisJCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIGlmIChudW0gPCBwc190c2tfbnVtKSB7CisJCXdoaWxlIChwc190c2tfbnVtID4gbnVtKQorCQkJZGVzdHJveV9wb3dlcl9zYXZpbmdfdGFzaygpOworCX0KK30KKworc3RhdGljIGludCBhY3BpX3BhZF9pZGxlX2NwdXModW5zaWduZWQgaW50IG51bV9jcHVzKQoreworCWdldF9vbmxpbmVfY3B1cygpOworCisJbnVtX2NwdXMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG51bV9jcHVzLCBudW1fb25saW5lX2NwdXMoKSk7CisJc2V0X3Bvd2VyX3NhdmluZ190YXNrX251bShudW1fY3B1cyk7CisKKwlwdXRfb25saW5lX2NwdXMoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQzMl90IGFjcGlfcGFkX2lkbGVfY3B1c19udW0odm9pZCkKK3sKKwlyZXR1cm4gcHNfdHNrX251bTsKK30KKworc3RhdGljIHNzaXplX3QgYWNwaV9wYWRfcnJ0aW1lX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBudW07CisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJm51bSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChudW0gPCAxIHx8IG51bSA+PSAxMDApCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJcm91bmRfcm9iaW5fdGltZSA9IG51bTsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhY3BpX3BhZF9ycnRpbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWQiLCByb3VuZF9yb2Jpbl90aW1lKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihycnRpbWUsIFNfSVJVR098U19JV1VTUiwKKwlhY3BpX3BhZF9ycnRpbWVfc2hvdywKKwlhY3BpX3BhZF9ycnRpbWVfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhY3BpX3BhZF9pZGxlcGN0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBudW07CisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJm51bSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChudW0gPCAxIHx8IG51bSA+PSAxMDApCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJaWRsZV9wY3QgPSBudW07CisJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgYWNwaV9wYWRfaWRsZXBjdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZCIsIGlkbGVfcGN0KTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihpZGxlcGN0LCBTX0lSVUdPfFNfSVdVU1IsCisJYWNwaV9wYWRfaWRsZXBjdF9zaG93LAorCWFjcGlfcGFkX2lkbGVwY3Rfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhY3BpX3BhZF9pZGxlY3B1c19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgbnVtOworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZudW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCWFjcGlfcGFkX2lkbGVfY3B1cyhudW0pOworCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX2lkbGVjcHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGNwdW1hc2tfc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAorCQl0b19jcHVtYXNrKHBhZF9idXN5X2NwdXNfYml0cykpOworfQorc3RhdGljIERFVklDRV9BVFRSKGlkbGVjcHVzLCBTX0lSVUdPfFNfSVdVU1IsCisJYWNwaV9wYWRfaWRsZWNwdXNfc2hvdywKKwlhY3BpX3BhZF9pZGxlY3B1c19zdG9yZSk7CisKK3N0YXRpYyBpbnQgYWNwaV9wYWRfYWRkX3N5c2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZWNwdXMpOworCWlmIChyZXN1bHQpCisJCXJldHVybiAtRU5PREVWOworCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pZGxlcGN0KTsKKwlpZiAocmVzdWx0KSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pZGxlY3B1cyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfcnJ0aW1lKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pZGxlY3B1cyk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pZGxlcGN0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhY3BpX3BhZF9yZW1vdmVfc3lzZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVjcHVzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZXBjdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX3JydGltZSk7Cit9CisKKy8qIFF1ZXJ5IGZpcm13YXJlIGhvdyBtYW55IENQVXMgc2hvdWxkIGJlIGlkbGUgKi8KK3N0YXRpYyBpbnQgYWNwaV9wYWRfcHVyKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50ICpudW1fY3B1cykKK3sKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5pb24gYWNwaV9vYmplY3QgKnBhY2thZ2U7CisJaW50IHJldiwgbnVtLCByZXQgPSAtRUlOVkFMOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX1BVUiIsIE5VTEwsICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGFja2FnZSA9IGJ1ZmZlci5wb2ludGVyOworCWlmIChwYWNrYWdlLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFIHx8IHBhY2thZ2UtPnBhY2thZ2UuY291bnQgIT0gMikKKwkJZ290byBvdXQ7CisJcmV2ID0gcGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1swXS5pbnRlZ2VyLnZhbHVlOworCW51bSA9IHBhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHNbMV0uaW50ZWdlci52YWx1ZTsKKwlpZiAocmV2ICE9IDEpCisJCWdvdG8gb3V0OworCSpudW1fY3B1cyA9IG51bTsKKwlyZXQgPSAwOworb3V0OgorCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBOb3RpZnkgZmlybXdhcmUgaG93IG1hbnkgQ1BVcyBhcmUgaWRsZSAqLworc3RhdGljIHZvaWQgYWNwaV9wYWRfb3N0KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHN0YXQsCisJdWludDMyX3QgaWRsZV9jcHVzKQoreworCXVuaW9uIGFjcGlfb2JqZWN0IHBhcmFtc1szXSA9IHsKKwkJey50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVIsfSwKKwkJey50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVIsfSwKKwkJey50eXBlID0gQUNQSV9UWVBFX0JVRkZFUix9LAorCX07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJnX2xpc3QgPSB7MywgcGFyYW1zfTsKKworCXBhcmFtc1swXS5pbnRlZ2VyLnZhbHVlID0gQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9OT1RJRlk7CisJcGFyYW1zWzFdLmludGVnZXIudmFsdWUgPSAgc3RhdDsKKwlwYXJhbXNbMl0uYnVmZmVyLmxlbmd0aCA9IDQ7CisJcGFyYW1zWzJdLmJ1ZmZlci5wb2ludGVyID0gKHZvaWQgKikmaWRsZV9jcHVzOworCWFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9PU1QiLCAmYXJnX2xpc3QsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBhY3BpX3BhZF9oYW5kbGVfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlpbnQgbnVtX2NwdXMsIHJldDsKKwl1aW50MzJfdCBpZGxlX2NwdXM7CisKKwltdXRleF9sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCWlmIChhY3BpX3BhZF9wdXIoaGFuZGxlLCAmbnVtX2NwdXMpKSB7CisJCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlyZXQgPSBhY3BpX3BhZF9pZGxlX2NwdXMobnVtX2NwdXMpOworCWlkbGVfY3B1cyA9IGFjcGlfcGFkX2lkbGVfY3B1c19udW0oKTsKKwlpZiAoIXJldCkKKwkJYWNwaV9wYWRfb3N0KGhhbmRsZSwgMCwgaWRsZV9jcHVzKTsKKwllbHNlCisJCWFjcGlfcGFkX29zdChoYW5kbGUsIDEsIDApOworCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgYWNwaV9wYWRfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LAorCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBkYXRhOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9OT1RJRlk6CisJCWFjcGlfcGFkX2hhbmRsZV9ub3RpZnkoaGFuZGxlKTsKKwkJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChkZXZpY2UsIGV2ZW50LCAwKTsKKwkJYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChkZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCisJCQlkZXZfbmFtZSgmZGV2aWNlLT5kZXYpLCBldmVudCwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkciVW5zdXBwb3J0ZWQgZXZlbnQgWzB4JXhdXG4iLCBldmVudCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBhY3BpX3BhZF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9ERVZJQ0VfTkFNRSk7CisJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfQ0xBU1MpOworCisJaWYgKGFjcGlfcGFkX2FkZF9zeXNmcyhkZXZpY2UpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihkZXZpY2UtPmhhbmRsZSwKKwkJQUNQSV9ERVZJQ0VfTk9USUZZLCBhY3BpX3BhZF9ub3RpZnksIGRldmljZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWFjcGlfcGFkX3JlbW92ZV9zeXNmcyhkZXZpY2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3BpX3BhZF9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCisJaW50IHR5cGUpCit7CisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlhY3BpX3BhZF9pZGxlX2NwdXMoMCk7CisJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCisJYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCisJCUFDUElfREVWSUNFX05PVElGWSwgYWNwaV9wYWRfbm90aWZ5KTsKKwlhY3BpX3BhZF9yZW1vdmVfc3lzZnMoZGV2aWNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBwYWRfZGV2aWNlX2lkc1tdID0geworCXsiQUNQSTAwMEMiLCAwfSwKKwl7IiIsIDB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgcGFkX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfcGFkX2RyaXZlciA9IHsKKwkubmFtZSA9ICJwcm9jZXNzb3JfYWdncmVnYXRvciIsCisJLmNsYXNzID0gQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9DTEFTUywKKwkuaWRzID0gcGFkX2RldmljZV9pZHMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGFjcGlfcGFkX2FkZCwKKwkJLnJlbW92ZSA9IGFjcGlfcGFkX3JlbW92ZSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWNwaV9wYWRfaW5pdCh2b2lkKQoreworCXBvd2VyX3NhdmluZ19td2FpdF9pbml0KCk7CisJaWYgKHBvd2VyX3NhdmluZ19td2FpdF9lYXggPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3BhZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWNwaV9wYWRfZXhpdCh2b2lkKQoreworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3BhZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhY3BpX3BhZF9pbml0KTsKK21vZHVsZV9leGl0KGFjcGlfcGFkX2V4aXQpOworTU9EVUxFX0FVVEhPUigiU2hhb2h1YSBMaTxzaGFvaHVhLmxpQGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUNQSSBQcm9jZXNzb3IgQWdncmVnYXRvciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaAppbmRleCA4ZTY3OWVmLi5hNDQ3MWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCkBAIC0xMDMsOSArMTAzLDkgQEAKIAogI2RlZmluZSBBQ1BJX01BWF9SRUZFUkVOQ0VfQ09VTlQgICAgICAgIDB4MTAwMAogCi0vKiBTaXplIG9mIGNhY2hlZCBtZW1vcnkgbWFwcGluZyBmb3Igc3lzdGVtIG1lbW9yeSBvcGVyYXRpb24gcmVnaW9uICovCisvKiBEZWZhdWx0IHBhZ2Ugc2l6ZSBmb3IgdXNlIGluIG1hcHBpbmcgbWVtb3J5IGZvciBvcGVyYXRpb24gcmVnaW9ucyAqLwogCi0jZGVmaW5lIEFDUElfU1lTTUVNX1JFR0lPTl9XSU5ET1dfU0laRSAgNDA5NgorI2RlZmluZSBBQ1BJX0RFRkFVTFRfUEFHRV9TSVpFICAgICAgICAgIDQwOTYJLyogTXVzdCBiZSBwb3dlciBvZiAyICovCiAKIC8qIG93bmVyX2lkIHRyYWNraW5nLiA4IGVudHJpZXMgYWxsb3dzIGZvciAyNTUgb3duZXJfaWRzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYwppbmRleCAzYTU0YjczLi4yYmQ4M2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCkBAIC03Nyw3ICs3Nyw4IEBACiAJdm9pZCAqbG9naWNhbF9hZGRyX3B0ciA9IE5VTEw7CiAJc3RydWN0IGFjcGlfbWVtX3NwYWNlX2NvbnRleHQgKm1lbV9pbmZvID0gcmVnaW9uX2NvbnRleHQ7CiAJdTMyIGxlbmd0aDsKLQlhY3BpX3NpemUgd2luZG93X3NpemU7CisJYWNwaV9zaXplIG1hcF9sZW5ndGg7CisJYWNwaV9zaXplIHBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aDsKICNpZmRlZiBBQ1BJX01JU0FMSUdOTUVOVF9OT1RfU1VQUE9SVEVECiAJdTMyIHJlbWFpbmRlcjsKICNlbmRpZgpAQCAtMTQ0LDI1ICsxNDUsMzkgQEAKIAkJfQogCiAJCS8qCi0JCSAqIERvbid0IGF0dGVtcHQgdG8gbWFwIG1lbW9yeSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgcmVnaW9uLCBhbmQKLQkJICogY29uc3RyYWluIHRoZSBtYXhpbXVtIG1hcHBpbmcgc2l6ZSB0byBzb21ldGhpbmcgcmVhc29uYWJsZS4KKwkJICogQXR0ZW1wdCB0byBtYXAgZnJvbSB0aGUgcmVxdWVzdGVkIGFkZHJlc3MgdG8gdGhlIGVuZCBvZiB0aGUgcmVnaW9uLgorCQkgKiBIb3dldmVyLCB3ZSB3aWxsIG5ldmVyIG1hcCBtb3JlIHRoYW4gb25lIHBhZ2UsIG5vciB3aWxsIHdlIGNyb3NzCisJCSAqIGEgcGFnZSBib3VuZGFyeS4KIAkJICovCi0JCXdpbmRvd19zaXplID0gKGFjcGlfc2l6ZSkKKwkJbWFwX2xlbmd0aCA9IChhY3BpX3NpemUpCiAJCSAgICAoKG1lbV9pbmZvLT5hZGRyZXNzICsgbWVtX2luZm8tPmxlbmd0aCkgLSBhZGRyZXNzKTsKIAotCQlpZiAod2luZG93X3NpemUgPiBBQ1BJX1NZU01FTV9SRUdJT05fV0lORE9XX1NJWkUpIHsKLQkJCXdpbmRvd19zaXplID0gQUNQSV9TWVNNRU1fUkVHSU9OX1dJTkRPV19TSVpFOworCQkvKgorCQkgKiBJZiBtYXBwaW5nIHRoZSBlbnRpcmUgcmVtYWluaW5nIHBvcnRpb24gb2YgdGhlIHJlZ2lvbiB3aWxsIGNyb3NzCisJCSAqIGEgcGFnZSBib3VuZGFyeSwganVzdCBtYXAgdXAgdG8gdGhlIHBhZ2UgYm91bmRhcnksIGRvIG5vdCBjcm9zcy4KKwkJICogT24gc29tZSBzeXN0ZW1zLCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkgd2hpbGUgbWFwcGluZyByZWdpb25zCisJCSAqIGNhbiBjYXVzZSB3YXJuaW5ncyBpZiB0aGUgcGFnZXMgaGF2ZSBkaWZmZXJlbnQgYXR0cmlidXRlcworCQkgKiBkdWUgdG8gcmVzb3VyY2UgbWFuYWdlbWVudAorCQkgKi8KKwkJcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoID0KKwkJICAgIEFDUElfUk9VTkRfVVAoYWRkcmVzcywgQUNQSV9ERUZBVUxUX1BBR0VfU0laRSkgLSBhZGRyZXNzOworCisJCWlmICghcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoKSB7CisJCQlwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGggPSBBQ1BJX0RFRkFVTFRfUEFHRV9TSVpFOworCQl9CisKKwkJaWYgKG1hcF9sZW5ndGggPiBwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGgpIHsKKwkJCW1hcF9sZW5ndGggPSBwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGg7CiAJCX0KIAogCQkvKiBDcmVhdGUgYSBuZXcgbWFwcGluZyBzdGFydGluZyBhdCB0aGUgYWRkcmVzcyBnaXZlbiAqLwogCi0JCW1lbV9pbmZvLT5tYXBwZWRfbG9naWNhbF9hZGRyZXNzID0KLQkJCWFjcGlfb3NfbWFwX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBhZGRyZXNzLCB3aW5kb3dfc2l6ZSk7CisJCW1lbV9pbmZvLT5tYXBwZWRfbG9naWNhbF9hZGRyZXNzID0gYWNwaV9vc19tYXBfbWVtb3J5KChhY3BpX3BoeXNpY2FsX2FkZHJlc3MpIGFkZHJlc3MsIG1hcF9sZW5ndGgpOwogCQlpZiAoIW1lbV9pbmZvLT5tYXBwZWRfbG9naWNhbF9hZGRyZXNzKSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJCSAgICAiQ291bGQgbm90IG1hcCBtZW1vcnkgYXQgJTguOFglOC44WCwgc2l6ZSAlWCIsCiAJCQkJICAgIEFDUElfRk9STUFUX05BVElWRV9VSU5UKGFkZHJlc3MpLAotCQkJCSAgICAodTMyKSB3aW5kb3dfc2l6ZSkpOworCQkJCSAgICAodTMyKSBtYXBfbGVuZ3RoKSk7CiAJCQltZW1faW5mby0+bWFwcGVkX2xlbmd0aCA9IDA7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAkJfQpAQCAtMTcwLDcgKzE4NSw3IEBACiAJCS8qIFNhdmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYW5kIG1hcHBpbmcgc2l6ZSAqLwogCiAJCW1lbV9pbmZvLT5tYXBwZWRfcGh5c2ljYWxfYWRkcmVzcyA9IGFkZHJlc3M7Ci0JCW1lbV9pbmZvLT5tYXBwZWRfbGVuZ3RoID0gd2luZG93X3NpemU7CisJCW1lbV9pbmZvLT5tYXBwZWRfbGVuZ3RoID0gbWFwX2xlbmd0aDsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IDEzNWZiZmUuLjc0MTE5MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYworKysgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTk0LDM2ICs5NCwzMyBAQAogCiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX2dldF9kZXZpY2UpOwogCithY3BpX3N0YXR1cyBhY3BpX2J1c19nZXRfc3RhdHVzX2hhbmRsZShhY3BpX2hhbmRsZSBoYW5kbGUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc3RhKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfU1RBIiwgTlVMTCwgc3RhKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCXJldHVybiBBRV9PSzsKKworCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKSB7CisJCSpzdGEgPSBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCB8IEFDUElfU1RBX0RFVklDRV9FTkFCTEVEIHwKKwkJICAgICAgIEFDUElfU1RBX0RFVklDRV9VSSAgICAgIHwgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HOworCQlyZXR1cm4gQUVfT0s7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKIGludCBhY3BpX2J1c19nZXRfc3RhdHVzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGEgPSAwOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhOwogCisJc3RhdHVzID0gYWNwaV9idXNfZ2V0X3N0YXR1c19oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICZzdGEpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIEV2YWx1YXRlIF9TVEEgaWYgcHJlc2VudC4KLQkgKi8KLQlpZiAoZGV2aWNlLT5mbGFncy5keW5hbWljX3N0YXR1cykgewotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRldmljZS0+aGFuZGxlLCAiX1NUQSIsIE5VTEwsICZzdGEpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykgPSAoaW50KXN0YTsKLQl9Ci0KLQkvKgotCSAqIEFjY29yZGluZyB0byBBQ1BJIHNwZWMgc29tZSBkZXZpY2UgY2FuIGJlIHByZXNlbnQgYW5kIGZ1bmN0aW9uYWwKLQkgKiBldmVuIGlmIHRoZSBwYXJlbnQgaXMgbm90IHByZXNlbnQgYnV0IGZ1bmN0aW9uYWwuCi0JICogSW4gc3VjaCBjb25kaXRpb25zIHRoZSBjaGlsZCBkZXZpY2Ugc2hvdWxkIG5vdCBpbmhlcml0IHRoZSBzdGF0dXMKLQkgKiBmcm9tIHRoZSBwYXJlbnQuCi0JICovCi0JZWxzZQotCQlTVFJVQ1RfVE9fSU5UKGRldmljZS0+c3RhdHVzKSA9Ci0JCSAgICBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCB8IEFDUElfU1RBX0RFVklDRV9FTkFCTEVEIHwKLQkJICAgIEFDUElfU1RBX0RFVklDRV9VSSAgICAgIHwgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HOworCVNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpID0gKGludCkgc3RhOwogCiAJaWYgKGRldmljZS0+c3RhdHVzLmZ1bmN0aW9uYWwgJiYgIWRldmljZS0+c3RhdHVzLnByZXNlbnQpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRGV2aWNlIFslc10gc3RhdHVzIFslMDh4XTogIgpAQCAtMTM1LDEwICsxMzIsOCBAQAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkRldmljZSBbJXNdIHN0YXR1cyBbJTA4eF1cbiIsCiAJCQkgIGRldmljZS0+cG5wLmJ1c19pZCwKIAkJCSAgKHUzMikgU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykpKTsKLQogCXJldHVybiAwOwogfQotCiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX2dldF9zdGF0dXMpOwogCiB2b2lkIGFjcGlfYnVzX3ByaXZhdGVfZGF0YV9oYW5kbGVyKGFjcGlfaGFuZGxlIGhhbmRsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXR0b24uYyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwppbmRleCA5MzM1Yjg3Li4wYzljNmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCkBAIC0yNTEsNiArMjUxLDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBsb25nIHN0YXRlOwogCisJaWYgKCFsaWRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihsaWRfZGV2aWNlLT5oYW5kbGUsICJfTElEIiwgTlVMTCwKIAkJCQkgICAgICAgJnN0YXRlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCAzYTJjZmVmLi43MzM4YjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlcGVuZGVudF9kZXZpY2VzOwogCXN0cnVjdCBsaXN0X2hlYWQgaG90cGx1Z19kZXZpY2VzOwogCi0Jc3RydWN0IGxpc3RfaGVhZCBzaWJpbGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNpYmxpbmc7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZG9ja19kZXZpY2U7CiB9Owogc3RhdGljIExJU1RfSEVBRChkb2NrX3N0YXRpb25zKTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogCiAJaWYgKGlzX2RvY2soaGFuZGxlKSkKIAkJcmV0dXJuIDE7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2libGluZykgewogCQlpZiAoZmluZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBoYW5kbGUpKQogCQkJcmV0dXJuIDE7CiAJfQpAQCAtNjE5LDcgKzYxOSw3IEBACiAJICogbWFrZSBzdXJlIHRoaXMgaGFuZGxlIGlzIGZvciBhIGRldmljZSBkZXBlbmRlbnQgb24gdGhlIGRvY2ssCiAJICogdGhpcyB3b3VsZCBpbmNsdWRlIHRoZSBkb2NrIHN0YXRpb24gaXRzZWxmCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2libGluZykgewogCQkvKgogCQkgKiBBbiBBVEEgYmF5IGNhbiBiZSBpbiBhIGRvY2sgYW5kIGl0c2VsZiBjYW4gYmUgZWplY3RlZAogCQkgKiBzZXBlcmF0ZWx5LCBzbyB0aGVyZSBhcmUgdHdvICdkb2NrIHN0YXRpb25zJyB3aGljaCBuZWVkIHRoZQpAQCAtNjUxLDcgKzY1MSw3IEBACiAJaWYgKCFkb2NrX3N0YXRpb25fY291bnQpCiAJCXJldHVybjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpIHsKIAkJZGQgPSBmaW5kX2RvY2tfZGVwZW5kZW50X2RldmljZShkb2NrX3N0YXRpb24sIGhhbmRsZSk7CiAJCWlmIChkZCkKIAkJCWRvY2tfZGVsX2hvdHBsdWdfZGV2aWNlKGRvY2tfc3RhdGlvbiwgZGQpOwpAQCAtNzg3LDcgKzc4Nyw3IEBACiAJaWYgKGV2ZW50ICE9IEFDUElfTk9USUZZX0JVU19DSEVDSyAmJiBldmVudCAhPSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0sKIAkgICAmJiBldmVudCAhPSBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUKQogCQlyZXR1cm4gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmlsaW5nKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJsaW5nKSB7CiAJCWlmIChkb2NrX3N0YXRpb24tPmhhbmRsZSA9PSBoYW5kbGUpIHsKIAkJCXN0cnVjdCBkb2NrX2RhdGEgKmRvY2tfZGF0YTsKIApAQCAtOTU4LDcgKzk1OCw3IEBACiAJZG9ja19zdGF0aW9uLT5sYXN0X2RvY2tfdGltZSA9IGppZmZpZXMgLSBIWjsKIAlJTklUX0xJU1RfSEVBRCgmZG9ja19zdGF0aW9uLT5kZXBlbmRlbnRfZGV2aWNlcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+aG90cGx1Z19kZXZpY2VzKTsKLQlJTklUX0xJU1RfSEVBRCgmZG9ja19zdGF0aW9uLT5zaWJpbGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+c2libGluZyk7CiAJc3Bpbl9sb2NrX2luaXQoJmRvY2tfc3RhdGlvbi0+ZGRfbG9jayk7CiAJbXV0ZXhfaW5pdCgmZG9ja19zdGF0aW9uLT5ocF9sb2NrKTsKIAlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZkb2NrX25vdGlmaWVyX2xpc3QpOwpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAKIAlhZGRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGRvY2tfc3RhdGlvbiwgZGQpOwogCiAJZG9ja19zdGF0aW9uX2NvdW50Kys7Ci0JbGlzdF9hZGQoJmRvY2tfc3RhdGlvbi0+c2liaWxpbmcsICZkb2NrX3N0YXRpb25zKTsKKwlsaXN0X2FkZCgmZG9ja19zdGF0aW9uLT5zaWJsaW5nLCAmZG9ja19zdGF0aW9ucyk7CiAJcmV0dXJuIDA7CiAKIGRvY2tfYWRkX2Vycl91bnJlZ2lzdGVyOgpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAKIAlzdHJ1Y3QgZG9ja19zdGF0aW9uICp0bXA7CiAKIAl1bnJlZ2lzdGVyX2FjcGlfYnVzX25vdGlmaWVyKCZkb2NrX2FjcGlfbm90aWZpZXIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkb2NrX3N0YXRpb24sIHRtcCwgJmRvY2tfc3RhdGlvbnMsIHNpYmlsaW5nKQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkb2NrX3N0YXRpb24sIHRtcCwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpCiAJCWRvY2tfcmVtb3ZlKGRvY2tfc3RhdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9lYy5jIGIvZHJpdmVycy9hY3BpL2VjLmMKaW5kZXggZjcwNzk2MC4uYmFlZjI4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2VjLmMKQEAgLTExOSw2ICsxMTksOCBAQAogfSAqYm9vdF9lYywgKmZpcnN0X2VjOwogCiBzdGF0aWMgaW50IEVDX0ZMQUdTX01TSTsgLyogT3V0LW9mLXNwZWMgTVNJIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBpbnQgRUNfRkxBR1NfVkFMSURBVEVfRUNEVDsgLyogQVNVU3RlYyBFQ0RUcyBuZWVkIHRvIGJlIHZhbGlkYXRlZCAqLworc3RhdGljIGludCBFQ19GTEFHU19TS0lQX0RTRFRfU0NBTjsgLyogTm90IGFsbCBCSU9TIHN1cnZpdmUgZWFybHkgRFNEVCBzY2FuICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uIE1hbmFnZW1lbnQKQEAgLTIzMiwxMCArMjM0LDggQEAKIAkJCX0KIAkJCWFkdmFuY2VfdHJhbnNhY3Rpb24oZWMsIGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpKTsKIAkJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVsYXkpKTsKLQkJaWYgKCFlYy0+Y3Vyci0+aXJxX2NvdW50IHx8Ci0JCSAgICAoYWNwaV9lY19yZWFkX3N0YXR1cyhlYykgJiBBQ1BJX0VDX0ZMQUdfSUJGKSkKKwkJaWYgKGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpICYgQUNQSV9FQ19GTEFHX0lCRikKIAkJCWJyZWFrOwotCQkvKiB0cnkgcmVzdGFydCBjb21tYW5kIGlmIHdlIGdldCBhbnkgZmFsc2UgaW50ZXJydXB0cyAqLwogCQlwcl9kZWJ1ZyhQUkVGSVggImNvbnRyb2xsZXIgcmVzZXQsIHJlc3RhcnQgdHJhbnNhY3Rpb25cbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWMtPmN1cnJfbG9jaywgZmxhZ3MpOwogCQlzdGFydF90cmFuc2FjdGlvbihlYyk7CkBAIC04OTksNiArODk5LDQ0IEBACiAJeyIiLCAwfSwKIH07CiAKKy8qIFNvbWUgQklPUyBkbyBub3Qgc3Vydml2ZSBlYXJseSBEU0RUIHNjYW4sIHNraXAgaXQgKi8KK3N0YXRpYyBpbnQgZWNfc2tpcF9kc2R0X3NjYW4oY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCUVDX0ZMQUdTX1NLSVBfRFNEVF9TQ0FOID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyogQVNVU3RlayBvZnRlbiBzdXBwbGllcyB1cyB3aXRoIGJyb2tlbiBFQ0RULCB2YWxpZGF0ZSBpdCAqLworc3RhdGljIGludCBlY192YWxpZGF0ZV9lY2R0KGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlFQ19GTEFHU19WQUxJREFURV9FQ0RUID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyogTVNJIEVDIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LCBlbmFibGUgaXQgKi8KK3N0YXRpYyBpbnQgZWNfZmxhZ19tc2koY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCUVDX0ZMQUdTX01TSSA9IDE7CisJRUNfRkxBR1NfVkFMSURBVEVfRUNEVCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIGVjX2RtaV90YWJsZVtdID0geworCXsKKwllY19za2lwX2RzZHRfc2NhbiwgIkNvbXBhbCBKRkw5MiIsIHsKKwlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiQ09NUEFMIiksCisJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiSkZMOTIiKSB9LCBOVUxMfSwKKwl7CisJZWNfZmxhZ19tc2ksICJNU0kgaGFyZHdhcmUiLCB7CisJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIk1pY3JvLVN0YXIiKSwKKwlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVkVORE9SLCAiTUlDUk8tU3RhciIpIH0sIE5VTEx9LAorCXsKKwllY192YWxpZGF0ZV9lY2R0LCAiQVNVUyBoYXJkd2FyZSIsIHsKKwlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiQVNVUyIpIH0sIE5VTEx9LAorCXt9LAorfTsKKworCiBpbnQgX19pbml0IGFjcGlfZWNfZWNkdF9wcm9iZSh2b2lkKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKQEAgLTkxMSwxMSArOTQ5LDcgQEAKIAkvKgogCSAqIEdlbmVyYXRlIGEgYm9vdCBlYyBjb250ZXh0CiAJICovCi0JaWYgKGRtaV9uYW1lX2luX3ZlbmRvcnMoIk1pY3JvLVN0YXIiKSB8fAotCSAgICBkbWlfbmFtZV9pbl92ZW5kb3JzKCJOb3RlYm9vayIpKSB7Ci0JCXByX2luZm8oUFJFRklYICJFbmFibGluZyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgRUMgZnJvbSBNU0kuXG4iKTsKLQkJRUNfRkxBR1NfTVNJID0gMTsKLQl9CisJZG1pX2NoZWNrX3N5c3RlbShlY19kbWlfdGFibGUpOwogCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX0VDRFQsIDEsCiAJCQkJKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmZWNkdF9wdHIpOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewpAQCAtOTI2LDcgKzk2MCw3IEBACiAJCWJvb3RfZWMtPmhhbmRsZSA9IEFDUElfUk9PVF9PQkpFQ1Q7CiAJCWFjcGlfZ2V0X2hhbmRsZShBQ1BJX1JPT1RfT0JKRUNULCBlY2R0X3B0ci0+aWQsICZib290X2VjLT5oYW5kbGUpOwogCQkvKiBEb24ndCB0cnVzdCBFQ0RULCB3aGljaCBjb21lcyBmcm9tIEFTVVNUZWsgKi8KLQkJaWYgKCFkbWlfbmFtZV9pbl92ZW5kb3JzKCJBU1VTIikgJiYgRUNfRkxBR1NfTVNJID09IDApCisJCWlmICghRUNfRkxBR1NfVkFMSURBVEVfRUNEVCkKIAkJCWdvdG8gaW5zdGFsbDsKIAkJc2F2ZWRfZWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9lYyksIEdGUF9LRVJORUwpOwogCQlpZiAoIXNhdmVkX2VjKQpAQCAtOTM0LDYgKzk2OCwxMCBAQAogCQltZW1jcHkoc2F2ZWRfZWMsIGJvb3RfZWMsIHNpemVvZihzdHJ1Y3QgYWNwaV9lYykpOwogCS8qIGZhbGwgdGhyb3VnaCAqLwogCX0KKworCWlmIChFQ19GTEFHU19TS0lQX0RTRFRfU0NBTikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAkvKiBUaGlzIHdvcmthcm91bmQgaXMgbmVlZGVkIG9ubHkgb24gc29tZSBicm9rZW4gbWFjaGluZXMsCiAJICogd2hpY2ggcmVxdWlyZSBlYXJseSBFQywgYnV0IGZhaWwgdG8gcHJvdmlkZSBFQ0RUICovCiAJcHJpbnRrKEtFUk5fREVCVUcgUFJFRklYICJMb29rIHVwIEVDIGluIERTRFRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IDU2MzNiODYuLjdjMWM1OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTExNjEsNyArMTE2MSwxMyBAQAogCQkJICAgICAgIHJlc19saXN0X2VsZW0tPm5hbWUsCiAJCQkgICAgICAgKGxvbmcgbG9uZykgcmVzX2xpc3RfZWxlbS0+c3RhcnQsCiAJCQkgICAgICAgKGxvbmcgbG9uZykgcmVzX2xpc3RfZWxlbS0+ZW5kKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIkFDUEk6IERldmljZSBuZWVkcyBhbiBBQ1BJIGRyaXZlclxuIik7CisJCQlpZiAoYWNwaV9lbmZvcmNlX3Jlc291cmNlcyA9PSBFTkZPUkNFX1JFU09VUkNFU19MQVgpCisJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJBQ1BJOiBUaGlzIGNvbmZsaWN0IG1heSIKKwkJCQkgICAgICAgIiBjYXVzZSByYW5kb20gcHJvYmxlbXMgYW5kIHN5c3RlbSIKKwkJCQkgICAgICAgIiBpbnN0YWJpbGl0eVxuIik7CisJCQlwcmludGsoS0VSTl9JTkZPICJBQ1BJOiBJZiBhbiBBQ1BJIGRyaXZlciBpcyBhdmFpbGFibGUiCisJCQkgICAgICAgIiBmb3IgdGhpcyBkZXZpY2UsIHlvdSBzaG91bGQgdXNlIGl0IGluc3RlYWQgb2YiCisJCQkgICAgICAgIiB0aGUgbmF0aXZlIGRyaXZlclxuIik7CiAJCX0KIAkJaWYgKGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgPT0gRU5GT1JDRV9SRVNPVVJDRVNfU1RSSUNUKQogCQkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggMzExMjIyMS4uMWFmODA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTM4OSw2ICszODksMTcgQEAKIAogCQlwYnVzID0gcGRldi0+c3Vib3JkaW5hdGU7CiAJCXBjaV9kZXZfcHV0KHBkZXYpOworCisJCS8qCisJCSAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmb3IgYSBub24tUENJIGRldmljZSB0aGF0IGhhcyBhCisJCSAqIFBDSSBwYXJlbnQgKGVnLiBhIGRpc2sgdW5kZXIgYSBQQ0kgU0FUQSBjb250cm9sbGVyKS4gIEluIHRoYXQKKwkJICogY2FzZSBwZGV2LT5zdWJvcmRpbmF0ZSB3aWxsIGJlIE5VTEwgZm9yIHRoZSBwYXJlbnQuCisJCSAqLworCQlpZiAoIXBidXMpIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIk5vdCBhIFBDSS10by1QQ0kgYnJpZGdlXG4iKTsKKwkJCXBkZXYgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KIAl9CiBvdXQ6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgJmRldmljZV9saXN0LCBub2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYwppbmRleCBlNmJmZDc3Li4yZWY3MDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYworKysgYi9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYwpAQCAtMjk0LDcgKzI5NCwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXR1cm4gZGF0YTsKKwkvKiBfUFRQIHJldHVybnMgMCBvbiBzdWNjZXNzLCBub256ZXJvIG90aGVyd2lzZSAqLworCWlmIChkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBzZXRfdHJpcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2MuYyBiL2RyaXZlcnMvYWNwaS9wcm9jLmMKaW5kZXggZDBkNTUwZC4uZDBkMjVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2MuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvYy5jCkBAIC0zOTMsMTEgKzM5MywxMyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OwogCWNoYXIgc3RyYnVmWzVdOwogCWNoYXIgc3RyWzVdID0gIiI7Ci0JaW50IGxlbiA9IGNvdW50OworCXVuc2lnbmVkIGludCBsZW4gPSBjb3VudDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmZvdW5kX2RldiA9IE5VTEw7CiAKIAlpZiAobGVuID4gNCkKIAkJbGVuID0gNDsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RyYnVmLCBidWZmZXIsIGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwppbmRleCBjMmQ0ZDZlLi5lYzc0MmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwpAQCAtNzcwLDcgKzc3MCw3IEBACiAJICAgIC5ub3RpZmllcl9jYWxsID0gYWNwaV9jcHVfc29mdF9ub3RpZnksCiB9OwogCi1zdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19jcHVpbml0IGFjcGlfcHJvY2Vzc29yX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gTlVMTDsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTg2MywxMyArODYzLDYgQEAKIAkJZ290byBlcnJfcmVtb3ZlX3N5c2ZzOwogCX0KIAotCWlmIChwci0+ZmxhZ3MudGhyb3R0bGluZykgewotCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiJXMgWyVzXSAoc3VwcG9ydHMiLAotCQkgICAgICAgYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBhY3BpX2RldmljZV9iaWQoZGV2aWNlKSk7Ci0JCXByaW50aygiICVkIHRocm90dGxpbmcgc3RhdGVzIiwgcHItPnRocm90dGxpbmcuc3RhdGVfY291bnQpOwotCQlwcmludGsoIilcbiIpOwotCX0KLQogCXJldHVybiAwOwogCiBlcnJfcmVtb3ZlX3N5c2ZzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCBjYzYxYTYyLi5iYmQwNjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtMTE2Niw3ICsxMTY2LDYgQEAKICNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKICNlbmRpZgotCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKGJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGUpCiAJCXJldHVybiAwOwpAQCAtMTIxNCwxMyArMTIxMyw2IEBACiAJCWFjcGlfcHJvY2Vzc29yX3NldHVwX2NwdWlkbGUocHIpOwogCQlpZiAoY3B1aWRsZV9yZWdpc3Rlcl9kZXZpY2UoJnByLT5wb3dlci5kZXYpKQogCQkJcmV0dXJuIC1FSU87Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkNQVSVkIChwb3dlciBzdGF0ZXM6IiwgcHItPmlkKTsKLQkJZm9yIChpID0gMTsgaSA8PSBwci0+cG93ZXIuY291bnQ7IGkrKykKLQkJCWlmIChwci0+cG93ZXIuc3RhdGVzW2ldLnZhbGlkKQotCQkJCXByaW50aygiIEMlZFtDJWRdIiwgaSwKLQkJCQkgICAgICAgcHItPnBvd2VyLnN0YXRlc1tpXS50eXBlKTsKLQkJcHJpbnRrKCIpXG4iKTsKIAl9CiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAJLyogJ3Bvd2VyJyBbUl0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKaW5kZXggNGM2YzE0Yy4uMWM1ZDdhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKQEAgLTExMzMsMTUgKzExMzMsMTUgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfdGhyb3R0bGluZyAqcHRocm90dGxpbmc7CiAKKwlpZiAoIXByKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKIAkJCSAgInBibGtfYWRkcmVzc1sweCUwOHhdIGR1dHlfb2Zmc2V0WyVkXSBkdXR5X3dpZHRoWyVkXVxuIiwKIAkJCSAgcHItPnRocm90dGxpbmcuYWRkcmVzcywKIAkJCSAgcHItPnRocm90dGxpbmcuZHV0eV9vZmZzZXQsCiAJCQkgIHByLT50aHJvdHRsaW5nLmR1dHlfd2lkdGgpKTsKIAotCWlmICghcHIpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyoKIAkgKiBFdmFsdWF0ZSBfUFRDLCBfVFNTIGFuZCBfVFBDCiAJICogVGhleSBtdXN0IGFsbCBiZSBwcmVzZW50IG9yIG5vbmUgb2YgdGhlbSBjYW4gYmUgdXNlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IDQwOGViZGUuLjE0YTc0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtMjIsNiArMjIsOCBAQAogI2RlZmluZSBBQ1BJX0JVU19ISUQJCQkiTE5YU1lCVVMiCiAjZGVmaW5lIEFDUElfQlVTX0RFVklDRV9OQU1FCQkiU3lzdGVtIEJ1cyIKIAorI2RlZmluZSBBQ1BJX0lTX1JPT1RfREVWSUNFKGRldmljZSkgICAgKCEoZGV2aWNlKS0+cGFyZW50KQorCiBzdGF0aWMgTElTVF9IRUFEKGFjcGlfZGV2aWNlX2xpc3QpOwogc3RhdGljIExJU1RfSEVBRChhY3BpX2J1c19pZF9saXN0KTsKIERFRklORV9NVVRFWChhY3BpX2RldmljZV9sb2NrKTsKQEAgLTQzLDQwICs0NSwxOSBAQAogewogCWludCBsZW47CiAJaW50IGNvdW50OwotCi0JaWYgKCFhY3BpX2Rldi0+ZmxhZ3MuaGFyZHdhcmVfaWQgJiYgIWFjcGlfZGV2LT5mbGFncy5jb21wYXRpYmxlX2lkcykKLQkJcmV0dXJuIC1FTk9ERVY7CisJc3RydWN0IGFjcGlfaGFyZHdhcmVfaWQgKmlkOwogCiAJbGVuID0gc25wcmludGYobW9kYWxpYXMsIHNpemUsICJhY3BpOiIpOwogCXNpemUgLT0gbGVuOwogCi0JaWYgKGFjcGlfZGV2LT5mbGFncy5oYXJkd2FyZV9pZCkgewotCQljb3VudCA9IHNucHJpbnRmKCZtb2RhbGlhc1tsZW5dLCBzaXplLCAiJXM6IiwKLQkJCQkgYWNwaV9kZXYtPnBucC5oYXJkd2FyZV9pZCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpZCwgJmFjcGlfZGV2LT5wbnAuaWRzLCBsaXN0KSB7CisJCWNvdW50ID0gc25wcmludGYoJm1vZGFsaWFzW2xlbl0sIHNpemUsICIlczoiLCBpZC0+aWQpOwogCQlpZiAoY291bnQgPCAwIHx8IGNvdW50ID49IHNpemUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJbGVuICs9IGNvdW50OwogCQlzaXplIC09IGNvdW50OwogCX0KIAotCWlmIChhY3BpX2Rldi0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKLQkJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3Q7Ci0JCWludCBpOwotCi0JCWNpZF9saXN0ID0gYWNwaV9kZXYtPnBucC5jaWRfbGlzdDsKLQkJZm9yIChpID0gMDsgaSA8IGNpZF9saXN0LT5jb3VudDsgaSsrKSB7Ci0JCQljb3VudCA9IHNucHJpbnRmKCZtb2RhbGlhc1tsZW5dLCBzaXplLCAiJXM6IiwKLQkJCQkJIGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKTsKLQkJCWlmIChjb3VudCA8IDAgfHwgY291bnQgPj0gc2l6ZSkgewotCQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIiVzIGNpZFslaV0gZXhjZWVkcyBldmVudCBidWZmZXIgc2l6ZSIsCi0JCQkJICAgICAgIGFjcGlfZGV2LT5wbnAuZGV2aWNlX25hbWUsIGkpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJbGVuICs9IGNvdW50OwotCQkJc2l6ZSAtPSBjb3VudDsKLQkJfQotCX0KLQogCW1vZGFsaWFzW2xlbl0gPSAnXDAnOwogCXJldHVybiBsZW47CiB9CkBAIC0xODMsNyArMTY0LDcgQEAKIGFjcGlfZGV2aWNlX2hpZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgewogCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSB0b19hY3BpX2RldmljZShkZXYpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGFjcGlfZGV2LT5wbnAuaGFyZHdhcmVfaWQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBhY3BpX2RldmljZV9oaWQoYWNwaV9kZXYpKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihoaWQsIDA0NDQsIGFjcGlfZGV2aWNlX2hpZF9zaG93LCBOVUxMKTsKIApAQCAtMjE5LDE3ICsyMDAsMTMgQEAKIAkJCWdvdG8gZW5kOwogCX0KIAotCWlmIChkZXYtPmZsYWdzLmhhcmR3YXJlX2lkKSB7Ci0JCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9oaWQpOwotCQlpZiAocmVzdWx0KQotCQkJZ290byBlbmQ7Ci0JfQorCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9oaWQpOworCWlmIChyZXN1bHQpCisJCWdvdG8gZW5kOwogCi0JaWYgKGRldi0+ZmxhZ3MuaGFyZHdhcmVfaWQgfHwgZGV2LT5mbGFncy5jb21wYXRpYmxlX2lkcykgewotCQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOwotCQlpZiAocmVzdWx0KQotCQkJZ290byBlbmQ7Ci0JfQorCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RhbGlhcyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBlbmQ7CiAKICAgICAgICAgLyoKICAgICAgICAgICogSWYgZGV2aWNlIGhhcyBfRUowLCAnZWplY3QnIGZpbGUgaXMgY3JlYXRlZCB0aGF0IGlzIHVzZWQgdG8gdHJpZ2dlcgpAQCAtMjU1LDExICsyMzIsOCBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2VqZWN0KTsKIAotCWlmIChkZXYtPmZsYWdzLmhhcmR3YXJlX2lkIHx8IGRldi0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RhbGlhcyk7Ci0KLQlpZiAoZGV2LT5mbGFncy5oYXJkd2FyZV9pZCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2hpZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX21vZGFsaWFzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfaGlkKTsKIAlpZiAoZGV2LT5oYW5kbGUpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9wYXRoKTsKIH0KQEAgLTI3MSw2ICsyNDUsNyBAQAogCQkJICBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKmlkcykKIHsKIAljb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKmlkOworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICpod2lkOwogCiAJLyoKIAkgKiBJZiB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50LCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBsb2FkIGRldmljZQpAQCAtMjc5LDQwICsyNTQsMzAgQEAKIAlpZiAoIWRldmljZS0+c3RhdHVzLnByZXNlbnQpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGRldmljZS0+ZmxhZ3MuaGFyZHdhcmVfaWQpIHsKLQkJZm9yIChpZCA9IGlkczsgaWQtPmlkWzBdOyBpZCsrKSB7Ci0JCQlpZiAoIXN0cmNtcCgoY2hhciopaWQtPmlkLCBkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCkpCisJZm9yIChpZCA9IGlkczsgaWQtPmlkWzBdOyBpZCsrKQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGh3aWQsICZkZXZpY2UtPnBucC5pZHMsIGxpc3QpCisJCQlpZiAoIXN0cmNtcCgoY2hhciAqKSBpZC0+aWQsIGh3aWQtPmlkKSkKIAkJCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCWlmIChkZXZpY2UtPmZsYWdzLmNvbXBhdGlibGVfaWRzKSB7Ci0JCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0ID0gZGV2aWNlLT5wbnAuY2lkX2xpc3Q7Ci0JCWludCBpOwotCi0JCWZvciAoaWQgPSBpZHM7IGlkLT5pZFswXTsgaWQrKykgewotCQkJLyogY29tcGFyZSBtdWx0aXBsZSBfQ0lEIGVudHJpZXMgYWdhaW5zdCBkcml2ZXIgaWRzICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgY2lkX2xpc3QtPmNvdW50OyBpKyspIHsKLQkJCQlpZiAoIXN0cmNtcCgoY2hhciopaWQtPmlkLAotCQkJCQkgICAgY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpKQotCQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotCX0KIAogCXJldHVybiAtRU5PRU5UOwogfQogRVhQT1JUX1NZTUJPTChhY3BpX21hdGNoX2RldmljZV9pZHMpOwogCitzdGF0aWMgdm9pZCBhY3BpX2ZyZWVfaWRzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICppZCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpZCwgdG1wLCAmZGV2aWNlLT5wbnAuaWRzLCBsaXN0KSB7CisJCWtmcmVlKGlkLT5pZCk7CisJCWtmcmVlKGlkKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYgPSB0b19hY3BpX2RldmljZShkZXYpOwogCi0Ja2ZyZWUoYWNwaV9kZXYtPnBucC5jaWRfbGlzdCk7Ci0JaWYgKGFjcGlfZGV2LT5mbGFncy5oYXJkd2FyZV9pZCkKLQkJa2ZyZWUoYWNwaV9kZXYtPnBucC5oYXJkd2FyZV9pZCk7Ci0JaWYgKGFjcGlfZGV2LT5mbGFncy51bmlxdWVfaWQpCi0JCWtmcmVlKGFjcGlfZGV2LT5wbnAudW5pcXVlX2lkKTsKKwlhY3BpX2ZyZWVfaWRzKGFjcGlfZGV2KTsKIAlrZnJlZShhY3BpX2Rldik7CiB9CiAKQEAgLTM3OCwxNSArMzQzLDEzIEBACiBzdGF0aWMgaW50IGFjcGlfZGV2aWNlX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCWNoYXIgKmhpZDsKIAotCWhpZCA9IGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpOwotCWlmICghc3RyY21wKGhpZCwgQUNQSV9CVVRUT05fSElEX1BPV0VSRikpCisJaWYgKGRldmljZS0+ZGV2aWNlX3R5cGUgPT0gQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT04pCiAJCXN0YXR1cyA9CiAJCSAgICBhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1BPV0VSX0JVVFRPTiwKIAkJCQkJCSAgICAgYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkLAogCQkJCQkJICAgICBkZXZpY2UpOwotCWVsc2UgaWYgKCFzdHJjbXAoaGlkLCBBQ1BJX0JVVFRPTl9ISURfU0xFRVBGKSkKKwllbHNlIGlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OKQogCQlzdGF0dXMgPQogCQkgICAgYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9TTEVFUF9CVVRUT04sCiAJCQkJCQkgICAgIGFjcGlfZGV2aWNlX25vdGlmeV9maXhlZCwKQEAgLTQwNCwxMCArMzY3LDEwIEBACiAKIHN0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlpZiAoIXN0cmNtcChhY3BpX2RldmljZV9oaWQoZGV2aWNlKSwgQUNQSV9CVVRUT05fSElEX1BPV0VSRikpCisJaWYgKGRldmljZS0+ZGV2aWNlX3R5cGUgPT0gQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT04pCiAJCWFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCiAJCQkJCQlhY3BpX2RldmljZV9ub3RpZnlfZml4ZWQpOwotCWVsc2UgaWYgKCFzdHJjbXAoYWNwaV9kZXZpY2VfaGlkKGRldmljZSksIEFDUElfQlVUVE9OX0hJRF9TTEVFUEYpKQorCWVsc2UgaWYgKGRldmljZS0+ZGV2aWNlX3R5cGUgPT0gQUNQSV9CVVNfVFlQRV9TTEVFUF9CVVRUT04pCiAJCWFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9TTEVFUF9CVVRUT04sCiAJCQkJCQlhY3BpX2RldmljZV9ub3RpZnlfZml4ZWQpOwogCWVsc2UKQEAgLTQ3NCwxMiArNDM3LDEyIEBACiAJLnVldmVudAkJPSBhY3BpX2RldmljZV91ZXZlbnQsCiB9OwogCi1zdGF0aWMgaW50IGFjcGlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLAotCQkJCSBzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudCkKK3N0YXRpYyBpbnQgYWNwaV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfYnVzX2lkICphY3BpX2RldmljZV9idXNfaWQsICpuZXdfYnVzX2lkOwogCWludCBmb3VuZCA9IDA7CisKIAkvKgogCSAqIExpbmthZ2UKIAkgKiAtLS0tLS0tCkBAIC01MDEsOCArNDY0LDkgQEAKIAkgKiBJZiBmYWlsZWQsIGNyZWF0ZSBvbmUgYW5kIGxpbmsgaXQgaW50byBhY3BpX2J1c19pZF9saXN0CiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhY3BpX2RldmljZV9idXNfaWQsICZhY3BpX2J1c19pZF9saXN0LCBub2RlKSB7Ci0JCWlmKCFzdHJjbXAoYWNwaV9kZXZpY2VfYnVzX2lkLT5idXNfaWQsIGRldmljZS0+ZmxhZ3MuaGFyZHdhcmVfaWQ/IGRldmljZS0+cG5wLmhhcmR3YXJlX2lkIDogImRldmljZSIpKSB7Ci0JCQlhY3BpX2RldmljZV9idXNfaWQtPmluc3RhbmNlX25vICsrOworCQlpZiAoIXN0cmNtcChhY3BpX2RldmljZV9idXNfaWQtPmJ1c19pZCwKKwkJCSAgICBhY3BpX2RldmljZV9oaWQoZGV2aWNlKSkpIHsKKwkJCWFjcGlfZGV2aWNlX2J1c19pZC0+aW5zdGFuY2Vfbm8rKzsKIAkJCWZvdW5kID0gMTsKIAkJCWtmcmVlKG5ld19idXNfaWQpOwogCQkJYnJlYWs7CkBAIC01MTAsNyArNDc0LDcgQEAKIAl9CiAJaWYgKCFmb3VuZCkgewogCQlhY3BpX2RldmljZV9idXNfaWQgPSBuZXdfYnVzX2lkOwotCQlzdHJjcHkoYWNwaV9kZXZpY2VfYnVzX2lkLT5idXNfaWQsIGRldmljZS0+ZmxhZ3MuaGFyZHdhcmVfaWQgPyBkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCA6ICJkZXZpY2UiKTsKKwkJc3RyY3B5KGFjcGlfZGV2aWNlX2J1c19pZC0+YnVzX2lkLCBhY3BpX2RldmljZV9oaWQoZGV2aWNlKSk7CiAJCWFjcGlfZGV2aWNlX2J1c19pZC0+aW5zdGFuY2Vfbm8gPSAwOwogCQlsaXN0X2FkZF90YWlsKCZhY3BpX2RldmljZV9idXNfaWQtPm5vZGUsICZhY3BpX2J1c19pZF9saXN0KTsKIAl9CkBAIC01MjQsNyArNDg4LDcgQEAKIAltdXRleF91bmxvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCiAJaWYgKGRldmljZS0+cGFyZW50KQotCQlkZXZpY2UtPmRldi5wYXJlbnQgPSAmcGFyZW50LT5kZXY7CisJCWRldmljZS0+ZGV2LnBhcmVudCA9ICZkZXZpY2UtPnBhcmVudC0+ZGV2OwogCWRldmljZS0+ZGV2LmJ1cyA9ICZhY3BpX2J1c190eXBlOwogCWRldmljZS0+ZGV2LnJlbGVhc2UgPSAmYWNwaV9kZXZpY2VfcmVsZWFzZTsKIAlyZXN1bHQgPSBkZXZpY2VfcmVnaXN0ZXIoJmRldmljZS0+ZGV2KTsKQEAgLTY2NCw2ICs2MjgsMzMgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2UgRW51bWVyYXRpb24KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2J1c19nZXRfcGFyZW50KGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJaW50IHJldDsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKKworCS8qCisJICogRml4ZWQgaGFyZHdhcmUgZGV2aWNlcyBkbyBub3QgYXBwZWFyIGluIHRoZSBuYW1lc3BhY2UgYW5kIGRvIG5vdAorCSAqIGhhdmUgaGFuZGxlcywgYnV0IHdlIGZhYnJpY2F0ZSBhY3BpX2RldmljZXMgZm9yIHRoZW0sIHNvIHdlIGhhdmUKKwkgKiB0byBkZWFsIHdpdGggdGhlbSBzcGVjaWFsbHkuCisJICovCisJaWYgKGhhbmRsZSA9PSBOVUxMKQorCQlyZXR1cm4gYWNwaV9yb290OworCisJZG8geworCQlzdGF0dXMgPSBhY3BpX2dldF9wYXJlbnQoaGFuZGxlLCAmaGFuZGxlKTsKKwkJaWYgKHN0YXR1cyA9PSBBRV9OVUxMX0VOVFJZKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJCXJldHVybiBhY3BpX3Jvb3Q7CisKKwkJcmV0ID0gYWNwaV9idXNfZ2V0X2RldmljZShoYW5kbGUsICZkZXZpY2UpOworCQlpZiAocmV0ID09IDApCisJCQlyZXR1cm4gZGV2aWNlOworCX0gd2hpbGUgKDEpOworfQorCiBhY3BpX3N0YXR1cwogYWNwaV9idXNfZ2V0X2VqZChhY3BpX2hhbmRsZSBoYW5kbGUsIGFjcGlfaGFuZGxlICplamQpCiB7CkBAIC04NzYsMTEgKzg2Nyw2IEBACiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQogCQlkZXZpY2UtPmZsYWdzLmR5bmFtaWNfc3RhdHVzID0gMTsKIAotCS8qIFByZXNlbmNlIG9mIF9DSUQgaW5kaWNhdGVzICdjb21wYXRpYmxlX2lkcycgKi8KLQlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfQ0lEIiwgJnRlbXApOwotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKLQkJZGV2aWNlLT5mbGFncy5jb21wYXRpYmxlX2lkcyA9IDE7Ci0KIAkvKiBQcmVzZW5jZSBvZiBfUk1WIGluZGljYXRlcyAncmVtb3ZhYmxlJyAqLwogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9STVYiLCAmdGVtcCk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQpAQCAtOTE4LDggKzkwNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX2dldF9idXNpZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwKLQkJCQkgIGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHR5cGUpCitzdGF0aWMgdm9pZCBhY3BpX2RldmljZV9nZXRfYnVzaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJY2hhciBidXNfaWRbNV0gPSB7ICc/JywgMCB9OwogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IHNpemVvZihidXNfaWQpLCBidXNfaWQgfTsKQEAgLTkzMSwxMCArOTE2LDEyIEBACiAJICogVGhlIGRldmljZSdzIEJ1cyBJRCBpcyBzaW1wbHkgdGhlIG9iamVjdCBuYW1lLgogCSAqIFRCRDogU2hvdWxkbid0IHRoaXMgdmFsdWUgYmUgdW5pcXVlICh3aXRoaW4gdGhlIEFDUEkgbmFtZXNwYWNlKT8KIAkgKi8KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEFDUElfQlVTX1RZUEVfU1lTVEVNOgorCWlmIChBQ1BJX0lTX1JPT1RfREVWSUNFKGRldmljZSkpIHsKIAkJc3RyY3B5KGRldmljZS0+cG5wLmJ1c19pZCwgIkFDUEkiKTsKLQkJYnJlYWs7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGRldmljZS0+ZGV2aWNlX3R5cGUpIHsKIAljYXNlIEFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OOgogCQlzdHJjcHkoZGV2aWNlLT5wbnAuYnVzX2lkLCAiUFdSRiIpOwogCQlicmVhazsKQEAgLTk0Miw3ICs5MjksNyBAQAogCQlzdHJjcHkoZGV2aWNlLT5wbnAuYnVzX2lkLCAiU0xQRiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhY3BpX2dldF9uYW1lKGhhbmRsZSwgQUNQSV9TSU5HTEVfTkFNRSwgJmJ1ZmZlcik7CisJCWFjcGlfZ2V0X25hbWUoZGV2aWNlLT5oYW5kbGUsIEFDUElfU0lOR0xFX05BTUUsICZidWZmZXIpOwogCQkvKiBDbGVhbiB1cCB0cmFpbGluZyB1bmRlcnNjb3JlcyAoaWYgYW55KSAqLwogCQlmb3IgKGkgPSAzOyBpID4gMTsgaS0tKSB7CiAJCQlpZiAoYnVzX2lkW2ldID09ICdfJykKQEAgLTEwMDAsMjA0ICs5ODcsMTM0IEBACiAJcmV0dXJuIGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9EQ0siLCAmdG1wKTsKIH0KIAotc3RhdGljIHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QqCi1hY3BpX2FkZF9jaWQoCi0Jc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gICAgICAgICAqaW5mbywKLQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCAgICAgICAgICpuZXdfY2lkKQorY2hhciAqYWNwaV9kZXZpY2VfaGlkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgICAgKmNpZDsKLQljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZXh0X2lkX3N0cmluZzsKLQlhY3BpX3NpemUgICAgICAgICAgICAgICAgICAgICAgIGNpZF9sZW5ndGg7Ci0JYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2lkX2xlbmd0aDsKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7CisJc3RydWN0IGFjcGlfaGFyZHdhcmVfaWQgKmhpZDsKIAorCWhpZCA9IGxpc3RfZmlyc3RfZW50cnkoJmRldmljZS0+cG5wLmlkcywgc3RydWN0IGFjcGlfaGFyZHdhcmVfaWQsIGxpc3QpOworCXJldHVybiBoaWQtPmlkOworfQorRVhQT1JUX1NZTUJPTChhY3BpX2RldmljZV9oaWQpOwogCi0JLyogQWxsb2NhdGUgbmV3IENJRCBsaXN0IHdpdGggcm9vbSBmb3IgdGhlIG5ldyBDSUQgKi8KK3N0YXRpYyB2b2lkIGFjcGlfYWRkX2lkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpkZXZfaWQpCit7CisJc3RydWN0IGFjcGlfaGFyZHdhcmVfaWQgKmlkOwogCi0JaWYgKCFuZXdfY2lkKQotCQluZXdfY2lkX2xlbmd0aCA9IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5saXN0X3NpemU7Ci0JZWxzZSBpZiAoaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmxpc3Rfc2l6ZSkKLQkJbmV3X2NpZF9sZW5ndGggPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QubGlzdF9zaXplICsKLQkJCW5ld19jaWQtPmxlbmd0aCArIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCk7Ci0JZWxzZQotCQluZXdfY2lkX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0KSArIG5ld19jaWQtPmxlbmd0aDsKKwlpZCA9IGttYWxsb2Moc2l6ZW9mKCppZCksIEdGUF9LRVJORUwpOworCWlmICghaWQpCisJCXJldHVybjsKIAotCWNpZCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKG5ld19jaWRfbGVuZ3RoKTsKLQlpZiAoIWNpZCkgewotCQlyZXR1cm4gTlVMTDsKKwlpZC0+aWQgPSBrbWFsbG9jKHN0cmxlbihkZXZfaWQpICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZC0+aWQpIHsKKwkJa2ZyZWUoaWQpOworCQlyZXR1cm47CiAJfQogCi0JY2lkLT5saXN0X3NpemUgPSBuZXdfY2lkX2xlbmd0aDsKLQljaWQtPmNvdW50ID0gaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0LmNvdW50OwotCWlmIChuZXdfY2lkKQotCQljaWQtPmNvdW50Kys7Ci0JbmV4dF9pZF9zdHJpbmcgPSAoY2hhciAqKSBjaWQtPmlkcyArIChjaWQtPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkKSk7Ci0KLQkvKiBDb3B5IGFsbCBleGlzdGluZyBDSURzICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0LmNvdW50OyBpKyspIHsKLQkJY2lkX2xlbmd0aCA9IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5pZHNbaV0ubGVuZ3RoOwotCQljaWQtPmlkc1tpXS5zdHJpbmcgPSBuZXh0X2lkX3N0cmluZzsKLQkJY2lkLT5pZHNbaV0ubGVuZ3RoID0gY2lkX2xlbmd0aDsKLQotCQlBQ1BJX01FTUNQWShuZXh0X2lkX3N0cmluZywgaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmlkc1tpXS5zdHJpbmcsCi0JCQljaWRfbGVuZ3RoKTsKLQotCQluZXh0X2lkX3N0cmluZyArPSBjaWRfbGVuZ3RoOwotCX0KLQotCS8qIEFwcGVuZCB0aGUgbmV3IENJRCAqLwotCi0JaWYgKG5ld19jaWQpIHsKLQkJY2lkLT5pZHNbaV0uc3RyaW5nID0gbmV4dF9pZF9zdHJpbmc7Ci0JCWNpZC0+aWRzW2ldLmxlbmd0aCA9IG5ld19jaWQtPmxlbmd0aDsKLQotCQlBQ1BJX01FTUNQWShuZXh0X2lkX3N0cmluZywgbmV3X2NpZC0+c3RyaW5nLCBuZXdfY2lkLT5sZW5ndGgpOwotCX0KLQotCXJldHVybiBjaWQ7CisJc3RyY3B5KGlkLT5pZCwgZGV2X2lkKTsKKwlsaXN0X2FkZF90YWlsKCZpZC0+bGlzdCwgJmRldmljZS0+cG5wLmlkcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3NldF9pZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwKLQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudCwgYWNwaV9oYW5kbGUgaGFuZGxlLAotCQkJICAgICAgIGludCB0eXBlKQorc3RhdGljIHZvaWQgYWNwaV9kZXZpY2Vfc2V0X2lkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvID0gTlVMTDsKLQljaGFyICpoaWQgPSBOVUxMOwotCWNoYXIgKnVpZCA9IE5VTEw7Ci0Jc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3QgPSBOVUxMOwotCWNoYXIgKmNpZF9hZGQgPSBOVUxMOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdDsKKwlpbnQgaTsKIAotCXN3aXRjaCAodHlwZSkgeworCXN3aXRjaCAoZGV2aWNlLT5kZXZpY2VfdHlwZSkgewogCWNhc2UgQUNQSV9CVVNfVFlQRV9ERVZJQ0U6Ci0JCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm8pOworCQlpZiAoQUNQSV9JU19ST09UX0RFVklDRShkZXZpY2UpKSB7CisJCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfU1lTVEVNX0hJRCk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChBQ1BJX0lTX1JPT1RfREVWSUNFKGRldmljZS0+cGFyZW50KSkgeworCQkJLyogXF9TQl8sIHRoZSBvbmx5IHJvb3QtbGV2ZWwgbmFtZXNwYWNlIGRldmljZSAqLworCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0JVU19ISUQpOworCQkJc3RyY3B5KGRldmljZS0+cG5wLmRldmljZV9uYW1lLCBBQ1BJX0JVU19ERVZJQ0VfTkFNRSk7CisJCQlzdHJjcHkoZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLCBBQ1BJX0JVU19DTEFTUyk7CisJCQlicmVhazsKKwkJfQorCisJCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGRldmljZS0+aGFuZGxlLCAmaW5mbyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiJXM6IEVycm9yIHJlYWRpbmcgZGV2aWNlIGluZm9cbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCiAJCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKQotCQkJaGlkID0gaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nOwotCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX1VJRCkKLQkJCXVpZCA9IGluZm8tPnVuaXF1ZV9pZC5zdHJpbmc7Ci0JCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfQ0lEKQorCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmcpOworCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0NJRCkgewogCQkJY2lkX2xpc3QgPSAmaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0OworCQkJZm9yIChpID0gMDsgaSA8IGNpZF9saXN0LT5jb3VudDsgaSsrKQorCQkJCWFjcGlfYWRkX2lkKGRldmljZSwgY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpOworCQl9CiAJCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfQURSKSB7CiAJCQlkZXZpY2UtPnBucC5idXNfYWRkcmVzcyA9IGluZm8tPmFkZHJlc3M7CiAJCQlkZXZpY2UtPmZsYWdzLmJ1c19hZGRyZXNzID0gMTsKIAkJfQogCi0JCS8qIElmIHdlIGhhdmUgYSB2aWRlby9iYXkvZG9jayBkZXZpY2UsIGFkZCBvdXIgc2VsZmRlZmluZWQKLQkJICAgSElEIHRvIHRoZSBDSUQgbGlzdC4gTGlrZSB0aGF0IHRoZSB2aWRlby9iYXkvZG9jayBkcml2ZXJzCi0JCSAgIHdpbGwgZ2V0IGF1dG9sb2FkZWQgYW5kIHRoZSBkZXZpY2UgbWlnaHQgc3RpbGwgbWF0Y2gKLQkJICAgYWdhaW5zdCBhbm90aGVyIGRyaXZlci4KLQkJKi8KKwkJa2ZyZWUoaW5mbyk7CisKKwkJLyoKKwkJICogU29tZSBkZXZpY2VzIGRvbid0IHJlbGlhYmx5IGhhdmUgX0hJRHMgJiBfQ0lEcywgc28gYWRkCisJCSAqIHN5bnRoZXRpYyBISURzIHRvIG1ha2Ugc3VyZSBkcml2ZXJzIGNhbiBmaW5kIHRoZW0uCisJCSAqLwogCQlpZiAoYWNwaV9pc192aWRlb19kZXZpY2UoZGV2aWNlKSkKLQkJCWNpZF9hZGQgPSBBQ1BJX1ZJREVPX0hJRDsKKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9WSURFT19ISUQpOwogCQllbHNlIGlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9iYXlfbWF0Y2goZGV2aWNlKSkpCi0JCQljaWRfYWRkID0gQUNQSV9CQVlfSElEOworCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0JBWV9ISUQpOwogCQllbHNlIGlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9kb2NrX21hdGNoKGRldmljZSkpKQotCQkJY2lkX2FkZCA9IEFDUElfRE9DS19ISUQ7CisJCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfRE9DS19ISUQpOwogCiAJCWJyZWFrOwogCWNhc2UgQUNQSV9CVVNfVFlQRV9QT1dFUjoKLQkJaGlkID0gQUNQSV9QT1dFUl9ISUQ7CisJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9QT1dFUl9ISUQpOwogCQlicmVhazsKIAljYXNlIEFDUElfQlVTX1RZUEVfUFJPQ0VTU09SOgotCQloaWQgPSBBQ1BJX1BST0NFU1NPUl9PQkpFQ1RfSElEOwotCQlicmVhazsKLQljYXNlIEFDUElfQlVTX1RZUEVfU1lTVEVNOgotCQloaWQgPSBBQ1BJX1NZU1RFTV9ISUQ7CisJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9QUk9DRVNTT1JfT0JKRUNUX0hJRCk7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9CVVNfVFlQRV9USEVSTUFMOgotCQloaWQgPSBBQ1BJX1RIRVJNQUxfSElEOworCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfVEhFUk1BTF9ISUQpOwogCQlicmVhazsKIAljYXNlIEFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OOgotCQloaWQgPSBBQ1BJX0JVVFRPTl9ISURfUE9XRVJGOworCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfQlVUVE9OX0hJRF9QT1dFUkYpOwogCQlicmVhazsKIAljYXNlIEFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OOgotCQloaWQgPSBBQ1BJX0JVVFRPTl9ISURfU0xFRVBGOworCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfQlVUVE9OX0hJRF9TTEVFUEYpOwogCQlicmVhazsKIAl9CiAKIAkvKgotCSAqIFxfU0IKLQkgKiAtLS0tCi0JICogRml4IGZvciB0aGUgc3lzdGVtIHJvb3QgYnVzIGRldmljZSAtLSB0aGUgb25seSByb290LWxldmVsIGRldmljZS4KKwkgKiBXZSBidWlsZCBhY3BpX2RldmljZXMgZm9yIHNvbWUgb2JqZWN0cyB0aGF0IGRvbid0IGhhdmUgX0hJRCBvciBfQ0lELAorCSAqIGUuZy4sIFBDSSBicmlkZ2VzIGFuZCBzbG90cy4gIERyaXZlcnMgY2FuJ3QgYmluZCB0byB0aGVzZSBvYmplY3RzLAorCSAqIGJ1dCB3ZSBkbyB1c2UgdGhlbSBpbmRpcmVjdGx5IGJ5IHRyYXZlcnNpbmcgdGhlIGFjcGlfZGV2aWNlIHRyZWUuCisJICogVGhpcyBnZW5lcmljIElEIGlzbid0IHVzZWZ1bCBmb3IgZHJpdmVyIGJpbmRpbmcsIGJ1dCBpdCBwcm92aWRlcworCSAqIHRoZSB1c2VmdWwgcHJvcGVydHkgdGhhdCAiZXZlcnkgYWNwaV9kZXZpY2UgaGFzIGFuIElELiIKIAkgKi8KLQlpZiAoKChhY3BpX2hhbmRsZSlwYXJlbnQgPT0gQUNQSV9ST09UX09CSkVDVCkgJiYgKHR5cGUgPT0gQUNQSV9CVVNfVFlQRV9ERVZJQ0UpKSB7Ci0JCWhpZCA9IEFDUElfQlVTX0hJRDsKLQkJc3RyY3B5KGRldmljZS0+cG5wLmRldmljZV9uYW1lLCBBQ1BJX0JVU19ERVZJQ0VfTkFNRSk7Ci0JCXN0cmNweShkZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsIEFDUElfQlVTX0NMQVNTKTsKLQl9Ci0KLQlpZiAoaGlkKSB7Ci0JCWRldmljZS0+cG5wLmhhcmR3YXJlX2lkID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc3RybGVuIChoaWQpICsgMSk7Ci0JCWlmIChkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCkgewotCQkJc3RyY3B5KGRldmljZS0+cG5wLmhhcmR3YXJlX2lkLCBoaWQpOwotCQkJZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZCA9IDE7Ci0JCX0KLQl9Ci0JaWYgKCFkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkKQotCQlkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCA9ICIiOwotCi0JaWYgKHVpZCkgewotCQlkZXZpY2UtPnBucC51bmlxdWVfaWQgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzdHJsZW4gKHVpZCkgKyAxKTsKLQkJaWYgKGRldmljZS0+cG5wLnVuaXF1ZV9pZCkgewotCQkJc3RyY3B5KGRldmljZS0+cG5wLnVuaXF1ZV9pZCwgdWlkKTsKLQkJCWRldmljZS0+ZmxhZ3MudW5pcXVlX2lkID0gMTsKLQkJfQotCX0KLQlpZiAoIWRldmljZS0+ZmxhZ3MudW5pcXVlX2lkKQotCQlkZXZpY2UtPnBucC51bmlxdWVfaWQgPSAiIjsKLQotCWlmIChjaWRfbGlzdCB8fCBjaWRfYWRkKSB7Ci0JCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmxpc3Q7Ci0KLQkJaWYgKGNpZF9hZGQpIHsKLQkJCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkIGNpZDsKLQkJCWNpZC5sZW5ndGggPSBzdHJsZW4gKGNpZF9hZGQpICsgMTsKLQkJCWNpZC5zdHJpbmcgPSBjaWRfYWRkOwotCi0JCQlsaXN0ID0gYWNwaV9hZGRfY2lkKGluZm8sICZjaWQpOwotCQl9IGVsc2UgewotCQkJbGlzdCA9IGFjcGlfYWRkX2NpZChpbmZvLCBOVUxMKTsKLQkJfQotCi0JCWlmIChsaXN0KSB7Ci0JCQlkZXZpY2UtPnBucC5jaWRfbGlzdCA9IGxpc3Q7Ci0JCQlpZiAoY2lkX2FkZCkKLQkJCQlkZXZpY2UtPmZsYWdzLmNvbXBhdGlibGVfaWRzID0gMTsKLQkJfQotCX0KLQotCWtmcmVlKGluZm8pOworCWlmIChsaXN0X2VtcHR5KCZkZXZpY2UtPnBucC5pZHMpKQorCQlhY3BpX2FkZF9pZChkZXZpY2UsICJkZXZpY2UiKTsKIH0KIAotc3RhdGljIGludCBhY3BpX2RldmljZV9zZXRfY29udGV4dChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCitzdGF0aWMgaW50IGFjcGlfZGV2aWNlX3NldF9jb250ZXh0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCWludCByZXN1bHQgPSAwOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwogCS8qCiAJICogQ29udGV4dAogCSAqIC0tLS0tLS0KIAkgKiBBdHRhY2ggdGhpcyAnc3RydWN0IGFjcGlfZGV2aWNlJyB0byB0aGUgQUNQSSBvYmplY3QuICBUaGlzIG1ha2VzCi0JICogcmVzb2x1dGlvbnMgZnJvbSBoYW5kbGUtPmRldmljZSB2ZXJ5IGVmZmljaWVudC4gIE5vdGUgdGhhdCB3ZSBuZWVkCi0JICogdG8gYmUgY2FyZWZ1bCB3aXRoIGZpeGVkLWZlYXR1cmUgZGV2aWNlcyBhcyB0aGV5IGFsbCBhdHRhY2ggdG8gdGhlCi0JICogcm9vdCBvYmplY3QuCisJICogcmVzb2x1dGlvbnMgZnJvbSBoYW5kbGUtPmRldmljZSB2ZXJ5IGVmZmljaWVudC4gIEZpeGVkIGhhcmR3YXJlCisJICogZGV2aWNlcyBoYXZlIG5vIGhhbmRsZXMsIHNvIHdlIHNraXAgdGhlbS4KIAkgKi8KLQlpZiAodHlwZSAhPSBBQ1BJX0JVU19UWVBFX1BPV0VSX0JVVFRPTiAmJgotCSAgICB0eXBlICE9IEFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OKSB7Ci0JCXN0YXR1cyA9IGFjcGlfYXR0YWNoX2RhdGEoZGV2aWNlLT5oYW5kbGUsCi0JCQkJCSAgYWNwaV9idXNfZGF0YV9oYW5kbGVyLCBkZXZpY2UpOworCWlmICghZGV2aWNlLT5oYW5kbGUpCisJCXJldHVybiAwOwogCi0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgYXR0YWNoaW5nIGRldmljZSBkYXRhXG4iKTsKLQkJCXJlc3VsdCA9IC1FTk9ERVY7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJlc3VsdDsKKwlzdGF0dXMgPSBhY3BpX2F0dGFjaF9kYXRhKGRldmljZS0+aGFuZGxlLAorCQkJCSAgYWNwaV9idXNfZGF0YV9oYW5kbGVyLCBkZXZpY2UpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoS0VSTl9FUlIgUFJFRklYICJFcnJvciBhdHRhY2hpbmcgZGV2aWNlIGRhdGFcbiIpOworCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgaW50IGFjcGlfYnVzX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgaW50IHJtZGV2aWNlKQpAQCAtMTIyMywxNyArMTE0MCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1hY3BpX2FkZF9zaW5nbGVfb2JqZWN0KHN0cnVjdCBhY3BpX2RldmljZSAqKmNoaWxkLAotCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQsIGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHR5cGUsCi0JCQlzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMpCitzdGF0aWMgaW50IGFjcGlfYWRkX3NpbmdsZV9vYmplY3Qoc3RydWN0IGFjcGlfZGV2aWNlICoqY2hpbGQsCisJCQkJICBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nIHN0YSwKKwkJCQkgIHN0cnVjdCBhY3BpX2J1c19vcHMgKm9wcykKIHsKLQlpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7Ci0KLQotCWlmICghY2hpbGQpCi0JCXJldHVybiAtRUlOVkFMOworCWludCByZXN1bHQ7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAogCWRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghZGV2aWNlKSB7CkBAIC0xMjQxLDc1ICsxMTU1LDMxIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCUlOSVRfTElTVF9IRUFEKCZkZXZpY2UtPnBucC5pZHMpOworCWRldmljZS0+ZGV2aWNlX3R5cGUgPSB0eXBlOwogCWRldmljZS0+aGFuZGxlID0gaGFuZGxlOwotCWRldmljZS0+cGFyZW50ID0gcGFyZW50OworCWRldmljZS0+cGFyZW50ID0gYWNwaV9idXNfZ2V0X3BhcmVudChoYW5kbGUpOwogCWRldmljZS0+YnVzX29wcyA9ICpvcHM7IC8qIHdvcmtyb3VuZCBmb3Igbm90IGNhbGwgLnN0YXJ0ICovCisJU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykgPSBzdGE7CiAKLQotCWFjcGlfZGV2aWNlX2dldF9idXNpZChkZXZpY2UsIGhhbmRsZSwgdHlwZSk7CisJYWNwaV9kZXZpY2VfZ2V0X2J1c2lkKGRldmljZSk7CiAKIAkvKgogCSAqIEZsYWdzCiAJICogLS0tLS0KLQkgKiBHZXQgcHJpb3IgdG8gY2FsbGluZyBhY3BpX2J1c19nZXRfc3RhdHVzKCkgc28gd2Uga25vdyB3aGV0aGVyCi0JICogb3Igbm90IF9TVEEgaXMgcHJlc2VudC4gIE5vdGUgdGhhdCB3ZSBvbmx5IGxvb2sgZm9yIG9iamVjdAotCSAqIGhhbmRsZXMgLS0gY2Fubm90IGV2YWx1YXRlIG9iamVjdHMgdW50aWwgd2Uga25vdyB0aGUgZGV2aWNlIGlzCi0JICogcHJlc2VudCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCisJICogTm90ZSB0aGF0IHdlIG9ubHkgbG9vayBmb3Igb2JqZWN0IGhhbmRsZXMgLS0gY2Fubm90IGV2YWx1YXRlIG9iamVjdHMKKwkgKiB1bnRpbCB3ZSBrbm93IHRoZSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCiAJICovCiAJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X2ZsYWdzKGRldmljZSk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBlbmQ7CiAKIAkvKgotCSAqIFN0YXR1cwotCSAqIC0tLS0tLQotCSAqIFNlZSBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQuICBXZSBhbHdheXMgYXNzdW1lIHRoYXQgbm9uLURldmljZQotCSAqIGFuZCBub24tUHJvY2Vzc29yIG9iamVjdHMgKGUuZy4gdGhlcm1hbCB6b25lcywgcG93ZXIgcmVzb3VyY2VzLAotCSAqIGV0Yy4pIGFyZSBwcmVzZW50LCBmdW5jdGlvbmluZywgZXRjLiAoYXQgbGVhc3Qgd2hlbiBwYXJlbnQgb2JqZWN0Ci0JICogaXMgcHJlc2VudCkuICBOb3RlIHRoYXQgX1NUQSBoYXMgYSBkaWZmZXJlbnQgbWVhbmluZyBmb3Igc29tZQotCSAqIG9iamVjdHMgKGUuZy4gcG93ZXIgcmVzb3VyY2VzKSBzbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgaG93IHdlIHVzZQotCSAqIGl0LgotCSAqLwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQUNQSV9CVVNfVFlQRV9QUk9DRVNTT1I6Ci0JY2FzZSBBQ1BJX0JVU19UWVBFX0RFVklDRToKLQkJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3N0YXR1cyhkZXZpY2UpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHJlc3VsdCkpIHsKLQkJCXJlc3VsdCA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVuZDsKLQkJfQotCQkvKgotCQkgKiBXaGVuIHRoZSBkZXZpY2UgaXMgbmVpdGhlciBwcmVzZW50IG5vciBmdW5jdGlvbmFsLCB0aGUKLQkJICogZGV2aWNlIHNob3VsZCBub3QgYmUgYWRkZWQgdG8gTGludXggQUNQSSBkZXZpY2UgdHJlZS4KLQkJICogV2hlbiB0aGUgc3RhdHVzIG9mIHRoZSBkZXZpY2UgaXMgbm90IHByZXNlbnQgYnV0IGZ1bmN0aW5hbCwKLQkJICogaXQgc2hvdWxkIGJlIGFkZGVkIHRvIExpbnV4IEFDUEkgdHJlZS4gRm9yIGV4YW1wbGUgOiBiYXkKLQkJICogZGV2aWNlICwgZG9jayBkZXZpY2UuCi0JCSAqIEluIHN1Y2ggY29uZGl0aW9ucyBpdCBpcyB1bm5jZXNzYXJ5IHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMKLQkJICogYmF5IGRldmljZSBvciBkb2NrIGRldmljZS4KLQkJICovCi0JCWlmICghZGV2aWNlLT5zdGF0dXMucHJlc2VudCAmJiAhZGV2aWNlLT5zdGF0dXMuZnVuY3Rpb25hbCkgewotCQkJcmVzdWx0ID0gLUVOT0RFVjsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpID0KLQkJICAgIEFDUElfU1RBX0RFVklDRV9QUkVTRU5UIHwgQUNQSV9TVEFfREVWSUNFX0VOQUJMRUQgfAotCQkgICAgQUNQSV9TVEFfREVWSUNFX1VJICAgICAgfCBBQ1BJX1NUQV9ERVZJQ0VfRlVOQ1RJT05JTkc7Ci0JCWJyZWFrOwotCX0KLQotCS8qCiAJICogSW5pdGlhbGl6ZSBEZXZpY2UKIAkgKiAtLS0tLS0tLS0tLS0tLS0tLQogCSAqIFRCRDogU3luY2ggd2l0aCBDb3JlJ3MgZW51bWVyYXRpb24vaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4KIAkgKi8KLQotCS8qCi0JICogSGFyZHdhcmUgSUQsIFVuaXF1ZSBJRCwgJiBCdXMgQWRkcmVzcwotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKi8KLQlhY3BpX2RldmljZV9zZXRfaWQoZGV2aWNlLCBwYXJlbnQsIGhhbmRsZSwgdHlwZSk7CisJYWNwaV9kZXZpY2Vfc2V0X2lkKGRldmljZSk7CiAKIAkvKgogCSAqIFBvd2VyIE1hbmFnZW1lbnQKQEAgLTEzNDEsMTAgKzEyMTEsMTAgQEAKIAkJCWdvdG8gZW5kOwogCX0KIAotCWlmICgocmVzdWx0ID0gYWNwaV9kZXZpY2Vfc2V0X2NvbnRleHQoZGV2aWNlLCB0eXBlKSkpCisJaWYgKChyZXN1bHQgPSBhY3BpX2RldmljZV9zZXRfY29udGV4dChkZXZpY2UpKSkKIAkJZ290byBlbmQ7CiAKLQlyZXN1bHQgPSBhY3BpX2RldmljZV9yZWdpc3RlcihkZXZpY2UsIHBhcmVudCk7CisJcmVzdWx0ID0gYWNwaV9kZXZpY2VfcmVnaXN0ZXIoZGV2aWNlKTsKIAogCS8qCiAJICogQmluZCBfQURSLUJhc2VkIERldmljZXMgd2hlbiBob3QgYWRkCkBAIC0xMzU1LDE2NSArMTIyNSwxNDMgQEAKIAl9CiAKIGVuZDoKLQlpZiAoIXJlc3VsdCkKKwlpZiAoIXJlc3VsdCkgeworCQlhY3BpX2dldF9uYW1lKGhhbmRsZSwgQUNQSV9GVUxMX1BBVEhOQU1FLCAmYnVmZmVyKTsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAorCQkJIkFkZGluZyAlcyBbJXNdIHBhcmVudCAlc1xuIiwgZGV2X25hbWUoJmRldmljZS0+ZGV2KSwKKwkJCSAoY2hhciAqKSBidWZmZXIucG9pbnRlciwKKwkJCSBkZXZpY2UtPnBhcmVudCA/IGRldl9uYW1lKCZkZXZpY2UtPnBhcmVudC0+ZGV2KSA6CisJCQkJCSAgIihudWxsKSIpKTsKKwkJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOwogCQkqY2hpbGQgPSBkZXZpY2U7Ci0JZWxzZQorCX0gZWxzZQogCQlhY3BpX2RldmljZV9yZWxlYXNlKCZkZXZpY2UtPmRldik7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGFjcGlfYnVzX3NjYW4oc3RydWN0IGFjcGlfZGV2aWNlICpzdGFydCwgc3RydWN0IGFjcGlfYnVzX29wcyAqb3BzKQorI2RlZmluZSBBQ1BJX1NUQV9ERUZBVUxUIChBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCB8IEFDUElfU1RBX0RFVklDRV9FTkFCTEVEIHwgXAorCQkJICBBQ1BJX1NUQV9ERVZJQ0VfVUkgICAgICB8IEFDUElfU1RBX0RFVklDRV9GVU5DVElPTklORykKKworc3RhdGljIGludCBhY3BpX2J1c190eXBlX2FuZF9zdGF0dXMoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKnR5cGUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc3RhKQogewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCXN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmNoaWxkID0gTlVMTDsKLQlhY3BpX2hhbmRsZSBwaGFuZGxlID0gTlVMTDsKLQlhY3BpX2hhbmRsZSBjaGFuZGxlID0gTlVMTDsKLQlhY3BpX29iamVjdF90eXBlIHR5cGUgPSAwOwotCXUzMiBsZXZlbCA9IDE7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfb2JqZWN0X3R5cGUgYWNwaV90eXBlOwogCisJc3RhdHVzID0gYWNwaV9nZXRfdHlwZShoYW5kbGUsICZhY3BpX3R5cGUpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIXN0YXJ0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBhcmVudCA9IHN0YXJ0OwotCXBoYW5kbGUgPSBzdGFydC0+aGFuZGxlOwotCi0JLyoKLQkgKiBQYXJzZSB0aHJvdWdoIHRoZSBBQ1BJIG5hbWVzcGFjZSwgaWRlbnRpZnkgYWxsICdkZXZpY2VzJywgYW5kCi0JICogY3JlYXRlIGEgbmV3ICdzdHJ1Y3QgYWNwaV9kZXZpY2UnIGZvciBlYWNoLgotCSAqLwotCXdoaWxlICgobGV2ZWwgPiAwKSAmJiBwYXJlbnQpIHsKLQotCQlzdGF0dXMgPSBhY3BpX2dldF9uZXh0X29iamVjdChBQ1BJX1RZUEVfQU5ZLCBwaGFuZGxlLAotCQkJCQkgICAgICBjaGFuZGxlLCAmY2hhbmRsZSk7Ci0KLQkJLyoKLQkJICogSWYgdGhpcyBzY29wZSBpcyBleGhhdXN0ZWQgdGhlbiBtb3ZlIG91ciB3YXkgYmFjayB1cC4KLQkJICovCi0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJbGV2ZWwtLTsKLQkJCWNoYW5kbGUgPSBwaGFuZGxlOwotCQkJYWNwaV9nZXRfcGFyZW50KHBoYW5kbGUsICZwaGFuZGxlKTsKLQkJCWlmIChwYXJlbnQtPnBhcmVudCkKLQkJCQlwYXJlbnQgPSBwYXJlbnQtPnBhcmVudDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3RhdHVzID0gYWNwaV9nZXRfdHlwZShjaGFuZGxlLCAmdHlwZSk7CisJc3dpdGNoIChhY3BpX3R5cGUpIHsKKwljYXNlIEFDUElfVFlQRV9BTlk6CQkvKiBmb3IgQUNQSV9ST09UX09CSkVDVCAqLworCWNhc2UgQUNQSV9UWVBFX0RFVklDRToKKwkJKnR5cGUgPSBBQ1BJX0JVU19UWVBFX0RFVklDRTsKKwkJc3RhdHVzID0gYWNwaV9idXNfZ2V0X3N0YXR1c19oYW5kbGUoaGFuZGxlLCBzdGEpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBJZiB0aGlzIGlzIGEgc2NvcGUgb2JqZWN0IHRoZW4gcGFyc2UgaXQgKGRlcHRoLWZpcnN0KS4KLQkJICovCi0JCWlmICh0eXBlID09IEFDUElfVFlQRV9MT0NBTF9TQ09QRSkgewotCQkJbGV2ZWwrKzsKLQkJCXBoYW5kbGUgPSBjaGFuZGxlOwotCQkJY2hhbmRsZSA9IE5VTEw7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qCi0JCSAqIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBvYmplY3RzIHRoYXQgd2UgY29uc2lkZXIgJ2RldmljZXMnLgotCQkgKi8KLQkJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgQUNQSV9UWVBFX0RFVklDRToKLQkJCXR5cGUgPSBBQ1BJX0JVU19UWVBFX0RFVklDRTsKLQkJCWJyZWFrOwotCQljYXNlIEFDUElfVFlQRV9QUk9DRVNTT1I6Ci0JCQl0eXBlID0gQUNQSV9CVVNfVFlQRV9QUk9DRVNTT1I7Ci0JCQlicmVhazsKLQkJY2FzZSBBQ1BJX1RZUEVfVEhFUk1BTDoKLQkJCXR5cGUgPSBBQ1BJX0JVU19UWVBFX1RIRVJNQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBBQ1BJX1RZUEVfUE9XRVI6Ci0JCQl0eXBlID0gQUNQSV9CVVNfVFlQRV9QT1dFUjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAob3BzLT5hY3BpX29wX2FkZCkKLQkJCXN0YXR1cyA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmNoaWxkLCBwYXJlbnQsCi0JCQkJY2hhbmRsZSwgdHlwZSwgb3BzKTsKLQkJZWxzZQotCQkJc3RhdHVzID0gYWNwaV9idXNfZ2V0X2RldmljZShjaGFuZGxlLCAmY2hpbGQpOwotCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJYnJlYWs7CisJY2FzZSBBQ1BJX1RZUEVfUFJPQ0VTU09SOgorCQkqdHlwZSA9IEFDUElfQlVTX1RZUEVfUFJPQ0VTU09SOworCQlzdGF0dXMgPSBhY3BpX2J1c19nZXRfc3RhdHVzX2hhbmRsZShoYW5kbGUsIHN0YSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChvcHMtPmFjcGlfb3Bfc3RhcnQgJiYgIShvcHMtPmFjcGlfb3BfYWRkKSkgewotCQkJc3RhdHVzID0gYWNwaV9zdGFydF9zaW5nbGVfb2JqZWN0KGNoaWxkKTsKLQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCQljb250aW51ZTsKLQkJfQotCi0JCS8qCi0JCSAqIElmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCwgZW5hYmxlZCwgYW5kIGZ1bmN0aW9uaW5nIHRoZW4KLQkJICogcGFyc2UgaXRzIHNjb3BlIChkZXB0aC1maXJzdCkuICBOb3RlIHRoYXQgd2UgbmVlZCB0bwotCQkgKiByZXByZXNlbnQgYWJzZW50IGRldmljZXMgdG8gZmFjaWxpdGF0ZSBQblAgbm90aWZpY2F0aW9ucwotCQkgKiAtLSBidXQgb25seSB0aGUgc3VidHJlZSBoZWFkIChub3QgYWxsIG9mIGl0cyBjaGlsZHJlbiwKLQkJICogd2hpY2ggd2lsbCBiZSBlbnVtZXJhdGVkIHdoZW4gdGhlIHBhcmVudCBpcyBpbnNlcnRlZCkuCi0JCSAqCi0JCSAqIFRCRDogTmVlZCBub3RpZmljYXRpb25zIGFuZCBvdGhlciBkZXRlY3Rpb24gbWVjaGFuaXNtcwotCQkgKiAgICAgIGluIHBsYWNlIGJlZm9yZSB3ZSBjYW4gZnVsbHkgaW1wbGVtZW50IHRoaXMuCi0JCSAqLwotCQkgLyoKLQkJICogV2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50IGJ1dCBmdW5jdGlvbmFsLCBpdCBpcyBhbHNvCi0JCSAqIG5lY2Vzc2FyeSB0byBzY2FuIHRoZSBjaGlsZHJlbiBvZiB0aGlzIGRldmljZS4KLQkJICovCi0JCWlmIChjaGlsZC0+c3RhdHVzLnByZXNlbnQgfHwgKCFjaGlsZC0+c3RhdHVzLnByZXNlbnQgJiYKLQkJCQkJY2hpbGQtPnN0YXR1cy5mdW5jdGlvbmFsKSkgewotCQkJc3RhdHVzID0gYWNwaV9nZXRfbmV4dF9vYmplY3QoQUNQSV9UWVBFX0FOWSwgY2hhbmRsZSwKLQkJCQkJCSAgICAgIE5VTEwsIE5VTEwpOwotCQkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCQkJbGV2ZWwrKzsKLQkJCQlwaGFuZGxlID0gY2hhbmRsZTsKLQkJCQljaGFuZGxlID0gTlVMTDsKLQkJCQlwYXJlbnQgPSBjaGlsZDsKLQkJCX0KLQkJfQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOworCWNhc2UgQUNQSV9UWVBFX1RIRVJNQUw6CisJCSp0eXBlID0gQUNQSV9CVVNfVFlQRV9USEVSTUFMOworCQkqc3RhID0gQUNQSV9TVEFfREVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBBQ1BJX1RZUEVfUE9XRVI6CisJCSp0eXBlID0gQUNQSV9CVVNfVFlQRV9QT1dFUjsKKwkJKnN0YSA9IEFDUElfU1RBX0RFRkFVTFQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9idXNfY2hlY2tfYWRkKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwKKwkJCQkgICAgICB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dXJuX3ZhbHVlKQoreworCXN0cnVjdCBhY3BpX2J1c19vcHMgKm9wcyA9IGNvbnRleHQ7CisJaW50IHR5cGU7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IGFjcGlfYnVzX3R5cGVfYW5kX3N0YXR1cyhoYW5kbGUsICZ0eXBlLCAmc3RhKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gQUVfT0s7CisKKwlpZiAoIShzdGEgJiBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCkgJiYKKwkgICAgIShzdGEgJiBBQ1BJX1NUQV9ERVZJQ0VfRlVOQ1RJT05JTkcpKQorCQlyZXR1cm4gQUVfQ1RSTF9ERVBUSDsKKworCS8qCisJICogV2UgbWF5IGFscmVhZHkgaGF2ZSBhbiBhY3BpX2RldmljZSBmcm9tIGEgcHJldmlvdXMgZW51bWVyYXRpb24uICBJZgorCSAqIHNvLCB3ZSBuZWVkbid0IGFkZCBpdCBhZ2FpbiwgYnV0IHdlIG1heSBzdGlsbCBoYXZlIHRvIHN0YXJ0IGl0LgorCSAqLworCWRldmljZSA9IE5VTEw7CisJYWNwaV9idXNfZ2V0X2RldmljZShoYW5kbGUsICZkZXZpY2UpOworCWlmIChvcHMtPmFjcGlfb3BfYWRkICYmICFkZXZpY2UpCisJCWFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmRldmljZSwgaGFuZGxlLCB0eXBlLCBzdGEsIG9wcyk7CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIEFFX0NUUkxfREVQVEg7CisKKwlpZiAob3BzLT5hY3BpX29wX3N0YXJ0ICYmICEob3BzLT5hY3BpX29wX2FkZCkpIHsKKwkJc3RhdHVzID0gYWNwaV9zdGFydF9zaW5nbGVfb2JqZWN0KGRldmljZSk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJCXJldHVybiBBRV9DVFJMX0RFUFRIOworCX0KKworCWlmICghKnJldHVybl92YWx1ZSkKKwkJKnJldHVybl92YWx1ZSA9IGRldmljZTsKKwlyZXR1cm4gQUVfT0s7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9idXNfc2NhbihhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX2J1c19vcHMgKm9wcywKKwkJCSBzdHJ1Y3QgYWNwaV9kZXZpY2UgKipjaGlsZCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdm9pZCAqZGV2aWNlID0gTlVMTDsKKworCXN0YXR1cyA9IGFjcGlfYnVzX2NoZWNrX2FkZChoYW5kbGUsIDAsIG9wcywgJmRldmljZSk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9BTlksIGhhbmRsZSwgQUNQSV9VSU5UMzJfTUFYLAorCQkJCSAgICBhY3BpX2J1c19jaGVja19hZGQsIG9wcywgJmRldmljZSk7CisKKwlpZiAoY2hpbGQpCisJCSpjaGlsZCA9IGRldmljZTsKKwlyZXR1cm4gMDsKK30KKwogaW50CiBhY3BpX2J1c19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICoqY2hpbGQsCiAJICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudCwgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSkKIHsKLQlpbnQgcmVzdWx0OwogCXN0cnVjdCBhY3BpX2J1c19vcHMgb3BzOwogCiAJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKIAlvcHMuYWNwaV9vcF9hZGQgPSAxOwogCi0JcmVzdWx0ID0gYWNwaV9hZGRfc2luZ2xlX29iamVjdChjaGlsZCwgcGFyZW50LCBoYW5kbGUsIHR5cGUsICZvcHMpOwotCWlmICghcmVzdWx0KQotCQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuKCpjaGlsZCwgJm9wcyk7Ci0KLQlyZXR1cm4gcmVzdWx0OworCWFjcGlfYnVzX3NjYW4oaGFuZGxlLCAmb3BzLCBjaGlsZCk7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX2FkZCk7CiAKIGludCBhY3BpX2J1c19zdGFydChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlpbnQgcmVzdWx0OwogCXN0cnVjdCBhY3BpX2J1c19vcHMgb3BzOwogCisJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKKwlvcHMuYWNwaV9vcF9zdGFydCA9IDE7CiAKLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXN1bHQgPSBhY3BpX3N0YXJ0X3NpbmdsZV9vYmplY3QoZGV2aWNlKTsKLQlpZiAoIXJlc3VsdCkgewotCQltZW1zZXQoJm9wcywgMCwgc2l6ZW9mKG9wcykpOwotCQlvcHMuYWNwaV9vcF9zdGFydCA9IDE7Ci0JCXJlc3VsdCA9IGFjcGlfYnVzX3NjYW4oZGV2aWNlLCAmb3BzKTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKKwlhY3BpX2J1c19zY2FuKGRldmljZS0+aGFuZGxlLCAmb3BzLCBOVUxMKTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfc3RhcnQpOwogCkBAIC0xNTcyLDE1ICsxNDIwLDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY3BpX2J1c190cmltKTsKIAotc3RhdGljIGludCBhY3BpX2J1c19zY2FuX2ZpeGVkKHN0cnVjdCBhY3BpX2RldmljZSAqcm9vdCkKK3N0YXRpYyBpbnQgYWNwaV9idXNfc2Nhbl9maXhlZCh2b2lkKQogewogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIG9wczsKIAotCWlmICghcm9vdCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAltZW1zZXQoJm9wcywgMCwgc2l6ZW9mKG9wcykpOwogCW9wcy5hY3BpX29wX2FkZCA9IDE7CiAJb3BzLmFjcGlfb3Bfc3RhcnQgPSAxOwpAQCAtMTU4OSwxNiArMTQzNCwxNiBAQAogCSAqIEVudW1lcmF0ZSBhbGwgZml4ZWQtZmVhdHVyZSBkZXZpY2VzLgogCSAqLwogCWlmICgoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9QT1dFUl9CVVRUT04pID09IDApIHsKLQkJcmVzdWx0ID0gYWNwaV9hZGRfc2luZ2xlX29iamVjdCgmZGV2aWNlLCBhY3BpX3Jvb3QsCi0JCQkJCQlOVUxMLAorCQlyZXN1bHQgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZkZXZpY2UsIE5VTEwsCiAJCQkJCQlBQ1BJX0JVU19UWVBFX1BPV0VSX0JVVFRPTiwKKwkJCQkJCUFDUElfU1RBX0RFRkFVTFQsCiAJCQkJCQkmb3BzKTsKIAl9CiAKIAlpZiAoKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfU0xFRVBfQlVUVE9OKSA9PSAwKSB7Ci0JCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmRldmljZSwgYWNwaV9yb290LAotCQkJCQkJTlVMTCwKKwkJcmVzdWx0ID0gYWNwaV9hZGRfc2luZ2xlX29iamVjdCgmZGV2aWNlLCBOVUxMLAogCQkJCQkJQUNQSV9CVVNfVFlQRV9TTEVFUF9CVVRUT04sCisJCQkJCQlBQ1BJX1NUQV9ERUZBVUxULAogCQkJCQkJJm9wcyk7CiAJfQogCkBAIC0xNjIxLDI0ICsxNDY2LDE1IEBACiAJfQogCiAJLyoKLQkgKiBDcmVhdGUgdGhlIHJvb3QgZGV2aWNlIGluIHRoZSBidXMncyBkZXZpY2UgdHJlZQotCSAqLwotCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmFjcGlfcm9vdCwgTlVMTCwgQUNQSV9ST09UX09CSkVDVCwKLQkJCQkJQUNQSV9CVVNfVFlQRV9TWVNURU0sICZvcHMpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gRG9uZTsKLQotCS8qCiAJICogRW51bWVyYXRlIGRldmljZXMgaW4gdGhlIEFDUEkgbmFtZXNwYWNlLgogCSAqLwotCXJlc3VsdCA9IGFjcGlfYnVzX3NjYW5fZml4ZWQoYWNwaV9yb290KTsKKwlyZXN1bHQgPSBhY3BpX2J1c19zY2FuKEFDUElfUk9PVF9PQkpFQ1QsICZvcHMsICZhY3BpX3Jvb3QpOwogCiAJaWYgKCFyZXN1bHQpCi0JCXJlc3VsdCA9IGFjcGlfYnVzX3NjYW4oYWNwaV9yb290LCAmb3BzKTsKKwkJcmVzdWx0ID0gYWNwaV9idXNfc2Nhbl9maXhlZCgpOwogCiAJaWYgKHJlc3VsdCkKIAkJYWNwaV9kZXZpY2VfdW5yZWdpc3RlcihhY3BpX3Jvb3QsIEFDUElfQlVTX1JFTU9WQUxfTk9STUFMKTsKIAotRG9uZToKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwppbmRleCBhOTBhZmNjLi40Y2MxYjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwpAQCAtNDEzLDYgKzQxMywzMCBAQAogCQl9LAogCX0sCiAJeworCS5jYWxsYmFjayA9IGluaXRfc2V0X3NjaV9lbl9vbl9yZXN1bWUsCisJLmlkZW50ID0gIkhld2xldHQtUGFja2FyZCBQYXZpbGlvbiBkdjQiLAorCS5tYXRjaGVzID0geworCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjQiKSwKKwkJfSwKKwl9LAorCXsKKwkuY2FsbGJhY2sgPSBpbml0X3NldF9zY2lfZW5fb25fcmVzdW1lLAorCS5pZGVudCA9ICJIZXdsZXR0LVBhY2thcmQgUGF2aWxpb24gZHY3IiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgUGF2aWxpb24gZHY3IiksCisJCX0sCisJfSwKKwl7CisJLmNhbGxiYWNrID0gaW5pdF9zZXRfc2NpX2VuX29uX3Jlc3VtZSwKKwkuaWRlbnQgPSAiSGV3bGV0dC1QYWNrYXJkIENvbXBhcSBQcmVzYXJpbyBDUTQwIE5vdGVib29rIFBDIiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQ29tcGFxIFByZXNhcmlvIENRNDAgTm90ZWJvb2sgUEMiKSwKKwkJfSwKKwl9LAorCXsKIAkuY2FsbGJhY2sgPSBpbml0X29sZF9zdXNwZW5kX29yZGVyaW5nLAogCS5pZGVudCA9ICJQYW5hc29uaWMgQ0Y1MS0yTCIsCiAJLm1hdGNoZXMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW8uYyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCmluZGV4IDk0YjFhNGMuLjA1ZGZmNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS92aWRlby5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAkJCQkJCXN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyBzc2l6ZV90IGFjcGlfdmlkZW9fZGV2aWNlX3dyaXRlX2JyaWdodG5lc3Moc3RydWN0IGZpbGUgKmZpbGUsCiAJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzc19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzc19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0xMTA5LDcgKzExMDksMTIgQEAKIAkgKi8KIAogCS8qIERvZXMgdGhpcyBkZXZpY2Ugc3VwcG9ydCB2aWRlbyBzd2l0Y2hpbmc/ICovCi0JaWYgKHZpZGVvLT5jYXAuX0RPUykgeworCWlmICh2aWRlby0+Y2FwLl9ET1MgfHwgdmlkZW8tPmNhcC5fRE9EKSB7CisJCWlmICghdmlkZW8tPmNhcC5fRE9TKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIEZXX0JVRworCQkJCSJBQ1BJKCVzKSBkZWZpbmVzIF9ET0QgYnV0IG5vdCBfRE9TXG4iLAorCQkJCWFjcGlfZGV2aWNlX2JpZCh2aWRlby0+ZGV2aWNlKSk7CisJCX0KIAkJdmlkZW8tPmZsYWdzLm11bHRpaGVhZCA9IDE7CiAJCXN0YXR1cyA9IDA7CiAJfQpAQCAtMTIxOCw3ICsxMjIzLDcgQEAKIAl1MzIgc3RhdGUgPSAwOwogCiAKLQlpZiAoIWRldiB8fCBjb3VudCArIDEgPiBzaXplb2Ygc3RyKQorCWlmICghZGV2IHx8IGNvdW50ID49IHNpemVvZihzdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihzdHIsIGJ1ZmZlciwgY291bnQpKQpAQCAtMTI3NSw3ICsxMjgwLDcgQEAKIAlpbnQgaTsKIAogCi0JaWYgKCFkZXYgfHwgIWRldi0+YnJpZ2h0bmVzcyB8fCBjb3VudCArIDEgPiBzaXplb2Ygc3RyKQorCWlmICghZGV2IHx8ICFkZXYtPmJyaWdodG5lc3MgfHwgY291bnQgPj0gc2l6ZW9mKHN0cikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKHN0ciwgYnVmZmVyLCBjb3VudCkpCkBAIC0xNTU3LDcgKzE1NjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBvcHQsIG9wdGlvbnM7CiAKIAotCWlmICghdmlkZW8gfHwgY291bnQgKyAxID4gc2l6ZW9mIHN0cikKKwlpZiAoIXZpZGVvIHx8IGNvdW50ID49IHNpemVvZihzdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0YXR1cyA9IGFjcGlfdmlkZW9fYnVzX1BPU1Rfb3B0aW9ucyh2aWRlbywgJm9wdGlvbnMpOwpAQCAtMTU5Nyw3ICsxNjAyLDcgQEAKIAl1bnNpZ25lZCBsb25nIG9wdDsKIAogCi0JaWYgKCF2aWRlbyB8fCBjb3VudCArIDEgPiBzaXplb2Ygc3RyKQorCWlmICghdmlkZW8gfHwgY291bnQgPj0gc2l6ZW9mKHN0cikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKHN0ciwgYnVmZmVyLCBjb3VudCkpCkBAIC0xOTg2LDYgKzE5OTEsMTAgQEAKIAogCXJlc3VsdCA9IGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9zZXRfbGV2ZWwoZGV2aWNlLCBsZXZlbF9uZXh0KTsKIAorCWlmICghcmVzdWx0KQorCQliYWNrbGlnaHRfZm9yY2VfdXBkYXRlKGRldmljZS0+YmFja2xpZ2h0LAorCQkJCSAgICAgICBCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSk7CisKIG91dDoKIAlpZiAocmVzdWx0KQogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJGYWlsZWQgdG8gc3dpdGNoIHRoZSBicmlnaHRuZXNzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwppbmRleCA3MDMyZjI1Li41NzU1OTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCkBAIC04NCw3ICs4NCw3IEBACiAJCXJldHVybiAwOwogCiAJLyogRG9lcyB0aGlzIGRldmljZSBhYmxlIHRvIHN1cHBvcnQgdmlkZW8gc3dpdGNoaW5nID8gKi8KLQlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET0QiLCAmaF9kdW1teSkpICYmCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRE9EIiwgJmhfZHVtbXkpKSB8fAogCSAgICBBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPUyIsICZoX2R1bW15KSkpCiAJCXZpZGVvX2NhcHMgfD0gQUNQSV9WSURFT19PVVRQVVRfU1dJVENISU5HOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggYWNkMTE2Mi4uYTMyNDFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtMTIyLDYgKzEyMiw3IEBACiAJSE9TVF9WRVJTSU9OCQk9IDB4MTAsIC8qIEFIQ0kgc3BlYy4gdmVyc2lvbiBjb21wbGlhbmN5ICovCiAJSE9TVF9FTV9MT0MJCT0gMHgxYywgLyogRW5jbG9zdXJlIE1hbmFnZW1lbnQgbG9jYXRpb24gKi8KIAlIT1NUX0VNX0NUTAkJPSAweDIwLCAvKiBFbmNsb3N1cmUgTWFuYWdlbWVudCBDb250cm9sICovCisJSE9TVF9DQVAyCQk9IDB4MjQsIC8qIGhvc3QgY2FwYWJpbGl0aWVzLCBleHRlbmRlZCAqLwogCiAJLyogSE9TVF9DVEwgYml0cyAqLwogCUhPU1RfUkVTRVQJCT0gKDEgPDwgMCksICAvKiByZXNldCBjb250cm9sbGVyOyBzZWxmLWNsZWFyICovCkBAIC0xMjksMTYgKzEzMCwyOSBAQAogCUhPU1RfQUhDSV9FTgkJPSAoMSA8PCAzMSksIC8qIEFIQ0kgZW5hYmxlZCAqLwogCiAJLyogSE9TVF9DQVAgYml0cyAqLworCUhPU1RfQ0FQX1NYUwkJPSAoMSA8PCA1KSwgIC8qIFN1cHBvcnRzIEV4dGVybmFsIFNBVEEgKi8KIAlIT1NUX0NBUF9FTVMJCT0gKDEgPDwgNiksICAvKiBFbmNsb3N1cmUgTWFuYWdlbWVudCBzdXBwb3J0ICovCi0JSE9TVF9DQVBfU1NDCQk9ICgxIDw8IDE0KSwgLyogU2x1bWJlciBjYXBhYmxlICovCisJSE9TVF9DQVBfQ0NDCQk9ICgxIDw8IDcpLCAgLyogQ29tbWFuZCBDb21wbGV0aW9uIENvYWxlc2NpbmcgKi8KKwlIT1NUX0NBUF9QQVJUCQk9ICgxIDw8IDEzKSwgLyogUGFydGlhbCBzdGF0ZSBjYXBhYmxlICovCisJSE9TVF9DQVBfU1NDCQk9ICgxIDw8IDE0KSwgLyogU2x1bWJlciBzdGF0ZSBjYXBhYmxlICovCisJSE9TVF9DQVBfUElPX01VTFRJCT0gKDEgPDwgMTUpLCAvKiBQSU8gbXVsdGlwbGUgRFJRIHN1cHBvcnQgKi8KKwlIT1NUX0NBUF9GQlMJCT0gKDEgPDwgMTYpLCAvKiBGSVMtYmFzZWQgc3dpdGNoaW5nIHN1cHBvcnQgKi8KIAlIT1NUX0NBUF9QTVAJCT0gKDEgPDwgMTcpLCAvKiBQb3J0IE11bHRpcGxpZXIgc3VwcG9ydCAqLworCUhPU1RfQ0FQX09OTFkJCT0gKDEgPDwgMTgpLCAvKiBTdXBwb3J0cyBBSENJIG1vZGUgb25seSAqLwogCUhPU1RfQ0FQX0NMTwkJPSAoMSA8PCAyNCksIC8qIENvbW1hbmQgTGlzdCBPdmVycmlkZSBzdXBwb3J0ICovCisJSE9TVF9DQVBfTEVECQk9ICgxIDw8IDI1KSwgLyogU3VwcG9ydHMgYWN0aXZpdHkgTEVEICovCiAJSE9TVF9DQVBfQUxQTQkJPSAoMSA8PCAyNiksIC8qIEFnZ3Jlc3NpdmUgTGluayBQTSBzdXBwb3J0ICovCiAJSE9TVF9DQVBfU1NTCQk9ICgxIDw8IDI3KSwgLyogU3RhZ2dlcmVkIFNwaW4tdXAgKi8KKwlIT1NUX0NBUF9NUFMJCT0gKDEgPDwgMjgpLCAvKiBNZWNoYW5pY2FsIHByZXNlbmNlIHN3aXRjaCAqLwogCUhPU1RfQ0FQX1NOVEYJCT0gKDEgPDwgMjkpLCAvKiBTTm90aWZpY2F0aW9uIHJlZ2lzdGVyICovCiAJSE9TVF9DQVBfTkNRCQk9ICgxIDw8IDMwKSwgLyogTmF0aXZlIENvbW1hbmQgUXVldWVpbmcgKi8KIAlIT1NUX0NBUF82NAkJPSAoMSA8PCAzMSksIC8qIFBDSSBEQUMgKDY0LWJpdCBETUEpIHN1cHBvcnQgKi8KIAorCS8qIEhPU1RfQ0FQMiBiaXRzICovCisJSE9TVF9DQVAyX0JPSAkJPSAoMSA8PCAwKSwgIC8qIEJJT1MvT1MgaGFuZG9mZiBzdXBwb3J0ZWQgKi8KKwlIT1NUX0NBUDJfTlZNSENJCT0gKDEgPDwgMSksICAvKiBOVk1IQ0kgc3VwcG9ydGVkICovCisJSE9TVF9DQVAyX0FQU1QJCT0gKDEgPDwgMiksICAvKiBBdXRvbWF0aWMgcGFydGlhbCB0byBzbHVtYmVyICovCisKIAkvKiByZWdpc3RlcnMgZm9yIGVhY2ggU0FUQSBwb3J0ICovCiAJUE9SVF9MU1RfQUREUgkJPSAweDAwLCAvKiBjb21tYW5kIGxpc3QgRE1BIGFkZHIgKi8KIAlQT1JUX0xTVF9BRERSX0hJCT0gMHgwNCwgLyogY29tbWFuZCBsaXN0IERNQSBhZGRyIGhpICovCkBAIC0yNjcsOCArMjgxLDEwIEBACiBzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgewogCXVuc2lnbmVkIGludAkJZmxhZ3M7CQkvKiBBSENJX0hGTEFHXyogKi8KIAl1MzIJCQljYXA7CQkvKiBjYXAgdG8gdXNlICovCisJdTMyCQkJY2FwMjsJCS8qIGNhcDIgdG8gdXNlICovCiAJdTMyCQkJcG9ydF9tYXA7CS8qIHBvcnQgbWFwIHRvIHVzZSAqLwogCXUzMgkJCXNhdmVkX2NhcDsJLyogc2F2ZWQgaW5pdGlhbCBjYXAgKi8KKwl1MzIJCQlzYXZlZF9jYXAyOwkvKiBzYXZlZCBpbml0aWFsIGNhcDIgKi8KIAl1MzIJCQlzYXZlZF9wb3J0X21hcDsJLyogc2F2ZWQgaW5pdGlhbCBwb3J0X21hcCAqLwogCXUzMiAJCQllbV9sb2M7IC8qIGVuY2xvc3VyZSBtYW5hZ2VtZW50IGxvY2F0aW9uICovCiB9OwpAQCAtMzMxLDEyICszNDcsMTUgQEAKIAogc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2hvc3RfY2FwcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfaG9zdF9jYXAyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIHN0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X3BvcnRfY21kKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogCiBERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwcywgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwcywgTlVMTCk7CitERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwMiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwMiwgTlVMTCk7CiBERVZJQ0VfQVRUUihhaGNpX2hvc3RfdmVyc2lvbiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfdmVyc2lvbiwgTlVMTCk7CiBERVZJQ0VfQVRUUihhaGNpX3BvcnRfY21kLCBTX0lSVUdPLCBhaGNpX3Nob3dfcG9ydF9jbWQsIE5VTEwpOwogCkBAIC0zNDUsNiArMzY0LDcgQEAKIAkmZGV2X2F0dHJfZW1fbWVzc2FnZV90eXBlLAogCSZkZXZfYXR0cl9lbV9tZXNzYWdlLAogCSZkZXZfYXR0cl9haGNpX2hvc3RfY2FwcywKKwkmZGV2X2F0dHJfYWhjaV9ob3N0X2NhcDIsCiAJJmRldl9hdHRyX2FoY2lfaG9zdF92ZXJzaW9uLAogCSZkZXZfYXR0cl9haGNpX3BvcnRfY21kLAogCU5VTEwKQEAgLTQ0Nyw3ICs0NjcsOCBAQAogCVtib2FyZF9haGNpX3NiNjAwXSA9CiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19JR05fU0VSUl9JTlRFUk5BTCB8Ci0JCQkJIEFIQ0lfSEZMQUdfTk9fTVNJIHwgQUhDSV9IRkxBR19TRUNUMjU1KSwKKwkJCQkgQUhDSV9IRkxBR19OT19NU0kgfCBBSENJX0hGTEFHX1NFQ1QyNTUgfAorCQkJCSBBSENJX0hGTEFHXzMyQklUX09OTFkpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCkBAIC01NTQsNyArNTc1LDcgQEAKIAl7IFBDSV9WREVWSUNFKEFUSSwgMHg0Mzk1KSwgYm9hcmRfYWhjaV9zYjcwMCB9LCAvKiBBVEkgU0I3MDAvODAwICovCiAKIAkvKiBBTUQgKi8KLQl7IFBDSV9WREVWSUNFKEFNRCwgMHg3ODAwKSwgYm9hcmRfYWhjaSB9LCAvKiBBTUQgU0I5MDAgKi8KKwl7IFBDSV9WREVWSUNFKEFNRCwgMHg3ODAwKSwgYm9hcmRfYWhjaSB9LCAvKiBBTUQgSHVkc29uLTIgKi8KIAkvKiBBTUQgaXMgdXNpbmcgUkFJRCBjbGFzcyBvbmx5IGZvciBhaGNpIGNvbnRyb2xsZXJzICovCiAJeyBQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkgIFBDSV9DTEFTU19TVE9SQUdFX1JBSUQgPDwgOCwgMHhmZmZmZmYsIGJvYXJkX2FoY2kgfSwKQEAgLTU4NCw2ICs2MDUsNyBAQAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTkpLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A2NyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NWEpLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A2NyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NWIpLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1ODApLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBMaW51eCBJRCAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA3ZjApLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A3MyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA3ZjEpLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A3MyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA3ZjIpLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A3MyAqLwpAQCAtNzMyLDYgKzc1NCwxNiBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4XG4iLCBocHJpdi0+Y2FwKTsKIH0KIAorc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2hvc3RfY2FwMihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGF0YV9zaG9zdF90b19wb3J0KHNob3N0KTsKKwlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4XG4iLCBocHJpdi0+Y2FwMik7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC03NzEsNyArODAzLDcgQEAKIAkJCQkgICAgIHN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYpCiB7CiAJdm9pZCBfX2lvbWVtICptbWlvID0gcGNpbV9pb21hcF90YWJsZShwZGV2KVtBSENJX1BDSV9CQVJdOwotCXUzMiBjYXAsIHBvcnRfbWFwOworCXUzMiBjYXAsIGNhcDIsIHZlcnMsIHBvcnRfbWFwOwogCWludCBpOwogCWludCBtdjsKIApAQCAtNzg0LDYgKzgxNiwxNCBAQAogCWhwcml2LT5zYXZlZF9jYXAgPSBjYXAgPSByZWFkbChtbWlvICsgSE9TVF9DQVApOwogCWhwcml2LT5zYXZlZF9wb3J0X21hcCA9IHBvcnRfbWFwID0gcmVhZGwobW1pbyArIEhPU1RfUE9SVFNfSU1QTCk7CiAKKwkvKiBDQVAyIHJlZ2lzdGVyIGlzIG9ubHkgZGVmaW5lZCBmb3IgQUhDSSAxLjIgYW5kIGxhdGVyICovCisJdmVycyA9IHJlYWRsKG1taW8gKyBIT1NUX1ZFUlNJT04pOworCWlmICgodmVycyA+PiAxNikgPiAxIHx8CisJICAgKCh2ZXJzID4+IDE2KSA9PSAxICYmICh2ZXJzICYgMHhGRkZGKSA+PSAweDIwMCkpCisJCWhwcml2LT5zYXZlZF9jYXAyID0gY2FwMiA9IHJlYWRsKG1taW8gKyBIT1NUX0NBUDIpOworCWVsc2UKKwkJaHByaXYtPnNhdmVkX2NhcDIgPSBjYXAyID0gMDsKKwogCS8qIHNvbWUgY2hpcHMgaGF2ZSBlcnJhdGEgcHJldmVudGluZyA2NGJpdCB1c2UgKi8KIAlpZiAoKGNhcCAmIEhPU1RfQ0FQXzY0KSAmJiAoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR18zMkJJVF9PTkxZKSkgewogCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwKQEAgLTg2OSw2ICs5MDksNyBAQAogCiAJLyogcmVjb3JkIHZhbHVlcyB0byB1c2UgZHVyaW5nIG9wZXJhdGlvbiAqLwogCWhwcml2LT5jYXAgPSBjYXA7CisJaHByaXYtPmNhcDIgPSBjYXAyOwogCWhwcml2LT5wb3J0X21hcCA9IHBvcnRfbWFwOwogfQogCkBAIC04ODcsNiArOTI4LDggQEAKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBob3N0LT5pb21hcFtBSENJX1BDSV9CQVJdOwogCiAJd3JpdGVsKGhwcml2LT5zYXZlZF9jYXAsIG1taW8gKyBIT1NUX0NBUCk7CisJaWYgKGhwcml2LT5zYXZlZF9jYXAyKQorCQl3cml0ZWwoaHByaXYtPnNhdmVkX2NhcDIsIG1taW8gKyBIT1NUX0NBUDIpOwogCXdyaXRlbChocHJpdi0+c2F2ZWRfcG9ydF9tYXAsIG1taW8gKyBIT1NUX1BPUlRTX0lNUEwpOwogCSh2b2lkKSByZWFkbChtbWlvICsgSE9TVF9QT1JUU19JTVBMKTsJLyogZmx1c2ggKi8KIH0KQEAgLTI1MzQsMTMgKzI1NzcsMTQgQEAKIAlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihob3N0LT5kZXYpOwogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhvc3QtPmlvbWFwW0FIQ0lfUENJX0JBUl07Ci0JdTMyIHZlcnMsIGNhcCwgaW1wbCwgc3BlZWQ7CisJdTMyIHZlcnMsIGNhcCwgY2FwMiwgaW1wbCwgc3BlZWQ7CiAJY29uc3QgY2hhciAqc3BlZWRfczsKIAl1MTYgY2M7CiAJY29uc3QgY2hhciAqc2NjX3M7CiAKIAl2ZXJzID0gcmVhZGwobW1pbyArIEhPU1RfVkVSU0lPTik7CiAJY2FwID0gaHByaXYtPmNhcDsKKwljYXAyID0gaHByaXYtPmNhcDI7CiAJaW1wbCA9IGhwcml2LT5wb3J0X21hcDsKIAogCXNwZWVkID0gKGNhcCA+PiAyMCkgJiAweGY7CkBAIC0yNTgzLDI1ICsyNjI3LDI5IEBACiAJCSJmbGFnczogIgogCQkiJXMlcyVzJXMlcyVzJXMiCiAJCSIlcyVzJXMlcyVzJXMlcyIKLQkJIiVzXG4iCisJCSIlcyVzJXMlcyVzJXNcbiIKIAkJLAogCi0JCWNhcCAmICgxIDw8IDMxKSA/ICI2NGJpdCAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDMwKSA/ICJuY3EgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAyOSkgPyAic250ZiAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDI4KSA/ICJpbGNrICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMjcpID8gInN0YWcgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAyNikgPyAicG0gIiA6ICIiLAotCQljYXAgJiAoMSA8PCAyNSkgPyAibGVkICIgOiAiIiwKLQotCQljYXAgJiAoMSA8PCAyNCkgPyAiY2xvICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTkpID8gIm56ICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTgpID8gIm9ubHkgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxNykgPyAicG1wICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTUpID8gInBpbyAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDE0KSA/ICJzbHVtICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTMpID8gInBhcnQgIiA6ICIiLAotCQljYXAgJiAoMSA8PCA2KSA/ICJlbXMgIjogIiIKKwkJY2FwICYgSE9TVF9DQVBfNjQgPyAiNjRiaXQgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9OQ1EgPyAibmNxICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfU05URiA/ICJzbnRmICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfTVBTID8gImlsY2sgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9TU1MgPyAic3RhZyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX0FMUE0gPyAicG0gIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9MRUQgPyAibGVkICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfQ0xPID8gImNsbyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX09OTFkgPyAib25seSAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1BNUCA/ICJwbXAgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9GQlMgPyAiZmJzICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfUElPX01VTFRJID8gInBpbyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1NTQyA/ICJzbHVtICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfUEFSVCA/ICJwYXJ0ICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfQ0NDID8gImNjYyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX0VNUyA/ICJlbXMgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9TWFMgPyAic3hzICIgOiAiIiwKKwkJY2FwMiAmIEhPU1RfQ0FQMl9BUFNUID8gImFwc3QgIiA6ICIiLAorCQljYXAyICYgSE9TVF9DQVAyX05WTUhDSSA/ICJudm1wICIgOiAiIiwKKwkJY2FwMiAmIEhPU1RfQ0FQMl9CT0ggPyAiYm9oICIgOiAiIgogCQkpOwogfQogCkBAIC0yNjUwLDE3ICsyNjk4LDE1IEBACiAJfQogfQogCi0vKgotICogU0I2MDAgYWhjaSBjb250cm9sbGVyIG9uIGNlcnRhaW4gYm9hcmRzIGNhbid0IGRvIDY0Yml0IERNQSB3aXRoCi0gKiBvbGRlciBCSU9TLgotICovCi1zdGF0aWMgYm9vbCBhaGNpX3NiNjAwXzMyYml0X29ubHkoc3RydWN0IHBjaV9kZXYgKnBkZXYpCisvKiBvbmx5IHNvbWUgU0I2MDAgYWhjaSBjb250cm9sbGVycyBjYW4gZG8gNjRiaXQgRE1BICovCitzdGF0aWMgYm9vbCBhaGNpX3NiNjAwX2VuYWJsZV82NGJpdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgc3lzaWRzW10gPSB7CiAJCS8qCiAJCSAqIFRoZSBvbGRlc3QgdmVyc2lvbiBrbm93biB0byBiZSBicm9rZW4gaXMgMDkwMSBhbmQKIAkJICogd29ya2luZyBpcyAxNTAxIHdoaWNoIHdhcyByZWxlYXNlZCBvbiAyMDA3LTEwLTI2LgotCQkgKiBGb3JjZSAzMmJpdCBETUEgb24gYW55dGhpbmcgb2xkZXIgdGhhbiAxNTAxLgorCQkgKiBFbmFibGUgNjRiaXQgRE1BIG9uIDE1MDEgYW5kIGFueXRoaW5nIG5ld2VyLgorCQkgKgogCQkgKiBQbGVhc2UgcmVhZCBia28jOTQxMiBmb3IgbW9yZSBpbmZvLgogCQkgKi8KIAkJewpAQCAtMjY3Myw0NiArMjcxOSw1NyBAQAogCQkJLmRyaXZlcl9kYXRhID0gIjIwMDcxMDI2IiwJLyogeXl5eW1tZGQgKi8KIAkJfSwKIAkJLyoKLQkJICogSXQncyB5ZXQgdW5rbm93biB3aGV0aGVyIG1vcmUgcmVjZW50IEJJT1MgZml4ZXMgdGhlCi0JCSAqIHByb2JsZW0uICBCbGFja2xpc3QgdGhlIHdob2xlIGJvYXJkIGZvciB0aGUgdGltZQotCQkgKiBiZWluZy4gIFBsZWFzZSByZWFkIHRoZSBmb2xsb3dpbmcgdGhyZWFkIGZvciBtb3JlCi0JCSAqIGluZm8uCisJCSAqIEFsbCBCSU9TIHZlcnNpb25zIGZvciB0aGUgTVNJIEs5QTIgUGxhdGludW0gKE1TLTczNzYpCisJCSAqIHN1cHBvcnQgNjRiaXQgRE1BLgogCQkgKgotCQkgKiBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5saW51eC5pZGUvNDIzMjYKKwkJICogQklPUyB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gMS41IGhhZCB0aGUgTWFudWZhY3R1cmVyIERNSQorCQkgKiBmaWVsZHMgYXMgIk1JQ1JPLVNUQVIgSU5URVJBTlRJT05BTCBDTy4sTFREIi4KKwkJICogVGhpcyBzcGVsbGluZyBtaXN0YWtlIHdhcyBmaXhlZCBpbiBCSU9TIHZlcnNpb24gMS41LCBzbworCQkgKiAxLjUgYW5kIGxhdGVyIGhhdmUgdGhlIE1hbnVmYWN0dXJlciBhcworCQkgKiAiTUlDUk8tU1RBUiBJTlRFUk5BVElPTkFMIENPLixMVEQiLgorCQkgKiBTbyB0cnkgdG8gbWF0Y2ggb24gRE1JX0JPQVJEX1ZFTkRPUiBvZiAiTUlDUk8tU1RBUiBJTlRFUiIuCisJCSAqCisJCSAqIEJJT1MgdmVyc2lvbnMgZWFybGllciB0aGFuIDEuOSBoYWQgYSBCb2FyZCBQcm9kdWN0IE5hbWUKKwkJICogRE1JIGZpZWxkIG9mICJNUy03Mzc2Ii4gVGhpcyB3YXMgY2hhbmdlZCB0byBiZQorCQkgKiAiSzlBMiBQbGF0aW51bSAoTVMtNzM3NikiIGluIHZlcnNpb24gMS45LCBidXQgd2UgY2FuIHN0aWxsCisJCSAqIG1hdGNoIG9uIERNSV9CT0FSRF9OQU1FIG9mICJNUy03Mzc2Ii4KIAkJICovCiAJCXsKLQkJCS5pZGVudCA9ICJHaWdhYnl0ZSBHQS1NQTY5Vk0tUzIiLAorCQkJLmlkZW50ID0gIk1TSSBLOUEyIFBsYXRpbnVtIiwKIAkJCS5tYXRjaGVzID0gewogCQkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLAotCQkJCQkgICJHaWdhYnl0ZSBUZWNobm9sb2d5IENvLiwgTHRkLiIpLAotCQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkdBLU1BNjlWTS1TMiIpLAorCQkJCQkgICJNSUNSTy1TVEFSIElOVEVSIiksCisJCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTVMtNzM3NiIpLAogCQkJfSwKIAkJfSwKIAkJeyB9CiAJfTsKIAljb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqbWF0Y2g7CisJaW50IHllYXIsIG1vbnRoLCBkYXRlOworCWNoYXIgYnVmWzldOwogCiAJbWF0Y2ggPSBkbWlfZmlyc3RfbWF0Y2goc3lzaWRzKTsKIAlpZiAocGRldi0+YnVzLT5udW1iZXIgIT0gMCB8fCBwZGV2LT5kZXZmbiAhPSBQQ0lfREVWRk4oMHgxMiwgMCkgfHwKIAkgICAgIW1hdGNoKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAobWF0Y2gtPmRyaXZlcl9kYXRhKSB7Ci0JCWludCB5ZWFyLCBtb250aCwgZGF0ZTsKLQkJY2hhciBidWZbOV07CisJaWYgKCFtYXRjaC0+ZHJpdmVyX2RhdGEpCisJCWdvdG8gZW5hYmxlXzY0Yml0OwogCi0JCWRtaV9nZXRfZGF0ZShETUlfQklPU19EQVRFLCAmeWVhciwgJm1vbnRoLCAmZGF0ZSk7Ci0JCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDRkJTAyZCUwMmQiLCB5ZWFyLCBtb250aCwgZGF0ZSk7CisJZG1pX2dldF9kYXRlKERNSV9CSU9TX0RBVEUsICZ5ZWFyLCAmbW9udGgsICZkYXRlKTsKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTA0ZCUwMmQlMDJkIiwgeWVhciwgbW9udGgsIGRhdGUpOwogCi0JCWlmIChzdHJjbXAoYnVmLCBtYXRjaC0+ZHJpdmVyX2RhdGEpID49IDApCi0JCQlyZXR1cm4gZmFsc2U7Ci0KKwlpZiAoc3RyY21wKGJ1ZiwgbWF0Y2gtPmRyaXZlcl9kYXRhKSA+PSAwKQorCQlnb3RvIGVuYWJsZV82NGJpdDsKKwllbHNlIHsKIAkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwZGV2LT5kZXYsICIlczogQklPUyB0b28gb2xkLCAiCiAJCQkgICAiZm9yY2luZyAzMmJpdCBETUEsIHVwZGF0ZSBCSU9TXG4iLCBtYXRjaC0+aWRlbnQpOwotCX0gZWxzZQotCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwgIiVzOiB0aGlzIGJvYXJkIGNhbid0ICIKLQkJCSAgICJkbyA2NGJpdCBETUEsIGZvcmNpbmcgMzJiaXRcbiIsIG1hdGNoLT5pZGVudCk7CisJCXJldHVybiBmYWxzZTsKKwl9CiAKK2VuYWJsZV82NGJpdDoKKwlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwgIiVzOiBlbmFibGluZyA2NGJpdCBETUFcbiIsCisJCSAgIG1hdGNoLT5pZGVudCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI4NTgsNiArMjkxNSw1NSBAQAogCXJldHVybiBwZGV2LT5idXMtPm51bWJlciA9PSAodmFsID4+IDgpICYmIHBkZXYtPmRldmZuID09ICh2YWwgJiAweGZmKTsKIH0KIAorI2lmZGVmIENPTkZJR19BVEFfQUNQSQorc3RhdGljIHZvaWQgYWhjaV9ndGZfZmlsdGVyX3dvcmthcm91bmQoc3RydWN0IGF0YV9ob3N0ICpob3N0KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBzeXNpZHNbXSA9IHsKKwkJLyoKKwkJICogQXNwaXJlIDM4MTBUIGlzc3VlcyBhIGJ1bmNoIG9mIFNBVEEgZW5hYmxlIGNvbW1hbmRzCisJCSAqIHZpYSBfR1RGIGluY2x1ZGluZyBhbiBpbnZhbGlkIG9uZSBhbmQgb25lIHdoaWNoIGlzCisJCSAqIHJlamVjdGVkIGJ5IHRoZSBkZXZpY2UuICBBbW9uZyB0aGUgc3VjY2Vzc2Z1bCBvbmVzCisJCSAqIGlzIEZQRE1BIG5vbi16ZXJvIG9mZnNldCBlbmFibGUgd2hpY2ggd2hlbiBlbmFibGVkCisJCSAqIG9ubHkgb24gdGhlIGRyaXZlIHNpZGUgbGVhZHMgdG8gTkNRIGNvbW1hbmQKKwkJICogZmFpbHVyZXMuICBGaWx0ZXIgaXQgb3V0LgorCQkgKi8KKwkJeworCQkJLmlkZW50ID0gIkFzcGlyZSAzODEwVCIsCisJCQkubWF0Y2hlcyA9IHsKKwkJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCisJCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBc3BpcmUgMzgxMFQiKSwKKwkJCX0sCisJCQkuZHJpdmVyX2RhdGEgPSAodm9pZCAqKUFUQV9BQ1BJX0ZJTFRFUl9GUERNQV9PRkZTRVQsCisJCX0sCisJCXsgfQorCX07CisJY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmRtaSA9IGRtaV9maXJzdF9tYXRjaChzeXNpZHMpOworCXVuc2lnbmVkIGludCBmaWx0ZXI7CisJaW50IGk7CisKKwlpZiAoIWRtaSkKKwkJcmV0dXJuOworCisJZmlsdGVyID0gKHVuc2lnbmVkIGxvbmcpZG1pLT5kcml2ZXJfZGF0YTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgaG9zdC0+ZGV2LAorCQkgICAiYXBwbHlpbmcgZXh0cmEgQUNQSSBfR1RGIGZpbHRlciAweCV4IGZvciAlc1xuIiwKKwkJICAgZmlsdGVyLCBkbWktPmlkZW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKKwkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW2ldOworCQlzdHJ1Y3QgYXRhX2xpbmsgKmxpbms7CisJCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CisKKwkJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpCisJCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKQorCQkJCWRldi0+Z3RmX2ZpbHRlciB8PSBmaWx0ZXI7CisJfQorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBhaGNpX2d0Zl9maWx0ZXJfd29ya2Fyb3VuZChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpCit7fQorI2VuZGlmCisKIHN0YXRpYyBpbnQgYWhjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKQEAgLTI5MjYsOSArMzAzMiw5IEBACiAJaWYgKGJvYXJkX2lkID09IGJvYXJkX2FoY2lfc2I3MDAgJiYgcGRldi0+cmV2aXNpb24gPj0gMHg0MCkKIAkJaHByaXYtPmZsYWdzICY9IH5BSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMOwogCi0JLyogYXBwbHkgc2I2MDAgMzJiaXQgb25seSBxdWlyayAqLwotCWlmIChhaGNpX3NiNjAwXzMyYml0X29ubHkocGRldikpCi0JCWhwcml2LT5mbGFncyB8PSBBSENJX0hGTEFHXzMyQklUX09OTFk7CisJLyogb25seSBzb21lIFNCNjAwcyBjYW4gZG8gNjRiaXQgRE1BICovCisJaWYgKGFoY2lfc2I2MDBfZW5hYmxlXzY0Yml0KHBkZXYpKQorCQlocHJpdi0+ZmxhZ3MgJj0gfkFIQ0lfSEZMQUdfMzJCSVRfT05MWTsKIAogCWlmICgoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR19OT19NU0kpIHx8IHBjaV9lbmFibGVfbXNpKHBkZXYpKQogCQlwY2lfaW50eChwZGV2LCAxKTsKQEAgLTMwMjMsNiArMzEyOSw5IEBACiAJLyogYXBwbHkgd29ya2Fyb3VuZCBmb3IgQVNVUyBQNVcgREggRGVsdXhlIG1haW5ib2FyZCAqLwogCWFoY2lfcDV3ZGhfd29ya2Fyb3VuZChob3N0KTsKIAorCS8qIGFwcGx5IGd0ZiBmaWx0ZXIgcXVpcmsgKi8KKwlhaGNpX2d0Zl9maWx0ZXJfd29ya2Fyb3VuZChob3N0KTsKKwogCS8qIGluaXRpYWxpemUgYWRhcHRlciAqLwogCXJjID0gYWhjaV9jb25maWd1cmVfZG1hX21hc2tzKHBkZXYsIGhwcml2LT5jYXAgJiBIT1NUX0NBUF82NCk7CiAJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKaW5kZXggMDE5NjRiNi4uYjA4ODJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCkBAIC0yMCwxOSArMjAsOSBAQAogCiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogCi1lbnVtIHsKLQlBVEFfQUNQSV9GSUxURVJfU0VUWEZFUgk9IDEgPDwgMCwKLQlBVEFfQUNQSV9GSUxURVJfTE9DSwk9IDEgPDwgMSwKLQlBVEFfQUNQSV9GSUxURVJfRElQTQk9IDEgPDwgMiwKLQotCUFUQV9BQ1BJX0ZJTFRFUl9ERUZBVUxUCT0gQVRBX0FDUElfRklMVEVSX1NFVFhGRVIgfAotCQkJCSAgQVRBX0FDUElfRklMVEVSX0xPQ0sgfAotCQkJCSAgQVRBX0FDUElfRklMVEVSX0RJUE0sCi19OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0YV9hY3BpX2d0Zl9maWx0ZXIgPSBBVEFfQUNQSV9GSUxURVJfREVGQVVMVDsKK3Vuc2lnbmVkIGludCBhdGFfYWNwaV9ndGZfZmlsdGVyID0gQVRBX0FDUElfRklMVEVSX0RFRkFVTFQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQoYWNwaV9ndGZfZmlsdGVyLCBhdGFfYWNwaV9ndGZfZmlsdGVyLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhhY3BpX2d0Zl9maWx0ZXIsICJmaWx0ZXIgbWFzayBmb3IgQUNQSSBfR1RGIGNvbW1hbmRzLCBzZXQgdG8gZmlsdGVyIG91dCAoMHgxPXNldCB4ZmVybW9kZSwgMHgyPWxvY2svZnJlZXplIGxvY2ssIDB4ND1ESVBNKSIpOworTU9EVUxFX1BBUk1fREVTQyhhY3BpX2d0Zl9maWx0ZXIsICJmaWx0ZXIgbWFzayBmb3IgQUNQSSBfR1RGIGNvbW1hbmRzLCBzZXQgdG8gZmlsdGVyIG91dCAoMHgxPXNldCB4ZmVybW9kZSwgMHgyPWxvY2svZnJlZXplIGxvY2ssIDB4ND1ESVBNLCAweDg9RlBETUEgbm9uLXplcm8gb2Zmc2V0LCAweDEwPUZQRE1BIERNQSBTZXR1cCBGSVMgYXV0by1hY3RpdmF0ZSkiKTsKIAogI2RlZmluZSBOT19QT1JUX01VTFQJCTB4ZmZmZgogI2RlZmluZSBTQVRBX0FEUihyb290LCBwbXApCSgoKHJvb3QpIDw8IDE2KSB8IChwbXApKQpAQCAtNjEzLDEwICs2MDMsMTEgQEAKIAl0Zi0+Y29tbWFuZCA9IGd0Zi0+dGZbNl07CS8qIDB4MWY3ICovCiB9CiAKLXN0YXRpYyBpbnQgYXRhX2FjcGlfZmlsdGVyX3RmKGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLAorc3RhdGljIGludCBhdGFfYWNwaV9maWx0ZXJfdGYoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqcHRmKQogewotCWlmIChhdGFfYWNwaV9ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX1NFVFhGRVIpIHsKKwlpZiAoZGV2LT5ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX1NFVFhGRVIpIHsKIAkJLyogbGliYXRhIGRvZXNuJ3QgdXNlIEFDUEkgdG8gY29uZmlndXJlIHRyYW5zZmVyIG1vZGUuCiAJCSAqIEl0IHdpbGwgb25seSBjb25mdXNlIGRldmljZSBjb25maWd1cmF0aW9uLiAgU2tpcC4KIAkJICovCkBAIC02MjUsNyArNjE2LDcgQEAKIAkJCXJldHVybiAxOwogCX0KIAotCWlmIChhdGFfYWNwaV9ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX0xPQ0spIHsKKwlpZiAoZGV2LT5ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX0xPQ0spIHsKIAkJLyogQklPUyB3cml0ZXJzLCBzb3JyeSBidXQgd2UgZG9uJ3Qgd2FubmEgbG9jawogCQkgKiBmZWF0dXJlcyB1bmxlc3MgdGhlIHVzZXIgZXhwbGljaXRseSBzYWlkIHNvLgogCQkgKi8KQEAgLTY0NywxMiArNjM4LDIzIEBACiAJCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoYXRhX2FjcGlfZ3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9ESVBNKSB7CisJaWYgKHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX0ZFQVRVUkVTICYmCisJICAgIHRmLT5mZWF0dXJlID09IFNFVEZFQVRVUkVTX1NBVEFfRU5BQkxFKSB7CiAJCS8qIGluaGliaXQgZW5hYmxpbmcgRElQTSAqLwotCQlpZiAodGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9TRVRfRkVBVFVSRVMgJiYKLQkJICAgIHRmLT5mZWF0dXJlID09IFNFVEZFQVRVUkVTX1NBVEFfRU5BQkxFICYmCisJCWlmIChkZXYtPmd0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfRElQTSAmJgogCQkgICAgdGYtPm5zZWN0ID09IFNBVEFfRElQTSkKIAkJCXJldHVybiAxOworCisJCS8qIGluaGliaXQgRlBETUEgbm9uLXplcm8gb2Zmc2V0ICovCisJCWlmIChkZXYtPmd0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfRlBETUFfT0ZGU0VUICYmCisJCSAgICAodGYtPm5zZWN0ID09IFNBVEFfRlBETUFfT0ZGU0VUIHx8CisJCSAgICAgdGYtPm5zZWN0ID09IFNBVEFfRlBETUFfSU5fT1JERVIpKQorCQkJcmV0dXJuIDE7CisKKwkJLyogaW5oaWJpdCBGUERNQSBhdXRvIGFjdGl2YXRpb24gKi8KKwkJaWYgKGRldi0+Z3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9GUERNQV9BQSAmJgorCQkgICAgdGYtPm5zZWN0ID09IFNBVEFfRlBETUFfQUEpCisJCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTcwNCw3ICs3MDYsNyBAQAogCQlwcHRmID0gJnB0ZjsKIAl9CiAKLQlpZiAoIWF0YV9hY3BpX2ZpbHRlcl90ZigmdGYsIHBwdGYpKSB7CisJaWYgKCFhdGFfYWNwaV9maWx0ZXJfdGYoZGV2LCAmdGYsIHBwdGYpKSB7CiAJCXJ0ZiA9IHRmOwogCQllcnJfbWFzayA9IGF0YV9leGVjX2ludGVybmFsKGRldiwgJnJ0ZiwgTlVMTCwKIAkJCQkJICAgICBETUFfTk9ORSwgTlVMTCwgMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCAwZGRhZjQzLi5kYzcyNjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTQ5MTksMTAgKzQ5MTksMTEgQEAKICAqLwogdm9pZCBhdGFfcWNfZnJlZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKIAl1bnNpZ25lZCBpbnQgdGFnOwogCiAJV0FSTl9PTl9PTkNFKHFjID09IE5VTEwpOyAvKiBhdGFfcWNfZnJvbV90YWcgX21pZ2h0XyByZXR1cm4gTlVMTCAqLworCWFwID0gcWMtPmFwOwogCiAJcWMtPmZsYWdzID0gMDsKIAl0YWcgPSBxYy0+dGFnOwpAQCAtNDkzNCwxMSArNDkzNSwxMyBAQAogCiB2b2lkIF9fYXRhX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKLQlzdHJ1Y3QgYXRhX2xpbmsgKmxpbmsgPSBxYy0+ZGV2LT5saW5rOworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisJc3RydWN0IGF0YV9saW5rICpsaW5rOwogCiAJV0FSTl9PTl9PTkNFKHFjID09IE5VTEwpOyAvKiBhdGFfcWNfZnJvbV90YWcgX21pZ2h0XyByZXR1cm4gTlVMTCAqLwogCVdBUk5fT05fT05DRSghKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSk7CisJYXAgPSBxYy0+YXA7CisJbGluayA9IHFjLT5kZXYtPmxpbms7CiAKIAlpZiAobGlrZWx5KHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKSkKIAkJYXRhX3NnX2NsZWFuKHFjKTsKQEAgLTUwMjgsMTIgKzUwMzEsMTQgQEAKIAkJCXFjLT5mbGFncyB8PSBBVEFfUUNGTEFHX0ZBSUxFRDsKIAogCQlpZiAodW5saWtlbHkocWMtPmZsYWdzICYgQVRBX1FDRkxBR19GQUlMRUQpKSB7Ci0JCQlpZiAoIWF0YV90YWdfaW50ZXJuYWwocWMtPnRhZykpIHsKLQkJCQkvKiBhbHdheXMgZmlsbCByZXN1bHQgVEYgZm9yIGZhaWxlZCBxYyAqLwotCQkJCWZpbGxfcmVzdWx0X3RmKHFjKTsKKwkJCS8qIGFsd2F5cyBmaWxsIHJlc3VsdCBURiBmb3IgZmFpbGVkIHFjICovCisJCQlmaWxsX3Jlc3VsdF90ZihxYyk7CisKKwkJCWlmICghYXRhX3RhZ19pbnRlcm5hbChxYy0+dGFnKSkKIAkJCQlhdGFfcWNfc2NoZWR1bGVfZWgocWMpOwotCQkJCXJldHVybjsKLQkJCX0KKwkJCWVsc2UKKwkJCQlfX2F0YV9xY19jb21wbGV0ZShxYyk7CisJCQlyZXR1cm47CiAJCX0KIAogCQlXQVJOX09OX09OQ0UoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19GUk9aRU4pOwpAQCAtNTU5MSw2ICs1NTk2LDkgQEAKIAogCQlkZXYtPmxpbmsgPSBsaW5rOwogCQlkZXYtPmRldm5vID0gZGV2IC0gbGluay0+ZGV2aWNlOworI2lmZGVmIENPTkZJR19BVEFfQUNQSQorCQlkZXYtPmd0Zl9maWx0ZXIgPSBhdGFfYWNwaV9ndGZfZmlsdGVyOworI2VuZGlmCiAJCWF0YV9kZXZfaW5pdChkZXYpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKaW5kZXggYTA0NDg4Zi4uYmJhMmFlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKQEAgLTI2NjcsMTQgKzI2NjcsMTQgQEAKIAkJZGV2LT5waW9fbW9kZSA9IFhGRVJfUElPXzA7CiAJCWRldi0+ZmxhZ3MgJj0gfkFUQV9ERkxBR19TTEVFUElORzsKIAotCQlpZiAoIWF0YV9waHlzX2xpbmtfb2ZmbGluZShhdGFfZGV2X3BoeXNfbGluayhkZXYpKSkgewotCQkJLyogYXBwbHkgY2xhc3Mgb3ZlcnJpZGUgKi8KLQkJCWlmIChsZmxhZ3MgJiBBVEFfTEZMQUdfQVNTVU1FX0FUQSkKLQkJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9BVEE7Ci0JCQllbHNlIGlmIChsZmxhZ3MgJiBBVEFfTEZMQUdfQVNTVU1FX1NFTUIpCi0JCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfU0VNQl9VTlNVUDsKLQkJfSBlbHNlCi0JCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9OT05FOworCQlpZiAoYXRhX3BoeXNfbGlua19vZmZsaW5lKGF0YV9kZXZfcGh5c19saW5rKGRldikpKQorCQkJY29udGludWU7CisKKwkJLyogYXBwbHkgY2xhc3Mgb3ZlcnJpZGUgKi8KKwkJaWYgKGxmbGFncyAmIEFUQV9MRkxBR19BU1NVTUVfQVRBKQorCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfQVRBOworCQllbHNlIGlmIChsZmxhZ3MgJiBBVEFfTEZMQUdfQVNTVU1FX1NFTUIpCisJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9TRU1CX1VOU1VQOwogCX0KIAogCS8qIHJlY29yZCBjdXJyZW50IGxpbmsgc3BlZWQgKi8KQEAgLTI3MTMsMzQgKzI3MTMsNDggQEAKIAlhcC0+cGZsYWdzICY9IH5BVEFfUEZMQUdfRUhfUEVORElORzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxpbmstPmFwLT5sb2NrLCBmbGFncyk7CiAKLQkvKiBNYWtlIHN1cmUgb25saW5lbmVzcyBhbmQgY2xhc3NpZmljYXRpb24gcmVzdWx0IGNvcnJlc3BvbmQuCisJLyoKKwkgKiBNYWtlIHN1cmUgb25saW5lbmVzcyBhbmQgY2xhc3NpZmljYXRpb24gcmVzdWx0IGNvcnJlc3BvbmQuCiAJICogSG90cGx1ZyBjb3VsZCBoYXZlIGhhcHBlbmVkIGR1cmluZyByZXNldCBhbmQgc29tZQogCSAqIGNvbnRyb2xsZXJzIGZhaWwgdG8gd2FpdCB3aGlsZSBhIGRyaXZlIGlzIHNwaW5uaW5nIHVwIGFmdGVyCiAJICogYmVpbmcgaG90cGx1Z2dlZCBjYXVzaW5nIG1pc2RldGVjdGlvbi4gIEJ5IGNyb3NzIGNoZWNraW5nCi0JICogbGluayBvbmxpbmVuZXNzIGFuZCBjbGFzc2lmaWNhdGlvbiByZXN1bHQsIHRob3NlIGNvbmRpdGlvbnMKLQkgKiBjYW4gYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYW5kIHJldHJpZWQuCisJICogbGluayBvbi9vZmZsaW5lbmVzcyBhbmQgY2xhc3NpZmljYXRpb24gcmVzdWx0LCB0aG9zZQorCSAqIGNvbmRpdGlvbnMgY2FuIGJlIHJlbGlhYmx5IGRldGVjdGVkIGFuZCByZXRyaWVkLgogCSAqLwogCW5yX3Vua25vd24gPSAwOwogCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpIHsKLQkJLyogY29udmVydCBhbGwgQVRBX0RFVl9VTktOT1dOIHRvIEFUQV9ERVZfTk9ORSAqLwotCQlpZiAoY2xhc3Nlc1tkZXYtPmRldm5vXSA9PSBBVEFfREVWX1VOS05PV04pIHsKLQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7Ci0JCQlpZiAoYXRhX3BoeXNfbGlua19vbmxpbmUoYXRhX2Rldl9waHlzX2xpbmsoZGV2KSkpCisJCWlmIChhdGFfcGh5c19saW5rX29ubGluZShhdGFfZGV2X3BoeXNfbGluayhkZXYpKSkgeworCQkJaWYgKGNsYXNzZXNbZGV2LT5kZXZub10gPT0gQVRBX0RFVl9VTktOT1dOKSB7CisJCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAibGluayBvbmxpbmUgIgorCQkJCQkgICAgICAgImJ1dCBkZXZpY2UgbWlzY2xhc3NpZmVkXG4iKTsKKwkJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9OT05FOwogCQkJCW5yX3Vua25vd24rKzsKKwkJCX0KKwkJfSBlbHNlIGlmIChhdGFfcGh5c19saW5rX29mZmxpbmUoYXRhX2Rldl9waHlzX2xpbmsoZGV2KSkpIHsKKwkJCWlmIChhdGFfY2xhc3NfZW5hYmxlZChjbGFzc2VzW2Rldi0+ZGV2bm9dKSkKKwkJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsICJsaW5rIG9mZmxpbmUsICIKKwkJCQkJICAgICAgICJjbGVhcmluZyBjbGFzcyAlZCB0byBOT05FXG4iLAorCQkJCQkgICAgICAgY2xhc3Nlc1tkZXYtPmRldm5vXSk7CisJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9OT05FOworCQl9IGVsc2UgaWYgKGNsYXNzZXNbZGV2LT5kZXZub10gPT0gQVRBX0RFVl9VTktOT1dOKSB7CisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsICJsaW5rIHN0YXR1cyB1bmtub3duLCAiCisJCQkJICAgICAgICJjbGVhcmluZyBVTktOT1dOIHRvIE5PTkVcbiIpOworCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKIAkJfQogCX0KIAogCWlmIChjbGFzc2lmeSAmJiBucl91bmtub3duKSB7CiAJCWlmICh0cnkgPCBtYXhfdHJpZXMpIHsKIAkJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX1dBUk5JTkcsICJsaW5rIG9ubGluZSBidXQgIgotCQkJCSAgICAgICAiZGV2aWNlIG1pc2NsYXNzaWZpZWQsIHJldHJ5aW5nXG4iKTsKKwkJCQkJIiVkIGRldmljZXMgbWlzY2xhc3NpZmllZCwgcmV0cnlpbmdcbiIsCisJCQkJCW5yX3Vua25vd24pOwogCQkJZmFpbGVkX2xpbmsgPSBsaW5rOwogCQkJcmMgPSAtRUFHQUlOOwogCQkJZ290byBmYWlsOwogCQl9CiAJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX1dBUk5JTkcsCi0JCQkgICAgICAgImxpbmsgb25saW5lIGJ1dCBkZXZpY2UgbWlzY2xhc3NpZmllZCwgIgotCQkJICAgICAgICJkZXZpY2UgZGV0ZWN0aW9uIG1pZ2h0IGZhaWxcbiIpOworCQkJCSJsaW5rIG9ubGluZSBidXQgJWQgZGV2aWNlcyBtaXNjbGFzc2lmaWVkLCAiCisJCQkJImRldmljZSBkZXRlY3Rpb24gbWlnaHQgZmFpbFxuIiwgbnJfdW5rbm93bik7CiAJfQogCiAJLyogcmVzZXQgc3VjY2Vzc2Z1bCwgc2NoZWR1bGUgcmV2YWxpZGF0aW9uICovCkBAIC0yOTY3LDEyICsyOTgxLDE0IEBACiAJICogZGV2aWNlIGRldGVjdGlvbiBtZXNzYWdlcyBiYWNrd2FyZHMuCiAJICovCiAJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkgewotCQlpZiAoIShuZXdfbWFzayAmICgxIDw8IGRldi0+ZGV2bm8pKSB8fAotCQkgICAgZGV2LT5jbGFzcyA9PSBBVEFfREVWX1BNUCkKKwkJaWYgKCEobmV3X21hc2sgJiAoMSA8PCBkZXYtPmRldm5vKSkpCiAJCQljb250aW51ZTsKIAogCQlkZXYtPmNsYXNzID0gZWhjLT5jbGFzc2VzW2Rldi0+ZGV2bm9dOwogCisJCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfUE1QKQorCQkJY29udGludWU7CisKIAkJZWhjLT5pLmZsYWdzIHw9IEFUQV9FSElfUFJJTlRJTkZPOwogCQlyYyA9IGF0YV9kZXZfY29uZmlndXJlKGRldik7CiAJCWVoYy0+aS5mbGFncyAmPSB+QVRBX0VISV9QUklOVElORk87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEuaCBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCmluZGV4IGJlOGUyNjIuLjgyM2U2MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCkBAIC0xMTgsNiArMTE4LDggQEAKIAogLyogbGliYXRhLWFjcGkuYyAqLwogI2lmZGVmIENPTkZJR19BVEFfQUNQSQorZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfYWNwaV9ndGZfZmlsdGVyOworCiBleHRlcm4gdm9pZCBhdGFfYWNwaV9hc3NvY2lhdGVfc2F0YV9wb3J0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHZvaWQgYXRhX2FjcGlfYXNzb2NpYXRlKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCk7CiBleHRlcm4gdm9pZCBhdGFfYWNwaV9kaXNzb2NpYXRlKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9hbGkuYwppbmRleCBmYzljNWQ2Li4xNDMyZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogCiAJaWYgKHByaW50X2luZm8gJiYgYWRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEFQSSAmJiAhYWxpX2F0YXBpX2RtYSkgewogCQlhdGFfZGV2X3ByaW50ayhhZGV2LCBLRVJOX1dBUk5JTkcsCi0JCQkgICAgICAgIldBUk5JTkc6IEFUQVBJIERNQSBkaXNhYmxlZCBmb3IgcmVsaWFibGl0eSBpc3N1ZXMuICBJdCBjYW4gYmUgZW5hYmxlZFxuIik7CisJCQkgICAgICAgIldBUk5JTkc6IEFUQVBJIERNQSBkaXNhYmxlZCBmb3IgcmVsaWFiaWxpdHkgaXNzdWVzLiAgSXQgY2FuIGJlIGVuYWJsZWRcbiIpOwogCQlhdGFfZGV2X3ByaW50ayhhZGV2LCBLRVJOX1dBUk5JTkcsCiAJCQkgICAgICAgIldBUk5JTkc6IHZpYSBwYXRhX2FsaS5hdGFwaV9kbWEgbW9kcGFyYW0gb3IgY29ycmVzcG9uZGluZyBzeXNmcyBub2RlLlxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKaW5kZXggYWE0YjNmNi4uYWU0NDU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERSksIH0sCiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9JREUpLCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfSURFKSwgfSwKLQl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfSURFKSwgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9JREUpLCB9LAogCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXRwODY3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hdHA4Njd4LmMKaW5kZXggNzk5MGRlOS4uNmZlN2RlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdHA4Njd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdHA4Njd4LmMKQEAgLTExOCwyMCArMTE4LDEzIEBACiAJaW50CQlwY2k2Nm1oejsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdTggYXRwODY3eF9zcGVlZF90b19tb2RlKHU4IHNwZWVkKQotewotCXJldHVybiBzcGVlZCAtIFhGRVJfVURNQV8wICsgMTsKLX0KLQogc3RhdGljIHZvaWQgYXRwODY3eF9zZXRfZG1hbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldgk9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CiAJc3RydWN0IGF0cDg2N3hfcHJpdiAqZHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXU4IHNwZWVkID0gYWRldi0+ZG1hX21vZGU7CiAJdTggYjsKLQl1OCBtb2RlOwotCi0JbW9kZSA9IGF0cDg2N3hfc3BlZWRfdG9fbW9kZShzcGVlZCk7CisJdTggbW9kZSA9IHNwZWVkIC0gWEZFUl9VRE1BXzAgKyAxOwogCiAJLyoKIAkgKiBEb2MgNi42Ljk6IGRlY3JlYXNlIHRoZSB1ZG1hIG1vZGUgdmFsdWUgYnkgMSBmb3Igc2FmZXIgVURNQSBzcGVlZApAQCAtMTU2LDI1ICsxNDksMzggQEAKIAlpb3dyaXRlOChiLCBkcC0+ZG1hX21vZGUpOwogfQogCi1zdGF0aWMgaW50IGF0cDg2N3hfZ2V0X2FjdGl2ZV9jbG9ja3Nfc2hpZnRlZCh1bnNpZ25lZCBpbnQgY2xrKQorc3RhdGljIGludCBhdHA4Njd4X2dldF9hY3RpdmVfY2xvY2tzX3NoaWZ0ZWQoc3RydWN0IGF0YV9wb3J0ICphcCwKKwl1bnNpZ25lZCBpbnQgY2xrKQogeworCXN0cnVjdCBhdHA4Njd4X3ByaXYgKmRwID0gYXAtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBjaGFyIGNsb2NrcyA9IGNsazsKIAorCS8qCisJICogRG9jIDYuNi45OiBpbmNyZWFzZSB0aGUgY2xvY2sgdmFsdWUgYnkgMSBmb3Igc2FmZXIgUElPIHNwZWVkCisJICogb24gNjZNSHogYnVzCisJICovCisJaWYgKGRwLT5wY2k2Nm1oeikKKwkJY2xvY2tzKys7CisKIAlzd2l0Y2ggKGNsb2NrcykgewogCWNhc2UgMDoKIAkJY2xvY2tzID0gMTsKIAkJYnJlYWs7Ci0JY2FzZSAxIC4uLiA3OgotCQlicmVhazsKLQljYXNlIDggLi4uIDEyOgotCQljbG9ja3MgPSA3OworCWNhc2UgMSAuLi4gNjoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVRQODY3WDogYWN0aXZlICVkY2xrIGlzIGludmFsaWQuICIKLQkJCSJVc2luZyBkZWZhdWx0IDhjbGsuXG4iLCBjbGspOwotCQljbG9ja3MgPSAwOwkvKiA4IGNsayAqLworCQkJIlVzaW5nIDEyY2xrLlxuIiwgY2xrKTsKKwljYXNlIDkgLi4uIDEyOgorCQljbG9ja3MgPSA3OwkvKiAxMiBjbGsgKi8KIAkJYnJlYWs7CisJY2FzZSA3OgorCWNhc2UgODoJLyogZGVmYXVsdCA4IGNsayAqLworCQljbG9ja3MgPSAwOworCQlnb3RvIGFjdGl2ZV9jbG9ja19zaGlmdF9kb25lOwogCX0KKworYWN0aXZlX2Nsb2NrX3NoaWZ0X2RvbmU6CiAJcmV0dXJuIGNsb2NrcyA8PCBBVFA4NjdYX0lPX1BJT1NQRF9BQ1RJVkVfU0hJRlQ7CiB9CiAKQEAgLTE4OCwyMCArMTk0LDIwIEBACiAJCWJyZWFrOwogCWNhc2UgMSAuLi4gMTE6CiAJCWJyZWFrOwotCWNhc2UgMTI6Ci0JCWNsb2NrcyA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMTM6IGNhc2UgMTQ6Ci0JCS0tY2xvY2tzOworCWNhc2UgMTM6CisJY2FzZSAxNDoKKwkJLS1jbG9ja3M7CS8qIGJ5IHRoZSBzcGVjICovCiAJCWJyZWFrOwogCWNhc2UgMTU6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFUUDg2N1g6IHJlY292ZXIgJWRjbGsgaXMgaW52YWxpZC4gIgotCQkJIlVzaW5nIGRlZmF1bHQgMTVjbGsuXG4iLCBjbGspOwotCQljbG9ja3MgPSAwOwkvKiAxMiBjbGsgKi8KKwkJCSJVc2luZyBkZWZhdWx0IDEyY2xrLlxuIiwgY2xrKTsKKwljYXNlIDEyOgkvKiBkZWZhdWx0IDEyIGNsayAqLworCQljbG9ja3MgPSAwOwogCQlicmVhazsKIAl9CisKIAlyZXR1cm4gY2xvY2tzIDw8IEFUUDg2N1hfSU9fUElPU1BEX1JFQ09WRVJfU0hJRlQ7CiB9CiAKQEAgLTIzMCwyNSArMjM2LDM4IEBACiAJCWIgPSAoYiAmIH5BVFA4NjdYX0lPX0RNQU1PREVfTVNUUl9NQVNLKTsKIAlpb3dyaXRlOChiLCBkcC0+ZG1hX21vZGUpOwogCi0JYiA9IGF0cDg2N3hfZ2V0X2FjdGl2ZV9jbG9ja3Nfc2hpZnRlZCh0LmFjdGl2ZSkgfAotCQlhdHA4Njd4X2dldF9yZWNvdmVyX2Nsb2Nrc19zaGlmdGVkKHQucmVjb3Zlcik7Ci0JaWYgKGRwLT5wY2k2Nm1oeikKLQkJYiArPSAweDEwOworCWIgPSBhdHA4Njd4X2dldF9hY3RpdmVfY2xvY2tzX3NoaWZ0ZWQoYXAsIHQuYWN0aXZlKSB8CisJICAgIGF0cDg2N3hfZ2V0X3JlY292ZXJfY2xvY2tzX3NoaWZ0ZWQodC5yZWNvdmVyKTsKIAogCWlmIChhZGV2LT5kZXZubyAmIDEpCiAJCWlvd3JpdGU4KGIsIGRwLT5zbGF2ZV9waW9zcGQpOwogCWVsc2UKIAkJaW93cml0ZTgoYiwgZHAtPm1zdHJfcGlvc3BkKTsKIAotCS8qCi0JICogdXNlIHRoZSBzYW1lIHZhbHVlIGZvciBjb21hbmQgdGltaW5nIGFzIGZvciBQSU8gdGltaW1nCi0JICovCisJYiA9IGF0cDg2N3hfZ2V0X2FjdGl2ZV9jbG9ja3Nfc2hpZnRlZChhcCwgdC5hY3Q4YikgfAorCSAgICBhdHA4Njd4X2dldF9yZWNvdmVyX2Nsb2Nrc19zaGlmdGVkKHQucmVjOGIpOworCiAJaW93cml0ZTgoYiwgZHAtPmVpZ2h0Yl9waW9zcGQpOwogfQogCitzdGF0aWMgaW50IGF0cDg2N3hfY2FibGVfb3ZlcnJpZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BUlRPUCAmJgorCQkocGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2N0EgfHwKKwkJIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjdCKSkgeworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYXRwODY3eF9jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKLQlyZXR1cm4gQVRBX0NCTF9QQVRBNDBfU0hPUlQ7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOworCisJaWYgKGF0cDg2N3hfY2FibGVfb3ZlcnJpZGUocGRldikpCisJCXJldHVybiBBVEFfQ0JMX1BBVEE0MF9TSE9SVDsKKworCXJldHVybiBBVEFfQ0JMX1BBVEFfVU5LOwogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhdHA4Njd4X3NodCA9IHsKQEAgLTQ3MSw3ICs0OTAsNiBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzg2N3ggPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKLQkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmF0cDg2N3hfb3BzLAogCX07CkBAIC01MTUsNiArNTMzLDIzIEBACiAJcmV0dXJuIHJjOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGF0cDg2N3hfcmVpbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJaW50IHJjOworCisJcmMgPSBhdGFfcGNpX2RldmljZV9kb19yZXN1bWUocGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlhdHA4Njd4X2ZpeHVwKGhvc3QpOworCisJYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdHA4Njd4X3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WREVWSUNFKEFSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2N0EpLAkwIH0sCiAJeyBQQ0lfVkRFVklDRShBUlRPUCwgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjdCKSwJMCB9LApAQCAtNTI2LDYgKzU2MSwxMCBAQAogCS5pZF90YWJsZSAJPSBhdHA4Njd4X3BjaV90YmwsCiAJLnByb2JlIAkJPSBhdHA4Njd4X2luaXRfb25lLAogCS5yZW1vdmUJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gYXRhX3BjaV9kZXZpY2Vfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGF0cDg2N3hfcmVpbml0X29uZSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXRwODY3eF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwppbmRleCBmNDk4MTRkLi4zYmJlZDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKQEAgLTIzNSw4ICsyMzUsNyBAQAogCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmc2MxMjAwX3BvcnRfb3BzCiAJfTsKLQkvKiBDYW4ndCBlbmFibGUgcG9ydCAyIHlldCwgc2VlIHRvcCBjb21tZW50cyAqLwotCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIH07CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwogCiAJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmc2MxMjAwX3NodCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwppbmRleCA0NTY1N2NhLi44ODk4NGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCXsgInZ0ODI1MSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyNTEsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgImN4NzAwIiwJUENJX0RFVklDRV9JRF9WSUFfQ1g3MDAsICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX1NBVEFfUEFUQSB9LAogCXsgInZ0NjQxMCIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTAsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCi0JeyAidnQ2NDE1IiwJUENJX0RFVklDRV9JRF9WSUFfNjQxNSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKKwl7ICJ2dDY0MTUiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDE1LCAgICAgMHgwMCwgMHhmZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAogCXsgInZ0ODIzN2EiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM3QSwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKIAl7ICJ2dDgyMzciLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM3LCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKIAl7ICJ2dDgyMzUiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM1LCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCAxN2Y5ZmY5Li42ZjUwOTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC0xMzgyLDYgKzEzODIsMjUgQEAKIAkgKi8KIAlpZiAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19ERUxBWUVEX0VIKQogCQlyZXR1cm4gQVRBX0RFRkVSX1BPUlQ7CisKKwkvKiBQSU8gY29tbWFuZHMgbmVlZCBleGNsdXNpdmUgbGluazogbm8gb3RoZXIgY29tbWFuZHMgW0RNQSBvciBQSU9dCisJICogY2FuIHJ1biBjb25jdXJyZW50bHkuCisJICogc2V0IGV4Y2xfbGluayB3aGVuIHdlIHdhbnQgdG8gc2VuZCBhIFBJTyBjb21tYW5kIGluIERNQSBtb2RlCisJICogb3IgYSBub24tTkNRIGNvbW1hbmQgaW4gTkNRIG1vZGUuCisJICogV2hlbiB3ZSByZWNlaXZlIGEgY29tbWFuZCBmcm9tIHRoYXQgbGluaywgYW5kIHRoZXJlIGFyZSBubworCSAqIG91dHN0YW5kaW5nIGNvbW1hbmRzLCBtYXJrIGEgZmxhZyB0byBjbGVhciBleGNsX2xpbmsgYW5kIGxldAorCSAqIHRoZSBjb21tYW5kIGdvIHRocm91Z2guCisJICovCisJaWYgKHVubGlrZWx5KGFwLT5leGNsX2xpbmspKSB7CisJCWlmIChsaW5rID09IGFwLT5leGNsX2xpbmspIHsKKwkJCWlmIChhcC0+bnJfYWN0aXZlX2xpbmtzKQorCQkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwkJCXFjLT5mbGFncyB8PSBBVEFfUUNGTEFHX0NMRUFSX0VYQ0w7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gQVRBX0RFRkVSX1BPUlQ7CisJfQorCiAJLyoKIAkgKiBJZiB0aGUgcG9ydCBpcyBjb21wbGV0ZWx5IGlkbGUsIHRoZW4gYWxsb3cgdGhlIG5ldyBxYy4KIAkgKi8KQEAgLTEzOTUsOCArMTQxNCwxNCBAQAogCSAqIGRvZXNuJ3QgYWxsb3cgaXQuCiAJICovCiAJaWYgKChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0VETUFfRU4pICYmCi0JICAgIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX05DUV9FTikgJiYgYXRhX2lzX25jcShxYy0+dGYucHJvdG9jb2wpKQotCQlyZXR1cm4gMDsKKwkgICAgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKSkgeworCQlpZiAoYXRhX2lzX25jcShxYy0+dGYucHJvdG9jb2wpKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgeworCQkJYXAtPmV4Y2xfbGluayA9IGxpbms7CisJCQlyZXR1cm4gQVRBX0RFRkVSX1BPUlQ7CisJCX0KKwl9CiAKIAlyZXR1cm4gQVRBX0RFRkVSX1BPUlQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX252LmMgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKaW5kZXggODZhNDA1OC4uMWViNGUwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwpAQCAtMTU5NCw5ICsxNTk0LDIxIEBACiAJICAgICFhdGFfZGV2X2VuYWJsZWQobGluay0+ZGV2aWNlKSkKIAkJc2F0YV9saW5rX2hhcmRyZXNldChsaW5rLCBzYXRhX2RlYl90aW1pbmdfaG90cGx1ZywgZGVhZGxpbmUsCiAJCQkJICAgIE5VTEwsIE5VTEwpOwotCWVsc2UgaWYgKCEoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9RVUlFVCkpCi0JCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX0lORk8sCi0JCQkJIm52OiBza2lwcGluZyBoYXJkcmVzZXQgb24gb2NjdXBpZWQgcG9ydFxuIik7CisJZWxzZSB7CisJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnRpbWluZyA9IHNhdGFfZWhjX2RlYl90aW1pbmcoZWhjKTsKKwkJaW50IHJjOworCisJCWlmICghKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfUVVJRVQpKQorCQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fSU5GTywgIm52OiBza2lwcGluZyAiCisJCQkJCSJoYXJkcmVzZXQgb24gb2NjdXBpZWQgcG9ydFxuIik7CisKKwkJLyogbWFrZSBzdXJlIHRoZSBsaW5rIGlzIG9ubGluZSAqLworCQlyYyA9IHNhdGFfbGlua19yZXN1bWUobGluaywgdGltaW5nLCBkZWFkbGluZSk7CisJCS8qIHdoaW5lIGFib3V0IHBoeSByZXN1bWUgZmFpbHVyZSBidXQgcHJvY2VlZCAqLworCQlpZiAocmMgJiYgcmMgIT0gLUVPUE5PVFNVUFApCisJCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9XQVJOSU5HLCAiZmFpbGVkIHRvIHJlc3VtZSAiCisJCQkJCSJsaW5rIChlcnJubz0lZClcbiIsIHJjKTsKKwl9CiAKIAkvKiBkZXZpY2Ugc2lnbmF0dXJlIGFjcXVpc2l0aW9uIGlzIHVucmVsaWFibGUgKi8KIAlyZXR1cm4gLUVBR0FJTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCmluZGV4IGJkZDQzYzcuLjAyZWZkOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwpAQCAtOTMsNyArOTMsNiBAQAogCXsgUENJX1ZERVZJQ0UoVklBLCAweDczNzIpLCB2dDY0MjAgfSwKIAl7IFBDSV9WREVWSUNFKFZJQSwgMHg1Mjg3KSwgdnQ4MjUxIH0sIC8qIDIgc2F0YSBjaG5scyAoTWFzdGVyL1NsYXZlKSAqLwogCXsgUENJX1ZERVZJQ0UoVklBLCAweDkwMDApLCB2dDgyNTEgfSwKLQl7IFBDSV9WREVWSUNFKFZJQSwgMHg5MDQwKSwgdnQ4MjUxIH0sCiAKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggOTczYmYyYWQuLjYzYzE0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTY4OSwxNSArNjg5LDE5IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRyaXZlcl9hZGRfYXR0cnMoJXMpIGZhaWxlZFxuIiwKIAkJCV9fZnVuY19fLCBkcnYtPm5hbWUpOwogCX0KLQllcnJvciA9IGFkZF9iaW5kX2ZpbGVzKGRydik7Ci0JaWYgKGVycm9yKSB7Ci0JCS8qIERpdHRvICovCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGFkZF9iaW5kX2ZpbGVzKCVzKSBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKKworCWlmICghZHJ2LT5zdXBwcmVzc19iaW5kX2F0dHJzKSB7CisJCWVycm9yID0gYWRkX2JpbmRfZmlsZXMoZHJ2KTsKKwkJaWYgKGVycm9yKSB7CisJCQkvKiBEaXR0byAqLworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYWRkX2JpbmRfZmlsZXMoJXMpIGZhaWxlZFxuIiwKKwkJCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKKwkJfQogCX0KIAogCWtvYmplY3RfdWV2ZW50KCZwcml2LT5rb2JqLCBLT0JKX0FERCk7CiAJcmV0dXJuIDA7CisKIG91dF91bnJlZ2lzdGVyOgogCWtmcmVlKGRydi0+cCk7CiAJZHJ2LT5wID0gTlVMTDsKQEAgLTcyMCw3ICs3MjQsOCBAQAogCWlmICghZHJ2LT5idXMpCiAJCXJldHVybjsKIAotCXJlbW92ZV9iaW5kX2ZpbGVzKGRydik7CisJaWYgKCFkcnYtPnN1cHByZXNzX2JpbmRfYXR0cnMpCisJCXJlbW92ZV9iaW5kX2ZpbGVzKGRydik7CiAJZHJpdmVyX3JlbW92ZV9hdHRycyhkcnYtPmJ1cywgZHJ2KTsKIAlkcml2ZXJfcmVtb3ZlX2ZpbGUoZHJ2LCAmZHJpdmVyX2F0dHJfdWV2ZW50KTsKIAlrbGlzdF9yZW1vdmUoJmRydi0+cC0+a25vZGVfYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwppbmRleCBlZDJlYmQzLi5mMzY3ODg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJcHV0X2RyaXZlcihvdGhlcik7CiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IERyaXZlciAnJXMnIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCwgIgogCQkJImFib3J0aW5nLi4uXG4iLCBkcnYtPm5hbWUpOwotCQlyZXR1cm4gLUVFWElTVDsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlyZXQgPSBidXNfYWRkX2RyaXZlcihkcnYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCBlZDE1NmExMy4uNGZhOTU0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTUyMSwxMSArNTIxLDE1IEBACiB7CiAJaW50IHJldHZhbCwgY29kZTsKIAorCS8qIG1ha2Ugc3VyZSBkcml2ZXIgd29uJ3QgaGF2ZSBiaW5kL3VuYmluZCBhdHRyaWJ1dGVzICovCisJZHJ2LT5kcml2ZXIuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWU7CisKIAkvKiB0ZW1wb3Jhcnkgc2VjdGlvbiB2aW9sYXRpb24gZHVyaW5nIHByb2JlKCkgKi8KIAlkcnYtPnByb2JlID0gcHJvYmU7CiAJcmV0dmFsID0gY29kZSA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihkcnYpOwogCi0JLyogRml4dXAgdGhhdCBzZWN0aW9uIHZpb2xhdGlvbiwgYmVpbmcgcGFyYW5vaWQgYWJvdXQgY29kZSBzY2FubmluZworCS8qCisJICogRml4dXAgdGhhdCBzZWN0aW9uIHZpb2xhdGlvbiwgYmVpbmcgcGFyYW5vaWQgYWJvdXQgY29kZSBzY2FubmluZwogCSAqIHRoZSBsaXN0IG9mIGRyaXZlcnMgaW4gb3JkZXIgdG8gcHJvYmUgbmV3IGRldmljZXMuICBDaGVjayB0byBzZWUKIAkgKiBpZiB0aGUgcHJvYmUgd2FzIHN1Y2Nlc3NmdWwsIGFuZCBtYWtlIHN1cmUgYW55IGZvcmNlZCBwcm9iZXMgb2YKIAkgKiBuZXcgZGV2aWNlcyBmYWlsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggZTBkYzQwNy4uOGFhMjQ0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC01MTEsNiArNTExLDcgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOworCXRyYW5zaXRpb25fc3RhcnRlZCA9IGZhbHNlOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2xpc3QpKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbGlzdC5wcmV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKaW5kZXggMzg1NTZmNi4uYTc3MDQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC01MSw4ICs1MSw2IEBACiB7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlkZXZfZGJnKGRldiwgIl9fcG1fcnVudGltZV9pZGxlKCkhXG4iKTsKLQogCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IpCiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJZWxzZSBpZiAoZGV2LT5wb3dlci5pZGxlX25vdGlmaWNhdGlvbikKQEAgLTkzLDggKzkxLDYgQEAKIAl3YWtlX3VwX2FsbCgmZGV2LT5wb3dlci53YWl0X3F1ZXVlKTsKIAogIG91dDoKLQlkZXZfZGJnKGRldiwgIl9fcG1fcnVudGltZV9pZGxlKCkgcmV0dXJucyAlZCFcbiIsIHJldHZhbCk7Ci0KIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCA2ZmE3YjBmLi5lYjRmYTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC02NDIyLDE2ICs2NDIzLDEwIEBACiAgIHJldHVybiB0cnVlOwogfQogCi0KLS8qCi0gIERBQzk2MF9Qcm9jUmVhZFN0YXR1cyBpbXBsZW1lbnRzIHJlYWRpbmcgL3Byb2MvcmQvc3RhdHVzLgotKi8KLQotc3RhdGljIGludCBEQUM5NjBfUHJvY1JlYWRTdGF0dXMoY2hhciAqUGFnZSwgY2hhciAqKlN0YXJ0LCBvZmZfdCBPZmZzZXQsCi0JCQkJIGludCBDb3VudCwgaW50ICpFT0YsIHZvaWQgKkRhdGEpCitzdGF0aWMgaW50IGRhYzk2MF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogICB1bnNpZ25lZCBjaGFyICpTdGF0dXNNZXNzYWdlID0gIk9LXG4iOwotICBpbnQgQ29udHJvbGxlck51bWJlciwgQnl0ZXNBdmFpbGFibGU7CisgIGludCBDb250cm9sbGVyTnVtYmVyOwogICBmb3IgKENvbnRyb2xsZXJOdW1iZXIgPSAwOwogICAgICAgIENvbnRyb2xsZXJOdW1iZXIgPCBEQUM5NjBfQ29udHJvbGxlckNvdW50OwogICAgICAgIENvbnRyb2xsZXJOdW1iZXIrKykKQEAgLTY0NDQsNTIgKzY0MzksNDkgQEAKIAkgIGJyZWFrOwogCX0KICAgICB9Ci0gIEJ5dGVzQXZhaWxhYmxlID0gc3RybGVuKFN0YXR1c01lc3NhZ2UpIC0gT2Zmc2V0OwotICBpZiAoQ291bnQgPj0gQnl0ZXNBdmFpbGFibGUpCi0gICAgewotICAgICAgQ291bnQgPSBCeXRlc0F2YWlsYWJsZTsKLSAgICAgICpFT0YgPSB0cnVlOwotICAgIH0KLSAgaWYgKENvdW50IDw9IDApIHJldHVybiAwOwotICAqU3RhcnQgPSBQYWdlOwotICBtZW1jcHkoUGFnZSwgJlN0YXR1c01lc3NhZ2VbT2Zmc2V0XSwgQ291bnQpOwotICByZXR1cm4gQ291bnQ7CisgIHNlcV9wdXRzKG0sIFN0YXR1c01lc3NhZ2UpOworICByZXR1cm4gMDsKIH0KIAotCi0vKgotICBEQUM5NjBfUHJvY1JlYWRJbml0aWFsU3RhdHVzIGltcGxlbWVudHMgcmVhZGluZyAvcHJvYy9yZC9jTi9pbml0aWFsX3N0YXR1cy4KLSovCi0KLXN0YXRpYyBpbnQgREFDOTYwX1Byb2NSZWFkSW5pdGlhbFN0YXR1cyhjaGFyICpQYWdlLCBjaGFyICoqU3RhcnQsIG9mZl90IE9mZnNldCwKLQkJCQkJaW50IENvdW50LCBpbnQgKkVPRiwgdm9pZCAqRGF0YSkKK3N0YXRpYyBpbnQgZGFjOTYwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLSAgREFDOTYwX0NvbnRyb2xsZXJfVCAqQ29udHJvbGxlciA9IChEQUM5NjBfQ29udHJvbGxlcl9UICopIERhdGE7Ci0gIGludCBCeXRlc0F2YWlsYWJsZSA9IENvbnRyb2xsZXItPkluaXRpYWxTdGF0dXNMZW5ndGggLSBPZmZzZXQ7Ci0gIGlmIChDb3VudCA+PSBCeXRlc0F2YWlsYWJsZSkKLSAgICB7Ci0gICAgICBDb3VudCA9IEJ5dGVzQXZhaWxhYmxlOwotICAgICAgKkVPRiA9IHRydWU7Ci0gICAgfQotICBpZiAoQ291bnQgPD0gMCkgcmV0dXJuIDA7Ci0gICpTdGFydCA9IFBhZ2U7Ci0gIG1lbWNweShQYWdlLCAmQ29udHJvbGxlci0+Q29tYmluZWRTdGF0dXNCdWZmZXJbT2Zmc2V0XSwgQ291bnQpOwotICByZXR1cm4gQ291bnQ7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRhYzk2MF9wcm9jX3Nob3csIE5VTEwpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYWM5NjBfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkYWM5NjBfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OwogCi0vKgotICBEQUM5NjBfUHJvY1JlYWRDdXJyZW50U3RhdHVzIGltcGxlbWVudHMgcmVhZGluZyAvcHJvYy9yZC9jTi9jdXJyZW50X3N0YXR1cy4KLSovCi0KLXN0YXRpYyBpbnQgREFDOTYwX1Byb2NSZWFkQ3VycmVudFN0YXR1cyhjaGFyICpQYWdlLCBjaGFyICoqU3RhcnQsIG9mZl90IE9mZnNldCwKLQkJCQkJaW50IENvdW50LCBpbnQgKkVPRiwgdm9pZCAqRGF0YSkKK3N0YXRpYyBpbnQgZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0gIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBEYXRhOworCURBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKW0tPnByaXZhdGU7CisJc2VxX3ByaW50ZihtLCAiJS4qcyIsIENvbnRyb2xsZXItPkluaXRpYWxTdGF0dXNMZW5ndGgsIENvbnRyb2xsZXItPkNvbWJpbmVkU3RhdHVzQnVmZmVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYWM5NjBfaW5pdGlhbF9zdGF0dXNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYWM5NjBfaW5pdGlhbF9zdGF0dXNfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKyAgREFDOTYwX0NvbnRyb2xsZXJfVCAqQ29udHJvbGxlciA9IChEQUM5NjBfQ29udHJvbGxlcl9UICopIG0tPnByaXZhdGU7CiAgIHVuc2lnbmVkIGNoYXIgKlN0YXR1c01lc3NhZ2UgPQogICAgICJObyBSZWJ1aWxkIG9yIENvbnNpc3RlbmN5IENoZWNrIGluIFByb2dyZXNzXG4iOwogICBpbnQgUHJvZ3Jlc3NNZXNzYWdlTGVuZ3RoID0gc3RybGVuKFN0YXR1c01lc3NhZ2UpOwotICBpbnQgQnl0ZXNBdmFpbGFibGU7CiAgIGlmIChqaWZmaWVzICE9IENvbnRyb2xsZXItPkxhc3RDdXJyZW50U3RhdHVzVGltZSkKICAgICB7CiAgICAgICBDb250cm9sbGVyLT5DdXJyZW50U3RhdHVzTGVuZ3RoID0gMDsKQEAgLTY1MTMsNDkgKzY1MDUsNDEgQEAKIAl9CiAgICAgICBDb250cm9sbGVyLT5MYXN0Q3VycmVudFN0YXR1c1RpbWUgPSBqaWZmaWVzOwogICAgIH0KLSAgQnl0ZXNBdmFpbGFibGUgPSBDb250cm9sbGVyLT5DdXJyZW50U3RhdHVzTGVuZ3RoIC0gT2Zmc2V0OwotICBpZiAoQ291bnQgPj0gQnl0ZXNBdmFpbGFibGUpCi0gICAgewotICAgICAgQ291bnQgPSBCeXRlc0F2YWlsYWJsZTsKLSAgICAgICpFT0YgPSB0cnVlOwotICAgIH0KLSAgaWYgKENvdW50IDw9IDApIHJldHVybiAwOwotICAqU3RhcnQgPSBQYWdlOwotICBtZW1jcHkoUGFnZSwgJkNvbnRyb2xsZXItPkN1cnJlbnRTdGF0dXNCdWZmZXJbT2Zmc2V0XSwgQ291bnQpOwotICByZXR1cm4gQ291bnQ7CisJc2VxX3ByaW50ZihtLCAiJS4qcyIsIENvbnRyb2xsZXItPkN1cnJlbnRTdGF0dXNMZW5ndGgsIENvbnRyb2xsZXItPkN1cnJlbnRTdGF0dXNCdWZmZXIpOworCXJldHVybiAwOwogfQogCi0KLS8qCi0gIERBQzk2MF9Qcm9jUmVhZFVzZXJDb21tYW5kIGltcGxlbWVudHMgcmVhZGluZyAvcHJvYy9yZC9jTi91c2VyX2NvbW1hbmQuCi0qLwotCi1zdGF0aWMgaW50IERBQzk2MF9Qcm9jUmVhZFVzZXJDb21tYW5kKGNoYXIgKlBhZ2UsIGNoYXIgKipTdGFydCwgb2ZmX3QgT2Zmc2V0LAotCQkJCSAgICAgIGludCBDb3VudCwgaW50ICpFT0YsIHZvaWQgKkRhdGEpCitzdGF0aWMgaW50IGRhYzk2MF9jdXJyZW50X3N0YXR1c19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0gIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBEYXRhOwotICBpbnQgQnl0ZXNBdmFpbGFibGUgPSBDb250cm9sbGVyLT5Vc2VyU3RhdHVzTGVuZ3RoIC0gT2Zmc2V0OwotICBpZiAoQ291bnQgPj0gQnl0ZXNBdmFpbGFibGUpCi0gICAgewotICAgICAgQ291bnQgPSBCeXRlc0F2YWlsYWJsZTsKLSAgICAgICpFT0YgPSB0cnVlOwotICAgIH0KLSAgaWYgKENvdW50IDw9IDApIHJldHVybiAwOwotICAqU3RhcnQgPSBQYWdlOwotICBtZW1jcHkoUGFnZSwgJkNvbnRyb2xsZXItPlVzZXJTdGF0dXNCdWZmZXJbT2Zmc2V0XSwgQ291bnQpOwotICByZXR1cm4gQ291bnQ7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRhYzk2MF9jdXJyZW50X3N0YXR1c19wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OwogCi0vKgotICBEQUM5NjBfUHJvY1dyaXRlVXNlckNvbW1hbmQgaW1wbGVtZW50cyB3cml0aW5nIC9wcm9jL3JkL2NOL3VzZXJfY29tbWFuZC4KLSovCitzdGF0aWMgaW50IGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gKERBQzk2MF9Db250cm9sbGVyX1QgKiltLT5wcml2YXRlOwogCi1zdGF0aWMgaW50IERBQzk2MF9Qcm9jV3JpdGVVc2VyQ29tbWFuZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwlzZXFfcHJpbnRmKG0sICIlLipzIiwgQ29udHJvbGxlci0+VXNlclN0YXR1c0xlbmd0aCwgQ29udHJvbGxlci0+VXNlclN0YXR1c0J1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIHNzaXplX3QgZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqQnVmZmVyLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIENvdW50LCB2b2lkICpEYXRhKQorCQkJCSAgICAgICBzaXplX3QgQ291bnQsIGxvZmZfdCAqcG9zKQogewotICBEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gKERBQzk2MF9Db250cm9sbGVyX1QgKikgRGF0YTsKKyAgREFDOTYwX0NvbnRyb2xsZXJfVCAqQ29udHJvbGxlciA9IChEQUM5NjBfQ29udHJvbGxlcl9UICopIFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKICAgdW5zaWduZWQgY2hhciBDb21tYW5kQnVmZmVyWzgwXTsKICAgaW50IExlbmd0aDsKICAgaWYgKENvdW50ID4gc2l6ZW9mKENvbW1hbmRCdWZmZXIpLTEpIHJldHVybiAtRUlOVkFMOwpAQCAtNjU3Miw2ICs2NTU2LDE0IEBACiAJICAgID8gQ291bnQgOiAtRUJVU1kpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYWM5NjBfdXNlcl9jb21tYW5kX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX3dyaXRlLAorfTsKIAogLyoKICAgREFDOTYwX0NyZWF0ZVByb2NFbnRyaWVzIGNyZWF0ZXMgdGhlIC9wcm9jL3JkLy4uLiBlbnRyaWVzIGZvciB0aGUKQEAgLTY1ODYsMjMgKzY1NzgsMTcgQEAKIAogCWlmIChEQUM5NjBfUHJvY0RpcmVjdG9yeUVudHJ5ID09IE5VTEwpIHsKICAgCQlEQUM5NjBfUHJvY0RpcmVjdG9yeUVudHJ5ID0gcHJvY19ta2RpcigicmQiLCBOVUxMKTsKLSAgCQlTdGF0dXNQcm9jRW50cnkgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJzdGF0dXMiLCAwLAorICAJCVN0YXR1c1Byb2NFbnRyeSA9IHByb2NfY3JlYXRlKCJzdGF0dXMiLCAwLAogCQkJCQkgICBEQUM5NjBfUHJvY0RpcmVjdG9yeUVudHJ5LAotCQkJCQkgICBEQUM5NjBfUHJvY1JlYWRTdGF0dXMsIE5VTEwpOworCQkJCQkgICAmZGFjOTYwX3Byb2NfZm9wcyk7CiAJfQogCiAgICAgICBzcHJpbnRmKENvbnRyb2xsZXItPkNvbnRyb2xsZXJOYW1lLCAiYyVkIiwgQ29udHJvbGxlci0+Q29udHJvbGxlck51bWJlcik7CiAgICAgICBDb250cm9sbGVyUHJvY0VudHJ5ID0gcHJvY19ta2RpcihDb250cm9sbGVyLT5Db250cm9sbGVyTmFtZSwKIAkJCQkgICAgICAgREFDOTYwX1Byb2NEaXJlY3RvcnlFbnRyeSk7Ci0gICAgICBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJpbml0aWFsX3N0YXR1cyIsIDAsIENvbnRyb2xsZXJQcm9jRW50cnksCi0JCQkgICAgIERBQzk2MF9Qcm9jUmVhZEluaXRpYWxTdGF0dXMsIENvbnRyb2xsZXIpOwotICAgICAgY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiY3VycmVudF9zdGF0dXMiLCAwLCBDb250cm9sbGVyUHJvY0VudHJ5LAotCQkJICAgICBEQUM5NjBfUHJvY1JlYWRDdXJyZW50U3RhdHVzLCBDb250cm9sbGVyKTsKLSAgICAgIFVzZXJDb21tYW5kUHJvY0VudHJ5ID0KLQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJ1c2VyX2NvbW1hbmQiLCBTX0lXVVNSIHwgU19JUlVTUiwKLQkJCSAgICAgICBDb250cm9sbGVyUHJvY0VudHJ5LCBEQUM5NjBfUHJvY1JlYWRVc2VyQ29tbWFuZCwKLQkJCSAgICAgICBDb250cm9sbGVyKTsKLSAgICAgIFVzZXJDb21tYW5kUHJvY0VudHJ5LT53cml0ZV9wcm9jID0gREFDOTYwX1Byb2NXcml0ZVVzZXJDb21tYW5kOworICAgICAgcHJvY19jcmVhdGVfZGF0YSgiaW5pdGlhbF9zdGF0dXMiLCAwLCBDb250cm9sbGVyUHJvY0VudHJ5LCAmZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2NfZm9wcywgQ29udHJvbGxlcik7CisgICAgICBwcm9jX2NyZWF0ZV9kYXRhKCJjdXJyZW50X3N0YXR1cyIsIDAsIENvbnRyb2xsZXJQcm9jRW50cnksICZkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19mb3BzLCBDb250cm9sbGVyKTsKKyAgICAgIFVzZXJDb21tYW5kUHJvY0VudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgidXNlcl9jb21tYW5kIiwgU19JV1VTUiB8IFNfSVJVU1IsIENvbnRyb2xsZXJQcm9jRW50cnksICZkYWM5NjBfdXNlcl9jb21tYW5kX3Byb2NfZm9wcywgQ29udHJvbGxlcik7CiAgICAgICBDb250cm9sbGVyLT5Db250cm9sbGVyUHJvY0VudHJ5ID0gQ29udHJvbGxlclByb2NFbnRyeTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDI0YzNlMjEuLjYzOTllNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTM2LDkgKzM2LDExIEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC02Niw2ICs2OCwxMiBAQAogTU9EVUxFX1ZFUlNJT04oIjMuNi4yMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IGNjaXNzX2FsbG93X2hwc2E7Cittb2R1bGVfcGFyYW0oY2Npc3NfYWxsb3dfaHBzYSwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhjY2lzc19hbGxvd19ocHNhLAorCSJQcmV2ZW50IGNjaXNzIGRyaXZlciBmcm9tIGFjY2Vzc2luZyBoYXJkd2FyZSBrbm93biB0byBiZSAiCisJIiBzdXBwb3J0ZWQgYnkgdGhlIGhwc2EgZHJpdmVyIik7CisKICNpbmNsdWRlICJjY2lzc19jbWQuaCIKICNpbmNsdWRlICJjY2lzcy5oIgogI2luY2x1ZGUgPGxpbnV4L2NjaXNzX2lvY3RsLmg+CkBAIC05OSw4ICsxMDcsNiBAQAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQ5fSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0QX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNEJ9LAotCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0FOWV9JRCwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKLQkJUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmYgPDwgOCwgMH0sCiAJezAsfQogfTsKIApAQCAtMTIxLDggKzEyNyw2IEBACiAJezB4NDA5RDBFMTEsICJTbWFydCBBcnJheSA2NDAwIEVNIiwgJlNBNV9hY2Nlc3N9LAogCXsweDQwOTEwRTExLCAiU21hcnQgQXJyYXkgNmkiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIyNTEwM0MsICJTbWFydCBBcnJheSBQNjAwIiwgJlNBNV9hY2Nlc3N9LAotCXsweDMyMjMxMDNDLCAiU21hcnQgQXJyYXkgUDgwMCIsICZTQTVfYWNjZXNzfSwKLQl7MHgzMjM0MTAzQywgIlNtYXJ0IEFycmF5IFA0MDAiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIzNTEwM0MsICJTbWFydCBBcnJheSBQNDAwaSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjExMTAzQywgIlNtYXJ0IEFycmF5IEUyMDBpIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMTIxMDNDLCAiU21hcnQgQXJyYXkgRTIwMCIsICZTQTVfYWNjZXNzfSwKQEAgLTEzMCw2ICsxMzQsMTAgQEAKIAl7MHgzMjE0MTAzQywgIlNtYXJ0IEFycmF5IEUyMDBpIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMTUxMDNDLCAiU21hcnQgQXJyYXkgRTIwMGkiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIzNzEwM0MsICJTbWFydCBBcnJheSBFNTAwIiwgJlNBNV9hY2Nlc3N9LAorLyogY29udHJvbGxlcnMgYmVsb3cgdGhpcyBsaW5lIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGUgaHBzYSBkcml2ZXIuICovCisjZGVmaW5lIEhQU0FfQk9VTkRBUlkgMHgzMjIzMTAzQworCXsweDMyMjMxMDNDLCAiU21hcnQgQXJyYXkgUDgwMCIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjM0MTAzQywgIlNtYXJ0IEFycmF5IFA0MDAiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIzRDEwM0MsICJTbWFydCBBcnJheSBQNzAwbSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjQxMTAzQywgIlNtYXJ0IEFycmF5IFAyMTIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0MzEwM0MsICJTbWFydCBBcnJheSBQNDEwIiwgJlNBNV9hY2Nlc3N9LApAQCAtMTM4LDcgKzE0Niw2IEBACiAJezB4MzI0OTEwM0MsICJTbWFydCBBcnJheSBQODEyIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNEExMDNDLCAiU21hcnQgQXJyYXkgUDcxMm0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0QjEwM0MsICJTbWFydCBBcnJheSBQNzExbSIsICZTQTVfYWNjZXNzfSwKLQl7MHhGRkZGMTAzQywgIlVua25vd24gU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCiB9OwogCiAvKiBIb3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciBib2FyZCB0byBnbyBpbnRvIHNpbXBsZSBtb2RlICovCkBAIC0xNTUsNiArMTYyLDEwIEBACiAKIHN0YXRpYyBjdGxyX2luZm9fdCAqaGJhW01BWF9DVExSXTsKIAorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2Npc3Nfc2Nhbl90aHJlYWQ7CitzdGF0aWMgREVGSU5FX01VVEVYKHNjYW5fbXV0ZXgpOworc3RhdGljIExJU1RfSEVBRChzY2FuX3EpOworCiBzdGF0aWMgdm9pZCBkb19jY2lzc19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19jY2lzc19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaW50IGNjaXNzX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKTsKQEAgLTE2NCw5ICsxNzUsOSBAQAogc3RhdGljIGludCBjY2lzc19nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pOwogCiBzdGF0aWMgaW50IGNjaXNzX3JldmFsaWRhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2spOwotc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgaW50IGZpcnN0X3RpbWUpOworc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgaW50IGZpcnN0X3RpbWUsIGludCB2aWFfaW9jdGwpOwogc3RhdGljIGludCBkZXJlZ2lzdGVyX2Rpc2soY3Rscl9pbmZvX3QgKmgsIGludCBkcnZfaW5kZXgsCi0JCQkgICBpbnQgY2xlYXJfYWxsKTsKKwkJCSAgIGludCBjbGVhcl9hbGwsIGludCB2aWFfaW9jdGwpOwogCiBzdGF0aWMgdm9pZCBjY2lzc19yZWFkX2NhcGFjaXR5KGludCBjdGxyLCBpbnQgbG9ndm9sLCBpbnQgd2l0aGlycSwKIAkJCXNlY3Rvcl90ICp0b3RhbF9zaXplLCB1bnNpZ25lZCBpbnQgKmJsb2NrX3NpemUpOwpAQCAtMTg5LDggKzIwMCwxMyBAQAogc3RhdGljIGludCBwcm9jZXNzX3NlbmRjbWRfZXJyb3IoY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqYyk7CiAKIHN0YXRpYyB2b2lkIGZhaWxfYWxsX2NtZHModW5zaWduZWQgbG9uZyBjdGxyKTsKK3N0YXRpYyBpbnQgYWRkX3RvX3NjYW5fbGlzdChzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIHN0YXRpYyBpbnQgc2Nhbl90aHJlYWQodm9pZCAqZGF0YSk7CiBzdGF0aWMgaW50IGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjKTsKK3N0YXRpYyB2b2lkIGNjaXNzX2hiYV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBjY2lzc19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgY2Npc3NfZnJlZV9nZW5kaXNrKGN0bHJfaW5mb190ICpoLCBpbnQgZHJ2X2luZGV4KTsKK3N0YXRpYyB2b2lkIGNjaXNzX2ZyZWVfZHJpdmVfaW5mbyhjdGxyX2luZm9fdCAqaCwgaW50IGRydl9pbmRleCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHZvaWQgY2Npc3NfcHJvY2luaXQoaW50IGkpOwpAQCAtMjQ1LDcgKzI2MSwxMCBAQAogCiAjaW5jbHVkZSAiY2Npc3Nfc2NzaS5jIgkJLyogRm9yIFNDU0kgdGFwZSBzdXBwb3J0ICovCiAKLSNkZWZpbmUgUkFJRF9VTktOT1dOIDYKK3N0YXRpYyBjb25zdCBjaGFyICpyYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgxKzApIiwgIjUiLCAiNSsxIiwgIkFERyIsCisJIlVOS05PV04iCit9OworI2RlZmluZSBSQUlEX1VOS05PV04gKHNpemVvZihyYWlkX2xhYmVsKSAvIHNpemVvZihyYWlkX2xhYmVsWzBdKS0xKQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIApAQCAtMjU1LDkgKzI3NCw2IEBACiAjZGVmaW5lIEVOR19HSUcgMTAwMDAwMDAwMAogI2RlZmluZSBFTkdfR0lHX0ZBQ1RPUiAoRU5HX0dJRy81MTIpCiAjZGVmaW5lIEVOR0FHRV9TQ1NJCSJlbmdhZ2Ugc2NzaSIKLXN0YXRpYyBjb25zdCBjaGFyICpyYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgxKzApIiwgIjUiLCAiNSsxIiwgIkFERyIsCi0JIlVOS05PV04iCi19OwogCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2NjaXNzOwogCkBAIC0zMTgsNyArMzM0LDcgQEAKIAljdGxyX2luZm9fdCAqaCA9IHNlcS0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBjdGxyID0gaC0+Y3RscjsKIAlsb2ZmX3QgKnBvcyA9IHY7Ci0JZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9ICZoLT5kcnZbKnBvc107CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9IGgtPmRydlsqcG9zXTsKIAogCWlmICgqcG9zID4gaC0+aGlnaGVzdF9sdW4pCiAJCXJldHVybiAwOwpAQCAtMzMxLDcgKzM0Nyw3IEBACiAJdm9sX3N6X2ZyYWMgKj0gMTAwOwogCXNlY3Rvcl9kaXYodm9sX3N6X2ZyYWMsIEVOR19HSUdfRkFDVE9SKTsKIAotCWlmIChkcnYtPnJhaWRfbGV2ZWwgPiA1KQorCWlmIChkcnYtPnJhaWRfbGV2ZWwgPCAwIHx8IGRydi0+cmFpZF9sZXZlbCA+IFJBSURfVU5LTk9XTikKIAkJZHJ2LT5yYWlkX2xldmVsID0gUkFJRF9VTktOT1dOOwogCXNlcV9wcmludGYoc2VxLCAiY2Npc3MvYyVkZCVkOiIKIAkJCSJcdCU0dS4lMDJ1R0JcdFJBSUQgJXNcbiIsCkBAIC00MjYsNyArNDQyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjY2lzc19wcm9jX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjY2lzc19wcm9jX2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuICAgID0gY2Npc3Nfc2VxX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKQEAgLTQ1NCw5ICs0NzAsMTkgQEAKICNkZWZpbmUgdG9faGJhKG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgY3Rscl9pbmZvLCBkZXYpCiAjZGVmaW5lIHRvX2RydihuKSBjb250YWluZXJfb2YobiwgZHJpdmVfaW5mb19zdHJ1Y3QsIGRldikKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBjY2lzc19ob3N0X3R5cGUgPSB7Ci0JLm5hbWUJCT0gImNjaXNzX2hvc3QiLAotfTsKK3N0YXRpYyBzc2l6ZV90IGhvc3Rfc3RvcmVfcmVzY2FuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjdGxyX2luZm8gKmggPSB0b19oYmEoZGV2KTsKKworCWFkZF90b19zY2FuX2xpc3QoaCk7CisJd2FrZV91cF9wcm9jZXNzKGNjaXNzX3NjYW5fdGhyZWFkKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmgtPnNjYW5fd2FpdCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitERVZJQ0VfQVRUUihyZXNjYW4sIFNfSVdVU1IsIE5VTEwsIGhvc3Rfc3RvcmVfcmVzY2FuKTsKIAogc3RhdGljIHNzaXplX3QgZGV2X3Nob3dfdW5pcXVlX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC01NjAsMTEgKzU4NiwxMDEgQEAKIH0KIERFVklDRV9BVFRSKHJldiwgU19JUlVHTywgZGV2X3Nob3dfcmV2LCBOVUxMKTsKIAorc3RhdGljIHNzaXplX3QgY2Npc3Nfc2hvd19sdW5pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gdG9fZHJ2KGRldik7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IHRvX2hiYShkcnYtPmRldi5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBsdW5pZFs4XTsKKworCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlpZiAoaC0+YnVzeV9jb25maWd1cmluZykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKCFkcnYtPmhlYWRzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJbWVtY3B5KGx1bmlkLCBkcnYtPkx1bklELCBzaXplb2YobHVuaWQpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIjB4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCWx1bmlkWzBdLCBsdW5pZFsxXSwgbHVuaWRbMl0sIGx1bmlkWzNdLAorCQlsdW5pZFs0XSwgbHVuaWRbNV0sIGx1bmlkWzZdLCBsdW5pZFs3XSk7Cit9CitERVZJQ0VfQVRUUihsdW5pZCwgU19JUlVHTywgY2Npc3Nfc2hvd19sdW5pZCwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IGNjaXNzX3Nob3dfcmFpZF9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSB0b19kcnYoZGV2KTsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gdG9faGJhKGRydi0+ZGV2LnBhcmVudCk7CisJaW50IHJhaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlpZiAoaC0+YnVzeV9jb25maWd1cmluZykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcmFpZCA9IGRydi0+cmFpZF9sZXZlbDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlpZiAocmFpZCA8IDAgfHwgcmFpZCA+IFJBSURfVU5LTk9XTikKKwkJcmFpZCA9IFJBSURfVU5LTk9XTjsKKworCXJldHVybiBzbnByaW50ZihidWYsIHN0cmxlbihyYWlkX2xhYmVsW3JhaWRdKSArIDcsICJSQUlEICVzXG4iLAorCQkJcmFpZF9sYWJlbFtyYWlkXSk7Cit9CitERVZJQ0VfQVRUUihyYWlkX2xldmVsLCBTX0lSVUdPLCBjY2lzc19zaG93X3JhaWRfbGV2ZWwsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBjY2lzc19zaG93X3VzYWdlX2NvdW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSB0b19kcnYoZGV2KTsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gdG9faGJhKGRydi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY291bnQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNvdW50ID0gZHJ2LT51c2FnZV9jb3VudDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiVkXG4iLCBjb3VudCk7Cit9CitERVZJQ0VfQVRUUih1c2FnZV9jb3VudCwgU19JUlVHTywgY2Npc3Nfc2hvd191c2FnZV9jb3VudCwgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjY2lzc19ob3N0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3Jlc2Nhbi5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNjaXNzX2hvc3RfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBjY2lzc19ob3N0X2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNjaXNzX2hvc3RfYXR0cl9ncm91cHNbXSA9IHsKKwkmY2Npc3NfaG9zdF9hdHRyX2dyb3VwLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgY2Npc3NfaG9zdF90eXBlID0geworCS5uYW1lCQk9ICJjY2lzc19ob3N0IiwKKwkuZ3JvdXBzCQk9IGNjaXNzX2hvc3RfYXR0cl9ncm91cHMsCisJLnJlbGVhc2UJPSBjY2lzc19oYmFfcmVsZWFzZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjY2lzc19kZXZfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfdW5pcXVlX2lkLmF0dHIsCiAJJmRldl9hdHRyX21vZGVsLmF0dHIsCiAJJmRldl9hdHRyX3ZlbmRvci5hdHRyLAogCSZkZXZfYXR0cl9yZXYuYXR0ciwKKwkmZGV2X2F0dHJfbHVuaWQuYXR0ciwKKwkmZGV2X2F0dHJfcmFpZF9sZXZlbC5hdHRyLAorCSZkZXZfYXR0cl91c2FnZV9jb3VudC5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTU4MCwxMiArNjk2LDI0IEBACiBzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGNjaXNzX2Rldl90eXBlID0gewogCS5uYW1lCQk9ICJjY2lzc19kZXZpY2UiLAogCS5ncm91cHMJCT0gY2Npc3NfZGV2X2F0dHJfZ3JvdXBzLAorCS5yZWxlYXNlCT0gY2Npc3NfZGV2aWNlX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IGJ1c190eXBlIGNjaXNzX2J1c190eXBlID0gewogCS5uYW1lCQk9ICJjY2lzcyIsCiB9OwogCisvKgorICogY2Npc3NfaGJhX3JlbGVhc2UgaXMgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudAorICogb2YgaC0+ZGV2IGdvZXMgdG8gemVyby4KKyAqLworc3RhdGljIHZvaWQgY2Npc3NfaGJhX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qCisJICogbm90aGluZyB0byBkbywgYnV0IG5lZWQgdGhpcyB0byBhdm9pZCBhIHdhcm5pbmcKKwkgKiBhYm91dCBub3QgaGF2aW5nIGEgcmVsZWFzZSBoYW5kbGVyIGZyb20gbGliL2tyZWYuYy4KKwkgKi8KK30KIAogLyoKICAqIEluaXRpYWxpemUgc3lzZnMgZW50cnkgZm9yIGVhY2ggY29udHJvbGxlci4gIFRoaXMgc2V0cyB1cCBhbmQgcmVnaXN0ZXJzCkBAIC02MDksNiArNzM3LDE2IEBACiBzdGF0aWMgdm9pZCBjY2lzc19kZXN0cm95X2hiYV9zeXNmc19lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewogCWRldmljZV9kZWwoJmgtPmRldik7CisJcHV0X2RldmljZSgmaC0+ZGV2KTsgLyogZmluYWwgcHV0LiAqLworfQorCisvKiBjY2lzc19kZXZpY2VfcmVsZWFzZSBpcyBjYWxsZWQgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50CisgKiBvZiBoLT5kcnZbeF1kZXYgZ29lcyB0byB6ZXJvLgorICovCitzdGF0aWMgdm9pZCBjY2lzc19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9IHRvX2RydihkZXYpOworCWtmcmVlKGRydik7CiB9CiAKIC8qCkBAIC02MTcsMjQgKzc1NSwzOSBAQAogICogL3N5cy9idXMvcGNpL2RldmljZXMvPGRldi9jY2lzIy8uIFdlIGFsc28gY3JlYXRlIGEgbGluayBmcm9tCiAgKiAvc3lzL2Jsb2NrL2NjaXNzIWMjZCMgdG8gdGhpcyBlbnRyeS4KICAqLwotc3RhdGljIGludCBjY2lzc19jcmVhdGVfbGRfc3lzZnNfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCwKLQkJCQkgICAgICAgZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiwKK3N0YXRpYyBsb25nIGNjaXNzX2NyZWF0ZV9sZF9zeXNmc19lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCQkJCSAgICAgICBpbnQgZHJ2X2luZGV4KQogewotCWRldmljZV9pbml0aWFsaXplKCZkcnYtPmRldik7Ci0JZHJ2LT5kZXYudHlwZSA9ICZjY2lzc19kZXZfdHlwZTsKLQlkcnYtPmRldi5idXMgPSAmY2Npc3NfYnVzX3R5cGU7Ci0JZGV2X3NldF9uYW1lKCZkcnYtPmRldiwgImMlZGQlZCIsIGgtPmN0bHIsIGRydl9pbmRleCk7Ci0JZHJ2LT5kZXYucGFyZW50ID0gJmgtPmRldjsKLQlyZXR1cm4gZGV2aWNlX2FkZCgmZHJ2LT5kZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWlmIChoLT5kcnZbZHJ2X2luZGV4XS0+ZGV2aWNlX2luaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKworCWRldiA9ICZoLT5kcnZbZHJ2X2luZGV4XS0+ZGV2OworCWRldmljZV9pbml0aWFsaXplKGRldik7CisJZGV2LT50eXBlID0gJmNjaXNzX2Rldl90eXBlOworCWRldi0+YnVzID0gJmNjaXNzX2J1c190eXBlOworCWRldl9zZXRfbmFtZShkZXYsICJjJWRkJWQiLCBoLT5jdGxyLCBkcnZfaW5kZXgpOworCWRldi0+cGFyZW50ID0gJmgtPmRldjsKKwloLT5kcnZbZHJ2X2luZGV4XS0+ZGV2aWNlX2luaXRpYWxpemVkID0gMTsKKwlyZXR1cm4gZGV2aWNlX2FkZChkZXYpOwogfQogCiAvKgogICogUmVtb3ZlIHN5c2ZzIGVudHJpZXMgZm9yIGEgbG9naWNhbCBkcml2ZS4KICAqLwotc3RhdGljIHZvaWQgY2Npc3NfZGVzdHJveV9sZF9zeXNmc19lbnRyeShkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2KQorc3RhdGljIHZvaWQgY2Npc3NfZGVzdHJveV9sZF9zeXNmc19lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgZHJ2X2luZGV4LAorCWludCBjdGxyX2V4aXRpbmcpCiB7Ci0JZGV2aWNlX2RlbCgmZHJ2LT5kZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZoLT5kcnZbZHJ2X2luZGV4XS0+ZGV2OworCisJLyogc3BlY2lhbCBjYXNlIGZvciBjKmQwLCB3ZSBvbmx5IGRlc3Ryb3kgaXQgb24gY29udHJvbGxlciBleGl0ICovCisJaWYgKGRydl9pbmRleCA9PSAwICYmICFjdGxyX2V4aXRpbmcpCisJCXJldHVybjsKKworCWRldmljZV9kZWwoZGV2KTsKKwlwdXRfZGV2aWNlKGRldik7IC8qIHRoZSAiZmluYWwiIHB1dC4gKi8KKwloLT5kcnZbZHJ2X2luZGV4XSA9IE5VTEw7CiB9CiAKIC8qCkBAIC03NTEsNyArOTA0LDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiY2Npc3Nfb3BlbiAlc1xuIiwgYmRldi0+YmRfZGlzay0+ZGlza19uYW1lKTsKICNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwogCi0JaWYgKGhvc3QtPmJ1c3lfaW5pdGlhbGl6aW5nIHx8IGRydi0+YnVzeV9jb25maWd1cmluZykKKwlpZiAoZHJ2LT5idXN5X2NvbmZpZ3VyaW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCS8qCiAJICogUm9vdCBpcyBhbGxvd2VkIHRvIG9wZW4gcmF3IHZvbHVtZSB6ZXJvIGV2ZW4gaWYgaXQncyBub3QgY29uZmlndXJlZApAQCAtNzY3LDcgKzkyMCw4IEBACiAJCQlpZiAoTUlOT1IoYmRldi0+YmRfZGV2KSAmIDB4MGYpIHsKIAkJCQlyZXR1cm4gLUVOWElPOwogCQkJCS8qIGlmIGl0IGlzLCBtYWtlIHN1cmUgd2UgaGF2ZSBhIExVTiBJRCAqLwotCQkJfSBlbHNlIGlmIChkcnYtPkx1bklEID09IDApIHsKKwkJCX0gZWxzZSBpZiAobWVtY21wKGRydi0+THVuSUQsIENUTFJfTFVOSUQsCisJCQkJc2l6ZW9mKGRydi0+THVuSUQpKSkgewogCQkJCXJldHVybiAtRU5YSU87CiAJCQl9CiAJCX0KQEAgLTExMzIsMTIgKzEyODYsMTMgQEAKIAljYXNlIENDSVNTX0RFUkVHRElTSzoKIAljYXNlIENDSVNTX1JFR05FV0Q6CiAJY2FzZSBDQ0lTU19SRVZBTElEVk9MUzoKLQkJcmV0dXJuIHJlYnVpbGRfbHVuX3RhYmxlKGhvc3QsIDApOworCQlyZXR1cm4gcmVidWlsZF9sdW5fdGFibGUoaG9zdCwgMCwgMSk7CiAKIAljYXNlIENDSVNTX0dFVExVTklORk86ewogCQkJTG9ndm9sSW5mb19zdHJ1Y3QgbHVuaW5mbzsKIAotCQkJbHVuaW5mby5MdW5JRCA9IGRydi0+THVuSUQ7CisJCQltZW1jcHkoJmx1bmluZm8uTHVuSUQsIGRydi0+THVuSUQsCisJCQkJc2l6ZW9mKGx1bmluZm8uTHVuSUQpKTsKIAkJCWx1bmluZm8ubnVtX29wZW5zID0gZHJ2LT51c2FnZV9jb3VudDsKIAkJCWx1bmluZm8ubnVtX3BhcnRzID0gMDsKIAkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmx1bmluZm8sCkBAIC0xNDc1LDcgKzE2MzAsMTAgQEAKIAkJLyogbWFrZSBzdXJlIHRoZSBkaXNrIGhhcyBiZWVuIGFkZGVkIGFuZCB0aGUgZHJpdmUgaXMgcmVhbAogCQkgKiBiZWNhdXNlIHRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIHRoZSBtaWRkbGUgb2YgaW5pdF9vbmUuCiAJCSAqLwotCQlpZiAoIShoLT5kcnZbY3Vycl9xdWV1ZV0ucXVldWUpIHx8ICEoaC0+ZHJ2W2N1cnJfcXVldWVdLmhlYWRzKSkKKwkJaWYgKCFoLT5kcnZbY3Vycl9xdWV1ZV0pCisJCQljb250aW51ZTsKKwkJaWYgKCEoaC0+ZHJ2W2N1cnJfcXVldWVdLT5xdWV1ZSkgfHwKKwkJCSEoaC0+ZHJ2W2N1cnJfcXVldWVdLT5oZWFkcykpCiAJCQljb250aW51ZTsKIAkJYmxrX3N0YXJ0X3F1ZXVlKGgtPmdlbmRpc2tbY3Vycl9xdWV1ZV0tPnF1ZXVlKTsKIApAQCAtMTUzMiwxMyArMTY5MCwxMSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgbG9nX3VuaXRfdG9fc2NzaTNhZGRyKGN0bHJfaW5mb190ICpoLCB1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdLAotCXVpbnQzMl90IGxvZ191bml0KQorc3RhdGljIGlubGluZSB2b2lkIGxvZ191bml0X3RvX3Njc2kzYWRkcihjdGxyX2luZm9fdCAqaCwKKwl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdLCB1aW50MzJfdCBsb2dfdW5pdCkKIHsKLQlsb2dfdW5pdCA9IGgtPmRydltsb2dfdW5pdF0uTHVuSUQgJiAweDAzZmZmOwotCW1lbXNldCgmc2NzaTNhZGRyWzRdLCAwLCA0KTsKLQltZW1jcHkoJnNjc2kzYWRkclswXSwgJmxvZ191bml0LCA0KTsKLQlzY3NpM2FkZHJbM10gfD0gMHg0MDsKKwltZW1jcHkoc2NzaTNhZGRyLCBoLT5kcnZbbG9nX3VuaXRdLT5MdW5JRCwKKwkJc2l6ZW9mKGgtPmRydltsb2dfdW5pdF0tPkx1bklEKSk7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgU0NTSSB2ZW5kb3IsIG1vZGVsLCBhbmQgcmV2aXNpb24gb2YgYSBsb2dpY2FsIGRyaXZlCkBAIC0xNjE1LDE2ICsxNzcxLDIzIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBjY2lzc19hZGRfZGlzayhjdGxyX2luZm9fdCAqaCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCisvKgorICogY2Npc3NfYWRkX2Rpc2sgc2V0cyB1cCB0aGUgYmxvY2sgZGV2aWNlIHF1ZXVlIGZvciBhIGxvZ2ljYWwgZHJpdmUKKyAqLworc3RhdGljIGludCBjY2lzc19hZGRfZGlzayhjdGxyX2luZm9fdCAqaCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJCQkJaW50IGRydl9pbmRleCkKIHsKIAlkaXNrLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGRvX2NjaXNzX3JlcXVlc3QsICZoLT5sb2NrKTsKKwlpZiAoIWRpc2stPnF1ZXVlKQorCQlnb3RvIGluaXRfcXVldWVfZmFpbHVyZTsKIAlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgImNjaXNzL2MlZGQlZCIsIGgtPmN0bHIsIGRydl9pbmRleCk7CiAJZGlzay0+bWFqb3IgPSBoLT5tYWpvcjsKIAlkaXNrLT5maXJzdF9taW5vciA9IGRydl9pbmRleCA8PCBOV0RfU0hJRlQ7CiAJZGlzay0+Zm9wcyA9ICZjY2lzc19mb3BzOwotCWRpc2stPnByaXZhdGVfZGF0YSA9ICZoLT5kcnZbZHJ2X2luZGV4XTsKLQlkaXNrLT5kcml2ZXJmc19kZXYgPSAmaC0+ZHJ2W2Rydl9pbmRleF0uZGV2OworCWlmIChjY2lzc19jcmVhdGVfbGRfc3lzZnNfZW50cnkoaCwgZHJ2X2luZGV4KSkKKwkJZ290byBjbGVhbnVwX3F1ZXVlOworCWRpc2stPnByaXZhdGVfZGF0YSA9IGgtPmRydltkcnZfaW5kZXhdOworCWRpc2stPmRyaXZlcmZzX2RldiA9ICZoLT5kcnZbZHJ2X2luZGV4XS0+ZGV2OwogCiAJLyogU2V0IHVwIHF1ZXVlIGluZm9ybWF0aW9uICovCiAJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChkaXNrLT5xdWV1ZSwgaC0+cGRldi0+ZG1hX21hc2spOwpAQCAtMTY0MiwxNCArMTgwNSwyMSBAQAogCWRpc2stPnF1ZXVlLT5xdWV1ZWRhdGEgPSBoOwogCiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShkaXNrLT5xdWV1ZSwKLQkJCQkgICAgIGgtPmRydltkcnZfaW5kZXhdLmJsb2NrX3NpemUpOworCQkJCSAgICAgaC0+ZHJ2W2Rydl9pbmRleF0tPmJsb2NrX3NpemUpOwogCiAJLyogTWFrZSBzdXJlIGFsbCBxdWV1ZSBkYXRhIGlzIHdyaXR0ZW4gb3V0IGJlZm9yZSAqLwotCS8qIHNldHRpbmcgaC0+ZHJ2W2Rydl9pbmRleF0ucXVldWUsIGFzIHNldHRpbmcgdGhpcyAqLworCS8qIHNldHRpbmcgaC0+ZHJ2W2Rydl9pbmRleF0tPnF1ZXVlLCBhcyBzZXR0aW5nIHRoaXMgKi8KIAkvKiBhbGxvd3MgdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIHN0YXJ0IHRoZSBxdWV1ZSAqLwogCXdtYigpOwotCWgtPmRydltkcnZfaW5kZXhdLnF1ZXVlID0gZGlzay0+cXVldWU7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPnF1ZXVlID0gZGlzay0+cXVldWU7CiAJYWRkX2Rpc2soZGlzayk7CisJcmV0dXJuIDA7CisKK2NsZWFudXBfcXVldWU6CisJYmxrX2NsZWFudXBfcXVldWUoZGlzay0+cXVldWUpOworCWRpc2stPnF1ZXVlID0gTlVMTDsKK2luaXRfcXVldWVfZmFpbHVyZToKKwlyZXR1cm4gLTE7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayB0aGUgdXNhZ2VfY291bnQgb2YgdGhlIGRyaXZlIHRvIGJlIHVwZGF0ZWQvYWRkZWQuCkBAIC0xNjYyLDcgKzE4MzIsOCBAQAogICogaXMgYWxzbyB0aGUgY29udHJvbGxlciBub2RlLiAgQW55IGNoYW5nZXMgdG8gZGlzayAwIHdpbGwgc2hvdyB1cCBvbgogICogdGhlIG5leHQgcmVib290LgogICovCi1zdGF0aWMgdm9pZCBjY2lzc191cGRhdGVfZHJpdmVfaW5mbyhpbnQgY3RsciwgaW50IGRydl9pbmRleCwgaW50IGZpcnN0X3RpbWUpCitzdGF0aWMgdm9pZCBjY2lzc191cGRhdGVfZHJpdmVfaW5mbyhpbnQgY3RsciwgaW50IGRydl9pbmRleCwgaW50IGZpcnN0X3RpbWUsCisJaW50IHZpYV9pb2N0bCkKIHsKIAljdGxyX2luZm9fdCAqaCA9IGhiYVtjdGxyXTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKQEAgLTE2NzIsMjEgKzE4NDMsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlpbnQgcmV0ID0gMDsKIAlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2aW5mbzsKLQlpbnQgd2FzX29ubHlfY29udHJvbGxlcl9ub2RlOwogCiAJLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaXNrIGFuZCBtb2RpZnkgdGhlIGRyaXZlciBzdHJ1Y3R1cmUgKi8KIAlpbnFfYnVmZiA9IGttYWxsb2Moc2l6ZW9mKElucXVpcnlEYXRhX3N0cnVjdCksIEdGUF9LRVJORUwpOwotCWRydmluZm8gPSBrbWFsbG9jKHNpemVvZigqZHJ2aW5mbyksIEdGUF9LRVJORUwpOworCWRydmluZm8gPSBremFsbG9jKHNpemVvZigqZHJ2aW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChpbnFfYnVmZiA9PSBOVUxMIHx8IGRydmluZm8gPT0gTlVMTCkKIAkJZ290byBtZW1fbXNnOwogCi0JLyogU2VlIGlmIHdlJ3JlIHRyeWluZyB0byB1cGRhdGUgdGhlICJjb250cm9sbGVyIG5vZGUiCi0JICogdGhpcyB3aWxsIGhhcHBlbiB0aGUgd2hlbiB0aGUgZmlyc3QgbG9naWNhbCBkcml2ZSBnZXRzCi0JICogY3JlYXRlZCBieSBBQ1UuCi0JICovCi0Jd2FzX29ubHlfY29udHJvbGxlcl9ub2RlID0gKGRydl9pbmRleCA9PSAwICYmCi0JCQkJaC0+ZHJ2WzBdLnJhaWRfbGV2ZWwgPT0gLTEpOwotCiAJLyogdGVzdGluZyB0byBzZWUgaWYgMTYtYnl0ZSBDREJzIGFyZSBhbHJlYWR5IGJlaW5nIHVzZWQgKi8KIAlpZiAoaC0+Y2Npc3NfcmVhZCA9PSBDQ0lTU19SRUFEXzE2KSB7CiAJCWNjaXNzX3JlYWRfY2FwYWNpdHlfMTYoaC0+Y3RsciwgZHJ2X2luZGV4LCAxLApAQCAtMTcxOSwxNiArMTg4MiwxOSBAQAogCQkJCWRydmluZm8tPm1vZGVsLCBkcnZpbmZvLT5yZXYpOwogCWNjaXNzX2dldF9zZXJpYWxfbm8oY3RsciwgZHJ2X2luZGV4LCAxLCBkcnZpbmZvLT5zZXJpYWxfbm8sCiAJCQlzaXplb2YoZHJ2aW5mby0+c2VyaWFsX25vKSk7CisJLyogU2F2ZSB0aGUgbHVuaWQgaW4gY2FzZSB3ZSBkZXJlZ2lzdGVyIHRoZSBkaXNrLCBiZWxvdy4gKi8KKwltZW1jcHkoZHJ2aW5mby0+THVuSUQsIGgtPmRydltkcnZfaW5kZXhdLT5MdW5JRCwKKwkJc2l6ZW9mKGRydmluZm8tPkx1bklEKSk7CiAKIAkvKiBJcyBpdCB0aGUgc2FtZSBkaXNrIHdlIGFscmVhZHkga25vdywgYW5kIG5vdGhpbmcncyBjaGFuZ2VkPyAqLwotCWlmIChoLT5kcnZbZHJ2X2luZGV4XS5yYWlkX2xldmVsICE9IC0xICYmCisJaWYgKGgtPmRydltkcnZfaW5kZXhdLT5yYWlkX2xldmVsICE9IC0xICYmCiAJCSgobWVtY21wKGRydmluZm8tPnNlcmlhbF9ubywKLQkJCQloLT5kcnZbZHJ2X2luZGV4XS5zZXJpYWxfbm8sIDE2KSA9PSAwKSAmJgotCQlkcnZpbmZvLT5ibG9ja19zaXplID09IGgtPmRydltkcnZfaW5kZXhdLmJsb2NrX3NpemUgJiYKLQkJZHJ2aW5mby0+bnJfYmxvY2tzID09IGgtPmRydltkcnZfaW5kZXhdLm5yX2Jsb2NrcyAmJgotCQlkcnZpbmZvLT5oZWFkcyA9PSBoLT5kcnZbZHJ2X2luZGV4XS5oZWFkcyAmJgotCQlkcnZpbmZvLT5zZWN0b3JzID09IGgtPmRydltkcnZfaW5kZXhdLnNlY3RvcnMgJiYKLQkJZHJ2aW5mby0+Y3lsaW5kZXJzID09IGgtPmRydltkcnZfaW5kZXhdLmN5bGluZGVycykpCisJCQkJaC0+ZHJ2W2Rydl9pbmRleF0tPnNlcmlhbF9ubywgMTYpID09IDApICYmCisJCWRydmluZm8tPmJsb2NrX3NpemUgPT0gaC0+ZHJ2W2Rydl9pbmRleF0tPmJsb2NrX3NpemUgJiYKKwkJZHJ2aW5mby0+bnJfYmxvY2tzID09IGgtPmRydltkcnZfaW5kZXhdLT5ucl9ibG9ja3MgJiYKKwkJZHJ2aW5mby0+aGVhZHMgPT0gaC0+ZHJ2W2Rydl9pbmRleF0tPmhlYWRzICYmCisJCWRydmluZm8tPnNlY3RvcnMgPT0gaC0+ZHJ2W2Rydl9pbmRleF0tPnNlY3RvcnMgJiYKKwkJZHJ2aW5mby0+Y3lsaW5kZXJzID09IGgtPmRydltkcnZfaW5kZXhdLT5jeWxpbmRlcnMpKQogCQkJLyogVGhlIGRpc2sgaXMgdW5jaGFuZ2VkLCBub3RoaW5nIHRvIHVwZGF0ZSAqLwogCQkJZ290byBmcmVlcmV0OwogCkBAIC0xNzM4LDE4ICsxOTA0LDE3IEBACiAJICogSWYgdGhlIGRpc2sgYWxyZWFkeSBleGlzdHMgdGhlbiBkZXJlZ2lzdGVyIGl0IGJlZm9yZSBwcm9jZWVkaW5nCiAJICogKHVubGVzcyBpdCdzIHRoZSBmaXJzdCBkaXNrIChmb3IgdGhlIGNvbnRyb2xsZXIgbm9kZSkuCiAJICovCi0JaWYgKGgtPmRydltkcnZfaW5kZXhdLnJhaWRfbGV2ZWwgIT0gLTEgJiYgZHJ2X2luZGV4ICE9IDApIHsKKwlpZiAoaC0+ZHJ2W2Rydl9pbmRleF0tPnJhaWRfbGV2ZWwgIT0gLTEgJiYgZHJ2X2luZGV4ICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGlzayAlZCBoYXMgY2hhbmdlZC5cbiIsIGRydl9pbmRleCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKLQkJaC0+ZHJ2W2Rydl9pbmRleF0uYnVzeV9jb25maWd1cmluZyA9IDE7CisJCWgtPmRydltkcnZfaW5kZXhdLT5idXN5X2NvbmZpZ3VyaW5nID0gMTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CiAKLQkJLyogZGVyZWdpc3Rlcl9kaXNrIHNldHMgaC0+ZHJ2W2Rydl9pbmRleF0ucXVldWUgPSBOVUxMCisJCS8qIGRlcmVnaXN0ZXJfZGlzayBzZXRzIGgtPmRydltkcnZfaW5kZXhdLT5xdWV1ZSA9IE5VTEwKIAkJICogd2hpY2gga2VlcHMgdGhlIGludGVycnVwdCBoYW5kbGVyIGZyb20gc3RhcnRpbmcKIAkJICogdGhlIHF1ZXVlLgogCQkgKi8KLQkJcmV0ID0gZGVyZWdpc3Rlcl9kaXNrKGgsIGRydl9pbmRleCwgMCk7Ci0JCWgtPmRydltkcnZfaW5kZXhdLmJ1c3lfY29uZmlndXJpbmcgPSAwOworCQlyZXQgPSBkZXJlZ2lzdGVyX2Rpc2soaCwgZHJ2X2luZGV4LCAwLCB2aWFfaW9jdGwpOwogCX0KIAogCS8qIElmIHRoZSBkaXNrIGlzIGluIHVzZSByZXR1cm4gKi8KQEAgLTE3NTcsMjIgKzE5MjIsMzEgQEAKIAkJZ290byBmcmVlcmV0OwogCiAJLyogU2F2ZSB0aGUgbmV3IGluZm9ybWF0aW9uIGZyb20gY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeQotCSAqIGFuZCBzZXJpYWwgbnVtYmVyIGlucXVpcnkuCisJICogYW5kIHNlcmlhbCBudW1iZXIgaW5xdWlyeS4gIElmIHRoZSBkaXNrIHdhcyBkZXJlZ2lzdGVyZWQKKwkgKiBhYm92ZSwgdGhlbiBoLT5kcnZbZHJ2X2luZGV4XSB3aWxsIGJlIE5VTEwuCiAJICovCi0JaC0+ZHJ2W2Rydl9pbmRleF0uYmxvY2tfc2l6ZSA9IGRydmluZm8tPmJsb2NrX3NpemU7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0ubnJfYmxvY2tzID0gZHJ2aW5mby0+bnJfYmxvY2tzOwotCWgtPmRydltkcnZfaW5kZXhdLmhlYWRzID0gZHJ2aW5mby0+aGVhZHM7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0uc2VjdG9ycyA9IGRydmluZm8tPnNlY3RvcnM7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0uY3lsaW5kZXJzID0gZHJ2aW5mby0+Y3lsaW5kZXJzOwotCWgtPmRydltkcnZfaW5kZXhdLnJhaWRfbGV2ZWwgPSBkcnZpbmZvLT5yYWlkX2xldmVsOwotCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS5zZXJpYWxfbm8sIGRydmluZm8tPnNlcmlhbF9ubywgMTYpOwotCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS52ZW5kb3IsIGRydmluZm8tPnZlbmRvciwgVkVORE9SX0xFTiArIDEpOwotCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS5tb2RlbCwgZHJ2aW5mby0+bW9kZWwsIE1PREVMX0xFTiArIDEpOwotCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS5yZXYsIGRydmluZm8tPnJldiwgUkVWX0xFTiArIDEpOworCWlmIChoLT5kcnZbZHJ2X2luZGV4XSA9PSBOVUxMKSB7CisJCWRydmluZm8tPmRldmljZV9pbml0aWFsaXplZCA9IDA7CisJCWgtPmRydltkcnZfaW5kZXhdID0gZHJ2aW5mbzsKKwkJZHJ2aW5mbyA9IE5VTEw7IC8qIHNvIGl0IHdvbid0IGJlIGZyZWVkIGJlbG93LiAqLworCX0gZWxzZSB7CisJCS8qIHNwZWNpYWwgY2FzZSBmb3IgY3hkMCAqLworCQloLT5kcnZbZHJ2X2luZGV4XS0+YmxvY2tfc2l6ZSA9IGRydmluZm8tPmJsb2NrX3NpemU7CisJCWgtPmRydltkcnZfaW5kZXhdLT5ucl9ibG9ja3MgPSBkcnZpbmZvLT5ucl9ibG9ja3M7CisJCWgtPmRydltkcnZfaW5kZXhdLT5oZWFkcyA9IGRydmluZm8tPmhlYWRzOworCQloLT5kcnZbZHJ2X2luZGV4XS0+c2VjdG9ycyA9IGRydmluZm8tPnNlY3RvcnM7CisJCWgtPmRydltkcnZfaW5kZXhdLT5jeWxpbmRlcnMgPSBkcnZpbmZvLT5jeWxpbmRlcnM7CisJCWgtPmRydltkcnZfaW5kZXhdLT5yYWlkX2xldmVsID0gZHJ2aW5mby0+cmFpZF9sZXZlbDsKKwkJbWVtY3B5KGgtPmRydltkcnZfaW5kZXhdLT5zZXJpYWxfbm8sIGRydmluZm8tPnNlcmlhbF9ubywgMTYpOworCQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0tPnZlbmRvciwgZHJ2aW5mby0+dmVuZG9yLAorCQkJVkVORE9SX0xFTiArIDEpOworCQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0tPm1vZGVsLCBkcnZpbmZvLT5tb2RlbCwgTU9ERUxfTEVOICsgMSk7CisJCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS0+cmV2LCBkcnZpbmZvLT5yZXYsIFJFVl9MRU4gKyAxKTsKKwl9CiAKIAkrK2gtPm51bV9sdW5zOwogCWRpc2sgPSBoLT5nZW5kaXNrW2Rydl9pbmRleF07Ci0Jc2V0X2NhcGFjaXR5KGRpc2ssIGgtPmRydltkcnZfaW5kZXhdLm5yX2Jsb2Nrcyk7CisJc2V0X2NhcGFjaXR5KGRpc2ssIGgtPmRydltkcnZfaW5kZXhdLT5ucl9ibG9ja3MpOwogCiAJLyogSWYgaXQncyBub3QgZGlzayAwIChkcnZfaW5kZXggIT0gMCkKIAkgKiBvciBpZiBpdCB3YXMgZGlzayAwLCBidXQgdGhlcmUgd2FzIHByZXZpb3VzbHkKQEAgLTE3ODAsOCArMTk1NCwxNSBAQAogCSAqIChyYWlkX2xldmUgPT0gLTEpIHRoZW4gd2Ugd2FudCB0byB1cGRhdGUgdGhlCiAJICogbG9naWNhbCBkcml2ZSdzIGluZm9ybWF0aW9uLgogCSAqLwotCWlmIChkcnZfaW5kZXggfHwgZmlyc3RfdGltZSkKLQkJY2Npc3NfYWRkX2Rpc2soaCwgZGlzaywgZHJ2X2luZGV4KTsKKwlpZiAoZHJ2X2luZGV4IHx8IGZpcnN0X3RpbWUpIHsKKwkJaWYgKGNjaXNzX2FkZF9kaXNrKGgsIGRpc2ssIGRydl9pbmRleCkgIT0gMCkgeworCQkJY2Npc3NfZnJlZV9nZW5kaXNrKGgsIGRydl9pbmRleCk7CisJCQljY2lzc19mcmVlX2RyaXZlX2luZm8oaCwgZHJ2X2luZGV4KTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiVkIGNvdWxkIG5vdCB1cGRhdGUgIgorCQkJCSJkaXNrICVkXG4iLCBoLT5jdGxyLCBkcnZfaW5kZXgpOworCQkJLS1oLT5udW1fbHVuczsKKwkJfQorCX0KIAogZnJlZXJldDoKIAlrZnJlZShpbnFfYnVmZik7CkBAIC0xNzkzLDI4ICsxOTc0LDcwIEBACiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIHRoZSBmaXJzdCBpbmRleCBvZiB0aGUgY29udHJvbGxlcnMgZHJpdmUgYXJyYXkKLSAqIHRoYXQgaGFzIGEgLTEgZm9yIHRoZSByYWlkX2xldmVsIGFuZCB3aWxsIHJldHVybiB0aGF0IGluZGV4LiAgVGhpcyBpcwotICogd2hlcmUgbmV3IGRyaXZlcyB3aWxsIGJlIGFkZGVkLiAgSWYgdGhlIGluZGV4IHRvIGJlIHJldHVybmVkIGlzIGdyZWF0ZXIKLSAqIHRoYW4gdGhlIGhpZ2hlc3RfbHVuIGluZGV4IGZvciB0aGUgY29udHJvbGxlciB0aGVuIGhpZ2hlc3RfbHVuIGlzIHNldAotICogdG8gdGhpcyBuZXcgaW5kZXguICBJZiB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlIGluZGV4ZXMgdGhlbiAtMSBpcyByZXR1cm5lZC4KLSAqICJjb250cm9sbGVyX25vZGUiIGlzIHVzZWQgdG8ga25vdyBpZiB0aGlzIGlzIGEgcmVhbCBsb2dpY2FsIGRyaXZlLCBvciBqdXN0Ci0gKiB0aGUgY29udHJvbGxlciBub2RlLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoaXMgY291bnRzIHRvd2FyZHMgaGlnaGVzdF9sdW4uCisgKiB0aGF0IGhhcyBhIG51bGwgZHJ2IHBvaW50ZXIgYW5kIGFsbG9jYXRlIHRoZSBkcml2ZSBpbmZvIHN0cnVjdCBhbmQKKyAqIHdpbGwgcmV0dXJuIHRoYXQgaW5kZXggICBUaGlzIGlzIHdoZXJlIG5ldyBkcml2ZXMgd2lsbCBiZSBhZGRlZC4KKyAqIElmIHRoZSBpbmRleCB0byBiZSByZXR1cm5lZCBpcyBncmVhdGVyIHRoYW4gdGhlIGhpZ2hlc3RfbHVuIGluZGV4IGZvcgorICogdGhlIGNvbnRyb2xsZXIgdGhlbiBoaWdoZXN0X2x1biBpcyBzZXQgKiB0byB0aGlzIG5ldyBpbmRleC4KKyAqIElmIHRoZXJlIGFyZSBubyBhdmFpbGFibGUgaW5kZXhlcyBvciBpZiB0aGEgYWxsb2NhdGlvbiBmYWlscywgdGhlbiAtMQorICogaXMgcmV0dXJuZWQuICAqICJjb250cm9sbGVyX25vZGUiIGlzIHVzZWQgdG8ga25vdyBpZiB0aGlzIGlzIGEgcmVhbAorICogbG9naWNhbCBkcml2ZSwgb3IganVzdCB0aGUgY29udHJvbGxlciBub2RlLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoaXMKKyAqIGNvdW50cyB0b3dhcmRzIGhpZ2hlc3RfbHVuLgogICovCi1zdGF0aWMgaW50IGNjaXNzX2ZpbmRfZnJlZV9kcml2ZV9pbmRleChpbnQgY3RsciwgaW50IGNvbnRyb2xsZXJfbm9kZSkKK3N0YXRpYyBpbnQgY2Npc3NfYWxsb2NfZHJpdmVfaW5mbyhjdGxyX2luZm9fdCAqaCwgaW50IGNvbnRyb2xsZXJfbm9kZSkKIHsKIAlpbnQgaTsKKwlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2OwogCisJLyogU2VhcmNoIGZvciBhbiBlbXB0eSBzbG90IGZvciBvdXIgZHJpdmUgaW5mbyAqLwogCWZvciAoaSA9IDA7IGkgPCBDSVNTX01BWF9MVU47IGkrKykgewotCQlpZiAoaGJhW2N0bHJdLT5kcnZbaV0ucmFpZF9sZXZlbCA9PSAtMSkgewotCQkJaWYgKGkgPiBoYmFbY3Rscl0tPmhpZ2hlc3RfbHVuKQotCQkJCWlmICghY29udHJvbGxlcl9ub2RlKQotCQkJCQloYmFbY3Rscl0tPmhpZ2hlc3RfbHVuID0gaTsKKworCQkvKiBpZiBub3QgY3hkMCBjYXNlLCBhbmQgaXQncyBvY2N1cGllZCwgc2tpcCBpdC4gKi8KKwkJaWYgKGgtPmRydltpXSAmJiBpICE9IDApCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogSWYgaXQncyBjeGQwIGNhc2UsIGFuZCBkcnYgaXMgYWxsb2MnZWQgYWxyZWFkeSwgYW5kIGEKKwkJICogZGlzayBpcyBjb25maWd1cmVkIHRoZXJlLCBza2lwIGl0LgorCQkgKi8KKwkJaWYgKGkgPT0gMCAmJiBoLT5kcnZbaV0gJiYgaC0+ZHJ2W2ldLT5yYWlkX2xldmVsICE9IC0xKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogV2UndmUgZm91bmQgYW4gZW1wdHkgc2xvdC4gIFVwZGF0ZSBoaWdoZXN0X2x1bgorCQkgKiBwcm92aWRlZCB0aGlzIGlzbid0IGp1c3QgdGhlIGZha2UgY3hkMCBjb250cm9sbGVyIG5vZGUuCisJCSAqLworCQlpZiAoaSA+IGgtPmhpZ2hlc3RfbHVuICYmICFjb250cm9sbGVyX25vZGUpCisJCQloLT5oaWdoZXN0X2x1biA9IGk7CisKKwkJLyogSWYgYWRkaW5nIGEgcmVhbCBkaXNrIGF0IGN4ZDAsIGFuZCBpdCdzIGFscmVhZHkgYWxsb2MnZWQgKi8KKwkJaWYgKGkgPT0gMCAmJiBoLT5kcnZbaV0gIT0gTlVMTCkKIAkJCXJldHVybiBpOwotCQl9CisKKwkJLyoKKwkJICogRm91bmQgYW4gZW1wdHkgc2xvdCwgbm90IGFscmVhZHkgYWxsb2MnZWQuICBBbGxvY2F0ZSBpdC4KKwkJICogTWFyayBpdCB3aXRoIHJhaWRfbGV2ZWwgPT0gLTEsIHNvIHdlIGtub3cgaXQncyBuZXcgbGF0ZXIgb24uCisJCSAqLworCQlkcnYgPSBremFsbG9jKHNpemVvZigqZHJ2KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZHJ2KQorCQkJcmV0dXJuIC0xOworCQlkcnYtPnJhaWRfbGV2ZWwgPSAtMTsgLyogc28gd2Uga25vdyBpdCdzIG5ldyAqLworCQloLT5kcnZbaV0gPSBkcnY7CisJCXJldHVybiBpOwogCX0KIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyB2b2lkIGNjaXNzX2ZyZWVfZHJpdmVfaW5mbyhjdGxyX2luZm9fdCAqaCwgaW50IGRydl9pbmRleCkKK3sKKwlrZnJlZShoLT5kcnZbZHJ2X2luZGV4XSk7CisJaC0+ZHJ2W2Rydl9pbmRleF0gPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBjY2lzc19mcmVlX2dlbmRpc2soY3Rscl9pbmZvX3QgKmgsIGludCBkcnZfaW5kZXgpCit7CisJcHV0X2Rpc2soaC0+Z2VuZGlza1tkcnZfaW5kZXhdKTsKKwloLT5nZW5kaXNrW2Rydl9pbmRleF0gPSBOVUxMOworfQorCiAvKiBjY2lzc19hZGRfZ2VuZGlzayBmaW5kcyBhIGZyZWUgaGJhW10tPmRydiBzdHJ1Y3R1cmUKICAqIGFuZCBhbGxvY2F0ZXMgYSBnZW5kaXNrIGlmIG5lZWRlZCwgYW5kIHNldHMgdGhlIGx1bmlkCiAgKiBpbiB0aGUgZHJ2aW5mbyBzdHJ1Y3R1cmUuICAgSXQgcmV0dXJucyB0aGUgaW5kZXggaW50bwpAQCAtMTgyNCwxMyArMjA0NywxNSBAQAogICogYSBtZWFucyB0byB0YWxrIHRvIHRoZSBjb250cm9sbGVyIGluIGNhc2Ugbm8gbG9naWNhbAogICogZHJpdmVzIGhhdmUgeWV0IGJlZW4gY29uZmlndXJlZC4KICAqLwotc3RhdGljIGludCBjY2lzc19hZGRfZ2VuZGlzayhjdGxyX2luZm9fdCAqaCwgX191MzIgbHVuaWQsIGludCBjb250cm9sbGVyX25vZGUpCitzdGF0aWMgaW50IGNjaXNzX2FkZF9nZW5kaXNrKGN0bHJfaW5mb190ICpoLCB1bnNpZ25lZCBjaGFyIGx1bmlkW10sCisJaW50IGNvbnRyb2xsZXJfbm9kZSkKIHsKIAlpbnQgZHJ2X2luZGV4OwogCi0JZHJ2X2luZGV4ID0gY2Npc3NfZmluZF9mcmVlX2RyaXZlX2luZGV4KGgtPmN0bHIsIGNvbnRyb2xsZXJfbm9kZSk7CisJZHJ2X2luZGV4ID0gY2Npc3NfYWxsb2NfZHJpdmVfaW5mbyhoLCBjb250cm9sbGVyX25vZGUpOwogCWlmIChkcnZfaW5kZXggPT0gLTEpCiAJCXJldHVybiAtMTsKKwogCS8qQ2hlY2sgaWYgdGhlIGdlbmRpc2sgbmVlZHMgdG8gYmUgYWxsb2NhdGVkICovCiAJaWYgKCFoLT5nZW5kaXNrW2Rydl9pbmRleF0pIHsKIAkJaC0+Z2VuZGlza1tkcnZfaW5kZXhdID0KQEAgLTE4MzksMjMgKzIwNjQsMjQgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiY2Npc3MlZDogY291bGQgbm90ICIKIAkJCQkiYWxsb2NhdGUgYSBuZXcgZGlzayAlZFxuIiwKIAkJCQloLT5jdGxyLCBkcnZfaW5kZXgpOwotCQkJcmV0dXJuIC0xOworCQkJZ290byBlcnJfZnJlZV9kcml2ZV9pbmZvOwogCQl9CiAJfQotCWgtPmRydltkcnZfaW5kZXhdLkx1bklEID0gbHVuaWQ7Ci0JaWYgKGNjaXNzX2NyZWF0ZV9sZF9zeXNmc19lbnRyeShoLCAmaC0+ZHJ2W2Rydl9pbmRleF0sIGRydl9pbmRleCkpCisJbWVtY3B5KGgtPmRydltkcnZfaW5kZXhdLT5MdW5JRCwgbHVuaWQsCisJCXNpemVvZihoLT5kcnZbZHJ2X2luZGV4XS0+THVuSUQpKTsKKwlpZiAoY2Npc3NfY3JlYXRlX2xkX3N5c2ZzX2VudHJ5KGgsIGRydl9pbmRleCkpCiAJCWdvdG8gZXJyX2ZyZWVfZGlzazsKLQogCS8qIERvbid0IG5lZWQgdG8gbWFyayB0aGlzIGJ1c3kgYmVjYXVzZSBub2JvZHkgKi8KIAkvKiBlbHNlIGtub3dzIGFib3V0IHRoaXMgZGlzayB5ZXQgdG8gY29udGVuZCAqLwogCS8qIGZvciBhY2Nlc3MgdG8gaXQuICovCi0JaC0+ZHJ2W2Rydl9pbmRleF0uYnVzeV9jb25maWd1cmluZyA9IDA7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPmJ1c3lfY29uZmlndXJpbmcgPSAwOwogCXdtYigpOwogCXJldHVybiBkcnZfaW5kZXg7CiAKIGVycl9mcmVlX2Rpc2s6Ci0JcHV0X2Rpc2soaC0+Z2VuZGlza1tkcnZfaW5kZXhdKTsKLQloLT5nZW5kaXNrW2Rydl9pbmRleF0gPSBOVUxMOworCWNjaXNzX2ZyZWVfZ2VuZGlzayhoLCBkcnZfaW5kZXgpOworZXJyX2ZyZWVfZHJpdmVfaW5mbzoKKwljY2lzc19mcmVlX2RyaXZlX2luZm8oaCwgZHJ2X2luZGV4KTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTE4NzIsMjEgKzIwOTgsMjUgQEAKIAlpZiAoaC0+Z2VuZGlza1swXSAhPSBOVUxMKSAvKiBhbHJlYWR5IGRpZCB0aGlzPyBUaGVuIGJhaWwuICovCiAJCXJldHVybjsKIAotCWRydl9pbmRleCA9IGNjaXNzX2FkZF9nZW5kaXNrKGgsIDAsIDEpOwotCWlmIChkcnZfaW5kZXggPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogY291bGQgbm90ICIKLQkJCSJhZGQgZGlzayAwLlxuIiwgaC0+Y3Rscik7Ci0JCXJldHVybjsKLQl9Ci0JaC0+ZHJ2W2Rydl9pbmRleF0uYmxvY2tfc2l6ZSA9IDUxMjsKLQloLT5kcnZbZHJ2X2luZGV4XS5ucl9ibG9ja3MgPSAwOwotCWgtPmRydltkcnZfaW5kZXhdLmhlYWRzID0gMDsKLQloLT5kcnZbZHJ2X2luZGV4XS5zZWN0b3JzID0gMDsKLQloLT5kcnZbZHJ2X2luZGV4XS5jeWxpbmRlcnMgPSAwOwotCWgtPmRydltkcnZfaW5kZXhdLnJhaWRfbGV2ZWwgPSAtMTsKLQltZW1zZXQoaC0+ZHJ2W2Rydl9pbmRleF0uc2VyaWFsX25vLCAwLCAxNik7CisJZHJ2X2luZGV4ID0gY2Npc3NfYWRkX2dlbmRpc2soaCwgQ1RMUl9MVU5JRCwgMSk7CisJaWYgKGRydl9pbmRleCA9PSAtMSkKKwkJZ290byBlcnJvcjsKKwloLT5kcnZbZHJ2X2luZGV4XS0+YmxvY2tfc2l6ZSA9IDUxMjsKKwloLT5kcnZbZHJ2X2luZGV4XS0+bnJfYmxvY2tzID0gMDsKKwloLT5kcnZbZHJ2X2luZGV4XS0+aGVhZHMgPSAwOworCWgtPmRydltkcnZfaW5kZXhdLT5zZWN0b3JzID0gMDsKKwloLT5kcnZbZHJ2X2luZGV4XS0+Y3lsaW5kZXJzID0gMDsKKwloLT5kcnZbZHJ2X2luZGV4XS0+cmFpZF9sZXZlbCA9IC0xOworCW1lbXNldChoLT5kcnZbZHJ2X2luZGV4XS0+c2VyaWFsX25vLCAwLCAxNik7CiAJZGlzayA9IGgtPmdlbmRpc2tbZHJ2X2luZGV4XTsKLQljY2lzc19hZGRfZGlzayhoLCBkaXNrLCBkcnZfaW5kZXgpOworCWlmIChjY2lzc19hZGRfZGlzayhoLCBkaXNrLCBkcnZfaW5kZXgpID09IDApCisJCXJldHVybjsKKwljY2lzc19mcmVlX2dlbmRpc2soaCwgZHJ2X2luZGV4KTsKKwljY2lzc19mcmVlX2RyaXZlX2luZm8oaCwgZHJ2X2luZGV4KTsKK2Vycm9yOgorCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGNvdWxkIG5vdCAiCisJCSJhZGQgZGlzayAwLlxuIiwgaC0+Y3Rscik7CisJcmV0dXJuOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWRkIGFuZCByZW1vdmUgbG9naWNhbCBkcml2ZXMgZnJvbSB0aGUgTG9naWNhbApAQCAtMTg5Nyw3ICsyMTI3LDggQEAKICAqIElOUFVUCiAgKiBoCQk9IFRoZSBjb250cm9sbGVyIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbnMgb24KICAqLwotc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgaW50IGZpcnN0X3RpbWUpCitzdGF0aWMgaW50IHJlYnVpbGRfbHVuX3RhYmxlKGN0bHJfaW5mb190ICpoLCBpbnQgZmlyc3RfdGltZSwKKwlpbnQgdmlhX2lvY3RsKQogewogCWludCBjdGxyID0gaC0+Y3RscjsKIAlpbnQgbnVtX2x1bnM7CkBAIC0xOTA3LDcgKzIxMzgsNyBAQAogCWludCBpOwogCWludCBkcnZfZm91bmQ7CiAJaW50IGRydl9pbmRleCA9IDA7Ci0JX191MzIgbHVuaWQgPSAwOworCXVuc2lnbmVkIGNoYXIgbHVuaWRbOF0gPSBDVExSX0xVTklEOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCkBAIC0xOTYwLDEzICsyMTkxLDEzIEBACiAJCWRydl9mb3VuZCA9IDA7CiAKIAkJLyogc2tpcCBob2xlcyBpbiB0aGUgYXJyYXkgZnJvbSBhbHJlYWR5IGRlbGV0ZWQgZHJpdmVzICovCi0JCWlmIChoLT5kcnZbaV0ucmFpZF9sZXZlbCA9PSAtMSkKKwkJaWYgKGgtPmRydltpXSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKIAkJZm9yIChqID0gMDsgaiA8IG51bV9sdW5zOyBqKyspIHsKLQkJCW1lbWNweSgmbHVuaWQsICZsZF9idWZmLT5MVU5bal1bMF0sIDQpOwotCQkJbHVuaWQgPSBsZTMyX3RvX2NwdShsdW5pZCk7Ci0JCQlpZiAoaC0+ZHJ2W2ldLkx1bklEID09IGx1bmlkKSB7CisJCQltZW1jcHkobHVuaWQsICZsZF9idWZmLT5MVU5bal1bMF0sIHNpemVvZihsdW5pZCkpOworCQkJaWYgKG1lbWNtcChoLT5kcnZbaV0tPkx1bklELCBsdW5pZCwKKwkJCQlzaXplb2YobHVuaWQpKSA9PSAwKSB7CiAJCQkJZHJ2X2ZvdW5kID0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE5NzQsMTEgKzIyMDUsMTEgQEAKIAkJaWYgKCFkcnZfZm91bmQpIHsKIAkJCS8qIERlcmVnaXN0ZXIgaXQgZnJvbSB0aGUgT1MsIGl0J3MgZ29uZS4gKi8KIAkJCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKLQkJCWgtPmRydltpXS5idXN5X2NvbmZpZ3VyaW5nID0gMTsKKwkJCWgtPmRydltpXS0+YnVzeV9jb25maWd1cmluZyA9IDE7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKLQkJCXJldHVybl9jb2RlID0gZGVyZWdpc3Rlcl9kaXNrKGgsIGksIDEpOwotCQkJY2Npc3NfZGVzdHJveV9sZF9zeXNmc19lbnRyeSgmaC0+ZHJ2W2ldKTsKLQkJCWgtPmRydltpXS5idXN5X2NvbmZpZ3VyaW5nID0gMDsKKwkJCXJldHVybl9jb2RlID0gZGVyZWdpc3Rlcl9kaXNrKGgsIGksIDEsIHZpYV9pb2N0bCk7CisJCQlpZiAoaC0+ZHJ2W2ldICE9IE5VTEwpCisJCQkJaC0+ZHJ2W2ldLT5idXN5X2NvbmZpZ3VyaW5nID0gMDsKIAkJfQogCX0KIApAQCAtMTk5MiwxNyArMjIyMywxNiBAQAogCiAJCWRydl9mb3VuZCA9IDA7CiAKLQkJbWVtY3B5KCZsdW5pZCwgJmxkX2J1ZmYtPkxVTltpXVswXSwgNCk7Ci0JCWx1bmlkID0gbGUzMl90b19jcHUobHVuaWQpOwotCisJCW1lbWNweShsdW5pZCwgJmxkX2J1ZmYtPkxVTltpXVswXSwgc2l6ZW9mKGx1bmlkKSk7CiAJCS8qIEZpbmQgaWYgdGhlIExVTiBpcyBhbHJlYWR5IGluIHRoZSBkcml2ZSBhcnJheQogCQkgKiBvZiB0aGUgZHJpdmVyLiAgSWYgc28gdGhlbiB1cGRhdGUgaXRzIGluZm8KIAkJICogaWYgbm90IGluIHVzZS4gIElmIGl0IGRvZXMgbm90IGV4aXN0IHRoZW4gZmluZAogCQkgKiB0aGUgZmlyc3QgZnJlZSBpbmRleCBhbmQgYWRkIGl0LgogCQkgKi8KIAkJZm9yIChqID0gMDsgaiA8PSBoLT5oaWdoZXN0X2x1bjsgaisrKSB7Ci0JCQlpZiAoaC0+ZHJ2W2pdLnJhaWRfbGV2ZWwgIT0gLTEgJiYKLQkJCQloLT5kcnZbal0uTHVuSUQgPT0gbHVuaWQpIHsKKwkJCWlmIChoLT5kcnZbal0gIT0gTlVMTCAmJgorCQkJCW1lbWNtcChoLT5kcnZbal0tPkx1bklELCBsdW5pZCwKKwkJCQkJc2l6ZW9mKGgtPmRydltqXS0+THVuSUQpKSA9PSAwKSB7CiAJCQkJZHJ2X2luZGV4ID0gajsKIAkJCQlkcnZfZm91bmQgPSAxOwogCQkJCWJyZWFrOwpAQCAtMjAxNSw3ICsyMjQ1LDggQEAKIAkJCWlmIChkcnZfaW5kZXggPT0gLTEpCiAJCQkJZ290byBmcmVlcmV0OwogCQl9Ci0JCWNjaXNzX3VwZGF0ZV9kcml2ZV9pbmZvKGN0bHIsIGRydl9pbmRleCwgZmlyc3RfdGltZSk7CisJCWNjaXNzX3VwZGF0ZV9kcml2ZV9pbmZvKGN0bHIsIGRydl9pbmRleCwgZmlyc3RfdGltZSwKKwkJCXZpYV9pb2N0bCk7CiAJfQkJLyogZW5kIGZvciAqLwogCiBmcmVlcmV0OgpAQCAtMjAzMiw2ICsyMjYzLDI1IEBACiAJZ290byBmcmVlcmV0OwogfQogCitzdGF0aWMgdm9pZCBjY2lzc19jbGVhcl9kcml2ZV9pbmZvKGRyaXZlX2luZm9fc3RydWN0ICpkcml2ZV9pbmZvKQoreworCS8qIHplcm8gb3V0IHRoZSBkaXNrIHNpemUgaW5mbyAqLworCWRyaXZlX2luZm8tPm5yX2Jsb2NrcyA9IDA7CisJZHJpdmVfaW5mby0+YmxvY2tfc2l6ZSA9IDA7CisJZHJpdmVfaW5mby0+aGVhZHMgPSAwOworCWRyaXZlX2luZm8tPnNlY3RvcnMgPSAwOworCWRyaXZlX2luZm8tPmN5bGluZGVycyA9IDA7CisJZHJpdmVfaW5mby0+cmFpZF9sZXZlbCA9IC0xOworCW1lbXNldChkcml2ZV9pbmZvLT5zZXJpYWxfbm8sIDAsIHNpemVvZihkcml2ZV9pbmZvLT5zZXJpYWxfbm8pKTsKKwltZW1zZXQoZHJpdmVfaW5mby0+bW9kZWwsIDAsIHNpemVvZihkcml2ZV9pbmZvLT5tb2RlbCkpOworCW1lbXNldChkcml2ZV9pbmZvLT5yZXYsIDAsIHNpemVvZihkcml2ZV9pbmZvLT5yZXYpKTsKKwltZW1zZXQoZHJpdmVfaW5mby0+dmVuZG9yLCAwLCBzaXplb2YoZHJpdmVfaW5mby0+dmVuZG9yKSk7CisJLyoKKwkgKiBkb24ndCBjbGVhciB0aGUgTFVOSUQgdGhvdWdoLCB3ZSBuZWVkIHRvIHJlbWVtYmVyIHdoaWNoCisJICogb25lIHRoaXMgb25lIGlzLgorCSAqLworfQorCiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGVyZWdpc3RlciB0aGUgZGlzayBhbmQgaXQncyBxdWV1ZSBmcm9tIHRoZQogICoga2VybmVsLiAgSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udHJvbGxlciBsb2NrIGhlbGQgYW5kIHRoZQogICogZHJ2IHN0cnVjdHVyZXMgYnVzeV9jb25maWd1cmluZyBmbGFnIHNldC4gIEl0J3MgcGFyYW1ldGVycyBhcmU6CkBAIC0yMDQ2LDQzICsyMjk2LDQ4IEBACiAgKiAgICAgICAgICAgICB0aGUgZGlzayBpbiBwcmVwYXJhdGlvbiBmb3IgcmUtYWRkaW5nIGl0LiAgSW4gdGhpcyBjYXNlCiAgKiAgICAgICAgICAgICB0aGUgaGlnaGVzdF9sdW4gc2hvdWxkIGJlIGxlZnQgdW5jaGFuZ2VkIGFuZCB0aGUgTHVuSUQKICAqICAgICAgICAgICAgIHNob3VsZCBub3QgYmUgY2xlYXJlZC4KKyAqIHZpYV9pb2N0bAorICogICAgVGhpcyBpbmRpY2F0ZXMgd2hldGhlciB3ZSd2ZSByZWFjaGVkIHRoaXMgcGF0aCB2aWEgaW9jdGwuCisgKiAgICBUaGlzIGFmZmVjdHMgdGhlIG1heGltdW0gdXNhZ2UgY291bnQgYWxsb3dlZCBmb3IgYzBkMCB0byBiZSBtZXNzZWQgd2l0aC4KKyAqICAgIElmIHRoaXMgcGF0aCBpcyByZWFjaGVkIHZpYSBpb2N0bCgpLCB0aGVuIHRoZSBtYXhfdXNhZ2VfY291bnQgd2lsbAorICogICAgYmUgMSwgYXMgdGhlIHByb2Nlc3MgY2FsbGluZyBpb2N0bCgpIGhhcyBnb3QgdG8gaGF2ZSB0aGUgZGV2aWNlIG9wZW4uCisgKiAgICBJZiB3ZSBnZXQgaGVyZSB2aWEgc3lzZnMsIHRoZW4gdGhlIG1heCB1c2FnZSBjb3VudCB3aWxsIGJlIHplcm8uCiAqLwogc3RhdGljIGludCBkZXJlZ2lzdGVyX2Rpc2soY3Rscl9pbmZvX3QgKmgsIGludCBkcnZfaW5kZXgsCi0JCQkgICBpbnQgY2xlYXJfYWxsKQorCQkJICAgaW50IGNsZWFyX2FsbCwgaW50IHZpYV9pb2N0bCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKIAlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2OworCWludCByZWNhbGN1bGF0ZV9oaWdoZXN0X2x1bjsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWRydiA9ICZoLT5kcnZbZHJ2X2luZGV4XTsKKwlkcnYgPSBoLT5kcnZbZHJ2X2luZGV4XTsKIAlkaXNrID0gaC0+Z2VuZGlza1tkcnZfaW5kZXhdOwogCiAJLyogbWFrZSBzdXJlIGxvZ2ljYWwgdm9sdW1lIGlzIE5PVCBpcyB1c2UgKi8KIAlpZiAoY2xlYXJfYWxsIHx8IChoLT5nZW5kaXNrWzBdID09IGRpc2spKSB7Ci0JCWlmIChkcnYtPnVzYWdlX2NvdW50ID4gMSkKKwkJaWYgKGRydi0+dXNhZ2VfY291bnQgPiB2aWFfaW9jdGwpCiAJCQlyZXR1cm4gLUVCVVNZOwogCX0gZWxzZSBpZiAoZHJ2LT51c2FnZV9jb3VudCA+IDApCiAJCXJldHVybiAtRUJVU1k7CiAKKwlyZWNhbGN1bGF0ZV9oaWdoZXN0X2x1biA9IChkcnYgPT0gaC0+ZHJ2W2gtPmhpZ2hlc3RfbHVuXSk7CisKIAkvKiBpbnZhbGlkYXRlIHRoZSBkZXZpY2VzIGFuZCBkZXJlZ2lzdGVyIHRoZSBkaXNrLiAgSWYgaXQgaXMgZGlzawogCSAqIHplcm8gZG8gbm90IGRlcmVnaXN0ZXIgaXQgYnV0IGp1c3QgemVybyBvdXQgaXQncyB2YWx1ZXMuICBUaGlzCiAJICogYWxsb3dzIHVzIHRvIGRlbGV0ZSBkaXNrIHplcm8gYnV0IGtlZXAgdGhlIGNvbnRyb2xsZXIgcmVnaXN0ZXJlZC4KIAkgKi8KIAlpZiAoaC0+Z2VuZGlza1swXSAhPSBkaXNrKSB7CiAJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay0+cXVldWU7Ci0JCWlmIChkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX1VQKQorCQlpZiAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkgeworCQkJY2Npc3NfZGVzdHJveV9sZF9zeXNmc19lbnRyeShoLCBkcnZfaW5kZXgsIDApOwogCQkJZGVsX2dlbmRpc2soZGlzayk7Ci0JCWlmIChxKSB7Ci0JCQlibGtfY2xlYW51cF9xdWV1ZShxKTsKLQkJCS8qIFNldCBkcnYtPnF1ZXVlIHRvIE5VTEwgc28gdGhhdCB3ZSBkbyBub3QgdHJ5Ci0JCQkgKiB0byBjYWxsIGJsa19zdGFydF9xdWV1ZSBvbiB0aGlzIHF1ZXVlIGluIHRoZQotCQkJICogaW50ZXJydXB0IGhhbmRsZXIKLQkJCSAqLwotCQkJZHJ2LT5xdWV1ZSA9IE5VTEw7CiAJCX0KKwkJaWYgKHEpCisJCQlibGtfY2xlYW51cF9xdWV1ZShxKTsKIAkJLyogSWYgY2xlYXJfYWxsIGlzIHNldCB0aGVuIHdlIGFyZSBkZWxldGluZyB0aGUgbG9naWNhbAogCQkgKiBkcml2ZSwgbm90IGp1c3QgcmVmcmVzaGluZyBpdHMgaW5mby4gIEZvciBkcml2ZXMKIAkJICogb3RoZXIgdGhhbiBkaXNrIDAgd2Ugd2lsbCBjYWxsIHB1dF9kaXNrLiAgV2UgZG8gbm90CkBAIC0yMTA1LDM0ICsyMzYwLDIwIEBACiAJCX0KIAl9IGVsc2UgewogCQlzZXRfY2FwYWNpdHkoZGlzaywgMCk7CisJCWNjaXNzX2NsZWFyX2RyaXZlX2luZm8oZHJ2KTsKIAl9CiAKIAktLWgtPm51bV9sdW5zOwotCS8qIHplcm8gb3V0IHRoZSBkaXNrIHNpemUgaW5mbyAqLwotCWRydi0+bnJfYmxvY2tzID0gMDsKLQlkcnYtPmJsb2NrX3NpemUgPSAwOwotCWRydi0+aGVhZHMgPSAwOwotCWRydi0+c2VjdG9ycyA9IDA7Ci0JZHJ2LT5jeWxpbmRlcnMgPSAwOwotCWRydi0+cmFpZF9sZXZlbCA9IC0xOwkvKiBUaGlzIGNhbiBiZSB1c2VkIGFzIGEgZmxhZyB2YXJpYWJsZSB0bwotCQkJCSAqIGluZGljYXRlIHRoYXQgdGhpcyBlbGVtZW50IG9mIHRoZSBkcml2ZQotCQkJCSAqIGFycmF5IGlzIGZyZWUuCi0JCQkJICovCiAKLQlpZiAoY2xlYXJfYWxsKSB7Ci0JCS8qIGNoZWNrIHRvIHNlZSBpZiBpdCB3YXMgdGhlIGxhc3QgZGlzayAqLwotCQlpZiAoZHJ2ID09IGgtPmRydiArIGgtPmhpZ2hlc3RfbHVuKSB7Ci0JCQkvKiBpZiBzbywgZmluZCB0aGUgbmV3IGhpZ2h0ZXN0IGx1biAqLwotCQkJaW50IGksIG5ld2hpZ2hlc3QgPSAtMTsKLQkJCWZvciAoaSA9IDA7IGkgPD0gaC0+aGlnaGVzdF9sdW47IGkrKykgewotCQkJCS8qIGlmIHRoZSBkaXNrIGhhcyBzaXplID4gMCwgaXQgaXMgYXZhaWxhYmxlICovCi0JCQkJaWYgKGgtPmRydltpXS5oZWFkcykKLQkJCQkJbmV3aGlnaGVzdCA9IGk7Ci0JCQl9Ci0JCQloLT5oaWdoZXN0X2x1biA9IG5ld2hpZ2hlc3Q7CisJLyogaWYgaXQgd2FzIHRoZSBsYXN0IGRpc2ssIGZpbmQgdGhlIG5ldyBoaWdodGVzdCBsdW4gKi8KKwlpZiAoY2xlYXJfYWxsICYmIHJlY2FsY3VsYXRlX2hpZ2hlc3RfbHVuKSB7CisJCWludCBpLCBuZXdoaWdoZXN0ID0gLTE7CisJCWZvciAoaSA9IDA7IGkgPD0gaC0+aGlnaGVzdF9sdW47IGkrKykgeworCQkJLyogaWYgdGhlIGRpc2sgaGFzIHNpemUgPiAwLCBpdCBpcyBhdmFpbGFibGUgKi8KKwkJCWlmIChoLT5kcnZbaV0gJiYgaC0+ZHJ2W2ldLT5oZWFkcykKKwkJCQluZXdoaWdoZXN0ID0gaTsKIAkJfQotCi0JCWRydi0+THVuSUQgPSAwOworCQloLT5oaWdoZXN0X2x1biA9IG5ld2hpZ2hlc3Q7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjQ3OSw4ICsyNzIwLDYgQEAKIAl9IGVsc2UgewkJLyogR2V0IGdlb21ldHJ5IGZhaWxlZCAqLwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogcmVhZGluZyBnZW9tZXRyeSBmYWlsZWRcbiIpOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICIgICAgICBoZWFkcz0lZCwgc2VjdG9ycz0lZCwgY3lsaW5kZXJzPSVkXG5cbiIsCi0JICAgICAgIGRydi0+aGVhZHMsIGRydi0+c2VjdG9ycywgZHJ2LT5jeWxpbmRlcnMpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjUxNCw5ICsyNzUzLDYgQEAKIAkJKnRvdGFsX3NpemUgPSAwOwogCQkqYmxvY2tfc2l6ZSA9IEJMT0NLX1NJWkU7CiAJfQotCWlmICgqdG90YWxfc2l6ZSAhPSAwKQotCQlwcmludGsoS0VSTl9JTkZPICIgICAgICBibG9ja3M9ICVsbHUgYmxvY2tfc2l6ZT0gJWRcbiIsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpKnRvdGFsX3NpemUrMSwgKmJsb2NrX3NpemUpOwogCWtmcmVlKGJ1Zik7CiB9CiAKQEAgLTI1NjgsNyArMjgwNCw4IEBACiAJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiA9IE5VTEw7CiAKIAlmb3IgKGxvZ3ZvbCA9IDA7IGxvZ3ZvbCA8IENJU1NfTUFYX0xVTjsgbG9ndm9sKyspIHsKLQkJaWYgKGgtPmRydltsb2d2b2xdLkx1bklEID09IGRydi0+THVuSUQpIHsKKwkJaWYgKG1lbWNtcChoLT5kcnZbbG9ndm9sXS0+THVuSUQsIGRydi0+THVuSUQsCisJCQlzaXplb2YoZHJ2LT5MdW5JRCkpID09IDApIHsKIAkJCUZPVU5EID0gMTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMDUzLDggKzMyOTAsNyBAQAogCS8qIFRoZSBmaXJzdCAyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBjb250cm9sbGVyIGVycm9yIHJlcG9ydGluZy4gKi8KIAljLT5IZWFkZXIuVGFnLmxvd2VyID0gKGMtPmNtZGluZGV4IDw8IDMpOwogCWMtPkhlYWRlci5UYWcubG93ZXIgfD0gMHgwNDsJLyogZmxhZyBmb3IgZGlyZWN0IGxvb2t1cC4gKi8KLQljLT5IZWFkZXIuTFVOLkxvZ0Rldi5Wb2xJZCA9IGRydi0+THVuSUQ7Ci0JYy0+SGVhZGVyLkxVTi5Mb2dEZXYuTW9kZSA9IDE7CisJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLCBkcnYtPkx1bklELCBzaXplb2YoZHJ2LT5MdW5JRCkpOwogCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTA7CS8vIDEyIGJ5dGUgY29tbWFuZHMgbm90IGluIEZXIHlldDsKIAljLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IFRZUEVfQ01EOwkvLyBJdCBpcyBhIGNvbW1hbmQuCiAJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwpAQCAtMzIzMiwyMCArMzQ2OCwxMjEgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKKy8qKgorICogYWRkX3RvX3NjYW5fbGlzdCgpIC0gYWRkIGNvbnRyb2xsZXIgdG8gcmVzY2FuIHF1ZXVlCisgKiBAaDoJCSAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIuCisgKgorICogQWRkcyB0aGUgY29udHJvbGxlciB0byB0aGUgcmVzY2FuIHF1ZXVlIGlmIG5vdCBhbHJlYWR5IG9uIHRoZSBxdWV1ZS4KKyAqCisgKiByZXR1cm5zIDEgaWYgYWRkZWQgdG8gdGhlIHF1ZXVlLCAwIGlmIHNraXBwZWQgKGNvdWxkIGJlIG9uIHRoZQorICogcXVldWUgYWxyZWFkeSwgb3IgdGhlIGNvbnRyb2xsZXIgY291bGQgYmUgaW5pdGlhbGl6aW5nIG9yIHNodXR0aW5nCisgKiBkb3duKS4KKyAqKi8KK3N0YXRpYyBpbnQgYWRkX3RvX3NjYW5fbGlzdChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXN0cnVjdCBjdGxyX2luZm8gKnRlc3RfaDsKKwlpbnQgZm91bmQgPSAwOworCWludCByZXQgPSAwOworCisJaWYgKGgtPmJ1c3lfaW5pdGlhbGl6aW5nKQorCQlyZXR1cm4gMDsKKworCWlmICghbXV0ZXhfdHJ5bG9jaygmaC0+YnVzeV9zaHV0dGluZ19kb3duKSkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZzY2FuX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlc3RfaCwgJnNjYW5fcSwgc2Nhbl9saXN0KSB7CisJCWlmICh0ZXN0X2ggPT0gaCkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFmb3VuZCAmJiAhaC0+YnVzeV9zY2FubmluZykgeworCQlJTklUX0NPTVBMRVRJT04oaC0+c2Nhbl93YWl0KTsKKwkJbGlzdF9hZGRfdGFpbCgmaC0+c2Nhbl9saXN0LCAmc2Nhbl9xKTsKKwkJcmV0ID0gMTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKKwltdXRleF91bmxvY2soJmgtPmJ1c3lfc2h1dHRpbmdfZG93bik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHJlbW92ZV9mcm9tX3NjYW5fbGlzdCgpIC0gcmVtb3ZlIGNvbnRyb2xsZXIgZnJvbSByZXNjYW4gcXVldWUKKyAqIEBoOgkJCSAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIuCisgKgorICogUmVtb3ZlcyB0aGUgY29udHJvbGxlciBmcm9tIHRoZSByZXNjYW4gcXVldWUgaWYgcHJlc2VudC4gQmxvY2tzIGlmCisgKiB0aGUgY29udHJvbGxlciBpcyBjdXJyZW50bHkgY29uZHVjdGluZyBhIHJlc2Nhbi4KKyAqKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9mcm9tX3NjYW5fbGlzdChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXN0cnVjdCBjdGxyX2luZm8gKnRlc3RfaCwgKnRtcF9oOworCWludCBzY2FubmluZyA9IDA7CisKKwltdXRleF9sb2NrKCZzY2FuX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGVzdF9oLCB0bXBfaCwgJnNjYW5fcSwgc2Nhbl9saXN0KSB7CisJCWlmICh0ZXN0X2ggPT0gaCkgeworCQkJbGlzdF9kZWwoJmgtPnNjYW5fbGlzdCk7CisJCQljb21wbGV0ZV9hbGwoJmgtPnNjYW5fd2FpdCk7CisJCQltdXRleF91bmxvY2soJnNjYW5fbXV0ZXgpOworCQkJcmV0dXJuOworCQl9CisJfQorCWlmICgmaC0+YnVzeV9zY2FubmluZykKKwkJc2Nhbm5pbmcgPSAwOworCW11dGV4X3VubG9jaygmc2Nhbl9tdXRleCk7CisKKwlpZiAoc2Nhbm5pbmcpCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmgtPnNjYW5fd2FpdCk7Cit9CisKKy8qKgorICogc2Nhbl90aHJlYWQoKSAtIGtlcm5lbCB0aHJlYWQgdXNlZCB0byByZXNjYW4gY29udHJvbGxlcnMKKyAqIEBkYXRhOgkgSWdub3JlZC4KKyAqCisgKiBBIGtlcm5lbCB0aHJlYWQgdXNlZCBzY2FuIGZvciBkcml2ZSB0b3BvbG9neSBjaGFuZ2VzIG9uCisgKiBjb250cm9sbGVycy4gVGhlIHRocmVhZCBwcm9jZXNzZXMgb25seSBvbmUgY29udHJvbGxlciBhdCBhIHRpbWUKKyAqIHVzaW5nIGEgcXVldWUuICBDb250cm9sbGVycyBhcmUgYWRkZWQgdG8gdGhlIHF1ZXVlIHVzaW5nCisgKiBhZGRfdG9fc2Nhbl9saXN0KCkgYW5kIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUgZWl0aGVyIGFmdGVyIGRvbmUKKyAqIHByb2Nlc3Npbmcgb3IgdXNpbmcgcmVtb3ZlX2Zyb21fc2Nhbl9saXN0KCkuCisgKgorICogcmV0dXJucyAwLgorICoqLwogc3RhdGljIGludCBzY2FuX3RocmVhZCh2b2lkICpkYXRhKQogewotCWN0bHJfaW5mb190ICpoID0gZGF0YTsKLQlpbnQgcmM7Ci0JREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7Ci0JaC0+cmVzY2FuX3dhaXQgPSAmd2FpdDsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCi0JZm9yICg7OykgewotCQlyYyA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmd2FpdCk7CisJd2hpbGUgKDEpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGUoKTsKIAkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOwotCQlpZiAoIXJjKQotCQkJcmVidWlsZF9sdW5fdGFibGUoaCwgMCk7CisKKwkJd2hpbGUgKDEpIHsKKwkJCW11dGV4X2xvY2soJnNjYW5fbXV0ZXgpOworCQkJaWYgKGxpc3RfZW1wdHkoJnNjYW5fcSkpIHsKKwkJCQltdXRleF91bmxvY2soJnNjYW5fbXV0ZXgpOworCQkJCWJyZWFrOworCQkJfQorCisJCQloID0gbGlzdF9lbnRyeShzY2FuX3EubmV4dCwKKwkJCQkgICAgICAgc3RydWN0IGN0bHJfaW5mbywKKwkJCQkgICAgICAgc2Nhbl9saXN0KTsKKwkJCWxpc3RfZGVsKCZoLT5zY2FuX2xpc3QpOworCQkJaC0+YnVzeV9zY2FubmluZyA9IDE7CisJCQltdXRleF91bmxvY2soJnNjYW5fbXV0ZXgpOworCisJCQlpZiAoaCkgeworCQkJCXJlYnVpbGRfbHVuX3RhYmxlKGgsIDAsIDApOworCQkJCWNvbXBsZXRlX2FsbCgmaC0+c2Nhbl93YWl0KTsKKwkJCQltdXRleF9sb2NrKCZzY2FuX211dGV4KTsKKwkJCQloLT5idXN5X3NjYW5uaW5nID0gMDsKKwkJCQltdXRleF91bmxvY2soJnNjYW5fbXV0ZXgpOworCQkJfQorCQl9CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNjgsOCArMzYwNSw4IEBACiAJY2FzZSBSRVBPUlRfTFVOU19DSEFOR0VEOgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiByZXBvcnQgTFVOIGRhdGEgIgogCQkJImNoYW5nZWRcbiIsIGgtPmN0bHIpOwotCQlpZiAoaC0+cmVzY2FuX3dhaXQpCi0JCQljb21wbGV0ZShoLT5yZXNjYW5fd2FpdCk7CisJCWFkZF90b19zY2FuX2xpc3QoaCk7CisJCXdha2VfdXBfcHJvY2VzcyhjY2lzc19zY2FuX3RocmVhZCk7CiAJCXJldHVybiAxOwogCWJyZWFrOwogCWNhc2UgUE9XRVJfT1JfUkVTRVQ6CkBAIC0zNDIyLDcgKzM3NTksMjcgQEAKIAlfX3U2NCBjZmdfb2Zmc2V0OwogCV9fdTMyIGNmZ19iYXNlX2FkZHI7CiAJX191NjQgY2ZnX2Jhc2VfYWRkcl9pbmRleDsKLQlpbnQgaSwgZXJyOworCWludCBpLCBwcm9kX2luZGV4LCBlcnI7CisKKwlzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwlzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKKwlib2FyZF9pZCA9ICgoKF9fdTMyKSAoc3Vic3lzdGVtX2RldmljZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8CisJCSAgICBzdWJzeXN0ZW1fdmVuZG9yX2lkKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2R1Y3RzKTsgaSsrKSB7CisJCS8qIFN0YW5kIGFzaWRlIGZvciBocHNhIGRyaXZlciBvbiByZXF1ZXN0ICovCisJCWlmIChjY2lzc19hbGxvd19ocHNhICYmIHByb2R1Y3RzW2ldLmJvYXJkX2lkID09IEhQU0FfQk9VTkRBUlkpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKGJvYXJkX2lkID09IHByb2R1Y3RzW2ldLmJvYXJkX2lkKQorCQkJYnJlYWs7CisJfQorCXByb2RfaW5kZXggPSBpOworCWlmIChwcm9kX2luZGV4ID09IEFSUkFZX1NJWkUocHJvZHVjdHMpKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkidW5yZWNvZ25pemVkIGJvYXJkIElEOiAweCUwOGx4LCBpZ25vcmluZy5cbiIsCisJCQkodW5zaWduZWQgbG9uZykgYm9hcmRfaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAkvKiBjaGVjayB0byBzZWUgaWYgY29udHJvbGxlciBoYXMgYmVlbiBkaXNhYmxlZCAqLwogCS8qIEJFRk9SRSB0cnlpbmcgdG8gZW5hYmxlIGl0ICovCkBAIC0zNDQ2LDExICszODAzLDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKLQlzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKLQlib2FyZF9pZCA9ICgoKF9fdTMyKSAoc3Vic3lzdGVtX2RldmljZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8Ci0JCSAgICBzdWJzeXN0ZW1fdmVuZG9yX2lkKTsKLQogI2lmZGVmIENDSVNTX0RFQlVHCiAJcHJpbnRrKCJjb21tYW5kID0gJXhcbiIsIGNvbW1hbmQpOwogCXByaW50aygiaXJxID0gJXhcbiIsIHBkZXYtPmlycSk7CkBAIC0zNDg5LDcgKzM4NDEsNyBAQAogCQlpZiAoc2NyYXRjaHBhZCA9PSBDQ0lTU19GSVJNV0FSRV9SRUFEWSkKIAkJCWJyZWFrOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KEhaIC8gMTApOwkvKiB3YWl0IDEwMG1zICovCisJCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxMDApKTsJLyogd2FpdCAxMDBtcyAqLwogCX0KIAlpZiAoc2NyYXRjaHBhZCAhPSBDQ0lTU19GSVJNV0FSRV9SRUFEWSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogQm9hcmQgbm90IHJlYWR5LiAgVGltZWQgb3V0LlxuIik7CkBAIC0zNTM2LDE0ICszODg4LDkgQEAKIAkgKiBsZWF2ZSBhIGxpdHRsZSByb29tIGZvciBpb2N0bCBjYWxscy4KIAkgKi8KIAljLT5tYXhfY29tbWFuZHMgPSByZWFkbCgmKGMtPmNmZ3RhYmxlLT5DbWRzT3V0TWF4KSk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvZHVjdHMpOyBpKyspIHsKLQkJaWYgKGJvYXJkX2lkID09IHByb2R1Y3RzW2ldLmJvYXJkX2lkKSB7Ci0JCQljLT5wcm9kdWN0X25hbWUgPSBwcm9kdWN0c1tpXS5wcm9kdWN0X25hbWU7Ci0JCQljLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW2ldLmFjY2Vzcyk7Ci0JCQljLT5ucl9jbWRzID0gYy0+bWF4X2NvbW1hbmRzIC0gNDsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCWMtPnByb2R1Y3RfbmFtZSA9IHByb2R1Y3RzW3Byb2RfaW5kZXhdLnByb2R1Y3RfbmFtZTsKKwljLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW3Byb2RfaW5kZXhdLmFjY2Vzcyk7CisJYy0+bnJfY21kcyA9IGMtPm1heF9jb21tYW5kcyAtIDQ7CiAJaWYgKChyZWFkYigmYy0+Y2ZndGFibGUtPlNpZ25hdHVyZVswXSkgIT0gJ0MnKSB8fAogCSAgICAocmVhZGIoJmMtPmNmZ3RhYmxlLT5TaWduYXR1cmVbMV0pICE9ICdJJykgfHwKIAkgICAgKHJlYWRiKCZjLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzJdKSAhPSAnUycpIHx8CkBAIC0zNTUyLDI3ICszODk5LDYgQEAKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KLQkvKiBXZSBkaWRuJ3QgZmluZCB0aGUgY29udHJvbGxlciBpbiBvdXIgbGlzdC4gV2Uga25vdyB0aGUKLQkgKiBzaWduYXR1cmUgaXMgdmFsaWQuIElmIGl0J3MgYW4gSFAgZGV2aWNlIGxldCdzIHRyeSB0bwotCSAqIGJpbmQgdG8gdGhlIGRldmljZSBhbmQgZmlyZSBpdCB1cC4gT3RoZXJ3aXNlIHdlIGJhaWwuCi0JICovCi0JaWYgKGkgPT0gQVJSQVlfU0laRShwcm9kdWN0cykpIHsKLQkJaWYgKHN1YnN5c3RlbV92ZW5kb3JfaWQgPT0gUENJX1ZFTkRPUl9JRF9IUCkgewotCQkJYy0+cHJvZHVjdF9uYW1lID0gcHJvZHVjdHNbaS0xXS5wcm9kdWN0X25hbWU7Ci0JCQljLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW2ktMV0uYWNjZXNzKTsKLQkJCWMtPm5yX2NtZHMgPSBjLT5tYXhfY29tbWFuZHMgLSA0OwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IFRoaXMgaXMgYW4gdW5rbm93biAiCi0JCQkJIlNtYXJ0IEFycmF5IGNvbnRyb2xsZXIuXG4iCi0JCQkJImNjaXNzOiBQbGVhc2UgdXBkYXRlIHRvIHRoZSBsYXRlc3QgZHJpdmVyICIKLQkJCQkiYXZhaWxhYmxlIGZyb20gd3d3LmhwLmNvbS5cbiIpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IFNvcnJ5LCBJIGRvbid0IGtub3cgaG93IgotCQkJCSIgdG8gYWNjZXNzIHRoZSBTbWFydCBBcnJheSBjb250cm9sbGVyICUwOGx4XG4iCi0JCQkJCSwgKHVuc2lnbmVkIGxvbmcpYm9hcmRfaWQpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKLQkJfQotCX0KICNpZmRlZiBDT05GSUdfWDg2CiAJewogCQkvKiBOZWVkIHRvIGVuYWJsZSBwcmVmZXRjaCBpbiB0aGUgU0NTSSBjb3JlIGZvciA2NDAwIGluIHg4NiAqLwpAQCAtMzYxNSw3ICszOTQxLDcgQEAKIAkJCWJyZWFrOwogCQkvKiBkZWxheSBhbmQgdHJ5IGFnYWluICovCiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQoMTApOworCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMSkpOwogCX0KIAogI2lmZGVmIENDSVNTX0RFQlVHCkBAIC0zNjY5LDE1ICszOTk1LDE2IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2hiYShpbnQgaSkKK3N0YXRpYyB2b2lkIGZyZWVfaGJhKGludCBuKQogewotCWN0bHJfaW5mb190ICpwID0gaGJhW2ldOwotCWludCBuOworCWN0bHJfaW5mb190ICpoID0gaGJhW25dOworCWludCBpOwogCi0JaGJhW2ldID0gTlVMTDsKLQlmb3IgKG4gPSAwOyBuIDwgQ0lTU19NQVhfTFVOOyBuKyspCi0JCXB1dF9kaXNrKHAtPmdlbmRpc2tbbl0pOwotCWtmcmVlKHApOworCWhiYVtuXSA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGgtPmhpZ2hlc3RfbHVuICsgMTsgaSsrKQorCQlpZiAoaC0+Z2VuZGlza1tpXSAhPSBOVUxMKQorCQkJcHV0X2Rpc2soaC0+Z2VuZGlza1tpXSk7CisJa2ZyZWUoaCk7CiB9CiAKIC8qIFNlbmQgYSBtZXNzYWdlIENEQiB0byB0aGUgZmlybXdhcmUuICovCkBAIC0zOTE4LDE0ICs0MjQ1LDE3IEBACiAJaGJhW2ldLT5idXN5X2luaXRpYWxpemluZyA9IDE7CiAJSU5JVF9ITElTVF9IRUFEKCZoYmFbaV0tPmNtcFEpOwogCUlOSVRfSExJU1RfSEVBRCgmaGJhW2ldLT5yZXFRKTsKKwltdXRleF9pbml0KCZoYmFbaV0tPmJ1c3lfc2h1dHRpbmdfZG93bik7CiAKIAlpZiAoY2Npc3NfcGNpX2luaXQoaGJhW2ldLCBwZGV2KSAhPSAwKQotCQlnb3RvIGNsZWFuMDsKKwkJZ290byBjbGVhbl9ub19yZWxlYXNlX3JlZ2lvbnM7CiAKIAlzcHJpbnRmKGhiYVtpXS0+ZGV2bmFtZSwgImNjaXNzJWQiLCBpKTsKIAloYmFbaV0tPmN0bHIgPSBpOwogCWhiYVtpXS0+cGRldiA9IHBkZXY7CiAKKwlpbml0X2NvbXBsZXRpb24oJmhiYVtpXS0+c2Nhbl93YWl0KTsKKwogCWlmIChjY2lzc19jcmVhdGVfaGJhX3N5c2ZzX2VudHJ5KGhiYVtpXSkpCiAJCWdvdG8gY2xlYW4wOwogCkBAIC00MDAxLDggKzQzMzEsNyBAQAogCWhiYVtpXS0+bnVtX2x1bnMgPSAwOwogCWhiYVtpXS0+aGlnaGVzdF9sdW4gPSAtMTsKIAlmb3IgKGogPSAwOyBqIDwgQ0lTU19NQVhfTFVOOyBqKyspIHsKLQkJaGJhW2ldLT5kcnZbal0ucmFpZF9sZXZlbCA9IC0xOwotCQloYmFbaV0tPmRydltqXS5xdWV1ZSA9IE5VTEw7CisJCWhiYVtpXS0+ZHJ2W2pdID0gTlVMTDsKIAkJaGJhW2ldLT5nZW5kaXNrW2pdID0gTlVMTDsKIAl9CiAKQEAgLTQwMzUsMTQgKzQzNjQsOCBAQAogCiAJaGJhW2ldLT5jY2lzc19tYXhfc2VjdG9ycyA9IDIwNDg7CiAKKwlyZWJ1aWxkX2x1bl90YWJsZShoYmFbaV0sIDEsIDApOwogCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAwOwotCi0JcmVidWlsZF9sdW5fdGFibGUoaGJhW2ldLCAxKTsKLQloYmFbaV0tPmNjaXNzX3NjYW5fdGhyZWFkID0ga3RocmVhZF9ydW4oc2Nhbl90aHJlYWQsIGhiYVtpXSwKLQkJCQkiY2Npc3Nfc2NhbiUwMmQiLCBpKTsKLQlpZiAoSVNfRVJSKGhiYVtpXS0+Y2Npc3Nfc2Nhbl90aHJlYWQpKQotCQlyZXR1cm4gUFRSX0VSUihoYmFbaV0tPmNjaXNzX3NjYW5fdGhyZWFkKTsKLQogCXJldHVybiAxOwogCiBjbGVhbjQ6CkBAIC00MDYyLDE4ICs0Mzg1LDE0IEBACiBjbGVhbjE6CiAJY2Npc3NfZGVzdHJveV9oYmFfc3lzZnNfZW50cnkoaGJhW2ldKTsKIGNsZWFuMDoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworY2xlYW5fbm9fcmVsZWFzZV9yZWdpb25zOgogCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAwOwotCS8qIGNsZWFudXAgYW55IHF1ZXVlcyB0aGF0IG1heSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgKi8KLQlmb3IgKGo9MDsgaiA8PSBoYmFbaV0tPmhpZ2hlc3RfbHVuOyBqKyspewotCQlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gJihoYmFbaV0tPmRydltqXSk7Ci0JCWlmIChkcnYtPnF1ZXVlKQotCQkJYmxrX2NsZWFudXBfcXVldWUoZHJ2LT5xdWV1ZSk7Ci0JfQorCiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgb21pdCBwY2lfZGlzYWJsZV9kZXZpY2UoKTogaXQgZG9lcyBzb21ldGhpbmcgbmFzdHkgdG8KIAkgKiBTbWFydCBBcnJheSBjb250cm9sbGVycyB0aGF0IHBjaV9lbmFibGVfZGV2aWNlIGRvZXMgbm90IHVuZG8KIAkgKi8KLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlmcmVlX2hiYShpKTsKIAlyZXR1cm4gLTE7CkBAIC00MTI1LDggKzQ0NDQsOSBAQAogCQlyZXR1cm47CiAJfQogCi0Ja3RocmVhZF9zdG9wKGhiYVtpXS0+Y2Npc3Nfc2Nhbl90aHJlYWQpOworCW11dGV4X2xvY2soJmhiYVtpXS0+YnVzeV9zaHV0dGluZ19kb3duKTsKIAorCXJlbW92ZV9mcm9tX3NjYW5fbGlzdChoYmFbaV0pOwogCXJlbW92ZV9wcm9jX2VudHJ5KGhiYVtpXS0+ZGV2bmFtZSwgcHJvY19jY2lzcyk7CiAJdW5yZWdpc3Rlcl9ibGtkZXYoaGJhW2ldLT5tYWpvciwgaGJhW2ldLT5kZXZuYW1lKTsKIApAQCAtNDEzNiw4ICs0NDU2LDEwIEBACiAJCWlmIChkaXNrKSB7CiAJCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stPnF1ZXVlOwogCi0JCQlpZiAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkKKwkJCWlmIChkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX1VQKSB7CisJCQkJY2Npc3NfZGVzdHJveV9sZF9zeXNmc19lbnRyeShoYmFbaV0sIGosIDEpOwogCQkJCWRlbF9nZW5kaXNrKGRpc2spOworCQkJfQogCQkJaWYgKHEpCiAJCQkJYmxrX2NsZWFudXBfcXVldWUocSk7CiAJCX0KQEAgLTQxNzAsNiArNDQ5Miw3IEBACiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJY2Npc3NfZGVzdHJveV9oYmFfc3lzZnNfZW50cnkoaGJhW2ldKTsKKwltdXRleF91bmxvY2soJmhiYVtpXS0+YnVzeV9zaHV0dGluZ19kb3duKTsKIAlmcmVlX2hiYShpKTsKIH0KIApAQCAtNDIwMiwxNSArNDUyNSwyNSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwkvKiBTdGFydCB0aGUgc2NhbiB0aHJlYWQgKi8KKwljY2lzc19zY2FuX3RocmVhZCA9IGt0aHJlYWRfcnVuKHNjYW5fdGhyZWFkLCBOVUxMLCAiY2Npc3Nfc2NhbiIpOworCWlmIChJU19FUlIoY2Npc3Nfc2Nhbl90aHJlYWQpKSB7CisJCWVyciA9IFBUUl9FUlIoY2Npc3Nfc2Nhbl90aHJlYWQpOworCQlnb3RvIGVycl9idXNfdW5yZWdpc3RlcjsKKwl9CisKIAkvKiBSZWdpc3RlciBmb3Igb3VyIFBDSSBkZXZpY2VzICovCiAJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY2Npc3NfcGNpX2RyaXZlcik7CiAJaWYgKGVycikKLQkJZ290byBlcnJfYnVzX3JlZ2lzdGVyOworCQlnb3RvIGVycl90aHJlYWRfc3RvcDsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiAKLWVycl9idXNfcmVnaXN0ZXI6CitlcnJfdGhyZWFkX3N0b3A6CisJa3RocmVhZF9zdG9wKGNjaXNzX3NjYW5fdGhyZWFkKTsKK2Vycl9idXNfdW5yZWdpc3RlcjoKIAlidXNfdW5yZWdpc3RlcigmY2Npc3NfYnVzX3R5cGUpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDIyNyw2ICs0NTYwLDcgQEAKIAkJCWNjaXNzX3JlbW92ZV9vbmUoaGJhW2ldLT5wZGV2KTsKIAkJfQogCX0KKwlrdGhyZWFkX3N0b3AoY2Npc3Nfc2Nhbl90aHJlYWQpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvY2Npc3MiLCBOVUxMKTsKIAlidXNfdW5yZWdpc3RlcigmY2Npc3NfYnVzX3R5cGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5oIGIvZHJpdmVycy9ibG9jay9jY2lzcy5oCmluZGV4IDA2YTVkYjIuLjMxNTI0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIENDSVNTX0gKIAogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgImNjaXNzX2NtZC5oIgogCkBAIC0yOSw3ICszMCw3IEBACiB9OwogdHlwZWRlZiBzdHJ1Y3QgX2RyaXZlX2luZm9fc3RydWN0CiB7Ci0gCV9fdTMyICAgTHVuSUQ7CQorCXVuc2lnbmVkIGNoYXIgTHVuSURbOF07CiAJaW50IAl1c2FnZV9jb3VudDsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CiAJc2VjdG9yX3QgbnJfYmxvY2tzOwpAQCAtNTEsNiArNTIsNyBAQAogCWNoYXIgdmVuZG9yW1ZFTkRPUl9MRU4gKyAxXTsgLyogU0NTSSB2ZW5kb3Igc3RyaW5nICovCiAJY2hhciBtb2RlbFtNT0RFTF9MRU4gKyAxXTsgICAvKiBTQ1NJIG1vZGVsIHN0cmluZyAqLwogCWNoYXIgcmV2W1JFVl9MRU4gKyAxXTsgICAgICAgLyogU0NTSSByZXZpc2lvbiBzdHJpbmcgKi8KKwljaGFyIGRldmljZV9pbml0aWFsaXplZDsgICAgIC8qIGluZGljYXRlcyB3aGV0aGVyIGRldiBpcyBpbml0aWFsaXplZCAqLwogfSBkcml2ZV9pbmZvX3N0cnVjdDsKIAogc3RydWN0IGN0bHJfaW5mbyAKQEAgLTg2LDcgKzg4LDcgQEAKIAlCWVRFCWNjaXNzX3JlYWRfY2FwYWNpdHk7CiAKIAkvLyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGxvZ2ljYWwgdm9sdW1lCi0JZHJpdmVfaW5mb19zdHJ1Y3QgZHJ2W0NJU1NfTUFYX0xVTl07CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydltDSVNTX01BWF9MVU5dOwogCiAJc3RydWN0IGFjY2Vzc19tZXRob2QgYWNjZXNzOwogCkBAIC0xMDgsNiArMTEwLDggQEAKIAlpbnQJCQlucl9mcmVlczsgCiAJaW50CQkJYnVzeV9jb25maWd1cmluZzsKIAlpbnQJCQlidXN5X2luaXRpYWxpemluZzsKKwlpbnQJCQlidXN5X3NjYW5uaW5nOworCXN0cnVjdCBtdXRleAkJYnVzeV9zaHV0dGluZ19kb3duOwogCiAJLyogVGhpcyBlbGVtZW50IGhvbGRzIHRoZSB6ZXJvIGJhc2VkIHF1ZXVlIG51bWJlciBvZiB0aGUgbGFzdAogCSAqIHF1ZXVlIHRvIGJlIHN0YXJ0ZWQuICBJdCBpcyB1c2VkIGZvciBmYWlybmVzcy4KQEAgLTEyMiw4ICsxMjYsOCBAQAogCS8qIGFuZCBzYXZlZCBmb3IgbGF0ZXIgcHJvY2Vzc2luZyAqLwogI2VuZGlmCiAJdW5zaWduZWQgY2hhciBhbGl2ZTsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqcmVzY2FuX3dhaXQ7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpjY2lzc19zY2FuX3RocmVhZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNjYW5fbGlzdDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBzY2FuX3dhaXQ7CiAJc3RydWN0IGRldmljZSBkZXY7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKaW5kZXggYjgyZDQzOC4uNjQyMjY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtMTc3LDcgKzE3OCw2IEBACiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHZvaWQgaWRhX3Byb2Npbml0KGludCBpKTsKLXN0YXRpYyBpbnQgaWRhX3Byb2NfZ2V0X2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwogI2Vsc2UKIHN0YXRpYyB2b2lkIGlkYV9wcm9jaW5pdChpbnQgaSkge30KICNlbmRpZgpAQCAtMjA2LDYgKzIwNiw3IEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19hcnJheTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkYV9wcm9jX2ZvcHM7CiAKIC8qCiAgKiBHZXQgdXMgYSBmaWxlIGluIC9wcm9jL2FycmF5IHRoYXQgc2F5cyBzb21ldGhpbmcgYWJvdXQgZWFjaCBjb250cm9sbGVyLgpAQCAtMjE4LDE5ICsyMTksMTYgQEAKIAkJaWYgKCFwcm9jX2FycmF5KSByZXR1cm47CiAJfQogCi0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShoYmFbaV0tPmRldm5hbWUsIDAsIHByb2NfYXJyYXksCi0JCQkgICAgICAgaWRhX3Byb2NfZ2V0X2luZm8sIGhiYVtpXSk7CisJcHJvY19jcmVhdGVfZGF0YShoYmFbaV0tPmRldm5hbWUsIDAsIHByb2NfYXJyYXksICZpZGFfcHJvY19mb3BzLCBoYmFbaV0pOwogfQogCiAvKgogICogUmVwb3J0IGluZm9ybWF0aW9uIGFib3V0IHRoaXMgY29udHJvbGxlci4KICAqLwotc3RhdGljIGludCBpZGFfcHJvY19nZXRfaW5mbyhjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaWRhX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jb2ZmX3QgcG9zID0gMDsKLQlvZmZfdCBsZW4gPSAwOwotCWludCBzaXplLCBpLCBjdGxyOwotCWN0bHJfaW5mb190ICpoID0gKGN0bHJfaW5mb190KilkYXRhOworCWludCBpLCBjdGxyOworCWN0bHJfaW5mb190ICpoID0gKGN0bHJfaW5mb190KiltLT5wcml2YXRlOwogCWRydl9pbmZvX3QgKmRydjsKICNpZmRlZiBDUFFfUFJPQ19QUklOVF9RVUVVRVMKIAljbWRsaXN0X3QgKmM7CkBAIC0yMzgsNyArMjM2LDcgQEAKICNlbmRpZgogCiAJY3RsciA9IGgtPmN0bHI7Ci0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyLCAiJXM6ICBDb21wYXEgJXMgQ29udHJvbGxlclxuIgorCXNlcV9wcmludGYobSwgIiVzOiAgQ29tcGFxICVzIENvbnRyb2xsZXJcbiIKIAkJIiAgICAgICBCb2FyZCBJRDogMHglMDhseFxuIgogCQkiICAgICAgIEZpcm13YXJlIFJldmlzaW9uOiAlYyVjJWMlY1xuIgogCQkiICAgICAgIENvbnRyb2xsZXIgU2lnOiAweCUwOGx4XG4iCkBAIC0yNTgsNTUgKzI1Niw1NCBAQAogCQloLT5sb2dfZHJpdmVzLCBoLT5waHlzX2RyaXZlcywKIAkJaC0+UWRlcHRoLCBoLT5tYXhRc2luY2Vpbml0KTsKIAotCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKLQkKLQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiTG9naWNhbCBEcml2ZSBJbmZvOlxuIik7Ci0JcG9zICs9IHNpemU7IGxlbiArPSBzaXplOworCXNlcV9wdXRzKG0sICJMb2dpY2FsIERyaXZlIEluZm86XG4iKTsKIAogCWZvcihpPTA7IGk8aC0+bG9nX2RyaXZlczsgaSsrKSB7CiAJCWRydiA9ICZoLT5kcnZbaV07Ci0JCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJpZGEvYyVkZCVkOiBibGtzej0lZCBucl9ibGtzPSVkXG4iLAorCQlzZXFfcHJpbnRmKG0sICJpZGEvYyVkZCVkOiBibGtzej0lZCBucl9ibGtzPSVkXG4iLAogCQkJCWN0bHIsIGksIGRydi0+YmxrX3NpemUsIGRydi0+bnJfYmxrcyk7Ci0JCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKIAl9CiAKICNpZmRlZiBDUFFfUFJPQ19QUklOVF9RVUVVRVMKIAlzcGluX2xvY2tfaXJxc2F2ZShJREFfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOyAKLQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiXG5DdXJyZW50IFF1ZXVlczpcbiIpOwotCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKKwlzZXFfcHV0cyhtLCAiXG5DdXJyZW50IFF1ZXVlczpcbiIpOwogCiAJYyA9IGgtPnJlcVE7Ci0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgInJlcVEgPSAlcCIsIGMpOyBwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJc2VxX3ByaW50ZihtLCAicmVxUSA9ICVwIiwgYyk7CiAJaWYgKGMpIGM9Yy0+bmV4dDsKIAl3aGlsZShjICYmIGMgIT0gaC0+cmVxUSkgewotCQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiLT4lcCIsIGMpOwotCQlwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJCXNlcV9wcmludGYobSwgIi0+JXAiLCBjKTsKIAkJYz1jLT5uZXh0OwogCX0KIAogCWMgPSBoLT5jbXBROwotCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJcbmNtcFEgPSAlcCIsIGMpOyBwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJc2VxX3ByaW50ZihtLCAiXG5jbXBRID0gJXAiLCBjKTsKIAlpZiAoYykgYz1jLT5uZXh0OwogCXdoaWxlKGMgJiYgYyAhPSBoLT5jbXBRKSB7Ci0JCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICItPiVwIiwgYyk7Ci0JCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKKwkJc2VxX3ByaW50ZihtLCAiLT4lcCIsIGMpOwogCQljPWMtPm5leHQ7CiAJfQogCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIlxuIik7IHBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKElEQV9MT0NLKGgtPmN0bHIpLCBmbGFncyk7IAogI2VuZGlmCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIm5yX2FsbG9jcyA9ICVkXG5ucl9mcmVlcyA9ICVkXG4iLAorCXNlcV9wcmludGYobSwgIm5yX2FsbG9jcyA9ICVkXG5ucl9mcmVlcyA9ICVkXG4iLAogCQkJaC0+bnJfYWxsb2NzLCBoLT5ucl9mcmVlcyk7Ci0JcG9zICs9IHNpemU7IGxlbiArPSBzaXplOwotCi0JKmVvZiA9IDE7Ci0JKnN0YXJ0ID0gYnVmZmVyK29mZnNldDsKLQlsZW4gLT0gb2Zmc2V0OwotCWlmIChsZW4+bGVuZ3RoKQotCQlsZW4gPSBsZW5ndGg7Ci0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBpZGFfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpZGFfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWRhX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaWRhX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoZWlzYSwgaW50LCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggZWRkYTllYS4uYmQxMTJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTk0OSw3ICs5NDksNyBAQAogCWxvLT5sb19zdGF0ZSA9IExvX3VuYm91bmQ7CiAJLyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi8KIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQlpZiAobWF4X3BhcnQgPiAwKQorCWlmIChtYXhfcGFydCA+IDAgJiYgYmRldikKIAkJaW9jdGxfYnlfYmRldihiZGV2LCBCTEtSUlBBUlQsIDApOwogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggNDNmMTkzOC4uNTEwNDJmMGJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTMsNyArMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2Jsay5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKQEAgLTE4MywzNCArMTgyLDYgQEAKIAkJdmJsay0+dnEtPnZxX29wcy0+a2ljayh2YmxrLT52cSk7CiB9CiAKLS8qIHJldHVybiBBVEEgaWRlbnRpZnkgZGF0YQotICovCi1zdGF0aWMgaW50IHZpcnRibGtfaWRlbnRpZnkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHZvaWQgKmFyZ3ApCi17Ci0Jc3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSBkaXNrLT5wcml2YXRlX2RhdGE7Ci0Jdm9pZCAqb3BhcXVlOwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0Jb3BhcXVlID0ga21hbGxvYyhWSVJUSU9fQkxLX0lEX0JZVEVTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9wYXF1ZSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSB2aXJ0aW9fY29uZmlnX2J1Zih2YmxrLT52ZGV2LCBWSVJUSU9fQkxLX0ZfSURFTlRJRlksCi0JCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgaWRlbnRpZnkpLCBvcGFxdWUsCi0JCVZJUlRJT19CTEtfSURfQllURVMpOwotCi0JaWYgKGVycikKLQkJZ290byBvdXRfa2ZyZWU7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZ3AsIG9wYXF1ZSwgVklSVElPX0JMS19JRF9CWVRFUykpCi0JCWVyciA9IC1FRkFVTFQ7Ci0KLW91dF9rZnJlZToKLQlrZnJlZShvcGFxdWUpOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIHZpcnRibGtfcHJlcGFyZV9mbHVzaChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKIAlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfTElOVVhfQkxPQ0s7CkBAIC0yMjIsMTAgKzE5Myw2IEBACiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gZGlzay0+cHJpdmF0ZV9kYXRhOwotCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopZGF0YTsKLQotCWlmIChjbWQgPT0gSERJT19HRVRfSURFTlRJVFkpCi0JCXJldHVybiB2aXJ0YmxrX2lkZW50aWZ5KGRpc2ssIGFyZ3ApOwogCiAJLyoKIAkgKiBPbmx5IGFsbG93IHRoZSBnZW5lcmljIFNDU0kgaW9jdGxzIGlmIHRoZSBob3N0IGNhbiBzdXBwb3J0IGl0LgpAQCAtMjMzLDcgKzIwMCw4IEBACiAJaWYgKCF2aXJ0aW9faGFzX2ZlYXR1cmUodmJsay0+dmRldiwgVklSVElPX0JMS19GX1NDU0kpKQogCQlyZXR1cm4gLUVOT1RUWTsKIAotCXJldHVybiBzY3NpX2NtZF9pb2N0bChkaXNrLT5xdWV1ZSwgZGlzaywgbW9kZSwgY21kLCBhcmdwKTsKKwlyZXR1cm4gc2NzaV9jbWRfaW9jdGwoZGlzay0+cXVldWUsIGRpc2ssIG1vZGUsIGNtZCwKKwkJCSAgICAgICh2b2lkIF9fdXNlciAqKWRhdGEpOwogfQogCiAvKiBXZSBwcm92aWRlIGdldGdlbyBvbmx5IHRvIHBsZWFzZSBzb21lIG9sZCBib290bG9hZGVyL3BhcnRpdGlvbmluZyB0b29scyAqLwpAQCAtMzMyLDcgKzMwMCw2IEBACiAJfQogCiAJdmJsay0+ZGlzay0+cXVldWUtPnF1ZXVlZGF0YSA9IHZibGs7Ci0JcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19WSVJULCB2YmxrLT5kaXNrLT5xdWV1ZSk7CiAKIAlpZiAoaW5kZXggPCAyNikgewogCQlzcHJpbnRmKHZibGstPmRpc2stPmRpc2tfbmFtZSwgInZkJWMiLCAnYScgKyBpbmRleCAlIDI2KTsKQEAgLTQ0NSw3ICs0MTIsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0gewogCVZJUlRJT19CTEtfRl9CQVJSSUVSLCBWSVJUSU9fQkxLX0ZfU0VHX01BWCwgVklSVElPX0JMS19GX1NJWkVfTUFYLAogCVZJUlRJT19CTEtfRl9HRU9NRVRSWSwgVklSVElPX0JMS19GX1JPLCBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUsCi0JVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9JREVOVElGWSwgVklSVElPX0JMS19GX0ZMVVNICisJVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9GTFVTSAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCmluZGV4IDdiYTkxYWEuLjQ0YmM4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwpAQCAtNTkxLDYgKzU5MSw3IEBACiAJCXJldHVybiAwOwogCiAJY2FuY2VsX3dvcmtfc3luYygmZGF0YS0+d29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmZGF0YS0+d2FrZXIpOwogCiAJY2xlYXJfYml0KEJUVVNCX0lTT0NfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKIAljbGVhcl9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwpAQCAtNTk5LDExICs2MDAsMTMgQEAKIAlidHVzYl9zdG9wX3RyYWZmaWMoZGF0YSk7CiAJZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRhdGEtPmludGYpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gMDsKKwkJZ290byBmYWlsZWQ7CiAKIAlkYXRhLT5pbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKIAl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CiAKK2ZhaWxlZDoKKwl1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKCZkYXRhLT5kZWZlcnJlZCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggMDhhNmY1MC4uNmFhZDk5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTMyMyw3ICszMjMsNyBAQAogCiBjb25maWcgU1gKIAl0cmlzdGF0ZSAiU3BlY2lhbGl4IFNYIChhbmQgU0kpIGNhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRCAmJiAoUENJIHx8IEVJU0EgfHwgSVNBKQorCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIChQQ0kgfHwgRUlTQSB8fCBJU0EpICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBTWCBhbmQgU0kgbXVsdGlwb3J0IHNlcmlhbCBjYXJkcy4KIAkgIFBsZWFzZSByZWFkIHRoZSBmaWxlIDxmaWxlOkRvY3VtZW50YXRpb24vc2VyaWFsL3N4LnR4dD4gZm9yIGRldGFpbHMuCkBAIC0zMzQsNyArMzM0LDcgQEAKIAogY29uZmlnIFJJTwogCXRyaXN0YXRlICJTcGVjaWFsaXggUklPIHN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJECisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFNwZWNpYWxpeCBSSU8sIGEgc21hcnQgc2VyaWFsIGNhcmQgd2hpY2gKIAkgIGRyaXZlcyBhbiBvdXRib2FyZCBib3ggdGhhdCBjYW4gc3VwcG9ydCB1cCB0byAxMjggcG9ydHMuICBQcm9kdWN0CkBAIC0zOTUsNyArMzk1LDcgQEAKIAogY29uZmlnIEEyMjMyCiAJdHJpc3RhdGUgIkNvbW1vZG9yZSBBMjIzMiBzZXJpYWwgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBaT1JSTyAmJiBCUk9LRU5fT05fU01QCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgWk9SUk8gJiYgQlJPS0VOCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gc3VwcG9ydHMgdGhlIDIyMzIgNy1wb3J0IHNlcmlhbCBjYXJkIHNoaXBwZWQgd2l0aCB0aGUKIAkgIEFtaWdhIDIwMDAgYW5kIG90aGVyIFpvcnJvLWJ1cyBtYWNoaW5lcywgZGF0aW5nIGZyb20gMTk4OS4gIEF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FncC5oIGIvZHJpdmVycy9jaGFyL2FncC9hZ3AuaAppbmRleCBkNmYzNmMwLi44NzBmMTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKQEAgLTEzMSw3ICsxMzEsNyBAQAogc3RydWN0IGFncF9icmlkZ2VfZGF0YSB7CiAJY29uc3Qgc3RydWN0IGFncF92ZXJzaW9uICp2ZXJzaW9uOwogCWNvbnN0IHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciAqZHJpdmVyOwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOworCWNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOwogCXZvaWQgKnByZXZpb3VzX3NpemU7CiAJdm9pZCAqY3VycmVudF9zaXplOwogCXZvaWQgKmRldl9wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYwppbmRleCA1ZWE0ZGE4Li5kZDg0YWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAl7IDAsIDAsIDAgfSwgLyogZmlsbGVkIGluIGJ5IGFscGhhX2NvcmVfYWdwX3NldHVwICovCiB9OwogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWxwaGFfY29yZV9hZ3Bfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhbHBoYV9jb3JlX2FncF92bV9vcHMgPSB7CiAJLmZhdWx0ID0gYWxwaGFfY29yZV9hZ3Bfdm1fZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCA0MDY4NDY3Li4xMGUxZjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTExNjEsMTIgKzExNjEsNiBAQAogCiAJaW50ZWxfaTl4eF9zZXR1cF9mbHVzaCgpOwogCi0jaWZkZWYgVVNFX1BDSV9ETUFfQVBJIAotCWlmIChwY2lfc2V0X2RtYV9tYXNrKGludGVsX3ByaXZhdGUucGNpZGV2LCBETUFfQklUX01BU0soMzYpKSkKLQkJZGV2X2VycigmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKLQkJCSJzZXQgZ2Z4IGRldmljZSBkbWEgbWFzayAzNmJpdCBmYWlsZWQhXG4iKTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NTYsNiArMjQ1MCwxMSBAQAogCQkJCSZicmlkZ2UtPm1vZGUpOwogCX0KIAorCWlmIChicmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkgPT0gaW50ZWxfaTk2NV9tYXNrX21lbW9yeSkKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2soaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIERNQV9CSVRfTUFTSygzNikpKQorCQkJZGV2X2VycigmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKKwkJCQkic2V0IGdmeCBkZXZpY2UgZG1hIG1hc2sgMzZiaXQgZmFpbGVkIVxuIik7CisKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYnJpZGdlKTsKIAlyZXR1cm4gYWdwX2FkZF9icmlkZ2UoYnJpZGdlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKaW5kZXggNjBhYjc1MS4uMWMxMjkyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogCS5jb25maWd1cmUJCT0gcGFyaXNjX2FncF9jb25maWd1cmUsCiAJLmZldGNoX3NpemUJCT0gcGFyaXNjX2FncF9mZXRjaF9zaXplLAogCS50bGJfZmx1c2gJCT0gcGFyaXNjX2FncF90bGJmbHVzaCwKLQkubWFza19tZW1vcnkJCT0gcGFyaXNjX2FncF9wYWdlX21hc2tfbWVtb3J5LAorCS5tYXNrX21lbW9yeQkJPSBwYXJpc2NfYWdwX21hc2tfbWVtb3J5LAogCS5tYXNrcwkJCT0gcGFyaXNjX2FncF9tYXNrcywKIAkuYWdwX2VuYWJsZQkJPSBwYXJpc2NfYWdwX2VuYWJsZSwKIAkuY2FjaGVfZmx1c2gJCT0gZ2xvYmFsX2NhY2hlX2ZsdXNoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FwbS1lbXVsYXRpb24uYyBiL2RyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMKaW5kZXggYWFjYTQwMi4uNGY1NjhjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FwbS1lbXVsYXRpb24uYworKysgYi9kcml2ZXJzL2NoYXIvYXBtLWVtdWxhdGlvbi5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAlyZXR1cm4gYXMgPyAwIDogLUVOT01FTTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXBtX2Jpb3NfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFwbV9iaW9zX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IGFwbV9yZWFkLAogCS5wb2xsCQk9IGFwbV9wb2xsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMgYi9kcml2ZXJzL2NoYXIvYXBwbGljb20uYwppbmRleCA3M2EwNzY1Li5mZTJjYjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYXBwbGljb20uYworKysgYi9kcml2ZXJzL2NoYXIvYXBwbGljb20uYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2JmaW4tb3RwLmMgYi9kcml2ZXJzL2NoYXIvYmZpbi1vdHAuYwppbmRleCBlM2RkMjRiLi44MzZkNGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYmZpbi1vdHAuYworKysgYi9kcml2ZXJzL2NoYXIvYmZpbi1vdHAuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAjIGRlZmluZSBiZmluX290cF9pb2N0bCBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZpbl9vdHBfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmaW5fb3RwX2ZvcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLnVubG9ja2VkX2lvY3RsID0gYmZpbl9vdHBfaW9jdGwsCiAJLnJlYWQgICAgICAgICAgID0gYmZpbl9vdHBfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKaW5kZXggZGY1MDM4Yi4uNDI1NDQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKKysrIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKQEAgLTMzNTQsNyArMzM1NCw3IEBACiAJCQljb250aW51ZTsKIAkJfQogI2lmZGVmIE1PRFVMRQotCQlpZiAoaXNwYXJhbSAmJiBpcnFbaV0pCisJCWlmIChpc3BhcmFtICYmIGkgPCBOUl9DQVJEUyAmJiBpcnFbaV0pCiAJCQljeV9pc2FfaXJxID0gaXJxW2ldOwogCQllbHNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kdGxrLmMgYi9kcml2ZXJzL2NoYXIvZHRsay5jCmluZGV4IDUyZTA2NTguLjA0NWM5MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kdGxrLmMKKysrIGIvZHJpdmVycy9jaGFyL2R0bGsuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIGZvciAtRUJVU1kgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogZm9yIHJlcXVlc3RfcmVnaW9uICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIGxvb3BzX3Blcl9qaWZmeSAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4JLyogY3ljbGVfa2VybmVsX2xvY2soKSAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogZm9yIGluYl9wLCBvdXRiX3AsIGluYiwgb3V0YiwgZXRjLiAqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGZvciBnZXRfdXNlciwgZXRjLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggOWQ1ODllMy4uZGRlNTEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCmluZGV4IDllNGU1NjkuLmQ0MDBjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmVyaWNfc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VucnRjLmMgYi9kcml2ZXJzL2NoYXIvZ2VucnRjLmMKaW5kZXggYWFjMDk4NS4uMzFlN2M5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5ydGMuYwpAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBSVENfVkVSU0lPTgkiMS4wNyIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggMjVjZTE1Yi4uYTYzMmYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTY3OCw3ICs2NzgsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaHZjX3BvbGwpOwogCiAvKioKLSAqIGh2Y19yZXNpemUoKSAtIFVwZGF0ZSB0ZXJtaW5hbCB3aW5kb3cgc2l6ZSBpbmZvcm1hdGlvbi4KKyAqIF9faHZjX3Jlc2l6ZSgpIC0gVXBkYXRlIHRlcm1pbmFsIHdpbmRvdyBzaXplIGluZm9ybWF0aW9uLgogICogQGhwOgkJSFZDIGNvbnNvbGUgcG9pbnRlcgogICogQHdzOgkJVGVybWluYWwgd2luZG93IHNpemUgc3RydWN0dXJlCiAgKgpAQCAtNjg3LDEyICs2ODcsMTIgQEAKICAqCiAgKiBMb2NraW5nOglMb2NraW5nIGZyZWU7IHRoZSBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCBob2xkaW5nIGhwLT5sb2NrCiAgKi8KLXZvaWQgaHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKQordm9pZCBfX2h2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cykKIHsKIAlocC0+d3MgPSB3czsKIAlzY2hlZHVsZV93b3JrKCZocC0+dHR5X3Jlc2l6ZSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChodmNfcmVzaXplKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9faHZjX3Jlc2l6ZSk7CiAKIC8qCiAgKiBUaGlzIGt0aHJlYWQgaXMgZWl0aGVyIHBvbGxpbmcgb3IgaW50ZXJydXB0IGRyaXZlbi4gIFRoaXMgaXMgZGV0ZXJtaW5lZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmggYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAppbmRleCAzYzg1ZDc4Li4xMDk1MGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAorKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBIVkNfQ09OU09MRV9ICiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBtYXggbnVtYmVyIG9mIGNvbnNvbGUgYWRhcHRlcnMgdGhhdCBjYW4vd2lsbCBiZSBmb3VuZCBhcwpAQCAtODgsNyArODksMTYgQEAKIHZvaWQgaHZjX2tpY2sodm9pZCk7CiAKIC8qIFJlc2l6ZSBodmMgdHR5IHRlcm1pbmFsIHdpbmRvdyAqLwotZXh0ZXJuIHZvaWQgaHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKTsKK2V4dGVybiB2b2lkIF9faHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhwLT5sb2NrLCBmbGFncyk7CisJX19odmNfcmVzaXplKGhwLCB3cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHAtPmxvY2ssIGZsYWdzKTsKK30KIAogLyogZGVmYXVsdCBub3RpZmllciBmb3IgaXJxIGJhc2VkIG5vdGlmaWNhdGlvbiAqLwogZXh0ZXJuIGludCBub3RpZmllcl9hZGRfaXJxKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwppbmRleCAwZWNhYzdlLi5iOGE1ZDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwpAQCAtMjczLDcgKzI3Myw5IEBACiAJY2FzZSBNU0dfVFlQRV9XSU5TSVpFOgogCQlpZiAocmItPm1idWYtPmRhdGFsZW4gIT0gc2l6ZW9mKHN0cnVjdCB3aW5zaXplKSkKIAkJCWJyZWFrOwotCQlodmNfcmVzaXplKHByaXYtPmh2YywgKigoc3RydWN0IHdpbnNpemUgKikgcmItPm1idWYtPmRhdGEpKTsKKwkJLyogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBodmMgaXMgbG9ja2VkLCB3aGljaAorCQkgKiBpcyB0aGUgY2FzZSB3aGVuIGNhbGxlZCBmcm9tIGh2Y19pdWN2X2dldF9jaGFycygpICovCisJCV9faHZjX3Jlc2l6ZShwcml2LT5odmMsICooKHN0cnVjdCB3aW5zaXplICopIHJiLT5tYnVmLT5kYXRhKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNU0dfVFlQRV9FUlJPUjoJLyogaWdub3JlZCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCmluZGV4IGViYTk5OWYuLmE2ZWUzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y194ZW4uYwpAQCAtNTUsNyArNTUsNyBAQAogCW5vdGlmeV9yZW1vdGVfdmlhX2V2dGNobih4ZW5fc3RhcnRfaW5mby0+Y29uc29sZS5kb21VLmV2dGNobik7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQorc3RhdGljIGludCBfX3dyaXRlX2NvbnNvbGUoY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSB4ZW5jb25zX2ludGVyZmFjZSgpOwogCVhFTkNPTlNfUklOR19JRFggY29ucywgcHJvZDsKQEAgLTc2LDYgKzc2LDI5IEBACiAJcmV0dXJuIHNlbnQ7CiB9CiAKK3N0YXRpYyBpbnQgd3JpdGVfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCByZXQgPSBsZW47CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgd2hvbGUgYnVmZmVyIGlzIGVtaXR0ZWQsIHBvbGxpbmcgaWYKKwkgKiBuZWNlc3NhcnkuICBXZSBkb24ndCBldmVyIHdhbnQgdG8gcmVseSBvbiB0aGUgaHZjIGRhZW1vbgorCSAqIGJlY2F1c2UgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY29uc29sZSBvdXRwdXQgaXMgd2hlbiB0aGUKKwkgKiBrZXJuZWwgaXMgY3JpcHBsZWQuCisJICovCisJd2hpbGUgKGxlbikgeworCQlpbnQgc2VudCA9IF9fd3JpdGVfY29uc29sZShkYXRhLCBsZW4pOworCQkKKwkJZGF0YSArPSBzZW50OworCQlsZW4gLT0gc2VudDsKKworCQlpZiAodW5saWtlbHkobGVuKSkKKwkJCUhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF95aWVsZCwgTlVMTCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCByZWFkX2NvbnNvbGUodWludDMyX3QgdnRlcm1ubywgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IHhlbmNvbnNfaW50ZXJmYWNlKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKaW5kZXggMDBkZDNkZS4uMDZhYWQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKIAkJCQkgcGRldi0+bmFtZSk7CiAJaWYgKG1lbSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTEyNCw3ICsxMjQsNyBAQAogCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtZW0pOwotCXJuZ19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlybmdfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXJuZ19iYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCmluZGV4IDk2Mjk2OGYuLjkxNTE1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcm5nLmg+CiAKIC8qIFRoZSBob3N0IHdpbGwgZmlsbCBhbnkgYnVmZmVyIHdlIGdpdmUgaXQgd2l0aCBzd2VldCwgc3dlZXQgcmFuZG9tbmVzcy4gIFdlCkBAIC0xMTcsNyArMTE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdmlydHJuZ19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlydHJuZ19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJdmRldi0+Y29uZmlnLT5yZXNldCh2ZGV2KTsKIAlod3JuZ191bnJlZ2lzdGVyKCZ2aXJ0aW9faHdybmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwppbmRleCA0MWZjMTFkLi42NTU0NWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwbWkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKaW5kZXggMDkwNTA3OS4uZWM1ZTNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCmluZGV4IGFiMmYzMzQuLjQwMjgzOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKQEAgLTE5LDYgKzE5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNmM4YjY1ZC4uYTA3NGZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtMzAxLDcgKzMwMSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtbWFwX21lbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHsKICNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QKIAkuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXNwZWMuYyBiL2RyaXZlcnMvY2hhci9tc3BlYy5jCmluZGV4IDMwZjA5NWEuLjE5OTcyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tc3BlYy5jCisrKyBiL2RyaXZlcnMvY2hhci9tc3BlYy5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1zcGVjX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXNwZWNfdm1fb3BzID0gewogCS5vcGVuID0gbXNwZWNfb3BlbiwKIAkuY2xvc2UgPSBtc3BlY19jbG9zZSwKIAkuZmF1bHQgPSBtc3BlY19mYXVsdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwppbmRleCBlYzU4ZDhjLi5kMzQwMGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbm96b21pLmMKKysrIGIvZHJpdmVycy9jaGFyL25vem9taS5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcHR5LmMgYi9kcml2ZXJzL2NoYXIvcHR5LmMKaW5kZXggNTM3NjFjZS4uNjJmMjgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3B0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9wdHkuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTI2MSw2ICsyNjIsOSBAQAogCXJldHVybiAwOwogfQogCisvKiBUcmFkaXRpb25hbCBCU0QgZGV2aWNlcyAqLworI2lmZGVmIENPTkZJR19MRUdBQ1lfUFRZUworCiBzdGF0aWMgaW50IHB0eV9pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKm9fdHR5OwpAQCAtMzEwLDI0ICszMTQsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHR5X29wcyA9IHsKLQkuaW5zdGFsbCA9IHB0eV9pbnN0YWxsLAotCS5vcGVuID0gcHR5X29wZW4sCi0JLmNsb3NlID0gcHR5X2Nsb3NlLAotCS53cml0ZSA9IHB0eV93cml0ZSwKLQkud3JpdGVfcm9vbSA9IHB0eV93cml0ZV9yb29tLAotCS5mbHVzaF9idWZmZXIgPSBwdHlfZmx1c2hfYnVmZmVyLAotCS5jaGFyc19pbl9idWZmZXIgPSBwdHlfY2hhcnNfaW5fYnVmZmVyLAotCS51bnRocm90dGxlID0gcHR5X3VudGhyb3R0bGUsCi0JLnNldF90ZXJtaW9zID0gcHR5X3NldF90ZXJtaW9zLAotCS5yZXNpemUgPSBwdHlfcmVzaXplCi19OwotCi0vKiBUcmFkaXRpb25hbCBCU0QgZGV2aWNlcyAqLwotI2lmZGVmIENPTkZJR19MRUdBQ1lfUFRZUwotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpwdHlfZHJpdmVyLCAqcHR5X3NsYXZlX2RyaXZlcjsKLQogc3RhdGljIGludCBwdHlfYnNkX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMzQxLDcgKzMyNywxMiBAQAogc3RhdGljIGludCBsZWdhY3lfY291bnQgPSBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVDsKIG1vZHVsZV9wYXJhbShsZWdhY3lfY291bnQsIGludCwgMCk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHR5X29wc19ic2QgPSB7CisvKgorICogVGhlIG1hc3RlciBzaWRlIG9mIGEgcHR5IGNhbiBkbyBUSU9DU1BUTENLIGFuZCB0aHVzCisgKiBoYXMgcHR5X2JzZF9pb2N0bC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBtYXN0ZXJfcHR5X29wc19ic2QgPSB7CisJLmluc3RhbGwgPSBwdHlfaW5zdGFsbCwKIAkub3BlbiA9IHB0eV9vcGVuLAogCS5jbG9zZSA9IHB0eV9jbG9zZSwKIAkud3JpdGUgPSBwdHlfd3JpdGUsCkBAIC0zNTQsOCArMzQ1LDIzIEBACiAJLnJlc2l6ZSA9IHB0eV9yZXNpemUKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2xhdmVfcHR5X29wc19ic2QgPSB7CisJLmluc3RhbGwgPSBwdHlfaW5zdGFsbCwKKwkub3BlbiA9IHB0eV9vcGVuLAorCS5jbG9zZSA9IHB0eV9jbG9zZSwKKwkud3JpdGUgPSBwdHlfd3JpdGUsCisJLndyaXRlX3Jvb20gPSBwdHlfd3JpdGVfcm9vbSwKKwkuZmx1c2hfYnVmZmVyID0gcHR5X2ZsdXNoX2J1ZmZlciwKKwkuY2hhcnNfaW5fYnVmZmVyID0gcHR5X2NoYXJzX2luX2J1ZmZlciwKKwkudW50aHJvdHRsZSA9IHB0eV91bnRocm90dGxlLAorCS5zZXRfdGVybWlvcyA9IHB0eV9zZXRfdGVybWlvcywKKwkucmVzaXplID0gcHR5X3Jlc2l6ZQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGxlZ2FjeV9wdHlfaW5pdCh2b2lkKQogeworCXN0cnVjdCB0dHlfZHJpdmVyICpwdHlfZHJpdmVyLCAqcHR5X3NsYXZlX2RyaXZlcjsKKwogCWlmIChsZWdhY3lfY291bnQgPD0gMCkKIAkJcmV0dXJuOwogCkBAIC0zODMsNyArMzg5LDcgQEAKIAlwdHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSAzODQwMDsKIAlwdHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUyB8IFRUWV9EUklWRVJfUkVBTF9SQVc7CiAJcHR5X2RyaXZlci0+b3RoZXIgPSBwdHlfc2xhdmVfZHJpdmVyOwotCXR0eV9zZXRfb3BlcmF0aW9ucyhwdHlfZHJpdmVyLCAmcHR5X29wcyk7CisJdHR5X3NldF9vcGVyYXRpb25zKHB0eV9kcml2ZXIsICZtYXN0ZXJfcHR5X29wc19ic2QpOwogCiAJcHR5X3NsYXZlX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlwdHlfc2xhdmVfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJwdHlfc2xhdmUiOwpAQCAtMzk5LDcgKzQwNSw3IEBACiAJcHR5X3NsYXZlX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfAogCQkJCQlUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXB0eV9zbGF2ZV9kcml2ZXItPm90aGVyID0gcHR5X2RyaXZlcjsKLQl0dHlfc2V0X29wZXJhdGlvbnMocHR5X3NsYXZlX2RyaXZlciwgJnB0eV9vcHMpOworCXR0eV9zZXRfb3BlcmF0aW9ucyhwdHlfc2xhdmVfZHJpdmVyLCAmc2xhdmVfcHR5X29wc19ic2QpOwogCiAJaWYgKHR0eV9yZWdpc3Rlcl9kcml2ZXIocHR5X2RyaXZlcikpCiAJCXBhbmljKCJDb3VsZG4ndCByZWdpc3RlciBwdHkgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYwppbmRleCAwMWYyNjU0Li5mMTIxMzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKQEAgLTMyLDYgKzMyLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwppbmRleCA3NDMzOTU1Li43ODA1MDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwpAQCAtMzEsNiArMzEsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90dHkuYwppbmRleCAyZmI0OWU4Li40N2ZhYjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMKQEAgLTMzLDYgKzMzLDcgQEAKICNkZWZpbmUgX19FWFBMSUNJVF9ERUZfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9jaGFyL3J0Yy5jCmluZGV4IGUwZDBmOGIuLmJjNGFiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvcnRjLmMKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jIGIvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jCmluZGV4IDMzYTJiNTMuLjk2MTA4NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZXJfYTIyMzIuYworKysgYi9kcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmMKQEAgLTg5LDYgKzg5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYyBiL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYwppbmRleCA1OTQyYTlkLi40NTIzNzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKKysrIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCkBAIC0yMjAsOCArMjIwLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKChsb25nKWluZm8gPCAobG9uZykoJmN5X3BvcnRbMF0pCi0JICAgIHx8IChsb25nKSgmY3lfcG9ydFtOUl9QT1JUU10pIDwgKGxvbmcpaW5mbykgeworCWlmIChpbmZvIDwgJmN5X3BvcnRbMF0gfHwgaW5mbyA+PSAmY3lfcG9ydFtOUl9QT1JUU10pIHsKIAkJcHJpbnRrKCJXYXJuaW5nOiBjeWNsYWRlc19wb3J0IG91dCBvZiByYW5nZSBmb3IgKCVzKSBpbiAlc1xuIiwKIAkJCQluYW1lLCByb3V0aW5lKTsKIAkJcmV0dXJuIDE7CkBAIC01MjAsMTUgKzUxOSwxMyBAQAogCQlwYW5pYygiVHhJbnQgb24gZGVidWcgcG9ydCEhISIpOwogCX0KICNlbmRpZgotCi0JaW5mbyA9ICZjeV9wb3J0W2NoYW5uZWxdOwotCiAJLyogdmFsaWRhdGUgdGhlIHBvcnQgbnVtYmVyIChhcyBjb25maWd1cmVkIGFuZCBvcGVuKSAqLwogCWlmICgoY2hhbm5lbCA8IDApIHx8IChOUl9QT1JUUyA8PSBjaGFubmVsKSkgewogCQliYXNlX2FkZHJbQ3lJRVJdICY9IH4oQ3lUeE1wdHkgfCBDeVR4UmR5KTsKIAkJYmFzZV9hZGRyW0N5VEVPSVJdID0gQ3lOT1RSQU5TOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQorCWluZm8gPSAmY3lfcG9ydFtjaGFubmVsXTsKIAlpbmZvLT5sYXN0X2FjdGl2ZSA9IGppZmZpZXM7CiAJaWYgKGluZm8tPnR0eSA9PSAwKSB7CiAJCWJhc2VfYWRkcltDeUlFUl0gJj0gfihDeVR4TXB0eSB8IEN5VHhSZHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IGZkM2RjZWQuLjhjMjYyYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTM2LDYgKzM2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKaW5kZXggNTNlNTA0Zi4uZGI2ZGNmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKQEAgLTI3LDYgKzI3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RsY2xrLmMgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwppbmRleCA4ZjIyODRiLi44MGVhNmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdGxjbGsuYworKysgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBwcmludGsoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CQkvKiBldmVyeXRoaW5nLi4uICovCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogZXJyb3IgY29kZXMgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCmluZGV4IDQ1ZDU4MDAuLjQ3YzJkMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwpAQCAtNjk2LDggKzY5Niw3IEBACiAKIAljbWQuaGVhZGVyLmluID0gcGNycmVhZF9oZWFkZXI7CiAJY21kLnBhcmFtcy5wY3JyZWFkX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMihwY3JfaWR4KTsKLQlCVUdfT04oY21kLmhlYWRlci5pbi5sZW5ndGggPiBSRUFEX1BDUl9SRVNVTFRfU0laRSk7Ci0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgY21kLmhlYWRlci5pbi5sZW5ndGgsCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgUkVBRF9QQ1JfUkVTVUxUX1NJWkUsCiAJCQkgICJhdHRlbXB0aW5nIHRvIHJlYWQgYSBwY3IgdmFsdWUiKTsKIAogCWlmIChyYyA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYyBiL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMKaW5kZXggMzEwODk5MS4uNjZmYTRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2J1ZmZlci5jCkBAIC00MDIsMjggKzQwMiwyNiBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHR0eV9zdHJ1Y3QsIGJ1Zi53b3JrLndvcmspOwogCXVuc2lnbmVkIGxvbmcgCWZsYWdzOwogCXN0cnVjdCB0dHlfbGRpc2MgKmRpc2M7Ci0Jc3RydWN0IHR0eV9idWZmZXIgKnRidWYsICpoZWFkOwotCWNoYXIgKmNoYXJfYnVmOwotCXVuc2lnbmVkIGNoYXIgKmZsYWdfYnVmOwogCiAJZGlzYyA9IHR0eV9sZGlzY19yZWYodHR5KTsKIAlpZiAoZGlzYyA9PSBOVUxMKQkvKiAgIVRUWV9MRElTQyAqLwogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCS8qIFNvIHdlIGtub3cgYSBmbHVzaCBpcyBydW5uaW5nICovCi0Jc2V0X2JpdChUVFlfRkxVU0hJTkcsICZ0dHktPmZsYWdzKTsKLQloZWFkID0gdHR5LT5idWYuaGVhZDsKLQlpZiAoaGVhZCAhPSBOVUxMKSB7Ci0JCXR0eS0+YnVmLmhlYWQgPSBOVUxMOwotCQlmb3IgKDs7KSB7Ci0JCQlpbnQgY291bnQgPSBoZWFkLT5jb21taXQgLSBoZWFkLT5yZWFkOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpKSB7CisJCXN0cnVjdCB0dHlfYnVmZmVyICpoZWFkOworCQl3aGlsZSAoKGhlYWQgPSB0dHktPmJ1Zi5oZWFkKSAhPSBOVUxMKSB7CisJCQlpbnQgY291bnQ7CisJCQljaGFyICpjaGFyX2J1ZjsKKwkJCXVuc2lnbmVkIGNoYXIgKmZsYWdfYnVmOworCisJCQljb3VudCA9IGhlYWQtPmNvbW1pdCAtIGhlYWQtPnJlYWQ7CiAJCQlpZiAoIWNvdW50KSB7CiAJCQkJaWYgKGhlYWQtPm5leHQgPT0gTlVMTCkKIAkJCQkJYnJlYWs7Ci0JCQkJdGJ1ZiA9IGhlYWQ7Ci0JCQkJaGVhZCA9IGhlYWQtPm5leHQ7Ci0JCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgdGJ1Zik7CisJCQkJdHR5LT5idWYuaGVhZCA9IGhlYWQtPm5leHQ7CisJCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgaGVhZCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQkvKiBMZGlzYyBvciB1c2VyIGlzIHRyeWluZyB0byBmbHVzaCB0aGUgYnVmZmVycwpAQCAtNDQ1LDkgKzQ0Myw5IEBACiAJCQkJCQkJZmxhZ19idWYsIGNvdW50KTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAJCX0KLQkJLyogUmVzdG9yZSB0aGUgcXVldWUgaGVhZCAqLwotCQl0dHktPmJ1Zi5oZWFkID0gaGVhZDsKKwkJY2xlYXJfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpOwogCX0KKwogCS8qIFdlIG1heSBoYXZlIGEgZGVmZXJyZWQgcmVxdWVzdCB0byBmbHVzaCB0aGUgaW5wdXQgYnVmZmVyLAogCSAgIGlmIHNvIHB1bGwgdGhlIGNoYWluIHVuZGVyIHRoZSBsb2NrIGFuZCBlbXB0eSB0aGUgcXVldWUgKi8KIAlpZiAodGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpKSB7CkBAIC00NTUsNyArNDUzLDYgQEAKIAkJY2xlYXJfYml0KFRUWV9GTFVTSFBFTkRJTkcsICZ0dHktPmZsYWdzKTsKIAkJd2FrZV91cCgmdHR5LT5yZWFkX3dhaXQpOwogCX0KLQljbGVhcl9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwogCiAJdHR5X2xkaXNjX2RlcmVmKGRpc2MpOwpAQCAtNDcxLDcgKzQ2OCw3IEBACiAgKi8KIHZvaWQgdHR5X2ZsdXNoX3RvX2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JZmx1c2hfdG9fbGRpc2MoJnR0eS0+YnVmLndvcmsud29yayk7CisJZmx1c2hfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggZWExOGExMi4uNTk0OTllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMTM4OSw3ICsxMzg5LDcgQEAKICAqCW9mIHR0eXMgdGhhdCB0aGUgZHJpdmVyIGtlZXBzLgogICoKICAqCVRoaXMgbWV0aG9kIGdldHMgY2FsbGVkIGZyb20gYSB3b3JrIHF1ZXVlIHNvIHRoYXQgdGhlIGRyaXZlciBwcml2YXRlCi0gKglzaHV0ZG93biBvcHMgY2FuIHNsZWVwIChuZWVkZWQgZm9yIFVTQiBhdCBsZWFzdCkKKyAqCWNsZWFudXAgb3BzIGNhbiBzbGVlcCAobmVlZGVkIGZvciBVU0IgYXQgbGVhc3QpCiAgKi8KIHN0YXRpYyB2b2lkIHJlbGVhc2Vfb25lX3R0eShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CkBAIC0xMzk3LDEwICsxMzk3LDkgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0dHlfc3RydWN0LCBoYW5ndXBfd29yayk7CiAJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciA9IHR0eS0+ZHJpdmVyOwogCi0JaWYgKHR0eS0+b3BzLT5zaHV0ZG93bikKLQkJdHR5LT5vcHMtPnNodXRkb3duKHR0eSk7Ci0JZWxzZQotCQl0dHlfc2h1dGRvd24odHR5KTsKKwlpZiAodHR5LT5vcHMtPmNsZWFudXApCisJCXR0eS0+b3BzLT5jbGVhbnVwKHR0eSk7CisKIAl0dHktPm1hZ2ljID0gMDsKIAl0dHlfZHJpdmVyX2tyZWZfcHV0KGRyaXZlcik7CiAJbW9kdWxlX3B1dChkcml2ZXItPm93bmVyKTsKQEAgLTE0MTUsNiArMTQxNCwxMiBAQAogc3RhdGljIHZvaWQgcXVldWVfcmVsZWFzZV9vbmVfdHR5KHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHR0eV9zdHJ1Y3QsIGtyZWYpOworCisJaWYgKHR0eS0+b3BzLT5zaHV0ZG93bikKKwkJdHR5LT5vcHMtPnNodXRkb3duKHR0eSk7CisJZWxzZQorCQl0dHlfc2h1dGRvd24odHR5KTsKKwogCS8qIFRoZSBoYW5ndXAgcXVldWUgaXMgbm93IGZyZWUgc28gd2UgY2FuIHJldXNlIGl0IHJhdGhlciB0aGFuCiAJICAgd2FzdGUgYSBjaHVuayBvZiBtZW1vcnkgZm9yIGVhY2ggcG9ydCAqLwogCUlOSVRfV09SSygmdHR5LT5oYW5ndXBfd29yaywgcmVsZWFzZV9vbmVfdHR5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwppbmRleCBhYWZkYmFlLi5mZWI1NTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCkBAIC01MTgsNyArNTE4LDcgQEAKIHN0YXRpYyBpbnQgdHR5X2xkaXNjX2hhbHQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAljbGVhcl9iaXQoVFRZX0xESVNDLCAmdHR5LT5mbGFncyk7Ci0JcmV0dXJuIGNhbmNlbF9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmspOworCXJldHVybiBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnR0eS0+YnVmLndvcmspOwogfQogCiAvKioKQEAgLTc1NiwxMiArNzU2LDkgQEAKIAkgKiBOX1RUWS4KIAkgKi8KIAlpZiAodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TKSB7Ci0JCS8qIE1ha2Ugc3VyZSB0aGUgb2xkIGxkaXNjIGlzIHF1aWVzY2VudCAqLwotCQl0dHlfbGRpc2NfaGFsdCh0dHkpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJCS8qIEF2b2lkIHJhY2luZyBzZXRfbGRpc2Mgb3IgdHR5X2xkaXNjX3JlbGVhc2UgKi8KIAkJbXV0ZXhfbG9jaygmdHR5LT5sZGlzY19tdXRleCk7CisJCXR0eV9sZGlzY19oYWx0KHR0eSk7CiAJCWlmICh0dHktPmxkaXNjKSB7CS8qIE5vdCB5ZXQgY2xvc2VkICovCiAJCQkvKiBTd2l0Y2ggYmFjayB0byBOX1RUWSAqLwogCQkJdHR5X2xkaXNjX3JlaW5pdCh0dHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9wb3J0LmMgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwppbmRleCBhNGJiYjI4Li4yZTg1NTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwpAQCAtMjIxLDYgKzIyMSw5IEBACiAJICAgdGhlIHBvcnQgaGFzIGp1c3QgaHVuZyB1cCBvciBpcyBpbiBhbm90aGVyIGVycm9yIHN0YXRlICovCiAJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKIAkJCSh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpIHsKKwkJLyogSW5kaWNhdGUgd2UgYXJlIG9wZW4gKi8KKwkJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKQorCQkJdHR5X3BvcnRfcmFpc2VfZHRyX3J0cyhwb3J0KTsKIAkJcG9ydC0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCAwZDMyOGI1Li5hMDM1YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbnNvbGUuaD4KICNpbmNsdWRlICJodmNfY29uc29sZS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCmluZGV4IDI5YzY1MWEuLmVkODZkM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCkBAIC05ODEsOCArOTgxLDEwIEBACiAJCQlnb3RvIGVwZXJtOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdnNhLCAoc3RydWN0IHZ0X3NldGFjdGl2YXRlIF9fdXNlciAqKWFyZywKLQkJCQkJCXNpemVvZihzdHJ1Y3QgdnRfc2V0YWN0aXZhdGUpKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQkJCQlzaXplb2Yoc3RydWN0IHZ0X3NldGFjdGl2YXRlKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQogCQlpZiAodnNhLmNvbnNvbGUgPT0gMCB8fCB2c2EuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykKIAkJCXJldCA9IC1FTlhJTzsKIAkJZWxzZSB7CkBAIC0xNTMwLDcgKzE1MzIsNyBAQAogCiAJY2FzZSBQSU9fVU5JTUFQOgogCWNhc2UgR0lPX1VOSU1BUDoKLQkJcmV0ID0gZG9fdW5pbWFwX2lvY3RsKGNtZCwgdXAsIHBlcm0sIHZjKTsKKwkJcmV0ID0gY29tcGF0X3VuaW1hcF9pb2N0bChjbWQsIHVwLCBwZXJtLCB2Yyk7CiAJCWJyZWFrOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYwppbmRleCBmNDBhYjY5Li40ODQ2ZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKKysrIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCkBAIC01NTksNyArNTU5LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBod2ljYXBfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh3aWNhcF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS53cml0ZSA9IGh3aWNhcF93cml0ZSwKIAkucmVhZCA9IGh3aWNhcF9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggMzkzOGM3OC4uZmY1N2M0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC00MSw3ICs0MSw3IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICosIGNwdWZyZXFfY3B1X2RhdGEpOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogLyogVGhpcyBvbmUga2VlcHMgdHJhY2sgb2YgdGhlIHByZXZpb3VzbHkgc2V0IGdvdmVybm9yIG9mIGEgcmVtb3ZlZCBDUFUgKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqLCBjcHVmcmVxX2NwdV9nb3Zlcm5vcik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltDUFVGUkVRX05BTUVfTEVOXSwgY3B1ZnJlcV9jcHVfZ292ZXJub3IpOwogI2VuZGlmCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwdWZyZXFfZHJpdmVyX2xvY2spOwogCkBAIC03NzQsMTAgKzc3NCwxMiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBqOwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0JaWYgKHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSkpIHsKLQkJcG9saWN5LT5nb3Zlcm5vciA9IHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSk7CisJc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKmdvdjsKKworCWdvdiA9IF9fZmluZF9nb3Zlcm5vcihwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpKTsKKwlpZiAoZ292KSB7CisJCXBvbGljeS0+Z292ZXJub3IgPSBnb3Y7CiAJCWRwcmludGsoIlJlc3RvcmluZyBnb3Zlcm5vciAlcyBmb3IgY3B1ICVkXG4iLAogCQkgICAgICAgcG9saWN5LT5nb3Zlcm5vci0+bmFtZSwgY3B1KTsKIAl9CkBAIC05NDksMTAgKzk1MSwxMyBAQAogc3RhdGljIGludCBjcHVmcmVxX2FkZF9kZXYoc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXYpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHN5c19kZXYtPmlkOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAwLCBmb3VuZCA9IDA7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgajsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlpbnQgc2libGluZzsKKyNlbmRpZgogCiAJaWYgKGNwdV9pc19vZmZsaW5lKGNwdSkpCiAJCXJldHVybiAwOwpAQCAtOTk5LDcgKzEwMDQsMTkgQEAKIAlJTklUX1dPUksoJnBvbGljeS0+dXBkYXRlLCBoYW5kbGVfdXBkYXRlKTsKIAogCS8qIFNldCBnb3Zlcm5vciBiZWZvcmUgLT5pbml0LCBzbyB0aGF0IGRyaXZlciBjb3VsZCBjaGVjayBpdCAqLwotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJZm9yX2VhY2hfb25saW5lX2NwdShzaWJsaW5nKSB7CisJCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3AgPSBwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIHNpYmxpbmcpOworCQlpZiAoY3AgJiYgY3AtPmdvdmVybm9yICYmCisJCSAgICAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwLT5yZWxhdGVkX2NwdXMpKSkgeworCQkJcG9saWN5LT5nb3Zlcm5vciA9IGNwLT5nb3Zlcm5vcjsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorI2VuZGlmCisJaWYgKCFmb3VuZCkKKwkJcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAkvKiBjYWxsIGRyaXZlci4gRnJvbSB0aGVuIG9uIHRoZSBjcHVmcmVxIG11c3QgYmUgYWJsZQogCSAqIHRvIGFjY2VwdCBhbGwgY2FsbHMgdG8gLT52ZXJpZnkgYW5kIC0+c2V0cG9saWN5IGZvciB0aGlzIENQVQogCSAqLwpAQCAtMTExMSw3ICsxMTI4LDggQEAKICNpZmRlZiBDT05GSUdfU01QCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQlwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpID0gZGF0YS0+Z292ZXJub3I7CisJc3RybmNweShwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpLCBkYXRhLT5nb3Zlcm5vci0+bmFtZSwKKwkJCUNQVUZSRVFfTkFNRV9MRU4pOwogI2VuZGlmCiAKIAkvKiBpZiB3ZSBoYXZlIG90aGVyIENQVXMgc3RpbGwgcmVnaXN0ZXJlZCwgd2UgbmVlZCB0byB1bmxpbmsgdGhlbSwKQEAgLTExMzUsNyArMTE1Myw4IEBACiAJCQkJY29udGludWU7CiAJCQlkcHJpbnRrKCJyZW1vdmluZyBsaW5rIGZvciBjcHUgJXVcbiIsIGopOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCQkJcGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgaikgPSBkYXRhLT5nb3Zlcm5vcjsKKwkJCXN0cm5jcHkocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgaiksCisJCQkJZGF0YS0+Z292ZXJub3ItPm5hbWUsIENQVUZSRVFfTkFNRV9MRU4pOwogI2VuZGlmCiAJCQljcHVfc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGopOwogCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmNwdV9zeXNfZGV2LT5rb2JqLCAiY3B1ZnJlcSIpOwpAQCAtMTYwNiw5ICsxNjI1LDIyIEBACiAKIHZvaWQgY3B1ZnJlcV91bnJlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpnb3Zlcm5vcikKIHsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlpbnQgY3B1OworI2VuZGlmCisKIAlpZiAoIWdvdmVybm9yKQogCQlyZXR1cm47CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXN0cmNtcChwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpLCBnb3Zlcm5vci0+bmFtZSkpCisJCQlzdHJjcHkocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgY3B1KSwgIlwwIik7CisJfQorI2VuZGlmCisKIAltdXRleF9sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAlsaXN0X2RlbCgmZ292ZXJub3ItPmdvdmVybm9yX2xpc3QpOwogCW11dGV4X3VubG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCmluZGV4IGJjMzNkZGMuLmM3YjA4MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCkBAIC0xMTYsOSArMTE2LDkgQEAKIAogCWlkbGVfdGltZSA9IGNwdXRpbWU2NF9zdWIoY3VyX3dhbGxfdGltZSwgYnVzeV90aW1lKTsKIAlpZiAod2FsbCkKLQkJKndhbGwgPSBjdXJfd2FsbF90aW1lOworCQkqd2FsbCA9IChjcHV0aW1lNjRfdClqaWZmaWVzX3RvX3VzZWNzKGN1cl93YWxsX3RpbWUpOwogCi0JcmV0dXJuIGlkbGVfdGltZTsKKwlyZXR1cm4gKGNwdXRpbWU2NF90KWppZmZpZXNfdG9fdXNlY3MoaWRsZV90aW1lKTs7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZTY0X3QgZ2V0X2NwdV9pZGxlX3RpbWUodW5zaWduZWQgaW50IGNwdSwgY3B1dGltZTY0X3QgKndhbGwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwppbmRleCAwNzE2OTlkLi40YjM0YWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTEzMyw5ICsxMzMsOSBAQAogCiAJaWRsZV90aW1lID0gY3B1dGltZTY0X3N1YihjdXJfd2FsbF90aW1lLCBidXN5X3RpbWUpOwogCWlmICh3YWxsKQotCQkqd2FsbCA9IGN1cl93YWxsX3RpbWU7CisJCSp3YWxsID0gKGNwdXRpbWU2NF90KWppZmZpZXNfdG9fdXNlY3MoY3VyX3dhbGxfdGltZSk7CiAKLQlyZXR1cm4gaWRsZV90aW1lOworCXJldHVybiAoY3B1dGltZTY0X3QpamlmZmllc190b191c2VjcyhpZGxlX3RpbWUpOwogfQogCiBzdGF0aWMgaW5saW5lIGNwdXRpbWU2NF90IGdldF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGludCBjcHUsIGNwdXRpbWU2NF90ICp3YWxsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKaW5kZXggYWQ0MWYxOS4uMTJmZGQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCkBAIC03Niw4ICs3NiwxMSBAQAogI2VuZGlmCiAJLyogYXNrIHRoZSBnb3Zlcm5vciBmb3IgdGhlIG5leHQgc3RhdGUgKi8KIAluZXh0X3N0YXRlID0gY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5zZWxlY3QoZGV2KTsKLQlpZiAobmVlZF9yZXNjaGVkKCkpCisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcmV0dXJuOworCX0KKwogCXRhcmdldF9zdGF0ZSA9ICZkZXYtPnN0YXRlc1tuZXh0X3N0YXRlXTsKIAogCS8qIGVudGVyIHRoZSBzdGF0ZSBhbmQgdXBkYXRlIHN0YXRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwppbmRleCA3NmNiNmIzLi4wYWY4MDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKQEAgLTI0LDYgKzI0LDEyIEBACiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlICJwYWRsb2NrLmgiCiAKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgU1RBQ0tfQUxJR04gMTYKKyNlbHNlCisjZGVmaW5lIFNUQUNLX0FMSUdOIDQKKyNlbmRpZgorCiBzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyB7CiAJc3RydWN0IHNoYXNoX2Rlc2MgZmFsbGJhY2s7CiB9OwpAQCAtNjQsNyArNzAsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGExX3N0YXRlIHN0YXRlOwogCXVuc2lnbmVkIGludCBzcGFjZTsKQEAgLTEyOCw3ICsxMzYsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGEyNTZfc3RhdGUgc3RhdGU7CiAJdW5zaWduZWQgaW50IHNwYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCAwMjEyN2U1Li41NWM5YzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtNDcsNiArNDcsMTggQEAKIAkgIFNvdXJjZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIHdoZXJlIGRlYnVnZ2luZyBtZXNzYWdlCiAJICBwcmludGVkIHdpbGwgYmUgYWRkZWQgdG8gZGVidWdnaW5nIG1lc3NhZ2UuCiAKKyBjb25maWcgRURBQ19ERUNPREVfTUNFCisJdHJpc3RhdGUgIkRlY29kZSBNQ0VzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0gKG9ubHkgb24gQU1EIGZvciBub3cpIgorCWRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgJiYgWDg2X01DRQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBkZWNvZGUgTWFjaGluZSBDaGVjayBFeGNlcHRpb25zCisJICBvY2N1cmluZyBvbiB5b3VyIG1hY2hpbmUgaW4gaHVtYW4tcmVhZGFibGUgZm9ybS4KKworCSAgWW91IHNob3VsZCBkZWZpbml0ZWx5IHNheSBZIGhlcmUgaW4gY2FzZSB5b3Ugd2FudCB0byBkZWNvZGUgTUNFcworCSAgd2hpY2ggb2NjdXIgcmVhbGx5IGVhcmx5IHVwb24gYm9vdCwgYmVmb3JlIHRoZSBtb2R1bGUgaW5mcmFzdHJ1Y3R1cmUKKwkgIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCiBjb25maWcgRURBQ19NTV9FREFDCiAJdHJpc3RhdGUgIk1haW4gTWVtb3J5IEVEQUMgKEVycm9yIERldGVjdGlvbiBBbmQgQ29ycmVjdGlvbikgcmVwb3J0aW5nIgogCWhlbHAKQEAgLTU5LDcgKzcxLDcgQEAKIAogY29uZmlnIEVEQUNfQU1ENjQKIAl0cmlzdGF0ZSAiQU1ENjQgKE9wdGVyb24sIEF0aGxvbjY0KSBLOCwgRjEwaCwgRjExaCIKLQlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBLOF9OQiAmJiBYODZfNjQgJiYgUENJICYmIENQVV9TVVBfQU1ECisJZGVwZW5kcyBvbiBFREFDX01NX0VEQUMgJiYgSzhfTkIgJiYgWDg2XzY0ICYmIFBDSSAmJiBFREFDX0RFQ09ERV9NQ0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlIEFNRCA2NAogCSAgRmFtaWxpZXMgb2YgTWVtb3J5IENvbnRyb2xsZXJzIChLOCwgRjEwaCBhbmQgRjExaCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZSBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQppbmRleCA3YTQ3M2JiLi5iYzVkYzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCkBAIC02LDcgKzYsNiBAQAogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICMKIAotCiBvYmotJChDT05GSUdfRURBQykJCQk6PSBlZGFjX3N0dWIubwogb2JqLSQoQ09ORklHX0VEQUNfTU1fRURBQykJCSs9IGVkYWNfY29yZS5vCiAKQEAgLTE3LDkgKzE2LDcgQEAKIGVkYWNfY29yZS1vYmpzCSs9IGVkYWNfcGNpLm8gZWRhY19wY2lfc3lzZnMubwogZW5kaWYKIAotaWZkZWYgQ09ORklHX0NQVV9TVVBfQU1ECi1lZGFjX2NvcmUtb2JqcyAgKz0gZWRhY19tY2VfYW1kLm8KLWVuZGlmCitvYmotJChDT05GSUdfRURBQ19ERUNPREVfTUNFKQkJKz0gZWRhY19tY2VfYW1kLm8KIAogb2JqLSQoQ09ORklHX0VEQUNfQU1ENzZYKQkJKz0gYW1kNzZ4X2VkYWMubwogb2JqLSQoQ09ORklHX0VEQUNfQ1BDOTI1KQkJKz0gY3BjOTI1X2VkYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggNGU1NTFlNi4uYTM4ODMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC0xNSw4ICsxNSw4IEBACiAKIC8qIExvb2t1cCB0YWJsZSBmb3IgYWxsIHBvc3NpYmxlIE1DIGNvbnRyb2wgaW5zdGFuY2VzICovCiBzdHJ1Y3QgYW1kNjRfcHZ0Owotc3RhdGljIHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaV9sb29rdXBbTUFYX05VTU5PREVTXTsKLXN0YXRpYyBzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnRfbG9va3VwW01BWF9OVU1OT0RFU107CitzdGF0aWMgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpX2xvb2t1cFtFREFDX01BWF9OVU1OT0RFU107CitzdGF0aWMgc3RydWN0IGFtZDY0X3B2dCAqcHZ0X2xvb2t1cFtFREFDX01BWF9OVU1OT0RFU107CiAKIC8qCiAgKiBTZWUgRjJ4ODAgZm9yIEs4IGFuZCBGMnhbMSwwXTgwIGZvciBGYW0xMCBhbmQgbGF0ZXIuIFRoZSB0YWJsZSBiZWxvdyBpcyBvbmx5CkBAIC0xODksNyArMTg5LDEwIEBACiAvKiBNYXAgZnJvbSBhIENTUk9XIGVudHJ5IHRvIHRoZSBtYXNrIGVudHJ5IHRoYXQgb3BlcmF0ZXMgb24gaXQgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGFtZDY0X21hcF90b19kY3NfbWFzayhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIGludCBjc3JvdykKIHsKLQlyZXR1cm4gY3Nyb3cgPj4gKHB2dC0+bnVtX2Rjc20gPj4gMyk7CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZiAmJiBwdnQtPmV4dF9tb2RlbCA8IE9QVEVST05fQ1BVX1JFVl9GKQorCQlyZXR1cm4gY3Nyb3c7CisJZWxzZQorCQlyZXR1cm4gY3Nyb3cgPj4gMTsKIH0KIAogLyogcmV0dXJuIHRoZSAnYmFzZScgYWRkcmVzcyB0aGUgaSd0aCBDUyBlbnRyeSBvZiB0aGUgJ2RjdCcgRFJBTSBjb250cm9sbGVyICovCkBAIC0yNzksMjkgKzI4MiwyNiBAQAogCWludGx2X2VuID0gcHZ0LT5kcmFtX0ludGx2RW5bMF07CiAKIAlpZiAoaW50bHZfZW4gPT0gMCkgewotCQlmb3IgKG5vZGVfaWQgPSAwOyA7ICkgeworCQlmb3IgKG5vZGVfaWQgPSAwOyBub2RlX2lkIDwgRFJBTV9SRUdfQ09VTlQ7IG5vZGVfaWQrKykgewogCQkJaWYgKGFtZDY0X2Jhc2VfbGltaXRfbWF0Y2gocHZ0LCBzeXNfYWRkciwgbm9kZV9pZCkpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmICgrK25vZGVfaWQgPj0gRFJBTV9SRUdfQ09VTlQpCi0JCQkJZ290byBlcnJfbm9fbWF0Y2g7CisJCQkJZ290byBmb3VuZDsKIAkJfQotCQlnb3RvIGZvdW5kOworCQlnb3RvIGVycl9ub19tYXRjaDsKIAl9CiAKLQlpZiAodW5saWtlbHkoKGludGx2X2VuICE9ICgweDAxIDw8IDgpKSAmJgotCQkgICAgIChpbnRsdl9lbiAhPSAoMHgwMyA8PCA4KSkgJiYKLQkJICAgICAoaW50bHZfZW4gIT0gKDB4MDcgPDwgOCkpKSkgeworCWlmICh1bmxpa2VseSgoaW50bHZfZW4gIT0gMHgwMSkgJiYKKwkJICAgICAoaW50bHZfZW4gIT0gMHgwMykgJiYKKwkJICAgICAoaW50bHZfZW4gIT0gMHgwNykpKSB7CiAJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICJqdW5rIHZhbHVlIG9mIDB4JXggZXh0cmFjdGVkIGZyb20gIgogCQkJICAgICAiSW50bHZFbiBmaWVsZCBvZiBEUkFNIEJhc2UgUmVnaXN0ZXIgZm9yIG5vZGUgMDogIgotCQkJICAgICAiVGhpcyBwcm9iYWJseSBpbmRpY2F0ZXMgYSBCSU9TIGJ1Zy5cbiIsIGludGx2X2VuKTsKKwkJCSAgICAgInRoaXMgcHJvYmFibHkgaW5kaWNhdGVzIGEgQklPUyBidWcuXG4iLCBpbnRsdl9lbik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWJpdHMgPSAoKCh1MzIpIHN5c19hZGRyKSA+PiAxMikgJiBpbnRsdl9lbjsKIAogCWZvciAobm9kZV9pZCA9IDA7IDsgKSB7Ci0JCWlmICgocHZ0LT5kcmFtX2xpbWl0W25vZGVfaWRdICYgaW50bHZfZW4pID09IGJpdHMpCisJCWlmICgocHZ0LT5kcmFtX0ludGx2U2VsW25vZGVfaWRdICYgaW50bHZfZW4pID09IGJpdHMpCiAJCQlicmVhazsJLyogaW50bHZfc2VsIGZpZWxkIG1hdGNoZXMgKi8KIAogCQlpZiAoKytub2RlX2lkID49IERSQU1fUkVHX0NPVU5UKQpAQCAtMzExLDEwICszMTEsMTAgQEAKIAkvKiBzYW5pdHkgdGVzdCBmb3Igc3lzX2FkZHIgKi8KIAlpZiAodW5saWtlbHkoIWFtZDY0X2Jhc2VfbGltaXRfbWF0Y2gocHZ0LCBzeXNfYWRkciwgbm9kZV9pZCkpKSB7CiAJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsCi0JCQkgICIlcygpOiBzeXNfYWRkciAweCVseCBmYWxscyBvdXRzaWRlIGJhc2UvbGltaXQgIgotCQkJICAiYWRkcmVzcyByYW5nZSBmb3Igbm9kZSAlZCB3aXRoIG5vZGUgaW50ZXJsZWF2aW5nICIKLQkJCSAgImVuYWJsZWQuXG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc3lzX2FkZHIsCi0JCQkgIG5vZGVfaWQpOworCQkJICAgICAiJXMoKTogc3lzX2FkZHIgMHglbGx4IGZhbGxzIG91dHNpZGUgYmFzZS9saW1pdCAiCisJCQkgICAgICJhZGRyZXNzIHJhbmdlIGZvciBub2RlICVkIHdpdGggbm9kZSBpbnRlcmxlYXZpbmcgIgorCQkJICAgICAiZW5hYmxlZC5cbiIsCisJCQkgICAgIF9fZnVuY19fLCBzeXNfYWRkciwgbm9kZV9pZCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMzc3LDcgKzM3Nyw3IEBACiAJICogYmFzZS9tYXNrIHJlZ2lzdGVyIHBhaXIsIHRlc3QgdGhlIGNvbmRpdGlvbiBzaG93biBuZWFyIHRoZSBzdGFydCBvZgogCSAqIHNlY3Rpb24gMy41LjQgKHAuIDg0LCBCS0RHICMyNjA5NCwgSzgsIHJldkEtRSkuCiAJICovCi0JZm9yIChjc3JvdyA9IDA7IGNzcm93IDwgQ0hJUFNFTEVDVF9DT1VOVDsgY3Nyb3crKykgeworCWZvciAoY3Nyb3cgPSAwOyBjc3JvdyA8IHB2dC0+Y3NfY291bnQ7IGNzcm93KyspIHsKIAogCQkvKiBUaGlzIERSQU0gY2hpcCBzZWxlY3QgaXMgZGlzYWJsZWQgb24gdGhpcyBub2RlICovCiAJCWlmICgocHZ0LT5kY3NiMFtjc3Jvd10gJiBLOF9EQ1NCX0NTX0VOQUJMRSkgPT0gMCkKQEAgLTczNCw3ICs3MzQsNyBAQAogCXU2NCBiYXNlLCBtYXNrOwogCiAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKLQlCVUdfT04oKGNzcm93IDwgMCkgfHwgKGNzcm93ID49IENISVBTRUxFQ1RfQ09VTlQpKTsKKwlCVUdfT04oKGNzcm93IDwgMCkgfHwgKGNzcm93ID49IHB2dC0+Y3NfY291bnQpKTsKIAogCWJhc2UgPSBiYXNlX2Zyb21fZGN0X2Jhc2UocHZ0LCBjc3Jvdyk7CiAJbWFzayA9IG1hc2tfZnJvbV9kY3RfbWFzayhwdnQsIGNzcm93KTsKQEAgLTk2MiwzNSArOTYyLDI3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGFtZDY0X3NldF9kY3RfYmFzZV9hbmRfbWFzayhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7Ci0JaWYgKHB2dC0+ZXh0X21vZGVsID49IE9QVEVST05fQ1BVX1JFVl9GKSB7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmICYmIHB2dC0+ZXh0X21vZGVsIDwgT1BURVJPTl9DUFVfUkVWX0YpIHsKKwkJcHZ0LT5kY3NiX2Jhc2UJCT0gUkVWX0VfRENTQl9CQVNFX0JJVFM7CisJCXB2dC0+ZGNzbV9tYXNrCQk9IFJFVl9FX0RDU01fTUFTS19CSVRTOworCQlwdnQtPmRjc19tYXNrX25vdHVzZWQJPSBSRVZfRV9EQ1NfTk9UVVNFRF9CSVRTOworCQlwdnQtPmRjc19zaGlmdAkJPSBSRVZfRV9EQ1NfU0hJRlQ7CisJCXB2dC0+Y3NfY291bnQJCT0gODsKKwkJcHZ0LT5udW1fZGNzbQkJPSA4OworCX0gZWxzZSB7CiAJCXB2dC0+ZGNzYl9iYXNlCQk9IFJFVl9GX0YxWGhfRENTQl9CQVNFX0JJVFM7CiAJCXB2dC0+ZGNzbV9tYXNrCQk9IFJFVl9GX0YxWGhfRENTTV9NQVNLX0JJVFM7CiAJCXB2dC0+ZGNzX21hc2tfbm90dXNlZAk9IFJFVl9GX0YxWGhfRENTX05PVFVTRURfQklUUzsKIAkJcHZ0LT5kY3Nfc2hpZnQJCT0gUkVWX0ZfRjFYaF9EQ1NfU0hJRlQ7CiAKLQkJc3dpdGNoIChib290X2NwdV9kYXRhLng4NikgewotCQljYXNlIDB4ZjoKLQkJCXB2dC0+bnVtX2Rjc20gPSBSRVZfRl9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDEwOgotCQkJcHZ0LT5udW1fZGNzbSA9IEYxMF9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDExOgotCQkJcHZ0LT5udW1fZGNzbSA9IEYxMV9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWFtZDY0X3ByaW50ayhLRVJOX0VSUiwgIlVuc3VwcG9ydGVkIGZhbWlseSFcbiIpOwotCQkJYnJlYWs7CisJCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDExKSB7CisJCQlwdnQtPmNzX2NvdW50ID0gNDsKKwkJCXB2dC0+bnVtX2Rjc20gPSAyOworCQl9IGVsc2UgeworCQkJcHZ0LT5jc19jb3VudCA9IDg7CisJCQlwdnQtPm51bV9kY3NtID0gNDsKIAkJfQotCX0gZWxzZSB7Ci0JCXB2dC0+ZGNzYl9iYXNlCQk9IFJFVl9FX0RDU0JfQkFTRV9CSVRTOwotCQlwdnQtPmRjc21fbWFzawkJPSBSRVZfRV9EQ1NNX01BU0tfQklUUzsKLQkJcHZ0LT5kY3NfbWFza19ub3R1c2VkCT0gUkVWX0VfRENTX05PVFVTRURfQklUUzsKLQkJcHZ0LT5kY3Nfc2hpZnQJCT0gUkVWX0VfRENTX1NISUZUOwotCQlwdnQtPm51bV9kY3NtCQk9IFJFVl9FX0RDU01fQ09VTlQ7CiAJfQogfQogCkBAIC0xMDAzLDcgKzk5NSw3IEBACiAKIAlhbWQ2NF9zZXRfZGN0X2Jhc2VfYW5kX21hc2socHZ0KTsKIAotCWZvciAoY3MgPSAwOyBjcyA8IENISVBTRUxFQ1RfQ09VTlQ7IGNzKyspIHsKKwlmb3IgKGNzID0gMDsgY3MgPCBwdnQtPmNzX2NvdW50OyBjcysrKSB7CiAJCXJlZyA9IEs4X0RDU0IwICsgKGNzICogNCk7CiAJCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwdnQtPmRyYW1fZjJfY3RsLCByZWcsCiAJCQkJCQkmcHZ0LT5kY3NiMFtjc10pOwpAQCAtMTE5Myw3ICsxMTg1LDcgQEAKIAkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgbm9kZSB0aGF0IGRldGVjdGVkIHRoZSBlcnJvci4KIAkgKi8KIAlzcmNfbWNpID0gZmluZF9tY19ieV9zeXNfYWRkcihtY2ksIFN5c3RlbUFkZHJlc3MpOwotCWlmIChzcmNfbWNpKSB7CisJaWYgKCFzcmNfbWNpKSB7CiAJCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAogCQkJICAgICAiZmFpbGVkIHRvIG1hcCBlcnJvciBhZGRyZXNzIDB4JWx4IHRvIGEgbm9kZVxuIiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcpU3lzdGVtQWRkcmVzcyk7CkBAIC0xMzc2LDggKzEzNjgsOCBAQAogCiAJcHZ0LT5kcmFtX0ludGx2RW5bZHJhbV0gPSAobG93X2Jhc2UgPj4gOCkgJiAweDc7CiAKLQlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgoKCgodTY0KSBoaWdoX2Jhc2UgJiAweDAwMDAwMEZGKSA8PCAzMikgfAotCQkJCSgodTY0KSBsb3dfYmFzZSAmIDB4RkZGRjAwMDApKSkgPDwgODsKKwlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgoKHU2NCloaWdoX2Jhc2UgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAorCQkJICAgICAgICgoKHU2NClsb3dfYmFzZSAgJiAweEZGRkYwMDAwKSA8PCA4KTsKIAogCWxvd19vZmZzZXQgPSBLOF9EUkFNX0xJTUlUX0xPVyArIChkcmFtIDw8IDMpOwogCWhpZ2hfb2Zmc2V0ID0gRjEwX0RSQU1fTElNSVRfSElHSCArIChkcmFtIDw8IDMpOwpAQCAtMTM5OCw5ICsxMzkwLDkgQEAKIAkgKiBFeHRyYWN0IGFkZHJlc3MgdmFsdWVzIGFuZCBmb3JtIGEgTElNSVQgYWRkcmVzcy4gTGltaXQgaXMgdGhlIEhJR0hFU1QKIAkgKiBtZW1vcnkgbG9jYXRpb24gb2YgdGhlIHJlZ2lvbiwgc28gbG93IDI0IGJpdHMgbmVlZCB0byBiZSBhbGwgb25lcy4KIAkgKi8KLQlsb3dfbGltaXQgfD0gMHgwMDAwRkZGRjsKLQlwdnQtPmRyYW1fbGltaXRbZHJhbV0gPQotCQkoKCgodTY0KSBoaWdoX2xpbWl0IDw8IDMyKSArICh1NjQpIGxvd19saW1pdCkgPDwgOCkgfCAoMHhGRik7CisJcHZ0LT5kcmFtX2xpbWl0W2RyYW1dID0gKCgodTY0KWhpZ2hfbGltaXQgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAorCQkJCSgoKHU2NCkgbG93X2xpbWl0ICYgMHhGRkZGMDAwMCkgPDwgOCkgfAorCQkJCTB4MDBGRkZGRkY7CiB9CiAKIHN0YXRpYyB2b2lkIGYxMF9yZWFkX2RyYW1fY3RsX3JlZ2lzdGVyKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKQEAgLTE1NjYsNyArMTU1OCw3IEBACiAKIAlkZWJ1Z2YxKCJJbnB1dEFkZHI9MHgleCAgY2hhbm5lbHNlbGVjdD0lZFxuIiwgaW5fYWRkciwgY3MpOwogCi0JZm9yIChjc3JvdyA9IDA7IGNzcm93IDwgQ0hJUFNFTEVDVF9DT1VOVDsgY3Nyb3crKykgeworCWZvciAoY3Nyb3cgPSAwOyBjc3JvdyA8IHB2dC0+Y3NfY291bnQ7IGNzcm93KyspIHsKIAogCQljc19iYXNlID0gYW1kNjRfZ2V0X2RjdF9iYXNlKHB2dCwgY3MsIGNzcm93KTsKIAkJaWYgKCEoY3NfYmFzZSAmIEs4X0RDU0JfQ1NfRU5BQkxFKSkKQEAgLTIyNjIsNyArMjI1NCw3IEBACiB7CiAJdTMyIGVjICA9IEVSUk9SX0NPREUoaW5mby0+bmJzbCk7CiAJdTMyIHhlYyA9IEVYVF9FUlJPUl9DT0RFKGluZm8tPm5ic2wpOwotCWludCBlY2NfdHlwZSA9IGluZm8tPm5ic2ggJiAoMHgzIDw8IDEzKTsKKwlpbnQgZWNjX3R5cGUgPSAoaW5mby0+bmJzaCA+PiAxMykgJiAweDM7CiAKIAkvKiBCYWlsIGVhcmx5IG91dCBpZiB0aGlzIHdhcyBhbiAnb2JzZXJ2ZWQnIGVycm9yICovCiAJaWYgKFBQKGVjKSA9PSBLOF9OQlNMX1BQX09CUykKQEAgLTI0OTcsNyArMjQ4OSw3IEBACiAgKiBOT1RFOiBDUFUgUmV2aXNpb24gRGVwZW5kZW50IGNvZGUKICAqCiAgKiBJbnB1dDoKLSAqCUBjc3Jvd19uciBDaGlwU2VsZWN0IFJvdyBOdW1iZXIgKDAuLkNISVBTRUxFQ1RfQ09VTlQtMSkKKyAqCUBjc3Jvd19uciBDaGlwU2VsZWN0IFJvdyBOdW1iZXIgKDAuLnB2dC0+Y3NfY291bnQtMSkKICAqCWs4IHByaXZhdGUgcG9pbnRlciB0byAtLT4KICAqCQkJRFJBTSBCYW5rIEFkZHJlc3MgbWFwcGluZyByZWdpc3RlcgogICoJCQlub2RlX2lkCkBAIC0yNTc3LDcgKzI1NjksNyBAQAogCQkocHZ0LT5uYmNmZyAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIgogCQkpOwogCi0JZm9yIChpID0gMDsgaSA8IENISVBTRUxFQ1RfQ09VTlQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwdnQtPmNzX2NvdW50OyBpKyspIHsKIAkJY3Nyb3cgPSAmbWNpLT5jc3Jvd3NbaV07CiAKIAkJaWYgKChwdnQtPmRjc2IwW2ldICYgSzhfRENTQl9DU19FTkFCTEUpID09IDApIHsKQEAgLTI5ODgsNyArMjk4MCw3IEBACiAJCWdvdG8gZXJyX2V4aXQ7CiAKIAlyZXQgPSAtRU5PTUVNOwotCW1jaSA9IGVkYWNfbWNfYWxsb2MoMCwgQ0hJUFNFTEVDVF9DT1VOVCwgcHZ0LT5jaGFubmVsX2NvdW50LCBub2RlX2lkKTsKKwltY2kgPSBlZGFjX21jX2FsbG9jKDAsIHB2dC0+Y3NfY291bnQsIHB2dC0+Y2hhbm5lbF9jb3VudCwgbm9kZV9pZCk7CiAJaWYgKCFtY2kpCiAJCWdvdG8gZXJyX2V4aXQ7CiAKQEAgLTMxNzEsNyArMzE2Myw3IEBACiAJb3BzdGF0ZV9pbml0KCk7CiAKIAlpZiAoY2FjaGVfazhfbm9ydGhicmlkZ2VzKCkgPCAwKQotCQlnb3RvIGVycl9leGl0OworCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CiAJaWYgKGVycikKQEAgLTMxOTcsOCArMzE4OSw2IEBACiAKIGVycl8ybmRfc3RhZ2U6CiAJZGVidWdmMCgiMm5kIHN0YWdlIGZhaWxlZFxuIik7Ci0KLWVycl9leGl0OgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaCBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKaW5kZXggOGVhMDdlMi4uYzZmMzU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAorKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCkBAIC0xMzIsNiArMTMyLDggQEAKICNkZWZpbmUgRURBQ19BTUQ2NF9WRVJTSU9OCQkiIFZlcjogMy4yLjAgIiBfX0RBVEVfXwogI2RlZmluZSBFREFDX01PRF9TVFIJCQkiYW1kNjRfZWRhYyIKIAorI2RlZmluZSBFREFDX01BWF9OVU1OT0RFUwkJOAorCiAvKiBFeHRlbmRlZCBNb2RlbCBmcm9tIENQVUlELCBmb3IgQ1BVIFJldmlzaW9uIG51bWJlcnMgKi8KICNkZWZpbmUgT1BURVJPTl9DUFVfTEVfUkVWX0MJCTAKICNkZWZpbmUgT1BURVJPTl9DUFVfUkVWX0QJCTEKQEAgLTE0Miw3ICsxNDQsNyBAQAogI2RlZmluZSBPUFRFUk9OX0NQVV9SRVZfRkEJCTUKIAogLyogSGFyZHdhcmUgbGltaXQgb24gQ2hpcFNlbGVjdCByb3dzIHBlciBNQyBhbmQgcHJvY2Vzc29ycyBwZXIgc3lzdGVtICovCi0jZGVmaW5lIENISVBTRUxFQ1RfQ09VTlQJCTgKKyNkZWZpbmUgTUFYX0NTX0NPVU5UCQkJOAogI2RlZmluZSBEUkFNX1JFR19DT1VOVAkJCTgKIAogCkBAIC0xOTMsNyArMTk1LDYgQEAKICAqLwogI2RlZmluZSBSRVZfRV9EQ1NCX0JBU0VfQklUUwkJKDB4RkZFMEZFMDBVTEwpCiAjZGVmaW5lIFJFVl9FX0RDU19TSElGVAkJCTQKLSNkZWZpbmUgUkVWX0VfRENTTV9DT1VOVAkJOAogCiAjZGVmaW5lIFJFVl9GX0YxWGhfRENTQl9CQVNFX0JJVFMJKDB4MUZGODNGRTBVTEwpCiAjZGVmaW5lIFJFVl9GX0YxWGhfRENTX1NISUZUCQk4CkBAIC0yMDQsOSArMjA1LDYgQEAKICAqLwogI2RlZmluZSBSRVZfRl9EQ1NCX0JBU0VfQklUUwkJKDB4MUZGODNGRTBVTEwpCiAjZGVmaW5lIFJFVl9GX0RDU19TSElGVAkJCTgKLSNkZWZpbmUgUkVWX0ZfRENTTV9DT1VOVAkJNAotI2RlZmluZSBGMTBfRENTTV9DT1VOVAkJCTQKLSNkZWZpbmUgRjExX0RDU01fQ09VTlQJCQkyCiAKIC8qIERSQU0gQ1MgTWFzayBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSzhfRENTTTAJCQkweDYwCkBAIC0zNzQsMTMgKzM3MiwxMSBAQAogCiAjZGVmaW5lIFNFVF9OQl9EUkFNX0lOSkVDVElPTl9XUklURSh3b3JkLCBiaXRzKSAgXAogCQkJCQkoQklUKCgod29yZCkgJiAweEYpICsgMjApIHwgXAotCQkJCQlCSVQoMTcpIHwgIFwKLQkJCQkJKChiaXRzKSAmIDB4RikpCisJCQkJCUJJVCgxNykgfCBiaXRzKQogCiAjZGVmaW5lIFNFVF9OQl9EUkFNX0lOSkVDVElPTl9SRUFEKHdvcmQsIGJpdHMpICBcCiAJCQkJCShCSVQoKCh3b3JkKSAmIDB4RikgKyAyMCkgfCBcCi0JCQkJCUJJVCgxNikgfCAgXAotCQkJCQkoKGJpdHMpICYgMHhGKSkKKwkJCQkJQklUKDE2KSB8ICBiaXRzKQogCiAjZGVmaW5lIEs4X05CQ0FQCQkJMHhFOAogI2RlZmluZSBLOF9OQkNBUF9DT1JFUwkJCShCSVQoMTIpfEJJVCgxMykpCkBAIC00NDUsMTIgKzQ0MSwxMiBAQAogCXUzMiBkYmFtMTsJCS8qIERSQU0gQmFzZSBBZGRyZXNzIE1hcHBpbmcgcmVnIGZvciBEQ1QxICovCiAKIAkvKiBEUkFNIENTIEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMgRjJ4WzEsMF1bNUM6NDBdICovCi0JdTMyIGRjc2IwW0NISVBTRUxFQ1RfQ09VTlRdOwotCXUzMiBkY3NiMVtDSElQU0VMRUNUX0NPVU5UXTsKKwl1MzIgZGNzYjBbTUFYX0NTX0NPVU5UXTsKKwl1MzIgZGNzYjFbTUFYX0NTX0NPVU5UXTsKIAogCS8qIERSQU0gQ1MgTWFzayBSZWdpc3RlcnMgRjJ4WzEsMF1bNkM6NjBdICovCi0JdTMyIGRjc20wW0NISVBTRUxFQ1RfQ09VTlRdOwotCXUzMiBkY3NtMVtDSElQU0VMRUNUX0NPVU5UXTsKKwl1MzIgZGNzbTBbTUFYX0NTX0NPVU5UXTsKKwl1MzIgZGNzbTFbTUFYX0NTX0NPVU5UXTsKIAogCS8qCiAJICogRGVjb2RlZCBwYXJ0cyBvZiBEUkFNIEJBU0UgYW5kIExJTUlUIFJlZ2lzdGVycwpAQCAtNDcwLDYgKzQ2Niw3IEBACiAJICovCiAJdTMyIGRjc2JfYmFzZTsJCS8qIERDU0IgYmFzZSBiaXRzICovCiAJdTMyIGRjc21fbWFzazsJCS8qIERDU00gbWFzayBiaXRzICovCisJdTMyIGNzX2NvdW50OwkJLyogbnVtIGNoaXAgc2VsZWN0cyAoPT0gbnVtIERDU0IgcmVnaXN0ZXJzKSAqLwogCXUzMiBudW1fZGNzbTsJCS8qIE51bWJlciBvZiBEQ1NNIHJlZ2lzdGVycyAqLwogCXUzMiBkY3NfbWFza19ub3R1c2VkOwkvKiBEQ1NNIG5vdHVzZWQgbWFzayBiaXRzICovCiAJdTMyIGRjc19zaGlmdDsJCS8qIERDU0IgYW5kIERDU00gc2hpZnQgdmFsdWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfaW5qLmMKaW5kZXggZDM2NzViNy4uMjlmMWY3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfaW5qLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfaW5qLmMKQEAgLTEsNSArMSwxMSBAQAogI2luY2x1ZGUgImFtZDY0X2VkYWMuaCIKIAorc3RhdGljIHNzaXplX3QgYW1kNjRfaW5qZWN0X3NlY3Rpb25fc2hvdyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXhcbiIsIHB2dC0+aW5qZWN0aW9uLnNlY3Rpb24pOworfQorCiAvKgogICogc3RvcmUgZXJyb3IgaW5qZWN0aW9uIHNlY3Rpb24gdmFsdWUgd2hpY2ggcmVmZXJzIHRvIG9uZSBvZiA0IDE2LWJ5dGUgc2VjdGlvbnMKICAqIHdpdGhpbiBhIDY0LWJ5dGUgY2FjaGVsaW5lCkBAIC0xNSwxMiArMjEsMjYgQEAKIAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGRhdGEsIDEwLCAmdmFsdWUpOwogCWlmIChyZXQgIT0gLUVJTlZBTCkgeworCisJCWlmICh2YWx1ZSA+IDMpIHsKKwkJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsCisJCQkJICAgICAiJXM6IGludmFsaWQgc2VjdGlvbiAweCVseFxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCB2YWx1ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCiAJCXB2dC0+aW5qZWN0aW9uLnNlY3Rpb24gPSAodTMyKSB2YWx1ZTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBhbWQ2NF9pbmplY3Rfd29yZF9zaG93KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHgleFxuIiwgcHZ0LT5pbmplY3Rpb24ud29yZCk7Cit9CisKIC8qCiAgKiBzdG9yZSBlcnJvciBpbmplY3Rpb24gd29yZCB2YWx1ZSB3aGljaCByZWZlcnMgdG8gb25lIG9mIDkgMTYtYml0IHdvcmQgb2YgdGhlCiAgKiAxNi1ieXRlICgxMjgtYml0ICsgRUNDIGJpdHMpIHNlY3Rpb24KQEAgLTM3LDE0ICs1NywyNSBAQAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGRhdGEsIDEwLCAmdmFsdWUpOwogCWlmIChyZXQgIT0gLUVJTlZBTCkgewogCi0JCXZhbHVlID0gKHZhbHVlIDw9IDgpID8gdmFsdWUgOiAwOwotCQlwdnQtPmluamVjdGlvbi53b3JkID0gKHUzMikgdmFsdWU7CisJCWlmICh2YWx1ZSA+IDgpIHsKKwkJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsCisJCQkJICAgICAiJXM6IGludmFsaWQgd29yZCAweCVseFxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCB2YWx1ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCisJCXB2dC0+aW5qZWN0aW9uLndvcmQgPSAodTMyKSB2YWx1ZTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBhbWQ2NF9pbmplY3RfZWNjX3ZlY3Rvcl9zaG93KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHgleFxuIiwgcHZ0LT5pbmplY3Rpb24uYml0X21hcCk7Cit9CisKIC8qCiAgKiBzdG9yZSAxNiBiaXQgZXJyb3IgaW5qZWN0aW9uIHZlY3RvciB3aGljaCBlbmFibGVzIGluamVjdGluZyBlcnJvcnMgdG8gdGhlCiAgKiBjb3JyZXNwb25kaW5nIGJpdCB3aXRoaW4gdGhlIGVycm9yIGluamVjdGlvbiB3b3JkIGFib3ZlLiBXaGVuIHVzZWQgZHVyaW5nIGEKQEAgLTYwLDggKzkxLDE0IEBACiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTYsICZ2YWx1ZSk7CiAJaWYgKHJldCAhPSAtRUlOVkFMKSB7CiAKLQkJcHZ0LT5pbmplY3Rpb24uYml0X21hcCA9ICh1MzIpIHZhbHVlICYgMHhGRkZGOworCQlpZiAodmFsdWUgJiAweEZGRkYwMDAwKSB7CisJCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLAorCQkJCSAgICAgIiVzOiBpbnZhbGlkIEVjY1ZlY3RvcjogMHglbHhcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgdmFsdWUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAorCQlwdnQtPmluamVjdGlvbi5iaXRfbWFwID0gKHUzMikgdmFsdWU7CiAJCXJldHVybiBjb3VudDsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTE0Nyw3ICsxODQsNyBAQAogCQkJLm5hbWUgPSAiaW5qZWN0X3NlY3Rpb24iLAogCQkJLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpCiAJCX0sCi0JCS5zaG93ID0gTlVMTCwKKwkJLnNob3cgPSBhbWQ2NF9pbmplY3Rfc2VjdGlvbl9zaG93LAogCQkuc3RvcmUgPSBhbWQ2NF9pbmplY3Rfc2VjdGlvbl9zdG9yZSwKIAl9LAogCXsKQEAgLTE1NSw3ICsxOTIsNyBAQAogCQkJLm5hbWUgPSAiaW5qZWN0X3dvcmQiLAogCQkJLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpCiAJCX0sCi0JCS5zaG93ID0gTlVMTCwKKwkJLnNob3cgPSBhbWQ2NF9pbmplY3Rfd29yZF9zaG93LAogCQkuc3RvcmUgPSBhbWQ2NF9pbmplY3Rfd29yZF9zdG9yZSwKIAl9LAogCXsKQEAgLTE2Myw3ICsyMDAsNyBAQAogCQkJLm5hbWUgPSAiaW5qZWN0X2VjY192ZWN0b3IiLAogCQkJLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpCiAJCX0sCi0JCS5zaG93ID0gTlVMTCwKKwkJLnNob3cgPSBhbWQ2NF9pbmplY3RfZWNjX3ZlY3Rvcl9zaG93LAogCQkuc3RvcmUgPSBhbWQ2NF9pbmplY3RfZWNjX3ZlY3Rvcl9zdG9yZSwKIAl9LAogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYwppbmRleCAwYzIxYzM3Li43MTNlZDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jCkBAIC0zLDYgKzMsNyBAQAogCiBzdGF0aWMgYm9vbCByZXBvcnRfZ2FydF9lcnJvcnM7CiBzdGF0aWMgdm9pZCAoKm5iX2J1c19kZWNvZGVyKShpbnQgbm9kZV9pZCwgc3RydWN0IGVycl9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkICgqb3JpZ19tY2VfY2FsbGJhY2spKHN0cnVjdCBtY2UgKm0pOwogCiB2b2lkIGFtZF9yZXBvcnRfZ2FydF9lcnJvcnMoYm9vbCB2KQogewpAQCAtMzYyLDcgKzM2Myw3IEBACiAJCXByX3dhcm5pbmcoIkh1aD8gVW5rbm93biBNQ0UgZXJyb3IgMHgleFxuIiwgZWMpOwogfQogCi12b2lkIGRlY29kZV9tY2Uoc3RydWN0IG1jZSAqbSkKK3N0YXRpYyB2b2lkIGFtZF9kZWNvZGVfbWNlKHN0cnVjdCBtY2UgKm0pCiB7CiAJc3RydWN0IGVycl9yZWdzIHJlZ3M7CiAJaW50IG5vZGUsIGVjYzsKQEAgLTQyMCwzICs0MjEsMzIgQEAKIAogCWFtZF9kZWNvZGVfZXJyX2NvZGUobS0+c3RhdHVzICYgMHhmZmZmKTsKIH0KKworc3RhdGljIGludCBfX2luaXQgbWNlX2FtZF9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBXZSBjYW4gZGVjb2RlIE1DRXMgZm9yIE9wdGVyb24gYW5kIGxhdGVyIENQVXM6CisJICovCisJaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmCisJICAgIChib290X2NwdV9kYXRhLng4NiA+PSAweGYpKSB7CisJCS8qIHNhZmUgdGhlIGRlZmF1bHQgZGVjb2RlIG1jZSBjYWxsYmFjayAqLworCQlvcmlnX21jZV9jYWxsYmFjayA9IHg4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrOworCisJCXg4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrID0gYW1kX2RlY29kZV9tY2U7CisJfQorCisJcmV0dXJuIDA7Cit9CitlYXJseV9pbml0Y2FsbChtY2VfYW1kX2luaXQpOworCisjaWZkZWYgTU9EVUxFCitzdGF0aWMgdm9pZCBfX2V4aXQgbWNlX2FtZF9leGl0KHZvaWQpCit7CisJeDg2X21jZV9kZWNvZGVfY2FsbGJhY2sgPSBvcmlnX21jZV9jYWxsYmFjazsKK30KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQgTUNFIGRlY29kZXIiKTsKK01PRFVMRV9BTElBUygiZWRhYy1tY2UtYW1kIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfZXhpdChtY2VfYW1kX2V4aXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYwppbmRleCBkMzM1MDg2Li43N2E5NTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKQEAgLTExNzMsNyArMTE3Myw3IEBACiAJCQlwY2lfcmVhZF9jb25maWdfd29yZChwdnQtPmJyYW5jaF8xLCB3aGVyZSwKIAkJCQkJJnB2dC0+YjFfbXRyW3Nsb3Rfcm93XSk7CiAJCQlkZWJ1Z2YyKCJNVFIlZCB3aGVyZT0weCV4IEIxIHZhbHVlPTB4JXhcbiIsIHNsb3Rfcm93LAotCQkJCXdoZXJlLCBwdnQtPmIwX210cltzbG90X3Jvd10pOworCQkJCXdoZXJlLCBwdnQtPmIxX210cltzbG90X3Jvd10pOwogCQl9IGVsc2UgewogCQkJcHZ0LT5iMV9tdHJbc2xvdF9yb3ddID0gMDsKIAkJfQpAQCAtMTIzMiw3ICsxMjMyLDcgQEAKIAlzdHJ1Y3QgY3Nyb3dfaW5mbyAqcF9jc3JvdzsKIAlpbnQgZW1wdHksIGNoYW5uZWxfY291bnQ7CiAJaW50IG1heF9jc3Jvd3M7Ci0JaW50IG10cjsKKwlpbnQgbXRyLCBtdHIxOwogCWludCBjc3Jvd19tZWdzOwogCWludCBjaGFubmVsOwogCWludCBjc3JvdzsKQEAgLTEyNTEsOSArMTI1MSwxMCBAQAogCiAJCS8qIHVzZSBicmFuY2ggMCBmb3IgdGhlIGJhc2lzICovCiAJCW10ciA9IHB2dC0+YjBfbXRyW2Nzcm93ID4+IDFdOworCQltdHIxID0gcHZ0LT5iMV9tdHJbY3Nyb3cgPj4gMV07CiAKIAkJLyogaWYgbm8gRElNTVMgb24gdGhpcyByb3csIGNvbnRpbnVlICovCi0JCWlmICghTVRSX0RJTU1TX1BSRVNFTlQobXRyKSkKKwkJaWYgKCFNVFJfRElNTVNfUFJFU0VOVChtdHIpICYmICFNVFJfRElNTVNfUFJFU0VOVChtdHIxKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIEZBS0UgT1VUIFZBTFVFUywgRklYTUUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCmluZGV4IGIwOGI2ZDguLmY5OWQxMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYwpAQCAtNDYsOSArNDYsMTAgQEAKIC8qIExpbWl0cyBmb3IgaTU0MDAgKi8KICNkZWZpbmUgTlVNX01UUlNfUEVSX0JSQU5DSAk0CiAjZGVmaW5lIENIQU5ORUxTX1BFUl9CUkFOQ0gJMgorI2RlZmluZSBNQVhfRElNTVNfUEVSX0NIQU5ORUwJTlVNX01UUlNfUEVSX0JSQU5DSAogI2RlZmluZQlNQVhfQ0hBTk5FTFMJCTQKLSNkZWZpbmUgTUFYX0RJTU1TCQkoTUFYX0NIQU5ORUxTICogNCkJLyogVXAgdG8gNCBESU1NJ3MgcGVyIGNoYW5uZWwgKi8KLSNkZWZpbmUgTUFYX0NTUk9XUwkJKE1BWF9ESU1NUyAqIDIpCQkvKiBtYXggcG9zc2libGUgY3Nyb3dzIHBlciBjaGFubmVsICovCisvKiBtYXggcG9zc2libGUgY3Nyb3dzIHBlciBjaGFubmVsICovCisjZGVmaW5lIE1BWF9DU1JPV1MJCShNQVhfRElNTVNfUEVSX0NIQU5ORUwpCiAKIC8qIERldmljZSAxNiwKICAqIEZ1bmN0aW9uIDA6IFN5c3RlbSBBZGRyZXNzCkBAIC0zMzEsNyArMzMyLDYgQEAKIAogc3RydWN0IGk1NDAwX2RpbW1faW5mbyB7CiAJaW50IG1lZ2FieXRlczsJCS8qIHNpemUsIDAgbWVhbnMgbm90IHByZXNlbnQgICovCi0JaW50IGR1YWxfcmFuazsKIH07CiAKIC8qIGRyaXZlciBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCkBAIC04NDksMTEgKzg0OSw5IEBACiAJaW50IG47CiAKIAkvKiBUaGVyZSBpcyBvbmUgTVRSIGZvciBlYWNoIHNsb3QgcGFpciBvZiBGQi1ESU1NcywKLQkgICBFYWNoIHNsb3QgbWF5IGhhdmUgb25lIG9yIHR3byByYW5rcyAoMiBjc3Jvd3MpLAogCSAgIEVhY2ggc2xvdCBwYWlyIG1heSBiZSBhdCBicmFuY2ggMCBvciBicmFuY2ggMS4KLQkgICBTbywgY3Nyb3cgc2hvdWxkIGJlIGRpdmlkZWQgYnkgZWlnaHQKIAkgKi8KLQluID0gY3Nyb3cgPj4gMzsKKwluID0gY3Nyb3c7CiAKIAlpZiAobiA+PSBOVU1fTVRSU19QRVJfQlJBTkNIKSB7CiAJCWRlYnVnZjAoIkVSUk9SOiB0cnlpbmcgdG8gYWNjZXNzIGFuIGludmFsaWQgY3Nyb3c6ICVkXG4iLApAQCAtOTA1LDI1ICs5MDMsMjIgQEAKIAkJYW1iX3ByZXNlbnRfcmVnID0gZGV0ZXJtaW5lX2FtYl9wcmVzZW50X3JlZyhwdnQsIGNoYW5uZWwpOwogCiAJCS8qIERldGVybWluZSBpZiB0aGVyZSBpcyBhIERJTU0gcHJlc2VudCBpbiB0aGlzIERJTU0gc2xvdCAqLwotCQlpZiAoYW1iX3ByZXNlbnRfcmVnICYgKDEgPDwgKGNzcm93ID4+IDEpKSkgewotCQkJZGluZm8tPmR1YWxfcmFuayA9IE1UUl9ESU1NX1JBTksobXRyKTsKKwkJaWYgKGFtYl9wcmVzZW50X3JlZyAmICgxIDw8IGNzcm93KSkgeworCQkJLyogU3RhcnQgd2l0aCB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIGEgQmFuaworCQkJICogb24gdGhlIERSQU0gKi8KKwkJCWFkZHJCaXRzID0gTVRSX0RSQU1fQkFOS1NfQUREUl9CSVRTKG10cik7CisJCQkvKiBBZGQgdGhlbnVtYmVyIG9mIFJPVyBiaXRzICovCisJCQlhZGRyQml0cyArPSBNVFJfRElNTV9ST1dTX0FERFJfQklUUyhtdHIpOworCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgQ09MVU1OIGJpdHMgKi8KKwkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX0NPTFNfQUREUl9CSVRTKG10cik7CisJCQkvKiBhZGQgdGhlIG51bWJlciBvZiBSQU5LIGJpdHMgKi8KKwkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX1JBTksobXRyKTsKIAotCQkJaWYgKCEoKGRpbmZvLT5kdWFsX3JhbmsgPT0gMCkgJiYKLQkJCQkoKGNzcm93ICYgMHgxKSA9PSAweDEpKSkgewotCQkJCS8qIFN0YXJ0IHdpdGggdGhlIG51bWJlciBvZiBiaXRzIGZvciBhIEJhbmsKLQkJCQkgKiBvbiB0aGUgRFJBTSAqLwotCQkJCWFkZHJCaXRzID0gTVRSX0RSQU1fQkFOS1NfQUREUl9CSVRTKG10cik7Ci0JCQkJLyogQWRkIHRoZW51bWJlciBvZiBST1cgYml0cyAqLwotCQkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX1JPV1NfQUREUl9CSVRTKG10cik7Ci0JCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgQ09MVU1OIGJpdHMgKi8KLQkJCQlhZGRyQml0cyArPSBNVFJfRElNTV9DT0xTX0FERFJfQklUUyhtdHIpOworCQkJYWRkckJpdHMgKz0gNjsJLyogYWRkIDY0IGJpdHMgcGVyIERJTU0gKi8KKwkJCWFkZHJCaXRzIC09IDIwOwkvKiBkaXZpZGUgYnkgMl5eMjAgKi8KKwkJCWFkZHJCaXRzIC09IDM7CS8qIDggYml0cyBwZXIgYnl0ZXMgKi8KIAotCQkJCWFkZHJCaXRzICs9IDY7CS8qIGFkZCA2NCBiaXRzIHBlciBESU1NICovCi0JCQkJYWRkckJpdHMgLT0gMjA7CS8qIGRpdmlkZSBieSAyXl4yMCAqLwotCQkJCWFkZHJCaXRzIC09IDM7CS8qIDggYml0cyBwZXIgYnl0ZXMgKi8KLQotCQkJCWRpbmZvLT5tZWdhYnl0ZXMgPSAxIDw8IGFkZHJCaXRzOwotCQkJfQorCQkJZGluZm8tPm1lZ2FieXRlcyA9IDEgPDwgYWRkckJpdHM7CiAJCX0KIAl9CiB9CkBAIC05NTEsMTIgKzk0NiwxMiBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogU2NhbiBhbGwgdGhlIGFjdHVhbCBDU1JPV1MgKHdoaWNoIGlzICMgb2YgRElNTVMgKiAyKQorCS8qIFNjYW4gYWxsIHRoZSBhY3R1YWwgQ1NST1dTCiAJICogYW5kIGNhbGN1bGF0ZSB0aGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggRElNTQogCSAqIFN0YXJ0IHdpdGggdGhlIGhpZ2hlc3QgY3Nyb3cgZmlyc3QsIHRvIGRpc3BsYXkgaXQgZmlyc3QKIAkgKiBhbmQgd29yayB0b3dhcmQgdGhlIDB0aCBjc3JvdwogCSAqLwotCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaCAqIDI7CisJbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoOwogCWZvciAoY3Nyb3cgPSBtYXhfY3Nyb3dzIC0gMTsgY3Nyb3cgPj0gMDsgY3Nyb3ctLSkgewogCiAJCS8qIG9uIGFuIG9kZCBjc3JvdywgZmlyc3Qgb3V0cHV0IGEgJ2JvdW5kYXJ5JyBtYXJrZXIsCkBAIC0xMDY0LDcgKzEwNTksNyBAQAogCiAJLyogR2V0IHRoZSBzZXQgb2YgTVRSWzAtM10gcmVncyBieSBlYWNoIGJyYW5jaCAqLwogCWZvciAoc2xvdF9yb3cgPSAwOyBzbG90X3JvdyA8IE5VTV9NVFJTX1BFUl9CUkFOQ0g7IHNsb3Rfcm93KyspIHsKLQkJaW50IHdoZXJlID0gTVRSMCArIChzbG90X3JvdyAqIHNpemVvZih1MzIpKTsKKwkJaW50IHdoZXJlID0gTVRSMCArIChzbG90X3JvdyAqIHNpemVvZih1MTYpKTsKIAogCQkvKiBCcmFuY2ggMCBzZXQgb2YgTVRSIHJlZ2lzdGVycyAqLwogCQlwY2lfcmVhZF9jb25maWdfd29yZChwdnQtPmJyYW5jaF8wLCB3aGVyZSwKQEAgLTExNDYsNyArMTE0MSw3IEBACiAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIAogCWNoYW5uZWxfY291bnQgPSBwdnQtPm1heGNoOwotCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaCAqIDI7CisJbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoOwogCiAJZW1wdHkgPSAxOwkJLyogQXNzdW1lIE5PIG1lbW9yeSAqLwogCkBAIC0xMjE1LDI4ICsxMjEwLDYgQEAKIH0KIAogLyoKLSAqIGk1NDAwX2dldF9kaW1tX2FuZF9jaGFubmVsX2NvdW50cyhwZGV2LCAmbnVtX2Nzcm93cywgJm51bV9jaGFubmVscykKLSAqCi0gKglhc2sgdGhlIGRldmljZSBob3cgbWFueSBjaGFubmVscyBhcmUgcHJlc2VudCBhbmQgaG93IG1hbnkgQ1NST1dTCi0gKgkgYXMgd2VsbAotICovCi1zdGF0aWMgdm9pZCBpNTQwMF9nZXRfZGltbV9hbmRfY2hhbm5lbF9jb3VudHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCWludCAqbnVtX2RpbW1zX3Blcl9jaGFubmVsLAotCQkJCQlpbnQgKm51bV9jaGFubmVscykKLXsKLQl1OCB2YWx1ZTsKLQotCS8qIE5lZWQgdG8gcmV0cmlldmUganVzdCBob3cgbWFueSBjaGFubmVscyBhbmQgZGltbXMgcGVyIGNoYW5uZWwgYXJlCi0JICogc3VwcG9ydGVkIG9uIHRoaXMgbWVtb3J5IGNvbnRyb2xsZXIKLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBNQVhESU1NUEVSQ0gsICZ2YWx1ZSk7Ci0JKm51bV9kaW1tc19wZXJfY2hhbm5lbCA9IChpbnQpdmFsdWUgKiAyOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgTUFYQ0gsICZ2YWx1ZSk7Ci0JKm51bV9jaGFubmVscyA9IChpbnQpdmFsdWU7Ci19Ci0KLS8qCiAgKglpNTQwMF9wcm9iZTEJUHJvYmUgZm9yIE9ORSBpbnN0YW5jZSBvZiBkZXZpY2UgdG8gc2VlIGlmIGl0IGlzCiAgKgkJCXByZXNlbnQuCiAgKglyZXR1cm46CkBAIC0xMjYzLDIyICsxMjM2LDE2IEBACiAJaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIEFzayB0aGUgZGV2aWNlcyBmb3IgdGhlIG51bWJlciBvZiBDU1JPV1MgYW5kIENIQU5ORUxTIHNvCi0JICogdGhhdCB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBtZW1vcnkgcmVzb3VyY2VzLCBldGMKLQkgKgotCSAqIFRoZSBDaGlwc2V0IHdpbGwgcmVwb3J0IHdoYXQgaXQgY2FuIGhhbmRsZSB3aGljaCB3aWxsIGJlIGdyZWF0ZXIKLQkgKiBvciBlcXVhbCB0byB3aGF0IHRoZSBtb3RoZXJib2FyZCBtYW51ZmFjdHVyZXIgd2lsbCBpbXBsZW1lbnQuCi0JICoKLQkgKiBBcyB3ZSBkb24ndCBoYXZlIGEgbW90aGVyYm9hcmQgaWRlbnRpZmljYXRpb24gcm91dGluZSB0byBkZXRlcm1pbmUKKwkvKiBBcyB3ZSBkb24ndCBoYXZlIGEgbW90aGVyYm9hcmQgaWRlbnRpZmljYXRpb24gcm91dGluZSB0byBkZXRlcm1pbmUKIAkgKiBhY3R1YWwgbnVtYmVyIG9mIHNsb3RzL2RpbW1zIHBlciBjaGFubmVsLCB3ZSB0aHVzIHV0aWxpemUgdGhlCiAJICogcmVzb3VyY2UgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjaGlwc2V0LiBUaHVzLCB3ZSBtaWdodCBoYXZlCiAJICogaGF2ZSBtb3JlIERJTU1zIHBlciBjaGFubmVsIHRoYW4gYWN0dWFsbHkgb24gdGhlIG1vYm8sIGJ1dCB0aGlzCiAJICogYWxsb3dzIHRoZSBkcml2ZXIgdG8gc3VwcG9ydCB1cHRvIHRoZSBjaGlwc2V0IG1heCwgd2l0aG91dAogCSAqIHNvbWUgZmFuY3kgbW9ibyBkZXRlcm1pbmF0aW9uLgogCSAqLwotCWk1NDAwX2dldF9kaW1tX2FuZF9jaGFubmVsX2NvdW50cyhwZGV2LCAmbnVtX2RpbW1zX3Blcl9jaGFubmVsLAotCQkJCQkmbnVtX2NoYW5uZWxzKTsKLQludW1fY3Nyb3dzID0gbnVtX2RpbW1zX3Blcl9jaGFubmVsICogMjsKKwludW1fZGltbXNfcGVyX2NoYW5uZWwgPSBNQVhfRElNTVNfUEVSX0NIQU5ORUw7CisJbnVtX2NoYW5uZWxzID0gTUFYX0NIQU5ORUxTOworCW51bV9jc3Jvd3MgPSBudW1fZGltbXNfcGVyX2NoYW5uZWw7CiAKIAlkZWJ1Z2YwKCJNQzogJXMoKTogTnVtYmVyIG9mIC0gQ2hhbm5lbHM9ICVkICBESU1NUz0gJWQgIENTUk9XUz0gJWRcbiIsCiAJCV9fZnVuY19fLCBudW1fY2hhbm5lbHMsIG51bV9kaW1tc19wZXJfY2hhbm5lbCwgbnVtX2Nzcm93cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKaW5kZXggMTU3ZjY1MC4uY2YyNzQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwpAQCAtMjYsNyArMjYsOSBAQAogI2luY2x1ZGUgIm1wYzg1eHhfZWRhYy5oIgogCiBzdGF0aWMgaW50IGVkYWNfZGV2X2lkeDsKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW50IGVkYWNfcGNpX2lkeDsKKyNlbmRpZgogc3RhdGljIGludCBlZGFjX21jX2lkeDsKIAogc3RhdGljIHUzMiBvcmlnX2Rkcl9lcnJfZGlzYWJsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCmluZGV4IGNlZDE4NmQuLjUwODkzMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKaW5kZXggNTBmMDE3Ni4uOThkYmJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKQEAgLTE4OCwxNCArMTg4LDcgQEAKIC8qIEltcG9zc2libGUgbG9naW5faWQsIHRvIGRldGVjdCBsb2dvdXQgYXR0ZW1wdCBiZWZvcmUgc3VjY2Vzc2Z1bCBsb2dpbiAqLwogI2RlZmluZSBJTlZBTElEX0xPR0lOX0lEIDB4MTAwMDAKIAotLyoKLSAqIFBlciBzZWN0aW9uIDcuNC44IG9mIHRoZSBTQlAtMiBzcGVjLCBhIG1ndF9PUkJfdGltZW91dCB2YWx1ZSBjYW4gYmUKLSAqIHByb3ZpZGVkIGluIHRoZSBjb25maWcgcm9tLiBNb3N0IGRldmljZXMgZG8gcHJvdmlkZSBhIHZhbHVlLCB3aGljaAotICogd2UnbGwgdXNlIGZvciBsb2dpbiBtYW5hZ2VtZW50IG9yYnMsIGJ1dCB3aXRoIHNvbWUgc2FuZSBsaW1pdHMuCi0gKi8KLSNkZWZpbmUgU0JQMl9NSU5fTE9HSU5fT1JCX1RJTUVPVVQJNTAwMFUJLyogVGltZW91dCBpbiBtcyAqLwotI2RlZmluZSBTQlAyX01BWF9MT0dJTl9PUkJfVElNRU9VVAk0MDAwMFUJLyogVGltZW91dCBpbiBtcyAqLwotI2RlZmluZSBTQlAyX09SQl9USU1FT1VUCQkyMDAwVQkvKiBUaW1lb3V0IGluIG1zICovCisjZGVmaW5lIFNCUDJfT1JCX1RJTUVPVVQJCTIwMDBVCQkvKiBUaW1lb3V0IGluIG1zICovCiAjZGVmaW5lIFNCUDJfT1JCX05VTEwJCQkweDgwMDAwMDAwCiAjZGVmaW5lIFNCUDJfUkVUUllfTElNSVQJCTB4ZgkJLyogMTUgcmV0cmllcyAqLwogI2RlZmluZSBTQlAyX0NZQ0xFX0xJTUlUCQkoMHhjOCA8PCAxMikJLyogMjAwIDEyNXVzIGN5Y2xlcyAqLwpAQCAtMTAzNCw3ICsxMDI3LDYgQEAKIHsKIAlzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIGNpOwogCWludCBrZXksIHZhbHVlOwotCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCiAJZndfY3NyX2l0ZXJhdG9yX2luaXQoJmNpLCBkaXJlY3RvcnkpOwogCXdoaWxlIChmd19jc3JfaXRlcmF0b3JfbmV4dCgmY2ksICZrZXksICZ2YWx1ZSkpIHsKQEAgLTEwNTksMTcgKzEwNTEsNyBAQAogCiAJCWNhc2UgU0JQMl9DU1JfVU5JVF9DSEFSQUNURVJJU1RJQ1M6CiAJCQkvKiB0aGUgdGltZW91dCB2YWx1ZSBpcyBzdG9yZWQgaW4gNTAwbXMgdW5pdHMgKi8KLQkJCXRpbWVvdXQgPSAoKHVuc2lnbmVkIGludCkgdmFsdWUgPj4gOCAmIDB4ZmYpICogNTAwOwotCQkJdGltZW91dCA9IG1heCh0aW1lb3V0LCBTQlAyX01JTl9MT0dJTl9PUkJfVElNRU9VVCk7Ci0JCQl0Z3QtPm1ndF9vcmJfdGltZW91dCA9Ci0JCQkJICBtaW4odGltZW91dCwgU0JQMl9NQVhfTE9HSU5fT1JCX1RJTUVPVVQpOwotCi0JCQlpZiAodGltZW91dCA+IHRndC0+bWd0X29yYl90aW1lb3V0KQotCQkJCWZ3X25vdGlmeSgiJXM6IGNvbmZpZyByb20gY29udGFpbnMgJWRzICIKLQkJCQkJICAibWFuYWdlbWVudCBPUkIgdGltZW91dCwgbGltaXRpbmcgIgotCQkJCQkgICJ0byAlZHNcbiIsIHRndC0+YnVzX2lkLAotCQkJCQkgIHRpbWVvdXQgLyAxMDAwLAotCQkJCQkgIHRndC0+bWd0X29yYl90aW1lb3V0IC8gMTAwMCk7CisJCQl0Z3QtPm1ndF9vcmJfdGltZW91dCA9ICh2YWx1ZSA+PiA4ICYgMHhmZikgKiA1MDA7CiAJCQlicmVhazsKIAogCQljYXNlIFNCUDJfQ1NSX0xPR0lDQUxfVU5JVF9OVU1CRVI6CkBAIC0xMDg3LDYgKzEwNjksMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFBlciBzZWN0aW9uIDcuNC44IG9mIHRoZSBTQlAtMiBzcGVjLCBhIG1ndF9PUkJfdGltZW91dCB2YWx1ZSBjYW4gYmUKKyAqIHByb3ZpZGVkIGluIHRoZSBjb25maWcgcm9tLiBNb3N0IGRldmljZXMgZG8gcHJvdmlkZSBhIHZhbHVlLCB3aGljaAorICogd2UnbGwgdXNlIGZvciBsb2dpbiBtYW5hZ2VtZW50IG9yYnMsIGJ1dCB3aXRoIHNvbWUgc2FuZSBsaW1pdHMuCisgKi8KK3N0YXRpYyB2b2lkIHNicDJfY2xhbXBfbWFuYWdlbWVudF9vcmJfdGltZW91dChzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IHRndC0+bWd0X29yYl90aW1lb3V0OworCisJaWYgKHRpbWVvdXQgPiA0MDAwMCkKKwkJZndfbm90aWZ5KCIlczogJWRzIG1ndF9PUkJfdGltZW91dCBsaW1pdGVkIHRvIDQwc1xuIiwKKwkJCSAgdGd0LT5idXNfaWQsIHRpbWVvdXQgLyAxMDAwKTsKKworCXRndC0+bWd0X29yYl90aW1lb3V0ID0gY2xhbXBfdmFsKHRpbWVvdXQsIDUwMDAsIDQwMDAwKTsKK30KKwogc3RhdGljIHZvaWQgc2JwMl9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBzYnAyX3RhcmdldCAqdGd0LCB1MzIgbW9kZWwsCiAJCQkJICB1MzIgZmlybXdhcmVfcmV2aXNpb24pCiB7CkBAIC0xMTcxLDYgKzExNjksNyBAQAogCQkJICAgICAgICZmaXJtd2FyZV9yZXZpc2lvbikgPCAwKQogCQlnb3RvIGZhaWxfdGd0X3B1dDsKIAorCXNicDJfY2xhbXBfbWFuYWdlbWVudF9vcmJfdGltZW91dCh0Z3QpOwogCXNicDJfaW5pdF93b3JrYXJvdW5kcyh0Z3QsIG1vZGVsLCBmaXJtd2FyZV9yZXZpc2lvbik7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwppbmRleCA0MjBhOTZlLi4wNTFkMWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwpAQCAtOTM5LDcgKzkzOSw3IEBACiAKIAlpZiAoaWJmdF9hZGRyKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImlCRlQgZGV0ZWN0ZWQgYXQgMHglbGx4LlxuIiwKLQkJICAgICAgICh1NjQpdmlydF90b19waHlzKCh2b2lkICopaWJmdF9hZGRyKSk7CisJCSAgICAgICAodTY0KWlzYV92aXJ0X3RvX2J1cyhpYmZ0X2FkZHIpKTsKIAogCQlyYyA9IGliZnRfY2hlY2tfZGV2aWNlKCk7CiAJCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCmluZGV4IGQ1M2ZiYmYuLmRmYjE1YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYwpAQCAtNjUsMTAgKzY1LDEwIEBACiAJCSAqIHNvIHNraXAgdGhhdCBhcmVhICovCiAJCWlmIChwb3MgPT0gVkdBX01FTSkKIAkJCXBvcyArPSBWR0FfU0laRTsKLQkJdmlydCA9IHBoeXNfdG9fdmlydChwb3MpOworCQl2aXJ0ID0gaXNhX2J1c190b192aXJ0KHBvcyk7CiAJCWlmIChtZW1jbXAodmlydCwgSUJGVF9TSUdOLCBJQkZUX1NJR05fTEVOKSA9PSAwKSB7CiAJCQl1bnNpZ25lZCBsb25nICphZGRyID0KLQkJCSAgICAodW5zaWduZWQgbG9uZyAqKXBoeXNfdG9fdmlydChwb3MgKyA0KTsKKwkJCSAgICAodW5zaWduZWQgbG9uZyAqKWlzYV9idXNfdG9fdmlydChwb3MgKyA0KTsKIAkJCWxlbiA9ICphZGRyOwogCQkJLyogaWYgdGhlIGxlbmd0aCBvZiB0aGUgdGFibGUgZXh0ZW5kcyBwYXN0IDFNLAogCQkJICogdGhlIHRhYmxlIGNhbm5vdCBiZSB2YWxpZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IGJiMTFhNDIuLjUwZGUwZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiAKIAkJZGV2ID0gZGV2aWNlX2NyZWF0ZSgmZ3Bpb19jbGFzcywgZGVzYy0+Y2hpcC0+ZGV2LCBNS0RFVigwLCAwKSwKIAkJCQlkZXNjLCBpb25hbWUgPyBpb25hbWUgOiAiZ3BpbyVkIiwgZ3Bpbyk7Ci0JCWlmIChkZXYpIHsKKwkJaWYgKCFJU19FUlIoZGV2KSkgewogCQkJaWYgKGRpcmVjdGlvbl9tYXlfY2hhbmdlKQogCQkJCXN0YXR1cyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAogCQkJCQkJJmdwaW9fYXR0cl9ncm91cCk7CkBAIC02NzksNyArNjc5LDcgQEAKIAkJCWlmIChzdGF0dXMgIT0gMCkKIAkJCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwogCQl9IGVsc2UKLQkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlzdGF0dXMgPSBQVFJfRVJSKGRldik7CiAJCWlmIChzdGF0dXMgPT0gMCkKIAkJCXNldF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncyk7CiAJfQpAQCAtODAwLDExICs4MDAsMTEgQEAKIAltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKIAlkZXYgPSBkZXZpY2VfY3JlYXRlKCZncGlvX2NsYXNzLCBjaGlwLT5kZXYsIE1LREVWKDAsIDApLCBjaGlwLAogCQkJCSJncGlvY2hpcCVkIiwgY2hpcC0+YmFzZSk7Ci0JaWYgKGRldikgeworCWlmICghSVNfRVJSKGRldikpIHsKIAkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCiAJCQkJJmdwaW9jaGlwX2F0dHJfZ3JvdXApOwogCX0gZWxzZQotCQlzdGF0dXMgPSAtRU5PREVWOworCQlzdGF0dXMgPSBQVFJfRVJSKGRldik7CiAJY2hpcC0+ZXhwb3J0ZWQgPSAoc3RhdHVzID09IDApOwogCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CiAKQEAgLTE0ODcsNyArMTQ4Nyw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGdwaW9saWJfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9saWJfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9saWJfb3BlcmF0aW9ucyA9IHsKIAkub3BlbgkJPSBncGlvbGliX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMKaW5kZXggYWZhZDE0Ny4uNDkzODRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYwpAQCAtNDYwLDcgKzQ2MCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgZ3Bpb190d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorLyogQ2Fubm90IHVzZSBfX2RldmV4aXQgYXMgZ3Bpb190d2w0MDMwX3Byb2JlKCkgY2FsbHMgdXMgKi8KK3N0YXRpYyBpbnQgZ3Bpb190d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgc3RhdHVzOwpAQCAtNDkzLDcgKzQ5NCw3IEBACiAJLmRyaXZlci5uYW1lCT0gInR3bDQwMzBfZ3BpbyIsCiAJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5wcm9iZQkJPSBncGlvX3R3bDQwMzBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChncGlvX3R3bDQwMzBfcmVtb3ZlKSwKKwkucmVtb3ZlCQk9IGdwaW9fdHdsNDAzMF9yZW1vdmUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBncGlvX3R3bDQwMzBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwppbmRleCBiYTcyOGFkLi41Y2FlMGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtNDgyLDYgKzQ4Miw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPnVzZXJfbW9kZXMsIGhlYWQpCiAJCWRybV9tb2RlX3JlbW92ZShjb25uZWN0b3IsIG1vZGUpOwogCisJa2ZyZWUoY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZSk7CiAJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJZHJtX21vZGVfb2JqZWN0X3B1dChkZXYsICZjb25uZWN0b3ItPmJhc2UpOwogCWxpc3RfZGVsKCZjb25uZWN0b3ItPmhlYWQpOwpAQCAtMTU1NSw4ICsxNTU2LDYgQEAKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJaW50IHJldCA9IDA7CiAKLQlEUk1fREVCVUdfS01TKCJcbiIpOwotCiAJaWYgKCFyZXEtPmZsYWdzKSB7CiAJCURSTV9FUlJPUigibm8gb3BlcmF0aW9uIHNldFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IGZlODY5NzQuLmJiZmQxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2NydGMuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCiAKIHN0YXRpYyB2b2lkIGRybV9tb2RlX3ZhbGlkYXRlX2ZsYWcoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgICBpbnQgZmxhZ3MpCkBAIC05MCw3ICs5MSwxNSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKIAkJbW9kZS0+c3RhdHVzID0gTU9ERV9VTlZFUklGSUVEOwogCi0JY29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0b3ItPmZ1bmNzLT5kZXRlY3QoY29ubmVjdG9yKTsKKwlpZiAoY29ubmVjdG9yLT5mb3JjZSkgeworCQlpZiAoY29ubmVjdG9yLT5mb3JjZSA9PSBEUk1fRk9SQ0VfT04pCisJCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQllbHNlCisJCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQlpZiAoY29ubmVjdG9yLT5mdW5jcy0+Zm9yY2UpCisJCQljb25uZWN0b3ItPmZ1bmNzLT5mb3JjZShjb25uZWN0b3IpOworCX0gZWxzZQorCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdChjb25uZWN0b3IpOwogCiAJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7CiAJCURSTV9ERUJVR19LTVMoIiVzIGlzIGRpc2Nvbm5lY3RlZFxuIiwKQEAgLTI2Nyw2ICsyNzYsNjYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGJvb2wgZHJtX2hhc19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBfY29ubiA9IGNvbm5lY3Rvci0+ZmJfaGVscGVyX3ByaXZhdGU7CisJc3RydWN0IGRybV9mYl9oZWxwZXJfY21kbGluZV9tb2RlICpjbWRsaW5lX21vZGU7CisKKwlpZiAoIWZiX2hlbHBfY29ubikKKwkJcmV0dXJuIGZhbHNlOworCisJY21kbGluZV9tb2RlID0gJmZiX2hlbHBfY29ubi0+Y21kbGluZV9tb2RlOworCXJldHVybiBjbWRsaW5lX21vZGUtPnNwZWNpZmllZDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fcGlja19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7CisKKwlpZiAoIWZiX2hlbHBfY29ubikKKwkJcmV0dXJuIG1vZGU7CisKKwljbWRsaW5lX21vZGUgPSAmZmJfaGVscF9jb25uLT5jbWRsaW5lX21vZGU7CisJaWYgKGNtZGxpbmVfbW9kZS0+c3BlY2lmaWVkID09IGZhbHNlKQorCQlyZXR1cm4gbW9kZTsKKworCS8qIGF0dGVtcHQgdG8gZmluZCBhIG1hdGNoaW5nIG1vZGUgaW4gdGhlIGxpc3Qgb2YgbW9kZXMKKwkgKiAgd2UgaGF2ZSBnb3R0ZW4gc28gZmFyLCBpZiBub3QgYWRkIGEgQ1ZUIG1vZGUgdGhhdCBjb25mb3JtcworCSAqLworCWlmIChjbWRsaW5lX21vZGUtPnJiIHx8IGNtZGxpbmVfbW9kZS0+bWFyZ2lucykKKwkJZ290byBjcmVhdGVfbW9kZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKKwkJLyogY2hlY2sgd2lkdGgvaGVpZ2h0ICovCisJCWlmIChtb2RlLT5oZGlzcGxheSAhPSBjbWRsaW5lX21vZGUtPnhyZXMgfHwKKwkJICAgIG1vZGUtPnZkaXNwbGF5ICE9IGNtZGxpbmVfbW9kZS0+eXJlcykKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWRsaW5lX21vZGUtPnJlZnJlc2hfc3BlY2lmaWVkKSB7CisJCQlpZiAobW9kZS0+dnJlZnJlc2ggIT0gY21kbGluZV9tb2RlLT5yZWZyZXNoKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlKSB7CisJCQlpZiAoIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlyZXR1cm4gbW9kZTsKKwl9CisKK2NyZWF0ZV9tb2RlOgorCW1vZGUgPSBkcm1fY3Z0X21vZGUoY29ubmVjdG9yLT5kZXYsIGNtZGxpbmVfbW9kZS0+eHJlcywKKwkJCSAgICBjbWRsaW5lX21vZGUtPnlyZXMsCisJCQkgICAgY21kbGluZV9tb2RlLT5yZWZyZXNoX3NwZWNpZmllZCA/IGNtZGxpbmVfbW9kZS0+cmVmcmVzaCA6IDYwLAorCQkJICAgIGNtZGxpbmVfbW9kZS0+cmIsIGNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlLAorCQkJICAgIGNtZGxpbmVfbW9kZS0+bWFyZ2lucyk7CisJZHJtX21vZGVfc2V0X2NydGNpbmZvKG1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCWxpc3RfYWRkKCZtb2RlLT5oZWFkLCAmY29ubmVjdG9yLT5tb2Rlcyk7CisJcmV0dXJuIG1vZGU7Cit9CisKIHN0YXRpYyBib29sIGRybV9jb25uZWN0b3JfZW5hYmxlZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIHN0cmljdCkKIHsKIAlib29sIGVuYWJsZTsKQEAgLTMxNywxMCArMzg2LDE2IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCURSTV9ERUJVR19LTVMoImxvb2tpbmcgZm9yIHByZWZlcnJlZCBtb2RlIG9uIGNvbm5lY3RvciAlZFxuIiwKLQkJCSAgY29ubmVjdG9yLT5iYXNlLmlkKTsKKwkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgY21kbGluZSBtb2RlIG9uIGNvbm5lY3RvciAlZFxuIiwKKwkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCk7CiAKLQkJbW9kZXNbaV0gPSBkcm1faGFzX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvciwgd2lkdGgsIGhlaWdodCk7CisJCS8qIGdvdCBmb3IgY29tbWFuZCBsaW5lIG1vZGUgZmlyc3QgKi8KKwkJbW9kZXNbaV0gPSBkcm1fcGlja19jbWRsaW5lX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KTsKKwkJaWYgKCFtb2Rlc1tpXSkgeworCQkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgcHJlZmVycmVkIG1vZGUgb24gY29ubmVjdG9yICVkXG4iLAorCQkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCk7CisJCQltb2Rlc1tpXSA9IGRybV9oYXNfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KTsKKwkJfQogCQkvKiBObyBwcmVmZXJyZWQgbW9kZXMsIHBpY2sgb25lIG9mZiB0aGUgbGlzdCAqLwogCQlpZiAoIW1vZGVzW2ldICYmICFsaXN0X2VtcHR5KCZjb25uZWN0b3ItPm1vZGVzKSkgewogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2Rlc1tpXSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpCkBAIC0zNjksNiArNDQ0LDggQEAKIAlteV9zY29yZSA9IDE7CiAJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQogCQlteV9zY29yZSsrOworCWlmIChkcm1faGFzX2NtZGxpbmVfbW9kZShjb25uZWN0b3IpKQorCQlteV9zY29yZSsrOwogCWlmIChkcm1faGFzX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvciwgd2lkdGgsIGhlaWdodCkpCiAJCW15X3Njb3JlKys7CiAKQEAgLTk0Myw2ICsxMDIwLDggQEAKIHsKIAlpbnQgY291bnQgPSAwOwogCisJZHJtX2ZiX2hlbHBlcl9wYXJzZV9jb21tYW5kX2xpbmUoZGV2KTsKKwogCWNvdW50ID0gZHJtX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMoZGV2LAogCQkJCQkJIGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoLAogCQkJCQkJIGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCk7CkBAIC05NTAsNyArMTAyOSw3IEBACiAJLyoKIAkgKiB3ZSBzaG91bGRuJ3QgZW5kIHVwIHdpdGggbm8gbW9kZXMgaGVyZS4KIAkgKi8KLQlXQVJOKCFjb3VudCwgIkNvbm5lY3RlZCBjb25uZWN0b3Igd2l0aCAwIG1vZGVzXG4iKTsKKwlXQVJOKCFjb3VudCwgIk5vIGNvbm5lY3RvcnMgcmVwb3J0ZWQgY29ubmVjdGVkIHdpdGggbW9kZXNcbiIpOwogCiAJZHJtX3NldHVwX2NydGNzKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggOTBkNzZiYS4uY2VhNjY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTEwOSw3ICsxMDksOSBAQAogCiAKIC8qIFZhbGlkIEVESUQgaGVhZGVyIGhhcyB0aGVzZSBieXRlcyAqLwotc3RhdGljIHU4IGVkaWRfaGVhZGVyW10gPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAgfTsKK3N0YXRpYyBjb25zdCB1OCBlZGlkX2hlYWRlcltdID0geworCTB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAKK307CiAKIC8qKgogICogZWRpZF9pc192YWxpZCAtIHNhbml0eSBjaGVjayBFRElEIGRhdGEKQEAgLTUwMCw2ICs1MDIsMTkgQEAKIAl9CiAJcmV0dXJuIG1vZGU7CiB9CisKKy8qCisgKiAwIGlzIHJlc2VydmVkLiAgVGhlIHNwZWMgc2F5cyAweDAxIGZpbGwgZm9yIHVudXNlZCB0aW1pbmdzLiAgU29tZSBvbGQKKyAqIG1vbml0b3JzIGZpbGwgd2l0aCBhc2NpaSBzcGFjZSAoMHgyMCkgaW5zdGVhZC4KKyAqLworc3RhdGljIGludAorYmFkX3N0ZF90aW1pbmcodTggYSwgdTggYikKK3sKKwlyZXR1cm4gKGEgPT0gMHgwMCAmJiBiID09IDB4MDApIHx8CisJICAgICAgIChhID09IDB4MDEgJiYgYiA9PSAweDAxKSB8fAorCSAgICAgICAoYSA9PSAweDIwICYmIGIgPT0gMHgyMCk7Cit9CisKIC8qKgogICogZHJtX21vZGVfc3RkIC0gY29udmVydCBzdGFuZGFyZCBtb2RlIGluZm8gKHdpZHRoLCBoZWlnaHQsIHJlZnJlc2gpIGludG8gbW9kZQogICogQHQ6IHN0YW5kYXJkIHRpbWluZyBwYXJhbXMKQEAgLTUxMyw2ICs1MjgsNyBAQAogICovCiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGVfc3RkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICAgc3RydWN0IHN0ZF90aW1pbmcgKnQsCisJCQkJICAgICAgaW50IHJldmlzaW9uLAogCQkJCSAgICAgIGludCB0aW1pbmdfbGV2ZWwpCiB7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CkBAIC01MjMsMTQgKzUzOSwyMCBAQAogCXVuc2lnbmVkIHZmcmVxID0gKHQtPnZmcmVxX2FzcGVjdCAmIEVESURfVElNSU5HX1ZGUkVRX01BU0spCiAJCT4+IEVESURfVElNSU5HX1ZGUkVRX1NISUZUOwogCisJaWYgKGJhZF9zdGRfdGltaW5nKHQtPmhzaXplLCB0LT52ZnJlcV9hc3BlY3QpKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qIEFjY29yZGluZyB0byB0aGUgRURJRCBzcGVjLCB0aGUgaGRpc3BsYXkgPSBoc2l6ZSAqIDggKyAyNDggKi8KIAloc2l6ZSA9IHQtPmhzaXplICogOCArIDI0ODsKIAkvKiB2cmVmcmVzaF9yYXRlID0gdmZyZXEgKyA2MCAqLwogCXZyZWZyZXNoX3JhdGUgPSB2ZnJlcSArIDYwOwogCS8qIHRoZSB2ZGlzcGxheSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBhc3BlY3QgcmF0aW8gKi8KLQlpZiAoYXNwZWN0X3JhdGlvID09IDApCi0JCXZzaXplID0gKGhzaXplICogMTApIC8gMTY7Ci0JZWxzZSBpZiAoYXNwZWN0X3JhdGlvID09IDEpCisJaWYgKGFzcGVjdF9yYXRpbyA9PSAwKSB7CisJCWlmIChyZXZpc2lvbiA8IDMpCisJCQl2c2l6ZSA9IGhzaXplOworCQllbHNlCisJCQl2c2l6ZSA9IChoc2l6ZSAqIDEwKSAvIDE2OworCX0gZWxzZSBpZiAoYXNwZWN0X3JhdGlvID09IDEpCiAJCXZzaXplID0gKGhzaXplICogMykgLyA0OwogCWVsc2UgaWYgKGFzcGVjdF9yYXRpbyA9PSAyKQogCQl2c2l6ZSA9IChoc2l6ZSAqIDQpIC8gNTsKQEAgLTUzOCw3ICs1NjAsOCBAQAogCQl2c2l6ZSA9IChoc2l6ZSAqIDkpIC8gMTY7CiAJLyogSERUViBoYWNrICovCiAJaWYgKGhzaXplID09IDEzNjAgJiYgdnNpemUgPT0gNzY1ICYmIHZyZWZyZXNoX3JhdGUgPT0gNjApIHsKLQkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGhzaXplLCB2c2l6ZSwgdnJlZnJlc2hfcmF0ZSwgMCwgMCk7CisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDAsCisJCQkJICAgIGZhbHNlKTsKIAkJbW9kZS0+aGRpc3BsYXkgPSAxMzY2OwogCQltb2RlLT52c3luY19zdGFydCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gMTsKIAkJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfZW5kIC0gMTsKQEAgLTU1Nyw3ICs1ODAsOCBAQAogCQltb2RlID0gZHJtX2d0Zl9tb2RlKGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlLCAwLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBMRVZFTF9DVlQ6Ci0JCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDApOworCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlLCAwLCAwLAorCQkJCSAgICBmYWxzZSk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gbW9kZTsKQEAgLTYwMiw2ICs2MjYsMTIgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJLyogaXQgaXMgaW5jb3JyZWN0IGlmIGhzeW5jL3ZzeW5jIHdpZHRoIGlzIHplcm8gKi8KKwlpZiAoIWhzeW5jX3B1bHNlX3dpZHRoIHx8ICF2c3luY19wdWxzZV93aWR0aCkgeworCQlEUk1fREVCVUdfS01TKCJJbmNvcnJlY3QgRGV0YWlsZWQgdGltaW5nLiAiCisJCQkJIldyb25nIEhzeW5jL1ZzeW5jIHB1bHNlIHdpZHRoXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoZGV2KTsKIAlpZiAoIW1vZGUpCiAJCXJldHVybiBOVUxMOwpAQCAtNjIzLDYgKzY1MywxNSBAQAogCW1vZGUtPnZzeW5jX2VuZCA9IG1vZGUtPnZzeW5jX3N0YXJ0ICsgdnN5bmNfcHVsc2Vfd2lkdGg7CiAJbW9kZS0+dnRvdGFsID0gbW9kZS0+dmRpc3BsYXkgKyB2Ymxhbms7CiAKKwkvKiBwZXJmb3JtIHRoZSBiYXNpYyBjaGVjayBmb3IgdGhlIGRldGFpbGVkIHRpbWluZyAqLworCWlmIChtb2RlLT5oc3luY19lbmQgPiBtb2RlLT5odG90YWwgfHwKKwkJbW9kZS0+dnN5bmNfZW5kID4gbW9kZS0+dnRvdGFsKSB7CisJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBtb2RlKTsKKwkJRFJNX0RFQlVHX0tNUygiSW5jb3JyZWN0IGRldGFpbGVkIHRpbWluZy4gIgorCQkJCSJTeW5jIGlzIGJleW9uZCB0aGUgYmxhbmsuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CiAKIAlpZiAocHQtPm1pc2MgJiBEUk1fRURJRF9QVF9JTlRFUkxBQ0VEKQpAQCAtNzc5LDcgKzgxOCw3IEBACiAJCQljb250aW51ZTsKIAogCQluZXdtb2RlID0gZHJtX21vZGVfc3RkKGRldiwgJmVkaWQtPnN0YW5kYXJkX3RpbWluZ3NbaV0sCi0JCQkJCXRpbWluZ19sZXZlbCk7CisJCQkJICAgICAgIGVkaWQtPnJldmlzaW9uLCB0aW1pbmdfbGV2ZWwpOwogCQlpZiAobmV3bW9kZSkgewogCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOwogCQkJbW9kZXMrKzsKQEAgLTgyOSwxMyArODY4LDEzIEBACiAJCQljYXNlIEVESURfREVUQUlMX01PTklUT1JfQ1BEQVRBOgogCQkJCWJyZWFrOwogCQkJY2FzZSBFRElEX0RFVEFJTF9TVERfTU9ERVM6Ci0JCQkJLyogRml2ZSBtb2RlcyBwZXIgZGV0YWlsZWQgc2VjdGlvbiAqLwotCQkJCWZvciAoaiA9IDA7IGogPCA1OyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOyBqIDwgNjsgaSsrKSB7CiAJCQkJCXN0cnVjdCBzdGRfdGltaW5nICpzdGQ7CiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOwogCiAJCQkJCXN0ZCA9ICZkYXRhLT5kYXRhLnRpbWluZ3Nbal07CiAJCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQsCisJCQkJCQkJICAgICAgIGVkaWQtPnJldmlzaW9uLAogCQkJCQkJCSAgICAgICB0aW1pbmdfbGV2ZWwpOwogCQkJCQlpZiAobmV3bW9kZSkgewogCQkJCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOwpAQCAtOTY0LDcgKzEwMDMsOSBAQAogCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOwogCiAJCQkJc3RkID0gJmRhdGEtPmRhdGEudGltaW5nc1tqXTsKLQkJCQluZXdtb2RlID0gZHJtX21vZGVfc3RkKGRldiwgc3RkLCB0aW1pbmdfbGV2ZWwpOworCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQsCisJCQkJCQkgICAgICAgZWRpZC0+cmV2aXNpb24sCisJCQkJCQkgICAgICAgdGltaW5nX2xldmVsKTsKIAkJCQlpZiAobmV3bW9kZSkgewogCQkJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CiAJCQkJCW1vZGVzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCAyYzQ2NzEzLi5kYzhlMzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTQwLDYgKzQwLDE5OSBAQAogCiBzdGF0aWMgTElTVF9IRUFEKGtlcm5lbF9mYl9oZWxwZXJfbGlzdCk7CiAKK2ludCBkcm1fZmJfaGVscGVyX2FkZF9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwljb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2FkZF9jb25uZWN0b3IpOworCitzdGF0aWMgaW50IG15X2F0b2koY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgdmFsID0gMDsKKworCWZvciAoOzsgbmFtZSsrKSB7CisJCXN3aXRjaCAoKm5hbWUpIHsKKwkJY2FzZSAnMCcgLi4uICc5JzoKKwkJCXZhbCA9IDEwKnZhbCsoKm5hbWUtJzAnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIHZhbDsKKwkJfQorCX0KK30KKworLyoqCisgKiBkcm1fZmJfaGVscGVyX2Nvbm5lY3Rvcl9wYXJzZV9jb21tYW5kX2xpbmUgLSBwYXJzZSBjb21tYW5kIGxpbmUgZm9yIGNvbm5lY3RvcgorICogQGNvbm5lY3RvciAtIGNvbm5lY3RvciB0byBwYXJzZSBsaW5lIGZvcgorICogQG1vZGVfb3B0aW9uIC0gcGVyIGNvbm5lY3RvciBtb2RlIG9wdGlvbgorICoKKyAqIFRoaXMgcGFyc2VzIHRoZSBjb25uZWN0b3Igc3BlY2lmaWMgdGhlbiBnZW5lcmljIGNvbW1hbmQgbGluZXMgZm9yCisgKiBtb2RlcyBhbmQgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGNvbm5lY3Rvci4KKyAqCisgKiBUaGlzIHVzZXMgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZmIgbW9kZWRiLmMsIGV4Y2VwdCBmb3IgZXh0cmEKKyAqCTx4cmVzPng8eXJlcz5bTV1bUl1bLTxicHA+XVtAPHJlZnJlc2g+XVtpXVttXVtlRGRdCisgKgorICogZW5hYmxlL2VuYWJsZSBEaWdpdGFsL2Rpc2FibGUgYml0IGF0IHRoZSBlbmQKKyAqLworc3RhdGljIGJvb2wgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3JfcGFyc2VfY29tbWFuZF9saW5lKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCQkgICAgICAgY29uc3QgY2hhciAqbW9kZV9vcHRpb24pCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgbmFtZWxlbjsKKwlpbnQgcmVzX3NwZWNpZmllZCA9IDAsIGJwcF9zcGVjaWZpZWQgPSAwLCByZWZyZXNoX3NwZWNpZmllZCA9IDA7CisJdW5zaWduZWQgaW50IHhyZXMgPSAwLCB5cmVzID0gMCwgYnBwID0gMzIsIHJlZnJlc2ggPSAwOworCWludCB5cmVzX3NwZWNpZmllZCA9IDAsIGN2dCA9IDAsIHJiID0gMCwgaW50ZXJsYWNlID0gMCwgbWFyZ2lucyA9IDA7CisJaW50IGk7CisJZW51bSBkcm1fY29ubmVjdG9yX2ZvcmNlIGZvcmNlID0gRFJNX0ZPUkNFX1VOU1BFQ0lGSUVEOworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKworCWlmICghZmJfaGVscF9jb25uKQorCQlyZXR1cm4gZmFsc2U7CisKKwljbWRsaW5lX21vZGUgPSAmZmJfaGVscF9jb25uLT5jbWRsaW5lX21vZGU7CisJaWYgKCFtb2RlX29wdGlvbikKKwkJbW9kZV9vcHRpb24gPSBmYl9tb2RlX29wdGlvbjsKKworCWlmICghbW9kZV9vcHRpb24pIHsKKwkJY21kbGluZV9tb2RlLT5zcGVjaWZpZWQgPSBmYWxzZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW5hbWUgPSBtb2RlX29wdGlvbjsKKwluYW1lbGVuID0gc3RybGVuKG5hbWUpOworCWZvciAoaSA9IG5hbWVsZW4tMTsgaSA+PSAwOyBpLS0pIHsKKwkJc3dpdGNoIChuYW1lW2ldKSB7CisJCWNhc2UgJ0AnOgorCQkJbmFtZWxlbiA9IGk7CisJCQlpZiAoIXJlZnJlc2hfc3BlY2lmaWVkICYmICFicHBfc3BlY2lmaWVkICYmCisJCQkgICAgIXlyZXNfc3BlY2lmaWVkKSB7CisJCQkJcmVmcmVzaCA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQkJcmVmcmVzaF9zcGVjaWZpZWQgPSAxOworCQkJCWlmIChjdnQgfHwgcmIpCisJCQkJCWN2dCA9IDA7CisJCQl9IGVsc2UKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKwkJY2FzZSAnLSc6CisJCQluYW1lbGVuID0gaTsKKwkJCWlmICghYnBwX3NwZWNpZmllZCAmJiAheXJlc19zcGVjaWZpZWQpIHsKKwkJCQlicHAgPSBteV9hdG9pKCZuYW1lW2krMV0pOworCQkJCWJwcF9zcGVjaWZpZWQgPSAxOworCQkJCWlmIChjdnQgfHwgcmIpCisJCQkJCWN2dCA9IDA7CisJCQl9IGVsc2UKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlpZiAoIXlyZXNfc3BlY2lmaWVkKSB7CisJCQkJeXJlcyA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQkJeXJlc19zcGVjaWZpZWQgPSAxOworCQkJfSBlbHNlCisJCQkJZ290byBkb25lOworCQljYXNlICcwJyAuLi4gJzknOgorCQkJYnJlYWs7CisJCWNhc2UgJ00nOgorCQkJaWYgKCF5cmVzX3NwZWNpZmllZCkKKwkJCQljdnQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ1InOgorCQkJaWYgKCFjdnQpCisJCQkJcmIgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJaWYgKCFjdnQpCisJCQkJbWFyZ2lucyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlpZiAoIWN2dCkKKwkJCQlpbnRlcmxhY2UgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJZm9yY2UgPSBEUk1fRk9SQ0VfT047CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpIHx8CisJCQkgICAgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlCKSkKKwkJCQlmb3JjZSA9IERSTV9GT1JDRV9PTjsKKwkJCWVsc2UKKwkJCQlmb3JjZSA9IERSTV9GT1JDRV9PTl9ESUdJVEFMOworCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJZm9yY2UgPSBEUk1fRk9SQ0VfT0ZGOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisJaWYgKGkgPCAwICYmIHlyZXNfc3BlY2lmaWVkKSB7CisJCXhyZXMgPSBteV9hdG9pKG5hbWUpOworCQlyZXNfc3BlY2lmaWVkID0gMTsKKwl9Citkb25lOgorCisJRFJNX0RFQlVHX0tNUygiY21kbGluZSBtb2RlIGZvciBjb25uZWN0b3IgJXMgJWR4JWRAJWRIeiVzJXMlc1xuIiwKKwkJZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpLCB4cmVzLCB5cmVzLAorCQkocmVmcmVzaCkgPyByZWZyZXNoIDogNjAsIChyYikgPyAiIHJlZHVjZWQgYmxhbmtpbmciIDoKKwkJIiIsIChtYXJnaW5zKSA/ICIgd2l0aCBtYXJnaW5zIiA6ICIiLCAoaW50ZXJsYWNlKSA/CisJCSIgaW50ZXJsYWNlZCIgOiAiIik7CisKKwlpZiAoZm9yY2UpIHsKKwkJY29uc3QgY2hhciAqczsKKwkJc3dpdGNoIChmb3JjZSkgeworCQljYXNlIERSTV9GT1JDRV9PRkY6IHMgPSAiT0ZGIjsgYnJlYWs7CisJCWNhc2UgRFJNX0ZPUkNFX09OX0RJR0lUQUw6IHMgPSAiT04gLSBkaWciOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBEUk1fRk9SQ0VfT046IHMgPSAiT04iOyBicmVhazsKKwkJfQorCisJCURSTV9JTkZPKCJmb3JjaW5nICVzIGNvbm5lY3RvciAlc1xuIiwKKwkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvciksIHMpOworCQljb25uZWN0b3ItPmZvcmNlID0gZm9yY2U7CisJfQorCisJaWYgKHJlc19zcGVjaWZpZWQpIHsKKwkJY21kbGluZV9tb2RlLT5zcGVjaWZpZWQgPSB0cnVlOworCQljbWRsaW5lX21vZGUtPnhyZXMgPSB4cmVzOworCQljbWRsaW5lX21vZGUtPnlyZXMgPSB5cmVzOworCX0KKworCWlmIChyZWZyZXNoX3NwZWNpZmllZCkgeworCQljbWRsaW5lX21vZGUtPnJlZnJlc2hfc3BlY2lmaWVkID0gdHJ1ZTsKKwkJY21kbGluZV9tb2RlLT5yZWZyZXNoID0gcmVmcmVzaDsKKwl9CisKKwlpZiAoYnBwX3NwZWNpZmllZCkgeworCQljbWRsaW5lX21vZGUtPmJwcF9zcGVjaWZpZWQgPSB0cnVlOworCQljbWRsaW5lX21vZGUtPmJwcCA9IGJwcDsKKwl9CisJY21kbGluZV9tb2RlLT5yYiA9IHJiID8gdHJ1ZSA6IGZhbHNlOworCWNtZGxpbmVfbW9kZS0+Y3Z0ID0gY3Z0ICA/IHRydWUgOiBmYWxzZTsKKwljbWRsaW5lX21vZGUtPmludGVybGFjZSA9IGludGVybGFjZSA/IHRydWUgOiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitpbnQgZHJtX2ZiX2hlbHBlcl9wYXJzZV9jb21tYW5kX2xpbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWNoYXIgKm9wdGlvbiA9IE5VTEw7CisKKwkJLyogZG8gc29tZXRoaW5nIG9uIHJldHVybiAtIHR1cm4gb2ZmIGNvbm5lY3RvciBtYXliZSAqLworCQlpZiAoZmJfZ2V0X29wdGlvbnMoZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpLCAmb3B0aW9uKSkKKwkJCWNvbnRpbnVlOworCisJCWRybV9mYl9oZWxwZXJfY29ubmVjdG9yX3BhcnNlX2NvbW1hbmRfbGluZShjb25uZWN0b3IsIG9wdGlvbik7CisJfQorCXJldHVybiAwOworfQorCiBib29sIGRybV9mYl9oZWxwZXJfZm9yY2Vfa2VybmVsX21vZGUodm9pZCkKIHsKIAlpbnQgaSA9IDA7CkBAIC04Nyw2ICsyODAsNyBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3Jlc3RvcmUpOwogCisjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCiBzdGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCiB7CiAJZHJtX2ZiX2hlbHBlcl9yZXN0b3JlKCk7CkBAIC0xMDMsNiArMjk3LDcgQEAKIAkuaGVscF9tc2cgPSAiZm9yY2UtZmIoVikiLAogCS5hY3Rpb25fbXNnID0gIlJlc3RvcmUgZnJhbWVidWZmZXIgY29uc29sZSIsCiB9OworI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfb24oc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CkBAIC0yNTksNiArNDU0LDEwOSBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2luaXRfY3J0Y19jb3VudCk7CiAKK3N0YXRpYyBpbnQgc2V0Y29scmVnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAorCQkgICAgIHUxNiBibHVlLCB1MTYgcmVnbm8sIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBmYl9oZWxwZXItPmZiOworCWludCBwaW5kZXg7CisKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SKSB7CisJCXUzMiAqcGFsZXR0ZTsKKwkJdTMyIHZhbHVlOworCQkvKiBwbGFjZSBjb2xvciBpbiBwc3VlZG9wYWxldHRlICovCisJCWlmIChyZWdubyA+IDE2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXBhbGV0dGUgPSAodTMyICopaW5mby0+cHNldWRvX3BhbGV0dGU7CisJCXJlZCA+Pj0gKDE2IC0gaW5mby0+dmFyLnJlZC5sZW5ndGgpOworCQlncmVlbiA+Pj0gKDE2IC0gaW5mby0+dmFyLmdyZWVuLmxlbmd0aCk7CisJCWJsdWUgPj49ICgxNiAtIGluZm8tPnZhci5ibHVlLmxlbmd0aCk7CisJCXZhbHVlID0gKHJlZCA8PCBpbmZvLT52YXIucmVkLm9mZnNldCkgfAorCQkJKGdyZWVuIDw8IGluZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKKwkJCShibHVlIDw8IGluZm8tPnZhci5ibHVlLm9mZnNldCk7CisJCXBhbGV0dGVbcmVnbm9dID0gdmFsdWU7CisJCXJldHVybiAwOworCX0KKworCXBpbmRleCA9IHJlZ25vOworCisJaWYgKGZiLT5iaXRzX3Blcl9waXhlbCA9PSAxNikgeworCQlwaW5kZXggPSByZWdubyA8PCAzOworCisJCWlmIChmYi0+ZGVwdGggPT0gMTYgJiYgcmVnbm8gPiA2MykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZmItPmRlcHRoID09IDE1ICYmIHJlZ25vID4gMzEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZmItPmRlcHRoID09IDE2KSB7CisJCQl1MTYgciwgZywgYjsKKwkJCWludCBpOworCQkJaWYgKHJlZ25vIDwgMzIpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9zZXQoY3J0YywgcmVkLAorCQkJCQkJZ3JlZW4sIGJsdWUsIHBpbmRleCArIGkpOworCQkJfQorCisJCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9nZXQoY3J0YywgJnIsCisJCQkJCQkgICAgJmcsICZiLAorCQkJCQkJICAgIHBpbmRleCA+PiAxKTsKKworCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9zZXQoY3J0YywgciwKKwkJCQkJCQkgICAgZ3JlZW4sIGIsCisJCQkJCQkJICAgIChwaW5kZXggPj4gMSkgKyBpKTsKKwkJfQorCX0KKworCWlmIChmYi0+ZGVwdGggIT0gMTYpCisJCWZiX2hlbHBlci0+ZnVuY3MtPmdhbW1hX3NldChjcnRjLCByZWQsIGdyZWVuLCBibHVlLCBwaW5kZXgpOworCXJldHVybiAwOworfQorCitpbnQgZHJtX2ZiX2hlbHBlcl9zZXRjbWFwKHN0cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKKwl1MTYgKnJlZCwgKmdyZWVuLCAqYmx1ZSwgKnRyYW5zcDsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJaW50IGksIHJjID0gMDsKKwlpbnQgc3RhcnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0uY3J0Y19pZCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBmYl9oZWxwZXItPmNydGNfY291bnQpCisJCQljb250aW51ZTsKKworCQlyZWQgPSBjbWFwLT5yZWQ7CisJCWdyZWVuID0gY21hcC0+Z3JlZW47CisJCWJsdWUgPSBjbWFwLT5ibHVlOworCQl0cmFuc3AgPSBjbWFwLT50cmFuc3A7CisJCXN0YXJ0ID0gY21hcC0+c3RhcnQ7CisKKwkJZm9yIChpID0gMDsgaSA8IGNtYXAtPmxlbjsgaSsrKSB7CisJCQl1MTYgaHJlZCwgaGdyZWVuLCBoYmx1ZSwgaHRyYW5zcCA9IDB4ZmZmZjsKKworCQkJaHJlZCA9ICpyZWQrKzsKKwkJCWhncmVlbiA9ICpncmVlbisrOworCQkJaGJsdWUgPSAqYmx1ZSsrOworCisJCQlpZiAodHJhbnNwKQorCQkJCWh0cmFuc3AgPSAqdHJhbnNwKys7CisKKwkJCXJjID0gc2V0Y29scmVnKGNydGMsIGhyZWQsIGhncmVlbiwgaGJsdWUsIHN0YXJ0KyssIGluZm8pOworCQkJaWYgKHJjKQorCQkJCXJldHVybiByYzsKKwkJfQorCQljcnRjX2Z1bmNzLT5sb2FkX2x1dChjcnRjKTsKKwl9CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3NldGNtYXApOworCiBpbnQgZHJtX2ZiX2hlbHBlcl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sCiAJCQkgICAgdW5zaWduZWQgcmVkLAogCQkJICAgIHVuc2lnbmVkIGdyZWVuLApAQCAtMjcwLDEwICs1NjgsMTMgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCWludCBpOworCWludCByZXQ7CisKKwlpZiAocmVnbm8gPiAyNTUpCisJCXJldHVybiAxOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBmYl9oZWxwZXItPmZiOwotCisJCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKIAkJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CiAJCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5jcnRjX2lkKQogCQkJCWJyZWFrOwpAQCAtMjgxLDM1ICs1ODIsMTEgQEAKIAkJaWYgKGkgPT0gZmJfaGVscGVyLT5jcnRjX2NvdW50KQogCQkJY29udGludWU7CiAKLQkJaWYgKHJlZ25vID4gMjU1KQotCQkJcmV0dXJuIDE7CisJCXJldCA9IHNldGNvbHJlZyhjcnRjLCByZWQsIGdyZWVuLCBibHVlLCByZWdubywgaW5mbyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCi0JCWlmIChmYi0+ZGVwdGggPT0gOCkgewotCQkJZmJfaGVscGVyLT5mdW5jcy0+Z2FtbWFfc2V0KGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHJlZ25vKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKHJlZ25vIDwgMTYpIHsKLQkJCXN3aXRjaCAoZmItPmRlcHRoKSB7Ci0JCQljYXNlIDE1OgotCQkJCWZiLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPSAoKHJlZCAmIDB4ZjgwMCkgPj4gMSkgfAotCQkJCQkoKGdyZWVuICYgMHhmODAwKSA+PiAgNikgfAotCQkJCQkoKGJsdWUgJiAweGY4MDApID4+IDExKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMTY6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9IChyZWQgJiAweGY4MDApIHwKLQkJCQkJKChncmVlbiAmIDB4ZmMwMCkgPj4gIDUpIHwKLQkJCQkJKChibHVlICAmIDB4ZjgwMCkgPj4gMTEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyNDoKLQkJCWNhc2UgMzI6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9Ci0JCQkJCSgoKHJlZCA+PiA4KSAmIDB4ZmYpIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8Ci0JCQkJCSgoKGdyZWVuID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAotCQkJCQkoKChibHVlID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQorCQljcnRjX2Z1bmNzLT5sb2FkX2x1dChjcnRjKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00MzAsNyArNzA3LDcgQEAKIAogCQlpZiAoY3J0Yy0+ZmIgPT0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuZmIpIHsKIAkJCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPnNldF9jb25maWcoJmZiX2hlbHBlci0+Y3J0Y19pbmZvLT5tb2RlX3NldCk7CisJCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZygmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQpOwogCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKQEAgLTQ3OSwxMSArNzU2LDE0IEBACiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXkpOwogCiBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIGludCBwcmVmZXJyZWRfYnBwLAogCQkJCSAgaW50ICgqZmJfY3JlYXRlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICAgdWludDMyX3QgZmJfd2lkdGgsCiAJCQkJCQkgICB1aW50MzJfdCBmYl9oZWlnaHQsCiAJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLAogCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9oZWlnaHQsCisJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX2RlcHRoLAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9icHAsCiAJCQkJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmJfcHRyKSkKIHsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CkBAIC00OTcsOCArNzc3LDQ4IEBACiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldCA9IE5VTEw7CiAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcjsKKwl1aW50MzJfdCBzdXJmYWNlX2RlcHRoID0gMjQsIHN1cmZhY2VfYnBwID0gMzI7CiAKKwkvKiBpZiBkcml2ZXIgcGlja3MgOCBvciAxNiBieSBkZWZhdWx0IHVzZSB0aGF0CisJICAgZm9yIGJvdGggZGVwdGgvYnBwICovCisJaWYgKHByZWZlcnJlZF9icHAgIT0gc3VyZmFjZV9icHApIHsKKwkJc3VyZmFjZV9kZXB0aCA9IHN1cmZhY2VfYnBwID0gcHJlZmVycmVkX2JwcDsKKwl9CiAJLyogZmlyc3QgdXAgZ2V0IGEgY291bnQgb2YgY3J0Y3Mgbm93IGluIHVzZSBhbmQgbmV3IG1pbi9tYXhlcyB3aWR0aC9oZWlnaHRzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKworCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKworCQlpZiAoIWZiX2hlbHBfY29ubikKKwkJCWNvbnRpbnVlOworCQkKKwkJY21kbGluZV9tb2RlID0gJmZiX2hlbHBfY29ubi0+Y21kbGluZV9tb2RlOworCisJCWlmIChjbWRsaW5lX21vZGUtPmJwcF9zcGVjaWZpZWQpIHsKKwkJCXN3aXRjaCAoY21kbGluZV9tb2RlLT5icHApIHsKKwkJCWNhc2UgODoKKwkJCQlzdXJmYWNlX2RlcHRoID0gc3VyZmFjZV9icHAgPSA4OworCQkJCWJyZWFrOworCQkJY2FzZSAxNToKKwkJCQlzdXJmYWNlX2RlcHRoID0gMTU7CisJCQkJc3VyZmFjZV9icHAgPSAxNjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTY6CisJCQkJc3VyZmFjZV9kZXB0aCA9IHN1cmZhY2VfYnBwID0gMTY7CisJCQkJYnJlYWs7CisJCQljYXNlIDI0OgorCQkJCXN1cmZhY2VfZGVwdGggPSBzdXJmYWNlX2JwcCA9IDI0OworCQkJCWJyZWFrOworCQkJY2FzZSAzMjoKKwkJCQlzdXJmYWNlX2RlcHRoID0gMjQ7CisJCQkJc3VyZmFjZV9icHAgPSAzMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJaWYgKGRybV9oZWxwZXJfY3J0Y19pbl91c2UoY3J0YykpIHsKIAkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUpIHsKQEAgLTUyNyw3ICs4NDcsOCBAQAogCS8qIGRvIHdlIGhhdmUgYW4gZmIgYWxyZWFkeT8gKi8KIAlpZiAobGlzdF9lbXB0eSgmZGV2LT5tb2RlX2NvbmZpZy5mYl9rZXJuZWxfbGlzdCkpIHsKIAkJcmV0ID0gKCpmYl9jcmVhdGUpKGRldiwgZmJfd2lkdGgsIGZiX2hlaWdodCwgc3VyZmFjZV93aWR0aCwKLQkJCQkgICBzdXJmYWNlX2hlaWdodCwgJmZiKTsKKwkJCQkgICBzdXJmYWNlX2hlaWdodCwgc3VyZmFjZV9kZXB0aCwgc3VyZmFjZV9icHAsCisJCQkJICAgJmZiKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQluZXdfZmIgPSAxOwpAQCAtNjE4LDEwICs5MzksMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9mcmVlKTsKIAotdm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1aW50MzJfdCBwaXRjaCkKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdWludDMyX3QgcGl0Y2gsCisJCQkgICAgdWludDMyX3QgZGVwdGgpCiB7CiAJaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7Ci0JaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJaW5mby0+Zml4LnZpc3VhbCA9IGRlcHRoID09IDggPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IgOgorCQlGQl9WSVNVQUxfVFJVRUNPTE9SOwogCWluZm8tPmZpeC50eXBlX2F1eCA9IDA7CiAJaW5mby0+Zml4LnhwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KIAlpbmZvLT5maXgueXBhbnN0ZXAgPSAxOyAvKiBkb2luZyBpdCBpbiBodyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jCmluZGV4IDQ5NDA0Y2UuLjUxZjY3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUgSFZfRkFDVE9SCQkJMTAwMAogc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9jdnRfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaGRpc3BsYXksCiAJCQkJICAgICAgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCi0JCQkJICAgICAgYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQpCisJCQkJICAgICAgYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQsIGJvb2wgbWFyZ2lucykKIHsKIAkvKiAxKSB0b3AvYm90dG9tIG1hcmdpbiBzaXplICglIG9mIGhlaWdodCkgLSBkZWZhdWx0OiAxLjgsICovCiAjZGVmaW5lCUNWVF9NQVJHSU5fUEVSQ0VOVEFHRQkJMTgKQEAgLTEwMSw3ICsxMDEsNiBAQAogCS8qIFBpeGVsIENsb2NrIHN0ZXAgKGtIeikgKi8KICNkZWZpbmUgQ1ZUX0NMT0NLX1NURVAJCQkyNTAKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGU7Ci0JYm9vbCBtYXJnaW5zID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IHZmaWVsZHJhdGUsIGhwZXJpb2Q7CiAJaW50IGhkaXNwbGF5X3JuZCwgaG1hcmdpbiwgdmRpc3BsYXlfcm5kLCB2bWFyZ2luLCB2c3luYzsKIAlpbnQgaW50ZXJsYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCmluZGV4IDdlMWZiZTUuLjRhYzkwMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKQEAgLTM2OSwyOCArMzY5LDI4IEBACiB9CiAKIC8qKiBBR1AgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKIH07CiAKIC8qKiBTaGFyZWQgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2htX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX3NobV9vcHMgPSB7CiAJLmZhdWx0ID0gZHJtX3ZtX3NobV9mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9zaG1fY2xvc2UsCiB9OwogCiAvKiogRE1BIHZpcnR1YWwgbWVtb3J5IG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX2RtYV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9kbWFfb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9kbWFfZmF1bHQsCiAJLm9wZW4gPSBkcm1fdm1fb3BlbiwKIAkuY2xvc2UgPSBkcm1fdm1fY2xvc2UsCiB9OwogCiAvKiogU2NhdHRlci1nYXRoZXIgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2dfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2dfb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9zZ19mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDQ1ZDUwN2UuLmU1YjEzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMTIyNyw4ICsxMjI3LDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBUcnkgdG8gc2V0IHVwIEZCQyB3aXRoIGEgcmVhc29uYWJsZSBjb21wcmVzc2VkIGJ1ZmZlciBzaXplICovCi0JaWYgKElTX01PQklMRShkZXYpICYmIChJU19JOVhYKGRldikgfHwgSVNfSTk2NUcoZGV2KSB8fCBJU19HTTQ1KGRldikpICYmCi0JICAgIGk5MTVfcG93ZXJzYXZlKSB7CisJaWYgKEk5MTVfSEFTX0ZCQyhkZXYpICYmIGk5MTVfcG93ZXJzYXZlKSB7CiAJCWludCBjZmJfc2l6ZTsKIAogCQkvKiBUcnkgdG8gZ2V0IGFuIDhNIGJ1ZmZlci4uLiAqLwpAQCAtMTQ2OCw2ICsxNDY3LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+ZXJyb3JfbG9jayk7CiAJZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID0gMDsKKwlkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID0gMDsKIAogCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIEk5MTVfTlVNX1BJUEUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBiOTM4MTRjLi43ZjQzNmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTg5LDcgKzg5LDggQEAKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EM2hvdCk7CiAJfQogCi0JZGV2X3ByaXYtPnN1c3BlbmRlZCA9IDE7CisJLyogTW9kZXNldCBvbiByZXN1bWUsIG5vdCBsaWQgZXZlbnRzICovCisJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTI0LDcgKzEyNSw3IEBACiAJCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKIAl9CiAKLQlkZXZfcHJpdi0+c3VzcGVuZGVkID0gMDsKKwlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAwOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGIyNGIyZDEuLjU3MjA0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjAyLDYgKzIwMiw3IEBACiAJc3BpbmxvY2tfdCB1c2VyX2lycV9sb2NrOwogCS8qKiBSZWZjb3VudCBmb3IgaTkxNV91c2VyX2lycV9nZXQoKSB2ZXJzdXMgaTkxNV91c2VyX2lycV9wdXQoKS4gKi8KIAlpbnQgdXNlcl9pcnFfcmVmY291bnQ7CisJdTMyIHRyYWNlX2lycV9zZXFubzsKIAkvKiogQ2FjaGVkIHZhbHVlIG9mIElNUiB0byBhdm9pZCByZWFkcyBpbiB1cGRhdGluZyB0aGUgYml0ZmllbGQgKi8KIAl1MzIgaXJxX21hc2tfcmVnOwogCXUzMiBwaXBlc3RhdFsyXTsKQEAgLTI3Myw3ICsyNzQsNyBAQAogCXN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIGRpc3BsYXk7CiAKIAkvKiBSZWdpc3RlciBzdGF0ZSAqLwotCWJvb2wgc3VzcGVuZGVkOworCWJvb2wgbW9kZXNldF9vbl9saWQ7CiAJdTggc2F2ZUxCQjsKIAl1MzIgc2F2ZURTUEFDTlRSOwogCXUzMiBzYXZlRFNQQkNOVFI7CkBAIC0yOTUsNiArMjk2LDEyIEBACiAJdTMyIHNhdmVWQkxBTktfQTsKIAl1MzIgc2F2ZVZTWU5DX0E7CiAJdTMyIHNhdmVCQ0xSUEFUX0E7CisJdTMyIHNhdmVUUkFOU19IVE9UQUxfQTsKKwl1MzIgc2F2ZVRSQU5TX0hCTEFOS19BOworCXUzMiBzYXZlVFJBTlNfSFNZTkNfQTsKKwl1MzIgc2F2ZVRSQU5TX1ZUT1RBTF9BOworCXUzMiBzYXZlVFJBTlNfVkJMQU5LX0E7CisJdTMyIHNhdmVUUkFOU19WU1lOQ19BOwogCXUzMiBzYXZlUElQRUFTVEFUOwogCXUzMiBzYXZlRFNQQVNUUklERTsKIAl1MzIgc2F2ZURTUEFTSVpFOwpAQCAtMzAzLDggKzMxMCwxMSBAQAogCXUzMiBzYXZlRFNQQVNVUkY7CiAJdTMyIHNhdmVEU1BBVElMRU9GRjsKIAl1MzIgc2F2ZVBGSVRfUEdNX1JBVElPUzsKKwl1MzIgc2F2ZUJMQ19ISVNUX0NUTDsKIAl1MzIgc2F2ZUJMQ19QV01fQ1RMOwogCXUzMiBzYXZlQkxDX1BXTV9DVEwyOworCXUzMiBzYXZlQkxDX0NQVV9QV01fQ1RMOworCXUzMiBzYXZlQkxDX0NQVV9QV01fQ1RMMjsKIAl1MzIgc2F2ZUZQQjA7CiAJdTMyIHNhdmVGUEIxOwogCXUzMiBzYXZlRFBMTF9COwpAQCAtMzE2LDYgKzMyNiwxMiBAQAogCXUzMiBzYXZlVkJMQU5LX0I7CiAJdTMyIHNhdmVWU1lOQ19COwogCXUzMiBzYXZlQkNMUlBBVF9COworCXUzMiBzYXZlVFJBTlNfSFRPVEFMX0I7CisJdTMyIHNhdmVUUkFOU19IQkxBTktfQjsKKwl1MzIgc2F2ZVRSQU5TX0hTWU5DX0I7CisJdTMyIHNhdmVUUkFOU19WVE9UQUxfQjsKKwl1MzIgc2F2ZVRSQU5TX1ZCTEFOS19COworCXUzMiBzYXZlVFJBTlNfVlNZTkNfQjsKIAl1MzIgc2F2ZVBJUEVCU1RBVDsKIAl1MzIgc2F2ZURTUEJTVFJJREU7CiAJdTMyIHNhdmVEU1BCU0laRTsKQEAgLTM0MSw2ICszNTcsNyBAQAogCXUzMiBzYXZlUEZJVF9DT05UUk9MOwogCXUzMiBzYXZlX3BhbGV0dGVfYVsyNTZdOwogCXUzMiBzYXZlX3BhbGV0dGVfYlsyNTZdOworCXUzMiBzYXZlRFBGQ19DQl9CQVNFOwogCXUzMiBzYXZlRkJDX0NGQl9CQVNFOwogCXUzMiBzYXZlRkJDX0xMX0JBU0U7CiAJdTMyIHNhdmVGQkNfQ09OVFJPTDsKQEAgLTM0OCw2ICszNjUsMTIgQEAKIAl1MzIgc2F2ZUlFUjsKIAl1MzIgc2F2ZUlJUjsKIAl1MzIgc2F2ZUlNUjsKKwl1MzIgc2F2ZURFSUVSOworCXUzMiBzYXZlREVJTVI7CisJdTMyIHNhdmVHVElFUjsKKwl1MzIgc2F2ZUdUSU1SOworCXUzMiBzYXZlRkRJX1JYQV9JTVI7CisJdTMyIHNhdmVGRElfUlhCX0lNUjsKIAl1MzIgc2F2ZUNBQ0hFX01PREVfMDsKIAl1MzIgc2F2ZURfU1RBVEU7CiAJdTMyIHNhdmVEU1BDTEtfR0FURV9EOwpAQCAtMzgxLDYgKzQwNCwxNiBAQAogCXUzMiBzYXZlUElQRUJfRFBfTElOS19NOwogCXUzMiBzYXZlUElQRUFfRFBfTElOS19OOwogCXUzMiBzYXZlUElQRUJfRFBfTElOS19OOworCXUzMiBzYXZlRkRJX1JYQV9DVEw7CisJdTMyIHNhdmVGRElfVFhBX0NUTDsKKwl1MzIgc2F2ZUZESV9SWEJfQ1RMOworCXUzMiBzYXZlRkRJX1RYQl9DVEw7CisJdTMyIHNhdmVQRkFfQ1RMXzE7CisJdTMyIHNhdmVQRkJfQ1RMXzE7CisJdTMyIHNhdmVQRkFfV0lOX1NaOworCXUzMiBzYXZlUEZCX1dJTl9TWjsKKwl1MzIgc2F2ZVBGQV9XSU5fUE9TOworCXUzMiBzYXZlUEZCX1dJTl9QT1M7CiAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgZHJtX21tIGd0dF9zcGFjZTsKQEAgLTQ5MSw2ICs1MjQsOCBAQAogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BoeXNfb2JqZWN0ICpwaHlzX29ianNbSTkxNV9NQVhfUEhZU19PQkpFQ1RdOwogCX0gbW07CiAJc3RydWN0IHNkdm9fZGV2aWNlX21hcHBpbmcgc2R2b19tYXBwaW5nc1syXTsKKwkvKiBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBMVkRTX0JPUkRFUiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QgKi8KKwl1bnNpZ25lZCBpbnQgbHZkc19ib3JkZXJfYml0czsKIAogCS8qIFJlY2xvY2tpbmcgc3VwcG9ydCAqLwogCWJvb2wgcmVuZGVyX3JlY2xvY2tfYXZhaWw7CkBAIC02NjUsNiArNzAwLDcgQEAKIGV4dGVybiBpbnQgaTkxNV9pcnFfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIHZvaWQgaTkxNV91c2VyX2lycV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGk5MTVfdHJhY2VfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pOwogdm9pZCBpOTE1X3VzZXJfaXJxX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGk5MTVfZW5hYmxlX2ludGVycnVwdCAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKQEAgLTk3OSw3ICsxMDE1LDEwIEBACiAKICNkZWZpbmUgSEFTX0ZXX0JMQyhkZXYpIChJU19JOVhYKGRldikgfHwgSVNfRzRYKGRldikgfHwgSVNfSUdETkcoZGV2KSkKICNkZWZpbmUgSEFTX1BJUEVfQ1hTUihkZXYpIChJU19HNFgoZGV2KSB8fCBJU19JR0RORyhkZXYpKQotI2RlZmluZSBJOTE1X0hBU19GQkMoZGV2KSAoSVNfTU9CSUxFKGRldikgJiYgKElTX0k5WFgoZGV2KSB8fCBJU19JOTY1RyhkZXYpKSkKKyNkZWZpbmUgSTkxNV9IQVNfRkJDKGRldikgKElTX01PQklMRShkZXYpICYmIFwKKwkJCSAgIChJU19JOVhYKGRldikgfHwgSVNfR000NShkZXYpKSAmJiBcCisJCQkgICAhSVNfSUdEKGRldikgJiYgXAorCQkJICAgIUlTX0lHRE5HKGRldikpCiAKICNkZWZpbmUgUFJJTUFSWV9SSU5HQlVGRkVSX1NJWkUgICAgICAgICAoMTI4KjEwMjQpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDQwNzI3ZDQuLmFiZmMyN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTc3MCw3ICsxNzcwLDcgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBzZXFubzsKIAotCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKQorCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlIHx8IGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKQogCQlyZXR1cm47CiAKIAlzZXFubyA9IGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpOwpAQCAtMTc5NCw2ICsxNzk0LDEyIEBACiAJCX0gZWxzZQogCQkJYnJlYWs7CiAJfQorCisJaWYgKHVubGlrZWx5IChkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vICYmCisJCSAgICAgIGk5MTVfc2Vxbm9fcGFzc2VkKGRldl9wcml2LT50cmFjZV9pcnFfc2Vxbm8sIHNlcW5vKSkpIHsKKwkJaTkxNV91c2VyX2lycV9wdXQoZGV2KTsKKwkJZGV2X3ByaXYtPnRyYWNlX2lycV9zZXFubyA9IDA7CisJfQogfQogCiB2b2lkCkBAIC0zMzUyLDcgKzMzNTgsNyBAQAogCWV4ZWNfc3RhcnQgPSAodWludDMyX3QpIGV4ZWNfb2Zmc2V0ICsgZXhlYy0+YmF0Y2hfc3RhcnRfb2Zmc2V0OwogCWV4ZWNfbGVuID0gKHVpbnQzMl90KSBleGVjLT5iYXRjaF9sZW47CiAKLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3N1Ym1pdChkZXYsIGRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubyk7CisJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9zdWJtaXQoZGV2LCBkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8gKyAxKTsKIAogCWNvdW50ID0gbmJveCA/IG5ib3ggOiAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA0ZGZlZWM3Li5jM2NlZmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTcyNSw2ICs3MjUsMTYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOwogfQogCit2b2lkIGk5MTVfdHJhY2VfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID09IDApCisJCWk5MTVfdXNlcl9pcnFfZ2V0KGRldik7CisKKwlkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID0gc2Vxbm87Cit9CisKIHN0YXRpYyBpbnQgaTkxNV93YWl0X2lycShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IGlycV9ucikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggMDQ2NmRkYi4uMTY4N2VkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC05NjgsNiArOTY4LDggQEAKICNkZWZpbmUgICBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKIC8qIFNlbGVjdHMgcGlwZSBCIGZvciBMVkRTIGRhdGEuICBNdXN0IGJlIHNldCBvbiBwcmUtOTY1LiAqLwogI2RlZmluZSAgIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKKy8qIEVuYWJsZSBib3JkZXIgZm9yIHVuc2NhbGVkIChvciBhc3BlY3Qtc2NhbGVkKSBkaXNwbGF5ICovCisjZGVmaW5lICAgTFZEU19CT1JERVJfRU5BQkxFCQkoMSA8PCAxNSkKIC8qCiAgKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKICAqIHBpeGVsLgpAQCAtMTA3OCw2ICsxMDgwLDggQEAKICNkZWZpbmUgICBCQUNLTElHSFRfRFVUWV9DWUNMRV9TSElGVAkJKDApCiAjZGVmaW5lICAgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfTUFTSwkJKDB4ZmZmZikKIAorI2RlZmluZSBCTENfSElTVF9DVEwJCTB4NjEyNjAKKwogLyogVFYgcG9ydCBjb250cm9sICovCiAjZGVmaW5lIFRWX0NUTAkJCTB4NjgwMDAKIC8qKiBFbmFibGVzIHRoZSBUViBlbmNvZGVyICovCkBAIC0xNzgwLDYgKzE3ODQsMTEgQEAKICNkZWZpbmUgICBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIDk2NSBvciBsYXRlciAqLwogI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEpCiAjZGVmaW5lICAgUElQRV9PVkVSTEFZX1VQREFURURfU1RBVFVTCQkoMVVMPDwwKQorI2RlZmluZSAgIFBJUEVfQlBDX01BU0sgCQkJKDcgPDwgNSkgLyogSXJvbmxha2UgKi8KKyNkZWZpbmUgICBQSVBFXzhCUEMJCQkJKDAgPDwgNSkKKyNkZWZpbmUgICBQSVBFXzEwQlBDCQkJCSgxIDw8IDUpCisjZGVmaW5lICAgUElQRV82QlBDCQkJCSgyIDw8IDUpCisjZGVmaW5lICAgUElQRV8xMkJQQwkJCQkoMyA8PCA1KQogCiAjZGVmaW5lIERTUEFSQgkJCTB4NzAwMzAKICNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX01BU0sJKDB4N2YgPDwgNykKQEAgLTE3OTAsMTcgKzE3OTksMjkgQEAKICNkZWZpbmUgICBEU1BBUkJfQUVORF9TSElGVAkwCiAKICNkZWZpbmUgRFNQRlcxCQkJMHg3MDAzNAorI2RlZmluZSAgIERTUEZXX1NSX1NISUZUCTIzCisjZGVmaW5lICAgRFNQRldfQ1VSU09SQl9TSElGVAkxNgorI2RlZmluZSAgIERTUEZXX1BMQU5FQl9TSElGVAk4CiAjZGVmaW5lIERTUEZXMgkJCTB4NzAwMzgKKyNkZWZpbmUgICBEU1BGV19DVVJTT1JBX01BU0sJMHgwMDAwM2YwMAorI2RlZmluZSAgIERTUEZXX0NVUlNPUkFfU0hJRlQJMTYKICNkZWZpbmUgRFNQRlczCQkJMHg3MDAzYworI2RlZmluZSAgIERTUEZXX0hQTExfU1JfRU4JKDE8PDMxKQorI2RlZmluZSAgIERTUEZXX0NVUlNPUl9TUl9TSElGVAkyNAogI2RlZmluZSAgIElHRF9TRUxGX1JFRlJFU0hfRU4JKDE8PDMwKQogCiAvKiBGSUZPIHdhdGVybWFyayBzaXplcyBldGMgKi8KKyNkZWZpbmUgRzRYX0ZJRk9fTElORV9TSVpFCTY0CiAjZGVmaW5lIEk5MTVfRklGT19MSU5FX1NJWkUJNjQKICNkZWZpbmUgSTgzMF9GSUZPX0xJTkVfU0laRQkzMgorCisjZGVmaW5lIEc0WF9GSUZPX1NJWkUJCTEyNwogI2RlZmluZSBJOTQ1X0ZJRk9fU0laRQkJMTI3IC8qIDk0NSAmIDk2NSAqLwogI2RlZmluZSBJOTE1X0ZJRk9fU0laRQkJOTUKICNkZWZpbmUgSTg1NUdNX0ZJRk9fU0laRQkxMjcgLyogSW4gY2FjaGVsaW5lcyAqLwogI2RlZmluZSBJODMwX0ZJRk9fU0laRQkJOTUKKworI2RlZmluZSBHNFhfTUFYX1dNCQkweDNmCiAjZGVmaW5lIEk5MTVfTUFYX1dNCQkweDNmCiAKICNkZWZpbmUgSUdEX0RJU1BMQVlfRklGTwk1MTIgLyogaW4gNjRieXRlIHVuaXQgKi8KQEAgLTIwMzAsNiArMjA1MSwxMSBAQAogI2RlZmluZSBQRkFfQ1RMXzEgICAgICAgICAgICAgICAweDY4MDgwCiAjZGVmaW5lIFBGQl9DVExfMSAgICAgICAgICAgICAgIDB4Njg4ODAKICNkZWZpbmUgIFBGX0VOQUJMRSAgICAgICAgICAgICAgKDE8PDMxKQorI2RlZmluZSAgUEZfRklMVEVSX01BU0sJCSgzPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9QUk9HUkFNTUVECSgwPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9NRURfM3gzCSgxPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9FREdFX0VOSEFOQ0UJKDI8PDIzKQorI2RlZmluZSAgUEZfRklMVEVSX0VER0VfU09GVEVOCSgzPDwyMykKICNkZWZpbmUgUEZBX1dJTl9TWgkJMHg2ODA3NAogI2RlZmluZSBQRkJfV0lOX1NaCQkweDY4ODc0CiAjZGVmaW5lIFBGQV9XSU5fUE9TCQkweDY4MDcwCkBAIC0yMTQ5LDExICsyMTc1LDExIEBACiAjZGVmaW5lICBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX01BU0sJCSgzPDwxMykKICNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9ESVNBQkxFICAgICAgICAgICAgICAgICgwPDwxMSkKICNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9FTkFCTEUgICAgICAgICAgICAgICAgICgyPDwxMSkKLSNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9NQVNLCQkJKDI8PDExKQorI2RlZmluZSAgRFJFRl9TU0NfU09VUkNFX01BU0sJCQkoMzw8MTEpCiAjZGVmaW5lICBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRElTQUJMRSAgICAgICAgICAoMDw8OSkKICNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX0NLNTA1X0VOQUJMRQkJKDE8PDkpCiAjZGVmaW5lICBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRU5BQkxFICAgICAgICAgICAoMjw8OSkKLSNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLCQkoMjw8OSkKKyNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLCQkoMzw8OSkKICNkZWZpbmUgIERSRUZfU1VQRVJTUFJFQURfU09VUkNFX0RJU0FCTEUgICAgICAgICgwPDw3KQogI2RlZmluZSAgRFJFRl9TVVBFUlNQUkVBRF9TT1VSQ0VfRU5BQkxFICAgICAgICAgKDI8PDcpCiAjZGVmaW5lICBEUkVGX1NTQzRfRE9XTlNQUkVBRCAgICAgICAgICAgICAgICAgICAoMDw8NikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKaW5kZXggYmQ2ZDhkOS4uOTkyZDU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTMyLDExICszMiwxNSBAQAogc3RhdGljIGJvb2wgaTkxNV9waXBlX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIJZHBsbF9yZWc7CiAKLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCXJldHVybiAoSTkxNV9SRUFEKERQTExfQSkgJiBEUExMX1ZDT19FTkFCTEUpOwotCWVsc2UKLQkJcmV0dXJuIChJOTE1X1JFQUQoRFBMTF9CKSAmIERQTExfVkNPX0VOQUJMRSk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZHBsbF9yZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gUENIX0RQTExfQTogUENIX0RQTExfQjsKKwl9IGVsc2UgeworCQlkcGxsX3JlZyA9IChwaXBlID09IFBJUEVfQSkgPyBEUExMX0E6IERQTExfQjsKKwl9CisKKwlyZXR1cm4gKEk5MTVfUkVBRChkcGxsX3JlZykgJiBEUExMX1ZDT19FTkFCTEUpOwogfQogCiBzdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKQEAgLTQ5LDYgKzUzLDkgQEAKIAlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKQorCQlyZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gTEdDX1BBTEVUVEVfQSA6IExHQ19QQUxFVFRFX0I7CisKIAlpZiAocGlwZSA9PSBQSVBFX0EpCiAJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwogCWVsc2UKQEAgLTY4LDYgKzc1LDkgQEAKIAlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKQorCQlyZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gTEdDX1BBTEVUVEVfQSA6IExHQ19QQUxFVFRFX0I7CisKIAlpZiAocGlwZSA9PSBQSVBFX0EpCiAJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwogCWVsc2UKQEAgLTIzMiwxMCArMjQyLDE2IEBACiAJLyogUGlwZSAmIHBsYW5lIEEgaW5mbyAqLwogCWRldl9wcml2LT5zYXZlUElQRUFDT05GID0gSTkxNV9SRUFEKFBJUEVBQ09ORik7CiAJZGV2X3ByaXYtPnNhdmVQSVBFQVNSQyA9IEk5MTVfUkVBRChQSVBFQVNSQyk7Ci0JZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKEZQQTApOwotCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChGUEExKTsKLQlkZXZfcHJpdi0+c2F2ZURQTExfQSA9IEk5MTVfUkVBRChEUExMX0EpOwotCWlmIChJU19JOTY1RyhkZXYpKQorCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlRlBBMCA9IEk5MTVfUkVBRChQQ0hfRlBBMCk7CisJCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChQQ0hfRlBBMSk7CisJCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKFBDSF9EUExMX0EpOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5zYXZlRlBBMCA9IEk5MTVfUkVBRChGUEEwKTsKKwkJZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKEZQQTEpOworCQlkZXZfcHJpdi0+c2F2ZURQTExfQSA9IEk5MTVfUkVBRChEUExMX0EpOworCX0KKwlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJZGV2X3ByaXYtPnNhdmVEUExMX0FfTUQgPSBJOTE1X1JFQUQoRFBMTF9BX01EKTsKIAlkZXZfcHJpdi0+c2F2ZUhUT1RBTF9BID0gSTkxNV9SRUFEKEhUT1RBTF9BKTsKIAlkZXZfcHJpdi0+c2F2ZUhCTEFOS19BID0gSTkxNV9SRUFEKEhCTEFOS19BKTsKQEAgLTI0Myw3ICsyNTksMjQgQEAKIAlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BID0gSTkxNV9SRUFEKFZUT1RBTF9BKTsKIAlkZXZfcHJpdi0+c2F2ZVZCTEFOS19BID0gSTkxNV9SRUFEKFZCTEFOS19BKTsKIAlkZXZfcHJpdi0+c2F2ZVZTWU5DX0EgPSBJOTE1X1JFQUQoVlNZTkNfQSk7Ci0JZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKKwlpZiAoIUlTX0lHRE5HKGRldikpCisJCWRldl9wcml2LT5zYXZlQkNMUlBBVF9BID0gSTkxNV9SRUFEKEJDTFJQQVRfQSk7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZUZESV9UWEFfQ1RMID0gSTkxNV9SRUFEKEZESV9UWEFfQ1RMKTsKKwkJZGV2X3ByaXYtPnNhdmVGRElfUlhBX0NUTCA9IEk5MTVfUkVBRChGRElfUlhBX0NUTCk7CisKKwkJZGV2X3ByaXYtPnNhdmVQRkFfQ1RMXzEgPSBJOTE1X1JFQUQoUEZBX0NUTF8xKTsKKwkJZGV2X3ByaXYtPnNhdmVQRkFfV0lOX1NaID0gSTkxNV9SRUFEKFBGQV9XSU5fU1opOworCQlkZXZfcHJpdi0+c2F2ZVBGQV9XSU5fUE9TID0gSTkxNV9SRUFEKFBGQV9XSU5fUE9TKTsKKworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX0hUT1RBTF9BID0gSTkxNV9SRUFEKFRSQU5TX0hUT1RBTF9BKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19IQkxBTktfQSA9IEk5MTVfUkVBRChUUkFOU19IQkxBTktfQSk7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfSFNZTkNfQSA9IEk5MTVfUkVBRChUUkFOU19IU1lOQ19BKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19WVE9UQUxfQSA9IEk5MTVfUkVBRChUUkFOU19WVE9UQUxfQSk7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfVkJMQU5LX0EgPSBJOTE1X1JFQUQoVFJBTlNfVkJMQU5LX0EpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZTWU5DX0EgPSBJOTE1X1JFQUQoVFJBTlNfVlNZTkNfQSk7CisJfQogCiAJZGV2X3ByaXYtPnNhdmVEU1BBQ05UUiA9IEk5MTVfUkVBRChEU1BBQ05UUik7CiAJZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFID0gSTkxNV9SRUFEKERTUEFTVFJJREUpOwpAQCAtMjYwLDEwICsyOTMsMTYgQEAKIAkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCiAJZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYgPSBJOTE1X1JFQUQoUElQRUJDT05GKTsKIAlkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDID0gSTkxNV9SRUFEKFBJUEVCU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQjAgPSBJOTE1X1JFQUQoRlBCMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEIxID0gSTkxNV9SRUFEKEZQQjEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9CID0gSTkxNV9SRUFEKERQTExfQik7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVGUEIwID0gSTkxNV9SRUFEKFBDSF9GUEIwKTsKKwkJZGV2X3ByaXYtPnNhdmVGUEIxID0gSTkxNV9SRUFEKFBDSF9GUEIxKTsKKwkJZGV2X3ByaXYtPnNhdmVEUExMX0IgPSBJOTE1X1JFQUQoUENIX0RQTExfQik7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnNhdmVGUEIwID0gSTkxNV9SRUFEKEZQQjApOworCQlkZXZfcHJpdi0+c2F2ZUZQQjEgPSBJOTE1X1JFQUQoRlBCMSk7CisJCWRldl9wcml2LT5zYXZlRFBMTF9CID0gSTkxNV9SRUFEKERQTExfQik7CisJfQorCWlmIChJU19JOTY1RyhkZXYpICYmICFJU19JR0RORyhkZXYpKQogCQlkZXZfcHJpdi0+c2F2ZURQTExfQl9NRCA9IEk5MTVfUkVBRChEUExMX0JfTUQpOwogCWRldl9wcml2LT5zYXZlSFRPVEFMX0IgPSBJOTE1X1JFQUQoSFRPVEFMX0IpOwogCWRldl9wcml2LT5zYXZlSEJMQU5LX0IgPSBJOTE1X1JFQUQoSEJMQU5LX0IpOwpAQCAtMjcxLDcgKzMxMCwyNCBAQAogCWRldl9wcml2LT5zYXZlVlRPVEFMX0IgPSBJOTE1X1JFQUQoVlRPVEFMX0IpOwogCWRldl9wcml2LT5zYXZlVkJMQU5LX0IgPSBJOTE1X1JFQUQoVkJMQU5LX0IpOwogCWRldl9wcml2LT5zYXZlVlNZTkNfQiA9IEk5MTVfUkVBRChWU1lOQ19CKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOworCWlmICghSVNfSUdETkcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0IgPSBJOTE1X1JFQUQoQkNMUlBBVF9CKTsKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlRkRJX1RYQl9DVEwgPSBJOTE1X1JFQUQoRkRJX1RYQl9DVEwpOworCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEJfQ1RMID0gSTkxNV9SRUFEKEZESV9SWEJfQ1RMKTsKKworCQlkZXZfcHJpdi0+c2F2ZVBGQl9DVExfMSA9IEk5MTVfUkVBRChQRkJfQ1RMXzEpOworCQlkZXZfcHJpdi0+c2F2ZVBGQl9XSU5fU1ogPSBJOTE1X1JFQUQoUEZCX1dJTl9TWik7CisJCWRldl9wcml2LT5zYXZlUEZCX1dJTl9QT1MgPSBJOTE1X1JFQUQoUEZCX1dJTl9QT1MpOworCisJCWRldl9wcml2LT5zYXZlVFJBTlNfSFRPVEFMX0IgPSBJOTE1X1JFQUQoVFJBTlNfSFRPVEFMX0IpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX0hCTEFOS19CID0gSTkxNV9SRUFEKFRSQU5TX0hCTEFOS19CKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19IU1lOQ19CID0gSTkxNV9SRUFEKFRSQU5TX0hTWU5DX0IpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZUT1RBTF9CID0gSTkxNV9SRUFEKFRSQU5TX1ZUT1RBTF9CKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19WQkxBTktfQiA9IEk5MTVfUkVBRChUUkFOU19WQkxBTktfQik7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfVlNZTkNfQiA9IEk5MTVfUkVBRChUUkFOU19WU1lOQ19CKTsKKwl9CiAKIAlkZXZfcHJpdi0+c2F2ZURTUEJDTlRSID0gSTkxNV9SRUFEKERTUEJDTlRSKTsKIAlkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUgPSBJOTE1X1JFQUQoRFNQQlNUUklERSk7CkBAIC0yOTAsMjMgKzM0Niw0MSBAQAogc3RhdGljIHZvaWQgaTkxNV9yZXN0b3JlX21vZGVzZXRfcmVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgZHBsbF9hX3JlZywgZnBhMF9yZWcsIGZwYTFfcmVnOworCWludCBkcGxsX2JfcmVnLCBmcGIwX3JlZywgZnBiMV9yZWc7CiAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKIAkJcmV0dXJuOwogCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZHBsbF9hX3JlZyA9IFBDSF9EUExMX0E7CisJCWRwbGxfYl9yZWcgPSBQQ0hfRFBMTF9COworCQlmcGEwX3JlZyA9IFBDSF9GUEEwOworCQlmcGIwX3JlZyA9IFBDSF9GUEIwOworCQlmcGExX3JlZyA9IFBDSF9GUEExOworCQlmcGIxX3JlZyA9IFBDSF9GUEIxOworCX0gZWxzZSB7CisJCWRwbGxfYV9yZWcgPSBEUExMX0E7CisJCWRwbGxfYl9yZWcgPSBEUExMX0I7CisJCWZwYTBfcmVnID0gRlBBMDsKKwkJZnBiMF9yZWcgPSBGUEIwOworCQlmcGExX3JlZyA9IEZQQTE7CisJCWZwYjFfcmVnID0gRlBCMTsKKwl9CisKIAkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCiAJLyogUHJpbWUgdGhlIGNsb2NrICovCiAJaWYgKGRldl9wcml2LT5zYXZlRFBMTF9BICYgRFBMTF9WQ09fRU5BQkxFKSB7Ci0JCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSAmCisJCUk5MTVfV1JJVEUoZHBsbF9hX3JlZywgZGV2X3ByaXYtPnNhdmVEUExMX0EgJgogCQkJICAgfkRQTExfVkNPX0VOQUJMRSk7CiAJCURSTV9VREVMQVkoMTUwKTsKIAl9Ci0JSTkxNV9XUklURShGUEEwLCBkZXZfcHJpdi0+c2F2ZUZQQTApOwotCUk5MTVfV1JJVEUoRlBBMSwgZGV2X3ByaXYtPnNhdmVGUEExKTsKKwlJOTE1X1dSSVRFKGZwYTBfcmVnLCBkZXZfcHJpdi0+c2F2ZUZQQTApOworCUk5MTVfV1JJVEUoZnBhMV9yZWcsIGRldl9wcml2LT5zYXZlRlBBMSk7CiAJLyogQWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKKwlJOTE1X1dSSVRFKGRwbGxfYV9yZWcsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKIAlEUk1fVURFTEFZKDE1MCk7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0k5NjVHKGRldikgJiYgIUlTX0lHRE5HKGRldikpCiAJCUk5MTVfV1JJVEUoRFBMTF9BX01ELCBkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCk7CiAJRFJNX1VERUxBWSgxNTApOwogCkBAIC0zMTcsNyArMzkxLDI0IEBACiAJSTkxNV9XUklURShWVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVWVE9UQUxfQSk7CiAJSTkxNV9XUklURShWQkxBTktfQSwgZGV2X3ByaXYtPnNhdmVWQkxBTktfQSk7CiAJSTkxNV9XUklURShWU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZVZTWU5DX0EpOwotCUk5MTVfV1JJVEUoQkNMUlBBVF9BLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSk7CisJaWYgKCFJU19JR0RORyhkZXYpKQorCQlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EpOworCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJSTkxNV9XUklURShGRElfUlhBX0NUTCwgZGV2X3ByaXYtPnNhdmVGRElfUlhBX0NUTCk7CisJCUk5MTVfV1JJVEUoRkRJX1RYQV9DVEwsIGRldl9wcml2LT5zYXZlRkRJX1RYQV9DVEwpOworCisJCUk5MTVfV1JJVEUoUEZBX0NUTF8xLCBkZXZfcHJpdi0+c2F2ZVBGQV9DVExfMSk7CisJCUk5MTVfV1JJVEUoUEZBX1dJTl9TWiwgZGV2X3ByaXYtPnNhdmVQRkFfV0lOX1NaKTsKKwkJSTkxNV9XUklURShQRkFfV0lOX1BPUywgZGV2X3ByaXYtPnNhdmVQRkFfV0lOX1BPUyk7CisKKwkJSTkxNV9XUklURShUUkFOU19IVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVUUkFOU19IVE9UQUxfQSk7CisJCUk5MTVfV1JJVEUoVFJBTlNfSEJMQU5LX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfSEJMQU5LX0EpOworCQlJOTE1X1dSSVRFKFRSQU5TX0hTWU5DX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfSFNZTkNfQSk7CisJCUk5MTVfV1JJVEUoVFJBTlNfVlRPVEFMX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfVlRPVEFMX0EpOworCQlJOTE1X1dSSVRFKFRSQU5TX1ZCTEFOS19BLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZCTEFOS19BKTsKKwkJSTkxNV9XUklURShUUkFOU19WU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZTWU5DX0EpOworCX0KIAogCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLwogCUk5MTVfV1JJVEUoRFNQQVNJWkUsIGRldl9wcml2LT5zYXZlRFNQQVNJWkUpOwpAQCAtMzM5LDE0ICs0MzAsMTQgQEAKIAogCS8qIFBpcGUgJiBwbGFuZSBCIGluZm8gKi8KIAlpZiAoZGV2X3ByaXYtPnNhdmVEUExMX0IgJiBEUExMX1ZDT19FTkFCTEUpIHsKLQkJSTkxNV9XUklURShEUExMX0IsIGRldl9wcml2LT5zYXZlRFBMTF9CICYKKwkJSTkxNV9XUklURShkcGxsX2JfcmVnLCBkZXZfcHJpdi0+c2F2ZURQTExfQiAmCiAJCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKIAkJRFJNX1VERUxBWSgxNTApOwogCX0KLQlJOTE1X1dSSVRFKEZQQjAsIGRldl9wcml2LT5zYXZlRlBCMCk7Ci0JSTkxNV9XUklURShGUEIxLCBkZXZfcHJpdi0+c2F2ZUZQQjEpOworCUk5MTVfV1JJVEUoZnBiMF9yZWcsIGRldl9wcml2LT5zYXZlRlBCMCk7CisJSTkxNV9XUklURShmcGIxX3JlZywgZGV2X3ByaXYtPnNhdmVGUEIxKTsKIAkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KLQlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IpOworCUk5MTVfV1JJVEUoZHBsbF9iX3JlZywgZGV2X3ByaXYtPnNhdmVEUExMX0IpOwogCURSTV9VREVMQVkoMTUwKTsKIAlpZiAoSVNfSTk2NUcoZGV2KSkKIAkJSTkxNV9XUklURShEUExMX0JfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9CX01EKTsKQEAgLTM1OSw3ICs0NTAsMjQgQEAKIAlJOTE1X1dSSVRFKFZUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CKTsKIAlJOTE1X1dSSVRFKFZCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19CKTsKIAlJOTE1X1dSSVRFKFZTWU5DX0IsIGRldl9wcml2LT5zYXZlVlNZTkNfQik7Ci0JSTkxNV9XUklURShCQ0xSUEFUX0IsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9CKTsKKwlpZiAoIUlTX0lHRE5HKGRldikpCisJCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQik7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlJOTE1X1dSSVRFKEZESV9SWEJfQ1RMLCBkZXZfcHJpdi0+c2F2ZUZESV9SWEJfQ1RMKTsKKwkJSTkxNV9XUklURShGRElfVFhCX0NUTCwgZGV2X3ByaXYtPnNhdmVGRElfVFhCX0NUTCk7CisKKwkJSTkxNV9XUklURShQRkJfQ1RMXzEsIGRldl9wcml2LT5zYXZlUEZCX0NUTF8xKTsKKwkJSTkxNV9XUklURShQRkJfV0lOX1NaLCBkZXZfcHJpdi0+c2F2ZVBGQl9XSU5fU1opOworCQlJOTE1X1dSSVRFKFBGQl9XSU5fUE9TLCBkZXZfcHJpdi0+c2F2ZVBGQl9XSU5fUE9TKTsKKworCQlJOTE1X1dSSVRFKFRSQU5TX0hUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX0hUT1RBTF9CKTsKKwkJSTkxNV9XUklURShUUkFOU19IQkxBTktfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19IQkxBTktfQik7CisJCUk5MTVfV1JJVEUoVFJBTlNfSFNZTkNfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19IU1lOQ19CKTsKKwkJSTkxNV9XUklURShUUkFOU19WVE9UQUxfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19WVE9UQUxfQik7CisJCUk5MTVfV1JJVEUoVFJBTlNfVkJMQU5LX0IsIGRldl9wcml2LT5zYXZlVFJBTlNfVkJMQU5LX0IpOworCQlJOTE1X1dSSVRFKFRSQU5TX1ZTWU5DX0IsIGRldl9wcml2LT5zYXZlVFJBTlNfVlNZTkNfQik7CisJfQogCiAJLyogUmVzdG9yZSBwbGFuZSBpbmZvICovCiAJSTkxNV9XUklURShEU1BCU0laRSwgZGV2X3ByaXYtPnNhdmVEU1BCU0laRSk7CkBAIC00MDQsMjEgKzUxMiw0MyBAQAogCQlkZXZfcHJpdi0+c2F2ZUNVUlNJWkUgPSBJOTE1X1JFQUQoQ1VSU0laRSk7CiAKIAkvKiBDUlQgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZUFEUEEgPSBJOTE1X1JFQUQoQURQQSk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVBRFBBID0gSTkxNV9SRUFEKFBDSF9BRFBBKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUFEUEEgPSBJOTE1X1JFQUQoQURQQSk7CisJfQogCiAJLyogTFZEUyBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyA9IEk5MTVfUkVBRChQRklUX1BHTV9SQVRJT1MpOwotCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wgPSBJOTE1X1JFQUQoUENIX1BQX0NPTlRST0wpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gSTkxNV9SRUFEKEJMQ19QV01fUENIX0NUTDEpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX1BDSF9DVEwyKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DUFVfQ1RMKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwyID0gSTkxNV9SRUFEKEJMQ19QV01fQ1BVX0NUTDIpOworCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoUENIX0xWRFMpOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKKwkJZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MgPSBJOTE1X1JFQUQoUEZJVF9QR01fUkFUSU9TKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCk7CisJCWRldl9wcml2LT5zYXZlQkxDX0hJU1RfQ1RMID0gSTkxNV9SRUFEKEJMQ19ISVNUX0NUTCk7CisJCWlmIChJU19JOTY1RyhkZXYpKQorCQkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKKwkJaWYgKElTX01PQklMRShkZXYpICYmICFJU19JODMwKGRldikpCisJCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7CisJfQorCisJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJZGV2X3ByaXYtPnNhdmVQRklUX0NPTlRST0wgPSBJOTE1X1JFQUQoUEZJVF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PTl9ERUxBWVMpOwotCWRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PRkZfREVMQVlTKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IgPSBJOTE1X1JFQUQoUFBfRElWSVNPUik7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQQ0hfUFBfT05fREVMQVlTKTsKKwkJZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTID0gSTkxNV9SRUFEKFBDSF9QUF9PRkZfREVMQVlTKTsKKwkJZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SID0gSTkxNV9SRUFEKFBDSF9QUF9ESVZJU09SKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PTl9ERUxBWVMpOworCQlkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMgPSBJOTE1X1JFQUQoUFBfT0ZGX0RFTEFZUyk7CisJCWRldl9wcml2LT5zYXZlUFBfRElWSVNPUiA9IEk5MTVfUkVBRChQUF9ESVZJU09SKTsKKwl9CiAKIAkvKiBEaXNwbGF5IFBvcnQgc3RhdGUgKi8KIAlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9EUChkZXYpKSB7CkBAIC00MzcsMTYgKzU2NywyMyBAQAogCS8qIEZJWE1FOiBzYXZlIFRWICYgU0RWTyBzdGF0ZSAqLwogCiAJLyogRkJDIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0NGQl9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMiA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTDIpOwotCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wpOworCWlmIChJU19HTTQ1KGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVEUEZDX0NCX0JBU0UgPSBJOTE1X1JFQUQoRFBGQ19DQl9CQVNFKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSA9IEk5MTVfUkVBRChGQkNfQ0ZCX0JBU0UpOworCQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKKwkJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wyKTsKKwkJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTCk7CisJfQogCiAJLyogVkdBIHN0YXRlICovCiAJZGV2X3ByaXYtPnNhdmVWR0EwID0gSTkxNV9SRUFEKFZHQTApOwogCWRldl9wcml2LT5zYXZlVkdBMSA9IEk5MTVfUkVBRChWR0ExKTsKIAlkZXZfcHJpdi0+c2F2ZVZHQV9QRCA9IEk5MTVfUkVBRChWR0FfUEQpOwotCWRldl9wcml2LT5zYXZlVkdBQ05UUkwgPSBJOTE1X1JFQUQoVkdBQ05UUkwpOworCWlmIChJU19JR0RORyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKENQVV9WR0FDTlRSTCk7CisJZWxzZQorCQlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKFZHQUNOVFJMKTsKIAogCWk5MTVfc2F2ZV92Z2EoZGV2KTsKIH0KQEAgLTQ4NSwyMiArNjIyLDQxIEBACiAJCUk5MTVfV1JJVEUoQ1VSU0laRSwgZGV2X3ByaXYtPnNhdmVDVVJTSVpFKTsKIAogCS8qIENSVCBzdGF0ZSAqLwotCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJSTkxNV9XUklURShQQ0hfQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKIAogCS8qIExWRFMgc3RhdGUgKi8KLQlpZiAoSVNfSTk2NUcoZGV2KSkKKwlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJSTkxNV9XUklURShCTENfUFdNX0NUTDIsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyKTsKLQlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoUENIX0xWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7CisJfSBlbHNlIGlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQogCQlJOTE1X1dSSVRFKExWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikgJiYgIUlTX0lHRE5HKGRldikpCiAJCUk5MTVfV1JJVEUoUEZJVF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCk7CiAKLQlJOTE1X1dSSVRFKFBGSVRfUEdNX1JBVElPUywgZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MpOwotCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwpOwotCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7Ci0JSTkxNV9XUklURShQUF9PRkZfREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMpOwotCUk5MTVfV1JJVEUoUFBfRElWSVNPUiwgZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SKTsKLQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJSTkxNV9XUklURShCTENfUFdNX1BDSF9DVEwxLCBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMKTsKKwkJSTkxNV9XUklURShCTENfUFdNX1BDSF9DVEwyLCBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMik7CisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DUFVfQ1RMLCBkZXZfcHJpdi0+c2F2ZUJMQ19DUFVfUFdNX0NUTCk7CisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DUFVfQ1RMMiwgZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwyKTsKKwkJSTkxNV9XUklURShQQ0hfUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUENIX1BQX09GRl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUENIX1BQX0RJVklTT1IsIGRldl9wcml2LT5zYXZlUFBfRElWSVNPUik7CisJCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJfSBlbHNlIHsKKwkJSTkxNV9XUklURShQRklUX1BHTV9SQVRJT1MsIGRldl9wcml2LT5zYXZlUEZJVF9QR01fUkFUSU9TKTsKKwkJSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7CisJCUk5MTVfV1JJVEUoQkxDX0hJU1RfQ1RMLCBkZXZfcHJpdi0+c2F2ZUJMQ19ISVNUX0NUTCk7CisJCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUFBfT0ZGX0RFTEFZUywgZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTKTsKKwkJSTkxNV9XUklURShQUF9ESVZJU09SLCBkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IpOworCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJfQogCiAJLyogRGlzcGxheSBQb3J0IHN0YXRlICovCiAJaWYgKFNVUFBPUlRTX0lOVEVHUkFURURfRFAoZGV2KSkgewpAQCAtNTExLDEzICs2NjcsMjIgQEAKIAkvKiBGSVhNRTogcmVzdG9yZSBUViAmIFNEVk8gc3RhdGUgKi8KIAogCS8qIEZCQyBpbmZvICovCi0JSTkxNV9XUklURShGQkNfQ0ZCX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFKTsKLQlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKLQlJOTE1X1dSSVRFKEZCQ19DT05UUk9MMiwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIpOwotCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wpOworCWlmIChJU19HTTQ1KGRldikpIHsKKwkJZzR4X2Rpc2FibGVfZmJjKGRldik7CisJCUk5MTVfV1JJVEUoRFBGQ19DQl9CQVNFLCBkZXZfcHJpdi0+c2F2ZURQRkNfQ0JfQkFTRSk7CisJfSBlbHNlIHsKKwkJaTh4eF9kaXNhYmxlX2ZiYyhkZXYpOworCQlJOTE1X1dSSVRFKEZCQ19DRkJfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UpOworCQlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKKwkJSTkxNV9XUklURShGQkNfQ09OVFJPTDIsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyKTsKKwkJSTkxNV9XUklURShGQkNfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCk7CisJfQogCiAJLyogVkdBIHN0YXRlICovCi0JSTkxNV9XUklURShWR0FDTlRSTCwgZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCk7CisJaWYgKElTX0lHRE5HKGRldikpCisJCUk5MTVfV1JJVEUoQ1BVX1ZHQUNOVFJMLCBkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoVkdBQ05UUkwsIGRldl9wcml2LT5zYXZlVkdBQ05UUkwpOwogCUk5MTVfV1JJVEUoVkdBMCwgZGV2X3ByaXYtPnNhdmVWR0EwKTsKIAlJOTE1X1dSSVRFKFZHQTEsIGRldl9wcml2LT5zYXZlVkdBMSk7CiAJSTkxNV9XUklURShWR0FfUEQsIGRldl9wcml2LT5zYXZlVkdBX1BEKTsKQEAgLTU0Myw4ICs3MDgsMTcgQEAKIAlpOTE1X3NhdmVfZGlzcGxheShkZXYpOwogCiAJLyogSW50ZXJydXB0IHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKLQlkZXZfcHJpdi0+c2F2ZUlNUiA9IEk5MTVfUkVBRChJTVIpOworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlREVJRVIgPSBJOTE1X1JFQUQoREVJRVIpOworCQlkZXZfcHJpdi0+c2F2ZURFSU1SID0gSTkxNV9SRUFEKERFSU1SKTsKKwkJZGV2X3ByaXYtPnNhdmVHVElFUiA9IEk5MTVfUkVBRChHVElFUik7CisJCWRldl9wcml2LT5zYXZlR1RJTVIgPSBJOTE1X1JFQUQoR1RJTVIpOworCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEFfSU1SID0gSTkxNV9SRUFEKEZESV9SWEFfSU1SKTsKKwkJZGV2X3ByaXYtPnNhdmVGRElfUlhCX0lNUiA9IEk5MTVfUkVBRChGRElfUlhCX0lNUik7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKKwkJZGV2X3ByaXYtPnNhdmVJTVIgPSBJOTE1X1JFQUQoSU1SKTsKKwl9CiAKIAkvKiBDbG9jayBnYXRpbmcgc3RhdGUgKi8KIAlkZXZfcHJpdi0+c2F2ZURfU1RBVEUgPSBJOTE1X1JFQUQoRF9TVEFURSk7CkBAIC02MDksOCArNzgzLDE3IEBACiAJaTkxNV9yZXN0b3JlX2Rpc3BsYXkoZGV2KTsKIAogCS8qIEludGVycnVwdCBzdGF0ZSAqLwotCUk5MTVfV1JJVEUgKElFUiwgZGV2X3ByaXYtPnNhdmVJRVIpOwotCUk5MTVfV1JJVEUgKElNUiwgIGRldl9wcml2LT5zYXZlSU1SKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlJOTE1X1dSSVRFKERFSUVSLCBkZXZfcHJpdi0+c2F2ZURFSUVSKTsKKwkJSTkxNV9XUklURShERUlNUiwgZGV2X3ByaXYtPnNhdmVERUlNUik7CisJCUk5MTVfV1JJVEUoR1RJRVIsIGRldl9wcml2LT5zYXZlR1RJRVIpOworCQlJOTE1X1dSSVRFKEdUSU1SLCBkZXZfcHJpdi0+c2F2ZUdUSU1SKTsKKwkJSTkxNV9XUklURShGRElfUlhBX0lNUiwgZGV2X3ByaXYtPnNhdmVGRElfUlhBX0lNUik7CisJCUk5MTVfV1JJVEUoRkRJX1JYQl9JTVIsIGRldl9wcml2LT5zYXZlRkRJX1JYQl9JTVIpOworCX0gZWxzZSB7CisJCUk5MTVfV1JJVEUgKElFUiwgZGV2X3ByaXYtPnNhdmVJRVIpOworCQlJOTE1X1dSSVRFIChJTVIsICBkZXZfcHJpdi0+c2F2ZUlNUik7CisJfQogCiAJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCiAJSTkxNV9XUklURSAoRF9TVEFURSwgZGV2X3ByaXYtPnNhdmVEX1NUQVRFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaAppbmRleCA1NTY3YTQwLi4wMTg0MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RyYWNlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oCkBAIC0xNTgsMTYgKzE1OCwxNyBAQAogCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8pLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCi0JCQkgICAgIF9fZmllbGQoc3RydWN0IGRybV9kZXZpY2UgKiwgZGV2KQorCQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQogCQkJICAgICBfX2ZpZWxkKHUzMiwgc2Vxbm8pCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKKwkJCSAgIGk5MTVfdHJhY2VfaXJxX2dldChkZXYsIHNlcW5vKTsKIAkJCSAgICksCiAKLQkgICAgVFBfcHJpbnRrKCJkZXY9JXAsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKICk7CiAKIFRSQUNFX0VWRU5UKGk5MTVfZ2VtX3JlcXVlc3RfZmx1c2gsCkBAIC0xNzgsMjAgKzE3OSwyMCBAQAogCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8sIGZsdXNoX2RvbWFpbnMsIGludmFsaWRhdGVfZG9tYWlucyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgX19maWVsZCh1MzIsIGZsdXNoX2RvbWFpbnMpCiAJCQkgICAgIF9fZmllbGQodTMyLCBpbnZhbGlkYXRlX2RvbWFpbnMpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKIAkJCSAgIF9fZW50cnktPmZsdXNoX2RvbWFpbnMgPSBmbHVzaF9kb21haW5zOwogCQkJICAgX19lbnRyeS0+aW52YWxpZGF0ZV9kb21haW5zID0gaW52YWxpZGF0ZV9kb21haW5zOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUsIGZsdXNoPSUwNHgsIGludmFsaWRhdGU9JTA0eCIsCisJICAgIFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0ldSwgZmx1c2g9JTA0eCwgaW52YWxpZGF0ZT0lMDR4IiwKIAkJICAgICAgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubywKIAkJICAgICAgX19lbnRyeS0+Zmx1c2hfZG9tYWlucywgX19lbnRyeS0+aW52YWxpZGF0ZV9kb21haW5zKQogKTsKQEAgLTIwNCwxNiArMjA1LDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUsCkBAIC0yMjMsMTYgKzIyNCwxNiBAQAogCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8pLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCi0JCQkgICAgIF9fZmllbGQoc3RydWN0IGRybV9kZXZpY2UgKiwgZGV2KQorCQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQogCQkJICAgICBfX2ZpZWxkKHUzMiwgc2Vxbm8pCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKIAkJCSAgICksCiAKLQkgICAgVFBfcHJpbnRrKCJkZXY9JXAsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKICk7CiAKIFRSQUNFX0VWRU5UKGk5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9iZWdpbiwKQEAgLTI0MiwxNiArMjQzLDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF93YWl0X2VuZCwKQEAgLTI2MSwxNiArMjYyLDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9yaW5nX3dhaXRfYmVnaW4sCkBAIC0yODAsMTQgKzI4MSwxNCBAQAogCSAgICBUUF9BUkdTKGRldiksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCIsIF9fZW50cnktPmRldikKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUiLCBfX2VudHJ5LT5kZXYpCiApOwogCiBUUkFDRV9FVkVOVChpOTE1X3Jpbmdfd2FpdF9lbmQsCkBAIC0yOTcsMTQgKzI5OCwxNCBAQAogCSAgICBUUF9BUkdTKGRldiksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCIsIF9fZW50cnktPmRldikKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUiLCBfX2VudHJ5LT5kZXYpCiApOwogCiAjZW5kaWYgLyogX0k5MTVfVFJBQ0VfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYwppbmRleCA0MzM3NDE0Li45NmNkMjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCkBAIC0zNTEsMjAgKzM1MSwxOCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCXN0cnVjdCBiZGJfZHJpdmVyX2ZlYXR1cmVzICpkcml2ZXI7CiAKLQkvKiBzZXQgZGVmYXVsdCBmb3IgY2hpcHMgd2l0aG91dCBlRFAgKi8KLQlpZiAoIVNVUFBPUlRTX0VEUChkZXYpKSB7Ci0JCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KIAlkcml2ZXIgPSBmaW5kX3NlY3Rpb24oYmRiLCBCREJfRFJJVkVSX0ZFQVRVUkVTKTsKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGRyaXZlci0+bHZkc19jb25maWcgPT0gQkRCX0RSSVZFUl9GRUFUVVJFX0VEUCkKKwlpZiAoZHJpdmVyICYmIFNVUFBPUlRTX0VEUChkZXYpICYmCisJICAgIGRyaXZlci0+bHZkc19jb25maWcgPT0gQkRCX0RSSVZFUl9GRUFUVVJFX0VEUCkgewogCQlkZXZfcHJpdi0+ZWRwX3N1cHBvcnQgPSAxOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDA7CisJfQogCi0JaWYgKGRyaXZlci0+ZHVhbF9mcmVxdWVuY3kpCisJaWYgKGRyaXZlciAmJiBkcml2ZXItPmR1YWxfZnJlcXVlbmN5KQogCQlkZXZfcHJpdi0+cmVuZGVyX3JlY2xvY2tfYXZhaWwgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggOTNmZjZjMC4uM2JhNjU0NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTk0Myw2ICs5NDMsNyBAQAogICAgIGNsb2NrLm0gPSA1ICogKGNsb2NrLm0xICsgMikgKyAoY2xvY2subTIgKyAyKTsKICAgICBjbG9jay5wID0gKGNsb2NrLnAxICogY2xvY2sucDIpOwogICAgIGNsb2NrLmRvdCA9IDk2MDAwICogY2xvY2subSAvIChjbG9jay5uICsgMikgLyBjbG9jay5wOworICAgIGNsb2NrLnZjbyA9IDA7CiAgICAgbWVtY3B5KGJlc3RfY2xvY2ssICZjbG9jaywgc2l6ZW9mKGludGVsX2Nsb2NrX3QpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyNjAsOSArMTI2MSwxMSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIFByZS1pOTY1IG5lZWRzIHRvIGluc3RhbGwgYSBmZW5jZSBmb3IgdGlsZWQgc2Nhbi1vdXQgKi8KLQlpZiAoIUlTX0k5NjVHKGRldikgJiYKLQkgICAgb2JqX3ByaXYtPmZlbmNlX3JlZyA9PSBJOTE1X0ZFTkNFX1JFR19OT05FICYmCisJLyogSW5zdGFsbCBhIGZlbmNlIGZvciB0aWxlZCBzY2FuLW91dC4gUHJlLWk5NjUgYWx3YXlzIG5lZWRzIGEgZmVuY2UsCisJICogd2hlcmVhcyA5NjUrIG9ubHkgcmVxdWlyZXMgYSBmZW5jZSBpZiB1c2luZyBmcmFtZWJ1ZmZlciBjb21wcmVzc2lvbi4KKwkgKiBGb3Igc2ltcGxpY2l0eSwgd2UgYWx3YXlzIGluc3RhbGwgYSBmZW5jZSBhcyB0aGUgY29zdCBpcyBub3QgdGhhdCBvbmVyb3VzLgorCSAqLworCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnID09IEk5MTVfRkVOQ0VfUkVHX05PTkUgJiYKIAkgICAgb2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcob2JqKTsKIAkJaWYgKHJldCAhPSAwKSB7CkBAIC0xNTEzLDcgKzE1MTYsNyBAQAogCQkvKiBFbmFibGUgcGFuZWwgZml0dGluZyBmb3IgTFZEUyAqLwogCQlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKIAkJCXRlbXAgPSBJOTE1X1JFQUQocGZfY3RsX3JlZyk7Ci0JCQlJOTE1X1dSSVRFKHBmX2N0bF9yZWcsIHRlbXAgfCBQRl9FTkFCTEUpOworCQkJSTkxNV9XUklURShwZl9jdGxfcmVnLCB0ZW1wIHwgUEZfRU5BQkxFIHwgUEZfRklMVEVSX01FRF8zeDMpOwogCiAJCQkvKiBjdXJyZW50bHkgZnVsbCBhc3BlY3QgKi8KIAkJCUk5MTVfV1JJVEUocGZfd2luX3BvcywgMCk7CkBAIC0xODAxLDYgKzE4MDQsOCBAQAogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKKwkJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoZGV2KTsKKwogCQkvKiBFbmFibGUgdGhlIERQTEwgKi8KIAkJdGVtcCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CiAJCWlmICgodGVtcCAmIERQTExfVkNPX0VOQUJMRSkgPT0gMCkgewpAQCAtMTgzOCw3ICsxODQzLDYgQEAKIAogCQkvKiBHaXZlIHRoZSBvdmVybGF5IHNjYWxlciBhIGNoYW5jZSB0byBlbmFibGUgaWYgaXQncyBvbiB0aGlzIHBpcGUgKi8KIAkJLy9pbnRlbF9jcnRjX2RwbXNfdmlkZW8oY3J0YywgdHJ1ZSk7IFRPRE8KLQkJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoZGV2KTsKIAlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhkZXYpOwpAQCAtMjA4Miw3ICsyMDg2LDcgQEAKICNkZWZpbmUgTElOS19OIDB4ODAwMDAKIAogc3RhdGljIHZvaWQKLWlnZG5nX2NvbXB1dGVfbV9uKGludCBieXRlc19wZXJfcGl4ZWwsIGludCBubGFuZXMsCitpZ2RuZ19jb21wdXRlX21fbihpbnQgYml0c19wZXJfcGl4ZWwsIGludCBubGFuZXMsCiAJCWludCBwaXhlbF9jbG9jaywgaW50IGxpbmtfY2xvY2ssCiAJCXN0cnVjdCBmZGlfbV9uICptX24pCiB7CkBAIC0yMDkyLDcgKzIwOTYsOCBAQAogCiAJdGVtcCA9ICh1NjQpIERBVEFfTiAqIHBpeGVsX2Nsb2NrOwogCXRlbXAgPSBkaXZfdTY0KHRlbXAsIGxpbmtfY2xvY2spOwotCW1fbi0+Z21jaF9tID0gZGl2X3U2NCh0ZW1wICogYnl0ZXNfcGVyX3BpeGVsLCBubGFuZXMpOworCW1fbi0+Z21jaF9tID0gZGl2X3U2NCh0ZW1wICogYml0c19wZXJfcGl4ZWwsIG5sYW5lcyk7CisJbV9uLT5nbWNoX20gPj49IDM7IC8qIGNvbnZlcnQgdG8gYnl0ZXNfcGVyX3BpeGVsICovCiAJbV9uLT5nbWNoX24gPSBEQVRBX047CiAJZmRpX3JlZHVjZV9yYXRpbygmbV9uLT5nbWNoX20sICZtX24tPmdtY2hfbik7CiAKQEAgLTIxNDAsNiArMjE0NSwxMyBAQAogCUlHRF9DVVJTT1JfR1VBUkRfV00sCiAJSUdEX0ZJRk9fTElORV9TSVpFCiB9Oworc3RhdGljIHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIGc0eF93bV9pbmZvID0geworCUc0WF9GSUZPX1NJWkUsCisJRzRYX01BWF9XTSwKKwlHNFhfTUFYX1dNLAorCTIsCisJRzRYX0ZJRk9fTElORV9TSVpFLAorfTsKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBpOTQ1X3dtX2luZm8gPSB7CiAJSTk0NV9GSUZPX1NJWkUsCiAJSTkxNV9NQVhfV00sCkBAIC0yNDMwLDE3ICsyNDQyLDc0IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHVudXNlZCwgaW50IHVudXNlZDIsCi0JCQkgIGludCB1bnVzZWQzLCBpbnQgdW51c2VkNCkKK3N0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgIGludCBwbGFuZWFfY2xvY2ssCisJCQkgIGludCBwbGFuZWJfY2xvY2ssIGludCBzcl9oZGlzcGxheSwgaW50IHBpeGVsX3NpemUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgZndfYmxjX3NlbGYgPSBJOTE1X1JFQUQoRldfQkxDX1NFTEYpOworCWludCB0b3RhbF9zaXplLCBjYWNoZWxpbmVfc2l6ZTsKKwlpbnQgcGxhbmVhX3dtLCBwbGFuZWJfd20sIGN1cnNvcmFfd20sIGN1cnNvcmJfd20sIGN1cnNvcl9zcjsKKwlzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBwbGFuZWFfcGFyYW1zLCBwbGFuZWJfcGFyYW1zOworCXVuc2lnbmVkIGxvbmcgbGluZV90aW1lX3VzOworCWludCBzcl9jbG9jaywgc3JfZW50cmllcyA9IDAsIGVudHJpZXNfcmVxdWlyZWQ7CiAKLQlpZiAoaTkxNV9wb3dlcnNhdmUpCi0JCWZ3X2JsY19zZWxmIHw9IEZXX0JMQ19TRUxGX0VOOwotCWVsc2UKLQkJZndfYmxjX3NlbGYgJj0gfkZXX0JMQ19TRUxGX0VOOwotCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIGZ3X2JsY19zZWxmKTsKKwkvKiBDcmVhdGUgY29waWVzIG9mIHRoZSBiYXNlIHNldHRpbmdzIGZvciBlYWNoIHBpcGUgKi8KKwlwbGFuZWFfcGFyYW1zID0gcGxhbmViX3BhcmFtcyA9IGc0eF93bV9pbmZvOworCisJLyogR3JhYiBhIGNvdXBsZSBvZiBnbG9iYWwgdmFsdWVzIGJlZm9yZSB3ZSBvdmVyd3JpdGUgdGhlbSAqLworCXRvdGFsX3NpemUgPSBwbGFuZWFfcGFyYW1zLmZpZm9fc2l6ZTsKKwljYWNoZWxpbmVfc2l6ZSA9IHBsYW5lYV9wYXJhbXMuY2FjaGVsaW5lX3NpemU7CisKKwkvKgorCSAqIE5vdGU6IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJmbG93IGZvciB2YXJpb3VzIGNsb2NrICYKKwkgKiBsYXRlbmN5IHZhbHVlcy4KKwkgKiBjbG9ja3MgZ28gZnJvbSBhIGZldyB0aG91c2FuZCB0byBzZXZlcmFsIGh1bmRyZWQgdGhvdXNhbmQuCisJICogbGF0ZW5jeSBpcyB1c3VhbGx5IGEgZmV3IHRob3VzYW5kCisJICovCisJZW50cmllc19yZXF1aXJlZCA9ICgocGxhbmVhX2Nsb2NrIC8gMTAwMCkgKiBwaXhlbF9zaXplICogbGF0ZW5jeV9ucykgLworCQkxMDAwOworCWVudHJpZXNfcmVxdWlyZWQgLz0gRzRYX0ZJRk9fTElORV9TSVpFOworCXBsYW5lYV93bSA9IGVudHJpZXNfcmVxdWlyZWQgKyBwbGFuZWFfcGFyYW1zLmd1YXJkX3NpemU7CisKKwllbnRyaWVzX3JlcXVpcmVkID0gKChwbGFuZWJfY2xvY2sgLyAxMDAwKSAqIHBpeGVsX3NpemUgKiBsYXRlbmN5X25zKSAvCisJCTEwMDA7CisJZW50cmllc19yZXF1aXJlZCAvPSBHNFhfRklGT19MSU5FX1NJWkU7CisJcGxhbmViX3dtID0gZW50cmllc19yZXF1aXJlZCArIHBsYW5lYl9wYXJhbXMuZ3VhcmRfc2l6ZTsKKworCWN1cnNvcmFfd20gPSBjdXJzb3JiX3dtID0gMTY7CisJY3Vyc29yX3NyID0gMzI7CisKKwlEUk1fREVCVUcoIkZJRk8gd2F0ZXJtYXJrcyAtIEE6ICVkLCBCOiAlZFxuIiwgcGxhbmVhX3dtLCBwbGFuZWJfd20pOworCisJLyogQ2FsYyBzciBlbnRyaWVzIGZvciBvbmUgcGxhbmUgY29uZmlncyAqLworCWlmIChzcl9oZGlzcGxheSAmJiAoIXBsYW5lYV9jbG9jayB8fCAhcGxhbmViX2Nsb2NrKSkgeworCQkvKiBzZWxmLXJlZnJlc2ggaGFzIG11Y2ggaGlnaGVyIGxhdGVuY3kgKi8KKwkJY29uc3Qgc3RhdGljIGludCBzcl9sYXRlbmN5X25zID0gMTIwMDA7CisKKwkJc3JfY2xvY2sgPSBwbGFuZWFfY2xvY2sgPyBwbGFuZWFfY2xvY2sgOiBwbGFuZWJfY2xvY2s7CisJCWxpbmVfdGltZV91cyA9ICgoc3JfaGRpc3BsYXkgKiAxMDAwKSAvIHNyX2Nsb2NrKTsKKworCQkvKiBVc2UgbnMvdXMgdGhlbiBkaXZpZGUgdG8gcHJlc2VydmUgcHJlY2lzaW9uICovCisJCXNyX2VudHJpZXMgPSAoKChzcl9sYXRlbmN5X25zIC8gbGluZV90aW1lX3VzKSArIDEpICoKKwkJCSAgICAgIHBpeGVsX3NpemUgKiBzcl9oZGlzcGxheSkgLyAxMDAwOworCQlzcl9lbnRyaWVzID0gcm91bmR1cChzcl9lbnRyaWVzIC8gY2FjaGVsaW5lX3NpemUsIDEpOworCQlEUk1fREVCVUcoInNlbGYtcmVmcmVzaCBlbnRyaWVzOiAlZFxuIiwgc3JfZW50cmllcyk7CisJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOKTsKKwl9CisKKwlEUk1fREVCVUcoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogJWQsIEI6ICVkLCBTUiAlZFxuIiwKKwkJICBwbGFuZWFfd20sIHBsYW5lYl93bSwgc3JfZW50cmllcyk7CisKKwlwbGFuZWFfd20gJj0gMHgzZjsKKwlwbGFuZWJfd20gJj0gMHgzZjsKKworCUk5MTVfV1JJVEUoRFNQRlcxLCAoc3JfZW50cmllcyA8PCBEU1BGV19TUl9TSElGVCkgfAorCQkgICAoY3Vyc29yYl93bSA8PCBEU1BGV19DVVJTT1JCX1NISUZUKSB8CisJCSAgIChwbGFuZWJfd20gPDwgRFNQRldfUExBTkVCX1NISUZUKSB8IHBsYW5lYV93bSk7CisJSTkxNV9XUklURShEU1BGVzIsIChJOTE1X1JFQUQoRFNQRlcyKSAmIERTUEZXX0NVUlNPUkFfTUFTSykgfAorCQkgICAoY3Vyc29yYV93bSA8PCBEU1BGV19DVVJTT1JBX1NISUZUKSk7CisJLyogSFBMTCBvZmYgaW4gU1IgaGFzIHNvbWUgaXNzdWVzIG9uIEc0eC4uLiBkaXNhYmxlIGl0ICovCisJSTkxNV9XUklURShEU1BGVzMsIChJOTE1X1JFQUQoRFNQRlczKSAmIH5EU1BGV19IUExMX1NSX0VOKSB8CisJCSAgIChjdXJzb3Jfc3IgPDwgRFNQRldfQ1VSU09SX1NSX1NISUZUKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGk5NjVfdXBkYXRlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCB1bnVzZWQsIGludCB1bnVzZWQyLApAQCAtMjU4Niw2ICsyNjU1LDkgQEAKIAl1bnNpZ25lZCBsb25nIHBsYW5lYV9jbG9jayA9IDAsIHBsYW5lYl9jbG9jayA9IDAsIHNyX2Nsb2NrID0gMDsKIAlpbnQgZW5hYmxlZCA9IDAsIHBpeGVsX3NpemUgPSAwOwogCisJaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20pCisJCXJldHVybjsKKwogCS8qIEdldCB0aGUgY2xvY2sgY29uZmlnIGZyb20gYm90aCBwbGFuZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKQEAgLTI3NjMsNyArMjgzNSw3IEBACiAKIAkvKiBGREkgbGluayAqLwogCWlmIChJU19JR0RORyhkZXYpKSB7Ci0JCWludCBsYW5lLCBsaW5rX2J3OworCQlpbnQgbGFuZSwgbGlua19idywgYnBwOwogCQkvKiBlRFAgZG9lc24ndCByZXF1aXJlIEZESSBsaW5rLCBzbyBqdXN0IHNldCBEUCBNL04KIAkJICAgYWNjb3JkaW5nIHRvIGN1cnJlbnQgbGluayBjb25maWcgKi8KIAkJaWYgKGlzX2VkcCkgewpAQCAtMjc4MiwxMCArMjg1NCw3MiBAQAogCQkJbGFuZSA9IDQ7CiAJCQlsaW5rX2J3ID0gMjcwMDAwOwogCQl9Ci0JCWlnZG5nX2NvbXB1dGVfbV9uKDMsIGxhbmUsIHRhcmdldF9jbG9jaywKKworCQkvKiBkZXRlcm1pbmUgcGFuZWwgY29sb3IgZGVwdGggKi8KKwkJdGVtcCA9IEk5MTVfUkVBRChwaXBlY29uZl9yZWcpOworCisJCXN3aXRjaCAodGVtcCAmIFBJUEVfQlBDX01BU0spIHsKKwkJY2FzZSBQSVBFXzhCUEM6CisJCQlicHAgPSAyNDsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfMTBCUEM6CisJCQlicHAgPSAzMDsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfNkJQQzoKKwkJCWJwcCA9IDE4OworCQkJYnJlYWs7CisJCWNhc2UgUElQRV8xMkJQQzoKKwkJCWJwcCA9IDM2OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInVua25vd24gcGlwZSBicGMgdmFsdWVcbiIpOworCQkJYnBwID0gMjQ7CisJCX0KKworCQlpZ2RuZ19jb21wdXRlX21fbihicHAsIGxhbmUsIHRhcmdldF9jbG9jaywKIAkJCQkgIGxpbmtfYncsICZtX24pOwogCX0KIAorCS8qIElyb25sYWtlOiB0cnkgdG8gc2V0dXAgZGlzcGxheSByZWYgY2xvY2sgYmVmb3JlIERQTEwKKwkgKiBlbmFibGluZy4gVGhpcyBpcyBvbmx5IHVuZGVyIGRyaXZlcidzIGNvbnRyb2wgYWZ0ZXIKKwkgKiBQQ0ggQiBzdGVwcGluZywgcHJldmlvdXMgY2hpcHNldCBzdGVwcGluZyBzaG91bGQgYmUKKwkgKiBpZ25vcmluZyB0aGlzIHNldHRpbmcuCisJICovCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJdGVtcCA9IEk5MTVfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJLyogQWx3YXlzIGVuYWJsZSBub25zcHJlYWQgc291cmNlICovCisJCXRlbXAgJj0gfkRSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLOworCQl0ZW1wIHw9IERSRUZfTk9OU1BSRUFEX1NPVVJDRV9FTkFCTEU7CisJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgdGVtcCk7CisJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKworCQl0ZW1wICY9IH5EUkVGX1NTQ19TT1VSQ0VfTUFTSzsKKwkJdGVtcCB8PSBEUkVGX1NTQ19TT1VSQ0VfRU5BQkxFOworCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisKKwkJdWRlbGF5KDIwMCk7CisKKwkJaWYgKGlzX2VkcCkgeworCQkJaWYgKGRldl9wcml2LT5sdmRzX3VzZV9zc2MpIHsKKwkJCQl0ZW1wIHw9IERSRUZfU1NDMV9FTkFCTEU7CisJCQkJSTkxNV9XUklURShQQ0hfRFJFRl9DT05UUk9MLCB0ZW1wKTsKKwkJCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisKKwkJCQl1ZGVsYXkoMjAwKTsKKworCQkJCXRlbXAgJj0gfkRSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfTUFTSzsKKwkJCQl0ZW1wIHw9IERSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfRE9XTlNQUkVBRDsKKwkJCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJCX0gZWxzZSB7CisJCQkJdGVtcCB8PSBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX05PTlNQUkVBRDsKKwkJCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJCX0KKwkJfQorCX0KKwogCWlmIChJU19JR0QoZGV2KSkgewogCQlmcCA9ICgxIDw8IGNsb2NrLm4pIDw8IDE2IHwgY2xvY2subTEgPDwgOCB8IGNsb2NrLm0yOwogCQlpZiAoaGFzX3JlZHVjZWRfY2xvY2spCkBAIC0yOTM2LDYgKzMwNzAsOCBAQAogCiAJCWx2ZHMgPSBJOTE1X1JFQUQobHZkc19yZWcpOwogCQlsdmRzIHw9IExWRFNfUE9SVF9FTiB8IExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQIHwgTFZEU19QSVBFQl9TRUxFQ1Q7CisJCS8qIHNldCB0aGUgY29ycmVzcG9uc2RpbmcgTFZEU19CT1JERVIgYml0ICovCisJCWx2ZHMgfD0gZGV2X3ByaXYtPmx2ZHNfYm9yZGVyX2JpdHM7CiAJCS8qIFNldCB0aGUgQjAtQjMgZGF0YSBwYWlycyBjb3JyZXNwb25kaW5nIHRvIHdoZXRoZXIgd2UncmUgZ29pbmcgdG8KIAkJICogc2V0IHRoZSBEUExMcyBmb3IgZHVhbC1jaGFubmVsIG1vZGUgb3Igbm90LgogCQkgKi8KQEAgLTMwOTUsNyArMzIzMSw2IEBACiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpibzsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CiAJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwotCWludCBwbGFuZSA9IGludGVsX2NydGMtPnBsYW5lOwogCXVpbnQzMl90IGNvbnRyb2wgPSAocGlwZSA9PSAwKSA/IENVUkFDTlRSIDogQ1VSQkNOVFI7CiAJdWludDMyX3QgYmFzZSA9IChwaXBlID09IDApID8gQ1VSQUJBU0UgOiBDVVJCQkFTRTsKIAl1aW50MzJfdCB0ZW1wID0gSTkxNV9SRUFEKGNvbnRyb2wpOwpAQCAtMzE4Miw5ICszMzE3LDYgQEAKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKTsKIAl9CiAKLQlpZiAoKElTX0k5NjVHKGRldikgfHwgcGxhbmUgPT0gMCkpCi0JCWludGVsX3VwZGF0ZV9mYmMoY3J0YywgJmNydGMtPm1vZGUpOwotCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpbnRlbF9jcnRjLT5jdXJzb3JfYWRkciA9IGFkZHI7CkBAIC0zMjQ0LDYgKzMzNzYsMTYgQEAKIAlpbnRlbF9jcnRjLT5sdXRfYltyZWdub10gPSBibHVlID4+IDg7CiB9CiAKK3ZvaWQgaW50ZWxfY3J0Y19mYl9nYW1tYV9nZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKKwkJCSAgICAgdTE2ICpibHVlLCBpbnQgcmVnbm8pCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCisJKnJlZCA9IGludGVsX2NydGMtPmx1dF9yW3JlZ25vXSA8PCA4OworCSpncmVlbiA9IGludGVsX2NydGMtPmx1dF9nW3JlZ25vXSA8PCA4OworCSpibHVlID0gaW50ZWxfY3J0Yy0+bHV0X2JbcmVnbm9dIDw8IDg7Cit9CisKIHN0YXRpYyB2b2lkIGludGVsX2NydGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCiAJCQkJIHUxNiAqYmx1ZSwgdWludDMyX3Qgc2l6ZSkKIHsKQEAgLTM4MzUsNiArMzk3Nyw3IEBACiAJLm1vZGVfc2V0X2Jhc2UgPSBpbnRlbF9waXBlX3NldF9iYXNlLAogCS5wcmVwYXJlID0gaW50ZWxfY3J0Y19wcmVwYXJlLAogCS5jb21taXQgPSBpbnRlbF9jcnRjX2NvbW1pdCwKKwkubG9hZF9sdXQgPSBpbnRlbF9jcnRjX2xvYWRfbHV0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbnRlbF9jcnRjX2Z1bmNzID0gewpAQCAtNDExNyw3ICs0MjYwLDkgQEAKIAkgKiBEaXNhYmxlIGNsb2NrIGdhdGluZyByZXBvcnRlZCB0byB3b3JrIGluY29ycmVjdGx5IGFjY29yZGluZyB0byB0aGUKIAkgKiBzcGVjcywgYnV0IGVuYWJsZSBhcyBtdWNoIGVsc2UgYXMgd2UgY2FuLgogCSAqLwotCWlmIChJU19HNFgoZGV2KSkgeworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKElTX0c0WChkZXYpKSB7CiAJCXVpbnQzMl90IGRzcGNsa19nYXRlOwogCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QxLCAwKTsKIAkJSTkxNV9XUklURShSRU5DTEtfR0FURV9EMiwgVkZfVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfApAQCAtNDIwNSw3ICs0MzUwLDkgQEAKIAkJCWk4MzBfZ2V0X2Rpc3BsYXlfY2xvY2tfc3BlZWQ7CiAKIAkvKiBGb3IgRklGTyB3YXRlcm1hcmsgdXBkYXRlcyAqLwotCWlmIChJU19HNFgoZGV2KSkKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gTlVMTDsKKwllbHNlIGlmIChJU19HNFgoZGV2KSkKIAkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gZzR4X3VwZGF0ZV93bTsKIAllbHNlIGlmIChJU19JOTY1RyhkZXYpKQogCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBpOTY1X3VwZGF0ZV93bTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IGY0ODU2YTUuLmQ4MzQ0NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiB7CiAJc3RydWN0IGludGVsX2RwX3ByaXYgICAqZHBfcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CiAKLQlEUk1fRVJST1IoImkyY19pbml0ICVzXG4iLCBuYW1lKTsKKwlEUk1fREVCVUdfS01TKCJpMmNfaW5pdCAlc1xuIiwgbmFtZSk7CiAJZHBfcHJpdi0+YWxnby5ydW5uaW5nID0gZmFsc2U7CiAJZHBfcHJpdi0+YWxnby5hZGRyZXNzID0gMDsKIAlkcF9wcml2LT5hbGdvLmF1eF9jaCA9IGludGVsX2RwX2kyY19hdXhfY2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDhhYTRiN2YuLmVmNjFmZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0xNzUsNiArMTc1LDggQEAKIGV4dGVybiB2b2lkIGludGVsZmJfcmVzdG9yZSh2b2lkKTsKIGV4dGVybiB2b2lkIGludGVsX2NydGNfZmJfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAogCQkJCSAgICB1MTYgYmx1ZSwgaW50IHJlZ25vKTsKK2V4dGVybiB2b2lkIGludGVsX2NydGNfZmJfZ2FtbWFfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkJICAgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKTsKIAogZXh0ZXJuIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqbW9kZV9jbWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwppbmRleCA3YmE0YTIzLi4yYjBmZTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKQEAgLTYwLDEwICs2MCwxMiBAQAogCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAogCS5mYl9wYW5fZGlzcGxheSA9IGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXksCiAJLmZiX2JsYW5rID0gZHJtX2ZiX2hlbHBlcl9ibGFuaywKKwkuZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyBpbnRlbF9mYl9oZWxwZXJfZnVuY3MgPSB7CiAJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZmJfZ2FtbWFfc2V0LAorCS5nYW1tYV9nZXQgPSBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldCwKIH07CiAKIApAQCAtMTEwLDYgKzExMiw3IEBACiBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGZiX3dpZHRoLAogCQkJICB1aW50MzJfdCBmYl9oZWlnaHQsIHVpbnQzMl90IHN1cmZhY2Vfd2lkdGgsCiAJCQkgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJICB1aW50MzJfdCBzdXJmYWNlX2RlcHRoLCB1aW50MzJfdCBzdXJmYWNlX2JwcCwKIAkJCSAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3ApCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CkBAIC0xMjIsMTIgKzEyNSwxNiBAQAogCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZkZXYtPnBkZXYtPmRldjsKIAlpbnQgc2l6ZSwgcmV0LCBtbWlvX2JhciA9IElTX0k5WFgoZGV2KSA/IDAgOiAxOwogCisJLyogd2UgZG9uJ3QgZG8gcGFja2VkIDI0YnBwICovCisJaWYgKHN1cmZhY2VfYnBwID09IDI0KQorCQlzdXJmYWNlX2JwcCA9IDMyOworCiAJbW9kZV9jbWQud2lkdGggPSBzdXJmYWNlX3dpZHRoOwogCW1vZGVfY21kLmhlaWdodCA9IHN1cmZhY2VfaGVpZ2h0OwogCi0JbW9kZV9jbWQuYnBwID0gMzI7CisJbW9kZV9jbWQuYnBwID0gc3VyZmFjZV9icHA7CiAJbW9kZV9jbWQucGl0Y2ggPSBBTElHTihtb2RlX2NtZC53aWR0aCAqICgobW9kZV9jbWQuYnBwICsgMSkgLyA4KSwgNjQpOwotCW1vZGVfY21kLmRlcHRoID0gMjQ7CisJbW9kZV9jbWQuZGVwdGggPSBzdXJmYWNlX2RlcHRoOwogCiAJc2l6ZSA9IG1vZGVfY21kLnBpdGNoICogbW9kZV9jbWQuaGVpZ2h0OwogCXNpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOwpAQCAtMjA1LDcgKzIxMiw3IEBACiAKIC8vCW1lbXNldChpbmZvLT5zY3JlZW5fYmFzZSwgMCwgc2l6ZSk7CiAKLQlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCk7CisJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBmYi0+cGl0Y2gsIGZiLT5kZXB0aCk7CiAJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihpbmZvLCBmYiwgZmJfd2lkdGgsIGZiX2hlaWdodCk7CiAKIAkvKiBGSVhNRTogd2UgcmVhbGx5IHNob3VsZG4ndCBleHBvc2UgbW1pbyBzcGFjZSBhdCBhbGwgKi8KQEAgLTI0Myw3ICsyNTAsNyBAQAogCWludCByZXQ7CiAKIAlEUk1fREVCVUcoIlxuIik7Ci0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoZGV2LCBpbnRlbGZiX2NyZWF0ZSk7CisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoZGV2LCAzMiwgaW50ZWxmYl9jcmVhdGUpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGludGVsZmJfcHJvYmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IGZhMzA0ZTEuLjY2M2FiNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJY29ubmVjdG9yID0gJmludGVsX291dHB1dC0+YmFzZTsKIAlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZpbnRlbF9oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKLQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEKTsKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSk7CiAJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmludGVsX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CiAKIAlpbnRlbF9vdXRwdXQtPnR5cGUgPSBJTlRFTF9PVVRQVVRfSERNSTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwppbmRleCA5OGFlM2Q3Li4wNTU5OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCkBAIC0zODAsNyArMzgwLDcgQEAKIAkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19zdGFydCArIHZzeW5jX3BvczsKIAkJLyoga2VlcCB0aGUgdnN5bmMgd2lkdGggY29uc3RhbnQgKi8KIAkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgPQotCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0ICsgdnN5bmNfd2lkdGg7CisJCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCArIHZzeW5jX3dpZHRoOwogCQlib3JkZXIgPSAxOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX1NDQUxFX0FTUEVDVDoKQEAgLTUyNiw2ICs1MjYsMTQgQEAKIAlsdmRzX3ByaXYtPnBmaXRfY29udHJvbCA9IHBmaXRfY29udHJvbDsKIAlsdmRzX3ByaXYtPnBmaXRfcGdtX3JhdGlvcyA9IHBmaXRfcGdtX3JhdGlvczsKIAkvKgorCSAqIFdoZW4gdGhlcmUgZXhpc3RzIHRoZSBib3JkZXIsIGl0IG1lYW5zIHRoYXQgdGhlIExWRFNfQk9SRFIKKwkgKiBzaG91bGQgYmUgZW5hYmxlZC4KKwkgKi8KKwlpZiAoYm9yZGVyKQorCQlkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0cyB8PSBMVkRTX0JPUkRFUl9FTkFCTEU7CisJZWxzZQorCQlkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0cyAmPSB+KExWRFNfQk9SREVSX0VOQUJMRSk7CisJLyoKIAkgKiBYWFg6IEl0IHdvdWxkIGJlIG5pY2UgdG8gc3VwcG9ydCBsb3dlciByZWZyZXNoIHJhdGVzIG9uIHRoZQogCSAqIHBhbmVscyB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24sIGFuZCBwZXJoYXBzIG1hdGNoIHRoZQogCSAqIHVzZXIncyByZXF1ZXN0ZWQgcmVmcmVzaCByYXRlLgpAQCAtNjU2LDYgKzY2NCwxNSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogTGlkIGV2ZW50cy4gTm90ZSB0aGUgdXNlIG9mICdtb2Rlc2V0X29uX2xpZCc6CisgKiAgLSB3ZSBzZXQgaXQgb24gbGlkIGNsb3NlLCBhbmQgcmVzZXQgaXQgb24gb3BlbgorICogIC0gd2UgdXNlIGl0IGFzIGEgIm9ubHkgb25jZSIgYml0IChpZSB3ZSBpZ25vcmUKKyAqICAgIGR1cGxpY2F0ZSBldmVudHMgd2hlcmUgaXQgd2FzIGFscmVhZHkgcHJvcGVybHkKKyAqICAgIHNldC9yZXNldCkKKyAqICAtIHRoZSBzdXNwZW5kL3Jlc3VtZSBwYXRocyB3aWxsIGFsc28gc2V0IGl0IHRvCisgKiAgICB6ZXJvLCBzaW5jZSB0aGV5IHJlc3RvcmUgdGhlIG1vZGUgKCJsaWQgb3BlbiIpLgorICovCiBzdGF0aWMgaW50IGludGVsX2xpZF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCiAJCQkgICAgdm9pZCAqdW51c2VkKQogewpAQCAtNjYzLDEzICs2ODAsMTkgQEAKIAkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgbGlkX25vdGlmaWVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKIAotCWlmIChhY3BpX2xpZF9vcGVuKCkgJiYgIWRldl9wcml2LT5zdXNwZW5kZWQpIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlpZiAoIWFjcGlfbGlkX29wZW4oKSkgeworCQlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAxOworCQlyZXR1cm4gTk9USUZZX09LOwogCX0KIAotCWRybV9zeXNmc19ob3RwbHVnX2V2ZW50KGRldl9wcml2LT5kZXYpOworCWlmICghZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkKQorCQlyZXR1cm4gTk9USUZZX09LOworCisJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IGM2NGVhYjQuLjljYTkxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMTA4Miw3ICsxMDgyLDggQEAKIAljb25zdCBzdHJ1Y3QgdHZfbW9kZSAqdHZfbW9kZSA9IGludGVsX3R2X21vZGVfZmluZChpbnRlbF9vdXRwdXQpOwogCiAJLyogRW5zdXJlIFRWIHJlZnJlc2ggaXMgY2xvc2UgdG8gZGVzaXJlZCByZWZyZXNoICovCi0JaWYgKHR2X21vZGUgJiYgYWJzKHR2X21vZGUtPnJlZnJlc2ggLSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKSkgPCAxMCkKKwlpZiAodHZfbW9kZSAmJiBhYnModHZfbW9kZS0+cmVmcmVzaCAtIGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpICogMTAwMCkKKwkJCQk8IDEwMDApCiAJCXJldHVybiBNT0RFX09LOwogCXJldHVybiBNT0RFX0NMT0NLX1JBTkdFOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi8uZ2l0aWdub3JlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2ViM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACitta3JlZ3RhYmxlCisqX3JlZ19zYWZlLmgKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKaW5kZXggMDlhMjg5MjMuLmI1NzEzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQpAQCAtNDksNyArNDksNyBAQAogCXJhZGVvbl9jcy5vIHJhZGVvbl9iaW9zLm8gcmFkZW9uX2JlbmNobWFyay5vIHIxMDAubyByMzAwLm8gcjQyMC5vIFwKIAlyczQwMC5vIHJzNjAwLm8gcnM2OTAubyBydjUxNS5vIHI1MjAubyByNjAwLm8gcnY3NzAubyByYWRlb25fdGVzdC5vIFwKIAlyMjAwLm8gcmFkZW9uX2xlZ2FjeV90di5vIHI2MDBfY3MubyByNjAwX2JsaXQubyByNjAwX2JsaXRfc2hhZGVycy5vIFwKLQlyNjAwX2JsaXRfa21zLm8KKwlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCmluZGV4IDVkNDAyMDguLmMxMWRkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKQEAgLTIzMTQsNyArMjMxNCw3IEBACiAJVUNIQVIgdWNTU19TdGVwOwogCVVDSEFSIHVjU1NfRGVsYXk7CiAJVUNIQVIgdWNTU19JZDsKLQlVQ0hBUiB1Y1JlY29tbWFuZGVkUmVmX0RpdjsKKwlVQ0hBUiB1Y1JlY29tbWVuZGVkUmVmX0RpdjsKIAlVQ0hBUiB1Y1NTX1JhbmdlOwkvKiBpdCB3YXMgcmVzZXJ2ZWQgZm9yIFYxMSAqLwogfSBBVE9NX1NQUkVBRF9TUEVDVFJVTV9BU1NJR05NRU5UOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IDZhMDE1OTIuLmMxNTI4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgImF0b20uaCIKICNpbmNsdWRlICJhdG9tLWJpdHMuaCIKIAotLyogZXZpbCBidXQgaW5jbHVkaW5nIGF0b21iaW9zLmggaXMgbXVjaCB3b3JzZSAqLwotYm9vbCByYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGluZGV4LAotCQkJCVNFVF9DUlRDX1RJTUlOR19QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gKmNydGNfdGltaW5nLAotCQkJCWludDMyX3QgKnBpeGVsX2Nsb2NrKTsKIHN0YXRpYyB2b2lkIGF0b21iaW9zX292ZXJzY2FuX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQpAQCAtMjQ4LDE4ICsyNDQsMTggQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMSk7CiAJCWlmIChBU0lDX0lTX0RDRTMocmRldikpCiAJCQlhdG9tYmlvc19lbmFibGVfY3J0Y19tZW1yZXEoY3J0YywgMSk7Ci0JCWF0b21iaW9zX2VuYWJsZV9jcnRjKGNydGMsIDEpOwogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDApOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDEpOwotCQlhdG9tYmlvc19lbmFibGVfY3J0YyhjcnRjLCAwKTsKIAkJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkKIAkJCWF0b21iaW9zX2VuYWJsZV9jcnRjX21lbXJlcShjcnRjLCAwKTsKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjcwLDU5ICsyNjYsMTQ3IEBACiAKIHN0YXRpYyB2b2lkCiBhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTICogY3J0Y19wYXJhbSkKKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBjb252X3BhcmFtOworCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldENSVENfVXNpbmdEVERUaW1pbmcpOworCXUxNiBtaXNjID0gMDsKIAotCWNvbnZfcGFyYW0udXNIX1NpemUgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU2l6ZSk7Ci0JY29udl9wYXJhbS51c0hfQmxhbmtpbmdfVGltZSA9Ci0JICAgIGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9CbGFua2luZ19UaW1lKTsKLQljb252X3BhcmFtLnVzVl9TaXplID0gY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+dXNWX1NpemUpOwotCWNvbnZfcGFyYW0udXNWX0JsYW5raW5nX1RpbWUgPQotCSAgICBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfQmxhbmtpbmdfVGltZSk7Ci0JY29udl9wYXJhbS51c0hfU3luY09mZnNldCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9TeW5jT2Zmc2V0KTsKLQljb252X3BhcmFtLnVzSF9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnVzVl9TeW5jT2Zmc2V0ID0gY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+dXNWX1N5bmNPZmZzZXQpOwotCWNvbnZfcGFyYW0udXNWX1N5bmNXaWR0aCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9TeW5jV2lkdGgpOwotCWNvbnZfcGFyYW0uc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0KLQkgICAgY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzKTsKLQljb252X3BhcmFtLnVjQ1JUQyA9IGNydGNfcGFyYW0tPnVjQ1JUQzsKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJYXJncy51c0hfU2l6ZSA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfaGRpc3BsYXkpOworCWFyZ3MudXNIX0JsYW5raW5nX1RpbWUgPQorCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hibGFua19lbmQgLSBtb2RlLT5jcnRjX2hkaXNwbGF5KTsKKwlhcmdzLnVzVl9TaXplID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192ZGlzcGxheSk7CisJYXJncy51c1ZfQmxhbmtpbmdfVGltZSA9CisJICAgIGNwdV90b19sZTE2KG1vZGUtPmNydGNfdmJsYW5rX2VuZCAtIG1vZGUtPmNydGNfdmRpc3BsYXkpOworCWFyZ3MudXNIX1N5bmNPZmZzZXQgPQorCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y19oZGlzcGxheSk7CisJYXJncy51c0hfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0KTsKKwlhcmdzLnVzVl9TeW5jT2Zmc2V0ID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19zdGFydCAtIG1vZGUtPmNydGNfdmRpc3BsYXkpOworCWFyZ3MudXNWX1N5bmNXaWR0aCA9CisJCWNwdV90b19sZTE2KG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydCk7CisJLyphcmdzLnVjSF9Cb3JkZXIgPSBtb2RlLT5oYm9yZGVyOyovCisJLyphcmdzLnVjVl9Cb3JkZXIgPSBtb2RlLT52Ym9yZGVyOyovCisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykKKwkJbWlzYyB8PSBBVE9NX1ZTWU5DX1BPTEFSSVRZOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKQorCQltaXNjIHw9IEFUT01fSFNZTkNfUE9MQVJJVFk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19DU1lOQykKKwkJbWlzYyB8PSBBVE9NX0NPTVBPU0lURVNZTkM7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCW1pc2MgfD0gQVRPTV9JTlRFUkxBQ0U7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQorCQltaXNjIHw9IEFUT01fRE9VQkxFX0NMT0NLX01PREU7CisKKwlhcmdzLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9IGNwdV90b19sZTE2KG1pc2MpOworCWFyZ3MudWNDUlRDID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CiAKIAlwcmludGsoImV4ZWN1dGluZyBzZXQgY3J0YyBkdGQgdGltaW5nXG4iKTsKLQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZjb252X3BhcmFtKTsKKwlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KIAotdm9pZCBhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAgICAgU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiAqCi0JCQkgICAgICBjcnRjX3BhcmFtKQorc3RhdGljIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfdGltaW5nKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OIGNvbnZfcGFyYW07CisJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldENSVENfVGltaW5nKTsKKwl1MTYgbWlzYyA9IDA7CiAKLQljb252X3BhcmFtLnVzSF9Ub3RhbCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9Ub3RhbCk7Ci0JY29udl9wYXJhbS51c0hfRGlzcCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9EaXNwKTsKLQljb252X3BhcmFtLnVzSF9TeW5jU3RhcnQgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1N0YXJ0KTsKLQljb252X3BhcmFtLnVzSF9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnVzVl9Ub3RhbCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9Ub3RhbCk7Ci0JY29udl9wYXJhbS51c1ZfRGlzcCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9EaXNwKTsKLQljb252X3BhcmFtLnVzVl9TeW5jU3RhcnQgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfU3luY1N0YXJ0KTsKLQljb252X3BhcmFtLnVzVl9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9Ci0JICAgIGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnN1c01vZGVNaXNjSW5mby51c0FjY2Vzcyk7Ci0JY29udl9wYXJhbS51Y0NSVEMgPSBjcnRjX3BhcmFtLT51Y0NSVEM7Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuUmlnaHQgPSBjcnRjX3BhcmFtLT51Y092ZXJzY2FuUmlnaHQ7Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuTGVmdCA9IGNydGNfcGFyYW0tPnVjT3ZlcnNjYW5MZWZ0OwotCWNvbnZfcGFyYW0udWNPdmVyc2NhbkJvdHRvbSA9IGNydGNfcGFyYW0tPnVjT3ZlcnNjYW5Cb3R0b207Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuVG9wID0gY3J0Y19wYXJhbS0+dWNPdmVyc2NhblRvcDsKLQljb252X3BhcmFtLnVjUmVzZXJ2ZWQgPSBjcnRjX3BhcmFtLT51Y1Jlc2VydmVkOworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLnVzSF9Ub3RhbCA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfaHRvdGFsKTsKKwlhcmdzLnVzSF9EaXNwID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oZGlzcGxheSk7CisJYXJncy51c0hfU3luY1N0YXJ0ID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19zdGFydCk7CisJYXJncy51c0hfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0KTsKKwlhcmdzLnVzVl9Ub3RhbCA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfdnRvdGFsKTsKKwlhcmdzLnVzVl9EaXNwID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192ZGlzcGxheSk7CisJYXJncy51c1ZfU3luY1N0YXJ0ID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19zdGFydCk7CisJYXJncy51c1ZfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0KTsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQorCQltaXNjIHw9IEFUT01fVlNZTkNfUE9MQVJJVFk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCisJCW1pc2MgfD0gQVRPTV9IU1lOQ19QT0xBUklUWTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQorCQltaXNjIHw9IEFUT01fQ09NUE9TSVRFU1lOQzsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJbWlzYyB8PSBBVE9NX0lOVEVSTEFDRTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCisJCW1pc2MgfD0gQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERTsKKworCWFyZ3Muc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0gY3B1X3RvX2xlMTYobWlzYyk7CisJYXJncy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKIAogCXByaW50aygiZXhlY3V0aW5nIHNldCBjcnRjIHRpbWluZ1xuIik7Ci0JYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmY29udl9wYXJhbSk7CisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7Cit9CisKK3N0YXRpYyB2b2lkIGF0b21iaW9zX3NldF9zcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBlbmFibGUpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IE5VTEw7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSBOVUxMOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEVuYWJsZVNwcmVhZFNwZWN0cnVtT25QUExMKTsKKwlFTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfUFNfQUxMT0NBVElPTiBhcmdzOworCUVOQUJMRV9MVkRTX1NTX1BBUkFNRVRFUlMgbGVnYWN5X2FyZ3M7CisJdWludDE2X3QgcGVyY2VudGFnZSA9IDA7CisJdWludDhfdCB0eXBlID0gMCwgc3RlcCA9IDAsIGRlbGF5ID0gMCwgcmFuZ2UgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJCS8qIG9ubHkgZW5hYmxlIHNwcmVhZCBzcGVjdHJ1bSBvbiBMVkRTICovCisJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CisJCQkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJCWlmIChkaWcgJiYgZGlnLT5zcykgeworCQkJCQlwZXJjZW50YWdlID0gZGlnLT5zcy0+cGVyY2VudGFnZTsKKwkJCQkJdHlwZSA9IGRpZy0+c3MtPnR5cGU7CisJCQkJCXN0ZXAgPSBkaWctPnNzLT5zdGVwOworCQkJCQlkZWxheSA9IGRpZy0+c3MtPmRlbGF5OworCQkJCQlyYW5nZSA9IGRpZy0+c3MtPnJhbmdlOworCQkJCX0gZWxzZSBpZiAoZW5hYmxlKQorCQkJCQlyZXR1cm47CisJCQl9IGVsc2UgaWYgKGVuYWJsZSkKKwkJCQlyZXR1cm47CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcmFkZW9uX2VuY29kZXIpCisJCXJldHVybjsKKworCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwkJYXJncy51c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSA9IGNwdV90b19sZTE2KHBlcmNlbnRhZ2UpOworCQlhcmdzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKKwkJYXJncy51Y1NwcmVhZFNwZWN0cnVtU3RlcCA9IHN0ZXA7CisJCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bURlbGF5ID0gZGVsYXk7CisJCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bVJhbmdlID0gcmFuZ2U7CisJCWFyZ3MudWNQcGxsID0gcmFkZW9uX2NydGMtPmNydGNfaWQgPyBBVE9NX1BQTEwyIDogQVRPTV9QUExMMTsKKwkJYXJncy51Y0VuYWJsZSA9IGVuYWJsZTsKKwkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJfSBlbHNlIHsKKwkJbWVtc2V0KCZsZWdhY3lfYXJncywgMCwgc2l6ZW9mKGxlZ2FjeV9hcmdzKSk7CisJCWxlZ2FjeV9hcmdzLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlID0gY3B1X3RvX2xlMTYocGVyY2VudGFnZSk7CisJCWxlZ2FjeV9hcmdzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKKwkJbGVnYWN5X2FyZ3MudWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5ID0gKHN0ZXAgJiAzKSA8PCAyOworCQlsZWdhY3lfYXJncy51Y1NwcmVhZFNwZWN0cnVtU3RlcFNpemVfRGVsYXkgfD0gKGRlbGF5ICYgNykgPDwgNDsKKwkJbGVnYWN5X2FyZ3MudWNFbmFibGUgPSBlbmFibGU7CisJCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmxlZ2FjeV9hcmdzKTsKKwl9CiB9CiAKIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfcGxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCkBAIC0zMzMsMTIgKzQxNywxMyBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IE5VTEw7CiAJdWludDhfdCBmcmV2LCBjcmV2OwotCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldFBpeGVsQ2xvY2spOworCWludCBpbmRleDsKIAlTRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTiBhcmdzOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlMgKnNwYzFfcHRyOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjIgKnNwYzJfcHRyOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjMgKnNwYzNfcHRyOwotCXVpbnQzMl90IHNjbG9jayA9IG1vZGUtPmNsb2NrOworCXVpbnQzMl90IHBsbF9jbG9jayA9IG1vZGUtPmNsb2NrOworCXVpbnQzMl90IGFkanVzdGVkX2Nsb2NrOwogCXVpbnQzMl90IHJlZl9kaXYgPSAwLCBmYl9kaXYgPSAwLCBmcmFjX2ZiX2RpdiA9IDAsIHBvc3RfZGl2ID0gMDsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsOwogCWludCBwbGxfZmxhZ3MgPSAwOwpAQCAtMzQ2LDggKzQzMSw2IEBACiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCiAJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKLQkJdWludDMyX3Qgc3NfY250bDsKLQogCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjAwKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjkwKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzQwKSkKQEAgLTM1OCwxNSArNDQxLDYgQEAKIAkJCXBsbF9mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9ISUdIX0ZCX0RJVjsKIAkJZWxzZQogCQkJcGxsX2ZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0xPV19SRUZfRElWOwotCi0JCS8qIGRpc2FibGUgc3ByZWFkIHNwZWN0cnVtIGNsb2NraW5nIGZvciBub3cgLS0gdGhhbmtzIEhlZHkgTGFtYXJyICovCi0JCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7Ci0JCQlzc19jbnRsID0gUlJFRzMyKEFWSVZPX1AxUExMX0lOVF9TU19DTlRMKTsKLQkJCVdSRUczMihBVklWT19QMVBMTF9JTlRfU1NfQ05UTCwgc3NfY250bCAmIH4xKTsKLQkJfSBlbHNlIHsKLQkJCXNzX2NudGwgPSBSUkVHMzIoQVZJVk9fUDJQTExfSU5UX1NTX0NOVEwpOwotCQkJV1JFRzMyKEFWSVZPX1AyUExMX0lOVF9TU19DTlRMLCBzc19jbnRsICYgfjEpOwotCQl9CiAJfSBlbHNlIHsKIAkJcGxsX2ZsYWdzIHw9IFJBREVPTl9QTExfTEVHQUNZOwogCkBAIC0zOTMsMTQgKzQ2Nyw0MyBAQAogCQl9CiAJfQogCisJLyogRENFMysgaGFzIGFuIEFkanVzdERpc3BsYXlQbGwgdGhhdCB3aWxsIGFkanVzdCB0aGUgcGl4ZWwgY2xvY2sKKwkgKiBhY2NvcmRpbmdseSBiYXNlZCBvbiB0aGUgZW5jb2Rlci90cmFuc21pdHRlciB0byB3b3JrIGFyb3VuZAorCSAqIHNwZWNpYWwgaHcgcmVxdWlyZW1lbnRzLgorCSAqLworCWlmIChBU0lDX0lTX0RDRTMocmRldikpIHsKKwkJQURKVVNUX0RJU1BMQVlfUExMX1BTX0FMTE9DQVRJT04gYWRqdXN0X3BsbF9hcmdzOworCisJCWlmICghZW5jb2RlcikKKwkJCXJldHVybjsKKworCQltZW1zZXQoJmFkanVzdF9wbGxfYXJncywgMCwgc2l6ZW9mKGFkanVzdF9wbGxfYXJncykpOworCQlhZGp1c3RfcGxsX2FyZ3MudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CisJCWFkanVzdF9wbGxfYXJncy51Y1RyYW5zbWl0dGVySUQgPSByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZDsKKwkJYWRqdXN0X3BsbF9hcmdzLnVjRW5jb2RlTW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CisKKwkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBBZGp1c3REaXNwbGF5UGxsKTsKKwkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsCisJCQkJICAgaW5kZXgsICh1aW50MzJfdCAqKSZhZGp1c3RfcGxsX2FyZ3MpOworCQlhZGp1c3RlZF9jbG9jayA9IGxlMTZfdG9fY3B1KGFkanVzdF9wbGxfYXJncy51c1BpeGVsQ2xvY2spICogMTA7CisJfSBlbHNlIHsKKwkJLyogRFZPIHdhbnRzIDJ4IHBpeGVsIGNsb2NrIGlmIHRoZSBEVk8gY2hpcCBpcyBpbiAxMiBiaXQgbW9kZSAqLworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJgorCQkgICAgKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkID09IEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EVk8xKSkKKwkJCWFkanVzdGVkX2Nsb2NrID0gbW9kZS0+Y2xvY2sgKiAyOworCQllbHNlCisJCQlhZGp1c3RlZF9jbG9jayA9IG1vZGUtPmNsb2NrOworCX0KKwogCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKQogCQlwbGwgPSAmcmRldi0+Y2xvY2sucDFwbGw7CiAJZWxzZQogCQlwbGwgPSAmcmRldi0+Y2xvY2sucDJwbGw7CiAKLQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBtb2RlLT5jbG9jaywgJnNjbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCXJhZGVvbl9jb21wdXRlX3BsbChwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLCAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCiAJCQkgICAmcmVmX2RpdiwgJnBvc3RfZGl2LCBwbGxfZmxhZ3MpOwogCisJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBTZXRQaXhlbENsb2NrKTsKIAlhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LAogCQkJICAgICAgJmNyZXYpOwogCkBAIC00MDksNyArNTEyLDcgQEAKIAkJc3dpdGNoIChjcmV2KSB7CiAJCWNhc2UgMToKIAkJCXNwYzFfcHRyID0gKFBJWEVMX0NMT0NLX1BBUkFNRVRFUlMgKikgJiBhcmdzLnNQQ0xLSW5wdXQ7Ci0JCQlzcGMxX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoc2Nsb2NrKTsKKwkJCXNwYzFfcHRyLT51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihtb2RlLT5jbG9jayAvIDEwKTsKIAkJCXNwYzFfcHRyLT51c1JlZkRpdiA9IGNwdV90b19sZTE2KHJlZl9kaXYpOwogCQkJc3BjMV9wdHItPnVzRmJEaXYgPSBjcHVfdG9fbGUxNihmYl9kaXYpOwogCQkJc3BjMV9wdHItPnVjRnJhY0ZiRGl2ID0gZnJhY19mYl9kaXY7CkBAIC00MjIsNyArNTI1LDcgQEAKIAkJY2FzZSAyOgogCQkJc3BjMl9wdHIgPQogCQkJICAgIChQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YyICopICYgYXJncy5zUENMS0lucHV0OwotCQkJc3BjMl9wdHItPnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHNjbG9jayk7CisJCQlzcGMyX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CiAJCQlzcGMyX3B0ci0+dXNSZWZEaXYgPSBjcHVfdG9fbGUxNihyZWZfZGl2KTsKIAkJCXNwYzJfcHRyLT51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCXNwYzJfcHRyLT51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OwpAQCAtNDM3LDcgKzU0MCw3IEBACiAJCQkJcmV0dXJuOwogCQkJc3BjM19wdHIgPQogCQkJICAgIChQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YzICopICYgYXJncy5zUENMS0lucHV0OwotCQkJc3BjM19wdHItPnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHNjbG9jayk7CisJCQlzcGMzX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CiAJCQlzcGMzX3B0ci0+dXNSZWZEaXYgPSBjcHVfdG9fbGUxNihyZWZfZGl2KTsKIAkJCXNwYzNfcHRyLT51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCXNwYzNfcHRyLT51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OwpAQCAtNTI3LDYgKzYzMCwxNiBAQAogCQlXUkVHMzIoQVZJVk9fRDFWR0FfQ09OVFJPTCwgMCk7CiAJZWxzZQogCQlXUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCwgMCk7CisKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApIHsKKwkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkKSB7CisJCQlXUkVHMzIoUjcwMF9EMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CisJCQlXUkVHMzIoUjcwMF9EMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdILCAwKTsKKwkJfSBlbHNlIHsKKwkJCVdSRUczMihSNzAwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdILCAwKTsKKwkJCVdSRUczMihSNzAwX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0gsIDApOworCQl9CisJfQogCVdSRUczMihBVklWT19EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh1MzIpIGZiX2xvY2F0aW9uKTsKIAlXUkVHMzIoQVZJVk9fRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKwpAQCAtNTYzLDYgKzY3NiwxMCBAQAogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIob2xkX2ZiKTsKIAkJcmFkZW9uX2dlbV9vYmplY3RfdW5waW4ocmFkZW9uX2ZiLT5vYmopOwogCX0KKworCS8qIEJ5dGVzIHBlciBwaXhlbCBtYXkgaGF2ZSBjaGFuZ2VkICovCisJcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTc0LDEzNCArNjkxLDI0IEBACiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OIGNydGNfdGltaW5nOwotCWludCBuZWVkX3R2X3RpbWluZ3MgPSAwOwotCWJvb2wgcmV0OwogCiAJLyogVE9ETyBjb2xvciB0aWxpbmcgKi8KLQltZW1zZXQoJmNydGNfdGltaW5nLCAwLCBzaXplb2YoY3J0Y190aW1pbmcpKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7Ci0JCS8qIGZpbmQgdHYgc3RkICovCi0JCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKLQkJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKLQotCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkgewotCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwotCQkJCWlmICh0dl9kYWMpIHsKLQkJCQkJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8Ci0JCQkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8Ci0JCQkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00pCi0JCQkJCQluZWVkX3R2X3RpbWluZ3MgPSAxOwotCQkJCQllbHNlCi0JCQkJCQluZWVkX3R2X3RpbWluZ3MgPSAyOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljcnRjX3RpbWluZy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQlpZiAobmVlZF90dl90aW1pbmdzKSB7Ci0JCXJldCA9IHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHJkZXYsIG5lZWRfdHZfdGltaW5ncyAtIDEsCi0JCQkJCQkgJmNydGNfdGltaW5nLCAmYWRqdXN0ZWRfbW9kZS0+Y2xvY2spOwotCQlpZiAocmV0ID09IGZhbHNlKQotCQkJbmVlZF90dl90aW1pbmdzID0gMDsKLQl9Ci0KLQlpZiAoIW5lZWRfdHZfdGltaW5ncykgewotCQljcnRjX3RpbWluZy51c0hfVG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbDsKLQkJY3J0Y190aW1pbmcudXNIX0Rpc3AgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5OwotCQljcnRjX3RpbWluZy51c0hfU3luY1N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQkJY3J0Y190aW1pbmcudXNIX1N5bmNXaWR0aCA9Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtIGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQ7Ci0KLQkJY3J0Y190aW1pbmcudXNWX1RvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWw7Ci0JCWNydGNfdGltaW5nLnVzVl9EaXNwID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJY3J0Y190aW1pbmcudXNWX1N5bmNTdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQ7Ci0JCWNydGNfdGltaW5nLnVzVl9TeW5jV2lkdGggPQotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0OwotCi0JCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQotCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fVlNZTkNfUE9MQVJJVFk7Ci0KLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCi0JCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9IU1lOQ19QT0xBUklUWTsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQotCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fQ09NUE9TSVRFU1lOQzsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJCWNydGNfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PSBBVE9NX0lOVEVSTEFDRTsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCi0JCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERTsKLQl9Ci0KKwlhdG9tYmlvc19zZXRfc3MoY3J0YywgMCk7CiAJYXRvbWJpb3NfY3J0Y19zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwotCWF0b21iaW9zX2NydGNfc2V0X3RpbWluZyhjcnRjLCAmY3J0Y190aW1pbmcpOworCWF0b21iaW9zX3NldF9zcyhjcnRjLCAxKTsKKwlhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAKIAlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKIAkJYXRvbWJpb3NfY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOwogCWVsc2UgewotCQlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMCkgewotCQkJU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTIGNydGNfZHRkX3RpbWluZzsKLQkJCW1lbXNldCgmY3J0Y19kdGRfdGltaW5nLCAwLCBzaXplb2YoY3J0Y19kdGRfdGltaW5nKSk7Ci0KLQkJCS8qIHNldHVwIEZQIHNoYWRvdyByZWdzIG9uIFI0eHggKi8KLQkJCWNydGNfZHRkX3RpbWluZy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU2l6ZSA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Ci0JCQljcnRjX2R0ZF90aW1pbmcudXNWX1NpemUgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5OwotCQkJY3J0Y19kdGRfdGltaW5nLnVzSF9CbGFua2luZ19UaW1lID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19lbmQgLQotCQkJICAgIGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Ci0JCQljcnRjX2R0ZF90aW1pbmcudXNWX0JsYW5raW5nX1RpbWUgPQotCQkJICAgIGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU3luY09mZnNldCA9Ci0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c1ZfU3luY09mZnNldCA9Ci0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU3luY1dpZHRoID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQkJCWNydGNfZHRkX3RpbWluZy51c1ZfU3luY1dpZHRoID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydDsKLQkJCS8qIGNydGNfZHRkX3RpbWluZy51Y0hfQm9yZGVyID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYm9yZGVyOyAqLwotCQkJLyogY3J0Y19kdGRfdGltaW5nLnVjVl9Cb3JkZXIgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3Zib3JkZXI7ICovCi0KLQkJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQotCQkJCWNydGNfZHRkX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0KLQkJCQkgICAgQVRPTV9WU1lOQ19QT0xBUklUWTsKLQotCQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCi0JCQkJY3J0Y19kdGRfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PQotCQkJCSAgICBBVE9NX0hTWU5DX1BPTEFSSVRZOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQotCQkJCWNydGNfZHRkX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0KLQkJCQkgICAgQVRPTV9DT01QT1NJVEVTWU5DOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJCQljcnRjX2R0ZF90aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9Ci0JCQkJICAgIEFUT01fSU5URVJMQUNFOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCi0JCQkJY3J0Y19kdGRfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PQotCQkJCSAgICBBVE9NX0RPVUJMRV9DTE9DS19NT0RFOwotCi0JCQlhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKGNydGMsICZjcnRjX2R0ZF90aW1pbmcpOwotCQl9CisJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKQorCQkJYXRvbWJpb3Nfc2V0X2NydGNfZHRkX3RpbWluZyhjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAkJcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAkJcmFkZW9uX2xlZ2FjeV9hdG9tX3NldF9zdXJmYWNlKGNydGMpOwogCX0KIAlhdG9tYmlvc19vdmVyc2Nhbl9zZXR1cChjcnRjLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKIAlhdG9tYmlvc19zY2FsZXJfc2V0dXAoY3J0Yyk7Ci0JcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczMyw2ICs3NDAsNyBAQAogCS5tb2RlX3NldF9iYXNlID0gYXRvbWJpb3NfY3J0Y19zZXRfYmFzZSwKIAkucHJlcGFyZSA9IGF0b21iaW9zX2NydGNfcHJlcGFyZSwKIAkuY29tbWl0ID0gYXRvbWJpb3NfY3J0Y19jb21taXQsCisJLmxvYWRfbHV0ID0gcmFkZW9uX2NydGNfbG9hZF9sdXQsCiB9OwogCiB2b2lkIHJhZGVvbl9hdG9tYmlvc19pbml0X2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F2aXZvZC5oCmluZGV4IGUyYjkyYzQuLmQ0ZTZlNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdml2b2QuaApAQCAtNTcsMTMgKzU3LDQgQEAKICNkZWZpbmUJVkdBX1JFTkRFUl9DT05UUk9MCQkJCTB4MDMwMAogI2RlZmluZQkJVkdBX1ZTVEFUVVNfQ05UTF9NQVNLCQkJCTB4MDAwMzAwMDAKIAotLyogQVZJVk8gZGlzYWJsZSBWR0EgcmVuZGVyaW5nICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcmFkZW9uX2F2aXZvX3ZnYV9yZW5kZXJfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQl1MzIgdmdhX3JlbmRlcjsKLQl2Z2FfcmVuZGVyID0gUlJFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCk7Ci0JdmdhX3JlbmRlciAmPSB+VkdBX1ZTVEFUVVNfQ05UTF9NQVNLOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXIpOwotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKaW5kZXggZmIyMTFlNS4uMGQ3OTU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKQEAgLTU2MSw3ICs1NjEsNyBAQAogCWNoYXIgKmdwdV9wcmVmaXg7CiB9OwogCi1zdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXRfbmV3KHVuc2lnbmVkIG8pCitzdGF0aWMgc3RydWN0IG9mZnNldCAqb2Zmc2V0X25ldyh1bnNpZ25lZCBvKQogewogCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKIApAQCAtNTczLDEyICs1NzMsMTIgQEAKIAlyZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIHRhYmxlX29mZnNldF9hZGQoc3RydWN0IHRhYmxlICp0LCBzdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXQpCitzdGF0aWMgdm9pZCB0YWJsZV9vZmZzZXRfYWRkKHN0cnVjdCB0YWJsZSAqdCwgc3RydWN0IG9mZnNldCAqb2Zmc2V0KQogewogCWxpc3RfYWRkX3RhaWwoJm9mZnNldC0+bGlzdCwgJnQtPm9mZnNldHMpOwogfQogCi12b2lkIHRhYmxlX2luaXQoc3RydWN0IHRhYmxlICp0KQorc3RhdGljIHZvaWQgdGFibGVfaW5pdChzdHJ1Y3QgdGFibGUgKnQpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJnQtPm9mZnNldHMpOwogCXQtPm9mZnNldF9tYXggPSAwOwpAQCAtNTg2LDcgKzU4Niw3IEBACiAJdC0+dGFibGUgPSBOVUxMOwogfQogCi12b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKK3N0YXRpYyB2b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKIHsKIAl1bnNpZ25lZCBubGxvb3AsIGksIGosIG4sIGMsIGlkOwogCkBAIC02MTEsNyArNjExLDcgQEAKIAlwcmludGYoIn07XG4iKTsKIH0KIAotaW50IHRhYmxlX2J1aWxkKHN0cnVjdCB0YWJsZSAqdCkKK3N0YXRpYyBpbnQgdGFibGVfYnVpbGQoc3RydWN0IHRhYmxlICp0KQogewogCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKIAl1bnNpZ25lZCBpLCBtOwpAQCAtNjMxLDcgKzYzMSw3IEBACiB9CiAKIHN0YXRpYyBjaGFyIGdwdV9uYW1lWzEwXTsKLWludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorc3RhdGljIGludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCUZJTEUgKmZpbGU7CiAJcmVnZXhfdCBtYXNrX3JleDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggYmU1MWM1Zi4uYzllOTNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTMyLDYgKzMyLDkgQEAKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAicjEwMGQuaCIKKyNpbmNsdWRlICJyczEwMGQuaCIKKyNpbmNsdWRlICJydjIwMGQuaCIKKyNpbmNsdWRlICJydjI1MGQuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC02MCwxOCArNjMsNyBAQAogCiAvKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgogICogcjEwMCxydjEwMCxyczEwMCxydjIwMCxyczIwMCxyMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KICAqLwotaW50IHIyMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX2dwdV93YWl0X2Zvcl92c3luYzIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZGVidWdmc19tY19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCiAKIC8qCiAgKiBQQ0kgR0FSVApAQCAtMTUyLDEzNiArMTQ0LDYgQEAKIAlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCi0KLS8qCi0gKiBNQwotICovCi12b2lkIHIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IG92MF9zY2FsZV9jbnRsLCBjcnRjX2V4dF9jbnRsLCBjcnRjX2dlbl9jbnRsLCBjcnRjMl9nZW5fY250bDsKLQotCS8qIEZJWE1FOiBpcyB0aGlzIGZ1bmN0aW9uIGNvcnJlY3QgZm9yIHJzMTAwLHJzMjAwLHJzMzAwID8gKi8KLQlpZiAocjEwMF9ndWlfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBHVUkgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCi0JLyogc3RvcCBkaXNwbGF5IGFuZCBtZW1vcnkgYWNjZXNzICovCi0Jb3YwX3NjYWxlX2NudGwgPSBSUkVHMzIoUkFERU9OX09WMF9TQ0FMRV9DTlRMKTsKLQlXUkVHMzIoUkFERU9OX09WMF9TQ0FMRV9DTlRMLCBvdjBfc2NhbGVfY250bCAmIH5SQURFT05fU0NBTEVSX0VOQUJMRSk7Ci0JY3J0Y19leHRfY250bCA9IFJSRUczMihSQURFT05fQ1JUQ19FWFRfQ05UTCk7Ci0JV1JFRzMyKFJBREVPTl9DUlRDX0VYVF9DTlRMLCBjcnRjX2V4dF9jbnRsIHwgUkFERU9OX0NSVENfRElTUExBWV9ESVMpOwotCWNydGNfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0NSVENfR0VOX0NOVEwpOwotCi0JcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMocmRldik7Ci0KLQlXUkVHMzIoUkFERU9OX0NSVENfR0VOX0NOVEwsCi0JICAgICAgIChjcnRjX2dlbl9jbnRsICYgfihSQURFT05fQ1JUQ19DVVJfRU4gfCBSQURFT05fQ1JUQ19JQ09OX0VOKSkgfAotCSAgICAgICBSQURFT05fQ1JUQ19ESVNQX1JFUV9FTl9CIHwgUkFERU9OX0NSVENfRVhUX0RJU1BfRU4pOwotCi0JaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpKSB7Ci0JCWNydGMyX2dlbl9jbnRsID0gUlJFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCk7Ci0KLQkJcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMyKHJkZXYpOwotCQlXUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMLAotCQkgICAgICAgKGNydGMyX2dlbl9jbnRsICYKLQkJICAgICAgICB+KFJBREVPTl9DUlRDMl9DVVJfRU4gfCBSQURFT05fQ1JUQzJfSUNPTl9FTikpIHwKLQkJICAgICAgIFJBREVPTl9DUlRDMl9ESVNQX1JFUV9FTl9CKTsKLQl9Ci0KLQl1ZGVsYXkoNTAwKTsKLX0KLQotdm9pZCByMTAwX21jX3NldHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCXIgPSByMTAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUjEwMCBNQyAhXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCS8qIE5vdmVsbCBidWcgMjA0ODgyIGZvciBSTjUwL002L003IHdpdGggOC8xNi8zMk1CIFZSQU0sCi0JICogaWYgdGhlIGFwZXJ0dXJlIGlzIDY0TUIgYnV0IHdlIGhhdmUgMzJNQiBWUkFNCi0JICogd2UgcmVwb3J0IG9ubHkgMzJNQiBWUkFNIGJ1dCB3ZSBoYXZlIHRvIHNldCBNQ19GQl9MT0NBVElPTgotCSAqIHRvIDY0TUIsIG90aGVyd2lzZSB0aGUgZ3B1IGFjY2lkZW50aWFsbHkgZGllcyAqLwotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChSQURFT05fTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMihSQURFT05fTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0KLQkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyAqLwotCXRtcCA9IFJSRUczMihSQURFT05fQlVTX0NOVEwpICYgflJBREVPTl9CVVNfTUFTVEVSX0RJUzsKLQlXUkVHMzIoUkFERU9OX0JVU19DTlRMLCB0bXApOwotCi0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0FHUF9UT1AsIHRtcCA+PiAxNik7Ci0JCXRtcCB8PSBSRUdfU0VUKFJBREVPTl9NQ19BR1BfU1RBUlQsIHJkZXYtPm1jLmd0dF9sb2NhdGlvbiA+PiAxNik7Ci0JCVdSRUczMihSQURFT05fTUNfQUdQX0xPQ0FUSU9OLCB0bXApOwotCQlXUkVHMzIoUkFERU9OX0FHUF9CQVNFLCByZGV2LT5tYy5hZ3BfYmFzZSk7Ci0JfSBlbHNlIHsKLQkJV1JFRzMyKFJBREVPTl9NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOwotCQlXUkVHMzIoUkFERU9OX0FHUF9CQVNFLCAwKTsKLQl9Ci0KLQl0bXAgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKSAmIFJBREVPTl9IRFBfQVBFUl9DTlRMOwotCXRtcCB8PSAoNyA8PCAyOCk7Ci0JV1JFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgdG1wIHwgUkFERU9OX0hEUF9TT0ZUX1JFU0VUIHwgUkFERU9OX0hEUF9SRUFEX0JVRkZFUl9JTlZBTElEQVRFKTsKLQkodm9pZClSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKLQlXUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCB0bXApOwotCSh2b2lkKVJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwotfQotCi1pbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQotCXIxMDBfZ3B1X2luaXQocmRldik7Ci0JLyogRGlzYWJsZSBnYXJ0IHdoaWNoIGFsc28gZGlzYWJsZSBvdXQgb2YgZ2FydCBhY2Nlc3MgKi8KLQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKLQkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl9Ci0JfQotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JcjEwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHIxMDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQlyMTAwX21jX3NldHVwKHJkZXYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHIxMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogSW50ZXJydXB0cwotICovCiBpbnQgcjEwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcCA9IDA7CkBAIC0zMjQsNyArMTg2LDcgQEAKIAogaW50IHIxMDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IHN0YXR1cywgbXNpX3JlYXJtOwogCiAJc3RhdHVzID0gcjEwMF9pcnFfYWNrKHJkZXYpOwogCWlmICghc3RhdHVzKSB7CkBAIC0zNDcsNiArMjA5LDIxIEBACiAJCX0KIAkJc3RhdHVzID0gcjEwMF9pcnFfYWNrKHJkZXYpOwogCX0KKwlpZiAocmRldi0+bXNpX2VuYWJsZWQpIHsKKwkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwkJY2FzZSBDSElQX1JTNDAwOgorCQljYXNlIENISVBfUlM0ODA6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX0FJQ19DTlRMKSAmIH5SUzQwMF9NU0lfUkVBUk07CisJCQlXUkVHMzIoUkFERU9OX0FJQ19DTlRMLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9BSUNfQ05UTCwgbXNpX3JlYXJtIHwgUlM0MDBfTVNJX1JFQVJNKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbXNpX3JlYXJtID0gUlJFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4pICYgflJWMzcwX01TSV9SRUFSTV9FTjsKKwkJCVdSRUczMihSQURFT05fTVNJX1JFQVJNX0VOLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSB8IFJWMzcwX01TSV9SRUFSTV9FTik7CisJCQlicmVhazsKKwkJfQorCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTM1OCwxMCArMjM1LDYgQEAKIAkJcmV0dXJuIFJSRUczMihSQURFT05fQ1JUQzJfQ1JOVF9GUkFNRSk7CiB9CiAKLQotLyoKLSAqIEZlbmNlIGVtaXNzaW9uCi0gKi8KIHZvaWQgcjEwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewpAQCAtMzc3LDE2ICsyNTAsMTIgQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSQURFT05fU1dfSU5UX0ZJUkUpOwogfQogCi0KLS8qCi0gKiBXcml0ZWJhY2sKLSAqLwogaW50IHIxMDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKIAogCWlmIChyZGV2LT53Yi53Yl9vYmogPT0gTlVMTCkgewotCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwKKwkJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIFJBREVPTl9HUFVfUEFHRV9TSVpFLAogCQkJCQkgdHJ1ZSwKIAkJCQkJIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKIAkJCQkJIGZhbHNlLCAmcmRldi0+d2Iud2Jfb2JqKTsKQEAgLTUwNCwxMCArMzczLDYgQEAKIAlyZXR1cm4gcjsKIH0KIAotCi0vKgotICogQ1AKLSAqLwogc3RhdGljIGludCByMTAwX2NwX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKQEAgLTYxMiw2ICs0NzcsNyBAQAogCX0KIAlyZXR1cm4gZXJyOwogfQorCiBzdGF0aWMgdm9pZCByMTAwX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsKQEAgLTcxMiwxOSArNTc4LDE5IEBACiAJaW5kaXJlY3QxX3N0YXJ0ID0gMTY7CiAJLyogY3Agc2V0dXAgKi8KIAlXUkVHMzIoMHg3MTgsIHByZV93cml0ZV90aW1lciB8IChwcmVfd3JpdGVfbGltaXQgPDwgMjgpKTsKLQlXUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwsCi0jaWZkZWYgX19CSUdfRU5ESUFOCi0JICAgICAgIFJBREVPTl9CVUZfU1dBUF8zMkJJVCB8Ci0jZW5kaWYKLQkgICAgICAgUkVHX1NFVChSQURFT05fUkJfQlVGU1osIHJiX2J1ZnN6KSB8CisJdG1wID0gKFJFR19TRVQoUkFERU9OX1JCX0JVRlNaLCByYl9idWZzeikgfAogCSAgICAgICBSRUdfU0VUKFJBREVPTl9SQl9CTEtTWiwgcmJfYmxrc3opIHwKIAkgICAgICAgUkVHX1NFVChSQURFT05fTUFYX0ZFVENILCBtYXhfZmV0Y2gpIHwKIAkgICAgICAgUkFERU9OX1JCX05PX1VQREFURSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdG1wIHw9IFJBREVPTl9CVUZfU1dBUF8zMkJJVDsKKyNlbmRpZgorCVdSRUczMihSQURFT05fQ1BfUkJfQ05UTCwgdG1wKTsKKwogCS8qIFNldCByaW5nIGFkZHJlc3MgKi8KIAlEUk1fSU5GTygicmFkZW9uOiByaW5nIGF0IDB4JTAxNmxYXG4iLCAodW5zaWduZWQgbG9uZylyZGV2LT5jcC5ncHVfYWRkcik7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9CQVNFLCByZGV2LT5jcC5ncHVfYWRkcik7CiAJLyogRm9yY2UgcmVhZCAmIHdyaXRlIHB0ciB0byAwICovCi0JdG1wID0gUlJFRzMyKFJBREVPTl9DUF9SQl9DTlRMKTsKIAlXUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwsIHRtcCB8IFJBREVPTl9SQl9SUFRSX1dSX0VOQSk7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9SUFRSX1dSLCAwKTsKIAlXUkVHMzIoUkFERU9OX0NQX1JCX1dQVFIsIDApOwpAQCAtODYzLDEzICs3MjksMTEgQEAKIHZvaWQgcjEwMF9jc19kdW1wX3BhY2tldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIGlkeDsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeDsKIAlmb3IgKGkgPSAwOyBpIDw9IChwa3QtPmNvdW50ICsgMSk7IGkrKywgaWR4KyspIHsKIAkJRFJNX0lORk8oImliWyVkXT0weCUwOFhcbiIsIGlkeCwgaWJbaWR4XSk7CkBAIC04OTYsNyArNzYwLDcgQEAKIAkJCSAgaWR4LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAlwa3QtPmlkeCA9IGlkeDsKIAlwa3QtPnR5cGUgPSBDUF9QQUNLRVRfR0VUX1RZUEUoaGVhZGVyKTsKIAlwa3QtPmNvdW50ID0gQ1BfUEFDS0VUX0dFVF9DT1VOVChoZWFkZXIpOwpAQCAtOTM5LDcgKzgwMyw2IEBACiAgKi8KIGludCByMTAwX2NzX3BhY2tldF9wYXJzZV92bGluZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGM7CkBAIC05NDcsOCArODEwLDkgQEAKIAlpbnQgY3J0Y19pZDsKIAlpbnQgcjsKIAl1aW50MzJfdCBoZWFkZXIsIGhfaWR4LCByZWc7CisJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCi0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJaWIgPSBwLT5pYi0+cHRyOwogCiAJLyogcGFyc2UgdGhlIHdhaXQgdW50aWwgKi8KIAlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJndhaXRyZWxvYywgcC0+aWR4KTsKQEAgLTk2MywyNCArODI3LDI0IEBACiAJCXJldHVybiByOwogCX0KIAotCWlmIChpYl9jaHVuay0+a2RhdGFbd2FpdHJlbG9jLmlkeCArIDFdICE9IFJBREVPTl9XQUlUX0NSVENfVkxJTkUpIHsKKwlpZiAocmFkZW9uX2dldF9pYl92YWx1ZShwLCB3YWl0cmVsb2MuaWR4ICsgMSkgIT0gUkFERU9OX1dBSVRfQ1JUQ19WTElORSkgewogCQlEUk1fRVJST1IoInZsaW5lIHdhaXQgaGFkIGlsbGVnYWwgd2FpdCB1bnRpbFxuIik7CiAJCXIgPSAtRUlOVkFMOwogCQlyZXR1cm4gcjsKIAl9CiAKIAkvKiBqdW1wIG92ZXIgdGhlIE5PUCAqLwotCXIgPSByMTAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4KTsKKwlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJnAzcmVsb2MsIHAtPmlkeCArIHdhaXRyZWxvYy5jb3VudCArIDIpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAogCWhfaWR4ID0gcC0+aWR4IC0gMjsKLQlwLT5pZHggKz0gd2FpdHJlbG9jLmNvdW50OwotCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50OworCXAtPmlkeCArPSB3YWl0cmVsb2MuY291bnQgKyAyOworCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKIAotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtoX2lkeF07Ci0JY3J0Y19pZCA9IGliX2NodW5rLT5rZGF0YVtoX2lkeCArIDVdOwotCXJlZyA9IGliX2NodW5rLT5rZGF0YVtoX2lkeF0gPj4gMjsKKwloZWFkZXIgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4KTsKKwljcnRjX2lkID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBoX2lkeCArIDUpOworCXJlZyA9IENQX1BBQ0tFVDBfR0VUX1JFRyhoZWFkZXIpOwogCW11dGV4X2xvY2soJnAtPnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChwLT5yZGV2LT5kZGV2LCBjcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CiAJaWYgKCFvYmopIHsKQEAgLTk5NCwxNiArODU4LDE2IEBACiAKIAlpZiAoIWNydGMtPmVuYWJsZWQpIHsKIAkJLyogaWYgdGhlIENSVEMgaXNuJ3QgZW5hYmxlZCAtIHdlIG5lZWQgdG8gbm9wIG91dCB0aGUgd2FpdCB1bnRpbCAqLwotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7Ci0JCWliX2NodW5rLT5rZGF0YVtoX2lkeCArIDNdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgM10gPSBQQUNLRVQyKDApOwogCX0gZWxzZSBpZiAoY3J0Y19pZCA9PSAxKSB7CiAJCXN3aXRjaCAocmVnKSB7CiAJCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKLQkJCWhlYWRlciAmPSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgJj0gflIzMDBfQ1BfUEFDS0VUMF9SRUdfTUFTSzsKIAkJCWhlYWRlciB8PSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EID4+IDI7CiAJCQlicmVhazsKIAkJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKLQkJCWhlYWRlciAmPSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgJj0gflIzMDBfQ1BfUEFDS0VUMF9SRUdfTUFTSzsKIAkJCWhlYWRlciB8PSBSQURFT05fQ1JUQzJfR1VJX1RSSUdfVkxJTkUgPj4gMjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTAxMSw4ICs4NzUsOCBAQAogCQkJciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHhdID0gaGVhZGVyOwotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHggKyAzXSB8PSBSQURFT05fRU5HX0RJU1BMQVlfU0VMRUNUX0NSVEMxOworCQlpYltoX2lkeF0gPSBoZWFkZXI7CisJCWliW2hfaWR4ICsgM10gfD0gUkFERU9OX0VOR19ESVNQTEFZX1NFTEVDVF9DUlRDMTsKIAl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CkBAIC0xMDMzLDcgKzg5Nyw2IEBACiBpbnQgcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcmVsb2MgKipjc19yZWxvYykKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICpyZWxvY3NfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgcDNyZWxvYzsKIAl1bnNpZ25lZCBpZHg7CkBAIC0xMDQ0LDcgKzkwNyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqY3NfcmVsb2MgPSBOVUxMOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CiAJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOwogCWlmIChyKSB7CkBAIC0xMDU3LDcgKzkxOSw3IEBACiAJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgJnAzcmVsb2MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWR4ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBwM3JlbG9jLmlkeCArIDEpOwogCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKIAkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwpAQCAtMTEyNiw3ICs5ODgsNiBAQAogCQkJICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCSAgICAgIHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CkBAIC0xMTM0LDExICs5OTUsMTMgQEAKIAlpbnQgcjsKIAlpbnQgaSwgZmFjZTsKIAl1MzIgdGlsZV9mbGFncyA9IDA7CisJdTMyIGlkeF92YWx1ZTsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCisJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgogCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CkBAIC0xMTY2LDggKzEwMjksOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPnpiLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTE3OCw4ICsxMDQxLDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT5jYlswXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMDoKIAljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8xOgpAQCAtMTE5Miw3ICsxMDU1LDcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8wOgpAQCAtMTIwOCw4ICsxMDcxLDggQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzA6CkBAIC0xMjI1LDggKzEwODgsOCBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzWzFdLmN1YmVfaW5mb1tpXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMDoKQEAgLTEyNDIsMTIgKzExMDUsMTIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1syXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgotCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTI2MywxNyArMTEyNiwxNyBAQAogCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKIAkJCXRpbGVfZmxhZ3MgfD0gUkFERU9OX0NPTE9SX01JQ1JPVElMRV9FTkFCTEU7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKLQkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOworCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0RFUFRIUElUQ0g6Ci0JCXRyYWNrLT56Yi5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKKwkJdHJhY2stPnpiLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DTlRMOgotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgeworCQlzd2l0Y2ggKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKIAkJY2FzZSA3OgogCQljYXNlIDg6CiAJCWNhc2UgOToKQEAgLTEyOTEsMTMgKzExNTQsMTMgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbG9yIGJ1ZmZlciBmb3JtYXQgKCVkKSAhXG4iLAotCQkJCSAgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikpOworCQkJCSAgKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9aX0VOQUJMRSk7CisJCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiBSQURFT05fWl9FTkFCTEUpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKLQkJc3dpdGNoIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4ZikgeworCQlzd2l0Y2ggKGlkeF92YWx1ZSAmIDB4ZikgewogCQljYXNlIDA6CiAJCQl0cmFjay0+emIuY3BwID0gMjsKIAkJCWJyZWFrOwpAQCAtMTMyMSw0NCArMTE4NCw0NCBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ05UTDoKIAkJewotCQkJdWludDMyX3QgdGVtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQ7CisJCQl1aW50MzJfdCB0ZW1wID0gaWR4X3ZhbHVlID4+IDQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCiAJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZUWF9GTVQ6Ci0JCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKGliX2NodW5rLT5rZGF0YVtpZHhdKTsKKwkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWR4X3ZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVEVYX1NJWkVfMDoKIAljYXNlIFJBREVPTl9QUF9URVhfU0laRV8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9TSVpFXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RFWF9TSVpFXzApIC8gODsKLQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8wOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9URVhfUElUQ0hfMCkgLyA4OwotCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArIDMyOworCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgKyAzMjsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhGSUxURVJfMDoKIAljYXNlIFJBREVPTl9QUF9UWEZJTFRFUl8xOgogCWNhc2UgUkFERU9OX1BQX1RYRklMVEVSXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RYRklMVEVSXzApIC8gMjQ7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9NQVhfTUlQX0xFVkVMX01BU0spCisJCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpZHhfdmFsdWUgJiBSQURFT05fTUFYX01JUF9MRVZFTF9NQVNLKQogCQkJCQkJID4+IFJBREVPTl9NQVhfTUlQX0xFVkVMX1NISUZUKTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIzKSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI3KSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKIAkJYnJlYWs7CkBAIC0xMzY2LDE2ICsxMjI5LDE2IEBACiAJY2FzZSBSQURFT05fUFBfVFhGT1JNQVRfMToKIAljYXNlIFJBREVPTl9QUF9UWEZPUk1BVF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9UWEZPUk1BVF8wKSAvIDI0OwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVFhGT1JNQVRfTk9OX1BPV0VSMikgeworCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX05PTl9QT1dFUjIpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAxOwogCQl9IGVsc2UgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDA7Ci0JCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX1dJRFRIX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9XSURUSF9NQVNLKTsKLQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiBSQURFT05fVFhGT1JNQVRfV0lEVEhfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX1dJRFRIX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOwogCQl9Ci0JCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9DVUJJQ19NQVBfRU5BQkxFKQorCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0NVQklDX01BUF9FTkFCTEUpCiAJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAyOwotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9NQVNLKSkgewogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9JODoKIAkJY2FzZSBSQURFT05fVFhGT1JNQVRfUkdCMzMyOgogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9ZODoKQEAgLTE0MDIsMTMgKzEyNjUsMTMgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweGYpOwotCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19GQUNFU18xOgogCWNhc2UgUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzI6Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0bXAgPSBpZHhfdmFsdWU7CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzApIC8gNDsKIAkJZm9yIChmYWNlID0gMDsgZmFjZSA8IDQ7IGZhY2UrKykgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDEgPDwgKCh0bXAgPj4gKGZhY2UgKiA4KSkgJiAweGYpOwpAQCAtMTQyNywxNSArMTI5MCwxNCBAQAogCQkJCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCQkJIHN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXVuc2lnbmVkIGlkeDsKLQotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXUzMiB2YWx1ZTsKIAlpZHggPSBwa3QtPmlkeCArIDE7Ci0JaWYgKChpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgMSkgPiByYWRlb25fb2JqZWN0X3NpemUocm9iaikpIHsKKwl2YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMik7CisJaWYgKCh2YWx1ZSArIDEpID4gcmFkZW9uX29iamVjdF9zaXplKHJvYmopKSB7CiAJCURSTV9FUlJPUigiW2RybV0gQnVmZmVyIHRvbyBzbWFsbCBmb3IgUEFDS0VUMyBJTkRYX0JVRkZFUiAiCiAJCQkgICIobmVlZCAldSBoYXZlICVsdSkgIVxuIiwKLQkJCSAgaWJfY2h1bmstPmtkYXRhW2lkeCsyXSArIDEsCisJCQkgIHZhbHVlICsgMSwKIAkJCSAgcmFkZW9uX29iamVjdF9zaXplKHJvYmopKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTQ0NSw1OSArMTMwNywyMCBAQAogc3RhdGljIGludCByMTAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl1bnNpZ25lZCBpZHg7Ci0JdW5zaWduZWQgaSwgYzsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CiAJaW50IHI7CiAKIAlpYiA9IHAtPmliLT5wdHI7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOwogCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CiAJc3dpdGNoIChwa3QtPm9wY29kZSkgewogCWNhc2UgUEFDS0VUM18zRF9MT0FEX1ZCUE5UUjoKLQkJYyA9IGliX2NodW5rLT5rZGF0YVtpZHgrK107Ci0JCXRyYWNrLT5udW1fYXJyYXlzID0gYzsKLQkJZm9yIChpID0gMDsgaSA8IChjIC0gMSk7IGkgKz0gMiwgaWR4ICs9IDMpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMl0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI0OwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgJj0gMHg3RjsKLQkJfQotCQlpZiAoYyAmIDEpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCX0KKwkJciA9IHIxMDBfcGFja2V0M19sb2FkX3ZicG50cihwLCBwa3QsIGlkeCk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19JTkRYX0JVRkZFUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTE1MDYsNyArMTMyOSw3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeCsxXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIocCwgcGt0LCByZWxvYy0+cm9iaik7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKQEAgLTE1MjAsMjcgKzEzNDMsMjcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT5udW1fYXJyYXlzID0gMTsKLQkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWJfY2h1bmstPmtkYXRhW2lkeCsyXSk7CisJCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikpOwogCiAJCXRyYWNrLT5hcnJheXNbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+YXJyYXlzWzBdLmVzaXplID0gdHJhY2stPnZ0eF9zaXplOwogCi0JCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT5tYXhfaW5keCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzEpOwogCi0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrM107CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzMpOwogCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50IC0gMTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTU1EOgotCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4KzFdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgPj4gNCkgJiAweDMpICE9IDMpIHsKIAkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQgLSAxOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQpAQCAtMTU0OCwxMSArMTM3MSwxMSBAQAogCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbi1wYWNrZXQgdmVydGV4IGRhdGEgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTU1EXzI6Ci0JCWlmICgoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KSA+PiA0KSAmIDB4MykgIT0gMykgewogCQkJRFJNX0VSUk9SKCJQUklNX1dBTEsgbXVzdCBiZSAzIGZvciBJTU1EIGRyYXdcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJdHJhY2stPmltbWRfZHdvcmRzID0gcGt0LT5jb3VudDsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKQEAgLTE1NjAsMjggKzEzODMsMjggQEAKIAkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgdXNpbmcgaW4tcGFja2V0IHZlcnRleCBkYXRhICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfVkJVRl8yOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCQkvKiB0cmlnZ2VycyBkcmF3aW5nIG9mIHZlcnRleCBidWZmZXJzIHNldHVwIGVsc2V3aGVyZSAqLwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lORFhfMjoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbmRpY2VzIHRvIHZlcnRleCBidWZmZXIgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19WQlVGOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgb2YgdmVydGV4IGJ1ZmZlcnMgc2V0dXAgZWxzZXdoZXJlICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWDoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CkBAIC0yMDMzLDcgKzE4NTYsNyBAQAogCXIxMDBfcGxsX2VycmF0YV9hZnRlcl9kYXRhKHJkZXYpOwogfQogCi1pbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMTAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpZiAoQVNJQ19JU19STjUwKHJkZXYpKSB7CiAJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcm41MF9yZWdfc2FmZV9ibTsKQEAgLTIwNDIsOSArMTg2NSw4IEBACiAJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcjEwMF9yZWdfc2FmZV9ibTsKIAkJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjEwMF9yZWdfc2FmZV9ibSk7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIHIyMDBfaW5pdChyZGV2KTsKKwkJcjIwMF9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CiAJfQotCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjM0Miw5ICsyMTY0LDExIEBACiAJCW1vZGUxID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1swXS0+YmFzZS5tb2RlOwogCQlwaXhlbF9ieXRlczEgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMF0tPmJhc2UuZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKIAl9Ci0JaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5lbmFibGVkKSB7Ci0JCW1vZGUyID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5tb2RlOwotCQlwaXhlbF9ieXRlczIgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmJhc2UuZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKKwkJaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5lbmFibGVkKSB7CisJCQltb2RlMiA9ICZyZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmJhc2UubW9kZTsKKwkJCXBpeGVsX2J5dGVzMiA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5mYi0+Yml0c19wZXJfcGl4ZWwgLyA4OworCQl9CiAJfQogCiAJbWluX21lbV9lZmYuZnVsbCA9IHJmaXhlZF9jb25zdF84KDApOwpAQCAtMjU1NSw3ICsyMzc5LDcgQEAKIAkvKgogCSAgRmluZCB0aGUgdG90YWwgbGF0ZW5jeSBmb3IgdGhlIGRpc3BsYXkgZGF0YS4KIAkqLwotCWRpc3BfbGF0ZW5jeV9vdmVyaGVhZC5mdWxsID0gcmZpeGVkX2NvbnN0KDgwKTsKKwlkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCA9IHJmaXhlZF9jb25zdCg4KTsKIAlkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCA9IHJmaXhlZF9kaXYoZGlzcF9sYXRlbmN5X292ZXJoZWFkLCBzY2xrX2ZmKTsKIAltY19sYXRlbmN5X21jbGsuZnVsbCArPSBkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCArIGN1cl9sYXRlbmN5X21jbGsuZnVsbDsKIAltY19sYXRlbmN5X3NjbGsuZnVsbCArPSBkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCArIGN1cl9sYXRlbmN5X3NjbGsuZnVsbDsKQEAgLTI3NTMsOCArMjU3NywxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHIxMDBfY3NfdHJhY2tfdGV4dHVyZV9wcmludChzdHJ1Y3QgcjEwMF9jc190cmFja190ZXh0dXJlICp0KQogewogCURSTV9FUlJPUigicGl0Y2ggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPnBpdGNoKTsKKwlEUk1fRVJST1IoInVzZV9waXRjaCAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT51c2VfcGl0Y2gpOwogCURSTV9FUlJPUigid2lkdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPndpZHRoKTsKKwlEUk1fRVJST1IoIndpZHRoXzExICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT53aWR0aF8xMSk7CiAJRFJNX0VSUk9SKCJoZWlnaHQgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+aGVpZ2h0KTsKKwlEUk1fRVJST1IoImhlaWdodF8xMSAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5oZWlnaHRfMTEpOwogCURSTV9FUlJPUigibnVtIGxldmVscyAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPm51bV9sZXZlbHMpOwogCURSTV9FUlJPUigiZGVwdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPnR4ZGVwdGgpOwogCURSTV9FUlJPUigiYnBwICAgICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPmNwcCk7CkBAIC0yODE0LDE1ICsyNjQxLDE3IEBACiAJCQkJZWxzZQogCQkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLnBpdGNoIC8gKDEgPDwgaSk7CiAJCQl9IGVsc2UgewotCQkJCXcgPSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGggLyAoMSA8PCBpKTsKKwkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLndpZHRoOwogCQkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKIAkJCQkJdyB8PSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGhfMTE7CisJCQkJdyA9IHcgLyAoMSA8PCBpKTsKIAkJCQlpZiAodHJhY2stPnRleHR1cmVzW3VdLnJvdW5kdXBfdykKIAkJCQkJdyA9IHJvdW5kdXBfcG93X29mX3R3byh3KTsKIAkJCX0KLQkJCWggPSB0cmFjay0+dGV4dHVyZXNbdV0uaGVpZ2h0IC8gKDEgPDwgaSk7CisJCQloID0gdHJhY2stPnRleHR1cmVzW3VdLmhlaWdodDsKIAkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKIAkJCQloIHw9IHRyYWNrLT50ZXh0dXJlc1t1XS5oZWlnaHRfMTE7CisJCQloID0gaCAvICgxIDw8IGkpOwogCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS5yb3VuZHVwX2gpCiAJCQkJaCA9IHJvdW5kdXBfcG93X29mX3R3byhoKTsKIAkJCXNpemUgKz0gdyAqIGg7CkBAIC0zMTU3LDcgKzI5ODYsNyBAQAogCVdSRUczMihSXzAwMDc0MF9DUF9DU1FfQ05UTCwgMCk7CiAKIAkvKiBTYXZlIGZldyBDUlRDIHJlZ2lzdGVycyAqLwotCXNhdmUtPkdFTk1PX1dUID0gUlJFRzMyKFJfMDAwM0MwX0dFTk1PX1dUKTsKKwlzYXZlLT5HRU5NT19XVCA9IFJSRUc4KFJfMDAwM0MyX0dFTk1PX1dUKTsKIAlzYXZlLT5DUlRDX0VYVF9DTlRMID0gUlJFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwpOwogCXNhdmUtPkNSVENfR0VOX0NOVEwgPSBSUkVHMzIoUl8wMDAwNTBfQ1JUQ19HRU5fQ05UTCk7CiAJc2F2ZS0+Q1VSX09GRlNFVCA9IFJSRUczMihSXzAwMDI2MF9DVVJfT0ZGU0VUKTsKQEAgLTMxNjcsNyArMjk5Niw3IEBACiAJfQogCiAJLyogRGlzYWJsZSBWR0EgYXBlcnR1cmUgYWNjZXNzICovCi0JV1JFRzMyKFJfMDAwM0MwX0dFTk1PX1dULCBDXzAwMDNDMF9WR0FfUkFNX0VOICYgc2F2ZS0+R0VOTU9fV1QpOworCVdSRUc4KFJfMDAwM0MyX0dFTk1PX1dULCBDXzAwMDNDMl9WR0FfUkFNX0VOICYgc2F2ZS0+R0VOTU9fV1QpOwogCS8qIERpc2FibGUgY3Vyc29yLCBvdmVybGF5LCBjcnRjICovCiAJV1JFRzMyKFJfMDAwMjYwX0NVUl9PRkZTRVQsIHNhdmUtPkNVUl9PRkZTRVQgfCBTXzAwMDI2MF9DVVJfTE9DSygxKSk7CiAJV1JFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwsIHNhdmUtPkNSVENfRVhUX0NOVEwgfApAQCAtMzE5OSwxMCArMzAyOCwyNjQgQEAKIAkJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKIAl9CiAJLyogUmVzdG9yZSBDUlRDIHJlZ2lzdGVycyAqLwotCVdSRUczMihSXzAwMDNDMF9HRU5NT19XVCwgc2F2ZS0+R0VOTU9fV1QpOworCVdSRUc4KFJfMDAwM0MyX0dFTk1PX1dULCBzYXZlLT5HRU5NT19XVCk7CiAJV1JFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwsIHNhdmUtPkNSVENfRVhUX0NOVEwpOwogCVdSRUczMihSXzAwMDA1MF9DUlRDX0dFTl9DTlRMLCBzYXZlLT5DUlRDX0dFTl9DTlRMKTsKIAlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKIAkJV1JFRzMyKFJfMDAwM0Y4X0NSVEMyX0dFTl9DTlRMLCBzYXZlLT5DUlRDMl9HRU5fQ05UTCk7CiAJfQogfQorCit2b2lkIHIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwl0bXAgPSBSUkVHOChSXzAwMDNDMl9HRU5NT19XVCk7CisJV1JFRzgoUl8wMDAzQzJfR0VOTU9fV1QsIENfMDAwM0MyX1ZHQV9SQU1fRU4gJiB0bXApOworfQorCitzdGF0aWMgdm9pZCByMTAwX2RlYnVnZnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyID0gcjEwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSByMTAwX21jIGRlYnVnZnMgZmlsZS5cbiIpOworfQorCitzdGF0aWMgdm9pZCByMTAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHIxMDBfbWNfc2F2ZSBzYXZlOworCisJLyogU3RvcHMgYWxsIG1jIGNsaWVudHMgKi8KKwlyMTAwX21jX3N0b3AocmRldiwgJnNhdmUpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJV1JFRzMyKFJfMDAwMTRDX01DX0FHUF9MT0NBVElPTiwKKwkJCVNfMDAwMTRDX01DX0FHUF9TVEFSVChyZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpIHwKKwkJCVNfMDAwMTRDX01DX0FHUF9UT1AocmRldi0+bWMuZ3R0X2VuZCA+PiAxNikpOworCQlXUkVHMzIoUl8wMDAxNzBfQUdQX0JBU0UsIGxvd2VyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKTsKKwkJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUlYyMDApCisJCQlXUkVHMzIoUl8wMDAxNUNfQUdQX0JBU0VfMiwKKwkJCQl1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSAmIDB4ZmYpOworCX0gZWxzZSB7CisJCVdSRUczMihSXzAwMDE0Q19NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOworCQlXUkVHMzIoUl8wMDAxNzBfQUdQX0JBU0UsIDApOworCQlpZiAocmRldi0+ZmFtaWx5ID4gQ0hJUF9SVjIwMCkKKwkJCVdSRUczMihSXzAwMDE1Q19BR1BfQkFTRV8yLCAwKTsKKwl9CisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyMTAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZW91dC5cbiIpOworCS8qIFByb2dyYW0gTUMsIHNob3VsZCBiZSBhIDMyYml0cyBsaW1pdGVkIGFkZHJlc3Mgc3BhY2UgKi8KKwlXUkVHMzIoUl8wMDAxNDhfTUNfRkJfTE9DQVRJT04sCisJCVNfMDAwMTQ4X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJcjEwMF9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCit2b2lkIHIxMDBfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcocmRldiwgMSk7CisJLyogV2UgbmVlZCB0byBmb3JjZSBvbiBzb21lIG9mIHRoZSBibG9jayAqLworCXRtcCA9IFJSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMKTsKKwl0bXAgfD0gU18wMDAwMERfRk9SQ0VfQ1AoMSkgfCBTXzAwMDAwRF9GT1JDRV9WSVAoMSk7CisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjI1MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMjgwKSkKKwkJdG1wIHw9IFNfMDAwMDBEX0ZPUkNFX0RJU1AxKDEpIHwgU18wMDAwMERfRk9SQ0VfRElTUDIoMSk7CisJV1JFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwsIHRtcCk7Cit9CisKK3N0YXRpYyBpbnQgcjEwMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcjEwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayAqLworCXIxMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcjEwMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcjEwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByMTAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcjEwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjEwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByMTAwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByMTAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyMTAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByMTAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCXUzMiB0bXA7CisKKwkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCisJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKKwlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQl0bXAgPSBHXzAwMDE1Q19NQ19GQl9TVEFSVChSUkVHMzIoUl8wMDAxNUNfTkJfVE9NKSk7CisJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSB0bXAgPDwgMTY7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOworCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7CisJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkJfSBlbHNlIHsKKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOworCQl9CisJfQorCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJldHVybiAwOworfQorCitpbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJLyogUmVnaXN0ZXIgZGVidWdmcyBmaWxlIHNwZWNpZmljIHRvIHRoaXMgZ3JvdXAgb2YgYXNpY3MgKi8KKwlyMTAwX2RlYnVnZnMocmRldik7CisJLyogRGlzYWJsZSBWR0EgKi8KKwlyMTAwX3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgY29tYmlvcyBmb3IgUlM0MDAvUlM0ODAgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJciA9IHJhZGVvbl9jb21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJfQorCS8qIFNldCBhc2ljIGVycmF0YSAqLworCXIxMDBfZXJyYXRhKHJkZXYpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXIxMDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHIxMDBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkgeworCQlyID0gcjEwMF9wY2lfZ2FydF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwlyMTAwX3NldF9zYWZlX3JlZ2lzdGVycyhyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcjEwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXIxMDBfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJCXIxMDBfcGNpX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggNzBhODJlZC4uMGRhZjBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKQEAgLTg0LDYgKzg0LDggQEAKIAkJICAgICAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCiAJCSAgICAgICB1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZyk7CiAKKworCiBzdGF0aWMgaW5saW5lIGludCByMTAwX3JlbG9jX3BpdGNoX29mZnNldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkJCQkgIHVuc2lnbmVkIGlkeCwKQEAgLTkzLDkgKzk1LDcgQEAKIAl1MzIgdGlsZV9mbGFncyA9IDA7CiAJdTMyIHRtcDsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKLQotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXUzMiB2YWx1ZTsKIAogCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CiAJaWYgKHIpIHsKQEAgLTEwNCw3ICsxMDQsOCBAQAogCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCXJldHVybiByOwogCX0KLQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MDAzZmZmZmY7CisJdmFsdWUgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJdG1wID0gdmFsdWUgJiAweDAwM2ZmZmZmOwogCXRtcCArPSAoKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCkgPj4gMTApOwogCiAJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCkBAIC0xMTksNiArMTIwLDY0IEBACiAJfQogCiAJdG1wIHw9IHRpbGVfZmxhZ3M7Ci0JcC0+aWItPnB0cltpZHhdID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzZmMwMDAwMCkgfCB0bXA7CisJcC0+aWItPnB0cltpZHhdID0gKHZhbHVlICYgMHgzZmMwMDAwMCkgfCB0bXA7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHIxMDBfcGFja2V0M19sb2FkX3ZicG50cihzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQkJICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJCQkJICAgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBjLCBpOworCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOworCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKKwlpbnQgciA9IDA7CisJdm9sYXRpbGUgdWludDMyX3QgKmliOworCXUzMiBpZHhfdmFsdWU7CisKKwlpYiA9IHAtPmliLT5wdHI7CisJdHJhY2sgPSAoc3RydWN0IHIxMDBfY3NfdHJhY2sgKilwLT50cmFjazsKKwljID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgrKykgJiAweDFGOworCXRyYWNrLT5udW1fYXJyYXlzID0gYzsKKwlmb3IgKGkgPSAwOyBpIDwgKGMgLSAxKTsgaSs9MiwgaWR4Kz0zKSB7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAorCQkJCSAgcGt0LT5vcGNvZGUpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlpYltpZHgrMV0gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisKKwkJdHJhY2stPmFycmF5c1tpICsgMF0uZXNpemUgPSBpZHhfdmFsdWUgPj4gODsKKwkJdHJhY2stPmFycmF5c1tpICsgMF0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOworCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgcGFja2V0MyAlZFxuIiwKKwkJCQkgIHBrdC0+b3Bjb2RlKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWliW2lkeCsyXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPmFycmF5c1tpICsgMV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSA9IGlkeF92YWx1ZSA+PiAyNDsKKwkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgJj0gMHg3RjsKKwl9CisJaWYgKGMgJiAxKSB7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAorCQkJCQkgIHBrdC0+b3Bjb2RlKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJaWJbaWR4KzFdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyAxKSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWR4X3ZhbHVlID4+IDg7CisJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7CisJfQorCXJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oCmluZGV4IGM0YjI1N2UuLmRmMjlhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmgKQEAgLTM4MSw2ICszODEsMjQgQEAKICNkZWZpbmUgICBTXzAwMDA1NF9WQ1JUQ19JRFhfTUFTVEVSKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDI0KQogI2RlZmluZSAgIEdfMDAwMDU0X1ZDUlRDX0lEWF9NQVNURVIoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4N0YpCiAjZGVmaW5lICAgQ18wMDAwNTRfVkNSVENfSURYX01BU1RFUiAgICAgICAgICAgICAgICAgICAgMHg4MEZGRkZGRgorI2RlZmluZSBSXzAwMDE0OF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0OAorI2RlZmluZSAgIFNfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDE0OF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxNDhfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxNENfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNEMKKyNkZWZpbmUgICBTXzAwMDE0Q19NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE0Q19NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0Q19NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNENfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTRDX01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0Q19NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMTcwX0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTcwCisjZGVmaW5lICAgU18wMDAxNzBfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTcwX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDE3MF9BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIFJfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgIDB4MDAwMjNDCiAjZGVmaW5lICAgU18wMDAyM0NfRElTUExBWV9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQogI2RlZmluZSAgIEdfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKQEAgLTQwMywyNSArNDIxLDI1IEBACiAjZGVmaW5lICAgU18wMDAzNjBfQ1VSMl9MT0NLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQogI2RlZmluZSAgIEdfMDAwMzYwX0NVUjJfTE9DSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDM2MF9DVVIyX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCi0jZGVmaW5lIFJfMDAwM0MwX0dFTk1PX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0MwCi0jZGVmaW5lICAgU18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCi0jZGVmaW5lICAgR18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQotI2RlZmluZSAgIFNfMDAwM0MwX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQotI2RlZmluZSAgIEdfMDAwM0MwX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQotI2RlZmluZSAgIENfMDAwM0MwX1ZHQV9SQU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKLSNkZWZpbmUgICBTXzAwMDNDMF9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMikKLSNkZWZpbmUgICBHXzAwMDNDMF9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MykKLSNkZWZpbmUgICBDXzAwMDNDMF9WR0FfQ0tTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYzCi0jZGVmaW5lICAgU18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCi0jZGVmaW5lICAgR18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgotI2RlZmluZSAgIFNfMDAwM0MwX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQotI2RlZmluZSAgIEdfMDAwM0MwX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQotI2RlZmluZSAgIENfMDAwM0MwX1ZHQV9IU1lOQ19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKLSNkZWZpbmUgICBTXzAwMDNDMF9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKLSNkZWZpbmUgICBHXzAwMDNDMF9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDNDMF9WR0FfVlNZTkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lIFJfMDAwM0MyX0dFTk1PX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0MwCisjZGVmaW5lICAgU18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IgICAgICAgICAgICAgICAgMHhGRQorI2RlZmluZSAgIFNfMDAwM0MyX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwM0MyX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MyX1ZHQV9SQU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkQKKyNkZWZpbmUgICBTXzAwMDNDMl9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMikKKyNkZWZpbmUgICBHXzAwMDNDMl9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDNDMl9WR0FfQ0tTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweEYzCisjZGVmaW5lICAgU18wMDAzQzJfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAzQzJfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzJfT0REX0VWRU5fTURfUEdTRUwgICAgICAgICAgICAgICAgICAgMHhERgorI2RlZmluZSAgIFNfMDAwM0MyX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwM0MyX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MyX1ZHQV9IU1lOQ19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4QkYKKyNkZWZpbmUgICBTXzAwMDNDMl9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDNDMl9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNDMl9WR0FfVlNZTkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAweDdGCiAjZGVmaW5lIFJfMDAwM0Y4X0NSVEMyX0dFTl9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0Y4CiAjZGVmaW5lICAgU18wMDAzRjhfQ1JUQzJfREJMX1NDQU5fRU4oeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCiAjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfREJMX1NDQU5fRU4oeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCkBAIC01NDUsNiArNTYzLDQ2IEBACiAjZGVmaW5lICAgU18wMDA3NzRfU0NSQVRDSF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRkZGRkYpIDw8IDUpCiAjZGVmaW5lICAgR18wMDA3NzRfU0NSQVRDSF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDdGRkZGRkYpCiAjZGVmaW5lICAgQ18wMDA3NzRfU0NSQVRDSF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCiAjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCiAjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQogI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKQEAgLTYwNCw0ICs2NjIsNTMgQEAKICNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgogCisKKyNkZWZpbmUgUl8wMDAwMERfU0NMS19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQKKyNkZWZpbmUgICBTXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDAwRF9TQ0xLX1NSQ19TRUwgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY4CisjZGVmaW5lICAgU18wMDAwMERfVENMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfVENMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfVENMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjhGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0NQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0hEUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSERQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0RJU1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9ESVNQKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRElTUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSURDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1ZJUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVklQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RBTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVEFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RETSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVERNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwppbmRleCA1NjhjNzRiLi5lYjc0MGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwpAQCAtOTYsNyArOTYsNiBAQAogCQkgICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJICAgICAgIHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CkBAIC0xMDUsMTEgKzEwNCwxMSBAQAogCWludCBpOwogCWludCBmYWNlOwogCXUzMiB0aWxlX2ZsYWdzID0gMDsKKwl1MzIgaWR4X3ZhbHVlOwogCiAJaWIgPSBwLT5pYi0+cHRyOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7Ci0KKwlpZHhfdmFsdWUgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgogCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CkBAIC0xMzcsOCArMTM2LDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT56Yi5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUk9GRlNFVDoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTE0OSw4ICsxNDgsOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPmNiWzBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMDoKIAljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMToKQEAgLTE2Niw3ICsxNjUsNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8wOgpAQCAtMjA4LDEyICsyMDcsMTIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlIC0gMV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgotCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMjI5LDE3ICsyMjgsMTcgQEAKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9DT0xPUl9NSUNST1RJTEVfRU5BQkxFOwogCi0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgfigweDcgPDwgMTYpOworCQl0bXAgPSBpZHhfdmFsdWUgJiB+KDB4NyA8PCAxNik7CiAJCXRtcCB8PSB0aWxlX2ZsYWdzOwogCQlpYltpZHhdID0gdG1wOwogCi0JCXRyYWNrLT5jYlswXS5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKKwkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9ERVBUSFBJVENIOgotCQl0cmFjay0+emIucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9ERVBUSFBJVENIX01BU0s7CisJCXRyYWNrLT56Yi5waXRjaCA9IGlkeF92YWx1ZSAmIFJBREVPTl9ERVBUSFBJVENIX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ05UTDoKLQkJc3dpdGNoICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSB7CiAJCWNhc2UgNzoKIAkJY2FzZSA4OgogCQljYXNlIDk6CkBAIC0yNTcsMTggKzI1NiwxOCBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3IgYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCi0JCQkJICAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSk7CisJCQkJICAoKGlkeF92YWx1ZSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIWFlfT0ZGU0VUX0VOQUJMRSkgeworCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIWFlfT0ZGU0VUX0VOQUJMRSkgewogCQkJRFJNX0VSUk9SKCJObyBzdXBwb3J0IGZvciBkZXB0aCB4eSBvZmZzZXQgaW4ga21zXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJdHJhY2stPnpfZW5hYmxlZCA9ICEhKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1pfRU5BQkxFKTsKKwkJdHJhY2stPnpfZW5hYmxlZCA9ICEhKGlkeF92YWx1ZSAmIFJBREVPTl9aX0VOQUJMRSk7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfWlNURU5DSUxDTlRMOgotCQlzd2l0Y2ggKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHhmKSB7CisJCXN3aXRjaCAoaWR4X3ZhbHVlICYgMHhmKSB7CiAJCWNhc2UgMDoKIAkJCXRyYWNrLT56Yi5jcHAgPSAyOwogCQkJYnJlYWs7CkBAIC0yOTIsMjcgKzI5MSwyNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ05UTDoKIAkJewotCQkJdWludDMyX3QgdGVtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQ7CisJCQl1aW50MzJfdCB0ZW1wID0gaWR4X3ZhbHVlID4+IDQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCiAJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgMHgyMTBjOgogCQkvKiBWQVBfVkZfTUFYX1ZUWF9JTkRYICovCi0JCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgwMEZGRkZGRlVMOworCQl0cmFjay0+bWF4X2luZHggPSBpZHhfdmFsdWUgJiAweDAwRkZGRkZGVUw7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9TRV9WVFhfRk1UXzA6Ci0JCXRyYWNrLT52dHhfc2l6ZSA9IHIyMDBfZ2V0X3Z0eF9zaXplXzAoaWJfY2h1bmstPmtkYXRhW2lkeF0pOworCQl0cmFjay0+dnR4X3NpemUgPSByMjAwX2dldF92dHhfc2l6ZV8wKGlkeF92YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9TRV9WVFhfRk1UXzE6Ci0JCXRyYWNrLT52dHhfc2l6ZSArPSByMjAwX2dldF92dHhfc2l6ZV8xKGliX2NodW5rLT5rZGF0YVtpZHhdKTsKKwkJdHJhY2stPnZ0eF9zaXplICs9IHIyMDBfZ2V0X3Z0eF9zaXplXzEoaWR4X3ZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYU0laRV8wOgogCWNhc2UgUjIwMF9QUF9UWFNJWkVfMToKQEAgLTMyMSw4ICszMjAsOCBAQAogCWNhc2UgUjIwMF9QUF9UWFNJWkVfNDoKIAljYXNlIFIyMDBfUFBfVFhTSVpFXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWFNJWkVfMCkgLyAzMjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzA6CiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfMToKQEAgLTMzMSw3ICszMzAsNyBAQAogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzQ6CiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYUElUQ0hfMCkgLyAzMjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAzMjsKKwkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWR4X3ZhbHVlICsgMzI7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8wOgogCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8xOgpAQCAtMzQwLDEyICszMzksMTIgQEAKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfNDoKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYRklMVEVSXzApIC8gMzI7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFIyMDBfTUFYX01JUF9MRVZFTF9NQVNLKQorCQl0cmFjay0+dGV4dHVyZXNbaV0ubnVtX2xldmVscyA9ICgoaWR4X3ZhbHVlICYgUjIwMF9NQVhfTUlQX0xFVkVMX01BU0spCiAJCQkJCQkgPj4gUjIwMF9NQVhfTUlQX0xFVkVMX1NISUZUKTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIzKSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI3KSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKIAkJYnJlYWs7CkBAIC0zNjQsOCArMzYzLDggQEAKIAljYXNlIFIyMDBfUFBfVFhGT1JNQVRfWF80OgogCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF9YXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWEZPUk1BVF9YXzApIC8gMzI7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDc7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweDM7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gaWR4X3ZhbHVlICYgMHg3OworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDE2KSAmIDB4MzsKIAkJLyogMkQsIDNELCBDVUJFICovCiAJCXN3aXRjaCAodG1wKSB7CiAJCWNhc2UgMDoKQEAgLTM4OSwxNCArMzg4LDE0IEBACiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzQ6CiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWEZPUk1BVF8wKSAvIDMyOwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSMjAwX1RYRk9STUFUX05PTl9QT1dFUjIpIHsKKwkJaWYgKGlkeF92YWx1ZSAmIFIyMDBfVFhGT1JNQVRfTk9OX1BPV0VSMikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDE7CiAJCX0gZWxzZSB7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gMDsKLQkJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fVFhGT1JNQVRfV0lEVEhfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX1dJRFRIX01BU0spOwotCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfTUFTSyk7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxIDw8ICgoaWR4X3ZhbHVlID4+IFJBREVPTl9UWEZPUk1BVF9XSURUSF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfV0lEVEhfTUFTSyk7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gMSA8PCAoKGlkeF92YWx1ZSA+PiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfTUFTSyk7CiAJCX0KLQkJc3dpdGNoICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVFhGT1JNQVRfRk9STUFUX01BU0spKSB7CisJCXN3aXRjaCAoKGlkeF92YWx1ZSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKIAkJY2FzZSBSMjAwX1RYRk9STUFUX0k4OgogCQljYXNlIFIyMDBfVFhGT1JNQVRfUkdCMzMyOgogCQljYXNlIFIyMDBfVFhGT1JNQVRfWTg6CkBAIC00MjQsOCArNDIzLDggQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweGYpOwotCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzA6CiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzE6CkBAIC00MzMsNyArNDMyLDcgQEAKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMzoKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfNDoKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfNToKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRtcCA9IGlkeF92YWx1ZTsKIAkJaSA9IChyZWcgLSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzApIC8gMzI7CiAJCWZvciAoZmFjZSA9IDA7IGZhY2UgPCA0OyBmYWNlKyspIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0ud2lkdGggPSAxIDw8ICgodG1wID4+IChmYWNlICogOCkpICYgMHhmKTsKQEAgLTQ0OCw5ICs0NDcsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcjIwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMjAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlyZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibSA9IHIyMDBfcmVnX3NhZmVfYm07CiAJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjIwMF9yZWdfc2FmZV9ibSk7Ci0JcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCmluZGV4IGJiMTUxZWMuLjJmNDNlZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCkBAIC0zMyw0MyArMzMsMTYgQEAKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCiAjaW5jbHVkZSAicjEwMF90cmFjay5oIgogI2luY2x1ZGUgInIzMDBkLmgiCi0KKyNpbmNsdWRlICJydjM1MGQuaCIKICNpbmNsdWRlICJyMzAwX3JlZ19zYWZlLmgiCiAKLS8qIHIzMDAscjM1MCxydjM1MCxydjM3MCxydjM4MCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfY3BfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfcmIyZF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwotaW50IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19zZXR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2NzX3BhY2tldF9wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAotCQkJIHVuc2lnbmVkIGlkeCk7Ci1pbnQgcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnApOwotaW50IHIxMDBfY3NfcGFyc2VfcGFja2V0MChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCSAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKLQkJCSAgY29uc3QgdW5zaWduZWQgKmF1dGgsIHVuc2lnbmVkIG4sCi0JCQkgIHJhZGVvbl9wYWNrZXQwX2NoZWNrX3QgY2hlY2spOwotaW50IHIxMDBfY3NfdHJhY2tfY2hlY2tfcGt0M19pbmR4X2J1ZmZlcihzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCQkJIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCi0JCQkJCSBzdHJ1Y3QgcmFkZW9uX29iamVjdCAqcm9iaik7Ci0KLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiByMzAwLHIzNTAscnYzNTAscnYzNzAscnYzODAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCi12b2lkIHIzMDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQorLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwICovCiAKIC8qCiAgKiBydjM3MCxydjM4MCBQQ0lFIEdBUlQKICAqLworc3RhdGljIGludCBydjM3MF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdG1wOwpAQCAtMTQwLDcgKzExMyw3IEBACiAJdG1wID0gUkFERU9OX1BDSUVfVFhfR0FSVF9VTk1BUFBFRF9BQ0NFU1NfRElTQ0FSRDsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsIHRtcCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9TVEFSVF9MTywgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDQwOTY7CisJdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9MTywgdG1wKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX1NUQVJUX0hJLCAwKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9ISSwgMCk7CkBAIC0xODIsNTkgKzE1NSw2IEBACiAJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAotLyoKLSAqIE1DCi0gKi8KLWludCByMzAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JaW50IHI7Ci0KLQlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7Ci0JfQotCi0JcjMwMF9ncHVfaW5pdChyZGV2KTsKLQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKLQkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JfQotCi0JLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKLQkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl9Ci0JfQotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JLyogUHJvZ3JhbSBHUFUgbWVtb3J5IHNwYWNlICovCi0JcjEwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHIzMDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JcjEwMF9tY19zZXR1cChyZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByMzAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci19Ci0KLQotLyoKLSAqIEZlbmNlIGVtaXNzaW9uCi0gKi8KIHZvaWQgcjMwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewpAQCAtMjYwLDEwICsxODAsNiBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9TV19JTlRfRklSRSk7CiB9CiAKLQotLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCi0gKi8KIGludCByMzAwX2NvcHlfZG1hKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgIHVpbnQ2NF90IHNyY19vZmZzZXQsCiAJCSAgdWludDY0X3QgZHN0X29mZnNldCwKQEAgLTU4MiwxMSArNDk4LDYgQEAKIAlyMTAwX3ZyYW1faW5pdF9zaXplcyhyZGV2KTsKIH0KIAotCi0vKgotICogUENJRSBMYW5lcwotICovCi0KIHZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcykKIHsKIAl1aW50MzJfdCBsaW5rX3dpZHRoX2NudGwsIG1hc2s7CkBAIC02NDYsMTAgKzU1Nyw2IEBACiAKIH0KIAotCi0vKgotICogRGVidWdmcyBpbmZvCi0gKi8KICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHN0YXRpYyBpbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiB7CkBAIC02ODAsNyArNTg3LDcgQEAKIH07CiAjZW5kaWYKIAotaW50IHJ2MzcwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogCXJldHVybiByYWRlb25fZGVidWdmc19hZGRfZmlsZXMocmRldiwgcnYzNzBfcGNpZV9nYXJ0X2luZm9fbGlzdCwgMSk7CkBAIC02ODksMjUgKzU5NiwyMiBAQAogI2VuZGlmCiB9CiAKLQotLyoKLSAqIENTIGZ1bmN0aW9ucwotICovCiBzdGF0aWMgaW50IHIzMDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJdW5zaWduZWQgaWR4LCB1bnNpZ25lZCByZWcpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1aW50MzJfdCB0bXAsIHRpbGVfZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGk7CiAJaW50IHI7CisJdTMyIGlkeF92YWx1ZTsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOworCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwogCXN3aXRjaChyZWcpIHsKIAljYXNlIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQ6CiAJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKQEAgLTczOCw4ICs2NDIsOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPmNiW2ldLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPmNiW2ldLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPmNiW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIzMDBfWkJfREVQVEhPRkZTRVQ6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC03NTAsOCArNjU0LDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT56Yi5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSMzAwX1RYX09GRlNFVF8wOgogCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCs0OgpAQCAtNzc3LDMyICs2ODEsMzIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCWJyZWFrOwogCS8qIFRyYWNrZWQgcmVnaXN0ZXJzICovCiAJY2FzZSAweDIwODQ6CiAJCS8qIFZBUF9WRl9DTlRMICovCi0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgMHgyMEI0OgogCQkvKiBWQVBfVlRYX1NJWkUgKi8KLQkJdHJhY2stPnZ0eF9zaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDdGOworCQl0cmFjay0+dnR4X3NpemUgPSBpZHhfdmFsdWUgJiAweDdGOwogCQlicmVhazsKIAljYXNlIDB4MjEzNDoKIAkJLyogVkFQX1ZGX01BWF9WVFhfSU5EWCAqLwotCQl0cmFjay0+bWF4X2luZHggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MDBGRkZGRkZVTDsKKwkJdHJhY2stPm1heF9pbmR4ID0gaWR4X3ZhbHVlICYgMHgwMEZGRkZGRlVMOwogCQlicmVhazsKIAljYXNlIDB4NDNFNDoKIAkJLyogU0NfU0NJU1NPUjEgKi8KLQkJdHJhY2stPm1heHkgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDEzKSAmIDB4MUZGRikgKyAxOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDEzKSAmIDB4MUZGRikgKyAxOwogCQlpZiAocC0+cmRldi0+ZmFtaWx5IDwgQ0hJUF9SVjUxNSkgewogCQkJdHJhY2stPm1heHkgLT0gMTQ0MDsKIAkJfQogCQlicmVhazsKIAljYXNlIDB4NEUwMDoKIAkJLyogUkIzRF9DQ1RMICovCi0JCXRyYWNrLT5udW1fY2IgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDUpICYgMHgzKSArIDE7CisJCXRyYWNrLT5udW1fY2IgPSAoKGlkeF92YWx1ZSA+PiA1KSAmIDB4MykgKyAxOwogCQlicmVhazsKIAljYXNlIDB4NEUzODoKIAljYXNlIDB4NEUzQzoKQEAgLTgyNSwxMyArNzI5LDEzIEBACiAJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01JQ1JPKQogCQkJdGlsZV9mbGFncyB8PSBSMzAwX0NPTE9SX01JQ1JPVElMRV9FTkFCTEU7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKIAkJaSA9IChyZWcgLSAweDRFMzgpID4+IDI7Ci0JCXRyYWNrLT5jYltpXS5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzRkZFOwotCQlzd2l0Y2ggKCgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjEpICYgMHhGKSkgeworCQl0cmFjay0+Y2JbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgJiAweDNGRkU7CisJCXN3aXRjaCAoKChpZHhfdmFsdWUgPj4gMjEpICYgMHhGKSkgewogCQljYXNlIDk6CiAJCWNhc2UgMTE6CiAJCWNhc2UgMTI6CkBAIC04NTQsMTMgKzc1OCwxMyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3IgYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCi0JCQkJICAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIxKSAmIDB4RikpOworCQkJCSAgKChpZHhfdmFsdWUgPj4gMjEpICYgMHhGKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKIAljYXNlIDB4NEYwMDoKIAkJLyogWkJfQ05UTCAqLwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAyKSB7CisJCWlmIChpZHhfdmFsdWUgJiAyKSB7CiAJCQl0cmFjay0+el9lbmFibGVkID0gdHJ1ZTsKIAkJfSBlbHNlIHsKIAkJCXRyYWNrLT56X2VuYWJsZWQgPSBmYWxzZTsKQEAgLTg2OCw3ICs3NzIsNyBAQAogCQlicmVhazsKIAljYXNlIDB4NEYxMDoKIAkJLyogWkJfRk9STUFUICovCi0JCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHhGKSkgeworCQlzd2l0Y2ggKChpZHhfdmFsdWUgJiAweEYpKSB7CiAJCWNhc2UgMDoKIAkJY2FzZSAxOgogCQkJdHJhY2stPnpiLmNwcCA9IDI7CkBAIC04NzgsNyArNzgyLDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHogYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCi0JCQkJICAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweEYpKTsKKwkJCQkgIChpZHhfdmFsdWUgJiAweEYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwpAQCAtODk3LDE3ICs4MDEsMTcgQEAKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfREVQVEhNSUNST1RJTEVfVElMRUQ7OwogCi0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgfigweDcgPDwgMTYpOworCQl0bXAgPSBpZHhfdmFsdWUgJiB+KDB4NyA8PCAxNik7CiAJCXRtcCB8PSB0aWxlX2ZsYWdzOwogCQlpYltpZHhdID0gdG1wOwogCi0JCXRyYWNrLT56Yi5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzRkZDOworCQl0cmFjay0+emIucGl0Y2ggPSBpZHhfdmFsdWUgJiAweDNGRkM7CiAJCWJyZWFrOwogCWNhc2UgMHg0MTA0OgogCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQkJYm9vbCBlbmFibGVkOwogCi0JCQllbmFibGVkID0gISEoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAoMSA8PCBpKSk7CisJCQllbmFibGVkID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgaSkpOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSBlbmFibGVkOwogCQl9CiAJCWJyZWFrOwpAQCAtOTI5LDkgKzgzMyw5IEBACiAJY2FzZSAweDQ0RkM6CiAJCS8qIFRYX0ZPUk1BVDFfWzAtMTVdICovCiAJCWkgPSAocmVnIC0gMHg0NEMwKSA+PiAyOwotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjUpICYgMHgzOworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDI1KSAmIDB4MzsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnRleF9jb29yZF90eXBlID0gdG1wOwotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MUYpKSB7CisJCXN3aXRjaCAoKGlkeF92YWx1ZSAmIDB4MUYpKSB7CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWDg6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWTRYNDoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aM1kzWDI6CkBAIC05NzEsNyArODc1LDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHRleHR1cmUgZm9ybWF0ICV1XG4iLAotCQkJCSAgKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgxRikpOworCQkJCSAgKGlkeF92YWx1ZSAmIDB4MUYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KQEAgLTk5NCwxMSArODk4LDExIEBACiAJY2FzZSAweDQ0M0M6CiAJCS8qIFRYX0ZJTFRFUjBfWzAtMTVdICovCiAJCWkgPSAocmVnIC0gMHg0NDAwKSA+PiAyOwotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4NzsKKwkJdG1wID0gaWR4X3ZhbHVlICYgMHg3OwogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDQgfHwgdG1wID09IDYpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKIAkJfQotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMykgJiAweDc7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNCB8fCB0bXAgPT0gNikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IGZhbHNlOwogCQl9CkBAIC0xMDIxLDEyICs5MjUsMTIgQEAKIAljYXNlIDB4NDUzQzoKIAkJLyogVFhfRk9STUFUMl9bMC0xNV0gKi8KIAkJaSA9IChyZWcgLSAweDQ1MDApID4+IDI7Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzRkZGOworCQl0bXAgPSBpZHhfdmFsdWUgJiAweDNGRkY7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IHRtcCArIDE7CiAJCWlmIChwLT5yZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkgewotCQkJdG1wID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNSkgJiAxKSA8PCAxMTsKKwkJCXRtcCA9ICgoaWR4X3ZhbHVlID4+IDE1KSAmIDEpIDw8IDExOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoXzExID0gdG1wOwotCQkJdG1wID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAxKSA8PCAxMTsKKwkJCXRtcCA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDEpIDw8IDExOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodF8xMSA9IHRtcDsKIAkJfQogCQlicmVhazsKQEAgLTEwNDgsMTUgKzk1MiwxNSBAQAogCWNhc2UgMHg0NEJDOgogCQkvKiBUWF9GT1JNQVQwX1swLTE1XSAqLwogCQlpID0gKHJlZyAtIDB4NDQ4MCkgPj4gMjsKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDdGRjsKKwkJdG1wID0gaWR4X3ZhbHVlICYgMHg3RkY7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IHRtcCArIDE7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxMSkgJiAweDdGRjsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAxMSkgJiAweDdGRjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IHRtcCArIDE7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNikgJiAweEY7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjYpICYgMHhGOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ubnVtX2xldmVscyA9IHRtcDsKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAoMSA8PCAzMSk7CisJCXRtcCA9IGlkeF92YWx1ZSAmICgxIDw8IDMxKTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9ICEhdG1wOwotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjIpICYgMHhGOworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDIyKSAmIDB4RjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnR4ZGVwdGggPSB0bXA7CiAJCWJyZWFrOwogCWNhc2UgUjMwMF9aQl9aUEFTU19BRERSOgpAQCAtMTA2Nyw3ICs5NzEsNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSAweDRiZTg6CiAJCS8qIHZhbGlkIHJlZ2lzdGVyIG9ubHkgb24gUlY1MzAgKi8KQEAgLTEwODUsNjAgKzk4OSwyMCBAQAogc3RhdGljIGludCByMzAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwotCiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1bnNpZ25lZCBpZHg7Ci0JdW5zaWduZWQgaSwgYzsKIAlpbnQgcjsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeCArIDE7CiAJdHJhY2sgPSAoc3RydWN0IHIxMDBfY3NfdHJhY2sgKilwLT50cmFjazsKIAlzd2l0Y2gocGt0LT5vcGNvZGUpIHsKIAljYXNlIFBBQ0tFVDNfM0RfTE9BRF9WQlBOVFI6Ci0JCWMgPSBpYl9jaHVuay0+a2RhdGFbaWR4KytdICYgMHgxRjsKLQkJdHJhY2stPm51bV9hcnJheXMgPSBjOwotCQlmb3IgKGkgPSAwOyBpIDwgKGMgLSAxKTsgaSs9MiwgaWR4Kz0zKSB7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDg7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOwotCQkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKLQkJCWlmIChyKSB7Ci0JCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgcGFja2V0MyAlZFxuIiwKLQkJCQkJICBwa3QtPm9wY29kZSk7Ci0JCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwotCQkJCXJldHVybiByOwotCQkJfQotCQkJaWJbaWR4KzJdID0gaWJfY2h1bmstPmtkYXRhW2lkeCsyXSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0ucm9iaiA9IHJlbG9jLT5yb2JqOwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNDsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDFdLmVzaXplICY9IDB4N0Y7Ci0JCX0KLQkJaWYgKGMgJiAxKSB7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDg7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOwotCQl9CisJCXIgPSByMTAwX3BhY2tldDNfbG9hZF92YnBudHIocCwgcGt0LCBpZHgpOworCQlpZiAocikKKwkJCXJldHVybiByOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfSU5EWF9CVUZGRVI6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0xMTQ3LDcgKzEwMTEsNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4KzFdID0gaWJfY2h1bmstPmtkYXRhW2lkeCsxXSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHgrMV0gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIocCwgcGt0LCByZWxvYy0+cm9iaik7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKQEAgLTExNTgsMTEgKzEwMjIsMTEgQEAKIAkJLyogTnVtYmVyIG9mIGR3b3JkcyBpcyB2dHhfc2l6ZSAqIChudW1fdmVydGljZXMgLSAxKQogCQkgKiBQUklNX1dBTEsgbXVzdCBiZSBlcXVhbCB0byAzIHZlcnRleCBkYXRhIGluIGVtYmVkZGVkCiAJCSAqIGluIGNtZCBzdHJlYW0gKi8KLQkJaWYgKCgoaWJfY2h1bmstPmtkYXRhW2lkeCsxXSA+PiA0KSAmIDB4MykgIT0gMykgeworCQlpZiAoKChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpID4+IDQpICYgMHgzKSAhPSAzKSB7CiAJCQlEUk1fRVJST1IoIlBSSU1fV0FMSyBtdXN0IGJlIDMgZm9yIElNTUQgZHJhd1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50IC0gMTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewpAQCAtMTE3MywxMSArMTAzNywxMSBAQAogCQkvKiBOdW1iZXIgb2YgZHdvcmRzIGlzIHZ0eF9zaXplICogKG51bV92ZXJ0aWNlcyAtIDEpCiAJCSAqIFBSSU1fV0FMSyBtdXN0IGJlIGVxdWFsIHRvIDMgdmVydGV4IGRhdGEgaW4gZW1iZWRkZWQKIAkJICogaW4gY21kIHN0cmVhbSAqLwotCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiA0KSAmIDB4MykgIT0gMykgeworCQlpZiAoKChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCkgPj4gNCkgJiAweDMpICE9IDMpIHsKIAkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQ7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKQEAgLTExODUsMjggKzEwNDksMjggQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19WQlVGOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX1ZCVUZfMjoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewogCQkJcmV0dXJuIHI7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWDoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTkRYXzI6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwpAQCAtMTI2NSwxMiArMTEyOSw2IEBACiAJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjMwMF9yZWdfc2FmZV9ibSk7CiB9CiAKLWludCByMzAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JcjMwMF9zZXRfcmVnX3NhZmUocmRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHZvaWQgcjMwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXN0cnVjdCByMTAwX21jX3NhdmUgc2F2ZTsKQEAgLTEzMDQsMyArMTE2MiwxOTggQEAKIAkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CiAJcjEwMF9tY19yZXN1bWUocmRldiwgJnNhdmUpOwogfQorCit2b2lkIHIzMDBfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcocmRldiwgMSk7CisJLyogV2UgbmVlZCB0byBmb3JjZSBvbiBzb21lIG9mIHRoZSBibG9jayAqLworCXRtcCA9IFJSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMKTsKKwl0bXAgfD0gU18wMDAwMERfRk9SQ0VfQ1AoMSkgfCBTXzAwMDAwRF9GT1JDRV9WSVAoMSk7CisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjM1MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMzgwKSkKKwkJdG1wIHw9IFNfMDAwMDBEX0ZPUkNFX1ZBUCgxKTsKKwlXUkVHMzJfUExMKFJfMDAwMDBEX1NDTEtfQ05UTCwgdG1wKTsKK30KKworc3RhdGljIGludCByMzAwX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyMzAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyMzAwX2dwdV9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCisJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKKwkJciA9IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcjEwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByMzAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXIzMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogcG9zdCAqLworCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXIzMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwlyZXR1cm4gcjMwMF9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcjMwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcjEwMF9pcnFfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHIzMDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMzAwX3N1c3BlbmQocmRldik7CisJcjEwMF9jcF9maW5pKHJkZXYpOworCXIxMDBfd2JfZmluaShyZGV2KTsKKwlyMTAwX2liX2ZpbmkocmRldik7CisJcmFkZW9uX2dlbV9maW5pKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcjMwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJLyogRGlzYWJsZSBWR0EgKi8KKwlyMTAwX3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgY29tYmlvcyBmb3IgUlM0MDAvUlM0ODAgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJciA9IHJhZGVvbl9jb21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJfQorCS8qIFNldCBhc2ljIGVycmF0YSAqLworCXIzMDBfZXJyYXRhKHJkZXYpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXIzMDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKKwkJciA9IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKSB7CisJCXIgPSByMTAwX3BjaV9nYXJ0X2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCXIzMDBfc2V0X3JlZ19zYWZlKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByMzAwX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcjMwMF9zdXNwZW5kKHJkZXYpOworCQlyMTAwX2NwX2ZpbmkocmRldik7CisJCXIxMDBfd2JfZmluaShyZGV2KTsKKwkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQkJcjEwMF9wY2lfZ2FydF9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oCmluZGV4IGQ0ZmEzZWIuLjRjNzMxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmgKQEAgLTk2LDYgKzk2LDIxMSBAQAogI2RlZmluZSAgIFNfMDAwMTcwX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKICNkZWZpbmUgICBHXzAwMDE3MF9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCiAjZGVmaW5lICAgQ18wMDAxNzBfQUdQX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RJTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dBX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NCQTJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKIAogCisjZGVmaW5lIFJfMDAwMDBEX1NDTEtfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBECisjZGVmaW5lICAgU18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfU0NMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgIFNfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AyICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0hEUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AxICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0lEQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZJUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVEFNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVERNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RETSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFZfU0NMSyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RWX1NDTEsgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1VCUElDKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVQlBJQyAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfT1YwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX09WMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCmluZGV4IDQ5YTJmZGMuLjFjZWZkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCkBAIC0xNTUsNiArMTU1LDkgQEAKIHN0YXRpYyB2b2lkIHI0MjBfY2xvY2tfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiBzY2xrX2NudGw7CisKKwlpZiAocmFkZW9uX2R5bmNsa3MgIT0gLTEgJiYgcmFkZW9uX2R5bmNsa3MpCisJCXJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcocmRldiwgMSk7CiAJc2Nsa19jbnRsID0gUlJFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwpOwogCXNjbGtfY250bCB8PSBTXzAwMDAwRF9GT1JDRV9DUCgxKSB8IFNfMDAwMDBEX0ZPUkNFX1ZJUCgxKTsKIAlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjQyMCkKQEAgLTE2Nyw2ICsxNzAsOCBAQAogCWludCByOwogCiAJcjMwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayAqLworCXI0MjBfY2xvY2tfcmVzdW1lKHJkZXYpOwogCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCiAJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKQEAgLTI2Nyw3ICsyNzIsNiBAQAogewogCWludCByOwogCi0JcmRldi0+bmV3X2luaXRfcGF0aCA9IHRydWU7CiAJLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwpAQCAtMzA3LDYgKzMxMSw4IEBACiAJfQogCS8qIEluaXRpYWxpemUgY2xvY2tzICovCiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOwogCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwogCXIzMDBfdnJhbV9pbmZvKHJkZXYpOwogCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmgKaW5kZXggYTQ4YTdkYi4uZmM3OGQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMGQuaApAQCAtMjEyLDkgKzIxMiw5IEBACiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9FMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCi0jZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQotI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9TRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVkFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1ZBUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9WQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9JRENUICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCkBAIC0yMjQsMjQgKzIyNCwyNCBAQAogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUFggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1VTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9VUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RWX1NDTEsoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFZfU0NMSyAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVQlBJQyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1VCUElDICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX09WMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfT1YwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCmluZGV4IGUxZDVlMDMuLjdiYWE3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKQEAgLTM4NCw5ICszODQsMTYgQEAKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxR1JQSF9USUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMCkKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxR1JQSF9NQUNST19BRERSRVNTX01PREUgICAgICAgICAgICAgICAgICAoMSA8PCAyMSkKIAorLyogVGhlIFI3eHggKl9ISUdIIHN1cmZhY2UgcmVncyBhcmUgYmFja3dhcmRzOyB0aGUgRDEgcmVncyBhcmUgaW4gdGhlIEQyCisgKiBibG9jayBhbmQgdmljZSB2ZXJzYS4gIFRoaXMgYXBwbGllcyB0byBHUlBILCBDVVIsIGV0Yy4KKyAqLwogI2RlZmluZSBBVklWT19EMUdSUEhfTFVUX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEwOAogI2RlZmluZSBBVklWT19EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4NjExMAorI2RlZmluZSBSNzAwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAgIDB4NjkxNAorI2RlZmluZSBSNzAwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAgIDB4NjExNAogI2RlZmluZSBBVklWT19EMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4NjExOAorI2RlZmluZSBSNzAwX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgIDB4NjkxYworI2RlZmluZSBSNzAwX0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgIDB4NjExYwogI2RlZmluZSBBVklWT19EMUdSUEhfUElUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEyMAogI2RlZmluZSBBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEyNAogI2RlZmluZSBBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEyOApAQCAtNDA0LDYgKzQxMSw4IEBACiAjICAgICAgIGRlZmluZSBBVklWT19EMUNVUlNPUl9NT0RFX01BU0sgICAgICAgICAoMyA8PCA4KQogIyAgICAgICBkZWZpbmUgQVZJVk9fRDFDVVJTT1JfTU9ERV8yNEJQUCAgICAgICAgMgogI2RlZmluZSBBVklWT19EMUNVUl9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgICAgMHg2NDA4CisjZGVmaW5lIFI3MDBfRDFDVVJfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAweDZjMGMKKyNkZWZpbmUgUjcwMF9EMkNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCAgICAgICAgIDB4NjQwYwogI2RlZmluZSBBVklWT19EMUNVUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgMHg2NDEwCiAjZGVmaW5lIEFWSVZPX0QxQ1VSX1BPU0lUSU9OICAgICAgICAgICAgICAgICAgICAweDY0MTQKICNkZWZpbmUgQVZJVk9fRDFDVVJfSE9UX1NQT1QgICAgICAgICAgICAgICAgICAgIDB4NjQxOApAQCAtNDQ1LDYgKzQ1NCw4IEBACiAjZGVmaW5lIEFWSVZPX0QxTU9ERV9WQkxBTktfU1RBVFVTICAgICAgICAgICAgICAweDY1MzQKICMgICAgICAgZGVmaW5lIEFWSVZPX1ZCTEFOS19BQ0sgICAgICAgICAgICAgICAgICgxIDw8IDQpCiAjZGVmaW5lIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQgICAgICAgICAgICAweDY1MzgKKyNkZWZpbmUgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVRVUyAgICAgICAgICAgICAgIDB4NjUzYworIyAgICAgICBkZWZpbmUgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVQgICAgICAgICAgKDEgPDwgMTIpCiAjZGVmaW5lIEFWSVZPX0R4TU9ERV9JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDY1NDAKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxTU9ERV9JTlRfTUFTSyAgICAgICAgICAgICgxIDw8IDApCiAjICAgICAgIGRlZmluZSBBVklWT19EMk1PREVfSU5UX01BU0sgICAgICAgICAgICAoMSA8PCA4KQpAQCAtNTAyLDYgKzUxMyw3IEBACiAKICNkZWZpbmUgQVZJVk9fRDJNT0RFX1ZCTEFOS19TVEFUVVMgICAgICAgICAgICAgIDB4NmQzNAogI2RlZmluZSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EICAgICAgICAgICAgMHg2ZDM4CisjZGVmaW5lIEFWSVZPX0QyTU9ERV9WTElORV9TVEFUVVMgICAgICAgICAgICAgICAweDZkM2MKICNkZWZpbmUgQVZJVk9fRDJNT0RFX1ZJRVdQT1JUX1NUQVJUICAgICAgICAgICAgIDB4NmQ4MAogI2RlZmluZSBBVklWT19EMk1PREVfVklFV1BPUlRfU0laRSAgICAgICAgICAgICAgMHg2ZDg0CiAjZGVmaW5lIEFWSVZPX0QyTU9ERV9FWFRfT1ZFUlNDQU5fTEVGVF9SSUdIVCAgICAweDZkODgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKaW5kZXggZDRiMGI5ZC4uZjc0MzUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKQEAgLTI2LDEwOCArMjYsMTMgQEAKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLwogI2luY2x1ZGUgImRybVAuaCIKLSNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAiYXRvbS5oIgorI2luY2x1ZGUgInI1MjBkLmgiCiAKLS8qIHI1MjAscnY1MzAscnY1NjAscnY1NzAscjU4MCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnY1MTVfZGVidWdmc19waXBlc19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJ2NTE1X2RlYnVnZnNfZ2FfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKy8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86IHI1MjAscnY1MzAscnY1NjAscnY1NzAscjU4MCAqLwogCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgotICogcjUyMCxydjUzMCxydjU2MCxydjU3MCxyNTgwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLwotdm9pZCByNTIwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByNTIwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0KLS8qCi0gKiBNQwotICovCi1pbnQgcjUyMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0JaWYgKHJ2NTE1X2RlYnVnZnNfcGlwZXNfaW5mb19pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgcGlwZXMgIVxuIik7Ci0JfQotCWlmIChydjUxNV9kZWJ1Z2ZzX2dhX2luZm9faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIHBpcGVzICFcbiIpOwotCX0KLQotCXI1MjBfZ3B1X2luaXQocmRldik7Ci0JcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gRGlzYWJsaW5nIEFHUFxuIik7Ci0JCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKLQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwotCQl9IGVsc2UgewotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7Ci0JCX0KLQl9Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyczYwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHI1MjBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUjUyMF9NQ19GQl9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUjUyMF9NQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyX01DKFI1MjBfTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0JV1JFRzMyKFJTNjkwX0hEUF9GQl9MT0NBVElPTiwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyKDB4MzEwLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQkJdG1wID0gUkVHX1NFVChSNTIwX01DX0FHUF9UT1AsIHRtcCA+PiAxNik7Ci0JCXRtcCB8PSBSRUdfU0VUKFI1MjBfTUNfQUdQX1NUQVJULCByZGV2LT5tYy5ndHRfbG9jYXRpb24gPj4gMTYpOwotCQlXUkVHMzJfTUMoUjUyMF9NQ19BR1BfTE9DQVRJT04sIHRtcCk7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9CQVNFLCByZGV2LT5tYy5hZ3BfYmFzZSk7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9CQVNFXzIsIDApOwotCX0gZWxzZSB7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9MT0NBVElPTiwgMHgwRkZGRkZGRik7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9CQVNFLCAwKTsKLQkJV1JFRzMyX01DKFI1MjBfTUNfQUdQX0JBU0VfMiwgMCk7Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIHI1MjBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotdm9pZCByNTIwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQotaW50IHI1MjBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcjUyMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVuc2lnbmVkIGk7CiAJdWludDMyX3QgdG1wOwpAQCAtMTQzLDEyICs0OCwxMiBAQAogCXJldHVybiAtMTsKIH0KIAotdm9pZCByNTIwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIHZvaWQgcjUyMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBwaXBlX3NlbGVjdF9jdXJyZW50LCBnYl9waXBlX3NlbGVjdCwgdG1wOwogCiAJcjEwMF9oZHBfcmVzZXQocmRldik7Ci0JcnM2MDBfZGlzYWJsZV92Z2EocmRldik7CisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogCS8qCiAJICogRFNUX1BJUEVfQ09ORklHCQkweDE3MEMKIAkgKiBHQl9USUxFX0NPTkZJRwkJMHg0MDE4CkBAIC0xODYsMTAgKzkxLDYgQEAKIAl9CiB9CiAKLQotLyoKLSAqIFZSQU0gaW5mbwotICovCiBzdGF0aWMgdm9pZCByNTIwX3ZyYW1fZ2V0X3R5cGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdG1wOwpAQCAtMjMzLDcgKzEzNCwxNjkgQEAKIAlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfZGl2KHJkZXYtPnBtLnNjbGssIGEpOwogfQogCi12b2lkIHI1MjBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjUyMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJ2NTE1X2JhbmR3aWR0aF9hdml2b191cGRhdGUocmRldik7CisJc3RydWN0IHJ2NTE1X21jX3NhdmUgc2F2ZTsKKworCS8qIFN0b3BzIGFsbCBtYyBjbGllbnRzICovCisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisKKwkvKiBXYWl0IGZvciBtYyBpZGxlICovCisJaWYgKHI1MjBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBNQyBpZGxlIHRpbWVvdXQgYmVmb3JlIHVwZGF0aW5nIE1DLlxuIik7CisJLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCisJV1JFRzMyKFJfMDAwMEY4X0NPTkZJR19NRU1TSVpFLCByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSk7CisJLyogUHJvZ3JhbSBNQywgc2hvdWxkIGJlIGEgMzJiaXRzIGxpbWl0ZWQgYWRkcmVzcyBzcGFjZSAqLworCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19GQl9MT0NBVElPTiwKKwkJCVNfMDAwMDA0X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJCVNfMDAwMDA0X01DX0ZCX1RPUChyZGV2LT5tYy52cmFtX2VuZCA+PiAxNikpOworCVdSRUczMihSXzAwMDEzNF9IRFBfRkJfTE9DQVRJT04sCisJCVNfMDAwMTM0X0hEUF9GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlXUkVHMzJfTUMoUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OLAorCQkJU18wMDAwMDVfTUNfQUdQX1NUQVJUKHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDVfTUNfQUdQX1RPUChyZGV2LT5tYy5ndHRfZW5kID4+IDE2KSk7CisJCVdSRUczMl9NQyhSXzAwMDAwNl9BR1BfQkFTRSwgbG93ZXJfMzJfYml0cyhyZGV2LT5tYy5hZ3BfYmFzZSkpOworCQlXUkVHMzJfTUMoUl8wMDAwMDdfQUdQX0JBU0VfMiwKKwkJCVNfMDAwMDA3X0FHUF9CQVNFX0FERFJfMih1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSkpOworCX0gZWxzZSB7CisJCVdSRUczMl9NQyhSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04sIDB4RkZGRkZGRkYpOworCQlXUkVHMzJfTUMoUl8wMDAwMDZfQUdQX0JBU0UsIDApOworCQlXUkVHMzJfTUMoUl8wMDAwMDdfQUdQX0JBU0VfMiwgMCk7CisJfQorCisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKK30KKworc3RhdGljIGludCByNTIwX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyNTIwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcjUyMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7CisJCXIgPSBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcnM2MDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcjUyMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIHBvc3QgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJcmV0dXJuIHI1MjBfc3RhcnR1cChyZGV2KTsKK30KKworaW50IHI1MjBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJWNTE1IEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXI1MjBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnY1MTVfZGVidWdmcyhyZGV2KTsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcmFkZW9uX2lycV9rbXNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcnYzNzBfcGNpZV9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X3NldF9zYWZlX3JlZ2lzdGVycyhyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcjUyMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJ2NTE1X3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCQlyYWRlb25fYWdwX2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhZjYxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMGQuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SNTIwRF9IX18KKyNkZWZpbmUgX19SNTIwRF9IX18KKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEY4CisjZGVmaW5lICAgU18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMEY4X0NPTkZJR19NRU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDBGOF9DT05GSUdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTM0CisjZGVmaW5lICAgU18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMzRfSERQX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RJTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dBX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NCQTJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQkJNX0hJQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDBFNDBfUkJCTV9ISUJVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCQk1fSElCVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9TS0lEX0NGQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDBFNDBfU0tJRF9DRkJVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1NLSURfQ0ZCVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfVkZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX1ZGX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9WRl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKworCisjZGVmaW5lIFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0CisjZGVmaW5lICAgU18wMDAwMDRfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDRfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDRfTUNfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMDA0X01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwNF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDRfTUNfRkJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAweDAwMDAwNQorI2RlZmluZSAgIFNfMDAwMDA1X01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA1X01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA1X01DX0FHUF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwNV9NQ19BR1BfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDVfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA1X01DX0FHUF9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDZfQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYKKyNkZWZpbmUgICBTXzAwMDAwNl9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDZfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMDA2X0FHUF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAwMDdfQUdQX0JBU0VfMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcKKyNkZWZpbmUgICBTXzAwMDAwN19BR1BfQkFTRV9BRERSXzIoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwN19BR1BfQkFTRV9BRERSXzIoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDAwN19BR1BfQkFTRV9BRERSXzIgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCBlYWIzMWMxLi4yNzhmNjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9tb2RlLmgiCiAjaW5jbHVkZSAicjYwMGQuaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKICNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCiAKICNkZWZpbmUgUEZQX1VDT0RFX1NJWkUgNTc2CiAjZGVmaW5lIFBNNF9VQ09ERV9TSVpFIDE3OTIKQEAgLTY1LDE2ICs2NSwxMSBAQAogCiBpbnQgcjYwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiByNjAwLHJ2NjEwLHJ2NjMwLHJ2NjIwLHJ2NjM1LHJ2NjcwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLworLyogcjYwMCxydjYxMCxydjYzMCxydjYyMCxydjYzNSxydjY3MCAqLwogaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHI2MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCi0KIC8qCiAgKiBSNjAwIFBDSUUgR0FSVAogICovCkBAIC0xNjgsNyArMTYzLDcgQEAKIAlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9TRU1fQ05UTCwgdG1wIHwgRU5BQkxFX1NFTUFQSE9SRV9NT0RFKTsKIAlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9TRU1fQ05UTCwgdG1wIHwgRU5BQkxFX1NFTUFQSE9SRV9NT0RFKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9TVEFSVF9BRERSLCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTIpOwotCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCAocmRldi0+bWMuZ3R0X2VuZCAtIDEpID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCA+PiAxMik7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSLCByZGV2LT5nYXJ0LnRhYmxlX2FkZHIgPj4gMTIpOwogCVdSRUczMihWTV9DT05URVhUMF9DTlRMLCBFTkFCTEVfQ09OVEVYVCB8IFBBR0VfVEFCTEVfREVQVEgoMCkgfAogCQkJCVJBTkdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQpOwpAQCAtMjI1LDYgKzIyMCw0MCBAQAogCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKK3ZvaWQgcjYwMF9hZ3BfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisJaW50IGk7CisKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUXzAoMCkgfCBCQU5LX1NFTEVDVF8xKDEpKTsKKwkvKiBTZXR1cCBUTEIgY29udHJvbCAqLworCXRtcCA9IEVOQUJMRV9MMV9UTEIgfCBFTkFCTEVfTDFfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCVNZU1RFTV9BQ0NFU1NfTU9ERV9OT1RfSU5fU1lTIHwKKwkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwgRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoNSkgfAorCQlFTkFCTEVfV0FJVF9MMl9RVUVSWTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9TWVNfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9TWVNfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9IRFBfQ05UTCwgdG1wIHwgRU5BQkxFX0wxX1NUUklDVF9PUkRFUklORyk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfSERQX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfUkRfQV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1dSX0FfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DRF9SRF9CX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfV1JfQl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX0dGWF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX0dGWF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1BETUFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9QRE1BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfU0VNX0NOVEwsIHRtcCB8IEVOQUJMRV9TRU1BUEhPUkVfTU9ERSk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfU0VNX0NOVEwsIHRtcCB8IEVOQUJMRV9TRU1BUEhPUkVfTU9ERSk7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCAwKTsKK30KKwogaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwpAQCAtMjQwLDE0ICsyNjksOSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgcjYwMF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdm9pZCByNjAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdTMyIGQxdmdhX2NvbnRyb2wsIGQydmdhX2NvbnRyb2w7Ci0JdTMyIHZnYV9yZW5kZXJfY29udHJvbCwgdmdhX2hkcF9jb250cm9sOwotCXUzMiBkMWNydGNfY29udHJvbCwgZDJjcnRjX2NvbnRyb2w7Ci0JdTMyIG5ld19kMWdycGhfcHJpbWFyeSwgbmV3X2QxZ3JwaF9zZWNvbmRhcnk7Ci0JdTMyIG5ld19kMmdycGhfcHJpbWFyeSwgbmV3X2QyZ3JwaF9zZWNvbmRhcnk7Ci0JdTY0IG9sZF92cmFtX3N0YXJ0OworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CiAJdTMyIHRtcDsKIAlpbnQgaSwgajsKIApAQCAtMjYxLDk5ICsyODUsNjQgQEAKIAl9CiAJV1JFRzMyKEhEUF9SRUdfQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDApOwogCi0JZDF2Z2FfY29udHJvbCA9IFJSRUczMihEMVZHQV9DT05UUk9MKTsKLQlkMnZnYV9jb250cm9sID0gUlJFRzMyKEQyVkdBX0NPTlRST0wpOwotCXZnYV9yZW5kZXJfY29udHJvbCA9IFJSRUczMihWR0FfUkVOREVSX0NPTlRST0wpOwotCXZnYV9oZHBfY29udHJvbCA9IFJSRUczMihWR0FfSERQX0NPTlRST0wpOwotCWQxY3J0Y19jb250cm9sID0gUlJFRzMyKEQxQ1JUQ19DT05UUk9MKTsKLQlkMmNydGNfY29udHJvbCA9IFJSRUczMihEMkNSVENfQ09OVFJPTCk7Ci0Jb2xkX3ZyYW1fc3RhcnQgPSAodTY0KShSUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04pICYgMHhGRkZGKSA8PCAyNDsKLQluZXdfZDFncnBoX3ByaW1hcnkgPSBSUkVHMzIoRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKTsKLQluZXdfZDFncnBoX3NlY29uZGFyeSA9IFJSRUczMihEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QxZ3JwaF9wcmltYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKLQluZXdfZDFncnBoX3NlY29uZGFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QyZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QyZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMmdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QyZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCi0JLyogU3RvcCBhbGwgdmlkZW8gKi8KLQlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQyVkdBX0NPTlRST0wsIDApOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIDApOwotCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMUNSVENfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQyQ1JUQ19DT05UUk9MLCAwKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKLQotCW1kZWxheSgxKTsKKwlydjUxNV9tY19zdG9wKHJkZXYsICZzYXZlKTsKIAlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOwogCX0KLQotCS8qIExvY2tvdXQgYWNjZXNzIHRocm91Z2ggVkdBIGFwZXJ0dXJlKi8KKwkvKiBMb2Nrb3V0IGFjY2VzcyB0aHJvdWdoIFZHQSBhcGVydHVyZSAoZG9lc24ndCBleGlzdCBiZWZvcmUgUjYwMCkgKi8KIAlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCBWR0FfTUVNT1JZX0RJU0FCTEUpOwotCiAJLyogVXBkYXRlIGNvbmZpZ3VyYXRpb24gKi8KLQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDEyKTsKLQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgKHJkZXYtPm1jLnZyYW1fZW5kIC0gMSkgPj4gMTIpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJaWYgKHJkZXYtPm1jLnZyYW1fc3RhcnQgPCByZGV2LT5tYy5ndHRfc3RhcnQpIHsKKwkJCS8qIFZSQU0gYmVmb3JlIEFHUCAqLworCQkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwKKwkJCQlyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDEyKTsKKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJCXJkZXYtPm1jLmd0dF9lbmQgPj4gMTIpOworCQl9IGVsc2UgeworCQkJLyogVlJBTSBhZnRlciBBR1AgKi8KKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsCisJCQkJcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJCXJkZXYtPm1jLnZyYW1fZW5kID4+IDEyKTsKKwkJfQorCX0gZWxzZSB7CisJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTIpOworCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgcmRldi0+bWMudnJhbV9lbmQgPj4gMTIpOworCX0KIAlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiwgMCk7Ci0JdG1wID0gKCgocmRldi0+bWMudnJhbV9lbmQgLSAxKSA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OworCXRtcCA9ICgocmRldi0+bWMudnJhbV9lbmQgPj4gMjQpICYgMHhGRkZGKSA8PCAxNjsKIAl0bXAgfD0gKChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDI0KSAmIDB4RkZGRik7CiAJV1JFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OLCB0bXApOwogCVdSRUczMihIRFBfTk9OU1VSRkFDRV9CQVNFLCAocmRldi0+bWMudnJhbV9zdGFydCA+PiA4KSk7CiAJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0lORk8sICgyIDw8IDcpKTsKLQlXUkVHMzIoSERQX05PTlNVUkZBQ0VfU0laRSwgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpIHwgMHgzRkYpOworCVdSRUczMihIRFBfTk9OU1VSRkFDRV9TSVpFLCByZGV2LT5tYy5tY192cmFtX3NpemUgfCAweDNGRik7CiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxNik7Ci0JCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgcmRldi0+bWMuZ3R0X2VuZCA+PiAyMik7CisJCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMjIpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlID4+IDIyKTsKIAl9IGVsc2UgewogCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIDApOwogCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgMHgwRkZGRkZGRik7CiAJCVdSRUczMihNQ19WTV9BR1BfQk9ULCAweDBGRkZGRkZGKTsKIAl9Ci0JV1JFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QxZ3JwaF9wcmltYXJ5KTsKLQlXUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfc2Vjb25kYXJ5KTsKLQlXUkVHMzIoRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDJncnBoX3ByaW1hcnkpOwotCVdSRUczMihEMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9zZWNvbmRhcnkpOwotCVdSRUczMihWR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7Ci0KLQkvKiBVbmxvY2sgaG9zdCBhY2Nlc3MgKi8KLQlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCB2Z2FfaGRwX2NvbnRyb2wpOwotCi0JbWRlbGF5KDEpOwogCWlmIChyNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gTUMgbm90IGlkbGUgIVxuIik7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZWRvdXQgIVxuIik7CiAJfQotCi0JLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLwotCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMUNSVENfQ09OVFJPTCwgZDFjcnRjX2NvbnRyb2wpOwotCVdSRUczMihEMkNSVENfQ09OVFJPTCwgZDJjcnRjX2NvbnRyb2wpOwotCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDApOwotCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDApOwotCVdSRUczMihEMVZHQV9DT05UUk9MLCBkMXZnYV9jb250cm9sKTsKLQlXUkVHMzIoRDJWR0FfQ09OVFJPTCwgZDJ2Z2FfY29udHJvbCk7Ci0JV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgdmdhX3JlbmRlcl9jb250cm9sKTsKLQorCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7CiAJLyogd2UgbmVlZCB0byBvd24gVlJBTSwgc28gdHVybiBvZmYgdGhlIFZHQSByZW5kZXJlciBoZXJlCiAJICogdG8gc3RvcCBpdCBvdmVyd3JpdGluZyBvdXIgb2JqZWN0cyAqLwotCXJhZGVvbl9hdml2b192Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogfQogCiBpbnQgcjYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWZpeGVkMjBfMTIgYTsKIAl1MzIgdG1wOwotCWludCBjaGFuc2l6ZTsKKwlpbnQgY2hhbnNpemUsIG51bWNoYW47CiAJaW50IHI7CiAKIAkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KLQlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OwogCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKIAl0bXAgPSBSUkVHMzIoUkFNQ0ZHKTsKIAlpZiAodG1wICYgQ0hBTlNJWkVfT1ZFUlJJREUpIHsKQEAgLTM2MywyMyArMzUyLDM2IEBACiAJfSBlbHNlIHsKIAkJY2hhbnNpemUgPSAzMjsKIAl9Ci0JaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1I2MDApIHsKLQkJcmRldi0+bWMudnJhbV93aWR0aCA9IDggKiBjaGFuc2l6ZTsKLQl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjcwKSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSA0ICogY2hhbnNpemU7Ci0JfSBlbHNlIGlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MTApIHx8Ci0JCQkocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MjApKSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSBjaGFuc2l6ZTsKLQl9IGVsc2UgaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYzMCkgfHwKLQkJCShyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYzNSkpIHsKLQkJcmRldi0+bWMudnJhbV93aWR0aCA9IDIgKiBjaGFuc2l6ZTsKKwl0bXAgPSBSUkVHMzIoQ0hNQVApOworCXN3aXRjaCAoKHRtcCAmIE5PT0ZDSEFOX01BU0spID4+IE5PT0ZDSEFOX1NISUZUKSB7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCW51bWNoYW4gPSAxOworCQlicmVhazsKKwljYXNlIDE6CisJCW51bWNoYW4gPSAyOworCQlicmVhazsKKwljYXNlIDI6CisJCW51bWNoYW4gPSA0OworCQlicmVhazsKKwljYXNlIDM6CisJCW51bWNoYW4gPSA4OworCQlicmVhazsKIAl9CisJcmRldi0+bWMudnJhbV93aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKIAkvKiBDb3VsZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLwogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CiAJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwogCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOworCisJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKKwkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCisJaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQorCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKIAkJaWYgKHIpCkBAIC00MDcsNDAgKzQwOSwzNCBAQAogCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwIHx8IHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSB7Ci0JCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJgotCQkJCQkJCQkweEZGRkYpIDw8IDI0OwotCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7Ci0JCQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplOwotCQkJaWYgKCgweEZGRkZGRkZGVUwgLSB0bXApID49IHJkZXYtPm1jLmd0dF9zaXplKSB7Ci0JCQkJLyogRW5vdWdoIHBsYWNlIGFmdGVyIHZyYW0gKi8KLQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7Ci0JCQl9IGVsc2UgaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKLQkJCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlIHZyYW0gKi8KLQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBOb3QgZW5vdWdoIHBsYWNlIGFmdGVyIG9yIGJlZm9yZSBzaHJpbmsKLQkJCQkgKiBnYXJ0IHNpemUKLQkJCQkgKi8KLQkJCQlpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+ICgweEZGRkZGRkZGVUwgLSB0bXApKSB7Ci0JCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7Ci0JCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKLQkJCQl9IGVsc2UgewotCQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7Ci0JCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gMHhGRkZGRkZGRlVMIC0gdG1wOwotCQkJCX0KLQkJCX0KLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CisJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmCisJCQkJCQkJMHhGRkZGKSA8PCAyNDsKKwkJdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJaWYgKCgweEZGRkZGRkZGVUwgLSB0bXApID49IHJkZXYtPm1jLmd0dF9zaXplKSB7CisJCQkvKiBFbm91Z2ggcGxhY2UgYWZ0ZXIgdnJhbSAqLworCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOworCQl9IGVsc2UgaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKKwkJCS8qIEVub3VnaCBwbGFjZSBiZWZvcmUgdnJhbSAqLworCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKIAkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweDAwMDAwMDAwVUw7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkJCS8qIE5vdCBlbm91Z2ggcGxhY2UgYWZ0ZXIgb3IgYmVmb3JlIHNocmluaworCQkJICogZ2FydCBzaXplCisJCQkgKi8KKwkJCWlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID4gKDB4RkZGRkZGRkZVTCAtIHRtcCkpIHsKKwkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOworCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwkJCX0gZWxzZSB7CisJCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOworCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gMHhGRkZGRkZGRlVMIC0gdG1wOworCQkJfQogCQl9CisJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKIAl9CiAJcmRldi0+bWMudnJhbV9zdGFydCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247Ci0JcmRldi0+bWMudnJhbV9lbmQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplOworCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7CiAJcmRldi0+bWMuZ3R0X3N0YXJ0ID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOwotCXJkZXYtPm1jLmd0dF9lbmQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZTsKKwlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgogCSAqIGRlZmF1bHQgc2V0dXAKIAkgKi8KQEAgLTQ1Niw2ICs0NTIsNyBAQAogICovCiBpbnQgcjYwMF9ncHVfc29mdF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOwogCXUzMiBncmJtX2J1c3lfbWFzayA9IFNfMDA4MDEwX1ZDX0JVU1koMSkgfCBTXzAwODAxMF9WR1RfQlVTWV9OT19ETUEoMSkgfAogCQkJCVNfMDA4MDEwX1ZHVF9CVVNZKDEpIHwgU18wMDgwMTBfVEEwM19CVVNZKDEpIHwKIAkJCQlTXzAwODAxMF9UQ19CVVNZKDEpIHwgU18wMDgwMTBfU1hfQlVTWSgxKSB8CkBAIC00NzMsMTMgKzQ3MCwyNSBAQAogCQkJU18wMDgwMTRfQ0IwX0JVU1koMSkgfCBTXzAwODAxNF9DQjFfQlVTWSgxKSB8CiAJCQlTXzAwODAxNF9DQjJfQlVTWSgxKSB8IFNfMDA4MDE0X0NCM19CVVNZKDEpOwogCXUzMiBzcmJtX3Jlc2V0ID0gMDsKKwl1MzIgdG1wOwogCisJZGV2X2luZm8ocmRldi0+ZGV2LCAiR1BVIHNvZnRyZXNldCBcbiIpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMTBfR1JCTV9TVEFUVVM9MHglMDhYXG4iLAorCQlSUkVHMzIoUl8wMDgwMTBfR1JCTV9TVEFUVVMpKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDA4MDE0X0dSQk1fU1RBVFVTMj0weCUwOFhcbiIsCisJCVJSRUczMihSXzAwODAxNF9HUkJNX1NUQVRVUzIpKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDAwRTUwX1NSQk1fU1RBVFVTPTB4JTA4WFxuIiwKKwkJUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSk7CisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOworCX0KIAkvKiBEaXNhYmxlIENQIHBhcnNpbmcvcHJlZmV0Y2hpbmcgKi8KIAlXUkVHMzIoUl8wMDg2RDhfQ1BfTUVfQ05UTCwgU18wMDg2RDhfQ1BfTUVfSEFMVCgweGZmKSk7CiAJLyogQ2hlY2sgaWYgYW55IG9mIHRoZSByZW5kZXJpbmcgYmxvY2sgaXMgYnVzeSBhbmQgcmVzZXQgaXQgKi8KIAlpZiAoKFJSRUczMihSXzAwODAxMF9HUkJNX1NUQVRVUykgJiBncmJtX2J1c3lfbWFzaykgfHwKIAkgICAgKFJSRUczMihSXzAwODAxNF9HUkJNX1NUQVRVUzIpICYgZ3JibTJfYnVzeV9tYXNrKSkgewotCQlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCBTXzAwODAyMF9TT0ZUX1JFU0VUX0NSKDEpIHwKKwkJdG1wID0gU18wMDgwMjBfU09GVF9SRVNFVF9DUigxKSB8CiAJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX0RCKDEpIHwKIAkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfQ0IoMSkgfAogCQkJU18wMDgwMjBfU09GVF9SRVNFVF9QQSgxKSB8CkBAIC00OTEsMTQgKzUwMCwxOCBAQAogCQkJU18wMDgwMjBfU09GVF9SRVNFVF9UQygxKSB8CiAJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1RBKDEpIHwKIAkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVkMoMSkgfAotCQkJU18wMDgwMjBfU09GVF9SRVNFVF9WR1QoMSkpOworCQkJU18wMDgwMjBfU09GVF9SRVNFVF9WR1QoMSk7CisJCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUPTB4JTA4WFxuIiwgdG1wKTsKKwkJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgdG1wKTsKIAkJKHZvaWQpUlJFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCk7CiAJCXVkZWxheSg1MCk7CiAJCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIDApOwogCQkodm9pZClSUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUKTsKIAl9CiAJLyogUmVzZXQgQ1AgKHdlIGFsd2F5cyByZXNldCBDUCkgKi8KLQlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCBTXzAwODAyMF9TT0ZUX1JFU0VUX0NQKDEpKTsKKwl0bXAgPSBTXzAwODAyMF9TT0ZUX1JFU0VUX0NQKDEpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIlJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVD0weCUwOFhcbiIsIHRtcCk7CisJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgdG1wKTsKIAkodm9pZClSUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUKTsKIAl1ZGVsYXkoNTApOwogCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIDApOwpAQCAtNTI2LDYgKzUzOSwxNCBAQAogCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfUkxDKDEpOwogCWlmIChHXzAwMEU1MF9TRU1fQlVTWShSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKSkKIAkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX1NFTSgxKTsKKwlpZiAoR18wMDBFNTBfQklGX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9CSUYoMSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQ9MHglMDhYXG4iLCBzcmJtX3Jlc2V0KTsKKwlXUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VULCBzcmJtX3Jlc2V0KTsKKwkodm9pZClSUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VUKTsKKwl1ZGVsYXkoNTApOworCVdSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQsIDApOworCSh2b2lkKVJSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQpOwogCVdSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQsIHNyYm1fcmVzZXQpOwogCSh2b2lkKVJSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQpOwogCXVkZWxheSg1MCk7CkBAIC01MzMsNiArNTU0LDE3IEBACiAJKHZvaWQpUlJFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCk7CiAJLyogV2FpdCBhIGxpdHRsZSBmb3IgdGhpbmdzIHRvIHNldHRsZSBkb3duICovCiAJdWRlbGF5KDUwKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDA4MDEwX0dSQk1fU1RBVFVTPTB4JTA4WFxuIiwKKwkJUlJFRzMyKFJfMDA4MDEwX0dSQk1fU1RBVFVTKSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwODAxNF9HUkJNX1NUQVRVUzI9MHglMDhYXG4iLAorCQlSUkVHMzIoUl8wMDgwMTRfR1JCTV9TVEFUVVMyKSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwMEU1MF9TUkJNX1NUQVRVUz0weCUwOFhcbiIsCisJCVJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpOworCS8qIEFmdGVyIHJlc2V0IHdlIG5lZWQgdG8gcmVpbml0IHRoZSBhc2ljIGFzIEdQVSBvZnRlbiBlbmR1cCBpbiBhbgorCSAqIGluY29oZXJlbnQgc3RhdGUuCisJICovCisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODI2LDcgKzg1OCw4IEBACiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjMwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYxMCkgfHwKIAkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MjApIHx8Ci0JICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSkgeworCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM4ODApKSB7CiAJCVdSRUczMihEQl9ERUJVRywgUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUpOwogCX0gZWxzZSB7CiAJCVdSRUczMihEQl9ERUJVRywgMCk7CkBAIC04NDMsNyArODc2LDggQEAKIAl0bXAgPSBSUkVHMzIoU1FfTVNfRklGT19TSVpFUyk7CiAJaWYgKCgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKLQkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzg4MCkpIHsKIAkJdG1wID0gKENBQ0hFX0ZJRk9fU0laRSgweGEpIHwKIAkJICAgICAgIEZFVENIX0ZJRk9fSElXQVRFUigweGEpIHwKIAkJICAgICAgIERPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKQEAgLTg4Niw3ICs5MjAsOCBAQAogCQkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMoMCkpOwogCX0gZWxzZSBpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CiAJCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAotCQkgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApIHx8CisJCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTODgwKSkgewogCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KIAkJc3FfY29uZmlnICY9IH5WQ19FTkFCTEU7CiAKQEAgLTk0Myw3ICs5NzgsOCBAQAogCiAJaWYgKCgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKLQkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzg4MCkpIHsKIAkJV1JFRzMyKFZHVF9DQUNIRV9JTlZBTElEQVRJT04sIENBQ0hFX0lOVkFMSURBVElPTihUQ19PTkxZKSk7CiAJfSBlbHNlIHsKIAkJV1JFRzMyKFZHVF9DQUNIRV9JTlZBTElEQVRJT04sIENBQ0hFX0lOVkFMSURBVElPTihWQ19BTkRfVEMpKTsKQEAgLTk2OSw4ICsxMDA1LDkgQEAKIAl0bXAgPSByZGV2LT5jb25maWcucjYwMC5tYXhfcGlwZXMgKiAxNjsKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9SVjYxMDoKLQljYXNlIENISVBfUlM3ODA6CiAJY2FzZSBDSElQX1JWNjIwOgorCWNhc2UgQ0hJUF9SUzc4MDoKKwljYXNlIENISVBfUlM4ODA6CiAJCXRtcCArPSAzMjsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNjcwOgpAQCAtMTAxMSw4ICsxMDQ4LDkgQEAKIAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX1JWNjEwOgotCWNhc2UgQ0hJUF9SUzc4MDoKIAljYXNlIENISVBfUlY2MjA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDoKIAkJdG1wID0gVENfTDJfU0laRSg4KTsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNjMwOgpAQCAtMTIzNCwxOSArMTI3MiwxNyBAQAogCiAJLyogU2V0IHJpbmcgYnVmZmVyIHNpemUgKi8KIAlyYl9idWZzeiA9IGRybV9vcmRlcihyZGV2LT5jcC5yaW5nX3NpemUgLyA4KTsKKwl0bXAgPSBSQl9OT19VUERBVEUgfCAoZHJtX29yZGVyKFJBREVPTl9HUFVfUEFHRV9TSVpFLzgpIDw8IDgpIHwgcmJfYnVmc3o7CiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JV1JFRzMyKENQX1JCX0NOVEwsIEJVRl9TV0FQXzMyQklUIHwgUkJfTk9fVVBEQVRFIHwKLQkJKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOwotI2Vsc2UKLQlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOworCXRtcCB8PSBCVUZfU1dBUF8zMkJJVDsKICNlbmRpZgorCVdSRUczMihDUF9SQl9DTlRMLCB0bXApOwogCVdSRUczMihDUF9TRU1fV0FJVF9USU1FUiwgMHg0KTsKIAogCS8qIFNldCB0aGUgd3JpdGUgcG9pbnRlciBkZWxheSAqLwogCVdSRUczMihDUF9SQl9XUFRSX0RFTEFZLCAwKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KLQl0bXAgPSBSUkVHMzIoQ1BfUkJfQ05UTCk7CiAJV1JFRzMyKENQX1JCX0NOVEwsIHRtcCB8IFJCX1JQVFJfV1JfRU5BKTsKIAlXUkVHMzIoQ1BfUkJfUlBUUl9XUiwgMCk7CiAJV1JFRzMyKENQX1JCX1dQVFIsIDApOwpAQCAtMTM0MywzMiArMTM3OSw0NyBAQAogCXJldHVybiByOwogfQogCi0vKgotICogV3JpdGViYWNrCi0gKi8KLWludCByNjAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHI2MDBfd2JfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlXUkVHMzIoU0NSQVRDSF9VTVNLLCAwKTsKKwlpZiAocmRldi0+d2Iud2Jfb2JqKSB7CisJCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPndiLndiX29iaik7CisJCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+d2Iud2Jfb2JqKTsKKwl9Cit9CisKK3ZvaWQgcjYwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXI2MDBfd2JfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+d2Iud2Jfb2JqKSB7CisJCXJhZGVvbl9vYmplY3RfdW5yZWYoJnJkZXYtPndiLndiX29iaik7CisJCXJkZXYtPndiLndiID0gTlVMTDsKKwkJcmRldi0+d2Iud2Jfb2JqID0gTlVMTDsKKwl9Cit9CisKK2ludCByNjAwX3diX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKIAogCWlmIChyZGV2LT53Yi53Yl9vYmogPT0gTlVMTCkgewotCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwKLQkJCQkJIHRydWUsCi0JCQkJCSBSQURFT05fR0VNX0RPTUFJTl9HVFQsCi0JCQkJCSBmYWxzZSwgJnJkZXYtPndiLndiX29iaik7CisJCXIgPSByYWRlb25fb2JqZWN0X2NyZWF0ZShyZGV2LCBOVUxMLCBSQURFT05fR1BVX1BBR0VfU0laRSwgdHJ1ZSwKKwkJCQlSQURFT05fR0VNX0RPTUFJTl9HVFQsIGZhbHNlLCAmcmRldi0+d2Iud2Jfb2JqKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gY3JlYXRlIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+d2Iud2Jfb2JqLAotCQkJCSAgICAgIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKLQkJCQkgICAgICAmcmRldi0+d2IuZ3B1X2FkZHIpOworCQlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+d2Iud2Jfb2JqLCBSQURFT05fR0VNX0RPTUFJTl9HVFQsCisJCQkJJnJkZXYtPndiLmdwdV9hZGRyKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gcGluIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gcGluIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyNjAwX3diX2ZpbmkocmRldik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlyID0gcmFkZW9uX29iamVjdF9rbWFwKHJkZXYtPndiLndiX29iaiwgKHZvaWQgKiopJnJkZXYtPndiLndiKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gbWFwIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyNjAwX3diX2ZpbmkocmRldik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KQEAgLTEzNzksMjEgKzE0MzAsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHI2MDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlpZiAocmRldi0+d2Iud2Jfb2JqKSB7Ci0JCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPndiLndiX29iaik7Ci0JCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+d2Iud2Jfb2JqKTsKLQkJcmFkZW9uX29iamVjdF91bnJlZigmcmRldi0+d2Iud2Jfb2JqKTsKLQkJcmRldi0+d2Iud2IgPSBOVUxMOwotCQlyZGV2LT53Yi53Yl9vYmogPSBOVUxMOwotCX0KLX0KLQotCi0vKgotICogQ1MKLSAqLwogdm9pZCByNjAwX2ZlbmNlX3JpbmdfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7CkBAIC0xNDE3LDggKzE0NTMsOCBAQAogCQkgICB1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICB1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewotCXI2MDBfYmxpdF9wcmVwYXJlX2NvcHkocmRldiwgbnVtX3BhZ2VzICogNDA5Nik7Ci0JcjYwMF9rbXNfYmxpdF9jb3B5KHJkZXYsIHNyY19vZmZzZXQsIGRzdF9vZmZzZXQsIG51bV9wYWdlcyAqIDQwOTYpOworCXI2MDBfYmxpdF9wcmVwYXJlX2NvcHkocmRldiwgbnVtX3BhZ2VzICogUkFERU9OX0dQVV9QQUdFX1NJWkUpOworCXI2MDBfa21zX2JsaXRfY29weShyZGV2LCBzcmNfb2Zmc2V0LCBkc3Rfb2Zmc2V0LCBudW1fcGFnZXMgKiBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAJcjYwMF9ibGl0X2RvbmVfY29weShyZGV2LCBmZW5jZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDcwLDExICsxNTA2LDE0IEBACiB7CiAJaW50IHI7CiAKLQlyNjAwX2dwdV9yZXNldChyZGV2KTsKLQlyNjAwX21jX3Jlc3VtZShyZGV2KTsKLQlyID0gcjYwMF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwlyNjAwX21jX3Byb2dyYW0ocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlyNjAwX2FncF9lbmFibGUocmRldik7CisJfSBlbHNlIHsKKwkJciA9IHI2MDBfcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CiAJcjYwMF9ncHVfaW5pdChyZGV2KTsKIAogCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTE0OTMsOSArMTUzMiw4IEBACiAJciA9IHI2MDBfY3BfcmVzdW1lKHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKLQlyID0gcjYwMF93Yl9pbml0KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwkvKiB3cml0ZSBiYWNrIGJ1ZmZlciBhcmUgbm90IHZpdGFsIHNvIGRvbid0IHdvcnJ5IGFib3V0IGZhaWx1cmUgKi8KKwlyNjAwX3diX2VuYWJsZShyZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUxNywxNSArMTU1NSwxMiBAQAogewogCWludCByOwogCi0JaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKLQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KLQl9CisJLyogRG8gbm90IHJlc2V0IEdQVSBiZWZvcmUgcG9zdGluZywgb24gcjYwMCBodyB1bmxpa2Ugb24gcjUwMCBodywKKwkgKiBwb3N0aW5nIHdpbGwgcGVyZm9ybSBuZWNlc3NhcnkgdGFzayB0byBicmluZyBiYWNrIEdQVSBpbnRvIGdvb2QKKwkgKiBzaGFwZS4KKwkgKi8KIAkvKiBwb3N0IGNhcmQgKi8KLQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQl9CisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwogCWlmIChyKSB7CkBAIC0xNTM4LDcgKzE1NzMsNyBAQAogCQlyZXR1cm4gcjsKIAl9CiAKLQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CkBAIC0xNTQ2LDEzICsxNTgxLDEyIEBACiAJcmV0dXJuIHI7CiB9CiAKLQogaW50IHI2MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIHdhaXQgZm9yIHJpbmcgdG8gYmUgZW1wdHkgKi8KIAlyNjAwX2NwX3N0b3AocmRldik7CiAJcmRldi0+Y3AucmVhZHkgPSBmYWxzZTsKLQorCXI2MDBfd2JfZGlzYWJsZShyZGV2KTsKIAlyNjAwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwogCS8qIHVucGluIHNoYWRlcnMgYm8gKi8KIAlyYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKQEAgLTE1NjksNyArMTYwMyw2IEBACiB7CiAJaW50IHI7CiAKLQlyZGV2LT5uZXdfaW5pdF9wYXRoID0gdHJ1ZTsKIAlyID0gcmFkZW9uX2R1bW15X3BhZ2VfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0xNTg2LDggKzE2MTksMTAgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBNdXN0IGJlIGFuIEFUT01CSU9TICovCi0JaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpCisJaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFI2MDAgR1BVXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0xNjAwLDI0ICsxNjM1LDIwIEBACiAJcjYwMF9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHI2MDBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikgewotCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KLQkJCXI2MDBfZmluaShyZGV2KTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmV0dXJuIHI2MDBfaW5pdChyZGV2KTsKLQkJfQorCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CiAJLyogTWVtb3J5IG1hbmFnZXIgKi8KIAlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMTY0NiwxMiArMTY3NywxMCBAQAogCiAJciA9IHI2MDBfc3RhcnR1cChyZGV2KTsKIAlpZiAocikgewotCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KLQkJCXI2MDBfZmluaShyZGV2KTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmV0dXJuIHI2MDBfaW5pdChyZGV2KTsKLQkJfQorCQlyNjAwX3N1c3BlbmQocmRldik7CisJCXI2MDBfd2JfZmluaShyZGV2KTsKKwkJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwkJcjYwMF9wY2llX2dhcnRfZmluaShyZGV2KTsKIAkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCX0KIAlpZiAocmRldi0+YWNjZWxfd29ya2luZykgewpAQCAtMTY2MCw3ICsxNjg5LDcgQEAKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIGluaXRpYWxpemluZyBJQiBwb29sICglZCkuXG4iLCByKTsKIAkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKIAkJfQotCQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJCXIgPSByNjAwX2liX3Rlc3QocmRldik7CiAJCWlmIChyKSB7CiAJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKIAkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKQEAgLTE2NzYsMTkgKzE3MDUsMTUgQEAKIAogCXI2MDBfYmxpdF9maW5pKHJkZXYpOwogCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CisJcjYwMF93Yl9maW5pKHJkZXYpOwogCXI2MDBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwotI2VuZGlmCiAJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpCi0JCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOwotCWVsc2UKLQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKIAlyZGV2LT5iaW9zID0gTlVMTDsKIAlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKaW5kZXggZDk4OGVlYy4uNWVhNDMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCkBAIC03NzQsMTEgKzc3NCwxMCBAQAogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGNiX2Zvcm1hdCwgdGV4X2Zvcm1hdDsKKwlpbnQgc3gyLCBzeTIsIGR4MiwgZHkyOwogCXU2NCB2Yl9hZGRyOwogCXUzMiAqdmI7CiAKLQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7Ci0KIAlpZiAoKGRldl9wcml2LT5ibGl0X3ZiLT51c2VkICsgNDgpID4gZGV2X3ByaXYtPmJsaXRfdmItPnRvdGFsKSB7CiAKIAkJcjYwMF9ub21tX3B1dF92YihkZXYpOwpAQCAtNzg3LDE5ICs3ODYsMTMgQEAKIAkJCXJldHVybjsKIAogCQlzZXRfc2hhZGVycyhkZXYpOwotCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CiAJfQorCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKIAotCWlmIChjcHAgPT0gNCkgewotCQljYl9mb3JtYXQgPSBDT0xPUl84XzhfOF84OwotCQl0ZXhfZm9ybWF0ID0gRk1UXzhfOF84Xzg7Ci0JfSBlbHNlIGlmIChjcHAgPT0gMikgewotCQljYl9mb3JtYXQgPSBDT0xPUl81XzZfNTsKLQkJdGV4X2Zvcm1hdCA9IEZNVF81XzZfNTsKLQl9IGVsc2UgewotCQljYl9mb3JtYXQgPSBDT0xPUl84OwotCQl0ZXhfZm9ybWF0ID0gRk1UXzg7Ci0JfQorCXN4MiA9IHN4ICsgdzsKKwlzeTIgPSBzeSArIGg7CisJZHgyID0gZHggKyB3OworCWR5MiA9IGR5ICsgaDsKIAogCXZiWzBdID0gaTJmKGR4KTsKIAl2YlsxXSA9IGkyZihkeSk7CkBAIC04MDcsMzEgKzgwMCw0NiBAQAogCXZiWzNdID0gaTJmKHN5KTsKIAogCXZiWzRdID0gaTJmKGR4KTsKLQl2Yls1XSA9IGkyZihkeSArIGgpOworCXZiWzVdID0gaTJmKGR5Mik7CiAJdmJbNl0gPSBpMmYoc3gpOwotCXZiWzddID0gaTJmKHN5ICsgaCk7CisJdmJbN10gPSBpMmYoc3kyKTsKIAotCXZiWzhdID0gaTJmKGR4ICsgdyk7Ci0JdmJbOV0gPSBpMmYoZHkgKyBoKTsKLQl2YlsxMF0gPSBpMmYoc3ggKyB3KTsKLQl2YlsxMV0gPSBpMmYoc3kgKyBoKTsKKwl2Yls4XSA9IGkyZihkeDIpOworCXZiWzldID0gaTJmKGR5Mik7CisJdmJbMTBdID0gaTJmKHN4Mik7CisJdmJbMTFdID0gaTJmKHN5Mik7CisKKwlzd2l0Y2goY3BwKSB7CisJY2FzZSA0OgorCQljYl9mb3JtYXQgPSBDT0xPUl84XzhfOF84OworCQl0ZXhfZm9ybWF0ID0gRk1UXzhfOF84Xzg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY2JfZm9ybWF0ID0gQ09MT1JfNV82XzU7CisJCXRleF9mb3JtYXQgPSBGTVRfNV82XzU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNiX2Zvcm1hdCA9IENPTE9SXzg7CisJCXRleF9mb3JtYXQgPSBGTVRfODsKKwkJYnJlYWs7CisJfQogCiAJLyogc3JjICovCiAJc2V0X3RleF9yZXNvdXJjZShkZXZfcHJpdiwgdGV4X2Zvcm1hdCwKIAkJCSBzcmNfcGl0Y2ggLyBjcHAsCi0JCQkgc3kgKyBoLCBzcmNfcGl0Y2ggLyBjcHAsCisJCQkgc3kyLCBzcmNfcGl0Y2ggLyBjcHAsCiAJCQkgc3JjX2dwdV9hZGRyKTsKIAogCWNwX3NldF9zdXJmYWNlX3N5bmMoZGV2X3ByaXYsCi0JCQkgICAgUjYwMF9UQ19BQ1RJT05fRU5BLCAoc3JjX3BpdGNoICogKHN5ICsgaCkpLCBzcmNfZ3B1X2FkZHIpOworCQkJICAgIFI2MDBfVENfQUNUSU9OX0VOQSwgc3JjX3BpdGNoICogc3kyLCBzcmNfZ3B1X2FkZHIpOwogCiAJLyogZHN0ICovCiAJc2V0X3JlbmRlcl90YXJnZXQoZGV2X3ByaXYsIGNiX2Zvcm1hdCwKLQkJCSAgZHN0X3BpdGNoIC8gY3BwLCBkeSArIGgsCisJCQkgIGRzdF9waXRjaCAvIGNwcCwgZHkyLAogCQkJICBkc3RfZ3B1X2FkZHIpOwogCiAJLyogc2Npc3NvcnMgKi8KLQlzZXRfc2Npc3NvcnMoZGV2X3ByaXYsIGR4LCBkeSwgZHggKyB3LCBkeSArIGgpOworCXNldF9zY2lzc29ycyhkZXZfcHJpdiwgZHgsIGR5LCBkeDIsIGR5Mik7CiAKIAkvKiBWZXJ0ZXggYnVmZmVyIHNldHVwICovCiAJdmJfYWRkciA9IGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ICsKQEAgLTg0NCw3ICs4NTIsNyBAQAogCiAJY3Bfc2V0X3N1cmZhY2Vfc3luYyhkZXZfcHJpdiwKIAkJCSAgICBSNjAwX0NCX0FDVElPTl9FTkEgfCBSNjAwX0NCMF9ERVNUX0JBU0VfRU5BLAotCQkJICAgIGRzdF9waXRjaCAqIChkeSArIGgpLCBkc3RfZ3B1X2FkZHIpOworCQkJICAgIGRzdF9waXRjaCAqIGR5MiwgZHN0X2dwdV9hZGRyKTsKIAogCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkICs9IDEyICogNDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKaW5kZXggYWNhZTMzZS4uZGJmNzE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MTApIHx8CiAJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYyMCkgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwKSB8fAotCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODApIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzg4MCkgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzEwKSkKIAkJc3FfY29uZmlnID0gMDsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCmluZGV4IDMzYjg5Y2QuLjBkODIwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInI2MDBkLmgiCi0jaW5jbHVkZSAiYXZpdm9kLmgiCiAKIHN0YXRpYyBpbnQgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKTsKQEAgLTU3LDcgKzU2LDcgQEAKIAkJCSAgaWR4LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAlwa3QtPmlkeCA9IGlkeDsKIAlwa3QtPnR5cGUgPSBDUF9QQUNLRVRfR0VUX1RZUEUoaGVhZGVyKTsKIAlwa3QtPmNvdW50ID0gQ1BfUEFDS0VUX0dFVF9DT1VOVChoZWFkZXIpOwpAQCAtOTgsNyArOTcsNiBAQAogc3RhdGljIGludCByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqcmVsb2NzX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcGFja2V0IHAzcmVsb2M7CiAJdW5zaWduZWQgaWR4OwpAQCAtMTA5LDcgKzEwNyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqY3NfcmVsb2MgPSBOVUxMOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CiAJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOwogCWlmIChyKSB7CkBAIC0xMjEsNyArMTE4LDcgQEAKIAkJCSAgcDNyZWxvYy5pZHgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWR4ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBwM3JlbG9jLmlkeCArIDEpOwogCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKIAkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwpAQCAtMTQ2LDcgKzE0Myw2IEBACiBzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2Nfbm9tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKnJlbG9jc19jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwM3JlbG9jOwogCXVuc2lnbmVkIGlkeDsKQEAgLTE1Nyw3ICsxNTMsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJKmNzX3JlbG9jID0gTlVMTDsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlyZWxvY3NfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX3JlbG9jc19pZHhdOwogCXIgPSByNjAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4KTsKIAlpZiAocikgewpAQCAtMTY5LDcgKzE2NCw3IEBACiAJCQkgIHAzcmVsb2MuaWR4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlkeCA9IGliX2NodW5rLT5rZGF0YVtwM3JlbG9jLmlkeCArIDFdOworCWlkeCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgcDNyZWxvYy5pZHggKyAxKTsKIAlpZiAoaWR4ID49IHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KSB7CiAJCURSTV9FUlJPUigiUmVsb2NzIGF0ICVkIGFmdGVyIHJlbG9jYXRpb25zIGNodW5rIGVuZCAlZCAhXG4iLAogCQkJICBpZHgsIHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KTsKQEAgLTE4MSwxMyArMTc2LDEzNiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIHI2MDBfY3NfcGFja2V0X25leHRfdmxpbmUoKSAtIHBhcnNlIHVzZXJzcGFjZSBWTElORSBwYWNrZXQKKyAqIEBwYXJzZXI6CQlwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0LgorICoKKyAqIFVzZXJzcGFjZSBzZW5kcyBhIHNwZWNpYWwgc2VxdWVuY2UgZm9yIFZMSU5FIHdhaXRzLgorICogUEFDS0VUMCAtIFZMSU5FX1NUQVJUX0VORCArIHZhbHVlCisgKiBQQUNLRVQzIC0gV0FJVF9SRUdfTUVNIHBvbGwgdmxpbmUgc3RhdHVzIHJlZworICogUkVMT0MgKFAzKSAtIGNydGNfaWQgaW4gcmVsb2MuCisgKgorICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhpcyBhbmQgcmVsb2NhdGVzIHRoZSBWTElORSBTVEFSVCBFTkQKKyAqIGFuZCBXQUlUX1JFR19NRU0gcGFja2V0cyB0byB0aGUgY29ycmVjdCBjcnRjLgorICogSXQgYWxzbyBkZXRlY3RzIGEgc3dpdGNoZWQgb2ZmIGNydGMgYW5kIG51bGxzIG91dCB0aGUKKyAqIHdhaXQgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YzsKKwlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwM3JlbG9jLCB3YWl0X3JlZ19tZW07CisJaW50IGNydGNfaWQ7CisJaW50IHI7CisJdWludDMyX3QgaGVhZGVyLCBoX2lkeCwgcmVnLCB3YWl0X3JlZ19tZW1faW5mbzsKKwl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CisKKwlpYiA9IHAtPmliLT5wdHI7CisKKwkvKiBwYXJzZSB0aGUgV0FJVF9SRUdfTUVNICovCisJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZ3YWl0X3JlZ19tZW0sIHAtPmlkeCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJLyogY2hlY2sgaXRzIGEgV0FJVF9SRUdfTUVNICovCisJaWYgKHdhaXRfcmVnX21lbS50eXBlICE9IFBBQ0tFVF9UWVBFMyB8fAorCSAgICB3YWl0X3JlZ19tZW0ub3Bjb2RlICE9IFBBQ0tFVDNfV0FJVF9SRUdfTUVNKSB7CisJCURSTV9FUlJPUigidmxpbmUgd2FpdCBtaXNzaW5nIFdBSVRfUkVHX01FTSBzZWdtZW50XG4iKTsKKwkJciA9IC1FSU5WQUw7CisJCXJldHVybiByOworCX0KKworCXdhaXRfcmVnX21lbV9pbmZvID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCB3YWl0X3JlZ19tZW0uaWR4ICsgMSk7CisJLyogYml0IDQgaXMgcmVnICgwKSBvciBtZW0gKDEpICovCisJaWYgKHdhaXRfcmVnX21lbV9pbmZvICYgMHgxMCkgeworCQlEUk1fRVJST1IoInZsaW5lIFdBSVRfUkVHX01FTSB3YWl0aW5nIG9uIE1FTSByYXRoZXIgdGhhbiBSRUdcbiIpOworCQlyID0gLUVJTlZBTDsKKwkJcmV0dXJuIHI7CisJfQorCS8qIHdhaXRpbmcgZm9yIHZhbHVlIHRvIGJlIGVxdWFsICovCisJaWYgKCh3YWl0X3JlZ19tZW1faW5mbyAmIDB4NykgIT0gMHgzKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGZ1bmN0aW9uIG5vdCBlcXVhbFxuIik7CisJCXIgPSAtRUlOVkFMOworCQlyZXR1cm4gcjsKKwl9CisJaWYgKChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIHdhaXRfcmVnX21lbS5pZHggKyAyKSA8PCAyKSAhPSBBVklWT19EMU1PREVfVkxJTkVfU1RBVFVTKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGJhZCByZWdcbiIpOworCQlyID0gLUVJTlZBTDsKKwkJcmV0dXJuIHI7CisJfQorCisJaWYgKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgd2FpdF9yZWdfbWVtLmlkeCArIDUpICE9IEFWSVZPX0QxTU9ERV9WTElORV9TVEFUKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGJhZCBiaXQgbWFza1xuIik7CisJCXIgPSAtRUlOVkFMOworCQlyZXR1cm4gcjsKKwl9CisKKwkvKiBqdW1wIG92ZXIgdGhlIE5PUCAqLworCXIgPSByNjAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4ICsgd2FpdF9yZWdfbWVtLmNvdW50ICsgMik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJaF9pZHggPSBwLT5pZHggLSAyOworCXAtPmlkeCArPSB3YWl0X3JlZ19tZW0uY291bnQgKyAyOworCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKKworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaF9pZHgpOworCWNydGNfaWQgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4ICsgMiArIDcgKyAxKTsKKwlyZWcgPSBDUF9QQUNLRVQwX0dFVF9SRUcoaGVhZGVyKTsKKwltdXRleF9sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQocC0+cmRldi0+ZGRldiwgY3J0Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMpOworCWlmICghb2JqKSB7CisJCURSTV9FUlJPUigiY2Fubm90IGZpbmQgY3J0YyAlZFxuIiwgY3J0Y19pZCk7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisJcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKKwljcnRjX2lkID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CisKKwlpZiAoIWNydGMtPmVuYWJsZWQpIHsKKwkJLyogaWYgdGhlIENSVEMgaXNuJ3QgZW5hYmxlZCAtIHdlIG5lZWQgdG8gbm9wIG91dCB0aGUgV0FJVF9SRUdfTUVNICovCisJCWliW2hfaWR4ICsgMl0gPSBQQUNLRVQyKDApOworCQlpYltoX2lkeCArIDNdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyA0XSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgNV0gPSBQQUNLRVQyKDApOworCQlpYltoX2lkeCArIDZdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyA3XSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgOF0gPSBQQUNLRVQyKDApOworCX0gZWxzZSBpZiAoY3J0Y19pZCA9PSAxKSB7CisJCXN3aXRjaCAocmVnKSB7CisJCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKKwkJCWhlYWRlciAmPSB+UjYwMF9DUF9QQUNLRVQwX1JFR19NQVNLOworCQkJaGVhZGVyIHw9IEFWSVZPX0QyTU9ERV9WTElORV9TVEFSVF9FTkQgPj4gMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ1bmtub3duIGNydGMgcmVsb2NcbiIpOworCQkJciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpYltoX2lkeF0gPSBoZWFkZXI7CisJCWliW2hfaWR4ICsgNF0gPSBBVklWT19EMk1PREVfVkxJTkVfU1RBVFVTID4+IDI7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmcC0+cmRldi0+ZGRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCXJldHVybiByOworfQorCiBzdGF0aWMgaW50IHI2MDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkJCXVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogeworCWludCByOworCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQ6Ci0JY2FzZSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EOgorCQlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCQlpZHgsIHJlZyk7CisJCQlyZXR1cm4gcjsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkZvcmJpZGRlbiByZWdpc3RlciAweCUwNFggaW4gY3MgYXQgJWRcbiIsCkBAIC0yMTgsMTcgKzMzNiwxOCBAQAogc3RhdGljIGludCByNjAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKIAl2b2xhdGlsZSB1MzIgKmliOwogCXVuc2lnbmVkIGlkeDsKIAl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIHN0YXJ0X3JlZywgZW5kX3JlZywgcmVnOwogCWludCByOworCXUzMiBpZHhfdmFsdWU7CiAKIAlpYiA9IHAtPmliLT5wdHI7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOworCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwogCXN3aXRjaCAocGt0LT5vcGNvZGUpIHsKIAljYXNlIFBBQ0tFVDNfU1RBUlRfM0RfQ01EQlVGOgogCQlpZiAocC0+ZmFtaWx5ID49IENISVBfUlY3NzAgfHwgcGt0LT5jb3VudCkgewpAQCAtMjU5LDggKzM3OCw4IEBACiAJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWliW2lkeCswXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7Ci0JCWliW2lkeCsxXSA9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOworCQlpYltpZHgrMF0gPSBpZHhfdmFsdWUgKyAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCWliW2lkeCsxXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX0RSQVdfSU5ERVhfQVVUTzoKIAkJaWYgKHBrdC0+Y291bnQgIT0gMSkgewpAQCAtMjgxLDE0ICs0MDAsMTQgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCS8qIGJpdCA0IGlzIHJlZyAoMCkgb3IgbWVtICgxKSAqLwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeCswXSAmIDB4MTApIHsKKwkJaWYgKGlkeF92YWx1ZSAmIDB4MTApIHsKIAkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CiAJCQlpZiAocikgewogCQkJCURSTV9FUlJPUigiYmFkIFdBSVRfUkVHX01FTVxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpYltpZHgrMV0gKz0gKHUzMikocmVsb2MtPmxvYmouZ3B1X29mZnNldCAmIDB4ZmZmZmZmZmYpOwotCQkJaWJbaWR4KzJdID0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCQlpYltpZHgrMl0gKz0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NVUkZBQ0VfU1lOQzoKQEAgLTI5Nyw4ICs0MTYsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyogMHhmZmZmZmZmZi8weDAgaXMgZmx1c2ggYWxsIGNhY2hlIGZsYWcgKi8KLQkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHgrMV0gIT0gMHhmZmZmZmZmZiB8fAotCQkgICAgaWJfY2h1bmstPmtkYXRhW2lkeCsyXSAhPSAwKSB7CisJCWlmIChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICE9IDB4ZmZmZmZmZmYgfHwKKwkJICAgIHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikgIT0gMCkgewogCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKIAkJCWlmIChyKSB7CiAJCQkJRFJNX0VSUk9SKCJiYWQgU1VSRkFDRV9TWU5DXG4iKTsKQEAgLTMxOSw3ICs0MzgsNyBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJaWJbaWR4KzFdICs9ICh1MzIpKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgJiAweGZmZmZmZmZmKTsKLQkJCWliW2lkeCsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJCWliW2lkeCsyXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfRVZFTlRfV1JJVEVfRU9QOgpAQCAtMzMzLDEwICs0NTIsMTAgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWliW2lkeCsxXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7Ci0JCWliW2lkeCsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJaWJbaWR4KzJdICs9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUc6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX0VORCkgfHwKQEAgLTM0Nyw2ICs0NjYsMjMgQEAKIAkJZm9yIChpID0gMDsgaSA8IHBrdC0+Y291bnQ7IGkrKykgewogCQkJcmVnID0gc3RhcnRfcmVnICsgKDQgKiBpKTsKIAkJCXN3aXRjaCAocmVnKSB7CisJCQljYXNlIFNRX0VTR1NfUklOR19CQVNFOgorCQkJY2FzZSBTUV9HU1ZTX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfRVNUTVBfUklOR19CQVNFOgorCQkJY2FzZSBTUV9HU1RNUF9SSU5HX0JBU0U6CisJCQljYXNlIFNRX1ZTVE1QX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfUFNUTVBfUklOR19CQVNFOgorCQkJY2FzZSBTUV9GQlVGX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfUkVEVUNfUklOR19CQVNFOgorCQkJY2FzZSBTWF9NRU1PUllfRVhQT1JUX0JBU0U6CisJCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCQlpZiAocikgeworCQkJCQlEUk1fRVJST1IoImJhZCBTRVRfQ09ORklHX1JFRyAiCisJCQkJCQkJIjB4JTA0WFxuIiwgcmVnKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWliW2lkeCsxK2ldICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7CisJCQkJYnJlYWs7CiAJCQljYXNlIENQX0NPSEVSX0JBU0U6CiAJCQkJLyogdXNlIFBBQ0tFVDNfU1VSRkFDRV9TWU5DICovCiAJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNTYsNyArNDkyLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHOgotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfRU5EKSB8fApAQCAtMzY4LDYgKzUwNCw3IEBACiAJCQlyZWcgPSBzdGFydF9yZWcgKyAoNCAqIGkpOwogCQkJc3dpdGNoIChyZWcpIHsKIAkJCWNhc2UgREJfREVQVEhfQkFTRToKKwkJCWNhc2UgREJfSFRJTEVfREFUQV9CQVNFOgogCQkJY2FzZSBDQl9DT0xPUjBfQkFTRToKIAkJCWNhc2UgQ0JfQ09MT1IxX0JBU0U6CiAJCQljYXNlIENCX0NPTE9SMl9CQVNFOgpAQCAtNDIxLDcgKzU1OCw3IEBACiAJCQlEUk1fRVJST1IoImJhZCBTRVRfUkVTT1VSQ0VcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX1JFU09VUkNFX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX1JFU09VUkNFX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9SRVNPVVJDRV9PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX1JFU09VUkNFX0VORCkgfHwKQEAgLTQzMCw3ICs1NjcsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IChwa3QtPmNvdW50IC8gNyk7IGkrKykgewotCQkJc3dpdGNoIChHX19TUV9WVFhfQ09OU1RBTlRfVFlQRShpYltpZHgrKGkqNykrNisxXSkpIHsKKwkJCXN3aXRjaCAoR19fU1FfVlRYX0NPTlNUQU5UX1RZUEUocmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgrKGkqNykrNisxKSkpIHsKIAkJCWNhc2UgU1FfVEVYX1ZUWF9WQUxJRF9URVhUVVJFOgogCQkJCS8qIHRleCBiYXNlICovCiAJCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTQ1NSw3ICs1OTIsNyBAQAogCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQl9CiAJCQkJaWJbaWR4KzErKGkqNykrMF0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZmZmZmZmZik7Ci0JCQkJaWJbaWR4KzErKGkqNykrMl0gfD0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCQkJaWJbaWR4KzErKGkqNykrMl0gKz0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNRX1RFWF9WVFhfSU5WQUxJRF9URVhUVVJFOgogCQkJY2FzZSBTUV9URVhfVlRYX0lOVkFMSURfQlVGRkVSOgpAQCAtNDY2LDcgKzYwMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NFVF9BTFVfQ09OU1Q6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfQUxVX0NPTlNUX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfRU5EKSB8fApAQCAtNDc2LDcgKzYxMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NFVF9CT09MX0NPTlNUOgotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQk9PTF9DT05TVF9PRkZTRVQ7CisJCXN0YXJ0X3JlZyA9IChpZHhfdmFsdWUgPDwgMikgKyBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQk9PTF9DT05TVF9FTkQpIHx8CkBAIC00ODYsNyArNjIzLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1Q6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9MT09QX0NPTlNUX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9MT09QX0NPTlNUX0VORCkgfHwKQEAgLTQ5Niw3ICs2MzMsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19TRVRfQ1RMX0NPTlNUOgotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQ1RMX0NPTlNUX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NUTF9DT05TVF9PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfQ1RMX0NPTlNUX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQ1RMX0NPTlNUX0VORCkgfHwKQEAgLTUxMCw3ICs2NDcsNyBAQAogCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1NBTVBMRVJcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX1NBTVBMRVJfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX1NBTVBMRVJfRU5EKSB8fApAQCAtNjAyLDYgKzczOSw4IEBACiAJa2ZyZWUocGFyc2VyLT5yZWxvY3MpOwogCWZvciAoaSA9IDA7IGkgPCBwYXJzZXItPm5jaHVua3M7IGkrKykgewogCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rZGF0YSk7CisJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtwYWdlWzBdKTsKKwkJa2ZyZWUocGFyc2VyLT5jaHVua3NbaV0ua3BhZ2VbMV0pOwogCX0KIAlrZnJlZShwYXJzZXItPmNodW5rcyk7CiAJa2ZyZWUocGFyc2VyLT5jaHVua3NfYXJyYXkpOwpAQCAtNjM5LDcgKzc3OCw2IEBACiAJICogdW5jYWNoZWQpLiAqLwogCWliX2NodW5rID0gJnBhcnNlci5jaHVua3NbcGFyc2VyLmNodW5rX2liX2lkeF07CiAJcGFyc2VyLmliLT5sZW5ndGhfZHcgPSBpYl9jaHVuay0+bGVuZ3RoX2R3OwotCW1lbWNweSgodm9pZCAqKXBhcnNlci5pYi0+cHRyLCBpYl9jaHVuay0+a2RhdGEsIGliX2NodW5rLT5sZW5ndGhfZHcqNCk7CiAJKmwgPSBwYXJzZXIuaWItPmxlbmd0aF9kdzsKIAlyID0gcjYwMF9jc19wYXJzZSgmcGFyc2VyKTsKIAlpZiAocikgewpAQCAtNjQ3LDYgKzc4NSwxMiBAQAogCQlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CisJciA9IHJhZGVvbl9jc19maW5pc2hfcGFnZXMoJnBhcnNlcik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOworCQlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOworCQlyZXR1cm4gcjsKKwl9CiAJcjYwMF9jc19wYXJzZXJfZmluaSgmcGFyc2VyLCByKTsKIAlyZXR1cm4gcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAppbmRleCA0YTkwMjhhLi4yN2FiNDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCkBAIC0xMTksNiArMTE5LDcgQEAKICNkZWZpbmUJREJfREVCVUcJCQkJCTB4OTgzMAogI2RlZmluZQkJUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUJCQkoMSA8PCAzMSkKICNkZWZpbmUJREJfREVQVEhfQkFTRQkJCQkJMHgyODAwQworI2RlZmluZQlEQl9IVElMRV9EQVRBX0JBU0UJCQkJMHgyODAxNAogI2RlZmluZQlEQl9XQVRFUk1BUktTCQkJCQkweDk4MzgKICNkZWZpbmUJCURFUFRIX0ZSRUUoeCkJCQkJCSgoeCkgPDwgMCkKICNkZWZpbmUJCURFUFRIX0ZMVVNIKHgpCQkJCQkoKHgpIDw8IDUpCkBAIC0xNzEsNiArMTcyLDE0IEBACiAjZGVmaW5lIFNRX1NUQUNLX1JFU09VUkNFX01HTVRfMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzE0CiAjICAgICAgIGRlZmluZSBOVU1fR1NfU1RBQ0tfRU5UUklFUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQogIyAgICAgICBkZWZpbmUgTlVNX0VTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFNRX0VTR1NfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM0MAorI2RlZmluZSBTUV9HU1ZTX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNDgKKyNkZWZpbmUgU1FfRVNUTVBfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzUwCisjZGVmaW5lIFNRX0dTVE1QX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM1OAorI2RlZmluZSBTUV9WU1RNUF9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNjAKKyNkZWZpbmUgU1FfUFNUTVBfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzY4CisjZGVmaW5lIFNRX0ZCVUZfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM3MAorI2RlZmluZSBTUV9SRURVQ19SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNzgKIAogI2RlZmluZSBHUkJNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKICMgICAgICAgZGVmaW5lIEdSQk1fUkVBRF9USU1FT1VUKHgpICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQpAQCAtMjcxLDYgKzI4MCwxMCBAQAogI2RlZmluZQlQQ0lFX1BPUlRfSU5ERVgJCQkJCTB4MDAzOAogI2RlZmluZQlQQ0lFX1BPUlRfREFUQQkJCQkJMHgwMDNDCiAKKyNkZWZpbmUgQ0hNQVAJCQkJCQkweDIwMDQKKyNkZWZpbmUJCU5PT0ZDSEFOX1NISUZUCQkJCQkxMgorI2RlZmluZQkJTk9PRkNIQU5fTUFTSwkJCQkJMHgwMDAwMzAwMAorCiAjZGVmaW5lIFJBTUNGRwkJCQkJCTB4MjQwOAogI2RlZmluZQkJTk9PRkJBTktfU0hJRlQJCQkJCTAKICNkZWZpbmUJCU5PT0ZCQU5LX01BU0sJCQkJCTB4MDAwMDAwMDEKQEAgLTM1Miw2ICszNjUsNyBAQAogCiAKICNkZWZpbmUJU1hfTUlTQwkJCQkJCTB4MjgzNTAKKyNkZWZpbmUJU1hfTUVNT1JZX0VYUE9SVF9CQVNFCQkJCTB4OTAxMAogI2RlZmluZQlTWF9ERUJVR18xCQkJCQkweDkwNTQKICNkZWZpbmUJCVNNWF9FVkVOVF9SRUxFQVNFCQkJCSgxIDw8IDApCiAjZGVmaW5lCQlFTkFCTEVfTkVXX1NNWF9BRERSRVNTCQkJCSgxIDw8IDE2KQpAQCAtNjQzLDYgKzY1Nyw3IEBACiAjZGVmaW5lCQlHXzAwMEU1MF9NQ0RXX0JVU1koeCkJCQkoKCh4KSA+PiAxMykgJiAxKQogI2RlZmluZQkJR18wMDBFNTBfU0VNX0JVU1koeCkJCQkoKCh4KSA+PiAxNCkgJiAxKQogI2RlZmluZQkJR18wMDBFNTBfUkxDX0JVU1koeCkJCQkoKCh4KSA+PiAxNSkgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfQklGX0JVU1koeCkJCQkoKCh4KSA+PiAyOSkgJiAxKQogI2RlZmluZQlSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQJCQkweDBFNjAKICNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfQklGKHgpCQkoKCh4KSAmIDEpIDw8IDEpCiAjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX0NHKHgpCQkoKCh4KSAmIDEpIDw8IDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCA2MzExYjEzLi43NTdmNWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTQ0LDYgKzQ0LDI0IEBACiAgKgktIFRFU1RJTkcsIFRFU1RJTkcsIFRFU1RJTkcKICAqLwogCisvKiBJbml0aWFsaXphdGlvbiBwYXRoOgorICogIFdlIGV4cGVjdCB0aGF0IGFjY2VsZXJhdGlvbiBpbml0aWFsaXphdGlvbiBtaWdodCBmYWlsIGZvciB2YXJpb3VzCisgKiAgcmVhc29ucyBldmVuIHRob3VnaHQgd2Ugd29yayBoYXJkIHRvIG1ha2UgaXQgd29ya3Mgb24gbW9zdAorICogIGNvbmZpZ3VyYXRpb25zLiBJbiBvcmRlciB0byBzdGlsbCBoYXZlIGEgd29ya2luZyB1c2Vyc3BhY2UgaW4gc3VjaAorICogIHNpdHVhdGlvbiB0aGUgaW5pdCBwYXRoIG11c3Qgc3VjY2VlZCB1cCB0byB0aGUgbWVtb3J5IGNvbnRyb2xsZXIKKyAqICBpbml0aWFsaXphdGlvbiBwb2ludC4gRmFpbHVyZSBiZWZvcmUgdGhpcyBwb2ludCBhcmUgY29uc2lkZXJlZCBhcworICogIGZhdGFsIGVycm9yLiBIZXJlIGlzIHRoZSBpbml0IGNhbGxjaGFpbiA6CisgKiAgICAgIHJhZGVvbl9kZXZpY2VfaW5pdCAgcGVyZm9ybSBjb21tb24gc3RydWN0dXJlLCBtdXRleCBpbml0aWFsaXphdGlvbgorICogICAgICBhc2ljX2luaXQgICAgICAgICAgIHNldHVwIHRoZSBHUFUgbWVtb3J5IGxheW91dCBhbmQgcGVyZm9ybSBhbGwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgdGltZSBpbml0aWFsaXphdGlvbiAoZmFpbHVyZSBpbiB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXJlIGNvbnNpZGVyZWQgZmF0YWwpCisgKiAgICAgIGFzaWNfc3RhcnR1cCAgICAgICAgc2V0dXAgdGhlIEdQVSBhY2NlbGVyYXRpb24sIGluIG9yZGVyIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93IGd1aWRlbGluZSB0aGUgZmlyc3QgdGhpbmcgdGhpcworICogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNob3VsZCBkbyBpcyBzZXR0aW5nIHRoZSBHUFUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgY29udHJvbGxlciAob25seSBNQyBzZXR1cCBmYWlsdXJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGNvbnNpZGVyZWQgYXMgZmF0YWwpCisgKi8KKwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtMTIxLDYgKzEzOSwxMCBAQAogCXVpbnQzMl90IGRlZmF1bHRfc2NsazsKIH07CiAKKy8qCisgKiBQb3dlciBtYW5hZ2VtZW50CisgKi8KK2ludCByYWRlb25fcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qCiAgKiBGZW5jZXMuCkBAIC0yNTgsNiArMjgwLDggQEAKIAlzdHJ1Y3QgcmFkZW9uX2dhcnRfdGFibGVfdnJhbQl2cmFtOwogfTsKIAorI2RlZmluZSBSQURFT05fR1BVX1BBR0VfU0laRSA0MDk2CisKIHN0cnVjdCByYWRlb25fZ2FydCB7CiAJZG1hX2FkZHJfdAkJCXRhYmxlX2FkZHI7CiAJdW5zaWduZWQJCQludW1fZ3B1X3BhZ2VzOwpAQCAtMzQyLDcgKzM2Niw3IEBACiAJdW5zaWduZWQgbG9uZwkJaWR4OwogCXVpbnQ2NF90CQlncHVfYWRkcjsKIAlzdHJ1Y3QgcmFkZW9uX2ZlbmNlCSpmZW5jZTsKLQl2b2xhdGlsZSB1aW50MzJfdAkqcHRyOworCXVpbnQzMl90CSpwdHI7CiAJdWludDMyX3QJCWxlbmd0aF9kdzsKIH07CiAKQEAgLTQxNSw3ICs0MzksMTIgQEAKIHN0cnVjdCByYWRlb25fY3NfY2h1bmsgewogCXVpbnQzMl90CQljaHVua19pZDsKIAl1aW50MzJfdAkJbGVuZ3RoX2R3OworCWludCBrcGFnZV9pZHhbMl07CisJdWludDMyX3QgICAgICAgICAgICAgICAgKmtwYWdlWzJdOwogCXVpbnQzMl90CQkqa2RhdGE7CisJdm9pZCBfX3VzZXIgKnVzZXJfcHRyOworCWludCBsYXN0X2NvcGllZF9wYWdlOworCWludCBsYXN0X3BhZ2VfaW5kZXg7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciB7CkBAIC00MzgsOCArNDY3LDM4IEBACiAJc3RydWN0IHJhZGVvbl9pYgkqaWI7CiAJdm9pZAkJCSp0cmFjazsKIAl1bnNpZ25lZAkJZmFtaWx5OworCWludCBwYXJzZXJfZXJyb3I7CiB9OwogCitleHRlcm4gaW50IHJhZGVvbl9jc191cGRhdGVfcGFnZXMoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIGludCBwZ19pZHgpOworZXh0ZXJuIGludCByYWRlb25fY3NfZmluaXNoX3BhZ2VzKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKKworCitzdGF0aWMgaW5saW5lIHUzMiByYWRlb25fZ2V0X2liX3ZhbHVlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLCBpbnQgaWR4KQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwl1MzIgcGdfaWR4LCBwZ19vZmZzZXQ7CisJdTMyIGlkeF92YWx1ZSA9IDA7CisJaW50IG5ld19wYWdlOworCisJcGdfaWR4ID0gKGlkeCAqIDQpIC8gUEFHRV9TSVpFOworCXBnX29mZnNldCA9IChpZHggKiA0KSAlIFBBR0VfU0laRTsKKworCWlmIChpYmMtPmtwYWdlX2lkeFswXSA9PSBwZ19pZHgpCisJCXJldHVybiBpYmMtPmtwYWdlWzBdW3BnX29mZnNldC80XTsKKwlpZiAoaWJjLT5rcGFnZV9pZHhbMV0gPT0gcGdfaWR4KQorCQlyZXR1cm4gaWJjLT5rcGFnZVsxXVtwZ19vZmZzZXQvNF07CisKKwluZXdfcGFnZSA9IHJhZGVvbl9jc191cGRhdGVfcGFnZXMocCwgcGdfaWR4KTsKKwlpZiAobmV3X3BhZ2UgPCAwKSB7CisJCXAtPnBhcnNlcl9lcnJvciA9IG5ld19wYWdlOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZHhfdmFsdWUgPSBpYmMtPmtwYWdlW25ld19wYWdlXVtwZ19vZmZzZXQvNF07CisJcmV0dXJuIGlkeF92YWx1ZTsKK30KKwogc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgewogCXVuc2lnbmVkCWlkeDsKIAl1bnNpZ25lZAl0eXBlOwpAQCAtNTM3LDE4ICs1OTYsOCBAQAogCXZvaWQgKCpmaW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCXZvaWQgKCplcnJhdGEpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqdnJhbV9pbmZvKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnZnYV9zZXRfc3RhdGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIHN0YXRlKTsKIAlpbnQgKCpncHVfcmVzZXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQlpbnQgKCptY19pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0Jdm9pZCAoKm1jX2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQlpbnQgKCp3Yl9pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0Jdm9pZCAoKndiX2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQlpbnQgKCpnYXJ0X2luaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqZ2FydF9maW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0JaW50ICgqZ2FydF9lbmFibGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqZ2FydF9kaXNhYmxlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKmdhcnRfdGxiX2ZsdXNoKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqZ2FydF9zZXRfcGFnZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKIAlpbnQgKCpjcF9pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKQEAgLTU1OCw3ICs2MDcsNiBAQAogCXZvaWQgKCpyaW5nX3N0YXJ0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqcmluZ190ZXN0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnJpbmdfaWJfZXhlY3V0ZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKLQlpbnQgKCppYl90ZXN0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqaXJxX3NldCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKmlycV9wcm9jZXNzKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdTMyICgqZ2V0X3ZibGFua19jb3VudGVyKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwpAQCAtNTc5LDcgKzYyNyw5IEBACiAJCSAgICB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICAgdW5zaWduZWQgbnVtX3BhZ2VzLAogCQkgICAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOworCXVpbnQzMl90ICgqZ2V0X2VuZ2luZV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCpzZXRfZW5naW5lX2Nsb2NrKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgZW5nX2Nsb2NrKTsKKwl1aW50MzJfdCAoKmdldF9tZW1vcnlfY2xvY2spKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqc2V0X21lbW9yeV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IG1lbV9jbG9jayk7CiAJdm9pZCAoKnNldF9wY2llX2xhbmVzKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKTsKIAl2b2lkICgqc2V0X2Nsb2NrX2dhdGluZykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwpAQCAtNzM2LDEyICs3ODYsMTIgQEAKIAlib29sCQkJCXNodXRkb3duOwogCWJvb2wJCQkJc3VzcGVuZDsKIAlib29sCQkJCW5lZWRfZG1hMzI7Ci0JYm9vbAkJCQluZXdfaW5pdF9wYXRoOwogCWJvb2wJCQkJYWNjZWxfd29ya2luZzsKIAlzdHJ1Y3QgcmFkZW9uX3N1cmZhY2VfcmVnIHN1cmZhY2VfcmVnc1tSQURFT05fR0VNX01BWF9TVVJGQUNFU107CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICptZV9mdzsJLyogYWxsIGZhbWlseSBNRSBmaXJtd2FyZSAqLwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcGZwX2Z3OwkvKiByNi83MDAgUEZQIGZpcm13YXJlICovCiAJc3RydWN0IHI2MDBfYmxpdCByNjAwX2JsaXQ7CisJaW50IG1zaV9lbmFibGVkOyAvKiBtc2kgZW5hYmxlZCAqLwogfTsKIAogaW50IHJhZGVvbl9kZXZpY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKQEAgLTg5NiwyOCArOTQ2LDE0IEBACiAjZGVmaW5lIHJhZGVvbl9yZXN1bWUocmRldikgKHJkZXYpLT5hc2ljLT5yZXN1bWUoKHJkZXYpKQogI2RlZmluZSByYWRlb25fc3VzcGVuZChyZGV2KSAocmRldiktPmFzaWMtPnN1c3BlbmQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fY3NfcGFyc2UocCkgcmRldi0+YXNpYy0+Y3NfcGFyc2UoKHApKQotI2RlZmluZSByYWRlb25fZXJyYXRhKHJkZXYpIChyZGV2KS0+YXNpYy0+ZXJyYXRhKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX3ZyYW1faW5mbyhyZGV2KSAocmRldiktPmFzaWMtPnZyYW1faW5mbygocmRldikpCiAjZGVmaW5lIHJhZGVvbl92Z2Ffc2V0X3N0YXRlKHJkZXYsIHN0YXRlKSAocmRldiktPmFzaWMtPnZnYV9zZXRfc3RhdGUoKHJkZXYpLCAoc3RhdGUpKQogI2RlZmluZSByYWRlb25fZ3B1X3Jlc2V0KHJkZXYpIChyZGV2KS0+YXNpYy0+Z3B1X3Jlc2V0KChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX21jX2luaXQocmRldikgKHJkZXYpLT5hc2ljLT5tY19pbml0KChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX21jX2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT5tY19maW5pKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX3diX2luaXQocmRldikgKHJkZXYpLT5hc2ljLT53Yl9pbml0KChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX3diX2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT53Yl9maW5pKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX2dwdV9nYXJ0X2luaXQocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X2luaXQoKHJkZXYpKQotI2RlZmluZSByYWRlb25fZ3B1X2dhcnRfZmluaShyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfZmluaSgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfZW5hYmxlKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX2dhcnRfZGlzYWJsZShyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfZGlzYWJsZSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9nYXJ0X3RsYl9mbHVzaChyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfdGxiX2ZsdXNoKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgaSwgcCkgKHJkZXYpLT5hc2ljLT5nYXJ0X3NldF9wYWdlKChyZGV2KSwgKGkpLCAocCkpCi0jZGVmaW5lIHJhZGVvbl9jcF9pbml0KHJkZXYscnNpemUpIChyZGV2KS0+YXNpYy0+Y3BfaW5pdCgocmRldiksIChyc2l6ZSkpCi0jZGVmaW5lIHJhZGVvbl9jcF9maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+Y3BfZmluaSgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9jcF9kaXNhYmxlKHJkZXYpIChyZGV2KS0+YXNpYy0+Y3BfZGlzYWJsZSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9jcF9jb21taXQocmRldikgKHJkZXYpLT5hc2ljLT5jcF9jb21taXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fcmluZ19zdGFydChyZGV2KSAocmRldiktPmFzaWMtPnJpbmdfc3RhcnQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fcmluZ190ZXN0KHJkZXYpIChyZGV2KS0+YXNpYy0+cmluZ190ZXN0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3JpbmdfaWJfZXhlY3V0ZShyZGV2LCBpYikgKHJkZXYpLT5hc2ljLT5yaW5nX2liX2V4ZWN1dGUoKHJkZXYpLCAoaWIpKQotI2RlZmluZSByYWRlb25faWJfdGVzdChyZGV2KSAocmRldiktPmFzaWMtPmliX3Rlc3QoKHJkZXYpKQogI2RlZmluZSByYWRlb25faXJxX3NldChyZGV2KSAocmRldiktPmFzaWMtPmlycV9zZXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25faXJxX3Byb2Nlc3MocmRldikgKHJkZXYpLT5hc2ljLT5pcnFfcHJvY2VzcygocmRldikpCiAjZGVmaW5lIHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIocmRldiwgY3J0YykgKHJkZXYpLT5hc2ljLT5nZXRfdmJsYW5rX2NvdW50ZXIoKHJkZXYpLCAoY3J0YykpCkBAIC05MjUsNyArOTYxLDkgQEAKICNkZWZpbmUgcmFkZW9uX2NvcHlfYmxpdChyZGV2LCBzLCBkLCBucCwgZikgKHJkZXYpLT5hc2ljLT5jb3B5X2JsaXQoKHJkZXYpLCAocyksIChkKSwgKG5wKSwgKGYpKQogI2RlZmluZSByYWRlb25fY29weV9kbWEocmRldiwgcywgZCwgbnAsIGYpIChyZGV2KS0+YXNpYy0+Y29weV9kbWEoKHJkZXYpLCAocyksIChkKSwgKG5wKSwgKGYpKQogI2RlZmluZSByYWRlb25fY29weShyZGV2LCBzLCBkLCBucCwgZikgKHJkZXYpLT5hc2ljLT5jb3B5KChyZGV2KSwgKHMpLCAoZCksIChucCksIChmKSkKKyNkZWZpbmUgcmFkZW9uX2dldF9lbmdpbmVfY2xvY2socmRldikgKHJkZXYpLT5hc2ljLT5nZXRfZW5naW5lX2Nsb2NrKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3NldF9lbmdpbmVfY2xvY2socmRldiwgZSkgKHJkZXYpLT5hc2ljLT5zZXRfZW5naW5lX2Nsb2NrKChyZGV2KSwgKGUpKQorI2RlZmluZSByYWRlb25fZ2V0X21lbW9yeV9jbG9jayhyZGV2KSAocmRldiktPmFzaWMtPmdldF9tZW1vcnlfY2xvY2soKHJkZXYpKQogI2RlZmluZSByYWRlb25fc2V0X21lbW9yeV9jbG9jayhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9lbmdpbmVfY2xvY2soKHJkZXYpLCAoZSkpCiAjZGVmaW5lIHJhZGVvbl9zZXRfcGNpZV9sYW5lcyhyZGV2LCBsKSAocmRldiktPmFzaWMtPnNldF9wY2llX2xhbmVzKChyZGV2KSwgKGwpKQogI2RlZmluZSByYWRlb25fc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9jbG9ja19nYXRpbmcoKHJkZXYpLCAoZSkpCkBAIC05NDMsNiArOTgxLDggQEAKIGV4dGVybiB2b2lkIHJhZGVvbl9zY3JhdGNoX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX3N1cmZhY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHJhZGVvbl9jc19wYXJzZXJfaW5pdChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCByYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CiAKIC8qIHIxMDAscnYxMDAscnMxMDAscnYyMDAscnMyMDAscjIwMCxydjI1MCxyczMwMCxydjI4MCAqLwogc3RydWN0IHIxMDBfbWNfc2F2ZSB7CkBAIC05NzQsMjMgKzEwMTQsNzEgQEAKIGV4dGVybiB2b2lkIHIxMDBfd2JfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByMTAwX3diX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCByMTAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX3JiMmRfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX2NwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9jc190cmFja19jaGVja19wa3QzX2luZHhfYnVmZmVyKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJCQkJCXN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqKTsKK2V4dGVybiBpbnQgcjEwMF9jc19wYXJzZV9wYWNrZXQwKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkJY29uc3QgdW5zaWduZWQgKmF1dGgsIHVuc2lnbmVkIG4sCisJCQkJcmFkZW9uX3BhY2tldDBfY2hlY2tfdCBjaGVjayk7CitleHRlcm4gaW50IHIxMDBfY3NfcGFja2V0X3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkJdW5zaWduZWQgaWR4KTsKKworLyogcnYyMDAscnYyNTAscnYyODAgKi8KK2V4dGVybiB2b2lkIHIyMDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwICovCiBleHRlcm4gdm9pZCByMzAwX3NldF9yZWdfc2FmZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByMzAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjMwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9jbG9ja19zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjMwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyogcjQyMCxyNDIzLHJ2NDEwICovCitleHRlcm4gaW50IHI0MjBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdTMyIHI0MjBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZyk7CiBleHRlcm4gdm9pZCByNDIwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcsIHUzMiB2KTsKIGV4dGVybiBpbnQgcjQyMF9kZWJ1Z2ZzX3BpcGVzX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKiBydjUxNSAqLworc3RydWN0IHJ2NTE1X21jX3NhdmUgeworCXUzMiBkMXZnYV9jb250cm9sOworCXUzMiBkMnZnYV9jb250cm9sOworCXUzMiB2Z2FfcmVuZGVyX2NvbnRyb2w7CisJdTMyIHZnYV9oZHBfY29udHJvbDsKKwl1MzIgZDFjcnRjX2NvbnRyb2w7CisJdTMyIGQyY3J0Y19jb250cm9sOworfTsKIGV4dGVybiB2b2lkIHJ2NTE1X2JhbmR3aWR0aF9hdml2b191cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJ2NTE1X3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCBydjUxNV9tY19zdG9wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSAqc2F2ZSk7CitleHRlcm4gdm9pZCBydjUxNV9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKTsKK2V4dGVybiB2b2lkIHJ2NTE1X2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnY1MTVfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJ2NTE1X3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCisvKiByczQwMCAqLworZXh0ZXJuIGludCByczQwMF9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczQwMF9nYXJ0X2FkanVzdF9zaXplKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNDAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczQwMF9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCisvKiByczYwMCAqLworZXh0ZXJuIHZvaWQgcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM2MDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczYwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIHJzNjkwLCByczc0MCAqLwogZXh0ZXJuIHZvaWQgcnM2OTBfbGluZV9idWZmZXJfYWRqdXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LApAQCAtMTAwOSw4ICsxMDk3LDkgQEAKIGV4dGVybiB2b2lkIHI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiBpbnQgcjYwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHI2MDBfd2JfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfd2JfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByNjAwX3NjcmF0Y2hfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfYmxpdF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfYmxpdF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAppbmRleCA4OTY4Zjc4Li5jMThmYmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC0zMSwzOCArMzEsMzAgQEAKIC8qCiAgKiBjb21tb24gZnVuY3Rpb25zCiAgKi8KK3VpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgZW5nX2Nsb2NrKTsKIHZvaWQgcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKIAordWludDMyX3QgcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IGVuZ19jbG9jayk7Cit1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgbWVtX2Nsb2NrKTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CiAKIC8qCiAgKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwLHIyMDAscnYyNTAscnMzMDAscnYyODAKICAqLwotaW50IHIxMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjIwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIxMDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHVpbnQzMl90IHIxMDBfbW1fcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcjEwMF9tbV93cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOwotdm9pZCByMTAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF92Z2Ffc2V0X3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIHN0YXRlKTsKIGludCByMTAwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHUzMiByMTAwX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwotaW50IHIxMDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9wY2lfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9wY2lfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX3BjaV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfcGNpX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX3BjaV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7Ci1pbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwotdm9pZCByMTAwX2NwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX2NwX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX2NwX2NvbW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTgzLDMzICs3NSwyMSBAQAogaW50IHIxMDBfY2xlYXJfc3VyZmFjZV9yZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCByZWcpOwogdm9pZCByMTAwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpOwotaW50IHIxMDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9yaW5nX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHIxMDBfYXNpYyA9IHsKIAkuaW5pdCA9ICZyMTAwX2luaXQsCi0JLmVycmF0YSA9ICZyMTAwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnIxMDBfdnJhbV9pbmZvLAorCS5maW5pID0gJnIxMDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyMTAwX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZyMTAwX3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMTAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyMTAwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcjEwMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZyMTAwX3BjaV9nYXJ0X2luaXQsCi0JLmdhcnRfZmluaSA9ICZyMTAwX3BjaV9nYXJ0X2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnIxMDBfcGNpX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcjEwMF9wY2lfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjEwMF9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0xMTgsNyArOTgsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gTlVMTCwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0xMzEsNTUgKzExMywzOCBAQAogLyoKICAqIHIzMDAscjM1MCxydjM1MCxydjM4MAogICovCi1pbnQgcjMwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjMwMF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMzAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjMwMF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfZmVuY2VfcmluZ19lbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7Ci1pbnQgcjMwMF9jc19wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7Ci1pbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCBydjM3MF9wY2llX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7Ci11aW50MzJfdCBydjM3MF9wY2llX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7Ci12b2lkIHJ2MzcwX3BjaWVfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKLXZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcyk7Ci1pbnQgcjMwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKLQkJICB1aW50NjRfdCBzcmNfb2Zmc2V0LAotCQkgIHVpbnQ2NF90IGRzdF9vZmZzZXQsCi0JCSAgdW5zaWduZWQgbnVtX3BhZ2VzLAotCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKLQorZXh0ZXJuIGludCByMzAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjMwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjMwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMzAwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMzAwX3Jpbmdfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOworZXh0ZXJuIGludCByMzAwX2NzX3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKK2V4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKK2V4dGVybiB1aW50MzJfdCBydjM3MF9wY2llX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CitleHRlcm4gdm9pZCBydjM3MF9wY2llX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CitleHRlcm4gdm9pZCBydjM3MF9zZXRfcGNpZV9sYW5lcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKTsKK2V4dGVybiBpbnQgcjMwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCXVpbnQ2NF90IHNyY19vZmZzZXQsCisJCQl1aW50NjRfdCBkc3Rfb2Zmc2V0LAorCQkJdW5zaWduZWQgbnVtX3BhZ2VzLAorCQkJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByMzAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcjMwMF9pbml0LAotCS5lcnJhdGEgPSAmcjMwMF9lcnJhdGEsCi0JLnZyYW1faW5mbyA9ICZyMzAwX3ZyYW1faW5mbywKKwkuZmluaSA9ICZyMzAwX2ZpbmksCisJLnN1c3BlbmQgPSAmcjMwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcjMwMF9yZXN1bWUsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcjMwMF9tY19pbml0LAotCS5tY19maW5pID0gJnIzMDBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2luaXQgPSAmcjEwMF9wY2lfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcjEwMF9wY2lfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnIxMDBfcGNpX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMTg4LDcgKzE1Myw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKQEAgLTIwOSwyNiArMTc2LDE0IEBACiAJLmZpbmkgPSAmcjQyMF9maW5pLAogCS5zdXNwZW5kID0gJnI0MjBfc3VzcGVuZCwKIAkucmVzdW1lID0gJnI0MjBfcmVzdW1lLAotCS5lcnJhdGEgPSBOVUxMLAotCS52cmFtX2luZm8gPSBOVUxMLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gTlVMTCwKLQkubWNfZmluaSA9IE5VTEwsCi0JLndiX2luaXQgPSBOVUxMLAotCS53Yl9maW5pID0gTlVMTCwKLQkuZ2FydF9lbmFibGUgPSBOVUxMLAotCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9IE5VTEwsCi0JLmNwX2ZpbmkgPSBOVUxMLAotCS5jcF9kaXNhYmxlID0gTlVMTCwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSBOVUxMLAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMjM3LDcgKzE5Miw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMjUwLDQyICsyMDcsMjcgQEAKIC8qCiAgKiByczQwMCxyczQ4MAogICovCi12b2lkIHJzNDAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNDAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczQwMF9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNDAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM0MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM0MDBfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNDAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKIHVpbnQzMl90IHJzNDAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJzNDAwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNDAwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcjMwMF9pbml0LAotCS5lcnJhdGEgPSAmcnM0MDBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcnM0MDBfdnJhbV9pbmZvLAorCS5pbml0ID0gJnJzNDAwX2luaXQsCisJLmZpbmkgPSAmcnM0MDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyczQwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcnM0MDBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gJnJzNDAwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcnM0MDBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2luaXQgPSAmcnM0MDBfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcnM0MDBfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyczQwMF9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnJzNDAwX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnM0MDBfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM0MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMjk0LDcgKzIzNiw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0zMDcsMTggKzI1MSwxMyBAQAogLyoKICAqIHJzNjAwLgogICovCi1pbnQgcnM2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM2MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczYwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczYwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM2MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1MzIgcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7Ci1pbnQgcnM2MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByczYwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNjAwX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7CiB1aW50MzJfdCByczYwMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwpAQCAtMzI2LDI4ICsyNjUsMTcgQEAKIHZvaWQgcnM2MDBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNjAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcnM2MDBfaW5pdCwKLQkuZXJyYXRhID0gJnJzNjAwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnJzNjAwX3ZyYW1faW5mbywKKwkuZmluaSA9ICZyczYwMF9maW5pLAorCS5zdXNwZW5kID0gJnJzNjAwX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZyczYwMF9yZXN1bWUsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcnM2MDBfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZyczYwMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZyczYwMF9nYXJ0X2luaXQsCi0JLmdhcnRfZmluaSA9ICZyczYwMF9nYXJ0X2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnJzNjAwX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnM2MDBfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyczYwMF9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcnM2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcnM2MDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0zNTYsNyArMjg0LDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMzY3LDM3ICsyOTcsMjYgQEAKIC8qCiAgKiByczY5MCxyczc0MAogICovCi12b2lkIHJzNjkwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjkwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM2OTBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjkwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNjkwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByczY5MF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByczY5MF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNjkwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcnM2OTBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnM2OTBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnM2OTBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNjkwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcnM2MDBfaW5pdCwKLQkuZXJyYXRhID0gJnJzNjkwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnJzNjkwX3ZyYW1faW5mbywKKwkuaW5pdCA9ICZyczY5MF9pbml0LAorCS5maW5pID0gJnJzNjkwX2ZpbmksCisJLnN1c3BlbmQgPSAmcnM2OTBfc3VzcGVuZCwKKwkucmVzdW1lID0gJnJzNjkwX3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMzAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyczY5MF9tY19pbml0LAotCS5tY19maW5pID0gJnJzNjkwX21jX2ZpbmksCi0JLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9pbml0ID0gJnJzNDAwX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJzNDAwX2dhcnRfZmluaSwKLQkuZ2FydF9lbmFibGUgPSAmcnM0MDBfZ2FydF9lbmFibGUsCi0JLmdhcnRfZGlzYWJsZSA9ICZyczQwMF9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJzNDAwX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNDAwX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAotCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKLQkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCiAJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZyMzAwX3Jpbmdfc3RhcnQsCiAJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyczYwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyczYwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnJzNjAwX2dldF92YmxhbmtfY291bnRlciwKQEAgLTQwNiw3ICszMjUsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjMwMF9jb3B5X2RtYSwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKQEAgLTQyMCw0MSArMzQxLDI5IEBACiAgKiBydjUxNQogICovCiBpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJ2NTE1X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnY1MTVfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcnY1MTVfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnY1MTVfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnY1MTVfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1aW50MzJfdCBydjUxNV9wY2llX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJ2NTE1X3BjaWVfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcnY1MTVfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBydjUxNV9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcnY1MTVfYXNpYyA9IHsKIAkuaW5pdCA9ICZydjUxNV9pbml0LAotCS5lcnJhdGEgPSAmcnY1MTVfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcnY1MTVfdnJhbV9pbmZvLAorCS5maW5pID0gJnJ2NTE1X2ZpbmksCisJLnN1c3BlbmQgPSAmcnY1MTVfc3VzcGVuZCwKKwkucmVzdW1lID0gJnJ2NTE1X3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZydjUxNV9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcnY1MTVfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZydjUxNV9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcnY1MTVfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtNDYzLDcgKzM3Miw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtNDc2LDM1ICszODcsMjEgQEAKIC8qCiAgKiByNTIwLHJ2NTMwLHJ2NTYwLHJ2NTcwLHI1ODAKICAqLwotdm9pZCByNTIwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI1MjBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByNTIwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNTIwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNTIwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHI1MjBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjUyMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNTIwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcnY1MTVfaW5pdCwKLQkuZXJyYXRhID0gJnI1MjBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcjUyMF92cmFtX2luZm8sCisJLmluaXQgPSAmcjUyMF9pbml0LAorCS5maW5pID0gJnJ2NTE1X2ZpbmksCisJLnN1c3BlbmQgPSAmcnY1MTVfc3VzcGVuZCwKKwkucmVzdW1lID0gJnI1MjBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnJ2NTE1X2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyNTIwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcjUyMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcnY1MTVfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtNTEzLDEzICs0MTAsMTUgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHIxMDBfY2xlYXJfc3VyZmFjZV9yZWcsCi0JLmJhbmR3aWR0aF91cGRhdGUgPSAmcjUyMF9iYW5kd2lkdGhfdXBkYXRlLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCiB9OwogCiAvKgpAQCAtNTUyLDM3ICs0NTEsMjMgQEAKIAkJCSB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IG9ial9zaXplKTsKIGludCByNjAwX2NsZWFyX3N1cmZhY2VfcmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgcmVnKTsKIHZvaWQgcjYwMF9yaW5nX2liX2V4ZWN1dGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKLWludCByNjAwX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHI2MDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByNjAwX2NvcHlfYmxpdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJICAgdWludDY0X3Qgc3JjX29mZnNldCwgdWludDY0X3QgZHN0X29mZnNldCwKIAkJICAgdW5zaWduZWQgbnVtX3BhZ2VzLCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcjYwMF9hc2ljID0gewotCS5lcnJhdGEgPSBOVUxMLAogCS5pbml0ID0gJnI2MDBfaW5pdCwKIAkuZmluaSA9ICZyNjAwX2ZpbmksCiAJLnN1c3BlbmQgPSAmcjYwMF9zdXNwZW5kLAogCS5yZXN1bWUgPSAmcjYwMF9yZXN1bWUsCiAJLmNwX2NvbW1pdCA9ICZyNjAwX2NwX2NvbW1pdCwKLQkudnJhbV9pbmZvID0gTlVMTCwKIAkudmdhX3NldF9zdGF0ZSA9ICZyNjAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyNjAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9IE5VTEwsCi0JLm1jX2ZpbmkgPSBOVUxMLAotCS53Yl9pbml0ID0gJnI2MDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyNjAwX3diX2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gTlVMTCwKLQkuZ2FydF9kaXNhYmxlID0gTlVMTCwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSBOVUxMLAotCS5jcF9maW5pID0gTlVMTCwKLQkuY3BfZGlzYWJsZSA9IE5VTEwsCi0JLnJpbmdfc3RhcnQgPSBOVUxMLAogCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyNjAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjYwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyNjAwX2lycV9wcm9jZXNzLAogCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjYwMF9mZW5jZV9yaW5nX2VtaXQsCkBAIC01OTAsMTMgKzQ3NSwxNSBAQAogCS5jb3B5X2JsaXQgPSAmcjYwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnI2MDBfY29weV9ibGl0LAogCS5jb3B5ID0gJnI2MDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByNjAwX3NldF9zdXJmYWNlX3JlZywKIAkuY2xlYXJfc3VyZmFjZV9yZWcgPSByNjAwX2NsZWFyX3N1cmZhY2VfcmVnLAotCS5iYW5kd2lkdGhfdXBkYXRlID0gJnI1MjBfYmFuZHdpZHRoX3VwZGF0ZSwKKwkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZydjUxNV9iYW5kd2lkdGhfdXBkYXRlLAogfTsKIAogLyoKQEAgLTYwOSwzMCArNDk2LDE3IEBACiBpbnQgcnY3NzBfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyBydjc3MF9hc2ljID0gewotCS5lcnJhdGEgPSBOVUxMLAogCS5pbml0ID0gJnJ2NzcwX2luaXQsCiAJLmZpbmkgPSAmcnY3NzBfZmluaSwKIAkuc3VzcGVuZCA9ICZydjc3MF9zdXNwZW5kLAogCS5yZXN1bWUgPSAmcnY3NzBfcmVzdW1lLAogCS5jcF9jb21taXQgPSAmcjYwMF9jcF9jb21taXQsCi0JLnZyYW1faW5mbyA9IE5VTEwsCiAJLmdwdV9yZXNldCA9ICZydjc3MF9ncHVfcmVzZXQsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjYwMF92Z2Ffc2V0X3N0YXRlLAotCS5tY19pbml0ID0gTlVMTCwKLQkubWNfZmluaSA9IE5VTEwsCi0JLndiX2luaXQgPSAmcjYwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnI2MDBfd2JfZmluaSwKLQkuZ2FydF9lbmFibGUgPSBOVUxMLAotCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9IE5VTEwsCi0JLmNwX2ZpbmkgPSBOVUxMLAotCS5jcF9kaXNhYmxlID0gTlVMTCwKLQkucmluZ19zdGFydCA9IE5VTEwsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnI2MDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnI2MDBfaXJxX3Byb2Nlc3MsCiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyNjAwX2ZlbmNlX3JpbmdfZW1pdCwKQEAgLTY0MCwxMyArNTE0LDE1IEBACiAJLmNvcHlfYmxpdCA9ICZyNjAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjYwMF9jb3B5X2JsaXQsCiAJLmNvcHkgPSAmcjYwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHI2MDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcsCi0JLmJhbmR3aWR0aF91cGRhdGUgPSAmcjUyMF9iYW5kd2lkdGhfdXBkYXRlLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCmluZGV4IDc0Mzc0MjEuLjJlZDg4YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwpAQCAtNDYsNyArNDYsOCBAQAogCQkJICB1aW50MzJfdCBzdXBwb3J0ZWRfZGV2aWNlLAogCQkJICBpbnQgY29ubmVjdG9yX3R5cGUsCiAJCQkgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMsCi0JCQkgIGJvb2wgbGlua2IsIHVpbnQzMl90IGlncF9sYW5lX2luZm8pOworCQkJICBib29sIGxpbmtiLCB1aW50MzJfdCBpZ3BfbGFuZV9pbmZvLAorCQkJICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogLyogZnJvbSByYWRlb25fbGVnYWN5X2VuY29kZXIuYyAqLwogZXh0ZXJuIHZvaWQKQEAgLTE5Myw2ICsxOTQsMjMgQEAKIAlEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQKIH07CiAKK2NvbnN0IHVpbnQxNl90IHN1cHBvcnRlZF9kZXZpY2VzX2Nvbm5lY3Rvcl9vYmplY3RfaWRfY29udmVydFtdID0geworCUNPTk5FQ1RPUl9PQkpFQ1RfSURfTk9ORSwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSwgLyogbm90IGFsbCBib2FyZHMgc3VwcG9ydCBETCAqLworCUNPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9ELCAvKiBub3QgYWxsIGJvYXJkcyBzdXBwb3J0IERMICovCisJQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EsIC8qIHRlY2huaWNhbGx5IERWSS1BICovCisJQ09OTkVDVE9SX09CSkVDVF9JRF9DT01QT1NJVEUsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8sCisJQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfOVBJTl9ESU4sCisJQ09OTkVDVE9SX09CSkVDVF9JRF85UElOX0RJTiwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JULAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0EsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9IRE1JX1RZUEVfQiwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTworfTsKKwogY29uc3QgaW50IG9iamVjdF9jb25uZWN0b3JfY29udmVydFtdID0gewogCURSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duLAogCURSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLApAQCAtMjI5LDcgKzI0Nyw3IEBACiAJQVRPTV9PQkpFQ1RfSEVBREVSICpvYmpfaGVhZGVyOwogCWludCBpLCBqLCBwYXRoX3NpemUsIGRldmljZV9zdXBwb3J0OwogCWludCBjb25uZWN0b3JfdHlwZTsKLQl1aW50MTZfdCBpZ3BfbGFuZV9pbmZvLCBjb25uX2lkOworCXVpbnQxNl90IGlncF9sYW5lX2luZm8sIGNvbm5faWQsIGNvbm5lY3Rvcl9vYmplY3RfaWQ7CiAJYm9vbCBsaW5rYjsKIAlzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjIGRkY19idXM7CiAKQEAgLTI3MiwxNSArMjkwLDEzIEBACiAJCQkgICAgKGxlMTZfdG9fY3B1KHBhdGgtPnVzQ29ubk9iamVjdElkKSAmCiAJCQkgICAgIE9CSkVDVF9UWVBFX01BU0spID4+IE9CSkVDVF9UWVBFX1NISUZUOwogCi0JCQlpZiAoKGxlMTZfdG9fY3B1KHBhdGgtPnVzRGV2aWNlVGFnKSA9PQotCQkJICAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkKLQkJCSAgICB8fCAobGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpID09Ci0JCQkJQVRPTV9ERVZJQ0VfVFYyX1NVUFBPUlQpCi0JCQkgICAgfHwgKGxlMTZfdG9fY3B1KHBhdGgtPnVzRGV2aWNlVGFnKSA9PQotCQkJCUFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQkJLyogVE9ETyBDViBzdXBwb3J0ICovCisJCQlpZiAobGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpID09CisJCQkJQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgJiYKKwkJCS8qIElHUCBjaGlwcyAqLworCQkJaWYgKChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApICYmCiAJCQkgICAgKGNvbl9vYmpfaWQgPT0KIAkJCSAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9QQ0lFX0NPTk5FQ1RPUikpIHsKIAkJCQl1aW50MTZfdCBpZ3Bfb2Zmc2V0ID0gMDsKQEAgLTMxNCw2ICszMzAsNyBAQAogCQkJCQkJY29ubmVjdG9yX3R5cGUgPQogCQkJCQkJICAgIG9iamVjdF9jb25uZWN0b3JfY29udmVydAogCQkJCQkJICAgIFtjdF07CisJCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY3Q7CiAJCQkJCQlpZ3BfbGFuZV9pbmZvID0KIAkJCQkJCSAgICBzbG90X2NvbmZpZyAmIDB4ZmZmZjsKIAkJCQkJfSBlbHNlCkBAIC0zMjQsNiArMzQxLDcgQEAKIAkJCQlpZ3BfbGFuZV9pbmZvID0gMDsKIAkJCQljb25uZWN0b3JfdHlwZSA9CiAJCQkJICAgIG9iamVjdF9jb25uZWN0b3JfY29udmVydFtjb25fb2JqX2lkXTsKKwkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY29uX29ial9pZDsKIAkJCX0KIAogCQkJaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duKQpAQCAtNDI4LDcgKzQ0Niw4IEBACiAJCQkJCQkgIGxlMTZfdG9fY3B1KHBhdGgtPgogCQkJCQkJCSAgICAgIHVzRGV2aWNlVGFnKSwKIAkJCQkJCSAgY29ubmVjdG9yX3R5cGUsICZkZGNfYnVzLAotCQkJCQkJICBsaW5rYiwgaWdwX2xhbmVfaW5mbyk7CisJCQkJCQkgIGxpbmtiLCBpZ3BfbGFuZV9pbmZvLAorCQkJCQkJICBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogCQl9CiAJfQpAQCAtNDM4LDYgKzQ1Nyw0NSBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdWludDE2X3QgYXRvbWJpb3NfZ2V0X2Nvbm5lY3Rvcl9vYmplY3RfaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSBpbnQgY29ubmVjdG9yX3R5cGUsCisJCQkJCQkgdWludDE2X3QgZGV2aWNlcykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCXJldHVybiBzdXBwb3J0ZWRfZGV2aWNlc19jb25uZWN0b3Jfb2JqZWN0X2lkX2NvbnZlcnQKKwkJCVtjb25uZWN0b3JfdHlwZV07CisJfSBlbHNlIGlmICgoKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSB8fAorCQkgICAgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEKSkgJiYKKwkJICAgKGRldmljZXMgJiBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQpKSAgeworCQlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwkJc3RydWN0IGF0b21fY29udGV4dCAqY3R4ID0gbW9kZV9pbmZvLT5hdG9tX2NvbnRleHQ7CisJCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIFhUTURTX0luZm8pOworCQl1aW50MTZfdCBzaXplLCBkYXRhX29mZnNldDsKKwkJdWludDhfdCBmcmV2LCBjcmV2OworCQlBVE9NX1hUTURTX0lORk8gKnh0bWRzOworCisJCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIoY3R4LCBpbmRleCwgJnNpemUsICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KTsKKwkJeHRtZHMgPSAoQVRPTV9YVE1EU19JTkZPICopKGN0eC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKKworCQlpZiAoeHRtZHMtPnVjU3VwcG9ydGVkTGluayAmIEFUT01fWFRNRFNfU1VQUE9SVEVEX0RVQUxMSU5LKSB7CisJCQlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JOworCQkJZWxzZQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRDsKKwkJfSBlbHNlIHsKKwkJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRDsKKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiBzdXBwb3J0ZWRfZGV2aWNlc19jb25uZWN0b3Jfb2JqZWN0X2lkX2NvbnZlcnQKKwkJCVtjb25uZWN0b3JfdHlwZV07CisJfQorfQorCiBzdHJ1Y3QgYmlvc19jb25uZWN0b3IgewogCWJvb2wgdmFsaWQ7CiAJdWludDE2X3QgbGluZV9tdXg7CkBAIC01OTYsMTQgKzY1NCwyMCBAQAogCiAJLyogYWRkIHRoZSBjb25uZWN0b3JzICovCiAJZm9yIChpID0gMDsgaSA8IEFUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0U7IGkrKykgewotCQlpZiAoYmlvc19jb25uZWN0b3JzW2ldLnZhbGlkKQorCQlpZiAoYmlvc19jb25uZWN0b3JzW2ldLnZhbGlkKSB7CisJCQl1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkID0KKwkJCQlhdG9tYmlvc19nZXRfY29ubmVjdG9yX29iamVjdF9pZChkZXYsCisJCQkJCQkgICAgICBiaW9zX2Nvbm5lY3RvcnNbaV0uY29ubmVjdG9yX3R5cGUsCisJCQkJCQkgICAgICBiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcyk7CiAJCQlyYWRlb25fYWRkX2F0b21fY29ubmVjdG9yKGRldiwKIAkJCQkJCSAgYmlvc19jb25uZWN0b3JzW2ldLmxpbmVfbXV4LAogCQkJCQkJICBiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcywKIAkJCQkJCSAgYmlvc19jb25uZWN0b3JzW2ldLgogCQkJCQkJICBjb25uZWN0b3JfdHlwZSwKIAkJCQkJCSAgJmJpb3NfY29ubmVjdG9yc1tpXS5kZGNfYnVzLAotCQkJCQkJICBmYWxzZSwgMCk7CisJCQkJCQkgIGZhbHNlLCAwLAorCQkJCQkJICBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKKwkJfQogCX0KIAogCXJhZGVvbl9saW5rX2VuY29kZXJfY29ubmVjdG9yKGRldik7CkBAIC02NDQsOCArNzA4LDEyIEBACiAJCSAgICBsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvLnVzUmVmZXJlbmNlQ2xvY2spOwogCQlwMXBsbC0+cmVmZXJlbmNlX2RpdiA9IDA7CiAKLQkJcDFwbGwtPnBsbF9vdXRfbWluID0KLQkJICAgIGxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm8udXNNaW5QaXhlbENsb2NrUExMX091dHB1dCk7CisJCWlmIChjcmV2IDwgMikKKwkJCXAxcGxsLT5wbGxfb3V0X21pbiA9CisJCQkJbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c01pblBpeGVsQ2xvY2tQTExfT3V0cHV0KTsKKwkJZWxzZQorCQkJcDFwbGwtPnBsbF9vdXRfbWluID0KKwkJCQlsZTMyX3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzEyLnVsTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQpOwogCQlwMXBsbC0+cGxsX291dF9tYXggPQogCQkgICAgbGUzMl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0KTsKIApAQCAtNjU0LDYgKzcyMiwxNiBAQAogCQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDY0ODAwOwogCQkJZWxzZQogCQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDIwMDAwOworCQl9IGVsc2UgaWYgKHAxcGxsLT5wbGxfb3V0X21pbiA+IDY0ODAwKSB7CisJCQkvKiBMaW1pdGluZyB0aGUgcGxsIG91dHB1dCByYW5nZSBpcyBhIGdvb2QgdGhpbmcgZ2VuZXJhbGx5IGFzCisJCQkgKiBpdCBsaW1pdHMgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBwbGwgY29tYmluYXRpb25zIGZvciBhIGdpdmVuCisJCQkgKiBmcmVxdWVuY3kgcHJlc3VtYWJseSB0byB0aGUgb25lcyB0aGF0IHdvcmsgYmVzdCBvbiBlYWNoIGNhcmQuCisJCQkgKiBIb3dldmVyLCBjZXJ0YWluIGR1YWxsaW5rIERWSSBtb25pdG9ycyBzZWVtIHRvIGxpa2UKKwkJCSAqIHBsbCBjb21iaW5hdGlvbnMgdGhhdCB3b3VsZCBiZSBsaW1pdGVkIGJ5IHRoaXMgYXQgbGVhc3Qgb24KKwkJCSAqIHByZS1EQ0UgMy4wIHI2eHggaGFyZHdhcmUuICBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgYWRqdXN0ZWQgcGVyCisJCQkgKiBmYW1pbHkuCisJCQkgKi8KKwkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDY0ODAwOwogCQl9CiAKIAkJcDFwbGwtPnBsbF9pbl9taW4gPQpAQCAtNzcwLDYgKzg0OCw0NiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIHN0cnVjdCByYWRlb25fYXRvbV9zcyAqcmFkZW9uX2F0b21iaW9zX2dldF9zc19pbmZvKHN0cnVjdAorCQkJCQkJCSAgcmFkZW9uX2VuY29kZXIKKwkJCQkJCQkgICplbmNvZGVyLAorCQkJCQkJCSAgaW50IGlkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgUFBMTF9TU19JbmZvKTsKKwl1aW50MTZfdCBkYXRhX29mZnNldDsKKwlzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0lORk8gKnNzX2luZm87CisJdWludDhfdCBmcmV2LCBjcmV2OworCXN0cnVjdCByYWRlb25fYXRvbV9zcyAqc3MgPSBOVUxMOworCisJaWYgKGlkID4gQVRPTV9NQVhfU1NfRU5UUlkpCisJCXJldHVybiBOVUxMOworCisJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsICZmcmV2LAorCQkJICAgICAgICZjcmV2LCAmZGF0YV9vZmZzZXQpOworCisJc3NfaW5mbyA9CisJICAgIChzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0lORk8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CisKKwlpZiAoc3NfaW5mbykgeworCQlzcyA9CisJCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2F0b21fc3MpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIXNzKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJc3MtPnBlcmNlbnRhZ2UgPSBsZTE2X3RvX2NwdShzc19pbmZvLT5hc1NTX0luZm9baWRdLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlKTsKKwkJc3MtPnR5cGUgPSBzc19pbmZvLT5hc1NTX0luZm9baWRdLnVjU3ByZWFkU3BlY3RydW1UeXBlOworCQlzcy0+c3RlcCA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTU19TdGVwOworCQlzcy0+ZGVsYXkgPSBzc19pbmZvLT5hc1NTX0luZm9baWRdLnVjU1NfRGVsYXk7CisJCXNzLT5yYW5nZSA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTU19SYW5nZTsKKwkJc3MtPnJlZmRpdiA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNSZWNvbW1lbmRlZFJlZl9EaXY7CisJfQorCXJldHVybiBzczsKK30KKwogdW5pb24gbHZkc19pbmZvIHsKIAlzdHJ1Y3QgX0FUT01fTFZEU19JTkZPIGluZm87CiAJc3RydWN0IF9BVE9NX0xWRFNfSU5GT19WMTIgaW5mb18xMjsKQEAgLTgwMSwyNyArOTE5LDMxIEBACiAJCWlmICghbHZkcykKIAkJCXJldHVybiBOVUxMOwogCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmRvdGNsb2NrID0KKwkJbHZkcy0+bmF0aXZlX21vZGUuY2xvY2sgPQogCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNQaXhDbGspICogMTA7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9CiAJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hBY3RpdmUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWQWN0aXZlKTsKLQkJbHZkcy0+bmF0aXZlX21vZGUuaGJsYW5rID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSEJsYW5raW5nX1RpbWUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5ob3ZlcnBsdXMgPQotCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIU3luY09mZnNldCk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmhzeW5jX3dpZHRoID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSFN5bmNXaWR0aCk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnZibGFuayA9Ci0JCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZCbGFua2luZ19UaW1lKTsKLQkJbHZkcy0+bmF0aXZlX21vZGUudm92ZXJwbHVzID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzVlN5bmNPZmZzZXQpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS52c3luY193aWR0aCA9Ci0JCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZTeW5jV2lkdGgpOworCQlsdmRzLT5uYXRpdmVfbW9kZS5odG90YWwgPSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hCbGFua2luZ19UaW1lKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfc3RhcnQgPSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hTeW5jT2Zmc2V0KTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfZW5kID0gbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIU3luY1dpZHRoKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudnRvdGFsID0gbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWQmxhbmtpbmdfVGltZSk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX3N0YXJ0ID0gbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWU3luY1dpZHRoKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfZW5kID0gbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWU3luY1dpZHRoKTsKIAkJbHZkcy0+cGFuZWxfcHdyX2RlbGF5ID0KIAkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby51c09mZkRlbGF5SW5Ncyk7CiAJCWx2ZHMtPmx2ZHNfbWlzYyA9IGx2ZHNfaW5mby0+aW5mby51Y0xWRFNfTWlzYzsKKwkJLyogc2V0IGNydGMgdmFsdWVzICovCisJCWRybV9tb2RlX3NldF9jcnRjaW5mbygmbHZkcy0+bmF0aXZlX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCisJCWx2ZHMtPnNzID0gcmFkZW9uX2F0b21iaW9zX2dldF9zc19pbmZvKGVuY29kZXIsIGx2ZHNfaW5mby0+aW5mby51Y1NTX0lkKTsKIAogCQllbmNvZGVyLT5uYXRpdmVfbW9kZSA9IGx2ZHMtPm5hdGl2ZV9tb2RlOwogCX0KQEAgLTg2MCw4ICs5ODIsNyBAQAogfQogCiBib29sIHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaW5kZXgsCi0JCQkJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiAqY3J0Y190aW1pbmcsCi0JCQkJaW50MzJfdCAqcGl4ZWxfY2xvY2spCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CiAJQVRPTV9BTkFMT0dfVFZfSU5GTyAqdHZfaW5mbzsKQEAgLTg2OSw3ICs5OTAsNyBAQAogCUFUT01fRFREX0ZPUk1BVCAqZHRkX3RpbWluZ3M7CiAJaW50IGRhdGFfaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBBbmFsb2dUVl9JbmZvKTsKIAl1OCBmcmV2LCBjcmV2OwotCXVpbnQxNl90IGRhdGFfb2Zmc2V0OworCXUxNiBkYXRhX29mZnNldCwgbWlzYzsKIAogCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQsIGRhdGFfaW5kZXgsIE5VTEwsICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KTsKIApAQCAtODc5LDI4ICsxMDAwLDM3IEBACiAJCWlmIChpbmRleCA+IE1BWF9TVVBQT1JURURfVFZfVElNSU5HKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCWNydGNfdGltaW5nLT51c0hfVG90YWwgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1RvdGFsKTsKLQkJY3J0Y190aW1pbmctPnVzSF9EaXNwID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9EaXNwKTsKLQkJY3J0Y190aW1pbmctPnVzSF9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNTdGFydCk7Ci0JCWNydGNfdGltaW5nLT51c0hfU3luY1dpZHRoID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX2h0b3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfVG90YWwpOworCQltb2RlLT5jcnRjX2hkaXNwbGF5ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9EaXNwKTsKKwkJbW9kZS0+Y3J0Y19oc3luY19zdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfU3luY1N0YXJ0KTsKKwkJbW9kZS0+Y3J0Y19oc3luY19lbmQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNTdGFydCkgKworCQkJbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jV2lkdGgpOwogCi0JCWNydGNfdGltaW5nLT51c1ZfVG90YWwgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1RvdGFsKTsKLQkJY3J0Y190aW1pbmctPnVzVl9EaXNwID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9EaXNwKTsKLQkJY3J0Y190aW1pbmctPnVzVl9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNTdGFydCk7Ci0JCWNydGNfdGltaW5nLT51c1ZfU3luY1dpZHRoID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX3Z0b3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfVG90YWwpOworCQltb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9EaXNwKTsKKwkJbW9kZS0+Y3J0Y192c3luY19zdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfU3luY1N0YXJ0KTsKKwkJbW9kZS0+Y3J0Y192c3luY19lbmQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNTdGFydCkgKworCQkJbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jV2lkdGgpOwogCi0JCWNydGNfdGltaW5nLT5zdXNNb2RlTWlzY0luZm8gPSB0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnN1c01vZGVNaXNjSW5mbzsKKwkJbW9kZS0+ZmxhZ3MgPSAwOworCQltaXNjID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOworCQlpZiAobWlzYyAmIEFUT01fVlNZTkNfUE9MQVJJVFkpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0hTWU5DX1BPTEFSSVRZKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7CisJCWlmIChtaXNjICYgQVRPTV9DT01QT1NJVEVTWU5DKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19DU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0lOVEVSTEFDRSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCQlpZiAobWlzYyAmIEFUT01fRE9VQkxFX0NMT0NLX01PREUpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47CiAKLQkJY3J0Y190aW1pbmctPnVjT3ZlcnNjYW5SaWdodCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuUmlnaHQpOwotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhbkxlZnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19PdmVyc2NhbkxlZnQpOwotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhbkJvdHRvbSA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuQm90dG9tKTsKLQkJY3J0Y190aW1pbmctPnVjT3ZlcnNjYW5Ub3AgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19PdmVyc2NhblRvcCk7Ci0JCSpwaXhlbF9jbG9jayA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNQaXhlbENsb2NrKSAqIDEwOworCQltb2RlLT5jbG9jayA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNQaXhlbENsb2NrKSAqIDEwOwogCiAJCWlmIChpbmRleCA9PSAxKSB7CiAJCQkvKiBQQUwgdGltaW5ncyBhcHBlYXIgdG8gaGF2ZSB3cm9uZyB2YWx1ZXMgZm9yIHRvdGFscyAqLwotCQkJY3J0Y190aW1pbmctPnVzSF9Ub3RhbCAtPSAxOwotCQkJY3J0Y190aW1pbmctPnVzVl9Ub3RhbCAtPSAxOworCQkJbW9kZS0+Y3J0Y19odG90YWwgLT0gMTsKKwkJCW1vZGUtPmNydGNfdnRvdGFsIC09IDE7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAyOgpAQCAtOTA5LDE3ICsxMDM5LDM2IEBACiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJZHRkX3RpbWluZ3MgPSAmdHZfaW5mb192MV8yLT5hTW9kZVRpbWluZ3NbaW5kZXhdOwotCQljcnRjX3RpbWluZy0+dXNIX1RvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQmxhbmtpbmdfVGltZSk7Ci0JCWNydGNfdGltaW5nLT51c0hfRGlzcCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpOwotCQljcnRjX3RpbWluZy0+dXNIX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpICsgbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNPZmZzZXQpOwotCQljcnRjX3RpbWluZy0+dXNIX1N5bmNXaWR0aCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hTeW5jV2lkdGgpOwotCQljcnRjX3RpbWluZy0+dXNWX1RvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQmxhbmtpbmdfVGltZSk7Ci0JCWNydGNfdGltaW5nLT51c1ZfRGlzcCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpOwotCQljcnRjX3RpbWluZy0+dXNWX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpICsgbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVlN5bmNPZmZzZXQpOwotCQljcnRjX3RpbWluZy0+dXNWX1N5bmNXaWR0aCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZTeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX2h0b3RhbCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpICsKKwkJCWxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hCbGFua2luZ19UaW1lKTsKKwkJbW9kZS0+Y3J0Y19oZGlzcGxheSA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpOworCQltb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNPZmZzZXQpOworCQltb2RlLT5jcnRjX2hzeW5jX2VuZCA9IG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNXaWR0aCk7CiAKLQkJY3J0Y190aW1pbmctPnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOwotCQkqcGl4ZWxfY2xvY2sgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNQaXhDbGspICogMTA7CisJCW1vZGUtPmNydGNfdnRvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkJsYW5raW5nX1RpbWUpOworCQltb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSk7CisJCW1vZGUtPmNydGNfdnN5bmNfc3RhcnQgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKSArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY09mZnNldCk7CisJCW1vZGUtPmNydGNfdnN5bmNfZW5kID0gbW9kZS0+Y3J0Y192c3luY19zdGFydCArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY1dpZHRoKTsKKworCQltb2RlLT5mbGFncyA9IDA7CisJCW1pc2MgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzKTsKKwkJaWYgKG1pc2MgJiBBVE9NX1ZTWU5DX1BPTEFSSVRZKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OVlNZTkM7CisJCWlmIChtaXNjICYgQVRPTV9IU1lOQ19QT0xBUklUWSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOworCQlpZiAobWlzYyAmIEFUT01fQ09NUE9TSVRFU1lOQykKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfQ1NZTkM7CisJCWlmIChtaXNjICYgQVRPTV9JTlRFUkxBQ0UpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRTsKKwkJaWYgKG1pc2MgJiBBVE9NX0RPVUJMRV9DTE9DS19NT0RFKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19EQkxTQ0FOOworCisJCW1vZGUtPmNsb2NrID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzUGl4Q2xrKSAqIDEwOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIHRydWU7CkBAIC05ODQsNiArMTEzMywyNCBAQAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogfQogCit1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCUdFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiBhcmdzOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEdldEVuZ2luZUNsb2NrKTsKKworCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOworCXJldHVybiBhcmdzLnVsUmV0dXJuRW5naW5lQ2xvY2s7Cit9CisKK3VpbnQzMl90IHJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJR0VUX01FTU9SWV9DTE9DS19QU19BTExPQ0FUSU9OIGFyZ3M7CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgR2V0TWVtb3J5Q2xvY2spOworCisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJcmV0dXJuIGFyZ3MudWxSZXR1cm5NZW1vcnlDbG9jazsKK30KKwogdm9pZCByYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJCSAgdWludDMyX3QgZW5nX2Nsb2NrKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmVuY2htYXJrLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYwppbmRleCAyZTkzOGY3Li4xMGJkNTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYwpAQCAtNjMsNyArNjMsNyBAQAogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQotCQlyID0gcmFkZW9uX2NvcHlfZG1hKHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5X2RtYShyZGV2LCBzYWRkciwgZGFkZHIsIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwgZmVuY2UpOwogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQpAQCAtODgsNyArODgsNyBAQAogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQotCQlyID0gcmFkZW9uX2NvcHlfYmxpdChyZGV2LCBzYWRkciwgZGFkZHIsIHNpemUgLyA0MDk2LCBmZW5jZSk7CisJCXIgPSByYWRlb25fY29weV9ibGl0KHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLCBmZW5jZSk7CiAJCWlmIChyKSB7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKaW5kZXggOTZlMzdhNi4uOTA2OTIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYwpAQCAtMzMsMTIgKzMzLDQ3IEBACiAvKgogICogQklPUy4KICAqLworCisvKiBJZiB5b3UgYm9vdCBhbiBJR1AgYm9hcmQgd2l0aCBhIGRpc2NyZXRlIGNhcmQgYXMgdGhlIHByaW1hcnksCisgKiB0aGUgSUdQIHJvbSBpcyBub3QgYWNjZXNzaWJsZSB2aWEgdGhlIHJvbSBiYXIgYXMgdGhlIElHUCByb20gaXMKKyAqIHBhcnQgb2YgdGhlIHN5c3RlbSBiaW9zLiAgT24gYm9vdCwgdGhlIHN5c3RlbSBiaW9zIHB1dHMgYQorICogY29weSBvZiB0aGUgaWdwIHJvbSBhdCB0aGUgc3RhcnQgb2YgdnJhbSBpZiBhIGRpc2NyZXRlIGNhcmQgaXMKKyAqIHByZXNlbnQuCisgKi8KK3N0YXRpYyBib29sIGlncF9yZWFkX2Jpb3NfZnJvbV92cmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVpbnQ4X3QgX19pb21lbSAqYmlvczsKKwlyZXNvdXJjZV9zaXplX3QgdnJhbV9iYXNlOworCXJlc291cmNlX3NpemVfdCBzaXplID0gMjU2ICogMTAyNDsgLyogPz8/ICovCisKKwlyZGV2LT5iaW9zID0gTlVMTDsKKwl2cmFtX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOworCWJpb3MgPSBpb3JlbWFwKHZyYW1fYmFzZSwgc2l6ZSk7CisJaWYgKCFiaW9zKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoc2l6ZSA9PSAwIHx8IGJpb3NbMF0gIT0gMHg1NSB8fCBiaW9zWzFdICE9IDB4YWEpIHsKKwkJaW91bm1hcChiaW9zKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZGV2LT5iaW9zID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocmRldi0+YmlvcyA9PSBOVUxMKSB7CisJCWlvdW5tYXAoYmlvcyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJbWVtY3B5KHJkZXYtPmJpb3MsIGJpb3MsIHNpemUpOworCWlvdW5tYXAoYmlvcyk7CisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBib29sIHJhZGVvbl9yZWFkX2Jpb3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDhfdCBfX2lvbWVtICpiaW9zOwogCXNpemVfdCBzaXplOwogCiAJcmRldi0+YmlvcyA9IE5VTEw7CisJLyogWFhYOiBzb21lIGNhcmRzIG1heSByZXR1cm4gMCBmb3Igcm9tIHNpemU/IGRkeCBoYXMgYSB3b3JrYXJvdW5kICovCiAJYmlvcyA9IHBjaV9tYXBfcm9tKHJkZXYtPnBkZXYsICZzaXplKTsKIAlpZiAoIWJpb3MpIHsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzQxLDcgKzM3Niw5IEBACiAKIHN0YXRpYyBib29sIHJhZGVvbl9yZWFkX2Rpc2FibGVkX2Jpb3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApCisJCXJldHVybiBpZ3BfcmVhZF9iaW9zX2Zyb21fdnJhbShyZGV2KTsKKwllbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCkKIAkJcmV0dXJuIHI3MDBfcmVhZF9kaXNhYmxlZF9iaW9zKHJkZXYpOwogCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCiAJCXJldHVybiByNjAwX3JlYWRfZGlzYWJsZWRfYmlvcyhyZGV2KTsKQEAgLTM1Niw3ICszOTMsMTIgQEAKIAlib29sIHI7CiAJdWludDE2X3QgdG1wOwogCi0JciA9IHJhZGVvbl9yZWFkX2Jpb3MocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQlyID0gaWdwX3JlYWRfYmlvc19mcm9tX3ZyYW0ocmRldik7CisJCWlmIChyID09IGZhbHNlKQorCQkJciA9IHJhZGVvbl9yZWFkX2Jpb3MocmRldik7CisJfSBlbHNlCisJCXIgPSByYWRlb25fcmVhZF9iaW9zKHJkZXYpOwogCWlmIChyID09IGZhbHNlKSB7CiAJCXIgPSByYWRlb25fcmVhZF9kaXNhYmxlZF9iaW9zKHJkZXYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKaW5kZXggMTUyZWVmMS4uYTgxMzU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJhdG9tLmgiCiAKIC8qIDEwIGtoeiAqLwotc3RhdGljIHVpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3VpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqc3BsbCA9ICZyZGV2LT5jbG9jay5zcGxsOwogCXVpbnQzMl90IGZiX2RpdiwgcmVmX2RpdiwgcG9zdF9kaXYsIHNjbGs7CkBAIC00MTEsNyArNDExLDcgQEAKIAkJCQkJUjMwMF9QSVhDTEtfVFJBTlNfQUxXQVlTX09OYiB8CiAJCQkJCVIzMDBfUElYQ0xLX1RWT19BTFdBWVNfT05iIHwKIAkJCQkJUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIgfAotCQkJCQlSMzAwX1AyRzJDTEtfQUxXQVlTX09OYik7CisJCQkJCVIzMDBfUDJHMkNMS19EQUNfQUxXQVlTX09OYik7CiAJCQkJV1JFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMLCB0bXApOwogCQkJfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjM1MCkgewogCQkJCXRtcCA9IFJSRUczMl9QTEwoUjMwMF9TQ0xLX0NOVEwyKTsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCQkJCQlSMzAwX1BJWENMS19UUkFOU19BTFdBWVNfT05iIHwKIAkJCQkJUjMwMF9QSVhDTEtfVFZPX0FMV0FZU19PTmIgfAogCQkJCQlSMzAwX1AyRzJDTEtfQUxXQVlTX09OYiB8Ci0JCQkJCVIzMDBfUDJHMkNMS19BTFdBWVNfT05iKTsKKwkJCQkJUjMwMF9QMkcyQ0xLX0RBQ19BTFdBWVNfT05iKTsKIAkJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHRtcCk7CiAKIAkJCQl0bXAgPSBSUkVHMzJfUExMKFJBREVPTl9NQ0xLX01JU0MpOwpAQCAtNjU0LDcgKzY1NCw3IEBACiAJCQkJIFIzMDBfUElYQ0xLX1RSQU5TX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX1BJWENMS19UVk9fQUxXQVlTX09OYiB8CiAJCQkJIFIzMDBfUDJHMkNMS19BTFdBWVNfT05iIHwKLQkJCQkgUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIgfAorCQkJCSBSMzAwX1AyRzJDTEtfREFDX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX0RJU1BfREFDX1BJWENMS19EQUMyX0JMQU5LX09GRik7CiAJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHRtcCk7CiAJCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlYzNTApIHsKQEAgLTcwNSw3ICs3MDUsNyBAQAogCQkJCSBSMzAwX1BJWENMS19UUkFOU19BTFdBWVNfT05iIHwKIAkJCQkgUjMwMF9QSVhDTEtfVFZPX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX1AyRzJDTEtfQUxXQVlTX09OYiB8Ci0JCQkJIFIzMDBfUDJHMkNMS19BTFdBWVNfT05iIHwKKwkJCQkgUjMwMF9QMkcyQ0xLX0RBQ19BTFdBWVNfT05iIHwKIAkJCQkgUjMwMF9ESVNQX0RBQ19QSVhDTEtfREFDMl9CTEFOS19PRkYpOwogCQkJV1JFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMLCB0bXApOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IDc0ODI2NWEuLjUyNTNjYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTQ5LDcgKzQ5LDggQEAKIAkJCSAgICB1aW50MzJfdCBjb25uZWN0b3JfaWQsCiAJCQkgICAgdWludDMyX3Qgc3VwcG9ydGVkX2RldmljZSwKIAkJCSAgICBpbnQgY29ubmVjdG9yX3R5cGUsCi0JCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cyk7CisJCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKKwkJCSAgICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogLyogZnJvbSByYWRlb25fbGVnYWN5X2VuY29kZXIuYyAqLwogZXh0ZXJuIHZvaWQKQEAgLTgwOCwyNSArODA5LDI1IEBACiAJbHZkcy0+cGFuZWxfYmxvbl9kZWxheSA9IChsdmRzX3NzX2dlbl9jbnRsID4+IFJBREVPTl9MVkRTX1BXUlNFUV9ERUxBWTJfU0hJRlQpICYgMHhmOwogCiAJaWYgKGZwX3ZlcnRfc3RyZXRjaCAmIFJBREVPTl9WRVJUX1NUUkVUQ0hfRU5BQkxFKQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgKChmcF92ZXJ0X3N0cmV0Y2ggJiBSQURFT05fVkVSVF9QQU5FTF9TSVpFKSA+PgogCQkgICAgIFJBREVPTl9WRVJUX1BBTkVMX1NISUZUKSArIDE7CiAJZWxzZQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgKFJSRUczMihSQURFT05fQ1JUQ19WX1RPVEFMX0RJU1ApID4+IDE2KSArIDE7CiAKIAlpZiAoZnBfaG9yel9zdHJldGNoICYgUkFERU9OX0hPUlpfU1RSRVRDSF9FTkFCTEUpCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9CiAJCSAgICAoKChmcF9ob3J6X3N0cmV0Y2ggJiBSQURFT05fSE9SWl9QQU5FTF9TSVpFKSA+PgogCQkgICAgICBSQURFT05fSE9SWl9QQU5FTF9TSElGVCkgKyAxKSAqIDg7CiAJZWxzZQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPQogCQkgICAgKChSUkVHMzIoUkFERU9OX0NSVENfSF9UT1RBTF9ESVNQKSA+PiAxNikgKyAxKSAqIDg7CiAKLQlpZiAoKGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPCA2NDApIHx8Ci0JICAgIChsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzIDwgNDgwKSkgewotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzID0gNjQwOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0gNDgwOworCWlmICgobHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPCA2NDApIHx8CisJICAgIChsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA8IDQ4MCkpIHsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPSA2NDA7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5ID0gNDgwOwogCX0KIAogCXBwbGxfZGl2X3NlbCA9IFJSRUc4KFJBREVPTl9DTE9DS19DTlRMX0lOREVYICsgMSkgJiAweDM7CkBAIC04NDYsOCArODQ3LDggQEAKIAlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSAyMDA7CiAKIAlEUk1fSU5GTygiUGFuZWwgaW5mbyBkZXJpdmVkIGZyb20gcmVnaXN0ZXJzXG4iKTsKLQlEUk1fSU5GTygiUGFuZWwgU2l6ZSAlZHglZFxuIiwgbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcywKLQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMpOworCURSTV9JTkZPKCJQYW5lbCBTaXplICVkeCVkXG4iLCBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSwKKwkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KTsKIAogCXJldHVybiBsdmRzOwogfQpAQCAtODgyLDExICs4ODMsMTEgQEAKIAogCQlEUk1fSU5GTygiUGFuZWwgSUQgU3RyaW5nOiAlc1xuIiwgc3RtcCk7CiAKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyA9IFJCSU9TMTYobGNkX2luZm8gKyAweDE5KTsKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyA9IFJCSU9TMTYobGNkX2luZm8gKyAweDFiKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPSBSQklPUzE2KGxjZF9pbmZvICsgMHgxOSk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5ID0gUkJJT1MxNihsY2RfaW5mbyArIDB4MWIpOwogCi0JCURSTV9JTkZPKCJQYW5lbCBTaXplICVkeCVkXG4iLCBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzLAotCQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMpOworCQlEUk1fSU5GTygiUGFuZWwgU2l6ZSAlZHglZFxuIiwgbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXksCisJCQkgbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkpOwogCiAJCWx2ZHMtPnBhbmVsX3ZjY19kZWxheSA9IFJCSU9TMTYobGNkX2luZm8gKyAweDJjKTsKIAkJaWYgKGx2ZHMtPnBhbmVsX3ZjY19kZWxheSA+IDIwMDAgfHwgbHZkcy0+cGFuZWxfdmNjX2RlbGF5IDwgMCkKQEAgLTk0NCwyNyArOTQ1LDI1IEBACiAJCQlpZiAodG1wID09IDApCiAJCQkJYnJlYWs7CiAKLQkJCWlmICgoUkJJT1MxNih0bXApID09IGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMpICYmCisJCQlpZiAoKFJCSU9TMTYodG1wKSA9PSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSkgJiYKIAkJCSAgICAoUkJJT1MxNih0bXAgKyAyKSA9PQotCQkJICAgICBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzKSkgewotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhibGFuayA9Ci0JCQkJICAgIChSQklPUzE2KHRtcCArIDE3KSAtIFJCSU9TMTYodG1wICsgMTkpKSAqIDg7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUuaG92ZXJwbHVzID0KLQkJCQkgICAgKFJCSU9TMTYodG1wICsgMjEpIC0gUkJJT1MxNih0bXAgKyAxOSkgLQotCQkJCSAgICAgMSkgKiA4OwotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhzeW5jX3dpZHRoID0KLQkJCQkgICAgUkJJT1M4KHRtcCArIDIzKSAqIDg7CisJCQkgICAgIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KSkgeworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmh0b3RhbCA9IFJCSU9TMTYodG1wICsgMTcpICogODsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19zdGFydCA9IFJCSU9TMTYodG1wICsgMjEpICogODsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19lbmQgPSAoUkJJT1M4KHRtcCArIDIzKSArCisJCQkJCQkJICAgICAgIFJCSU9TMTYodG1wICsgMjEpKSAqIDg7CiAKLQkJCQlsdmRzLT5uYXRpdmVfbW9kZS52YmxhbmsgPSAoUkJJT1MxNih0bXAgKyAyNCkgLQotCQkJCQkJCSAgICBSQklPUzE2KHRtcCArIDI2KSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUudm92ZXJwbHVzID0KLQkJCQkgICAgKChSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmKSAtCi0JCQkJICAgICBSQklPUzE2KHRtcCArIDI2KSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfd2lkdGggPQotCQkJCSAgICAoKFJCSU9TMTYodG1wICsgMjgpICYgMHhmODAwKSA+PiAxMSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUuZG90Y2xvY2sgPQotCQkJCSAgICBSQklPUzE2KHRtcCArIDkpICogMTA7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUudnRvdGFsID0gUkJJT1MxNih0bXAgKyAyNCk7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfc3RhcnQgPSBSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmOworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX2VuZCA9CisJCQkJCSgoUkJJT1MxNih0bXAgKyAyOCkgJiAweGY4MDApID4+IDExKSArCisJCQkJCShSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmKTsKKworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmNsb2NrID0gUkJJT1MxNih0bXAgKyA5KSAqIDEwOwogCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmZsYWdzID0gMDsKKwkJCQkvKiBzZXQgY3J0YyB2YWx1ZXMgKi8KKwkJCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oJmx2ZHMtPm5hdGl2ZV9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKKwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTExNzgsNyArMTE3Nyw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCX0gZWxzZSBpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfTU9CSUxJVFkpIHsKIAkJCS8qIExWRFMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0xDRF9HUElPX01BU0spOwpAQCAtMTE5MCw3ICsxMTkwLDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCiAJCQkvKiBWR0EgLSBwcmltYXJ5IGRhYyAqLwogCQkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19WR0FfRERDKTsKQEAgLTEyMDIsNyArMTIwMyw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBEVkktSSAtIHR2IGRhYywgaW50IHRtZHMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fRFZJX0REQyk7CkBAIC0xMjIwLDcgKzEyMjIsOCBAQAogCQkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JKTsKIAogCQkJLyogVkdBIC0gcHJpbWFyeSBkYWMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CkBAIC0xMjMyLDcgKzEyMzUsOCBAQAogCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQl9CiAKIAkJaWYgKHJkZXYtPmZhbWlseSAhPSBDSElQX1IxMDAgJiYgcmRldi0+ZmFtaWx5ICE9IENISVBfUjIwMCkgewpAQCAtMTI0NSw3ICsxMjQ5LDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1RfSUJPT0s6CkBAIC0xMjU5LDcgKzEyNjQsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTKTsKIAkJLyogVkdBIC0gVFYgREFDICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTI2OCw3ICsxMjc0LDggQEAKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMjc3LDcgKzEyODQsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX0VYVEVSTkFMOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAocG93ZXJib29rIGV4dGVybmFsIHRtZHMpXG4iLApAQCAtMTI5MCw3ICsxMjk4LDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIERWSS1JIC0gcHJpbWFyeSBkYWMsIGV4dCB0bWRzICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTMwMywxMCArMTMxMiwxMiBAQAogCQkJCQkJCQlBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCiAJCQkJCQkJCTEpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CisJCS8qIFhYWCBzb21lIGFyZSBTTCAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUIHwKIAkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzE1LDcgKzEzMjYsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX0lOVEVSTkFMOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAocG93ZXJib29rIGludGVybmFsIHRtZHMpXG4iLApAQCAtMTMyOCw3ICsxMzQwLDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIERWSS1JIC0gcHJpbWFyeSBkYWMsIGludCB0bWRzICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTM0NCw3ICsxMzU3LDggQEAKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKIAkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzUzLDcgKzEzNjcsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX1ZHQToKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKHBvd2VyYm9vayB2Z2EpXG4iLApAQCAtMTM2Niw3ICsxMzgxLDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIFZHQSAtIHByaW1hcnkgZGFjICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTM3NSw3ICsxMzkxLDggQEAKIAkJCQkJCQkJMSksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzg0LDcgKzE0MDEsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfTUlOSV9FWFRFUk5BTDoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKG1pbmkgZXh0ZXJuYWwgdG1kcylcbiIsCkBAIC0xNDAxLDEwICsxNDE5LDEyIEBACiAJCQkJCQkJCUFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKKwkJLyogWFhYIGFyZSBhbnkgREw/ICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCiAJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgfAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTQxMyw3ICsxNDMzLDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX01JTklfSU5URVJOQUw6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChtaW5pIGludGVybmFsIHRtZHMpXG4iLApAQCAtMTQzMyw3ICsxNDU0LDggQEAKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwKIAkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xNDQyLDcgKzE0NjQsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfSU1BQ19HNV9JU0lHSFQ6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChpbWFjIGc1IGlzaWdodClcbiIsCkBAIC0xNDU1LDcgKzE0NzgsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRCk7CiAJCS8qIFZHQSAtIHR2IGRhYyAqLwogCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX0RWSV9EREMpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKQEAgLTE0NjQsNyArMTQ4OCw4IEBACiAJCQkJCQkJCTIpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTQ3Myw3ICsxNDk4LDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX0VNQUM6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChlbWFjKVxuIiwKQEAgLTE0ODYsNyArMTUxMiw4IEBACiAJCQkJCQkJCTEpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBWR0EgLSB0diBkYWMgKi8KIAkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19DUlQyX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTQ5NSw3ICsxNTIyLDggQEAKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xNTA0LDcgKzE1MzIsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgdGFibGU6ICVkIChpbnZhbGlkKVxuIiwKQEAgLTE1ODEsMTEgKzE2MTAsNjMgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgcmFkZW9uX2FwcGx5X2xlZ2FjeV90dl9xdWlya3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwkvKiBBY2VyIDUxMDIgaGFzIG5vbi1leGlzdGVudCBUViBwb3J0ICovCisJaWYgKGRldi0+cGRldi0+ZGV2aWNlID09IDB4NTk3NSAmJgorCSAgICBkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDI1ICYmCisJICAgIGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAwOWYpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEhQIGRjNTc1MCBoYXMgbm9uLWV4aXN0ZW50IFRWIHBvcnQgKi8KKwlpZiAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg1OTc0ICYmCisJICAgIGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwM2MgJiYKKwkgICAgZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MjgwYSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBjb21iaW9zX2NoZWNrX2RsX2R2aShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaXNfZHZpX2QpCit7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGV4dF90bWRzX2luZm87CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCWlmIChpc19kdmlfZCkKKwkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOworCQllbHNlCisJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwl9CisJZXh0X3RtZHNfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfRVhUX1RNRFNfSU5GT19UQUJMRSk7CisJaWYgKGV4dF90bWRzX2luZm8pIHsKKwkJdWludDhfdCByZXYgPSBSQklPUzgoZXh0X3RtZHNfaW5mbyk7CisJCXVpbnQ4X3QgZmxhZ3MgPSBSQklPUzgoZXh0X3RtZHNfaW5mbyArIDQgKyA1KTsKKwkJaWYgKHJldiA+PSAzKSB7CisJCQlpZiAoaXNfZHZpX2QpCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EOworCQkJZWxzZQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSTsKKwkJfSBlbHNlIHsKKwkJCWlmIChmbGFncyAmIDEpIHsKKwkJCQlpZiAoaXNfZHZpX2QpCisJCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRDsKKwkJCQllbHNlCisJCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoaXNfZHZpX2QpCisJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOworCWVsc2UKKwkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0k7Cit9CisKIGJvb2wgcmFkZW9uX2dldF9sZWdhY3lfY29ubmVjdG9yX2luZm9fZnJvbV9iaW9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IGNvbm5faW5mbywgZW50cnksIGRldmljZXM7Ci0JdWludDE2X3QgdG1wOworCXVpbnQxNl90IHRtcCwgY29ubmVjdG9yX29iamVjdF9pZDsKIAllbnVtIHJhZGVvbl9jb21iaW9zX2RkYyBkZGNfdHlwZTsKIAllbnVtIHJhZGVvbl9jb21iaW9zX2Nvbm5lY3RvciBjb25uZWN0b3I7CiAJaW50IGkgPSAwOwpAQCAtMTYyOCw4ICsxNzA5LDkgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJcmFkZW9uX2FwcGx5X2xlZ2FjeV9xdWlya3MoZGV2LCBpLCAmY29ubmVjdG9yLAotCQkJCQkJICAgJmRkY19pMmMpOworCQkJaWYgKCFyYWRlb25fYXBwbHlfbGVnYWN5X3F1aXJrcyhkZXYsIGksICZjb25uZWN0b3IsCisJCQkJCQkgICAgICAgJmRkY19pMmMpKQorCQkJCWNvbnRpbnVlOwogCiAJCQlzd2l0Y2ggKGNvbm5lY3RvcikgewogCQkJY2FzZSBDT05ORUNUT1JfUFJPUFJJRVRBUllfTEVHQUNZOgpAQCAtMTY0NCw3ICsxNzI2LDggQEAKIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCBpLCBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0QpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfQ1JUX0xFR0FDWToKIAkJCQlpZiAodG1wICYgMHgxKSB7CkBAIC0xNjY5LDcgKzE3NTIsOCBAQAogCQkJCQkJCSAgICBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ09OTkVDVE9SX0RWSV9JX0xFR0FDWToKIAkJCQlkZXZpY2VzID0gMDsKQEAgLTE2OTgsNiArMTc4Miw3IEBACiAJCQkJCQkJCSAgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCwKIAkJCQkJCQkJICAgMCksCiAJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUKTsKKwkJCQkJY29ubmVjdG9yX29iamVjdF9pZCA9IGNvbWJpb3NfY2hlY2tfZGxfZHZpKGRldiwgMCk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJZGV2aWNlcyB8PSBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQ7CiAJCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTcwNiwxOSArMTc5MSwyNCBAQAogCQkJCQkJCQkgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCiAJCQkJCQkJCSAgIDApLAogCQkJCQkJCQkgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCk7CisJCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOwogCQkJCX0KIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LAogCQkJCQkJCSAgICBpLAogCQkJCQkJCSAgICBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfRFZJX0RfTEVHQUNZOgotCQkJCWlmICgodG1wID4+IDQpICYgMHgxKQorCQkJCWlmICgodG1wID4+IDQpICYgMHgxKSB7CiAJCQkJCWRldmljZXMgPSBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQ7Ci0JCQkJZWxzZQorCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY29tYmlvc19jaGVja19kbF9kdmkoZGV2LCAxKTsKKwkJCQl9IGVsc2UgewogCQkJCQlkZXZpY2VzID0gQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUOworCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwkJCQl9CiAJCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKIAkJCQkJCQkgIChkZXYsIGRldmljZXMsIDApLApAQCAtMTcyNiw3ICsxODE2LDggQEAKIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCBpLCBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfQ1RWX0xFR0FDWToKIAkJCWNhc2UgQ09OTkVDVE9SX1NUVl9MRUdBQ1k6CkBAIC0xNzQwLDcgKzE4MzEsOCBAQAogCQkJCQkJCSAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJCQkgICAgbGVnYWN5X2Nvbm5lY3Rvcl9jb252ZXJ0CiAJCQkJCQkJICAgIFtjb25uZWN0b3JdLAotCQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCURSTV9FUlJPUigiVW5rbm93biBjb25uZWN0b3IgdHlwZTogJWRcbiIsCkBAIC0xNzcyLDEwICsxODY0LDI5IEBACiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUIHwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCQl9IGVsc2UgewotCQkJRFJNX0RFQlVHKCJObyBjb25uZWN0b3IgaW5mbyBmb3VuZFxuIik7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQl1aW50MTZfdCBjcnRfaW5mbyA9CisJCQkJY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19DUlRfSU5GT19UQUJMRSk7CisJCQlEUk1fREVCVUcoIkZvdW5kIENSVCB0YWJsZSwgYXNzdW1pbmcgVkdBIGNvbm5lY3RvclxuIik7CisJCQlpZiAoY3J0X2luZm8pIHsKKwkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCisJCQkJCQkJCQkJQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAorCQkJCQkJCQkJCTEpLAorCQkJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKKwkJCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX1ZHQV9EREMpOworCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKKwkJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKKwkJCX0gZWxzZSB7CisJCQkJRFJNX0RFQlVHKCJObyBjb25uZWN0b3IgaW5mbyBmb3VuZFxuIik7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQogCQl9CiAJfQogCkBAIC0xODcwLDcgKzE5ODEsOCBAQAogCQkJCQkJICAgIDUsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCQl9CiAJfQogCkBAIC0xODgwLDE2ICsxOTkyLDE5IEBACiAJCSAgICBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX1RWX0lORk9fVEFCTEUpOwogCQlpZiAodHZfaW5mbykgewogCQkJaWYgKFJCSU9TOCh0dl9pbmZvICsgNikgPT0gJ1QnKSB7Ci0JCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCi0JCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKLQkJCQkJCQkgIChkZXYsCi0JCQkJCQkJICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCi0JCQkJCQkJICAgMiksCi0JCQkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7Ci0JCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgNiwKLQkJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCi0JCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQlpZiAocmFkZW9uX2FwcGx5X2xlZ2FjeV90dl9xdWlya3MoZGV2KSkgeworCQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKKwkJCQkJCQkJICAoZGV2LAorCQkJCQkJCQkgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKKwkJCQkJCQkJICAgMiksCisJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOworCQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCA2LAorCQkJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCisJCQkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAorCQkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CisJCQkJfQogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IGFmMWQ1NTEuLmZjZTRjNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2VkaWQuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgImF0b20uaCIKQEAgLTE3NywyNSArMTc4LDEyIEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBOVUxMOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOwogCi0JaWYgKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICE9IDAgJiYKLQkgICAgbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgIT0gMCAmJgotCSAgICBuYXRpdmVfbW9kZS0+ZG90Y2xvY2sgIT0gMCkgewotCQltb2RlID0gZHJtX21vZGVfY3JlYXRlKGRldik7Ci0KLQkJbW9kZS0+aGRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJbW9kZS0+dmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQotCQltb2RlLT5odG90YWwgPSBtb2RlLT5oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5oYmxhbms7Ci0JCW1vZGUtPmhzeW5jX3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+aG92ZXJwbHVzOwotCQltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJbW9kZS0+dnRvdGFsID0gbW9kZS0+dmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dmJsYW5rOwotCQltb2RlLT52c3luY19zdGFydCA9IG1vZGUtPnZkaXNwbGF5ICsgbmF0aXZlX21vZGUtPnZvdmVycGx1czsKLQkJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCW1vZGUtPmNsb2NrID0gbmF0aXZlX21vZGUtPmRvdGNsb2NrOwotCQltb2RlLT5mbGFncyA9IDA7Ci0KKwlpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ICE9IDAgJiYKKwkgICAgbmF0aXZlX21vZGUtPnZkaXNwbGF5ICE9IDAgJiYKKwkgICAgbmF0aXZlX21vZGUtPmNsb2NrICE9IDApIHsKKwkJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG5hdGl2ZV9tb2RlKTsKIAkJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEIHwgRFJNX01PREVfVFlQRV9EUklWRVI7CiAJCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOwogCkBAIC0yMDksNyArMTk3LDcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAJaW50IGk7CiAJc3RydWN0IG1vZGVfc2l6ZSB7CiAJCWludCB3OwpAQCAtMjM1LDE3ICsyMjMsMjIgQEAKIAl9OwogCiAJZm9yIChpID0gMDsgaSA8IDE3OyBpKyspIHsKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSB7CisJCQlpZiAoY29tbW9uX21vZGVzW2ldLncgPiAxMDI0IHx8CisJCQkgICAgY29tbW9uX21vZGVzW2ldLmggPiA3NjgpCisJCQkJY29udGludWU7CisJCX0KIAkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewotCQkJaWYgKGNvbW1vbl9tb2Rlc1tpXS53ID4gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgfHwKLQkJCSAgICBjb21tb25fbW9kZXNbaV0uaCA+IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzIHx8Ci0JCQkgICAgKGNvbW1vbl9tb2Rlc1tpXS53ID09IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICYmCi0JCQkgICAgIGNvbW1vbl9tb2Rlc1tpXS5oID09IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSkKKwkJCWlmIChjb21tb25fbW9kZXNbaV0udyA+IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSB8fAorCQkJICAgIGNvbW1vbl9tb2Rlc1tpXS5oID4gbmF0aXZlX21vZGUtPnZkaXNwbGF5IHx8CisJCQkgICAgKGNvbW1vbl9tb2Rlc1tpXS53ID09IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSAmJgorCQkJICAgICBjb21tb25fbW9kZXNbaV0uaCA9PSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpKQogCQkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChjb21tb25fbW9kZXNbaV0udyA8IDMyMCB8fCBjb21tb25fbW9kZXNbaV0uaCA8IDIwMCkKIAkJCWNvbnRpbnVlOwogCi0JCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBjb21tb25fbW9kZXNbaV0udywgY29tbW9uX21vZGVzW2ldLmgsIDYwLCBmYWxzZSwgZmFsc2UpOworCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgY29tbW9uX21vZGVzW2ldLncsIGNvbW1vbl9tb2Rlc1tpXS5oLCA2MCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKIAl9CiB9CkBAIC0zNDMsMjggKzMzNiwyMyBAQAogCQkJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9CXRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOwogCiAJLyogVHJ5IHRvIGdldCBuYXRpdmUgbW9kZSBkZXRhaWxzIGZyb20gRURJRCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoIW5hdGl2ZV9tb2RlLT5kb3RjbG9jaykgeworCWlmICghbmF0aXZlX21vZGUtPmNsb2NrKSB7CiAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICp0LCAqbW9kZTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7Ci0JCQlpZiAobW9kZS0+aGRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgJiYKLQkJCSAgICBtb2RlLT52ZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykgewotCQkJCW5hdGl2ZV9tb2RlLT5oYmxhbmsgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+aG92ZXJwbHVzID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGggPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKLQkJCQluYXRpdmVfbW9kZS0+dmJsYW5rID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dmRpc3BsYXk7Ci0JCQkJbmF0aXZlX21vZGUtPnZvdmVycGx1cyA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7Ci0JCQkJbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7Ci0JCQkJbmF0aXZlX21vZGUtPmRvdGNsb2NrID0gbW9kZS0+Y2xvY2s7CisJCQlpZiAobW9kZS0+aGRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPmhkaXNwbGF5ICYmCisJCQkgICAgbW9kZS0+dmRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSB7CisJCQkJKm5hdGl2ZV9tb2RlID0gKm1vZGU7CisJCQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKG5hdGl2ZV9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKIAkJCQlEUk1fSU5GTygiRGV0ZXJtaW5lZCBMVkRTIG5hdGl2ZSBtb2RlIGRldGFpbHMgZnJvbSBFRElEXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KLQlpZiAoIW5hdGl2ZV9tb2RlLT5kb3RjbG9jaykgeworCWlmICghbmF0aXZlX21vZGUtPmNsb2NrKSB7CiAJCURSTV9JTkZPKCJObyBMVkRTIG5hdGl2ZSBtb2RlIGRldGFpbHMsIGRpc2FibGluZyBSTVhcbiIpOwogCQlyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgPSBSTVhfT0ZGOwogCX0KQEAgLTQwOSwxMyArMzk3LDY0IEBACiBzdGF0aWMgaW50IHJhZGVvbl9sdmRzX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CisKKwlpZiAoKG1vZGUtPmhkaXNwbGF5IDwgMzIwKSB8fCAobW9kZS0+dmRpc3BsYXkgPCAyNDApKQorCQlyZXR1cm4gTU9ERV9QQU5FTDsKKworCWlmIChlbmNvZGVyKSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKworCQkvKiBBVklWTyBoYXJkd2FyZSBzdXBwb3J0cyBkb3duc2NhbGluZyBtb2RlcyBsYXJnZXIgdGhhbiB0aGUgcGFuZWwKKwkJICogdG8gdGhlIHBhbmVsIHNpemUsIGJ1dCBJJ20gbm90IHN1cmUgdGhpcyBpcyBkZXNpcmFibGUuCisJCSAqLworCQlpZiAoKG1vZGUtPmhkaXNwbGF5ID4gbmF0aXZlX21vZGUtPmhkaXNwbGF5KSB8fAorCQkgICAgKG1vZGUtPnZkaXNwbGF5ID4gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSkKKwkJCXJldHVybiBNT0RFX1BBTkVMOworCisJCS8qIGlmIHNjYWxpbmcgaXMgZGlzYWJsZWQsIGJsb2NrIG5vbi1uYXRpdmUgbW9kZXMgKi8KKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSA9PSBSTVhfT0ZGKSB7CisJCQlpZiAoKG1vZGUtPmhkaXNwbGF5ICE9IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkgfHwKKwkJCSAgICAobW9kZS0+dmRpc3BsYXkgIT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSkKKwkJCQlyZXR1cm4gTU9ERV9QQU5FTDsKKwkJfQorCX0KKwogCXJldHVybiBNT0RFX09LOwogfQogCiBzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByYWRlb25fbHZkc19kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCWlmIChlbmNvZGVyKSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKworCQkvKiBjaGVjayBpZiBwYW5lbCBpcyB2YWxpZCAqLworCQlpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ID49IDMyMCAmJiBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgPj0gMjQwKQorCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisKKwl9CisKKwkvKiBjaGVjayBmb3IgZWRpZCBhcyB3ZWxsICovCisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpCisJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVsc2UgeworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykgeworCQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJCQkgICAgICAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CisJCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJfQorCX0KIAkvKiBjaGVjayBhY3BpIGxpZCBzdGF0dXMgPz8/ICovCisKIAlyYWRlb25fY29ubmVjdG9yX3VwZGF0ZV9zY3JhdGNoX3JlZ3MoY29ubmVjdG9yLCByZXQpOwogCXJldHVybiByZXQ7CiB9CkBAIC00MjYsNiArNDY1LDggQEAKIAogCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQlyYWRlb25faTJjX2Rlc3Ryb3kocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyk7CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpCisJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwogCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KTsKIAlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOwogCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwpAQCAtNDk1LDYgKzUzNiw4IEBACiBzdGF0aWMgaW50IHJhZGVvbl92Z2FfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJLyogWFhYIGNoZWNrIG1vZGUgYmFuZHdpZHRoICovCisJLyogWFhYIHZlcmlmeSBhZ2FpbnN0IG1heCBEQUMgb3V0cHV0IGZyZXF1ZW5jeSAqLwogCXJldHVybiBNT0RFX09LOwogfQogCkBAIC01MTMsOSArNTU2LDMyIEBACiAJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwogCWRyZXQgPSByYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpOwogCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKLQlpZiAoZHJldCkKLQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0JZWxzZSB7CisJaWYgKGRyZXQpIHsKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCX0KKwkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOworCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKKworCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCURSTV9FUlJPUigiRERDIHJlc3BvbmRlZCBidXQgbm90IEVESUQgZm91bmQgZm9yICVzXG4iLAorCQkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJfSBlbHNlIHsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gISEocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKTsKKworCQkJLyogc29tZSBvZW1zIGhhdmUgYm9hcmRzIHdpdGggc2VwYXJhdGUgZGlnaXRhbCBhbmQgYW5hbG9nIGNvbm5lY3RvcnMKKwkJCSAqIHdpdGggYSBzaGFyZWQgZGRjIGxpbmUgKG9mdGVuIHZnYSArIGhkbWkpCisJCQkgKi8KKwkJCWlmIChyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCAmJiByYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjKSB7CisJCQkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CisJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCQl9IGVsc2UKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJfQorCX0gZWxzZSB7CiAJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QpIHsKIAkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKIAkJCXJldCA9IGVuY29kZXJfZnVuY3MtPmRldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpOwpAQCAtNTU5LDcgKzYyNSw3IEBACiAJCXJhZGVvbl9hZGRfY29tbW9uX21vZGVzKGVuY29kZXIsIGNvbm5lY3Rvcik7CiAJZWxzZSB7CiAJCS8qIG9ubHkgODAweDYwMCBpcyBzdXBwb3J0ZWQgcmlnaHQgbm93IG9uIHByZS1hdml2byBjaGlwcyAqLwotCQl0dl9tb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgODAwLCA2MDAsIDYwLCBmYWxzZSwgZmFsc2UpOworCQl0dl9tb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgODAwLCA2MDAsIDYwLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAkJdHZfbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCB0dl9tb2RlKTsKIAl9CkBAIC01NjksNiArNjM1LDggQEAKIHN0YXRpYyBpbnQgcmFkZW9uX3R2X21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKKwlpZiAoKG1vZGUtPmhkaXNwbGF5ID4gMTAyNCkgfHwgKG1vZGUtPnZkaXNwbGF5ID4gNzY4KSkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfUkFOR0U7CiAJcmV0dXJuIE1PREVfT0s7CiB9CiAKQEAgLTY0Myw2ICs3MTEsMTAgQEAKIAlkcmV0ID0gcmFkZW9uX2RkY19wcm9iZShyYWRlb25fY29ubmVjdG9yKTsKIAlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CiAJaWYgKGRyZXQpIHsKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCX0KIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwogCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CiAJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKQEAgLTY1MywxMCArNzI1LDE1IEBACiAJCX0gZWxzZSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCA9ICEhKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCk7CiAKLQkJCS8qIGlmIHRoaXMgaXNuJ3QgYSBkaWdpdGFsIG1vbml0b3IKLQkJCSAgIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBhbnkKLQkJCSAgIFRWIGNvbmZsaWN0cyAqLwotCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCQkvKiBzb21lIG9lbXMgaGF2ZSBib2FyZHMgd2l0aCBzZXBhcmF0ZSBkaWdpdGFsIGFuZCBhbmFsb2cgY29ubmVjdG9ycworCQkJICogd2l0aCBhIHNoYXJlZCBkZGMgbGluZSAob2Z0ZW4gdmdhICsgaGRtaSkKKwkJCSAqLworCQkJaWYgKCghcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwpICYmIHJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMpIHsKKwkJCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKKwkJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gTlVMTDsKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJCX0gZWxzZQorCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCQl9CiAJfQogCkBAIC03NDMsOSArODIwLDM2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9kdmlfZm9yY2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlpZiAoY29ubmVjdG9yLT5mb3JjZSA9PSBEUk1fRk9SQ0VfT04pCisJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gZmFsc2U7CisJaWYgKGNvbm5lY3Rvci0+Zm9yY2UgPT0gRFJNX0ZPUkNFX09OX0RJR0lUQUwpCisJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gdHJ1ZTsKK30KKworc3RhdGljIGludCByYWRlb25fZHZpX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCisJLyogWFhYIGNoZWNrIG1vZGUgYmFuZHdpZHRoICovCisKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgJiYgKG1vZGUtPmNsb2NrID4gMTY1MDAwKSkgeworCQlpZiAoKHJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0kpIHx8CisJCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX29iamVjdF9pZCA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRCkgfHwKKwkJICAgIChyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0IpKQorCQkJcmV0dXJuIE1PREVfT0s7CisJCWVsc2UKKwkJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisJfQorCXJldHVybiBNT0RFX09LOworfQorCiBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewogCS5nZXRfbW9kZXMgPSByYWRlb25fZHZpX2dldF9tb2RlcywKLQkubW9kZV92YWxpZCA9IHJhZGVvbl92Z2FfbW9kZV92YWxpZCwKKwkubW9kZV92YWxpZCA9IHJhZGVvbl9kdmlfbW9kZV92YWxpZCwKIAkuYmVzdF9lbmNvZGVyID0gcmFkZW9uX2R2aV9lbmNvZGVyLAogfTsKIApAQCAtNzU1LDYgKzg1OSw3IEBACiAJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCiAJLnNldF9wcm9wZXJ0eSA9IHJhZGVvbl9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAogCS5kZXN0cm95ID0gcmFkZW9uX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5mb3JjZSA9IHJhZGVvbl9kdmlfZm9yY2UsCiB9OwogCiB2b2lkCkBAIC03NjQsMTMgKzg2OSwxNiBAQAogCQkJICBpbnQgY29ubmVjdG9yX3R5cGUsCiAJCQkgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMsCiAJCQkgIGJvb2wgbGlua2IsCi0JCQkgIHVpbnQzMl90IGlncF9sYW5lX2luZm8pCisJCQkgIHVpbnQzMl90IGlncF9sYW5lX2luZm8sCisJCQkgIHVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKnJhZGVvbl9kaWdfY29ubmVjdG9yOwogCXVpbnQzMl90IHN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxOb25lOworCWJvb2wgc2hhcmVkX2RkYyA9IGZhbHNlOworCWludCByZXQ7CiAKIAkvKiBmaXhtZSAtIHR2L2N2L2RpbiAqLwogCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikKQEAgLTc4Myw2ICs4OTEsMTMgQEAKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgfD0gc3VwcG9ydGVkX2RldmljZTsKIAkJCXJldHVybjsKIAkJfQorCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyAmJiBpMmNfYnVzLT52YWxpZCkgeworCQkJaWYgKG1lbWNtcCgmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+cmVjLCBpMmNfYnVzLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYykpID09IDApIHsKKwkJCQlyYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjID0gdHJ1ZTsKKwkJCQlzaGFyZWRfZGRjID0gdHJ1ZTsKKwkJCX0KKwkJfQogCX0KIAogCXJhZGVvbl9jb25uZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOwpAQCAtNzkzLDI3ICs5MDgsMzUgQEAKIAogCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCA9IGNvbm5lY3Rvcl9pZDsKIAlyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzID0gc3VwcG9ydGVkX2RldmljZTsKKwlyYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjID0gc2hhcmVkX2RkYzsKKwlyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkID0gY29ubmVjdG9yX29iamVjdF9pZDsKIAlzd2l0Y2ggKGNvbm5lY3Rvcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiVkdBIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KKwkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUE6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEVkkiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKQEAgLTgyNyw3ICs5NTAsOSBAQAogCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyA9IGlncF9sYW5lX2luZm87CiAJCXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2ID0gcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEVkkiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKQEAgLTgzNyw2ICs5NjIsNyBAQAogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmNvaGVyZW50X21vZGVfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOworCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKQEAgLTg1MCw3ICs5NzYsOSBAQAogCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyA9IGlncF9sYW5lX2luZm87CiAJCXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2ID0gcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJIRE1JIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCkBAIC04NjksNyArOTk3LDkgQEAKIAkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmlncF9sYW5lX2luZm8gPSBpZ3BfbGFuZV9pbmZvOwogCQlyYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdiA9IHJhZGVvbl9kaWdfY29ubmVjdG9yOwogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiRFAiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKQEAgLTg4MiwxMSArMTAxMiwxNCBAQAogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU46CiAJCWlmIChyYWRlb25fdHYgPT0gMSkgewogCQkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZmFpbGVkOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKKwkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkJICAgICAgMSk7CiAJCX0KLQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCi0JCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKLQkJCQkJICAgICAgMSk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CiAJCXJhZGVvbl9kaWdfY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcpLCBHRlBfS0VSTkVMKTsKQEAgLTg5Niw3ICsxMDI5LDkgQEAKIAkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmlncF9sYW5lX2luZm8gPSBpZ3BfbGFuZV9pbmZvOwogCQlyYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdiA9IHJhZGVvbl9kaWdfY29ubmVjdG9yOwogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiTFZEUyIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQpAQCAtOTI2LDEyICsxMDYxLDE0IEBACiAJCQkgICAgdWludDMyX3QgY29ubmVjdG9yX2lkLAogCQkJICAgIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsCiAJCQkgICAgaW50IGNvbm5lY3Rvcl90eXBlLAotCQkJICAgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMpCisJCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKKwkJCSAgICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yOwogCXVpbnQzMl90IHN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxOb25lOworCWludCByZXQ7CiAKIAkvKiBmaXhtZSAtIHR2L2N2L2RpbiAqLwogCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikKQEAgLTk1NCwyNyArMTA5MSwzNCBAQAogCiAJcmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX2lkID0gY29ubmVjdG9yX2lkOwogCXJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgPSBzdXBwb3J0ZWRfZGV2aWNlOworCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb25uZWN0b3Jfb2JqZWN0X2lkOwogCXN3aXRjaCAoY29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJWR0EiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkRWSSIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CisJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOwpAQCAtOTgyLDExICsxMTI2LDE0IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiRFZJIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCQkgICAgICAxKTsKQEAgLTk5OCw3ICsxMTQ1LDEwIEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjoKIAkJaWYgKHJhZGVvbl90diA9PSAxKSB7CiAJCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBmYWlsZWQ7CisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCQkgICAgICAxKTsKQEAgLTEwMDYsNyArMTE1Niw5IEBACiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJMVkRTIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwppbmRleCAxMmY1OTkwLi41YWIyY2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKQEAgLTE0MiwxNSArMTQyLDMxIEBACiAJCX0KIAogCQlwLT5jaHVua3NbaV0ubGVuZ3RoX2R3ID0gdXNlcl9jaHVuay5sZW5ndGhfZHc7Ci0JCWNkYXRhID0gKHVpbnQzMl90ICopKHVuc2lnbmVkIGxvbmcpdXNlcl9jaHVuay5jaHVua19kYXRhOworCQlwLT5jaHVua3NbaV0udXNlcl9wdHIgPSAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1c2VyX2NodW5rLmNodW5rX2RhdGE7CiAKLQkJc2l6ZSA9IHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiBzaXplb2YodWludDMyX3QpOwotCQlwLT5jaHVua3NbaV0ua2RhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAocC0+Y2h1bmtzW2ldLmtkYXRhID09IE5VTEwpIHsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIocC0+Y2h1bmtzW2ldLmtkYXRhLCBjZGF0YSwgc2l6ZSkpIHsKLQkJCXJldHVybiAtRUZBVUxUOworCQljZGF0YSA9ICh1aW50MzJfdCAqKSh1bnNpZ25lZCBsb25nKXVzZXJfY2h1bmsuY2h1bmtfZGF0YTsKKwkJaWYgKHAtPmNodW5rc1tpXS5jaHVua19pZCAhPSBSQURFT05fQ0hVTktfSURfSUIpIHsKKwkJCXNpemUgPSBwLT5jaHVua3NbaV0ubGVuZ3RoX2R3ICogc2l6ZW9mKHVpbnQzMl90KTsKKwkJCXAtPmNodW5rc1tpXS5rZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocC0+Y2h1bmtzW2ldLmtkYXRhID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIocC0+Y2h1bmtzW2ldLmtkYXRhLAorCQkJCQkgICAgICAgcC0+Y2h1bmtzW2ldLnVzZXJfcHRyLCBzaXplKSkgeworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9IGVsc2UgeworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlWzBdID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlWzFdID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCQkJaWYgKHAtPmNodW5rc1tpXS5rcGFnZVswXSA9PSBOVUxMIHx8IHAtPmNodW5rc1tpXS5rcGFnZVsxXSA9PSBOVUxMKSB7CisJCQkJa2ZyZWUocC0+Y2h1bmtzW2ldLmtwYWdlWzBdKTsKKwkJCQlrZnJlZShwLT5jaHVua3NbaV0ua3BhZ2VbMV0pOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJcC0+Y2h1bmtzW2ldLmtwYWdlX2lkeFswXSA9IC0xOworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlX2lkeFsxXSA9IC0xOworCQkJcC0+Y2h1bmtzW2ldLmxhc3RfY29waWVkX3BhZ2UgPSAtMTsKKwkJCXAtPmNodW5rc1tpXS5sYXN0X3BhZ2VfaW5kZXggPSAoKHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiA0KSAtIDEpIC8gUEFHRV9TSVpFOwogCQl9CiAJfQogCWlmIChwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XS5sZW5ndGhfZHcgPiAoMTYgKiAxMDI0KSkgewpAQCAtMTkwLDYgKzIwNiw4IEBACiAJa2ZyZWUocGFyc2VyLT5yZWxvY3NfcHRyKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5uY2h1bmtzOyBpKyspIHsKIAkJa2ZyZWUocGFyc2VyLT5jaHVua3NbaV0ua2RhdGEpOworCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rcGFnZVswXSk7CisJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtwYWdlWzFdKTsKIAl9CiAJa2ZyZWUocGFyc2VyLT5jaHVua3MpOwogCWtmcmVlKHBhcnNlci0+Y2h1bmtzX2FycmF5KTsKQEAgLTIzOCw4ICsyNTYsMTQgQEAKIAkgKiB1bmNhY2hlZCkuICovCiAJaWJfY2h1bmsgPSAmcGFyc2VyLmNodW5rc1twYXJzZXIuY2h1bmtfaWJfaWR4XTsKIAlwYXJzZXIuaWItPmxlbmd0aF9kdyA9IGliX2NodW5rLT5sZW5ndGhfZHc7Ci0JbWVtY3B5KCh2b2lkICopcGFyc2VyLmliLT5wdHIsIGliX2NodW5rLT5rZGF0YSwgaWJfY2h1bmstPmxlbmd0aF9kdyo0KTsKIAlyID0gcmFkZW9uX2NzX3BhcnNlKCZwYXJzZXIpOworCWlmIChyIHx8IHBhcnNlci5wYXJzZXJfZXJyb3IpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOworCQlyYWRlb25fY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CisJCW11dGV4X3VubG9jaygmcmRldi0+Y3NfbXV0ZXgpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHJhZGVvbl9jc19maW5pc2hfcGFnZXMoJnBhcnNlcik7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOwogCQlyYWRlb25fY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CkBAIC0yNTQsMyArMjc4LDY0IEBACiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5jc19tdXRleCk7CiAJcmV0dXJuIHI7CiB9CisKK2ludCByYWRlb25fY3NfZmluaXNoX3BhZ2VzKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwlpbnQgaTsKKwlpbnQgc2l6ZSA9IFBBR0VfU0laRTsKKworCWZvciAoaSA9IGliYy0+bGFzdF9jb3BpZWRfcGFnZSArIDE7IGkgPD0gaWJjLT5sYXN0X3BhZ2VfaW5kZXg7IGkrKykgeworCQlpZiAoaSA9PSBpYmMtPmxhc3RfcGFnZV9pbmRleCkgeworCQkJc2l6ZSA9IChpYmMtPmxlbmd0aF9kdyAqIDQpICUgUEFHRV9TSVpFOworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlzaXplID0gUEFHRV9TSVpFOworCQl9CisJCQorCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKHAtPmliLT5wdHIgKyAoaSAqIChQQUdFX1NJWkUvNCkpLAorCQkJCSAgICAgICBpYmMtPnVzZXJfcHRyICsgKGkgKiBQQUdFX1NJWkUpLAorCQkJCSAgICAgICBzaXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJhZGVvbl9jc191cGRhdGVfcGFnZXMoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIGludCBwZ19pZHgpCit7CisJaW50IG5ld19wYWdlOworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwlpbnQgaTsKKwlpbnQgc2l6ZSA9IFBBR0VfU0laRTsKKworCWZvciAoaSA9IGliYy0+bGFzdF9jb3BpZWRfcGFnZSArIDE7IGkgPCBwZ19pZHg7IGkrKykgeworCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKHAtPmliLT5wdHIgKyAoaSAqIChQQUdFX1NJWkUvNCkpLAorCQkJCSAgICAgICBpYmMtPnVzZXJfcHRyICsgKGkgKiBQQUdFX1NJWkUpLAorCQkJCSAgICAgICBQQUdFX1NJWkUpKSB7CisJCQlwLT5wYXJzZXJfZXJyb3IgPSAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwluZXdfcGFnZSA9IGliYy0+a3BhZ2VfaWR4WzBdIDwgaWJjLT5rcGFnZV9pZHhbMV0gPyAwIDogMTsKKworCWlmIChwZ19pZHggPT0gaWJjLT5sYXN0X3BhZ2VfaW5kZXgpIHsKKwkJc2l6ZSA9IChpYmMtPmxlbmd0aF9kdyAqIDQpICUgUEFHRV9TSVpFOworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlzaXplID0gUEFHRV9TSVpFOworCX0KKworCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoaWJjLT5rcGFnZVtuZXdfcGFnZV0sCisJCQkgICAgICAgaWJjLT51c2VyX3B0ciArIChwZ19pZHggKiBQQUdFX1NJWkUpLAorCQkJICAgICAgIHNpemUpKSB7CisJCXAtPnBhcnNlcl9lcnJvciA9IC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKworCS8qIGNvcHkgdG8gSUIgaGVyZSAqLworCW1lbWNweSgodm9pZCAqKShwLT5pYi0+cHRyKyhwZ19pZHgqKFBBR0VfU0laRS80KSkpLCBpYmMtPmtwYWdlW25ld19wYWdlXSwgc2l6ZSk7CisKKwlpYmMtPmxhc3RfY29waWVkX3BhZ2UgPSBwZ19pZHg7CisJaWJjLT5rcGFnZV9pZHhbbmV3X3BhZ2VdID0gcGdfaWR4OworCisJcmV0dXJuIG5ld19wYWdlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwppbmRleCBiMTNjNzllLi4yODc3MmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwpAQCAtMTA5LDkgKzEwOSwxNSBAQAogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApIHsKKwkJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCkKKwkJCQlXUkVHMzIoUjcwMF9EMkNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CisJCQllbHNlCisJCQkJV1JFRzMyKFI3MDBfRDFDVVJfU1VSRkFDRV9BRERSRVNTX0hJR0gsIDApOworCQl9CiAJCVdSRUczMihBVklWT19EMUNVUl9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGdwdV9hZGRyKTsKLQllbHNlIHsKKwl9IGVsc2UgewogCQlyYWRlb25fY3J0Yy0+bGVnYWN5X2N1cnNvcl9vZmZzZXQgPSBncHVfYWRkciAtIHJhZGVvbl9jcnRjLT5sZWdhY3lfZGlzcGxheV9iYXNlX2FkZHI7CiAJCS8qIG9mZnNldCBpcyBmcm9tIERJU1AoMilfQkFTRV9BRERSRVNTICovCiAJCVdSRUczMihSQURFT05fQ1VSX09GRlNFVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgcmFkZW9uX2NydGMtPmxlZ2FjeV9jdXJzb3Jfb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggZGFmNWRiNy4uZTNmOWVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTMyMiwxMCArMzIyLDYgQEAKIAljYXNlIENISVBfUlYzODA6CiAJCXJkZXYtPmFzaWMgPSAmcjMwMF9hc2ljOwogCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewotCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0OwotCQkJcmRldi0+YXNpYy0+Z2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pOwotCQkJcmRldi0+YXNpYy0+Z2FydF9lbmFibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZTsKIAkJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7CiAJCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKIAkJfQpAQCAtNDQ4LDIwICs0NDQsMjQgQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHN0cnVjdCBjYXJkX2luZm8gYXRvbV9jYXJkX2luZm8gPSB7Ci0JLmRldiA9IE5VTEwsCi0JLnJlZ19yZWFkID0gY2FpbF9yZWdfcmVhZCwKLQkucmVnX3dyaXRlID0gY2FpbF9yZWdfd3JpdGUsCi0JLm1jX3JlYWQgPSBjYWlsX21jX3JlYWQsCi0JLm1jX3dyaXRlID0gY2FpbF9tY193cml0ZSwKLQkucGxsX3JlYWQgPSBjYWlsX3BsbF9yZWFkLAotCS5wbGxfd3JpdGUgPSBjYWlsX3BsbF93cml0ZSwKLX07Ci0KIGludCByYWRlb25fYXRvbWJpb3NfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlhdG9tX2NhcmRfaW5mby5kZXYgPSByZGV2LT5kZGV2OwotCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQgPSBhdG9tX3BhcnNlKCZhdG9tX2NhcmRfaW5mbywgcmRldi0+Ymlvcyk7CisJc3RydWN0IGNhcmRfaW5mbyAqYXRvbV9jYXJkX2luZm8gPQorCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2FyZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWF0b21fY2FyZF9pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NhcmRfaW5mbyA9IGF0b21fY2FyZF9pbmZvOworCWF0b21fY2FyZF9pbmZvLT5kZXYgPSByZGV2LT5kZGV2OworCWF0b21fY2FyZF9pbmZvLT5yZWdfcmVhZCA9IGNhaWxfcmVnX3JlYWQ7CisJYXRvbV9jYXJkX2luZm8tPnJlZ193cml0ZSA9IGNhaWxfcmVnX3dyaXRlOworCWF0b21fY2FyZF9pbmZvLT5tY19yZWFkID0gY2FpbF9tY19yZWFkOworCWF0b21fY2FyZF9pbmZvLT5tY193cml0ZSA9IGNhaWxfbWNfd3JpdGU7CisJYXRvbV9jYXJkX2luZm8tPnBsbF9yZWFkID0gY2FpbF9wbGxfcmVhZDsKKwlhdG9tX2NhcmRfaW5mby0+cGxsX3dyaXRlID0gY2FpbF9wbGxfd3JpdGU7CisKKwlyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0ID0gYXRvbV9wYXJzZShhdG9tX2NhcmRfaW5mbywgcmRldi0+Ymlvcyk7CiAJcmFkZW9uX2F0b21faW5pdGlhbGl6ZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2LT5kZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ2OSw2ICs0NjksNyBAQAogdm9pZCByYWRlb25fYXRvbWJpb3NfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlrZnJlZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwlrZnJlZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jYXJkX2luZm8pOwogfQogCiBpbnQgcmFkZW9uX2NvbWJpb3NfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTQ4NSw3ICs0ODYsNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCByYWRlb25fdmdhX3NldF9kZWNvZGUodm9pZCAqY29va2llLCBib29sIHN0YXRlKQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gY29va2llOwotCiAJcmFkZW9uX3ZnYV9zZXRfc3RhdGUocmRldiwgc3RhdGUpOwogCWlmIChzdGF0ZSkKIAkJcmV0dXJuIFZHQV9SU1JDX0xFR0FDWV9JTyB8IFZHQV9SU1JDX0xFR0FDWV9NRU0gfApAQCAtNDkzLDYgKzQ5MywyOSBAQAogCWVsc2UKIAkJcmV0dXJuIFZHQV9SU1JDX05PUk1BTF9JTyB8IFZHQV9SU1JDX05PUk1BTF9NRU07CiB9CisKK3ZvaWQgcmFkZW9uX2FncF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7CisJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0lFIG1vZGVcbiIpOworCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJRTsKKwl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNTE1IHx8CisJCQlyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjM4MCB8fAorCQkJcmRldi0+ZmFtaWx5ID09IENISVBfUlY0MTAgfHwKKwkJCXJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjMpIHsKKwkJRFJNX0lORk8oIkZvcmNpbmcgQUdQIHRvIFBDSUUgbW9kZVxuIik7CisJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0lFOworCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoOworCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKKwl9IGVsc2UgeworCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJIG1vZGVcbiIpOworCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOworCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKKwkJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlOworCX0KK30KKwogLyoKICAqIFJhZGVvbiBkZXZpY2UuCiAgKi8KQEAgLTUzMSwyOSArNTU0LDcgQEAKIAl9CiAKIAlpZiAocmFkZW9uX2FncG1vZGUgPT0gLTEpIHsKLQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSB8fAotCQkgICAgcmRldi0+ZmFtaWx5ID09IENISVBfUlYzODAgfHwKLQkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNDEwIHx8Ci0JCSAgICByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIzKSB7Ci0JCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJRSBtb2RlXG4iKTsKLQkJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0lFOwotCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0OwotCQkJcmRldi0+YXNpYy0+Z2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pOwotCQkJcmRldi0+YXNpYy0+Z2FydF9lbmFibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKLQkJfSBlbHNlIHsKLQkJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0kgbW9kZVxuIik7Ci0JCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOwotCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnIxMDBfcGNpX2dhcnRfaW5pdDsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZmluaSA9ICZyMTAwX3BjaV9nYXJ0X2Zpbmk7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2VuYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2VuYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2Rpc2FibGU7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZTsKLQkJfQorCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CiAJfQogCiAJLyogc2V0IERNQSBtYXNrICsgbmVlZF9kbWEzMiBmbGFncy4KQEAgLTU4NSwxMTEgKzU4NiwyNiBAQAogCURSTV9JTkZPKCJyZWdpc3RlciBtbWlvIGJhc2U6IDB4JTA4WFxuIiwgKHVpbnQzMl90KXJkZXYtPnJtbWlvX2Jhc2UpOwogCURSTV9JTkZPKCJyZWdpc3RlciBtbWlvIHNpemU6ICV1XG4iLCAodW5zaWduZWQpcmRldi0+cm1taW9fc2l6ZSk7CiAKLQlyZGV2LT5uZXdfaW5pdF9wYXRoID0gZmFsc2U7Ci0JciA9IHJhZGVvbl9pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQogCS8qIGlmIHdlIGhhdmUgPiAxIFZHQSBjYXJkcywgdGhlbiBkaXNhYmxlIHRoZSByYWRlb24gVkdBIHJlc291cmNlcyAqLwotCXIgPSB2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIHJkZXYsIE5VTEwsIHJhZGVvbl92Z2Ffc2V0X2RlY29kZSk7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIC1FSU5WQUw7CisJLyogdGhpcyB3aWxsIGZhaWwgZm9yIGNhcmRzIHRoYXQgYXJlbid0IFZHQSBjbGFzcyBkZXZpY2VzLCBqdXN0CisJICogaWdub3JlIGl0ICovCisJdmdhX2NsaWVudF9yZWdpc3RlcihyZGV2LT5wZGV2LCByZGV2LCBOVUxMLCByYWRlb25fdmdhX3NldF9kZWNvZGUpOworCisJciA9IHJhZGVvbl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1AgJiYgIXJkZXYtPmFjY2VsX3dvcmtpbmcpIHsKKwkJLyogQWNjZWxlcmF0aW9uIG5vdCB3b3JraW5nIG9uIEFHUCBjYXJkIHRyeSBhZ2FpbgorCQkgKiB3aXRoIGZhbGxiYWNrIHRvIFBDSSBvciBQQ0lFIEdBUlQKKwkJICovCisJCXJhZGVvbl9ncHVfcmVzZXQocmRldik7CisJCXJhZGVvbl9maW5pKHJkZXYpOworCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJCXIgPSByYWRlb25faW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKIAl9Ci0KLQlpZiAoIXJkZXYtPm5ld19pbml0X3BhdGgpIHsKLQkJLyogU2V0dXAgZXJyYXRhIGZsYWdzICovCi0JCXJhZGVvbl9lcnJhdGEocmRldik7Ci0JCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KLQkJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKLQkJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwotCQlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOwotCi0JCS8qIEJJT1MqLwotCQlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgewotCQkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOwotCQkJaWYgKHIpIHsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXIgPSByYWRlb25fY29tYmlvc19pbml0KHJkZXYpOwotCQkJaWYgKHIpIHsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJfQotCQkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCi0JCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7Ci0JCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCQl9Ci0JCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCi0JCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKLQkJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOwotCQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCQkJfSBlbHNlIHsKLQkJCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7Ci0JCQl9Ci0JCX0KLQkJLyogR2V0IGNsb2NrICYgdnJhbSBpbmZvcm1hdGlvbiAqLwotCQlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7Ci0JCXJhZGVvbl92cmFtX2luZm8ocmRldik7Ci0JCS8qIEluaXRpYWxpemUgY2xvY2tzICovCi0JCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCi0JCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JCXIgPSByYWRlb25fbWNfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJldHVybiByOwotCQl9Ci0JCS8qIEZlbmNlIGRyaXZlciAqLwotCQlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQkvKiBNZW1vcnkgbWFuYWdlciAqLwotCQlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJciA9IHJhZGVvbl9ncHVfZ2FydF9pbml0KHJkZXYpOwotCQlpZiAocikKLQkJCXJldHVybiByOwotCQkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQotCQkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KLQkJciA9IHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gMDsKLQkJCXIgPSByYWRlb25fZ2VtX2luaXQocmRldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogMU0gcmluZyBidWZmZXIgKi8KLQkJciA9IHJhZGVvbl9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gMDsKLQkJciA9IHJhZGVvbl93Yl9pbml0KHJkZXYpOwotCQlpZiAocikKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7Ci0JCXIgPSByYWRlb25faWJfcG9vbF9pbml0KHJkZXYpOwotCQlpZiAocikKLQkJCXJldHVybiAwOwotCQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIDA7Ci0JCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOwotCX0KLQlEUk1fSU5GTygicmFkZW9uOiBrZXJuZWwgbW9kZXNldHRpbmcgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLlxuIik7CiAJaWYgKHJhZGVvbl90ZXN0aW5nKSB7CiAJCXJhZGVvbl90ZXN0X21vdmVzKHJkZXYpOwogCX0KQEAgLTcwMywzMiArNjE5LDggQEAKIHsKIAlEUk1fSU5GTygicmFkZW9uOiBmaW5pc2hpbmcgZGV2aWNlLlxuIik7CiAJcmRldi0+c2h1dGRvd24gPSB0cnVlOwotCS8qIE9yZGVyIG1hdHRlciBzbyBiZWNhcmVmdWxsIGlmIHlvdSByZWFycmFuZ2UgYW55dGhpbmdzICovCi0JaWYgKCFyZGV2LT5uZXdfaW5pdF9wYXRoKSB7Ci0JCXJhZGVvbl9pYl9wb29sX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9jcF9maW5pKHJkZXYpOwotCQlyYWRlb25fd2JfZmluaShyZGV2KTsKLQkJcmFkZW9uX2dwdV9nYXJ0X2ZpbmkocmRldik7Ci0JCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKLQkJcmFkZW9uX21jX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCi0JCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKLSNlbmRpZgotCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwotCQl2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9jbG9ja3NfZmluaShyZGV2KTsKLQkJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCQlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKLQkJfSBlbHNlIHsKLQkJCXJhZGVvbl9jb21iaW9zX2ZpbmkocmRldik7Ci0JCX0KLQkJa2ZyZWUocmRldi0+Ymlvcyk7Ci0JCXJkZXYtPmJpb3MgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9maW5pKHJkZXYpOwotCX0KKwlyYWRlb25fZmluaShyZGV2KTsKKwl2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwogCWlvdW5tYXAocmRldi0+cm1taW8pOwogCXJkZXYtPnJtbWlvID0gTlVMTDsKIH0KQEAgLTc2OCwxNCArNjYwLDcgQEAKIAogCXJhZGVvbl9zYXZlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOwogCi0JaWYgKCFyZGV2LT5uZXdfaW5pdF9wYXRoKSB7Ci0JCXJhZGVvbl9jcF9kaXNhYmxlKHJkZXYpOwotCQlyYWRlb25fZ2FydF9kaXNhYmxlKHJkZXYpOwotCQlyZGV2LT5pcnEuc3dfaW50ID0gZmFsc2U7Ci0JCXJhZGVvbl9pcnFfc2V0KHJkZXYpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9zdXNwZW5kKHJkZXYpOwotCX0KKwlyYWRlb25fc3VzcGVuZChyZGV2KTsKIAkvKiBldmljdCByZW1haW5pbmcgdnJhbSBtZW1vcnkgKi8KIAlyYWRlb25fb2JqZWN0X2V2aWN0X3ZyYW0ocmRldik7CiAKQEAgLTc5NCw3ICs2NzksNiBAQAogaW50IHJhZGVvbl9yZXN1bWVfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCByOwogCiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDApOwpAQCAtODA0LDQzICs2ODgsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCXBjaV9zZXRfbWFzdGVyKGRldi0+cGRldik7Ci0JLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLwotCWlmICghcmRldi0+bmV3X2luaXRfcGF0aCkgewotCQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KLQkJfQotCQkvKiBwb3N0IGNhcmQgKi8KLQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7Ci0JCX0KLQkJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KLQkJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJCXJldHVybiByOwotCQl9Ci0JCS8qIEVuYWJsZSBJUlEgKi8KLQkJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7Ci0JCXJhZGVvbl9pcnFfc2V0KHJkZXYpOwotCQkvKiBJbml0aWFsaXplIEdQVSBNZW1vcnkgQ29udHJvbGxlciAqLwotCQlyID0gcmFkZW9uX21jX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlyID0gcmFkZW9uX2dhcnRfZW5hYmxlKHJkZXYpOwotCQlpZiAocikgewotCQkJZ290byBvdXQ7Ci0JCX0KLQkJciA9IHJhZGVvbl9jcF9pbml0KHJkZXYsIHJkZXYtPmNwLnJpbmdfc2l6ZSk7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZSB7Ci0JCXJhZGVvbl9yZXN1bWUocmRldik7Ci0JfQotb3V0OgorCXJhZGVvbl9yZXN1bWUocmRldik7CiAJcmFkZW9uX3Jlc3RvcmVfYmlvc19zY3JhdGNoX3JlZ3MocmRldik7CiAJZmJfc2V0X3N1c3BlbmQocmRldi0+ZmJkZXZfaW5mbywgMCk7CiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IDVkODE0MWIuLmM4NWRmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTEwNiw1MSArMTA2LDQ0IEBACiAJCWxlZ2FjeV9jcnRjX2xvYWRfbHV0KGNydGMpOwogfQogCi0vKiogU2V0cyB0aGUgY29sb3IgcmFtcHMgb24gYmVoYWxmIG9mIFJhbmRSICovCisvKiogU2V0cyB0aGUgY29sb3IgcmFtcHMgb24gYmVoYWxmIG9mIGZiY29uICovCiB2b2lkIHJhZGVvbl9jcnRjX2ZiX2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiByZWQsIHUxNiBncmVlbiwKIAkJCSAgICAgIHUxNiBibHVlLCBpbnQgcmVnbm8pCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCi0JaWYgKHJlZ25vID09IDApCi0JCURSTV9ERUJVRygiZ2FtbWEgc2V0ICVkXG4iLCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CiAJcmFkZW9uX2NydGMtPmx1dF9yW3JlZ25vXSA9IHJlZCA+PiA2OwogCXJhZGVvbl9jcnRjLT5sdXRfZ1tyZWdub10gPSBncmVlbiA+PiA2OwogCXJhZGVvbl9jcnRjLT5sdXRfYltyZWdub10gPSBibHVlID4+IDY7CiB9CiAKKy8qKiBHZXRzIHRoZSBjb2xvciByYW1wcyBvbiBiZWhhbGYgb2YgZmJjb24gKi8KK3ZvaWQgcmFkZW9uX2NydGNfZmJfZ2FtbWFfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkgICAgICB1MTYgKmJsdWUsIGludCByZWdubykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CisKKwkqcmVkID0gcmFkZW9uX2NydGMtPmx1dF9yW3JlZ25vXSA8PCA2OworCSpncmVlbiA9IHJhZGVvbl9jcnRjLT5sdXRfZ1tyZWdub10gPDwgNjsKKwkqYmx1ZSA9IHJhZGVvbl9jcnRjLT5sdXRfYltyZWdub10gPDwgNjsKK30KKwogc3RhdGljIHZvaWQgcmFkZW9uX2NydGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCiAJCQkJICB1MTYgKmJsdWUsIHVpbnQzMl90IHNpemUpCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwotCWludCBpLCBqOworCWludCBpOwogCiAJaWYgKHNpemUgIT0gMjU2KSB7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGNydGMtPmZiID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KIAotCWlmIChjcnRjLT5mYi0+ZGVwdGggPT0gMTYpIHsKLQkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJCWlmIChpIDw9IDMxKSB7Ci0JCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgewotCQkJCQlyYWRlb25fY3J0Yy0+bHV0X3JbaSAqIDggKyBqXSA9IHJlZFtpXSA+PiA2OwotCQkJCQlyYWRlb25fY3J0Yy0+bHV0X2JbaSAqIDggKyBqXSA9IGJsdWVbaV0gPj4gNjsKLQkJCQl9Ci0JCQl9Ci0JCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQotCQkJCXJhZGVvbl9jcnRjLT5sdXRfZ1tpICogNCArIGpdID0gZ3JlZW5baV0gPj4gNjsKLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJcmFkZW9uX2NydGMtPmx1dF9yW2ldID0gcmVkW2ldID4+IDY7Ci0JCQlyYWRlb25fY3J0Yy0+bHV0X2dbaV0gPSBncmVlbltpXSA+PiA2OwotCQkJcmFkZW9uX2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA2OwotCQl9CisJLyogdXNlcnNwYWNlIHBhbGV0dGVzIGFyZSBhbHdheXMgY29ycmVjdCBhcyBpcyAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlyYWRlb25fY3J0Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gNjsKKwkJcmFkZW9uX2NydGMtPmx1dF9nW2ldID0gZ3JlZW5baV0gPj4gNjsKKwkJcmFkZW9uX2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA2OwogCX0KLQogCXJhZGVvbl9jcnRjX2xvYWRfbHV0KGNydGMpOwogfQogCkBAIC0zNDEsMjcgKzMzNCwxOSBAQAogCiBpbnQgcmFkZW9uX2RkY19nZXRfbW9kZXMoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpCiB7Ci0Jc3RydWN0IGVkaWQgKmVkaWQ7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCXJldHVybiAtMTsKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwotCQllZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOwotCX0gZWxzZQotCQllZGlkID0gcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZDsKKwl9CiAKLQlpZiAoZWRpZCkgewotCQkvKiB1cGRhdGUgZGlnaXRhbCBiaXRzIGhlcmUgKi8KLQkJaWYgKGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkKLQkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gMTsKLQkJZWxzZQotCQkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSAwOwotCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIGVkaWQpOwotCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIGVkaWQpOwotCQlrZnJlZShlZGlkKTsKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIE5VTEwpOwpAQCAtNzI0LDcgKzcwOSwxMSBAQAogCWlmIChyZXQpIHsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JLyogYWxsb2NhdGUgY3J0Y3MgLSBUT0RPIHNpbmdsZSBjcnRjICovCisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCW51bV9jcnRjID0gMTsKKworCS8qIGFsbG9jYXRlIGNydGNzICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9jcnRjOyBpKyspIHsKIAkJcmFkZW9uX2NydGNfaW5pdChyZGV2LT5kZGV2LCBpKTsKIAl9CkBAIC03NjQsNyArNzUzLDcgQEAKIAkJCXJhZGVvbl9jcnRjLT5ybXhfdHlwZSA9IHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZTsKIAkJCW1lbWNweSgmcmFkZW9uX2NydGMtPm5hdGl2ZV9tb2RlLAogCQkJCSZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGUsCi0JCQkJc2l6ZW9mKHN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUpKTsKKwkJCQlzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUpKTsKIAkJCWZpcnN0ID0gZmFsc2U7CiAJCX0gZWxzZSB7CiAJCQlpZiAocmFkZW9uX2NydGMtPnJteF90eXBlICE9IHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSkgewpAQCAtNzgyLDEwICs3NzEsMTAgQEAKIAlpZiAocmFkZW9uX2NydGMtPnJteF90eXBlICE9IFJNWF9PRkYpIHsKIAkJZml4ZWQyMF8xMiBhLCBiOwogCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoY3J0Yy0+bW9kZS52ZGlzcGxheSk7Ci0JCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyk7CisJCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUuaGRpc3BsYXkpOwogCQlyYWRlb25fY3J0Yy0+dnNjLmZ1bGwgPSByZml4ZWRfZGl2KGEsIGIpOwogCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoY3J0Yy0+bW9kZS5oZGlzcGxheSk7Ci0JCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyk7CisJCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUudmRpc3BsYXkpOwogCQlyYWRlb25fY3J0Yy0+aHNjLmZ1bGwgPSByZml4ZWRfZGl2KGEsIGIpOwogCX0gZWxzZSB7CiAJCXJhZGVvbl9jcnRjLT52c2MuZnVsbCA9IHJmaXhlZF9jb25zdCgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggNTBmY2U0OS4uN2Y1MGZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTYyLDkgKzYyLDYgQEAKIGludCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3VuaW5zdGFsbF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpcnFyZXR1cm5fdCByYWRlb25fZHJpdmVyX2lycV9oYW5kbGVyX2ttcyhEUk1fSVJRX0FSR1MpOwotaW50IHJhZGVvbl9tYXN0ZXJfY3JlYXRlX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKLXZvaWQgcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOwogaW50IHJhZGVvbl9kbWFfaW9jdGxfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogaW50IHJhZGVvbl9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwpAQCAtMjYwLDggKzI1Nyw2IEBACiAJLmdldF92YmxhbmtfY291bnRlciA9IHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXJfa21zLAogCS5lbmFibGVfdmJsYW5rID0gcmFkZW9uX2VuYWJsZV92Ymxhbmtfa21zLAogCS5kaXNhYmxlX3ZibGFuayA9IHJhZGVvbl9kaXNhYmxlX3ZibGFua19rbXMsCi0JLm1hc3Rlcl9jcmVhdGUgPSByYWRlb25fbWFzdGVyX2NyZWF0ZV9rbXMsCi0JLm1hc3Rlcl9kZXN0cm95ID0gcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcywKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAkuZGVidWdmc19pbml0ID0gcmFkZW9uX2RlYnVnZnNfaW5pdCwKIAkuZGVidWdmc19jbGVhbnVwID0gcmFkZW9uX2RlYnVnZnNfY2xlYW51cCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDYyMTY0NjcuLmQ0MmJjNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMzEsNiArMzEsMTAgQEAKIAogZXh0ZXJuIGludCBhdG9tX2RlYnVnOwogCisvKiBldmlsIGJ1dCBpbmNsdWRpbmcgYXRvbWJpb3MuaCBpcyBtdWNoIHdvcnNlICovCitib29sIHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaW5kZXgsCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworCiB1aW50MzJfdAogcmFkZW9uX2dldF9lbmNvZGVyX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsIHVpbnQ4X3QgZGFjKQogewpAQCAtMTY3LDQ5ICsxNzEsMTcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAKLQlpZiAobW9kZS0+aGRpc3BsYXkgPCBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyB8fAotCSAgICBtb2RlLT52ZGlzcGxheSA8IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSB7Ci0JCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQkJCWFkanVzdGVkX21vZGUtPmh0b3RhbCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0ID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyBuYXRpdmVfbW9kZS0+aG92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGg7Ci0JCQlhZGp1c3RlZF9tb2RlLT52dG90YWwgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgbmF0aXZlX21vZGUtPnZvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPnZzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoOwotCQkJLyogdXBkYXRlIGNydGMgdmFsdWVzICovCi0JCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7Ci0JCQkvKiBhZGp1c3QgY3J0YyB2YWx1ZXMgKi8KLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5oYmxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGg7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dmJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoOwotCQl9IGVsc2UgewotCQkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyBuYXRpdmVfbW9kZS0+aGJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgbmF0aXZlX21vZGUtPnZibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ID0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCQkvKiB1cGRhdGUgY3J0YyB2YWx1ZXMgKi8KLQkJCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKLQkJCS8qIGFkanVzdCBjcnRjIHZhbHVlcyAqLwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52b3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7CisJaWYgKG1vZGUtPmhkaXNwbGF5IDwgbmF0aXZlX21vZGUtPmhkaXNwbGF5IHx8CisJICAgIG1vZGUtPnZkaXNwbGF5IDwgbmF0aXZlX21vZGUtPnZkaXNwbGF5KSB7CisJCWludCBtb2RlX2lkID0gYWRqdXN0ZWRfbW9kZS0+YmFzZS5pZDsKKwkJKmFkanVzdGVkX21vZGUgPSAqbmF0aXZlX21vZGU7CisJCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQkJYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKKwkJCWFkanVzdGVkX21vZGUtPnZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CiAJCX0KLQkJYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgPSBuYXRpdmVfbW9kZS0+ZmxhZ3M7Ci0JCWFkanVzdGVkX21vZGUtPmNsb2NrID0gbmF0aXZlX21vZGUtPmRvdGNsb2NrOworCQlhZGp1c3RlZF9tb2RlLT5iYXNlLmlkID0gbW9kZV9pZDsKIAl9CiB9CiAKQEAgLTIxOSw3ICsxOTEsMTEgQEAKIAkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJaWYgKHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSAhPSBSTVhfT0ZGKQpAQCAtMjMwLDYgKzIwNiwxOCBAQAogCSAgICAmJiAobW9kZS0+Y3J0Y192c3luY19zdGFydCA8IChtb2RlLT5jcnRjX3ZkaXNwbGF5ICsgMikpKQogCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIDI7CiAKKwlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpIHsKKwkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjICp0dl9kYWMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJCWlmICh0dl9kYWMpIHsKKwkJCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCQkJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00pCisJCQkJcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3MocmRldiwgMCwgYWRqdXN0ZWRfbW9kZSk7CisJCQllbHNlCisJCQkJcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3MocmRldiwgMSwgYWRqdXN0ZWRfbW9kZSk7CisJCX0KKwl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDYxLDcgKzQ0OSw3IEBACiAJCWNhc2UgMToKIAkJCWFyZ3MudjEudWNNaXNjID0gMDsKIAkJCWFyZ3MudjEudWNBY3Rpb24gPSBhY3Rpb247Ci0JCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCQlhcmdzLnYxLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfSERNSV9UWVBFOwogCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CkBAIC00ODYsNyArNDc0LDcgQEAKIAkJCQlpZiAoZGlnLT5jb2hlcmVudF9tb2RlKQogCQkJCQlhcmdzLnYyLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfQ09IRVJFTlQ7CiAJCQl9Ci0JCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCQlhcmdzLnYyLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfSERNSV9UWVBFOwogCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJCQlhcmdzLnYyLnVjVHJ1bmNhdGUgPSAwOwpAQCAtNTQ0LDcgKzUzMiw3IEBACiAJc3dpdGNoIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQjogLyogSERNSS1CIGlzIGJhc2ljYWxseSBETC1EVkk7IGFuYWxvZyB3b3JrcyBmaW5lICovCi0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZSBpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtNTU0LDcgKzU0Miw3IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKIAlkZWZhdWx0OgotCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0hETUk7CiAJCWVsc2UKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC01NjYsNyArNTU0LDcgQEAKIAkJLyppZiAocmFkZW9uX291dHB1dC0+TW9uVHlwZSA9PSBNVF9EUCkKIAkJICByZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFA7CiAJCSAgZWxzZSovCi0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTczNCwxNCArNzIyLDE3IEBACiAJYXRvbV9wYXJzZV9jbWRfaGVhZGVyKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAmZnJldiwgJmNyZXYpOwogCiAJYXJncy52MS51Y0FjdGlvbiA9IGFjdGlvbjsKLQorCWlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCkgeworCQlhcmdzLnYxLnVzSW5pdEluZm8gPSByYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkOworCX0gZWxzZSB7CisJCWlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApCisJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAyKSAvIDEwKTsKKwkJZWxzZQorCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CisJfQogCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApIHsKLQkJCWFyZ3MudjIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAqIDEwICogMikgLyAxMDApOwotCQkJYXJncy52Mi5hY0NvbmZpZy5mRHVhbExpbmtDb25uZWN0b3IgPSAxOwotCQl9IGVsc2UgewotCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNigocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrICogMTAgKiA0KSAvIDEwMCk7Ci0JCX0KKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkKKwkJCWFyZ3MudjIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDIpIC8gMTApOwogCQlpZiAoZGlnLT5kaWdfYmxvY2spCiAJCQlhcmdzLnYyLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IDE7CiAKQEAgLTc2Niw3ICs3NTcsNiBAQAogCQl9CiAJfSBlbHNlIHsKIAkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0NMS1NSQ19QUExMOwotCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2spIC8gMTApOwogCiAJCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKIAkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CkBAIC04NzQsMTYgKzg2NCw5IEBACiAJRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IDA7CiAJYm9vbCBpc19kaWcgPSBmYWxzZTsKLQlpbnQgZGV2aWNlczsKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAotCS8qIG9uIERQTVMgb2ZmIHdlIGhhdmUgbm8gaWRlYSBpZiBhY3RpdmUgZGV2aWNlIGlzIG1lYW5pbmdmdWwgKi8KLQlpZiAobW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OICYmICFyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSkKLQkJZGV2aWNlcyA9IHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzOwotCWVsc2UKLQkJZGV2aWNlcyA9IHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlOwotCiAJRFJNX0RFQlVHKCJlbmNvZGVyIGRwbXMgJWQgdG8gbW9kZSAlZCwgZGV2aWNlcyAlMDh4LCBhY3RpdmVfZGV2aWNlcyAlMDh4XG4iLAogCQkgIHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkLCBtb2RlLCByYWRlb25fZW5jb2Rlci0+ZGV2aWNlcywKIAkJICByYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSk7CkBAIC05MTQsMTggKzg5NywxOCBAQAogCQlicmVhazsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzE6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMToKLQkJaWYgKGRldmljZXMgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCisJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgVFYxT3V0cHV0Q29udHJvbCk7Ci0JCWVsc2UgaWYgKGRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBDVjFPdXRwdXRDb250cm9sKTsKIAkJZWxzZQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBEQUMxT3V0cHV0Q29udHJvbCk7CiAJCWJyZWFrOwogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfREFDMjoKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMyOgotCQlpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBUVjFPdXRwdXRDb250cm9sKTsKLQkJZWxzZSBpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIENWMU91dHB1dENvbnRyb2wpOwogCQllbHNlCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERBQzJPdXRwdXRDb250cm9sKTsKQEAgLTExMDQsOCArMTA4NywxMSBAQAogCX0KIAogCS8qIHNldCBzY2FsZXIgY2xlYXJzIHRoaXMgb24gc29tZSBjaGlwcyAqLwotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpICYmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKLQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOworCWlmICghKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkpCisJCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCQkJICAgICAgIEFWSVZPX0QxTU9ERV9JTlRFUkxFQVZFX0VOKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTUzLDYgKzExMzksNyBAQAogCiAJCS8qIHNldHVwIGFuZCBlbmFibGUgdGhlIGVuY29kZXIgYW5kIHRyYW5zbWl0dGVyICovCiAJCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRU5BQkxFKTsKKwkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0lOSVQpOwogCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVApOwogCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFKTsKIAkJYnJlYWs7CkBAIC0xMjY4LDggKzEyNTUsNiBAQAogewogCXJhZGVvbl9hdG9tX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9hdG9tX2VuY29kZXJfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0KLQlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2F0b21fZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTM0NSw2ICsxMzMwLDcgQEAKIHZvaWQKIHJhZGVvbl9hZGRfYXRvbV9lbmNvZGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGVuY29kZXJfaWQsIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UpCiB7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyOwogCkBAIC0xMzY0LDcgKzEzNTAsMTAgQEAKIAkJcmV0dXJuOwogCiAJZW5jb2RlciA9ICZyYWRlb25fZW5jb2Rlci0+YmFzZTsKLQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgxOworCWVsc2UKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDM7CiAJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKIAogCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwppbmRleCA5NDRlNGZhLi5iMzhjNGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKIAkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAogCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCisJLmZiX3NldGNtYXAgPSBkcm1fZmJfaGVscGVyX3NldGNtYXAsCiB9OwogCiAvKioKQEAgLTEyMywxMSArMTI0LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyByYWRlb25fZmJfaGVscGVyX2Z1bmNzID0gewogCS5nYW1tYV9zZXQgPSByYWRlb25fY3J0Y19mYl9nYW1tYV9zZXQsCisJLmdhbW1hX2dldCA9IHJhZGVvbl9jcnRjX2ZiX2dhbW1hX2dldCwKIH07CiAKIGludCByYWRlb25mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJICAgIHVpbnQzMl90IGZiX3dpZHRoLCB1aW50MzJfdCBmYl9oZWlnaHQsCiAJCSAgICB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLCB1aW50MzJfdCBzdXJmYWNlX2hlaWdodCwKKwkJICAgIHVpbnQzMl90IHN1cmZhY2VfZGVwdGgsIHVpbnQzMl90IHN1cmZhY2VfYnBwLAogCQkgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3ApCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTQ1LDEzICsxNDgsMTkgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlib29sIGZiX3RpbGVkID0gZmFsc2U7IC8qIHVzZWZ1bCBmb3IgdGVzdGluZyAqLwogCXUzMiB0aWxpbmdfZmxhZ3MgPSAwOworCWludCBjcnRjX2NvdW50OwogCiAJbW9kZV9jbWQud2lkdGggPSBzdXJmYWNlX3dpZHRoOwogCW1vZGVfY21kLmhlaWdodCA9IHN1cmZhY2VfaGVpZ2h0OwotCW1vZGVfY21kLmJwcCA9IDMyOworCisJLyogYXZpdm8gY2FuJ3Qgc2Nhbm91dCByZWFsIDI0YnBwICovCisJaWYgKChzdXJmYWNlX2JwcCA9PSAyNCkgJiYgQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJc3VyZmFjZV9icHAgPSAzMjsKKworCW1vZGVfY21kLmJwcCA9IHN1cmZhY2VfYnBwOwogCS8qIG5lZWQgdG8gYWxpZ24gcGl0Y2ggd2l0aCBjcnRjIGxpbWl0cyAqLwogCW1vZGVfY21kLnBpdGNoID0gcmFkZW9uX2FsaWduX3BpdGNoKHJkZXYsIG1vZGVfY21kLndpZHRoLCBtb2RlX2NtZC5icHAsIGZiX3RpbGVkKSAqICgobW9kZV9jbWQuYnBwICsgMSkgLyA4KTsKLQltb2RlX2NtZC5kZXB0aCA9IDI0OworCW1vZGVfY21kLmRlcHRoID0gc3VyZmFjZV9kZXB0aDsKIAogCXNpemUgPSBtb2RlX2NtZC5waXRjaCAqIG1vZGVfY21kLmhlaWdodDsKIAlhbGlnbmVkX3NpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOwpAQCAtMjE2LDcgKzIyNSwxMSBAQAogCXJmYmRldiA9IGluZm8tPnBhcjsKIAlyZmJkZXYtPmhlbHBlci5mdW5jcyA9ICZyYWRlb25fZmJfaGVscGVyX2Z1bmNzOwogCXJmYmRldi0+aGVscGVyLmRldiA9IGRldjsKLQlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXRfY3J0Y19jb3VudCgmcmZiZGV2LT5oZWxwZXIsIDIsCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKQorCQljcnRjX2NvdW50ID0gMTsKKwllbHNlCisJCWNydGNfY291bnQgPSAyOworCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KCZyZmJkZXYtPmhlbHBlciwgY3J0Y19jb3VudCwKIAkJCQkJICAgIFJBREVPTkZCX0NPTk5fTElNSVQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VucmVmOwpAQCAtMjMzLDcgKzI0Niw3IEBACiAKIAlzdHJjcHkoaW5mby0+Zml4LmlkLCAicmFkZW9uZHJtZmIiKTsKIAotCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoKTsKKwlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCwgZmItPmRlcHRoKTsKIAogCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CiAJaW5mby0+ZmJvcHMgPSAmcmFkZW9uZmJfb3BzOwpAQCAtMjkwLDEzICszMDMsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY2hhciAqbW9kZV9vcHRpb247CitpbnQgcmFkZW9uX3BhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucykKK3sKKwljaGFyICp0aGlzX29wdDsKKworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCisJCXJldHVybiAwOworCisJd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISp0aGlzX29wdCkKKwkJCWNvbnRpbnVlOworCQltb2RlX29wdGlvbiA9IHRoaXNfb3B0OworCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IHJhZGVvbmZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKLQlyZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShkZXYsICZyYWRlb25mYl9jcmVhdGUpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKGRldiwgMzIsICZyYWRlb25mYl9jcmVhdGUpOwogfQotRVhQT1JUX1NZTUJPTChyYWRlb25mYl9wcm9iZSk7CiAKIGludCByYWRlb25mYl9yZW1vdmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKaW5kZXggYTkzMWFmMC4uYTY4ZDc1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwpAQCAtMTQwLDE1ICsxNDAsMTUgQEAKIAkJV0FSTigxLCAidHJ5aW5nIHRvIHVuYmluZCBtZW1vcnkgdG8gdW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQl0ID0gb2Zmc2V0IC8gNDA5NjsKLQlwID0gdCAvIChQQUdFX1NJWkUgLyA0MDk2KTsKKwl0ID0gb2Zmc2V0IC8gUkFERU9OX0dQVV9QQUdFX1NJWkU7CisJcCA9IHQgLyAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOwogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrLCBwKyspIHsKIAkJaWYgKHJkZXYtPmdhcnQucGFnZXNbcF0pIHsKIAkJCXBjaV91bm1hcF9wYWdlKHJkZXYtPnBkZXYsIHJkZXYtPmdhcnQucGFnZXNfYWRkcltwXSwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCQkJcmRldi0+Z2FydC5wYWdlc1twXSA9IE5VTEw7CiAJCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSAwOwotCQkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyA0MDk2KTsgaisrLCB0KyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOyBqKyssIHQrKykgewogCQkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIDApOwogCQkJfQogCQl9CkBAIC0xNjksOCArMTY5LDggQEAKIAkJRFJNX0VSUk9SKCJ0cnlpbmcgdG8gYmluZCBtZW1vcnkgdG8gdW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXQgPSBvZmZzZXQgLyA0MDk2OwotCXAgPSB0IC8gKFBBR0VfU0laRSAvIDQwOTYpOworCXQgPSBvZmZzZXQgLyBSQURFT05fR1BVX1BBR0VfU0laRTsKKwlwID0gdCAvIChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKywgcCsrKSB7CiAJCS8qIHdlIG5lZWQgdG8gc3VwcG9ydCBsYXJnZSBtZW1vcnkgY29uZmlndXJhdGlvbnMgKi8KQEAgLTE4NSw5ICsxODUsOSBAQAogCQl9CiAJCXJkZXYtPmdhcnQucGFnZXNbcF0gPSBwYWdlbGlzdFtpXTsKIAkJcGFnZV9iYXNlID0gcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdOwotCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIDQwOTYpOyBqKyssIHQrKykgeworCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsgaisrLCB0KyspIHsKIAkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIHBhZ2VfYmFzZSk7Ci0JCQlwYWdlX2Jhc2UgKz0gNDA5NjsKKwkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAkJfQogCX0KIAltYigpOwpAQCAtMjAwLDE0ICsyMDAsMTQgQEAKIAlpZiAocmRldi0+Z2FydC5wYWdlcykgewogCQlyZXR1cm4gMDsKIAl9Ci0JLyogV2UgbmVlZCBQQUdFX1NJWkUgPj0gNDA5NiAqLwotCWlmIChQQUdFX1NJWkUgPCA0MDk2KSB7CisJLyogV2UgbmVlZCBQQUdFX1NJWkUgPj0gUkFERU9OX0dQVV9QQUdFX1NJWkUgKi8KKwlpZiAoUEFHRV9TSVpFIDwgUkFERU9OX0dQVV9QQUdFX1NJWkUpIHsKIAkJRFJNX0VSUk9SKCJQYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIEdQVSBwYWdlIHNpemUhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIENvbXB1dGUgdGFibGUgc2l6ZSAqLwogCXJkZXYtPmdhcnQubnVtX2NwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gUEFHRV9TSVpFOwotCXJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gNDA5NjsKKwlyZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgPSByZGV2LT5tYy5ndHRfc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFOwogCURSTV9JTkZPKCJHQVJUOiBudW0gY3B1IHBhZ2VzICV1LCBudW0gZ3B1IHBhZ2VzICV1XG4iLAogCQkgcmRldi0+Z2FydC5udW1fY3B1X3BhZ2VzLCByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMpOwogCS8qIEFsbG9jYXRlIHBhZ2VzIHRhYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKaW5kZXggMTg0MTE0NS4uYTBmZTYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwpAQCAtODMsMTEgKzgzLDIyIEBACiBpbnQgcmFkZW9uX2lycV9rbXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgciA9IDA7CisJaW50IG51bV9jcnRjID0gMjsKIAotCXIgPSBkcm1fdmJsYW5rX2luaXQocmRldi0+ZGRldiwgMik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKQorCQludW1fY3J0YyA9IDE7CisKKwlyID0gZHJtX3ZibGFua19pbml0KHJkZXYtPmRkZXYsIG51bV9jcnRjKTsKIAlpZiAocikgewogCQlyZXR1cm4gcjsKIAl9CisJLyogZW5hYmxlIG1zaSAqLworCXJkZXYtPm1zaV9lbmFibGVkID0gMDsKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlYzODApIHsKKwkJaW50IHJldCA9IHBjaV9lbmFibGVfbXNpKHJkZXYtPnBkZXYpOworCQlpZiAoIXJldCkKKwkJCXJkZXYtPm1zaV9lbmFibGVkID0gMTsKKwl9CiAJZHJtX2lycV9pbnN0YWxsKHJkZXYtPmRkZXYpOwogCXJkZXYtPmlycS5pbnN0YWxsZWQgPSB0cnVlOwogCURSTV9JTkZPKCJyYWRlb246IGlycSBpbml0aWFsaXplZC5cbiIpOwpAQCAtOTksNSArMTEwLDcgQEAKIAlpZiAocmRldi0+aXJxLmluc3RhbGxlZCkgewogCQlyZGV2LT5pcnEuaW5zdGFsbGVkID0gZmFsc2U7CiAJCWRybV9pcnFfdW5pbnN0YWxsKHJkZXYtPmRkZXYpOworCQlpZiAocmRldi0+bXNpX2VuYWJsZWQpCisJCQlwY2lfZGlzYWJsZV9tc2kocmRldi0+cGRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCA3MDliZDg5Li5iYTEyODYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwpAQCAtMjAxLDU1ICsyMDEsNiBAQAogCiAKIC8qCi0gKiBGb3IgbXVsdGlwbGUgbWFzdGVyIChsaWtlIG11bHRpcGxlIFgpLgotICovCi1zdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSB7Ci0JZHJtX2xvY2FsX21hcF90ICpzYXJlYTsKLQlkcm1fcmFkZW9uX3NhcmVhX3QgKnNhcmVhX3ByaXY7Ci19OwotCi1pbnQgcmFkZW9uX21hc3Rlcl9jcmVhdGVfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpCi17Ci0Jc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2OwotCXVuc2lnbmVkIGxvbmcgc2FyZWFwYWdlOwotCWludCByZXQ7Ci0KLQltYXN0ZXJfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCptYXN0ZXJfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmIChtYXN0ZXJfcHJpdiA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQkvKiBwcmVidWlsZCB0aGUgU0FSRUEgKi8KLQlzYXJlYXBhZ2UgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBTQVJFQV9NQVgsIFBBR0VfU0laRSk7Ci0JcmV0ID0gZHJtX2FkZG1hcChkZXYsIDAsIHNhcmVhcGFnZSwgX0RSTV9TSE0sCi0JCQkgX0RSTV9DT05UQUlOU19MT0NLLAotCQkJICZtYXN0ZXJfcHJpdi0+c2FyZWEpOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJTQVJFQSBzZXR1cCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdiA9IG1hc3Rlcl9wcml2LT5zYXJlYS0+aGFuZGxlICsgc2l6ZW9mKHN0cnVjdCBkcm1fc2FyZWEpOwotCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID0gMDsKLQltYXN0ZXItPmRyaXZlcl9wcml2ID0gbWFzdGVyX3ByaXY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpCi17Ci0Jc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gbWFzdGVyLT5kcml2ZXJfcHJpdjsKLQotCWlmIChtYXN0ZXJfcHJpdiA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKG1hc3Rlcl9wcml2LT5zYXJlYSkgewotCQlkcm1fcm1tYXBfbG9ja2VkKGRldiwgbWFzdGVyX3ByaXYtPnNhcmVhKTsKLQl9Ci0Ja2ZyZWUobWFzdGVyX3ByaXYpOwotCW1hc3Rlci0+ZHJpdmVyX3ByaXYgPSBOVUxMOwotfQotCi0KLS8qCiAgKiBJT0NUTC4KICAqLwogaW50IHJhZGVvbl9kbWFfaW9jdGxfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwppbmRleCAyYjk5N2ExLi44ZDBiN2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl1MzIgZnBfaG9yel9zdHJldGNoLCBmcF92ZXJ0X3N0cmV0Y2gsIGZwX2hvcnpfdmVydF9hY3RpdmU7CiAJdTMyIGZwX2hfc3luY19zdHJ0X3dpZCwgZnBfY3J0Y19oX3RvdGFsX2Rpc3A7CiAJdTMyIGZwX3Zfc3luY19zdHJ0X3dpZCwgZnBfY3J0Y192X3RvdGFsX2Rpc3A7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2NydGMtPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGU7CiAKIAlmcF92ZXJ0X3N0cmV0Y2ggPSBSUkVHMzIoUkFERU9OX0ZQX1ZFUlRfU1RSRVRDSCkgJgogCQkoUkFERU9OX1ZFUlRfU1RSRVRDSF9SRVNFUlZFRCB8CkBAIC05NSwxOSArOTUsMTkgQEAKIAogCWZwX2hvcnpfdmVydF9hY3RpdmUgPSAwOwogCi0JaWYgKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzID09IDAgfHwKLQkgICAgbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgPT0gMCkgeworCWlmIChuYXRpdmVfbW9kZS0+aGRpc3BsYXkgPT0gMCB8fAorCSAgICBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgPT0gMCkgewogCQloc2NhbGUgPSBmYWxzZTsKIAkJdnNjYWxlID0gZmFsc2U7CiAJfSBlbHNlIHsKLQkJaWYgKHhyZXMgPiBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcykKLQkJCXhyZXMgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJaWYgKHlyZXMgPiBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykKLQkJCXlyZXMgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKKwkJaWYgKHhyZXMgPiBuYXRpdmVfbW9kZS0+aGRpc3BsYXkpCisJCQl4cmVzID0gbmF0aXZlX21vZGUtPmhkaXNwbGF5OworCQlpZiAoeXJlcyA+IG5hdGl2ZV9tb2RlLT52ZGlzcGxheSkKKwkJCXlyZXMgPSBuYXRpdmVfbW9kZS0+dmRpc3BsYXk7CiAKLQkJaWYgKHhyZXMgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMpCisJCWlmICh4cmVzID09IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkKIAkJCWhzY2FsZSA9IGZhbHNlOwotCQlpZiAoeXJlcyA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykKKwkJaWYgKHlyZXMgPT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KQogCQkJdnNjYWxlID0gZmFsc2U7CiAJfQogCkBAIC0xMTksMTEgKzExOSwxMSBAQAogCQllbHNlIHsKIAkJCWluYyA9IChmcF9ob3J6X3N0cmV0Y2ggJiBSQURFT05fSE9SWl9BVVRPX1JBVElPX0lOQykgPyAxIDogMDsKIAkJCXNjYWxlID0gKCh4cmVzICsgaW5jKSAqIFJBREVPTl9IT1JaX1NUUkVUQ0hfUkFUSU9fTUFYKQotCQkJCS8gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyAxOworCQkJCS8gbmF0aXZlX21vZGUtPmhkaXNwbGF5ICsgMTsKIAkJCWZwX2hvcnpfc3RyZXRjaCB8PSAoKChzY2FsZSkgJiBSQURFT05fSE9SWl9TVFJFVENIX1JBVElPX01BU0spIHwKIAkJCQkJUkFERU9OX0hPUlpfU1RSRVRDSF9CTEVORCB8CiAJCQkJCVJBREVPTl9IT1JaX1NUUkVUQ0hfRU5BQkxFIHwKLQkJCQkJKChuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcy84LTEpIDw8IDE2KSk7CisJCQkJCSgobmF0aXZlX21vZGUtPmhkaXNwbGF5LzgtMSkgPDwgMTYpKTsKIAkJfQogCiAJCWlmICghdnNjYWxlKQpAQCAtMTMxLDExICsxMzEsMTEgQEAKIAkJZWxzZSB7CiAJCQlpbmMgPSAoZnBfdmVydF9zdHJldGNoICYgUkFERU9OX1ZFUlRfQVVUT19SQVRJT19JTkMpID8gMSA6IDA7CiAJCQlzY2FsZSA9ICgoeXJlcyArIGluYykgKiBSQURFT05fVkVSVF9TVFJFVENIX1JBVElPX01BWCkKLQkJCQkvIG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgMTsKKwkJCQkvIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSArIDE7CiAJCQlmcF92ZXJ0X3N0cmV0Y2ggfD0gKCgoc2NhbGUpICYgUkFERU9OX1ZFUlRfU1RSRVRDSF9SQVRJT19NQVNLKSB8CiAJCQkJCVJBREVPTl9WRVJUX1NUUkVUQ0hfRU5BQkxFIHwKIAkJCQkJUkFERU9OX1ZFUlRfU1RSRVRDSF9CTEVORCB8Ci0JCQkJCSgobmF0aXZlX21vZGUtPnBhbmVsX3lyZXMtMSkgPDwgMTIpKTsKKwkJCQkJKChuYXRpdmVfbW9kZS0+dmRpc3BsYXktMSkgPDwgMTIpKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJNWF9DRU5URVI6CkBAIC0xNzUsOCArMTc1LDggQEAKIAkJCQkJCT8gUkFERU9OX0NSVENfVl9TWU5DX1BPTAogCQkJCQkJOiAwKSkpOwogCi0JCWZwX2hvcnpfdmVydF9hY3RpdmUgPSAoKChuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykgJiAweGZmZikgfAotCQkJCSgoKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzIC8gOCkgJiAweDFmZikgPDwgMTYpKTsKKwkJZnBfaG9yel92ZXJ0X2FjdGl2ZSA9ICgoKG5hdGl2ZV9tb2RlLT52ZGlzcGxheSkgJiAweGZmZikgfAorCQkJCSgoKG5hdGl2ZV9tb2RlLT5oZGlzcGxheSAvIDgpICYgMHgxZmYpIDw8IDE2KSk7CiAJCWJyZWFrOwogCWNhc2UgUk1YX09GRjoKIAlkZWZhdWx0OgpAQCAtNTMyLDYgKzUzMiwxMCBAQAogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIob2xkX2ZiKTsKIAkJcmFkZW9uX2dlbV9vYmplY3RfdW5waW4ocmFkZW9uX2ZiLT5vYmopOwogCX0KKworCS8qIEJ5dGVzIHBlciBwaXhlbCBtYXkgaGF2ZSBjaGFuZ2VkICovCisJcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY0LDYgKzY2OCw5IEBACiAKIAkJV1JFRzMyKFJBREVPTl9ESVNQMl9NRVJHRV9DTlRMLCBkaXNwMl9tZXJnZV9jbnRsKTsKIAkJV1JFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCwgY3J0YzJfZ2VuX2NudGwpOworCisJCVdSRUczMihSQURFT05fRlBfSDJfU1lOQ19TVFJUX1dJRCwgY3J0Y19oX3N5bmNfc3RydF93aWQpOworCQlXUkVHMzIoUkFERU9OX0ZQX1YyX1NZTkNfU1RSVF9XSUQsIGNydGNfdl9zeW5jX3N0cnRfd2lkKTsKIAl9IGVsc2UgewogCQl1aW50MzJfdCBjcnRjX2dlbl9jbnRsOwogCQl1aW50MzJfdCBjcnRjX2V4dF9jbnRsOwpAQCAtMTAxNSwxNCArMTAyMiwxMSBAQAogCQkJCSBpbnQgeCwgaW50IHksIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkvKiBUT0RPIFRWICovCiAJcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAlyYWRlb25fc2V0X2NydGNfdGltaW5nKGNydGMsIGFkanVzdGVkX21vZGUpOwogCXJhZGVvbl9zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwotCXJhZGVvbl9iYW5kd2lkdGhfdXBkYXRlKHJkZXYpOwogCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7CiAJCXJhZGVvbl9sZWdhY3lfcm14X21vZGVfc2V0KGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUpOwogCX0gZWxzZSB7CkBAIC0xMDUzLDYgKzEwNTcsNyBAQAogCS5tb2RlX3NldF9iYXNlID0gcmFkZW9uX2NydGNfc2V0X2Jhc2UsCiAJLnByZXBhcmUgPSByYWRlb25fY3J0Y19wcmVwYXJlLAogCS5jb21taXQgPSByYWRlb25fY3J0Y19jb21taXQsCisJLmxvYWRfbHV0ID0gcmFkZW9uX2NydGNfbG9hZF9sdXQsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKaW5kZXggYjE1NDdmNy4uMDAzODIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKQEAgLTEwNyw4ICsxMDcsNiBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV9sdmRzX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCi0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfbHZkc19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTkyLDYgKzE5MCw4IEBACiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwogCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCWlmIChyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgIT0gUk1YX09GRikKQEAgLTIxOCw3ICsyMTgsOCBAQAogCQkJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewotCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtMjcyLDcgKzI3Myw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC00NjgsNyArNDY4LDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdG1kc19pbnRfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdG1kc19pbnRfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTU0Myw2ICs1NDIsMTQgQEAKIAogICAgIGZwX2dlbl9jbnRsICY9IH4oUkFERU9OX0ZQX0ZQT04gfCBSQURFT05fRlBfVE1EU19FTik7CiAKKyAgICBmcF9nZW5fY250bCAmPSB+KFJBREVPTl9GUF9STVhfSFZTWU5DX0NPTlRST0xfRU4gfAorCQkgICAgIFJBREVPTl9GUF9ERlBfU1lOQ19TRUwgfAorCQkgICAgIFJBREVPTl9GUF9DUlRfU1lOQ19TRUwgfAorCQkgICAgIFJBREVPTl9GUF9DUlRDX0xPQ0tfOERPVCB8CisJCSAgICAgUkFERU9OX0ZQX1VTRV9TSEFET1dfRU4gfAorCQkgICAgIFJBREVPTl9GUF9DUlRDX1VTRV9TSEFET1dfVkVORCB8CisJCSAgICAgUkFERU9OX0ZQX0NSVF9TWU5DX0FMVCk7CisKICAgICBpZiAoMSkgLyogIEZJWE1FIHJnYkJpdHMgPT0gOCAqLwogCSAgICBmcF9nZW5fY250bCB8PSBSQURFT05fRlBfUEFORUxfRk9STUFUOyAgLyogMjQgYml0IGZvcm1hdCAqLwogICAgIGVsc2UKQEAgLTU1Niw3ICs1NjMsNyBAQAogCQkgICAgZWxzZQogCQkJICAgIGZwX2dlbl9jbnRsIHw9IFIyMDBfRlBfU09VUkNFX1NFTF9DUlRDMTsKIAkgICAgfSBlbHNlCi0JCSAgICBmcF9nZW5fY250bCB8PSBSQURFT05fRlBfU0VMX0NSVEMxOworCQkgICAgZnBfZ2VuX2NudGwgJj0gflJBREVPTl9GUF9TRUxfQ1JUQzI7CiAgICAgfSBlbHNlIHsKIAkgICAgaWYgKEFTSUNfSVNfUjMwMChyZGV2KSB8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKSB7CiAJCSAgICBmcF9nZW5fY250bCAmPSB+UjIwMF9GUF9TT1VSQ0VfU0VMX01BU0s7CkBAIC01OTMsNyArNjAwLDggQEAKIAkJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewotCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtNjM2LDcgKzY0NCw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3RtZHNfZXh0X2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3RtZHNfZXh0X2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC03MzUsNyArNzQyLDggQEAKIAkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7Ci0KKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJcmV0dXJuIHRydWU7CkBAIC04MzksNyArODQ3LDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdHZfZGFjX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3R2X2RhY19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtODgxLDcgKzg4OCw3IEBACiAJCQkJCVI0MjBfVFZfREFDX0RBQ0FESl9NQVNLIHwKIAkJCQkJUjQyMF9UVl9EQUNfUkRBQ1BEIHwKIAkJCQkJUjQyMF9UVl9EQUNfR0RBQ1BEIHwKLQkJCQkJUjQyMF9UVl9EQUNfR0RBQ1BEIHwKKwkJCQkJUjQyMF9UVl9EQUNfQkRBQ1BEIHwKIAkJCQkJUjQyMF9UVl9EQUNfVFZFTkFCTEUpOwogCQl9IGVsc2UgewogCQkJdHZfZGFjX2NudGwgJj0gfihSQURFT05fVFZfREFDX1NURF9NQVNLIHwKQEAgLTg4OSw3ICs4OTYsNyBAQAogCQkJCQlSQURFT05fVFZfREFDX0RBQ0FESl9NQVNLIHwKIAkJCQkJUkFERU9OX1RWX0RBQ19SREFDUEQgfAogCQkJCQlSQURFT05fVFZfREFDX0dEQUNQRCB8Ci0JCQkJCVJBREVPTl9UVl9EQUNfR0RBQ1BEKTsKKwkJCQkJUkFERU9OX1RWX0RBQ19CREFDUEQpOwogCQl9CiAKIAkJLyogIEZJWE1FIFRWICovCkBAIC0xMzE4LDcgKzEzMjUsMTAgQEAKIAkJcmV0dXJuOwogCiAJZW5jb2RlciA9ICZyYWRlb25fZW5jb2Rlci0+YmFzZTsKLQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgxOworCWVsc2UKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDM7CiAJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKIAogCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggNTcwYTU4Ny4uYWNlNzI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtMTcyLDYgKzE3Miw3IEBACiAKIHN0cnVjdCByYWRlb25fbW9kZV9pbmZvIHsKIAlzdHJ1Y3QgYXRvbV9jb250ZXh0ICphdG9tX2NvbnRleHQ7CisJc3RydWN0IGNhcmRfaW5mbyAqYXRvbV9jYXJkX2luZm87CiAJZW51bSByYWRlb25fY29ubmVjdG9yX3RhYmxlIGNvbm5lY3Rvcl90YWJsZTsKIAlib29sIG1vZGVfY29uZmlnX2luaXRpYWxpemVkOwogCXN0cnVjdCByYWRlb25fY3J0YyAqY3J0Y3NbMl07CkBAIC0xODYsMTcgKzE4Nyw2IEBACiAKIH07CiAKLXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgewotCS8qIHByZWZlcnJlZCBtb2RlICovCi0JdWludDMyX3QgcGFuZWxfeHJlcywgcGFuZWxfeXJlczsKLQl1aW50MzJfdCBob3ZlcnBsdXMsIGhzeW5jX3dpZHRoOwotCXVpbnQzMl90IGhibGFuazsKLQl1aW50MzJfdCB2b3ZlcnBsdXMsIHZzeW5jX3dpZHRoOwotCXVpbnQzMl90IHZibGFuazsKLQl1aW50MzJfdCBkb3RjbG9jazsKLQl1aW50MzJfdCBmbGFnczsKLX07Ci0KICNkZWZpbmUgTUFYX0hfQ09ERV9USU1JTkdfTEVOIDMyCiAjZGVmaW5lIE1BWF9WX0NPREVfVElNSU5HX0xFTiAzMgogCkBAIC0yMjgsNyArMjE4LDcgQEAKIAllbnVtIHJhZGVvbl9ybXhfdHlwZSBybXhfdHlwZTsKIAlmaXhlZDIwXzEyIHZzYzsKIAlmaXhlZDIwXzEyIGhzYzsKLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIG5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG5hdGl2ZV9tb2RlOwogfTsKIAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX3ByaW1hcnlfZGFjIHsKQEAgLTI0OCw3ICsyMzgsNyBAQAogCWJvb2wgICAgIHVzZV9iaW9zX2RpdmlkZXJzOwogCXVpbnQzMl90IGx2ZHNfZ2VuX2NudGw7CiAJLyogcGFuZWwgbW9kZSAqLwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgbmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjIHsKQEAgLTI3MSw2ICsyNjEsMTYgQEAKIAlzdHJ1Y3QgcmFkZW9uX3RtZHNfcGxsIHRtZHNfcGxsWzRdOwogfTsKIAorLyogc3ByZWFkIHNwZWN0cnVtICovCitzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgeworCXVpbnQxNl90IHBlcmNlbnRhZ2U7CisJdWludDhfdCB0eXBlOworCXVpbnQ4X3Qgc3RlcDsKKwl1aW50OF90IGRlbGF5OworCXVpbnQ4X3QgcmFuZ2U7CisJdWludDhfdCByZWZkaXY7Cit9OworCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgewogCS8qIGF0b20gZGlnICovCiAJYm9vbCBjb2hlcmVudF9tb2RlOwpAQCAtMjc4LDggKzI3OCw5IEBACiAJLyogYXRvbSBsdmRzICovCiAJdWludDMyX3QgbHZkc19taXNjOwogCXVpbnQxNl90IHBhbmVsX3B3cl9kZWxheTsKKwlzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgKnNzOwogCS8qIHBhbmVsIG1vZGUgKi8KLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIG5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG5hdGl2ZV9tb2RlOwogfTsKIAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjIHsKQEAgLTI5NCw3ICsyOTUsNyBAQAogCXVpbnQzMl90IGZsYWdzOwogCXVpbnQzMl90IHBpeGVsX2Nsb2NrOwogCWVudW0gcmFkZW9uX3JteF90eXBlIHJteF90eXBlOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgbmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CiAJdm9pZCAqZW5jX3ByaXY7CiB9OwogCkBAIC0zMDgsMTIgKzMwOSwxNSBAQAogCXVpbnQzMl90IGNvbm5lY3Rvcl9pZDsKIAl1aW50MzJfdCBkZXZpY2VzOwogCXN0cnVjdCByYWRlb25faTJjX2NoYW4gKmRkY19idXM7CisJLyogc29tZSBzeXN0ZW1zIGhhdmUgYSBhbiBoZG1pIGFuZCB2Z2EgcG9ydCB3aXRoIGEgc2hhcmVkIGRkYyBsaW5lICovCisJYm9vbCBzaGFyZWRfZGRjOwogCWJvb2wgdXNlX2RpZ2l0YWw7CiAJLyogd2UgbmVlZCB0byBtaW5kIHRoZSBFRElEIGJldHdlZW4gZGV0ZWN0CiAJICAgYW5kIGdldCBtb2RlcyBkdWUgdG8gYW5hbG9nL2RpZ2l0YWwvdHZlbmNvZGVyICovCiAJc3RydWN0IGVkaWQgKmVkaWQ7CiAJdm9pZCAqY29uX3ByaXY7CiAJYm9vbCBkYWNfbG9hZF9kZXRlY3Q7CisJdWludDE2X3QgY29ubmVjdG9yX29iamVjdF9pZDsKIH07CiAKIHN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIgewpAQCAtNDA3LDYgKzQxMSw4IEBACiByYWRlb25fY29tYmlvc19lbmNvZGVyX2RwbXNfc2NyYXRjaF9yZWdzKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgYm9vbCBvbik7CiBleHRlcm4gdm9pZCByYWRlb25fY3J0Y19mYl9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkJICAgICB1MTYgYmx1ZSwgaW50IHJlZ25vKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAorCQkJCSAgICAgdTE2ICpibHVlLCBpbnQgcmVnbm8pOwogc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqcmFkZW9uX2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCwKIAkJCQkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwppbmRleCA3M2FmNDYzLi4xZjA1NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwpAQCAtNDAwLDExICs0MDAsOSBAQAogaW50IHJhZGVvbl9vYmplY3RfbGlzdF9yZXNlcnZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCAqbG9iajsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppOwogCWludCByOwogCi0JbGlzdF9mb3JfZWFjaChpLCBoZWFkKSB7Ci0JCWxvYmogPSBsaXN0X2VudHJ5KGksIHN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QsIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobG9iaiwgaGVhZCwgbGlzdCl7CiAJCWlmICghbG9iai0+cm9iai0+cGluX2NvdW50KSB7CiAJCQlyID0gcmFkZW9uX29iamVjdF9yZXNlcnZlKGxvYmotPnJvYmosIHRydWUpOwogCQkJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKQEAgLTQyMCwxMyArNDE4LDEwIEBACiB2b2lkIHJhZGVvbl9vYmplY3RfbGlzdF91bnJlc2VydmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0ICpsb2JqOwotCXN0cnVjdCBsaXN0X2hlYWQgKmk7CiAKLQlsaXN0X2Zvcl9lYWNoKGksIGhlYWQpIHsKLQkJbG9iaiA9IGxpc3RfZW50cnkoaSwgc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7CiAJCWlmICghbG9iai0+cm9iai0+cGluX2NvdW50KSB7CiAJCQlyYWRlb25fb2JqZWN0X3VucmVzZXJ2ZShsb2JqLT5yb2JqKTsKLQkJfSBlbHNlIHsKIAkJfQogCX0KIH0KQEAgLTQzNiw3ICs0MzEsNiBAQAogCXN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QgKmxvYmo7CiAJc3RydWN0IHJhZGVvbl9vYmplY3QgKnJvYmo7CiAJc3RydWN0IHJhZGVvbl9mZW5jZSAqb2xkX2ZlbmNlID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppOwogCWludCByOwogCiAJciA9IHJhZGVvbl9vYmplY3RfbGlzdF9yZXNlcnZlKGhlYWQpOwpAQCAtNDQ0LDggKzQzOCw3IEBACiAJCXJhZGVvbl9vYmplY3RfbGlzdF91bnJlc2VydmUoaGVhZCk7CiAJCXJldHVybiByOwogCX0KLQlsaXN0X2Zvcl9lYWNoKGksIGhlYWQpIHsKLQkJbG9iaiA9IGxpc3RfZW50cnkoaSwgc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7CiAJCXJvYmogPSBsb2JqLT5yb2JqOwogCQlpZiAoIXJvYmotPnBpbl9jb3VudCkgewogCQkJaWYgKGxvYmotPndkb21haW4pIHsKQEAgLTQ4MiwxMCArNDc1LDggQEAKIHsKIAlzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0ICpsb2JqOwogCXN0cnVjdCByYWRlb25fZmVuY2UgKm9sZF9mZW5jZSA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaTsKIAotCWxpc3RfZm9yX2VhY2goaSwgaGVhZCkgewotCQlsb2JqID0gbGlzdF9lbnRyeShpLCBzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0LCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpIHsKIAkJb2xkX2ZlbmNlID0gKHN0cnVjdCByYWRlb25fZmVuY2UgKilsb2JqLT5yb2JqLT50b2JqLnN5bmNfb2JqOwogCQlsb2JqLT5yb2JqLT50b2JqLnN5bmNfb2JqID0gTlVMTDsKIAkJaWYgKG9sZF9mZW5jZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxNDZjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IFJhZmHFgiBNacWCZWNraSA8emFqZWM1QGdtYWlsLmNvbT4KKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKKworaW50IHJhZGVvbl9kZWJ1Z2ZzX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCitpbnQgcmFkZW9uX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaWYgKHJhZGVvbl9kZWJ1Z2ZzX3BtX2luaXQocmRldikpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBDUCAhXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlYnVnZnMgaW5mbworICovCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisKK3N0YXRpYyBpbnQgcmFkZW9uX2RlYnVnZnNfcG1faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzZXFfcHJpbnRmKG0sICJlbmdpbmUgY2xvY2s6ICV1MCBIelxuIiwgcmFkZW9uX2dldF9lbmdpbmVfY2xvY2socmRldikpOworCXNlcV9wcmludGYobSwgIm1lbW9yeSBjbG9jazogJXUwIEh6XG4iLCByYWRlb25fZ2V0X21lbW9yeV9jbG9jayhyZGV2KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IHJhZGVvbl9wbV9pbmZvX2xpc3RbXSA9IHsKKwl7InJhZGVvbl9wbV9pbmZvIiwgcmFkZW9uX2RlYnVnZnNfcG1faW5mbywgMCwgTlVMTH0sCit9OworI2VuZGlmCisKK2ludCByYWRlb25fZGVidWdmc19wbV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCXJldHVybiByYWRlb25fZGVidWdmc19hZGRfZmlsZXMocmRldiwgcmFkZW9uX3BtX2luZm9fbGlzdCwgQVJSQVlfU0laRShyYWRlb25fcG1faW5mb19saXN0KSk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCmluZGV4IDIxZGE4NzEuLjI5YWI3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCkBAIC0yOTAsNiArMjkwLDggQEAKICNkZWZpbmUgUkFERU9OX0JVU19DTlRMICAgICAgICAgICAgICAgICAgICAgMHgwMDMwCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX01BU1RFUl9ESVMgICAgICAgICAoMSA8PCA2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19CSU9TX0RJU19ST00gICAgICAgKDEgPDwgMTIpCisjCWRlZmluZSBSUzYwMF9CVVNfTUFTVEVSX0RJUwkgICAgICgxIDw8IDE0KQorIwlkZWZpbmUgUlM2MDBfTVNJX1JFQVJNCQkgICAgICgxIDw8IDIwKSAvKiByczYwMC9yczY5MC9yczc0MCAqLwogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19SRF9ESVNDQVJEX0VOICAgICAgKDEgPDwgMjQpCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1JEX0FCT1JUX0VOICAgICAgICAoMSA8PCAyNSkKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfTVNUUl9ESVNDT05ORUNUX0VOICgxIDw8IDI4KQpAQCAtMjk3LDYgKzI5OSw5IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1JFQURfQlVSU1QgICAgICAgICAoMSA8PCAzMCkKICNkZWZpbmUgUkFERU9OX0JVU19DTlRMMSAgICAgICAgICAgICAgICAgICAgMHgwMDM0CiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1dBSVRfT05fTE9DS19FTiAgICAoMSA8PCA0KQorLyogcnYzNzAvcnYzODAsIHJ2NDEwLCByNDIzL3I0MzAvcjQ4MCwgcjV4eCAqLworI2RlZmluZSBSQURFT05fTVNJX1JFQVJNX0VOCQkgICAgMHgwMTYwCisjCWRlZmluZSBSVjM3MF9NU0lfUkVBUk1fRU4JICAgICAoMSA8PCAwKQogCiAvKiAjZGVmaW5lIFJBREVPTl9QQ0lFX0lOREVYICAgICAgICAgICAgICAgICAgIDB4MDAzMCAqLwogLyogI2RlZmluZSBSQURFT05fUENJRV9EQVRBICAgICAgICAgICAgICAgICAgICAweDAwMzQgKi8KQEAgLTMzMTEsNiArMzMxNiw3IEBACiAjZGVmaW5lIFJBREVPTl9BSUNfQ05UTCAgICAgICAgICAgICAgICAgICAgIDB4MDFkMAogIyAgICAgICBkZWZpbmUgUkFERU9OX1BDSUdBUlRfVFJBTlNMQVRFX0VOICAgICAoMSA8PCAwKQogIyAgICAgICBkZWZpbmUgUkFERU9OX0RJU19PVVRfT0ZfUENJX0dBUlRfQUNDRVNTICAgICAoMSA8PCAxKQorIwlkZWZpbmUgUlM0MDBfTVNJX1JFQVJNCSAgICAgICAgICAgICAgICAoMSA8PCAzKSAvKiByczQwMC9yczQ4MCAqLwogI2RlZmluZSBSQURFT05fQUlDX0xPX0FERFIgICAgICAgICAgICAgICAgICAweDAxZGMKICNkZWZpbmUgUkFERU9OX0FJQ19QVF9CQVNFCQkweDAxZDgKICNkZWZpbmUgUkFERU9OX0FJQ19ISV9BRERSCQkweDAxZTAKQEAgLTMzMzMsNiArMzMzOSw3IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUX01BWF9EV09SRFMgICAgICAgICAgKDEgPDwgMTIpCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUMF9SRUdfTUFTSyAgICAgICAgICAgMHgwMDAwMDdmZgogIyAgICAgICBkZWZpbmUgUjMwMF9DUF9QQUNLRVQwX1JFR19NQVNLICAgICAgICAgICAgIDB4MDAwMDFmZmYKKyMgICAgICAgZGVmaW5lIFI2MDBfQ1BfUEFDS0VUMF9SRUdfTUFTSyAgICAgICAgICAgICAweDAwMDBmZmZmCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUMV9SRUcwX01BU0sgICAgICAgICAgMHgwMDAwMDdmZgogIyAgICAgICBkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVDFfUkVHMV9NQVNLICAgICAgICAgIDB4MDAzZmY4MDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCmluZGV4IDAzYzMzY2YuLmY4YTQ2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKQEAgLTQyLDcgKzQyLDcgQEAKIAkvKiBOdW1iZXIgb2YgdGVzdHMgPQogCSAqIChUb3RhbCBHVFQgLSBJQiBwb29sIC0gd3JpdGViYWNrIHBhZ2UgLSByaW5nIGJ1ZmZlcikgLyB0ZXN0IHNpemUKIAkgKi8KLQluID0gKHJkZXYtPm1jLmd0dF9zaXplIC0gUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0IC0gNDA5NiAtCisJbiA9IChyZGV2LT5tYy5ndHRfc2l6ZSAtIFJBREVPTl9JQl9QT09MX1NJWkUqNjQqMTAyNCAtIFJBREVPTl9HUFVfUEFHRV9TSVpFIC0KIAkgICAgIHJkZXYtPmNwLnJpbmdfc2l6ZSkgLyBzaXplOwogCiAJZ3R0X29iaiA9IGt6YWxsb2MobiAqIHNpemVvZigqZ3R0X29iaiksIEdGUF9LRVJORUwpOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CiAKLQkJciA9IHJhZGVvbl9jb3B5KHJkZXYsIGd0dF9hZGRyLCB2cmFtX2FkZHIsIHNpemUgLyA0MDk2LCBmZW5jZSk7CisJCXIgPSByYWRlb25fY29weShyZGV2LCBndHRfYWRkciwgdnJhbV9hZGRyLCBzaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUsIGZlbmNlKTsKIAkJaWYgKHIpIHsKIAkJCURSTV9FUlJPUigiRmFpbGVkIEdUVC0+VlJBTSBjb3B5ICVkXG4iLCBpKTsKIAkJCWdvdG8gb3V0X2NsZWFudXA7CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJCWdvdG8gb3V0X2NsZWFudXA7CiAJCX0KIAotCQlyID0gcmFkZW9uX2NvcHkocmRldiwgdnJhbV9hZGRyLCBndHRfYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5KHJkZXYsIHZyYW1fYWRkciwgZ3R0X2FkZHIsIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwgZmVuY2UpOwogCQlpZiAocikgewogCQkJRFJNX0VSUk9SKCJGYWlsZWQgVlJBTS0+R1RUIGNvcHkgJWRcbiIsIGkpOwogCQkJZ290byBvdXRfY2xlYW51cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKaW5kZXggYWNkODg5Yy4uMTM4MWUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKQEAgLTI5NSw2ICsyOTUsMTIgQEAKIAlpZiAodW5saWtlbHkocikpIHsKIAkJcmV0dXJuIHI7CiAJfQorCisJciA9IHR0bV90dF9zZXRfcGxhY2VtZW50X2NhY2hpbmcoYm8tPnR0bSwgdG1wX21lbS5wbGFjZW1lbnQpOworCWlmICh1bmxpa2VseShyKSkgeworCQlnb3RvIG91dF9jbGVhbnVwOworCX0KKwogCXIgPSB0dG1fdHRfYmluZChiby0+dHRtLCAmdG1wX21lbSk7CiAJaWYgKHVubGlrZWx5KHIpKSB7CiAJCWdvdG8gb3V0X2NsZWFudXA7CkBAIC01MzAsNyArNTM2LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCByYWRlb25fdHRtX3ZtX29wczsKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnR0bV92bV9vcHMgPSBOVUxMOworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdHRtX3ZtX29wcyA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgcmFkZW9uX3R0bV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CkBAIC02ODksOSArNjk1LDYgQEAKIAogI2RlZmluZSBSQURFT05fREVCVUdGU19NRU1fVFlQRVMgMgogCi1zdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcmFkZW9uX21lbV90eXBlc19saXN0W1JBREVPTl9ERUJVR0ZTX01FTV9UWVBFU107Ci1zdGF0aWMgY2hhciByYWRlb25fbWVtX3R5cGVzX25hbWVzW1JBREVPTl9ERUJVR0ZTX01FTV9UWVBFU11bMzJdOwotCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiBzdGF0aWMgaW50IHJhZGVvbl9tbV9kdW1wX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHsKQEAgLTcxMSw5ICs3MTQsMTEgQEAKIAogc3RhdGljIGludCByYWRlb25fdHRtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwlzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcmFkZW9uX21lbV90eXBlc19saXN0W1JBREVPTl9ERUJVR0ZTX01FTV9UWVBFU107CisJc3RhdGljIGNoYXIgcmFkZW9uX21lbV90eXBlc19uYW1lc1tSQURFT05fREVCVUdGU19NRU1fVFlQRVNdWzMyXTsKIAl1bnNpZ25lZCBpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAJZm9yIChpID0gMDsgaSA8IFJBREVPTl9ERUJVR0ZTX01FTV9UWVBFUzsgaSsrKSB7CiAJCWlmIChpID09IDApCiAJCQlzcHJpbnRmKHJhZGVvbl9tZW1fdHlwZXNfbmFtZXNbaV0sICJyYWRlb25fdnJhbV9tbSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczEwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnMxMDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhOTEzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnMxMDBkLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SUzEwMERfSF9fCisjZGVmaW5lIF9fUlMxMDBEX0hfXworCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAxNUNfTkJfVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNUMKKyNkZWZpbmUgICBTXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNUNfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTVDX01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IGEzZmJkYWQuLmNhMDM3MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTI3LDI3ICsyNywxMiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxkcm0vZHJtUC5oPgotI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJyczQwMGQuaCIKIAotLyogcnM0MDAscnM0ODAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisvKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvIDogcnM0MDAscnM0ODAgKi8KK3N0YXRpYyBpbnQgcnM0MDBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0byA6Ci0gKiByczQwMCxyczQ4MAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KLXZvaWQgcnM0MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNDAwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLQotLyoKLSAqIEdBUlQgZnVuY3Rpb25zLgotICovCiB2b2lkIHJzNDAwX2dhcnRfYWRqdXN0X3NpemUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJLyogQ2hlY2sgZ2FydCBzaXplICovCkBAIC0yMzgsNjEgKzIyMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotLyoKLSAqIE1DIGZ1bmN0aW9ucy4KLSAqLwotaW50IHJzNDAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdWludDMyX3QgdG1wOwotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQotCXJzNDAwX2dwdV9pbml0KHJkZXYpOwotCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uICs9IChyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiAmPSB+KHJkZXYtPm1jLmd0dF9zaXplIC0gMSk7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQlyMTAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChSQURFT05fTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMihSQURFT05fTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0JdG1wID0gUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCkgfCBSQURFT05fSFBfTElOX1JEX0NBQ0hFX0RJUzsKLQlXUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCB0bXAgfCBSQURFT05fSERQX1NPRlRfUkVTRVQgfCBSQURFT05fSERQX1JFQURfQlVGRkVSX0lOVkFMSURBVEUpOwotCSh2b2lkKVJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwotCVdSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwsIHRtcCk7Ci0JKHZvaWQpUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczQwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi12b2lkIHJzNDAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogdm9pZCByczQwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogSERQIHNhbWUgcGxhY2Ugb24gcnM0MDAgPyAqLwpAQCAtMzA1LDEwICsyMzUsNiBAQAogCX0KIH0KIAotCi0vKgotICogVlJBTSBpbmZvLgotICovCiB2b2lkIHJzNDAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlyczQwMF9nYXJ0X2FkanVzdF9zaXplKHJkZXYpOwpAQCAtMzE5LDEwICsyNDUsNiBAQAogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOwogfQogCi0KLS8qCi0gKiBJbmRpcmVjdCByZWdpc3RlcnMgYWNjZXNzb3IKLSAqLwogdWludDMyX3QgcnM0MDBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKQogewogCXVpbnQzMl90IHI7CkBAIC0zNDAsMTAgKzI2Miw2IEBACiAJV1JFRzMyKFJTNDgwX05CX01DX0lOREVYLCAweGZmKTsKIH0KIAotCi0vKgotICogRGVidWdmcyBpbmZvCi0gKi8KICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHN0YXRpYyBpbnQgcnM0MDBfZGVidWdmc19nYXJ0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogewpAQCAtNDE5LDcgKzMzNyw3IEBACiB9OwogI2VuZGlmCiAKLWludCByczQwMF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgaW50IHJzNDAwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAlyZXR1cm4gcmFkZW9uX2RlYnVnZnNfYWRkX2ZpbGVzKHJkZXYsIHJzNDAwX2dhcnRfaW5mb19saXN0LCAxKTsKQEAgLTQyNywzICszNDUsMTkwIEBACiAJcmV0dXJuIDA7CiAjZW5kaWYKIH0KKworc3RhdGljIGludCByczQwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCXUzMiB0bXA7CisKKwkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCisJdG1wID0gR18wMDAxNUNfTUNfRkJfU1RBUlQoUlJFRzMyKFJfMDAwMTVDX05CX1RPTSkpOworCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSBHXzAwMDE1Q19NQ19GQl9TVEFSVCh0bXApIDw8IDE2OworCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKKwlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByczQwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByMTAwX21jX3NhdmUgc2F2ZTsKKworCS8qIFN0b3BzIGFsbCBtYyBjbGllbnRzICovCisJcjEwMF9tY19zdG9wKHJkZXYsICZzYXZlKTsKKworCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KKwlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwlXUkVHMzIoUl8wMDAxNDhfTUNfRkJfTE9DQVRJT04sCisJCVNfMDAwMTQ4X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisKKwlyMTAwX21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcnM0MDBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJzNDAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyczQwMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCXIgPSByczQwMF9nYXJ0X2VuYWJsZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRW5hYmxlIElSUSAqLworCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCXIxMDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcnM0MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KKwlyMzAwX2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogc2V0dXAgTUMgYmVmb3JlIGNhbGxpbmcgcG9zdCB0YWJsZXMgKi8KKwlyczQwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByczQwMF9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcnM0MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMTAwX2NwX2Rpc2FibGUocmRldik7CisJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOworCXIxMDBfaXJxX2Rpc2FibGUocmRldik7CisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHJzNDAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM0MDBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcnM0MDBfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKK30KKworaW50IHJzNDAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBjb21iaW9zIGZvciBSUzQwMC9SUzQ4MCBHUFVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyID0gcmFkZW9uX2NvbWJpb3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwl9CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCisJcnM0MDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHJzNDAwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEZlbmNlIGRyaXZlciAqLworCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByczQwMF9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIzMDBfc2V0X3JlZ19zYWZlKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByczQwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJzNDAwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJzNDAwX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOGJhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwZC5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JTNDAwRF9IX18KKyNkZWZpbmUgX19SUzQwMERfSF9fCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDE0OF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0OAorI2RlZmluZSAgIFNfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDE0OF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxNDhfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxNUNfTkJfVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNUMKKyNkZWZpbmUgICBTXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNUNfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTVDX01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCAwZTc5MWUyNi4uNWYxMTdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtMjUsMjggKzI1LDI1IEBACiAgKiAgICAgICAgICBBbGV4IERldWNoZXIKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLworLyogUlM2MDAgLyBSYWRlb24gWDEyNTAvWDEyNzAgaW50ZWdyYXRlZCBHUFUKKyAqCisgKiBUaGlzIGZpbGUgZ2F0aGVyIGZ1bmN0aW9uIHNwZWNpZmljIHRvIFJTNjAwIHdoaWNoIGlzIHRoZSBJR1Agb2YKKyAqIHRoZSBYMTI1MC9YMTI3MCBmYW1pbHkgc3VwcG9ydGluZyBpbnRlbCBDUFUgKHdoaWxlIFJTNjkwL1JTNzQwCisgKiBpcyB0aGUgWDEyNTAvWDEyNzAgc3VwcG9ydGluZyBBTUQgQ1BVKS4gVGhlIGRpc3BsYXkgZW5naW5lIGFyZQorICogdGhlIGF2aXZvIG9uZSwgYmlvcyBpcyBhbiBhdG9tYmlvcywgM0QgYmxvY2sgYXJlIHRoZSBvbmUgb2YgdGhlCisgKiBSNFhYIGZhbWlseS4gVGhlIEdBUlQgaXMgZGlmZmVyZW50IGZyb20gdGhlIFJTNDAwIG9uZSBhbmQgaXMgdmVyeQorICogY2xvc2UgdG8gdGhlIG9uZSBvZiB0aGUgUjYwMCBmYW1pbHkgKFI2MDAgbGlrZWx5IGJlaW5nIGFuIGV2b2x1dGlvbgorICogb2YgdGhlIFJTNjAwIEdBUlQgYmxvY2spLgorICovCiAjaW5jbHVkZSAiZHJtUC5oIgotI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKKyNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAicnM2MDBkLmgiCiAKICNpbmNsdWRlICJyczYwMF9yZWdfc2FmZS5oIgogCi0vKiByczYwMCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG8gOgotICogcnM2MDAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCiB2b2lkIHJzNjAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZGlzYWJsZV92Z2Eoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCiAKIC8qCiAgKiBHQVJULgpAQCAtNTUsMTggKzUyLDE4IEBACiB7CiAJdWludDMyX3QgdG1wOwogCi0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKLQl0bXAgJj0gfihSUzYwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTIHwgUlM2MDBfSU5WQUxJREFURV9MMl9DQUNIRSk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMLCB0bXApOworCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCk7CisJdG1wICY9IENfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgJiBDXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFOworCVdSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCwgdG1wKTsKIAotCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCk7Ci0JdG1wIHw9IFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCwgdG1wKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwpOworCXRtcCB8PSBTXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTKDEpICYgU18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRSgxKTsKKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwsIHRtcCk7CiAKLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwpOwotCXRtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsIHRtcCk7Ci0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwpOworCXRtcCAmPSBDXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTICYgQ18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRTsKKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwsIHRtcCk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMKTsKIH0KIAogaW50IHJzNjAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTg4LDcgKzg1LDcgQEAKIAogaW50IHJzNjAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHRtcDsKKwl1MzIgdG1wOwogCWludCByLCBpOwogCiAJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqID09IE5VTEwpIHsKQEAgLTk4LDQ2ICs5NSw1MCBAQAogCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogRW5hYmxlIGJ1cyBtYXN0ZXIgKi8KKwl0bXAgPSBSUkVHMzIoUl8wMDAwNENfQlVTX0NOVEwpICYgQ18wMDAwNENfQlVTX01BU1RFUl9ESVM7CisJV1JFRzMyKFJfMDAwMDRDX0JVU19DTlRMLCB0bXApOwogCS8qIEZJWE1FOiBzZXR1cCBkZWZhdWx0IHBhZ2UgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsCi0JCSAoUlM2MDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoNikgfAotCQkgIFJTNjAwX0VGRkVDVElWRV9MMl9RVUVVRV9TSVpFKDYpKSk7CisJV1JFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMLAorCQkgKFNfMDAwMTAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFKDYpIHwKKwkJICBTXzAwMDEwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg2KSkpOwogCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7Ci0JCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ0xJRU5UMF9DTlRMICsgaSwKLQkJCSAoUlM2MDBfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgfAotCQkJICBSUzYwMF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTIHwKLQkJCSAgUlM2MDBfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19ERUZBVUxUX1BBR0UgfAotCQkJICBSUzYwMF9FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSgzKSB8Ci0JCQkgIFJTNjAwX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKLQkJCSAgUlM2MDBfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoMykpKTsKKwkJV1JFRzMyX01DKFJfMDAwMTZDX01DX1BUMF9DTElFTlQwX0NOVEwgKyBpLAorCQkJU18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoMSkgfAorCQkJU18wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX01BU0soCisJCQkJVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX0lOX1NZUykgfAorCQkJU18wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTUygKKwkJCQlWXzAwMDE2Q19TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfREVGQVVMVF9QQUdFKSB8CisJCQlTXzAwMDE2Q19FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSgxKSB8CisJCQlTXzAwMDE2Q19FTkFCTEVfRlJBR01FTlRfUFJPQ0VTU0lORygxKSB8CisJCQlTXzAwMDE2Q19FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSgxKSk7CiAJfQogCiAJLyogU3lzdGVtIGNvbnRleHQgbWFwIHRvIEdBUlQgc3BhY2UgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCB0bXApOworCVdSRUczMl9NQyhSXzAwMDExMl9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy5ndHRfc3RhcnQpOworCVdSRUczMl9NQyhSXzAwMDExNF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCk7CiAKIAkvKiBlbmFibGUgZmlyc3QgY29udGV4dCAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9TVEFSVF9BRERSLCByZGV2LT5tYy5ndHRfbG9jYXRpb24pOwotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsIHRtcCk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMLAotCQkgKFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFIHwgUlM2MDBfUEFHRV9UQUJMRV9UWVBFX0ZMQVQpKTsKKwlXUkVHMzJfTUMoUl8wMDAxM0NfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfU1RBUlRfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0KTsKKwlXUkVHMzJfTUMoUl8wMDAxNENfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsIHJkZXYtPm1jLmd0dF9lbmQpOworCVdSRUczMl9NQyhSXzAwMDEwMl9NQ19QVDBfQ09OVEVYVDBfQ05UTCwKKwkJCVNfMDAwMTAyX0VOQUJMRV9QQUdFX1RBQkxFKDEpIHwKKwkJCVNfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEgoVl8wMDAxMDJfUEFHRV9UQUJMRV9GTEFUKSk7CiAJLyogZGlzYWJsZSBhbGwgb3RoZXIgY29udGV4dHMgKi8KIAlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7Ci0JCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfQ05UTCArIGksIDApOworCQlXUkVHMzJfTUMoUl8wMDAxMDJfTUNfUFQwX0NPTlRFWFQwX0NOVEwgKyBpLCAwKTsKIAl9CiAKIAkvKiBzZXR1cCB0aGUgcGFnZSB0YWJsZSAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9CQVNFX0FERFIsCi0JCSByZGV2LT5nYXJ0LnRhYmxlX2FkZHIpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfREVGQVVMVF9SRUFEX0FERFIsIDApOworCVdSRUczMl9NQyhSXzAwMDEyQ19NQ19QVDBfQ09OVEVYVDBfRkxBVF9CQVNFX0FERFIsCisJCQlyZGV2LT5nYXJ0LnRhYmxlX2FkZHIpOworCVdSRUczMl9NQyhSXzAwMDExQ19NQ19QVDBfQ09OVEVYVDBfREVGQVVMVF9SRUFEX0FERFIsIDApOwogCiAJLyogZW5hYmxlIHBhZ2UgdGFibGVzICovCi0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsICh0bXAgfCBSUzYwMF9FTkFCTEVfUFQpKTsKLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfQ05UTDEpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19DTlRMMSwgKHRtcCB8IFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFUykpOworCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCk7CisJV1JFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMLCAodG1wIHwgU18wMDAxMDBfRU5BQkxFX1BUKDEpKSk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMDA5X01DX0NOVEwxKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDlfTUNfQ05UTDEsICh0bXAgfCBTXzAwMDAwOV9FTkFCTEVfUEFHRV9UQUJMRVMoMSkpKTsKIAlyczYwMF9nYXJ0X3RsYl9mbHVzaChyZGV2KTsKIAlyZGV2LT5nYXJ0LnJlYWR5ID0gdHJ1ZTsKIAlyZXR1cm4gMDsKQEAgLTE0OCwxMCArMTQ5LDkgQEAKIAl1aW50MzJfdCB0bXA7CiAKIAkvKiBGSVhNRTogZGlzYWJsZSBvdXQgb2YgZ2FydCBhY2Nlc3MgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsIDApOwotCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19DTlRMMSk7Ci0JdG1wICY9IH5SUzYwMF9FTkFCTEVfUEFHRV9UQUJMRVM7Ci0JV1JFRzMyX01DKFJTNjAwX01DX0NOVEwxLCB0bXApOworCVdSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCwgMCk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMDA5X01DX0NOVEwxKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDlfTUNfQ05UTDEsIHRtcCAmIENfMDAwMDA5X0VOQUJMRV9QQUdFX1RBQkxFUyk7CiAJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKSB7CiAJCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKIAkJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CkBAIC0xODUsMTMyICsxODUsNjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0vKgotICogTUMuCi0gKi8KLXZvaWQgcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVuc2lnbmVkIHRtcDsKLQotCWlmIChyMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IEdVSSBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwotCi0JdG1wID0gUlJFRzMyKEFWSVZPX0QxVkdBX0NPTlRST0wpOwotCVdSRUczMihBVklWT19EMVZHQV9DT05UUk9MLCB0bXAgJiB+QVZJVk9fRFZHQV9DT05UUk9MX01PREVfRU5BQkxFKTsKLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCk7Ci0JV1JFRzMyKEFWSVZPX0QyVkdBX0NPTlRST0wsIHRtcCAmIH5BVklWT19EVkdBX0NPTlRST0xfTU9ERV9FTkFCTEUpOwotCi0JdG1wID0gUlJFRzMyKEFWSVZPX0QxQ1JUQ19DT05UUk9MKTsKLQlXUkVHMzIoQVZJVk9fRDFDUlRDX0NPTlRST0wsIHRtcCAmIH5BVklWT19DUlRDX0VOKTsKLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDJDUlRDX0NPTlRST0wpOwotCVdSRUczMihBVklWT19EMkNSVENfQ09OVFJPTCwgdG1wICYgfkFWSVZPX0NSVENfRU4pOwotCi0JLyogbWFrZSBzdXJlIGFsbCBwcmV2aW91cyB3cml0ZSBnb3QgdGhyb3VnaCAqLwotCXRtcCA9IFJSRUczMihBVklWT19EMkNSVENfQ09OVFJPTCk7Ci0KLQltZGVsYXkoMSk7Ci19Ci0KLWludCByczYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0KLQlyczYwMF9ncHVfaW5pdChyZGV2KTsKLQlyczYwMF9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQkvKiBFbmFibGUgYnVzIG1hc3RlciAqLwotCXRtcCA9IFJSRUczMihSQURFT05fQlVTX0NOVEwpICYgflJTNjAwX0JVU19NQVNURVJfRElTOwotCVdSRUczMihSQURFT05fQlVTX0NOVEwsIHRtcCk7Ci0JLyogRklYTUU6IFdoYXQgZG9lcyBBR1AgbWVhbnMgZm9yIHN1Y2ggY2hpcHNldCA/ICovCi0JV1JFRzMyX01DKFJTNjAwX01DX0FHUF9MT0NBVElPTiwgMHgwRkZGRkZGRik7Ci0JLyogRklYTUU6IGFyZSB0aGlzIEFHUCByZWcgaW4gaW5kaXJlY3QgTUMgcmFuZ2UgPyAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19BR1BfQkFTRSwgMCk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX0FHUF9CQVNFXzIsIDApOwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnM2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSUzYwMF9NQ19GQl9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUlM2MDBfTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19GQl9MT0NBVElPTiwgdG1wKTsKLQlXUkVHMzIoUlM2OTBfSERQX0ZCX0xPQ0FUSU9OLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczYwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBJbnRlcnJ1cHRzCi0gKi8KIGludCByczYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcCA9IDA7CiAJdWludDMyX3QgbW9kZV9pbnQgPSAwOwogCiAJaWYgKHJkZXYtPmlycS5zd19pbnQpIHsKLQkJdG1wIHw9IFJBREVPTl9TV19JTlRfRU5BQkxFOworCQl0bXAgfD0gU18wMDAwNDBfU1dfSU5UX0VOKDEpOwogCX0KIAlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSkgewotCQltb2RlX2ludCB8PSBBVklWT19EMU1PREVfSU5UX01BU0s7CisJCW1vZGVfaW50IHw9IFNfMDA2NTQwX0QxTU9ERV9WQkxBTktfSU5UX01BU0soMSk7CiAJfQogCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzFdKSB7Ci0JCW1vZGVfaW50IHw9IEFWSVZPX0QyTU9ERV9JTlRfTUFTSzsKKwkJbW9kZV9pbnQgfD0gU18wMDY1NDBfRDJNT0RFX1ZCTEFOS19JTlRfTUFTSygxKTsKIAl9Ci0JV1JFRzMyKFJBREVPTl9HRU5fSU5UX0NOVEwsIHRtcCk7Ci0JV1JFRzMyKEFWSVZPX0R4TU9ERV9JTlRfTUFTSywgbW9kZV9pbnQpOworCVdSRUczMihSXzAwMDA0MF9HRU5fSU5UX0NOVEwsIHRtcCk7CisJV1JFRzMyKFJfMDA2NTQwX0R4TU9ERV9JTlRfTUFTSywgbW9kZV9pbnQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJzNjAwX2lycV9hY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiAqcjUwMF9kaXNwX2ludCkKIHsKLQl1aW50MzJfdCBpcnFzID0gUlJFRzMyKFJBREVPTl9HRU5fSU5UX1NUQVRVUyk7Ci0JdWludDMyX3QgaXJxX21hc2sgPSBSQURFT05fU1dfSU5UX1RFU1Q7CisJdWludDMyX3QgaXJxcyA9IFJSRUczMihSXzAwMDA0NF9HRU5fSU5UX1NUQVRVUyk7CisJdWludDMyX3QgaXJxX21hc2sgPSB+Q18wMDAwNDRfU1dfSU5UOwogCi0JaWYgKGlycXMgJiBBVklWT19ESVNQTEFZX0lOVF9TVEFUVVMpIHsKLQkJKnI1MDBfZGlzcF9pbnQgPSBSUkVHMzIoQVZJVk9fRElTUF9JTlRFUlJVUFRfU1RBVFVTKTsKLQkJaWYgKCpyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDFfVkJMQU5LX0lOVEVSUlVQVCkgewotCQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9WQkxBTktfU1RBVFVTLCBBVklWT19WQkxBTktfQUNLKTsKKwlpZiAoR18wMDAwNDRfRElTUExBWV9JTlRfU1RBVChpcnFzKSkgeworCQkqcjUwMF9kaXNwX2ludCA9IFJSRUczMihSXzAwN0VEQ19ESVNQX0lOVEVSUlVQVF9TVEFUVVMpOworCQlpZiAoR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCgqcjUwMF9kaXNwX2ludCkpIHsKKwkJCVdSRUczMihSXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVRVUywKKwkJCQlTXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSygxKSk7CiAJCX0KLQkJaWYgKCpyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDJfVkJMQU5LX0lOVEVSUlVQVCkgewotCQkJV1JFRzMyKEFWSVZPX0QyTU9ERV9WQkxBTktfU1RBVFVTLCBBVklWT19WQkxBTktfQUNLKTsKKwkJaWYgKEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQoKnI1MDBfZGlzcF9pbnQpKSB7CisJCQlXUkVHMzIoUl8wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUVVMsCisJCQkJU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0soMSkpOwogCQl9CiAJfSBlbHNlIHsKIAkJKnI1MDBfZGlzcF9pbnQgPSAwOwogCX0KIAogCWlmIChpcnFzKSB7Ci0JCVdSRUczMihSQURFT05fR0VOX0lOVF9TVEFUVVMsIGlycXMpOworCQlXUkVHMzIoUl8wMDAwNDRfR0VOX0lOVF9TVEFUVVMsIGlycXMpOwogCX0KIAlyZXR1cm4gaXJxcyAmIGlycV9tYXNrOwogfQogCit2b2lkIHJzNjAwX2lycV9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwlXUkVHMzIoUl8wMDAwNDBfR0VOX0lOVF9DTlRMLCAwKTsKKwlXUkVHMzIoUl8wMDY1NDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKKwkvKiBXYWl0IGFuZCBhY2tub3dsZWRnZSBpcnEgKi8KKwltZGVsYXkoMSk7CisJcnM2MDBfaXJxX2FjayhyZGV2LCAmdG1wKTsKK30KKwogaW50IHJzNjAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHN0YXR1czsKKwl1aW50MzJfdCBzdGF0dXMsIG1zaV9yZWFybTsKIAl1aW50MzJfdCByNTAwX2Rpc3BfaW50OwogCiAJc3RhdHVzID0gcnM2MDBfaXJxX2FjayhyZGV2LCAmcjUwMF9kaXNwX2ludCk7CkBAIC0zMTksODUgKzI1MSw2NSBAQAogCX0KIAl3aGlsZSAoc3RhdHVzIHx8IHI1MDBfZGlzcF9pbnQpIHsKIAkJLyogU1cgaW50ZXJydXB0ICovCi0JCWlmIChzdGF0dXMgJiBSQURFT05fU1dfSU5UX1RFU1QpIHsKKwkJaWYgKEdfMDAwMDQwX1NXX0lOVF9FTihzdGF0dXMpKQogCQkJcmFkZW9uX2ZlbmNlX3Byb2Nlc3MocmRldik7Ci0JCX0KIAkJLyogVmVydGljYWwgYmxhbmsgaW50ZXJydXB0cyAqLwotCQlpZiAocjUwMF9kaXNwX2ludCAmIEFWSVZPX0QxX1ZCTEFOS19JTlRFUlJVUFQpIHsKKwkJaWYgKEdfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQocjUwMF9kaXNwX2ludCkpCiAJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAwKTsKLQkJfQotCQlpZiAocjUwMF9kaXNwX2ludCAmIEFWSVZPX0QyX1ZCTEFOS19JTlRFUlJVUFQpIHsKKwkJaWYgKEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQocjUwMF9kaXNwX2ludCkpCiAJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAxKTsKLQkJfQogCQlzdGF0dXMgPSByczYwMF9pcnFfYWNrKHJkZXYsICZyNTAwX2Rpc3BfaW50KTsKIAl9CisJaWYgKHJkZXYtPm1zaV9lbmFibGVkKSB7CisJCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJCWNhc2UgQ0hJUF9SUzYwMDoKKwkJY2FzZSBDSElQX1JTNjkwOgorCQljYXNlIENISVBfUlM3NDA6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX0JVU19DTlRMKSAmIH5SUzYwMF9NU0lfUkVBUk07CisJCQlXUkVHMzIoUkFERU9OX0JVU19DTlRMLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9CVVNfQ05UTCwgbXNpX3JlYXJtIHwgUlM2MDBfTVNJX1JFQVJNKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbXNpX3JlYXJtID0gUlJFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4pICYgflJWMzcwX01TSV9SRUFSTV9FTjsKKwkJCVdSRUczMihSQURFT05fTVNJX1JFQVJNX0VOLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSB8IFJWMzcwX01TSV9SRUFSTV9FTik7CisJCQlicmVhazsKKwkJfQorCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHUzMiByczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKQogewogCWlmIChjcnRjID09IDApCi0JCXJldHVybiBSUkVHMzIoQVZJVk9fRDFDUlRDX0ZSQU1FX0NPVU5UKTsKKwkJcmV0dXJuIFJSRUczMihSXzAwNjBBNF9EMUNSVENfU1RBVFVTX0ZSQU1FX0NPVU5UKTsKIAllbHNlCi0JCXJldHVybiBSUkVHMzIoQVZJVk9fRDJDUlRDX0ZSQU1FX0NPVU5UKTsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQl1bnNpZ25lZCB0bXA7Ci0KLQlXUkVHMzIoMHgzMzAsIDApOwotCVdSRUczMigweDMzOCwgMCk7Ci0JdG1wID0gUlJFRzMyKDB4MzAwKTsKLQl0bXAgJj0gfigzIDw8IDE2KTsKLQlXUkVHMzIoMHgzMDAsIHRtcCk7Ci0JV1JFRzMyKDB4MzA4LCAoMSA8PCA4KSk7Ci0JV1JFRzMyKDB4MzEwLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKLQlXUkVHMzIoMHg1OTQsIDApOworCQlyZXR1cm4gUlJFRzMyKFJfMDA2OEE0X0QyQ1JUQ19TVEFUVVNfRlJBTUVfQ09VTlQpOwogfQogCiBpbnQgcnM2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwotCXVpbnQzMl90IHRtcDsKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewotCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfU1RBVFVTKTsKLQkJaWYgKHRtcCAmIFJTNjAwX01DX1NUQVRVU19JRExFKSB7CisJCWlmIChHXzAwMDAwMF9NQ19JRExFKFJSRUczMl9NQyhSXzAwMDAwMF9NQ19TVEFUVVMpKSkKIAkJCXJldHVybiAwOwotCQl9Ci0JCURSTV9VREVMQVkoMSk7CisJCXVkZWxheSgxKTsKIAl9CiAJcmV0dXJuIC0xOwogfQogCi12b2lkIHJzNjAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogdm9pZCByczYwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogSERQIHNhbWUgcGxhY2Ugb24gcnM2MDAgPyAqLwogCXIxMDBfaGRwX3Jlc2V0KHJkZXYpOwotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOwogCS8qIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3QgPyAqLwogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKLQlpZiAocnM2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9CisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyczYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKIH0KIAotCi0vKgotICogVlJBTSBpbmZvLgotICovCiB2b2lkIHJzNjAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogdG8gZG8gb3IgaXMgdGhlc2UgdmFsdWVzIHNhbmUgPyAqLwpAQCAtNDEwLDMxICszMjIsMjA4IEBACiAJLyogRklYTUU6IGltcGxlbWVudCwgc2hvdWxkIHRoaXMgYmUgbGlrZSByczY5MCA/ICovCiB9CiAKLQotLyoKLSAqIEluZGlyZWN0IHJlZ2lzdGVycyBhY2Nlc3NvcgotICovCiB1aW50MzJfdCByczYwMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpCiB7Ci0JdWludDMyX3QgcjsKLQotCVdSRUczMihSUzYwMF9NQ19JTkRFWCwKLQkgICAgICAgKChyZWcgJiBSUzYwMF9NQ19BRERSX01BU0spIHwgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMCkpOwotCXIgPSBSUkVHMzIoUlM2MDBfTUNfREFUQSk7Ci0JcmV0dXJuIHI7CisJV1JFRzMyKFJfMDAwMDcwX01DX0lORF9JTkRFWCwgU18wMDAwNzBfTUNfSU5EX0FERFIocmVnKSB8CisJCVNfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAoMSkpOworCXJldHVybiBSUkVHMzIoUl8wMDAwNzRfTUNfSU5EX0RBVEEpOwogfQogCiB2b2lkIHJzNjAwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3QgdikKIHsKLQlXUkVHMzIoUlM2MDBfTUNfSU5ERVgsCi0JCVJTNjAwX01DX0lORF9XUl9FTiB8IFJTNjAwX01DX0lORF9DSVRGX0FSQjAgfAotCQkoKHJlZykgJiBSUzYwMF9NQ19BRERSX01BU0spKTsKLQlXUkVHMzIoUlM2MDBfTUNfREFUQSwgdik7CisJV1JFRzMyKFJfMDAwMDcwX01DX0lORF9JTkRFWCwgU18wMDAwNzBfTUNfSU5EX0FERFIocmVnKSB8CisJCVNfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAoMSkgfCBTXzAwMDA3MF9NQ19JTkRfV1JfRU4oMSkpOworCVdSRUczMihSXzAwMDA3NF9NQ19JTkRfREFUQSwgdik7Cit9CisKK3ZvaWQgcnM2MDBfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOworfQorCit2b2lkIHJzNjAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibSA9IHJzNjAwX3JlZ19zYWZlX2JtOworCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtX3NpemUgPSBBUlJBWV9TSVpFKHJzNjAwX3JlZ19zYWZlX2JtKTsKK30KKworc3RhdGljIHZvaWQgcnM2MDBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOworCisJLyogU3RvcHMgYWxsIG1jIGNsaWVudHMgKi8KKwlydjUxNV9tY19zdG9wKHJkZXYsICZzYXZlKTsKKworCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KKwlpZiAocnM2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBNQyBpZGxlIHRpbWVvdXQgYmVmb3JlIHVwZGF0aW5nIE1DLlxuIik7CisKKwkvKiBGSVhNRTogV2hhdCBkb2VzIEFHUCBtZWFucyBmb3Igc3VjaCBjaGlwc2V0ID8gKi8KKwlXUkVHMzJfTUMoUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OLCAweDBGRkZGRkZGKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDZfQUdQX0JBU0UsIDApOworCVdSRUczMl9NQyhSXzAwMDAwN19BR1BfQkFTRV8yLCAwKTsKKwkvKiBQcm9ncmFtIE1DICovCisJV1JFRzMyX01DKFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAwMDRfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDRfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKworCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcnM2MDBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJzNjAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcnM2MDBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlyID0gcnM2MDBfZ2FydF9lbmFibGUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyczYwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByczYwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlyczYwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIHBvc3QgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJcmV0dXJuIHJzNjAwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByczYwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcnM2MDBfaXJxX2Rpc2FibGUocmRldik7CisJcnM2MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHJzNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM2MDBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcnM2MDBfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKIH0KIAogaW50IHJzNjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSByczYwMF9yZWdfc2FmZV9ibTsKLQlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyczYwMF9yZWdfc2FmZV9ibSk7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBCSU9TICovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJTNjAwIEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXJzNjAwX3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJzNjAwX2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJzNjAwX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByczYwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJzNjAwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJzNjAwX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMzA4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwZC5oCkBAIC0wLDAgKzEsNDcwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JTNjAwRF9IX18KKyNkZWZpbmUgX19SUzYwMERfSF9fCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDA0MF9HRU5fSU5UX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MAorI2RlZmluZSAgIFNfMDAwMDQwX0RJU1BMQVlfSU5UX1NUQVRVUyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDQwX0RJU1BMQVlfSU5UX1NUQVRVUyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RJU1BMQVlfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDBfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgwX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMF9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9DUlRDMl9WU1lOQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDA0MF9DUlRDMl9WU1lOQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9DUlRDMl9WU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkJGCisjZGVmaW5lICAgU18wMDAwNDBfU05BUFNIT1QyKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMDAwNDBfU05BUFNIT1QyKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfU05BUFNIT1QyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSAgIFNfMDAwMDQwX0NSVEMyX1ZCTEFOSyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDQwX0NSVEMyX1ZCTEFOSyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0NSVEMyX1ZCTEFOSyAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDA0MF9GUDJfREVURUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwNDBfRlAyX0RFVEVDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0ZQMl9ERVRFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WU1lOQ19ESUZGX09WRVJfTElNSVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwNDBfVlNZTkNfRElGRl9PVkVSX0xJTUlUKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVCAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDFfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgxX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMV9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDJfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgyX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMl9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgzX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIM19JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9JMkNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNDBfSTJDX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0kyQ19JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HVUlfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNDBfR1VJX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dVSV9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WSVBIX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwNDBfVklQSF9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZJUEhfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9TV19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwNDBfU1dfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1NXX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HRVlTRVJWSUxMRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwNDBfR0VZU0VSVklMTEUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dFWVNFUlZJTExFICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9IRENQX0FVVEhPUklaRURfSU5UKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwNDBfSERDUF9BVVRIT1JJWkVEX0lOVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0hEQ1BfQVVUSE9SSVpFRF9JTlQgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9EVklfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwNDBfRFZJX0kyQ19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RWSV9JMkNfSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HVUlETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwNDBfR1VJRE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dVSURNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WSURETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwNDBfVklERE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZJRERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDAwNDRfR0VOX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDQKKyNkZWZpbmUgICBTXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwNDRfVkdBX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwNDRfVkdBX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfVkdBX0lOVF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDQ0X0NBUDBfSU5UX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMDQ0X0NBUDBfSU5UX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NBUDBfSU5UX0FDVElWRSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDBfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgwX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDFfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgxX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMV9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDJfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgyX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMl9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgzX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIM19JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9NQ19QUk9CRV9GQVVMVF9TVEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwNDRfTUNfUFJPQkVfRkFVTFRfU1RBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X01DX1BST0JFX0ZBVUxUX1NUQVQgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9JMkNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNDRfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0kyQ19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TQ1JBVENIX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwNDRfU0NSQVRDSF9JTlRfU1RBVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NDUkFUQ0hfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HVUlfSURMRV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNDRfR1VJX0lETEVfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dVSV9JRExFX1NUQVQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9BVElfT1ZFUkRSSVZFX0lOVF9TVEFUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwNDRfQVRJX09WRVJEUklWRV9JTlRfU1RBVCh4KSAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0FUSV9PVkVSRFJJVkVfSU5UX1NUQVQgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9NQ19QUk9URUNUSU9OX0ZBVUxUX1NUQVQoeCkgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwNDRfTUNfUFJPVEVDVElPTl9GQVVMVF9TVEFUKHgpICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X01DX1BST1RFQ1RJT05fRkFVTFRfU1RBVCAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9SQkJNX1JFQURfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwNDRfUkJCTV9SRUFEX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1JCQk1fUkVBRF9JTlRfU1RBVCAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9DQl9DT05URVhUX1NXSVRDSF9TVEFUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwNDRfQ0JfQ09OVEVYVF9TV0lUQ0hfU1RBVCh4KSAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NCX0NPTlRFWFRfU1dJVENIX1NUQVQgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WSVBIX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwNDRfVklQSF9JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZJUEhfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TV19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwNDRfU1dfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NXX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TV19JTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwNDRfU1dfSU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NXX0lOVF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9JRENUX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwNDRfSURDVF9JTlRfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0lEQ1RfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HVUlETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwNDRfR1VJRE1BX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dVSURNQV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WSURETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwNDRfVklERE1BX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZJRERNQV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDAwNENfQlVTX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNEMKKyNkZWZpbmUgICBTXzAwMDA0Q19CVVNfTUFTVEVSX0RJUyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNENfQlVTX01BU1RFUl9ESVMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDRDX0JVU19NQVNURVJfRElTICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0Q19CVVNfTVNJX1JFQVJNKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwNENfQlVTX01TSV9SRUFSTSh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDRDX0JVU19NU0lfUkVBUk0gICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgUl8wMDAwNzBfTUNfSU5EX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNzAKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA3MF9NQ19JTkRfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzAoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18wICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzEoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18xICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMih4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzIoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18yICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzMoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18zICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX0FJQ19SQlMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9BSUNfUkJTKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQUlDX1JCUyAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQ0lURl9BUkIwICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9DSVRGX0FSQjEoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQ0lURl9BUkIxICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIzKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9XUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfV1JfRU4gICAgICAgICAgICAgICAgICAgICAgICAweEZGN0ZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1JEX0lOVih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9SRF9JTlYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfUkRfSU5WICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDAwMDc0X01DX0lORF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDc0CisjZGVmaW5lICAgU18wMDAwNzRfTUNfSU5EX0RBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDc0X01DX0lORF9EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDA3NF9NQ19JTkRfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTM0CisjZGVmaW5lICAgU18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMzRfSERQX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RJTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dBX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NCQTJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDYwQTRfRDFDUlRDX1NUQVRVU19GUkFNRV9DT1VOVCAgICAgICAgICAgMHgwMDYwQTQKKyNkZWZpbmUgICBTXzAwNjBBNF9EMUNSVENfRlJBTUVfQ09VTlQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MEE0X0QxQ1JUQ19GUkFNRV9DT1VOVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkYpCisjZGVmaW5lICAgQ18wMDYwQTRfRDFDUlRDX0ZSQU1FX0NPVU5UICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBSXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVRVUyAgICAgICAgICAgICAgICAweDAwNjUzNAorI2RlZmluZSAgIFNfMDA2NTM0X0QxTU9ERV9WQkxBTktfT0NDVVJSRUQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfT0NDVVJSRUQoeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTM0X0QxTU9ERV9WQkxBTktfT0NDVVJSRUQgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSyAgICAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDY1MzRfRDFNT0RFX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfU1RBVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVQgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDY1MzRfRDFNT0RFX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUzNF9EMU1PREVfVkJMQU5LX0lOVEVSUlVQVCAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lIFJfMDA2NTQwX0R4TU9ERV9JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA2NTQwCisjZGVmaW5lICAgU18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSyh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSyh4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSyAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDA2NTQwX0QxTU9ERV9WTElORV9JTlRfTUFTSyh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDA2NTQwX0QxTU9ERV9WTElORV9JTlRfTUFTSyh4KSAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QxTU9ERV9WTElORV9JTlRfTUFTSyAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwNjU0MF9EMk1PREVfVkJMQU5LX0lOVF9NQVNLKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwNjU0MF9EMk1PREVfVkJMQU5LX0lOVF9NQVNLKHgpICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMk1PREVfVkJMQU5LX0lOVF9NQVNLICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDY1NDBfRDJNT0RFX1ZMSU5FX0lOVF9NQVNLKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDA2NTQwX0QyTU9ERV9WTElORV9JTlRfTUFTSyh4KSAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMk1PREVfVkxJTkVfSU5UX01BU0sgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDY1NDBfRDFNT0RFX1ZCTEFOS19DUF9TRUwoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDA2NTQwX0QxTU9ERV9WQkxBTktfQ1BfU0VMKHgpICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMU1PREVfVkJMQU5LX0NQX1NFTCAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDY1NDBfRDJNT0RFX1ZCTEFOS19DUF9TRUwoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDA2NTQwX0QyTU9ERV9WQkxBTktfQ1BfU0VMKHgpICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMk1PREVfVkJMQU5LX0NQX1NFTCAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDA2OEE0X0QyQ1JUQ19TVEFUVVNfRlJBTUVfQ09VTlQgICAgICAgICAgIDB4MDA2OEE0CisjZGVmaW5lICAgU18wMDY4QTRfRDJDUlRDX0ZSQU1FX0NPVU5UKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjhBNF9EMkNSVENfRlJBTUVfQ09VTlQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGKQorI2RlZmluZSAgIENfMDA2OEE0X0QyQ1JUQ19GUkFNRV9DT1VOVCAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgUl8wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUVVMgICAgICAgICAgICAgICAgMHgwMDZEMzQKKyNkZWZpbmUgICBTXzAwNkQzNF9EMk1PREVfVkJMQU5LX09DQ1VSUkVEKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX09DQ1VSUkVEKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQzNF9EMk1PREVfVkJMQU5LX09DQ1VSUkVEICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0soeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0soeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0sgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA2RDM0X0QyTU9ERV9WQkxBTktfU1RBVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX1NUQVQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDA2RDM0X0QyTU9ERV9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX0lOVEVSUlVQVCh4KSAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDZEMzRfRDJNT0RFX1ZCTEFOS19JTlRFUlJVUFQgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSBSXzAwN0VEQ19ESVNQX0lOVEVSUlVQVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwN0VEQworI2RlZmluZSAgIFNfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNSkKKyNkZWZpbmUgICBHXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUICAgICAgICAgICAgICAweEZGRkZGRkRGCisKKworLyogTUMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMDAwX01DX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwCisjZGVmaW5lICAgU18wMDAwMDBfTUNfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDBfTUNfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMDBfTUNfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSBSXzAwMDAwNF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNAorI2RlZmluZSAgIFNfMDAwMDA0X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA0X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA0X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwNF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDRfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA0X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUKKyNkZWZpbmUgICBTXzAwMDAwNV9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwNV9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNV9NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwMDVfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDA1X01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNV9NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMDA2X0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2CisjZGVmaW5lICAgU18wMDAwMDZfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA2X0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNl9BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMDA3X0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3CisjZGVmaW5lICAgU18wMDAwMDdfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDdfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwMDdfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorI2RlZmluZSBSXzAwMDAwOV9NQ19DTlRMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwOQorI2RlZmluZSAgIFNfMDAwMDA5X0VOQUJMRV9QQUdFX1RBQkxFUyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDAwOV9FTkFCTEVfUEFHRV9UQUJMRVMoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMDlfRU5BQkxFX1BBR0VfVEFCTEVTICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorLyogRklYTUUgZG9uJ3Qga25vdyB0aGUgdmFyaW91cyBmaWVsZCBzaXplIG5lZWQgZmVlZGJhY2sgZnJvbSBBTUQgKi8KKyNkZWZpbmUgUl8wMDAxMDBfTUNfUFQwX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAKKyNkZWZpbmUgICBTXzAwMDEwMF9FTkFCTEVfUFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEwMF9FTkFCTEVfUFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMF9FTkFCTEVfUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAxMDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwMTAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFKHgpICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDEwMF9FRkZFQ1RJVkVfTDJfQ0FDSEVfU0laRSAgICAgICAgICAgICAweEZGRkM3RkZGCisjZGVmaW5lICAgU18wMDAxMDBfRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMTAwX0VGRkVDVElWRV9MMl9RVUVVRV9TSVpFKHgpICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDEwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSAgICAgICAgICAgICAweEZGMUZGRkZGCisjZGVmaW5lICAgU18wMDAxMDBfSU5WQUxJREFURV9BTExfTDFfVExCUyh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMoeCkgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwMTAwX0lOVkFMSURBVEVfTDJfQ0FDSEUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lIFJfMDAwMTAyX01DX1BUMF9DT05URVhUMF9DTlRMICAgICAgICAgICAgICAgIDB4MDAwMTAyCisjZGVmaW5lICAgU18wMDAxMDJfRU5BQkxFX1BBR0VfVEFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMDJfRU5BQkxFX1BBR0VfVEFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxMDJfRU5BQkxFX1BBR0VfVEFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEgoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEgoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEggICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjkKKyNkZWZpbmUgICBWXzAwMDEwMl9QQUdFX1RBQkxFX0ZMQVQgICAgICAgICAgICAgICAgICAgICAwCisvKiBSNjAwIGRvY3VtZW50YXRpb24gc3VnZ2VzdCB0aGF0IHRoaXMgc2hvdWxkIGJlIGEgbnVtYmVyIG9mIHBhZ2VzICovCisjZGVmaW5lIFJfMDAwMTEyX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIgICAgIDB4MDAwMTEyCisjZGVmaW5lIFJfMDAwMTE0X01DX1BUMF9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSICAgIDB4MDAwMTE0CisjZGVmaW5lIFJfMDAwMTFDX01DX1BUMF9DT05URVhUMF9ERUZBVUxUX1JFQURfQUREUiAgIDB4MDAwMTFDCisjZGVmaW5lIFJfMDAwMTJDX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiAgICAgIDB4MDAwMTJDCisjZGVmaW5lIFJfMDAwMTNDX01DX1BUMF9DT05URVhUMF9GTEFUX1NUQVJUX0FERFIgICAgIDB4MDAwMTNDCisjZGVmaW5lIFJfMDAwMTRDX01DX1BUMF9DT05URVhUMF9GTEFUX0VORF9BRERSICAgICAgIDB4MDAwMTRDCisjZGVmaW5lIFJfMDAwMTZDX01DX1BUMF9DTElFTlQwX0NOVEwgICAgICAgICAgICAgICAgIDB4MDAwMTZDCisjZGVmaW5lICAgU18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMTZDX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMTZDX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMTZDX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTUFTSyh4KSAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTUFTSyh4KSAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTUFTSyAgICAgICAgICAgICAweEZGRkZGQ0ZGCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX1BBX09OTFkgICAgICAgICAgMAorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUCAgICAgIDEKKyNkZWZpbmUgICBWXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTICAgICAgICAgICAyCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgICAgICAgMworI2RlZmluZSAgIFNfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1MoeCkgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDE2Q19TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTKHgpICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTUyAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9QQVNTVEhST1VHSCAgMAorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9ERUZBVUxUX1BBR0UgMQorI2RlZmluZSAgIFNfMDAwMTZDX0VGRkVDVElWRV9MMV9DQUNIRV9TSVpFKHgpICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDE2Q19FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSh4KSAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAxNkNfRUZGRUNUSVZFX0wxX0NBQ0hFX1NJWkUgICAgICAgICAgICAgMHhGRkZGQzdGRgorI2RlZmluZSAgIFNfMDAwMTZDX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HKHgpICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDE2Q19FTkFCTEVfRlJBR01FTlRfUFJPQ0VTU0lORyh4KSAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfRU5BQkxFX0ZSQUdNRU5UX1BST0NFU1NJTkcgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMTZDX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKHgpICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDE2Q19FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSh4KSAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAxNkNfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUgICAgICAgICAgICAgMHhGRkZDN0ZGRgorI2RlZmluZSAgIFNfMDAwMTZDX0lOVkFMSURBVEVfTDFfVExCKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDE2Q19JTlZBTElEQVRFX0wxX1RMQih4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfSU5WQUxJREFURV9MMV9UTEIgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCAwZjU4NWNhLi4yNzU0NzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC0yNiwxMDYgKzI2LDI5IEBACiAgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCiAgKi8KICNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotI2luY2x1ZGUgInJzNjkwci5oIgogI2luY2x1ZGUgImF0b20uaCIKLSNpbmNsdWRlICJhdG9tLWJpdHMuaCIKKyNpbmNsdWRlICJyczY5MGQuaCIKIAotLyogcnM2OTAscnM3NDAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMzAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczQwMF9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNDAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM0MDBfZ2FydF9hZGp1c3Rfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2Rpc2FibGVfdmdhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0byA6Ci0gKiByczY5MCxyczc0MAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KLXZvaWQgcnM2OTBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNjkwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0KLS8qCi0gKiBNQyBmdW5jdGlvbnMuCi0gKi8KLWludCByczY5MF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0KLQlyczY5MF9ncHVfaW5pdChyZGV2KTsKLQlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiArPSAocmRldi0+bWMuZ3R0X3NpemUgLSAxKTsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gJj0gfihyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyczYwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHJzNjkwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgTUMgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUlM2OTBfTUNfRkJfVE9QLCB0bXAgPj4gMTYpOwotCXRtcCB8PSBSRUdfU0VUKFJTNjkwX01DX0ZCX1NUQVJULCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlXUkVHMzJfTUMoUlM2OTBfTUNDRkdfRkJfTE9DQVRJT04sIHRtcCk7Ci0JLyogRklYTUU6IERvZXMgdGhpcyByZWcgZXhpc3Qgb24gUlM0ODAsUlM3NDAgPyAqLwotCVdSRUczMigweDMxMCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbik7Ci0JV1JFRzMyKFJTNjkwX0hEUF9GQl9MT0NBVElPTiwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcnM2OTBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotaW50IHJzNjkwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgaW50IHJzNjkwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKIAl1aW50MzJfdCB0bXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKIAkJLyogcmVhZCBNQ19TVEFUVVMgKi8KLQkJdG1wID0gUlJFRzMyX01DKFJTNjkwX01DX1NUQVRVUyk7Ci0JCWlmICh0bXAgJiBSUzY5MF9NQ19TVEFUVVNfSURMRSkgeworCQl0bXAgPSBSUkVHMzJfTUMoUl8wMDAwOTBfTUNfU1lTVEVNX1NUQVRVUyk7CisJCWlmIChHXzAwMDA5MF9NQ19TWVNURU1fSURMRSh0bXApKQogCQkJcmV0dXJuIDA7Ci0JCX0KLQkJRFJNX1VERUxBWSgxKTsKKwkJdWRlbGF5KDEpOwogCX0KIAlyZXR1cm4gLTE7CiB9CiAKLXZvaWQgcnM2OTBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJkZXYtPnBsbF9lcnJhdGEgPSAwOwotfQotCi12b2lkIHJzNjkwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIHZvaWQgcnM2OTBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJLyogRklYTUU6IEhEUCBzYW1lIHBsYWNlIG9uIHJzNjkwID8gKi8KIAlyMTAwX2hkcF9yZXNldChyZGV2KTsKLQlyczYwMF9kaXNhYmxlX3ZnYShyZGV2KTsKIAkvKiBGSVhNRTogaXMgdGhpcyBjb3JyZWN0ID8gKi8KIAlyNDIwX3BpcGVzX2luaXQocmRldik7CiAJaWYgKHJzNjkwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKQEAgLTEzNCwxMCArNTcsNiBAQAogCX0KIH0KIAotCi0vKgotICogVlJBTSBpbmZvLgotICovCiB2b2lkIHJzNjkwX3BtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgSW50ZWdyYXRlZFN5c3RlbUluZm8pOwpAQCAtMjUxLDM5ICsxNzAsMzkgQEAKIAkvKgogCSAqIExpbmUgQnVmZmVyIFNldHVwCiAJICogVGhlcmUgaXMgYSBzaW5nbGUgbGluZSBidWZmZXIgc2hhcmVkIGJ5IGJvdGggZGlzcGxheSBjb250cm9sbGVycy4KLQkgKiBEQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgaG93IHRoYXQgbGluZSBidWZmZXIgaXMgc2hhcmVkIGJldHdlZW4KKwkgKiBSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgaG93IHRoYXQgbGluZSBidWZmZXIgaXMgc2hhcmVkIGJldHdlZW4KIAkgKiB0aGUgZGlzcGxheSBjb250cm9sbGVycy4gIFRoZSBwYXJpdGlvbmluZyBjYW4gZWl0aGVyIGJlIGRvbmUKIAkgKiBtYW51YWxseSBvciB2aWEgb25lIG9mIGZvdXIgcHJlc2V0IGFsbG9jYXRpb25zIHNwZWNpZmllZCBpbiBiaXRzIDE6MDoKIAkgKiAgMCAtIGxpbmUgYnVmZmVyIGlzIGRpdmlkZWQgaW4gaGFsZiBhbmQgc2hhcmVkIGJldHdlZW4gY3J0YwogCSAqICAxIC0gRDEgZ2V0cyAzLzQgb2YgdGhlIGxpbmUgYnVmZmVyLCBEMiBnZXRzIDEvNAogCSAqICAyIC0gRDEgZ2V0cyB0aGUgd2hvbGUgYnVmZmVyCiAJICogIDMgLSBEMSBnZXRzIDEvNCBvZiB0aGUgbGluZSBidWZmZXIsIEQyIGdldHMgMy80Ci0JICogU2V0dGluZyBiaXQgMiBvZiBEQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgc3dpdGNoZXMgdG8gbWFudWFsCisJICogU2V0dGluZyBiaXQgMiBvZiBSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgc3dpdGNoZXMgdG8gbWFudWFsCiAJICogYWxsb2NhdGlvbiBtb2RlLiBJbiBtYW51YWwgYWxsb2NhdGlvbiBtb2RlLCBEMSBhbHdheXMgc3RhcnRzIGF0IDAsCiAJICogRDEgZW5kLzIgaXMgc3BlY2lmaWVkIGluIGJpdHMgMTQ6NDsgRDIgYWxsb2NhdGlvbiBmb2xsb3dzIEQxLgogCSAqLwotCXRtcCA9IFJSRUczMihEQ19MQl9NRU1PUllfU1BMSVQpICYgfkRDX0xCX01FTU9SWV9TUExJVF9NQVNLOwotCXRtcCAmPSB+RENfTEJfTUVNT1JZX1NQTElUX1NISUZUX01PREU7CisJdG1wID0gUlJFRzMyKFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCkgJiBDXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQ7CisJdG1wICY9IH5DXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERTsKIAkvKiBhdXRvICovCiAJaWYgKG1vZGUxICYmIG1vZGUyKSB7CiAJCWlmIChtb2RlMS0+aGRpc3BsYXkgPiBtb2RlMi0+aGRpc3BsYXkpIHsKIAkJCWlmIChtb2RlMS0+aGRpc3BsYXkgPiAyNTYwKQotCQkJCXRtcCB8PSBEQ19MQl9NRU1PUllfU1BMSVRfRDFfM1FfRDJfMVE7CisJCQkJdG1wIHw9IFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMV8zUV9EMl8xUTsKIAkJCWVsc2UKLQkJCQl0bXAgfD0gRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CisJCQkJdG1wIHw9IFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOwogCQl9IGVsc2UgaWYgKG1vZGUyLT5oZGlzcGxheSA+IG1vZGUxLT5oZGlzcGxheSkgewogCQkJaWYgKG1vZGUyLT5oZGlzcGxheSA+IDI1NjApCi0JCQkJdG1wIHw9IERDX0xCX01FTU9SWV9TUExJVF9EMV8xUV9EMl8zUTsKKwkJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROwogCQkJZWxzZQotCQkJCXRtcCB8PSBEQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRjsKKwkJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CiAJCX0gZWxzZQotCQkJdG1wIHw9IEFWSVZPX0RDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOworCQkJdG1wIHw9IFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOwogCX0gZWxzZSBpZiAobW9kZTEpIHsKLQkJdG1wIHw9IERDX0xCX01FTU9SWV9TUExJVF9EMV9PTkxZOworCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxX09OTFk7CiAJfSBlbHNlIGlmIChtb2RlMikgewotCQl0bXAgfD0gRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROworCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROwogCX0KLQlXUkVHMzIoRENfTEJfTUVNT1JZX1NQTElULCB0bXApOworCVdSRUczMihSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQsIHRtcCk7CiB9CiAKIHN0cnVjdCByczY5MF93YXRlcm1hcmsgewpAQCAtNDg4LDI4ICs0MDcsMjggQEAKIAkgKiBvcHRpb24uCiAJICovCiAJaWYgKHJkZXYtPmRpc3BfcHJpb3JpdHkgPT0gMikgewotCQl0bXAgPSBSUkVHMzJfTUMoTUNfSU5JVF9NSVNDX0xBVF9USU1FUik7Ci0JCXRtcCAmPSB+TUNfRElTUDFSX0lOSVRfTEFUX01BU0s7Ci0JCXRtcCAmPSB+TUNfRElTUDBSX0lOSVRfTEFUX01BU0s7Ci0JCWlmIChtb2RlMSkKLQkJCXRtcCB8PSAoMSA8PCBNQ19ESVNQMVJfSU5JVF9MQVRfU0hJRlQpOworCQl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDRfTUNfSU5JVF9NSVNDX0xBVF9USU1FUik7CisJCXRtcCAmPSBDXzAwMDEwNF9NQ19ESVNQMFJfSU5JVF9MQVQ7CisJCXRtcCAmPSBDXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQ7CiAJCWlmIChtb2RlMCkKLQkJCXRtcCB8PSAoMSA8PCBNQ19ESVNQMFJfSU5JVF9MQVRfU0hJRlQpOwotCQlXUkVHMzJfTUMoTUNfSU5JVF9NSVNDX0xBVF9USU1FUiwgdG1wKTsKKwkJCXRtcCB8PSBTXzAwMDEwNF9NQ19ESVNQMFJfSU5JVF9MQVQoMSk7CisJCWlmIChtb2RlMSkKKwkJCXRtcCB8PSBTXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQoMSk7CisJCVdSRUczMl9NQyhSXzAwMDEwNF9NQ19JTklUX01JU0NfTEFUX1RJTUVSLCB0bXApOwogCX0KIAlyczY5MF9saW5lX2J1ZmZlcl9hZGp1c3QocmRldiwgbW9kZTAsIG1vZGUxKTsKIAogCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlM2OTApIHx8IChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc0MCkpCi0JCVdSRUczMihEQ1BfQ09OVFJPTCwgMCk7CisJCVdSRUczMihSXzAwNkM5Q19EQ1BfQ09OVFJPTCwgMCk7CiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSkKLQkJV1JFRzMyKERDUF9DT05UUk9MLCAyKTsKKwkJV1JFRzMyKFJfMDA2QzlDX0RDUF9DT05UUk9MLCAyKTsKIAogCXJzNjkwX2NydGNfYmFuZHdpZHRoX2NvbXB1dGUocmRldiwgcmRldi0+bW9kZV9pbmZvLmNydGNzWzBdLCAmd20wKTsKIAlyczY5MF9jcnRjX2JhbmR3aWR0aF9jb21wdXRlKHJkZXYsIHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXSwgJndtMSk7CiAKIAl0bXAgPSAod20wLmxiX3JlcXVlc3RfZmlmb19kZXB0aCAtIDEpOwogCXRtcCB8PSAod20xLmxiX3JlcXVlc3RfZmlmb19kZXB0aCAtIDEpIDw8IDE2OwotCVdSRUczMihMQl9NQVhfUkVRX09VVFNUQU5ESU5HLCB0bXApOworCVdSRUczMihSXzAwNkQ1OF9MQl9NQVhfUkVRX09VVFNUQU5ESU5HLCB0bXApOwogCiAJaWYgKG1vZGUwICYmIG1vZGUxKSB7CiAJCWlmIChyZml4ZWRfdHJ1bmMod20wLmRicHApID4gNjQpCkBAIC01NjIsMTAgKzQ4MSwxMCBAQAogCQkJcHJpb3JpdHlfbWFyazEyLmZ1bGwgPSAwOwogCQlpZiAod20xLnByaW9yaXR5X21hcmtfbWF4LmZ1bGwgPiBwcmlvcml0eV9tYXJrMTIuZnVsbCkKIAkJCXByaW9yaXR5X21hcmsxMi5mdWxsID0gd20xLnByaW9yaXR5X21hcmtfbWF4LmZ1bGw7Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQV9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9CX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7Ci0JCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKKwkJV1JFRzMyKFJfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOworCQlXUkVHMzIoUl8wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7CisJCVdSRUczMihSXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKKwkJV1JFRzMyKFJfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOwogCX0gZWxzZSBpZiAobW9kZTApIHsKIAkJaWYgKHJmaXhlZF90cnVuYyh3bTAuZGJwcCkgPiA2NCkKIAkJCWEuZnVsbCA9IHJmaXhlZF9tdWwod20wLmRicHAsIHdtMC5udW1fbGluZV9wYWlyKTsKQEAgLTU5MiwxMCArNTExLDEyIEBACiAJCQlwcmlvcml0eV9tYXJrMDIuZnVsbCA9IDA7CiAJCWlmICh3bTAucHJpb3JpdHlfbWFya19tYXguZnVsbCA+IHByaW9yaXR5X21hcmswMi5mdWxsKQogCQkJcHJpb3JpdHlfbWFyazAyLmZ1bGwgPSB3bTAucHJpb3JpdHlfbWFya19tYXguZnVsbDsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7Ci0JCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQV9DTlQsIE1PREVfUFJJT1JJVFlfT0ZGKTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9CX0NOVCwgTU9ERV9QUklPUklUWV9PRkYpOworCQlXUkVHMzIoUl8wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7CisJCVdSRUczMihSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKKwkJV1JFRzMyKFJfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0NOVCwKKwkJCVNfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX09GRigxKSk7CisJCVdSRUczMihSXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9DTlQsCisJCQlTXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9PRkYoMSkpOwogCX0gZWxzZSB7CiAJCWlmIChyZml4ZWRfdHJ1bmMod20xLmRicHApID4gNjQpCiAJCQlhLmZ1bGwgPSByZml4ZWRfbXVsKHdtMS5kYnBwLCB3bTEubnVtX2xpbmVfcGFpcik7CkBAIC02MjIsMzAgKzU0MywyMDUgQEAKIAkJCXByaW9yaXR5X21hcmsxMi5mdWxsID0gMDsKIAkJaWYgKHdtMS5wcmlvcml0eV9tYXJrX21heC5mdWxsID4gcHJpb3JpdHlfbWFyazEyLmZ1bGwpCiAJCQlwcmlvcml0eV9tYXJrMTIuZnVsbCA9IHdtMS5wcmlvcml0eV9tYXJrX21heC5mdWxsOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCBNT0RFX1BSSU9SSVRZX09GRik7Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQl9DTlQsIE1PREVfUFJJT1JJVFlfT0ZGKTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7CisJCVdSRUczMihSXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9DTlQsCisJCQlTXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9PRkYoMSkpOworCQlXUkVHMzIoUl8wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQ05ULAorCQkJU18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfT0ZGKDEpKTsKKwkJV1JFRzMyKFJfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOworCQlXUkVHMzIoUl8wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7CiAJfQogfQogCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJzNjkwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKIAl1aW50MzJfdCByOwogCi0JV1JFRzMyKFJTNjkwX01DX0lOREVYLCAocmVnICYgUlM2OTBfTUNfSU5ERVhfTUFTSykpOwotCXIgPSBSUkVHMzIoUlM2OTBfTUNfREFUQSk7Ci0JV1JFRzMyKFJTNjkwX01DX0lOREVYLCBSUzY5MF9NQ19JTkRFWF9NQVNLKTsKKwlXUkVHMzIoUl8wMDAwNzhfTUNfSU5ERVgsIFNfMDAwMDc4X01DX0lORF9BRERSKHJlZykpOworCXIgPSBSUkVHMzIoUl8wMDAwN0NfTUNfREFUQSk7CisJV1JFRzMyKFJfMDAwMDc4X01DX0lOREVYLCB+Q18wMDAwNzhfTUNfSU5EX0FERFIpOwogCXJldHVybiByOwogfQogCiB2b2lkIHJzNjkwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3QgdikKIHsKLQlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsCi0JICAgICAgIFJTNjkwX01DX0lOREVYX1dSX0VOIHwgKChyZWcpICYgUlM2OTBfTUNfSU5ERVhfTUFTSykpOwotCVdSRUczMihSUzY5MF9NQ19EQVRBLCB2KTsKLQlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX1dSX0FDSyk7CisJV1JFRzMyKFJfMDAwMDc4X01DX0lOREVYLCBTXzAwMDA3OF9NQ19JTkRfQUREUihyZWcpIHwKKwkJU18wMDAwNzhfTUNfSU5EX1dSX0VOKDEpKTsKKwlXUkVHMzIoUl8wMDAwN0NfTUNfREFUQSwgdik7CisJV1JFRzMyKFJfMDAwMDc4X01DX0lOREVYLCAweDdGKTsKK30KKwordm9pZCByczY5MF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyczY5MF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyX01DKFJfMDAwMTAwX01DQ0ZHX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAxMDBfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAxMDBfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKworCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcnM2OTBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJzNjkwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcnM2OTBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlyID0gcnM0MDBfZ2FydF9lbmFibGUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyczYwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByczY5MF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIHBvc3QgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJcmV0dXJuIHJzNjkwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByczY5MF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcnM2MDBfaXJxX2Rpc2FibGUocmRldik7CisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHJzNjkwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM2OTBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcnM0MDBfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKK30KKworaW50IHJzNjkwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0gZWxzZSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiRXhwZWN0aW5nIGF0b21iaW9zIGZvciBSVjUxNSBHUFVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCX0KKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlyYWRlb25fcG1faW5pdChyZGV2KTsKKwkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KKwlyczY5MF92cmFtX2luZm8ocmRldik7CisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KKwlyID0gcjQyMF9tY19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlydjUxNV9kZWJ1Z2ZzKHJkZXYpOworCS8qIEZlbmNlIGRyaXZlciAqLworCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByczQwMF9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJzNjAwX3NldF9zYWZlX3JlZ2lzdGVycyhyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcnM2OTBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCisJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyczY5MF9zdXNwZW5kKHJkZXYpOworCQlyMTAwX2NwX2ZpbmkocmRldik7CisJCXIxMDBfd2JfZmluaShyZGV2KTsKKwkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlyczQwMF9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQzMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MGQuaApAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SUzY5MERfSF9fCisjZGVmaW5lIF9fUlM2OTBEX0hfXworCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAwNzhfTUNfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNzgKKyNkZWZpbmUgICBTXzAwMDA3OF9NQ19JTkRfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MUZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDc4X01DX0lORF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxRkYpCisjZGVmaW5lICAgQ18wMDAwNzhfTUNfSU5EX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkUwMAorI2RlZmluZSAgIFNfMDAwMDc4X01DX0lORF9XUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDc4X01DX0lORF9XUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDc4X01DX0lORF9XUl9FTiAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgUl8wMDAwN0NfTUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwN0MKKyNkZWZpbmUgICBTXzAwMDA3Q19NQ19EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwN0NfTUNfREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMDdDX01DX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAwRjhfQ09ORklHX01FTVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjgKKyNkZWZpbmUgICBTXzAwMDBGOF9DT05GSUdfTUVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMzQKKyNkZWZpbmUgICBTXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDEzNF9IRFBfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQgICAgICAgICAgICAgICAgICAweDAwNjUyMAorI2RlZmluZSAgIFNfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgzKQorI2RlZmluZSAgIENfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkMKKyNkZWZpbmUgICBTXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERSh4KSAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERSh4KSAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERSAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEYgICAgMAorI2RlZmluZSAgIFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMV8zUV9EMl8xUSAgICAgIDEKKyNkZWZpbmUgICBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfT05MWSAgICAgICAgICAyCisjZGVmaW5lICAgVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNRICAgICAgMworI2RlZmluZSAgIFNfMDA2NTIwX0RDX0xCX0RJU1AxX0VORF9BRFIoeCkgICAgICAgICAgICAgICgoKHgpICYgMHg3RkYpIDw8IDQpCisjZGVmaW5lICAgR18wMDY1MjBfRENfTEJfRElTUDFfRU5EX0FEUih4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDdGRikKKyNkZWZpbmUgICBDXzAwNjUyMF9EQ19MQl9ESVNQMV9FTkRfQURSICAgICAgICAgICAgICAgICAweEZGRkY4MDBGCisjZGVmaW5lIFJfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0NOVCAgICAgICAgICAgICAgIDB4MDA2NTQ4CisjZGVmaW5lICAgU18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX01BUktfQSh4KSAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX01BUktfQSh4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX01BUktfQSAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSAgIFNfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX09GRih4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9PRkYoeCkgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfT0ZGICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0ZPUkNFX01BU0soeCkgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfRk9SQ0VfTUFTSyAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQgICAgICAgICAgICAgICAweDAwNjU0QworI2RlZmluZSAgIFNfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9NQVJLX0IoeCkgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9NQVJLX0IoeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9NQVJLX0IgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgICBTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9PRkYoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX09GRiAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9BTFdBWVNfT04oeCkgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQUxXQVlTX09OKHgpICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0FMV0FZU19PTiAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0ZPUkNFX01BU0sgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDZDOUNfRENQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDZDOUMKKyNkZWZpbmUgUl8wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQ05UICAgICAgICAgICAgICAgMHgwMDZENDgKKyNkZWZpbmUgICBTXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfTUFSS19BKHgpICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfTUFSS19BKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfTUFSS19BICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lICAgU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX09GRih4KSAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9PRkYgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQUxXQVlTX09OKHgpICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0FMV0FZU19PTih4KSAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9BTFdBWVNfT04gICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0ZPUkNFX01BU0soeCkgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9GT1JDRV9NQVNLICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0NOVCAgICAgICAgICAgICAgIDB4MDA2RDRDCisjZGVmaW5lICAgU18wMDZENENfRDJNT0RFX1BSSU9SSVRZX01BUktfQih4KSAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDZENENfRDJNT0RFX1BSSU9SSVRZX01BUktfQih4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX01BUktfQiAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSAgIFNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX09GRih4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9PRkYoeCkgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfT0ZGICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0FMV0FZU19PTih4KSAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9BTFdBWVNfT04oeCkgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQUxXQVlTX09OICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0ZPUkNFX01BU0soeCkgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfRk9SQ0VfTUFTSyAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNkQ1OF9MQl9NQVhfUkVRX09VVFNUQU5ESU5HICAgICAgICAgICAgICAweDAwNkQ1OAorI2RlZmluZSAgIFNfMDA2RDU4X0xCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkcoeCkgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2RDU4X0xCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkcoeCkgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDA2RDU4X0xCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkcgICAgICAgICAgIDB4RkZGRkZGRjAKKyNkZWZpbmUgICBTXzAwNkQ1OF9MQl9EMl9NQVhfUkVRX09VVFNUQU5ESU5HKHgpICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTYpCisjZGVmaW5lICAgR18wMDZENThfTEJfRDJfTUFYX1JFUV9PVVRTVEFORElORyh4KSAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGKQorI2RlZmluZSAgIENfMDA2RDU4X0xCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkcgICAgICAgICAgIDB4RkZGMEZGRkYKKworCisjZGVmaW5lIFJfMDAwMDkwX01DX1NZU1RFTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIDB4MDAwMDkwCisjZGVmaW5lICAgU18wMDAwOTBfTUNfU1lTVEVNX0lETEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwOTBfTUNfU1lTVEVNX0lETEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwOTBfTUNfU1lTVEVNX0lETEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDkwX01DX1NFUVVFTkNFUl9JRExFKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDkwX01DX1NFUVVFTkNFUl9JRExFKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DX1NFUVVFTkNFUl9JRExFICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ19BUkJJVEVSX0lETEUoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDA5MF9NQ19BUkJJVEVSX0lETEUoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ19BUkJJVEVSX0lETEUgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDAwOTBfTUNfU0VMRUNUX1BNKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwOTBfTUNfU0VMRUNUX1BNKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwOTBfTUNfU0VMRUNUX1BNICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDkwX1JFU0VSVkVENCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDkwX1JFU0VSVkVENCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMDkwX1JFU0VSVkVENCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGMEYKKyNkZWZpbmUgICBTXzAwMDA5MF9SRVNFUlZFRDgoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDA5MF9SRVNFUlZFRDgoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDA5MF9SRVNFUlZFRDggICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGMEZGCisjZGVmaW5lICAgU18wMDAwOTBfUkVTRVJWRUQxMih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDkwX1JFU0VSVkVEMTIoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDA5MF9SRVNFUlZFRDEyICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX0lOSVRfRVhFQ1VURUQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9JTklUX0VYRUNVVEVEKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfSU5JVF9FWEVDVVRFRCAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX1NFUV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9TRVFfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfU0VRX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX0FSQl9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9BUkJfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfQVJCX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfUkVTRVJWRUQyMCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRikgPDwgMjApCisjZGVmaW5lICAgR18wMDAwOTBfUkVTRVJWRUQyMCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHhGRkYpCisjZGVmaW5lICAgQ18wMDAwOTBfUkVTRVJWRUQyMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGRkZGRgorI2RlZmluZSBSXzAwMDEwMF9NQ0NGR19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAweDAwMDEwMAorI2RlZmluZSAgIFNfMDAwMTAwX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTAwX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTAwX01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDEwMF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxMDBfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTAwX01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxMDRfTUNfSU5JVF9NSVNDX0xBVF9USU1FUiAgICAgICAgICAgICAgMHgwMDAxMDQKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19DUFJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19DUFJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDEwNF9NQ19DUFJfSU5JVF9MQVQgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisjZGVmaW5lICAgU18wMDAxMDRfTUNfVkZfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfVkZfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfVkZfSU5JVF9MQVQgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTIpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRElTUDFSX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0RJU1AxUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgIDB4RkZGRjBGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19GSVhFRF9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRklYRURfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0ZJWEVEX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgIDB4RkZGMEZGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19FMlJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjApCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRTJSX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0UyUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgICAgIDB4RkYwRkZGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9TQU1FX1BBR0VfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjQpCisjZGVmaW5lICAgR18wMDAxMDRfU0FNRV9QQUdFX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X1NBTUVfUEFHRV9QUklPICAgICAgICAgICAgICAgICAgICAgIDB4RjBGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19HTE9CV19JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjgpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfR0xPQldfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0dMT0JXX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwci5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBkOWZhYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgotICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOiBEYXZlIEFpcmxpZQotICogICAgICAgICAgQWxleCBEZXVjaGVyCi0gKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCi0gKi8KLSNpZm5kZWYgUlM2OTBSX0gKLSNkZWZpbmUgUlM2OTBSX0gKLQotLyogUlM2OTAvUlM3NDAgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE1DX0lOREVYCQkJMHgwMDc4Ci0jCWRlZmluZSBNQ19JTkRFWF9NQVNLCQkJMHgxRkYKLSMJZGVmaW5lIE1DX0lOREVYX1dSX0VOCQkJKDEgPDwgOSkKLSMJZGVmaW5lIE1DX0lOREVYX1dSX0FDSwkJCTB4N0YKLSNkZWZpbmUgTUNfREFUQQkJCQkweDAwN0MKLSNkZWZpbmUgSERQX0ZCX0xPQ0FUSU9OCQkJMHgwMTM0Ci0jZGVmaW5lIERDX0xCX01FTU9SWV9TUExJVAkJMHg2NTIwCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfTUFTSwkJCTB4MDAwMDAwMDMKLSNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9TSElGVAkJMAotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEYJMAotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxXzNRX0QyXzFRCQkxCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFfT05MWQkJMgotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNRCQkzCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfU0hJRlRfTU9ERQkJKDEgPDwgMikKLSNkZWZpbmUJCURDX0xCX0RJU1AxX0VORF9BRFJfU0hJRlQJCTQKLSNkZWZpbmUJCURDX0xCX0RJU1AxX0VORF9BRFJfTUFTSwkJMHgwMDAwN0ZGMAotI2RlZmluZSBEMU1PREVfUFJJT1JJVFlfQV9DTlQJCTB4NjU0OAotI2RlZmluZQkJTU9ERV9QUklPUklUWV9NQVJLX01BU0sJCQkweDAwMDA3RkZGCi0jZGVmaW5lCQlNT0RFX1BSSU9SSVRZX09GRgkJCSgxIDw8IDE2KQotI2RlZmluZQkJTU9ERV9QUklPUklUWV9BTFdBWVNfT04JCQkoMSA8PCAyMCkKLSNkZWZpbmUJCU1PREVfUFJJT1JJVFlfRk9SQ0VfTUFTSwkJKDEgPDwgMjQpCi0jZGVmaW5lIEQxTU9ERV9QUklPUklUWV9CX0NOVAkJMHg2NTRDCi0jZGVmaW5lIExCX01BWF9SRVFfT1VUU1RBTkRJTkcJCTB4NkQ1OAotI2RlZmluZQkJTEJfRDFfTUFYX1JFUV9PVVRTVEFORElOR19NQVNLCQkweDAwMDAwMDBGCi0jZGVmaW5lCQlMQl9EMV9NQVhfUkVRX09VVFNUQU5ESU5HX1NISUZUCQkwCi0jZGVmaW5lCQlMQl9EMl9NQVhfUkVRX09VVFNUQU5ESU5HX01BU0sJCTB4MDAwRjAwMDAKLSNkZWZpbmUJCUxCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkdfU0hJRlQJCTE2Ci0jZGVmaW5lIERDUF9DT05UUk9MCQkJMHg2QzlDCi0jZGVmaW5lIEQyTU9ERV9QUklPUklUWV9BX0NOVAkJMHg2RDQ4Ci0jZGVmaW5lIEQyTU9ERV9QUklPUklUWV9CX0NOVAkJMHg2RDRDCi0KLS8qIE1DIGluZGlyZWN0IHJlZ2lzdGVycyAqLwotI2RlZmluZSBNQ19TVEFUVVNfSURMRQkJCQkoMSA8PCAwKQotI2RlZmluZSBNQ19NSVNDX0NOVEwJCQkweDE4Ci0jZGVmaW5lCQlESVNBQkxFX0dUVwkJCSgxIDw8IDEpCi0jZGVmaW5lCQlHQVJUX0lOREVYX1JFR19FTgkJKDEgPDwgMTIpCi0jZGVmaW5lCQlCTE9DS19HRlhfRDNfRU4JCQkoMSA8PCAxNCkKLSNkZWZpbmUgR0FSVF9GRUFUVVJFX0lECQkJMHgyQgotI2RlZmluZQkJSEFOR19FTgkJCQkoMSA8PCAxMSkKLSNkZWZpbmUJCVRMQl9FTkFCTEUJCQkoMSA8PCAxOCkKLSNkZWZpbmUJCVAyUF9FTkFCTEUJCQkoMSA8PCAxOSkKLSNkZWZpbmUJCUdUV19MQUNfRU4JCQkoMSA8PCAyNSkKLSNkZWZpbmUJCUxFVkVMMl9HQVJUCQkJKDAgPDwgMzApCi0jZGVmaW5lCQlMRVZFTDFfR0FSVAkJCSgxIDw8IDMwKQotI2RlZmluZQkJUERDX0VOCQkJCSgxIDw8IDMxKQotI2RlZmluZSBHQVJUX0JBU0UJCQkweDJDCi0jZGVmaW5lIEdBUlRfQ0FDSEVfQ05UUkwJCTB4MkUKLSMJZGVmaW5lIEdBUlRfQ0FDSEVfSU5WQUxJREFURQkJKDEgPDwgMCkKLSNkZWZpbmUgTUNfU1RBVFVTCQkJMHg5MAotI2RlZmluZSBNQ0NGR19GQl9MT0NBVElPTgkJMHgxMDAKLSNkZWZpbmUJCU1DX0ZCX1NUQVJUX01BU0sJCTB4MDAwMEZGRkYKLSNkZWZpbmUJCU1DX0ZCX1NUQVJUX1NISUZUCQkwCi0jZGVmaW5lCQlNQ19GQl9UT1BfTUFTSwkJCTB4RkZGRjAwMDAKLSNkZWZpbmUJCU1DX0ZCX1RPUF9TSElGVAkJCTE2Ci0jZGVmaW5lIE1DQ0ZHX0FHUF9MT0NBVElPTgkJMHgxMDEKLSNkZWZpbmUJCU1DX0FHUF9TVEFSVF9NQVNLCQkweDAwMDBGRkZGCi0jZGVmaW5lCQlNQ19BR1BfU1RBUlRfU0hJRlQJCTAKLSNkZWZpbmUJCU1DX0FHUF9UT1BfTUFTSwkJCTB4RkZGRjAwMDAKLSNkZWZpbmUJCU1DX0FHUF9UT1BfU0hJRlQJCTE2Ci0jZGVmaW5lIE1DQ0ZHX0FHUF9CQVNFCQkJMHgxMDIKLSNkZWZpbmUgTUNDRkdfQUdQX0JBU0VfMgkJMHgxMDMKLSNkZWZpbmUgTUNfSU5JVF9NSVNDX0xBVF9USU1FUgkJMHgxMDQKLSNkZWZpbmUJCU1DX0RJU1AwUl9JTklUX0xBVF9TSElGVAk4Ci0jZGVmaW5lCQlNQ19ESVNQMFJfSU5JVF9MQVRfTUFTSwkJMHgwMDAwMEYwMAotI2RlZmluZQkJTUNfRElTUDFSX0lOSVRfTEFUX1NISUZUCTEyCi0jZGVmaW5lCQlNQ19ESVNQMVJfSU5JVF9MQVRfTUFTSwkJMHgwMDAwRjAwMAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnYyMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjM5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjAwZC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIF9fUlYyMDBEX0hfXworI2RlZmluZSBfX1JWMjAwRF9IX18KKworI2RlZmluZSBSXzAwMDE1Q19BR1BfQkFTRV8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE1QworI2RlZmluZSAgIFNfMDAwMTVDX0FHUF9CQVNFX0FERFJfMih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTVDX0FHUF9CQVNFX0FERFJfMih4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTVDX0FHUF9CQVNFX0FERFJfMiAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjUwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjI1MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWE3MGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjI1MGQuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SVjI1MERfSF9fCisjZGVmaW5lIF9fUlYyNTBEX0hfXworCisjZGVmaW5lIFJfMDAwMDBEX1NDTEtfQ05UTF9NNiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBECisjZGVmaW5lICAgU18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfU0NMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgIFNfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AyICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0hEUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AxICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0lEQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZJUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVEFNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVERNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RETSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFZfU0NMSyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RWX1NDTEsgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1VCUElDKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVQlBJQyAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfT1YwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX09WMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MzUwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjM1MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzVjNWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjM1MGQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JWMzUwRF9IX18KKyNkZWZpbmUgX19SVjM1MERfSF9fCisKKy8qIFJWMzUwLCBSVjM4MCByZWdpc3RlcnMgKi8KKy8qICNkZWZpbmUgUl8wMDAwMERfU0NMS19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQgKi8KKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WQVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVkFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZBUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9VUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggZmQ3OTk3NC4uNzkzNWY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtMjksMzcgKzI5LDE3IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJ2NTE1ZC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotCisjaW5jbHVkZSAiYXRvbS5oIgogI2luY2x1ZGUgInJ2NTE1X3JlZ19zYWZlLmgiCi0vKiBydjUxNSBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfY3BfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfcmIyZF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiBydjUxNQotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KKy8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86IHJ2NTE1ICovCiBpbnQgcnY1MTVfZGVidWdmc19waXBlc19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X2RlYnVnZnNfZ2FfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnY1MTVfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCi0KLS8qCi0gKiBNQwotICovCi1pbnQgcnY1MTVfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcnY1MTVfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1aW50MzJfdCB0bXA7Ci0JaW50IHI7Ci0KIAlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7CiAJfQpAQCAtNjksNjcgKzQ5LDggQEAKIAlpZiAocnY1MTVfZGVidWdmc19nYV9pbmZvX2luaXQocmRldikpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBwaXBlcyAhXG4iKTsKIAl9Ci0KLQlydjUxNV9ncHVfaW5pdChyZGV2KTsKLQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBEaXNhYmxpbmcgQUdQXG4iKTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5hZ3BfYmFzZTsKLQkJfQotCX0KLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQotCS8qIFByb2dyYW0gR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnY1MTVfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCXRtcCA9IFJFR19TRVQoTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMigweDEzNCwgdG1wKTsKLQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKLQl0bXAgPSBSRUdfU0VUKE1DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChNQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyX01DKE1DX0ZCX0xPQ0FUSU9OLCB0bXApOwotCVdSRUczMihIRFBfRkJfTE9DQVRJT04sIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMigweDMxMCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JCXRtcCA9IFJFR19TRVQoTUNfQUdQX1RPUCwgdG1wID4+IDE2KTsKLQkJdG1wIHw9IFJFR19TRVQoTUNfQUdQX1NUQVJULCByZGV2LT5tYy5ndHRfbG9jYXRpb24gPj4gMTYpOwotCQlXUkVHMzJfTUMoTUNfQUdQX0xPQ0FUSU9OLCB0bXApOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlKTsKLQkJV1JFRzMyX01DKE1DX0FHUF9CQVNFXzIsIDApOwotCX0gZWxzZSB7Ci0JCVdSRUczMl9NQyhNQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0UsIDApOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0VfMiwgMCk7Ci0JfQotCXJldHVybiAwOwogfQogCi12b2lkIHJ2NTE1X21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci19Ci0KLQotLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCi0gKi8KIHZvaWQgcnY1MTVfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKQEAgLTE5OCwxMSArMTE5LDYgQEAKIAlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOwogfQogCi12b2lkIHJ2NTE1X2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogaW50IHJ2NTE1X21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKQEAgLTIxOSw2ICsxMzUsMTQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3ZvaWQgcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCAwKTsKKwlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwKKwkJUlJFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCkgJiBDXzAwMDMwMF9WR0FfVlNUQVRVU19DTlRMKTsKK30KKwogdm9pZCBydjUxNV9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBwaXBlX3NlbGVjdF9jdXJyZW50LCBnYl9waXBlX3NlbGVjdCwgdG1wOwpAQCAtMjMxLDcgKzE1NSw3IEBACiAJCSAgICAgICAicmVzZXRpbmcgR1BVLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIAogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKIAlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOwpAQCAtMzM1LDEwICsyNTksNiBAQAogCXJldHVybiAwOwogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8KLSAqLwogc3RhdGljIHZvaWQgcnY1MTVfdnJhbV9nZXRfdHlwZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCB0bXA7CkBAIC0zNzQsMTAgKzI5NCw2IEBACiAJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKIH0KIAotCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJ2NTE1X21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKIAl1aW50MzJfdCByOwpAQCAtMzk1LDkgKzMxMSw2IEBACiAJV1JFRzMyKE1DX0lORF9JTkRFWCwgMCk7CiB9CiAKLS8qCi0gKiBEZWJ1Z2ZzIGluZm8KLSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogc3RhdGljIGludCBydjUxNV9kZWJ1Z2ZzX3BpcGVzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogewpAQCAtNDU5LDEzICszNzIsMjU5IEBACiAjZW5kaWYKIH0KIAotLyoKLSAqIEFzaWMgaW5pdGlhbGl6YXRpb24KLSAqLwotaW50IHJ2NTE1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJ2NTE1X21jX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKQoreworCXNhdmUtPmQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCk7CisJc2F2ZS0+ZDJ2Z2FfY29udHJvbCA9IFJSRUczMihSXzAwMDMzOF9EMlZHQV9DT05UUk9MKTsKKwlzYXZlLT52Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMDBfVkdBX1JFTkRFUl9DT05UUk9MKTsKKwlzYXZlLT52Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMjhfVkdBX0hEUF9DT05UUk9MKTsKKwlzYXZlLT5kMWNydGNfY29udHJvbCA9IFJSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCk7CisJc2F2ZS0+ZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wpOworCisJLyogU3RvcCBhbGwgdmlkZW8gKi8KKwlXUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDA2OEU4X0QyQ1JUQ19VUERBVEVfTE9DSywgMCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKFJfMDA2OEU4X0QyQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKFJfMDA2MDgwX0QxQ1JUQ19DT05UUk9MLCAwKTsKKwlXUkVHMzIoUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wsIDApOworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOworfQorCit2b2lkIHJ2NTE1X21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJ2NTE1X21jX3NhdmUgKnNhdmUpCit7CisJV1JFRzMyKFJfMDA2MTEwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisJV1JFRzMyKFJfMDA2MTE4X0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoUl8wMDY5MTBfRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoUl8wMDY5MThfRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOworCVdSRUczMihSXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisJLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCisJV1JFRzMyKFJfMDAwMzI4X1ZHQV9IRFBfQ09OVFJPTCwgc2F2ZS0+dmdhX2hkcF9jb250cm9sKTsKKwltZGVsYXkoMSk7CisJLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCwgc2F2ZS0+ZDFjcnRjX2NvbnRyb2wpOworCVdSRUczMihSXzAwNjg4MF9EMkNSVENfQ09OVFJPTCwgc2F2ZS0+ZDJjcnRjX2NvbnRyb2wpOworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCBzYXZlLT5kMXZnYV9jb250cm9sKTsKKwlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgc2F2ZS0+ZDJ2Z2FfY29udHJvbCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgc2F2ZS0+dmdhX3JlbmRlcl9jb250cm9sKTsKK30KKwordm9pZCBydjUxNV9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChydjUxNV9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwkvKiBXcml0ZSBWUkFNIHNpemUgaW4gY2FzZSB3ZSBhcmUgbGltaXRpbmcgaXQgKi8KKwlXUkVHMzIoUl8wMDAwRjhfQ09ORklHX01FTVNJWkUsIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyX01DKFJfMDAwMDAxX01DX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAwMDFfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDFfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCVdSRUczMl9NQyhSXzAwMDAwMl9NQ19BR1BfTE9DQVRJT04sCisJCQlTXzAwMDAwMl9NQ19BR1BfU1RBUlQocmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDAwMl9NQ19BR1BfVE9QKHJkZXYtPm1jLmd0dF9lbmQgPj4gMTYpKTsKKwkJV1JFRzMyX01DKFJfMDAwMDAzX01DX0FHUF9CQVNFLCBsb3dlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSk7CisJCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19BR1BfQkFTRV8yLAorCQkJU18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHVwcGVyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKSk7CisJfSBlbHNlIHsKKwkJV1JFRzMyX01DKFJfMDAwMDAyX01DX0FHUF9MT0NBVElPTiwgMHhGRkZGRkZGRik7CisJCVdSRUczMl9NQyhSXzAwMDAwM19NQ19BR1BfQkFTRSwgMCk7CisJCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19BR1BfQkFTRV8yLCAwKTsKKwl9CisKKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCit2b2lkIHJ2NTE1X2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIDEpOworCS8qIFdlIG5lZWQgdG8gZm9yY2Ugb24gc29tZSBvZiB0aGUgYmxvY2sgKi8KKwlXUkVHMzJfUExMKFJfMDAwMDBGX0NQX0RZTl9DTlRMLAorCQlSUkVHMzJfUExMKFJfMDAwMDBGX0NQX0RZTl9DTlRMKSB8IFNfMDAwMDBGX0NQX0ZPUkNFT04oMSkpOworCVdSRUczMl9QTEwoUl8wMDAwMTFfRTJfRFlOX0NOVEwsCisJCVJSRUczMl9QTEwoUl8wMDAwMTFfRTJfRFlOX0NOVEwpIHwgU18wMDAwMTFfRTJfRk9SQ0VPTigxKSk7CisJV1JFRzMyX1BMTChSXzAwMDAxM19JRENUX0RZTl9DTlRMLAorCQlSUkVHMzJfUExMKFJfMDAwMDEzX0lEQ1RfRFlOX0NOVEwpIHwgU18wMDAwMTNfSURDVF9GT1JDRU9OKDEpKTsKK30KKworc3RhdGljIGludCBydjUxNV9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcnY1MTVfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlydjUxNV9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7CisJCXIgPSBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcnM2MDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcnY1MTVfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJLyogUmVzdW1lIGNsb2NrIGFmdGVyIHBvc3RpbmcgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiBydjUxNV9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcnY1MTVfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMTAwX2NwX2Rpc2FibGUocmRldik7CisJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOworCXJzNjAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSBydjUxNV9yZWdfc2FmZV9ibTsKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShydjUxNV9yZWdfc2FmZV9ibSk7Cit9CisKK3ZvaWQgcnY1MTVfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlydjUxNV9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKyAgICBydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwlyYWRlb25fYWdwX2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJWNTE1IEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXJ2NTE1X3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHJ2NTE1X3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcnY1MTVfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTVkLmgKaW5kZXggYTY1ZTE3ZS4uZmMyMTZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1ZC5oCkBAIC0yMTYsNSArMjE2LDM4OCBAQAogI2RlZmluZSBDUF9QQUNLRVQwX0dFVF9PTkVfUkVHX1dSKGgpICgoKGgpID4+IDE1KSAmIDEpCiAjZGVmaW5lIENQX1BBQ0tFVDNfR0VUX09QQ09ERShoKSAoKChoKSA+PiA4KSAmIDB4RkYpCiAKLSNlbmRpZgorLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEY4CisjZGVmaW5lICAgU18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMEY4X0NPTkZJR19NRU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDBGOF9DT05GSUdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTM0CisjZGVmaW5lICAgU18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMzRfSERQX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBSXzAwMDMwMF9WR0FfUkVOREVSX0NPTlRST0wgICAgICAgICAgICAgICAgICAweDAwMDMwMAorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9CTElOS19SQVRFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfQkxJTktfUkFURSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MUYpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0JMSU5LX1JBVEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZFMAorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9CTElOS19NT0RFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwMzAwX1ZHQV9CTElOS19NT0RFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMzAwX1ZHQV9CTElOS19NT0RFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGOUYKKyNkZWZpbmUgICBTXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCh4KSAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUoeCkgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUoeCkgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9WU1RBVFVTX0NOVEwoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfVlNUQVRVU19DTlRMKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDMpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX1ZTVEFUVVNfQ05UTCAgICAgICAgICAgICAgICAgICAgMHhGRkZDRkZGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9MT0NLXzhET1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfTE9DS184RE9UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0xPQ0tfOERPVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQVJFR19MSU5FQ01QX0NPTVBBVElCSUxJVFlfU0VMKHgpICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FSRUdfTElORUNNUF9DT01QQVRJQklMSVRZX1NFTCh4KSAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBUkVHX0xJTkVDTVBfQ09NUEFUSUJJTElUWV9TRUwgICAgMHhGREZGRkZGRgorI2RlZmluZSBSXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAweDAwMDMxMAorI2RlZmluZSAgIFNfMDAwMzEwX1ZHQV9NRU1PUllfQkFTRV9BRERSRVNTKHgpICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUyh4KSAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAzMTBfVkdBX01FTU9SWV9CQVNFX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDMyOF9WR0FfSERQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDAwMDMyOAorI2RlZmluZSAgIFNfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4oeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4oeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4gICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUoeCkgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDAzMjhfVkdBX1NPRlRfUkVTRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9TT0ZUX1JFU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMjhfVkdBX1RFU1RfUkVTRVRfQ09OVFJPTCh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9URVNUX1JFU0VUX0NPTlRST0woeCkgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfVEVTVF9SRVNFVF9DT05UUk9MICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDAwMzMwX0QxVkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzMwCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfT1ZFUlNDQU5fVElNSU5HX1NFTEVDVCh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX09WRVJTQ0FOX1RJTUlOR19TRUxFQ1QoeCkgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9PVkVSU0NBTl9USU1JTkdfU0VMRUNUICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfT1ZFUlNDQU5fQ09MT1JfRU4oeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX09WRVJTQ0FOX0NPTE9SX0VOKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9PVkVSU0NBTl9DT0xPUl9FTiAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfUk9UQVRFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX1JPVEFURSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9ST1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAweEZDRkZGRkZGCisjZGVmaW5lIFJfMDAwMzM4X0QyVkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzM4CisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfT1ZFUlNDQU5fVElNSU5HX1NFTEVDVCh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX09WRVJTQ0FOX1RJTUlOR19TRUxFQ1QoeCkgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9PVkVSU0NBTl9USU1JTkdfU0VMRUNUICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfT1ZFUlNDQU5fQ09MT1JfRU4oeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX09WRVJTQ0FOX0NPTE9SX0VOKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9PVkVSU0NBTl9DT0xPUl9FTiAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfUk9UQVRFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX1JPVEFURSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9ST1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAweEZDRkZGRkZGCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCQk1fSElCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQkJNX0hJQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkJCTV9ISUJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1NLSURfQ0ZCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9TS0lEX0NGQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfU0tJRF9DRkJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9WRl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfVkZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX1ZGX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAweDAwNjA4MAorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwoeCkgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCh4KSAgICAgICAgKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lICAgR18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCh4KSAgICAgICAgKCgoeCkgPj4gOCkgJiAweDMpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCAgICAgICAgICAgMHhGRkZGRkNGRgorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19DVVJSRU5UX01BU1RFUl9FTl9TVEFURSh4KSAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfQ1VSUkVOVF9NQVNURVJfRU5fU1RBVEUoeCkgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0NVUlJFTlRfTUFTVEVSX0VOX1NUQVRFICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19ESVNQX1JFQURfUkVRVUVTVF9ESVNBQkxFKHgpICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfRElTUF9SRUFEX1JFUVVFU1RfRElTQUJMRSh4KSAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0RJU1BfUkVBRF9SRVFVRVNUX0RJU0FCTEUgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0sgICAgICAgICAgICAgICAgICAweDAwNjBFOAorI2RlZmluZSAgIFNfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgUl8wMDYxMTBfRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICAgICAgMHgwMDYxMTAKKyNkZWZpbmUgICBTXzAwNjExMF9EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MoeCkgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDYxMTBfRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKHgpICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA2MTEwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDYxMThfRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgICAgMHgwMDYxMTgKKyNkZWZpbmUgICBTXzAwNjExOF9EMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyh4KSAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDYxMThfRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MoeCkgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA2MTE4X0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgMHgwMDY4ODAKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMKHgpICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwoeCkgICAgICAgICgoKHgpICYgMHgzKSA8PCA4KQorI2RlZmluZSAgIEdfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwoeCkgICAgICAgICgoKHgpID4+IDgpICYgMHgzKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwgICAgICAgICAgIDB4RkZGRkZDRkYKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfQ1VSUkVOVF9NQVNURVJfRU5fU1RBVEUoeCkgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX0NVUlJFTlRfTUFTVEVSX0VOX1NUQVRFKHgpICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19DVVJSRU5UX01BU1RFUl9FTl9TVEFURSAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfRElTUF9SRUFEX1JFUVVFU1RfRElTQUJMRSh4KSAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX0RJU1BfUkVBRF9SRVFVRVNUX0RJU0FCTEUoeCkgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19ESVNQX1JFQURfUkVRVUVTVF9ESVNBQkxFICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDY4RThfRDJDUlRDX1VQREFURV9MT0NLICAgICAgICAgICAgICAgICAgMHgwMDY4RTgKKyNkZWZpbmUgICBTXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0soeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0soeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0sgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIFJfMDA2OTEwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgIDB4MDA2OTEwCisjZGVmaW5lICAgU18wMDY5MTBfRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKHgpICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2OTEwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyh4KSAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwNjkxMF9EMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDA2OTE4X0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICAgIDB4MDA2OTE4CisjZGVmaW5lICAgU18wMDY5MThfRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MoeCkgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2OTE4X0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKHgpICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwNjkxOF9EMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAweDAwMDAwMDAwCiAKKworI2RlZmluZSBSXzAwMDAwMV9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMQorI2RlZmluZSAgIFNfMDAwMDAxX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDAxX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDAxX01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwMV9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDFfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDAxX01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDJfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIKKyNkZWZpbmUgICBTXzAwMDAwMl9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwMl9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwMl9NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwMDJfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDAyX01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwMl9NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMDAzX01DX0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzCisjZGVmaW5lICAgU18wMDAwMDNfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDAzX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDAwM19BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMDA0X01DX0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0CisjZGVmaW5lICAgU18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwMDRfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorCisKKyNkZWZpbmUgUl8wMDAwMEZfQ1BfRFlOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9GT1JDRU9OICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwMEZfQ1BfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX1BST0dfREVMQVlfVkFMVUUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9QUk9HX0RFTEFZX1ZBTFVFICAgICAgICAgICAgICAgICAweEZGRkZGMDBGCisjZGVmaW5lICAgU18wMDAwMEZfQ1BfTE9XRVJfUE9XRVJfSURMRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0xPV0VSX1BPV0VSX0lETEUgICAgICAgICAgICAgICAgIDB4RkZGMDBGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTE9XRVJfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0xPV0VSX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTk9STUFMX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX05PUk1BTF9QT1dFUl9JR05PUkUgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9TUEFSRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMEZfU1BBUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMDBGX1NQQVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYzRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9OT1JNQUxfUE9XRVJfQlVTWSh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMEZfQ1BfTk9STUFMX1BPV0VSX0JVU1kgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBSXzAwMDAxMV9FMl9EWU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMQorI2RlZmluZSAgIFNfMDAwMDExX0UyX0ZPUkNFT04oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX0ZPUkNFT04oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDExX0UyX0ZPUkNFT04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwMDExX0UyX1BST0dfU0hVVE9GRih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX1BST0dfU0hVVE9GRih4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDExX0UyX1BST0dfU0hVVE9GRiAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9QUk9HX0RFTEFZX1ZBTFVFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDQpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDExX0UyX1BST0dfREVMQVlfVkFMVUUgICAgICAgICAgICAgICAgIDB4RkZGRkYwMEYKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX0xPV0VSX1BPV0VSX0lETEUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTE9XRVJfUE9XRVJfSURMRSAgICAgICAgICAgICAgICAgMHhGRkYwMEZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX0xPV0VSX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTE9XRVJfUE9XRVJfSUdOT1JFICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX05PUk1BTF9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTk9STUFMX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX1NQQVJFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDAxMV9TUEFSRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDMpCisjZGVmaW5lICAgQ18wMDAwMTFfU1BBUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjNGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfTk9STUFMX1BPV0VSX0JVU1koeCkgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAxMV9FMl9OT1JNQUxfUE9XRVJfQlVTWSAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIFJfMDAwMDEzX0lEQ1RfRFlOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEzCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9GT1JDRU9OICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX1BST0dfREVMQVlfVkFMVUUoeCkgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9QUk9HX0RFTEFZX1ZBTFVFICAgICAgICAgICAgICAgMHhGRkZGRjAwRgorI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfTE9XRVJfUE9XRVJfSURMRSh4KSAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0xPV0VSX1BPV0VSX0lETEUgICAgICAgICAgICAgICAweEZGRjAwRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTE9XRVJfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0xPV0VSX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTk9STUFMX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX05PUk1BTF9QT1dFUl9JR05PUkUgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfU1BBUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwMDEzX1NQQVJFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDAxM19TUEFSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGM0ZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9OT1JNQUxfUE9XRVJfQlVTWSh4KSAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDEzX0lEQ1RfTk9STUFMX1BPV0VSX0JVU1kgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKaW5kZXggYjU3NGM3My4uYjBlZmQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJydjc3MGQuaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKICNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCiAKICNkZWZpbmUgUjcwMF9QRlBfVUNPREVfU0laRSA4NDgKICNkZWZpbmUgUjcwMF9QTTRfVUNPREVfU0laRSAxMzYwCkBAIC03NSw3ICs3NSw3IEBACiAJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjJfQ05UTCwgdG1wKTsKIAlXUkVHMzIoTUNfVk1fTUJfTDFfVExCM19DTlRMLCB0bXApOwogCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCByZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIsIHJkZXYtPmdhcnQudGFibGVfYWRkciA+PiAxMik7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwsIEVOQUJMRV9DT05URVhUIHwgUEFHRV9UQUJMRV9ERVBUSCgwKSB8CiAJCQkJUkFOR0VfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCk7CkBAIC0xMjYsMTcgKzEyNiwzNiBAQAogfQogCiAKLS8qCi0gKiBNQwotICovCi1zdGF0aWMgdm9pZCBydjc3MF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJ2NzcwX2FncF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdTMyIGQxdmdhX2NvbnRyb2wsIGQydmdhX2NvbnRyb2w7Ci0JdTMyIHZnYV9yZW5kZXJfY29udHJvbCwgdmdhX2hkcF9jb250cm9sOwotCXUzMiBkMWNydGNfY29udHJvbCwgZDJjcnRjX2NvbnRyb2w7Ci0JdTMyIG5ld19kMWdycGhfcHJpbWFyeSwgbmV3X2QxZ3JwaF9zZWNvbmRhcnk7Ci0JdTMyIG5ld19kMmdycGhfcHJpbWFyeSwgbmV3X2QyZ3JwaF9zZWNvbmRhcnk7Ci0JdTY0IG9sZF92cmFtX3N0YXJ0OworCXUzMiB0bXA7CisJaW50IGk7CisKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUKDApIHwgQ0FDSEVfVVBEQVRFX01PREUoMikpOworCS8qIFNldHVwIFRMQiBjb250cm9sICovCisJdG1wID0gRU5BQkxFX0wxX1RMQiB8IEVOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgfAorCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSB8CisJCUVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIzX0NOVEwsIHRtcCk7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCAwKTsKK30KKworc3RhdGljIHZvaWQgcnY3NzBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOwogCXUzMiB0bXA7CiAJaW50IGksIGo7CiAKQEAgLTE1MCw1MyArMTY5LDQyIEBACiAJfQogCVdSRUczMihIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAwKTsKIAotCWQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoRDFWR0FfQ09OVFJPTCk7Ci0JZDJ2Z2FfY29udHJvbCA9IFJSRUczMihEMlZHQV9DT05UUk9MKTsKLQl2Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MKTsKLQl2Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoVkdBX0hEUF9DT05UUk9MKTsKLQlkMWNydGNfY29udHJvbCA9IFJSRUczMihEMUNSVENfQ09OVFJPTCk7Ci0JZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoRDJDUlRDX0NPTlRST0wpOwotCW9sZF92cmFtX3N0YXJ0ID0gKHU2NCkoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmIDB4RkZGRikgPDwgMjQ7Ci0JbmV3X2QxZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QxZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMWdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QxZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMmdycGhfcHJpbWFyeSA9IFJSRUczMihEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMmdycGhfc2Vjb25kYXJ5ID0gUlJFRzMyKEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKTsKLQluZXdfZDJncnBoX3ByaW1hcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMmdycGhfc2Vjb25kYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKLQotCS8qIFN0b3AgYWxsIHZpZGVvICovCi0JV1JFRzMyKEQxVkdBX0NPTlRST0wsIDApOwotCVdSRUczMihEMlZHQV9DT05UUk9MLCAwKTsKLQlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCAwKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIDApOwotCVdSRUczMihEMkNSVENfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0JV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0KLQltZGVsYXkoMSk7CisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CiAJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBNQyBub3QgaWRsZSAhXG4iKTsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBmb3IgTUMgaWRsZSB0aW1lZG91dCAhXG4iKTsKIAl9Ci0KIAkvKiBMb2Nrb3V0IGFjY2VzcyB0aHJvdWdoIFZHQSBhcGVydHVyZSovCiAJV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgVkdBX01FTU9SWV9ESVNBQkxFKTsKLQogCS8qIFVwZGF0ZSBjb25maWd1cmF0aW9uICovCi0JV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsIChyZGV2LT5tYy52cmFtX2VuZCAtIDEpID4+IDEyKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCWlmIChyZGV2LT5tYy52cmFtX3N0YXJ0IDwgcmRldi0+bWMuZ3R0X3N0YXJ0KSB7CisJCQkvKiBWUkFNIGJlZm9yZSBBR1AgKi8KKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsCisJCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFZSQU0gYWZ0ZXIgQUdQICovCisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJCXJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy52cmFtX2VuZCA+PiAxMik7CisJCX0KKwl9IGVsc2UgeworCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJcmRldi0+bWMudnJhbV9lbmQgPj4gMTIpOworCX0KIAlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiwgMCk7Ci0JdG1wID0gKCgocmRldi0+bWMudnJhbV9lbmQgLSAxKSA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OworCXRtcCA9ICgocmRldi0+bWMudnJhbV9lbmQgPj4gMjQpICYgMHhGRkZGKSA8PCAxNjsKIAl0bXAgfD0gKChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDI0KSAmIDB4RkZGRik7CiAJV1JFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OLCB0bXApOwogCVdSRUczMihIRFBfTk9OU1VSRkFDRV9CQVNFLCAocmRldi0+bWMudnJhbV9zdGFydCA+PiA4KSk7CiAJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0lORk8sICgyIDw8IDcpKTsKIAlXUkVHMzIoSERQX05PTlNVUkZBQ0VfU0laRSwgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpIHwgMHgzRkYpOwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgcmRldi0+bWMuZ3R0X2VuZCA+PiAxNik7CiAJCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlID4+IDIyKTsKIAl9IGVsc2UgewpAQCAtMjA0LDM0ICsyMTIsMTMgQEAKIAkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIDB4MEZGRkZGRkYpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JPVCwgMHgwRkZGRkZGRik7CiAJfQotCVdSRUczMihEMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfcHJpbWFyeSk7Ci0JV1JFRzMyKEQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDFncnBoX3NlY29uZGFyeSk7Ci0JV1JFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9wcmltYXJ5KTsKLQlXUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMmdycGhfc2Vjb25kYXJ5KTsKLQlXUkVHMzIoVkdBX01FTU9SWV9CQVNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOwotCi0JLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCi0JV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgdmdhX2hkcF9jb250cm9sKTsKLQotCW1kZWxheSgxKTsKIAlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOwogCX0KLQotCS8qIFJlc3RvcmUgdmlkZW8gc3RhdGUgKi8KLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIGQxY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDJDUlRDX0NPTlRST0wsIGQyY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgZDF2Z2FfY29udHJvbCk7Ci0JV1JFRzMyKEQyVkdBX0NPTlRST0wsIGQydmdhX2NvbnRyb2wpOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXJfY29udHJvbCk7Ci0KKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOwogCS8qIHdlIG5lZWQgdG8gb3duIFZSQU0sIHNvIHR1cm4gb2ZmIHRoZSBWR0EgcmVuZGVyZXIgaGVyZQogCSAqIHRvIHN0b3AgaXQgb3ZlcndyaXRpbmcgb3VyIG9iamVjdHMgKi8KLQlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIH0KIAogCkBAIC01NDIsMTEgKzUyOSwxMSBAQAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1RJTElORygxKTsKIAllbHNlCi0JCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19TSElGVCkgPj4gTk9PRkJBTktfTUFTSyk7CisJCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19NQVNLKSA+PiBOT09GQkFOS19TSElGVCk7CiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IEdST1VQX1NJWkUoMCk7CiAKLQlpZiAoKChtY19hcmJfcmFtY2ZnICYgTk9PRlJPV1NfTUFTSykgJiBOT09GUk9XU19TSElGVCkgPiAzKSB7CisJaWYgKCgobWNfYXJiX3JhbWNmZyAmIE5PT0ZST1dTX01BU0spID4+IE5PT0ZST1dTX1NISUZUKSA+IDMpIHsKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBST1dfVElMSU5HKDMpOwogCQlnYl90aWxpbmdfY29uZmlnIHw9IFNBTVBMRV9TUExJVCgzKTsKIAl9IGVsc2UgewpAQCAtNTkyLDE0ICs1NzksMTQgQEAKIAogCS8qIHNldCBIVyBkZWZhdWx0cyBmb3IgM0QgZW5naW5lICovCiAJV1JFRzMyKENQX1FVRVVFX1RIUkVTSE9MRFMsIChST1FfSUIxX1NUQVJUKDB4MTYpIHwKLQkJCQkJCVJPUV9JQjJfU1RBUlQoMHgyYikpKTsKKwkJCQkgICAgIFJPUV9JQjJfU1RBUlQoMHgyYikpKTsKIAogCVdSRUczMihDUF9NRVFfVEhSRVNIT0xEUywgU1RRX1NQTElUKDB4MzApKTsKIAogCVdSRUczMihUQV9DTlRMX0FVWCwgKERJU0FCTEVfQ1VCRV9BTklTTyB8Ci0JCQkJCVNZTkNfR1JBRElFTlQgfAotCQkJCQlTWU5DX1dBTEtFUiB8Ci0JCQkJCVNZTkNfQUxJR05FUikpOworCQkJICAgICBTWU5DX0dSQURJRU5UIHwKKwkJCSAgICAgU1lOQ19XQUxLRVIgfAorCQkJICAgICBTWU5DX0FMSUdORVIpKTsKIAogCXN4X2RlYnVnXzEgPSBSUkVHMzIoU1hfREVCVUdfMSk7CiAJc3hfZGVidWdfMSB8PSBFTkFCTEVfTkVXX1NNWF9BRERSRVNTOwpAQCAtNjExLDkgKzU5OCw5IEBACiAJV1JFRzMyKFNNWF9EQ19DVEwwLCBzbXhfZGNfY3RsMCk7CiAKIAlXUkVHMzIoU01YX0VWRU5UX0NUTCwgKEVTX0ZMVVNIX0NUTCg0KSB8Ci0JCQkJCSAgR1NfRkxVU0hfQ1RMKDQpIHwKLQkJCQkJICBBQ0tfRkxVU0hfQ1RMKDMpIHwKLQkJCQkJICBTWU5DX0ZMVVNIX0NUTCkpOworCQkJICAgICAgIEdTX0ZMVVNIX0NUTCg0KSB8CisJCQkgICAgICAgQUNLX0ZMVVNIX0NUTCgzKSB8CisJCQkgICAgICAgU1lOQ19GTFVTSF9DVEwpKTsKIAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJV1JFRzMyKERCX0RFQlVHMywgREJfQ0xLX09GRl9ERUxBWSgweDFmKSk7CkBAIC02MjQsMTIgKzYxMSwxMiBAQAogCX0KIAogCVdSRUczMihTWF9FWFBPUlRfQlVGRkVSX1NJWkVTLCAoQ09MT1JfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NpemUgLyA0KSAtIDEpIHwKLQkJCQkJCSAgIFBPU0lUSU9OX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAotCQkJCQkJICAgU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSAvIDQpIC0gMSkpKTsKKwkJCQkJUE9TSVRJT05fQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplIC8gNCkgLSAxKSB8CisJCQkJCVNNWF9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CiAKIAlXUkVHMzIoUEFfU0NfRklGT19TSVpFLCAoU0NfUFJJTV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX3ByaW1fZmlmb19zaXplKSB8Ci0JCQkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKLQkJCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSkpKTsKKwkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKKwkJCQkgU0NfRUFSTFlaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19lYXJseXpfdGlsZV9maWZvX2ZpemUpKSk7CiAKIAlXUkVHMzIoUEFfU0NfTVVMVElfQ0hJUF9DTlRMLCAwKTsKIApAQCAtNzg3LDIwICs3NzQsNDkgQEAKIHsKIAlmaXhlZDIwXzEyIGE7CiAJdTMyIHRtcDsKKwlpbnQgY2hhbnNpemUsIG51bWNoYW47CiAJaW50IHI7CiAKIAkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KLQkvKiBGSVhNRTogRG9uJ3Qga25vdyBob3cgdG8gZGV0ZXJtaW5lIHZyYW0gd2lkdGgsIG5lZWQgdG8gY2hlY2sKLQkgKiB2cmFtX3dpZHRoIHVzYWdlCi0JICovCi0JcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKIAlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CisJdG1wID0gUlJFRzMyKE1DX0FSQl9SQU1DRkcpOworCWlmICh0bXAgJiBDSEFOU0laRV9PVkVSUklERSkgeworCQljaGFuc2l6ZSA9IDE2OworCX0gZWxzZSBpZiAodG1wICYgQ0hBTlNJWkVfTUFTSykgeworCQljaGFuc2l6ZSA9IDY0OworCX0gZWxzZSB7CisJCWNoYW5zaXplID0gMzI7CisJfQorCXRtcCA9IFJSRUczMihNQ19TSEFSRURfQ0hNQVApOworCXN3aXRjaCAoKHRtcCAmIE5PT0ZDSEFOX01BU0spID4+IE5PT0ZDSEFOX1NISUZUKSB7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCW51bWNoYW4gPSAxOworCQlicmVhazsKKwljYXNlIDE6CisJCW51bWNoYW4gPSAyOworCQlicmVhazsKKwljYXNlIDI6CisJCW51bWNoYW4gPSA0OworCQlicmVhazsKKwljYXNlIDM6CisJCW51bWNoYW4gPSA4OworCQlicmVhazsKKwl9CisJcmRldi0+bWMudnJhbV93aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKIAkvKiBDb3VsZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLwogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CiAJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwogCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOworCisJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKKwkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCisJaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQorCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKIAkJaWYgKHIpCkBAIC04MzMsOSArODQ5LDkgQEAKIAkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CiAJfQogCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwlyZGV2LT5tYy52cmFtX2VuZCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwogCXJkZXYtPm1jLmd0dF9zdGFydCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbjsKLQlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemU7CisJcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIGVuZm9yY2UgZGVmYXVsdCBjbG9jayBpbiBjYXNlIEdQVSBpcyBub3QgaW4KIAkgKiBkZWZhdWx0IHNldHVwCiAJICovCkBAIC04NTQsMTEgKzg3MCwxNCBAQAogewogCWludCByOwogCi0JcmFkZW9uX2dwdV9yZXNldChyZGV2KTsKLQlydjc3MF9tY19yZXN1bWUocmRldik7Ci0JciA9IHJ2NzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCXJ2NzcwX21jX3Byb2dyYW0ocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlydjc3MF9hZ3BfZW5hYmxlKHJkZXYpOworCX0gZWxzZSB7CisJCXIgPSBydjc3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KIAlydjc3MF9ncHVfaW5pdChyZGV2KTsKIAogCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTg3Nyw5ICs4OTYsOCBAQAogCXIgPSByNjAwX2NwX3Jlc3VtZShyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7Ci0JciA9IHI2MDBfd2JfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogd3JpdGUgYmFjayBidWZmZXIgYXJlIG5vdCB2aXRhbCBzbyBkb24ndCB3b3JyeSBhYm91dCBmYWlsdXJlICovCisJcjYwMF93Yl9lbmFibGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4NywxNSArOTA1LDEyIEBACiB7CiAJaW50IHI7CiAKLQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCX0KKwkvKiBEbyBub3QgcmVzZXQgR1BVIGJlZm9yZSBwb3N0aW5nLCBvbiBydjc3MCBodyB1bmxpa2Ugb24gcjUwMCBodywKKwkgKiBwb3N0aW5nIHdpbGwgcGVyZm9ybSBuZWNlc3NhcnkgdGFzayB0byBicmluZyBiYWNrIEdQVSBpbnRvIGdvb2QKKwkgKiBzaGFwZS4KKwkgKi8KIAkvKiBwb3N0IGNhcmQgKi8KLQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQl9CisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwogCWlmIChyKSB7CkBAIC05MDgsNyArOTIzLDcgQEAKIAkJcmV0dXJuIHI7CiAJfQogCi0JciA9IHJhZGVvbl9pYl90ZXN0KHJkZXYpOworCXIgPSByNjAwX2liX3Rlc3QocmRldik7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwpAQCAtOTIyLDggKzkzNyw4IEBACiAJLyogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciByaW5nIHRvIGJlIGVtcHR5ICovCiAJcjcwMF9jcF9zdG9wKHJkZXYpOwogCXJkZXYtPmNwLnJlYWR5ID0gZmFsc2U7CisJcjYwMF93Yl9kaXNhYmxlKHJkZXYpOwogCXJ2NzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCiAJLyogdW5waW4gc2hhZGVycyBibyAqLwogICAgICAgICByYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyZXR1cm4gMDsKQEAgLTkzOSw3ICs5NTQsNiBAQAogewogCWludCByOwogCi0JcmRldi0+bmV3X2luaXRfcGF0aCA9IHRydWU7CiAJciA9IHJhZGVvbl9kdW1teV9wYWdlX2luaXQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwpAQCAtOTUzLDggKzk2NywxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIE11c3QgYmUgYW4gQVRPTUJJT1MgKi8KLQlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykKKwlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBhdG9tYmlvcyBmb3IgUjYwMCBHUFVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTk2NywyNCArOTgzLDIwIEBACiAJcjYwMF9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHJ2NzcwX21jX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCi0JCQlydjc3MF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKLQkJfQorCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CiAJLyogTWVtb3J5IG1hbmFnZXIgKi8KIAlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMTAxMywxMiArMTAyNSwxMCBAQAogCiAJciA9IHJ2NzcwX3N0YXJ0dXAocmRldik7CiAJaWYgKHIpIHsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCi0JCQlydjc3MF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKLQkJfQorCQlydjc3MF9zdXNwZW5kKHJkZXYpOworCQlyNjAwX3diX2ZpbmkocmRldik7CisJCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CisJCXJ2NzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOwogCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAJfQogCWlmIChyZGV2LT5hY2NlbF93b3JraW5nKSB7CkBAIC0xMDI3LDcgKzEwMzcsNyBAQAogCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgaW5pdGlhbGl6aW5nIElCIHBvb2wgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCQl9Ci0JCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKKwkJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKIAkJaWYgKHIpIHsKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwpAQCAtMTA0MiwyMCArMTA1MiwxNSBAQAogCiAJcjYwMF9ibGl0X2ZpbmkocmRldik7CiAJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwlyNjAwX3diX2ZpbmkocmRldik7CiAJcnY3NzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwotI2VuZGlmCiAJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKLQl9CisJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CiAJa2ZyZWUocmRldi0+Ymlvcyk7CiAJcmRldi0+YmlvcyA9IE5VTEw7CiAJcmFkZW9uX2R1bW15X3BhZ2VfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCmluZGV4IDRiOWMzZDYuLmExMzY3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtMTI5LDYgKzEyOSwxMCBAQAogI2RlZmluZSBIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMCQkJMHg1NEEwCiAjZGVmaW5lCUhEUF9USUxJTkdfQ09ORklHCQkJCTB4MkYzQwogCisjZGVmaW5lIE1DX1NIQVJFRF9DSE1BUAkJCQkJCTB4MjAwNAorI2RlZmluZQkJTk9PRkNIQU5fU0hJRlQJCQkJCTEyCisjZGVmaW5lCQlOT09GQ0hBTl9NQVNLCQkJCQkweDAwMDAzMDAwCisKICNkZWZpbmUJTUNfQVJCX1JBTUNGRwkJCQkJMHgyNzYwCiAjZGVmaW5lCQlOT09GQkFOS19TSElGVAkJCQkJMAogI2RlZmluZQkJTk9PRkJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMwpAQCAtMTQyLDYgKzE0Niw3IEBACiAjZGVmaW5lCQlDSEFOU0laRV9NQVNLCQkJCQkweDAwMDAwMTAwCiAjZGVmaW5lCQlCVVJTVExFTkdUSF9TSElGVAkJCQk5CiAjZGVmaW5lCQlCVVJTVExFTkdUSF9NQVNLCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUJCUNIQU5TSVpFX09WRVJSSURFCQkJCSgxIDw8IDExKQogI2RlZmluZQlNQ19WTV9BR1BfVE9QCQkJCQkweDIwMjgKICNkZWZpbmUJTUNfVk1fQUdQX0JPVAkJCQkJMHgyMDJDCiAjZGVmaW5lCU1DX1ZNX0FHUF9CQVNFCQkJCQkweDIwMzAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib192bS5jCmluZGV4IDMzZGU3NjMuLjFjMDQwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdm0uYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHR0bV9ib192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHR0bV9ib192bV9vcHMgPSB7CiAJLmZhdWx0ID0gdHRtX2JvX3ZtX2ZhdWx0LAogCS5vcGVuID0gdHRtX2JvX3ZtX29wZW4sCiAJLmNsb3NlID0gdHRtX2JvX3ZtX2Nsb3NlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCmluZGV4IDU0MTc0NGQuLmIxNzAwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCkBAIC04Miw4ICs4Miw4IEBACiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCQlnb3RvIG91dF9lcnI7CiAKLQkJKytpdGVtLT5yZWZjb3VudDsKIAl9CisJKytpdGVtLT5yZWZjb3VudDsKIAlyZWYtPm9iamVjdCA9IGl0ZW0tPm9iamVjdDsKIAlvYmplY3QgPSBpdGVtLT5vYmplY3Q7CiAJbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwppbmRleCBhNTVlZTFhLi43YmNiODlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAgLTI3OSw2ICsyNzksNyBAQAogCiAJcmV0dXJuIHR0bV90dF9zZXRfY2FjaGluZyh0dG0sIHN0YXRlKTsKIH0KK0VYUE9SVF9TWU1CT0wodHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyk7CiAKIHN0YXRpYyB2b2lkIHR0bV90dF9mcmVlX2FsbG9jZWRfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggYmUzNGQzMi4uN2QwNWM0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogICogQHR5cGU6IEhJRCByZXBvcnQgdHlwZSAoSElEXypfUkVQT1JUKQogICogQGRhdGE6IHJlcG9ydCBjb250ZW50cwogICogQHNpemU6IHNpemUgb2YgZGF0YSBwYXJhbWV0ZXIKLSAqIEBpbnRlcnJ1cHQ6IGNhbGxlZCBmcm9tIGF0b21pYz8KKyAqIEBpbnRlcnJ1cHQ6IGRpc3Rpbmd1aXNoIGJldHdlZW4gaW50ZXJydXB0IGFuZCBjb250cm9sIHRyYW5zZmVycwogICoKICAqIFRoaXMgaXMgZGF0YSBlbnRyeSBmb3IgbG93ZXIgbGF5ZXJzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jIGIvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYwppbmRleCBiMDVmNjAyLi5jNDBhZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC10d2luaGFuLmMKQEAgLTEzMiwxMiArMTMyLDEyIEBACiAJLmlucHV0X21hcHBpbmcgPSB0d2luaGFuX2lucHV0X21hcHBpbmcsCiB9OwogCi1zdGF0aWMgaW50IHR3aW5oYW5faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdHdpbmhhbl9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnR3aW5oYW5fZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgdHdpbmhhbl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdHdpbmhhbl9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZ0d2luaGFuX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IDBjNjYzOWUuLmNkZDEzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2hpZHJhdy5oPgpAQCAtNDcsMTAgKzQ4LDkgQEAKIAljaGFyICpyZXBvcnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKKwltdXRleF9sb2NrKCZsaXN0LT5yZWFkX211dGV4KTsKKwogCXdoaWxlIChyZXQgPT0gMCkgewotCi0JCW11dGV4X2xvY2soJmxpc3QtPnJlYWRfbXV0ZXgpOwotCiAJCWlmIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKIAkJCWFkZF93YWl0X3F1ZXVlKCZsaXN0LT5oaWRyYXctPndhaXQsICZ3YWl0KTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNjg1NzU2MC4uNzAwZTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNjc1LDcgKzY3NSw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX1MzQwogCXRyaXN0YXRlICJTM0MyNFhYL1MzQzY0WFggSW5idWlsdCBBREMiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIG9uLWJvYXJkIEFEQ3Mgb2YKIAkgIHRoZSBTYW1zdW5nIFMzQzI0WFggb3IgUzNDNjRYWCBzZXJpZXMgb2YgU29DCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkdDc0NzUuYyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCmluZGV4IGQzOTg3N2EuLmI1YTk1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCkBAIC0zNTAsOCArMzUwLDcgQEAKIAogCWNhc2UgRkFVTFQ6CiAJCS8qIE5vdGUgLSBvbmx5IGZvciByZW1vdGUxIGFuZCByZW1vdGUyICovCi0JCW91dCA9IGRhdGEtPmFsYXJtcyAmIChzYXR0ci0+aW5kZXggPyAweDgwMDAgOiAweDQwMDApOwotCQlvdXQgPSBvdXQgPyAwIDogMTsKKwkJb3V0ID0gISEoZGF0YS0+YWxhcm1zICYgKHNhdHRyLT5pbmRleCA/IDB4ODAwMCA6IDB4NDAwMCkpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC04NjMsNyArODYyLDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTFfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20xX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMCk7CkBAIC04NzUsNyArODc0LDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTJfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20yX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMSk7CkBAIC04ODcsNyArODg2LDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTNfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMik7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtM19hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtM19hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20zX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMik7CkBAIC05NDcsMTkgKzk0NiwxOSBAQAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCkBAIC0xMTUyLDcgKzExNTEsNyBAQAogCX0KIAogCS8qIExpbWl0cyBhbmQgc2V0dGluZ3MsIHNob3VsZCBuZXZlciBjaGFuZ2UgdXBkYXRlIGV2ZXJ5IDYwIHNlY29uZHMgKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5saW1pdHNfdXBkYXRlZCArIEhaICogMikgfHwKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5saW1pdHNfdXBkYXRlZCArIEhaICogNjApIHx8CiAJICAgICFkYXRhLT52YWxpZCkgewogCQlkYXRhLT5jb25maWc1ID0gYWR0NzQ3NV9yZWFkKFJFR19DT05GSUc1KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYyBiL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKaW5kZXggZmU0ZmEyOS4uNWEzZWUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCkBAIC0zNSwxOCArMzUsMjIgQEAKICNkZWZpbmUgTUVUSE9EX09MRF9FTlVNX0ZBTgkiRlNJRiIKIAogI2RlZmluZSBBVEtfTVVYX0hXTU9OCQkweDAwMDAwMDA2VUxMCisjZGVmaW5lIEFUS19NVVhfTUdNVAkJMHgwMDAwMDAxMVVMTAogCiAjZGVmaW5lIEFUS19DTEFTU19NQVNLCQkweGZmMDAwMDAwVUxMCiAjZGVmaW5lIEFUS19DTEFTU19GUkVRX0NUTAkweDAzMDAwMDAwVUxMCiAjZGVmaW5lIEFUS19DTEFTU19GQU5fQ1RMCTB4MDQwMDAwMDBVTEwKICNkZWZpbmUgQVRLX0NMQVNTX0hXTU9OCQkweDA2MDAwMDAwVUxMCisjZGVmaW5lIEFUS19DTEFTU19NR01UCQkweDExMDAwMDAwVUxMCiAKICNkZWZpbmUgQVRLX1RZUEVfTUFTSwkJMHgwMGZmMDAwMFVMTAogI2RlZmluZSBIV01PTl9UWVBFX1ZPTFQJCTB4MDAwMjAwMDBVTEwKICNkZWZpbmUgSFdNT05fVFlQRV9URU1QCQkweDAwMDMwMDAwVUxMCiAjZGVmaW5lIEhXTU9OX1RZUEVfRkFOCQkweDAwMDQwMDAwVUxMCiAKLSNkZWZpbmUgSFdNT05fU0VOU09SX0lEX01BU0sJMHgwMDAwZmZmZlVMTAorI2RlZmluZSBBVEtfRUxFTUVOVF9JRF9NQVNLCTB4MDAwMGZmZmZVTEwKKworI2RlZmluZSBBVEtfRUNfSUQJCTB4MTEwNjAwMDRVTEwKIAogZW51bSBhdGtfcGFja19tZW1iZXIgewogCUhXTU9OX1BBQ0tfRkxBR1MsCkBAIC04OSw2ICs5Myw5IEBACiAJLyogbmV3IGludGVmYWNlICovCiAJYWNwaV9oYW5kbGUgZW51bWVyYXRlX2hhbmRsZTsKIAlhY3BpX2hhbmRsZSByZWFkX2hhbmRsZTsKKwlhY3BpX2hhbmRsZSB3cml0ZV9oYW5kbGU7CisKKwlib29sIGRpc2FibGVfZWM7CiAKIAlpbnQgdm9sdGFnZV9jb3VudDsKIAlpbnQgdGVtcGVyYXR1cmVfY291bnQ7CkBAIC0xMjksOSArMTM2LDIyIEBACiAJY2hhciBjb25zdCAqYWNwaV9uYW1lOwogfTsKIAotc3RydWN0IGF0a19hY3BpX2J1ZmZlcl91NjQgewotCXVuaW9uIGFjcGlfb2JqZWN0IGJ1ZjsKLQl1NjQgdmFsdWU7CisvKiBSZXR1cm4gYnVmZmVyIGZvcm1hdDoKKyAqIFswLTNdICJ2YWx1ZSIgaXMgdmFsaWQgZmxhZworICogWzQtN10gdmFsdWUKKyAqIFs4LSBdIHVua25vd24gc3R1ZmYgb24gbmV3ZXIgbW9ib3MKKyAqLworc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgeworCXUzMiBmbGFnczsKKwl1MzIgdmFsdWU7CisJdTggZGF0YVtdOworfTsKKworLyogSW5wdXQgYnVmZmVyIHVzZWQgZm9yIEdJVE0gYW5kIFNJVE0gbWV0aG9kcyAqLworc3RydWN0IGF0a19hY3BpX2lucHV0X2J1ZiB7CisJdTMyIGlkOworCXUzMiBwYXJhbTE7CisJdTMyIHBhcmFtMjsKIH07CiAKIHN0YXRpYyBpbnQgYXRrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CkBAIC00MzksNTIgKzQ1OSwxNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuaW9uIGFjcGlfb2JqZWN0ICphdGtfZ2dycChzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEsIHUxNiBtdXgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZjsKKwlhY3BpX3N0YXR1cyByZXQ7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOworCXVuaW9uIGFjcGlfb2JqZWN0IGlkOworCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrOworCisJaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWlkLmludGVnZXIudmFsdWUgPSBtdXg7CisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICZpZDsKKworCWJ1Zi5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKKwlyZXQgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkYXRhLT5lbnVtZXJhdGVfaGFuZGxlLCBOVUxMLCAmcGFyYW1zLCAmYnVmKTsKKwlpZiAocmV0ICE9IEFFX09LKSB7CisJCWRldl9lcnIoZGV2LCAiR0dSUFslI3hdIEFDUEkgZXhjZXB0aW9uOiAlc1xuIiwgbXV4LAorCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihyZXQpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCXBhY2sgPSBidWYucG9pbnRlcjsKKwlpZiAocGFjay0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQkvKiBFeGVjdXRpb24gd2FzIHN1Y2Nlc3NmdWwsIGJ1dCB0aGUgaWQgd2FzIG5vdCBmb3VuZCAqLworCQlBQ1BJX0ZSRUUocGFjayk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCX0KKworCWlmIChwYWNrLT5wYWNrYWdlLmNvdW50IDwgMSkgeworCQlkZXZfZXJyKGRldiwgIkdHUlBbJSN4XSBwYWNrYWdlIGlzIHRvbyBzbWFsbFxuIiwgbXV4KTsKKwkJQUNQSV9GUkVFKHBhY2spOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisJcmV0dXJuIHBhY2s7Cit9CisKK3N0YXRpYyB1bmlvbiBhY3BpX29iamVjdCAqYXRrX2dpdG0oc3RydWN0IGF0a19kYXRhICpkYXRhLCB1NjQgaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IGF0a19hY3BpX2lucHV0X2J1ZiBidWY7CisJdW5pb24gYWNwaV9vYmplY3QgdG1wOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgcmV0OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJYnVmLmlkID0gaWQ7CisJYnVmLnBhcmFtMSA9IDA7CisJYnVmLnBhcmFtMiA9IDA7CisKKwl0bXAudHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7CisJdG1wLmJ1ZmZlci5wb2ludGVyID0gKHU4ICopJmJ1ZjsKKwl0bXAuYnVmZmVyLmxlbmd0aCA9IHNpemVvZihidWYpOworCisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICh2b2lkICopJnRtcDsKKworCXJldC5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5yZWFkX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKKwkJCSZyZXQsIEFDUElfVFlQRV9CVUZGRVIpOworCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKKwkJZGV2X3dhcm4oZGV2LCAiR0lUTVslI2xseF0gQUNQSSBleGNlcHRpb246ICVzXG4iLCBpZCwKKwkJCQlhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlvYmogPSByZXQucG9pbnRlcjsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmIChvYmotPmJ1ZmZlci5sZW5ndGggPCA4KSB7CisJCWRldl93YXJuKGRldiwgIlVuZXhwZWN0ZWQgQVNCRiBsZW5ndGg6ICV1XG4iLAorCQkJCW9iai0+YnVmZmVyLmxlbmd0aCk7CisJCUFDUElfRlJFRShvYmopOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisJcmV0dXJuIG9iajsKK30KKworc3RhdGljIHVuaW9uIGFjcGlfb2JqZWN0ICphdGtfc2l0bShzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEsCisJCXN0cnVjdCBhdGtfYWNwaV9pbnB1dF9idWYgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBwYXJhbXM7CisJdW5pb24gYWNwaV9vYmplY3QgdG1wOworCXN0cnVjdCBhY3BpX2J1ZmZlciByZXQ7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwl0bXAudHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7CisJdG1wLmJ1ZmZlci5wb2ludGVyID0gKHU4ICopYnVmOworCXRtcC5idWZmZXIubGVuZ3RoID0gc2l6ZW9mKCpidWYpOworCisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICZ0bXA7CisKKwlyZXQubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+d3JpdGVfaGFuZGxlLCBOVUxMLCAmcGFyYW1zLAorCQkJJnJldCwgQUNQSV9UWVBFX0JVRkZFUik7CisJaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCQlkZXZfd2FybihkZXYsICJTSVRNWyUjeF0gQUNQSSBleGNlcHRpb246ICVzXG4iLCBidWYtPmlkLAorCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCW9iaiA9IHJldC5wb2ludGVyOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKG9iai0+YnVmZmVyLmxlbmd0aCA8IDgpIHsKKwkJZGV2X3dhcm4oZGV2LCAiVW5leHBlY3RlZCBBU0JGIGxlbmd0aDogJXVcbiIsCisJCQkJb2JqLT5idWZmZXIubGVuZ3RoKTsKKwkJQUNQSV9GUkVFKG9iaik7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlyZXR1cm4gb2JqOworfQorCiBzdGF0aWMgaW50IGF0a19yZWFkX3ZhbHVlX25ldyhzdHJ1Y3QgYXRrX3NlbnNvcl9kYXRhICpzZW5zb3IsIHU2NCAqdmFsdWUpCiB7CiAJc3RydWN0IGF0a19kYXRhICpkYXRhID0gc2Vuc29yLT5kYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OwotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgcmV0OwotCXVuaW9uIGFjcGlfb2JqZWN0IGlkOwotCXN0cnVjdCBhdGtfYWNwaV9idWZmZXJfdTY0IHRtcDsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqYnVmOworCWludCBlcnIgPSAwOwogCi0JaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwotCWlkLmludGVnZXIudmFsdWUgPSBzZW5zb3ItPmlkOworCW9iaiA9IGF0a19naXRtKGRhdGEsIHNlbnNvci0+aWQpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKIAotCXBhcmFtcy5jb3VudCA9IDE7Ci0JcGFyYW1zLnBvaW50ZXIgPSAmaWQ7Ci0KLQl0bXAuYnVmLnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwotCXRtcC5idWYuYnVmZmVyLnBvaW50ZXIgPSAodTggKikmdG1wLnZhbHVlOwotCXRtcC5idWYuYnVmZmVyLmxlbmd0aCA9IHNpemVvZih1NjQpOwotCXJldC5sZW5ndGggPSBzaXplb2YodG1wKTsKLQlyZXQucG9pbnRlciA9ICZ0bXA7Ci0KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5yZWFkX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKLQkJCSZyZXQsIEFDUElfVFlQRV9CVUZGRVIpOwotCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKLQkJZGV2X3dhcm4oZGV2LCAiJXM6IEFDUEkgZXhjZXB0aW9uOiAlc1xuIiwgX19mdW5jX18sCi0JCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBSZXR1cm4gYnVmZmVyIGZvcm1hdDoKLQkgKiBbMC0zXSAidmFsdWUiIGlzIHZhbGlkIGZsYWcKLQkgKiBbNC03XSB2YWx1ZQotCSAqLwotCWlmICghKHRtcC52YWx1ZSAmIDB4ZmZmZmZmZmYpKSB7CisJYnVmID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKwlpZiAoYnVmLT5mbGFncyA9PSAwKSB7CiAJCS8qIFRoZSByZWFkaW5nIGlzIG5vdCB2YWxpZCwgcG9zc2libGUgY2F1c2VzOgogCQkgKiAtIHNlbnNvciBmYWlsdXJlCiAJCSAqIC0gZW51bWVyYXRpb24gd2FzIEZVQkFSIChhbmQgd2UgZGlkbid0IG5vdGljZSkKIAkJICovCi0JCWRldl9pbmZvKGRldiwgIkZhaWx1cmU6ICUjbGx4XG4iLCB0bXAudmFsdWUpOwotCQlyZXR1cm4gLUVJTzsKKwkJZGV2X3dhcm4oZGV2LCAiUmVhZCBmYWlsZWQsIHNlbnNvciA9ICUjbGx4XG4iLCBzZW5zb3ItPmlkKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQ7CiAJfQogCi0JKnZhbHVlID0gKHRtcC52YWx1ZSAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgPj4gMzI7Ci0KLQlyZXR1cm4gMDsKKwkqdmFsdWUgPSBidWYtPnZhbHVlOworb3V0OgorCUFDUElfRlJFRShvYmopOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgYXRrX3JlYWRfdmFsdWUoc3RydWN0IGF0a19zZW5zb3JfZGF0YSAqc2Vuc29yLCB1NjQgKnZhbHVlKQpAQCAtNzEzLDQyICs4MjgsMTQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBhdGtfZWNfcHJlc2VudChzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJdW5pb24gYWNwaV9vYmplY3QgKnBhY2s7CisJdW5pb24gYWNwaV9vYmplY3QgKmVjOworCWludCByZXQ7CisJaW50IGk7CisKKwlwYWNrID0gYXRrX2dncnAoZGF0YSwgQVRLX01VWF9NR01UKTsKKwlpZiAoSVNfRVJSKHBhY2spKSB7CisJCWlmIChQVFJfRVJSKHBhY2spID09IC1FTk9FTlQpIHsKKwkJCS8qIFRoZSBNR01UIGNsYXNzIGRvZXMgbm90IGV4aXN0cyAtIHRoYXQncyBvayAqLworCQkJZGV2X2RiZyhkZXYsICJDbGFzcyAlI2xseCBub3QgZm91bmRcbiIsIEFUS19NVVhfTUdNVCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gUFRSX0VSUihwYWNrKTsKKwl9CisKKwkvKiBTZWFyY2ggdGhlIEVDICovCisJZWMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBwYWNrLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKKwkJdW5pb24gYWNwaV9vYmplY3QgKm9iaiA9ICZwYWNrLT5wYWNrYWdlLmVsZW1lbnRzW2ldOworCQl1bmlvbiBhY3BpX29iamVjdCAqaWQ7CisKKwkJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkKKwkJCWNvbnRpbnVlOworCisJCWlkID0gJm9iai0+cGFja2FnZS5lbGVtZW50c1swXTsKKwkJaWYgKGlkLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKQorCQkJY29udGludWU7CisKKwkJaWYgKGlkLT5pbnRlZ2VyLnZhbHVlID09IEFUS19FQ19JRCkgeworCQkJZWMgPSBvYmo7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldCA9IChlYyAhPSBOVUxMKTsKKwlpZiAoIXJldCkKKwkJLyogVGhlIHN5c3RlbSBoYXMgbm8gRUMgKi8KKwkJZGV2X2RiZyhkZXYsICJFQyBub3QgZm91bmRcbiIpOworCisJQUNQSV9GUkVFKHBhY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXRrX2VjX2VuYWJsZWQoc3RydWN0IGF0a19kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgKmJ1ZjsKKwlpbnQgZXJyOworCisJb2JqID0gYXRrX2dpdG0oZGF0YSwgQVRLX0VDX0lEKTsKKwlpZiAoSVNfRVJSKG9iaikpIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcXVlcnkgRUMgc3RhdHVzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKwl9CisJYnVmID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKworCWlmIChidWYtPmZsYWdzID09IDApIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcXVlcnkgRUMgc3RhdHVzXG4iKTsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgeworCQllcnIgPSAoYnVmLT52YWx1ZSAhPSAwKTsKKwkJZGV2X2RiZyhkZXYsICJFQyBpcyAlc2FibGVkXG4iLAorCQkJCWVyciA/ICJlbiIgOiAiZGlzIik7CisJfQorCisJQUNQSV9GUkVFKG9iaik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhdGtfZWNfY3RsKHN0cnVjdCBhdGtfZGF0YSAqZGF0YSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCXN0cnVjdCBhdGtfYWNwaV9pbnB1dF9idWYgc2l0bTsKKwlzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqZWNfcmV0OworCWludCBlcnIgPSAwOworCisJc2l0bS5pZCA9IEFUS19FQ19JRDsKKwlzaXRtLnBhcmFtMSA9IGVuYWJsZTsKKwlzaXRtLnBhcmFtMiA9IDA7CisKKwlvYmogPSBhdGtfc2l0bShkYXRhLCAmc2l0bSk7CisJaWYgKElTX0VSUihvYmopKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvICVzYWJsZSB0aGUgRUNcbiIsCisJCQkJZW5hYmxlID8gImVuIiA6ICJkaXMiKTsKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKwl9CisJZWNfcmV0ID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKwlpZiAoZWNfcmV0LT5mbGFncyA9PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvICVzYWJsZSB0aGUgRUNcbiIsCisJCQkJZW5hYmxlID8gImVuIiA6ICJkaXMiKTsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgeworCQlkZXZfaW5mbyhkZXYsICJFQyAlc2FibGVkXG4iLAorCQkJCWVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisJfQorCisJQUNQSV9GUkVFKG9iaik7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBhdGtfZW51bWVyYXRlX25ld19od21vbihzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZjsKLQlhY3BpX3N0YXR1cyByZXQ7Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOwotCXVuaW9uIGFjcGlfb2JqZWN0IGlkOwogCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrOwogCWludCBlcnI7CiAJaW50IGk7CiAKKwllcnIgPSBhdGtfZWNfcHJlc2VudChkYXRhKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAoZXJyKSB7CisJCWVyciA9IGF0a19lY19lbmFibGVkKGRhdGEpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCS8qIElmIHRoZSBFQyB3YXMgZGlzYWJsZWQgd2Ugd2lsbCBkaXNhYmxlIGl0IGFnYWluIG9uIHVubG9hZCAqLworCQlkYXRhLT5kaXNhYmxlX2VjID0gZXJyOworCisJCWVyciA9IGF0a19lY19jdGwoZGF0YSwgMSk7CisJCWlmIChlcnIpIHsKKwkJCWRhdGEtPmRpc2FibGVfZWMgPSBmYWxzZTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAlkZXZfZGJnKGRldiwgIkVudW1lcmF0aW5nIGh3bW9uIHNlbnNvcnNcbiIpOwogCi0JaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwotCWlkLmludGVnZXIudmFsdWUgPSBBVEtfTVVYX0hXTU9OOwotCXBhcmFtcy5jb3VudCA9IDE7Ci0JcGFyYW1zLnBvaW50ZXIgPSAmaWQ7Ci0KLQlidWYubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7Ci0JcmV0ID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+ZW51bWVyYXRlX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKLQkJCSZidWYsIEFDUElfVFlQRV9QQUNLQUdFKTsKLQlpZiAocmV0ICE9IEFFX09LKSB7Ci0JCWRldl93YXJuKGRldiwgTUVUSE9EX0VOVU1FUkFURSAiOiBBQ1BJIGV4Y2VwdGlvbjogJXNcbiIsCi0JCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHJldCkpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBSZXN1bHQgbXVzdCBiZSBhIHBhY2thZ2UgKi8KLQlwYWNrID0gYnVmLnBvaW50ZXI7Ci0KLQlpZiAocGFjay0+cGFja2FnZS5jb3VudCA8IDEpIHsKLQkJZGV2X2RiZyhkZXYsICIlczogaHdtb24gcGFja2FnZSBpcyB0b28gc21hbGw6ICVkXG4iLCBfX2Z1bmNfXywKLQkJCQlwYWNrLT5wYWNrYWdlLmNvdW50KTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQorCXBhY2sgPSBhdGtfZ2dycChkYXRhLCBBVEtfTVVYX0hXTU9OKTsKKwlpZiAoSVNfRVJSKHBhY2spKQorCQlyZXR1cm4gUFRSX0VSUihwYWNrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWNrLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKIAkJdW5pb24gYWNwaV9vYmplY3QgKm9iaiA9ICZwYWNrLT5wYWNrYWdlLmVsZW1lbnRzW2ldOwpAQCAtNzU4LDggKzk3MSw3IEBACiAKIAllcnIgPSBkYXRhLT52b2x0YWdlX2NvdW50ICsgZGF0YS0+dGVtcGVyYXR1cmVfY291bnQgKyBkYXRhLT5mYW5fY291bnQ7CiAKLW91dDoKLQlBQ1BJX0ZSRUUoYnVmLnBvaW50ZXIpOworCUFDUElfRlJFRShwYWNrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04OTUsNiArMTEwNywxNSBAQAogCX0KIAlkYXRhLT5yZWFkX2hhbmRsZSA9IHJldDsKIAorCS8qIERlLW11bHRpcGxleGVyICh3cml0ZSkgKi8KKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGF0YS0+YXRrX2hhbmRsZSwgTUVUSE9EX1dSSVRFLCAmcmV0KTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKSB7CisJCWRldl9kYmcoZGV2LCAibWV0aG9kICIgTUVUSE9EX1JFQUQgIiBub3QgZm91bmQ6ICVzXG4iLAorCQkJCSBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkYXRhLT53cml0ZV9oYW5kbGUgPSByZXQ7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE1LDYgKzExMzYsNyBAQAogCWRhdGEtPmFjcGlfZGV2ID0gZGV2aWNlOwogCWRhdGEtPmF0a19oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKIAlJTklUX0xJU1RfSEVBRCgmZGF0YS0+c2Vuc29yX2xpc3QpOworCWRhdGEtPmRpc2FibGVfZWMgPSBmYWxzZTsKIAogCWJ1Zi5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKIAlyZXQgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5hdGtfaGFuZGxlLCBCT0FSRF9JRCwgTlVMTCwKQEAgLTk3Myw2ICsxMTk1LDggQEAKIGNsZWFudXA6CiAJYXRrX2ZyZWVfc2Vuc29ycyhkYXRhKTsKIG91dDoKKwlpZiAoZGF0YS0+ZGlzYWJsZV9lYykKKwkJYXRrX2VjX2N0bChkYXRhLCAwKTsKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTg4LDYgKzEyMTIsMTEgQEAKIAlhdGtfZnJlZV9zZW5zb3JzKGRhdGEpOwogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAKKwlpZiAoZGF0YS0+ZGlzYWJsZV9lYykgeworCQlpZiAoYXRrX2VjX2N0bChkYXRhLCAwKSkKKwkJCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiRmFpbGVkIHRvIGRpc2FibGUgRUNcbiIpOworCX0KKwogCWtmcmVlKGRhdGEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCmluZGV4IDJjMmNiMWUuLjI3ZDYyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCkBAIC01NzIsNyArNTcyLDcgQEAKIAogCS8qIFNhbXBsZSByZWdpc3RlciBjb250ZW50cyBldmVyeSAxIHNlYyAqLwogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlICsgSFopIHx8ICFkYXRhLT52YWxpZCkgewotCQlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CisJCWlmIChkYXRhLT50eXBlID09IGRtZTE3MzcpIHsKIAkJCWRhdGEtPnZpZCA9IGRtZTE3MzdfcmVhZChkYXRhLCBETUUxNzM3X1JFR19WSUQpICYKIAkJCQkweDNmOwogCQl9CkBAIC0xNjIxLDkgKzE2MjEsNiBAQAogCSZzZW5zb3JfZGV2X2F0dHJfem9uZTFfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl96b25lMl9hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3pvbmUzX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAotCS8qIE1pc2MgKi8KLQkmZGV2X2F0dHJfdnJtLmF0dHIsCi0JJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtMTYzMSw2ICsxNjI4LDE4IEBACiAJLmF0dHJzID0gZG1lMTczN19taXNjX2F0dHIsCiB9OwogCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdCBob2xkcyBWSUQtcmVsYXRlZCBhdHRyaWJ1dGVzLiBUaGVpciBjcmVhdGlvbgorICAgZGVwZW5kcyBvbiB0aGUgY2hpcCB0eXBlIHdoaWNoIGlzIGRldGVybWluZWQgZHVyaW5nIG1vZHVsZSBsb2FkLiAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRtZTE3MzdfdmlkX2F0dHJbXSA9IHsKKwkmZGV2X2F0dHJfdnJtLmF0dHIsCisJJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZG1lMTczN192aWRfZ3JvdXAgPSB7CisJLmF0dHJzID0gZG1lMTczN192aWRfYXR0ciwKK307CisKIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0cyBob2xkIHRoZSBQV00gYXR0cmlidXRlcywgc29tZSBvZiB3aGljaCBhcmUgb3B0aW9uYWwuCiAgKiBUaGVpciBjcmVhdGlvbiBkZXBlbmRzIG9uIHRoZSBjaGlwIGNvbmZpZ3VyYXRpb24gd2hpY2ggaXMgZGV0ZXJtaW5lZCBkdXJpbmcKICAqIG1vZHVsZSBsb2FkLiAqLwpAQCAtMTkwMiw2ICsxOTExLDkgQEAKIAlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN19taXNjX2dyb3VwKTsKIAl9CisJaWYgKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgeworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfdmlkX2dyb3VwKTsKKwl9CiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfZ3JvdXApOwogCkBAIC0xOTMzLDYgKzE5NDUsMTMgQEAKIAkJZ290byBleGl0X3JlbW92ZTsKIAl9CiAKKwkvKiBDcmVhdGUgVklELXJlbGF0ZWQgc3lzZnMgYXR0cmlidXRlcyAqLworCWlmICgoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSAmJgorCSAgICAoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgICAgJmRtZTE3MzdfdmlkX2dyb3VwKSkpIHsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKIAkvKiBDcmVhdGUgZmFuIHN5c2ZzIGF0dHJpYnV0ZXMgKi8KIAlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRtZTE3MzdfZmFuX2dyb3VwKTsgaXgrKykgewogCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IGl4KSkgewpAQCAtMjEyNyw3ICsyMTQ2LDcgQEAKIAlkYXRhLT5wd21fYWN6WzJdID0gNDsJLyogcHdtMyAtPiB6b25lMyAqLwogCiAJLyogU2V0IFZSTSAqLwotCWlmIChkYXRhLT50eXBlICE9IHNjaDUwMjcpIHsKKwlpZiAoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSB7CiAJCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMgYi9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCmluZGV4IGVhOTU1ZWQuLmRhMWIxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKKysrIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwpAQCAtODE5LDcgKzgxOSw3IEBACiBzdGF0aWMgc3NpemVfdCB3YXRjaGRvZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAlzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewotCXNpemVfdCByZXQ7CisJaW50IHJldDsKIAlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoY291bnQpIHsKQEAgLTkxNSw3ICs5MTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdhdGNoZG9nX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3YXRjaGRvZ19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCiAJLm9wZW4gPSB3YXRjaGRvZ19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jIGIvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCmluZGV4IDY2Nzk4NTQuLmJlNDc1ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYworKysgYi9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKQEAgLTE5NywxMSArMTk3LDEzIEBACiAJQVhJU19ETUlfTUFUQ0goIkhQMjEzMyIsICJIUCAyMTMzIiwgeHlfcm90YXRlZF9sZWZ0KSwKIAlBWElTX0RNSV9NQVRDSCgiSFAyMTQwIiwgIkhQIDIxNDAiLCB4eV9zd2FwX2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NTN4IiwgIkhQIENvbXBhcSA2NTMiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKLQlBWElTX0RNSV9NQVRDSCgiTkM2NzN4IiwgIkhQIENvbXBhcSA2NzMiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2NzMwYiIsICJIUCBDb21wYXEgNjczMGIiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2NzMwcyIsICJIUCBDb21wYXEgNjczMHMiLCB4eV9zd2FwKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NTF4eCIsICJIUCBDb21wYXEgNjUxIiwgeHlfcm90YXRlZF9yaWdodCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjcxMHgiLCAiSFAgQ29tcGFxIDY3MTAiLCB4eV9zd2FwX3l6X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NzE1eCIsICJIUCBDb21wYXEgNjcxNSIsIHlfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJOQzY5M3h4IiwgIkhQIEVsaXRlQm9vayA2OTMiLCB4eV9yb3RhdGVkX3JpZ2h0KSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2OTN4eCIsICJIUCBFbGl0ZUJvb2sgODUzIiwgeHlfc3dhcCksCiAJLyogSW50ZWwtYmFzZWQgSFAgUGF2aWxpb24gZHY1ICovCiAJQVhJU19ETUlfTUFUQ0gyKCJIUERWNV9JIiwKIAkJCVBST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2NSIsCkBAIC0yMTQsNiArMjE2LDcgQEAKIAkJCXlfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJEVjciLCAiSFAgUGF2aWxpb24gZHY3IiwgeF9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIkhQODcxMCIsICJIUCBDb21wYXEgODcxMCIsIHlfaW52ZXJ0ZWQpLAorCUFYSVNfRE1JX01BVENIKCJIRFgxOCIsICJIUCBIRFggMTgiLCB4X2ludmVydGVkKSwKIAl7IE5VTEwsIH0KIC8qIExhcHRvcCBtb2RlbHMgd2l0aG91dCBheGlzIGluZm8gKHlldCk6CiAgKiAiTkM2OTEwIiAiSFAgQ29tcGFxIDY5MTAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2l0ODcuYyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCmluZGV4IGZmZWIyYTEuLmEzNzQ5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCkBAIC0xMDI4LDEyICsxMDI4LDExIEBACiAJCWNoaXBfdHlwZSwgKmFkZHJlc3MsIHNpb19kYXRhLT5yZXZpc2lvbik7CiAKIAkvKiBSZWFkIEdQSU8gY29uZmlnIGFuZCBWSUQgdmFsdWUgZnJvbSBMRE4gNyAoR1BJTykgKi8KLQlpZiAoY2hpcF90eXBlICE9IElUODcwNUZfREVWSUQpIHsKKwlpZiAoc2lvX2RhdGEtPnR5cGUgIT0gaXQ4NykgewogCQlpbnQgcmVnOwogCiAJCXN1cGVyaW9fc2VsZWN0KEdQSU8pOwotCQlpZiAoKGNoaXBfdHlwZSA9PSBpdDg3MTgpIHx8Ci0JCSAgICAoY2hpcF90eXBlID09IGl0ODcyMCkpCisJCWlmIChzaW9fZGF0YS0+dHlwZSA9PSBpdDg3MTggfHwgc2lvX2RhdGEtPnR5cGUgPT0gaXQ4NzIwKQogCQkJc2lvX2RhdGEtPnZpZF92YWx1ZSA9IHN1cGVyaW9faW5iKElUODdfU0lPX1ZJRF9SRUcpOwogCiAJCXJlZyA9IHN1cGVyaW9faW5iKElUODdfU0lPX1BJTlgyX1JFRyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCmluZGV4IGVjZDczOTUuLjgyYjE2ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCkBAIC04Myw3ICs4Myw4IEBACiAJc3RydWN0IGxpczNsdjAyZCAqbGlzMyA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwogCWxpczNsdjAyZF9qb3lzdGlja19kaXNhYmxlKCk7CiAJbGlzM2x2MDJkX3Bvd2Vyb2ZmKGxpczMpOwotCXJldHVybiAwOworCisJcmV0dXJuIGxpczNsdjAyZF9yZW1vdmVfZnMoJmxpczNfZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sdGM0MjE1LmMgYi9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYwppbmRleCA2YzlhMDQxLi4wMGQ5NzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYworKysgYi9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYwpAQCAtMjAsMTEgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGx0YzQyMTUpOwotCiAvKiBIZXJlIGFyZSBuYW1lcyBvZiB0aGUgY2hpcCdzIHJlZ2lzdGVycyAoYS5rLmEuIGNvbW1hbmRzKSAqLwogZW51bSBsdGM0MjE1X2NtZCB7CiAJTFRDNDIxNV9DT05UUk9MCQkJPSAweDAwLCAvKiBydyAqLwpAQCAtMjQ2LDkgKzI0MSwxMyBAQAogc3RhdGljIGludCBsdGM0MjE1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKIAlzdHJ1Y3QgbHRjNDIxNV9kYXRhICpkYXRhOwogCWludCByZXQ7CiAKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0yOTQsNTYgKzI5MywyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGx0YzQyMTVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIGludCBraW5kLAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwotCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChraW5kIDwgMCkgewkJLyogcHJvYmVkIGRldGVjdGlvbiAtIGNoZWNrIHRoZSBjaGlwIHR5cGUgKi8KLQkJczMyIHY7CQkvKiA4IGJpdHMgZnJvbSB0aGUgY2hpcCwgb3IgLUVSUk5PICovCi0KLQkJLyoKLQkJICogUmVnaXN0ZXIgMHgwMSBiaXQgYjcgaXMgcmVzZXJ2ZWQsIGV4cGVjdCAwCi0JCSAqIFJlZ2lzdGVyIDB4MDMgYml0IGI2IGFuZCBiNyBhcmUgcmVzZXJ2ZWQsIGV4cGVjdCAwCi0JCSAqLwotCQl2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTFRDNDIxNV9BTEVSVCk7Ci0JCWlmICh2IDwgMCB8fCAodiAmICgxIDw8IDcpKSAhPSAwKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyMTVfRkFVTFQpOwotCQlpZiAodiA8IDAgfHwgKHYgJiAoKDEgPDwgNikgfCAoMSA8PCA3KSkpICE9IDApCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jc3RybGNweShpbmZvLT50eXBlLCAibHRjNDIxNSIsIEkyQ19OQU1FX1NJWkUpOwotCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJsdGM0MjE1ICVzIGF0IGFkZHJlc3MgMHglMDJ4XG4iLAotCQkJa2luZCA8IDAgPyAicHJvYmVkIiA6ICJmb3JjZWQiLAotCQkJY2xpZW50LT5hZGRyKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbHRjNDIxNV9pZFtdID0gewotCXsgImx0YzQyMTUiLCBsdGM0MjE1IH0sCisJeyAibHRjNDIxNSIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbHRjNDIxNV9pZCk7CiAKIC8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdGM0MjE1X2RyaXZlciA9IHsKLQkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImx0YzQyMTUiLAogCX0sCiAJLnByb2JlCQk9IGx0YzQyMTVfcHJvYmUsCiAJLnJlbW92ZQkJPSBsdGM0MjE1X3JlbW92ZSwKIAkuaWRfdGFibGUJPSBsdGM0MjE1X2lkLAotCS5kZXRlY3QJCT0gbHRjNDIxNV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBsdGM0MjE1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbHRjNDI0NS5jIGIvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKaW5kZXggZTM4OTY0My4uNjVjMjMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKKysrIGIvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKQEAgLTIyLDE1ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogCi0vKiBWYWxpZCBhZGRyZXNzZXMgYXJlIDB4MjAgLSAweDNmCi0gKgotICogRm9yIG5vdywgd2UgZG8gbm90IHByb2JlLCBzaW5jZSBzb21lIG9mIHRoZXNlIGFkZHJlc3NlcwotICogYXJlIGtub3duIHRvIGJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEobHRjNDI0NSk7Ci0KIC8qIEhlcmUgYXJlIG5hbWVzIG9mIHRoZSBjaGlwJ3MgcmVnaXN0ZXJzIChhLmsuYS4gY29tbWFuZHMpICovCiBlbnVtIGx0YzQyNDVfY21kIHsKIAlMVEM0MjQ1X1NUQVRVUwkJCT0gMHgwMCwgLyogcmVhZG9ubHkgKi8KQEAgLTM2OSw5ICszNjAsMTMgQEAKIHN0YXRpYyBpbnQgbHRjNDI0NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CiAJc3RydWN0IGx0YzQyNDVfZGF0YSAqZGF0YTsKIAlpbnQgcmV0OwogCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtNDE4LDEzNiArNDEzLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIENoZWNrIHRoYXQgc29tZSBiaXRzIGluIGEgY29udHJvbCByZWdpc3RlciBhcHBlYXIgYXQgYWxsIHBvc3NpYmxlCi0gKiBsb2NhdGlvbnMgd2l0aG91dCBjaGFuZ2luZyB2YWx1ZQotICoKLSAqIEBjbGllbnQ6IHRoZSBpMmMgY2xpZW50IHRvIHVzZQotICogQHJlZzogdGhlIHJlZ2lzdGVyIHRvIHJlYWQKLSAqIEBiaXRzOiB0aGUgYml0cyB0byBjaGVjayAoMHhmZiBjaGVja3MgYWxsIGJpdHMsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMgY2hlY2tzIG9ubHkgdGhlIGxhc3QgdHdvIGJpdHMpCi0gKgotICogcmV0dXJuIC1FUlJOTyBpZiB0aGUgcmVnaXN0ZXIgcmVhZCBmYWlsZWQKLSAqIHJldHVybiAtRU5PREVWIGlmIHRoZSByZWdpc3RlciB2YWx1ZSBkb2Vzbid0IHN0YXkgY29uc3RhbnQgYXQgYWxsCi0gKiBwb3NzaWJsZSBhZGRyZXNzZXMKLSAqCi0gKiByZXR1cm4gMCBmb3Igc3VjY2VzcwotICovCi1zdGF0aWMgaW50IGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBiaXRzKQotewotCWludCBpOwotCXMzMiB2LCB2b2ZmMSwgdm9mZjI7Ci0KLQkvKiBSZWFkIHJlZ2lzdGVyIGFuZCBjaGVjayBmb3IgZXJyb3IgKi8KLQl2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLQlpZiAodiA8IDApCi0JCXJldHVybiB2OwotCi0JdiAmPSBiaXRzOwotCi0JZm9yIChpID0gMHgwMDsgaSA8IDB4ZmY7IGkgKz0gMHgyMCkgewotCi0JCXZvZmYxID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnICsgaSk7Ci0JCWlmICh2b2ZmMSA8IDApCi0JCQlyZXR1cm4gdm9mZjE7Ci0KLQkJdm9mZjIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcgKyBpICsgMHgwOCk7Ci0JCWlmICh2b2ZmMiA8IDApCi0JCQlyZXR1cm4gdm9mZjI7Ci0KLQkJdm9mZjEgJj0gYml0czsKLQkJdm9mZjIgJj0gYml0czsKLQotCQlpZiAodiAhPSB2b2ZmMSB8fCB2ICE9IHZvZmYyKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbHRjNDI0NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgaW50IGtpbmQsCi0JCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7Ci0KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKGtpbmQgPCAwKSB7CQkvKiBwcm9iZWQgZGV0ZWN0aW9uIC0gY2hlY2sgdGhlIGNoaXAgdHlwZSAqLwotCQlzMzIgdjsJCS8qIDggYml0cyBmcm9tIHRoZSBjaGlwLCBvciAtRVJSTk8gKi8KLQotCQkvKiBDaGlwIHJlZ2lzdGVycyAweDAwLTB4MDcgYXJlIGNvbnRyb2wgcmVnaXN0ZXJzCi0JCSAqIENoaXAgcmVnaXN0ZXJzIDB4MTAtMHgxZiBhcmUgZGF0YSByZWdpc3RlcnMKLQkJICoKLQkJICogQWRkcmVzcyBiaXRzIGI3LWI1IGFyZSBpZ25vcmVkLiBUaGlzIG1ha2VzIHRoZSBjaGlwICJyZXBlYXQiCi0JCSAqIGluIHN0ZXBzIG9mIDB4MjAuIEFueSBjb250cm9sIHJlZ2lzdGVycyBzaG91bGQgYXBwZWFyIHdpdGgKLQkJICogdGhlIHNhbWUgdmFsdWVzIGFjcm9zcyBhbGwgZHVwbGljYXRlZCBhZGRyZXNzZXMuCi0JCSAqCi0JCSAqIFJlZ2lzdGVyIDB4MDIgYml0IGIyIGlzIHJlc2VydmVkLCBleHBlY3QgMAotCQkgKiBSZWdpc3RlciAweDA3IGJpdHMgYjcgdG8gYjQgYXJlIHJlc2VydmVkLCBleHBlY3QgMAotCQkgKgotCQkgKiBSZWdpc3RlcnMgMHgwMSwgMHgwMiBhcmUgY29udHJvbCByZWdpc3RlcnMgYW5kIHNob3VsZCBub3QKLQkJICogY2hhbmdlIG9uIHRoZWlyIG93bi4KLQkJICoKLQkJICogUmVnaXN0ZXIgMHgwNiBiaXRzIGI2IGFuZCBiNyBhcmUgY29udHJvbCBiaXRzLCBhbmQgc2hvdWxkCi0JCSAqIG5vdCBjaGFuZ2Ugb24gdGhlaXIgb3duLgotCQkgKgotCQkgKiBSZWdpc3RlciAweDA3IGJpdHMgYjMgdG8gYjAgYXJlIGNvbnRyb2wgYml0cywgYW5kIHNob3VsZAotCQkgKiBub3QgY2hhbmdlIG9uIHRoZWlyIG93bi4KLQkJICovCi0KLQkJLyogcmVhZCByZWdpc3RlciAweDAyIHJlc2VydmVkIGJpdCwgZXhwZWN0IDAgKi8KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyNDVfQ09OVFJPTCk7Ci0JCWlmICh2IDwgMCB8fCAodiAmIDB4MDQpICE9IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQkvKiByZWFkIHJlZ2lzdGVyIDB4MDcgcmVzZXJ2ZWQgYml0cywgZXhwZWN0IDAgKi8KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyNDVfQURDQURSKTsKLQkJaWYgKHYgPCAwIHx8ICh2ICYgMHhmMCkgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCS8qIGNoZWNrIHRoYXQgdGhlIGFsZXJ0IHJlZ2lzdGVyIGFwcGVhcnMgYXQgYWxsIGxvY2F0aW9ucyAqLwotCQlpZiAobHRjNDI0NV9jaGVja19jb250cm9sX3JlZyhjbGllbnQsIExUQzQyNDVfQUxFUlQsIDB4ZmYpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogY2hlY2sgdGhhdCB0aGUgY29udHJvbCByZWdpc3RlciBhcHBlYXJzIGF0IGFsbCBsb2NhdGlvbnMgKi8KLQkJaWYgKGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoY2xpZW50LCBMVEM0MjQ1X0NPTlRST0wsIDB4ZmYpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogY2hlY2sgdGhhdCByZWdpc3RlciAweDA2IGJpdHMgYjYgYW5kIGI3IHN0YXkgY29uc3RhbnQgKi8KLQkJaWYgKGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoY2xpZW50LCBMVEM0MjQ1X0dQSU8sIDB4YzApKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogY2hlY2sgdGhhdCByZWdpc3RlciAweDA3IGJpdHMgYjMtYjAgc3RheSBjb25zdGFudCAqLwotCQlpZiAobHRjNDI0NV9jaGVja19jb250cm9sX3JlZyhjbGllbnQsIExUQzQyNDVfQURDQURSLCAweDBmKSkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgImx0YzQyNDUiLCBJMkNfTkFNRV9TSVpFKTsKLQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAibHRjNDI0NSAlcyBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKLQkJCWtpbmQgPCAwID8gInByb2JlZCIgOiAiZm9yY2VkIiwKLQkJCWNsaWVudC0+YWRkcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGx0YzQyNDVfaWRbXSA9IHsKLQl7ICJsdGM0MjQ1IiwgbHRjNDI0NSB9LAorCXsgImx0YzQyNDUiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGx0YzQyNDVfaWQpOwogCiAvKiBUaGlzIGlzIHRoZSBkcml2ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkICovCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHRjNDI0NV9kcml2ZXIgPSB7Ci0JLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJsdGM0MjQ1IiwKIAl9LAogCS5wcm9iZQkJPSBsdGM0MjQ1X3Byb2JlLAogCS5yZW1vdmUJCT0gbHRjNDI0NV9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbHRjNDI0NV9pZCwKLQkuZGV0ZWN0CQk9IGx0YzQyNDVfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbHRjNDI0NV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jIGIvZHJpdmVycy9od21vbi9zM2MtaHdtb24uYwppbmRleCAzYTUyNGYyLi43MTgzNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMKQEAgLTMyMywxNCArMzIzLDIxIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGRhdGEtPmluKTsgaSsrKSB7Ci0JCWlmICghcGRhdGEtPmluW2ldKQorCQlzdHJ1Y3QgczNjMjR4eF9hZGNfaHdtb25faW5jZmcgKmNmZyA9IHBkYXRhLT5pbltpXTsKKworCQlpZiAoIWNmZykKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChwZGF0YS0+aW5baV0tPm11bHQgPj0gMHgxMDAwMCkKKwkJaWYgKGNmZy0+bXVsdCA+PSAweDEwMDAwKQogCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAogCQkJCSAiY2hhbm5lbCAlZCBtdWx0aXBsaWVyIHRvbyBsYXJnZVxuIiwKIAkJCQkgaSk7CiAKKwkJaWYgKGNmZy0+ZGl2aWRlciA9PSAwKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgImNoYW5uZWwgJWQgZGl2aWRlciB6ZXJvXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJcmV0ID0gczNjX2h3bW9uX2NyZWF0ZV9hdHRyKCZkZXYtPmRldiwgcGRhdGEtPmluW2ldLAogCQkJCQkgICAgJmh3bW9uLT5hdHRyc1tpXSwgaSk7CiAJCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc2h0MTUuYyBiL2RyaXZlcnMvaHdtb24vc2h0MTUuYwppbmRleCAzMDNjMDI2Li5lYmUzOGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3NodDE1LmMKKysrIGIvZHJpdmVycy9od21vbi9zaHQxNS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC02MjIsNyArNjIzLDEyIEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2h0X2RyaXZlcnNbXSA9IHsKKy8qCisgKiBzaHRfZHJpdmVycyBzaW11bHRhbmVvdXNseSByZWZlcnMgdG8gX19kZXZpbml0IGFuZCBfX2RldmV4aXQgZnVuY3Rpb24KKyAqIHdoaWNoIGNhdXNlcyBzcHVyaW91cyBzZWN0aW9uIG1pc21hdGNoIHdhcm5pbmcuIFNvIHVzZSBfX3JlZmRhdGEgdG8KKyAqIGdldCByaWQgZnJvbSB0aGlzLgorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBfX3JlZmRhdGEgc2h0X2RyaXZlcnNbXSA9IHsKIAl7CiAJCS5kcml2ZXIgPSB7CiAJCQkubmFtZSA9ICJzaHQxMCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDZiZWRkMmYuLmU4ZmU3ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkgICAgQVRJIFNCNjAwCiAJICAgIEFUSSBTQjcwMAogCSAgICBBVEkgU0I4MDAKLQkgICAgQU1EIFNCOTAwCisJICAgIEFNRCBIdWRzb24tMgogCSAgICBTZXJ2ZXJ3b3JrcyBPU0I0CiAJICAgIFNlcnZlcndvcmtzIENTQjUKIAkgICAgU2VydmVyd29ya3MgQ1NCNgpAQCAtNDc3LDggKzQ3Nyw4IEBACiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtcG54LgogCiBjb25maWcgSTJDX1BYQQotCXRyaXN0YXRlICJJbnRlbCBQWEEyWFggSTJDIGFkYXB0ZXIgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQVJDSF9QWEEKKwl0cmlzdGF0ZSAiSW50ZWwgUFhBMlhYIEkyQyBhZGFwdGVyIgorCWRlcGVuZHMgb24gQVJDSF9QWEEgfHwgQVJDSF9NTVAKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBkZXZpY2VzIGluIHRoZSBQWEEgSTJDIGJ1cywgc2F5IHllcyB0byB0aGlzIG9wdGlvbi4KIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCmluZGV4IGY3ZDZmZTkuLjhmMGI5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJZXJyb3IgPSBhY3BpX2NoZWNrX3JlZ2lvbihhbWQ3NTZfaW9wb3J0LCBTTUJfSU9TSVpFLAogCQkJCSAgYW1kNzU2X2RyaXZlci5uYW1lKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGFtZDc1Nl9pb3BvcnQsIFNNQl9JT1NJWkUsIGFtZDc1Nl9kcml2ZXIubmFtZSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiU01CIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKaW5kZXggYTdjNTk5MC4uNWI0YWQ4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKQEAgLTM3Niw4ICszNzYsMTAgQEAKIAlzbWJ1cy0+c2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAwKTsKIAogCWVycm9yID0gYWNwaV9jaGVja19yZXNvdXJjZV9jb25mbGljdCgmZGV2LT5yZXNvdXJjZVswXSk7Ci0JaWYgKGVycm9yKQorCWlmIChlcnJvcikgeworCQllcnJvciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X2tmcmVlOworCX0KIAogCWlmICghcmVxdWVzdF9yZWdpb24oc21idXMtPmJhc2UsIHNtYnVzLT5zaXplLCBhbWQ4MTExX2RyaXZlci5uYW1lKSkgewogCQllcnJvciA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggOWQyYzVhZC4uNTVlZGNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTczMiw4ICs3MzIsMTAgQEAKIAl9CiAKIAllcnIgPSBhY3BpX2NoZWNrX3Jlc291cmNlX2NvbmZsaWN0KCZkZXYtPnJlc291cmNlW1NNQkJBUl0pOwotCWlmIChlcnIpCisJaWYgKGVycikgeworCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CisJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9uKGRldiwgU01CQkFSLCBpODAxX2RyaXZlci5uYW1lKTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwppbmRleCA0YWZiYTNlLi5lMzY1NGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKQEAgLTEyMCwxOSArMTIwLDI2IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJcXVldWU7CiAJdW5zaWduZWQgbG9uZwkJaTJjc3I7CiAJdW5zaWduZWQgaW50IAkJZGlzYWJsZV9kZWxheTsKKwlpbnQJCQlzdG9wcGVkOworCXVuc2lnbmVkIGludAkJaWZkcjsgLyogSU1YX0kyQ19JRkRSICovCiB9OwogCiAvKiogRnVuY3Rpb25zIGZvciBJTVggSTJDIGFkYXB0ZXIgZHJpdmVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBpMmNfaW14X2J1c19idXN5KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKK3N0YXRpYyBpbnQgaTJjX2lteF9idXNfYnVzeShzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgsIGludCBmb3JfYnVzeSkKIHsKIAl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllcyA9IGppZmZpZXM7CisJdW5zaWduZWQgaW50IHRlbXA7CiAKIAlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz5cbiIsIF9fZnVuY19fKTsKIAotCS8qIHdhaXQgZm9yIGJ1cyBub3QgYnVzeSAqLwotCXdoaWxlIChyZWFkYihpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKSAmIEkyU1JfSUJCKSB7CisJd2hpbGUgKDEpIHsKKwkJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyU1IpOworCQlpZiAoZm9yX2J1c3kgJiYgKHRlbXAgJiBJMlNSX0lCQikpCisJCQlicmVhazsKKwkJaWYgKCFmb3JfYnVzeSAmJiAhKHRlbXAgJiBJMlNSX0lCQikpCisJCQlicmVhazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBJMkMgSW50ZXJydXB0ZWRcbiIsIF9fZnVuY19fKTsKQEAgLTE3OSw0MSArMTg2LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGkyY19pbXhfc3RhcnQoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQorc3RhdGljIGludCBpMmNfaW14X3N0YXJ0KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKIHsKIAl1bnNpZ25lZCBpbnQgdGVtcCA9IDA7CisJaW50IHJlc3VsdDsKIAogCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwogCisJY2xrX2VuYWJsZShpMmNfaW14LT5jbGspOworCXdyaXRlYihpMmNfaW14LT5pZmRyLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JRkRSKTsKIAkvKiBFbmFibGUgSTJDIGNvbnRyb2xsZXIgKi8KKwl3cml0ZWIoMCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJTUik7CiAJd3JpdGViKEkyQ1JfSUVOLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKworCS8qIFdhaXQgY29udHJvbGxlciB0byBiZSBzdGFibGUgKi8KKwl1ZGVsYXkoNTApOworCiAJLyogU3RhcnQgSTJDIHRyYW5zYWN0aW9uICovCiAJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwogCXRlbXAgfD0gSTJDUl9NU1RBOwogCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwlyZXN1bHQgPSBpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDEpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisJaTJjX2lteC0+c3RvcHBlZCA9IDA7CisKIAl0ZW1wIHw9IEkyQ1JfSUlFTiB8IEkyQ1JfTVRYIHwgSTJDUl9UWEFLOwogCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBpMmNfaW14X3N0b3Aoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQogewogCXVuc2lnbmVkIGludCB0ZW1wID0gMDsKIAotCS8qIFN0b3AgSTJDIHRyYW5zYWN0aW9uICovCi0JZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+XG4iLCBfX2Z1bmNfXyk7Ci0JdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCXRlbXAgJj0gfkkyQ1JfTVNUQTsKLQl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7Ci0JLyogc2V0dXAgY2hpcCByZWdpc3RlcnMgdG8gZGVmYXVsdHMgKi8KLQl3cml0ZWIoSTJDUl9JRU4sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCXdyaXRlYigwLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKTsKLQkvKgotCSAqIFRoaXMgZGVsYXkgY2F1c2VkIGJ5IGFuIGkuTVhMIGhhcmR3YXJlIGJ1Zy4KLQkgKiBJZiBubyAob3IgdG9vIHNob3J0KSBkZWxheSwgbm8gIlNUT1AiIGJpdCB3aWxsIGJlIGdlbmVyYXRlZC4KLQkgKi8KLQl1ZGVsYXkoaTJjX2lteC0+ZGlzYWJsZV9kZWxheSk7CisJaWYgKCFpMmNfaW14LT5zdG9wcGVkKSB7CisJCS8qIFN0b3AgSTJDIHRyYW5zYWN0aW9uICovCisJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOworCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCXRlbXAgJj0gfihJMkNSX01TVEEgfCBJMkNSX01UWCk7CisJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJaTJjX2lteC0+c3RvcHBlZCA9IDE7CisJfQorCWlmIChjcHVfaXNfbXgxKCkpIHsKKwkJLyoKKwkJICogVGhpcyBkZWxheSBjYXVzZWQgYnkgYW4gaS5NWEwgaGFyZHdhcmUgYnVnLgorCQkgKiBJZiBubyAob3IgdG9vIHNob3J0KSBkZWxheSwgbm8gIlNUT1AiIGJpdCB3aWxsIGJlIGdlbmVyYXRlZC4KKwkJICovCisJCXVkZWxheShpMmNfaW14LT5kaXNhYmxlX2RlbGF5KTsKKwl9CisKKwlpZiAoIWkyY19pbXgtPnN0b3BwZWQpCisJCWkyY19pbXhfYnVzX2J1c3koaTJjX2lteCwgMCk7CisKIAkvKiBEaXNhYmxlIEkyQyBjb250cm9sbGVyICovCiAJd3JpdGViKDAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCWNsa19kaXNhYmxlKGkyY19pbXgtPmNsayk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpMmNfaW14X3NldF9jbGsoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LApAQCAtMjMzLDggKzI2MSw4IEBACiAJZWxzZQogCQlmb3IgKGkgPSAwOyBpMmNfY2xrX2RpdltpXVswXSA8IGRpdjsgaSsrKTsKIAotCS8qIFdyaXRlIGRpdmlkZXIgdmFsdWUgdG8gcmVnaXN0ZXIgKi8KLQl3cml0ZWIoaTJjX2Nsa19kaXZbaV1bMV0sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0lGRFIpOworCS8qIFN0b3JlIGRpdmlkZXIgdmFsdWUgKi8KKwlpMmNfaW14LT5pZmRyID0gaTJjX2Nsa19kaXZbaV1bMV07CiAKIAkvKgogCSAqIFRoZXJlIGR1bW15IGRlbGF5IGlzIGNhbGN1bGF0ZWQuCkBAIC0zNDEsMTEgKzM2OSwxNSBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJaWYgKGkgPT0gKG1zZ3MtPmxlbiAtIDEpKSB7CisJCQkvKiBJdCBtdXN0IGdlbmVyYXRlIFNUT1AgYmVmb3JlIHJlYWQgSTJEUiB0byBwcmV2ZW50CisJCQkgICBjb250cm9sbGVyIGZyb20gZ2VuZXJhdGluZyBhbm90aGVyIGNsb2NrIGN5Y2xlICovCiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBjbGVhciBNU1RBXG4iLCBfX2Z1bmNfXyk7CiAJCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7Ci0JCQl0ZW1wICY9IH5JMkNSX01TVEE7CisJCQl0ZW1wICY9IH4oSTJDUl9NU1RBIHwgSTJDUl9NVFgpOwogCQkJd3JpdGViKHRlbXAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCQkJaTJjX2lteF9idXNfYnVzeShpMmNfaW14LCAwKTsKKwkJCWkyY19pbXgtPnN0b3BwZWQgPSAxOwogCQl9IGVsc2UgaWYgKGkgPT0gKG1zZ3MtPmxlbiAtIDIpKSB7CiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBzZXQgVFhBS1xuIiwgX19mdW5jX18pOwpAQCAtMzcwLDE0ICs0MDIsMTEgQEAKIAogCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwogCi0JLyogQ2hlY2sgaWYgaTJjIGJ1cyBpcyBub3QgYnVzeSAqLwotCXJlc3VsdCA9IGkyY19pbXhfYnVzX2J1c3koaTJjX2lteCk7CisJLyogU3RhcnQgSTJDIHRyYW5zZmVyICovCisJcmVzdWx0ID0gaTJjX2lteF9zdGFydChpMmNfaW14KTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWwwOwogCi0JLyogU3RhcnQgSTJDIHRyYW5zZmVyICovCi0JaTJjX2lteF9zdGFydChpMmNfaW14KTsKLQogCS8qIHJlYWQvd3JpdGUgZGF0YSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQlpZiAoaSkgewpAQCAtMzg2LDYgKzQxNSw5IEBACiAJCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CiAJCQl0ZW1wIHw9IEkyQ1JfUlNUQTsKIAkJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJCXJlc3VsdCA9ICBpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDEpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlnb3RvIGZhaWwwOwogCQl9CiAJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LAogCQkJIjwlcz4gdHJhbnNmZXIgbWVzc2FnZTogJWRcbiIsIF9fZnVuY19fLCBpKTsKQEAgLTUwMCw3ICs1MzIsNiBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgSTJDIGNsb2NrXG4iKTsKIAkJZ290byBmYWlsMzsKIAl9Ci0JY2xrX2VuYWJsZShpMmNfaW14LT5jbGspOwogCiAJLyogUmVxdWVzdCBJUlEgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShpMmNfaW14LT5pcnEsIGkyY19pbXhfaXNyLCAwLCBwZGV2LT5uYW1lLCBpMmNfaW14KTsKQEAgLTU0OSw3ICs1ODAsNiBAQAogZmFpbDU6CiAJZnJlZV9pcnEoaTJjX2lteC0+aXJxLCBpMmNfaW14KTsKIGZhaWw0OgotCWNsa19kaXNhYmxlKGkyY19pbXgtPmNsayk7CiAJY2xrX3B1dChpMmNfaW14LT5jbGspOwogZmFpbDM6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGkyY19pbXgtPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CkBAIC01ODYsOCArNjE2LDYgQEAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmV4aXQpCiAJCXBkYXRhLT5leGl0KCZwZGV2LT5kZXYpOwogCi0JLyogRGlzYWJsZSBJMkMgY2xvY2sgKi8KLQljbGtfZGlzYWJsZShpMmNfaW14LT5jbGspOwogCWNsa19wdXQoaTJjX2lteC0+Y2xrKTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihpMmNfaW14LT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGkyY19pbXgtPnJlcykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwppbmRleCA5ZjZiOGUwLi5kYmE2ZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoYWNwaV9jaGVja19yZWdpb24oc2NoX3NtYmEsIFNNQklPU0laRSwgc2NoX2RyaXZlci5uYW1lKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzY2hfc21iYSwgU01CSU9TSVpFLCBzY2hfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiU01CdXMgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLAogCQkJc2NoX3NtYmEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggZDMyNWU4Ni4uZjYyNzAwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0zNjUsOSArMzY1LDYgQEAKIAl1bnNpZ25lZCB0aW1lb3V0ID0gaTJjLT5hZGFwLnRpbWVvdXQ7CiAJdTMyIGZsYWdzID0gcmVzdGFydCA/IENDUl9SU1RBIDogMDsKIAotCS8qIFN0YXJ0IHdpdGggTUVOICovCi0JaWYgKCFyZXN0YXJ0KQotCQl3cml0ZWNjcihpMmMsIENDUl9NRU4pOwogCS8qIFN0YXJ0IGFzIG1hc3RlciAqLwogCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfTVRYIHwgZmxhZ3MpOwogCS8qIFdyaXRlIHRhcmdldCBieXRlICovCkBAIC0zOTYsOSArMzkzLDYgQEAKIAlpbnQgaSwgcmVzdWx0OwogCXUzMiBmbGFncyA9IHJlc3RhcnQgPyBDQ1JfUlNUQSA6IDA7CiAKLQkvKiBTdGFydCB3aXRoIE1FTiAqLwotCWlmICghcmVzdGFydCkKLQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUVOKTsKIAkvKiBTd2l0Y2ggdG8gcmVhZCAtIHJlc3RhcnQgKi8KIAl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9NU1RBIHwgQ0NSX01UWCB8IGZsYWdzKTsKIAkvKiBXcml0ZSB0YXJnZXQgYWRkcmVzcyBieXRlIC0gdGhpcyB0aW1lIHdpdGggdGhlIHJlYWQgZmxhZyBzZXQgKi8KQEAgLTQyNSw5ICs0MTksOSBAQAogCQkvKiBHZW5lcmF0ZSB0eGFjayBvbiBuZXh0IHRvIGxhc3QgYnl0ZSAqLwogCQlpZiAoaSA9PSBsZW5ndGggLSAyKQogCQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUlFTiB8IENDUl9NRU4gfCBDQ1JfTVNUQSB8IENDUl9UWEFLKTsKLQkJLyogR2VuZXJhdGUgc3RvcCBvbiBsYXN0IGJ5dGUgKi8KKwkJLyogRG8gbm90IGdlbmVyYXRlIHN0b3Agb24gbGFzdCBieXRlICovCiAJCWlmIChpID09IGxlbmd0aCAtIDEpCi0JCQl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9UWEFLKTsKKwkJCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfTVRYKTsKIAkJZGF0YVtpXSA9IHJlYWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfRFIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCmluZGV4IGE3ODJjN2EuLjFlMjQ1ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKQEAgLTIyLDcgKzIyLDcgQEAKIAlJbnRlbCBQSUlYNCwgNDQwTVgKIAlTZXJ2ZXJ3b3JrcyBPU0I0LCBDU0I1LCBDU0I2LCBIVC0xMDAwLCBIVC0xMTAwCiAJQVRJIElYUDIwMCwgSVhQMzAwLCBJWFA0MDAsIFNCNjAwLCBTQjcwMCwgU0I4MDAKLQlBTUQgU0I5MDAKKwlBTUQgSHVkc29uLTIKIAlTTVNDIFZpY3Rvcnk2NgogCiAgICBOb3RlOiB3ZSBhc3N1bWUgdGhlcmUgY2FuIG9ubHkgYmUgb25lIGRldmljZSwgd2l0aCBvbmUgU01CdXMgaW50ZXJmYWNlLgpAQCAtMTY5LDcgKzE2OSw3IEBACiAJfQogCiAJaWYgKGFjcGlfY2hlY2tfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSwgcGlpeDRfZHJpdmVyLm5hbWUpKQotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxdWVzdF9yZWdpb24ocGlpeDRfc21iYSwgU01CSU9TSVpFLCBwaWl4NF9kcml2ZXIubmFtZSkpIHsKIAkJZGV2X2VycigmUElJWDRfZGV2LT5kZXYsICJTTUJ1cyByZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCkBAIC0yMzMsOSArMjMzLDkgQEAKIAl1bnNpZ25lZCBzaG9ydCBzbWJhX2lkeCA9IDB4Y2Q2OwogCXU4IHNtYmFfZW5fbG8sIHNtYmFfZW5faGksIGkyY2NmZywgaTJjY2ZnX29mZnNldCA9IDB4MTAsIHNtYl9lbiA9IDB4MmM7CiAKLQkvKiBTQjgwMCBTTUJ1cyBkb2VzIG5vdCBzdXBwb3J0IGZvcmNpbmcgYWRkcmVzcyAqLworCS8qIFNCODAwIGFuZCBsYXRlciBTTUJ1cyBkb2VzIG5vdCBzdXBwb3J0IGZvcmNpbmcgYWRkcmVzcyAqLwogCWlmIChmb3JjZSB8fCBmb3JjZV9hZGRyKSB7Ci0JCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU0I4MDAgU01CdXMgZG9lcyBub3Qgc3VwcG9ydCAiCisJCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU01CdXMgZG9lcyBub3Qgc3VwcG9ydCAiCiAJCQkiZm9yY2luZyBhZGRyZXNzIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI2MCw3ICsyNjAsNyBAQAogCiAJcGlpeDRfc21iYSA9ICgoc21iYV9lbl9oaSA8PCA4KSB8IHNtYmFfZW5fbG8pICYgMHhmZmUwOwogCWlmIChhY3BpX2NoZWNrX3JlZ2lvbihwaWl4NF9zbWJhLCBTTUJJT1NJWkUsIHBpaXg0X2RyaXZlci5uYW1lKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSwgcGlpeDRfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU01CdXMgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLApAQCAtNDgwLDcgKzQ4MCw3IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFAzMDBfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9TQlgwMF9TTUJVUykgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NNQlVTKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKIAkJICAgICBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjQpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNjbWkuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCmluZGV4IDI3NmEwNDYuLmI0YTU1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCkBAIC0zNjksOSArMzY5LDggQEAKIAkJZ290byBlcnI7CiAKIAlzbnByaW50ZihzbWJ1c19jbWktPmFkYXB0ZXIubmFtZSwgc2l6ZW9mKHNtYnVzX2NtaS0+YWRhcHRlci5uYW1lKSwKLQkJIlNNQnVzIENNSSBhZGFwdGVyICVzICglcykiLAotCQlhY3BpX2RldmljZV9uYW1lKGRldmljZSksCi0JCWFjcGlfZGV2aWNlX3VpZChkZXZpY2UpKTsKKwkJIlNNQnVzIENNSSBhZGFwdGVyICVzIiwKKwkJYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpKTsKIAlzbWJ1c19jbWktPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKIAlzbWJ1c19jbWktPmFkYXB0ZXIuYWxnbyA9ICZhY3BpX3NtYnVzX2NtaV9hbGdvcml0aG07CiAJc21idXNfY21pLT5hZGFwdGVyLmFsZ29fZGF0YSA9IHNtYnVzX2NtaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCmluZGV4IDgyOTU4ODViLi4xNjQ5OTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKQEAgLTI4MCw3ICsyODAsNyBAQAogCiAJcmV0dmFsID0gYWNwaV9jaGVja19yZXNvdXJjZV9jb25mbGljdCgmZGV2LT5yZXNvdXJjZVtTSVM5NnhfQkFSXSk7CiAJaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBFdmVyeXRoaW5nIGlzIGhhcHB5LCBsZXQncyBncmFiIHRoZSBtZW1vcnkgYW5kIHNldCB0aGluZ3MgdXAuICovCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzaXM5Nnhfc21idXNfYmFzZSwgU01CX0lPU0laRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCmluZGV4IDU0ZDgxMGEuLmU0YjE1NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYwpAQCAtMzY1LDcgKzM2NSw3IEBACiBmb3VuZDoKIAllcnJvciA9IGFjcGlfY2hlY2tfcmVnaW9uKHZ0NTk2X3NtYmEsIDgsIHZ0NTk2X2RyaXZlci5uYW1lKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHZ0NTk2X3NtYmEsIDgsIHZ0NTk2X2RyaXZlci5uYW1lKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTTUJ1cyByZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCmluZGV4IDYzOTZjM2EuLjgzNzMyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERSksIDAgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSksIDEgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERSksIDAgfSwKLQl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfSURFKSwgMCB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX0lERSksIDAgfSwKIAl7IDAsIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aWl4cF9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jIGIvZHJpdmVycy9pZGUvY21kNjR4LmMKaW5kZXggNjgwZTU5Ny4uY2EwYzQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY21kNjR4LmMKKysrIGIvZHJpdmVycy9pZGUvY21kNjR4LmMKQEAgLTM3OSw3ICszNzksOCBAQAogCQkuZW5hYmxlYml0cwk9IHt7MHgwMCwweDAwLDB4MDB9LCB7MHg1MSwweDA4LDB4MDh9fSwKIAkJLnBvcnRfb3BzCT0gJmNtZDY0eF9wb3J0X29wcywKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQ0xFQVJfU0lNUExFWCB8Ci0JCQkJICBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCisJCQkJICBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0ggfAorCQkJCSAgSURFX0hGTEFHX1NFUklBTElaRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzUsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IDB4MDAsIC8qIG5vIHVkbWEgKi8KQEAgLTM4OSw3ICszOTAsOCBAQAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2NtZDY0eCwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NTEsMHgwNCwweDA0fSwgezB4NTEsMHgwOCwweDA4fX0sCiAJCS5wb3J0X29wcwk9ICZjbWQ2NDhfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX1BSRUZFVENILAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCB8CisJCQkJICBJREVfSEZMQUdfU0VSSUFMSVpFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNSwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCA2M2M1M2Q2Li40ZDc2YmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMTA0NiwxNSArMTA0Niw2IEBACiAJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+aW5pdF9kZXYpCiAJCQlwb3J0X29wcy0+aW5pdF9kZXYoZHJpdmUpOwogCX0KLQotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQkvKgotCQkgKiBkZWZhdWx0IHRvIFBJTyBNb2RlIDAgYmVmb3JlIHdlIGZpZ3VyZSBvdXQKLQkJICogdGhlIG1vc3Qgc3VpdGVkIG1vZGUgZm9yIHRoZSBhdHRhY2hlZCBkZXZpY2UKLQkJICovCi0JCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+c2V0X3Bpb19tb2RlKQotCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgMCk7Ci0JfQogfQogCiBzdGF0aWMgdm9pZCBpZGVfaW5pdF9wb3J0KGlkZV9od2lmX3QgKmh3aWYsIHVuc2lnbmVkIGludCBwb3J0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKaW5kZXggMjhkMDlhNS4uMDE3YzA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCkBAIC0yNzMsMTQgKzI3Myw4IEBACiAKIHN0YXRpYyB2b2lkIHByb2NfaWRlX3NldHRpbmdzX3dhcm4odm9pZCkKIHsKLQlzdGF0aWMgaW50IHdhcm5lZDsKLQotCWlmICh3YXJuZWQpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IC9wcm9jL2lkZS9oZD8vc2V0dGluZ3MgaW50ZXJmYWNlIGlzICIKKwlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgIldhcm5pbmc6IC9wcm9jL2lkZS9oZD8vc2V0dGluZ3MgaW50ZXJmYWNlIGlzICIKIAkJCSAgICAib2Jzb2xldGUsIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbiFcbiIpOwotCXdhcm5lZCA9IDE7CiB9CiAKIHN0YXRpYyBpbnQgaWRlX3NldHRpbmdzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMgYi9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKaW5kZXggYWZjYTIyYi4uM2I4OGViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2lzNTUxMy5jCisrKyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwCUFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIJCUxpb25lbCBCb3V0b24gPExpb25lbC5Cb3V0b25AaW5ldDYuZnI+LCBNYWludGFpbmVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMJCVZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcJCUJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5CUJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKICAqCiAgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqCkBAIC0yODEsMTEgKzI4MSwxMyBAQAogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDRiLCAmcmVnNGJoKTsKIAotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCi0JCXJ3X3ByZWZldGNoID0gMHgxMSA8PCBkcml2ZS0+ZG47CisJcndfcHJlZmV0Y2ggPSByZWc0YmggJiB+KDB4MTEgPDwgZHJpdmUtPmRuKTsKIAotCWlmICgocmVnNGJoICYgKDB4MTEgPDwgZHJpdmUtPmRuKSkgIT0gcndfcHJlZmV0Y2gpCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGIsIHJlZzRiaHxyd19wcmVmZXRjaCk7CisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKKwkJcndfcHJlZmV0Y2ggfD0gMHgxMSA8PCBkcml2ZS0+ZG47CisKKwlpZiAocmVnNGJoICE9IHJ3X3ByZWZldGNoKQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDRiLCByd19wcmVmZXRjaCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNpc19zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2RtYS5jIGIvZHJpdmVycy9pZWVlMTM5NC9kbWEuYwppbmRleCAxYWJhOGMxLi44ZTdlMzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2RtYS5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRtYV9yZWdpb25fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkbWFfcmVnaW9uX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBkbWFfcmVnaW9uX3BhZ2VmYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKaW5kZXggMGJjM2Q3OC4uOGFhNTZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKaW5kZXggZDI4N2JhNy4uOTQ5MDY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlODAyMTU0L2Zha2VoYXJkLmMgYi9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYwppbmRleCA5NmEyOTU5Li43YzU0NGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYworKysgYi9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYwpAQCAtMjYwLDE1ICsyNjAsMTIgQEAKIHN0YXRpYyBuZXRkZXZfdHhfdCBpZWVlODAyMTU0X2Zha2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXNrYi0+aWlmID0gZGV2LT5pZmluZGV4OwotCXNrYi0+ZGV2ID0gZGV2OwogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQogCS8qIEZJWE1FOiBkbyBoYXJkd2FyZSB3b3JrIGhlcmUgLi4uICovCiAKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCmluZGV4IDViZTFiZDQuLmJkMDc4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogCiAJCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIGRldikKIAkJCWlmIChpcHY2X2Noa19hZGRyKCZpbml0X25ldCwKLQkJCQkJICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHIpLT5zaW42X2FkZHIsCisJCQkJCSAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBkc3RfaW4pLT5zaW42X2FkZHIsCiAJCQkJCSAgZGV2LCAxKSkKIAkJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCmluZGV4IDU1ZDA5M2EuLjBmODk5MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgpAQCAtMzYyLDcgKzM2Myw5IEBACiAJCSAqIEluIGVpdGhlciBjYXNlLCBtdXN0IHRlbGwgdGhlIHByb3ZpZGVyIHRvIHJlamVjdC4KIAkJICovCiAJCWNtX2lkX3ByaXYtPnN0YXRlID0gSVdfQ01fU1RBVEVfREVTVFJPWUlORzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOwogCQljbV9pZC0+ZGV2aWNlLT5pd2NtLT5yZWplY3QoY21faWQsIE5VTEwsIDApOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIElXX0NNX1NUQVRFX0NPTk5fU0VOVDoKIAljYXNlIElXX0NNX1NUQVRFX0RFU1RST1lJTkc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwppbmRleCA1N2EzYzZmLi40ZTBmMjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKQEAgLTM3LDcgKzM3LDggQEAKIGVudW0gcm1wcF9zdGF0ZSB7CiAJUk1QUF9TVEFURV9BQ1RJVkUsCiAJUk1QUF9TVEFURV9USU1FT1VULAotCVJNUFBfU1RBVEVfQ09NUExFVEUKKwlSTVBQX1NUQVRFX0NPTVBMRVRFLAorCVJNUFBfU1RBVEVfQ0FOQ0VMSU5HCiB9OwogCiBzdHJ1Y3QgbWFkX3JtcHBfcmVjdiB7CkBAIC04NywxOCArODgsMjIgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZ2VudC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocm1wcF9yZWN2LCAmYWdlbnQtPnJtcHBfbGlzdCwgbGlzdCkgeworCQlpZiAocm1wcF9yZWN2LT5zdGF0ZSAhPSBSTVBQX1NUQVRFX0NPTVBMRVRFKQorCQkJaWJfZnJlZV9yZWN2X21hZChybXBwX3JlY3YtPnJtcHBfd2MpOworCQlybXBwX3JlY3YtPnN0YXRlID0gUk1QUF9TVEFURV9DQU5DRUxJTkc7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFnZW50LT5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtcHBfcmVjdiwgJmFnZW50LT5ybXBwX2xpc3QsIGxpc3QpIHsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcm1wcF9yZWN2LT50aW1lb3V0X3dvcmspOwogCQljYW5jZWxfZGVsYXllZF93b3JrKCZybXBwX3JlY3YtPmNsZWFudXBfd29yayk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFnZW50LT5sb2NrLCBmbGFncyk7CiAKIAlmbHVzaF93b3JrcXVldWUoYWdlbnQtPnFwX2luZm8tPnBvcnRfcHJpdi0+d3EpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtcHBfcmVjdiwgdGVtcF9ybXBwX3JlY3YsCiAJCQkJICZhZ2VudC0+cm1wcF9saXN0LCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZybXBwX3JlY3YtPmxpc3QpOwotCQlpZiAocm1wcF9yZWN2LT5zdGF0ZSAhPSBSTVBQX1NUQVRFX0NPTVBMRVRFKQotCQkJaWJfZnJlZV9yZWN2X21hZChybXBwX3JlY3YtPnJtcHBfd2MpOwogCQlkZXN0cm95X3JtcHBfcmVjdihybXBwX3JlY3YpOwogCX0KIH0KQEAgLTI2MCw2ICsyNjUsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJtcHBfcmVjdi0+YWdlbnQtPmxvY2ssIGZsYWdzKTsKKwlpZiAocm1wcF9yZWN2LT5zdGF0ZSA9PSBSTVBQX1NUQVRFX0NBTkNFTElORykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybXBwX3JlY3YtPmFnZW50LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CiAJbGlzdF9kZWwoJnJtcHBfcmVjdi0+bGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm1wcF9yZWN2LT5hZ2VudC0+bG9jaywgZmxhZ3MpOwogCWRlc3Ryb3lfcm1wcF9yZWN2KHJtcHBfcmVjdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCmluZGV4IDUxYmQ5NjYuLmY1MDRjOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCmluZGV4IDQzNDZhMjQuLmJiOTZkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKaW5kZXggOGM0NmYyMi4uN2RlMDI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwppbmRleCBkM2ZmZjllLi5hZWMwZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCmluZGV4IDY4OTU1MjMuLmVkNzE3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KQEAgLTExOTksMTEgKzEyMDAsMTQgQEAKIAkJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9ET1dOOwogCWVsc2UgewogCQlpbmV0ZGV2ID0gaW5fZGV2X2dldChuZXRkZXYpOwotCQlpZiAoaW5ldGRldi0+aWZhX2xpc3QpCi0JCQlwcm9wcy0+c3RhdGUgPSBJQl9QT1JUX0FDVElWRTsKLQkJZWxzZQorCQlpZiAoaW5ldGRldikgeworCQkJaWYgKGluZXRkZXYtPmlmYV9saXN0KQorCQkJCXByb3BzLT5zdGF0ZSA9IElCX1BPUlRfQUNUSVZFOworCQkJZWxzZQorCQkJCXByb3BzLT5zdGF0ZSA9IElCX1BPUlRfSU5JVDsKKwkJCWluX2Rldl9wdXQoaW5ldGRldik7CisJCX0gZWxzZQogCQkJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9JTklUOwotCQlpbl9kZXZfcHV0KGluZXRkZXYpOwogCX0KIAogCXByb3BzLT5wb3J0X2NhcF9mbGFncyA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwppbmRleCA2ZTg2NTM0Li4xY2VjZjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKQEAgLTI5LDYgKzI5LDcgQEAKICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKICAqIFNPRlRXQVJFLgogICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpd2NoX3Byb3ZpZGVyLmgiCiAjaW5jbHVkZSAiaXdjaC5oIgogI2luY2x1ZGUgIml3Y2hfY20uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdXZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3V2ZXJicy5jCmluZGV4IDNjYjY4OGQuLmYxNTY1Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdXZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV91dmVyYnMuYwpAQCAtOTUsNyArOTUsNyBAQAogCQkgICAgIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCAqY291bnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdm1fb3BzID0gewogCS5vcGVuID0JZWhjYV9tbV9vcGVuLAogCS5jbG9zZSA9IGVoY2FfbW1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCmluZGV4IDA0ZTg4YjYuLjAxM2QxMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTMxLDYgKzMxLDcgQEAKICAqIFNPRlRXQVJFLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCmluZGV4IDM4YTI4NzAuLjQwZGJlNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCkBAIC0xMTUxLDcgKzExNTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlwYXRoX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpcGF0aF9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBpcGF0aF9maWxlX3ZtYV9mYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE3MjIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNzIyMC5jCmluZGV4IGIyYTlkNGMuLmE4MDU0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE3MjIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTcyMjAuYwpAQCAtMzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKaW5kZXggNmMyMWI0Yi4uYzBhMDNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21tYXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tbWFwLmMKaW5kZXggZmE4MzBlMi4uYjI4ODY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21tYXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbW1hcC5jCkBAIC03NCw3ICs3NCw3IEBACiAJa3JlZl9wdXQoJmlwLT5yZWYsIGlwYXRoX3JlbGVhc2VfbW1hcF9pbmZvKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpcGF0aF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlwYXRoX3ZtX29wcyA9IHsKIAkub3BlbiA9ICAgICBpcGF0aF92bWFfb3BlbiwKIAkuY2xvc2UgPSAgICBpcGF0aF92bWFfY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYwppbmRleCAzYTVhODliLi5jYjJkM2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYwpAQCAtMzIsNiArMzIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMKaW5kZXggMjI5NjgzMi4uMWY5NWJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYwpAQCAtMzEsNiArMzEsNyBAQAogICogU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCmluZGV4IDYwNzZjYjYuLjc0MjA3MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCkBAIC0zMSw2ICszMSw3IEBACiAgKiBTT0ZUV0FSRS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxyZG1hL2liX3NtaS5oPgogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCmluZGV4IDg1NTkxMWUuLjgyODc4ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYwppbmRleCA3YmZmNGI5Li5iZTc4ZjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKaW5kZXggZDczZTMyMi4uNjkyM2UxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKQEAgLTMyLDYgKzMyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCmluZGV4IDA1NmIyYTQuLjBhYTAxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCkBAIC02OCwxMSArNjgsMTYgQEAKIAlzcGluX3VubG9ja19pcnEoJmNhdGFzX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wZGV2LCAmdGxpc3QsIGNhdGFzX2Vyci5saXN0KSB7CisJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2LT5wZGV2OwogCQlyZXQgPSBfX210aGNhX3Jlc3RhcnRfb25lKGRldi0+cGRldik7CisJCS8qICdkZXYnIG5vdyBpcyBub3QgdmFsaWQgKi8KIAkJaWYgKHJldCkKLQkJCW10aGNhX2VycihkZXYsICJSZXNldCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKLQkJZWxzZQotCQkJbXRoY2FfZGJnKGRldiwgIlJlc2V0IHN1Y2NlZWRlZFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIm10aGNhICVzOiBSZXNldCBmYWlsZWQgKCVkKVxuIiwKKwkJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcmV0KTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3QgbXRoY2FfZGV2ICpkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCQkJbXRoY2FfZGJnKGQsICJSZXNldCBzdWNjZWVkZWRcbiIpOworCQl9CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZtdGhjYV9kZXZpY2VfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwppbmRleCA1MzhlNDA5Li5lNTkzYWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwpAQCAtMTU2Niw3ICsxNTY2LDYgQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG5lc19uZXRkZXZfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbmVzX25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IG5lc19uZXRkZXZfY2hhbmdlX210dSwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyIAk9IG5lc19uZXRkZXZfdmxhbl9yeF9yZWdpc3RlciwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCAyNTg3NGZjLi44NzYzYzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTM2MiwxMiArMzYyLDE5IEBACiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcG9pYl9kZXZfcHJpdiwKIAkJCQkJCSAgIGNhcnJpZXJfb25fdGFzayk7CisJc3RydWN0IGliX3BvcnRfYXR0ciBhdHRyOwogCiAJLyoKIAkgKiBUYWtlIHJ0bmxfbG9jayB0byBhdm9pZCByYWNpbmcgd2l0aCBpcG9pYl9zdG9wKCkgYW5kCiAJICogdHVybmluZyB0aGUgY2FycmllciBiYWNrIG9uIHdoaWxlIGEgZGV2aWNlIGlzIGJlaW5nCiAJICogcmVtb3ZlZC4KIAkgKi8KKwlpZiAoaWJfcXVlcnlfcG9ydChwcml2LT5jYSwgcHJpdi0+cG9ydCwgJmF0dHIpIHx8CisJICAgIGF0dHIuc3RhdGUgIT0gSUJfUE9SVF9BQ1RJVkUpIHsKKwkJaXBvaWJfZGJnKHByaXYsICJLZWVwaW5nIGNhcnJpZXIgb2ZmIHVudGlsIElCIHBvcnQgaXMgYWN0aXZlXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCXJ0bmxfbG9jaygpOwogCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+ZGV2KTsKIAlydG5sX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggMGJhNmVjOC4uYWRkOTE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC00MjYsNyArNDI2LDcgQEAKIAkgKiBiZWNhdXNlIHdlIHByZWFsbG9jYXRlIHNvIG1hbnkgcmVzb3VyY2VzCiAJICovCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9zZXNzaW9uX3NldHVwKCZpc2NzaV9pc2VyX3RyYW5zcG9ydCwgc2hvc3QsCi0JCQkJCSAgSVNDU0lfREVGX1hNSVRfQ01EU19NQVgsCisJCQkJCSAgSVNDU0lfREVGX1hNSVRfQ01EU19NQVgsIDAsCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2spLAogCQkJCQkgIGluaXRpYWxfY21kc24sIDApOwogCWlmICghY2xzX3Nlc3Npb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggMTE0ODE0MC4uZGVlNjcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtMTMsNiArMTMsNyBAQAogI2RlZmluZSBFVkRFVl9CVUZGRVJfU0laRQk2NAogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZmYtY29yZS5jIGIvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMKaW5kZXggNzJjNjNlNS4uMzhkZjgxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMKQEAgLTMzNywxNiArMzM3LDE2IEBACiAJZGV2LT5mZiA9IGZmOwogCWRldi0+Zmx1c2ggPSBmbHVzaF9lZmZlY3RzOwogCWRldi0+ZXZlbnQgPSBpbnB1dF9mZl9ldmVudDsKLQlzZXRfYml0KEVWX0ZGLCBkZXYtPmV2Yml0KTsKKwlfX3NldF9iaXQoRVZfRkYsIGRldi0+ZXZiaXQpOwogCiAJLyogQ29weSAidHJ1ZSIgYml0cyBpbnRvIGZmIGRldmljZSBiaXRtYXAgKi8KIAlmb3IgKGkgPSAwOyBpIDw9IEZGX01BWDsgaSsrKQogCQlpZiAodGVzdF9iaXQoaSwgZGV2LT5mZmJpdCkpCi0JCQlzZXRfYml0KGksIGZmLT5mZmJpdCk7CisJCQlfX3NldF9iaXQoaSwgZmYtPmZmYml0KTsKIAogCS8qIHdlIGNhbiBlbXVsYXRlIFJVTUJMRSB3aXRoIHBlcmlvZGljIGVmZmVjdHMgKi8KIAlpZiAodGVzdF9iaXQoRkZfUEVSSU9ESUMsIGZmLT5mZmJpdCkpCi0JCXNldF9iaXQoRkZfUlVNQkxFLCBkZXYtPmZmYml0KTsKKwkJX19zZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM2MiwxMiArMzYyLDE0IEBACiAgKi8KIHZvaWQgaW5wdXRfZmZfZGVzdHJveShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7Ci0JY2xlYXJfYml0KEVWX0ZGLCBkZXYtPmV2Yml0KTsKLQlpZiAoZGV2LT5mZikgewotCQlpZiAoZGV2LT5mZi0+ZGVzdHJveSkKLQkJCWRldi0+ZmYtPmRlc3Ryb3koZGV2LT5mZik7Ci0JCWtmcmVlKGRldi0+ZmYtPnByaXZhdGUpOwotCQlrZnJlZShkZXYtPmZmKTsKKwlzdHJ1Y3QgZmZfZGV2aWNlICpmZiA9IGRldi0+ZmY7CisKKwlfX2NsZWFyX2JpdChFVl9GRiwgZGV2LT5ldmJpdCk7CisJaWYgKGZmKSB7CisJCWlmIChmZi0+ZGVzdHJveSkKKwkJCWZmLT5kZXN0cm95KGZmKTsKKwkJa2ZyZWUoZmYtPnByaXZhdGUpOworCQlrZnJlZShmZik7CiAJCWRldi0+ZmYgPSBOVUxMOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jIGIvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKaW5kZXggMmQxNDE1ZS4uYjQ4M2IyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKQEAgLTYxLDcgKzYxLDYgQEAKIAlzdHJ1Y3QgbWxfZWZmZWN0X3N0YXRlIHN0YXRlc1tGRl9NRU1MRVNTX0VGRkVDVFNdOwogCWludCBnYWluOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXNwaW5sb2NrX3QgdGltZXJfbG9jazsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CiAKIAlpbnQgKCpwbGF5X2VmZmVjdCkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLApAQCAtMzY4LDM4ICszNjcsMzggQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAoc3RydWN0IGlucHV0X2RldiAqKXRpbWVyX2RhdGE7CiAJc3RydWN0IG1sX2RldmljZSAqbWwgPSBkZXYtPmZmLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZWJ1ZygidGltZXI6IHVwZGF0aW5nIGVmZmVjdHMiKTsKIAotCXNwaW5fbG9jaygmbWwtPnRpbWVyX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAltbF9wbGF5X2VmZmVjdHMobWwpOwotCXNwaW5fdW5sb2NrKCZtbC0+dGltZXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiB9CiAKKy8qCisgKiBTZXRzIHJlcXVlc3RlZCBnYWluIGZvciBGRiBlZmZlY3RzLiBDYWxsZWQgd2l0aCBkZXYtPmV2ZW50X2xvY2sgaGVsZC4KKyAqLwogc3RhdGljIHZvaWQgbWxfZmZfc2V0X2dhaW4oc3RydWN0IGlucHV0X2RldiAqZGV2LCB1MTYgZ2FpbikKIHsKIAlzdHJ1Y3QgbWxfZGV2aWNlICptbCA9IGRldi0+ZmYtPnByaXZhdGU7CiAJaW50IGk7CiAKLQlzcGluX2xvY2tfYmgoJm1sLT50aW1lcl9sb2NrKTsKLQogCW1sLT5nYWluID0gZ2FpbjsKIAogCWZvciAoaSA9IDA7IGkgPCBGRl9NRU1MRVNTX0VGRkVDVFM7IGkrKykKIAkJX19jbGVhcl9iaXQoRkZfRUZGRUNUX1BMQVlJTkcsICZtbC0+c3RhdGVzW2ldLmZsYWdzKTsKIAogCW1sX3BsYXlfZWZmZWN0cyhtbCk7Ci0KLQlzcGluX3VubG9ja19iaCgmbWwtPnRpbWVyX2xvY2spOwogfQogCisvKgorICogU3RhcnQvc3RvcCBzcGVjaWZpZWQgRkYgZWZmZWN0LiBDYWxsZWQgd2l0aCBkZXYtPmV2ZW50X2xvY2sgaGVsZC4KKyAqLwogc3RhdGljIGludCBtbF9mZl9wbGF5YmFjayhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBlZmZlY3RfaWQsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgbWxfZGV2aWNlICptbCA9IGRldi0+ZmYtPnByaXZhdGU7CiAJc3RydWN0IG1sX2VmZmVjdF9zdGF0ZSAqc3RhdGUgPSAmbWwtPnN0YXRlc1tlZmZlY3RfaWRdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWwtPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAogCWlmICh2YWx1ZSA+IDApIHsKIAkJZGVidWcoImluaXRpYXRlZCBwbGF5Iik7CkBAIC00MjUsOCArNDI0LDYgQEAKIAkJbWxfcGxheV9lZmZlY3RzKG1sKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbC0+dGltZXJfbG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzNiw3ICs0MzMsNyBAQAogCXN0cnVjdCBtbF9kZXZpY2UgKm1sID0gZGV2LT5mZi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgbWxfZWZmZWN0X3N0YXRlICpzdGF0ZSA9ICZtbC0+c3RhdGVzW2VmZmVjdC0+aWRdOwogCi0Jc3Bpbl9sb2NrX2JoKCZtbC0+dGltZXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5ldmVudF9sb2NrKTsKIAogCWlmICh0ZXN0X2JpdChGRl9FRkZFQ1RfU1RBUlRFRCwgJnN0YXRlLT5mbGFncykpIHsKIAkJX19jbGVhcl9iaXQoRkZfRUZGRUNUX1BMQVlJTkcsICZzdGF0ZS0+ZmxhZ3MpOwpAQCAtNDQ4LDcgKzQ0NSw3IEBACiAJCW1sX3NjaGVkdWxlX3RpbWVyKG1sKTsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmbWwtPnRpbWVyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5ldmVudF9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDgyLDcgKzQ3OSw2IEBACiAJbWwtPnByaXZhdGUgPSBkYXRhOwogCW1sLT5wbGF5X2VmZmVjdCA9IHBsYXlfZWZmZWN0OwogCW1sLT5nYWluID0gMHhmZmZmOwotCXNwaW5fbG9ja19pbml0KCZtbC0+dGltZXJfbG9jayk7CiAJc2V0dXBfdGltZXIoJm1sLT50aW1lciwgbWxfZWZmZWN0X3RpbWVyLCAodW5zaWduZWQgbG9uZylkZXYpOwogCiAJc2V0X2JpdChGRl9HQUlOLCBkZXYtPmZmYml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCBlODI4YWFiLi4yMjY2ZWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTc4MSwxMCArNzgyLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3VuaW9uIGlucHV0X3NlcV9zdGF0ZSB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgc2hvcnQgcG9zOworCQlib29sIG11dGV4X2FjcXVpcmVkOworCX07CisJdm9pZCAqcDsKK307CisKIHN0YXRpYyB2b2lkICppbnB1dF9kZXZpY2VzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpKQotCQlyZXR1cm4gTlVMTDsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CisJaW50IGVycm9yOworCisJLyogV2UgbmVlZCB0byBmaXQgaW50byBzZXEtPnByaXZhdGUgcG9pbnRlciAqLworCUJVSUxEX0JVR19PTihzaXplb2YodW5pb24gaW5wdXRfc2VxX3N0YXRlKSAhPSBzaXplb2Yoc2VxLT5wcml2YXRlKSk7CisKKwllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpOworCWlmIChlcnJvcikgeworCQlzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQgPSBmYWxzZTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworCX0KKworCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IHRydWU7CiAKIAlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJmlucHV0X2Rldl9saXN0LCAqcG9zKTsKIH0KQEAgLTc5NCw5ICs4MTQsMTIgQEAKIAlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmaW5wdXRfZGV2X2xpc3QsIHBvcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGlucHV0X2RldmljZXNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCitzdGF0aWMgdm9pZCBpbnB1dF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQltdXRleF91bmxvY2soJmlucHV0X211dGV4KTsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CisKKwlpZiAoc3RhdGUtPm11dGV4X2FjcXVpcmVkKQorCQltdXRleF91bmxvY2soJmlucHV0X211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgY29uc3QgY2hhciAqbmFtZSwKQEAgLTg2MCw3ICs4ODMsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbnB1dF9kZXZpY2VzX3NlcV9vcHMgPSB7CiAJLnN0YXJ0CT0gaW5wdXRfZGV2aWNlc19zZXFfc3RhcnQsCiAJLm5leHQJPSBpbnB1dF9kZXZpY2VzX3NlcV9uZXh0LAotCS5zdG9wCT0gaW5wdXRfZGV2aWNlc19zZXFfc3RvcCwKKwkuc3RvcAk9IGlucHV0X3NlcV9zdG9wLAogCS5zaG93CT0gaW5wdXRfZGV2aWNlc19zZXFfc2hvdywKIH07CiAKQEAgLTg4MCw0MCArOTAzLDQ5IEBACiAKIHN0YXRpYyB2b2lkICppbnB1dF9oYW5kbGVyc19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X211dGV4KSkKLQkJcmV0dXJuIE5VTEw7CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOworCWludCBlcnJvcjsKIAotCXNlcS0+cHJpdmF0ZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKnBvczsKKwkvKiBXZSBuZWVkIHRvIGZpdCBpbnRvIHNlcS0+cHJpdmF0ZSBwb2ludGVyICovCisJQlVJTERfQlVHX09OKHNpemVvZih1bmlvbiBpbnB1dF9zZXFfc3RhdGUpICE9IHNpemVvZihzZXEtPnByaXZhdGUpKTsKKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCk7CisJaWYgKGVycm9yKSB7CisJCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IGZhbHNlOworCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisJfQorCisJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gdHJ1ZTsKKwlzdGF0ZS0+cG9zID0gKnBvczsKKwogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmaW5wdXRfaGFuZGxlcl9saXN0LCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKmlucHV0X2hhbmRsZXJzX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzZXEtPnByaXZhdGUgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSgqcG9zICsgMSk7Ci0JcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmlucHV0X2hhbmRsZXJfbGlzdCwgcG9zKTsKLX0KKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CiAKLXN0YXRpYyB2b2lkIGlucHV0X2hhbmRsZXJzX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCW11dGV4X3VubG9jaygmaW5wdXRfbXV0ZXgpOworCXN0YXRlLT5wb3MgPSAqcG9zICsgMTsKKwlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmaW5wdXRfaGFuZGxlcl9saXN0LCBwb3MpOwogfQogCiBzdGF0aWMgaW50IGlucHV0X2hhbmRsZXJzX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBpbnB1dF9oYW5kbGVyICpoYW5kbGVyID0gY29udGFpbmVyX29mKHYsIHN0cnVjdCBpbnB1dF9oYW5kbGVyLCBub2RlKTsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIk46IE51bWJlcj0lbGQgTmFtZT0lcyIsCi0JCSAgICh1bnNpZ25lZCBsb25nKXNlcS0+cHJpdmF0ZSwgaGFuZGxlci0+bmFtZSk7CisJc2VxX3ByaW50ZihzZXEsICJOOiBOdW1iZXI9JXUgTmFtZT0lcyIsIHN0YXRlLT5wb3MsIGhhbmRsZXItPm5hbWUpOwogCWlmIChoYW5kbGVyLT5mb3BzKQogCQlzZXFfcHJpbnRmKHNlcSwgIiBNaW5vcj0lZCIsIGhhbmRsZXItPm1pbm9yKTsKIAlzZXFfcHV0YyhzZXEsICdcbicpOwogCiAJcmV0dXJuIDA7CiB9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW5wdXRfaGFuZGxlcnNfc2VxX29wcyA9IHsKIAkuc3RhcnQJPSBpbnB1dF9oYW5kbGVyc19zZXFfc3RhcnQsCiAJLm5leHQJPSBpbnB1dF9oYW5kbGVyc19zZXFfbmV4dCwKLQkuc3RvcAk9IGlucHV0X2hhbmRsZXJzX3NlcV9zdG9wLAorCS5zdG9wCT0gaW5wdXRfc2VxX3N0b3AsCiAJLnNob3cJPSBpbnB1dF9oYW5kbGVyc19zZXFfc2hvdywKIH07CiAKQEAgLTEyNjAsMTkgKzEyOTIsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBJTlBVVF9ET19UT0dHTEUoZGV2LCB0eXBlLCBiaXRzLCBvbikJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWludCBpOwkJCQkJCVwKLQkJaWYgKCF0ZXN0X2JpdChFVl8jI3R5cGUsIGRldi0+ZXZiaXQpKQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCB0eXBlIyNfTUFYOyBpKyspIHsJCVwKLQkJCWlmICghdGVzdF9iaXQoaSwgZGV2LT5iaXRzIyNiaXQpIHx8CVwKLQkJCSAgICAhdGVzdF9iaXQoaSwgZGV2LT5iaXRzKSkJCVwKLQkJCQljb250aW51ZTsJCQlcCi0JCQlkZXYtPmV2ZW50KGRldiwgRVZfIyN0eXBlLCBpLCBvbik7CVwKLQkJfQkJCQkJCVwKKyNkZWZpbmUgSU5QVVRfRE9fVE9HR0xFKGRldiwgdHlwZSwgYml0cywgb24pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBpOwkJCQkJCQlcCisJCWJvb2wgYWN0aXZlOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJaWYgKCF0ZXN0X2JpdChFVl8jI3R5cGUsIGRldi0+ZXZiaXQpKQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IHR5cGUjI19NQVg7IGkrKykgewkJCVwKKwkJCWlmICghdGVzdF9iaXQoaSwgZGV2LT5iaXRzIyNiaXQpKQkJXAorCQkJCWNvbnRpbnVlOwkJCQlcCisJCQkJCQkJCQlcCisJCQlhY3RpdmUgPSB0ZXN0X2JpdChpLCBkZXYtPmJpdHMpOwkJXAorCQkJaWYgKCFhY3RpdmUgJiYgIW9uKQkJCQlcCisJCQkJY29udGludWU7CQkJCVwKKwkJCQkJCQkJCVwKKwkJCWRldi0+ZXZlbnQoZGV2LCBFVl8jI3R5cGUsIGksIG9uID8gYWN0aXZlIDogMCk7CVwKKwkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHZvaWQgaW5wdXRfZGV2X3Jlc2V0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgYm9vbCBhY3RpdmF0ZSkKIHsKIAlpZiAoIWRldi0+ZXZlbnQpCkBAIC0xMjg3LDcgKzEzMjcsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBpbnB1dF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gdG9faW5wdXRfZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveWRldi5jIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwppbmRleCA5MDFiMjUyLi5iMWJkNmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCmluZGV4IDIzODhjZjUuLjc5ZTNlZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCkBAIC0xNDMsNiArMTQzLDcgQEAKIAl7IDB4MTJhYiwgMHg4ODA5LCAiWGJveCBERFIgZGFuY2VwYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCiAJeyAweDE0MzAsIDB4NDc0OCwgIlJlZE9jdGFuZSBHdWl0YXIgSGVybyBYLXBsb3JlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKIAl7IDB4MTQzMCwgMHg4ODg4LCAiVFg2NTAwKyBEYW5jZSBQYWQgKGZpcnN0IGdlbmVyYXRpb24pIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAorCXsgMHgxNDZiLCAweDA2MDEsICJCaWdCZW4gSW50ZXJhY3RpdmUgWEJPWCAzNjAgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKIAl7IDB4MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCiAJeyAweDFiYWQsIDB4MDAwMywgIkhhcm1vbml4IFJvY2sgQmFuZCBEcnVta2l0IiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHhmZmZmLCAweGZmZmYsICJDaGluZXNlLW1hZGUgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LApAQCAtMjA5LDYgKzIxMCw3IEBACiAJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDA3MzgpLAkJLyogTWFkIENhdHogWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCiAJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDBlNmYpLAkJLyogMHgwZTZmIFgtQm94IDM2MCBjb250cm9sbGVycyAqLwogCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgxNDMwKSwJCS8qIFJlZE9jdGFuZSBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KKwlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MTQ2YiksCQkvKiBCaWdCZW4gSW50ZXJhY3RpdmUgQ29udHJvbGxlcnMgKi8KIAlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MWJhZCksCQkvKiBSb2NrIEJhbmQgRHJ1bXMgKi8KIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggNDcwOWUxNS4uMjhlNjExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtMjMzLDYgKzIzMyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkICgqYXRrYmRfcGxhdGZvcm1fZml4dXApKHN0cnVjdCBhdGtiZCAqLCBjb25zdCB2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkICphdGtiZF9wbGF0Zm9ybV9maXh1cF9kYXRhOworc3RhdGljIHVuc2lnbmVkIGludCAoKmF0a2JkX3BsYXRmb3JtX3NjYW5jb2RlX2ZpeHVwKShzdHJ1Y3QgYXRrYmQgKiwgdW5zaWduZWQgaW50KTsKIAogc3RhdGljIHNzaXplX3QgYXRrYmRfYXR0cl9zaG93X2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwKIAkJCQlzc2l6ZV90ICgqaGFuZGxlcikoc3RydWN0IGF0a2JkICosIGNoYXIgKikpOwpAQCAtMzkzLDYgKzM5NCw5IEBACiAKIAlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1JBVywgY29kZSk7CiAKKwlpZiAoYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXApCisJCWNvZGUgPSBhdGtiZF9wbGF0Zm9ybV9zY2FuY29kZV9maXh1cChhdGtiZCwgY29kZSk7CisKIAlpZiAoYXRrYmQtPnRyYW5zbGF0ZWQpIHsKIAogCQlpZiAoYXRrYmQtPmVtdWwgfHwgYXRrYmRfbmVlZF94bGF0ZShhdGtiZC0+eGxfYml0LCBjb2RlKSkgewpAQCAtNTc0LDExICs1NzgsMjIgQEAKIAogCW11dGV4X2xvY2soJmF0a2JkLT5ldmVudF9tdXRleCk7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX0xFRF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCi0JCWF0a2JkX3NldF9sZWRzKGF0a2JkKTsKKwlpZiAoIWF0a2JkLT5lbmFibGVkKSB7CisJCS8qCisJCSAqIFNlcmlvIHBvcnRzIGFyZSByZXN1bWVkIGFzeW5jaHJvbm91c2x5IHNvIHdoaWxlIGRyaXZlciBjb3JlCisJCSAqIHRoaW5rcyB0aGF0IGRldmljZSBpcyBhbHJlYWR5IGZ1bGx5IG9wZXJhdGlvbmFsIGluIHJlYWxpdHkKKwkJICogaXQgbWF5IG5vdCBiZSByZWFkeSB5ZXQuIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGtlZXAKKwkJICogcmVzY2hlZHVsaW5nIHRpbGwgcmVjb25uZWN0IGNvbXBsZXRlcy4KKwkJICovCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYXRrYmQtPmV2ZW50X3dvcmssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJfSBlbHNlIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9MRURfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQorCQkJYXRrYmRfc2V0X2xlZHMoYXRrYmQpOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9SRVBfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQotCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX1JFUF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCisJCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCX0KIAogCW11dGV4X3VubG9jaygmYXRrYmQtPmV2ZW50X211dGV4KTsKIH0KQEAgLTc3MCw2ICs3ODUsMzAgQEAKIAlyZXR1cm4gMzsKIH0KIAorc3RhdGljIGludCBhdGtiZF9yZXNldF9zdGF0ZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQoreworICAgICAgICBzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmYXRrYmQtPnBzMmRldjsKKwl1bnNpZ25lZCBjaGFyIHBhcmFtWzFdOworCisvKgorICogU2V0IHRoZSBMRURzIHRvIGEgcHJlZGVmaW5lZCBzdGF0ZSAoYWxsIG9mZikuCisgKi8KKworCXBhcmFtWzBdID0gMDsKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgQVRLQkRfQ01EX1NFVExFRFMpKQorCQlyZXR1cm4gLTE7CisKKy8qCisgKiBTZXQgYXV0b3JlcGVhdCB0byBmYXN0ZXN0IHBvc3NpYmxlLgorICovCisKKwlwYXJhbVswXSA9IDA7CisJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIEFUS0JEX0NNRF9TRVRSRVApKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdGtiZF9hY3RpdmF0ZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZhdGtiZC0+cHMyZGV2OwpAQCAtODUyLDI5ICs4OTEsNiBAQAogfTsKIAogLyoKLSAqIEludmVudGVjIHN5c3RlbSB3aXRoIGJyb2tlbiBrZXkgcmVsZWFzZSBvbiB2b2x1bWUga2V5cwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2ludmVudGVjX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGZpeHVwIGZvciBIUCBQYXZpbGlvbiBaVjYxMDAgbGFwdG9wIHRoYXQgZG9lc24ndCBnZW5lcmF0ZSByZWxlYXNlCi0gKiBmb3IgaXRzIHZvbHVtZSBidXR0b25zCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfaHBfenY2MTAwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGZpeHVwIGZvciBIUCAoQ29tcGFxKSBQcmVzYXJpbyBSNDAwMCBSNDEwMCBSNDIwMCB0aGF0IGRvbid0IGdlbmVyYXRlCi0gKiByZWxlYXNlIGZvciB0aGVpciB2b2x1bWUgYnV0dG9ucwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2hwX3I0MDAwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCiAgKiBTYW1zdW5nIE5DMTAsTkMyMCB3aXRoIEZuK0Y/IGtleSByZWxlYXNlIG5vdCB3b3JraW5nCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfc2Ftc3VuZ19mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CkBAIC04ODIsMTQgKzg5OCw2IEBACiB9OwogCiAvKgotICogVGhlIHZvbHVtZSB1cCBhbmQgdm9sdW1lIGRvd24gc3BlY2lhbCBrZXlzIG9uIGEgRnVqaXRzdSBBbWlsbyBQQSAxNTEwIGxhcHRvcAotICogZG8gbm90IGdlbmVyYXRlIHJlbGVhc2UgZXZlbnRzIHNvIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2FtaWxvX3BhMTUxMF9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhiMCwgMHhhZSwgLTFVCi19OwotCi0vKgogICogQW1pbG8gUGkgMzUyNSBrZXkgcmVsZWFzZSBmb3IgRm4rVm9sdW1lIGtleXMgbm90IHdvcmtpbmcKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9hbWlsb19waTM1MjVfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewpAQCAtOTExLDYgKzkxOSwzMCBAQAogfTsKIAogLyoKKyAqIE1hbnkgbm90ZWJvb2tzIGRvbid0IHNlbmQga2V5IHJlbGVhc2UgZXZlbnQgZm9yIHZvbHVtZSB1cC9kb3duCisgKiBrZXlzLCB3aXRoIGtleSBsaXN0IGJlbG93IGNvbW1vbiBhbW9uZyB0aGVtCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKKwkweGFlLCAweGIwLCAtMVUKK307CisKKy8qCisgKiBPUU8gMDErIG11bHRpbWVkaWEga2V5cyAoNjQtLTY2KSBnZW5lcmF0ZSBlMCA2eCB1cG9uIHJlbGVhc2Ugd2hlcmVhcworICogdGhleSBzaG91bGQgYmUgZ2VuZXJhdGluZyBlNC1lNiAoMHg4MCB8IGNvZGUpLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX29xb18wMXBsdXNfc2NhbmNvZGVfZml4dXAoc3RydWN0IGF0a2JkICphdGtiZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBpbnQgY29kZSkKK3sKKwlpZiAoYXRrYmQtPnRyYW5zbGF0ZWQgJiYgYXRrYmQtPmVtdWwgPT0gMSAmJgorCSAgICAoY29kZSA9PSAweDY0IHx8IGNvZGUgPT0gMHg2NSB8fCBjb2RlID09IDB4NjYpKSB7CisJCWF0a2JkLT5lbXVsID0gMDsKKwkJY29kZSB8PSAweDgwOworCX0KKworCXJldHVybiBjb2RlOworfQorCisvKgogICogYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoKSBpbml0aWFsaXplcyBrZXlib2FyZCdzIGtleWNvZGUgdGFibGUKICAqIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgc2NhbmNvZGUgc2V0CiAgKi8KQEAgLTEwODcsNiArMTExOSw3IEBACiAJCX0KIAogCQlhdGtiZC0+c2V0ID0gYXRrYmRfc2VsZWN0X3NldChhdGtiZCwgYXRrYmRfc2V0LCBhdGtiZF9leHRyYSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCiAJfSBlbHNlIHsKQEAgLTExNDEsNiArMTE3NCwxOCBAQAogCQkJcmV0dXJuIC0xOwogCiAJCWF0a2JkX2FjdGl2YXRlKGF0a2JkKTsKKworCQkvKgorCQkgKiBSZXN0b3JlIExFRCBzdGF0ZSBhbmQgcmVwZWF0IHJhdGUuIFdoaWxlIGlucHV0IGNvcmUKKwkJICogd2lsbCBkbyB0aGlzIGZvciB1cyBhdCByZXN1bWUgdGltZSByZWNvbm5lY3QgbWF5IGhhcHBlbgorCQkgKiBiZWNhdXNlIHVzZXIgcmVxdWVzdGVkIGl0IHZpYSBzeXNmcyBvciBzaW1wbHkgYmVjYXVzZQorCQkgKiBrZXlib2FyZCB3YXMgdW5wbHVnZ2VkIGFuZCBwbHVnZ2VkIGluIGFnYWluIHNvIHdlIG5lZWQKKwkJICogdG8gZG8gaXQgb3Vyc2VsdmVzIGhlcmUuCisJCSAqLworCQlhdGtiZF9zZXRfbGVkcyhhdGtiZCk7CisJCWlmICghYXRrYmQtPnNvZnRyZXBlYXQpCisJCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCiAJfQogCiAJYXRrYmRfZW5hYmxlKGF0a2JkKTsKQEAgLTEyNjcsNiArMTMxMiw3IEBACiAKIAkJYXRrYmQtPmRldiA9IG5ld19kZXY7CiAJCWF0a2JkLT5zZXQgPSBhdGtiZF9zZWxlY3Rfc2V0KGF0a2JkLCBhdGtiZC0+c2V0LCB2YWx1ZSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfa2V5Y29kZV90YWJsZShhdGtiZCk7CiAJCWF0a2JkX3NldF9kZXZpY2VfYXR0cnMoYXRrYmQpOwpAQCAtMTM4OCw2ICsxNDM0LDcgQEAKIAogCQlhdGtiZC0+ZGV2ID0gbmV3X2RldjsKIAkJYXRrYmQtPnNldCA9IGF0a2JkX3NlbGVjdF9zZXQoYXRrYmQsIHZhbHVlLCBhdGtiZC0+ZXh0cmEpOworCQlhdGtiZF9yZXNldF9zdGF0ZShhdGtiZCk7CiAJCWF0a2JkX2FjdGl2YXRlKGF0a2JkKTsKIAkJYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfZGV2aWNlX2F0dHJzKGF0a2JkKTsKQEAgLTE1MTMsNiArMTU2MCwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBhdGtiZF9zZXR1cF9zY2FuY29kZV9maXh1cChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXAgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGF0a2JkX2RtaV9xdWlya190YWJsZVtdIF9faW5pdGRhdGEgPSB7CiAJewogCQkuaWRlbnQgPSAiRGVsbCBMYXB0b3AiLApAQCAtMTU0OCw3ICsxNjAyLDcgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUGF2aWxpb24gWlY2MTAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF96djYxMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDAwMCIsCkBAIC0xNTU3LDcgKzE2MTEsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDAwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDEwMCIsCkBAIC0xNTY2LDcgKzE2MjAsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDEwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDIwMCIsCkBAIC0xNTc1LDcgKzE2MjksNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDIwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJJbnZlbnRlYyBTeW1waG9ueSIsCkBAIC0xNTg0LDcgKzE2MzgsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTWU1QSE9OWSA2LjAvNy4wIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9pbnZlbnRlY19mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIlNhbXN1bmcgTkMxMCIsCkBAIC0xNjIwLDcgKzE2NzQsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBQYSAxNTEwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9hbWlsb19wYTE1MTBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJGdWppdHN1IEFtaWxvIFBpIDM1MjUiLApAQCAtMTY0OSw2ICsxNzAzLDE1IEBACiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAogCQkuZHJpdmVyX2RhdGEgPSBhdGtkYl9zb2x0ZWNoX3RhMTJfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAorCXsKKwkJLmlkZW50ID0gIk9RTyBNb2RlbCAwMSsiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk9RTyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJaRVBUTyIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9zY2FuY29kZV9maXh1cCwKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfb3FvXzAxcGx1c19zY2FuY29kZV9maXh1cCwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggYTg4YWZmMy4uNzdkMTMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkJfQogCiAJCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBncGlvX2tleXNfaXNyLAorCQkJCSAgICBJUlFGX1NIQVJFRCB8CiAJCQkJICAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCQkgICAgYnV0dG9uLT5kZXNjID8gYnV0dG9uLT5kZXNjIDogImdwaW9fa2V5cyIsCiAJCQkJICAgIGJkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbGtiZC5jCmluZGV4IGU5ZDYzOWUuLjVmNzI0NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpZmRlZiBDT05GSUdfSFAzMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jCmluZGV4IDQ3MmI1NjYuLmE5OWEwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYwpAQCAtMjcsNiArMjcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCAwMmY0ZjhmLi5hOWJiMjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtMjI3LDYgKzIyNyw3IEBACiAJZGVwZW5kcyBvbiBYODYgJiYgUE5QCiAJc2VsZWN0IE5FV19MRURTCiAJc2VsZWN0IExFRFNfQ0xBU1MKKwlzZWxlY3QgTEVEU19UUklHR0VSUwogCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIElSIHJlbW90ZSBmdW5jdGlvbmFsaXR5IGZvdW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYwppbmRleCAyMTZhNTU5Li5lYTgyMWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCiAvKiBSZWFkIHRoZSBpODA0MiBmYXN0IGhhbmRzaGFrZSB0aW1lciAqLwogc3RhdGljIGlubGluZSBpbnQgaHBfc2RjX3J0Y19yZWFkX2ZocyhzdHJ1Y3QgdGltZXZhbCAqcmVzKSB7Ci0JdWludDY0X3QgcmF3OworCWludDY0X3QgcmF3OwogCXVuc2lnbmVkIGludCB0ZW5tczsKIAogCXJhdyA9IGhwX3NkY19ydGNfcmVhZF9pODA0MnRpbWVyKEhQX1NEQ19DTURfTE9BRF9GSFMsIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwppbmRleCBjODA2ZmJmLi4zYjlmNTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwpAQCAtMTA2LDggKzEwNiw4IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJaW50IGVycjsKIAotCWlmICghcGRhdGEgfHwgIXBkYXRhLT5zdGVwcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIHBsYXRmb3JtIGRhdGFcbiIpOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMKaW5kZXggYzRmNDIzMS4uYjA2NDQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3NwYXJjc3Brci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9zcGFyY3Nwa3IuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBiYmNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQorc3RhdGljIGludCBfX2RldmV4aXQgYmJjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKIAlzdHJ1Y3Qgc3BhcmNzcGtyX3N0YXRlICpzdGF0ZSA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gc3RhdGUtPmlucHV0X2RldjsKQEAgLTMwOCw3ICszMDgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZ3JvdmVyX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdyb3Zlcl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCiB7CiAJc3RydWN0IHNwYXJjc3Brcl9zdGF0ZSAqc3RhdGUgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCXN0cnVjdCBncm92ZXJfYmVlcF9pbmZvICppbmZvID0gJnN0YXRlLT51Lmdyb3ZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYwppbmRleCBjNWE0OWFiLi5kM2Y1NzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKgkJLSBmaXJzdCBwdWJsaWMgdmVyc2lvbgogICovCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCAxMWZkMDM4Li5hOTMyMTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCkBAIC05MzYsNiArOTM2LDE1IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiTWVkaW9uIE1EIDQyMjAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNZWRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiV0lNIDIwMzAiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2ZzX2FtaWxvX3Byb192MjAwMAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKIAkJLmlkZW50ID0gIk1lZGlvbiBNRCA5NjUwMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTUVESU9OUEMiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwppbmRleCA1ZTYzMDg2Li44MjgxMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCkBAIC0xMDcsOCArMTA3LDcgQEAKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkNGLTcyIiksCiAJCX0sCi0JCS5jYWxsYmFjayA9IGxpZmVib29rX3NldF9zZXJpb19waHlzLAotCQkuZHJpdmVyX2RhdGEgPSAiaXNhMDA2MC9zZXJpbzMiLAorCQkuY2FsbGJhY2sgPSBsaWZlYm9va19zZXRfNmJ5dGVfcHJvdG8sCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJMaWZlYm9vayBCMTQyIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IGRlNzQ1ZDcuLmFiNWRjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCQkJUFMyUFBfV0hFRUwgfCBQUzJQUF9TSURFX0JUTiB8IFBTMlBQX1RBU0tfQlROIHwKIAkJCQlQUzJQUF9FWFRSQV9CVE4gfCBQUzJQUF9OQVZfQlROIHwgUFMyUFBfSFdIRUVMIH0sCiAJCXsgNzIsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCTAgfSwJCQkvKiBULUNIMTE6IFRyYWNrTWFuIE1hcmJsZSAqLwotCQl7IDczLAkwLAkJCVBTMlBQX1NJREVfQlROIH0sCisJCXsgNzMsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1NJREVfQlROIH0sCS8qIFRyYWNrTWFuIEZYICovCiAJCXsgNzUsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzYsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzksCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1dIRUVMIH0sCQkvKiBUcmFja01hbiB3aXRoIHdoZWVsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCA2OTBhZWQ5Li4wN2M1Mzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTU4MSw3ICs1ODEsNyBAQAogc3RhdGljIGludCBwc21vdXNlX2V4dGVuc2lvbnMoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4X3Byb3RvLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewotCWJvb2wgc3luYXB0aWNzX2hhcmR3YXJlID0gdHJ1ZTsKKwlib29sIHN5bmFwdGljc19oYXJkd2FyZSA9IGZhbHNlOwogCiAvKgogICogV2UgYWx3YXlzIGNoZWNrIGZvciBsaWZlYm9vayBiZWNhdXNlIGl0IGRvZXMgbm90IGRpc3R1cmIgbW91c2UKQEAgLTE2NzMsNyArMTY3Myw3IEBACiB7CiAJaW50IHR5cGUgPSAqKCh1bnNpZ25lZCBpbnQgKilrcC0+YXJnKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzXG4iLCBwc21vdXNlX3Byb3RvY29sX2J5X3R5cGUodHlwZSktPm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzIiwgcHNtb3VzZV9wcm90b2NvbF9ieV90eXBlKHR5cGUpLT5uYW1lKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcHNtb3VzZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBiNjZmZjFhLi5mNGE2MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTY1Miw2ICs2NTIsMTYgQEAKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUE9SVEVHRSBNMzAwIiksCiAJCX0sCisKKwl9LAorCXsKKwkJLmlkZW50ID0gIlRvc2hpYmEgUG9ydGVnZSBNMzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJUT1NISUJBIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBvcnRhYmxlIFBDIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIlZlcnNpb24gMS4wIiksCisJCX0sCisKIAl9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCA5NjZiODg2Li5hMTNkODBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIE1PVVNFREVWX01JTk9SUwkJMzIKICNkZWZpbmUgTU9VU0VERVZfTUlYCQkzMQogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKaW5kZXggYzRiM2ZiZC4uYWE1MzNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIGNvbmZpZyBTRVJJTwogCXRyaXN0YXRlICJTZXJpYWwgSS9PIHN1cHBvcnQiIGlmIEVNQkVEREVEIHx8ICFYODYKIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFllcyBoZXJlIGlmIHlvdSBoYXZlIGFueSBpbnB1dCBkZXZpY2UgdGhhdCB1c2VzIHNlcmlhbCBJL08gdG8KIAkgIGNvbW11bmljYXRlIHdpdGggdGhlIHN5c3RlbS4gVGhpcyBpbmNsdWRlcyB0aGUKIAkgIAkJKiBzdGFuZGFyZCBBVCBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSAqCkBAIC0yMiw3ICsyMiw3IEBACiAJdHJpc3RhdGUgImk4MDQyIFBDIEtleWJvYXJkIGNvbnRyb2xsZXIiIGlmIEVNQkVEREVEIHx8ICFYODYKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uICFQQVJJU0MgJiYgKCFBUk0gfHwgQVJDSF9TSEFSSyB8fCBGT09UQlJJREdFX0hPU1QpICYmICFNNjhLICYmICFCTEFDS0ZJTgotCS0tLWhlbHAtLS0KKwloZWxwCiAJICBpODA0MiBpcyB0aGUgY2hpcCBvdmVyIHdoaWNoIHRoZSBzdGFuZGFyZCBBVCBrZXlib2FyZCBhbmQgUFMvMgogCSAgbW91c2UgYXJlIGNvbm5lY3RlZCB0byB0aGUgY29tcHV0ZXIuIElmIHlvdSB1c2UgdGhlc2UgZGV2aWNlcywKIAkgIHlvdSdsbCBuZWVkIHRvIHNheSBZIGhlcmUuCkBAIC0zNSw3ICszNSw3IEBACiBjb25maWcgU0VSSU9fU0VSUE9SVAogCXRyaXN0YXRlICJTZXJpYWwgcG9ydCBsaW5lIGRpc2NpcGxpbmUiCiAJZGVmYXVsdCB5Ci0JLS0taGVscC0tLQorCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHBsYW4gdG8gdXNlIGFuIGlucHV0IGRldmljZSAobW91c2UsIGpveXN0aWNrLAogCSAgdGFibGV0LCA2ZG9mKSB0aGF0IGNvbW11bmljYXRlcyBvdmVyIHRoZSBSUzIzMiBzZXJpYWwgKENPTSkgcG9ydC4KIApAQCAtNDksNyArNDksNyBAQAogY29uZmlnIFNFUklPX0NUODJDNzEwCiAJdHJpc3RhdGUgImN0ODJjNzEwIEF1eCBwb3J0IGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBYODYKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFRleGFzIEluc3RydW1lbnRzIFRyYXZlbE1hdGUgbm90ZWJvb2sKIAkgIGVxdWlwcGVkIHdpdGggdGhlIGN0ODJjNzEwIGNoaXAgYW5kIHdhbnQgdG8gdXNlIGEgbW91c2UgY29ubmVjdGVkCiAJICB0byB0aGUgIlF1aWNrUG9ydCIuCkBAIC02Niw3ICs2Niw3IEBACiBjb25maWcgU0VSSU9fUEFSS0JECiAJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQga2V5Ym9hcmQgYWRhcHRlciIKIAlkZXBlbmRzIG9uIFBBUlBPUlQKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYnVpbHQgYSBzaW1wbGUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyIHRvIGF0dGFjaAogCSAgYW4gYWRkaXRpb25hbCBBVCBrZXlib2FyZCwgWFQga2V5Ym9hcmQgb3IgUFMvMiBtb3VzZS4KIApAQCAtMTI0LDcgKzEyNCw3IEBACiAJdHJpc3RhdGUgIkhQIFN5c3RlbSBEZXZpY2UgQ29udHJvbGxlciBpODA0MiBTdXBwb3J0IgogCWRlcGVuZHMgb24gKEdTQyB8fCBIUDMwMCkgJiYgU0VSSU8KIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgIlN5c3RlbSBEZXZpY2UKIAkgIENvbnRyb2xsZXIiLCBhbiBpODA0MiBjYXJyeWluZyBtaWNyb2NvZGUgdG8gbWFuYWdlIGEKIAkgIGZldyBtaXNjZWxsYW5lb3VzIGRldmljZXMgb24gc29tZSBIZXdsZXR0IFBhY2thcmQgc3lzdGVtcy4KQEAgLTE2OCw2ICsxNjgsNyBAQAogCiBjb25maWcgU0VSSU9fTElCUFMyCiAJdHJpc3RhdGUgIlBTLzIgZHJpdmVyIGxpYnJhcnkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBTRVJJT19JODA0MiB8fCBTRVJJT19JODA0Mj1uCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIGEgZHJpdmVyIGZvciBkZXZpY2UgY29ubmVjdGVkCiAJICB0byBhIFBTLzIgcG9ydCwgc3VjaCBhcyBQUy8yIG1vdXNlIG9yIHN0YW5kYXJkIEFUIGtleWJvYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggYTM5YmM0ZS4uYTUzNzkyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0zMjcsNiArMzI3LDE3IEBACiAJCX0sCiAJfSwKIAl7CisJCS8qCisJCSAqIFJlc2V0IGFuZCBHRVQgSUQgY29tbWFuZHMgaXNzdWVkIHZpYSBLQkQgcG9ydCBhcmUKKwkJICogc29tZXRpbWVzIGJlaW5nIGRlbGl2ZXJlZCB0byBBVVgzLgorCQkgKi8KKwkJLmlkZW50ID0gIlNvbnkgVmFpbyBGWi0yNDBFIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTb255IENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZHTi1GWjI0MEUiKSwKKwkJfSwKKwl9LAorCXsKIAkJLmlkZW50ID0gIkFtb2kgTTYzNi9BNzM3IiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBbW9pIEVsZWN0cm9uaWNzIENPLixMVEQuIiksCkBAIC02NjEsNyArNjcyLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGk4MDQyX3BucF9pbml0KHZvaWQpCiB7CiAJY2hhciBrYmRfaXJxX3N0cls0XSA9IHsgMCB9LCBhdXhfaXJxX3N0cls0XSA9IHsgMCB9OwotCWludCBwbnBfZGF0YV9idXN0ZWQgPSBmYWxzZTsKKwlib29sIHBucF9kYXRhX2J1c3RlZCA9IGZhbHNlOwogCWludCBlcnI7CiAKICNpZmRlZiBDT05GSUdfWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggYmM1NmU1Mi4uMWRmMDJkMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTYwOSw2ICs2MDksOCBAQAogCXN0ciA9IGk4MDQyX3JlYWRfc3RhdHVzKCk7CiAJaWYgKHN0ciAmIEk4MDQyX1NUUl9PQkYpIHsKIAkJZGF0YSA9IGk4MDQyX3JlYWRfZGF0YSgpOworCQlkYmcoIiUwMnggPC0gaTgwNDIgKGF1eF90ZXN0X2lycSwgJXMpIiwKKwkJCWRhdGEsIHN0ciAmIEk4MDQyX1NUUl9BVVhEQVRBID8gImF1eCIgOiAia2JkIik7CiAJCWlmIChpODA0Ml9pcnFfYmVpbmdfdGVzdGVkICYmCiAJCSAgICBkYXRhID09IDB4YTUgJiYgKHN0ciAmIEk4MDQyX1NUUl9BVVhEQVRBKSkKIAkJCWNvbXBsZXRlKCZpODA0Ml9hdXhfaXJxX2RlbGl2ZXJlZCk7CkBAIC03NTAsNiArNzUyLDcgQEAKICAqIEFVWCBJUlEgd2FzIG5ldmVyIGRlbGl2ZXJlZCBzbyB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBjb250cm9sbGVyIHRvCiAgKiBnZXQgcmlkIG9mIHRoZSBieXRlIHdlIHB1dCB0aGVyZTsgb3RoZXJ3aXNlIGtleWJvYXJkIG1heSBub3Qgd29yay4KICAqLworCQlkYmcoIiAgICAgLS0gaTgwNDIgKGF1eCBpcnEgdGVzdCB0aW1lb3V0KSIpOwogCQlpODA0Ml9mbHVzaCgpOwogCQlyZXR2YWwgPSAtMTsKIAl9CkBAIC04MzMsMTcgKzgzNiwzMiBAQAogc3RhdGljIGludCBpODA0Ml9jb250cm9sbGVyX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBuID0gMDsKKwl1bnNpZ25lZCBjaGFyIGN0clsyXTsKIAogLyoKLSAqIFNhdmUgdGhlIENUUiBmb3IgcmVzdG9yYWwgb24gdW5sb2FkIC8gcmVib290LgorICogU2F2ZSB0aGUgQ1RSIGZvciByZXN0b3JlIG9uIHVubG9hZCAvIHJlYm9vdC4KICAqLwogCi0JaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2N0ciwgSTgwNDJfQ01EX0NUTF9SQ1RSKSkgewotCQlwcmludGsoS0VSTl9FUlIgImk4MDQyLmM6IENhbid0IHJlYWQgQ1RSIHdoaWxlIGluaXRpYWxpemluZyBpODA0Mi5cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9CisJZG8geworCQlpZiAobiA+PSAxMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImk4MDQyLmM6IFVuYWJsZSB0byBnZXQgc3RhYmxlIENUUiByZWFkLlxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCi0JaTgwNDJfaW5pdGlhbF9jdHIgPSBpODA0Ml9jdHI7CisJCWlmIChuICE9IDApCisJCQl1ZGVsYXkoNTApOworCisJCWlmIChpODA0Ml9jb21tYW5kKCZjdHJbbisrICUgMl0sIEk4MDQyX0NNRF9DVExfUkNUUikpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJpODA0Mi5jOiBDYW4ndCByZWFkIENUUiB3aGlsZSBpbml0aWFsaXppbmcgaTgwNDIuXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwl9IHdoaWxlIChuIDwgMiB8fCBjdHJbMF0gIT0gY3RyWzFdKTsKKworCWk4MDQyX2luaXRpYWxfY3RyID0gaTgwNDJfY3RyID0gY3RyWzBdOwogCiAvKgogICogRGlzYWJsZSB0aGUga2V5Ym9hcmQgaW50ZXJmYWNlIGFuZCBpbnRlcnJ1cHQuCkBAIC04OTIsNiArOTEwLDEyIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorLyoKKyAqIEZsdXNoIHdoYXRldmVyIGFjY3VtdWxhdGVkIHdoaWxlIHdlIHdlcmUgZGlzYWJsaW5nIGtleWJvYXJkIHBvcnQuCisgKi8KKworCWk4MDQyX2ZsdXNoKCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTExLDcgKzkzNSw3IEBACiAJaTgwNDJfY3RyIHw9IEk4MDQyX0NUUl9LQkRESVMgfCBJODA0Ml9DVFJfQVVYRElTOwogCWk4MDQyX2N0ciAmPSB+KEk4MDQyX0NUUl9LQkRJTlQgfCBJODA0Ml9DVFJfQVVYSU5UKTsKIAotCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9pbml0aWFsX2N0ciwgSTgwNDJfQ01EX0NUTF9XQ1RSKSkKKwlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpODA0Mi5jOiBDYW4ndCB3cml0ZSBDVFIgd2hpbGUgcmVzZXR0aW5nLlxuIik7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYwppbmRleCA3NjliYTY1Li5mMzg3NmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCmluZGV4IGIwMzAwOWIuLjI3ZmRhYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwpAQCAtOSw2ICs5LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYwppbmRleCBiOTY5NGI2Li42ZDM0NTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYwppbmRleCBmMDYzMzJjLi5jMjFlNmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMKQEAgLTY0NSw3ICs2NDUsNyBAQAogCQlrZnJlZSh0cyk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZDc4NzlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCkBAIC03MzIsNyArNzMyLDcgQEAKIAkJa2ZyZWUodHMpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgYWQ3ODc5X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMKaW5kZXggNTdkMjYzNi4uZGM1MDZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jIGIvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMKaW5kZXggOGIyNTZhNi4uMzY5N2M0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMKKysrIGIvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNlbHNlCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbmlmLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlICJpc2RuX2RpdmVydC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2FyY29maS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FyY29maS5jCmluZGV4IGQzMGNlNWIuLjg1YThmZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hcmNvZmkuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXJjb2ZpLmMKQEAgLTEwLDYgKzEwLDcgQEAKICAqCiAgKi8KICAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImhpc2F4LmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAjaW5jbHVkZSAiaXNhYy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY18yYmRzMC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY18yYmRzMC5jCmluZGV4IDVjNDZhNzEuLjhkMjJmNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJkczAuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiZHMwLmMKQEAgLTExLDYgKzExLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJoZmNfMmJkczAuaCIKICNpbmNsdWRlICJpc2RubDEuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCmluZGV4IGQxMTBhNzcuLjEwOTE0NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImhmY19wY2kuaCIKICNpbmNsdWRlICJpc2RubDEuaCIKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiBzdGF0aWMgY29uc3QgY2hhciAqaGZjcGNpX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS40OC4yLjQgJCI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jCmluZGV4IDhmOWY0OTEuLjkwYjM1ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jcmVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCmluZGV4IDg5OTFkMmMuLjhiY2FlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSAiaHlzZG5fZGVmcy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3BjYml0L2Rydi5jIGIvZHJpdmVycy9pc2RuL3BjYml0L2Rydi5jCmluZGV4IDhjNjZiY2IuLjEyM2MxZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9wY2JpdC9kcnYuYworKysgYi9kcml2ZXJzL2lzZG4vcGNiaXQvZHJ2LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYwppbmRleCBlMDc1ZThkLi4zMGYwZjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKKysrIGIvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMgYi9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jCmluZGV4IGRkMGFjZDAuLjVhMDc3NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL3NjL2luaXQuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImluY2x1ZGVzLmgiCiAjaW5jbHVkZSAiaGFyZHdhcmUuaCIKICNpbmNsdWRlICJjYXJkLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmluZGV4IDdjOGU3MTIuLmU0ZjU5OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0xNTAsOSArMTUwLDkgQEAKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIE4uUy4gTFAzOTQ0IChGdW4gTGlnaHQpIEkyQyBjaGlwIgogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBJMkMKIAloZWxwCi0gICAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBMRURzIGNvbm5lY3RlZCB0byB0aGUgTmF0aW9uYWwKLSAgICBTZW1pY29uZHVjdG9yIExQMzk0NCBMaWdodGluZyBNYW5hZ2VtZW50IFVuaXQgKExNVSkgYWxzbyBrbm93biBhcwotICAgIEZ1biBMaWdodCBDaGlwLgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBMRURzIGNvbm5lY3RlZCB0byB0aGUgTmF0aW9uYWwKKwkgIFNlbWljb25kdWN0b3IgTFAzOTQ0IExpZ2h0aW5nIE1hbmFnZW1lbnQgVW5pdCAoTE1VKSBhbHNvIGtub3duIGFzCisJICBGdW4gTGlnaHQgQ2hpcC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGVkcy1scDM5NDQuCkBAIC0xOTUsNiArMTk1LDEzIEBACiAJICBMRUQgZHJpdmVyIGNoaXBzIGFjY2Vzc2VkIHZpYSB0aGUgSTJDIGJ1cy4gIFN1cHBvcnRlZAogCSAgZGV2aWNlcyBpbmNsdWRlIFBDQTk1NTAsIFBDQTk1NTEsIFBDQTk1NTIsIGFuZCBQQ0E5NTUzLgogCitjb25maWcgTEVEU19XTTgzMVhfU1RBVFVTCisJdHJpc3RhdGUgIkxFRCBzdXBwb3J0IGZvciBzdGF0dXMgTEVEcyBvbiBXTTgzMXggUE1JQ3MiCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIE1GRF9XTTgzMVgKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBzdGF0dXMgTEVEcyBvZiB0aGUgV004MzF4CisgICAgICAgICAgc2VyaWVzIG9mIFBNSUNzLgorCiBjb25maWcgTEVEU19XTTgzNTAKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIFdNODM1MCBBdWRpb1BsdXMgUE1JQyIKIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTUZEX1dNODM1MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL01ha2VmaWxlIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCmluZGV4IGU4Y2RjZjcuLjQ2ZDcyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDcgQEAKIG9iai0kKENPTkZJR19MRURTX0ZTRykJCQkrPSBsZWRzLWZzZy5vCiBvYmotJChDT05GSUdfTEVEU19QQ0E5NTVYKQkJKz0gbGVkcy1wY2E5NTV4Lm8KIG9iai0kKENPTkZJR19MRURTX0RBOTAzWCkJCSs9IGxlZHMtZGE5MDN4Lm8KK29iai0kKENPTkZJR19MRURTX1dNODMxWF9TVEFUVVMpCSs9IGxlZHMtd204MzF4LXN0YXR1cy5vCiBvYmotJChDT05GSUdfTEVEU19XTTgzNTApCQkrPSBsZWRzLXdtODM1MC5vCiBvYmotJChDT05GSUdfTEVEU19QV00pCQkJKz0gbGVkcy1wd20ubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jbGV2by1tYWlsLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jbGV2by1tYWlsLmMKaW5kZXggZjIyNDJkYi4uYTQ5ODEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY2xldm8tbWFpbC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNsZXZvLW1haWwuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJLmZsYWdzCQkJPSBMRURfQ09SRV9TVVNQRU5EUkVTVU1FLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgY2xldm9fbWFpbF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNsZXZvX21haWxfbGVkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcmV0dXJuIGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmY2xldm9fbWFpbF9sZWQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1xdWJlLmMKaW5kZXggMDU5YWEyOS4uODgxNjgwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jCkBAIC0yOCw3ICsyOCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHF1YmVfZnJvbnRfbGVkID0gewotCS5uYW1lCQkJPSAicXViZS1mcm9udCIsCisJLm5hbWUJCQk9ICJxdWJlOjpmcm9udCIsCiAJLmJyaWdodG5lc3MJCT0gTEVEX0ZVTEwsCiAJLmJyaWdodG5lc3Nfc2V0CQk9IHF1YmVfZnJvbnRfbGVkX3NldCwKIAkuZGVmYXVsdF90cmlnZ2VyCT0gImlkZS1kaXNrIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1yYXEuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1yYXEuYwppbmRleCA1ZjFjZTgxLi5kZWZjMjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcmFxLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXJhcS5jCkBAIC00OSw3ICs0OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHJhcV93ZWJfbGVkID0gewotCS5uYW1lCQk9ICJyYXEtd2ViIiwKKwkubmFtZQkJPSAicmFxOjp3ZWIiLAogCS5icmlnaHRuZXNzX3NldAk9IHJhcV93ZWJfbGVkX3NldCwKIH07CiAKQEAgLTcwLDcgKzcwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgcmFxX3Bvd2VyX29mZl9sZWQgPSB7Ci0JLm5hbWUJCQk9ICJyYXEtcG93ZXItb2ZmIiwKKwkubmFtZQkJCT0gInJhcTo6cG93ZXItb2ZmIiwKIAkuYnJpZ2h0bmVzc19zZXQJCT0gcmFxX3Bvd2VyX29mZl9sZWRfc2V0LAogCS5kZWZhdWx0X3RyaWdnZXIJPSAicG93ZXItb2ZmIiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMKaW5kZXggNmIwNjYzOC4uZTUyMjVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYwpAQCAtNzgsOSArNzgsMTEgQEAKIHsKIAlpbnQgcmV0LCBzdGF0ZTsKIAorCWxlZF9kYXQtPmdwaW8gPSAtMTsKKwogCS8qIHNraXAgbGVkcyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgKi8KIAlpZiAoIWdwaW9faXNfdmFsaWQodGVtcGxhdGUtPmdwaW8pKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlNraXBwaW5nIHVuYXZpbGFibGUgTEVEIGdwaW8gJWQgKCVzKVxuIiwgCisJCXByaW50ayhLRVJOX0lORk8gIlNraXBwaW5nIHVuYXZhaWxhYmxlIExFRCBncGlvICVkICglcylcbiIsCiAJCQkJdGVtcGxhdGUtPmdwaW8sIHRlbXBsYXRlLT5uYW1lKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jIGIvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jCmluZGV4IGRiYTg5MjEuLmFkYzU2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKQEAgLTE5LDkgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLXBjYTk1MzIuaD4KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgLyoweDYwLCovIEkyQ19DTElFTlRfRU5EfTsKLUkyQ19DTElFTlRfSU5TTU9EXzEocGNhOTUzMik7Ci0KICNkZWZpbmUgUENBOTUzMl9SRUdfUFNDKGkpICgweDIrKGkpKjIpCiAjZGVmaW5lIFBDQTk1MzJfUkVHX1BXTShpKSAoMHgzKyhpKSoyKQogI2RlZmluZSBQQ0E5NTMyX1JFR19MUzAgIDB4NgpAQCAtMzQsNyArMzEsNyBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHBjYTk1MzJfbGVkIGxlZHNbMTZdOwogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICAgICppZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJdTggcHdtWzJdOwogCXU4IHBzY1syXTsKQEAgLTUzLDkgKzUwLDkgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBjYTk1MzJfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lICAgPSAicGNhOTUzMiIsCisJCS5uYW1lID0gInBjYTk1MzIiLAogCX0sCi0JLnByb2JlICA9IHBjYTk1MzJfcHJvYmUsCisJLnByb2JlID0gcGNhOTUzMl9wcm9iZSwKIAkucmVtb3ZlID0gcGNhOTUzMl9yZW1vdmUsCiAJLmlkX3RhYmxlID0gcGNhOTUzMl9pZCwKIH07CkBAIC0xNDksNyArMTQ2LDcgQEAKIAogCWlmICgqZGVsYXlfb24gPT0gMCAmJiAqZGVsYXlfb2ZmID09IDApIHsKIAkvKiBsZWQgc3Vic3lzdGVtIGFzayB1cyBmb3IgYSBibGluayByYXRlICovCi0JCSpkZWxheV9vbiAgPSAxMDAwOworCQkqZGVsYXlfb24gPSAxMDAwOwogCQkqZGVsYXlfb2ZmID0gMTAwMDsKIAl9CiAJaWYgKCpkZWxheV9vbiAhPSAqZGVsYXlfb2ZmIHx8ICpkZWxheV9vbiA+IDE2OTAgfHwgKmRlbGF5X29uIDwgNikKQEAgLTIyNyw3ICsyMjQsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUENBOTUzMl9UWVBFX0xFRDoKIAkJCWxlZC0+c3RhdGUgPSBwbGVkLT5zdGF0ZTsKLQkJCWxlZC0+bmFtZSA9ICBwbGVkLT5uYW1lOworCQkJbGVkLT5uYW1lID0gcGxlZC0+bmFtZTsKIAkJCWxlZC0+bGRldi5uYW1lID0gbGVkLT5uYW1lOwogCQkJbGVkLT5sZGV2LmJyaWdodG5lc3MgPSBMRURfT0ZGOwogCQkJbGVkLT5sZGV2LmJyaWdodG5lc3Nfc2V0ID0gcGNhOTUzMl9zZXRfYnJpZ2h0bmVzczsKQEAgLTI1NCw3ICsyNTEsNyBAQAogCQkJZGF0YS0+aWRldi0+bmFtZSA9IHBsZWQtPm5hbWU7CiAJCQlkYXRhLT5pZGV2LT5waHlzID0gImkyYy9wY2E5NTMyIjsKIAkJCWRhdGEtPmlkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKLQkJCWRhdGEtPmlkZXYtPmlkLnZlbmRvciAgPSAweDAwMWY7CisJCQlkYXRhLT5pZGV2LT5pZC52ZW5kb3IgPSAweDAwMWY7CiAJCQlkYXRhLT5pZGV2LT5pZC5wcm9kdWN0ID0gMHgwMDAxOwogCQkJZGF0YS0+aWRldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAkJCWRhdGEtPmlkZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfU05EKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXdtODMxeC1zdGF0dXMuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXdtODMxeC1zdGF0dXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTg2ZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtd204MzF4LXN0YXR1cy5jCkBAIC0wLDAgKzEsMzQxIEBACisvKgorICogTEVEIGRyaXZlciBmb3IgV004MzF4IHN0YXR1cyBMRURzCisgKgorICogQ29weXJpZ2h0KEMpIDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L3BkYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9zdGF0dXMuaD4KKworCitzdHJ1Y3Qgd204MzF4X3N0YXR1cyB7CisJc3RydWN0IGxlZF9jbGFzc2RldiBjZGV2OworCXN0cnVjdCB3bTgzMXggKndtODMxeDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwlzcGlubG9ja190IHZhbHVlX2xvY2s7CisJaW50IHJlZzsgICAgIC8qIENvbnRyb2wgcmVnaXN0ZXIgKi8KKwlpbnQgcmVnX3ZhbDsgLyogQ29udHJvbCByZWdpc3RlciB2YWx1ZSAqLworCisJaW50IGJsaW5rOworCWludCBibGlua190aW1lOworCWludCBibGlua19jeWM7CisJaW50IHNyYzsKKwllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7Cit9OworCisjZGVmaW5lIHRvX3dtODMxeF9zdGF0dXMobGVkX2NkZXYpIFwKKwljb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCB3bTgzMXhfc3RhdHVzLCBjZGV2KQorCitzdGF0aWMgdm9pZCB3bTgzMXhfc3RhdHVzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpsZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdtODMxeF9zdGF0dXMsCisJCQkJCQkgd29yayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW11dGV4X2xvY2soJmxlZC0+bXV0ZXgpOworCisJbGVkLT5yZWdfdmFsICY9IH4oV004MzFYX0xFRF9TUkNfTUFTSyB8IFdNODMxWF9MRURfTU9ERV9NQVNLIHwKKwkJCSAgV004MzFYX0xFRF9EVVRZX0NZQ19NQVNLIHwgV004MzFYX0xFRF9EVVJfTUFTSyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGVkLT52YWx1ZV9sb2NrLCBmbGFncyk7CisKKwlsZWQtPnJlZ192YWwgfD0gbGVkLT5zcmMgPDwgV004MzFYX0xFRF9TUkNfU0hJRlQ7CisJaWYgKGxlZC0+YmxpbmspIHsKKwkJbGVkLT5yZWdfdmFsIHw9IDIgPDwgV004MzFYX0xFRF9NT0RFX1NISUZUOworCQlsZWQtPnJlZ192YWwgfD0gbGVkLT5ibGlua190aW1lIDw8IFdNODMxWF9MRURfRFVSX1NISUZUOworCQlsZWQtPnJlZ192YWwgfD0gbGVkLT5ibGlua19jeWM7CisJfSBlbHNlIHsKKwkJaWYgKGxlZC0+YnJpZ2h0bmVzcyAhPSBMRURfT0ZGKQorCQkJbGVkLT5yZWdfdmFsIHw9IDEgPDwgV004MzFYX0xFRF9NT0RFX1NISUZUOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworCisJd204MzF4X3JlZ193cml0ZShsZWQtPndtODMxeCwgbGVkLT5yZWcsIGxlZC0+cmVnX3ZhbCk7CisKKwltdXRleF91bmxvY2soJmxlZC0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCB3bTgzMXhfc3RhdHVzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmxlZCA9IHRvX3dtODMxeF9zdGF0dXMobGVkX2NkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGVkLT52YWx1ZV9sb2NrLCBmbGFncyk7CisJbGVkLT5icmlnaHRuZXNzID0gdmFsdWU7CisJaWYgKHZhbHVlID09IExFRF9PRkYpCisJCWxlZC0+YmxpbmsgPSAwOworCXNjaGVkdWxlX3dvcmsoJmxlZC0+d29yayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGVkLT52YWx1ZV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X3N0YXR1c19ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCisJCQkJICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQoreworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpsZWQgPSB0b193bTgzMXhfc3RhdHVzKGxlZF9jZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJLyogUGljayBzb21lIGRlZmF1bHRzIGlmIHdlJ3ZlIG5vdCBiZWVuIGdpdmVuIHRpbWVzICovCisJaWYgKCpkZWxheV9vbiA9PSAwICYmICpkZWxheV9vZmYgPT0gMCkgeworCQkqZGVsYXlfb24gPSAyNTA7CisJCSpkZWxheV9vZmYgPSAyNTA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworCisJLyogV2Ugb25seSBoYXZlIGEgbGltaXRlZCBzZWxlY3Rpb24gb2Ygc2V0dGluZ3MsIHNlZSBpZiB3ZSBjYW4KKwkgKiBzdXBwb3J0IHRoZSBjb25maWd1cmF0aW9uIHdlJ3JlIGJlaW5nIGdpdmVuICovCisJc3dpdGNoICgqZGVsYXlfb24pIHsKKwljYXNlIDEwMDA6CisJCWxlZC0+YmxpbmtfdGltZSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjUwOgorCQlsZWQtPmJsaW5rX3RpbWUgPSAxOworCQlicmVhazsKKwljYXNlIDEyNToKKwkJbGVkLT5ibGlua190aW1lID0gMjsKKwkJYnJlYWs7CisJY2FzZSA2MjoKKwljYXNlIDYzOgorCQkvKiBBY3R1YWxseSA2Mi41bXMgKi8KKwkJbGVkLT5ibGlua190aW1lID0gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCA9PSAwKSB7CisJCXN3aXRjaCAoKmRlbGF5X29mZiAvICpkZWxheV9vbikgeworCQljYXNlIDE6CisJCQlsZWQtPmJsaW5rX2N5YyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbGVkLT5ibGlua19jeWMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWxlZC0+YmxpbmtfY3ljID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQlsZWQtPmJsaW5rX2N5YyA9IDM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChyZXQgPT0gMCkKKwkJbGVkLT5ibGluayA9IDE7CisJZWxzZQorCQlsZWQtPmJsaW5rID0gMDsKKworCS8qIEFsd2F5cyB1cGRhdGU7IGlmIHdlIGZhaWwgdHVybiBvZmYgYmxpbmtpbmcgc2luY2Ugd2UgZXhwZWN0CisJICogYSBzb2Z0d2FyZSBmYWxsYmFjay4gKi8KKwlzY2hlZHVsZV93b3JrKCZsZWQtPndvcmspOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGVkLT52YWx1ZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbGVkX3NyY190ZXh0c1tdID0geworCSJvdHAiLAorCSJwb3dlciIsCisJImNoYXJnZXIiLAorCSJzb2Z0IiwKK307CisKK3N0YXRpYyBzc2l6ZV90IHdtODMxeF9zdGF0dXNfc3JjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqbGVkID0gdG9fd204MzF4X3N0YXR1cyhsZWRfY2Rldik7CisJaW50IGk7CisJc3NpemVfdCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmbGVkLT5tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsZWRfc3JjX3RleHRzKTsgaSsrKQorCQlpZiAoaSA9PSBsZWQtPnNyYykKKwkJCXJldCArPSBzcHJpbnRmKCZidWZbcmV0XSwgIlslc10gIiwgbGVkX3NyY190ZXh0c1tpXSk7CisJCWVsc2UKKwkJCXJldCArPSBzcHJpbnRmKCZidWZbcmV0XSwgIiVzICIsIGxlZF9zcmNfdGV4dHNbaV0pOworCisJbXV0ZXhfdW5sb2NrKCZsZWQtPm11dGV4KTsKKworCXJldCArPSBzcHJpbnRmKCZidWZbcmV0XSwgIlxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCB3bTgzMXhfc3RhdHVzX3NyY19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmxlZCA9IHRvX3dtODMxeF9zdGF0dXMobGVkX2NkZXYpOworCWNoYXIgbmFtZVsyMF07CisJaW50IGk7CisJc2l6ZV90IGxlbjsKKworCW5hbWVbc2l6ZW9mKG5hbWUpIC0gMV0gPSAnXDAnOworCXN0cm5jcHkobmFtZSwgYnVmLCBzaXplb2YobmFtZSkgLSAxKTsKKwlsZW4gPSBzdHJsZW4obmFtZSk7CisKKwlpZiAobGVuICYmIG5hbWVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbmFtZVtsZW4gLSAxXSA9ICdcMCc7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsZWRfc3JjX3RleHRzKTsgaSsrKSB7CisJCWlmICghc3RyY21wKG5hbWUsIGxlZF9zcmNfdGV4dHNbaV0pKSB7CisJCQltdXRleF9sb2NrKCZsZWQtPm11dGV4KTsKKworCQkJbGVkLT5zcmMgPSBpOworCQkJc2NoZWR1bGVfd29yaygmbGVkLT53b3JrKTsKKworCQkJbXV0ZXhfdW5sb2NrKCZsZWQtPm11dGV4KTsKKwkJfQorCX0KKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc3JjLCAwNjQ0LCB3bTgzMXhfc3RhdHVzX3NyY19zaG93LCB3bTgzMXhfc3RhdHVzX3NyY19zdG9yZSk7CisKK3N0YXRpYyBpbnQgd204MzF4X3N0YXR1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgd204MzF4X3BkYXRhICpjaGlwX3BkYXRhOworCXN0cnVjdCB3bTgzMXhfc3RhdHVzX3BkYXRhIHBkYXRhOworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpkcnZkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpZCA9IHBkZXYtPmlkICUgQVJSQVlfU0laRShjaGlwX3BkYXRhLT5zdGF0dXMpOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIEkvTyByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCWRydmRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204MzF4X3N0YXR1cyksIEdGUF9LRVJORUwpOworCWlmICghZHJ2ZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGRydmRhdGEpOworCisJZHJ2ZGF0YS0+d204MzF4ID0gd204MzF4OworCWRydmRhdGEtPnJlZyA9IHJlcy0+c3RhcnQ7CisKKwlpZiAod204MzF4LT5kZXYtPnBsYXRmb3JtX2RhdGEpCisJCWNoaXBfcGRhdGEgPSB3bTgzMXgtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwllbHNlCisJCWNoaXBfcGRhdGEgPSBOVUxMOworCisJbWVtc2V0KCZwZGF0YSwgMCwgc2l6ZW9mKHBkYXRhKSk7CisJaWYgKGNoaXBfcGRhdGEgJiYgY2hpcF9wZGF0YS0+c3RhdHVzW2lkXSkKKwkJbWVtY3B5KCZwZGF0YSwgY2hpcF9wZGF0YS0+c3RhdHVzW2lkXSwgc2l6ZW9mKHBkYXRhKSk7CisJZWxzZQorCQlwZGF0YS5uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CisKKwltdXRleF9pbml0KCZkcnZkYXRhLT5tdXRleCk7CisJSU5JVF9XT1JLKCZkcnZkYXRhLT53b3JrLCB3bTgzMXhfc3RhdHVzX3dvcmspOworCXNwaW5fbG9ja19pbml0KCZkcnZkYXRhLT52YWx1ZV9sb2NrKTsKKworCS8qIFdlIGNhY2hlIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGFuZCByZWFkIHN0YXJ0dXAgdmFsdWVzCisJICogZnJvbSBpdC4gKi8KKwlkcnZkYXRhLT5yZWdfdmFsID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgZHJ2ZGF0YS0+cmVnKTsKKworCWlmIChkcnZkYXRhLT5yZWdfdmFsICYgV004MzFYX0xFRF9NT0RFX01BU0spCisJCWRydmRhdGEtPmJyaWdodG5lc3MgPSBMRURfRlVMTDsKKwllbHNlCisJCWRydmRhdGEtPmJyaWdodG5lc3MgPSBMRURfT0ZGOworCisJLyogU2V0IGEgZGVmYXVsdCBzb3VyY2UgaWYgY29uZmlndXJlZCwgb3RoZXJ3aXNlIGxlYXZlIHRoZQorCSAqIGN1cnJlbnQgaGFyZHdhcmUgc2V0dGluZy4KKwkgKi8KKwlpZiAocGRhdGEuZGVmYXVsdF9zcmMgPT0gV004MzFYX1NUQVRVU19QUkVTRVJWRSkgeworCQlkcnZkYXRhLT5zcmMgPSBkcnZkYXRhLT5yZWdfdmFsOworCQlkcnZkYXRhLT5zcmMgJj0gV004MzFYX0xFRF9TUkNfTUFTSzsKKwkJZHJ2ZGF0YS0+c3JjID4+PSBXTTgzMVhfTEVEX1NSQ19TSElGVDsKKwl9IGVsc2UgeworCQlkcnZkYXRhLT5zcmMgPSBwZGF0YS5kZWZhdWx0X3NyYyAtIDE7CisJfQorCisJZHJ2ZGF0YS0+Y2Rldi5uYW1lID0gcGRhdGEubmFtZTsKKwlkcnZkYXRhLT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHBkYXRhLmRlZmF1bHRfdHJpZ2dlcjsKKwlkcnZkYXRhLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gd204MzF4X3N0YXR1c19zZXQ7CisJZHJ2ZGF0YS0+Y2Rldi5ibGlua19zZXQgPSB3bTgzMXhfc3RhdHVzX2JsaW5rX3NldDsKKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3bTgzMXgtPmRldiwgJmRydmRhdGEtPmNkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBMRUQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9sZWQ7CisJfQorCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRydmRhdGEtPmNkZXYuZGV2LCAmZGV2X2F0dHJfc3JjKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJObyBzb3VyY2UgY29udHJvbCBmb3IgTEVEOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiAwOworCitlcnJfbGVkOgorCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkcnZkYXRhLT5jZGV2KTsKKwlrZnJlZShkcnZkYXRhKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODMxeF9zdGF0dXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmRydmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldmljZV9yZW1vdmVfZmlsZShkcnZkYXRhLT5jZGV2LmRldiwgJmRldl9hdHRyX3NyYyk7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmRydmRhdGEtPmNkZXYpOworCWtmcmVlKGRydmRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdtODMxeF9zdGF0dXNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gIndtODMxeC1zdGF0dXMiLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKKwkucHJvYmUgPSB3bTgzMXhfc3RhdHVzX3Byb2JlLAorCS5yZW1vdmUgPSB3bTgzMXhfc3RhdHVzX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtODMxeF9zdGF0dXNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndtODMxeF9zdGF0dXNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtODMxeF9zdGF0dXNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIHdtODMxeF9zdGF0dXNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTgzMXhfc3RhdHVzX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTgzMXhfc3RhdHVzX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiV004MzF4IHN0YXR1cyBMRUQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODMxeC1zdGF0dXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWdwaW8uYyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWdwaW8uYwppbmRleCAxYmM1ZGI0Li5mNTkxMzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkdHJpZy1ncGlvLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctZ3Bpby5jCkBAIC00NCwyMiArNDQsMjIgQEAKIAkJCXN0cnVjdCBncGlvX3RyaWdfZGF0YSwgd29yayk7CiAJaW50IHRtcDsKIAotICAgICAgIGlmICghZ3Bpb19kYXRhLT5ncGlvKQotCSAgICAgICByZXR1cm47CisJaWYgKCFncGlvX2RhdGEtPmdwaW8pCisJCXJldHVybjsKIAotICAgICAgIHRtcCA9IGdwaW9fZ2V0X3ZhbHVlKGdwaW9fZGF0YS0+Z3Bpbyk7Ci0gICAgICAgaWYgKGdwaW9fZGF0YS0+aW52ZXJ0ZWQpCi0JICAgICAgIHRtcCA9ICF0bXA7CisJdG1wID0gZ3Bpb19nZXRfdmFsdWUoZ3Bpb19kYXRhLT5ncGlvKTsKKwlpZiAoZ3Bpb19kYXRhLT5pbnZlcnRlZCkKKwkJdG1wID0gIXRtcDsKIAotICAgICAgIGlmICh0bXApIHsKLSAgICAgICAgICAgICAgIGlmIChncGlvX2RhdGEtPmRlc2lyZWRfYnJpZ2h0bmVzcykKLSAgICAgICAgICAgICAgICAgICAgICAgbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bpb19kYXRhLT5kZXNpcmVkX2JyaWdodG5lc3MpOwotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICBsZWRfc2V0X2JyaWdodG5lc3MoZ3Bpb19kYXRhLT5sZWQsIExFRF9GVUxMKTsKLSAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLCBMRURfT0ZGKTsKLSAgICAgICB9CisJaWYgKHRtcCkgeworCQlpZiAoZ3Bpb19kYXRhLT5kZXNpcmVkX2JyaWdodG5lc3MpCisJCQlsZWRfc2V0X2JyaWdodG5lc3MoZ3Bpb19kYXRhLT5sZWQsCisJCQkJCSAgIGdwaW9fZGF0YS0+ZGVzaXJlZF9icmlnaHRuZXNzKTsKKwkJZWxzZQorCQkJbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLCBMRURfRlVMTCk7CisJfSBlbHNlIHsKKwkJbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLCBMRURfT0ZGKTsKKwl9CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGdwaW9fdHJpZ19icmlnaHRuZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYyBiL2RyaXZlcnMvbGd1ZXN0L2ludGVycnVwdHNfYW5kX3RyYXBzLmMKaW5kZXggMTg2NDgxOC4uZGFhZjg2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYworKysgYi9kcml2ZXJzL2xndWVzdC9pbnRlcnJ1cHRzX2FuZF90cmFwcy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAibGcuaCIKIAogLyogQWxsb3cgR3Vlc3RzIHRvIHVzZSBhIG5vbi0xMjggKGllLiBub24tTGludXgpIHN5c2NhbGwgdHJhcC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jCmluZGV4IGI0ZDNmN2MuLmJkMTYzMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X3VzZXIuYwpAQCAtNTA4LDcgKzUwOCw3IEBACiAgKiB1c2VzOiByZWFkaW5nIGFuZCB3cml0aW5nIGEgY2hhcmFjdGVyIGRldmljZSBjYWxsZWQgL2Rldi9sZ3Vlc3QuICBBbGwgdGhlCiAgKiB3b3JrIGhhcHBlbnMgaW4gdGhlIHJlYWQoKSwgd3JpdGUoKSBhbmQgY2xvc2UoKSByb3V0aW5lczoKICAqLwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGd1ZXN0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsZ3Vlc3RfZm9wcyA9IHsKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UgPSBjbG9zZSwKIAkud3JpdGUJID0gd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKaW5kZXggZmRlMzc3Yy4uNTU2ZjBmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwpAQCAtMTI0LDYgKzEyNCw4IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0aGVybW9zdGF0X2RyaXZlcjsKKwogc3RhdGljIGludAogYXR0YWNoX3RoZXJtb3N0YXQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewpAQCAtMTQ4LDcgKzE1MCw3IEBACiAJICogTGV0IGkyYy1jb3JlIGRlbGV0ZSB0aGF0IGRldmljZSBvbiBkcml2ZXIgcmVtb3ZhbC4KIAkgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBpMmMtY29yZSBob2xkcyB0aGUgY29yZV9sb2NrIG11dGV4IGZvciB1cy4KIAkgKi8KLQlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmY2xpZW50LT5kcml2ZXItPmNsaWVudHMpOworCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+ZGV0ZWN0ZWQsICZ0aGVybW9zdGF0X2RyaXZlci5jbGllbnRzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCmluZGV4IGEwMjg1OTguLmVhMzJjN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKQEAgLTI4Niw2ICsyODYsOCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGhlcm1fcG03Ml9kcml2ZXI7CisKIC8qCiAgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBpMmNfY2xpZW50IHN0cnVjdHVyZSBhbmQKICAqIGF0dGFjaCBpdCB0byBvbmUgb2YgdTMgYWRhcHRlcnMKQEAgLTMxOCw3ICszMjAsNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2x0LT5kZXRlY3RlZCwgJmNsdC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbHQtPmRldGVjdGVkLCAmdGhlcm1fcG03Ml9kcml2ZXIuY2xpZW50cyk7CiAJcmV0dXJuIGNsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1sZWQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMKaW5kZXggNTVhZDk1Ni4uZDI0Mjk3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1sZWQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWxlZC5jCkBAIC03Miw3ICs3Miw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHBtdV9sZWQgPSB7Ci0JLm5hbWUgPSAicG11LWZyb250LWxlZCIsCisJLm5hbWUgPSAicG11LWxlZDo6ZnJvbnQiLAogI2lmZGVmIENPTkZJR19BREJfUE1VX0xFRF9JREUKIAkuZGVmYXVsdF90cmlnZ2VyID0gImlkZS1kaXNrIiwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCmluZGV4IGI0MGZiOWIuLjZmMzA4YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKQEAgLTQwNSw3ICs0MDUsMTEgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBjYW4ndCBtYXAgaW50ZXJydXB0XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmIChyZXF1ZXN0X2lycShpcnEsIHZpYV9wbXVfaW50ZXJydXB0LCAwLCAiVklBLVBNVSIsICh2b2lkICopMCkpIHsKKwkvKiBXZSBzZXQgSVJRRl9USU1FUiBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGludGVycnVwdCB0byBiZSBkaXNhYmxlZAorCSAqIGJldHdlZW4gdGhlIDIgcGFzc2VzIG9mIGRyaXZlciBzdXNwZW5kLCB3ZSBjb250cm9sIG91ciBvd24gZGlzYWJsaW5nCisJICogZm9yIHRoYXQgb25lCisJICovCisJaWYgKHJlcXVlc3RfaXJxKGlycSwgdmlhX3BtdV9pbnRlcnJ1cHQsIElSUUZfVElNRVIsICJWSUEtUE1VIiwgKHZvaWQgKikwKSkgewogCQlwcmludGsoS0VSTl9FUlIgInZpYS1wbXU6IGNhbid0IHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00MTksNyArNDIzLDcgQEAKIAkJCWdwaW9faXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZ3Bpb19ub2RlLCAwKTsKIAogCQlpZiAoZ3Bpb19pcnEgIT0gTk9fSVJRKSB7Ci0JCQlpZiAocmVxdWVzdF9pcnEoZ3Bpb19pcnEsIGdwaW8xX2ludGVycnVwdCwgMCwKKwkJCWlmIChyZXF1ZXN0X2lycShncGlvX2lycSwgZ3BpbzFfaW50ZXJydXB0LCBJUlFGX1RJTUVSLAogCQkJCQkiR1BJTzEgQURCIiwgKHZvaWQgKikwKSkKIAkJCQlwcmludGsoS0VSTl9FUlIgInBtdTogY2FuJ3QgZ2V0IGlycSAlZCIKIAkJCQkgICAgICAgIiAoR1BJTzEpXG4iLCBncGlvX2lycSk7CkBAIC05MjUsOCArOTI5LDcgQEAKIAogI2lmZGVmIENPTkZJR19BREIKIC8qIFNlbmQgYW4gQURCIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQKLXBtdV9zZW5kX3JlcXVlc3Qoc3RydWN0IGFkYl9yZXF1ZXN0ICpyZXEsIGludCBzeW5jKQorc3RhdGljIGludCBwbXVfc2VuZF9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxLCBpbnQgc3luYykKIHsKIAlpbnQgaSwgcmV0OwogCkBAIC0xMDA1LDE2ICsxMDA4LDExIEBACiB9CiAKIC8qIEVuYWJsZS9kaXNhYmxlIGF1dG9wb2xsaW5nICovCi1zdGF0aWMgaW50Ci1wbXVfYWRiX2F1dG9wb2xsKGludCBkZXZzKQorc3RhdGljIGludCBfX3BtdV9hZGJfYXV0b3BvbGwoaW50IGRldnMpCiB7CiAJc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKIAotCWlmICgodmlhcyA9PSBOVUxMKSB8fCAoIXBtdV9mdWxseV9pbml0ZWQpIHx8ICFwbXVfaGFzX2FkYikKLQkJcmV0dXJuIC1FTlhJTzsKLQogCWlmIChkZXZzKSB7Ci0JCWFkYl9kZXZfbWFwID0gZGV2czsKIAkJcG11X3JlcXVlc3QoJnJlcSwgTlVMTCwgNSwgUE1VX0FEQl9DTUQsIDAsIDB4ODYsCiAJCQkgICAgYWRiX2Rldl9tYXAgPj4gOCwgYWRiX2Rldl9tYXApOwogCQlwbXVfYWRiX2ZsYWdzID0gMjsKQEAgLTEwMjcsOSArMTAyNSwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBtdV9hZGJfYXV0b3BvbGwoaW50IGRldnMpCit7CisJaWYgKCh2aWFzID09IE5VTEwpIHx8ICghcG11X2Z1bGx5X2luaXRlZCkgfHwgIXBtdV9oYXNfYWRiKQorCQlyZXR1cm4gLUVOWElPOworCisJYWRiX2Rldl9tYXAgPSBkZXZzOworCXJldHVybiBfX3BtdV9hZGJfYXV0b3BvbGwoZGV2cyk7Cit9CisKIC8qIFJlc2V0IHRoZSBBREIgYnVzICovCi1zdGF0aWMgaW50Ci1wbXVfYWRiX3Jlc2V0X2J1cyh2b2lkKQorc3RhdGljIGludCBwbXVfYWRiX3Jlc2V0X2J1cyh2b2lkKQogewogCXN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CiAJaW50IHNhdmVfYXV0b3BvbGwgPSBhZGJfZGV2X21hcDsKQEAgLTEwMzgsMTMgKzEwNDQsMTMgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAogCS8qIGFueW9uZSBnb3QgYSBiZXR0ZXIgaWRlYT8/ICovCi0JcG11X2FkYl9hdXRvcG9sbCgwKTsKKwlfX3BtdV9hZGJfYXV0b3BvbGwoMCk7CiAKLQlyZXEubmJ5dGVzID0gNTsKKwlyZXEubmJ5dGVzID0gNDsKIAlyZXEuZG9uZSA9IE5VTEw7CiAJcmVxLmRhdGFbMF0gPSBQTVVfQURCX0NNRDsKLQlyZXEuZGF0YVsxXSA9IDA7Ci0JcmVxLmRhdGFbMl0gPSBBREJfQlVTUkVTRVQ7CisJcmVxLmRhdGFbMV0gPSBBREJfQlVTUkVTRVQ7CisJcmVxLmRhdGFbMl0gPSAwOwogCXJlcS5kYXRhWzNdID0gMDsKIAlyZXEuZGF0YVs0XSA9IDA7CiAJcmVxLnJlcGx5X2xlbiA9IDA7CkBAIC0xMDU2LDcgKzEwNjIsNyBAQAogCXBtdV93YWl0X2NvbXBsZXRlKCZyZXEpOwogCiAJaWYgKHNhdmVfYXV0b3BvbGwgIT0gMCkKLQkJcG11X2FkYl9hdXRvcG9sbChzYXZlX2F1dG9wb2xsKTsKKwkJX19wbXVfYWRiX2F1dG9wb2xsKHNhdmVfYXV0b3BvbGwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYwppbmRleCA1Mjk4ODZjLi5lZDY0MjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKQEAgLTExNSw2ICsxMTUsOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdmX2xtNzVfZHJpdmVyOworCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKndmX2xtNzVfY3JlYXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICB1OCBhZGRyLCBpbnQgZHMxNzc1LAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKmxvYykKQEAgLTE1Nyw3ICsxNTksNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJmNsaWVudC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmd2ZfbG03NV9kcml2ZXIuY2xpZW50cyk7CiAJcmV0dXJuIGNsaWVudDsKICBmYWlsOgogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKaW5kZXggZTJhNTVlYy4uYTY3YjM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCkBAIC04OCw2ICs4OCw4IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2ZfbWF4NjY5MF9kcml2ZXI7CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqd2ZfbWF4NjY5MF9jcmVhdGUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICAgdTggYWRkciwgY29uc3QgY2hhciAqbG9jKQogewpAQCAtMTE5LDcgKzEyMSw3IEBACiAJICogTGV0IGkyYy1jb3JlIGRlbGV0ZSB0aGF0IGRldmljZSBvbiBkcml2ZXIgcmVtb3ZhbC4KIAkgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBpMmMtY29yZSBob2xkcyB0aGUgY29yZV9sb2NrIG11dGV4IGZvciB1cy4KIAkgKi8KLQlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmY2xpZW50LT5kcml2ZXItPmNsaWVudHMpOworCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+ZGV0ZWN0ZWQsICZ3Zl9tYXg2NjkwX2RyaXZlci5jbGllbnRzKTsKIAlyZXR1cm4gY2xpZW50OwogCiAgZmFpbDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYwppbmRleCA1ZGE3MjllLi5lMjAzMzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jCkBAIC0xOTQsNiArMTk0LDggQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiB9OwogCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2Zfc2F0X2RyaXZlcjsKKwogc3RhdGljIHZvaWQgd2Zfc2F0X2NyZWF0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KQogewogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwpAQCAtMjIyLDcgKzIyNCw3IEBACiAJICogTGV0IGkyYy1jb3JlIGRlbGV0ZSB0aGF0IGRldmljZSBvbiBkcml2ZXIgcmVtb3ZhbC4KIAkgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBpMmMtY29yZSBob2xkcyB0aGUgY29yZV9sb2NrIG11dGV4IGZvciB1cy4KIAkgKi8KLQlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmY2xpZW50LT5kcml2ZXItPmNsaWVudHMpOworCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+ZGV0ZWN0ZWQsICZ3Zl9zYXRfZHJpdmVyLmNsaWVudHMpOwogfQogCiBzdGF0aWMgaW50IHdmX3NhdF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWQvTWFrZWZpbGUKaW5kZXggMWRjNDE4NS4uZTM1NWU3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21kL01ha2VmaWxlCkBAIC00Niw3ICs0Niw3IEBACiBvYmotJChDT05GSUdfRE1fWkVSTykJCSs9IGRtLXplcm8ubwogCiBxdWlldF9jbWRfdW5yb2xsID0gVU5ST0xMICAkQAotICAgICAgY21kX3Vucm9sbCA9ICQoUEVSTCkgJChzcmN0cmVlKS8kKHNyYykvdW5yb2xsLnBsICQoVU5ST0xMKSBcCisgICAgICBjbWRfdW5yb2xsID0gJChBV0spIC1mJChzcmN0cmVlKS8kKHNyYykvdW5yb2xsLmF3ayAtdk49JChVTlJPTEwpIFwKICAgICAgICAgICAgICAgICAgICA8ICQ8ID4gJEAgfHwgKCBybSAtZiAkQCAmJiBleGl0IDEgKQogCiBpZmVxICgkKENPTkZJR19BTFRJVkVDKSx5KQpAQCAtNTksNTYgKzU5LDU2IEBACiAKIHRhcmdldHMgKz0gcmFpZDZpbnQxLmMKICQob2JqKS9yYWlkNmludDEuYzogICBVTlJPTEwgOj0gMQotJChvYmopL3JhaWQ2aW50MS5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQxLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50Mi5jCiAkKG9iaikvcmFpZDZpbnQyLmM6ICAgVU5ST0xMIDo9IDIKLSQob2JqKS9yYWlkNmludDIuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50Mi5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDQuYwogJChvYmopL3JhaWQ2aW50NC5jOiAgIFVOUk9MTCA6PSA0Ci0kKG9iaikvcmFpZDZpbnQ0LmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDQuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQ4LmMKICQob2JqKS9yYWlkNmludDguYzogICBVTlJPTEwgOj0gOAotJChvYmopL3JhaWQ2aW50OC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQ4LmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50MTYuYwogJChvYmopL3JhaWQ2aW50MTYuYzogIFVOUk9MTCA6PSAxNgotJChvYmopL3JhaWQ2aW50MTYuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQxNi5jOiAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50MzIuYwogJChvYmopL3JhaWQ2aW50MzIuYzogIFVOUk9MTCA6PSAzMgotJChvYmopL3JhaWQ2aW50MzIuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQzMi5jOiAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiBDRkxBR1NfcmFpZDZhbHRpdmVjMS5vICs9ICQoYWx0aXZlY19mbGFncykKIHRhcmdldHMgKz0gcmFpZDZhbHRpdmVjMS5jCiAkKG9iaikvcmFpZDZhbHRpdmVjMS5jOiAgIFVOUk9MTCA6PSAxCi0kKG9iaikvcmFpZDZhbHRpdmVjMS5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2YWx0aXZlYzEuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiBDRkxBR1NfcmFpZDZhbHRpdmVjMi5vICs9ICQoYWx0aXZlY19mbGFncykKIHRhcmdldHMgKz0gcmFpZDZhbHRpdmVjMi5jCiAkKG9iaikvcmFpZDZhbHRpdmVjMi5jOiAgIFVOUk9MTCA6PSAyCi0kKG9iaikvcmFpZDZhbHRpdmVjMi5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2YWx0aXZlYzIuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiBDRkxBR1NfcmFpZDZhbHRpdmVjNC5vICs9ICQoYWx0aXZlY19mbGFncykKIHRhcmdldHMgKz0gcmFpZDZhbHRpdmVjNC5jCiAkKG9iaikvcmFpZDZhbHRpdmVjNC5jOiAgIFVOUk9MTCA6PSA0Ci0kKG9iaikvcmFpZDZhbHRpdmVjNC5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiBDRkxBR1NfcmFpZDZhbHRpdmVjOC5vICs9ICQoYWx0aXZlY19mbGFncykKIHRhcmdldHMgKz0gcmFpZDZhbHRpdmVjOC5jCiAkKG9iaikvcmFpZDZhbHRpdmVjOC5jOiAgIFVOUk9MTCA6PSA4Ci0kKG9iaikvcmFpZDZhbHRpdmVjOC5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2YWx0aXZlYzguYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiBxdWlldF9jbWRfbWt0YWJsZSA9IFRBQkxFICAgJEAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvYml0bWFwLmMgYi9kcml2ZXJzL21kL2JpdG1hcC5jCmluZGV4IDY5ODZiMDAuLjYwZTJiMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvYml0bWFwLmMKKysrIGIvZHJpdmVycy9tZC9iaXRtYXAuYwpAQCAtMTYyNCwxMCArMTYyNCwxMSBAQAogCWJpdG1hcC0+b2Zmc2V0ID0gbWRkZXYtPmJpdG1hcF9vZmZzZXQ7CiAJaWYgKGZpbGUpIHsKIAkJZ2V0X2ZpbGUoZmlsZSk7Ci0JCWRvX3N5bmNfbWFwcGluZ19yYW5nZShmaWxlLT5mX21hcHBpbmcsIDAsIExMT05HX01BWCwKLQkJCQkgICAgICBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgfAotCQkJCSAgICAgIFNZTkNfRklMRV9SQU5HRV9XUklURSB8Ci0JCQkJICAgICAgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIpOworCQkvKiBBcyBmdXR1cmUgYWNjZXNzZXMgdG8gdGhpcyBmaWxlIHdpbGwgdXNlIGJtYXAsCisJCSAqIGFuZCBieXBhc3MgdGhlIHBhZ2UgY2FjaGUsIHdlIG11c3Qgc3luYyB0aGUgZmlsZQorCQkgKiBmaXJzdC4KKwkJICovCisJCXZmc19mc3luYyhmaWxlLCBmaWxlLT5mX2RlbnRyeSwgMSk7CiAJfQogCS8qIHJlYWQgc3VwZXJibG9jayBmcm9tIGJpdG1hcCBmaWxlICh0aGlzIHNldHMgYml0bWFwLT5jaHVua3NpemUpICovCiAJZXJyID0gYml0bWFwX3JlYWRfc2IoYml0bWFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCmluZGV4IDU1NmFjZmYuLjdkYmU2NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYwpAQCAtMTM4LDE2ICsxMzgsNiBAQAogfQogRVhQT1JUX1NZTUJPTChkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKTsKIAotLyoKLSAqIFJvdW5kIGEgbnVtYmVyIHVwIHRvIHRoZSBuZWFyZXN0ICdzaXplJyBib3VuZGFyeS4gIHNpemUgbXVzdAotICogYmUgYSBwb3dlciBvZiAyLgotICovCi1zdGF0aWMgdWxvbmcgcm91bmRfdXAodWxvbmcgbiwgdWxvbmcgc2l6ZSkKLXsKLQlzaXplLS07Ci0JcmV0dXJuIChuICsgc2l6ZSkgJiB+c2l6ZTsKLX0KLQogc3RhdGljIGludCBzZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKIAkJCSAgY29uc3QgY2hhciAqY2h1bmtfc2l6ZV9hcmcsIGNoYXIgKiplcnJvcikKIHsKQEAgLTE1NSw3ICsxNDUsOCBAQAogCWNoYXIgKnZhbHVlOwogCiAJY2h1bmtfc2l6ZV91bG9uZyA9IHNpbXBsZV9zdHJ0b3VsKGNodW5rX3NpemVfYXJnLCAmdmFsdWUsIDEwKTsKLQlpZiAoKmNodW5rX3NpemVfYXJnID09ICdcMCcgfHwgKnZhbHVlICE9ICdcMCcpIHsKKwlpZiAoKmNodW5rX3NpemVfYXJnID09ICdcMCcgfHwgKnZhbHVlICE9ICdcMCcgfHwKKwkgICAgY2h1bmtfc2l6ZV91bG9uZyA+IFVJTlRfTUFYKSB7CiAJCSplcnJvciA9ICJJbnZhbGlkIGNodW5rIHNpemUiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNjUsNDAgKzE1NiwzNSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKgotCSAqIENodW5rIHNpemUgbXVzdCBiZSBtdWx0aXBsZSBvZiBwYWdlIHNpemUuICBTaWxlbnRseQotCSAqIHJvdW5kIHVwIGlmIGl0J3Mgbm90LgotCSAqLwotCWNodW5rX3NpemVfdWxvbmcgPSByb3VuZF91cChjaHVua19zaXplX3Vsb25nLCBQQUdFX1NJWkUgPj4gOSk7Ci0KLQlyZXR1cm4gZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0b3JlLCBjaHVua19zaXplX3Vsb25nLAorCXJldHVybiBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RvcmUsCisJCQkJCQkgKHVuc2lnbmVkKSBjaHVua19zaXplX3Vsb25nLAogCQkJCQkJIGVycm9yKTsKIH0KIAogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNodW5rX3NpemVfdWxvbmcsCisJCQkJICAgICAgdW5zaWduZWQgY2h1bmtfc2l6ZSwKIAkJCQkgICAgICBjaGFyICoqZXJyb3IpCiB7CiAJLyogQ2hlY2sgY2h1bmtfc2l6ZSBpcyBhIHBvd2VyIG9mIDIgKi8KLQlpZiAoIWlzX3Bvd2VyX29mXzIoY2h1bmtfc2l6ZV91bG9uZykpIHsKKwlpZiAoIWlzX3Bvd2VyX29mXzIoY2h1bmtfc2l6ZSkpIHsKIAkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgMiI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIFZhbGlkYXRlIHRoZSBjaHVuayBzaXplIGFnYWluc3QgdGhlIGRldmljZSBibG9jayBzaXplICovCi0JaWYgKGNodW5rX3NpemVfdWxvbmcgJSAoYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc3RvcmUtPmNvdy0+YmRldikgPj4gOSkpIHsKKwlpZiAoY2h1bmtfc2l6ZSAlIChiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdG9yZS0+Y293LT5iZGV2KSA+PiA5KSkgewogCQkqZXJyb3IgPSAiQ2h1bmsgc2l6ZSBpcyBub3QgYSBtdWx0aXBsZSBvZiBkZXZpY2UgYmxvY2tzaXplIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGNodW5rX3NpemVfdWxvbmcgPiBJTlRfTUFYID4+IFNFQ1RPUl9TSElGVCkgeworCWlmIChjaHVua19zaXplID4gSU5UX01BWCA+PiBTRUNUT1JfU0hJRlQpIHsKIAkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgdG9vIGhpZ2giOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzdG9yZS0+Y2h1bmtfc2l6ZSA9IGNodW5rX3NpemVfdWxvbmc7Ci0Jc3RvcmUtPmNodW5rX21hc2sgPSBjaHVua19zaXplX3Vsb25nIC0gMTsKLQlzdG9yZS0+Y2h1bmtfc2hpZnQgPSBmZnMoY2h1bmtfc2l6ZV91bG9uZykgLSAxOworCXN0b3JlLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZTsKKwlzdG9yZS0+Y2h1bmtfbWFzayA9IGNodW5rX3NpemUgLSAxOworCXN0b3JlLT5jaHVua19zaGlmdCA9IGZmcyhjaHVua19zaXplKSAtIDE7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1MSw3ICsyMzcsNyBAQAogCiAJciA9IHNldF9jaHVua19zaXplKHRtcF9zdG9yZSwgYXJndlsyXSwgJnRpLT5lcnJvcik7CiAJaWYgKHIpCi0JCWdvdG8gYmFkX2NvdzsKKwkJZ290byBiYWRfY3RyOwogCiAJciA9IHR5cGUtPmN0cih0bXBfc3RvcmUsIDAsIE5VTEwpOwogCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaAppbmRleCA4MTJjNzE4Li44YTIyM2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCisrKyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKQEAgLTEwMSw5ICsxMDEsOSBAQAogCXN0cnVjdCBkbV9kZXYgKmNvdzsKIAogCS8qIFNpemUgb2YgZGF0YSBibG9ja3Mgc2F2ZWQgLSBtdXN0IGJlIGEgcG93ZXIgb2YgMiAqLwotCWNodW5rX3QgY2h1bmtfc2l6ZTsKLQljaHVua190IGNodW5rX21hc2s7Ci0JY2h1bmtfdCBjaHVua19zaGlmdDsKKwl1bnNpZ25lZCBjaHVua19zaXplOworCXVuc2lnbmVkIGNodW5rX21hc2s7CisJdW5zaWduZWQgY2h1bmtfc2hpZnQ7CiAKIAl2b2lkICpjb250ZXh0OwogfTsKQEAgLTE2OSw3ICsxNjksNyBAQAogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlKTsKIAogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNodW5rX3NpemVfdWxvbmcsCisJCQkJICAgICAgdW5zaWduZWQgY2h1bmtfc2l6ZSwKIAkJCQkgICAgICBjaGFyICoqZXJyb3IpOwogCiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX2NyZWF0ZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMKaW5kZXggNjUyYmQzMy4uN2FjMmMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAl9CiAKIAkvKiBUaGUgcHRyIHZhbHVlIGlzIHN1ZmZpY2llbnQgZm9yIGxvY2FsIHVuaXF1ZSBpZCAqLwotCWxjLT5sdWlkID0gKHVpbnQ2NF90KWxjOworCWxjLT5sdWlkID0gKHVuc2lnbmVkIGxvbmcpbGM7CiAKIAlsYy0+dGkgPSB0aTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKaW5kZXggZDViMmUwOC4uMGM3NDY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCkBAIC0yODQsMTIgKzI4NCwxMyBAQAogewogCWludCByOwogCXN0cnVjdCBkaXNrX2hlYWRlciAqZGg7Ci0JY2h1bmtfdCBjaHVua19zaXplOworCXVuc2lnbmVkIGNodW5rX3NpemU7CiAJaW50IGNodW5rX3NpemVfc3VwcGxpZWQgPSAxOwogCWNoYXIgKmNodW5rX2VycjsKIAogCS8qCi0JICogVXNlIGRlZmF1bHQgY2h1bmsgc2l6ZSAob3IgaGFyZHNlY3Rfc2l6ZSwgaWYgbGFyZ2VyKSBpZiBub25lIHN1cHBsaWVkCisJICogVXNlIGRlZmF1bHQgY2h1bmsgc2l6ZSAob3IgbG9naWNhbF9ibG9ja19zaXplLCBpZiBsYXJnZXIpCisJICogaWYgbm9uZSBzdXBwbGllZAogCSAqLwogCWlmICghcHMtPnN0b3JlLT5jaHVua19zaXplKSB7CiAJCXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA9IG1heChETV9DSFVOS19TSVpFX0RFRkFVTFRfU0VDVE9SUywKQEAgLTMzNCwxMCArMzM1LDkgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY2h1bmtfc2l6ZV9zdXBwbGllZCkKLQkJRE1XQVJOKCJjaHVuayBzaXplICVsbHUgaW4gZGV2aWNlIG1ldGFkYXRhIG92ZXJyaWRlcyAiCi0JCSAgICAgICAidGFibGUgY2h1bmsgc2l6ZSBvZiAlbGx1LiIsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNodW5rX3NpemUsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CisJCURNV0FSTigiY2h1bmsgc2l6ZSAldSBpbiBkZXZpY2UgbWV0YWRhdGEgb3ZlcnJpZGVzICIKKwkJICAgICAgICJ0YWJsZSBjaHVuayBzaXplIG9mICV1LiIsCisJCSAgICAgICBjaHVua19zaXplLCBwcy0+c3RvcmUtPmNodW5rX3NpemUpOwogCiAJLyogV2UgaGFkIGEgYm9ndXMgY2h1bmtfc2l6ZS4gRml4IHN0dWZmIHVwLiAqLwogCWZyZWVfYXJlYShwcyk7CkBAIC0zNDUsOCArMzQ1LDggQEAKIAlyID0gZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHBzLT5zdG9yZSwgY2h1bmtfc2l6ZSwKIAkJCQkJICAgICAgJmNodW5rX2Vycik7CiAJaWYgKHIpIHsKLQkJRE1FUlIoImludmFsaWQgb24tZGlzayBjaHVuayBzaXplICVsbHU6ICVzLiIsCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2h1bmtfc2l6ZSwgY2h1bmtfZXJyKTsKKwkJRE1FUlIoImludmFsaWQgb24tZGlzayBjaHVuayBzaXplICV1OiAlcy4iLAorCQkgICAgICBjaHVua19zaXplLCBjaHVua19lcnIpOwogCQlyZXR1cm4gcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKaW5kZXggNTdmMWJmNy4uM2EzYmE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKQEAgLTI5Niw2ICsyOTYsNyBAQAogICovCiBzdGF0aWMgaW50IHJlZ2lzdGVyX3NuYXBzaG90KHN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcCkKIHsKKwlzdHJ1Y3QgZG1fc25hcHNob3QgKmw7CiAJc3RydWN0IG9yaWdpbiAqbywgKm5ld19vOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBzbmFwLT5vcmlnaW4tPmJkZXY7CiAKQEAgLTMxOSw3ICszMjAsMTEgQEAKIAkJX19pbnNlcnRfb3JpZ2luKG8pOwogCX0KIAotCWxpc3RfYWRkX3RhaWwoJnNuYXAtPmxpc3QsICZvLT5zbmFwc2hvdHMpOworCS8qIFNvcnQgdGhlIGxpc3QgYWNjb3JkaW5nIHRvIGNodW5rIHNpemUsIGxhcmdlc3QtZmlyc3Qgc21hbGxlc3QtbGFzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkobCwgJm8tPnNuYXBzaG90cywgbGlzdCkKKwkJaWYgKGwtPnN0b3JlLT5jaHVua19zaXplIDwgc25hcC0+c3RvcmUtPmNodW5rX3NpemUpCisJCQlicmVhazsKKwlsaXN0X2FkZF90YWlsKCZzbmFwLT5saXN0LCAmbC0+bGlzdCk7CiAKIAl1cF93cml0ZSgmX29yaWdpbnNfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC02NjgsNiArNjczLDExIEBACiAJYmlvX2xpc3RfaW5pdCgmcy0+cXVldWVkX2Jpb3MpOwogCUlOSVRfV09SSygmcy0+cXVldWVkX2Jpb3Nfd29yaywgZmx1c2hfcXVldWVkX2Jpb3MpOwogCisJaWYgKCFzLT5zdG9yZS0+Y2h1bmtfc2l6ZSkgeworCQl0aS0+ZXJyb3IgPSAiQ2h1bmsgc2l6ZSBub3Qgc2V0IjsKKwkJZ290byBiYWRfbG9hZF9hbmRfcmVnaXN0ZXI7CisJfQorCiAJLyogQWRkIHNuYXBzaG90IHRvIHRoZSBsaXN0IG9mIHNuYXBzaG90cyBmb3IgdGhpcyBvcmlnaW4gKi8KIAkvKiBFeGNlcHRpb25zIGFyZW4ndCB0cmlnZ2VyZWQgdGlsbCBzbmFwc2hvdF9yZXN1bWUoKSBpcyBjYWxsZWQgKi8KIAlpZiAocmVnaXN0ZXJfc25hcHNob3QocykpIHsKQEAgLTk1MSw3ICs5NjEsNyBAQAogCiAJc3JjLmJkZXYgPSBiZGV2OwogCXNyYy5zZWN0b3IgPSBjaHVua190b19zZWN0b3Iocy0+c3RvcmUsIHBlLT5lLm9sZF9jaHVuayk7Ci0Jc3JjLmNvdW50ID0gbWluKHMtPnN0b3JlLT5jaHVua19zaXplLCBkZXZfc2l6ZSAtIHNyYy5zZWN0b3IpOworCXNyYy5jb3VudCA9IG1pbigoc2VjdG9yX3Qpcy0+c3RvcmUtPmNodW5rX3NpemUsIGRldl9zaXplIC0gc3JjLnNlY3Rvcik7CiAKIAlkZXN0LmJkZXYgPSBzLT5zdG9yZS0+Y293LT5iZGV2OwogCWRlc3Quc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLCBwZS0+ZS5uZXdfY2h1bmspOwpAQCAtMTE0Miw2ICsxMTUyLDggQEAKIAl1bnNpZ25lZCBzeiA9IDA7CiAJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwID0gdGktPnByaXZhdGU7CiAKKwlkb3duX3dyaXRlKCZzbmFwLT5sb2NrKTsKKwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU1RBVFVTVFlQRV9JTkZPOgogCQlpZiAoIXNuYXAtPnZhbGlkKQpAQCAtMTE3Myw2ICsxMTg1LDggQEAKIAkJYnJlYWs7CiAJfQogCisJdXBfd3JpdGUoJnNuYXAtPmxvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzODgsNyArMTQwMiw3IEBACiAJc3RydWN0IGRtX2RldiAqZGV2ID0gdGktPnByaXZhdGU7CiAJc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwOwogCXN0cnVjdCBvcmlnaW4gKm87Ci0JY2h1bmtfdCBjaHVua19zaXplID0gMDsKKwl1bnNpZ25lZCBjaHVua19zaXplID0gMDsKIAogCWRvd25fcmVhZCgmX29yaWdpbnNfbG9jayk7CiAJbyA9IF9fbG9va3VwX29yaWdpbihkZXYtPmJkZXYpOwpAQCAtMTQ2NSw3ICsxNDc5LDcgQEAKIAlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZzbmFwc2hvdF90YXJnZXQpOwogCWlmIChyKSB7CiAJCURNRVJSKCJzbmFwc2hvdCB0YXJnZXQgcmVnaXN0ZXIgZmFpbGVkICVkIiwgcik7Ci0JCXJldHVybiByOworCQlnb3RvIGJhZF9yZWdpc3Rlcl9zbmFwc2hvdF90YXJnZXQ7CiAJfQogCiAJciA9IGRtX3JlZ2lzdGVyX3RhcmdldCgmb3JpZ2luX3RhcmdldCk7CkBAIC0xNTIyLDYgKzE1MzYsOSBAQAogCWRtX3VucmVnaXN0ZXJfdGFyZ2V0KCZvcmlnaW5fdGFyZ2V0KTsKIGJhZDE6CiAJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJnNuYXBzaG90X3RhcmdldCk7CisKK2JhZF9yZWdpc3Rlcl9zbmFwc2hvdF90YXJnZXQ6CisJZG1fZXhjZXB0aW9uX3N0b3JlX2V4aXQoKTsKIAlyZXR1cm4gcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDM3NmYxYWIuLjcyNGVmYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlhdG9taWNfdCBpb19jb3VudDsKIAlzdHJ1Y3QgYmlvICpiaW87CiAJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOworCXNwaW5sb2NrX3QgZW5kaW9fbG9jazsKIH07CiAKIC8qCkBAIC01NzgsOCArNTc5LDEyIEBACiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gaW8tPm1kOwogCiAJLyogUHVzaC1iYWNrIHN1cGVyc2VkZXMgYW55IEkvTyBlcnJvcnMgKi8KLQlpZiAoZXJyb3IgJiYgIShpby0+ZXJyb3IgPiAwICYmIF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKSkpCi0JCWlvLT5lcnJvciA9IGVycm9yOworCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvLT5lbmRpb19sb2NrLCBmbGFncyk7CisJCWlmICghKGlvLT5lcnJvciA+IDAgJiYgX19ub2ZsdXNoX3N1c3BlbmRpbmcobWQpKSkKKwkJCWlvLT5lcnJvciA9IGVycm9yOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpby0+ZW5kaW9fbG9jaywgZmxhZ3MpOworCX0KIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpby0+aW9fY291bnQpKSB7CiAJCWlmIChpby0+ZXJyb3IgPT0gRE1fRU5ESU9fUkVRVUVVRSkgewpAQCAtMTIyNiw2ICsxMjMxLDcgQEAKIAlhdG9taWNfc2V0KCZjaS5pby0+aW9fY291bnQsIDEpOwogCWNpLmlvLT5iaW8gPSBiaW87CiAJY2kuaW8tPm1kID0gbWQ7CisJc3Bpbl9sb2NrX2luaXQoJmNpLmlvLT5lbmRpb19sb2NrKTsKIAljaS5zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKIAljaS5zZWN0b3JfY291bnQgPSBiaW9fc2VjdG9ycyhiaW8pOwogCWlmICh1bmxpa2VseShiaW9fZW1wdHlfYmFycmllcihiaW8pKSkKQEAgLTE4MjIsNiArMTgyOCw3IEBACiBiYWRfYmRldjoKIAlkZXN0cm95X3dvcmtxdWV1ZShtZC0+d3EpOwogYmFkX3RocmVhZDoKKwlkZWxfZ2VuZGlzayhtZC0+ZGlzayk7CiAJcHV0X2Rpc2sobWQtPmRpc2spOwogYmFkX2Rpc2s6CiAJYmxrX2NsZWFudXBfcXVldWUobWQtPnF1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCAyNmJhNDJhLi5iMTgyZjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC05NDQsNiArOTQ0LDE0IEBACiAJCQkgICAgZGVzYy0+cmFpZF9kaXNrIDwgbWRkZXYtPnJhaWRfZGlza3MgKi8pIHsKIAkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IGRlc2MtPnJhaWRfZGlzazsKKwkJfSBlbHNlIGlmIChkZXNjLT5zdGF0ZSAmICgxPDxNRF9ESVNLX0FDVElWRSkpIHsKKwkJCS8qIGFjdGl2ZSBidXQgbm90IGluIHN5bmMgaW1wbGllcyByZWNvdmVyeSB1cCB0bworCQkJICogcmVzaGFwZSBwb3NpdGlvbi4gIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGVyZQorCQkJICogdGhhdCBpcywgc28gc2V0IHRvIHplcm8gZm9yIG5vdyAqLworCQkJaWYgKG1kZGV2LT5taW5vcl92ZXJzaW9uID49IDkxKSB7CisJCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKKwkJCQlyZGV2LT5yYWlkX2Rpc2sgPSBkZXNjLT5yYWlkX2Rpc2s7CisJCQl9CiAJCX0KIAkJaWYgKGRlc2MtPnN0YXRlICYgKDE8PE1EX0RJU0tfV1JJVEVNT1NUTFkpKQogCQkJc2V0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKTsKQEAgLTEwMzIsOCArMTA0MCwxOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldjIsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCW1kcF9kaXNrX3QgKmQ7CiAJCWludCBkZXNjX25yOwotCQlpZiAocmRldjItPnJhaWRfZGlzayA+PSAwICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpCi0JCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldjItPmZsYWdzKSkKKwkJaW50IGlzX2FjdGl2ZSA9IHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpOworCisJCWlmIChyZGV2Mi0+cmFpZF9kaXNrID49IDAgJiYKKwkJICAgIHNiLT5taW5vcl92ZXJzaW9uID49IDkxKQorCQkJLyogd2UgaGF2ZSBub3doZXJlIHRvIHN0b3JlIHRoZSByZWNvdmVyeV9vZmZzZXQsCisJCQkgKiBidXQgaWYgaXQgaXMgbm90IGJlbG93IHRoZSByZXNoYXBlX3Bvc2l0aW9uLAorCQkJICogd2UgY2FuIHBpZ2d5LWJhY2sgb24gdGhhdC4KKwkJCSAqLworCQkJaXNfYWN0aXZlID0gMTsKKwkJaWYgKHJkZXYyLT5yYWlkX2Rpc2sgPCAwIHx8CisJCSAgICB0ZXN0X2JpdChGYXVsdHksICZyZGV2Mi0+ZmxhZ3MpKQorCQkJaXNfYWN0aXZlID0gMDsKKwkJaWYgKGlzX2FjdGl2ZSkKIAkJCWRlc2NfbnIgPSByZGV2Mi0+cmFpZF9kaXNrOwogCQllbHNlCiAJCQlkZXNjX25yID0gbmV4dF9zcGFyZSsrOwpAQCAtMTA0MywxNiArMTA2MiwxNiBAQAogCQlkLT5udW1iZXIgPSByZGV2Mi0+ZGVzY19ucjsKIAkJZC0+bWFqb3IgPSBNQUpPUihyZGV2Mi0+YmRldi0+YmRfZGV2KTsKIAkJZC0+bWlub3IgPSBNSU5PUihyZGV2Mi0+YmRldi0+YmRfZGV2KTsKLQkJaWYgKHJkZXYyLT5yYWlkX2Rpc2sgPj0gMCAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldjItPmZsYWdzKQotCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYyLT5mbGFncykpCisJCWlmIChpc19hY3RpdmUpCiAJCQlkLT5yYWlkX2Rpc2sgPSByZGV2Mi0+cmFpZF9kaXNrOwogCQllbHNlCiAJCQlkLT5yYWlkX2Rpc2sgPSByZGV2Mi0+ZGVzY19ucjsgLyogY29tcGF0aWJpbGl0eSAqLwogCQlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldjItPmZsYWdzKSkKIAkJCWQtPnN0YXRlID0gKDE8PE1EX0RJU0tfRkFVTFRZKTsKLQkJZWxzZSBpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYyLT5mbGFncykpIHsKKwkJZWxzZSBpZiAoaXNfYWN0aXZlKSB7CiAJCQlkLT5zdGF0ZSA9ICgxPDxNRF9ESVNLX0FDVElWRSk7Ci0JCQlkLT5zdGF0ZSB8PSAoMTw8TURfRElTS19TWU5DKTsKKwkJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldjItPmZsYWdzKSkKKwkJCQlkLT5zdGF0ZSB8PSAoMTw8TURfRElTS19TWU5DKTsKIAkJCWFjdGl2ZSsrOwogCQkJd29ya2luZysrOwogCQl9IGVsc2UgewpAQCAtMTM4Miw4ICsxNDAxLDYgQEAKIAogCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgogCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewotCQlpZiAobWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA+IHJkZXYtPnJlY292ZXJ5X29mZnNldCkKLQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IG1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQ7CiAJCWlmIChyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPiAwKSB7CiAJCQlzYi0+ZmVhdHVyZV9tYXAgfD0KIAkJCQljcHVfdG9fbGUzMihNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCk7CkBAIC0xOTE3LDYgKzE5MzQsMTQgQEAKIAkgKi8KIAltZGtfcmRldl90ICpyZGV2OwogCisJLyogRmlyc3QgbWFrZSBzdXJlIGluZGl2aWR1YWwgcmVjb3Zlcnlfb2Zmc2V0cyBhcmUgY29ycmVjdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKKwkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCisJCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSAmJgorCQkgICAgbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA+IHJkZXYtPnJlY292ZXJ5X29mZnNldCkKKwkJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSBtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkOworCisJfQkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCWlmIChyZGV2LT5zYl9ldmVudHMgPT0gbWRkZXYtPmV2ZW50cyB8fAogCQkgICAgKG5vc3BhcmVzICYmCkBAIC0yNjMxLDcgKzI2NTYsNyBAQAogCQkJcmRldi0+ZGVzY19uciA9IGkrKzsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IHJkZXYtPmRlc2NfbnI7CiAJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7Ci0JCX0gZWxzZSBpZiAocmRldi0+cmFpZF9kaXNrID49IG1kZGV2LT5yYWlkX2Rpc2tzKSB7CisJCX0gZWxzZSBpZiAocmRldi0+cmFpZF9kaXNrID49IChtZGRldi0+cmFpZF9kaXNrcyAtIG1pbigwLCBtZGRldi0+ZGVsdGFfZGlza3MpKSkgewogCQkJcmRldi0+cmFpZF9kaXNrID0gLTE7CiAJCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJfQpAQCAtNjUwNCw4ICs2NTI5LDkgQEAKICBza2lwOgogCW1kZGV2LT5jdXJyX3Jlc3luYyA9IDA7CiAJbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA9IDA7Ci0JbWRkZXYtPnJlc3luY19taW4gPSAwOwotCW1kZGV2LT5yZXN5bmNfbWF4ID0gTWF4U2VjdG9yOworCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSkpCisJCS8qIFdlIGNvbXBsZXRlZCBzbyBtYXggc2V0dGluZyBjYW4gYmUgZm9yZ290dGVuLiAqLworCQltZGRldi0+cmVzeW5jX21heCA9IE1heFNlY3RvcjsKIAlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAic3luY19jb21wbGV0ZWQiKTsKIAl3YWtlX3VwKCZyZXN5bmNfd2FpdCk7CiAJc2V0X2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBkMWI5YmQ1Li5hMDUzNDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAkvKiBhbGxvY2F0ZSBhIHIxYmlvIHdpdGggcm9vbSBmb3IgcmFpZF9kaXNrcyBlbnRyaWVzIGluIHRoZSBiaW9zIGFycmF5ICovCiAJcjFfYmlvID0ga3phbGxvYyhzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghcjFfYmlvKQorCWlmICghcjFfYmlvICYmIHBpLT5tZGRldikKIAkJdW5wbHVnX3NsYXZlcyhwaS0+bWRkZXYpOwogCiAJcmV0dXJuIHIxX2JpbzsKQEAgLTE2ODMsNiArMTY4Myw3IEBACiAJCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKIAkJCX0KIAkJfQorCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJaWYgKHVucGx1ZykKIAkJdW5wbHVnX3NsYXZlcyhtZGRldik7CkBAIC0xOTc4LDEzICsxOTc5LDE0IEBACiAJY29uZi0+cG9vbGluZm8gPSBrbWFsbG9jKHNpemVvZigqY29uZi0+cG9vbGluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbmYtPnBvb2xpbmZvKQogCQlnb3RvIG91dF9ub19tZW07Ci0JY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gbWRkZXY7CisJY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gTlVMTDsKIAljb25mLT5wb29saW5mby0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCWNvbmYtPnIxYmlvX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZShOUl9SQUlEMV9CSU9TLCByMWJpb19wb29sX2FsbG9jLAogCQkJCQkgIHIxYmlvX3Bvb2xfZnJlZSwKIAkJCQkJICBjb25mLT5wb29saW5mbyk7CiAJaWYgKCFjb25mLT5yMWJpb19wb29sKQogCQlnb3RvIG91dF9ub19tZW07CisJY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gbWRkZXY7CiAKIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwogCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDUxYzRjNWMuLmMyY2I3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtNjgsNyArNjgsNyBAQAogCiAJLyogYWxsb2NhdGUgYSByMTBiaW8gd2l0aCByb29tIGZvciByYWlkX2Rpc2tzIGVudHJpZXMgaW4gdGhlIGJpb3MgYXJyYXkgKi8KIAlyMTBfYmlvID0ga3phbGxvYyhzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghcjEwX2JpbykKKwlpZiAoIXIxMF9iaW8gJiYgY29uZi0+bWRkZXYpCiAJCXVucGx1Z19zbGF2ZXMoY29uZi0+bWRkZXYpOwogCiAJcmV0dXJuIHIxMF9iaW87CkBAIC0xNjMyLDYgKzE2MzIsNyBAQAogCQkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CiAJCQl9CiAJCX0KKwkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWlmICh1bnBsdWcpCiAJCXVucGx1Z19zbGF2ZXMobWRkZXYpOwpAQCAtMjA5NSw3ICsyMDk2LDYgQEAKIAlpZiAoIWNvbmYtPnRtcHBhZ2UpCiAJCWdvdG8gb3V0X2ZyZWVfY29uZjsKIAotCWNvbmYtPm1kZGV2ID0gbWRkZXY7CiAJY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCWNvbmYtPm5lYXJfY29waWVzID0gbmM7CiAJY29uZi0+ZmFyX2NvcGllcyA9IGZjOwpAQCAtMjEzMiw2ICsyMTMyLDcgQEAKIAkJZ290byBvdXRfZnJlZV9jb25mOwogCX0KIAorCWNvbmYtPm1kZGV2ID0gbWRkZXY7CiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKIAltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCA5NDgyOTgwLi5kMjkyMTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC0xNTYsMTMgKzE1NiwxNiBAQAogc3RhdGljIGludCByYWlkNl9pZHhfdG9fc2xvdChpbnQgaWR4LCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLAogCQkJICAgICBpbnQgKmNvdW50LCBpbnQgc3luZHJvbWVfZGlza3MpCiB7Ci0JaW50IHNsb3Q7CisJaW50IHNsb3QgPSAqY291bnQ7CiAKKwlpZiAoc2gtPmRkZl9sYXlvdXQpCisJCSgqY291bnQpKys7CiAJaWYgKGlkeCA9PSBzaC0+cGRfaWR4KQogCQlyZXR1cm4gc3luZHJvbWVfZGlza3M7CiAJaWYgKGlkeCA9PSBzaC0+cWRfaWR4KQogCQlyZXR1cm4gc3luZHJvbWVfZGlza3MgKyAxOwotCXNsb3QgPSAoKmNvdW50KSsrOworCWlmICghc2gtPmRkZl9sYXlvdXQpCisJCSgqY291bnQpKys7CiAJcmV0dXJuIHNsb3Q7CiB9CiAKQEAgLTcxNyw3ICs3MjAsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGRpc2tzOyBpKyspCi0JCXNyY3NbaV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJc3Jjc1tpXSA9IE5VTEw7CiAKIAljb3VudCA9IDA7CiAJaSA9IGQwX2lkeDsKQEAgLTcyNyw5ICs3MzAsOCBAQAogCQlzcmNzW3Nsb3RdID0gc2gtPmRldltpXS5wYWdlOwogCQlpID0gcmFpZDZfbmV4dF9kaXNrKGksIGRpc2tzKTsKIAl9IHdoaWxlIChpICE9IGQwX2lkeCk7Ci0JQlVHX09OKGNvdW50ICE9IHN5bmRyb21lX2Rpc2tzKTsKIAotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gc3luZHJvbWVfZGlza3M7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgpAQCAtODE0LDcgKzgxNiw3IEBACiAJICogc2xvdCBudW1iZXIgY29udmVyc2lvbiBmb3IgJ2ZhaWxhJyBhbmQgJ2ZhaWxiJwogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBkaXNrcyA7IGkrKykKLQkJYmxvY2tzW2ldID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJCWJsb2Nrc1tpXSA9IE5VTEw7CiAJY291bnQgPSAwOwogCWkgPSBkMF9pZHg7CiAJZG8gewpAQCAtODI4LDcgKzgzMCw2IEBACiAJCQlmYWlsYiA9IHNsb3Q7CiAJCWkgPSByYWlkNl9uZXh0X2Rpc2soaSwgZGlza3MpOwogCX0gd2hpbGUgKGkgIT0gZDBfaWR4KTsKLQlCVUdfT04oY291bnQgIT0gc3luZHJvbWVfZGlza3MpOwogCiAJQlVHX09OKGZhaWxhID09IGZhaWxiKTsKIAlpZiAoZmFpbGIgPCBmYWlsYSkKQEAgLTg0NSw3ICs4NDYsNyBAQAogCQkJaW5pdF9hc3luY19zdWJtaXQoJnN1Ym1pdCwgQVNZTkNfVFhfRkVOQ0UsIE5VTEwsCiAJCQkJCSAgb3BzX2NvbXBsZXRlX2NvbXB1dGUsIHNoLAogCQkJCQkgIHRvX2FkZHJfY29udihzaCwgcGVyY3B1KSk7Ci0JCQlyZXR1cm4gYXN5bmNfZ2VuX3N5bmRyb21lKGJsb2NrcywgMCwgY291bnQrMiwKKwkJCXJldHVybiBhc3luY19nZW5fc3luZHJvbWUoYmxvY2tzLCAwLCBzeW5kcm9tZV9kaXNrcysyLAogCQkJCQkJICBTVFJJUEVfU0laRSwgJnN1Ym1pdCk7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgcGFnZSAqZGVzdDsKQEAgLTExMzksNyArMTE0MCw3IEBACiAJCQkgICAmc2gtPm9wcy56ZXJvX3N1bV9yZXN1bHQsIHBlcmNwdS0+c3BhcmVfcGFnZSwgJnN1Ym1pdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJhaWRfcnVuX29wcyhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCB1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0KQorc3RhdGljIHZvaWQgX19yYWlkX3J1bl9vcHMoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgdW5zaWduZWQgbG9uZyBvcHNfcmVxdWVzdCkKIHsKIAlpbnQgb3ZlcmxhcF9jbGVhciA9IDAsIGksIGRpc2tzID0gc2gtPmRpc2tzOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwpAQCAtMTIwNCwyMiArMTIwNSw1NSBAQAogCXB1dF9jcHUoKTsKIH0KIAorI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1Ngorc3RhdGljIHZvaWQgYXN5bmNfcnVuX29wcyh2b2lkICpwYXJhbSwgYXN5bmNfY29va2llX3QgY29va2llKQoreworCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBwYXJhbTsKKwl1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0ID0gc2gtPm9wcy5yZXF1ZXN0OworCisJY2xlYXJfYml0X3VubG9jayhTVFJJUEVfT1BTX1JFUV9QRU5ESU5HLCAmc2gtPnN0YXRlKTsKKwl3YWtlX3VwKCZzaC0+b3BzLndhaXRfZm9yX29wcyk7CisKKwlfX3JhaWRfcnVuX29wcyhzaCwgb3BzX3JlcXVlc3QpOworCXJlbGVhc2Vfc3RyaXBlKHNoKTsKK30KKworc3RhdGljIHZvaWQgcmFpZF9ydW5fb3BzKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3QpCit7CisJLyogc2luY2UgaGFuZGxlX3N0cmlwZSBjYW4gYmUgY2FsbGVkIG91dHNpZGUgb2YgcmFpZDVkIGNvbnRleHQKKwkgKiB3ZSBuZWVkIHRvIGVuc3VyZSBzaC0+b3BzLnJlcXVlc3QgaXMgZGUtc3RhZ2VkIGJlZm9yZSBhbm90aGVyCisJICogcmVxdWVzdCBhcnJpdmVzCisJICovCisJd2FpdF9ldmVudChzaC0+b3BzLndhaXRfZm9yX29wcywKKwkJICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhTVFJJUEVfT1BTX1JFUV9QRU5ESU5HLCAmc2gtPnN0YXRlKSk7CisJc2gtPm9wcy5yZXF1ZXN0ID0gb3BzX3JlcXVlc3Q7CisKKwlhdG9taWNfaW5jKCZzaC0+Y291bnQpOworCWFzeW5jX3NjaGVkdWxlKGFzeW5jX3J1bl9vcHMsIHNoKTsKK30KKyNlbHNlCisjZGVmaW5lIHJhaWRfcnVuX29wcyBfX3JhaWRfcnVuX29wcworI2VuZGlmCisKIHN0YXRpYyBpbnQgZ3Jvd19vbmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZikKIHsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOworCWludCBkaXNrcyA9IG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKTsKIAlzaCA9IGttZW1fY2FjaGVfYWxsb2MoY29uZi0+c2xhYl9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzaCkKIAkJcmV0dXJuIDA7Ci0JbWVtc2V0KHNoLCAwLCBzaXplb2YoKnNoKSArIChjb25mLT5yYWlkX2Rpc2tzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsKKwltZW1zZXQoc2gsIDAsIHNpemVvZigqc2gpICsgKGRpc2tzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsKIAlzaC0+cmFpZF9jb25mID0gY29uZjsKIAlzcGluX2xvY2tfaW5pdCgmc2gtPmxvY2spOworCSNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzaC0+b3BzLndhaXRfZm9yX29wcyk7CisJI2VuZGlmCiAKLQlpZiAoZ3Jvd19idWZmZXJzKHNoLCBjb25mLT5yYWlkX2Rpc2tzKSkgewotCQlzaHJpbmtfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcyk7CisJaWYgKGdyb3dfYnVmZmVycyhzaCwgZGlza3MpKSB7CisJCXNocmlua19idWZmZXJzKHNoLCBkaXNrcyk7CiAJCWttZW1fY2FjaGVfZnJlZShjb25mLT5zbGFiX2NhY2hlLCBzaCk7CiAJCXJldHVybiAwOwogCX0KLQlzaC0+ZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwogCS8qIHdlIGp1c3QgY3JlYXRlZCBhbiBhY3RpdmUgc3RyaXBlIHNvLi4uICovCiAJYXRvbWljX3NldCgmc2gtPmNvdW50LCAxKTsKIAlhdG9taWNfaW5jKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk7CkBAIC0xMjMxLDcgKzEyNjUsNyBAQAogc3RhdGljIGludCBncm93X3N0cmlwZXMocmFpZDVfY29uZl90ICpjb25mLCBpbnQgbnVtKQogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzYzsKLQlpbnQgZGV2cyA9IGNvbmYtPnJhaWRfZGlza3M7CisJaW50IGRldnMgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMF0sCiAJCSJyYWlkJWQtJXMiLCBjb25mLT5sZXZlbCwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7CkBAIC0xMzI5LDYgKzEzNjMsOSBAQAogCiAJCW5zaC0+cmFpZF9jb25mID0gY29uZjsKIAkJc3Bpbl9sb2NrX2luaXQoJm5zaC0+bG9jayk7CisJCSNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmbnNoLT5vcHMud2FpdF9mb3Jfb3BzKTsKKwkJI2VuZGlmCiAKIAkJbGlzdF9hZGQoJm5zaC0+bHJ1LCAmbmV3c3RyaXBlcyk7CiAJfQpAQCAtMTg5OSwxMCArMTkzNiwxNSBAQAogCQljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9ST1RBVElOR19OX0NPTlRJTlVFOgorCQkJLyogTGlrZSBsZWZ0X3N5bW1ldHJpYywgYnV0IFAgaXMgYmVmb3JlIFEgKi8KIAkJCWlmIChzaC0+cGRfaWR4ID09IDApCiAJCQkJaS0tOwkvKiBQIEQgRCBEIFEgKi8KLQkJCWVsc2UgaWYgKGkgPiBzaC0+cGRfaWR4KQotCQkJCWkgLT0gMjsgLyogRCBEIFEgUCBEICovCisJCQllbHNlIHsKKwkJCQkvKiBEIEQgUSBQIEQgKi8KKwkJCQlpZiAoaSA8IHNoLT5wZF9pZHgpCisJCQkJCWkgKz0gcmFpZF9kaXNrczsKKwkJCQlpIC09IChzaC0+cGRfaWR4ICsgMSk7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDXzY6CiAJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUNfNjoKQEAgLTI4OTYsNyArMjkzOCw3IEBACiAgKgogICovCiAKLXN0YXRpYyBib29sIGhhbmRsZV9zdHJpcGU1KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlNShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGRpc2tzID0gc2gtPmRpc2tzLCBpOwpAQCAtMzE2NywxMSArMzIwOSw5IEBACiAJb3BzX3J1bl9pbyhzaCwgJnMpOwogCiAJcmV0dXJuX2lvKHJldHVybl9iaSk7Ci0KLQlyZXR1cm4gYmxvY2tlZF9yZGV2ID09IE5VTEw7CiB9CiAKLXN0YXRpYyBib29sIGhhbmRsZV9zdHJpcGU2KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlNihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGRpc2tzID0gc2gtPmRpc2tzOwpAQCAtMzQ1NSwxNyArMzQ5NSwxNCBAQAogCW9wc19ydW5faW8oc2gsICZzKTsKIAogCXJldHVybl9pbyhyZXR1cm5fYmkpOwotCi0JcmV0dXJuIGJsb2NrZWRfcmRldiA9PSBOVUxMOwogfQogCi0vKiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmlwZSB3YXMgaGFuZGxlZCAqLwotc3RhdGljIGJvb2wgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQorc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCWlmIChzaC0+cmFpZF9jb25mLT5sZXZlbCA9PSA2KQotCQlyZXR1cm4gaGFuZGxlX3N0cmlwZTYoc2gpOworCQloYW5kbGVfc3RyaXBlNihzaCk7CiAJZWxzZQotCQlyZXR1cm4gaGFuZGxlX3N0cmlwZTUoc2gpOworCQloYW5kbGVfc3RyaXBlNShzaCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJhaWQ1X2FjdGl2YXRlX2RlbGF5ZWQocmFpZDVfY29uZl90ICpjb25mKQpAQCAtMzUwMyw5ICszNTQwLDEwIEBACiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGk7CisJaW50IGRldnMgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkZXZzOyBpKyspIHsKIAkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5kaXNrc1tpXS5yZGV2KTsKIAkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUocmRldi0+YmRldik7CkBAIC00MDExLDYgKzQwNDksOCBAQAogCQkJc2VjdG9yX25yID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKIAkJc2VjdG9yX2RpdihzZWN0b3JfbnIsIG5ld19kYXRhX2Rpc2tzKTsKIAkJaWYgKHNlY3Rvcl9ucikgeworCQkJbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA9IHNlY3Rvcl9ucjsKKwkJCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJzeW5jX2NvbXBsZXRlZCIpOwogCQkJKnNraXBwZWQgPSAxOwogCQkJcmV0dXJuIHNlY3Rvcl9ucjsKIAkJfQpAQCAtNDI3Nyw5ICs0MzE3LDcgQEAKIAljbGVhcl9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSk7CiAJc3Bpbl91bmxvY2soJnNoLT5sb2NrKTsKIAotCS8qIHdhaXQgZm9yIGFueSBibG9ja2VkIGRldmljZSB0byBiZSBoYW5kbGVkICovCi0Jd2hpbGUgKHVubGlrZWx5KCFoYW5kbGVfc3RyaXBlKHNoKSkpCi0JCTsKKwloYW5kbGVfc3RyaXBlKHNoKTsKIAlyZWxlYXNlX3N0cmlwZShzaCk7CiAKIAlyZXR1cm4gU1RSSVBFX1NFQ1RPUlM7CkBAIC00MzQ5LDM3ICs0Mzg3LDYgQEAKIAlyZXR1cm4gaGFuZGxlZDsKIH0KIAotI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1Ngotc3RhdGljIHZvaWQgX19wcm9jZXNzX3N0cmlwZSh2b2lkICpwYXJhbSwgYXN5bmNfY29va2llX3QgY29va2llKQotewotCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBwYXJhbTsKLQotCWhhbmRsZV9zdHJpcGUoc2gpOwotCXJlbGVhc2Vfc3RyaXBlKHNoKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWFzeW5jX3NjaGVkdWxlX2RvbWFpbihfX3Byb2Nlc3Nfc3RyaXBlLCBzaCwgZG9tYWluKTsKLX0KLQotc3RhdGljIHZvaWQgc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3Npbmcoc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWFzeW5jX3N5bmNocm9uaXplX2Z1bGxfZG9tYWluKGRvbWFpbik7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgcHJvY2Vzc19zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWhhbmRsZV9zdHJpcGUoc2gpOwotCXJlbGVhc2Vfc3RyaXBlKHNoKTsKLQljb25kX3Jlc2NoZWQoKTsKLX0KLQotc3RhdGljIHZvaWQgc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3Npbmcoc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotfQotI2VuZGlmCi0KIAogLyoKICAqIFRoaXMgaXMgb3VyIHJhaWQ1IGtlcm5lbCB0aHJlYWQuCkBAIC00MzkzLDcgKzQ0MDAsNiBAQAogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGhhbmRsZWQ7Ci0JTElTVF9IRUFEKHJhaWRfZG9tYWluKTsKIAogCXByX2RlYnVnKCIrKysgcmFpZDVkIGFjdGl2ZVxuIik7CiAKQEAgLTQ0MzAsNyArNDQzNiw5IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkKIAkJaGFuZGxlZCsrOwotCQlwcm9jZXNzX3N0cmlwZShzaCwgJnJhaWRfZG9tYWluKTsKKwkJaGFuZGxlX3N0cmlwZShzaCk7CisJCXJlbGVhc2Vfc3RyaXBlKHNoKTsKKwkJY29uZF9yZXNjaGVkKCk7CiAKIAkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCX0KQEAgLTQ0MzgsNyArNDQ0Niw2IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAotCXN5bmNocm9uaXplX3N0cmlwZV9wcm9jZXNzaW5nKCZyYWlkX2RvbWFpbik7CiAJYXN5bmNfdHhfaXNzdWVfcGVuZGluZ19hbGwoKTsKIAl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKIApAQCAtNDU1OCwxMyArNDU2NSw5IEBACiAKIAlpZiAoIXNlY3RvcnMpCiAJCXNlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7Ci0JaWYgKCFyYWlkX2Rpc2tzKSB7CisJaWYgKCFyYWlkX2Rpc2tzKQogCQkvKiBzaXplIGlzIGRlZmluZWQgYnkgdGhlIHNtYWxsZXN0IG9mIHByZXZpb3VzIGFuZCBuZXcgc2l6ZSAqLwotCQlpZiAoY29uZi0+cmFpZF9kaXNrcyA8IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCi0JCQlyYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKLQkJZWxzZQotCQkJcmFpZF9kaXNrcyA9IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3M7Ci0JfQorCQlyYWlkX2Rpc2tzID0gbWluKGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOwogCiAJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+Y2h1bmtfc2VjdG9ycyAtIDEpOwogCXNlY3RvcnMgJj0gfigoc2VjdG9yX3QpbWRkZXYtPm5ld19jaHVua19zZWN0b3JzIC0gMSk7CkBAIC00NjY1LDcgKzQ2NjgsNyBAQAogCQkJfQogCQkJcGVyX2NwdV9wdHIoY29uZi0+cGVyY3B1LCBjcHUpLT5zcGFyZV9wYWdlID0gc3BhcmVfcGFnZTsKIAkJfQotCQlzY3JpYmJsZSA9IGttYWxsb2Moc2NyaWJibGVfbGVuKGNvbmYtPnJhaWRfZGlza3MpLCBHRlBfS0VSTkVMKTsKKwkJc2NyaWJibGUgPSBrbWFsbG9jKGNvbmYtPnNjcmliYmxlX2xlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2NyaWJibGUpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlicmVhazsKQEAgLTQ2ODYsNyArNDY4OSw3IEBACiBzdGF0aWMgcmFpZDVfY29uZl90ICpzZXR1cF9jb25mKG1kZGV2X3QgKm1kZGV2KQogewogCXJhaWQ1X2NvbmZfdCAqY29uZjsKLQlpbnQgcmFpZF9kaXNrLCBtZW1vcnk7CisJaW50IHJhaWRfZGlzaywgbWVtb3J5LCBtYXhfZGlza3M7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAlzdHJ1Y3QgZGlza19pbmZvICpkaXNrOwogCkBAIC00NzIyLDI4ICs0NzI1LDYgQEAKIAljb25mID0ga3phbGxvYyhzaXplb2YocmFpZDVfY29uZl90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNvbmYgPT0gTlVMTCkKIAkJZ290byBhYm9ydDsKLQotCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKLQljb25mLT5zY3JpYmJsZV9sZW4gPSBzY3JpYmJsZV9sZW4oY29uZi0+cmFpZF9kaXNrcyk7Ci0JaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvcikKLQkJY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwotCWVsc2UKLQkJY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlbHRhX2Rpc2tzOwotCi0JY29uZi0+ZGlza3MgPSBremFsbG9jKGNvbmYtPnJhaWRfZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2tfaW5mbyksCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbmYtPmRpc2tzKQotCQlnb3RvIGFib3J0OwotCi0JY29uZi0+bWRkZXYgPSBtZGRldjsKLQotCWlmICgoY29uZi0+c3RyaXBlX2hhc2h0YmwgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0JCWdvdG8gYWJvcnQ7Ci0KLQljb25mLT5sZXZlbCA9IG1kZGV2LT5uZXdfbGV2ZWw7Ci0JaWYgKHJhaWQ1X2FsbG9jX3BlcmNwdShjb25mKSAhPSAwKQotCQlnb3RvIGFib3J0OwotCiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb25mLT53YWl0X2Zvcl9zdHJpcGUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwpAQCAtNDc1NywxMSArNDczOCwzMyBAQAogCWF0b21pY19zZXQoJmNvbmYtPmFjdGl2ZV9hbGlnbmVkX3JlYWRzLCAwKTsKIAljb25mLT5ieXBhc3NfdGhyZXNob2xkID0gQllQQVNTX1RIUkVTSE9MRDsKIAorCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQorCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CisJZWxzZQorCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7CisJbWF4X2Rpc2tzID0gbWF4KGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOworCWNvbmYtPnNjcmliYmxlX2xlbiA9IHNjcmliYmxlX2xlbihtYXhfZGlza3MpOworCisJY29uZi0+ZGlza3MgPSBremFsbG9jKG1heF9kaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza19pbmZvKSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghY29uZi0+ZGlza3MpCisJCWdvdG8gYWJvcnQ7CisKKwljb25mLT5tZGRldiA9IG1kZGV2OworCisJaWYgKChjb25mLT5zdHJpcGVfaGFzaHRibCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJZ290byBhYm9ydDsKKworCWNvbmYtPmxldmVsID0gbWRkZXYtPm5ld19sZXZlbDsKKwlpZiAocmFpZDVfYWxsb2NfcGVyY3B1KGNvbmYpICE9IDApCisJCWdvdG8gYWJvcnQ7CisKIAlwcl9kZWJ1ZygicmFpZDU6IHJ1biglcykgY2FsbGVkLlxuIiwgbWRuYW1lKG1kZGV2KSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCXJhaWRfZGlzayA9IHJkZXYtPnJhaWRfZGlzazsKLQkJaWYgKHJhaWRfZGlzayA+PSBjb25mLT5yYWlkX2Rpc2tzCisJCWlmIChyYWlkX2Rpc2sgPj0gbWF4X2Rpc2tzCiAJCSAgICB8fCByYWlkX2Rpc2sgPCAwKQogCQkJY29udGludWU7CiAJCWRpc2sgPSBjb25mLT5kaXNrcyArIHJhaWRfZGlzazsKQEAgLTQ3OTMsNyArNDc5Niw3IEBACiAJfQogCiAJbWVtb3J5ID0gY29uZi0+bWF4X25yX3N0cmlwZXMgKiAoc2l6ZW9mKHN0cnVjdCBzdHJpcGVfaGVhZCkgKwotCQkgY29uZi0+cmFpZF9kaXNrcyAqICgoc2l6ZW9mKHN0cnVjdCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsKKwkJIG1heF9kaXNrcyAqICgoc2l6ZW9mKHN0cnVjdCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsKIAlpZiAoZ3Jvd19zdHJpcGVzKGNvbmYsIGNvbmYtPm1heF9ucl9zdHJpcGVzKSkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJyYWlkNTogY291bGRuJ3QgYWxsb2NhdGUgJWRrQiBmb3IgYnVmZmVyc1xuIiwgbWVtb3J5KTsKQEAgLTQ4MjAsMTEgKzQ4MjMsNDAgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKKworc3RhdGljIGludCBvbmx5X3Bhcml0eShpbnQgcmFpZF9kaXNrLCBpbnQgYWxnbywgaW50IHJhaWRfZGlza3MsIGludCBtYXhfZGVncmFkZWQpCit7CisJc3dpdGNoIChhbGdvKSB7CisJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzA6CisJCWlmIChyYWlkX2Rpc2sgPCBtYXhfZGVncmFkZWQpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fUEFSSVRZX046CisJCWlmIChyYWlkX2Rpc2sgPj0gcmFpZF9kaXNrcyAtIG1heF9kZWdyYWRlZCkKKwkJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9QQVJJVFlfMF82OgorCQlpZiAocmFpZF9kaXNrID09IDAgfHwgCisJCSAgICByYWlkX2Rpc2sgPT0gcmFpZF9kaXNrcyAtIDEpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDXzY6CisJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQ182OgorCWNhc2UgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDXzY6CisJY2FzZSBBTEdPUklUSE1fUklHSFRfU1lNTUVUUklDXzY6CisJCWlmIChyYWlkX2Rpc2sgPT0gcmFpZF9kaXNrcyAtIDEpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcnVuKG1kZGV2X3QgKm1kZGV2KQogewogCXJhaWQ1X2NvbmZfdCAqY29uZjsKIAlpbnQgd29ya2luZ19kaXNrcyA9IDAsIGNodW5rX3NpemU7CisJaW50IGRpcnR5X3Bhcml0eV9kaXNrcyA9IDA7CiAJbWRrX3JkZXZfdCAqcmRldjsKKwlzZWN0b3JfdCByZXNoYXBlX29mZnNldCA9IDA7CiAKIAlpZiAobWRkZXYtPnJlY292ZXJ5X2NwICE9IE1heFNlY3RvcikKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJyYWlkNTogJXMgaXMgbm90IGNsZWFuIgpAQCAtNDg1OCw2ICs0ODkwLDcgQEAKIAkJCSAgICAgICAib24gYSBzdHJpcGUgYm91bmRhcnlcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJcmVzaGFwZV9vZmZzZXQgPSBoZXJlX25ldyAqIG1kZGV2LT5uZXdfY2h1bmtfc2VjdG9yczsKIAkJLyogaGVyZV9uZXcgaXMgdGhlIHN0cmlwZSB3ZSB3aWxsIHdyaXRlIHRvICovCiAJCWhlcmVfb2xkID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247CiAJCXNlY3Rvcl9kaXYoaGVyZV9vbGQsIG1kZGV2LT5jaHVua19zZWN0b3JzICoKQEAgLTQ5MTMsMTIgKzQ5NDYsNTQgQEAKIAkvKgogCSAqIDAgZm9yIGEgZnVsbHkgZnVuY3Rpb25hbCBhcnJheSwgMSBvciAyIGZvciBhIGRlZ3JhZGVkIGFycmF5LgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCi0JCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgotCQkgICAgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CisJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPCAwKQorCQkJY29udGludWU7CisJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQogCQkJd29ya2luZ19kaXNrcysrOworCQkvKiBUaGlzIGRpc2MgaXMgbm90IGZ1bGx5IGluLXN5bmMuICBIb3dldmVyIGlmIGl0CisJCSAqIGp1c3Qgc3RvcmVkIHBhcml0eSAoYmV5b25kIHRoZSByZWNvdmVyeV9vZmZzZXQpLAorCQkgKiB3aGVuIHdlIGRvbid0IG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0IHRoZQorCQkgKiBhcnJheSBiZWluZyBkaXJ0eS4KKwkJICogV2hlbiByZXNoYXBlIGdvZXMgJ2JhY2t3YXJkcycsIHdlIG5ldmVyIGhhdmUKKwkJICogcGFydGlhbGx5IGNvbXBsZXRlZCBkZXZpY2VzLCBzbyB3ZSBvbmx5IG5lZWQKKwkJICogdG8gd29ycnkgYWJvdXQgcmVzaGFwZSBnb2luZyBmb3J3YXJkcy4KKwkJICovCisJCS8qIEhhY2sgYmVjYXVzZSB2MC45MSBkb2Vzbid0IHN0b3JlIHJlY292ZXJ5X29mZnNldCBwcm9wZXJseS4gKi8KKwkJaWYgKG1kZGV2LT5tYWpvcl92ZXJzaW9uID09IDAgJiYKKwkJICAgIG1kZGV2LT5taW5vcl92ZXJzaW9uID4gOTApCisJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSByZXNoYXBlX29mZnNldDsKKwkJCQorCQlwcmludGsoIiVkOiB3PSVkIHBhPSVkIHByPSVkIG09JWQgYT0lZCByPSVkIG9wMT0lZCBvcDI9JWRcbiIsCisJCSAgICAgICByZGV2LT5yYWlkX2Rpc2ssIHdvcmtpbmdfZGlza3MsIGNvbmYtPnByZXZfYWxnbywKKwkJICAgICAgIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MsIGNvbmYtPm1heF9kZWdyYWRlZCwKKwkJICAgICAgIGNvbmYtPmFsZ29yaXRobSwgY29uZi0+cmFpZF9kaXNrcywgCisJCSAgICAgICBvbmx5X3Bhcml0eShyZGV2LT5yYWlkX2Rpc2ssCisJCQkJICAgY29uZi0+cHJldl9hbGdvLAorCQkJCSAgIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MsCisJCQkJICAgY29uZi0+bWF4X2RlZ3JhZGVkKSwKKwkJICAgICAgIG9ubHlfcGFyaXR5KHJkZXYtPnJhaWRfZGlzaywKKwkJCQkgICBjb25mLT5hbGdvcml0aG0sCisJCQkJICAgY29uZi0+cmFpZF9kaXNrcywKKwkJCQkgICBjb25mLT5tYXhfZGVncmFkZWQpKTsKKwkJaWYgKHJkZXYtPnJlY292ZXJ5X29mZnNldCA8IHJlc2hhcGVfb2Zmc2V0KSB7CisJCQkvKiBXZSBuZWVkIHRvIGNoZWNrIG9sZCBhbmQgbmV3IGxheW91dCAqLworCQkJaWYgKCFvbmx5X3Bhcml0eShyZGV2LT5yYWlkX2Rpc2ssCisJCQkJCSBjb25mLT5hbGdvcml0aG0sCisJCQkJCSBjb25mLT5yYWlkX2Rpc2tzLAorCQkJCQkgY29uZi0+bWF4X2RlZ3JhZGVkKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIW9ubHlfcGFyaXR5KHJkZXYtPnJhaWRfZGlzaywKKwkJCQkgY29uZi0+cHJldl9hbGdvLAorCQkJCSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzLAorCQkJCSBjb25mLT5tYXhfZGVncmFkZWQpKQorCQkJY29udGludWU7CisJCWRpcnR5X3Bhcml0eV9kaXNrcysrOworCX0KIAotCW1kZGV2LT5kZWdyYWRlZCA9IGNvbmYtPnJhaWRfZGlza3MgLSB3b3JraW5nX2Rpc2tzOworCW1kZGV2LT5kZWdyYWRlZCA9IChtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKKwkJCSAgIC0gd29ya2luZ19kaXNrcyk7CiAKIAlpZiAobWRkZXYtPmRlZ3JhZGVkID4gY29uZi0+bWF4X2RlZ3JhZGVkKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6IG5vdCBlbm91Z2ggb3BlcmF0aW9uYWwgZGV2aWNlcyBmb3IgJXMiCkBAIC00OTMxLDcgKzUwMDYsNyBAQAogCW1kZGV2LT5kZXZfc2VjdG9ycyAmPSB+KG1kZGV2LT5jaHVua19zZWN0b3JzIC0gMSk7CiAJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKIAotCWlmIChtZGRldi0+ZGVncmFkZWQgPiAwICYmCisJaWYgKG1kZGV2LT5kZWdyYWRlZCA+IGRpcnR5X3Bhcml0eV9kaXNrcyAmJgogCSAgICBtZGRldi0+cmVjb3ZlcnlfY3AgIT0gTWF4U2VjdG9yKSB7CiAJCWlmIChtZGRldi0+b2tfc3RhcnRfZGVncmFkZWQpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC01MzU3LDkgKzU0MzIsMTEgQEAKIAkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCWlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkgewogCQkJCWNoYXIgbm1bMjBdOwotCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCisJCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCQllbHNlCisJCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IDA7CiAJCQkJYWRkZWRfZGV2aWNlcysrOwotCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IDA7CiAJCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOwogCQkJCWlmIChzeXNmc19jcmVhdGVfbGluaygmbWRkZXYtPmtvYmosCiAJCQkJCQkgICAgICAmcmRldi0+a29iaiwgbm0pKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5oIGIvZHJpdmVycy9tZC9yYWlkNS5oCmluZGV4IDIzOTBlMGUuLmRkNzA4MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ1LmgKQEAgLTIxNCwxMiArMjE0LDIwIEBACiAJaW50CQkJZGlza3M7CQkvKiBkaXNrcyBpbiBzdHJpcGUgKi8KIAllbnVtIGNoZWNrX3N0YXRlcwljaGVja19zdGF0ZTsKIAllbnVtIHJlY29uc3RydWN0X3N0YXRlcyByZWNvbnN0cnVjdF9zdGF0ZTsKLQkvKiBzdHJpcGVfb3BlcmF0aW9ucworCS8qKgorCSAqIHN0cnVjdCBzdHJpcGVfb3BlcmF0aW9ucwogCSAqIEB0YXJnZXQgLSBTVFJJUEVfT1BfQ09NUFVURV9CTEsgdGFyZ2V0CisJICogQHRhcmdldDIgLSAybmQgY29tcHV0ZSB0YXJnZXQgaW4gdGhlIHJhaWQ2IGNhc2UKKwkgKiBAemVyb19zdW1fcmVzdWx0IC0gUCBhbmQgUSB2ZXJpZmljYXRpb24gZmxhZ3MKKwkgKiBAcmVxdWVzdCAtIGFzeW5jIHNlcnZpY2UgcmVxdWVzdCBmbGFncyBmb3IgcmFpZF9ydW5fb3BzCiAJICovCiAJc3RydWN0IHN0cmlwZV9vcGVyYXRpb25zIHsKIAkJaW50IAkJICAgICB0YXJnZXQsIHRhcmdldDI7CiAJCWVudW0gc3VtX2NoZWNrX2ZsYWdzIHplcm9fc3VtX3Jlc3VsdDsKKwkJI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NgorCQl1bnNpZ25lZCBsb25nCSAgICAgcmVxdWVzdDsKKwkJd2FpdF9xdWV1ZV9oZWFkX3QgICAgd2FpdF9mb3Jfb3BzOworCQkjZW5kaWYKIAl9IG9wczsKIAlzdHJ1Y3QgcjVkZXYgewogCQlzdHJ1Y3QgYmlvCXJlcTsKQEAgLTI5NCw2ICszMDIsOCBAQAogI2RlZmluZQlTVFJJUEVfRlVMTF9XUklURQkxMyAvKiBhbGwgYmxvY2tzIGFyZSBzZXQgdG8gYmUgb3ZlcndyaXR0ZW4gKi8KICNkZWZpbmUJU1RSSVBFX0JJT0ZJTExfUlVOCTE0CiAjZGVmaW5lCVNUUklQRV9DT01QVVRFX1JVTgkxNQorI2RlZmluZQlTVFJJUEVfT1BTX1JFUV9QRU5ESU5HCTE2CisKIC8qCiAgKiBPcGVyYXRpb24gcmVxdWVzdCBmbGFncwogICovCkBAIC00NzgsNyArNDg4LDcgQEAKIHsKIAlyZXR1cm4gKGxheW91dCA+PSAwICYmIGxheW91dCA8PSA1KQogCQl8fAotCQkobGF5b3V0ID09IDggfHwgbGF5b3V0ID09IDEwKQorCQkobGF5b3V0ID49IDggJiYgbGF5b3V0IDw9IDEwKQogCQl8fAogCQkobGF5b3V0ID49IDE2ICYmIGxheW91dCA8PSAyMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YyBiL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCmluZGV4IDY5OWRmZWUuLjI2NTRkNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCkBAIC0xNSw3ICsxNSw3IEBACiAgKgogICogJCMtd2F5IHVucm9sbGVkIHBvcnRhYmxlIGludGVnZXIgbWF0aCBSQUlELTYgaW5zdHJ1Y3Rpb24gc2V0CiAgKgotICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLnBsCisgKiBUaGlzIGZpbGUgaXMgcG9zdHByb2Nlc3NlZCB1c2luZyB1bnJvbGwuYXdrCiAgKgogICogPGJlbmg+IGhwYTogaW4gcHJvY2VzcywKICAqIHlvdSBjYW4ganVzdCAic3RlYWwiIHRoZSB2ZWMgdW5pdCB3aXRoIGVuYWJsZV9rZXJuZWxfYWx0aXZlYygpIChidXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMgYi9kcml2ZXJzL21kL3JhaWQ2aW50LnVjCmluZGV4IGY5YmY5Y2IuLmQxZTI3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMKKysrIGIvZHJpdmVycy9tZC9yYWlkNmludC51YwpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqICQjLXdheSB1bnJvbGxlZCBwb3J0YWJsZSBpbnRlZ2VyIG1hdGggUkFJRC02IGluc3RydWN0aW9uIHNldAogICoKLSAqIFRoaXMgZmlsZSBpcyBwb3N0cHJvY2Vzc2VkIHVzaW5nIHVucm9sbC5wbAorICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLmF3awogICovCiAKICNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZSBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCmluZGV4IDU4ZmZkZjQuLjI4NzRjYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogT1BURkxBR1MgPSAtTzIJCQkjIEFkanVzdCBhcyBkZXNpcmVkCiBDRkxBR1MJID0gLUkuLiAtSSAuLi8uLi8uLi9pbmNsdWRlIC1nICQoT1BURkxBR1MpCiBMRAkgPSBsZAotUEVSTAkgPSBwZXJsCitBV0sJID0gYXdrCiBBUgkgPSBhcgogUkFOTElCCSA9IHJhbmxpYgogCkBAIC0zNSwzNSArMzUsMzUgQEAKIHJhaWQ2dGVzdDogdGVzdC5jIHJhaWQ2LmEKIAkkKENDKSAkKENGTEFHUykgLW8gcmFpZDZ0ZXN0ICReCiAKLXJhaWQ2YWx0aXZlYzEuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDEgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorcmFpZDZhbHRpdmVjMS5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0xIDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKIAotcmFpZDZhbHRpdmVjMi5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMiA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACityYWlkNmFsdGl2ZWMyLmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTIgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAogCi1yYWlkNmFsdGl2ZWM0LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCA0IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKK3JhaWQ2YWx0aXZlYzQuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49NCA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACiAKLXJhaWQ2YWx0aXZlYzguYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDggPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorcmFpZDZhbHRpdmVjOC5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj04IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKIAotcmFpZDZpbnQxLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDEgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDEuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0xIDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDIuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMiA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50Mi5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTIgPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50NC5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCA0IDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQ0LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49NCA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQ4LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDggPCByYWlkNmludC51YyA+ICRACityYWlkNmludDguYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj04IDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDE2LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDE2IDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQxNi5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTE2IDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDMyLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDMyIDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQzMi5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTMyIDwgcmFpZDZpbnQudWMgPiAkQAogCiByYWlkNnRhYmxlcy5jOiBta3RhYmxlcwogCS4vbWt0YWJsZXMgPiByYWlkNnRhYmxlcy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3Vucm9sbC5hd2sgYi9kcml2ZXJzL21kL3Vucm9sbC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhYTAzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWQvdW5yb2xsLmF3awpAQCAtMCwwICsxLDIwIEBACisKKyMgVGhpcyBmaWx0ZXIgcmVxdWlyZXMgb25lIGNvbW1hbmQgbGluZSBvcHRpb24gb2YgZm9ybSAtdk49bgorIyB3aGVyZSBuIG11c3QgYmUgYSBkZWNpbWFsIG51bWJlci4KKyMKKyMgUmVwZWF0IGVhY2ggaW5wdXQgbGluZSBjb250YWluaW5nICQkIG4gdGltZXMsIHJlcGxhY2luZyAkJCB3aXRoIDAuLi5uLTEuCisjIFJlcGxhY2UgZWFjaCAkIyB3aXRoIG4sIGFuZCBlYWNoICQqIHdpdGggYSBzaW5nbGUgJC4KKworQkVHSU4geworCW4gPSBOICsgMAorfQoreworCWlmICgvXCRcJC8pIHsgcmVwID0gbiB9IGVsc2UgeyByZXAgPSAxIH0KKwlmb3IgKGkgPSAwOyBpIDwgcmVwOyArK2kpIHsKKwkJdG1wID0gJDAKKwkJZ3N1YigvXCRcJC8sIGksIHRtcCkKKwkJZ3N1YigvXCRcIy8sIG4sIHRtcCkKKwkJZ3N1YigvXCRcKi8sICIkIiwgdG1wKQorCQlwcmludCB0bXAKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3Vucm9sbC5wbCBiL2RyaXZlcnMvbWQvdW5yb2xsLnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWNjNzEwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWQvdW5yb2xsLnBsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0jCi0jIFRha2UgYSBwaWVjZSBvZiBDIGNvZGUgYW5kIGZvciBlYWNoIGxpbmUgd2hpY2ggY29udGFpbnMgdGhlIHNlcXVlbmNlICQkCi0jIHJlcGVhdCBuIHRpbWVzIHdpdGggJCByZXBsYWNlZCBieSAwLi4ubi0xOyB0aGUgc2VxdWVuY2UgJCMgaXMgcmVwbGFjZWQKLSMgYnkgdGhlIHVucm9sbGluZyBmYWN0b3IsIGFuZCAkKiB3aXRoIGEgc2luZ2xlICQKLSMKLQotKCRuKSA9IEBBUkdWOwotJG4gKz0gMDsKLQotd2hpbGUgKCBkZWZpbmVkKCRsaW5lID0gPFNURElOPikgKSB7Ci0gICAgaWYgKCAkbGluZSA9fiAvXCRcJC8gKSB7Ci0JJHJlcCA9ICRuOwotICAgIH0gZWxzZSB7Ci0JJHJlcCA9IDE7Ci0gICAgfQotICAgIGZvciAoICRpID0gMCA7ICRpIDwgJHJlcCA7ICRpKysgKSB7Ci0JJHRtcCA9ICRsaW5lOwotCSR0bXAgPX4gcy9cJFwkLyRpL2c7Ci0JJHRtcCA9fiBzL1wkXCMvJG4vZzsKLQkkdG1wID1+IHMvXCRcKi9cJC9nOwotCXByaW50ICR0bXA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYwppbmRleCA2NDU5NTExLi4zYTUwY2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYwpAQCAtNjE2LDEzICs2MTYsMTMgQEAKIAkJY2FzZSBSRjI6CiAJCQltYXBbaV0ucmZfYTEgPSAocHJvZ19jYWxbUkYyXSAtIHByb2dfdGFiW1JGMl0gLQogCQkJCQlwcm9nX2NhbFtSRjFdICsgcHJvZ190YWJbUkYxXSkgLwotCQkJCSgocmZfZnJlcVtSRjJdIC0gcmZfZnJlcVtSRjFdKSAvIDEwMDApOworCQkJCShzMzIpKChyZl9mcmVxW1JGMl0gLSByZl9mcmVxW1JGMV0pIC8gMTAwMCk7CiAJCQltYXBbaV0ucmYyICAgPSByZl9mcmVxW1JGMl0gLyAxMDAwOwogCQkJYnJlYWs7CiAJCWNhc2UgUkYzOgogCQkJbWFwW2ldLnJmX2EyID0gKHByb2dfY2FsW1JGM10gLSBwcm9nX3RhYltSRjNdIC0KIAkJCQkJcHJvZ19jYWxbUkYyXSArIHByb2dfdGFiW1JGMl0pIC8KLQkJCQkoKHJmX2ZyZXFbUkYzXSAtIHJmX2ZyZXFbUkYyXSkgLyAxMDAwKTsKKwkJCQkoczMyKSgocmZfZnJlcVtSRjNdIC0gcmZfZnJlcVtSRjJdKSAvIDEwMDApOwogCQkJbWFwW2ldLnJmX2IyID0gcHJvZ19jYWxbUkYyXSAtIHByb2dfdGFiW1JGMl07CiAJCQltYXBbaV0ucmYzICAgPSByZl9mcmVxW1JGM10gLyAxMDAwOwogCQkJYnJlYWs7CkBAIC0xMDAwLDEyICsxMDAwLDEyIEBACiAJc3RydWN0IHRkYTE4MjcxX3N0ZF9tYXBfaXRlbSAqbWFwOwogCWNoYXIgKm1vZGU7CiAJaW50IHJldDsKLQl1MzIgZnJlcSA9IHBhcmFtcy0+ZnJlcXVlbmN5ICogNjI1MDA7CisJdTMyIGZyZXEgPSBwYXJhbXMtPmZyZXF1ZW5jeSAqIDEyNSAqCisJCSgocGFyYW1zLT5tb2RlID09IFY0TDJfVFVORVJfUkFESU8pID8gMSA6IDEwMDApIC8gMjsKIAogCXByaXYtPm1vZGUgPSBUREExODI3MV9BTkFMT0c7CiAKIAlpZiAocGFyYW1zLT5tb2RlID09IFY0TDJfVFVORVJfUkFESU8pIHsKLQkJZnJlcSA9IGZyZXEgLyAxMDAwOwogCQltYXAgPSAmc3RkX21hcC0+Zm1fcmFkaW87CiAJCW1vZGUgPSAiZm0iOwogCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9NTikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwppbmRleCAzNzUwZmY0Li5jMzc3OTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwpAQCAtMjAsNiArMjAsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0xMjAzLDcgKzEyMDQsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZHZyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZHZyX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnJlYWQgPSBkdmJfZHZyX3JlYWQsCiAJLndyaXRlID0gZHZiX2R2cl93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKaW5kZXggZWVmNmQzNi4uOTFjNTM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKQEAgLTIxLDYgKzIxLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCmluZGV4IDhjOWFlMGEuLjAyNDFhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCiAjaW5jbHVkZSAiZHZiX25ldC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDk3NDRiMDYuLjBlNGI5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTc1LDcgKzc1LDcgQEAKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMDUgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAKKwlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMjY2IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jCmluZGV4IDA3MzdjNjMuLjNkZjIwNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJaW50IGkgPSAwOwogCXN0cnVjdCByZXFfdCByZXE7CiAJaW50IHJldCA9IDA7Ci0JbWVtc2V0KCZyZXEsIDAsIHNpemVvZigmcmVxKSk7CisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKIAogCWlmIChudW0gPiAyKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCmluZGV4IDBiMjgxMmEuLjZiZDg5NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwpAQCAtMTkyNSw3ICsxOTI1LDcgQEAKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCQl7ICAgIkxlYWR0ZWsgV2luZmFzdCBEVFYgRG9uZ2xlIChTVEs3NzAwUCBiYXNlZCkiLAotCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzhdIH0sCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbOF0sICZkaWIwNzAwX3VzYl9pZF90YWJsZVszNF0gfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCQl7ICAgIkFWZXJNZWRpYSBBVmVyVFYgRFZCLVQgRXhwcmVzcyIsCkBAIC0yMDY0LDcgKzIwNjQsNyBAQAogCQkJfSwKIAkJfSwKIAotCQkubnVtX2RldmljZV9kZXNjcyA9IDEyLAorCQkubnVtX2RldmljZV9kZXNjcyA9IDExLAogCQkuZGV2aWNlcyA9IHsKIAkJCXsgICAiRGlCY29tIFNUSzcwNzBQIHJlZmVyZW5jZSBkZXNpZ24iLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzE1XSwgTlVMTCB9LApAQCAtMjA5OCwxMSArMjA5OCw2IEBACiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzBdLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAotCQkJeyAgICJUZXJyYXRlYyBDaW5lcmd5IFQgVVNCIFhYUy8gVDMiLAotCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzMzXSwKLQkJCQkJJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzUyXSwgTlVMTCB9LAotCQkJCXsgTlVMTCB9LAotCQkJfSwKIAkJCXsgICAiRWxnYXRvIEV5ZVRWIERUVCIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDldLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCkBAIC0yMzQzLDggKzIzMzgsMTAgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs1OV0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCi0JCQl7ICAgIlRlcnJhdGVjIENpbmVyZ3kgVCBVU0IgWFhTIChIRCkiLAotCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzM0XSwgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzYwXSB9LAorCQkJeyAgICJUZXJyYXRlYyBDaW5lcmd5IFQgVVNCIFhYUyAoSEQpLyBUMyIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzNdLAorCQkJCQkmZGliMDcwMF91c2JfaWRfdGFibGVbNTJdLAorCQkJCQkmZGliMDcwMF91c2JfaWRfdGFibGVbNjBdLCBOVUxMfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwppbmRleCBkMWI2N2ZlLi40ODVkMDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKQEAgLTEwNTAsMjggKzEwNTAsMjggQEAKIAljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLwogCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9QTVQ7IC8qIGNhIHRhZyAqLwogCWMtPm9wZXJhbmRbNl0gPSAwOyAvKiBtb3JlL2xhc3QgKi8KLQkvKiBjLT5vcGVyYW5kWzddID0gWFhYcHJvZ3JhbV9pbmZvX2xlbmd0aCArIDE3OyAqLyAvKiBsZW5ndGggKi8KLQljLT5vcGVyYW5kWzhdID0gbGlzdF9tYW5hZ2VtZW50OwotCWMtPm9wZXJhbmRbOV0gPSAweDAxOyAvKiBwbXRfY21kPU9LX2Rlc2NyYW1ibGUgKi8KKwkvKiBVc2UgdGhyZWUgYnl0ZXMgZm9yIGxlbmd0aCBmaWVsZCBpbiBjYXNlIGxlbmd0aCA+IDEyNyAqLworCWMtPm9wZXJhbmRbMTBdID0gbGlzdF9tYW5hZ2VtZW50OworCWMtPm9wZXJhbmRbMTFdID0gMHgwMTsgLyogcG10X2NtZD1PS19kZXNjcmFtYmxlICovCiAKIAkvKiBUUyBwcm9ncmFtIG1hcCB0YWJsZSAqLwogCi0JYy0+b3BlcmFuZFsxMF0gPSAweDAyOyAvKiBUYWJsZSBpZD0yICovCi0JYy0+b3BlcmFuZFsxMV0gPSAweDgwOyAvKiBTZWN0aW9uIHN5bnRheCArIGxlbmd0aCAqLwotCS8qIGMtPm9wZXJhbmRbMTJdID0gWFhYcHJvZ3JhbV9pbmZvX2xlbmd0aCArIDEyOyAqLwotCWMtPm9wZXJhbmRbMTNdID0gbXNnWzFdOyAvKiBQcm9ncmFtIG51bWJlciAqLwotCWMtPm9wZXJhbmRbMTRdID0gbXNnWzJdOwotCWMtPm9wZXJhbmRbMTVdID0gMHgwMTsgLyogVmVyc2lvbiBudW1iZXI9MCArIGN1cnJlbnQvbmV4dD0xICovCi0JYy0+b3BlcmFuZFsxNl0gPSAweDAwOyAvKiBTZWN0aW9uIG51bWJlcj0wICovCi0JYy0+b3BlcmFuZFsxN10gPSAweDAwOyAvKiBMYXN0IHNlY3Rpb24gbnVtYmVyPTAgKi8KLQljLT5vcGVyYW5kWzE4XSA9IDB4MWY7IC8qIFBDUl9QSUQ9MUZGRiAqLwotCWMtPm9wZXJhbmRbMTldID0gMHhmZjsKLQljLT5vcGVyYW5kWzIwXSA9IChwcm9ncmFtX2luZm9fbGVuZ3RoID4+IDgpOyAvKiBQcm9ncmFtIGluZm8gbGVuZ3RoICovCi0JYy0+b3BlcmFuZFsyMV0gPSAocHJvZ3JhbV9pbmZvX2xlbmd0aCAmIDB4ZmYpOworCWMtPm9wZXJhbmRbMTJdID0gMHgwMjsgLyogVGFibGUgaWQ9MiAqLworCWMtPm9wZXJhbmRbMTNdID0gMHg4MDsgLyogU2VjdGlvbiBzeW50YXggKyBsZW5ndGggKi8KKwkvKiBjLT5vcGVyYW5kWzE0XSA9IFhYWHByb2dyYW1faW5mb19sZW5ndGggKyAxMjsgKi8KKwljLT5vcGVyYW5kWzE1XSA9IG1zZ1sxXTsgLyogUHJvZ3JhbSBudW1iZXIgKi8KKwljLT5vcGVyYW5kWzE2XSA9IG1zZ1syXTsKKwljLT5vcGVyYW5kWzE3XSA9IDB4MDE7IC8qIFZlcnNpb24gbnVtYmVyPTAgKyBjdXJyZW50L25leHQ9MSAqLworCWMtPm9wZXJhbmRbMThdID0gMHgwMDsgLyogU2VjdGlvbiBudW1iZXI9MCAqLworCWMtPm9wZXJhbmRbMTldID0gMHgwMDsgLyogTGFzdCBzZWN0aW9uIG51bWJlcj0wICovCisJYy0+b3BlcmFuZFsyMF0gPSAweDFmOyAvKiBQQ1JfUElEPTFGRkYgKi8KKwljLT5vcGVyYW5kWzIxXSA9IDB4ZmY7CisJYy0+b3BlcmFuZFsyMl0gPSAocHJvZ3JhbV9pbmZvX2xlbmd0aCA+PiA4KTsgLyogUHJvZ3JhbSBpbmZvIGxlbmd0aCAqLworCWMtPm9wZXJhbmRbMjNdID0gKHByb2dyYW1faW5mb19sZW5ndGggJiAweGZmKTsKIAogCS8qIENBIGRlc2NyaXB0b3JzIGF0IHByb2dyYW1tZSBsZXZlbCAqLwogCXJlYWRfcG9zID0gNjsKLQl3cml0ZV9wb3MgPSAyMjsKKwl3cml0ZV9wb3MgPSAyNDsKIAlpZiAocHJvZ3JhbV9pbmZvX2xlbmd0aCA+IDApIHsKIAkJcG10X2NtZF9pZCA9IG1zZ1tyZWFkX3BvcysrXTsKIAkJaWYgKHBtdF9jbWRfaWQgIT0gMSAmJiBwbXRfY21kX2lkICE9IDQpCkBAIC0xMTEzLDggKzExMTMsMTAgQEAKIAljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IDB4MDA7CiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOwogCi0JYy0+b3BlcmFuZFs3XSA9IHdyaXRlX3BvcyAtIDg7Ci0JYy0+b3BlcmFuZFsxMl0gPSB3cml0ZV9wb3MgLSAxMzsKKwljLT5vcGVyYW5kWzddID0gMHg4MjsKKwljLT5vcGVyYW5kWzhdID0gKHdyaXRlX3BvcyAtIDEwKSA+PiA4OworCWMtPm9wZXJhbmRbOV0gPSAod3JpdGVfcG9zIC0gMTApICYgMHhmZjsKKwljLT5vcGVyYW5kWzE0XSA9IHdyaXRlX3BvcyAtIDE1OwogCiAJY3JjMzJfY3N1bSA9IGNyYzMyX2JlKDAsICZjLT5vcGVyYW5kWzEwXSwgYy0+b3BlcmFuZFsxMl0gLSAxKTsKIAljLT5vcGVyYW5kW3dyaXRlX3BvcyAtIDRdID0gKGNyYzMyX2NzdW0gPj4gMjQpICYgMHhmZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtY2kuYwppbmRleCBlZWI4MGQwLi44NTNlMDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIAlyZXR1cm4gUE9MTElOOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmZHR2X2NhX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmZHR2X2NhX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5pb2N0bAkJPSBkdmJfZ2VuZXJpY19pb2N0bCwKIAkub3BlbgkJPSBkdmJfZ2VuZXJpY19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mZS5jCmluZGV4IDdiYTQzNjMuLmU0OWNkYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMKQEAgLTE0MSwxOCArMTQxLDEyIEBACiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi0jZGVmaW5lIEFDQ0VQVEVEIDB4OQotCiBzdGF0aWMgaW50IGZkdHZfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgZmlyZWR0diAqZmR0diA9IGZlLT5zZWNfcHJpdjsKIAotCS8qIEZJWE1FOiBhdmNfdHVuZXJfZHNkIG5ldmVyIHJldHVybnMgQUNDRVBURUQuIENoZWNrIHN0YXR1cz8gKi8KLQlpZiAoYXZjX3R1bmVyX2RzZChmZHR2LCBwYXJhbXMpICE9IEFDQ0VQVEVEKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlCi0JCXJldHVybiAwOyAvKiBub3Qgc3VyZSBvZiB0aGlzLi4uICovCisJcmV0dXJuIGF2Y190dW5lcl9kc2QoZmR0diwgcGFyYW1zKTsKIH0KIAogc3RhdGljIGludCBmZHR2X2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCmluZGV4IDhhMmUxZTcuLmVlYzllNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaApAQCAtNTEsNiArNTEsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMDA3MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZGliMDA3MF9jb25maWcgKmNmZyk7CiBleHRlcm4gdTE2IGRpYjAwNzBfd2JkX29mZnNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICopOworZXh0ZXJuIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBvcGVuKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwNzBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IGRpYjAwNzBfY29uZmlnICpjZmcpCiB7CkBAIC02Myw3ICs2NCwxMSBAQAogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiAtRU5PREVWOwogfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IG9wZW4pCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7Cit9CiAjZW5kaWYKLWV4dGVybiB2b2lkIGRpYjAwNzBfY3RybF9hZ2NfZmlsdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTggb3Blbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwppbmRleCA1NWVmNmVlLi4wNzgxZjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwpAQCAtMTM3NSw2ICsxMzc1LDExIEBACiAJaWYgKGRpYjcwMDBwX2lkZW50aWZ5KHN0KSAhPSAwKQogCQlnb3RvIGVycm9yOwogCisJLyogRklYTUU6IG1ha2Ugc3VyZSB0aGUgZGV2LnBhcmVudCBmaWVsZCBpcyBpbml0aWFsaXplZCwgb3IgZWxzZQorCXJlcXVlc3RfZmlybXdhcmUoKSB3aWxsIGhpdCBhbiBPT1BTICh0aGlzIHNob3VsZCBiZSBtb3ZlZCBzb21ld2hlcmUKKwltb3JlIGNvbW1vbikgKi8KKwlzdC0+aTJjX21hc3Rlci5nYXRlZF90dW5lcl9pMmNfYWRhcC5kZXYucGFyZW50ID0gaTJjX2FkYXAtPmRldi5wYXJlbnQ7CisKIAlkaWJ4MDAwX2luaXRfaTJjX21hc3Rlcigmc3QtPmkyY19tYXN0ZXIsIERJQjcwMDBQLCBzdC0+aTJjX2FkYXAsIHN0LT5pMmNfYWRkcik7CiAKIAlkaWI3MDAwcF9kZW1vZF9yZXNldChzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMKaW5kZXggODFlNjIzYS4uMWZkODMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3B0MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9wdDEuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAiZHZiZGV2LmgiCiAjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCmluZGV4IGNiOGEzNTguLjhmODhhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCkBAIC01MjksNiArNTI5LDEyIEBACiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fTklDRSB9LAogCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDMwMSksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fVkVOSUNFIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHhiOTAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4YjkxMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweGMwMDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCmluZGV4IDhiMTQ0MDEuLjQ4MmQwZjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIFY0TDIgQVBJIGRlZnMJCSovCiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IDkzOWQxZTUuLmE2NzI0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKQEAgLTEyOTksNyArMTI5OSw3IEBACiAKIAl0dm5vcm0gPSAmYnR0dl90dm5vcm1zW25vcm1dOwogCi0JaWYgKCFtZW1jbXAoJmJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uY3JvcGNhcCwgJnR2bm9ybS0+Y3JvcGNhcCwKKwlpZiAobWVtY21wKCZidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLmNyb3BjYXAsICZ0dm5vcm0tPmNyb3BjYXAsCiAJCSAgICBzaXplb2YgKHR2bm9ybS0+Y3JvcGNhcCkpKSB7CiAJCWJ0dHZfY3JvcF9yZXNldCgmYnR2LT5jcm9wWzBdLCBub3JtKTsKIAkJYnR2LT5jcm9wWzFdID0gYnR2LT5jcm9wWzBdOyAvKiBjdXJyZW50ID0gZGVmYXVsdCAqLwpAQCAtMzgwMCwxMSArMzgwMCwzNCBAQAogCQlpZiAoIVY0TDJfRklFTERfSEFTX0JPVEgoaXRlbS0+dmIuZmllbGQpICYmCiAJCSAgICAoaXRlbS0+dmIucXVldWUubmV4dCAhPSAmYnR2LT5jYXB0dXJlKSkgewogCQkJaXRlbSA9IGxpc3RfZW50cnkoaXRlbS0+dmIucXVldWUubmV4dCwgc3RydWN0IGJ0dHZfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCQkvKiBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+IC0gT25seSBjaGVjaworCQkJICogYW5kIHNldCB1cCB0aGUgYm90dG9tIGZpZWxkIGluIHRoZSBsb2dpYworCQkJICogYmVsb3cuICBEb24ndCBldmVyIGRvIHRoZSB0b3AgZmllbGQuICBUaGlzCisJCQkgKiBvZiBjb3Vyc2UgbWVhbnMgdGhhdCBpZiB3ZSBzZXQgdXAgdGhlCisJCQkgKiBib3R0b20gZmllbGQgaW4gdGhlIGFib3ZlIGNvZGUgdGhhdCB3ZSdsbAorCQkJICogYWN0dWFsbHkgc2tpcCBhIGZpZWxkLiAgQnV0IHRoYXQncyBPSy4KKwkJCSAqIEhhdmluZyBwcm9jZXNzZWQgb25seSBhIHNpbmdsZSBidWZmZXIgdGhpcworCQkJICogdGltZSwgdGhlbiB0aGUgbmV4dCB0aW1lIGFyb3VuZCB0aGUgZmlyc3QKKwkJCSAqIGF2YWlsYWJsZSBidWZmZXIgc2hvdWxkIGJlIGZvciBhIHRvcCBmaWVsZC4KKwkJCSAqIFRoYXQgd2lsbCB0aGVuIGNhdXNlIHVzIGhlcmUgdG8gc2V0IHVwIGEKKwkJCSAqIHRvcCB0aGVuIGEgYm90dG9tIGZpZWxkIGluIHRoZSBub3JtYWwgd2F5LgorCQkJICogVGhlIGFsdGVybmF0aXZlIHRvIHRoaXMgdW5kZXJzdGFuZGluZyBpcworCQkJICogdGhhdCB3ZSBzZXQgdXAgdGhlIHNlY29uZCBhdmFpbGFibGUgYnVmZmVyCisJCQkgKiBhcyBhIHRvcCBmaWVsZCwgYnV0IHRoYXQncyBvdXQgb2Ygb3JkZXIKKwkJCSAqIHNpbmNlIHRoaXMgZHJpdmVyIGFsd2F5cyBwcm9jZXNzZXMgdGhlIHRvcAorCQkJICogZmllbGQgZmlyc3QgLSB0aGUgZWZmZWN0IHdpbGwgYmUgdGhlIHR3bworCQkJICogYnVmZmVycyBiZWluZyByZXR1cm5lZCBpbiB0aGUgd3Jvbmcgb3JkZXIsCisJCQkgKiB3aXRoIHRoZSBzZWNvbmQgYnVmZmVyIGFsc28gYmVpbmcgZGVsYXllZAorCQkJICogYnkgb25lIGZpZWxkIHRpbWUgKG93aW5nIHRvIHRoZSBmaWZvIG5hdHVyZQorCQkJICogb2YgdmlkZW9idWYpLiAgV29yc2Ugc3RpbGwsIHdlJ2xsIGJlIHN0dWNrCisJCQkgKiBkb2luZyBmaWVsZHMgb3V0IG9mIG9yZGVyIG5vdyBldmVyeSB0aW1lCisJCQkgKiB1bnRpbCBzb21ldGhpbmcgZWxzZSBjYXVzZXMgYSBmaWVsZCB0byBiZQorCQkJICogZHJvcHBlZC4gIEJ5IGVmZmVjdGl2ZWx5IGZvcmNpbmcgYSBmaWVsZCB0bworCQkJICogZHJvcCB0aGlzIHdheSB0aGVuIHdlIGFsd2F5cyBnZXQgYmFjayBpbnRvCisJCQkgKiBzeW5jIHdpdGhpbiBhIHNpbmdsZSBmcmFtZSB0aW1lLiAgKE91dCBvZgorCQkJICogb3JkZXIgZmllbGRzIGNhbiBzY3JldyB1cCBkZWludGVybGFjaW5nCisJCQkgKiBhbGdvcml0aG1zLikgKi8KIAkJCWlmICghVjRMMl9GSUVMRF9IQVNfQk9USChpdGVtLT52Yi5maWVsZCkpIHsKLQkJCQlpZiAoTlVMTCA9PSBzZXQtPnRvcCAmJgotCQkJCSAgICBWNEwyX0ZJRUxEX1RPUCA9PSBpdGVtLT52Yi5maWVsZCkgewotCQkJCQlzZXQtPnRvcCA9IGl0ZW07Ci0JCQkJfQogCQkJCWlmIChOVUxMID09IHNldC0+Ym90dG9tICYmCiAJCQkJICAgIFY0TDJfRklFTERfQk9UVE9NID09IGl0ZW0tPnZiLmZpZWxkKSB7CiAJCQkJCXNldC0+Ym90dG9tID0gaXRlbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IDY1N2M0ODEuLjEwMjMwY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtMTMyNSw3ICsxMzI1LDcgQEAKIAltdXRleF91bmxvY2soJnNidWYtPmNhbS0+c19tdXRleCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgY2FmZV92NGxfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjYWZlX3Y0bF92bV9vcHMgPSB7CiAJLm9wZW4gPSBjYWZlX3Y0bF92bV9vcGVuLAogCS5jbG9zZSA9IGNhZmVfdjRsX3ZtX2Nsb3NlCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCA0M2FiMGFkLi4yMzc3MzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKaW5kZXggN2JkOGE3MC4uYWM5NDdhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKQEAgLTM4Myw2ICszODMsMTEgQEAKIAogc3RhdGljIGludCBzbmRfZW0yOHh4X3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZGV2LT5hZGV2Lmh3cHRyX2RvbmVfY2FwdHVyZSA9IDA7CisJZGV2LT5hZGV2LmNhcHR1cmVfdHJhbnNmZXJfZG9uZSA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYwppbmRleCA3NDA5MmY0Li44ODk4N2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYwpAQCAtMTQ5Niw3ICsxNDk2LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGV0NjF4MjUxX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXQ2MXgyNTFfdm1fb3BzID0gewogCS5vcGVuID0gZXQ2MXgyNTFfdm1fb3BlbiwKIAkuY2xvc2UgPSBldDYxeDI1MV92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKaW5kZXggY2Y2NTQwZC4uMjNkM2ZiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwpAQCAtOTksNyArOTksNyBAQAogCQlmcmFtZS0+djRsMl9idWYuZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfTUFQUEVEOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdzcGNhX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ3NwY2Ffdm1fb3BzID0gewogCS5vcGVuCQk9IGdzcGNhX3ZtX29wZW4sCiAJLmNsb3NlCQk9IGdzcGNhX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCmluZGV4IDU5NDAwZTguLmEyN2FmZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwpAQCAtMzUsMTIgKzM1LDI1IEBACiAgICAgY29uc3QKIAlzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBzNWs0YWFfdmZsaXBfZG1pX3RhYmxlW10gPSB7CiAJeworCQkuaWRlbnQgPSAiQlJVTkVJTklUIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJCUlVORU5JVCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJCUlVORU5JVCIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRVJTSU9OLCAiMDAwMzBEMDAwMDAwMDAwMSIpCisJCX0KKwl9LCB7CiAJCS5pZGVudCA9ICJGdWppdHN1LVNpZW1lbnMgQW1pbG8gWGEgMjUyOCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFNSUxPIFhhIDI1MjgiKQogCQl9CiAJfSwgeworCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIFhpIDI1MjgiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UgU0lFTUVOUyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBYaSAyNTI4IikKKwkJfQorCX0sIHsKIAkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYaSAyNTUwIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKQEAgLTU3LDYgKzcwLDEzIEBACiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWljcm8tU3RhciBJbnRlcm5hdGlvbmFsIiksCiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkdYNzAwIiksCisJCQlETUlfTUFUQ0goRE1JX0JJT1NfREFURSwgIjEyLzAyLzIwMDgiKQorCQl9CisJfSwgeworCQkuaWRlbnQgPSAiTVNJIEdYNzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNaWNyby1TdGFyIEludGVybmF0aW9uYWwiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiR1g3MDAiKSwKIAkJCURNSV9NQVRDSChETUlfQklPU19EQVRFLCAiMDcvMjYvMjAwNyIpCiAJCX0KIAl9LCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKaW5kZXggMTQwYzhmMy4uZjgzMjhiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWRhdGFbM10gPSAweDJjOwkJCSAgIC8qIHJlZyAyLCBIIHNpemUvOCAqLwogCQlkYXRhWzRdID0gMHg0ODsJCQkgICAvKiByZWcgMywgViBzaXplLzQgKi8KIAkJZGF0YVs2XSA9IDB4MDY7CQkJICAgLyogcmVnIDUsIEggc3RhcnQgICovCi0JCWRhdGFbOF0gPSAweDA2ICsgc2QtPnNlbnNvcl90eXBlOyAgLyogcmVnIDcsIFYgc3RhcnQgICovCisJCWRhdGFbOF0gPSAweDA2IC0gc2QtPnNlbnNvcl90eXBlOyAgLyogcmVnIDcsIFYgc3RhcnQgICovCiAJCWJyZWFrOwogCX0KIAllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMTEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCmluZGV4IDJmNmUxMzUuLmE1YzE5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKQEAgLTI5MTksNyArMjkxOSw3IEBACiAJLyogQSBmYWxzZSBwb3NpdGl2ZSBoZXJlIGlzIGxpa2VseSwgdW50aWwgT1ZUIGdpdmVzIG1lCiAJICogdGhlIGRlZmluaXRpdmUgU09GL0VPRiBmb3JtYXQgKi8KIAlpZiAoKCEoZGF0YVswXSB8IGRhdGFbMV0gfCBkYXRhWzJdIHwgZGF0YVszXSB8IGRhdGFbNV0pKSAmJiBkYXRhWzZdKSB7Ci0JCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CisJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCAwKTsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CiAJCXNkLT5wYWNrZXRfbnIgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCmluZGV4IDY1NDg5ZDYuLmJmYWU2M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwpAQCAtMzk0LDcgKzM5NCw4IEBACiAJCQlQREVCVUcoRF9QQUNLLCAiRW5kIG9mIGZyYW1lIGRldGVjdGVkIik7CiAKIAkJCS8qIENvbXBsZXRlIHRoZSBsYXN0IGZyYW1lIChpZiBhbnkpICovCi0JCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIDApOworCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJCWZyYW1lLCBkYXRhLCAwKTsKIAogCQkJaWYgKGNodW5rX2xlbikKIAkJCQlQREVCVUcoRF9FUlIsICJDaHVuayBsZW5ndGggaXMgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwppbmRleCBkMDc2NWJlLi4wMWUxZWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwpAQCAtMjgsNiArMjgsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgpAQCAtMTU4OSw3ICsxNTkwLDcgQEAKIAltZXllLnZtYV91c2VfY291bnRbaWR4XS0tOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1leWVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtZXllX3ZtX29wcyA9IHsKIAkub3BlbgkJPSBtZXllX3ZtX29wZW4sCiAJLmNsb3NlCQk9IG1leWVfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCA2OTUyZTk2Li41MWI2ODNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CkBAIC0xNDMyLDcgKzE0MzMsOSBAQAogCQlpY2QtPnNlbnNlID0gJnNlbnNlOwogCiAJY2FtX2YuZm10LnBpeC5waXhlbGZvcm1hdCA9IGNhbV9mbXQtPmZvdXJjYzsKLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsIGYpOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgJmNhbV9mKTsKKwljYW1fZi5mbXQucGl4LnBpeGVsZm9ybWF0ID0gcGl4LT5waXhlbGZvcm1hdDsKKwkqcGl4ID0gY2FtX2YuZm10LnBpeDsKIAogCWljZC0+c2Vuc2UgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKaW5kZXggOWUzMjYyYy4uMmMwYmIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYwpAQCAtNTk4LDExICs1OTgsNiBAQAogCWJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LAogCQkJIHN0cnVjdCBzMjI1NV9idWZmZXIsIHZiLnF1ZXVlKTsKIAotCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmYnVmLT52Yi5kb25lKSkgewotCQkvKiBubyBvbmUgYWN0aXZlICovCi0JCXJjID0gLTE7Ci0JCWdvdG8gdW5sb2NrOwotCX0KIAlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CiAJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKIAlkcHJpbnRrKDEwMCwgIlslcC8lZF0gd2FrZXVwXG4iLCBidWYsIGJ1Zi0+dmIuaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCA3MTE0NWJmLi4wOTAxMzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTM0MjgsNiArMzQyOCw3IEBACiAJCS50dW5lcl9jb25maWcgICA9IDMsCiAJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCiAJCS50c190eXBlCT0gU0FBNzEzNF9NUEVHX1RTX1NFUklBTCwKKwkJLnRzX2ZvcmNlX3ZhbCAgID0gMSwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwODAwMTAwLCAvKiBHUElPIDIxIGlzIGFuIElOUFVUICovCiAJCS5pbnB1dHMgICAgICAgICA9IHt7CiAJCQkubmFtZSA9IG5hbWVfdHYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYwppbmRleCAzZmE2NTIyLi4wMzQ4OGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKQEAgLTI2MiwxMSArMjYyLDEzIEBACiAJc3dpdGNoIChzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c190eXBlKSB7CiAJY2FzZSBTQUE3MTM0X01QRUdfVFNfUEFSQUxMRUw6CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwwLCAweDQwKTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweGVjKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweGVjIHwKKwkJCShzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c19mb3JjZV92YWwgPDwgNCkpOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfTVBFR19UU19TRVJJQUw6CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwwLCAweGQ4KTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDZjKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDZjIHwKKwkJCShzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c19mb3JjZV92YWwgPDwgNCkpOwogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUxfU0VSSUFMLCAweGJjKTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IDZlZTNlOWIuLmY4Njk3ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMzYwLDYgKzM2MCw3IEBACiAJZW51bSBzYWE3MTM0X21wZWdfdHlwZSAgbXBlZzsKIAllbnVtIHNhYTcxMzRfbXBlZ190c190eXBlIHRzX3R5cGU7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgdmlkX3BvcnRfb3B0czsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICB0c19mb3JjZV92YWw6MTsKIH07CiAKICNkZWZpbmUgY2FyZF9oYXNfcmFkaW8oZGV2KSAgIChOVUxMICE9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnJhZGlvLm5hbWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jCmluZGV4IGM0NTk2NmUuLjljMWQzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogCS8qIFByZXBhcmUgc29tZSBiYXNpYyBjb21tYW5kL3Jlc3BvbnNlIHN0cnVjdHVyZXMgKi8KIAltZW1zZXQoJmNvbW1hbmRfdCwgMCwgc2l6ZW9mKGNvbW1hbmRfdCkpOwotCW1lbXNldCgmcmVzcG9uc2VfdCwgMCwgc2l6ZW9mKCZyZXNwb25zZV90KSk7CisJbWVtc2V0KCZyZXNwb25zZV90LCAwLCBzaXplb2YocmVzcG9uc2VfdCkpOwogCXBjb21tYW5kX3QgPSAmY29tbWFuZF90OwogCXByZXNwb25zZV90ID0gJnJlc3BvbnNlX3Q7CiAJY29tbWFuZF90LmlkID0gaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggNWFiN2M1YS4uMmY3OGI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJCSAiU3VwZXJIIE1vYmlsZSBDRVUgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIAotCWNsa19lbmFibGUocGNkZXYtPmNsayk7CisJcG1fcnVudGltZV9nZXRfc3luYyhpY2ktPnY0bDJfZGV2LmRldik7CiAKIAljZXVfd3JpdGUocGNkZXYsIENBUFNSLCAxIDw8IDE2KTsgLyogcmVzZXQgKi8KIAl3aGlsZSAoY2V1X3JlYWQocGNkZXYsIENTVFNSKSAmIDEpCkBAIC00MzgsNyArNDM4LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKIAotCWNsa19kaXNhYmxlKHBjZGV2LT5jbGspOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoaWNpLT52NGwyX2Rldi5kZXYpOwogCiAJZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LAogCQkgIlN1cGVySCBNb2JpbGUgQ0VVIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKQEAgLTExNzMsOCArMTE3Myw4IEBACiAJd2lkdGhfaW4gPSBzY2FsZV91cChjYW0tPmNldV9yZWN0LndpZHRoLCAqc2NhbGVfaCk7CiAJaGVpZ2h0X2luID0gc2NhbGVfdXAoY2FtLT5jZXVfcmVjdC5oZWlnaHQsICpzY2FsZV92KTsKIAotCSpzY2FsZV9oID0gY2FsY19nZW5lcmljX3NjYWxlKGNhbS0+Y2V1X3JlY3Qud2lkdGgsIGljZC0+dXNlcl93aWR0aCk7Ci0JKnNjYWxlX3YgPSBjYWxjX2dlbmVyaWNfc2NhbGUoY2FtLT5jZXVfcmVjdC5oZWlnaHQsIGljZC0+dXNlcl9oZWlnaHQpOworCSpzY2FsZV9oID0gY2FsY19nZW5lcmljX3NjYWxlKHdpZHRoX2luLCBpY2QtPnVzZXJfd2lkdGgpOworCSpzY2FsZV92ID0gY2FsY19nZW5lcmljX3NjYWxlKGhlaWdodF9pbiwgaWNkLT51c2VyX2hlaWdodCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwppbmRleCA5ZDg0Yzk0Li40YTc3MTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCkBAIC0yMDc3LDcgKzIwNzcsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc245YzEwMl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuOWMxMDJfdm1fb3BzID0gewogCS5vcGVuID0gc245YzEwMl92bV9vcGVuLAogCS5jbG9zZSA9IHNuOWMxMDJfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA1OWFhN2EzLi4zNmU2MTdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKQEAgLTExNjAsMTMgKzExNjAsMTUgQEAKIAkJaWYgKGljZC0+aWZhY2UgPT0gaWNpLT5ucikgewogCQkJLyogVGhlIGJ1cy0+cmVtb3ZlIHdpbGwgYmUgY2FsbGVkICovCiAJCQlkZXZpY2VfdW5yZWdpc3RlcigmaWNkLT5kZXYpOwotCQkJLyogTm90IGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpLCAucmVtb3ZlCi0JCQkgKiBuZWVkcyBwYXJlbnQgdG8gY2FsbCBpY2ktPm9wcy0+cmVtb3ZlKCkgKi8KLQkJCWljZC0+ZGV2LnBhcmVudCA9IE5VTEw7Ci0KLQkJCS8qIElmIHRoZSBob3N0IG1vZHVsZSBpcyBsb2FkZWQgYWdhaW4sIGRldmljZV9yZWdpc3RlcigpCi0JCQkgKiB3b3VsZCBjb21wbGFpbiAiYWxyZWFkeSBpbml0aWFsaXNlZCIgKi8KLQkJCW1lbXNldCgmaWNkLT5kZXYua29iaiwgMCwgc2l6ZW9mKGljZC0+ZGV2LmtvYmopKTsKKwkJCS8qCisJCQkgKiBOb3QgYmVmb3JlIGRldmljZV91bnJlZ2lzdGVyKCksIC5yZW1vdmUKKwkJCSAqIG5lZWRzIHBhcmVudCB0byBjYWxsIGljaS0+b3BzLT5yZW1vdmUoKS4KKwkJCSAqIElmIHRoZSBob3N0IG1vZHVsZSBpcyBsb2FkZWQgYWdhaW4sIGRldmljZV9yZWdpc3RlcigpCisJCQkgKiB3b3VsZCBjb21wbGFpbiAiYWxyZWFkeSBpbml0aWFsaXNlZCwiIHNpbmNlIDIuNi4zMgorCQkJICogdGhpcyBpcyBhbHNvIG5lZWRlZCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIG9mIHRoZQorCQkJICogZGV2aWNlIHByaXZhdGUgZGF0YS4KKwkJCSAqLworCQkJbWVtc2V0KCZpY2QtPmRldiwgMCwgc2l6ZW9mKGljZC0+ZGV2KSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKaW5kZXggMGI5OTZlYS4uNmI0MTg2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKQEAgLTc5MCw3ICs3OTAsNyBAQAogCWlmIChzYnVmLT5tYXBjb3VudCA9PSAwKQogCQlzYnVmLT52NGxidWYuZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfTUFQUEVEOwogfQotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzdGtfdjRsX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3RrX3Y0bF92bV9vcHMgPSB7CiAJLm9wZW4gPSBzdGtfdjRsX3ZtX29wZW4sCiAJLmNsb3NlID0gc3RrX3Y0bF92bV9jbG9zZQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCmluZGV4IGMzMjI1YTUuLjFiODk3MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJX19zMzIgdmFsdWUsIF9fdTggKmRhdGEpCiB7CiAJZGF0YVswXSA9IHZhbHVlID09IDAgPyAwIDogKHZhbHVlID4gMCkgPyAxIDogMHhmZjsKLQlkYXRhWzJdID0gbWluKGFicyh2YWx1ZSksIDB4ZmYpOworCWRhdGFbMl0gPSBtaW4oKGludClhYnModmFsdWUpLCAweGZmKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1dmNfY29udHJvbF9tYXBwaW5nIHV2Y19jdHJsX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwppbmRleCA5ZTczNTE1Li5hMmJkZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKQEAgLTEwNjksNyArMTA2OSw3IEBACiAJYnVmZmVyLT52bWFfdXNlX2NvdW50LS07CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXZjX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXZjX3ZtX29wcyA9IHsKIAkub3BlbgkJPSB1dmNfdm1fb3BlbiwKIAkuY2xvc2UJCT0gdXZjX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggZjk2MGU4ZS4uYTZlNDFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTkwLDcgKzkwLDggQEAKIAkJY3RybC0+ZHdNYXhWaWRlb0ZyYW1lU2l6ZSA9CiAJCQlmcmFtZS0+ZHdNYXhWaWRlb0ZyYW1lQnVmZmVyU2l6ZTsKIAotCWlmIChzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX0ZJWF9CQU5EV0lEVEggJiYKKwlpZiAoIShmb3JtYXQtPmZsYWdzICYgVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQpICYmCisJICAgIHN0cmVhbS0+ZGV2LT5xdWlya3MgJiBVVkNfUVVJUktfRklYX0JBTkRXSURUSCAmJgogCSAgICBzdHJlYW0tPmludGYtPm51bV9hbHRzZXR0aW5nID4gMSkgewogCQl1MzIgaW50ZXJ2YWw7CiAJCXUzMiBiYW5kd2lkdGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCmluZGV4IGYxY2NmOTguLjhlOTNjNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCmluZGV4IGQwOWNlODMuLjYzNWZmYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aWRlb2J1Zl92bV9vcHMgPSB7CiAJLm9wZW4gICAgID0gdmlkZW9idWZfdm1fb3BlbiwKIAkuY2xvc2UgICAgPSB2aWRlb2J1Zl92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYwppbmRleCBhOGRkMjJhLi4wMzJlYmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApAQCAtMzk0LDcgKzM5NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0KIHsKIAkub3BlbiAgICAgPSB2aWRlb2J1Zl92bV9vcGVuLAogCS5jbG9zZSAgICA9IHZpZGVvYnVmX3ZtX2Nsb3NlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwppbmRleCAzMGFlMzBmLi4zNWYzOTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9CiB7CiAJLm9wZW4gICAgID0gdmlkZW9idWZfdm1fb3BlbiwKIAkuY2xvc2UgICAgPSB2aWRlb2J1Zl92bV9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggY2Q2YTM0NC4uYjAzNGE4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTM4NTcsNyArMzg1Nyw3IEBACiAJZHByaW50aygidmlub192bV9jbG9zZSgpOiBjb3VudCA9ICVkXG4iLCBmYi0+bWFwX2NvdW50KTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aW5vX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdmlub192bV9vcHMgPSB7CiAJLm9wZW4JPSB2aW5vX3ZtX29wZW4sCiAJLmNsb3NlCT0gdmlub192bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwppbmRleCBiM2M2NDM2Li4zMTJhNzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKQEAgLTkzNSw3ICs5MzUsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgemMwMzAxX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgemMwMzAxX3ZtX29wcyA9IHsKIAkub3BlbiA9IHpjMDMwMV92bV9vcGVuLAogCS5jbG9zZSA9IHpjMDMwMV92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwppbmRleCBiY2RlZmIxLi40NzEzN2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKQEAgLTMxNzIsNyArMzE3Miw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgem9yYW5fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB6b3Jhbl92bV9vcHMgPSB7CiAJLm9wZW4gPSB6b3Jhbl92bV9vcGVuLAogCS5jbG9zZSA9IHpvcmFuX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCmluZGV4IGJjMmVjMjEuLjM0ZjNmMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNkZWZpbmUgbXlfVkVSU0lPTglNUFRfTElOVVhfVkVSU0lPTl9DT01NT04KICNkZWZpbmUgTVlOQU0JCSJtcHRsYW4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jIGIvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYwppbmRleCA1NDQ3ZGExLi42MTM0ODEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMKQEAgLTU3LDggKzU3LDYgQEAKICAqIFRoZSBBQjMxMDAgaXMgdXN1YWxseSBhc3NpZ25lZCBhZGRyZXNzIDB4NDggKDctYml0KQogICogVGhlIGNoaXAgaXMgZGVmaW5lZCBpbiB0aGUgcGxhdGZvcm0gaTJjX2JvYXJkX2RhdGEgc2VjdGlvbi4KICAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCwgSTJDX0NMSUVOVF9FTkQgfTsKLUkyQ19DTElFTlRfSU5TTU9EXzEoYWIzMTAwKTsKIAogdTggYWIzMTAwX2dldF9jaGlwX3R5cGUoc3RydWN0IGFiMzEwMCAqYWIzMTAwKQogewpAQCAtOTY2LDcgKzk2NCw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYjMxMDBfaWRbXSA9IHsKLQl7ICJhYjMxMDAiLCBhYjMxMDAgfSwKKwl7ICJhYjMxMDAiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFiMzEwMF9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jCmluZGV4IGU0MjRjZjYuLmExYzQ3ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jCkBAIC00ODAsNyArNDgwLDYgQEAKIGFkZF9jaGlsZHJlbihzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwgdW5zaWduZWQgbG9uZyBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgZGV2aWNlCSpjaGlsZDsKLQlzdHJ1Y3QgZGV2aWNlCSp1c2JfdHJhbnNjZWl2ZXIgPSBOVUxMOwogCiAJaWYgKHR3bF9oYXNfYmNpKCkgJiYgcGRhdGEtPmJjaSAmJiAhKGZlYXR1cmVzICYgVFBTX1NVQlNFVCkpIHsKIAkJY2hpbGQgPSBhZGRfY2hpbGQoMywgInR3bDQwMzBfYmNpIiwKQEAgLTUzMiwxNiArNTMxLDYxIEBACiAJfQogCiAJaWYgKHR3bF9oYXNfdXNiKCkgJiYgcGRhdGEtPnVzYikgeworCisJCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IxdjUgPSB7CisJCQkuc3VwcGx5ID0JInVzYjF2NSIsCisJCX07CisJCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IxdjggPSB7CisJCQkuc3VwcGx5ID0JInVzYjF2OCIsCisJCX07CisJCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IzdjEgPSB7CisJCQkuc3VwcGx5ID0JInVzYjN2MSIsCisJCX07CisKKwkvKiBGaXJzdCBhZGQgdGhlIHJlZ3VsYXRvcnMgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGJ5IHRyYW5zY2VpdmVyICovCisJCWlmICh0d2xfaGFzX3JlZ3VsYXRvcigpKSB7CisJCQkvKiB0aGlzIGlzIGEgdGVtcGxhdGUgdGhhdCBnZXRzIGNvcGllZCAqLworCQkJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdXNiX2ZpeGVkID0geworCQkJCS5jb25zdHJhaW50cy52YWxpZF9tb2Rlc19tYXNrID0KKwkJCQkJUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJCQkuY29uc3RyYWludHMudmFsaWRfb3BzX21hc2sgPQorCQkJCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJCX07CisKKwkJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjFWNSwKKwkJCQkJCSAgICAgICZ1c2JfZml4ZWQsICZ1c2IxdjUsIDEpOworCQkJaWYgKElTX0VSUihjaGlsZCkpCisJCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IxVjgsCisJCQkJCQkgICAgICAmdXNiX2ZpeGVkLCAmdXNiMXY4LCAxKTsKKwkJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCM1YxLAorCQkJCQkJICAgICAgJnVzYl9maXhlZCwgJnVzYjN2MSwgMSk7CisJCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJfQorCiAJCWNoaWxkID0gYWRkX2NoaWxkKDAsICJ0d2w0MDMwX3VzYiIsCiAJCQkJcGRhdGEtPnVzYiwgc2l6ZW9mKCpwZGF0YS0+dXNiKSwKIAkJCQl0cnVlLAogCQkJCS8qIGlycTAgPSBVU0JfUFJFUywgaXJxMSA9IFVTQiAqLwogCQkJCXBkYXRhLT5pcnFfYmFzZSArIDggKyAyLCBwZGF0YS0+aXJxX2Jhc2UgKyA0KTsKKwogCQlpZiAoSVNfRVJSKGNoaWxkKSkKIAkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKIAogCQkvKiB3ZSBuZWVkIHRvIGNvbm5lY3QgcmVndWxhdG9ycyB0byB0aGlzIHRyYW5zY2VpdmVyICovCi0JCXVzYl90cmFuc2NlaXZlciA9IGNoaWxkOworCQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiBjaGlsZCkgeworCQkJdXNiMXY1LmRldiA9IGNoaWxkOworCQkJdXNiMXY4LmRldiA9IGNoaWxkOworCQkJdXNiM3YxLmRldiA9IGNoaWxkOworCQl9CiAJfQogCiAJaWYgKHR3bF9oYXNfd2F0Y2hkb2coKSkgewpAQCAtNTgwLDQ3ICs2MjQsNiBAQAogCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwogCX0KIAotCWlmICh0d2xfaGFzX3JlZ3VsYXRvcigpICYmIHVzYl90cmFuc2NlaXZlcikgewotCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiMXY1ID0gewotCQkJLnN1cHBseSA9CSJ1c2IxdjUiLAotCQl9OwotCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiMXY4ID0gewotCQkJLnN1cHBseSA9CSJ1c2IxdjgiLAotCQl9OwotCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiM3YxID0gewotCQkJLnN1cHBseSA9CSJ1c2IzdjEiLAotCQl9OwotCi0JCS8qIHRoaXMgaXMgYSB0ZW1wbGF0ZSB0aGF0IGdldHMgY29waWVkICovCi0JCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHVzYl9maXhlZCA9IHsKLQkJCS5jb25zdHJhaW50cy52YWxpZF9tb2Rlc19tYXNrID0KLQkJCQkgIFJFR1VMQVRPUl9NT0RFX05PUk1BTAotCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKLQkJCS5jb25zdHJhaW50cy52YWxpZF9vcHNfbWFzayA9Ci0JCQkJICBSRUdVTEFUT1JfQ0hBTkdFX01PREUKLQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCQl9OwotCi0JCXVzYjF2NS5kZXYgPSB1c2JfdHJhbnNjZWl2ZXI7Ci0JCXVzYjF2OC5kZXYgPSB1c2JfdHJhbnNjZWl2ZXI7Ci0JCXVzYjN2MS5kZXYgPSB1c2JfdHJhbnNjZWl2ZXI7Ci0KLQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCMVY1LCAmdXNiX2ZpeGVkLAotCQkJCSZ1c2IxdjUsIDEpOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQotCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IxVjgsICZ1c2JfZml4ZWQsCi0JCQkJJnVzYjF2OCwgMSk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCi0JCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjNWMSwgJnVzYl9maXhlZCwKLQkJCQkmdXNiM3YxLCAxKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0JfQotCiAJLyogbWF5YmUgYWRkIExET3MgdGhhdCBhcmUgb21pdHRlZCBvbiBjb3N0LXJlZHVjZWQgcGFydHMgKi8KIAlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiAhKGZlYXR1cmVzICYgVFBTX1NVQlNFVCkpIHsKIAkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZQTEwyLCBwZGF0YS0+dnBsbDIpOwpAQCAtNzkyLDcgKzc5NSw3IEBACiAJCQl0d2wtPmNsaWVudCA9IGkyY19uZXdfZHVtbXkoY2xpZW50LT5hZGFwdGVyLAogCQkJCQl0d2wtPmFkZHJlc3MpOwogCQkJaWYgKCF0d2wtPmNsaWVudCkgewotCQkJCWRldl9lcnIoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkJCSJjYW4ndCBhdHRhY2ggY2xpZW50ICVkXG4iLCBpKTsKIAkJCQlzdGF0dXMgPSAtRU5PTUVNOwogCQkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jIGIvZHJpdmVycy9tZmQvdWNiMTQwMF9jb3JlLmMKaW5kZXggMmFmYzA4MC4uZmEyOTRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdWNiMTQwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMTQwMF9jb3JlLmMKQEAgLTIxLDYgKzIxLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC91Y2IxNDAwLmg+CiAKIHVuc2lnbmVkIGludCB1Y2IxNDAwX2FkY19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdTE2IGFkY19jaGFubmVsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMgYi9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYwppbmRleCBmZWE5MDg1Li42MGMzOTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMgYi9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMKaW5kZXggZDMwMTVkZi4uYWMwNTZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYwpAQCAtNTA3LDYgKzUwNyw4IEBACiB7CiAJaW50IGksIHJldDsKIAorCW11dGV4X2luaXQoJndtODMxeC0+aXJxX2xvY2spOworCiAJaWYgKCFpcnEpIHsKIAkJZGV2X3dhcm4od204MzF4LT5kZXYsCiAJCQkgIk5vIGludGVycnVwdCBzcGVjaWZpZWQgLSBmdW5jdGlvbmFsaXR5IGxpbWl0ZWRcbiIpOwpAQCAtNTIxLDcgKzUyMyw2IEBACiAJfQogCiAJd204MzF4LT5pcnEgPSBpcnE7Ci0JbXV0ZXhfaW5pdCgmd204MzF4LT5pcnFfbG9jayk7CiAJSU5JVF9XT1JLKCZ3bTgzMXgtPmlycV93b3JrLCB3bTgzMXhfaXJxX3dvcmtlcik7CiAKIAkvKiBNYXNrIHRoZSBpbmRpdmlkdWFsIGludGVycnVwdCBzb3VyY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZWVwcm9tL21heDY4NzUuYyBiL2RyaXZlcnMvbWlzYy9lZXByb20vbWF4Njg3NS5jCmluZGV4IDNjMGM1OGUuLjVhNmIyYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lZXByb20vbWF4Njg3NS5jCisrKyBiL2RyaXZlcnMvbWlzYy9lZXByb20vbWF4Njg3NS5jCkBAIC0zMywxMiArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLS8qIERvIG5vdCBzY2FuIC0gdGhlIE1BWDY4NzUgYWNjZXNzIG1ldGhvZCB3aWxsIHdyaXRlIHRvIHNvbWUgRUVQUk9NIGNoaXBzICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShtYXg2ODc1KTsKLQogLyogVGhlIE1BWDY4NzUgY2FuIG9ubHkgcmVhZC93cml0ZSAxNiBieXRlcyBhdCBhIHRpbWUgKi8KICNkZWZpbmUgU0xJQ0VfU0laRQkJCTE2CiAjZGVmaW5lIFNMSUNFX0JJVFMJCQk0CkBAIC0xNDYsMzEgKzE0MCwyMSBAQAogCS5yZWFkID0gbWF4Njg3NV9yZWFkLAogfTsKIAotLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IG1heDY4NzVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCitzdGF0aWMgaW50IG1heDY4NzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOworCXN0cnVjdCBtYXg2ODc1X2RhdGEgKmRhdGE7CisJaW50IGVycjsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBCiAJCQkJICAgICB8IEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogT25seSBjaGVjayBldmVuIGFkZHJlc3NlcyAqLworCS8qIE9ubHkgYmluZCB0byBldmVuIGFkZHJlc3NlcyAqLwogCWlmIChjbGllbnQtPmFkZHIgJiAxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN0cmxjcHkoaW5mby0+dHlwZSwgIm1heDY4NzUiLCBJMkNfTkFNRV9TSVpFKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1heDY4NzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IG1heDY4NzVfZGF0YSAqZGF0YTsKLQlpbnQgZXJyOwotCiAJaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXg2ODc1X2RhdGEpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMjIsOSArMjA2LDYgQEAKIAkucHJvYmUJCT0gbWF4Njg3NV9wcm9iZSwKIAkucmVtb3ZlCQk9IG1heDY4NzVfcmVtb3ZlLAogCS5pZF90YWJsZQk9IG1heDY4NzVfaWQsCi0KLQkuZGV0ZWN0CQk9IG1heDY4NzVfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWF4Njg3NV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaHBpbG8uYyBiL2RyaXZlcnMvbWlzYy9ocGlsby5jCmluZGV4IDFhZDI3YzYuLmE5MmEzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9ocGlsby5jCisrKyBiL2RyaXZlcnMvbWlzYy9ocGlsby5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vY29tbWFuZC5jCmluZGV4IDI3NmQzZmIuLmUyMDMxNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vY29tbWFuZC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vY29tbWFuZC5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImlibWFzbS5oIgogI2luY2x1ZGUgImxvd2xldmVsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vZXZlbnQuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vZXZlbnQuYwppbmRleCA2OGEwYTViLi41NzJkNDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2V2ZW50LmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9ldmVudC5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImlibWFzbS5oIgogI2luY2x1ZGUgImxvd2xldmVsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vcl9oZWFydGJlYXQuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vcl9oZWFydGJlYXQuYwppbmRleCBiZWM5ZTJjLi4yZGU0ODdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL3JfaGVhcnRiZWF0LmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9yX2hlYXJ0YmVhdC5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImlibWFzbS5oIgogI2luY2x1ZGUgImRvdF9jb21tYW5kLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMgYi9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCmluZGV4IGZhNTdiNjcuLjA0YzI3MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKKysrIGIvZHJpdmVycy9taXNjL3BoYW50b20uYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9waGFudG9tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtMjcxLDcgKzI3Miw3IEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBoYW50b21fZmlsZV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwaGFudG9tX2ZpbGVfb3BzID0gewogCS5vcGVuID0gcGhhbnRvbV9vcGVuLAogCS5yZWxlYXNlID0gcGhhbnRvbV9yZWxlYXNlLAogCS51bmxvY2tlZF9pb2N0bCA9IHBoYW50b21faW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKaW5kZXggYWVkNjA5OC4uNDFjOGZlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYwpAQCAtNTMsNyArNTMsNiBAQAogLyogR3VhcmFudGVlZCB1c2VyIGF2YWlsYWJsZSByZXNvdXJjZXMgb24gZWFjaCBub2RlICovCiBzdGF0aWMgaW50IG1heF91c2VyX2NicnMsIG1heF91c2VyX2Rzcl9ieXRlczsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3J1X2ZvcHM7CiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgZ3J1X21pc2NkZXY7CiAKIApAQCAtNDI2LDcgKzQyNSw3IEBACiAJZ3J1X3Byb2NfZXhpdCgpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncnVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdydV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkudW5sb2NrZWRfaW9jdGwJPSBncnVfZmlsZV91bmxvY2tlZF9pb2N0bCwKIAkubW1hcAkJPSBncnVfZmlsZV9tbWFwLApAQCAtNDM4LDcgKzQzNyw3IEBACiAJLmZvcHMJCT0gJmdydV9mb3BzLAogfTsKIAotc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdydV92bV9vcHMgPSB7Citjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ3J1X3ZtX29wcyA9IHsKIAkuY2xvc2UJCT0gZ3J1X3ZtYV9jbG9zZSwKIAkuZmF1bHQJCT0gZ3J1X2ZhdWx0LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKaW5kZXggY2NkNDQwOC4uM2YyMzc1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKQEAgLTE2MSwxNCArMTYxLDE1IEBACiBzdGF0aWMgc3NpemVfdCBvcHRpb25zX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JY2hhciBidWZbODBdOworCWNoYXIgYnVmWzIwXTsKIAotCWlmIChzdHJuY3B5X2Zyb21fdXNlcihidWYsIHVzZXJidWYsIHNpemVvZihidWYpIC0gMSkgPCAwKQorCWlmIChjb3VudCA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlidWZbY291bnQgLSAxXSA9ICdcMCc7Ci0JaWYgKCFzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSkKLQkJZ3J1X29wdGlvbnMgPSB2YWw7CisJYnVmW2NvdW50XSA9ICdcMCc7CisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJmdydV9vcHRpb25zKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gY291bnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCmluZGV4IDM0YWIzZDQuLjQ2OTkwYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCkBAIC02MjQsNyArNjI0LDcgQEAKICAqLwogc3RydWN0IGdydV91bmxvYWRfY29udGV4dF9yZXE7CiAKLWV4dGVybiBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ3J1X3ZtX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ3J1X3ZtX29wczsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlICpncnVkZXY7CiAKIGV4dGVybiBzdHJ1Y3QgZ3J1X3ZtYV9kYXRhICpncnVfYWxsb2Nfdm1hX2RhdGEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jCmluZGV4IDYxMGRiZDEuLjk2ZDEwZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jCkBAIC0yNDAsNyArMjQwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW1jX2RiZ19leHRfY3NkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtbWNfZGJnX2V4dF9jc2RfZm9wcyA9IHsKIAkub3BlbgkJPSBtbWNfZXh0X2NzZF9vcGVuLAogCS5yZWFkCQk9IG1tY19leHRfY3NkX3JlYWQsCiAJLnJlbGVhc2UJPSBtbWNfZXh0X2NzZF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCmluZGV4IDY2MzYzNTQuLmY4NWRjZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKQEAgLTI5LDYgKzI5LDggQEAKIAl1bnNpZ25lZCBpLCBucl9zdHJpbmdzOwogCWNoYXIgKipidWZmZXIsICpzdHJpbmc7CiAKKwkvKiBGaW5kIGFsbCBudWxsLXRlcm1pbmF0ZWQgKGluY2x1ZGluZyB6ZXJvIGxlbmd0aCkgc3RyaW5ncyBpbgorCSAgIHRoZSBUUExMVjFfSU5GTyBmaWVsZC4gVHJhaWxpbmcgZ2FyYmFnZSBpcyBpZ25vcmVkLiAqLwogCWJ1ZiArPSAyOwogCXNpemUgLT0gMjsKIApAQCAtMzksMTEgKzQxLDggQEAKIAkJaWYgKGJ1ZltpXSA9PSAwKQogCQkJbnJfc3RyaW5ncysrOwogCX0KLQotCWlmIChucl9zdHJpbmdzIDwgNCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRElPOiBpZ25vcmluZyBicm9rZW4gQ0lTVFBMX1ZFUlNfMVxuIik7CisJaWYgKG5yX3N0cmluZ3MgPT0gMCkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJc2l6ZSA9IGk7CiAKQEAgLTk4LDYgKzk3LDIyIEBACiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNwZWVkX3VuaXRbOF0gPQogCXsgMTAwMDAsIDEwMDAwMCwgMTAwMDAwMCwgMTAwMDAwMDAsIDAsIDAsIDAsIDAgfTsKIAorLyogRlVOQ0UgdHVwbGVzIHdpdGggdGhlc2UgdHlwZXMgZ2V0IHBhc3NlZCB0byBTRElPIGRyaXZlcnMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZ1bmNlX3R5cGVfd2hpdGVsaXN0W10gPSB7CisJNCAvKiBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQgdXNlZCBpbiBCcm9hZGNvbSBjYXJkcyAqLworfTsKKworc3RhdGljIGludCBjaXN0cGxfZnVuY2Vfd2hpdGVsaXN0ZWQodW5zaWduZWQgY2hhciB0eXBlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnVuY2VfdHlwZV93aGl0ZWxpc3QpOyBpKyspIHsKKwkJaWYgKGZ1bmNlX3R5cGVfd2hpdGVsaXN0W2ldID09IHR5cGUpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY2lzdHBsX2Z1bmNlX2NvbW1vbihzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsCiAJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBzaXplKQogewpAQCAtMTIwLDYgKzEzNSwxMCBAQAogCXVuc2lnbmVkIHZzbjsKIAl1bnNpZ25lZCBtaW5fc2l6ZTsKIAorCS8qIGxldCBTRElPIGRyaXZlcnMgdGFrZSBjYXJlIG9mIHdoaXRlbGlzdGVkIEZVTkNFIHR1cGxlcyAqLworCWlmIChjaXN0cGxfZnVuY2Vfd2hpdGVsaXN0ZWQoYnVmWzBdKSkKKwkJcmV0dXJuIC1FSUxTRVE7CisKIAl2c24gPSBmdW5jLT5jYXJkLT5jY2NyLnNkaW9fdnNuOwogCW1pbl9zaXplID0gKHZzbiA9PSBTRElPX1NESU9fUkVWXzFfMDApID8gMjggOiA0MjsKIApAQCAtMTU0LDEzICsxNzMsMTIgQEAKIAllbHNlCiAJCXJldCA9IGNpc3RwbF9mdW5jZV9jb21tb24oY2FyZCwgYnVmLCBzaXplKTsKIAotCWlmIChyZXQpIHsKKwlpZiAocmV0ICYmIHJldCAhPSAtRUlMU0VRKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBDSVNUUExfRlVOQ0Ugc2l6ZSAldSAiCiAJCSAgICAgICAidHlwZSAldVxuIiwgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLCBzaXplLCBidWZbMF0pOwotCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHR5cGVkZWYgaW50ICh0cGxfcGFyc2VfdCkoc3RydWN0IG1tY19jYXJkICosIHN0cnVjdCBzZGlvX2Z1bmMgKiwKQEAgLTI1Myw4ICsyNzEsMzMgQEAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2lzX3RwbF9saXN0KTsgaSsrKQogCQkJaWYgKGNpc190cGxfbGlzdFtpXS5jb2RlID09IHRwbF9jb2RlKQogCQkJCWJyZWFrOwotCQlpZiAoaSA+PSBBUlJBWV9TSVpFKGNpc190cGxfbGlzdCkpIHsKLQkJCS8qIHRoaXMgdHVwbGUgaXMgdW5rbm93biB0byB0aGUgY29yZSAqLworCQlpZiAoaSA8IEFSUkFZX1NJWkUoY2lzX3RwbF9saXN0KSkgeworCQkJY29uc3Qgc3RydWN0IGNpc190cGwgKnRwbCA9IGNpc190cGxfbGlzdCArIGk7CisJCQlpZiAodHBsX2xpbmsgPCB0cGwtPm1pbl9zaXplKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogYmFkIENJUyB0dXBsZSAweCUwMngiCisJCQkJICAgICAgICIgKGxlbmd0aCA9ICV1LCBleHBlY3RlZCA+PSAldSlcbiIsCisJCQkJICAgICAgIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwKKwkJCQkgICAgICAgdHBsX2NvZGUsIHRwbF9saW5rLCB0cGwtPm1pbl9zaXplKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJfSBlbHNlIGlmICh0cGwtPnBhcnNlKSB7CisJCQkJcmV0ID0gdHBsLT5wYXJzZShjYXJkLCBmdW5jLAorCQkJCQkJIHRoaXMtPmRhdGEsIHRwbF9saW5rKTsKKwkJCX0KKwkJCS8qCisJCQkgKiBXZSBkb24ndCBuZWVkIHRoZSB0dXBsZSBhbnltb3JlIGlmIGl0IHdhcworCQkJICogc3VjY2Vzc2Z1bGx5IHBhcnNlZCBieSB0aGUgU0RJTyBjb3JlIG9yIGlmIGl0IGlzCisJCQkgKiBub3QgZ29pbmcgdG8gYmUgcGFyc2VkIGJ5IFNESU8gZHJpdmVycy4KKwkJCSAqLworCQkJaWYgKCFyZXQgfHwgcmV0ICE9IC1FSUxTRVEpCisJCQkJa2ZyZWUodGhpcyk7CisJCX0gZWxzZSB7CisJCQkvKiB1bmtub3duIHR1cGxlICovCisJCQlyZXQgPSAtRUlMU0VROworCQl9CisKKwkJaWYgKHJldCA9PSAtRUlMU0VRKSB7CisJCQkvKiB0aGlzIHR1cGxlIGlzIHVua25vd24gdG8gdGhlIGNvcmUgb3Igd2hpdGVsaXN0ZWQgKi8KIAkJCXRoaXMtPm5leHQgPSBOVUxMOwogCQkJdGhpcy0+Y29kZSA9IHRwbF9jb2RlOwogCQkJdGhpcy0+c2l6ZSA9IHRwbF9saW5rOwpAQCAtMjYzLDE5ICszMDYsOCBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCSAgICAgICAiJXM6IHF1ZXVpbmcgQ0lTIHR1cGxlIDB4JTAyeCBsZW5ndGggJXVcbiIsCiAJCQkgICAgICAgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLCB0cGxfY29kZSwgdHBsX2xpbmspOwotCQl9IGVsc2UgewotCQkJY29uc3Qgc3RydWN0IGNpc190cGwgKnRwbCA9IGNpc190cGxfbGlzdCArIGk7Ci0JCQlpZiAodHBsX2xpbmsgPCB0cGwtPm1pbl9zaXplKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICIlczogYmFkIENJUyB0dXBsZSAweCUwMnggKGxlbmd0aCA9ICV1LCBleHBlY3RlZCA+PSAldSlcbiIsCi0JCQkJICAgICAgIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwKLQkJCQkgICAgICAgdHBsX2NvZGUsIHRwbF9saW5rLCB0cGwtPm1pbl9zaXplKTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJfSBlbHNlIGlmICh0cGwtPnBhcnNlKSB7Ci0JCQkJcmV0ID0gdHBsLT5wYXJzZShjYXJkLCBmdW5jLAotCQkJCQkJIHRoaXMtPmRhdGEsIHRwbF9saW5rKTsKLQkJCX0KLQkJCWtmcmVlKHRoaXMpOworCQkJLyoga2VlcCBvbiBhbmFseXppbmcgdHVwbGVzICovCisJCQlyZXQgPSAwOwogCQl9CiAKIAkJcHRyICs9IHRwbF9saW5rOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCmluZGV4IDdjYjA1N2YuLjQzMmFlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKQEAgLTI3Niw2ICsyNzYsNDcgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE1NQ19TM0NfSFdfU0RJT19JUlEKKyAgICAgICBib29sICJIYXJkd2FyZSBzdXBwb3J0IGZvciBTRElPIElSUSIKKyAgICAgICBkZXBlbmRzIG9uIE1NQ19TM0MKKyAgICAgICBoZWxwCisgICAgICAgICBFbmFibGUgdGhlIGhhcmR3YXJlIHN1cHBvcnQgZm9yIFNESU8gaW50ZXJydXB0cyBpbnN0ZWFkIG9mIHVzaW5nCisJIHRoZSBnZW5lcmljIHBvbGxpbmcgY29kZS4KKworY2hvaWNlCisJcHJvbXB0ICJTYW1zdW5nIFMzQyBTRC9NTUMgdHJhbnNmZXIgY29kZSIKKwlkZXBlbmRzIG9uIE1NQ19TM0MKKworY29uZmlnIE1NQ19TM0NfUElPCisJYm9vbCAiVXNlIFBJTyB0cmFuc2ZlcnMgb25seSIKKwloZWxwCisJICBVc2UgUElPIHRvIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBtZW1vcnkgYW5kIHRoZSBoYXJkd2FyZS4KKworCSAgUElPIGlzIHNsb3dlciB0aGFuIERNQSBhcyBpdCByZXF1aXJlcyBDUFUgaW5zdHJ1Y3Rpb25zIHRvCisJICBtb3ZlIHRoZSBkYXRhLiBUaGlzIGhhcyBiZWVuIHRoZSB0cmFkaXRpb25hbCBkZWZhdWx0IGZvcgorCSAgdGhlIFMzQyBNQ0kgZHJpdmVyLgorCitjb25maWcgTU1DX1MzQ19ETUEKKwlib29sICJVc2UgRE1BIHRyYW5zZmVycyBvbmx5IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJaGVscAorCSAgVXNlIERNQSB0byB0cmFuc2ZlciBkYXRhIGJldHdlZW4gbWVtb3J5IGFuZCB0aGUgaGFyZGFyZS4KKworCSAgQ3VycmVudGx5LCB0aGUgRE1BIHN1cHBvcnQgaW4gdGhpcyBkcml2ZXIgc2VlbXMgdG8gbm90IGJlCisJICB3b3JraW5nIHByb3Blcmx5IGFuZCBuZWVkcyB0byBiZSBkZWJ1Z2dlZCBiZWZvcmUgdGhpcworCSAgb3B0aW9uIGlzIHVzZWZ1bC4KKworY29uZmlnIE1NQ19TM0NfUElPRE1BCisJYm9vbCAiU3VwcG9ydCBmb3IgYm90aCBQSU8gYW5kIERNQSAoRVhQRVJJTUVOVEFMKSIKKwloZWxwCisJICBDb21waWxlIGJvdGggdGhlIFBJTyBhbmQgRE1BIHRyYW5zZmVyIHJvdXRpbmVzIGludG8gdGhlCisJICBkcml2ZXIgYW5kIGxldCB0aGUgcGxhdGZvcm0gc2VsZWN0IGF0IHJ1bi10aW1lIHdoaWNoIG9uZQorCSAgaXMgYmVzdC4KKworCSAgU2VlIG5vdGVzIGZvciB0aGUgRE1BIG9wdGlvbi4KKworZW5kY2hvaWNlCisKIGNvbmZpZyBNTUNfU0RSSUNPSF9DUwogCXRyaXN0YXRlICJNTUMvU0QgZHJpdmVyIGZvciBSaWNvaCBCYXkxQ29udHJvbGxlcnMgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgUENJICYmIFBDTUNJQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCmluZGV4IGU1NTZkNDIuLjYzOTI0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKQEAgLTcyLDcgKzcyLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2NwdS5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9tY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKaW5kZXggODc0MWQwZi4uNzA1YTU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKQEAgLTIyLDEyICsyMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KIAogI2luY2x1ZGUgIm1tY2kuaCIKIApAQCAtMzgsNiArMzksMzYgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBmbWF4ID0gNTE1NjMzOwogCisvKgorICogVGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIGhvc3QtPmxvY2sgaGVsZAorICovCitzdGF0aWMgdm9pZCBtbWNpX3NldF9jbGtyZWcoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGRlc2lyZWQpCit7CisJdTMyIGNsayA9IDA7CisKKwlpZiAoZGVzaXJlZCkgeworCQlpZiAoZGVzaXJlZCA+PSBob3N0LT5tY2xrKSB7CisJCQljbGsgPSBNQ0lfQ0xLX0JZUEFTUzsKKwkJCWhvc3QtPmNjbGsgPSBob3N0LT5tY2xrOworCQl9IGVsc2UgeworCQkJY2xrID0gaG9zdC0+bWNsayAvICgyICogZGVzaXJlZCkgLSAxOworCQkJaWYgKGNsayA+PSAyNTYpCisJCQkJY2xrID0gMjU1OworCQkJaG9zdC0+Y2NsayA9IGhvc3QtPm1jbGsgLyAoMiAqIChjbGsgKyAxKSk7CisJCX0KKwkJaWYgKGhvc3QtPmh3X2Rlc2lnbmVyID09IDB4ODApCisJCQljbGsgfD0gTUNJX0ZDRU47IC8qIEJ1ZyBmaXggaW4gU1QgSVAgYmxvY2sgKi8KKwkJY2xrIHw9IE1DSV9DTEtfRU5BQkxFOworCQkvKiBUaGlzIGhhc24ndCBwcm92ZW4gdG8gYmUgd29ydGh3aGlsZSAqLworCQkvKiBjbGsgfD0gTUNJX0NMS19QV1JTQVZFOyAqLworCX0KKworCWlmIChob3N0LT5tbWMtPmlvcy5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KQorCQljbGsgfD0gTUNJX1dJREVfQlVTOworCisJd3JpdGVsKGNsaywgaG9zdC0+YmFzZSArIE1NQ0lDTE9DSyk7Cit9CisKIHN0YXRpYyB2b2lkCiBtbWNpX3JlcXVlc3RfZW5kKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQogewpAQCAtNDE5LDMwICs0NTAsMzEgQEAKIHN0YXRpYyB2b2lkIG1tY2lfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKIHsKIAlzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKLQl1MzIgY2xrID0gMCwgcHdyID0gMDsKLQotCWlmIChpb3MtPmNsb2NrKSB7Ci0JCWlmIChpb3MtPmNsb2NrID49IGhvc3QtPm1jbGspIHsKLQkJCWNsayA9IE1DSV9DTEtfQllQQVNTOwotCQkJaG9zdC0+Y2NsayA9IGhvc3QtPm1jbGs7Ci0JCX0gZWxzZSB7Ci0JCQljbGsgPSBob3N0LT5tY2xrIC8gKDIgKiBpb3MtPmNsb2NrKSAtIDE7Ci0JCQlpZiAoY2xrID49IDI1NikKLQkJCQljbGsgPSAyNTU7Ci0JCQlob3N0LT5jY2xrID0gaG9zdC0+bWNsayAvICgyICogKGNsayArIDEpKTsKLQkJfQotCQlpZiAoaG9zdC0+aHdfZGVzaWduZXIgPT0gQU1CQV9WRU5ET1JfU1QpCi0JCQljbGsgfD0gTUNJX0ZDRU47IC8qIEJ1ZyBmaXggaW4gU1QgSVAgYmxvY2sgKi8KLQkJY2xrIHw9IE1DSV9DTEtfRU5BQkxFOwotCX0KLQotCWlmIChob3N0LT5wbGF0LT50cmFuc2xhdGVfdmRkKQotCQlwd3IgfD0gaG9zdC0+cGxhdC0+dHJhbnNsYXRlX3ZkZChtbWNfZGV2KG1tYyksIGlvcy0+dmRkKTsKKwl1MzIgcHdyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKIAljYXNlIE1NQ19QT1dFUl9PRkY6CisJCWlmKGhvc3QtPnZjYyAmJgorCQkgICByZWd1bGF0b3JfaXNfZW5hYmxlZChob3N0LT52Y2MpKQorCQkJcmVndWxhdG9yX2Rpc2FibGUoaG9zdC0+dmNjKTsKIAkJYnJlYWs7CiAJY2FzZSBNTUNfUE9XRVJfVVA6CisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorCQlpZiAoaG9zdC0+dmNjKQorCQkJLyogVGhpcyBpbXBsaWNpdGx5IGVuYWJsZXMgdGhlIHJlZ3VsYXRvciAqLworCQkJbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGhvc3QtPnZjYywgaW9zLT52ZGQpOworI2VuZGlmCisJCS8qCisJCSAqIFRoZSB0cmFuc2xhdGVfdmRkIGZ1bmN0aW9uIGlzIG5vdCB1c2VkIGlmIHlvdSBoYXZlCisJCSAqIGFuIGV4dGVybmFsIHJlZ3VsYXRvciwgb3IgeW91ciBkZXNpZ24gaXMgcmVhbGx5IHdlaXJkLgorCQkgKiBVc2luZyBpdCB3b3VsZCBtZWFuIHNlbmRpbmcgaW4gcG93ZXIgY29udHJvbCBCT1RIIHVzaW5nCisJCSAqIGEgcmVndWxhdG9yIEFORCB0aGUgNCBNTUNJUFdSIGJpdHMuIElmIHdlIGRvbid0IGhhdmUKKwkJICogYSByZWd1bGF0b3IsIHdlIG1pZ2h0IGhhdmUgc29tZSBvdGhlciBwbGF0Zm9ybSBzcGVjaWZpYworCQkgKiBwb3dlciBjb250cm9sIGJlaGluZCB0aGlzIHRyYW5zbGF0ZSBmdW5jdGlvbi4KKwkJICovCisJCWlmICghaG9zdC0+dmNjICYmIGhvc3QtPnBsYXQtPnRyYW5zbGF0ZV92ZGQpCisJCQlwd3IgfD0gaG9zdC0+cGxhdC0+dHJhbnNsYXRlX3ZkZChtbWNfZGV2KG1tYyksIGlvcy0+dmRkKTsKIAkJLyogVGhlIFNUIHZlcnNpb24gZG9lcyBub3QgaGF2ZSB0aGlzLCBmYWxsIHRocm91Z2ggdG8gUE9XRVJfT04gKi8KIAkJaWYgKGhvc3QtPmh3X2Rlc2lnbmVyICE9IEFNQkFfVkVORE9SX1NUKSB7CiAJCQlwd3IgfD0gTUNJX1BXUl9VUDsKQEAgLTQ2NSwxMiArNDk3LDE2IEBACiAJCX0KIAl9CiAKLQl3cml0ZWwoY2xrLCBob3N0LT5iYXNlICsgTU1DSUNMT0NLKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJbW1jaV9zZXRfY2xrcmVnKGhvc3QsIGlvcy0+Y2xvY2spOwogCiAJaWYgKGhvc3QtPnB3ciAhPSBwd3IpIHsKIAkJaG9zdC0+cHdyID0gcHdyOwogCQl3cml0ZWwocHdyLCBob3N0LT5iYXNlICsgTU1DSVBPV0VSKTsKIAl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgbW1jaV9nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCkBAIC01MTcsNyArNTUzLDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgbW1jaV9wcm9iZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiwgc3RydWN0IGFtYmFfaWQgKmlkKQogewotCXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdDsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKIAlpbnQgcmV0OwpAQCAtNTgzLDcgKzYxOSwzMCBAQAogCW1tYy0+b3BzID0gJm1tY2lfb3BzOwogCW1tYy0+Zl9taW4gPSAoaG9zdC0+bWNsayArIDUxMSkgLyA1MTI7CiAJbW1jLT5mX21heCA9IG1pbihob3N0LT5tY2xrLCBmbWF4KTsKLQltbWMtPm9jcl9hdmFpbCA9IHBsYXQtPm9jcl9tYXNrOworI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKKwkvKiBJZiB3ZSdyZSB1c2luZyB0aGUgcmVndWxhdG9yIGZyYW1ld29yaywgdHJ5IHRvIGZldGNoIGEgcmVndWxhdG9yICovCisJaG9zdC0+dmNjID0gcmVndWxhdG9yX2dldCgmZGV2LT5kZXYsICJ2bW1jIik7CisJaWYgKElTX0VSUihob3N0LT52Y2MpKQorCQlob3N0LT52Y2MgPSBOVUxMOworCWVsc2UgeworCQlpbnQgbWFzayA9IG1tY19yZWd1bGF0b3JfZ2V0X29jcm1hc2soaG9zdC0+dmNjKTsKKworCQlpZiAobWFzayA8IDApCisJCQlkZXZfZXJyKCZkZXYtPmRldiwgImVycm9yIGdldHRpbmcgT0NSIG1hc2sgKCVkKVxuIiwKKwkJCQltYXNrKTsKKwkJZWxzZSB7CisJCQlob3N0LT5tbWMtPm9jcl9hdmFpbCA9ICh1MzIpIG1hc2s7CisJCQlpZiAocGxhdC0+b2NyX21hc2spCisJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCSAiUHJvdmlkZWQgb2NyX21hc2svc2V0cG93ZXIgd2lsbCBub3QgYmUgdXNlZCAiCisJCQkJICIodXNpbmcgcmVndWxhdG9yIGluc3RlYWQpXG4iKTsKKwkJfQorCX0KKyNlbmRpZgorCS8qIEZhbGwgYmFjayB0byBwbGF0Zm9ybSBkYXRhIGlmIG5vIHJlZ3VsYXRvciBpcyBmb3VuZCAqLworCWlmIChob3N0LT52Y2MgPT0gTlVMTCkKKwkJbW1jLT5vY3JfYXZhaWwgPSBwbGF0LT5vY3JfbWFzazsKKwltbWMtPmNhcHMgPSBwbGF0LT5jYXBhYmlsaXRpZXM7CiAKIAkvKgogCSAqIFdlIGNhbiBkbyBTR0lPCkBAIC02MTksNyArNjc4LDYgQEAKIAl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMSk7CiAJd3JpdGVsKDB4ZmZmLCBob3N0LT5iYXNlICsgTU1DSUNMRUFSKTsKIAotI2lmZGVmIENPTkZJR19HUElPTElCCiAJaWYgKGdwaW9faXNfdmFsaWQocGxhdC0+Z3Bpb19jZCkpIHsKIAkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBsYXQtPmdwaW9fY2QsIERSSVZFUl9OQU1FICIgKGNkKSIpOwogCQlpZiAocmV0ID09IDApCkBAIC02MzgsNyArNjk2LDYgQEAKIAkJZWxzZSBpZiAocmV0ICE9IC1FTk9TWVMpCiAJCQlnb3RvIGVycl9ncGlvX3dwOwogCX0KLSNlbmRpZgogCiAJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnFbMF0sIG1tY2lfaXJxLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUgIiAoY21kKSIsIGhvc3QpOwogCWlmIChyZXQpCkBAIC03MjAsNiArNzc3LDEwIEBACiAJCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CiAJCWNsa19wdXQoaG9zdC0+Y2xrKTsKIAorCQlpZiAocmVndWxhdG9yX2lzX2VuYWJsZWQoaG9zdC0+dmNjKSkKKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKGhvc3QtPnZjYyk7CisJCXJlZ3VsYXRvcl9wdXQoaG9zdC0+dmNjKTsKKwogCQltbWNfZnJlZV9ob3N0KG1tYyk7CiAKIAkJYW1iYV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmgKaW5kZXggODM5ZjI2NC4uMWNlYjlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmgKQEAgLTE2MSw3ICsxNjEsNyBAQAogCXVuc2lnbmVkIGludAkJbWNsazsKIAl1bnNpZ25lZCBpbnQJCWNjbGs7CiAJdTMyCQkJcHdyOwotCXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSAqcGxhdDsKKwlzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhICpwbGF0OwogCiAJdTgJCQlod19kZXNpZ25lcjsKIAl1OAkJCWh3X3JldmlzaW9uOjQ7CkBAIC0xNzUsNiArMTc1LDcgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnX3B0cjsKIAl1bnNpZ25lZCBpbnQJCXNnX29mZjsKIAl1bnNpZ25lZCBpbnQJCXNpemU7CisJc3RydWN0IHJlZ3VsYXRvcgkqdmNjOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1tY2lfaW5pdF9zZyhzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCmluZGV4IGU3YTMzMWQuLmI4ZmQ3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCkBAIC0xNTI5LDYgKzE1MjksNyBAQAogCQlob3N0LT5wZGF0YS0+Y2xlYW51cCgmcGRldi0+ZGV2KTsKIAogCW1tY19vbWFwX2ZjbGtfZW5hYmxlKGhvc3QsIDApOworCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiAJY2xrX3B1dChob3N0LT5mY2xrKTsKIAljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKIAljbGtfcHV0KGhvc3QtPmljbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwppbmRleCA0NDg3Y2MwLi4wYWVjYWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwpAQCAtMjAxMyw3ICsyMDEzLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaHNtbWNfaW5pdCh2b2lkKQogewogCS8qIFJlZ2lzdGVyIHRoZSBNTUMgZHJpdmVyICovCi0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9oc21tY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm9tYXBfaHNtbWNfZHJpdmVyLCBvbWFwX2hzbW1jX3Byb2JlKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXBfaHNtbWNfY2xlYW51cCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKaW5kZXggZTU1YWM3OS4uYjAwZDY3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCkBAIC05NiwxMCArOTcsMTggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHB4YW1jaV9zZXRfcG93ZXIoc3RydWN0IHB4YW1jaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgdmRkKQogeworCWludCBvbjsKKwogI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKIAlpZiAoaG9zdC0+dmNjKQogCQltbWNfcmVndWxhdG9yX3NldF9vY3IoaG9zdC0+dmNjLCB2ZGQpOwogI2VuZGlmCisJaWYgKCFob3N0LT52Y2MgJiYgaG9zdC0+cGRhdGEgJiYKKwkgICAgZ3Bpb19pc192YWxpZChob3N0LT5wZGF0YS0+Z3Bpb19wb3dlcikpIHsKKwkJb24gPSAoKDEgPDwgdmRkKSAmIGhvc3QtPnBkYXRhLT5vY3JfbWFzayk7CisJCWdwaW9fc2V0X3ZhbHVlKGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyLAorCQkJICAgICAgICEhb24gXiBob3N0LT5wZGF0YS0+Z3Bpb19wb3dlcl9pbnZlcnQpOworCX0KIAlpZiAoIWhvc3QtPnZjYyAmJiBob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+c2V0cG93ZXIpCiAJCWhvc3QtPnBkYXRhLT5zZXRwb3dlcihtbWNfZGV2KGhvc3QtPm1tYyksIHZkZCk7CiB9CkBAIC00MjEsNiArNDMwLDEyIEBACiB7CiAJc3RydWN0IHB4YW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAorCWlmIChob3N0LT5wZGF0YSAmJiBncGlvX2lzX3ZhbGlkKGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfcm8pKSB7CisJCWlmIChob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvX2ludmVydCkKKwkJCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9ybyk7CisJCWVsc2UKKwkJCXJldHVybiBncGlvX2dldF92YWx1ZShob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvKTsKKwl9CiAJaWYgKGhvc3QtPnBkYXRhICYmIGhvc3QtPnBkYXRhLT5nZXRfcm8pCiAJCXJldHVybiAhIWhvc3QtPnBkYXRhLT5nZXRfcm8obW1jX2RldihtbWMpKTsKIAkvKgpAQCAtNTM0LDcgKzU0OSw3IEBACiAJc3RydWN0IG1tY19ob3N0ICptbWM7CiAJc3RydWN0IHB4YW1jaV9ob3N0ICpob3N0ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnIsICpkbWFyeCwgKmRtYXR4OwotCWludCByZXQsIGlycTsKKwlpbnQgcmV0LCBpcnEsIGdwaW9fY2QgPSAtMSwgZ3Bpb19ybyA9IC0xLCBncGlvX3Bvd2VyID0gLTE7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwpAQCAtNjYxLDEzICs2NzYsNjMgQEAKIAl9CiAJaG9zdC0+ZG1hX2RyY21ydHggPSBkbWF0eC0+c3RhcnQ7CiAKKwlpZiAoaG9zdC0+cGRhdGEpIHsKKwkJZ3Bpb19jZCA9IGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfZGV0ZWN0OworCQlncGlvX3JvID0gaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9ybzsKKwkJZ3Bpb19wb3dlciA9IGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyOworCX0KKwlpZiAoZ3Bpb19pc192YWxpZChncGlvX3Bvd2VyKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb19wb3dlciwgIm1tYyBjYXJkIHBvd2VyIik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCByZXF1ZXN0aW5nIGdwaW9fcG93ZXIgJWRcbiIsIGdwaW9fcG93ZXIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW9fcG93ZXIsCisJCQkJICAgICAgaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXJfaW52ZXJ0KTsKKwl9CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19ybykpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fcm8sICJtbWMgY2FyZCByZWFkIG9ubHkiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHJlcXVlc3RpbmcgZ3Bpb19ybyAlZFxuIiwgZ3Bpb19ybyk7CisJCQlnb3RvIGVycl9ncGlvX3JvOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fcm8pOworCX0KKwlpZiAoZ3Bpb19pc192YWxpZChncGlvX2NkKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb19jZCwgIm1tYyBjYXJkIGRldGVjdCIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgcmVxdWVzdGluZyBncGlvX2NkICVkXG4iLCBncGlvX2NkKTsKKwkJCWdvdG8gZXJyX2dwaW9fY2Q7CisJCX0KKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19jZCk7CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoZ3Bpb19jZCksIHB4YW1jaV9kZXRlY3RfaXJxLAorCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCSAgIm1tYyBjYXJkIGRldGVjdCIsIG1tYyk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGNhcmQgZGV0ZWN0IElSUVxuIik7CisJCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKKwkJfQorCX0KKwogCWlmIChob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+aW5pdCkKIAkJaG9zdC0+cGRhdGEtPmluaXQoJnBkZXYtPmRldiwgcHhhbWNpX2RldGVjdF9pcnEsIG1tYyk7CiAKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvX3Bvd2VyKSAmJiBob3N0LT5wZGF0YS0+c2V0cG93ZXIpCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJncGlvX3Bvd2VyIGFuZCBzZXRwb3dlcigpIGJvdGggZGVmaW5lZFxuIik7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19ybykgJiYgaG9zdC0+cGRhdGEtPmdldF9ybykKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImdwaW9fcm8gYW5kIGdldF9ybygpIGJvdGggZGVmaW5lZFxuIik7CisKIAltbWNfYWRkX2hvc3QobW1jKTsKIAogCXJldHVybiAwOwogCitlcnJfcmVxdWVzdF9pcnE6CisJZ3Bpb19mcmVlKGdwaW9fY2QpOworZXJyX2dwaW9fY2Q6CisJZ3Bpb19mcmVlKGdwaW9fcm8pOworZXJyX2dwaW9fcm86CisJZ3Bpb19mcmVlKGdwaW9fcG93ZXIpOwogIG91dDoKIAlpZiAoaG9zdCkgewogCQlpZiAoaG9zdC0+ZG1hID49IDApCkBAIC02ODgsMTIgKzc1MywyNiBAQAogc3RhdGljIGludCBweGFtY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgZ3Bpb19jZCA9IC0xLCBncGlvX3JvID0gLTEsIGdwaW9fcG93ZXIgPSAtMTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKG1tYykgewogCQlzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCisJCWlmIChob3N0LT5wZGF0YSkgeworCQkJZ3Bpb19jZCA9IGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfZGV0ZWN0OworCQkJZ3Bpb19ybyA9IGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfcm87CisJCQlncGlvX3Bvd2VyID0gaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXI7CisJCX0KKwkJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19jZCkpIHsKKwkJCWZyZWVfaXJxKGdwaW9fdG9faXJxKGdwaW9fY2QpLCBtbWMpOworCQkJZ3Bpb19mcmVlKGdwaW9fY2QpOworCQl9CisJCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fcm8pKQorCQkJZ3Bpb19mcmVlKGdwaW9fcm8pOworCQlpZiAoZ3Bpb19pc192YWxpZChncGlvX3Bvd2VyKSkKKwkJCWdwaW9fZnJlZShncGlvX3Bvd2VyKTsKIAkJaWYgKGhvc3QtPnZjYykKIAkJCXJlZ3VsYXRvcl9wdXQoaG9zdC0+dmNjKTsKIApAQCAtNzI1LDIwICs4MDQsMjAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBweGFtY2lfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhbWNpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKG1tYykKLQkJcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChtbWMsIHN0YXRlKTsKKwkJcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChtbWMsIFBNU0dfU1VTUEVORCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHB4YW1jaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBweGFtY2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChtbWMpCkBAIC03NDYsMTkgKzgyNSwyMiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLSNlbHNlCi0jZGVmaW5lIHB4YW1jaV9zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcHhhbWNpX3Jlc3VtZQlOVUxMCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGFtY2lfcG1fb3BzID0geworCS5zdXNwZW5kCT0gcHhhbWNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGFtY2lfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGFtY2lfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGFtY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBweGFtY2lfcmVtb3ZlLAotCS5zdXNwZW5kCT0gcHhhbWNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBweGFtY2lfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9IERSSVZFUl9OQU1FLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnB4YW1jaV9wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKaW5kZXggOGMwOGNkNy4uOTliNzRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC01OCw4ICs2MCw2IEBACiAJCWRldl9kYmcoJmhvc3QtPnBkZXYtPmRldiwgYXJncyk7ICBcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBSRVNTSVpFKHJlc3NvdXJjZSkgKCgocmVzc291cmNlKS0+ZW5kIC0gKHJlc3NvdXJjZSktPnN0YXJ0KSsxKQotCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2NtY2lfZG1hX2NsaWVudCA9IHsKIAkubmFtZQkJPSAiczNjLW1jaSIsCiB9OwpAQCAtMTY0LDYgKzE2NCw0MCBAQAogCiAjZW5kaWYgLyogQ09ORklHX01NQ19ERUJVRyAqLwogCisvKioKKyAqIHMzY21jaV9ob3N0X3VzZWRtYSAtIHJldHVybiB3aGV0aGVyIHRoZSBob3N0IGlzIHVzaW5nIGRtYSBvciBwaW8KKyAqIEBob3N0OiBUaGUgaG9zdCBzdGF0ZQorICoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBob3N0IGlzIHVzaW5nIERNQSB0byB0cmFuc2ZlciBkYXRhLCBlbHNlIGZhbHNlCisgKiB0byB1c2UgUElPIG1vZGUuIFdpbGwgcmV0dXJuIHN0YXRpYyBkYXRhIGRlcGVuZGluZyBvbiB0aGUgZHJpdmVyCisgKiBjb25maWd1cmF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgczNjbWNpX2hvc3RfdXNlZG1hKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKK3sKKyNpZmRlZiBDT05GSUdfTU1DX1MzQ19QSU8KKwlyZXR1cm4gZmFsc2U7CisjZWxpZiBkZWZpbmVkKENPTkZJR19NTUNfUzNDX0RNQSkKKwlyZXR1cm4gdHJ1ZTsKKyNlbHNlCisJcmV0dXJuIGhvc3QtPmRvZG1hOworI2VuZGlmCit9CisKKy8qKgorICogczNjbWNpX2hvc3RfY2FucGlvIC0gcmV0dXJuIHRydWUgaWYgaG9zdCBoYXMgcGlvIGNvZGUgYXZhaWxhYmxlCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGRyaXZlciBoYXMgYmVlbiBjb21waWxlZCB3aXRoIHRoZSBQSU8gc3VwcG9ydCBjb2RlCisgKiBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBzM2NtY2lfaG9zdF9jYW5waW8odm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfTU1DX1MzQ19QSU8KKwlyZXR1cm4gdHJ1ZTsKKyNlbHNlCisJcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIHN0YXRpYyBpbmxpbmUgdTMyIGVuYWJsZV9pbWFzayhzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QsIHUzMiBpbWFzaykKIHsKIAl1MzIgbmV3bWFzazsKQEAgLTE5MCw3ICsyMjQsMzMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2ltYXNrKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKIHsKLQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOworCXUzMiBtYXNrID0gcmVhZGwoaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOworCisJLyogcHJlc2VydmUgdGhlIFNESU8gSVJRIG1hc2sgc3RhdGUgKi8KKwltYXNrICY9IFMzQzI0MTBfU0RJSU1TS19TRElPSVJROworCXdyaXRlbChtYXNrLCBob3N0LT5iYXNlICsgaG9zdC0+c2RpaW1zayk7Cit9CisKKy8qKgorICogczNjbWNpX2NoZWNrX3NkaW9faXJxIC0gdGVzdCB3aGV0aGVyIHRoZSBTRElPIElSUSBpcyBiZWluZyBzaWduYWxsZWQKKyAqIEBob3N0OiBUaGUgaG9zdCB0byBjaGVjay4KKyAqCisgKiBUZXN0IHRvIHNlZSBpZiB0aGUgU0RJTyBpbnRlcnJ1cHQgaXMgYmVpbmcgc2lnbmFsbGVkIGluIGNhc2UgdGhlCisgKiBjb250cm9sbGVyIGhhcyBmYWlsZWQgdG8gcmUtZGV0ZWN0IGEgY2FyZCBpbnRlcnJ1cHQuIFJlYWQgR1BFOCBhbmQKKyAqIHNlZSBpZiBpdCBpcyBsb3cgYW5kIGlmIHNvLCBzaWduYWwgYSBTRElPIGludGVycnVwdC4KKyAqCisgKiBUaGlzIGlzIGN1cnJlbnRseSBjYWxsZWQgaWYgYSByZXF1ZXN0IGlzIGZpbmlzaGVkICh3ZSBhc3N1bWUgdGhhdCB0aGUKKyAqIGJ1cyBpcyBub3cgaWRsZSkgYW5kIHdoZW4gdGhlIFNESU8gSVJRIGlzIGVuYWJsZWQgaW4gY2FzZSB0aGUgSVJRIGlzCisgKiBhbHJlYWR5IGJlaW5nIGluZGljYXRlZC4KKyovCitzdGF0aWMgdm9pZCBzM2NtY2lfY2hlY2tfc2Rpb19pcnEoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworCWlmIChob3N0LT5zZGlvX2lycWVuKSB7CisJCWlmIChncGlvX2dldF92YWx1ZShTM0MyNDEwX0dQRSg4KSkgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzaWduYWxsaW5nIGlycVxuIiwgX19mdW5jX18pOworCQkJbW1jX3NpZ25hbF9zZGlvX2lycShob3N0LT5tbWMpOworCQl9CisJfQogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfZGF0YV9idWZmZXIoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LApAQCAtMjM4LDYgKzI5OCw2NCBAQAogCXJldHVybiA2MyAtIGZpZm9zdGF0OwogfQogCisvKioKKyAqIHMzY21jaV9lbmFibGVfaXJxIC0gZW5hYmxlIElSUSwgYWZ0ZXIgaGF2aW5nIGRpc2FibGVkIGl0LgorICogQGhvc3Q6IFRoZSBkZXZpY2Ugc3RhdGUuCisgKiBAbW9yZTogVHJ1ZSBpZiBtb3JlIElSUXMgYXJlIGV4cGVjdGVkIGZyb20gdHJhbnNmZXIuCisgKgorICogRW5hYmxlIHRoZSBtYWluIElSUSBpZiBuZWVkZWQgYWZ0ZXIgaXQgaGFzIGJlZW4gZGlzYWJsZWQuCisgKgorICogVGhlIElSUSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzOgorICoJLSBkaXNhYmxlZCBkdXJpbmcgSURMRQorICoJLSBkaXNhYmxlZCB3aGlsc3QgcHJvY2Vzc2luZyBkYXRhCisgKgktIGVuYWJsZWQgZHVyaW5nIHRyYW5zZmVyCisgKgktIGVuYWJsZWQgd2hpbHN0IGF3YWl0aW5nIFNESU8gaW50ZXJydXB0IGRldGVjdGlvbgorICovCitzdGF0aWMgdm9pZCBzM2NtY2lfZW5hYmxlX2lycShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QsIGJvb2wgbW9yZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgZW5hYmxlID0gZmFsc2U7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlob3N0LT5pcnFfZW5hYmxlZCA9IG1vcmU7CisJaG9zdC0+aXJxX2Rpc2FibGVkID0gZmFsc2U7CisKKwllbmFibGUgPSBtb3JlIHwgaG9zdC0+c2Rpb19pcnFlbjsKKworCWlmIChob3N0LT5pcnFfc3RhdGUgIT0gZW5hYmxlKSB7CisJCWhvc3QtPmlycV9zdGF0ZSA9IGVuYWJsZTsKKworCQlpZiAoZW5hYmxlKQorCQkJZW5hYmxlX2lycShob3N0LT5pcnEpOworCQllbHNlCisJCQlkaXNhYmxlX2lycShob3N0LT5pcnEpOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoqCisgKgorICovCitzdGF0aWMgdm9pZCBzM2NtY2lfZGlzYWJsZV9pcnEoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LCBib29sIHRyYW5zZmVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvL3ByaW50ayhLRVJOX0RFQlVHICIlczogdHJhbnNmZXIgJWRcbiIsIF9fZnVuY19fLCB0cmFuc2Zlcik7CisKKwlob3N0LT5pcnFfZGlzYWJsZWQgPSB0cmFuc2ZlcjsKKworCWlmICh0cmFuc2ZlciAmJiBob3N0LT5pcnFfc3RhdGUpIHsKKwkJaG9zdC0+aXJxX3N0YXRlID0gZmFsc2U7CisJCWRpc2FibGVfaXJxKGhvc3QtPmlycSk7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCBkb19waW9fcmVhZChzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCiB7CiAJaW50IHJlczsKQEAgLTM3NCw4ICs0OTIsNyBAQAogewogCXN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgczNjbWNpX2hvc3QgKikgZGF0YTsKIAotCi0JZGlzYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwlzM2NtY2lfZGlzYWJsZV9pcnEoaG9zdCwgdHJ1ZSk7CiAKIAlpZiAoaG9zdC0+cGlvX2FjdGl2ZSA9PSBYRkVSX1dSSVRFKQogCQlkb19waW9fd3JpdGUoaG9zdCk7CkBAIC0zOTUsOSArNTEyLDEwIEBACiAJCQkJaG9zdC0+bXJxLT5kYXRhLT5lcnJvciA9IC1FSU5WQUw7CiAJCX0KIAorCQlzM2NtY2lfZW5hYmxlX2lycShob3N0LCBmYWxzZSk7CiAJCWZpbmFsaXplX3JlcXVlc3QoaG9zdCk7CiAJfSBlbHNlCi0JCWVuYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwkJczNjbWNpX2VuYWJsZV9pcnEoaG9zdCwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC00MzIsMTcgKzU1MCwyNyBAQAogCXN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCA9IGRldl9pZDsKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZDsKIAl1MzIgbWNpX2NzdGEsIG1jaV9kc3RhLCBtY2lfZnN0YSwgbWNpX2RjbnQsIG1jaV9pbXNrOwotCXUzMiBtY2lfY2NsZWFyLCBtY2lfZGNsZWFyOworCXUzMiBtY2lfY2NsZWFyID0gMCwgbWNpX2RjbGVhcjsKIAl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAorCW1jaV9kc3RhID0gcmVhZGwoaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRFNUQSk7CisJbWNpX2ltc2sgPSByZWFkbChob3N0LT5iYXNlICsgaG9zdC0+c2RpaW1zayk7CisKKwlpZiAobWNpX2RzdGEgJiBTM0MyNDEwX1NESURTVEFfU0RJT0lSUURFVEVDVCkgeworCQlpZiAobWNpX2ltc2sgJiBTM0MyNDEwX1NESUlNU0tfU0RJT0lSUSkgeworCQkJbWNpX2RjbGVhciA9IFMzQzI0MTBfU0RJRFNUQV9TRElPSVJRREVURUNUOworCQkJd3JpdGVsKG1jaV9kY2xlYXIsIGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESURTVEEpOworCisJCQltbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtPm1tYyk7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKwl9CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+Y29tcGxldGVfbG9jaywgaWZsYWdzKTsKIAogCW1jaV9jc3RhID0gcmVhZGwoaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJQ01EU1RBVCk7Ci0JbWNpX2RzdGEgPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEU1RBKTsKIAltY2lfZGNudCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESURDTlQpOwogCW1jaV9mc3RhID0gcmVhZGwoaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRlNUQSk7Ci0JbWNpX2ltc2sgPSByZWFkbChob3N0LT5iYXNlICsgaG9zdC0+c2RpaW1zayk7Ci0JbWNpX2NjbGVhciA9IDA7CiAJbWNpX2RjbGVhciA9IDA7CiAKIAlpZiAoKGhvc3QtPmNvbXBsZXRlX3doYXQgPT0gQ09NUExFVElPTl9OT05FKSB8fApAQCAtNDY2LDcgKzU5NCw3IEBACiAJCWdvdG8gaXJxX291dDsKIAl9CiAKLQlpZiAoIWhvc3QtPmRvZG1hKSB7CisJaWYgKCFzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpIHsKIAkJaWYgKChob3N0LT5waW9fYWN0aXZlID09IFhGRVJfV1JJVEUpICYmCiAJCSAgICAobWNpX2ZzdGEgJiBTM0MyNDEwX1NESUZTVEFfVEZERVQpKSB7CiAKQEAgLTY3Myw2ICs4MDEsNyBAQAogCWRiZyhob3N0LCBkYmdfZG1hLCAiRE1BIEZJTklTSEVEIFNpemU6JWkgRFNUQTolMDh4IERDTlQ6JTA4eFxuIiwKIAkJc2l6ZSwgbWNpX2RzdGEsIG1jaV9kY250KTsKIAorCWhvc3QtPmRtYV9jb21wbGV0ZSA9IDE7CiAJaG9zdC0+Y29tcGxldGVfd2hhdCA9IENPTVBMRVRJT05fRklOQUxJWkU7CiAKIG91dDoKQEAgLTY4Myw5ICs4MTIsOSBAQAogZmFpbF9yZXF1ZXN0OgogCWhvc3QtPm1ycS0+ZGF0YS0+ZXJyb3IgPSAtRUlOVkFMOwogCWhvc3QtPmNvbXBsZXRlX3doYXQgPSBDT01QTEVUSU9OX0ZJTkFMSVpFOwotCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgaG9zdC0+c2RpaW1zayk7Ci0JZ290byBvdXQ7CisJY2xlYXJfaW1hc2soaG9zdCk7CiAKKwlnb3RvIG91dDsKIH0KIAogc3RhdGljIHZvaWQgZmluYWxpemVfcmVxdWVzdChzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCkBAIC03MDIsOCArODMxLDkgQEAKIAogCWlmIChjbWQtPmRhdGEgJiYgKGNtZC0+ZXJyb3IgPT0gMCkgJiYKIAkgICAgKGNtZC0+ZGF0YS0+ZXJyb3IgPT0gMCkpIHsKLQkJaWYgKGhvc3QtPmRvZG1hICYmICghaG9zdC0+ZG1hX2NvbXBsZXRlKSkgewotCQkJZGJnKGhvc3QsIGRiZ19kbWEsICJETUEgTWlzc2luZyFcbiIpOworCQlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpICYmICghaG9zdC0+ZG1hX2NvbXBsZXRlKSkgeworCQkJZGJnKGhvc3QsIGRiZ19kbWEsICJETUEgTWlzc2luZyAoJWQpIVxuIiwKKwkJCSAgICBob3N0LT5kbWFfY29tcGxldGUpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtNzI4LDcgKzg1OCw3IEBACiAJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUNNREFSRyk7CiAJd3JpdGVsKFMzQzI0MTBfU0RJRENPTl9TVE9QLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEQ09OKTsKIAl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJQ01EQ09OKTsKLQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOworCWNsZWFyX2ltYXNrKGhvc3QpOwogCiAJaWYgKGNtZC0+ZGF0YSAmJiBjbWQtPmVycm9yKQogCQljbWQtPmRhdGEtPmVycm9yID0gY21kLT5lcnJvcjsKQEAgLTc1NCw3ICs4ODQsNyBAQAogCS8qIElmIHdlIGhhZCBhbiBlcnJvciB3aGlsZSB0cmFuc2ZlcmluZyBkYXRhIHdlIGZsdXNoIHRoZQogCSAqIERNQSBjaGFubmVsIGFuZCB0aGUgZmlmbyB0byBjbGVhciBvdXQgYW55IGdhcmJhZ2UuICovCiAJaWYgKG1ycS0+ZGF0YS0+ZXJyb3IgIT0gMCkgewotCQlpZiAoaG9zdC0+ZG9kbWEpCisJCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpCiAJCQlzM2MyNDEwX2RtYV9jdHJsKGhvc3QtPmRtYSwgUzNDMjQxMF9ETUFPUF9GTFVTSCk7CiAKIAkJaWYgKGhvc3QtPmlzMjQ0MCkgewpAQCAtNzc2LDYgKzkwNiw4IEBACiByZXF1ZXN0X2RvbmU6CiAJaG9zdC0+Y29tcGxldGVfd2hhdCA9IENPTVBMRVRJT05fTk9ORTsKIAlob3N0LT5tcnEgPSBOVUxMOworCisJczNjbWNpX2NoZWNrX3NkaW9faXJxKGhvc3QpOwogCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOwogfQogCkBAIC04NzIsNyArMTAwNCw3IEBACiAKIAlkY29uICA9IGRhdGEtPmJsb2NrcyAmIFMzQzI0MTBfU0RJRENPTl9CTEtOVU1fTUFTSzsKIAotCWlmIChob3N0LT5kb2RtYSkKKwlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKQogCQlkY29uIHw9IFMzQzI0MTBfU0RJRENPTl9ETUFFTjsKIAogCWlmIChob3N0LT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KQpAQCAtOTUwLDcgKzEwODIsNyBAQAogc3RhdGljIGludCBzM2NtY2lfcHJlcGFyZV9kbWEoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CiAJaW50IGRtYV9sZW4sIGk7Ci0JaW50IHJ3ID0gKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpID8gMSA6IDA7CisJaW50IHJ3ID0gZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURTsKIAogCUJVR19PTigoZGF0YS0+ZmxhZ3MgJiBCT1RIX0RJUikgPT0gQk9USF9ESVIpOwogCkBAIC05NTgsNyArMTA5MCw3IEBACiAJczNjMjQxMF9kbWFfY3RybChob3N0LT5kbWEsIFMzQzI0MTBfRE1BT1BfRkxVU0gpOwogCiAJZG1hX2xlbiA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLAotCQkJICAgICAocncpID8gRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisJCQkgICAgIHJ3ID8gRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CiAKIAlpZiAoZG1hX2xlbiA9PSAwKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTk2OSwxMSArMTEwMSwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBkbWFfbGVuOyBpKyspIHsKIAkJaW50IHJlczsKIAotCQlkYmcoaG9zdCwgZGJnX2RtYSwgImVucXVldWUgJWk6JXVAJXVcbiIsIGksCi0JCQlzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbaV0pLAotCQkJc2dfZG1hX2xlbigmZGF0YS0+c2dbaV0pKTsKKwkJZGJnKGhvc3QsIGRiZ19kbWEsICJlbnF1ZXVlICVpOiAlMDh4QCV1XG4iLCBpLAorCQkgICAgc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnW2ldKSwKKwkJICAgIHNnX2RtYV9sZW4oJmRhdGEtPnNnW2ldKSk7CiAKLQkJcmVzID0gczNjMjQxMF9kbWFfZW5xdWV1ZShob3N0LT5kbWEsICh2b2lkICopIGhvc3QsCisJCXJlcyA9IHMzYzI0MTBfZG1hX2VucXVldWUoaG9zdC0+ZG1hLCBob3N0LAogCQkJCQkgIHNnX2RtYV9hZGRyZXNzKCZkYXRhLT5zZ1tpXSksCiAJCQkJCSAgc2dfZG1hX2xlbigmZGF0YS0+c2dbaV0pKTsKIApAQCAtMTAxOCw3ICsxMTUwLDcgQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCWlmIChob3N0LT5kb2RtYSkKKwkJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSkKIAkJCXJlcyA9IHMzY21jaV9wcmVwYXJlX2RtYShob3N0LCBjbWQtPmRhdGEpOwogCQllbHNlCiAJCQlyZXMgPSBzM2NtY2lfcHJlcGFyZV9waW8oaG9zdCwgY21kLT5kYXRhKTsKQEAgLTEwMzcsNyArMTE2OSw3IEBACiAJczNjbWNpX3NlbmRfY29tbWFuZChob3N0LCBjbWQpOwogCiAJLyogRW5hYmxlIEludGVycnVwdCAqLwotCWVuYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwlzM2NtY2lfZW5hYmxlX2lycShob3N0LCB0cnVlKTsKIH0KIAogc3RhdGljIGludCBzM2NtY2lfY2FyZF9wcmVzZW50KHN0cnVjdCBtbWNfaG9zdCAqbW1jKQpAQCAtMTA0OSw3ICsxMTgxLDcgQEAKIAlpZiAocGRhdGEtPmdwaW9fZGV0ZWN0ID09IDApCiAJCXJldHVybiAtRU5PU1lTOwogCi0JcmV0ID0gczNjMjQxMF9ncGlvX2dldHBpbihwZGF0YS0+Z3Bpb19kZXRlY3QpID8gMCA6IDE7CisJcmV0ID0gZ3Bpb19nZXRfdmFsdWUocGRhdGEtPmdwaW9fZGV0ZWN0KSA/IDAgOiAxOwogCXJldHVybiByZXQgXiBwZGF0YS0+ZGV0ZWN0X2ludmVydDsKIH0KIApAQCAtMTEwNCwxMiArMTIzNiwxMiBAQAogCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CiAJY2FzZSBNTUNfUE9XRVJfT046CiAJY2FzZSBNTUNfUE9XRVJfVVA6Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU1LCBTM0MyNDEwX0dQRTVfU0RDTEspOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFNiwgUzNDMjQxMF9HUEU2X1NEQ01EKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTcsIFMzQzI0MTBfR1BFN19TRERBVDApOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFOCwgUzNDMjQxMF9HUEU4X1NEREFUMSk7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU5LCBTM0MyNDEwX0dQRTlfU0REQVQyKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTEwLCBTM0MyNDEwX0dQRTEwX1NEREFUMyk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUoNSksIFMzQzI0MTBfR1BFNV9TRENMSyk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUoNiksIFMzQzI0MTBfR1BFNl9TRENNRCk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUoNyksIFMzQzI0MTBfR1BFN19TRERBVDApOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDgpLCBTM0MyNDEwX0dQRThfU0REQVQxKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRSg5KSwgUzNDMjQxMF9HUEU5X1NEREFUMik7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUoMTApLCBTM0MyNDEwX0dQRTEwX1NEREFUMyk7CiAKIAkJaWYgKGhvc3QtPnBkYXRhLT5zZXRfcG93ZXIpCiAJCQlob3N0LT5wZGF0YS0+c2V0X3Bvd2VyKGlvcy0+cG93ZXJfbW9kZSwgaW9zLT52ZGQpOwpAQCAtMTEyMSw4ICsxMjUzLDcgQEAKIAogCWNhc2UgTU1DX1BPV0VSX09GRjoKIAlkZWZhdWx0OgotCQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BFNSwgMCk7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU1LCBTM0MyNDEwX0dQSU9fT1VUUFVUKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzI0MTBfR1BFKDUpLCAwKTsKIAogCQlpZiAoaG9zdC0+aXMyNDQwKQogCQkJbWNpX2NvbiB8PSBTM0MyNDQwX1NESUNPTl9TRFJFU0VUOwpAQCAtMTE2OCw3ICsxMjk5LDcgQEAKIAlzdHJ1Y3QgczNjMjR4eF9tY2lfcGRhdGEgKnBkYXRhID0gaG9zdC0+cGRhdGE7CiAJaW50IHJldDsKIAotCWlmIChwZGF0YS0+Z3Bpb193cHJvdGVjdCA9PSAwKQorCWlmIChwZGF0YS0+bm9fd3Byb3RlY3QpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gczNjMjQxMF9ncGlvX2dldHBpbihwZGF0YS0+Z3Bpb193cHJvdGVjdCk7CkBAIC0xMTc5LDExICsxMzEwLDUyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgczNjbWNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGNvbjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNvbiA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUNPTik7CisJaG9zdC0+c2Rpb19pcnFlbiA9IGVuYWJsZTsKKworCWlmIChlbmFibGUgPT0gaG9zdC0+c2Rpb19pcnFlbikKKwkJZ290byBzYW1lX3N0YXRlOworCisJaWYgKGVuYWJsZSkgeworCQljb24gfD0gUzNDMjQxMF9TRElDT05fU0RJT0lSUTsKKwkJZW5hYmxlX2ltYXNrKGhvc3QsIFMzQzI0MTBfU0RJSU1TS19TRElPSVJRKTsKKworCQlpZiAoIWhvc3QtPmlycV9zdGF0ZSAmJiAhaG9zdC0+aXJxX2Rpc2FibGVkKSB7CisJCQlob3N0LT5pcnFfc3RhdGUgPSB0cnVlOworCQkJZW5hYmxlX2lycShob3N0LT5pcnEpOworCQl9CisJfSBlbHNlIHsKKwkJZGlzYWJsZV9pbWFzayhob3N0LCBTM0MyNDEwX1NESUlNU0tfU0RJT0lSUSk7CisJCWNvbiAmPSB+UzNDMjQxMF9TRElDT05fU0RJT0lSUTsKKworCQlpZiAoIWhvc3QtPmlycV9lbmFibGVkICYmIGhvc3QtPmlycV9zdGF0ZSkgeworCQkJZGlzYWJsZV9pcnFfbm9zeW5jKGhvc3QtPmlycSk7CisJCQlob3N0LT5pcnFfc3RhdGUgPSBmYWxzZTsKKwkJfQorCX0KKworCXdyaXRlbChjb24sIGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUNPTik7CisKKyBzYW1lX3N0YXRlOgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXMzY21jaV9jaGVja19zZGlvX2lycShob3N0KTsKK30KKwogc3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgczNjbWNpX29wcyA9IHsKIAkucmVxdWVzdAk9IHMzY21jaV9yZXF1ZXN0LAogCS5zZXRfaW9zCT0gczNjbWNpX3NldF9pb3MsCiAJLmdldF9ybwkJPSBzM2NtY2lfZ2V0X3JvLAogCS5nZXRfY2QJCT0gczNjbWNpX2NhcmRfcHJlc2VudCwKKwkuZW5hYmxlX3NkaW9faXJxID0gczNjbWNpX2VuYWJsZV9zZGlvX2lycSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9tY2lfcGRhdGEgczNjbWNpX2RlZl9wZGF0YSA9IHsKQEAgLTEyNDYsMTEgKzE0MTgsMTQwIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBfX2RldmluaXQgczNjbWNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpczI0NDApCisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKworc3RhdGljIGludCBzM2NtY2lfc3RhdGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSBzZXEtPnByaXZhdGU7CisKKwlzZXFfcHJpbnRmKHNlcSwgIlJlZ2lzdGVyIGJhc2UgPSAweCUwOHhcbiIsICh1MzIpaG9zdC0+YmFzZSk7CisJc2VxX3ByaW50ZihzZXEsICJDbG9jayByYXRlID0gJWxkXG4iLCBob3N0LT5jbGtfcmF0ZSk7CisJc2VxX3ByaW50ZihzZXEsICJQcmVzY2FsZSA9ICVkXG4iLCBob3N0LT5wcmVzY2FsZXIpOworCXNlcV9wcmludGYoc2VxLCAiaXMyNDQwID0gJWRcbiIsIGhvc3QtPmlzMjQ0MCk7CisJc2VxX3ByaW50ZihzZXEsICJJUlEgPSAlZFxuIiwgaG9zdC0+aXJxKTsKKwlzZXFfcHJpbnRmKHNlcSwgIklSUSBlbmFibGVkID0gJWRcbiIsIGhvc3QtPmlycV9lbmFibGVkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIklSUSBkaXNhYmxlZCA9ICVkXG4iLCBob3N0LT5pcnFfZGlzYWJsZWQpOworCXNlcV9wcmludGYoc2VxLCAiSVJRIHN0YXRlID0gJWRcbiIsIGhvc3QtPmlycV9zdGF0ZSk7CisJc2VxX3ByaW50ZihzZXEsICJDRCBJUlEgPSAlZFxuIiwgaG9zdC0+aXJxX2NkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkRvIERNQSA9ICVkXG4iLCBzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpOworCXNlcV9wcmludGYoc2VxLCAiU0RJSU1TSyBhdCAlZFxuIiwgaG9zdC0+c2RpaW1zayk7CisJc2VxX3ByaW50ZihzZXEsICJTRElEQVRBIGF0ICVkXG4iLCBob3N0LT5zZGlkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY21jaV9zdGF0ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzM2NtY2lfc3RhdGVfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHMzY21jaV9mb3BzX3N0YXRlID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBzM2NtY2lfc3RhdGVfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworI2RlZmluZSBEQkdfUkVHKF9yKSB7IC5hZGRyID0gUzNDMjQxMF9TREkjI19yLCAubmFtZSA9ICNfciB9CisKK3N0cnVjdCBzM2NtY2lfcmVnIHsKKwl1bnNpZ25lZCBzaG9ydAlhZGRyOworCXVuc2lnbmVkIGNoYXIJKm5hbWU7Cit9IGRlYnVnX3JlZ3NbXSA9IHsKKwlEQkdfUkVHKENPTiksCisJREJHX1JFRyhQUkUpLAorCURCR19SRUcoQ01EQVJHKSwKKwlEQkdfUkVHKENNRENPTiksCisJREJHX1JFRyhDTURTVEFUKSwKKwlEQkdfUkVHKFJTUDApLAorCURCR19SRUcoUlNQMSksCisJREJHX1JFRyhSU1AyKSwKKwlEQkdfUkVHKFJTUDMpLAorCURCR19SRUcoVElNRVIpLAorCURCR19SRUcoQlNJWkUpLAorCURCR19SRUcoRENPTiksCisJREJHX1JFRyhEQ05UKSwKKwlEQkdfUkVHKERTVEEpLAorCURCR19SRUcoRlNUQSksCisJe30KK307CisKK3N0YXRpYyBpbnQgczNjbWNpX3JlZ3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IHMzY21jaV9yZWcgKnJwdHIgPSBkZWJ1Z19yZWdzOworCisJZm9yICg7IHJwdHItPm5hbWU7IHJwdHIrKykKKwkJc2VxX3ByaW50ZihzZXEsICJTREklc1x0PTB4JTA4eFxuIiwgcnB0ci0+bmFtZSwKKwkJCSAgIHJlYWRsKGhvc3QtPmJhc2UgKyBycHRyLT5hZGRyKSk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIlNESUlNU0tcdD0weCUwOHhcbiIsIHJlYWRsKGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NtY2lfcmVnc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzM2NtY2lfcmVnc19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgczNjbWNpX2ZvcHNfcmVncyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gczNjbWNpX3JlZ3Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgczNjbWNpX2RlYnVnZnNfYXR0YWNoKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaG9zdC0+cGRldi0+ZGV2OworCisJaG9zdC0+ZGVidWdfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZShkZXYpLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGhvc3QtPmRlYnVnX3Jvb3QpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1Z2ZzIHJvb3RcbiIpOworCQlyZXR1cm47CisJfQorCisJaG9zdC0+ZGVidWdfc3RhdGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0ZSIsIDA0NDQsCisJCQkJCQlob3N0LT5kZWJ1Z19yb290LCBob3N0LAorCQkJCQkJJnMzY21jaV9mb3BzX3N0YXRlKTsKKworCWlmIChJU19FUlIoaG9zdC0+ZGVidWdfc3RhdGUpKQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZGVidWcgc3RhdGUgZmlsZVxuIik7CisKKwlob3N0LT5kZWJ1Z19yZWdzID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVncyIsIDA0NDQsCisJCQkJCSAgICAgICBob3N0LT5kZWJ1Z19yb290LCBob3N0LAorCQkJCQkgICAgICAgJnMzY21jaV9mb3BzX3JlZ3MpOworCisJaWYgKElTX0VSUihob3N0LT5kZWJ1Z19yZWdzKSkKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRlYnVnIHJlZ3MgZmlsZVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHMzY21jaV9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJZGVidWdmc19yZW1vdmUoaG9zdC0+ZGVidWdfcmVncyk7CisJZGVidWdmc19yZW1vdmUoaG9zdC0+ZGVidWdfc3RhdGUpOworCWRlYnVnZnNfcmVtb3ZlKGhvc3QtPmRlYnVnX3Jvb3QpOworfQorCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHMzY21jaV9kZWJ1Z2ZzX2F0dGFjaChzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHMzY21jaV9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpIHsgfQorCisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHMzY21jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdDsKIAlzdHJ1Y3QgbW1jX2hvc3QJKm1tYzsKIAlpbnQgcmV0OworCWludCBpczI0NDA7CisJaW50IGk7CisKKwlpczI0NDAgPSBwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpLT5kcml2ZXJfZGF0YTsKIAogCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgczNjbWNpX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewpAQCAtMTI1OCw2ICsxNTU5LDE4IEBACiAJCWdvdG8gcHJvYmVfb3V0OwogCX0KIAorCWZvciAoaSA9IFMzQzI0MTBfR1BFKDUpOyBpIDw9IFMzQzI0MTBfR1BFKDEwKTsgaSsrKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChpLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgZ3BpbyAlZFxuIiwgaSk7CisKKwkJCWZvciAoaS0tOyBpID49IFMzQzI0MTBfR1BFKDUpOyBpLS0pCisJCQkJZ3Bpb19mcmVlKGkpOworCisJCQlnb3RvIHByb2JlX2ZyZWVfaG9zdDsKKwkJfQorCX0KKwogCWhvc3QgPSBtbWNfcHJpdihtbWMpOwogCWhvc3QtPm1tYyAJPSBtbWM7CiAJaG9zdC0+cGRldgk9IHBkZXY7CkBAIC0xMjgyLDExICsxNTk1LDEyIEBACiAJCWhvc3QtPmNsa19kaXYJPSAyOwogCX0KIAotCWhvc3QtPmRvZG1hCQk9IDA7CiAJaG9zdC0+Y29tcGxldGVfd2hhdCAJPSBDT01QTEVUSU9OX05PTkU7CiAJaG9zdC0+cGlvX2FjdGl2ZSAJPSBYRkVSX05PTkU7CiAKLQlob3N0LT5kbWEJCT0gUzNDTUNJX0RNQTsKKyNpZmRlZiBDT05GSUdfTU1DX1MzQ19QSU9ETUEKKwlob3N0LT5kb2RtYQkJPSBob3N0LT5wZGF0YS0+ZG1hOworI2VuZGlmCiAKIAlob3N0LT5tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghaG9zdC0+bWVtKSB7CkBAIC0xMjk0LDE5ICsxNjA4LDE5IEBACiAJCQkiZmFpbGVkIHRvIGdldCBpbyBtZW1vcnkgcmVnaW9uIHJlc291Y2UuXG4iKTsKIAogCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIHByb2JlX2ZyZWVfaG9zdDsKKwkJZ290byBwcm9iZV9mcmVlX2dwaW87CiAJfQogCiAJaG9zdC0+bWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsCi0JCQkJICAgICAgIFJFU1NJWkUoaG9zdC0+bWVtKSwgcGRldi0+bmFtZSk7CisJCQkJICAgICAgIHJlc291cmNlX3NpemUoaG9zdC0+bWVtKSwgcGRldi0+bmFtZSk7CiAKIAlpZiAoIWhvc3QtPm1lbSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBpbyBtZW1vcnkgcmVnaW9uLlxuIik7CiAJCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZnJlZV9ob3N0OworCQlnb3RvIHByb2JlX2ZyZWVfZ3BpbzsKIAl9CiAKLQlob3N0LT5iYXNlID0gaW9yZW1hcChob3N0LT5tZW0tPnN0YXJ0LCBSRVNTSVpFKGhvc3QtPm1lbSkpOworCWhvc3QtPmJhc2UgPSBpb3JlbWFwKGhvc3QtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaG9zdC0+bWVtKSk7CiAJaWYgKCFob3N0LT5iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgaW8gbWVtb3J5IHJlZ2lvbi5cbiIpOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTMzMSwzMSArMTY0NSw2MCBAQAogCSAqIGVuc3VyZSB3ZSBkb24ndCBsb2NrIHRoZSBzeXN0ZW0gd2l0aCB1bi1zZXJ2aWNlYWJsZSByZXF1ZXN0cy4gKi8KIAogCWRpc2FibGVfaXJxKGhvc3QtPmlycSk7CisJaG9zdC0+aXJxX3N0YXRlID0gZmFsc2U7CiAKLQlob3N0LT5pcnFfY2QgPSBzM2MyNDEwX2dwaW9fZ2V0aXJxKGhvc3QtPnBkYXRhLT5ncGlvX2RldGVjdCk7Ci0KLQlpZiAoaG9zdC0+aXJxX2NkID49IDApIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycV9jZCwgczNjbWNpX2lycV9jZCwKLQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkJRFJJVkVSX05BTUUsIGhvc3QpKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgY2FyZCBkZXRlY3QgaXJxLlxuIik7Ci0JCQlyZXQgPSAtRU5PRU5UOworCWlmICghaG9zdC0+cGRhdGEtPm5vX2RldGVjdCkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoaG9zdC0+cGRhdGEtPmdwaW9fZGV0ZWN0LCAiczNjbWNpIGRldGVjdCIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGRldGVjdCBncGlvXG4iKTsKIAkJCWdvdG8gcHJvYmVfZnJlZV9pcnE7CiAJCX0KLQl9IGVsc2UgewotCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiaG9zdCBkZXRlY3QgaGFzIG5vIGlycSBhdmFpbGFibGVcbiIpOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKGhvc3QtPnBkYXRhLT5ncGlvX2RldGVjdCwKLQkJCQkgICAgUzNDMjQxMF9HUElPX0lOUFVUKTsKKworCQlob3N0LT5pcnFfY2QgPSBzM2MyNDEwX2dwaW9fZ2V0aXJxKGhvc3QtPnBkYXRhLT5ncGlvX2RldGVjdCk7CisKKwkJaWYgKGhvc3QtPmlycV9jZCA+PSAwKSB7CisJCQlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxX2NkLCBzM2NtY2lfaXJxX2NkLAorCQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwKKwkJCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkJCURSSVZFUl9OQU1FLCBob3N0KSkgeworCQkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkJImNhbid0IGdldCBjYXJkIGRldGVjdCBpcnEuXG4iKTsKKwkJCQlyZXQgPSAtRU5PRU5UOworCQkJCWdvdG8gcHJvYmVfZnJlZV9ncGlvX2NkOworCQkJfQorCQl9IGVsc2UgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkgImhvc3QgZGV0ZWN0IGhhcyBubyBpcnEgYXZhaWxhYmxlXG4iKTsKKwkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGhvc3QtPnBkYXRhLT5ncGlvX2RldGVjdCk7CisJCX0KKwl9IGVsc2UKKwkJaG9zdC0+aXJxX2NkID0gLTE7CisKKwlpZiAoIWhvc3QtPnBkYXRhLT5ub193cHJvdGVjdCkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoaG9zdC0+cGRhdGEtPmdwaW9fd3Byb3RlY3QsICJzM2NtY2kgd3AiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCB3cml0ZXByb3RlY3RcbiIpOworCQkJZ290byBwcm9iZV9mcmVlX2lycV9jZDsKKwkJfQorCisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0KTsKIAl9CiAKLQlpZiAoaG9zdC0+cGRhdGEtPmdwaW9fd3Byb3RlY3QpCi0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oaG9zdC0+cGRhdGEtPmdwaW9fd3Byb3RlY3QsCi0JCQkJICAgIFMzQzI0MTBfR1BJT19JTlBVVCk7CisJLyogZGVwZW5kaW5nIG9uIHRoZSBkbWEgc3RhdGUsIGdldCBhIGRtYSBjaGFubmVsIHRvIHVzZS4gKi8KIAotCWlmIChzM2MyNDEwX2RtYV9yZXF1ZXN0KFMzQ01DSV9ETUEsICZzM2NtY2lfZG1hX2NsaWVudCwgTlVMTCkgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgRE1BIGNoYW5uZWwuXG4iKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIHByb2JlX2ZyZWVfaXJxX2NkOworCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpIHsKKwkJaG9zdC0+ZG1hID0gczNjMjQxMF9kbWFfcmVxdWVzdChETUFDSF9TREksICZzM2NtY2lfZG1hX2NsaWVudCwKKwkJCQkJCWhvc3QpOworCQlpZiAoaG9zdC0+ZG1hIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBETUEgY2hhbm5lbC5cbiIpOworCQkJaWYgKCFzM2NtY2lfaG9zdF9jYW5waW8oKSkgeworCQkJCXJldCA9IC1FQlVTWTsKKwkJCQlnb3RvIHByb2JlX2ZyZWVfZ3Bpb193cDsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZhbGxpbmcgYmFjayB0byBQSU8uXG4iKTsKKwkJCQlob3N0LT5kb2RtYSA9IDA7CisJCQl9CisJCX0KIAl9CiAKIAlob3N0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJzZGkiKTsKQEAgLTEzNjMsNyArMTcwNiw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBmaW5kIGNsb2NrIHNvdXJjZS5cbiIpOwogCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmNsayk7CiAJCWhvc3QtPmNsayA9IE5VTEw7Ci0JCWdvdG8gcHJvYmVfZnJlZV9ob3N0OworCQlnb3RvIHByb2JlX2ZyZWVfZG1hOwogCX0KIAogCXJldCA9IGNsa19lbmFibGUoaG9zdC0+Y2xrKTsKQEAgLTEzNzYsNyArMTcxOSwxMSBAQAogCiAJbW1jLT5vcHMgCT0gJnMzY21jaV9vcHM7CiAJbW1jLT5vY3JfYXZhaWwJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsKKyNpZmRlZiBDT05GSUdfTU1DX1MzQ19IV19TRElPX0lSUQorCW1tYy0+Y2Fwcwk9IE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfU0RJT19JUlE7CisjZWxzZQogCW1tYy0+Y2Fwcwk9IE1NQ19DQVBfNF9CSVRfREFUQTsKKyNlbmRpZgogCW1tYy0+Zl9taW4gCT0gaG9zdC0+Y2xrX3JhdGUgLyAoaG9zdC0+Y2xrX2RpdiAqIDI1Nik7CiAJbW1jLT5mX21heCAJPSBob3N0LT5jbGtfcmF0ZSAvIGhvc3QtPmNsa19kaXY7CiAKQEAgLTE0MDgsOCArMTc1NSwxMiBAQAogCQlnb3RvIGZyZWVfY3B1ZnJlcTsKIAl9CiAKKwlzM2NtY2lfZGVidWdmc19hdHRhY2goaG9zdCk7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtbWMpOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJpbml0aWFsaXNhdGlvbiBkb25lLlxuIik7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIC0gdXNpbmcgJXMsICVzIFNESU8gSVJRXG4iLCBtbWNfaG9zdG5hbWUobW1jKSwKKwkJIHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSA/ICJkbWEiIDogInBpbyIsCisJCSBtbWMtPmNhcHMgJiBNTUNfQ0FQX1NESU9fSVJRID8gImh3IiA6ICJzdyIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTE0MjIsNiArMTc3MywxOCBAQAogIGNsa19mcmVlOgogCWNsa19wdXQoaG9zdC0+Y2xrKTsKIAorIHByb2JlX2ZyZWVfZG1hOgorCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpCisJCXMzYzI0MTBfZG1hX2ZyZWUoaG9zdC0+ZG1hLCAmczNjbWNpX2RtYV9jbGllbnQpOworCisgcHJvYmVfZnJlZV9ncGlvX3dwOgorCWlmICghaG9zdC0+cGRhdGEtPm5vX3dwcm90ZWN0KQorCQlncGlvX2ZyZWUoaG9zdC0+cGRhdGEtPmdwaW9fd3Byb3RlY3QpOworCisgcHJvYmVfZnJlZV9ncGlvX2NkOgorCWlmICghaG9zdC0+cGRhdGEtPm5vX2RldGVjdCkKKwkJZ3Bpb19mcmVlKGhvc3QtPnBkYXRhLT5ncGlvX2RldGVjdCk7CisKICBwcm9iZV9mcmVlX2lycV9jZDoKIAlpZiAoaG9zdC0+aXJxX2NkID49IDApCiAJCWZyZWVfaXJxKGhvc3QtPmlycV9jZCwgaG9zdCk7CkBAIC0xNDMzLDEwICsxNzk2LDE1IEBACiAJaW91bm1hcChob3N0LT5iYXNlKTsKIAogIHByb2JlX2ZyZWVfbWVtX3JlZ2lvbjoKLQlyZWxlYXNlX21lbV9yZWdpb24oaG9zdC0+bWVtLT5zdGFydCwgUkVTU0laRShob3N0LT5tZW0pKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaG9zdC0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShob3N0LT5tZW0pKTsKKworIHByb2JlX2ZyZWVfZ3BpbzoKKwlmb3IgKGkgPSBTM0MyNDEwX0dQRSg1KTsgaSA8PSBTM0MyNDEwX0dQRSgxMCk7IGkrKykKKwkJZ3Bpb19mcmVlKGkpOwogCiAgcHJvYmVfZnJlZV9ob3N0OgogCW1tY19mcmVlX2hvc3QobW1jKTsKKwogIHByb2JlX291dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ0OSw2ICsxODE3LDcgQEAKIAlpZiAoaG9zdC0+aXJxX2NkID49IDApCiAJCWZyZWVfaXJxKGhvc3QtPmlycV9jZCwgaG9zdCk7CiAKKwlzM2NtY2lfZGVidWdmc19yZW1vdmUoaG9zdCk7CiAJczNjbWNpX2NwdWZyZXFfZGVyZWdpc3Rlcihob3N0KTsKIAltbWNfcmVtb3ZlX2hvc3QobW1jKTsKIAljbGtfZGlzYWJsZShob3N0LT5jbGspOwpAQCAtMTQ1OCwxMDQgKzE4MjcsMTAyIEBACiB7CiAJc3RydWN0IG1tY19ob3N0CQkqbW1jICA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzM2NtY2lfaG9zdAkqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhICpwZCA9IGhvc3QtPnBkYXRhOworCWludCBpOwogCiAJczNjbWNpX3NodXRkb3duKHBkZXYpOwogCiAJY2xrX3B1dChob3N0LT5jbGspOwogCiAJdGFza2xldF9kaXNhYmxlKCZob3N0LT5waW9fdGFza2xldCk7Ci0JczNjMjQxMF9kbWFfZnJlZShTM0NNQ0lfRE1BLCAmczNjbWNpX2RtYV9jbGllbnQpOworCisJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSkKKwkJczNjMjQxMF9kbWFfZnJlZShob3N0LT5kbWEsICZzM2NtY2lfZG1hX2NsaWVudCk7CiAKIAlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwogCisJaWYgKCFwZC0+bm9fd3Byb3RlY3QpCisJCWdwaW9fZnJlZShwZC0+Z3Bpb193cHJvdGVjdCk7CisKKwlpZiAoIXBkLT5ub19kZXRlY3QpCisJCWdwaW9fZnJlZShwZC0+Z3Bpb19kZXRlY3QpOworCisJZm9yIChpID0gUzNDMjQxMF9HUEUoNSk7IGkgPD0gUzNDMjQxMF9HUEUoMTApOyBpKyspCisJCWdwaW9fZnJlZShpKTsKKworCiAJaW91bm1hcChob3N0LT5iYXNlKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oaG9zdC0+bWVtLT5zdGFydCwgUkVTU0laRShob3N0LT5tZW0pKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaG9zdC0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShob3N0LT5tZW0pKTsKIAogCW1tY19mcmVlX2hvc3QobW1jKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgczNjbWNpXzI0MTBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXJldHVybiBzM2NtY2lfcHJvYmUoZGV2LCAwKTsKLX0KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHMzY21jaV9kcml2ZXJfaWRzW10gPSB7CisJeworCQkubmFtZQk9ICJzM2MyNDEwLXNkaSIsCisJCS5kcml2ZXJfZGF0YQk9IDAsCisJfSwgeworCQkubmFtZQk9ICJzM2MyNDEyLXNkaSIsCisJCS5kcml2ZXJfZGF0YQk9IDEsCisJfSwgeworCQkubmFtZQk9ICJzM2MyNDQwLXNkaSIsCisJCS5kcml2ZXJfZGF0YQk9IDEsCisJfSwKKwl7IH0KK307CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHMzY21jaV8yNDEyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gczNjbWNpX3Byb2JlKGRldiwgMSk7Ci19CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBzM2NtY2lfZHJpdmVyX2lkcyk7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHMzY21jaV8yNDQwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gczNjbWNpX3Byb2JlKGRldiwgMSk7Ci19CiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBzM2NtY2lfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgczNjbWNpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwlzdHJ1Y3QgcG1fbWVzc2FnZSBldmVudCA9IHsgUE1fRVZFTlRfU1VTUEVORCB9OwogCi0JcmV0dXJuICBtbWNfc3VzcGVuZF9ob3N0KG1tYywgc3RhdGUpOworCXJldHVybiBtbWNfc3VzcGVuZF9ob3N0KG1tYywgZXZlbnQpOwogfQogCi1zdGF0aWMgaW50IHMzY21jaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBzM2NtY2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CiAKIAlyZXR1cm4gbW1jX3Jlc3VtZV9ob3N0KG1tYyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzM2NtY2lfcG0gPSB7CisJLnN1c3BlbmQJPSBzM2NtY2lfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzY21jaV9yZXN1bWUsCit9OworCisjZGVmaW5lIHMzY21jaV9wbV9vcHMgJnMzY21jaV9wbQogI2Vsc2UgLyogQ09ORklHX1BNICovCi0jZGVmaW5lIHMzY21jaV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgczNjbWNpX3Jlc3VtZSBOVUxMCisjZGVmaW5lIHMzY21jaV9wbV9vcHMgTlVMTAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY21jaV8yNDEwX2RyaXZlciA9IHsKLQkuZHJpdmVyLm5hbWUJPSAiczNjMjQxMC1zZGkiLAotCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCT0gczNjbWNpXzI0MTBfcHJvYmUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NtY2lfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInMzYy1zZGkiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gczNjbWNpX3BtX29wcywKKwl9LAorCS5pZF90YWJsZQk9IHMzY21jaV9kcml2ZXJfaWRzLAorCS5wcm9iZQkJPSBzM2NtY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NtY2lfcmVtb3ZlKSwKIAkuc2h1dGRvd24JPSBzM2NtY2lfc2h1dGRvd24sCi0JLnN1c3BlbmQJPSBzM2NtY2lfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzY21jaV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NtY2lfMjQxMl9kcml2ZXIgPSB7Ci0JLmRyaXZlci5uYW1lCT0gInMzYzI0MTItc2RpIiwKLQkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQk9IHMzY21jaV8yNDEyX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoczNjbWNpX3JlbW92ZSksCi0JLnNodXRkb3duCT0gczNjbWNpX3NodXRkb3duLAotCS5zdXNwZW5kCT0gczNjbWNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2NtY2lfcmVzdW1lLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjbWNpXzI0NDBfZHJpdmVyID0gewotCS5kcml2ZXIubmFtZQk9ICJzM2MyNDQwLXNkaSIsCi0JLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJPSBzM2NtY2lfMjQ0MF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHMzY21jaV9yZW1vdmUpLAotCS5zaHV0ZG93bgk9IHMzY21jaV9zaHV0ZG93biwKLQkuc3VzcGVuZAk9IHMzY21jaV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjbWNpX3Jlc3VtZSwKLX07Ci0KLQogc3RhdGljIGludCBfX2luaXQgczNjbWNpX2luaXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY21jaV8yNDEwX2RyaXZlcik7Ci0JcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NtY2lfMjQxMl9kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjbWNpXzI0NDBfZHJpdmVyKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NtY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHMzY21jaV9leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzY21jaV8yNDEwX2RyaXZlcik7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzY21jaV8yNDEyX2RyaXZlcik7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzY21jaV8yNDQwX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzY21jaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzM2NtY2lfaW5pdCk7CkBAIC0xNTY0LDYgKzE5MzEsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIFMzQyBNTUMvU0QgQ2FyZCBJbnRlcmZhY2UgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiBNT0RVTEVfQVVUSE9SKCJUaG9tYXMgS2xlZmZlbCA8dGtAbWFpbnRlY2guZGU+LCBCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+Iik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYzI0MTAtc2RpIik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYzI0MTItc2RpIik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYzI0NDAtc2RpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaAppbmRleCBjYTFiYTNkLi5jNzZiNTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmgKQEAgLTgsOSArOCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0vKiBGSVhNRTogRE1BIFJlc291cmNlIG1hbmFnZW1lbnQgPyEgKi8KLSNkZWZpbmUgUzNDTUNJX0RNQSAwCi0KIGVudW0gczNjbWNpX3dhaXRmb3IgewogCUNPTVBMRVRJT05fTk9ORSwKIAlDT01QTEVUSU9OX0ZJTkFMSVpFLApAQCAtNDIsNiArMzksMTEgQEAKIAlpbnQJCQlkb2RtYTsKIAlpbnQJCQlkbWF0b2dvOwogCisJYm9vbAkJCWlycV9kaXNhYmxlZDsKKwlib29sCQkJaXJxX2VuYWJsZWQ7CisJYm9vbAkJCWlycV9zdGF0ZTsKKwlpbnQJCQlzZGlvX2lycWVuOworCiAJc3RydWN0IG1tY19yZXF1ZXN0CSptcnE7CiAJaW50CQkJY21kX2lzX3N0b3A7CiAKQEAgLTY4LDYgKzcwLDEyIEBACiAJdW5zaWduZWQgaW50CQljY250LCBkY250OwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlwaW9fdGFza2xldDsKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z19yb290OworCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z19zdGF0ZTsKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdfcmVnczsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCWZyZXFfdHJhbnNpdGlvbjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKaW5kZXggMzc5YzMxNi4uNGMxOTI2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3NzdDI1bC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYwppbmRleCBjMmJhZjMzLi4wYTExNzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL3NzdDI1bC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvc3N0MjVsLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCA4NDFlMDg1Li4xNGJlMDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC00ODYsNiArNDg2LDcgQEAKIAogY29uZmlnIE1URF9HUElPX0FERFIKIAl0cmlzdGF0ZSAiR1BJTy1hc3Npc3RlZCBGbGFzaCBDaGlwIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBHRU5FUklDX0dQSU8gfHwgR1BJT0xJQgogCWRlcGVuZHMgb24gTVREX0NPTVBMRVhfTUFQUElOR1MKIAlzZWxlY3QgTVREX1BBUlRJVElPTlMKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQppbmRleCAxZDVjZjg2Li5hZTJmNmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKQEAgLTU4LDQgKzU4LDYgQEAKIG9iai0kKENPTkZJR19NVERfT01BUF9OT1IpCSs9IG9tYXBfbm9yLm8KIG9iai0kKENPTkZJR19NVERfSU5URUxfVlJfTk9SKQkrPSBpbnRlbF92cl9ub3Iubwogb2JqLSQoQ09ORklHX01URF9CRklOX0FTWU5DKQkrPSBiZmluLWFzeW5jLWZsYXNoLm8KK29iai0kKENPTkZJR19NVERfUkJUWDQ5MzkpCSs9IHJidHg0OTM5LWZsYXNoLm8KK29iai0kKENPTkZJR19NVERfVk1VKQkJKz0gdm11LWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfR1BJT19BRERSKQkrPSBncGlvLWFkZHItZmxhc2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvZ3Bpby1hZGRyLWZsYXNoLmMKaW5kZXggNDRlZjlhNC4uMWFkNWNhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2dwaW8tYWRkci1mbGFzaC5jCkBAIC0xMyw3ICsxMyw5IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CkBAIC0yMyw5ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KICNkZWZpbmUgcHJfZGV2aW5pdChmbXQsIGFyZ3MuLi4pICh7IHN0YXRpYyBjb25zdCBfX2RldmluaXRjb25zdCBjaGFyIF9fZm10W10gPSBmbXQ7IHByaW50ayhfX2ZtdCwgIyMgYXJncyk7IH0pCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgImdwaW8tYWRkci1mbGFzaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCmluZGV4IGZkYjk3ZjMuLmQ3YTQ3NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYwpAQCAtMjA5LDggKzIwOSw4IEBACiAJfQogCXN1YmRldi0+bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU0ExMTAwIGZsYXNoOiBDRkkgZGV2aWNlIGF0IDB4JTA4bHgsICVkTWlCLCAiCi0JCSIlZC1iaXRcbiIsIHBoeXMsIHN1YmRldi0+bXRkLT5zaXplID4+IDIwLAorCXByaW50ayhLRVJOX0lORk8gIlNBMTEwMCBmbGFzaDogQ0ZJIGRldmljZSBhdCAweCUwOGx4LCAldU1pQiwgJWQtYml0XG4iLAorCQlwaHlzLCAodW5zaWduZWQpKHN1YmRldi0+bXRkLT5zaXplID4+IDIwKSwKIAkJc3ViZGV2LT5tYXAuYmFua3dpZHRoICogOCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMgYi9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCmluZGV4IDBhY2JmNGYuLjhjYTE3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYwpAQCAtMzIsMTQgKzMyLDYgQEAKIAlzcGlubG9ja190IHF1ZXVlX2xvY2s7CiB9OwogCi1zdGF0aWMgaW50IGJsa3RyYW5zX2Rpc2NhcmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKLQkJCQkgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKLXsKLQlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfTElOVVhfQkxPQ0s7Ci0JcmVxLT5jbWRbMF0gPSBSRVFfTEJfT1BfRElTQ0FSRDsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkb19ibGt0cmFuc19yZXF1ZXN0KHN0cnVjdCBtdGRfYmxrdHJhbnNfb3BzICp0ciwKIAkJCSAgICAgICBzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2LAogCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpCkBAIC01MiwxMCArNDQsNiBAQAogCiAJYnVmID0gcmVxLT5idWZmZXI7CiAKLQlpZiAocmVxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9MSU5VWF9CTE9DSyAmJgotCSAgICByZXEtPmNtZFswXSA9PSBSRVFfTEJfT1BfRElTQ0FSRCkKLQkJcmV0dXJuIHRyLT5kaXNjYXJkKGRldiwgYmxvY2ssIG5zZWN0KTsKLQogCWlmICghYmxrX2ZzX3JlcXVlc3QocmVxKSkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTYzLDYgKzUxLDkgQEAKIAkgICAgZ2V0X2NhcGFjaXR5KHJlcS0+cnFfZGlzaykpCiAJCXJldHVybiAtRUlPOwogCisJaWYgKGJsa19kaXNjYXJkX3JxKHJlcSkpCisJCXJldHVybiB0ci0+ZGlzY2FyZChkZXYsIGJsb2NrLCBuc2VjdCk7CisKIAlzd2l0Y2gocnFfZGF0YV9kaXIocmVxKSkgewogCWNhc2UgUkVBRDoKIAkJZm9yICg7IG5zZWN0ID4gMDsgbnNlY3QtLSwgYmxvY2srKywgYnVmICs9IHRyLT5ibGtzaXplKQpAQCAtMzgwLDggKzM3MSw4IEBACiAJdHItPmJsa2NvcmVfcHJpdi0+cnEtPnF1ZXVlZGF0YSA9IHRyOwogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUodHItPmJsa2NvcmVfcHJpdi0+cnEsIHRyLT5ibGtzaXplKTsKIAlpZiAodHItPmRpc2NhcmQpCi0JCWJsa19xdWV1ZV9zZXRfZGlzY2FyZCh0ci0+YmxrY29yZV9wcml2LT5ycSwKLQkJCQkgICAgICBibGt0cmFuc19kaXNjYXJkX3JlcXVlc3QpOworCQlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX0RJU0NBUkQsCisJCQkJCXRyLT5ibGtjb3JlX3ByaXYtPnJxKTsKIAogCXRyLT5ibGtzaGlmdCA9IGZmcyh0ci0+Ymxrc2l6ZSkgLSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCAyMjExMzg2Li4yOTU3Y2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTc2MSw2ICs3NjEsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKICAqIE5vdCBmb3Igc3luZHJvbWUgY2FsY3VsYXRpbmcgZWNjIGNvbnRyb2xsZXJzLCB3aGljaCB1c2UgYSBzcGVjaWFsIG9vYiBsYXlvdXQKICAqLwpAQCAtNzc3LDYgKzc3OCw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogV2UgbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dCBhbmQgaGFuZGxpbmcgZXZlbiB3aGVuIE9PQiBpc24ndCB1c2VkLgogICovCkBAIC04MTgsNiArODIwLDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqLwogc3RhdGljIGludCBuYW5kX3JlYWRfcGFnZV9zd2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKIAkJCQl1aW50OF90ICpidWYsIGludCBwYWdlKQpAQCAtOTM5LDYgKzk0Miw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogTm90IGZvciBzeW5kcm9tZSBjYWxjdWxhdGluZyBlY2MgY29udHJvbGxlcnMgd2hpY2ggbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dAogICovCkBAIC05ODMsNiArOTg3LDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBIYXJkd2FyZSBFQ0MgZm9yIGxhcmdlIHBhZ2UgY2hpcHMsIHJlcXVpcmUgT09CIHRvIGJlIHJlYWQgZmlyc3QuCiAgKiBGb3IgdGhpcyBFQ0MgbW9kZSwgdGhlIHdyaXRlX3BhZ2UgbWV0aG9kIGlzIHJlLXVzZWQgZnJvbSBFQ0NfSFcuCkBAIC0xMDMxLDYgKzEwMzYsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKICAqIFRoZSBodyBnZW5lcmF0b3IgY2FsY3VsYXRlcyB0aGUgZXJyb3Igc3luZHJvbWUgYXV0b21hdGljYWxseS4gVGhlcmVmb3IKICAqIHdlIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQgYW5kIGhhbmRsaW5nLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMgYi9kcml2ZXJzL210ZC91YmkvYnVpbGQuYwppbmRleCBlMWY3ZDBhLi4xNGNlYzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYworKysgYi9kcml2ZXJzL210ZC91YmkvYnVpbGQuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSAidWJpLmgiCiAKIC8qIE1heGltdW0gbGVuZ3RoIG9mIHRoZSAnbXRkPScgcGFyYW1ldGVyICovCkBAIC0xMjU3LDcgKzEyNTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVzdWx0OwogCiAJcmVzdWx0ID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmZW5kcCwgMCk7Ci0JaWYgKHN0ciA9PSBlbmRwIHx8IHJlc3VsdCA8IDApIHsKKwlpZiAoc3RyID09IGVuZHAgfHwgcmVzdWx0ID49IElOVF9NQVgpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVQkkgZXJyb3I6IGluY29ycmVjdCBieXRlcyBjb3VudDogXCIlc1wiXG4iLAogCQkgICAgICAgc3RyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwppbmRleCBlNzE2MWFkLi45MGFmNjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKQEAgLTc5NCwxNiArNzk0LDE1IEBACiAJCSAqIG51bWJlci4KIAkJICovCiAJCWltYWdlX3NlcSA9IGJlMzJfdG9fY3B1KGVjaC0+aW1hZ2Vfc2VxKTsKLQkJaWYgKCFzaS0+aW1hZ2Vfc2VxX3NldCkgeworCQlpZiAoIXViaS0+aW1hZ2Vfc2VxICYmIGltYWdlX3NlcSkKIAkJCXViaS0+aW1hZ2Vfc2VxID0gaW1hZ2Vfc2VxOwotCQkJc2ktPmltYWdlX3NlcV9zZXQgPSAxOwotCQl9IGVsc2UgaWYgKHViaS0+aW1hZ2Vfc2VxICYmIHViaS0+aW1hZ2Vfc2VxICE9IGltYWdlX3NlcSkgeworCQlpZiAodWJpLT5pbWFnZV9zZXEgJiYgaW1hZ2Vfc2VxICYmCisJCSAgICB1YmktPmltYWdlX3NlcSAhPSBpbWFnZV9zZXEpIHsKIAkJCXViaV9lcnIoImJhZCBpbWFnZSBzZXF1ZW5jZSBudW1iZXIgJWQgaW4gUEVCICVkLCAiCiAJCQkJImV4cGVjdGVkICVkIiwgaW1hZ2Vfc2VxLCBwbnVtLCB1YmktPmltYWdlX3NlcSk7CiAJCQl1YmlfZGJnX2R1bXBfZWNfaGRyKGVjaCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCiAJfQogCiAJLyogT0ssIHdlJ3ZlIGRvbmUgd2l0aCB0aGUgRUMgaGVhZGVyLCBsZXQncyBsb29rIGF0IHRoZSBWSUQgaGVhZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uaAppbmRleCBiYWIzMTY5Li5mZjE3OWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKQEAgLTEwMyw3ICsxMDMsNiBAQAogICogQGVjX3N1bTogYSB0ZW1wb3JhcnkgdmFyaWFibGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIEBtZWFuX2VjCiAgKiBAZWNfY291bnQ6IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyBAbWVhbl9lYwogICogQGNvcnJfY291bnQ6IGNvdW50IG9mIGNvcnJ1cHRlZCBQRUJzCi0gKiBAaW1hZ2Vfc2VxX3NldDogaW5kaWNhdGVzIEB1YmktPmltYWdlX3NlcSBpcyBrbm93bgogICoKICAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHJlc3VsdCBvZiBzY2FubmluZyBhbmQgbWF5IGJlIHVzZWQgYnkgb3RoZXIKICAqIFVCSSBzdWItc3lzdGVtcyB0byBidWlsZCBmaW5hbCBVQkkgZGF0YSBzdHJ1Y3R1cmVzLCBmdXJ0aGVyIGVycm9yLXJlY292ZXJ5CkBAIC0xMjcsNyArMTI2LDYgQEAKIAl1aW50NjRfdCBlY19zdW07CiAJaW50IGVjX2NvdW50OwogCWludCBjb3JyX2NvdW50OwotCWludCBpbWFnZV9zZXFfc2V0OwogfTsKIAogc3RydWN0IHViaV9kZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCBlMTljYTRiLi5iMmY3MWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTk3NSw3ICs5NzUsNyBAQAogCiBjb25maWcgRVRIT0MKIAl0cmlzdGF0ZSAiT3BlbkNvcmVzIDEwLzEwMCBNYnBzIEV0aGVybmV0IE1BQyBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEhBU19JT01FTQorCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEhBU19JT01FTSAmJiBIQVNfRE1BCiAJc2VsZWN0IE1JSQogCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgQ1JDMzIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCBjZTZmMWFjLi4zZjRiNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC0xMDg4LDcgKzEwODgsMTQgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KSkgIT0gMCkgeworCWRldi0+YmFzZV9hZGRyID0gYmFzZTsKKwlkZXYtPmlycSA9IGlycTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXUxMDAwX25ldGRldl9vcHM7CisJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOworCisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKGVyciAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBlcnJvciAlZFxuIiwKIAkJCQlEUlZfTkFNRSwgZXJyKTsKIAkJZnJlZV9uZXRkZXYoZGV2KTsKQEAgLTEyMDksMTIgKzEyMTYsNiBAQAogCQlhdXAtPnR4X2RiX2ludXNlW2ldID0gcERCOwogCX0KIAotCWRldi0+YmFzZV9hZGRyID0gYmFzZTsKLQlkZXYtPmlycSA9IGlycTsKLQlkZXYtPm5ldGRldl9vcHMgPSAmYXUxMDAwX25ldGRldl9vcHM7Ci0JU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOwotCiAJLyoKIAkgKiBUaGUgYm9vdCBjb2RlIHVzZXMgdGhlIGV0aGVybmV0IGNvbnRyb2xsZXIsIHNvIHJlc2V0IGl0IHRvIHN0YXJ0CiAJICogZnJlc2guICBhdTEwMDBfaW5pdCgpIGV4cGVjdHMgdGhhdCB0aGUgZGV2aWNlIGlzIGluIHJlc2V0IHN0YXRlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwppbmRleCBmZjQ0OWRlLi44NzYyYTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMgYi9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYwppbmRleCAxNWMwMTk1Li5hMjRiZTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYworKysgYi9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYwpAQCAtNzY4LDEwICs3NjgsMjQgQEAKIAogCWUxMDBfc2V0X21kaW9fcmVnKGRldiwgbnAtPm1paV9pZi5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIGRhdGEpOwogCi0JLyogUmVuZWdvdGlhdGUgd2l0aCBsaW5rIHBhcnRuZXIgKi8KKwlkYXRhID0gZTEwMF9nZXRfbWRpb19yZWcoZGV2LCBucC0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNQ1IpOwogCWlmIChhdXRvbmVnX25vcm1hbCkgewotCSAgZGF0YSA9IGUxMDBfZ2V0X21kaW9fcmVnKGRldiwgbnAtPm1paV9pZi5waHlfaWQsIE1JSV9CTUNSKTsKLQlkYXRhIHw9IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVDsKKwkJLyogUmVuZWdvdGlhdGUgd2l0aCBsaW5rIHBhcnRuZXIgKi8KKwkJZGF0YSB8PSBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQ7CisJfSBlbHNlIHsKKwkJLyogRG9uJ3QgbmVnb3RpYXRlIHNwZWVkIG9yIGR1cGxleCAqLworCQlkYXRhICY9IH4oQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKKworCQkvKiBTZXQgc3BlZWQgYW5kIGR1cGxleCBzdGF0aWMgKi8KKwkJaWYgKGN1cnJlbnRfc3BlZWRfc2VsZWN0aW9uID09IDEwKQorCQkJZGF0YSAmPSB+Qk1DUl9TUEVFRDEwMDsKKwkJZWxzZQorCQkJZGF0YSB8PSBCTUNSX1NQRUVEMTAwOworCisJCWlmIChjdXJyZW50X2R1cGxleCAhPSBmdWxsKQorCQkJZGF0YSAmPSB+Qk1DUl9GVUxMRFBMWDsKKwkJZWxzZQorCQkJZGF0YSB8PSBCTUNSX0ZVTExEUExYOwogCX0KIAllMTAwX3NldF9tZGlvX3JlZyhkZXYsIG5wLT5taWlfaWYucGh5X2lkLCBNSUlfQk1DUiwgZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCmluZGV4IGRiNjM4MDMuLmUzNDc4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCkBAIC0xNjQsMTYgKzE2NCwxNCBAQAogIyBkZWZpbmUgRU1BQ19NQlBfTUNBU1RDSEFOKGNoKQkJKChjaCkgJiAweDcpCiAKIC8qIEVNQUMgbWFjX2NvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX1RYUFRZUEUJCSgweDIwMCkKLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX1RYUEFDRUVOCSgweDQwKQotI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfTUlJRU4JCSgweDIwKQotI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfR0lHQUJJVEVOCSgweDgwKQotI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfR0lHQUJJVEVOX1NISUZUICg3KQotI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfRlVMTERVUExFWEVOCSgweDEpCisjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9UWFBUWVBFCQlCSVQoOSkKKyNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX1RYUEFDRUVOCUJJVCg2KQorI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfR01JSUVOCQlCSVQoNSkKKyNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0dJR0FCSVRFTglCSVQoNykKKyNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0ZVTExEVVBMRVhFTglCSVQoMCkKICNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX1JNSUlTUEVFRF9NQVNLCUJJVCgxNSkKIAogLyogR0lHQUJJVCBNT0RFIHJlbGF0ZWQgYml0cyAqLwotI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dNSUlFTglCSVQoNSkKICNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HSUcJQklUKDcpCiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR0lHRk9SQ0UJQklUKDE3KQogCkBAIC0xOTIsMTAgKzE5MCwxMCBAQAogI2RlZmluZSBFTUFDX1JYX0JVRkZFUl9PRkZTRVRfTUFTSwkoMHhGRkZGKQogCiAvKiBNQUNfSU5fVkVDVE9SICgweDE4MCkgcmVnaXN0ZXIgYml0IGZpZWxkcyAqLwotI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX0hPU1RfSU5UCSAgICAgICgweDIwMDAwKQotI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1NUQVRQRU5EX0lOVAkgICAgICAoMHgxMDAwMCkKLSNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9SWF9JTlRfVkVDCSAgICAgICgweDAxMDApCi0jZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfVFhfSU5UX1ZFQwkgICAgICAoMHgwMSkKKyNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9IT1NUX0lOVAlCSVQoMTcpCisjZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfU1RBVFBFTkRfSU5UCUJJVCgxNikKKyNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9SWF9JTlRfVkVDCUJJVCg4KQorI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1RYX0lOVF9WRUMJQklUKDApCiAKIC8qKiBOT1RFOjogRm9yIERNNjQ2eCB0aGUgSU5fVkVDVE9SIGhhcyBjaGFuZ2VkICovCiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ19JTl9WRUNUT1JfUlhfSU5UX1ZFQwlCSVQoRU1BQ19ERUZfUlhfQ0gpCkBAIC0yMDMsNyArMjAxLDYgQEAKICNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDX0lOX1ZFQ1RPUl9IT1NUX0lOVAlCSVQoMjYpCiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ19JTl9WRUNUT1JfU1RBVFBFTkRfSU5UCUJJVCgyNykKIAotCiAvKiBDUFBJIGJpdCBwb3NpdGlvbnMgKi8KICNkZWZpbmUgRU1BQ19DUFBJX1NPUF9CSVQJCUJJVCgzMSkKICNkZWZpbmUgRU1BQ19DUFBJX0VPUF9CSVQJCUJJVCgzMCkKQEAgLTc1MCw4ICs3NDcsNyBAQAogCiAJaWYgKHByaXYtPnNwZWVkID09IFNQRUVEXzEwMDAgJiYgKHByaXYtPnZlcnNpb24gPT0gRU1BQ19WRVJTSU9OXzIpKSB7CiAJCW1hY19jb250cm9sID0gZW1hY19yZWFkKEVNQUNfTUFDQ09OVFJPTCk7Ci0JCW1hY19jb250cm9sIHw9IChFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dNSUlFTiB8Ci0JCQkJRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HSUcgfAorCQltYWNfY29udHJvbCB8PSAoRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HSUcgfAogCQkJCUVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR0lHRk9SQ0UpOwogCX0gZWxzZSB7CiAJCS8qIENsZWFyIHRoZSBHSUcgYml0IGFuZCBHSUdGT1JDRSBiaXQgKi8KQEAgLTIxMDgsNyArMjEwNCw3IEBACiAKIAkvKiBFbmFibGUgTUlJICovCiAJdmFsID0gZW1hY19yZWFkKEVNQUNfTUFDQ09OVFJPTCk7Ci0JdmFsIHw9IChFTUFDX01BQ0NPTlRST0xfTUlJRU4pOworCXZhbCB8PSAoRU1BQ19NQUNDT05UUk9MX0dNSUlFTik7CiAJZW1hY193cml0ZShFTUFDX01BQ0NPTlRST0wsIHZhbCk7CiAKIAkvKiBFbmFibGUgTkFQSSBhbmQgaW50ZXJydXB0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggOTY4NmMxZi4uN2EzYmRhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC0yMzcsNiArMjM3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCBkMTliMDg0Li4zYzI5YTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMC5jCkBAIC0xNTEsNiArMTUxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCmluZGV4IDE4OWRmYTIuLjNlMTg3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCkBAIC0xNDEsNiArMTQxLDggQEAKICNkZWZpbmUgSFZfVE5DUlNfVVBQRVIJCVBIWV9SRUcoNzc4LCAyOSkgLyogVHJhbnNtaXQgd2l0aCBubyBDUlMgKi8KICNkZWZpbmUgSFZfVE5DUlNfTE9XRVIJCVBIWV9SRUcoNzc4LCAzMCkKIAorI2RlZmluZSBFMTAwMF9GQ1JUVl9QQ0ggICAgIDB4MDVGNDAgLyogUENIIEZsb3cgQ29udHJvbCBSZWZyZXNoIFRpbWVyIFZhbHVlICovCisKIC8qIEJNIFBIWSBDb3BwZXIgU3BlY2lmaWMgU3RhdHVzICovCiAjZGVmaW5lIEJNX0NTX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAxNwogI2RlZmluZSBCTV9DU19TVEFUVVNfTElOS19VUCAgICAgICAgICAgICAgMHgwNDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwppbmRleCAxYmY0ZDJhLi5lODI2MzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKQEAgLTMyNywxMCArMzI3LDE4IEBACiAKIAkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKIAotCQlyZXR2YWwgPSAoKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSA/Ci0JCQkgIGh3LT5tYWMub3BzLnNldHVwX2xpbmsoaHcpIDogZTEwMDBlX2ZvcmNlX21hY19mYyhodykpOworCQlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHsKKwkJCXJldHZhbCA9IGh3LT5tYWMub3BzLnNldHVwX2xpbmsoaHcpOworCQkJLyogaW1wbGljaXQgZ290byBvdXQgKi8KKwkJfSBlbHNlIHsKKwkJCXJldHZhbCA9IGUxMDAwZV9mb3JjZV9tYWNfZmMoaHcpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIG91dDsKKwkJCWUxMDAwZV9zZXRfZmNfd2F0ZXJtYXJrcyhodyk7CisJCX0KIAl9CiAKK291dDoKIAljbGVhcl9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCmluZGV4IDUxZGRiMDRhLi5lZmYzZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKQEAgLTExMTgsNyArMTExOCw4IEBACiAJCQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX0xQTFU7CiAJfQogCS8qIFJlc3RhcnQgYXV0by1uZWcgdG8gYWN0aXZhdGUgdGhlIGJpdHMgKi8KLQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX1JFU1RBUlRfQU47CisJaWYgKCFlMTAwMF9jaGVja19yZXNldF9ibG9jayhodykpCisJCW9lbV9yZWcgfD0gSFZfT0VNX0JJVFNfUkVTVEFSVF9BTjsKIAlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZ19sb2NrZWQoaHcsIEhWX09FTV9CSVRTLCBvZW1fcmVnKTsKIAogb3V0OgpAQCAtMzU1OCw2ICszNTU5LDcgQEAKIAkJCQkgIHwgRkxBR19IQVNfQU1UCiAJCQkJICB8IEZMQUdfSEFTX0ZMQVNICiAJCQkJICB8IEZMQUdfSEFTX0pVTUJPX0ZSQU1FUworCQkJCSAgfCBGTEFHX0RJU0FCTEVfRkNfUEFVU0VfVElNRSAvKiBlcnJhdGEgKi8KIAkJCQkgIHwgRkxBR19BUE1FX0lOX1dVQywKIAkucGJhCQkJPSAyNiwKIAkubWF4X2h3X2ZyYW1lX3NpemUJPSA0MDk2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDA2ODdjNmEuLmZhZDhmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTI3NjksMjUgKzI3NjksMzggQEAKIAkvKgogCSAqIGZsb3cgY29udHJvbCBzZXR0aW5ncwogCSAqCi0JICogVGhlIGhpZ2ggd2F0ZXIgbWFyayBtdXN0IGJlIGxvdyBlbm91Z2ggdG8gZml0IHR3byBmdWxsIGZyYW1lCisJICogVGhlIGhpZ2ggd2F0ZXIgbWFyayBtdXN0IGJlIGxvdyBlbm91Z2ggdG8gZml0IG9uZSBmdWxsIGZyYW1lCiAJICogKG9yIHRoZSBzaXplIHVzZWQgZm9yIGVhcmx5IHJlY2VpdmUpIGFib3ZlIGl0IGluIHRoZSBSeCBGSUZPLgogCSAqIFNldCBpdCB0byB0aGUgbG93ZXIgb2Y6CiAJICogLSA5MCUgb2YgdGhlIFJ4IEZJRk8gc2l6ZSwgYW5kCiAJICogLSB0aGUgZnVsbCBSeCBGSUZPIHNpemUgbWludXMgdGhlIGVhcmx5IHJlY2VpdmUgc2l6ZSAoZm9yIHBhcnRzCiAJICogICB3aXRoIEVSVCBzdXBwb3J0IGFzc3VtaW5nIEVSVCBzZXQgdG8gRTEwMDBfRVJUXzIwNDgpLCBvcgotCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIHR3byBmdWxsIGZyYW1lcworCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIG9uZSBmdWxsIGZyYW1lCiAJICovCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0VSVCkgJiYKLQkgICAgKGFkYXB0ZXItPm5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKLQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCQkgICgocGJhIDw8IDEwKSAtIChFMTAwMF9FUlRfMjA0OCA8PCAzKSkpOwotCWVsc2UKLQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCQkgICgocGJhIDw8IDEwKSAtICgyICogYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKSk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHsKKwkJLyoKKwkJICogV29ya2Fyb3VuZCBQQ0ggTE9NIGFkYXB0ZXIgaGFuZ3Mgd2l0aCBjZXJ0YWluIG5ldHdvcmsKKwkJICogbG9hZHMuICBJZiBoYW5ncyBwZXJzaXN0LCB0cnkgZGlzYWJsaW5nIFR4IGZsb3cgY29udHJvbC4KKwkJICovCisJCWlmIChhZGFwdGVyLT5uZXRkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikgeworCQkJZmMtPmhpZ2hfd2F0ZXIgPSAweDM1MDA7CisJCQlmYy0+bG93X3dhdGVyICA9IDB4MTUwMDsKKwkJfSBlbHNlIHsKKwkJCWZjLT5oaWdoX3dhdGVyID0gMHg1MDAwOworCQkJZmMtPmxvd193YXRlciAgPSAweDMwMDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfRVJUKSAmJgorCQkgICAgKGFkYXB0ZXItPm5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKKwkJCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkJCSAgKChwYmEgPDwgMTApIC0gKEUxMDAwX0VSVF8yMDQ4IDw8IDMpKSk7CisJCWVsc2UKKwkJCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkJCSAgKChwYmEgPDwgMTApIC0gYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKTsKIAotCWZjLT5oaWdoX3dhdGVyID0gaHdtICYgRTEwMDBfRkNSVEhfUlRIOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KLQlmYy0+bG93X3dhdGVyID0gKGZjLT5oaWdoX3dhdGVyIC0gKDIgKiBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSkpOwotCWZjLT5sb3dfd2F0ZXIgJj0gRTEwMDBfRkNSVExfUlRMOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KKwkJZmMtPmhpZ2hfd2F0ZXIgPSBod20gJiBFMTAwMF9GQ1JUSF9SVEg7IC8qIDgtYnl0ZSBncmFudWxhcml0eSAqLworCQlmYy0+bG93X3dhdGVyID0gZmMtPmhpZ2hfd2F0ZXIgLSA4OworCX0KIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfRElTQUJMRV9GQ19QQVVTRV9USU1FKQogCQlmYy0+cGF1c2VfdGltZSA9IDB4RkZGRjsKQEAgLTI4MTMsNiArMjgyNiwxMCBAQAogCWlmIChtYWMtPm9wcy5pbml0X2h3KGh3KSkKIAkJZV9lcnIoIkhhcmR3YXJlIEVycm9yXG4iKTsKIAorCS8qIGFkZGl0aW9uYWwgcGFydCBvZiB0aGUgZmxvdy1jb250cm9sIHdvcmthcm91bmQgYWJvdmUgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikKKwkJZXczMihGQ1JUVl9QQ0gsIDB4MTAwMCk7CisKIAllMTAwMF91cGRhdGVfbW5nX3ZsYW4oYWRhcHRlcik7CiAKIAkvKiBFbmFibGUgaC93IHRvIHJlY29nbml6ZSBhbiA4MDIuMVEgVkxBTiBFdGhlcm5ldCBwYWNrZXQgKi8KQEAgLTM2MTAsNyArMzYyNyw3IEBACiAJCQljYXNlIFNQRUVEXzEwMDoKIAkJCQl0eGIyYiA9IDA7CiAJCQkJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7Ci0JCQkJLyogbWF5YmUgYWRkIHNvbWUgdGltZW91dCBmYWN0b3IgPyAqLworCQkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gMTA7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTQyODgsOCArNDMwNSwxMCBAQAogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCW1zbGVlcCgxKTsKLQkvKiBlMTAwMGVfZG93biBoYXMgYSBkZXBlbmRlbmN5IG9uIG1heF9mcmFtZV9zaXplICovCisJLyogZTEwMDBlX2Rvd24gLT4gZTEwMDBlX3Jlc2V0IGRlcGVuZGVudCBvbiBtYXhfZnJhbWVfc2l6ZSAmIG10dSAqLwogCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplID0gbWF4X2ZyYW1lOworCWVfaW5mbygiY2hhbmdpbmcgTVRVIGZyb20gJWQgdG8gJWRcbiIsIG5ldGRldi0+bXR1LCBuZXdfbXR1KTsKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJZTEwMDBlX2Rvd24oYWRhcHRlcik7CiAKQEAgLTQzMTksOSArNDMzOCw2IEBACiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFVEhfRlJBTUVfTEVOICsgVkxBTl9ITEVOCiAJCQkJCSArIEVUSF9GQ1NfTEVOOwogCi0JZV9pbmZvKCJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwgbmV0ZGV2LT5tdHUsIG5ld19tdHUpOwotCW5ldGRldi0+bXR1ID0gbmV3X210dTsKLQogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWUxMDAwZV91cChhZGFwdGVyKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKaW5kZXggMDMxNzViMy4uODVmOTU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYwpAQCAtNzEsNyArNzEsNiBAQAogI2RlZmluZSBJODI1NzdfQ0ZHX0FTU0VSVF9DUlNfT05fVFggICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIEk4MjU3N19DRkdfRU5BQkxFX0RPV05TSElGVCAgICAgICAoMyA8PCAxMCkgLyogYXV0byBkb3duc2hpZnQgMTAwLzEwICovCiAjZGVmaW5lIEk4MjU3N19DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBJODI1NzdfQ1RSTF9ET1dOU0hJRlRfTUFTSyAgICAgICAgKDcgPDwgMTApCiAKIC8qIDgyNTc3IHNwZWNpZmljIFBIWSByZWdpc3RlcnMgKi8KICNkZWZpbmUgSTgyNTc3X1BIWV9DVFJMXzIgICAgICAgICAgICAxOApAQCAtNjYwLDE1ICs2NTksNiBAQAogCXBoeV9kYXRhIHw9IEk4MjU3N19DRkdfRU5BQkxFX0RPV05TSElGVDsKIAogCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LCBJODI1NzdfQ0ZHX1JFRywgcGh5X2RhdGEpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQotCS8qIFNldCBudW1iZXIgb2YgbGluayBhdHRlbXB0cyBiZWZvcmUgZG93bnNoaWZ0ICovCi0JcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcGh5X3JlZyhodywgSTgyNTc3X0NUUkxfUkVHLCAmcGh5X2RhdGEpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQlwaHlfZGF0YSAmPSB+STgyNTc3X0NUUkxfRE9XTlNISUZUX01BU0s7Ci0JcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsIEk4MjU3N19DVFJMX1JFRywgcGh5X2RhdGEpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC0yNjU4LDE5ICsyNjQ4LDE4IEBACiAJCXBhZ2UgPSAwOwogCiAJaWYgKHJlZyA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKLQkJaWYgKChody0+cGh5LnR5cGUgIT0gZTEwMDBfcGh5XzgyNTc4KSB8fAotCQkgICAgKChyZWcgIT0gSTgyNTc4X0FERFJfUkVHKSAmJgotCQkgICAgIChyZWcgIT0gSTgyNTc4X0FERFJfUkVHICsgMSkpKSB7Ci0JCQl1MzIgcGh5X2FkZHIgPSBody0+cGh5LmFkZHI7CisJCXUzMiBwaHlfYWRkciA9IGh3LT5waHkuYWRkcjsKIAotCQkJaHctPnBoeS5hZGRyID0gMTsKKwkJaHctPnBoeS5hZGRyID0gMTsKIAotCQkJLyogUGFnZSBpcyBzaGlmdGVkIGxlZnQsIFBIWSBleHBlY3RzIChwYWdlIHggMzIpICovCi0JCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlIDw8IElHUF9QQUdFX1NISUZUKSk7Ci0JCQlody0+cGh5LmFkZHIgPSBwaHlfYWRkcjsKLQkJfQorCQkvKiBQYWdlIGlzIHNoaWZ0ZWQgbGVmdCwgUEhZIGV4cGVjdHMgKHBhZ2UgeCAzMikgKi8KKwkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsCisJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCisJCQkJCSAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKKwkJaHctPnBoeS5hZGRyID0gcGh5X2FkZHI7CisKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKIAl9CiAKIAlyZXRfdmFsID0gZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgcmVnLApAQCAtMjY3OCw3ICsyNjY3LDcgQEAKIG91dDoKIAkvKiBSZXZlcnQgdG8gTURJTyBmYXN0IG1vZGUsIGlmIGFwcGxpY2FibGUgKi8KIAlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmIGluX3Nsb3dfbW9kZSkKLQkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOworCQlyZXRfdmFsIHw9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOwogCiAJaWYgKCFsb2NrZWQpCiAJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKQEAgLTI3ODQsMTkgKzI3NzMsMTggQEAKIAl9CiAKIAlpZiAocmVnID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgewotCQlpZiAoKGh3LT5waHkudHlwZSAhPSBlMTAwMF9waHlfODI1NzgpIHx8Ci0JCSAgICAoKHJlZyAhPSBJODI1NzhfQUREUl9SRUcpICYmCi0JCSAgICAgKHJlZyAhPSBJODI1NzhfQUREUl9SRUcgKyAxKSkpIHsKLQkJCXUzMiBwaHlfYWRkciA9IGh3LT5waHkuYWRkcjsKKwkJdTMyIHBoeV9hZGRyID0gaHctPnBoeS5hZGRyOwogCi0JCQlody0+cGh5LmFkZHIgPSAxOworCQlody0+cGh5LmFkZHIgPSAxOwogCi0JCQkvKiBQYWdlIGlzIHNoaWZ0ZWQgbGVmdCwgUEhZIGV4cGVjdHMgKHBhZ2UgeCAzMikgKi8KLQkJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKLQkJCWh3LT5waHkuYWRkciA9IHBoeV9hZGRyOwotCQl9CisJCS8qIFBhZ2UgaXMgc2hpZnRlZCBsZWZ0LCBQSFkgZXhwZWN0cyAocGFnZSB4IDMyKSAqLworCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKKwkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKKwkJCQkJICAgICAocGFnZSA8PCBJR1BfUEFHRV9TSElGVCkpOworCQlody0+cGh5LmFkZHIgPSBwaHlfYWRkcjsKKworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgcmVnLApAQCAtMjgwNSw3ICsyNzkzLDcgQEAKIG91dDoKIAkvKiBSZXZlcnQgdG8gTURJTyBmYXN0IG1vZGUsIGlmIGFwcGxpY2FibGUgKi8KIAlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmIGluX3Nsb3dfbW9kZSkKLQkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOworCQlyZXRfdmFsIHw9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOwogCiAJaWYgKCFsb2NrZWQpCiAJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VxbC5jIGIvZHJpdmVycy9uZXQvZXFsLmMKaW5kZXggZDRkOWEzZS4uZjViOTZjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VxbC5jCisrKyBiL2RyaXZlcnMvbmV0L2VxbC5jCkBAIC0xMTEsNiArMTExLDcgQEAKICAqIFNvcnJ5LCBJIGhhZCB0byByZXdyaXRlIG1vc3Qgb2YgdGhpcyBmb3IgMi41LnggLURhdmVNCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhvYy5jIGIvZHJpdmVycy9uZXQvZXRob2MuYwppbmRleCA1OTA0NzNhLi5mN2Q5YWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhvYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9ldGhvYy5oPgogCiBzdGF0aWMgaW50IGJ1ZmZlcl9zaXplID0gMHg4MDAwOyAvKiAzMiBLQnl0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V3cmszLmMgYi9kcml2ZXJzL25ldC9ld3JrMy5jCmluZGV4IGIyYTVlYzguLmRkNGJhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V3cmszLmMKKysrIGIvZHJpdmVycy9uZXQvZXdyazMuYwpAQCAtMTQ1LDYgKzE0NSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDczZmU5NzcuLjMxMTY2MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwppbmRleCAxZDUwNjRhLi5mNzUxOWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIC8qIFRpbWUgaW4gamlmZmllcyBiZWZvcmUgY29uY2x1ZGluZyB0aGUgdHJhbnNtaXR0ZXIgaXMgaHVuZy4gKi8KICNkZWZpbmUgVFhfVElNRU9VVCAgKDUqSFopCiAKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKaW5kZXggN2JjYWY3Yy4uZTM0NGM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYwppbmRleCBhYTQ0ODhlLi5lZDYwZmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMKQEAgLTcxLDYgKzcxLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfaGR4LmMKaW5kZXggODhjNTkzNS4uMTY4NmY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2hkeC5jCkBAIC02MSw2ICs2MSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwppbmRleCAwMDEzYzQwLi45MWM1NzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCkBAIC00Miw2ICs0Miw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggYTlhMWE5OS4uZGQ4NjY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC05OCw2ICs5OCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCmluZGV4IGFhYjNkOTcuLmIyNDNlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgImlnYi5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKaW5kZXggMmZjMzBiNC4uY2I5MGQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwpAQCAtNjYsNyArNjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCmluZGV4IGY0ZDEzZmMuLmI1NGQzYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwpAQCAtMTE4LDcgKzExOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKaW5kZXggNWY5ZDczMy4uOGQ3MTNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCkBAIC04Miw3ICs4Miw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwppbmRleCBiM2QzMGJjLi5jMGUwYmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKaW5kZXggMTQ0NWU1OC4uODRkYjE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcm1vZC5oPgpAQCAtMTYzLDYgKzE2NCwyMiBAQAogfQogCiAvKgorICogU2V0IHRoZSBJckRBIGNvbW11bmljYXRpb25zIG1vZGUuCisgKi8KK3N0YXRpYyB2b2lkIHB4YV9pcmRhX3NldF9tb2RlKHN0cnVjdCBweGFfaXJkYSAqc2ksIGludCBtb2RlKQoreworCWlmIChzaS0+cGRhdGEtPnRyYW5zY2VpdmVyX21vZGUpCisJCXNpLT5wZGF0YS0+dHJhbnNjZWl2ZXJfbW9kZShzaS0+ZGV2LCBtb2RlKTsKKwllbHNlIHsKKwkJaWYgKGdwaW9faXNfdmFsaWQoc2ktPnBkYXRhLT5ncGlvX3B3ZG93bikpCisJCQlncGlvX3NldF92YWx1ZShzaS0+cGRhdGEtPmdwaW9fcHdkb3duLAorCQkJCQkhKG1vZGUgJiBJUl9PRkYpIF4KKwkJCQkJIXNpLT5wZGF0YS0+Z3Bpb19wd2Rvd25faW52ZXJ0ZWQpOworCQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShzaS0+ZGV2LCBtb2RlKTsKKwl9Cit9CisKKy8qCiAgKiBTZXQgdGhlIElyREEgY29tbXVuaWNhdGlvbnMgc3BlZWQuCiAgKi8KIHN0YXRpYyBpbnQgcHhhX2lyZGFfc2V0X3NwZWVkKHN0cnVjdCBweGFfaXJkYSAqc2ksIGludCBzcGVlZCkKQEAgLTE4OCw3ICsyMDUsNyBAQAogCQkJcHhhX2lyZGFfZGlzYWJsZV9jbGsoc2kpOwogCiAJCQkvKiBzZXQgYm9hcmQgdHJhbnNjZWl2ZXIgdG8gU0lSIG1vZGUgKi8KLQkJCXNpLT5wZGF0YS0+dHJhbnNjZWl2ZXJfbW9kZShzaS0+ZGV2LCBJUl9TSVJNT0RFKTsKKwkJCXB4YV9pcmRhX3NldF9tb2RlKHNpLCBJUl9TSVJNT0RFKTsKIAogCQkJLyogZW5hYmxlIHRoZSBTVFVBUlQgY2xvY2sgKi8KIAkJCXB4YV9pcmRhX2VuYWJsZV9zaXJjbGsoc2kpOwpAQCAtMjIyLDcgKzIzOSw3IEBACiAJCUlDQ1IwID0gMDsKIAogCQkvKiBzZXQgYm9hcmQgdHJhbnNjZWl2ZXIgdG8gRklSIG1vZGUgKi8KLQkJc2ktPnBkYXRhLT50cmFuc2NlaXZlcl9tb2RlKHNpLT5kZXYsIElSX0ZJUk1PREUpOworCQlweGFfaXJkYV9zZXRfbW9kZShzaSwgSVJfRklSTU9ERSk7CiAKIAkJLyogZW5hYmxlIHRoZSBGSUNQIGNsb2NrICovCiAJCXB4YV9pcmRhX2VuYWJsZV9maXJjbGsoc2kpOwpAQCAtNjQxLDcgKzY1OCw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogcG93ZXIgb2ZmIGJvYXJkIHRyYW5zY2VpdmVyICovCi0Jc2ktPnBkYXRhLT50cmFuc2NlaXZlcl9tb2RlKHNpLT5kZXYsIElSX09GRik7CisJcHhhX2lyZGFfc2V0X21vZGUoc2ksIElSX09GRik7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAicHhhX2lyOiBpcmRhIHNodXRkb3duXG4iKTsKIH0KQEAgLTg0OSwxMCArODY2LDI2IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfbWVtXzU7CiAKLQlpZiAoc2ktPnBkYXRhLT5zdGFydHVwKQorCWlmIChncGlvX2lzX3ZhbGlkKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pKSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdChzaS0+cGRhdGEtPmdwaW9fcHdkb3duLCAiSXJEQSBzd2l0Y2giKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX3N0YXJ0dXA7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChzaS0+cGRhdGEtPmdwaW9fcHdkb3duLAorCQkJCQkhc2ktPnBkYXRhLT5ncGlvX3B3ZG93bl9pbnZlcnRlZCk7CisJCWlmIChlcnIpIHsKKwkJCWdwaW9fZnJlZShzaS0+cGRhdGEtPmdwaW9fcHdkb3duKTsKKwkJCWdvdG8gZXJyX3N0YXJ0dXA7CisJCX0KKwl9CisKKwlpZiAoc2ktPnBkYXRhLT5zdGFydHVwKSB7CiAJCWVyciA9IHNpLT5wZGF0YS0+c3RhcnR1cChzaS0+ZGV2KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9zdGFydHVwOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfc3RhcnR1cDsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChzaS0+cGRhdGEtPmdwaW9fcHdkb3duKSAmJiBzaS0+cGRhdGEtPnN0YXJ0dXApCisJCWRldl93YXJuKHNpLT5kZXYsICJncGlvX3B3ZG93biBhbmQgc3RhcnR1cCgpIGJvdGggZGVmaW5lZCFcbiIpOwogCiAJZGV2LT5uZXRkZXZfb3BzID0gJnB4YV9pcmRhX25ldGRldl9vcHM7CiAKQEAgLTkwMyw2ICs5MzYsOCBAQAogCWlmIChkZXYpIHsKIAkJc3RydWN0IHB4YV9pcmRhICpzaSA9IG5ldGRldl9wcml2KGRldik7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCWlmIChncGlvX2lzX3ZhbGlkKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pKQorCQkJZ3Bpb19mcmVlKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pOwogCQlpZiAoc2ktPnBkYXRhLT5zaHV0ZG93bikKIAkJCXNpLT5wZGF0YS0+c2h1dGRvd24oc2ktPmRldik7CiAJCWtmcmVlKHNpLT50eF9idWZmLmhlYWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS90b2ltMzIzMi1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdG9pbTMyMzItc2lyLmMKaW5kZXggZmNmMjg3Yi4uOTllMWVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS90b2ltMzIzMi1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3RvaW0zMjMyLXNpci5jCkBAIC0xMjAsNiArMTIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggYTUwMzZmNy4uYTQ1NjU3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtMjQwLDExICsyNDAsMTEgQEAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV90eF9pc19wYXVzZWQoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nKQogewotCWludCB0YzsKIAl1MzIgdHhvZmYgPSBJWEdCRV9URkNTX1RYT0ZGOwogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKKwkJaW50IHRjOwogCQlpbnQgcmVnX2lkeCA9IHR4X3JpbmctPnJlZ19pZHg7CiAJCWludCBkY2JfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMgYi9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKaW5kZXggMGJlMTRkNy4uYzE0NjMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYwpAQCAtNTY4LDYgKzU2OCwxNiBAQAogCQlpb3dyaXRlMTYoKndwdHIrKywga3MtPmh3X2FkZHIpOwogfQogCitzdGF0aWMgdm9pZCBrc19kaXNhYmxlX2ludChzdHJ1Y3Qga3NfbmV0ICprcykKK3sKKwlrc193cnJlZzE2KGtzLCBLU19JRVIsIDB4MDAwMCk7Cit9ICAvKiBrc19kaXNhYmxlX2ludCAqLworCitzdGF0aWMgdm9pZCBrc19lbmFibGVfaW50KHN0cnVjdCBrc19uZXQgKmtzKQoreworCWtzX3dycmVnMTYoa3MsIEtTX0lFUiwga3MtPnJjX2llcik7Cit9ICAvKiBrc19lbmFibGVfaW50ICovCisKIC8qKgogICoga3NfdHhfZmlmb19zcGFjZSAtIHJldHVybiB0aGUgYXZhaWxhYmxlIGhhcmR3YXJlIGJ1ZmZlciBzaXplLgogICogQGtzOiBUaGUgY2hpcCBpbmZvcm1hdGlvbgpAQCAtNjgxLDYgKzY5MSw0NyBAQAogfQogCiAKK3ZvaWQga3NfZW5hYmxlX3FtdShzdHJ1Y3Qga3NfbmV0ICprcykKK3sKKwl1MTYgdzsKKworCXcgPSBrc19yZHJlZzE2KGtzLCBLU19UWENSKTsKKwkvKiBFbmFibGVzIFFNVSBUcmFuc21pdCAoVFhDUikuICovCisJa3Nfd3JyZWcxNihrcywgS1NfVFhDUiwgdyB8IFRYQ1JfVFhFKTsKKworCS8qCisJICogUlggRnJhbWUgQ291bnQgVGhyZXNob2xkIEVuYWJsZSBhbmQgQXV0by1EZXF1ZXVlIFJYUSBGcmFtZQorCSAqIEVuYWJsZQorCSAqLworCisJdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1JYUUNSKTsKKwlrc193cnJlZzE2KGtzLCBLU19SWFFDUiwgdyB8IFJYUUNSX1JYRkNURSk7CisKKwkvKiBFbmFibGVzIFFNVSBSZWNlaXZlIChSWENSMSkuICovCisJdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1JYQ1IxKTsKKwlrc193cnJlZzE2KGtzLCBLU19SWENSMSwgdyB8IFJYQ1IxX1JYRSk7CisJa3MtPmVuYWJsZWQgPSB0cnVlOworfSAgLyoga3NfZW5hYmxlX3FtdSAqLworCitzdGF0aWMgdm9pZCBrc19kaXNhYmxlX3FtdShzdHJ1Y3Qga3NfbmV0ICprcykKK3sKKwl1MTYJdzsKKworCXcgPSBrc19yZHJlZzE2KGtzLCBLU19UWENSKTsKKworCS8qIERpc2FibGVzIFFNVSBUcmFuc21pdCAoVFhDUikuICovCisJdyAgJj0gflRYQ1JfVFhFOworCWtzX3dycmVnMTYoa3MsIEtTX1RYQ1IsIHcpOworCisJLyogRGlzYWJsZXMgUU1VIFJlY2VpdmUgKFJYQ1IxKS4gKi8KKwl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhDUjEpOworCXcgJj0gflJYQ1IxX1JYRSA7CisJa3Nfd3JyZWcxNihrcywgS1NfUlhDUjEsIHcpOworCisJa3MtPmVuYWJsZWQgPSBmYWxzZTsKKworfSAgLyoga3NfZGlzYWJsZV9xbXUgKi8KKwogLyoqCiAgKiBrc19yZWFkX3FtdSAtIHJlYWQgMSBwa3QgZGF0YSBmcm9tIHRoZSBRTVUuCiAgKiBAa3M6IFRoZSBjaGlwIGluZm9ybWF0aW9uCkBAIC03NTIsNyArODAzLDcgQEAKIAkJCShmcmFtZV9oZHItPmxlbiA8IFJYX0JVRl9TSVpFKSAmJiBmcmFtZV9oZHItPmxlbikpIHsKIAkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJCQkvKiByZWFkIGRhdGEgYmxvY2sgaW5jbHVkaW5nIENSQyA0IGJ5dGVzICovCi0JCQlrc19yZWFkX3FtdShrcywgKHUxNiAqKXNrYi0+ZGF0YSwgZnJhbWVfaGRyLT5sZW4gKyA0KTsKKwkJCWtzX3JlYWRfcW11KGtzLCAodTE2ICopc2tiLT5kYXRhLCBmcmFtZV9oZHItPmxlbik7CiAJCQlza2JfcHV0KHNrYiwgZnJhbWVfaGRyLT5sZW4pOwogCQkJc2tiLT5kZXYgPSBuZXRkZXY7CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwpAQCAtODYxLDcgKzkxMiw3IEBACiAJCWtzX2RiZyhrcywgIiVzIC0gZW50cnlcbiIsIF9fZnVuY19fKTsKIAogCS8qIHJlc2V0IHRoZSBIVyAqLwotCWVyciA9IHJlcXVlc3RfaXJxKGtzLT5pcnEsIGtzX2lycSwgS1NfSU5UX0ZMQUdTLCBEUlZfTkFNRSwga3MpOworCWVyciA9IHJlcXVlc3RfaXJxKGtzLT5pcnEsIGtzX2lycSwgS1NfSU5UX0ZMQUdTLCBEUlZfTkFNRSwgbmV0ZGV2KTsKIAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBJUlE6ICVkOiAlZFxuIiwKQEAgLTg2OSw2ICs5MjAsMTUgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiB3YWtlIHVwIHBvd2VybW9kZSB0byBub3JtYWwgbW9kZSAqLworCWtzX3NldF9wb3dlcm1vZGUoa3MsIFBNRUNSX1BNX05PUk1BTCk7CisJbWRlbGF5KDEpOwkvKiB3YWl0IGZvciBub3JtYWwgbW9kZSB0byB0YWtlIGVmZmVjdCAqLworCisJa3Nfd3JyZWcxNihrcywgS1NfSVNSLCAweGZmZmYpOworCWtzX2VuYWJsZV9pbnQoa3MpOworCWtzX2VuYWJsZV9xbXUoa3MpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGtzLT5uZXRkZXYpOworCiAJaWYgKG5ldGlmX21zZ19pZnVwKGtzKSkKIAkJa3NfZGJnKGtzLCAibmV0d29yayBkZXZpY2UgJXMgdXBcbiIsIG5ldGRldi0+bmFtZSk7CiAKQEAgLTg5MiwxOSArOTUyLDE0IEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAKLQlrZnJlZShrcy0+ZnJhbWVfaGVhZF9pbmZvKTsKLQogCW11dGV4X2xvY2soJmtzLT5sb2NrKTsKIAogCS8qIHR1cm4gb2ZmIHRoZSBJUlFzIGFuZCBhY2sgYW55IG91dHN0YW5kaW5nICovCiAJa3Nfd3JyZWcxNihrcywgS1NfSUVSLCAweDAwMDApOwogCWtzX3dycmVnMTYoa3MsIEtTX0lTUiwgMHhmZmZmKTsKIAotCS8qIHNodXRkb3duIFJYIHByb2Nlc3MgKi8KLQlrc193cnJlZzE2KGtzLCBLU19SWENSMSwgMHgwMDAwKTsKLQotCS8qIHNodXRkb3duIFRYIHByb2Nlc3MgKi8KLQlrc193cnJlZzE2KGtzLCBLU19UWENSLCAweDAwMDApOworCS8qIHNodXRkb3duIFJYL1RYIFFNVSAqLworCWtzX2Rpc2FibGVfcW11KGtzKTsKIAogCS8qIHNldCBwb3dlcm1vZGUgdG8gc29mdCBwb3dlciBkb3duIHRvIHNhdmUgcG93ZXIgKi8KIAlrc19zZXRfcG93ZXJtb2RlKGtzLCBQTUVDUl9QTV9TT0ZURE9XTik7CkBAIC05MjksMTcgKzk4NCw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGtzX3dyaXRlX3FtdShzdHJ1Y3Qga3NfbmV0ICprcywgdTggKnBkYXRhLCB1MTYgbGVuKQogewotCXVuc2lnbmVkIGZpZCA9IGtzLT5maWQ7Ci0KLQlmaWQgPSBrcy0+ZmlkOwotCWtzLT5maWQgPSAoa3MtPmZpZCArIDEpICYgVFhGUl9UWEZJRF9NQVNLOwotCi0JLyogcmVkdWNlIHRoZSB0eCBpbnRlcnJ1cHQgb2NjdXJyYW5jZXMuICovCi0JaWYgKCFmaWQpCi0JCWZpZCB8PSBUWEZSX1RYSUM7ICAgICAgIC8qIGlycSBvbiBjb21wbGV0aW9uICovCi0KIAkvKiBzdGFydCBoZWFkZXIgYXQgdHhiWzBdIHRvIGFsaWduIHR4dyBlbnRyaWVzICovCi0Ja3MtPnR4aC50eHdbMF0gPSBjcHVfdG9fbGUxNihmaWQpOworCWtzLT50eGgudHh3WzBdID0gMDsKIAlrcy0+dHhoLnR4d1sxXSA9IGNwdV90b19sZTE2KGxlbik7CiAKIAkvKiAxLiBzZXQgc3Vkby1ETUEgbW9kZSAqLwpAQCAtOTU3LDE2ICsxMDAzLDYgQEAKIAkJOwogfQogCi1zdGF0aWMgdm9pZCBrc19kaXNhYmxlX2ludChzdHJ1Y3Qga3NfbmV0ICprcykKLXsKLQlrc193cnJlZzE2KGtzLCBLU19JRVIsIDB4MDAwMCk7Ci19ICAvKiBrc19kaXNhYmxlX2ludCAqLwotCi1zdGF0aWMgdm9pZCBrc19lbmFibGVfaW50KHN0cnVjdCBrc19uZXQgKmtzKQotewotCWtzX3dycmVnMTYoa3MsIEtTX0lFUiwga3MtPnJjX2llcik7Ci19ICAvKiBrc19lbmFibGVfaW50ICovCi0KIC8qKgogICoga3Nfc3RhcnRfeG1pdCAtIHRyYW5zbWl0IHBhY2tldAogICogQHNrYgkJOiBUaGUgYnVmZmVyIHRvIHRyYW5zbWl0CkBAIC0xNDEwLDI1ICsxNDQ2LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBrc19kaXNhYmxlKHN0cnVjdCBrc19uZXQgKmtzKQotewotCXUxNgl3OwotCi0JdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1RYQ1IpOwotCi0JLyogRGlzYWJsZXMgUU1VIFRyYW5zbWl0IChUWENSKS4gKi8KLQl3ICAmPSB+VFhDUl9UWEU7Ci0Ja3Nfd3JyZWcxNihrcywgS1NfVFhDUiwgdyk7Ci0KLQkvKiBEaXNhYmxlcyBRTVUgUmVjZWl2ZSAoUlhDUjEpLiAqLwotCXcgPSBrc19yZHJlZzE2KGtzLCBLU19SWENSMSk7Ci0JdyAmPSB+UlhDUjFfUlhFIDsKLQlrc193cnJlZzE2KGtzLCBLU19SWENSMSwgdyk7Ci0KLQlrcy0+ZW5hYmxlZCA9IGZhbHNlOwotCi19ICAvKiBrc19kaXNhYmxlICovCi0KIHN0YXRpYyB2b2lkIGtzX3NldHVwKHN0cnVjdCBrc19uZXQgKmtzKQogewogCXUxNgl3OwpAQCAtMTQ2Myw3ICsxNDgwLDcgQEAKIAl3ID0gVFhDUl9UWEZDRSB8IFRYQ1JfVFhQRSB8IFRYQ1JfVFhDUkMgfCBUWENSX1RDR0lQOwogCWtzX3dycmVnMTYoa3MsIEtTX1RYQ1IsIHcpOwogCi0JdyA9IFJYQ1IxX1JYRkNFIHwgUlhDUjFfUlhCRSB8IFJYQ1IxX1JYVUU7CisJdyA9IFJYQ1IxX1JYRkNFIHwgUlhDUjFfUlhCRSB8IFJYQ1IxX1JYVUUgfCBSWENSMV9SWE1FIHwgUlhDUjFfUlhJUEZDQzsKIAogCWlmIChrcy0+cHJvbWlzY3VvdXMpICAgICAgICAgLyogYlByb21pc2N1b3VzICovCiAJCXcgfD0gKFJYQ1IxX1JYQUUgfCBSWENSMV9SWElOVkYpOwpAQCAtMTQ4NiwyOCArMTUwMyw2IEBACiAJa3MtPnJjX2llciA9IChJUlFfTENJIHwgSVJRX1RYSSB8IElSUV9SWEkpOwogfSAgLyoga3Nfc2V0dXBfaW50ICovCiAKLXZvaWQga3NfZW5hYmxlKHN0cnVjdCBrc19uZXQgKmtzKQotewotCXUxNiB3OwotCi0JdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1RYQ1IpOwotCS8qIEVuYWJsZXMgUU1VIFRyYW5zbWl0IChUWENSKS4gKi8KLQlrc193cnJlZzE2KGtzLCBLU19UWENSLCB3IHwgVFhDUl9UWEUpOwotCi0JLyoKLQkgKiBSWCBGcmFtZSBDb3VudCBUaHJlc2hvbGQgRW5hYmxlIGFuZCBBdXRvLURlcXVldWUgUlhRIEZyYW1lCi0JICogRW5hYmxlCi0JICovCi0KLQl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhRQ1IpOwotCWtzX3dycmVnMTYoa3MsIEtTX1JYUUNSLCB3IHwgUlhRQ1JfUlhGQ1RFKTsKLQotCS8qIEVuYWJsZXMgUU1VIFJlY2VpdmUgKFJYQ1IxKS4gKi8KLQl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhDUjEpOwotCWtzX3dycmVnMTYoa3MsIEtTX1JYQ1IxLCB3IHwgUlhDUjFfUlhFKTsKLQlrcy0+ZW5hYmxlZCA9IHRydWU7Ci19ICAvKiBrc19lbmFibGUgKi8KLQogc3RhdGljIGludCBrc19od19pbml0KHN0cnVjdCBrc19uZXQgKmtzKQogewogI2RlZmluZQlNSEVBREVSX1NJWkUJKHNpemVvZihzdHJ1Y3QgdHlwZV9mcmFtZV9oZWFkKSAqIE1BWF9SRUNWX0ZSQU1FUykKQEAgLTE2MTIsMTEgKzE2MDcsOSBAQAogCiAJa3Nfc29mdF9yZXNldChrcywgR1JSX0dTUik7CiAJa3NfaHdfaW5pdChrcyk7Ci0Ja3NfZGlzYWJsZShrcyk7CisJa3NfZGlzYWJsZV9xbXUoa3MpOwogCWtzX3NldHVwKGtzKTsKIAlrc19zZXR1cF9pbnQoa3MpOwotCWtzX2VuYWJsZV9pbnQoa3MpOwotCWtzX2VuYWJsZShrcyk7CiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGtzLT5tYWNfYWRkciwgNik7CiAKIAlkYXRhID0ga3NfcmRyZWcxNihrcywgS1NfT0JDUik7CkBAIC0xNjU4LDYgKzE2NTEsNyBAQAogCXN0cnVjdCBrc19uZXQgKmtzID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAorCWtmcmVlKGtzLT5mcmFtZV9oZWFkX2luZm8pOwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJaW91bm1hcChrcy0+aHdfYWRkcik7CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZncuYyBiL2RyaXZlcnMvbmV0L21seDQvZncuYwppbmRleCBjZWUxOTljLi4zYzE2NjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2Z3LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9mdy5jCkBAIC0zMyw2ICszMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIAogI2luY2x1ZGUgImZ3LmgiCiAjaW5jbHVkZSAiaWNtLmgiCkBAIC02OTgsNiArNjk5LDcgQEAKICNkZWZpbmUgSU5JVF9IQ0FfSU5fU0laRQkJIDB4MjAwCiAjZGVmaW5lIElOSVRfSENBX1ZFUlNJT05fT0ZGU0VUCQkgMHgwMDAKICNkZWZpbmUJIElOSVRfSENBX1ZFUlNJT04JCSAyCisjZGVmaW5lIElOSVRfSENBX0NBQ0hFTElORV9TWl9PRkZTRVQJIDB4MGUKICNkZWZpbmUgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUCQkgMHgwMTQKICNkZWZpbmUgSU5JVF9IQ0FfUVBDX09GRlNFVAkJIDB4MDIwCiAjZGVmaW5lCSBJTklUX0hDQV9RUENfQkFTRV9PRkZTRVQJIChJTklUX0hDQV9RUENfT0ZGU0VUICsgMHgxMCkKQEAgLTczNSw2ICs3MzcsOSBAQAogCiAJKigodTggKikgbWFpbGJveC0+YnVmICsgSU5JVF9IQ0FfVkVSU0lPTl9PRkZTRVQpID0gSU5JVF9IQ0FfVkVSU0lPTjsKIAorCSooKHU4ICopIG1haWxib3gtPmJ1ZiArIElOSVRfSENBX0NBQ0hFTElORV9TWl9PRkZTRVQpID0KKwkJKGlsb2cyKGNhY2hlX2xpbmVfc2l6ZSgpKSAtIDQpIDw8IDU7CisKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAkqKGluYm94ICsgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUIC8gNCkgJj0gfmNwdV90b19iZTMyKDEgPDwgMSk7CiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKaW5kZXggM2RkNDgxZS4uMjkxYTUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKQEAgLTEyODIsNiArMTI4Miw4IEBACiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzcyKSB9LCAvKiBNVDI1NDU4IENvbm5lY3RYIEVOIDEwR0JBU0UtVCAxMEdpZ0UgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NWEpIH0sIC8qIE1UMjU0NTggQ29ubmVjdFggRU4gMTBHQkFTRS1UK0dlbjIgMTBHaWdFICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzY0KSB9LCAvKiBNVDI2NDY4IENvbm5lY3RYIEVOIDEwR2lnRSBQQ0llIGdlbjIqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc0NikgfSwgLyogTVQyNjQzOCBDb25uZWN0WCBFTiA0MEdpZ0UgUENJZSBnZW4yIDVHVC9zICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzZlKSB9LCAvKiBNVDI2NDc4IENvbm5lY3RYMiA0MEdpZ0UgUENJZSBnZW4yICovCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAppbmRleCA3Mzg0ZjU5Li5lMTIzN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTExNjMsNiArMTE2Myw4IEBACiAJdTMyIGludF92ZWNfYml0OwogCXUzMiBoZWFydGJpdDsKIAorCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlcl9zdGF0cyBzdGF0czsKIAogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0IHJlY3ZfY3R4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAppbmRleCAxYzQ2ZGE2Li4xN2JiMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaApAQCAtNTQ1LDYgKzU0NSw4IEBACiAjZGVmaW5lCU5FVFhFTl9OSVVfVEVTVF9NVVhfQ1RMCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDk0KQogI2RlZmluZQlORVRYRU5fTklVX1hHX1BBVVNFX0NUTAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA5OCkKICNkZWZpbmUJTkVUWEVOX05JVV9YR19QQVVTRV9MRVZFTAkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMGRjKQorI2RlZmluZQlORVRYRU5fTklVX0ZSQU1FX0NPVU5UX1NFTEVDVAkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMGFjKQorI2RlZmluZQlORVRYRU5fTklVX0ZSQU1FX0NPVU5UCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMGIwKQogI2RlZmluZQlORVRYRU5fTklVX1hHX1NFTAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDEyOCkKICNkZWZpbmUgTkVUWEVOX05JVV9HQl9QQVVTRV9DVEwJCShORVRYRU5fQ1JCX05JVSArIDB4MDAzMGMpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCmluZGV4IDMxODVhOTguLjUyYTM3OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwpAQCAtMzgzLDI0ICszODMsNTEgQEAKIAogaW50IG5ldHhlbl9wMl9uaWNfc2V0X3Byb21pc2Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgbW9kZSkKIHsKLQlfX3UzMiByZWc7CisJdTMyIG1hY19jZmc7CisJdTMyIGNudCA9IDA7CisJX191MzIgcmVnID0gMHgwMjAwOwogCXUzMiBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKKwl1MTYgYm9hcmRfdHlwZSA9IGFkYXB0ZXItPmFody5ib2FyZF90eXBlOwogCiAJaWYgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWcgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpKTsKLQlpZiAobW9kZSA9PSBORVRYRU5fTklVX1BST01JU0NfTU9ERSkKLQkJcmVnID0gKHJlZyB8IDB4MjAwMFVMKTsKLQllbHNlCi0JCXJlZyA9IChyZWcgJiB+MHgyMDAwVUwpOworCW1hY19jZmcgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzAgKyAoMHgxMDAwMCAqIHBvcnQpKTsKKwltYWNfY2ZnICY9IH4weDQ7CisJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18wICsgKDB4MTAwMDAgKiBwb3J0KSwgbWFjX2NmZyk7CiAKLQlpZiAobW9kZSA9PSBORVRYRU5fTklVX0FMTE1VTFRJX01PREUpCi0JCXJlZyA9IChyZWcgfCAweDEwMDBVTCk7Ci0JZWxzZQotCQlyZWcgPSAocmVnICYgfjB4MTAwMFVMKTsKKwlpZiAoKGJvYXJkX3R5cGUgPT0gTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWikgfHwKKwkJCShib2FyZF90eXBlID09IE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0hNRVopKQorCQlyZWcgPSAoMHgyMCA8PCBwb3J0KTsKIAotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCksIHJlZyk7CisJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfRlJBTUVfQ09VTlRfU0VMRUNULCByZWcpOworCisJbWRlbGF5KDEwKTsKKworCXdoaWxlIChOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9GUkFNRV9DT1VOVCkgJiYgKytjbnQgPCAyMCkKKwkJbWRlbGF5KDEwKTsKKworCWlmIChjbnQgPCAyMCkgeworCisJCXJlZyA9IE5YUkQzMihhZGFwdGVyLAorCQkJTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpKTsKKworCQlpZiAobW9kZSA9PSBORVRYRU5fTklVX1BST01JU0NfTU9ERSkKKwkJCXJlZyA9IChyZWcgfCAweDIwMDBVTCk7CisJCWVsc2UKKwkJCXJlZyA9IChyZWcgJiB+MHgyMDAwVUwpOworCisJCWlmIChtb2RlID09IE5FVFhFTl9OSVVfQUxMTVVMVElfTU9ERSkKKwkJCXJlZyA9IChyZWcgfCAweDEwMDBVTCk7CisJCWVsc2UKKwkJCXJlZyA9IChyZWcgJiB+MHgxMDAwVUwpOworCisJCU5YV1IzMihhZGFwdGVyLAorCQkJTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpLCByZWcpOworCX0KKworCW1hY19jZmcgfD0gMHg0OworCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMCArICgweDEwMDAwICogcG9ydCksIG1hY19jZmcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MzYsNyArNDYzLDcgQEAKIHsKIAl1MzIJdmFsID0gMDsKIAl1MTYgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0JdTggKmFkZHIgPSBhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyOworCXU4ICphZGRyID0gYWRhcHRlci0+bWFjX2FkZHI7CiAKIAlpZiAoYWRhcHRlci0+bWNfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CkBAIC00NjUsNyArNDkyLDcgQEAKIHsKIAl1MzIJdmFsID0gMDsKIAl1MTYgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0JdTggKmFkZHIgPSBhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyOworCXU4ICphZGRyID0gYWRhcHRlci0+bWFjX2FkZHI7CiAKIAlpZiAoIWFkYXB0ZXItPm1jX2VuYWJsZWQpCiAJCXJldHVybiAwOwpAQCAtNjYwLDcgKzY4Nyw3IEBACiAKIAlsaXN0X3NwbGljZV90YWlsX2luaXQoJmFkYXB0ZXItPm1hY19saXN0LCAmZGVsX2xpc3QpOwogCi0JbnhfcDNfbmljX2FkZF9tYWMoYWRhcHRlciwgbmV0ZGV2LT5kZXZfYWRkciwgJmRlbF9saXN0KTsKKwlueF9wM19uaWNfYWRkX21hYyhhZGFwdGVyLCBhZGFwdGVyLT5tYWNfYWRkciwgJmRlbF9saXN0KTsKIAlueF9wM19uaWNfYWRkX21hYyhhZGFwdGVyLCBiY2FzdF9hZGRyLCAmZGVsX2xpc3QpOwogCiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IGU0MGI5MTQuLjhhMDkwNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTU0NCw2ICs1NDQsOCBAQAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKG9mZiA9PSAoUk9NVVNCX0dMQiArIDB4MWMpKSAvKiBNUyBjbG9jayAqLwogCQkJCWNvbnRpbnVlOworCQkJaWYgKChvZmYgJiAweDBmZjAwMDAwKSA9PSBORVRYRU5fQ1JCX0REUl9ORVQpCisJCQkJY29udGludWU7CiAJCQlpZiAob2ZmID09IChORVRYRU5fQ1JCX1BFR19ORVRfMSArIDB4MTgpKQogCQkJCWJ1ZltpXS5kYXRhID0gMHgxMDIwOwogCQkJLyogc2tpcCB0aGUgZnVuY3Rpb24gZW5hYmxlIHJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggMGI0YTU2YS4uM2JmNzhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtNDM3LDYgKzQzNyw3IEBACiAJCW5ldGRldi0+ZGV2X2FkZHJbaV0gPSAqKHAgKyA1IC0gaSk7CiAKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShhZGFwdGVyLT5tYWNfYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKIAkvKiBzZXQgc3RhdGlvbiBhZGRyZXNzICovCiAKQEAgLTQ1OSw2ICs0NjAsNyBAQAogCQluZXR4ZW5fbmFwaV9kaXNhYmxlKGFkYXB0ZXIpOwogCX0KIAorCW1lbWNweShhZGFwdGVyLT5tYWNfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIGFkZHItPnNhX2RhdGEpOwogCkBAIC05NTYsNyArOTU4LDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCi0JCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIG5ldGRldi0+ZGV2X2FkZHIpOworCQlhZGFwdGVyLT5tYWNhZGRyX3NldChhZGFwdGVyLCBhZGFwdGVyLT5tYWNfYWRkcik7CiAKIAlhZGFwdGVyLT5zZXRfbXVsdGkobmV0ZGV2KTsKIAlhZGFwdGVyLT5zZXRfbXR1KGFkYXB0ZXIsIG5ldGRldi0+bXR1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCBjNTk0ZTE5Li41N2ZkNDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC0xMTEsNiArMTExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY25ldDMyLmMgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKaW5kZXggNmQyOGIxOC4uYzFiM2YwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2IxMDAwLmMgYi9kcml2ZXJzL25ldC9zYjEwMDAuYwppbmRleCBlZTM2NmM1Li5jOWM3MGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYjEwMDAuYworKysgYi9kcml2ZXJzL25ldC9zYjEwMDAuYwpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYyBiL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKaW5kZXggY2VlMDBhZC4uNDllYjkxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYworKysgYi9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAllZnhfb3dvcmRfdCByZWc7CiAKIAkvKiBHUElPIDMgYW5kIHRoZSBHUElPIHJlZ2lzdGVyIGFyZSBzaGFyZWQgd2l0aCBJMkMsIHNvIGJsb2NrIHRoYXQgKi8KLQltdXRleF9sb2NrKCZlZngtPmkyY19hZGFwLmJ1c19sb2NrKTsKKwlpMmNfbG9ja19hZGFwdGVyKCZlZngtPmkyY19hZGFwKTsKIAogCS8qIFB1bGwgUlNUX04gKEdQSU8gMikgbG93IHRoZW4gbGV0IGl0IHVwIGFnYWluLCBzZXR0aW5nIHRoZQogCSAqIEZMQVNIX0NGR18xIHN0cmFwIChHUElPIDMpIGFwcHJvcHJpYXRlbHkuICBPbmx5IGNoYW5nZSB0aGUKQEAgLTIwNCw3ICsyMDQsNyBAQAogCWZhbGNvbl93cml0ZShlZngsICZyZWcsIEdQSU9fQ1RMX1JFR19LRVIpOwogCW1zbGVlcCgxKTsKIAotCW11dGV4X3VubG9jaygmZWZ4LT5pMmNfYWRhcC5idXNfbG9jayk7CisJaTJjX3VubG9ja19hZGFwdGVyKCZlZngtPmkyY19hZGFwKTsKIAogCXNzbGVlcCgxKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5jIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKaW5kZXggOTc5NDlkMC4uYzA3MmY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKaW5kZXggMzhhNTA4Yi4uYjI3MTU2ZWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKQEAgLTczLDYgKzczLDcgQEAKIAogLyogSW5jbHVkZSBmaWxlcyAqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggMDFmNjgxMS4uOGY1NDE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAuYwppbmRleCBlMTdjNTM1Li5mZTNjZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYwppbmRleCBjMmYxNGRjLi45NTQyOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtNDE2LDEzICs0MTYsOCBAQAogCXVuc2lnbmVkIGludCB0eHNpemUgPSBwcml2LT5kbWFfdHhfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgcnhzaXplID0gcHJpdi0+ZG1hX3J4X3NpemU7CiAJdW5zaWduZWQgaW50IGJmc2l6ZSA9IHByaXYtPmRtYV9idWZfc3o7Ci0JaW50IGJ1ZmYyX25lZWRlZCA9IDA7Ci0JaW50IGRpc19pYyA9IDA7CisJaW50IGJ1ZmYyX25lZWRlZCA9IDAsIGRpc19pYyA9IDA7CiAKLSNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCi0JLyogVXNpbmcgVGltZXJzIGRpc2FibGUgaW50ZXJydXB0cyBvbiBjb21wbGV0aW9uIGZvciB0aGUgcmVjZXB0aW9uICovCi0JZGlzX2ljID0gMTsKLSNlbmRpZgogCS8qIFNldCB0aGUgQnVmZmVyIHNpemUgYWNjb3JkaW5nIHRvIHRoZSBNVFU7CiAJICogaW5kZWVkLCBpbiBjYXNlIG9mIGp1bWJvIHdlIG5lZWQgdG8gYnVtcC11cCB0aGUgYnVmZmVyIHNpemVzLgogCSAqLwpAQCAtNDM3LDYgKzQzMiwxMSBAQAogCWVsc2UKIAkJYmZzaXplID0gRE1BX0JVRkZFUl9TSVpFOwogCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCS8qIERpc2FibGUgaW50ZXJydXB0cyBvbiBjb21wbGV0aW9uIGZvciB0aGUgcmVjZXB0aW9uIGlmIHRpbWVyIGlzIG9uICovCisJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKKwkJZGlzX2ljID0gMTsKKyNlbmRpZgogCS8qIElmIHRoZSBNVFUgZXhjZWVkcyA4ayBzbyB1c2UgdGhlIHNlY29uZCBidWZmZXIgaW4gdGhlIGNoYWluICovCiAJaWYgKGJmc2l6ZSA+PSBCVUZfU0laRV84S2lCKQogCQlidWZmMl9uZWVkZWQgPSAxOwpAQCAtODA5LDIwICs4MDksMjIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19lbmFibGVfaXJxKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKLSNpZm5kZWYgQ09ORklHX1NUTU1BQ19USU1FUgotCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKLSNlbHNlCi0JcHJpdi0+dG0tPnRpbWVyX3N0YXJ0KHRtcmF0ZSk7CisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCWlmIChsaWtlbHkocHJpdi0+dG0tPmVuYWJsZSkpCisJCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOworCWVsc2UKICNlbmRpZgorCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19kaXNhYmxlX2lycShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7Ci0jaWZuZGVmIENPTkZJR19TVE1NQUNfVElNRVIKLQl3cml0ZWwoMCwgcHJpdi0+ZGV2LT5iYXNlX2FkZHIgKyBETUFfSU5UUl9FTkEpOwotI2Vsc2UKLQlwcml2LT50bS0+dGltZXJfc3RvcCgpOworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQorCQlwcml2LT50bS0+dGltZXJfc3RvcCgpOworCWVsc2UKICNlbmRpZgorCXdyaXRlbCgwLCBwcml2LT5kZXYtPmJhc2VfYWRkciArIERNQV9JTlRSX0VOQSk7CiB9CiAKIHN0YXRpYyBpbnQgc3RtbWFjX2hhc193b3JrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKQEAgLTEwMzEsMjIgKzEwMzMsMjMgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCi0JcHJpdi0+dG0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3RpbWVyICopLCBHRlBfS0VSTkVMKTsKKwlwcml2LT50bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdG1tYWNfdGltZXIgKiksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseShwcml2LT50bSA9PSBOVUxMKSkgewogCQlwcl9lcnIoIiVzOiBFUlJPUjogdGltZXIgbWVtb3J5IGFsbG9jIGZhaWxlZCBcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXByaXYtPnRtLT5mcmVxID0gdG1yYXRlOwogCi0JLyogVGVzdCBpZiB0aGUgSFcgdGltZXIgY2FuIGJlIGFjdHVhbGx5IHVzZWQuCi0JICogSW4gY2FzZSBvZiBmYWlsdXJlIGNvbnRpbnVlIHdpdGggbm8gdGltZXIuICovCisJLyogVGVzdCBpZiB0aGUgZXh0ZXJuYWwgdGltZXIgY2FuIGJlIGFjdHVhbGx5IHVzZWQuCisJICogSW4gY2FzZSBvZiBmYWlsdXJlIGNvbnRpbnVlIHdpdGhvdXQgdGltZXIuICovCiAJaWYgKHVubGlrZWx5KChzdG1tYWNfb3Blbl9leHRfdGltZXIoZGV2LCBwcml2LT50bSkpIDwgMCkpIHsKLQkJcHJfd2FybmluZygic3RtbWFjZXRoOiBjYW5ub3QgYXR0YWNoIHRoZSBIVyB0aW1lclxuIik7CisJCXByX3dhcm5pbmcoInN0bW1hY2V0aDogY2Fubm90IGF0dGFjaCB0aGUgZXh0ZXJuYWwgdGltZXIuXG4iKTsKIAkJdG1yYXRlID0gMDsKIAkJcHJpdi0+dG0tPmZyZXEgPSAwOwogCQlwcml2LT50bS0+dGltZXJfc3RhcnQgPSBzdG1tYWNfbm9fdGltZXJfc3RhcnRlZDsKIAkJcHJpdi0+dG0tPnRpbWVyX3N0b3AgPSBzdG1tYWNfbm9fdGltZXJfc3RvcHBlZDsKLQl9CisJfSBlbHNlCisJCXByaXYtPnRtLT5lbmFibGUgPSAxOwogI2VuZGlmCiAKIAkvKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFRYL1JYIGRlc2NyaXB0b3JzIGNoYWlucy4gKi8KQEAgLTEzMjIsOSArMTMyNSwxMSBAQAogCiAJLyogSW50ZXJydXB0IG9uIGNvbXBsZXRpdGlvbiBvbmx5IGZvciB0aGUgbGF0ZXN0IHNlZ21lbnQgKi8KIAlwcml2LT5tYWNfdHlwZS0+b3BzLT5jbG9zZV90eF9kZXNjKGRlc2MpOworCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgotCS8qIENsZWFuIElDIHdoaWxlIHVzaW5nIHRpbWVycyAqLwotCXByaXYtPm1hY190eXBlLT5vcHMtPmNsZWFyX3R4X2ljKGRlc2MpOworCS8qIENsZWFuIElDIHdoaWxlIHVzaW5nIHRpbWVyICovCisJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+Y2xlYXJfdHhfaWMoZGVzYyk7CiAjZW5kaWYKIAkvKiBUbyBhdm9pZCByYWlzZSBjb25kaXRpb24gKi8KIAlwcml2LT5tYWNfdHlwZS0+b3BzLT5zZXRfdHhfb3duZXIoZmlyc3QpOwpAQCAtMjAyOCw3ICsyMDMzLDggQEAKIAogI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKIAkJcHJpdi0+dG0tPnRpbWVyX3N0b3AoKTsKLQkJZGlzX2ljID0gMTsKKwkJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKKwkJCWRpc19pYyA9IDE7CiAjZW5kaWYKIAkJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5jCmluZGV4IGI4MzhjNjUuLjY3OWY2MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAogCXN0bW1hY19ydGMgPSBydGNfY2xhc3Nfb3BlbihDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFKTsKIAlpZiAoc3RtbWFjX3J0YyA9PSBOVUxMKSB7Ci0JCXByX2Vycm9yKCJvcGVuIHJ0YyBkZXZpY2UgZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJvcGVuIHJ0YyBkZXZpY2UgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03MSw3ICs3MSw3IEBACiAKIAkvKiBQZXJpb2RpYyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgKi8KIAlpZiAoKHJ0Y19pcnFfc2V0X2ZyZXEoc3RtbWFjX3J0YywgJnN0bW1hY190YXNrLCB0bS0+ZnJlcSkgPCAwKSkgewotCQlwcl9lcnJvcigic2V0IHBlcmlvZGljIGZhaWxlZFxuIik7CisJCXByX2Vycigic2V0IHBlcmlvZGljIGZhaWxlZFxuIik7CiAJCXJ0Y19pcnFfdW5yZWdpc3RlcihzdG1tYWNfcnRjLCAmc3RtbWFjX3Rhc2spOwogCQlydGNfY2xhc3NfY2xvc2Uoc3RtbWFjX3J0Yyk7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuaAppbmRleCBmNzk1Y2FlLi42ODYzNTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmgKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5oCkBAIC0yNiw2ICsyNiw3IEBACiAJdm9pZCAoKnRpbWVyX3N0YXJ0KSAodW5zaWduZWQgaW50IG5ld19mcmVxKTsKIAl2b2lkICgqdGltZXJfc3RvcCkgKHZvaWQpOwogCXVuc2lnbmVkIGludCBmcmVxOworCXVuc2lnbmVkIGludCBlbmFibGU7CiB9OwogCiAvKiBPcGVuIHRoZSBIVyB0aW1lciBkZXZpY2UgYW5kIHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2VzcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCAxOTI3YjNkLi42MTY0MGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKaW5kZXggNmEzYzc1MS4uNzVmYTMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKQEAgLTEwOCw2ICsxMDgsNyBAQAogI2RlZmluZSBJQk1UUl9ERUJVR19NRVNTQUdFUyAwCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaWZkZWYgUENNQ0lBCQkvKiByZXF1aXJlZCBmb3IgaWJtdHJfY3MuYyB0byBidWlsZCAqLwogI3VuZGVmIE1PRFVMRQkJLyogeWVzLCByZWFsbHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCBkNmQzNDUyLi41OTIxZjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCkBAIC0xMDgsNiArMTA4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCmluZGV4IGZhNGU1ODEuLjQzYmMzZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYworKysgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogfQogCiAjZGVmaW5lIERVTVAoYnVmXywgbGVuXykJXAotCWRiZ19kdW1wKF9fTElORV9fLCBfX2Z1bmNfXywgYnVmXywgbGVuXykKKwlkYmdfZHVtcChfX0xJTkVfXywgX19mdW5jX18sICh1bnNpZ25lZCBjaGFyICopYnVmXywgbGVuXykKIAogI2RlZmluZSBEVU1QMShidWZfLCBsZW5fKQkJCVwKIAlkbyB7CQkJCQlcCkBAIC0xMzYzLDcgKzEzNjMsNyBAQAogCS8qIHJlc2V0IHRoZSBydHMgYW5kIGR0ciAqLwogCS8qIGRvIHRoZSBhY3R1YWwgY2xvc2UgKi8KIAlzZXJpYWwtPm9wZW5fY291bnQtLTsKLQlrcmVmX3B1dCgmc2VyaWFsLT5wYXJlbnQtPnJlZiwgaHNvX3NlcmlhbF9yZWZfZnJlZSk7CisKIAlpZiAoc2VyaWFsLT5vcGVuX2NvdW50IDw9IDApIHsKIAkJc2VyaWFsLT5vcGVuX2NvdW50ID0gMDsKIAkJc3Bpbl9sb2NrX2lycSgmc2VyaWFsLT5zZXJpYWxfbG9jayk7CkBAIC0xMzgzLDYgKzEzODMsOCBAQAogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5wYXJlbnQtPmludGVyZmFjZSk7CiAKIAltdXRleF91bmxvY2soJnNlcmlhbC0+cGFyZW50LT5tdXRleCk7CisKKwlrcmVmX3B1dCgmc2VyaWFsLT5wYXJlbnQtPnJlZiwgaHNvX3NlcmlhbF9yZWZfZnJlZSk7CiB9CiAKIC8qIGNsb3NlIHRoZSByZXF1ZXN0ZWQgc2VyaWFsIHBvcnQgKi8KQEAgLTE1MjcsNyArMTUyOSw3IEBACiAJCWRldl93YXJuKCZ1c2ItPmRldiwKIAkJCSAiaHNvIHJlY2VpdmVkIGludmFsaWQgc2VyaWFsIHN0YXRlIG5vdGlmaWNhdGlvblxuIik7CiAJCURVTVAoc2VyaWFsX3N0YXRlX25vdGlmaWNhdGlvbiwKLQkJICAgICBzaXplb2YoaHNvX3NlcmlhbF9zdGF0ZV9ub3RpZmF0aW9uKSkKKwkJICAgICBzaXplb2Yoc3RydWN0IGhzb19zZXJpYWxfc3RhdGVfbm90aWZpY2F0aW9uKSk7CiAJfSBlbHNlIHsKIAogCQlVQVJUX3N0YXRlX2JpdG1hcCA9IGxlMTZfdG9fY3B1KHNlcmlhbF9zdGF0ZV9ub3RpZmljYXRpb24tPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKaW5kZXggMGNhYTgwMC4uZjU2ZGVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCkBAIC0zNjIsMTIgKzM2MiwxMiBAQAogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gaGFsdF9mYWlsX2FuZF9yZWxlYXNlOwogCQl9Ci0JCWRldi0+aGFyZF9tdHUgPSB0bXA7Ci0JCW5ldC0+bXR1ID0gZGV2LT5oYXJkX210dSAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuOwogCQlkZXZfd2FybigmaW50Zi0+ZGV2LAogCQkJICJkZXYgY2FuJ3QgdGFrZSAldSBieXRlIHBhY2tldHMgKG1heCAldSksICIKIAkJCSAiYWRqdXN0aW5nIE1UVSB0byAldVxuIiwKLQkJCSBkZXYtPmhhcmRfbXR1LCB0bXAsIG5ldC0+bXR1KTsKKwkJCSBkZXYtPmhhcmRfbXR1LCB0bXAsIHRtcCAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuKTsKKwkJZGV2LT5oYXJkX210dSA9IHRtcDsKKwkJbmV0LT5tdHUgPSBkZXYtPmhhcmRfbXR1IC0gbmV0LT5oYXJkX2hlYWRlcl9sZW47CiAJfQogCiAJLyogUkVWSVNJVDogIHBlcmlwaGVyYWwgImFsaWdubWVudCIgcmVxdWVzdCBpcyBpZ25vcmVkIC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IGFkZTViMzQuLjUyYWY1MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTIxMCwzMiArMjEwLDI5IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnZldGhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZldGhfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZGV2X3N0YXRzOwogCWludCBjcHU7Ci0Jc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzLCB0b3RhbCA9IHswfTsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWRldl9zdGF0cyA9ICZkZXYtPnN0YXRzOwogCi0JZGV2X3N0YXRzLT5yeF9wYWNrZXRzID0gMDsKLQlkZXZfc3RhdHMtPnR4X3BhY2tldHMgPSAwOwotCWRldl9zdGF0cy0+cnhfYnl0ZXMgPSAwOwotCWRldl9zdGF0cy0+dHhfYnl0ZXMgPSAwOwotCWRldl9zdGF0cy0+dHhfZHJvcHBlZCA9IDA7Ci0JZGV2X3N0YXRzLT5yeF9kcm9wcGVkID0gMDsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdGF0cyA9IHBlcl9jcHVfcHRyKHByaXYtPnN0YXRzLCBjcHUpOwogCi0JCWRldl9zdGF0cy0+cnhfcGFja2V0cyArPSBzdGF0cy0+cnhfcGFja2V0czsKLQkJZGV2X3N0YXRzLT50eF9wYWNrZXRzICs9IHN0YXRzLT50eF9wYWNrZXRzOwotCQlkZXZfc3RhdHMtPnJ4X2J5dGVzICs9IHN0YXRzLT5yeF9ieXRlczsKLQkJZGV2X3N0YXRzLT50eF9ieXRlcyArPSBzdGF0cy0+dHhfYnl0ZXM7Ci0JCWRldl9zdGF0cy0+dHhfZHJvcHBlZCArPSBzdGF0cy0+dHhfZHJvcHBlZDsKLQkJZGV2X3N0YXRzLT5yeF9kcm9wcGVkICs9IHN0YXRzLT5yeF9kcm9wcGVkOworCQl0b3RhbC5yeF9wYWNrZXRzICs9IHN0YXRzLT5yeF9wYWNrZXRzOworCQl0b3RhbC50eF9wYWNrZXRzICs9IHN0YXRzLT50eF9wYWNrZXRzOworCQl0b3RhbC5yeF9ieXRlcyAgICs9IHN0YXRzLT5yeF9ieXRlczsKKwkJdG90YWwudHhfYnl0ZXMgICArPSBzdGF0cy0+dHhfYnl0ZXM7CisJCXRvdGFsLnR4X2Ryb3BwZWQgKz0gc3RhdHMtPnR4X2Ryb3BwZWQ7CisJCXRvdGFsLnJ4X2Ryb3BwZWQgKz0gc3RhdHMtPnJ4X2Ryb3BwZWQ7CiAJfQorCWRldi0+c3RhdHMucnhfcGFja2V0cyA9IHRvdGFsLnJ4X3BhY2tldHM7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzID0gdG90YWwudHhfcGFja2V0czsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICAgPSB0b3RhbC5yeF9ieXRlczsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICAgPSB0b3RhbC50eF9ieXRlczsKKwlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQgPSB0b3RhbC50eF9kcm9wcGVkOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCA9IHRvdGFsLnJ4X2Ryb3BwZWQ7CiAKLQlyZXR1cm4gZGV2X3N0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogc3RhdGljIGludCB2ZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCBiYjhiNTJkLi5iOWUwMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vYzEwMS5jIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwppbmRleCA5NjkzYjBmLi4wYmQ4OThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vYzEwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCmluZGV4IDY2MzYwYTIuLmUyYzMzYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwpAQCAtNzYsNiArNzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCmluZGV4IDI1NzNjMTguLmNkOGNiOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCkBAIC04NCw2ICs4NCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpLCBhbmQgb3RoZXIgdXNlZnVsIHN0dWZmICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CS8qIGlubGluZSBtZW1zZXQoKSwgZXRjLiAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgkJLyoga21hbGxvYygpLCBrZnJlZSgpICovCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KICNpbmNsdWRlIDxsaW51eC93YW5yb3V0ZXIuaD4JLyogV0FOIHJvdXRlciBkZWZpbml0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwppbmRleCA4MWM4YWVjLi4wN2QwMGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYworKysgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwpAQCAtODEsNiArODEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwppbmRleCAzZTkwZWI4Li5iZWRhMzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKaW5kZXggODNkYTU5Ni4uNThjNjY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL24yLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCmluZGV4IGE1MmYyOWMuLmYxMzQwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCmluZGV4IGRiYmYwZDEuLjliOTA0NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJ4bWl0LmgiCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIAogc3RhdGljIHUxNiBnZW5lcmF0ZV9jb29raWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCmluZGV4IDFkOTIyM2IuLjRiNjAxNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jCmluZGV4IDExMzE5ZWMuLmFhZjIyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGh5LmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAiYjQzbGVnYWN5LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jCmluZGV4IDZmYTE0YTQuLjRkZmI0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jCkBAIC0xLDYgKzEsNyBAQAogLyogSG9zdCBBUCBkcml2ZXIgSW5mbyBGcmFtZSBwcm9jZXNzaW5nIChwYXJ0IG9mIGhvc3RhcC5vIG1vZHVsZSkgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaG9zdGFwX3dsYW4uaCIKICNpbmNsdWRlICJob3N0YXAuaCIKICNpbmNsdWRlICJob3N0YXBfYXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwppbmRleCAzZjJiZGE4Li45NDE5Y2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCkBAIC0xLDYgKzEsNyBAQAogLyogaW9jdGwoKSAobW9zdGx5IExpbnV4IFdpcmVsZXNzIEV4dGVuc2lvbnMpIHJvdXRpbmVzIGZvciBIb3N0IEFQIGRyaXZlciAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggMGQzMGE5ZS4uYTZjYTUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpcHcyMjAwLmgiCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDIzMWM4MzMuLmYwNTliNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IGEyMmEwNTAuLjZmNzAzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IDUyNGU3ZTQuLjZlNmY1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCA4NzdhZjQ0Li45MjFkYzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKaW5kZXggNDg0ZDVjMS4uMmRjOTI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYwppbmRleCA1MzJjOGQ2Li5hNjg1NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCiAjaW5jbHVkZSAiaXdsLWRldi5oIiAvKiBGSVhNRTogcmVtb3ZlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCBjMTg5MDc1Li5mYjliY2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTI4LDYgKzI4LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCiAjaW5jbHVkZSAiaXdsLWRldi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKaW5kZXggODM3YTE5My4uZDAwYTgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMKaW5kZXggYTU2YTJiMC4uZjNjNTU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYwppbmRleCAyM2I1MmZhLi44NDE1OGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaXdtLmgiCiAjaW5jbHVkZSAiYnVzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL21haW4uYwppbmRleCBkNjY4ZTQ3Li4yMjJlYjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9tYWluLmMKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwppbmRleCA0MGRiY2JjLi43NzFhMzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwpAQCAtMzgsNiArMzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCmluZGV4IDY4NTA5ODEuLjBhMzI0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImhvc3QuaCIKICNpbmNsdWRlICJob3N0Y21kLmgiCiAjaW5jbHVkZSAiZGVjbC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKaW5kZXggNGMwMThmNy4uOGMzNzY2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwpAQCAtMyw2ICszLDcgQEAKICAgKi8KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJob3N0Y21kLmgiCiAjaW5jbHVkZSAicmFkaW90YXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCmluZGV4IDRjOTdjNmEuLmJjMDg0NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwpAQCAtMTksNiArMTksNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwppbmRleCBlMjZkN2IzLi4yNTA1YmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKaW5kZXggZjdjNjc3ZS4uNjlkMmY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA4OGNkNThlLi4xYzg4YzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtMjg3OSw3ICsyODc5LDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGNoYXIgcHJvY19lc3NpZFszM107Ci0JaW50IGxlbiA9IGNvdW50OworCXVuc2lnbmVkIGludCBsZW4gPSBjb3VudDsKIAogCWlmIChsZW4gPiAzMikKIAkJbGVuID0gMzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCmluZGV4IDdiM2VlOGMuLjY4YmM5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX21kaW8uYyBiL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCmluZGV4IGJhY2FhNTMuLjRiMjJiYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCisrKyBiL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCkBAIC05Nyw2ICs5NywxMiBAQAogfQogRVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX3JlZ2lzdGVyKTsKIAorLyogSGVscGVyIGZ1bmN0aW9uIGZvciBvZl9waHlfZmluZF9kZXZpY2UgKi8KK3N0YXRpYyBpbnQgb2ZfcGh5X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcGh5X25wKQoreworCXJldHVybiBkZXZfYXJjaGRhdGFfZ2V0X25vZGUoJmRldi0+YXJjaGRhdGEpID09IHBoeV9ucDsKK30KKwogLyoqCiAgKiBvZl9waHlfZmluZF9kZXZpY2UgLSBHaXZlIGEgUEhZIG5vZGUsIGZpbmQgdGhlIHBoeV9kZXZpY2UKICAqIEBwaHlfbnA6IFBvaW50ZXIgdG8gdGhlIHBoeSdzIGRldmljZSB0cmVlIG5vZGUKQEAgLTEwNiwxNSArMTEyLDEwIEBACiBzdHJ1Y3QgcGh5X2RldmljZSAqb2ZfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25wKQogewogCXN0cnVjdCBkZXZpY2UgKmQ7Ci0JaW50IG1hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcGh5X25wKQotCXsKLQkJcmV0dXJuIGRldl9hcmNoZGF0YV9nZXRfbm9kZSgmZGV2LT5hcmNoZGF0YSkgPT0gcGh5X25wOwotCX0KLQogCWlmICghcGh5X25wKQogCQlyZXR1cm4gTlVMTDsKIAotCWQgPSBidXNfZmluZF9kZXZpY2UoJm1kaW9fYnVzX3R5cGUsIE5VTEwsIHBoeV9ucCwgbWF0Y2gpOworCWQgPSBidXNfZmluZF9kZXZpY2UoJm1kaW9fYnVzX3R5cGUsIE5VTEwsIHBoeV9ucCwgb2ZfcGh5X21hdGNoKTsKIAlyZXR1cm4gZCA/IHRvX3BoeV9kZXZpY2UoZCkgOiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChvZl9waHlfZmluZF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMKaW5kZXggMmI3YWUzNi4uNWRmNjBhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jCkBAIC0zNSwxMiArMzUsMjMgQEAKIC8qIGF0b21pY190IGJlY2F1c2Ugd2FpdF9ldmVudCBjaGVja3MgaXQgb3V0c2lkZSBvZiBidWZmZXJfbXV0ZXggKi8KIHN0YXRpYyBhdG9taWNfdCBidWZmZXJfcmVhZHkgPSBBVE9NSUNfSU5JVCgwKTsKIAotLyogQWRkIGFuIGVudHJ5IHRvIHRoZSBldmVudCBidWZmZXIuIFdoZW4gd2UKLSAqIGdldCBuZWFyIHRvIHRoZSBlbmQgd2Ugd2FrZSB1cCB0aGUgcHJvY2VzcwotICogc2xlZXBpbmcgb24gdGhlIHJlYWQoKSBvZiB0aGUgZmlsZS4KKy8qCisgKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV2ZW50IGJ1ZmZlci4gV2hlbiB3ZSBnZXQgbmVhciB0byB0aGUgZW5kIHdlCisgKiB3YWtlIHVwIHRoZSBwcm9jZXNzIHNsZWVwaW5nIG9uIHRoZSByZWFkKCkgb2YgdGhlIGZpbGUuIFRvIHByb3RlY3QKKyAqIHRoZSBldmVudF9idWZmZXIgdGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2hlbiBidWZmZXJfbXV0ZXgKKyAqIGlzIHNldC4KICAqLwogdm9pZCBhZGRfZXZlbnRfZW50cnkodW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSBhbGwgd29ya3F1ZXVlcyBvciBoYW5kbGVycyBhcmUKKwkgKiBjYW5jZWxlZCBvciBmbHVzaGVkIGJlZm9yZSB0aGUgZXZlbnQgYnVmZmVyIGlzIGZyZWVkLgorCSAqLworCWlmICghZXZlbnRfYnVmZmVyKSB7CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChidWZmZXJfcG9zID09IGJ1ZmZlcl9zaXplKSB7CiAJCWF0b21pY19pbmMoJm9wcm9maWxlX3N0YXRzLmV2ZW50X2xvc3Rfb3ZlcmZsb3cpOwogCQlyZXR1cm47CkBAIC02OSw3ICs4MCw2IEBACiAKIGludCBhbGxvY19ldmVudF9idWZmZXIodm9pZCkKIHsKLQlpbnQgZXJyID0gLUVOT01FTTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9wcm9maWxlZnNfbG9jaywgZmxhZ3MpOwpAQCAtODAsMjEgKzkwLDIyIEBACiAJaWYgKGJ1ZmZlcl93YXRlcnNoZWQgPj0gYnVmZmVyX3NpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJYnVmZmVyX3BvcyA9IDA7CiAJZXZlbnRfYnVmZmVyID0gdm1hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBidWZmZXJfc2l6ZSk7CiAJaWYgKCFldmVudF9idWZmZXIpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogCiB2b2lkIGZyZWVfZXZlbnRfYnVmZmVyKHZvaWQpCiB7CisJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIAl2ZnJlZShldmVudF9idWZmZXIpOwotCisJYnVmZmVyX3BvcyA9IDA7CiAJZXZlbnRfYnVmZmVyID0gTlVMTDsKKwltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CiB9CiAKIApAQCAtMTY3LDYgKzE3OCwxMiBAQAogCiAJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIAorCS8qIE1heSBoYXBwZW4gaWYgdGhlIGJ1ZmZlciBpcyBmcmVlZCBkdXJpbmcgcGVuZGluZyByZWFkcy4gKi8KKwlpZiAoIWV2ZW50X2J1ZmZlcikgeworCQlyZXR2YWwgPSAtRUlOVFI7CisJCWdvdG8gb3V0OworCX0KKwogCWF0b21pY19zZXQoJmJ1ZmZlcl9yZWFkeSwgMCk7CiAKIAlyZXR2YWwgPSAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IDE0YmJhYTEuLmU1ZjhmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTE3NSwxNSArMTc1LDYgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWRyaGQgPSAoc3RydWN0IGFjcGlfZG1hcl9oYXJkd2FyZV91bml0ICopaGVhZGVyOwotCWlmICghZHJoZC0+YWRkcmVzcykgewotCQkvKiBQcm9tb3RlIGFuIGF0dGl0dWRlIG9mIHZpb2xlbmNlIHRvIGEgQklPUyBlbmdpbmVlciB0b2RheSAqLwotCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBETUFSIHJlcG9ydGVkIGF0IGFkZHJlc3MgemVybyFcbiIKLQkJICAgICAiQklPUyB2ZW5kb3I6ICVzOyBWZXI6ICVzOyBQcm9kdWN0IFZlcnNpb246ICVzXG4iLAotCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKLQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAotCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJZG1hcnUgPSBremFsbG9jKHNpemVvZigqZG1hcnUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRtYXJ1KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTM1NCw2ICszNDUsNyBAQAogCXN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqZHJoZDsKIAlzdHJ1Y3QgYWNwaV9kbWFyX3Jlc2VydmVkX21lbW9yeSAqcm1ycjsKIAlzdHJ1Y3QgYWNwaV9kbWFyX2F0c3IgKmF0c3I7CisJc3RydWN0IGFjcGlfZG1hcl9yaHNhICpyaHNhOwogCiAJc3dpdGNoIChoZWFkZXItPnR5cGUpIHsKIAljYXNlIEFDUElfRE1BUl9UWVBFX0hBUkRXQVJFX1VOSVQ6CkBAIC0zNzUsNiArMzY3LDEyIEBACiAJCWF0c3IgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3QgYWNwaV9kbWFyX2F0c3IsIGhlYWRlcik7CiAJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJBVFNSIGZsYWdzOiAlI3hcbiIsIGF0c3ItPmZsYWdzKTsKIAkJYnJlYWs7CisJY2FzZSBBQ1BJX0RNQVJfSEFSRFdBUkVfQUZGSU5JVFk6CisJCXJoc2EgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3QgYWNwaV9kbWFyX3Joc2EsIGhlYWRlcik7CisJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJSSFNBIGJhc2U6ICUjMDE2THggcHJveGltaXR5IGRvbWFpbjogJSN4XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyaHNhLT5iYXNlX2FkZHJlc3MsCisJCSAgICAgICByaHNhLT5wcm94aW1pdHlfZG9tYWluKTsKKwkJYnJlYWs7CiAJfQogfQogCkBAIC00NTksOSArNDU3LDEzIEBACiAJCQlyZXQgPSBkbWFyX3BhcnNlX29uZV9hdHNyKGVudHJ5X2hlYWRlcik7CiAjZW5kaWYKIAkJCWJyZWFrOworCQljYXNlIEFDUElfRE1BUl9IQVJEV0FSRV9BRkZJTklUWToKKwkJCS8qIFdlIGRvbid0IGRvIGFueXRoaW5nIHdpdGggUkhTQSAoeWV0PykgKi8KKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKLQkJCQkiVW5rbm93biBETUFSIHN0cnVjdHVyZSB0eXBlXG4iKTsKKwkJCQkiVW5rbm93biBETUFSIHN0cnVjdHVyZSB0eXBlICVkXG4iLAorCQkJCWVudHJ5X2hlYWRlci0+dHlwZSk7CiAJCQlyZXQgPSAwOyAvKiBmb3IgZm9yd2FyZCBjb21wYXRpYmlsaXR5ICovCiAJCQlicmVhazsKIAkJfQpAQCAtNTgwLDEyICs1ODIsNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IF9faW5pdCBjaGVja196ZXJvX2FkZHJlc3Modm9pZCkKK3sKKwlzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICpkbWFyOworCXN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyICplbnRyeV9oZWFkZXI7CisJc3RydWN0IGFjcGlfZG1hcl9oYXJkd2FyZV91bml0ICpkcmhkOworCisJZG1hciA9IChzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICopZG1hcl90Ymw7CisJZW50cnlfaGVhZGVyID0gKHN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyICopKGRtYXIgKyAxKTsKKworCXdoaWxlICgoKHVuc2lnbmVkIGxvbmcpZW50cnlfaGVhZGVyKSA8CisJCQkoKCh1bnNpZ25lZCBsb25nKWRtYXIpICsgZG1hcl90YmwtPmxlbmd0aCkpIHsKKwkJLyogQXZvaWQgbG9vcGluZyBmb3JldmVyIG9uIGJhZCBBQ1BJIHRhYmxlcyAqLworCQlpZiAoZW50cnlfaGVhZGVyLT5sZW5ndGggPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKKwkJCQkiSW52YWxpZCAwLWxlbmd0aCBzdHJ1Y3R1cmVcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoZW50cnlfaGVhZGVyLT50eXBlID09IEFDUElfRE1BUl9UWVBFX0hBUkRXQVJFX1VOSVQpIHsKKwkJCWRyaGQgPSAodm9pZCAqKWVudHJ5X2hlYWRlcjsKKwkJCWlmICghZHJoZC0+YWRkcmVzcykgeworCQkJCS8qIFByb21vdGUgYW4gYXR0aXR1ZGUgb2YgdmlvbGVuY2UgdG8gYSBCSU9TIGVuZ2luZWVyIHRvZGF5ICovCisJCQkJV0FSTigxLCAiWW91ciBCSU9TIGlzIGJyb2tlbjsgRE1BUiByZXBvcnRlZCBhdCBhZGRyZXNzIHplcm8hXG4iCisJCQkJICAgICAiQklPUyB2ZW5kb3I6ICVzOyBWZXI6ICVzOyBQcm9kdWN0IFZlcnNpb246ICVzXG4iLAorCQkJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRU5ET1IpLAorCQkJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSwKKwkJCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQllbnRyeV9oZWFkZXIgPSAoKHZvaWQgKillbnRyeV9oZWFkZXIgKyBlbnRyeV9oZWFkZXItPmxlbmd0aCk7CisJfQorCXJldHVybiAxOworfQorCiB2b2lkIF9faW5pdCBkZXRlY3RfaW50ZWxfaW9tbXUodm9pZCkKIHsKIAlpbnQgcmV0OwogCiAJcmV0ID0gZG1hcl90YWJsZV9kZXRlY3QoKTsKLQorCWlmIChyZXQpCisJCXJldCA9IGNoZWNrX3plcm9fYWRkcmVzcygpOwogCXsKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQlzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICpkbWFyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jCmluZGV4IGE5ZDkyNmIuLmU3YmU2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMKQEAgLTQwNiw3ICs0MDYsNiBAQAogCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQotCWluZm8tPmhhcmR3YXJlX2lkLnN0cmluZ1tzaXplb2YoaW5mby0+aGFyZHdhcmVfaWQubGVuZ3RoKSAtIDFdID0gJ1wwJzsKIAogCWlmIChpbmZvLT5jdXJyZW50X3N0YXR1cyAmJiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCkgJiYKIAkJCSghc3RyY21wKGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZywgSUJNX0hBUkRXQVJFX0lEMSkgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCmluZGV4IDUzODM2MDAuLjljNmE5ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogZm9yIHJlYWQ/IGFuZCB3cml0ZT8gZnVuY3Rpb25zICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIGRlbGF5cyAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogZm9yIHNpZ25hbF9wZW5kaW5nKCkgKi8KIAogI2RlZmluZSBNWV9OQU1FCSJjcHFwaHAiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IDg1NWRkN2MuLjE4NDBhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtNDgsNiArNDgsNyBAQAogCiAjZGVmaW5lIElTX0dGWF9ERVZJQ0UocGRldikgKChwZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkKICNkZWZpbmUgSVNfSVNBX0RFVklDRShwZGV2KSAoKHBkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19CUklER0VfSVNBKQorI2RlZmluZSBJU19BWkFMSUEocGRldikgKChwZGV2KS0+dmVuZG9yID09IDB4ODA4NiAmJiAocGRldiktPmRldmljZSA9PSAweDNhM2UpCiAKICNkZWZpbmUgSU9BUElDX1JBTkdFX1NUQVJUCSgweGZlZTAwMDAwKQogI2RlZmluZSBJT0FQSUNfUkFOR0VfRU5ECSgweGZlZWZmZmZmKQpAQCAtOTQsNiArOTUsNyBAQAogLyogZ2xvYmFsIGlvbW11IGxpc3QsIHNldCBOVUxMIGZvciBpZ25vcmVkIERNQVIgdW5pdHMgKi8KIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfaW9tbXUgKipnX2lvbW11czsKIAorc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3R5bGVyc2J1cmdfaXNvY2godm9pZCk7CiBzdGF0aWMgaW50IHJ3YmZfcXVpcms7CiAKIC8qCkBAIC0xOTM0LDYgKzE5MzYsOSBAQAogfQogCiBzdGF0aWMgaW50IGlvbW11X2lkZW50aXR5X21hcHBpbmc7CisjZGVmaW5lIElERU5UTUFQX0FMTAkJMQorI2RlZmluZSBJREVOVE1BUF9HRlgJCTIKKyNkZWZpbmUgSURFTlRNQVBfQVpBTElBCQk0CiAKIHN0YXRpYyBpbnQgaW9tbXVfZG9tYWluX2lkZW50aXR5X21hcChzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCwKQEAgLTIxNTEsOCArMjE1NiwxNCBAQAogCiBzdGF0aWMgaW50IGlvbW11X3Nob3VsZF9pZGVudGl0eV9tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBzdGFydHVwKQogewotCWlmIChpb21tdV9pZGVudGl0eV9tYXBwaW5nID09IDIpCi0JCXJldHVybiBJU19HRlhfREVWSUNFKHBkZXYpOworCWlmICgoaW9tbXVfaWRlbnRpdHlfbWFwcGluZyAmIElERU5UTUFQX0FaQUxJQSkgJiYgSVNfQVpBTElBKHBkZXYpKQorCQlyZXR1cm4gMTsKKworCWlmICgoaW9tbXVfaWRlbnRpdHlfbWFwcGluZyAmIElERU5UTUFQX0dGWCkgJiYgSVNfR0ZYX0RFVklDRShwZGV2KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIShpb21tdV9pZGVudGl0eV9tYXBwaW5nICYgSURFTlRNQVBfQUxMKSkKKwkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIFdlIHdhbnQgdG8gc3RhcnQgb2ZmIHdpdGggYWxsIGRldmljZXMgaW4gdGhlIDE6MSBkb21haW4sIGFuZApAQCAtMjMzMiwxMSArMjM0MywxNCBAQAogCX0KIAogCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpCi0JCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAxOworCQlpb21tdV9pZGVudGl0eV9tYXBwaW5nIHw9IElERU5UTUFQX0FMTDsKKwogI2lmZGVmIENPTkZJR19ETUFSX0JST0tFTl9HRlhfV0EKLQllbHNlCi0JCWlvbW11X2lkZW50aXR5X21hcHBpbmcgPSAyOworCWlvbW11X2lkZW50aXR5X21hcHBpbmcgfD0gSURFTlRNQVBfR0ZYOwogI2VuZGlmCisKKwljaGVja190eWxlcnNidXJnX2lzb2NoKCk7CisKIAkvKgogCSAqIElmIHBhc3MgdGhyb3VnaCBpcyBub3Qgc2V0IG9yIG5vdCBlbmFibGVkLCBzZXR1cCBjb250ZXh0IGVudHJpZXMgZm9yCiAJICogaWRlbnRpdHkgbWFwcGluZ3MgZm9yIHJtcnIsIGdmeCwgYW5kIGlzYSBhbmQgbWF5IGZhbGwgYmFjayB0byBzdGF0aWMKQEAgLTI3NTMsNyArMjc2NywxNSBAQAogCiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7Ci0JZmxhZ3MgJj0gfihHRlBfRE1BIHwgR0ZQX0RNQTMyKTsKKworCWlmICghaW9tbXVfbm9fbWFwcGluZyhod2RldikpCisJCWZsYWdzICY9IH4oR0ZQX0RNQSB8IEdGUF9ETUEzMik7CisJZWxzZSBpZiAoaHdkZXYtPmNvaGVyZW50X2RtYV9tYXNrIDwgZG1hX2dldF9yZXF1aXJlZF9tYXNrKGh3ZGV2KSkgeworCQlpZiAoaHdkZXYtPmNvaGVyZW50X2RtYV9tYXNrIDwgRE1BX0JJVF9NQVNLKDMyKSkKKwkJCWZsYWdzIHw9IEdGUF9ETUE7CisJCWVsc2UKKwkJCWZsYWdzIHw9IEdGUF9ETUEzMjsKKwl9CiAKIAl2YWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhmbGFncywgb3JkZXIpOwogCWlmICghdmFkZHIpCkBAIC0zMTkzLDYgKzMyMTUsMzMgQEAKIH0KICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIAorLyoKKyAqIEhlcmUgd2Ugb25seSByZXNwb25kIHRvIGFjdGlvbiBvZiB1bmJvdW5kIGRldmljZSBmcm9tIGRyaXZlci4KKyAqCisgKiBBZGRlZCBkZXZpY2UgaXMgbm90IGF0dGFjaGVkIHRvIGl0cyBETUFSIGRvbWFpbiBoZXJlIHlldC4gVGhhdCB3aWxsIGhhcHBlbgorICogd2hlbiBtYXBwaW5nIHRoZSBkZXZpY2UgdG8gaW92YS4KKyAqLworc3RhdGljIGludCBkZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47CisKKwlkb21haW4gPSBmaW5kX2RvbWFpbihwZGV2KTsKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoYWN0aW9uID09IEJVU19OT1RJRllfVU5CT1VORF9EUklWRVIgJiYgIWlvbW11X3Bhc3NfdGhyb3VnaCkKKwkJZG9tYWluX3JlbW92ZV9vbmVfZGV2X2luZm8oZG9tYWluLCBwZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRldmljZV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGRldmljZV9ub3RpZmllciwKK307CisKIGludCBfX2luaXQgaW50ZWxfaW9tbXVfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwpAQCAtMzI0NSw2ICszMjk0LDggQEAKIAogCXJlZ2lzdGVyX2lvbW11KCZpbnRlbF9pb21tdV9vcHMpOwogCisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwY2lfYnVzX3R5cGUsICZkZXZpY2VfbmIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2NzAsMyArMzcyMSw2MSBAQAogfQogCiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyYTQwLCBxdWlya19pb21tdV9yd2JmKTsKKworLyogT24gVHlsZXJzYnVyZyBjaGlwc2V0cywgc29tZSBCSU9TZXMgaGF2ZSBiZWVuIGtub3duIHRvIGVuYWJsZSB0aGUKKyAgIElTT0NIIERNQVIgdW5pdCBmb3IgdGhlIEF6YWxpYSBzb3VuZCBkZXZpY2UsIGJ1dCBub3QgZ2l2ZSBpdCBhbnkKKyAgIFRMQiBlbnRyaWVzLCB3aGljaCBjYXVzZXMgaXQgdG8gZGVhZGxvY2suIENoZWNrIGZvciB0aGF0LiAgV2UgZG8KKyAgIHRoaXMgaW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBpbml0X2RtYXJzKCksIGluc3RlYWQgb2YgaW4gYSBQQ0kKKyAgIHF1aXJrLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcHJpbnQgdGhlIG9ibm94aW91cyAiQklPUyBicm9rZW4iCisgICBtZXNzYWdlIGlmIFZULWQgaXMgYWN0dWFsbHkgZGlzYWJsZWQuCisqLworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3R5bGVyc2J1cmdfaXNvY2godm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1aW50MzJfdCB2dGlzb2NoY3RybDsKKworCS8qIElmIHRoZXJlJ3Mgbm8gQXphbGlhIGluIHRoZSBzeXN0ZW0gYW55d2F5LCBmb3JnZXQgaXQuICovCisJcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4M2EzZSwgTlVMTCk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm47CisJcGNpX2Rldl9wdXQocGRldik7CisKKwkvKiBTeXN0ZW0gTWFuYWdlbWVudCBSZWdpc3RlcnMuIE1pZ2h0IGJlIGhpZGRlbiwgaW4gd2hpY2ggY2FzZQorCSAgIHdlIGNhbid0IGRvIHRoZSBzYW5pdHkgY2hlY2suIEJ1dCB0aGF0J3MgT0ssIGJlY2F1c2UgdGhlCisJICAga25vd24tYnJva2VuIEJJT1NlcyBfZG9uJ3RfIGFjdHVhbGx5IGhpZGUgaXQsIHNvIGZhci4gKi8KKwlwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgzNDJlLCBOVUxMKTsKKwlpZiAoIXBkZXYpCisJCXJldHVybjsKKworCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHgxODgsICZ2dGlzb2NoY3RybCkpIHsKKwkJcGNpX2Rldl9wdXQocGRldik7CisJCXJldHVybjsKKwl9CisKKwlwY2lfZGV2X3B1dChwZGV2KTsKKworCS8qIElmIEF6YWxpYSBETUEgaXMgcm91dGVkIHRvIHRoZSBub24taXNvY2ggRE1BUiB1bml0LCBmaW5lLiAqLworCWlmICh2dGlzb2NoY3RybCAmIDEpCisJCXJldHVybjsKKworCS8qIERyb3AgYWxsIGJpdHMgb3RoZXIgdGhhbiB0aGUgbnVtYmVyIG9mIFRMQiBlbnRyaWVzICovCisJdnRpc29jaGN0cmwgJj0gMHgxYzsKKworCS8qIElmIHdlIGhhdmUgdGhlIHJlY29tbWVuZGVkIG51bWJlciBvZiBUTEIgZW50cmllcyAoMTYpLCBmaW5lLiAqLworCWlmICh2dGlzb2NoY3RybCA9PSAweDEwKQorCQlyZXR1cm47CisKKwkvKiBaZXJvIFRMQiBlbnRyaWVzPyBZb3UgZ2V0IHRvIHJpZGUgdGhlIHNob3J0IGJ1cyB0byBzY2hvb2wuICovCisJaWYgKCF2dGlzb2NoY3RybCkgeworCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBETUEgcm91dGVkIHRvIElTT0NIIERNQVIgdW5pdCBidXQgbm8gVExCIHNwYWNlLlxuIgorCQkgICAgICJCSU9TIHZlbmRvcjogJXM7IFZlcjogJXM7IFByb2R1Y3QgVmVyc2lvbjogJXNcbiIsCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRU5ET1IpLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVSU0lPTiksCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9WRVJTSU9OKSk7CisJCWlvbW11X2lkZW50aXR5X21hcHBpbmcgfD0gSURFTlRNQVBfQVpBTElBOworCQlyZXR1cm47CisJfQorCQorCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQVI6IFJlY29tbWVuZGVkIFRMQiBlbnRyaWVzIGZvciBJU09DSCB1bml0IGlzIDE2OyB5b3VyIEJJT1Mgc2V0ICVkXG4iLAorCSAgICAgICB2dGlzb2NoY3RybCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDZlZGVjZmYuLjRlNGMyOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC01MTMsNyArNTEzLDExIEBACiAJZWxzZSBpZiAoc3RhdGUgPT0gUENJX0QyIHx8IGRldi0+Y3VycmVudF9zdGF0ZSA9PSBQQ0lfRDIpCiAJCXVkZWxheShQQ0lfUE1fRDJfREVMQVkpOwogCi0JZGV2LT5jdXJyZW50X3N0YXRlID0gc3RhdGU7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBkZXYtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCAmcG1jc3IpOworCWRldi0+Y3VycmVudF9zdGF0ZSA9IChwbWNzciAmIFBDSV9QTV9DVFJMX1NUQVRFX01BU0spOworCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgIT0gc3RhdGUgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlkZXZfaW5mbygmZGV2LT5kZXYsICJSZWZ1c2VkIHRvIGNoYW5nZSBwb3dlciBzdGF0ZSwgIgorCQkJImN1cnJlbnRseSBpbiBEJWRcbiIsIGRldi0+Y3VycmVudF9zdGF0ZSk7CiAKIAkvKiBBY2NvcmRpbmcgdG8gc2VjdGlvbiA1LjQuMSBvZiB0aGUgIlBDSSBCVVMgUE9XRVIgTUFOQUdFTUVOVAogCSAqIElOVEVSRkFDRSBTUEVDSUZJQ0FUSU9OLCBSRVYuIDEuMiIsIGEgZGV2aWNlIHRyYW5zaXRpb25pbmcKQEAgLTI1NDIsMTAgKzI1NDYsMTAgQEAKIAogLyoqCiAgKiBwY2lfc2V0X3ZnYV9zdGF0ZSAtIHNldCBWR0EgZGVjb2RlIHN0YXRlIG9uIGRldmljZSBhbmQgcGFyZW50cyBpZiByZXF1ZXN0ZWQKLSAqIEBkZXYgdGhlIFBDSSBkZXZpY2UKLSAqIEBkZWNvZGUgLSB0cnVlID0gZW5hYmxlIGRlY29kaW5nLCBmYWxzZSA9IGRpc2FibGUgZGVjb2RpbmcKLSAqIEBjb21tYW5kX2JpdHMgUENJX0NPTU1BTkRfSU8gYW5kL29yIFBDSV9DT01NQU5EX01FTU9SWQotICogQGNoYW5nZV9icmlkZ2UgLSB0cmF2ZXJzZSBhbmNlc3RvcnMgYW5kIGNoYW5nZSBicmlkZ2VzCisgKiBAZGV2OiB0aGUgUENJIGRldmljZQorICogQGRlY29kZTogdHJ1ZSA9IGVuYWJsZSBkZWNvZGluZywgZmFsc2UgPSBkaXNhYmxlIGRlY29kaW5nCisgKiBAY29tbWFuZF9iaXRzOiBQQ0lfQ09NTUFORF9JTyBhbmQvb3IgUENJX0NPTU1BTkRfTUVNT1JZCisgKiBAY2hhbmdlX2JyaWRnZTogdHJhdmVyc2UgYW5jZXN0b3JzIGFuZCBjaGFuZ2UgYnJpZGdlcwogICovCiBpbnQgcGNpX3NldF92Z2Ffc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBkZWNvZGUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIGJvb2wgY2hhbmdlX2JyaWRnZSkKQEAgLTI3MTksMTcgKzI3MjMsNiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwY2lfaW5pdCh2b2lkKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwotCi0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7Ci0JCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBkZXYpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoY2hhciAqc3RyKQogewogCXdoaWxlIChzdHIpIHsKQEAgLTI3NjcsOCArMjc2MCw2IEBACiB9CiBlYXJseV9wYXJhbSgicGNpIiwgcGNpX3NldHVwKTsKIAotZGV2aWNlX2luaXRjYWxsKHBjaV9pbml0KTsKLQogRVhQT1JUX1NZTUJPTChwY2lfcmVlbmFibGVfZGV2aWNlKTsKIEVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9kZXZpY2VfaW8pOwogRVhQT1JUX1NZTUJPTChwY2lfZW5hYmxlX2RldmljZV9tZW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwppbmRleCAyY2U4ZjljLi40MGMzY2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CkBAIC01Miw3ICs1Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyIGFlcmRyaXZlciA9IHsKIAkubmFtZQkJPSAiYWVyIiwKLQkucG9ydF90eXBlCT0gUENJRV9BTllfUE9SVCwKKwkucG9ydF90eXBlCT0gUENJRV9SQ19QT1JULAogCS5zZXJ2aWNlCT0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSLAogCiAJLnByb2JlCQk9IGFlcl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKaW5kZXggNzQ1NDAyZS4uNWI3MDU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKQEAgLTY1Niw4ICs2NTYsMTAgQEAKIAlmcmVlX2xpbmtfc3RhdGUobGluayk7CiAKIAkvKiBSZWNoZWNrIGxhdGVuY2llcyBhbmQgY29uZmlndXJlIHVwc3RyZWFtIGxpbmtzICovCi0JcGNpZV91cGRhdGVfYXNwbV9jYXBhYmxlKHJvb3QpOwotCXBjaWVfY29uZmlnX2FzcG1fcGF0aChwYXJlbnRfbGluayk7CisJaWYgKHBhcmVudF9saW5rKSB7CisJCXBjaWVfdXBkYXRlX2FzcG1fY2FwYWJsZShyb290KTsKKwkJcGNpZV9jb25maWdfYXNwbV9wYXRoKHBhcmVudF9saW5rKTsKKwl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhc3BtX2xvY2spOwogCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwppbmRleCA2ZGY1Yzk4Li5mNjM1ZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCkBAIC0zMCw3ICszMCw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIGdsb2JhbCBkYXRhICovCi1zdGF0aWMgY29uc3QgY2hhciBkZXZpY2VfbmFtZVtdID0gInBjaWVwb3J0LWRyaXZlciI7CiAKIHN0YXRpYyBpbnQgcGNpZV9wb3J0ZHJ2X3Jlc3RvcmVfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CkBAIC0yNjIsNyArMjYxLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2llX3BvcnRkcml2ZXIgPSB7Ci0JLm5hbWUJCT0gKGNoYXIgKilkZXZpY2VfbmFtZSwKKwkubmFtZQkJPSAicGNpZXBvcnQiLAogCS5pZF90YWJsZQk9ICZwb3J0X3BjaV9pZHNbMF0sCiAKIAkucHJvYmUJCT0gcGNpZV9wb3J0ZHJ2X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA2MDk5ZmFjLi4yNDVkMmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtNjcwLDYgKzY3MCwyNSBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM1LAlxdWlya192dDgyMzVfYWNwaSk7CiAKKy8qCisgKiBUSSBYSU8yMDAwYSBQQ0llLVBDSSBCcmlkZ2UgZXJyb25lb3VzbHkgcmVwb3J0cyBpdCBzdXBwb3J0cyBmYXN0IGJhY2stdG8tYmFjazoKKyAqCURpc2FibGUgZmFzdCBiYWNrLXRvLWJhY2sgb24gdGhlIHNlY29uZGFyeSBidXMgc2VnbWVudAorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfeGlvMjAwMGEoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1MTYgY29tbWFuZDsKKworCWRldl93YXJuKCZkZXYtPmRldiwgIlRJIFhJTzIwMDBhIHF1aXJrIGRldGVjdGVkOyAiCisJCSJzZWNvbmRhcnkgYnVzIGZhc3QgYmFjay10by1iYWNrIHRyYW5zZmVycyBkaXNhYmxlZFxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwZGV2LCAmZGV2LT5zdWJvcmRpbmF0ZS0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKKwkJaWYgKGNvbW1hbmQgJiBQQ0lfQ09NTUFORF9GQVNUX0JBQ0spCisJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsIGNvbW1hbmQgJiB+UENJX0NPTU1BTkRfRkFTVF9CQUNLKTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJX1hJTzIwMDBBLAorCQkJcXVpcmtfeGlvMjAwMGEpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDIAogCkBAIC05OTAsNyArMTAwOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19hbWRfaWRlX21vZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JLyogc2V0IFNCWDAwIFNBVEEgaW4gSURFIG1vZGUgdG8gQUhDSSBtb2RlICovCisJLyogc2V0IFNCWDAwL0h1ZHNvbi0yIFNBVEEgaW4gSURFIG1vZGUgdG8gQUhDSSBtb2RlICovCiAJdTggdG1wOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX0RFVklDRSwgJnRtcCk7CkBAIC0xMDA5LDggKzEwMjgsOCBAQAogREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKLURFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiAKIC8qCiAgKglTZXJ2ZXJ3b3JrcyBDU0I1IElERSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IG5hdGl2ZSBtb2RlCkBAIC0yNTcyLDYgKzI1OTEsMTkgQEAKIAl9CiAJcGNpX2RvX2ZpeHVwcyhkZXYsIHN0YXJ0LCBlbmQpOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBwY2lfYXBwbHlfZmluYWxfcXVpcmtzKHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CisKKwl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKKwkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsX3N5bmMocGNpX2FwcGx5X2ZpbmFsX3F1aXJrcyk7CiAjZWxzZQogdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldikge30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwppbmRleCA3MDZmODJkLi5jNTQ1MjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwpAQCAtMjA1LDQzICsyMDUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZiAwCi1pbnQgcGNpX2Fzc2lnbl9yZXNvdXJjZV9maXhlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pCi17Ci0Jc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZSArIHJlc25vOwotCXVuc2lnbmVkIGludCB0eXBlX21hc2s7Ci0JaW50IGksIHJldCA9IC1FQlVTWTsKLQotCXR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyID0gYnVzLT5yZXNvdXJjZVtpXTsKLQkJaWYgKCFyKQotCQkJY29udGludWU7Ci0KLQkJLyogdHlwZV9tYXNrIG11c3QgbWF0Y2ggKi8KLQkJaWYgKChyZXMtPmZsYWdzIF4gci0+ZmxhZ3MpICYgdHlwZV9tYXNrKQotCQkJY29udGludWU7Ci0KLQkJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZShyLCByZXMpOwotCi0JCWlmIChyZXQgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlICVzIHJlc291cmNlICVwUlxuIiwKLQkJCXJlc25vLCByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsIHJlcyk7Ci0JfSBlbHNlIGlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7Ci0JCXBjaV91cGRhdGVfcmVzb3VyY2UoZGV2LCByZXNubyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9hc3NpZ25fcmVzb3VyY2VfZml4ZWQpOwotI2VuZGlmCi0KIC8qIFNvcnQgcmVzb3VyY2VzIGJ5IGFsaWdubWVudCAqLwogdm9pZCBwZGV2X3NvcnRfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZV9saXN0ICpoZWFkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKaW5kZXggZmJmOTY1Yi4uMTdmMzhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCkBAIC0xOTIsNiArMTkyLDEwIEBACiAJdHJpc3RhdGUgIkF1MXgwMCBwY21jaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPQ19BVTFYMDAgJiYgUENNQ0lBCiAKK2NvbmZpZyBQQ01DSUFfQkNNNjNYWAorCXRyaXN0YXRlICJiY202M3h4IHBjbWNpYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQkNNNjNYWCAmJiBQQ01DSUEKKwogY29uZmlnIFBDTUNJQV9TQTExMDAKIAl0cmlzdGF0ZSAiU0ExMTAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUk0gJiYgQVJDSF9TQTExMDAgJiYgUENNQ0lBCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCmluZGV4IDA0NzM5NGQuLmEwM2EzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCkBAIC0yNyw2ICsyNyw3IEBACiBvYmotJChDT05GSUdfTTMyUl9QQ0MpCQkJCSs9IG0zMnJfcGNjLm8KIG9iai0kKENPTkZJR19NMzJSX0NGQykJCQkJKz0gbTMycl9jZmMubwogb2JqLSQoQ09ORklHX1BDTUNJQV9BVTFYMDApCQkJKz0gYXUxeDAwX3NzLm8KK29iai0kKENPTkZJR19QQ01DSUFfQkNNNjNYWCkJCQkrPSBiY202M3h4X3BjbWNpYS5vCiBvYmotJChDT05GSUdfUENNQ0lBX1ZSQzQxNzEpCQkJKz0gdnJjNDE3MV9jYXJkLm8KIG9iai0kKENPTkZJR19QQ01DSUFfVlJDNDE3MykJCQkrPSB2cmM0MTczX2NhcmR1Lm8KIG9iai0kKENPTkZJR19PTUFQX0NGKQkJCQkrPSBvbWFwX2NmLm8KQEAgLTcxLDYgKzcyLDcgQEAKIHB4YTJ4eC1vYmotJChDT05GSUdfQVJDSF9WSVBFUikJCQkrPSBweGEyeHhfdmlwZXIubwogcHhhMnh4LW9iai0kKENPTkZJR19UUklaRVBTX1BDTUNJQSkJCSs9IHB4YTJ4eF90cml6ZXBzNC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRYKQkJKz0gcHhhMnh4X3BhbG10eC5vCitweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRDKQkJKz0gcHhhMnh4X3BhbG10Yy5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTUxEKQkJKz0gcHhhMnh4X3BhbG1sZC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfRTc0MCkJCQkrPSBweGEyeHhfZTc0MC5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfU1RBUkdBVEUyKQkJKz0gcHhhMnh4X3N0YXJnYXRlMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKaW5kZXggOWUxMTQwZi4uZTFkY2NlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJc3RydWN0IGF0OTFfY2Zfc29ja2V0CSpjZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBhdDkxX2NmX2RhdGEJKmJvYXJkID0gY2YtPmJvYXJkOwogCi0JcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2LCBtZXNnKTsKKwlwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYpOwogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgewogCQllbmFibGVfaXJxX3dha2UoYm9hcmQtPmRldF9waW4pOwogCQlpZiAoYm9hcmQtPmlycV9waW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwppbmRleCA5MDAxMzM0Li4wMjA4ODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKQEAgLTUxNSw3ICs1MTUsNyBAQAogc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzg4YTNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYwpAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgorI2luY2x1ZGUgImJjbTYzeHhfcGNtY2lhLmgiCisKKyNkZWZpbmUgUEZYCSJiY202M3h4X3BjbWNpYTogIgorCisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKy8qIGlmIGNhcmRidXMgaXMgdXNlZCwgcGxhdGZvcm0gZGV2aWNlIG5lZWRzIHJlZmVyZW5jZSB0byBhY3R1YWwgcGNpCisgKiBkZXZpY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqYmNtNjN4eF9jYl9kZXY7CisjZW5kaWYKKworLyoKKyAqIHJlYWQvd3JpdGUgaGVscGVyIGZvciBwY21jaWEgcmVncworICovCitzdGF0aWMgaW5saW5lIHUzMiBwY21jaWFfcmVhZGwoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0LCB1MzIgb2ZmKQoreworCXJldHVybiBiY21fcmVhZGwoc2t0LT5iYXNlICsgb2ZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjbWNpYV93cml0ZWwoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSB1MzIgdmFsLCB1MzIgb2ZmKQoreworCWJjbV93cml0ZWwodmFsLCBza3QtPmJhc2UgKyBvZmYpOworfQorCisvKgorICogVGhpcyBjYWxsYmFjayBzaG91bGQgKHJlLSlpbml0aWFsaXNlIHRoZSBzb2NrZXQsIHR1cm4gb24gc3RhdHVzCisgKiBpbnRlcnJ1cHRzIGFuZCBQQ01DSUEgYnVzLCBhbmQgd2FpdCBmb3IgcG93ZXIgdG8gc3RhYmlsaXNlIHNvIHRoYXQKKyAqIHRoZSBjYXJkIHN0YXR1cyBzaWduYWxzIHJlcG9ydCBjb3JyZWN0bHkuCisgKgorICogSGFyZHdhcmUgY2Fubm90IGRvIHRoYXQuCisgKi8KK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc29ja19pbml0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrKQoreworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBjYWxsYmFjayBzaG91bGQgcmVtb3ZlIHBvd2VyIG9uIHRoZSBzb2NrZXQsIGRpc2FibGUgSVJRcyBmcm9tCisgKiB0aGUgY2FyZCwgdHVybiBvZmYgc3RhdHVzIGludGVycnVwdHMsIGFuZCBkaXNhYmxlIHRoZSBQQ01DSUEgYnVzLgorICoKKyAqIEhhcmR3YXJlIGNhbm5vdCBkbyB0aGF0LgorICovCitzdGF0aWMgaW50IGJjbTYzeHhfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2spCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbXBsZW1lbnRzIHRoZSBzZXRfc29ja2V0KCkgb3BlcmF0aW9uIGZvciB0aGUgaW4ta2VybmVsIFBDTUNJQQorICogc2VydmljZSAoZm9ybWVybHkgU1NfU2V0U29ja2V0IGluIENhcmQgU2VydmljZXMpLiBXZSBtb3JlIG9yCisgKiBsZXNzIHB1bnQgYWxsIG9mIHRoaXMgd29yayBhbmQgbGV0IHRoZSBrZXJuZWwgaGFuZGxlIHRoZSBkZXRhaWxzCisgKiBvZiBwb3dlciBjb25maWd1cmF0aW9uLCByZXNldCwgJmMuIFdlIGFsc28gcmVjb3JkIHRoZSB2YWx1ZSBvZgorICogYHN0YXRlJyBpbiBvcmRlciB0byByZWd1cmdpdGF0ZSBpdCB0byB0aGUgUENNQ0lBIGNvcmUgbGF0ZXIuCisgKi8KK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywKKwkJCQkgICAgIHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCisJc2t0ID0gc29jay0+ZHJpdmVyX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2t0LT5sb2NrLCBmbGFncyk7CisKKwkvKiBub3RlOiBoYXJkd2FyZSBjYW5ub3QgY29udHJvbCBzb2NrZXQgcG93ZXIsIHNvIHdlIHdpbGwKKwkgKiBhbHdheXMgcmVwb3J0IFNTX1BPV0VST04gKi8KKworCS8qIGFwcGx5IHNvY2tldCByZXNldCAqLworCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkKKwkJdmFsIHw9IFBDTUNJQV9DMV9SRVNFVF9NQVNLOworCWVsc2UKKwkJdmFsICY9IH5QQ01DSUFfQzFfUkVTRVRfTUFTSzsKKworCS8qIHJldmVyc2UgcmVzZXQgbG9naWMgZm9yIGNhcmRidXMgY2FyZCAqLworCWlmIChza3QtPmNhcmRfZGV0ZWN0ZWQgJiYgKHNrdC0+Y2FyZF90eXBlICYgQ0FSRF9DQVJEQlVTKSkKKwkJdmFsIF49IFBDTUNJQV9DMV9SRVNFVF9NQVNLOworCisJcGNtY2lhX3dyaXRlbChza3QsIHZhbCwgUENNQ0lBX0MxX1JFRyk7CisKKwkvKiBrZWVwIHJlcXVlc3RlZCBzdGF0ZSBmb3IgZXZlbnQgcmVwb3J0aW5nICovCisJc2t0LT5yZXF1ZXN0ZWRfc3RhdGUgPSAqc3RhdGU7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza3QtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogaWRlbnRpdHkgY2FyZHR5cGUgZnJvbSBWU1sxMl0gaW5wdXQsIENEWzEyXSBpbnB1dCB3aGlsZSBvbmx5IFZTMiBpcworICogZmxvYXRpbmcsIGFuZCBDRFsxMl0gaW5wdXQgd2hpbGUgb25seSBWUzEgaXMgZmxvYXRpbmcKKyAqLworZW51bSB7CisJSU5fVlMxID0gKDEgPDwgMCksCisJSU5fVlMyID0gKDEgPDwgMSksCisJSU5fQ0QxX1ZTMkggPSAoMSA8PCAyKSwKKwlJTl9DRDJfVlMySCA9ICgxIDw8IDMpLAorCUlOX0NEMV9WUzFIID0gKDEgPDwgNCksCisJSU5fQ0QyX1ZTMUggPSAoMSA8PCA1KSwKK307CisKK3N0YXRpYyBjb25zdCB1OCB2c2NkX3RvX2NhcmR0eXBlW10gPSB7CisKKwkvKiBWUzEgZmxvYXQsIFZTMiBmbG9hdCAqLworCVtJTl9WUzEgfCBJTl9WUzJdID0gKENBUkRfUENDQVJEIHwgQ0FSRF81ViksCisKKwkvKiBWUzEgZ3JvdW5kZWQsIFZTMiBmbG9hdCAqLworCVtJTl9WUzJdID0gKENBUkRfUENDQVJEIHwgQ0FSRF81ViB8IENBUkRfM1YpLAorCisJLyogVlMxIGdyb3VuZGVkLCBWUzIgZ3JvdW5kZWQgKi8KKwlbMF0gPSAoQ0FSRF9QQ0NBUkQgfCBDQVJEXzVWIHwgQ0FSRF8zViB8IENBUkRfWFYpLAorCisJLyogVlMxIHRpZWQgdG8gQ0QxLCBWUzIgZmxvYXQgKi8KKwlbSU5fVlMxIHwgSU5fVlMyIHwgSU5fQ0QxX1ZTMUhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfM1YpLAorCisJLyogVlMxIGdyb3VuZGVkLCBWUzIgdGllZCB0byBDRDIgKi8KKwlbSU5fVlMyIHwgSU5fQ0QyX1ZTMkhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfM1YgfCBDQVJEX1hWKSwKKworCS8qIFZTMSB0aWVkIHRvIENEMiwgVlMyIGdyb3VuZGVkICovCisJW0lOX1ZTMSB8IElOX0NEMl9WUzFIXSA9IChDQVJEX0NBUkRCVVMgfCBDQVJEXzNWIHwgQ0FSRF9YViB8IENBUkRfWVYpLAorCisJLyogVlMxIGZsb2F0LCBWUzIgZ3JvdW5kZWQgKi8KKwlbSU5fVlMxXSA9IChDQVJEX1BDQ0FSRCB8IENBUkRfWFYpLAorCisJLyogVlMxIGZsb2F0LCBWUzIgdGllZCB0byBDRDIgKi8KKwlbSU5fVlMxIHwgSU5fVlMyIHwgSU5fQ0QyX1ZTMkhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfM1YpLAorCisJLyogVlMxIGZsb2F0LCBWUzIgdGllZCB0byBDRDEgKi8KKwlbSU5fVlMxIHwgSU5fVlMyIHwgSU5fQ0QxX1ZTMkhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfWFYgfCBDQVJEX1lWKSwKKworCS8qIFZTMSB0aWVkIHRvIENEMiwgVlMyIGZsb2F0ICovCisJW0lOX1ZTMSB8IElOX1ZTMiB8IElOX0NEMl9WUzFIXSA9IChDQVJEX0NBUkRCVVMgfCBDQVJEX1lWKSwKKworCS8qIFZTMiBncm91bmRlZCwgVlMxIGlzIHRpZWQgdG8gQ0QxLCBDRDIgaXMgZ3JvdW5kZWQgKi8KKwlbSU5fVlMxIHwgSU5fQ0QxX1ZTMUhdID0gMCwgLyogaWdub3JlIGNhcmRiYXkgKi8KK307CisKKy8qCisgKiBwb2xsIGhhcmR3YXJlIHRvIGNoZWNrIGNhcmQgaW5zZXJ0aW9uIHN0YXR1cworICovCitzdGF0aWMgdW5zaWduZWQgaW50IF9fZ2V0X3NvY2tldF9zdGF0dXMoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXVuc2lnbmVkIGludCBzdGF0OworCXUzMiB2YWw7CisKKwlzdGF0ID0gMDsKKworCS8qIGNoZWNrIENEIGZvciBjYXJkIHByZXNlbmNlICovCisJdmFsID0gcGNtY2lhX3JlYWRsKHNrdCwgUENNQ0lBX0MxX1JFRyk7CisKKwlpZiAoISh2YWwgJiBQQ01DSUFfQzFfQ0QxX01BU0spICYmICEodmFsICYgUENNQ0lBX0MxX0NEMl9NQVNLKSkKKwkJc3RhdCB8PSBTU19ERVRFQ1Q7CisKKwkvKiBpZiBuZXcgaW5zZXJ0aW9uLCBkZXRlY3QgY2FyZHR5cGUgKi8KKwlpZiAoKHN0YXQgJiBTU19ERVRFQ1QpICYmICFza3QtPmNhcmRfZGV0ZWN0ZWQpIHsKKwkJdW5zaWduZWQgaW50IHN0YXQgPSAwOworCisJCS8qIGZsb2F0IFZTMSwgZmxvYXQgVlMyICovCisJCXZhbCB8PSBQQ01DSUFfQzFfVlMxT0VfTUFTSzsKKwkJdmFsIHw9IFBDTUNJQV9DMV9WUzJPRV9NQVNLOworCQlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzFfUkVHKTsKKworCQkvKiB3YWl0IGZvciBvdXRwdXQgdG8gc3RhYmlsaXplIGFuZCByZWFkIFZTWzEyXSAqLworCQl1ZGVsYXkoMTApOworCQl2YWwgPSBwY21jaWFfcmVhZGwoc2t0LCBQQ01DSUFfQzFfUkVHKTsKKwkJc3RhdCB8PSAodmFsICYgUENNQ0lBX0MxX1ZTMV9NQVNLKSA/IElOX1ZTMSA6IDA7CisJCXN0YXQgfD0gKHZhbCAmIFBDTUNJQV9DMV9WUzJfTUFTSykgPyBJTl9WUzIgOiAwOworCisJCS8qIGRyaXZlIFZTMSBsb3csIGZsb2F0IFZTMiAqLworCQl2YWwgJj0gflBDTUNJQV9DMV9WUzFPRV9NQVNLOworCQl2YWwgfD0gUENNQ0lBX0MxX1ZTMk9FX01BU0s7CisJCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCisJCS8qIHdhaXQgZm9yIG91dHB1dCB0byBzdGFiaWxpemUgYW5kIHJlYWQgQ0RbMTJdICovCisJCXVkZWxheSgxMCk7CisJCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QxX01BU0spID8gSU5fQ0QxX1ZTMkggOiAwOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QyX01BU0spID8gSU5fQ0QyX1ZTMkggOiAwOworCisJCS8qIGZsb2F0IFZTMSwgZHJpdmUgVlMyIGxvdyAqLworCQl2YWwgfD0gUENNQ0lBX0MxX1ZTMU9FX01BU0s7CisJCXZhbCAmPSB+UENNQ0lBX0MxX1ZTMk9FX01BU0s7CisJCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCisJCS8qIHdhaXQgZm9yIG91dHB1dCB0byBzdGFiaWxpemUgYW5kIHJlYWQgQ0RbMTJdICovCisJCXVkZWxheSgxMCk7CisJCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QxX01BU0spID8gSU5fQ0QxX1ZTMUggOiAwOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfQ0QyX01BU0spID8gSU5fQ0QyX1ZTMUggOiAwOworCisJCS8qIGd1ZXNzIGNhcmR0eXBlIGZyb20gYWxsIHRoaXMgKi8KKwkJc2t0LT5jYXJkX3R5cGUgPSB2c2NkX3RvX2NhcmR0eXBlW3N0YXRdOworCQlpZiAoIXNrdC0+Y2FyZF90eXBlKQorCQkJZGV2X2Vycigmc2t0LT5zb2NrZXQuZGV2LCAidW5zdXBwb3J0ZWQgY2FyZCB0eXBlXG4iKTsKKworCQkvKiBkcml2ZSBib3RoIFZTIHBpbiB0byAwIGFnYWluICovCisJCXZhbCAmPSB+KFBDTUNJQV9DMV9WUzFPRV9NQVNLIHwgUENNQ0lBX0MxX1ZTMk9FX01BU0spOworCisJCS8qIGVuYWJsZSBjb3JyZWN0IGxvZ2ljICovCisJCXZhbCAmPSB+KFBDTUNJQV9DMV9FTl9QQ01DSUFfTUFTSyB8IFBDTUNJQV9DMV9FTl9DQVJEQlVTX01BU0spOworCQlpZiAoc2t0LT5jYXJkX3R5cGUgJiBDQVJEX1BDQ0FSRCkKKwkJCXZhbCB8PSBQQ01DSUFfQzFfRU5fUENNQ0lBX01BU0s7CisJCWVsc2UKKwkJCXZhbCB8PSBQQ01DSUFfQzFfRU5fQ0FSREJVU19NQVNLOworCisJCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCX0KKwlza3QtPmNhcmRfZGV0ZWN0ZWQgPSAoc3RhdCAmIFNTX0RFVEVDVCkgPyAxIDogMDsKKworCS8qIHJlcG9ydCBjYXJkIHR5cGUvdm9sdGFnZSAqLworCWlmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfQ0FSREJVUykKKwkJc3RhdCB8PSBTU19DQVJEQlVTOworCWlmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfM1YpCisJCXN0YXQgfD0gU1NfM1ZDQVJEOworCWlmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfWFYpCisJCXN0YXQgfD0gU1NfWFZDQVJEOworCXN0YXQgfD0gU1NfUE9XRVJPTjsKKworCWlmIChncGlvX2dldF92YWx1ZShza3QtPnBkLT5yZWFkeV9ncGlvKSkKKwkJc3RhdCB8PSBTU19SRUFEWTsKKworCXJldHVybiBzdGF0OworfQorCisvKgorICogY29yZSByZXF1ZXN0IHRvIGdldCBjdXJyZW50IHNvY2tldCBzdGF0dXMKKyAqLworc3RhdGljIGludCBiY202M3h4X3BjbWNpYV9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpzdGF0dXMpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCisJc2t0ID0gc29jay0+ZHJpdmVyX2RhdGE7CisKKwlzcGluX2xvY2tfYmgoJnNrdC0+bG9jayk7CisJKnN0YXR1cyA9IF9fZ2V0X3NvY2tldF9zdGF0dXMoc2t0KTsKKwlzcGluX3VubG9ja19iaCgmc2t0LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKgorICogc29ja2V0IHBvbGxpbmcgdGltZXIgY2FsbGJhY2sKKyAqLworc3RhdGljIHZvaWQgYmNtNjN4eF9wY21jaWFfcG9sbCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXVuc2lnbmVkIGludCBzdGF0LCBldmVudHM7CisKKwlza3QgPSAoc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqKWRhdGE7CisKKwlzcGluX2xvY2tfYmgoJnNrdC0+bG9jayk7CisKKwlzdGF0ID0gX19nZXRfc29ja2V0X3N0YXR1cyhza3QpOworCisJLyoga2VlcCBvbmx5IGNoYW5nZWQgYml0cywgYW5kIG1hc2sgd2l0aCByZXF1aXJlZCBvbmUgZnJvbSB0aGUKKwkgKiBjb3JlICovCisJZXZlbnRzID0gKHN0YXQgXiBza3QtPm9sZF9zdGF0dXMpICYgc2t0LT5yZXF1ZXN0ZWRfc3RhdGUuY3NjX21hc2s7CisJc2t0LT5vbGRfc3RhdHVzID0gc3RhdDsKKwlzcGluX3VubG9ja19iaCgmc2t0LT5sb2NrKTsKKworCWlmIChldmVudHMpCisJCXBjbWNpYV9wYXJzZV9ldmVudHMoJnNrdC0+c29ja2V0LCBldmVudHMpOworCisJbW9kX3RpbWVyKCZza3QtPnRpbWVyLAorCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEJDTTYzWFhfUENNQ0lBX1BPTExfUkFURSkpOworfQorCitzdGF0aWMgaW50IGJjbTYzeHhfcGNtY2lhX3NldF9pb19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssCisJCQkJICAgICBzdHJ1Y3QgcGNjYXJkX2lvX21hcCAqbWFwKQoreworCS8qIHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIGNhbGxlZCBieSBwY21jaWEgbGF5ZXIgaWYgc3RhdGljCisJICogbWFwcGluZyBpcyB1c2VkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc2V0X21lbV9tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssCisJCQkJICAgICAgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptYXApCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJc2t0ID0gc29jay0+ZHJpdmVyX2RhdGE7CisJaWYgKG1hcC0+ZmxhZ3MgJiBNQVBfQVRUUklCKQorCQlyZXMgPSBza3QtPmF0dHJfcmVzOworCWVsc2UKKwkJcmVzID0gc2t0LT5jb21tb25fcmVzOworCisJbWFwLT5zdGF0aWNfc3RhcnQgPSByZXMtPnN0YXJ0ICsgbWFwLT5jYXJkX3N0YXJ0OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIGJjbTYzeHhfcGNtY2lhX29wZXJhdGlvbnMgPSB7CisJLmluaXQJCQk9IGJjbTYzeHhfcGNtY2lhX3NvY2tfaW5pdCwKKwkuc3VzcGVuZAkJPSBiY202M3h4X3BjbWNpYV9zdXNwZW5kLAorCS5nZXRfc3RhdHVzCQk9IGJjbTYzeHhfcGNtY2lhX2dldF9zdGF0dXMsCisJLnNldF9zb2NrZXQJCT0gYmNtNjN4eF9wY21jaWFfc2V0X3NvY2tldCwKKwkuc2V0X2lvX21hcAkJPSBiY202M3h4X3BjbWNpYV9zZXRfaW9fbWFwLAorCS5zZXRfbWVtX21hcAkJPSBiY202M3h4X3BjbWNpYV9zZXRfbWVtX21hcCwKK307CisKKy8qCisgKiByZWdpc3RlciBwY21jaWEgc29ja2V0IHRvIGNvcmUKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgYmNtNjN4eF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrOworCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqaXJxX3JlczsKKwl1bnNpZ25lZCBpbnQgcmVnbWVtX3NpemUgPSAwLCBpb21lbV9zaXplID0gMDsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlza3QgPSBremFsbG9jKHNpemVvZigqc2t0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza3QpCisJCXJldHVybiAtRU5PTUVNOworCXNwaW5fbG9ja19pbml0KCZza3QtPmxvY2spOworCXNvY2sgPSAmc2t0LT5zb2NrZXQ7CisJc29jay0+ZHJpdmVyX2RhdGEgPSBza3Q7CisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgcmVzb3VyY2VzIHdlIG5lZWQgKi8KKwlza3QtPmNvbW1vbl9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCXNrdC0+YXR0cl9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDIpOworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCXNrdC0+cGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXNrdC0+Y29tbW9uX3JlcyB8fCAhc2t0LT5hdHRyX3JlcyB8fCAhaXJxX3JlcyB8fCAhc2t0LT5wZCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiByZW1hcCBwY21jaWEgcmVnaXN0ZXJzICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWdtZW1fc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZWdtZW1fc2l6ZSwgImJjbTYzeHhfcGNtY2lhIikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCXNrdC0+cmVnX3JlcyA9IHJlczsKKworCXNrdC0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVnbWVtX3NpemUpOworCWlmICghc2t0LT5iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIHJlbWFwIGlvIHJlZ2lzdGVycyAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMyk7CisJaW9tZW1fc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwlza3QtPmlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIGlvbWVtX3NpemUpOworCWlmICghc2t0LT5pb19iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIHJlc291cmNlcyBhcmUgc3RhdGljICovCisJc29jay0+cmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9zdGF0aWNfb3BzOworCXNvY2stPm9wcyA9ICZiY202M3h4X3BjbWNpYV9vcGVyYXRpb25zOworCXNvY2stPm93bmVyID0gVEhJU19NT0RVTEU7CisJc29jay0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJc29jay0+ZmVhdHVyZXMgPSBTU19DQVBfU1RBVElDX01BUCB8IFNTX0NBUF9QQ0NBUkQ7CisJc29jay0+aW9fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpc2t0LT5pb19iYXNlOworCXNvY2stPnBjaV9pcnEgPSBpcnFfcmVzLT5zdGFydDsKKworI2lmZGVmIENPTkZJR19DQVJEQlVTCisJc29jay0+Y2JfZGV2ID0gYmNtNjN4eF9jYl9kZXY7CisJaWYgKGJjbTYzeHhfY2JfZGV2KQorCQlzb2NrLT5mZWF0dXJlcyB8PSBTU19DQVBfQ0FSREJVUzsKKyNlbmRpZgorCisJLyogYXNzdW1lIGNvbW1vbiAmIGF0dHJpYnV0ZSBtZW1vcnkgaGF2ZSB0aGUgc2FtZSBzaXplICovCisJc29jay0+bWFwX3NpemUgPSByZXNvdXJjZV9zaXplKHNrdC0+Y29tbW9uX3Jlcyk7CisKKwkvKiBpbml0aWFsaXplIHBvbGxpbmcgdGltZXIgKi8KKwlzZXR1cF90aW1lcigmc2t0LT50aW1lciwgYmNtNjN4eF9wY21jaWFfcG9sbCwgKHVuc2lnbmVkIGxvbmcpc2t0KTsKKworCS8qIGluaXRpYWxpemUgIHBjbWNpYSAgY29udHJvbCByZWdpc3RlciwgIGRyaXZlICBWU1sxMl0gdG8gIDAsCisJICogbGVhdmUgQ0IgSURTRUwgdG8gdGhlIG9sZCAgdmFsdWUgc2luY2UgaXQgaXMgc2V0IGJ5IHRoZSBQQ0kKKwkgKiBsYXllciAqLworCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCXZhbCAmPSBQQ01DSUFfQzFfQ0JJRFNFTF9NQVNLOworCXZhbCB8PSBQQ01DSUFfQzFfRU5fUENNQ0lBX0dQSU9fTUFTSzsKKwlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzFfUkVHKTsKKworCS8qCisJICogSGFyZHdhcmUgaGFzIG9ubHkgb25lIHNldCBvZiB0aW1pbmdzIHJlZ2lzdGVycywgbm90IG9uZSBmb3IKKwkgKiBlYWNoIG1lbW9yeSBhY2Nlc3MgdHlwZSwgc28gd2UgY29uZmlndXJlIHRoZW0gZm9yIHRoZQorCSAqIHNsb3dlc3Qgb25lOiBhdHRyaWJ1dGUgbWVtb3J5LgorCSAqLworCXZhbCA9IFBDTUNJQV9DMl9EQVRBMTZfTUFTSzsKKwl2YWwgfD0gMTAgPDwgUENNQ0lBX0MyX1JXQ09VTlRfU0hJRlQ7CisJdmFsIHw9IDYgPDwgUENNQ0lBX0MyX0lOQUNUSVZFX1NISUZUOworCXZhbCB8PSAzIDw8IFBDTUNJQV9DMl9TRVRVUF9TSElGVDsKKwl2YWwgfD0gMyA8PCBQQ01DSUFfQzJfSE9MRF9TSElGVDsKKwlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzJfUkVHKTsKKworCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoc29jayk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwkvKiBzdGFydCBwb2xsaW5nIHNvY2tldCAqLworCW1vZF90aW1lcigmc2t0LT50aW1lciwKKwkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhCQ002M1hYX1BDTUNJQV9QT0xMX1JBVEUpKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNrdCk7CisJcmV0dXJuIDA7CisKK2VycjoKKwlpZiAoc2t0LT5pb19iYXNlKQorCQlpb3VubWFwKHNrdC0+aW9fYmFzZSk7CisJaWYgKHNrdC0+YmFzZSkKKwkJaW91bm1hcChza3QtPmJhc2UpOworCWlmIChza3QtPnJlZ19yZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihza3QtPnJlZ19yZXMtPnN0YXJ0LCByZWdtZW1fc2l6ZSk7CisJa2ZyZWUoc2t0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBiY202M3h4X2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJc2t0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJZGVsX3RpbWVyX3N5bmMoJnNrdC0+dGltZXIpOworCWlvdW5tYXAoc2t0LT5iYXNlKTsKKwlpb3VubWFwKHNrdC0+aW9fYmFzZSk7CisJcmVzID0gc2t0LT5yZWdfcmVzOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWtmcmVlKHNrdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmNtNjN4eF9wY21jaWFfZHJpdmVyID0geworCS5wcm9iZQk9IGJjbTYzeHhfZHJ2X3BjbWNpYV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AoYmNtNjN4eF9kcnZfcGNtY2lhX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiYmNtNjN4eF9wY21jaWEiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfQ0FSREJVUworc3RhdGljIGludCBfX2RldmluaXQgYmNtNjN4eF9jYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwkvKiBrZWVwIHBjaSBkZXZpY2UgKi8KKwliY202M3h4X2NiX2RldiA9IGRldjsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiY202M3h4X3BjbWNpYV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgYmNtNjN4eF9jYl9leGl0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RyaXZlcik7CisJYmNtNjN4eF9jYl9kZXYgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYmNtNjN4eF9jYl90YWJsZVtdID0geworCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLAorCQkuZGV2aWNlCQk9IEJDTTYzNDhfQ1BVX0lELAorCQkuc3VidmVuZG9yCT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5jbGFzcwkJPSBQQ0lfQ0xBU1NfQlJJREdFX0NBUkRCVVMgPDwgOCwKKwkJLmNsYXNzX21hc2sJPSB+MCwKKwl9LAorCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQlJPQURDT00sCisJCS5kZXZpY2UJCT0gQkNNNjM1OF9DUFVfSUQsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmNsYXNzCQk9IFBDSV9DTEFTU19CUklER0VfQ0FSREJVUyA8PCA4LAorCQkuY2xhc3NfbWFzawk9IH4wLAorCX0sCisKKwl7IH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmNtNjN4eF9jYl90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiY202M3h4X2NhcmRidXNfZHJpdmVyID0geworCS5uYW1lCQk9ICJiY202M3h4X2NhcmRidXMiLAorCS5pZF90YWJsZQk9IGJjbTYzeHhfY2JfdGFibGUsCisJLnByb2JlCQk9IGJjbTYzeHhfY2JfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChiY202M3h4X2NiX2V4aXQpLAorfTsKKyNlbmRpZgorCisvKgorICogaWYgY2FyZGJ1cyBzdXBwb3J0IGlzIGVuYWJsZWQsIHJlZ2lzdGVyIG91ciBwbGF0Zm9ybSBkZXZpY2UgYWZ0ZXIKKyAqIG91ciBmYWtlIGNhcmRidXMgYnJpZGdlIGhhcyBiZWVuIHJlZ2lzdGVyZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgYmNtNjN4eF9wY21jaWFfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19DQVJEQlVTCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJjbTYzeHhfY2FyZGJ1c19kcml2ZXIpOworI2Vsc2UKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiY202M3h4X3BjbWNpYV9kcml2ZXIpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiY202M3h4X3BjbWNpYV9leGl0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKwlyZXR1cm4gcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZiY202M3h4X2NhcmRidXNfZHJpdmVyKTsKKyNlbHNlCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RyaXZlcik7CisjZW5kaWYKK30KKworbW9kdWxlX2luaXQoYmNtNjN4eF9wY21jaWFfaW5pdCk7Cittb2R1bGVfZXhpdChiY202M3h4X3BjbWNpYV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF4aW1lIEJpem9uIDxtYml6b25AZnJlZWJveC5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGludXggUENNQ0lBIENhcmQgU2VydmljZXM6IGJjbTYzeHggU29ja2V0IENvbnRyb2xsZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmggYi9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTU3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgQkNNNjNYWF9QQ01DSUFfSF8KKyNkZWZpbmUgQkNNNjNYWF9QQ01DSUFfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KKyNpbmNsdWRlIDxiY202M3h4X2Rldl9wY21jaWEuaD4KKworLyogc29ja2V0IHBvbGxpbmcgcmF0ZSBpbiBtcyAqLworI2RlZmluZSBCQ002M1hYX1BDTUNJQV9QT0xMX1JBVEUJNTAwCisKK2VudW0geworCUNBUkRfQ0FSREJVUyA9ICgxIDw8IDApLAorCUNBUkRfUENDQVJEID0gKDEgPDwgMSksCisJQ0FSRF81ViA9ICgxIDw8IDIpLAorCUNBUkRfM1YgPSAoMSA8PCAzKSwKKwlDQVJEX1hWID0gKDEgPDwgNCksCisJQ0FSRF9ZViA9ICgxIDw8IDUpLAorfTsKKworc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCB7CisJc3RydWN0IHBjbWNpYV9zb2NrZXQgc29ja2V0OworCisJLyogcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiY202M3h4X3BjbWNpYV9wbGF0Zm9ybV9kYXRhICpwZDsKKworCS8qIGFsbCByZWdzIGFjY2VzcyBhcmUgcHJvdGVjdGVkIGJ5IHRoaXMgc3BpbmxvY2sgKi8KKwlzcGlubG9ja190IGxvY2s7CisKKwkvKiBwY21jaWEgcmVnaXN0ZXJzIHJlc291cmNlICovCisJc3RydWN0IHJlc291cmNlICpyZWdfcmVzOworCisJLyogYmFzZSByZW1hcHBlZCBhZGRyZXNzIG9mIHJlZ2lzdGVycyAqLworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCS8qIHdoZXRoZXIgYSBjYXJkIGlzIGRldGVjdGVkIGF0IHRoZSBtb21lbnQgKi8KKwlpbnQgY2FyZF9kZXRlY3RlZDsKKworCS8qIHR5cGUgb2YgZGV0ZWN0ZWQgY2FyZCAobWFzayBvZiBhYm92ZSBlbnVtKSAqLworCXU4IGNhcmRfdHlwZTsKKworCS8qIGtlZXAgbGFzdCBzb2NrZXQgc3RhdHVzIHRvIGltcGxlbWVudCBldmVudCByZXBvcnRpbmcgKi8KKwl1bnNpZ25lZCBpbnQgb2xkX3N0YXR1czsKKworCS8qIGJhY2t1cCBvZiByZXF1ZXN0ZWQgc29ja2V0IHN0YXRlICovCisJc29ja2V0X3N0YXRlX3QgcmVxdWVzdGVkX3N0YXRlOworCisJLyogdGltZXIgdXNlZCBmb3Igc29ja2V0IHN0YXR1cyBwb2xsaW5nICovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisKKwkvKiBhdHRyaWJ1dGUvY29tbW9uIG1lbW9yeSByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKmF0dHJfcmVzOworCXN0cnVjdCByZXNvdXJjZSAqY29tbW9uX3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvX3JlczsKKworCS8qIGJhc2UgYWRkcmVzcyBvZiBpbyBtZW1vcnkgKi8KKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7Cit9OworCisjZW5kaWYgLyogQkNNNjNYWF9QQ01DSUFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jCmluZGV4IGI1OWQ0MTEuLjMwMGIzNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYmZpbl9jZl9wY21jaWEuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAKIHN0YXRpYyBpbnQgYmZpbl9jZl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYsIG1lc2cpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGJmaW5fY2ZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDRhMTEwYjcuLjZjNGE0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCkBAIC0xNDYzLDcgKzE0NjMsOSBAQAogCSAgICByZXR1cm4gLUVOT01FTTsKICAgICB9CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gY29kZTsKLSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKKyAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKyAgICBpZiAoZnVuY3Rpb24gPT0gQklORF9GTl9BTEwpCisJICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwogICAgIHJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgZnVuY3Rpb24sICZ0dXBsZSk7CiAgICAgaWYgKHJldCAhPSAwKQogCSAgICBnb3RvIGRvbmU7CkBAIC0xNDkwLDcgKzE0OTIsNyBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLWludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIHVuc2lnbmVkIGludCAqaW5mbykKK2ludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmluZm8pCiB7CiAgICAgdHVwbGVfdCAqdHVwbGU7CiAgICAgY2lzcGFyc2VfdCAqcDsKQEAgLTE1MTUsMzAgKzE1MTcsMzAgQEAKICAgICBjb3VudCA9IHJlc2VydmVkID0gMDsKICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOwogICAgIHR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLSAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSk7CisgICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwogICAgIGlmIChyZXQgIT0gMCkKIAlnb3RvIGRvbmU7CiAKICAgICAvKiBGaXJzdCB0dXBsZSBzaG91bGQgYmUgREVWSUNFOyB3ZSBzaG91bGQgcmVhbGx5IGhhdmUgZWl0aGVyIHRoYXQKICAgICAgICBvciBhIENGVEFCTEVfRU5UUlkgb2Ygc29tZSBzb3J0ICovCiAgICAgaWYgKCh0dXBsZS0+VHVwbGVDb2RlID09IENJU1RQTF9ERVZJQ0UpIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSA9PSAwKSkKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZLCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0IsIHApID09IDApKQogCWRldl9vaysrOwogCiAgICAgLyogQWxsIGNhcmRzIHNob3VsZCBoYXZlIGEgTUFORklEIHR1cGxlLCBhbmQvb3IgYSBWRVJTXzEgb3IgVkVSU18yCiAgICAgICAgdHVwbGUsIGZvciBjYXJkIGlkZW50aWZpY2F0aW9uLiAgQ2VydGFpbiBvbGQgRC1MaW5rIGFuZCBMaW5rc3lzCiAgICAgICAgY2FyZHMgaGF2ZSBvbmx5IGEgYnJva2VuIFZFUlNfMiB0dXBsZTsgaGVuY2UgdGhlIGJvZ3VzIHRlc3QuICovCi0gICAgaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9WRVJTXzEsIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKKyAgICBpZiAoKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfTUFORklELCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMSwgcCkgPT0gMCkgfHwKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzIsIHApICE9IC1FTk9TUEMpKQogCWlkZW50X29rKys7CiAKICAgICBpZiAoIWRldl9vayAmJiAhaWRlbnRfb2spCiAJZ290byBkb25lOwogCiAgICAgZm9yIChjb3VudCA9IDE7IGNvdW50IDwgTUFYX1RVUExFUzsgY291bnQrKykgewotCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpOworCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwogCWlmIChyZXQgIT0gMCkKIAkJYnJlYWs7CiAJaWYgKCgodHVwbGUtPlR1cGxlQ29kZSA+IDB4MjMpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg0MCkpIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jcy5jIGIvZHJpdmVycy9wY21jaWEvY3MuYwppbmRleCAwNjYwYWQxLi42OThkNzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKQEAgLTk4LDEwICs5OCwxMyBAQAogICogVGhlc2UgZnVuY3Rpb25zIGNoZWNrIGZvciB0aGUgYXBwcm9wcmlhdGUgc3RydWN0IHBjbWNpYV9zb2tldCBhcnJheXMsCiAgKiBhbmQgcGFzcyB0aGVtIHRvIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIHBjbWNpYV97c3VzcGVuZCxyZXN1bWV9X3NvY2tldAogICovCitzdGF0aWMgaW50IHNvY2tldF9lYXJseV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CitzdGF0aWMgaW50IHNvY2tldF9sYXRlX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIHN0YXRpYyBpbnQgc29ja2V0X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIHN0YXRpYyBpbnQgc29ja2V0X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiAKLWludCBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHZvaWQgcGNtY2lhX3NvY2tldF9kZXZfcnVuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGludCAoKmNiKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqKSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0OwogCkBAIC0xMTAsMjkgKzExMywzNCBAQAogCQlpZiAoc29ja2V0LT5kZXYucGFyZW50ICE9IGRldikKIAkJCWNvbnRpbnVlOwogCQltdXRleF9sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7Ci0JCXNvY2tldF9zdXNwZW5kKHNvY2tldCk7CisJCWNiKHNvY2tldCk7CiAJCW11dGV4X3VubG9jaygmc29ja2V0LT5za3RfbXV0ZXgpOwogCX0KIAl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOworfQogCitpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcGNtY2lhX3NvY2tldF9kZXZfcnVuKGRldiwgc29ja2V0X3N1c3BlbmQpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKTsKIAordm9pZCBwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9lYXJseV9yZXN1bWUpOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUpOworCit2b2lkIHBjbWNpYV9zb2NrZXRfZGV2X2xhdGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwY21jaWFfc29ja2V0X2Rldl9ydW4oZGV2LCBzb2NrZXRfbGF0ZV9yZXN1bWUpOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZSk7CisKIGludCBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrZXQ7Ci0KLQlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzb2NrZXQsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7Ci0JCWlmIChzb2NrZXQtPmRldi5wYXJlbnQgIT0gZGV2KQotCQkJY29udGludWU7Ci0JCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKLQkJc29ja2V0X3Jlc3VtZShzb2NrZXQpOwotCQltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKLQl9Ci0JdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQorCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9yZXN1bWUpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUpOwpAQCAtNTQ2LDI5ICs1NTQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJlc3VtZSBhIHNvY2tldC4gIElmIGEgY2FyZCBpcyBwcmVzZW50LCB2ZXJpZnkgaXRzIENJUyBhZ2FpbnN0Ci0gKiBvdXIgY2FjaGVkIGNvcHkuICBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIHRoZSBjYXJkIGhhcyBiZWVuCi0gKiByZXBsYWNlZCwgYW5kIHdlIG5lZWQgdG8gdGVsbCB0aGUgZHJpdmVycy4KLSAqLwotc3RhdGljIGludCBzb2NrZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCitzdGF0aWMgaW50IHNvY2tldF9lYXJseV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlpbnQgcmV0OwotCi0JaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPmluaXQoc2t0KTsKIAlza3QtPm9wcy0+c2V0X3NvY2tldChza3QsICZza3QtPnNvY2tldCk7CisJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkKKwkJc2t0LT5yZXN1bWVfc3RhdHVzID0gc29ja2V0X3NldHVwKHNrdCwgcmVzdW1lX2RlbGF5KTsKKwlyZXR1cm4gMDsKK30KIAorc3RhdGljIGludCBzb2NrZXRfbGF0ZV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKIAlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCXNrdC0+c3RhdGUgJj0gflNPQ0tFVF9TVVNQRU5EOwogCQlyZXR1cm4gc29ja2V0X2luc2VydChza3QpOwogCX0KIAotCXJldCA9IHNvY2tldF9zZXR1cChza3QsIHJlc3VtZV9kZWxheSk7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKHNrdC0+cmVzdW1lX3N0YXR1cyA9PSAwKSB7CiAJCS8qCiAJCSAqIEZJWE1FOiBuZWVkIGEgYmV0dGVyIGNoZWNrIGhlcmUgZm9yIGNhcmRidXMgY2FyZHMuCiAJCSAqLwpAQCAtNTk2LDYgKzU5OSwyMCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUmVzdW1lIGEgc29ja2V0LiAgSWYgYSBjYXJkIGlzIHByZXNlbnQsIHZlcmlmeSBpdHMgQ0lTIGFnYWluc3QKKyAqIG91ciBjYWNoZWQgY29weS4gIElmIHRoZXkgYXJlIGRpZmZlcmVudCwgdGhlIGNhcmQgaGFzIGJlZW4KKyAqIHJlcGxhY2VkLCBhbmQgd2UgbmVlZCB0byB0ZWxsIHRoZSBkcml2ZXJzLgorICovCitzdGF0aWMgaW50IHNvY2tldF9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpKQorCQlyZXR1cm4gLUVCVVNZOworCisJc29ja2V0X2Vhcmx5X3Jlc3VtZShza3QpOworCXJldHVybiBzb2NrZXRfbGF0ZV9yZXN1bWUoc2t0KTsKK30KKwogc3RhdGljIHZvaWQgc29ja2V0X3JlbW92ZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZza3QtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmggYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCmluZGV4IDc5NjE1ZTYuLjFmNDA5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaApAQCAtMTk3LDggKzE5Nyw3IEBACiAJCSAgICAgIGNpc2RhdGFfdCBjb2RlLCB2b2lkICpwYXJzZSk7CiBpbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAogCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOwotaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKLQkJCXVuc2lnbmVkIGludCAqY291bnQpOworaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqY291bnQpOwogCiAvKiByc3JjX21nci5jICovCiBpbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCA5ZjMwMGQzLi5mNWI3MDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCWlmICghdmVyczEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywKKwlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIEJJTkRfRk5fQUxMLAogCQkJICAgICAgIENJU1RQTF9NQU5GSUQsICZtYW5mX2lkKSkgewogCQlwX2Rldi0+bWFuZl9pZCA9IG1hbmZfaWQubWFuZjsKIAkJcF9kZXYtPmNhcmRfaWQgPSBtYW5mX2lkLmNhcmQ7CkBAIC01ODEsOSArNTgxLDkgQEAKIAkJa2ZyZWUoZGV2Z2VvKTsKIAl9CiAKLQlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCBDSVNUUExfVkVSU18xLAorCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsCiAJCQkgICAgICAgdmVyczEpKSB7Ci0JCWZvciAoaT0wOyBpIDwgdmVyczEtPm5zOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG1pbl90KHVuc2lnbmVkIGludCwgNCwgdmVyczEtPm5zKTsgaSsrKSB7CiAJCQljaGFyICp0bXA7CiAJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCkBAIC03MzMsNyArNzMzLDcgQEAKIAkJcmV0dXJuIC1FQUdBSU47IC8qIHRyeSBhZ2FpbiwgYnV0IGxhdGVyLi4uICovCiAJfQogCi0JcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBCSU5EX0ZOX0FMTCwgJm5vX2NoYWlucyk7CisJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmbm9fY2hhaW5zKTsKIAlpZiAocmV0IHx8ICFub19jaGFpbnMpIHsKIAkJZHNfZGV2X2RiZygwLCAmcy0+ZGV2LCAiaW52YWxpZCBDSVMgb3IgaW52YWxpZCByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKaW5kZXggNDY1NjFmYS4uYTA0ZjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKQEAgLTQyLDcgKzQyLDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgaTgyMDkyYWFfc29ja2V0X3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGk4MjA5MmFhX3NvY2tldF9yZXN1bWUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDQwZDQ5NTMuLmE0YWFjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMDUzLDggKzEwNTMsOCBAQAogICAgIHVfY2hhciBtYXAsIGlvY3RsOwogICAgIAogICAgIGRlYnVnKDEsICJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI3gtJSN4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkgICIlI2xseC0lI2xseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywgaW8tPnNwZWVkLAorCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogICAgIG1hcCA9IGlvLT5tYXA7CiAgICAgaWYgKChtYXAgPiAxKSB8fCAoaW8tPnN0YXJ0ID4gMHhmZmZmKSB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8CiAJKGlvLT5zdG9wIDwgaW8tPnN0YXJ0KSkgcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjQxLDcgKzEyNDEsNyBAQAogc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGk4MjM2NV9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCA2MmI0ZWNjLi43ZGZiZWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTUzNyw4ICs1MzcsOSBAQAogCXVfY2hhciBtYXA7CiAKIAlkZWJ1ZygzLCAibTMycl9jZmM6IFNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgICIlI2x4LSUjbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkJICAiJSNsbHgtJSNsbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCisJCSAgaW8tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKIAltYXAgPSBpby0+bWFwOwogCiAJcmV0dXJuIDA7CkBAIC01NTQsOCArNTU1LDkgQEAKIAlwY2Nfc29ja2V0X3QgKnQgPSAmc29ja2V0W3NvY2tdOwogCiAJZGVidWcoMywgIm0zMnJfY2ZjOiBTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSAiJSNseCwgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAotCQkgbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCSAiJSNsbHgsICUjeClcbiIsIHNvY2ssIG1hcCwgbWVtLT5mbGFncywKKwkJIG1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCSBtZW0tPmNhcmRfc3RhcnQpOwogCiAJLyoKIAkgKiBzYW5pdHkgY2hlY2sKQEAgLTY5OSw3ICs3MDEsNyBAQAogc3RhdGljIGludCBjZmNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGNmY19kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwppbmRleCAxMjAzNGI0Li5jNjUyNGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKQEAgLTQ5Miw4ICs0OTIsOSBAQAogCXVfY2hhciBtYXA7CiAKIAlkZWJ1ZygzLCAibTMyci1wY2M6IFNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgICIlI3gtJSN4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJCSAgIiUjbGx4LSUjbGx4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAorCQkgIGlvLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAJbWFwID0gaW8tPm1hcDsKIAogCXJldHVybiAwOwpAQCAtNTE1LDggKzUxNiw5IEBACiAjZW5kaWYKIAogCWRlYnVnKDMsICJtMzJyLXBjYzogU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgIiUjbHgsICAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCi0JCSBtZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJICIlI2xseCwgICUjeClcbiIsIHNvY2ssIG1hcCwgbWVtLT5mbGFncywKKwkJIG1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCSBtZW0tPmNhcmRfc3RhcnQpOwogCiAJLyoKIAkgKiBzYW5pdHkgY2hlY2sKQEAgLTY3NSw3ICs2NzcsNyBAQAogc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHBjY19kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCBkMWFkMDk2Li40MDM1NTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTk3NSw4ICs5NzUsOSBAQAogI2RlZmluZSBNOFhYX0JBU0UgKFBDTUNJQV9JT19XSU5fQkFTRSArIGlvLT5zdGFydCkKIAogCWRwcmludGsoIlNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM0LjR4LSUjNC40eClcbiIsIGxzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JCWlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJCSIlIzQuNGxseC0lIzQuNGxseClcbiIsIGxzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCisJCWlvLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogCiAJaWYgKChpby0+bWFwID49IFBDTUNJQV9JT19XSU5fTk8pIHx8IChpby0+c3RhcnQgPiAweGZmZmYpCiAJICAgIHx8IChpby0+c3RvcCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wIDwgaW8tPnN0YXJ0KSkKQEAgLTEwNTUsOCArMTA1Niw5IEBACiAJcGNtY29uZjh4eF90ICpwY21jaWEgPSBzLT5wY21jaWE7CiAKIAlkcHJpbnRrKCJTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSIlIzUuNWx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCi0JCW1lbS0+c3BlZWQsIG1lbS0+c3RhdGljX3N0YXJ0LCBtZW0tPmNhcmRfc3RhcnQpOworCQkiJSM1LjVsbHgsICUjNS41eClcbiIsIGxzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywKKwkJbWVtLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnN0YXRpY19zdGFydCwKKwkJbWVtLT5jYXJkX3N0YXJ0KTsKIAogCWlmICgobWVtLT5tYXAgPj0gUENNQ0lBX01FTV9XSU5fTk8pCiAvLyAgICAgICAgICB8fCAoKG1lbS0+cykgPj0gUENNQ0lBX01FTV9XSU5fU0laRSkKQEAgLTExMDcsOCArMTEwOSw5IEBACiAJfQogCiAJZHByaW50aygiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM1LjVseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAotCQltZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJIiUjNS41bGx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCisJCW1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCW1lbS0+Y2FyZF9zdGFydCk7CiAKIAkvKiBjb3B5IHRoZSBzdHJ1Y3QgYW5kIG1vZGlmeSB0aGUgY29weSAqLwogCkBAIC0xMjk2LDcgKzEyOTksNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBtOHh4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBtOHh4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCmluZGV4IGYzNzM2MzkuLjY4NTcwYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCiBzdGF0aWMgaW50IG9tYXBfY2Zfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2LCBtZXNnKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBvbWFwX2NmX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCAzMmM0NDA0Li4zMGNmNzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtODgxLDcgKzg4MSw3IEBACiAJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKIAlwY21jaWFfdmFsaWRhdGVfbWVtKHMpOwogCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKLQlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCAmYnVmLT5jaXNpbmZvLkNoYWlucyk7CisJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmYnVmLT5jaXNpbmZvLkNoYWlucyk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19TVVNQRU5EX0NBUkQ6CiAJcmV0ID0gcGNtY2lhX3N1c3BlbmRfY2FyZChzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKaW5kZXggOGJlZDFkYS4uNzBhMzM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKQEAgLTY0MSw2ICs2NDEsMTIgQEAKIAlpZiAoKHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldikpKQogCQlnb3RvIGVycl9vdXRfZnJlZV9tZW07CiAKKwlpZiAoIXBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApKSB7CisJCXByaW50ayhLRVJOX0lORk8gInBkNjcyOTogcmVmdXNpbmcgdG8gbG9hZCB0aGUgZHJpdmVyICIKKwkJCQkgImFzIHRoZSBpb19iYXNlIGlzIDAuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbWVtOworCX0KKwogCXByaW50ayhLRVJOX0lORk8gInBkNjcyOTogQ2lycnVzIFBENjcyOSBQQ0kgdG8gUENNQ0lBIEJyaWRnZSAiCiAJCSJhdCAweCVsbHggb24gaXJxICVkXG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApLCBkZXYtPmlycSk7CkBAIC03NTgsNyArNzY0LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgcGQ2NzI5X3NvY2tldF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHBkNjcyOV9zb2NrZXRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCBjNDlhNzI2Li4wZTM1YWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTMwMCwyNSArMzAwLDI5IEBACiAJcmV0dXJuIHNvY19jb21tb25fZHJ2X3BjbWNpYV9yZW1vdmUoJmRldi0+ZGV2KTsKIH0KIAotc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChkZXYpOwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKCZkZXYtPmRldik7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworCXB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhkZXYpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoZGV2KTsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzICBweGEyeHhfZHJ2X3BjbWNpYV9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVzdW1lLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X3BjbWNpYV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YTJ4eF9kcnZfcGNtY2lhX3Byb2JlLAogCS5yZW1vdmUJCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVtb3ZlLAotCS5zdXNwZW5kIAk9IHB4YTJ4eF9kcnZfcGNtY2lhX3N1c3BlbmQsCi0JLnJlc3VtZSAJPSBweGEyeHhfZHJ2X3BjbWNpYV9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTJ4eC1wY21jaWEiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJnB4YTJ4eF9kcnZfcGNtY2lhX3BtX29wcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODk5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXRjLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXRjLmMKKyAqCisgKiBEcml2ZXIgZm9yIFBhbG0gVHVuZ3N0ZW58QyBQQ01DSUEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBPc2Jvcm5lIDxhdG9AbWVzaHkub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL3BhbG10Yy5oPgorI2luY2x1ZGUgInNvY19jb21tb24uaCIKKworc3RhdGljIGludCBwYWxtdGNfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxLCAiUENNQ0lBIFBXUjEiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjEsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIyLCAiUENNQ0lBIFBXUjIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMzsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzLCAiUENNQ0lBIFBXUjMiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjM7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyNDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQsICJQQ01DSUEgUlNUIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI0OworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFksICJQQ01DSUEgUkRZIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI1OworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRUFEWSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI2OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSwgIlBDTUNJQSBQV1JSRFkiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjY7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BXUlJFQURZKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjc7CisKKwlza3QtPmlycSA9IElSUV9HUElPKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRUFEWSk7CisJcmV0dXJuIDA7CisKK2Vycjc6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSk7CitlcnI2OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworZXJyNToKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VUKTsKK2VycjQ6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMpOworZXJyMzoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMik7CitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxKTsKK2VycjE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX3BjbWNpYV9od19zaHV0ZG93bihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BXUlJFQURZKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VUKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMyk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxKTsKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX3BjbWNpYV9zb2NrZXRfc3RhdGUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsCisJCQkJCXN0cnVjdCBwY21jaWFfc3RhdGUgKnN0YXRlKQoreworCXN0YXRlLT5kZXRlY3QgPSAxOyAvKiBhbHdheXMgaW5zZXJ0ZWQgKi8KKwlzdGF0ZS0+cmVhZHkgID0gISFncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworCXN0YXRlLT5idmQxICAgPSAxOworCXN0YXRlLT5idmQyICAgPSAxOworCXN0YXRlLT53cnByb3QgPSAwOworCXN0YXRlLT52c18zdiAgPSAxOworCXN0YXRlLT52c19YdiAgPSAwOworfQorCitzdGF0aWMgaW50IHBhbG10Y193aWZpX3Bvd2VyZG93bih2b2lkKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMiwgMCk7CisJbWRlbGF5KDQwKTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWxtdGNfd2lmaV9wb3dlcnVwKHZvaWQpCit7CisJaW50IHRpbWVvdXQgPSA1MDsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMsIDEpOworCW1kZWxheSg1MCk7CisKKwkvKiBQb3dlciB1cCB0aGUgY2FyZCwgMS44ViBmaXJzdCwgYWZ0ZXIgYSB3aGlsZSAzLjNWICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSwgMSk7CisJbWRlbGF5KDEwMCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMiwgMSk7CisKKwkvKiBXYWl0IHRpbGwgdGhlIGNhcmQgaXMgcmVhZHkgKi8KKwl3aGlsZSAoIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSkgJiYKKwkJdGltZW91dCkgeworCQltZGVsYXkoMSk7CisJCXRpbWVvdXQtLTsKKwl9CisKKwkvKiBQb3dlciBkb3duIHRoZSBXaUZpIGluIGNhc2Ugb2YgZXJyb3IgKi8KKwlpZiAoIXRpbWVvdXQpIHsKKwkJcGFsbXRjX3dpZmlfcG93ZXJkb3duKCk7CisJCXJldHVybiAxOworCX0KKworCS8qIFJlc2V0IHRoZSBjYXJkICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VULCAxKTsKKwltZGVsYXkoMjApOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCwgMCk7CisJbWRlbGF5KDI1KTsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFsbXRjX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCQljb25zdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCit7CisJaW50IHJldCA9IDE7CisKKwlpZiAoc3RhdGUtPlZjYyA9PSAwKQorCQlyZXQgPSBwYWxtdGNfd2lmaV9wb3dlcmRvd24oKTsKKwllbHNlIGlmIChzdGF0ZS0+VmNjID09IDMzKQorCQlyZXQgPSBwYWxtdGNfd2lmaV9wb3dlcnVwKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwYWxtdGNfcGNtY2lhX3NvY2tldF9pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworfQorCitzdGF0aWMgdm9pZCBwYWxtdGNfcGNtY2lhX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworfQorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgcGFsbXRjX3BjbWNpYV9vcHMgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKworCS5maXJzdAkJCT0gMCwKKwkubnIJCQk9IDEsCisKKwkuaHdfaW5pdAkJPSBwYWxtdGNfcGNtY2lhX2h3X2luaXQsCisJLmh3X3NodXRkb3duCQk9IHBhbG10Y19wY21jaWFfaHdfc2h1dGRvd24sCisKKwkuc29ja2V0X3N0YXRlCQk9IHBhbG10Y19wY21jaWFfc29ja2V0X3N0YXRlLAorCS5jb25maWd1cmVfc29ja2V0CT0gcGFsbXRjX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAorCisJLnNvY2tldF9pbml0CQk9IHBhbG10Y19wY21jaWFfc29ja2V0X2luaXQsCisJLnNvY2tldF9zdXNwZW5kCQk9IHBhbG10Y19wY21jaWFfc29ja2V0X3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFsbXRjX3BjbWNpYV9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhbG10Y19wY21jaWFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfcGFsbXRjKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcGFsbXRjX3BjbWNpYV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInB4YTJ4eC1wY21jaWEiLCAtMSk7CisJaWYgKCFwYWxtdGNfcGNtY2lhX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGFsbXRjX3BjbWNpYV9kZXZpY2UsICZwYWxtdGNfcGNtY2lhX29wcywKKwkJCQkJc2l6ZW9mKHBhbG10Y19wY21jaWFfb3BzKSk7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwYWxtdGNfcGNtY2lhX2RldmljZSk7CisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBhbG10Y19wY21jaWFfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwYWxtdGNfcGNtY2lhX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwYWxtdGNfcGNtY2lhX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHBhbG10Y19wY21jaWFfaW5pdCk7Cittb2R1bGVfZXhpdChwYWxtdGNfcGNtY2lhX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbGV4IE9zYm9ybmUgPGF0b0BtZXNoeS5vcmc+LCIKKwkgICAgIiBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ01DSUEgc3VwcG9ydCBmb3IgUGFsbSBUdW5nc3RlbnxDIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnB4YTJ4eC1wY21jaWEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCmluZGV4IDljYTIyYzcuLjcwMzlmM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwpAQCAtMjA2LDYgKzIwNiw3IEBACiAgICAgLyogRmlyc3QsIHdoYXQgZG9lcyBhIGZsb2F0aW5nIHBvcnQgbG9vayBsaWtlPyAqLwogICAgIGIgPSBremFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFiKSB7CisJICAgIHByaW50aygiXG4iKTsKIAkgICAgZGV2X3ByaW50ayhLRVJOX0VSUiwgJnMtPmRldiwKIAkJICAgImRvX2lvX3Byb2JlOiB1bmFibGUgdG8ga21hbGxvYyAyNTYgYnl0ZXMiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3NSw3ICsyNzYsNyBAQAogCXMtPmNpc19tZW0ucmVzID0gcmVzOwogCXMtPmNpc192aXJ0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzLT5tYXBfc2l6ZSk7CiAJaWYgKHMtPmNpc192aXJ0KSB7Ci0JCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsIGNvdW50KTsKKwkJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBjb3VudCk7CiAJCS8qIGludmFsaWRhdGUgbWFwcGluZyBhbmQgQ0lTIGNhY2hlICovCiAJCWlvdW5tYXAocy0+Y2lzX3ZpcnQpOwogCQlzLT5jaXNfdmlydCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfYXNzYWJldC5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2Fzc2FiZXQuYwppbmRleCBmNDI0MTQ2Li5hYzhhYTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfYXNzYWJldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9hc3NhYmV0LmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCS5zb2NrZXRfc3VzcGVuZAkJPSBhc3NhYmV0X3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKIH07CiAKLWludCBfX2luaXQgcGNtY2lhX2Fzc2FiZXRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgcGNtY2lhX2Fzc2FiZXRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldCA9IC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCmluZGV4IGQ4ZGE1YWMuLjJkMGU5OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwpAQCAtODksNyArODksNyBAQAogc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9uZXBvbnNldC5jCmluZGV4IDRjNDFlODYuLjBjNzZkMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9uZXBvbnNldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9uZXBvbnNldC5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkuc29ja2V0X3N1c3BlbmQgCT0gc2ExMTExX3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKIH07CiAKLWludCBfX2luaXQgcGNtY2lhX25lcG9uc2V0X2luaXQoc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2KQoraW50IHBjbWNpYV9uZXBvbnNldF9pbml0KHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldikKIHsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKaW5kZXggNDAxMDUyYTIuLjRiZTRlMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKIHN0YXRpYyBpbnQgcGNtY2lhX3N1c3BlbmQoc3RydWN0IHNhMTExMV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgcGNtY2lhX3Jlc3VtZShzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCmluZGV4IDE2M2NmOTguLmVmN2U5ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKQEAgLTMzNiw4ICszMzYsOSBAQAogCXN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0ID0gdG9fc29jX3BjbWNpYV9zb2NrZXQoc29jayk7CiAJdW5zaWduZWQgc2hvcnQgc3BlZWQgPSBtYXAtPnNwZWVkOwogCi0JZGVidWcoc2t0LCAyLCAibWFwICV1ICBzcGVlZCAldSBzdGFydCAweCUwOHggc3RvcCAweCUwOHhcbiIsCi0JCW1hcC0+bWFwLCBtYXAtPnNwZWVkLCBtYXAtPnN0YXJ0LCBtYXAtPnN0b3ApOworCWRlYnVnKHNrdCwgMiwgIm1hcCAldSAgc3BlZWQgJXUgc3RhcnQgMHglMDhsbHggc3RvcCAweCUwOGxseFxuIiwKKwkJbWFwLT5tYXAsIG1hcC0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWFwLT5zdGFydCwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPnN0b3ApOwogCWRlYnVnKHNrdCwgMiwgImZsYWdzOiAlcyVzJXMlcyVzJXMlcyVzXG4iLAogCQkobWFwLT5mbGFncz09MCk/IjxOT05FPiI6IiIsCiAJCShtYXAtPmZsYWdzJk1BUF9BQ1RJVkUpPyJBQ1RJVkUgIjoiIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKaW5kZXggZmY5YTNiYi4uNzhkNWFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKQEAgLTMwMCw3ICszMDAsNyBAQAogCiAJCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmIChwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCAmY2hhaW5zKSkKKwkJaWYgKHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmNoYWlucykpCiAJCQlyZXR1cm4gLUVJTzsKIAkJaWYgKCFjaGFpbnMpCiAJCQlyZXR1cm4gLUVOT0RBVEE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKaW5kZXggOGViMDQyMy4uNjkxODg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdGNpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiBzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpAQCAtNzMyLDggKzczMiw4IEBACiAgICAgdV9zaG9ydCBiYXNlLCBsZW4sIGlvY3RsOwogICAgIAogICAgIGRlYnVnKDEsICJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI3gtJSN4KVxuIiwgcHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJICAiJSNsbHgtJSNsbHgpXG4iLCBwc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLCBpby0+c3BlZWQsCisJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAgICAgaWYgKChpby0+bWFwID4gMSkgfHwgKGlvLT5zdGFydCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wID4gMHhmZmZmKSB8fAogCShpby0+c3RvcCA8IGlvLT5zdGFydCkpIHJldHVybiAtRUlOVkFMOwogICAgIHRjaWNfc2V0dyhUQ0lDX0FERFIrMiwgVENJQ19BRFIyX0lORFJFRyB8IChwc29jayA8PCBUQ0lDX1NTX1NIRlQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKaW5kZXggZDRhZDUwZC4uYzlmY2JkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKQEAgLTcwNyw3ICs3MDcsNyBAQAogc3RhdGljIGludCB2cmM0MTcxX2NhcmRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCB2cmM0MTcxX2NhcmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggYjQ1OWU4Ny4uOGJlNGNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTEyMjUsNjAgKzEyMjUsODEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCB5ZW50YV9kZXZfc3VzcGVuZCAoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCB5ZW50YV9kZXZfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByZXQ7CiAKLQlyZXQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworCXJldCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoZGV2KTsKIAotCWlmIChzb2NrZXQpIHsKLQkJaWYgKHNvY2tldC0+dHlwZSAmJiBzb2NrZXQtPnR5cGUtPnNhdmVfc3RhdGUpCi0JCQlzb2NrZXQtPnR5cGUtPnNhdmVfc3RhdGUoc29ja2V0KTsKKwlpZiAoIXNvY2tldCkKKwkJcmV0dXJuIHJldDsKIAotCQkvKiBGSVhNRTogcGNpX3NhdmVfc3RhdGUgbmVlZHMgdG8gaGF2ZSBhIGJldHRlciBpbnRlcmZhY2UgKi8KLQkJcGNpX3NhdmVfc3RhdGUoZGV2KTsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMTYqNCwgJnNvY2tldC0+c2F2ZWRfc3RhdGVbMF0pOwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAxNyo0LCAmc29ja2V0LT5zYXZlZF9zdGF0ZVsxXSk7Ci0JCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCWlmIChzb2NrZXQtPnR5cGUgJiYgc29ja2V0LT50eXBlLT5zYXZlX3N0YXRlKQorCQlzb2NrZXQtPnR5cGUtPnNhdmVfc3RhdGUoc29ja2V0KTsKIAotCQkvKgotCQkgKiBTb21lIGxhcHRvcHMgKElCTSBUMjIpIGRvIG5vdCBsaWtlIHVzIHB1dHRpbmcgdGhlIENhcmRidXMKLQkJICogYnJpZGdlIGludG8gRDMuICBBdCBhIGd1ZXNzLCBzb21lIG90aGVyIGxhcHRvcCB3aWxsCi0JCSAqIHByb2JhYmx5IHJlcXVpcmUgdGhpcywgc28gbGVhdmUgaXQgY29tbWVudGVkIG91dCBmb3Igbm93LgotCQkgKi8KLQkJLyogcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIDMpOyAqLwotCX0KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMTYqNCwgJnNvY2tldC0+c2F2ZWRfc3RhdGVbMF0pOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAxNyo0LCAmc29ja2V0LT5zYXZlZF9zdGF0ZVsxXSk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJLyoKKwkgKiBTb21lIGxhcHRvcHMgKElCTSBUMjIpIGRvIG5vdCBsaWtlIHVzIHB1dHRpbmcgdGhlIENhcmRidXMKKwkgKiBicmlkZ2UgaW50byBEMy4gIEF0IGEgZ3Vlc3MsIHNvbWUgb3RoZXIgbGFwdG9wIHdpbGwKKwkgKiBwcm9iYWJseSByZXF1aXJlIHRoaXMsIHNvIGxlYXZlIGl0IGNvbW1lbnRlZCBvdXQgZm9yIG5vdy4KKwkgKi8KKwkvKiBwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgMyk7ICovCiAKIAlyZXR1cm4gcmV0OwogfQogCi0KLXN0YXRpYyBpbnQgeWVudGFfZGV2X3Jlc3VtZSAoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgeWVudGFfZGV2X3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CiAKLQlpZiAoc29ja2V0KSB7Ci0JCWludCByYzsKKwlpZiAoIXNvY2tldCkKKwkJcmV0dXJuIDA7CiAKLQkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIDApOwotCQkvKiBGSVhNRTogcGNpX3Jlc3RvcmVfc3RhdGUgbmVlZHMgdG8gaGF2ZSBhIGJldHRlciBpbnRlcmZhY2UgKi8KLQkJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDE2KjQsIHNvY2tldC0+c2F2ZWRfc3RhdGVbMF0pOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMTcqNCwgc29ja2V0LT5zYXZlZF9zdGF0ZVsxXSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAxNio0LCBzb2NrZXQtPnNhdmVkX3N0YXRlWzBdKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDE3KjQsIHNvY2tldC0+c2F2ZWRfc3RhdGVbMV0pOwogCi0JCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkJcGNpX3NldF9tYXN0ZXIoZGV2KTsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAotCQlpZiAoc29ja2V0LT50eXBlICYmIHNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZSkKLQkJCXNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZShzb2NrZXQpOwotCX0KKwlpZiAoc29ja2V0LT50eXBlICYmIHNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZSkKKwkJc29ja2V0LT50eXBlLT5yZXN0b3JlX3N0YXRlKHNvY2tldCk7CiAKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7CisJcGNtY2lhX3NvY2tldF9kZXZfZWFybHlfcmVzdW1lKGRldik7CisJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgeWVudGFfZGV2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcGNtY2lhX3NvY2tldF9kZXZfbGF0ZV9yZXN1bWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHllbnRhX3BtX29wcyA9IHsKKwkuc3VzcGVuZF9ub2lycSA9IHllbnRhX2Rldl9zdXNwZW5kX25vaXJxLAorCS5yZXN1bWVfbm9pcnEgPSB5ZW50YV9kZXZfcmVzdW1lX25vaXJxLAorCS5yZXN1bWUgPSB5ZW50YV9kZXZfcmVzdW1lLAorCS5mcmVlemVfbm9pcnEgPSB5ZW50YV9kZXZfc3VzcGVuZF9ub2lycSwKKwkudGhhd19ub2lycSA9IHllbnRhX2Rldl9yZXN1bWVfbm9pcnEsCisJLnRoYXcgPSB5ZW50YV9kZXZfcmVzdW1lLAorCS5wb3dlcm9mZl9ub2lycSA9IHllbnRhX2Rldl9zdXNwZW5kX25vaXJxLAorCS5yZXN0b3JlX25vaXJxID0geWVudGFfZGV2X3Jlc3VtZV9ub2lycSwKKwkucmVzdG9yZSA9IHllbnRhX2Rldl9yZXN1bWUsCit9OworCisjZGVmaW5lIFlFTlRBX1BNX09QUwkoJnllbnRhX3BtX29wcykKKyNlbHNlCisjZGVmaW5lIFlFTlRBX1BNX09QUwlOVUxMCiAjZW5kaWYKIAogI2RlZmluZSBDQl9JRCh2ZW5kLGRldix0eXBlKQkJCQlcCkBAIC0xMzc2LDEwICsxMzk3LDcgQEAKIAkuaWRfdGFibGUJPSB5ZW50YV90YWJsZSwKIAkucHJvYmUJCT0geWVudGFfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh5ZW50YV9jbG9zZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSB5ZW50YV9kZXZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHllbnRhX2Rldl9yZXN1bWUsCi0jZW5kaWYKKwkuZHJpdmVyLnBtCT0gWUVOVEFfUE1fT1BTLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCmluZGV4IGRhM2MwOGIuLjQyMjZlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC0zNTAsMTMgKzM1MCwxNCBAQAogCS5zZXRfYmxvY2sgPSBlZWVwY19yZmtpbGxfc2V0LAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGVlZXBjX2VuYWJsZV9jYW1lcmEodm9pZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBlZWVwY19lbmFibGVfY2FtZXJhKHZvaWQpCiB7CiAJLyoKIAkgKiBJZiB0aGUgZm9sbG93aW5nIGNhbGwgdG8gc2V0X2FjcGkoKSBmYWlscywgaXQncyBiZWNhdXNlIHRoZXJlJ3Mgbm8KIAkgKiBjYW1lcmEgc28gd2UgY2FuIGlnbm9yZSB0aGUgZXJyb3IuCiAJICovCi0Jc2V0X2FjcGkoQ01fQVNMX0NBTUVSQSwgMSk7CisJaWYgKGdldF9hY3BpKENNX0FTTF9DQU1FUkEpID09IDApCisJCXNldF9hY3BpKENNX0FTTF9DQU1FUkEsIDEpOwogfQogCiAvKgpAQCAtNjI0LDcgKzYyNSw3IEBACiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gZWVlcGNfYmFja2xpZ2h0X2RldmljZTsKIAlpZiAoYmQpIHsKIAkJaW50IG9sZCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwotCQliZC0+cHJvcHMuYnJpZ2h0bmVzcyA9IHJlYWRfYnJpZ2h0bmVzcyhiZCk7CisJCWJhY2tsaWdodF9mb3JjZV91cGRhdGUoYmQsIEJBQ0tMSUdIVF9VUERBVEVfSE9US0VZKTsKIAkJcmV0dXJuIG9sZDsKIAl9CiAJcmV0dXJuIC0xOwpAQCAtMTE4OSw3ICsxMTkwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVlZXBjX2hvdGtfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlpbnQgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKaW5kZXggZjM1YWVlNS4uYmNkNGJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCkBAIC05NDQsNyArOTQ0LDcgQEAKIAlzdHJ1Y3QgZnVqaXRzdV9ob3RrZXlfdCAqZnVqaXRzdV9ob3RrZXkgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmdWppdHN1X2hvdGtleS0+aW5wdXQ7CiAKLSNpZmRlZiBDT05GSUdfTEVEU19DTEFTUworI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1MpIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfQ0xBU1NfTU9EVUxFKQogCWlmIChmdWppdHN1X2hvdGtleS0+bG9nb2xhbXBfcmVnaXN0ZXJlZCkKIAkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxvZ29sYW1wX2xlZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IGFmZGJkYWEuLmEyYTc0MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwpAQCAtMTIxMSwxNSArMTIxMSw2IEBACiAJCX0KIAl9CiAKLQkvKiB0cnkgdG8gX0lOSSB0aGUgZGV2aWNlIGlmIHN1Y2ggbWV0aG9kIGV4aXN0cyAoQUNQSSBzcGVjIDMuMC02LjUuMQotCSAqIHNob3VsZCBiZSByZXNwZWN0ZWQgYXMgd2UgYWxyZWFkeSBjaGVja2VkIGZvciB0aGUgZGV2aWNlIHByZXNlbmNlIGFib3ZlICovCi0JaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoc29ueV9uY19hY3BpX2hhbmRsZSwgTUVUSE9EX05BTUVfX0lOSSwgJmhhbmRsZSkpKSB7Ci0JCWRwcmludGsoIkludm9raW5nIF9JTklcbiIpOwotCQlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZXZhbHVhdGVfb2JqZWN0KHNvbnlfbmNfYWNwaV9oYW5kbGUsIE1FVEhPRF9OQU1FX19JTkksCi0JCQkJCQlOVUxMLCBOVUxMKSkpCi0JCQlkcHJpbnRrKCJfSU5JIE1ldGhvZCBmYWlsZWRcbiIpOwotCX0KLQogCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJFQ09OIiwKIAkJCQkJICZoYW5kbGUpKSkgewogCQlpZiAoYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLCAiRUNPTiIsIDEsIE5VTEwpKQpAQCAtMTM5OSwyNyArMTM5MCwyMCBAQAogCXN0cnVjdCBzb255cGlfZXZlbnQJKmV2ZW50czsKIH07CiAKLXN0cnVjdCBkZXZpY2VfY3RybCB7Ci0JaW50CQkJCW1vZGVsOwotCWludAkJCQkoKmhhbmRsZV9pcnEpKGNvbnN0IHU4LCBjb25zdCB1OCk7Ci0JdTE2CQkJCWV2cG9ydF9vZmZzZXQ7Ci0JdTgJCQkJaGFzX2NhbWVyYTsKLQl1OAkJCQloYXNfYmx1ZXRvb3RoOwotCXU4CQkJCWhhc193d2FuOwotCXN0cnVjdCBzb255cGlfZXZlbnR0eXBlcwkqZXZlbnRfdHlwZXM7Ci19OwotCiBzdHJ1Y3Qgc29ueV9waWNfZGV2IHsKLQlzdHJ1Y3QgZGV2aWNlX2N0cmwJKmNvbnRyb2w7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlCSphY3BpX2RldjsKLQlzdHJ1Y3Qgc29ueV9waWNfaXJxCSpjdXJfaXJxOwotCXN0cnVjdCBzb255X3BpY19pb3BvcnQJKmN1cl9pb3BvcnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZAlpbnRlcnJ1cHRzOwotCXN0cnVjdCBsaXN0X2hlYWQJaW9wb3J0czsKLQlzdHJ1Y3QgbXV0ZXgJCWxvY2s7Ci0JdTgJCQljYW1lcmFfcG93ZXI7Ci0JdTgJCQlibHVldG9vdGhfcG93ZXI7Ci0JdTgJCQl3d2FuX3Bvd2VyOworCXN0cnVjdCBhY3BpX2RldmljZQkJKmFjcGlfZGV2OworCXN0cnVjdCBzb255X3BpY19pcnEJCSpjdXJfaXJxOworCXN0cnVjdCBzb255X3BpY19pb3BvcnQJCSpjdXJfaW9wb3J0OworCXN0cnVjdCBsaXN0X2hlYWQJCWludGVycnVwdHM7CisJc3RydWN0IGxpc3RfaGVhZAkJaW9wb3J0czsKKwlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOworCXN0cnVjdCBzb255cGlfZXZlbnR0eXBlcwkqZXZlbnRfdHlwZXM7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKmhhbmRsZV9pcnEpKGNvbnN0IHU4LCBjb25zdCB1OCk7CisJaW50CQkJCW1vZGVsOworCXUxNgkJCQlldnBvcnRfb2Zmc2V0OworCXU4CQkJCWNhbWVyYV9wb3dlcjsKKwl1OAkJCQlibHVldG9vdGhfcG93ZXI7CisJdTgJCQkJd3dhbl9wb3dlcjsKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc29ueV9waWNfZGV2IHNwaWNfZGV2ID0gewpAQCAtMTQyNyw2ICsxNDExLDggQEAKIAkuaW9wb3J0cwk9IExJU1RfSEVBRF9JTklUKHNwaWNfZGV2LmlvcG9ydHMpLAogfTsKIAorc3RhdGljIGludCBzcGljX2Rydl9yZWdpc3RlcmVkOworCiAvKiBFdmVudCBtYXNrcyAqLwogI2RlZmluZSBTT05ZUElfSk9HR0VSX01BU0sJCQkweDAwMDAwMDAxCiAjZGVmaW5lIFNPTllQSV9DQVBUVVJFX01BU0sJCQkweDAwMDAwMDAyCkBAIC0xNzI0LDI3ICsxNzEwLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfY3RybCBzcGljX3R5cGVzW10gPSB7Ci0JewotCQkubW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUxLAotCQkuaGFuZGxlX2lycSA9IE5VTEwsCi0JCS5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUxX09GRlNFVCwKLQkJLmV2ZW50X3R5cGVzID0gdHlwZTFfZXZlbnRzLAotCX0sCi0JewotCQkubW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUyLAotCQkuaGFuZGxlX2lycSA9IE5VTEwsCi0JCS5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUyX09GRlNFVCwKLQkJLmV2ZW50X3R5cGVzID0gdHlwZTJfZXZlbnRzLAotCX0sCi0JewotCQkubW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUzLAotCQkuaGFuZGxlX2lycSA9IHR5cGUzX2hhbmRsZV9pcnEsCi0JCS5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUzX09GRlNFVCwKLQkJLmV2ZW50X3R5cGVzID0gdHlwZTNfZXZlbnRzLAotCX0sCi19OwotCiBzdGF0aWMgdm9pZCBzb255X3BpY19kZXRlY3RfZGV2aWNlX3R5cGUoc3RydWN0IHNvbnlfcGljX2RldiAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CkBAIC0xNzUyLDQ4ICsxNzE3LDYzIEBACiAJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCVBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8zLCBOVUxMKTsKIAlpZiAocGNpZGV2KSB7Ci0JCWRldi0+Y29udHJvbCA9ICZzcGljX3R5cGVzWzBdOworCQlkZXYtPm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMTsKKwkJZGV2LT5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUxX09GRlNFVDsKKwkJZGV2LT5ldmVudF90eXBlcyA9IHR5cGUxX2V2ZW50czsKIAkJZ290byBvdXQ7CiAJfQogCiAJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCVBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xLCBOVUxMKTsKIAlpZiAocGNpZGV2KSB7Ci0JCWRldi0+Y29udHJvbCA9ICZzcGljX3R5cGVzWzJdOworCQlkZXYtPm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMjsKKwkJZGV2LT5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUyX09GRlNFVDsKKwkJZGV2LT5ldmVudF90eXBlcyA9IHR5cGUyX2V2ZW50czsKIAkJZ290byBvdXQ7CiAJfQogCiAJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCVBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xLCBOVUxMKTsKIAlpZiAocGNpZGV2KSB7Ci0JCWRldi0+Y29udHJvbCA9ICZzcGljX3R5cGVzWzJdOworCQlkZXYtPm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMzsKKwkJZGV2LT5oYW5kbGVfaXJxID0gdHlwZTNfaGFuZGxlX2lycTsKKwkJZGV2LT5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUzX09GRlNFVDsKKwkJZGV2LT5ldmVudF90eXBlcyA9IHR5cGUzX2V2ZW50czsKIAkJZ290byBvdXQ7CiAJfQogCiAJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCVBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF80LCBOVUxMKTsKIAlpZiAocGNpZGV2KSB7Ci0JCWRldi0+Y29udHJvbCA9ICZzcGljX3R5cGVzWzJdOworCQlkZXYtPm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMzsKKwkJZGV2LT5oYW5kbGVfaXJxID0gdHlwZTNfaGFuZGxlX2lycTsKKwkJZGV2LT5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUzX09GRlNFVDsKKwkJZGV2LT5ldmVudF90eXBlcyA9IHR5cGUzX2V2ZW50czsKIAkJZ290byBvdXQ7CiAJfQogCiAJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCVBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOV8xLCBOVUxMKTsKIAlpZiAocGNpZGV2KSB7Ci0JCWRldi0+Y29udHJvbCA9ICZzcGljX3R5cGVzWzJdOworCQlkZXYtPm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMzsKKwkJZGV2LT5oYW5kbGVfaXJxID0gdHlwZTNfaGFuZGxlX2lycTsKKwkJZGV2LT5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUzX09GRlNFVDsKKwkJZGV2LT5ldmVudF90eXBlcyA9IHR5cGUzX2V2ZW50czsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogZGVmYXVsdCAqLwotCWRldi0+Y29udHJvbCA9ICZzcGljX3R5cGVzWzFdOworCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUyOworCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFMl9PRkZTRVQ7CisJZGV2LT5ldmVudF90eXBlcyA9IHR5cGUyX2V2ZW50czsKIAogb3V0OgogCWlmIChwY2lkZXYpCiAJCXBjaV9kZXZfcHV0KHBjaWRldik7CiAKIAlwcmludGsoS0VSTl9JTkZPIERSVl9QRlggImRldGVjdGVkIFR5cGUlZCBtb2RlbFxuIiwKLQkJCWRldi0+Y29udHJvbC0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMSA/IDEgOgotCQkJZGV2LT5jb250cm9sLT5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUyID8gMiA6IDMpOworCQkJZGV2LT5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUxID8gMSA6CisJCQlkZXYtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTIgPyAyIDogMyk7CiB9CiAKIC8qIGNhbWVyYSB0ZXN0cyBhbmQgcG93ZXJvbi9wb3dlcm9mZiAqLwpAQCAtMjU2Niw3ICsyNTQ2LDcgQEAKIAlidWZmZXIucG9pbnRlciA9IHJlc291cmNlOwogCiAJLyogc2V0dXAgVHlwZSAxIHJlc291cmNlcyAqLwotCWlmIChzcGljX2Rldi5jb250cm9sLT5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUxKSB7CisJaWYgKHNwaWNfZGV2Lm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTEpIHsKIAogCQkvKiBzZXR1cCBpbyByZXNvdXJjZXMgKi8KIAkJcmVzb3VyY2UtPnJlczEudHlwZSA9IEFDUElfUkVTT1VSQ0VfVFlQRV9JTzsKQEAgLTI2NDksMjkgKzI2MjksMjggQEAKIAkJZGF0YV9tYXNrID0gaW5iX3AoZGV2LT5jdXJfaW9wb3J0LT5pbzIubWluaW11bSk7CiAJZWxzZQogCQlkYXRhX21hc2sgPSBpbmJfcChkZXYtPmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtICsKLQkJCQlkZXYtPmNvbnRyb2wtPmV2cG9ydF9vZmZzZXQpOworCQkJCWRldi0+ZXZwb3J0X29mZnNldCk7CiAKIAlkcHJpbnRrKCJldmVudCAoWyUuMnhdIFslLjJ4XSkgYXQgcG9ydCAweCUuNHgoKzB4JS4yeClcbiIsCiAJCQlldiwgZGF0YV9tYXNrLCBkZXYtPmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtLAotCQkJZGV2LT5jb250cm9sLT5ldnBvcnRfb2Zmc2V0KTsKKwkJCWRldi0+ZXZwb3J0X29mZnNldCk7CiAKIAlpZiAoZXYgPT0gMHgwMCB8fCBldiA9PSAweGZmKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQlmb3IgKGkgPSAwOyBkZXYtPmNvbnRyb2wtPmV2ZW50X3R5cGVzW2ldLm1hc2s7IGkrKykgeworCWZvciAoaSA9IDA7IGRldi0+ZXZlbnRfdHlwZXNbaV0ubWFzazsgaSsrKSB7CiAKLQkJaWYgKChkYXRhX21hc2sgJiBkZXYtPmNvbnRyb2wtPmV2ZW50X3R5cGVzW2ldLmRhdGEpICE9Ci0JCSAgICBkZXYtPmNvbnRyb2wtPmV2ZW50X3R5cGVzW2ldLmRhdGEpCisJCWlmICgoZGF0YV9tYXNrICYgZGV2LT5ldmVudF90eXBlc1tpXS5kYXRhKSAhPQorCQkgICAgZGV2LT5ldmVudF90eXBlc1tpXS5kYXRhKQogCQkJY29udGludWU7CiAKLQkJaWYgKCEobWFzayAmIGRldi0+Y29udHJvbC0+ZXZlbnRfdHlwZXNbaV0ubWFzaykpCisJCWlmICghKG1hc2sgJiBkZXYtPmV2ZW50X3R5cGVzW2ldLm1hc2spKQogCQkJY29udGludWU7CiAKLQkJZm9yIChqID0gMDsgZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5ldmVudHNbal0uZXZlbnQ7IGorKykgewotCQkJaWYgKGV2ID09IGRldi0+Y29udHJvbC0+ZXZlbnRfdHlwZXNbaV0uZXZlbnRzW2pdLmRhdGEpIHsKKwkJZm9yIChqID0gMDsgZGV2LT5ldmVudF90eXBlc1tpXS5ldmVudHNbal0uZXZlbnQ7IGorKykgeworCQkJaWYgKGV2ID09IGRldi0+ZXZlbnRfdHlwZXNbaV0uZXZlbnRzW2pdLmRhdGEpIHsKIAkJCQlkZXZpY2VfZXZlbnQgPQotCQkJCQlkZXYtPmNvbnRyb2wtPgotCQkJCQkJZXZlbnRfdHlwZXNbaV0uZXZlbnRzW2pdLmV2ZW50OworCQkJCQlkZXYtPmV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5ldmVudDsKIAkJCQlnb3RvIGZvdW5kOwogCQkJfQogCQl9CkBAIC0yNjc5LDEzICsyNjU4LDEyIEBACiAJLyogU3RpbGwgbm90IGFibGUgdG8gZGVjb2RlIHRoZSBldmVudCB0cnkgdG8gcGFzcwogCSAqIGl0IG92ZXIgdG8gdGhlIG1pbmlkcml2ZXIKIAkgKi8KLQlpZiAoZGV2LT5jb250cm9sLT5oYW5kbGVfaXJxICYmCi0JCQlkZXYtPmNvbnRyb2wtPmhhbmRsZV9pcnEoZGF0YV9tYXNrLCBldikgPT0gMCkKKwlpZiAoZGV2LT5oYW5kbGVfaXJxICYmIGRldi0+aGFuZGxlX2lycShkYXRhX21hc2ssIGV2KSA9PSAwKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIAlkcHJpbnRrKCJ1bmtub3duIGV2ZW50IChbJS4yeF0gWyUuMnhdKSBhdCBwb3J0IDB4JS40eCgrMHglLjJ4KVxuIiwKIAkJCWV2LCBkYXRhX21hc2ssIGRldi0+Y3VyX2lvcG9ydC0+aW8xLm1pbmltdW0sCi0JCQlkZXYtPmNvbnRyb2wtPmV2cG9ydF9vZmZzZXQpOworCQkJZGV2LT5ldnBvcnRfb2Zmc2V0KTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIGZvdW5kOgpAQCAtMjgxNiw3ICsyNzk0LDcgQEAKIAkvKiByZXF1ZXN0IElSUSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShpcnEsICZzcGljX2Rldi5pbnRlcnJ1cHRzLCBsaXN0KSB7CiAJCWlmICghcmVxdWVzdF9pcnEoaXJxLT5pcnEuaW50ZXJydXB0c1swXSwgc29ueV9waWNfaXJxLAotCQkJCQlJUlFGX1NIQVJFRCwgInNvbnktbGFwdG9wIiwgJnNwaWNfZGV2KSkgeworCQkJCQlJUlFGX0RJU0FCTEVELCAic29ueS1sYXB0b3AiLCAmc3BpY19kZXYpKSB7CiAJCQlkcHJpbnRrKCJJUlE6ICVkIC0gdHJpZ2dlcmluZzogJWQgLSAiCiAJCQkJCSJwb2xhcml0eTogJWQgLSBzaHI6ICVkXG4iLAogCQkJCQlpcnEtPmlycS5pbnRlcnJ1cHRzWzBdLApAQCAtMjk0OSw2ICsyOTI3LDcgQEAKIAkJCQkJIlVuYWJsZSB0byByZWdpc3RlciBTUElDIGRyaXZlci4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CisJCXNwaWNfZHJ2X3JlZ2lzdGVyZWQgPSAxOwogCX0KIAogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmc29ueV9uY19kcml2ZXIpOwpAQCAtMjk2MCw3ICsyOTM5LDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X3VucmVnaXN0ZXJfcGljOgotCWlmICghbm9fc3BpYykKKwlpZiAoc3BpY19kcnZfcmVnaXN0ZXJlZCkKIAkJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfcGljX2RyaXZlcik7CiBvdXQ6CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTI5NjksNyArMjk0OCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc29ueV9sYXB0b3BfZXhpdCh2b2lkKQogewogCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZzb255X25jX2RyaXZlcik7Ci0JaWYgKCFub19zcGljKQorCWlmIChzcGljX2Rydl9yZWdpc3RlcmVkKQogCQlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmc29ueV9waWNfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IGY3OGQyNzUuLmQ5MzEwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKQEAgLTIyLDcgKzIyLDcgQEAKICAqLwogCiAjZGVmaW5lIFRQQUNQSV9WRVJTSU9OICIwLjIzIgotI2RlZmluZSBUUEFDUElfU1lTRlNfVkVSU0lPTiAweDAyMDQwMAorI2RlZmluZSBUUEFDUElfU1lTRlNfVkVSU0lPTiAweDAyMDUwMAogCiAvKgogICogIENoYW5nZWxvZzoKQEAgLTE0NSw2ICsxNDUsNTEgQEAKIAlUUF9BQ1BJX1dHU1ZfU1RBVEVfVVdCUFdSCT0gMHgwMDIwLCAvKiBVV0IgcmFkaW8gZW5hYmxlZCAqLwogfTsKIAorLyogSEtFWSBldmVudHMgKi8KK2VudW0gdHBhY3BpX2hrZXlfZXZlbnRfdCB7CisJLyogSG90a2V5LXJlbGF0ZWQgKi8KKwlUUF9IS0VZX0VWX0hPVEtFWV9CQVNFCQk9IDB4MTAwMSwgLyogZmlyc3QgaG90a2V5IChGTitGMSkgKi8KKwlUUF9IS0VZX0VWX0JSR0hUX1VQCQk9IDB4MTAxMCwgLyogQnJpZ2h0bmVzcyB1cCAqLworCVRQX0hLRVlfRVZfQlJHSFRfRE9XTgkJPSAweDEwMTEsIC8qIEJyaWdodG5lc3MgZG93biAqLworCVRQX0hLRVlfRVZfVk9MX1VQCQk9IDB4MTAxNSwgLyogVm9sdW1lIHVwIG9yIHVubXV0ZSAqLworCVRQX0hLRVlfRVZfVk9MX0RPV04JCT0gMHgxMDE2LCAvKiBWb2x1bWUgZG93biBvciB1bm11dGUgKi8KKwlUUF9IS0VZX0VWX1ZPTF9NVVRFCQk9IDB4MTAxNywgLyogTWl4ZXIgb3V0cHV0IG11dGUgKi8KKworCS8qIFJlYXNvbnMgZm9yIHdha2luZyB1cCBmcm9tIFMzL1M0ICovCisJVFBfSEtFWV9FVl9XS1VQX1MzX1VORE9DSwk9IDB4MjMwNCwgLyogdW5kb2NrIHJlcXVlc3RlZCwgUzMgKi8KKwlUUF9IS0VZX0VWX1dLVVBfUzRfVU5ET0NLCT0gMHgyNDA0LCAvKiB1bmRvY2sgcmVxdWVzdGVkLCBTNCAqLworCVRQX0hLRVlfRVZfV0tVUF9TM19CQVlFSgk9IDB4MjMwNSwgLyogYmF5IGVqZWN0aW9uIHJlcSwgUzMgKi8KKwlUUF9IS0VZX0VWX1dLVVBfUzRfQkFZRUoJPSAweDI0MDUsIC8qIGJheSBlamVjdGlvbiByZXEsIFM0ICovCisJVFBfSEtFWV9FVl9XS1VQX1MzX0JBVExPVwk9IDB4MjMxMywgLyogYmF0dGVyeSBlbXB0eSwgUzMgKi8KKwlUUF9IS0VZX0VWX1dLVVBfUzRfQkFUTE9XCT0gMHgyNDEzLCAvKiBiYXR0ZXJ5IGVtcHR5LCBTNCAqLworCisJLyogQXV0by1zbGVlcCBhZnRlciBlamVjdCByZXF1ZXN0ICovCisJVFBfSEtFWV9FVl9CQVlFSl9BQ0sJCT0gMHgzMDAzLCAvKiBiYXkgZWplY3Rpb24gY29tcGxldGUgKi8KKwlUUF9IS0VZX0VWX1VORE9DS19BQ0sJCT0gMHg0MDAzLCAvKiB1bmRvY2sgY29tcGxldGUgKi8KKworCS8qIE1pc2MgYmF5IGV2ZW50cyAqLworCVRQX0hLRVlfRVZfT1BURFJWX0VKCQk9IDB4MzAwNiwgLyogb3B0LiBkcml2ZSB0cmF5IGVqZWN0ZWQgKi8KKworCS8qIFVzZXItaW50ZXJmYWNlIGV2ZW50cyAqLworCVRQX0hLRVlfRVZfTElEX0NMT1NFCQk9IDB4NTAwMSwgLyogbGFwdG9wIGxpZCBjbG9zZWQgKi8KKwlUUF9IS0VZX0VWX0xJRF9PUEVOCQk9IDB4NTAwMiwgLyogbGFwdG9wIGxpZCBvcGVuZWQgKi8KKwlUUF9IS0VZX0VWX1RBQkxFVF9UQUJMRVQJPSAweDUwMDksIC8qIHRhYmxldCBzd2l2ZWwgdXAgKi8KKwlUUF9IS0VZX0VWX1RBQkxFVF9OT1RFQk9PSwk9IDB4NTAwYSwgLyogdGFibGV0IHN3aXZlbCBkb3duICovCisJVFBfSEtFWV9FVl9QRU5fSU5TRVJURUQJCT0gMHg1MDBiLCAvKiB0YWJsZXQgcGVuIGluc2VydGVkICovCisJVFBfSEtFWV9FVl9QRU5fUkVNT1ZFRAkJPSAweDUwMGMsIC8qIHRhYmxldCBwZW4gcmVtb3ZlZCAqLworCVRQX0hLRVlfRVZfQlJHSFRfQ0hBTkdFRAk9IDB4NTAxMCwgLyogYmFja2xpZ2h0IGNvbnRyb2wgZXZlbnQgKi8KKworCS8qIFRoZXJtYWwgZXZlbnRzICovCisJVFBfSEtFWV9FVl9BTEFSTV9CQVRfSE9UCT0gMHg2MDExLCAvKiBiYXR0ZXJ5IHRvbyBob3QgKi8KKwlUUF9IS0VZX0VWX0FMQVJNX0JBVF9YSE9UCT0gMHg2MDEyLCAvKiBiYXR0ZXJ5IGNyaXRpY2FsbHkgaG90ICovCisJVFBfSEtFWV9FVl9BTEFSTV9TRU5TT1JfSE9UCT0gMHg2MDIxLCAvKiBzZW5zb3IgdG9vIGhvdCAqLworCVRQX0hLRVlfRVZfQUxBUk1fU0VOU09SX1hIT1QJPSAweDYwMjIsIC8qIHNlbnNvciBjcml0aWNhbGx5IGhvdCAqLworCVRQX0hLRVlfRVZfVEhNX1RBQkxFX0NIQU5HRUQJPSAweDYwMzAsIC8qIHRoZXJtYWwgdGFibGUgY2hhbmdlZCAqLworCisJLyogTWlzYyAqLworCVRQX0hLRVlfRVZfUkZLSUxMX0NIQU5HRUQJPSAweDcwMDAsIC8qIHJma2lsbCBzd2l0Y2ggY2hhbmdlZCAqLworfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1haW4gZHJpdmVyCiAgKi8KQEAgLTE4NDgsNiArMTg5MywyNyBAQAogICogSG90a2V5IHN1YmRyaXZlcgogICovCiAKKy8qCisgKiBUaGlua1BhZCBmaXJtd2FyZSBldmVudCBtb2RlbAorICoKKyAqIFRoZSBUaGlua1BhZCBmaXJtd2FyZSBoYXMgdHdvIG1haW4gZXZlbnQgaW50ZXJmYWNlczogbm9ybWFsIEFDUEkKKyAqIG5vdGlmaWNhdGlvbnMgKHdoaWNoIGZvbGxvdyB0aGUgQUNQSSBzdGFuZGFyZCksIGFuZCBhIHByaXZhdGUgZXZlbnQKKyAqIGludGVyZmFjZS4KKyAqCisgKiBUaGUgcHJpdmF0ZSBldmVudCBpbnRlcmZhY2UgYWxzbyBpc3N1ZXMgZXZlbnRzIGZvciB0aGUgaG90a2V5cy4gIEFzCisgKiB0aGUgZHJpdmVyIGdhaW5lZCBmZWF0dXJlcywgdGhlIGV2ZW50IGhhbmRsaW5nIGNvZGUgZW5kZWQgdXAgYmVpbmcKKyAqIGJ1aWx0IGFyb3VuZCB0aGUgaG90a2V5IHN1YmRyaXZlci4gIFRoaXMgd2lsbCBuZWVkIHRvIGJlIHJlZmFjdG9yZWQKKyAqIHRvIGEgbW9yZSBmb3JtYWwgZXZlbnQgQVBJIGV2ZW50dWFsbHkuCisgKgorICogU29tZSAiaG90a2V5cyIgYXJlIGFjdHVhbGx5IHN1cHBvc2VkIHRvIGJlIHVzZWQgYXMgZXZlbnQgcmVwb3J0cywKKyAqIHN1Y2ggYXMgImJyaWdodG5lc3MgaGFzIGNoYW5nZWQiLCAidm9sdW1lIGhhcyBjaGFuZ2VkIiwgZGVwZW5kaW5nIG9uCisgKiB0aGUgVGhpbmtQYWQgbW9kZWwgYW5kIGhvdyB0aGUgZmlybXdhcmUgaXMgb3BlcmF0aW5nLgorICoKKyAqIFVubGlrZSBvdGhlciBjbGFzc2VzLCBob3RrZXktY2xhc3MgZXZlbnRzIGhhdmUgbWFzay91bm1hc2sgY29udHJvbCBvbgorICogbm9uLWFuY2llbnQgZmlybXdhcmUuICBIb3dldmVyLCBob3cgaXQgYmVoYXZlcyBjaGFuZ2VzIGEgbG90IHdpdGggdGhlCisgKiBmaXJtd2FyZSBtb2RlbCBhbmQgdmVyc2lvbi4KKyAqLworCiBlbnVtIHsJLyogaG90IGtleSBzY2FuIGNvZGVzIChkZXJpdmVkIGZyb20gQUNQSSBEU0RUKSAqLwogCVRQX0FDUElfSE9US0VZU0NBTl9GTkYxCQk9IDAsCiAJVFBfQUNQSV9IT1RLRVlTQ0FOX0ZORjIsCkBAIC0xODc1LDcgKzE5NDEsNyBAQAogCVRQX0FDUElfSE9US0VZU0NBTl9USElOS1BBRCwKIH07CiAKLWVudW0gewkvKiBLZXlzIGF2YWlsYWJsZSB0aHJvdWdoIE5WUkFNIHBvbGxpbmcgKi8KK2VudW0gewkvKiBLZXlzL2V2ZW50cyBhdmFpbGFibGUgdGhyb3VnaCBOVlJBTSBwb2xsaW5nICovCiAJVFBBQ1BJX0hLRVlfTlZSQU1fS05PV05fTUFTSyA9IDB4MDBmYjg4YzBVLAogCVRQQUNQSV9IS0VZX05WUkFNX0dPT0RfTUFTSyAgPSAweDAwZmI4MDAwVSwKIH07CkBAIC0xOTMwLDggKzE5OTYsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgbXV0ZXggaG90a2V5X3RocmVhZF9tdXRleDsKIAogLyoKLSAqIEFjcXVpcmUgbXV0ZXggdG8gd3JpdGUgcG9sbGVyIGNvbnRyb2wgdmFyaWFibGVzLgotICogSW5jcmVtZW50IGhvdGtleV9jb25maWdfY2hhbmdlIHdoZW4gY2hhbmdpbmcgdGhlbS4KKyAqIEFjcXVpcmUgbXV0ZXggdG8gd3JpdGUgcG9sbGVyIGNvbnRyb2wgdmFyaWFibGVzIGFzIGFuCisgKiBhdG9taWMgYmxvY2suCisgKgorICogSW5jcmVtZW50IGhvdGtleV9jb25maWdfY2hhbmdlIHdoZW4gY2hhbmdpbmcgdGhlbSBpZiB5b3UKKyAqIHdhbnQgdGhlIGt0aHJlYWQgdG8gZm9yZ2V0IG9sZCBzdGF0ZS4KICAqCiAgKiBTZWUgSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVC9IT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAogICovCkBAIC0xOTQyLDYgKzIwMTEsMTEgQEAKICAqIGhvdGtleSBwb2xsZXIgY29udHJvbCB2YXJpYWJsZXMKICAqCiAgKiBNdXN0IGJlIGF0b21pYyBvciByZWFkZXJzIHdpbGwgYWxzbyBuZWVkIHRvIGFjcXVpcmUgbXV0ZXgKKyAqCisgKiBIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUL0hPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECisgKiBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gdGhlIGNoYW5nZXMgbmVlZCB0byBiZSB0YWtlbiBhcworICogYSBibG9jaywgT1Igd2hlbiBvbmUgbmVlZHMgdG8gZm9yY2UgdGhlIGt0aHJlYWQgdG8gZm9yZ2V0CisgKiBvbGQgc3RhdGUuCiAgKi8KIHN0YXRpYyB1MzIgaG90a2V5X3NvdXJjZV9tYXNrOwkJLyogYml0IG1hc2sgMD1BQ1BJLDE9TlZSQU0gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaG90a2V5X3BvbGxfZnJlcSA9IDEwOyAvKiBIeiAqLwpAQCAtMTk3MiwxMCArMjA0NiwxMiBAQAogCiBzdGF0aWMgaW50IGhvdGtleV9hdXRvc2xlZXBfYWNrOwogCi1zdGF0aWMgdTMyIGhvdGtleV9vcmlnX21hc2s7Ci1zdGF0aWMgdTMyIGhvdGtleV9hbGxfbWFzazsKLXN0YXRpYyB1MzIgaG90a2V5X3Jlc2VydmVkX21hc2s7Ci1zdGF0aWMgdTMyIGhvdGtleV9tYXNrOworc3RhdGljIHUzMiBob3RrZXlfb3JpZ19tYXNrOwkJLyogZXZlbnRzIHRoZSBCSU9TIGhhZCBlbmFibGVkICovCitzdGF0aWMgdTMyIGhvdGtleV9hbGxfbWFzazsJCS8qIGFsbCBldmVudHMgc3VwcG9ydGVkIGluIGZ3ICovCitzdGF0aWMgdTMyIGhvdGtleV9yZXNlcnZlZF9tYXNrOwkvKiBldmVudHMgYmV0dGVyIGxlZnQgZGlzYWJsZWQgKi8KK3N0YXRpYyB1MzIgaG90a2V5X2RyaXZlcl9tYXNrOwkJLyogZXZlbnRzIG5lZWRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgdTMyIGhvdGtleV91c2VyX21hc2s7CQkvKiBldmVudHMgdmlzaWJsZSB0byB1c2Vyc3BhY2UgKi8KK3N0YXRpYyB1MzIgaG90a2V5X2FjcGlfbWFzazsJCS8qIGV2ZW50cyBlbmFibGVkIGluIGZpcm13YXJlICovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaG90a2V5X3JlcG9ydF9tb2RlOwogCkBAIC0xOTgzLDYgKzIwNTksOSBAQAogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9zZXQgKmhvdGtleV9kZXZfYXR0cmlidXRlczsKIAorc3RhdGljIHZvaWQgdHBhY3BpX2RyaXZlcl9ldmVudChjb25zdCB1bnNpZ25lZCBpbnQgaGtleV9ldmVudCk7CitzdGF0aWMgdm9pZCBob3RrZXlfZHJpdmVyX2V2ZW50KGNvbnN0IHVuc2lnbmVkIGludCBzY2FuY29kZSk7CisKIC8qIEhLRVkuTUhLRygpIHJldHVybiBiaXRzICovCiAjZGVmaW5lIFRQX0hPVEtFWV9UQUJMRVRfTUFTSyAoMSA8PCAzKQogCkBAIC0yMDE3LDI0ICsyMDk2LDUzIEBACiB9CiAKIC8qCisgKiBSZWFkcyBjdXJyZW50IGV2ZW50IG1hc2sgZnJvbSBmaXJtd2FyZSwgYW5kIHVwZGF0ZXMKKyAqIGhvdGtleV9hY3BpX21hc2sgYWNjb3JkaW5nbHkuICBBbHNvIHJlc2V0cyBhbnkgYml0cworICogZnJvbSBob3RrZXlfdXNlcl9tYXNrIHRoYXQgYXJlIHVuYXZhaWxhYmxlIHRvIGJlCisgKiBkZWxpdmVyZWQgKHNoYWRvdyByZXF1aXJlbWVudCBvZiB0aGUgdXNlcnNwYWNlIEFCSSkuCisgKgogICogQ2FsbCB3aXRoIGhvdGtleV9tdXRleCBoZWxkCiAgKi8KIHN0YXRpYyBpbnQgaG90a2V5X21hc2tfZ2V0KHZvaWQpCiB7Ci0JdTMyIG0gPSAwOwotCiAJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7CisJCXUzMiBtID0gMDsKKwogCQlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZtLCAiREhLTiIsICJkIikpCiAJCQlyZXR1cm4gLUVJTzsKKworCQlob3RrZXlfYWNwaV9tYXNrID0gbTsKKwl9IGVsc2UgeworCQkvKiBubyBtYXNrIHN1cHBvcnQgZG9lc24ndCBtZWFuIG5vIGV2ZW50IHN1cHBvcnQuLi4gKi8KKwkJaG90a2V5X2FjcGlfbWFzayA9IGhvdGtleV9hbGxfbWFzazsKIAl9Ci0JSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAotCWhvdGtleV9tYXNrID0gbSB8IChob3RrZXlfc291cmNlX21hc2sgJiBob3RrZXlfbWFzayk7Ci0JSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKKworCS8qIHN5bmMgdXNlcnNwYWNlLXZpc2libGUgbWFzayAqLworCWhvdGtleV91c2VyX21hc2sgJj0gKGhvdGtleV9hY3BpX21hc2sgfCBob3RrZXlfc291cmNlX21hc2spOwogCiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgc3RhdGljIGhvdGtleV9tYXNrX3dhcm5faW5jb21wbGV0ZV9tYXNrKHZvaWQpCit7CisJLyogbG9nIG9ubHkgd2hhdCB0aGUgdXNlciBjYW4gZml4Li4uICovCisJY29uc3QgdTMyIHdhbnRlZG1hc2sgPSBob3RrZXlfZHJpdmVyX21hc2sgJgorCQl+KGhvdGtleV9hY3BpX21hc2sgfCBob3RrZXlfc291cmNlX21hc2spICYKKwkJKGhvdGtleV9hbGxfbWFzayB8IFRQQUNQSV9IS0VZX05WUkFNX0tOT1dOX01BU0spOworCisJaWYgKHdhbnRlZG1hc2spCisJCXByaW50ayhUUEFDUElfTk9USUNFCisJCQkicmVxdWlyZWQgZXZlbnRzIDB4JTA4eCBub3QgZW5hYmxlZCFcbiIsCisJCQl3YW50ZWRtYXNrKTsKK30KKwogLyoKKyAqIFNldCB0aGUgZmlybXdhcmUgbWFzayB3aGVuIHN1cHBvcnRlZAorICoKKyAqIEFsc28gY2FsbHMgaG90a2V5X21hc2tfZ2V0IHRvIHVwZGF0ZSBob3RrZXlfYWNwaV9tYXNrLgorICoKKyAqIE5PVEU6IGRvZXMgbm90IHNldCBiaXRzIGluIGhvdGtleV91c2VyX21hc2ssIGJ1dCBtYXkgcmVzZXQgdGhlbS4KKyAqCiAgKiBDYWxsIHdpdGggaG90a2V5X211dGV4IGhlbGQKICAqLwogc3RhdGljIGludCBob3RrZXlfbWFza19zZXQodTMyIG1hc2spCkBAIC0yMDQyLDY2ICsyMTUwLDEwMCBAQAogCWludCBpOwogCWludCByYyA9IDA7CiAKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKLQkJaWYgKCF0cF93YXJuZWQuaG90a2V5X21hc2tfZmYgJiYKLQkJICAgIChtYXNrID09IDB4ZmZmZiB8fCBtYXNrID09IDB4ZmZmZmZmIHx8Ci0JCSAgICAgbWFzayA9PSAweGZmZmZmZmZmKSkgewotCQkJdHBfd2FybmVkLmhvdGtleV9tYXNrX2ZmID0gMTsKLQkJCXByaW50ayhUUEFDUElfTk9USUNFCi0JCQkgICAgICAgInNldHRpbmcgdGhlIGhvdGtleSBtYXNrIHRvIDB4JTA4eCBpcyBsaWtlbHkgIgotCQkJICAgICAgICJub3QgdGhlIGJlc3Qgd2F5IHRvIGdvIGFib3V0IGl0XG4iLCBtYXNrKTsKLQkJCXByaW50ayhUUEFDUElfTk9USUNFCi0JCQkgICAgICAgInBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgZHJpdmVyIGRlZmF1bHRzLCAiCi0JCQkgICAgICAgImFuZCByZWZlciB0byB1cC10by1kYXRlIHRoaW5rcGFkLWFjcGkgIgotCQkJICAgICAgICJkb2N1bWVudGF0aW9uXG4iKTsKLQkJfQorCWNvbnN0IHUzMiBmd21hc2sgPSBtYXNrICYgfmhvdGtleV9zb3VyY2VfbWFzazsKIAotCQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUCisJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7CiAJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCQl1MzIgbSA9IDEgPDwgaTsKLQkJCS8qIGVuYWJsZSBpbiBmaXJtd2FyZSBtYXNrIG9ubHkga2V5cyBub3QgaW4gTlZSQU0KLQkJCSAqIG1vZGUsIGJ1dCBlbmFibGUgdGhlIGtleSBpbiB0aGUgY2FjaGVkIGhvdGtleV9tYXNrCi0JCQkgKiByZWdhcmRsZXNzIG9mIG1vZGUsIG9yIHRoZSBrZXkgd2lsbCBlbmQgdXAKLQkJCSAqIGRpc2FibGVkIGJ5IGhvdGtleV9tYXNrX2dldCgpICovCiAJCQlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsCiAJCQkJCU5VTEwsICJNSEtNIiwgInZkZCIsIGkgKyAxLAotCQkJCQkhISgobWFzayAmIH5ob3RrZXlfc291cmNlX21hc2spICYgbSkpKSB7CisJCQkJCSEhKG1hc2sgJiAoMSA8PCBpKSkpKSB7CiAJCQkJcmMgPSAtRUlPOwogCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQlob3RrZXlfbWFzayA9IChob3RrZXlfbWFzayAmIH5tKSB8IChtYXNrICYgbSk7CiAJCQl9CiAJCX0KLQkJSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKLQotCQkvKiBob3RrZXlfbWFza19nZXQgbXVzdCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGJlbG93ICovCi0JCWlmICghaG90a2V5X21hc2tfZ2V0KCkgJiYgIXJjICYmCi0JCSAgICAoaG90a2V5X21hc2sgJiB+aG90a2V5X3NvdXJjZV9tYXNrKSAhPQotCQkgICAgIChtYXNrICYgfmhvdGtleV9zb3VyY2VfbWFzaykpIHsKLQkJCXByaW50ayhUUEFDUElfTk9USUNFCi0JCQkgICAgICAgInJlcXVlc3RlZCBob3Qga2V5IG1hc2sgMHglMDh4LCBidXQgIgotCQkJICAgICAgICJmaXJtd2FyZSBmb3JjZWQgaXQgdG8gMHglMDh4XG4iLAotCQkJICAgICAgIG1hc2ssIGhvdGtleV9tYXNrKTsKLQkJfQotCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKLQkJSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAotCQlob3RrZXlfbWFzayA9IG1hc2sgJiBob3RrZXlfc291cmNlX21hc2s7Ci0JCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECi0JCWhvdGtleV9tYXNrX2dldCgpOwotCQlpZiAoaG90a2V5X21hc2sgIT0gbWFzaykgewotCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKLQkJCSAgICAgICAicmVxdWVzdGVkIGhvdCBrZXkgbWFzayAweCUwOHgsICIKLQkJCSAgICAgICAiZm9yY2VkIHRvIDB4JTA4eCAoTlZSQU0gcG9sbCBtYXNrIGlzICIKLQkJCSAgICAgICAiMHglMDh4KTogbm8gZmlybXdhcmUgbWFzayBzdXBwb3J0XG4iLAotCQkJICAgICAgIG1hc2ssIGhvdGtleV9tYXNrLCBob3RrZXlfc291cmNlX21hc2spOwotCQl9Ci0jZWxzZQotCQlob3RrZXlfbWFza19nZXQoKTsKLQkJcmMgPSAtRU5YSU87Ci0jZW5kaWYgLyogQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwgKi8KIAl9CiAKKwkvKgorCSAqIFdlICptdXN0KiBtYWtlIGFuIGluY29uZGl0aW9uYWwgY2FsbCB0byBob3RrZXlfbWFza19nZXQgdG8KKwkgKiByZWZyZXNoIGhvdGtleV9hY3BpX21hc2sgYW5kIHVwZGF0ZSBob3RrZXlfdXNlcl9tYXNrCisJICoKKwkgKiBUYWtlIHRoZSBvcHBvcnR1bml0eSB0byBhbHNvIGxvZyB3aGVuIHdlIGNhbm5vdCBfZW5hYmxlXworCSAqIGEgZ2l2ZW4gZXZlbnQuCisJICovCisJaWYgKCFob3RrZXlfbWFza19nZXQoKSAmJiAhcmMgJiYgKGZ3bWFzayAmIH5ob3RrZXlfYWNwaV9tYXNrKSkgeworCQlwcmludGsoVFBBQ1BJX05PVElDRQorCQkgICAgICAgImFza2VkIGZvciBob3RrZXkgbWFzayAweCUwOHgsIGJ1dCAiCisJCSAgICAgICAiZmlybXdhcmUgZm9yY2VkIGl0IHRvIDB4JTA4eFxuIiwKKwkJICAgICAgIGZ3bWFzaywgaG90a2V5X2FjcGlfbWFzayk7CisJfQorCisJaG90a2V5X21hc2tfd2Fybl9pbmNvbXBsZXRlX21hc2soKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIFNldHMgaG90a2V5X3VzZXJfbWFzayBhbmQgdHJpZXMgdG8gc2V0IHRoZSBmaXJtd2FyZSBtYXNrCisgKgorICogQ2FsbCB3aXRoIGhvdGtleV9tdXRleCBoZWxkCisgKi8KK3N0YXRpYyBpbnQgaG90a2V5X3VzZXJfbWFza19zZXQoY29uc3QgdTMyIG1hc2spCit7CisJaW50IHJjOworCisJLyogR2l2ZSBwZW9wbGUgYSBjaGFuY2UgdG8gbm90aWNlIHRoZXkgYXJlIGRvaW5nIHNvbWV0aGluZyB0aGF0CisJICogaXMgYm91bmQgdG8gZ28gYm9vbSBvbiB0aGVpciB1c2VycyBzb29uZXIgb3IgbGF0ZXIgKi8KKwlpZiAoIXRwX3dhcm5lZC5ob3RrZXlfbWFza19mZiAmJgorCSAgICAobWFzayA9PSAweGZmZmYgfHwgbWFzayA9PSAweGZmZmZmZiB8fAorCSAgICAgbWFzayA9PSAweGZmZmZmZmZmKSkgeworCQl0cF93YXJuZWQuaG90a2V5X21hc2tfZmYgPSAxOworCQlwcmludGsoVFBBQ1BJX05PVElDRQorCQkgICAgICAgInNldHRpbmcgdGhlIGhvdGtleSBtYXNrIHRvIDB4JTA4eCBpcyBsaWtlbHkgIgorCQkgICAgICAgIm5vdCB0aGUgYmVzdCB3YXkgdG8gZ28gYWJvdXQgaXRcbiIsIG1hc2spOworCQlwcmludGsoVFBBQ1BJX05PVElDRQorCQkgICAgICAgInBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUgZHJpdmVyIGRlZmF1bHRzLCAiCisJCSAgICAgICAiYW5kIHJlZmVyIHRvIHVwLXRvLWRhdGUgdGhpbmtwYWQtYWNwaSAiCisJCSAgICAgICAiZG9jdW1lbnRhdGlvblxuIik7CisJfQorCisJLyogVHJ5IHRvIGVuYWJsZSB3aGF0IHRoZSB1c2VyIGFza2VkIGZvciwgcGx1cyB3aGF0ZXZlciB3ZSBuZWVkLgorCSAqIHRoaXMgc3luY3MgZXZlcnl0aGluZyBidXQgd29uJ3QgZW5hYmxlIGJpdHMgaW4gaG90a2V5X3VzZXJfbWFzayAqLworCXJjID0gaG90a2V5X21hc2tfc2V0KChtYXNrIHwgaG90a2V5X2RyaXZlcl9tYXNrKSAmIH5ob3RrZXlfc291cmNlX21hc2spOworCisJLyogRW5hYmxlIHRoZSBhdmFpbGFibGUgYml0cyBpbiBob3RrZXlfdXNlcl9tYXNrICovCisJaG90a2V5X3VzZXJfbWFzayA9IG1hc2sgJiAoaG90a2V5X2FjcGlfbWFzayB8IGhvdGtleV9zb3VyY2VfbWFzayk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBTZXRzIHRoZSBkcml2ZXIgaG90a2V5IG1hc2suCisgKgorICogQ2FuIGJlIGNhbGxlZCBldmVuIGlmIHRoZSBob3RrZXkgc3ViZHJpdmVyIGlzIGluYWN0aXZlCisgKi8KK3N0YXRpYyBpbnQgdHBhY3BpX2hvdGtleV9kcml2ZXJfbWFza19zZXQoY29uc3QgdTMyIG1hc2spCit7CisJaW50IHJjOworCisJLyogRG8gdGhlIHJpZ2h0IHRoaW5nIGlmIGhvdGtleV9pbml0IGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0ICovCisJaWYgKCF0cF9mZWF0dXJlcy5ob3RrZXkpIHsKKwkJaG90a2V5X2RyaXZlcl9tYXNrID0gbWFzazsKKwkJcmV0dXJuIDA7CisJfQorCisJbXV0ZXhfbG9jaygmaG90a2V5X211dGV4KTsKKworCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQKKwlob3RrZXlfZHJpdmVyX21hc2sgPSBtYXNrOworI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCisJaG90a2V5X3NvdXJjZV9tYXNrIHw9IChtYXNrICYgfmhvdGtleV9hbGxfbWFzayk7CisjZW5kaWYKKwlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAorCisJcmMgPSBob3RrZXlfbWFza19zZXQoKGhvdGtleV9hY3BpX21hc2sgfCBob3RrZXlfZHJpdmVyX21hc2spICYKKwkJCQkJCQl+aG90a2V5X3NvdXJjZV9tYXNrKTsKKwltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIxMzcsMTEgKzIyNzksMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHRwYWNwaV9pbnB1dF9zZW5kX2tleSh1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCisvKiBEbyBOT1QgY2FsbCB3aXRob3V0IHZhbGlkYXRpbmcgc2NhbmNvZGUgZmlyc3QgKi8KK3N0YXRpYyB2b2lkIHRwYWNwaV9pbnB1dF9zZW5kX2tleShjb25zdCB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCiB7Ci0JdW5zaWduZWQgaW50IGtleWNvZGU7Ci0KLQlrZXljb2RlID0gaG90a2V5X2tleWNvZGVfbWFwW3NjYW5jb2RlXTsKKwljb25zdCB1bnNpZ25lZCBpbnQga2V5Y29kZSA9IGhvdGtleV9rZXljb2RlX21hcFtzY2FuY29kZV07CiAKIAlpZiAoa2V5Y29kZSAhPSBLRVlfUkVTRVJWRUQpIHsKIAkJbXV0ZXhfbG9jaygmdHBhY3BpX2lucHV0ZGV2X3NlbmRfbXV0ZXgpOwpAQCAtMjE2MiwxOSArMjMwMywyOCBAQAogCX0KIH0KIAorLyogRG8gTk9UIGNhbGwgd2l0aG91dCB2YWxpZGF0aW5nIHNjYW5jb2RlIGZpcnN0ICovCitzdGF0aWMgdm9pZCB0cGFjcGlfaW5wdXRfc2VuZF9rZXlfbWFza2VkKGNvbnN0IHVuc2lnbmVkIGludCBzY2FuY29kZSkKK3sKKwlob3RrZXlfZHJpdmVyX2V2ZW50KHNjYW5jb2RlKTsKKwlpZiAoaG90a2V5X3VzZXJfbWFzayAmICgxIDw8IHNjYW5jb2RlKSkKKwkJdHBhY3BpX2lucHV0X3NlbmRfa2V5KHNjYW5jb2RlKTsKK30KKwogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCiBzdGF0aWMgc3RydWN0IHRwX2FjcGlfZHJ2X3N0cnVjdCBpYm1faG90a2V5X2FjcGlkcml2ZXI7CiAKKy8qIERvIE5PVCBjYWxsIHdpdGhvdXQgdmFsaWRhdGluZyBzY2FuY29kZSBmaXJzdCAqLwogc3RhdGljIHZvaWQgdHBhY3BpX2hvdGtleV9zZW5kX2tleSh1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCiB7Ci0JdHBhY3BpX2lucHV0X3NlbmRfa2V5KHNjYW5jb2RlKTsKKwl0cGFjcGlfaW5wdXRfc2VuZF9rZXlfbWFza2VkKHNjYW5jb2RlKTsKIAlpZiAoaG90a2V5X3JlcG9ydF9tb2RlIDwgMikgewogCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KGlibV9ob3RrZXlfYWNwaWRyaXZlci5kZXZpY2UsCi0JCQkJCQkweDgwLCAweDEwMDEgKyBzY2FuY29kZSk7CisJCQkJMHg4MCwgVFBfSEtFWV9FVl9IT1RLRVlfQkFTRSArIHNjYW5jb2RlKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGhvdGtleV9yZWFkX252cmFtKHN0cnVjdCB0cF9udnJhbV9zdGF0ZSAqbiwgdTMyIG0pCitzdGF0aWMgdm9pZCBob3RrZXlfcmVhZF9udnJhbShzdHJ1Y3QgdHBfbnZyYW1fc3RhdGUgKm4sIGNvbnN0IHUzMiBtKQogewogCXU4IGQ7CiAKQEAgLTIyMTAsMjEgKzIzNjAsMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGhvdGtleV9jb21wYXJlX2FuZF9pc3N1ZV9ldmVudChzdHJ1Y3QgdHBfbnZyYW1fc3RhdGUgKm9sZG4sCisJCQkJCSAgIHN0cnVjdCB0cF9udnJhbV9zdGF0ZSAqbmV3biwKKwkJCQkJICAgY29uc3QgdTMyIGV2ZW50X21hc2spCit7CisKICNkZWZpbmUgVFBBQ1BJX0NPTVBBUkVfS0VZKF9fc2NhbmNvZGUsIF9fbWVtYmVyKSBcCiAJZG8geyBcCi0JCWlmICgobWFzayAmICgxIDw8IF9fc2NhbmNvZGUpKSAmJiBcCisJCWlmICgoZXZlbnRfbWFzayAmICgxIDw8IF9fc2NhbmNvZGUpKSAmJiBcCiAJCSAgICBvbGRuLT5fX21lbWJlciAhPSBuZXduLT5fX21lbWJlcikgXAotCQl0cGFjcGlfaG90a2V5X3NlbmRfa2V5KF9fc2NhbmNvZGUpOyBcCisJCQl0cGFjcGlfaG90a2V5X3NlbmRfa2V5KF9fc2NhbmNvZGUpOyBcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBUUEFDUElfTUFZX1NFTkRfS0VZKF9fc2NhbmNvZGUpIFwKLQlkbyB7IGlmIChtYXNrICYgKDEgPDwgX19zY2FuY29kZSkpIFwKLQkJdHBhY3BpX2hvdGtleV9zZW5kX2tleShfX3NjYW5jb2RlKTsgfSB3aGlsZSAoMCkKKwlkbyB7IFwKKwkJaWYgKGV2ZW50X21hc2sgJiAoMSA8PCBfX3NjYW5jb2RlKSkgXAorCQkJdHBhY3BpX2hvdGtleV9zZW5kX2tleShfX3NjYW5jb2RlKTsgXAorCX0gd2hpbGUgKDApCiAKLXN0YXRpYyB2b2lkIGhvdGtleV9jb21wYXJlX2FuZF9pc3N1ZV9ldmVudChzdHJ1Y3QgdHBfbnZyYW1fc3RhdGUgKm9sZG4sCi0JCQkJCSAgIHN0cnVjdCB0cF9udnJhbV9zdGF0ZSAqbmV3biwKLQkJCQkJICAgdTMyIG1hc2spCi17CiAJVFBBQ1BJX0NPTVBBUkVfS0VZKFRQX0FDUElfSE9US0VZU0NBTl9USElOS1BBRCwgdGhpbmtwYWRfdG9nZ2xlKTsKIAlUUEFDUElfQ09NUEFSRV9LRVkoVFBfQUNQSV9IT1RLRVlTQ0FOX0ZOU1BBQ0UsIHpvb21fdG9nZ2xlKTsKIAlUUEFDUElfQ09NUEFSRV9LRVkoVFBfQUNQSV9IT1RLRVlTQ0FOX0ZORjcsIGRpc3BsYXlfdG9nZ2xlKTsKQEAgLTIyNzAsMTUgKzI0MjMsMjIgQEAKIAkJCX0KIAkJfQogCX0KLX0KIAogI3VuZGVmIFRQQUNQSV9DT01QQVJFX0tFWQogI3VuZGVmIFRQQUNQSV9NQVlfU0VORF9LRVkKK30KIAorLyoKKyAqIFBvbGxpbmcgZHJpdmVyCisgKgorICogV2UgdHJhY2sgYWxsIGV2ZW50cyBpbiBob3RrZXlfc291cmNlX21hc2sgYWxsIHRoZSB0aW1lLCBzaW5jZQorICogbW9zdCBvZiB0aGVtIGFyZSBlZGdlLWJhc2VkLiAgV2Ugb25seSBpc3N1ZSB0aG9zZSByZXF1ZXN0ZWQgYnkKKyAqIGhvdGtleV91c2VyX21hc2sgb3IgaG90a2V5X2RyaXZlcl9tYXNrLCB0aG91Z2guCisgKi8KIHN0YXRpYyBpbnQgaG90a2V5X2t0aHJlYWQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdHBfbnZyYW1fc3RhdGUgc1syXTsKLQl1MzIgbWFzazsKKwl1MzIgcG9sbF9tYXNrLCBldmVudF9tYXNrOwogCXVuc2lnbmVkIGludCBzaSwgc287CiAJdW5zaWduZWQgbG9uZyB0OwogCXVuc2lnbmVkIGludCBjaGFuZ2VfZGV0ZWN0b3IsIG11c3RfcmVzZXQ7CkBAIC0yMjk4LDEwICsyNDU4LDEyIEBACiAJLyogSW5pdGlhbCBzdGF0ZSBmb3IgY29tcGFyZXMgKi8KIAltdXRleF9sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOwogCWNoYW5nZV9kZXRlY3RvciA9IGhvdGtleV9jb25maWdfY2hhbmdlOwotCW1hc2sgPSBob3RrZXlfc291cmNlX21hc2sgJiBob3RrZXlfbWFzazsKKwlwb2xsX21hc2sgPSBob3RrZXlfc291cmNlX21hc2s7CisJZXZlbnRfbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzayAmCisJCQkoaG90a2V5X2RyaXZlcl9tYXNrIHwgaG90a2V5X3VzZXJfbWFzayk7CiAJcG9sbF9mcmVxID0gaG90a2V5X3BvbGxfZnJlcTsKIAltdXRleF91bmxvY2soJmhvdGtleV90aHJlYWRfZGF0YV9tdXRleCk7Ci0JaG90a2V5X3JlYWRfbnZyYW0oJnNbc29dLCBtYXNrKTsKKwlob3RrZXlfcmVhZF9udnJhbSgmc1tzb10sIHBvbGxfbWFzayk7CiAKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlpZiAodCA9PSAwKSB7CkBAIC0yMzI0LDE1ICsyNDg2LDE3IEBACiAJCQl0ID0gMDsKIAkJCWNoYW5nZV9kZXRlY3RvciA9IGhvdGtleV9jb25maWdfY2hhbmdlOwogCQl9Ci0JCW1hc2sgPSBob3RrZXlfc291cmNlX21hc2sgJiBob3RrZXlfbWFzazsKKwkJcG9sbF9tYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrOworCQlldmVudF9tYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrICYKKwkJCQkoaG90a2V5X2RyaXZlcl9tYXNrIHwgaG90a2V5X3VzZXJfbWFzayk7CiAJCXBvbGxfZnJlcSA9IGhvdGtleV9wb2xsX2ZyZXE7CiAJCW11dGV4X3VubG9jaygmaG90a2V5X3RocmVhZF9kYXRhX211dGV4KTsKIAotCQlpZiAobGlrZWx5KG1hc2spKSB7Ci0JCQlob3RrZXlfcmVhZF9udnJhbSgmc1tzaV0sIG1hc2spOworCQlpZiAobGlrZWx5KHBvbGxfbWFzaykpIHsKKwkJCWhvdGtleV9yZWFkX252cmFtKCZzW3NpXSwgcG9sbF9tYXNrKTsKIAkJCWlmIChsaWtlbHkoc2kgIT0gc28pKSB7CiAJCQkJaG90a2V5X2NvbXBhcmVfYW5kX2lzc3VlX2V2ZW50KCZzW3NvXSwgJnNbc2ldLAotCQkJCQkJCQltYXNrKTsKKwkJCQkJCQkJZXZlbnRfbWFzayk7CiAJCQl9CiAJCX0KIApAQCAtMjM2NCwxMCArMjUyOCwxMiBAQAogLyogY2FsbCB3aXRoIGhvdGtleV9tdXRleCBoZWxkICovCiBzdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cChib29sIG1heV93YXJuKQogewotCXUzMiBob3RrZXlzX3RvX3BvbGwgPSBob3RrZXlfc291cmNlX21hc2sgJiBob3RrZXlfbWFzazsKKwljb25zdCB1MzIgcG9sbF9kcml2ZXJfbWFzayA9IGhvdGtleV9kcml2ZXJfbWFzayAmIGhvdGtleV9zb3VyY2VfbWFzazsKKwljb25zdCB1MzIgcG9sbF91c2VyX21hc2sgPSBob3RrZXlfdXNlcl9tYXNrICYgaG90a2V5X3NvdXJjZV9tYXNrOwogCi0JaWYgKGhvdGtleXNfdG9fcG9sbCAhPSAwICYmIGhvdGtleV9wb2xsX2ZyZXEgPiAwICYmCi0JICAgICh0cGFjcGlfaW5wdXRkZXYtPnVzZXJzID4gMCB8fCBob3RrZXlfcmVwb3J0X21vZGUgPCAyKSkgeworCWlmIChob3RrZXlfcG9sbF9mcmVxID4gMCAmJgorCSAgICAocG9sbF9kcml2ZXJfbWFzayB8fAorCSAgICAgKHBvbGxfdXNlcl9tYXNrICYmIHRwYWNwaV9pbnB1dGRldi0+dXNlcnMgPiAwKSkpIHsKIAkJaWYgKCF0cGFjcGlfaG90a2V5X3Rhc2spIHsKIAkJCXRwYWNwaV9ob3RrZXlfdGFzayA9IGt0aHJlYWRfcnVuKGhvdGtleV9rdGhyZWFkLAogCQkJCQlOVUxMLCBUUEFDUElfTlZSQU1fS1RIUkVBRF9OQU1FKTsKQEAgLTIzODAsMTIgKzI1NDYsMTMgQEAKIAkJfQogCX0gZWxzZSB7CiAJCWhvdGtleV9wb2xsX3N0b3Bfc3luYygpOwotCQlpZiAobWF5X3dhcm4gJiYgaG90a2V5c190b19wb2xsICE9IDAgJiYKKwkJaWYgKG1heV93YXJuICYmIChwb2xsX2RyaXZlcl9tYXNrIHx8IHBvbGxfdXNlcl9tYXNrKSAmJgogCQkgICAgaG90a2V5X3BvbGxfZnJlcSA9PSAwKSB7CiAJCQlwcmludGsoVFBBQ1BJX05PVElDRQotCQkJCSJob3Qga2V5cyAweCUwOHggcmVxdWlyZSBwb2xsaW5nLCAiCi0JCQkJIndoaWNoIGlzIGN1cnJlbnRseSBkaXNhYmxlZFxuIiwKLQkJCQlob3RrZXlzX3RvX3BvbGwpOworCQkJCSJob3Qga2V5cyAweCUwOHggYW5kL29yIGV2ZW50cyAweCUwOHggIgorCQkJCSJyZXF1aXJlIHBvbGxpbmcsIHdoaWNoIGlzIGN1cnJlbnRseSAiCisJCQkJImRpc2FibGVkXG4iLAorCQkJCXBvbGxfdXNlcl9tYXNrLCBwb2xsX2RyaXZlcl9tYXNrKTsKIAkJfQogCX0KIH0KQEAgLTI0MDMsOSArMjU3MCw3IEBACiAJaWYgKCFmcmVxKQogCQlob3RrZXlfcG9sbF9zdG9wX3N5bmMoKTsKIAotCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQKIAlob3RrZXlfcG9sbF9mcmVxID0gZnJlcTsKLQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAogfQogCiAjZWxzZSAvKiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTCAqLwpAQCAtMjQ0MCw3ICsyNjA1LDggQEAKIHN0YXRpYyB2b2lkIGhvdGtleV9pbnB1dGRldl9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7CiAJLyogZGlzYWJsZSBob3RrZXkgcG9sbGluZyB3aGVuIHBvc3NpYmxlICovCi0JaWYgKHRwYWNwaV9saWZlY3ljbGUgPT0gVFBBQ1BJX0xJRkVfUlVOTklORykKKwlpZiAodHBhY3BpX2xpZmVjeWNsZSA9PSBUUEFDUElfTElGRV9SVU5OSU5HICYmCisJICAgICEoaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X2RyaXZlcl9tYXNrKSkKIAkJaG90a2V5X3BvbGxfc2V0dXBfc2FmZShmYWxzZSk7CiB9CiAKQEAgLTI0ODgsMTUgKzI2NTQsNyBAQAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjaGFyICpidWYpCiB7Ci0JaW50IHJlczsKLQotCWlmIChtdXRleF9sb2NrX2tpbGxhYmxlKCZob3RrZXlfbXV0ZXgpKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCXJlcyA9IGhvdGtleV9tYXNrX2dldCgpOwotCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKLQotCXJldHVybiAocmVzKT8KLQkJcmVzIDogc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwOHhcbiIsIGhvdGtleV9tYXNrKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwOHhcbiIsIGhvdGtleV91c2VyX21hc2spOwogfQogCiBzdGF0aWMgc3NpemVfdCBob3RrZXlfbWFza19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0yNTEyLDcgKzI2NzAsNyBAQAogCWlmIChtdXRleF9sb2NrX2tpbGxhYmxlKCZob3RrZXlfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JcmVzID0gaG90a2V5X21hc2tfc2V0KHQpOworCXJlcyA9IGhvdGtleV91c2VyX21hc2tfc2V0KHQpOwogCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKIAlob3RrZXlfcG9sbF9zZXR1cCh0cnVlKTsKQEAgLTI1OTQsNiArMjc1Miw4IEBACiAJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyB0OworCXUzMiByX2V2OworCWludCByYzsKIAogCWlmIChwYXJzZV9zdHJ0b3VsKGJ1ZiwgMHhmZmZmZmZmZlVMLCAmdCkgfHwKIAkJKCh0ICYgflRQQUNQSV9IS0VZX05WUkFNX0tOT1dOX01BU0spICE9IDApKQpAQCAtMjYwNiwxNCArMjc2NiwyOCBAQAogCWhvdGtleV9zb3VyY2VfbWFzayA9IHQ7CiAJSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKIAorCXJjID0gaG90a2V5X21hc2tfc2V0KChob3RrZXlfdXNlcl9tYXNrIHwgaG90a2V5X2RyaXZlcl9tYXNrKSAmCisJCQl+aG90a2V5X3NvdXJjZV9tYXNrKTsKIAlob3RrZXlfcG9sbF9zZXR1cCh0cnVlKTsKLQlob3RrZXlfbWFza19zZXQoaG90a2V5X21hc2spOworCisJLyogY2hlY2sgaWYgZXZlbnRzIG5lZWRlZCBieSB0aGUgZHJpdmVyIGdvdCBkaXNhYmxlZCAqLworCXJfZXYgPSBob3RrZXlfZHJpdmVyX21hc2sgJiB+KGhvdGtleV9hY3BpX21hc2sgJiBob3RrZXlfYWxsX21hc2spCisJCSYgfmhvdGtleV9zb3VyY2VfbWFzayAmIFRQQUNQSV9IS0VZX05WUkFNX0tOT1dOX01BU0s7CiAKIAltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CiAKKwlpZiAocmMgPCAwKQorCQlwcmludGsoVFBBQ1BJX0VSUiAiaG90a2V5X3NvdXJjZV9tYXNrOiBmYWlsZWQgdG8gdXBkYXRlIHRoZSIKKwkJCSJmaXJtd2FyZSBldmVudCBtYXNrIVxuIik7CisKKwlpZiAocl9ldikKKwkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UgImhvdGtleV9zb3VyY2VfbWFzazogIgorCQkJInNvbWUgaW1wb3J0YW50IGV2ZW50cyB3ZXJlIGRpc2FibGVkOiAiCisJCQkiMHglMDR4XG4iLCByX2V2KTsKKwogCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygiaG90a2V5X3NvdXJjZV9tYXNrIiwgInNldCB0byAweCUwOGx4XG4iLCB0KTsKIAotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IGNvdW50OwogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfaG90a2V5X3NvdXJjZV9tYXNrID0KQEAgLTI3MzEsOSArMjkwNSw4IEBACiAKIHN0YXRpYyB2b2lkIGhvdGtleV93YWtldXBfcmVhc29uX25vdGlmeV9jaGFuZ2Uodm9pZCkKIHsKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spCi0JCXN5c2ZzX25vdGlmeSgmdHBhY3BpX3BkZXYtPmRldi5rb2JqLCBOVUxMLAotCQkJICAgICAid2FrZXVwX3JlYXNvbiIpOworCXN5c2ZzX25vdGlmeSgmdHBhY3BpX3BkZXYtPmRldi5rb2JqLCBOVUxMLAorCQkgICAgICJ3YWtldXBfcmVhc29uIik7CiB9CiAKIC8qIHN5c2ZzIHdha2V1cCBob3R1bnBsdWdfY29tcGxldGUgKHBvbGxhYmxlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjc1MCw5ICsyOTIzLDggQEAKIAogc3RhdGljIHZvaWQgaG90a2V5X3dha2V1cF9ob3R1bnBsdWdfY29tcGxldGVfbm90aWZ5X2NoYW5nZSh2b2lkKQogewotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykKLQkJc3lzZnNfbm90aWZ5KCZ0cGFjcGlfcGRldi0+ZGV2LmtvYmosIE5VTEwsCi0JCQkgICAgICJ3YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlIik7CisJc3lzZnNfbm90aWZ5KCZ0cGFjcGlfcGRldi0+ZGV2LmtvYmosIE5VTEwsCisJCSAgICAgIndha2V1cF9ob3R1bnBsdWdfY29tcGxldGUiKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNzYwLDI3ICsyOTMyLDE5IEBACiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaG90a2V5X2F0dHJpYnV0ZXNbXSBfX2luaXRkYXRhID0gewogCSZkZXZfYXR0cl9ob3RrZXlfZW5hYmxlLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9iaW9zX2VuYWJsZWQuYXR0ciwKKwkmZGV2X2F0dHJfaG90a2V5X2Jpb3NfbWFzay5hdHRyLAogCSZkZXZfYXR0cl9ob3RrZXlfcmVwb3J0X21vZGUuYXR0ciwKLSNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAorCSZkZXZfYXR0cl9ob3RrZXlfd2FrZXVwX3JlYXNvbi5hdHRyLAorCSZkZXZfYXR0cl9ob3RrZXlfd2FrZXVwX2hvdHVucGx1Z19jb21wbGV0ZS5hdHRyLAogCSZkZXZfYXR0cl9ob3RrZXlfbWFzay5hdHRyLAogCSZkZXZfYXR0cl9ob3RrZXlfYWxsX21hc2suYXR0ciwKIAkmZGV2X2F0dHJfaG90a2V5X3JlY29tbWVuZGVkX21hc2suYXR0ciwKKyNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAogCSZkZXZfYXR0cl9ob3RrZXlfc291cmNlX21hc2suYXR0ciwKIAkmZGV2X2F0dHJfaG90a2V5X3BvbGxfZnJlcS5hdHRyLAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaG90a2V5X21hc2tfYXR0cmlidXRlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmRldl9hdHRyX2hvdGtleV9iaW9zX21hc2suYXR0ciwKLSNpZm5kZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKLQkmZGV2X2F0dHJfaG90a2V5X21hc2suYXR0ciwKLQkmZGV2X2F0dHJfaG90a2V5X2FsbF9tYXNrLmF0dHIsCi0JJmRldl9hdHRyX2hvdGtleV9yZWNvbW1lbmRlZF9tYXNrLmF0dHIsCi0jZW5kaWYKLQkmZGV2X2F0dHJfaG90a2V5X3dha2V1cF9yZWFzb24uYXR0ciwKLQkmZGV2X2F0dHJfaG90a2V5X3dha2V1cF9ob3R1bnBsdWdfY29tcGxldGUuYXR0ciwKLX07Ci0KIC8qCiAgKiBTeW5jIGJvdGggdGhlIGh3IGFuZCBzdyBibG9ja2luZyBzdGF0ZSBvZiBhbGwgc3dpdGNoZXMKICAqLwpAQCAtMjg0MywxNiArMzAwNywxNiBAQAogCiAJa2ZyZWUoaG90a2V5X2tleWNvZGVfbWFwKTsKIAotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXkpIHsKLQkJZGJnX3ByaW50ayhUUEFDUElfREJHX0VYSVQgfCBUUEFDUElfREJHX0hLRVksCi0JCQkgICAicmVzdG9yaW5nIG9yaWdpbmFsIGhvdCBrZXkgbWFza1xuIik7Ci0JCS8qIG5vIHNob3J0LWNpcmN1aXQgYm9vbGVhbiBvcGVyYXRvciBiZWxvdyEgKi8KLQkJaWYgKChob3RrZXlfbWFza19zZXQoaG90a2V5X29yaWdfbWFzaykgfAotCQkgICAgIGhvdGtleV9zdGF0dXNfc2V0KGZhbHNlKSkgIT0gMCkKLQkJCXByaW50ayhUUEFDUElfRVJSCi0JCQkgICAgICAgImZhaWxlZCB0byByZXN0b3JlIGhvdCBrZXkgbWFzayAiCi0JCQkgICAgICAgInRvIEJJT1MgZGVmYXVsdHNcbiIpOwotCX0KKwlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfRVhJVCB8IFRQQUNQSV9EQkdfSEtFWSwKKwkJICAgInJlc3RvcmluZyBvcmlnaW5hbCBIS0VZIHN0YXR1cyBhbmQgbWFza1xuIik7CisJLyogeWVzLCB0aGVyZSBpcyBhIGJpdHdpc2Ugb3IgYmVsb3csIHdlIHdhbnQgdGhlCisJICogZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBldmVuIGlmIG9uZSBvZiB0aGVtIGZhaWwgKi8KKwlpZiAoKCh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzayAmJgorCSAgICAgIGhvdGtleV9tYXNrX3NldChob3RrZXlfb3JpZ19tYXNrKSkgfAorCSAgICAgaG90a2V5X3N0YXR1c19zZXQoZmFsc2UpKSAhPSAwKQorCQlwcmludGsoVFBBQ1BJX0VSUgorCQkgICAgICAgImZhaWxlZCB0byByZXN0b3JlIGhvdCBrZXkgbWFzayAiCisJCSAgICAgICAidG8gQklPUyBkZWZhdWx0c1xuIik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBob3RrZXlfdW5tYXAoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKQpAQCAtMjg2NCw2ICszMDI4LDM1IEBACiAJfQogfQogCisvKgorICogSEtFWSBxdWlya3M6CisgKiAgIFRQQUNQSV9IS19RX0lOSU1BU0s6CVN1cHBvcnRzIEZOK0YzLEZOK0Y0LEZOK0YxMgorICovCisKKyNkZWZpbmUJVFBBQ1BJX0hLX1FfSU5JTUFTSwkweDAwMDEKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0cGFjcGlfcXVpcmsgdHBhY3BpX2hvdGtleV9xdGFibGVbXSBfX2luaXRjb25zdCA9IHsKKwlUUEFDUElfUV9JQk0oJ0knLCAnSCcsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiA2MDBFICovCisJVFBBQ1BJX1FfSUJNKCdJJywgJ04nLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogNjAwRSAqLworCVRQQUNQSV9RX0lCTSgnSScsICdEJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIDc3MCwgNzcwRSwgNzcwRUQgKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnVycsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjBtICovCisJVFBBQ1BJX1FfSUJNKCdJJywgJ1YnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIwcCAqLworCVRQQUNQSV9RX0lCTSgnMScsICcwJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMWUsIEEyMmUgKi8KKwlUUEFDUElfUV9JQk0oJ0snLCAnVScsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjFlICovCisJVFBBQ1BJX1FfSUJNKCdLJywgJ1gnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIxbSwgQTIybSAqLworCVRQQUNQSV9RX0lCTSgnSycsICdZJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMXAsIEEyMnAgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnQicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjJlICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJzMnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIybSAqLworCVRQQUNQSV9RX0lCTSgnMScsICdFJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEzMC9wICgwKSAqLworCVRQQUNQSV9RX0lCTSgnMScsICdDJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIFIzMCAqLworCVRQQUNQSV9RX0lCTSgnMScsICdGJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIFIzMSAqLworCVRQQUNQSV9RX0lCTSgnSScsICdZJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIFQyMCAqLworCVRQQUNQSV9RX0lCTSgnSycsICdaJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIFQyMSAqLworCVRQQUNQSV9RX0lCTSgnMScsICc2JywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIFQyMiAqLworCVRQQUNQSV9RX0lCTSgnSScsICdaJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIFgyMCwgWDIxICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJ0QnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogWDIyLCBYMjMsIFgyNCAqLworfTsKKwogc3RhdGljIGludCBfX2luaXQgaG90a2V5X2luaXQoc3RydWN0IGlibV9pbml0X3N0cnVjdCAqaWlibSkKIHsKIAkvKiBSZXF1aXJlbWVudHMgZm9yIGNoYW5naW5nIHRoZSBkZWZhdWx0IGtleW1hcHM6CkBAIC0yOTA2LDkgKzMwOTksNyBAQAogCQlLRVlfVU5LTk9XTiwJLyogMHgwRDogRk4rSU5TRVJUICovCiAJCUtFWV9VTktOT1dOLAkvKiAweDBFOiBGTitERUxFVEUgKi8KIAotCQkvKiBicmlnaHRuZXNzOiBmaXJtd2FyZSBhbHdheXMgcmVhY3RzIHRvIHRoZW0sIHVubGVzcwotCQkgKiBYLm9yZyBkaWQgc29tZSB0cmlja3MgaW4gdGhlIHJhZGVvbiBCSU9TIHNjcmF0Y2gKLQkJICogcmVnaXN0ZXJzIG9mICpzb21lKiBtb2RlbHMgKi8KKwkJLyogYnJpZ2h0bmVzczogZmlybXdhcmUgYWx3YXlzIHJlYWN0cyB0byB0aGVtICovCiAJCUtFWV9SRVNFUlZFRCwJLyogMHgwRjogRk4rSE9NRSAoYnJpZ2h0bmVzcyB1cCkgKi8KIAkJS0VZX1JFU0VSVkVELAkvKiAweDEwOiBGTitFTkQgKGJyaWdodG5lc3MgZG93bikgKi8KIApAQCAtMjk4Myw2ICszMTc0LDggQEAKIAlpbnQgc3RhdHVzOwogCWludCBoa2V5djsKIAorCXVuc2lnbmVkIGxvbmcgcXVpcmtzOworCiAJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAogCQkJImluaXRpYWxpemluZyBob3RrZXkgc3ViZHJpdmVyXG4iKTsKIApAQCAtMzAwOCw5ICszMjAxLDE2IEBACiAJaWYgKCF0cF9mZWF0dXJlcy5ob3RrZXkpCiAJCXJldHVybiAxOwogCisJcXVpcmtzID0gdHBhY3BpX2NoZWNrX3F1aXJrcyh0cGFjcGlfaG90a2V5X3F0YWJsZSwKKwkJCQkgICAgIEFSUkFZX1NJWkUodHBhY3BpX2hvdGtleV9xdGFibGUpKTsKKwogCXRwYWNwaV9kaXNhYmxlX2JyaWdodG5lc3NfZGVsYXkoKTsKIAotCWhvdGtleV9kZXZfYXR0cmlidXRlcyA9IGNyZWF0ZV9hdHRyX3NldCgxMywgTlVMTCk7CisJLyogTVVTVCBoYXZlIGVub3VnaCBzcGFjZSBmb3IgYWxsIGF0dHJpYnV0ZXMgdG8gYmUgYWRkZWQgdG8KKwkgKiBob3RrZXlfZGV2X2F0dHJpYnV0ZXMgKi8KKwlob3RrZXlfZGV2X2F0dHJpYnV0ZXMgPSBjcmVhdGVfYXR0cl9zZXQoCisJCQkJCUFSUkFZX1NJWkUoaG90a2V5X2F0dHJpYnV0ZXMpICsgMiwKKwkJCQkJTlVMTCk7CiAJaWYgKCFob3RrZXlfZGV2X2F0dHJpYnV0ZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCXJlcyA9IGFkZF9tYW55X3RvX2F0dHJfc2V0KGhvdGtleV9kZXZfYXR0cmlidXRlcywKQEAgLTMwMTksNyArMzIxOSw3IEBACiAJaWYgKHJlcykKIAkJZ290byBlcnJfZXhpdDsKIAotCS8qIG1hc2sgbm90IHN1cHBvcnRlZCBvbiA1NzAsIDYwMGUveCwgNzcwZSwgNzcweCwgQTIxZSwgQTJ4bS9wLAorCS8qIG1hc2sgbm90IHN1cHBvcnRlZCBvbiA2MDBlL3gsIDc3MGUsIDc3MHgsIEEyMWUsIEEyeG0vcCwKIAkgICBBMzAsIFIzMCwgUjMxLCBUMjAtMjIsIFgyMC0yMSwgWDIyLTI0LiAgRGV0ZWN0ZWQgYnkgY2hlY2tpbmcKIAkgICBmb3IgSEtFWSBpbnRlcmZhY2UgdmVyc2lvbiAweDEwMCAqLwogCWlmIChhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmaGtleXYsICJNSEtWIiwgInFkIikpIHsKQEAgLTMwMzMsMTAgKzMyMzMsMjIgQEAKIAkJCSAqIE1IS1YgMHgxMDAgaW4gQTMxLCBSNDAsIFI0MGUsCiAJCQkgKiBUNHgsIFgzMSwgYW5kIGxhdGVyCiAJCQkgKi8KLQkJCXRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrID0gMTsKIAkJCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKIAkJCQkiZmlybXdhcmUgSEtFWSBpbnRlcmZhY2UgdmVyc2lvbjogMHgleFxuIiwKIAkJCQloa2V5dik7CisKKwkJCS8qIFBhcmFub2lhIGNoZWNrIEFORCBpbml0IGhvdGtleV9hbGxfbWFzayAqLworCQkJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmaG90a2V5X2FsbF9tYXNrLAorCQkJCQkiTUhLQSIsICJxZCIpKSB7CisJCQkJcHJpbnRrKFRQQUNQSV9FUlIKKwkJCQkgICAgICAgIm1pc3NpbmcgTUhLQSBoYW5kbGVyLCAiCisJCQkJICAgICAgICJwbGVhc2UgcmVwb3J0IHRoaXMgdG8gJXNcbiIsCisJCQkJICAgICAgIFRQQUNQSV9NQUlMKTsKKwkJCQkvKiBGYWxsYmFjazogcHJlLWluaXQgZm9yIEZOK0YzLEY0LEYxMiAqLworCQkJCWhvdGtleV9hbGxfbWFzayA9IDB4MDgwY1U7CisJCQl9IGVsc2UgeworCQkJCXRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrID0gMTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMzA0NCwzMiArMzI1NiwyMyBAQAogCQkiaG90a2V5IG1hc2tzIGFyZSAlc1xuIiwKIAkJc3RyX3N1cHBvcnRlZCh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykpOwogCi0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7Ci0JCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJmhvdGtleV9hbGxfbWFzaywKLQkJCQkiTUhLQSIsICJxZCIpKSB7Ci0JCQlwcmludGsoVFBBQ1BJX0VSUgotCQkJICAgICAgICJtaXNzaW5nIE1IS0EgaGFuZGxlciwgIgotCQkJICAgICAgICJwbGVhc2UgcmVwb3J0IHRoaXMgdG8gJXNcbiIsCi0JCQkgICAgICAgVFBBQ1BJX01BSUwpOwotCQkJLyogRk4rRjEyLCBGTitGNCwgRk4rRjMgKi8KLQkJCWhvdGtleV9hbGxfbWFzayA9IDB4MDgwY1U7Ci0JCX0KLQl9CisJLyogSW5pdCBob3RrZXlfYWxsX21hc2sgaWYgbm90IGluaXRpYWxpemVkIHlldCAqLworCWlmICghdHBfZmVhdHVyZXMuaG90a2V5X21hc2sgJiYgIWhvdGtleV9hbGxfbWFzayAmJgorCSAgICAocXVpcmtzICYgVFBBQ1BJX0hLX1FfSU5JTUFTSykpCisJCWhvdGtleV9hbGxfbWFzayA9IDB4MDgwY1U7ICAvKiBGTitGMTIsIEZOK0Y0LCBGTitGMyAqLwogCi0JLyogaG90a2V5X3NvdXJjZV9tYXNrICptdXN0KiBiZSB6ZXJvIGZvcgotCSAqIHRoZSBmaXJzdCBob3RrZXlfbWFza19nZXQgKi8KKwkvKiBJbml0IGhvdGtleV9hY3BpX21hc2sgYW5kIGhvdGtleV9vcmlnX21hc2sgKi8KIAlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKKwkJLyogaG90a2V5X3NvdXJjZV9tYXNrICptdXN0KiBiZSB6ZXJvIGZvcgorCQkgKiB0aGUgZmlyc3QgaG90a2V5X21hc2tfZ2V0IHRvIHJldHVybiBob3RrZXlfb3JpZ19tYXNrICovCiAJCXJlcyA9IGhvdGtleV9tYXNrX2dldCgpOwogCQlpZiAocmVzKQogCQkJZ290byBlcnJfZXhpdDsKIAotCQlob3RrZXlfb3JpZ19tYXNrID0gaG90a2V5X21hc2s7Ci0JCXJlcyA9IGFkZF9tYW55X3RvX2F0dHJfc2V0KAotCQkJCWhvdGtleV9kZXZfYXR0cmlidXRlcywKLQkJCQlob3RrZXlfbWFza19hdHRyaWJ1dGVzLAotCQkJCUFSUkFZX1NJWkUoaG90a2V5X21hc2tfYXR0cmlidXRlcykpOwotCQlpZiAocmVzKQotCQkJZ290byBlcnJfZXhpdDsKKwkJaG90a2V5X29yaWdfbWFzayA9IGhvdGtleV9hY3BpX21hc2s7CisJfSBlbHNlIHsKKwkJaG90a2V5X29yaWdfbWFzayA9IGhvdGtleV9hbGxfbWFzazsKKwkJaG90a2V5X2FjcGlfbWFzayA9IGhvdGtleV9hbGxfbWFzazsKIAl9CiAKICNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9ERUJVR0ZBQ0lMSVRJRVMKQEAgLTMxODMsMTQgKzMzODYsOSBAQAogCX0KIAogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCi0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7Ci0JCWhvdGtleV9zb3VyY2VfbWFzayA9IFRQQUNQSV9IS0VZX05WUkFNX0dPT0RfTUFTSwotCQkJCQkmIH5ob3RrZXlfYWxsX21hc2sKLQkJCQkJJiB+aG90a2V5X3Jlc2VydmVkX21hc2s7Ci0JfSBlbHNlIHsKLQkJaG90a2V5X3NvdXJjZV9tYXNrID0gVFBBQ1BJX0hLRVlfTlZSQU1fR09PRF9NQVNLCi0JCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrOwotCX0KKwlob3RrZXlfc291cmNlX21hc2sgPSBUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sKKwkJCQkmIH5ob3RrZXlfYWxsX21hc2sKKwkJCQkmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzazsKIAogCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKIAkJICAgICJob3RrZXkgc291cmNlIG1hc2sgMHglMDh4LCBwb2xsaW5nIGZyZXEgJXVcbiIsCkBAIC0zMjA0LDEzICszNDAyLDE4IEBACiAJCWhvdGtleV9leGl0KCk7CiAJCXJldHVybiByZXM7CiAJfQotCXJlcyA9IGhvdGtleV9tYXNrX3NldCgoKGhvdGtleV9hbGxfbWFzayB8IGhvdGtleV9zb3VyY2VfbWFzaykKLQkJCQkmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzaykKLQkJCQl8IGhvdGtleV9vcmlnX21hc2spOworCXJlcyA9IGhvdGtleV9tYXNrX3NldCgoKGhvdGtleV9hbGxfbWFzayAmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzaykKKwkJCSAgICAgICB8IGhvdGtleV9kcml2ZXJfbWFzaykKKwkJCSAgICAgICYgfmhvdGtleV9zb3VyY2VfbWFzayk7CiAJaWYgKHJlcyA8IDAgJiYgcmVzICE9IC1FTlhJTykgewogCQlob3RrZXlfZXhpdCgpOwogCQlyZXR1cm4gcmVzOwogCX0KKwlob3RrZXlfdXNlcl9tYXNrID0gKGhvdGtleV9hY3BpX21hc2sgfCBob3RrZXlfc291cmNlX21hc2spCisJCQkJJiB+aG90a2V5X3Jlc2VydmVkX21hc2s7CisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAorCQkiaW5pdGlhbCBtYXNrczogdXNlcj0weCUwOHgsIGZ3PTB4JTA4eCwgcG9sbD0weCUwOHhcbiIsCisJCWhvdGtleV91c2VyX21hc2ssIGhvdGtleV9hY3BpX21hc2ssIGhvdGtleV9zb3VyY2VfbWFzayk7CiAKIAlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKIAkJCSJsZWdhY3kgaWJtL2hvdGtleSBldmVudCByZXBvcnRpbmcgb3ZlciBwcm9jZnMgJXNcbiIsCkBAIC0zMjQ1LDcgKzM0NDgsNyBAQAogCWlmIChzY2FuY29kZSA+IDAgJiYgc2NhbmNvZGUgPCAweDIxKSB7CiAJCXNjYW5jb2RlLS07CiAJCWlmICghKGhvdGtleV9zb3VyY2VfbWFzayAmICgxIDw8IHNjYW5jb2RlKSkpIHsKLQkJCXRwYWNwaV9pbnB1dF9zZW5kX2tleShzY2FuY29kZSk7CisJCQl0cGFjcGlfaW5wdXRfc2VuZF9rZXlfbWFza2VkKHNjYW5jb2RlKTsKIAkJCSpzZW5kX2FjcGlfZXYgPSBmYWxzZTsKIAkJfSBlbHNlIHsKIAkJCSppZ25vcmVfYWNwaV9ldiA9IHRydWU7CkBAIC0zMjY0LDIwICszNDY3LDIwIEBACiAJKmlnbm9yZV9hY3BpX2V2ID0gZmFsc2U7CiAKIAlzd2l0Y2ggKGhrZXkpIHsKLQljYXNlIDB4MjMwNDogLyogc3VzcGVuZCwgdW5kb2NrICovCi0JY2FzZSAweDI0MDQ6IC8qIGhpYmVybmF0aW9uLCB1bmRvY2sgKi8KKwljYXNlIFRQX0hLRVlfRVZfV0tVUF9TM19VTkRPQ0s6IC8qIHN1c3BlbmQsIHVuZG9jayAqLworCWNhc2UgVFBfSEtFWV9FVl9XS1VQX1M0X1VORE9DSzogLyogaGliZXJuYXRpb24sIHVuZG9jayAqLwogCQlob3RrZXlfd2FrZXVwX3JlYXNvbiA9IFRQX0FDUElfV0FLRVVQX1VORE9DSzsKIAkJKmlnbm9yZV9hY3BpX2V2ID0gdHJ1ZTsKIAkJYnJlYWs7CiAKLQljYXNlIDB4MjMwNTogLyogc3VzcGVuZCwgYmF5IGVqZWN0ICovCi0JY2FzZSAweDI0MDU6IC8qIGhpYmVybmF0aW9uLCBiYXkgZWplY3QgKi8KKwljYXNlIFRQX0hLRVlfRVZfV0tVUF9TM19CQVlFSjogLyogc3VzcGVuZCwgYmF5IGVqZWN0ICovCisJY2FzZSBUUF9IS0VZX0VWX1dLVVBfUzRfQkFZRUo6IC8qIGhpYmVybmF0aW9uLCBiYXkgZWplY3QgKi8KIAkJaG90a2V5X3dha2V1cF9yZWFzb24gPSBUUF9BQ1BJX1dBS0VVUF9CQVlFSjsKIAkJKmlnbm9yZV9hY3BpX2V2ID0gdHJ1ZTsKIAkJYnJlYWs7CiAKLQljYXNlIDB4MjMxMzogLyogQmF0dGVyeSBvbiBjcml0aWNhbCBsb3cgbGV2ZWwgKFMzKSAqLwotCWNhc2UgMHgyNDEzOiAvKiBCYXR0ZXJ5IG9uIGNyaXRpY2FsIGxvdyBsZXZlbCAoUzQpICovCisJY2FzZSBUUF9IS0VZX0VWX1dLVVBfUzNfQkFUTE9XOiAvKiBCYXR0ZXJ5IG9uIGNyaXRpY2FsIGxvdyBsZXZlbC9TMyAqLworCWNhc2UgVFBfSEtFWV9FVl9XS1VQX1M0X0JBVExPVzogLyogQmF0dGVyeSBvbiBjcml0aWNhbCBsb3cgbGV2ZWwvUzQgKi8KIAkJcHJpbnRrKFRQQUNQSV9BTEVSVAogCQkJIkVNRVJHRU5DWSBXQUtFVVA6IGJhdHRlcnkgYWxtb3N0IGVtcHR5XG4iKTsKIAkJLyogaG93IHRvIGF1dG8taGVhbDogKi8KQEAgLTMzMDcsMjEgKzM1MTAsMjEgQEAKIAkqaWdub3JlX2FjcGlfZXYgPSBmYWxzZTsKIAogCXN3aXRjaCAoaGtleSkgewotCWNhc2UgMHg1MDEwOiAvKiBMZW5vdm8gbmV3IEJJT1M6IGJyaWdodG5lc3MgY2hhbmdlZCAqLwotCWNhc2UgMHg1MDBiOiAvKiBYNjF0OiB0YWJsZXQgcGVuIGluc2VydGVkIGludG8gYmF5ICovCi0JY2FzZSAweDUwMGM6IC8qIFg2MXQ6IHRhYmxldCBwZW4gcmVtb3ZlZCBmcm9tIGJheSAqLworCWNhc2UgVFBfSEtFWV9FVl9QRU5fSU5TRVJURUQ6ICAvKiBYNjF0OiB0YWJsZXQgcGVuIGluc2VydGVkIGludG8gYmF5ICovCisJY2FzZSBUUF9IS0VZX0VWX1BFTl9SRU1PVkVEOiAgIC8qIFg2MXQ6IHRhYmxldCBwZW4gcmVtb3ZlZCBmcm9tIGJheSAqLwogCQlyZXR1cm4gdHJ1ZTsKIAotCWNhc2UgMHg1MDA5OiAvKiBYNDF0LVg2MXQ6IHN3aXZlbCB1cCAodGFibGV0IG1vZGUpICovCi0JY2FzZSAweDUwMGE6IC8qIFg0MXQtWDYxdDogc3dpdmVsIGRvd24gKG5vcm1hbCBtb2RlKSAqLworCWNhc2UgVFBfSEtFWV9FVl9UQUJMRVRfVEFCTEVUOiAgIC8qIFg0MXQtWDYxdDogdGFibGV0IG1vZGUgKi8KKwljYXNlIFRQX0hLRVlfRVZfVEFCTEVUX05PVEVCT09LOiAvKiBYNDF0LVg2MXQ6IG5vcm1hbCBtb2RlICovCiAJCXRwYWNwaV9pbnB1dF9zZW5kX3RhYmxldHN3KCk7CiAJCWhvdGtleV90YWJsZXRfbW9kZV9ub3RpZnlfY2hhbmdlKCk7CiAJCSpzZW5kX2FjcGlfZXYgPSBmYWxzZTsKIAkJcmV0dXJuIHRydWU7CiAKLQljYXNlIDB4NTAwMToKLQljYXNlIDB4NTAwMjoKLQkJLyogTElEIHN3aXRjaCBldmVudHMuICBEbyBub3QgcHJvcGFnYXRlICovCisJY2FzZSBUUF9IS0VZX0VWX0xJRF9DTE9TRToJLyogTGlkIGNsb3NlZCAqLworCWNhc2UgVFBfSEtFWV9FVl9MSURfT1BFTjoJLyogTGlkIG9wZW5lZCAqLworCWNhc2UgVFBfSEtFWV9FVl9CUkdIVF9DSEFOR0VEOgkvKiBicmlnaHRuZXNzIGNoYW5nZWQgKi8KKwkJLyogZG8gbm90IHByb3BhZ2F0ZSB0aGVzZSBldmVudHMgKi8KIAkJKmlnbm9yZV9hY3BpX2V2ID0gdHJ1ZTsKIAkJcmV0dXJuIHRydWU7CiAKQEAgLTMzMzksMzAgKzM1NDIsMzAgQEAKIAkqaWdub3JlX2FjcGlfZXYgPSBmYWxzZTsKIAogCXN3aXRjaCAoaGtleSkgewotCWNhc2UgMHg2MDExOgorCWNhc2UgVFBfSEtFWV9FVl9BTEFSTV9CQVRfSE9UOgogCQlwcmludGsoVFBBQ1BJX0NSSVQKIAkJCSJUSEVSTUFMIEFMQVJNOiBiYXR0ZXJ5IGlzIHRvbyBob3QhXG4iKTsKIAkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiB3YXJuIHVzZXIgdGhyb3VnaCBndWkgKi8KIAkJcmV0dXJuIHRydWU7Ci0JY2FzZSAweDYwMTI6CisJY2FzZSBUUF9IS0VZX0VWX0FMQVJNX0JBVF9YSE9UOgogCQlwcmludGsoVFBBQ1BJX0FMRVJUCiAJCQkiVEhFUk1BTCBFTUVSR0VOQ1k6IGJhdHRlcnkgaXMgZXh0cmVtZWx5IGhvdCFcbiIpOwogCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IGltbWVkaWF0ZSBzbGVlcC9oaWJlcm5hdGUgKi8KIAkJcmV0dXJuIHRydWU7Ci0JY2FzZSAweDYwMjE6CisJY2FzZSBUUF9IS0VZX0VWX0FMQVJNX1NFTlNPUl9IT1Q6CiAJCXByaW50ayhUUEFDUElfQ1JJVAogCQkJIlRIRVJNQUwgQUxBUk06ICIKIAkJCSJhIHNlbnNvciByZXBvcnRzIHNvbWV0aGluZyBpcyB0b28gaG90IVxuIik7CiAJCS8qIHJlY29tbWVuZGVkIGFjdGlvbjogd2FybiB1c2VyIHRocm91Z2ggZ3VpLCB0aGF0ICovCiAJCS8qIHNvbWUgaW50ZXJuYWwgY29tcG9uZW50IGlzIHRvbyBob3QgKi8KIAkJcmV0dXJuIHRydWU7Ci0JY2FzZSAweDYwMjI6CisJY2FzZSBUUF9IS0VZX0VWX0FMQVJNX1NFTlNPUl9YSE9UOgogCQlwcmludGsoVFBBQ1BJX0FMRVJUCiAJCQkiVEhFUk1BTCBFTUVSR0VOQ1k6ICIKIAkJCSJhIHNlbnNvciByZXBvcnRzIHNvbWV0aGluZyBpcyBleHRyZW1lbHkgaG90IVxuIik7CiAJCS8qIHJlY29tbWVuZGVkIGFjdGlvbjogaW1tZWRpYXRlIHNsZWVwL2hpYmVybmF0ZSAqLwogCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIDB4NjAzMDoKKwljYXNlIFRQX0hLRVlfRVZfVEhNX1RBQkxFX0NIQU5HRUQ6CiAJCXByaW50ayhUUEFDUElfSU5GTwogCQkJIkVDIHJlcG9ydHMgdGhhdCBUaGVybWFsIFRhYmxlIGhhcyBjaGFuZ2VkXG4iKTsKIAkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiBkbyBub3RoaW5nLCB3ZSBkb24ndCBoYXZlCkBAIC0zNDIwLDcgKzM2MjMsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgMzoKIAkJCS8qIDB4MzAwMC0weDNGRkY6IGJheS1yZWxhdGVkIHdha2V1cHMgKi8KLQkJCWlmIChoa2V5ID09IDB4MzAwMykgeworCQkJaWYgKGhrZXkgPT0gVFBfSEtFWV9FVl9CQVlFSl9BQ0spIHsKIAkJCQlob3RrZXlfYXV0b3NsZWVwX2FjayA9IDE7CiAJCQkJcHJpbnRrKFRQQUNQSV9JTkZPCiAJCQkJICAgICAgICJiYXkgZWplY3RlZFxuIik7CkBAIC0zNDMyLDcgKzM2MzUsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgNDoKIAkJCS8qIDB4NDAwMC0weDRGRkY6IGRvY2stcmVsYXRlZCB3YWtldXBzICovCi0JCQlpZiAoaGtleSA9PSAweDQwMDMpIHsKKwkJCWlmIChoa2V5ID09IFRQX0hLRVlfRVZfVU5ET0NLX0FDSykgewogCQkJCWhvdGtleV9hdXRvc2xlZXBfYWNrID0gMTsKIAkJCQlwcmludGsoVFBBQ1BJX0lORk8KIAkJCQkgICAgICAgInVuZG9ja2VkXG4iKTsKQEAgLTM0NTQsNyArMzY1Nyw4IEBACiAJCQlicmVhazsKIAkJY2FzZSA3OgogCQkJLyogMHg3MDAwLTB4N0ZGRjogbWlzYyAqLwotCQkJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV93bHN3ICYmIGhrZXkgPT0gMHg3MDAwKSB7CisJCQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X3dsc3cgJiYKKwkJCQkJaGtleSA9PSBUUF9IS0VZX0VWX1JGS0lMTF9DSEFOR0VEKSB7CiAJCQkJdHBhY3BpX3NlbmRfcmFkaW9zd191cGRhdGUoKTsKIAkJCQlzZW5kX2FjcGlfZXYgPSAwOwogCQkJCWtub3duX2V2ID0gdHJ1ZTsKQEAgLTM1MDAsMTAgKzM3MDQsMTIgQEAKIHsKIAl0cGFjcGlfZGlzYWJsZV9icmlnaHRuZXNzX2RlbGF5KCk7CiAKLQlpZiAoaG90a2V5X21hc2tfZ2V0KCkpCisJaWYgKGhvdGtleV9zdGF0dXNfc2V0KHRydWUpIDwgMCB8fAorCSAgICBob3RrZXlfbWFza19zZXQoaG90a2V5X2FjcGlfbWFzaykgPCAwKQogCQlwcmludGsoVFBBQ1BJX0VSUgotCQkgICAgICAgImVycm9yIHdoaWxlIHRyeWluZyB0byByZWFkIGhvdCBrZXkgbWFzayAiCi0JCSAgICAgICAiZnJvbSBmaXJtd2FyZVxuIik7CisJCSAgICAgICAiZXJyb3Igd2hpbGUgYXR0ZW1wdGluZyB0byByZXNldCB0aGUgZXZlbnQgIgorCQkgICAgICAgImZpcm13YXJlIGludGVyZmFjZVxuIik7CisKIAl0cGFjcGlfc2VuZF9yYWRpb3N3X3VwZGF0ZSgpOwogCWhvdGtleV90YWJsZXRfbW9kZV9ub3RpZnlfY2hhbmdlKCk7CiAJaG90a2V5X3dha2V1cF9yZWFzb25fbm90aWZ5X2NoYW5nZSgpOwpAQCAtMzUzMiw4ICszNzM4LDggQEAKIAkJcmV0dXJuIHJlczsKIAogCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdCVzXG4iLCBlbmFibGVkKHN0YXR1cywgMCkpOwotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAibWFzazpcdFx0MHglMDh4XG4iLCBob3RrZXlfbWFzayk7CisJaWYgKGhvdGtleV9hbGxfbWFzaykgeworCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAibWFzazpcdFx0MHglMDh4XG4iLCBob3RrZXlfdXNlcl9tYXNrKTsKIAkJbGVuICs9IHNwcmludGYocCArIGxlbiwKIAkJCSAgICAgICAiY29tbWFuZHM6XHRlbmFibGUsIGRpc2FibGUsIHJlc2V0LCA8bWFzaz5cbiIpOwogCX0gZWxzZSB7CkBAIC0zNTcwLDcgKzM3NzYsNyBAQAogCWlmIChtdXRleF9sb2NrX2tpbGxhYmxlKCZob3RrZXlfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JbWFzayA9IGhvdGtleV9tYXNrOworCW1hc2sgPSBob3RrZXlfdXNlcl9tYXNrOwogCiAJcmVzID0gMDsKIAl3aGlsZSAoKGNtZCA9IG5leHRfY21kKCZidWYpKSkgewpAQCAtMzU5MiwxMiArMzc5OCwxMSBAQAogCQl9CiAJfQogCi0JaWYgKCFyZXMpCisJaWYgKCFyZXMpIHsKIAkJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJwcm9jZnMgaG90a2V5IiwKIAkJCSJzZXQgbWFzayB0byAweCUwOHhcbiIsIG1hc2spOwotCi0JaWYgKCFyZXMgJiYgbWFzayAhPSBob3RrZXlfbWFzaykKLQkJcmVzID0gaG90a2V5X21hc2tfc2V0KG1hc2spOworCQlyZXMgPSBob3RrZXlfdXNlcl9tYXNrX3NldChtYXNrKTsKKwl9CiAKIGVycmV4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOwpAQCAtNjAxMCw4ICs2MjE1LDEwIEBACiAJCQkJCVRQQUNQSV9CQUNLTElHSFRfREVWX05BTUUsIE5VTEwsIE5VTEwsCiAJCQkJCSZpYm1fYmFja2xpZ2h0X2RhdGEpOwogCWlmIChJU19FUlIoaWJtX2JhY2tsaWdodF9kZXZpY2UpKSB7CisJCWludCByYyA9IFBUUl9FUlIoaWJtX2JhY2tsaWdodF9kZXZpY2UpOworCQlpYm1fYmFja2xpZ2h0X2RldmljZSA9IE5VTEw7CiAJCXByaW50ayhUUEFDUElfRVJSICJDb3VsZCBub3QgcmVnaXN0ZXIgYmFja2xpZ2h0IGRldmljZVxuIik7Ci0JCXJldHVybiBQVFJfRVJSKGlibV9iYWNrbGlnaHRfZGV2aWNlKTsKKwkJcmV0dXJuIHJjOwogCX0KIAl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0JSR0hULAogCQkJImJyaWdodG5lc3MgaXMgc3VwcG9ydGVkXG4iKTsKQEAgLTc0OTksNiArNzcwNiwyMSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKgorICogSEtFWSBldmVudCBjYWxsb3V0IGZvciBvdGhlciBzdWJkcml2ZXJzIGdvIGhlcmUKKyAqICh5ZXMsIGl0IGlzIHVnbHksIGJ1dCBpdCBpcyBxdWljaywgc2FmZSwgYW5kIGdldHMgdGhlIGpvYiBkb25lCisgKi8KK3N0YXRpYyB2b2lkIHRwYWNwaV9kcml2ZXJfZXZlbnQoY29uc3QgdW5zaWduZWQgaW50IGhrZXlfZXZlbnQpCit7Cit9CisKKworCitzdGF0aWMgdm9pZCBob3RrZXlfZHJpdmVyX2V2ZW50KGNvbnN0IHVuc2lnbmVkIGludCBzY2FuY29kZSkKK3sKKwl0cGFjcGlfZHJpdmVyX2V2ZW50KFRQX0hLRVlfRVZfSE9US0VZX0JBU0UgKyBzY2FuY29kZSk7Cit9CisKIC8qIHN5c2ZzIG5hbWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIHNzaXplX3QgdGhpbmtwYWRfYWNwaV9wZGV2X25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKaW5kZXggYzA3ZmRiOS4uODNiOGI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogCWFjcGlfaGFuZGxlIHRlbXAgPSBOVUxMOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgcG5wX2RldiAqZGV2OworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICppZDsKIAogCS8qCiAJICogSWYgYSBQblBhY3BpIGRldmljZSBpcyBub3QgcHJlc2VudCAsIHRoZSBkZXZpY2UKQEAgLTE5MywxNSArMTk0LDEyIEBACiAJaWYgKGRldi0+Y2FwYWJpbGl0aWVzICYgUE5QX0NPTkZJR1VSQUJMRSkKIAkJcG5wYWNwaV9wYXJzZV9yZXNvdXJjZV9vcHRpb25fZGF0YShkZXYpOwogCi0JaWYgKGRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKLQkJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3QgPSBkZXZpY2UtPnBucC5jaWRfbGlzdDsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGNpZF9saXN0LT5jb3VudDsgaSsrKSB7Ci0JCQlpZiAoIWlzcG5waWRhY3BpKGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKSkKLQkJCQljb250aW51ZTsKLQkJCXBucF9hZGRfaWQoZGV2LCBjaWRfbGlzdC0+aWRzW2ldLnN0cmluZyk7Ci0JCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlkLCAmZGV2aWNlLT5wbnAuaWRzLCBsaXN0KSB7CisJCWlmICghc3RyY21wKGlkLT5pZCwgYWNwaV9kZXZpY2VfaGlkKGRldmljZSkpKQorCQkJY29udGludWU7CisJCWlmICghaXNwbnBpZGFjcGkoaWQtPmlkKSkKKwkJCWNvbnRpbnVlOworCQlwbnBfYWRkX2lkKGRldiwgaWQtPmlkKTsKIAl9CiAKIAkvKiBjbGVhciBvdXQgdGhlIGRhbWFnZWQgZmxhZ3MgKi8KQEAgLTIzMiw5ICsyMzAsOCBAQAogCXN0cnVjdCBwbnBfZGV2ICpwbnAgPSBfcG5wOwogCiAJLyogdHJ1ZSBtZWFucyBpdCBtYXRjaGVkICovCi0JcmV0dXJuIGFjcGktPmZsYWdzLmhhcmR3YXJlX2lkCi0JICAgICYmICFhY3BpX2dldF9waHlzaWNhbF9kZXZpY2UoYWNwaS0+aGFuZGxlKQotCSAgICAmJiBjb21wYXJlX3BucF9pZChwbnAtPmlkLCBhY3BpLT5wbnAuaGFyZHdhcmVfaWQpOworCXJldHVybiAhYWNwaV9nZXRfcGh5c2ljYWxfZGV2aWNlKGFjcGktPmhhbmRsZSkKKwkgICAgJiYgY29tcGFyZV9wbnBfaWQocG5wLT5pZCwgYWNwaV9kZXZpY2VfaGlkKGFjcGkpKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYWNwaV9wbnBfZmluZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBhY3BpX2hhbmRsZSAqIGhhbmRsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2thcGkuYyBiL2RyaXZlcnMvcHBzL2thcGkuYwppbmRleCAzNWEwYjE5Li4yZDQxNGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9rYXBpLmMKKysrIGIvZHJpdmVycy9wcHMva2FwaS5jCkBAIC0yNzEsNiArMjcxLDcgQEAKIHsKIAlzdHJ1Y3QgcHBzX2RldmljZSAqcHBzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNhcHR1cmVkID0gMDsKIAogCWlmICgoZXZlbnQgJiAoUFBTX0NBUFRVUkVBU1NFUlQgfCBQUFNfQ0FQVFVSRUNMRUFSKSkgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgInBwczogdW5rbm93biBldmVudCAoJXgpIGZvciBzb3VyY2UgJWRcbiIsCkBAIC0yOTMsNyArMjk0LDggQEAKIAogCS8qIENoZWNrIHRoZSBldmVudCAqLwogCXBwcy0+Y3VycmVudF9tb2RlID0gcHBzLT5wYXJhbXMubW9kZTsKLQlpZiAoZXZlbnQgJiBQUFNfQ0FQVFVSRUFTU0VSVCkgeworCWlmICgoZXZlbnQgJiBQUFNfQ0FQVFVSRUFTU0VSVCkgJgorCQkJKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfQ0FQVFVSRUFTU0VSVCkpIHsKIAkJLyogV2UgaGF2ZSB0byBhZGQgYW4gb2Zmc2V0PyAqLwogCQlpZiAocHBzLT5wYXJhbXMubW9kZSAmIFBQU19PRkZTRVRBU1NFUlQpCiAJCQlwcHNfYWRkX29mZnNldCh0cywgJnBwcy0+cGFyYW1zLmFzc2VydF9vZmZfdHUpOwpAQCAtMzAzLDggKzMwNSwxMSBAQAogCQlwcHMtPmFzc2VydF9zZXF1ZW5jZSsrOwogCQlwcl9kZWJ1ZygiY2FwdHVyZSBhc3NlcnQgc2VxICMldSBmb3Igc291cmNlICVkXG4iLAogCQkJcHBzLT5hc3NlcnRfc2VxdWVuY2UsIHNvdXJjZSk7CisKKwkJY2FwdHVyZWQgPSB+MDsKIAl9Ci0JaWYgKGV2ZW50ICYgUFBTX0NBUFRVUkVDTEVBUikgeworCWlmICgoZXZlbnQgJiBQUFNfQ0FQVFVSRUNMRUFSKSAmCisJCQkocHBzLT5wYXJhbXMubW9kZSAmIFBQU19DQVBUVVJFQ0xFQVIpKSB7CiAJCS8qIFdlIGhhdmUgdG8gYWRkIGFuIG9mZnNldD8gKi8KIAkJaWYgKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfT0ZGU0VUQ0xFQVIpCiAJCQlwcHNfYWRkX29mZnNldCh0cywgJnBwcy0+cGFyYW1zLmNsZWFyX29mZl90dSk7CkBAIC0zMTQsMTIgKzMxOSwxNyBAQAogCQlwcHMtPmNsZWFyX3NlcXVlbmNlKys7CiAJCXByX2RlYnVnKCJjYXB0dXJlIGNsZWFyIHNlcSAjJXUgZm9yIHNvdXJjZSAlZFxuIiwKIAkJCXBwcy0+Y2xlYXJfc2VxdWVuY2UsIHNvdXJjZSk7CisKKwkJY2FwdHVyZWQgPSB+MDsKIAl9CiAKLQlwcHMtPmdvID0gfjA7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcHMtPnF1ZXVlKTsKKwkvKiBXYWtlIHVwIGlpZiBjYXB0dXJlZCBzb210aGluZyAqLworCWlmIChjYXB0dXJlZCkgeworCQlwcHMtPmdvID0gfjA7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHBzLT5xdWV1ZSk7CiAKLQlraWxsX2Zhc3luYygmcHBzLT5hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOworCQlraWxsX2Zhc3luYygmcHBzLT5hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOworCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwcy0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9wcHMuYyBiL2RyaXZlcnMvcHBzL3Bwcy5jCmluZGV4IGZlYTE3ZTcuLmNhNTE4M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHBzL3Bwcy5jCisrKyBiL2RyaXZlcnMvcHBzL3Bwcy5jCkBAIC03MSw5ICs3MSwxNCBAQAogCWNhc2UgUFBTX0dFVFBBUkFNUzoKIAkJcHJfZGVidWcoIlBQU19HRVRQQVJBTVM6IHNvdXJjZSAlZFxuIiwgcHBzLT5pZCk7CiAKLQkJLyogUmV0dXJuIGN1cnJlbnQgcGFyYW1ldGVycyAqLwotCQllcnIgPSBjb3B5X3RvX3VzZXIodWFyZywgJnBwcy0+cGFyYW1zLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBwcHNfa3BhcmFtcykpOworCQlzcGluX2xvY2tfaXJxKCZwcHMtPmxvY2spOworCisJCS8qIEdldCB0aGUgY3VycmVudCBwYXJhbWV0ZXJzICovCisJCXBhcmFtcyA9IHBwcy0+cGFyYW1zOworCisJCXNwaW5fdW5sb2NrX2lycSgmcHBzLT5sb2NrKTsKKworCQllcnIgPSBjb3B5X3RvX3VzZXIodWFyZywgJnBhcmFtcywgc2l6ZW9mKHN0cnVjdCBwcHNfa3BhcmFtcykpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwppbmRleCA3NDRlYTFkLi5lZmU1NjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCkBAIC0xMjgzLDcgKzEyODMsOCBAQAogCQlyZXR1cm4gLUVJTzsKIAogCS8qIGFyZSB3ZSB0aGUgbGFzdCB1c2VyIGFuZCBwZXJtaXR0ZWQgdG8gZGlzYWJsZSA/ICovCi0JaWYgKHJkZXYtPnVzZV9jb3VudCA9PSAxICYmICFyZGV2LT5jb25zdHJhaW50cy0+YWx3YXlzX29uKSB7CisJaWYgKHJkZXYtPnVzZV9jb3VudCA9PSAxICYmCisJICAgIChyZGV2LT5jb25zdHJhaW50cyAmJiAhcmRldi0+Y29uc3RyYWludHMtPmFsd2F5c19vbikpIHsKIAogCQkvKiB3ZSBhcmUgbGFzdCB1c2VyICovCiAJCWlmIChfcmVndWxhdG9yX2Nhbl9jaGFuZ2Vfc3RhdHVzKHJkZXYpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYwppbmRleCBmOGIyOTU3Li5mOWY1MTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKQEAgLTE5NiwxMSArMTk2LDEwIEBACiAJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSAqZHJ2ZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJcmVndWxhdG9yX3VucmVnaXN0ZXIoZHJ2ZGF0YS0+ZGV2KTsKLQlrZnJlZShkcnZkYXRhLT5kZXNjLm5hbWUpOwotCWtmcmVlKGRydmRhdGEpOwotCiAJaWYgKGdwaW9faXNfdmFsaWQoZHJ2ZGF0YS0+Z3BpbykpCiAJCWdwaW9fZnJlZShkcnZkYXRhLT5ncGlvKTsKKwlrZnJlZShkcnZkYXRhLT5kZXNjLm5hbWUpOworCWtmcmVlKGRydmRhdGEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMKaW5kZXggYmI2MWFlZC4uOTAyZGI1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYwpAQCAtMTc1LDE4ICsxNzUsMTggQEAKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBsZG8tPndtODMxeDsKIAlpbnQgY3RybF9yZWcgPSBsZG8tPmJhc2UgKyBXTTgzMVhfTERPX0NPTlRST0w7CiAJaW50IG9uX3JlZyA9IGxkby0+YmFzZSArIFdNODMxWF9MRE9fT05fQ09OVFJPTDsKLQl1bnNpZ25lZCBpbnQgcmV0OworCWludCByZXQ7CiAKIAlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBvbl9yZWcpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHJldDsKIAogCWlmICghKHJldCAmIFdNODMxWF9MRE8xX09OX01PREUpKQogCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfTk9STUFMOwogCiAJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgY3RybF9yZWcpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHJldDsKIAogCWlmIChyZXQgJiBXTTgzMVhfTERPMV9MUF9NT0RFKQogCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfU1RBTkRCWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKaW5kZXggNGNkYjMxYS4uYTBjODE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKQEAgLTEyLDYgKzEyLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KIAogaW50IHJ0Y19yZWFkX3RpbWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lICp0bSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYwppbmRleCA3ZmUxZmEyLi4wM2VhNTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCkBAIC01OCw3ICs1OCwxNiBAQAogCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKIAkvKiBBY2sgSVJRICovCiAJd3JpdGVsKDEsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9FVkVOVCk7CisJLyoKKwkgKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKKwkgKiB0aGUgUlRDIGxpdmVzIG9uIGEgbG93ZXItY2xvY2tlZCBsaW5lIGFuZCB3aWxsCisJICogbm90IHJlbGVhc2UgdGhlIElSUSBsaW5lIHVudGlsIGFmdGVyIGEgZmV3IChzbG93ZXIpCisJICogY2xvY2sgY3ljbGVzLiBUaGUgaW50ZXJydXB0IHdpbGwgYmUgcmUtZW5hYmxlZCB3aGVuCisJICogYSBuZXcgYWxhcm0gaXMgc2V0IGFueXdheS4KKwkgKi8KKwl3cml0ZWwoMCwgcnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfSVJRX01BU0spOwogCWNsa19kaXNhYmxlKHJ0YXAtPmNsayk7CisKIAkvKiBTZXQgYWxhcm0gZmxhZyAqLwogCXJ0Y191cGRhdGVfaXJxKHJ0YXAtPnJ0YywgMSwgUlRDX0FGKTsKIApAQCAtMTI4LDYgKzEzNyw4IEBACiAJZWxzZQogCQl3cml0ZWwoMCwgcnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfSVJRX01BU0spOwogCWNsa19kaXNhYmxlKHJ0YXAtPmNsayk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGNvaDkwMTMzMV9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKaW5kZXggOGExMWRlOS4uNjIyMjdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRldi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJydGMtY29yZS5oIgogCiBzdGF0aWMgZGV2X3QgcnRjX2RldnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmNTA2MzMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y1MDYzMy5jCmluZGV4IGY0ZGQ4N2UuLjMzYTEwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y1MDYzMy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y1MDYzMy5jCkBAIC03MCw3ICs3MCw3IEBACiAJcnRjLT50bV9ob3VyID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfSE9VUl0pOwogCXJ0Yy0+dG1fd2RheSA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX1dLREFZXSk7CiAJcnRjLT50bV9tZGF5ID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfREFZXSk7Ci0JcnRjLT50bV9tb24gPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9NT05USF0pOworCXJ0Yy0+dG1fbW9uID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfTU9OVEhdKSAtIDE7CiAJcnRjLT50bV95ZWFyID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfWUVBUl0pICsgMTAwOwogfQogCkBAIC04MSw3ICs4MSw3IEBACiAJcGNmLT50aW1lW1BDRjUwNjMzX1RJX0hPVVJdID0gYmluMmJjZChydGMtPnRtX2hvdXIpOwogCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9XS0RBWV0gPSBiaW4yYmNkKHJ0Yy0+dG1fd2RheSk7CiAJcGNmLT50aW1lW1BDRjUwNjMzX1RJX0RBWV0gPSBiaW4yYmNkKHJ0Yy0+dG1fbWRheSk7Ci0JcGNmLT50aW1lW1BDRjUwNjMzX1RJX01PTlRIXSA9IGJpbjJiY2QocnRjLT50bV9tb24pOworCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9NT05USF0gPSBiaW4yYmNkKHJ0Yy0+dG1fbW9uICsgMSk7CiAJcGNmLT50aW1lW1BDRjUwNjMzX1RJX1lFQVJdID0gYmluMmJjZChydGMtPnRtX3llYXIgJSAxMDApOwogfQogCkBAIC0yNDUsOCArMjQ1LDkgQEAKIAlyZXQgPSBwY2Y1MDYzM193cml0ZV9ibG9jayhydGMtPnBjZiwgUENGNTA2MzNfUkVHX1JUQ1NDQSwKIAkJCQlQQ0Y1MDYzM19USV9FWFRFTlQsICZwY2ZfdG0udGltZVswXSk7CiAKLQlpZiAoIWFsYXJtX21hc2tlZCkKKwlpZiAoIWFsYXJtX21hc2tlZCB8fCBhbHJtLT5lbmFibGVkKQogCQlwY2Y1MDYzM19pcnFfdW5tYXNrKHJ0Yy0+cGNmLCBQQ0Y1MDYzM19JUlFfQUxBUk0pOworCXJ0Yy0+YWxhcm1fZW5hYmxlZCA9IGFscm0tPmVuYWJsZWQ7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXB4YS5jIGIvZHJpdmVycy9ydGMvcnRjLXB4YS5jCmluZGV4IGJiOGNjMDUuLjc0N2NhMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1weGEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHhhLmMKQEAgLTQzOCwzNCArNDM4LDM3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhX3J0Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhX3J0Y19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhX3J0YyAqcHhhX3J0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBweGFfcnRjICpweGFfcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCWVuYWJsZV9pcnFfd2FrZShweGFfcnRjLT5pcnFfQWxybSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhX3J0Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgcHhhX3J0Y19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBweGFfcnRjICpweGFfcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHB4YV9ydGMgKnB4YV9ydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKIAkJZGlzYWJsZV9pcnFfd2FrZShweGFfcnRjLT5pcnFfQWxybSk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBweGFfcnRjX3N1c3BlbmQJTlVMTAotI2RlZmluZSBweGFfcnRjX3Jlc3VtZQlOVUxMCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGFfcnRjX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YV9ydGNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YV9ydGNfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGFfcnRjX2RyaXZlciA9IHsKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKHB4YV9ydGNfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHB4YV9ydGNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHB4YV9ydGNfcmVzdW1lLAogCS5kcml2ZXIJCT0gewotCQkubmFtZQkJPSAicHhhLXJ0YyIsCisJCS5uYW1lCT0gInB4YS1ydGMiLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmcHhhX3J0Y19wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCmluZGV4IDAyMWIyOTIuLjI5Zjk4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKQEAgLTM5MywzMSArMzkzLDM0IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc2ExMTAwX3J0Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2ExMTAwX3J0Y19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCWVuYWJsZV9pcnFfd2FrZShJUlFfUlRDQWxybSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTAwX3J0Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgc2ExMTAwX3J0Y19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKIAkJZGlzYWJsZV9pcnFfd2FrZShJUlFfUlRDQWxybSk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBzYTExMDBfcnRjX3N1c3BlbmQJTlVMTAotI2RlZmluZSBzYTExMDBfcnRjX3Jlc3VtZQlOVUxMCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzYTExMDBfcnRjX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHNhMTEwMF9ydGNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNhMTEwMF9ydGNfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExMDBfcnRjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2ExMTAwX3J0Y19wcm9iZSwKIAkucmVtb3ZlCQk9IHNhMTEwMF9ydGNfcmVtb3ZlLAotCS5zdXNwZW5kCT0gc2ExMTAwX3J0Y19zdXNwZW5kLAotCS5yZXN1bWUJCT0gc2ExMTAwX3J0Y19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCQk9ICJzYTExMDAtcnRjIiwKKwkJLm5hbWUJPSAic2ExMTAwLXJ0YyIsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZzYTExMDBfcnRjX3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYyBiL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCmluZGV4IGFkMTY0MDUuLjQyM2NkNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCkBAIC05Niw3ICs5Niw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHYzMDIwX21taW9fcmVhZF9iaXQoc3RydWN0IHYzMDIwICpjaGlwKQogewotCXJldHVybiByZWFkbChjaGlwLT5pb2FkZHJlc3MpICYgKDEgPDwgY2hpcC0+bGVmdHNoaWZ0KTsKKwlyZXR1cm4gISEocmVhZGwoY2hpcC0+aW9hZGRyZXNzKSAmICgxIDw8IGNoaXAtPmxlZnRzaGlmdCkpOwogfQogCiBzdGF0aWMgc3RydWN0IHYzMDIwX2NoaXBfb3BzIHYzMDIwX21taW9fb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCmluZGV4IDJjODM5ZDAuLmZhZGRkYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKQEAgLTIwOSwxOSArMjA5LDE4IEBACiAKIHN0YXRpYyBpbnQgdnI0MXh4X3J0Y19pcnFfc2V0X2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZnJlcSkKIHsKLQl1bnNpZ25lZCBsb25nIGNvdW50OworCXU2NCBjb3VudDsKIAogCWlmICghaXNfcG93ZXJfb2ZfMihmcmVxKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJY291bnQgPSBSVENfRlJFUVVFTkNZOwogCWRvX2Rpdihjb3VudCwgZnJlcSk7CiAKLQlwZXJpb2RpY19jb3VudCA9IGNvdW50OwotCiAJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwogCi0JcnRjMV93cml0ZShSVENMMUxSRUcsIGNvdW50KTsKLQlydGMxX3dyaXRlKFJUQ0wxSFJFRywgY291bnQgPj4gMTYpOworCXBlcmlvZGljX2NvdW50ID0gY291bnQ7CisJcnRjMV93cml0ZShSVENMMUxSRUcsIHBlcmlvZGljX2NvdW50KTsKKwlydGMxX3dyaXRlKFJUQ0wxSFJFRywgcGVyaW9kaWNfY291bnQgPj4gMTYpOwogCiAJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IGRhZDA0NDkuLmFhY2NjOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMjUwOCw4ICsyNTA4LDYgQEAKIAlkZXZpY2UtPnN0b3BwZWQgJj0gfkRBU0RfVU5SRVNVTUVEX1BNOwogCiAJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKLQlpZiAoZGV2aWNlLT5ibG9jaykKLQkJZGFzZF9zY2hlZHVsZV9ibG9ja19iaChkZXZpY2UtPmJsb2NrKTsKIAogCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUtPnJlc3RvcmUpCiAJCXJjID0gZGV2aWNlLT5kaXNjaXBsaW5lLT5yZXN0b3JlKGRldmljZSk7CkBAIC0yNTIwLDYgKzI1MTgsOSBAQAogCQkgKi8KIAkJZGV2aWNlLT5zdG9wcGVkIHw9IERBU0RfVU5SRVNVTUVEX1BNOwogCisJaWYgKGRldmljZS0+YmxvY2spCisJCWRhc2Rfc2NoZWR1bGVfYmxvY2tfYmgoZGV2aWNlLT5ibG9jayk7CisKIAlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI1MzIsNiArMjUzMyw3IEBACiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCXN0cnVjdCBjY3cxICpjY3c7CisJdW5zaWduZWQgbG9uZyAqaWRhdzsKIAogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KG1hZ2ljLCAxIC8qIFJEQyAqLywgcmRjX2J1ZmZlcl9zaXplLCBkZXZpY2UpOwogCkBAIC0yNTQ1LDkgKzI1NDcsMTcgQEAKIAogCWNjdyA9IGNxci0+Y3BhZGRyOwogCWNjdy0+Y21kX2NvZGUgPSBDQ1dfQ01EX1JEQzsKLQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KXJkY19idWZmZXI7Ci0JY2N3LT5jb3VudCA9IHJkY19idWZmZXJfc2l6ZTsKKwlpZiAoaWRhbF9pc19uZWVkZWQocmRjX2J1ZmZlciwgcmRjX2J1ZmZlcl9zaXplKSkgeworCQlpZGF3ID0gKHVuc2lnbmVkIGxvbmcgKikgKGNxci0+ZGF0YSk7CisJCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGlkYXc7CisJCWNjdy0+ZmxhZ3MgPSBDQ1dfRkxBR19JREE7CisJCWlkYXcgPSBpZGFsX2NyZWF0ZV93b3JkcyhpZGF3LCByZGNfYnVmZmVyLCByZGNfYnVmZmVyX3NpemUpOworCX0gZWxzZSB7CisJCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIHJkY19idWZmZXI7CisJCWNjdy0+ZmxhZ3MgPSAwOworCX0KIAorCWNjdy0+Y291bnQgPSByZGNfYnVmZmVyX3NpemU7CiAJY3FyLT5zdGFydGRldiA9IGRldmljZTsKIAljcXItPm1lbWRldiA9IGRldmljZTsKIAljcXItPmV4cGlyZXMgPSAxMCpIWjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCBhYjM1MjE3Li40MTdiOTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC0yMzM4LDYgKzIzMzgsOCBAQAogCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgYmxvY2tzL3JlY29yZHMgcGVyIHRyYWNrLiAqLwogCWJsa3NpemUgPSBibG9jay0+YnBfYmxvY2s7CiAJYmxrX3Blcl90cmsgPSByZWNzX3Blcl90cmFjaygmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIGJsa3NpemUpOworCWlmIChibGtfcGVyX3RyayA9PSAwKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAkvKiBDYWxjdWxhdGUgcmVjb3JkIGlkIG9mIGZpcnN0IGFuZCBsYXN0IGJsb2NrLiAqLwogCWZpcnN0X3JlYyA9IGZpcnN0X3RyayA9IGJsa19ycV9wb3MocmVxKSA+PiBibG9jay0+czJiX3NoaWZ0OwogCWZpcnN0X29mZnMgPSBzZWN0b3JfZGl2KGZpcnN0X3RyaywgYmxrX3Blcl90cmspOwpAQCAtMzIxMSw4ICszMjEzLDEwIEBACiBpbnQgZGFzZF9lY2tkX3Jlc3RvcmVfZGV2aWNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgZGFzZF9lY2tkX2NoYXJhY3RlcmlzdGljcyB0ZW1wX3JkY19kYXRhOwogCWludCBpc19rbm93biwgcmM7CiAJc3RydWN0IGRhc2RfdWlkIHRlbXBfdWlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CiAKQEAgLTMyMjUsNyArMzIyOSw4IEBACiAJcmMgPSBkYXNkX2Vja2RfZ2VuZXJhdGVfdWlkKGRldmljZSwgJnByaXZhdGUtPnVpZCk7CiAJZGFzZF9nZXRfdWlkKGRldmljZS0+Y2RldiwgJnRlbXBfdWlkKTsKIAlpZiAobWVtY21wKCZwcml2YXRlLT51aWQsICZ0ZW1wX3VpZCwgc2l6ZW9mKHN0cnVjdCBkYXNkX3VpZCkpICE9IDApCi0JCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIFVJRCBvZiB0aGUgREFTRCBoYXMgY2hhbmdlZFxuIik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIFVJRCBvZiB0aGUgREFTRCBoYXMgIgorCQkJImNoYW5nZWRcbiIpOwogCWlmIChyYykKIAkJZ290byBvdXRfZXJyOwogCWRhc2Rfc2V0X3VpZChkZXZpY2UtPmNkZXYsICZwcml2YXRlLT51aWQpOwpAQCAtMzI0NSwxNSArMzI1MCwxNyBAQAogCWRhc2RfZWNrZF9yZWFkX2ZlYXR1cmVzKGRldmljZSk7CiAKIAkvKiBSZWFkIERldmljZSBDaGFyYWN0ZXJpc3RpY3MgKi8KLQltZW1zZXQoJnByaXZhdGUtPnJkY19kYXRhLCAwLCBzaXplb2YocHJpdmF0ZS0+cmRjX2RhdGEpKTsKIAlyYyA9IGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyhkZXZpY2UsIERBU0RfRUNLRF9NQUdJQywKLQkJCQkJICZwcml2YXRlLT5yZGNfZGF0YSwgNjQpOworCQkJCQkgJnRlbXBfcmRjX2RhdGEsIDY0KTsKIAlpZiAocmMpIHsKIAkJREJGX0VWRU5UKERCRl9XQVJOSU5HLAogCQkJICAiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIGZhaWxlZCwgcmM9JWQgZm9yICIKIAkJCSAgImRldmljZTogJXMiLCByYywgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCWdvdG8gb3V0X2VycjsKIAl9CisJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKKwltZW1jcHkoJnByaXZhdGUtPnJkY19kYXRhLCAmdGVtcF9yZGNfZGF0YSwgc2l6ZW9mKHRlbXBfcmRjX2RhdGEpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CiAKIAkvKiBhZGQgZGV2aWNlIHRvIGFsaWFzIG1hbmFnZW1lbnQgKi8KIAlkYXNkX2FsaWFzX2FkZF9kZXZpY2UoZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKaW5kZXggODllY2UxYy4uNjZlMjFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKQEAgLTM1Nyw2ICszNTcsNyBAQAogCWF0b21pY19zZXQoJm1vbnByaXYtPm1zZ2xpbV9jb3VudCwgMCk7CiAJbW9ucHJpdi0+d3JpdGVfaW5kZXggID0gMDsKIAltb25wcml2LT5yZWFkX2luZGV4ICAgPSAwOworCWRldl9zZXRfZHJ2ZGF0YShtb25yZWFkZXJfZGV2aWNlLCBOVUxMKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNT05fTVNHTElNOyBpKyspCiAJCWtmcmVlKG1vbnByaXYtPm1zZ19hcnJheVtpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKaW5kZXggZDZhMDIyZi4uNjJkZGY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwpAQCAtMTM2MSwxMSArMTM2MSwxMyBAQAogCiB2b2lkIHJhdzMyNzBfcG1fdW5mcmVlemUoc3RydWN0IHJhdzMyNzBfdmlldyAqdmlldykKIHsKKyNpZmRlZiBDT05GSUdfVE4zMjcwX0NPTlNPTEUKIAlzdHJ1Y3QgcmF3MzI3MCAqcnA7CiAKIAlycCA9IHZpZXctPmRldjsKIAlpZiAocnAgJiYgdGVzdF9iaXQoUkFXMzI3MF9GTEFHU19GUk9aRU4sICZycC0+ZmxhZ3MpKQogCQljY3dfZGV2aWNlX2ZvcmNlX2NvbnNvbGUoKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IGNjd19kZXZpY2VfaWQgcmF3MzI3MF9pZFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jCmluZGV4IGRhYWVjMTguLmI0NDQ2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMKQEAgLTI2LDcgKzI2LDYgQEAKIHN0YXRpYyBpbnQgc2NscF9hc3luY19zZW5kX3dhaXQoY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmNhbGxob21lX3N5c2N0bF9oZWFkZXI7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNjbHBfYXN5bmNfbG9jayk7Ci1zdGF0aWMgY2hhciBub2RlbmFtZVs2NF07CiAjZGVmaW5lIFNDTFBfTk9STUFMX1dSSVRFCTB4MDAKIAogc3RydWN0IGFzeW5jX2V2YnVmIHsKQEAgLTUyLDkgKzUxLDEwIEBACiBzdGF0aWMgaW50IGNhbGxfaG9tZV9vbl9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQogewotCQlzdHJuY2F0KGRhdGEsIG5vZGVuYW1lLCBzdHJsZW4obm9kZW5hbWUpKTsKLQkJc2NscF9hc3luY19zZW5kX3dhaXQoZGF0YSk7Ci0JCXJldHVybiBOT1RJRllfRE9ORTsKKwlzdHJuY2F0KGRhdGEsIGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSwKKwkJc2l6ZW9mKGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSkpOworCXNjbHBfYXN5bmNfc2VuZF93YWl0KGRhdGEpOworCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjYWxsX2hvbWVfcGFuaWNfbmIgPSB7CkBAIC02MiwyMSArNjIsMjAgQEAKIAkucHJpb3JpdHkgPSBJTlRfTUFYLAogfTsKIAotc3RhdGljIGludCBwcm9jX2hhbmRsZXJfY2FsbGhvbWUoY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCitzdGF0aWMgaW50IHByb2NfaGFuZGxlcl9jYWxsaG9tZShzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKIAkJCQkgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpjb3VudCwKIAkJCQkgbG9mZl90ICpwcG9zKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBsZW4sIHJjOwotCWNoYXIgYnVmWzJdOworCWNoYXIgYnVmWzNdOwogCi0JaWYgKCEqY291bnQgfCAoKnBwb3MgJiYgIXdyaXRlKSkgeworCWlmICghKmNvdW50IHx8ICgqcHBvcyAmJiAhd3JpdGUpKSB7CiAJCSpjb3VudCA9IDA7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXdyaXRlKSB7Ci0JCWxlbiA9ICBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjYWxsaG9tZV9lbmFibGVkKTsKLQkJYnVmW2xlbl0gPSAnXDAnOworCQlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRcbiIsIGNhbGxob21lX2VuYWJsZWQpOwogCQlyYyA9IGNvcHlfdG9fdXNlcihidWZmZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCQlpZiAocmMgIT0gMCkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTAwLDcgKzk5LDcgQEAKIAl7CiAJCS5wcm9jbmFtZQk9ICJjYWxsaG9tZSIsCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19oYW5kbGVyX2NhbGxob21lLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19oYW5kbGVyX2NhbGxob21lLAogCX0sCiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CkBAIC0xNzEsMzkgKzE3MCwyOSBAQAogCXJjID0gc2NscF9yZWdpc3Rlcigmc2NscF9hc3luY19yZWdpc3Rlcik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JY2FsbGhvbWVfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShrZXJuX2Rpcl90YWJsZSk7Ci0JaWYgKCFjYWxsaG9tZV9zeXNjdGxfaGVhZGVyKSB7Ci0JCXJjID0gLUVOT01FTTsKKwlyYyA9IC1FT1BOT1RTVVBQOworCWlmICghKHNjbHBfYXN5bmNfcmVnaXN0ZXIuc2NscF9yZWNlaXZlX21hc2sgJiBFVlRZUF9BU1lOQ19NQVNLKSkKIAkJZ290byBvdXRfc2NscDsKLQl9Ci0JaWYgKCEoc2NscF9hc3luY19yZWdpc3Rlci5zY2xwX3JlY2VpdmVfbWFzayAmIEVWVFlQX0FTWU5DX01BU0spKSB7Ci0JCXJjID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0X3NjbHA7Ci0JfQogCXJjID0gLUVOT01FTTsKKwljYWxsaG9tZV9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGtlcm5fZGlyX3RhYmxlKTsKKwlpZiAoIWNhbGxob21lX3N5c2N0bF9oZWFkZXIpCisJCWdvdG8gb3V0X3NjbHA7CiAJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2xwX3JlcSksIEdGUF9LRVJORUwpOwotCWlmICghcmVxdWVzdCkKLQkJZ290byBvdXRfc3lzOwogCXNjY2IgPSAoc3RydWN0IHNjbHBfYXN5bmNfc2NjYiAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwotCWlmICghc2NjYikKKwlpZiAoIXJlcXVlc3QgfHwgIXNjY2IpCiAJCWdvdG8gb3V0X21lbTsKLQlyYyA9ICBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCi0JCQkJCSAgICAgJmNhbGxfaG9tZV9wYW5pY19uYik7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF9tZW07Ci0KLQlzdHJuY3B5KG5vZGVuYW1lLCBpbml0X3V0c25hbWUoKS0+bm9kZW5hbWUsIDY0KTsKLQlyZXR1cm4gMDsKLQorCXJjID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCQkgICAgJmNhbGxfaG9tZV9wYW5pY19uYik7CisJaWYgKCFyYykKKwkJZ290byBvdXQ7CiBvdXRfbWVtOgogCWtmcmVlKHJlcXVlc3QpOwogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgc2NjYik7Ci1vdXRfc3lzOgogCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGNhbGxob21lX3N5c2N0bF9oZWFkZXIpOwogb3V0X3NjbHA6CiAJc2NscF91bnJlZ2lzdGVyKCZzY2xwX2FzeW5jX3JlZ2lzdGVyKTsKK291dDoKIAlyZXR1cm4gcmM7Ci0KIH0KIG1vZHVsZV9pbml0KHNjbHBfYXN5bmNfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcXVpZXNjZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMKaW5kZXggODRjMTkxYy4uMDU5MDlhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMKQEAgLTIwLDkgKzIwLDEyIEBACiAKICNpbmNsdWRlICJzY2xwLmgiCiAKK3N0YXRpYyB2b2lkICgqb2xkX21hY2hpbmVfcmVzdGFydCkoY2hhciAqKTsKK3N0YXRpYyB2b2lkICgqb2xkX21hY2hpbmVfaGFsdCkodm9pZCk7CitzdGF0aWMgdm9pZCAoKm9sZF9tYWNoaW5lX3Bvd2VyX29mZikodm9pZCk7CisKIC8qIFNodXRkb3duIGhhbmRsZXIuIFNpZ25hbCBjb21wbGV0aW9uIG9mIHNodXRkb3duIGJ5IGxvYWRpbmcgc3BlY2lhbCBQU1cuICovCi1zdGF0aWMgdm9pZAotZG9fbWFjaGluZV9xdWllc2NlKHZvaWQpCitzdGF0aWMgdm9pZCBkb19tYWNoaW5lX3F1aWVzY2Uodm9pZCkKIHsKIAlwc3dfdCBxdWllc2NlX3BzdzsKIApAQCAtMzMsMjMgKzM2LDQ4IEBACiB9CiAKIC8qIEhhbmRsZXIgZm9yIHF1aWVzY2UgZXZlbnQuIFN0YXJ0IHNodXRkb3duIHByb2NlZHVyZS4gKi8KLXN0YXRpYyB2b2lkCi1zY2xwX3F1aWVzY2VfaGFuZGxlcihzdHJ1Y3QgZXZidWZfaGVhZGVyICpldmJ1ZikKK3N0YXRpYyB2b2lkIHNjbHBfcXVpZXNjZV9oYW5kbGVyKHN0cnVjdCBldmJ1Zl9oZWFkZXIgKmV2YnVmKQogewotCV9tYWNoaW5lX3Jlc3RhcnQgPSAodm9pZCAqKSBkb19tYWNoaW5lX3F1aWVzY2U7Ci0JX21hY2hpbmVfaGFsdCA9IGRvX21hY2hpbmVfcXVpZXNjZTsKLQlfbWFjaGluZV9wb3dlcl9vZmYgPSBkb19tYWNoaW5lX3F1aWVzY2U7CisJaWYgKF9tYWNoaW5lX3Jlc3RhcnQgIT0gKHZvaWQgKikgZG9fbWFjaGluZV9xdWllc2NlKSB7CisJCW9sZF9tYWNoaW5lX3Jlc3RhcnQgPSBfbWFjaGluZV9yZXN0YXJ0OworCQlvbGRfbWFjaGluZV9oYWx0ID0gX21hY2hpbmVfaGFsdDsKKwkJb2xkX21hY2hpbmVfcG93ZXJfb2ZmID0gX21hY2hpbmVfcG93ZXJfb2ZmOworCQlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQgKikgZG9fbWFjaGluZV9xdWllc2NlOworCQlfbWFjaGluZV9oYWx0ID0gZG9fbWFjaGluZV9xdWllc2NlOworCQlfbWFjaGluZV9wb3dlcl9vZmYgPSBkb19tYWNoaW5lX3F1aWVzY2U7CisJfQogCWN0cmxfYWx0X2RlbCgpOwogfQogCisvKiBVbmRvIG1hY2hpbmUgcmVzdGFydC9oYWx0L3Bvd2VyX29mZiBtb2RpZmljYXRpb24gb24gcmVzdW1lICovCitzdGF0aWMgdm9pZCBzY2xwX3F1aWVzY2VfcG1fZXZlbnQoc3RydWN0IHNjbHBfcmVnaXN0ZXIgKnJlZywKKwkJCQkgIGVudW0gc2NscF9wbV9ldmVudCBzY2xwX3BtX2V2ZW50KQoreworCXN3aXRjaCAoc2NscF9wbV9ldmVudCkgeworCWNhc2UgU0NMUF9QTV9FVkVOVF9SRVNUT1JFOgorCQlpZiAob2xkX21hY2hpbmVfcmVzdGFydCkgeworCQkJX21hY2hpbmVfcmVzdGFydCA9IG9sZF9tYWNoaW5lX3Jlc3RhcnQ7CisJCQlfbWFjaGluZV9oYWx0ID0gb2xkX21hY2hpbmVfaGFsdDsKKwkJCV9tYWNoaW5lX3Bvd2VyX29mZiA9IG9sZF9tYWNoaW5lX3Bvd2VyX29mZjsKKwkJCW9sZF9tYWNoaW5lX3Jlc3RhcnQgPSBOVUxMOworCQkJb2xkX21hY2hpbmVfaGFsdCA9IE5VTEw7CisJCQlvbGRfbWFjaGluZV9wb3dlcl9vZmYgPSBOVUxMOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NMUF9QTV9FVkVOVF9GUkVFWkU6CisJY2FzZSBTQ0xQX1BNX0VWRU5UX1RIQVc6CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBzY2xwX3JlZ2lzdGVyIHNjbHBfcXVpZXNjZV9ldmVudCA9IHsKIAkucmVjZWl2ZV9tYXNrID0gRVZUWVBfU0lHUVVJRVNDRV9NQVNLLAotCS5yZWNlaXZlcl9mbiA9IHNjbHBfcXVpZXNjZV9oYW5kbGVyCisJLnJlY2VpdmVyX2ZuID0gc2NscF9xdWllc2NlX2hhbmRsZXIsCisJLnBtX2V2ZW50X2ZuID0gc2NscF9xdWllc2NlX3BtX2V2ZW50CiB9OwogCiAvKiBJbml0aWFsaXplIHF1aWVzY2UgZHJpdmVyLiAqLwotc3RhdGljIGludCBfX2luaXQKLXNjbHBfcXVpZXNjZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzY2xwX3F1aWVzY2VfaW5pdCh2b2lkKQogewogCXJldHVybiBzY2xwX3JlZ2lzdGVyKCZzY2xwX3F1aWVzY2VfZXZlbnQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jCmluZGV4IDE3ODcyNGYuLmI5ZDJhMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKQEAgLTcwNSwyMSArNzA1LDYgQEAKIH0KIF9faW5pdGNhbGwoc2NscF92dDIyMF90dHlfaW5pdCk7CiAKLSNpZmRlZiBDT05GSUdfU0NMUF9WVDIyMF9DT05TT0xFCi0KLXN0YXRpYyB2b2lkCi1zY2xwX3Z0MjIwX2Nvbl93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQlfX3NjbHBfdnQyMjBfd3JpdGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYnVmLCBjb3VudCwgMSwgMSwgMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqCi1zY2xwX3Z0MjIwX2Nvbl9kZXZpY2Uoc3RydWN0IGNvbnNvbGUgKmMsIGludCAqaW5kZXgpCi17Ci0JKmluZGV4ID0gMDsKLQlyZXR1cm4gc2NscF92dDIyMF9kcml2ZXI7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fc2NscF92dDIyMF9mbHVzaF9idWZmZXIodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzc2LDYgKzc2MSwyMSBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19TQ0xQX1ZUMjIwX0NPTlNPTEUKKworc3RhdGljIHZvaWQKK3NjbHBfdnQyMjBfY29uX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQoreworCV9fc2NscF92dDIyMF93cml0ZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBidWYsIGNvdW50LCAxLCAxLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICoKK3NjbHBfdnQyMjBfY29uX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKK3sKKwkqaW5kZXggPSAwOworCXJldHVybiBzY2xwX3Z0MjIwX2RyaXZlcjsKK30KKwogc3RhdGljIGludAogc2NscF92dDIyMF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDY0ZjU3ZWYuLjBjMDcwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTE2Miw5ICsxNjIsMTAgQEAKIAlzcGluX2xvY2tfaXJxKCZkZXZpY2UtPmJsa19kYXRhLnJlcXVlc3RfcXVldWVfbG9jayk7CiAJd2hpbGUgKAogCQkhYmxrX3F1ZXVlX3BsdWdnZWQocXVldWUpICYmCi0JCShyZXEgPSBibGtfZmV0Y2hfcmVxdWVzdChxdWV1ZSkpICYmCisJCWJsa19wZWVrX3JlcXVlc3QocXVldWUpICYmCiAJCW5yX3F1ZXVlZCA8IFRBUEVCTE9DS19NSU5fUkVRVUVVRQogCSkgeworCQlyZXEgPSBibGtfZmV0Y2hfcmVxdWVzdChxdWV1ZSk7CiAJCWlmIChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSB7CiAJCQlEQkZfRVZFTlQoMSwgIlRCTE9DSzogUmVqZWN0aW5nIHdyaXRlIHJlcXVlc3RcbiIpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2UtPmJsa19kYXRhLnJlcXVlc3RfcXVldWVfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwppbmRleCA2NTY1ZjAyLi43ZWFiOWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKQEAgLTI2NSwxMyArMjY1LDExIEBACiBzdGF0aWMgdm9pZCAqCiBjaW9faWdub3JlX3Byb2Nfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGNjd2Rldl9pdGVyICppdGVyOworCXN0cnVjdCBjY3dkZXZfaXRlciAqaXRlciA9IHMtPnByaXZhdGU7CiAKIAlpZiAoKm9mZnNldCA+PSAoX19NQVhfU1VCQ0hBTk5FTCArIDEpICogKF9fTUFYX1NTSUQgKyAxKSkKIAkJcmV0dXJuIE5VTEw7Ci0JaXRlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjY3dkZXZfaXRlciksIEdGUF9LRVJORUwpOwotCWlmICghaXRlcikKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJbWVtc2V0KGl0ZXIsIDAsIHNpemVvZigqaXRlcikpOwogCWl0ZXItPnNzaWQgPSAqb2Zmc2V0IC8gKF9fTUFYX1NVQkNIQU5ORUwgKyAxKTsKIAlpdGVyLT5kZXZubyA9ICpvZmZzZXQgJSAoX19NQVhfU1VCQ0hBTk5FTCArIDEpOwogCXJldHVybiBpdGVyOwpAQCAtMjgwLDggKzI3OCw2IEBACiBzdGF0aWMgdm9pZAogY2lvX2lnbm9yZV9wcm9jX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqaXQpCiB7Ci0JaWYgKCFJU19FUlIoaXQpKQotCQlrZnJlZShpdCk7CiB9CiAKIHN0YXRpYyB2b2lkICoKQEAgLTM3OCwxNCArMzc0LDE1IEBACiBzdGF0aWMgaW50CiBjaW9faWdub3JlX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmNpb19pZ25vcmVfcHJvY19zZXFfb3BzKTsKKwlyZXR1cm4gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmY2lvX2lnbm9yZV9wcm9jX3NlcV9vcHMsCisJCQkJc2l6ZW9mKHN0cnVjdCBjY3dkZXZfaXRlcikpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaW9faWdub3JlX3Byb2NfZm9wcyA9IHsKIAkub3BlbiAgICA9IGNpb19pZ25vcmVfcHJvY19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiAJLndyaXRlICAgPSBjaW9faWdub3JlX3dyaXRlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHAuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKaW5kZXggNDAwMDI4My4uOGFiNTE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCkBAIC0zOTMsNyArMzkzLDYgQEAKIAljaHAtPnN0YXRlID0gMTsKIAljaHAtPmRldi5wYXJlbnQgPSAmY2hhbm5lbF9zdWJzeXN0ZW1zW2NocGlkLmNzc2lkXS0+ZGV2aWNlOwogCWNocC0+ZGV2LnJlbGVhc2UgPSBjaHBfcmVsZWFzZTsKLQlkZXZfc2V0X25hbWUoJmNocC0+ZGV2LCAiY2hwJXguJTAyeCIsIGNocGlkLmNzc2lkLCBjaHBpZC5pZCk7CiAKIAkvKiBPYnRhaW4gY2hhbm5lbCBwYXRoIGRlc2NyaXB0aW9uIGFuZCBmaWxsIGl0IGluLiAqLwogCXJldCA9IGNoc2NfZGV0ZXJtaW5lX2Jhc2VfY2hhbm5lbF9wYXRoX2Rlc2MoY2hwaWQsICZjaHAtPmRlc2MpOwpAQCAtNDExLDYgKzQxMCw3IEBACiAJfSBlbHNlIHsKIAkJY2hwLT5jbWcgPSAtMTsKIAl9CisJZGV2X3NldF9uYW1lKCZjaHAtPmRldiwgImNocCV4LiUwMngiLCBjaHBpZC5jc3NpZCwgY2hwaWQuaWQpOwogCiAJLyogbWFrZSBpdCBrbm93biB0byB0aGUgc3lzdGVtICovCiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZjaHAtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCBmNzgwYmRkLi4yNDkwYjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKQEAgLTEyNTAsOCArMTI1MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZfaWQ7CiAKLQljZGV2ID0gc2NoX2dldF9jZGV2KHNjaCk7Ci0JaWYgKGNkZXYpIHsKKwlpZiAoY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpIHsKIAkJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnNjaC0+ZGV2LmtvYmosCiAJCQkJCSZpb19zdWJjaGFubmVsX2F0dHJfZ3JvdXApOwogCQlpZiAocmMpCkBAIC0xMjYwLDEzICsxMjU5LDEzIEBACiAJCQkJICAgICAgIjAuJXguJTA0eCAocmM9JWQpXG4iLAogCQkJCSAgICAgIHNjaC0+c2NoaWQuc3NpZCwgc2NoLT5zY2hpZC5zY2hfbm8sIHJjKTsKIAkJLyoKLQkJICogVGhpcyBzdWJjaGFubmVsIGFscmVhZHkgaGFzIGFuIGFzc29jaWF0ZWQgY2N3X2RldmljZS4KKwkJICogVGhlIGNvbnNvbGUgc3ViY2hhbm5lbCBhbHJlYWR5IGhhcyBhbiBhc3NvY2lhdGVkIGNjd19kZXZpY2UuCiAJCSAqIFRocm93IHRoZSBkZWxheWVkIHVldmVudCBmb3IgdGhlIHN1YmNoYW5uZWwsIHJlZ2lzdGVyCi0JCSAqIHRoZSBjY3dfZGV2aWNlIGFuZCBleGl0LiBUaGlzIGhhcHBlbnMgZm9yIGFsbCBlYXJseQotCQkgKiBkZXZpY2VzLCBlLmcuIHRoZSBjb25zb2xlLgorCQkgKiB0aGUgY2N3X2RldmljZSBhbmQgZXhpdC4KIAkJICovCiAJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CisJCWNkZXYgPSBzY2hfZ2V0X2NkZXYoc2NoKTsKIAkJY2Rldi0+ZGV2Lmdyb3VwcyA9IGNjd2Rldl9hdHRyX2dyb3VwczsKIAkJZGV2aWNlX2luaXRpYWxpemUoJmNkZXYtPmRldik7CiAJCWNjd19kZXZpY2VfcmVnaXN0ZXIoY2Rldik7CkBAIC0xNjA5LDcgKzE2MDgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3ZvaWQgY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCWlmICghY2RldikKIAkJcmV0dXJuOwpAQCAtMTcwNSw3ICsxNzA0LDcgQEAKIAkJY2N3X2RldmljZV90cmlnZ2VyX3JlcHJvYmUoY2Rldik7CiAJCWJyZWFrOwogCWNhc2UgRElTQzoKLQkJZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CisJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAppbmRleCBlZDM5YTJjLi4yNDZjNjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKQEAgLTEyNSw2ICsxMjUsNyBAQAogdm9pZCBjY3dfZGV2aWNlX3RyaWdnZXJfcmVwcm9iZShzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIHZvaWQgY2N3X2RldmljZV9raWxsX2lvKHN0cnVjdCBjY3dfZGV2aWNlICopOwogaW50IGNjd19kZXZpY2Vfbm90aWZ5KHN0cnVjdCBjY3dfZGV2aWNlICosIGludCk7Cit2b2lkIGNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CiB2b2lkIGNjd19kZXZpY2Vfc2V0X25vdG9wZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOwogCiAvKiBxZGlvIG5lZWRzIHRoaXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IGU3MjhjZTQuLmI5NjEzZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC0zODcsMTkgKzM4NywzNSBAQAogCiAJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBzdGF0ZTsKIAotCWlmIChzdGF0ZSA9PSBERVZfU1RBVEVfQk9YRUQpIHsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBERVZfU1RBVEVfQk9YRUQ6CiAJCUNJT19NU0dfRVZFTlQoMCwgIkJveGVkIGRldmljZSAlMDR4IG9uIHN1YmNoYW5uZWwgJTA0eFxuIiwKIAkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywgc2NoLT5zY2hpZC5zY2hfbm8pOwogCQlpZiAoY2Rldi0+b25saW5lICYmICFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fQk9YRUQpKQogCQkJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOwotCX0KLQlpZiAoc3RhdGUgPT0gREVWX1NUQVRFX05PVF9PUEVSKSB7CisJCWJyZWFrOworCWNhc2UgREVWX1NUQVRFX05PVF9PUEVSOgogCQlDSU9fTVNHX0VWRU5UKDAsICJEZXZpY2UgJTA0eCBnb25lIG9uIHN1YmNoYW5uZWwgJTA0eFxuIiwKIAkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywgc2NoLT5zY2hpZC5zY2hfbm8pOwogCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKIAkJCWNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoY2Rldik7CisJCWVsc2UKKwkJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOworCQlicmVhazsKKwljYXNlIERFVl9TVEFURV9ESVNDT05ORUNURUQ6CisJCUNJT19NU0dfRVZFTlQoMCwgIkRpc2Nvbm5lY3RlZCBkZXZpY2UgJTA0eCBvbiBzdWJjaGFubmVsICIKKwkJCSAgICAgICIlMDR4XG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sCisJCQkgICAgICBzY2gtPnNjaGlkLnNjaF9ubyk7CisJCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX05PX1BBVEgpKQorCQkJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKKwkJZWxzZQorCQkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOworCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCWlmIChjZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSkgewpAQCAtNjcxLDYgKzY4NywxMCBAQAogCQljY3dfZGV2aWNlX2RvbmUoY2RldiwgREVWX1NUQVRFX05PVF9PUEVSKTsKIAkJcmV0dXJuIDA7CiAJfQorCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfQk9YRUQpIHsKKwkJY2N3X2RldmljZV9kb25lKGNkZXYsIERFVl9TVEFURV9CT1hFRCk7CisJCXJldHVybiAwOworCX0KIAlpZiAoY2N3X2RldmljZV9pc19vcnBoYW4oY2RldikpIHsKIAkJY2N3X2RldmljZV9kb25lKGNkZXYsIERFVl9TVEFURV9PRkZMSU5FKTsKIAkJcmV0dXJuIDA7CkBAIC03MzAsMTEgKzc1MCwxMCBAQAogc3RhdGljIHZvaWQgY2N3X2RldmljZV9nZW5lcmljX25vdG9wZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCiAJCQkJICAgICAgIGVudW0gZGV2X2V2ZW50IGRldl9ldmVudCkKIHsKLQlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwotCi0JY2N3X2RldmljZV9zZXRfbm90b3BlcihjZGV2KTsKLQlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwotCWNzc19zY2hlZHVsZV9ldmFsKHNjaC0+c2NoaWQpOworCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQorCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOworCWVsc2UKKwkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwppbmRleCAxYjc4ZjYzLi43Njc2OTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJCQkgICBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuCSA9IHFzdGF0X3NlcV9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmMKaW5kZXggZWZmOTQzOS4uOTY4ZTNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jCkBAIC04NCw3ICs4NCw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIHFkaW9fcGVyZl9wcm9jX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxZGlvX3BlcmZfcHJvY19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcWRpb19wZXJmX3Byb2NfZm9wcyA9IHsKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JID0gcWRpb19wZXJmX3NlcV9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwppbmRleCBjMjBkNDc5Li41Njc3YjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwpAQCAtMzYxLDcgKzM2MSw3IEBACiAJCS5Ub0NhcmRMZW4xCT0gc2l6ZW9mICptc2cgLSBzaXplb2YobXNnLT5oZHIpLAogCQkuRnJvbUNhcmRMZW4xCT0gc2l6ZW9mICptc2cgLSBzaXplb2YobXNnLT5oZHIpLAogCX07Ci0Jc3RhdGljIHN0cnVjdCBDUFJCWCBzdGF0aWNfY3ByYnggPSB7CisJc3RhdGljIHN0cnVjdCBDUFJCWCBsb2NhbF9jcHJieCA9IHsKIAkJLmNwcmJfbGVuCT0gMHgwMGRjLAogCQkuY3ByYl92ZXJfaWQJPSAweDAyLAogCQkuZnVuY19pZAk9IHsweDU0LCAweDMyfSwKQEAgLTM3Miw3ICszNzIsNyBAQAogCiAJbXNnLT5oZHIgPSBzdGF0aWNfdHlwZTZfaGRyWDsKIAltc2ctPmhkci5Gcm9tQ2FyZExlbjIgPSByYW5kb21fbnVtYmVyX2xlbmd0aCwKLQltc2ctPmNwcmJ4ID0gc3RhdGljX2NwcmJ4OworCW1zZy0+Y3ByYnggPSBsb2NhbF9jcHJieDsKIAltc2ctPmNwcmJ4LnJwbF9kYXRhbCA9IHJhbmRvbV9udW1iZXJfbGVuZ3RoLAogCW1zZy0+Y3ByYnguZG9tYWluID0gQVBfUUlEX1FVRVVFKGFwX2Rldi0+cWlkKTsKIAltZW1jcHkobXNnLT5mdW5jdGlvbl9jb2RlLCBtc2ctPmhkci5mdW5jdGlvbl9jb2RlLCAweDAyKTsKQEAgLTU2MSw3ICs1NjEsOCBAQAogCQlpZiAobXNnLT5jcHJieC5jcHJiX3Zlcl9pZCA9PSAweDAyKQogCQkJcmV0dXJuIGNvbnZlcnRfdHlwZTg2X2ljYSh6ZGV2LCByZXBseSwKIAkJCQkJCSAgb3V0cHV0ZGF0YSwgb3V0cHV0ZGF0YWxlbmd0aCk7Ci0JCS8qIG5vIGJyZWFrLCBpbmNvcnJlY3QgY3ByYiB2ZXJzaW9uIGlzIGFuIHVua25vd24gcmVzcG9uc2UgKi8KKwkJLyogRmFsbCB0aHJvdWdoLCBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duCisJCSAqIHJlc3BvbnNlICovCiAJZGVmYXVsdDogLyogVW5rbm93biByZXNwb25zZSB0eXBlLCB0aGlzIHNob3VsZCBORVZFUiBFVkVSIGhhcHBlbiAqLwogCQl6ZGV2LT5vbmxpbmUgPSAwOwogCQlyZXR1cm4gLUVBR0FJTjsJLyogcmVwZWF0IHRoZSByZXF1ZXN0IG9uIGEgZGlmZmVyZW50IGRldmljZS4gKi8KQEAgLTU4Nyw3ICs1ODgsOCBAQAogCQl9CiAJCWlmIChtc2ctPmNwcmJ4LmNwcmJfdmVyX2lkID09IDB4MDIpCiAJCQlyZXR1cm4gY29udmVydF90eXBlODZfeGNyYih6ZGV2LCByZXBseSwgeGNSQik7Ci0JCS8qIG5vIGJyZWFrLCBpbmNvcnJlY3QgY3ByYiB2ZXJzaW9uIGlzIGFuIHVua25vd24gcmVzcG9uc2UgKi8KKwkJLyogRmFsbCB0aHJvdWdoLCBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duCisJCSAqIHJlc3BvbnNlICovCiAJZGVmYXVsdDogLyogVW5rbm93biByZXNwb25zZSB0eXBlLCB0aGlzIHNob3VsZCBORVZFUiBFVkVSIGhhcHBlbiAqLwogCQl4Y1JCLT5zdGF0dXMgPSAweDAwMDgwNDRETDsgLyogSEREX0ludmFsaWRQYXJtICovCiAJCXpkZXYtPm9ubGluZSA9IDA7CkBAIC02MTAsNyArNjEyLDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAobXNnLT5jcHJieC5jcHJiX3Zlcl9pZCA9PSAweDAyKQogCQkJcmV0dXJuIGNvbnZlcnRfdHlwZTg2X3JuZyh6ZGV2LCByZXBseSwgZGF0YSk7Ci0JCS8qIG5vIGJyZWFrLCBpbmNvcnJlY3QgY3ByYiB2ZXJzaW9uIGlzIGFuIHVua25vd24gcmVzcG9uc2UgKi8KKwkJLyogRmFsbCB0aHJvdWdoLCBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duCisJCSAqIHJlc3BvbnNlICovCiAJZGVmYXVsdDogLyogVW5rbm93biByZXNwb25zZSB0eXBlLCB0aGlzIHNob3VsZCBORVZFUiBFVkVSIGhhcHBlbiAqLwogCQl6ZGV2LT5vbmxpbmUgPSAwOwogCQlyZXR1cm4gLUVBR0FJTjsJLyogcmVwZWF0IHRoZSByZXF1ZXN0IG9uIGEgZGlmZmVyZW50IGRldmljZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwppbmRleCAxMDIwMDBkLi4zMDEyMzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCkBAIC0xNTgsNyArMTU4LDEyIEBACiAJCXNtc2dfcGF0aC0+ZmxhZ3MgPSAwOwogCQlyYyA9IGl1Y3ZfcGF0aF9jb25uZWN0KHNtc2dfcGF0aCwgJnNtc2dfaGFuZGxlciwgIipNU0cgICAgIiwKIAkJCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXVjdl9wYXRoX2Nvbm5lY3QgcmV0dXJuZWQgd2l0aCByYyAlaVxuIiwgcmMpOworI2lmZGVmIENPTkZJR19QTV9ERUJVRworCQlpZiAocmMpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiaXVjdl9wYXRoX2Nvbm5lY3QgcmV0dXJuZWQgd2l0aCByYyAlaVxuIiwgcmMpOworI2VuZGlmCisJCWNwY21kKCJTRVQgU01TRyBJVUNWIiwgTlVMTCwgMCwgTlVMTCk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggMWJlNmJmNy4uMjg4OWU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC04MCwyOCArODAsMzUgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHpmY3BfaW5pdF9kZXZpY2VfY29uZmlndXJlKGNoYXIgKmJ1c2lkLCB1NjQgd3dwbiwgdTY0IGx1bikKIHsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2N3ZGV2OwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCi0JbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7Ci0JcmVhZF9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQlhZGFwdGVyID0gemZjcF9nZXRfYWRhcHRlcl9ieV9idXNpZChidXNpZCk7Ci0JaWYgKGFkYXB0ZXIpCi0JCXpmY3BfYWRhcHRlcl9nZXQoYWRhcHRlcik7Ci0JcmVhZF91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOworCWNjd2RldiA9IGdldF9jY3dkZXZfYnlfYnVzaWQoJnpmY3BfY2N3X2RyaXZlciwgYnVzaWQpOworCWlmICghY2N3ZGV2KQorCQlyZXR1cm47CiAKKwlpZiAoY2N3X2RldmljZV9zZXRfb25saW5lKGNjd2RldikpCisJCWdvdG8gb3V0X2Njd2RldjsKKworCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOworCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd2Rldi0+ZGV2KTsKIAlpZiAoIWFkYXB0ZXIpCi0JCWdvdG8gb3V0X2FkYXB0ZXI7Ci0JcG9ydCA9IHpmY3BfcG9ydF9lbnF1ZXVlKGFkYXB0ZXIsIHd3cG4sIDAsIDApOwotCWlmIChJU19FUlIocG9ydCkpCisJCWdvdG8gb3V0X3VubG9jazsKKwl6ZmNwX2FkYXB0ZXJfZ2V0KGFkYXB0ZXIpOworCisJcG9ydCA9IHpmY3BfZ2V0X3BvcnRfYnlfd3dwbihhZGFwdGVyLCB3d3BuKTsKKwlpZiAoIXBvcnQpCiAJCWdvdG8gb3V0X3BvcnQ7CisKKwl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwogCXVuaXQgPSB6ZmNwX3VuaXRfZW5xdWV1ZShwb3J0LCBsdW4pOwogCWlmIChJU19FUlIodW5pdCkpCiAJCWdvdG8gb3V0X3VuaXQ7CiAJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKLQljY3dfZGV2aWNlX3NldF9vbmxpbmUoYWRhcHRlci0+Y2N3X2RldmljZSk7CiAKKwl6ZmNwX2VycF91bml0X3Jlb3Blbih1bml0LCAwLCAiYXVpZGNfMSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJZmx1c2hfd29yaygmdW5pdC0+c2NzaV93b3JrKTsKIApAQCAtMTExLDIwICsxMTgsMjMgQEAKIAl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogb3V0X3BvcnQ6CiAJemZjcF9hZGFwdGVyX3B1dChhZGFwdGVyKTsKLW91dF9hZGFwdGVyOgorb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOworb3V0X2Njd2RldjoKKwlwdXRfZGV2aWNlKCZjY3dkZXYtPmRldik7CiAJcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgemZjcF9pbml0X2RldmljZV9zZXR1cChjaGFyICpkZXZzdHIpCiB7CiAJY2hhciAqdG9rZW47Ci0JY2hhciAqc3RyOworCWNoYXIgKnN0ciwgKnN0cl9zYXZlZDsKIAljaGFyIGJ1c2lkW1pGQ1BfQlVTX0lEX1NJWkVdOwogCXU2NCB3d3BuLCBsdW47CiAKIAkvKiBkdXBsaWNhdGUgZGV2c3RyIGFuZCBrZWVwIHRoZSBvcmlnaW5hbCBmb3Igc3lzZnMgcHJlc2VudGF0aW9uKi8KLQlzdHIgPSBrbWFsbG9jKHN0cmxlbihkZXZzdHIpICsgMSwgR0ZQX0tFUk5FTCk7CisJc3RyX3NhdmVkID0ga21hbGxvYyhzdHJsZW4oZGV2c3RyKSArIDEsIEdGUF9LRVJORUwpOworCXN0ciA9IHN0cl9zYXZlZDsKIAlpZiAoIXN0cikKIAkJcmV0dXJuOwogCkBAIC0xNDMsMTIgKzE1MywxMiBAQAogCWlmICghdG9rZW4gfHwgc3RyaWN0X3N0cnRvdWxsKHRva2VuLCAwLCAodW5zaWduZWQgbG9uZyBsb25nICopICZsdW4pKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlrZnJlZShzdHIpOworCWtmcmVlKHN0cl9zYXZlZCk7CiAJemZjcF9pbml0X2RldmljZV9jb25maWd1cmUoYnVzaWQsIHd3cG4sIGx1bik7CiAJcmV0dXJuOwogCi0gZXJyX291dDoKLQlrZnJlZShzdHIpOworZXJyX291dDoKKwlrZnJlZShzdHJfc2F2ZWQpOwogCXByX2VycigiJXMgaXMgbm90IGEgdmFsaWQgU0NTSSBkZXZpY2VcbiIsIGRldnN0cik7CiB9CiAKQEAgLTU5MywxMCArNjAzLDggQEAKIAlpbnQgcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2Nhbl93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zdGF0X3dvcmspOwogCXpmY3BfZmNfd2thX3BvcnRzX2ZvcmNlX29mZmxpbmUoYWRhcHRlci0+Z3MpOwotCXpmY3BfYWRhcHRlcl9zY3NpX3VucmVnaXN0ZXIoYWRhcHRlcik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYua29iaiwKIAkJCSAgICZ6ZmNwX3N5c2ZzX2FkYXB0ZXJfYXR0cnMpOwogCWRldl9zZXRfZHJ2ZGF0YSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IDBjOTBmOGUuLmUwODMzOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtMTAyLDYgKzEwMiwxNCBAQAogCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7CiAJaWYgKCFhZGFwdGVyKQogCQlnb3RvIG91dDsKKwltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOworCisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2Nhbl93b3JrKTsKKworCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOworCisJLyogdGhpcyBhbHNvIHJlbW92ZXMgdGhlIHNjc2kgZGV2aWNlcywgc28gY2FsbCBpdCBmaXJzdCAqLworCXpmY3BfYWRhcHRlcl9zY3NpX3VucmVnaXN0ZXIoYWRhcHRlcik7CiAKIAl3cml0ZV9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9ydCwgcCwgJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KSB7CkBAIC0xMTcsMTEgKzEyNSw4IEBACiAJd3JpdGVfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwLCAmcG9ydF9yZW1vdmVfbGgsIGxpc3QpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuaXQsIHUsICZ1bml0X3JlbW92ZV9saCwgbGlzdCkgewotCQkJaWYgKHVuaXQtPmRldmljZSkKLQkJCQlzY3NpX3JlbW92ZV9kZXZpY2UodW5pdC0+ZGV2aWNlKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuaXQsIHUsICZ1bml0X3JlbW92ZV9saCwgbGlzdCkKIAkJCXpmY3BfdW5pdF9kZXF1ZXVlKHVuaXQpOwotCQl9CiAJCXpmY3BfcG9ydF9kZXF1ZXVlKHBvcnQpOwogCX0KIAl3YWl0X2V2ZW50KGFkYXB0ZXItPnJlbW92ZV93cSwgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlZmNvdW50KSA9PSAwKTsKQEAgLTE5MiwxMyArMTk3LDkgQEAKIAogCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7Ci0JaWYgKCFhZGFwdGVyKQotCQlnb3RvIG91dDsKLQogCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjc29mZjEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7Ci1vdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1MywxMyArMjU0LDE3IEBACiAKIAltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjZGV2LT5kZXYpOworCWlmICghYWRhcHRlcikKKwkJZ290byBvdXQ7CisKIAl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY3NodXQxIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAl6ZmNwX2VycF90aHJlYWRfa2lsbChhZGFwdGVyKTsKK291dDoKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogfQogCi1zdGF0aWMgc3RydWN0IGNjd19kcml2ZXIgemZjcF9jY3dfZHJpdmVyID0geworc3RydWN0IGNjd19kcml2ZXIgemZjcF9jY3dfZHJpdmVyID0gewogCS5vd25lciAgICAgICA9IFRISVNfTU9EVUxFLAogCS5uYW1lICAgICAgICA9ICJ6ZmNwIiwKIAkuaWRzICAgICAgICAgPSB6ZmNwX2Njd19kZXZpY2VfaWQsCkBAIC0yODQsMjAgKzI4OSwzIEBACiB7CiAJcmV0dXJuIGNjd19kcml2ZXJfcmVnaXN0ZXIoJnpmY3BfY2N3X2RyaXZlcik7CiB9Ci0KLS8qKgotICogemZjcF9nZXRfYWRhcHRlcl9ieV9idXNpZCAtIGZpbmQgemZjcF9hZGFwdGVyIHN0cnVjdAotICogQGJ1c2lkOiBidXMgaWQgc3RyaW5nIG9mIHpmY3AgYWRhcHRlciB0byBmaW5kCi0gKi8KLXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKnpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQoY2hhciAqYnVzaWQpCi17Ci0Jc3RydWN0IGNjd19kZXZpY2UgKmNjd19kZXZpY2U7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IE5VTEw7Ci0KLQljY3dfZGV2aWNlID0gZ2V0X2Njd2Rldl9ieV9idXNpZCgmemZjcF9jY3dfZHJpdmVyLCBidXNpZCk7Ci0JaWYgKGNjd19kZXZpY2UpIHsKLQkJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3X2RldmljZS0+ZGV2KTsKLQkJcHV0X2RldmljZSgmY2N3X2RldmljZS0+ZGV2KTsKLQl9Ci0JcmV0dXJuIGFkYXB0ZXI7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCmluZGV4IDgzMDVjODcuLmVmNjgxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2ZkYy5jCkBAIC04Niw4ICs4NiwyMyBAQAogc3RhdGljIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKnpmY3BfY2ZkY19nZXRfYWRhcHRlcih1MzIgZGV2bm8pCiB7CiAJY2hhciBidXNpZFs5XTsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2N3ZGV2OworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOworCiAJc25wcmludGYoYnVzaWQsIHNpemVvZihidXNpZCksICIwLjAuJTA0eCIsIGRldm5vKTsKLQlyZXR1cm4gemZjcF9nZXRfYWRhcHRlcl9ieV9idXNpZChidXNpZCk7CisJY2N3ZGV2ID0gZ2V0X2Njd2Rldl9ieV9idXNpZCgmemZjcF9jY3dfZHJpdmVyLCBidXNpZCk7CisJaWYgKCFjY3dkZXYpCisJCWdvdG8gb3V0OworCisJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3ZGV2LT5kZXYpOworCWlmICghYWRhcHRlcikKKwkJZ290byBvdXRfcHV0OworCisJemZjcF9hZGFwdGVyX2dldChhZGFwdGVyKTsKK291dF9wdXQ6CisJcHV0X2RldmljZSgmY2N3ZGV2LT5kZXYpOworb3V0OgorCXJldHVybiBhZGFwdGVyOwogfQogCiBzdGF0aWMgaW50IHpmY3BfY2ZkY19zZXRfZnNmKHN0cnVjdCB6ZmNwX2ZzZl9jZmRjICpmc2ZfY2ZkYywgaW50IGNvbW1hbmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwppbmRleCA3M2QzNjZiLi5mNzNlMjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKQEAgLTg1OCwxMCArODU4LDcgQEAKIAkJaWYgKGZjX2hvc3RfcG9ydF90eXBlKGFkYXB0ZXItPnNjc2lfaG9zdCkgPT0gRkNfUE9SVFRZUEVfUFRQKQogCQkJcmV0dXJuIHpmY3BfZXJwX29wZW5fcHRwX3BvcnQoYWN0KTsKIAkJaWYgKCFwb3J0LT5kX2lkKSB7Ci0JCQl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwotCQkJaWYgKCFxdWV1ZV93b3JrKGFkYXB0ZXItPndvcmtfcXVldWUsCi0JCQkJCSZwb3J0LT5naWRfcG5fd29yaykpCi0JCQkJemZjcF9wb3J0X3B1dChwb3J0KTsKKwkJCXpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwKHBvcnQpOwogCQkJcmV0dXJuIFpGQ1BfRVJQX0VYSVQ7CiAJCX0KIAkJcmV0dXJuIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9wb3J0KGFjdCk7CkBAIC04NjksMTIgKzg2NiwxMSBAQAogCWNhc2UgWkZDUF9FUlBfU1RFUF9QT1JUX09QRU5JTkc6CiAJCS8qIERfSUQgbWlnaHQgaGF2ZSBjaGFuZ2VkIGR1cmluZyBvcGVuICovCiAJCWlmIChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKSB7Ci0JCQlpZiAocG9ydC0+ZF9pZCkKLQkJCQlyZXR1cm4gWkZDUF9FUlBfU1VDQ0VFREVEOwotCQkJZWxzZSB7Ci0JCQkJYWN0LT5zdGVwID0gWkZDUF9FUlBfU1RFUF9QT1JUX0NMT1NJTkc7Ci0JCQkJcmV0dXJuIFpGQ1BfRVJQX0NPTlRJTlVFUzsKKwkJCWlmICghcG9ydC0+ZF9pZCkgeworCQkJCXpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwKHBvcnQpOworCQkJCXJldHVybiBaRkNQX0VSUF9FWElUOwogCQkJfQorCQkJcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKIAkJfQogCQlpZiAocG9ydC0+ZF9pZCAmJiAhKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX05PRVNDKSkgewogCQkJcG9ydC0+ZF9pZCA9IDA7CkBAIC04ODksMTkgKzg4NSwyMSBAQAogc3RhdGljIGludCB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGVycF9hY3Rpb24tPnBvcnQ7CisJaW50IHBfc3RhdHVzID0gYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cyk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fTk9FU0MpCisJaWYgKChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9OT0VTQykgJiYKKwkgICAgIShwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKSkKIAkJZ290byBjbG9zZV9pbml0X2RvbmU7CiAKIAlzd2l0Y2ggKGVycF9hY3Rpb24tPnN0ZXApIHsKIAljYXNlIFpGQ1BfRVJQX1NURVBfVU5JTklUSUFMSVpFRDoKIAkJemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbGVhcnN0YXRpKHBvcnQpOwotCQlpZiAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikKKwkJaWYgKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCiAJCQlyZXR1cm4gemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbG9zZShlcnBfYWN0aW9uKTsKIAkJYnJlYWs7CiAKIAljYXNlIFpGQ1BfRVJQX1NURVBfUE9SVF9DTE9TSU5HOgotCQlpZiAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikKKwkJaWYgKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCiAJCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAppbmRleCAzNjkzNWJjLi5iM2YyOGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKQEAgLTI4LDcgKzI4LDcgQEAKIC8qIHpmY3BfY2N3LmMgKi8KIGV4dGVybiBpbnQgemZjcF9jY3dfcmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gaW50IHpmY3BfY2N3X3ByaXZfc2NoKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gc3RydWN0IHpmY3BfYWRhcHRlciAqemZjcF9nZXRfYWRhcHRlcl9ieV9idXNpZChjaGFyICopOworZXh0ZXJuIHN0cnVjdCBjY3dfZHJpdmVyIHpmY3BfY2N3X2RyaXZlcjsKIAogLyogemZjcF9jZmRjLmMgKi8KIGV4dGVybiBzdHJ1Y3QgbWlzY2RldmljZSB6ZmNwX2NmZGNfbWlzYzsKQEAgLTk2LDYgKzk2LDcgQEAKIGV4dGVybiB2b2lkIF96ZmNwX2ZjX3NjYW5fcG9ydHNfbGF0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19pbmNvbWluZ19lbHMoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfcG9ydF9kaWRfbG9va3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwKHN0cnVjdCB6ZmNwX3BvcnQgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3Bsb2dpX2V2YWx1YXRlKHN0cnVjdCB6ZmNwX3BvcnQgKiwgc3RydWN0IGZzZl9wbG9naSAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfdGVzdF9saW5rKHN0cnVjdCB6ZmNwX3BvcnQgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX2xpbmtfdGVzdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwppbmRleCA3MjJmMjJkLi5kZjIzYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCkBAIC0zNjEsNiArMzYxLDE3IEBACiB9CiAKIC8qKgorICogemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAgLSB0cmlnZ2VyIHRoZSBkX2lkIGxvb2t1cCB1c2luZyBhIEdJRF9QTiByZXF1ZXN0CisgKiBAcG9ydDogVGhlIHpmY3BfcG9ydCB0byBsb29rdXAgdGhlIGRfaWQgZm9yLgorICovCit2b2lkIHpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCit7CisJemZjcF9wb3J0X2dldChwb3J0KTsKKwlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPmdpZF9wbl93b3JrKSkKKwkJemZjcF9wb3J0X3B1dChwb3J0KTsKK30KKworLyoqCiAgKiB6ZmNwX2ZjX3Bsb2dpX2V2YWx1YXRlIC0gZXZhbHVhdGUgUExPR0kgcGxheWxvYWQKICAqIEBwb3J0OiB6ZmNwX3BvcnQgc3RydWN0dXJlCiAgKiBAcGxvZ2k6IHBsb2dpIHBheWxvYWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IGYwOWM4NjMuLjRlNDFiYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtMTA1OCwxNCArMTA1OCwyOCBAQAogCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cXVldWVfcmVxLAogCQkJCQlTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsCiAJCQkJCXNnX3Jlc3AsIG1heF9zYmFscyk7CisJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5yZXNwX2J1Zl9sZW5ndGggPSBieXRlczsKIAlpZiAoYnl0ZXMgPD0gMCkKIAkJcmV0dXJuIC1FSU87CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHMoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxLAorCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3JlcSwKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19yZXNwLAorCQkJCSBpbnQgbWF4X3NiYWxzKQoreworCWludCByZXQ7CisKKwlyZXQgPSB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHNfc2JhbHMocmVxLCBzZ19yZXEsIHNnX3Jlc3AsIG1heF9zYmFscyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIGNvbW1vbiBzZXR0aW5ncyBmb3IgY3QvZ3MgYW5kIGVscyByZXF1ZXN0cyAqLwotCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQucmVzcF9idWZfbGVuZ3RoID0gYnl0ZXM7CiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5zZXJ2aWNlX2NsYXNzID0gRlNGX0NMQVNTXzM7CiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC50aW1lb3V0ID0gMiAqIFJfQV9UT1Y7Ci0JemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCAyICogUl9BX1RPViArIDEwKTsKKwl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsICgyICogUl9BX1RPViArIDEwKSAqIEhaKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA5NCw4ICsxMTA4LDggQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlyZXQgPSB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHNfc2JhbHMocmVxLCBjdC0+cmVxLCBjdC0+cmVzcCwKLQkJCQkJICBGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpOworCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2VscyhyZXEsIGN0LT5yZXEsIGN0LT5yZXNwLAorCQkJCSAgICBGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkX3NlbmQ7CiAKQEAgLTExOTIsNyArMTIwNiw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0JcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzX3NiYWxzKHJlcSwgZWxzLT5yZXEsIGVscy0+cmVzcCwgMik7CisJcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzKHJlcSwgZWxzLT5yZXEsIGVscy0+cmVzcCwgMik7CiAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZF9zZW5kOwpAQCAtMTQ2MSw5ICsxNDc1LDE2IEBACiAJCXBsb2dpID0gKHN0cnVjdCBmc2ZfcGxvZ2kgKikgcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5lbHM7CiAJCWlmIChyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LmVsczFfbGVuZ3RoID49CiAJCSAgICBGU0ZfUExPR0lfTUlOX0xFTikgewotCQkJaWYgKHBsb2dpLT5zZXJ2X3BhcmFtLnd3cG4gIT0gcG9ydC0+d3dwbikKKwkJCWlmIChwbG9naS0+c2Vydl9wYXJhbS53d3BuICE9IHBvcnQtPnd3cG4pIHsKIAkJCQlwb3J0LT5kX2lkID0gMDsKLQkJCWVsc2UgeworCQkJCWRldl93YXJuKCZwb3J0LT5hZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCisJCQkJCSAiQSBwb3J0IG9wZW5lZCB3aXRoIFdXUE4gMHglMDE2THggIgorCQkJCQkgInJldHVybmVkIGRhdGEgdGhhdCBpZGVudGlmaWVzIGl0IGFzICIKKwkJCQkJICJXV1BOIDB4JTAxNkx4XG4iLAorCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgcG9ydC0+d3dwbiwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCSAgcGxvZ2ktPnNlcnZfcGFyYW0ud3dwbik7CisJCQl9IGVsc2UgewogCQkJCXBvcnQtPnd3bm4gPSBwbG9naS0+c2Vydl9wYXJhbS53d25uOwogCQkJCXpmY3BfZmNfcGxvZ2lfZXZhbHVhdGUocG9ydCwgcGxvZ2kpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCmluZGV4IDA3OWE4Y2YuLmQzMTAwMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKQEAgLTIyNCw2ICsyMjQsNyBAQAogCiAJemZjcF9lcnBfdW5pdF9yZW9wZW4odW5pdCwgMCwgInN5dWFzXzEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOworCWZsdXNoX3dvcmsoJnVuaXQtPnNjc2lfd29yayk7CiAJemZjcF91bml0X3B1dCh1bml0KTsKIG91dDoKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCA4MmJiM2IyLi5lMTFjY2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtMzY2LDYgKzM2Niw3IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zY3NpL2N4Z2IzaS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL3Njc2kvYm54MmkvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9zY3NpL2JlMmlzY3NpL0tjb25maWciCiAKIGNvbmZpZyBTR0lXRDkzX1NDU0kKIAl0cmlzdGF0ZSAiU0dJIFdEOTNDOTMgU0NTSSBEcml2ZXIiCkBAIC0xODI3LDYgKzE4MjgsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxpYnNycC4KIAorY29uZmlnIFNDU0lfQkZBX0ZDCisJdHJpc3RhdGUgIkJyb2NhZGUgQkZBIEZpYnJlIENoYW5uZWwgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCisJc2VsZWN0IFNDU0lfRkNfQVRUUlMKKwloZWxwCisJICBUaGlzIGJmYSBkcml2ZXIgc3VwcG9ydHMgYWxsIEJyb2NhZGUgUENJZSBGQy9GQ09FIGhvc3QgYWRhcHRlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIGJmYS4KKwogZW5kaWYgIyBTQ1NJX0xPV0xFVkVMCiAKIHNvdXJjZSAiZHJpdmVycy9zY3NpL3BjbWNpYS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCmluZGV4IDYxYTk0YWYuLjNhZDYxZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKQEAgLTg2LDYgKzg2LDcgQEAKIG9iai0kKENPTkZJR19TQ1NJX1FMQV9GQykJKz0gcWxhMnh4eC8KIG9iai0kKENPTkZJR19TQ1NJX1FMQV9JU0NTSSkJKz0gcWxhNHh4eC8KIG9iai0kKENPTkZJR19TQ1NJX0xQRkMpCQkrPSBscGZjLworb2JqLSQoQ09ORklHX1NDU0lfQkZBX0ZDKQkrPSBiZmEvCiBvYmotJChDT05GSUdfU0NTSV9QQVMxNikJKz0gcGFzMTYubwogb2JqLSQoQ09ORklHX1NDU0lfVDEyOCkJCSs9IHQxMjgubwogb2JqLSQoQ09ORklHX1NDU0lfRE1YMzE5MUQpCSs9IGRteDMxOTFkLm8KQEAgLTEzMCw2ICsxMzEsNyBAQAogb2JqLSQoQ09ORklHX1BTM19ST00pCQkrPSBwczNyb20ubwogb2JqLSQoQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kpCSs9IGxpYmlzY3NpLm8gbGliaXNjc2lfdGNwLm8gY3hnYjNpLwogb2JqLSQoQ09ORklHX1NDU0lfQk5YMl9JU0NTSSkJKz0gbGliaXNjc2kubyBibngyaS8KK29iai0kKENPTkZJR19CRTJJU0NTSSkJCSs9IGxpYmlzY3NpLm8gYmUyaXNjc2kvCiBvYmotJChDT05GSUdfU0NTSV9QTUNSQUlEKQkrPSBwbWNyYWlkLm8KIAogb2JqLSQoQ09ORklHX0FSTSkJCSs9IGFybS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1MmZjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9LY29uZmlnCkBAIC0wLDAgKzEsOCBAQAorY29uZmlnIEJFMklTQ1NJCisJdHJpc3RhdGUgIlNlcnZlckVuZ2luZXMnIDEwR2JwcyBpU0NTSSAtIEJsYWRlRW5naW5lIDIiCisJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQorCXNlbGVjdCBTQ1NJX0lTQ1NJX0FUVFJTCisKKwloZWxwCisJVGhpcyBkcml2ZXIgaW1wbGVtZW50cyB0aGUgaVNDU0kgZnVuY3Rpb25hbGl0eSBmb3IgU2VydmVyRW5naW5lcycKKwkxMEdicHMgU3RvcmFnZSBhZGFwdGVyIC0gQmxhZGVFbmdpbmUgMi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFmNDQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSB0byBidWlsZCB0aGUgaVNDU0kgZHJpdmVyIGZvciBTZXJ2ZXJFbmdpbmUncyBCbGFkZUVuZ2luZS4KKyMKKyMKKworb2JqLSQoQ09ORklHX0JFMklTQ1NJKSArPSBiZTJpc2NzaS5vCisKK2JlMmlzY3NpLXkgOj0gYmVfaXNjc2kubyBiZV9tYWluLm8gYmVfbWdtdC5vIGJlX2NtZHMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzYwMjBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKyNpZm5kZWYgQkVJU0NTSV9ICisjZGVmaW5lIEJFSVNDU0lfSAorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorCisjZGVmaW5lIEZXX1ZFUl9MRU4gMzIKKworc3RydWN0IGJlX2RtYV9tZW0geworCXZvaWQgKnZhOworCWRtYV9hZGRyX3QgZG1hOworCXUzMiBzaXplOworfTsKKworc3RydWN0IGJlX3F1ZXVlX2luZm8geworCXN0cnVjdCBiZV9kbWFfbWVtIGRtYV9tZW07CisJdTE2IGxlbjsKKwl1MTYgZW50cnlfc2l6ZTsJCS8qIFNpemUgb2YgYW4gZWxlbWVudCBpbiB0aGUgcXVldWUgKi8KKwl1MTYgaWQ7CisJdTE2IHRhaWwsIGhlYWQ7CisJYm9vbCBjcmVhdGVkOworCWF0b21pY190IHVzZWQ7CQkvKiBOdW1iZXIgb2YgdmFsaWQgZWxlbWVudHMgaW4gdGhlIHF1ZXVlICovCit9OworCitzdGF0aWMgaW5saW5lIHUzMiBNT0RVTE8odTE2IHZhbCwgdTE2IGxpbWl0KQoreworCVdBUk5fT04obGltaXQgJiAobGltaXQgLSAxKSk7CisJcmV0dXJuIHZhbCAmIChsaW1pdCAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5kZXhfaW5jKHUxNiAqaW5kZXgsIHUxNiBsaW1pdCkKK3sKKwkqaW5kZXggPSBNT0RVTE8oKCppbmRleCArIDEpLCBsaW1pdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcXVldWVfaGVhZF9ub2RlKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQoreworCXJldHVybiBxLT5kbWFfbWVtLnZhICsgcS0+aGVhZCAqIHEtPmVudHJ5X3NpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcXVldWVfdGFpbF9ub2RlKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQoreworCXJldHVybiBxLT5kbWFfbWVtLnZhICsgcS0+dGFpbCAqIHEtPmVudHJ5X3NpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9oZWFkX2luYyhzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlpbmRleF9pbmMoJnEtPmhlYWQsIHEtPmxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV90YWlsX2luYyhzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlpbmRleF9pbmMoJnEtPnRhaWwsIHEtPmxlbik7Cit9CisKKy8qSVNDU0kgKi8KKworc3RydWN0IGJlX2VxX29iaiB7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gcTsKKwljaGFyIGRlc2NbMzJdOworCisJLyogQWRhcHRpdmUgaW50ZXJydXB0IGNvYWxlc2NpbmcgKEFJQykgaW5mbyAqLworCWJvb2wgZW5hYmxlX2FpYzsKKwl1MTYgbWluX2VxZDsJCS8qIGluIHVzZWNzICovCisJdTE2IG1heF9lcWQ7CQkvKiBpbiB1c2VjcyAqLworCXUxNiBjdXJfZXFkOwkJLyogaW4gdXNlY3MgKi8KK307CisKK3N0cnVjdCBiZV9tY2Nfb2JqIHsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3E7Cit9OworCitzdHJ1Y3QgYmVfY3RybF9pbmZvIHsKKwl1OCBfX2lvbWVtICpjc3I7CisJdTggX19pb21lbSAqZGI7CQkvKiBEb29yIEJlbGwgKi8KKwl1OCBfX2lvbWVtICpwY2ljZmc7CS8qIFBDSSBjb25maWcgc3BhY2UgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCS8qIE1ib3ggdXNlZCBmb3IgY21kIHJlcXVlc3QvcmVzcG9uc2UgKi8KKwlzcGlubG9ja190IG1ib3hfbG9jazsJLyogRm9yIHNlcmlhbGl6aW5nIG1ib3ggY21kcyB0byBCRSBjYXJkICovCisJc3RydWN0IGJlX2RtYV9tZW0gbWJveF9tZW07CisJLyogTWJveCBtZW0gaXMgYWRqdXN0ZWQgdG8gYWxpZ24gdG8gMTYgYnl0ZXMuIFRoZSBhbGxvY2F0ZWQgYWRkcgorCSAqIGlzIHN0b3JlZCBmb3IgZnJlZWluZyBwdXJwb3NlICovCisJc3RydWN0IGJlX2RtYV9tZW0gbWJveF9tZW1fYWxsb2NlZDsKKworCS8qIE1DQyBSaW5ncyAqLworCXN0cnVjdCBiZV9tY2Nfb2JqIG1jY19vYmo7CisJc3BpbmxvY2tfdCBtY2NfbG9jazsJLyogRm9yIHNlcmlhbGl6aW5nIG1jYyBjbWRzIHRvIEJFIGNhcmQgKi8KKwlzcGlubG9ja190IG1jY19jcV9sb2NrOworCisJLyogTUNDIEFzeW5jIGNhbGxiYWNrICovCisJdm9pZCAoKmFzeW5jX2NiKSAodm9pZCAqYWRhcHRlciwgYm9vbCBsaW5rX3VwKTsKKwl2b2lkICphZGFwdGVyX2N0eHQ7Cit9OworCisjaW5jbHVkZSAiYmVfY21kcy5oIgorCisjZGVmaW5lIFBBR0VfU0hJRlRfNEsgMTIKKyNkZWZpbmUgUEFHRV9TSVpFXzRLICgxIDw8IFBBR0VfU0hJRlRfNEspCisKKy8qIFJldHVybnMgbnVtYmVyIG9mIHBhZ2VzIHNwYW5uZWQgYnkgdGhlIGRhdGEgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGFkZHIgKi8KKyNkZWZpbmUgUEFHRVNfNEtfU1BBTk5FRChfYWRkcmVzcywgc2l6ZSkgCQkJCVwKKwkJKCh1MzIpKCgoKHNpemVfdCkoX2FkZHJlc3MpICYgKFBBR0VfU0laRV80SyAtIDEpKSArIAlcCisJCQkoc2l6ZSkgKyAoUEFHRV9TSVpFXzRLIC0gMSkpID4+IFBBR0VfU0hJRlRfNEspKQorCisvKiBCeXRlIG9mZnNldCBpbnRvIHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYWRkcmVzcyAqLworI2RlZmluZSBPRkZTRVRfSU5fUEFHRShhZGRyKQkJCQkJCVwKKwkJKChzaXplX3QpKGFkZHIpICYgKFBBR0VfU0laRV80Sy0xKSkKKworLyogUmV0dXJucyBiaXQgb2Zmc2V0IHdpdGhpbiBhIERXT1JEIG9mIGEgYml0ZmllbGQgKi8KKyNkZWZpbmUgQU1BUF9CSVRfT0ZGU0VUKF9zdHJ1Y3QsIGZpZWxkKSAgCQkJCVwKKwkJKCgoc2l6ZV90KSYoKChfc3RydWN0ICopMCktPmZpZWxkKSklMzIpCisKKy8qIFJldHVybnMgdGhlIGJpdCBtYXNrIG9mIHRoZSBmaWVsZCB0aGF0IGlzIE5PVCBzaGlmdGVkIGludG8gbG9jYXRpb24uICovCitzdGF0aWMgaW5saW5lIHUzMiBhbWFwX21hc2sodTMyIGJpdHNpemUpCit7CisJcmV0dXJuIChiaXRzaXplID09IDMyID8gMHhGRkZGRkZGRiA6ICgxIDw8IGJpdHNpemUpIC0gMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbWFwX3NldCh2b2lkICpwdHIsIHUzMiBkd19vZmZzZXQsIHUzMiBtYXNrLAorCQkJCQl1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJdTMyICpkdyA9ICh1MzIgKikgcHRyICsgZHdfb2Zmc2V0OworCSpkdyAmPSB+KG1hc2sgPDwgb2Zmc2V0KTsKKwkqZHcgfD0gKG1hc2sgJiB2YWx1ZSkgPDwgb2Zmc2V0OworfQorCisjZGVmaW5lIEFNQVBfU0VUX0JJVFMoX3N0cnVjdCwgZmllbGQsIHB0ciwgdmFsKQkJCQlcCisJCWFtYXBfc2V0KHB0ciwJCQkJCQlcCisJCQlvZmZzZXRvZihfc3RydWN0LCBmaWVsZCkvMzIsCQkJXAorCQkJYW1hcF9tYXNrKHNpemVvZigoKF9zdHJ1Y3QgKikwKS0+ZmllbGQpKSwJXAorCQkJQU1BUF9CSVRfT0ZGU0VUKF9zdHJ1Y3QsIGZpZWxkKSwJCVwKKwkJCXZhbCkKKworc3RhdGljIGlubGluZSB1MzIgYW1hcF9nZXQodm9pZCAqcHRyLCB1MzIgZHdfb2Zmc2V0LCB1MzIgbWFzaywgdTMyIG9mZnNldCkKK3sKKwl1MzIgKmR3ID0gcHRyOworCXJldHVybiBtYXNrICYgKCooZHcgKyBkd19vZmZzZXQpID4+IG9mZnNldCk7Cit9CisKKyNkZWZpbmUgQU1BUF9HRVRfQklUUyhfc3RydWN0LCBmaWVsZCwgcHRyKQkJCQlcCisJCWFtYXBfZ2V0KHB0ciwJCQkJCQlcCisJCQlvZmZzZXRvZihfc3RydWN0LCBmaWVsZCkvMzIsCQkJXAorCQkJYW1hcF9tYXNrKHNpemVvZigoKF9zdHJ1Y3QgKikwKS0+ZmllbGQpKSwJXAorCQkJQU1BUF9CSVRfT0ZGU0VUKF9zdHJ1Y3QsIGZpZWxkKSkKKworI2RlZmluZSBiZV9kd3NfY3B1X3RvX2xlKHdyYiwgbGVuKSBzd2FwX2R3cyh3cmIsIGxlbikKKyNkZWZpbmUgYmVfZHdzX2xlX3RvX2NwdSh3cmIsIGxlbikgc3dhcF9kd3Mod3JiLCBsZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9kd3Modm9pZCAqd3JiLCBpbnQgbGVuKQoreworI2lmZGVmIF9fQklHX0VORElBTgorCXUzMiAqZHcgPSB3cmI7CisJV0FSTl9PTihsZW4gJSA0KTsKKwlkbyB7CisJCSpkdyA9IGNwdV90b19sZTMyKCpkdyk7CisJCWR3Kys7CisJCWxlbiAtPSA0OworCX0gd2hpbGUgKGxlbik7CisjZW5kaWYgLyogX19CSUdfRU5ESUFOICovCit9CisKK2V4dGVybiB2b2lkIGJlaXNjc2lfY3Ffbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsIGJvb2wgYXJtLAorCQkJICAgICAgdTE2IG51bV9wb3BwZWQpOworCisjZW5kaWYgLyogQkVJU0NTSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODAwN2I2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYwpAQCAtMCwwICsxLDUyMyBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKi8KKworI2luY2x1ZGUgImJlLmgiCisjaW5jbHVkZSAiYmVfbWdtdC5oIgorI2luY2x1ZGUgImJlX21haW4uaCIKKworc3RhdGljIGlubGluZSBib29sIGJlX21jY19jb21wbF9pc19uZXcoc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpCit7CisJaWYgKGNvbXBsLT5mbGFncyAhPSAwKSB7CisJCWNvbXBsLT5mbGFncyA9IGxlMzJfdG9fY3B1KGNvbXBsLT5mbGFncyk7CisJCVdBUk5fT04oKGNvbXBsLT5mbGFncyAmIENRRV9GTEFHU19WQUxJRF9NQVNLKSA9PSAwKTsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJlX21jY19jb21wbF91c2Uoc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpCit7CisJY29tcGwtPmZsYWdzID0gMDsKK30KKworc3RhdGljIGludCBiZV9tY2NfY29tcGxfcHJvY2VzcyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCXN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQoreworCXUxNiBjb21wbF9zdGF0dXMsIGV4dGRfc3RhdHVzOworCisJYmVfZHdzX2xlX3RvX2NwdShjb21wbCwgNCk7CisKKwljb21wbF9zdGF0dXMgPSAoY29tcGwtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0NPTVBMX1NISUZUKSAmCisJCQkJCUNRRV9TVEFUVVNfQ09NUExfTUFTSzsKKwlpZiAoY29tcGxfc3RhdHVzICE9IE1DQ19TVEFUVVNfU1VDQ0VTUykgeworCQlleHRkX3N0YXR1cyA9IChjb21wbC0+c3RhdHVzID4+IENRRV9TVEFUVVNfRVhURF9TSElGVCkgJgorCQkJCQkJQ1FFX1NUQVRVU19FWFREX01BU0s7CisJCWRldl9lcnIoJmN0cmwtPnBkZXYtPmRldiwKKwkJCSJlcnJvciBpbiBjbWQgY29tcGxldGlvbjogc3RhdHVzKGNvbXBsL2V4dGQpPSVkLyVkXG4iLAorCQkJY29tcGxfc3RhdHVzLCBleHRkX3N0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19saW5rX3N0YXRlX2V2dCh1MzIgdHJhaWxlcikKK3sKKwlyZXR1cm4gKCgodHJhaWxlciA+PiBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfU0hJRlQpICYKKwkJQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX01BU0spID09IEFTWU5DX0VWRU5UX0NPREVfTElOS19TVEFURSk7Cit9CisKK3ZvaWQgYmVpc2NzaV9jcV9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTE2IHFpZCwgYm9vbCBhcm0sCisJCSAgICAgICB1MTYgbnVtX3BvcHBlZCkKK3sKKwl1MzIgdmFsID0gMDsKKwl2YWwgfD0gcWlkICYgREJfQ1FfUklOR19JRF9NQVNLOworCWlmIChhcm0pCisJCXZhbCB8PSAxIDw8IERCX0NRX1JFQVJNX1NISUZUOworCXZhbCB8PSBudW1fcG9wcGVkIDw8IERCX0NRX05VTV9QT1BQRURfU0hJRlQ7CisJaW93cml0ZTMyKHZhbCwgY3RybC0+ZGIgKyBEQl9DUV9PRkZTRVQpOworfQorCitzdGF0aWMgaW50IGJlX21ib3hfZGJfcmVhZHlfd2FpdChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQoreworI2RlZmluZSBsb25nX2RlbGF5IDIwMDAKKwl2b2lkIF9faW9tZW0gKmRiID0gY3RybC0+ZGIgKyBNUFVfTUFJTEJPWF9EQl9PRkZTRVQ7CisJaW50IGNudCA9IDAsIHdhaXQgPSA1OwkvKiBpbiB1c2VjcyAqLworCXUzMiByZWFkeTsKKworCWRvIHsKKwkJcmVhZHkgPSBpb3JlYWQzMihkYikgJiBNUFVfTUFJTEJPWF9EQl9SRFlfTUFTSzsKKwkJaWYgKHJlYWR5KQorCQkJYnJlYWs7CisKKwkJaWYgKGNudCA+IDYwMDAwMDApIHsKKwkJCWRldl9lcnIoJmN0cmwtPnBkZXYtPmRldiwgIm1ib3hfZGIgcG9sbCB0aW1lZCBvdXRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGNudCA+IDUwKSB7CisJCQl3YWl0ID0gbG9uZ19kZWxheTsKKwkJCW1kZWxheShsb25nX2RlbGF5IC8gMTAwMCk7CisJCX0gZWxzZQorCQkJdWRlbGF5KHdhaXQpOworCQljbnQgKz0gd2FpdDsKKwl9IHdoaWxlICh0cnVlKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGJlX21ib3hfbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCit7CisJaW50IHN0YXR1czsKKwl1MzIgdmFsID0gMDsKKwl2b2lkIF9faW9tZW0gKmRiID0gY3RybC0+ZGIgKyBNUFVfTUFJTEJPWF9EQl9PRkZTRVQ7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtID0gJmN0cmwtPm1ib3hfbWVtOworCXN0cnVjdCBiZV9tY2NfbWFpbGJveCAqbWJveCA9IG1ib3hfbWVtLT52YTsKKwlzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCA9ICZtYm94LT5jb21wbDsKKworCXZhbCAmPSB+TVBVX01BSUxCT1hfREJfUkRZX01BU0s7CisJdmFsIHw9IE1QVV9NQUlMQk9YX0RCX0hJX01BU0s7CisJdmFsIHw9ICh1cHBlcl8zMl9iaXRzKG1ib3hfbWVtLT5kbWEpID4+IDIpIDw8IDI7CisJaW93cml0ZTMyKHZhbCwgZGIpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yZWFkeV93YWl0KGN0cmwpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICIgYmVfbWJveF9kYl9yZWFkeV93YWl0IGZhaWxlZCAxXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJdmFsID0gMDsKKwl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOworCXZhbCAmPSB+TVBVX01BSUxCT1hfREJfSElfTUFTSzsKKwl2YWwgfD0gKHUzMikgKG1ib3hfbWVtLT5kbWEgPj4gNCkgPDwgMjsKKwlpb3dyaXRlMzIodmFsLCBkYik7CisKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JlYWR5X3dhaXQoY3RybCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIiBiZV9tYm94X2RiX3JlYWR5X3dhaXQgZmFpbGVkIDJcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwlpZiAoYmVfbWNjX2NvbXBsX2lzX25ldyhjb21wbCkpIHsKKwkJc3RhdHVzID0gYmVfbWNjX2NvbXBsX3Byb2Nlc3MoY3RybCwgJm1ib3gtPmNvbXBsKTsKKwkJYmVfbWNjX2NvbXBsX3VzZShjb21wbCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkFmdGVyIGJlX21jY19jb21wbF9wcm9jZXNzIFxuIik7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2VycigmY3RybC0+cGRldi0+ZGV2LCAiaW52YWxpZCBtYWlsYm94IGNvbXBsZXRpb25cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGJlX3dyYl9oZHJfcHJlcGFyZShzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiLCBpbnQgcGF5bG9hZF9sZW4sCisJCQkJYm9vbCBlbWJlZGRlZCwgdTggc2dlX2NudCkKK3sKKwlpZiAoZW1iZWRkZWQpCisJCXdyYi0+ZW1iZWRkZWQgfD0gTUNDX1dSQl9FTUJFRERFRF9NQVNLOworCWVsc2UKKwkJd3JiLT5lbWJlZGRlZCB8PSAoc2dlX2NudCAmIE1DQ19XUkJfU0dFX0NOVF9NQVNLKSA8PAorCQkJCQkJTUNDX1dSQl9TR0VfQ05UX1NISUZUOworCXdyYi0+cGF5bG9hZF9sZW5ndGggPSBwYXlsb2FkX2xlbjsKKwliZV9kd3NfY3B1X3RvX2xlKHdyYiwgOCk7Cit9CisKK3ZvaWQgYmVfY21kX2hkcl9wcmVwYXJlKHN0cnVjdCBiZV9jbWRfcmVxX2hkciAqcmVxX2hkciwKKwkJCXU4IHN1YnN5c3RlbSwgdTggb3Bjb2RlLCBpbnQgY21kX2xlbikKK3sKKwlyZXFfaGRyLT5vcGNvZGUgPSBvcGNvZGU7CisJcmVxX2hkci0+c3Vic3lzdGVtID0gc3Vic3lzdGVtOworCXJlcV9oZHItPnJlcXVlc3RfbGVuZ3RoID0gY3B1X3RvX2xlMzIoY21kX2xlbiAtIHNpemVvZigqcmVxX2hkcikpOworfQorCitzdGF0aWMgdm9pZCBiZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHN0cnVjdCBwaHlzX2FkZHIgKnBhZ2VzLCB1MzIgbWF4X3BhZ2VzLAorCQkJCQkJCXN0cnVjdCBiZV9kbWFfbWVtICptZW0pCit7CisJaW50IGksIGJ1Zl9wYWdlczsKKwl1NjQgZG1hID0gKHU2NCkgbWVtLT5kbWE7CisKKwlidWZfcGFnZXMgPSBtaW4oUEFHRVNfNEtfU1BBTk5FRChtZW0tPnZhLCBtZW0tPnNpemUpLCBtYXhfcGFnZXMpOworCWZvciAoaSA9IDA7IGkgPCBidWZfcGFnZXM7IGkrKykgeworCQlwYWdlc1tpXS5sbyA9IGNwdV90b19sZTMyKGRtYSAmIDB4RkZGRkZGRkYpOworCQlwYWdlc1tpXS5oaSA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMoZG1hKSk7CisJCWRtYSArPSBQQUdFX1NJWkVfNEs7CisJfQorfQorCitzdGF0aWMgdTMyIGVxX2RlbGF5X3RvX211bHQodTMyIHVzZWNfZGVsYXkpCit7CisjZGVmaW5lIE1BWF9JTlRSX1JBVEUgNjUxMDQyCisJY29uc3QgdTMyIHJvdW5kID0gMTA7CisJdTMyIG11bHRpcGxpZXI7CisKKwlpZiAodXNlY19kZWxheSA9PSAwKQorCQltdWx0aXBsaWVyID0gMDsKKwllbHNlIHsKKwkJdTMyIGludGVycnVwdF9yYXRlID0gMTAwMDAwMCAvIHVzZWNfZGVsYXk7CisJCWlmIChpbnRlcnJ1cHRfcmF0ZSA9PSAwKQorCQkJbXVsdGlwbGllciA9IDEwMjM7CisJCWVsc2UgeworCQkJbXVsdGlwbGllciA9IChNQVhfSU5UUl9SQVRFIC0gaW50ZXJydXB0X3JhdGUpICogcm91bmQ7CisJCQltdWx0aXBsaWVyIC89IGludGVycnVwdF9yYXRlOworCQkJbXVsdGlwbGllciA9IChtdWx0aXBsaWVyICsgcm91bmQgLyAyKSAvIHJvdW5kOworCQkJbXVsdGlwbGllciA9IG1pbihtdWx0aXBsaWVyLCAodTMyKSAxMDIzKTsKKwkJfQorCX0KKwlyZXR1cm4gbXVsdGlwbGllcjsKK30KKworc3RydWN0IGJlX21jY193cmIgKndyYl9mcm9tX21ib3goc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtKQoreworCXJldHVybiAmKChzdHJ1Y3QgYmVfbWNjX21haWxib3ggKikobWJveF9tZW0tPnZhKSktPndyYjsKK30KKworaW50IGJlaXNjc2lfY21kX2VxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsIGludCBlcV9kZWxheSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2VxX2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9jbWRfcmVzcF9lcV9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJmVxLT5kbWFfbWVtOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCU9QQ09ERV9DT01NT05fRVFfQ1JFQVRFLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT5udW1fcGFnZXMgPSBjcHVfdG9fbGUxNihQQUdFU180S19TUEFOTkVEKHFfbWVtLT52YSwgcV9tZW0tPnNpemUpKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfY29udGV4dCwgZnVuYywgcmVxLT5jb250ZXh0LAorCQkJCQkJUENJX0ZVTkMoY3RybC0+cGRldi0+ZGV2Zm4pKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIHZhbGlkLCByZXEtPmNvbnRleHQsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfY29udGV4dCwgc2l6ZSwgcmVxLT5jb250ZXh0LCAwKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIGNvdW50LCByZXEtPmNvbnRleHQsCisJCQkJCV9faWxvZzJfdTMyKGVxLT5sZW4gLyAyNTYpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIGRlbGF5bXVsdCwgcmVxLT5jb250ZXh0LAorCQkJCQllcV9kZWxheV90b19tdWx0KGVxX2RlbGF5KSk7CisJYmVfZHdzX2NwdV90b19sZShyZXEtPmNvbnRleHQsIHNpemVvZihyZXEtPmNvbnRleHQpKTsKKworCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJZXEtPmlkID0gbGUxNl90b19jcHUocmVzcC0+ZXFfaWQpOworCQllcS0+Y3JlYXRlZCA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfZndfaW5pdGlhbGl6ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJaW50IHN0YXR1czsKKwl1OCAqZW5kaWFuX2NoZWNrOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwllbmRpYW5fY2hlY2sgPSAodTggKikgd3JiOworCSplbmRpYW5fY2hlY2srKyA9IDB4RkY7CisJKmVuZGlhbl9jaGVjaysrID0gMHgxMjsKKwkqZW5kaWFuX2NoZWNrKysgPSAweDM0OworCSplbmRpYW5fY2hlY2srKyA9IDB4RkY7CisJKmVuZGlhbl9jaGVjaysrID0gMHhGRjsKKwkqZW5kaWFuX2NoZWNrKysgPSAweDU2OworCSplbmRpYW5fY2hlY2srKyA9IDB4Nzg7CisJKmVuZGlhbl9jaGVjaysrID0gMHhGRjsKKwliZV9kd3NfY3B1X3RvX2xlKHdyYiwgc2l6ZW9mKCp3cmIpKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmIChzdGF0dXMpCisJCVNFX0RFQlVHKERCR19MVkxfMSwgImJlX2NtZF9md19pbml0aWFsaXplIEZhaWxlZCBcbiIpOworCisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlaXNjc2lfY21kX2NxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcSwKKwkJCSAgYm9vbCBzb2xfZXZ0cywgYm9vbCBub19kZWxheSwgaW50IGNvYWxlc2NlX3dtKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfY3FfY3JlYXRlICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX2NtZF9yZXNwX2NxX2NyZWF0ZSAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0gPSAmY3EtPmRtYV9tZW07CisJdm9pZCAqY3R4dCA9ICZyZXEtPmNvbnRleHQ7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQkJT1BDT0RFX0NPTU1PTl9DUV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CisKKwlpZiAoIXFfbWVtLT52YSkKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAidW5pbml0aWFsaXplZCBxX21lbS0+dmFcbiIpOworCisJcmVxLT5udW1fcGFnZXMgPSBjcHVfdG9fbGUxNihQQUdFU180S19TUEFOTkVEKHFfbWVtLT52YSwgcV9tZW0tPnNpemUpKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgY29hbGVzY3dtLCBjdHh0LCBjb2FsZXNjZV93bSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBub2RlbGF5LCBjdHh0LCBub19kZWxheSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBjb3VudCwgY3R4dCwKKwkJICAgICAgX19pbG9nMl91MzIoY3EtPmxlbiAvIDI1NikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgdmFsaWQsIGN0eHQsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgc29sZXZlbnQsIGN0eHQsIHNvbF9ldnRzKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGV2ZW50YWJsZSwgY3R4dCwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBlcWlkLCBjdHh0LCBlcS0+aWQpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgYXJtZWQsIGN0eHQsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgZnVuYywgY3R4dCwKKwkJICAgICAgUENJX0ZVTkMoY3RybC0+cGRldi0+ZGV2Zm4pKTsKKwliZV9kd3NfY3B1X3RvX2xlKGN0eHQsIHNpemVvZihyZXEtPmNvbnRleHQpKTsKKworCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJY3EtPmlkID0gbGUxNl90b19jcHUocmVzcC0+Y3FfaWQpOworCQljcS0+Y3JlYXRlZCA9IHRydWU7CisJfSBlbHNlCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkluIGJlX2NtZF9jcV9jcmVhdGUsIHN0YXR1cz1veCUwOHggXG4iLAorCQkJc3RhdHVzKTsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB1MzIgYmVfZW5jb2RlZF9xX2xlbihpbnQgcV9sZW4pCit7CisJdTMyIGxlbl9lbmNvZGVkID0gZmxzKHFfbGVuKTsJLyogbG9nMihsZW4pICsgMSAqLworCWlmIChsZW5fZW5jb2RlZCA9PSAxNikKKwkJbGVuX2VuY29kZWQgPSAwOworCXJldHVybiBsZW5fZW5jb2RlZDsKK30KK2ludCBiZWlzY3NpX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCisJCQkgIGludCBxdWV1ZV90eXBlKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfcV9kZXN0cm95ICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJdTggc3Vic3lzID0gMCwgb3Bjb2RlID0gMDsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCXN3aXRjaCAocXVldWVfdHlwZSkgeworCWNhc2UgUVRZUEVfRVE6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fQ09NTU9OOworCQlvcGNvZGUgPSBPUENPREVfQ09NTU9OX0VRX0RFU1RST1k7CisJCWJyZWFrOworCWNhc2UgUVRZUEVfQ1E6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fQ09NTU9OOworCQlvcGNvZGUgPSBPUENPREVfQ09NTU9OX0NRX0RFU1RST1k7CisJCWJyZWFrOworCWNhc2UgUVRZUEVfV1JCUToKKwkJc3Vic3lzID0gQ01EX1NVQlNZU1RFTV9JU0NTSTsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9JU0NTSV9XUkJRX0RFU1RST1k7CisJCWJyZWFrOworCWNhc2UgUVRZUEVfRFBEVVE6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fSVNDU0k7CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fSVNDU0lfREVGUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX1NHTDoKKwkJc3Vic3lzID0gQ01EX1NVQlNZU1RFTV9JU0NTSTsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9JU0NTSV9DRkdfUkVNT1ZFX1NHTF9QQUdFUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCUJVRygpOworCQlyZXR1cm4gLTE7CisJfQorCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIHN1YnN5cywgb3Bjb2RlLCBzaXplb2YoKnJlcSkpOworCWlmIChxdWV1ZV90eXBlICE9IFFUWVBFX1NHTCkKKwkJcmVxLT5pZCA9IGNwdV90b19sZTE2KHEtPmlkKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9nZXRfbWFjX2FkZHIoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTggKm1hY19hZGRyKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2NtZF9yZXFfZ2V0X21hY19hZGRyICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfTlRXS19HRVRfTklDX0NPTkZJRywKKwkJCSAgIHNpemVvZigqcmVxKSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X21hY19hZGRyICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCisJCW1lbWNweShtYWNfYWRkciwgcmVzcC0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwl9CisKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EsCisJCQkJICAgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpkcSwgaW50IGxlbmd0aCwKKwkJCQkgICAgaW50IGVudHJ5X3NpemUpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfZGVmcV9jcmVhdGVfcmVxICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJmRxLT5kbWFfbWVtOworCXZvaWQgKmN0eHQgPSAmcmVxLT5jb250ZXh0OworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQkJICAgT1BDT0RFX0NPTU1PTl9JU0NTSV9ERUZRX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+bnVtX3BhZ2VzID0gUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQsIHJ4X3BkaWQsIGN0eHQsIDApOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCwgcnhfcGRpZF92YWxpZCwgY3R4dCwKKwkJICAgICAgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCBwY2lfZnVuY19pZCwgY3R4dCwKKwkJICAgICAgUENJX0ZVTkMoY3RybC0+cGRldi0+ZGV2Zm4pKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQsIHJpbmdfc2l6ZSwgY3R4dCwKKwkJICAgICAgYmVfZW5jb2RlZF9xX2xlbihsZW5ndGggLyBzaXplb2Yoc3RydWN0IHBoeXNfYWRkcikpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQsIGRlZmF1bHRfYnVmZmVyX3NpemUsCisJCSAgICAgIGN0eHQsIGVudHJ5X3NpemUpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCwgY3FfaWRfcmVjdiwgY3R4dCwKKwkJICAgICAgY3EtPmlkKTsKKworCWJlX2R3c19jcHVfdG9fbGUoY3R4dCwgc2l6ZW9mKHJlcS0+Y29udGV4dCkpOworCisJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCBBUlJBWV9TSVpFKHJlcS0+cGFnZXMpLCBxX21lbSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYmVfZGVmcV9jcmVhdGVfcmVzcCAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKworCQlkcS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5pZCk7CisJCWRxLT5jcmVhdGVkID0gdHJ1ZTsKKwl9CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX3dyYnFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSwKKwkJICAgICAgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICp3cmJxKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX3dyYnFfY3JlYXRlX3JlcSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV93cmJxX2NyZWF0ZV9yZXNwICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQlPUENPREVfQ09NTU9OX0lTQ1NJX1dSQlFfQ1JFQVRFLCBzaXplb2YoKnJlcSkpOworCXJlcS0+bnVtX3BhZ2VzID0gUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKTsKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKQorCQl3cmJxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNpZCk7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9pc2NzaV9wb3N0X3NnbF9wYWdlcyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSwKKwkJCQl1MzIgcGFnZV9vZmZzZXQsIHUzMiBudW1fcGFnZXMpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfcG9zdF9zZ2xfcGFnZXNfcmVxICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgY3Vycl9wYWdlczsKKwl1MzIgaW50ZXJuYWxfcGFnZV9vZmZzZXQgPSAwOworCXUzMiB0ZW1wX251bV9wYWdlcyA9IG51bV9wYWdlczsKKworCWlmIChudW1fcGFnZXMgPT0gMHhmZikKKwkJbnVtX3BhZ2VzID0gMTsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlkbyB7CisJCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCQkJICAgT1BDT0RFX0NPTU1PTl9JU0NTSV9DRkdfUE9TVF9TR0xfUEFHRVMsCisJCQkJICAgc2l6ZW9mKCpyZXEpKTsKKwkJY3Vycl9wYWdlcyA9IEJFX05VTUJFUl9PRl9GSUVMRChzdHJ1Y3QgYmVfcG9zdF9zZ2xfcGFnZXNfcmVxLAorCQkJCQkJcGFnZXMpOworCQlyZXEtPm51bV9wYWdlcyA9IG1pbihudW1fcGFnZXMsIGN1cnJfcGFnZXMpOworCQlyZXEtPnBhZ2Vfb2Zmc2V0ID0gcGFnZV9vZmZzZXQ7CisJCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgcmVxLT5udW1fcGFnZXMsIHFfbWVtKTsKKwkJcV9tZW0tPmRtYSA9IHFfbWVtLT5kbWEgKyAocmVxLT5udW1fcGFnZXMgKiBQQUdFX1NJWkUpOworCQlpbnRlcm5hbF9wYWdlX29mZnNldCArPSByZXEtPm51bV9wYWdlczsKKwkJcGFnZV9vZmZzZXQgKz0gcmVxLT5udW1fcGFnZXM7CisJCW51bV9wYWdlcyAtPSByZXEtPm51bV9wYWdlczsKKworCQlpZiAodGVtcF9udW1fcGFnZXMgPT0gMHhmZikKKwkJCXJlcS0+bnVtX3BhZ2VzID0gdGVtcF9udW1fcGFnZXM7CisKKwkJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCQkgIkZXIENNRCB0byBtYXAgaXNjc2kgZnJhZ3MgZmFpbGVkLlxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisJfSB3aGlsZSAobnVtX3BhZ2VzID4gMCk7CitlcnJvcjoKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWJlaXNjc2lfY21kX3FfZGVzdHJveShjdHJsLCBOVUxMLCBRVFlQRV9TR0wpOworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjBkNjg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaApAQCAtMCwwICsxLDg3NyBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKi8KKworI2lmbmRlZiBCRUlTQ1NJX0NNRFNfSAorI2RlZmluZSBCRUlTQ1NJX0NNRFNfSAorCisvKioKKyAqIFRoZSBkcml2ZXIgc2VuZHMgY29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudHMgY29tbWFuZCByZXF1ZXN0cyB0byB0aGUKKyAqIGZpcm13YXJlIGluIHRoZSBCRS4gVGhlc2UgcmVxdWVzdHMgYXJlIGNvbW11bmljYXRlZCB0byB0aGUgcHJvY2Vzc29yCisgKiB1c2luZyBXb3JrIFJlcXVlc3QgQmxvY2tzIChXUkJzKSBzdWJtaXR0ZWQgdG8gdGhlIE1DQy1XUkIgcmluZyBvciB2aWEgb25lCisgKiBXUkIgaW5zaWRlIGEgTUFJTEJPWC4KKyAqIFRoZSBjb21tYW5kcyBhcmUgc2VydmljZWQgYnkgdGhlIEFSTSBwcm9jZXNzb3IgaW4gdGhlIEJsYWRlRW5naW5lJ3MgTVBVLgorICovCitzdHJ1Y3QgYmVfc2dlIHsKKwl1MzIgcGFfbG87CisJdTMyIHBhX2hpOworCXUzMiBsZW47Cit9OworCisjZGVmaW5lIE1DQ19XUkJfU0dFX0NOVF9TSElGVCAzCS8qIGJpdHMgMyAtIDcgb2YgZHdvcmQgMCAqLworI2RlZmluZSBNQ0NfV1JCX1NHRV9DTlRfTUFTSyAweDFGCS8qIGJpdHMgMyAtIDcgb2YgZHdvcmQgMCAqLworc3RydWN0IGJlX21jY193cmIgeworCXUzMiBlbWJlZGRlZDsJCS8qIGR3b3JkIDAgKi8KKwl1MzIgcGF5bG9hZF9sZW5ndGg7CS8qIGR3b3JkIDEgKi8KKwl1MzIgdGFnMDsJCS8qIGR3b3JkIDIgKi8KKwl1MzIgdGFnMTsJCS8qIGR3b3JkIDMgKi8KKwl1MzIgcnN2ZDsJCS8qIGR3b3JkIDQgKi8KKwl1bmlvbiB7CisJCXU4IGVtYmVkZGVkX3BheWxvYWRbMjM2XTsJLyogdXNlZCBieSBlbWJlZGRlZCBjbWRzICovCisJCXN0cnVjdCBiZV9zZ2Ugc2dsWzE5XTsJLyogdXNlZCBieSBub24tZW1iZWRkZWQgY21kcyAqLworCX0gcGF5bG9hZDsKK307CisKKyNkZWZpbmUgQ1FFX0ZMQUdTX1ZBTElEX01BU0sgKDEgPDwgMzEpCisjZGVmaW5lIENRRV9GTEFHU19BU1lOQ19NQVNLICgxIDw8IDMwKQorCisvKiBDb21wbGV0aW9uIFN0YXR1cyAqLworI2RlZmluZSBNQ0NfU1RBVFVTX1NVQ0NFU1MgMHgwCisKKyNkZWZpbmUgQ1FFX1NUQVRVU19DT01QTF9NQVNLIDB4RkZGRgorI2RlZmluZSBDUUVfU1RBVFVTX0NPTVBMX1NISUZUIDAJLyogYml0cyAwIC0gMTUgKi8KKyNkZWZpbmUgQ1FFX1NUQVRVU19FWFREX01BU0sgMHhGRkZGCisjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9TSElGVCAwCQkvKiBiaXRzIDAgLSAxNSAqLworCitzdHJ1Y3QgYmVfbWNjX2NvbXBsIHsKKwl1MzIgc3RhdHVzOwkJLyogZHdvcmQgMCAqLworCXUzMiB0YWcwOwkJLyogZHdvcmQgMSAqLworCXUzMiB0YWcxOwkJLyogZHdvcmQgMiAqLworCXUzMiBmbGFnczsJCS8qIGR3b3JkIDMgKi8KK307CisKKy8qKioqKioqKiogTWFpbGJveCBkb29yIGJlbGwgKioqKioqKioqKioqKi8KKy8qKgorICogVXNlZCBmb3IgZHJpdmVyIGNvbW11bmljYXRpb24gd2l0aCB0aGUgRlcuCisgKiBUaGUgc29mdHdhcmUgbXVzdCB3cml0ZSB0aGlzIHJlZ2lzdGVyIHR3aWNlIHRvIHBvc3QgYW55IGNvbW1hbmQuIEZpcnN0LAorICogaXQgd3JpdGVzIHRoZSByZWdpc3RlciB3aXRoIGhpPTEgYW5kIHRoZSB1cHBlciBiaXRzIG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgKiBmb3IgdGhlIE1BSUxCT1ggc3RydWN0dXJlLiBTb2Z0d2FyZSBtdXN0IHBvbGwgdGhlIHJlYWR5IGJpdCB1bnRpbCB0aGlzCisgKiBpcyBhY2tub3dsZWRnZWQuIFRoZW4sIHNvdHdhcmUgd3JpdGVzIHRoZSByZWdpc3RlciB3aXRoIGhpPTAgd2l0aCB0aGUgbG93ZXIKKyAqIGJpdHMgaW4gdGhlIGFkZHJlc3MuIEl0IG11c3QgcG9sbCB0aGUgcmVhZHkgYml0IHVudGlsIHRoZSBjb21tYW5kIGlzCisgKiBjb21wbGV0ZS4gVXBvbiBjb21wbGV0aW9uLCB0aGUgTUFJTEJPWCB3aWxsIGNvbnRhaW4gYSB2YWxpZCBjb21wbGV0aW9uCisgKiBxdWV1ZSBlbnRyeS4KKyAqLworI2RlZmluZSBNUFVfTUFJTEJPWF9EQl9PRkZTRVQJMHgxNjAKKyNkZWZpbmUgTVBVX01BSUxCT1hfREJfUkRZX01BU0sJMHgxCS8qIGJpdCAwICovCisjZGVmaW5lIE1QVV9NQUlMQk9YX0RCX0hJX01BU0sJMHgyCS8qIGJpdCAxICovCisKKy8qKioqKioqKioqIE1QVSBzZW1waG9yZSAqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIE1QVV9FUF9TRU1BUEhPUkVfT0ZGU0VUIDB4YWMKKyNkZWZpbmUgRVBfU0VNQVBIT1JFX1BPU1RfU1RBR0VfTUFTSyAweDAwMDBGRkZGCisjZGVmaW5lIEVQX1NFTUFQSE9SRV9QT1NUX0VSUl9NQVNLIDB4MQorI2RlZmluZSBFUF9TRU1BUEhPUkVfUE9TVF9FUlJfU0hJRlQgMzEKKworLyoqKioqKioqKiogTUNDIGRvb3IgYmVsbCAqKioqKioqKioqKiovCisjZGVmaW5lIERCX01DQ1FfT0ZGU0VUIDB4MTQwCisjZGVmaW5lIERCX01DQ1FfUklOR19JRF9NQVNLIDB4N0ZGCQkvKiBiaXRzIDAgLSAxMCAqLworLyogTnVtYmVyIG9mIGVudHJpZXMgcG9zdGVkICovCisjZGVmaW5lIERCX01DQ1FfTlVNX1BPU1RFRF9TSElGVCAxNgkJLyogYml0cyAxNiAtIDI5ICovCisKKy8qIE1QVSBzZW1waG9yZSBQT1NUIHN0YWdlIHZhbHVlcyAqLworI2RlZmluZSBQT1NUX1NUQUdFX0FSTUZXX1JEWQkJMHhjMDAwCS8qIEZXIGlzIGRvbmUgd2l0aCBQT1NUICovCisKKy8qKgorICogV2hlbiB0aGUgYXN5bmMgYml0IG9mIG1jY19jb21wbCBpcyBzZXQsIHRoZSBsYXN0IDQgYnl0ZXMgb2YKKyAqIG1jY19jb21wbCBpcyBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgorICovCisjZGVmaW5lIEFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9TSElGVAk4CS8qIGJpdHMgOCAtIDE1ICovCisjZGVmaW5lIEFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9NQVNLCTB4RkYKKyNkZWZpbmUgQVNZTkNfRVZFTlRfQ09ERV9MSU5LX1NUQVRFCTB4MQorc3RydWN0IGJlX2FzeW5jX2V2ZW50X3RyYWlsZXIgeworCXUzMiBjb2RlOworfTsKKworZW51bSB7CisJQVNZTkNfRVZFTlRfTElOS19ET1dOID0gMHgwLAorCUFTWU5DX0VWRU5UX0xJTktfVVAgPSAweDEKK307CisKKy8qKgorICogV2hlbiB0aGUgZXZlbnQgY29kZSBvZiBhbiBhc3luYyB0cmFpbGVyIGlzIGxpbmstc3RhdGUsIHRoZSBtY2NfY29tcGwKKyAqIG11c3QgYmUgaW50ZXJwcmV0ZWQgYXMgZm9sbG93cworICovCitzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbGlua19zdGF0ZSB7CisJdTggcGh5c2ljYWxfcG9ydDsKKwl1OCBwb3J0X2xpbmtfc3RhdHVzOworCXU4IHBvcnRfZHVwbGV4OworCXU4IHBvcnRfc3BlZWQ7CisJdTggcG9ydF9mYXVsdDsKKwl1OCByc3ZkMFs3XTsKKwlzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfdHJhaWxlciB0cmFpbGVyOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX21jY19tYWlsYm94IHsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiB3cmI7CisJc3RydWN0IGJlX21jY19jb21wbCBjb21wbDsKK307CisKKy8qIFR5cGUgb2Ygc3Vic3lzdGVtcyBzdXBwb3J0ZWQgYnkgRlcgKi8KKyNkZWZpbmUgQ01EX1NVQlNZU1RFTV9DT01NT04gICAgMHgxCisjZGVmaW5lIENNRF9TVUJTWVNURU1fSVNDU0kgICAgIDB4MgorI2RlZmluZSBDTURfU1VCU1lTVEVNX0VUSCAgICAgICAweDMKKyNkZWZpbmUgQ01EX1NVQlNZU1RFTV9JU0NTSV9JTkkgMHg2CisjZGVmaW5lIENNRF9DT01NT05fVENQX1VQTE9BRCAgIDB4MQorCisvKioKKyAqIExpc3Qgb2YgY29tbW9uIG9wY29kZXMgc3Vic3lzdGVtICBDTURfU1VCU1lTVEVNX0NPTU1PTgorICogVGhlc2Ugb3Bjb2RlcyBhcmUgdW5pcXVlIGZvciBlYWNoIHN1YnN5c3RlbSBkZWZpbmVkIGFib3ZlCisgKi8KKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9DUkVBVEUJCQkJMTIKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9FUV9DUkVBVEUJCQkJMTMKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NQ0NfQ1JFQVRFICAgICAgICAJCTIxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX0NOVExfQVRUUklCVVRFUyAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX0ZXX1ZFUlNJT04JCQkzNQorI2RlZmluZSBPUENPREVfQ09NTU9OX01PRElGWV9FUV9ERUxBWQkJCTQxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fRklSTVdBUkVfQ09ORklHCQkJNDIKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NQ0NfREVTVFJPWSAgICAgICAgCQk1MworI2RlZmluZSBPUENPREVfQ09NTU9OX0NRX0RFU1RST1kgICAgICAgIAkJNTQKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9FUV9ERVNUUk9ZICAgICAgICAJCTU1CisjZGVmaW5lIE9QQ09ERV9DT01NT05fUVVFUllfRklSTVdBUkVfQ09ORklHCQk1OAorI2RlZmluZSBPUENPREVfQ09NTU9OX0ZVTkNUSU9OX1JFU0VUCQkJNjEKKworLyoqCisgKiBMSVNUIG9mIG9wY29kZXMgdGhhdCBhcmUgY29tbW9uIGJldHdlZW4gSW5pdGlhdG9yIGFuZCBUYXJnZXQKKyAqIHVzZWQgYnkgQ01EX1NVQlNZU1RFTV9JU0NTSQorICogVGhlc2Ugb3Bjb2RlcyBhcmUgdW5pcXVlIGZvciBlYWNoIHN1YnN5c3RlbSBkZWZpbmVkIGFib3ZlCisgKi8KKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9DRkdfUE9TVF9TR0xfUEFHRVMJCTIKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9DRkdfUkVNT1ZFX1NHTF9QQUdFUyAgICAgICAgMworI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX05UV0tfR0VUX05JQ19DT05GSUcJCTcKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9TRVRfRlJBR05VTV9CSVRTX0ZPUl9TR0xfQ1JBIDYxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfREVGUV9DUkVBVEUgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfREVGUV9ERVNUUk9ZIAkJNjUKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9XUkJRX0NSRUFURQkJCTY2CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfV1JCUV9ERVNUUk9ZIAkJNjcKKworc3RydWN0IGJlX2NtZF9yZXFfaGRyIHsKKwl1OCBvcGNvZGU7CQkvKiBkd29yZCAwICovCisJdTggc3Vic3lzdGVtOwkJLyogZHdvcmQgMCAqLworCXU4IHBvcnRfbnVtYmVyOwkJLyogZHdvcmQgMCAqLworCXU4IGRvbWFpbjsJCS8qIGR3b3JkIDAgKi8KKwl1MzIgdGltZW91dDsJCS8qIGR3b3JkIDEgKi8KKwl1MzIgcmVxdWVzdF9sZW5ndGg7CS8qIGR3b3JkIDIgKi8KKwl1MzIgcnN2ZDsJCS8qIGR3b3JkIDMgKi8KK307CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9oZHIgeworCXUzMiBpbmZvOwkJLyogZHdvcmQgMCAqLworCXUzMiBzdGF0dXM7CQkvKiBkd29yZCAxICovCisJdTMyIHJlc3BvbnNlX2xlbmd0aDsJLyogZHdvcmQgMiAqLworCXUzMiBhY3R1YWxfcmVzcF9sZW47CS8qIGR3b3JkIDMgKi8KK307CisKK3N0cnVjdCBwaHlzX2FkZHIgeworCXUzMiBsbzsKKwl1MzIgaGk7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJFIENvbW1hbmQgZGVmaW5pdGlvbnMgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlIC0gdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0IHsKKwl1OCBjaWR4WzEzXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCByc3ZkMFszXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBlcGlkeFsxM107CQkvKiBkd29yZCAwICovCisJdTggdmFsaWQ7CQkvKiBkd29yZCAwICovCisJdTggcnN2ZDE7CQkvKiBkd29yZCAwICovCisJdTggc2l6ZTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwaWR4WzEzXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCByc3ZkMlszXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBwZFsxMF07CQkvKiBkd29yZCAxICovCisJdTggY291bnRbM107CQkvKiBkd29yZCAxICovCisJdTggc29sZXZlbnQ7CQkvKiBkd29yZCAxICovCisJdTggc3RhbGxlZDsJCS8qIGR3b3JkIDEgKi8KKwl1OCBhcm1lZDsJCS8qIGR3b3JkIDEgKi8KKwl1OCByc3ZkM1s0XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCBmdW5jWzhdOwkJLyogZHdvcmQgMiAqLworCXU4IHJzdmQ0OwkJLyogZHdvcmQgMiAqLworCXU4IGRlbGF5bXVsdFsxMF07CS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkNVsyXTsJCS8qIGR3b3JkIDIgKi8KKwl1OCBwaGFzZVsyXTsJCS8qIGR3b3JkIDIgKi8KKwl1OCBub2RlbGF5OwkJLyogZHdvcmQgMiAqLworCXU4IHJzdmQ2WzRdOwkJLyogZHdvcmQgMiAqLworCXU4IHJzdmQ3WzMyXTsJCS8qIGR3b3JkIDMgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX2VxX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsJLyogZHdbNF0gKi8KKwl1MTYgbnVtX3BhZ2VzOwkJLyogc3dvcmQgKi8KKwl1MTYgcnN2ZDA7CQkvKiBzd29yZCAqLworCXU4IGNvbnRleHRbc2l6ZW9mKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQpIC8gOF07CS8qIGR3WzRdICovCisJc3RydWN0IHBoeXNfYWRkciBwYWdlc1s4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9lcV9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgcmVzcF9oZHI7CisJdTE2IGVxX2lkOwkJLyogc3dvcmQgKi8KKwl1MTYgcnN2ZDA7CQkvKiBzd29yZCAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IG1hY19hZGRyIHsKKwl1MTYgc2l6ZV9vZl9zdHJ1Y3Q7CisJdTggYWRkcltFVEhfQUxFTl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3JlcV9tYWNfcXVlcnkgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTggdHlwZTsKKwl1OCBwZXJtYW5lbnQ7CisJdTE2IGlmX2lkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX21hY19xdWVyeSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJc3RydWN0IG1hY19hZGRyIG1hYzsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKiBDcmVhdGUgQ1EgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZSAtIHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfY3FfY29udGV4dCB7CisJdTggY2lkeFsxMV07CQkvKiBkd29yZCAwICovCisJdTggcnN2ZDA7CQkvKiBkd29yZCAwICovCisJdTggY29hbGVzY3dtWzJdOwkvKiBkd29yZCAwICovCisJdTggbm9kZWxheTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBlcGlkeFsxMV07CQkvKiBkd29yZCAwICovCisJdTggcnN2ZDE7CQkvKiBkd29yZCAwICovCisJdTggY291bnRbMl07CQkvKiBkd29yZCAwICovCisJdTggdmFsaWQ7CQkvKiBkd29yZCAwICovCisJdTggc29sZXZlbnQ7CQkvKiBkd29yZCAwICovCisJdTggZXZlbnRhYmxlOwkJLyogZHdvcmQgMCAqLworCXU4IHBpZHhbMTFdOwkJLyogZHdvcmQgMSAqLworCXU4IHJzdmQyOwkJLyogZHdvcmQgMSAqLworCXU4IHBkWzEwXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBlcWlkWzhdOwkJLyogZHdvcmQgMSAqLworCXU4IHN0YWxsZWQ7CQkvKiBkd29yZCAxICovCisJdTggYXJtZWQ7CQkvKiBkd29yZCAxICovCisJdTggcnN2ZDNbNF07CQkvKiBkd29yZCAyICovCisJdTggZnVuY1s4XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkNFsyMF07CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDVbMzJdOwkJLyogZHdvcmQgMyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXFfY3FfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBudW1fcGFnZXM7CisJdTE2IHJzdmQwOworCXU4IGNvbnRleHRbc2l6ZW9mKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQpIC8gOF07CisJc3RydWN0IHBoeXNfYWRkciBwYWdlc1s0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9jcV9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUxNiBjcV9pZDsKKwl1MTYgcnN2ZDA7Cit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogQ3JlYXRlIE1DQ1EgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZSAtIHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfbWNjX2NvbnRleHQgeworCXU4IGNvbl9pbmRleFsxNF07CisJdTggcnN2ZDBbMl07CisJdTggcmluZ19zaXplWzRdOworCXU4IGZldGNoX3dyYjsKKwl1OCBmZXRjaF9yMnQ7CisJdTggY3FfaWRbMTBdOworCXU4IHByb2RfaW5kZXhbMTRdOworCXU4IGZpZFs4XTsKKwl1OCBwZGlkWzldOworCXU4IHZhbGlkOworCXU4IHJzdmQxWzMyXTsKKwl1OCByc3ZkMlszMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3JlcV9tY2NfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBudW1fcGFnZXM7CisJdTE2IHJzdmQwOworCXU4IGNvbnRleHRbc2l6ZW9mKHN0cnVjdCBhbWFwX21jY19jb250ZXh0KSAvIDhdOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfbWNjX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTE2IGlkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKioqKioqKioqKiBRIERlc3Ryb3kgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFR5cGUgb2YgUXVldWUgdG8gYmUgZGVzdHJveWVkICovCitlbnVtIHsKKwlRVFlQRV9FUSA9IDEsCisJUVRZUEVfQ1EsCisJUVRZUEVfTUNDUSwKKwlRVFlQRV9XUkJRLAorCVFUWVBFX0RQRFVRLAorCVFUWVBFX1NHTAorfTsKKworc3RydWN0IGJlX2NtZF9yZXFfcV9kZXN0cm95IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBpZDsKKwl1MTYgYnlwYXNzX2ZsdXNoOwkvKiB2YWxpZCBvbmx5IGZvciByeCBxIGRlc3Ryb3kgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYWNhZGRyIHsKKwl1OCBieXRlW0VUSF9BTEVOXTsKK307CisKK3N0cnVjdCBiZV9jbWRfcmVxX21jYXN0X21hY19jb25maWcgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9tYWM7CisJdTggcHJvbWlzY3VvdXM7CisJdTggaW50ZXJmYWNlX2lkOworCXN0cnVjdCBtYWNhZGRyIG1hY1szMl07Cit9IF9fcGFja2VkOworCitzdGF0aWMgaW5saW5lIHZvaWQgKmVtYmVkZGVkX3BheWxvYWQoc3RydWN0IGJlX21jY193cmIgKndyYikKK3sKKwlyZXR1cm4gd3JiLT5wYXlsb2FkLmVtYmVkZGVkX3BheWxvYWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJlX3NnZSAqbm9uZW1iZWRkZWRfc2dsKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIpCit7CisJcmV0dXJuICZ3cmItPnBheWxvYWQuc2dsWzBdOworfQorCisvKioqKioqKioqKioqKioqKioqKiogTW9kaWZ5IEVRIERlbGF5ICoqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgYmVfY21kX3JlcV9tb2RpZnlfZXFfZGVsYXkgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIG51bV9lcTsKKwlzdHJ1Y3QgeworCQl1MzIgZXFfaWQ7CisJCXUzMiBwaGFzZTsKKwkJdTMyIGRlbGF5X211bHRpcGxpZXI7CisJfSBkZWxheVs4XTsKK30gX19wYWNrZWQ7CisKKy8qKioqKioqKioqKioqKioqKioqKiBHZXQgTUFDIEFERFIgKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBFVEhfQUxFTgk2CisKKworc3RydWN0IGJlX2NtZF9yZXFfZ2V0X21hY19hZGRyIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBuaWNfcG9ydF9jb3VudDsKKwl1MzIgc3BlZWQ7CisJdTMyIG1heF9zcGVlZDsKKwl1MzIgbGlua19zdGF0ZTsKKwl1MzIgbWF4X2ZyYW1lX3NpemU7CisJdTE2IHNpemVfb2Zfc3RydWN0dXJlOworCXU4IG1hY19hZGRyZXNzW0VUSF9BTEVOXTsKKwl1MzIgcnN2ZFsyM107Cit9OworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X21hY19hZGRyIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MzIgbmljX3BvcnRfY291bnQ7CisJdTMyIHNwZWVkOworCXUzMiBtYXhfc3BlZWQ7CisJdTMyIGxpbmtfc3RhdGU7CisJdTMyIG1heF9mcmFtZV9zaXplOworCXUxNiBzaXplX29mX3N0cnVjdHVyZTsKKwl1OCBtYWNfYWRkcmVzc1s2XTsKKwl1MzIgcnN2ZFsyM107Cit9OworCitpbnQgYmVpc2NzaV9jbWRfZXFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcSwgaW50IGVxX2RlbGF5KTsKKworaW50IGJlaXNjc2lfY21kX2NxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcSwKKwkJCSAgYm9vbCBzb2xfZXZ0cywgYm9vbCBub19kZWxheSwKKwkJCSAgaW50IG51bV9jcWVfZG1hX2NvYWxlc2NlKTsKKworaW50IGJlaXNjc2lfY21kX3FfZGVzdHJveShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwKKwkJCSAgaW50IHR5cGUpOworaW50IGJlX3BvbGxfbWNjKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOwordW5zaWduZWQgY2hhciBtZ210X2NoZWNrX3N1cHBvcnRlZF9mdyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKK2ludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4ICptYWNfYWRkcik7CisKKy8qSVNDU0kgRnVuY3R1aW9ucyAqLworaW50IGJlX2NtZF9md19pbml0aWFsaXplKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOworCitzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiX2Zyb21fbWJveChzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW0pOworCitpbnQgYmVfbWJveF9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CisKK2ludCBiZV9jbWRfY3JlYXRlX2RlZmF1bHRfcGR1X3F1ZXVlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJICAgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSwKKwkJCQkgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmRxLCBpbnQgbGVuZ3RoLAorCQkJCSAgICBpbnQgZW50cnlfc2l6ZSk7CisKK2ludCBiZV9jbWRfaXNjc2lfcG9zdF9zZ2xfcGFnZXMoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0sIHUzMiBwYWdlX29mZnNldCwKKwkJCQl1MzIgbnVtX3BhZ2VzKTsKKworaW50IGJlX2NtZF93cmJxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0sCisJCSAgICAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqd3JicSk7CisKK3N0cnVjdCBiZV9kZWZhdWx0X3BkdV9jb250ZXh0IHsKKwl1MzIgZHdbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0IHsKKwl1OCBkYnVmX2NpbmRleFsxM107CS8qIGR3b3JkIDAgKi8KKwl1OCByc3ZkMFszXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCByaW5nX3NpemVbNF07CS8qIGR3b3JkIDAgKi8KKwl1OCByaW5nX3N0YXRlWzRdOwkvKiBkd29yZCAwICovCisJdTggcnN2ZDFbOF07CQkvKiBkd29yZCAwICovCisJdTggZGJ1Zl9waW5kZXhbMTNdOwkvKiBkd29yZCAxICovCisJdTggcnN2ZDI7CQkvKiBkd29yZCAxICovCisJdTggcGNpX2Z1bmNfaWRbOF07CS8qIGR3b3JkIDEgKi8KKwl1OCByeF9wZGlkWzldOwkJLyogZHdvcmQgMSAqLworCXU4IHJ4X3BkaWRfdmFsaWQ7CS8qIGR3b3JkIDEgKi8KKwl1OCBkZWZhdWx0X2J1ZmZlcl9zaXplWzE2XTsJLyogZHdvcmQgMiAqLworCXU4IGNxX2lkX3JlY3ZbMTBdOwkvKiBkd29yZCAyICovCisJdTggcnhfcGRpZF9ub3RfdmFsaWQ7CS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkM1s1XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkNFszMl07CQkvKiBkd29yZCAzICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfZGVmcV9jcmVhdGVfcmVxIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBudW1fcGFnZXM7CisJdTggdWxwX251bTsKKwl1OCByc3ZkMDsKKwlzdHJ1Y3QgYmVfZGVmYXVsdF9wZHVfY29udGV4dCBjb250ZXh0OworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfZGVmcV9jcmVhdGVfcmVzcCB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgaWQ7CisJdTE2IHJzdmQwOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX3Bvc3Rfc2dsX3BhZ2VzX3JlcSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXUxNiBwYWdlX29mZnNldDsKKwl1MzIgcnN2ZDA7CisJc3RydWN0IHBoeXNfYWRkciBwYWdlc1syNl07CisJdTMyIHJzdmQxOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX3dyYnFfY3JlYXRlX3JlcSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXU4IHVscF9udW07CisJdTggcnN2ZDA7CisJc3RydWN0IHBoeXNfYWRkciBwYWdlc1s4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV93cmJxX2NyZWF0ZV9yZXNwIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIHJlc3BfaGRyOworCXUxNiBjaWQ7CisJdTE2IHJzdmQwOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBTT0xfQ0lEX01BU0sJCTB4MDAwMEZGQzAKKyNkZWZpbmUgU09MX0NPREVfTUFTSwkJMHgwMDAwMDAzRgorI2RlZmluZSBTT0xfV1JCX0lOREVYX01BU0sJMHgwMEZGMDAwMAorI2RlZmluZSBTT0xfQ01EX1dORF9NQVNLCTB4RkYwMDAwMDAKKyNkZWZpbmUgU09MX1JFU19DTlRfTUFTSwkweDdGRkZGRkZGCisjZGVmaW5lIFNPTF9FWFBfQ01EX1NOX01BU0sJMHhGRkZGRkZGRgorI2RlZmluZSBTT0xfSFdfU1RTX01BU0sJCTB4MDAwMDAwRkYKKyNkZWZpbmUgU09MX1NUU19NQVNLCQkweDAwMDBGRjAwCisjZGVmaW5lIFNPTF9SRVNQX01BU0sJCTB4MDBGRjAwMDAKKyNkZWZpbmUgU09MX0ZMQUdTX01BU0sJCTB4N0YwMDAwMDAKKyNkZWZpbmUgU09MX1NfTUFTSwkJMHg4MDAwMDAwMAorCitzdHJ1Y3Qgc29sX2NxZSB7CisJdTMyIGR3WzRdOworfTsKKworc3RydWN0IGFtYXBfc29sX2NxZSB7CisJdTggaHdfc3RzWzhdOwkJLyogZHdvcmQgMCAqLworCXU4IGlfc3RzWzhdOwkJLyogZHdvcmQgMCAqLworCXU4IGlfcmVzcFs4XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBpX2ZsYWdzWzddOwkJLyogZHdvcmQgMCAqLworCXU4IHM7CQkJLyogZHdvcmQgMCAqLworCXU4IGlfZXhwX2NtZF9zblszMl07CS8qIGR3b3JkIDEgKi8KKwl1OCBjb2RlWzZdOwkJLyogZHdvcmQgMiAqLworCXU4IGNpZFsxMF07CQkvKiBkd29yZCAyICovCisJdTggd3JiX2luZGV4WzhdOwkvKiBkd29yZCAyICovCisJdTggaV9jbWRfd25kWzhdOwkvKiBkd29yZCAyICovCisJdTggaV9yZXNfY250WzMxXTsJLyogZHdvcmQgMyAqLworCXU4IHZhbGlkOwkJLyogZHdvcmQgMyAqLworfSBfX3BhY2tlZDsKKworCisvKioKKyAqIFBvc3QgV1JCIFF1ZXVlIERvb3JiZWxsIFJlZ2lzdGVyIHVzZWQgYnkgdGhlIGhvc3QgU3RvcmFnZQorICogc3RhY2sgdG8gbm90aWZ5IHRoZQorICogY29udHJvbGxlciBvZiBhIHBvc3RlZCBXb3JrIFJlcXVlc3QgQmxvY2sKKyAqLworI2RlZmluZSBEQl9XUkJfUE9TVF9DSURfTUFTSwkJMHgzRkYJLyogYml0cyAwIC0gOSAqLworI2RlZmluZSBEQl9ERUZfUERVX1dSQl9JTkRFWF9NQVNLCTB4RkYJLyogYml0cyAwIC0gOSAqLworCisjZGVmaW5lIERCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUCTE2CisjZGVmaW5lIERCX0RFRl9QRFVfTlVNX1BPU1RFRF9TSElGVAkyNAorCitzdHJ1Y3QgZnJhZ251bV9iaXRzX2Zvcl9zZ2xfY3JhX2luIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBudW1fYml0czsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpc2NzaV9jbGVhbnVwX3JlcSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgY2h1dGU7CisJdTggaGRyX3JpbmdfaWQ7CisJdTggZGF0YV9yaW5nX2lkOworCit9IF9fcGFja2VkOworCitzdHJ1Y3QgZXFfZGVsYXkgeworCXUzMiBlcV9pZDsKKwl1MzIgcGhhc2U7CisJdTMyIGRlbGF5X211bHRpcGxpZXI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfZXFfZGVsYXlfcGFyYW1zX2luIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBudW1fZXE7CisJc3RydWN0IGVxX2RlbGF5IGRlbGF5WzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGlwX2FkZHJlc3NfZm9ybWF0IHsKKwl1MTYgc2l6ZV9vZl9zdHJ1Y3R1cmU7CisJdTggcmVzZXJ2ZWQ7CisJdTggaXBfdHlwZTsKKwl1OCBpcF9hZGRyZXNzWzE2XTsKKwl1MzIgcnN2ZDA7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfaW4geworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJc3RydWN0IGlwX2FkZHJlc3NfZm9ybWF0IGlwX2FkZHJlc3M7CisJdTE2IHRjcF9wb3J0OworCXUxNiBjaWQ7CisJdTE2IGNxX2lkOworCXUxNiBkZWZxX2lkOworCXN0cnVjdCBwaHlzX2FkZHIgZGF0YW91dF90ZW1wbGF0ZV9wYTsKKwl1MTYgaGRyX3JpbmdfaWQ7CisJdTE2IGRhdGFfcmluZ19pZDsKKwl1OCBkb19vZmZsb2FkOworCXU4IHJzdmQwWzNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX291dCB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTMyIGNvbm5lY3Rpb25faGFuZGxlOworCXUxNiBjaWQ7CisJdTE2IHJzdmQwOworCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0IHsKKwlzdHJ1Y3QgTUNDX1dSQiAqd3JiOworCWludCAqdXNlcnNfZmluYWxfc3RhdHVzOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBEQl9ERUZfUERVX1JJTkdfSURfTUFTSwkJMHgzRkYJLyogYml0cyAwIC0gOSAqLworI2RlZmluZSBEQl9ERUZfUERVX0NRUFJPQ19NQVNLCQkweDNGRkYJLyogYml0cyAwIC0gOSAqLworI2RlZmluZSBEQl9ERUZfUERVX1JFQVJNX1NISUZUCQkxNAorI2RlZmluZSBEQl9ERUZfUERVX0VWRU5UX1NISUZUCQkxNQorI2RlZmluZSBEQl9ERUZfUERVX0NRUFJPQ19TSElGVAkJMTYKKworc3RydWN0IGRtc2dfY3FlIHsKKwl1MzIgZHdbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgdGNwX3VwbG9hZF9wYXJhbXNfaW4geworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IGlkOworCXUxNiB1cGxvYWRfdHlwZTsKKwl1MzIgcmVzZXRfc2VxOworfSBfX3BhY2tlZDsKKworc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX291dCB7CisJdTMyIGR3WzMyXTsKK30gX19wYWNrZWQ7CisKK3VuaW9uIHRjcF91cGxvYWRfcGFyYW1zIHsKKwlzdHJ1Y3QgdGNwX3VwbG9hZF9wYXJhbXNfaW4gcmVxdWVzdDsKKwlzdHJ1Y3QgdGNwX3VwbG9hZF9wYXJhbXNfb3V0IHJlc3BvbnNlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX3VscF9md19jZmcgeworCXUzMiB1bHBfbW9kZTsKKwl1MzIgZXR4X2Jhc2U7CisJdTMyIGV0eF9jb3VudDsKKwl1MzIgc3FfYmFzZTsKKwl1MzIgc3FfY291bnQ7CisJdTMyIHJxX2Jhc2U7CisJdTMyIHJxX2NvdW50OworCXUzMiBkcV9iYXNlOworCXUzMiBkcV9jb3VudDsKKwl1MzIgbHJvX2Jhc2U7CisJdTMyIGxyb19jb3VudDsKKwl1MzIgaWNkX2Jhc2U7CisJdTMyIGljZF9jb3VudDsKK307CisKK3N0cnVjdCBiZV9md19jZmcgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIGJlX2NvbmZpZ19udW1iZXI7CisJdTMyIGFzaWNfcmV2aXNpb247CisJdTMyIHBoeXNfcG9ydDsKKwl1MzIgZnVuY3Rpb25fbW9kZTsKKwlzdHJ1Y3QgYmVfdWxwX2Z3X2NmZyB1bHBbMl07CisJdTMyIGZ1bmN0aW9uX2NhcHM7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIENNRF9JU0NTSV9DT01NQU5EX0lOVkFMSURBVEUgIDEKKyNkZWZpbmUgSVNDU0lfT1BDT0RFX1NDU0lfREFUQV9PVVQgICAgICA1CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfVENQX0NPTk5FQ1RfQU5EX09GRkxPQUQgNzAKKyNkZWZpbmUgT1BDT0RFX0lTQ1NJX0lOSV9EUklWRVJfT0ZGTE9BRF9TRVNTSU9OIDQxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTU9ESUZZX0VRX0RFTEFZCTQxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfQ0xFQU5VUAk1OQorI2RlZmluZQlPUENPREVfQ09NTU9OX1RDUF9VUExPQUQJNTYKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9FUlJPUl9SRUNPVkVSWV9JTlZBTElEQVRFX0NPTU1BTkRTIDEKKy8qIC0tLSBDTURfSVNDU0lfSU5WQUxJREFURV9DT05ORUNUSU9OX1RZUEUgLS0tICovCisjZGVmaW5lIENNRF9JU0NTSV9DT05ORUNUSU9OX0lOVkFMSURBVEUgMQorI2RlZmluZSBDTURfSVNDU0lfQ09OTkVDVElPTl9JU1NVRV9UQ1BfUlNUIDIKKyNkZWZpbmUgT1BDT0RFX0lTQ1NJX0lOSV9EUklWRVJfSU5WQUxJREFURV9DT05ORUNUSU9OIDQyCisKKyNkZWZpbmUgSU5JX1dSX0NNRAkJCTEJLyogSW5pdGlhdG9yIHdyaXRlIGNvbW1hbmQgKi8KKyNkZWZpbmUgSU5JX1RNRl9DTUQJCQkyCS8qIEluaXRpYXRvciBUTUYgY29tbWFuZCAqLworI2RlZmluZSBJTklfTk9QT1VUX0NNRAkJCTMJLyogSW5pdGlhdG9yOyBTZW5kIGEgTk9QLU9VVCAqLworI2RlZmluZSBJTklfUkRfQ01ECQkJNQkvKiBJbml0aWF0b3IgcmVxdWVzdGluZyB0byBzZW5kCisJCQkJCQkgKiBhIHJlYWQgY29tbWFuZAorCQkJCQkJICovCisjZGVmaW5lIFRHVF9DVFhfVVBEVF9DTUQJCTcJLyogVGFyZ2V0IGNvbnRleHQgdXBkYXRlICovCisjZGVmaW5lIFRHVF9TVFNfQ01ECQkJOAkvKiBUYXJnZXQgUjJUIGFuZCBvdGhlciBCSFMKKwkJCQkJCSAqIHdoZXJlIG9ubHkgdGhlIHN0YXR1cyBudW1iZXIKKwkJCQkJCSAqIG5lZWQgdG8gYmUgdXBkYXRlZAorCQkJCQkJICovCisjZGVmaW5lIFRHVF9EQVRBSU5fQ01ECQkJOQkvKiBUYXJnZXQgRGF0YS1JbnMgaW4gcmVzcG9uc2UKKwkJCQkJCSAqIHRvIHJlYWQgY29tbWFuZAorCQkJCQkJICovCisjZGVmaW5lIFRHVF9TT1NfUERVCQkJMTAJLyogVGFyZ2V0OnN0YW5kYWxvbmUgc3RhdHVzCisJCQkJCQkgKiByZXNwb25zZQorCQkJCQkJICovCisjZGVmaW5lIFRHVF9ETV9DTUQJCQkxMQkvKiBJbmRpY2F0ZXMgdGhhdCB0aGUgYmhzCisJCQkJCQkgKiAgcHJlcGFyZWRieQorCQkJCQkJICogZHJpdmVyIHNob3VsZCBub3QgYmUgdG91Y2hlZAorCQkJCQkJICovCisvKiAtLS0gQ01EX0NIVVRFX1RZUEUgLS0tICovCisjZGVmaW5lIENNRF9DT05ORUNUSU9OX0NIVVRFXzAJCTEKKyNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fQ0hVVEVfMQkJMgorI2RlZmluZSBDTURfQ09OTkVDVElPTl9DSFVURV8yCQkzCisKKyNkZWZpbmUgRVFfTUFKT1JfQ09ERV9DT01QTEVUSU9OCTAKKworI2RlZmluZSBDTURfSVNDU0lfU0VTU0lPTl9ERUxfQ0ZHX0ZST01fRkxBU0ggMAorI2RlZmluZSBDTURfSVNDU0lfU0VTU0lPTl9TQVZFX0NGR19PTl9GTEFTSCAxCisKKy8qIC0tLSBDT05ORUNUSU9OX1VQTE9BRF9QQVJBTVMgLS0tICovCisvKiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGRlZmluZSB0aGUgdHlwZSBvZiB1cGxvYWQgZGVzaXJlZC4gICovCisjZGVmaW5lIENPTk5FQ1RJT05fVVBMT0FEX0dSQUNFRlVMICAgICAgMQkvKiBHcmFjZWZ1bCB1cGxvYWQgICovCisjZGVmaW5lIENPTk5FQ1RJT05fVVBMT0FEX0FCT1JUX1JFU0VUICAgMgkvKiBBYm9ydGl2ZSB1cGxvYWQgd2l0aAorCQkJCQkJICogcmVzZXQKKwkJCQkJCSAqLworI2RlZmluZSBDT05ORUNUSU9OX1VQTE9BRF9BQk9SVAkJMwkvKiBBYm9ydGl2ZSB1cGxvYWQgd2l0aG91dAorCQkJCQkJICogcmVzZXQKKwkJCQkJCSAqLworI2RlZmluZSBDT05ORUNUSU9OX1VQTE9BRF9BQk9SVF9XSVRIX1NFUSA0CS8qIEFib3J0aXZlIHVwbG9hZCB3aXRoIHJlc2V0LAorCQkJCQkJICogc2VxdWVuY2UgbnVtYmVyIGJ5IGRyaXZlciAgKi8KKworLyogUmV0dXJucyBieXRlIHNpemUgb2YgZ2l2ZW4gZmllbGQgd2l0aCBhIHN0cnVjdHVyZS4gKi8KKworLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBmaWVsZCBhcnJheS4gKi8KKyNkZWZpbmUgQkVfTlVNQkVSX09GX0ZJRUxEKF90eXBlXywgX2ZpZWxkXykJXAorCShGSUVMRF9TSVpFT0YoX3R5cGVfLCBfZmllbGRfKS9zaXplb2YoKCgoX3R5cGVfICopMCktPl9maWVsZF9bMF0pKSlcCisKKy8qKgorICogRGlmZmVyZW50IHR5cGVzIG9mIGlTQ1NJIGNvbXBsZXRpb25zIHRvIGhvc3QgZHJpdmVyIGZvciBib3RoIGluaXRpYXRvcgorICogYW5kIHRhZ2V0IG1vZGUKKyAqIG9mIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBTT0xfQ01EX0NPTVBMRVRFCQkxCS8qIFNvbGljaXRlZCBjb21tYW5kIGNvbXBsZXRlZAorCQkJCQkJICogbm9ybWFsbHkKKwkJCQkJCSAqLworI2RlZmluZSBTT0xfQ01EX0tJTExFRF9EQVRBX0RJR0VTVF9FUlIgIDIJLyogU29saWNpdGVkIGNvbW1hbmQgZ290CisJCQkJCQkgKiBpbnZhbGlkYXRlZCBpbnRlcm5hbGx5IGR1ZQorCQkJCQkJICogdG8gRGF0YSBEaWdlc3QgZXJyb3IKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX1BEVV9TSVpFX0VYQ0VFRFNfRFNMIDMJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkKKwkJCQkJCSAqIGR1ZSB0byBhIHJlY2lldmVkIFBEVQorCQkJCQkJICogc2l6ZSA+IERTTAorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfQlVSU1RfTEVOX01JU01BVENIICAgNAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdGkgcmVjZWl2ZWQKKwkJCQkJCSAqIFBEVSBzZXF1ZW5jZSBzaXplID4KKwkJCQkJCSAqIEZCTC9NQkwuCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9BSFNfUkNWRAkJNQkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNpZXZlZAorCQkJCQkJICogUERVIEhkciB0aGF0IGhhcworCQkJCQkJICogQUhTICovCisjZGVmaW5lIENYTl9LSUxMRURfSERSX0RJR0VTVF9FUlIJNgkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gSGRyIERpZ2VzdAorCQkJCQkJICogZXJyb3IKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX1VOS05PV05fSERSCQk3CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiAgaW50ZXJuYWxseQorCQkJCQkJICogZHVlIHRvIGEgYmFkIG9wY29kZSBpbiB0aGUKKwkJCQkJCSAqIHBkdSBoZHIKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX1NUQUxFX0lUVF9UVFRfUkNWRAk4CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhIHJlY2lldmVkCisJCQkJCQkgKiBJVFQvVFRUIHRoYXQgZG9lcyBub3QgYmVsb25nCisJCQkJCQkgKiB0byB0aGlzIENvbm5lY3Rpb24KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0lOVkFMSURfSVRUX1RUVF9SQ1ZEIDkJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2lldmVkCisJCQkJCQkgKiBJVFQvVFRUIHZhbHVlID4gTWF4CisJCQkJCQkgKiBTdXBwb3J0ZWQgSVRUcy9UVFRzCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9SU1RfUkNWRAkJMTAJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGFuCisJCQkJCQkgKiBpbmNvbWluZyBUQ1AgUlNUCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9USU1FRF9PVVQJCTExCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byB0aW1lb3V0IG9uCisJCQkJCQkgKiB0Y3Agc2VnbWVudCAxMiByZXRyYW5zbWl0CisJCQkJCQkgKiBhdHRlbXB0cyBmYWlsZWQKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX1JTVF9TRU5UCQkxMgkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gVENQIFJTVAorCQkJCQkJICogc2VudCBieSB0aGUgVHggc2lkZQorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfRklOX1JDVkQJCTEzCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhbgorCQkJCQkJICogaW5jb21pbmcgVENQIEZJTi4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0JBRF9VTlNPTF9QRFVfUkNWRAkxNAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYmFkCisJCQkJCQkgKiB1bnNvbGljaXRlZCBQRFUgVW5zb2xpY2l0ZWQKKwkJCQkJCSAqIFBEVXMgYXJlIFBEVXMgd2l0aAorCQkJCQkJICogSVRUPTB4ZmZmZmZmZmYKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0JBRF9XUkJfSU5ERVhfRVJST1IJMTUJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGJhZCBXUkIKKwkJCQkJCSAqIGluZGV4LgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfT1ZFUl9SVU5fUkVTSURVQUwJMTYJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2l2ZWQKKwkJCQkJCSAqIGNvbW1hbmQgaGFzIHJlc2lkdWFsCisJCQkJCQkgKiBvdmVyIHJ1biBieXRlcy4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX1VOREVSX1JVTl9SRVNJRFVBTAkxNwkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gcmVjaXZlZAorCQkJCQkJICogY29tbWFuZCBoYXMgcmVzaWR1YWwgdW5kZXIKKwkJCQkJCSAqIHJ1biBieXRlcy4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfS0lMTEVEX0lOVkFMSURfU1RBVFNOX1JDVkQJMTgJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjaWV2ZWQKKwkJCQkJCSAqIFBEVSBoYXMgYW4gaW52YWxpZCBTdGF0dXNTTgorCQkJCQkJICovCisjZGVmaW5lIENNRF9LSUxMRURfSU5WQUxJRF9SMlRfUkNWRAkxOQkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNpZXZlZAorCQkJCQkJICogYW4gUjJUIHdpdGggc29tZSBpbnZhbGlkCisJCQkJCQkgKiBmaWVsZHMgaW4gaXQKKwkJCQkJCSAqLworI2RlZmluZSBDTURfQ1hOX0tJTExFRF9MVU5fSU5WQUxJRAkyMAkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gcmVjZWl2ZWQKKwkJCQkJCSAqIFBEVSBoYXMgYW4gaW52YWxpZCBMVU4uCisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0NYTl9LSUxMRURfSUNEX0lOVkFMSUQJMjEJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHRoZQorCQkJCQkJICogY29ycmVzcG9uZGluZyBJQ0Qgbm90IGluIGEKKwkJCQkJCSAqIHZhbGlkIHN0YXRlCisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0NYTl9LSUxMRURfSVRUX0lOVkFMSUQJMjIJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQgZHVlCisJCQkJCQkgKiAgdG8gcmVjZWl2ZWQgUERVIGhhcyBhbgorCQkJCQkJICogIGludmFsaWQgSVRULgorCQkJCQkJICovCisjZGVmaW5lIENNRF9DWE5fS0lMTEVEX1NFUV9PVVRPRk9SREVSCTIzCS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkIGR1ZQorCQkJCQkJICogdG8gcmVjZWl2ZWQgc2VxdWVuY2UgYnVmZmVyCisJCQkJCQkgKiBvZmZzZXQgaXMgb3V0IG9mIG9yZGVyLgorCQkJCQkJICovCisjZGVmaW5lIENNRF9DWE5fS0lMTEVEX0lOVkFMSURfREFUQVNOX1JDVkQgMjQJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEKKwkJCQkJCSAqIHJlY2lldmVkIFBEVSBoYXMgYW4gaW52YWxpZAorCQkJCQkJICogRGF0YVNOCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0lOVkFMSURBVEVfTk9USUZZCQkyNQkvKiBDb25uZWN0aW9uIGludmFsaWRhdGlvbgorCQkJCQkJICogY29tcGxldGlvbiBub3RpZnkuCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0lOVkFMSURBVEVfSU5ERVhfTk9USUZZCTI2CS8qIENvbm5lY3Rpb24gaW52YWxpZGF0aW9uCisJCQkJCQkgKiBjb21wbGV0aW9uCisJCQkJCQkgKiB3aXRoIGRhdGEgUERVIGluZGV4LgorCQkJCQkJICovCisjZGVmaW5lIENNRF9JTlZBTElEQVRFRF9OT1RJRlkJCTI3CS8qIENvbW1hbmQgaW52YWxpZGF0aW9uCisJCQkJCQkgKiBjb21wbGV0aW9ubm90aWZpZnkuCisJCQkJCQkgKi8KKyNkZWZpbmUgVU5TT0xfSERSX05PVElGWQkJMjgJLyogVW5zb2xpY2l0ZWQgaGVhZGVyIG5vdGlmeS4qLworI2RlZmluZSBVTlNPTF9EQVRBX05PVElGWQkJMjkJLyogVW5zb2xpY2l0ZWQgZGF0YSBub3RpZnkuKi8KKyNkZWZpbmUgVU5TT0xfREFUQV9ESUdFU1RfRVJST1JfTk9USUZZIAkzMAkvKiBVbnNvbGljaXRlZCBkYXRhIGRpZ2VzdAorCQkJCQkJICogZXJyb3Igbm90aWZ5LgorCQkJCQkJICovCisjZGVmaW5lIERSSVZFUk1TR19OT1RJRlkJCTMxCS8qIFRDUCBhY2tub3dsZWRnZSBiYXNlZAorCQkJCQkJICogbm90aWZpY2F0aW9uLgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfQ01ORF9EQVRBX05PVF9PTl9TQU1FX0NPTk4gMzIgLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAgKiBpbnRlcm5hbGx5IGR1ZSB0byBjb21tYW5kCisJCQkJCQkgICogYW5kIGRhdGEgYXJlIG5vdCBvbiBzYW1lCisJCQkJCQkgICogY29ubmVjdGlvbi4KKwkJCQkJCSAgKi8KKyNkZWZpbmUgU09MX0NNRF9LSUxMRURfRElGX0VSUgkJMzMJLyogU29saWNpdGVkIGNvbW1hbmQgZ290CisJCQkJCQkgKiAgaW52YWxpZGF0ZWQgaW50ZXJuYWxseSBkdWUKKwkJCQkJCSAqICB0byBESUYgZXJyb3IKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX1NZTl9SQ1ZECQkzNAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gaW5jb21pbmcKKwkJCQkJCSAqIFRDUCBTWU4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0lNTV9EQVRBX1JDVkQJMzUJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGFuCisJCQkJCQkgKiBpbmNvbWluZyBVbnNvbGljaXRlZCBQRFUKKwkJCQkJCSAqIHRoYXQgaGFzIGltbWVkaWF0ZSBkYXRhIG9uCisJCQkJCQkgKiB0aGUgY3huCisJCQkJCQkgKi8KKwordm9pZCBiZV93cmJfaGRyX3ByZXBhcmUoc3RydWN0IGJlX21jY193cmIgKndyYiwgaW50IHBheWxvYWRfbGVuLAorCQkJYm9vbCBlbWJlZGRlZCwgdTggc2dlX2NudCk7CisKK3ZvaWQgYmVfY21kX2hkcl9wcmVwYXJlKHN0cnVjdCBiZV9jbWRfcmVxX2hkciAqcmVxX2hkciwKKwkJCXU4IHN1YnN5c3RlbSwgdTggb3Bjb2RlLCBpbnQgY21kX2xlbik7CisKKyNlbmRpZiAvKiAhQkVJU0NTSV9DTURTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkMjU0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jCkBAIC0wLDAgKzEsNjM4IEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20pCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICoKKyAqLworCisjaW5jbHVkZSA8c2NzaS9saWJpc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKworI2luY2x1ZGUgImJlX2lzY3NpLmgiCisKK2V4dGVybiBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0OworCisvKioKKyAqIGJlaXNjc2lfc2Vzc2lvbl9jcmVhdGUgLSBjcmVhdGVzIGEgbmV3IGlzY3NpIHNlc3Npb24KKyAqIEBjbWRzX21heDogbWF4IGNvbW1hbmRzIHN1cHBvcnRlZAorICogQHFkZXB0aDogbWF4IHF1ZXVlIGRlcHRoIHN1cHBvcnRlZAorICogQGluaXRpYWxfY21kc246IGluaXRpYWwgaXNjc2kgQ01EU04KKyAqLworc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpiZWlzY3NpX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsCisJCQkJCQkgdTE2IGNtZHNfbWF4LAorCQkJCQkJIHUxNiBxZGVwdGgsCisJCQkJCQkgdTMyIGluaXRpYWxfY21kc24pCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbjsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3M7CisJc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzOworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2s7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX3Nlc3Npb25fY3JlYXRlXG4iKTsKKworCWlmICghZXApIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZTogaW52YWxpZCBlcCBcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCXBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOworCXNob3N0ID0gcGhiYS0+c2hvc3Q7CisJaWYgKGNtZHNfbWF4ID4gYmVpc2NzaV9lcC0+cGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHNob3N0LCAiQ2Fubm90IGhhbmRsZSAlZCBjbWRzLiIKKwkJCSAgICAgIk1heCBjbWRzIHBlciBzZXNzaW9uIHN1cHBvcnRlZCBpcyAlZC4gVXNpbmcgJWQuICIKKwkJCSAgICAgIlxuIiwgY21kc19tYXgsCisJCQkgICAgICBiZWlzY3NpX2VwLT5waGJhLT5wYXJhbXMud3Jic19wZXJfY3huLAorCQkJICAgICAgYmVpc2NzaV9lcC0+cGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bik7CisJCWNtZHNfbWF4ID0gYmVpc2NzaV9lcC0+cGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bjsKKwl9CisKKwkgY2xzX3Nlc3Npb24gPSBpc2NzaV9zZXNzaW9uX3NldHVwKCZiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCwKKwkJCQkJICAgc2hvc3QsIGNtZHNfbWF4LAorCQkJCQkgICBzaXplb2YoKmJlaXNjc2lfc2VzcyksCisJCQkJCSAgIHNpemVvZigqaW9fdGFzayksCisJCQkJCSAgIGluaXRpYWxfY21kc24sIElTQ1NJX01BWF9UQVJHRVQpOworCWlmICghY2xzX3Nlc3Npb24pCisJCXJldHVybiBOVUxMOworCXNlc3MgPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKKwliZWlzY3NpX3Nlc3MgPSBzZXNzLT5kZF9kYXRhOworCWJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wgPSAgcGNpX3Bvb2xfY3JlYXRlKCJiZWlzY3NpX2Joc19wb29sIiwKKwkJCQkJCSAgIHBoYmEtPnBjaWRldiwKKwkJCQkJCSAgIHNpemVvZihzdHJ1Y3QgYmVfY21kX2JocyksCisJCQkJCQkgICA2NCwgMCk7CisJaWYgKCFiZWlzY3NpX3Nlc3MtPmJoc19wb29sKQorCQlnb3RvIGRlc3Ryb3lfc2VzczsKKworCXJldHVybiBjbHNfc2Vzc2lvbjsKK2Rlc3Ryb3lfc2VzczoKKwlpc2NzaV9zZXNzaW9uX3RlYXJkb3duKGNsc19zZXNzaW9uKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBiZWlzY3NpX3Nlc3Npb25fZGVzdHJveSAtIGRlc3Ryb3lzIGlzY3NpIHNlc3Npb24KKyAqIEBjbHNfc2Vzc2lvbjoJcG9pbnRlciB0byBpc2NzaSBjbHMgc2Vzc2lvbgorICoKKyAqIERlc3Ryb3lzIGlTQ1NJIHNlc3Npb24gaW5zdGFuY2UgYW5kIHJlbGVhc2VzCisgKiByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBpdC4KKyAqLwordm9pZCBiZWlzY3NpX3Nlc3Npb25fZGVzdHJveShzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uKQoreworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzID0gc2Vzcy0+ZGRfZGF0YTsKKworCXBjaV9wb29sX2Rlc3Ryb3koYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCk7CisJaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7Cit9CisKKy8qKgorICogYmVpc2NzaV9jb25uX2NyZWF0ZSAtIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBpc2NzaSBjb25uZWN0aW9uCisgKiBAY2xzX3Nlc3Npb246IHB0ciB0byBpc2NzaV9jbHNfc2Vzc2lvbgorICogQGNpZDogaXNjc2kgY2lkCisgKi8KK3N0cnVjdCBpc2NzaV9jbHNfY29ubiAqCitiZWlzY3NpX2Nvbm5fY3JlYXRlKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sIHUzMiBjaWQpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm47CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzOworCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzczsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9jcmVhdGUgLGNpZCIKKwkJICJmcm9tIGlzY3NpIGxheWVyPSVkXG4iLCBjaWQpOworCXNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChjbHNfc2Vzc2lvbik7CisJcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisKKwljbHNfY29ubiA9IGlzY3NpX2Nvbm5fc2V0dXAoY2xzX3Nlc3Npb24sIHNpemVvZigqYmVpc2NzaV9jb25uKSwgY2lkKTsKKwlpZiAoIWNsc19jb25uKQorCQlyZXR1cm4gTlVMTDsKKworCWNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwliZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCWJlaXNjc2lfY29ubi0+ZXAgPSBOVUxMOworCWJlaXNjc2lfY29ubi0+cGhiYSA9IHBoYmE7CisJYmVpc2NzaV9jb25uLT5jb25uID0gY29ubjsKKwlzZXNzID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CisJYmVpc2NzaV9zZXNzID0gc2Vzcy0+ZGRfZGF0YTsKKwliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfc2VzcyA9IGJlaXNjc2lfc2VzczsKKwlyZXR1cm4gY2xzX2Nvbm47Cit9CisKKy8qKgorICogYmVpc2NzaV9iaW5kY29ubl9jaWQgLSBCaW5kIHRoZSBiZWlzY3NpX2Nvbm4gd2l0aCBwaGJhIGNvbm5lY3Rpb24gdGFibGUKKyAqIEBiZWlzY3NpX2Nvbm46IFRoZSBwb2ludGVyIHRvICBiZWlzY3NpX2Nvbm4gc3RydWN0dXJlCisgKiBAcGhiYTogVGhlIHBoYmEgaW5zdGFuY2UKKyAqIEBjaWQ6IFRoZSBjaWQgdG8gZnJlZQorICovCitzdGF0aWMgaW50IGJlaXNjc2lfYmluZGNvbm5fY2lkKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkJdW5zaWduZWQgaW50IGNpZCkKK3sKKwlpZiAocGhiYS0+Y29ubl90YWJsZVtjaWRdKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiQ29ubmVjdGlvbiB0YWJsZSBhbHJlYWR5IG9jY3VwaWVkLiBEZXRlY3RlZCBjbGFzaFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgInBoYmEtPmNvbm5fdGFibGVbJWRdPSVwKGJlaXNjc2lfY29ubikgXG4iLAorCQkJIGNpZCwgYmVpc2NzaV9jb25uKTsKKwkJcGhiYS0+Y29ubl90YWJsZVtjaWRdID0gYmVpc2NzaV9jb25uOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBiZWlzY3NpX2Nvbm5fYmluZCAtIEJpbmRzIGlzY3NpIHNlc3Npb24vY29ubmVjdGlvbiB3aXRoIFRDUCBjb25uZWN0aW9uCisgKiBAY2xzX3Nlc3Npb246IHBvaW50ZXIgdG8gaXNjc2kgY2xzIHNlc3Npb24KKyAqIEBjbHNfY29ubjogcG9pbnRlciB0byBpc2NzaSBjbHMgY29ubgorICogQHRyYW5zcG9ydF9mZDogRVAgaGFuZGxlKDY0IGJpdCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGJpbmRzIHRoZSBUQ1AgQ29ubiB3aXRoIGlTQ1NJIENvbm5lY3Rpb24gYW5kIFNlc3Npb24uCisgKi8KK2ludCBiZWlzY3NpX2Nvbm5fYmluZChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uLAorCQkgICAgICBzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkgICAgICB1NjQgdHJhbnNwb3J0X2ZkLCBpbnQgaXNfbGVhZGluZykKK3sKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPQorCQkoc3RydWN0IFNjc2lfSG9zdCAqKWlzY3NpX3Nlc3Npb25fdG9fc2hvc3QoY2xzX3Nlc3Npb24pOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IChzdHJ1Y3QgYmVpc2NzaV9oYmEgKilpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fYmluZFxuIik7CisJZXAgPSBpc2NzaV9sb29rdXBfZW5kcG9pbnQodHJhbnNwb3J0X2ZkKTsKKwlpZiAoIWVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKworCWlmIChpc2NzaV9jb25uX2JpbmQoY2xzX3Nlc3Npb24sIGNsc19jb25uLCBpc19sZWFkaW5nKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYmVpc2NzaV9lcC0+cGhiYSAhPSBwaGJhKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiYmVpc2NzaV9lcC0+aGJhPSVwIG5vdCBlcXVhbCB0byBwaGJhPSVwIFxuIiwKKwkJCSBiZWlzY3NpX2VwLT5waGJhLCBwaGJhKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkID0gYmVpc2NzaV9lcC0+ZXBfY2lkOworCWJlaXNjc2lfY29ubi0+ZXAgPSBiZWlzY3NpX2VwOworCWJlaXNjc2lfZXAtPmNvbm4gPSBiZWlzY3NpX2Nvbm47CisJU0VfREVCVUcoREJHX0xWTF84LCAiYmVpc2NzaV9jb25uPSVwIGNvbm49JXAgZXBfY2lkPSVkIFxuIiwKKwkJIGJlaXNjc2lfY29ubiwgY29ubiwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwlyZXR1cm4gYmVpc2NzaV9iaW5kY29ubl9jaWQocGhiYSwgYmVpc2NzaV9jb25uLCBiZWlzY3NpX2VwLT5lcF9jaWQpOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9nZXRfcGFyYW0gLSBnZXQgdGhlIGlzY3NpIHBhcmFtZXRlcgorICogQGNsc19jb25uOiBwb2ludGVyIHRvIGlzY3NpIGNscyBjb25uCisgKiBAcGFyYW06IHBhcmFtZXRlciB0eXBlIGlkZW50aWZpZXIKKyAqIEBidWY6IGJ1ZmZlciBwb2ludGVyCisgKgorICogcmV0dXJucyBpc2NzaSBwYXJhbWV0ZXIKKyAqLworaW50IGJlaXNjc2lfY29ubl9nZXRfcGFyYW0oc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJCSAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJaW50IGxlbiA9IDA7CisKKwliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKKwlpZiAoIWJlaXNjc2lfZXApIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJJbiBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtICwgbm8gYmVpc2NzaV9lcFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzd2l0Y2ggKHBhcmFtKSB7CisJY2FzZSBJU0NTSV9QQVJBTV9DT05OX1BPUlQ6CisJCWxlbiA9IHNwcmludGYoYnVmLCAiJWh1XG4iLCBiZWlzY3NpX2VwLT5kc3RfdGNwcG9ydCk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fQ09OTl9BRERSRVNTOgorCQlpZiAoYmVpc2NzaV9lcC0+aXBfdHlwZSA9PSBCRTJfSVBWNCkKKwkJCWxlbiA9IHNwcmludGYoYnVmLCAiJXBJNFxuIiwgJmJlaXNjc2lfZXAtPmRzdF9hZGRyKTsKKwkJZWxzZQorCQkJbGVuID0gc3ByaW50ZihidWYsICIlcEk2XG4iLCAmYmVpc2NzaV9lcC0+ZHN0Nl9hZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGlzY3NpX2Nvbm5fZ2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworaW50IGJlaXNjc2lfc2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCSAgICAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKwlpbnQgcmV0OworCisJcmV0ID0gaXNjc2lfc2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmLCBidWZsZW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJLyoKKwkgKiBJZiB1c2Vyc3BhY2UgdHJpZWQgdG8gc2V0IHRoZSB2YWx1ZSB0byBoaWdoZXIgdGhhbiB3ZSBjYW4KKwkgKiBzdXBwb3J0IG92ZXJyaWRlIGhlcmUuCisJICovCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgSVNDU0lfUEFSQU1fRklSU1RfQlVSU1Q6CisJCWlmIChzZXNzaW9uLT5maXJzdF9idXJzdCA+IDgxOTIpCisJCQlzZXNzaW9uLT5maXJzdF9idXJzdCA9IDgxOTI7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fTUFYX1JFQ1ZfRExFTkdUSDoKKwkJaWYgKGNvbm4tPm1heF9yZWN2X2RsZW5ndGggPiA2NTUzNikKKwkJCWNvbm4tPm1heF9yZWN2X2RsZW5ndGggPSA2NTUzNjsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9NQVhfQlVSU1Q6CisJCWlmIChzZXNzaW9uLT5maXJzdF9idXJzdCA+IDI2MjE0NCkKKwkJCXNlc3Npb24tPmZpcnN0X2J1cnN0ID0gMjYyMTQ0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBiZWlzY3NpX2dldF9ob3N0X3BhcmFtIC0gZ2V0IHRoZSBpc2NzaSBwYXJhbWV0ZXIKKyAqIEBzaG9zdDogcG9pbnRlciB0byBzY3NpX2hvc3Qgc3RydWN0dXJlCisgKiBAcGFyYW06IHBhcmFtZXRlciB0eXBlIGlkZW50aWZpZXIKKyAqIEBidWY6IGJ1ZmZlciBwb2ludGVyCisgKgorICogcmV0dXJucyBob3N0IHBhcmFtZXRlcgorICovCitpbnQgYmVpc2NzaV9nZXRfaG9zdF9wYXJhbShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCSAgIGVudW0gaXNjc2lfaG9zdF9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IChzdHJ1Y3QgYmVpc2NzaV9oYmEgKilpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCWludCBsZW4gPSAwOworCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgSVNDU0lfSE9TVF9QQVJBTV9IV0FERFJFU1M6CisJCWJlX2NtZF9nZXRfbWFjX2FkZHIoJnBoYmEtPmN0cmwsIHBoYmEtPm1hY19hZGRyZXNzKTsKKwkJbGVuID0gc3lzZnNfZm9ybWF0X21hYyhidWYsIHBoYmEtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBpc2NzaV9ob3N0X2dldF9wYXJhbShzaG9zdCwgcGFyYW0sIGJ1Zik7CisJfQorCXJldHVybiBsZW47Cit9CisKKy8qKgorICogYmVpc2NzaV9jb25uX2dldF9zdGF0cyAtIGdldCB0aGUgaXNjc2kgc3RhdHMKKyAqIEBjbHNfY29ubjogcG9pbnRlciB0byBpc2NzaSBjbHMgY29ubgorICogQHN0YXRzOiBwb2ludGVyIHRvIGlzY3NpX3N0YXRzIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgaXNjc2kgc3RhdHMKKyAqLwordm9pZCBiZWlzY3NpX2Nvbm5fZ2V0X3N0YXRzKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCQkgICAgc3RydWN0IGlzY3NpX3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX2dldF9zdGF0c1xuIik7CisJc3RhdHMtPnR4ZGF0YV9vY3RldHMgPSBjb25uLT50eGRhdGFfb2N0ZXRzOworCXN0YXRzLT5yeGRhdGFfb2N0ZXRzID0gY29ubi0+cnhkYXRhX29jdGV0czsKKwlzdGF0cy0+ZGF0YW91dF9wZHVzID0gY29ubi0+ZGF0YW91dF9wZHVzX2NudDsKKwlzdGF0cy0+c2NzaXJzcF9wZHVzID0gY29ubi0+c2NzaXJzcF9wZHVzX2NudDsKKwlzdGF0cy0+c2NzaWNtZF9wZHVzID0gY29ubi0+c2NzaWNtZF9wZHVzX2NudDsKKwlzdGF0cy0+ZGF0YWluX3BkdXMgPSBjb25uLT5kYXRhaW5fcGR1c19jbnQ7CisJc3RhdHMtPnRtZnJzcF9wZHVzID0gY29ubi0+dG1mcnNwX3BkdXNfY250OworCXN0YXRzLT50bWZjbWRfcGR1cyA9IGNvbm4tPnRtZmNtZF9wZHVzX2NudDsKKwlzdGF0cy0+cjJ0X3BkdXMgPSBjb25uLT5yMnRfcGR1c19jbnQ7CisJc3RhdHMtPmRpZ2VzdF9lcnIgPSAwOworCXN0YXRzLT50aW1lb3V0X2VyciA9IDA7CisJc3RhdHMtPmN1c3RvbV9sZW5ndGggPSAwOworCXN0cmNweShzdGF0cy0+Y3VzdG9tWzBdLmRlc2MsICJlaF9hYm9ydF9jbnQiKTsKKwlzdGF0cy0+Y3VzdG9tWzBdLnZhbHVlID0gY29ubi0+ZWhfYWJvcnRfY250OworfQorCisvKioKKyAqIGJlaXNjc2lfc2V0X3BhcmFtc19mb3Jfb2ZmbGQgLSBnZXQgdGhlIHBhcmFtZXRlcnMgZm9yIG9mZmxvYWQKKyAqIEBiZWlzY3NpX2Nvbm46IHBvaW50ZXIgdG8gYmVpc2NzaV9jb25uCisgKiBAcGFyYW1zOiBwb2ludGVyIHRvIG9mZmxvYWRfcGFyYW1zIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCAgYmVpc2NzaV9zZXRfcGFyYW1zX2Zvcl9vZmZsZChzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkJCSAgc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIG1heF9idXJzdF9sZW5ndGgsCisJCSAgICAgIHBhcmFtcywgc2Vzc2lvbi0+bWF4X2J1cnN0KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIG1heF9zZW5kX2RhdGFfc2VnbWVudF9sZW5ndGgsIHBhcmFtcywKKwkJICAgICAgY29ubi0+bWF4X3htaXRfZGxlbmd0aCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLCBmaXJzdF9idXJzdF9sZW5ndGgsCisJCSAgICAgIHBhcmFtcywgc2Vzc2lvbi0+Zmlyc3RfYnVyc3QpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgZXJsLCBwYXJhbXMsCisJCSAgICAgIHNlc3Npb24tPmVybCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLCBkZGUsIHBhcmFtcywKKwkJICAgICAgY29ubi0+ZGF0YWRnc3RfZW4pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgaGRlLCBwYXJhbXMsCisJCSAgICAgIGNvbm4tPmhkcmRnc3RfZW4pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgaXIydCwgcGFyYW1zLAorCQkgICAgICBzZXNzaW9uLT5pbml0aWFsX3IydF9lbik7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLCBpbWQsIHBhcmFtcywKKwkJICAgICAgc2Vzc2lvbi0+aW1tX2RhdGFfZW4pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgZXhwX3N0YXRzbiwgcGFyYW1zLAorCQkgICAgICAoY29ubi0+ZXhwX3N0YXRzbiAtIDEpKTsKK30KKworLyoqCisgKiBiZWlzY3NpX2Nvbm5fc3RhcnQgLSBvZmZsb2FkIG9mIHNlc3Npb24gdG8gY2hpcAorICogQGNsc19jb25uOiBwb2ludGVyIHRvIGJlaXNjc2lfY29ubgorICovCitpbnQgYmVpc2NzaV9jb25uX3N0YXJ0KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4pCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zIHBhcmFtczsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KHNlc3Npb24tPmNsc19zZXNzaW9uKTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCisJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcykpOworCWJlaXNjc2lfZXAgPSBiZWlzY3NpX2Nvbm4tPmVwOworCWlmICghYmVpc2NzaV9lcCkKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiSW4gYmVpc2NzaV9jb25uX3N0YXJ0ICwgbm8gYmVpc2NzaV9lcFxuIik7CisKKwlmcmVlX21nbXRfc2dsX2hhbmRsZShwaGJhLCBiZWlzY3NpX2Nvbm4tPnBsb2dpbl9zZ2xfaGFuZGxlKTsKKwliZWlzY3NpX2Nvbm4tPmxvZ2luX2luX3Byb2dyZXNzID0gMDsKKwliZWlzY3NpX3NldF9wYXJhbXNfZm9yX29mZmxkKGJlaXNjc2lfY29ubiwgJnBhcmFtcyk7CisJYmVpc2NzaV9vZmZsb2FkX2Nvbm5lY3Rpb24oYmVpc2NzaV9jb25uLCAmcGFyYW1zKTsKKwlpc2NzaV9jb25uX3N0YXJ0KGNsc19jb25uKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBiZWlzY3NpX2dldF9jaWQgLSBBbGxvY2F0ZSBhIGNpZAorICogQHBoYmE6IFRoZSBwaGJhIGluc3RhbmNlCisgKi8KK3N0YXRpYyBpbnQgYmVpc2NzaV9nZXRfY2lkKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBjaWQgPSAweEZGRkY7CisKKwlpZiAoIXBoYmEtPmF2bGJsX2NpZHMpCisJCXJldHVybiBjaWQ7CisKKwljaWQgPSBwaGJhLT5jaWRfYXJyYXlbcGhiYS0+Y2lkX2FsbG9jKytdOworCWlmIChwaGJhLT5jaWRfYWxsb2MgPT0gcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwpCisJCXBoYmEtPmNpZF9hbGxvYyA9IDA7CisJcGhiYS0+YXZsYmxfY2lkcy0tOworCXJldHVybiBjaWQ7Cit9CisKKy8qKgorICogYmVpc2NzaV9vcGVuX2Nvbm4gLSBBc2sgRlcgdG8gb3BlbiBhIFRDUCBjb25uZWN0aW9uCisgKiBAZXA6CWVuZHBvaW50IHRvIGJlIHVzZWQKKyAqIEBzcmNfYWRkcjogVGhlIHNvdXJjZSBJUCBhZGRyZXNzCisgKiBAZHN0X2FkZHI6IFRoZSBEZXN0aW5hdGlvbiAgSVAgYWRkcmVzcworICoKKyAqIEFza3MgdGhlIEZXIHRvIG9wZW4gYSBUQ1AgY29ubmVjdGlvbgorICovCitzdGF0aWMgaW50IGJlaXNjc2lfb3Blbl9jb25uKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsCisJCQkgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIsCisJCQkgICAgIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIsIGludCBub25fYmxvY2tpbmcpCit7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOworCWludCByZXQgPSAtMTsKKworCWJlaXNjc2lfZXAtPmVwX2NpZCA9IGJlaXNjc2lfZ2V0X2NpZChwaGJhKTsKKwlpZiAoYmVpc2NzaV9lcC0+ZXBfY2lkID09IDB4RkZGRikgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJObyBmcmVlIGNpZCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX29wZW5fY29ubiwgZXBfY2lkPSVkICIsCisJCSBiZWlzY3NpX2VwLT5lcF9jaWQpOworCXBoYmEtPmVwX2FycmF5W2JlaXNjc2lfZXAtPmVwX2NpZF0gPSBlcDsKKwlpZiAoYmVpc2NzaV9lcC0+ZXBfY2lkID4KKwkgICAgKHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQgKyBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCkpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGFsbG9jYXRlIGlzY3NpIGNpZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJYmVpc2NzaV9lcC0+Y2lkX3ZsZCA9IDA7CisJcmV0dXJuIG1nbXRfb3Blbl9jb25uZWN0aW9uKHBoYmEsIGRzdF9hZGRyLCBiZWlzY3NpX2VwKTsKK30KKworLyoqCisgKiBiZWlzY3NpX3B1dF9jaWQgLSBGcmVlIHRoZSBjaWQKKyAqIEBwaGJhOiBUaGUgcGhiYSBmb3Igd2hpY2ggdGhlIGNpZCBpcyBiZWluZyBmcmVlZAorICogQGNpZDogVGhlIGNpZCB0byBmcmVlCisgKi8KK3N0YXRpYyB2b2lkIGJlaXNjc2lfcHV0X2NpZChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIHNob3J0IGNpZCkKK3sKKwlwaGJhLT5hdmxibF9jaWRzKys7CisJcGhiYS0+Y2lkX2FycmF5W3BoYmEtPmNpZF9mcmVlKytdID0gY2lkOworCWlmIChwaGJhLT5jaWRfZnJlZSA9PSBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCkKKwkJcGhiYS0+Y2lkX2ZyZWUgPSAwOworfQorCisvKioKKyAqIGJlaXNjc2lfZnJlZV9lcCAtIGZyZWUgZW5kcG9pbnQKKyAqIEBlcDoJcG9pbnRlciB0byBpc2NzaSBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgYmVpc2NzaV9mcmVlX2VwKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXApCit7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOworCisJYmVpc2NzaV9wdXRfY2lkKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJYmVpc2NzaV9lcC0+cGhiYSA9IE5VTEw7CisJaXNjc2lfZGVzdHJveV9lbmRwb2ludChlcCk7Cit9CisKKy8qKgorICogYmVpc2NzaV9lcF9jb25uZWN0IC0gQXNrIGNoaXAgdG8gY3JlYXRlIFRDUCBDb25uCisgKiBAc2NzaV9ob3N0OiBQb2ludGVyIHRvIHNjc2lfaG9zdCBzdHJ1Y3R1cmUKKyAqIEBkc3RfYWRkcjogVGhlIElQIGFkZHJlc3Mgb2YgVGFyZ2V0CisgKiBAbm9uX2Jsb2NraW5nOiBibG9ja2luZyBvciBub24tYmxvY2tpbmcgY2FsbAorICoKKyAqIFRoaXMgcm91dGluZXMgZmlyc3QgYXNrcyBjaGlwIHRvIGNyZWF0ZSBhIGNvbm5lY3Rpb24gYW5kIHRoZW4gYWxsb2NhdGVzIGFuIEVQCisgKi8KK3N0cnVjdCBpc2NzaV9lbmRwb2ludCAqCitiZWlzY3NpX2VwX2Nvbm5lY3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIsCisJCSAgIGludCBub25fYmxvY2tpbmcpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7CisJaW50IHJldDsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfZXBfY29ubmVjdCBcbiIpOworCWlmIChzaG9zdCkKKwkJcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisJZWxzZSB7CisJCXJldCA9IC1FTlhJTzsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAic2hvc3QgaXMgTlVMTCBcbiIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKwllcCA9IGlzY3NpX2NyZWF0ZV9lbmRwb2ludChzaXplb2Yoc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQpKTsKKwlpZiAoIWVwKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCWJlaXNjc2lfZXAtPnBoYmEgPSBwaGJhOworCisJaWYgKGJlaXNjc2lfb3Blbl9jb25uKGVwLCBOVUxMLCBkc3RfYWRkciwgbm9uX2Jsb2NraW5nKSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJGYWlsZWQgaW4gYWxsb2NhdGUgaXNjc2kgY2lkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2VwOworCX0KKworCXJldHVybiBlcDsKKworZnJlZV9lcDoKKwliZWlzY3NpX2ZyZWVfZXAoZXApOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKKy8qKgorICogYmVpc2NzaV9lcF9wb2xsIC0gUG9sbCB0byBzZWUgaWYgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZAorICogQGVwOgllbmRwb2ludCB0byBiZSB1c2VkCisgKiBAdGltZW91dF9tczogdGltZW91dCBzcGVjaWZpZWQgaW4gbWlsbGlzZWNzCisgKgorICogUG9sbCB0byBzZWUgaWYgVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQKKyAqLworaW50IGJlaXNjc2lfZXBfcG9sbChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLCBpbnQgdGltZW91dF9tcykKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gIGJlaXNjc2lfZXBfcG9sbFxuIik7CisJaWYgKGJlaXNjc2lfZXAtPmNpZF92bGQgPT0gMSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoqCisgKiBiZWlzY3NpX2Nsb3NlX2Nvbm4gLSBVcGxvYWQgdGhlICBjb25uZWN0aW9uCisgKiBAZXA6IFRoZSBpc2NzaSBlbmRwb2ludAorICogQGZsYWc6IFRoZSB0eXBlIG9mIGNvbm5lY3Rpb24gY2xvc3VyZQorICovCitzdGF0aWMgaW50IGJlaXNjc2lfY2xvc2VfY29ubihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLCBpbnQgZmxhZykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CisKKwlpZiAoTUdNVF9TVEFUVVNfU1VDQ0VTUyAhPQorCSAgICBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCwKKwkJQ09OTkVDVElPTl9VUExPQURfR1JBQ0VGVUwpKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgInVwbG9hZCBmYWlsZWQgZm9yIGNpZCAweCV4IiwKKwkJCSBiZWlzY3NpX2VwLT5lcF9jaWQpOworCQlyZXQgPSAtMTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGJlaXNjc2lfZXBfZGlzY29ubmVjdCAtIFRlYXJzIGRvd24gdGhlIFRDUCBjb25uZWN0aW9uCisgKiBAZXA6CWVuZHBvaW50IHRvIGJlIHVzZWQKKyAqCisgKiBUZWFycyBkb3duIHRoZSBUQ1AgY29ubmVjdGlvbgorICovCit2b2lkIGJlaXNjc2lfZXBfZGlzY29ubmVjdChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisJaW50IGZsYWcgPSAwOworCisJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCXBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfZXBfZGlzY29ubmVjdFxuIik7CisKKwlpZiAoYmVpc2NzaV9lcC0+Y29ubikgeworCQliZWlzY3NpX2Nvbm4gPSBiZWlzY3NpX2VwLT5jb25uOworCQlpc2NzaV9zdXNwZW5kX3F1ZXVlKGJlaXNjc2lfY29ubi0+Y29ubik7CisJCWJlaXNjc2lfY2xvc2VfY29ubihlcCwgZmxhZyk7CisJfQorCisJYmVpc2NzaV9mcmVlX2VwKGVwKTsKK30KKworLyoqCisgKiBiZWlzY3NpX3VuYmluZF9jb25uX3RvX2NpZCAtIFVuYmluZCB0aGUgYmVpc2NzaV9jb25uIGZyb20gcGhiYSBjb25uIHRhYmxlCisgKiBAcGhiYTogVGhlIHBoYmEgaW5zdGFuY2UKKyAqIEBjaWQ6IFRoZSBjaWQgdG8gZnJlZQorICovCitzdGF0aWMgaW50IGJlaXNjc2lfdW5iaW5kX2Nvbm5fdG9fY2lkKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgY2lkKQoreworCWlmIChwaGJhLT5jb25uX3RhYmxlW2NpZF0pCisJCXBoYmEtPmNvbm5fdGFibGVbY2lkXSA9IE5VTEw7CisJZWxzZSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgIkNvbm5lY3Rpb24gdGFibGUgTm90IG9jY3VwaWVkLiBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9jb25uX3N0b3AgLSBJbnZhbGlkYXRlIGFuZCBzdG9wIHRoZSBjb25uZWN0aW9uCisgKiBAY2xzX2Nvbm46IHBvaW50ZXIgdG8gZ2V0IGlzY3NpX2Nvbm4KKyAqIEBmbGFnOiBUaGUgdHlwZSBvZiBjb25uZWN0aW9uIGNsb3N1cmUKKyAqLwordm9pZCBiZWlzY3NpX2Nvbm5fc3RvcChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uLT5jbHNfc2Vzc2lvbik7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIHNob3J0IHNhdmVjZmdfZmxhZyA9IENNRF9JU0NTSV9TRVNTSU9OX1NBVkVfQ0ZHX09OX0ZMQVNIOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3BcbiIpOworCWJlaXNjc2lfZXAgPSBiZWlzY3NpX2Nvbm4tPmVwOworCWlmICghYmVpc2NzaV9lcCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fc3RvcCAsIG5vIGJlaXNjc2lfZXBcbiIpOworCQlyZXR1cm47CisJfQorCXN0YXR1cyA9IG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAsCisJCQkJCSAgICBiZWlzY3NpX2VwLT5lcF9jaWQsIDEsCisJCQkJCSAgICBzYXZlY2ZnX2ZsYWcpOworCWlmIChzdGF0dXMgIT0gTUdNVF9TVEFUVVNfU1VDQ0VTUykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIm1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uIEZhaWxlZCBmb3IgY2lkPSVkIFxuIiwKKwkJCSBiZWlzY3NpX2VwLT5lcF9jaWQpOworCX0KKwliZWlzY3NpX3VuYmluZF9jb25uX3RvX2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOworCWlzY3NpX2Nvbm5fc3RvcChjbHNfY29ubiwgZmxhZyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MmZmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaApAQCAtMCwwICsxLDc1IEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20pCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICoKKyAqLworCisjaWZuZGVmIF9CRV9JU0NTSV8KKyNkZWZpbmUgX0JFX0lTQ1NJXworCisjaW5jbHVkZSAiYmVfbWFpbi5oIgorI2luY2x1ZGUgImJlX21nbXQuaCIKKworI2RlZmluZSBCRTJfSVBWNCAgMHgxCisjZGVmaW5lIEJFMl9JUFY2ICAweDEwCisKK3ZvaWQgYmVpc2NzaV9vZmZsb2FkX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCXN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zICpwYXJhbXMpOworCit2b2lkIGJlaXNjc2lfb2ZmbG9hZF9pc2NzaShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBpc2NzaV9jb25uICpjb25uLAorCQkJICAgc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJICAgdW5zaWduZWQgaW50IGZ3X2hhbmRsZSk7CisKK3N0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAorCQkJCQkJIHVpbnQxNl90IGNtZHNfbWF4LAorCQkJCQkJIHVpbnQxNl90IHFkZXB0aCwKKwkJCQkJCSB1aW50MzJfdCBpbml0aWFsX2NtZHNuKTsKKwordm9pZCBiZWlzY3NpX3Nlc3Npb25fZGVzdHJveShzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uKTsKKworc3RydWN0IGlzY3NpX2Nsc19jb25uICpiZWlzY3NpX2Nvbm5fY3JlYXRlKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbgorCQkJCQkgICAqY2xzX3Nlc3Npb24sIHVpbnQzMl90IGNpZCk7CisKK2ludCBiZWlzY3NpX2Nvbm5fYmluZChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uLAorCQkgICAgICBzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkgICAgICB1aW50NjRfdCB0cmFuc3BvcnRfZmQsIGludCBpc19sZWFkaW5nKTsKKworaW50IGJlaXNjc2lfY29ubl9nZXRfcGFyYW0oc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJCSAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1Zik7CisKK2ludCBiZWlzY3NpX2dldF9ob3N0X3BhcmFtKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQkJICAgZW51bSBpc2NzaV9ob3N0X3BhcmFtIHBhcmFtLCBjaGFyICpidWYpOworCitpbnQgYmVpc2NzaV9zZXRfcGFyYW0oc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJICAgICAgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKKworaW50IGJlaXNjc2lfY29ubl9zdGFydChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uKTsKKwordm9pZCBiZWlzY3NpX2Nvbm5fc3RvcChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLCBpbnQgZmxhZyk7CisKK3N0cnVjdCBpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcF9jb25uZWN0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQkJCQkgIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIsCisJCQkJCSAgaW50IG5vbl9ibG9ja2luZyk7CisKK2ludCBiZWlzY3NpX2VwX3BvbGwoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwgaW50IHRpbWVvdXRfbXMpOworCit2b2lkIGJlaXNjc2lfZXBfZGlzY29ubmVjdChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwKTsKKwordm9pZCBiZWlzY3NpX2Nvbm5fZ2V0X3N0YXRzKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCQkgICAgc3RydWN0IGlzY3NpX3N0YXRzICpzdGF0cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxYWNhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKQEAgLTAsMCArMSwzMzkwIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20pCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiAgU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorCisjaW5jbHVkZSA8c2NzaS9saWJpc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlICJiZV9tYWluLmgiCisjaW5jbHVkZSAiYmVfaXNjc2kuaCIKKyNpbmNsdWRlICJiZV9tZ210LmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmVfaW9wb2xsX2J1ZGdldCA9IDEwOworc3RhdGljIHVuc2lnbmVkIGludCBiZV9tYXhfcGh5c19zaXplID0gNjQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGVuYWJsZV9tc2l4OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmVpc2NzaV9wY2lfaWRfdGFibGUpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDICIgIiBCVUlMRF9TVFIpOworTU9EVUxFX0FVVEhPUigiU2VydmVyRW5naW5lcyBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX3BhcmFtKGJlX2lvcG9sbF9idWRnZXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oZW5hYmxlX21zaXgsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oYmVfbWF4X3BoeXNfc2l6ZSwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGJlX21heF9waHlzX3NpemUsICJNYXhpbXVtIFNpemUgKEluIEtpbG9ieXRlcykgb2YgcGh5c2ljYWxseSIKKwkJCQkgICAiY29udGlndW91cyBtZW1vcnkgdGhhdCBjYW4gYmUgYWxsb2NhdGVkLiIKKwkJCQkgICAiUmFuZ2UgaXMgMTYgLSAxMjgiKTsKKworc3RhdGljIGludCBiZWlzY3NpX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgNjU1MzYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBiZWlzY3NpX3NodCA9IHsKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiU2VydmVyRW5naW5lcyAxMEdiZSBvcGVuLWlzY3NpIEluaXRpYXRvciBEcml2ZXIiLAorCS5wcm9jX25hbWUgPSBEUlZfTkFNRSwKKwkucXVldWVjb21tYW5kID0gaXNjc2lfcXVldWVjb21tYW5kLAorCS5laF9hYm9ydF9oYW5kbGVyID0gaXNjc2lfZWhfYWJvcnQsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuc2xhdmVfY29uZmlndXJlID0gYmVpc2NzaV9zbGF2ZV9jb25maWd1cmUsCisJLnRhcmdldF9hbGxvYyA9IGlzY3NpX3RhcmdldF9hbGxvYywKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBpc2NzaV9laF9kZXZpY2VfcmVzZXQsCisJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyID0gaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0LAorCS5zZ190YWJsZXNpemUgPSBCRUlTQ1NJX1NHTElTVF9FTEVNRU5UUywKKwkuY2FuX3F1ZXVlID0gQkUyX0lPX0RFUFRILAorCS50aGlzX2lkID0gLTEsCisJLm1heF9zZWN0b3JzID0gQkVJU0NTSV9NQVhfU0VDVE9SUywKKwkuY21kX3Blcl9sdW4gPSBCRUlTQ1NJX0NNRF9QRVJfTFVOLAorCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKmJlaXNjc2lfc2NzaV90cmFuc3BvcnQ7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLSBQQ0kgRHJpdmVyIG9wZXJhdGlvbnMgYW5kIGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShiZWlzY3NpX3BjaV9pZF90YWJsZSkgPSB7CisJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgQkVfREVWSUNFX0lEMSkgfSwKKwl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQxKSB9LAorCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDIpIH0sCisJeyAwIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmVpc2NzaV9wY2lfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGJlaXNjc2lfaGJhICpiZWlzY3NpX2hiYV9hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKworCXNob3N0ID0gaXNjc2lfaG9zdF9hbGxvYygmYmVpc2NzaV9zaHQsIHNpemVvZigqcGhiYSksIDApOworCWlmICghc2hvc3QpIHsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJiZWlzY3NpX2hiYV9hbGxvYyAtIgorCQkJImlzY3NpX2hvc3RfYWxsb2MgZmFpbGVkIFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlzaG9zdC0+ZG1hX2JvdW5kYXJ5ID0gcGNpZGV2LT5kbWFfbWFzazsKKwlzaG9zdC0+bWF4X2lkID0gQkUyX01BWF9TRVNTSU9OUzsKKwlzaG9zdC0+bWF4X2NoYW5uZWwgPSAwOworCXNob3N0LT5tYXhfY21kX2xlbiA9IEJFSVNDU0lfTUFYX0NNRF9MRU47CisJc2hvc3QtPm1heF9sdW4gPSBCRUlTQ1NJX05VTV9NQVhfTFVOOworCXNob3N0LT50cmFuc3BvcnR0ID0gYmVpc2NzaV9zY3NpX3RyYW5zcG9ydDsKKworCXBoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCW1lbXNldChwaGJhLCAwLCBzaXplb2YoKnBoYmEpKTsKKwlwaGJhLT5zaG9zdCA9IHNob3N0OworCXBoYmEtPnBjaWRldiA9IHBjaV9kZXZfZ2V0KHBjaWRldik7CisKKwlpZiAoaXNjc2lfaG9zdF9hZGQoc2hvc3QsICZwaGJhLT5wY2lkZXYtPmRldikpCisJCWdvdG8gZnJlZV9kZXZpY2VzOworCXJldHVybiBwaGJhOworCitmcmVlX2RldmljZXM6CisJcGNpX2Rldl9wdXQocGhiYS0+cGNpZGV2KTsKKwlpc2NzaV9ob3N0X2ZyZWUocGhiYS0+c2hvc3QpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX3VubWFwX3BjaV9mdW5jdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJaWYgKHBoYmEtPmNzcl92YSkgeworCQlpb3VubWFwKHBoYmEtPmNzcl92YSk7CisJCXBoYmEtPmNzcl92YSA9IE5VTEw7CisJfQorCWlmIChwaGJhLT5kYl92YSkgeworCQlpb3VubWFwKHBoYmEtPmRiX3ZhKTsKKwkJcGhiYS0+ZGJfdmEgPSBOVUxMOworCX0KKwlpZiAocGhiYS0+cGNpX3ZhKSB7CisJCWlvdW5tYXAocGhiYS0+cGNpX3ZhKTsKKwkJcGhiYS0+cGNpX3ZhID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9tYXBfcGNpX2JhcnMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJdTggX19pb21lbSAqYWRkcjsKKworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMiksCisJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDIpKTsKKwlpZiAoYWRkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwaGJhLT5jdHJsLmNzciA9IGFkZHI7CisJcGhiYS0+Y3NyX3ZhID0gYWRkcjsKKwlwaGJhLT5jc3JfcGEudS5hNjQuYWRkcmVzcyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDIpOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCA0KSwgMTI4ICogMTAyNCk7CisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJZ290byBwY2lfbWFwX2VycjsKKwlwaGJhLT5jdHJsLmRiID0gYWRkcjsKKwlwaGJhLT5kYl92YSA9IGFkZHI7CisJcGhiYS0+ZGJfcGEudS5hNjQuYWRkcmVzcyA9ICBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCA0KTsKKworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMSksCisJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDEpKTsKKwlpZiAoYWRkciA9PSBOVUxMKQorCQlnb3RvIHBjaV9tYXBfZXJyOworCXBoYmEtPmN0cmwucGNpY2ZnID0gYWRkcjsKKwlwaGJhLT5wY2lfdmEgPSBhZGRyOworCXBoYmEtPnBjaV9wYS51LmE2NC5hZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMSk7CisJcmV0dXJuIDA7CisKK3BjaV9tYXBfZXJyOgorCWJlaXNjc2lfdW5tYXBfcGNpX2Z1bmN0aW9uKHBoYmEpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfZW5hYmxlX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwY2lkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJiZWlzY3NpX2VuYWJsZV9wY2kgLSBlbmFibGUgZGV2aWNlICIKKwkJCSJmYWlsZWQuIFJldHVybmluZyAtRU5PREVWXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKKwkJcmV0ID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiQ291bGQgbm90IHNldCBQQ0kgRE1BIE1hc2tcbiIpOworCQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlX2N0cmxfaW5pdChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW1fYWxsb2MgPSAmY3RybC0+bWJveF9tZW1fYWxsb2NlZDsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW1fYWxpZ24gPSAmY3RybC0+bWJveF9tZW07CisJaW50IHN0YXR1cyA9IDA7CisKKwljdHJsLT5wZGV2ID0gcGRldjsKKwlzdGF0dXMgPSBiZWlzY3NpX21hcF9wY2lfYmFycyhwaGJhLCBwZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJbWJveF9tZW1fYWxsb2MtPnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX21jY19tYWlsYm94KSArIDE2OworCW1ib3hfbWVtX2FsbG9jLT52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsCisJCQkJCQkgIG1ib3hfbWVtX2FsbG9jLT5zaXplLAorCQkJCQkJICAmbWJveF9tZW1fYWxsb2MtPmRtYSk7CisJaWYgKCFtYm94X21lbV9hbGxvYy0+dmEpIHsKKwkJYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24ocGhiYSk7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJbWJveF9tZW1fYWxpZ24tPnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX21jY19tYWlsYm94KTsKKwltYm94X21lbV9hbGlnbi0+dmEgPSBQVFJfQUxJR04obWJveF9tZW1fYWxsb2MtPnZhLCAxNik7CisJbWJveF9tZW1fYWxpZ24tPmRtYSA9IFBUUl9BTElHTihtYm94X21lbV9hbGxvYy0+ZG1hLCAxNik7CisJbWVtc2V0KG1ib3hfbWVtX2FsaWduLT52YSwgMCwgc2l6ZW9mKHN0cnVjdCBiZV9tY2NfbWFpbGJveCkpOworCXNwaW5fbG9ja19pbml0KCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfZ2V0X3BhcmFtcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCA9IEJFMl9JT19ERVBUSDsKKwlwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCA9IEJFMl9NQVhfU0VTU0lPTlM7CisJcGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCA9IEJFMl9BU1lOQ1BEVVM7CisJcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgPSBCRTJfTUFYX0lDRFMgLyAyOworCXBoYmEtPnBhcmFtcy5udW1fc2dlX3Blcl9pbyA9IEJFMl9TR0U7CisJcGhiYS0+cGFyYW1zLmRlZnBkdV9oZHJfc3ogPSBCRTJfREVGUERVX0hEUl9TWjsKKwlwaGJhLT5wYXJhbXMuZGVmcGR1X2RhdGFfc3ogPSBCRTJfREVGUERVX0RBVEFfU1o7CisJcGhiYS0+cGFyYW1zLmVxX3RpbWVyID0gNjQ7CisJcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzID0KKwkgICAgKCgoQkUyX0NNRFNfUEVSX0NYTiAqIDIgKyBCRTJfTE9HT1VUUyArIEJFMl9UTUZTICsgQkUyX0FTWU5DUERVUykgLworCQkJCQkJCQk1MTIpICsgMSkgKiA1MTI7CisJcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzID0gKHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA8IDEwMjQpCisJCQkJPyAxMDI0IDogcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzOworCVNFX0RFQlVHKERCR19MVkxfOCwgInBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcz0lZCBcbiIsCisJCSBwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMpOworCXBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcyA9CisJICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgQkUyX0xPR09VVFMgKyBCRTJfVE1GUyArIEJFMl9BU1lOQ1BEVVMpIC8KKwkJCQkJCQkJNTEyKSArIDEpICogNTEyOworCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJInBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcz0lZCBCRTJfQ01EU19QRVJfQ1hOPSVkIgorCQkiQkUyX0xPR09VVFM9JWQgQkUyX1RNRlM9JWQgQkUyX0FTWU5DUERVUz0lZCBcbiIsCisJCXBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcywgQkUyX0NNRFNfUEVSX0NYTiwKKwkJQkUyX0xPR09VVFMsIEJFMl9UTUZTLCBCRTJfQVNZTkNQRFVTKTsKKwlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huID0gMjU2OworfQorCitzdGF0aWMgdm9pZCBod2lfcmluZ19lcV9kYihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgICB1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBjbHJfaW50ZXJydXB0LAorCQkJICAgdW5zaWduZWQgaW50IG51bV9wcm9jZXNzZWQsCisJCQkgICB1bnNpZ25lZCBjaGFyIHJlYXJtLCB1bnNpZ25lZCBjaGFyIGV2ZW50KQoreworCXUzMiB2YWwgPSAwOworCXZhbCB8PSBpZCAmIERCX0VRX1JJTkdfSURfTUFTSzsKKwlpZiAocmVhcm0pCisJCXZhbCB8PSAxIDw8IERCX0VRX1JFQVJNX1NISUZUOworCWlmIChjbHJfaW50ZXJydXB0KQorCQl2YWwgfD0gMSA8PCBEQl9FUV9DTFJfU0hJRlQ7CisJaWYgKGV2ZW50KQorCQl2YWwgfD0gMSA8PCBEQl9FUV9FVk5UX1NISUZUOworCXZhbCB8PSBudW1fcHJvY2Vzc2VkIDw8IERCX0VRX05VTV9QT1BQRURfU0hJRlQ7CisJaW93cml0ZTMyKHZhbCwgcGhiYS0+ZGJfdmEgKyBEQl9FUV9PRkZTRVQpOworfQorCisvKioKKyAqIGJlX2lzciAtIFRoZSBpc3Igcm91dGluZSBvZiB0aGUgZHJpdmVyLgorICogQGlycTogTm90IHVzZWQKKyAqIEBkZXZfaWQ6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYmVfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKKwlzdHJ1Y3QgYmVfZXFfZW50cnkgKmVxZSA9IE5VTEw7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgbnVtX2VxX3Byb2Nlc3NlZDsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsOworCWludCBpc3I7CisKKwlwaGJhID0gZGV2X2lkOworCWlmICghZW5hYmxlX21zaXgpIHsKKwkJY3RybCA9ICZwaGJhLT5jdHJsOzsKKwkJaXNyID0gaW9yZWFkMzIoY3RybC0+Y3NyICsgQ0VWX0lTUjBfT0ZGU0VUICsKKwkJCSAgICAgICAoUENJX0ZVTkMoY3RybC0+cGRldi0+ZGV2Zm4pICogQ0VWX0lTUl9TSVpFKSk7CisJCWlmICghaXNyKQorCQkJcmV0dXJuIElSUV9OT05FOworCX0KKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxLnE7CisJY3EgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwlpbmRleCA9IDA7CisJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKKwlpZiAoIWVxZSkKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiZXFlIGlzIE5VTExcbiIpOworCisJbnVtX2VxX3Byb2Nlc3NlZCA9IDA7CisJaWYgKGJsa19pb3BvbGxfZW5hYmxlZCkgeworCQl3aGlsZSAoZXFlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQpIC8gMzJdCisJCQkJCSYgRVFFX1ZBTElEX01BU0spIHsKKwkJCWlmICghYmxrX2lvcG9sbF9zY2hlZF9wcmVwKCZwaGJhLT5pb3BvbGwpKQorCQkJCWJsa19pb3BvbGxfc2NoZWQoJnBoYmEtPmlvcG9sbCk7CisKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkLCBlcWUsIDApOworCQkJcXVldWVfdGFpbF9pbmMoZXEpOworCQkJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKKwkJCW51bV9lcV9wcm9jZXNzZWQrKzsKKwkJCVNFX0RFQlVHKERCR19MVkxfOCwgIlZhbGlkIEVRRVxuIik7CisJCX0KKwkJaWYgKG51bV9lcV9wcm9jZXNzZWQpIHsKKwkJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMCwJbnVtX2VxX3Byb2Nlc3NlZCwgMCwgMSk7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIElSUV9OT05FOworCX0gZWxzZSB7CisJCXdoaWxlIChlcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCkgLyAzMl0KKwkJCQkJCSYgRVFFX1ZBTElEX01BU0spIHsKKworCQkJaWYgKCgoZXFlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwKKwkJCSAgICAgcmVzb3VyY2VfaWQpIC8gMzJdICYKKwkJCSAgICAgRVFFX1JFU0lEX01BU0spID4+IDE2KSAhPSBjcS0+aWQpIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJCQlwaGJhLT50b2RvX21jY19jcSA9IDE7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJCX0gZWxzZSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCQkJcGhiYS0+dG9kb19jcSA9IDE7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJCX0KKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkLCBlcWUsIDApOworCQkJcXVldWVfdGFpbF9pbmMoZXEpOworCQkJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKKwkJCW51bV9lcV9wcm9jZXNzZWQrKzsKKwkJfQorCQlpZiAocGhiYS0+dG9kb19jcSB8fCBwaGJhLT50b2RvX21jY19jcSkKKwkJCXF1ZXVlX3dvcmsocGhiYS0+d3EsICZwaGJhLT53b3JrX2Nxcyk7CisKKwkJaWYgKG51bV9lcV9wcm9jZXNzZWQpIHsKKwkJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMCwgbnVtX2VxX3Byb2Nlc3NlZCwgMSwgMSk7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIElSUV9OT05FOworCX0KK30KKworc3RhdGljIGludCBiZWlzY3NpX2luaXRfaXJxcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IHBoYmEtPnBjaWRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVxdWVzdF9pcnEocGNpZGV2LT5pcnEsIGJlX2lzciwgSVJRRl9TSEFSRUQsICJiZWlzY3NpIiwgcGhiYSk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9pbml0X2lycXMtIgorCQkJICAgICAiRmFpbGVkIHRvIHJlZ2lzdGVyIGlycVxcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaHdpX3JpbmdfY3FfZGIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJICAgdW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NlZCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgcmVhcm0sIHVuc2lnbmVkIGNoYXIgZXZlbnQpCit7CisJdTMyIHZhbCA9IDA7CisJdmFsIHw9IGlkICYgREJfQ1FfUklOR19JRF9NQVNLOworCWlmIChyZWFybSkKKwkJdmFsIHw9IDEgPDwgREJfQ1FfUkVBUk1fU0hJRlQ7CisJdmFsIHw9IG51bV9wcm9jZXNzZWQgPDwgREJfQ1FfTlVNX1BPUFBFRF9TSElGVDsKKwlpb3dyaXRlMzIodmFsLCBwaGJhLT5kYl92YSArIERCX0NRX09GRlNFVCk7Cit9CisKKy8qCisgKiBhc3luYyBwZHVzIGluY2x1ZGUKKyAqIGEuIHVuc29saWNpdGVkIE5PUC1JbiAodGFyZ2V0IGluaXRpYXRlZCBOT1AtSW4pCisgKiBiLiBBc3luYyBNZXNzYWdlcworICogYy4gUmVqZWN0IFBEVQorICogZC4gTG9naW4gcmVzcG9uc2UKKyAqIFRoZXNlIGhlYWRlcnMgYXJyaXZlIHVucHJvY2Vzc2VkIGJ5IHRoZSBFUCBmaXJtd2FyZSBhbmQgaVNDU0kgbGF5ZXIKKyAqIHByb2Nlc3MgdGhlbQorICovCitzdGF0aWMgdW5zaWduZWQgaW50CitiZWlzY3NpX3Byb2Nlc3NfYXN5bmNfcGR1KHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCSAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJICB1bnNpZ25lZCBzaG9ydCBjaWQsCisJCQkgIHN0cnVjdCBwZHVfYmFzZSAqcHBkdSwKKwkJCSAgdW5zaWduZWQgbG9uZyBwZHVfbGVuLAorCQkJICB2b2lkICpwYnVmZmVyLCB1bnNpZ25lZCBsb25nIGJ1Zl9sZW4pCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCisJc3dpdGNoIChwcGR1LT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9wZHVfYmFzZSwgb3Bjb2RlKSAvIDMyXSAmCisJCQkJCQlQRFVCQVNFX09QQ09ERV9NQVNLKSB7CisJY2FzZSBJU0NTSV9PUF9OT09QX0lOOgorCQlwYnVmZmVyID0gTlVMTDsKKwkJYnVmX2xlbiA9IDA7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfQVNZTkNfRVZFTlQ6CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfUkVKRUNUOgorCQlXQVJOX09OKCFwYnVmZmVyKTsKKwkJV0FSTl9PTighKGJ1Zl9sZW4gPT0gNDgpKTsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiSW4gSVNDU0lfT1BfUkVKRUNUXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9MT0dJTl9SU1A6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICAiVW5yZWNvZ25pemVkIG9wY29kZSAweCV4IGluIGFzeW5jIG1zZyBcbiIsCisJCQkgICAgIChwcGR1LT4KKwkJCSAgICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2Jhc2UsIG9wY29kZSkgLyAzMl0KKwkJCQkJCSYgUERVQkFTRV9PUENPREVfTUFTSykpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOworCV9faXNjc2lfY29tcGxldGVfcGR1KGNvbm4sIChzdHJ1Y3QgaXNjc2lfaGRyICopcHBkdSwgcGJ1ZmZlciwgYnVmX2xlbik7CisJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNnbF9oYW5kbGUgKmFsbG9jX2lvX3NnbF9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZTsKKworCWlmIChwaGJhLT5pb19zZ2xfaG5kbF9hdmJsKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiSW4gYWxsb2NfaW9fc2dsX2hhbmRsZSxpb19zZ2xfYWxsb2NfaW5kZXg9JWQgXG4iLAorCQkJIHBoYmEtPmlvX3NnbF9hbGxvY19pbmRleCk7CisJCXBzZ2xfaGFuZGxlID0gcGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT4KKwkJCQkJCWlvX3NnbF9hbGxvY19pbmRleF07CisJCXBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbcGhiYS0+aW9fc2dsX2FsbG9jX2luZGV4XSA9IE5VTEw7CisJCXBoYmEtPmlvX3NnbF9obmRsX2F2YmwtLTsKKwkJaWYgKHBoYmEtPmlvX3NnbF9hbGxvY19pbmRleCA9PSAocGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCAtIDEpKQorCQkJcGhiYS0+aW9fc2dsX2FsbG9jX2luZGV4ID0gMDsKKwkJZWxzZQorCQkJcGhiYS0+aW9fc2dsX2FsbG9jX2luZGV4Kys7CisJfSBlbHNlCisJCXBzZ2xfaGFuZGxlID0gTlVMTDsKKwlyZXR1cm4gcHNnbF9oYW5kbGU7Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlX2lvX3NnbF9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUpCit7CisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gZnJlZV8saW9fc2dsX2ZyZWVfaW5kZXg9JWQgXG4iLAorCQkgcGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXgpOworCWlmIChwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW3BoYmEtPmlvX3NnbF9mcmVlX2luZGV4XSkgeworCQkvKgorCQkgKiB0aGlzIGNhbiBoYXBwZW4gaWYgY2xlYW5fdGFzayBpcyBjYWxsZWQgb24gYSB0YXNrIHRoYXQKKwkJICogZmFpbGVkIGluIHhtaXRfdGFzayBvciBhbGxvY19wZHUuCisJCSAqLworCQkgU0VfREVCVUcoREJHX0xWTF84LAorCQkJICJEb3VibGUgRnJlZSBpbiBJTyBTR0wgaW9fc2dsX2ZyZWVfaW5kZXg9JWQsIgorCQkJICJ2YWx1ZSB0aGVyZT0lcCBcbiIsIHBoYmEtPmlvX3NnbF9mcmVlX2luZGV4LAorCQkJIHBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbcGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXhdKTsKKwkJcmV0dXJuOworCX0KKwlwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW3BoYmEtPmlvX3NnbF9mcmVlX2luZGV4XSA9IHBzZ2xfaGFuZGxlOworCXBoYmEtPmlvX3NnbF9obmRsX2F2YmwrKzsKKwlpZiAocGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXggPT0gKHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgLSAxKSkKKwkJcGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXggPSAwOworCWVsc2UKKwkJcGhiYS0+aW9fc2dsX2ZyZWVfaW5kZXgrKzsKK30KKworLyoqCisgKiBhbGxvY193cmJfaGFuZGxlIC0gVG8gYWxsb2NhdGUgYSB3cmIgaGFuZGxlCisgKiBAcGhiYTogVGhlIGhiYSBwb2ludGVyCisgKiBAY2lkOiBUaGUgY2lkIHRvIHVzZSBmb3IgYWxsb2NhdGlvbgorICogQGluZGV4OiBpbmRleCBhbGxvY2F0aW9uIGFuZCB3cmIgaW5kZXgKKyAqCisgKiBUaGlzIGhhcHBlbnMgdW5kZXIgc2Vzc2lvbl9sb2NrIHVudGlsIHN1Ym1pc3Npb24gdG8gY2hpcAorICovCitzdHJ1Y3Qgd3JiX2hhbmRsZSAqYWxsb2Nfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIGludCBjaWQsCisJCQkJICAgIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtjaWRdOworCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW2luZGV4XTsKKwlwd3JiX2hhbmRsZS0+d3JiX2luZGV4ID0gaW5kZXg7CisJcHdyYl9oYW5kbGUtPm54dF93cmJfaW5kZXggPSBpbmRleDsKKwlyZXR1cm4gcHdyYl9oYW5kbGU7Cit9CisKKy8qKgorICogZnJlZV93cmJfaGFuZGxlIC0gVG8gZnJlZSB0aGUgd3JiIGhhbmRsZSBiYWNrIHRvIHBvb2wKKyAqIEBwaGJhOiBUaGUgaGJhIHBvaW50ZXIKKyAqIEBwd3JiX2NvbnRleHQ6IFRoZSBjb250ZXh0IHRvIGZyZWUgZnJvbQorICogQHB3cmJfaGFuZGxlOiBUaGUgd3JiX2hhbmRsZSB0byBmcmVlCisgKgorICogVGhpcyBoYXBwZW5zIHVuZGVyIHNlc3Npb25fbG9jayB1bnRpbCBzdWJtaXNzaW9uIHRvIGNoaXAKKyAqLworc3RhdGljIHZvaWQKK2ZyZWVfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dCwKKwkJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlKQoreworCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJICJGUkVFIFdSQjogcHdyYl9oYW5kbGU9JXAgZnJlZV9pbmRleD0lZD0weCV4IgorCQkgIndyYl9oYW5kbGVzX2F2YWlsYWJsZT0lZCBcbiIsCisJCSBwd3JiX2hhbmRsZSwgcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4LAorCQkgcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4LCBwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2dsX2hhbmRsZSAqYWxsb2NfbWdtdF9zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGU7CisKKwlpZiAocGhiYS0+ZWhfc2dsX2huZGxfYXZibCkgeworCQlwc2dsX2hhbmRsZSA9IHBoYmEtPmVoX3NnbF9obmRsX2Jhc2VbcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4XTsKKwkJcGhiYS0+ZWhfc2dsX2huZGxfYmFzZVtwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXhdID0gTlVMTDsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAibWdtdF9zZ2xfYWxsb2NfaW5kZXg9JWQ9MHgleCBcbiIsCisJCQkgcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4LCBwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXgpOworCQlwaGJhLT5laF9zZ2xfaG5kbF9hdmJsLS07CisJCWlmIChwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXggPT0KKwkJICAgIChwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCAtIHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgLQorCQkgICAgIDEpKQorCQkJcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4ID0gMDsKKwkJZWxzZQorCQkJcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4Kys7CisJfSBlbHNlCisJCXBzZ2xfaGFuZGxlID0gTlVMTDsKKwlyZXR1cm4gcHNnbF9oYW5kbGU7Cit9CisKK3ZvaWQKK2ZyZWVfbWdtdF9zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlKQoreworCisJaWYgKHBoYmEtPmVoX3NnbF9obmRsX2Jhc2VbcGhiYS0+ZWhfc2dsX2ZyZWVfaW5kZXhdKSB7CisJCS8qCisJCSAqIHRoaXMgY2FuIGhhcHBlbiBpZiBjbGVhbl90YXNrIGlzIGNhbGxlZCBvbiBhIHRhc2sgdGhhdAorCQkgKiBmYWlsZWQgaW4geG1pdF90YXNrIG9yIGFsbG9jX3BkdS4KKwkJICovCisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiRG91YmxlIEZyZWUgaW4gZWggU0dMICxlaF9zZ2xfZnJlZV9pbmRleD0lZCBcbiIsCisJCQkgcGhiYS0+ZWhfc2dsX2ZyZWVfaW5kZXgpOworCQlyZXR1cm47CisJfQorCXBoYmEtPmVoX3NnbF9obmRsX2Jhc2VbcGhiYS0+ZWhfc2dsX2ZyZWVfaW5kZXhdID0gcHNnbF9oYW5kbGU7CisJcGhiYS0+ZWhfc2dsX2huZGxfYXZibCsrOworCWlmIChwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCA9PQorCSAgICAocGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgLSBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsIC0gMSkpCisJCXBoYmEtPmVoX3NnbF9mcmVlX2luZGV4ID0gMDsKKwllbHNlCisJCXBoYmEtPmVoX3NnbF9mcmVlX2luZGV4Kys7Cit9CisKK3N0YXRpYyB2b2lkCitiZV9jb21wbGV0ZV9pbyhzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJICAgICAgIHN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCkKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVfc3RhdHVzX2JocyAqc3RzX2JocyA9CisJCQkJKHN0cnVjdCBiZV9zdGF0dXNfYmhzICopaW9fdGFzay0+Y21kX2JoczsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKKwl1bnNpZ25lZCBpbnQgc2Vuc2VfbGVuOworCXVuc2lnbmVkIGNoYXIgKnNlbnNlOworCXUzMiByZXNpZCA9IDAsIGV4cF9jbWRzbiwgbWF4X2NtZHNuOworCXU4IHJzcCwgc3RhdHVzLCBmbGFnczsKKworCWV4cF9jbWRzbiA9IGJlMzJfdG9fY3B1KHBzb2wtPgorCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9leHBfY21kX3NuKSAvIDMyXQorCQkJJiBTT0xfRVhQX0NNRF9TTl9NQVNLKTsKKwltYXhfY21kc24gPSBiZTMyX3RvX2NwdSgocHNvbC0+CisJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2V4cF9jbWRfc24pIC8gMzJdCisJCQkmIFNPTF9FWFBfQ01EX1NOX01BU0spICsKKwkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9jbWRfd25kKQorCQkJCS8gMzJdICYgU09MX0NNRF9XTkRfTUFTSykgPj4gMjQpIC0gMSk7CisJcnNwID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc3ApIC8gMzJdCisJCQkJCQkmIFNPTF9SRVNQX01BU0spID4+IDE2KTsKKwlzdGF0dXMgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfc3RzKSAvIDMyXQorCQkJCQkJJiBTT0xfU1RTX01BU0spID4+IDgpOworCWZsYWdzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2ZsYWdzKSAvIDMyXQorCQkJCQkmIFNPTF9GTEFHU19NQVNLKSA+PiAyNCkgfCAweDgwOworCisJdGFzay0+c2MtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgc3RhdHVzOworCWlmIChyc3AgIT0gSVNDU0lfU1RBVFVTX0NNRF9DT01QTEVURUQpIHsKKwkJdGFzay0+c2MtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJZ290byB1bm1hcDsKKwl9CisKKwkvKiBiaWRpIG5vdCBpbml0aWFsbHkgc3VwcG9ydGVkICovCisJaWYgKGZsYWdzICYgKElTQ1NJX0ZMQUdfQ01EX1VOREVSRkxPVyB8IElTQ1NJX0ZMQUdfQ01EX09WRVJGTE9XKSkgeworCQlyZXNpZCA9IChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc19jbnQpIC8KKwkJCQkzMl0gJiBTT0xfUkVTX0NOVF9NQVNLKTsKKworCQlpZiAoIXN0YXR1cyAmJiAoZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9PVkVSRkxPVykpCisJCQl0YXNrLT5zYy0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCisJCWlmIChmbGFncyAmIElTQ1NJX0ZMQUdfQ01EX1VOREVSRkxPVykgeworCQkJc2NzaV9zZXRfcmVzaWQodGFzay0+c2MsIHJlc2lkKTsKKwkJCWlmICghc3RhdHVzICYmIChzY3NpX2J1ZmZsZW4odGFzay0+c2MpIC0gcmVzaWQgPAorCQkJICAgIHRhc2stPnNjLT51bmRlcmZsb3cpKQorCQkJCXRhc2stPnNjLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzID09IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikgeworCQlzZW5zZSA9IHN0c19iaHMtPnNlbnNlX2luZm8gKyBzaXplb2YodW5zaWduZWQgc2hvcnQpOworCQlzZW5zZV9sZW4gPQorCQkgICAgY3B1X3RvX2JlMTYoKHVuc2lnbmVkIHNob3J0KShzdHNfYmhzLT5zZW5zZV9pbmZvWzBdKSk7CisJCW1lbWNweSh0YXNrLT5zYy0+c2Vuc2VfYnVmZmVyLCBzZW5zZSwKKwkJICAgICAgIG1pbl90KHUxNiwgc2Vuc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpKTsKKwl9CisJaWYgKGlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5mbGFncyAmIElTQ1NJX0ZMQUdfQ01EX1JFQUQpIHsKKwkJaWYgKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfcmVzX2NudCkgLyAzMl0KKwkJCQkJCQkmIFNPTF9SRVNfQ05UX01BU0spCisJCQkgY29ubi0+cnhkYXRhX29jdGV0cyArPSAocHNvbC0+CisJCQkgICAgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc19jbnQpIC8gMzJdCisJCQkJCQkJJiBTT0xfUkVTX0NOVF9NQVNLKTsKKwl9Cit1bm1hcDoKKwlzY3NpX2RtYV91bm1hcChpb190YXNrLT5zY3NpX2NtbmQpOworCWlzY3NpX2NvbXBsZXRlX3Njc2lfdGFzayh0YXNrLCBleHBfY21kc24sIG1heF9jbWRzbik7Cit9CisKK3N0YXRpYyB2b2lkCitiZV9jb21wbGV0ZV9sb2dvdXQoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkgICBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGlzY3NpX2xvZ291dF9yc3AgKmhkcjsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKKworCWhkciA9IChzdHJ1Y3QgaXNjc2lfbG9nb3V0X3JzcCAqKXRhc2stPmhkcjsKKwloZHItPnQyd2FpdCA9IDU7CisJaGRyLT50MnJldGFpbiA9IDA7CisJaGRyLT5mbGFncyA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9mbGFncykgLyAzMl0KKwkJCQkJJiBTT0xfRkxBR1NfTUFTSykgPj4gMjQpIHwgMHg4MDsKKwloZHItPnJlc3BvbnNlID0gKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfcmVzcCkgLworCQkJCQkzMl0gJiBTT0xfUkVTUF9NQVNLKTsKKwloZHItPmV4cF9jbWRzbiA9IGNwdV90b19iZTMyKHBzb2wtPgorCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9leHBfY21kX3NuKSAvIDMyXQorCQkJCQkmIFNPTF9FWFBfQ01EX1NOX01BU0spOworCWhkci0+bWF4X2NtZHNuID0gYmUzMl90b19jcHUoKHBzb2wtPgorCQkJIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZXhwX2NtZF9zbikgLyAzMl0KKwkJCQkJJiBTT0xfRVhQX0NNRF9TTl9NQVNLKSArCisJCQkoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfY21kX3duZCkKKwkJCQkJLyAzMl0gJiBTT0xfQ01EX1dORF9NQVNLKSA+PiAyNCkgLSAxKTsKKwloZHItPmhsZW5ndGggPSAwOworCisJX19pc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgKHN0cnVjdCBpc2NzaV9oZHIgKiloZHIsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZAorYmVfY29tcGxldGVfdG1mKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHN0cnVjdCBzb2xfY3FlICpwc29sKQoreworCXN0cnVjdCBpc2NzaV90bV9yc3AgKmhkcjsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKKworCWhkciA9IChzdHJ1Y3QgaXNjc2lfdG1fcnNwICopdGFzay0+aGRyOworCWhkci0+ZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCisJCQkJCSYgU09MX0ZMQUdTX01BU0spID4+IDI0KSB8IDB4ODA7CisJaGRyLT5yZXNwb25zZSA9IChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc3ApIC8KKwkJCQkJMzJdICYgU09MX1JFU1BfTUFTSyk7CisJaGRyLT5leHBfY21kc24gPSBjcHVfdG9fYmUzMihwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLAorCQkJCSAgICAgaV9leHBfY21kX3NuKSAvIDMyXSAmIFNPTF9FWFBfQ01EX1NOX01BU0spOworCWhkci0+bWF4X2NtZHNuID0gYmUzMl90b19jcHUoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsCisJCQlpX2V4cF9jbWRfc24pIC8gMzJdICYgU09MX0VYUF9DTURfU05fTUFTSykgKworCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2NtZF93bmQpCisJCQkvIDMyXSAmIFNPTF9DTURfV05EX01BU0spID4+IDI0KSAtIDEpOworCV9faXNjc2lfY29tcGxldGVfcGR1KGNvbm4sIChzdHJ1Y3QgaXNjc2lfaGRyICopaGRyLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2h3aV9jb21wbGV0ZV9kcnZyX21zZ3Moc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkgICAgICAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCkKK3sKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbKChwc29sLT4KKwkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdICYKKwkJCQlTT0xfQ0lEX01BU0spID4+IDYpXTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFsoKHBzb2wtPgorCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIHdyYl9pbmRleCkgLworCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpXTsKKwlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOworCWZyZWVfd3JiX2hhbmRsZShwaGJhLCBwd3JiX2NvbnRleHQsIHB3cmJfaGFuZGxlKTsKKwlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitiZV9jb21wbGV0ZV9ub3Bpbl9yZXNwKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgICAgIHN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCkKK3sKKwlzdHJ1Y3QgaXNjc2lfbm9waW4gKmhkcjsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKKworCWhkciA9IChzdHJ1Y3QgaXNjc2lfbm9waW4gKil0YXNrLT5oZHI7CisJaGRyLT5mbGFncyA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9mbGFncykgLyAzMl0KKwkJCSYgU09MX0ZMQUdTX01BU0spID4+IDI0KSB8IDB4ODA7CisJaGRyLT5leHBfY21kc24gPSBjcHVfdG9fYmUzMihwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLAorCQkJCSAgICAgaV9leHBfY21kX3NuKSAvIDMyXSAmIFNPTF9FWFBfQ01EX1NOX01BU0spOworCWhkci0+bWF4X2NtZHNuID0gYmUzMl90b19jcHUoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsCisJCQlpX2V4cF9jbWRfc24pIC8gMzJdICYgU09MX0VYUF9DTURfU05fTUFTSykgKworCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2NtZF93bmQpCisJCQkvIDMyXSAmIFNPTF9DTURfV05EX01BU0spID4+IDI0KSAtIDEpOworCWhkci0+b3Bjb2RlID0gSVNDU0lfT1BfTk9PUF9JTjsKKwlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKWhkciwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9jb21wbGV0ZV9jbWQoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJICAgICBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBzb2xfY3FlICpwc29sKQoreworCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisJc3RydWN0IGlzY3NpX3dyYiAqcHdyYiA9IE5VTEw7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2s7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+CisJCXdyYl9jb250ZXh0WygocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXQorCQkmIFNPTF9DSURfTUFTSykgPj4gNildOworCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkWygocHNvbC0+CisJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgd3JiX2luZGV4KSAvCisJCQkJMzJdICYgU09MX1dSQl9JTkRFWF9NQVNLKSA+PiAxNildOworCisJdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOworCWlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CisJcHdyYiA9IHB3cmJfaGFuZGxlLT5wd3JiOworCXN3aXRjaCAoKHB3cmItPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSkgLyAzMl0gJgorCQkgV1JCX1RZUEVfTUFTSykgPj4gMjgpIHsKKwljYXNlIEhXSF9UWVBFX0lPOgorCWNhc2UgSFdIX1RZUEVfSU9fUkQ6CisJCWlmICgodGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSykgPT0KKwkJICAgIElTQ1NJX09QX05PT1BfT1VUKSB7CisJCQliZV9jb21wbGV0ZV9ub3Bpbl9yZXNwKGJlaXNjc2lfY29ubiwgdGFzaywgcHNvbCk7CisJCX0gZWxzZQorCQkJYmVfY29tcGxldGVfaW8oYmVpc2NzaV9jb25uLCB0YXNrLCBwc29sKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXSF9UWVBFX0xPR09VVDoKKwkJYmVfY29tcGxldGVfbG9nb3V0KGJlaXNjc2lfY29ubiwgdGFzaywgcHNvbCk7CisJCWJyZWFrOworCisJY2FzZSBIV0hfVFlQRV9MT0dJTjoKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJcdFx0IE5vIEhXSF9UWVBFX0xPR0lOIEV4cGVjdGVkIGluIGh3aV9jb21wbGV0ZV9jbWQiCisJCQkgIi0gU29saWNpdGVkIHBhdGggXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXSF9UWVBFX1RNRjoKKwkJYmVfY29tcGxldGVfdG1mKGJlaXNjc2lfY29ubiwgdGFzaywgcHNvbCk7CisJCWJyZWFrOworCisJY2FzZSBIV0hfVFlQRV9OT1A6CisJCWJlX2NvbXBsZXRlX25vcGluX3Jlc3AoYmVpc2NzaV9jb25uLCB0YXNrLCBwc29sKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAid3JiX2luZGV4IDB4JXggQ0lEIDB4JXhcbiIsCisJCQkgICAgKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUpIC8KKwkJCQkJMzJdICYgU09MX1dSQl9JTkRFWF9NQVNLKSA+PiAxNiksCisJCQkgICAgKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdCisJCQkJCSYgU09MX0NJRF9NQVNLKSA+PiA2KSk7CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmh3aV9nZXRfYXN5bmNfYnVzeV9saXN0KHN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQKKwkJCQkJICAqcGFzeW5jX2N0eCwgdW5zaWduZWQgaW50IGlzX2hlYWRlciwKKwkJCQkJICB1bnNpZ25lZCBpbnQgaG9zdF93cml0ZV9wdHIpCit7CisJaWYgKGlzX2hlYWRlcikKKwkJcmV0dXJuICZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtob3N0X3dyaXRlX3B0cl0uCisJCSAgICBoZWFkZXJfYnVzeV9saXN0OworCWVsc2UKKwkJcmV0dXJuICZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtob3N0X3dyaXRlX3B0cl0uZGF0YV9idXN5X2xpc3Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqCitod2lfZ2V0X2FzeW5jX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCSAgICAgc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkgICAgIHN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHgsCisJCSAgICAgc3RydWN0IGlfdF9kcGR1X2NxZSAqcGRwZHVfY3FlLCB1bnNpZ25lZCBpbnQgKnBjcV9pbmRleCkKK3sKKwlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgcGh5c19hZGRyOworCXN0cnVjdCBsaXN0X2hlYWQgKnBidXN5X2xpc3Q7CisJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oYW5kbGUgPSBOVUxMOworCWludCBidWZmZXJfbGVuID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcl9pbmRleCA9IC0xOworCXVuc2lnbmVkIGNoYXIgaXNfaGVhZGVyID0gMDsKKworCXBoeXNfYWRkci51LmEzMi5hZGRyZXNzX2xvID0KKwkgICAgcGRwZHVfY3FlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGRiX2FkZHJfbG8pIC8gMzJdIC0KKwkgICAgKChwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwgZHBsKSAvIDMyXQorCQkJCQkJJiBQRFVDUUVfRFBMX01BU0spID4+IDE2KTsKKwlwaHlzX2FkZHIudS5hMzIuYWRkcmVzc19oaSA9CisJICAgIHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBkYl9hZGRyX2hpKSAvIDMyXTsKKworCXBoeXNfYWRkci51LmE2NC5hZGRyZXNzID0KKwkJCSooKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgmcGh5c19hZGRyLnUuYTY0LmFkZHJlc3MpKTsKKworCXN3aXRjaCAocGRwZHVfY3FlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGNvZGUpIC8gMzJdCisJCQkmIFBEVUNRRV9DT0RFX01BU0spIHsKKwljYXNlIFVOU09MX0hEUl9OT1RJRlk6CisJCWlzX2hlYWRlciA9IDE7CisKKwkJcGJ1c3lfbGlzdCA9IGh3aV9nZXRfYXN5bmNfYnVzeV9saXN0KHBhc3luY19jdHgsIDEsCisJCQkocGRwZHVfY3FlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsCisJCQlpbmRleCkgLyAzMl0gJiBQRFVDUUVfSU5ERVhfTUFTSykpOworCisJCWJ1ZmZlcl9sZW4gPSAodW5zaWduZWQgaW50KShwaHlzX2FkZHIudS5hNjQuYWRkcmVzcyAtCisJCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnBhX2Jhc2UudS5hNjQuYWRkcmVzcyk7CisKKwkJYnVmZmVyX2luZGV4ID0gYnVmZmVyX2xlbiAvCisJCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmJ1ZmZlcl9zaXplOworCisJCWJyZWFrOworCWNhc2UgVU5TT0xfREFUQV9OT1RJRlk6CisJCXBidXN5X2xpc3QgPSBod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChwYXN5bmNfY3R4LCAwLCAocGRwZHVfY3FlLT4KKwkJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLAorCQkJCQlpbmRleCkgLyAzMl0gJiBQRFVDUUVfSU5ERVhfTUFTSykpOworCQlidWZmZXJfbGVuID0gKHVuc2lnbmVkIGxvbmcpKHBoeXNfYWRkci51LmE2NC5hZGRyZXNzIC0KKwkJCQkJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5wYV9iYXNlLnUuCisJCQkJCWE2NC5hZGRyZXNzKTsKKwkJYnVmZmVyX2luZGV4ID0gYnVmZmVyX2xlbiAvIHBhc3luY19jdHgtPmFzeW5jX2RhdGEuYnVmZmVyX3NpemU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBidXN5X2xpc3QgPSBOVUxMOworCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSJVbmV4cGVjdGVkIGNvZGU9JWQgXG4iLAorCQkJIHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLAorCQkJCQljb2RlKSAvIDMyXSAmIFBEVUNRRV9DT0RFX01BU0spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlXQVJOX09OKCEoYnVmZmVyX2luZGV4IDw9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEubnVtX2VudHJpZXMpKTsKKwlXQVJOX09OKGxpc3RfZW1wdHkocGJ1c3lfbGlzdCkpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFzeW5jX2hhbmRsZSwgcGJ1c3lfbGlzdCwgbGluaykgeworCQlXQVJOX09OKHBhc3luY19oYW5kbGUtPmNvbnN1bWVkKTsKKwkJaWYgKHBhc3luY19oYW5kbGUtPmluZGV4ID09IGJ1ZmZlcl9pbmRleCkKKwkJCWJyZWFrOworCX0KKworCVdBUk5fT04oIXBhc3luY19oYW5kbGUpOworCisJcGFzeW5jX2hhbmRsZS0+Y3JpID0gKHVuc2lnbmVkIHNob3J0KWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZDsKKwlwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIgPSBpc19oZWFkZXI7CisJcGFzeW5jX2hhbmRsZS0+YnVmZmVyX2xlbiA9ICgocGRwZHVfY3FlLT4KKwkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwgZHBsKSAvIDMyXQorCQkJJiBQRFVDUUVfRFBMX01BU0spID4+IDE2KTsKKworCSpwY3FfaW5kZXggPSAocGRwZHVfY3FlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsCisJCQlpbmRleCkgLyAzMl0gJiBQRFVDUUVfSU5ERVhfTUFTSyk7CisJcmV0dXJuIHBhc3luY19oYW5kbGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2h3aV91cGRhdGVfYXN5bmNfd3JpdGFibGVzKHN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHgsCisJCQkgICB1bnNpZ25lZCBpbnQgaXNfaGVhZGVyLCB1bnNpZ25lZCBpbnQgY3FfaW5kZXgpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcGJ1c3lfbGlzdDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hhbmRsZTsKKwl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXMsIHdyaXRhYmxlcyA9IDA7CisJdW5zaWduZWQgaW50ICpwZXBfcmVhZF9wdHIsICpwd3JpdGFibGVzOworCisKKwlpZiAoaXNfaGVhZGVyKSB7CisJCXBlcF9yZWFkX3B0ciA9ICZwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZXBfcmVhZF9wdHI7CisJCXB3cml0YWJsZXMgPSAmcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLndyaXRhYmxlczsKKwkJbnVtX2VudHJpZXMgPSBwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIubnVtX2VudHJpZXM7CisJfSBlbHNlIHsKKwkJcGVwX3JlYWRfcHRyID0gJnBhc3luY19jdHgtPmFzeW5jX2RhdGEuZXBfcmVhZF9wdHI7CisJCXB3cml0YWJsZXMgPSAmcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS53cml0YWJsZXM7CisJCW51bV9lbnRyaWVzID0gcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5udW1fZW50cmllczsKKwl9CisKKwl3aGlsZSAoKCpwZXBfcmVhZF9wdHIpICE9IGNxX2luZGV4KSB7CisJCSgqcGVwX3JlYWRfcHRyKSsrOworCQkqcGVwX3JlYWRfcHRyID0gKCpwZXBfcmVhZF9wdHIpICUgbnVtX2VudHJpZXM7CisKKwkJcGJ1c3lfbGlzdCA9IGh3aV9nZXRfYXN5bmNfYnVzeV9saXN0KHBhc3luY19jdHgsIGlzX2hlYWRlciwKKwkJCQkJCSAgICAgKnBlcF9yZWFkX3B0cik7CisJCWlmICh3cml0YWJsZXMgPT0gMCkKKwkJCVdBUk5fT04obGlzdF9lbXB0eShwYnVzeV9saXN0KSk7CisKKwkJaWYgKCFsaXN0X2VtcHR5KHBidXN5X2xpc3QpKSB7CisJCQlwYXN5bmNfaGFuZGxlID0gbGlzdF9lbnRyeShwYnVzeV9saXN0LT5uZXh0LAorCQkJCQkJICAgc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUsCisJCQkJCQkgICBsaW5rKTsKKwkJCVdBUk5fT04oIXBhc3luY19oYW5kbGUpOworCQkJcGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQgPSAxOworCQl9CisKKwkJd3JpdGFibGVzKys7CisJfQorCisJaWYgKCF3cml0YWJsZXMpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJEdXBsaWNhdGUgbm90aWZpY2F0aW9uIHJlY2VpdmVkIC0gaW5kZXggMHgleCEhXG4iLAorCQkJIGNxX2luZGV4KTsKKwkJV0FSTl9PTigxKTsKKwl9CisKKwkqcHdyaXRhYmxlcyA9ICpwd3JpdGFibGVzICsgd3JpdGFibGVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGh3aV9mcmVlX2FzeW5jX21zZyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBjcmkpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHg7CisJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oYW5kbGUsICp0bXBfaGFuZGxlOworCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0OworCXVuc2lnbmVkIGludCBpID0gMDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBhc3luY19jdHggPSBIV0lfR0VUX0FTWU5DX1BEVV9DVFgocGh3aV9jdHJscik7CisKKwlwbGlzdCAgPSAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmxpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFzeW5jX2hhbmRsZSwgdG1wX2hhbmRsZSwgcGxpc3QsIGxpbmspIHsKKwkJbGlzdF9kZWwoJnBhc3luY19oYW5kbGUtPmxpbmspOworCisJCWlmIChpID09IDApIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnBhc3luY19oYW5kbGUtPmxpbmssCisJCQkJICAgICAgJnBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2xpc3QpOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfZW50cmllcysrOworCQkJaSsrOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmcGFzeW5jX2hhbmRsZS0+bGluaywKKwkJCQkgICAgICAmcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5mcmVlX2xpc3QpOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5mcmVlX2VudHJpZXMrKzsKKwkJCWkrKzsKKwkJfQorCX0KKworCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUubGlzdCk7CisJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmhkcl9yZWNlaXZlZCA9IDA7CisJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmJ5dGVzX3JlY2VpdmVkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwaHlzX2FkZHIgKgoraHdpX2dldF9yaW5nX2FkZHJlc3Moc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eCwKKwkJICAgICB1bnNpZ25lZCBpbnQgaXNfaGVhZGVyLCB1bnNpZ25lZCBpbnQgaG9zdF93cml0ZV9wdHIpCit7CisJc3RydWN0IHBoeXNfYWRkciAqcGFzeW5jX3NnZSA9IE5VTEw7CisKKwlpZiAoaXNfaGVhZGVyKQorCQlwYXN5bmNfc2dlID0gcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnJpbmdfYmFzZTsKKwllbHNlCisJCXBhc3luY19zZ2UgPSBwYXN5bmNfY3R4LT5hc3luY19kYXRhLnJpbmdfYmFzZTsKKworCXJldHVybiBwYXN5bmNfc2dlICsgaG9zdF93cml0ZV9wdHI7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9wb3N0X2FzeW5jX2J1ZmZlcnMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCSAgIHVuc2lnbmVkIGludCBpc19oZWFkZXIpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHg7CisJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oYW5kbGU7CisJc3RydWN0IGxpc3RfaGVhZCAqcGZyZWVfbGluaywgKnBidXN5X2xpc3Q7CisJc3RydWN0IHBoeXNfYWRkciAqcGFzeW5jX3NnZTsKKwl1bnNpZ25lZCBpbnQgcmluZ19pZCwgbnVtX2VudHJpZXM7CisJdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfbnVtOworCXVuc2lnbmVkIGludCB3cml0YWJsZXM7CisJdW5zaWduZWQgaW50IGkgPSAwOworCXUzMiBkb29yYmVsbCA9IDA7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCisJaWYgKGlzX2hlYWRlcikgeworCQludW1fZW50cmllcyA9IHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5udW1fZW50cmllczsKKwkJd3JpdGFibGVzID0gbWluKHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci53cml0YWJsZXMsCisJCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfZW50cmllcyk7CisJCXBmcmVlX2xpbmsgPSBwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZnJlZV9saXN0Lm5leHQ7CisJCWhvc3Rfd3JpdGVfbnVtID0gcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmhvc3Rfd3JpdGVfcHRyOworCQlyaW5nX2lkID0gcGh3aV9jdHJsci0+ZGVmYXVsdF9wZHVfaGRyLmlkOworCX0gZWxzZSB7CisJCW51bV9lbnRyaWVzID0gcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5udW1fZW50cmllczsKKwkJd3JpdGFibGVzID0gbWluKHBhc3luY19jdHgtPmFzeW5jX2RhdGEud3JpdGFibGVzLAorCQkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9lbnRyaWVzKTsKKwkJcGZyZWVfbGluayA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9saXN0Lm5leHQ7CisJCWhvc3Rfd3JpdGVfbnVtID0gcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5ob3N0X3dyaXRlX3B0cjsKKwkJcmluZ19pZCA9IHBod2lfY3RybHItPmRlZmF1bHRfcGR1X2RhdGEuaWQ7CisJfQorCisJd3JpdGFibGVzID0gKHdyaXRhYmxlcyAvIDgpICogODsKKwlpZiAod3JpdGFibGVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCB3cml0YWJsZXM7IGkrKykgeworCQkJcGJ1c3lfbGlzdCA9CisJCQkgICAgaHdpX2dldF9hc3luY19idXN5X2xpc3QocGFzeW5jX2N0eCwgaXNfaGVhZGVyLAorCQkJCQkJICAgIGhvc3Rfd3JpdGVfbnVtKTsKKwkJCXBhc3luY19oYW5kbGUgPQorCQkJICAgIGxpc3RfZW50cnkocGZyZWVfbGluaywgc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUsCisJCQkJCQkJCWxpbmspOworCQkJV0FSTl9PTighcGFzeW5jX2hhbmRsZSk7CisJCQlwYXN5bmNfaGFuZGxlLT5jb25zdW1lZCA9IDA7CisKKwkJCXBmcmVlX2xpbmsgPSBwZnJlZV9saW5rLT5uZXh0OworCisJCQlwYXN5bmNfc2dlID0gaHdpX2dldF9yaW5nX2FkZHJlc3MocGFzeW5jX2N0eCwKKwkJCQkJCWlzX2hlYWRlciwgaG9zdF93cml0ZV9udW0pOworCisJCQlwYXN5bmNfc2dlLT5oaSA9IHBhc3luY19oYW5kbGUtPnBhLnUuYTMyLmFkZHJlc3NfbG87CisJCQlwYXN5bmNfc2dlLT5sbyA9IHBhc3luY19oYW5kbGUtPnBhLnUuYTMyLmFkZHJlc3NfaGk7CisKKwkJCWxpc3RfbW92ZSgmcGFzeW5jX2hhbmRsZS0+bGluaywgcGJ1c3lfbGlzdCk7CisKKwkJCWhvc3Rfd3JpdGVfbnVtKys7CisJCQlob3N0X3dyaXRlX251bSA9IGhvc3Rfd3JpdGVfbnVtICUgbnVtX2VudHJpZXM7CisJCX0KKworCQlpZiAoaXNfaGVhZGVyKSB7CisJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuaG9zdF93cml0ZV9wdHIgPQorCQkJCQkJCWhvc3Rfd3JpdGVfbnVtOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfZW50cmllcyAtPSB3cml0YWJsZXM7CisJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzIC09IHdyaXRhYmxlczsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5idXN5X2VudHJpZXMgKz0gd3JpdGFibGVzOworCQl9IGVsc2UgeworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5ob3N0X3dyaXRlX3B0ciA9IGhvc3Rfd3JpdGVfbnVtOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5mcmVlX2VudHJpZXMgLT0gd3JpdGFibGVzOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS53cml0YWJsZXMgLT0gd3JpdGFibGVzOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5idXN5X2VudHJpZXMgKz0gd3JpdGFibGVzOworCQl9CisKKwkJZG9vcmJlbGwgfD0gcmluZ19pZCAmIERCX0RFRl9QRFVfUklOR19JRF9NQVNLOworCQlkb29yYmVsbCB8PSAxIDw8IERCX0RFRl9QRFVfUkVBUk1fU0hJRlQ7CisJCWRvb3JiZWxsIHw9IDAgPDwgREJfREVGX1BEVV9FVkVOVF9TSElGVDsKKwkJZG9vcmJlbGwgfD0gKHdyaXRhYmxlcyAmIERCX0RFRl9QRFVfQ1FQUk9DX01BU0spCisJCQkJCTw8IERCX0RFRl9QRFVfQ1FQUk9DX1NISUZUOworCisJCWlvd3JpdGUzMihkb29yYmVsbCwgcGhiYS0+ZGJfdmEgKyBEQl9SWFVMUDBfT0ZGU0VUKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9mbHVzaF9kZWZhdWx0X3BkdV9idWZmZXIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCQkgc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCQkgc3RydWN0IGlfdF9kcGR1X2NxZSAqcGRwZHVfY3FlKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgY3FfaW5kZXggPSAtMTsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBhc3luY19jdHggPSBIV0lfR0VUX0FTWU5DX1BEVV9DVFgocGh3aV9jdHJscik7CisKKwlwYXN5bmNfaGFuZGxlID0gaHdpX2dldF9hc3luY19oYW5kbGUocGhiYSwgYmVpc2NzaV9jb25uLCBwYXN5bmNfY3R4LAorCQkJCQkgICAgIHBkcGR1X2NxZSwgJmNxX2luZGV4KTsKKwlCVUdfT04ocGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyICE9IDApOworCWlmIChwYXN5bmNfaGFuZGxlLT5jb25zdW1lZCA9PSAwKQorCQlod2lfdXBkYXRlX2FzeW5jX3dyaXRhYmxlcyhwYXN5bmNfY3R4LCBwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIsCisJCQkJCSAgIGNxX2luZGV4KTsKKworCWh3aV9mcmVlX2FzeW5jX21zZyhwaGJhLCBwYXN5bmNfaGFuZGxlLT5jcmkpOworCWh3aV9wb3N0X2FzeW5jX2J1ZmZlcnMocGhiYSwgcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraHdpX2Z3ZF9hc3luY19tc2coc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJICBzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4LCB1bnNpZ25lZCBzaG9ydCBjcmkpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcGxpc3Q7CisJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oYW5kbGU7CisJdm9pZCAqcGhkciA9IE5VTEw7CisJdW5zaWduZWQgaW50IGhkcl9sZW4gPSAwLCBidWZfbGVuID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBpbmRleCA9IDAsIG9mZnNldCA9IDA7CisJdm9pZCAqcGZpcnN0X2J1ZmZlciA9IE5VTEw7CisJdW5zaWduZWQgaW50IG51bV9idWYgPSAwOworCisJcGxpc3QgPSAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmxpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhc3luY19oYW5kbGUsIHBsaXN0LCBsaW5rKSB7CisJCWlmIChpbmRleCA9PSAwKSB7CisJCQlwaGRyID0gcGFzeW5jX2hhbmRsZS0+cGJ1ZmZlcjsKKwkJCWhkcl9sZW4gPSBwYXN5bmNfaGFuZGxlLT5idWZmZXJfbGVuOworCQl9IGVsc2UgeworCQkJYnVmX2xlbiA9IHBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW47CisJCQlpZiAoIW51bV9idWYpIHsKKwkJCQlwZmlyc3RfYnVmZmVyID0gcGFzeW5jX2hhbmRsZS0+cGJ1ZmZlcjsKKwkJCQludW1fYnVmKys7CisJCQl9CisJCQltZW1jcHkocGZpcnN0X2J1ZmZlciArIG9mZnNldCwKKwkJCSAgICAgICBwYXN5bmNfaGFuZGxlLT5wYnVmZmVyLCBidWZfbGVuKTsKKwkJCW9mZnNldCA9IGJ1Zl9sZW47CisJCX0KKwkJaW5kZXgrKzsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX3Byb2Nlc3NfYXN5bmNfcGR1KGJlaXNjc2lfY29ubiwgcGhiYSwKKwkJCQkJICAgYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAorCQkJCQkgICBwaGRyLCBoZHJfbGVuLCBwZmlyc3RfYnVmZmVyLAorCQkJCQkgICBidWZfbGVuKTsKKworCWlmIChzdGF0dXMgPT0gMCkKKwkJaHdpX2ZyZWVfYXN5bmNfbXNnKHBoYmEsIGNyaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2h3aV9nYXRoZXJfYXN5bmNfcGR1KHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgICBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCSAgICAgc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oYW5kbGUpCit7CisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJdW5zaWduZWQgaW50IGJ5dGVzX25lZWRlZCA9IDAsIHN0YXR1cyA9IDA7CisJdW5zaWduZWQgc2hvcnQgY3JpID0gcGFzeW5jX2hhbmRsZS0+Y3JpOworCXN0cnVjdCBwZHVfYmFzZSAqcHBkdTsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBhc3luY19jdHggPSBIV0lfR0VUX0FTWU5DX1BEVV9DVFgocGh3aV9jdHJscik7CisKKwlsaXN0X2RlbCgmcGFzeW5jX2hhbmRsZS0+bGluayk7CisJaWYgKHBhc3luY19oYW5kbGUtPmlzX2hlYWRlcikgeworCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuYnVzeV9lbnRyaWVzLS07CisJCWlmIChwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuaGRyX3JlY2VpdmVkKSB7CisJCQlod2lfZnJlZV9hc3luY19tc2cocGhiYSwgY3JpKTsKKwkJCUJVRygpOworCQl9CisKKwkJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmJ5dGVzX3JlY2VpdmVkID0gMDsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmhkcl9yZWNlaXZlZCA9IDE7CisJCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5oZHJfbGVuID0KKwkJCQkodW5zaWduZWQgc2hvcnQpcGFzeW5jX2hhbmRsZS0+YnVmZmVyX2xlbjsKKwkJbGlzdF9hZGRfdGFpbCgmcGFzeW5jX2hhbmRsZS0+bGluaywKKwkJCSAgICAgICZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUubGlzdCk7CisKKwkJcHBkdSA9IHBhc3luY19oYW5kbGUtPnBidWZmZXI7CisJCWJ5dGVzX25lZWRlZCA9ICgoKChwcGR1LT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9wZHVfYmFzZSwKKwkJCWRhdGFfbGVuX2hpKSAvIDMyXSAmIFBEVUJBU0VfREFUQUxFTkhJX01BU0spIDw8IDgpICYKKwkJCTB4RkZGRjAwMDApIHwgKChiZTE2X3RvX2NwdSgocHBkdS0+CisJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9wZHVfYmFzZSwgZGF0YV9sZW5fbG8pIC8gMzJdCisJCQkmIFBEVUJBU0VfREFUQUxFTkxPX01BU0spID4+IDE2KSkgJiAweDAwMDBGRkZGKSk7CisKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuYnl0ZXNfbmVlZGVkID0KKwkJCSAgICBieXRlc19uZWVkZWQ7CisKKwkJCWlmIChieXRlc19uZWVkZWQgPT0gMCkKKwkJCQlzdGF0dXMgPSBod2lfZndkX2FzeW5jX21zZyhiZWlzY3NpX2Nvbm4sIHBoYmEsCisJCQkJCQkJICAgcGFzeW5jX2N0eCwgY3JpKTsKKwkJfQorCX0gZWxzZSB7CisJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuYnVzeV9lbnRyaWVzLS07CisJCWlmIChwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuaGRyX3JlY2VpdmVkKSB7CisJCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfaGFuZGxlLT5saW5rLAorCQkJCSAgICAgICZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuCisJCQkJICAgICAgbGlzdCk7CisJCQlwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuCisJCQkJYnl0ZXNfcmVjZWl2ZWQgKz0KKwkJCQkodW5zaWduZWQgc2hvcnQpcGFzeW5jX2hhbmRsZS0+YnVmZmVyX2xlbjsKKworCQkJaWYgKHBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS4KKwkJCSAgICBieXRlc19yZWNlaXZlZCA+PQorCQkJICAgIHBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS4KKwkJCSAgICBieXRlc19uZWVkZWQpCisJCQkJc3RhdHVzID0gaHdpX2Z3ZF9hc3luY19tc2coYmVpc2NzaV9jb25uLCBwaGJhLAorCQkJCQkJCSAgIHBhc3luY19jdHgsIGNyaSk7CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgaHdpX3Byb2Nlc3NfZGVmYXVsdF9wZHVfcmluZyhzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkJCSBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJCSBzdHJ1Y3QgaV90X2RwZHVfY3FlICpwZHBkdV9jcWUpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHg7CisJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oYW5kbGUgPSBOVUxMOworCXVuc2lnbmVkIGludCBjcV9pbmRleCA9IC0xOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGFzeW5jX2N0eCA9IEhXSV9HRVRfQVNZTkNfUERVX0NUWChwaHdpX2N0cmxyKTsKKwlwYXN5bmNfaGFuZGxlID0gaHdpX2dldF9hc3luY19oYW5kbGUocGhiYSwgYmVpc2NzaV9jb25uLCBwYXN5bmNfY3R4LAorCQkJCQkgICAgIHBkcGR1X2NxZSwgJmNxX2luZGV4KTsKKworCWlmIChwYXN5bmNfaGFuZGxlLT5jb25zdW1lZCA9PSAwKQorCQlod2lfdXBkYXRlX2FzeW5jX3dyaXRhYmxlcyhwYXN5bmNfY3R4LCBwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIsCisJCQkJCSAgIGNxX2luZGV4KTsKKwlod2lfZ2F0aGVyX2FzeW5jX3BkdShiZWlzY3NpX2Nvbm4sIHBoYmEsIHBhc3luY19oYW5kbGUpOworCWh3aV9wb3N0X2FzeW5jX2J1ZmZlcnMocGhiYSwgcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBiZWlzY3NpX3Byb2Nlc3NfY3Eoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxOworCXN0cnVjdCBzb2xfY3FlICpzb2w7CisJc3RydWN0IGRtc2dfY3FlICpkbXNnOworCXVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkID0gMDsKKwl1bnNpZ25lZCBpbnQgdG90X251bXAgPSAwOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubjsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwljcSA9ICZwaHdpX2NvbnRleHQtPmJlX2NxOworCXNvbCA9IHF1ZXVlX3RhaWxfbm9kZShjcSk7CisKKwl3aGlsZSAoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCB2YWxpZCkgLyAzMl0gJgorCSAgICAgICBDUUVfVkFMSURfTUFTSykgeworCQliZV9kd3NfbGVfdG9fY3B1KHNvbCwgc2l6ZW9mKHN0cnVjdCBzb2xfY3FlKSk7CisKKwkJYmVpc2NzaV9jb25uID0gcGhiYS0+Y29ubl90YWJsZVsodTMyKSAoc29sLT4KKwkJCQkgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXSAmCisJCQkJIFNPTF9DSURfTUFTSykgPj4gNl07CisKKwkJaWYgKCFiZWlzY3NpX2Nvbm4gfHwgIWJlaXNjc2lfY29ubi0+ZXApIHsKKwkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJCSAgICAgIkNvbm5lY3Rpb24gdGFibGUgZW1wdHkgZm9yIGNpZCA9ICVkXG4iLAorCQkJCSAgICAgKHUzMikoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLAorCQkJCSAgICAgY2lkKSAvIDMyXSAmIFNPTF9DSURfTUFTSykgPj4gNik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChudW1fcHJvY2Vzc2VkID49IDMyKSB7CisJCQlod2lfcmluZ19jcV9kYihwaGJhLCBwaHdpX2NvbnRleHQtPmJlX2NxLmlkLAorCQkJCQludW1fcHJvY2Vzc2VkLCAwLCAwKTsKKwkJCXRvdF9udW1wICs9IG51bV9wcm9jZXNzZWQ7CisJCQludW1fcHJvY2Vzc2VkID0gMDsKKwkJfQorCisJCXN3aXRjaCAoKHUzMikgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCisJCQkzMl0gJiBDUUVfQ09ERV9NQVNLKSB7CisJCWNhc2UgU09MX0NNRF9DT01QTEVURToKKwkJCWh3aV9jb21wbGV0ZV9jbWQoYmVpc2NzaV9jb25uLCBwaGJhLCBzb2wpOworCQkJYnJlYWs7CisJCWNhc2UgRFJJVkVSTVNHX05PVElGWToKKwkJCVNFX0RFQlVHKERCR19MVkxfOCwgIlJlY2VpdmVkIERSSVZFUk1TR19OT1RJRlkgXG4iKTsKKwkJCWRtc2cgPSAoc3RydWN0IGRtc2dfY3FlICopc29sOworCQkJaHdpX2NvbXBsZXRlX2RydnJfbXNncyhiZWlzY3NpX2Nvbm4sIHBoYmEsIHNvbCk7CisJCQlicmVhazsKKwkJY2FzZSBVTlNPTF9IRFJfTk9USUZZOgorCQljYXNlIFVOU09MX0RBVEFfTk9USUZZOgorCQkJU0VfREVCVUcoREJHX0xWTF84LCAiUmVjZWl2ZWQgVU5TT0xfSERSL0RBVEFfTk9USUZZXG4iKTsKKwkJCWh3aV9wcm9jZXNzX2RlZmF1bHRfcGR1X3JpbmcoYmVpc2NzaV9jb25uLCBwaGJhLAorCQkJCQkgICAgIChzdHJ1Y3QgaV90X2RwZHVfY3FlICopc29sKTsKKwkJCWJyZWFrOworCQljYXNlIENYTl9JTlZBTElEQVRFX0lOREVYX05PVElGWToKKwkJY2FzZSBDTURfSU5WQUxJREFURURfTk9USUZZOgorCQljYXNlIENYTl9JTlZBTElEQVRFX05PVElGWToKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCQkgIklnbm9yaW5nIENRIEVycm9yIG5vdGlmaWNhdGlvbiBmb3IgY21kL2N4biIKKwkJCQkgImludmFsaWRhdGVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgU09MX0NNRF9LSUxMRURfREFUQV9ESUdFU1RfRVJSOgorCQljYXNlIENNRF9LSUxMRURfSU5WQUxJRF9TVEFUU05fUkNWRDoKKwkJY2FzZSBDTURfS0lMTEVEX0lOVkFMSURfUjJUX1JDVkQ6CisJCWNhc2UgQ01EX0NYTl9LSUxMRURfTFVOX0lOVkFMSUQ6CisJCWNhc2UgQ01EX0NYTl9LSUxMRURfSUNEX0lOVkFMSUQ6CisJCWNhc2UgQ01EX0NYTl9LSUxMRURfSVRUX0lOVkFMSUQ6CisJCWNhc2UgQ01EX0NYTl9LSUxMRURfU0VRX09VVE9GT1JERVI6CisJCWNhc2UgQ01EX0NYTl9LSUxMRURfSU5WQUxJRF9EQVRBU05fUkNWRDoKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCQkgIkNRIEVycm9yIG5vdGlmaWNhdGlvbiBmb3IgY21kLi4gIgorCQkJCSAiY29kZSAlZCBjaWQgMHgleFxuIiwKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCisJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCisJCQkJIChzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBTT0xfQ0lEX01BU0spKTsKKwkJCWJyZWFrOworCQljYXNlIFVOU09MX0RBVEFfRElHRVNUX0VSUk9SX05PVElGWToKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCQkgIkRpZ2VzdCBlcnJvciBvbiBkZWYgcGR1IHJpbmcsIGRyb3BwaW5nLi5cbiIpOworCQkJaHdpX2ZsdXNoX2RlZmF1bHRfcGR1X2J1ZmZlcihwaGJhLCBiZWlzY3NpX2Nvbm4sCisJCQkJCSAgICAgKHN0cnVjdCBpX3RfZHBkdV9jcWUgKikgc29sKTsKKwkJCWJyZWFrOworCQljYXNlIENYTl9LSUxMRURfUERVX1NJWkVfRVhDRUVEU19EU0w6CisJCWNhc2UgQ1hOX0tJTExFRF9CVVJTVF9MRU5fTUlTTUFUQ0g6CisJCWNhc2UgQ1hOX0tJTExFRF9BSFNfUkNWRDoKKwkJY2FzZSBDWE5fS0lMTEVEX0hEUl9ESUdFU1RfRVJSOgorCQljYXNlIENYTl9LSUxMRURfVU5LTk9XTl9IRFI6CisJCWNhc2UgQ1hOX0tJTExFRF9TVEFMRV9JVFRfVFRUX1JDVkQ6CisJCWNhc2UgQ1hOX0tJTExFRF9JTlZBTElEX0lUVF9UVFRfUkNWRDoKKwkJY2FzZSBDWE5fS0lMTEVEX1RJTUVEX09VVDoKKwkJY2FzZSBDWE5fS0lMTEVEX0ZJTl9SQ1ZEOgorCQljYXNlIENYTl9LSUxMRURfQkFEX1VOU09MX1BEVV9SQ1ZEOgorCQljYXNlIENYTl9LSUxMRURfQkFEX1dSQl9JTkRFWF9FUlJPUjoKKwkJY2FzZSBDWE5fS0lMTEVEX09WRVJfUlVOX1JFU0lEVUFMOgorCQljYXNlIENYTl9LSUxMRURfVU5ERVJfUlVOX1JFU0lEVUFMOgorCQljYXNlIENYTl9LSUxMRURfQ01ORF9EQVRBX05PVF9PTl9TQU1FX0NPTk46CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciAlZCwgcmVzZXR0aW5nIENJRCAiCisJCQkJICIweCV4Li4uXG4iLAorCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KKwkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KKwkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKTsKKwkJCWlzY3NpX2Nvbm5fZmFpbHVyZShiZWlzY3NpX2Nvbm4tPmNvbm4sCisJCQkJCSAgIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CisJCQlicmVhazsKKwkJY2FzZSBDWE5fS0lMTEVEX1JTVF9TRU5UOgorCQljYXNlIENYTl9LSUxMRURfUlNUX1JDVkQ6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciAlZCwgcmVzZXQgcmVjZWl2ZWQvc2VudCAiCisJCQkJICJvbiBDSUQgMHgleC4uLlxuIiwKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCisJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7CisJCQlpc2NzaV9jb25uX2ZhaWx1cmUoYmVpc2NzaV9jb25uLT5jb25uLAorCQkJCQkgICBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciBJbnZhbGlkIGNvZGU9ICVkICIKKwkJCQkgInJlY2VpdmVkIG9uIENJRCAweCV4Li4uXG4iLAorCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KKwkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KKwkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKTsKKwkJCWJyZWFrOworCQl9CisKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9zb2xfY3FlLCB2YWxpZCwgc29sLCAwKTsKKwkJcXVldWVfdGFpbF9pbmMoY3EpOworCQlzb2wgPSBxdWV1ZV90YWlsX25vZGUoY3EpOworCQludW1fcHJvY2Vzc2VkKys7CisJfQorCisJaWYgKG51bV9wcm9jZXNzZWQgPiAwKSB7CisJCXRvdF9udW1wICs9IG51bV9wcm9jZXNzZWQ7CisJCWh3aV9yaW5nX2NxX2RiKHBoYmEsIHBod2lfY29udGV4dC0+YmVfY3EuaWQsIG51bV9wcm9jZXNzZWQsCisJCQkgICAgICAgMSwgMCk7CisJfQorCXJldHVybiB0b3RfbnVtcDsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9wcm9jZXNzX2FsbF9jcXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0KKwkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZWlzY3NpX2hiYSwgd29ya19jcXMpOworCisJaWYgKHBoYmEtPnRvZG9fbWNjX2NxKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQlwaGJhLT50b2RvX21jY19jcSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIk1DQyBJbnRlcnJ1cHQgTm90IGV4cGVjdGVkIFxuIik7CisJfQorCisJaWYgKHBoYmEtPnRvZG9fY3EpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCXBoYmEtPnRvZG9fY3EgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQliZWlzY3NpX3Byb2Nlc3NfY3EocGhiYSk7CisJfQorfQorCitzdGF0aWMgaW50IGJlX2lvcG9sbChzdHJ1Y3QgYmxrX2lvcG9sbCAqaW9wLCBpbnQgYnVkZ2V0KQoreworCXN0YXRpYyB1bnNpZ25lZCBpbnQgcmV0OworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKworCXBoYmEgPSBjb250YWluZXJfb2YoaW9wLCBzdHJ1Y3QgYmVpc2NzaV9oYmEsIGlvcG9sbCk7CisKKwlyZXQgPSBiZWlzY3NpX3Byb2Nlc3NfY3EocGhiYSk7CisJaWYgKHJldCA8IGJ1ZGdldCkgeworCQlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKKworCQlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwkJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OworCQlibGtfaW9wb2xsX2NvbXBsZXRlKGlvcCk7CisJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIHBod2lfY29udGV4dC0+YmVfZXEucS5pZCwgMCwKKwkJCQkJCQkwLCAxLCAxKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2h3aV93cml0ZV9zZ2woc3RydWN0IGlzY3NpX3dyYiAqcHdyYiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkgICAgICB1bnNpZ25lZCBpbnQgbnVtX3NnLCBzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrKQoreworCXN0cnVjdCBpc2NzaV9zZ2UgKnBzZ2w7CisJdW5zaWduZWQgc2hvcnQgc2dfbGVuLCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgc2dlX2xlbiA9IDA7CisJdW5zaWduZWQgbG9uZyBsb25nIGFkZHI7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpsX3NnOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgaXNjc2lfYmhzX2FkZHJfbG8sIHB3cmIsCisJCQkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfbG8pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBpc2NzaV9iaHNfYWRkcl9oaSwgcHdyYiwKKwkJCQkgICAgICBpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19oaSk7CisKKwlsX3NnID0gc2c7CisJZm9yIChpbmRleCA9IDA7IChpbmRleCA8IG51bV9zZykgJiYgKGluZGV4IDwgMik7IGluZGV4KyssIHNnX25leHQoc2cpKSB7CisJCWlmIChpbmRleCA9PSAwKSB7CisJCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKwkJCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9hZGRyX2xvLCBwd3JiLAorCQkJCQkJCShhZGRyICYgMHhGRkZGRkZGRikpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfYWRkcl9oaSwgcHdyYiwKKwkJCQkJCQkoYWRkciA+PiAzMikpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGVuLCBwd3JiLAorCQkJCQkJCXNnX2xlbik7CisJCQlzZ2VfbGVuID0gc2dfbGVuOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwKKwkJCQkJCQkxKTsKKwkJfSBlbHNlIHsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCisJCQkJCQkJMCk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9yMnRfb2Zmc2V0LAorCQkJCQkJCXB3cmIsIHNnZV9sZW4pOworCQkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CisJCQlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfYWRkcl9sbywgcHdyYiwKKwkJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2FkZHJfaGksIHB3cmIsCisJCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2xlbiwgcHdyYiwKKwkJCQkJCQlzZ19sZW4pOworCQl9CisJfQorCXBzZ2wgPSAoc3RydWN0IGlzY3NpX3NnZSAqKWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5wZnJhZzsKKwltZW1zZXQocHNnbCwgMCwgc2l6ZW9mKCpwc2dsKSAqIEJFMl9TR0UpOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxlbiwgcHNnbCwgaW9fdGFzay0+YmhzX2xlbiAtIDIpOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsCisJCQlpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19oaSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCisJCQlpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19sbyk7CisKKwlpZiAobnVtX3NnID09IDIpCisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2xhc3QsIHB3cmIsIDEpOworCXNnID0gbF9zZzsKKwlwc2dsKys7CisJcHNnbCsrOworCW9mZnNldCA9IDA7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtX3NnOyBpbmRleCsrLCBzZ19uZXh0KHNnKSwgcHNnbCsrKSB7CisJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCQlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwKKwkJCQkJCShhZGRyICYgMHhGRkZGRkZGRikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9oaSwgcHNnbCwKKwkJCQkJCShhZGRyID4+IDMyKSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIHNnX2xlbik7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBzZ2Vfb2Zmc2V0LCBwc2dsLCBvZmZzZXQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGFzdF9zZ2UsIHBzZ2wsIDApOworCQlvZmZzZXQgKz0gc2dfbGVuOworCX0KKwlwc2dsLS07CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxhc3Rfc2dlLCBwc2dsLCAxKTsKK30KKworc3RhdGljIHZvaWQgaHdpX3dyaXRlX2J1ZmZlcihzdHJ1Y3QgaXNjc2lfd3JiICpwd3JiLCBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgaXNjc2lfc2dlICpwc2dsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyOworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGlvX3Rhc2stPmNvbm47CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9jb25uLT5waGJhOworCisJaW9fdGFzay0+YmhzX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmVfbm9uaW9fYmhzKSAtIDI7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGlzY3NpX2Joc19hZGRyX2xvLCBwd3JiLAorCQkJCWlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2xvKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgaXNjc2lfYmhzX2FkZHJfaGksIHB3cmIsCisJCQkJaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfaGkpOworCisJaWYgKHRhc2stPmRhdGEpIHsKKwkJaWYgKHRhc2stPmRhdGFfY291bnQpIHsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDEpOworCQkJYWRkciA9ICh1NjQpIHBjaV9tYXBfc2luZ2xlKHBoYmEtPnBjaWRldiwKKwkJCQkJCSAgICB0YXNrLT5kYXRhLAorCQkJCQkJICAgIHRhc2stPmRhdGFfY291bnQsIDEpOworCQl9IGVsc2UgeworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMCk7CisJCQlhZGRyID0gMDsKKwkJfQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9hZGRyX2xvLCBwd3JiLAorCQkJCQkJKGFkZHIgJiAweEZGRkZGRkZGKSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2FkZHJfaGksIHB3cmIsCisJCQkJCQkoYWRkciA+PiAzMikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sZW4sIHB3cmIsCisJCQkJCQl0YXNrLT5kYXRhX2NvdW50KTsKKworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLCAxKTsKKwl9IGVsc2UgeworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAwKTsKKwkJYWRkciA9IDA7CisJfQorCisJcHNnbCA9IChzdHJ1Y3QgaXNjc2lfc2dlICopaW9fdGFzay0+cHNnbF9oYW5kbGUtPnBmcmFnOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxlbiwgcHNnbCwgaW9fdGFzay0+YmhzX2xlbik7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9oaSwgcHNnbCwKKwkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfaGkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLAorCQkgICAgICBpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19sbyk7CisJaWYgKHRhc2stPmRhdGEpIHsKKwkJcHNnbCsrOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9oaSwgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLCAwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxlbiwgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBzZ2Vfb2Zmc2V0LCBwc2dsLCAwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIHJzdmQwLCBwc2dsLCAwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxhc3Rfc2dlLCBwc2dsLCAwKTsKKworCQlwc2dsKys7CisJCWlmICh0YXNrLT5kYXRhKSB7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwKKwkJCQkJCShhZGRyICYgMHhGRkZGRkZGRikpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsCisJCQkJCQkoYWRkciA+PiAzMikpOworCQl9CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIDB4MTA2KTsKKwl9CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxhc3Rfc2dlLCBwc2dsLCAxKTsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9maW5kX21lbV9yZXEoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXVuc2lnbmVkIGludCBudW1fY3FfcGFnZXMsIG51bV9lcV9wYWdlcywgbnVtX2FzeW5jX3BkdV9idWZfcGFnZXM7CisJdW5zaWduZWQgaW50IG51bV9hc3luY19wZHVfZGF0YV9wYWdlcywgd3JiX3N6X3Blcl9jeG47CisJdW5zaWduZWQgaW50IG51bV9hc3luY19wZHVfYnVmX3NnbF9wYWdlcywgbnVtX2FzeW5jX3BkdV9kYXRhX3NnbF9wYWdlczsKKworCW51bV9jcV9wYWdlcyA9IFBBR0VTX1JFUVVJUkVEKHBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcyAqIFwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHNvbF9jcWUpKTsKKwludW1fZXFfcGFnZXMgPSBQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgKiBcCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZV9lcV9lbnRyeSkpOworCW51bV9hc3luY19wZHVfYnVmX3BhZ2VzID0KKwkJCVBBR0VTX1JFUVVJUkVEKHBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBcCisJCQkJICAgICAgIHBoYmEtPnBhcmFtcy5kZWZwZHVfaGRyX3N6KTsKKwludW1fYXN5bmNfcGR1X2J1Zl9zZ2xfcGFnZXMgPQorCQkJUEFHRVNfUkVRVUlSRUQocGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCAqIFwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpKTsKKwludW1fYXN5bmNfcGR1X2RhdGFfcGFnZXMgPQorCQkJUEFHRVNfUkVRVUlSRUQocGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCAqIFwKKwkJCQkgICAgICAgcGhiYS0+cGFyYW1zLmRlZnBkdV9kYXRhX3N6KTsKKwludW1fYXN5bmNfcGR1X2RhdGFfc2dsX3BhZ2VzID0KKwkJCVBBR0VTX1JFUVVJUkVEKHBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBcCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcGh5c19hZGRyKSk7CisKKwlwaGJhLT5wYXJhbXMuaHdpX3dzX3N6ID0gc2l6ZW9mKHN0cnVjdCBod2lfY29udHJvbGxlcik7CisKKwlwaGJhLT5tZW1fcmVxW0lTQ1NJX01FTV9HTE9CQUxfSEVBREVSXSA9IDIgKgorCQkJCQkJIEJFX0lTQ1NJX1BEVV9IRUFERVJfU0laRTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQURETl9DT05URVhUXSA9CisJCQkJCSAgICBzaXplb2Yoc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSk7CisKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQ1FdID0gbnVtX2NxX3BhZ2VzICogUEFHRV9TSVpFOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9FUV0gPSBudW1fZXFfcGFnZXMgKiBQQUdFX1NJWkU7CisKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fV1JCXSA9IHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKQorCSAgICAqIChwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKQorCSAgICAqIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOworCXdyYl9zel9wZXJfY3huID0gIHNpemVvZihzdHJ1Y3Qgd3JiX2hhbmRsZSkgKgorCQkJCSAocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bik7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX1dSQkhdID0gcm91bmR1cF9wb3dfb2ZfdHdvKCh3cmJfc3pfcGVyX2N4bikgKgorCQkJCXBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsKTsKKworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9TR0xIXSA9IHNpemVvZihzdHJ1Y3Qgc2dsX2hhbmRsZSkgKgorCQlwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybDsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fU0dFXSA9IHNpemVvZihzdHJ1Y3QgaXNjc2lfc2dlKSAqCisJCXBoYmEtPnBhcmFtcy5udW1fc2dlX3Blcl9pbyAqIHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsOworCisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0hFQURFUl9CVUZdID0KKwkJbnVtX2FzeW5jX3BkdV9idWZfcGFnZXMgKiBQQUdFX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0RBVEFfQlVGXSA9CisJCW51bV9hc3luY19wZHVfZGF0YV9wYWdlcyAqIFBBR0VfU0laRTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQVNZTkNfSEVBREVSX1JJTkddID0KKwkJbnVtX2FzeW5jX3BkdV9idWZfc2dsX3BhZ2VzICogUEFHRV9TSVpFOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19EQVRBX1JJTkddID0KKwkJbnVtX2FzeW5jX3BkdV9kYXRhX3NnbF9wYWdlcyAqIFBBR0VfU0laRTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQVNZTkNfSEVBREVSX0hBTkRMRV0gPQorCQlwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICoKKwkJc2l6ZW9mKHN0cnVjdCBhc3luY19wZHVfaGFuZGxlKTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQVNZTkNfREFUQV9IQU5ETEVdID0KKwkJcGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCAqCisJCXNpemVvZihzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSk7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX1BEVV9DT05URVhUXSA9CisJCXNpemVvZihzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0KSArCisJCShwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIHNpemVvZihzdHJ1Y3QgaHdpX2FzeW5jX2VudHJ5KSk7Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9hbGxvY19tZW0oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCWRtYV9hZGRyX3QgYnVzX2FkZDsKKwlzdHJ1Y3QgbWVtX2FycmF5ICptZW1fYXJyLCAqbWVtX2Fycl9vcmlnOworCXVuc2lnbmVkIGludCBpLCBqLCBhbGxvY19zaXplLCBjdXJyX2FsbG9jX3NpemU7CisKKwlwaGJhLT5waHdpX2N0cmxyID0ga21hbGxvYyhwaGJhLT5wYXJhbXMuaHdpX3dzX3N6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoYmEtPnBod2lfY3RybHIpCisJCXJldHVybiAtRU5PTUVNOworCisJcGhiYS0+aW5pdF9tZW0gPSBrY2FsbG9jKFNFX01FTV9NQVgsIHNpemVvZigqbWVtX2Rlc2NyKSwKKwkJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaGJhLT5pbml0X21lbSkgeworCQlrZnJlZShwaGJhLT5waHdpX2N0cmxyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtX2Fycl9vcmlnID0ga21hbGxvYyhzaXplb2YoKm1lbV9hcnJfb3JpZykgKiBCRUlTQ1NJX01BWF9GUkFHU19JTklULAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghbWVtX2Fycl9vcmlnKSB7CisJCWtmcmVlKHBoYmEtPmluaXRfbWVtKTsKKwkJa2ZyZWUocGhiYS0+cGh3aV9jdHJscik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCWZvciAoaSA9IDA7IGkgPCBTRV9NRU1fTUFYOyBpKyspIHsKKwkJaiA9IDA7CisJCW1lbV9hcnIgPSBtZW1fYXJyX29yaWc7CisJCWFsbG9jX3NpemUgPSBwaGJhLT5tZW1fcmVxW2ldOworCQltZW1zZXQobWVtX2FyciwgMCwgc2l6ZW9mKHN0cnVjdCBtZW1fYXJyYXkpICoKKwkJICAgICAgIEJFSVNDU0lfTUFYX0ZSQUdTX0lOSVQpOworCQljdXJyX2FsbG9jX3NpemUgPSBtaW4oYmVfbWF4X3BoeXNfc2l6ZSAqIDEwMjQsIGFsbG9jX3NpemUpOworCQlkbyB7CisJCQltZW1fYXJyLT52aXJ0dWFsX2FkZHJlc3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudCgKKwkJCQkJCQlwaGJhLT5wY2lkZXYsCisJCQkJCQkJY3Vycl9hbGxvY19zaXplLAorCQkJCQkJCSZidXNfYWRkKTsKKwkJCWlmICghbWVtX2Fyci0+dmlydHVhbF9hZGRyZXNzKSB7CisJCQkJaWYgKGN1cnJfYWxsb2Nfc2l6ZSA8PSBCRV9NSU5fTUVNX1NJWkUpCisJCQkJCWdvdG8gZnJlZV9tZW07CisJCQkJaWYgKGN1cnJfYWxsb2Nfc2l6ZSAtCisJCQkJCXJvdW5kZG93bl9wb3dfb2ZfdHdvKGN1cnJfYWxsb2Nfc2l6ZSkpCisJCQkJCWN1cnJfYWxsb2Nfc2l6ZSA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvCisJCQkJCQkJICAgICAoY3Vycl9hbGxvY19zaXplKTsKKwkJCQllbHNlCisJCQkJCWN1cnJfYWxsb2Nfc2l6ZSA9IGN1cnJfYWxsb2Nfc2l6ZSAvIDI7CisJCQl9IGVsc2UgeworCQkJCW1lbV9hcnItPmJ1c19hZGRyZXNzLnUuCisJCQkJICAgIGE2NC5hZGRyZXNzID0gKF9fdTY0KSBidXNfYWRkOworCQkJCW1lbV9hcnItPnNpemUgPSBjdXJyX2FsbG9jX3NpemU7CisJCQkJYWxsb2Nfc2l6ZSAtPSBjdXJyX2FsbG9jX3NpemU7CisJCQkJY3Vycl9hbGxvY19zaXplID0gbWluKGJlX21heF9waHlzX3NpemUgKgorCQkJCQkJICAgICAgMTAyNCwgYWxsb2Nfc2l6ZSk7CisJCQkJaisrOworCQkJCW1lbV9hcnIrKzsKKwkJCX0KKwkJfSB3aGlsZSAoYWxsb2Nfc2l6ZSk7CisJCW1lbV9kZXNjci0+bnVtX2VsZW1lbnRzID0gajsKKwkJbWVtX2Rlc2NyLT5zaXplX2luX2J5dGVzID0gcGhiYS0+bWVtX3JlcVtpXTsKKwkJbWVtX2Rlc2NyLT5tZW1fYXJyYXkgPSBrbWFsbG9jKHNpemVvZigqbWVtX2FycikgKiBqLAorCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghbWVtX2Rlc2NyLT5tZW1fYXJyYXkpCisJCQlnb3RvIGZyZWVfbWVtOworCisJCW1lbWNweShtZW1fZGVzY3ItPm1lbV9hcnJheSwgbWVtX2Fycl9vcmlnLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtZW1fYXJyYXkpICogaik7CisJCW1lbV9kZXNjcisrOworCX0KKwlrZnJlZShtZW1fYXJyX29yaWcpOworCXJldHVybiAwOworZnJlZV9tZW06CisJbWVtX2Rlc2NyLT5udW1fZWxlbWVudHMgPSBqOworCXdoaWxlICgoaSkgfHwgKGopKSB7CisJCWZvciAoaiA9IG1lbV9kZXNjci0+bnVtX2VsZW1lbnRzOyBqID4gMDsgai0tKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBoYmEtPnBjaWRldiwKKwkJCQkJICAgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS5zaXplLAorCQkJCQkgICAgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaiAtIDFdLgorCQkJCQkgICAgdmlydHVhbF9hZGRyZXNzLAorCQkJCQkgICAgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaiAtIDFdLgorCQkJCQkgICAgYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzcyk7CisJCX0KKwkJaWYgKGkpIHsKKwkJCWktLTsKKwkJCWtmcmVlKG1lbV9kZXNjci0+bWVtX2FycmF5KTsKKwkJCW1lbV9kZXNjci0tOworCQl9CisJfQorCWtmcmVlKG1lbV9hcnJfb3JpZyk7CisJa2ZyZWUocGhiYS0+aW5pdF9tZW0pOworCWtmcmVlKHBoYmEtPnBod2lfY3RybHIpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfZ2V0X21lbW9yeShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJYmVpc2NzaV9maW5kX21lbV9yZXEocGhiYSk7CisJcmV0dXJuIGJlaXNjc2lfYWxsb2NfbWVtKHBoYmEpOworfQorCitzdGF0aWMgdm9pZCBpc2NzaV9pbml0X2dsb2JhbF90ZW1wbGF0ZXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBwZHVfZGF0YV9vdXQgKnBkYXRhX291dDsKKwlzdHJ1Y3QgcGR1X25vcF9vdXQgKnBub3Bfb3V0OworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IElTQ1NJX01FTV9HTE9CQUxfSEVBREVSOworCXBkYXRhX291dCA9CisJICAgIChzdHJ1Y3QgcGR1X2RhdGFfb3V0ICopbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCW1lbXNldChwZGF0YV9vdXQsIDAsIEJFX0lTQ1NJX1BEVV9IRUFERVJfU0laRSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3BkdV9kYXRhX291dCwgb3Bjb2RlLCBwZGF0YV9vdXQsCisJCSAgICAgIElJT0NfU0NTSV9EQVRBKTsKKworCXBub3Bfb3V0ID0KKwkgICAgKHN0cnVjdCBwZHVfbm9wX291dCAqKSgodW5zaWduZWQgY2hhciAqKW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLgorCQkJCSAgIHZpcnR1YWxfYWRkcmVzcyArIEJFX0lTQ1NJX1BEVV9IRUFERVJfU0laRSk7CisKKwltZW1zZXQocG5vcF9vdXQsIDAsIEJFX0lTQ1NJX1BEVV9IRUFERVJfU0laRSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfbm9wX291dCwgdHR0LCBwbm9wX291dCwgMHhGRkZGRkZGRik7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfbm9wX291dCwgZl9iaXQsIHBub3Bfb3V0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3BkdV9ub3Bfb3V0LCBpX2JpdCwgcG5vcF9vdXQsIDApOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX2luaXRfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3Jfd3JiaCwgKm1lbV9kZXNjcl93cmI7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IGlzY3NpX3dyYiAqcHdyYjsKKwl1bnNpZ25lZCBpbnQgbnVtX2N4bl93cmJoOworCXVuc2lnbmVkIGludCBudW1fY3huX3dyYiwgaiwgaWR4LCBpbmRleDsKKworCW1lbV9kZXNjcl93cmJoID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyX3dyYmggKz0gSFdJX01FTV9XUkJIOworCisJbWVtX2Rlc2NyX3dyYiA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjcl93cmIgKz0gSFdJX01FTV9XUkI7CisKKwlpZHggPSAwOworCXB3cmJfaGFuZGxlID0gbWVtX2Rlc2NyX3dyYmgtPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwludW1fY3huX3dyYmggPSAoKG1lbV9kZXNjcl93cmJoLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCisJCQkoKHNpemVvZihzdHJ1Y3Qgd3JiX2hhbmRsZSkpICoKKwkJCSBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKSk7CisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIDI7IGluZGV4ICs9IDIpIHsKKwkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2luZGV4XTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiY2lkPSVkIHB3cmJfY29udGV4dD0lcCBcbiIsIGluZGV4LAorCQkJCQkJcHdyYl9jb250ZXh0KTsKKwkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlID0KKwkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qgd3JiX2hhbmRsZSAqKSAqCisJCQkJCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4sIEdGUF9LRVJORUwpOworCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGQgPQorCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3cmJfaGFuZGxlICopICoKKwkJCQkJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biwgR0ZQX0tFUk5FTCk7CisJCWlmIChudW1fY3huX3dyYmgpIHsKKwkJCXB3cmJfY29udGV4dC0+YWxsb2NfaW5kZXggPSAwOworCQkJcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUgPSAwOworCQkJZm9yIChqID0gMDsgaiA8IHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG47IGorKykgeworCQkJCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtqXSA9IHB3cmJfaGFuZGxlOworCQkJCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFtqXSA9CisJCQkJCQkJCXB3cmJfaGFuZGxlOworCQkJCXB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlKys7CisJCQkJcHdyYl9oYW5kbGUrKzsKKwkJCX0KKwkJCXB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCA9IDA7CisJCQludW1fY3huX3dyYmgtLTsKKwkJfSBlbHNlIHsKKwkJCWlkeCsrOworCQkJcHdyYl9oYW5kbGUgPQorCQkJICAgIG1lbV9kZXNjcl93cmJoLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJCQludW1fY3huX3dyYmggPQorCQkJICAgICgobWVtX2Rlc2NyX3dyYmgtPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJCSAgICAgKChzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUpKSAqCisJCQkgICAgICBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKSk7CisJCQlwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4ID0gMDsKKwkJCWZvciAoaiA9IDA7IGogPCBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huOyBqKyspIHsKKwkJCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2Vbal0gPSBwd3JiX2hhbmRsZTsKKwkJCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbal0gPQorCQkJCSAgICBwd3JiX2hhbmRsZTsKKwkJCQlwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSsrOworCQkJCXB3cmJfaGFuZGxlKys7CisJCQl9CisJCQlwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXggPSAwOworCQkJbnVtX2N4bl93cmJoLS07CisJCX0KKwl9CisJaWR4ID0gMDsKKwlwd3JiID0gbWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCW51bV9jeG5fd3JiID0KKwkgICAgKChtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvIChzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpICoKKwkgICAgIHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IGluZGV4ICs9IDIpIHsKKwkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2luZGV4XTsKKwkJaWYgKG51bV9jeG5fd3JiKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bjsgaisrKSB7CisJCQkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2Vbal07CisJCQkJcHdyYl9oYW5kbGUtPnB3cmIgPSBwd3JiOworCQkJCXB3cmIrKzsKKwkJCX0KKwkJCW51bV9jeG5fd3JiLS07CisJCX0gZWxzZSB7CisJCQlpZHgrKzsKKwkJCXB3cmIgPSBtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJCQludW1fY3huX3dyYiA9ICgobWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLworCQkJCQkoc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKSAqCisJCQkJCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOworCQkJZm9yIChqID0gMDsgaiA8IHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG47IGorKykgeworCQkJCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW2pdOworCQkJCXB3cmJfaGFuZGxlLT5wd3JiID0gcHdyYjsKKwkJCQlwd3JiKys7CisJCQl9CisJCQludW1fY3huX3dyYi0tOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBod2lfaW5pdF9hc3luY19wZHVfY3R4KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGhiYV9wYXJhbWV0ZXJzICpwID0gJnBoYmEtPnBhcmFtczsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGVhZGVyX2gsICpwYXN5bmNfZGF0YV9oOworCXVuc2lnbmVkIGludCBpbmRleDsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKworCW1lbV9kZXNjciA9IChzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKilwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19QRFVfQ09OVEVYVDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY3RybHItPnBod2lfY3R4dC0+cGFzeW5jX2N0eCA9IChzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICopCisJCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCXBhc3luY19jdHggPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQtPnBhc3luY19jdHg7CisJbWVtc2V0KHBhc3luY19jdHgsIDAsIHNpemVvZigqcGFzeW5jX2N0eCkpOworCisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLm51bV9lbnRyaWVzID0gcC0+YXN5bmNwZHVzX3Blcl9jdHJsOworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5idWZmZXJfc2l6ZSA9IHAtPmRlZnBkdV9oZHJfc3o7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5idWZmZXJfc2l6ZSA9IHAtPmRlZnBkdV9kYXRhX3N6OworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEubnVtX2VudHJpZXMgPSBwLT5hc3luY3BkdXNfcGVyX2N0cmw7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfSEVBREVSX0JVRjsKKwlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0hFQURFUl9CVUYiCisJCQkgInZhPSVwIFxuIiwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgICJObyBWaXJ0dWFsIGFkZHJlc3MgXG4iKTsKKworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci52YV9iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5wYV9iYXNlLnUuYTY0LmFkZHJlc3MgPQorCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0uYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzczsKKworCW1lbV9kZXNjciA9IChzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKilwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19IRUFERVJfUklORzsKKwlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0hFQURFUl9SSU5HIgorCQkJICJ2YT0lcCBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CisJfSBlbHNlCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICJObyBWaXJ0dWFsIGFkZHJlc3MgXG4iKTsKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIucmluZ19iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKworCW1lbV9kZXNjciA9IChzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKilwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19IRUFERVJfSEFORExFOworCWlmIChtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJICJod2lfaW5pdF9hc3luY19wZHVfY3R4IEhXSV9NRU1fQVNZTkNfSEVBREVSX0hBTkRMRSIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuaGFuZGxlX2Jhc2UgPQorCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci53cml0YWJsZXMgPSAwOworCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZnJlZV9saXN0KTsKKworCW1lbV9kZXNjciA9IChzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKilwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19EQVRBX0JVRjsKKwlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0RBVEFfQlVGIgorCQkJICJ2YT0lcCBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CisJfSBlbHNlCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICJObyBWaXJ0dWFsIGFkZHJlc3MgXG4iKTsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLnZhX2Jhc2UgPQorCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEucGFfYmFzZS51LmE2NC5hZGRyZXNzID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfREFUQV9SSU5HOworCWlmIChtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJICJod2lfaW5pdF9hc3luY19wZHVfY3R4IEhXSV9NRU1fQVNZTkNfREFUQV9SSU5HIgorCQkJICJ2YT0lcCBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CisJfSBlbHNlCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLnJpbmdfYmFzZSA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfREFUQV9IQU5ETEU7CisJaWYgKCFtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICJObyBWaXJ0dWFsIGFkZHJlc3MgXG4iKTsKKworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuaGFuZGxlX2Jhc2UgPQorCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEud3JpdGFibGVzID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5mcmVlX2xpc3QpOworCisJcGFzeW5jX2hlYWRlcl9oID0KKwkJKHN0cnVjdCBhc3luY19wZHVfaGFuZGxlICopcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmhhbmRsZV9iYXNlOworCXBhc3luY19kYXRhX2ggPQorCQkoc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKilwYXN5bmNfY3R4LT5hc3luY19kYXRhLmhhbmRsZV9iYXNlOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcC0+YXN5bmNwZHVzX3Blcl9jdHJsOyBpbmRleCsrKSB7CisJCXBhc3luY19oZWFkZXJfaC0+Y3JpID0gLTE7CisJCXBhc3luY19oZWFkZXJfaC0+aW5kZXggPSAoY2hhcilpbmRleDsKKwkJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19oZWFkZXJfaC0+bGluayk7CisJCXBhc3luY19oZWFkZXJfaC0+cGJ1ZmZlciA9CisJCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykKKwkJCShwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIudmFfYmFzZSkgKworCQkJKHAtPmRlZnBkdV9oZHJfc3ogKiBpbmRleCkpOworCisJCXBhc3luY19oZWFkZXJfaC0+cGEudS5hNjQuYWRkcmVzcyA9CisJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIucGFfYmFzZS51LmE2NC5hZGRyZXNzICsKKwkJCShwLT5kZWZwZHVfaGRyX3N6ICogaW5kZXgpOworCisJCWxpc3RfYWRkX3RhaWwoJnBhc3luY19oZWFkZXJfaC0+bGluaywKKwkJCQkmcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfbGlzdCk7CisJCXBhc3luY19oZWFkZXJfaCsrOworCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZnJlZV9lbnRyaWVzKys7CisJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci53cml0YWJsZXMrKzsKKworCQlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaW5kZXhdLndhaXRfcXVldWUubGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtpbmRleF0uCisJCQkgICAgICAgaGVhZGVyX2J1c3lfbGlzdCk7CisJCXBhc3luY19kYXRhX2gtPmNyaSA9IC0xOworCQlwYXN5bmNfZGF0YV9oLT5pbmRleCA9IChjaGFyKWluZGV4OworCQlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2RhdGFfaC0+bGluayk7CisJCXBhc3luY19kYXRhX2gtPnBidWZmZXIgPQorCQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpCisJCQkocGFzeW5jX2N0eC0+YXN5bmNfZGF0YS52YV9iYXNlKSArCisJCQkocC0+ZGVmcGR1X2RhdGFfc3ogKiBpbmRleCkpOworCisJCXBhc3luY19kYXRhX2gtPnBhLnUuYTY0LmFkZHJlc3MgPQorCQkgICAgcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5wYV9iYXNlLnUuYTY0LmFkZHJlc3MgKworCQkgICAgKHAtPmRlZnBkdV9kYXRhX3N6ICogaW5kZXgpOworCisJCWxpc3RfYWRkX3RhaWwoJnBhc3luY19kYXRhX2gtPmxpbmssCisJCQkgICAgICAmcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5mcmVlX2xpc3QpOworCQlwYXN5bmNfZGF0YV9oKys7CisJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9lbnRyaWVzKys7CisJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEud3JpdGFibGVzKys7CisKKwkJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2luZGV4XS5kYXRhX2J1c3lfbGlzdCk7CisJfQorCisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmhvc3Rfd3JpdGVfcHRyID0gMDsKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZXBfcmVhZF9wdHIgPSAtMTsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmhvc3Rfd3JpdGVfcHRyID0gMDsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmVwX3JlYWRfcHRyID0gLTE7Cit9CisKK3N0YXRpYyBpbnQKK2JlX3NnbF9jcmVhdGVfY29udGlndW91cyh2b2lkICp2aXJ0dWFsX2FkZHJlc3MsCisJCQkgdTY0IHBoeXNpY2FsX2FkZHJlc3MsIHUzMiBsZW5ndGgsCisJCQkgc3RydWN0IGJlX2RtYV9tZW0gKnNnbCkKK3sKKwlXQVJOX09OKCF2aXJ0dWFsX2FkZHJlc3MpOworCVdBUk5fT04oIXBoeXNpY2FsX2FkZHJlc3MpOworCVdBUk5fT04oIWxlbmd0aCA+IDApOworCVdBUk5fT04oIXNnbCk7CisKKwlzZ2wtPnZhID0gdmlydHVhbF9hZGRyZXNzOworCXNnbC0+ZG1hID0gcGh5c2ljYWxfYWRkcmVzczsKKwlzZ2wtPnNpemUgPSBsZW5ndGg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmVfc2dsX2Rlc3Ryb3lfY29udGlndW91cyhzdHJ1Y3QgYmVfZG1hX21lbSAqc2dsKQoreworCW1lbXNldChzZ2wsIDAsIHNpemVvZigqc2dsKSk7Cit9CisKK3N0YXRpYyB2b2lkCitod2lfYnVpbGRfYmVfc2dsX2FycihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCSAgICAgc3RydWN0IG1lbV9hcnJheSAqcG1lbSwgc3RydWN0IGJlX2RtYV9tZW0gKnNnbCkKK3sKKwlpZiAoc2dsLT52YSkKKwkJYmVfc2dsX2Rlc3Ryb3lfY29udGlndW91cyhzZ2wpOworCisJYmVfc2dsX2NyZWF0ZV9jb250aWd1b3VzKHBtZW0tPnZpcnR1YWxfYWRkcmVzcywKKwkJCQkgcG1lbS0+YnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzcywKKwkJCQkgcG1lbS0+c2l6ZSwgc2dsKTsKK30KKworc3RhdGljIHZvaWQKK2h3aV9idWlsZF9iZV9zZ2xfYnlfb2Zmc2V0KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSAgIHN0cnVjdCBtZW1fYXJyYXkgKnBtZW0sIHN0cnVjdCBiZV9kbWFfbWVtICpzZ2wpCit7CisJaWYgKHNnbC0+dmEpCisJCWJlX3NnbF9kZXN0cm95X2NvbnRpZ3VvdXMoc2dsKTsKKworCWJlX3NnbF9jcmVhdGVfY29udGlndW91cygodW5zaWduZWQgY2hhciAqKXBtZW0tPnZpcnR1YWxfYWRkcmVzcywKKwkJCQkgcG1lbS0+YnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzcywKKwkJCQkgcG1lbS0+c2l6ZSwgc2dsKTsKK30KKworc3RhdGljIGludCBiZV9maWxsX3F1ZXVlKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAorCQl1MTYgbGVuLCB1MTYgZW50cnlfc2l6ZSwgdm9pZCAqdmFkZHJlc3MpCit7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1lbSA9ICZxLT5kbWFfbWVtOworCisJbWVtc2V0KHEsIDAsIHNpemVvZigqcSkpOworCXEtPmxlbiA9IGxlbjsKKwlxLT5lbnRyeV9zaXplID0gZW50cnlfc2l6ZTsKKwltZW0tPnNpemUgPSBsZW4gKiBlbnRyeV9zaXplOworCW1lbS0+dmEgPSB2YWRkcmVzczsKKwlpZiAoIW1lbS0+dmEpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChtZW0tPnZhLCAwLCBtZW0tPnNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfY3JlYXRlX2VxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSAgICAgc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0KQoreworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IHJldDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXE7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1lbTsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwl2b2lkICplcV92YWRkcmVzczsKKworCWlkeCA9IDA7CisJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCW1lbSA9ICZlcS0+ZG1hX21lbTsKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9FUTsKKwllcV92YWRkcmVzcyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCisJcmV0ID0gYmVfZmlsbF9xdWV1ZShlcSwgcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgYmVfZXFfZW50cnkpLCBlcV92YWRkcmVzcyk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfZmlsbF9xdWV1ZSBGYWlsZWQgZm9yIEVRIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbWVtLT5kbWEgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisKKwlyZXQgPSBiZWlzY3NpX2NtZF9lcV9jcmVhdGUoJnBoYmEtPmN0cmwsIGVxLAorCQkJCSAgICBwaHdpX2NvbnRleHQtPmJlX2VxLmN1cl9lcWQpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfY21kX2VxX2NyZWF0ZSIKKwkJCSAgICAgIkZhaWxlZGZvciBFUSBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJlcSBpZCBpcyAlZFxuIiwgcGh3aV9jb250ZXh0LT5iZV9lcS5xLmlkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2NyZWF0ZV9jcShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgICAgIHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCWludCByZXQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLCAqZXE7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1lbTsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwl2b2lkICpjcV92YWRkcmVzczsKKworCWlkeCA9IDA7CisJY3EgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxLnE7CisJbWVtID0gJmNxLT5kbWFfbWVtOworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0NROworCWNxX3ZhZGRyZXNzID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJcmV0ID0gYmVfZmlsbF9xdWV1ZShjcSwgcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgLyAyLAorCQkJICAgIHNpemVvZihzdHJ1Y3Qgc29sX2NxZSksIGNxX3ZhZGRyZXNzKTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZV9maWxsX3F1ZXVlIEZhaWxlZCBmb3IgSVNDU0kgQ1EgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltZW0tPmRtYSA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzczsKKwlyZXQgPSBiZWlzY3NpX2NtZF9jcV9jcmVhdGUoJnBoYmEtPmN0cmwsIGNxLCBlcSwgZmFsc2UsIGZhbHNlLCAwKTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZWlzY3NpX2NtZF9lcV9jcmVhdGUgRmFpbGVkIGZvciBJU0NTSSBDUSBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJpc2NzaSBjcSBpZCBpcyAlZFxuIiwgcGh3aV9jb250ZXh0LT5iZV9jcS5pZCk7CisJU0VfREVCVUcoREJHX0xWTF84LCAiSVNDU0kgQ1EgQ1JFQVRFRFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JlaXNjc2lfY3JlYXRlX2RlZl9oZHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgICAgICAgc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0LAorCQkgICAgICAgc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyLAorCQkgICAgICAgdW5zaWduZWQgaW50IGRlZl9wZHVfcmluZ19zeikKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCWludCByZXQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmRxLCAqY3E7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1lbTsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwl2b2lkICpkcV92YWRkcmVzczsKKworCWlkeCA9IDA7CisJZHEgPSAmcGh3aV9jb250ZXh0LT5iZV9kZWZfaGRycTsKKwljcSA9ICZwaHdpX2NvbnRleHQtPmJlX2NxOworCW1lbSA9ICZkcS0+ZG1hX21lbTsKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19IRUFERVJfUklORzsKKwlkcV92YWRkcmVzcyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCXJldCA9IGJlX2ZpbGxfcXVldWUoZHEsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnNpemUgLworCQkJICAgIHNpemVvZihzdHJ1Y3QgcGh5c19hZGRyKSwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkciksIGRxX3ZhZGRyZXNzKTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZV9maWxsX3F1ZXVlIEZhaWxlZCBmb3IgREVGIFBEVSBIRFJcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwltZW0tPmRtYSA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzczsKKwlyZXQgPSBiZV9jbWRfY3JlYXRlX2RlZmF1bHRfcGR1X3F1ZXVlKCZwaGJhLT5jdHJsLCBjcSwgZHEsCisJCQkJCSAgICAgIGRlZl9wZHVfcmluZ19zeiwKKwkJCQkJICAgICAgcGhiYS0+cGFyYW1zLmRlZnBkdV9oZHJfc3opOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUgRmFpbGVkIERFRkhEUlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXBod2lfY3RybHItPmRlZmF1bHRfcGR1X2hkci5pZCA9IHBod2lfY29udGV4dC0+YmVfZGVmX2hkcnEuaWQ7CisJU0VfREVCVUcoREJHX0xWTF84LCAiaXNjc2kgZGVmIHBkdSBpZCBpcyAlZFxuIiwKKwkJIHBod2lfY29udGV4dC0+YmVfZGVmX2hkcnEuaWQpOworCWh3aV9wb3N0X2FzeW5jX2J1ZmZlcnMocGhiYSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JlaXNjc2lfY3JlYXRlX2RlZl9kYXRhKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dCwKKwkJCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJsciwKKwkJCXVuc2lnbmVkIGludCBkZWZfcGR1X3Jpbmdfc3opCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgcmV0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpkYXRhcSwgKmNxOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW07CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJdm9pZCAqZHFfdmFkZHJlc3M7CisKKwlpZHggPSAwOworCWRhdGFxID0gJnBod2lfY29udGV4dC0+YmVfZGVmX2RhdGFxOworCWNxID0gJnBod2lfY29udGV4dC0+YmVfY3E7CisJbWVtID0gJmRhdGFxLT5kbWFfbWVtOworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0RBVEFfUklORzsKKwlkcV92YWRkcmVzcyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCXJldCA9IGJlX2ZpbGxfcXVldWUoZGF0YXEsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnNpemUgLworCQkJICAgIHNpemVvZihzdHJ1Y3QgcGh5c19hZGRyKSwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkciksIGRxX3ZhZGRyZXNzKTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZV9maWxsX3F1ZXVlIEZhaWxlZCBmb3IgREVGIFBEVSBEQVRBXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJbWVtLT5kbWEgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisJcmV0ID0gYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZSgmcGhiYS0+Y3RybCwgY3EsIGRhdGFxLAorCQkJCQkgICAgICBkZWZfcGR1X3Jpbmdfc3osCisJCQkJCSAgICAgIHBoYmEtPnBhcmFtcy5kZWZwZHVfZGF0YV9zeik7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZSBGYWlsZWQiCisJCQkgICAgICIgZm9yIERFRiBQRFUgREFUQVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXBod2lfY3RybHItPmRlZmF1bHRfcGR1X2RhdGEuaWQgPSBwaHdpX2NvbnRleHQtPmJlX2RlZl9kYXRhcS5pZDsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJpc2NzaSBkZWYgZGF0YSBpZCBpcyAlZFxuIiwKKwkJIHBod2lfY29udGV4dC0+YmVfZGVmX2RhdGFxLmlkKTsKKwlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIDApOworCVNFX0RFQlVHKERCR19MVkxfOCwgIkRFRkFVTFQgUERVIERBVEEgUklORyBDUkVBVEVEIFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JlaXNjc2lfcG9zdF9wYWdlcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJc3RydWN0IG1lbV9hcnJheSAqcG1fYXJyOworCXVuc2lnbmVkIGludCBwYWdlX29mZnNldCwgaTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSBzZ2w7CisJaW50IHN0YXR1czsKKworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX1NHRTsKKwlwbV9hcnIgPSBtZW1fZGVzY3ItPm1lbV9hcnJheTsKKworCXBhZ2Vfb2Zmc2V0ID0gKHNpemVvZihzdHJ1Y3QgaXNjc2lfc2dlKSAqIHBoYmEtPnBhcmFtcy5udW1fc2dlX3Blcl9pbyAqCisJCQlwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX3N0YXJ0KSAvIFBBR0VfU0laRTsKKwlmb3IgKGkgPSAwOyBpIDwgbWVtX2Rlc2NyLT5udW1fZWxlbWVudHM7IGkrKykgeworCQlod2lfYnVpbGRfYmVfc2dsX2FycihwaGJhLCBwbV9hcnIsICZzZ2wpOworCQlzdGF0dXMgPSBiZV9jbWRfaXNjc2lfcG9zdF9zZ2xfcGFnZXMoJnBoYmEtPmN0cmwsICZzZ2wsCisJCQkJCQlwYWdlX29mZnNldCwKKwkJCQkJCShwbV9hcnItPnNpemUgLyBQQUdFX1NJWkUpKTsKKwkJcGFnZV9vZmZzZXQgKz0gcG1fYXJyLT5zaXplIC8gUEFHRV9TSVpFOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkJICAgICAicG9zdCBzZ2wgZmFpbGVkLlxuIik7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJCXBtX2FycisrOworCX0KKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJQT1NURUQgUEFHRVMgXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYmVpc2NzaV9jcmVhdGVfd3JiX3JpbmdzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSBzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQsCisJCQkgc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyKQoreworCXVuc2lnbmVkIGludCB3cmJfbWVtX2luZGV4LCBvZmZzZXQsIHNpemUsIG51bV93cmJfcmluZ3M7CisJdTY0IHBhX2FkZHJfbG87CisJdW5zaWduZWQgaW50IGlkeCwgbnVtLCBpOworCXN0cnVjdCBtZW1fYXJyYXkgKnB3cmJfYXJyOworCXZvaWQgKndyYl92YWRkcjsKKwlzdHJ1Y3QgYmVfZG1hX21lbSBzZ2w7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJaW50IHN0YXR1czsKKworCWlkeCA9IDA7CisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fV1JCOworCXB3cmJfYXJyID0ga21hbGxvYyhzaXplb2YoKnB3cmJfYXJyKSAqIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsLAorCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwd3JiX2FycikgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiTWVtb3J5IGFsbG9jIGZhaWxlZCBpbiBjcmVhdGUgd3JiIHJpbmcuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXdyYl92YWRkciA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCXBhX2FkZHJfbG8gPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisJbnVtX3dyYl9yaW5ncyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uc2l6ZSAvCisJCShwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huICogc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IG51bSsrKSB7CisJCWlmIChudW1fd3JiX3JpbmdzKSB7CisJCQlwd3JiX2FycltudW1dLnZpcnR1YWxfYWRkcmVzcyA9IHdyYl92YWRkcjsKKwkJCXB3cmJfYXJyW251bV0uYnVzX2FkZHJlc3MudS5hNjQuYWRkcmVzcwk9IHBhX2FkZHJfbG87CisJCQlwd3JiX2FycltudW1dLnNpemUgPSBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huICoKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKTsKKwkJCXdyYl92YWRkciArPSBwd3JiX2FycltudW1dLnNpemU7CisJCQlwYV9hZGRyX2xvICs9IHB3cmJfYXJyW251bV0uc2l6ZTsKKwkJCW51bV93cmJfcmluZ3MtLTsKKwkJfSBlbHNlIHsKKwkJCWlkeCsrOworCQkJd3JiX3ZhZGRyID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJCQlwYV9hZGRyX2xvID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5cCisJCQkJCWJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisJCQludW1fd3JiX3JpbmdzID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5zaXplIC8KKwkJCQkJKHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4gKgorCQkJCQlzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpOworCQkJcHdyYl9hcnJbbnVtXS52aXJ0dWFsX2FkZHJlc3MgPSB3cmJfdmFkZHI7CisJCQlwd3JiX2FycltudW1dLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3NcCisJCQkJCQk9IHBhX2FkZHJfbG87CisJCQlwd3JiX2FycltudW1dLnNpemUgPSBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huICoKKwkJCQkJCSBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYik7CisJCQl3cmJfdmFkZHIgKz0gcHdyYl9hcnJbbnVtXS5zaXplOworCQkJcGFfYWRkcl9sbyAgICs9IHB3cmJfYXJyW251bV0uc2l6ZTsKKwkJCW51bV93cmJfcmluZ3MtLTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IGkrKykgeworCQl3cmJfbWVtX2luZGV4ID0gMDsKKwkJb2Zmc2V0ID0gMDsKKwkJc2l6ZSA9IDA7CisKKwkJaHdpX2J1aWxkX2JlX3NnbF9ieV9vZmZzZXQocGhiYSwgJnB3cmJfYXJyW2ldLCAmc2dsKTsKKwkJc3RhdHVzID0gYmVfY21kX3dyYnFfY3JlYXRlKCZwaGJhLT5jdHJsLCAmc2dsLAorCQkJCQkgICAgJnBod2lfY29udGV4dC0+YmVfd3JicVtpXSk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJ3cmJxIGNyZWF0ZSBmYWlsZWQuIik7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJCXBod2lfY3RybHItPndyYl9jb250ZXh0W2ldLmNpZCA9IHBod2lfY29udGV4dC0+YmVfd3JicVtpXS5pZDsKKwl9CisJa2ZyZWUocHdyYl9hcnIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3dyYl9oYW5kbGVzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsICogMjsgaW5kZXggKz0gMikgeworCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbaW5kZXhdOworCQlrZnJlZShwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2UpOworCQlrZnJlZShwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGQpOworCX0KK30KKworc3RhdGljIHZvaWQgaHdpX2NsZWFudXAoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OworCWludCBpOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OworCWZvciAoaSA9IDA7IGkgPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsgaSsrKSB7CisJCXEgPSAmcGh3aV9jb250ZXh0LT5iZV93cmJxW2ldOworCQlpZiAocS0+Y3JlYXRlZCkKKwkJCWJlaXNjc2lfY21kX3FfZGVzdHJveShjdHJsLCBxLCBRVFlQRV9XUkJRKTsKKwl9CisKKwlmcmVlX3dyYl9oYW5kbGVzKHBoYmEpOworCisJcSA9ICZwaHdpX2NvbnRleHQtPmJlX2RlZl9oZHJxOworCWlmIChxLT5jcmVhdGVkKQorCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfRFBEVVEpOworCisJcSA9ICZwaHdpX2NvbnRleHQtPmJlX2RlZl9kYXRhcTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX0RQRFVRKTsKKworCWJlaXNjc2lfY21kX3FfZGVzdHJveShjdHJsLCBOVUxMLCBRVFlQRV9TR0wpOworCisJcSA9ICZwaHdpX2NvbnRleHQtPmJlX2NxOworCWlmIChxLT5jcmVhdGVkKQorCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfQ1EpOworCisJcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxLnE7CisJaWYgKHEtPmNyZWF0ZWQpCisJCWJlaXNjc2lfY21kX3FfZGVzdHJveShjdHJsLCBxLCBRVFlQRV9FUSk7Cit9CisKK3N0YXRpYyBpbnQgaHdpX2luaXRfcG9ydChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKKwl1bnNpZ25lZCBpbnQgZGVmX3BkdV9yaW5nX3N6OworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlpbnQgc3RhdHVzOworCisJZGVmX3BkdV9yaW5nX3N6ID0KKwkJcGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCAqIHNpemVvZihzdHJ1Y3QgcGh5c19hZGRyKTsKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwlwaHdpX2NvbnRleHQtPmJlX2VxLm1heF9lcWQgPSAwOworCXBod2lfY29udGV4dC0+YmVfZXEubWluX2VxZCA9IDA7CisJcGh3aV9jb250ZXh0LT5iZV9lcS5jdXJfZXFkID0gNjQ7CisJcGh3aV9jb250ZXh0LT5iZV9lcS5lbmFibGVfYWljID0gZmFsc2U7CisJYmVfY21kX2Z3X2luaXRpYWxpemUoJnBoYmEtPmN0cmwpOworCXN0YXR1cyA9IGJlaXNjc2lfY3JlYXRlX2VxKHBoYmEsIHBod2lfY29udGV4dCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJFUSBub3QgY3JlYXRlZCBcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXR1cyA9IG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3KGN0cmwpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiVW5zdXBwb3J0ZWQgZncgdmVyc2lvbiBcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXR1cyA9IG1nbXRfZ2V0X2Z3X2NvbmZpZyhjdHJsLCBwaGJhKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkVycm9yIGdldHRpbmcgZncgY29uZmlnXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9jcShwaGJhLCBwaHdpX2NvbnRleHQpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiQ1Egbm90IGNyZWF0ZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXR1cyA9IGJlaXNjc2lfY3JlYXRlX2RlZl9oZHIocGhiYSwgcGh3aV9jb250ZXh0LCBwaHdpX2N0cmxyLAorCQkJCQlkZWZfcGR1X3Jpbmdfc3opOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRGVmYXVsdCBIZWFkZXIgbm90IGNyZWF0ZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXR1cyA9IGJlaXNjc2lfY3JlYXRlX2RlZl9kYXRhKHBoYmEsIHBod2lfY29udGV4dCwKKwkJCQkJIHBod2lfY3RybHIsIGRlZl9wZHVfcmluZ19zeik7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJEZWZhdWx0IERhdGEgbm90IGNyZWF0ZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXR1cyA9IGJlaXNjc2lfcG9zdF9wYWdlcyhwaGJhKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgIlBvc3QgU0dMIFBhZ2VzIEZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdHVzID0gYmVpc2NzaV9jcmVhdGVfd3JiX3JpbmdzKHBoYmEsCXBod2lfY29udGV4dCwgcGh3aV9jdHJscik7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJXUkIgUmluZ3Mgbm90IGNyZWF0ZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCVNFX0RFQlVHKERCR19MVkxfOCwgImh3aV9pbml0X3BvcnQgc3VjY2Vzc1xuIik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJod2lfaW5pdF9wb3J0IGZhaWxlZCIpOworCWh3aV9jbGVhbnVwKHBoYmEpOworCXJldHVybiAtRU5PTUVNOworfQorCisKK3N0YXRpYyBpbnQgaHdpX2luaXRfY29udHJvbGxlcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJaWYgKDEgPT0gcGhiYS0+aW5pdF9tZW1bSFdJX01FTV9BREROX0NPTlRFWFRdLm51bV9lbGVtZW50cykgeworCQlwaHdpX2N0cmxyLT5waHdpX2N0eHQgPSAoc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqKXBoYmEtPgorCQkgICAgaW5pdF9tZW1bSFdJX01FTV9BREROX0NPTlRFWFRdLm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgIiBwaHdpX2N0cmxyLT5waHdpX2N0eHQ9JXAgXG4iLAorCQkJIHBod2lfY3RybHItPnBod2lfY3R4dCk7CisJfSBlbHNlIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkhXSV9NRU1fQURETl9DT05URVhUIGlzIG1vcmUgdGhhbiBvbmUgZWxlbWVudC4iCisJCQkgICAgICJGYWlsaW5nIHRvIGxvYWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpc2NzaV9pbml0X2dsb2JhbF90ZW1wbGF0ZXMocGhiYSk7CisJYmVpc2NzaV9pbml0X3dyYl9oYW5kbGUocGhiYSk7CisJaHdpX2luaXRfYXN5bmNfcGR1X2N0eChwaGJhKTsKKwlpZiAoaHdpX2luaXRfcG9ydChwaGJhKSAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJod2lfaW5pdF9jb250cm9sbGVyIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9mcmVlX21lbShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJaW50IGksIGo7CisKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwlpID0gMDsKKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgU0VfTUVNX01BWDsgaSsrKSB7CisJCWZvciAoaiA9IG1lbV9kZXNjci0+bnVtX2VsZW1lbnRzOyBqID4gMDsgai0tKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBoYmEtPnBjaWRldiwKKwkJCSAgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaiAtIDFdLnNpemUsCisJCQkgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS52aXJ0dWFsX2FkZHJlc3MsCisJCQkgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS5idXNfYWRkcmVzcy4KKwkJCQl1LmE2NC5hZGRyZXNzKTsKKwkJfQorCQlrZnJlZShtZW1fZGVzY3ItPm1lbV9hcnJheSk7CisJCW1lbV9kZXNjcisrOworCX0KKwlrZnJlZShwaGJhLT5pbml0X21lbSk7CisJa2ZyZWUocGhiYS0+cGh3aV9jdHJscik7Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9pbml0X2NvbnRyb2xsZXIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWludCByZXQgPSAtRU5PTUVNOworCisJcmV0ID0gYmVpc2NzaV9nZXRfbWVtb3J5KHBoYmEpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZSAtIgorCQkJICAgICAiRmFpbGVkIGluIGJlaXNjc2lfYWxsb2NfbWVtb3J5IFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gaHdpX2luaXRfY29udHJvbGxlcihwaGJhKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfaW5pdDsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJSZXR1cm4gc3VjY2VzcyBmcm9tIGJlaXNjc2lfaW5pdF9jb250cm9sbGVyIik7CisJcmV0dXJuIDA7CisKK2ZyZWVfaW5pdDoKKwliZWlzY3NpX2ZyZWVfbWVtKHBoYmEpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfaW5pdF9zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcl9zZ2xoLCAqbWVtX2Rlc2NyX3NnOworCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZTsKKwlzdHJ1Y3QgaXNjc2lfc2dlICpwZnJhZzsKKwl1bnNpZ25lZCBpbnQgYXJyX2luZGV4LCBpLCBpZHg7CisKKwlwaGJhLT5pb19zZ2xfaG5kbF9hdmJsID0gMDsKKwlwaGJhLT5laF9zZ2xfaG5kbF9hdmJsID0gMDsKKwltZW1fZGVzY3Jfc2dsaCA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjcl9zZ2xoICs9IEhXSV9NRU1fU0dMSDsKKwlpZiAoMSA9PSBtZW1fZGVzY3Jfc2dsaC0+bnVtX2VsZW1lbnRzKSB7CisJCXBoYmEtPmlvX3NnbF9obmRsX2Jhc2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2dsX2hhbmRsZSAqKSAqCisJCQkJCQkgcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCwKKwkJCQkJCSBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJCSAgICAgIk1lbSBBbGxvYyBGYWlsZWQuIEZhaWxpbmcgdG8gbG9hZFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlwaGJhLT5laF9zZ2xfaG5kbF9iYXNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUgKikgKgorCQkJCQkJIChwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCAtCisJCQkJCQkgcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCksCisJCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmICghcGhiYS0+ZWhfc2dsX2huZGxfYmFzZSkgeworCQkJa2ZyZWUocGhiYS0+aW9fc2dsX2huZGxfYmFzZSk7CisJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJCSAgICAgIk1lbSBBbGxvYyBGYWlsZWQuIEZhaWxpbmcgdG8gbG9hZFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0gZWxzZSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJIV0lfTUVNX1NHTEggaXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50LiIKKwkJCSAgICAgIkZhaWxpbmcgdG8gbG9hZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWFycl9pbmRleCA9IDA7CisJaWR4ID0gMDsKKwl3aGlsZSAoaWR4IDwgbWVtX2Rlc2NyX3NnbGgtPm51bV9lbGVtZW50cykgeworCQlwc2dsX2hhbmRsZSA9IG1lbV9kZXNjcl9zZ2xoLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisKKwkJZm9yIChpID0gMDsgaSA8IChtZW1fZGVzY3Jfc2dsaC0+bWVtX2FycmF5W2lkeF0uc2l6ZSAvCisJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc2dsX2hhbmRsZSkpOyBpKyspIHsKKwkJCWlmIChhcnJfaW5kZXggPCBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsKSB7CisJCQkJcGhiYS0+aW9fc2dsX2huZGxfYmFzZVthcnJfaW5kZXhdID0gcHNnbF9oYW5kbGU7CisJCQkJcGhiYS0+aW9fc2dsX2huZGxfYXZibCsrOworCQkJCWFycl9pbmRleCsrOworCQkJfSBlbHNlIHsKKwkJCQlwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW2Fycl9pbmRleCAtCisJCQkJCXBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmxdID0KKwkJCQkJCQkJcHNnbF9oYW5kbGU7CisJCQkJYXJyX2luZGV4Kys7CisJCQkJcGhiYS0+ZWhfc2dsX2huZGxfYXZibCsrOworCQkJfQorCQkJcHNnbF9oYW5kbGUrKzsKKwkJfQorCQlpZHgrKzsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LAorCQkgInBoYmEtPmlvX3NnbF9obmRsX2F2Ymw9JWQiCisJCSAicGhiYS0+ZWhfc2dsX2huZGxfYXZibD0lZCBcbiIsCisJCSBwaGJhLT5pb19zZ2xfaG5kbF9hdmJsLAorCQkgcGhiYS0+ZWhfc2dsX2huZGxfYXZibCk7CisJbWVtX2Rlc2NyX3NnID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyX3NnICs9IEhXSV9NRU1fU0dFOworCVNFX0RFQlVHKERCR19MVkxfOCwgIlxuIG1lbV9kZXNjcl9zZy0+bnVtX2VsZW1lbnRzPSVkIFxuIiwKKwkJIG1lbV9kZXNjcl9zZy0+bnVtX2VsZW1lbnRzKTsKKwlhcnJfaW5kZXggPSAwOworCWlkeCA9IDA7CisJd2hpbGUgKGlkeCA8IG1lbV9kZXNjcl9zZy0+bnVtX2VsZW1lbnRzKSB7CisJCXBmcmFnID0gbWVtX2Rlc2NyX3NnLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisKKwkJZm9yIChpID0gMDsKKwkJICAgICBpIDwgKG1lbV9kZXNjcl9zZy0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLworCQkgICAgIChzaXplb2Yoc3RydWN0IGlzY3NpX3NnZSkgKiBwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8pOworCQkgICAgIGkrKykgeworCQkJaWYgKGFycl9pbmRleCA8IHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwpCisJCQkJcHNnbF9oYW5kbGUgPSBwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW2Fycl9pbmRleF07CisJCQllbHNlCisJCQkJcHNnbF9oYW5kbGUgPSBwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW2Fycl9pbmRleCAtCisJCQkJCQlwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsXTsKKwkJCXBzZ2xfaGFuZGxlLT5wZnJhZyA9IHBmcmFnOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBmcmFnLCAwKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwZnJhZywgMCk7CisJCQlwZnJhZyArPSBwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW87CisJCQlwc2dsX2hhbmRsZS0+c2dsX2luZGV4ID0KKwkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ICsgYXJyX2luZGV4Kys7CisJCX0KKwkJaWR4Kys7CisJfQorCXBoYmEtPmlvX3NnbF9mcmVlX2luZGV4ID0gMDsKKwlwaGJhLT5pb19zZ2xfYWxsb2NfaW5kZXggPSAwOworCXBoYmEtPmVoX3NnbF9mcmVlX2luZGV4ID0gMDsKKwlwaGJhLT5laF9zZ2xfYWxsb2NfaW5kZXggPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhiYV9zZXR1cF9jaWRfdGJscyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJaW50IGksIG5ld19jaWQ7CisKKwlwaGJhLT5jaWRfYXJyYXkgPSBrbWFsbG9jKHNpemVvZih2b2lkICopICogcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwsCisJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoYmEtPmNpZF9hcnJheSkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiAiCisJCQkgICAgICJoYmFfc2V0dXBfY2lkX3RibHNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcGhiYS0+ZXBfYXJyYXkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKikgKgorCQkJCSBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIDIsIEdGUF9LRVJORUwpOworCWlmICghcGhiYS0+ZXBfYXJyYXkpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgaW4gIgorCQkJICAgICAiaGJhX3NldHVwX2NpZF90YmxzIFxuIik7CisJCWtmcmVlKHBoYmEtPmNpZF9hcnJheSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwluZXdfY2lkID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9zdGFydDsKKwlmb3IgKGkgPSAwOyBpIDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IGkrKykgeworCQlwaGJhLT5jaWRfYXJyYXlbaV0gPSBuZXdfY2lkOworCQluZXdfY2lkICs9IDI7CisJfQorCXBoYmEtPmF2bGJsX2NpZHMgPSBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaHdpX2VuYWJsZV9pbnRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXE7CisJdTggX19pb21lbSAqYWRkcjsKKwl1MzIgcmVnOworCXUzMiBlbmFibGVkOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OworCisJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCWFkZHIgPSAodTggX19pb21lbSAqKSAoKHU4IF9faW9tZW0gKikgY3RybC0+cGNpY2ZnICsKKwkJCVBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQpOworCXJlZyA9IGlvcmVhZDMyKGFkZHIpOworCVNFX0RFQlVHKERCR19MVkxfOCwgInJlZyA9eCUwOHggXG4iLCByZWcpOworCisJZW5hYmxlZCA9IHJlZyAmIE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CisJaWYgKCFlbmFibGVkKSB7CisJCXJlZyB8PSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJyZWcgPXglMDh4IGFkZHI9JXAgXG4iLCByZWcsIGFkZHIpOworCQlpb3dyaXRlMzIocmVnLCBhZGRyKTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiZXEtPmlkPSVkIFxuIiwgZXEtPmlkKTsKKworCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsIDAsIDEsIDEpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkluIGh3aV9lbmFibGVfaW50ciwgTm90IEVuYWJsZWQgXG4iKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgaHdpX2Rpc2FibGVfaW50cihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCisJdTggX19pb21lbSAqYWRkciA9IGN0cmwtPnBjaWNmZyArIFBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQ7CisJdTMyIHJlZyA9IGlvcmVhZDMyKGFkZHIpOworCisJdTMyIGVuYWJsZWQgPSByZWcgJiBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLOworCWlmIChlbmFibGVkKSB7CisJCXJlZyAmPSB+TUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwkJaW93cml0ZTMyKHJlZywgYWRkcik7CisJfSBlbHNlCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICAiSW4gaHdpX2Rpc2FibGVfaW50ciwgQWxyZWFkeSBEaXNhYmxlZCBcbiIpOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfaW5pdF9wb3J0KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYmVpc2NzaV9pbml0X2NvbnRyb2xsZXIocGhiYSk7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlaXNjc2lfZGV2X3Byb2JlIC0gRmFpbGVkIGluIgorCQkJICAgICAiYmVpc2NzaV9pbml0X2NvbnRyb2xsZXIgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gYmVpc2NzaV9pbml0X3NnbF9oYW5kbGUocGhiYSk7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlaXNjc2lfZGV2X3Byb2JlIC0gRmFpbGVkIGluIgorCQkJICAgICAiYmVpc2NzaV9pbml0X3NnbF9oYW5kbGUgXG4iKTsKKwkJZ290byBkb19jbGVhbnVwX2N0cmxyOworCX0KKworCWlmIChoYmFfc2V0dXBfY2lkX3RibHMocGhiYSkpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkZhaWxlZCBpbiBoYmFfc2V0dXBfY2lkX3RibHNcbiIpOworCQlrZnJlZShwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKTsKKwkJa2ZyZWUocGhiYS0+ZWhfc2dsX2huZGxfYmFzZSk7CisJCWdvdG8gZG9fY2xlYW51cF9jdHJscjsKKwl9CisKKwlyZXR1cm4gcmV0OworCitkb19jbGVhbnVwX2N0cmxyOgorCWh3aV9jbGVhbnVwKHBoYmEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9wdXJnZV9lcShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXE7CisJc3RydWN0IGJlX2VxX2VudHJ5ICplcWUgPSBOVUxMOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OworCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXEucTsKKwllcWUgPSBxdWV1ZV90YWlsX25vZGUoZXEpOworCisJd2hpbGUgKGVxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkKSAvIDMyXQorCQkJCQkJJiBFUUVfVkFMSURfTUFTSykgeworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCwgZXFlLCAwKTsKKwkJcXVldWVfdGFpbF9pbmMoZXEpOworCQllcWUgPSBxdWV1ZV90YWlsX25vZGUoZXEpOworCX0KK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9jbGVhbl9wb3J0KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwl1bnNpZ25lZCBjaGFyIG1nbXRfc3RhdHVzOworCisJbWdtdF9zdGF0dXMgPSBtZ210X2VwZndfY2xlYW51cChwaGJhLCBDTURfQ09OTkVDVElPTl9DSFVURV8wKTsKKwlpZiAobWdtdF9zdGF0dXMpCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICAibWdtdF9lcGZ3X2NsZWFudXAgRkFJTEVEIFxuIik7CisJaHdpX2NsZWFudXAocGhiYSk7CisJaHdpX3B1cmdlX2VxKHBoYmEpOworCWtmcmVlKHBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpOworCWtmcmVlKHBoYmEtPmVoX3NnbF9obmRsX2Jhc2UpOworCWtmcmVlKHBoYmEtPmNpZF9hcnJheSk7CisJa2ZyZWUocGhiYS0+ZXBfYXJyYXkpOworfQorCit2b2lkCitiZWlzY3NpX29mZmxvYWRfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkgICBzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3QgaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiAqcHdyYiA9IE5VTEw7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9jb25uLT5waGJhOworCXUzMiBkb29yYmVsbCA9IDA7CisKKwkvKgorCSAqIFdlIGNhbiBhbHdheXMgdXNlIDAgaGVyZSBiZWNhdXNlIGl0IGlzIHJlc2VydmVkIGJ5IGxpYmlzY3NpIGZvcgorCSAqIGxvZ2luL3N0YXJ0dXAgcmVsYXRlZCB0YXNrcy4KKwkgKi8KKwlwd3JiX2hhbmRsZSA9IGFsbG9jX3dyYl9oYW5kbGUocGhiYSwgYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLCAwKTsKKwlwd3JiID0gKHN0cnVjdCBpc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiICopcHdyYl9oYW5kbGUtPnB3cmI7CisJbWVtc2V0KHB3cmIsIDAsIHNpemVvZigqcHdyYikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwKKwkJICAgICAgbWF4X2J1cnN0X2xlbmd0aCwgcHdyYiwgcGFyYW1zLT5kd1tvZmZzZXRvZgorCQkgICAgICAoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgbWF4X2J1cnN0X2xlbmd0aCkgLyAzMl0pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwKKwkJICAgICAgbWF4X3NlbmRfZGF0YV9zZWdtZW50X2xlbmd0aCwgcHdyYiwKKwkJICAgICAgcGFyYW1zLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBtYXhfc2VuZF9kYXRhX3NlZ21lbnRfbGVuZ3RoKSAvIDMyXSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLAorCQkgICAgICBmaXJzdF9idXJzdF9sZW5ndGgsCisJCSAgICAgIHB3cmIsCisJCSAgICAgIHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgZmlyc3RfYnVyc3RfbGVuZ3RoKSAvIDMyXSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIGVybCwgcHdyYiwKKwkJICAgICAgKHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgZXJsKSAvIDMyXSAmIE9GRkxEX1BBUkFNU19FUkwpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIGRkZSwgcHdyYiwKKwkJICAgICAgKHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgZGRlKSAvIDMyXSAmIE9GRkxEX1BBUkFNU19EREUpID4+IDIpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgaGRlLCBwd3JiLAorCQkgICAgICAocGFyYW1zLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBoZGUpIC8gMzJdICYgT0ZGTERfUEFSQU1TX0hERSkgPj4gMyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBpcjJ0LCBwd3JiLAorCQkgICAgICAocGFyYW1zLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBpcjJ0KSAvIDMyXSAmIE9GRkxEX1BBUkFNU19JUjJUKSA+PiA0KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIGltZCwgcHdyYiwKKwkJICAgICAgKHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgIGltZCkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfSU1EKSA+PiA1KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIHN0YXRfc24sCisJCSAgICAgIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGV4cF9zdGF0c24pIC8gMzJdICsgMSkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgdHlwZSwgcHdyYiwKKwkJICAgICAgMHg3KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIHdyYl9pZHgsCisJCSAgICAgIHB3cmIsIHB3cmJfaGFuZGxlLT53cmJfaW5kZXgpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgcHRyMm5leHR3cmIsCisJCSAgICAgIHB3cmIsIHB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCQlzZXNzaW9uX3N0YXRlLCBwd3JiLCAwKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIGNvbXBsdG9uYWNrLAorCQkgICAgICBwd3JiLCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIG5vdHByZWRibHEsCisJCSAgICAgIHB3cmIsIDApOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgbW9kZSwgcHdyYiwKKwkJICAgICAgMCk7CisKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSVNDU0lfTUVNX0dMT0JBTF9IRUFERVI7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCQlwYWRfYnVmZmVyX2FkZHJfaGksIHB3cmIsCisJCSAgICAgIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLmJ1c19hZGRyZXNzLnUuYTMyLmFkZHJlc3NfaGkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwKKwkJCXBhZF9idWZmZXJfYWRkcl9sbywgcHdyYiwKKwkJICAgICAgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0uYnVzX2FkZHJlc3MudS5hMzIuYWRkcmVzc19sbyk7CisKKwliZV9kd3NfbGVfdG9fY3B1KHB3cmIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYikpOworCisJZG9vcmJlbGwgfD0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkICYgREJfV1JCX1BPU1RfQ0lEX01BU0s7CisJZG9vcmJlbGwgfD0gKHB3cmJfaGFuZGxlLT53cmJfaW5kZXggJiBEQl9ERUZfUERVX1dSQl9JTkRFWF9NQVNLKSA8PAorCQkJCQlEQl9ERUZfUERVX1dSQl9JTkRFWF9TSElGVDsKKwlkb29yYmVsbCB8PSAxIDw8IERCX0RFRl9QRFVfTlVNX1BPU1RFRF9TSElGVDsKKworCWlvd3JpdGUzMihkb29yYmVsbCwgcGhiYS0+ZGJfdmEgKyBEQl9UWFVMUDBfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9wYXJzZV9wZHUoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIGl0dF90IGl0dCwKKwkJCSAgICAgIGludCAqaW5kZXgsIGludCAqYWdlKQoreworCSppbmRleCA9IGJlMzJfdG9fY3B1KGl0dCkgPj4gMTY7CisJaWYgKGFnZSkKKwkJKmFnZSA9IGNvbm4tPnNlc3Npb24tPmFnZTsKK30KKworLyoqCisgKiBiZWlzY3NpX2FsbG9jX3BkdSAtIGFsbG9jYXRlcyBwZHUgYW5kIHJlbGF0ZWQgcmVzb3VyY2VzCisgKiBAdGFzazogbGliaXNjc2kgdGFzaworICogQG9wY29kZTogb3Bjb2RlIG9mIHBkdSBmb3IgdGFzaworICoKKyAqIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhlIHNlc3Npb24gbG9jayBoZWxkLiBJdCB3aWxsIGFsbG9jYXRlCisgKiB0aGUgd3JiIGFuZCBzZ2wgaWYgbmVlZGVkIGZvciB0aGUgY29tbWFuZC4gQW5kIGl0IHdpbGwgcHJlcAorICogdGhlIHBkdSdzIGl0dC4gYmVpc2NzaV9wYXJzZV9wZHUgd2lsbCBsYXRlciB0cmFuc2xhdGUKKyAqIHRoZSBwZHUgaXR0IHRvIHRoZSBsaWJpc2NzaSB0YXNrIGl0dC4KKyAqLworc3RhdGljIGludCBiZWlzY3NpX2FsbG9jX3BkdShzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgdWludDhfdCBvcGNvZGUpCit7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9jb25uLT5waGJhOworCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJaXR0X3QgaXR0OworCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzcyA9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9zZXNzOworCWRtYV9hZGRyX3QgcGFkZHI7CisKKwlpb190YXNrLT5jbWRfYmhzID0gcGNpX3Bvb2xfYWxsb2MoYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCwKKwkJCQkJICBHRlBfS0VSTkVMLCAmcGFkZHIpOworCisJaWYgKCFpb190YXNrLT5jbWRfYmhzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlvX3Rhc2stPmJoc19wYS51LmE2NC5hZGRyZXNzID0gcGFkZHI7CisJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsCisJCQkJCQliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQsCisJCQkJCQl0YXNrLT5pdHQpOworCWlvX3Rhc2stPnB3cmJfaGFuZGxlLT5waW9faGFuZGxlID0gdGFzazsKKwlpb190YXNrLT5jb25uID0gYmVpc2NzaV9jb25uOworCisJdGFzay0+aGRyID0gKHN0cnVjdCBpc2NzaV9oZHIgKikmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyOworCXRhc2stPmhkcl9tYXggPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9iaHMpOworCisJaWYgKHRhc2stPnNjKSB7CisJCXNwaW5fbG9jaygmcGhiYS0+aW9fc2dsX2xvY2spOworCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IGFsbG9jX2lvX3NnbF9oYW5kbGUocGhiYSk7CisJCXNwaW5fdW5sb2NrKCZwaGJhLT5pb19zZ2xfbG9jayk7CisJCWlmICghaW9fdGFzay0+cHNnbF9oYW5kbGUpCisJCQlnb3RvIGZyZWVfaG5kbHM7CisKKwl9IGVsc2UgeworCQlpb190YXNrLT5zY3NpX2NtbmQgPSBOVUxMOworCQlpZiAoKHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spID09IElTQ1NJX09QX0xPR0lOKSB7CisJCQlpZiAoIWJlaXNjc2lfY29ubi0+bG9naW5faW5fcHJvZ3Jlc3MpIHsKKwkJCQlzcGluX2xvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlID0gKHN0cnVjdCBzZ2xfaGFuZGxlICopCisJCQkJCQlhbGxvY19tZ210X3NnbF9oYW5kbGUocGhiYSk7CisJCQkJc3Bpbl91bmxvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCQkJCWlmICghaW9fdGFzay0+cHNnbF9oYW5kbGUpCisJCQkJCWdvdG8gZnJlZV9obmRsczsKKworCQkJCWJlaXNjc2lfY29ubi0+bG9naW5faW5fcHJvZ3Jlc3MgPSAxOworCQkJCWJlaXNjc2lfY29ubi0+cGxvZ2luX3NnbF9oYW5kbGUgPQorCQkJCQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlOworCQkJfSBlbHNlIHsKKwkJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9CisJCQkJCQliZWlzY3NpX2Nvbm4tPnBsb2dpbl9zZ2xfaGFuZGxlOworCQkJfQorCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlID0gYWxsb2NfbWdtdF9zZ2xfaGFuZGxlKHBoYmEpOworCQkJc3Bpbl91bmxvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCQkJaWYgKCFpb190YXNrLT5wc2dsX2hhbmRsZSkKKwkJCQlnb3RvIGZyZWVfaG5kbHM7CisJCX0KKwl9CisJaXR0ID0gKGl0dF90KSBjcHVfdG9fYmUzMigoKHVuc2lnbmVkIGludCl0YXNrLT5pdHQgPDwgMTYpIHwKKwkJCSh1bnNpZ25lZCBpbnQpKGlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgpKTsKKwlpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuaXR0ID0gaXR0OworCXJldHVybiAwOworCitmcmVlX2huZGxzOgorCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWRdOworCWZyZWVfd3JiX2hhbmRsZShwaGJhLCBwd3JiX2NvbnRleHQsIGlvX3Rhc2stPnB3cmJfaGFuZGxlKTsKKwlpb190YXNrLT5wd3JiX2hhbmRsZSA9IE5VTEw7CisJcGNpX3Bvb2xfZnJlZShiZWlzY3NpX3Nlc3MtPmJoc19wb29sLCBpb190YXNrLT5jbWRfYmhzLAorCQkgICAgICBpb190YXNrLT5iaHNfcGEudS5hNjQuYWRkcmVzcyk7CisJU0VfREVCVUcoREJHX0xWTF8xLCAiQWxsb2Mgb2YgU0dMX0lDRCBGYWlsZWQgXG4iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9jbGVhbnVwX3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCit7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9jb25uLT5waGJhOworCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzcyA9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9zZXNzOworCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dDsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkXTsKKwlpZiAoaW9fdGFzay0+cHdyYl9oYW5kbGUpIHsKKwkJZnJlZV93cmJfaGFuZGxlKHBoYmEsIHB3cmJfY29udGV4dCwgaW9fdGFzay0+cHdyYl9oYW5kbGUpOworCQlpb190YXNrLT5wd3JiX2hhbmRsZSA9IE5VTEw7CisJfQorCisJaWYgKGlvX3Rhc2stPmNtZF9iaHMpIHsKKwkJcGNpX3Bvb2xfZnJlZShiZWlzY3NpX3Nlc3MtPmJoc19wb29sLCBpb190YXNrLT5jbWRfYmhzLAorCQkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTY0LmFkZHJlc3MpOworCX0KKworCWlmICh0YXNrLT5zYykgeworCQlpZiAoaW9fdGFzay0+cHNnbF9oYW5kbGUpIHsKKwkJCXNwaW5fbG9jaygmcGhiYS0+aW9fc2dsX2xvY2spOworCQkJZnJlZV9pb19zZ2xfaGFuZGxlKHBoYmEsIGlvX3Rhc2stPnBzZ2xfaGFuZGxlKTsKKwkJCXNwaW5fdW5sb2NrKCZwaGJhLT5pb19zZ2xfbG9jayk7CisJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spID09IElTQ1NJX09QX0xPR0lOKQorCQkJcmV0dXJuOworCQlpZiAoaW9fdGFzay0+cHNnbF9oYW5kbGUpIHsKKwkJCXNwaW5fbG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJCQlmcmVlX21nbXRfc2dsX2hhbmRsZShwaGJhLCBpb190YXNrLT5wc2dsX2hhbmRsZSk7CisJCQlzcGluX3VubG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IE5VTEw7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9pb3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgIHVuc2lnbmVkIGludCBudW1fc2csIHVuc2lnbmVkIGludCB4ZmVybGVuLAorCQkJICB1bnNpZ25lZCBpbnQgd3JpdGVkaXIpCit7CisKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IHRhc2stPmNvbm47CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2Nvbm4tPnBoYmE7CisJc3RydWN0IGlzY3NpX3dyYiAqcHdyYiA9IE5VTEw7CisJdW5zaWduZWQgaW50IGRvb3JiZWxsID0gMDsKKworCXB3cmIgPSBpb190YXNrLT5wd3JiX2hhbmRsZS0+cHdyYjsKKwlpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuZXhwX3N0YXRzbiA9IDA7CisJaW9fdGFzay0+YmhzX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmVfY21kX2Jocyk7CisKKwlpZiAod3JpdGVkaXIpIHsKKwkJU0VfREVCVUcoREJHX0xWTF80LCAiIFdSSVRFIENvbW1hbmQgXHQiKTsKKwkJbWVtc2V0KCZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdSwgMCwgNDgpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3BkdV9kYXRhX291dCwgaXR0LAorCQkJICAgICAgJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2RhdGFfcGR1LAorCQkJICAgICAgKHVuc2lnbmVkIGludClpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuaXR0KTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIG9wY29kZSwKKwkJCSAgICAgICZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdSwKKwkJCSAgICAgIElTQ1NJX09QQ09ERV9TQ1NJX0RBVEFfT1VUKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIGZpbmFsX2JpdCwKKwkJCSAgICAgICZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdSwgMSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLCBJTklfV1JfQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMSk7CisJfSBlbHNlIHsKKwkJU0VfREVCVUcoREJHX0xWTF80LCAiUkVBRCBDb21tYW5kIFx0Iik7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLCBJTklfUkRfQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMCk7CisJfQorCW1lbWNweSgmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUuCisJICAgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3BkdV9kYXRhX291dCwgbHVuKSAvIDMyXSwKKwkgICAgICAgaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLmx1biwgc2l6ZW9mKHN0cnVjdCBzY3NpX2x1bikpOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGx1biwgcHdyYiwKKwkJICAgICAgY3B1X3RvX2JlMTYoKHVuc2lnbmVkIHNob3J0KWlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci4KKwkJCQkgIGx1blswXSkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCByMnRfZXhwX2R0bCwgcHdyYiwgeGZlcmxlbik7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHdyYl9pZHgsIHB3cmIsCisJCSAgICAgIGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXgpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBjbWRzbl9pdHQsIHB3cmIsCisJCSAgICAgIGJlMzJfdG9fY3B1KHRhc2stPmNtZHNuKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnbF9pY2RfaWR4LCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4KTsKKworCWh3aV93cml0ZV9zZ2wocHdyYiwgc2csIG51bV9zZywgaW9fdGFzayk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcHRyMm5leHR3cmIsIHB3cmIsCisJCSAgICAgIGlvX3Rhc2stPnB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4KTsKKwliZV9kd3NfbGVfdG9fY3B1KHB3cmIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSk7CisKKwlkb29yYmVsbCB8PSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgJiBEQl9XUkJfUE9TVF9DSURfTUFTSzsKKwlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCisJCSAgICAgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CisJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CisKKwlpb3dyaXRlMzIoZG9vcmJlbGwsIHBoYmEtPmRiX3ZhICsgREJfVFhVTFAwX09GRlNFVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9tdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICphYm9ydGVkX2lvX3Rhc2ssICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IHRhc2stPmNvbm47CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2Nvbm4tPnBoYmE7CisJc3RydWN0IGlzY3NpX3dyYiAqcHdyYiA9IE5VTEw7CisJdW5zaWduZWQgaW50IGRvb3JiZWxsID0gMDsKKwlzdHJ1Y3QgaXNjc2lfdGFzayAqYWJvcnRlZF90YXNrOworCisJcHdyYiA9IGlvX3Rhc2stPnB3cmJfaGFuZGxlLT5wd3JiOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBjbWRzbl9pdHQsIHB3cmIsCisJCSAgICAgIGJlMzJfdG9fY3B1KHRhc2stPmNtZHNuKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHdyYl9pZHgsIHB3cmIsCisJCSAgICAgIGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXgpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2xfaWNkX2lkeCwgcHdyYiwKKwkJICAgICAgaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCk7CisKKwlzd2l0Y2ggKHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spIHsKKwljYXNlIElTQ1NJX09QX0xPR0lOOgorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgVEdUX0RNX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGNtZHNuX2l0dCwgcHdyYiwgMSk7CisJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfTk9PUF9PVVQ6CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLCBJTklfUkRfQ01EKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9URVhUOgorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1dSX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDEpOworCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOworCQlicmVhazsKKwljYXNlIElTQ1NJX09QX1NDU0lfVE1GVU5DOgorCQlhYm9ydGVkX3Rhc2sgPSBpc2NzaV9pdHRfdG9fdGFzayhjb25uLAorCQkJCQkoKHN0cnVjdCBpc2NzaV90bSAqKXRhc2stPmhkciktPnJ0dCk7CisJCSBpZiAoIWFib3J0ZWRfdGFzaykKKwkJCXJldHVybiAwOworCQlhYm9ydGVkX2lvX3Rhc2sgPSBhYm9ydGVkX3Rhc2stPmRkX2RhdGE7CisJCWlmICghYWJvcnRlZF9pb190YXNrLT5zY3NpX2NtbmQpCisJCQlyZXR1cm4gMDsKKworCQltZ210X2ludmFsaWRhdGVfaWNkcyhwaGJhLAorCQkJCSAgICAgYWJvcnRlZF9pb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4LAorCQkJCSAgICAgYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsIElOSV9UTUZfQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOworCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOworCQlicmVhazsKKwljYXNlIElTQ1NJX09QX0xPR09VVDoKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCQlIV0hfVFlQRV9MT0dPVVQpOworCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIm9wY29kZSA9JWQgTm90IHN1cHBvcnRlZCBcbiIsCisJCQkgdGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCByMnRfZXhwX2R0bCwgcHdyYiwKKwkJICAgICAgYmUzMl90b19jcHUodGFzay0+ZGF0YV9jb3VudCkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBwdHIybmV4dHdyYiwgcHdyYiwKKwkJICAgICAgaW9fdGFzay0+cHdyYl9oYW5kbGUtPm54dF93cmJfaW5kZXgpOworCWJlX2R3c19sZV90b19jcHUocHdyYiwgc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKTsKKworCWRvb3JiZWxsIHw9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOworCWRvb3JiZWxsIHw9IChpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYKKwkJICAgICBEQl9ERUZfUERVX1dSQl9JTkRFWF9NQVNLKSA8PCBEQl9ERUZfUERVX1dSQl9JTkRFWF9TSElGVDsKKwlkb29yYmVsbCB8PSAxIDw8IERCX0RFRl9QRFVfTlVNX1BPU1RFRF9TSElGVDsKKwlpb3dyaXRlMzIoZG9vcmJlbGwsIHBoYmEtPmRiX3ZhICsgREJfVFhVTFAwX09GRlNFVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV90YXNrX3htaXQoc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjID0gdGFzay0+c2M7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBudW1fc2c7CisJdW5zaWduZWQgaW50ICB3cml0ZWRpciA9IDAsIHhmZXJsZW4gPSAwOworCisJU0VfREVCVUcoREJHX0xWTF80LCAiXG4gY2lkPSVkIEluIGJlaXNjc2lfdGFza194bWl0IHRhc2s9JXAgY29ubj0lcCBcdCIKKwkJICJiZWlzY3NpX2Nvbm49JXAgXG4iLCBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQsCisJCSB0YXNrLCBjb25uLCBiZWlzY3NpX2Nvbm4pOworCWlmICghc2MpCisJCXJldHVybiBiZWlzY3NpX210YXNrKHRhc2spOworCisJaW9fdGFzay0+c2NzaV9jbW5kID0gc2M7CisJbnVtX3NnID0gc2NzaV9kbWFfbWFwKHNjKTsKKwlpZiAobnVtX3NnIDwgMCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICIgc2NzaV9kbWFfbWFwIEZhaWxlZFxuIikKKwkJcmV0dXJuIG51bV9zZzsKKwl9CisJU0VfREVCVUcoREJHX0xWTF80LCAieGZlcmxlbj0weCUwOHggc2NtZD0lcCBudW1fc2c9JWQgc2VybnVtPSVsdVxuIiwKKwkJICAoc2NzaV9idWZmbGVuKHNjKSksIHNjLCBudW1fc2csIHNjLT5zZXJpYWxfbnVtYmVyKTsKKwl4ZmVybGVuID0gc2NzaV9idWZmbGVuKHNjKTsKKwlzZyA9IHNjc2lfc2dsaXN0KHNjKTsKKwlpZiAoc2MtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKKwkJd3JpdGVkaXIgPSAxOworCQlTRV9ERUJVRyhEQkdfTFZMXzQsICJ0YXNrLT5pbW1fY291bnQ9MHglMDh4IFxuIiwKKwkJCSB0YXNrLT5pbW1fY291bnQpOworCX0gZWxzZQorCQl3cml0ZWRpciA9IDA7CisJcmV0dXJuIGJlaXNjc2lfaW90YXNrKHRhc2ssIHNnLCBudW1fc2csIHhmZXJsZW4sIHdyaXRlZGlyKTsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBOVUxMOworCisJcGhiYSA9IChzdHJ1Y3QgYmVpc2NzaV9oYmEgKilwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKKwlpZiAoIXBoYmEpIHsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJiZWlzY3NpX3JlbW92ZSBjYWxsZWQgd2l0aCBubyBwaGJhIFxuIik7CisJCXJldHVybjsKKwl9CisKKwlod2lfZGlzYWJsZV9pbnRyKHBoYmEpOworCWlmIChwaGJhLT5wY2lkZXYtPmlycSkKKwkJZnJlZV9pcnEocGhiYS0+cGNpZGV2LT5pcnEsIHBoYmEpOworCWRlc3Ryb3lfd29ya3F1ZXVlKHBoYmEtPndxKTsKKwlpZiAoYmxrX2lvcG9sbF9lbmFibGVkKQorCQlibGtfaW9wb2xsX2Rpc2FibGUoJnBoYmEtPmlvcG9sbCk7CisKKwliZWlzY3NpX2NsZWFuX3BvcnQocGhiYSk7CisJYmVpc2NzaV9mcmVlX21lbShwaGJhKTsKKwliZWlzY3NpX3VubWFwX3BjaV9mdW5jdGlvbihwaGJhKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBoYmEtPnBjaWRldiwKKwkJCSAgICBwaGJhLT5jdHJsLm1ib3hfbWVtX2FsbG9jZWQuc2l6ZSwKKwkJCSAgICBwaGJhLT5jdHJsLm1ib3hfbWVtX2FsbG9jZWQudmEsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLmRtYSk7CisJaXNjc2lfaG9zdF9yZW1vdmUocGhiYS0+c2hvc3QpOworCXBjaV9kZXZfcHV0KHBoYmEtPnBjaWRldik7CisJaXNjc2lfaG9zdF9mcmVlKHBoYmEtPnNob3N0KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYmVpc2NzaV9kZXZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gTlVMTDsKKwlpbnQgcmV0OworCisJcmV0ID0gYmVpc2NzaV9lbmFibGVfcGNpKHBjaWRldik7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCSAgICAgIkZhaWxlZCB0byBlbmFibGUgcGNpIGRldmljZSBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBoYmEgPSBiZWlzY3NpX2hiYV9hbGxvYyhwY2lkZXYpOworCWlmICghcGhiYSkgeworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCSIgRmFpbGVkIGluIGJlaXNjc2lfaGJhX2FsbG9jIFxuIik7CisJCWdvdG8gZGlzYWJsZV9wY2k7CisJfQorCisJcGNpX3NldF9kcnZkYXRhKHBjaWRldiwgcGhiYSk7CisJcmV0ID0gYmVfY3RybF9pbml0KHBoYmEsIHBjaWRldik7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgorCQkJCSJGYWlsZWQgaW4gYmVfY3RybF9pbml0XG4iKTsKKwkJZ290byBoYmFfZnJlZTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmcGhiYS0+aW9fc2dsX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcGhiYS0+aXNyX2xvY2spOworCWJlaXNjc2lfZ2V0X3BhcmFtcyhwaGJhKTsKKwlyZXQgPSBiZWlzY3NpX2luaXRfcG9ydChwaGJhKTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgorCQkJICAgICAiRmFpbGVkIGluIGJlaXNjc2lfaW5pdF9wb3J0XG4iKTsKKwkJZ290byBmcmVlX3BvcnQ7CisJfQorCisJc25wcmludGYocGhiYS0+d3FfbmFtZSwgc2l6ZW9mKHBoYmEtPndxX25hbWUpLCAiYmVpc2NzaV9xX2lycSV1IiwKKwkJIHBoYmEtPnNob3N0LT5ob3N0X25vKTsKKwlwaGJhLT53cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKHBoYmEtPndxX25hbWUpOworCWlmICghcGhiYS0+d3EpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHdvcmsgcXVldWVcbiIpOworCQlnb3RvIGZyZWVfdHdxOworCX0KKworCUlOSVRfV09SSygmcGhiYS0+d29ya19jcXMsIGJlaXNjc2lfcHJvY2Vzc19hbGxfY3FzKTsKKworCWlmIChibGtfaW9wb2xsX2VuYWJsZWQpIHsKKwkJYmxrX2lvcG9sbF9pbml0KCZwaGJhLT5pb3BvbGwsIGJlX2lvcG9sbF9idWRnZXQsIGJlX2lvcG9sbCk7CisJCWJsa19pb3BvbGxfZW5hYmxlKCZwaGJhLT5pb3BvbGwpOworCX0KKworCXJldCA9IGJlaXNjc2lfaW5pdF9pcnFzKHBoYmEpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkgICAgICJGYWlsZWQgdG8gYmVpc2NzaV9pbml0X2lycXNcbiIpOworCQlnb3RvIGZyZWVfYmxrZW5ibGQ7CisJfQorCXJldCA9IGh3aV9lbmFibGVfaW50cihwaGJhKTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgorCQkJICAgICAiRmFpbGVkIHRvIGh3aV9lbmFibGVfaW50clxuIik7CisJCWdvdG8gZnJlZV9jdHJscjsKKwl9CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJcblxuXG4gU1VDQ0VTUyAtIERSSVZFUiBMT0FERUQgXG5cblxuIik7CisJcmV0dXJuIDA7CisKK2ZyZWVfY3RybHI6CisJaWYgKHBoYmEtPnBjaWRldi0+aXJxKQorCQlmcmVlX2lycShwaGJhLT5wY2lkZXYtPmlycSwgcGhiYSk7CitmcmVlX2Jsa2VuYmxkOgorCWRlc3Ryb3lfd29ya3F1ZXVlKHBoYmEtPndxKTsKKwlpZiAoYmxrX2lvcG9sbF9lbmFibGVkKQorCQlibGtfaW9wb2xsX2Rpc2FibGUoJnBoYmEtPmlvcG9sbCk7CitmcmVlX3R3cToKKwliZWlzY3NpX2NsZWFuX3BvcnQocGhiYSk7CisJYmVpc2NzaV9mcmVlX21lbShwaGJhKTsKK2ZyZWVfcG9ydDoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBoYmEtPnBjaWRldiwKKwkJCSAgICBwaGJhLT5jdHJsLm1ib3hfbWVtX2FsbG9jZWQuc2l6ZSwKKwkJCSAgICBwaGJhLT5jdHJsLm1ib3hfbWVtX2FsbG9jZWQudmEsCisJCQkgICBwaGJhLT5jdHJsLm1ib3hfbWVtX2FsbG9jZWQuZG1hKTsKKwliZWlzY3NpX3VubWFwX3BjaV9mdW5jdGlvbihwaGJhKTsKK2hiYV9mcmVlOgorCWlzY3NpX2hvc3RfcmVtb3ZlKHBoYmEtPnNob3N0KTsKKwlwY2lfZGV2X3B1dChwaGJhLT5wY2lkZXYpOworCWlzY3NpX2hvc3RfZnJlZShwaGJhLT5zaG9zdCk7CitkaXNhYmxlX3BjaToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0ID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gRFJWX05BTUUsCisJLmNhcHMgPSBDQVBfUkVDT1ZFUllfTDAgfCBDQVBfSERSREdTVCB8CisJCUNBUF9NVUxUSV9SMlQgfCBDQVBfREFUQURHU1QgfCBDQVBfREFUQV9QQVRIX09GRkxPQUQsCisJLnBhcmFtX21hc2sgPSBJU0NTSV9NQVhfUkVDVl9ETEVOR1RIIHwKKwkJSVNDU0lfTUFYX1hNSVRfRExFTkdUSCB8CisJCUlTQ1NJX0hEUkRHU1RfRU4gfAorCQlJU0NTSV9EQVRBREdTVF9FTiB8CisJCUlTQ1NJX0lOSVRJQUxfUjJUX0VOIHwKKwkJSVNDU0lfTUFYX1IyVCB8CisJCUlTQ1NJX0lNTV9EQVRBX0VOIHwKKwkJSVNDU0lfRklSU1RfQlVSU1QgfAorCQlJU0NTSV9NQVhfQlVSU1QgfAorCQlJU0NTSV9QRFVfSU5PUkRFUl9FTiB8CisJCUlTQ1NJX0RBVEFTRVFfSU5PUkRFUl9FTiB8CisJCUlTQ1NJX0VSTCB8CisJCUlTQ1NJX0NPTk5fUE9SVCB8CisJCUlTQ1NJX0NPTk5fQUREUkVTUyB8CisJCUlTQ1NJX0VYUF9TVEFUU04gfAorCQlJU0NTSV9QRVJTSVNURU5UX1BPUlQgfAorCQlJU0NTSV9QRVJTSVNURU5UX0FERFJFU1MgfAorCQlJU0NTSV9UQVJHRVRfTkFNRSB8IElTQ1NJX1RQR1QgfAorCQlJU0NTSV9VU0VSTkFNRSB8IElTQ1NJX1BBU1NXT1JEIHwKKwkJSVNDU0lfVVNFUk5BTUVfSU4gfCBJU0NTSV9QQVNTV09SRF9JTiB8CisJCUlTQ1NJX0ZBU1RfQUJPUlQgfCBJU0NTSV9BQk9SVF9UTU8gfAorCQlJU0NTSV9MVV9SRVNFVF9UTU8gfAorCQlJU0NTSV9QSU5HX1RNTyB8IElTQ1NJX1JFQ1ZfVE1PIHwKKwkJSVNDU0lfSUZBQ0VfTkFNRSB8IElTQ1NJX0lOSVRJQVRPUl9OQU1FLAorCS5ob3N0X3BhcmFtX21hc2sgPSBJU0NTSV9IT1NUX0hXQUREUkVTUyB8IElTQ1NJX0hPU1RfSVBBRERSRVNTIHwKKwkJCQlJU0NTSV9IT1NUX0lOSVRJQVRPUl9OQU1FLAorCS5jcmVhdGVfc2Vzc2lvbiA9IGJlaXNjc2lfc2Vzc2lvbl9jcmVhdGUsCisJLmRlc3Ryb3lfc2Vzc2lvbiA9IGJlaXNjc2lfc2Vzc2lvbl9kZXN0cm95LAorCS5jcmVhdGVfY29ubiA9IGJlaXNjc2lfY29ubl9jcmVhdGUsCisJLmJpbmRfY29ubiA9IGJlaXNjc2lfY29ubl9iaW5kLAorCS5kZXN0cm95X2Nvbm4gPSBpc2NzaV9jb25uX3RlYXJkb3duLAorCS5zZXRfcGFyYW0gPSBiZWlzY3NpX3NldF9wYXJhbSwKKwkuZ2V0X2Nvbm5fcGFyYW0gPSBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtLAorCS5nZXRfc2Vzc2lvbl9wYXJhbSA9IGlzY3NpX3Nlc3Npb25fZ2V0X3BhcmFtLAorCS5nZXRfaG9zdF9wYXJhbSA9IGJlaXNjc2lfZ2V0X2hvc3RfcGFyYW0sCisJLnN0YXJ0X2Nvbm4gPSBiZWlzY3NpX2Nvbm5fc3RhcnQsCisJLnN0b3BfY29ubiA9IGJlaXNjc2lfY29ubl9zdG9wLAorCS5zZW5kX3BkdSA9IGlzY3NpX2Nvbm5fc2VuZF9wZHUsCisJLnhtaXRfdGFzayA9IGJlaXNjc2lfdGFza194bWl0LAorCS5jbGVhbnVwX3Rhc2sgPSBiZWlzY3NpX2NsZWFudXBfdGFzaywKKwkuYWxsb2NfcGR1ID0gYmVpc2NzaV9hbGxvY19wZHUsCisJLnBhcnNlX3BkdV9pdHQgPSBiZWlzY3NpX3BhcnNlX3BkdSwKKwkuZ2V0X3N0YXRzID0gYmVpc2NzaV9jb25uX2dldF9zdGF0cywKKwkuZXBfY29ubmVjdCA9IGJlaXNjc2lfZXBfY29ubmVjdCwKKwkuZXBfcG9sbCA9IGJlaXNjc2lfZXBfcG9sbCwKKwkuZXBfZGlzY29ubmVjdCA9IGJlaXNjc2lfZXBfZGlzY29ubmVjdCwKKwkuc2Vzc2lvbl9yZWNvdmVyeV90aW1lZG91dCA9IGlzY3NpX3Nlc3Npb25fcmVjb3ZlcnlfdGltZWRvdXQsCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYmVpc2NzaV9wY2lfZHJpdmVyID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLnByb2JlID0gYmVpc2NzaV9kZXZfcHJvYmUsCisJLnJlbW92ZSA9IGJlaXNjc2lfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGJlaXNjc2lfcGNpX2lkX3RhYmxlCit9OworCitzdGF0aWMgaW50IF9faW5pdCBiZWlzY3NpX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWJlaXNjc2lfc2NzaV90cmFuc3BvcnQgPQorCQkJaXNjc2lfcmVnaXN0ZXJfdHJhbnNwb3J0KCZiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCk7CisJaWYgKCFiZWlzY3NpX3Njc2lfdHJhbnNwb3J0KSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiYmVpc2NzaV9tb2R1bGVfaW5pdCAtIFVuYWJsZSB0byAgcmVnaXN0ZXIgYmVpc2NzaSIKKwkJCSAidHJhbnNwb3J0LlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJfQorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfbW9kdWxlX2luaXQsIHR0PSVwIFxuIiwKKwkJICZiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCk7CisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiZWlzY3NpX3BjaV9kcml2ZXIpOworCWlmIChyZXQpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJiZWlzY3NpX21vZHVsZV9pbml0IC0gVW5hYmxlIHRvICByZWdpc3RlciIKKwkJCSAiYmVpc2NzaSBwY2kgZHJpdmVyLlxuIik7CisJCWdvdG8gdW5yZWdpc3Rlcl9pc2NzaV90cmFuc3BvcnQ7CisJfQorCXJldHVybiAwOworCit1bnJlZ2lzdGVyX2lzY3NpX3RyYW5zcG9ydDoKKwlpc2NzaV91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiZWlzY3NpX21vZHVsZV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZiZWlzY3NpX3BjaV9kcml2ZXIpOworCWlzY3NpX3VucmVnaXN0ZXJfdHJhbnNwb3J0KCZiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCk7Cit9CisKK21vZHVsZV9pbml0KGJlaXNjc2lfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoYmVpc2NzaV9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2M5YjcwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaApAQCAtMCwwICsxLDgzNyBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqCisgKi8KKworI2lmbmRlZiBfQkVJU0NTSV9NQUlOXworI2RlZmluZSBfQkVJU0NTSV9NQUlOXworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsay1pb3BvbGwuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvaXNjc2lfcHJvdG8uaD4KKyNpbmNsdWRlIDxzY3NpL2xpYmlzY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oPgorCisjaW5jbHVkZSAiYmUuaCIKKworCisKKyNkZWZpbmUgRFJWX05BTUUJCSJiZTJpc2NzaSIKKyNkZWZpbmUgQlVJTERfU1RSCQkiMi4wLjUyNy4wIgorCisjZGVmaW5lIEJFX05BTUUJCQkiU2VydmVyRW5naW5lcyBCbGFkZUVuZ2luZTIiIFwKKwkJCQkiTGludXggaVNDU0kgRHJpdmVyIHZlcnNpb24iIEJVSUxEX1NUUgorI2RlZmluZSBEUlZfREVTQwkJQkVfTkFNRSAiICIgIkRyaXZlciIKKworI2RlZmluZSBCRV9WRU5ET1JfSUQgCQkweDE5QTIKKyNkZWZpbmUgQkVfREVWSUNFX0lEMQkJMHgyMTIKKyNkZWZpbmUgT0NfREVWSUNFX0lEMQkJMHg3MDIKKyNkZWZpbmUgT0NfREVWSUNFX0lEMgkJMHg3MDMKKworI2RlZmluZSBCRTJfTUFYX1NFU1NJT05TCTY0CisjZGVmaW5lIEJFMl9DTURTX1BFUl9DWE4JMTI4CisjZGVmaW5lIEJFMl9MT0dPVVRTCQlCRTJfTUFYX1NFU1NJT05TCisjZGVmaW5lIEJFMl9UTUZTCQkxNgorI2RlZmluZSBCRTJfTk9QT1VUX1JFUQkJMTYKKyNkZWZpbmUgQkUyX0FTWU5DUERVUwkJQkUyX01BWF9TRVNTSU9OUworI2RlZmluZSBCRTJfTUFYX0lDRFMJCTIwNDgKKyNkZWZpbmUgQkUyX1NHRQkJCTMyCisjZGVmaW5lIEJFMl9ERUZQRFVfSERSX1NaCTY0CisjZGVmaW5lIEJFMl9ERUZQRFVfREFUQV9TWgk4MTkyCisjZGVmaW5lIEJFMl9JT19ERVBUSCBcCisJKEJFMl9NQVhfSUNEUyAvIDIgLSAoQkUyX0xPR09VVFMgKyBCRTJfVE1GUyArIEJFMl9OT1BPVVRfUkVRKSkKKworI2RlZmluZSBCRUlTQ1NJX1NHTElTVF9FTEVNRU5UUwlCRTJfU0dFCisKKyNkZWZpbmUgQkVJU0NTSV9NQVhfQ01ORFMJMTAyNAkvKiBNYXggSU8ncyBwZXIgQ3RybHIgc2h0LT5jYW5fcXVldWUgKi8KKyNkZWZpbmUgQkVJU0NTSV9DTURfUEVSX0xVTgkxMjgJLyogc2NzaV9ob3N0LT5jbWRfcGVyX2x1biAqLworI2RlZmluZSBCRUlTQ1NJX01BWF9TRUNUT1JTCTIwNDgJLyogc2NzaV9ob3N0LT5tYXhfc2VjdG9ycyAqLworCisjZGVmaW5lIEJFSVNDU0lfTUFYX0NNRF9MRU4JMTYJLyogc2NzaV9ob3N0LT5tYXhfY21kX2xlbiAqLworI2RlZmluZSBCRUlTQ1NJX05VTV9NQVhfTFVOCTI1NgkvKiBzY3NpX2hvc3QtPm1heF9sdW4gKi8KKyNkZWZpbmUgQkVJU0NTSV9OVU1fREVWSUNFU19TVVBQT1JURUQJMHgwMQorI2RlZmluZSBCRUlTQ1NJX01BWF9GUkFHU19JTklUCTE5MgorI2RlZmluZSBCRV9OVU1fTVNJWF9FTlRSSUVTIAkxCisjZGVmaW5lIE1QVV9FUF9TRU1BUEhPUkUgCTB4YWMKKworI2RlZmluZSBCRV9TRU5TRV9JTkZPX1NJWkUJCTI1OAorI2RlZmluZSBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkUJNjQKKyNkZWZpbmUgQkVfTUlOX01FTV9TSVpFCQkJMTYzODQKKworI2RlZmluZSBJSU9DX1NDU0lfREFUQSAgICAgICAgICAgICAgICAgIDB4MDUJLyogV3JpdGUgT3BlcmF0aW9uICovCisKKyNkZWZpbmUgREJHX0xWTAkJCQkweDAwMDAwMDAxCisjZGVmaW5lIERCR19MVkxfMQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgREJHX0xWTF8yCQkJMHgwMDAwMDAwMgorI2RlZmluZSBEQkdfTFZMXzMJCQkweDAwMDAwMDA0CisjZGVmaW5lIERCR19MVkxfNAkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgREJHX0xWTF81CQkJMHgwMDAwMDAxMAorI2RlZmluZSBEQkdfTFZMXzYJCQkweDAwMDAwMDIwCisjZGVmaW5lIERCR19MVkxfNwkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgREJHX0xWTF84CQkJMHgwMDAwMDA4MAorCisjZGVmaW5lIFNFX0RFQlVHKGRlYnVnX21hc2ssIGZtdCwgYXJncy4uLikJCVwKK2RvIHsJCQkJCQkJXAorCWlmIChkZWJ1Z19tYXNrICYgREJHX0xWTCkgewkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICIoJXMoKTolZCk6IiwgX19mdW5jX18sIF9fTElORV9fKTtcCisJCXByaW50ayhmbXQsICMjYXJncyk7CQkJXAorCX0JCQkJCQlcCit9IHdoaWxlICgwKTsKKworLyoqCisgKiBoYXJkd2FyZSBuZWVkcyB0aGUgYXN5bmMgUERVIGJ1ZmZlcnMgdG8gYmUgcG9zdGVkIGluIG11bHRpcGxlcyBvZiA4CisgKiBTbyBoYXZlIGF0bGVhc3QgOCBvZiB0aGVtIGJ5IGRlZmF1bHQKKyAqLworCisjZGVmaW5lIEhXSV9HRVRfQVNZTkNfUERVX0NUWChwaHdpKQkocGh3aS0+cGh3aV9jdHh0LT5wYXN5bmNfY3R4KQorCisvKioqKioqKioqIE1lbW9yeSBCQVIgcmVnaXN0ZXIgKioqKioqKioqKioqLworI2RlZmluZSBQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUIAkweGZjCisvKioKKyAqIEhvc3QgSW50ZXJydXB0IEVuYWJsZSwgaWYgc2V0IGludGVycnVwdHMgYXJlIGVuYWJsZWQgYWx0aG91Z2ggIlBDSSBJbnRlcnJ1cHQKKyAqIERpc2FibGUiIG1heSBzdGlsbCBnbG9iYWxseSBibG9jayBpbnRlcnJ1cHRzIGluIGFkZGl0aW9uIHRvIGluZGl2aWR1YWwKKyAqIGludGVycnVwdCBtYXNrczsgYSBtZWNoYW5pc20gZm9yIHRoZSBkZXZpY2UgZHJpdmVyIHRvIGJsb2NrIGFsbCBpbnRlcnJ1cHRzCisgKiBhdG9taWNhbGx5IHdpdGhvdXQgaGF2aW5nIHRvIGFyYml0cmF0ZSBmb3IgdGhlIFBDSSBJbnRlcnJ1cHQgRGlzYWJsZSBiaXQKKyAqIHdpdGggdGhlIE9TLgorICovCisjZGVmaW5lIE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0sJKDEgPDwgMjkpCS8qIGJpdCAyOSAqLworCisvKioqKioqKioqIElTUjAgUmVnaXN0ZXIgb2Zmc2V0ICoqKioqKioqKiovCisjZGVmaW5lIENFVl9JU1IwX09GRlNFVCAJCQkweEMxOAorI2RlZmluZSBDRVZfSVNSX1NJWkUJCQkJNAorCisvKioKKyAqIE1hY3JvcyBmb3IgcmVhZGluZy93cml0aW5nIGEgcHJvdGVjdGlvbiBkb21haW4gb3IgQ1NSIHJlZ2lzdGVycworICogaW4gQmxhZGVFbmdpbmUuCisgKi8KKworI2RlZmluZSBEQl9UWFVMUDBfT0ZGU0VUIDB4NDAKKyNkZWZpbmUgREJfUlhVTFAwX09GRlNFVCAweEEwCisvKioqKioqKioqIEV2ZW50IFEgZG9vciBiZWxsICoqKioqKioqKioqKiovCisjZGVmaW5lIERCX0VRX09GRlNFVAkJCURCX0NRX09GRlNFVAorI2RlZmluZSBEQl9FUV9SSU5HX0lEX01BU0sJCTB4MUZGCS8qIGJpdHMgMCAtIDggKi8KKy8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgZm9yIHRoaXMgZXEgKi8KKyNkZWZpbmUgREJfRVFfQ0xSX1NISUZUCQkJKDkpCS8qIGJpdCA5ICovCisvKiBNdXN0IGJlIDEgKi8KKyNkZWZpbmUgREJfRVFfRVZOVF9TSElGVAkJKDEwKQkvKiBiaXQgMTAgKi8KKy8qIE51bWJlciBvZiBldmVudCBlbnRyaWVzIHByb2Nlc3NlZCAqLworI2RlZmluZSBEQl9FUV9OVU1fUE9QUEVEX1NISUZUCQkoMTYpCS8qIGJpdHMgMTYgLSAyOCAqLworLyogUmVhcm0gYml0ICovCisjZGVmaW5lIERCX0VRX1JFQVJNX1NISUZUCQkoMjkpCS8qIGJpdCAyOSAqLworCisvKioqKioqKioqIENvbXBsIFEgZG9vciBiZWxsICoqKioqKioqKioqKiovCisjZGVmaW5lIERCX0NRX09GRlNFVCAJCQkweDEyMAorI2RlZmluZSBEQl9DUV9SSU5HX0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KKy8qIE51bWJlciBvZiBldmVudCBlbnRyaWVzIHByb2Nlc3NlZCAqLworI2RlZmluZSBEQl9DUV9OVU1fUE9QUEVEX1NISUZUCQkoMTYpIAkvKiBiaXRzIDE2IC0gMjggKi8KKy8qIFJlYXJtIGJpdCAqLworI2RlZmluZSBEQl9DUV9SRUFSTV9TSElGVAkJKDI5KSAJLyogYml0IDI5ICovCisKKyNkZWZpbmUgR0VUX0hXSV9DT05UUk9MTEVSX1dTKHBjKQkocGMtPnBod2lfY3RybHIpCisjZGVmaW5lIEhXSV9HRVRfREVGX0JVRlFfSUQocGMpICgoKHN0cnVjdCBod2lfY29udHJvbGxlciAqKVwKKwkJKEdFVF9IV0lfQ09OVFJPTExFUl9XUyhwYykpKS0+ZGVmYXVsdF9wZHVfZGF0YS5pZCkKKyNkZWZpbmUgSFdJX0dFVF9ERUZfSERSUV9JRChwYykgKCgoc3RydWN0IGh3aV9jb250cm9sbGVyICopXAorCQkoR0VUX0hXSV9DT05UUk9MTEVSX1dTKHBjKSkpLT5kZWZhdWx0X3BkdV9oZHIuaWQpCisKKyNkZWZpbmUgUEFHRVNfUkVRVUlSRUQoeCkgXAorCSgoeCA8IFBBR0VfU0laRSkgPyAxIDogICgoeCArIFBBR0VfU0laRSAtIDEpIC8gUEFHRV9TSVpFKSkKKworZW51bSBiZV9tZW1fZW51bSB7CisJSFdJX01FTV9BREROX0NPTlRFWFQsCisJSFdJX01FTV9DUSwKKwlIV0lfTUVNX0VRLAorCUhXSV9NRU1fV1JCLAorCUhXSV9NRU1fV1JCSCwKKwlIV0lfTUVNX1NHTEgsCS8qIDUgKi8KKwlIV0lfTUVNX1NHRSwKKwlIV0lfTUVNX0FTWU5DX0hFQURFUl9CVUYsCisJSFdJX01FTV9BU1lOQ19EQVRBX0JVRiwKKwlIV0lfTUVNX0FTWU5DX0hFQURFUl9SSU5HLAorCUhXSV9NRU1fQVNZTkNfREFUQV9SSU5HLAkvKiAxMCAqLworCUhXSV9NRU1fQVNZTkNfSEVBREVSX0hBTkRMRSwKKwlIV0lfTUVNX0FTWU5DX0RBVEFfSEFORExFLAorCUhXSV9NRU1fQVNZTkNfUERVX0NPTlRFWFQsCisJSVNDU0lfTUVNX0dMT0JBTF9IRUFERVIsCisJU0VfTUVNX01BWCAgCS8qIDE1ICovCit9OworCitzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MzMiB7CisJdW5zaWduZWQgaW50IGFkZHJlc3NfbG87CisJdW5zaWduZWQgaW50IGFkZHJlc3NfaGk7Cit9OworCitzdHJ1Y3QgYmVfYnVzX2FkZHJlc3M2NCB7CisJdW5zaWduZWQgbG9uZyBsb25nIGFkZHJlc3M7Cit9OworCitzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgeworCXVuaW9uIHsKKwkJc3RydWN0IGJlX2J1c19hZGRyZXNzMzIgYTMyOworCQlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3M2NCBhNjQ7CisJfSB1OworfTsKKworc3RydWN0IG1lbV9hcnJheSB7CisJc3RydWN0IGJlX2J1c19hZGRyZXNzIGJ1c19hZGRyZXNzOwkvKiBCdXMgYWRkcmVzcyBvZiBsb2NhdGlvbiAqLworCXZvaWQgKnZpcnR1YWxfYWRkcmVzczsJCS8qIHZpcnR1YWwgYWRkcmVzcyB0byB0aGUgbG9jYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsJCS8qIFNpemUgcmVxdWlyZWQgYnkgbWVtb3J5IGJsb2NrICovCit9OworCitzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgeworCXVuc2lnbmVkIGludCBpbmRleDsJLyogSW5kZXggb2YgdGhpcyBtZW1vcnkgcGFyYW1ldGVyICovCisJdW5zaWduZWQgaW50IGNhdGVnb3J5OwkvKiB0eXBlIGluZGljYXRlcyBjYWNoZWQvbm9uLWNhY2hlZCAqLworCXVuc2lnbmVkIGludCBudW1fZWxlbWVudHM7CS8qIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGlzCisJCQkJCSAqIGRlc2NyaXB0b3IKKwkJCQkJICovCisJdW5zaWduZWQgaW50IGFsaWdubWVudF9tYXNrOwkvKiBBbGlnbm1lbnQgbWFzayBmb3IgdGhpcyBibG9jayAqLworCXVuc2lnbmVkIGludCBzaXplX2luX2J5dGVzOwkvKiBTaXplIHJlcXVpcmVkIGJ5IG1lbW9yeSBibG9jayAqLworCXN0cnVjdCBtZW1fYXJyYXkgKm1lbV9hcnJheTsKK307CisKK3N0cnVjdCBzZ2xfaGFuZGxlIHsKKwl1bnNpZ25lZCBpbnQgc2dsX2luZGV4OworCXN0cnVjdCBpc2NzaV9zZ2UgKnBmcmFnOworfTsKKworc3RydWN0IGhiYV9wYXJhbWV0ZXJzIHsKKwl1bnNpZ25lZCBpbnQgaW9zX3Blcl9jdHJsOworCXVuc2lnbmVkIGludCBjeG5zX3Blcl9jdHJsOworCXVuc2lnbmVkIGludCBhc3luY3BkdXNfcGVyX2N0cmw7CisJdW5zaWduZWQgaW50IGljZHNfcGVyX2N0cmw7CisJdW5zaWduZWQgaW50IG51bV9zZ2VfcGVyX2lvOworCXVuc2lnbmVkIGludCBkZWZwZHVfaGRyX3N6OworCXVuc2lnbmVkIGludCBkZWZwZHVfZGF0YV9zejsKKwl1bnNpZ25lZCBpbnQgbnVtX2NxX2VudHJpZXM7CisJdW5zaWduZWQgaW50IG51bV9lcV9lbnRyaWVzOworCXVuc2lnbmVkIGludCB3cmJzX3Blcl9jeG47CisJdW5zaWduZWQgaW50IGNyYXNobW9kZTsKKwl1bnNpZ25lZCBpbnQgaGJhX251bTsKKworCXVuc2lnbmVkIGludCBtZ210X3dzX3N6OworCXVuc2lnbmVkIGludCBod2lfd3Nfc3o7CisKKwl1bnNpZ25lZCBpbnQgZXRvOworCXVuc2lnbmVkIGludCBsZHRvOworCisJdW5zaWduZWQgaW50IGRiZ19mbGFnczsKKwl1bnNpZ25lZCBpbnQgbnVtX2N4bjsKKworCXVuc2lnbmVkIGludCBlcV90aW1lcjsKKwkvKioKKwkgKiBUaGVzZSBhcmUgY2FsY3VsYXRlZCBmcm9tIG90aGVyIHBhcmFtcy4gVGhleSdyZSBoZXJlCisJICogZm9yIGRlYnVnIHB1cnBvc2VzCisJICovCisJdW5zaWduZWQgaW50IG51bV9tY2NfcGFnZXM7CisJdW5zaWduZWQgaW50IG51bV9tY2NfY3FfcGFnZXM7CisJdW5zaWduZWQgaW50IG51bV9jcV9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2VxX3BhZ2VzOworCisJdW5zaWduZWQgaW50IG51bV9hc3luY19wZHVfYnVmX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2J1Zl9zZ2xfcGFnZXM7CisJdW5zaWduZWQgaW50IG51bV9hc3luY19wZHVfYnVmX2NxX3BhZ2VzOworCisJdW5zaWduZWQgaW50IG51bV9hc3luY19wZHVfaGRyX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2hkcl9zZ2xfcGFnZXM7CisJdW5zaWduZWQgaW50IG51bV9hc3luY19wZHVfaGRyX2NxX3BhZ2VzOworCisJdW5zaWduZWQgaW50IG51bV9zZ2U7Cit9OworCitzdHJ1Y3QgYmVpc2NzaV9oYmEgeworCXN0cnVjdCBoYmFfcGFyYW1ldGVycyBwYXJhbXM7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXVuc2lnbmVkIGludCBtZW1fcmVxW1NFX01FTV9NQVhdOworCS8qIFBDSSBCQVIgbWFwcGVkIGFkZHJlc3NlcyAqLworCXU4IF9faW9tZW0gKmNzcl92YTsJLyogQ1NSICovCisJdTggX19pb21lbSAqZGJfdmE7CS8qIERvb3IgIEJlbGwgICovCisJdTggX19pb21lbSAqcGNpX3ZhOwkvKiBQQ0kgQ29uZmlnICovCisJc3RydWN0IGJlX2J1c19hZGRyZXNzIGNzcl9wYTsJLyogQ1NSICovCisJc3RydWN0IGJlX2J1c19hZGRyZXNzIGRiX3BhOwkvKiBDU1IgKi8KKwlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgcGNpX3BhOwkvKiBDU1IgKi8KKwkvKiBQQ0kgcmVwcmVzZW50YXRpb24gb2Ygb3VyIEhCQSAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXVuc2lnbmVkIHNob3J0IGFzaWNfcmV2aXNpb247CisJc3RydWN0IGJsa19pb3BvbGwJaW9wb2xsOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqaW5pdF9tZW07CisKKwl1bnNpZ25lZCBzaG9ydCBpb19zZ2xfYWxsb2NfaW5kZXg7CisJdW5zaWduZWQgc2hvcnQgaW9fc2dsX2ZyZWVfaW5kZXg7CisJdW5zaWduZWQgc2hvcnQgaW9fc2dsX2huZGxfYXZibDsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqKmlvX3NnbF9obmRsX2Jhc2U7CisKKwl1bnNpZ25lZCBzaG9ydCBlaF9zZ2xfYWxsb2NfaW5kZXg7CisJdW5zaWduZWQgc2hvcnQgZWhfc2dsX2ZyZWVfaW5kZXg7CisJdW5zaWduZWQgc2hvcnQgZWhfc2dsX2huZGxfYXZibDsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqKmVoX3NnbF9obmRsX2Jhc2U7CisJc3BpbmxvY2tfdCBpb19zZ2xfbG9jazsKKwlzcGlubG9ja190IG1nbXRfc2dsX2xvY2s7CisJc3BpbmxvY2tfdCBpc3JfbG9jazsKKwl1bnNpZ25lZCBpbnQgYWdlOworCXVuc2lnbmVkIHNob3J0IGF2bGJsX2NpZHM7CisJdW5zaWduZWQgc2hvcnQgY2lkX2FsbG9jOworCXVuc2lnbmVkIHNob3J0IGNpZF9mcmVlOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmNvbm5fdGFibGVbQkUyX01BWF9TRVNTSU9OUyAqIDJdOworCXN0cnVjdCBsaXN0X2hlYWQgaGJhX3F1ZXVlOworCXVuc2lnbmVkIHNob3J0ICpjaWRfYXJyYXk7CisJc3RydWN0IGlzY3NpX2VuZHBvaW50ICoqZXBfYXJyYXk7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IHsKKwkJLyoqCisJCSAqIGdyb3VwIHRvZ2V0aGVyIHNpbmNlIHRoZXkgYXJlIHVzZWQgbW9zdCBmcmVxdWVudGx5CisJCSAqIGZvciBjaWQgdG8gY3JpIGNvbnZlcnNpb24KKwkJICovCisJCXVuc2lnbmVkIGludCBpc2NzaV9jaWRfc3RhcnQ7CisJCXVuc2lnbmVkIGludCBwaHlzX3BvcnQ7CisKKwkJdW5zaWduZWQgaW50IGlzcl9vZmZzZXQ7CisJCXVuc2lnbmVkIGludCBpc2NzaV9pY2Rfc3RhcnQ7CisJCXVuc2lnbmVkIGludCBpc2NzaV9jaWRfY291bnQ7CisJCXVuc2lnbmVkIGludCBpc2NzaV9pY2RfY291bnQ7CisJCXVuc2lnbmVkIGludCBwY2lfZnVuY3Rpb247CisKKwkJdW5zaWduZWQgc2hvcnQgY2lkX2FsbG9jOworCQl1bnNpZ25lZCBzaG9ydCBjaWRfZnJlZTsKKwkJdW5zaWduZWQgc2hvcnQgYXZsYmxfY2lkczsKKwkJc3BpbmxvY2tfdCBjaWRfbG9jazsKKwl9IGZ3X2NvbmZpZzsKKworCXU4IG1hY19hZGRyZXNzW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBzaG9ydCB0b2RvX2NxOworCXVuc2lnbmVkIHNob3J0IHRvZG9fbWNjX2NxOworCWNoYXIgd3FfbmFtZVsyMF07CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwkvKiBUaGUgYWN0dWFrIHdvcmsgcXVldWUgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19jcXM7CS8qIFRoZSB3b3JrIGJlaW5nIHF1ZXVlZCAqLworCXN0cnVjdCBiZV9jdHJsX2luZm8gY3RybDsKK307CisKK3N0cnVjdCBiZWlzY3NpX3Nlc3Npb24geworCXN0cnVjdCBwY2lfcG9vbCAqYmhzX3Bvb2w7Cit9OworCisvKioKKyAqIHN0cnVjdCBiZWlzY3NpX2Nvbm4gLSBpc2NzaSBjb25uZWN0aW9uIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmVpc2NzaV9jb25uIHsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisJdTMyIGV4cF9zdGF0c247CisJdTMyIGJlaXNjc2lfY29ubl9jaWQ7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmVwOworCXVuc2lnbmVkIHNob3J0IGxvZ2luX2luX3Byb2dyZXNzOworCXN0cnVjdCBzZ2xfaGFuZGxlICpwbG9naW5fc2dsX2hhbmRsZTsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3M7Cit9OworCisvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IHRoZSBjaGlwICovCitzdHJ1Y3QgcGR1X2RhdGFfb3V0IHsKKwl1MzIgZHdbMTJdOworfTsKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0IHsKKwl1OCBvcGNvZGVbNl07CQkvKiBvcGNvZGUgKi8KKwl1OCByc3ZkMFsyXTsJCS8qIHNob3VsZCBiZSAwICovCisJdTggcnN2ZDFbN107CisJdTggZmluYWxfYml0OwkJLyogRiBiaXQgKi8KKwl1OCByc3ZkMlsxNl07CisJdTggYWhzX2xlbmd0aFs4XTsJLyogbm8gQUhTICovCisJdTggZGF0YV9sZW5faGlbOF07CisJdTggZGF0YV9sZW5fbG9bMTZdOwkvKiBEYXRhU2VnbWVudExlbmd0aCAqLworCXU4IGx1bls2NF07CisJdTggaXR0WzMyXTsJCS8qIElUVDsgaW5pdGlhdG9yIHRhc2sgdGFnICovCisJdTggdHR0WzMyXTsJCS8qIFRUVDsgdmFsaWQgZm9yIFIyVCBvciAweGZmZmZmZmZmICovCisJdTggcnN2ZDNbMzJdOworCXU4IGV4cF9zdGF0X3NuWzMyXTsKKwl1OCByc3ZkNFszMl07CisJdTggZGF0YV9zblszMl07CisJdTggYnVmZmVyX29mZnNldFszMl07CisJdTggcnN2ZDVbMzJdOworfTsKKworc3RydWN0IGJlX2NtZF9iaHMgeworCXN0cnVjdCBpc2NzaV9jbWQgaXNjc2lfaGRyOworCXVuc2lnbmVkIGNoYXIgcGFkMVsxNl07CisJc3RydWN0IHBkdV9kYXRhX291dCBpc2NzaV9kYXRhX3BkdTsKKwl1bnNpZ25lZCBjaGFyIHBhZDJbQkVfU0VOU0VfSU5GT19TSVpFIC0KKwkJCXNpemVvZihzdHJ1Y3QgcGR1X2RhdGFfb3V0KV07Cit9OworCitzdHJ1Y3QgYmVpc2NzaV9pb190YXNrIHsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisJc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmNvbm47CisJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kOworCXVuc2lnbmVkIGludCBjbWRfc247CisJdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIHNob3J0IGNpZDsKKwl1bnNpZ25lZCBzaG9ydCBoZWFkZXJfbGVuOworCisJc3RydWN0IGJlX2NtZF9iaHMgKmNtZF9iaHM7CisJc3RydWN0IGJlX2J1c19hZGRyZXNzIGJoc19wYTsKKwl1bnNpZ25lZCBzaG9ydCBiaHNfbGVuOworfTsKKworc3RydWN0IGJlX25vbmlvX2JocyB7CisJc3RydWN0IGlzY3NpX2hkciBpc2NzaV9oZHI7CisJdW5zaWduZWQgY2hhciBwYWQxWzE2XTsKKwlzdHJ1Y3QgcGR1X2RhdGFfb3V0IGlzY3NpX2RhdGFfcGR1OworCXVuc2lnbmVkIGNoYXIgcGFkMltCRV9TRU5TRV9JTkZPX1NJWkUgLQorCQkJc2l6ZW9mKHN0cnVjdCBwZHVfZGF0YV9vdXQpXTsKK307CisKK3N0cnVjdCBiZV9zdGF0dXNfYmhzIHsKKwlzdHJ1Y3QgaXNjc2lfY21kIGlzY3NpX2hkcjsKKwl1bnNpZ25lZCBjaGFyIHBhZDFbMTZdOworCS8qKgorCSAqIFRoZSBwbHVzIDIgYmVsb3cgaXMgdG8gaG9sZCB0aGUgc2Vuc2UgaW5mbyBsZW5ndGggdGhhdCBnZXRzCisJICogRE1BJ2VkIGJ5IFJ4VUxQCisJICovCisJdW5zaWduZWQgY2hhciBzZW5zZV9pbmZvW0JFX1NFTlNFX0lORk9fU0laRV07Cit9OworCitzdHJ1Y3QgaXNjc2lfc2dlIHsKKwl1MzIgZHdbNF07Cit9OworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2lzY3NpX3NnZSB7CisJdTggYWRkcl9oaVszMl07CisJdTggYWRkcl9sb1szMl07CisJdTggc2dlX29mZnNldFsyMl07CS8qIERXT1JEIDIgKi8KKwl1OCByc3ZkMFs5XTsJCS8qIERXT1JEIDIgKi8KKwl1OCBsYXN0X3NnZTsJCS8qIERXT1JEIDIgKi8KKwl1OCBsZW5bMTddOwkJLyogRFdPUkQgMyAqLworCXU4IHJzdmQxWzE1XTsJCS8qIERXT1JEIDMgKi8KK307CisKK3N0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zIHsKKwl1MzIgZHdbNV07Cit9OworCisjZGVmaW5lIE9GRkxEX1BBUkFNU19FUkwJMHgwMDAwMDAwMworI2RlZmluZSBPRkZMRF9QQVJBTVNfRERFCTB4MDAwMDAwMDQKKyNkZWZpbmUgT0ZGTERfUEFSQU1TX0hERQkweDAwMDAwMDA4CisjZGVmaW5lIE9GRkxEX1BBUkFNU19JUjJUCTB4MDAwMDAwMTAKKyNkZWZpbmUgT0ZGTERfUEFSQU1TX0lNRAkweDAwMDAwMDIwCisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyB7CisJdTggbWF4X2J1cnN0X2xlbmd0aFszMl07CisJdTggbWF4X3NlbmRfZGF0YV9zZWdtZW50X2xlbmd0aFszMl07CisJdTggZmlyc3RfYnVyc3RfbGVuZ3RoWzMyXTsKKwl1OCBlcmxbMl07CisJdTggZGRlWzFdOworCXU4IGhkZVsxXTsKKwl1OCBpcjJ0WzFdOworCXU4IGltZFsxXTsKKwl1OCBwYWRbMjZdOworCXU4IGV4cF9zdGF0c25bMzJdOworfTsKKworLyogdm9pZCBod2lfY29tcGxldGVfZHJ2cl9tc2dzKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCk7Ki8KKworc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgcGE7CisJdm9pZCAqcGJ1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgY29uc3VtZWQ7CisJdW5zaWduZWQgY2hhciBpbmRleDsKKwl1bnNpZ25lZCBjaGFyIGlzX2hlYWRlcjsKKwl1bnNpZ25lZCBzaG9ydCBjcmk7CisJdW5zaWduZWQgbG9uZyBidWZmZXJfbGVuOworfTsKKworc3RydWN0IGh3aV9hc3luY19lbnRyeSB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBoZHJfcmVjZWl2ZWQ7CisJCXVuc2lnbmVkIGNoYXIgaGRyX2xlbjsKKwkJdW5zaWduZWQgc2hvcnQgYnl0ZXNfcmVjZWl2ZWQ7CisJCXVuc2lnbmVkIGludCBieXRlc19uZWVkZWQ7CisJCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl9IHdhaXRfcXVldWU7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWRlcl9idXN5X2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBkYXRhX2J1c3lfbGlzdDsKK307CisKKyNkZWZpbmUgQkVfTUlOX0FTWU5DX0VOVFJJRVMgMTI4CisKK3N0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgeworCXN0cnVjdCB7CisJCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBwYV9iYXNlOworCQl2b2lkICp2YV9iYXNlOworCQl2b2lkICpyaW5nX2Jhc2U7CisJCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpoYW5kbGVfYmFzZTsKKworCQl1bnNpZ25lZCBpbnQgaG9zdF93cml0ZV9wdHI7CisJCXVuc2lnbmVkIGludCBlcF9yZWFkX3B0cjsKKwkJdW5zaWduZWQgaW50IHdyaXRhYmxlczsKKworCQl1bnNpZ25lZCBpbnQgZnJlZV9lbnRyaWVzOworCQl1bnNpZ25lZCBpbnQgYnVzeV9lbnRyaWVzOworCQl1bnNpZ25lZCBpbnQgYnVmZmVyX3NpemU7CisJCXVuc2lnbmVkIGludCBudW1fZW50cmllczsKKworCQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwl9IGFzeW5jX2hlYWRlcjsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBwYV9iYXNlOworCQl2b2lkICp2YV9iYXNlOworCQl2b2lkICpyaW5nX2Jhc2U7CisJCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpoYW5kbGVfYmFzZTsKKworCQl1bnNpZ25lZCBpbnQgaG9zdF93cml0ZV9wdHI7CisJCXVuc2lnbmVkIGludCBlcF9yZWFkX3B0cjsKKwkJdW5zaWduZWQgaW50IHdyaXRhYmxlczsKKworCQl1bnNpZ25lZCBpbnQgZnJlZV9lbnRyaWVzOworCQl1bnNpZ25lZCBpbnQgYnVzeV9lbnRyaWVzOworCQl1bnNpZ25lZCBpbnQgYnVmZmVyX3NpemU7CisJCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OworCQl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisJfSBhc3luY19kYXRhOworCisJLyoqCisJICogVGhpcyBpcyBhIHZhcnlpbmcgc2l6ZSBsaXN0ISBEbyBub3QgYWRkIGFueXRoaW5nCisJICogYWZ0ZXIgdGhpcyBlbnRyeSEhCisJICovCisJc3RydWN0IGh3aV9hc3luY19lbnRyeSBhc3luY19lbnRyeVtCRV9NSU5fQVNZTkNfRU5UUklFU107Cit9OworCisjZGVmaW5lIFBEVUNRRV9DT0RFX01BU0sJMHgwMDAwMDAzRgorI2RlZmluZSBQRFVDUUVfRFBMX01BU0sJCTB4RkZGRjAwMDAKKyNkZWZpbmUgUERVQ1FFX0lOREVYX01BU0sJMHgwMDAwRkZGRgorCitzdHJ1Y3QgaV90X2RwZHVfY3FlIHsKKwl1MzIgZHdbNF07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSB7CisJdTggZGJfYWRkcl9oaVszMl07CisJdTggZGJfYWRkcl9sb1szMl07CisJdTggY29kZVs2XTsKKwl1OCBjaWRbMTBdOworCXU4IGRwbFsxNl07CisJdTggaW5kZXhbMTZdOworCXU4IG51bV9jb25zWzEwXTsKKwl1OCByc3ZkMFs0XTsKKwl1OCBmaW5hbDsKKwl1OCB2YWxpZDsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQ1FFX1ZBTElEX01BU0sJMHg4MDAwMDAwMAorI2RlZmluZSBDUUVfQ09ERV9NQVNLCTB4MDAwMDAwM0YKKyNkZWZpbmUgQ1FFX0NJRF9NQVNLCTB4MDAwMEZGQzAKKworI2RlZmluZSBFUUVfVkFMSURfTUFTSwkJMHgwMDAwMDAwMQorI2RlZmluZSBFUUVfTUFKT1JDT0RFX01BU0sJMHgwMDAwMDAwRQorI2RlZmluZSBFUUVfUkVTSURfTUFTSwkJMHhGRkZGMDAwMAorCitzdHJ1Y3QgYmVfZXFfZW50cnkgeworCXUzMiBkd1sxXTsKK30gX19wYWNrZWQ7CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfZXFfZW50cnkgeworCXU4IHZhbGlkOwkJLyogRFdPUkQgMCAqLworCXU4IG1ham9yX2NvZGVbM107CS8qIERXT1JEIDAgKi8KKwl1OCBtaW5vcl9jb2RlWzEyXTsJLyogRFdPUkQgMCAqLworCXU4IHJlc291cmNlX2lkWzE2XTsJLyogRFdPUkQgMCAqLworCit9IF9fcGFja2VkOworCitzdHJ1Y3QgY3FfZGIgeworCXUzMiBkd1sxXTsKK30gX19wYWNrZWQ7CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfY3FfZGIgeworCXU4IHFpZFsxMF07CisJdTggZXZlbnRbMV07CisJdTggcnN2ZDBbNV07CisJdTggbnVtX3BvcHBlZFsxM107CisJdTggcmVhcm1bMV07CisJdTggcnN2ZDFbMl07Cit9IF9fcGFja2VkOworCit2b2lkIGJlaXNjc2lfcHJvY2Vzc19lcShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOworCisKK3N0cnVjdCBpc2NzaV93cmIgeworCXUzMiBkd1sxNl07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFdSQl9UWVBFX01BU0sgMHhGMDAwMDAwMAorCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2lzY3NpX3dyYiB7CisJdTggbHVuWzE0XTsJCS8qIERXT1JEIDAgKi8KKwl1OCBsdDsJCQkvKiBEV09SRCAwICovCisJdTggaW52bGQ7CQkvKiBEV09SRCAwICovCisJdTggd3JiX2lkeFs4XTsJCS8qIERXT1JEIDAgKi8KKwl1OCBkc3A7CQkJLyogRFdPUkQgMCAqLworCXU4IGRtc2c7CQkvKiBEV09SRCAwICovCisJdTggdW5kcl9ydW47CQkvKiBEV09SRCAwICovCisJdTggb3Zlcl9ydW47CQkvKiBEV09SRCAwICovCisJdTggdHlwZVs0XTsJCS8qIERXT1JEIDAgKi8KKwl1OCBwdHIybmV4dHdyYls4XTsJLyogRFdPUkQgMSAqLworCXU4IHIydF9leHBfZHRsWzI0XTsJLyogRFdPUkQgMSAqLworCXU4IHNnbF9pY2RfaWR4WzEyXTsJLyogRFdPUkQgMiAqLworCXU4IHJzdmQwWzIwXTsJCS8qIERXT1JEIDIgKi8KKwl1OCBleHBfZGF0YV9zblszMl07CS8qIERXT1JEIDMgKi8KKwl1OCBpc2NzaV9iaHNfYWRkcl9oaVszMl07CS8qIERXT1JEIDQgKi8KKwl1OCBpc2NzaV9iaHNfYWRkcl9sb1szMl07CS8qIERXT1JEIDUgKi8KKwl1OCBjbWRzbl9pdHRbMzJdOwkvKiBEV09SRCA2ICovCisJdTggZGlmX3JlZl90YWdbMzJdOwkvKiBEV09SRCA3ICovCisJdTggc2dlMF9hZGRyX2hpWzMyXTsJLyogRFdPUkQgOCAqLworCXU4IHNnZTBfYWRkcl9sb1szMl07CS8qIERXT1JEIDkgICovCisJdTggc2dlMF9vZmZzZXRbMjJdOwkvKiBEV09SRCAxMCAqLworCXU4IHBiczsJCQkvKiBEV09SRCAxMCAqLworCXU4IGRpZl9tb2RlWzJdOwkJLyogRFdPUkQgMTAgKi8KKwl1OCByc3ZkMVs2XTsJCS8qIERXT1JEIDEwICovCisJdTggc2dlMF9sYXN0OwkJLyogRFdPUkQgMTAgKi8KKwl1OCBzZ2UwX2xlblsxN107CS8qIERXT1JEIDExICovCisJdTggZGlmX21ldGFfdGFnWzE0XTsJLyogRFdPUkQgMTEgKi8KKwl1OCBzZ2UwX2luX2RkcjsJCS8qIERXT1JEIDExICovCisJdTggc2dlMV9hZGRyX2hpWzMyXTsJLyogRFdPUkQgMTIgKi8KKwl1OCBzZ2UxX2FkZHJfbG9bMzJdOwkvKiBEV09SRCAxMyAqLworCXU4IHNnZTFfcjJ0X29mZnNldFsyMl07CS8qIERXT1JEIDE0ICovCisJdTggcnN2ZDJbOV07CQkvKiBEV09SRCAxNCAqLworCXU4IHNnZTFfbGFzdDsJCS8qIERXT1JEIDE0ICovCisJdTggc2dlMV9sZW5bMTddOwkvKiBEV09SRCAxNSAqLworCXU4IHJlZl9zZ2xfaWNkX2lkeFsxMl07CS8qIERXT1JEIDE1ICovCisJdTggcnN2ZDNbMl07CQkvKiBEV09SRCAxNSAqLworCXU4IHNnZTFfaW5fZGRyOwkJLyogRFdPUkQgMTUgKi8KKworfSBfX3BhY2tlZDsKKworc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkLAorCQkJCSAgICBpbnQgaW5kZXgpOwordm9pZAorZnJlZV9tZ210X3NnbF9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUpOworCitzdHJ1Y3QgcGR1X25vcF9vdXQgeworCXUzMiBkd1sxMl07Cit9OworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX3BkdV9ub3Bfb3V0IHsKKwl1OCBvcGNvZGVbNl07CQkvKiBvcGNvZGUgMHgwMCAqLworCXU4IGlfYml0OwkJLyogSSBCaXQgKi8KKwl1OCB4X2JpdDsJCS8qIHJlc2VydmVkOyBzaG91bGQgYmUgMCAqLworCXU4IGZwX2JpdF9maWxsZXIxWzddOworCXU4IGZfYml0OwkJLyogYWx3YXlzIDEgKi8KKwl1OCByZXNlcnZlZDFbMTZdOworCXU4IGFoc19sZW5ndGhbOF07CS8qIG5vIEFIUyAqLworCXU4IGRhdGFfbGVuX2hpWzhdOworCXU4IGRhdGFfbGVuX2xvWzE2XTsJLyogRGF0YVNlZ21lbnRMZW5ndGggKi8KKwl1OCBsdW5bNjRdOworCXU4IGl0dFszMl07CQkvKiBpbml0aWF0b3IgaWQgZm9yIHBpbmcgb3IgMHhmZmZmZmZmZiAqLworCXU4IHR0dFszMl07CQkvKiB0YXJnZXQgaWQgZm9yIHBpbmcgb3IgMHhmZmZmZmZmZiAqLworCXU4IGNtZF9zblszMl07CisJdTggZXhwX3N0YXRfc25bMzJdOworCXU4IHJlc2VydmVkNVsxMjhdOworfTsKKworI2RlZmluZSBQRFVCQVNFX09QQ09ERV9NQVNLCTB4MDAwMDAwM0YKKyNkZWZpbmUgUERVQkFTRV9EQVRBTEVOSElfTUFTSwkweDAwMDBGRjAwCisjZGVmaW5lIFBEVUJBU0VfREFUQUxFTkxPX01BU0sJMHhGRkZGMDAwMAorCitzdHJ1Y3QgcGR1X2Jhc2UgeworCXUzMiBkd1sxNl07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX3BkdV9iYXNlIHsKKwl1OCBvcGNvZGVbNl07CisJdTggaV9iaXQ7CQkvKiBpbW1lZGlhdGUgYml0ICovCisJdTggeF9iaXQ7CQkvKiByZXNlcnZlZCwgYWx3YXlzIDAgKi8KKwl1OCByZXNlcnZlZDFbMjRdOwkvKiBvcGNvZGUtc3BlY2lmaWMgZmllbGRzICovCisJdTggYWhzX2xlbmd0aFs4XTsJLyogbGVuZ3RoIHVuaXRzIGlzIDQgYnl0ZSB3b3JkcyAqLworCXU4IGRhdGFfbGVuX2hpWzhdOworCXU4IGRhdGFfbGVuX2xvWzE2XTsJLyogRGF0YXNlZ21lbnRMZW5ndGggKi8KKwl1OCBsdW5bNjRdOwkJLyogbHVuIG9yIG9wY29kZS1zcGVjaWZpYyBmaWVsZHMgKi8KKwl1OCBpdHRbMzJdOwkJLyogaW5pdGlhdG9yIHRhc2sgdGFnICovCisJdTggcmVzZXJ2ZWQ0WzIyNF07Cit9OworCitzdHJ1Y3QgaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiB7CisJdTMyIGR3WzE2XTsKK30gX19wYWNrZWQ7CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiB7CisJdTggbHVuWzE0XTsJCS8qIERXT1JEIDAgKi8KKwl1OCBsdDsJCQkvKiBEV09SRCAwICovCisJdTggaW52bGQ7CQkvKiBEV09SRCAwICovCisJdTggd3JiX2lkeFs4XTsJCS8qIERXT1JEIDAgKi8KKwl1OCBkc3A7CQkJLyogRFdPUkQgMCAqLworCXU4IGRtc2c7CQkvKiBEV09SRCAwICovCisJdTggdW5kcl9ydW47CQkvKiBEV09SRCAwICovCisJdTggb3Zlcl9ydW47CQkvKiBEV09SRCAwICovCisJdTggdHlwZVs0XTsJCS8qIERXT1JEIDAgKi8KKwl1OCBwdHIybmV4dHdyYls4XTsJLyogRFdPUkQgMSAqLworCXU4IG1heF9idXJzdF9sZW5ndGhbMTldOwkvKiBEV09SRCAxICovCisJdTggcnN2ZDBbNV07CQkvKiBEV09SRCAxICovCisJdTggcnN2ZDFbMTVdOwkJLyogRFdPUkQgMiAqLworCXU4IG1heF9zZW5kX2RhdGFfc2VnbWVudF9sZW5ndGhbMTddOwkvKiBEV09SRCAyICovCisJdTggZmlyc3RfYnVyc3RfbGVuZ3RoWzE0XTsJLyogRFdPUkQgMyAqLworCXU4IHJzdmQyWzJdOwkJLyogRFdPUkQgMyAqLworCXU4IHR4X3dyYmluZGV4X2Rydl9tc2dbOF07CS8qIERXT1JEIDMgKi8KKwl1OCByc3ZkM1s1XTsJCS8qIERXT1JEIDMgKi8KKwl1OCBzZXNzaW9uX3N0YXRlWzNdOwkvKiBEV09SRCAzICovCisJdTggcnN2ZDRbMTZdOwkJLyogRFdPUkQgNCAqLworCXU4IHR4X2p1bWJvOwkJLyogRFdPUkQgNCAqLworCXU4IGhkZTsJCQkvKiBEV09SRCA0ICovCisJdTggZGRlOwkJCS8qIERXT1JEIDQgKi8KKwl1OCBlcmxbMl07CQkvKiBEV09SRCA0ICovCisJdTggZG9tYWluX2lkWzVdOwkJLyogRFdPUkQgNCAqLworCXU4IG1vZGU7CQkvKiBEV09SRCA0ICovCisJdTggaW1kOwkJCS8qIERXT1JEIDQgKi8KKwl1OCBpcjJ0OwkJLyogRFdPUkQgNCAqLworCXU4IG5vdHByZWRibHFbMl07CS8qIERXT1JEIDQgKi8KKwl1OCBjb21wbHRvbmFjazsJCS8qIERXT1JEIDQgKi8KKwl1OCBzdGF0X3NuWzMyXTsJCS8qIERXT1JEIDUgKi8KKwl1OCBwYWRfYnVmZmVyX2FkZHJfaGlbMzJdOwkvKiBEV09SRCA2ICovCisJdTggcGFkX2J1ZmZlcl9hZGRyX2xvWzMyXTsJLyogRFdPUkQgNyAqLworCXU4IHBhZF9hZGRyX2hpWzMyXTsJLyogRFdPUkQgOCAqLworCXU4IHBhZF9hZGRyX2xvWzMyXTsJLyogRFdPUkQgOSAqLworCXU4IHJzdmQ1WzMyXTsJCS8qIERXT1JEIDEwICovCisJdTggcnN2ZDZbMzJdOwkJLyogRFdPUkQgMTEgKi8KKwl1OCByc3ZkN1szMl07CQkvKiBEV09SRCAxMiAqLworCXU4IHJzdmQ4WzMyXTsJCS8qIERXT1JEIDEzICovCisJdTggcnN2ZDlbMzJdOwkJLyogRFdPUkQgMTQgKi8KKwl1OCByc3ZkMTBbMzJdOwkJLyogRFdPUkQgMTUgKi8KKworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX3JpbmcgeworCXUzMiBwYWdlczsJCS8qIHF1ZXVlIHNpemUgaW4gcGFnZXMgKi8KKwl1MzIgaWQ7CQkJLyogcXVldWUgaWQgYXNzaWduZWQgYnkgYmVrbGliICovCisJdTMyIG51bTsJCS8qIG51bWJlciBvZiBlbGVtZW50cyBpbiBxdWV1ZSAqLworCXUzMiBjaWR4OwkJLyogY29uc3VtZXIgaW5kZXggKi8KKwl1MzIgcGlkeDsJCS8qIHByb2R1Y2VyIGluZGV4IC0tIG5vdCB1c2VkIGJ5IG1vc3QgcmluZ3MgKi8KKwl1MzIgaXRlbV9zaXplOwkJLyogc2l6ZSBpbiBieXRlcyBvZiBvbmUgb2JqZWN0ICovCisKKwl2b2lkICp2YTsJCS8qIFRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHJpbmcuICBUaGlzCisJCQkJICogc2hvdWxkIGJlIGxhc3QgdG8gYWxsb3cgMzIgJiA2NCBiaXQgZGVidWdnZXIKKwkJCQkgKiBleHRlbnNpb25zIHRvIHdvcmsuCisJCQkJICovCit9OworCitzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHdyYl9oYW5kbGVfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHdyYl9oYW5kbGVfZHJ2cl9saXN0OworCXN0cnVjdCB3cmJfaGFuZGxlICoqcHdyYl9oYW5kbGVfYmFzZTsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqKnB3cmJfaGFuZGxlX2Jhc2VzdGQ7CisJc3RydWN0IGlzY3NpX3dyYiAqcGxhc3Rfd3JiOworCXVuc2lnbmVkIHNob3J0IGFsbG9jX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGZyZWVfaW5kZXg7CisJdW5zaWduZWQgc2hvcnQgd3JiX2hhbmRsZXNfYXZhaWxhYmxlOworCXVuc2lnbmVkIHNob3J0IGNpZDsKK307CisKK3N0cnVjdCBod2lfY29udHJvbGxlciB7CisJc3RydWN0IGxpc3RfaGVhZCBpb19zZ2xfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVoX3NnbF9saXN0OworCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZV9iYXNlOworCXVuc2lnbmVkIGludCB3cmJfbWVtX2luZGV4OworCisJc3RydWN0IGh3aV93cmJfY29udGV4dCB3cmJfY29udGV4dFtCRTJfTUFYX1NFU1NJT05TICogMl07CisJc3RydWN0IG1jY193cmIgKnBtY2Nfd3JiX2Jhc2U7CisJc3RydWN0IGJlX3JpbmcgZGVmYXVsdF9wZHVfaGRyOworCXN0cnVjdCBiZV9yaW5nIGRlZmF1bHRfcGR1X2RhdGE7CisJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jdHh0OworCXVuc2lnbmVkIHNob3J0IGNxX2Vycm9yc1tDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OXTsKK307CisKK2VudW0gaHdoX3R5cGVfZW51bSB7CisJSFdIX1RZUEVfSU8gPSAxLAorCUhXSF9UWVBFX0xPR09VVCA9IDIsCisJSFdIX1RZUEVfVE1GID0gMywKKwlIV0hfVFlQRV9OT1AgPSA0LAorCUhXSF9UWVBFX0lPX1JEID0gNSwKKwlIV0hfVFlQRV9MT0dJTiA9IDExLAorCUhXSF9UWVBFX0lOVkFMSUQgPSAweEZGRkZGRkZGCit9OworCitzdHJ1Y3Qgd3JiX2hhbmRsZSB7CisJZW51bSBod2hfdHlwZV9lbnVtIHR5cGU7CisJdW5zaWduZWQgc2hvcnQgd3JiX2luZGV4OworCXVuc2lnbmVkIHNob3J0IG54dF93cmJfaW5kZXg7CisKKwlzdHJ1Y3QgaXNjc2lfdGFzayAqcGlvX2hhbmRsZTsKKwlzdHJ1Y3QgaXNjc2lfd3JiICpwd3JiOworfTsKKworc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSB7CisJc3RydWN0IGJlX2VxX29iaiBiZV9lcTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBiZV9jcTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBiZV9tY2NfY3E7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gYmVfbWNjOworCisJc3RydWN0IGJlX3F1ZXVlX2luZm8gYmVfZGVmX2hkcnE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gYmVfZGVmX2RhdGFxOworCisJc3RydWN0IGJlX3F1ZXVlX2luZm8gYmVfd3JicVtCRTJfTUFYX1NFU1NJT05TXTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYl9jb250ZXh0ICpwYmVfbWNjX2NvbnRleHQ7CisKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmU2NDRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYwpAQCAtMCwwICsxLDMyMSBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqCisgKi8KKworI2luY2x1ZGUgImJlX21nbXQuaCIKKyNpbmNsdWRlICJiZV9pc2NzaS5oIgorCit1bnNpZ25lZCBjaGFyIG1nbXRfZ2V0X2Z3X2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9md19jZmcgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQkJICAgT1BDT0RFX0NPTU1PTl9RVUVSWV9GSVJNV0FSRV9DT05GSUcsIHNpemVvZigqcmVxKSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYmVfZndfY2ZnICpwZndfY2ZnOworCQlwZndfY2ZnID0gcmVxOworCQlwaGJhLT5md19jb25maWcucGh5c19wb3J0ID0gcGZ3X2NmZy0+cGh5c19wb3J0OworCQlwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX3N0YXJ0ID0KKwkJCQkJcGZ3X2NmZy0+dWxwWzBdLmljZF9iYXNlOworCQlwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX2NvdW50ID0KKwkJCQkJcGZ3X2NmZy0+dWxwWzBdLmljZF9jb3VudDsKKwkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCA9CisJCQkJCXBmd19jZmctPnVscFswXS5zcV9iYXNlOworCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50ID0KKwkJCQkJcGZ3X2NmZy0+dWxwWzBdLnNxX2NvdW50OworCX0gZWxzZSB7CisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRmFpbGVkIGluIG1nbXRfZ2V0X2Z3X2NvbmZpZyBcbiIpOworCX0KKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF9jaGVja19zdXBwb3J0ZWRfZncoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3sKKwlzdHJ1Y3QgYmVfZG1hX21lbSBub25lbWJfY21kOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzICpyZXE7CisJc3RydWN0IGJlX3NnZSAqc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlub25lbWJfY21kLnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoY3RybC0+cGRldiwKKwkJCQlzaXplb2Yoc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzKSwKKwkJCQkmbm9uZW1iX2NtZC5kbWEpOworCWlmIChub25lbWJfY21kLnZhID09IE5VTEwpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBtZ210X2NoZWNrX3N1cHBvcnRlZF9mdyIKKwkJCSAiXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlub25lbWJfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzKTsKKwlyZXEgPSBub25lbWJfY21kLnZhOworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgZmFsc2UsIDEpOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQkJICAgT1BDT0RFX0NPTU1PTl9HRVRfQ05UTF9BVFRSSUJVVEVTLCBzaXplb2YoKnJlcSkpOworCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKG5vbmVtYl9jbWQuZG1hKSk7CisJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQuZG1hICYgMHhGRkZGRkZGRik7CisJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLnNpemUpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzX3Jlc3AgKnJlc3AgPSBub25lbWJfY21kLnZhOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJGaXJtd2FyZSB2ZXJzaW9uIG9mIENNRDogJXNcbiIsCisJCQlyZXNwLT5wYXJhbXMuaGJhX2F0dHJpYnMuZmxhc2hyb21fdmVyc2lvbl9zdHJpbmcpOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJGaXJtd2FyZSB2ZXJzaW9uIGlzIDogJXNcbiIsCisJCQlyZXNwLT5wYXJhbXMuaGJhX2F0dHJpYnMuZmlybXdhcmVfdmVyc2lvbl9zdHJpbmcpOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkiRGV2ZWxvcGVyIEJ1aWxkLCBub3QgcGVyZm9ybWluZyB2ZXJzaW9uIGNoZWNrLi4uXG4iKTsKKworCX0gZWxzZQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICIgRmFpbGVkIGluIG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3XG4iKTsKKwlpZiAobm9uZW1iX2NtZC52YSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChjdHJsLT5wZGV2LCBub25lbWJfY21kLnNpemUsCisJCQkJICAgIG5vbmVtYl9jbWQudmEsIG5vbmVtYl9jbWQuZG1hKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF9lcGZ3X2NsZWFudXAoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBzaG9ydCBjaHV0ZSkKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgaXNjc2lfY2xlYW51cF9yZXEgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQkJICAgT1BDT0RFX0NPTU1PTl9JU0NTSV9DTEVBTlVQLCBzaXplb2YoKnJlcSkpOworCisJcmVxLT5jaHV0ZSA9IGNodXRlOworCXJlcS0+aGRyX3JpbmdfaWQgPSAwOworCXJlcS0+ZGF0YV9yaW5nX2lkID0gMDsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmIChzdGF0dXMpCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICAiIG1nbXRfZXBmd19jbGVhbnVwICwgRkFJTEVEXG4iKTsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9pY2RzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgaWNkLCB1bnNpZ25lZCBpbnQgY2lkKQoreworCXN0cnVjdCBiZV9kbWFfbWVtIG5vbmVtYl9jbWQ7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX3NnZSAqc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisJc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luICpyZXE7CisJaW50IHN0YXR1cyA9IDA7CisKKwlub25lbWJfY21kLnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoY3RybC0+cGRldiwKKwkJCQlzaXplb2Yoc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luKSwKKwkJCQkmbm9uZW1iX2NtZC5kbWEpOworCWlmIChub25lbWJfY21kLnZhID09IE5VTEwpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciIKKwkJCSAibWdtdF9pbnZhbGlkYXRlX2ljZHMgXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlub25lbWJfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luKTsKKwlyZXEgPSBub25lbWJfY21kLnZhOworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCBmYWxzZSwgMSk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJCU9QQ09ERV9DT01NT05fSVNDU0lfRVJST1JfUkVDT1ZFUllfSU5WQUxJREFURV9DT01NQU5EUywKKwkJCXNpemVvZigqcmVxKSk7CisJcmVxLT5yZWZfaGFuZGxlID0gMDsKKwlyZXEtPmNsZWFudXBfdHlwZSA9IENNRF9JU0NTSV9DT01NQU5EX0lOVkFMSURBVEU7CisJcmVxLT5pY2RfY291bnQgPSAwOworCXJlcS0+dGFibGVbcmVxLT5pY2RfY291bnRdLmljZCA9IGljZDsKKwlyZXEtPnRhYmxlW3JlcS0+aWNkX2NvdW50XS5jaWQgPSBjaWQ7CisJc2dlLT5wYV9oaSA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMobm9uZW1iX2NtZC5kbWEpKTsKKwlzZ2UtPnBhX2xvID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5kbWEgJiAweEZGRkZGRkZGKTsKKwlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQuc2l6ZSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJQ0RTIEludmFsaWRhdGlvbiBGYWlsZWRcbiIpOworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCWlmIChub25lbWJfY21kLnZhKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGN0cmwtPnBkZXYsIG5vbmVtYl9jbWQuc2l6ZSwKKwkJCQkgICAgbm9uZW1iX2NtZC52YSwgbm9uZW1iX2NtZC5kbWEpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCQkgc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBjaWQsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBpc3N1ZV9yZXNldCwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IHNhdmVjZmdfZmxhZykKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgaXNjc2lfaW52YWxpZGF0ZV9jb25uZWN0aW9uX3BhcmFtc19pbiAqcmVxID0KKwkJCQkJCWVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJX0lOSSwKKwkJCSAgIE9QQ09ERV9JU0NTSV9JTklfRFJJVkVSX0lOVkFMSURBVEVfQ09OTkVDVElPTiwKKwkJCSAgIHNpemVvZigqcmVxKSk7CisJcmVxLT5zZXNzaW9uX2hhbmRsZSA9IGJlaXNjc2lfZXAtPmZ3X2hhbmRsZTsKKwlyZXEtPmNpZCA9IGNpZDsKKwlpZiAoaXNzdWVfcmVzZXQpCisJCXJlcS0+Y2xlYW51cF90eXBlID0gQ01EX0lTQ1NJX0NPTk5FQ1RJT05fSVNTVUVfVENQX1JTVDsKKwllbHNlCisJCXJlcS0+Y2xlYW51cF90eXBlID0gQ01EX0lTQ1NJX0NPTk5FQ1RJT05fSU5WQUxJREFURTsKKwlyZXEtPnNhdmVfY2ZnID0gc2F2ZWNmZ19mbGFnOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmIChzdGF0dXMpCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkludmFsaWRhdGlvbiBGYWlsZWRcbiIpOworCisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKwordW5zaWduZWQgY2hhciBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQl1bnNpZ25lZCBzaG9ydCBjaWQsIHVuc2lnbmVkIGludCB1cGxvYWRfZmxhZykKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgdGNwX3VwbG9hZF9wYXJhbXNfaW4gKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfQ09NTU9OX1RDUF9VUExPQUQsCisJCQkgICBPUENPREVfQ09NTU9OX1RDUF9VUExPQUQsIHNpemVvZigqcmVxKSk7CisJcmVxLT5pZCA9ICh1bnNpZ25lZCBzaG9ydCljaWQ7CisJcmVxLT51cGxvYWRfdHlwZSA9ICh1bnNpZ25lZCBjaGFyKXVwbG9hZF9mbGFnOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmIChzdGF0dXMpCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIm1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24gRmFpbGVkXG4iKTsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgbWdtdF9vcGVuX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIsCisJCQkgc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXApCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRhZGRyX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWRzdF9hZGRyOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmRhZGRyX2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopZHN0X2FkZHI7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJdW5zaWduZWQgc2hvcnQgZGVmX2hkcl9pZDsKKwl1bnNpZ25lZCBzaG9ydCBkZWZfZGF0YV9pZDsKKwlzdHJ1Y3QgcGh5c19hZGRyIHRlbXBsYXRlX2FkZHJlc3MgPSB7IDAsIDAgfTsKKwlzdHJ1Y3QgcGh5c19hZGRyICpwdGVtcGxhdGVfYWRkcmVzczsKKwlpbnQgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBzaG9ydCBjaWQgPSBiZWlzY3NpX2VwLT5lcF9jaWQ7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJZGVmX2hkcl9pZCA9ICh1bnNpZ25lZCBzaG9ydClIV0lfR0VUX0RFRl9IRFJRX0lEKHBoYmEpOworCWRlZl9kYXRhX2lkID0gKHVuc2lnbmVkIHNob3J0KUhXSV9HRVRfREVGX0JVRlFfSUQocGhiYSk7CisKKwlwdGVtcGxhdGVfYWRkcmVzcyA9ICZ0ZW1wbGF0ZV9hZGRyZXNzOworCUlTQ1NJX0dFVF9QRFVfVEVNUExBVEVfQUREUkVTUyhwaGJhLCBwdGVtcGxhdGVfYWRkcmVzcyk7CisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCQkgICBPUENPREVfQ09NTU9OX0lTQ1NJX1RDUF9DT05ORUNUX0FORF9PRkZMT0FELAorCQkJICAgc2l6ZW9mKCpyZXEpKTsKKwlpZiAoZHN0X2FkZHItPnNhX2ZhbWlseSA9PSBQRl9JTkVUKSB7CisJCV9fYmUzMiBzX2FkZHIgPSBkYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyOworCQlyZXEtPmlwX2FkZHJlc3MuaXBfdHlwZSA9IEJFMl9JUFY0OworCQlyZXEtPmlwX2FkZHJlc3MuaXBfYWRkcmVzc1swXSA9IHNfYWRkciAmIDB4MDAwMDAwZmY7CisJCXJlcS0+aXBfYWRkcmVzcy5pcF9hZGRyZXNzWzFdID0gKHNfYWRkciAmIDB4MDAwMGZmMDApID4+IDg7CisJCXJlcS0+aXBfYWRkcmVzcy5pcF9hZGRyZXNzWzJdID0gKHNfYWRkciAmIDB4MDBmZjAwMDApID4+IDE2OworCQlyZXEtPmlwX2FkZHJlc3MuaXBfYWRkcmVzc1szXSA9IChzX2FkZHIgJiAweGZmMDAwMDAwKSA+PiAyNDsKKwkJcmVxLT50Y3BfcG9ydCA9IG50b2hzKGRhZGRyX2luLT5zaW5fcG9ydCk7CisJCWJlaXNjc2lfZXAtPmRzdF9hZGRyID0gZGFkZHJfaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwkJYmVpc2NzaV9lcC0+ZHN0X3RjcHBvcnQgPSBudG9ocyhkYWRkcl9pbi0+c2luX3BvcnQpOworCQliZWlzY3NpX2VwLT5pcF90eXBlID0gQkUyX0lQVjQ7CisJfSBlbHNlIGlmIChkc3RfYWRkci0+c2FfZmFtaWx5ID09IFBGX0lORVQ2KSB7CisJCXJlcS0+aXBfYWRkcmVzcy5pcF90eXBlID0gQkUyX0lQVjY7CisJCW1lbWNweSgmcmVxLT5pcF9hZGRyZXNzLmlwX2FkZHJlc3MsCisJCSAgICAgICAmZGFkZHJfaW42LT5zaW42X2FkZHIuaW42X3UudTZfYWRkcjgsIDE2KTsKKwkJcmVxLT50Y3BfcG9ydCA9IG50b2hzKGRhZGRyX2luNi0+c2luNl9wb3J0KTsKKwkJYmVpc2NzaV9lcC0+ZHN0X3RjcHBvcnQgPSBudG9ocyhkYWRkcl9pbjYtPnNpbjZfcG9ydCk7CisJCW1lbWNweSgmYmVpc2NzaV9lcC0+ZHN0Nl9hZGRyLAorCQkgICAgICAgJmRhZGRyX2luNi0+c2luNl9hZGRyLmluNl91LnU2X2FkZHI4LCAxNik7CisJCWJlaXNjc2lfZXAtPmlwX3R5cGUgPSBCRTJfSVBWNjsKKwl9IGVsc2V7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJ1bmtub3duIGFkZHIgZmFtaWx5ICVkXG4iLAorCQkJICAgICBkc3RfYWRkci0+c2FfZmFtaWx5KTsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCisJfQorCXJlcS0+Y2lkID0gY2lkOworCXJlcS0+Y3FfaWQgPSBwaHdpX2NvbnRleHQtPmJlX2NxLmlkOworCXJlcS0+ZGVmcV9pZCA9IGRlZl9oZHJfaWQ7CisJcmVxLT5oZHJfcmluZ19pZCA9IGRlZl9oZHJfaWQ7CisJcmVxLT5kYXRhX3JpbmdfaWQgPSBkZWZfZGF0YV9pZDsKKwlyZXEtPmRvX29mZmxvYWQgPSAxOworCXJlcS0+ZGF0YW91dF90ZW1wbGF0ZV9wYS5sbyA9IHB0ZW1wbGF0ZV9hZGRyZXNzLT5sbzsKKwlyZXEtPmRhdGFvdXRfdGVtcGxhdGVfcGEuaGkgPSBwdGVtcGxhdGVfYWRkcmVzcy0+aGk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcDsKKwkJc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX291dCAqcHRjcGNuY3Rfb3V0ID0KKwkJCQkJCQllbWJlZGRlZF9wYXlsb2FkKHdyYik7CisKKwkJZXAgPSBwaGJhLT5lcF9hcnJheVtwdGNwY25jdF9vdXQtPmNpZF07CisJCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwkJYmVpc2NzaV9lcC0+ZndfaGFuZGxlID0gMDsKKwkJYmVpc2NzaV9lcC0+Y2lkX3ZsZCA9IDE7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgIm1nbXRfb3Blbl9jb25uZWN0aW9uIFN1Y2Nlc3NcbiIpOworCX0gZWxzZQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X29wZW5fY29ubmVjdGlvbiBGYWlsZWRcbiIpOworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGU4MTZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaApAQCAtMCwwICsxLDI0OSBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqCisgKi8KKworI2lmbmRlZiBfQkVJU0NTSV9NR01UXworI2RlZmluZSBfQkVJU0NTSV9NR01UXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSAiYmVfaXNjc2kuaCIKKyNpbmNsdWRlICJiZV9tYWluLmgiCisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfbWNjX3NnZSB7CisJdTggcGFfbG9bMzJdOwkJLyogZHdvcmQgMCAqLworCXU4IHBhX2hpWzMyXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBsZW5ndGhbMzJdOwkJLyogRFdPUkQgMiAqLworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9tY2Nfd3JiX3BheWxvYWQgeworCXVuaW9uIHsKKwkJc3RydWN0IGFtYXBfbWNjX3NnZSBzZ2xbMTldOworCQl1OCBlbWJlZGRlZFs1OSAqIDMyXTsJLyogRFdPUkRTIDU3IHRvIDExNSAqLworCX0gdTsKK30gX19wYWNrZWQ7CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfbWNjX3dyYiB7CisJdTggZW1iZWRkZWQ7CQkvKiBEV09SRCAwICovCisJdTggcnN2ZDBbMl07CQkvKiBEV09SRCAwICovCisJdTggc2dlX2NvdW50WzVdOwkvKiBEV09SRCAwICovCisJdTggcnN2ZDFbMTZdOwkJLyogRFdPUkQgMCAqLworCXU4IHNwZWNpYWxbOF07CQkvKiBEV09SRCAwICovCisJdTggcGF5bG9hZF9sZW5ndGhbMzJdOworCXU4IHRhZ1s2NF07CQkvKiBEV09SRCAyICovCisJdTggcnN2ZDJbMzJdOwkJLyogRFdPUkQgNCAqLworCXN0cnVjdCBhbWFwX21jY193cmJfcGF5bG9hZCBwYXlsb2FkOworfTsKKworc3RydWN0IG1jY19zZ2UgeworCXUzMiBwYV9sbzsJCS8qIGR3b3JkIDAgKi8KKwl1MzIgcGFfaGk7CQkvKiBkd29yZCAxICovCisJdTMyIGxlbmd0aDsJCS8qIERXT1JEIDIgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtY2Nfd3JiX3BheWxvYWQgeworCXVuaW9uIHsKKwkJc3RydWN0IG1jY19zZ2Ugc2dsWzE5XTsKKwkJdTMyIGVtYmVkZGVkWzU5XTsJLyogRFdPUkRTIDU3IHRvIDExNSAqLworCX0gdTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUNDX1dSQl9FTUJFRERFRF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworc3RydWN0IG1jY193cmIgeworCXUzMiBkd1swXTsJCS8qIERXT1JEIDAgKi8KKwl1MzIgcGF5bG9hZF9sZW5ndGg7CisJdTMyIHRhZ1syXTsJCS8qIERXT1JEIDIgKi8KKwl1MzIgcnN2ZDJbMV07CQkvKiBEV09SRCA0ICovCisJc3RydWN0IG1jY193cmJfcGF5bG9hZCBwYXlsb2FkOworfTsKKwordW5zaWduZWQgY2hhciBtZ210X2VwZndfY2xlYW51cChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIHNob3J0IGNodXRlKTsKK2ludCBtZ210X29wZW5fY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIsCisJCQkgc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXApOworCit1bnNpZ25lZCBjaGFyIG1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgY2lkLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHVwbG9hZF9mbGFnKTsKK3Vuc2lnbmVkIGNoYXIgbWdtdF9pbnZhbGlkYXRlX2ljZHMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCSAgIHVuc2lnbmVkIGludCBpY2QsIHVuc2lnbmVkIGludCBjaWQpOworCitzdHJ1Y3QgaXNjc2lfaW52YWxpZGF0ZV9jb25uZWN0aW9uX3BhcmFtc19pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1bnNpZ25lZCBpbnQgc2Vzc2lvbl9oYW5kbGU7CisJdW5zaWduZWQgc2hvcnQgY2lkOworCXVuc2lnbmVkIHNob3J0IHVudXNlZDsKKwl1bnNpZ25lZCBzaG9ydCBjbGVhbnVwX3R5cGU7CisJdW5zaWduZWQgc2hvcnQgc2F2ZV9jZmc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaXNjc2lfaW52YWxpZGF0ZV9jb25uZWN0aW9uX3BhcmFtc19vdXQgeworCXVuc2lnbmVkIGludCBzZXNzaW9uX2hhbmRsZTsKKwl1bnNpZ25lZCBzaG9ydCBjaWQ7CisJdW5zaWduZWQgc2hvcnQgdW51c2VkOworfSBfX3BhY2tlZDsKKwordW5pb24gaXNjc2lfaW52YWxpZGF0ZV9jb25uZWN0aW9uX3BhcmFtcyB7CisJc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4gcmVxdWVzdDsKKwlzdHJ1Y3QgaXNjc2lfaW52YWxpZGF0ZV9jb25uZWN0aW9uX3BhcmFtc19vdXQgcmVzcG9uc2U7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kX3RhYmxlIHsKKwl1bnNpZ25lZCBzaG9ydCBpY2Q7CisJdW5zaWduZWQgc2hvcnQgY2lkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXVuc2lnbmVkIGludCByZWZfaGFuZGxlOworCXVuc2lnbmVkIGludCBpY2RfY291bnQ7CisJc3RydWN0IGludmFsaWRhdGVfY29tbWFuZF90YWJsZSB0YWJsZVsxMjhdOworCXVuc2lnbmVkIHNob3J0IGNsZWFudXBfdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCB1bnVzZWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfb3V0IHsKKwl1bnNpZ25lZCBpbnQgcmVmX2hhbmRsZTsKKwl1bnNpZ25lZCBpbnQgaWNkX2NvdW50OworCXVuc2lnbmVkIGludCBpY2Rfc3RhdHVzWzEyOF07Cit9IF9fcGFja2VkOworCit1bmlvbiBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtcyB7CisJc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luIHJlcXVlc3Q7CisJc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX291dCByZXNwb25zZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtZ210X2hiYV9hdHRyaWJ1dGVzIHsKKwl1OCBmbGFzaHJvbV92ZXJzaW9uX3N0cmluZ1szMl07CisJdTggbWFudWZhY3R1cmVyX25hbWVbMzJdOworCXUzMiBzdXBwb3J0ZWRfbW9kZXM7CisJdTggc2VlcHJvbV92ZXJzaW9uX2xvOworCXU4IHNlZXByb21fdmVyc2lvbl9oaTsKKwl1OCByc3ZkMFsyXTsKKwl1MzIgZndfY21kX2RhdGFfc3RydWN0X3ZlcnNpb247CisJdTMyIGVwX2Z3X2RhdGFfc3RydWN0X3ZlcnNpb247CisJdTMyIGZ1dHVyZV9yZXNlcnZlZFsxMl07CisJdTMyIGRlZmF1bHRfZXh0ZW5kZWRfdGltZW91dDsKKwl1OCBjb250cm9sbGVyX21vZGVsX251bWJlclszMl07CisJdTggY29udHJvbGxlcl9kZXNjcmlwdGlvbls2NF07CisJdTggY29udHJvbGxlcl9zZXJpYWxfbnVtYmVyWzMyXTsKKwl1OCBpcF92ZXJzaW9uX3N0cmluZ1szMl07CisJdTggZmlybXdhcmVfdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IGJpb3NfdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IHJlZGJvb3RfdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IGRyaXZlcl92ZXJzaW9uX3N0cmluZ1szMl07CisJdTggZndfb25fZmxhc2hfdmVyc2lvbl9zdHJpbmdbMzJdOworCXUzMiBmdW5jdGlvbmFsaXRpZXNfc3VwcG9ydGVkOworCXUxNiBtYXhfY2RibGVuZ3RoOworCXU4IGFzaWNfcmV2aXNpb247CisJdTggZ2VuZXJhdGlvbmFsX2d1aWRbMTZdOworCXU4IGhiYV9wb3J0X2NvdW50OworCXUxNiBkZWZhdWx0X2xpbmtfZG93bl90aW1lb3V0OworCXU4IGlzY3NpX3Zlcl9taW5fbWF4OworCXU4IG11bHRpZnVuY3Rpb25fZGV2aWNlOworCXU4IGNhY2hlX3ZhbGlkOworCXU4IGhiYV9zdGF0dXM7CisJdTggbWF4X2RvbWFpbnNfc3VwcG9ydGVkOworCXU4IHBoeV9wb3J0OworCXUzMiBmaXJtd2FyZV9wb3N0X3N0YXR1czsKKwl1MzIgaGJhX210dVs4XTsKKwl1MzIgZnV0dXJlX3UzMls0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyB7CisJc3RydWN0IG1nbXRfaGJhX2F0dHJpYnV0ZXMgaGJhX2F0dHJpYnM7CisJdTE2IHBjaV92ZW5kb3JfaWQ7CisJdTE2IHBjaV9kZXZpY2VfaWQ7CisJdTE2IHBjaV9zdWJfdmVuZG9yX2lkOworCXUxNiBwY2lfc3ViX3N5c3RlbV9pZDsKKwl1OCBwY2lfYnVzX251bWJlcjsKKwl1OCBwY2lfZGV2aWNlX251bWJlcjsKKwl1OCBwY2lfZnVuY3Rpb25fbnVtYmVyOworCXU4IGludGVyZmFjZV90eXBlOworCXU2NCB1bmlxdWVfaWRlbnRpZmllcjsKKwl1OCBuZXRmaWx0ZXJzOworCXU4IHJzdmQwWzNdOworCXU4IGZ1dHVyZV91MzJbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJc3RydWN0IG1nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzIHBhcmFtczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlc19yZXNwIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwlzdHJ1Y3QgbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMgcGFyYW1zOworfSBfX3BhY2tlZDsKKworLyogY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50ICovCisKKyNkZWZpbmUgR0VUX01HTVRfQ09OVFJPTExFUl9XUyhwaGJhKSAgICAocGhiYS0+cG1nbXRfd3MpCisKKy8qIE1HTVQgQ01EIGZsYWdzICovCisKKyNkZWZpbmUgTUdNVF9DTURIX0ZSRUUgICAgICAgICAgICAgICAgKDE8PDApCisKKy8qICAtLS0gTUdNVF9FUlJPUl9DT0RFUyAtLS0gKi8KKy8qICBFcnJvciBDb2RlcyByZXR1cm5lZCBpbiB0aGUgc3RhdHVzIGZpZWxkIG9mIHRoZSBDTUQgcmVzcG9uc2UgaGVhZGVyICovCisjZGVmaW5lIE1HTVRfU1RBVFVTX1NVQ0NFU1MgMAkvKiBUaGUgQ01EIGNvbXBsZXRlZCB3aXRob3V0IGVycm9ycyAqLworI2RlZmluZSBNR01UX1NUQVRVU19GQUlMRUQgMQkvKiBFcnJvciBzdGF0dXMgaW4gdGhlIFN0YXR1cyBmaWVsZCBvZiAqLworCQkJCS8qIHRoZSBDTURfUkVTUE9OU0VfSEVBREVSICAqLworCisjZGVmaW5lIElTQ1NJX0dFVF9QRFVfVEVNUExBVEVfQUREUkVTUyhwYywgcGEpIHtcCisgICAgcGEtPmxvID0gcGhiYS0+aW5pdF9tZW1bSVNDU0lfTUVNX0dMT0JBTF9IRUFERVJdLm1lbV9hcnJheVswXS5cCisJCQkJCWJ1c19hZGRyZXNzLnUuYTMyLmFkZHJlc3NfbG87ICBcCisgICAgcGEtPmhpID0gcGhiYS0+aW5pdF9tZW1bSVNDU0lfTUVNX0dMT0JBTF9IRUFERVJdLm1lbV9hcnJheVswXS5cCisJCQkJCWJ1c19hZGRyZXNzLnUuYTMyLmFkZHJlc3NfaGk7ICBcCit9CisKK3N0cnVjdCBiZWlzY3NpX2VuZHBvaW50IHsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisJc3RydWN0IGJlaXNjc2lfc2VzcyAqc2VzczsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpjb25uOworCXVuc2lnbmVkIHNob3J0IGlwX3R5cGU7CisJY2hhciBkc3Q2X2FkZHJbSVNDU0lfQUREUkVTU19CVUZfTEVOXTsKKwl1bnNpZ25lZCBsb25nIGRzdF9hZGRyOworCXVuc2lnbmVkIHNob3J0IGVwX2NpZDsKKwl1bnNpZ25lZCBpbnQgZndfaGFuZGxlOworCXUxNiBkc3RfdGNwcG9ydDsKKwl1MTYgY2lkX3ZsZDsKK307CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF9nZXRfZndfY29uZmlnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCQkgc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBjaWQsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBpc3N1ZV9yZXNldCwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IHNhdmVjZmdfZmxhZyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvYmZhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNjAwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKK29iai0kKENPTkZJR19TQ1NJX0JGQV9GQykgOj0gYmZhLm8KKworYmZhLXkgOj0gYmZhZC5vIGJmYWRfaW50ci5vIGJmYWRfb3MubyBiZmFkX2ltLm8gYmZhZF9hdHRyLm8gYmZhZF9md2ltZy5vCisKK2JmYS15ICs9IGJmYV9jb3JlLm8gYmZhX2lvYy5vIGJmYV9pb2NmYy5vIGJmYV9mY3hwLm8gYmZhX2xwcy5vCitiZmEteSArPSBiZmFfaHdfY2IubyBiZmFfaHdfY3QubyBiZmFfaW50ci5vIGJmYV90aW1lci5vIGJmYV9ycG9ydC5vIAorYmZhLXkgKz0gYmZhX2ZjcG9ydC5vIGJmYV9wb3J0Lm8gYmZhX3VmLm8gYmZhX3NncGcubyBiZmFfbW9kdWxlLm8gYmZhX2lvaW0ubworYmZhLXkgKz0gYmZhX2l0bmltLm8gYmZhX2ZjcGltLm8gYmZhX3Rza2ltLm8gYmZhX2xvZy5vIGJmYV9sb2dfbW9kdWxlLm8KK2JmYS15ICs9IGJmYV9jc2RlYnVnLm8gYmZhX3NtLm8gcGxvZy5vCisKK2JmYS15ICs9IGZjYnVpbGQubyBmYWJyaWMubyBmY3BpbS5vIHZmYXBpLm8gZmNwdG0ubyBiZmFfZmNzLm8gYmZhX2Zjc19wb3J0Lm8gCitiZmEteSArPSBiZmFfZmNzX3VmLm8gYmZhX2Zjc19scG9ydC5vIGZhYi5vIGZkbWkubyBtcy5vIG5zLm8gc2NuLm8gbG9vcC5vCitiZmEteSArPSBscG9ydF9hcGkubyBuMm4ubyBycG9ydC5vIHJwb3J0X2FwaS5vIHJwb3J0X2Z0cnMubyB2cG9ydC5vCisKK2NjZmxhZ3MteSA6PSAtSSQob2JqKSAtSSQob2JqKS9pbmNsdWRlIC1JJChvYmopL2luY2x1ZGUvY25hCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYWxsYmFja19wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYWxsYmFja19wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzMjY1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NhbGxiYWNrX3ByaXYuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfQ0FMTEJBQ0tfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfQ0FMTEJBQ0tfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisKK3R5cGVkZWYgdm9pZCAgICAoKmJmYV9jYl9jYmZuX3QpICh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CisKKy8qKgorICogR2VuZXJpYyBCRkEgY2FsbGJhY2sgZWxlbWVudC4KKyAqLworc3RydWN0IGJmYV9jYl9xZV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgcWU7CisJYmZhX2NiX2NiZm5fdCAgY2JmbjsKKwliZmFfYm9vbGVhbl90ICAgb25jZTsKKwl1MzIJCXJzdmQ7CisJdm9pZCAgICAgICAgICAgKmNiYXJnOworfTsKKworI2RlZmluZSBiZmFfY2JfcXVldWUoX19iZmEsIF9faGNiX3FlLCBfX2NiZm4sIF9fY2JhcmcpIGRvIHsJCVwKKwkoX19oY2JfcWUpLT5jYmZuICA9IChfX2NiZm4pOyAgICAgIFwKKwkoX19oY2JfcWUpLT5jYmFyZyA9IChfX2NiYXJnKTsgICAgICBcCisJbGlzdF9hZGRfdGFpbCgmKF9faGNiX3FlKS0+cWUsICYoX19iZmEpLT5jb21wX3EpOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX2NiX2RlcXVldWUoX19oY2JfcWUpCWxpc3RfZGVsKCYoX19oY2JfcWUpLT5xZSkKKworI2RlZmluZSBiZmFfY2JfcXVldWVfb25jZShfX2JmYSwgX19oY2JfcWUsIF9fY2JmbiwgX19jYmFyZykgZG8gewlcCisJKF9faGNiX3FlKS0+Y2JmbiAgPSAoX19jYmZuKTsgICAgICBcCisJKF9faGNiX3FlKS0+Y2JhcmcgPSAoX19jYmFyZyk7ICAgICAgXAorCWlmICghKF9faGNiX3FlKS0+b25jZSkgeyAgICAgIFwKKwkJbGlzdF9hZGRfdGFpbCgoX19oY2JfcWUpLCAmKF9fYmZhKS0+Y29tcF9xKTsgICAgICBcCisJCShfX2hjYl9xZSktPm9uY2UgPSBCRkFfVFJVRTsJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX2NiX3F1ZXVlX2RvbmUoX19oY2JfcWUpIGRvIHsJCQkJXAorCShfX2hjYl9xZSktPm9uY2UgPSBCRkFfRkFMU0U7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19CRkFfQ0FMTEJBQ0tfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NiX2lvaW1fbWFjcm9zLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYl9pb2ltX21hY3Jvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNTBjODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYl9pb2ltX21hY3Jvcy5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9jYl9pb2ltX21hY3Jvcy5oIEJGQSBJT0lNIGRyaXZlciBpbnRlcmZhY2UgbWFjcm9zLgorICovCisKKyNpZm5kZWYgX19CRkFfSENCX0lPSU1fTUFDUk9TX0hfXworI2RlZmluZSBfX0JGQV9IQ0JfSU9JTV9NQUNST1NfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisvKgorICogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisgKgorICogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4gI2luY2x1ZGUKKyAqIDxzY3NpL3Njc2lfZGV2aWNlLmg+ICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorICovCisjaW5jbHVkZSAiYmZhZF9pbV9jb21wYXQuaCIKKworLyoKKyAqIHRhc2sgYXR0cmlidXRlIHZhbHVlcyBpbiBGQ1AtMiBGQ1BfQ01ORCBJVQorICovCisjZGVmaW5lIFNJTVBMRV9RICAgIDAKKyNkZWZpbmUgSEVBRF9PRl9RICAgMQorI2RlZmluZSBPUkRFUkVEX1EgICAyCisjZGVmaW5lIEFDQV9RICAgICAgIDQKKyNkZWZpbmUgVU5UQUdHRUQgICAgNQorCitzdGF0aWMgaW5saW5lIGx1bl90CitiZmFkX2ludF90b19sdW4odTMyIGx1bm8pCit7CisJdW5pb24geworCQl1MTYgICAgICAgIHNjc2lfbHVuWzRdOworCQlsdW5fdCAgICAgICAgICAgYmZhX2x1bjsKKwl9IGx1bjsKKworCWx1bi5iZmFfbHVuICAgICA9IDA7CisJbHVuLnNjc2lfbHVuWzBdID0gYmZhX29zX2h0b25zKGx1bm8pOworCisJcmV0dXJuIChsdW4uYmZhX2x1bik7Cit9CisKKy8qKgorICogR2V0IExVTiBmb3IgdGhlIEkvTyByZXF1ZXN0CisgKi8KKyNkZWZpbmUgYmZhX2NiX2lvaW1fZ2V0X2x1bihfX2RpbykJXAorCWJmYWRfaW50X3RvX2x1bigoKHN0cnVjdCBzY3NpX2NtbmQgKilfX2RpbyktPmRldmljZS0+bHVuKQorCisvKioKKyAqIEdldCBDREIgZm9yIHRoZSBJL08gcmVxdWVzdAorICovCitzdGF0aWMgaW5saW5lIHU4ICoKK2JmYV9jYl9pb2ltX2dldF9jZGIoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCisJcmV0dXJuICgodTggKikgY21uZC0+Y21uZCk7Cit9CisKKy8qKgorICogR2V0IEkvTyBkaXJlY3Rpb24gKHJlYWQvd3JpdGUpIGZvciB0aGUgSS9PIHJlcXVlc3QKKyAqLworc3RhdGljIGlubGluZSBlbnVtIGZjcF9pb2RpcgorYmZhX2NiX2lvaW1fZ2V0X2lvZGlyKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFkaXI7CisKKwlkbWFkaXIgPSBjbW5kLT5zY19kYXRhX2RpcmVjdGlvbjsKKwlpZiAoZG1hZGlyID09IERNQV9UT19ERVZJQ0UpCisJCXJldHVybiBGQ1BfSU9ESVJfV1JJVEU7CisJZWxzZSBpZiAoZG1hZGlyID09IERNQV9GUk9NX0RFVklDRSkKKwkJcmV0dXJuIEZDUF9JT0RJUl9SRUFEOworCWVsc2UKKwkJcmV0dXJuIEZDUF9JT0RJUl9OT05FOworfQorCisvKioKKyAqIEdldCBJTyBzaXplIGluIGJ5dGVzIGZvciB0aGUgSS9PIHJlcXVlc3QKKyAqLworc3RhdGljIGlubGluZSB1MzIKK2JmYV9jYl9pb2ltX2dldF9zaXplKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKworCXJldHVybiAoc2NzaV9idWZmbGVuKGNtbmQpKTsKK30KKworLyoqCisgKiBHZXQgdGltZW91dCBmb3IgdGhlIEkvTyByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgdTgKK2JmYV9jYl9pb2ltX2dldF90aW1lb3V0KHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKwkvKgorCSAqIFRCRDogbmVlZCBhIHRpbWVvdXQgZm9yIHNjc2kgcGFzc3RocnUKKwkgKi8KKwlpZiAoY21uZC0+ZGV2aWNlLT5ob3N0ID09IE5VTEwpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogR2V0IFNHIGVsZW1lbnQgZm9yIHRoZSBJL08gcmVxdWVzdCBnaXZlbiB0aGUgU0cgZWxlbWVudCBpbmRleAorICovCitzdGF0aWMgaW5saW5lIHVuaW9uIGJmaV9hZGRyX3UKK2JmYV9jYl9pb2ltX2dldF9zZ2FkZHIoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8sIGludCBzZ2VpZCkKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2U7CisJdTY0ICAgICAgICBhZGRyOworCisJc2dlID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNjc2lfc2dsaXN0KGNtbmQpICsgc2dlaWQ7CisJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnZSk7CisKKwlyZXR1cm4gKCoodW5pb24gYmZpX2FkZHJfdSAqKSAmYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCitiZmFfY2JfaW9pbV9nZXRfc2dsZW4oc3RydWN0IGJmYWRfaW9pbV9zICpkaW8sIGludCBzZ2VpZCkKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2U7CisJdTMyICAgICAgICBsZW47CisKKwlzZ2UgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopc2NzaV9zZ2xpc3QoY21uZCkgKyBzZ2VpZDsKKwlsZW4gPSBzZ19kbWFfbGVuKHNnZSk7CisKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIEdldCBDb21tYW5kIFJlZmVyZW5jZSBOdW1iZXIgZm9yIHRoZSBJL08gcmVxdWVzdC4gMCBpZiBub25lLgorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfY3JuKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIEdldCBTQU0tMyBwcmlvcml0eSBmb3IgdGhlIEkvTyByZXF1ZXN0LiAwIGlzIGRlZmF1bHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTgKK2JmYV9jYl9pb2ltX2dldF9wcmlvcml0eShzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBHZXQgdGFzayBhdHRyaWJ1dGVzIGZvciB0aGUgSS9PIHJlcXVlc3QuIERlZmF1bHQgaXMgRkNQX1RBU0tfQVRUUl9TSU1QTEUoMCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTgKK2JmYV9jYl9pb2ltX2dldF90YXNrYXR0cihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJdTggICAgICAgICB0YXNrX2F0dHIgPSBVTlRBR0dFRDsKKworCWlmIChjbW5kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKKwkJc3dpdGNoIChjbW5kLT50YWcpIHsKKwkJY2FzZSBIRUFEX09GX1FVRVVFX1RBRzoKKwkJCXRhc2tfYXR0ciA9IEhFQURfT0ZfUTsKKwkJCWJyZWFrOworCQljYXNlIE9SREVSRURfUVVFVUVfVEFHOgorCQkJdGFza19hdHRyID0gT1JERVJFRF9ROworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl0YXNrX2F0dHIgPSBTSU1QTEVfUTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHRhc2tfYXR0cjsKK30KKworLyoqCisgKiBHZXQgQ0RCIGxlbmd0aCBpbiBieXRlcyBmb3IgdGhlIEkvTyByZXF1ZXN0LiBEZWZhdWx0IGlzIEZDUF9DTU5EX0NEQl9MRU4oMTYpLgorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfY2RibGVuKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKworCXJldHVybiAoY21uZC0+Y21kX2xlbik7Cit9CisKKworCisjZW5kaWYgLyogX19CRkFfSENCX0lPSU1fTUFDUk9TX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2VlLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTk1OWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2VlLmMKQEAgLTAsMCArMSw0OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfY2VlLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxjZWUvYmZhX2NlZS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfY2VlLmg+CisjaW5jbHVkZSA8YmZpL2JmaS5oPgorI2luY2x1ZGUgPGJmYV9pb2MuaD4KKyNpbmNsdWRlIDxjbmEvYmZhX2NuYV90cmNtb2QuaD4KKworQkZBX1RSQ19GSUxFKENOQSwgQ0VFKTsKKworI2RlZmluZSBiZmFfaW9jX3BvcnRpZChfX2lvYykgKChfX2lvYyktPnBvcnRfaWQpCisjZGVmaW5lIGJmYV9scHVpZChfX2FyZykgYmZhX2lvY19wb3J0aWQoJihfX2FyZyktPmlvYykKKworc3RhdGljIHZvaWQgICAgIGJmYV9jZWVfZm9ybWF0X2xsZHBfY2ZnKHN0cnVjdCBiZmFfY2VlX2xsZHBfY2ZnX3MgKmxsZHBfY2ZnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfY2VlX2Zvcm1hdF9kY2JjeF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9kY2J4X3N0YXRzX3MKKwkJCQkJICAgKmRjYmN4X3N0YXRzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfY2VlX2Zvcm1hdF9sbGRwX3N0YXRzKHN0cnVjdCBiZmFfY2VlX2xsZHBfc3RhdHNfcworCQkJCQkgICpsbGRwX3N0YXRzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfY2VlX2Zvcm1hdF9jZmdfc3RhdHMoc3RydWN0IGJmYV9jZWVfY2ZnX3N0YXRzX3MgKmNmZ19zdGF0cyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfY2VlX2NmZyh2b2lkICpidWZmZXIpOworc3RhdGljIHZvaWQgICAgIGJmYV9jZWVfZm9ybWF0X2NlZV9zdGF0cyh2b2lkICpidWZmZXIpOworCitzdGF0aWMgdm9pZAorYmZhX2NlZV9mb3JtYXRfY2VlX3N0YXRzKHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zICpjZWVfc3RhdHMgPSBidWZmZXI7CisJYmZhX2NlZV9mb3JtYXRfZGNiY3hfc3RhdHMoJmNlZV9zdGF0cy0+ZGNieF9zdGF0cyk7CisJYmZhX2NlZV9mb3JtYXRfbGxkcF9zdGF0cygmY2VlX3N0YXRzLT5sbGRwX3N0YXRzKTsKKwliZmFfY2VlX2Zvcm1hdF9jZmdfc3RhdHMoJmNlZV9zdGF0cy0+Y2ZnX3N0YXRzKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2NlZV9jZmcodm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBiZmFfY2VlX2F0dHJfcyAqY2VlX2NmZyA9IGJ1ZmZlcjsKKwliZmFfY2VlX2Zvcm1hdF9sbGRwX2NmZygmY2VlX2NmZy0+bGxkcF9yZW1vdGUpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2NlZV9mb3JtYXRfZGNiY3hfc3RhdHMoc3RydWN0IGJmYV9jZWVfZGNieF9zdGF0c19zICpkY2JjeF9zdGF0cykKK3sKKwlkY2JjeF9zdGF0cy0+c3VidGx2c191bnJlY29nbml6ZWQgPQorCQliZmFfb3NfbnRvaGwoZGNiY3hfc3RhdHMtPnN1YnRsdnNfdW5yZWNvZ25pemVkKTsKKwlkY2JjeF9zdGF0cy0+bmVnb3RpYXRpb25fZmFpbGVkID0KKwkJYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5uZWdvdGlhdGlvbl9mYWlsZWQpOworCWRjYmN4X3N0YXRzLT5yZW1vdGVfY2ZnX2NoYW5nZWQgPQorCQliZmFfb3NfbnRvaGwoZGNiY3hfc3RhdHMtPnJlbW90ZV9jZmdfY2hhbmdlZCk7CisJZGNiY3hfc3RhdHMtPnRsdnNfcmVjZWl2ZWQgPSBiZmFfb3NfbnRvaGwoZGNiY3hfc3RhdHMtPnRsdnNfcmVjZWl2ZWQpOworCWRjYmN4X3N0YXRzLT50bHZzX2ludmFsaWQgPSBiZmFfb3NfbnRvaGwoZGNiY3hfc3RhdHMtPnRsdnNfaW52YWxpZCk7CisJZGNiY3hfc3RhdHMtPnNlcW5vID0gYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5zZXFubyk7CisJZGNiY3hfc3RhdHMtPmFja25vID0gYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5hY2tubyk7CisJZGNiY3hfc3RhdHMtPnJlY3ZkX3NlcW5vID0gYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5yZWN2ZF9zZXFubyk7CisJZGNiY3hfc3RhdHMtPnJlY3ZkX2Fja25vID0gYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5yZWN2ZF9hY2tubyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfY2VlX2Zvcm1hdF9sbGRwX3N0YXRzKHN0cnVjdCBiZmFfY2VlX2xsZHBfc3RhdHNfcyAqbGxkcF9zdGF0cykKK3sKKwlsbGRwX3N0YXRzLT5mcmFtZXNfdHJhbnNtaXR0ZWQgPQorCQliZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+ZnJhbWVzX3RyYW5zbWl0dGVkKTsKKwlsbGRwX3N0YXRzLT5mcmFtZXNfYWdlZF9vdXQgPSBiZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+ZnJhbWVzX2FnZWRfb3V0KTsKKwlsbGRwX3N0YXRzLT5mcmFtZXNfZGlzY2FyZGVkID0KKwkJYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPmZyYW1lc19kaXNjYXJkZWQpOworCWxsZHBfc3RhdHMtPmZyYW1lc19pbl9lcnJvciA9IGJmYV9vc19udG9obChsbGRwX3N0YXRzLT5mcmFtZXNfaW5fZXJyb3IpOworCWxsZHBfc3RhdHMtPmZyYW1lc19yY3ZkID0gYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPmZyYW1lc19yY3ZkKTsKKwlsbGRwX3N0YXRzLT50bHZzX2Rpc2NhcmRlZCA9IGJmYV9vc19udG9obChsbGRwX3N0YXRzLT50bHZzX2Rpc2NhcmRlZCk7CisJbGxkcF9zdGF0cy0+dGx2c191bnJlY29nbml6ZWQgPQorCQliZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+dGx2c191bnJlY29nbml6ZWQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2NlZV9mb3JtYXRfY2ZnX3N0YXRzKHN0cnVjdCBiZmFfY2VlX2NmZ19zdGF0c19zICpjZmdfc3RhdHMpCit7CisJY2ZnX3N0YXRzLT5jZWVfc3RhdHVzX2Rvd24gPSBiZmFfb3NfbnRvaGwoY2ZnX3N0YXRzLT5jZWVfc3RhdHVzX2Rvd24pOworCWNmZ19zdGF0cy0+Y2VlX3N0YXR1c191cCA9IGJmYV9vc19udG9obChjZmdfc3RhdHMtPmNlZV9zdGF0dXNfdXApOworCWNmZ19zdGF0cy0+Y2VlX2h3X2NmZ19jaGFuZ2VkID0KKwkJYmZhX29zX250b2hsKGNmZ19zdGF0cy0+Y2VlX2h3X2NmZ19jaGFuZ2VkKTsKKwljZmdfc3RhdHMtPnJlY3ZkX2ludmFsaWRfY2ZnID0KKwkJYmZhX29zX250b2hsKGNmZ19zdGF0cy0+cmVjdmRfaW52YWxpZF9jZmcpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2NlZV9mb3JtYXRfbGxkcF9jZmcoc3RydWN0IGJmYV9jZWVfbGxkcF9jZmdfcyAqbGxkcF9jZmcpCit7CisJbGxkcF9jZmctPnRpbWVfdG9faW50ZXJ2YWwgPSBiZmFfb3NfbnRvaHMobGxkcF9jZmctPnRpbWVfdG9faW50ZXJ2YWwpOworCWxsZHBfY2ZnLT5lbmFibGVkX3N5c3RlbV9jYXAgPQorCQliZmFfb3NfbnRvaHMobGxkcF9jZmctPmVuYWJsZWRfc3lzdGVtX2NhcCk7Cit9CisKKy8qKgorICogYmZhX2NlZV9hdHRyX21lbWluZm8oKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHZvaWQKKyAqCisgKiBAcmV0dXJuIFNpemUgb2YgRE1BIHJlZ2lvbgorICovCitzdGF0aWMgICAgICAgICAgdTMyCitiZmFfY2VlX2F0dHJfbWVtaW5mbyh2b2lkKQoreworCXJldHVybiBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9jZWVfYXR0cl9zKSwgQkZBX0RNQV9BTElHTl9TWik7Cit9CisKKy8qKgorICogYmZhX2NlZV9zdGF0c19tZW1pbmZvKCkKKyAqCisgKgorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBTaXplIG9mIERNQSByZWdpb24KKyAqLworc3RhdGljICAgICAgICAgIHUzMgorYmZhX2NlZV9zdGF0c19tZW1pbmZvKHZvaWQpCit7CisJcmV0dXJuIEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zKSwgQkZBX0RNQV9BTElHTl9TWik7Cit9CisKKy8qKgorICogYmZhX2NlZV9nZXRfYXR0cl9pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSAtIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9jZWVfZ2V0X2F0dHJfaXNyKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwljZWUtPmdldF9hdHRyX3N0YXR1cyA9IHN0YXR1czsKKwliZmFfdHJjKGNlZSwgMCk7CisJaWYgKHN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJLyoKKwkJICogVGhlIHJlcXVlc3RlZCBkYXRhIGhhcyBiZWVuIGNvcGllZCB0byB0aGUgRE1BIGFyZWEsICpwcm9jZXNzCisJCSAqIGl0LgorCQkgKi8KKwkJbWVtY3B5KGNlZS0+YXR0ciwgY2VlLT5hdHRyX2RtYS5rdmEsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGJmYV9jZWVfYXR0cl9zKSk7CisJCWJmYV9jZWVfZm9ybWF0X2NlZV9jZmcoY2VlLT5hdHRyKTsKKwl9CisJY2VlLT5nZXRfYXR0cl9wZW5kaW5nID0gQkZBX0ZBTFNFOworCWlmIChjZWUtPmNiZm4uZ2V0X2F0dHJfY2JmbikgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCWNlZS0+Y2Jmbi5nZXRfYXR0cl9jYmZuKGNlZS0+Y2Jmbi5nZXRfYXR0cl9jYmFyZywgc3RhdHVzKTsKKwl9CisJYmZhX3RyYyhjZWUsIDApOworfQorCisvKioKKyAqIGJmYV9jZWVfZ2V0X2F0dHJfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBjZWUgLSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfY2VlX2dldF9zdGF0c19pc3Ioc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCWNlZS0+Z2V0X3N0YXRzX3N0YXR1cyA9IHN0YXR1czsKKwliZmFfdHJjKGNlZSwgMCk7CisJaWYgKHN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJLyoKKwkJICogVGhlIHJlcXVlc3RlZCBkYXRhIGhhcyBiZWVuIGNvcGllZCB0byB0aGUgRE1BIGFyZWEsIHByb2Nlc3MKKwkJICogaXQuCisJCSAqLworCQltZW1jcHkoY2VlLT5zdGF0cywgY2VlLT5zdGF0c19kbWEua3ZhLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfY2VlX3N0YXRzX3MpKTsKKwkJYmZhX2NlZV9mb3JtYXRfY2VlX3N0YXRzKGNlZS0+c3RhdHMpOworCX0KKwljZWUtPmdldF9zdGF0c19wZW5kaW5nID0gQkZBX0ZBTFNFOworCWJmYV90cmMoY2VlLCAwKTsKKwlpZiAoY2VlLT5jYmZuLmdldF9zdGF0c19jYmZuKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJY2VlLT5jYmZuLmdldF9zdGF0c19jYmZuKGNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JhcmcsIHN0YXR1cyk7CisJfQorCWJmYV90cmMoY2VlLCAwKTsKK30KKworLyoqCisgKiBiZmFfY2VlX2dldF9hdHRyX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gY2VlIC0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX2NlZV9yZXNldF9zdGF0c19pc3Ioc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCWNlZS0+cmVzZXRfc3RhdHNfc3RhdHVzID0gc3RhdHVzOworCWNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwlpZiAoY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiZm4pCisJCWNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmZuKGNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmFyZywgc3RhdHVzKTsKK30KKworLyoqCisgKiBiZmFfY2VlX21lbWluZm8oKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHZvaWQKKyAqCisgKiBAcmV0dXJuIFNpemUgb2YgRE1BIHJlZ2lvbgorICovCit1MzIKK2JmYV9jZWVfbWVtaW5mbyh2b2lkKQoreworCXJldHVybiAoYmZhX2NlZV9hdHRyX21lbWluZm8oKSArIGJmYV9jZWVfc3RhdHNfbWVtaW5mbygpKTsKK30KKworLyoqCisgKiBiZmFfY2VlX21lbV9jbGFpbSgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gY2VlIENFRSBtb2R1bGUgcG9pbnRlcgorICogCSAgICAgIGRtYV9rdmEgS2VybmVsIFZpcnR1YWwgQWRkcmVzcyBvZiBDRUUgRE1BIE1lbW9yeQorICogCSAgICAgIGRtYV9wYSAgUGh5c2ljYWwgQWRkcmVzcyBvZiBDRUUgRE1BIE1lbW9yeQorICoKKyAqIEByZXR1cm4gdm9pZAorICovCit2b2lkCitiZmFfY2VlX21lbV9jbGFpbShzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIHU4ICpkbWFfa3ZhLCB1NjQgZG1hX3BhKQoreworCWNlZS0+YXR0cl9kbWEua3ZhID0gZG1hX2t2YTsKKwljZWUtPmF0dHJfZG1hLnBhID0gZG1hX3BhOworCWNlZS0+c3RhdHNfZG1hLmt2YSA9IGRtYV9rdmEgKyBiZmFfY2VlX2F0dHJfbWVtaW5mbygpOworCWNlZS0+c3RhdHNfZG1hLnBhID0gZG1hX3BhICsgYmZhX2NlZV9hdHRyX21lbWluZm8oKTsKKwljZWUtPmF0dHIgPSAoc3RydWN0IGJmYV9jZWVfYXR0cl9zICopZG1hX2t2YTsKKwljZWUtPnN0YXRzID0KKwkJKHN0cnVjdCBiZmFfY2VlX3N0YXRzX3MgKikoZG1hX2t2YSArIGJmYV9jZWVfYXR0cl9tZW1pbmZvKCkpOworfQorCisvKioKKyAqIGJmYV9jZWVfZ2V0X2F0dHIoKQorICoKKyAqICAgU2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgZi93IHRvIGZldGNoIENFRSBhdHRyaWJ1dGVzLgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCisKK2JmYV9zdGF0dXNfdAorYmZhX2NlZV9nZXRfYXR0cihzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIHN0cnVjdCBiZmFfY2VlX2F0dHJfcyAqYXR0ciwKKwkJIGJmYV9jZWVfZ2V0X2F0dHJfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfY2VlX2dldF9yZXFfcyAqY21kOworCisJYmZhX2Fzc2VydCgoY2VlICE9IE5VTEwpICYmIChjZWUtPmlvYyAhPSBOVUxMKSk7CisJYmZhX3RyYyhjZWUsIDApOworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChjZWUtPmlvYykpIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisJaWYgKGNlZS0+Z2V0X2F0dHJfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCWNlZS0+Z2V0X2F0dHJfcGVuZGluZyA9IEJGQV9UUlVFOworCWNtZCA9IChzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgKiljZWUtPmdldF9jZmdfbWIubXNnOworCWNlZS0+YXR0ciA9IGF0dHI7CisJY2VlLT5jYmZuLmdldF9hdHRyX2NiZm4gPSBjYmZuOworCWNlZS0+Y2Jmbi5nZXRfYXR0cl9jYmFyZyA9IGNiYXJnOworCWJmaV9oMmlfc2V0KGNtZC0+bWgsIEJGSV9NQ19DRUUsIEJGSV9DRUVfSDJJX0dFVF9DRkdfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQoY2VlLT5pb2MpKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KGNtZC0+ZG1hX2FkZHIsIGNlZS0+YXR0cl9kbWEucGEpOworCWJmYV9pb2NfbWJveF9xdWV1ZShjZWUtPmlvYywgJmNlZS0+Z2V0X2NmZ19tYik7CisJYmZhX3RyYyhjZWUsIDApOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX2NlZV9nZXRfc3RhdHMoKQorICoKKyAqICAgU2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgZi93IHRvIGZldGNoIENFRSBzdGF0aXN0aWNzLgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCisKK2JmYV9zdGF0dXNfdAorYmZhX2NlZV9nZXRfc3RhdHMoc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zICpzdGF0cywKKwkJICBiZmFfY2VlX2dldF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmaV9jZWVfZ2V0X3JlcV9zICpjbWQ7CisKKwliZmFfYXNzZXJ0KChjZWUgIT0gTlVMTCkgJiYgKGNlZS0+aW9jICE9IE5VTEwpKTsKKworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChjZWUtPmlvYykpIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisJaWYgKGNlZS0+Z2V0X3N0YXRzX3BlbmRpbmcgPT0gQkZBX1RSVUUpIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCX0KKwljZWUtPmdldF9zdGF0c19wZW5kaW5nID0gQkZBX1RSVUU7CisJY21kID0gKHN0cnVjdCBiZmlfY2VlX2dldF9yZXFfcyAqKWNlZS0+Z2V0X3N0YXRzX21iLm1zZzsKKwljZWUtPnN0YXRzID0gc3RhdHM7CisJY2VlLT5jYmZuLmdldF9zdGF0c19jYmZuID0gY2JmbjsKKwljZWUtPmNiZm4uZ2V0X3N0YXRzX2NiYXJnID0gY2Jhcmc7CisJYmZpX2gyaV9zZXQoY21kLT5taCwgQkZJX01DX0NFRSwgQkZJX0NFRV9IMklfR0VUX1NUQVRTX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGNlZS0+aW9jKSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChjbWQtPmRtYV9hZGRyLCBjZWUtPnN0YXRzX2RtYS5wYSk7CisJYmZhX2lvY19tYm94X3F1ZXVlKGNlZS0+aW9jLCAmY2VlLT5nZXRfc3RhdHNfbWIpOworCWJmYV90cmMoY2VlLCAwKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9jZWVfcmVzZXRfc3RhdHMoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworCitiZmFfc3RhdHVzX3QKK2JmYV9jZWVfcmVzZXRfc3RhdHMoc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBiZmFfY2VlX3Jlc2V0X3N0YXRzX2NiZm5fdCBjYmZuLAorCQkgICAgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmaV9jZWVfcmVzZXRfc3RhdHNfcyAqY21kOworCisJYmZhX2Fzc2VydCgoY2VlICE9IE5VTEwpICYmIChjZWUtPmlvYyAhPSBOVUxMKSk7CisJaWYgKCFiZmFfaW9jX2lzX29wZXJhdGlvbmFsKGNlZS0+aW9jKSkgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKwlpZiAoY2VlLT5yZXNldF9zdGF0c19wZW5kaW5nID09IEJGQV9UUlVFKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisJY2VlLT5yZXNldF9zdGF0c19wZW5kaW5nID0gQkZBX1RSVUU7CisJY21kID0gKHN0cnVjdCBiZmlfY2VlX3Jlc2V0X3N0YXRzX3MgKiljZWUtPnJlc2V0X3N0YXRzX21iLm1zZzsKKwljZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JmbiA9IGNiZm47CisJY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiYXJnID0gY2Jhcmc7CisJYmZpX2gyaV9zZXQoY21kLT5taCwgQkZJX01DX0NFRSwgQkZJX0NFRV9IMklfUkVTRVRfU1RBVFMsCisJCSAgICBiZmFfaW9jX3BvcnRpZChjZWUtPmlvYykpOworCWJmYV9pb2NfbWJveF9xdWV1ZShjZWUtPmlvYywgJmNlZS0+cmVzZXRfc3RhdHNfbWIpOworCWJmYV90cmMoY2VlLCAwKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfY2VlX2lzcnMoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiB2b2lkCisgKi8KKwordm9pZAorYmZhX2NlZV9pc3Iodm9pZCAqY2JhcmcsIHN0cnVjdCBiZmlfbWJtc2dfcyAqbSkKK3sKKwl1bmlvbiBiZmlfY2VlX2kyaF9tc2dfdSAqbXNnOworCXN0cnVjdCBiZmlfY2VlX2dldF9yc3BfcyAqZ2V0X3JzcDsKKwlzdHJ1Y3QgYmZhX2NlZV9zICpjZWUgPSAoc3RydWN0IGJmYV9jZWVfcyAqKWNiYXJnOworCW1zZyA9ICh1bmlvbiBiZmlfY2VlX2kyaF9tc2dfdSAqKW07CisJZ2V0X3JzcCA9IChzdHJ1Y3QgYmZpX2NlZV9nZXRfcnNwX3MgKiltOworCWJmYV90cmMoY2VlLCBtc2ctPm1oLm1zZ19pZCk7CisJc3dpdGNoIChtc2ctPm1oLm1zZ19pZCkgeworCWNhc2UgQkZJX0NFRV9JMkhfR0VUX0NGR19SU1A6CisJCWJmYV90cmMoY2VlLCBnZXRfcnNwLT5jbWRfc3RhdHVzKTsKKwkJYmZhX2NlZV9nZXRfYXR0cl9pc3IoY2VlLCBnZXRfcnNwLT5jbWRfc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBCRklfQ0VFX0kySF9HRVRfU1RBVFNfUlNQOgorCQliZmFfY2VlX2dldF9zdGF0c19pc3IoY2VlLCBnZXRfcnNwLT5jbWRfc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBCRklfQ0VFX0kySF9SRVNFVF9TVEFUU19SU1A6CisJCWJmYV9jZWVfcmVzZXRfc3RhdHNfaXNyKGNlZSwgZ2V0X3JzcC0+Y21kX3N0YXR1cyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGJmYV9jZWVfaGJmYWlsKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gdm9pZAorICovCisKK3ZvaWQKK2JmYV9jZWVfaGJmYWlsKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2NlZV9zICpjZWU7CisJY2VlID0gKHN0cnVjdCBiZmFfY2VlX3MgKilhcmc7CisKKwlpZiAoY2VlLT5nZXRfYXR0cl9wZW5kaW5nID09IEJGQV9UUlVFKSB7CisJCWNlZS0+Z2V0X2F0dHJfc3RhdHVzID0gQkZBX1NUQVRVU19GQUlMRUQ7CisJCWNlZS0+Z2V0X2F0dHJfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwkJaWYgKGNlZS0+Y2Jmbi5nZXRfYXR0cl9jYmZuKSB7CisJCQljZWUtPmNiZm4uZ2V0X2F0dHJfY2JmbihjZWUtPmNiZm4uZ2V0X2F0dHJfY2JhcmcsCisJCQkJCQlCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCX0KKwl9CisJaWYgKGNlZS0+Z2V0X3N0YXRzX3BlbmRpbmcgPT0gQkZBX1RSVUUpIHsKKwkJY2VlLT5nZXRfc3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19GQUlMRUQ7CisJCWNlZS0+Z2V0X3N0YXRzX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJCWlmIChjZWUtPmNiZm4uZ2V0X3N0YXRzX2NiZm4pIHsKKwkJCWNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbihjZWUtPmNiZm4uZ2V0X3N0YXRzX2NiYXJnLAorCQkJCQkJIEJGQV9TVEFUVVNfRkFJTEVEKTsKKwkJfQorCX0KKwlpZiAoY2VlLT5yZXNldF9zdGF0c19wZW5kaW5nID09IEJGQV9UUlVFKSB7CisJCWNlZS0+cmVzZXRfc3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19GQUlMRUQ7CisJCWNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwkJaWYgKGNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmZuKSB7CisJCQljZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JmbihjZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JhcmcsCisJCQkJCQkgICBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCX0KKwl9Cit9CisKKy8qKgorICogYmZhX2NlZV9hdHRhY2goKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSAtIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgaW9jIC0gUG9pbnRlciB0byB0aGUgaW9jIG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICBkZXYgLSBQb2ludGVyIHRvIHRoZSBkZXZpY2UgZHJpdmVyIG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICAgICAgICBUaGUgZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBtYm94IElTUiBmdW5jdGlvbnMgaGF2ZQorICogICAgICAgICAgICAgICAgICB0aGlzIHBvaW50ZXIgYXMgb25lIG9mIHRoZSBwYXJhbWV0ZXJzLgorICogICAgICAgICAgICB0cmNtb2QgLQorICogICAgICAgICAgICBsb2dtb2QgLQorICoKKyAqIEByZXR1cm4gdm9pZAorICovCit2b2lkCitiZmFfY2VlX2F0dGFjaChzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGV2LAorCSAgICAgICBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLCBzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKQoreworCWJmYV9hc3NlcnQoY2VlICE9IE5VTEwpOworCWNlZS0+ZGV2ID0gZGV2OworCWNlZS0+dHJjbW9kID0gdHJjbW9kOworCWNlZS0+bG9nbW9kID0gbG9nbW9kOworCWNlZS0+aW9jID0gaW9jOworCisJYmZhX2lvY19tYm94X3JlZ2lzcihjZWUtPmlvYywgQkZJX01DX0NFRSwgYmZhX2NlZV9pc3IsIGNlZSk7CisJYmZhX2lvY19oYmZhaWxfaW5pdCgmY2VlLT5oYmZhaWwsIGJmYV9jZWVfaGJmYWlsLCBjZWUpOworCWJmYV9pb2NfaGJmYWlsX3JlZ2lzdGVyKGNlZS0+aW9jLCAmY2VlLT5oYmZhaWwpOworCWJmYV90cmMoY2VlLCAwKTsKK30KKworLyoqCisgKiBiZmFfY2VlX2RldGFjaCgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gY2VlIC0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICoKKyAqIEByZXR1cm4gdm9pZAorICovCit2b2lkCitiZmFfY2VlX2RldGFjaChzdHJ1Y3QgYmZhX2NlZV9zICpjZWUpCit7CisJLyoKKwkgKiBGb3Igbm93LCBqdXN0IGNoZWNrIGlmIHRoZXJlIGlzIHNvbWUgaW9jdGwgcGVuZGluZyBhbmQgbWFyayB0aGF0IGFzCisJICogZmFpbGVkPworCSAqLworCS8qIGJmYV9jZWVfaGJmYWlsKGNlZSk7ICovCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlMmQxMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYwpAQCAtMCwwICsxLDQwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wY2kuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmFfaW9jZmMuaD4KKworI2RlZmluZSBERUZfQ0ZHX05VTV9GQUJSSUNTICAgICAgICAgMQorI2RlZmluZSBERUZfQ0ZHX05VTV9MUE9SVFMgICAgICAgICAgMjU2CisjZGVmaW5lIERFRl9DRkdfTlVNX0NRUyAgICAgICAgICAgICA0CisjZGVmaW5lIERFRl9DRkdfTlVNX0lPSU1fUkVRUyAgICAgICAoQkZBX0lPSU1fTUFYKQorI2RlZmluZSBERUZfQ0ZHX05VTV9UU0tJTV9SRVFTICAgICAgMTI4CisjZGVmaW5lIERFRl9DRkdfTlVNX0ZDWFBfUkVRUyAgICAgICA2NAorI2RlZmluZSBERUZfQ0ZHX05VTV9VRl9CVUZTICAgICAgICAgNjQKKyNkZWZpbmUgREVGX0NGR19OVU1fUlBPUlRTICAgICAgICAgIDEwMjQKKyNkZWZpbmUgREVGX0NGR19OVU1fSVROSU1TICAgICAgICAgIChERUZfQ0ZHX05VTV9SUE9SVFMpCisjZGVmaW5lIERFRl9DRkdfTlVNX1RJTlMgICAgICAgICAgICAyNTYKKworI2RlZmluZSBERUZfQ0ZHX05VTV9TR1BHUyAgICAgICAgICAgMjA0OAorI2RlZmluZSBERUZfQ0ZHX05VTV9SRVFRX0VMRU1TICAgICAgMjU2CisjZGVmaW5lIERFRl9DRkdfTlVNX1JTUFFfRUxFTVMgICAgICA2NAorI2RlZmluZSBERUZfQ0ZHX05VTV9TQk9PVF9UR1RTICAgICAgMTYKKyNkZWZpbmUgREVGX0NGR19OVU1fU0JPT1RfTFVOUyAgICAgIDE2CisKKy8qKgorICogVXNlIHRoaXMgZnVuY3Rpb24gcXVlcnkgdGhlIG1lbW9yeSByZXF1aXJlbWVudCBvZiB0aGUgQkZBIGxpYnJhcnkuCisgKiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgYmZhX2F0dGFjaCgpIHRvIGdldCB0aGUKKyAqIG1lbW9yeSByZXF1aXJlZCBvZiB0aGUgQkZBIGxheWVyIGZvciBhIGdpdmVuIGRyaXZlciBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgY2FsbCB3aWxsIGZhaWwsIGlmIHRoZSBjYXAgaXMgb3V0IG9mIHJhbmdlIGNvbXBhcmVkIHRvIHByZS1kZWZpbmVkCisgKiB2YWx1ZXMgd2l0aGluIHRoZSBCRkEgbGlicmFyeQorICoKKyAqIEBwYXJhbVtpbl0gY2ZnIC0gCXBvaW50ZXIgdG8gYmZhX2lvY19jZmdfdC4gRHJpdmVyIGxheWVyIHNob3VsZCBpbmRpY2F0ZQorICogCQkJaXRzIGNvbmZpZ3VyYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUuCisgKgkJCVRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igc3RydWN0IGJmYV9pb2NmY19jZmdfcyBjYW4gYmUKKyAqCQkJZmV0Y2hlZCB1c2luZyBiZmFfY2ZnX2dldF9kZWZhdWx0KCkgQVBJLgorICoKKyAqIAkJCUlmIGNhcCdzIGJvdW5kYXJ5IGNoZWNrIGZhaWxzLCB0aGUgbGlicmFyeSB3aWxsIHVzZQorICoJCQl0aGUgZGVmYXVsdCBiZmFfY2FwX3QgdmFsdWVzIChhbmQgbG9nIGEgd2FybmluZyBtc2cpLgorICoKKyAqIEBwYXJhbVtvdXRdIG1lbWluZm8gLSBwb2ludGVyIHRvIGJmYV9tZW1pbmZvX3QuIFRoaXMgY29udGVudAorICogCQkJaW5kaWNhdGVzIHRoZSBtZW1vcnkgdHlwZSAoc2VlIGJmYV9tZW1fdHlwZV90KSBhbmQKKyAqCQkJYW1vdW50IG9mIG1lbW9yeSByZXF1aXJlZC4KKyAqCisgKgkJCURyaXZlciBzaG91bGQgYWxsb2NhdGUgdGhlIG1lbW9yeSwgcG9wdWxhdGUgdGhlCisgKgkJCXN0YXJ0aW5nIGFkZHJlc3MgZm9yIGVhY2ggYmxvY2sgYW5kIHByb3ZpZGUgdGhlIHNhbWUKKyAqCQkJc3RydWN0dXJlIGFzIGlucHV0IHBhcmFtZXRlciB0byBiZmFfYXR0YWNoKCkgY2FsbC4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqCisgKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOiBAbm90ZQorICovCit2b2lkCitiZmFfY2ZnX2dldF9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8pCit7CisJaW50ICAgICAgICAgICAgIGk7CisJdTMyICAgICAgICBrbV9sZW4gPSAwLCBkbV9sZW4gPSAwOworCisJYmZhX2Fzc2VydCgoY2ZnICE9IE5VTEwpICYmIChtZW1pbmZvICE9IE5VTEwpKTsKKworCWJmYV9vc19tZW1zZXQoKHZvaWQgKiltZW1pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9tZW1pbmZvX3MpKTsKKwltZW1pbmZvLT5tZW1pbmZvW0JGQV9NRU1fVFlQRV9LVkEgLSAxXS5tZW1fdHlwZSA9CisJCUJGQV9NRU1fVFlQRV9LVkE7CisJbWVtaW5mby0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfRE1BIC0gMV0ubWVtX3R5cGUgPQorCQlCRkFfTUVNX1RZUEVfRE1BOworCisJYmZhX2lvY2ZjX21lbWluZm8oY2ZnLCAma21fbGVuLCAmZG1fbGVuKTsKKworCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCisJCWhhbF9tb2RzW2ldLT5tZW1pbmZvKGNmZywgJmttX2xlbiwgJmRtX2xlbik7CisKKworCW1lbWluZm8tPm1lbWluZm9bQkZBX01FTV9UWVBFX0tWQSAtIDFdLm1lbV9sZW4gPSBrbV9sZW47CisJbWVtaW5mby0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfRE1BIC0gMV0ubWVtX2xlbiA9IGRtX2xlbjsKK30KKworLyoqCisgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBkbyBhdHRhY2ggdGhlIGRyaXZlciBpbnN0YW5jZSB3aXRoIHRoZSBCRkEKKyAqIGxpYnJhcnkuIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdHJpZ2dlciBhbnkgSFcgaW5pdGlhbGl6YXRpb24KKyAqIHByb2Nlc3MgKHdoaWNoIHdpbGwgYmUgZG9uZSBpbiBiZmFfaW5pdCgpIGNhbGwpCisgKgorICogVGhpcyBjYWxsIHdpbGwgZmFpbCwgaWYgdGhlIGNhcCBpcyBvdXQgb2YgcmFuZ2UgY29tcGFyZWQgdG8KKyAqIHByZS1kZWZpbmVkIHZhbHVlcyB3aXRoaW4gdGhlIEJGQSBsaWJyYXJ5CisgKgorICogQHBhcmFtW291dF0JYmZhCVBvaW50ZXIgdG8gYmZhX3QuCisgKiBAcGFyYW1baW5dCWJmYWQgCU9wYXF1ZSBoYW5kbGUgYmFjayB0byB0aGUgZHJpdmVyJ3MgSU9DIHN0cnVjdHVyZQorICogQHBhcmFtW2luXQljZmcJUG9pbnRlciB0byBiZmFfaW9jX2NmZ190LiBTaG91bGQgYmUgc2FtZSBzdHJ1Y3R1cmUKKyAqIAkJCXRoYXQgd2FzIHVzZWQgaW4gYmZhX2NmZ19nZXRfbWVtaW5mbygpLgorICogQHBhcmFtW2luXSAJbWVtaW5mbyBQb2ludGVyIHRvIGJmYV9tZW1pbmZvX3QuIFRoZSBkcml2ZXIgc2hvdWxkCisgKiAJCQl1c2UgdGhlIGJmYV9jZmdfZ2V0X21lbWluZm8oKSBjYWxsIHRvCisgKiAJCQlmaW5kIHRoZSBtZW1vcnkgYmxvY2tzIHJlcXVpcmVkLCBhbGxvY2F0ZSB0aGUKKyAqIAkJCXJlcXVpcmVkIG1lbW9yeSBhbmQgcHJvdmlkZSB0aGUgc3RhcnRpbmcgYWRkcmVzc2VzLgorICogQHBhcmFtW2luXSAJcGNpZGV2CXBvaW50ZXIgdG8gc3RydWN0IGJmYV9wY2lkZXZfcworICoKKyAqIEByZXR1cm4KKyAqIHZvaWQKKyAqCisgKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIEBub3RlCisgKgorICovCit2b2lkCitiZmFfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJICAgICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9tZW1fZWxlbV9zICptZWxlbTsKKworCWJmYS0+ZmNzID0gQkZBX0ZBTFNFOworCisJYmZhX2Fzc2VydCgoY2ZnICE9IE5VTEwpICYmIChtZW1pbmZvICE9IE5VTEwpKTsKKworCS8qKgorCSAqIGluaXRpYWxpemUgYWxsIG1lbW9yeSBwb2ludGVycyBmb3IgaXRlcmF0aXZlIGFsbG9jYXRpb24KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQkZBX01FTV9UWVBFX01BWDsgaSsrKSB7CisJCW1lbGVtID0gbWVtaW5mby0+bWVtaW5mbyArIGk7CisJCW1lbGVtLT5rdmFfY3VycCA9IG1lbGVtLT5rdmE7CisJCW1lbGVtLT5kbWFfY3VycCA9IG1lbGVtLT5kbWE7CisJfQorCisJYmZhX2lvY2ZjX2F0dGFjaChiZmEsIGJmYWQsIGNmZywgbWVtaW5mbywgcGNpZGV2KTsKKworCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCisJCWhhbF9tb2RzW2ldLT5hdHRhY2goYmZhLCBiZmFkLCBjZmcsIG1lbWluZm8sIHBjaWRldik7CisKK30KKworLyoqCisgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBkZWxldGUgYSBCRkEgSU9DLiBJT0Mgc2hvdWxkIGJlIHN0b3BwZWQgKGJ5CisgKiBjYWxsaW5nIGJmYV9zdG9wKCkpIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgKgorICogQHBhcmFtW2luXSBiZmEgLSBwb2ludGVyIHRvIGJmYV90LgorICoKKyAqIEByZXR1cm4KKyAqIHZvaWQKKyAqCisgKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIEBub3RlCisgKi8KK3ZvaWQKK2JmYV9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50CWk7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+ZGV0YWNoKGJmYSk7CisKKwliZmFfaW9jZmNfZGV0YWNoKGJmYSk7Cit9CisKKwordm9pZAorYmZhX2luaXRfdHJjKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kKQoreworCWJmYS0+dHJjbW9kID0gdHJjbW9kOworfQorCisKK3ZvaWQKK2JmYV9pbml0X2xvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCkKK3sKKwliZmEtPmxvZ20gPSBsb2dtb2Q7Cit9CisKKwordm9pZAorYmZhX2luaXRfYWVuKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2Flbl9zICphZW4pCit7CisJYmZhLT5hZW4gPSBhZW47Cit9CisKK3ZvaWQKK2JmYV9pbml0X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKQoreworCWJmYS0+cGxvZyA9IHBsb2c7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBJT0MuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpbW1lZGlhdGVseSwgd2hlbiB0aGUgSU9DIGluaXRpYWxpemF0aW9uIGlzCisgKiBjb21wbGV0ZWQsIHRoZSBiZmFfY2JfaW5pdCgpIHdpbGwgYmUgY2FsbGVkLgorICoKKyAqIEBwYXJhbVtpbl0JYmZhCWluc3RhbmNlCisgKgorICogQHJldHVybiB2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHRoZSBkcml2ZXIgc2hvdWxkIHJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgc2VydmljZQorICogcm91dGluZShzKSBhbmQgZW5hYmxlIHRoZSBkZXZpY2UgaW50ZXJydXB0cy4gSWYgdGhpcyBpcyBub3QgZG9uZSwKKyAqIGJmYV9jYl9pbml0KCkgd2lsbCBuZXZlciBnZXQgY2FsbGVkCisgKi8KK3ZvaWQKK2JmYV9pbml0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9pb2NmY19pbml0KGJmYSk7Cit9CisKKy8qKgorICogVXNlIHRoaXMgZnVuY3Rpb24gaW5pdGlhdGUgdGhlIElPQyBjb25maWd1cmF0aW9uIHNldHVwLiBUaGlzIGZ1bmN0aW9uCisgKiB3aWxsIHJldHVybiBpbW1lZGlhdGVseS4KKyAqCisgKiBAcGFyYW1baW5dCWJmYQlpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2lvY2ZjX3N0YXJ0KGJmYSk7Cit9CisKKy8qKgorICogVXNlIHRoaXMgZnVuY3Rpb24gcXVpZXNlIHRoZSBJT0MuIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaW1tZWRpYXRlbHksCisgKiB3aGVuIHRoZSBJT0MgaXMgYWN0dWFsbHkgc3RvcHBlZCwgdGhlIGJmYV9jYl9zdG9wKCkgd2lsbCBiZSBjYWxsZWQuCisgKgorICogQHBhcmFtW2luXSAJYmZhIC0gcG9pbnRlciB0byBiZmFfdC4KKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqCisgKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICogYmZhX2NiX3N0b3AoKSBjb3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9yIGFmdGVyIGJmYV9zdG9wKCkgcmV0dXJucy4KKyAqCisgKiBAbm90ZQorICogSW4gY2FzZSBvZiBhbnkgZmFpbHVyZSwgd2UgY291bGQgaGFuZGxlIGl0IGF1dG9tYXRpY2FsbHkgYnkgZG9pbmcgYQorICogcmVzZXQgYW5kIHRoZW4gc3VjY2VlZCB0aGUgYmZhX3N0b3AoKSBjYWxsLgorICovCit2b2lkCitiZmFfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfaW9jZmNfc3RvcChiZmEpOworfQorCit2b2lkCitiZmFfY29tcF9kZXEoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKmNvbXBfcSkKK3sKKwlJTklUX0xJU1RfSEVBRChjb21wX3EpOworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYmZhLT5jb21wX3EsIGNvbXBfcSk7Cit9CisKK3ZvaWQKK2JmYV9jb21wX3Byb2Nlc3Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKmNvbXBfcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWU7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlbjsKKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgICAqaGNiX3FlOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sIGNvbXBfcSkgeworCQloY2JfcWUgPSAoc3RydWN0IGJmYV9jYl9xZV9zICopIHFlOworCQloY2JfcWUtPmNiZm4oaGNiX3FlLT5jYmFyZywgQkZBX1RSVUUpOworCX0KK30KKwordm9pZAorYmZhX2NvbXBfZnJlZShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqY29tcF9xKQoreworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZTsKKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgICAqaGNiX3FlOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KGNvbXBfcSkpIHsKKwkJYmZhX3FfZGVxKGNvbXBfcSwgJnFlKTsKKwkJaGNiX3FlID0gKHN0cnVjdCBiZmFfY2JfcWVfcyAqKSBxZTsKKwkJaGNiX3FlLT5jYmZuKGhjYl9xZS0+Y2JhcmcsIEJGQV9GQUxTRSk7CisJfQorfQorCit2b2lkCitiZmFfYXR0YWNoX2ZjcyhzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmEtPmZjcyA9IEJGQV9UUlVFOworfQorCisvKioKKyAqIFBlcmlvZGljIHRpbWVyIGhlYXJ0IGJlYXQgZnJvbSBkcml2ZXIKKyAqLwordm9pZAorYmZhX3RpbWVyX3RpY2soc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3RpbWVyX2JlYXQoJmJmYS0+dGltZXJfbW9kKTsKK30KKworI2lmbmRlZiBCRkFfQklPU19CVUlMRAorLyoqCisgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgUENJIHZlbmRvci9kZXZpY2UgaWQgbGlzdHMgc3VwcG9ydGVkIGJ5IHRoaXMKKyAqIEJGQSBpbnN0YW5jZS4KKyAqLwordm9pZAorYmZhX2dldF9wY2lpZHMoc3RydWN0IGJmYV9wY2lpZF9zICoqcGNpaWRzLCBpbnQgKm5wY2lpZHMpCit7CisJc3RhdGljIHN0cnVjdCBiZmFfcGNpaWRfcyBfX3BjaWlkc1tdID0geworCQl7QkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwgQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcyUH0sCisJCXtCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLCBCRkFfUENJX0RFVklDRV9JRF9GQ184RzFQfSwKKwkJe0JGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsIEJGQV9QQ0lfREVWSUNFX0lEX0NUfSwKKwl9OworCisJKm5wY2lpZHMgPSBzaXplb2YoX19wY2lpZHMpIC8gc2l6ZW9mKF9fcGNpaWRzWzBdKTsKKwkqcGNpaWRzID0gX19wY2lpZHM7Cit9CisKKy8qKgorICogVXNlIHRoaXMgZnVuY3Rpb24gcXVlcnkgdGhlIGRlZmF1bHQgc3RydWN0IGJmYV9pb2NmY19jZmdfcyB2YWx1ZSAoY29tcGlsZWQKKyAqIGludG8gQkZBIGxheWVyKS4gVGhlIE9TIGRyaXZlciBjYW4gdGhlbiB0dXJuIGJhY2sgYW5kIG92ZXJ3cml0ZSBlbnRyaWVzIHRoYXQKKyAqIGhhdmUgYmVlbiBjb25maWd1cmVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIEBwYXJhbVtpbl0gY2ZnIC0gcG9pbnRlciB0byBiZmFfaW9jX2NmZ190CisgKgorICogQHJldHVybgorICoJdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKiAJbm90ZQorICovCit2b2lkCitiZmFfY2ZnX2dldF9kZWZhdWx0KHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZykKK3sKKwljZmctPmZ3Y2ZnLm51bV9mYWJyaWNzID0gREVGX0NGR19OVU1fRkFCUklDUzsKKwljZmctPmZ3Y2ZnLm51bV9scG9ydHMgPSBERUZfQ0ZHX05VTV9MUE9SVFM7CisJY2ZnLT5md2NmZy5udW1fcnBvcnRzID0gREVGX0NGR19OVU1fUlBPUlRTOworCWNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA9IERFRl9DRkdfTlVNX0lPSU1fUkVRUzsKKwljZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzID0gREVGX0NGR19OVU1fVFNLSU1fUkVRUzsKKwljZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXMgPSBERUZfQ0ZHX05VTV9GQ1hQX1JFUVM7CisJY2ZnLT5md2NmZy5udW1fdWZfYnVmcyA9IERFRl9DRkdfTlVNX1VGX0JVRlM7CisJY2ZnLT5md2NmZy5udW1fY3FzID0gREVGX0NGR19OVU1fQ1FTOworCisJY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXMgPSBERUZfQ0ZHX05VTV9SRVFRX0VMRU1TOworCWNmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zID0gREVGX0NGR19OVU1fUlNQUV9FTEVNUzsKKwljZmctPmRydmNmZy5udW1fc2dwZ3MgPSBERUZfQ0ZHX05VTV9TR1BHUzsKKwljZmctPmRydmNmZy5udW1fc2Jvb3RfdGd0cyA9IERFRl9DRkdfTlVNX1NCT09UX1RHVFM7CisJY2ZnLT5kcnZjZmcubnVtX3Nib290X2x1bnMgPSBERUZfQ0ZHX05VTV9TQk9PVF9MVU5TOworCWNmZy0+ZHJ2Y2ZnLnBhdGhfdG92ID0gQkZBX0ZDUElNX1BBVEhUT1ZfREVGOworCWNmZy0+ZHJ2Y2ZnLmlvY19yZWNvdmVyID0gQkZBX0ZBTFNFOworCWNmZy0+ZHJ2Y2ZnLmRlbGF5X2NvbXAgPSBCRkFfRkFMU0U7CisKK30KKwordm9pZAorYmZhX2NmZ19nZXRfbWluKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZykKK3sKKwliZmFfY2ZnX2dldF9kZWZhdWx0KGNmZyk7CisJY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzICAgPSBCRkFfSU9JTV9NSU47CisJY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyAgPSBCRkFfVFNLSU1fTUlOOworCWNmZy0+ZndjZmcubnVtX2ZjeHBfcmVxcyAgID0gQkZBX0ZDWFBfTUlOOworCWNmZy0+ZndjZmcubnVtX3VmX2J1ZnMgICAgID0gQkZBX1VGX01JTjsKKwljZmctPmZ3Y2ZnLm51bV9ycG9ydHMgICAgICA9IEJGQV9SUE9SVF9NSU47CisKKwljZmctPmRydmNmZy5udW1fc2dwZ3MgICAgICA9IEJGQV9TR1BHX01JTjsKKwljZmctPmRydmNmZy5udW1fcmVxcV9lbGVtcyA9IEJGQV9SRVFRX05FTEVNU19NSU47CisJY2ZnLT5kcnZjZmcubnVtX3JzcHFfZWxlbXMgPSBCRkFfUlNQUV9ORUxFTVNfTUlOOworCWNmZy0+ZHJ2Y2ZnLm1pbl9jZmcgICAgICAgID0gQkZBX1RSVUU7Cit9CisKK3ZvaWQKK2JmYV9nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NfYXR0cl9zICppb2NfYXR0cikKK3sKKwliZmFfaW9jX2dldF9hdHRyKCZiZmEtPmlvYywgaW9jX2F0dHIpOworfQorCisvKioKKyAqIFJldHJpZXZlIGZpcm13YXJlIHRyYWNlIGluZm9ybWF0aW9uIG9uIElPQyBmYWlsdXJlLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9kZWJ1Z19md3NhdmUoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnRyY2RhdGEsIGludCAqdHJjbGVuKQoreworCXJldHVybiBiZmFfaW9jX2RlYnVnX2Z3c2F2ZSgmYmZhLT5pb2MsIHRyY2RhdGEsIHRyY2xlbik7Cit9CisKKy8qKgorICogCQlGZXRjaCBmaXJtd2FyZSB0cmFjZSBkYXRhLgorICoKKyAqIEBwYXJhbVtpbl0JCWJmYQkJCUJGQSBpbnN0YW5jZQorICogQHBhcmFtW291dF0JCXRyY2RhdGEJCUZpcm13YXJlIHRyYWNlIGJ1ZmZlcgorICogQHBhcmFtW2luLG91dF0JdHJjbGVuCQlGaXJtd2FyZSB0cmFjZSBidWZmZXIgbGVuCisgKgorICogQHJldHZhbCBCRkFfU1RBVFVTX09LCQkJRmlybXdhcmUgdHJhY2UgaXMgZmV0Y2hlZC4KKyAqIEByZXR2YWwgQkZBX1NUQVRVU19JTlBST0dSRVNTCUZpcm13YXJlIHRyYWNlIGZldGNoIGlzIGluIHByb2dyZXNzLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9kZWJ1Z19md3RyYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqdHJjZGF0YSwgaW50ICp0cmNsZW4pCit7CisJcmV0dXJuIGJmYV9pb2NfZGVidWdfZnd0cmMoJmJmYS0+aW9jLCB0cmNkYXRhLCB0cmNsZW4pOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jc2RlYnVnLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jc2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI3MWQzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NzZGVidWcuYwpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19oYWwuaD4KKworLyoqCisgKiAgY3NfZGVidWdfYXBpCisgKi8KKworCit2b2lkCitiZmFfcGFuaWMoaW50IGxpbmUsIGNoYXIgKmZpbGUsIGNoYXIgKnBhbmljc3RyKQoreworCWJmYV9sb2coTlVMTCwgQkZBX0xPR19IQUxfQVNTRVJULCBmaWxlLCBsaW5lLCBwYW5pY3N0cik7CisJYmZhX29zX3BhbmljKCk7Cit9CisKK3ZvaWQKK2JmYV9zbV9wYW5pYyhzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbSwgaW50IGxpbmUsIGNoYXIgKmZpbGUsIGludCBldmVudCkKK3sKKwliZmFfbG9nKGxvZ20sIEJGQV9MT0dfSEFMX1NNX0FTU0VSVCwgZmlsZSwgbGluZSwgZXZlbnQpOworCWJmYV9vc19wYW5pYygpOworfQorCitpbnQKK2JmYV9xX2lzX29uX3FfZnVuYyhzdHJ1Y3QgbGlzdF9oZWFkICpxLCBzdHJ1Y3QgbGlzdF9oZWFkICpxZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqdHFlOworCisJdHFlID0gYmZhX3FfbmV4dChxKTsKKwl3aGlsZSAodHFlICE9IHEpIHsKKwkJaWYgKHRxZSA9PSBxZSkKKwkJCXJldHVybiAoMSk7CisJCXRxZSA9IGJmYV9xX25leHQodHFlKTsKKwkJaWYgKHRxZSA9PSBOVUxMKQorCQkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxYmFiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2hhbC5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBGQ1BJTSk7CitCRkFfTU9EVUxFKGZjcGltKTsKKworLyoqCisgKiAgaGFsX2ZjcGltX21vZCBCRkEgRkNQIEluaXRpYXRvciBNb2RlIG1vZHVsZQorICovCisKKy8qKgorICogCQlDb21wdXRlIGFuZCByZXR1cm4gbWVtb3J5IG5lZWRlZCBieSBGQ1AoaW0pIG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCXUzMiAqZG1fbGVuKQoreworCWJmYV9pdG5pbV9tZW1pbmZvKGNmZywga21fbGVuLCBkbV9sZW4pOworCisJLyoqCisJICogSU8gbWVtb3J5CisJICovCisJaWYgKGNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA8IEJGQV9JT0lNX01JTikKKwkJY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzID0gQkZBX0lPSU1fTUlOOworCWVsc2UgaWYgKGNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA+IEJGQV9JT0lNX01BWCkKKwkJY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzID0gQkZBX0lPSU1fTUFYOworCisJKmttX2xlbiArPSBjZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgKgorCSAgKHNpemVvZihzdHJ1Y3QgYmZhX2lvaW1fcykgKyBzaXplb2Yoc3RydWN0IGJmYV9pb2ltX3NwX3MpKTsKKworCSpkbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzICogQkZJX0lPSU1fU05TTEVOOworCisJLyoqCisJICogdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgbWVtb3J5CisJICovCisJaWYgKGNmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXMgPCBCRkFfVFNLSU1fTUlOKQorCQljZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzID0gQkZBX1RTS0lNX01JTjsKKwkqa21fbGVuICs9IGNmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXMgKiBzaXplb2Yoc3RydWN0IGJmYV90c2tpbV9zKTsKK30KKworCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgY2ZnLT5kcnZjZmcucGF0aF90b3YpOworCWJmYV90cmMoYmZhLCBjZmctPmZ3Y2ZnLm51bV9ycG9ydHMpOworCWJmYV90cmMoYmZhLCBjZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMpOworCWJmYV90cmMoYmZhLCBjZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzKTsKKworCWZjcGltLT5iZmEgICAgICAgICAgICA9IGJmYTsKKwlmY3BpbS0+bnVtX2l0bmltcyAgICAgPSBjZmctPmZ3Y2ZnLm51bV9ycG9ydHM7CisJZmNwaW0tPm51bV9pb2ltX3JlcXMgID0gY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzOworCWZjcGltLT5udW1fdHNraW1fcmVxcyA9IGNmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXM7CisJZmNwaW0tPnBhdGhfdG92ICAgICAgID0gY2ZnLT5kcnZjZmcucGF0aF90b3Y7CisJZmNwaW0tPmRlbGF5X2NvbXAJICA9IGNmZy0+ZHJ2Y2ZnLmRlbGF5X2NvbXA7CisKKwliZmFfaXRuaW1fYXR0YWNoKGZjcGltLCBtZW1pbmZvKTsKKwliZmFfdHNraW1fYXR0YWNoKGZjcGltLCBtZW1pbmZvKTsKKwliZmFfaW9pbV9hdHRhY2goZmNwaW0sIG1lbWluZm8pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKworCWJmYV9pb2ltX2RldGFjaChmY3BpbSk7CisJYmZhX3Rza2ltX2RldGFjaChmY3BpbSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1fc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1fc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZmY3BpbS0+aXRuaW1fcSkgeworCQlpdG5pbSA9IChzdHJ1Y3QgYmZhX2l0bmltX3MgKikgcWU7CisJCWJmYV9pdG5pbV9pb2NkaXNhYmxlKGl0bmltKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9mY3BpbV9wYXRoX3Rvdl9zZXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBwYXRoX3RvdikKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKworCWZjcGltLT5wYXRoX3RvdiA9IHBhdGhfdG92ICogMTAwMDsKKwlpZiAoZmNwaW0tPnBhdGhfdG92ID4gQkZBX0ZDUElNX1BBVEhUT1ZfTUFYKQorCQlmY3BpbS0+cGF0aF90b3YgPSBCRkFfRkNQSU1fUEFUSFRPVl9NQVg7Cit9CisKK3UxNgorYmZhX2ZjcGltX3BhdGhfdG92X2dldChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKworCXJldHVybiAoZmNwaW0tPnBhdGhfdG92IC8gMTAwMCk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2ZjcGltX2dldF9tb2RzdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3BpbV9zdGF0c19zICptb2RzdGF0cykKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKworCSptb2RzdGF0cyA9IGZjcGltLT5zdGF0czsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3BpbV9jbHJfbW9kc3RhdHMoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwltZW1zZXQoJmZjcGltLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmNwaW1fc3RhdHNfcykpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK3ZvaWQKK2JmYV9mY3BpbV9xZGVwdGhfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgcV9kZXB0aCkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKworCWJmYV9hc3NlcnQocV9kZXB0aCA8PSBCRkFfSU9DRkNfUURFUFRIX01BWCk7CisKKwlmY3BpbS0+cV9kZXB0aCA9IHFfZGVwdGg7Cit9CisKK3UxNgorYmZhX2ZjcGltX3FkZXB0aF9nZXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwlyZXR1cm4gKGZjcGltLT5xX2RlcHRoKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbV9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbV9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzMjA2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltX3ByaXYuaApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDUElNX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0ZDUElNX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxiZmFfZmNwaW0uaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2ZjcGltLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3djLmg+CisjaW5jbHVkZSAiYmZhX3NncGdfcHJpdi5oIgorCisjZGVmaW5lIEJGQV9JVE5JTV9NSU4gICAzMgorI2RlZmluZSBCRkFfSVROSU1fTUFYICAgMTAyNAorCisjZGVmaW5lIEJGQV9JT0lNX01JTiAgICA4CisjZGVmaW5lIEJGQV9JT0lNX01BWCAgICAyMDAwCisKKyNkZWZpbmUgQkZBX1RTS0lNX01JTiAgIDQKKyNkZWZpbmUgQkZBX1RTS0lNX01BWCAgIDUxMgorI2RlZmluZSBCRkFfRkNQSU1fUEFUSFRPVl9ERUYJKDMwICogMTAwMCkJLyogaW4gbWlsbGlzZWNzICovCisjZGVmaW5lIEJGQV9GQ1BJTV9QQVRIVE9WX01BWAkoOTAgKiAxMDAwKQkvKiBpbiBtaWxsaXNlY3MgKi8KKworI2RlZmluZSBiZmFfZmNwaW1fc3RhdHMoX19mY3BpbSwgX19zdGF0cykgICBcCisgICAgKF9fZmNwaW0pLT5zdGF0cy5fX3N0YXRzICsrCisKK3N0cnVjdCBiZmFfZmNwaW1fbW9kX3MgeworCXN0cnVjdCBiZmFfcyAJKmJmYTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgCSppdG5pbV9hcnI7CisJc3RydWN0IGJmYV9pb2ltX3MgCSppb2ltX2FycjsKKwlzdHJ1Y3QgYmZhX2lvaW1fc3BfcyAqaW9pbV9zcF9hcnI7CisJc3RydWN0IGJmYV90c2tpbV9zIAkqdHNraW1fYXJyOworCXN0cnVjdCBiZmFfZG1hX3MJc25zYmFzZTsKKwlpbnQJCQludW1faXRuaW1zOworCWludAkJCW51bV9pb2ltX3JlcXM7CisJaW50CQkJbnVtX3Rza2ltX3JlcXM7CisJdTMyCQlwYXRoX3RvdjsKKwl1MTYJCXFfZGVwdGg7CisJdTE2CQlyc3ZkOworCXN0cnVjdCBsaXN0X2hlYWQgCWl0bmltX3E7ICAgICAgICAvKiAgcXVldWUgb2YgYWN0aXZlIGl0bmltICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAJaW9pbV9mcmVlX3E7ICAgIC8qICBmcmVlIElPIHJlc291cmNlcyAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlpb2ltX3Jlc2ZyZWVfcTsgLyogIElPcyB3YWl0aW5nIGZvciBmL3cgICAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgCWlvaW1fY29tcF9xOyAgICAvKiAgSU8gZ2xvYmFsIGNvbXAgUSAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAJdHNraW1fZnJlZV9xOworCXUzMglpb3NfYWN0aXZlOwkvKiAgY3VycmVudCBhY3RpdmUgSU9zCSAgICAgICovCisJdTMyCWRlbGF5X2NvbXA7CisJc3RydWN0IGJmYV9mY3BpbV9zdGF0c19zIHN0YXRzOworfTsKKworc3RydWN0IGJmYV9pb2ltX3M7CitzdHJ1Y3QgYmZhX3Rza2ltX3M7CisKKy8qKgorICogQkZBIElPIChpbml0aWF0b3IgbW9kZSkKKyAqLworc3RydWN0IGJmYV9pb2ltX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgcWU7CQkvKiAgcXVldWUgZWxlbWVtdCAgICAgICAgICAgICovCisJYmZhX3NtX3QJCXNtOyAJLyogIEJGQSBpb2ltIHN0YXRlIG1hY2hpbmUgICAqLworCXN0cnVjdCBiZmFfcyAJICAgICAgICAqYmZhOwkvKiAgQkZBIG1vZHVsZSAgICAgICAgICAgICAgICovCisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcwkqZmNwaW07CS8qICBwYXJlbnQgZmNwaW0gbW9kdWxlICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2l0bmltX3MgCSppdG5pbTsJLyogIGktdC1uIG5leHVzIGZvciB0aGlzIElPICAqLworCXN0cnVjdCBiZmFkX2lvaW1fcyAJKmRpbzsJLyogIGRyaXZlciBJTyBoYW5kbGUgICAgICAgICAqLworCXUxNglpb3RhZzsJCS8qICBGV0kgSU8gdGFnICAgICAgICAgICAgICAgKi8KKwl1MTYJYWJvcnRfdGFnOwkvKiAgdW5xaXVlIGFib3J0IHJlcXVlc3QgdGFnICovCisJdTE2CW5zZ2VzOwkJLyogIG51bWJlciBvZiBTRyBlbGVtZW50cyAgICAqLworCXUxNgluc2dwZ3M7CQkvKiAgbnVtYmVyIG9mIFNHIHBhZ2VzICAgICAgICovCisJc3RydWN0IGJmYV9zZ3BnX3MgKnNncGc7CS8qICBmaXJzdCBTRyBwYWdlICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNncGdfcTsJCS8qICBhbGxvY2F0ZWQgU0cgcGFnZXMgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgaGNiX3FlOwkvKiAgYmZhIGNhbGxiYWNrIHFlbGVtICAgICAgICovCisJYmZhX2NiX2NiZm5fdCBpb19jYmZuOwkJLyogIElPIGNvbXBsZXRpb24gaGFuZGxlciAgICAqLworCXN0cnVjdCBiZmFfaW9pbV9zcF9zICppb3NwOwkvKiAgc2xvdy1wYXRoIElPIGhhbmRsaW5nICAgICovCit9OworCitzdHJ1Y3QgYmZhX2lvaW1fc3BfcyB7CisJc3RydWN0IGJmaV9tc2dfcyAJY29tcF9yc3Btc2c7CS8qICBJTyBjb21wIGYvdyByZXNwb25zZSAgICAgKi8KKwl1OAkJCSpzbnNpbmZvOwkvKiAgc2Vuc2UgaW5mbyBmb3IgdGhpcyBJTyAgICovCisJc3RydWN0IGJmYV9zZ3BnX3dxZV9zIHNncGdfd3FlOwkvKiAgd2FpdHEgZWxlbSBmb3Igc2dwZyAgICAgICovCisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcyByZXFxX3dhaXQ7CS8qICB0byB3YWl0IGZvciByb29tIGluIHJlcXEgKi8KKwliZmFfYm9vbGVhbl90CQlhYm9ydF9leHBsaWNpdDsJLyogIGFib3J0ZWQgYnkgT1MgICAgICAgICAgICAqLworCXN0cnVjdCBiZmFfdHNraW1fcwkqdHNraW07CQkvKiAgUmVsZXZhbnQgVE0gY21kICAgICAgICAgICovCit9OworCisvKioKKyAqIEJGQSBUYXNrIG1hbmFnZW1lbnQgY29tbWFuZCAoaW5pdGlhdG9yIG1vZGUpCisgKi8KK3N0cnVjdCBiZmFfdHNraW1fcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICBxZTsKKwliZmFfc21fdAkJc207CisJc3RydWN0IGJmYV9zICAgICAgICAgICAgKmJmYTsgICAgICAgIC8qICBCRkEgbW9kdWxlICAqLworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgICpmY3BpbTsgICAgICAvKiAgcGFyZW50IGZjcGltIG1vZHVsZSAgICAgICovCisJc3RydWN0IGJmYV9pdG5pbV9zICAgICAgKml0bmltOyAgICAgIC8qICBpLXQtbiBuZXh1cyBmb3IgdGhpcyBJTyAgKi8KKwlzdHJ1Y3QgYmZhZF90c2tpbV9zICAgICAgICAgKmR0c2s7ICAgLyogIGRyaXZlciB0YXNrIG1nbXQgY21uZCAgICAqLworCWJmYV9ib29sZWFuX3QgICAgICAgIG5vdGlmeTsgICAgICAgICAvKiAgbm90aWZ5IGl0bmltIG9uIFRNIGNvbXAgICovCisJbHVuX3QgICAgICAgICAgICAgICAgbHVuOyAgICAgICAgICAgIC8qICBsdW4gaWYgYXBwbGljYWJsZSAgICAgICAgKi8KKwllbnVtIGZjcF90bV9jbW5kICAgICAgICB0bV9jbW5kOyAgICAgLyogIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kICAqLworCXUxNiAgICAgICAgICAgICB0c2tfdGFnOyAgICAgICAgLyogIEZXSSBJTyB0YWcgICAgICAgICAgICAgICAqLworCXU4ICAgICAgICAgICAgICB0c2VjczsgICAgICAgICAgLyogIHRpbWVvdXQgaW4gc2Vjb25kcyAgICAgICAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgIHJlcXFfd2FpdDsgICAvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgaW9fcTsgICAgLyogIHF1ZXVlIG9mIGFmZmVjdGVkIElPcyAgICAqLworCXN0cnVjdCBiZmFfd2NfcyAgICAgICAgICAgICB3YzsgICAgICAvKiAgd2FpdGluZyBjb3VudGVyICAgICAgICAgICovCisJc3RydWN0IGJmYV9jYl9xZV9zCWhjYl9xZTsgICAgICAvKiAgYmZhIGNhbGxiYWNrIHFlbGVtICAgICAgICovCisJZW51bSBiZmlfdHNraW1fc3RhdHVzICAgdHNrX3N0YXR1czsgIC8qICBUTSBzdGF0dXMgICAgICAgICAgICAgICAgKi8KK307CisKKy8qKgorICogQkZBIGktdC1uIChpbml0aWF0b3IgbW9kZSkKKyAqLworc3RydWN0IGJmYV9pdG5pbV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgIHFlOwkJLyogIHF1ZXVlIGVsZW1lbnQgICAgICAgICAgICAgICAqLworCWJmYV9zbV90CSAgc207CQkvKiAgaS10LW4gaW0gQkZBIHN0YXRlIG1hY2hpbmUgICovCisJc3RydWN0IGJmYV9zICAgICAgKmJmYTsJCS8qICBiZmEgaW5zdGFuY2UgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0OwkvKiAgYmZhIHJwb3J0ICAgICAgICAgICAgICAgICAgICovCisJdm9pZCAgICAgICAgICAgKmRpdG47CQkvKiAgZHJpdmVyIGktdC1uIHN0cnVjdHVyZSAgICAgICovCisJc3RydWN0IGJmaV9taGRyX3MgICAgICBtaGRyOwkvKiAgcHJlLWJ1aWx0IG1oZHIgICAgICAgICAgICAgICovCisJdTggICAgICAgICBtc2dfbm87CQkvKiAgaXRuaW0vcnBvcnQgZmlybXdhcmUgaGFuZGxlICovCisJdTggICAgICAgICByZXFxOwkJLyogIENRIGZvciByZXF1ZXN0cyAgICAgICAgICAgICAqLworCXN0cnVjdCBiZmFfY2JfcWVfcyAgICBoY2JfcWU7CS8qICBiZmEgY2FsbGJhY2sgcWVsZW0gICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfcTsJLyogIHF1ZXVlIG9mIHBlbmRpbmcgSU8gcmVxdWVzdHMqLworCXN0cnVjdCBsaXN0X2hlYWQgaW9fcTsJCS8qICBxdWV1ZSBvZiBhY3RpdmUgSU8gcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGlvX2NsZWFudXBfcTsJLyogIElPIGJlaW5nIGNsZWFuZWQgdXAgICAgICAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgdHNrX3E7CQkvKiAgcXVldWUgb2YgYWN0aXZlIFRNIGNvbW1hbmRzICovCisJc3RydWN0IGxpc3RfaGVhZCAgZGVsYXlfY29tcF9xOy8qICBxdWV1ZSBvZiBmYWlsZWQgaW5mbGlnaHQgY21kcyAqLworCWJmYV9ib29sZWFuX3QgICBzZXFfcmVjOwkvKiAgU1FFUiBzdXBwb3J0ZWQgICAgICAgICAgICAgICovCisJYmZhX2Jvb2xlYW5fdCAgIGlzX29ubGluZTsJLyogIGl0bmltIGlzIE9OTElORSBmb3IgSU8gICAgICAqLworCWJmYV9ib29sZWFuX3QgICBpb3Rvdl9hY3RpdmU7CS8qICBJTyBUT1YgdGltZXIgaXMgYWN0aXZlCSAqLworCXN0cnVjdCBiZmFfd2NfcyAgICAgICAgd2M7CS8qICB3YWl0aW5nIGNvdW50ZXIgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CS8qICBwZW5kaW5nIElPIFRPVgkJICovCisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcyByZXFxX3dhaXQ7IC8qICB0byB3YWl0IGZvciByb29tIGluIHJlcXEgKi8KKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbTsJLyogIGZjcGltIG1vZHVsZSAgICAgICAgICAgICAgICAqLworCXN0cnVjdCBiZmFfaXRuaW1faGFsX3N0YXRzX3MJc3RhdHM7Cit9OworCisjZGVmaW5lIGJmYV9pdG5pbV9pc19vbmxpbmUoX2l0bmltKSAoX2l0bmltKS0+aXNfb25saW5lCisjZGVmaW5lIEJGQV9GQ1BJTV9NT0QoX2hhbCkgKCYoX2hhbCktPm1vZHVsZXMuZmNwaW1fbW9kKQorI2RlZmluZSBCRkFfSU9JTV9GUk9NX1RBRyhfZmNwaW0sIF9pb3RhZykJXAorCSgmZmNwaW0tPmlvaW1fYXJyW19pb3RhZ10pCisjZGVmaW5lIEJGQV9UU0tJTV9GUk9NX1RBRyhfZmNwaW0sIF90bXRhZykgICAgICAgICAgICAgICAgICBcCisgICAgKCZmY3BpbS0+dHNraW1fYXJyW190bXRhZyAmIChmY3BpbS0+bnVtX3Rza2ltX3JlcXMgLSAxKV0pCisKKy8qCisgKiBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfaW9pbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sCisJCQkJICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaW5mbyk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fZGV0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaW9pbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fZ29vZF9jb21wX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCQkJc3RydWN0IGJmaV9tc2dfcyAqbXNnKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaW9pbV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaW9pbV9jbGVhbnVwX3RtKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaW9pbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaW9pbV90b3Yoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworCit2b2lkICAgICAgICAgICAgYmZhX3Rza2ltX2F0dGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSwKKwkJCQkgICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaW5mbyk7Cit2b2lkICAgICAgICAgICAgYmZhX3Rza2ltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSk7Cit2b2lkICAgICAgICAgICAgYmZhX3Rza2ltX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKTsKK3ZvaWQgICAgICAgICAgICBiZmFfdHNraW1faW9kb25lKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9jbGVhbnVwKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOworCit2b2lkICAgICAgICAgICAgYmZhX2l0bmltX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJCQkgICAgICB1MzIgKmRtX2xlbik7Cit2b2lkICAgICAgICAgICAgYmZhX2l0bmltX2F0dGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSwKKwkJCQkgICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaW5mbyk7Cit2b2lkICAgICAgICAgICAgYmZhX2l0bmltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2l0bmltX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2l0bmltX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaXRuaW1faW9kb25lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV90c2tkb25lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworYmZhX2Jvb2xlYW5fdCAgIGJmYV9pdG5pbV9ob2xkX2lvKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworCisjZW5kaWYgLyogX19CRkFfRkNQSU1fUFJJVl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTI0MzU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwb3J0LmMKQEAgLTAsMCArMSwxNjcxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9wcG9ydC5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3Bsb2cuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9wb3J0Lmg+CisKK0JGQV9UUkNfRklMRShIQUwsIFBQT1JUKTsKK0JGQV9NT0RVTEUocHBvcnQpOworCisjZGVmaW5lIGJmYV9wcG9ydF9jYWxsYmFjayhfX3Bwb3J0LCBfX2V2ZW50KSBkbyB7CQkJXAorCWlmICgoX19wcG9ydCktPmJmYS0+ZmNzKSB7ICAgICAgXAorCQkoX19wcG9ydCktPmV2ZW50X2NiZm4oKF9fcHBvcnQpLT5ldmVudF9jYmFyZywgKF9fZXZlbnQpKTsgICAgICBcCisJfSBlbHNlIHsJCQkJCQkJXAorCQkoX19wcG9ydCktPmhjYl9ldmVudCA9IChfX2V2ZW50KTsgICAgICBcCisJCWJmYV9jYl9xdWV1ZSgoX19wcG9ydCktPmJmYSwgJihfX3Bwb3J0KS0+aGNiX3FlLAlcCisJCV9fYmZhX2NiX3BvcnRfZXZlbnQsIChfX3Bwb3J0KSk7ICAgICAgXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBUaGUgcG9ydCBpcyBjb25zaWRlcmVkIGRpc2FibGVkIGlmIGNvcnJlc3BvbmRpbmcgcGh5c2ljYWwgcG9ydCBvciBJT0MgYXJlCisgKiBkaXNhYmxlZCBleHBsaWNpdGx5CisgKi8KKyNkZWZpbmUgQkZBX1BPUlRfSVNfRElTQUJMRUQoYmZhKSBcCisJKChiZmFfcHBvcnRfaXNfZGlzYWJsZWQoYmZhKSA9PSBCRkFfVFJVRSkgfHwgXAorCShiZmFfaW9jX2lzX2Rpc2FibGVkKCZiZmEtPmlvYykgPT0gQkZBX1RSVUUpKQorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfcHBvcnRfc2VuZF9kaXNhYmxlKHN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3VwZGF0ZV9saW5raW5mbyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfcmVzZXRfbGlua2luZm8oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NldF93d25zKHN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfcG9ydF9ldmVudCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfcG9ydF9zdGF0cyh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfcG9ydF9zdGF0c19jbHIodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIGJmYV9wb3J0X3N0YXRzX3RpbWVvdXQodm9pZCAqY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9wb3J0X3N0YXRzX2Nscl90aW1lb3V0KHZvaWQgKmNiYXJnKTsKKworLyoqCisgKiAgYmZhX3Bwb3J0X3ByaXZhdGUKKyAqLworCisvKioKKyAqIEJGQSBwb3J0IHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IHsKKwlCRkFfUFBPUlRfU01fU1RBUlQgPSAxLAkvKiAgc3RhcnQgcG9ydCBzdGF0ZSBtYWNoaW5lICovCisJQkZBX1BQT1JUX1NNX1NUT1AgPSAyLAkvKiAgc3RvcCBwb3J0IHN0YXRlIG1hY2hpbmUgKi8KKwlCRkFfUFBPUlRfU01fRU5BQkxFID0gMywJLyogIGVuYWJsZSBwb3J0ICovCisJQkZBX1BQT1JUX1NNX0RJU0FCTEUgPSA0LAkvKiAgZGlzYWJsZSBwb3J0IHN0YXRlIG1hY2hpbmUgKi8KKwlCRkFfUFBPUlRfU01fRldSU1AgPSA1LAkvKiAgZmlybXdhcmUgZW5hYmxlL2Rpc2FibGUgcnNwICovCisJQkZBX1BQT1JUX1NNX0xJTktVUCA9IDYsCS8qICBmaXJtd2FyZSBsaW5rdXAgZXZlbnQgKi8KKwlCRkFfUFBPUlRfU01fTElOS0RPV04gPSA3LAkvKiAgZmlybXdhcmUgbGlua3VwIGRvd24gKi8KKwlCRkFfUFBPUlRfU01fUVJFU1VNRSA9IDgsCS8qICBDUSBzcGFjZSBhdmFpbGFibGUgKi8KKwlCRkFfUFBPUlRfU01fSFdGQUlMID0gOSwJLyogIElPQyBoL3cgZmFpbHVyZSAqLworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCQkgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9lbmFibGluZyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fbGlua2Rvd24oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2xpbmt1cChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCQkgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fZGlzYWJsZWQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX3N0b3BwZWQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21faW9jZG93bihzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9pb2NmYWlsKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgaGFsX3Bwb3J0X3NtX3RhYmxlW10gPSB7CisJe0JGQV9TTShiZmFfcHBvcnRfc21fdW5pbml0KSwgQkZBX1BQT1JUX1NUX1VOSU5JVH0sCisJe0JGQV9TTShiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQpLCBCRkFfUFBPUlRfU1RfRU5BQkxJTkdfUVdBSVR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKSwgQkZBX1BQT1JUX1NUX0VOQUJMSU5HfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9saW5rZG93biksIEJGQV9QUE9SVF9TVF9MSU5LRE9XTn0sCisJe0JGQV9TTShiZmFfcHBvcnRfc21fbGlua3VwKSwgQkZBX1BQT1JUX1NUX0xJTktVUH0sCisJe0JGQV9TTShiZmFfcHBvcnRfc21fZGlzYWJsaW5nX3F3YWl0KSwKKwkgQkZBX1BQT1JUX1NUX0RJU0FCTElOR19RV0FJVH0sCisJe0JGQV9TTShiZmFfcHBvcnRfc21fZGlzYWJsaW5nKSwgQkZBX1BQT1JUX1NUX0RJU0FCTElOR30sCisJe0JGQV9TTShiZmFfcHBvcnRfc21fZGlzYWJsZWQpLCBCRkFfUFBPUlRfU1RfRElTQUJMRUR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX3N0b3BwZWQpLCBCRkFfUFBPUlRfU1RfU1RPUFBFRH0sCisJe0JGQV9TTShiZmFfcHBvcnRfc21faW9jZG93biksIEJGQV9QUE9SVF9TVF9JT0NET1dOfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9pb2NmYWlsKSwgQkZBX1BQT1JUX1NUX0lPQ0RPV059LAorfTsKKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9hZW5fcG9zdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wb3J0X2Flbl9ldmVudCBldmVudCkKK3sKKwl1bmlvbiBiZmFfYWVuX2RhdGFfdSBhZW5fZGF0YTsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kID0gcHBvcnQtPmJmYS0+bG9nbTsKKwl3d25fdCAgICAgICAgICAgcHd3biA9IHBwb3J0LT5wd3duOworCWNoYXIgICAgICAgICAgICBwd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgaW9jX2F0dHI7CisKKwl3d24yc3RyKHB3d25fcHRyLCBwd3duKTsKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUE9SVF9BRU5fT05MSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9QT1JUX09OTElORSwgcHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9QT1JUX0FFTl9PRkZMSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9QT1JUX09GRkxJTkUsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUE9SVF9BRU5fRU5BQkxFOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9QT1JUX0VOQUJMRSwgcHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9QT1JUX0FFTl9ESVNBQkxFOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9QT1JUX0RJU0FCTEUsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUE9SVF9BRU5fRElTQ09OTkVDVDoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9ESVNDT05ORUNULCBwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1BPUlRfQUVOX1FPU19ORUc6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1BPUlRfUU9TX05FRywgcHd3bl9wdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwliZmFfaW9jX2dldF9hdHRyKCZwcG9ydC0+YmZhLT5pb2MsICZpb2NfYXR0cik7CisJYWVuX2RhdGEucG9ydC5pb2NfdHlwZSA9IGlvY19hdHRyLmlvY190eXBlOworCWFlbl9kYXRhLnBvcnQucHd3biA9IHB3d247Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX1NUQVJUOgorCQkvKioKKwkJICogU3RhcnQgZXZlbnQgYWZ0ZXIgSU9DIGlzIGNvbmZpZ3VyZWQgYW5kIEJGQSBpcyBzdGFydGVkLgorCQkgKi8KKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0VOQUJMRToKKwkJLyoqCisJCSAqIFBvcnQgaXMgcGVyc2lzdGVudGx5IGNvbmZpZ3VyZWQgdG8gYmUgaW4gZW5hYmxlZCBzdGF0ZS4gRG8KKwkJICogbm90IGNoYW5nZSBzdGF0ZS4gUG9ydCBlbmFibGluZyBpcyBkb25lIHdoZW4gU1RBUlQgZXZlbnQgaXMKKwkJICogcmVjZWl2ZWQuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0RJU0FCTEU6CisJCS8qKgorCQkgKiBJZiBhIHBvcnQgaXMgcGVyc2lzdGVudGx5IGNvbmZpZ3VyZWQgdG8gYmUgZGlzYWJsZWQsIHRoZQorCQkgKiBmaXJzdCBldmVudCB3aWxsIGEgcG9ydCBkaXNhYmxlIHJlcXVlc3QuCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2Rvd24pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKTsKKwkJYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHBwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfcmVxcV93Y2FuY2VsKCZwcG9ydC0+cmVxcV93YWl0KTsKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX3N0b3BwZWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0VOQUJMRToKKwkJLyoqCisJCSAqIEFscmVhZHkgZW5hYmxlIGlzIGluIHByb2dyZXNzLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogSnVzdCBzZW5kIGRpc2FibGUgcmVxdWVzdCB0byBmaXJtd2FyZSB3aGVuIHJvb20gYmVjb21lcworCQkgKiBhdmFpbGFibGUgaW4gcmVxdWVzdCBxdWV1ZS4KKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxlZCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnBwb3J0LT5yZXFxX3dhaXQpOworCQliZmFfcGxvZ19zdHIocHBvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCisJCQkgICAgIEJGQV9QTF9FSURfUE9SVF9ESVNBQkxFLCAwLCAiUG9ydCBEaXNhYmxlIik7CisJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX0RJU0FCTEUpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktVUDoKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LRE9XTjoKKwkJLyoqCisJCSAqIFBvc3NpYmxlIHRvIGdldCBsaW5rIGV2ZW50cyB3aGVuIGRvaW5nIGJhY2stdG8tYmFjaworCQkgKiBlbmFibGUvZGlzYWJsZXMuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcHBvcnQtPnJlcXFfd2FpdCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2Nkb3duKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQocHBvcnQtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9lbmFibGluZyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9GV1JTUDoKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2xpbmtkb3duKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LVVA6CisJCWJmYV9wcG9ydF91cGRhdGVfbGlua2luZm8ocHBvcnQpOworCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fbGlua3VwKTsKKworCQliZmFfYXNzZXJ0KHBwb3J0LT5ldmVudF9jYmZuKTsKKwkJYmZhX3Bwb3J0X2NhbGxiYWNrKHBwb3J0LCBCRkFfUFBPUlRfTElOS1VQKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCS8qKgorCQkgKiBBbHJlYWR5IGJlaW5nIGVuYWJsZWQuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0RJU0FCTEU6CisJCWlmIChiZmFfcHBvcnRfc2VuZF9kaXNhYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nX3F3YWl0KTsKKworCQliZmFfcGxvZ19zdHIocHBvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCisJCQkgICAgIEJGQV9QTF9FSURfUE9SVF9ESVNBQkxFLCAwLCAiUG9ydCBEaXNhYmxlIik7CisJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX0RJU0FCTEUpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX1NUT1A6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9zdG9wcGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2Nkb3duKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQocHBvcnQtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9saW5rZG93bihzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LVVA6CisJCWJmYV9wcG9ydF91cGRhdGVfbGlua2luZm8ocHBvcnQpOworCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fbGlua3VwKTsKKwkJYmZhX2Fzc2VydChwcG9ydC0+ZXZlbnRfY2Jmbik7CisJCWJmYV9wbG9nX3N0cihwcG9ydC0+YmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwKKwkJCSAgICAgQkZBX1BMX0VJRF9QT1JUX1NUX0NIQU5HRSwgMCwgIlBvcnQgTGlua3VwIik7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktVUCk7CisJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX09OTElORSk7CisJCS8qKgorCQkgKiBJZiBRb1MgaXMgZW5hYmxlZCBhbmQgaXQgaXMgbm90IG9ubGluZSwKKwkJICogU2VuZCBhIHNlcGFyYXRlIGV2ZW50LgorCQkgKi8KKwkJaWYgKChwcG9ydC0+Y2ZnLnFvc19lbmFibGVkKQorCQkgICAgJiYgKGJmYV9vc19udG9obChwcG9ydC0+cW9zX2F0dHIuc3RhdGUpICE9IEJGQV9RT1NfT05MSU5FKSkKKwkJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX1FPU19ORUcpOworCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCS8qKgorCQkgKiBQb3NzaWJsZSB0byBnZXQgbGluayBkb3duIGV2ZW50LgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCS8qKgorCQkgKiBBbHJlYWR5IGVuYWJsZWQuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0RJU0FCTEU6CisJCWlmIChiZmFfcHBvcnRfc2VuZF9kaXNhYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nX3F3YWl0KTsKKworCQliZmFfcGxvZ19zdHIocHBvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCisJCQkgICAgIEJGQV9QTF9FSURfUE9SVF9ESVNBQkxFLCAwLCAiUG9ydCBEaXNhYmxlIik7CisJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX0RJU0FCTEUpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX1NUT1A6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9zdG9wcGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2Nkb3duKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQocHBvcnQtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9saW5rdXAoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBlbmFibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bwb3J0X3Jlc2V0X2xpbmtpbmZvKHBwb3J0KTsKKwkJYmZhX3Bwb3J0X2NhbGxiYWNrKHBwb3J0LCBCRkFfUFBPUlRfTElOS0RPV04pOworCQliZmFfcGxvZ19zdHIocHBvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCisJCQkgICAgIEJGQV9QTF9FSURfUE9SVF9ESVNBQkxFLCAwLCAiUG9ydCBEaXNhYmxlIik7CisJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX09GRkxJTkUpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2xpbmtkb3duKTsKKwkJYmZhX3Bwb3J0X3Jlc2V0X2xpbmtpbmZvKHBwb3J0KTsKKwkJYmZhX3Bwb3J0X2NhbGxiYWNrKHBwb3J0LCBCRkFfUFBPUlRfTElOS0RPV04pOworCQliZmFfcGxvZ19zdHIocHBvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCisJCQkgICAgIEJGQV9QTF9FSURfUE9SVF9TVF9DSEFOR0UsIDAsICJQb3J0IExpbmtkb3duIik7CisJCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChwcG9ydC0+YmZhKSkgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fT0ZGTElORSk7CisJCX0gZWxzZSB7CisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX1NUT1A6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9zdG9wcGVkKTsKKwkJYmZhX3Bwb3J0X3Jlc2V0X2xpbmtpbmZvKHBwb3J0KTsKKwkJaWYgKEJGQV9QT1JUX0lTX0RJU0FCTEVEKHBwb3J0LT5iZmEpKSB7CisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1QpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhwcG9ydCk7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktET1dOKTsKKwkJaWYgKEJGQV9QT1JUX0lTX0RJU0FCTEVEKHBwb3J0LT5iZmEpKSB7CisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1QpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fZGlzYWJsaW5nX3F3YWl0KHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmcpOworCQliZmFfcHBvcnRfc2VuZF9kaXNhYmxlKHBwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnBwb3J0LT5yZXFxX3dhaXQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0RJU0FCTEU6CisJCS8qKgorCQkgKiBBbHJlYWR5IGJlaW5nIGRpc2FibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LVVA6CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCS8qKgorCQkgKiBQb3NzaWJsZSB0byBnZXQgbGluayBldmVudHMgd2hlbiBkb2luZyBiYWNrLXRvLWJhY2sKKwkJICogZW5hYmxlL2Rpc2FibGVzLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2NmYWlsKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcHBvcnQtPnJlcXFfd2FpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fZGlzYWJsaW5nKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX0ZXUlNQOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0RJU0FCTEU6CisJCS8qKgorCQkgKiBBbHJlYWR5IGJlaW5nIGRpc2FibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCWlmIChiZmFfcHBvcnRfc2VuZF9lbmFibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KTsKKworCQliZmFfcGxvZ19zdHIocHBvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCisJCQkgICAgIEJGQV9QTF9FSURfUE9SVF9FTkFCTEUsIDAsICJQb3J0IEVuYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9FTkFCTEUpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX1NUT1A6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9zdG9wcGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LVVA6CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCS8qKgorCQkgKiBQb3NzaWJsZSB0byBnZXQgbGluayBldmVudHMgd2hlbiBkb2luZyBiYWNrLXRvLWJhY2sKKwkJICogZW5hYmxlL2Rpc2FibGVzLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2NmYWlsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQocHBvcnQtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9kaXNhYmxlZChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJLyoqCisJCSAqIElnbm9yZSBzdGFydCBldmVudCBmb3IgYSBwb3J0IHRoYXQgaXMgZGlzYWJsZWQuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX1NUT1A6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9zdG9wcGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCWlmIChiZmFfcHBvcnRfc2VuZF9lbmFibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KTsKKworCQliZmFfcGxvZ19zdHIocHBvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCisJCQkgICAgIEJGQV9QTF9FSURfUE9SVF9FTkFCTEUsIDAsICJQb3J0IEVuYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9FTkFCTEUpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0RJU0FCTEU6CisJCS8qKgorCQkgKiBBbHJlYWR5IGRpc2FibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2NmYWlsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQocHBvcnQtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9zdG9wcGVkKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX1NUQVJUOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyoqCisJCSAqIElnbm9yZSBhbGwgb3RoZXIgZXZlbnRzLgorCQkgKi8KKwkJOworCX0KK30KKworLyoqCisgKiBQb3J0IGlzIGVuYWJsZWQuIElPQyBpcyBkb3duL2ZhaWxlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9pb2Nkb3duKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX1NUQVJUOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyoqCisJCSAqIElnbm9yZSBhbGwgZXZlbnRzLgorCQkgKi8KKwkJOworCX0KK30KKworLyoqCisgKiBQb3J0IGlzIGRpc2FibGVkLiBJT0MgaXMgZG93bi9mYWlsZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21faW9jZmFpbChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2Nkb3duKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKioKKwkJICogSWdub3JlIGFsbCBldmVudHMuCisJCSAqLworCQk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX3Bwb3J0X3ByaXZhdGUKKyAqLworCitzdGF0aWMgdm9pZAorX19iZmFfY2JfcG9ydF9ldmVudCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpCisJCXBwb3J0LT5ldmVudF9jYmZuKHBwb3J0LT5ldmVudF9jYmFyZywgcHBvcnQtPmhjYl9ldmVudCk7Cit9CisKKyNkZWZpbmUgUFBPUlRfU1RBVFNfRE1BX1NaIChCRkFfUk9VTkRVUChzaXplb2YodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UpLCBcCisJCQkJCQkJQkZBX0NBQ0hFTElORV9TWikpCisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwKKwkJICB1MzIgKmRtX2xlbikKK3sKKwkqZG1fbGVuICs9IFBQT1JUX1NUQVRTX0RNQV9TWjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9xcmVzdW1lKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IGNiYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQocG9ydCwgQkZBX1BQT1JUX1NNX1FSRVNVTUUpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X21lbV9jbGFpbShzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbykKK3sKKwl1OCAgICAgICAgKmRtX2t2YTsKKwl1NjQgICAgICAgIGRtX3BhOworCisJZG1fa3ZhID0gYmZhX21lbWluZm9fZG1hX3ZpcnQobWVtaW5mbyk7CisJZG1fcGEgPSBiZmFfbWVtaW5mb19kbWFfcGh5cyhtZW1pbmZvKTsKKworCXBwb3J0LT5zdGF0c19rdmEgPSBkbV9rdmE7CisJcHBvcnQtPnN0YXRzX3BhID0gZG1fcGE7CisJcHBvcnQtPnN0YXRzID0gKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICopZG1fa3ZhOworCisJZG1fa3ZhICs9IFBQT1JUX1NUQVRTX0RNQV9TWjsKKwlkbV9wYSArPSBQUE9SVF9TVEFUU19ETUFfU1o7CisKKwliZmFfbWVtaW5mb19kbWFfdmlydChtZW1pbmZvKSA9IGRtX2t2YTsKKwliZmFfbWVtaW5mb19kbWFfcGh5cyhtZW1pbmZvKSA9IGRtX3BhOworfQorCisvKioKKyAqIE1lbW9yeSBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCXN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MgKnBvcnRfY2ZnID0gJnBwb3J0LT5jZmc7CisKKwliZmFfb3NfbWVtc2V0KHBwb3J0LCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wcG9ydF9zKSk7CisJcHBvcnQtPmJmYSA9IGJmYTsKKworCWJmYV9wcG9ydF9tZW1fY2xhaW0ocHBvcnQsIG1lbWluZm8pOworCisJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX3VuaW5pdCk7CisKKwkvKioKKwkgKiBpbml0aWFsaXplIGFuZCBzZXQgZGVmYXVsdCBjb25maWd1cmF0aW9uCisJICovCisJcG9ydF9jZmctPnRvcG9sb2d5ID0gQkZBX1BQT1JUX1RPUE9MT0dZX1AyUDsKKwlwb3J0X2NmZy0+c3BlZWQgPSBCRkFfUFBPUlRfU1BFRURfQVVUTzsKKwlwb3J0X2NmZy0+dHJ1bmtlZCA9IEJGQV9GQUxTRTsKKwlwb3J0X2NmZy0+bWF4ZnJzaXplID0gMDsKKworCXBvcnRfY2ZnLT50cmxfZGVmX3NwZWVkID0gQkZBX1BQT1JUX1NQRUVEXzFHQlBTOworCisJYmZhX3JlcXFfd2luaXQoJnBwb3J0LT5yZXFxX3dhaXQsIGJmYV9wcG9ydF9xcmVzdW1lLCBwcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBwb3J0IGF0dHJpYnV0ZXMgZnJvbSBJT0MgaGFyZHdhcmUgZGF0YS4KKwkgKi8KKwliZmFfcHBvcnRfc2V0X3d3bnMocHBvcnQpOworCWlmIChwcG9ydC0+Y2ZnLm1heGZyc2l6ZSA9PSAwKQorCQlwcG9ydC0+Y2ZnLm1heGZyc2l6ZSA9IGJmYV9pb2NfbWF4ZnJzaXplKCZiZmEtPmlvYyk7CisJcHBvcnQtPmNmZy5yeF9iYmNyZWRpdCA9IGJmYV9pb2NfcnhfYmJjcmVkaXQoJmJmYS0+aW9jKTsKKwlwcG9ydC0+c3BlZWRfc3VwID0gYmZhX2lvY19zcGVlZF9zdXAoJmJmYS0+aW9jKTsKKworCWJmYV9hc3NlcnQocHBvcnQtPmNmZy5tYXhmcnNpemUpOworCWJmYV9hc3NlcnQocHBvcnQtPmNmZy5yeF9iYmNyZWRpdCk7CisJYmZhX2Fzc2VydChwcG9ydC0+c3BlZWRfc3VwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gSU9DIGlzIHJlYWR5LgorICovCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KEJGQV9QT1JUX01PRChiZmEpLCBCRkFfUFBPUlRfU01fU1RBUlQpOworfQorCisvKioKKyAqIENhbGxlZCBiZWZvcmUgSU9DIGlzIHN0b3BwZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfc21fc2VuZF9ldmVudChCRkFfUE9SVF9NT0QoYmZhKSwgQkZBX1BQT1JUX1NNX1NUT1ApOworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIElPQyBmYWlsdXJlIGlzIGRldGVjdGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQoQkZBX1BPUlRfTU9EKGJmYSksIEJGQV9QUE9SVF9TTV9IV0ZBSUwpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3VwZGF0ZV9saW5raW5mbyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0KQoreworCXN0cnVjdCBiZmlfcHBvcnRfZXZlbnRfcyAqcGV2ZW50ID0gcHBvcnQtPmV2ZW50X2FyZy5pMmhtc2cuZXZlbnQ7CisKKwlwcG9ydC0+c3BlZWQgPSBwZXZlbnQtPmxpbmtfc3RhdGUuc3BlZWQ7CisJcHBvcnQtPnRvcG9sb2d5ID0gcGV2ZW50LT5saW5rX3N0YXRlLnRvcG9sb2d5OworCisJaWYgKHBwb3J0LT50b3BvbG9neSA9PSBCRkFfUFBPUlRfVE9QT0xPR1lfTE9PUCkKKwkJcHBvcnQtPm15YWxwYSA9IHBldmVudC0+bGlua19zdGF0ZS50bC5sb29wX2luZm8ubXlhbHBhOworCisJLyoKKwkgKiBRb1MgRGV0YWlscworCSAqLworCWJmYV9vc19hc3NpZ24ocHBvcnQtPnFvc19hdHRyLCBwZXZlbnQtPmxpbmtfc3RhdGUucW9zX2F0dHIpOworCWJmYV9vc19hc3NpZ24ocHBvcnQtPnFvc192Y19hdHRyLCBwZXZlbnQtPmxpbmtfc3RhdGUucW9zX3ZjX2F0dHIpOworCisJYmZhX3RyYyhwcG9ydC0+YmZhLCBwcG9ydC0+c3BlZWQpOworCWJmYV90cmMocHBvcnQtPmJmYSwgcHBvcnQtPnRvcG9sb2d5KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9yZXNldF9saW5raW5mbyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0KQoreworCXBwb3J0LT5zcGVlZCA9IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOOworCXBwb3J0LT50b3BvbG9neSA9IEJGQV9QUE9SVF9UT1BPTE9HWV9OT05FOworfQorCisvKioKKyAqIFNlbmQgcG9ydCBlbmFibGUgbWVzc2FnZSB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF9zZW5kX2VuYWJsZShzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmaV9wcG9ydF9lbmFibGVfcmVxX3MgKm07CisKKwkvKioKKwkgKiBJbmNyZW1lbnQgbWVzc2FnZSB0YWcgYmVmb3JlIHF1ZXVlIGNoZWNrLCBzbyB0aGF0IHJlc3BvbnNlcyB0byBvbGQKKwkgKiByZXF1ZXN0cyBhcmUgZGlzY2FyZGVkLgorCSAqLworCXBvcnQtPm1zZ3RhZysrOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JULCAmcG9ydC0+cmVxcV93YWl0KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0ZDX1BPUlQsIEJGSV9QUE9SVF9IMklfRU5BQkxFX1JFUSwKKwkJICAgIGJmYV9scHVpZChwb3J0LT5iZmEpKTsKKwltLT5ud3duID0gcG9ydC0+bnd3bjsKKwltLT5wd3duID0gcG9ydC0+cHd3bjsKKwltLT5wb3J0X2NmZyA9IHBvcnQtPmNmZzsKKwltLT5tc2d0YWcgPSBwb3J0LT5tc2d0YWc7CisJbS0+cG9ydF9jZmcubWF4ZnJzaXplID0gYmZhX29zX2h0b25zKHBvcnQtPmNmZy5tYXhmcnNpemUpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQobS0+c3RhdHNfZG1hX2FkZHIsIHBvcnQtPnN0YXRzX3BhKTsKKwliZmFfdHJjKHBvcnQtPmJmYSwgbS0+c3RhdHNfZG1hX2FkZHIuYTMyLmFkZHJfbG8pOworCWJmYV90cmMocG9ydC0+YmZhLCBtLT5zdGF0c19kbWFfYWRkci5hMzIuYWRkcl9oaSk7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogU2VuZCBwb3J0IGRpc2FibGUgbWVzc2FnZSB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF9zZW5kX2Rpc2FibGUoc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0KQoreworCWJmaV9wcG9ydF9kaXNhYmxlX3JlcV90ICptOworCisJLyoqCisJICogSW5jcmVtZW50IG1lc3NhZ2UgdGFnIGJlZm9yZSBxdWV1ZSBjaGVjaywgc28gdGhhdCByZXNwb25zZXMgdG8gb2xkCisJICogcmVxdWVzdHMgYXJlIGRpc2NhcmRlZC4KKwkgKi8KKwlwb3J0LT5tc2d0YWcrKzsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCwgJnBvcnQtPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19GQ19QT1JULCBCRklfUFBPUlRfSDJJX0RJU0FCTEVfUkVRLAorCQkgICAgYmZhX2xwdWlkKHBvcnQtPmJmYSkpOworCW0tPm1zZ3RhZyA9IHBvcnQtPm1zZ3RhZzsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCisJcmV0dXJuIEJGQV9UUlVFOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NldF93d25zKHN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCkKK3sKKwlwb3J0LT5wd3duID0gYmZhX2lvY19nZXRfcHd3bigmcG9ydC0+YmZhLT5pb2MpOworCXBvcnQtPm53d24gPSBiZmFfaW9jX2dldF9ud3duKCZwb3J0LT5iZmEtPmlvYyk7CisKKwliZmFfdHJjKHBvcnQtPmJmYSwgcG9ydC0+cHd3bik7CisJYmZhX3RyYyhwb3J0LT5iZmEsIHBvcnQtPm53d24pOworfQorCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfc2VuZF90eGNyZWRpdCh2b2lkICpwb3J0X2NiYXJnKQoreworCisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gcG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X3NldF9zdmNfcGFyYW1zX3JlcV9zICptOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisJaWYgKCFtKSB7CisJCWJmYV90cmMocG9ydC0+YmZhLCBwb3J0LT5jZmcudHhfYmJjcmVkaXQpOworCQlyZXR1cm47CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19GQ19QT1JULCBCRklfUFBPUlRfSDJJX1NFVF9TVkNfUEFSQU1TX1JFUSwKKwkJICAgIGJmYV9scHVpZChwb3J0LT5iZmEpKTsKKwltLT50eF9iYmNyZWRpdCA9IGJmYV9vc19odG9ucygodTE2KSBwb3J0LT5jZmcudHhfYmJjcmVkaXQpOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7Cit9CisKKworCisvKioKKyAqICBiZmFfcHBvcnRfcHVibGljCisgKi8KKworLyoqCisgKiBGaXJtd2FyZSBtZXNzYWdlIGhhbmRsZXIuCisgKi8KK3ZvaWQKK2JmYV9wcG9ydF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisJdW5pb24gYmZpX3Bwb3J0X2kyaF9tc2dfdSBpMmhtc2c7CisKKwlpMmhtc2cubXNnID0gbXNnOworCXBwb3J0LT5ldmVudF9hcmcuaTJobXNnID0gaTJobXNnOworCisJc3dpdGNoIChtc2ctPm1oZHIubXNnX2lkKSB7CisJY2FzZSBCRklfUFBPUlRfSTJIX0VOQUJMRV9SU1A6CisJCWlmIChwcG9ydC0+bXNndGFnID09IGkyaG1zZy5lbmFibGVfcnNwLT5tc2d0YWcpCisJCQliZmFfc21fc2VuZF9ldmVudChwcG9ydCwgQkZBX1BQT1JUX1NNX0ZXUlNQKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9QUE9SVF9JMkhfRElTQUJMRV9SU1A6CisJCWlmIChwcG9ydC0+bXNndGFnID09IGkyaG1zZy5lbmFibGVfcnNwLT5tc2d0YWcpCisJCQliZmFfc21fc2VuZF9ldmVudChwcG9ydCwgQkZBX1BQT1JUX1NNX0ZXUlNQKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9QUE9SVF9JMkhfRVZFTlQ6CisJCXN3aXRjaCAoaTJobXNnLmV2ZW50LT5saW5rX3N0YXRlLmxpbmtzdGF0ZSkgeworCQljYXNlIEJGQV9QUE9SVF9MSU5LVVA6CisJCQliZmFfc21fc2VuZF9ldmVudChwcG9ydCwgQkZBX1BQT1JUX1NNX0xJTktVUCk7CisJCQlicmVhazsKKwkJY2FzZSBCRkFfUFBPUlRfTElOS0RPV046CisJCQliZmFfc21fc2VuZF9ldmVudChwcG9ydCwgQkZBX1BQT1JUX1NNX0xJTktET1dOKTsKKwkJCWJyZWFrOworCQljYXNlIEJGQV9QUE9SVF9UUlVOS19MSU5LRE9XTjoKKwkJCS8qKiB0b2RvOiBldmVudCBub3RpZmljYXRpb24gKi8KKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRklfUFBPUlRfSTJIX0dFVF9TVEFUU19SU1A6CisJY2FzZSBCRklfUFBPUlRfSTJIX0dFVF9RT1NfU1RBVFNfUlNQOgorCQkvKgorCQkgKiBjaGVjayBmb3IgdGltZXIgcG9wIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSByc3AKKwkJICovCisJCWlmIChwcG9ydC0+c3RhdHNfYnVzeSA9PSBCRkFfRkFMU0UKKwkJICAgIHx8IHBwb3J0LT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19FVElNRVIpCisJCQlicmVhazsKKworCQliZmFfdGltZXJfc3RvcCgmcHBvcnQtPnRpbWVyKTsKKwkJcHBvcnQtPnN0YXRzX3N0YXR1cyA9IGkyaG1zZy5nZXRzdGF0c19yc3AtPnN0YXR1czsKKwkJYmZhX2NiX3F1ZXVlKHBwb3J0LT5iZmEsICZwcG9ydC0+aGNiX3FlLCBfX2JmYV9jYl9wb3J0X3N0YXRzLAorCQkJICAgICBwcG9ydCk7CisJCWJyZWFrOworCWNhc2UgQkZJX1BQT1JUX0kySF9DTEVBUl9TVEFUU19SU1A6CisJY2FzZSBCRklfUFBPUlRfSTJIX0NMRUFSX1FPU19TVEFUU19SU1A6CisJCS8qCisJCSAqIGNoZWNrIGZvciB0aW1lciBwb3AgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHJzcAorCQkgKi8KKwkJaWYgKHBwb3J0LT5zdGF0c19idXN5ID09IEJGQV9GQUxTRQorCQkgICAgfHwgcHBvcnQtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikKKwkJCWJyZWFrOworCisJCWJmYV90aW1lcl9zdG9wKCZwcG9ydC0+dGltZXIpOworCQlwcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwkJYmZhX2NiX3F1ZXVlKHBwb3J0LT5iZmEsICZwcG9ydC0+aGNiX3FlLAorCQkJICAgICBfX2JmYV9jYl9wb3J0X3N0YXRzX2NsciwgcHBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX3Bwb3J0X2FwaQorICovCisKKy8qKgorICogUmVnaXN0ZXJlZCBjYWxsYmFjayBmb3IgcG9ydCBldmVudHMuCisgKi8KK3ZvaWQKK2JmYV9wcG9ydF9ldmVudF9yZWdpc3RlcihzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCSB2b2lkICgqY2JmbikgKHZvaWQgKmNiYXJnLCBiZmFfcHBvcnRfZXZlbnRfdCBldmVudCksCisJCQkgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcHBvcnQtPmV2ZW50X2NiZm4gPSBjYmZuOworCXBwb3J0LT5ldmVudF9jYmFyZyA9IGNiYXJnOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9lbmFibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJaWYgKHBwb3J0LT5kaWFnX2J1c3kpCisJCXJldHVybiAoQkZBX1NUQVRVU19ESUFHX0JVU1kpOworCWVsc2UgaWYgKGJmYV9zbV9jbXBfc3RhdGUKKwkJIChCRkFfUE9SVF9NT0QoYmZhKSwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCkpCisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KEJGQV9QT1JUX01PRChiZmEpLCBCRkFfUFBPUlRfU01fRU5BQkxFKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfc21fc2VuZF9ldmVudChCRkFfUE9SVF9NT0QoYmZhKSwgQkZBX1BQT1JUX1NNX0RJU0FCTEUpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIENvbmZpZ3VyZSBwb3J0IHNwZWVkLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jZmdfc3BlZWQoc3RydWN0IGJmYV9zICpiZmEsIGVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBzcGVlZCk7CisKKwlpZiAoKHNwZWVkICE9IEJGQV9QUE9SVF9TUEVFRF9BVVRPKSAmJiAoc3BlZWQgPiBwcG9ydC0+c3BlZWRfc3VwKSkgeworCQliZmFfdHJjKGJmYSwgcHBvcnQtPnNwZWVkX3N1cCk7CisJCXJldHVybiBCRkFfU1RBVFVTX1VOU1VQUF9TUEVFRDsKKwl9CisKKwlwcG9ydC0+Y2ZnLnNwZWVkID0gc3BlZWQ7CisKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCisvKioKKyAqIEdldCBjdXJyZW50IHNwZWVkLgorICovCitlbnVtIGJmYV9wcG9ydF9zcGVlZAorYmZhX3Bwb3J0X2dldF9zcGVlZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiBwb3J0LT5zcGVlZDsKK30KKworLyoqCisgKiBDb25maWd1cmUgcG9ydCB0b3BvbG9neS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2ZnX3RvcG9sb2d5KHN0cnVjdCBiZmFfcyAqYmZhLCBlbnVtIGJmYV9wcG9ydF90b3BvbG9neSB0b3BvbG9neSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgdG9wb2xvZ3kpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLnRvcG9sb2d5KTsKKworCXN3aXRjaCAodG9wb2xvZ3kpIHsKKwljYXNlIEJGQV9QUE9SVF9UT1BPTE9HWV9QMlA6CisJY2FzZSBCRkFfUFBPUlRfVE9QT0xPR1lfTE9PUDoKKwljYXNlIEJGQV9QUE9SVF9UT1BPTE9HWV9BVVRPOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKwl9CisKKwlwcG9ydC0+Y2ZnLnRvcG9sb2d5ID0gdG9wb2xvZ3k7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworLyoqCisgKiBHZXQgY3VycmVudCB0b3BvbG9neS4KKyAqLworZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kKK2JmYV9wcG9ydF9nZXRfdG9wb2xvZ3koc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlyZXR1cm4gcG9ydC0+dG9wb2xvZ3k7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NmZ19oYXJkYWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggYWxwYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgYWxwYSk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcuY2ZnX2hhcmRhbHBhKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy5oYXJkYWxwYSk7CisKKwlwcG9ydC0+Y2ZnLmNmZ19oYXJkYWxwYSA9IEJGQV9UUlVFOworCXBwb3J0LT5jZmcuaGFyZGFscGEgPSBhbHBhOworCisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2xyX2hhcmRhbHBhKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLmNmZ19oYXJkYWxwYSk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcuaGFyZGFscGEpOworCisJcHBvcnQtPmNmZy5jZmdfaGFyZGFscGEgPSBCRkFfRkFMU0U7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX3Bwb3J0X2dldF9oYXJkYWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggKmFscGEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwkqYWxwYSA9IHBvcnQtPmNmZy5oYXJkYWxwYTsKKwlyZXR1cm4gcG9ydC0+Y2ZnLmNmZ19oYXJkYWxwYTsKK30KKwordTgKK2JmYV9wcG9ydF9nZXRfbXlhbHBhKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPm15YWxwYTsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2ZnX21heGZyc2l6ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IG1heGZyc2l6ZSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgbWF4ZnJzaXplKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy5tYXhmcnNpemUpOworCisJLyoKKwkgKiB3aXRoIGluIHJhbmdlCisJICovCisJaWYgKChtYXhmcnNpemUgPiBGQ19NQVhfUERVU1opIHx8IChtYXhmcnNpemUgPCBGQ19NSU5fUERVU1opKQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfSU5WTERfREZTWik7CisKKwkvKgorCSAqIHBvd2VyIG9mIDIsIGlmIG5vdCB0aGUgbWF4IGZyYW1lIHNpemUgb2YgMjExMgorCSAqLworCWlmICgobWF4ZnJzaXplICE9IEZDX01BWF9QRFVTWikgJiYgKG1heGZyc2l6ZSAmIChtYXhmcnNpemUgLSAxKSkpCisJCXJldHVybiAoQkZBX1NUQVRVU19JTlZMRF9ERlNaKTsKKworCXBwb3J0LT5jZmcubWF4ZnJzaXplID0gbWF4ZnJzaXplOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK3UxNgorYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlyZXR1cm4gcG9ydC0+Y2ZnLm1heGZyc2l6ZTsKK30KKwordTMyCitiZmFfcHBvcnRfbXlwaWQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlyZXR1cm4gcG9ydC0+bXlwaWQ7Cit9CisKK3U4CitiZmFfcHBvcnRfZ2V0X3J4X2JiY3JlZGl0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPmNmZy5yeF9iYmNyZWRpdDsKK30KKwordm9pZAorYmZhX3Bwb3J0X3NldF90eF9iYmNyZWRpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHR4X2JiY3JlZGl0KQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcG9ydC0+Y2ZnLnR4X2JiY3JlZGl0ID0gKHU4KSB0eF9iYmNyZWRpdDsKKwliZmFfcG9ydF9zZW5kX3R4Y3JlZGl0KHBvcnQpOworfQorCisvKioKKyAqIEdldCBwb3J0IGF0dHJpYnV0ZXMuCisgKi8KKword3duX3QKK2JmYV9wcG9ydF9nZXRfd3duKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG5vZGUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCWlmIChub2RlKQorCQlyZXR1cm4gcHBvcnQtPm53d247CisJZWxzZQorCQlyZXR1cm4gcHBvcnQtPnB3d247Cit9CisKK3ZvaWQKK2JmYV9wcG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgKmF0dHIpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX29zX21lbXNldChhdHRyLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MpKTsKKworCWF0dHItPm53d24gPSBwcG9ydC0+bnd3bjsKKwlhdHRyLT5wd3duID0gcHBvcnQtPnB3d247CisKKwliZmFfb3NfbWVtY3B5KCZhdHRyLT5wcG9ydF9jZmcsICZwcG9ydC0+Y2ZnLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGJmYV9wcG9ydF9jZmdfcykpOworCS8qCisJICogc3BlZWQgYXR0cmlidXRlcworCSAqLworCWF0dHItPnBwb3J0X2NmZy5zcGVlZCA9IHBwb3J0LT5jZmcuc3BlZWQ7CisJYXR0ci0+c3BlZWRfc3VwcG9ydGVkID0gcHBvcnQtPnNwZWVkX3N1cDsKKwlhdHRyLT5zcGVlZCA9IHBwb3J0LT5zcGVlZDsKKwlhdHRyLT5jb3Nfc3VwcG9ydGVkID0gRkNfQ0xBU1NfMzsKKworCS8qCisJICogdG9wb2xvZ3kgYXR0cmlidXRlcworCSAqLworCWF0dHItPnBwb3J0X2NmZy50b3BvbG9neSA9IHBwb3J0LT5jZmcudG9wb2xvZ3k7CisJYXR0ci0+dG9wb2xvZ3kgPSBwcG9ydC0+dG9wb2xvZ3k7CisKKwkvKgorCSAqIGJlYWNvbiBhdHRyaWJ1dGVzCisJICovCisJYXR0ci0+YmVhY29uID0gcHBvcnQtPmJlYWNvbjsKKwlhdHRyLT5saW5rX2UyZV9iZWFjb24gPSBwcG9ydC0+bGlua19lMmVfYmVhY29uOworCWF0dHItPnBsb2dfZW5hYmxlZCA9IGJmYV9wbG9nX2dldF9zZXR0aW5nKHBwb3J0LT5iZmEtPnBsb2cpOworCisJYXR0ci0+cHBvcnRfY2ZnLnBhdGhfdG92ID0gYmZhX2ZjcGltX3BhdGhfdG92X2dldChiZmEpOworCWF0dHItPnBwb3J0X2NmZy5xX2RlcHRoID0gYmZhX2ZjcGltX3FkZXB0aF9nZXQoYmZhKTsKKwlhdHRyLT5wb3J0X3N0YXRlID0gYmZhX3NtX3RvX3N0YXRlKGhhbF9wcG9ydF9zbV90YWJsZSwgcHBvcnQtPnNtKTsKKwlpZiAoYmZhX2lvY19pc19kaXNhYmxlZCgmcHBvcnQtPmJmYS0+aW9jKSkKKwkJYXR0ci0+cG9ydF9zdGF0ZSA9IEJGQV9QUE9SVF9TVF9JT0NESVM7CisJZWxzZSBpZiAoYmZhX2lvY19md19taXNtYXRjaCgmcHBvcnQtPmJmYS0+aW9jKSkKKwkJYXR0ci0+cG9ydF9zdGF0ZSA9IEJGQV9QUE9SVF9TVF9GV01JU01BVENIOworfQorCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfc3RhdHNfcXVlcnkodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfcHBvcnRfcyAqKWNiYXJnOworCWJmaV9wcG9ydF9nZXRfc3RhdHNfcmVxX3QgKm1zZzsKKworCW1zZyA9IGJmYV9yZXFxX25leHQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKworCWlmICghbXNnKSB7CisJCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX1RSVUU7CisJCWJmYV9yZXFxX3dpbml0KCZwb3J0LT5zdGF0c19yZXFxX3dhaXQsIGJmYV9wb3J0X3N0YXRzX3F1ZXJ5LAorCQkJICAgICAgIHBvcnQpOworCQliZmFfcmVxcV93YWl0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCwgJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCk7CisJCXJldHVybjsKKwl9CisJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfRkFMU0U7CisKKwliZmFfb3NfbWVtc2V0KG1zZywgMCwgc2l6ZW9mKGJmaV9wcG9ydF9nZXRfc3RhdHNfcmVxX3QpKTsKKwliZmlfaDJpX3NldChtc2ctPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9HRVRfU1RBVFNfUkVRLAorCQkgICAgYmZhX2xwdWlkKHBvcnQtPmJmYSkpOworCWJmYV9yZXFxX3Byb2R1Y2UocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3N0YXRzX2NsZWFyKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKiljYmFyZzsKKwliZmlfcHBvcnRfY2xlYXJfc3RhdHNfcmVxX3QgKm1zZzsKKworCW1zZyA9IGJmYV9yZXFxX25leHQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKworCWlmICghbXNnKSB7CisJCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX1RSVUU7CisJCWJmYV9yZXFxX3dpbml0KCZwb3J0LT5zdGF0c19yZXFxX3dhaXQsIGJmYV9wb3J0X3N0YXRzX2NsZWFyLAorCQkJICAgICAgIHBvcnQpOworCQliZmFfcmVxcV93YWl0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCwgJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCk7CisJCXJldHVybjsKKwl9CisJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfRkFMU0U7CisKKwliZmFfb3NfbWVtc2V0KG1zZywgMCwgc2l6ZW9mKGJmaV9wcG9ydF9jbGVhcl9zdGF0c19yZXFfdCkpOworCWJmaV9oMmlfc2V0KG1zZy0+bWgsIEJGSV9NQ19GQ19QT1JULCBCRklfUFBPUlRfSDJJX0NMRUFSX1NUQVRTX1JFUSwKKwkJICAgIGJmYV9scHVpZChwb3J0LT5iZmEpKTsKKwliZmFfcmVxcV9wcm9kdWNlKHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfcW9zX3N0YXRzX2NsZWFyKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKiljYmFyZzsKKwliZmlfcHBvcnRfY2xlYXJfcW9zX3N0YXRzX3JlcV90ICptc2c7CisKKwltc2cgPSBiZmFfcmVxcV9uZXh0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlpZiAoIW1zZykgeworCQlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9UUlVFOworCQliZmFfcmVxcV93aW5pdCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0LCBiZmFfcG9ydF9xb3Nfc3RhdHNfY2xlYXIsCisJCQkgICAgICAgcG9ydCk7CisJCWJmYV9yZXFxX3dhaXQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JULCAmcG9ydC0+c3RhdHNfcmVxcV93YWl0KTsKKwkJcmV0dXJuOworCX0KKwlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9GQUxTRTsKKworCWJmYV9vc19tZW1zZXQobXNnLCAwLCBzaXplb2YoYmZpX3Bwb3J0X2NsZWFyX3Fvc19zdGF0c19yZXFfdCkpOworCWJmaV9oMmlfc2V0KG1zZy0+bWgsIEJGSV9NQ19GQ19QT1JULCBCRklfUFBPUlRfSDJJX0NMRUFSX1FPU19TVEFUU19SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJYmZhX3JlcXFfcHJvZHVjZShwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zdGF0c19zd2FwKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpkLCB1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqcykKK3sKKwl1MzIgICAgICAgKmRpcCA9ICh1MzIgKikgZDsKKwl1MzIgICAgICAgKnNpcCA9ICh1MzIgKikgczsKKwlpbnQgICAgICAgICAgICAgaTsKKworCS8qCisJICogRG8gNjQgYml0IGZpZWxkcyBzd2FwIGZpcnN0CisJICovCisJZm9yIChpID0gMDsKKwkgICAgIGkgPAorCSAgICAgKChzaXplb2YodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UpIC0KKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfcW9zX3N0YXRzX3MpKSAvIHNpemVvZih1MzIpKTsgaSA9IGkgKyAyKSB7CisjaWZkZWYgX19CSUdFTkRJQU4KKwkJZGlwW2ldID0gYmZhX29zX250b2hsKHNpcFtpXSk7CisJCWRpcFtpICsgMV0gPSBiZmFfb3NfbnRvaGwoc2lwW2kgKyAxXSk7CisjZWxzZQorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwoc2lwW2kgKyAxXSk7CisJCWRpcFtpICsgMV0gPSBiZmFfb3NfbnRvaGwoc2lwW2ldKTsKKyNlbmRpZgorCX0KKworCS8qCisJICogTm93IHN3YXAgdGhlIDMyIGJpdCBmaWVsZHMKKwkgKi8KKwlmb3IgKDsgaSA8IChzaXplb2YodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UpIC8gc2l6ZW9mKHUzMikpOyArK2kpCisJCWRpcFtpXSA9IGJmYV9vc19udG9obChzaXBbaV0pOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfcG9ydF9zdGF0c19jbHIodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJcG9ydC0+c3RhdHNfY2Jmbihwb3J0LT5zdGF0c19jYmFyZywgcG9ydC0+c3RhdHNfc3RhdHVzKTsKKwl9IGVsc2UgeworCQlwb3J0LT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCQlwb3J0LT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3N0YXRzX2Nscl90aW1lb3V0KHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKiljYmFyZzsKKworCWJmYV90cmMocG9ydC0+YmZhLCBwb3J0LT5zdGF0c19xZnVsbCk7CisKKwlpZiAocG9ydC0+c3RhdHNfcWZ1bGwpIHsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0KTsKKwkJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfRkFMU0U7CisJfQorCisJcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19FVElNRVI7CisJYmZhX2NiX3F1ZXVlKHBvcnQtPmJmYSwgJnBvcnQtPmhjYl9xZSwgX19iZmFfY2JfcG9ydF9zdGF0c19jbHIsIHBvcnQpOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfcG9ydF9zdGF0cyh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkgeworCQlpZiAocG9ydC0+c3RhdHNfc3RhdHVzID09IEJGQV9TVEFUVVNfT0spCisJCQliZmFfcHBvcnRfc3RhdHNfc3dhcChwb3J0LT5zdGF0c19yZXQsIHBvcnQtPnN0YXRzKTsKKwkJcG9ydC0+c3RhdHNfY2Jmbihwb3J0LT5zdGF0c19jYmFyZywgcG9ydC0+c3RhdHNfc3RhdHVzKTsKKwl9IGVsc2UgeworCQlwb3J0LT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCQlwb3J0LT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3N0YXRzX3RpbWVvdXQodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfcHBvcnRfcyAqKWNiYXJnOworCisJYmZhX3RyYyhwb3J0LT5iZmEsIHBvcnQtPnN0YXRzX3FmdWxsKTsKKworCWlmIChwb3J0LT5zdGF0c19xZnVsbCkgeworCQliZmFfcmVxcV93Y2FuY2VsKCZwb3J0LT5zdGF0c19yZXFxX3dhaXQpOworCQlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9GQUxTRTsKKwl9CisKKwlwb3J0LT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX0VUSU1FUjsKKwliZmFfY2JfcXVldWUocG9ydC0+YmZhLCAmcG9ydC0+aGNiX3FlLCBfX2JmYV9jYl9wb3J0X3N0YXRzLCBwb3J0KTsKK30KKworI2RlZmluZSBCRkFfUE9SVF9TVEFUU19UT1YJMTAwMAorCisvKioKKyAqIEZldGNoIHBvcnQgYXR0cmlidXRlcy4KKyAqLworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCB1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHMsCisJCSAgICBiZmFfY2JfcHBvcnRfdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMoYmZhLCBwb3J0LT5zdGF0c19idXN5KTsKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0RFVkJVU1kpOworCX0KKworCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfVFJVRTsKKwlwb3J0LT5zdGF0c19yZXQgPSBzdGF0czsKKwlwb3J0LT5zdGF0c19jYmZuID0gY2JmbjsKKwlwb3J0LT5zdGF0c19jYmFyZyA9IGNiYXJnOworCisJYmZhX3BvcnRfc3RhdHNfcXVlcnkocG9ydCk7CisKKwliZmFfdGltZXJfc3RhcnQoYmZhLCAmcG9ydC0+dGltZXIsIGJmYV9wb3J0X3N0YXRzX3RpbWVvdXQsIHBvcnQsCisJCQlCRkFfUE9SVF9TVEFUU19UT1YpOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfcHBvcnRfdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMoYmZhLCBwb3J0LT5zdGF0c19idXN5KTsKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0RFVkJVU1kpOworCX0KKworCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfVFJVRTsKKwlwb3J0LT5zdGF0c19jYmZuID0gY2JmbjsKKwlwb3J0LT5zdGF0c19jYmFyZyA9IGNiYXJnOworCisJYmZhX3BvcnRfc3RhdHNfY2xlYXIocG9ydCk7CisKKwliZmFfdGltZXJfc3RhcnQoYmZhLCAmcG9ydC0+dGltZXIsIGJmYV9wb3J0X3N0YXRzX2Nscl90aW1lb3V0LCBwb3J0LAorCQkJQkZBX1BPUlRfU1RBVFNfVE9WKTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF90cnVua19lbmFibGUoc3RydWN0IGJmYV9zICpiZmEsIHU4IGJpdG1hcCkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgYml0bWFwKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy50cnVua2VkKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy50cnVua19wb3J0cyk7CisKKwlpZiAoIWJpdG1hcCB8fCAoYml0bWFwICYgKGJpdG1hcCAtIDEpKSkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRUlOVkFMOworCisJcHBvcnQtPmNmZy50cnVua2VkID0gQkZBX1RSVUU7CisJcHBvcnQtPmNmZy50cnVua19wb3J0cyA9IGJpdG1hcDsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfcHBvcnRfcW9zX2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Fvc19hdHRyX3MgKnFvc19hdHRyKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXFvc19hdHRyLT5zdGF0ZSA9IGJmYV9vc19udG9obChwcG9ydC0+cW9zX2F0dHIuc3RhdGUpOworCXFvc19hdHRyLT50b3RhbF9iYl9jciA9IGJmYV9vc19udG9obChwcG9ydC0+cW9zX2F0dHIudG90YWxfYmJfY3IpOworfQorCit2b2lkCitiZmFfcHBvcnRfcW9zX2dldF92Y19hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJICBzdHJ1Y3QgYmZhX3Fvc192Y19hdHRyX3MgKnFvc192Y19hdHRyKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3Fvc192Y19hdHRyX3MgKmJmYV92Y19hdHRyID0gJnBwb3J0LT5xb3NfdmNfYXR0cjsKKwl1MzIgICAgICAgIGkgPSAwOworCisJcW9zX3ZjX2F0dHItPnRvdGFsX3ZjX2NvdW50ID0gYmZhX29zX250b2hzKGJmYV92Y19hdHRyLT50b3RhbF92Y19jb3VudCk7CisJcW9zX3ZjX2F0dHItPnNoYXJlZF9jcmVkaXQgPSBiZmFfb3NfbnRvaHMoYmZhX3ZjX2F0dHItPnNoYXJlZF9jcmVkaXQpOworCXFvc192Y19hdHRyLT5lbHBfb3Btb2RlX2ZsYWdzID0KKwkJYmZhX29zX250b2hsKGJmYV92Y19hdHRyLT5lbHBfb3Btb2RlX2ZsYWdzKTsKKworCS8qCisJICogSW5kaXZpZHVhbCBWQyBpbmZvCisJICovCisJd2hpbGUgKGkgPCBxb3NfdmNfYXR0ci0+dG90YWxfdmNfY291bnQpIHsKKwkJcW9zX3ZjX2F0dHItPnZjX2luZm9baV0udmNfY3JlZGl0ID0KKwkJCWJmYV92Y19hdHRyLT52Y19pbmZvW2ldLnZjX2NyZWRpdDsKKwkJcW9zX3ZjX2F0dHItPnZjX2luZm9baV0uYm9ycm93X2NyZWRpdCA9CisJCQliZmFfdmNfYXR0ci0+dmNfaW5mb1tpXS5ib3Jyb3dfY3JlZGl0OworCQlxb3NfdmNfYXR0ci0+dmNfaW5mb1tpXS5wcmlvcml0eSA9CisJCQliZmFfdmNfYXR0ci0+dmNfaW5mb1tpXS5wcmlvcml0eTsKKwkJKytpOworCX0KK30KKworLyoqCisgKiBGZXRjaCBRb1MgU3RhdHMuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2dldF9xb3Nfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cywKKwkJCWJmYV9jYl9wcG9ydF90IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCS8qCisJICogUW9TIHN0YXRzIGlzIGVtYmVkZGVkIGluIHBvcnQgc3RhdHMKKwkgKi8KKwlyZXR1cm4gKGJmYV9wcG9ydF9nZXRfc3RhdHMoYmZhLCBzdGF0cywgY2JmbiwgY2JhcmcpKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2xlYXJfcW9zX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfcHBvcnRfdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMoYmZhLCBwb3J0LT5zdGF0c19idXN5KTsKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0RFVkJVU1kpOworCX0KKworCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfVFJVRTsKKwlwb3J0LT5zdGF0c19jYmZuID0gY2JmbjsKKwlwb3J0LT5zdGF0c19jYmFyZyA9IGNiYXJnOworCisJYmZhX3BvcnRfcW9zX3N0YXRzX2NsZWFyKHBvcnQpOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJnBvcnQtPnRpbWVyLCBiZmFfcG9ydF9zdGF0c19jbHJfdGltZW91dCwgcG9ydCwKKwkJCUJGQV9QT1JUX1NUQVRTX1RPVik7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworLyoqCisgKiBGZXRjaCBwb3J0IGF0dHJpYnV0ZXMuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X3RydW5rX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX3Bwb3J0X3RydW5rX3F1ZXJ5KHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKmJpdG1hcCkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCSpiaXRtYXAgPSBwb3J0LT5jZmcudHJ1bmtfcG9ydHM7CisJcmV0dXJuIHBvcnQtPmNmZy50cnVua2VkOworfQorCitiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfaXNfZGlzYWJsZWQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlyZXR1cm4gKGJmYV9zbV90b19zdGF0ZShoYWxfcHBvcnRfc21fdGFibGUsIHBvcnQtPnNtKSA9PQorCQlCRkFfUFBPUlRfU1RfRElTQUJMRUQpOworCit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF9pc19yYXRlbGltKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworcmV0dXJuIChwcG9ydC0+Y2ZnLnJhdGVsaW1pdCA/IEJGQV9UUlVFIDogQkZBX0ZBTFNFKTsKKworfQorCit2b2lkCitiZmFfcHBvcnRfY2ZnX3FvcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBvbl9vZmYpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIG9uX29mZik7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcucW9zX2VuYWJsZWQpOworCisJcHBvcnQtPmNmZy5xb3NfZW5hYmxlZCA9IG9uX29mZjsKK30KKwordm9pZAorYmZhX3Bwb3J0X2NmZ19yYXRlbGltKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG9uX29mZikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgb25fb2ZmKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy5yYXRlbGltaXQpOworCisJcHBvcnQtPmNmZy5yYXRlbGltaXQgPSBvbl9vZmY7CisJaWYgKHBwb3J0LT5jZmcudHJsX2RlZl9zcGVlZCA9PSBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTikKKwkJcHBvcnQtPmNmZy50cmxfZGVmX3NwZWVkID0gQkZBX1BQT1JUX1NQRUVEXzFHQlBTOworfQorCisvKioKKyAqIENvbmZpZ3VyZSBkZWZhdWx0IG1pbmltdW0gcmF0ZWxpbSBzcGVlZAorICovCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jZmdfcmF0ZWxpbV9zcGVlZChzdHJ1Y3QgYmZhX3MgKmJmYSwgZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIHNwZWVkKTsKKworCS8qCisJICogQXV0byBhbmQgc3BlZWRzIGdyZWF0ZXIgdGhhbiB0aGUgc3VwcG9ydGVkIHNwZWVkLCBhcmUgaW52YWxpZAorCSAqLworCWlmICgoc3BlZWQgPT0gQkZBX1BQT1JUX1NQRUVEX0FVVE8pIHx8IChzcGVlZCA+IHBwb3J0LT5zcGVlZF9zdXApKSB7CisJCWJmYV90cmMoYmZhLCBwcG9ydC0+c3BlZWRfc3VwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfVU5TVVBQX1NQRUVEOworCX0KKworCXBwb3J0LT5jZmcudHJsX2RlZl9zcGVlZCA9IHNwZWVkOworCisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworLyoqCisgKiBHZXQgZGVmYXVsdCBtaW5pbXVtIHJhdGVsaW0gc3BlZWQKKyAqLworZW51bSBiZmFfcHBvcnRfc3BlZWQKK2JmYV9wcG9ydF9nZXRfcmF0ZWxpbV9zcGVlZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy50cmxfZGVmX3NwZWVkKTsKKwlyZXR1cm4gKHBwb3J0LT5jZmcudHJsX2RlZl9zcGVlZCk7CisKK30KKwordm9pZAorYmZhX3Bwb3J0X2J1c3koc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgc3RhdHVzKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBzdGF0dXMpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+ZGlhZ19idXN5KTsKKworCXBwb3J0LT5kaWFnX2J1c3kgPSBzdGF0dXM7Cit9CisKK3ZvaWQKK2JmYV9wcG9ydF9iZWFjb24oc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgYmVhY29uLAorCQkgYmZhX2Jvb2xlYW5fdCBsaW5rX2UyZV9iZWFjb24pCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIGJlYWNvbik7CisJYmZhX3RyYyhiZmEsIGxpbmtfZTJlX2JlYWNvbik7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5iZWFjb24pOworCWJmYV90cmMoYmZhLCBwcG9ydC0+bGlua19lMmVfYmVhY29uKTsKKworCXBwb3J0LT5iZWFjb24gPSBiZWFjb247CisJcHBvcnQtPmxpbmtfZTJlX2JlYWNvbiA9IGxpbmtfZTJlX2JlYWNvbjsKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX3Bwb3J0X2lzX2xpbmt1cChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlyZXR1cm4gYmZhX3NtX2NtcF9zdGF0ZShCRkFfUE9SVF9NT0QoYmZhKSwgYmZhX3Bwb3J0X3NtX2xpbmt1cCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2IzOWEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjcy5jIEJGQSBGQ1MgbWFpbgorICovCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgImZjc19wb3J0LmgiCisjaW5jbHVkZSAiZmNzX3VmLmgiCisjaW5jbHVkZSAiZmNzX3Zwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc19mY3BpbS5oIgorI2luY2x1ZGUgImZjc19mY3B0bS5oIgorI2luY2x1ZGUgImZjYnVpbGQuaCIKKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiLmg+CisKKy8qKgorICogRkNTIHN1Yi1tb2R1bGVzCisgKi8KK3N0cnVjdCBiZmFfZmNzX21vZF9zIHsKKwl2b2lkICAgICAgICAgICAgKCptb2Rpbml0KSAoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKwl2b2lkICAgICAgICAgICAgKCptb2RleGl0KSAoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK307CisKKyNkZWZpbmUgQkZBX0ZDU19NT0RVTEUoX21vZCkgeyBfbW9kICMjIF9tb2Rpbml0LCBfbW9kICMjIF9tb2RleGl0IH0KKworc3RhdGljIHN0cnVjdCBiZmFfZmNzX21vZF9zIGZjc19tb2R1bGVzW10gPSB7CisJQkZBX0ZDU19NT0RVTEUoYmZhX2Zjc19wcG9ydCksCisJQkZBX0ZDU19NT0RVTEUoYmZhX2Zjc191ZiksCisJQkZBX0ZDU19NT0RVTEUoYmZhX2Zjc19mYWJyaWMpLAorCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfdnBvcnQpLAorCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfcnBvcnQpLAorCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfZmNwaW0pLAorfTsKKworLyoqCisgKiAgZmNzX2FwaSBCRkEgRkNTIEFQSQorICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2V4aXRfY29tcCh2b2lkICpmY3NfY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcyAqZmNzID0gZmNzX2NiYXJnOworCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSBmY3MtPmJmYWQ7CisKKwljb21wbGV0ZSgmYmZhZC0+Y29tcCk7Cit9CisKKworCisvKioKKyAqICBmY3NfYXBpIEJGQSBGQ1MgQVBJCisgKi8KKworLyoqCisgKiAJCUZDUyBpbnN0YW5jZSBpbml0aWFsaXphdGlvbi4KKyAqCisgKiAJcGFyYW1baW5dCQlmY3MJCUZDUyBpbnN0YW5jZQorICogCXBhcmFtW2luXQkJYmZhCQlCRkEgaW5zdGFuY2UKKyAqIAlwYXJhbVtpbl0JCWJmYWQJCUJGQSBkcml2ZXIgaW5zdGFuY2UKKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFkX3MgKmJmYWQsCisJCQliZmFfYm9vbGVhbl90IG1pbl9jZmcpCit7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9mY3NfbW9kX3MgICptb2Q7CisKKwlmY3MtPmJmYSA9IGJmYTsKKwlmY3MtPmJmYWQgPSBiZmFkOworCWZjcy0+bWluX2NmZyA9IG1pbl9jZmc7CisKKwliZmFfYXR0YWNoX2ZjcyhiZmEpOworCWZjYnVpbGRfaW5pdCgpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihmY3NfbW9kdWxlcykgLyBzaXplb2YoZmNzX21vZHVsZXNbMF0pOyBpKyspIHsKKwkJbW9kID0gJmZjc19tb2R1bGVzW2ldOworCQltb2QtPm1vZGluaXQoZmNzKTsKKwl9Cit9CisKKy8qKgorICogU3RhcnQgRkNTIG9wZXJhdGlvbnMuCisgKi8KK3ZvaWQKK2JmYV9mY3Nfc3RhcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV9mY3NfZmFicmljX21vZHN0YXJ0KGZjcyk7Cit9CisKKy8qKgorICogCQlGQ1MgZHJpdmVyIGRldGFpbHMgaW5pdGlhbGl6YXRpb24uCisgKgorICogCXBhcmFtW2luXQkJZmNzCQlGQ1MgaW5zdGFuY2UKKyAqIAlwYXJhbVtpbl0JCWRyaXZlcl9pbmZvCURyaXZlciBEZXRhaWxzCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfZHJpdmVyX2luZm9faW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCQlzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zICpkcml2ZXJfaW5mbykKK3sKKworCWZjcy0+ZHJpdmVyX2luZm8gPSAqZHJpdmVyX2luZm87CisKKwliZmFfZmNzX2ZhYnJpY19wc3ltYl9pbml0KCZmY3MtPmZhYnJpYyk7Cit9CisKKy8qKgorICogCQlGQ1MgaW5zdGFuY2UgY2xlYW51cCBhbmQgZXhpdC4KKyAqCisgKiAJcGFyYW1baW5dCQlmY3MJCQlGQ1MgaW5zdGFuY2UKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX2V4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCXN0cnVjdCBiZmFfZmNzX21vZF9zICAqbW9kOworCWludCAgICAgICAgICAgICBubW9kcywgaTsKKworCWJmYV93Y19pbml0KCZmY3MtPndjLCBiZmFfZmNzX2V4aXRfY29tcCwgZmNzKTsKKworCW5tb2RzID0gc2l6ZW9mKGZjc19tb2R1bGVzKSAvIHNpemVvZihmY3NfbW9kdWxlc1swXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbm1vZHM7IGkrKykgeworCQliZmFfd2NfdXAoJmZjcy0+d2MpOworCisJCW1vZCA9ICZmY3NfbW9kdWxlc1tpXTsKKwkJbW9kLT5tb2RleGl0KGZjcyk7CisJfQorCisJYmZhX3djX3dhaXQoJmZjcy0+d2MpOworfQorCisKK3ZvaWQKK2JmYV9mY3NfdHJjX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kKQoreworCWZjcy0+dHJjbW9kID0gdHJjbW9kOworfQorCisKK3ZvaWQKK2JmYV9mY3NfbG9nX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKQoreworCWZjcy0+bG9nbSA9IGxvZ21vZDsKK30KKworCit2b2lkCitiZmFfZmNzX2Flbl9pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9hZW5fcyAqYWVuKQoreworCWZjcy0+YWVuID0gYWVuOworfQorCit2b2lkCitiZmFfZmNzX21vZGV4aXRfY29tcChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX3djX2Rvd24oJmZjcy0+d2MpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2xwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3NWVkMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jCkBAIC0wLDAgKzEsOTQwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfcG9ydC5jIEJGQSBGQ1MgcG9ydAorICovCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfcnBvcnQuaD4KKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYl9wb3J0Lmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2Zjcy5oPgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19mY3hwLmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImxwb3J0X3ByaXYuaCIKKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9scG9ydC5oPgorCitCRkFfVFJDX0ZJTEUoRkNTLCBQT1JUKTsKKworLyoqCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucworICovCisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgIGVudW0gYmZhX2xwb3J0X2Flbl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NlbmRfbHNfcmp0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsIHU4IHJlYXNvbl9jb2RlLAorCQkJdTggcmVhc29uX2NvZGVfZXhwbCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X29ubGluZV9hY3Rpb25zKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X29mZmxpbmVfYWN0aW9ucyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF91bmtub3duX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfdW5rbm93bl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfdW5rbm93bl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2RlbGV0ZWQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZWNobyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2VjaG9fcyAqZWNobywgdTE2IGxlbik7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3JuaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19ybmlkX2NtZF9zICpybmlkLCB1MTYgbGVuKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZnNfcG9ydF9nZXRfZ2VuX3RvcG9fZGF0YShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyAqZ2VuX3RvcG9fZGF0YSk7CisKK3N0YXRpYyBzdHJ1Y3QgeworCXZvaWQgICAgICAgICAgICAoKmluaXQpIChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCXZvaWQgICAgICAgICAgICAoKm9ubGluZSkgKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CisJdm9pZCAgICAgICAgICAgICgqb2ZmbGluZSkgKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit9IF9fcG9ydF9hY3Rpb25bXSA9IHsKKwl7CisJYmZhX2Zjc19wb3J0X3Vua25vd25faW5pdCwgYmZhX2Zjc19wb3J0X3Vua25vd25fb25saW5lLAorCQkJYmZhX2Zjc19wb3J0X3Vua25vd25fb2ZmbGluZX0sIHsKKwliZmFfZmNzX3BvcnRfZmFiX2luaXQsIGJmYV9mY3NfcG9ydF9mYWJfb25saW5lLAorCQkJYmZhX2Zjc19wb3J0X2ZhYl9vZmZsaW5lfSwgeworCWJmYV9mY3NfcG9ydF9sb29wX2luaXQsIGJmYV9mY3NfcG9ydF9sb29wX29ubGluZSwKKwkJCWJmYV9mY3NfcG9ydF9sb29wX29mZmxpbmV9LCB7CitiZmFfZmNzX3BvcnRfbjJuX2luaXQsIGJmYV9mY3NfcG9ydF9uMm5fb25saW5lLAorCQkJYmZhX2Zjc19wb3J0X24ybl9vZmZsaW5lfSx9OworCisvKioKKyAqICBmY3NfcG9ydF9zbSBGQ1MgbG9naWNhbCBwb3J0IHN0YXRlIG1hY2hpbmUKKyAqLworCitlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCB7CisJQkZBX0ZDU19QT1JUX1NNX0NSRUFURSA9IDEsCisJQkZBX0ZDU19QT1JUX1NNX09OTElORSA9IDIsCisJQkZBX0ZDU19QT1JUX1NNX09GRkxJTkUgPSAzLAorCUJGQV9GQ1NfUE9SVF9TTV9ERUxFVEUgPSA0LAorCUJGQV9GQ1NfUE9SVF9TTV9ERUxSUE9SVCA9IDUsCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJICAgICAgIGVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc21faW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJICAgICBlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJICAgICAgIGVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCWVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpOworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQllbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9DUkVBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX2luaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3NtX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX29ubGluZSk7CisJCWJmYV9mY3NfcG9ydF9vbmxpbmVfYWN0aW9ucyhwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3NfcG9ydF9kZWxldGVkKHBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQllbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19QT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmNzX3BvcnRfb2ZmbGluZV9hY3Rpb25zKHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19QT1JUX1NNX0RFTEVURToKKworCQlfX3BvcnRfYWN0aW9uW3BvcnQtPmZhYnJpYy0+ZmFiX3R5cGVdLm9mZmxpbmUocG9ydCk7CisKKwkJaWYgKHBvcnQtPm51bV9ycG9ydHMgPT0gMCkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fdW5pbml0KTsKKwkJCWJmYV9mY3NfcG9ydF9kZWxldGVkKHBvcnQpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fZGVsZXRpbmcpOworCQkJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZwb3J0LT5ycG9ydF9xKSB7CisJCQkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQkJCWJmYV9mY3NfcnBvcnRfZGVsZXRlKHJwb3J0KTsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19QT1JUX1NNX0RFTFJQT1JUOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX29ubGluZSk7CisJCWJmYV9mY3NfcG9ydF9vbmxpbmVfYWN0aW9ucyhwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9ERUxFVEU6CisJCWlmIChwb3J0LT5udW1fcnBvcnRzID09IDApIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJCQliZmFfZmNzX3BvcnRfZGVsZXRlZChwb3J0KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX2RlbGV0aW5nKTsKKwkJCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmcG9ydC0+cnBvcnRfcSkgeworCQkJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbGV0ZShycG9ydCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9ERUxSUE9SVDoKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9PRkZMSU5FOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCSBlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9ERUxSUE9SVDoKKwkJaWYgKHBvcnQtPm51bV9ycG9ydHMgPT0gMCkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fdW5pbml0KTsKKwkJCWJmYV9mY3NfcG9ydF9kZWxldGVkKHBvcnQpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBmY3NfcG9ydF9wdnQKKyAqLworCisvKioKKyAqIFNlbmQgQUVOIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgZW51bSBiZmFfbHBvcnRfYWVuX2V2ZW50IGV2ZW50KQoreworCXVuaW9uIGJmYV9hZW5fZGF0YV91IGFlbl9kYXRhOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QgPSBwb3J0LT5mY3MtPmxvZ207CisJZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUgPSBwb3J0LT5wb3J0X2NmZy5yb2xlczsKKwl3d25fdCAgICAgICAgICAgbHB3d24gPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisJY2hhciAgICAgICAgICAgIGxwd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKwljaGFyICAgICAgICAgICAqcm9sZV9zdHJbQkZBX1BPUlRfUk9MRV9GQ1BfTUFYIC8gMiArIDFdID0KKwkJeyAiSW5pdGlhdG9yIiwgIlRhcmdldCIsICJJUEZDIiB9OworCisJd3duMnN0cihscHd3bl9wdHIsIGxwd3duKTsKKworCWJmYV9hc3NlcnQocm9sZSA8PSBCRkFfUE9SVF9ST0xFX0ZDUF9NQVgpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0xQT1JUX0FFTl9PTkxJTkU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX09OTElORSwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfTFBPUlRfQUVOX09GRkxJTkU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX09GRkxJTkUsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9ORVc6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX05FVywgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfTFBPUlRfQUVOX0RFTEVURToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fTFBPUlRfREVMRVRFLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwljYXNlIEJGQV9MUE9SVF9BRU5fRElTQ09OTkVDVDoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fTFBPUlRfRElTQ09OTkVDVCwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWVuX2RhdGEubHBvcnQudmZfaWQgPSBwb3J0LT5mYWJyaWMtPnZmX2lkOworCWFlbl9kYXRhLmxwb3J0LnJvbGVzID0gcm9sZTsKKwlhZW5fZGF0YS5scG9ydC5wcHd3biA9CisJCWJmYV9mY3NfcG9ydF9nZXRfcHd3bihiZmFfZmNzX2dldF9iYXNlX3BvcnQocG9ydC0+ZmNzKSk7CisJYWVuX2RhdGEubHBvcnQubHB3d24gPSBscHd3bjsKK30KKworLyoKKyAqIFNlbmQgYSBMUyByZWplY3QKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zZW5kX2xzX3JqdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQkgdTggcmVhc29uX2NvZGUsIHU4IHJlYXNvbl9jb2RlX2V4cGwpCit7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0ID0gTlVMTDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfbHNfcmp0X2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJICAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCwKKwkJCSAgICAgIHJlYXNvbl9jb2RlLCByZWFzb25fY29kZV9leHBsKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgYmZhX3Jwb3J0LCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsCisJCSAgICAgIEJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwKKwkJICAgICAgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworLyoqCisgKiBQcm9jZXNzIGluY29taW5nIHBsb2dpIGZyb20gYSByZW1vdGUgcG9ydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5kX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisKKwkvKgorCSAqIElmIG1pbiBjZmcgbW9kZSBpcyBlbmFibGVkLCBkcm9wIGFueSBpbmNvbWluZyBQTE9HSXMKKwkgKi8KKwlpZiAoX19mY3NfbWluX2NmZyhwb3J0LT5mY3MpKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChmY19wbG9naV9wYXJzZShyeF9mY2hzKSAhPSBGQ19QQVJTRV9PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJCS8qCisJCSAqIHNlbmQgYSBMUyByZWplY3QKKwkJICovCisJCWJmYV9mY3NfcG9ydF9zZW5kX2xzX3JqdChwb3J0LCByeF9mY2hzLAorCQkJCQkgRkNfTFNfUkpUX1JTTl9QUk9UT0NPTF9FUlJPUiwKKwkJCQkJIEZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9PUFRJT05TKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorKiBEaXJlY3QgQXR0YWNoIFAyUCBtb2RlIDogdmVyaWZ5IGFkZHJlc3MgYXNzaWduZWQgYnkgdGhlIHItcG9ydC4KKwkgKi8KKwlpZiAoKCFiZmFfZmNzX2ZhYnJpY19pc19zd2l0Y2hlZChwb3J0LT5mYWJyaWMpKQorCSAgICAmJgorCSAgICAobWVtY21wCisJICAgICAoKHZvaWQgKikmYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpLCAodm9pZCAqKSZwbG9naS0+cG9ydF9uYW1lLAorCSAgICAgIHNpemVvZih3d25fdCkpIDwgMCkpIHsKKwkJaWYgKEJGQV9GQ1NfUElEX0lTX1dLQShyeF9mY2hzLT5kX2lkKSkgeworCQkJLyoKKwkJCSAqIEFkZHJlc3MgYXNzaWduZWQgdG8gdXMgY2Fubm90IGJlIGEgV0tBCisJCQkgKi8KKwkJCWJmYV9mY3NfcG9ydF9zZW5kX2xzX3JqdChwb3J0LCByeF9mY2hzLAorCQkJCQlGQ19MU19SSlRfUlNOX1BST1RPQ09MX0VSUk9SLAorCQkJCQlGQ19MU19SSlRfRVhQX0lOVkFMSURfTlBPUlRfSUQpOworCQkJcmV0dXJuOworCQl9CisJCXBvcnQtPnBpZCA9IHJ4X2ZjaHMtPmRfaWQ7CisJfQorCisJLyoqCisJICogRmlyc3QsIGNoZWNrIGlmIHdlIGtub3cgdGhlIGRldmljZSBieSBwd3duLgorCSAqLworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9wd3duKHBvcnQsIHBsb2dpLT5wb3J0X25hbWUpOworCWlmIChycG9ydCkgeworCQkvKioKKwkJICogRGlyZWN0IEF0dGFjaCBQMlAgbW9kZTogaGFuZGxlIGFkZHJlc3MgYXNzaWduZWQgYnkgdGhlIHJwb3J0LgorCQkgKi8KKwkJaWYgKCghYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQocG9ydC0+ZmFicmljKSkKKwkJICAgICYmCisJCSAgICAobWVtY21wCisJCSAgICAgKCh2b2lkICopJmJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KSwKKwkJICAgICAgKHZvaWQgKikmcGxvZ2ktPnBvcnRfbmFtZSwgc2l6ZW9mKHd3bl90KSkgPCAwKSkgeworCQkJcG9ydC0+cGlkID0gcnhfZmNocy0+ZF9pZDsKKwkJCXJwb3J0LT5waWQgPSByeF9mY2hzLT5zX2lkOworCQl9CisJCWJmYV9mY3NfcnBvcnRfcGxvZ2kocnBvcnQsIHJ4X2ZjaHMsIHBsb2dpKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIE5leHQsIGxvb2t1cCBycG9ydCBieSBQSUQuCisJICovCisJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3BpZChwb3J0LCByeF9mY2hzLT5zX2lkKTsKKwlpZiAoIXJwb3J0KSB7CisJCS8qKgorCQkgKiBJbmJvdW5kIFBMT0dJIGZyb20gYSBuZXcgZGV2aWNlLgorCQkgKi8KKwkJYmZhX2Zjc19ycG9ydF9wbG9naV9jcmVhdGUocG9ydCwgcnhfZmNocywgcGxvZ2kpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogUnBvcnQgaXMga25vd24gb25seSBieSBQSUQuCisJICovCisJaWYgKHJwb3J0LT5wd3duKSB7CisJCS8qKgorCQkgKiBUaGlzIGlzIGEgZGlmZmVyZW50IGRldmljZSB3aXRoIHRoZSBzYW1lIHBpZC4gT2xkIGRldmljZQorCQkgKiBkaXNhcHBlYXJlZC4gU2VuZCBpbXBsaWNpdCBMT0dPIHRvIG9sZCBkZXZpY2UuCisJCSAqLworCQliZmFfYXNzZXJ0KHJwb3J0LT5wd3duICE9IHBsb2dpLT5wb3J0X25hbWUpOworCQliZmFfZmNzX3Jwb3J0X2xvZ29faW1wKHJwb3J0KTsKKworCQkvKioKKwkJICogSW5ib3VuZCBQTE9HSSBmcm9tIGEgbmV3IGRldmljZSAod2l0aCBvbGQgUElEKS4KKwkJICovCisJCWJmYV9mY3NfcnBvcnRfcGxvZ2lfY3JlYXRlKHBvcnQsIHJ4X2ZjaHMsIHBsb2dpKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIFBMT0dJIGNyb3NzaW5nIGVhY2ggb3RoZXIuCisJICovCisJYmZhX2Fzc2VydChycG9ydC0+cHd3biA9PSBXV05fTlVMTCk7CisJYmZhX2Zjc19ycG9ydF9wbG9naShycG9ydCwgcnhfZmNocywgcGxvZ2kpOworfQorCisvKgorICogUHJvY2VzcyBpbmNvbWluZyBFQ0hPLgorICogU2luY2UgaXQgZG9lcyBub3QgcmVxdWlyZSBhIGxvZ2luLCBpdCBpcyBwcm9jZXNzZWQgaGVyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9lY2hvKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19lY2hvX3MgKmVjaG8sIHUxNiByeF9sZW4pCit7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0ID0gTlVMTDsKKwlpbnQgICAgICAgICAgICAgbGVuLCBweWxkX2xlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2xlbik7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlsZW4gPSBmY19sc19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJ4X2ZjaHMtPnNfaWQsCisJCQkgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJ4X2ZjaHMtPm94X2lkKTsKKworCS8qCisJICogQ29weSB0aGUgcGF5bG9hZCAoaWYgYW55KSBmcm9tIHRoZSBlY2hvIGZyYW1lCisJICovCisJcHlsZF9sZW4gPSByeF9sZW4gLSBzaXplb2Yoc3RydWN0IGZjaHNfcyk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHB5bGRfbGVuKTsKKworCWlmIChweWxkX2xlbiA+IGxlbikKKwkJbWVtY3B5KCgodTggKikgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSkgKworCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmY19lY2hvX3MpLCAoZWNobyArIDEpLAorCQkgICAgICAgKHB5bGRfbGVuIC0gc2l6ZW9mKHN0cnVjdCBmY19lY2hvX3MpKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIGJmYV9ycG9ydCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLAorCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIHB5bGRfbGVuLCAmZmNocywgTlVMTCwgTlVMTCwKKwkJICAgICAgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworLyoKKyAqIFByb2Nlc3MgaW5jb21pbmcgUk5JRC4KKyAqIFNpbmNlIGl0IGRvZXMgbm90IHJlcXVpcmUgYSBsb2dpbiwgaXQgaXMgcHJvY2Vzc2VkIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfcm5pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfcm5pZF9jbWRfcyAqcm5pZCwgdTE2IHJ4X2xlbikKK3sKKwlzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zIGNvbW1vbl9pZF9kYXRhOworCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zIGdlbl90b3BvX2RhdGE7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0ID0gTlVMTDsKKwl1MTYgICAgICAgIGxlbjsKKwl1MzIgICAgICAgIGRhdGFfZm9ybWF0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5kX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfbGVuKTsKKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCS8qCisJICogQ2hlY2sgTm9kZSBJbmRlbnRpZmljYXRpb24gRGF0YSBGb3JtYXQKKwkgKiBXZSBvbmx5IHN1cHBvcnQgR2VuZXJhbCBUb3BvbG9neSBEaXNjb3ZlcnkgRm9ybWF0LgorCSAqIEZvciBhbnkgb3RoZXIgcmVxdWVzdGVkIERhdGEgRm9ybWF0cywgd2UgcmV0dXJuIENvbW1vbiBOb2RlIElkIERhdGEKKwkgKiBvbmx5LCBhcyBwZXIgRkMtTFMuCisJICovCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJuaWQtPm5vZGVfaWRfZGF0YV9mb3JtYXQpOworCWlmIChybmlkLT5ub2RlX2lkX2RhdGFfZm9ybWF0ID09IFJOSURfTk9ERUlEX0RBVEFfRk9STUFUX0RJU0NPVkVSWSkgeworCQlkYXRhX2Zvcm1hdCA9IFJOSURfTk9ERUlEX0RBVEFfRk9STUFUX0RJU0NPVkVSWTsKKwkJLyoKKwkJICogR2V0IEdlbmVyYWwgdG9wb2xvZ3kgZGF0YSBmb3IgdGhpcyBwb3J0CisJCSAqLworCQliZmFfZnNfcG9ydF9nZXRfZ2VuX3RvcG9fZGF0YShwb3J0LCAmZ2VuX3RvcG9fZGF0YSk7CisJfSBlbHNlIHsKKwkJZGF0YV9mb3JtYXQgPSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9DT01NT047CisJfQorCisJLyoKKwkgKiBDb3B5IHRoZSBOb2RlIElkIEluZm8KKwkgKi8KKwljb21tb25faWRfZGF0YS5wb3J0X25hbWUgPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisJY29tbW9uX2lkX2RhdGEubm9kZV9uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9ud3duKHBvcnQpOworCisJbGVuID0gZmNfcm5pZF9hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJ4X2ZjaHMtPnNfaWQsCisJCQkJYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCwKKwkJCQlkYXRhX2Zvcm1hdCwgJmNvbW1vbl9pZF9kYXRhLCAmZ2VuX3RvcG9fZGF0YSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIGJmYV9ycG9ydCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLAorCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiAgRmlsbCBvdXQgR2VuZXJhbCBUb3BvbHBneSBEaXNjb3ZlcnkgRGF0YSBmb3IgUk5JRCBFTFMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZnNfcG9ydF9nZXRfZ2VuX3RvcG9fZGF0YShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyAqZ2VuX3RvcG9fZGF0YSkKK3sKKworCWJmYV9vc19tZW1zZXQoZ2VuX3RvcG9fZGF0YSwgMCwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zKSk7CisKKwlnZW5fdG9wb19kYXRhLT5hc3NvX3R5cGUgPSBiZmFfb3NfaHRvbmwoUk5JRF9BU1NPQ0lBVEVEX1RZUEVfSE9TVCk7CisJZ2VuX3RvcG9fZGF0YS0+cGh5X3BvcnRfbnVtID0gMDsJLyogQHRvZG8gKi8KKwlnZW5fdG9wb19kYXRhLT5udW1fYXR0YWNoZWRfbm9kZXMgPSBiZmFfb3NfaHRvbmwoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfb25saW5lX2FjdGlvbnMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5mYWJyaWMtPm9wZXJfdHlwZSk7CisKKwlfX3BvcnRfYWN0aW9uW3BvcnQtPmZhYnJpYy0+ZmFiX3R5cGVdLmluaXQocG9ydCk7CisJX19wb3J0X2FjdGlvbltwb3J0LT5mYWJyaWMtPmZhYl90eXBlXS5vbmxpbmUocG9ydCk7CisKKwliZmFfZmNzX3BvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9PTkxJTkUpOworCWJmYV9mY2JfcG9ydF9vbmxpbmUocG9ydC0+ZmNzLT5iZmFkLCBwb3J0LT5wb3J0X2NmZy5yb2xlcywKKwkJCXBvcnQtPmZhYnJpYy0+dmZfZHJ2LCAocG9ydC0+dnBvcnQgPT0gTlVMTCkgPworCQkJTlVMTCA6IHBvcnQtPnZwb3J0LT52cG9ydF9kcnYpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X29mZmxpbmVfYWN0aW9ucyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+ZmFicmljLT5vcGVyX3R5cGUpOworCisJX19wb3J0X2FjdGlvbltwb3J0LT5mYWJyaWMtPmZhYl90eXBlXS5vZmZsaW5lKHBvcnQpOworCisJaWYgKGJmYV9mY3NfZmFicmljX2lzX29ubGluZShwb3J0LT5mYWJyaWMpID09IEJGQV9UUlVFKSB7CisJCWJmYV9mY3NfcG9ydF9hZW5fcG9zdChwb3J0LCBCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1QpOworCX0gZWxzZSB7CisJCWJmYV9mY3NfcG9ydF9hZW5fcG9zdChwb3J0LCBCRkFfTFBPUlRfQUVOX09GRkxJTkUpOworCX0KKwliZmFfZmNiX3BvcnRfb2ZmbGluZShwb3J0LT5mY3MtPmJmYWQsIHBvcnQtPnBvcnRfY2ZnLnJvbGVzLAorCQkJcG9ydC0+ZmFicmljLT52Zl9kcnYsCisJCQkocG9ydC0+dnBvcnQgPT0gTlVMTCkgPyBOVUxMIDogcG9ydC0+dnBvcnQtPnZwb3J0X2Rydik7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnBvcnQtPnJwb3J0X3EpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmUocnBvcnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF91bmtub3duX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9hc3NlcnQoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfdW5rbm93bl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9hc3NlcnQoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfdW5rbm93bl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2RlbGV0ZWQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9mY3NfcG9ydF9hZW5fcG9zdChwb3J0LCBCRkFfTFBPUlRfQUVOX0RFTEVURSk7CisKKwkvKgorCSAqIEJhc2UgcG9ydCB3aWxsIGJlIGRlbGV0ZWQgYnkgdGhlIE9TIGRyaXZlcgorCSAqLworCWlmIChwb3J0LT52cG9ydCkgeworCQliZmFfZmNiX3BvcnRfZGVsZXRlKHBvcnQtPmZjcy0+YmZhZCwgcG9ydC0+cG9ydF9jZmcucm9sZXMsCisJCQlwb3J0LT5mYWJyaWMtPnZmX2RydiwKKwkJCXBvcnQtPnZwb3J0ID8gcG9ydC0+dnBvcnQtPnZwb3J0X2RydiA6IE5VTEwpOworCQliZmFfZmNzX3Zwb3J0X2RlbGV0ZV9jb21wKHBvcnQtPnZwb3J0KTsKKwl9IGVsc2UgeworCQliZmFfZmNzX2ZhYnJpY19wb3J0X2RlbGV0ZV9jb21wKHBvcnQtPmZhYnJpYyk7CisJfQorfQorCisKKworLyoqCisgKiAgZmNzX2xwb3J0X2FwaSBCRkEgRkNTIHBvcnQgQVBJCisgKi8KKy8qKgorICogICBNb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCit9CisKKy8qKgorICogICBNb2R1bGUgY2xlYW51cAorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKK30KKworLyoqCisgKiAJCVVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUgaGFuZGxpbmcuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF91Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqbHBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKQoreworCXUzMiAgICAgICAgcGlkID0gZmNocy0+c19pZDsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IE5VTEw7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWJmYV9zdGF0cyhscG9ydCwgdWZfcmVjdnMpOworCisJaWYgKCFiZmFfZmNzX3BvcnRfaXNfb25saW5lKGxwb3J0KSkgeworCQliZmFfc3RhdHMobHBvcnQsIHVmX3JlY3ZfZHJvcHMpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogRmlyc3QsIGhhbmRsZSBFTFNzIHRoYXQgZG9ub3QgcmVxdWlyZSBhIGxvZ2luLgorCSAqLworCS8qCisJICogSGFuZGxlIFBMT0dJIGZpcnN0CisJICovCisJaWYgKChmY2hzLT50eXBlID09IEZDX1RZUEVfRUxTKSAmJgorCQkoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX1BMT0dJKSkgeworCQliZmFfZmNzX3BvcnRfcGxvZ2kobHBvcnQsIGZjaHMsIChzdHJ1Y3QgZmNfbG9naV9zICopIGVsc19jbWQpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBIYW5kbGUgRUNITyBzZXBhcmF0ZWx5LgorCSAqLworCWlmICgoZmNocy0+dHlwZSA9PSBGQ19UWVBFX0VMUykgJiYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19FQ0hPKSkgeworCQliZmFfZmNzX3BvcnRfZWNobyhscG9ydCwgZmNocywKKwkJCShzdHJ1Y3QgZmNfZWNob19zICopIGVsc19jbWQsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSBSTklEIHNlcGFyYXRlbHkuCisJICovCisJaWYgKChmY2hzLT50eXBlID09IEZDX1RZUEVfRUxTKSAmJiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX1JOSUQpKSB7CisJCWJmYV9mY3NfcG9ydF9ybmlkKGxwb3J0LCBmY2hzLAorCQkJKHN0cnVjdCBmY19ybmlkX2NtZF9zICopIGVsc19jbWQsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBsb29rIGZvciBhIG1hdGNoaW5nIHJlbW90ZSBwb3J0IElECisJICovCisJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3BpZChscG9ydCwgcGlkKTsKKwlpZiAocnBvcnQpIHsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBmY2hzLT5zX2lkKTsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBmY2hzLT5kX2lkKTsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBmY2hzLT50eXBlKTsKKworCQliZmFfZmNzX3Jwb3J0X3VmX3JlY3YocnBvcnQsIGZjaHMsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBPbmx5IGhhbmRsZXMgRUxTIGZyYW1lcyBmb3Igbm93LgorCSAqLworCWlmIChmY2hzLT50eXBlICE9IEZDX1RZUEVfRUxTKSB7CisJCWJmYV90cmMobHBvcnQtPmZjcywgZmNocy0+dHlwZSk7CisJCWJmYV9hc3NlcnQoMCk7CisJCXJldHVybjsKKwl9CisKKwliZmFfdHJjKGxwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwlpZiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX1JTQ04pIHsKKwkJYmZhX2Zjc19wb3J0X3Njbl9wcm9jZXNzX3JzY24obHBvcnQsIGZjaHMsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX0xPR08pIHsKKwkJLyoqCisJCSAqIEB0b2RvIEhhbmRsZSBMT0dPIGZyYW1lcyByZWNlaXZlZC4KKwkJICovCisJCWJmYV90cmMobHBvcnQtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19QUkxJKSB7CisJCS8qKgorCQkgKiBAdG9kbyBIYW5kbGUgUFJMSSBmcmFtZXMgcmVjZWl2ZWQuCisJCSAqLworCQliZmFfdHJjKGxwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIFVuaGFuZGxlZCBFTFMgZnJhbWVzLiBTZW5kIGEgTFNfUkpULgorCSAqLworCWJmYV9mY3NfcG9ydF9zZW5kX2xzX3JqdChscG9ydCwgZmNocywgRkNfTFNfUkpUX1JTTl9DTURfTk9UX1NVUFAsCisJCQkJIEZDX0xTX1JKVF9FWFBfTk9fQURETF9JTkZPKTsKKworfQorCisvKioKKyAqICAgUElEIGJhc2VkIExvb2t1cCBmb3IgYSBSLVBvcnQgaW4gdGhlIFBvcnQgUi1Qb3J0IFF1ZXVlCisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKgorYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1MzIgcGlkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCisJbGlzdF9mb3JfZWFjaChxZSwgJnBvcnQtPnJwb3J0X3EpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAocnBvcnQtPnBpZCA9PSBwaWQpCisJCQlyZXR1cm4gcnBvcnQ7CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBpZCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogICBQV1dOIGJhc2VkIExvb2t1cCBmb3IgYSBSLVBvcnQgaW4gdGhlIFBvcnQgUi1Qb3J0IFF1ZXVlCisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKgorYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9wd3duKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKworCWxpc3RfZm9yX2VhY2gocWUsICZwb3J0LT5ycG9ydF9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJaWYgKHd3bl9pc19lcXVhbChycG9ydC0+cHd3biwgcHd3bikpCisJCQlyZXR1cm4gcnBvcnQ7CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIHB3d24pOworCXJldHVybiAoTlVMTCk7Cit9CisKKy8qKgorICogICBOV1dOIGJhc2VkIExvb2t1cCBmb3IgYSBSLVBvcnQgaW4gdGhlIFBvcnQgUi1Qb3J0IFF1ZXVlCisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKgorYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9ud3duKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3Qgbnd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKworCWxpc3RfZm9yX2VhY2gocWUsICZwb3J0LT5ycG9ydF9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJaWYgKHd3bl9pc19lcXVhbChycG9ydC0+bnd3biwgbnd3bikpCisJCQlyZXR1cm4gcnBvcnQ7CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIG53d24pOworCXJldHVybiAoTlVMTCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IHJwb3J0IG1vZHVsZSB3aGVuIG5ldyBycG9ydHMgYXJlIGRpc2NvdmVyZWQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9hZGRfcnBvcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkgICAgICAgc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJbGlzdF9hZGRfdGFpbCgmcnBvcnQtPnFlLCAmcG9ydC0+cnBvcnRfcSk7CisJcG9ydC0+bnVtX3Jwb3J0cysrOworfQorCisvKioKKyAqIENhbGxlZCBieSBycG9ydCBtb2R1bGUgdG8gd2hlbiBycG9ydHMgYXJlIGRlbGV0ZWQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9kZWxfcnBvcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkgICAgICAgc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZwb3J0LT5ycG9ydF9xLCBycG9ydCkpOworCWxpc3RfZGVsKCZycG9ydC0+cWUpOworCXBvcnQtPm51bV9ycG9ydHMtLTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9ERUxSUE9SVCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGZhYnJpYyBmb3IgYmFzZSBwb3J0IHdoZW4gZmFicmljIGxvZ2luIGlzIGNvbXBsZXRlLgorICogQ2FsbGVkIGJ5IHZwb3J0IGZvciB2aXJ0dWFsIHBvcnRzIHdoZW4gRkRJU0MgaXMgY29tcGxldGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9PTkxJTkUpOworfQorCisvKioKKyAqIENhbGxlZCBieSBmYWJyaWMgZm9yIGJhc2UgcG9ydCB3aGVuIGZhYnJpYyBnb2VzIG9mZmxpbmUuCisgKiBDYWxsZWQgYnkgdnBvcnQgZm9yIHZpcnR1YWwgcG9ydHMgd2hlbiB2aXJ0dWFsIHBvcnQgYmVjb21lcyBvZmZsaW5lLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocG9ydCwgQkZBX0ZDU19QT1JUX1NNX09GRkxJTkUpOworfQorCisvKioKKyAqIENhbGxlZCBieSBmYWJyaWMgdG8gZGVsZXRlIGJhc2UgbHBvcnQgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICoKKyAqIENhbGxlZCBieSB2cG9ydCB0byBkZWxldGUgbHBvcnQgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBTaG91bGQgY2FsbAorICogYmZhX2Zjc192cG9ydF9kZWxldGVfY29tcCgpIGZvciB2cG9ydHMgb24gY29tcGxldGlvbi4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocG9ydCwgQkZBX0ZDU19QT1JUX1NNX0RFTEVURSk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGZhYnJpYyBpbiBwcml2YXRlIGxvb3AgdG9wb2xvZ3kgdG8gcHJvY2VzcyBMSVAgZXZlbnQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9saXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworfQorCisvKioKKyAqIFJldHVybiBUUlVFIGlmIHBvcnQgaXMgb25saW5lLCBlbHNlIHJldHVybiBGQUxTRQorICovCitiZmFfYm9vbGVhbl90CitiZmFfZmNzX3BvcnRfaXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlyZXR1cm4gKGJmYV9zbV9jbXBfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX29ubGluZSkpOworfQorCisvKioKKyAqIExvZ2ljYWwgcG9ydCBpbml0aWFsaXphdGlvbiBvZiBiYXNlIG9yIHZpcnR1YWwgcG9ydC4KKyAqIENhbGxlZCBieSBmYWJyaWMgZm9yIGJhc2UgcG9ydCBvciBieSB2cG9ydCBmb3IgdmlydHVhbCBwb3J0cy4KKyAqLwordm9pZAorYmZhX2Zjc19scG9ydF9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqbHBvcnQsIHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJICAgdTE2IHZmX2lkLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLAorCQkgICBzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwlscG9ydC0+ZmNzID0gZmNzOworCWxwb3J0LT5mYWJyaWMgPSBiZmFfZmNzX3ZmX2xvb2t1cChmY3MsIHZmX2lkKTsKKwliZmFfb3NfYXNzaWduKGxwb3J0LT5wb3J0X2NmZywgKnBvcnRfY2ZnKTsKKwlscG9ydC0+dnBvcnQgPSB2cG9ydDsKKwlscG9ydC0+bHBfdGFnID0gKHZwb3J0KSA/IGJmYV9scHNfZ2V0X3RhZyh2cG9ydC0+bHBzKSA6CisJCQkgYmZhX2xwc19nZXRfdGFnKGxwb3J0LT5mYWJyaWMtPmxwcyk7CisKKwlJTklUX0xJU1RfSEVBRCgmbHBvcnQtPnJwb3J0X3EpOworCWxwb3J0LT5udW1fcnBvcnRzID0gMDsKKworCWxwb3J0LT5iZmFkX3BvcnQgPQorCQliZmFfZmNiX3BvcnRfbmV3KGZjcy0+YmZhZCwgbHBvcnQsIGxwb3J0LT5wb3J0X2NmZy5yb2xlcywKKwkJCQlscG9ydC0+ZmFicmljLT52Zl9kcnYsCisJCQkJdnBvcnQgPyB2cG9ydC0+dnBvcnRfZHJ2IDogTlVMTCk7CisJYmZhX2Zjc19wb3J0X2Flbl9wb3N0KGxwb3J0LCBCRkFfTFBPUlRfQUVOX05FVyk7CisKKwliZmFfc21fc2V0X3N0YXRlKGxwb3J0LCBiZmFfZmNzX3BvcnRfc21fdW5pbml0KTsKKwliZmFfc21fc2VuZF9ldmVudChscG9ydCwgQkZBX0ZDU19QT1JUX1NNX0NSRUFURSk7Cit9CisKKworCisvKioKKyAqICBmY3NfbHBvcnRfYXBpCisgKi8KKwordm9pZAorYmZhX2Zjc19wb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgc3RydWN0IGJmYV9wb3J0X2F0dHJfcyAqcG9ydF9hdHRyKQoreworCWlmIChiZmFfc21fY21wX3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUpKQorCQlwb3J0X2F0dHItPnBpZCA9IHBvcnQtPnBpZDsKKwllbHNlCisJCXBvcnRfYXR0ci0+cGlkID0gMDsKKworCXBvcnRfYXR0ci0+cG9ydF9jZmcgPSBwb3J0LT5wb3J0X2NmZzsKKworCWlmIChwb3J0LT5mYWJyaWMpIHsKKwkJcG9ydF9hdHRyLT5wb3J0X3R5cGUgPSBiZmFfZmNzX2ZhYnJpY19wb3J0X3R5cGUocG9ydC0+ZmFicmljKTsKKwkJcG9ydF9hdHRyLT5sb29wYmFjayA9IGJmYV9mY3NfZmFicmljX2lzX2xvb3BiYWNrKHBvcnQtPmZhYnJpYyk7CisJCXBvcnRfYXR0ci0+ZmFicmljX25hbWUgPSBiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19uYW1lKHBvcnQpOworCQltZW1jcHkocG9ydF9hdHRyLT5mYWJyaWNfaXBfYWRkciwKKwkJICAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX2lwYWRkcihwb3J0KSwKKwkJICAgICAgIEJGQV9GQ1NfRkFCUklDX0lQQUREUl9TWik7CisKKwkJaWYgKHBvcnQtPnZwb3J0ICE9IE5VTEwpCisJCQlwb3J0X2F0dHItPnBvcnRfdHlwZSA9IEJGQV9QUE9SVF9UWVBFX1ZQT1JUOworCisJfSBlbHNlIHsKKwkJcG9ydF9hdHRyLT5wb3J0X3R5cGUgPSBCRkFfUFBPUlRfVFlQRV9VTktOT1dOOworCQlwb3J0X2F0dHItPnN0YXRlID0gQkZBX1BPUlRfVU5JTklUOworCX0KKworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19wb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNGIyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfcG9ydC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc19wcG9ydC5jIEJGQSBGQ1MgUFBPUlQgKCBwaHlzaWNhbCBwb3J0KQorICovCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19mYWJyaWMuaD4KKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc19wb3J0LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIFBQT1JUKTsKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcHBvcnRfZXZlbnRfaGFuZGxlcih2b2lkICpjYmFyZywgYmZhX3Bwb3J0X2V2ZW50X3QgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcyAgICAgICpmY3MgPSBjYmFyZzsKKworCWJmYV90cmMoZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfTElOS1VQOgorCQliZmFfZmNzX2ZhYnJpY19saW5rX3VwKCZmY3MtPmZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfTElOS0RPV046CisJCWJmYV9mY3NfZmFicmljX2xpbmtfZG93bigmZmNzLT5mYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1RSVU5LX0xJTktET1dOOgorCQliZmFfYXNzZXJ0KDApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCit2b2lkCitiZmFfZmNzX3Bwb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV9wcG9ydF9ldmVudF9yZWdpc3RlcihmY3MtPmJmYSwgYmZhX2Zjc19wcG9ydF9ldmVudF9oYW5kbGVyLAorCQkJCSAgICAgZmNzKTsKK30KKwordm9pZAorYmZhX2Zjc19wcG9ydF9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3VmLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfdWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDAxZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3VmLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc191Zi5jIEJGQSBGQ1MgVUYgKCBVbnNvbGljaXRlZCBGcmFtZXMpCisgKi8KKworI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2ZhYnJpYy5oPgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmFicmljLmgiCisjaW5jbHVkZSAiZmNzX3VmLmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIFVGKTsKKworLyoqCisgKiAJCUJGQSBjYWxsYmFjayBmb3IgdW5zb2xpY2l0ZWQgZnJhbWUgcmVjZWl2ZSBoYW5kbGVyLgorICoKKyAqIEBwYXJhbVtpbl0JCWNiYXJnCQljYWxsYmFjayBhcmcgZm9yIHJlY2VpdmUgaGFuZGxlcgorICogQHBhcmFtW2luXQkJdWYJCXVuc29saWNpdGVkIGZyYW1lIGRlc2NyaXB0b3IKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdWZfcmVjdih2b2lkICpjYmFyZywgc3RydWN0IGJmYV91Zl9zICp1ZikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19zICAgICAgKmZjcyA9IChzdHJ1Y3QgYmZhX2Zjc19zICopIGNiYXJnOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAqZmNocyA9IGJmYV91Zl9nZXRfZnJtYnVmKHVmKTsKKwl1MTYgICAgICAgIGxlbiA9IGJmYV91Zl9nZXRfZnJtbGVuKHVmKTsKKwlzdHJ1Y3QgZmNfdmZ0X3MgICAgICAgKnZmdDsKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOworCisJLyoqCisJICogY2hlY2sgZm9yIFZGVCBoZWFkZXIKKwkgKi8KKwlpZiAoZmNocy0+cm91dGluZyA9PSBGQ19SVEdfRVhUX0hEUiAmJgorCQlmY2hzLT5jYXRfaW5mbyA9PSBGQ19DQVRfVkZUX0hEUikgeworCQliZmFfc3RhdHMoZmNzLCB1Zi50YWdnZWQpOworCQl2ZnQgPSBiZmFfdWZfZ2V0X2ZybWJ1Zih1Zik7CisJCWlmIChmY3MtPnBvcnRfdmZpZCA9PSB2ZnQtPnZmX2lkKQorCQkJZmFicmljID0gJmZjcy0+ZmFicmljOworCQllbHNlCisJCQlmYWJyaWMgPSBiZmFfZmNzX3ZmX2xvb2t1cChmY3MsICh1MTYpIHZmdC0+dmZfaWQpOworCisJCS8qKgorCQkgKiBkcm9wIGZyYW1lIGlmIHZmaWQgaXMgdW5rbm93bgorCQkgKi8KKwkJaWYgKCFmYWJyaWMpIHsKKwkJCWJmYV9hc3NlcnQoMCk7CisJCQliZmFfc3RhdHMoZmNzLCB1Zi52ZmlkX3Vua25vd24pOworCQkJYmZhX3VmX2ZyZWUodWYpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoqCisJCSAqIHNraXAgdmZ0IGhlYWRlcgorCQkgKi8KKwkJZmNocyA9IChzdHJ1Y3QgZmNoc19zICopICh2ZnQgKyAxKTsKKwkJbGVuIC09IHNpemVvZihzdHJ1Y3QgZmNfdmZ0X3MpOworCisJCWJmYV90cmMoZmNzLCB2ZnQtPnZmX2lkKTsKKwl9IGVsc2UgeworCQliZmFfc3RhdHMoZmNzLCB1Zi51bnRhZ2dlZCk7CisJCWZhYnJpYyA9ICZmY3MtPmZhYnJpYzsKKwl9CisKKwliZmFfdHJjKGZjcywgKCh1MzIgKikgZmNocylbMF0pOworCWJmYV90cmMoZmNzLCAoKHUzMiAqKSBmY2hzKVsxXSk7CisJYmZhX3RyYyhmY3MsICgodTMyICopIGZjaHMpWzJdKTsKKwliZmFfdHJjKGZjcywgKCh1MzIgKikgZmNocylbM10pOworCWJmYV90cmMoZmNzLCAoKHUzMiAqKSBmY2hzKVs0XSk7CisJYmZhX3RyYyhmY3MsICgodTMyICopIGZjaHMpWzVdKTsKKwliZmFfdHJjKGZjcywgbGVuKTsKKworCWJmYV9mY3NfZmFicmljX3VmX3JlY3YoZmFicmljLCBmY2hzLCBsZW4pOworCWJmYV91Zl9mcmVlKHVmKTsKK30KKwordm9pZAorYmZhX2Zjc191Zl9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfdWZfcmVjdl9yZWdpc3RlcihmY3MtPmJmYSwgYmZhX2Zjc191Zl9yZWN2LCBmY3MpOworfQorCit2b2lkCitiZmFfZmNzX3VmX21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV9mY3NfbW9kZXhpdF9jb21wKGZjcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1NGEwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjeHAuYwpAQCAtMCwwICsxLDc4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZpL2JmaV91Zi5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBGQ1hQKTsKK0JGQV9NT0RVTEUoZmN4cCk7CisKKy8qKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIF9fYmZhX2ZjeHBfc2VuZF9jYmZuKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkICAgICBoYWxfZmN4cF9yeF9wbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkgc3RydWN0IGJmaV9mY3hwX3NlbmRfcnNwX3MgKmZjeHBfcnNwKTsKK3N0YXRpYyB2b2lkICAgICBoYWxfZmN4cF90eF9wbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgcmVxbGVuLAorCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgc3RydWN0IGZjaHNfcyAqZmNocyk7CitzdGF0aWMgdm9pZAliZmFfZmN4cF9xcmVzdW1lKHZvaWQgKmNiYXJnKTsKK3N0YXRpYyB2b2lkCWJmYV9mY3hwX3F1ZXVlKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgIHN0cnVjdCBiZmlfZmN4cF9zZW5kX3JlcV9zICpzZW5kX3JlcSk7CisKKy8qKgorICogIGZjeHBfcHZ0IEJGQSBGQ1hQIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2NsYWltX2ZjeHBfcmVxX3JzcF9tZW0oc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSkKK3sKKwl1OCAgICAgICAgKmRtX2t2YSA9IE5VTEw7CisJdTY0ICAgICAgICBkbV9wYTsKKwl1MzIgICAgICAgIGJ1Zl9wb29sX3N6OworCisJZG1fa3ZhID0gYmZhX21lbWluZm9fZG1hX3ZpcnQobWkpOworCWRtX3BhID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWkpOworCisJYnVmX3Bvb2xfc3ogPSBtb2QtPnJlcV9wbGRfc3ogKiBtb2QtPm51bV9mY3hwczsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgZmN4cCByZXEgcGF5bG9hZCBsaXN0CisJICovCisJbW9kLT5yZXFfcGxkX2xpc3Rfa3ZhID0gZG1fa3ZhOworCW1vZC0+cmVxX3BsZF9saXN0X3BhID0gZG1fcGE7CisJZG1fa3ZhICs9IGJ1Zl9wb29sX3N6OworCWRtX3BhICs9IGJ1Zl9wb29sX3N6OworCWJmYV9vc19tZW1zZXQobW9kLT5yZXFfcGxkX2xpc3Rfa3ZhLCAwLCBidWZfcG9vbF9zeik7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGZjeHAgcnNwIHBheWxvYWQgbGlzdAorCSAqLworCWJ1Zl9wb29sX3N6ID0gbW9kLT5yc3BfcGxkX3N6ICogbW9kLT5udW1fZmN4cHM7CisJbW9kLT5yc3BfcGxkX2xpc3Rfa3ZhID0gZG1fa3ZhOworCW1vZC0+cnNwX3BsZF9saXN0X3BhID0gZG1fcGE7CisJZG1fa3ZhICs9IGJ1Zl9wb29sX3N6OworCWRtX3BhICs9IGJ1Zl9wb29sX3N6OworCWJmYV9vc19tZW1zZXQobW9kLT5yc3BfcGxkX2xpc3Rfa3ZhLCAwLCBidWZfcG9vbF9zeik7CisKKwliZmFfbWVtaW5mb19kbWFfdmlydChtaSkgPSBkbV9rdmE7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWkpID0gZG1fcGE7Cit9CisKK3N0YXRpYyB2b2lkCitjbGFpbV9mY3hwc19tZW0oc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSkKK3sKKwl1MTYgICAgICAgIGk7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwlmY3hwID0gKHN0cnVjdCBiZmFfZmN4cF9zICopIGJmYV9tZW1pbmZvX2t2YShtaSk7CisJYmZhX29zX21lbXNldChmY3hwLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9mY3hwX3MpICogbW9kLT5udW1fZmN4cHMpOworCisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+ZmN4cF9mcmVlX3EpOworCUlOSVRfTElTVF9IRUFEKCZtb2QtPmZjeHBfYWN0aXZlX3EpOworCisJbW9kLT5mY3hwX2xpc3QgPSBmY3hwOworCisJZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX2ZjeHBzOyBpKyspIHsKKwkJZmN4cC0+ZmN4cF9tb2QgPSBtb2Q7CisJCWZjeHAtPmZjeHBfdGFnID0gaTsKKworCQlsaXN0X2FkZF90YWlsKCZmY3hwLT5xZSwgJm1vZC0+ZmN4cF9mcmVlX3EpOworCQliZmFfcmVxcV93aW5pdCgmZmN4cC0+cmVxcV93cWUsIGJmYV9mY3hwX3FyZXN1bWUsIGZjeHApOworCQlmY3hwLT5yZXFxX3dhaXRpbmcgPSBCRkFfRkFMU0U7CisKKwkJZmN4cCA9IGZjeHAgKyAxOworCX0KKworCWJmYV9tZW1pbmZvX2t2YShtaSkgPSAodm9pZCAqKWZjeHA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICpuZG1fbGVuLAorCQl1MzIgKmRtX2xlbikKK3sKKwl1MTYgICAgICAgIG51bV9mY3hwX3JlcXMgPSBjZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXM7CisKKwlpZiAobnVtX2ZjeHBfcmVxcyA9PSAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFjY291bnQgZm9yIHJlcS9yc3AgcGF5bG9hZAorCSAqLworCSpkbV9sZW4gKz0gQkZBX0ZDWFBfTUFYX0lCVUZfU1ogKiBudW1fZmN4cF9yZXFzOworCWlmIChjZmctPmRydmNmZy5taW5fY2ZnKQorCQkqZG1fbGVuICs9IEJGQV9GQ1hQX01BWF9JQlVGX1NaICogbnVtX2ZjeHBfcmVxczsKKwllbHNlCisJCSpkbV9sZW4gKz0gQkZBX0ZDWFBfTUFYX0xCVUZfU1ogKiBudW1fZmN4cF9yZXFzOworCisJLyoKKwkgKiBBY2NvdW50IGZvciBmY3hwIHN0cnVjdHMKKwkgKi8KKwkqbmRtX2xlbiArPSBzaXplb2Yoc3RydWN0IGJmYV9mY3hwX3MpICogbnVtX2ZjeHBfcmVxczsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IEJGQV9GQ1hQX01PRChiZmEpOworCisJYmZhX29zX21lbXNldChtb2QsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MpKTsKKwltb2QtPmJmYSA9IGJmYTsKKwltb2QtPm51bV9mY3hwcyA9IGNmZy0+ZndjZmcubnVtX2ZjeHBfcmVxczsKKworCS8qKgorCSAqIEluaXRpYWxpemUgRkNYUCByZXF1ZXN0IGFuZCByZXNwb25zZSBwYXlsb2FkIHNpemVzLgorCSAqLworCW1vZC0+cmVxX3BsZF9zeiA9IG1vZC0+cnNwX3BsZF9zeiA9IEJGQV9GQ1hQX01BWF9JQlVGX1NaOworCWlmICghY2ZnLT5kcnZjZmcubWluX2NmZykKKwkJbW9kLT5yc3BfcGxkX3N6ID0gQkZBX0ZDWFBfTUFYX0xCVUZfU1o7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT53YWl0X3EpOworCisJY2xhaW1fZmN4cF9yZXFfcnNwX21lbShtb2QsIG1lbWluZm8pOworCWNsYWltX2ZjeHBzX21lbShtb2QsIG1lbWluZm8pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gQkZBX0ZDWFBfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZtb2QtPmZjeHBfYWN0aXZlX3EpIHsKKwkJZmN4cCA9IChzdHJ1Y3QgYmZhX2ZjeHBfcyAqKSBxZTsKKwkJaWYgKGZjeHAtPmNhbGxlciA9PSBOVUxMKSB7CisJCQlmY3hwLT5zZW5kX2NiZm4oZmN4cC0+Y2FsbGVyLCBmY3hwLCBmY3hwLT5zZW5kX2NiYXJnLAorCQkJCQlCRkFfU1RBVFVTX0lPQ19GQUlMVVJFLCAwLCAwLCBOVUxMKTsKKwkJCWJmYV9mY3hwX2ZyZWUoZmN4cCk7CisJCX0gZWxzZSB7CisJCQlmY3hwLT5yc3Bfc3RhdHVzID0gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwkJCWJmYV9jYl9xdWV1ZShiZmEsICZmY3hwLT5oY2JfcWUsCisJCQkJICAgICAgX19iZmFfZmN4cF9zZW5kX2NiZm4sIGZjeHApOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IGJmYV9mY3hwX3MgKgorYmZhX2ZjeHBfZ2V0KHN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqZm0pCit7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfcV9kZXEoJmZtLT5mY3hwX2ZyZWVfcSwgJmZjeHApOworCisJaWYgKGZjeHApCisJCWxpc3RfYWRkX3RhaWwoJmZjeHAtPnFlLCAmZm0tPmZjeHBfYWN0aXZlX3EpOworCisJcmV0dXJuIChmY3hwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX3B1dChzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IGZjeHAtPmZjeHBfbW9kOworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyAqd3FlOworCisJYmZhX3FfZGVxKCZtb2QtPndhaXRfcSwgJndxZSk7CisJaWYgKHdxZSkgeworCQliZmFfdHJjKG1vZC0+YmZhLCBmY3hwLT5mY3hwX3RhZyk7CisJCXdxZS0+YWxsb2NfY2Jmbih3cWUtPmFsbG9jX2NiYXJnLCBmY3hwKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmbW9kLT5mY3hwX2FjdGl2ZV9xLCBmY3hwKSk7CisJbGlzdF9kZWwoJmZjeHAtPnFlKTsKKwlsaXN0X2FkZF90YWlsKCZmY3hwLT5xZSwgJm1vZC0+ZmN4cF9mcmVlX3EpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfbnVsbF9jb21wKHZvaWQgKmJmYWRfZmN4cCwgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkgICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkgICAgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJLyoqZGlzY2FyZGVkIGZjeHAgY29tcGxldGlvbiAqLworfQorCitzdGF0aWMgdm9pZAorX19iZmFfZmN4cF9zZW5kX2NiZm4odm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAgPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkgeworCQlmY3hwLT5zZW5kX2NiZm4oZmN4cC0+Y2FsbGVyLCBmY3hwLCBmY3hwLT5zZW5kX2NiYXJnLAorCQkJCWZjeHAtPnJzcF9zdGF0dXMsIGZjeHAtPnJzcF9sZW4sCisJCQkJZmN4cC0+cmVzaWR1ZV9sZW4sICZmY3hwLT5yc3BfZmNocyk7CisJfSBlbHNlIHsKKwkJYmZhX2ZjeHBfZnJlZShmY3hwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitoYWxfZmN4cF9zZW5kX2NvbXAoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfZmN4cF9zZW5kX3JzcF9zICpmY3hwX3JzcCkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MJKm1vZCA9IEJGQV9GQ1hQX01PRChiZmEpOworCXN0cnVjdCBiZmFfZmN4cF9zIAkqZmN4cDsKKwl1MTYJCWZjeHBfdGFnID0gYmZhX29zX250b2hzKGZjeHBfcnNwLT5mY3hwX3RhZyk7CisKKwliZmFfdHJjKGJmYSwgZmN4cF90YWcpOworCisJZmN4cF9yc3AtPnJzcF9sZW4gPSBiZmFfb3NfbnRvaGwoZmN4cF9yc3AtPnJzcF9sZW4pOworCisJLyoqCisJICogQHRvZG8gZi93IHNob3VsZCBub3Qgc2V0IHJlc2lkdWUgdG8gbm9uLTAgd2hlbiBldmVyeXRoaW5nCisJICogICAgICAgaXMgcmVjZWl2ZWQuCisJICovCisJaWYgKGZjeHBfcnNwLT5yZXFfc3RhdHVzID09IEJGQV9TVEFUVVNfT0spCisJCWZjeHBfcnNwLT5yZXNpZHVlX2xlbiA9IDA7CisJZWxzZQorCQlmY3hwX3JzcC0+cmVzaWR1ZV9sZW4gPSBiZmFfb3NfbnRvaGwoZmN4cF9yc3AtPnJlc2lkdWVfbGVuKTsKKworCWZjeHAgPSBCRkFfRkNYUF9GUk9NX1RBRyhtb2QsIGZjeHBfdGFnKTsKKworCWJmYV9hc3NlcnQoZmN4cC0+c2VuZF9jYmZuICE9IE5VTEwpOworCisJaGFsX2ZjeHBfcnhfcGxvZyhtb2QtPmJmYSwgZmN4cCwgZmN4cF9yc3ApOworCisJaWYgKGZjeHAtPnNlbmRfY2JmbiAhPSBOVUxMKSB7CisJCWlmIChmY3hwLT5jYWxsZXIgPT0gTlVMTCkgeworCQkJYmZhX3RyYyhtb2QtPmJmYSwgZmN4cC0+ZmN4cF90YWcpOworCisJCQlmY3hwLT5zZW5kX2NiZm4oZmN4cC0+Y2FsbGVyLCBmY3hwLCBmY3hwLT5zZW5kX2NiYXJnLAorCQkJCQlmY3hwX3JzcC0+cmVxX3N0YXR1cywgZmN4cF9yc3AtPnJzcF9sZW4sCisJCQkJCWZjeHBfcnNwLT5yZXNpZHVlX2xlbiwgJmZjeHBfcnNwLT5mY2hzKTsKKwkJCS8qCisJCQkgKiBmY3hwIGF1dG9tYXRpY2FsbHkgZnJlZWQgb24gcmV0dXJuIGZyb20gdGhlIGNhbGxiYWNrCisJCQkgKi8KKwkJCWJmYV9mY3hwX2ZyZWUoZmN4cCk7CisJCX0gZWxzZSB7CisJCQliZmFfdHJjKG1vZC0+YmZhLCBmY3hwLT5mY3hwX3RhZyk7CisJCQlmY3hwLT5yc3Bfc3RhdHVzID0gZmN4cF9yc3AtPnJlcV9zdGF0dXM7CisJCQlmY3hwLT5yc3BfbGVuID0gZmN4cF9yc3AtPnJzcF9sZW47CisJCQlmY3hwLT5yZXNpZHVlX2xlbiA9IGZjeHBfcnNwLT5yZXNpZHVlX2xlbjsKKwkJCWZjeHAtPnJzcF9mY2hzID0gZmN4cF9yc3AtPmZjaHM7CisKKwkJCWJmYV9jYl9xdWV1ZShiZmEsICZmY3hwLT5oY2JfcWUsCisJCQkJICAgICAgX19iZmFfZmN4cF9zZW5kX2NiZm4sIGZjeHApOworCQl9CisJfSBlbHNlIHsKKwkJYmZhX3RyYyhiZmEsIGZjeHBfdGFnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitoYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzdHJ1Y3QgYmZpX3NnZV9zICpzZ2UsIHUzMiByZXFsZW4sIHU2NCByZXFfcGEpCit7CisJdW5pb24gYmZpX2FkZHJfdSAgICAgIHNnYV96ZXJvID0geyB7MH0gfTsKKworCXNnZS0+c2dfbGVuID0gcmVxbGVuOworCXNnZS0+ZmxhZ3MgPSBCRklfU0dFX0RBVEFfTEFTVDsKKwliZmFfZG1hX2FkZHJfc2V0KHNnZVswXS5zZ2EsIHJlcV9wYSk7CisJYmZhX3NnZV90b19iZShzZ2UpOworCXNnZSsrOworCisJc2dlLT5zZ2EgPSBzZ2FfemVybzsKKwlzZ2UtPnNnX2xlbiA9IHJlcWxlbjsKKwlzZ2UtPmZsYWdzID0gQkZJX1NHRV9QR0RMRU47CisJYmZhX3NnZV90b19iZShzZ2UpOworfQorCitzdGF0aWMgdm9pZAoraGFsX2ZjeHBfdHhfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHJlcWxlbiwgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCSBzdHJ1Y3QgZmNoc19zICpmY2hzKQoreworCS8qCisJICogVE9ETzogVFggb3hfaWQKKwkgKi8KKwlpZiAocmVxbGVuID4gMCkgeworCQlpZiAoZmN4cC0+dXNlX2lyZXFidWYpIHsKKwkJCXUzMiAgICAgICAgcGxkX3cwID0KKwkJCQkqKCh1MzIgKikgQkZBX0ZDWFBfUkVRX1BMRChmY3hwKSk7CisKKwkJCWJmYV9wbG9nX2ZjaGRyX2FuZF9wbChiZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMX0ZDWFAsCisJCQkJQkZBX1BMX0VJRF9UWCwKKwkJCQlyZXFsZW4gKyBzaXplb2Yoc3RydWN0IGZjaHNfcyksIGZjaHMsIHBsZF93MCk7CisJCX0gZWxzZSB7CisJCQliZmFfcGxvZ19mY2hkcihiZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMX0ZDWFAsCisJCQkJQkZBX1BMX0VJRF9UWCwgcmVxbGVuICsgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpLAorCQkJCWZjaHMpOworCQl9CisJfSBlbHNlIHsKKwkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLCBCRkFfUExfRUlEX1RYLAorCQkJICAgICAgIHJlcWxlbiArIHNpemVvZihzdHJ1Y3QgZmNoc19zKSwgZmNocyk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFsX2ZjeHBfcnhfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCSBzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yc3BfcyAqZmN4cF9yc3ApCit7CisJaWYgKGZjeHBfcnNwLT5yc3BfbGVuID4gMCkgeworCQlpZiAoZmN4cC0+dXNlX2lyc3BidWYpIHsKKwkJCXUzMiAgICAgICAgcGxkX3cwID0KKwkJCQkqKCh1MzIgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKSk7CisKKwkJCWJmYV9wbG9nX2ZjaGRyX2FuZF9wbChiZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMX0ZDWFAsCisJCQkJCSAgICAgIEJGQV9QTF9FSURfUlgsCisJCQkJCSAgICAgICh1MTYpIGZjeHBfcnNwLT5yc3BfbGVuLAorCQkJCQkgICAgICAmZmN4cF9yc3AtPmZjaHMsIHBsZF93MCk7CisJCX0gZWxzZSB7CisJCQliZmFfcGxvZ19mY2hkcihiZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMX0ZDWFAsCisJCQkJICAgICAgIEJGQV9QTF9FSURfUlgsCisJCQkJICAgICAgICh1MTYpIGZjeHBfcnNwLT5yc3BfbGVuLAorCQkJCSAgICAgICAmZmN4cF9yc3AtPmZjaHMpOworCQl9CisJfSBlbHNlIHsKKwkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLCBCRkFfUExfRUlEX1JYLAorCQkJICAgICAgICh1MTYpIGZjeHBfcnNwLT5yc3BfbGVuLCAmZmN4cF9yc3AtPmZjaHMpOworCX0KK30KKworLyoqCisgKiBIYW5kbGVyIHRvIHJlc3VtZSBzZW5kaW5nIGZjeHAgd2hlbiBzcGFjZSBpbiBhdmFpbGFibGUgaW4gY3BlIHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfcXJlc3VtZSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfcwkJKmZjeHAgPSBjYmFyZzsKKwlzdHJ1Y3QgYmZhX3MJCQkqYmZhID0gZmN4cC0+ZmN4cF9tb2QtPmJmYTsKKwlzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yZXFfcwkqc2VuZF9yZXE7CisKKwlmY3hwLT5yZXFxX3dhaXRpbmcgPSBCRkFfRkFMU0U7CisJc2VuZF9yZXEgPSBiZmFfcmVxcV9uZXh0KGJmYSwgQkZBX1JFUVFfRkNYUCk7CisJYmZhX2ZjeHBfcXVldWUoZmN4cCwgc2VuZF9yZXEpOworfQorCisvKioKKyAqIFF1ZXVlIGZjeHAgc2VuZCByZXF1ZXN0IHRvIGZvaW1yd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3hwX3F1ZXVlKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCBzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yZXFfcyAqc2VuZF9yZXEpCit7CisJc3RydWN0IGJmYV9zICAgICAgCQkqYmZhID0gZmN4cC0+ZmN4cF9tb2QtPmJmYTsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcmVxX2luZm9fcwkqcmVxaSA9ICZmY3hwLT5yZXFfaW5mbzsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcnNwX2luZm9fcwkqcnNwaSA9ICZmY3hwLT5yc3BfaW5mbzsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MJCSpycG9ydCA9IHJlcWktPmJmYV9ycG9ydDsKKworCWJmaV9oMmlfc2V0KHNlbmRfcmVxLT5taCwgQkZJX01DX0ZDWFAsIEJGSV9GQ1hQX0gySV9TRU5EX1JFUSwKKwkJCWJmYV9scHVpZChiZmEpKTsKKworCXNlbmRfcmVxLT5mY3hwX3RhZyA9IGJmYV9vc19odG9ucyhmY3hwLT5mY3hwX3RhZyk7CisJaWYgKHJwb3J0KSB7CisJCXNlbmRfcmVxLT5ycG9ydF9md19obmRsID0gcnBvcnQtPmZ3X2hhbmRsZTsKKwkJc2VuZF9yZXEtPm1heF9mcm1zeiA9IGJmYV9vc19odG9ucyhycG9ydC0+cnBvcnRfaW5mby5tYXhfZnJtc3opOworCQlpZiAoc2VuZF9yZXEtPm1heF9mcm1zeiA9PSAwKQorCQkJc2VuZF9yZXEtPm1heF9mcm1zeiA9IGJmYV9vc19odG9ucyhGQ19NQVhfUERVU1opOworCX0gZWxzZSB7CisJCXNlbmRfcmVxLT5ycG9ydF9md19obmRsID0gMDsKKwkJc2VuZF9yZXEtPm1heF9mcm1zeiA9IGJmYV9vc19odG9ucyhGQ19NQVhfUERVU1opOworCX0KKworCXNlbmRfcmVxLT52Zl9pZCA9IGJmYV9vc19odG9ucyhyZXFpLT52Zl9pZCk7CisJc2VuZF9yZXEtPmxwX3RhZyA9IHJlcWktPmxwX3RhZzsKKwlzZW5kX3JlcS0+Y2xhc3MgPSByZXFpLT5jbGFzczsKKwlzZW5kX3JlcS0+cnNwX3RpbWVvdXQgPSByc3BpLT5yc3BfdGltZW91dDsKKwlzZW5kX3JlcS0+Y3RzID0gcmVxaS0+Y3RzOworCXNlbmRfcmVxLT5mY2hzID0gcmVxaS0+ZmNoczsKKworCXNlbmRfcmVxLT5yZXFfbGVuID0gYmZhX29zX2h0b25sKHJlcWktPnJlcV90b3RfbGVuKTsKKwlzZW5kX3JlcS0+cnNwX21heGxlbiA9IGJmYV9vc19odG9ubChyc3BpLT5yc3BfbWF4bGVuKTsKKworCS8qCisJICogc2V0dXAgcmVxIHNnbGVzCisJICovCisJaWYgKGZjeHAtPnVzZV9pcmVxYnVmID09IDEpIHsKKwkJaGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc2VuZF9yZXEtPnJlcV9zZ2UsIHJlcWktPnJlcV90b3RfbGVuLAorCQkJCQlCRkFfRkNYUF9SRVFfUExEX1BBKGZjeHApKTsKKwl9IGVsc2UgeworCQlpZiAoZmN4cC0+bnJlcV9zZ2xlcyA+IDApIHsKKwkJCWJmYV9hc3NlcnQoZmN4cC0+bnJlcV9zZ2xlcyA9PSAxKTsKKwkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yZXFfc2dlLAorCQkJCQkJcmVxaS0+cmVxX3RvdF9sZW4sCisJCQkJCQlmY3hwLT5yZXFfc2dhX2NiZm4oZmN4cC0+Y2FsbGVyLAorCQkJCQkJCQkgICAwKSk7CisJCX0gZWxzZSB7CisJCQliZmFfYXNzZXJ0KHJlcWktPnJlcV90b3RfbGVuID09IDApOworCQkJaGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc2VuZF9yZXEtPnJzcF9zZ2UsIDAsIDApOworCQl9CisJfQorCisJLyoKKwkgKiBzZXR1cCByc3Agc2dsZXMKKwkgKi8KKwlpZiAoZmN4cC0+dXNlX2lyc3BidWYgPT0gMSkgeworCQliZmFfYXNzZXJ0KHJzcGktPnJzcF9tYXhsZW4gPD0gQkZBX0ZDWFBfTUFYX0xCVUZfU1opOworCisJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLCByc3BpLT5yc3BfbWF4bGVuLAorCQkJCQlCRkFfRkNYUF9SU1BfUExEX1BBKGZjeHApKTsKKworCX0gZWxzZSB7CisJCWlmIChmY3hwLT5ucnNwX3NnbGVzID4gMCkgeworCQkJYmZhX2Fzc2VydChmY3hwLT5ucnNwX3NnbGVzID09IDEpOworCQkJaGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc2VuZF9yZXEtPnJzcF9zZ2UsCisJCQkJCQlyc3BpLT5yc3BfbWF4bGVuLAorCQkJCQkJZmN4cC0+cnNwX3NnYV9jYmZuKGZjeHAtPmNhbGxlciwKKwkJCQkJCQkJICAgMCkpOworCQl9IGVsc2UgeworCQkJYmZhX2Fzc2VydChyc3BpLT5yc3BfbWF4bGVuID09IDApOworCQkJaGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc2VuZF9yZXEtPnJzcF9zZ2UsIDAsIDApOworCQl9CisJfQorCisJaGFsX2ZjeHBfdHhfcGxvZyhiZmEsIHJlcWktPnJlcV90b3RfbGVuLCBmY3hwLCAmcmVxaS0+ZmNocyk7CisKKwliZmFfcmVxcV9wcm9kdWNlKGJmYSwgQkZBX1JFUVFfRkNYUCk7CisKKwliZmFfdHJjKGJmYSwgYmZhX3JlcXFfcGkoYmZhLCBCRkFfUkVRUV9GQ1hQKSk7CisJYmZhX3RyYyhiZmEsIGJmYV9yZXFxX2NpKGJmYSwgQkZBX1JFUVFfRkNYUCkpOworfQorCisKKy8qKgorICogIGhhbF9mY3hwX2FwaSBCRkEgRkNYUCBBUEkKKyAqLworCisvKioKKyAqIEFsbG9jYXRlIGFuIEZDWFAgaW5zdGFuY2UgdG8gc2VuZCBhIHJlc3BvbnNlIG9yIHRvIHNlbmQgYSByZXF1ZXN0CisgKiB0aGF0IGhhcyBhIHJlc3BvbnNlLiBSZXF1ZXN0L3Jlc3BvbnNlIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBieSBjYWxsZXIuCisgKgorICogQHBhcmFtW2luXQliZmEJCUJGQSBiZmEgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0JbnJlcV9zZ2xlcwlOdW1iZXIgb2YgU0cgZWxlbWVudHMgcmVxdWlyZWQgZm9yIHJlcXVlc3QKKyAqIAkJCQlidWZmZXIuIDAsIGlmIGZjeHAgaW50ZXJuYWwgYnVmZmVycyBhcmUJdXNlZC4KKyAqIAkJCQlVc2UgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZigpIHRvIGdldCB0aGUKKyAqIAkJCQlpbnRlcm5hbCByZXEgYnVmZmVyLgorICogQHBhcmFtW2luXQlyZXFfc2dsZXMJU0cgZWxlbWVudHMgZGVzY3JpYmluZyByZXF1ZXN0IGJ1ZmZlci4gV2lsbCBiZQorICogCQkJCWNvcGllZCBpbiBieSBCRkEgYW5kIGhlbmNlIGNhbiBiZSBmcmVlZCBvbgorICogCQkJCXJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uCisgKiBAcGFyYW1baW5dCWdldF9yZXFfc2dhCWZ1bmN0aW9uIHB0ciB0byBiZSBjYWxsZWQgdG8gZ2V0IGEgcmVxdWVzdCBTRworICogCQkJCUFkZHJlc3MgKGdpdmVuIHRoZSBzZ2UgaW5kZXgpLgorICogQHBhcmFtW2luXQlnZXRfcmVxX3NnbGVuCWZ1bmN0aW9uIHB0ciB0byBiZSBjYWxsZWQgdG8gZ2V0IGEgcmVxdWVzdCBTRworICogCQkJCWxlbiAoZ2l2ZW4gdGhlIHNnZSBpbmRleCkuCisgKiBAcGFyYW1baW5dCWdldF9yc3Bfc2dhCWZ1bmN0aW9uIHB0ciB0byBiZSBjYWxsZWQgdG8gZ2V0IGEgcmVzcG9uc2UgU0cKKyAqIAkJCQlBZGRyZXNzIChnaXZlbiB0aGUgc2dlIGluZGV4KS4KKyAqIEBwYXJhbVtpbl0JZ2V0X3JzcF9zZ2xlbglmdW5jdGlvbiBwdHIgdG8gYmUgY2FsbGVkIHRvIGdldCBhIHJlc3BvbnNlIFNHCisgKiAJCQkJbGVuIChnaXZlbiB0aGUgc2dlIGluZGV4KS4KKyAqCisgKiBAcmV0dXJuIEZDWFAgaW5zdGFuY2UuIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IGJmYV9mY3hwX3MgKgorYmZhX2ZjeHBfYWxsb2Modm9pZCAqY2FsbGVyLCBzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IG5yZXFfc2dsZXMsCisJCQlpbnQgbnJzcF9zZ2xlcywgYmZhX2ZjeHBfZ2V0X3NnYWRkcl90IHJlcV9zZ2FfY2JmbiwKKwkJCWJmYV9mY3hwX2dldF9zZ2xlbl90IHJlcV9zZ2xlbl9jYmZuLAorCQkJYmZhX2ZjeHBfZ2V0X3NnYWRkcl90IHJzcF9zZ2FfY2JmbiwKKwkJCWJmYV9mY3hwX2dldF9zZ2xlbl90IHJzcF9zZ2xlbl9jYmZuKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwID0gTlVMTDsKKwl1MzIgICAgICAgIG5yZXFfc2dwZywgbnJzcF9zZ3BnOworCisJYmZhX2Fzc2VydChiZmEgIT0gTlVMTCk7CisKKwlmY3hwID0gYmZhX2ZjeHBfZ2V0KEJGQV9GQ1hQX01PRChiZmEpKTsKKwlpZiAoZmN4cCA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJYmZhX3RyYyhiZmEsIGZjeHAtPmZjeHBfdGFnKTsKKworCWZjeHAtPmNhbGxlciA9IGNhbGxlcjsKKworCWlmIChucmVxX3NnbGVzID09IDApIHsKKwkJZmN4cC0+dXNlX2lyZXFidWYgPSAxOworCX0gZWxzZSB7CisJCWJmYV9hc3NlcnQocmVxX3NnYV9jYmZuICE9IE5VTEwpOworCQliZmFfYXNzZXJ0KHJlcV9zZ2xlbl9jYmZuICE9IE5VTEwpOworCisJCWZjeHAtPnVzZV9pcmVxYnVmID0gMDsKKwkJZmN4cC0+cmVxX3NnYV9jYmZuID0gcmVxX3NnYV9jYmZuOworCQlmY3hwLT5yZXFfc2dsZW5fY2JmbiA9IHJlcV9zZ2xlbl9jYmZuOworCisJCWZjeHAtPm5yZXFfc2dsZXMgPSBucmVxX3NnbGVzOworCisJCS8qCisJCSAqIGFsbG9jIHJlcXVpcmVkIHNncGdzCisJCSAqLworCQlpZiAobnJlcV9zZ2xlcyA+IEJGSV9TR0VfSU5MSU5FKSB7CisJCQlucmVxX3NncGcgPSBCRkFfU0dQR19OUEFHRShucmVxX3NnbGVzKTsKKworCQkJaWYgKGJmYV9zZ3BnX21hbGxvYworCQkJICAgIChiZmEsICZmY3hwLT5yZXFfc2dwZ19xLCBucmVxX3NncGcpCisJCQkgICAgIT0gQkZBX1NUQVRVU19PSykgeworCQkJCS8qIGJmYV9zZ3BnX3dhaXQoYmZhLCAmZmN4cC0+cmVxX3NncGdfd3FlLAorCQkJCW5yZXFfc2dwZyk7ICovCisJCQkJLyoKKwkJCQkgKiBUT0RPCisJCQkJICovCisJCQl9CisJCX0KKwl9CisKKwlpZiAobnJzcF9zZ2xlcyA9PSAwKSB7CisJCWZjeHAtPnVzZV9pcnNwYnVmID0gMTsKKwl9IGVsc2UgeworCQliZmFfYXNzZXJ0KHJzcF9zZ2FfY2JmbiAhPSBOVUxMKTsKKwkJYmZhX2Fzc2VydChyc3Bfc2dsZW5fY2JmbiAhPSBOVUxMKTsKKworCQlmY3hwLT51c2VfaXJzcGJ1ZiA9IDA7CisJCWZjeHAtPnJzcF9zZ2FfY2JmbiA9IHJzcF9zZ2FfY2JmbjsKKwkJZmN4cC0+cnNwX3NnbGVuX2NiZm4gPSByc3Bfc2dsZW5fY2JmbjsKKworCQlmY3hwLT5ucnNwX3NnbGVzID0gbnJzcF9zZ2xlczsKKwkJLyoKKwkJICogYWxsb2MgcmVxdWlyZWQgc2dwZ3MKKwkJICovCisJCWlmIChucnNwX3NnbGVzID4gQkZJX1NHRV9JTkxJTkUpIHsKKwkJCW5yc3Bfc2dwZyA9IEJGQV9TR1BHX05QQUdFKG5yZXFfc2dsZXMpOworCisJCQlpZiAoYmZhX3NncGdfbWFsbG9jCisJCQkgICAgKGJmYSwgJmZjeHAtPnJzcF9zZ3BnX3EsIG5yc3Bfc2dwZykKKwkJCSAgICAhPSBCRkFfU1RBVFVTX09LKSB7CisJCQkJLyogYmZhX3NncGdfd2FpdChiZmEsICZmY3hwLT5yc3Bfc2dwZ193cWUsCisJCQkJbnJzcF9zZ3BnKTsgKi8KKwkJCQkvKgorCQkJCSAqIFRPRE8KKwkJCQkgKi8KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAoZmN4cCk7Cit9CisKKy8qKgorICogR2V0IHRoZSBpbnRlcm5hbCByZXF1ZXN0IGJ1ZmZlciBwb2ludGVyCisgKgorICogQHBhcmFtW2luXQlmY3hwCUJGQSBmY3hwIHBvaW50ZXIKKyAqCisgKiBAcmV0dXJuIAkJcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgcmVxdWVzdCBidWZmZXIKKyAqLwordm9pZCAqCitiZmFfZmN4cF9nZXRfcmVxYnVmKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gZmN4cC0+ZmN4cF9tb2Q7CisJdm9pZAkqcmVxYnVmOworCisJYmZhX2Fzc2VydChmY3hwLT51c2VfaXJlcWJ1ZiA9PSAxKTsKKwlyZXFidWYgPSAoKHU4ICopbW9kLT5yZXFfcGxkX2xpc3Rfa3ZhKSArCisJCQlmY3hwLT5mY3hwX3RhZyAqIG1vZC0+cmVxX3BsZF9zejsKKwlyZXR1cm4gcmVxYnVmOworfQorCit1MzIKK2JmYV9mY3hwX2dldF9yZXFidWZzeihzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IGZjeHAtPmZjeHBfbW9kOworCisJcmV0dXJuIG1vZC0+cmVxX3BsZF9zejsKK30KKworLyoqCisgKiBHZXQgdGhlIGludGVybmFsIHJlc3BvbnNlIGJ1ZmZlciBwb2ludGVyCisgKgorICogQHBhcmFtW2luXQlmY3hwCUJGQSBmY3hwIHBvaW50ZXIKKyAqCisgKiBAcmV0dXJuCQlwb2ludGVyIHRvIHRoZSBpbnRlcm5hbCByZXF1ZXN0IGJ1ZmZlcgorICovCit2b2lkICoKK2JmYV9mY3hwX2dldF9yc3BidWYoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBmY3hwLT5mY3hwX21vZDsKKwl2b2lkCSpyc3BidWY7CisKKwliZmFfYXNzZXJ0KGZjeHAtPnVzZV9pcnNwYnVmID09IDEpOworCisJcnNwYnVmID0gKCh1OCAqKW1vZC0+cnNwX3BsZF9saXN0X2t2YSkgKworCQkJZmN4cC0+ZmN4cF90YWcgKiBtb2QtPnJzcF9wbGRfc3o7CisJcmV0dXJuIHJzcGJ1ZjsKK30KKworLyoqCisgKiAJCUZyZWUgdGhlIEJGQSBGQ1hQCisgKgorICogQHBhcmFtW2luXQlmY3hwCQkJQkZBIGZjeHAgcG9pbnRlcgorICoKKyAqIEByZXR1cm4gCQl2b2lkCisgKi8KK3ZvaWQKK2JmYV9mY3hwX2ZyZWUoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBmY3hwLT5mY3hwX21vZDsKKworCWJmYV9hc3NlcnQoZmN4cCAhPSBOVUxMKTsKKwliZmFfdHJjKG1vZC0+YmZhLCBmY3hwLT5mY3hwX3RhZyk7CisJYmZhX2ZjeHBfcHV0KGZjeHApOworfQorCisvKioKKyAqIFNlbmQgYSBGQ1hQIHJlcXVlc3QKKyAqCisgKiBAcGFyYW1baW5dCWZjeHAJQkZBIGZjeHAgcG9pbnRlcgorICogQHBhcmFtW2luXQlycG9ydAlCRkEgcnBvcnQgcG9pbnRlci4gQ291bGQgYmUgbGVmdCBOVUxMIGZvciBXS0EgcnBvcnRzCisgKiBAcGFyYW1baW5dCXZmX2lkCXZpcnR1YWwgRmFicmljIElECisgKiBAcGFyYW1baW5dCWxwX3RhZyAgbHBvcnQgdGFnCisgKiBAcGFyYW1baW5dCWN0cwl1c2UgQ29udGlub3VzIHNlcXVlbmNlCisgKiBAcGFyYW1baW5dCWNvcwlmYyBDbGFzcyBvZiBTZXJ2aWNlCisgKiBAcGFyYW1baW5dCXJlcWxlbglyZXF1ZXN0IGxlbmd0aCwgZG9lcyBub3QgaW5jbHVkZSBGQ0hTIGxlbmd0aAorICogQHBhcmFtW2luXQlmY2hzCWZjIEhlYWRlciBQb2ludGVyLiBUaGUgaGVhZGVyIGNvbnRlbnQgd2lsbCBiZSBjb3BpZWQKKyAqCQkJaW4gYnkgQkZBLgorICoKKyAqIEBwYXJhbVtpbl0JY2JmbgljYWxsIGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHJlY2VpdmluZworICogCQkJCQkJCQl0aGUgcmVzcG9uc2UKKyAqIEBwYXJhbVtpbl0JY2JhcmcJYXJnIGZvciBjYmZuCisgKiBAcGFyYW1baW5dCXJzcF90aW1lb3V0CisgKgkJCXJlc3BvbnNlIHRpbWVvdXQKKyAqCisgKiBAcmV0dXJuCQliZmFfc3RhdHVzX3QKKyAqLwordm9pZAorYmZhX2ZjeHBfc2VuZChzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwKKwkJdTE2IHZmX2lkLCB1OCBscF90YWcsIGJmYV9ib29sZWFuX3QgY3RzLCBlbnVtIGZjX2NvcyBjb3MsCisJCXUzMiByZXFsZW4sIHN0cnVjdCBmY2hzX3MgKmZjaHMsIGJmYV9jYl9mY3hwX3NlbmRfdCBjYmZuLAorCQl2b2lkICpjYmFyZywgdTMyIHJzcF9tYXhsZW4sIHU4IHJzcF90aW1lb3V0KQoreworCXN0cnVjdCBiZmFfcwkJCSpiZmEgID0gZmN4cC0+ZmN4cF9tb2QtPmJmYTsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcmVxX2luZm9fcwkqcmVxaSA9ICZmY3hwLT5yZXFfaW5mbzsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcnNwX2luZm9fcwkqcnNwaSA9ICZmY3hwLT5yc3BfaW5mbzsKKwlzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yZXFfcwkqc2VuZF9yZXE7CisKKwliZmFfdHJjKGJmYSwgZmN4cC0+ZmN4cF90YWcpOworCisJLyoqCisJICogc2V0dXAgcmVxdWVzdC9yZXNwb25zZSBpbmZvCisJICovCisJcmVxaS0+YmZhX3Jwb3J0ID0gcnBvcnQ7CisJcmVxaS0+dmZfaWQgPSB2Zl9pZDsKKwlyZXFpLT5scF90YWcgPSBscF90YWc7CisJcmVxaS0+Y2xhc3MgPSBjb3M7CisJcnNwaS0+cnNwX3RpbWVvdXQgPSByc3BfdGltZW91dDsKKwlyZXFpLT5jdHMgPSBjdHM7CisJcmVxaS0+ZmNocyA9ICpmY2hzOworCXJlcWktPnJlcV90b3RfbGVuID0gcmVxbGVuOworCXJzcGktPnJzcF9tYXhsZW4gPSByc3BfbWF4bGVuOworCWZjeHAtPnNlbmRfY2JmbiA9IGNiZm4gPyBjYmZuIDogYmZhX2ZjeHBfbnVsbF9jb21wOworCWZjeHAtPnNlbmRfY2JhcmcgPSBjYmFyZzsKKworCS8qKgorCSAqIElmIG5vIHJvb20gaW4gQ1BFIHF1ZXVlLCB3YWl0IGZvcgorCSAqLworCXNlbmRfcmVxID0gYmZhX3JlcXFfbmV4dChiZmEsIEJGQV9SRVFRX0ZDWFApOworCWlmICghc2VuZF9yZXEpIHsKKwkJYmZhX3RyYyhiZmEsIGZjeHAtPmZjeHBfdGFnKTsKKwkJZmN4cC0+cmVxcV93YWl0aW5nID0gQkZBX1RSVUU7CisJCWJmYV9yZXFxX3dhaXQoYmZhLCBCRkFfUkVRUV9GQ1hQLCAmZmN4cC0+cmVxcV93cWUpOworCQlyZXR1cm47CisJfQorCisJYmZhX2ZjeHBfcXVldWUoZmN4cCwgc2VuZF9yZXEpOworfQorCisvKioKKyAqIEFib3J0IGEgQkZBIEZDWFAKKyAqCisgKiBAcGFyYW1baW5dCWZjeHAJQkZBIGZjeHAgcG9pbnRlcgorICoKKyAqIEByZXR1cm4gCQl2b2lkCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2ZjeHBfYWJvcnQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJYmZhX2Fzc2VydCgwKTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCit2b2lkCitiZmFfZmN4cF9hbGxvY193YWl0KHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgKndxZSwKKwkJCWJmYV9mY3hwX2FsbG9jX2NiZm5fdCBhbGxvY19jYmZuLCB2b2lkICphbGxvY19jYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IEJGQV9GQ1hQX01PRChiZmEpOworCisJYmZhX2Fzc2VydChsaXN0X2VtcHR5KCZtb2QtPmZjeHBfZnJlZV9xKSk7CisKKwl3cWUtPmFsbG9jX2NiZm4gPSBhbGxvY19jYmZuOworCXdxZS0+YWxsb2NfY2JhcmcgPSBhbGxvY19jYmFyZzsKKwlsaXN0X2FkZF90YWlsKCZ3cWUtPnFlLCAmbW9kLT53YWl0X3EpOworfQorCit2b2lkCitiZmFfZmN4cF93YWxsb2NfY2FuY2VsKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgKndxZSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IEJGQV9GQ1hQX01PRChiZmEpOworCisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZtb2QtPndhaXRfcSwgd3FlKSk7CisJbGlzdF9kZWwoJndxZS0+cWUpOworfQorCit2b2lkCitiZmFfZmN4cF9kaXNjYXJkKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCS8qKgorCSAqIElmIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBxdWV1ZSwgY2FuY2VsIHJlcXEgd2FpdAorCSAqIGFuZCBmcmVlIGZjeHAuCisJICovCisJaWYgKGZjeHAtPnJlcXFfd2FpdGluZykgeworCQlmY3hwLT5yZXFxX3dhaXRpbmcgPSBCRkFfRkFMU0U7CisJCWJmYV9yZXFxX3djYW5jZWwoJmZjeHAtPnJlcXFfd3FlKTsKKwkJYmZhX2ZjeHBfZnJlZShmY3hwKTsKKwkJcmV0dXJuOworCX0KKworCWZjeHAtPnNlbmRfY2JmbiA9IGJmYV9mY3hwX251bGxfY29tcDsKK30KKworCisKKy8qKgorICogIGhhbF9mY3hwX3B1YmxpYyBCRkEgRkNYUCBwdWJsaWMgZnVuY3Rpb25zCisgKi8KKwordm9pZAorYmZhX2ZjeHBfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpCit7CisJc3dpdGNoIChtc2ctPm1oZHIubXNnX2lkKSB7CisJY2FzZSBCRklfRkNYUF9JMkhfU0VORF9SU1A6CisJCWhhbF9mY3hwX3NlbmRfY29tcChiZmEsIChzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yc3BfcyAqKSBtc2cpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV90cmMoYmZhLCBtc2ctPm1oZHIubXNnX2lkKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3UzMgorYmZhX2ZjeHBfZ2V0X21heHJzcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IEJGQV9GQ1hQX01PRChiZmEpOworCisJcmV0dXJuIG1vZC0+cnNwX3BsZF9zejsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjeHBfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZGE0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwX3ByaXYuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDWFBfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfRkNYUF9QUklWX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3NtLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvZmMuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9mY3hwLmg+CisKKyNkZWZpbmUgQkZBX0ZDWFBfTUlOICAgICAJKDEpCisjZGVmaW5lIEJGQV9GQ1hQX01BWF9JQlVGX1NaCSgyICogMTAyNCArIDI1NikKKyNkZWZpbmUgQkZBX0ZDWFBfTUFYX0xCVUZfU1oJKDQgKiAxMDI0ICsgMjU2KQorCitzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgeworCXN0cnVjdCBiZmFfcyAgICAgICpiZmE7CQkvKiAgYmFja3BvaW50ZXIgdG8gQkZBICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfbGlzdDsJLyogIGFycmF5IG9mIEZDWFBzICovCisJdTE2ICAgICAgICBudW1fZmN4cHM7CS8qICBtYXggbnVtIEZDWFAgcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZjeHBfZnJlZV9xOwkvKiAgZnJlZSBGQ1hQcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZmN4cF9hY3RpdmVfcTsJLyogIGFjdGl2ZSBGQ1hQcyAqLworCXZvaWQJKnJlcV9wbGRfbGlzdF9rdmE7CS8qICBsaXN0IG9mIEZDWFAgcmVxIHBsZCAqLworCXU2NCByZXFfcGxkX2xpc3RfcGE7CS8qICBsaXN0IG9mIEZDWFAgcmVxIHBsZCAqLworCXZvaWQgKnJzcF9wbGRfbGlzdF9rdmE7CQkvKiAgbGlzdCBvZiBGQ1hQIHJlc3AgcGxkICovCisJdTY0IHJzcF9wbGRfbGlzdF9wYTsJLyogIGxpc3Qgb2YgRkNYUCByZXNwIHBsZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgIHdhaXRfcTsJCS8qICB3YWl0IHF1ZXVlIGZvciBmcmVlIGZjeHAgKi8KKwl1MzIJcmVxX3BsZF9zejsKKwl1MzIJcnNwX3BsZF9zejsKK307CisKKyNkZWZpbmUgQkZBX0ZDWFBfTU9EKF9fYmZhKQkJKCYoX19iZmEpLT5tb2R1bGVzLmZjeHBfbW9kKQorI2RlZmluZSBCRkFfRkNYUF9GUk9NX1RBRyhfX21vZCwgX190YWcpCSgmKF9fbW9kKS0+ZmN4cF9saXN0W19fdGFnXSkKKwordHlwZWRlZiB2b2lkICAgICgqZmN4cF9zZW5kX2NiX3QpIChzdHJ1Y3QgYmZhX3MgKmlvYywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJICAgdm9pZCAqY2JfYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQkgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKKy8qKgorICogSW5mb3JtYXRpb24gbmVlZGVkIGZvciBhIEZDWFAgcmVxdWVzdAorICovCitzdHJ1Y3QgYmZhX2ZjeHBfcmVxX2luZm9fcyB7CisJc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnQ7CS8qICBQb2ludGVyIHRvIHRoZSBiZmEgcnBvcnQgdGhhdCB3YXMKKwkJCQkJICpyZXR1cm5lZCBmcm9tIGJmYV9ycG9ydF9jcmVhdGUoKS4KKwkJCQkJICpUaGlzIGNvdWxkIGJlIGxlZnQgTlVMTCBmb3IgV0tBIG9yIGZvcgorCQkJCQkgKkZDWFAgaW50ZXJhY3Rpb25zIGJlZm9yZSB0aGUgcnBvcnQKKwkJCQkJICpuZXh1cyBpcyBlc3RhYmxpc2hlZAorCQkJCQkgKi8KKwlzdHJ1Y3QgZmNoc19zICAgZmNoczsJLyogIHJlcXVlc3QgRkMgaGVhZGVyIHN0cnVjdHVyZSAqLworCXU4IGN0czsJCS8qICBjb250aW5vdXMgc2VxdWVuY2UgKi8KKwl1OCBjbGFzczsJCS8qICBGQyBjbGFzcyBmb3IgdGhlIHJlcXVlc3QvcmVzcG9uc2UgKi8KKwl1MTYgbWF4X2ZybXN6OwkvKiAgbWF4IHNlbmQgZnJhbWUgc2l6ZSAqLworCXUxNiB2Zl9pZDsJCS8qICB2c2FuIHRhZyBpZiBhcHBsaWNhYmxlICovCisJdTgJbHBfdGFnOwkJLyogIGxwb3J0IHRhZyAqLworCXUzMiByZXFfdG90X2xlbjsJLyogIHJlcXVlc3QgcGF5bG9hZCB0b3RhbCBsZW5ndGggKi8KK307CisKK3N0cnVjdCBiZmFfZmN4cF9yc3BfaW5mb19zIHsKKwlzdHJ1Y3QgZmNoc19zIHJzcF9mY2hzOwkJLyogIFJlc3BvbnNlIGZyYW1lJ3MgRkMgaGVhZGVyIHdpbGwKKwkJCQkJICogYmUgKnNlbnQgYmFjayBpbiB0aGlzIGZpZWxkICovCisJdTggICAgICAgICByc3BfdGltZW91dDsJLyogIHRpbWVvdXQgaW4gc2Vjb25kcywgMC1ubyByZXNwb25zZQorCQkJCQkgKi8KKwl1OCAgICAgICAgIHJzdmQyWzNdOworCXUzMiAgICAgICAgcnNwX21heGxlbjsJLyogIG1heCByZXNwb25zZSBsZW5ndGggZXhwZWN0ZWQgKi8KK307CisKK3N0cnVjdCBiZmFfZmN4cF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIAlxZTsJCS8qICBmY3hwIHF1ZXVlIGVsZW1lbnQgKi8KKwliZmFfc21fdCAgICAgICAgc207ICAgICAgICAgICAgIC8qICBzdGF0ZSBtYWNoaW5lICovCisJdm9pZCAgICAgICAgICAgCSpjYWxsZXI7CS8qICBkcml2ZXIgb3IgZmNzICovCisJc3RydWN0IGJmYV9mY3hwX21vZF9zICpmY3hwX21vZDsKKwkJCQkJLyogIGJhY2sgcG9pbnRlciB0byBmY3hwIG1vZCAqLworCXUxNiAgICAgICAgZmN4cF90YWc7CS8qICBpbnRlcm5hbCB0YWcgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcmVxX2luZm9fcyByZXFfaW5mbzsKKwkJCQkJLyogIHJlcXVlc3QgaW5mbyAqLworCXN0cnVjdCBiZmFfZmN4cF9yc3BfaW5mb19zIHJzcF9pbmZvOworCQkJCQkvKiAgcmVzcG9uc2UgaW5mbyAqLworCXU4IAl1c2VfaXJlcWJ1ZjsJLyogIHVzZSBpbnRlcm5hbCByZXEgYnVmICovCisJdTggICAgICAgICB1c2VfaXJzcGJ1ZjsJLyogIHVzZSBpbnRlcm5hbCByc3AgYnVmICovCisJdTMyICAgICAgICBucmVxX3NnbGVzOwkvKiAgbnVtIHJlcXVlc3QgU0dMRXMgKi8KKwl1MzIgICAgICAgIG5yc3Bfc2dsZXM7CS8qICBudW0gcmVzcG9uc2UgU0dMRXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlcV9zZ3BnX3E7CS8qICBTRyBwYWdlcyBmb3IgcmVxdWVzdCBidWYgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlcV9zZ3BnX3dxZTsJLyogIHdhaXQgcXVldWUgZm9yIHJlcSBTRyBwYWdlICovCisJc3RydWN0IGxpc3RfaGVhZCByc3Bfc2dwZ19xOwkvKiAgU0cgcGFnZXMgZm9yIHJlc3BvbnNlIGJ1ZiAqLworCXN0cnVjdCBsaXN0X2hlYWQgcnNwX3NncGdfd3FlOwkvKiAgd2FpdCBxdWV1ZSBmb3IgcnNwIFNHIHBhZ2UgKi8KKworCWJmYV9mY3hwX2dldF9zZ2FkZHJfdCByZXFfc2dhX2NiZm47CisJCQkJCS8qICBTRyBlbGVtIGFkZHIgdXNlciBmdW5jdGlvbiAqLworCWJmYV9mY3hwX2dldF9zZ2xlbl90IHJlcV9zZ2xlbl9jYmZuOworCQkJCQkvKiAgU0cgZWxlbSBsZW4gdXNlciBmdW5jdGlvbiAqLworCWJmYV9mY3hwX2dldF9zZ2FkZHJfdCByc3Bfc2dhX2NiZm47CisJCQkJCS8qICBTRyBlbGVtIGFkZHIgdXNlciBmdW5jdGlvbiAqLworCWJmYV9mY3hwX2dldF9zZ2xlbl90IHJzcF9zZ2xlbl9jYmZuOworCQkJCQkvKiAgU0cgZWxlbSBsZW4gdXNlciBmdW5jdGlvbiAqLworCWJmYV9jYl9mY3hwX3NlbmRfdCBzZW5kX2NiZm47ICAgLyogIHNlbmQgY29tcGxldGlvbiBjYWxsYmFjayAqLworCXZvaWQJCSpzZW5kX2NiYXJnOwkvKiAgY2FsbGJhY2sgYXJnICovCisJc3RydWN0IGJmYV9zZ2VfcyAgIHJlcV9zZ2VbQkZBX0ZDWFBfTUFYX1NHRVNdOworCQkJCQkvKiAgcmVxIFNHIGVsZW1zICovCisJc3RydWN0IGJmYV9zZ2VfcyAgIHJzcF9zZ2VbQkZBX0ZDWFBfTUFYX1NHRVNdOworCQkJCQkvKiAgcnNwIFNHIGVsZW1zICovCisJdTggICAgICAgICByc3Bfc3RhdHVzOwkvKiAgY29tcDogcnNwIHN0YXR1cyAqLworCXUzMiAgICAgICAgcnNwX2xlbjsJLyogIGNvbXA6IGFjdHVhbCByZXNwb25zZSBsZW4gKi8KKwl1MzIgICAgICAgIHJlc2lkdWVfbGVuOwkvKiAgY29tcDogcmVzaWR1YWwgcnNwIGxlbmd0aCAqLworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgcnNwX2ZjaHM7CS8qICBjb21wOiByZXNwb25zZSBmY2hzICovCisJc3RydWN0IGJmYV9jYl9xZV9zICAgIGhjYl9xZTsJLyogIGNvbXA6IGNhbGxiYWNrIHFlbGVtICovCisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcwlyZXFxX3dxZTsKKwliZmFfYm9vbGVhbl90CXJlcXFfd2FpdGluZzsKK307CisKKyNkZWZpbmUgQkZBX0ZDWFBfUkVRX1BMRChfZmN4cCkgCShiZmFfZmN4cF9nZXRfcmVxYnVmKF9mY3hwKSkKKworI2RlZmluZSBCRkFfRkNYUF9SU1BfRkNIUyhfZmN4cCkgCSgmKChfZmN4cCktPnJzcF9pbmZvLmZjaHMpKQorI2RlZmluZSBCRkFfRkNYUF9SU1BfUExEKF9mY3hwKSAJKGJmYV9mY3hwX2dldF9yc3BidWYoX2ZjeHApKQorCisjZGVmaW5lIEJGQV9GQ1hQX1JFUV9QTERfUEEoX2ZjeHApCQkJCQlcCisJKChfZmN4cCktPmZjeHBfbW9kLT5yZXFfcGxkX2xpc3RfcGEgKwkJCQlcCisJCSgoX2ZjeHApLT5mY3hwX21vZC0+cmVxX3BsZF9zeiAgKiAoX2ZjeHApLT5mY3hwX3RhZykpCisKKyNkZWZpbmUgQkZBX0ZDWFBfUlNQX1BMRF9QQShfZmN4cCkgCQkJCQlcCisJKChfZmN4cCktPmZjeHBfbW9kLT5yc3BfcGxkX2xpc3RfcGEgKwkJCQlcCisJCSgoX2ZjeHApLT5mY3hwX21vZC0+cnNwX3BsZF9zeiAqIChfZmN4cCktPmZjeHBfdGFnKSkKKwordm9pZAliZmFfZmN4cF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CisjZW5kaWYgLyogX19CRkFfRkNYUF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZndpbWdfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZndpbWdfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYzEzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9md2ltZ19wcml2LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZXSU1HX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0ZXSU1HX1BSSVZfSF9fCisKKyNkZWZpbmUJQkZJX0ZMQVNIX0NIVU5LX1NaCQkyNTYJLyogIEZsYXNoIGNodW5rIHNpemUgKi8KKyNkZWZpbmUJQkZJX0ZMQVNIX0NIVU5LX1NaX1dPUkRTCShCRklfRkxBU0hfQ0hVTktfU1ovc2l6ZW9mKHUzMikpCisKK2V4dGVybiB1MzIgKmJmaV9pbWFnZV9jdF9nZXRfY2h1bmsodTMyIG9mZik7CitleHRlcm4gdTMyIGJmaV9pbWFnZV9jdF9zaXplOworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2NiX2dldF9jaHVuayh1MzIgb2ZmKTsKK2V4dGVybiB1MzIgYmZpX2ltYWdlX2NiX3NpemU7CitleHRlcm4gdTMyICpiZmlfaW1hZ2VfY2I7CitleHRlcm4gdTMyICpiZmlfaW1hZ2VfY3Q7CisKKyNlbmRpZiAvKiBfX0JGQV9GV0lNR19QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY2IuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2NiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlMTQzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2NiLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYV9wcml2Lmg+CisjaW5jbHVkZSA8YmZpL2JmaV9jYnJlZy5oPgorCit2b2lkCitiZmFfaHdjYl9yZWdpbml0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcmVnc19zCSpiZmFfcmVncyA9ICZiZmEtPmlvY2ZjLmJmYV9yZWdzOworCWJmYV9vc19hZGRyX3QJCWt2YSA9IGJmYV9pb2NfYmFyMCgmYmZhLT5pb2MpOworCWludCAgICAgICAgICAgICAJaSwgcSwgZm4gPSBiZmFfaW9jX3BjaWZuKCZiZmEtPmlvYyk7CisKKwlpZiAoZm4gPT0gMCkgeworCQliZmFfcmVncy0+aW50cl9zdGF0dXMgPSAoa3ZhICsgSE9TVEZOMF9JTlRfU1RBVFVTKTsKKwkJYmZhX3JlZ3MtPmludHJfbWFzayAgID0gKGt2YSArIEhPU1RGTjBfSU5UX01TSyk7CisJfSBlbHNlIHsKKwkJYmZhX3JlZ3MtPmludHJfc3RhdHVzID0gKGt2YSArIEhPU1RGTjFfSU5UX1NUQVRVUyk7CisJCWJmYV9yZWdzLT5pbnRyX21hc2sgICA9IChrdmEgKyBIT1NURk4xX0lOVF9NU0spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBCRklfSU9DX01BWF9DUVM7IGkrKykgeworCQkvKgorCQkgKiBDUEUgcmVnaXN0ZXJzCisJCSAqLworCQlxID0gQ1BFX1FfTlVNKGZuLCBpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX3BpW2ldID0gKGt2YSArIENQRV9RX1BJKHEpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX2NpW2ldID0gKGt2YSArIENQRV9RX0NJKHEpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX2RlcHRoW2ldID0gKGt2YSArIENQRV9RX0RFUFRIKHEpKTsKKworCQkvKgorCQkgKiBSTUUgcmVnaXN0ZXJzCisJCSAqLworCQlxID0gQ1BFX1FfTlVNKGZuLCBpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX3BpW2ldID0gKGt2YSArIFJNRV9RX1BJKHEpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX2NpW2ldID0gKGt2YSArIFJNRV9RX0NJKHEpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX2RlcHRoW2ldID0gKGt2YSArIFJNRV9RX0RFUFRIKHEpKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9od2NiX3JzcHFfYWNrKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9od2NiX3JzcHFfYWNrX21zaXgoc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxKQoreworCWJmYV9yZWdfd3JpdGUoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX3N0YXR1cywKKwkJX19IRk5fSU5UX1JNRV9RMCA8PCBSTUVfUV9OVU0oYmZhX2lvY19wY2lmbigmYmZhLT5pb2MpLCByc3BxKSk7Cit9CisKK3ZvaWQKK2JmYV9od2NiX21zaXhfZ2V0dmVjcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICptc2l4X3ZlY3NfYm1hcCwKKwkJIHUzMiAqbnVtX3ZlY3MsIHUzMiAqbWF4X3ZlY19iaXQpCit7CisjZGVmaW5lIF9fSEZOX05VTUlOVFMJMTMKKwlpZiAoYmZhX2lvY19wY2lmbigmYmZhLT5pb2MpID09IDApIHsKKwkJKm1zaXhfdmVjc19ibWFwID0gKF9fSEZOX0lOVF9DUEVfUTAgfCBfX0hGTl9JTlRfQ1BFX1ExIHwKKwkJCQkgICBfX0hGTl9JTlRfQ1BFX1EyIHwgX19IRk5fSU5UX0NQRV9RMyB8CisJCQkJICAgX19IRk5fSU5UX1JNRV9RMCB8IF9fSEZOX0lOVF9STUVfUTEgfAorCQkJCSAgIF9fSEZOX0lOVF9STUVfUTIgfCBfX0hGTl9JTlRfUk1FX1EzIHwKKwkJCQkgICBfX0hGTl9JTlRfTUJPWF9MUFUwKTsKKwkJKm1heF92ZWNfYml0ID0gX19IRk5fSU5UX01CT1hfTFBVMDsKKwl9IGVsc2UgeworCQkqbXNpeF92ZWNzX2JtYXAgPSAoX19IRk5fSU5UX0NQRV9RNCB8IF9fSEZOX0lOVF9DUEVfUTUgfAorCQkJCSAgIF9fSEZOX0lOVF9DUEVfUTYgfCBfX0hGTl9JTlRfQ1BFX1E3IHwKKwkJCQkgICBfX0hGTl9JTlRfUk1FX1E0IHwgX19IRk5fSU5UX1JNRV9RNSB8CisJCQkJICAgX19IRk5fSU5UX1JNRV9RNiB8IF9fSEZOX0lOVF9STUVfUTcgfAorCQkJCSAgIF9fSEZOX0lOVF9NQk9YX0xQVTEpOworCQkqbWF4X3ZlY19iaXQgPSBfX0hGTl9JTlRfTUJPWF9MUFUxOworCX0KKworCSptc2l4X3ZlY3NfYm1hcCB8PSAoX19IRk5fSU5UX0VSUl9FTUMgfCBfX0hGTl9JTlRfRVJSX0xQVTAgfAorCQkJICAgIF9fSEZOX0lOVF9FUlJfTFBVMSB8IF9fSEZOX0lOVF9FUlJfUFNTKTsKKwkqbnVtX3ZlY3MgPSBfX0hGTl9OVU1JTlRTOworfQorCisvKioKKyAqIE5vIHNwZWNpYWwgc2V0dXAgcmVxdWlyZWQgZm9yIGNyb3NzYm93IC0tIHZlY3RvciBhc3NpZ25tZW50cyBhcmUgaW1wbGljaXQuCisgKi8KK3ZvaWQKK2JmYV9od2NiX21zaXhfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IG52ZWNzKQoreworCWludCBpOworCisJYmZhX2Fzc2VydCgobnZlY3MgPT0gMSkgfHwgKG52ZWNzID09IF9fSEZOX05VTUlOVFMpKTsKKworCWJmYS0+bXNpeC5udmVjcyA9IG52ZWNzOworCWlmIChudmVjcyA9PSAxKSB7CisJCWZvciAoaSA9IDA7IGkgPCBCRkFfTVNJWF9DQl9NQVg7IGkrKykKKwkJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX21zaXhfYWxsOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gQkZBX01TSVhfQ1BFX1EwOyBpIDw9IEJGQV9NU0lYX0NQRV9RNzsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X3JlcXE7CisKKwlmb3IgKGkgPSBCRkFfTVNJWF9STUVfUTA7IGkgPD0gQkZBX01TSVhfUk1FX1E3OyBpKyspCisJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX21zaXhfcnNwcTsKKworCWZvciAoOyBpIDwgQkZBX01TSVhfQ0JfTUFYOyBpKyspCisJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX21zaXhfbHB1X2VycjsKK30KKworLyoqCisgKiBDcm9zc2JvdyAtLSBkdW1teSwgaW50ZXJydXB0cyBhcmUgbWFza2VkCisgKi8KK3ZvaWQKK2JmYV9od2NiX21zaXhfaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKwordm9pZAorYmZhX2h3Y2JfbXNpeF91bmluc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKKy8qKgorICogTm8gc3BlY2lhbCBlbmFibGUvZGlzYWJsZSAtLSB2ZWN0b3IgYXNzaWdubWVudHMgYXJlIGltcGxpY2l0LgorICovCit2b2lkCitiZmFfaHdjYl9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbXNpeCkKK3sKKwliZmEtPmlvY2ZjLmh3aWYuaHdfcnNwcV9hY2sgPSBiZmFfaHdjYl9yc3BxX2Fja19tc2l4OworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2N0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYWU1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jdC5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmFfcHJpdi5oPgorI2luY2x1ZGUgPGJmaS9iZmlfY3RyZWcuaD4KKyNpbmNsdWRlIDxiZmFfaW9jLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIElPQ0ZDX0NUKTsKKworc3RhdGljIHUzMiBfX2N0X21zaXhfZXJyX3ZlY19yZWdbXSA9IHsKKwlIT1NUX01TSVhfRVJSX0lOREVYX0ZOMCwKKwlIT1NUX01TSVhfRVJSX0lOREVYX0ZOMSwKKwlIT1NUX01TSVhfRVJSX0lOREVYX0ZOMiwKKwlIT1NUX01TSVhfRVJSX0lOREVYX0ZOMywKK307CisKK3N0YXRpYyB2b2lkCitiZmFfaHdjdF9tc2l4X2xwdV9lcnJfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1zaXgsIGludCB2ZWMpCit7CisJaW50IGZuID0gYmZhX2lvY19wY2lmbigmYmZhLT5pb2MpOworCWJmYV9vc19hZGRyX3Qga3ZhID0gYmZhX2lvY19iYXIwKCZiZmEtPmlvYyk7CisKKwlpZiAobXNpeCkKKwkJYmZhX3JlZ193cml0ZShrdmEgKyBfX2N0X21zaXhfZXJyX3ZlY19yZWdbZm5dLCB2ZWMpOworCWVsc2UKKwkJYmZhX3JlZ193cml0ZShrdmEgKyBfX2N0X21zaXhfZXJyX3ZlY19yZWdbZm5dLCAwKTsKK30KKworLyoqCisgKiBEdW1teSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgaGFuZGxpbmcgc3B1cmlvdXMgaW50ZXJydXB0IGR1cmluZyBjaGlwLXJlaW5pdC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9od2N0X21zaXhfZHVtbXkoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpCit7Cit9CisKK3ZvaWQKK2JmYV9od2N0X3JlZ2luaXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9pb2NmY19yZWdzX3MJKmJmYV9yZWdzID0gJmJmYS0+aW9jZmMuYmZhX3JlZ3M7CisJYmZhX29zX2FkZHJfdAkJa3ZhID0gYmZhX2lvY19iYXIwKCZiZmEtPmlvYyk7CisJaW50ICAgICAgICAgICAgIAlpLCBxLCBmbiA9IGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKTsKKworCWlmIChmbiA9PSAwKSB7CisJCWJmYV9yZWdzLT5pbnRyX3N0YXR1cyA9IChrdmEgKyBIT1NURk4wX0lOVF9TVEFUVVMpOworCQliZmFfcmVncy0+aW50cl9tYXNrICAgPSAoa3ZhICsgSE9TVEZOMF9JTlRfTVNLKTsKKwl9IGVsc2UgeworCQliZmFfcmVncy0+aW50cl9zdGF0dXMgPSAoa3ZhICsgSE9TVEZOMV9JTlRfU1RBVFVTKTsKKwkJYmZhX3JlZ3MtPmludHJfbWFzayAgID0gKGt2YSArIEhPU1RGTjFfSU5UX01TSyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEJGSV9JT0NfTUFYX0NRUzsgaSsrKSB7CisJCS8qCisJCSAqIENQRSByZWdpc3RlcnMKKwkJICovCisJCXEgPSBDUEVfUV9OVU0oZm4sIGkpOworCQliZmFfcmVncy0+Y3BlX3FfcGlbaV0gPSAoa3ZhICsgQ1BFX1BJX1BUUl9RKHEgPDwgNSkpOworCQliZmFfcmVncy0+Y3BlX3FfY2lbaV0gPSAoa3ZhICsgQ1BFX0NJX1BUUl9RKHEgPDwgNSkpOworCQliZmFfcmVncy0+Y3BlX3FfZGVwdGhbaV0gPSAoa3ZhICsgQ1BFX0RFUFRIX1EocSA8PCA1KSk7CisJCWJmYV9yZWdzLT5jcGVfcV9jdHJsW2ldID0gKGt2YSArIENQRV9RQ1RSTF9RKHEgPDwgNSkpOworCisJCS8qCisJCSAqIFJNRSByZWdpc3RlcnMKKwkJICovCisJCXEgPSBDUEVfUV9OVU0oZm4sIGkpOworCQliZmFfcmVncy0+cm1lX3FfcGlbaV0gPSAoa3ZhICsgUk1FX1BJX1BUUl9RKHEgPDwgNSkpOworCQliZmFfcmVncy0+cm1lX3FfY2lbaV0gPSAoa3ZhICsgUk1FX0NJX1BUUl9RKHEgPDwgNSkpOworCQliZmFfcmVncy0+cm1lX3FfZGVwdGhbaV0gPSAoa3ZhICsgUk1FX0RFUFRIX1EocSA8PCA1KSk7CisJCWJmYV9yZWdzLT5ybWVfcV9jdHJsW2ldID0gKGt2YSArIFJNRV9RQ1RSTF9RKHEgPDwgNSkpOworCX0KK30KKwordm9pZAorYmZhX2h3Y3RfcnNwcV9hY2soc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxKQoreworCXUzMglyMzI7CisKKwlyMzIgPSBiZmFfcmVnX3JlYWQoYmZhLT5pb2NmYy5iZmFfcmVncy5ybWVfcV9jdHJsW3JzcHFdKTsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3Mucm1lX3FfY3RybFtyc3BxXSwgcjMyKTsKK30KKwordm9pZAorYmZhX2h3Y3RfbXNpeF9nZXR2ZWNzKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKm1zaXhfdmVjc19ibWFwLAorCQkgdTMyICpudW1fdmVjcywgdTMyICptYXhfdmVjX2JpdCkKK3sKKwkqbXNpeF92ZWNzX2JtYXAgPSAoMSA8PCBCRkFfTVNJWF9DVF9NQVgpIC0gMTsKKwkqbWF4X3ZlY19iaXQgPSAoMSA8PCAoQkZBX01TSVhfQ1RfTUFYIC0gMSkpOworCSpudW1fdmVjcyA9IEJGQV9NU0lYX0NUX01BWDsKK30KKworLyoqCisgKiBTZXR1cCBNU0ktWCB2ZWN0b3IgZm9yIGNhdGFwdWx0CisgKi8KK3ZvaWQKK2JmYV9od2N0X21zaXhfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IG52ZWNzKQoreworCWJmYV9hc3NlcnQoKG52ZWNzID09IDEpIHx8IChudmVjcyA9PSBCRkFfTVNJWF9DVF9NQVgpKTsKKwliZmFfdHJjKGJmYSwgbnZlY3MpOworCisJYmZhLT5tc2l4Lm52ZWNzID0gbnZlY3M7CisJYmZhX2h3Y3RfbXNpeF91bmluc3RhbGwoYmZhKTsKK30KKwordm9pZAorYmZhX2h3Y3RfbXNpeF9pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWludCBpOworCisJaWYgKGJmYS0+bXNpeC5udmVjcyA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoYmZhLT5tc2l4Lm52ZWNzID09IDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IEJGQV9NU0lYX0NUX01BWDsgaSsrKQorCQkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9hbGw7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSBCRkFfTVNJWF9DUEVfUTA7IGkgPD0gQkZBX01TSVhfQ1BFX1EzOyBpKyspCisJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX21zaXhfcmVxcTsKKworCWZvciAoOyBpIDw9IEJGQV9NU0lYX1JNRV9RMzsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X3JzcHE7CisKKwliZmFfYXNzZXJ0KGkgPT0gQkZBX01TSVhfTFBVX0VSUik7CisJYmZhLT5tc2l4LmhhbmRsZXJbQkZBX01TSVhfTFBVX0VSUl0gPSBiZmFfbXNpeF9scHVfZXJyOworfQorCit2b2lkCitiZmFfaHdjdF9tc2l4X3VuaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBCRkFfTVNJWF9DVF9NQVg7IGkrKykKKwkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfaHdjdF9tc2l4X2R1bW15OworfQorCisvKioKKyAqIEVuYWJsZSBNU0ktWCB2ZWN0b3JzCisgKi8KK3ZvaWQKK2JmYV9od2N0X2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KQoreworCWJmYV90cmMoYmZhLCAwKTsKKwliZmFfaHdjdF9tc2l4X2xwdV9lcnJfc2V0KGJmYSwgbXNpeCwgQkZBX01TSVhfTFBVX0VSUik7CisJYmZhX2lvY19pc3JfbW9kZV9zZXQoJmJmYS0+aW9jLCBtc2l4KTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhMTI1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ludHIuYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfY2JyZWcuaD4KKyNpbmNsdWRlIDxiZmFfcG9ydF9wcml2Lmg+CisjaW5jbHVkZSA8YmZhX2ludHJfcHJpdi5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJTlRSKTsKKworc3RhdGljIHZvaWQKK2JmYV9tc2l4X2VycmludChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIGludHIpCit7CisJYmZhX2lvY19lcnJvcl9pc3IoJmJmYS0+aW9jKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9tc2l4X2xwdShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfaW9jX21ib3hfaXNyKCZiZmEtPmlvYyk7Cit9CisKK3ZvaWQKK2JmYV9tc2l4X2FsbChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHZlYykKK3sKKwliZmFfaW50eChiZmEpOworfQorCisvKioKKyAqICBoYWxfaW50cl9hcGkKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2ludHgoc3RydWN0IGJmYV9zICpiZmEpCit7CisJdTMyICAgICAgICBpbnRyLCBxaW50cjsKKwlpbnQgICAgICAgICAgICAgcXVldWU7CisKKwlpbnRyID0gYmZhX3JlZ19yZWFkKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMpOworCWlmICghaW50cikKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCS8qKgorCSAqIFJNRSBjb21wbGV0aW9uIHF1ZXVlIGludGVycnVwdAorCSAqLworCXFpbnRyID0gaW50ciAmIF9fSEZOX0lOVF9STUVfTUFTSzsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMsIHFpbnRyKTsKKworCWZvciAocXVldWUgPSAwOyBxdWV1ZSA8IEJGSV9JT0NfTUFYX0NRU19BU0lDOyBxdWV1ZSArKykgeworCQlpZiAoaW50ciAmIChfX0hGTl9JTlRfUk1FX1EwIDw8IHF1ZXVlKSkKKwkJCWJmYV9tc2l4X3JzcHEoYmZhLCBxdWV1ZSAmIChCRklfSU9DX01BWF9DUVMgLSAxKSk7CisJfQorCWludHIgJj0gfnFpbnRyOworCWlmICghaW50cikKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJLyoqCisJICogQ1BFIGNvbXBsZXRpb24gcXVldWUgaW50ZXJydXB0CisJICovCisJcWludHIgPSBpbnRyICYgX19IRk5fSU5UX0NQRV9NQVNLOworCWJmYV9yZWdfd3JpdGUoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX3N0YXR1cywgcWludHIpOworCisJZm9yIChxdWV1ZSA9IDA7IHF1ZXVlIDwgQkZJX0lPQ19NQVhfQ1FTX0FTSUM7IHF1ZXVlKyspIHsKKwkJaWYgKGludHIgJiAoX19IRk5fSU5UX0NQRV9RMCA8PCBxdWV1ZSkpCisJCQliZmFfbXNpeF9yZXFxKGJmYSwgcXVldWUgJiAoQkZJX0lPQ19NQVhfQ1FTIC0gMSkpOworCX0KKwlpbnRyICY9IH5xaW50cjsKKwlpZiAoIWludHIpCisJCXJldHVybiBCRkFfVFJVRTsKKworCWJmYV9tc2l4X2xwdV9lcnIoYmZhLCBpbnRyKTsKKworCXJldHVybiBCRkFfVFJVRTsKK30KKwordm9pZAorYmZhX2lzcl9lbmFibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJdTMyICAgICAgICBpbnRyX3VubWFzazsKKwlpbnQgICAgICAgICAgICAgcGNpX2Z1bmMgPSBiZmFfaW9jX3BjaWZuKCZiZmEtPmlvYyk7CisKKwliZmFfdHJjKGJmYSwgcGNpX2Z1bmMpOworCisJYmZhX21zaXhfaW5zdGFsbChiZmEpOworCWludHJfdW5tYXNrID0gKF9fSEZOX0lOVF9FUlJfRU1DIHwgX19IRk5fSU5UX0VSUl9MUFUwIHwKKwkJICAgICAgIF9fSEZOX0lOVF9FUlJfTFBVMSB8IF9fSEZOX0lOVF9FUlJfUFNTKTsKKworCWlmIChwY2lfZnVuYyA9PSAwKQorCQlpbnRyX3VubWFzayB8PSAoX19IRk5fSU5UX0NQRV9RMCB8IF9fSEZOX0lOVF9DUEVfUTEgfAorCQkJCV9fSEZOX0lOVF9DUEVfUTIgfCBfX0hGTl9JTlRfQ1BFX1EzIHwKKwkJCQlfX0hGTl9JTlRfUk1FX1EwIHwgX19IRk5fSU5UX1JNRV9RMSB8CisJCQkJX19IRk5fSU5UX1JNRV9RMiB8IF9fSEZOX0lOVF9STUVfUTMgfAorCQkJCV9fSEZOX0lOVF9NQk9YX0xQVTApOworCWVsc2UKKwkJaW50cl91bm1hc2sgfD0gKF9fSEZOX0lOVF9DUEVfUTQgfCBfX0hGTl9JTlRfQ1BFX1E1IHwKKwkJCQlfX0hGTl9JTlRfQ1BFX1E2IHwgX19IRk5fSU5UX0NQRV9RNyB8CisJCQkJX19IRk5fSU5UX1JNRV9RNCB8IF9fSEZOX0lOVF9STUVfUTUgfAorCQkJCV9fSEZOX0lOVF9STUVfUTYgfCBfX0hGTl9JTlRfUk1FX1E3IHwKKwkJCQlfX0hGTl9JTlRfTUJPWF9MUFUxKTsKKworCWJmYV9yZWdfd3JpdGUoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX3N0YXR1cywgaW50cl91bm1hc2spOworCWJmYV9yZWdfd3JpdGUoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX21hc2ssIH5pbnRyX3VubWFzayk7CisJYmZhX2lzcl9tb2RlX3NldChiZmEsIGJmYS0+bXNpeC5udmVjcyAhPSAwKTsKK30KKwordm9pZAorYmZhX2lzcl9kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9pc3JfbW9kZV9zZXQoYmZhLCBCRkFfRkFMU0UpOworCWJmYV9yZWdfd3JpdGUoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX21hc2ssIC0xTCk7CisJYmZhX21zaXhfdW5pbnN0YWxsKGJmYSk7Cit9CisKK3ZvaWQKK2JmYV9tc2l4X3JlcXEoc3RydWN0IGJmYV9zICpiZmEsIGludCBxaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAJCSp3YWl0cSwgKnFlLCAqcWVuOworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJKndxZTsKKworCXFpZCAmPSAoQkZJX0lPQ19NQVhfQ1FTIC0gMSk7CisKKwl3YWl0cSA9IGJmYV9yZXFxKGJmYSwgcWlkKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgd2FpdHEpIHsKKwkJLyoqCisJCSAqIENhbGxiYWNrIG9ubHkgYXMgbG9uZyBhcyB0aGVyZSBpcyByb29tIGluIHJlcXVlc3QgcXVldWUKKwkJICovCisJCWlmIChiZmFfcmVxcV9mdWxsKGJmYSwgcWlkKSkKKwkJCWJyZWFrOworCisJCWxpc3RfZGVsKHFlKTsKKwkJd3FlID0gKHN0cnVjdCBiZmFfcmVxcV93YWl0X3MgKikgcWU7CisJCXdxZS0+cXJlc3VtZSh3cWUtPmNiYXJnKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9pc3JfdW5oYW5kbGVkKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19jbGFzcyk7CisJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXNnX2lkKTsKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tdGFnLmkyaHRvayk7CisJYmZhX2Fzc2VydCgwKTsKKwliZmFfdHJjX3N0b3AoYmZhLT50cmNtb2QpOworfQorCit2b2lkCitiZmFfbXNpeF9yc3BxKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwX3FpZCkKK3sKKwlzdHJ1Y3QgYmZpX21zZ19zICAgICAgKm07CisJdTMyICAgICAgICBwaSwgY2k7CisKKwliZmFfdHJjX2ZwKGJmYSwgcnNwX3FpZCk7CisKKwlyc3BfcWlkICY9IChCRklfSU9DX01BWF9DUVMgLSAxKTsKKworCWJmYS0+aW9jZmMuaHdpZi5od19yc3BxX2FjayhiZmEsIHJzcF9xaWQpOworCisJY2kgPSBiZmFfcnNwcV9jaShiZmEsIHJzcF9xaWQpOworCXBpID0gYmZhX3JzcHFfcGkoYmZhLCByc3BfcWlkKTsKKworCWJmYV90cmNfZnAoYmZhLCBjaSk7CisJYmZhX3RyY19mcChiZmEsIHBpKTsKKworCWlmIChiZmEtPnJtZV9wcm9jZXNzKSB7CisJCXdoaWxlIChjaSAhPSBwaSkgeworCQkJbSA9IGJmYV9yc3BxX2VsZW0oYmZhLCByc3BfcWlkLCBjaSk7CisJCQliZmFfYXNzZXJ0X2ZwKG0tPm1oZHIubXNnX2NsYXNzIDwgQkZJX01DX01BWCk7CisKKwkJCWJmYV9pc3JzW20tPm1oZHIubXNnX2NsYXNzXSAoYmZhLCBtKTsKKworCQkJQ1FfSU5DUihjaSwgYmZhLT5pb2NmYy5jZmcuZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zKTsKKwkJfQorCX0KKworCS8qKgorCSAqIHVwZGF0ZSBDSQorCSAqLworCWJmYV9yc3BxX2NpKGJmYSwgcnNwX3FpZCkgPSBwaTsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3Mucm1lX3FfY2lbcnNwX3FpZF0sIHBpKTsKKwliZmFfb3NfbW1pb3diKCk7Cit9CisKK3ZvaWQKK2JmYV9tc2l4X2xwdV9lcnIoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpCit7CisJdTMyIGludHI7CisKKwlpbnRyID0gYmZhX3JlZ19yZWFkKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMpOworCisJaWYgKGludHIgJiAoX19IRk5fSU5UX01CT1hfTFBVMCB8IF9fSEZOX0lOVF9NQk9YX0xQVTEpKQorCQliZmFfbXNpeF9scHUoYmZhKTsKKworCWlmIChpbnRyICYgKF9fSEZOX0lOVF9FUlJfRU1DIHwKKwkJICAgIF9fSEZOX0lOVF9FUlJfTFBVMCB8IF9fSEZOX0lOVF9FUlJfTFBVMSB8CisJCSAgICBfX0hGTl9JTlRfRVJSX1BTUykpCisJCWJmYV9tc2l4X2VycmludChiZmEsIGludHIpOworfQorCit2b2lkCitiZmFfaXNyX2JpbmQoZW51bSBiZmlfbWNsYXNzIG1jLCBiZmFfaXNyX2Z1bmNfdCBpc3JfZnVuYykKK3sKKwliZmFfaXNyc1ttY10gPSBpc3JfZnVuYzsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ludHJfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZTZlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyX3ByaXYuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0lOVFJfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfSU5UUl9QUklWX0hfXworCisvKioKKyAqIE1lc3NhZ2UgaGFuZGxlcgorICovCit0eXBlZGVmIHZvaWQgKCpiZmFfaXNyX2Z1bmNfdCkgKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKTsKK3ZvaWQgYmZhX2lzcl91bmhhbmRsZWQoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pOwordm9pZCBiZmFfaXNyX2JpbmQoZW51bSBiZmlfbWNsYXNzIG1jLCBiZmFfaXNyX2Z1bmNfdCBpc3JfZnVuYyk7CisKKworI2RlZmluZSBiZmFfcmVxcV9waShfX2JmYSwgX19yZXFxKQkoX19iZmEpLT5pb2NmYy5yZXFfY3FfcGlbX19yZXFxXQorI2RlZmluZSBiZmFfcmVxcV9jaShfX2JmYSwgX19yZXFxKQkJCQkJXAorCSoodTMyICopKChfX2JmYSktPmlvY2ZjLnJlcV9jcV9zaGFkb3dfY2lbX19yZXFxXS5rdmEpCisKKyNkZWZpbmUgYmZhX3JlcXFfZnVsbChfX2JmYSwgX19yZXFxKQkJCQlcCisJKCgoYmZhX3JlcXFfcGkoX19iZmEsIF9fcmVxcSkgKyAxKSAmCQkJXAorCSAgKChfX2JmYSktPmlvY2ZjLmNmZy5kcnZjZmcubnVtX3JlcXFfZWxlbXMgLSAxKSkgPT0JXAorCSBiZmFfcmVxcV9jaShfX2JmYSwgX19yZXFxKSkKKworI2RlZmluZSBiZmFfcmVxcV9uZXh0KF9fYmZhLCBfX3JlcXEpCQkJCVwKKwkoYmZhX3JlcXFfZnVsbChfX2JmYSwgX19yZXFxKSA/IE5VTEwgOgkJCVwKKwkgKCh2b2lkICopKChzdHJ1Y3QgYmZpX21zZ19zICopKChfX2JmYSktPmlvY2ZjLnJlcV9jcV9iYVtfX3JlcXFdLmt2YSkgXAorCQkJICArIGJmYV9yZXFxX3BpKChfX2JmYSksIChfX3JlcXEpKSkpKQorCisjZGVmaW5lIGJmYV9yZXFxX3Byb2R1Y2UoX19iZmEsIF9fcmVxcSkJZG8gewkJCQlcCisJKF9fYmZhKS0+aW9jZmMucmVxX2NxX3BpW19fcmVxcV0rKzsJCQkJXAorCShfX2JmYSktPmlvY2ZjLnJlcV9jcV9waVtfX3JlcXFdICY9CQkJCVwKKwkJKChfX2JmYSktPmlvY2ZjLmNmZy5kcnZjZmcubnVtX3JlcXFfZWxlbXMgLSAxKTsgICAgICBcCisJYmZhX3JlZ193cml0ZSgoX19iZmEpLT5pb2NmYy5iZmFfcmVncy5jcGVfcV9waVtfX3JlcXFdLAkJXAorCQkJCShfX2JmYSktPmlvY2ZjLnJlcV9jcV9waVtfX3JlcXFdKTsgICAgICBcCisJYmZhX29zX21taW93YigpOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX3JzcHFfcGkoX19iZmEsIF9fcnNwcSkJCQkJCVwKKwkqKHUzMiAqKSgoX19iZmEpLT5pb2NmYy5yc3BfY3Ffc2hhZG93X3BpW19fcnNwcV0ua3ZhKQorCisjZGVmaW5lIGJmYV9yc3BxX2NpKF9fYmZhLCBfX3JzcHEpCShfX2JmYSktPmlvY2ZjLnJzcF9jcV9jaVtfX3JzcHFdCisjZGVmaW5lIGJmYV9yc3BxX2VsZW0oX19iZmEsIF9fcnNwcSwgX19jaSkJCQkJXAorCSYoKHN0cnVjdCBiZmlfbXNnX3MgKikoKF9fYmZhKS0+aW9jZmMucnNwX2NxX2JhW19fcnNwcV0ua3ZhKSlbX19jaV0KKworI2RlZmluZSBDUV9JTkNSKF9faW5kZXgsIF9fc2l6ZSkJCQkJCVwKKwkJCShfX2luZGV4KSsrOyAoX19pbmRleCkgJj0gKChfX3NpemUpIC0gMSkKKworLyoqCisgKiBRdWV1ZSBlbGVtZW50IHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxdWVzdCBxdWV1ZS4gRklGTyBvcmRlciBpcworICogbWFpbnRhaW5lZCB3aGVuIGZ1bGxmaWxsaW5nIHJlcXVlc3RzLgorICovCitzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIAlxZTsKKwl2b2lkCQkoKnFyZXN1bWUpICh2b2lkICpjYmFyZyk7CisJdm9pZAkJKmNiYXJnOworfTsKKworLyoqCisgKiBDaXJjdWxhciBxdWV1ZSB1c2FnZSBhc3NpZ25tZW50cworICovCitlbnVtIHsKKwlCRkFfUkVRUV9JT0MJPSAwLAkvKiAgYWxsIGxvdy1wcmlvcml0eSBJT0MgbXNncwkqLworCUJGQV9SRVFRX0ZDWFAJPSAwLAkvKiAgYWxsIEZDWFAgbWVzc2FnZXMJCSovCisJQkZBX1JFUVFfTFBTCT0gMCwJLyogIGFsbCBscG9ydCBzZXJ2aWNlIG1zZ3MJKi8KKwlCRkFfUkVRUV9QT1JUCT0gMCwJLyogIGFsbCBwb3J0IG1lc3NhZ2VzCQkqLworCUJGQV9SRVFRX0ZMQVNICT0gMCwJLyogIGZvciBmbGFzaCBtb2R1bGUJCSovCisJQkZBX1JFUVFfRElBRwk9IDAsCS8qICBmb3IgZGlhZyBtb2R1bGUJCSovCisJQkZBX1JFUVFfUlBPUlQJPSAwLAkvKiAgYWxsIHBvcnQgbWVzc2FnZXMJCSovCisJQkZBX1JFUVFfU0JPT1QJPSAwLAkvKiAgYWxsIHNhbiBib290IG1lc3NhZ2VzCSovCisJQkZBX1JFUVFfUU9TX0xPCT0gMSwJLyogIGFsbCBsb3cgcHJpb3JpdHkgSU8JKi8KKwlCRkFfUkVRUV9RT1NfTUQJPSAyLAkvKiAgYWxsIG1lZGl1bSBwcmlvcml0eSBJTwkqLworCUJGQV9SRVFRX1FPU19ISQk9IDMsCS8qICBhbGwgaGlnaCBwcmlvcml0eSBJTwkqLworfTsKKworc3RhdGljIGlubGluZSB2b2lkCitiZmFfcmVxcV93aW5pdChzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zICp3cWUsIHZvaWQgKCpxcmVzdW1lKSAodm9pZCAqY2JhcmcpLAorCQkJdm9pZCAqY2JhcmcpCit7CisJd3FlLT5xcmVzdW1lID0gcXJlc3VtZTsKKwl3cWUtPmNiYXJnID0gY2Jhcmc7Cit9CisKKyNkZWZpbmUgYmZhX3JlcXEoX19iZmEsIF9fcmVxcSkJJihfX2JmYSktPnJlcXFfd2FpdHFbX19yZXFxXQorCisvKioKKyAqIHN0YXRpYyBpbmxpbmUgdm9pZAorICogYmZhX3JlcXFfd2FpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJlcXEsIHN0cnVjdCBiZmFfcmVxcV93YWl0X3MgKndxZSkKKyAqLworI2RlZmluZSBiZmFfcmVxcV93YWl0KF9fYmZhLCBfX3JlcXEsIF9fd3FlKSBkbyB7CQkJXAorCQkJCQkJCQkJXAorCQlzdHJ1Y3QgbGlzdF9oZWFkICp3YWl0cSA9IGJmYV9yZXFxKF9fYmZhLCBfX3JlcXEpOyAgICAgIFwKKwkJCQkJCQkJCVwKKwkJYmZhX2Fzc2VydCgoKF9fcmVxcSkgPCBCRklfSU9DX01BWF9DUVMpKTsgICAgICBcCisJCWJmYV9hc3NlcnQoKF9fd3FlKS0+cXJlc3VtZSAmJiAoX193cWUpLT5jYmFyZyk7ICAgICAgXAorCQkJCQkJCQkJXAorCQlsaXN0X2FkZF90YWlsKCYoX193cWUpLT5xZSwgd2FpdHEpOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX3JlcXFfd2NhbmNlbChfX3dxZSkJbGlzdF9kZWwoJihfX3dxZSktPnFlKQorCisjZW5kaWYgLyogX19CRkFfSU5UUl9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDkzNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMKQEAgLTAsMCArMSwyMzgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfaW9jLmg+CisjaW5jbHVkZSA8YmZhX2Z3aW1nX3ByaXYuaD4KKyNpbmNsdWRlIDxiZmFfdHJjbW9kX3ByaXYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2lvYy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfY3RyZWcuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9pb2MuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbi5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2hhbC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcGNpLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIElPQyk7CisKKy8qKgorICogSU9DIGxvY2FsIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgQkZBX0lPQ19UT1YJCTIwMDAJLyogbXNlY3MgKi8KKyNkZWZpbmUgQkZBX0lPQ19IQl9UT1YJCTEwMDAJLyogbXNlY3MgKi8KKyNkZWZpbmUgQkZBX0lPQ19IQl9GQUlMX01BWAk0CisjZGVmaW5lIEJGQV9JT0NfSFdJTklUX01BWAkyCisjZGVmaW5lIEJGQV9JT0NfRldJTUdfTUlOU1ogICAgICgxNiAqIDEwMjQpCisjZGVmaW5lIEJGQV9JT0NfVE9WX1JFQ09WRVIJKEJGQV9JT0NfSEJfRkFJTF9NQVggKiBCRkFfSU9DX0hCX1RPViBcCisJCQkJKyBCRkFfSU9DX1RPVikKKworI2RlZmluZSBiZmFfaW9jX3RpbWVyX3N0YXJ0KF9faW9jKQkJCQkJXAorCWJmYV90aW1lcl9iZWdpbigoX19pb2MpLT50aW1lcl9tb2QsICYoX19pb2MpLT5pb2NfdGltZXIsCVwKKwkJCWJmYV9pb2NfdGltZW91dCwgKF9faW9jKSwgQkZBX0lPQ19UT1YpCisjZGVmaW5lIGJmYV9pb2NfdGltZXJfc3RvcChfX2lvYykgICBiZmFfdGltZXJfc3RvcCgmKF9faW9jKS0+aW9jX3RpbWVyKQorCisjZGVmaW5lIEJGQV9EQkdfRldUUkNfRU5UUwkoQkZJX0lPQ19UUkNfRU5UUykKKyNkZWZpbmUgQkZBX0RCR19GV1RSQ19MRU4JCQkJCVwKKwkoQkZBX0RCR19GV1RSQ19FTlRTICogc2l6ZW9mKHN0cnVjdCBiZmFfdHJjX3MpICsJXAorCSAoc2l6ZW9mKHN0cnVjdCBiZmFfdHJjX21vZF9zKSAtCQkJXAorCSAgQkZBX1RSQ19NQVggKiBzaXplb2Yoc3RydWN0IGJmYV90cmNfcykpKQorI2RlZmluZSBCRkFfREJHX0ZXVFJDX09GRihfZm4pCShCRklfSU9DX1RSQ19PRkYgKyBCRkFfREJHX0ZXVFJDX0xFTiAqIChfZm4pKQorI2RlZmluZSBiZmFfaW9jX3N0YXRzKF9pb2MsIF9zdGF0cykJKF9pb2MpLT5zdGF0cy5fc3RhdHMgKysKKworI2RlZmluZSBCRkFfRkxBU0hfQ0hVTktfTk8ob2ZmKSAgICAgICAgIChvZmYgLyBCRklfRkxBU0hfQ0hVTktfU1pfV09SRFMpCisjZGVmaW5lIEJGQV9GTEFTSF9PRkZTRVRfSU5fQ0hVTksob2ZmKSAgKG9mZiAlIEJGSV9GTEFTSF9DSFVOS19TWl9XT1JEUykKKyNkZWZpbmUgQkZBX0ZMQVNIX0NIVU5LX0FERFIoY2h1bmtubykgICAoY2h1bmtubyAqIEJGSV9GTEFTSF9DSFVOS19TWl9XT1JEUykKK2JmYV9ib29sZWFuX3QgICBiZmFfYXV0b19yZWNvdmVyID0gQkZBX0ZBTFNFOworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfYWVuX3Bvc3Qoc3RydWN0IGJmYV9pb2NfcyAqYmZhLAorCQkJCSBlbnVtIGJmYV9pb2NfYWVuX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2h3X3NlbV9nZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2h3X3NlbV9yZWxlYXNlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfaHdpbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2Jvb2xlYW5fdCBmb3JjZSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY190aW1lb3V0KHZvaWQgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19zZW5kX2VuYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2Nfc2VuZF9kaXNhYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19zZW5kX2dldGF0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2hiX21vbml0b3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2hiX3N0b3Aoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX3Jlc2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2Jvb2xlYW5fdCBmb3JjZSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19tYm94X3BvbGwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX21ib3hfaGJmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19yZWNvdmVyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfaW9jX2Zpcm13YXJlX2xvY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2Zpcm13YXJlX3VubG9jayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfZGlzYWJsZV9jb21wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19scHVfc3RvcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworCisvKioKKyAqICBiZmFfaW9jX3NtCisgKi8KKworLyoqCisgKiBJT0Mgc3RhdGUgbWFjaGluZSBldmVudHMKKyAqLworZW51bSBpb2NfZXZlbnQgeworCUlPQ19FX0VOQUJMRSA9IDEsCS8qICBJT0MgZW5hYmxlIHJlcXVlc3QgKi8KKwlJT0NfRV9ESVNBQkxFID0gMiwJLyogIElPQyBkaXNhYmxlIHJlcXVlc3QgKi8KKwlJT0NfRV9USU1FT1VUID0gMywJLyogIGYvdyByZXNwb25zZSB0aW1lb3V0ICovCisJSU9DX0VfRldSRUFEWSA9IDQsCS8qICBmL3cgaW5pdGlhbGl6YXRpb24gZG9uZSAqLworCUlPQ19FX0ZXUlNQX0dFVEFUVFIgPSA1LAkvKiAgSU9DIGdldCBhdHRyaWJ1dGUgcmVzcG9uc2UgKi8KKwlJT0NfRV9GV1JTUF9FTkFCTEUgPSA2LAkvKiAgZW5hYmxlIGYvdyByZXNwb25zZSAqLworCUlPQ19FX0ZXUlNQX0RJU0FCTEUgPSA3LAkvKiAgZGlzYWJsZSBmL3cgcmVzcG9uc2UgKi8KKwlJT0NfRV9IQkZBSUwgPSA4LAkvKiAgaGVhcnRiZWF0IGZhaWx1cmUgKi8KKwlJT0NfRV9IV0VSUk9SID0gOSwJLyogIGhhcmR3YXJlIGVycm9yIGludGVycnVwdCAqLworCUlPQ19FX1NFTUxPQ0tFRCA9IDEwLAkvKiAgaC93IHNlbWFwaG9yZSBpcyBsb2NrZWQgKi8KKwlJT0NfRV9ERVRBQ0ggPSAxMSwJLyogIGRyaXZlciBkZXRhY2ggY2xlYW51cCAqLworfTsKKworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIHJlc2V0LCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZndjaGVjaywgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIG1pc21hdGNoLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgc2Vtd2FpdCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGh3aW5pdCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGVuYWJsaW5nLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZ2V0YXR0ciwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIG9wLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgaW5pdGZhaWwsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBoYmZhaWwsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBkaXNhYmxpbmcsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBkaXNhYmxlZCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworCitzdGF0aWMgc3RydWN0IGJmYV9zbV90YWJsZV9zIGlvY19zbV90YWJsZVtdID0geworCXtCRkFfU00oYmZhX2lvY19zbV9yZXNldCksIEJGQV9JT0NfUkVTRVR9LAorCXtCRkFfU00oYmZhX2lvY19zbV9md2NoZWNrKSwgQkZBX0lPQ19GV01JU01BVENIfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fbWlzbWF0Y2gpLCBCRkFfSU9DX0ZXTUlTTUFUQ0h9LAorCXtCRkFfU00oYmZhX2lvY19zbV9zZW13YWl0KSwgQkZBX0lPQ19TRU1XQUlUfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21faHdpbml0KSwgQkZBX0lPQ19IV0lOSVR9LAorCXtCRkFfU00oYmZhX2lvY19zbV9lbmFibGluZyksIEJGQV9JT0NfSFdJTklUfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZ2V0YXR0ciksIEJGQV9JT0NfR0VUQVRUUn0sCisJe0JGQV9TTShiZmFfaW9jX3NtX29wKSwgQkZBX0lPQ19PUEVSQVRJT05BTH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2luaXRmYWlsKSwgQkZBX0lPQ19JTklURkFJTH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2hiZmFpbCksIEJGQV9JT0NfSEJGQUlMfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZGlzYWJsaW5nKSwgQkZBX0lPQ19ESVNBQkxJTkd9LAorCXtCRkFfU00oYmZhX2lvY19zbV9kaXNhYmxlZCksIEJGQV9JT0NfRElTQUJMRUR9LAorfTsKKworLyoqCisgKiBSZXNldCBlbnRyeSBhY3Rpb25zIC0tIGluaXRpYWxpemUgc3RhdGUgbWFjaGluZQorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9yZXNldF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaW9jLT5yZXRyeV9jb3VudCA9IDA7CisJaW9jLT5hdXRvX3JlY292ZXIgPSBiZmFfYXV0b19yZWNvdmVyOworfQorCisvKioKKyAqIEJlZ2lubmluZyBzdGF0ZS4gSU9DIGlzIGluIHJlc2V0IHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9yZXNldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9FTkFCTEU6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9md2NoZWNrKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfZGlzYWJsZV9jb21wKGlvYyk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ERVRBQ0g6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBTZW1hcGhvcmUgc2hvdWxkIGJlIGFjcXVpcmVkIGZvciB2ZXJzaW9uIGNoZWNrLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9md2NoZWNrX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX2h3X3NlbV9nZXQoaW9jKTsKK30KKworLyoqCisgKiBBd2FpdGluZyBoL3cgc2VtYXBob3JlIHRvIGNvbnRpbnVlIHdpdGggdmVyc2lvbiBjaGVjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZndjaGVjayhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9TRU1MT0NLRUQ6CisJCWlmIChiZmFfaW9jX2Zpcm13YXJlX2xvY2soaW9jKSkgeworCQkJaW9jLT5yZXRyeV9jb3VudCA9IDA7CisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faHdpbml0KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9taXNtYXRjaCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfZGlzYWJsZV9jb21wKGlvYyk7CisJCS8qCisJCSAqIGZhbGwgdGhyb3VnaAorCQkgKi8KKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogTm90aWZ5IGVuYWJsZSBjb21wbGV0aW9uIGNhbGxiYWNrIGFuZCBnZW5lcmF0ZSBtaXNtYXRjaCBBRU4uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX21pc21hdGNoX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwkvKioKKwkgKiBQcm92aWRlIGVuYWJsZSBjb21wbGV0aW9uIGNhbGxiYWNrIGFuZCBBRU4gbm90aWZpY2F0aW9uIG9ubHkgb25jZS4KKwkgKi8KKwlpZiAoaW9jLT5yZXRyeV9jb3VudCA9PSAwKSB7CisJCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQliZmFfaW9jX2Flbl9wb3N0KGlvYywgQkZBX0lPQ19BRU5fRldNSVNNQVRDSCk7CisJfQorCWlvYy0+cmV0cnlfY291bnQrKzsKKwliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7Cit9CisKKy8qKgorICogQXdhaXRpbmcgZmlybXdhcmUgdmVyc2lvbiBtYXRjaC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fbWlzbWF0Y2goc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfVElNRU9VVDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Z3Y2hlY2spOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY19kaXNhYmxlX2NvbXAoaW9jKTsKKwkJLyoKKwkJICogZmFsbCB0aHJvdWdoCisJCSAqLworCisJY2FzZSBJT0NfRV9ERVRBQ0g6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRldSRUFEWToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisvKioKKyAqIFJlcXVlc3QgZm9yIHNlbWFwaG9yZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fc2Vtd2FpdF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY19od19zZW1fZ2V0KGlvYyk7Cit9CisKKy8qKgorICogQXdhaXRpbmcgc2VtYXBob3JlIGZvciBoL3cgaW5pdGlhbHphdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fc2Vtd2FpdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9TRU1MT0NLRUQ6CisJCWlvYy0+cmV0cnlfY291bnQgPSAwOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faHdpbml0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfaHdfc2VtX2dldF9jYW5jZWwoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2h3aW5pdF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworCWJmYV9pb2NfcmVzZXQoaW9jLCBCRkFfRkFMU0UpOworfQorCisvKioKKyAqIEhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkLiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgorICogSG9sZGluZyBoYXJkd2FyZSBzZW1hcGhvcmUgbG9jay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21faHdpbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZW5hYmxpbmcpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfSFdFUlJPUjoKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCS8qCisJCSAqIGZhbGwgdGhyb3VnaAorCQkgKi8KKworCWNhc2UgSU9DX0VfVElNRU9VVDoKKwkJaW9jLT5yZXRyeV9jb3VudCsrOworCQlpZiAoaW9jLT5yZXRyeV9jb3VudCA8IEJGQV9JT0NfSFdJTklUX01BWCkgeworCQkJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworCQkJYmZhX2lvY19yZXNldChpb2MsIEJGQV9UUlVFKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYmZhX2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faW5pdGZhaWwpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2VuYWJsaW5nX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7CisJYmZhX2lvY19zZW5kX2VuYWJsZShpb2MpOworfQorCisvKioKKyAqIEhvc3QgSU9DIGZ1bmN0aW9uIGlzIGJlaW5nIGVuYWJsZWQsIGF3YWl0aW5nIHJlc3BvbnNlIGZyb20gZmlybXdhcmUuCisgKiBTZW1hcGhvcmUgaXMgYWNxdWlyZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2VuYWJsaW5nKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0ZXUlNQX0VOQUJMRToKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2dldGF0dHIpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfSFdFUlJPUjoKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCS8qCisJCSAqIGZhbGwgdGhyb3VnaAorCQkgKi8KKworCWNhc2UgSU9DX0VfVElNRU9VVDoKKwkJaW9jLT5yZXRyeV9jb3VudCsrOworCQlpZiAoaW9jLT5yZXRyeV9jb3VudCA8IEJGQV9JT0NfSFdJTklUX01BWCkgeworCQkJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlLAorCQkJCSAgICAgIEJGSV9JT0NfVU5JTklUKTsKKwkJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9od2luaXQpOworCQkJYnJlYWs7CisJCX0KKworCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9pbml0ZmFpbCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRldSRUFEWToKKwkJYmZhX2lvY19zZW5kX2VuYWJsZShpb2MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZ2V0YXR0cl9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworCWJmYV9pb2Nfc2VuZF9nZXRhdHRyKGlvYyk7Cit9CisKKy8qKgorICogSU9DIGNvbmZpZ3VyYXRpb24gaW4gcHJvZ3Jlc3MuIFRpbWVyIGlzIGFjdGl2ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZ2V0YXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9GV1JTUF9HRVRBVFRSOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX29wKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0hXRVJST1I6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9pbml0ZmFpbCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX29wX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlpb2MtPmNiZm4tPmVuYWJsZV9jYmZuKGlvYy0+YmZhLCBCRkFfU1RBVFVTX09LKTsKKwliZmFfaW9jX2hiX21vbml0b3IoaW9jKTsKKwliZmFfaW9jX2Flbl9wb3N0KGlvYywgQkZBX0lPQ19BRU5fRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fb3Aoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRU5BQkxFOgorCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY19oYl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxpbmcpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfSFdFUlJPUjoKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCS8qKgorCQkgKiBIYXJkIGVycm9yIG9yIElPQyByZWNvdmVyeSBieSBvdGhlciBmdW5jdGlvbi4KKwkJICogVHJlYXQgaXQgc2FtZSBhcyBoZWFydGJlYXQgZmFpbHVyZS4KKwkJICovCisJCWJmYV9pb2NfaGJfc3RvcChpb2MpOworCQkvKgorCQkgKiAhISEgZmFsbCB0aHJvdWdoICEhIQorCQkgKi8KKworCWNhc2UgSU9DX0VfSEJGQUlMOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faGJmYWlsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2Rpc2FibGluZ19lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0RJU0FCTEUpOworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwliZmFfaW9jX3NlbmRfZGlzYWJsZShpb2MpOworfQorCisvKioKKyAqIElPQyBpcyBiZWluZyBkaXNhYmxlZAorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9kaXNhYmxpbmcoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfSFdFUlJPUjoKKwljYXNlIElPQ19FX0ZXUlNQX0RJU0FCTEU6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQkvKgorCQkgKiAhISEgZmFsbCB0aHJvdWdoICEhIQorCQkgKi8KKworCWNhc2UgSU9DX0VfVElNRU9VVDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisvKioKKyAqIElPQyBkaXNhYmxlIGNvbXBsZXRpb24gZW50cnkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2Rpc2FibGVkX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX2Rpc2FibGVfY29tcChpb2MpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9FTkFCTEU6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9zZW13YWl0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWlvYy0+Y2Jmbi0+ZGlzYWJsZV9jYmZuKGlvYy0+YmZhKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ERVRBQ0g6CisJCWJmYV9pb2NfZmlybXdhcmVfdW5sb2NrKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9pbml0ZmFpbF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaW9jLT5jYmZuLT5lbmFibGVfY2Jmbihpb2MtPmJmYSwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworfQorCisvKioKKyAqIEhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWxlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21faW5pdGZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ERVRBQ0g6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfaW9jX2Zpcm13YXJlX3VubG9jayhpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfVElNRU9VVDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3NlbXdhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21faGJmYWlsX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKwlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgKm5vdGlmeTsKKworCS8qKgorCSAqIE1hcmsgSU9DIGFzIGZhaWxlZCBpbiBoYXJkd2FyZSBhbmQgc3RvcCBmaXJtd2FyZS4KKwkgKi8KKwliZmFfaW9jX2xwdV9zdG9wKGlvYyk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlLCBCRklfSU9DX0hCRkFJTCk7CisKKwlpZiAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSB7CisJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5sbF9oYWx0LCBfX0ZXX0lOSVRfSEFMVF9QKTsKKwkJLyoKKwkJICogV2FpdCBmb3IgaGFsdCB0byB0YWtlIGVmZmVjdAorCQkgKi8KKwkJYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MubGxfaGFsdCk7CisJfQorCisJLyoqCisJICogTm90aWZ5IGRyaXZlciBhbmQgY29tbW9uIG1vZHVsZXMgcmVnaXN0ZXJlZCBmb3Igbm90aWZpY2F0aW9uLgorCSAqLworCWlvYy0+Y2Jmbi0+aGJmYWlsX2NiZm4oaW9jLT5iZmEpOworCWxpc3RfZm9yX2VhY2gocWUsICZpb2MtPmhiX25vdGlmeV9xKSB7CisJCW5vdGlmeSA9IChzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgKilxZTsKKwkJbm90aWZ5LT5jYmZuKG5vdGlmeS0+Y2JhcmcpOworCX0KKworCS8qKgorCSAqIEZsdXNoIGFueSBxdWV1ZWQgdXAgbWFpbGJveCByZXF1ZXN0cy4KKwkgKi8KKwliZmFfaW9jX21ib3hfaGJmYWlsKGlvYyk7CisJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0hCRkFJTCk7CisKKwkvKioKKwkgKiBUcmlnZ2VyIGF1dG8tcmVjb3ZlcnkgYWZ0ZXIgYSBkZWxheS4KKwkgKi8KKwlpZiAoaW9jLT5hdXRvX3JlY292ZXIpIHsKKwkJYmZhX3RpbWVyX2JlZ2luKGlvYy0+dGltZXJfbW9kLCAmaW9jLT5pb2NfdGltZXIsCisJCQkJYmZhX2lvY190aW1lb3V0LCBpb2MsIEJGQV9JT0NfVE9WX1JFQ09WRVIpOworCX0KK30KKworLyoqCisgKiBJT0MgaGVhcnRiZWF0IGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2hiZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisKKwljYXNlIElPQ19FX0VOQUJMRToKKwkJaW9jLT5jYmZuLT5lbmFibGVfY2Jmbihpb2MtPmJmYSwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQlpZiAoaW9jLT5hdXRvX3JlY292ZXIpCisJCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9zZW13YWl0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCS8qKgorCQkgKiBSZWNvdmVyeSBpcyBhbHJlYWR5IGluaXRpYXRlZCBieSBvdGhlciBmdW5jdGlvbi4KKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9pb2NfcHZ0IEJGQSBJT0MgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2lvY19kaXNhYmxlX2NvbXAoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCXN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyAqbm90aWZ5OworCisJaW9jLT5jYmZuLT5kaXNhYmxlX2NiZm4oaW9jLT5iZmEpOworCisJLyoqCisJICogTm90aWZ5IGNvbW1vbiBtb2R1bGVzIHJlZ2lzdGVyZWQgZm9yIG5vdGlmaWNhdGlvbi4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoKHFlLCAmaW9jLT5oYl9ub3RpZnlfcSkgeworCQlub3RpZnkgPSAoc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICopcWU7CisJCW5vdGlmeS0+Y2Jmbihub3RpZnktPmNiYXJnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NlbV90aW1lb3V0KHZvaWQgKmlvY19hcmcpCit7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jID0gKHN0cnVjdCBiZmFfaW9jX3MgKilpb2NfYXJnOworCisJYmZhX2lvY19od19zZW1fZ2V0KGlvYyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3VzYWdlX3NlbV9nZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgcjMyOworCWludCAgICAgICAgICAgICBjbnQgPSAwOworI2RlZmluZSBCRkFfU0VNX1NQSU5DTlQJMTAwMAorCisJZG8geworCQlyMzIgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyk7CisJCWNudCsrOworCQlpZiAoY250ID4gQkZBX1NFTV9TUElOQ05UKQorCQkJYnJlYWs7CisJfSB3aGlsZSAocjMyICE9IDApOworCWJmYV9hc3NlcnQoY250IDwgQkZBX1NFTV9TUElOQ05UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2Uoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZywgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2h3X3NlbV9nZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgcjMyOworCisJLyoqCisJICogRmlyc3QgcmVhZCB0byB0aGUgc2VtYXBob3JlIHJlZ2lzdGVyIHdpbGwgcmV0dXJuIDAsIHN1YnNlcXVlbnQgcmVhZHMKKwkgKiB3aWxsIHJldHVybiAxLiBTZW1hcGhvcmUgaXMgcmVsZWFzZWQgYnkgd3JpdGluZyAwIHRvIHRoZSByZWdpc3RlcgorCSAqLworCXIzMiA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnKTsKKwlpZiAocjMyID09IDApIHsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfU0VNTE9DS0VEKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV90aW1lcl9iZWdpbihpb2MtPnRpbWVyX21vZCwgJmlvYy0+c2VtX3RpbWVyLCBiZmFfaW9jX3NlbV90aW1lb3V0LAorCQkJaW9jLCBCRkFfSU9DX1RPVik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2h3X3NlbV9yZWxlYXNlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3NlbV9yZWcsIDEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX3RpbWVyX3N0b3AoJmlvYy0+c2VtX3RpbWVyKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIExQVSBsb2NhbCBtZW1vcnkgKGFrYSBzZWNvbmRhcnkgbWVtb3J5IC8gU1JBTSkKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbG1lbV9pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHBzc19jdGw7CisJaW50ICAgICAgICAgICAgIGk7CisjZGVmaW5lIFBTU19MTUVNX0lOSVRfVElNRSAgMTAwMDAKKworCXBzc19jdGwgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5wc3NfY3RsX3JlZyk7CisJcHNzX2N0bCAmPSB+X19QU1NfTE1FTV9SRVNFVDsKKwlwc3NfY3RsIHw9IF9fUFNTX0xNRU1fSU5JVF9FTjsKKwlwc3NfY3RsIHw9IF9fUFNTX0kyQ19DTEtfRElWKDNVTCk7IC8qIGkyYyB3b3JrYXJvdW5kIDEyLjVraHogY2xvY2sgKi8KKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcsIHBzc19jdGwpOworCisJLyoqCisJICogd2FpdCBmb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHRvIGJlIGNvbXBsZXRlCisJICovCisJaSA9IDA7CisJZG8geworCQlwc3NfY3RsID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcpOworCQlpKys7CisJfSB3aGlsZSAoIShwc3NfY3RsICYgX19QU1NfTE1FTV9JTklUX0RPTkUpICYmIChpIDwgUFNTX0xNRU1fSU5JVF9USU1FKSk7CisKKwkvKioKKwkgKiBJZiBtZW1vcnkgaW5pdGlhbGl6YXRpb24gaXMgbm90IHN1Y2Nlc3NmdWwsIElPQyB0aW1lb3V0IHdpbGwgY2F0Y2gKKwkgKiBzdWNoIGZhaWx1cmVzLgorCSAqLworCWJmYV9hc3NlcnQocHNzX2N0bCAmIF9fUFNTX0xNRU1fSU5JVF9ET05FKTsKKwliZmFfdHJjKGlvYywgcHNzX2N0bCk7CisKKwlwc3NfY3RsICY9IH4oX19QU1NfTE1FTV9JTklUX0RPTkUgfCBfX1BTU19MTUVNX0lOSVRfRU4pOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5wc3NfY3RsX3JlZywgcHNzX2N0bCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2xwdV9zdGFydChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICBwc3NfY3RsOworCisJLyoqCisJICogVGFrZSBwcm9jZXNzb3Igb3V0IG9mIHJlc2V0LgorCSAqLworCXBzc19jdGwgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5wc3NfY3RsX3JlZyk7CisJcHNzX2N0bCAmPSB+X19QU1NfTFBVMF9SRVNFVDsKKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5wc3NfY3RsX3JlZywgcHNzX2N0bCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2xwdV9zdG9wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHBzc19jdGw7CisKKwkvKioKKwkgKiBQdXQgcHJvY2Vzc29ycyBpbiByZXNldC4KKwkgKi8KKwlwc3NfY3RsID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcpOworCXBzc19jdGwgfD0gKF9fUFNTX0xQVTBfUkVTRVQgfCBfX1BTU19MUFUxX1JFU0VUKTsKKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5wc3NfY3RsX3JlZywgcHNzX2N0bCk7Cit9CisKKy8qKgorICogR2V0IGRyaXZlciBhbmQgZmlybXdhcmUgdmVyc2lvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2Z3dmVyX2dldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICpmd2hkcikKK3sKKwl1MzIgICAgICAgIHBnbnVtLCBwZ29mZjsKKwl1MzIgICAgICAgIGxvZmYgPSAwOworCWludCAgICAgICAgICAgICBpOworCXUzMiAgICAgICAqZndzaWcgPSAodTMyICopIGZ3aGRyOworCisJcGdudW0gPSBiZmFfaW9jX3NtZW1fcGdudW0oaW9jLCBsb2ZmKTsKKwlwZ29mZiA9IGJmYV9pb2Nfc21lbV9wZ29mZihpb2MsIGxvZmYpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcykgLyBzaXplb2YodTMyKSk7CisJICAgICBpKyspIHsKKwkJZndzaWdbaV0gPSBiZmFfbWVtX3JlYWQoaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQsIGxvZmYpOworCQlsb2ZmICs9IHNpemVvZih1MzIpOworCX0KK30KKworc3RhdGljIHUzMiAqCitiZmFfaW9jX2Z3aW1nX2dldF9jaHVuayhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBvZmYpCit7CisJaWYgKGlvYy0+Y3RkZXYpCisJCXJldHVybiBiZmlfaW1hZ2VfY3RfZ2V0X2NodW5rKG9mZik7CisJcmV0dXJuIGJmaV9pbWFnZV9jYl9nZXRfY2h1bmsob2ZmKTsKK30KKworc3RhdGljICAgICAgICAgIHUzMgorYmZhX2lvY19md2ltZ19nZXRfc2l6ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CityZXR1cm4gKGlvYy0+Y3RkZXYpID8gYmZpX2ltYWdlX2N0X3NpemUgOiBiZmlfaW1hZ2VfY2Jfc2l6ZTsKK30KKworLyoqCisgKiBSZXR1cm5zIFRSVUUgaWYgc2FtZS4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9pb2NfZnd2ZXJfY21wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKmZ3aGRyKQoreworCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICpkcnZfZndoZHI7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlkcnZfZndoZHIgPQorCQkoc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKiliZmFfaW9jX2Z3aW1nX2dldF9jaHVuayhpb2MsIDApOworCisJZm9yIChpID0gMDsgaSA8IEJGSV9JT0NfTUQ1U1VNX1NaOyBpKyspIHsKKwkJaWYgKGZ3aGRyLT5tZDVzdW1baV0gIT0gZHJ2X2Z3aGRyLT5tZDVzdW1baV0pIHsKKwkJCWJmYV90cmMoaW9jLCBpKTsKKwkJCWJmYV90cmMoaW9jLCBmd2hkci0+bWQ1c3VtW2ldKTsKKwkJCWJmYV90cmMoaW9jLCBkcnZfZndoZHItPm1kNXN1bVtpXSk7CisJCQlyZXR1cm4gQkZBX0ZBTFNFOworCQl9CisJfQorCisJYmZhX3RyYyhpb2MsIGZ3aGRyLT5tZDVzdW1bMF0pOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiBSZXR1cm4gdHJ1ZSBpZiBjdXJyZW50IHJ1bm5pbmcgdmVyc2lvbiBpcyB2YWxpZC4gRmlybXdhcmUgc2lnbmF0dXJlIGFuZAorICogZXhlY3V0aW9uIGNvbnRleHQgKGRyaXZlci9iaW9zKSBtdXN0IG1hdGNoLgorICovCitzdGF0aWMgICAgICAgICAgYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19md3Zlcl92YWxpZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgZndoZHIsICpkcnZfZndoZHI7CisKKwkvKioKKwkgKiBJZiBiaW9zL2VmaSBib290IChmbGFzaCBiYXNlZCkgLS0gcmV0dXJuIHRydWUKKwkgKi8KKwlpZiAoYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJYmZhX2lvY19md3Zlcl9nZXQoaW9jLCAmZndoZHIpOworCWRydl9md2hkciA9CisJCShzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqKWJmYV9pb2NfZndpbWdfZ2V0X2NodW5rKGlvYywgMCk7CisKKwlpZiAoZndoZHIuc2lnbmF0dXJlICE9IGRydl9md2hkci0+c2lnbmF0dXJlKSB7CisJCWJmYV90cmMoaW9jLCBmd2hkci5zaWduYXR1cmUpOworCQliZmFfdHJjKGlvYywgZHJ2X2Z3aGRyLT5zaWduYXR1cmUpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWlmIChmd2hkci5leGVjICE9IGRydl9md2hkci0+ZXhlYykgeworCQliZmFfdHJjKGlvYywgZndoZHIuZXhlYyk7CisJCWJmYV90cmMoaW9jLCBkcnZfZndoZHItPmV4ZWMpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCXJldHVybiBiZmFfaW9jX2Z3dmVyX2NtcChpb2MsICZmd2hkcik7Cit9CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgZmlybXdhcmUgb2YgY3VycmVudCBkcml2ZXIgbWF0Y2hlcyB0aGUgcnVubmluZyBmaXJtd2FyZS4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9pb2NfZmlybXdhcmVfbG9jayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJZW51bSBiZmlfaW9jX3N0YXRlIGlvY19md3N0YXRlOworCXUzMiAgICAgICAgdXNlY250OworCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zIGZ3aGRyOworCisJLyoqCisJICogRmlybXdhcmUgbWF0Y2ggY2hlY2sgaXMgcmVsZXZhbnQgb25seSBmb3IgQ05BLgorCSAqLworCWlmICghaW9jLT5jbmEpCisJCXJldHVybiBCRkFfVFJVRTsKKworCS8qKgorCSAqIElmIGJpb3MgYm9vdCAoZmxhc2ggYmFzZWQpIC0tIGRvIG5vdCBpbmNyZW1lbnQgdXNhZ2UgY291bnQKKwkgKi8KKwlpZiAoYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJYmZhX2lvY191c2FnZV9zZW1fZ2V0KGlvYyk7CisJdXNlY250ID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyk7CisKKwkvKioKKwkgKiBJZiB1c2FnZSBjb3VudCBpcyAwLCBhbHdheXMgcmV0dXJuIFRSVUUuCisJICovCisJaWYgKHVzZWNudCA9PSAwKSB7CisJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnLCAxKTsKKwkJYmZhX2lvY191c2FnZV9zZW1fcmVsZWFzZShpb2MpOworCQliZmFfdHJjKGlvYywgdXNlY250KTsKKwkJcmV0dXJuIEJGQV9UUlVFOworCX0KKworCWlvY19md3N0YXRlID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUpOworCWJmYV90cmMoaW9jLCBpb2NfZndzdGF0ZSk7CisKKwkvKioKKwkgKiBVc2UgY291bnQgY2Fubm90IGJlIG5vbi16ZXJvIGFuZCBjaGlwIGluIHVuaW5pdGlhbGl6ZWQgc3RhdGUuCisJICovCisJYmZhX2Fzc2VydChpb2NfZndzdGF0ZSAhPSBCRklfSU9DX1VOSU5JVCk7CisKKwkvKioKKwkgKiBDaGVjayBpZiBhbm90aGVyIGRyaXZlciB3aXRoIGEgZGlmZmVyZW50IGZpcm13YXJlIGlzIGFjdGl2ZQorCSAqLworCWJmYV9pb2NfZnd2ZXJfZ2V0KGlvYywgJmZ3aGRyKTsKKwlpZiAoIWJmYV9pb2NfZnd2ZXJfY21wKGlvYywgJmZ3aGRyKSkgeworCQliZmFfaW9jX3VzYWdlX3NlbV9yZWxlYXNlKGlvYyk7CisJCWJmYV90cmMoaW9jLCB1c2VjbnQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCS8qKgorCSAqIFNhbWUgZmlybXdhcmUgdmVyc2lvbi4gSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQuCisJICovCisJdXNlY250Kys7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcsIHVzZWNudCk7CisJYmZhX2lvY191c2FnZV9zZW1fcmVsZWFzZShpb2MpOworCWJmYV90cmMoaW9jLCB1c2VjbnQpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfZmlybXdhcmVfdW5sb2NrKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHVzZWNudDsKKworCS8qKgorCSAqIEZpcm13YXJlIGxvY2sgaXMgcmVsZXZhbnQgb25seSBmb3IgQ05BLgorCSAqIElmIGJpb3MgYm9vdCAoZmxhc2ggYmFzZWQpIC0tIGRvIG5vdCBkZWNyZW1lbnQgdXNhZ2UgY291bnQKKwkgKi8KKwlpZiAoIWlvYy0+Y25hIHx8IChiZmFfaW9jX2Z3aW1nX2dldF9zaXplKGlvYykgPCBCRkFfSU9DX0ZXSU1HX01JTlNaKSkKKwkJcmV0dXJuOworCisJLyoqCisJICogZGVjcmVtZW50IHVzYWdlIGNvdW50CisJICovCisJYmZhX2lvY191c2FnZV9zZW1fZ2V0KGlvYyk7CisJdXNlY250ID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyk7CisJYmZhX2Fzc2VydCh1c2VjbnQgPiAwKTsKKworCXVzZWNudC0tOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnLCB1c2VjbnQpOworCWJmYV90cmMoaW9jLCB1c2VjbnQpOworCisJYmZhX2lvY191c2FnZV9zZW1fcmVsZWFzZShpb2MpOworfQorCisvKioKKyAqIENvbmRpdGlvbmFsbHkgZmx1c2ggYW55IHBlbmRpbmcgbWVzc2FnZSBmcm9tIGZpcm13YXJlIGF0IHN0YXJ0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19tc2dmbHVzaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICByMzI7CisKKwlyMzIgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5scHVfbWJveF9jbWQpOworCWlmIChyMzIpCisJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5scHVfbWJveF9jbWQsIDEpOworfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2h3aW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgZm9yY2UpCit7CisJZW51bSBiZmlfaW9jX3N0YXRlIGlvY19md3N0YXRlOworCWJmYV9ib29sZWFuX3QgICBmd3ZhbGlkOworCisJaW9jX2Z3c3RhdGUgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSk7CisKKwlpZiAoZm9yY2UpCisJCWlvY19md3N0YXRlID0gQkZJX0lPQ19VTklOSVQ7CisKKwliZmFfdHJjKGlvYywgaW9jX2Z3c3RhdGUpOworCisJLyoqCisJICogY2hlY2sgaWYgZmlybXdhcmUgaXMgdmFsaWQKKwkgKi8KKwlmd3ZhbGlkID0gKGlvY19md3N0YXRlID09IEJGSV9JT0NfVU5JTklUKSA/CisJCQlCRkFfRkFMU0UgOiBiZmFfaW9jX2Z3dmVyX3ZhbGlkKGlvYyk7CisKKwlpZiAoIWZ3dmFsaWQpIHsKKwkJYmZhX2lvY19ib290KGlvYywgQkZJX0JPT1RfVFlQRV9OT1JNQUwsIGlvYy0+cGNpZGV2LmRldmljZV9pZCk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBJZiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpcyBpbiBwcm9ncmVzcyAoaW5pdGlhbGl6ZWQgYnkgb3RoZXIgSU9DKSwKKwkgKiBqdXN0IHdhaXQgZm9yIGFuIGluaXRpYWxpemF0aW9uIGNvbXBsZXRpb24gaW50ZXJydXB0LgorCSAqLworCWlmIChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX0lOSVRJTkcpIHsKKwkJYmZhX3RyYyhpb2MsIGlvY19md3N0YXRlKTsKKwkJaW9jLT5jYmZuLT5yZXNldF9jYmZuKGlvYy0+YmZhKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIElmIElPQyBmdW5jdGlvbiBpcyBkaXNhYmxlZCBhbmQgZmlybXdhcmUgdmVyc2lvbiBpcyBzYW1lLAorCSAqIGp1c3QgcmUtZW5hYmxlIElPQy4KKwkgKi8KKwlpZiAoaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19ESVNBQkxFRCB8fCBpb2NfZndzdGF0ZSA9PSBCRklfSU9DX09QKSB7CisJCWJmYV90cmMoaW9jLCBpb2NfZndzdGF0ZSk7CisKKwkJLyoqCisJCSAqIFdoZW4gdXNpbmcgTVNJLVggYW55IHBlbmRpbmcgZmlybXdhcmUgcmVhZHkgZXZlbnQgc2hvdWxkCisJCSAqIGJlIGZsdXNoZWQuIE90aGVyd2lzZSBNU0ktWCBpbnRlcnJ1cHRzIGFyZSBub3QgZGVsaXZlcmVkLgorCQkgKi8KKwkJYmZhX2lvY19tc2dmbHVzaChpb2MpOworCQlpb2MtPmNiZm4tPnJlc2V0X2NiZm4oaW9jLT5iZmEpOworCQliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9GV1JFQURZKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGgvdyBmb3IgYW55IG90aGVyIHN0YXRlcy4KKwkgKi8KKwliZmFfaW9jX2Jvb3QoaW9jLCBCRklfQk9PVF9UWVBFX05PUk1BTCwgaW9jLT5wY2lkZXYuZGV2aWNlX2lkKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfdGltZW91dCh2b2lkICppb2NfYXJnKQoreworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYyA9IChzdHJ1Y3QgYmZhX2lvY19zICopaW9jX2FyZzsKKworCWJmYV90cmMoaW9jLCAwKTsKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9USU1FT1VUKTsKK30KKwordm9pZAorYmZhX2lvY19tYm94X3NlbmQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICppb2NfbXNnLCBpbnQgbGVuKQoreworCXUzMiAgICAgICAqbXNncCA9ICh1MzIgKikgaW9jX21zZzsKKwl1MzIgICAgICAgIGk7CisKKwliZmFfdHJjKGlvYywgbXNncFswXSk7CisJYmZhX3RyYyhpb2MsIGxlbik7CisKKwliZmFfYXNzZXJ0KGxlbiA8PSBCRklfSU9DX01TR0xFTl9NQVgpOworCisJLyoKKwkgKiBmaXJzdCB3cml0ZSBtc2cgdG8gbWFpbGJveCByZWdpc3RlcnMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gc2l6ZW9mKHUzMik7IGkrKykKKwkJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhmbl9tYm94ICsgaSAqIHNpemVvZih1MzIpLAorCQkJICAgICAgYmZhX29zX3d0b2xlKG1zZ3BbaV0pKTsKKworCWZvciAoOyBpIDwgQkZJX0lPQ19NU0dMRU5fTUFYIC8gc2l6ZW9mKHUzMik7IGkrKykKKwkJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhmbl9tYm94ICsgaSAqIHNpemVvZih1MzIpLCAwKTsKKworCS8qCisJICogd3JpdGUgMSB0byBtYWlsYm94IENNRCB0byB0cmlnZ2VyIExQVSBldmVudAorCSAqLworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5oZm5fbWJveF9jbWQsIDEpOworCSh2b2lkKWJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmhmbl9tYm94X2NtZCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NlbmRfZW5hYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zIGVuYWJsZV9yZXE7CisKKwliZmlfaDJpX3NldChlbmFibGVfcmVxLm1oLCBCRklfTUNfSU9DLCBCRklfSU9DX0gySV9FTkFCTEVfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQoaW9jKSk7CisJZW5hYmxlX3JlcS5pb2NfY2xhc3MgPSBpb2MtPmlvY19tYzsKKwliZmFfaW9jX21ib3hfc2VuZChpb2MsICZlbmFibGVfcmVxLCBzaXplb2Yoc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcykpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zZW5kX2Rpc2FibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MgZGlzYWJsZV9yZXE7CisKKwliZmlfaDJpX3NldChkaXNhYmxlX3JlcS5taCwgQkZJX01DX0lPQywgQkZJX0lPQ19IMklfRElTQUJMRV9SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChpb2MpKTsKKwliZmFfaW9jX21ib3hfc2VuZChpb2MsICZkaXNhYmxlX3JlcSwgc2l6ZW9mKHN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MpKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc2VuZF9nZXRhdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZpX2lvY19nZXRhdHRyX3JlcV9zIGF0dHJfcmVxOworCisJYmZpX2gyaV9zZXQoYXR0cl9yZXEubWgsIEJGSV9NQ19JT0MsIEJGSV9JT0NfSDJJX0dFVEFUVFJfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQoaW9jKSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChhdHRyX3JlcS5hdHRyX2FkZHIsIGlvYy0+YXR0cl9kbWEucGEpOworCWJmYV9pb2NfbWJveF9zZW5kKGlvYywgJmF0dHJfcmVxLCBzaXplb2YoYXR0cl9yZXEpKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaGJfY2hlY2sodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jID0gY2Jhcmc7CisJdTMyICAgICAgICBoYl9jb3VudDsKKworCWhiX2NvdW50ID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaGVhcnRiZWF0KTsKKwlpZiAoaW9jLT5oYl9jb3VudCA9PSBoYl9jb3VudCkgeworCQlpb2MtPmhiX2ZhaWwrKzsKKwl9IGVsc2UgeworCQlpb2MtPmhiX2NvdW50ID0gaGJfY291bnQ7CisJCWlvYy0+aGJfZmFpbCA9IDA7CisJfQorCisJaWYgKGlvYy0+aGJfZmFpbCA+PSBCRkFfSU9DX0hCX0ZBSUxfTUFYKSB7CisJCWJmYV9sb2coaW9jLT5sb2dtLCBCRkFfTE9HX0hBTF9IRUFSVEJFQVRfRkFJTFVSRSwgaGJfY291bnQpOworCQlpb2MtPmhiX2ZhaWwgPSAwOworCQliZmFfaW9jX3JlY292ZXIoaW9jKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9pb2NfbWJveF9wb2xsKGlvYyk7CisJYmZhX3RpbWVyX2JlZ2luKGlvYy0+dGltZXJfbW9kLCAmaW9jLT5pb2NfdGltZXIsIGJmYV9pb2NfaGJfY2hlY2ssIGlvYywKKwkJCUJGQV9JT0NfSEJfVE9WKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaGJfbW9uaXRvcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaW9jLT5oYl9mYWlsID0gMDsKKwlpb2MtPmhiX2NvdW50ID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaGVhcnRiZWF0KTsKKwliZmFfdGltZXJfYmVnaW4oaW9jLT50aW1lcl9tb2QsICZpb2MtPmlvY190aW1lciwgYmZhX2lvY19oYl9jaGVjaywgaW9jLAorCQkJQkZBX0lPQ19IQl9UT1YpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19oYl9zdG9wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfdGltZXJfc3RvcCgmaW9jLT5pb2NfdGltZXIpOworfQorCisvKioKKyAqIEhvc3QgdG8gTFBVIG1haWxib3ggbWVzc2FnZSBhZGRyZXNzZXMKKyAqLworc3RhdGljIHN0cnVjdCB7CisJdTMyICAgICAgICBoZm5fbWJveCwgbHB1X21ib3gsIGhmbl9wZ247Cit9IGlvY3JlZ19mbnJlZ1tdID0geworCXsKKwlIT1NURk4wX0xQVV9NQk9YMF8wLCBMUFVfSE9TVEZOMF9NQk9YMF8wLCBIT1NUX1BBR0VfTlVNX0ZOMH0sIHsKKwlIT1NURk4xX0xQVV9NQk9YMF84LCBMUFVfSE9TVEZOMV9NQk9YMF84LCBIT1NUX1BBR0VfTlVNX0ZOMX0sIHsKKwlIT1NURk4yX0xQVV9NQk9YMF8wLCBMUFVfSE9TVEZOMl9NQk9YMF8wLCBIT1NUX1BBR0VfTlVNX0ZOMn0sIHsKKwlIT1NURk4zX0xQVV9NQk9YMF84LCBMUFVfSE9TVEZOM19NQk9YMF84LCBIT1NUX1BBR0VfTlVNX0ZOM30KK307CisKKy8qKgorICogSG9zdCA8LT4gTFBVIG1haWxib3ggY29tbWFuZC9zdGF0dXMgcmVnaXN0ZXJzIC0gcG9ydCAwCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiAgICAgICAgaGZuLCBscHU7Cit9IGlvY3JlZ19tYmNtZF9wMFtdID0geworCXsKKwlIT1NURk4wX0xQVTBfTUJPWDBfQ01EX1NUQVQsIExQVTBfSE9TVEZOMF9NQk9YMF9DTURfU1RBVH0sIHsKKwlIT1NURk4xX0xQVTBfTUJPWDBfQ01EX1NUQVQsIExQVTBfSE9TVEZOMV9NQk9YMF9DTURfU1RBVH0sIHsKKwlIT1NURk4yX0xQVTBfTUJPWDBfQ01EX1NUQVQsIExQVTBfSE9TVEZOMl9NQk9YMF9DTURfU1RBVH0sIHsKKwlIT1NURk4zX0xQVTBfTUJPWDBfQ01EX1NUQVQsIExQVTBfSE9TVEZOM19NQk9YMF9DTURfU1RBVH0KK307CisKKy8qKgorICogSG9zdCA8LT4gTFBVIG1haWxib3ggY29tbWFuZC9zdGF0dXMgcmVnaXN0ZXJzIC0gcG9ydCAxCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiAgICAgICAgaGZuLCBscHU7Cit9IGlvY3JlZ19tYmNtZF9wMVtdID0geworCXsKKwlIT1NURk4wX0xQVTFfTUJPWDBfQ01EX1NUQVQsIExQVTFfSE9TVEZOMF9NQk9YMF9DTURfU1RBVH0sIHsKKwlIT1NURk4xX0xQVTFfTUJPWDBfQ01EX1NUQVQsIExQVTFfSE9TVEZOMV9NQk9YMF9DTURfU1RBVH0sIHsKKwlIT1NURk4yX0xQVTFfTUJPWDBfQ01EX1NUQVQsIExQVTFfSE9TVEZOMl9NQk9YMF9DTURfU1RBVH0sIHsKKwlIT1NURk4zX0xQVTFfTUJPWDBfQ01EX1NUQVQsIExQVTFfSE9TVEZOM19NQk9YMF9DTURfU1RBVH0KK307CisKKy8qKgorICogU2hhcmVkIElSUSBoYW5kbGluZyBpbiBJTlRYIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCB7CisJdTMyICAgICAgICBpc3IsIG1zazsKK30gaW9jcmVnX3NoaXJxX25leHRbXSA9IHsKKwl7CisJSE9TVEZOMV9JTlRfU1RBVFVTLCBIT1NURk4xX0lOVF9NU0t9LCB7CisJSE9TVEZOMl9JTlRfU1RBVFVTLCBIT1NURk4yX0lOVF9NU0t9LCB7CisJSE9TVEZOM19JTlRfU1RBVFVTLCBIT1NURk4zX0lOVF9NU0t9LCB7CitIT1NURk4wX0lOVF9TVEFUVVMsIEhPU1RGTjBfSU5UX01TS30sfTsKKworc3RhdGljIHZvaWQKK2JmYV9pb2NfcmVnX2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9vc19hZGRyX3QgICByYjsKKwlpbnQgICAgICAgICAgICAgcGNpZm4gPSBiZmFfaW9jX3BjaWZuKGlvYyk7CisKKwlyYiA9IGJmYV9pb2NfYmFyMChpb2MpOworCisJaW9jLT5pb2NfcmVncy5oZm5fbWJveCA9IHJiICsgaW9jcmVnX2ZucmVnW3BjaWZuXS5oZm5fbWJveDsKKwlpb2MtPmlvY19yZWdzLmxwdV9tYm94ID0gcmIgKyBpb2NyZWdfZm5yZWdbcGNpZm5dLmxwdV9tYm94OworCWlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiA9IHJiICsgaW9jcmVnX2ZucmVnW3BjaWZuXS5oZm5fcGduOworCisJaWYgKGlvYy0+cG9ydF9pZCA9PSAwKSB7CisJCWlvYy0+aW9jX3JlZ3MuaGVhcnRiZWF0ID0gcmIgKyBCRkFfSU9DMF9IQkVBVF9SRUc7CisJCWlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUgPSByYiArIEJGQV9JT0MwX1NUQVRFX1JFRzsKKwkJaW9jLT5pb2NfcmVncy5oZm5fbWJveF9jbWQgPSByYiArIGlvY3JlZ19tYmNtZF9wMFtwY2lmbl0uaGZuOworCQlpb2MtPmlvY19yZWdzLmxwdV9tYm94X2NtZCA9IHJiICsgaW9jcmVnX21iY21kX3AwW3BjaWZuXS5scHU7CisJCWlvYy0+aW9jX3JlZ3MubGxfaGFsdCA9IHJiICsgRldfSU5JVF9IQUxUX1AwOworCX0gZWxzZSB7CisJCWlvYy0+aW9jX3JlZ3MuaGVhcnRiZWF0ID0gKHJiICsgQkZBX0lPQzFfSEJFQVRfUkVHKTsKKwkJaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSA9IChyYiArIEJGQV9JT0MxX1NUQVRFX1JFRyk7CisJCWlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kID0gcmIgKyBpb2NyZWdfbWJjbWRfcDFbcGNpZm5dLmhmbjsKKwkJaW9jLT5pb2NfcmVncy5scHVfbWJveF9jbWQgPSByYiArIGlvY3JlZ19tYmNtZF9wMVtwY2lmbl0ubHB1OworCQlpb2MtPmlvY19yZWdzLmxsX2hhbHQgPSByYiArIEZXX0lOSVRfSEFMVF9QMTsKKwl9CisKKwkvKioKKwkgKiBTaGFyZWQgSVJRIGhhbmRsaW5nIGluIElOVFggbW9kZQorCSAqLworCWlvYy0+aW9jX3JlZ3Muc2hpcnFfaXNyX25leHQgPSByYiArIGlvY3JlZ19zaGlycV9uZXh0W3BjaWZuXS5pc3I7CisJaW9jLT5pb2NfcmVncy5zaGlycV9tc2tfbmV4dCA9IHJiICsgaW9jcmVnX3NoaXJxX25leHRbcGNpZm5dLm1zazsKKworCS8qCisJICogUFNTIGNvbnRyb2wgcmVnaXN0ZXJzCisJICovCisJaW9jLT5pb2NfcmVncy5wc3NfY3RsX3JlZyA9IChyYiArIFBTU19DVExfUkVHKTsKKwlpb2MtPmlvY19yZWdzLmFwcF9wbGxfZmFzdF9jdGxfcmVnID0gKHJiICsgQVBQX1BMTF80MjVfQ1RMX1JFRyk7CisJaW9jLT5pb2NfcmVncy5hcHBfcGxsX3Nsb3dfY3RsX3JlZyA9IChyYiArIEFQUF9QTExfMzEyX0NUTF9SRUcpOworCisJLyoKKwkgKiBJT0Mgc2VtYXBob3JlIHJlZ2lzdGVycyBhbmQgc2VyaWFsaXphdGlvbgorCSAqLworCWlvYy0+aW9jX3JlZ3MuaW9jX3NlbV9yZWcgPSAocmIgKyBIT1NUX1NFTTBfUkVHKTsKKwlpb2MtPmlvY19yZWdzLmlvY191c2FnZV9zZW1fcmVnID0gKHJiICsgSE9TVF9TRU0xX1JFRyk7CisJaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnID0gKHJiICsgQkZBX0ZXX1VTRV9DT1VOVCk7CisKKwkvKioKKwkgKiBzcmFtIG1lbW9yeSBhY2Nlc3MKKwkgKi8KKwlpb2MtPmlvY19yZWdzLnNtZW1fcGFnZV9zdGFydCA9IChyYiArIFBTU19TTUVNX1BBR0VfU1RBUlQpOworCWlvYy0+aW9jX3JlZ3Muc21lbV9wZzAgPSBCRklfSU9DX1NNRU1fUEcwX0NCOworCWlmIChpb2MtPnBjaWRldi5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpCisJCWlvYy0+aW9jX3JlZ3Muc21lbV9wZzAgPSBCRklfSU9DX1NNRU1fUEcwX0NUOworfQorCisvKioKKyAqICAgICAgSW5pdGlhdGUgYSBmdWxsIGZpcm13YXJlIGRvd25sb2FkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19kb3dubG9hZF9mdyhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBib290X3R5cGUsCisJCSAgICB1MzIgYm9vdF9wYXJhbSkKK3sKKwl1MzIgICAgICAgKmZ3aW1nOworCXUzMiAgICAgICAgcGdudW0sIHBnb2ZmOworCXUzMiAgICAgICAgbG9mZiA9IDA7CisJdTMyICAgICAgICBjaHVua25vID0gMDsKKwl1MzIgICAgICAgIGk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIExNRU0gZmlyc3QgYmVmb3JlIGNvZGUgZG93bmxvYWQKKwkgKi8KKwliZmFfaW9jX2xtZW1faW5pdChpb2MpOworCisJLyoqCisJICogRmxhc2ggYmFzZWQgZmlybXdhcmUgYm9vdAorCSAqLworCWJmYV90cmMoaW9jLCBiZmFfaW9jX2Z3aW1nX2dldF9zaXplKGlvYykpOworCWlmIChiZmFfaW9jX2Z3aW1nX2dldF9zaXplKGlvYykgPCBCRkFfSU9DX0ZXSU1HX01JTlNaKQorCQlib290X3R5cGUgPSBCRklfQk9PVF9UWVBFX0ZMQVNIOworCWZ3aW1nID0gYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoaW9jLCBjaHVua25vKTsKKwlmd2ltZ1tCRklfQk9PVF9UWVBFX09GRiAvIHNpemVvZih1MzIpXSA9IGJmYV9vc19zd2FwMzIoYm9vdF90eXBlKTsKKwlmd2ltZ1tCRklfQk9PVF9QQVJBTV9PRkYgLyBzaXplb2YodTMyKV0gPQorCQliZmFfb3Nfc3dhcDMyKGJvb3RfcGFyYW0pOworCisJcGdudW0gPSBiZmFfaW9jX3NtZW1fcGdudW0oaW9jLCBsb2ZmKTsKKwlwZ29mZiA9IGJmYV9pb2Nfc21lbV9wZ29mZihpb2MsIGxvZmYpOworCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sIHBnbnVtKTsKKworCWZvciAoaSA9IDA7IGkgPCBiZmFfaW9jX2Z3aW1nX2dldF9zaXplKGlvYyk7IGkrKykgeworCisJCWlmIChCRkFfRkxBU0hfQ0hVTktfTk8oaSkgIT0gY2h1bmtubykgeworCQkJY2h1bmtubyA9IEJGQV9GTEFTSF9DSFVOS19OTyhpKTsKKwkJCWZ3aW1nID0gYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoaW9jLAorCQkJCQlCRkFfRkxBU0hfQ0hVTktfQUREUihjaHVua25vKSk7CisJCX0KKworCQkvKioKKwkJICogd3JpdGUgc21lbQorCQkgKi8KKwkJYmZhX21lbV93cml0ZShpb2MtPmlvY19yZWdzLnNtZW1fcGFnZV9zdGFydCwgbG9mZiwKKwkJCSAgICAgIGZ3aW1nW0JGQV9GTEFTSF9PRkZTRVRfSU5fQ0hVTksoaSldKTsKKworCQlsb2ZmICs9IHNpemVvZih1MzIpOworCisJCS8qKgorCQkgKiBoYW5kbGUgcGFnZSBvZmZzZXQgd3JhcCBhcm91bmQKKwkJICovCisJCWxvZmYgPSBQU1NfU01FTV9QR09GRihsb2ZmKTsKKwkJaWYgKGxvZmYgPT0gMCkgeworCQkJcGdudW0rKzsKKwkJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisJCX0KKwl9CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwKKwkJICAgICAgYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgMCkpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19yZXNldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgZm9yY2UpCit7CisJYmZhX2lvY19od2luaXQoaW9jLCBmb3JjZSk7Cit9CisKKy8qKgorICogVXBkYXRlIEJGQSBjb25maWd1cmF0aW9uIGZyb20gZmlybXdhcmUgY29uZmlndXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfZ2V0YXR0cl9yZXBseShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmaV9pb2NfYXR0cl9zICphdHRyID0gaW9jLT5hdHRyOworCisJYXR0ci0+YWRhcHRlcl9wcm9wID0gYmZhX29zX250b2hsKGF0dHItPmFkYXB0ZXJfcHJvcCk7CisJYXR0ci0+bWF4ZnJzaXplID0gYmZhX29zX250b2hzKGF0dHItPm1heGZyc2l6ZSk7CisKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9GV1JTUF9HRVRBVFRSKTsKK30KKworLyoqCisgKiBBdHRhY2ggdGltZSBpbml0aWFsaXphdGlvbiBvZiBtYm94IGxvZ2ljLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19tYm94X2F0dGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJaW50ICAgICAgICAgICAgIG1jOworCisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+Y21kX3EpOworCWZvciAobWMgPSAwOyBtYyA8IEJGSV9NQ19NQVg7IG1jKyspIHsKKwkJbW9kLT5tYmhkbHJbbWNdLmNiZm4gPSBOVUxMOworCQltb2QtPm1iaGRsclttY10uY2JhcmcgPSBpb2MtPmJmYTsKKwl9Cit9CisKKy8qKgorICogTWJveCBwb2xsIHRpbWVyIC0tIHJlc3RhcnRzIGFueSBwZW5kaW5nIG1haWxib3ggcmVxdWVzdHMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX21ib3hfcG9sbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJc3RydWN0IGJmYV9tYm94X2NtZF9zICpjbWQ7CisJdTMyICAgICAgICBzdGF0OworCisJLyoqCisJICogSWYgbm8gY29tbWFuZCBwZW5kaW5nLCBkbyBub3RoaW5nCisJICovCisJaWYgKGxpc3RfZW1wdHkoJm1vZC0+Y21kX3EpKQorCQlyZXR1cm47CisKKwkvKioKKwkgKiBJZiBwcmV2aW91cyBjb21tYW5kIGlzIG5vdCB5ZXQgZmV0Y2hlZCBieSBmaXJtd2FyZSwgZG8gbm90aGluZworCSAqLworCXN0YXQgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5oZm5fbWJveF9jbWQpOworCWlmIChzdGF0KQorCQlyZXR1cm47CisKKwkvKioKKwkgKiBFbnF1ZXVlIGNvbW1hbmQgdG8gZmlybXdhcmUuCisJICovCisJYmZhX3FfZGVxKCZtb2QtPmNtZF9xLCAmY21kKTsKKwliZmFfaW9jX21ib3hfc2VuZChpb2MsIGNtZC0+bXNnLCBzaXplb2YoY21kLT5tc2cpKTsKK30KKworLyoqCisgKiBDbGVhbnVwIGFueSBwZW5kaW5nIHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19tYm94X2hiZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJc3RydWN0IGJmYV9tYm94X2NtZF9zICpjbWQ7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm1vZC0+Y21kX3EpKQorCQliZmFfcV9kZXEoJm1vZC0+Y21kX3EsICZjbWQpOworfQorCisvKioKKyAqIEluaXRpYWxpemUgSU9DIHRvIHBvcnQgbWFwcGluZy4KKyAqLworCisjZGVmaW5lIEZOQ19QRVJTX0ZOX1NISUZUKF9fZm4pCSgoX19mbikgKiA4KQorc3RhdGljIHZvaWQKK2JmYV9pb2NfbWFwX3BvcnQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9vc19hZGRyX3QgICByYiA9IGlvYy0+cGNpZGV2LnBjaV9iYXJfa3ZhOworCXUzMiAgICAgICAgcjMyOworCisJLyoqCisJICogRm9yIGNyb3NzYm93LCBwb3J0IGlkIGlzIHNhbWUgYXMgcGNpIGZ1bmN0aW9uLgorCSAqLworCWlmIChpb2MtPnBjaWRldi5kZXZpY2VfaWQgIT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJaW9jLT5wb3J0X2lkID0gYmZhX2lvY19wY2lmbihpb2MpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogRm9yIGNhdGFwdWx0LCBiYXNlIHBvcnQgaWQgb24gcGVyc29uYWxpdHkgcmVnaXN0ZXIgYW5kIElPQyB0eXBlCisJICovCisJcjMyID0gYmZhX3JlZ19yZWFkKHJiICsgRk5DX1BFUlNfUkVHKTsKKwlyMzIgPj49IEZOQ19QRVJTX0ZOX1NISUZUKGJmYV9pb2NfcGNpZm4oaW9jKSk7CisJaW9jLT5wb3J0X2lkID0gKHIzMiAmIF9fRjBfUE9SVF9NQVBfTUspID4+IF9fRjBfUE9SVF9NQVBfU0g7CisKKwliZmFfdHJjKGlvYywgYmZhX2lvY19wY2lmbihpb2MpKTsKKwliZmFfdHJjKGlvYywgaW9jLT5wb3J0X2lkKTsKK30KKworCisKKy8qKgorICogIGJmYV9pb2NfcHVibGljCisgKi8KKworLyoqCisqIFNldCBpbnRlcnJ1cHQgbW9kZSBmb3IgYSBmdW5jdGlvbjogSU5UWCBvciBNU0lYCisgKi8KK3ZvaWQKK2JmYV9pb2NfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2Jvb2xlYW5fdCBtc2l4KQoreworCWJmYV9vc19hZGRyX3QgICByYiA9IGlvYy0+cGNpZGV2LnBjaV9iYXJfa3ZhOworCXUzMiAgICAgICAgcjMyLCBtb2RlOworCisJcjMyID0gYmZhX3JlZ19yZWFkKHJiICsgRk5DX1BFUlNfUkVHKTsKKwliZmFfdHJjKGlvYywgcjMyKTsKKworCW1vZGUgPSAocjMyID4+IEZOQ19QRVJTX0ZOX1NISUZUKGJmYV9pb2NfcGNpZm4oaW9jKSkpICYKKwkJX19GMF9JTlRYX1NUQVRVUzsKKworCS8qKgorCSAqIElmIGFscmVhZHkgaW4gZGVzaXJlZCBtb2RlLCBkbyBub3QgY2hhbmdlIGFueXRoaW5nCisJICovCisJaWYgKCFtc2l4ICYmIG1vZGUpCisJCXJldHVybjsKKworCWlmIChtc2l4KQorCQltb2RlID0gX19GMF9JTlRYX1NUQVRVU19NU0lYOworCWVsc2UKKwkJbW9kZSA9IF9fRjBfSU5UWF9TVEFUVVNfSU5UQTsKKworCXIzMiAmPSB+KF9fRjBfSU5UWF9TVEFUVVMgPDwgRk5DX1BFUlNfRk5fU0hJRlQoYmZhX2lvY19wY2lmbihpb2MpKSk7CisJcjMyIHw9IChtb2RlIDw8IEZOQ19QRVJTX0ZOX1NISUZUKGJmYV9pb2NfcGNpZm4oaW9jKSkpOworCWJmYV90cmMoaW9jLCByMzIpOworCisJYmZhX3JlZ193cml0ZShyYiArIEZOQ19QRVJTX1JFRywgcjMyKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfaW9jX3BsbF9pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfb3NfYWRkcl90ICAgcmIgPSBpb2MtPnBjaWRldi5wY2lfYmFyX2t2YTsKKwl1MzIgICAgICAgIHBsbF9zY2xrLCBwbGxfZmNsaywgcjMyOworCisJaWYgKGlvYy0+cGNpZGV2LmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCkgeworCQlwbGxfc2NsayA9CisJCQlfX0FQUF9QTExfMzEyX0VOQUJMRSB8IF9fQVBQX1BMTF8zMTJfTFJFU0VUTiB8CisJCQlfX0FQUF9QTExfMzEyX1JTRUwyMDA1MDAgfCBfX0FQUF9QTExfMzEyX1AwXzEoMFUpIHwKKwkJCV9fQVBQX1BMTF8zMTJfSklUTE1UMF8xKDNVKSB8CisJCQlfX0FQUF9QTExfMzEyX0NOVExNVDBfMSgxVSk7CisJCXBsbF9mY2xrID0KKwkJCV9fQVBQX1BMTF80MjVfRU5BQkxFIHwgX19BUFBfUExMXzQyNV9MUkVTRVROIHwKKwkJCV9fQVBQX1BMTF80MjVfUlNFTDIwMDUwMCB8IF9fQVBQX1BMTF80MjVfUDBfMSgwVSkgfAorCQkJX19BUFBfUExMXzQyNV9KSVRMTVQwXzEoM1UpIHwKKwkJCV9fQVBQX1BMTF80MjVfQ05UTE1UMF8xKDFVKTsKKworCQkvKioKKwkJICogCUZvciBjYXRhcHVsdCwgY2hvb3NlIG9wZXJhdGlvbmFsIG1vZGUgRkMvRkNvRQorCQkgKi8KKwkJaWYgKGlvYy0+ZmNtb2RlKSB7CisJCQliZmFfcmVnX3dyaXRlKChyYiArIE9QX01PREUpLCAwKTsKKwkJCWJmYV9yZWdfd3JpdGUoKHJiICsgRVRIX01BQ19TRVJfUkVHKSwKKwkJCQkgICAgICBfX0FQUF9FTVNfQ01MQ0tTRUwgfCBfX0FQUF9FTVNfUkVGQ0tCVUZFTjIKKwkJCQkgICAgICB8IF9fQVBQX0VNU19DSEFOTkVMX1NFTCk7CisJCX0gZWxzZSB7CisJCQlpb2MtPnBsbGluaXQgPSBCRkFfVFJVRTsKKwkJCWJmYV9yZWdfd3JpdGUoKHJiICsgT1BfTU9ERSksIF9fR0xPQkFMX0ZDT0VfTU9ERSk7CisJCQliZmFfcmVnX3dyaXRlKChyYiArIEVUSF9NQUNfU0VSX1JFRyksCisJCQkJICAgICAgX19BUFBfRU1TX1JFRkNLQlVGRU4xKTsKKwkJfQorCX0gZWxzZSB7CisJCXBsbF9zY2xrID0KKwkJCV9fQVBQX1BMTF8zMTJfRU5BQkxFIHwgX19BUFBfUExMXzMxMl9MUkVTRVROIHwKKwkJCV9fQVBQX1BMTF8zMTJfUDBfMSgzVSkgfCBfX0FQUF9QTExfMzEyX0pJVExNVDBfMSgzVSkgfAorCQkJX19BUFBfUExMXzMxMl9DTlRMTVQwXzEoM1UpOworCQlwbGxfZmNsayA9CisJCQlfX0FQUF9QTExfNDI1X0VOQUJMRSB8IF9fQVBQX1BMTF80MjVfTFJFU0VUTiB8CisJCQlfX0FQUF9QTExfNDI1X1JTRUwyMDA1MDAgfCBfX0FQUF9QTExfNDI1X1AwXzEoM1UpIHwKKwkJCV9fQVBQX1BMTF80MjVfSklUTE1UMF8xKDNVKSB8CisJCQlfX0FQUF9QTExfNDI1X0NOVExNVDBfMSgzVSk7CisJfQorCisJYmZhX3JlZ193cml0ZSgocmIgKyBCRkFfSU9DMF9TVEFURV9SRUcpLCBCRklfSU9DX1VOSU5JVCk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBCRkFfSU9DMV9TVEFURV9SRUcpLCBCRklfSU9DX1VOSU5JVCk7CisKKwliZmFfcmVnX3dyaXRlKChyYiArIEhPU1RGTjBfSU5UX01TSyksIDB4ZmZmZmZmZmZVKTsKKwliZmFfcmVnX3dyaXRlKChyYiArIEhPU1RGTjFfSU5UX01TSyksIDB4ZmZmZmZmZmZVKTsKKwliZmFfcmVnX3dyaXRlKChyYiArIEhPU1RGTjBfSU5UX1NUQVRVUyksIDB4ZmZmZmZmZmZVKTsKKwliZmFfcmVnX3dyaXRlKChyYiArIEhPU1RGTjFfSU5UX1NUQVRVUyksIDB4ZmZmZmZmZmZVKTsKKwliZmFfcmVnX3dyaXRlKChyYiArIEhPU1RGTjBfSU5UX01TSyksIDB4ZmZmZmZmZmZVKTsKKwliZmFfcmVnX3dyaXRlKChyYiArIEhPU1RGTjFfSU5UX01TSyksIDB4ZmZmZmZmZmZVKTsKKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX3Nsb3dfY3RsX3JlZywKKwkJICAgICAgX19BUFBfUExMXzMxMl9MT0dJQ19TT0ZUX1JFU0VUKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcsCisJCSAgICAgIF9fQVBQX1BMTF8zMTJfQllQQVNTIHwgX19BUFBfUExMXzMxMl9MT0dJQ19TT0ZUX1JFU0VUKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9mYXN0X2N0bF9yZWcsCisJCSAgICAgIF9fQVBQX1BMTF80MjVfTE9HSUNfU09GVF9SRVNFVCk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfZmFzdF9jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfNDI1X0JZUEFTUyB8IF9fQVBQX1BMTF80MjVfTE9HSUNfU09GVF9SRVNFVCk7CisJYmZhX29zX3VkZWxheSgyKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcsCisJCSAgICAgIF9fQVBQX1BMTF8zMTJfTE9HSUNfU09GVF9SRVNFVCk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfZmFzdF9jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQpOworCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfc2xvd19jdGxfcmVnLAorCQkgICAgICBwbGxfc2NsayB8IF9fQVBQX1BMTF8zMTJfTE9HSUNfU09GVF9SRVNFVCk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfZmFzdF9jdGxfcmVnLAorCQkgICAgICBwbGxfZmNsayB8IF9fQVBQX1BMTF80MjVfTE9HSUNfU09GVF9SRVNFVCk7CisKKwkvKioKKwkgKiBXYWl0IGZvciBQTExzIHRvIGxvY2suCisJICovCisJYmZhX29zX3VkZWxheSgyMDAwKTsKKwliZmFfcmVnX3dyaXRlKChyYiArIEhPU1RGTjBfSU5UX1NUQVRVUyksIDB4ZmZmZmZmZmZVKTsKKwliZmFfcmVnX3dyaXRlKChyYiArIEhPU1RGTjFfSU5UX1NUQVRVUyksIDB4ZmZmZmZmZmZVKTsKKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX3Nsb3dfY3RsX3JlZywgcGxsX3NjbGspOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywgcGxsX2ZjbGspOworCisJaWYgKGlvYy0+cGNpZGV2LmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCkgeworCQliZmFfcmVnX3dyaXRlKChyYiArIE1CSVNUX0NUTF9SRUcpLCBfX0VEUkFNX0JJU1RSX1NUQVJUKTsKKwkJYmZhX29zX3VkZWxheSgxMDAwKTsKKwkJcjMyID0gYmZhX3JlZ19yZWFkKChyYiArIE1CSVNUX1NUQVRfUkVHKSk7CisJCWJmYV90cmMoaW9jLCByMzIpOworCX0KKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIEludGVyZmFjZSB1c2VkIGJ5IGRpYWcgbW9kdWxlIHRvIGRvIGZpcm13YXJlIGJvb3Qgd2l0aCBtZW1vcnkgdGVzdAorICogYXMgdGhlIGVudHJ5IHZlY3Rvci4KKyAqLwordm9pZAorYmZhX2lvY19ib290KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIGJvb3RfdHlwZSwgdTMyIGJvb3RfcGFyYW0pCit7CisJYmZhX29zX2FkZHJfdCAgIHJiOworCisJYmZhX2lvY19zdGF0cyhpb2MsIGlvY19ib290cyk7CisKKwlpZiAoYmZhX2lvY19wbGxfaW5pdChpb2MpICE9IEJGQV9TVEFUVVNfT0spCisJCXJldHVybjsKKworCS8qKgorCSAqIEluaXRpYWxpemUgSU9DIHN0YXRlIG9mIGFsbCBmdW5jdGlvbnMgb24gYSBjaGlwIHJlc2V0LgorCSAqLworCXJiID0gaW9jLT5wY2lkZXYucGNpX2Jhcl9rdmE7CisJaWYgKGJvb3RfcGFyYW0gPT0gQkZJX0JPT1RfVFlQRV9NRU1URVNUKSB7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHKSwgQkZJX0lPQ19NRU1URVNUKTsKKwkJYmZhX3JlZ193cml0ZSgocmIgKyBCRkFfSU9DMV9TVEFURV9SRUcpLCBCRklfSU9DX01FTVRFU1QpOworCX0gZWxzZSB7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHKSwgQkZJX0lPQ19JTklUSU5HKTsKKwkJYmZhX3JlZ193cml0ZSgocmIgKyBCRkFfSU9DMV9TVEFURV9SRUcpLCBCRklfSU9DX0lOSVRJTkcpOworCX0KKworCWJmYV9pb2NfZG93bmxvYWRfZncoaW9jLCBib290X3R5cGUsIGJvb3RfcGFyYW0pOworCisJLyoqCisJICogRW5hYmxlIGludGVycnVwdHMganVzdCBiZWZvcmUgc3RhcnRpbmcgTFBVCisJICovCisJaW9jLT5jYmZuLT5yZXNldF9jYmZuKGlvYy0+YmZhKTsKKwliZmFfaW9jX2xwdV9zdGFydChpb2MpOworfQorCisvKioKKyAqIEVuYWJsZS9kaXNhYmxlIElPQyBmYWlsdXJlIGF1dG8gcmVjb3ZlcnkuCisgKi8KK3ZvaWQKK2JmYV9pb2NfYXV0b19yZWNvdmVyKGJmYV9ib29sZWFuX3QgYXV0b19yZWNvdmVyKQoreworCWJmYV9hdXRvX3JlY292ZXIgPSBCRkFfRkFMU0U7Cit9CisKKworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19pc19vcGVyYXRpb25hbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJcmV0dXJuIGJmYV9mc21fY21wX3N0YXRlKGlvYywgYmZhX2lvY19zbV9vcCk7Cit9CisKK3ZvaWQKK2JmYV9pb2NfbXNnZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqbWJtc2cpCit7CisJdTMyICAgICAgICptc2dwID0gbWJtc2c7CisJdTMyICAgICAgICByMzI7CisJaW50ICAgICAgICAgICAgIGk7CisKKwkvKioKKwkgKiByZWFkIHRoZSBNQk9YIG1zZworCSAqLworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHVuaW9uIGJmaV9pb2NfaTJoX21zZ191KSAvIHNpemVvZih1MzIpKTsKKwkgICAgIGkrKykgeworCQlyMzIgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5scHVfbWJveCArCisJCQkJICAgaSAqIHNpemVvZih1MzIpKTsKKwkJbXNncFtpXSA9IGJmYV9vc19odG9ubChyMzIpOworCX0KKworCS8qKgorCSAqIHR1cm4gb2ZmIG1haWxib3ggaW50ZXJydXB0IGJ5IGNsZWFyaW5nIG1haWxib3ggc3RhdHVzCisJICovCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmxwdV9tYm94X2NtZCwgMSk7CisJYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kKTsKK30KKwordm9pZAorYmZhX2lvY19pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm0pCit7CisJdW5pb24gYmZpX2lvY19pMmhfbXNnX3UgKm1zZzsKKworCW1zZyA9ICh1bmlvbiBiZmlfaW9jX2kyaF9tc2dfdSAqKW07CisKKwliZmFfaW9jX3N0YXRzKGlvYywgaW9jX2lzcnMpOworCisJc3dpdGNoIChtc2ctPm1oLm1zZ19pZCkgeworCWNhc2UgQkZJX0lPQ19JMkhfSEJFQVQ6CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9DX0kySF9SRUFEWV9FVkVOVDoKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSRUFEWSk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9DX0kySF9FTkFCTEVfUkVQTFk6CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0ZXUlNQX0VOQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9DX0kySF9ESVNBQkxFX1JFUExZOgorCQliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9GV1JTUF9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0NfSTJIX0dFVEFUVFJfUkVQTFk6CisJCWJmYV9pb2NfZ2V0YXR0cl9yZXBseShpb2MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV90cmMoaW9jLCBtc2ctPm1oLm1zZ19pZCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPQyBhdHRhY2ggdGltZSBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAuCisgKgorICogQHBhcmFtW2luXQlpb2MJbWVtb3J5IGZvciBJT0MKKyAqIEBwYXJhbVtpbl0JYmZhCWRyaXZlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbVtpbl0JdHJjbW9kCWtlcm5lbCB0cmFjZSBtb2R1bGUKKyAqIEBwYXJhbVtpbl0JYWVuCWtlcm5lbCBhZW4gZXZlbnQgbW9kdWxlCisgKiBAcGFyYW1baW5dCWxvZ20Ja2VybmVsIGxvZ2dpbmcgbW9kdWxlCisgKi8KK3ZvaWQKK2JmYV9pb2NfYXR0YWNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqYmZhLCBzdHJ1Y3QgYmZhX2lvY19jYmZuX3MgKmNiZm4sCisJICAgICAgIHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKnRpbWVyX21vZCwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwKKwkgICAgICAgc3RydWN0IGJmYV9hZW5fcyAqYWVuLCBzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbSkKK3sKKwlpb2MtPmJmYSA9IGJmYTsKKwlpb2MtPmNiZm4gPSBjYmZuOworCWlvYy0+dGltZXJfbW9kID0gdGltZXJfbW9kOworCWlvYy0+dHJjbW9kID0gdHJjbW9kOworCWlvYy0+YWVuID0gYWVuOworCWlvYy0+bG9nbSA9IGxvZ207CisJaW9jLT5mY21vZGUgPSBCRkFfRkFMU0U7CisJaW9jLT5wbGxpbml0ID0gQkZBX0ZBTFNFOworCWlvYy0+ZGJnX2Z3c2F2ZV9vbmNlID0gQkZBX1RSVUU7CisKKwliZmFfaW9jX21ib3hfYXR0YWNoKGlvYyk7CisJSU5JVF9MSVNUX0hFQUQoJmlvYy0+aGJfbm90aWZ5X3EpOworCisJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKK30KKworLyoqCisgKiBEcml2ZXIgZGV0YWNoIHRpbWUgSU9DIGNsZWFudXAuCisgKi8KK3ZvaWQKK2JmYV9pb2NfZGV0YWNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9ERVRBQ0gpOworfQorCisvKioKKyAqIFNldHVwIElPQyBQQ0kgcHJvcGVydGllcy4KKyAqCisgKiBAcGFyYW1baW5dCXBjaWRldglQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIGZvciB0aGlzIElPQworICovCit2b2lkCitiZmFfaW9jX3BjaV9pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2LAorCQkgZW51bSBiZmlfbWNsYXNzIG1jKQoreworCWlvYy0+aW9jX21jID0gbWM7CisJaW9jLT5wY2lkZXYgPSAqcGNpZGV2OworCWlvYy0+Y3RkZXYgPSAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKTsKKwlpb2MtPmNuYSA9IGlvYy0+Y3RkZXYgJiYgIWlvYy0+ZmNtb2RlOworCisJYmZhX2lvY19tYXBfcG9ydChpb2MpOworCWJmYV9pb2NfcmVnX2luaXQoaW9jKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIElPQyBkbWEgbWVtb3J5CisgKgorICogQHBhcmFtW2luXQlkbV9rdmEJa2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiBJT0MgZG1hIG1lbW9yeQorICogQHBhcmFtW2luXQlkbV9wYQlwaHlzaWNhbCBhZGRyZXNzIG9mIElPQyBkbWEgbWVtb3J5CisgKi8KK3ZvaWQKK2JmYV9pb2NfbWVtX2NsYWltKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTggKmRtX2t2YSwgdTY0IGRtX3BhKQoreworCS8qKgorCSAqIGRtYSBtZW1vcnkgZm9yIGZpcm13YXJlIGF0dHJpYnV0ZQorCSAqLworCWlvYy0+YXR0cl9kbWEua3ZhID0gZG1fa3ZhOworCWlvYy0+YXR0cl9kbWEucGEgPSBkbV9wYTsKKwlpb2MtPmF0dHIgPSAoc3RydWN0IGJmaV9pb2NfYXR0cl9zICopZG1fa3ZhOworfQorCisvKioKKyAqIFJldHVybiBzaXplIG9mIGRtYSBtZW1vcnkgcmVxdWlyZWQuCisgKi8KK3UzMgorYmZhX2lvY19tZW1pbmZvKHZvaWQpCit7CisJcmV0dXJuIEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY19hdHRyX3MpLCBCRkFfRE1BX0FMSUdOX1NaKTsKK30KKwordm9pZAorYmZhX2lvY19lbmFibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2Nfc3RhdHMoaW9jLCBpb2NfZW5hYmxlcyk7CisJaW9jLT5kYmdfZndzYXZlX29uY2UgPSBCRkFfVFJVRTsKKworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0VOQUJMRSk7Cit9CisKK3ZvaWQKK2JmYV9pb2NfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY19zdGF0cyhpb2MsIGlvY19kaXNhYmxlcyk7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRElTQUJMRSk7Cit9CisKKy8qKgorICogUmV0dXJucyBtZW1vcnkgcmVxdWlyZWQgZm9yIHNhdmluZyBmaXJtd2FyZSB0cmFjZSBpbiBjYXNlIG9mIGNyYXNoLgorICogRHJpdmVyIG11c3QgY2FsbCB0aGlzIGludGVyZmFjZSB0byBhbGxvY2F0ZSBtZW1vcnkgcmVxdWlyZWQgZm9yCisgKiBhdXRvbWF0aWMgc2F2aW5nIG9mIGZpcm13YXJlIHRyYWNlLiBEcml2ZXIgc2hvdWxkIGNhbGwKKyAqIGJmYV9pb2NfZGVidWdfbWVtY2xhaW0oKSByaWdodCBhZnRlciBiZmFfaW9jX2F0dGFjaCgpIHRvIHNldHVwIHRoaXMKKyAqIHRyYWNlIG1lbW9yeS4KKyAqLworaW50CitiZmFfaW9jX2RlYnVnX3RyY3N6KGJmYV9ib29sZWFuX3QgYXV0b19yZWNvdmVyKQoreworcmV0dXJuIChhdXRvX3JlY292ZXIpID8gQkZBX0RCR19GV1RSQ19MRU4gOiAwOworfQorCisvKioKKyAqIEluaXRpYWxpemUgbWVtb3J5IGZvciBzYXZpbmcgZmlybXdhcmUgdHJhY2UuIERyaXZlciBtdXN0IGluaXRpYWxpemUKKyAqIHRyYWNlIG1lbW9yeSBiZWZvcmUgY2FsbCBiZmFfaW9jX2VuYWJsZSgpLgorICovCit2b2lkCitiZmFfaW9jX2RlYnVnX21lbWNsYWltKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGJnX2Z3c2F2ZSkKK3sKKwliZmFfYXNzZXJ0KGlvYy0+YXV0b19yZWNvdmVyKTsKKwlpb2MtPmRiZ19md3NhdmUgPSBkYmdfZndzYXZlOworCWlvYy0+ZGJnX2Z3c2F2ZV9sZW4gPSBiZmFfaW9jX2RlYnVnX3RyY3N6KGlvYy0+YXV0b19yZWNvdmVyKTsKK30KKwordTMyCitiZmFfaW9jX3NtZW1fcGdudW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgZm1hZGRyKQoreworCXJldHVybiBQU1NfU01FTV9QR05VTShpb2MtPmlvY19yZWdzLnNtZW1fcGcwLCBmbWFkZHIpOworfQorCit1MzIKK2JmYV9pb2Nfc21lbV9wZ29mZihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBmbWFkZHIpCit7CisJcmV0dXJuIFBTU19TTUVNX1BHT0ZGKGZtYWRkcik7Cit9CisKKy8qKgorICogUmVnaXN0ZXIgbWFpbGJveCBtZXNzYWdlIGhhbmRsZXIgZnVuY3Rpb25zCisgKgorICogQHBhcmFtW2luXQlpb2MJCUlPQyBpbnN0YW5jZQorICogQHBhcmFtW2luXQltY2Z1bmNzCQltZXNzYWdlIGNsYXNzIGhhbmRsZXIgZnVuY3Rpb25zCisgKi8KK3ZvaWQKK2JmYV9pb2NfbWJveF9yZWdpc3RlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9pb2NfbWJveF9tY2Z1bmNfdCAqbWNmdW5jcykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zICptb2QgPSAmaW9jLT5tYm94X21vZDsKKwlpbnQgICAgICAgICAgICAgbWM7CisKKwlmb3IgKG1jID0gMDsgbWMgPCBCRklfTUNfTUFYOyBtYysrKQorCQltb2QtPm1iaGRsclttY10uY2JmbiA9IG1jZnVuY3NbbWNdOworfQorCisvKioKKyAqIFJlZ2lzdGVyIG1haWxib3ggbWVzc2FnZSBoYW5kbGVyIGZ1bmN0aW9uLCB0byBiZSBjYWxsZWQgYnkgY29tbW9uIG1vZHVsZXMKKyAqLwordm9pZAorYmZhX2lvY19tYm94X3JlZ2lzcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gYmZpX21jbGFzcyBtYywKKwkJICAgIGJmYV9pb2NfbWJveF9tY2Z1bmNfdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zICptb2QgPSAmaW9jLT5tYm94X21vZDsKKworCW1vZC0+bWJoZGxyW21jXS5jYmZuID0gY2JmbjsKKwltb2QtPm1iaGRsclttY10uY2JhcmcgPSBjYmFyZzsKK30KKworLyoqCisgKiBRdWV1ZSBhIG1haWxib3ggY29tbWFuZCByZXF1ZXN0IHRvIGZpcm13YXJlLiBXYWl0cyBpZiBtYWlsYm94IGlzIGJ1c3kuCisgKiBSZXNwb25zaWJpbGl0eSBvZiBjYWxsZXIgdG8gc2VyaWFsaXplCisgKgorICogQHBhcmFtW2luXQlpb2MJSU9DIGluc3RhbmNlCisgKiBAcGFyYW1baV0JY21kCU1haWxib3ggY29tbWFuZAorICovCit2b2lkCitiZmFfaW9jX21ib3hfcXVldWUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX21ib3hfY21kX3MgKmNtZCkKK3sKKwlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zICptb2QgPSAmaW9jLT5tYm94X21vZDsKKwl1MzIgICAgICAgIHN0YXQ7CisKKwkvKioKKwkgKiBJZiBhIHByZXZpb3VzIGNvbW1hbmQgaXMgcGVuZGluZywgcXVldWUgbmV3IGNvbW1hbmQKKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJm1vZC0+Y21kX3EpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmNtZC0+cWUsICZtb2QtPmNtZF9xKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIElmIG1haWxib3ggaXMgYnVzeSwgcXVldWUgY29tbWFuZCBmb3IgcG9sbCB0aW1lcgorCSAqLworCXN0YXQgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5oZm5fbWJveF9jbWQpOworCWlmIChzdGF0KSB7CisJCWxpc3RfYWRkX3RhaWwoJmNtZC0+cWUsICZtb2QtPmNtZF9xKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIG1haWxib3ggaXMgZnJlZSAtLSBxdWV1ZSBjb21tYW5kIHRvIGZpcm13YXJlCisJICovCisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCBjbWQtPm1zZywgc2l6ZW9mKGNtZC0+bXNnKSk7Cit9CisKKy8qKgorICogSGFuZGxlIG1haWxib3ggaW50ZXJydXB0cworICovCit2b2lkCitiZmFfaW9jX21ib3hfaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zICptb2QgPSAmaW9jLT5tYm94X21vZDsKKwlzdHJ1Y3QgYmZpX21ibXNnX3MgbTsKKwlpbnQgICAgICAgICAgICAgbWM7CisKKwliZmFfaW9jX21zZ2dldChpb2MsICZtKTsKKworCS8qKgorCSAqIFRyZWF0IElPQyBtZXNzYWdlIGNsYXNzIGFzIHNwZWNpYWwuCisJICovCisJbWMgPSBtLm1oLm1zZ19jbGFzczsKKwlpZiAobWMgPT0gQkZJX01DX0lPQykgeworCQliZmFfaW9jX2lzcihpb2MsICZtKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgobWMgPiBCRklfTUNfTUFYKSB8fCAobW9kLT5tYmhkbHJbbWNdLmNiZm4gPT0gTlVMTCkpCisJCXJldHVybjsKKworCW1vZC0+bWJoZGxyW21jXS5jYmZuKG1vZC0+bWJoZGxyW21jXS5jYmFyZywgJm0pOworfQorCit2b2lkCitiZmFfaW9jX2Vycm9yX2lzcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfSFdFUlJPUik7Cit9CisKKyNpZm5kZWYgQkZBX0JJT1NfQlVJTEQKKworLyoqCisgKiByZXR1cm4gdHJ1ZSBpZiBJT0MgaXMgZGlzYWJsZWQKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJcmV0dXJuIChiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsaW5nKQorCQl8fCBiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpKTsKK30KKworLyoqCisgKiByZXR1cm4gdHJ1ZSBpZiBJT0MgZmlybXdhcmUgaXMgZGlmZmVyZW50LgorICovCitiZmFfYm9vbGVhbl90CitiZmFfaW9jX2Z3X21pc21hdGNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlyZXR1cm4gKGJmYV9mc21fY21wX3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCkKKwkJfHwgYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Z3Y2hlY2spCisJCXx8IGJmYV9mc21fY21wX3N0YXRlKGlvYywgYmZhX2lvY19zbV9taXNtYXRjaCkpOworfQorCisjZGVmaW5lIGJmYV9pb2Nfc3RhdGVfZGlzYWJsZWQoX19zbSkJCVwKKwkoKChfX3NtKSA9PSBCRklfSU9DX1VOSU5JVCkgfHwJCVwKKwkgKChfX3NtKSA9PSBCRklfSU9DX0lOSVRJTkcpIHx8CQlcCisJICgoX19zbSkgPT0gQkZJX0lPQ19IV0lOSVQpIHx8CQlcCisJICgoX19zbSkgPT0gQkZJX0lPQ19ESVNBQkxFRCkgfHwJXAorCSAoKF9fc20pID09IEJGSV9JT0NfSEJGQUlMKSB8fAkJXAorCSAoKF9fc20pID09IEJGSV9JT0NfQ0ZHX0RJU0FCTEVEKSkKKworLyoqCisgKiBDaGVjayBpZiBhZGFwdGVyIGlzIGRpc2FibGVkIC0tIGJvdGggSU9DcyBzaG91bGQgYmUgaW4gYSBkaXNhYmxlZAorICogc3RhdGUuCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NfYWRhcHRlcl9pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICBpb2Nfc3RhdGU7CisJYmZhX29zX2FkZHJfdCAgIHJiID0gaW9jLT5wY2lkZXYucGNpX2Jhcl9rdmE7CisKKwlpZiAoIWJmYV9mc21fY21wX3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCkpCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwlpb2Nfc3RhdGUgPSBiZmFfcmVnX3JlYWQocmIgKyBCRkFfSU9DMF9TVEFURV9SRUcpOworCWlmICghYmZhX2lvY19zdGF0ZV9kaXNhYmxlZChpb2Nfc3RhdGUpKQorCQlyZXR1cm4gQkZBX0ZBTFNFOworCisJaW9jX3N0YXRlID0gYmZhX3JlZ19yZWFkKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKTsKKwlpZiAoIWJmYV9pb2Nfc3RhdGVfZGlzYWJsZWQoaW9jX3N0YXRlKSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiBBZGQgdG8gSU9DIGhlYXJ0YmVhdCBmYWlsdXJlIG5vdGlmaWNhdGlvbiBxdWV1ZS4gVG8gYmUgdXNlZCBieSBjb21tb24KKyAqIG1vZHVsZXMgc3VjaCBhcworICovCit2b2lkCitiZmFfaW9jX2hiZmFpbF9yZWdpc3RlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCQlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgKm5vdGlmeSkKK3sKKwlsaXN0X2FkZF90YWlsKCZub3RpZnktPnFlLCAmaW9jLT5oYl9ub3RpZnlfcSk7Cit9CisKKyNkZWZpbmUgQkZBX01GR19OQU1FICJCcm9jYWRlIgordm9pZAorYmZhX2lvY19nZXRfYWRhcHRlcl9hdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywKKwkJCSBzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zICphZF9hdHRyKQoreworCXN0cnVjdCBiZmlfaW9jX2F0dHJfcyAqaW9jX2F0dHI7CisJY2hhciAgICAgICAgICAgIG1vZGVsW0JGQV9BREFQVEVSX01PREVMX05BTUVfTEVOXTsKKworCWlvY19hdHRyID0gaW9jLT5hdHRyOworCWJmYV9vc19tZW1jcHkoKHZvaWQgKikmYWRfYXR0ci0+c2VyaWFsX251bSwKKwkJICAgICAgKHZvaWQgKilpb2NfYXR0ci0+YnJjZF9zZXJpYWxudW0sCisJCSAgICAgIEJGQV9BREFQVEVSX1NFUklBTF9OVU1fTEVOKTsKKworCWJmYV9vc19tZW1jcHkoJmFkX2F0dHItPmZ3X3ZlciwgaW9jX2F0dHItPmZ3X3ZlcnNpb24sIEJGQV9WRVJTSU9OX0xFTik7CisJYmZhX29zX21lbWNweSgmYWRfYXR0ci0+b3B0cm9tX3ZlciwgaW9jX2F0dHItPm9wdHJvbV92ZXJzaW9uLAorCQkgICAgICBCRkFfVkVSU0lPTl9MRU4pOworCWJmYV9vc19tZW1jcHkoJmFkX2F0dHItPm1hbnVmYWN0dXJlciwgQkZBX01GR19OQU1FLAorCQkgICAgICBCRkFfQURBUFRFUl9NRkdfTkFNRV9MRU4pOworCWJmYV9vc19tZW1jcHkoJmFkX2F0dHItPnZwZCwgJmlvY19hdHRyLT52cGQsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX21mZ192cGRfcykpOworCisJYWRfYXR0ci0+bnBvcnRzID0gQkZJX0FEQVBURVJfR0VUUChOUE9SVFMsIGlvY19hdHRyLT5hZGFwdGVyX3Byb3ApOworCWFkX2F0dHItPm1heF9zcGVlZCA9IEJGSV9BREFQVEVSX0dFVFAoU1BFRUQsIGlvY19hdHRyLT5hZGFwdGVyX3Byb3ApOworCisJLyoqCisJICogbW9kZWwgbmFtZQorCSAqLworCWlmIChCRklfQURBUFRFUl9HRVRQKFNQRUVELCBpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKSA9PSAxMCkgeworCQlzdHJjcHkobW9kZWwsICJCUi0xMD8wIik7CisJCW1vZGVsWzVdID0gJzAnICsgYWRfYXR0ci0+bnBvcnRzOworCX0gZWxzZSB7CisJCXN0cmNweShtb2RlbCwgIkJyb2NhZGUtPz81Iik7CisJCW1vZGVsWzhdID0KKwkJCScwJyArIEJGSV9BREFQVEVSX0dFVFAoU1BFRUQsIGlvY19hdHRyLT5hZGFwdGVyX3Byb3ApOworCQltb2RlbFs5XSA9ICcwJyArIGFkX2F0dHItPm5wb3J0czsKKwl9CisKKwlpZiAoQkZJX0FEQVBURVJfSVNfU1BFQ0lBTChpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKSkKKwkJYWRfYXR0ci0+cHJvdG90eXBlID0gMTsKKwllbHNlCisJCWFkX2F0dHItPnByb3RvdHlwZSA9IDA7CisKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT5tb2RlbCwgbW9kZWwsIEJGQV9BREFQVEVSX01PREVMX05BTUVfTEVOKTsKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT5tb2RlbF9kZXNjciwgJmFkX2F0dHItPm1vZGVsLAorCQkgICAgICBCRkFfQURBUFRFUl9NT0RFTF9OQU1FX0xFTik7CisKKwlhZF9hdHRyLT5wd3duID0gYmZhX2lvY19nZXRfcHd3bihpb2MpOworCWFkX2F0dHItPm1hYyA9IGJmYV9pb2NfZ2V0X21hYyhpb2MpOworCisJYWRfYXR0ci0+cGNpZV9nZW4gPSBpb2NfYXR0ci0+cGNpZV9nZW47CisJYWRfYXR0ci0+cGNpZV9sYW5lcyA9IGlvY19hdHRyLT5wY2llX2xhbmVzOworCWFkX2F0dHItPnBjaWVfbGFuZXNfb3JpZyA9IGlvY19hdHRyLT5wY2llX2xhbmVzX29yaWc7CisJYWRfYXR0ci0+YXNpY19yZXYgPSBpb2NfYXR0ci0+YXNpY19yZXY7CisJYWRfYXR0ci0+aHdfdmVyWzBdID0gJ1InOworCWFkX2F0dHItPmh3X3ZlclsxXSA9ICdlJzsKKwlhZF9hdHRyLT5od192ZXJbMl0gPSAndic7CisJYWRfYXR0ci0+aHdfdmVyWzNdID0gJy0nOworCWFkX2F0dHItPmh3X3Zlcls0XSA9IGlvY19hdHRyLT5hc2ljX3JldjsKKwlhZF9hdHRyLT5od192ZXJbNV0gPSAnXDAnOworCisJYWRfYXR0ci0+Y25hX2NhcGFibGUgPSBpb2MtPmNuYTsKK30KKwordm9pZAorYmZhX2lvY19nZXRfYXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmFfaW9jX2F0dHJfcyAqaW9jX2F0dHIpCit7CisJYmZhX29zX21lbXNldCgodm9pZCAqKWlvY19hdHRyLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9pb2NfYXR0cl9zKSk7CisKKwlpb2NfYXR0ci0+c3RhdGUgPSBiZmFfc21fdG9fc3RhdGUoaW9jX3NtX3RhYmxlLCBpb2MtPmZzbSk7CisJaW9jX2F0dHItPnBvcnRfaWQgPSBpb2MtPnBvcnRfaWQ7CisKKwlpZiAoIWlvYy0+Y3RkZXYpCisJCWlvY19hdHRyLT5pb2NfdHlwZSA9IEJGQV9JT0NfVFlQRV9GQzsKKwllbHNlIGlmIChpb2MtPmlvY19tYyA9PSBCRklfTUNfSU9DRkMpCisJCWlvY19hdHRyLT5pb2NfdHlwZSA9IEJGQV9JT0NfVFlQRV9GQ29FOworCWVsc2UgaWYgKGlvYy0+aW9jX21jID09IEJGSV9NQ19MTCkKKwkJaW9jX2F0dHItPmlvY190eXBlID0gQkZBX0lPQ19UWVBFX0xMOworCisJYmZhX2lvY19nZXRfYWRhcHRlcl9hdHRyKGlvYywgJmlvY19hdHRyLT5hZGFwdGVyX2F0dHIpOworCisJaW9jX2F0dHItPnBjaV9hdHRyLmRldmljZV9pZCA9IGlvYy0+cGNpZGV2LmRldmljZV9pZDsKKwlpb2NfYXR0ci0+cGNpX2F0dHIucGNpZm4gPSBpb2MtPnBjaWRldi5wY2lfZnVuYzsKKwlpb2NfYXR0ci0+cGNpX2F0dHIuY2hpcF9yZXZbMF0gPSAnUic7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzFdID0gJ2UnOworCWlvY19hdHRyLT5wY2lfYXR0ci5jaGlwX3JldlsyXSA9ICd2JzsKKwlpb2NfYXR0ci0+cGNpX2F0dHIuY2hpcF9yZXZbM10gPSAnLSc7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzRdID0gaW9jX2F0dHItPmFkYXB0ZXJfYXR0ci5hc2ljX3JldjsKKwlpb2NfYXR0ci0+cGNpX2F0dHIuY2hpcF9yZXZbNV0gPSAnXDAnOworfQorCisvKioKKyAqICBoYWxfd3duX3B1YmxpYworICovCit3d25fdAorYmZhX2lvY19nZXRfcHd3bihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdW5pb24geworCQl3d25fdCAgICAgICAgICAgd3duOworCQl1OCAgICAgICAgIGJ5dGVbc2l6ZW9mKHd3bl90KV07CisJfQorCXc7CisKKwl3Lnd3biA9IGlvYy0+YXR0ci0+bWZnX3d3bjsKKworCWlmIChiZmFfaW9jX3BvcnRpZChpb2MpID09IDEpCisJCXcuYnl0ZVs3XSsrOworCisJcmV0dXJuIHcud3duOworfQorCit3d25fdAorYmZhX2lvY19nZXRfbnd3bihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdW5pb24geworCQl3d25fdCAgICAgICAgICAgd3duOworCQl1OCAgICAgICAgIGJ5dGVbc2l6ZW9mKHd3bl90KV07CisJfQorCXc7CisKKwl3Lnd3biA9IGlvYy0+YXR0ci0+bWZnX3d3bjsKKworCWlmIChiZmFfaW9jX3BvcnRpZChpb2MpID09IDEpCisJCXcuYnl0ZVs3XSsrOworCisJdy5ieXRlWzBdID0gMHgyMDsKKworCXJldHVybiB3Lnd3bjsKK30KKword3duX3QKK2JmYV9pb2NfZ2V0X3d3bl9uYWE1KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTE2IGluc3QpCit7CisJdW5pb24geworCQl3d25fdCAgICAgICAgICAgd3duOworCQl1OCAgICAgICAgIGJ5dGVbc2l6ZW9mKHd3bl90KV07CisJfQorCXcgICAgICAgICAgICAgICwgdzU7CisKKwliZmFfdHJjKGlvYywgaW5zdCk7CisKKwl3Lnd3biA9IGlvYy0+YXR0ci0+bWZnX3d3bjsKKwl3NS5ieXRlWzBdID0gMHg1MCB8IHcuYnl0ZVsyXSA+PiA0OworCXc1LmJ5dGVbMV0gPSB3LmJ5dGVbMl0gPDwgNCB8IHcuYnl0ZVszXSA+PiA0OworCXc1LmJ5dGVbMl0gPSB3LmJ5dGVbM10gPDwgNCB8IHcuYnl0ZVs0XSA+PiA0OworCXc1LmJ5dGVbM10gPSB3LmJ5dGVbNF0gPDwgNCB8IHcuYnl0ZVs1XSA+PiA0OworCXc1LmJ5dGVbNF0gPSB3LmJ5dGVbNV0gPDwgNCB8IHcuYnl0ZVs2XSA+PiA0OworCXc1LmJ5dGVbNV0gPSB3LmJ5dGVbNl0gPDwgNCB8IHcuYnl0ZVs3XSA+PiA0OworCXc1LmJ5dGVbNl0gPSB3LmJ5dGVbN10gPDwgNCB8IChpbnN0ICYgMHgwZjAwKSA+PiA4OworCXc1LmJ5dGVbN10gPSAoaW5zdCAmIDB4ZmYpOworCisJcmV0dXJuIHc1Lnd3bjsKK30KKwordTY0CitiZmFfaW9jX2dldF9hZGlkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlyZXR1cm4gaW9jLT5hdHRyLT5tZmdfd3duOworfQorCittYWNfdAorYmZhX2lvY19nZXRfbWFjKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwltYWNfdCAgICAgICAgICAgbWFjOworCisJbWFjID0gaW9jLT5hdHRyLT5tZmdfbWFjOworCW1hYy5tYWNbTUFDX0FERFJMRU4gLSAxXSArPSBiZmFfaW9jX3BjaWZuKGlvYyk7CisKKwlyZXR1cm4gbWFjOworfQorCit2b2lkCitiZmFfaW9jX3NldF9mY21vZGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+ZmNtb2RlID0gQkZBX1RSVUU7CisJaW9jLT5wb3J0X2lkID0gYmZhX2lvY19wY2lmbihpb2MpOworfQorCitiZmFfYm9vbGVhbl90CitiZmFfaW9jX2dldF9mY21vZGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiBpb2MtPmZjbW9kZSB8fCAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkICE9IEJGQV9QQ0lfREVWSUNFX0lEX0NUKTsKK30KKworLyoqCisgKiBSZXR1cm4gdHJ1ZSBpZiBpbnRlcnJ1cHQgc2hvdWxkIGJlIGNsYWltZWQuCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NfaW50eF9jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICBpc3IsIG1zazsKKworCS8qKgorCSAqIEFsd2F5cyBjbGFpbSBpZiBub3QgY2F0YXB1bHQuCisJICovCisJaWYgKCFpb2MtPmN0ZGV2KQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwkvKioKKwkgKiBGQUxTRSBpZiBuZXh0IGRldmljZSBpcyBjbGFpbWluZyBpbnRlcnJ1cHQuCisJICogVFJVRSBpZiBuZXh0IGRldmljZSBpcyBub3QgaW50ZXJydXB0aW5nIG9yIG5vdCBwcmVzZW50LgorCSAqLworCW1zayA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLnNoaXJxX21za19uZXh0KTsKKwlpc3IgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5zaGlycV9pc3JfbmV4dCk7CisJcmV0dXJuICEoaXNyICYgfm1zayk7Cit9CisKKy8qKgorICogU2VuZCBBRU4gbm90aWZpY2F0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2Flbl9wb3N0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBiZmFfaW9jX2Flbl9ldmVudCBldmVudCkKK3sKKwl1bmlvbiBiZmFfYWVuX2RhdGFfdSBhZW5fZGF0YTsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kID0gaW9jLT5sb2dtOworCXMzMiAgICAgICAgIGluc3RfbnVtID0gMDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgaW9jX2F0dHI7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9DX0FFTl9IQkdPT0Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lPQ19IQkdPT0QsIGluc3RfbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX0FFTl9IQkZBSUw6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lPQ19IQkZBSUwsIGluc3RfbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX0FFTl9FTkFCTEU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lPQ19FTkFCTEUsIGluc3RfbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX0FFTl9ESVNBQkxFOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfRElTQUJMRSwgaW5zdF9udW0pOworCQlicmVhazsKKwljYXNlIEJGQV9JT0NfQUVOX0ZXTUlTTUFUQ0g6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lPQ19GV01JU01BVENILCBpbnN0X251bSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW1lbXNldCgmYWVuX2RhdGEuaW9jLnB3d24sIDAsIHNpemVvZihhZW5fZGF0YS5pb2MucHd3bikpOworCW1lbXNldCgmYWVuX2RhdGEuaW9jLm1hYywgMCwgc2l6ZW9mKGFlbl9kYXRhLmlvYy5tYWMpKTsKKwliZmFfaW9jX2dldF9hdHRyKGlvYywgJmlvY19hdHRyKTsKKwlzd2l0Y2ggKGlvY19hdHRyLmlvY190eXBlKSB7CisJY2FzZSBCRkFfSU9DX1RZUEVfRkM6CisJCWFlbl9kYXRhLmlvYy5wd3duID0gYmZhX2lvY19nZXRfcHd3bihpb2MpOworCQlicmVhazsKKwljYXNlIEJGQV9JT0NfVFlQRV9GQ29FOgorCQlhZW5fZGF0YS5pb2MucHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oaW9jKTsKKwkJYWVuX2RhdGEuaW9jLm1hYyA9IGJmYV9pb2NfZ2V0X21hYyhpb2MpOworCQlicmVhazsKKwljYXNlIEJGQV9JT0NfVFlQRV9MTDoKKwkJYWVuX2RhdGEuaW9jLm1hYyA9IGJmYV9pb2NfZ2V0X21hYyhpb2MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KGlvY19hdHRyLmlvY190eXBlID09IEJGQV9JT0NfVFlQRV9GQyk7CisJCWJyZWFrOworCX0KKwlhZW5fZGF0YS5pb2MuaW9jX3R5cGUgPSBpb2NfYXR0ci5pb2NfdHlwZTsKK30KKworLyoqCisgKiBSZXRyaWV2ZSBzYXZlZCBmaXJtd2FyZSB0cmFjZSBmcm9tIGEgcHJpb3IgSU9DIGZhaWx1cmUuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2lvY19kZWJ1Z19md3NhdmUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbikKK3sKKwlpbnQgICAgICAgICAgICAgdGxlbjsKKworCWlmIChpb2MtPmRiZ19md3NhdmVfbGVuID09IDApCisJCXJldHVybiBCRkFfU1RBVFVTX0VOT0ZTQVZFOworCisJdGxlbiA9ICp0cmNsZW47CisJaWYgKHRsZW4gPiBpb2MtPmRiZ19md3NhdmVfbGVuKQorCQl0bGVuID0gaW9jLT5kYmdfZndzYXZlX2xlbjsKKworCWJmYV9vc19tZW1jcHkodHJjZGF0YSwgaW9jLT5kYmdfZndzYXZlLCB0bGVuKTsKKwkqdHJjbGVuID0gdGxlbjsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBSZXRyaWV2ZSBzYXZlZCBmaXJtd2FyZSB0cmFjZSBmcm9tIGEgcHJpb3IgSU9DIGZhaWx1cmUuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2lvY19kZWJ1Z19md3RyYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKnRyY2RhdGEsIGludCAqdHJjbGVuKQoreworCXUzMiAgICAgICAgcGdudW07CisJdTMyICAgICAgICBsb2ZmID0gQkZBX0RCR19GV1RSQ19PRkYoYmZhX2lvY19wb3J0aWQoaW9jKSk7CisJaW50ICAgICAgICAgICAgIGksIHRsZW47CisJdTMyICAgICAgICp0YnVmID0gdHJjZGF0YSwgcjMyOworCisJYmZhX3RyYyhpb2MsICp0cmNsZW4pOworCisJcGdudW0gPSBiZmFfaW9jX3NtZW1fcGdudW0oaW9jLCBsb2ZmKTsKKwlsb2ZmID0gYmZhX2lvY19zbWVtX3Bnb2ZmKGlvYywgbG9mZik7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sIHBnbnVtKTsKKworCXRsZW4gPSAqdHJjbGVuOworCWlmICh0bGVuID4gQkZBX0RCR19GV1RSQ19MRU4pCisJCXRsZW4gPSBCRkFfREJHX0ZXVFJDX0xFTjsKKwl0bGVuIC89IHNpemVvZih1MzIpOworCisJYmZhX3RyYyhpb2MsIHRsZW4pOworCisJZm9yIChpID0gMDsgaSA8IHRsZW47IGkrKykgeworCQlyMzIgPSBiZmFfbWVtX3JlYWQoaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQsIGxvZmYpOworCQl0YnVmW2ldID0gYmZhX29zX250b2hsKHIzMik7CisJCWxvZmYgKz0gc2l6ZW9mKHUzMik7CisKKwkJLyoqCisJCSAqIGhhbmRsZSBwYWdlIG9mZnNldCB3cmFwIGFyb3VuZAorCQkgKi8KKwkJbG9mZiA9IFBTU19TTUVNX1BHT0ZGKGxvZmYpOworCQlpZiAobG9mZiA9PSAwKSB7CisJCQlwZ251bSsrOworCQkJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sIHBnbnVtKTsKKwkJfQorCX0KKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwKKwkJICAgICAgYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgMCkpOworCWJmYV90cmMoaW9jLCBwZ251bSk7CisKKwkqdHJjbGVuID0gdGxlbiAqIHNpemVvZih1MzIpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIFNhdmUgZmlybXdhcmUgdHJhY2UgaWYgY29uZmlndXJlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfZGVidWdfc2F2ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaW50ICAgICAgICAgICAgIHRsZW47CisKKwlpZiAoaW9jLT5kYmdfZndzYXZlX2xlbikgeworCQl0bGVuID0gaW9jLT5kYmdfZndzYXZlX2xlbjsKKwkJYmZhX2lvY19kZWJ1Z19md3RyYyhpb2MsIGlvYy0+ZGJnX2Z3c2F2ZSwgJnRsZW4pOworCX0KK30KKworLyoqCisgKiBGaXJtd2FyZSBmYWlsdXJlIGRldGVjdGVkLiBTdGFydCByZWNvdmVyeSBhY3Rpb25zLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19yZWNvdmVyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlpZiAoaW9jLT5kYmdfZndzYXZlX29uY2UpIHsKKwkJaW9jLT5kYmdfZndzYXZlX29uY2UgPSBCRkFfRkFMU0U7CisJCWJmYV9pb2NfZGVidWdfc2F2ZShpb2MpOworCX0KKworCWJmYV9pb2Nfc3RhdHMoaW9jLCBpb2NfaGJmYWlscyk7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfSEJGQUlMKTsKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQKK2JmYV9pb2NfYWVuX3Bvc3Qoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmYV9pb2NfYWVuX2V2ZW50IGV2ZW50KQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19yZWNvdmVyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZWZkNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuaApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0lPQ19IX18KKyNkZWZpbmUgX19CRkFfSU9DX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3NtLmg+CisjaW5jbHVkZSA8YmZpL2JmaS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfaW9jLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9ib290Lmg+CisjaW5jbHVkZSA8YmZhX3RpbWVyLmg+CisKKy8qKgorICogUENJIGRldmljZSBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSBJT0MKKyAqLworc3RydWN0IGJmYV9wY2lkZXZfcyB7CisJaW50ICAgICAgICAgICAgIHBjaV9zbG90OworCXU4ICAgICAgICAgcGNpX2Z1bmM7CisJdTE2CWRldmljZV9pZDsKKwliZmFfb3NfYWRkcl90ICAgcGNpX2Jhcl9rdmE7Cit9OworCisvKioKKyAqIFN0cnVjdHVyZSB1c2VkIHRvIHJlbWVtYmVyIHRoZSBETUEtYWJsZSBtZW1vcnkgYmxvY2sncyBLVkEgYW5kIFBoeXNpY2FsCisgKiBBZGRyZXNzCisgKi8KK3N0cnVjdCBiZmFfZG1hX3MgeworCXZvaWQJCSprdmE7CS8qISBLZXJuZWwgdmlydHVhbCBhZGRyZXNzCSovCisJdTY0CXBhOwkvKiEgUGh5c2ljYWwgYWRkcmVzcwkJKi8KK307CisKKyNkZWZpbmUgQkZBX0RNQV9BTElHTl9TWgkyNTYKKyNkZWZpbmUgQkZBX1JPVU5EVVAoX2wsIF9zKQkoKChfbCkgKyAoKF9zKSAtIDEpKSAmIH4oKF9zKSAtIDEpKQorCisKKworI2RlZmluZSBiZmFfZG1hX2FkZHJfc2V0KGRtYV9hZGRyLCBwYSkJXAorCQlfX2JmYV9kbWFfYWRkcl9zZXQoJmRtYV9hZGRyLCAodTY0KXBhKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYmZhX2RtYV9hZGRyX3NldCh1bmlvbiBiZmlfYWRkcl91ICpkbWFfYWRkciwgdTY0IHBhKQoreworCWRtYV9hZGRyLT5hMzIuYWRkcl9sbyA9ICh1MzIpIHBhOworCWRtYV9hZGRyLT5hMzIuYWRkcl9oaSA9ICh1MzIpIChiZmFfb3NfdTMyKHBhKSk7Cit9CisKKworI2RlZmluZSBiZmFfZG1hX2JlX2FkZHJfc2V0KGRtYV9hZGRyLCBwYSkJXAorCQlfX2JmYV9kbWFfYmVfYWRkcl9zZXQoJmRtYV9hZGRyLCAodTY0KXBhKQorc3RhdGljIGlubGluZSB2b2lkCitfX2JmYV9kbWFfYmVfYWRkcl9zZXQodW5pb24gYmZpX2FkZHJfdSAqZG1hX2FkZHIsIHU2NCBwYSkKK3sKKwlkbWFfYWRkci0+YTMyLmFkZHJfbG8gPSAodTMyKSBiZmFfb3NfaHRvbmwocGEpOworCWRtYV9hZGRyLT5hMzIuYWRkcl9oaSA9ICh1MzIpIGJmYV9vc19odG9ubChiZmFfb3NfdTMyKHBhKSk7Cit9CisKK3N0cnVjdCBiZmFfaW9jX3JlZ3NfcyB7CisJYmZhX29zX2FkZHJfdCAgIGhmbl9tYm94X2NtZDsKKwliZmFfb3NfYWRkcl90ICAgaGZuX21ib3g7CisJYmZhX29zX2FkZHJfdCAgIGxwdV9tYm94X2NtZDsKKwliZmFfb3NfYWRkcl90ICAgbHB1X21ib3g7CisJYmZhX29zX2FkZHJfdCAgIHBzc19jdGxfcmVnOworCWJmYV9vc19hZGRyX3QgICBhcHBfcGxsX2Zhc3RfY3RsX3JlZzsKKwliZmFfb3NfYWRkcl90ICAgYXBwX3BsbF9zbG93X2N0bF9yZWc7CisJYmZhX29zX2FkZHJfdCAgIGlvY19zZW1fcmVnOworCWJmYV9vc19hZGRyX3QgICBpb2NfdXNhZ2Vfc2VtX3JlZzsKKwliZmFfb3NfYWRkcl90ICAgaW9jX3VzYWdlX3JlZzsKKwliZmFfb3NfYWRkcl90ICAgaG9zdF9wYWdlX251bV9mbjsKKwliZmFfb3NfYWRkcl90ICAgaGVhcnRiZWF0OworCWJmYV9vc19hZGRyX3QgICBpb2NfZndzdGF0ZTsKKwliZmFfb3NfYWRkcl90ICAgbGxfaGFsdDsKKwliZmFfb3NfYWRkcl90ICAgc2hpcnFfaXNyX25leHQ7CisJYmZhX29zX2FkZHJfdCAgIHNoaXJxX21za19uZXh0OworCWJmYV9vc19hZGRyX3QgICBzbWVtX3BhZ2Vfc3RhcnQ7CisJdTMyCXNtZW1fcGcwOworfTsKKworI2RlZmluZSBiZmFfcmVnX3JlYWQoX3JhZGRyKQliZmFfb3NfcmVnX3JlYWQoX3JhZGRyKQorI2RlZmluZSBiZmFfcmVnX3dyaXRlKF9yYWRkciwgX3ZhbCkJYmZhX29zX3JlZ193cml0ZShfcmFkZHIsIF92YWwpCisjZGVmaW5lIGJmYV9tZW1fcmVhZChfcmFkZHIsIF9vZmYpCWJmYV9vc19tZW1fcmVhZChfcmFkZHIsIF9vZmYpCisjZGVmaW5lIGJmYV9tZW1fd3JpdGUoX3JhZGRyLCBfb2ZmLCBfdmFsKQlcCisJCQkJCWJmYV9vc19tZW1fd3JpdGUoX3JhZGRyLCBfb2ZmLCBfdmFsKQorLyoqCisgKiBJT0MgTWFpbGJveCBzdHJ1Y3R1cmVzCisgKi8KK3N0cnVjdCBiZmFfbWJveF9jbWRfcyB7CisJc3RydWN0IGxpc3RfaGVhZAkJcWU7CisJdTMyCW1zZ1tCRklfSU9DX01TR1NaXTsKK307CisKKy8qKgorICogSU9DIG1haWxib3ggbW9kdWxlCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9pb2NfbWJveF9tY2Z1bmNfdCkodm9pZCAqY2JhcmcsIHN0cnVjdCBiZmlfbWJtc2dfcyAqbSk7CitzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNtZF9xOwkJLyogIHBlbmRpbmcgbWJveCBxdWV1ZQkqLworCWludAkJbm1jbGFzczsJLyogIG51bWJlciBvZiBoYW5kbGVycyAqLworCXN0cnVjdCB7CisJCWJmYV9pb2NfbWJveF9tY2Z1bmNfdAljYmZuOwkvKiAgbWVzc2FnZSBoYW5kbGVycwkqLworCQl2b2lkCQkJKmNiYXJnOworCX0gbWJoZGxyW0JGSV9NQ19NQVhdOworfTsKKworLyoqCisgKiBJT0MgY2FsbGJhY2sgZnVuY3Rpb24gaW50ZXJmYWNlcworICovCit0eXBlZGVmIHZvaWQgKCpiZmFfaW9jX2VuYWJsZV9jYmZuX3QpKHZvaWQgKmJmYSwgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfaW9jX2Rpc2FibGVfY2Jmbl90KSh2b2lkICpiZmEpOwordHlwZWRlZiB2b2lkICgqYmZhX2lvY19oYmZhaWxfY2Jmbl90KSh2b2lkICpiZmEpOwordHlwZWRlZiB2b2lkICgqYmZhX2lvY19yZXNldF9jYmZuX3QpKHZvaWQgKmJmYSk7CitzdHJ1Y3QgYmZhX2lvY19jYmZuX3MgeworCWJmYV9pb2NfZW5hYmxlX2NiZm5fdAllbmFibGVfY2JmbjsKKwliZmFfaW9jX2Rpc2FibGVfY2Jmbl90CWRpc2FibGVfY2JmbjsKKwliZmFfaW9jX2hiZmFpbF9jYmZuX3QJaGJmYWlsX2NiZm47CisJYmZhX2lvY19yZXNldF9jYmZuX3QJcmVzZXRfY2JmbjsKK307CisKKy8qKgorICogSGVhcnRiZWF0IGZhaWx1cmUgbm90aWZpY2F0aW9uIHF1ZXVlIGVsZW1lbnQuCisgKi8KK3N0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyB7CisJc3RydWN0IGxpc3RfaGVhZAkJcWU7CisJYmZhX2lvY19oYmZhaWxfY2Jmbl90CWNiZm47CisJdm9pZAkJCSpjYmFyZzsKK307CisKKy8qKgorICogSW5pdGlhbGl6ZSBhIGhlYXJ0YmVhdCBmYWlsdXJlIG5vdGlmaWNhdGlvbiBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSBiZmFfaW9jX2hiZmFpbF9pbml0KF9fbm90aWZ5LCBfX2NiZm4sIF9fY2JhcmcpIGRvIHsJXAorCShfX25vdGlmeSktPmNiZm4gPSAoX19jYmZuKTsgICAgICBcCisJKF9fbm90aWZ5KS0+Y2JhcmcgPSAoX19jYmFyZyk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworc3RydWN0IGJmYV9pb2NfcyB7CisJYmZhX2ZzbV90CQlmc207CisJc3RydWN0IGJmYV9zCQkqYmZhOworCXN0cnVjdCBiZmFfcGNpZGV2X3MJcGNpZGV2OworCXN0cnVjdCBiZmFfdGltZXJfbW9kX3MgCSp0aW1lcl9tb2Q7CisJc3RydWN0IGJmYV90aW1lcl9zIAlpb2NfdGltZXI7CisJc3RydWN0IGJmYV90aW1lcl9zIAlzZW1fdGltZXI7CisJdTMyCQloYl9jb3VudDsKKwl1MzIJCWhiX2ZhaWw7CisJdTMyCQlyZXRyeV9jb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQloYl9ub3RpZnlfcTsKKwl2b2lkCQkJKmRiZ19md3NhdmU7CisJaW50CQkJZGJnX2Z3c2F2ZV9sZW47CisJYmZhX2Jvb2xlYW5fdAkJZGJnX2Z3c2F2ZV9vbmNlOworCWVudW0gYmZpX21jbGFzcwkJaW9jX21jOworCXN0cnVjdCBiZmFfaW9jX3JlZ3NfcyAJaW9jX3JlZ3M7CisJc3RydWN0IGJmYV90cmNfbW9kX3MJKnRyY21vZDsKKwlzdHJ1Y3QgYmZhX2Flbl9zCSphZW47CisJc3RydWN0IGJmYV9sb2dfbW9kX3MJKmxvZ207CisJc3RydWN0IGJmYV9pb2NfZHJ2X3N0YXRzX3MJc3RhdHM7CisJYmZhX2Jvb2xlYW5fdAkJYXV0b19yZWNvdmVyOworCWJmYV9ib29sZWFuX3QJCWZjbW9kZTsKKwliZmFfYm9vbGVhbl90CQljdGRldjsKKwliZmFfYm9vbGVhbl90CQljbmE7CisJYmZhX2Jvb2xlYW5fdAkJcGxsaW5pdDsKKwl1OAkJCXBvcnRfaWQ7CisKKwlzdHJ1Y3QgYmZhX2RtYV9zCWF0dHJfZG1hOworCXN0cnVjdCBiZmlfaW9jX2F0dHJfcwkqYXR0cjsKKwlzdHJ1Y3QgYmZhX2lvY19jYmZuX3MJKmNiZm47CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyBtYm94X21vZDsKK307CisKKyNkZWZpbmUgYmZhX2lvY19wY2lmbihfX2lvYykJCShfX2lvYyktPnBjaWRldi5wY2lfZnVuYworI2RlZmluZSBiZmFfaW9jX2RldmlkKF9faW9jKQkJKF9faW9jKS0+cGNpZGV2LmRldmljZV9pZAorI2RlZmluZSBiZmFfaW9jX2JhcjAoX19pb2MpCQkoX19pb2MpLT5wY2lkZXYucGNpX2Jhcl9rdmEKKyNkZWZpbmUgYmZhX2lvY19wb3J0aWQoX19pb2MpCQkoKF9faW9jKS0+cG9ydF9pZCkKKyNkZWZpbmUgYmZhX2lvY19mZXRjaF9zdGF0cyhfX2lvYywgX19zdGF0cykgXAorCQkoKF9fc3RhdHMpLT5kcnZfc3RhdHMpID0gKF9faW9jKS0+c3RhdHMKKyNkZWZpbmUgYmZhX2lvY19jbHJfc3RhdHMoX19pb2MpCVwKKwkJYmZhX29zX21lbXNldCgmKF9faW9jKS0+c3RhdHMsIDAsIHNpemVvZigoX19pb2MpLT5zdGF0cykpCisjZGVmaW5lIGJmYV9pb2NfbWF4ZnJzaXplKF9faW9jKQkoX19pb2MpLT5hdHRyLT5tYXhmcnNpemUKKyNkZWZpbmUgYmZhX2lvY19yeF9iYmNyZWRpdChfX2lvYykJKF9faW9jKS0+YXR0ci0+cnhfYmJjcmVkaXQKKyNkZWZpbmUgYmZhX2lvY19zcGVlZF9zdXAoX19pb2MpCVwKKwlCRklfQURBUFRFUl9HRVRQKFNQRUVELCAoX19pb2MpLT5hdHRyLT5hZGFwdGVyX3Byb3ApCisKKy8qKgorICogSU9DIG1haWxib3ggaW50ZXJmYWNlCisgKi8KK3ZvaWQgYmZhX2lvY19tYm94X3F1ZXVlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9tYm94X2NtZF9zICpjbWQpOwordm9pZCBiZmFfaW9jX21ib3hfcmVnaXN0ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAorCQliZmFfaW9jX21ib3hfbWNmdW5jX3QgKm1jZnVuY3MpOwordm9pZCBiZmFfaW9jX21ib3hfaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit2b2lkIGJmYV9pb2NfbWJveF9zZW5kKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqaW9jX21zZywgaW50IGxlbik7Cit2b2lkIGJmYV9pb2NfbXNnZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqbWJtc2cpOwordm9pZCBiZmFfaW9jX21ib3hfcmVnaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBiZmlfbWNsYXNzIG1jLAorCQliZmFfaW9jX21ib3hfbWNmdW5jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworCisvKioKKyAqIElPQyBpbnRlcmZhY2VzCisgKi8KK3ZvaWQgYmZhX2lvY19hdHRhY2goc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICpiZmEsCisJCXN0cnVjdCBiZmFfaW9jX2NiZm5fcyAqY2Jmbiwgc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqdGltZXJfbW9kLAorCQlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLAorCQlzdHJ1Y3QgYmZhX2Flbl9zICphZW4sIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtKTsKK3ZvaWQgYmZhX2lvY19kZXRhY2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19wY2lfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldiwKKwkJZW51bSBiZmlfbWNsYXNzIG1jKTsKK3UzMiBiZmFfaW9jX21lbWluZm8odm9pZCk7Cit2b2lkIGJmYV9pb2NfbWVtX2NsYWltKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgIHU4ICpkbV9rdmEsIHU2NCBkbV9wYSk7Cit2b2lkIGJmYV9pb2NfZW5hYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit2b2lkIGJmYV9pb2NfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworYmZhX2Jvb2xlYW5fdCBiZmFfaW9jX2ludHhfY2xhaW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKKwordm9pZCBiZmFfaW9jX2Jvb3Qoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgYm9vdF90eXBlLCB1MzIgYm9vdF9wYXJhbSk7Cit2b2lkIGJmYV9pb2NfaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmaV9tYm1zZ19zICptc2cpOwordm9pZCBiZmFfaW9jX2Vycm9yX2lzcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgaW50eCk7CitiZmFfc3RhdHVzX3QgYmZhX2lvY19wbGxfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworYmZhX2Jvb2xlYW5fdCBiZmFfaW9jX2lzX29wZXJhdGlvbmFsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfaXNfZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK2JmYV9ib29sZWFuX3QgYmZhX2lvY19md19taXNtYXRjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworYmZhX2Jvb2xlYW5fdCBiZmFfaW9jX2FkYXB0ZXJfaXNfZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19jZmdfY29tcGxldGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19nZXRfYXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmFfaW9jX2F0dHJfcyAqaW9jX2F0dHIpOwordm9pZCBiZmFfaW9jX2dldF9hZGFwdGVyX2F0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAorCQlzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zICphZF9hdHRyKTsKK2ludCBiZmFfaW9jX2RlYnVnX3RyY3N6KGJmYV9ib29sZWFuX3QgYXV0b19yZWNvdmVyKTsKK3ZvaWQgYmZhX2lvY19kZWJ1Z19tZW1jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRiZ19md3NhdmUpOworYmZhX3N0YXR1c190IGJmYV9pb2NfZGVidWdfZndzYXZlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqdHJjZGF0YSwKKwkJaW50ICp0cmNsZW4pOworYmZhX3N0YXR1c190IGJmYV9pb2NfZGVidWdfZnd0cmMoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICp0cmNkYXRhLAorCQkJCSBpbnQgKnRyY2xlbik7Cit1MzIgYmZhX2lvY19zbWVtX3BnbnVtKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIGZtYWRkcik7Cit1MzIgYmZhX2lvY19zbWVtX3Bnb2ZmKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIGZtYWRkcik7Cit2b2lkIGJmYV9pb2Nfc2V0X2ZjbW9kZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworYmZhX2Jvb2xlYW5fdCBiZmFfaW9jX2dldF9mY21vZGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19oYmZhaWxfcmVnaXN0ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAorCXN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyAqbm90aWZ5KTsKKworLyoKKyAqIGJmYSBtZmcgd3duIEFQSSBmdW5jdGlvbnMKKyAqLword3duX3QgYmZhX2lvY19nZXRfcHd3bihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOword3duX3QgYmZhX2lvY19nZXRfbnd3bihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOword3duX3QgYmZhX2lvY19nZXRfd3duX25hYTUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MTYgaW5zdCk7CittYWNfdCBiZmFfaW9jX2dldF9tYWMoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3U2NCBiZmFfaW9jX2dldF9hZGlkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CisKKyNlbmRpZiAvKiBfX0JGQV9JT0NfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMzUwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5jCkBAIC0wLDAgKzEsODcyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmFfcHJpdi5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2hhbC5oPgorI2luY2x1ZGUgPGJmaS9iZmlfYm9vdC5oPgorI2luY2x1ZGUgPGJmaS9iZmlfY2JyZWcuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9pb2MuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvY2ZjLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wY2kuaD4KKyNpbmNsdWRlICJiZmFfY2FsbGJhY2tfcHJpdi5oIgorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisKK0JGQV9UUkNfRklMRShIQUwsIElPQ0ZDKTsKKworLyoqCisgKiBJT0MgbG9jYWwgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBCRkFfSU9DRkNfVE9WCQk1MDAwCS8qIG1zZWNzICovCisKK2VudW0geworCUJGQV9JT0NGQ19BQ1RfTk9ORQk9IDAsCisJQkZBX0lPQ0ZDX0FDVF9JTklUCT0gMSwKKwlCRkFfSU9DRkNfQUNUX1NUT1AJPSAyLAorCUJGQV9JT0NGQ19BQ1RfRElTQUJMRQk9IDMsCit9OworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX2VuYWJsZV9jYmZuKHZvaWQgKmJmYV9hcmcsIGVudW0gYmZhX3N0YXR1cyBzdGF0dXMpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX2Rpc2FibGVfY2Jmbih2b2lkICpiZmFfYXJnKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19oYmZhaWxfY2Jmbih2b2lkICpiZmFfYXJnKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19yZXNldF9jYmZuKHZvaWQgKmJmYV9hcmcpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3N0YXRzX2NsZWFyKHZvaWQgKmJmYV9hcmcpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3N0YXRzX3N3YXAoc3RydWN0IGJmYV9md19zdGF0c19zICpkLAorCQkJc3RydWN0IGJmYV9md19zdGF0c19zICpzKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c19jbHJfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfc3RhdHNfY2xyX3RpbWVvdXQodm9pZCAqYmZhX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfc3RhdHNfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfc3RhdHNfdGltZW91dCh2b2lkICpiZmFfYXJnKTsKKworc3RhdGljIHN0cnVjdCBiZmFfaW9jX2NiZm5fcyBiZmFfaW9jZmNfY2JmbjsKKworLyoqCisgKiAgYmZhX2lvY19wdnQgQkZBIElPQyBwcml2YXRlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfY3FzX3N6KHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICpkbV9sZW4pCit7CisJaW50ICAgICAgICAgICAgIGksIHBlcl9yZXFxX3N6LCBwZXJfcnNwcV9zejsKKworCXBlcl9yZXFxX3N6ID0gQkZBX1JPVU5EVVAoKGNmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zICogQkZJX0xNU0dfU1opLAorCQkJCQkJCUJGQV9ETUFfQUxJR05fU1opOworCXBlcl9yc3BxX3N6ID0gQkZBX1JPVU5EVVAoKGNmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zICogQkZJX0xNU0dfU1opLAorCQkJCQkJCUJGQV9ETUFfQUxJR05fU1opOworCisJLyoKKwkgKiBDYWxjdWxhdGUgQ1Egc2l6ZQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBjZmctPmZ3Y2ZnLm51bV9jcXM7IGkrKykgeworCQkqZG1fbGVuID0gKmRtX2xlbiArIHBlcl9yZXFxX3N6OworCQkqZG1fbGVuID0gKmRtX2xlbiArIHBlcl9yc3BxX3N6OworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIFNoYWRvdyBDSS9QSSBzaXplCisJICovCisJZm9yIChpID0gMDsgaSA8IGNmZy0+ZndjZmcubnVtX2NxczsgaSsrKQorCQkqZG1fbGVuICs9ICgyICogQkZBX0NBQ0hFTElORV9TWik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfZndfY2ZnX3N6KHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICpkbV9sZW4pCit7CisJKmRtX2xlbiArPQorCQlCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdfcyksIEJGQV9DQUNIRUxJTkVfU1opOworCSpkbV9sZW4gKz0KKwkJQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MpLAorCQkJICAgIEJGQV9DQUNIRUxJTkVfU1opOworCSpkbV9sZW4gKz0gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmFfZndfc3RhdHNfcyksIEJGQV9DQUNIRUxJTkVfU1opOworfQorCisvKioKKyAqIFVzZSB0aGUgTWFpbGJveCBpbnRlcmZhY2UgdG8gc2VuZCBCRklfSU9DRkNfSDJJX0NGR19SRVEKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zZW5kX2NmZyh2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcyAqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MgKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcmVxX3MgY2ZnX3JlcTsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zICpjZmdfaW5mbyA9IGlvY2ZjLT5jZmdpbmZvOworCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgICpjZmcgPSAmaW9jZmMtPmNmZzsKKwlpbnQgICAgICAgICAgICAgaTsKKworCWJmYV9hc3NlcnQoY2ZnLT5md2NmZy5udW1fY3FzIDw9IEJGSV9JT0NfTUFYX0NRUyk7CisJYmZhX3RyYyhiZmEsIGNmZy0+ZndjZmcubnVtX2Nxcyk7CisKKwlpb2NmYy0+Y2ZnZG9uZSA9IEJGQV9GQUxTRTsKKwliZmFfaW9jZmNfcmVzZXRfcXVldWVzKGJmYSk7CisKKwkvKioKKwkgKiBpbml0aWFsaXplIElPQyBjb25maWd1cmF0aW9uIGluZm8KKwkgKi8KKwljZmdfaW5mby0+ZW5kaWFuX3NpZyA9IEJGSV9JT0NfRU5ESUFOX1NJRzsKKwljZmdfaW5mby0+bnVtX2NxcyA9IGNmZy0+ZndjZmcubnVtX2NxczsKKworCWJmYV9kbWFfYmVfYWRkcl9zZXQoY2ZnX2luZm8tPmNmZ3JzcF9hZGRyLCBpb2NmYy0+Y2ZncnNwX2RtYS5wYSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChjZmdfaW5mby0+c3RhdHNfYWRkciwgaW9jZmMtPnN0YXRzX3BhKTsKKworCS8qKgorCSAqIGRtYSBtYXAgUkVRIGFuZCBSU1AgY2lyY3VsYXIgcXVldWVzIGFuZCBzaGFkb3cgcG9pbnRlcnMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5md2NmZy5udW1fY3FzOyBpKyspIHsKKwkJYmZhX2RtYV9iZV9hZGRyX3NldChjZmdfaW5mby0+cmVxX2NxX2JhW2ldLAorCQkJCSAgICAgICBpb2NmYy0+cmVxX2NxX2JhW2ldLnBhKTsKKwkJYmZhX2RtYV9iZV9hZGRyX3NldChjZmdfaW5mby0+cmVxX3NoYWRvd19jaVtpXSwKKwkJCQkgICAgICAgaW9jZmMtPnJlcV9jcV9zaGFkb3dfY2lbaV0ucGEpOworCQljZmdfaW5mby0+cmVxX2NxX2VsZW1zW2ldID0KKwkJCWJmYV9vc19odG9ucyhjZmctPmRydmNmZy5udW1fcmVxcV9lbGVtcyk7CisKKwkJYmZhX2RtYV9iZV9hZGRyX3NldChjZmdfaW5mby0+cnNwX2NxX2JhW2ldLAorCQkJCSAgICAgICBpb2NmYy0+cnNwX2NxX2JhW2ldLnBhKTsKKwkJYmZhX2RtYV9iZV9hZGRyX3NldChjZmdfaW5mby0+cnNwX3NoYWRvd19waVtpXSwKKwkJCQkgICAgICAgaW9jZmMtPnJzcF9jcV9zaGFkb3dfcGlbaV0ucGEpOworCQljZmdfaW5mby0+cnNwX2NxX2VsZW1zW2ldID0KKwkJCWJmYV9vc19odG9ucyhjZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyk7CisJfQorCisJLyoqCisJICogZG1hIG1hcCBJT0MgY29uZmlndXJhdGlvbiBpdHNlbGYKKwkgKi8KKwliZmlfaDJpX3NldChjZmdfcmVxLm1oLCBCRklfTUNfSU9DRkMsIEJGSV9JT0NGQ19IMklfQ0ZHX1JFUSwKKwkJCWJmYV9scHVpZChiZmEpKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19yZXEuaW9jX2NmZ19kbWFfYWRkciwgaW9jZmMtPmNmZ19pbmZvLnBhKTsKKworCWJmYV9pb2NfbWJveF9zZW5kKCZiZmEtPmlvYywgJmNmZ19yZXEsCisJCQlzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdfcmVxX3MpKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19pbml0X21lbShzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICAgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWJmYS0+YmZhZCA9IGJmYWQ7CisJaW9jZmMtPmJmYSA9IGJmYTsKKwlpb2NmYy0+YWN0aW9uID0gQkZBX0lPQ0ZDX0FDVF9OT05FOworCisJYmZhX29zX2Fzc2lnbihpb2NmYy0+Y2ZnLCAqY2ZnKTsKKworCS8qKgorCSAqIEluaXRpYWxpemUgY2hpcCBzcGVjaWZpYyBoYW5kbGVycy4KKwkgKi8KKwlpZiAoYmZhX2lvY19kZXZpZCgmYmZhLT5pb2MpID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSB7CisJCWlvY2ZjLT5od2lmLmh3X3JlZ2luaXQgPSBiZmFfaHdjdF9yZWdpbml0OworCQlpb2NmYy0+aHdpZi5od19yc3BxX2FjayA9IGJmYV9od2N0X3JzcHFfYWNrOworCQlpb2NmYy0+aHdpZi5od19tc2l4X2luaXQgPSBiZmFfaHdjdF9tc2l4X2luaXQ7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfaW5zdGFsbCA9IGJmYV9od2N0X21zaXhfaW5zdGFsbDsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF91bmluc3RhbGwgPSBiZmFfaHdjdF9tc2l4X3VuaW5zdGFsbDsKKwkJaW9jZmMtPmh3aWYuaHdfaXNyX21vZGVfc2V0ID0gYmZhX2h3Y3RfaXNyX21vZGVfc2V0OworCQlpb2NmYy0+aHdpZi5od19tc2l4X2dldHZlY3MgPSBiZmFfaHdjdF9tc2l4X2dldHZlY3M7CisJfSBlbHNlIHsKKwkJaW9jZmMtPmh3aWYuaHdfcmVnaW5pdCA9IGJmYV9od2NiX3JlZ2luaXQ7CisJCWlvY2ZjLT5od2lmLmh3X3JzcHFfYWNrID0gYmZhX2h3Y2JfcnNwcV9hY2s7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfaW5pdCA9IGJmYV9od2NiX21zaXhfaW5pdDsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9pbnN0YWxsID0gYmZhX2h3Y2JfbXNpeF9pbnN0YWxsOworCQlpb2NmYy0+aHdpZi5od19tc2l4X3VuaW5zdGFsbCA9IGJmYV9od2NiX21zaXhfdW5pbnN0YWxsOworCQlpb2NmYy0+aHdpZi5od19pc3JfbW9kZV9zZXQgPSBiZmFfaHdjYl9pc3JfbW9kZV9zZXQ7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfZ2V0dmVjcyA9IGJmYV9od2NiX21zaXhfZ2V0dmVjczsKKwl9CisKKwlpb2NmYy0+aHdpZi5od19yZWdpbml0KGJmYSk7CisJYmZhLT5tc2l4Lm52ZWNzID0gMDsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19tZW1fY2xhaW0oc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8pCit7CisJdTggICAgICAgICpkbV9rdmE7CisJdTY0ICAgICAgICBkbV9wYTsKKwlpbnQgICAgICAgICAgICAgaSwgcGVyX3JlcXFfc3osIHBlcl9yc3BxX3N6OworCXN0cnVjdCBiZmFfaW9jZmNfcyAgKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisJaW50CQlkYmdzejsKKworCWRtX2t2YSA9IGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1lbWluZm8pOworCWRtX3BhID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWVtaW5mbyk7CisKKwkvKgorCSAqIEZpcnN0IGFsbG9jYXRlIGRtYSBtZW1vcnkgZm9yIElPQy4KKwkgKi8KKwliZmFfaW9jX21lbV9jbGFpbSgmYmZhLT5pb2MsIGRtX2t2YSwgZG1fcGEpOworCWRtX2t2YSArPSBiZmFfaW9jX21lbWluZm8oKTsKKwlkbV9wYSAgKz0gYmZhX2lvY19tZW1pbmZvKCk7CisKKwkvKgorCSAqIENsYWltIERNQS1hYmxlIG1lbW9yeSBmb3IgdGhlIHJlcXVlc3QvcmVzcG9uc2UgcXVldWVzIGFuZCBmb3Igc2hhZG93CisJICogY2kvcGkgcmVnaXN0ZXJzCisJICovCisJcGVyX3JlcXFfc3ogPSBCRkFfUk9VTkRVUCgoY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXMgKiBCRklfTE1TR19TWiksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisJcGVyX3JzcHFfc3ogPSBCRkFfUk9VTkRVUCgoY2ZnLT5kcnZjZmcubnVtX3JzcHFfZWxlbXMgKiBCRklfTE1TR19TWiksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5md2NmZy5udW1fY3FzOyBpKyspIHsKKwkJaW9jZmMtPnJlcV9jcV9iYVtpXS5rdmEgPSBkbV9rdmE7CisJCWlvY2ZjLT5yZXFfY3FfYmFbaV0ucGEgPSBkbV9wYTsKKwkJYmZhX29zX21lbXNldChkbV9rdmEsIDAsIHBlcl9yZXFxX3N6KTsKKwkJZG1fa3ZhICs9IHBlcl9yZXFxX3N6OworCQlkbV9wYSArPSBwZXJfcmVxcV9zejsKKworCQlpb2NmYy0+cnNwX2NxX2JhW2ldLmt2YSA9IGRtX2t2YTsKKwkJaW9jZmMtPnJzcF9jcV9iYVtpXS5wYSA9IGRtX3BhOworCQliZmFfb3NfbWVtc2V0KGRtX2t2YSwgMCwgcGVyX3JzcHFfc3opOworCQlkbV9rdmEgKz0gcGVyX3JzcHFfc3o7CisJCWRtX3BhICs9IHBlcl9yc3BxX3N6OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjZmctPmZ3Y2ZnLm51bV9jcXM7IGkrKykgeworCQlpb2NmYy0+cmVxX2NxX3NoYWRvd19jaVtpXS5rdmEgPSBkbV9rdmE7CisJCWlvY2ZjLT5yZXFfY3Ffc2hhZG93X2NpW2ldLnBhID0gZG1fcGE7CisJCWRtX2t2YSArPSBCRkFfQ0FDSEVMSU5FX1NaOworCQlkbV9wYSArPSBCRkFfQ0FDSEVMSU5FX1NaOworCisJCWlvY2ZjLT5yc3BfY3Ffc2hhZG93X3BpW2ldLmt2YSA9IGRtX2t2YTsKKwkJaW9jZmMtPnJzcF9jcV9zaGFkb3dfcGlbaV0ucGEgPSBkbV9wYTsKKwkJZG1fa3ZhICs9IEJGQV9DQUNIRUxJTkVfU1o7CisJCWRtX3BhICs9IEJGQV9DQUNIRUxJTkVfU1o7CisJfQorCisJLyoKKwkgKiBDbGFpbSBETUEtYWJsZSBtZW1vcnkgZm9yIHRoZSBjb25maWcgaW5mbyBwYWdlCisJICovCisJYmZhLT5pb2NmYy5jZmdfaW5mby5rdmEgPSBkbV9rdmE7CisJYmZhLT5pb2NmYy5jZmdfaW5mby5wYSA9IGRtX3BhOworCWJmYS0+aW9jZmMuY2ZnaW5mbyA9IChzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zICopIGRtX2t2YTsKKwlkbV9rdmEgKz0gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MpLCBCRkFfQ0FDSEVMSU5FX1NaKTsKKwlkbV9wYSArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdfcyksIEJGQV9DQUNIRUxJTkVfU1opOworCisJLyoKKwkgKiBDbGFpbSBETUEtYWJsZSBtZW1vcnkgZm9yIHRoZSBjb25maWcgcmVzcG9uc2UKKwkgKi8KKwliZmEtPmlvY2ZjLmNmZ3JzcF9kbWEua3ZhID0gZG1fa3ZhOworCWJmYS0+aW9jZmMuY2ZncnNwX2RtYS5wYSA9IGRtX3BhOworCWJmYS0+aW9jZmMuY2ZncnNwID0gKHN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MgKikgZG1fa3ZhOworCisJZG1fa3ZhICs9CisJCUJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zKSwKKwkJCSAgICBCRkFfQ0FDSEVMSU5FX1NaKTsKKwlkbV9wYSArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyksCisJCQkgICAgIEJGQV9DQUNIRUxJTkVfU1opOworCisJLyoKKwkgKiBDbGFpbSBETUEtYWJsZSBtZW1vcnkgZm9yIGlvY2ZjIHN0YXRzCisJICovCisJYmZhLT5pb2NmYy5zdGF0c19rdmEgPSBkbV9rdmE7CisJYmZhLT5pb2NmYy5zdGF0c19wYSA9IGRtX3BhOworCWJmYS0+aW9jZmMuZndfc3RhdHMgPSAoc3RydWN0IGJmYV9md19zdGF0c19zICopIGRtX2t2YTsKKwlkbV9rdmEgKz0gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmFfZndfc3RhdHNfcyksIEJGQV9DQUNIRUxJTkVfU1opOworCWRtX3BhICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MpLCBCRkFfQ0FDSEVMSU5FX1NaKTsKKworCWJmYV9tZW1pbmZvX2RtYV92aXJ0KG1lbWluZm8pID0gZG1fa3ZhOworCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1lbWluZm8pID0gZG1fcGE7CisKKwlkYmdzeiA9IGJmYV9pb2NfZGVidWdfdHJjc3ooYmZhX2F1dG9fcmVjb3Zlcik7CisJaWYgKGRiZ3N6ID4gMCkgeworCQliZmFfaW9jX2RlYnVnX21lbWNsYWltKCZiZmEtPmlvYywgYmZhX21lbWluZm9fa3ZhKG1lbWluZm8pKTsKKwkJYmZhX21lbWluZm9fa3ZhKG1lbWluZm8pICs9IGRiZ3N6OworCX0KK30KKworLyoqCisgKiBCRkEgc3VibW9kdWxlcyBpbml0aWFsaXphdGlvbiBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19pbml0ZG9uZV9zdWJtb2Qoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+aW5pdGRvbmUoYmZhKTsKK30KKworLyoqCisgKiBTdGFydCBCRkEgc3VibW9kdWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGFydF9zdWJtb2Qoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50ICAgICAgICAgICAgIGk7CisKKwliZmEtPnJtZV9wcm9jZXNzID0gQkZBX1RSVUU7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+c3RhcnQoYmZhKTsKK30KKworLyoqCisgKiBEaXNhYmxlIEJGQSBzdWJtb2R1bGVzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2Rpc2FibGVfc3VibW9kKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWludCAgICAgICAgICAgICBpOworCisJZm9yIChpID0gMDsgaGFsX21vZHNbaV07IGkrKykKKwkJaGFsX21vZHNbaV0tPmlvY2Rpc2FibGUoYmZhKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19pbml0X2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9zCSpiZmEgPSBiZmFfYXJnOworCisJaWYgKGNvbXBsZXRlKSB7CisJCWlmIChiZmEtPmlvY2ZjLmNmZ2RvbmUpCisJCQliZmFfY2JfaW5pdChiZmEtPmJmYWQsIEJGQV9TVEFUVVNfT0spOworCQllbHNlCisJCQliZmFfY2JfaW5pdChiZmEtPmJmYWQsIEJGQV9TVEFUVVNfRkFJTEVEKTsKKwl9IGVsc2UKKwkJYmZhLT5pb2NmYy5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfc3RvcF9jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsKQoreworCXN0cnVjdCBiZmFfcyAgKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IGJmYS0+YmZhZDsKKworCWlmIChjb21wbCkKKwkJY29tcGxldGUoJmJmYWQtPmNvbXApOworCisJZWxzZQorCQliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfTk9ORTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19kaXNhYmxlX2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGwpCit7CisJc3RydWN0IGJmYV9zICAqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gYmZhLT5iZmFkOworCisJaWYgKGNvbXBsKQorCQljb21wbGV0ZSgmYmZhZC0+ZGlzYWJsZV9jb21wKTsKK30KKworLyoqCisgKiBVcGRhdGUgQkZBIGNvbmZpZ3VyYXRpb24gZnJvbSBmaXJtd2FyZSBjb25maWd1cmF0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2NmZ3JzcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJCSppb2NmYwkgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zCSpjZmdyc3AgID0gaW9jZmMtPmNmZ3JzcDsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2Z3Y2ZnX3MJKmZ3Y2ZnICAgPSAmY2ZncnNwLT5md2NmZzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zIAkJKmNmZ2luZm8gPSBpb2NmYy0+Y2ZnaW5mbzsKKworCWZ3Y2ZnLT5udW1fY3FzICAgICAgICA9IGZ3Y2ZnLT5udW1fY3FzOworCWZ3Y2ZnLT5udW1faW9pbV9yZXFzICA9IGJmYV9vc19udG9ocyhmd2NmZy0+bnVtX2lvaW1fcmVxcyk7CisJZndjZmctPm51bV90c2tpbV9yZXFzID0gYmZhX29zX250b2hzKGZ3Y2ZnLT5udW1fdHNraW1fcmVxcyk7CisJZndjZmctPm51bV9mY3hwX3JlcXMgID0gYmZhX29zX250b2hzKGZ3Y2ZnLT5udW1fZmN4cF9yZXFzKTsKKwlmd2NmZy0+bnVtX3VmX2J1ZnMgICAgPSBiZmFfb3NfbnRvaHMoZndjZmctPm51bV91Zl9idWZzKTsKKwlmd2NmZy0+bnVtX3Jwb3J0cyAgICAgPSBiZmFfb3NfbnRvaHMoZndjZmctPm51bV9ycG9ydHMpOworCisJY2ZnaW5mby0+aW50cl9hdHRyLmNvYWxlc2NlID0gY2ZncnNwLT5pbnRyX2F0dHIuY29hbGVzY2U7CisJY2ZnaW5mby0+aW50cl9hdHRyLmRlbGF5ICAgID0gYmZhX29zX250b2hzKGNmZ3JzcC0+aW50cl9hdHRyLmRlbGF5KTsKKwljZmdpbmZvLT5pbnRyX2F0dHIubGF0ZW5jeSAgPSBiZmFfb3NfbnRvaHMoY2ZncnNwLT5pbnRyX2F0dHIubGF0ZW5jeSk7CisKKwlpb2NmYy0+Y2ZnZG9uZSA9IEJGQV9UUlVFOworCisJLyoqCisJICogQ29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZSAtIGluaXRpYWxpemUvc3RhcnQgc3VibW9kdWxlcworCSAqLworCWlmIChpb2NmYy0+YWN0aW9uID09IEJGQV9JT0NGQ19BQ1RfSU5JVCkKKwkJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5pbml0X2hjYl9xZSwgYmZhX2lvY2ZjX2luaXRfY2IsIGJmYSk7CisJZWxzZQorCQliZmFfaW9jZmNfc3RhcnRfc3VibW9kKGJmYSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfc3RhdHNfY2xlYXIodm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJCSpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zIHN0YXRzX3JlcTsKKworCWJmYV90aW1lcl9zdGFydChiZmEsICZpb2NmYy0+c3RhdHNfdGltZXIsCisJCQkgICAgYmZhX2lvY2ZjX3N0YXRzX2Nscl90aW1lb3V0LCBiZmEsCisJCQkgICAgQkZBX0lPQ0ZDX1RPVik7CisKKwliZmlfaDJpX3NldChzdGF0c19yZXEubWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9DTEVBUl9TVEFUU19SRVEsCisJCWJmYV9scHVpZChiZmEpKTsKKwliZmFfaW9jX21ib3hfc2VuZCgmYmZhLT5pb2MsICZzdGF0c19yZXEsCisJCXNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zKSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfc3RhdHNfc3dhcChzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKmQsIHN0cnVjdCBiZmFfZndfc3RhdHNfcyAqcykKK3sKKwl1MzIgICAgICAgKmRpcCA9ICh1MzIgKikgZDsKKwl1MzIgICAgICAgKnNpcCA9ICh1MzIgKikgczsKKwlpbnQgICAgICAgICAgICAgaTsKKworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHN0cnVjdCBiZmFfZndfc3RhdHNfcykgLyBzaXplb2YodTMyKSk7IGkrKykKKwkJZGlwW2ldID0gYmZhX29zX250b2hsKHNpcFtpXSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfc3RhdHNfY2xyX2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9zICpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcyAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWlmIChjb21wbGV0ZSkgeworCQliZmFfaW9jX2Nscl9zdGF0cygmYmZhLT5pb2MpOworCQlpb2NmYy0+c3RhdHNfY2Jmbihpb2NmYy0+c3RhdHNfY2JhcmcsIGlvY2ZjLT5zdGF0c19zdGF0dXMpOworCX0gZWxzZSB7CisJCWlvY2ZjLT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCQlpb2NmYy0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfc3RhdHNfY2xyX3RpbWVvdXQodm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJCSpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWJmYV90cmMoYmZhLCAwKTsKKworCWlvY2ZjLT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX0VUSU1FUjsKKwliZmFfY2JfcXVldWUoYmZhLCAmaW9jZmMtPnN0YXRzX2hjYl9xZSwgYmZhX2lvY2ZjX3N0YXRzX2Nscl9jYiwgYmZhKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaWYgKGNvbXBsZXRlKSB7CisJCWlmIChpb2NmYy0+c3RhdHNfc3RhdHVzID09IEJGQV9TVEFUVVNfT0spIHsKKwkJCWJmYV9vc19tZW1zZXQoaW9jZmMtPnN0YXRzX3JldCwgMCwKKwkJCQlzaXplb2YoKmlvY2ZjLT5zdGF0c19yZXQpKTsKKwkJCWJmYV9pb2NmY19zdGF0c19zd2FwKCZpb2NmYy0+c3RhdHNfcmV0LT5md19zdGF0cywKKwkJCQlpb2NmYy0+Zndfc3RhdHMpOworCQl9CisJCWlvY2ZjLT5zdGF0c19jYmZuKGlvY2ZjLT5zdGF0c19jYmFyZywgaW9jZmMtPnN0YXRzX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJaW9jZmMtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisJCWlvY2ZjLT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c190aW1lb3V0KHZvaWQgKmJmYV9hcmcpCit7CisJc3RydWN0IGJmYV9zCQkqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwliZmFfdHJjKGJmYSwgMCk7CisKKwlpb2NmYy0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19FVElNRVI7CisJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5zdGF0c19oY2JfcWUsIGJmYV9pb2NmY19zdGF0c19jYiwgYmZhKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19xdWVyeShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisJc3RydWN0IGJmaV9pb2NmY19zdGF0c19yZXFfcyBzdGF0c19yZXE7CisKKwliZmFfdGltZXJfc3RhcnQoYmZhLCAmaW9jZmMtPnN0YXRzX3RpbWVyLAorCQkJICAgIGJmYV9pb2NmY19zdGF0c190aW1lb3V0LCBiZmEsIEJGQV9JT0NGQ19UT1YpOworCisJYmZpX2gyaV9zZXQoc3RhdHNfcmVxLm1oLCBCRklfTUNfSU9DRkMsIEJGSV9JT0NGQ19IMklfR0VUX1NUQVRTX1JFUSwKKwkJCWJmYV9scHVpZChiZmEpKTsKKwliZmFfaW9jX21ib3hfc2VuZCgmYmZhLT5pb2MsICZzdGF0c19yZXEsCisJCXNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zKSk7Cit9CisKK3ZvaWQKK2JmYV9pb2NmY19yZXNldF9xdWV1ZXMoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50ICAgICAgICAgICAgIHE7CisKKwlmb3IgKHEgPSAwOyBxIDwgQkZJX0lPQ19NQVhfQ1FTOyBxKyspIHsKKwkJYmZhX3JlcXFfY2koYmZhLCBxKSA9IDA7CisJCWJmYV9yZXFxX3BpKGJmYSwgcSkgPSAwOworCQliZmFfcnNwcV9jaShiZmEsIHEpID0gMDsKKwkJYmZhX3JzcHFfcGkoYmZhLCBxKSA9IDA7CisJfQorfQorCisvKioKKyAqIElPQyBlbmFibGUgcmVxdWVzdCBpcyBjb21wbGV0ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2VuYWJsZV9jYmZuKHZvaWQgKmJmYV9hcmcsIGVudW0gYmZhX3N0YXR1cyBzdGF0dXMpCit7CisJc3RydWN0IGJmYV9zCSpiZmEgPSBiZmFfYXJnOworCisJaWYgKHN0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV9pc3JfZGlzYWJsZShiZmEpOworCQlpZiAoYmZhLT5pb2NmYy5hY3Rpb24gPT0gQkZBX0lPQ0ZDX0FDVF9JTklUKQorCQkJYmZhX2NiX3F1ZXVlKGJmYSwgJmJmYS0+aW9jZmMuaW5pdF9oY2JfcWUsCisJCQkJICAgICBiZmFfaW9jZmNfaW5pdF9jYiwgYmZhKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9pb2NmY19pbml0ZG9uZV9zdWJtb2QoYmZhKTsKKwliZmFfaW9jZmNfc2VuZF9jZmcoYmZhKTsKK30KKworLyoqCisgKiBJT0MgZGlzYWJsZSByZXF1ZXN0IGlzIGNvbXBsZXRlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfZGlzYWJsZV9jYmZuKHZvaWQgKmJmYV9hcmcpCit7CisJc3RydWN0IGJmYV9zCSpiZmEgPSBiZmFfYXJnOworCisJYmZhX2lzcl9kaXNhYmxlKGJmYSk7CisJYmZhX2lvY2ZjX2Rpc2FibGVfc3VibW9kKGJmYSk7CisKKwlpZiAoYmZhLT5pb2NmYy5hY3Rpb24gPT0gQkZBX0lPQ0ZDX0FDVF9TVE9QKQorCQliZmFfY2JfcXVldWUoYmZhLCAmYmZhLT5pb2NmYy5zdG9wX2hjYl9xZSwgYmZhX2lvY2ZjX3N0b3BfY2IsCisJCQkgICAgIGJmYSk7CisJZWxzZSB7CisJCWJmYV9hc3NlcnQoYmZhLT5pb2NmYy5hY3Rpb24gPT0gQkZBX0lPQ0ZDX0FDVF9ESVNBQkxFKTsKKwkJYmZhX2NiX3F1ZXVlKGJmYSwgJmJmYS0+aW9jZmMuZGlzX2hjYl9xZSwgYmZhX2lvY2ZjX2Rpc2FibGVfY2IsCisJCQkgICAgIGJmYSk7CisJfQorfQorCisvKioKKyAqIE5vdGlmeSBzdWItbW9kdWxlcyBvZiBoYXJkd2FyZSBmYWlsdXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2hiZmFpbF9jYmZuKHZvaWQgKmJmYV9hcmcpCit7CisJc3RydWN0IGJmYV9zCSpiZmEgPSBiZmFfYXJnOworCisJYmZhLT5ybWVfcHJvY2VzcyA9IEJGQV9GQUxTRTsKKworCWJmYV9pc3JfZGlzYWJsZShiZmEpOworCWJmYV9pb2NmY19kaXNhYmxlX3N1Ym1vZChiZmEpOworCisJaWYgKGJmYS0+aW9jZmMuYWN0aW9uID09IEJGQV9JT0NGQ19BQ1RfSU5JVCkKKwkJYmZhX2NiX3F1ZXVlKGJmYSwgJmJmYS0+aW9jZmMuaW5pdF9oY2JfcWUsIGJmYV9pb2NmY19pbml0X2NiLAorCQkJICAgICBiZmEpOworfQorCisvKioKKyAqIEFjdGlvbnMgb24gY2hpcC1yZXNldCBjb21wbGV0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3Jlc2V0X2NiZm4odm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwliZmFfaW9jZmNfcmVzZXRfcXVldWVzKGJmYSk7CisJYmZhX2lzcl9lbmFibGUoYmZhKTsKK30KKworCisKKy8qKgorICogIGJmYV9pb2NfcHVibGljCisgKi8KKworLyoqCisgKiBRdWVyeSBJT0MgbWVtb3J5IHJlcXVpcmVtZW50IGluZm9ybWF0aW9uLgorICovCit2b2lkCitiZmFfaW9jZmNfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbikKK3sKKwkvKiBkbWEgbWVtb3J5IGZvciBJT0MgKi8KKwkqZG1fbGVuICs9IGJmYV9pb2NfbWVtaW5mbygpOworCisJYmZhX2lvY2ZjX2Z3X2NmZ19zeihjZmcsIGRtX2xlbik7CisJYmZhX2lvY2ZjX2Nxc19zeihjZmcsIGRtX2xlbik7CisJKmttX2xlbiArPSBiZmFfaW9jX2RlYnVnX3RyY3N6KGJmYV9hdXRvX3JlY292ZXIpOworfQorCisvKioKKyAqIFF1ZXJ5IElPQyBtZW1vcnkgcmVxdWlyZW1lbnQgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKworCWJmYV9pb2NmY19jYmZuLmVuYWJsZV9jYmZuID0gYmZhX2lvY2ZjX2VuYWJsZV9jYmZuOworCWJmYV9pb2NmY19jYmZuLmRpc2FibGVfY2JmbiA9IGJmYV9pb2NmY19kaXNhYmxlX2NiZm47CisJYmZhX2lvY2ZjX2NiZm4uaGJmYWlsX2NiZm4gPSBiZmFfaW9jZmNfaGJmYWlsX2NiZm47CisJYmZhX2lvY2ZjX2NiZm4ucmVzZXRfY2JmbiA9IGJmYV9pb2NmY19yZXNldF9jYmZuOworCisJYmZhX2lvY19hdHRhY2goJmJmYS0+aW9jLCBiZmEsICZiZmFfaW9jZmNfY2JmbiwgJmJmYS0+dGltZXJfbW9kLAorCQliZmEtPnRyY21vZCwgYmZhLT5hZW4sIGJmYS0+bG9nbSk7CisJYmZhX2lvY19wY2lfaW5pdCgmYmZhLT5pb2MsIHBjaWRldiwgQkZJX01DX0lPQ0ZDKTsKKwliZmFfaW9jX21ib3hfcmVnaXN0ZXIoJmJmYS0+aW9jLCBiZmFfbWJveF9pc3JzKTsKKworCS8qKgorCSAqIENob29zZSBGQyAoc3NpZDogMHgxQykgdi9zIEZDb0UgKHNzaWQ6IDB4MTQpIG1vZGUuCisJICovCisJaWYgKDApCisJCWJmYV9pb2Nfc2V0X2ZjbW9kZSgmYmZhLT5pb2MpOworCisJYmZhX2lvY2ZjX2luaXRfbWVtKGJmYSwgYmZhZCwgY2ZnLCBwY2lkZXYpOworCWJmYV9pb2NmY19tZW1fY2xhaW0oYmZhLCBjZmcsIG1lbWluZm8pOworCWJmYV90aW1lcl9pbml0KCZiZmEtPnRpbWVyX21vZCk7CisKKwlJTklUX0xJU1RfSEVBRCgmYmZhLT5jb21wX3EpOworCWZvciAoaSA9IDA7IGkgPCBCRklfSU9DX01BWF9DUVM7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJmJmYS0+cmVxcV93YWl0cVtpXSk7Cit9CisKKy8qKgorICogUXVlcnkgSU9DIG1lbW9yeSByZXF1aXJlbWVudCBpbmZvcm1hdGlvbi4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfaW9jX2RldGFjaCgmYmZhLT5pb2MpOworfQorCisvKioKKyAqIFF1ZXJ5IElPQyBtZW1vcnkgcmVxdWlyZW1lbnQgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19pbml0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYS0+aW9jZmMuYWN0aW9uID0gQkZBX0lPQ0ZDX0FDVF9JTklUOworCWJmYV9pb2NfZW5hYmxlKCZiZmEtPmlvYyk7CisJYmZhX21zaXhfaW5zdGFsbChiZmEpOworfQorCisvKioKKyAqIElPQyBzdGFydCBjYWxsZWQgZnJvbSBiZmFfc3RhcnQoKS4gQ2FsbGVkIHRvIHN0YXJ0IElPQyBvcGVyYXRpb25zCisgKiBhdCBkcml2ZXIgaW5zdGFudGlhdGlvbiBmb3IgdGhpcyBpbnN0YW5jZS4KKyAqLwordm9pZAorYmZhX2lvY2ZjX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWlmIChiZmEtPmlvY2ZjLmNmZ2RvbmUpCisJCWJmYV9pb2NmY19zdGFydF9zdWJtb2QoYmZhKTsKK30KKworLyoqCisgKiBJT0Mgc3RvcCBjYWxsZWQgZnJvbSBiZmFfc3RvcCgpLiBDYWxsZWQgb25seSB3aGVuIGRyaXZlciBpcyB1bmxvYWRlZAorICogZm9yIHRoaXMgaW5zdGFuY2UuCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYS0+aW9jZmMuYWN0aW9uID0gQkZBX0lPQ0ZDX0FDVF9TVE9QOworCisJYmZhLT5ybWVfcHJvY2VzcyA9IEJGQV9GQUxTRTsKKwliZmFfaW9jX2Rpc2FibGUoJmJmYS0+aW9jKTsKK30KKwordm9pZAorYmZhX2lvY2ZjX2lzcih2b2lkICpiZmFhcmcsIHN0cnVjdCBiZmlfbWJtc2dfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX3MJCSpiZmEgPSBiZmFhcmc7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXVuaW9uIGJmaV9pb2NmY19pMmhfbXNnX3UJKm1zZzsKKworCW1zZyA9ICh1bmlvbiBiZmlfaW9jZmNfaTJoX21zZ191ICopIG07CisJYmZhX3RyYyhiZmEsIG1zZy0+bWgubXNnX2lkKTsKKworCXN3aXRjaCAobXNnLT5taC5tc2dfaWQpIHsKKwljYXNlIEJGSV9JT0NGQ19JMkhfQ0ZHX1JFUExZOgorCQlpb2NmYy0+Y2ZnX3JlcGx5ID0gJm1zZy0+Y2ZnX3JlcGx5OworCQliZmFfaW9jZmNfY2ZncnNwKGJmYSk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9DRkNfSTJIX0dFVF9TVEFUU19SU1A6CisJCWlmIChpb2NmYy0+c3RhdHNfYnVzeSA9PSBCRkFfRkFMU0UKKwkJICAgIHx8IGlvY2ZjLT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19FVElNRVIpCisJCQlicmVhazsKKworCQliZmFfdGltZXJfc3RvcCgmaW9jZmMtPnN0YXRzX3RpbWVyKTsKKwkJaW9jZmMtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJCWJmYV9jYl9xdWV1ZShiZmEsICZpb2NmYy0+c3RhdHNfaGNiX3FlLCBiZmFfaW9jZmNfc3RhdHNfY2IsCisJCQkgICAgICBiZmEpOworCQlicmVhazsKKwljYXNlIEJGSV9JT0NGQ19JMkhfQ0xFQVJfU1RBVFNfUlNQOgorCQkvKgorCQkgKiBjaGVjayBmb3IgdGltZXIgcG9wIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSByc3AKKwkJICovCisJCWlmIChpb2NmYy0+c3RhdHNfYnVzeSA9PSBCRkFfRkFMU0UKKwkJICAgIHx8IGlvY2ZjLT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19FVElNRVIpCisJCQlicmVhazsKKworCQliZmFfdGltZXJfc3RvcCgmaW9jZmMtPnN0YXRzX3RpbWVyKTsKKwkJaW9jZmMtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJCWJmYV9jYl9xdWV1ZShiZmEsICZpb2NmYy0+c3RhdHNfaGNiX3FlLAorCQkJICAgICAgYmZhX2lvY2ZjX3N0YXRzX2Nscl9jYiwgYmZhKTsKKwkJYnJlYWs7CisJY2FzZSBCRklfSU9DRkNfSTJIX1VQREFURVFfUlNQOgorCQlpb2NmYy0+dXBkYXRlcV9jYmZuKGlvY2ZjLT51cGRhdGVxX2NiYXJnLCBCRkFfU1RBVFVTX09LKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKyNpZm5kZWYgQkZBX0JJT1NfQlVJTEQKK3ZvaWQKK2JmYV9hZGFwdGVyX2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zICphZF9hdHRyKQoreworCWJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cigmYmZhLT5pb2MsIGFkX2F0dHIpOworfQorCit1NjQKK2JmYV9hZGFwdGVyX2dldF9pZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlyZXR1cm4gYmZhX2lvY19nZXRfYWRpZCgmYmZhLT5pb2MpOworfQorCit2b2lkCitiZmFfaW9jZmNfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jZmNfYXR0cl9zICphdHRyKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWF0dHItPmludHJfYXR0ciA9IGlvY2ZjLT5jZmdpbmZvLT5pbnRyX2F0dHI7CisJYXR0ci0+Y29uZmlnCT0gaW9jZmMtPmNmZzsKK30KKworYmZhX3N0YXR1c190CitiZmFfaW9jZmNfaXNyYXR0cl9zZXQoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jZmNfaW50cl9hdHRyX3MgKmF0dHIpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCQkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3NldF9pbnRyX3JlcV9zICptOworCisJaW9jZmMtPmNmZ2luZm8tPmludHJfYXR0ciA9ICphdHRyOworCWlmICghYmZhX2lvY2ZjX2lzX29wZXJhdGlvbmFsKGJmYSkpCisJCXJldHVybiBCRkFfU1RBVFVTX09LOworCisJbSA9IGJmYV9yZXFxX25leHQoYmZhLCBCRkFfUkVRUV9JT0MpOworCWlmICghbSkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9DRkMsIEJGSV9JT0NGQ19IMklfU0VUX0lOVFJfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCW0tPmNvYWxlc2NlID0gYXR0ci0+Y29hbGVzY2U7CisJbS0+ZGVsYXkgICAgPSBiZmFfb3NfaHRvbnMoYXR0ci0+ZGVsYXkpOworCW0tPmxhdGVuY3kgID0gYmZhX29zX2h0b25zKGF0dHItPmxhdGVuY3kpOworCisJYmZhX3RyYyhiZmEsIGF0dHItPmRlbGF5KTsKKwliZmFfdHJjKGJmYSwgYXR0ci0+bGF0ZW5jeSk7CisKKwliZmFfcmVxcV9wcm9kdWNlKGJmYSwgQkZBX1JFUVFfSU9DKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwordm9pZAorYmZhX2lvY2ZjX3NldF9zbnNiYXNlKHN0cnVjdCBiZmFfcyAqYmZhLCB1NjQgc25zYmFzZV9wYSkKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MgICAgICAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWlvY2ZjLT5jZmdpbmZvLT5zZW5zZV9idWZfbGVuID0gKEJGSV9JT0lNX1NOU0xFTiAtIDEpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoaW9jZmMtPmNmZ2luZm8tPmlvaW1fc25zYmFzZSwgc25zYmFzZV9wYSk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2lvY2ZjX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19zdGF0c19zICpzdGF0cywKKwkJICAgICAgYmZhX2NiX2lvY190IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWlmIChpb2NmYy0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgaW9jZmMtPnN0YXRzX2J1c3kpOworCQlyZXR1cm4gKEJGQV9TVEFUVVNfREVWQlVTWSk7CisJfQorCisJaW9jZmMtPnN0YXRzX2J1c3kgPSBCRkFfVFJVRTsKKwlpb2NmYy0+c3RhdHNfcmV0ID0gc3RhdHM7CisJaW9jZmMtPnN0YXRzX2NiZm4gPSBjYmZuOworCWlvY2ZjLT5zdGF0c19jYmFyZyA9IGNiYXJnOworCisJYmZhX2lvY2ZjX3N0YXRzX3F1ZXJ5KGJmYSk7CisKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NmY19jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX2lvY190IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWlmIChpb2NmYy0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgaW9jZmMtPnN0YXRzX2J1c3kpOworCQlyZXR1cm4gKEJGQV9TVEFUVVNfREVWQlVTWSk7CisJfQorCisJaW9jZmMtPnN0YXRzX2J1c3kgPSBCRkFfVFJVRTsKKwlpb2NmYy0+c3RhdHNfY2JmbiA9IGNiZm47CisJaW9jZmMtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisKKwliZmFfaW9jZmNfc3RhdHNfY2xlYXIoYmZhKTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCisvKioKKyAqIEVuYWJsZSBJT0MgYWZ0ZXIgaXQgaXMgZGlzYWJsZWQuCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19lbmFibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3Bsb2dfc3RyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsIEJGQV9QTF9FSURfTUlTQywgMCwKKwkJICAgICAiSU9DIEVuYWJsZSIpOworCWJmYV9pb2NfZW5hYmxlKCZiZmEtPmlvYyk7Cit9CisKK3ZvaWQKK2JmYV9pb2NmY19kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9wbG9nX3N0cihiZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLCBCRkFfUExfRUlEX01JU0MsIDAsCisJCSAgICAgIklPQyBEaXNhYmxlIik7CisJYmZhLT5pb2NmYy5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX0RJU0FCTEU7CisKKwliZmEtPnJtZV9wcm9jZXNzID0gQkZBX0ZBTFNFOworCWJmYV9pb2NfZGlzYWJsZSgmYmZhLT5pb2MpOworfQorCisKK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NmY19pc19vcGVyYXRpb25hbChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlyZXR1cm4gYmZhX2lvY19pc19vcGVyYXRpb25hbCgmYmZhLT5pb2MpICYmIGJmYS0+aW9jZmMuY2ZnZG9uZTsKK30KKworLyoqCisgKiBSZXR1cm4gYm9vdCB0YXJnZXQgcG9ydCB3d25zIC0tIHJlYWQgZnJvbSBib290IGluZm9ybWF0aW9uIGluIGZsYXNoLgorICovCit2b2lkCitiZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCAqbnd3bnMsIHd3bl90ICoqd3ducykKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJCSppb2NmYwkgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zCSpjZmdyc3AgID0gaW9jZmMtPmNmZ3JzcDsKKworCSpud3ducyA9IGNmZ3JzcC0+Ym9vdHd3bnMubnd3bnM7CisJKnd3bnMgPSBjZmdyc3AtPmJvb3R3d25zLnd3bjsKK30KKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkMTc3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9JT0NGQ19IX18KKyNkZWZpbmUgX19CRkFfSU9DRkNfSF9fCisKKyNpbmNsdWRlIDxiZmFfaW9jLmg+CisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9pb2NmYy5oPgorI2luY2x1ZGUgPGJmYV9jYWxsYmFja19wcml2Lmg+CisKKyNkZWZpbmUgQkZBX1JFUVFfTkVMRU1TX01JTgkoNCkKKyNkZWZpbmUgQkZBX1JTUFFfTkVMRU1TX01JTgkoNCkKKworc3RydWN0IGJmYV9pb2NmY19yZWdzX3MgeworCWJmYV9vc19hZGRyX3QgICBpbnRyX3N0YXR1czsKKwliZmFfb3NfYWRkcl90ICAgaW50cl9tYXNrOworCWJmYV9vc19hZGRyX3QgICBjcGVfcV9waVtCRklfSU9DX01BWF9DUVNdOworCWJmYV9vc19hZGRyX3QgICBjcGVfcV9jaVtCRklfSU9DX01BWF9DUVNdOworCWJmYV9vc19hZGRyX3QgICBjcGVfcV9kZXB0aFtCRklfSU9DX01BWF9DUVNdOworCWJmYV9vc19hZGRyX3QgICBjcGVfcV9jdHJsW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIHJtZV9xX2NpW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIHJtZV9xX3BpW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIHJtZV9xX2RlcHRoW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIHJtZV9xX2N0cmxbQkZJX0lPQ19NQVhfQ1FTXTsKK307CisKKy8qKgorICogTVNJWCB2ZWN0b3IgaGFuZGxlcnMKKyAqLworI2RlZmluZSBCRkFfTVNJWF9NQVhfVkVDVE9SUwkyMgordHlwZWRlZiB2b2lkICgqYmZhX21zaXhfaGFuZGxlcl90KShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHZlYyk7CitzdHJ1Y3QgYmZhX21zaXhfcyB7CisJaW50CW52ZWNzOworCWJmYV9tc2l4X2hhbmRsZXJfdCBoYW5kbGVyW0JGQV9NU0lYX01BWF9WRUNUT1JTXTsKK307CisKKy8qKgorICogQ2hpcCBzcGVjaWZpYyBpbnRlcmZhY2VzCisgKi8KK3N0cnVjdCBiZmFfaHdpZl9zIHsKKwl2b2lkICgqaHdfcmVnaW5pdCkoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCpod19yc3BxX2Fjaykoc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxKTsKKwl2b2lkICgqaHdfbXNpeF9pbml0KShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IG52ZWNzKTsKKwl2b2lkICgqaHdfbXNpeF9pbnN0YWxsKShzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKmh3X21zaXhfdW5pbnN0YWxsKShzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKmh3X2lzcl9tb2RlX3NldCkoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbXNpeCk7CisJdm9pZCAoKmh3X21zaXhfZ2V0dmVjcykoc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqdmVjbWFwLAorCQkJdTMyICpudmVjcywgdTMyICptYXh2ZWMpOworfTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9jYl9pb2NmY190KSAodm9pZCAqY2JhcmcsIGVudW0gYmZhX3N0YXR1cyBzdGF0dXMpOworCitzdHJ1Y3QgYmZhX2lvY2ZjX3MgeworCXN0cnVjdCBiZmFfcyAJCSpiZmE7CisJc3RydWN0IGJmYV9pb2NmY19jZmdfcyAJY2ZnOworCWludAkJCWFjdGlvbjsKKworCXUzMiAgICAgICAgCXJlcV9jcV9waVtCRklfSU9DX01BWF9DUVNdOworCXUzMiAgICAgICAgCXJzcF9jcV9jaVtCRklfSU9DX01BWF9DUVNdOworCisJc3RydWN0IGJmYV9jYl9xZV9zCWluaXRfaGNiX3FlOworCXN0cnVjdCBiZmFfY2JfcWVfcwlzdG9wX2hjYl9xZTsKKwlzdHJ1Y3QgYmZhX2NiX3FlX3MJZGlzX2hjYl9xZTsKKwlzdHJ1Y3QgYmZhX2NiX3FlX3MJc3RhdHNfaGNiX3FlOworCWJmYV9ib29sZWFuX3QJCWNmZ2RvbmU7CisKKwlzdHJ1Y3QgYmZhX2RtYV9zCWNmZ19pbmZvOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgKmNmZ2luZm87CisJc3RydWN0IGJmYV9kbWFfcwljZmdyc3BfZG1hOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MgKmNmZ3JzcDsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXBseV9zICpjZmdfcmVwbHk7CisKKwl1OAkJCSpzdGF0c19rdmE7CisJdTY0CQlzdGF0c19wYTsKKwlzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgCSpmd19zdGF0czsKKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCXN0YXRzX3RpbWVyOwkvKiAgdGltZXIgKi8KKwlzdHJ1Y3QgYmZhX2lvY2ZjX3N0YXRzX3MgKnN0YXRzX3JldDsJLyogIGRyaXZlciBzdGF0cyBsb2NhdGlvbiAqLworCWJmYV9zdGF0dXNfdAkJc3RhdHNfc3RhdHVzOwkvKiAgc3RhdHMvc3RhdHNjbHIgc3RhdHVzICovCisJYmZhX2Jvb2xlYW5fdCAgIAlzdGF0c19idXN5OwkvKiAgb3V0c3RhbmRpbmcgc3RhdHMgKi8KKwliZmFfY2JfaW9jX3QJCXN0YXRzX2NiZm47CS8qICBkcml2ZXIgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKwl2b2lkICAgICAgICAgICAJCSpzdGF0c19jYmFyZzsJLyogIHVzZXIgY2FsbGJhY2sgYXJnICovCisKKwlzdHJ1Y3QgYmZhX2RtYV9zICAgCXJlcV9jcV9iYVtCRklfSU9DX01BWF9DUVNdOworCXN0cnVjdCBiZmFfZG1hX3MgICAJcmVxX2NxX3NoYWRvd19jaVtCRklfSU9DX01BWF9DUVNdOworCXN0cnVjdCBiZmFfZG1hX3MgICAJcnNwX2NxX2JhW0JGSV9JT0NfTUFYX0NRU107CisJc3RydWN0IGJmYV9kbWFfcyAgIAlyc3BfY3Ffc2hhZG93X3BpW0JGSV9JT0NfTUFYX0NRU107CisJc3RydWN0IGJmYV9pb2NmY19yZWdzX3MJYmZhX3JlZ3M7CS8qICBCRkEgZGV2aWNlIHJlZ2lzdGVycyAqLworCXN0cnVjdCBiZmFfaHdpZl9zCWh3aWY7CisKKwliZmFfY2JfaW9jZmNfdAkJdXBkYXRlcV9jYmZuOyAvKiAgYmlvcyBjYWxsYmFjayBmdW5jdGlvbiAqLworCXZvaWQJCQkJKnVwZGF0ZXFfY2Jhcmc7CS8qICBiaW9zIGNhbGxiYWNrIGFyZyAqLworfTsKKworI2RlZmluZSBiZmFfbHB1aWQoX19iZmEpCQliZmFfaW9jX3BvcnRpZCgmKF9fYmZhKS0+aW9jKQorI2RlZmluZSBiZmFfbXNpeF9pbml0KF9fYmZhLCBfX252ZWNzKQlcCisJKF9fYmZhKS0+aW9jZmMuaHdpZi5od19tc2l4X2luaXQoX19iZmEsIF9fbnZlY3MpCisjZGVmaW5lIGJmYV9tc2l4X2luc3RhbGwoX19iZmEpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X21zaXhfaW5zdGFsbChfX2JmYSkKKyNkZWZpbmUgYmZhX21zaXhfdW5pbnN0YWxsKF9fYmZhKQlcCisJKF9fYmZhKS0+aW9jZmMuaHdpZi5od19tc2l4X3VuaW5zdGFsbChfX2JmYSkKKyNkZWZpbmUgYmZhX2lzcl9tb2RlX3NldChfX2JmYSwgX19tc2l4KQlcCisJKF9fYmZhKS0+aW9jZmMuaHdpZi5od19pc3JfbW9kZV9zZXQoX19iZmEsIF9fbXNpeCkKKyNkZWZpbmUgYmZhX21zaXhfZ2V0dmVjcyhfX2JmYSwgX192ZWNtYXAsIF9fbnZlY3MsIF9fbWF4dmVjKQlcCisJKF9fYmZhKS0+aW9jZmMuaHdpZi5od19tc2l4X2dldHZlY3MoX19iZmEsIF9fdmVjbWFwLCBfX252ZWNzLCBfX21heHZlYykKKworLyoKKyAqIEZDIHNwZWNpZmljIElPQyBmdW5jdGlvbnMuCisgKi8KK3ZvaWQgYmZhX2lvY2ZjX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJdTMyICpkbV9sZW4pOwordm9pZCBiZmFfaW9jZmNfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLAorCQlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLAorCQlzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpOwordm9pZCBiZmFfaW9jZmNfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY2ZjX2luaXQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19pc3Iodm9pZCAqYmZhLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm1zZyk7Cit2b2lkIGJmYV9pb2NmY19zZXRfc25zYmFzZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTY0IHNuc2Jhc2VfcGEpOworYmZhX2Jvb2xlYW5fdCBiZmFfaW9jZmNfaXNfb3BlcmF0aW9uYWwoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfcmVzZXRfcXVldWVzKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY2ZjX3VwZGF0ZXEoc3RydWN0IGJmYV9zICpiZmEsIHUzMiByZXFxX2JhLCB1MzIgcnNwcV9iYSwKKwkJCXUzMiByZXFxX3NjaSwgdTMyIHJzcHFfc3BpLAorCQkJYmZhX2NiX2lvY2ZjX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworCit2b2lkIGJmYV9tc2l4X2FsbChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHZlYyk7Cit2b2lkIGJmYV9tc2l4X3JlcXEoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpOwordm9pZCBiZmFfbXNpeF9yc3BxKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKK3ZvaWQgYmZhX21zaXhfbHB1X2VycihzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHZlYyk7CisKK3ZvaWQgYmZhX2h3Y2JfcmVnaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9od2NiX3JzcHFfYWNrKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSk7Cit2b2lkIGJmYV9od2NiX21zaXhfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IG52ZWNzKTsKK3ZvaWQgYmZhX2h3Y2JfbXNpeF9pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2h3Y2JfbXNpeF91bmluc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaHdjYl9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbXNpeCk7Cit2b2lkIGJmYV9od2NiX21zaXhfZ2V0dmVjcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICp2ZWNtYXAsCisJCQl1MzIgKm52ZWNzLCB1MzIgKm1heHZlYyk7Cit2b2lkIGJmYV9od2N0X3JlZ2luaXQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaHdjdF9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpOwordm9pZCBiZmFfaHdjdF9tc2l4X2luaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCBudmVjcyk7Cit2b2lkIGJmYV9od2N0X21zaXhfaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9od2N0X21zaXhfdW5pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2h3Y3RfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1zaXgpOwordm9pZCBiZmFfaHdjdF9tc2l4X2dldHZlY3Moc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqdmVjbWFwLAorCQkJdTMyICpudmVjcywgdTMyICptYXh2ZWMpOworCit2b2lkIGJmYV9jb21fbWVtaW5mbyhiZmFfYm9vbGVhbl90IG1pbmNmZywgdTMyICpkbV9sZW4pOwordm9pZCBiZmFfY29tX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pLAorCQliZmFfYm9vbGVhbl90IG1pbmNmZyk7Cit2b2lkIGJmYV9pb2NmY19nZXRfYm9vdHd3bnMoc3RydWN0IGJmYV9zICpiZmEsIHU4ICpud3ducywgd3duX3QgKip3d25zKTsKKworI2VuZGlmIC8qIF9fQkZBX0lPQ0ZDX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmY19xLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmY19xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAwYTE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjX3EuYwpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlICJiZmFfaW50cl9wcml2LmgiCisKK0JGQV9UUkNfRklMRShIQUwsIElPQ0ZDX1EpOworCit2b2lkCitiZmFfaW9jZmNfdXBkYXRlcShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHJlcXFfYmEsIHUzMiByc3BxX2JhLAorCQkJCXUzMiByZXFxX3NjaSwgdTMyIHJzcHFfc3BpLCBiZmFfY2JfaW9jZmNfdCBjYmZuLAorCQkJCXZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcyAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcmVxX3MgdXBkYXRlcV9yZXE7CisKKwlpb2NmYy0+dXBkYXRlcV9jYmZuID0gY2JmbjsKKwlpb2NmYy0+dXBkYXRlcV9jYmFyZyA9IGNiYXJnOworCisJYmZpX2gyaV9zZXQodXBkYXRlcV9yZXEubWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9VUERBVEVRX1JFUSwKKwkJCWJmYV9scHVpZChiZmEpKTsKKworCXVwZGF0ZXFfcmVxLnJlcXFfYmEgPSBiZmFfb3NfaHRvbmwocmVxcV9iYSk7CisJdXBkYXRlcV9yZXEucnNwcV9iYSA9IGJmYV9vc19odG9ubChyc3BxX2JhKTsKKwl1cGRhdGVxX3JlcS5yZXFxX3NjaSA9IGJmYV9vc19odG9ubChyZXFxX3NjaSk7CisJdXBkYXRlcV9yZXEucnNwcV9zcGkgPSBiZmFfb3NfaHRvbmwocnNwcV9zcGkpOworCisJYmZhX2lvY19tYm94X3NlbmQoJmJmYS0+aW9jLCAmdXBkYXRlcV9yZXEsCisJCQlzaXplb2Yoc3RydWN0IGJmaV9pb2NmY191cGRhdGVxX3JlcV9zKSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2ltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2ltLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlMjU1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvaW0uYwpAQCAtMCwwICsxLDEzMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJmYV9jYl9pb2ltX21hY3Jvcy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJT0lNKTsKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICovCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAliZmFfaW9pbV9zZW5kX2lvcmVxKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90CWJmYV9pb2ltX3NnZV9zZXR1cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7CitzdGF0aWMgdm9pZAkJYmZhX2lvaW1fc2dwZ19zZXR1cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdAliZmFfaW9pbV9zZW5kX2Fib3J0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyB2b2lkCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9pb2ltX2dvb2RfY29tcCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9pb2ltX2NvbXAodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgX19iZmFfY2JfaW9pbV9hYm9ydCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9pb2ltX3BhdGh0b3Yodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworCisvKioKKyAqICBiZmFfaW9pbV9zbQorICovCisKKy8qKgorICogSU8gc3RhdGUgbWFjaGluZSBldmVudHMKKyAqLworZW51bSBiZmFfaW9pbV9ldmVudCB7CisJQkZBX0lPSU1fU01fU1RBUlQgPSAxLAkJLyogIGlvIHN0YXJ0IHJlcXVlc3QgZnJvbSBob3N0ICovCisJQkZBX0lPSU1fU01fQ09NUF9HT09EID0gMiwJLyogIGlvIGdvb2QgY29tcCwgcmVzb3VyY2UgZnJlZSAqLworCUJGQV9JT0lNX1NNX0NPTVAgPSAzLAkJLyogIGlvIGNvbXAsIHJlc291cmNlIGlzIGZyZWUgKi8KKwlCRkFfSU9JTV9TTV9DT01QX1VUQUcgPSA0LAkvKiAgaW8gY29tcCwgcmVzb3VyY2UgaXMgZnJlZSAqLworCUJGQV9JT0lNX1NNX0RPTkUgPSA1LAkJLyogIGlvIGNvbXAsIHJlc291cmNlIG5vdCBmcmVlICovCisJQkZBX0lPSU1fU01fRlJFRSA9IDYsCQkvKiAgaW8gcmVzb3VyY2UgaXMgZnJlZWQgKi8KKwlCRkFfSU9JTV9TTV9BQk9SVCA9IDcsCQkvKiAgYWJvcnQgcmVxdWVzdCBmcm9tIHNjc2kgc3RhY2sgKi8KKwlCRkFfSU9JTV9TTV9BQk9SVF9DT01QID0gOCwJLyogIGFib3J0IGZyb20gZi93ICovCisJQkZBX0lPSU1fU01fQUJPUlRfRE9ORSA9IDksCS8qICBhYm9ydCBjb21wbGV0aW9uIGZyb20gZi93ICovCisJQkZBX0lPSU1fU01fUVJFU1VNRSA9IDEwLAkvKiAgQ1Egc3BhY2UgYXZhaWxhYmxlIHRvIHF1ZXVlIElPICovCisJQkZBX0lPSU1fU01fU0dBTExPQ0VEID0gMTEsCS8qICBTRyBwYWdlIGFsbG9jYXRpb24gc3VjY2Vzc2Z1bCAqLworCUJGQV9JT0lNX1NNX1NRUkVUUlkgPSAxMiwJLyogIHNlcXVlbmNlIHJlY292ZXJ5IHJldHJ5ICovCisJQkZBX0lPSU1fU01fSENCCT0gMTMsCQkvKiAgYmZhIGNhbGxiYWNrIGNvbXBsZXRlICovCisJQkZBX0lPSU1fU01fQ0xFQU5VUCA9IDE0LAkvKiAgSU8gY2xlYW51cCBmcm9tIGl0bmltICovCisJQkZBX0lPSU1fU01fVE1TVEFSVCA9IDE1LAkvKiAgSU8gY2xlYW51cCBmcm9tIHRza2ltICovCisJQkZBX0lPSU1fU01fVE1ET05FID0gMTYsCS8qICBJTyBjbGVhbnVwIGZyb20gdHNraW0gKi8KKwlCRkFfSU9JTV9TTV9IV0ZBSUwgPSAxNywJLyogIElPQyBoL3cgZmFpbHVyZSBldmVudCAqLworCUJGQV9JT0lNX1NNX0lPVE9WID0gMTgsCQkvKiAgSVROIG9mZmxpbmUgVE9WICAgICAgICovCit9OworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBJTyBzdGF0ZSBtYWNoaW5lCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV91bmluaXQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJICAgICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX3NnYWxsb2Moc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCWVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2FjdGl2ZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJICAgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJICAgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fYWJvcnRfcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCSAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9jbGVhbnVwX3FmdWxsKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQkgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9oY2Ioc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2hjYl9mcmVlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQkgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fcmVzZnJlZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CisKKy8qKgorICogCQlJTyBpcyBub3Qgc3RhcnRlZCAodW5hbGxvY2F0ZWQpLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fdW5pbml0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX1NUQVJUOgorCQlpZiAoIWJmYV9pdG5pbV9pc19vbmxpbmUoaW9pbS0+aXRuaW0pKSB7CisJCQlpZiAoIWJmYV9pdG5pbV9ob2xkX2lvKGlvaW0tPml0bmltKSkgeworCQkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLAorCQkJCQkmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKKwkJCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLAorCQkJCQkJX19iZmFfY2JfaW9pbV9wYXRodG92LCBpb2ltKTsKKwkJCX0gZWxzZSB7CisJCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwKKwkJCQkJJmlvaW0tPml0bmltLT5wZW5kaW5nX3EpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaW9pbS0+bnNnZXMgPiBCRklfU0dFX0lOTElORSkgeworCQkJaWYgKCFiZmFfaW9pbV9zZ2Vfc2V0dXAoaW9pbSkpIHsKKwkJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3NnYWxsb2MpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCWlmICghYmZhX2lvaW1fc2VuZF9pb3JlcShpb2ltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9xZnVsbCk7CisJCQlicmVhazsKKwkJfQorCisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fYWN0aXZlKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0lPVE9WOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsCisJCQkJX19iZmFfY2JfaW9pbV9wYXRodG92LCBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUOgorCQkvKioKKwkJICogSU8gaW4gcGVuZGluZyBxdWV1ZSBjYW4gZ2V0IGFib3J0IHJlcXVlc3RzLiBDb21wbGV0ZSBhYm9ydAorCQkgKiByZXF1ZXN0cyBpbW1lZGlhdGVseS4KKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZpb2ltLT5pdG5pbS0+cGVuZGluZ19xLCBpb2ltKSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkJaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlJTyBpcyB3YWl0aW5nIGZvciBTRyBwYWdlcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX3NnYWxsb2Moc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fU0dBTExPQ0VEOgorCQlpZiAoIWJmYV9pb2ltX3NlbmRfaW9yZXEoaW9pbSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fcWZ1bGwpOworCQkJYnJlYWs7CisJCX0KKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hY3RpdmUpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfc2dwZ193Y2FuY2VsKGlvaW0tPmJmYSwgJmlvaW0tPmlvc3AtPnNncGdfd3FlKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfc2dwZ193Y2FuY2VsKGlvaW0tPmJmYSwgJmlvaW0tPmlvc3AtPnNncGdfd3FlKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9zZ3BnX3djYW5jZWwoaW9pbS0+YmZhLCAmaW9pbS0+aW9zcC0+c2dwZ193cWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU8gaXMgYWN0aXZlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fYWN0aXZlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfR09PRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLAorCQkJICAgICAgX19iZmFfY2JfaW9pbV9nb29kX2NvbXAsIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2NvbXAsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiX2ZyZWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2NvbXAsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUOgorCQlpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCA9IEJGQV9UUlVFOworCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9hYm9ydDsKKworCQlpZiAoYmZhX2lvaW1fc2VuZF9hYm9ydChpb2ltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fYWJvcnQpOworCQllbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fYWJvcnRfcWZ1bGwpOworCQkJYmZhX3JlcXFfd2FpdChpb2ltLT5iZmEsIGlvaW0tPml0bmltLT5yZXFxLAorCQkJCQkgICZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQlpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCA9IEJGQV9GQUxTRTsKKwkJaW9pbS0+aW9fY2JmbiA9IF9fYmZhX2NiX2lvaW1fZmFpbGVkOworCisJCWlmIChiZmFfaW9pbV9zZW5kX2Fib3J0KGlvaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9jbGVhbnVwKTsKKwkJZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2NsZWFudXBfcWZ1bGwpOworCQkJYmZhX3JlcXFfd2FpdChpb2ltLT5iZmEsIGlvaW0tPml0bmltLT5yZXFxLAorCQkJCQkgICZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUlPIGlzIGJlaW5nIGFib3J0ZWQsIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gZnJvbSBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX2Fib3J0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfR09PRDoKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVA6CisJY2FzZSBCRkFfSU9JTV9TTV9ET05FOgorCWNhc2UgQkZBX0lPSU1fU01fRlJFRToKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiX2ZyZWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVF9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfVVRBRzoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfYXNzZXJ0KGlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID09IEJGQV9UUlVFKTsKKwkJaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgPSBCRkFfRkFMU0U7CisKKwkJaWYgKGJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2NsZWFudXApOworCQllbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cF9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KGlvaW0tPmJmYSwgaW9pbS0+aXRuaW0tPnJlcXEsCisJCQkJCSAgJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPIGlzIGJlaW5nIGNsZWFuZWQgdXAgKGltcGxpY2l0IGFib3J0KSwgd2FpdGluZyBmb3IgY29tcGxldGlvbiBmcm9tCisgKiBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX2NsZWFudXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9HT09EOgorCWNhc2UgQkZBX0lPSU1fU01fQ09NUDoKKwljYXNlIEJGQV9JT0lNX1NNX0RPTkU6CisJY2FzZSBCRkFfSU9JTV9TTV9GUkVFOgorCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CisJCS8qKgorCQkgKiBJTyBpcyBhbHJlYWR5IGJlaW5nIGFib3J0ZWQgaW1wbGljaXRseQorCQkgKi8KKwkJaW9pbS0+aW9fY2JmbiA9IF9fYmZhX2NiX2lvaW1fYWJvcnQ7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVF9ET05FOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYl9mcmVlKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgaW9pbS0+aW9fY2JmbiwgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlRfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBpb2ltLT5pb19jYmZuLCBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX1VUQUc6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgaW9pbS0+aW9fY2JmbiwgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQkvKioKKwkJICogSU8gY2FuIGJlIGluIGNsZWFudXAgc3RhdGUgYWxyZWFkeSBkdWUgdG8gVE0gY29tbWFuZC4gMm5kIGNsZWFudXAKKwkJICogcmVxdWVzdCBjb21lcyBmcm9tIElUTiBvZmZsaW5lIGV2ZW50LgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUlPIGlzIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUQorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hY3RpdmUpOworCQliZmFfaW9pbV9zZW5kX2lvcmVxKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJQWN0aXZlIElPIGlzIGJlaW5nIGFib3J0ZWQsIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX2Fib3J0X3FmdWxsKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fYWJvcnQpOworCQliZmFfaW9pbV9zZW5kX2Fib3J0KGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJYmZhX2Fzc2VydChpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCA9PSBCRkFfVFJVRSk7CisJCWlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID0gQkZBX0ZBTFNFOworCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2NsZWFudXBfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9HT09EOgorCWNhc2UgQkZBX0lPSU1fU01fQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9ET05FOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYl9mcmVlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlBY3RpdmUgSU8gaXMgYmVpbmcgY2xlYW5lZCB1cCwgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fY2xlYW51cF9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2NsZWFudXApOworCQliZmFfaW9pbV9zZW5kX2Fib3J0KGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CisJCS8qKgorCQkgKiBJTyBpcyBhbHJhZWR5IGJlaW5nIGNsZWFuZWQgdXAgaW1wbGljaXRseQorCQkgKi8KKwkJaW9pbS0+aW9fY2JmbiA9IF9fYmZhX2NiX2lvaW1fYWJvcnQ7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX0dPT0Q6CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIGlvaW0tPmlvX2NiZm4sIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiX2ZyZWUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBpb2ltLT5pb19jYmZuLCBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBJTyBiZmEgY2FsbGJhY2sgaXMgcGVuZGluZy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX2hjYihzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9IQ0I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fdW5pbml0KTsKKwkJYmZhX2lvaW1fZnJlZShpb2ltKTsKKwkJYmZhX2NiX2lvaW1fcmVzZnJlZShpb2ltLT5iZmEtPmJmYWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogSU8gYmZhIGNhbGxiYWNrIGlzIHBlbmRpbmcuIElPIHJlc291cmNlIGNhbm5vdCBiZSBmcmVlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX2hjYl9mcmVlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX0hDQjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9yZXNmcmVlKTsKKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9yZXNmcmVlX3EpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fRlJFRToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBJTyBpcyBjb21wbGV0ZWQsIHdhaXRpbmcgcmVzb3VyY2UgZnJlZSBmcm9tIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fcmVzZnJlZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9GUkVFOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3VuaW5pdCk7CisJCWJmYV9pb2ltX2ZyZWUoaW9pbSk7CisJCWJmYV9jYl9pb2ltX3Jlc2ZyZWUoaW9pbS0+YmZhLT5iZmFkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX2lvaW1fcHJpdmF0ZQorICovCisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX2dvb2RfY29tcCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSA9IGNiYXJnOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJYmZhX2NiX2lvaW1fZ29vZF9jb21wKGlvaW0tPmJmYS0+YmZhZCwgaW9pbS0+ZGlvKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2lvaW1fY29tcCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcwkqaW9pbSA9IGNiYXJnOworCXN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqbTsKKwl1OAkJKnNuc2luZm8gPSBOVUxMOworCXU4ICAgICAgICAgc25zX2xlbiA9IDA7CisJczMyICAgICAgICAgcmVzaWR1ZSA9IDA7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwltID0gKHN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqKSAmaW9pbS0+aW9zcC0+Y29tcF9yc3Btc2c7CisJaWYgKG0tPmlvX3N0YXR1cyA9PSBCRklfSU9JTV9TVFNfT0spIHsKKwkJLyoqCisJCSAqIHNldHVwIHNlbnNlIGluZm9ybWF0aW9uLCBpZiBwcmVzZW50CisJCSAqLworCQlpZiAobS0+c2NzaV9zdGF0dXMgPT0gU0NTSV9TVEFUVVNfQ0hFQ0tfQ09ORElUSU9OCisJCQkJCSYmIG0tPnNuc19sZW4pIHsKKwkJCXNuc19sZW4gPSBtLT5zbnNfbGVuOworCQkJc25zaW5mbyA9IGlvaW0tPmlvc3AtPnNuc2luZm87CisJCX0KKworCQkvKioKKwkJICogc2V0dXAgcmVzaWR1ZSB2YWx1ZSBjb3JyZWN0bHkgZm9yIG5vcm1hbCBjb21wbGV0aW9ucworCQkgKi8KKwkJaWYgKG0tPnJlc2lkX2ZsYWdzID09IEZDUF9SRVNJRF9VTkRFUikKKwkJCXJlc2lkdWUgPSBiZmFfb3NfbnRvaGwobS0+cmVzaWR1ZSk7CisJCWlmIChtLT5yZXNpZF9mbGFncyA9PSBGQ1BfUkVTSURfT1ZFUikgeworCQkJcmVzaWR1ZSA9IGJmYV9vc19udG9obChtLT5yZXNpZHVlKTsKKwkJCXJlc2lkdWUgPSAtcmVzaWR1ZTsKKwkJfQorCX0KKworCWJmYV9jYl9pb2ltX2RvbmUoaW9pbS0+YmZhLT5iZmFkLCBpb2ltLT5kaW8sIG0tPmlvX3N0YXR1cywKKwkJCSAgbS0+c2NzaV9zdGF0dXMsIHNuc19sZW4sIHNuc2luZm8sIHJlc2lkdWUpOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaW9pbV9mYWlsZWQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fSENCKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9jYl9pb2ltX2RvbmUoaW9pbS0+YmZhLT5iZmFkLCBpb2ltLT5kaW8sIEJGSV9JT0lNX1NUU19BQk9SVEVELAorCQkJICAwLCAwLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2lvaW1fcGF0aHRvdih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSA9IGNiYXJnOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJYmZhX2NiX2lvaW1fZG9uZShpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbywgQkZJX0lPSU1fU1RTX1BBVEhUT1YsCisJCQkgIDAsIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaW9pbV9hYm9ydCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSA9IGNiYXJnOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJYmZhX2NiX2lvaW1fYWJvcnQoaW9pbS0+YmZhLT5iZmFkLCBpb2ltLT5kaW8pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc2dwZ19hbGxvY2VkKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpb2ltLT5uc2dwZ3MgPSBCRkFfU0dQR19OUEFHRShpb2ltLT5uc2dlcyk7CisJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZpb2ltLT5pb3NwLT5zZ3BnX3dxZS5zZ3BnX3EsICZpb2ltLT5zZ3BnX3EpOworCWJmYV9pb2ltX3NncGdfc2V0dXAoaW9pbSk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fU0dBTExPQ0VEKTsKK30KKworLyoqCisgKiBTZW5kIEkvTyByZXF1ZXN0IHRvIGZpcm13YXJlLgorICovCitzdGF0aWMgICAgICAgICAgYmZhX2Jvb2xlYW5fdAorYmZhX2lvaW1fc2VuZF9pb3JlcShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gaW9pbS0+aXRuaW07CisJc3RydWN0IGJmaV9pb2ltX3JlcV9zICptOworCXN0YXRpYyBzdHJ1Y3QgZmNwX2NtbmRfcyBjbW5kX3owID0geyAwIH07CisJc3RydWN0IGJmaV9zZ2VfcyAgICAgICpzZ2U7CisJdTMyICAgICAgICBwZ2RsZW4gPSAwOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KGlvaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KGlvaW0tPmJmYSwgaW9pbS0+aXRuaW0tPnJlcXEsCisJCQkJICAmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwkvKioKKwkgKiBidWlsZCBpL28gcmVxdWVzdCBtZXNzYWdlIG5leHQKKwkgKi8KKwltLT5pb190YWcgPSBiZmFfb3NfaHRvbnMoaW9pbS0+aW90YWcpOworCW0tPnJwb3J0X2hkbCA9IGlvaW0tPml0bmltLT5ycG9ydC0+ZndfaGFuZGxlOworCW0tPmlvX3RpbWVvdXQgPSBiZmFfY2JfaW9pbV9nZXRfdGltZW91dChpb2ltLT5kaW8pOworCisJLyoqCisJICogYnVpbGQgaW5saW5lIElPIFNHIGVsZW1lbnQgaGVyZQorCSAqLworCXNnZSA9ICZtLT5zZ2VzWzBdOworCWlmIChpb2ltLT5uc2dlcykgeworCQlzZ2UtPnNnYSA9IGJmYV9jYl9pb2ltX2dldF9zZ2FkZHIoaW9pbS0+ZGlvLCAwKTsKKwkJcGdkbGVuID0gYmZhX2NiX2lvaW1fZ2V0X3NnbGVuKGlvaW0tPmRpbywgMCk7CisJCXNnZS0+c2dfbGVuID0gcGdkbGVuOworCQlzZ2UtPmZsYWdzID0gKGlvaW0tPm5zZ2VzID4gQkZJX1NHRV9JTkxJTkUpID8KKwkJCQkJQkZJX1NHRV9EQVRBX0NQTCA6IEJGSV9TR0VfREFUQV9MQVNUOworCQliZmFfc2dlX3RvX2JlKHNnZSk7CisJCXNnZSsrOworCX0KKworCWlmIChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSB7CisJCXNnZS0+c2dhID0gaW9pbS0+c2dwZy0+c2dwZ19wYTsKKwl9IGVsc2UgeworCQlzZ2UtPnNnYS5hMzIuYWRkcl9sbyA9IDA7CisJCXNnZS0+c2dhLmEzMi5hZGRyX2hpID0gMDsKKwl9CisJc2dlLT5zZ19sZW4gPSBwZ2RsZW47CisJc2dlLT5mbGFncyA9IEJGSV9TR0VfUEdETEVOOworCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKworCS8qKgorCSAqIHNldCB1cCBJL08gY29tbWFuZCBwYXJhbWV0ZXJzCisJICovCisJYmZhX29zX2Fzc2lnbihtLT5jbW5kLCBjbW5kX3owKTsKKwltLT5jbW5kLmx1biA9IGJmYV9jYl9pb2ltX2dldF9sdW4oaW9pbS0+ZGlvKTsKKwltLT5jbW5kLmlvZGlyID0gYmZhX2NiX2lvaW1fZ2V0X2lvZGlyKGlvaW0tPmRpbyk7CisJYmZhX29zX2Fzc2lnbihtLT5jbW5kLmNkYiwKKwkJCSooc3RydWN0IHNjc2lfY2RiX3MgKiliZmFfY2JfaW9pbV9nZXRfY2RiKGlvaW0tPmRpbykpOworCW0tPmNtbmQuZmNwX2RsID0gYmZhX29zX2h0b25sKGJmYV9jYl9pb2ltX2dldF9zaXplKGlvaW0tPmRpbykpOworCisJLyoqCisJICogc2V0IHVwIEkvTyBtZXNzYWdlIGhlYWRlcgorCSAqLworCXN3aXRjaCAobS0+Y21uZC5pb2RpcikgeworCWNhc2UgRkNQX0lPRElSX1JFQUQ6CisJCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTV9SRUFELCAwLCBiZmFfbHB1aWQoaW9pbS0+YmZhKSk7CisJCWJmYV9zdGF0cyhpdG5pbSwgaW5wdXRfcmVxcyk7CisJCWJyZWFrOworCWNhc2UgRkNQX0lPRElSX1dSSVRFOgorCQliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lPSU1fV1JJVEUsIDAsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKKwkJYmZhX3N0YXRzKGl0bmltLCBvdXRwdXRfcmVxcyk7CisJCWJyZWFrOworCWNhc2UgRkNQX0lPRElSX1JXOgorCQliZmFfc3RhdHMoaXRuaW0sIGlucHV0X3JlcXMpOworCQliZmFfc3RhdHMoaXRuaW0sIG91dHB1dF9yZXFzKTsKKwlkZWZhdWx0OgorCQliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lPSU1fSU8sIDAsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKKwl9CisJaWYgKGl0bmltLT5zZXFfcmVjIHx8CisJICAgIChiZmFfY2JfaW9pbV9nZXRfc2l6ZShpb2ltLT5kaW8pICYgKHNpemVvZih1MzIpIC0gMSkpKQorCQliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lPSU1fSU8sIDAsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKKworI2lmZGVmIElPSU1fQURWQU5DRUQKKwltLT5jbW5kLmNybiA9IGJmYV9jYl9pb2ltX2dldF9jcm4oaW9pbS0+ZGlvKTsKKwltLT5jbW5kLnByaW9yaXR5ID0gYmZhX2NiX2lvaW1fZ2V0X3ByaW9yaXR5KGlvaW0tPmRpbyk7CisJbS0+Y21uZC50YXNrYXR0ciA9IGJmYV9jYl9pb2ltX2dldF90YXNrYXR0cihpb2ltLT5kaW8pOworCisJLyoqCisJICogSGFuZGxlIGxhcmdlIENEQiAoPjE2IGJ5dGVzKS4KKwkgKi8KKwltLT5jbW5kLmFkZGxfY2RiX2xlbiA9IChiZmFfY2JfaW9pbV9nZXRfY2RibGVuKGlvaW0tPmRpbykgLQorCQkJCQlGQ1BfQ01ORF9DREJfTEVOKSAvIHNpemVvZih1MzIpOworCWlmIChtLT5jbW5kLmFkZGxfY2RiX2xlbikgeworCQliZmFfb3NfbWVtY3B5KCZtLT5jbW5kLmNkYiArIDEsIChzdHJ1Y3Qgc2NzaV9jZGJfcyAqKQorCQkJCWJmYV9jYl9pb2ltX2dldF9jZGIoaW9pbS0+ZGlvKSArIDEsCisJCQkJbS0+Y21uZC5hZGRsX2NkYl9sZW4gKiBzaXplb2YodTMyKSk7CisJCWZjcF9jbW5kX2ZjcGRsKCZtLT5jbW5kKSA9CisJCQkJYmZhX29zX2h0b25sKGJmYV9jYl9pb2ltX2dldF9zaXplKGlvaW0tPmRpbykpOworCX0KKyNlbmRpZgorCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKGlvaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiBTZXR1cCBhbnkgYWRkaXRpb25hbCBTRyBwYWdlcyBuZWVkZWQuSW5saW5lIFNHIGVsZW1lbnQgaXMgc2V0dXAKKyAqIGF0IHF1ZXVpbmcgdGltZS4KKyAqLworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9pb2ltX3NnZV9zZXR1cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwl1MTYgICAgICAgIG5zZ3BnczsKKworCWJmYV9hc3NlcnQoaW9pbS0+bnNnZXMgPiBCRklfU0dFX0lOTElORSk7CisKKwkvKioKKwkgKiBhbGxvY2F0ZSBTRyBwYWdlcyBuZWVkZWQKKwkgKi8KKwluc2dwZ3MgPSBCRkFfU0dQR19OUEFHRShpb2ltLT5uc2dlcyk7CisJaWYgKCFuc2dwZ3MpCisJCXJldHVybiBCRkFfVFJVRTsKKworCWlmIChiZmFfc2dwZ19tYWxsb2MoaW9pbS0+YmZhLCAmaW9pbS0+c2dwZ19xLCBuc2dwZ3MpCisJICAgICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3NncGdfd2FpdChpb2ltLT5iZmEsICZpb2ltLT5pb3NwLT5zZ3BnX3dxZSwgbnNncGdzKTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwlpb2ltLT5uc2dwZ3MgPSBuc2dwZ3M7CisJYmZhX2lvaW1fc2dwZ19zZXR1cChpb2ltKTsKKworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NncGdfc2V0dXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJaW50ICAgICAgICAgICAgIHNnZWlkLCBuc2dlcywgaTsKKwlzdHJ1Y3QgYmZpX3NnZV9zICAgICAgKnNnZTsKKwlzdHJ1Y3QgYmZhX3NncGdfcyAqc2dwZzsKKwl1MzIgICAgICAgIHBnY3Vtc3o7CisKKwlzZ2VpZCA9IEJGSV9TR0VfSU5MSU5FOworCWlvaW0tPnNncGcgPSBzZ3BnID0gYmZhX3FfZmlyc3QoJmlvaW0tPnNncGdfcSk7CisKKwlkbyB7CisJCXNnZSA9IHNncGctPnNncGctPnNnZXM7CisJCW5zZ2VzID0gaW9pbS0+bnNnZXMgLSBzZ2VpZDsKKwkJaWYgKG5zZ2VzID4gQkZJX1NHUEdfREFUQV9TR0VTKQorCQkJbnNnZXMgPSBCRklfU0dQR19EQVRBX1NHRVM7CisKKwkJcGdjdW1zeiA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBuc2dlczsgaSsrLCBzZ2UrKywgc2dlaWQrKykgeworCQkJc2dlLT5zZ2EgPSBiZmFfY2JfaW9pbV9nZXRfc2dhZGRyKGlvaW0tPmRpbywgc2dlaWQpOworCQkJc2dlLT5zZ19sZW4gPSBiZmFfY2JfaW9pbV9nZXRfc2dsZW4oaW9pbS0+ZGlvLCBzZ2VpZCk7CisJCQlwZ2N1bXN6ICs9IHNnZS0+c2dfbGVuOworCisJCQkvKioKKwkJCSAqIHNldCBmbGFncworCQkJICovCisJCQlpZiAoaSA8IChuc2dlcyAtIDEpKQorCQkJCXNnZS0+ZmxhZ3MgPSBCRklfU0dFX0RBVEE7CisJCQllbHNlIGlmIChzZ2VpZCA8IChpb2ltLT5uc2dlcyAtIDEpKQorCQkJCXNnZS0+ZmxhZ3MgPSBCRklfU0dFX0RBVEFfQ1BMOworCQkJZWxzZQorCQkJCXNnZS0+ZmxhZ3MgPSBCRklfU0dFX0RBVEFfTEFTVDsKKwkJfQorCisJCXNncGcgPSAoc3RydWN0IGJmYV9zZ3BnX3MgKikgYmZhX3FfbmV4dChzZ3BnKTsKKworCQkvKioKKwkJICogc2V0IHRoZSBsaW5rIGVsZW1lbnQgb2YgZWFjaCBwYWdlCisJCSAqLworCQlpZiAoc2dlaWQgPT0gaW9pbS0+bnNnZXMpIHsKKwkJCXNnZS0+ZmxhZ3MgPSBCRklfU0dFX1BHRExFTjsKKwkJCXNnZS0+c2dhLmEzMi5hZGRyX2xvID0gMDsKKwkJCXNnZS0+c2dhLmEzMi5hZGRyX2hpID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNnZS0+ZmxhZ3MgPSBCRklfU0dFX0xJTks7CisJCQlzZ2UtPnNnYSA9IHNncGctPnNncGdfcGE7CisJCX0KKwkJc2dlLT5zZ19sZW4gPSBwZ2N1bXN6OworCX0gd2hpbGUgKHNnZWlkIDwgaW9pbS0+bnNnZXMpOworfQorCisvKioKKyAqIFNlbmQgSS9PIGFib3J0IHJlcXVlc3QgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9pbV9zZW5kX2Fib3J0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAgICAgICAgICAqaXRuaW0gPSBpb2ltLT5pdG5pbTsKKwlzdHJ1Y3QgYmZpX2lvaW1fYWJvcnRfcmVxX3MgKm07CisJZW51bSBiZmlfaW9pbV9oMmkgICAgICAgbXNnb3A7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQoaW9pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJaWYgKCFtKQorCQlyZXR1cm4gQkZBX0ZBTFNFOworCisJLyoqCisJICogYnVpbGQgaS9vIHJlcXVlc3QgbWVzc2FnZSBuZXh0CisJICovCisJaWYgKGlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0KQorCQltc2dvcCA9IEJGSV9JT0lNX0gySV9JT0FCT1JUX1JFUTsKKwllbHNlCisJCW1zZ29wID0gQkZJX0lPSU1fSDJJX0lPQ0xFQU5VUF9SRVE7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lPSU0sIG1zZ29wLCBiZmFfbHB1aWQoaW9pbS0+YmZhKSk7CisJbS0+aW9fdGFnICAgID0gYmZhX29zX2h0b25zKGlvaW0tPmlvdGFnKTsKKwltLT5hYm9ydF90YWcgPSArK2lvaW0tPmFib3J0X3RhZzsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShpb2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogQ2FsbCB0byByZXN1bWUgYW55IEkvTyByZXF1ZXN0cyB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9xcmVzdW1lKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwliZmFfZmNwaW1fc3RhdHMoaW9pbS0+ZmNwaW0sIHFyZXN1bWVzKTsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9RUkVTVU1FKTsKK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJLyoqCisJICogTW92ZSBJTyBmcm9tIGl0bmltIHF1ZXVlIHRvIGZjcGltIGdsb2JhbCBxdWV1ZSBzaW5jZSBpdG5pbSB3aWxsIGJlCisJICogZnJlZWQuCisJICovCisJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7CisKKwlpZiAoIWlvaW0tPmlvc3AtPnRza2ltKSB7CisJCWlmIChpb2ltLT5mY3BpbS0+ZGVsYXlfY29tcCAmJiBpb2ltLT5pdG5pbS0+aW90b3ZfYWN0aXZlKSB7CisJCQliZmFfY2JfZGVxdWV1ZSgmaW9pbS0+aGNiX3FlKTsKKwkJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPml0bmltLT5kZWxheV9jb21wX3EpOworCQl9CisJCWJmYV9pdG5pbV9pb2RvbmUoaW9pbS0+aXRuaW0pOworCX0gZWxzZQorCQliZmFfdHNraW1faW9kb25lKGlvaW0tPmlvc3AtPnRza2ltKTsKK30KKworLyoqCisgKiAJCSAgb3IgYWZ0ZXIgdGhlIGxpbmsgY29tZXMgYmFjay4KKyAqLwordm9pZAorYmZhX2lvaW1fZGVsYXllZF9jb21wKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBiZmFfYm9vbGVhbl90IGlvdG92KQoreworCS8qKgorCSAqIElmIHBhdGggdG92IHRpbWVyIGV4cGlyZWQsIGZhaWxiYWNrIHdpdGggUEFUSFRPViBzdGF0dXMgLSB0aGVzZQorCSAqIElPIHJlcXVlc3RzIGFyZSBub3Qgbm9ybWFsbHkgcmV0cmllZCBieSBJTyBzdGFjay4KKwkgKgorCSAqIE90aGVyd2lzZSBkZXZpY2UgY2FtZWJhY2sgb25saW5lIGFuZCBmYWlsIGl0IHdpdGggbm9ybWFsIGZhaWxlZAorCSAqIHN0YXR1cyBzbyB0aGF0IElPIHN0YWNrIHJldHJpZXMgdGhlc2UgZmFpbGVkIElPIHJlcXVlc3RzLgorCSAqLworCWlmIChpb3RvdikKKwkJaW9pbS0+aW9fY2JmbiA9IF9fYmZhX2NiX2lvaW1fcGF0aHRvdjsKKwllbHNlCisJCWlvaW0tPmlvX2NiZm4gPSBfX2JmYV9jYl9pb2ltX2ZhaWxlZDsKKworCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIGlvaW0tPmlvX2NiZm4sIGlvaW0pOworCisgICAgLyoqCisgICAgICogTW92ZSBJTyB0byBmY3BpbSBnbG9iYWwgcXVldWUgc2luY2UgaXRuaW0gd2lsbCBiZQorICAgICAqIGZyZWVkLgorICAgICAqLworICAgIGxpc3RfZGVsKCZpb2ltLT5xZSk7CisgICAgbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOworfQorCisKKworLyoqCisgKiAgYmZhX2lvaW1fZnJpZW5kCisgKi8KKworLyoqCisgKiBNZW1vcnkgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2F0dGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvKQoreworCXN0cnVjdCBiZmFfaW9pbV9zCQkqaW9pbTsKKwlzdHJ1Y3QgYmZhX2lvaW1fc3BfcwkqaW9zcDsKKwl1MTYJCWk7CisJdTgJCQkqc25zaW5mbzsKKwl1MzIJCXNuc2J1ZnN6OworCisJLyoqCisJICogY2xhaW0gbWVtb3J5IGZpcnN0CisJICovCisJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBiZmFfbWVtaW5mb19rdmEobWluZm8pOworCWZjcGltLT5pb2ltX2FyciA9IGlvaW07CisJYmZhX21lbWluZm9fa3ZhKG1pbmZvKSA9ICh1OCAqKSAoaW9pbSArIGZjcGltLT5udW1faW9pbV9yZXFzKTsKKworCWlvc3AgPSAoc3RydWN0IGJmYV9pb2ltX3NwX3MgKikgYmZhX21lbWluZm9fa3ZhKG1pbmZvKTsKKwlmY3BpbS0+aW9pbV9zcF9hcnIgPSBpb3NwOworCWJmYV9tZW1pbmZvX2t2YShtaW5mbykgPSAodTggKikgKGlvc3AgKyBmY3BpbS0+bnVtX2lvaW1fcmVxcyk7CisKKwkvKioKKwkgKiBDbGFpbSBETUEgbWVtb3J5IGZvciBwZXIgSU8gc2Vuc2UgZGF0YS4KKwkgKi8KKwlzbnNidWZzeiA9IGZjcGltLT5udW1faW9pbV9yZXFzICogQkZJX0lPSU1fU05TTEVOOworCWZjcGltLT5zbnNiYXNlLnBhICA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pbmZvKTsKKwliZmFfbWVtaW5mb19kbWFfcGh5cyhtaW5mbykgKz0gc25zYnVmc3o7CisKKwlmY3BpbS0+c25zYmFzZS5rdmEgPSBiZmFfbWVtaW5mb19kbWFfdmlydChtaW5mbyk7CisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWluZm8pICs9IHNuc2J1ZnN6OworCXNuc2luZm8gPSBmY3BpbS0+c25zYmFzZS5rdmE7CisJYmZhX2lvY2ZjX3NldF9zbnNiYXNlKGZjcGltLT5iZmEsIGZjcGltLT5zbnNiYXNlLnBhKTsKKworCS8qKgorCSAqIEluaXRpYWxpemUgaW9pbSBmcmVlIHF1ZXVlcworCSAqLworCUlOSVRfTElTVF9IRUFEKCZmY3BpbS0+aW9pbV9mcmVlX3EpOworCUlOSVRfTElTVF9IRUFEKCZmY3BpbS0+aW9pbV9yZXNmcmVlX3EpOworCUlOSVRfTElTVF9IRUFEKCZmY3BpbS0+aW9pbV9jb21wX3EpOworCisJZm9yIChpID0gMDsgaSA8IGZjcGltLT5udW1faW9pbV9yZXFzOworCSAgICAgaSsrLCBpb2ltKyssIGlvc3ArKywgc25zaW5mbyArPSBCRklfSU9JTV9TTlNMRU4pIHsKKwkJLyoKKwkJICogaW5pdGlhbGl6ZSBJT0lNCisJCSAqLworCQliZmFfb3NfbWVtc2V0KGlvaW0sIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2lvaW1fcykpOworCQlpb2ltLT5pb3RhZyAgID0gaTsKKwkJaW9pbS0+YmZhICAgICA9IGZjcGltLT5iZmE7CisJCWlvaW0tPmZjcGltICAgPSBmY3BpbTsKKwkJaW9pbS0+aW9zcCAgICA9IGlvc3A7CisJCWlvc3AtPnNuc2luZm8gPSBzbnNpbmZvOworCQlJTklUX0xJU1RfSEVBRCgmaW9pbS0+c2dwZ19xKTsKKwkJYmZhX3JlcXFfd2luaXQoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCwKKwkJCQkgICBiZmFfaW9pbV9xcmVzdW1lLCBpb2ltKTsKKwkJYmZhX3NncGdfd2luaXQoJmlvaW0tPmlvc3AtPnNncGdfd3FlLAorCQkJCSAgIGJmYV9pb2ltX3NncGdfYWxsb2NlZCwgaW9pbSk7CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fdW5pbml0KTsKKworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmZjcGltLT5pb2ltX2ZyZWVfcSk7CisJfQorfQorCisvKioKKyAqIERyaXZlciBkZXRhY2ggdGltZSBjYWxsLgorICovCit2b2lkCitiZmFfaW9pbV9kZXRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0pCit7Cit9CisKK3ZvaWQKK2JmYV9pb2ltX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgKnJzcCA9IChzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgKikgbTsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwl1MTYgICAgICAgIGlvdGFnOworCWVudW0gYmZhX2lvaW1fZXZlbnQgZXZ0ID0gQkZBX0lPSU1fU01fQ09NUDsKKworCWlvdGFnID0gYmZhX29zX250b2hzKHJzcC0+aW9fdGFnKTsKKworCWlvaW0gPSBCRkFfSU9JTV9GUk9NX1RBRyhmY3BpbSwgaW90YWcpOworCWJmYV9hc3NlcnQoaW9pbS0+aW90YWcgPT0gaW90YWcpOworCisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgcnNwLT5pb19zdGF0dXMpOworCWJmYV90cmMoaW9pbS0+YmZhLCByc3AtPnJldXNlX2lvX3RhZyk7CisKKwlpZiAoYmZhX3NtX2NtcF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hY3RpdmUpKQorCQliZmFfb3NfYXNzaWduKGlvaW0tPmlvc3AtPmNvbXBfcnNwbXNnLCAqbSk7CisKKwlzd2l0Y2ggKHJzcC0+aW9fc3RhdHVzKSB7CisJY2FzZSBCRklfSU9JTV9TVFNfT0s6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21wX29rKTsKKwkJaWYgKHJzcC0+cmV1c2VfaW9fdGFnID09IDApCisJCQlldnQgPSBCRkFfSU9JTV9TTV9ET05FOworCQllbHNlCisJCQlldnQgPSBCRkFfSU9JTV9TTV9DT01QOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX1RJTUVET1VUOgorCWNhc2UgQkZJX0lPSU1fU1RTX0FCT1JURUQ6CisJCXJzcC0+aW9fc3RhdHVzID0gQkZJX0lPSU1fU1RTX0FCT1JURUQ7CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21wX2Fib3J0ZWQpOworCQlpZiAocnNwLT5yZXVzZV9pb190YWcgPT0gMCkKKwkJCWV2dCA9IEJGQV9JT0lNX1NNX0RPTkU7CisJCWVsc2UKKwkJCWV2dCA9IEJGQV9JT0lNX1NNX0NPTVA7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9JTV9TVFNfUFJPVE9fRVJSOgorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tX3Byb3RvX2Vycik7CisJCWJmYV9hc3NlcnQocnNwLT5yZXVzZV9pb190YWcpOworCQlldnQgPSBCRkFfSU9JTV9TTV9DT01QOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX1NRRVJfTkVFREVEOgorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tX3NxZXJfbmVlZGVkKTsKKwkJYmZhX2Fzc2VydChyc3AtPnJldXNlX2lvX3RhZyA9PSAwKTsKKwkJZXZ0ID0gQkZBX0lPSU1fU01fU1FSRVRSWTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19SRVNfRlJFRToKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbV9yZXNfZnJlZSk7CisJCWV2dCA9IEJGQV9JT0lNX1NNX0ZSRUU7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9JTV9TVFNfSE9TVF9BQk9SVEVEOgorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tX2hvc3RhYnJ0cyk7CisJCWlmIChyc3AtPmFib3J0X3RhZyAhPSBpb2ltLT5hYm9ydF90YWcpIHsKKwkJCWJmYV90cmMoaW9pbS0+YmZhLCByc3AtPmFib3J0X3RhZyk7CisJCQliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+YWJvcnRfdGFnKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChyc3AtPnJldXNlX2lvX3RhZykKKwkJCWV2dCA9IEJGQV9JT0lNX1NNX0FCT1JUX0NPTVA7CisJCWVsc2UKKwkJCWV2dCA9IEJGQV9JT0lNX1NNX0FCT1JUX0RPTkU7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9JTV9TVFNfVVRBRzoKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbV91dGFncyk7CisJCWV2dCA9IEJGQV9JT0lNX1NNX0NPTVBfVVRBRzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KKworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIGV2dCk7Cit9CisKK3ZvaWQKK2JmYV9pb2ltX2dvb2RfY29tcF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmaV9pb2ltX3JzcF9zICpyc3AgPSAoc3RydWN0IGJmaV9pb2ltX3JzcF9zICopIG07CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJdTE2ICAgICAgICBpb3RhZzsKKworCWlvdGFnID0gYmZhX29zX250b2hzKHJzcC0+aW9fdGFnKTsKKworCWlvaW0gPSBCRkFfSU9JTV9GUk9NX1RBRyhmY3BpbSwgaW90YWcpOworCWJmYV9hc3NlcnQoaW9pbS0+aW90YWcgPT0gaW90YWcpOworCisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9DT01QX0dPT0QpOworfQorCisvKioKKyAqIENhbGxlZCBieSBpdG5pbSB0byBjbGVhbiB1cCBJTyB3aGlsZSBnb2luZyBvZmZsaW5lLgorICovCit2b2lkCitiZmFfaW9pbV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX2ZjcGltX3N0YXRzKGlvaW0tPmZjcGltLCBpb19jbGVhbnVwcyk7CisKKwlpb2ltLT5pb3NwLT50c2tpbSA9IE5VTEw7CisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fQ0xFQU5VUCk7Cit9CisKK3ZvaWQKK2JmYV9pb2ltX2NsZWFudXBfdG0oc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfZmNwaW1fc3RhdHMoaW9pbS0+ZmNwaW0sIGlvX3RtYWJvcnRzKTsKKworCWlvaW0tPmlvc3AtPnRza2ltID0gdHNraW07CisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fQ0xFQU5VUCk7Cit9CisKKy8qKgorICogSU9DIGZhaWx1cmUgaGFuZGxpbmcuCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fSFdGQUlMKTsKK30KKworLyoqCisgKiBJTyBvZmZsaW5lIFRPViBwb3BwZWQuIEZhaWwgdGhlIHBlbmRpbmcgSU8uCisgKi8KK3ZvaWQKK2JmYV9pb2ltX3RvdihzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9JT1RPVik7Cit9CisKKworCisvKioKKyAqICBiZmFfaW9pbV9hcGkKKyAqLworCisvKioKKyAqIEFsbG9jYXRlIElPSU0gcmVzb3VyY2UgZm9yIGluaXRpYXRvciBtb2RlIEkvTyByZXF1ZXN0LgorICovCitzdHJ1Y3QgYmZhX2lvaW1fcyAqCitiZmFfaW9pbV9hbGxvYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYWRfaW9pbV9zICpkaW8sCisJCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIHUxNiBuc2dlcykKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKworCS8qKgorCSAqIGFsb2NhdGUgSU9JTSByZXNvdXJjZQorCSAqLworCWJmYV9xX2RlcSgmZmNwaW0tPmlvaW1fZnJlZV9xLCAmaW9pbSk7CisJaWYgKCFpb2ltKSB7CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgbm9faW90YWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaW9pbS0+ZGlvID0gZGlvOworCWlvaW0tPml0bmltID0gaXRuaW07CisJaW9pbS0+bnNnZXMgPSBuc2dlczsKKwlpb2ltLT5uc2dwZ3MgPSAwOworCisJYmZhX3N0YXRzKGZjcGltLCB0b3RhbF9pb3MpOworCWJmYV9zdGF0cyhpdG5pbSwgaW9zKTsKKwlmY3BpbS0+aW9zX2FjdGl2ZSsrOworCisJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpdG5pbS0+aW9fcSk7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKworCXJldHVybiBpb2ltOworfQorCit2b2lkCitiZmFfaW9pbV9mcmVlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gaW9pbS0+ZmNwaW07CisKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9hc3NlcnRfZnAoYmZhX3NtX2NtcF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV91bmluaXQpKTsKKworCWJmYV9hc3NlcnRfZnAobGlzdF9lbXB0eSgmaW9pbS0+c2dwZ19xKQorCQkgICB8fCAoaW9pbS0+bnNnZXMgPiBCRklfU0dFX0lOTElORSkpOworCisJaWYgKGlvaW0tPm5zZ3BncyA+IDApCisJCWJmYV9zZ3BnX21mcmVlKGlvaW0tPmJmYSwgJmlvaW0tPnNncGdfcSwgaW9pbS0+bnNncGdzKTsKKworCWJmYV9zdGF0cyhpb2ltLT5pdG5pbSwgaW9fY29tcHMpOworCWZjcGltLT5pb3NfYWN0aXZlLS07CisKKwlsaXN0X2RlbCgmaW9pbS0+cWUpOworCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmZmNwaW0tPmlvaW1fZnJlZV9xKTsKK30KKwordm9pZAorYmZhX2lvaW1fc3RhcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9TVEFSVCk7Cit9CisKKy8qKgorICogRHJpdmVyIEkvTyBhYm9ydCByZXF1ZXN0LgorICovCit2b2lkCitiZmFfaW9pbV9hYm9ydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9mY3BpbV9zdGF0cyhpb2ltLT5mY3BpbSwgaW9fYWJvcnRzKTsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9BQk9SVCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaXRuaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2l0bmltLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1YzYxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2l0bmltLmMKQEAgLTAsMCArMSwxMDg4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfZmNwaW0uaD4KKyNpbmNsdWRlICJiZmFfZmNwaW1fcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJVE5JTSk7CisKKyNkZWZpbmUgQkZBX0lUTklNX0ZST01fVEFHKF9mY3BpbSwgX3RhZykJCQkJXAorCSgoX2ZjcGltKS0+aXRuaW1fYXJyICsgKChfdGFnKSAmICgoX2ZjcGltKS0+bnVtX2l0bmltcyAtIDEpKSkKKworI2RlZmluZSBiZmFfZmNwaW1fYWRkaXRuKF9faXRuaW0pCQkJCQlcCisJbGlzdF9hZGRfdGFpbCgmKF9faXRuaW0pLT5xZSwgJihfX2l0bmltKS0+ZmNwaW0tPml0bmltX3EpCisjZGVmaW5lIGJmYV9mY3BpbV9kZWxpdG4oX19pdG5pbSkJZG8gewkJCQlcCisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCYoX19pdG5pbSktPmZjcGltLT5pdG5pbV9xLCBfX2l0bmltKSk7ICAgICAgXAorCWxpc3RfZGVsKCYoX19pdG5pbSktPnFlKTsgICAgICBcCisJYmZhX2Fzc2VydChsaXN0X2VtcHR5KCYoX19pdG5pbSktPmlvX3EpKTsgICAgICBcCisJYmZhX2Fzc2VydChsaXN0X2VtcHR5KCYoX19pdG5pbSktPmlvX2NsZWFudXBfcSkpOyAgICAgIFwKKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJihfX2l0bmltKS0+cGVuZGluZ19xKSk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfaXRuaW1fb25saW5lX2NiKF9faXRuaW0pIGRvIHsJCQkJXAorCWlmICgoX19pdG5pbSktPmJmYS0+ZmNzKQkJCQkJXAorCQliZmFfY2JfaXRuaW1fb25saW5lKChfX2l0bmltKS0+ZGl0bik7ICAgICAgXAorCWVsc2UgewkJCQkJCQkJXAorCQliZmFfY2JfcXVldWUoKF9faXRuaW0pLT5iZmEsICYoX19pdG5pbSktPmhjYl9xZSwJXAorCQlfX2JmYV9jYl9pdG5pbV9vbmxpbmUsIChfX2l0bmltKSk7ICAgICAgXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX2l0bmltX29mZmxpbmVfY2IoX19pdG5pbSkgZG8gewkJCQlcCisJaWYgKChfX2l0bmltKS0+YmZhLT5mY3MpCQkJCQlcCisJCWJmYV9jYl9pdG5pbV9vZmZsaW5lKChfX2l0bmltKS0+ZGl0bik7ICAgICAgXAorCWVsc2UgewkJCQkJCQkJXAorCQliZmFfY2JfcXVldWUoKF9faXRuaW0pLT5iZmEsICYoX19pdG5pbSktPmhjYl9xZSwJXAorCQlfX2JmYV9jYl9pdG5pbV9vZmZsaW5lLCAoX19pdG5pbSkpOyAgICAgIFwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9pdG5pbV9zbGVyX2NiKF9faXRuaW0pIGRvIHsJCQkJCVwKKwlpZiAoKF9faXRuaW0pLT5iZmEtPmZjcykJCQkJCVwKKwkJYmZhX2NiX2l0bmltX3NsZXIoKF9faXRuaW0pLT5kaXRuKTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19pdG5pbSktPmJmYSwgJihfX2l0bmltKS0+aGNiX3FlLAlcCisJCV9fYmZhX2NiX2l0bmltX3NsZXIsIChfX2l0bmltKSk7ICAgICAgXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvY2Rpc2FibGVfY2xlYW51cChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9pdG5pbV9zZW5kX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX2l0bmltX3NlbmRfZndkZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2NsZWFucF9jb21wKHZvaWQgKml0bmltX2NiYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fY2xlYW51cChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBfX2JmYV9jYl9pdG5pbV9vbmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX2l0bmltX29mZmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX2l0bmltX3NsZXIodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9pb3Rvdl9vbmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92KHZvaWQgKml0bmltX2FyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X3N0YXJ0KHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9pb3Rvdl9zdG9wKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9pb3Rvdl9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CisKKy8qKgorICogIGJmYV9pdG5pbV9zbSBCRkEgaXRuaW0gc3RhdGUgbWFjaGluZQorICovCisKKworZW51bSBiZmFfaXRuaW1fZXZlbnQgeworCUJGQV9JVE5JTV9TTV9DUkVBVEUgPSAxLAkvKiAgaXRuaW0gaXMgY3JlYXRlZCAqLworCUJGQV9JVE5JTV9TTV9PTkxJTkUgPSAyLAkvKiAgaXRuaW0gaXMgb25saW5lICovCisJQkZBX0lUTklNX1NNX09GRkxJTkUgPSAzLAkvKiAgaXRuaW0gaXMgb2ZmbGluZSAqLworCUJGQV9JVE5JTV9TTV9GV1JTUCA9IDQsCQkvKiAgZmlybXdhcmUgcmVzcG9uc2UgKi8KKwlCRkFfSVROSU1fU01fREVMRVRFID0gNSwJLyogIGRlbGV0aW5nIGFuIGV4aXN0aW5nIGl0bmltICovCisJQkZBX0lUTklNX1NNX0NMRUFOVVAgPSA2LAkvKiAgSU8gY2xlYW51cCBjb21wbGV0aW9uICovCisJQkZBX0lUTklNX1NNX1NMRVIgPSA3LAkJLyogIHNlY29uZCBsZXZlbCBlcnJvciByZWNvdmVyeSAqLworCUJGQV9JVE5JTV9TTV9IV0ZBSUwgPSA4LAkvKiAgSU9DIGgvdyBmYWlsdXJlIGV2ZW50ICovCisJQkZBX0lUTklNX1NNX1FSRVNVTUUgPSA5LAkvKiAgcXVldWUgc3BhY2UgYXZhaWxhYmxlICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fZndjcmVhdGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfaXRuaW1fc21fZGVsZXRlX3BlbmRpbmcoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX3NsZXIoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkgICAgICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2NsZWFudXBfb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkJIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fY2xlYW51cF9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fZndkZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX29mZmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgICAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fZndjcmVhdGVfcWZ1bGwoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2Z3ZGVsZXRlX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9kZWxldGluZ19xZnVsbChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiAJCUJlZ2lubmluZy91bmFsbG9jYXRlZCBzdGF0ZSAtIG5vIGV2ZW50cyBleHBlY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV91bmluaXQoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fQ1JFQVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY3JlYXRlZCk7CisJCWl0bmltLT5pc19vbmxpbmUgPSBCRkFfRkFMU0U7CisJCWJmYV9mY3BpbV9hZGRpdG4oaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJQmVnaW5uaW5nIHN0YXRlLCBvbmx5IG9ubGluZSBldmVudCBleHBlY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9jcmVhdGVkKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX09OTElORToKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3Y3JlYXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2NyZWF0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2NyZWF0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlXYWl0aW5nIGZvciBpdG5pbSBjcmVhdGUgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9md2NyZWF0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9GV1JTUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX29ubGluZSk7CisJCWl0bmltLT5pc19vbmxpbmUgPSBCRkFfVFJVRTsKKwkJYmZhX2l0bmltX2lvdG92X29ubGluZShpdG5pbSk7CisJCWJmYV9pdG5pbV9vbmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2RlbGV0ZV9wZW5kaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9PRkZMSU5FOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndkZWxldGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3ZGVsZXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3ZGVsZXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9md2NyZWF0ZV9xZnVsbChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKTsKKwkJYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJml0bmltLT5yZXFxX3dhaXQpOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9yZXFxX3djYW5jZWwoJml0bmltLT5yZXFxX3dhaXQpOworCQliZmFfaXRuaW1fb2ZmbGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJmYV9yZXFxX3djYW5jZWwoJml0bmltLT5yZXFxX3dhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAlXYWl0aW5nIGZvciBpdG5pbSBjcmVhdGUgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZSwgYSBkZWxldGUgaXMgcGVuZGluZy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9kZWxldGVfcGVuZGluZyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0ZXUlNQOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndkZWxldGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2RlbGV0aW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2RlbGV0aW5nX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCU9ubGluZSBzdGF0ZSAtIG5vcm1hbCBwYXJraW5nIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9vZmZsaW5lKTsKKwkJaXRuaW0tPmlzX29ubGluZSA9IEJGQV9GQUxTRTsKKwkJYmZhX2l0bmltX2lvdG92X3N0YXJ0KGl0bmltKTsKKwkJYmZhX2l0bmltX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NsZWFudXBfZGVsZXRlKTsKKwkJaXRuaW0tPmlzX29ubGluZSA9IEJGQV9GQUxTRTsKKwkJYmZhX2l0bmltX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX1NMRVI6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9zbGVyKTsKKwkJaXRuaW0tPmlzX29ubGluZSA9IEJGQV9GQUxTRTsKKwkJYmZhX2l0bmltX2lvdG92X3N0YXJ0KGl0bmltKTsKKwkJYmZhX2l0bmltX3NsZXJfY2IoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfaXRuaW1faW90b3Zfc3RhcnQoaXRuaW0pOworCQliZmFfaXRuaW1faW9jZGlzYWJsZV9jbGVhbnVwKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVNlY29uZCBsZXZlbCBlcnJvciByZWNvdmVyeSBuZWVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX3NsZXIoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NsZWFudXBfb2ZmbGluZSk7CisJCWJmYV9pdG5pbV9jbGVhbnVwKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jbGVhbnVwX2RlbGV0ZSk7CisJCWJmYV9pdG5pbV9jbGVhbnVwKGl0bmltKTsKKwkJYmZhX2l0bmltX2lvdG92X2RlbGV0ZShpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJR29pbmcgb2ZmbGluZS4gV2FpdGluZyBmb3IgYWN0aXZlIElPIGNsZWFudXAuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fY2xlYW51cF9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0NMRUFOVVA6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NsZWFudXBfZGVsZXRlKTsKKwkJYmZhX2l0bmltX2lvdG92X2RlbGV0ZShpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoaXRuaW0pOworCQliZmFfaXRuaW1fb2ZmbGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fU0xFUjoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCURlbGV0aW5nIGl0bmltLiBXYWl0aW5nIGZvciBhY3RpdmUgSU8gY2xlYW51cC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9jbGVhbnVwX2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0NMRUFOVVA6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQliZmFfaXRuaW1faW9jZGlzYWJsZV9jbGVhbnVwKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBScG9ydCBvZmZsaW5lLiBGaW1yd2FyZSBpdG5pbSBpcyBiZWluZyBkZWxldGVkIC0gYXdhaXRpbmcgZi93IHJlc3BvbnNlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2Z3ZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0ZXUlNQOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9pdG5pbV9vZmZsaW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJmYV9pdG5pbV9vZmZsaW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9md2RlbGV0ZV9xZnVsbChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3ZGVsZXRlKTsKKwkJYmZhX2l0bmltX3NlbmRfZndkZWxldGUoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2RlbGV0aW5nX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJmYV9pdG5pbV9vZmZsaW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCU9mZmxpbmUgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfaXRuaW1faW90b3ZfZGVsZXRlKGl0bmltKTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fT05MSU5FOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUlPQyBoL3cgZmFpbGVkIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCSAgICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfaXRuaW1faW90b3ZfZGVsZXRlKGl0bmltKTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fT0ZGTElORToKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX09OTElORToKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3Y3JlYXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2NyZWF0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2NyZWF0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSXRuaW0gaXMgZGVsZXRlZCwgd2FpdGluZyBmb3IgZmlybXdhcmUgcmVzcG9uc2UgdG8gZGVsZXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0ZXUlNQOgorCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2RlbGV0aW5nX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmcpOworCQliZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX2l0bmltX3ByaXZhdGUKKyAqLworCisvKioKKyAqIAkJSW5pdGlhdGUgY2xlYW51cCBvZiBhbGwgSU9zIG9uIGFuIElPQyBmYWlsdXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvY2Rpc2FibGVfY2xlYW51cChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+dHNrX3EpIHsKKwkJdHNraW0gPSAoc3RydWN0IGJmYV90c2tpbV9zICopIHFlOworCQliZmFfdHNraW1faW9jZGlzYWJsZSh0c2tpbSk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+aW9fcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQliZmFfaW9pbV9pb2NkaXNhYmxlKGlvaW0pOworCX0KKworCS8qKgorCSAqIEZvciBJTyByZXF1ZXN0IGluIHBlbmRpbmcgcXVldWUsIHdlIHByZXRlbmQgYW4gZWFybHkgdGltZW91dC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5wZW5kaW5nX3EpIHsKKwkJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBxZTsKKwkJYmZhX2lvaW1fdG92KGlvaW0pOworCX0KKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPmlvX2NsZWFudXBfcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQliZmFfaW9pbV9pb2NkaXNhYmxlKGlvaW0pOworCX0KK30KKworLyoqCisgKiAJCUlPIGNsZWFudXAgY29tcGxldGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2NsZWFucF9jb21wKHZvaWQgKml0bmltX2NiYXJnKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBpdG5pbV9jYmFyZzsKKworCWJmYV9zdGF0cyhpdG5pbSwgY2xlYW51cF9jb21wcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9DTEVBTlVQKTsKK30KKworLyoqCisgKiAJCUluaXRpYXRlIGNsZWFudXAgb2YgYWxsIElPcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgICppb2ltOworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICpxZSwgKnFlbjsKKworCWJmYV93Y19pbml0KCZpdG5pbS0+d2MsIGJmYV9pdG5pbV9jbGVhbnBfY29tcCwgaXRuaW0pOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+aW9fcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCisJCS8qKgorCQkgKiBNb3ZlIElPIHRvIGEgY2xlYW51cCBxdWV1ZSBmcm9tIGFjdGl2ZSBxdWV1ZSBzbyB0aGF0IGEgbGF0ZXIKKwkJICogVE0gd2lsbCBub3QgcGlja3VwIHRoaXMgSU8uCisJCSAqLworCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJml0bmltLT5pb19jbGVhbnVwX3EpOworCisJCWJmYV93Y191cCgmaXRuaW0tPndjKTsKKwkJYmZhX2lvaW1fY2xlYW51cChpb2ltKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT50c2tfcSkgeworCQl0c2tpbSA9IChzdHJ1Y3QgYmZhX3Rza2ltX3MgKikgcWU7CisJCWJmYV93Y191cCgmaXRuaW0tPndjKTsKKwkJYmZhX3Rza2ltX2NsZWFudXAodHNraW0pOworCX0KKworCWJmYV93Y193YWl0KCZpdG5pbS0+d2MpOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaXRuaW1fb25saW5lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkKKwkJYmZhX2NiX2l0bmltX29ubGluZShpdG5pbS0+ZGl0bik7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pdG5pbV9vZmZsaW5lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkKKwkJYmZhX2NiX2l0bmltX29mZmxpbmUoaXRuaW0tPmRpdG4pOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaXRuaW1fc2xlcih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpCisJCWJmYV9jYl9pdG5pbV9zbGVyKGl0bmltLT5kaXRuKTsKK30KKworLyoqCisgKiBDYWxsIHRvIHJlc3VtZSBhbnkgSS9PIHJlcXVlc3RzIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9xcmVzdW1lKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBjYmFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fUVJFU1VNRSk7Cit9CisKKworCisKKy8qKgorICogIGJmYV9pdG5pbV9wdWJsaWMKKyAqLworCit2b2lkCitiZmFfaXRuaW1faW9kb25lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX3djX2Rvd24oJml0bmltLT53Yyk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV90c2tkb25lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX3djX2Rvd24oJml0bmltLT53Yyk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCXUzMiAqZG1fbGVuKQoreworCS8qKgorCSAqIElUTiBtZW1vcnkKKwkgKi8KKwkqa21fbGVuICs9IGNmZy0+ZndjZmcubnVtX3Jwb3J0cyAqIHNpemVvZihzdHJ1Y3QgYmZhX2l0bmltX3MpOworfQorCit2b2lkCitiZmFfaXRuaW1fYXR0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pCit7CisJc3RydWN0IGJmYV9zICAgICAgKmJmYSA9IGZjcGltLT5iZmE7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbTsKKwlpbnQgICAgICAgICAgICAgaTsKKworCUlOSVRfTElTVF9IRUFEKCZmY3BpbS0+aXRuaW1fcSk7CisKKwlpdG5pbSA9IChzdHJ1Y3QgYmZhX2l0bmltX3MgKikgYmZhX21lbWluZm9fa3ZhKG1pbmZvKTsKKwlmY3BpbS0+aXRuaW1fYXJyID0gaXRuaW07CisKKwlmb3IgKGkgPSAwOyBpIDwgZmNwaW0tPm51bV9pdG5pbXM7IGkrKywgaXRuaW0rKykgeworCQliZmFfb3NfbWVtc2V0KGl0bmltLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9pdG5pbV9zKSk7CisJCWl0bmltLT5iZmEgPSBiZmE7CisJCWl0bmltLT5mY3BpbSA9IGZjcGltOworCQlpdG5pbS0+cmVxcSA9IEJGQV9SRVFRX1FPU19MTzsKKwkJaXRuaW0tPnJwb3J0ID0gQkZBX1JQT1JUX0ZST01fVEFHKGJmYSwgaSk7CisJCWl0bmltLT5pb3Rvdl9hY3RpdmUgPSBCRkFfRkFMU0U7CisJCWJmYV9yZXFxX3dpbml0KCZpdG5pbS0+cmVxcV93YWl0LCBiZmFfaXRuaW1fcXJlc3VtZSwgaXRuaW0pOworCisJCUlOSVRfTElTVF9IRUFEKCZpdG5pbS0+aW9fcSk7CisJCUlOSVRfTElTVF9IRUFEKCZpdG5pbS0+aW9fY2xlYW51cF9xKTsKKwkJSU5JVF9MSVNUX0hFQUQoJml0bmltLT5wZW5kaW5nX3EpOworCQlJTklUX0xJU1RfSEVBRCgmaXRuaW0tPnRza19xKTsKKwkJSU5JVF9MSVNUX0hFQUQoJml0bmltLT5kZWxheV9jb21wX3EpOworCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwl9CisKKwliZmFfbWVtaW5mb19rdmEobWluZm8pID0gKHU4ICopIGl0bmltOworfQorCit2b2lkCitiZmFfaXRuaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCWJmYV9zdGF0cyhpdG5pbSwgaW9jX2Rpc2FibGVkKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX0hXRkFJTCk7Cit9CisKK3N0YXRpYyBiZmFfYm9vbGVhbl90CitiZmFfaXRuaW1fc2VuZF9md2NyZWF0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBiZmlfaXRuaW1fY3JlYXRlX3JlcV9zICptOworCisJaXRuaW0tPm1zZ19ubysrOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KGl0bmltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3JlcXFfd2FpdChpdG5pbS0+YmZhLCBpdG5pbS0+cmVxcSwgJml0bmltLT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSVROSU0sIEJGSV9JVE5JTV9IMklfQ1JFQVRFX1JFUSwKKwkJCWJmYV9scHVpZChpdG5pbS0+YmZhKSk7CisJbS0+ZndfaGFuZGxlID0gaXRuaW0tPnJwb3J0LT5md19oYW5kbGU7CisJbS0+Y2xhc3MgPSBGQ19DTEFTU18zOworCW0tPnNlcV9yZWMgPSBpdG5pbS0+c2VxX3JlYzsKKwltLT5tc2dfbm8gPSBpdG5pbS0+bXNnX25vOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKGl0bmltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3N0YXRpYyBiZmFfYm9vbGVhbl90CitiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBiZmlfaXRuaW1fZGVsZXRlX3JlcV9zICptOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KGl0bmltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3JlcXFfd2FpdChpdG5pbS0+YmZhLCBpdG5pbS0+cmVxcSwgJml0bmltLT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSVROSU0sIEJGSV9JVE5JTV9IMklfREVMRVRFX1JFUSwKKwkJCWJmYV9scHVpZChpdG5pbS0+YmZhKSk7CisJbS0+ZndfaGFuZGxlID0gaXRuaW0tPnJwb3J0LT5md19oYW5kbGU7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiBDbGVhbnVwIGFsbCBwZW5kaW5nIGZhaWxlZCBpbmZsaWdodCByZXF1ZXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9kZWxheWVkX2NvbXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgYmZhX2Jvb2xlYW5fdCBpb3RvdikKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPmRlbGF5X2NvbXBfcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopcWU7CisJCWJmYV9pb2ltX2RlbGF5ZWRfY29tcChpb2ltLCBpb3Rvdik7CisJfQorfQorCisvKioKKyAqIFN0YXJ0IGFsbCBwZW5kaW5nIElPIHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCisJYmZhX2l0bmltX2lvdG92X3N0b3AoaXRuaW0pOworCisJLyoqCisJICogQWJvcnQgYWxsIGluZmxpZ2h0IElPIHJlcXVlc3RzIGluIHRoZSBxdWV1ZQorCSAqLworCWJmYV9pdG5pbV9kZWxheWVkX2NvbXAoaXRuaW0sIEJGQV9GQUxTRSk7CisKKwkvKioKKwkgKiBTdGFydCBhbGwgcGVuZGluZyBJTyByZXF1ZXN0cy4KKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJml0bmltLT5wZW5kaW5nX3EpKSB7CisJCWJmYV9xX2RlcSgmaXRuaW0tPnBlbmRpbmdfcSwgJmlvaW0pOworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJml0bmltLT5pb19xKTsKKwkJYmZhX2lvaW1fc3RhcnQoaW9pbSk7CisJfQorfQorCisvKioKKyAqIEZhaWwgYWxsIHBlbmRpbmcgSU8gcmVxdWVzdHMKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9pb3Rvdl9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisKKwkvKioKKwkgKiBGYWlsIGFsbCBpbmZsaWdodCBJTyByZXF1ZXN0cyBpbiB0aGUgcXVldWUKKwkgKi8KKwliZmFfaXRuaW1fZGVsYXllZF9jb21wKGl0bmltLCBCRkFfVFJVRSk7CisKKwkvKioKKwkgKiBGYWlsIGFueSBwZW5kaW5nIElPIHJlcXVlc3RzLgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmaXRuaW0tPnBlbmRpbmdfcSkpIHsKKwkJYmZhX3FfZGVxKCZpdG5pbS0+cGVuZGluZ19xLCAmaW9pbSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKKwkJYmZhX2lvaW1fdG92KGlvaW0pOworCX0KK30KKworLyoqCisgKiBJTyBUT1YgdGltZXIgY2FsbGJhY2suIEZhaWwgYW55IHBlbmRpbmcgSU8gcmVxdWVzdHMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW90b3Yodm9pZCAqaXRuaW1fYXJnKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBpdG5pbV9hcmc7CisKKwlpdG5pbS0+aW90b3ZfYWN0aXZlID0gQkZBX0ZBTFNFOworCisJYmZhX2NiX2l0bmltX3Rvdl9iZWdpbihpdG5pbS0+ZGl0bik7CisJYmZhX2l0bmltX2lvdG92X2NsZWFudXAoaXRuaW0pOworCWJmYV9jYl9pdG5pbV90b3YoaXRuaW0tPmRpdG4pOworfQorCisvKioKKyAqIFN0YXJ0IElPIFRPViB0aW1lciBmb3IgZmFpbGluZyBiYWNrIHBlbmRpbmcgSU8gcmVxdWVzdHMgaW4gb2ZmbGluZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9pb3Rvdl9zdGFydChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCWlmIChpdG5pbS0+ZmNwaW0tPnBhdGhfdG92ID4gMCkgeworCisJCWl0bmltLT5pb3Rvdl9hY3RpdmUgPSBCRkFfVFJVRTsKKwkJYmZhX2Fzc2VydChiZmFfaXRuaW1faG9sZF9pbyhpdG5pbSkpOworCQliZmFfdGltZXJfc3RhcnQoaXRuaW0tPmJmYSwgJml0bmltLT50aW1lciwKKwkJCWJmYV9pdG5pbV9pb3RvdiwgaXRuaW0sIGl0bmltLT5mY3BpbS0+cGF0aF90b3YpOworCX0KK30KKworLyoqCisgKiBTdG9wIElPIFRPViB0aW1lci4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9pb3Rvdl9zdG9wKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJaWYgKGl0bmltLT5pb3Rvdl9hY3RpdmUpIHsKKwkJaXRuaW0tPmlvdG92X2FjdGl2ZSA9IEJGQV9GQUxTRTsKKwkJYmZhX3RpbWVyX3N0b3AoJml0bmltLT50aW1lcik7CisJfQorfQorCisvKioKKyAqIFN0b3AgSU8gVE9WIHRpbWVyLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworICAgIGJmYV9ib29sZWFuX3QgcGF0aHRvdl9hY3RpdmUgPSBCRkFfRkFMU0U7CisKKyAgICBpZiAoaXRuaW0tPmlvdG92X2FjdGl2ZSkKKwkJcGF0aHRvdl9hY3RpdmUgPSBCRkFfVFJVRTsKKworCWJmYV9pdG5pbV9pb3Rvdl9zdG9wKGl0bmltKTsKKwlpZiAocGF0aHRvdl9hY3RpdmUpCisJCWJmYV9jYl9pdG5pbV90b3ZfYmVnaW4oaXRuaW0tPmRpdG4pOworCWJmYV9pdG5pbV9pb3Rvdl9jbGVhbnVwKGl0bmltKTsKKwlpZiAocGF0aHRvdl9hY3RpdmUpCisJCWJmYV9jYl9pdG5pbV90b3YoaXRuaW0tPmRpdG4pOworfQorCisKKworLyoqCisgKiAgYmZhX2l0bmltX3B1YmxpYworICovCisKKy8qKgorICogCQlJdG5pbSBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4KKyAqLwordm9pZAorYmZhX2l0bmltX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwl1bmlvbiBiZmlfaXRuaW1faTJoX21zZ191IG1zZzsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOworCisJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXNnX2lkKTsKKworCW1zZy5tc2cgPSBtOworCisJc3dpdGNoIChtLT5taGRyLm1zZ19pZCkgeworCWNhc2UgQkZJX0lUTklNX0kySF9DUkVBVEVfUlNQOgorCQlpdG5pbSA9IEJGQV9JVE5JTV9GUk9NX1RBRyhmY3BpbSwKKwkJCQkJICAgICAgIG1zZy5jcmVhdGVfcnNwLT5iZmFfaGFuZGxlKTsKKwkJYmZhX2Fzc2VydChtc2cuY3JlYXRlX3JzcC0+c3RhdHVzID09IEJGQV9TVEFUVVNfT0spOworCQliZmFfc3RhdHMoaXRuaW0sIGNyZWF0ZV9jb21wcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fRldSU1ApOworCQlicmVhazsKKworCWNhc2UgQkZJX0lUTklNX0kySF9ERUxFVEVfUlNQOgorCQlpdG5pbSA9IEJGQV9JVE5JTV9GUk9NX1RBRyhmY3BpbSwKKwkJCQkJICAgICAgIG1zZy5kZWxldGVfcnNwLT5iZmFfaGFuZGxlKTsKKwkJYmZhX2Fzc2VydChtc2cuZGVsZXRlX3JzcC0+c3RhdHVzID09IEJGQV9TVEFUVVNfT0spOworCQliZmFfc3RhdHMoaXRuaW0sIGRlbGV0ZV9jb21wcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fRldSU1ApOworCQlicmVhazsKKworCWNhc2UgQkZJX0lUTklNX0kySF9TTEVSX0VWRU5UOgorCQlpdG5pbSA9IEJGQV9JVE5JTV9GUk9NX1RBRyhmY3BpbSwKKwkJCQkJICAgICAgIG1zZy5zbGVyX2V2ZW50LT5iZmFfaGFuZGxlKTsKKwkJYmZhX3N0YXRzKGl0bmltLCBzbGVyX2V2ZW50cyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fU0xFUik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXNnX2lkKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfaXRuaW1fYXBpCisgKi8KKworc3RydWN0IGJmYV9pdG5pbV9zICoKK2JmYV9pdG5pbV9jcmVhdGUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIHZvaWQgKmRpdG4pCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbTsKKworCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLCBycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfYXNzZXJ0KGl0bmltLT5ycG9ydCA9PSBycG9ydCk7CisKKwlpdG5pbS0+ZGl0biA9IGRpdG47CisKKwliZmFfc3RhdHMoaXRuaW0sIGNyZWF0ZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fQ1JFQVRFKTsKKworCXJldHVybiAoaXRuaW0pOworfQorCit2b2lkCitiZmFfaXRuaW1fZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX3N0YXRzKGl0bmltLCBkZWxldGVzKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX0RFTEVURSk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9vbmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgYmZhX2Jvb2xlYW5fdCBzZXFfcmVjKQoreworCWl0bmltLT5zZXFfcmVjID0gc2VxX3JlYzsKKwliZmFfc3RhdHMoaXRuaW0sIG9ubGluZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fT05MSU5FKTsKK30KKwordm9pZAorYmZhX2l0bmltX29mZmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfc3RhdHMoaXRuaW0sIG9mZmxpbmVzKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX09GRkxJTkUpOworfQorCisvKioKKyAqIFJldHVybiB0cnVlIGlmIGl0bmltIGlzIGNvbnNpZGVyZWQgb2ZmbGluZSBmb3IgaG9sZGluZyBvZmYgSU8gcmVxdWVzdC4KKyAqIElPIGlzIG5vdCBoZWxkIGlmIGl0bmltIGlzIGJlaW5nIGRlbGV0ZWQuCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9pdG5pbV9ob2xkX2lvKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuICgKKwkJaXRuaW0tPmZjcGltLT5wYXRoX3RvdiAmJiBpdG5pbS0+aW90b3ZfYWN0aXZlICYmCisJCShiZmFfc21fY21wX3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGUpIHx8CisJCSBiZmFfc21fY21wX3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fc2xlcikgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jbGVhbnVwX29mZmxpbmUpIHx8CisJCSBiZmFfc21fY21wX3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGUpIHx8CisJCSBiZmFfc21fY21wX3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fb2ZmbGluZSkgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKSkKKyk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9nZXRfc3RhdHMoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwlzdHJ1Y3QgYmZhX2l0bmltX2hhbF9zdGF0c19zICpzdGF0cykKK3sKKwkqc3RhdHMgPSBpdG5pbS0+c3RhdHM7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCWJmYV9vc19tZW1zZXQoJml0bmltLT5zdGF0cywgMCwgc2l6ZW9mKGl0bmltLT5zdGF0cykpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xvZy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3MzVlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xvZy5jCkBAIC0wLDAgKzEsMzQ2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9sb2cuYyBCRkEgbG9nIGxpYnJhcnkKKyAqLworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKworLyoKKyAqIGdsb2JhbCBsb2cgaW5mbyBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYV9sb2dfaW5mb19zIHsKKwl1MzIgICAgICAgIHN0YXJ0X2lkeDsJLyogIHN0YXJ0IGluZGV4IGZvciBhIG1vZHVsZSAqLworCXUzMiAgICAgICAgdG90YWxfY291bnQ7CS8qICB0b3RhbCBjb3VudCBmb3IgYSBtb2R1bGUgKi8KKwllbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbGV2ZWw7CS8qICBnbG9iYWwgbG9nIGxldmVsICovCisJYmZhX2xvZ19jYl90CWNiZm47CQkvKiAgY2FsbGJhY2sgZnVuY3Rpb24gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX2xvZ19pbmZvX3MgYmZhX2xvZ19pbmZvW0JGQV9MT0dfTU9EVUxFX0lEX01BWCArIDFdOworc3RhdGljIHUzMiBiZmFfbG9nX21zZ190b3RhbF9jb3VudDsKK3N0YXRpYyBpbnQgICAgICBiZmFfbG9nX2luaXRpYWxpemVkOworCitzdGF0aWMgY2hhciAgICAqYmZhX2xvZ19zZXZlcml0eVtdID0KKwl7ICJbbm9uZV0iLCAiW2NyaXRpY2FsXSIsICJbZXJyb3JdIiwgIlt3YXJuXSIsICJbaW5mb10iLCAiIiB9OworCisvKioKKyAqIEJGQSBsb2cgbGlicmFyeSBpbml0aWFsaXphdGlvbgorICoKKyAqIFRoZSBsb2cgbGlicmFyeSBpbml0aWFsaXphdGlvbiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nLAorICogICAgLSBzZXQgbG9nIGluc3RhbmNlIG5hbWUgYW5kIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiAgICAtIHJlYWQgdGhlIG1lc3NhZ2UgYXJyYXkgZ2VuZXJhdGVkIGZyb20geG1sIGZpbGVzCisgKiAgICAtIGNhbGN1bGF0ZSBzdGFydCBpbmRleCBmb3IgZWFjaCBtb2R1bGUKKyAqICAgIC0gY2FsY3VsYXRlIG1lc3NhZ2UgY291bnQgZm9yIGVhY2ggbW9kdWxlCisgKiAgICAtIHBlcmZvcm0gZXJyb3IgY2hlY2tpbmcKKyAqCisgKiBAcGFyYW1baW5dIGxvZ19tb2QgLSBsb2cgbW9kdWxlIGluZm8KKyAqIEBwYXJhbVtpbl0gaW5zdGFuY2VfbmFtZSAtIGluc3RhbmNlIG5hbWUKKyAqIEBwYXJhbVtpbl0gY2JmbiAtIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogSXQgcmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgLTEgb24gZmFpbHVyZQorICovCitpbnQKK2JmYV9sb2dfaW5pdChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgY2hhciAqaW5zdGFuY2VfbmFtZSwKKwkJCWJmYV9sb2dfY2JfdCBjYmZuKQoreworCXN0cnVjdCBiZmFfbG9nX21zZ2RlZl9zICptc2c7CisJdTMyICAgICAgICBwcmVfbW9kX2lkID0gMDsKKwl1MzIgICAgICAgIGN1cl9tb2RfaWQgPSAwOworCXUzMiAgICAgICAgaSwgcHJlX2lkeCwgaWR4LCBtc2dfaWQ7CisKKwkvKgorCSAqIHNldCBpbnN0YW5jZSBuYW1lCisJICovCisJaWYgKGxvZ19tb2QpIHsKKwkJc3RybmNweShsb2dfbW9kLT5pbnN0YW5jZV9pbmZvLCBpbnN0YW5jZV9uYW1lLAorCQkJc2l6ZW9mKGxvZ19tb2QtPmluc3RhbmNlX2luZm8pKTsKKwkJbG9nX21vZC0+Y2JmbiA9IGNiZm47CisJCWZvciAoaSA9IDA7IGkgPD0gQkZBX0xPR19NT0RVTEVfSURfTUFYOyBpKyspCisJCQlsb2dfbW9kLT5sb2dfbGV2ZWxbaV0gPSBCRkFfTE9HX1dBUk5JTkc7CisJfQorCisJaWYgKGJmYV9sb2dfaW5pdGlhbGl6ZWQpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8PSBCRkFfTE9HX01PRFVMRV9JRF9NQVg7IGkrKykgeworCQliZmFfbG9nX2luZm9baV0uc3RhcnRfaWR4ID0gMDsKKwkJYmZhX2xvZ19pbmZvW2ldLnRvdGFsX2NvdW50ID0gMDsKKwkJYmZhX2xvZ19pbmZvW2ldLmxldmVsID0gQkZBX0xPR19XQVJOSU5HOworCQliZmFfbG9nX2luZm9baV0uY2JmbiA9IGNiZm47CisJfQorCisJcHJlX2lkeCA9IDA7CisJaWR4ID0gMDsKKwltc2cgPSBiZmFfbG9nX21zZ19hcnJheTsKKwltc2dfaWQgPSBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKTsKKwlwcmVfbW9kX2lkID0gQkZBX0xPR19HRVRfTU9EX0lEKG1zZ19pZCk7CisJd2hpbGUgKG1zZ19pZCAhPSAwKSB7CisJCWN1cl9tb2RfaWQgPSBCRkFfTE9HX0dFVF9NT0RfSUQobXNnX2lkKTsKKworCQlpZiAoY3VyX21vZF9pZCA+IEJGQV9MT0dfTU9EVUxFX0lEX01BWCkgeworCQkJY2Jmbihsb2dfbW9kLCBtc2dfaWQsCisJCQkJIiVzJXMgbG9nOiBtb2R1bGUgaWQgJXUgb3V0IG9mIHJhbmdlXG4iLAorCQkJCUJGQV9MT0dfQ0FUX05BTUUsCisJCQkJYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0VSUk9SXSwKKwkJCQljdXJfbW9kX2lkKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChwcmVfbW9kX2lkID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKSB7CisJCQljYmZuKGxvZ19tb2QsIG1zZ19pZCwKKwkJCQkiJXMlcyBsb2c6IG1vZHVsZSBpZCAldSBvdXQgb2YgcmFuZ2VcbiIsCisJCQkJQkZBX0xPR19DQVRfTkFNRSwKKwkJCQliZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLAorCQkJCXByZV9tb2RfaWQpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGN1cl9tb2RfaWQgIT0gcHJlX21vZF9pZCkgeworCQkJYmZhX2xvZ19pbmZvW3ByZV9tb2RfaWRdLnN0YXJ0X2lkeCA9IHByZV9pZHg7CisJCQliZmFfbG9nX2luZm9bcHJlX21vZF9pZF0udG90YWxfY291bnQgPSBpZHggLSBwcmVfaWR4OworCQkJcHJlX21vZF9pZCA9IGN1cl9tb2RfaWQ7CisJCQlwcmVfaWR4ID0gaWR4OworCQl9CisKKwkJaWR4Kys7CisJCW1zZysrOworCQltc2dfaWQgPSBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKTsKKwl9CisKKwliZmFfbG9nX2luZm9bY3VyX21vZF9pZF0uc3RhcnRfaWR4ID0gcHJlX2lkeDsKKwliZmFfbG9nX2luZm9bY3VyX21vZF9pZF0udG90YWxfY291bnQgPSBpZHggLSBwcmVfaWR4OworCWJmYV9sb2dfbXNnX3RvdGFsX2NvdW50ID0gaWR4OworCisJY2Jmbihsb2dfbW9kLCBtc2dfaWQsICIlcyVzIGxvZzogaW5pdCBPSywgbXNnIHRvdGFsIGNvdW50ICV1XG4iLAorCQlCRkFfTE9HX0NBVF9OQU1FLAorCQliZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfSU5GT10sIGJmYV9sb2dfbXNnX3RvdGFsX2NvdW50KTsKKworCWJmYV9sb2dfaW5pdGlhbGl6ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQkZBIGxvZyBzZXQgbG9nIGxldmVsIGZvciBhIG1vZHVsZQorICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBtb2RfaWQgLSBtb2R1bGUgaWQKKyAqIEBwYXJhbVtpbl0gbG9nX2xldmVsIC0gbG9nIHNldmVyaXR5IGxldmVsCisgKgorICogSXQgcmV0dXJuIEJGQV9TVEFUVVNfT0sgb24gc3VjY2Vzcywgb3IgPiAwIG9uIGZhaWx1cmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfbG9nX3NldF9sZXZlbChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgaW50IG1vZF9pZCwKKwkJICBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbG9nX2xldmVsKQoreworCWlmIChtb2RfaWQgPD0gQkZBX0xPR19VTlVTRURfSUQgfHwgbW9kX2lkID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FSU5WQUw7CisKKwlpZiAobG9nX2xldmVsIDw9IEJGQV9MT0dfSU5WQUxJRCB8fCBsb2dfbGV2ZWwgPiBCRkFfTE9HX0xFVkVMX01BWCkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRUlOVkFMOworCisJaWYgKGxvZ19tb2QpCisJCWxvZ19tb2QtPmxvZ19sZXZlbFttb2RfaWRdID0gbG9nX2xldmVsOworCWVsc2UKKwkJYmZhX2xvZ19pbmZvW21vZF9pZF0ubGV2ZWwgPSBsb2dfbGV2ZWw7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBCRkEgbG9nIHNldCBsb2cgbGV2ZWwgZm9yIGFsbCBtb2R1bGVzCisgKgorICogQHBhcmFtW2luXSBsb2dfbW9kIC0gbG9nIG1vZHVsZSBpbmZvCisgKiBAcGFyYW1baW5dIGxvZ19sZXZlbCAtIGxvZyBzZXZlcml0eSBsZXZlbAorICoKKyAqIEl0IHJldHVybiBCRkFfU1RBVFVTX09LIG9uIHN1Y2Nlc3MsIG9yID4gMCBvbiBmYWlsdXJlCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2xvZ19zZXRfbGV2ZWxfYWxsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLAorCQkgIGVudW0gYmZhX2xvZ19zZXZlcml0eSBsb2dfbGV2ZWwpCit7CisJaW50IG1vZF9pZCA9IEJGQV9MT0dfVU5VU0VEX0lEICsgMTsKKworCWlmIChsb2dfbGV2ZWwgPD0gQkZBX0xPR19JTlZBTElEIHx8IGxvZ19sZXZlbCA+IEJGQV9MT0dfTEVWRUxfTUFYKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FSU5WQUw7CisKKwlpZiAobG9nX21vZCkgeworCQlmb3IgKDsgbW9kX2lkIDw9IEJGQV9MT0dfTU9EVUxFX0lEX01BWDsgbW9kX2lkKyspCisJCQlsb2dfbW9kLT5sb2dfbGV2ZWxbbW9kX2lkXSA9IGxvZ19sZXZlbDsKKwl9IGVsc2UgeworCQlmb3IgKDsgbW9kX2lkIDw9IEJGQV9MT0dfTU9EVUxFX0lEX01BWDsgbW9kX2lkKyspCisJCQliZmFfbG9nX2luZm9bbW9kX2lkXS5sZXZlbCA9IGxvZ19sZXZlbDsKKwl9CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBCRkEgbG9nIHNldCBsb2cgbGV2ZWwgZm9yIGFsbCBhZW4gc3ViLW1vZHVsZXMKKyAqCisgKiBAcGFyYW1baW5dIGxvZ19tb2QgLSBsb2cgbW9kdWxlIGluZm8KKyAqIEBwYXJhbVtpbl0gbG9nX2xldmVsIC0gbG9nIHNldmVyaXR5IGxldmVsCisgKgorICogSXQgcmV0dXJuIEJGQV9TVEFUVVNfT0sgb24gc3VjY2Vzcywgb3IgPiAwIG9uIGZhaWx1cmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfbG9nX3NldF9sZXZlbF9hZW4oc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCSAgZW51bSBiZmFfbG9nX3NldmVyaXR5IGxvZ19sZXZlbCkKK3sKKwlpbnQgbW9kX2lkID0gQkZBX0xPR19BRU5fTUlOICsgMTsKKworCWlmIChsb2dfbW9kKSB7CisJCWZvciAoOyBtb2RfaWQgPD0gQkZBX0xPR19BRU5fTUFYOyBtb2RfaWQrKykKKwkJCWxvZ19tb2QtPmxvZ19sZXZlbFttb2RfaWRdID0gbG9nX2xldmVsOworCX0gZWxzZSB7CisJCWZvciAoOyBtb2RfaWQgPD0gQkZBX0xPR19BRU5fTUFYOyBtb2RfaWQrKykKKwkJCWJmYV9sb2dfaW5mb1ttb2RfaWRdLmxldmVsID0gbG9nX2xldmVsOworCX0KKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIEJGQSBsb2cgZ2V0IGxvZyBsZXZlbCBmb3IgYSBtb2R1bGUKKyAqCisgKiBAcGFyYW1baW5dIGxvZ19tb2QgLSBsb2cgbW9kdWxlIGluZm8KKyAqIEBwYXJhbVtpbl0gbW9kX2lkIC0gbW9kdWxlIGlkCisgKgorICogSXQgcmV0dXJucyBsb2cgbGV2ZWwgb3IgLTEgb24gZXJyb3IKKyAqLworZW51bSBiZmFfbG9nX3NldmVyaXR5CitiZmFfbG9nX2dldF9sZXZlbChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgaW50IG1vZF9pZCkKK3sKKwlpZiAobW9kX2lkIDw9IEJGQV9MT0dfVU5VU0VEX0lEIHx8IG1vZF9pZCA+IEJGQV9MT0dfTU9EVUxFX0lEX01BWCkKKwkJcmV0dXJuIEJGQV9MT0dfSU5WQUxJRDsKKworCWlmIChsb2dfbW9kKQorCQlyZXR1cm4gKGxvZ19tb2QtPmxvZ19sZXZlbFttb2RfaWRdKTsKKwllbHNlCisJCXJldHVybiAoYmZhX2xvZ19pbmZvW21vZF9pZF0ubGV2ZWwpOworfQorCitlbnVtIGJmYV9sb2dfc2V2ZXJpdHkKK2JmYV9sb2dfZ2V0X21zZ19sZXZlbChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCkKK3sKKwlzdHJ1Y3QgYmZhX2xvZ19tc2dkZWZfcyAqbXNnOworCXUzMiAgICAgICAgbW9kID0gQkZBX0xPR19HRVRfTU9EX0lEKG1zZ19pZCk7CisJdTMyICAgICAgICBpZHggPSBCRkFfTE9HX0dFVF9NU0dfSURYKG1zZ19pZCkgLSAxOworCisJaWYgKCFiZmFfbG9nX2luaXRpYWxpemVkKQorCQlyZXR1cm4gQkZBX0xPR19JTlZBTElEOworCisJaWYgKG1vZCA+IEJGQV9MT0dfTU9EVUxFX0lEX01BWCkKKwkJcmV0dXJuIEJGQV9MT0dfSU5WQUxJRDsKKworCWlmIChpZHggPj0gYmZhX2xvZ19pbmZvW21vZF0udG90YWxfY291bnQpIHsKKwkJYmZhX2xvZ19pbmZvW21vZF0uY2Jmbihsb2dfbW9kLCBtc2dfaWQsCisJCQkiJXMlcyBsb2c6IGluY29uc2lzdGVudCBpZHggJXUgdnMuIHRvdGFsIGNvdW50ICV1XG4iLAorCQkJQkZBX0xPR19DQVRfTkFNRSwgYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0VSUk9SXSwgaWR4LAorCQkJYmZhX2xvZ19pbmZvW21vZF0udG90YWxfY291bnQpOworCQlyZXR1cm4gQkZBX0xPR19JTlZBTElEOworCX0KKworCW1zZyA9IGJmYV9sb2dfbXNnX2FycmF5ICsgYmZhX2xvZ19pbmZvW21vZF0uc3RhcnRfaWR4ICsgaWR4OworCWlmIChtc2dfaWQgIT0gQkZBX0xPR19HRVRfTVNHX0lEKG1zZykpIHsKKwkJYmZhX2xvZ19pbmZvW21vZF0uY2Jmbihsb2dfbW9kLCBtc2dfaWQsCisJCQkiJXMlcyBsb2c6IGluY29uc2lzdGVudCBtc2cgaWQgJXUgYXJyYXkgbXNnIGlkICV1XG4iLAorCQkJQkZBX0xPR19DQVRfTkFNRSwgYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0VSUk9SXSwKKwkJCW1zZ19pZCwgQkZBX0xPR19HRVRfTVNHX0lEKG1zZykpOworCQlyZXR1cm4gQkZBX0xPR19JTlZBTElEOworCX0KKworCXJldHVybiBCRkFfTE9HX0dFVF9TRVZFUklUWShtc2cpOworfQorCisvKioKKyAqIEJGQSBsb2cgbWVzc2FnZSBoYW5kbGluZworICoKKyAqIEJGQSBsb2cgbWVzc2FnZSBoYW5kbGluZyBmaW5kcyB0aGUgbWVzc2FnZSBiYXNlZCBvbiBtZXNzYWdlIGlkIGFuZCBwcmludHMKKyAqIG91dCB0aGUgbWVzc2FnZSBiYXNlZCBvbiBpdHMgZm9ybWF0IGFuZCBhcmd1bWVudHMuIEl0IGFsc28gZG9lcyBwcmVmaXgKKyAqIHRoZSBzZXZlcml0eSBldGMuCisgKgorICogQHBhcmFtW2luXSBsb2dfbW9kIC0gbG9nIG1vZHVsZSBpbmZvCisgKiBAcGFyYW1baW5dIG1zZ19pZCAtIG1lc3NhZ2UgaWQKKyAqIEBwYXJhbVtpbl0gLi4uIC0gbWVzc2FnZSBhcmd1bWVudHMKKyAqCisgKiBJdCByZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBlcnJvcnMKKyAqLworaW50CitiZmFfbG9nKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCB1MzIgbXNnX2lkLCAuLi4pCit7CisJdmFfbGlzdCAgICAgICAgIGFwOworCWNoYXIgICAgICAgICAgICBidWZbMjU2XTsKKwlzdHJ1Y3QgYmZhX2xvZ19tc2dkZWZfcyAqbXNnOworCWludCAgICAgICAgICAgICBsb2dfbGV2ZWw7CisJdTMyICAgICAgICBtb2QgPSBCRkFfTE9HX0dFVF9NT0RfSUQobXNnX2lkKTsKKwl1MzIgICAgICAgIGlkeCA9IEJGQV9MT0dfR0VUX01TR19JRFgobXNnX2lkKSAtIDE7CisKKwlpZiAoIWJmYV9sb2dfaW5pdGlhbGl6ZWQpCisJCXJldHVybiAtMTsKKworCWlmIChtb2QgPiBCRkFfTE9HX01PRFVMRV9JRF9NQVgpCisJCXJldHVybiAtMTsKKworCWlmIChpZHggPj0gYmZhX2xvZ19pbmZvW21vZF0udG90YWxfY291bnQpIHsKKwkJYmZhX2xvZ19pbmZvW21vZF0uCisJCQljYmZuCisJCQkobG9nX21vZCwgbXNnX2lkLAorCQkJIiVzJXMgbG9nOiBpbmNvbnNpc3RlbnQgaWR4ICV1IHZzLiB0b3RhbCBjb3VudCAldVxuIiwKKwkJCUJGQV9MT0dfQ0FUX05BTUUsIGJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19FUlJPUl0sIGlkeCwKKwkJCWJmYV9sb2dfaW5mb1ttb2RdLnRvdGFsX2NvdW50KTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1zZyA9IGJmYV9sb2dfbXNnX2FycmF5ICsgYmZhX2xvZ19pbmZvW21vZF0uc3RhcnRfaWR4ICsgaWR4OworCWlmIChtc2dfaWQgIT0gQkZBX0xPR19HRVRfTVNHX0lEKG1zZykpIHsKKwkJYmZhX2xvZ19pbmZvW21vZF0uCisJCQljYmZuCisJCQkobG9nX21vZCwgbXNnX2lkLAorCQkJIiVzJXMgbG9nOiBpbmNvbnNpc3RlbnQgbXNnIGlkICV1IGFycmF5IG1zZyBpZCAldVxuIiwKKwkJCUJGQV9MT0dfQ0FUX05BTUUsIGJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19FUlJPUl0sCisJCQltc2dfaWQsIEJGQV9MT0dfR0VUX01TR19JRChtc2cpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWxvZ19sZXZlbCA9IGxvZ19tb2QgPyBsb2dfbW9kLT5sb2dfbGV2ZWxbbW9kXSA6IGJmYV9sb2dfaW5mb1ttb2RdLmxldmVsOworCWlmICgoQkZBX0xPR19HRVRfU0VWRVJJVFkobXNnKSA+IGxvZ19sZXZlbCkgJiYKKwkJCShtc2ctPmF0dHJpYnV0ZXMgIT0gQkZBX0xPR19BVFRSX05PTkUpKQorCQlyZXR1cm4gMDsKKworCXZhX3N0YXJ0KGFwLCBtc2dfaWQpOworCWJmYV9vc192c3ByaW50ZihidWYsIEJGQV9MT0dfR0VUX01TR19GTVRfU1RSSU5HKG1zZyksIGFwKTsKKwl2YV9lbmQoYXApOworCisJaWYgKGxvZ19tb2QpCisJCWxvZ19tb2QtPmNiZm4obG9nX21vZCwgbXNnX2lkLCAiJXNbJXNdJXMlcyAlczogJXNcbiIsCisJCQkJQkZBX0xPR19DQVRfTkFNRSwgbG9nX21vZC0+aW5zdGFuY2VfaW5mbywKKwkJCQliZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfR0VUX1NFVkVSSVRZKG1zZyldLAorCQkJCShtc2ctPmF0dHJpYnV0ZXMgJiBCRkFfTE9HX0FUVFJfQVVESVQpCisJCQkJPyAiIChhdWRpdCkgIiA6ICIiLCBtc2ctPm1zZ192YWx1ZSwgYnVmKTsKKwllbHNlCisJCWJmYV9sb2dfaW5mb1ttb2RdLmNiZm4obG9nX21vZCwgbXNnX2lkLCAiJXMlcyVzICVzOiAlc1xuIiwKKwkJCQlCRkFfTE9HX0NBVF9OQU1FLAorCQkJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19HRVRfU0VWRVJJVFkobXNnKV0sCisJCQkJKG1zZy0+YXR0cmlidXRlcyAmIEJGQV9MT0dfQVRUUl9BVURJVCkgPworCQkJCSIgKGF1ZGl0KSAiIDogIiIsIG1zZy0+bXNnX3ZhbHVlLCBidWYpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xvZ19tb2R1bGUuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xvZ19tb2R1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzE1NGQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nX21vZHVsZS5jCkBAIC0wLDAgKzEsNDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fYWRhcHRlci5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2F1ZGl0Lmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fZXRocG9ydC5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2lvYy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2l0bmltLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fbHBvcnQuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9wb3J0Lmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fcnBvcnQuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19mY3MuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19oYWwuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19saW51eC5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX3dkcnYuaD4KKworc3RydWN0IGJmYV9sb2dfbXNnZGVmX3MgYmZhX2xvZ19tc2dfYXJyYXlbXSA9IHsKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0FEQVBURVIgTW9kdWxlICovCit7QkZBX0FFTl9BREFQVEVSX0FERCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fQURBUFRFUl9BREQiLAorICJOZXcgYWRhcHRlciBmb3VuZDogU04gPSAlcywgYmFzZSBwb3J0IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fQURBUFRFUl9SRU1PVkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX0FEQVBURVJfUkVNT1ZFIiwKKyAiQWRhcHRlciByZW1vdmVkOiBTTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9BVURJVCBNb2R1bGUgKi8KK3tCRkFfQUVOX0FVRElUX0FVVEhfRU5BQkxFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiQkZBX0FFTl9BVURJVF9BVVRIX0VOQUJMRSIsCisgIkF1dGhlbnRpY2F0aW9uIGVuYWJsZWQgZm9yIGJhc2UgcG9ydDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9BVURJVF9BVVRIX0RJU0FCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJCRkFfQUVOX0FVRElUX0FVVEhfRElTQUJMRSIsCisgIkF1dGhlbnRpY2F0aW9uIGRpc2FibGVkIGZvciBiYXNlIHBvcnQ6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9FVEhQT1JUIE1vZHVsZSAqLwore0JGQV9BRU5fRVRIUE9SVF9MSU5LVVAsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0VUSFBPUlRfTElOS1VQIiwKKyAiQmFzZSBwb3J0IGV0aGVybmV0IGxpbmt1cDogbWFjID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9FVEhQT1JUX0xJTktET1dOLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9FVEhQT1JUX0xJTktET1dOIiwKKyAiQmFzZSBwb3J0IGV0aGVybmV0IGxpbmtkb3duOiBtYWMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0VUSFBPUlRfRU5BQkxFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9FVEhQT1JUX0VOQUJMRSIsCisgIkJhc2UgcG9ydCBldGhlcm5ldCBpbnRlcmZhY2UgZW5hYmxlZDogbWFjID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9FVEhQT1JUX0RJU0FCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0VUSFBPUlRfRElTQUJMRSIsCisgIkJhc2UgcG9ydCBldGhlcm5ldCBpbnRlcmZhY2UgZGlzYWJsZWQ6IG1hYyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9JT0MgTW9kdWxlICovCit7QkZBX0FFTl9JT0NfSEJHT09ELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9JT0NfSEJHT09EIiwKKyAiSGVhcnQgQmVhdCBvZiBJT0MgJWQgaXMgZ29vZC4iLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0lPQ19IQkZBSUwsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19DUklUSUNBTCwKKyAiQkZBX0FFTl9JT0NfSEJGQUlMIiwKKyAiSGVhcnQgQmVhdCBvZiBJT0MgJWQgaGFzIGZhaWxlZC4iLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0lPQ19FTkFCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0lPQ19FTkFCTEUiLAorICJJT0MgJWQgaXMgZW5hYmxlZC4iLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0lPQ19ESVNBQkxFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9JT0NfRElTQUJMRSIsCisgIklPQyAlZCBpcyBkaXNhYmxlZC4iLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0lPQ19GV01JU01BVENILCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19DUklUSUNBTCwgIkJGQV9BRU5fSU9DX0ZXTUlTTUFUQ0giLAorICJSdW5uaW5nIGZpcm13YXJlIHZlcnNpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIGRyaXZlciB2ZXJzaW9uLiIsCisgKDApLCAwfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9JVE5JTSBNb2R1bGUgKi8KK3tCRkFfQUVOX0lUTklNX09OTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fSVROSU1fT05MSU5FIiwKKyAiVGFyZ2V0IChXV04gPSAlcykgaXMgb25saW5lIGZvciBpbml0aWF0b3IgKFdXTiA9ICVzKS4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0lUTklNX09GRkxJTkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0lUTklNX09GRkxJTkUiLAorICJUYXJnZXQgKFdXTiA9ICVzKSBvZmZsaW5lZCBieSBpbml0aWF0b3IgKFdXTiA9ICVzKS4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0lUTklNX0RJU0NPTk5FQ1QsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0VSUk9SLCAiQkZBX0FFTl9JVE5JTV9ESVNDT05ORUNUIiwKKyAiVGFyZ2V0IChXV04gPSAlcykgY29ubmVjdGl2aXR5IGxvc3QgZm9yIGluaXRpYXRvciAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9MUE9SVCBNb2R1bGUgKi8KK3tCRkFfQUVOX0xQT1JUX05FVywgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fTFBPUlRfTkVXIiwKKyAiTmV3IGxvZ2ljYWwgcG9ydCBjcmVhdGVkOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfREVMRVRFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9MUE9SVF9ERUxFVEUiLAorICJMb2dpY2FsIHBvcnQgZGVsZXRlZDogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX09OTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fTFBPUlRfT05MSU5FIiwKKyAiTG9naWNhbCBwb3J0IG9ubGluZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX09GRkxJTkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0xQT1JUX09GRkxJTkUiLAorICJMb2dpY2FsIHBvcnQgdGFrZW4gb2ZmbGluZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX0RJU0NPTk5FQ1QsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0VSUk9SLCAiQkZBX0FFTl9MUE9SVF9ESVNDT05ORUNUIiwKKyAiTG9naWNhbCBwb3J0IGxvc3QgZmFicmljIGNvbm5lY3Rpdml0eTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX05FV19QUk9QLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9MUE9SVF9ORVdfUFJPUCIsCisgIk5ldyB2aXJ0dWFsIHBvcnQgY3JlYXRlZCB1c2luZyBwcm9wcmlldGFyeSBpbnRlcmZhY2U6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9ERUxFVEVfUFJPUCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fTFBPUlRfREVMRVRFX1BST1AiLAorICJWaXJ0dWFsIHBvcnQgZGVsZXRlZCB1c2luZyBwcm9wcmlldGFyeSBpbnRlcmZhY2U6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9ORVdfU1RBTkRBUkQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJCRkFfQUVOX0xQT1JUX05FV19TVEFOREFSRCIsCisgIk5ldyB2aXJ0dWFsIHBvcnQgY3JlYXRlZCB1c2luZyBzdGFuZGFyZCBpbnRlcmZhY2U6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9ERUxFVEVfU1RBTkRBUkQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJCRkFfQUVOX0xQT1JUX0RFTEVURV9TVEFOREFSRCIsCisgIlZpcnR1YWwgcG9ydCBkZWxldGVkIHVzaW5nIHN0YW5kYXJkIGludGVyZmFjZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX05QSVZfRFVQX1dXTiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfV0FSTklORywgIkJGQV9BRU5fTFBPUlRfTlBJVl9EVVBfV1dOIiwKKyAiVmlydHVhbCBwb3J0IGxvZ2luIGZhaWxlZC4gRHVwbGljYXRlIFdXTiA9ICVzIHJlcG9ydGVkIGJ5IGZhYnJpYy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0xQT1JUX05QSVZfRkFCUklDX01BWCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfV0FSTklORywgIkJGQV9BRU5fTFBPUlRfTlBJVl9GQUJSSUNfTUFYIiwKKyAiVmlydHVhbCBwb3J0IChXV04gPSAlcykgbG9naW4gZmFpbGVkLiBNYXggTlBJViBwb3J0cyBhbHJlYWR5IGV4aXN0IGluIgorICIgZmFicmljL2Zwb3J0LiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fTFBPUlRfTlBJVl9VTktOT1dOLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9MUE9SVF9OUElWX1VOS05PV04iLAorICJWaXJ0dWFsIHBvcnQgKFdXTiA9ICVzKSBsb2dpbiBmYWlsZWQuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX1BPUlQgTW9kdWxlICovCit7QkZBX0FFTl9QT1JUX09OTElORSwgQkZBX0xPR19BVFRSX05PTkUsIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fUE9SVF9PTkxJTkUiLAorICJCYXNlIHBvcnQgb25saW5lOiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX1dBUk5JTkcsCisgIkJGQV9BRU5fUE9SVF9PRkZMSU5FIiwKKyAiQmFzZSBwb3J0IG9mZmxpbmU6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9STElSLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9QT1JUX1JMSVIiLAorICJSTElSIGV2ZW50IG5vdCBzdXBwb3J0ZWQuIiwKKyAoMCksIDB9LAorCit7QkZBX0FFTl9QT1JUX1NGUF9JTlNFUlQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfU0ZQX0lOU0VSVCIsCisgIk5ldyBTRlAgZm91bmQ6IFdXTi9NQUMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfU0ZQX1JFTU9WRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfV0FSTklORywgIkJGQV9BRU5fUE9SVF9TRlBfUkVNT1ZFIiwKKyAiU0ZQIHJlbW92ZWQ6IFdXTi9NQUMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfU0ZQX1BPTSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX1dBUk5JTkcsCisgIkJGQV9BRU5fUE9SVF9TRlBfUE9NIiwKKyAiU0ZQIFBPTSBsZXZlbCB0byAlczogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUE9SVF9FTkFCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfRU5BQkxFIiwKKyAiQmFzZSBwb3J0IGVuYWJsZWQ6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9ESVNBQkxFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9QT1JUX0RJU0FCTEUiLAorICJCYXNlIHBvcnQgZGlzYWJsZWQ6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9BVVRIX09OLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9QT1JUX0FVVEhfT04iLAorICJBdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsIGZvciBiYXNlIHBvcnQ6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9BVVRIX09GRiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0VSUk9SLAorICJCRkFfQUVOX1BPUlRfQVVUSF9PRkYiLAorICJBdXRoZW50aWNhdGlvbiB1bnN1Y2Nlc3NmdWwgZm9yIGJhc2UgcG9ydDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0RJU0NPTk5FQ1QsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19FUlJPUiwKKyAiQkZBX0FFTl9QT1JUX0RJU0NPTk5FQ1QiLAorICJCYXNlIHBvcnQgKFdXTiA9ICVzKSBsb3N0IGZhYnJpYyBjb25uZWN0aXZpdHkuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX1FPU19ORUcsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19XQVJOSU5HLAorICJCRkFfQUVOX1BPUlRfUU9TX05FRyIsCisgIlFPUyBuZWdvdGlhdGlvbiBmYWlsZWQgZm9yIGJhc2UgcG9ydDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0ZBQlJJQ19OQU1FX0NIQU5HRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfV0FSTklORywgIkJGQV9BRU5fUE9SVF9GQUJSSUNfTkFNRV9DSEFOR0UiLAorICJCYXNlIHBvcnQgV1dOID0gJXMsIEZhYnJpYyBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX1BPUlRfU0ZQX0FDQ0VTU19FUlJPUiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfV0FSTklORywgIkJGQV9BRU5fUE9SVF9TRlBfQUNDRVNTX0VSUk9SIiwKKyAiU0ZQIGFjY2VzcyBlcnJvcjogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfVU5TVVBQT1JULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9QT1JUX1NGUF9VTlNVUFBPUlQiLAorICJVbnN1cHBvcnRlZCBTRlAgZm91bmQ6IFdXTi9NQUMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfUlBPUlQgTW9kdWxlICovCit7QkZBX0FFTl9SUE9SVF9PTkxJTkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1JQT1JUX09OTElORSIsCisgIlJlbW90ZSBwb3J0IChXV04gPSAlcykgb25saW5lIGZvciBsb2dpY2FsIHBvcnQgKFdXTiA9ICVzKS4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX1JQT1JUX09GRkxJTkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1JQT1JUX09GRkxJTkUiLAorICJSZW1vdGUgcG9ydCAoV1dOID0gJXMpIG9mZmxpbmVkIGJ5IGxvZ2ljYWwgcG9ydCAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUlBPUlRfRElTQ09OTkVDVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfRVJST1IsICJCRkFfQUVOX1JQT1JUX0RJU0NPTk5FQ1QiLAorICJSZW1vdGUgcG9ydCAoV1dOID0gJXMpIGNvbm5lY3Rpdml0eSBsb3N0IGZvciBsb2dpY2FsIHBvcnQgKFdXTiA9ICVzKS4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX1JQT1JUX1FPU19QUklPLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9SUE9SVF9RT1NfUFJJTyIsCisgIlFPUyBwcmlvcml0eSBjaGFuZ2VkIHRvICVzOiBSUFdXTiA9ICVzIGFuZCBMUFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKwore0JGQV9BRU5fUlBPUlRfUU9TX0ZMT1dJRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUlBPUlRfUU9TX0ZMT1dJRCIsCisgIlFPUyBmbG93IElEIGNoYW5nZWQgdG8gJWQ6IFJQV1dOID0gJXMgYW5kIExQV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEZDUyBNb2R1bGUgKi8KK3tCRkFfTE9HX0ZDU19GQUJSSUNfTk9TV0lUQ0gsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJGQ1NfRkFCUklDX05PU1dJVENIIiwKKyAiTm8gc3dpdGNoZWQgZmFicmljIHByZXNlbmNlIGlzIGRldGVjdGVkLiIsCisgKDApLCAwfSwKKwore0JGQV9MT0dfRkNTX0ZBQlJJQ19JU09MQVRFRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkZDU19GQUJSSUNfSVNPTEFURUQiLAorICJQb3J0IGlzIGlzb2xhdGVkIGR1ZSB0byBWRl9JRCBtaXNtYXRjaC4gUFdXTjogJXMsIFBvcnQgVkZfSUQ6ICUwNHggYW5kIgorICIgc3dpdGNoIHBvcnQgVkZfSUQ6ICUwNHguIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfWCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfWCA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEhBTCBNb2R1bGUgKi8KK3tCRkFfTE9HX0hBTF9BU1NFUlQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19FUlJPUiwKKyAiSEFMX0FTU0VSVCIsCisgIkFzc2VydGlvbiBmYWlsdXJlOiAlczolZDogJXMiLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKK3tCRkFfTE9HX0hBTF9IRUFSVEJFQVRfRkFJTFVSRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfQ1JJVElDQUwsICJIQUxfSEVBUlRCRUFUX0ZBSUxVUkUiLAorICJGaXJtd2FyZSBoZWFydGJlYXQgZmFpbHVyZSBhdCAlZCIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfSEFMX0ZDUElNX1BBUk1fSU5WQUxJRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkhBTF9GQ1BJTV9QQVJNX0lOVkFMSUQiLAorICJEcml2ZXIgY29uZmlndXJhdGlvbiAlcyB2YWx1ZSAlZCBpcyBpbnZhbGlkLiBWYWx1ZSBzaG91bGQgYmUgd2l0aGluIgorICIgJWQgYW5kICVkLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcyKSB8IChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkczKSB8IDApLCA0fSwKKwore0JGQV9MT0dfSEFMX1NNX0FTU0VSVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0VSUk9SLAorICJIQUxfU01fQVNTRVJUIiwKKyAiU00gQXNzZXJ0aW9uIGZhaWx1cmU6ICVzOiVkOiBldmVudCA9ICVkIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIExJTlVYIE1vZHVsZSAqLwore0JGQV9MT0dfTElOVVhfREVWSUNFX0NMQUlNRUQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9ERVZJQ0VfQ0xBSU1FRCIsCisgImJmYSBkZXZpY2UgYXQgJXMgY2xhaW1lZC4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX0hBU0hfSU5JVF9GQUlMRUQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9IQVNIX0lOSVRfRkFJTEVEIiwKKyAiSGFzaCB0YWJsZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlIGZvciB0aGUgcG9ydCAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX1NZU0ZTX0ZBSUxFRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX1NZU0ZTX0ZBSUxFRCIsCisgInN5c2ZzIGZpbGUgY3JlYXRpb24gZmFpbHVyZSBmb3IgdGhlIHBvcnQgJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9NRU1fQUxMT0NfRkFJTEVELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfTUVNX0FMTE9DX0ZBSUxFRCIsCisgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZDogJXMuICAiLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX0RSSVZFUl9SRUdJU1RSQVRJT05fRkFJTEVELAorIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJMSU5VWF9EUklWRVJfUkVHSVNUUkFUSU9OX0ZBSUxFRCIsCisgIiVzLiAgIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9JVE5JTV9GUkVFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiTElOVVhfSVROSU1fRlJFRSIsCisgInNjc2klZDogRkNJRDogJXMgV1dQTjogJXMiLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKK3tCRkFfTE9HX0xJTlVYX0lUTklNX09OTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX0lUTklNX09OTElORSIsCisgIlRhcmdldDogJWQ6MDolZCBGQ0lEOiAlcyBXV1BOOiAlcyIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkczKSB8IDApLCA0fSwKKwore0JGQV9MT0dfTElOVVhfSVROSU1fT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX0lUTklNX09GRkxJTkUiLAorICJUYXJnZXQ6ICVkOjA6JWQgRkNJRDogJXMgV1dQTjogJXMiLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMikgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMykgfCAwKSwgNH0sCisKK3tCRkFfTE9HX0xJTlVYX1NDU0lfSE9TVF9GUkVFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfU0NTSV9IT1NUX0ZSRUUiLAorICJGcmVlIHNjc2klZCIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfU0NTSV9BQk9SVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkxJTlVYX1NDU0lfQUJPUlQiLAorICJzY3NpJWQ6IGFib3J0IGNtbmQgJXAsIGlvdGFnICV4IiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfWCA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAorCit7QkZBX0xPR19MSU5VWF9TQ1NJX0FCT1JUX0NPTVAsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9TQ1NJX0FCT1JUX0NPTVAiLAorICJzY3NpJWQ6IGNvbXBsZXRlIGFib3J0IDB4JXAsIGlvdGFnIDB4JXgiLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19QIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19YIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgV0RSViBNb2R1bGUgKi8KK3tCRkFfTE9HX1dEUlZfSU9DX0lOSVRfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0lPQ19JTklUX0VSUk9SIiwKKyAiSU9DIGluaXRpYWxpemF0aW9uIGhhcyBmYWlsZWQuIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19XRFJWX0lPQ19JTlRFUk5BTF9FUlJPUiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIldEUlZfSU9DX0lOVEVSTkFMX0VSUk9SIiwKKyAiSU9DIGludGVybmFsIGVycm9yLiAgIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19XRFJWX0lPQ19TVEFSVF9FUlJPUiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIldEUlZfSU9DX1NUQVJUX0VSUk9SIiwKKyAiSU9DIGNvdWxkIG5vdCBiZSBzdGFydGVkLiAgIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19XRFJWX0lPQ19TVE9QX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiV0RSVl9JT0NfU1RPUF9FUlJPUiIsCisgIklPQyBjb3VsZCBub3QgYmUgc3RvcHBlZC4gICIsCisgKDApLCAwfSwKKwore0JGQV9MT0dfV0RSVl9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiV0RSVl9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTIiwKKyAiSW5zdWZmaWNpZW50IG1lbW9yeS4gICIsCisgKDApLCAwfSwKKwore0JGQV9MT0dfV0RSVl9CQVNFX0FERFJFU1NfTUFQX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiV0RSVl9CQVNFX0FERFJFU1NfTUFQX0VSUk9SIiwKKyAiVW5hYmxlIHRvIG1hcCB0aGUgSU9DIG9udG8gdGhlIHN5c3RlbSBhZGRyZXNzIHNwYWNlLiAgIiwKKyAoMCksIDB9LAorCisKK3swLCAwLCAwLCAiIiwgIiIsIDAsIDB9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xwcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0NGI0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xwcy5jCkBAIC0wLDAgKzEsNzgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2xwcy5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBMUFMpOworQkZBX01PRFVMRShscHMpOworCisjZGVmaW5lIEJGQV9MUFNfTUlOX0xQT1JUUwkoMSkKKyNkZWZpbmUgQkZBX0xQU19NQVhfTFBPUlRTCSgyNTYpCisKKy8qKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgYmZhX2xwc19tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICpuZG1fbGVuLAorCQkJICAgIHUzMiAqZG1fbGVuKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLAorCQkJICAgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkJICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sCisJCQkgICBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpOworc3RhdGljIHZvaWQgYmZhX2xwc19pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOworc3RhdGljIHZvaWQgYmZhX2xwc19sb2dpbl9yc3Aoc3RydWN0IGJmYV9zICpiZmEsCisJCQkgICAgICBzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yc3BfcyAqcnNwKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfbG9nb3V0X3JzcChzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCSAgICAgICBzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcnNwX3MgKnJzcCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3JlcXFfcmVzdW1lKHZvaWQgKmxwc19hcmcpOworc3RhdGljIHZvaWQgYmZhX2xwc19mcmVlKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NlbmRfbG9naW4oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc2VuZF9sb2dvdXQoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfbG9naW5fY29tcChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworc3RhdGljIHZvaWQgYmZhX2xwc19sb2dvdXRfY29tcChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworCisKKy8qKgorICogIGxwc19wdnQgQkZBIExQUyBwcml2YXRlIGZ1bmN0aW9ucworICovCisKK2VudW0gYmZhX2xwc19ldmVudCB7CisJQkZBX0xQU19TTV9MT0dJTgk9IDEsCS8qIGxvZ2luIHJlcXVlc3QgZnJvbSB1c2VyCSovCisJQkZBX0xQU19TTV9MT0dPVVQJPSAyLAkvKiBsb2dvdXQgcmVxdWVzdCBmcm9tIHVzZXIJKi8KKwlCRkFfTFBTX1NNX0ZXUlNQCT0gMywJLyogZi93IHJlc3BvbnNlIHRvIGxvZ2luL2xvZ291dAkqLworCUJGQV9MUFNfU01fUkVTVU1FCT0gNCwJLyogc3BhY2UgcHJlc2VudCBpbiByZXFxIHF1ZXVlCSovCisJQkZBX0xQU19TTV9ERUxFVEUJPSA1LAkvKiBscHMgZGVsZXRlIGZyb20gdXNlcgkJKi8KKwlCRkFfTFBTX1NNX09GRkxJTkUJPSA2LAkvKiBMaW5rIGlzIG9mZmxpbmUJCSovCit9OworCitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2luaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2xwc19zbV9sb2dpbihzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ2lud2FpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMsCisJCQllbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2xwc19zbV9vbmxpbmUoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2xwc19zbV9sb2dvdXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2xwc19zbV9sb2dvd2FpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMsCisJCQllbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpOworCisvKioKKyAqIEluaXQgc3RhdGUgLS0gbm8gbG9naW4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21faW5pdChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGxwcy0+YmZhLCBscHMtPmxwX3RhZyk7CisJYmZhX3RyYyhscHMtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0xQU19TTV9MT0dJTjoKKwkJaWYgKGJmYV9yZXFxX2Z1bGwobHBzLT5iZmEsIGxwcy0+cmVxcSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ2lud2FpdCk7CisJCQliZmFfcmVxcV93YWl0KGxwcy0+YmZhLCBscHMtPnJlcXEsICZscHMtPndxZSk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9sb2dpbik7CisJCQliZmFfbHBzX3NlbmRfbG9naW4obHBzKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9MT0dPVVQ6CisJCWJmYV9scHNfbG9nb3V0X2NvbXAobHBzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fREVMRVRFOgorCQliZmFfbHBzX2ZyZWUobHBzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fT0ZGTElORToKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fRldSU1A6CisJCS8qIENvdWxkIGhhcHBlbiB3aGVuIGZhYnJpYyBkZXRlY3RzIGxvb3BiYWNrIGFuZCBkaXNjYXJkcworCQkgKiB0aGUgbHBzIHJlcXVlc3QuIEZ3IHdpbGwgZXZlbnR1YWxseSBzZW50IG91dCB0aGUgdGltZW91dAorCQkgKiBKdXN0IGlnbm9yZQorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBsb2dpbiBpcyBpbiBwcm9ncmVzcyAtLSBhd2FpdGluZyByZXNwb25zZSBmcm9tIGZpcm13YXJlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX3NtX2xvZ2luKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBTX1NNX0ZXUlNQOgorCQlpZiAobHBzLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSykKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX29ubGluZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfbHBzX2xvZ2luX2NvbXAobHBzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogbG9naW4gcGVuZGluZyAtIGF3YWl0aW5nIHNwYWNlIGluIHJlcXVlc3QgcXVldWUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fbG9naW53YWl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBTX1NNX1JFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fbG9naW4pOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmbHBzLT53cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGxvZ2luIGNvbXBsZXRlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX3NtX29ubGluZShzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGxwcy0+YmZhLCBscHMtPmxwX3RhZyk7CisJYmZhX3RyYyhscHMtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0xQU19TTV9MT0dPVVQ6CisJCWlmIChiZmFfcmVxcV9mdWxsKGxwcy0+YmZhLCBscHMtPnJlcXEpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9sb2dvd2FpdCk7CisJCQliZmFfcmVxcV93YWl0KGxwcy0+YmZhLCBscHMtPnJlcXEsICZscHMtPndxZSk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9sb2dvdXQpOworCQkJYmZhX2xwc19zZW5kX2xvZ291dChscHMpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJY2FzZSBCRkFfTFBTX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogbG9nb3V0IGluIHByb2dyZXNzIC0gYXdhaXRpbmcgZmlybXdhcmUgcmVzcG9uc2UKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fbG9nb3V0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBTX1NNX0ZXUlNQOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYmZhX2xwc19sb2dvdXRfY29tcChscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBsb2dvdXQgcGVuZGluZyAtLSBhd2FpdGluZyBzcGFjZSBpbiByZXF1ZXN0IHF1ZXVlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX3NtX2xvZ293YWl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBTX1NNX1JFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fbG9nb3V0KTsKKwkJYmZhX2xwc19zZW5kX2xvZ291dChscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmbHBzLT53cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgbHBzX3B2dCBCRkEgTFBTIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworLyoqCisgKiByZXR1cm4gbWVtb3J5IHJlcXVpcmVtZW50CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKm5kbV9sZW4sIHUzMiAqZG1fbGVuKQoreworCWlmIChjZmctPmRydmNmZy5taW5fY2ZnKQorCQkqbmRtX2xlbiArPSBzaXplb2Yoc3RydWN0IGJmYV9scHNfcykgKiBCRkFfTFBTX01JTl9MUE9SVFM7CisJZWxzZQorCQkqbmRtX2xlbiArPSBzaXplb2Yoc3RydWN0IGJmYV9scHNfcykgKiBCRkFfTFBTX01BWF9MUE9SVFM7Cit9CisKKy8qKgorICogYmZhIG1vZHVsZSBhdHRhY2ggYXQgaW5pdGlhbGl6YXRpb24gdGltZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcwkqbW9kID0gQkZBX0xQU19NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHM7CisJaW50CQkJaTsKKworCWJmYV9vc19tZW1zZXQobW9kLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9scHNfbW9kX3MpKTsKKwltb2QtPm51bV9scHMgPSBCRkFfTFBTX01BWF9MUE9SVFM7CisJaWYgKGNmZy0+ZHJ2Y2ZnLm1pbl9jZmcpCisJCW1vZC0+bnVtX2xwcyA9IEJGQV9MUFNfTUlOX0xQT1JUUzsKKwllbHNlCisJCW1vZC0+bnVtX2xwcyA9IEJGQV9MUFNfTUFYX0xQT1JUUzsKKwltb2QtPmxwc19hcnIgPSBscHMgPSAoc3RydWN0IGJmYV9scHNfcyAqKSBiZmFfbWVtaW5mb19rdmEobWVtaW5mbyk7CisKKwliZmFfbWVtaW5mb19rdmEobWVtaW5mbykgKz0gbW9kLT5udW1fbHBzICogc2l6ZW9mKHN0cnVjdCBiZmFfbHBzX3MpOworCisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+bHBzX2ZyZWVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+bHBzX2FjdGl2ZV9xKTsKKworCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9scHM7IGkrKywgbHBzKyspIHsKKwkJbHBzLT5iZmEJPSBiZmE7CisJCWxwcy0+bHBfdGFnCT0gKHU4KSBpOworCQlscHMtPnJlcXEJPSBCRkFfUkVRUV9MUFM7CisJCWJmYV9yZXFxX3dpbml0KCZscHMtPndxZSwgYmZhX2xwc19yZXFxX3Jlc3VtZSwgbHBzKTsKKwkJbGlzdF9hZGRfdGFpbCgmbHBzLT5xZSwgJm1vZC0+bHBzX2ZyZWVfcSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2xwc19pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9scHNfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2xwc19zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9scHNfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworLyoqCisgKiBJT0MgaW4gZGlzYWJsZWQgc3RhdGUgLS0gY29uc2lkZXIgYWxsIGxwcyBvZmZsaW5lCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzOworCXN0cnVjdCBsaXN0X2hlYWQJCSpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmbW9kLT5scHNfYWN0aXZlX3EpIHsKKwkJbHBzID0gKHN0cnVjdCBiZmFfbHBzX3MgKikgcWU7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9PRkZMSU5FKTsKKwl9Cit9CisKKy8qKgorICogRmlybXdhcmUgbG9naW4gcmVzcG9uc2UKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbG9naW5fcnNwKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yc3BfcyAqcnNwKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKKworCWJmYV9hc3NlcnQocnNwLT5scF90YWcgPCBtb2QtPm51bV9scHMpOworCWxwcyA9IEJGQV9MUFNfRlJPTV9UQUcobW9kLCByc3AtPmxwX3RhZyk7CisKKwlscHMtPnN0YXR1cyA9IHJzcC0+c3RhdHVzOworCXN3aXRjaCAocnNwLT5zdGF0dXMpIHsKKwljYXNlIEJGQV9TVEFUVVNfT0s6CisJCWxwcy0+ZnBvcnQJPSByc3AtPmZfcG9ydDsKKwkJbHBzLT5ucGl2X2VuCT0gcnNwLT5ucGl2X2VuOworCQlscHMtPmxwX3BpZAk9IHJzcC0+bHBfcGlkOworCQlscHMtPnByX2JiY3JlZAk9IGJmYV9vc19udG9ocyhyc3AtPmJiX2NyZWRpdCk7CisJCWxwcy0+cHJfcHd3bgk9IHJzcC0+cG9ydF9uYW1lOworCQlscHMtPnByX253d24JPSByc3AtPm5vZGVfbmFtZTsKKwkJbHBzLT5hdXRoX3JlcQk9IHJzcC0+YXV0aF9yZXE7CisJCWxwcy0+bHBfbWFjCT0gcnNwLT5scF9tYWM7CisJCWxwcy0+YnJjZF9zd2l0Y2ggPSByc3AtPmJyY2Rfc3dpdGNoOworCQlscHMtPmZjZl9tYWMJPSByc3AtPmZjZl9tYWM7CisKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfRkFCUklDX1JKVDoKKwkJbHBzLT5sc3JqdF9yc24gPSByc3AtPmxzcmp0X3JzbjsKKwkJbHBzLT5sc3JqdF9leHBsID0gcnNwLT5sc3JqdF9leHBsOworCisJCWJyZWFrOworCisJY2FzZSBCRkFfU1RBVFVTX0VQUk9UT0NPTDoKKwkJbHBzLT5leHRfc3RhdHVzID0gcnNwLT5leHRfc3RhdHVzOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogTm90aGluZyB0byBkbyB3aXRoIG90aGVyIHN0YXR1cyAqLworCQlicmVhazsKKwl9CisKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fRldSU1ApOworfQorCisvKioKKyAqIEZpcm13YXJlIGxvZ291dCByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dvdXRfcnNwKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcnNwX3MgKnJzcCkKK3sKKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcwkqbW9kID0gQkZBX0xQU19NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHM7CisKKwliZmFfYXNzZXJ0KHJzcC0+bHBfdGFnIDwgbW9kLT5udW1fbHBzKTsKKwlscHMgPSBCRkFfTFBTX0ZST01fVEFHKG1vZCwgcnNwLT5scF90YWcpOworCisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0ZXUlNQKTsKK30KKworLyoqCisgKiBTcGFjZSBpcyBhdmFpbGFibGUgaW4gcmVxdWVzdCBxdWV1ZSwgcmVzdW1lIHF1ZXVlaW5nIHJlcXVlc3QgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX3JlcXFfcmVzdW1lKHZvaWQgKmxwc19hcmcpCit7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzID0gbHBzX2FyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9SRVNVTUUpOworfQorCisvKioKKyAqIGxwcyBpcyBmcmVlZCAtLSB0cmlnZ2VyZWQgYnkgdnBvcnQgZGVsZXRlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2ZyZWUoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChscHMtPmJmYSk7CisKKwlsaXN0X2RlbCgmbHBzLT5xZSk7CisJbGlzdF9hZGRfdGFpbCgmbHBzLT5xZSwgJm1vZC0+bHBzX2ZyZWVfcSk7Cit9CisKKy8qKgorICogc2VuZCBsb2dpbiByZXF1ZXN0IHRvIGZpcm13YXJlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX3NlbmRfbG9naW4oc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXN0cnVjdCBiZmlfbHBzX2xvZ2luX3JlcV9zCSptOworCisJbSA9IGJmYV9yZXFxX25leHQobHBzLT5iZmEsIGxwcy0+cmVxcSk7CisJYmZhX2Fzc2VydChtKTsKKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfTFBTLCBCRklfTFBTX0gySV9MT0dJTl9SRVEsCisJCQliZmFfbHB1aWQobHBzLT5iZmEpKTsKKworCW0tPmxwX3RhZwk9IGxwcy0+bHBfdGFnOworCW0tPmFscGEJCT0gbHBzLT5hbHBhOworCW0tPnBkdV9zaXplCT0gYmZhX29zX2h0b25zKGxwcy0+cGR1c3opOworCW0tPnB3d24JCT0gbHBzLT5wd3duOworCW0tPm53d24JCT0gbHBzLT5ud3duOworCW0tPmZkaXNjCT0gbHBzLT5mZGlzYzsKKwltLT5hdXRoX2VuCT0gbHBzLT5hdXRoX2VuOworCisJYmZhX3JlcXFfcHJvZHVjZShscHMtPmJmYSwgbHBzLT5yZXFxKTsKK30KKworLyoqCisgKiBzZW5kIGxvZ291dCByZXF1ZXN0IHRvIGZpcm13YXJlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX3NlbmRfbG9nb3V0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcmVxX3MgKm07CisKKwltID0gYmZhX3JlcXFfbmV4dChscHMtPmJmYSwgbHBzLT5yZXFxKTsKKwliZmFfYXNzZXJ0KG0pOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19MUFMsIEJGSV9MUFNfSDJJX0xPR09VVF9SRVEsCisJCQliZmFfbHB1aWQobHBzLT5iZmEpKTsKKworCW0tPmxwX3RhZyAgICA9IGxwcy0+bHBfdGFnOworCW0tPnBvcnRfbmFtZSA9IGxwcy0+cHd3bjsKKwliZmFfcmVxcV9wcm9kdWNlKGxwcy0+YmZhLCBscHMtPnJlcXEpOworfQorCisvKioKKyAqIEluZGlyZWN0IGxvZ2luIGNvbXBsZXRpb24gaGFuZGxlciBmb3Igbm9uLWZjcworICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dpbl9jb21wX2NiKHZvaWQgKmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2xwc19zICpscHMJPSBhcmc7CisKKwlpZiAoIWNvbXBsZXRlKQorCQlyZXR1cm47CisKKwlpZiAobHBzLT5mZGlzYykKKwkJYmZhX2NiX2xwc19mZGlzY19jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcsIGxwcy0+c3RhdHVzKTsKKwllbHNlCisJCWJmYV9jYl9scHNfZmxvZ2lfY29tcChscHMtPmJmYS0+YmZhZCwgbHBzLT51YXJnLCBscHMtPnN0YXR1cyk7Cit9CisKKy8qKgorICogTG9naW4gY29tcGxldGlvbiBoYW5kbGVyIC0tIGRpcmVjdCBjYWxsIGZvciBmY3MsIHF1ZXVlIGZvciBvdGhlcnMKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbG9naW5fY29tcChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJaWYgKCFscHMtPmJmYS0+ZmNzKSB7CisJCWJmYV9jYl9xdWV1ZShscHMtPmJmYSwgJmxwcy0+aGNiX3FlLAorCQkJCWJmYV9scHNfbG9naW5fY29tcF9jYiwgbHBzKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChscHMtPmZkaXNjKQorCQliZmFfY2JfbHBzX2ZkaXNjX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZywgbHBzLT5zdGF0dXMpOworCWVsc2UKKwkJYmZhX2NiX2xwc19mbG9naV9jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcsIGxwcy0+c3RhdHVzKTsKK30KKworLyoqCisgKiBJbmRpcmVjdCBsb2dvdXQgY29tcGxldGlvbiBoYW5kbGVyIGZvciBub24tZmNzCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2xvZ291dF9jb21wX2NiKHZvaWQgKmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2xwc19zICpscHMJPSBhcmc7CisKKwlpZiAoIWNvbXBsZXRlKQorCQlyZXR1cm47CisKKwlpZiAobHBzLT5mZGlzYykKKwkJYmZhX2NiX2xwc19mZGlzY2xvZ29fY29tcChscHMtPmJmYS0+YmZhZCwgbHBzLT51YXJnKTsKKwllbHNlCisJCWJmYV9jYl9scHNfZmxvZ29fY29tcChscHMtPmJmYS0+YmZhZCwgbHBzLT51YXJnKTsKK30KKworLyoqCisgKiBMb2dvdXQgY29tcGxldGlvbiBoYW5kbGVyIC0tIGRpcmVjdCBjYWxsIGZvciBmY3MsIHF1ZXVlIGZvciBvdGhlcnMKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbG9nb3V0X2NvbXAoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCWlmICghbHBzLT5iZmEtPmZjcykgeworCQliZmFfY2JfcXVldWUobHBzLT5iZmEsICZscHMtPmhjYl9xZSwKKwkJCQliZmFfbHBzX2xvZ291dF9jb21wX2NiLCBscHMpOworCQlyZXR1cm47CisJfQorCWlmIChscHMtPmZkaXNjKQorCQliZmFfY2JfbHBzX2ZkaXNjbG9nb19jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcpOworCWVsc2UKKwkJYmZhX2NiX2xwc19mbG9nb19jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcpOworfQorCisKKworLyoqCisgKiAgbHBzX3B1YmxpYyBCRkEgTFBTIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIEFsbG9jYXRlIGEgbHBvcnQgc3J2aWNlIHRhZy4KKyAqLworc3RydWN0IGJmYV9scHNfcyAgKgorYmZhX2xwc19hbGxvYyhzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcwkqbW9kID0gQkZBX0xQU19NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHMgPSBOVUxMOworCisJYmZhX3FfZGVxKCZtb2QtPmxwc19mcmVlX3EsICZscHMpOworCisJaWYgKGxwcyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWxpc3RfYWRkX3RhaWwoJmxwcy0+cWUsICZtb2QtPmxwc19hY3RpdmVfcSk7CisKKwliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwlyZXR1cm4gbHBzOworfQorCisvKioKKyAqIEZyZWUgbHBvcnQgc2VydmljZSB0YWcuIFRoaXMgY2FuIGJlIGNhbGxlZCBhbnl0aW1lIGFmdGVyIGFuIGFsbG9jLgorICogTm8gbmVlZCB0byB3YWl0IGZvciBhbnkgcGVuZGluZyBsb2dpbi9sb2dvdXQgY29tcGxldGlvbnMuCisgKi8KK3ZvaWQKK2JmYV9scHNfZGVsZXRlKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fREVMRVRFKTsKK30KKworLyoqCisgKiBJbml0aWF0ZSBhIGxwb3J0IGxvZ2luLgorICovCit2b2lkCitiZmFfbHBzX2Zsb2dpKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgdm9pZCAqdWFyZywgdTggYWxwYSwgdTE2IHBkdXN6LAorCXd3bl90IHB3d24sIHd3bl90IG53d24sIGJmYV9ib29sZWFuX3QgYXV0aF9lbikKK3sKKwlscHMtPnVhcmcJPSB1YXJnOworCWxwcy0+YWxwYQk9IGFscGE7CisJbHBzLT5wZHVzegk9IHBkdXN6OworCWxwcy0+cHd3bgk9IHB3d247CisJbHBzLT5ud3duCT0gbnd3bjsKKwlscHMtPmZkaXNjCT0gQkZBX0ZBTFNFOworCWxwcy0+YXV0aF9lbgk9IGF1dGhfZW47CisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0xPR0lOKTsKK30KKworLyoqCisgKiBJbml0aWF0ZSBhIGxwb3J0IGZkaXNjIGxvZ2luLgorICovCit2b2lkCitiZmFfbHBzX2ZkaXNjKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgdm9pZCAqdWFyZywgdTE2IHBkdXN6LCB3d25fdCBwd3duLAorCXd3bl90IG53d24pCit7CisJbHBzLT51YXJnCT0gdWFyZzsKKwlscHMtPmFscGEJPSAwOworCWxwcy0+cGR1c3oJPSBwZHVzejsKKwlscHMtPnB3d24JPSBwd3duOworCWxwcy0+bnd3bgk9IG53d247CisJbHBzLT5mZGlzYwk9IEJGQV9UUlVFOworCWxwcy0+YXV0aF9lbgk9IEJGQV9GQUxTRTsKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fTE9HSU4pOworfQorCisvKioKKyAqIEluaXRpYXRlIGEgbHBvcnQgbG9nb3V0IChmbG9naSkuCisgKi8KK3ZvaWQKK2JmYV9scHNfZmxvZ28oc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9MT0dPVVQpOworfQorCisvKioKKyAqIEluaXRpYXRlIGEgbHBvcnQgRkRTSUMgbG9nb3V0LgorICovCit2b2lkCitiZmFfbHBzX2ZkaXNjbG9nbyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0xPR09VVCk7Cit9CisKKy8qKgorICogRGlzY2FyZCBhIHBlbmRpbmcgbG9naW4gcmVxdWVzdCAtLSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgZm9yCisgKiBsaW5rIGRvd24gaGFuZGxpbmcuCisgKi8KK3ZvaWQKK2JmYV9scHNfZGlzY2FyZChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX09GRkxJTkUpOworfQorCisvKioKKyAqIFJldHVybiBscG9ydCBzZXJ2aWNlcyB0YWcKKyAqLwordTgKK2JmYV9scHNfZ2V0X3RhZyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+bHBfdGFnOworfQorCisvKioKKyAqIFJldHVybiBscG9ydCBzZXJ2aWNlcyB0YWcgZ2l2ZW4gdGhlIHBpZAorICovCit1OAorYmZhX2xwc19nZXRfdGFnX2Zyb21fcGlkKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgcGlkKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKKwlpbnQJCQlpOworCisJZm9yIChpID0gMCwgbHBzID0gbW9kLT5scHNfYXJyOyBpIDwgbW9kLT5udW1fbHBzOyBpKyssIGxwcysrKSB7CisJCWlmIChscHMtPmxwX3BpZCA9PSBwaWQpCisJCQlyZXR1cm4gbHBzLT5scF90YWc7CisJfQorCisJLyogUmV0dXJuIGJhc2UgcG9ydCB0YWcgYW55d2F5ICovCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcmV0dXJuIGlmIGZhYnJpYyBsb2dpbiBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgTlBJVgorICovCitiZmFfYm9vbGVhbl90CitiZmFfbHBzX2lzX25waXZfZW4oc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPm5waXZfZW47Cit9CisKKy8qKgorICogUmV0dXJuIFRSVUUgaWYgYXR0YWNoZWQgdG8gRi1Qb3J0LCBlbHNlIHJldHVybiBGQUxTRQorICovCitiZmFfYm9vbGVhbl90CitiZmFfbHBzX2lzX2Zwb3J0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5mcG9ydDsKK30KKworLyoqCisgKiBSZXR1cm4gVFJVRSBpZiBhdHRhY2hlZCB0byBhIEJyb2NhZGUgRmFicmljCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9scHNfaXNfYnJjZF9mYWJyaWMoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmJyY2Rfc3dpdGNoOworfQorLyoqCisgKiByZXR1cm4gVFJVRSBpZiBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZAorICovCitiZmFfYm9vbGVhbl90CitiZmFfbHBzX2lzX2F1dGhyZXEoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmF1dGhfcmVxOworfQorCitiZmFfZXByb3RvX3N0YXR1c190CitiZmFfbHBzX2dldF9leHRzdGF0dXMoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmV4dF9zdGF0dXM7Cit9CisKKy8qKgorICogcmV0dXJuIHBvcnQgaWQgYXNzaWduZWQgdG8gdGhlIGxwb3J0CisgKi8KK3UzMgorYmZhX2xwc19nZXRfcGlkKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5scF9waWQ7Cit9CisKKy8qKgorICogUmV0dXJuIGJiX2NyZWRpdCBhc3NpZ25lZCBpbiBGTE9HSSByZXNwb25zZQorICovCit1MTYKK2JmYV9scHNfZ2V0X3BlZXJfYmJjcmVkaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPnByX2JiY3JlZDsKK30KKworLyoqCisgKiBSZXR1cm4gcGVlciBwb3J0IG5hbWUKKyAqLword3duX3QKK2JmYV9scHNfZ2V0X3BlZXJfcHd3bihzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+cHJfcHd3bjsKK30KKworLyoqCisgKiBSZXR1cm4gcGVlciBub2RlIG5hbWUKKyAqLword3duX3QKK2JmYV9scHNfZ2V0X3BlZXJfbnd3bihzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+cHJfbnd3bjsKK30KKworLyoqCisgKiByZXR1cm4gcmVhc29uIGNvZGUgaWYgbG9naW4gcmVxdWVzdCBpcyByZWplY3RlZAorICovCit1OAorYmZhX2xwc19nZXRfbHNyanRfcnNuKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5sc3JqdF9yc247Cit9CisKKy8qKgorICogcmV0dXJuIGV4cGxhbmF0aW9uIGNvZGUgaWYgbG9naW4gcmVxdWVzdCBpcyByZWplY3RlZAorICovCit1OAorYmZhX2xwc19nZXRfbHNyanRfZXhwbChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+bHNyanRfZXhwbDsKK30KKworCisvKioKKyAqIExQUyBmaXJtd2FyZSBtZXNzYWdlIGNsYXNzIGhhbmRsZXIuCisgKi8KK3ZvaWQKK2JmYV9scHNfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXVuaW9uIGJmaV9scHNfaTJoX21zZ191CW1zZzsKKworCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7CisJbXNnLm1zZyA9IG07CisKKwlzd2l0Y2ggKG0tPm1oZHIubXNnX2lkKSB7CisJY2FzZSBCRklfTFBTX0gySV9MT0dJTl9SU1A6CisJCWJmYV9scHNfbG9naW5fcnNwKGJmYSwgbXNnLmxvZ2luX3JzcCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfTFBTX0gySV9MT0dPVVRfUlNQOgorCQliZmFfbHBzX2xvZ291dF9yc3AoYmZhLCBtc2cubG9nb3V0X3JzcCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXNnX2lkKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xwc19wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2YzZjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xwc19wcml2LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0xQU19QUklWX0hfXworI2RlZmluZSBfX0JGQV9MUFNfUFJJVl9IX18KKworI2luY2x1ZGUgPGJmYV9zdmMuaD4KKworc3RydWN0IGJmYV9scHNfbW9kX3MgeworCXN0cnVjdCBsaXN0X2hlYWQJCWxwc19mcmVlX3E7CisJc3RydWN0IGxpc3RfaGVhZAkJbHBzX2FjdGl2ZV9xOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwc19hcnI7CisJaW50CQkJbnVtX2xwczsKK307CisKKyNkZWZpbmUgQkZBX0xQU19NT0QoX19iZmEpCQkoJihfX2JmYSktPm1vZHVsZXMubHBzX21vZCkKKyNkZWZpbmUgQkZBX0xQU19GUk9NX1RBRyhfX21vZCwgX190YWcpCSgmKF9fbW9kKS0+bHBzX2FycltfX3RhZ10pCisKKy8qCisgKiBleHRlcm5hbCBmdW5jdGlvbnMKKyAqLwordm9pZAliZmFfbHBzX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKTsKKworI2VuZGlmIC8qIF9fQkZBX0xQU19QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmVkYThlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlLmMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcGNpLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX2lvY2ZjLmg+CisKKy8qKgorICogQkZBIG1vZHVsZSBsaXN0IHRlcm1pbmF0ZWQgYnkgTlVMTAorICovCitzdHJ1Y3QgYmZhX21vZHVsZV9zICpoYWxfbW9kc1tdID0geworCSZoYWxfbW9kX3NncGcsCisJJmhhbF9tb2RfcHBvcnQsCisJJmhhbF9tb2RfZmN4cCwKKwkmaGFsX21vZF9scHMsCisJJmhhbF9tb2RfdWYsCisJJmhhbF9tb2RfcnBvcnQsCisJJmhhbF9tb2RfZmNwaW0sCisjaWZkZWYgQkZBX0NGR19QQklORAorCSZoYWxfbW9kX3BiaW5kLAorI2VuZGlmCisJTlVMTAorfTsKKworLyoqCisgKiBNZXNzYWdlIGhhbmRsZXJzIGZvciB2YXJpb3VzIG1vZHVsZXMuCisgKi8KK2JmYV9pc3JfZnVuY190ICBiZmFfaXNyc1tCRklfTUNfTUFYXSA9IHsKKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogTk9ORSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfSU9DICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19ESUFHICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19GTEFTSCAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfQ0VFICovCisJYmZhX3Bwb3J0X2lzciwJCS8qIEJGSV9NQ19QT1JUICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0NGQyAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfTEwgKi8KKwliZmFfdWZfaXNyLAkJLyogQkZJX01DX1VGICovCisJYmZhX2ZjeHBfaXNyLAkJLyogQkZJX01DX0ZDWFAgKi8KKwliZmFfbHBzX2lzciwJCS8qIEJGSV9NQ19MUFMgKi8KKwliZmFfcnBvcnRfaXNyLAkJLyogQkZJX01DX1JQT1JUICovCisJYmZhX2l0bmltX2lzciwJCS8qIEJGSV9NQ19JVE5JTSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfSU9JTV9SRUFEICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0lNX1dSSVRFICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0lNX0lPICovCisJYmZhX2lvaW1faXNyLAkJLyogQkZJX01DX0lPSU0gKi8KKwliZmFfaW9pbV9nb29kX2NvbXBfaXNyLAkvKiBCRklfTUNfSU9JTV9JT0NPTSAqLworCWJmYV90c2tpbV9pc3IsCQkvKiBCRklfTUNfVFNLSU0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX1NCT09UICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JUEZDICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19QT1JUICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworfTsKKworLyoqCisgKiBNZXNzYWdlIGhhbmRsZXJzIGZvciBtYWlsYm94IGNvbW1hbmQgY2xhc3NlcworICovCitiZmFfaW9jX21ib3hfbWNmdW5jX3QgIGJmYV9tYm94X2lzcnNbQkZJX01DX01BWF0gPSB7CisJTlVMTCwKKwlOVUxMLAkJCS8qIEJGSV9NQ19JT0MJKi8KKwlOVUxMLAkJCS8qIEJGSV9NQ19ESUFHCSovCisJTlVMTCwJCS8qIEJGSV9NQ19GTEFTSCAqLworCU5VTEwsCQkJLyogQkZJX01DX0NFRQkqLworCU5VTEwsCQkJLyogQkZJX01DX1BPUlQJKi8KKwliZmFfaW9jZmNfaXNyLAkJLyogQkZJX01DX0lPQ0ZDICovCisJTlVMTCwKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZXNfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlc19wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmNzA1MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZXNfcHJpdi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9NT0RVTEVTX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX01PRFVMRVNfUFJJVl9IX18KKworI2luY2x1ZGUgImJmYV91Zl9wcml2LmgiCisjaW5jbHVkZSAiYmZhX3BvcnRfcHJpdi5oIgorI2luY2x1ZGUgImJmYV9ycG9ydF9wcml2LmgiCisjaW5jbHVkZSAiYmZhX2ZjeHBfcHJpdi5oIgorI2luY2x1ZGUgImJmYV9scHNfcHJpdi5oIgorI2luY2x1ZGUgImJmYV9mY3BpbV9wcml2LmgiCisjaW5jbHVkZSA8Y2VlL2JmYV9jZWUuaD4KKyNpbmNsdWRlIDxwb3J0L2JmYV9wb3J0Lmg+CisKKworc3RydWN0IGJmYV9tb2R1bGVzX3MgeworCXN0cnVjdCBiZmFfcHBvcnRfcwlwcG9ydDsJLyogIHBoeXNpY2FsIHBvcnQgbW9kdWxlCSovCisJc3RydWN0IGJmYV9mY3hwX21vZF9zIGZjeHBfbW9kOyAvKiAgZmN4cCBtb2R1bGUJCSovCisJc3RydWN0IGJmYV9scHNfbW9kX3MgbHBzX21vZDsgICAvKiAgZmN4cCBtb2R1bGUJCSovCisJc3RydWN0IGJmYV91Zl9tb2RfcyB1Zl9tb2Q7CS8qICB1bnNvbGljaXRlZCBmcmFtZSBtb2R1bGUJKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zIHJwb3J0X21vZDsgLyogIHJlbW90ZSBwb3J0IG1vZHVsZQkqLworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgZmNwaW1fbW9kOyAvKiAgRkNQIGluaXRpYXRvciBtb2R1bGUJKi8KKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3Mgc2dwZ19tb2Q7IC8qICBTRyBwYWdlIG1vZHVsZQkJKi8KKwlzdHJ1Y3QgYmZhX2NlZV9zIGNlZTsgICAJLyogIENFRSBNb2R1bGUgICAgICAgICAgICAgICAgICovCisJc3RydWN0IGJmYV9wb3J0X3MgcG9ydDsJCS8qICBQaHlzaWNhbCBwb3J0IG1vZHVsZQkqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX01PRFVMRVNfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX29zX2luYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfb3NfaW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhODlmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX29zX2luYy5oCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogQ29udGFpbnMgZGVjbGFyYXRpb25zIGFsbCBPUyBTcGVjaWZpYyBmaWxlcyBuZWVkZWQgZm9yIEJGQSBsYXllcgorICovCisKKyNpZm5kZWYgX19CRkFfT1NfSU5DX0hfXworI2RlZmluZSBfX0JGQV9PU19JTkNfSF9fCisKKyNpZm5kZWYgX19LRVJORUxfXworI2luY2x1ZGUgPHN0ZGludC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNkZWZpbmUgU0VUX01PRFVMRV9WRVJTSU9OKFZFUikKKworI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KKworI2RlZmluZSBCRkFfRVJSCQkJS0VSTl9FUlIKKyNkZWZpbmUgQkZBX1dBUk5JTkcJCUtFUk5fV0FSTklORworI2RlZmluZSBCRkFfTk9USUNFCQlLRVJOX05PVElDRQorI2RlZmluZSBCRkFfSU5GTwkJS0VSTl9JTkZPCisjZGVmaW5lIEJGQV9ERUJVRwkJS0VSTl9ERUJVRworCisjZGVmaW5lIExPR19CRkFEX0lOSVQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTE9HX0ZDUF9JTwkJMHgwMDAwMDAwMgorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgQkZBX0xPR19UUkFDRShiZmFkLCBsZXZlbCwgbWFzaywgZm10LCBhcmcuLi4pCQkJXAorCQlCRkFfTE9HKGJmYWQsIGxldmVsLCBtYXNrLCBmbXQsICMjIGFyZykKKyNkZWZpbmUgQkZBX0RFVl9UUkFDRShiZmFkLCBsZXZlbCwgZm10LCBhcmcuLi4pCQkJCVwKKwkJQkZBX0RFVl9QUklOVEYoYmZhZCwgbGV2ZWwsIGZtdCwgIyMgYXJnKQorI2RlZmluZSBCRkFfVFJBQ0UobGV2ZWwsIGZtdCwgYXJnLi4uKQkJCQkJXAorCQlCRkFfUFJJTlRGKGxldmVsLCBmbXQsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIEJGQV9MT0dfVFJBQ0UoYmZhZCwgbGV2ZWwsIG1hc2ssIGZtdCwgYXJnLi4uKQorI2RlZmluZSBCRkFfREVWX1RSQUNFKGJmYWQsIGxldmVsLCBmbXQsIGFyZy4uLikKKyNkZWZpbmUgQkZBX1RSQUNFKGxldmVsLCBmbXQsIGFyZy4uLikKKyNlbmRpZgorCisjZGVmaW5lIEJGQV9BU1NFUlQocCkgZG8gewkJCQkJCVwKKwlpZiAoIShwKSkgeyAgICAgIFwKKwkJcHJpbnRrKEtFUk5fRVJSICJhc3NlcnQoJXMpIGZhaWxlZCBhdCAlczolZFxuIiwJCVwKKwkJI3AsIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgXAorCQlCVUcoKTsgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIEJGQV9MT0coYmZhZCwgbGV2ZWwsIG1hc2ssIGZtdCwgYXJnLi4uKQkJCQlcCitkbyB7IAkJCQkJCQkJCVwKKwlpZiAoKChtYXNrKSAmICgoKHN0cnVjdCBiZmFkX3MgKikoYmZhZCkpLT4JCQlcCisJCWNmZ19kYXRhW2NmZ19sb2dfbWFza10pKSB8fCAobGV2ZWxbMV0gPD0gJzMnKSkJCVwKKwkJZGV2X3ByaW50ayhsZXZlbCwgJigoKHN0cnVjdCBiZmFkX3MgKikJCQlcCisJCQkoYmZhZCkpLT5wY2lkZXYtPmRldiksIGZtdCwgIyNhcmcpOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNpZm5kZWYgQkZBX0RFVl9QUklOVEYKKyNkZWZpbmUgQkZBX0RFVl9QUklOVEYoYmZhZCwgbGV2ZWwsIGZtdCwgYXJnLi4uKQkJCVwKKwkJZGV2X3ByaW50ayhsZXZlbCwgJigoKHN0cnVjdCBiZmFkX3MgKikJCQlcCisJCQkoYmZhZCkpLT5wY2lkZXYtPmRldiksIGZtdCwgIyNhcmcpOworI2VuZGlmCisKKyNkZWZpbmUgQkZBX1BSSU5URihsZXZlbCwgZm10LCBhcmcuLi4pCQkJCQlcCisJCXByaW50ayhsZXZlbCBmbXQsICMjYXJnKTsKKworaW50IGJmYV9vc19NV0Iodm9pZCAqKTsKKworI2RlZmluZSBiZmFfb3NfbW1pb3diKCkJCW1taW93YigpCisKKyNkZWZpbmUgYmZhX3N3YXBfM2IoX3gpCQkJCVwKKwkoKCgoX3gpICYgMHhmZikgPDwgMTYpIHwJCVwKKwkoKF94KSAmIDB4MDBmZjAwKSB8CQkJXAorCSgoKF94KSAmIDB4ZmYwMDAwKSA+PiAxNikpCisKKyNkZWZpbmUgYmZhX3N3YXBfOGIoX3gpIAkJCQlcCisgICAgICgoKChfeCkgJiAweGZmMDAwMDAwMDAwMDAwMDB1bGwpID4+IDU2KQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwZmYwMDAwMDAwMDAwMDB1bGwpID4+IDQwKQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDBmZjAwMDAwMDAwMDB1bGwpID4+IDI0KQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMGZmMDAwMDAwMDB1bGwpID4+IDgpCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDAwMDAwMDBmZjAwMDAwMHVsbCkgPDwgOCkJCVwKKyAgICAgIHwgKCgoX3gpICYgMHgwMDAwMDAwMDAwZmYwMDAwdWxsKSA8PCAyNCkJCVwKKyAgICAgIHwgKCgoX3gpICYgMHgwMDAwMDAwMDAwMDBmZjAwdWxsKSA8PCA0MCkJCVwKKyAgICAgIHwgKCgoX3gpICYgMHgwMDAwMDAwMDAwMDAwMGZmdWxsKSA8PCA1NikpCisKKyNkZWZpbmUgYmZhX29zX3N3YXAzMihfeCkgCQkJXAorCSgoKChfeCkgJiAweGZmKSA8PCAyNCkgCQl8CVwKKwkoKChfeCkgJiAweDAwMDBmZjAwKSA8PCA4KQl8CVwKKwkoKChfeCkgJiAweDAwZmYwMDAwKSA+PiA4KQl8CVwKKwkoKChfeCkgJiAweGZmMDAwMDAwKSA+PiAyNCkpCisKKworI2lmbmRlZiBfX0JJR0VORElBTgorI2RlZmluZSBiZmFfb3NfaHRvbnMoX3gpICgodTE2KSgoKChfeCkgJiAweGZmMDApID4+IDgpIHwgXAorCQkJCSAoKChfeCkgJiAweDAwZmYpIDw8IDgpKSkKKworI2RlZmluZSBiZmFfb3NfaHRvbmwoX3gpCWJmYV9vc19zd2FwMzIoX3gpCisjZGVmaW5lIGJmYV9vc19odG9ubGwoX3gpCWJmYV9zd2FwXzhiKF94KQorI2RlZmluZSBiZmFfb3NfaHRvbjNiKF94KQliZmFfc3dhcF8zYihfeCkKKworI2RlZmluZSBiZmFfb3Nfd3RvbGUoX3gpICAgKF94KQorCisjZWxzZQorCisjZGVmaW5lIGJmYV9vc19odG9ucyhfeCkgICAoX3gpCisjZGVmaW5lIGJmYV9vc19odG9ubChfeCkgICAoX3gpCisjZGVmaW5lIGJmYV9vc19odG9uM2IoX3gpICAoX3gpCisjZGVmaW5lIGJmYV9vc19odG9ubGwoX3gpICAoX3gpCisjZGVmaW5lIGJmYV9vc193dG9sZShfeCkgICBiZmFfb3Nfc3dhcDMyKF94KQorCisjZW5kaWYKKworI2RlZmluZSBiZmFfb3NfbnRvaHMoX3gpICAgYmZhX29zX2h0b25zKF94KQorI2RlZmluZSBiZmFfb3NfbnRvaGwoX3gpICAgYmZhX29zX2h0b25sKF94KQorI2RlZmluZSBiZmFfb3NfbnRvaGxsKF94KSAgYmZhX29zX2h0b25sbChfeCkKKyNkZWZpbmUgYmZhX29zX250b2gzYihfeCkgIGJmYV9vc19odG9uM2IoX3gpCisKKyNkZWZpbmUgYmZhX29zX3UzMihfX3BhNjQpICgoX19wYTY0KSA+PiAzMikKKworI2RlZmluZSBiZmFfb3NfbWVtc2V0CW1lbXNldAorI2RlZmluZSBiZmFfb3NfbWVtY3B5CW1lbWNweQorI2RlZmluZSBiZmFfb3NfdWRlbGF5CXVkZWxheQorI2RlZmluZSBiZmFfb3NfdnNwcmludGYgdnNwcmludGYKKworI2RlZmluZSBiZmFfb3NfYXNzaWduKF9fdCwgX19zKSBfX3QgPSBfX3MKKworI2RlZmluZSBiZmFfb3NfYWRkcl90IGNoYXIgX19pb21lbSAqCisjZGVmaW5lIGJmYV9vc19wYW5pYygpCisKKyNkZWZpbmUgYmZhX29zX3JlZ19yZWFkKF9yYWRkcikgYmZhX29zX3d0b2xlKHJlYWRsKF9yYWRkcikpCisjZGVmaW5lIGJmYV9vc19yZWdfd3JpdGUoX3JhZGRyLCBfdmFsKSB3cml0ZWwoYmZhX29zX3d0b2xlKChfdmFsKSksIChfcmFkZHIpKQorI2RlZmluZSBiZmFfb3NfbWVtX3JlYWQoX3JhZGRyLCBfb2ZmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWJmYV9vc19udG9obChyZWFkbCgoKF9yYWRkcikgKyAoX29mZikpKSkKKyNkZWZpbmUgYmZhX29zX21lbV93cml0ZShfcmFkZHIsIF9vZmYsIF92YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl3cml0ZWwoYmZhX29zX2h0b25sKChfdmFsKSksICgoX3JhZGRyKSArIChfb2ZmKSkpCisKKyNkZWZpbmUgQkZBX1RSQ19UUyhfdHJjbSkJCQkJCQlcCisJCQkoewkJCQkJCVwKKwkJCQlzdHJ1Y3QgdGltZXZhbCB0djsJCQlcCisJCQkJCQkJCQlcCisJCQkJZG9fZ2V0dGltZW9mZGF5KCZ0dik7ICAgICAgXAorCQkJCSh0di50dl9zZWMqMTAwMDAwMCt0di50dl91c2VjKTsgICAgICBcCisJCQkgfSkKKworc3RydWN0IGJmYV9sb2dfbW9kX3M7Cit2b2lkIGJmYV9vc19wcmludGYoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQsCisJCQljb25zdCBjaGFyICpmbXQsIC4uLik7CisjZW5kaWYKKworI2RlZmluZSBib29sZWFuX3QgaW50CisKKy8qKgorICogRm9yIGN1cnJlbnQgdGltZSBzdGFtcCwgT1MgQVBJIHdpbGwgZmlsbC1pbgorICovCitzdHJ1Y3QgYmZhX3RpbWV2YWxfcyB7CisJdTMyCXR2X3NlYzsJCS8qICBzZWNvbmRzICAgICAgICAqLworCXUzMgl0dl91c2VjOwkvKiAgbWljcm9zZWNvbmRzICAgKi8KK307CisKK3ZvaWQgYmZhX29zX2dldHRpbWVvZmRheShzdHJ1Y3QgYmZhX3RpbWV2YWxfcyAqdHYpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK3d3bjJzdHIoY2hhciAqd3duX3N0ciwgdTY0IHd3bikKK3sKKwl1bmlvbiB7CisJCXU2NCB3d247CisJCXU4IGJ5dGVbOF07CisJfSB3OworCisJdy53d24gPSB3d247CisJc3ByaW50Zih3d25fc3RyLCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4Iiwgdy5ieXRlWzBdLAorCQl3LmJ5dGVbMV0sIHcuYnl0ZVsyXSwgdy5ieXRlWzNdLCB3LmJ5dGVbNF0sIHcuYnl0ZVs1XSwKKwkJdy5ieXRlWzZdLCB3LmJ5dGVbN10pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZjaWQyc3RyKGNoYXIgKmZjaWRfc3RyLCB1MzIgZmNpZCkKK3sKKwl1bmlvbiB7CisJCXUzMiBmY2lkOworCQl1OCBieXRlWzRdOworCX0gZjsKKworCWYuZmNpZCA9IGZjaWQ7CisJc3ByaW50ZihmY2lkX3N0ciwgIiUwMng6JTAyeDolMDJ4IiwgZi5ieXRlWzFdLCBmLmJ5dGVbMl0sIGYuYnl0ZVszXSk7Cit9CisKKyNlbmRpZiAvKiBfX0JGQV9PU19JTkNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiMTkwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuYwpAQCAtMCwwICsxLDQ2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxwb3J0L2JmYV9wb3J0Lmg+CisjaW5jbHVkZSA8YmZpL2JmaS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfcG9ydC5oPgorI2luY2x1ZGUgPGJmYV9pb2MuaD4KKyNpbmNsdWRlIDxjbmEvYmZhX2NuYV90cmNtb2QuaD4KKworQkZBX1RSQ19GSUxFKENOQSwgUE9SVCk7CisKKyNkZWZpbmUgYmZhX2lvY19wb3J0aWQoX19pb2MpICgoX19pb2MpLT5wb3J0X2lkKQorI2RlZmluZSBiZmFfbHB1aWQoX19hcmcpIGJmYV9pb2NfcG9ydGlkKCYoX19hcmcpLT5pb2MpCisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c19zd2FwKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCB1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHMpCit7CisJdTMyICAgICAgICpkaXAgPSAodTMyICopIHN0YXRzOworCXUzMiAgICAgICAgdDAsIHQxOworCWludCAgICAgICAgICAgICBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZih1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSkgLyBzaXplb2YodTMyKTsKKwkgICAgIGkgKz0gMikgeworCQl0MCA9IGRpcFtpXTsKKwkJdDEgPSBkaXBbaSArIDFdOworI2lmZGVmIF9fQklHRU5ESUFOCisJCWRpcFtpXSA9IGJmYV9vc19udG9obCh0MCk7CisJCWRpcFtpICsgMV0gPSBiZmFfb3NfbnRvaGwodDEpOworI2Vsc2UKKwkJZGlwW2ldID0gYmZhX29zX250b2hsKHQxKTsKKwkJZGlwW2kgKyAxXSA9IGJmYV9vc19udG9obCh0MCk7CisjZW5kaWYKKwl9CisKKyAgICAvKiogdG9kbworICAgICAqIFFvUyBzdGF0cyByIGFsc28gc3dhcHBlZCBhcyA2NGJpdDsgdGhhdCBzdHJ1Y3R1cmUgYWxzbworICAgICAqIGhhcyB0byB1c2UgNjQgYml0IGNvdW50ZXJzCisgICAgICovCit9CisKKy8qKgorICogYmZhX3BvcnRfZW5hYmxlX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIHBvcnQgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9lbmFibGVfaXNyKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCWJmYV9hc3NlcnQoMCk7Cit9CisKKy8qKgorICogYmZhX3BvcnRfZGlzYWJsZV9pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBwb3J0IG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfZGlzYWJsZV9pc3Ioc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworLyoqCisgKiBiZmFfcG9ydF9nZXRfc3RhdHNfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBwb3J0IC0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9wb3J0X2dldF9zdGF0c19pc3Ioc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJcG9ydC0+c3RhdHNfc3RhdHVzID0gc3RhdHVzOworCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisKKwlpZiAoc3RhdHVzID09IEJGQV9TVEFUVVNfT0spIHsKKwkJbWVtY3B5KHBvcnQtPnN0YXRzLCBwb3J0LT5zdGF0c19kbWEua3ZhLAorCQkgICAgICAgc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSk7CisJCWJmYV9wb3J0X3N0YXRzX3N3YXAocG9ydCwgcG9ydC0+c3RhdHMpOworCX0KKworCWlmIChwb3J0LT5zdGF0c19jYmZuKSB7CisJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+c3RhdHNfY2JhcmcsIHN0YXR1cyk7CisJCXBvcnQtPnN0YXRzX2NiZm4gPSBOVUxMOworCX0KK30KKworLyoqCisgKiBiZmFfcG9ydF9jbGVhcl9zdGF0c19pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfY2xlYXJfc3RhdHNfaXNyKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCXBvcnQtPnN0YXRzX3N0YXR1cyA9IHN0YXR1czsKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCisJaWYgKHBvcnQtPnN0YXRzX2NiZm4pIHsKKwkJcG9ydC0+c3RhdHNfY2Jmbihwb3J0LT5zdGF0c19jYmFyZywgc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHNfY2JmbiA9IE5VTEw7CisJfQorfQorCisvKioKKyAqIGJmYV9wb3J0X2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9pc3Iodm9pZCAqY2JhcmcsIHN0cnVjdCBiZmlfbWJtc2dfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3BvcnRfcyAqKWNiYXJnOworCXVuaW9uIGJmaV9wb3J0X2kyaF9tc2dfdSAqaTJobXNnOworCisJaTJobXNnID0gKHVuaW9uIGJmaV9wb3J0X2kyaF9tc2dfdSAqKW07CisJYmZhX3RyYyhwb3J0LCBtLT5taC5tc2dfaWQpOworCisJc3dpdGNoIChtLT5taC5tc2dfaWQpIHsKKwljYXNlIEJGSV9QT1JUX0kySF9FTkFCTEVfUlNQOgorCQlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZyA9PSBCRkFfRkFMU0UpCisJCQlicmVhazsKKwkJYmZhX3BvcnRfZW5hYmxlX2lzcihwb3J0LCBpMmhtc2ctPmVuYWJsZV9yc3Auc3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9QT1JUX0kySF9ESVNBQkxFX1JTUDoKKwkJaWYgKHBvcnQtPmVuZGlzX3BlbmRpbmcgPT0gQkZBX0ZBTFNFKQorCQkJYnJlYWs7CisJCWJmYV9wb3J0X2Rpc2FibGVfaXNyKHBvcnQsIGkyaG1zZy0+ZGlzYWJsZV9yc3Auc3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9QT1JUX0kySF9HRVRfU1RBVFNfUlNQOgorCQkvKgorCQkgKiBTdGF0cyBidXN5IGZsYWcgaXMgc3RpbGwgc2V0PyAobWF5IGJlIGNtZCB0aW1lZCBvdXQpCisJCSAqLworCQlpZiAocG9ydC0+c3RhdHNfYnVzeSA9PSBCRkFfRkFMU0UpCisJCQlicmVhazsKKwkJYmZhX3BvcnRfZ2V0X3N0YXRzX2lzcihwb3J0LCBpMmhtc2ctPmdldHN0YXRzX3JzcC5zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgQkZJX1BPUlRfSTJIX0NMRUFSX1NUQVRTX1JTUDoKKwkJaWYgKHBvcnQtPnN0YXRzX2J1c3kgPT0gQkZBX0ZBTFNFKQorCQkJYnJlYWs7CisJCWJmYV9wb3J0X2NsZWFyX3N0YXRzX2lzcihwb3J0LCBpMmhtc2ctPmNsZWFyc3RhdHNfcnNwLnN0YXR1cyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogYmZhX3BvcnRfbWVtaW5mbygpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gdm9pZAorICoKKyAqIEByZXR1cm4gU2l6ZSBvZiBETUEgcmVnaW9uCisgKi8KK3UzMgorYmZhX3BvcnRfbWVtaW5mbyh2b2lkKQoreworCXJldHVybiBCRkFfUk9VTkRVUChzaXplb2YodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UpLCBCRkFfRE1BX0FMSUdOX1NaKTsKK30KKworLyoqCisgKiBiZmFfcG9ydF9tZW1fY2xhaW0oKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgUG9ydCBtb2R1bGUgcG9pbnRlcgorICogCSAgICAgIGRtYV9rdmEgS2VybmVsIFZpcnR1YWwgQWRkcmVzcyBvZiBQb3J0IERNQSBNZW1vcnkKKyAqIAkgICAgICBkbWFfcGEgIFBoeXNpY2FsIEFkZHJlc3Mgb2YgUG9ydCBETUEgTWVtb3J5CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3ZvaWQKK2JmYV9wb3J0X21lbV9jbGFpbShzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgdTggKmRtYV9rdmEsIHU2NCBkbWFfcGEpCit7CisJcG9ydC0+c3RhdHNfZG1hLmt2YSA9IGRtYV9rdmE7CisJcG9ydC0+c3RhdHNfZG1hLnBhID0gZG1hX3BhOworfQorCisvKioKKyAqIGJmYV9wb3J0X2VuYWJsZSgpCisgKgorICogICBTZW5kIHRoZSBQb3J0IGVuYWJsZSByZXF1ZXN0IHRvIHRoZSBmL3cKKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3BvcnRfZW5hYmxlKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBiZmFfcG9ydF9lbmRpc19jYmZuX3QgY2JmbiwKKwkJdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MgKm07CisKKwkvKiogdG9kbyBOb3QgaW1wbGVtZW50ZWQgKi8KKwliZmFfYXNzZXJ0KDApOworCisJaWYgKCFiZmFfaW9jX2lzX29wZXJhdGlvbmFsKHBvcnQtPmlvYykpIHsKKwkJYmZhX3RyYyhwb3J0LCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCisJaWYgKHBvcnQtPmVuZGlzX3BlbmRpbmcpIHsKKwkJYmZhX3RyYyhwb3J0LCBCRkFfU1RBVFVTX0RFVkJVU1kpOworCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCX0KKworCW0gPSAoc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MgKilwb3J0LT5lbmRpc19tYi5tc2c7CisKKwlwb3J0LT5tc2d0YWcrKzsKKwlwb3J0LT5lbmRpc19jYmZuID0gY2JmbjsKKwlwb3J0LT5lbmRpc19jYmFyZyA9IGNiYXJnOworCXBvcnQtPmVuZGlzX3BlbmRpbmcgPSBCRkFfVFJVRTsKKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfUE9SVCwgQkZJX1BPUlRfSDJJX0VOQUJMRV9SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChwb3J0LT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUocG9ydC0+aW9jLCAmcG9ydC0+ZW5kaXNfbWIpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX3BvcnRfZGlzYWJsZSgpCisgKgorICogICBTZW5kIHRoZSBQb3J0IGRpc2FibGUgcmVxdWVzdCB0byB0aGUgZi93CisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCitiZmFfc3RhdHVzX3QKK2JmYV9wb3J0X2Rpc2FibGUoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9wb3J0X2VuZGlzX2NiZm5fdCBjYmZuLAorCQkgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MgKm07CisKKwkvKiogdG9kbyBOb3QgaW1wbGVtZW50ZWQgKi8KKwliZmFfYXNzZXJ0KDApOworCisJaWYgKCFiZmFfaW9jX2lzX29wZXJhdGlvbmFsKHBvcnQtPmlvYykpIHsKKwkJYmZhX3RyYyhwb3J0LCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCisJaWYgKHBvcnQtPmVuZGlzX3BlbmRpbmcpIHsKKwkJYmZhX3RyYyhwb3J0LCBCRkFfU1RBVFVTX0RFVkJVU1kpOworCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCX0KKworCW0gPSAoc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MgKilwb3J0LT5lbmRpc19tYi5tc2c7CisKKwlwb3J0LT5tc2d0YWcrKzsKKwlwb3J0LT5lbmRpc19jYmZuID0gY2JmbjsKKwlwb3J0LT5lbmRpc19jYmFyZyA9IGNiYXJnOworCXBvcnQtPmVuZGlzX3BlbmRpbmcgPSBCRkFfVFJVRTsKKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfUE9SVCwgQkZJX1BPUlRfSDJJX0RJU0FCTEVfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQocG9ydC0+aW9jKSk7CisJYmZhX2lvY19tYm94X3F1ZXVlKHBvcnQtPmlvYywgJnBvcnQtPmVuZGlzX21iKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9wb3J0X2dldF9zdGF0cygpCisgKgorICogICBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBmL3cgdG8gZmV0Y2ggUG9ydCBzdGF0aXN0aWNzLgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworYmZhX3N0YXR1c190CitiZmFfcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cywKKwkJICAgYmZhX3BvcnRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfcG9ydF9nZXRfc3RhdHNfcmVxX3MgKm07CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwocG9ydC0+aW9jKSkgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfREVWQlVTWSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCisJbSA9IChzdHJ1Y3QgYmZpX3BvcnRfZ2V0X3N0YXRzX3JlcV9zICopcG9ydC0+c3RhdHNfbWIubXNnOworCisJcG9ydC0+c3RhdHMgPSBzdGF0czsKKwlwb3J0LT5zdGF0c19jYmZuID0gY2JmbjsKKwlwb3J0LT5zdGF0c19jYmFyZyA9IGNiYXJnOworCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfVFJVRTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KG0tPmRtYV9hZGRyLCBwb3J0LT5zdGF0c19kbWEucGEpOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19QT1JULCBCRklfUE9SVF9IMklfR0VUX1NUQVRTX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKHBvcnQtPmlvYykpOworCWJmYV9pb2NfbWJveF9xdWV1ZShwb3J0LT5pb2MsICZwb3J0LT5zdGF0c19tYik7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfcG9ydF9jbGVhcl9zdGF0cygpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworYmZhX3N0YXR1c190CitiZmFfcG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3BvcnRfc3RhdHNfY2Jmbl90IGNiZm4sCisJCSAgICAgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MgKm07CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwocG9ydC0+aW9jKSkgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfREVWQlVTWSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCisJbSA9IChzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqKXBvcnQtPnN0YXRzX21iLm1zZzsKKworCXBvcnQtPnN0YXRzX2NiZm4gPSBjYmZuOworCXBvcnQtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19QT1JULCBCRklfUE9SVF9IMklfQ0xFQVJfU1RBVFNfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQocG9ydC0+aW9jKSk7CisJYmZhX2lvY19tYm94X3F1ZXVlKHBvcnQtPmlvYywgJnBvcnQtPnN0YXRzX21iKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9wb3J0X2hiZmFpbCgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3ZvaWQKK2JmYV9wb3J0X2hiZmFpbCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wb3J0X3MgKilhcmc7CisKKwkvKgorCSAqIEZhaWwgYW55IHBlbmRpbmcgZ2V0X3N0YXRzL2NsZWFyX3N0YXRzIHJlcXVlc3RzCisJICovCisJaWYgKHBvcnQtPnN0YXRzX2J1c3kpIHsKKwkJaWYgKHBvcnQtPnN0YXRzX2NiZm4pCisJCQlwb3J0LT5zdGF0c19jYmZuKHBvcnQtPmRldiwgQkZBX1NUQVRVU19GQUlMRUQpOworCQlwb3J0LT5zdGF0c19jYmZuID0gTlVMTDsKKwkJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwl9CisKKwkvKgorCSAqIENsZWFyIGFueSBlbmFibGUvZGlzYWJsZSBpcyBwZW5kaW5nCisJICovCisJaWYgKHBvcnQtPmVuZGlzX3BlbmRpbmcpIHsKKwkJaWYgKHBvcnQtPmVuZGlzX2NiZm4pCisJCQlwb3J0LT5lbmRpc19jYmZuKHBvcnQtPmRldiwgQkZBX1NUQVRVU19GQUlMRUQpOworCQlwb3J0LT5lbmRpc19jYmZuID0gTlVMTDsKKwkJcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwl9Cit9CisKKy8qKgorICogYmZhX3BvcnRfYXR0YWNoKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBwb3J0IC0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgaW9jICAtIFBvaW50ZXIgdG8gdGhlIGlvYyBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgZGV2ICAtIFBvaW50ZXIgdG8gdGhlIGRldmljZSBkcml2ZXIgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgICAgICBUaGUgZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBtYm94IElTUiBmdW5jdGlvbnMgaGF2ZQorICogICAgICAgICAgICAgICAgICAgdGhpcyBwb2ludGVyIGFzIG9uZSBvZiB0aGUgcGFyYW1ldGVycy4KKyAqICAgICAgICAgICAgdHJjbW9kIC0KKyAqICAgICAgICAgICAgbG9nbW9kIC0KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX3BvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRldiwKKwkJc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCkKK3sKKwliZmFfYXNzZXJ0KHBvcnQpOworCisJcG9ydC0+ZGV2ID0gZGV2OworCXBvcnQtPmlvYyA9IGlvYzsKKwlwb3J0LT50cmNtb2QgPSB0cmNtb2Q7CisJcG9ydC0+bG9nbW9kID0gbG9nbW9kOworCisJcG9ydC0+c3RhdHNfYnVzeSA9IHBvcnQtPmVuZGlzX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJcG9ydC0+c3RhdHNfY2JmbiA9IHBvcnQtPmVuZGlzX2NiZm4gPSBOVUxMOworCisJYmZhX2lvY19tYm94X3JlZ2lzcihwb3J0LT5pb2MsIEJGSV9NQ19QT1JULCBiZmFfcG9ydF9pc3IsIHBvcnQpOworCWJmYV9pb2NfaGJmYWlsX2luaXQoJnBvcnQtPmhiZmFpbCwgYmZhX3BvcnRfaGJmYWlsLCBwb3J0KTsKKwliZmFfaW9jX2hiZmFpbF9yZWdpc3Rlcihwb3J0LT5pb2MsICZwb3J0LT5oYmZhaWwpOworCisJYmZhX3RyYyhwb3J0LCAwKTsKK30KKworLyoqCisgKiBiZmFfcG9ydF9kZXRhY2goKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICoKKyAqIEByZXR1cm4gdm9pZAorICovCit2b2lkCitiZmFfcG9ydF9kZXRhY2goc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQpCit7CisJYmZhX3RyYyhwb3J0LCAwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnRfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5N2UyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnRfcHJpdi5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9QT1JUX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX1BPUlRfUFJJVl9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX3Bwb3J0Lmg+CisjaW5jbHVkZSAiYmZhX2ludHJfcHJpdi5oIgorCisvKioKKyAqIEJGQSBwaHlzaWNhbCBwb3J0IGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfcyB7CisJc3RydWN0IGJmYV9zIAkJKmJmYTsJLyogIHBhcmVudCBCRkEgaW5zdGFuY2UgKi8KKwliZmFfc21fdAkJc207CS8qICBwb3J0IHN0YXRlIG1hY2hpbmUgKi8KKwl3d25fdAkJCW53d247CS8qICBub2RlIHd3biBvZiBwaHlzaWNhbCBwb3J0ICovCisJd3duX3QJCQlwd3duOwkvKiAgcG9ydCB3d24gb2YgcGh5c2ljYWwgb3BydCAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkX3N1cDsKKwkJCQkJLyogIHN1cHBvcnRlZCBzcGVlZHMgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZDsJLyogIGN1cnJlbnQgc3BlZWQgKi8KKwllbnVtIGJmYV9wcG9ydF90b3BvbG9neSB0b3BvbG9neTsJLyogIGN1cnJlbnQgdG9wb2xvZ3kgKi8KKwl1OAkJCW15YWxwYTsJLyogIG15IEFMUEEgaW4gTE9PUCB0b3BvbG9neSAqLworCXU4CQkJcnN2ZFszXTsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2NmZ19zCWNmZzsJLyogIGN1cnJlbnQgcG9ydCBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGJmYV9xb3NfYXR0cl9zICBxb3NfYXR0cjsgICAvKiBRb1MgQXR0cmlidXRlcyAqLworCXN0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyBxb3NfdmNfYXR0cjsgIC8qICBWQyBpbmZvIGZyb20gRUxQICovCisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcwlyZXFxX3dhaXQ7CisJCQkJCS8qICB0byB3YWl0IGZvciByb29tIGluIHJlcXEgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXN2Y3JlcV93YWl0OworCQkJCQkvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcwlzdGF0c19yZXFxX3dhaXQ7CisJCQkJCS8qICB0byB3YWl0IGZvciByb29tIGluIHJlcXEgKHN0YXRzKSAqLworCXZvaWQJCQkqZXZlbnRfY2Jhcmc7CisJdm9pZAkJCSgqZXZlbnRfY2JmbikgKHZvaWQgKmNiYXJnLAorCQkJCQkJYmZhX3Bwb3J0X2V2ZW50X3QgZXZlbnQpOworCXVuaW9uIHsKKwkJdW5pb24gYmZpX3Bwb3J0X2kyaF9tc2dfdSBpMmhtc2c7CisJfSBldmVudF9hcmc7CisJdm9pZAkJCSpiZmFkOwkvKiAgQkZBIGRyaXZlciBoYW5kbGUgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MJCWhjYl9xZTsJLyogIEJGQSBjYWxsYmFjayBxdWV1ZSBlbGVtICovCisJZW51bSBiZmFfcHBvcnRfbGlua3N0YXRlCWhjYl9ldmVudDsKKwkJCQkJLyogIGxpbmsgZXZlbnQgZm9yIGNhbGxiYWNrICovCisJdTMyCQltc2d0YWc7CS8qICBmaW1yd2FyZSBtc2cgdGFnIGZvciByZXBseSAqLworCXU4CQkJKnN0YXRzX2t2YTsKKwl1NjQJCXN0YXRzX3BhOworCXVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0czsJLyogIHBwb3J0IHN0YXRzICovCisJdTMyCQlteXBpZCA6IDI0OworCXUzMgkJcnN2ZF9iIDogODsKKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCXRpbWVyOwkvKiAgdGltZXIgKi8KKwl1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAJKnN0YXRzX3JldDsKKwkJCQkJLyogIGRyaXZlciBzdGF0cyBsb2NhdGlvbiAqLworCWJmYV9zdGF0dXNfdAkJc3RhdHNfc3RhdHVzOworCQkJCQkvKiAgc3RhdHMvc3RhdHNjbHIgc3RhdHVzICovCisJYmZhX2Jvb2xlYW5fdCAgIAlzdGF0c19idXN5OworCQkJCQkvKiAgb3V0c3RhbmRpbmcgc3RhdHMvc3RhdHNjbHIgKi8KKwliZmFfYm9vbGVhbl90ICAgCXN0YXRzX3FmdWxsOworCWJmYV9ib29sZWFuX3QgICAJZGlhZ19idXN5OworCQkJCQkvKiAgZGlhZyBidXN5IHN0YXR1cyAqLworCWJmYV9ib29sZWFuX3QgICAJYmVhY29uOworCQkJCQkvKiAgcG9ydCBiZWFjb24gc3RhdHVzICovCisJYmZhX2Jvb2xlYW5fdCAgIAlsaW5rX2UyZV9iZWFjb247CisJCQkJCS8qICBsaW5rIGJlYWNvbiBzdGF0dXMgKi8KKwliZmFfY2JfcHBvcnRfdAkJc3RhdHNfY2JmbjsKKwkJCQkJLyogIGRyaXZlciBjYWxsYmFjayBmdW5jdGlvbiAqLworCXZvaWQJCQkqc3RhdHNfY2Jhcmc7CisJCQkJCS8qICohPCB1c2VyIGNhbGxiYWNrIGFyZyAqLworfTsKKworI2RlZmluZSBCRkFfUE9SVF9NT0QoX19iZmEpCSgmKF9fYmZhKS0+bW9kdWxlcy5wcG9ydCkKKworLyoKKyAqIHB1YmxpYyBmdW5jdGlvbnMKKyAqLwordm9pZAliZmFfcHBvcnRfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworI2VuZGlmIC8qIF9fQkZBX1BPUlRfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzQ3YTZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcHJpdi5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfUFJJVl9IX18KKworI2luY2x1ZGUgImJmYV9pb2NmYy5oIgorI2luY2x1ZGUgImJmYV9pbnRyX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfdHJjbW9kX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfbW9kdWxlc19wcml2LmgiCisjaW5jbHVkZSAiYmZhX2Z3aW1nX3ByaXYuaCIKKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSA8YmZhX3RpbWVyLmg+CisKKy8qKgorICogTWFjcm8gdG8gZGVmaW5lIGEgbmV3IEJGQSBtb2R1bGUKKyAqLworI2RlZmluZSBCRkFfTU9EVUxFKF9fbW9kKSAJCQkJCQlcCisJc3RhdGljIHZvaWQgYmZhXyAjIyBfX21vZCAjIyBfbWVtaW5mbygJCQkJXAorCQkJc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKm5kbV9sZW4sCVwKKwkJCXUzMiAqZG1fbGVuKTsgICAgICBcCisJc3RhdGljIHZvaWQgYmZhXyAjIyBfX21vZCAjIyBfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLAkJXAorCQkJdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCAJXAorCQkJc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sCQkJXAorCQkJc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KTsgICAgICBcCisJc3RhdGljIHZvaWQgYmZhXyAjIyBfX21vZCAjIyBfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsgICAgICBcCisJCQkJCQkJCQlcCisJZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF8gIyMgX19tb2Q7CQkJXAorCXN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF8gIyMgX19tb2QgPSB7CQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9tZW1pbmZvLAkJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX2F0dGFjaCwJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9pbml0ZG9uZSwJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9kZXRhY2gsCQkJCVwKKwkJYmZhXyAjIyBfX21vZCAjIyBfc3RhcnQsCQkJCVwKKwkJYmZhXyAjIyBfX21vZCAjIyBfc3RvcCwJCQkJCVwKKwkJYmZhXyAjIyBfX21vZCAjIyBfaW9jZGlzYWJsZSwJCQkJXAorCX0KKworI2RlZmluZSBCRkFfQ0FDSEVMSU5FX1NaCSgyNTYpCisKKy8qKgorICogU3RydWN0dXJlIHVzZWQgdG8gaW50ZXJhY3QgYmV0d2VlbiBkaWZmZXJlbnQgQkZBIHN1YiBtb2R1bGVzCisgKgorICogRWFjaCBzdWIgbW9kdWxlIG5lZWRzIHRvIGltcGxlbWVudCBvbmx5IHRoZSBlbnRyeSBwb2ludHMgcmVsZXZhbnQgdG8gaXQgKGFuZAorICogY2FuIGxlYXZlIGVudHJ5IHBvaW50cyBhcyBOVUxMKQorICovCitzdHJ1Y3QgYmZhX21vZHVsZV9zIHsKKwl2b2lkICgqbWVtaW5mbykgKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCQl1MzIgKmRtX2xlbik7CisJdm9pZCAoKmF0dGFjaCkgKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLAorCQkJc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkJc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sCisJCQlzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpOworCXZvaWQgKCppbml0ZG9uZSkgKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqZGV0YWNoKSAoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCpzdGFydCkgKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqc3RvcCkgKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqaW9jZGlzYWJsZSkgKHN0cnVjdCBiZmFfcyAqYmZhKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zICpoYWxfbW9kc1tdOworCitzdHJ1Y3QgYmZhX3MgeworCXZvaWQJCQkqYmZhZDsJCS8qICBCRkEgZHJpdmVyIGluc3RhbmNlICAgICovCisJc3RydWN0IGJmYV9hZW5fcwkqYWVuOwkJLyogIEFFTiBtb2R1bGUJCSAgICAqLworCXN0cnVjdCBiZmFfcGxvZ19zCSpwbG9nOwkJLyogIHBvcnRsb2cgYnVmZmVyCSAgICAqLworCXN0cnVjdCBiZmFfbG9nX21vZF9zCSpsb2dtOwkJLyogIGRyaXZlciBsb2dnaW5nIG1vZHVsZW4gKi8KKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcwkqdHJjbW9kOwkvKiAgZHJpdmVyIHRyYWNpbmcJICAgICovCisJc3RydWN0IGJmYV9pb2Nfcwlpb2M7CQkvKiAgSU9DIG1vZHVsZQkJICAgICovCisJc3RydWN0IGJmYV9pb2NmY19zCWlvY2ZjOwkJLyogIElPQ0ZDIG1vZHVsZQkgICAgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zCXRpbWVyX21vZDsJLyogIHRpbWVyIG1vZHVsZQkgICAgKi8KKwlzdHJ1Y3QgYmZhX21vZHVsZXNfcwltb2R1bGVzOwkvKiAgQkZBIG1vZHVsZXMJICAgICovCisJc3RydWN0IGxpc3RfaGVhZAljb21wX3E7CQkvKiAgcGVuZGluZyBjb21wbGV0aW9ucyAgICAqLworCWJmYV9ib29sZWFuX3QJCXJtZV9wcm9jZXNzOwkvKiAgUk1FIHByb2Nlc3NpbmcgZW5hYmxlZCAqLworCXN0cnVjdCBsaXN0X2hlYWQJCXJlcXFfd2FpdHFbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfYm9vbGVhbl90CQlmY3M7CQkvKiAgRkNTIGlzIGF0dGFjaGVkIHRvIEJGQSAqLworCXN0cnVjdCBiZmFfbXNpeF9zCW1zaXg7Cit9OworCitleHRlcm4gYmZhX2lzcl9mdW5jX3QgYmZhX2lzcnNbQkZJX01DX01BWF07CitleHRlcm4gYmZhX2lvY19tYm94X21jZnVuY190ICBiZmFfbWJveF9pc3JzW107CitleHRlcm4gYmZhX2Jvb2xlYW5fdCBiZmFfYXV0b19yZWNvdmVyOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9mbGFzaDsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfZmNkaWFnOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9zZ3BnOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9wcG9ydDsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfZmN4cDsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfbHBzOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF91ZjsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfcnBvcnQ7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX2ZjcGltOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9wYmluZDsKKworI2VuZGlmIC8qIF9fQkZBX1BSSVZfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9ycG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZGE3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9ycG9ydC5jCkBAIC0wLDAgKzEsOTExIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9ycG9ydC5oPgorI2luY2x1ZGUgImJmYV9pbnRyX3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEhBTCwgUlBPUlQpOworQkZBX01PRFVMRShycG9ydCk7CisKKyNkZWZpbmUgYmZhX3Jwb3J0X29mZmxpbmVfY2IoX19ycCkgZG8gewkJCQlcCisJaWYgKChfX3JwKS0+YmZhLT5mY3MpCQkJCQkJXAorCQliZmFfY2JfcnBvcnRfb2ZmbGluZSgoX19ycCktPnJwb3J0X2Rydik7ICAgICAgXAorCWVsc2UgewkJCQkJCQkJXAorCQliZmFfY2JfcXVldWUoKF9fcnApLT5iZmEsICYoX19ycCktPmhjYl9xZSwJCVwKKwkJCQlfX2JmYV9jYl9ycG9ydF9vZmZsaW5lLCAoX19ycCkpOyAgICAgIFwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9ycG9ydF9vbmxpbmVfY2IoX19ycCkgZG8gewkJCQlcCisJaWYgKChfX3JwKS0+YmZhLT5mY3MpCQkJCQkJXAorCQliZmFfY2JfcnBvcnRfb25saW5lKChfX3JwKS0+cnBvcnRfZHJ2KTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19ycCktPmJmYSwgJihfX3JwKS0+aGNiX3FlLAkJXAorCQkJCSAgX19iZmFfY2JfcnBvcnRfb25saW5lLCAoX19ycCkpOyAgICAgIFwKKwkJfQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0X2FsbG9jKHN0cnVjdCBiZmFfcnBvcnRfbW9kX3MgKnJwX21vZCk7CitzdGF0aWMgdm9pZCBiZmFfcnBvcnRfZnJlZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnApOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfcnBvcnRfc2VuZF9md3NwZWVkKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnApOworc3RhdGljIHZvaWQgX19iZmFfY2JfcnBvcnRfb25saW5lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX3Jwb3J0X29mZmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworCisvKioKKyAqICBiZmFfcnBvcnRfc20gQkZBIHJwb3J0IHN0YXRlIG1hY2hpbmUKKyAqLworCisKK2VudW0gYmZhX3Jwb3J0X2V2ZW50IHsKKwlCRkFfUlBPUlRfU01fQ1JFQVRFCT0gMSwJLyogIHJwb3J0IGNyZWF0ZSBldmVudAkJKi8KKwlCRkFfUlBPUlRfU01fREVMRVRFCT0gMiwJLyogIGRlbGV0aW5nIGFuIGV4aXN0aW5nIHJwb3J0ICovCisJQkZBX1JQT1JUX1NNX09OTElORQk9IDMsCS8qICBycG9ydCBpcyBvbmxpbmUJCSovCisJQkZBX1JQT1JUX1NNX09GRkxJTkUJPSA0LAkvKiAgcnBvcnQgaXMgb2ZmbGluZQkJKi8KKwlCRkFfUlBPUlRfU01fRldSU1AJPSA1LAkvKiAgZmlybXdhcmUgcmVzcG9uc2UJCSovCisJQkZBX1JQT1JUX1NNX0hXRkFJTAk9IDYsCS8qICBJT0MgaC93IGZhaWx1cmUJCSovCisJQkZBX1JQT1JUX1NNX1FPU19TQ04JPSA3LAkvKiAgUW9TIFNDTiBmcm9tIGZpcm13YXJlCSovCisJQkZBX1JQT1JUX1NNX1NFVF9TUEVFRAk9IDgsCS8qICBTZXQgUnBvcnQgU3BlZWQgCQkqLworCUJGQV9SUE9SVF9TTV9RUkVTVU1FCT0gOSwJLyogIHNwYWNlIGluIHJlcXVldWUgcXVldWUJKi8KK307CisKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9md2NyZWF0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9vZmZsaW5lX3BlbmRpbmcoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZGVsZXRlX3BlbmRpbmcoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgICAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlX3FmdWxsKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlX3FmdWxsKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2RlbGV0aW5nX3FmdWxsKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworCisvKioKKyAqIEJlZ2lubmluZyBzdGF0ZSwgb25seSBvbmxpbmUgZXZlbnQgZXhwZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fQ1JFQVRFOgorCQliZmFfc3RhdHMocnAsIHNtX3VuX2NyKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2NyZWF0ZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fdW5fdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9jcmVhdGVkKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fT05MSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX2NyX29uKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX2NyX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX2NyX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2NyX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogV2FpdGluZyBmb3IgcnBvcnQgY3JlYXRlIHJlc3BvbnNlIGZyb20gZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZndjcmVhdGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9GV1JTUDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfcnNwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX29ubGluZSk7CisJCWJmYV9ycG9ydF9vbmxpbmVfY2IocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0ZV9wZW5kaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19vZmYpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fb2ZmbGluZV9wZW5kaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y191bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFJlcXVlc3QgcXVldWUgaXMgZnVsbCwgYXdhaXRpbmcgcXVldWUgcmVzdW1lIHRvIHNlbmQgY3JlYXRlIHJlcXVlc3QuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZndjcmVhdGVfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndjcmVhdGUpOworCQliZmFfcnBvcnRfc2VuZF9md2NyZWF0ZShycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19kZWwpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19vZmYpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnJwLT5yZXFxX3dhaXQpOworCQliZmFfcnBvcnRfb2ZmbGluZV9jYihycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnJwLT5yZXFxX3dhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogT25saW5lIHN0YXRlIC0gbm9ybWFsIHBhcmtpbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmlfcnBvcnRfcW9zX3Njbl9zICpxb3Nfc2NuOworCisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX29uX29mZik7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndkZWxldGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndkZWxldGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9vbl9kZWwpOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fb25faHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX1NFVF9TUEVFRDoKKwkJYmZhX3Jwb3J0X3NlbmRfZndzcGVlZChycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fUU9TX1NDTjoKKwkJcW9zX3NjbiA9IChzdHJ1Y3QgYmZpX3Jwb3J0X3Fvc19zY25fcyAqKSBycC0+ZXZlbnRfYXJnLmZ3X21zZzsKKwkJcnAtPnFvc19hdHRyID0gcW9zX3Njbi0+bmV3X3Fvc19hdHRyOworCQliZmFfdHJjKHJwLT5iZmEsIHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfZmxvd19pZCk7CisJCWJmYV90cmMocnAtPmJmYSwgcW9zX3Njbi0+bmV3X3Fvc19hdHRyLnFvc19mbG93X2lkKTsKKwkJYmZhX3RyYyhycC0+YmZhLCBxb3Nfc2NuLT5vbGRfcW9zX2F0dHIucW9zX3ByaW9yaXR5KTsKKwkJYmZhX3RyYyhycC0+YmZhLCBxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX3ByaW9yaXR5KTsKKworCQlxb3Nfc2NuLT5vbGRfcW9zX2F0dHIucW9zX2Zsb3dfaWQgID0KKwkJCWJmYV9vc19udG9obChxb3Nfc2NuLT5vbGRfcW9zX2F0dHIucW9zX2Zsb3dfaWQpOworCQlxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX2Zsb3dfaWQgID0KKwkJCWJmYV9vc19udG9obChxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX2Zsb3dfaWQpOworCQlxb3Nfc2NuLT5vbGRfcW9zX2F0dHIucW9zX3ByaW9yaXR5ID0KKwkJCWJmYV9vc19udG9obChxb3Nfc2NuLT5vbGRfcW9zX2F0dHIucW9zX3ByaW9yaXR5KTsKKwkJcW9zX3Njbi0+bmV3X3Fvc19hdHRyLnFvc19wcmlvcml0eSA9CisJCQliZmFfb3NfbnRvaGwocW9zX3Njbi0+bmV3X3Fvc19hdHRyLnFvc19wcmlvcml0eSk7CisKKwkJaWYgKHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfZmxvd19pZCAhPQorCQkJcW9zX3Njbi0+bmV3X3Fvc19hdHRyLnFvc19mbG93X2lkKQorCQkJYmZhX2NiX3Jwb3J0X3Fvc19zY25fZmxvd2lkKHJwLT5ycG9ydF9kcnYsCisJCQkJCQkgICAgcW9zX3Njbi0+b2xkX3Fvc19hdHRyLAorCQkJCQkJICAgIHFvc19zY24tPm5ld19xb3NfYXR0cik7CisJCWlmIChxb3Nfc2NuLT5vbGRfcW9zX2F0dHIucW9zX3ByaW9yaXR5ICE9CisJCQlxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX3ByaW9yaXR5KQorCQkJYmZhX2NiX3Jwb3J0X3Fvc19zY25fcHJpbyhycC0+cnBvcnRfZHJ2LAorCQkJCQkJICBxb3Nfc2NuLT5vbGRfcW9zX2F0dHIsCisJCQkJCQkgIHFvc19zY24tPm5ld19xb3NfYXR0cik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vbl91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIEZpcm13YXJlIHJwb3J0IGlzIGJlaW5nIGRlbGV0ZWQgLSBhd2FpdGluZyBmL3cgcmVzcG9uc2UuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZndkZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9GV1JTUDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2RfcnNwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfcnBvcnRfb2ZmbGluZV9jYihycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF9kZWwpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2RfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQliZmFfcnBvcnRfb2ZmbGluZV9jYihycCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2RfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9md2RlbGV0ZV9xZnVsbChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2RlbGV0ZSk7CisJCWJmYV9ycG9ydF9zZW5kX2Z3ZGVsZXRlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGluZ19xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnJwLT5yZXFxX3dhaXQpOworCQliZmFfcnBvcnRfb2ZmbGluZV9jYihycCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2RfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBPZmZsaW5lIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fT05MSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX29mZl9vbik7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2NyZWF0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndjcmVhdGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndjcmVhdGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogUnBvcnQgaXMgZGVsZXRlZCwgd2FpdGluZyBmb3IgZmlybXdhcmUgcmVzcG9uc2UgdG8gZGVsZXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fRldSU1A6CisJCWJmYV9zdGF0cyhycCwgc21fZGVsX2Z3cnNwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZGVsX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZGVsZXRpbmdfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9RUkVTVU1FOgorCQliZmFfc3RhdHMocnAsIHNtX2RlbF9md3JzcCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGluZyk7CisJCWJmYV9ycG9ydF9zZW5kX2Z3ZGVsZXRlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZGVsX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZycC0+cmVxcV93YWl0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFdhaXRpbmcgZm9yIHJwb3J0IGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLiBBIGRlbGV0ZSBpcyBwZW5kaW5nLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2RlbGV0ZV9wZW5kaW5nKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9GV1JTUDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxwX2Z3cnNwKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3ZGVsZXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGluZ19xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX2RlbHBfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2RlbHBfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBXYWl0aW5nIGZvciBycG9ydCBjcmVhdGUgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZS4gUnBvcnQgb2ZmbGluZSBpcyBwZW5kaW5nLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX29mZmxpbmVfcGVuZGluZyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCSBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX29mZnBfZndyc3ApOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmcF9kZWwpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRlX3BlbmRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZwX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX29mZnBfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBJT0MgaC93IGZhaWxlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3N0YXRzKHJwLCBzbV9pb2NkX29mZik7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21faW9jZF9kZWwpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX09OTElORToKKwkJYmZhX3N0YXRzKHJwLCBzbV9pb2NkX29uKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21faW9jZF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX3Jwb3J0X3ByaXZhdGUgQkZBIHJwb3J0IHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3Jwb3J0X29ubGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpCisJCWJmYV9jYl9ycG9ydF9vbmxpbmUocnAtPnJwb3J0X2Rydik7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9ycG9ydF9vZmZsaW5lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnAgPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkKKwkJYmZhX2NiX3Jwb3J0X29mZmxpbmUocnAtPnJwb3J0X2Rydik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfcXJlc3VtZSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MJKnJwID0gY2Jhcmc7CisKKwliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX1FSRVNVTUUpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJaWYgKGNmZy0+ZndjZmcubnVtX3Jwb3J0cyA8IEJGQV9SUE9SVF9NSU4pCisJCWNmZy0+ZndjZmcubnVtX3Jwb3J0cyA9IEJGQV9SUE9SVF9NSU47CisKKwkqa21fbGVuICs9IGNmZy0+ZndjZmcubnVtX3Jwb3J0cyAqIHNpemVvZihzdHJ1Y3QgYmZhX3Jwb3J0X3MpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9ycG9ydF9tb2RfcyAqbW9kID0gQkZBX1JQT1JUX01PRChiZmEpOworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnA7CisJdTE2ICAgICAgICBpOworCisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+cnBfZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5ycF9hY3RpdmVfcSk7CisKKwlycCA9IChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKikgYmZhX21lbWluZm9fa3ZhKG1lbWluZm8pOworCW1vZC0+cnBzX2xpc3QgPSBycDsKKwltb2QtPm51bV9ycG9ydHMgPSBjZmctPmZ3Y2ZnLm51bV9ycG9ydHM7CisKKwliZmFfYXNzZXJ0KG1vZC0+bnVtX3Jwb3J0cworCQkgICAmJiAhKG1vZC0+bnVtX3Jwb3J0cyAmIChtb2QtPm51bV9ycG9ydHMgLSAxKSkpOworCisJZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX3Jwb3J0czsgaSsrLCBycCsrKSB7CisJCWJmYV9vc19tZW1zZXQocnAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Jwb3J0X3MpKTsKKwkJcnAtPmJmYSA9IGJmYTsKKwkJcnAtPnJwb3J0X3RhZyA9IGk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCisJCS8qKgorCQkgKiAgLSBpcyB1bnVzZWQKKwkJICovCisJCWlmIChpKQorCQkJbGlzdF9hZGRfdGFpbCgmcnAtPnFlLCAmbW9kLT5ycF9mcmVlX3EpOworCisJCWJmYV9yZXFxX3dpbml0KCZycC0+cmVxcV93YWl0LCBiZmFfcnBvcnRfcXJlc3VtZSwgcnApOworCX0KKworCS8qKgorCSAqIGNvbnN1bWUgbWVtb3J5CisJICovCisJYmZhX21lbWluZm9fa3ZhKG1lbWluZm8pID0gKHU4ICopIHJwOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9ycG9ydF9tb2RfcyAqbW9kID0gQkZBX1JQT1JUX01PRChiZmEpOworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZtb2QtPnJwX2FjdGl2ZV9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfcnBvcnRfcyAqKSBxZTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9IV0ZBSUwpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBiZmFfcnBvcnRfcyAqCitiZmFfcnBvcnRfYWxsb2Moc3RydWN0IGJmYV9ycG9ydF9tb2RfcyAqbW9kKQoreworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfcV9kZXEoJm1vZC0+cnBfZnJlZV9xLCAmcnBvcnQpOworCWlmIChycG9ydCkKKwkJbGlzdF9hZGRfdGFpbCgmcnBvcnQtPnFlLCAmbW9kLT5ycF9hY3RpdmVfcSk7CisKKwlyZXR1cm4gKHJwb3J0KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9mcmVlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9ycG9ydF9tb2RfcyAqbW9kID0gQkZBX1JQT1JUX01PRChycG9ydC0+YmZhKTsKKworCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmbW9kLT5ycF9hY3RpdmVfcSwgcnBvcnQpKTsKKwlsaXN0X2RlbCgmcnBvcnQtPnFlKTsKKwlsaXN0X2FkZF90YWlsKCZycG9ydC0+cWUsICZtb2QtPnJwX2ZyZWVfcSk7Cit9CisKK3N0YXRpYyBiZmFfYm9vbGVhbl90CitiZmFfcnBvcnRfc2VuZF9md2NyZWF0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwKQoreworCXN0cnVjdCBiZmlfcnBvcnRfY3JlYXRlX3JlcV9zICptOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JUKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3JlcXFfd2FpdChycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCwgJnJwLT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfUlBPUlQsIEJGSV9SUE9SVF9IMklfQ1JFQVRFX1JFUSwKKwkJCWJmYV9scHVpZChycC0+YmZhKSk7CisJbS0+YmZhX2hhbmRsZSA9IHJwLT5ycG9ydF90YWc7CisJbS0+bWF4X2ZybXN6ID0gYmZhX29zX2h0b25zKHJwLT5ycG9ydF9pbmZvLm1heF9mcm1zeik7CisJbS0+cGlkID0gcnAtPnJwb3J0X2luZm8ucGlkOworCW0tPmxwX3RhZyA9IHJwLT5ycG9ydF9pbmZvLmxwX3RhZzsKKwltLT5sb2NhbF9waWQgPSBycC0+cnBvcnRfaW5mby5sb2NhbF9waWQ7CisJbS0+ZmNfY2xhc3MgPSBycC0+cnBvcnRfaW5mby5mY19jbGFzczsKKwltLT52Zl9lbiA9IHJwLT5ycG9ydF9pbmZvLnZmX2VuOworCW0tPnZmX2lkID0gcnAtPnJwb3J0X2luZm8udmZfaWQ7CisJbS0+Y2lzYyA9IHJwLT5ycG9ydF9pbmZvLmNpc2M7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9ycG9ydF9zZW5kX2Z3ZGVsZXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnApCit7CisJc3RydWN0IGJmaV9ycG9ydF9kZWxldGVfcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JULCAmcnAtPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19SUE9SVCwgQkZJX1JQT1JUX0gySV9ERUxFVEVfUkVRLAorCQkJYmZhX2xwdWlkKHJwLT5iZmEpKTsKKwltLT5md19oYW5kbGUgPSBycC0+ZndfaGFuZGxlOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JUKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3N0YXRpYyBiZmFfYm9vbGVhbl90CitiZmFfcnBvcnRfc2VuZF9md3NwZWVkKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnApCit7CisJc3RydWN0IGJmYV9ycG9ydF9zcGVlZF9yZXFfcyAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCk7CisJaWYgKCFtKSB7CisJCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X2luZm8uc3BlZWQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfUlBPUlQsIEJGSV9SUE9SVF9IMklfU0VUX1NQRUVEX1JFUSwKKwkJCWJmYV9scHVpZChycC0+YmZhKSk7CisJbS0+ZndfaGFuZGxlID0gcnAtPmZ3X2hhbmRsZTsKKwltLT5zcGVlZCA9ICh1OClycC0+cnBvcnRfaW5mby5zcGVlZDsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisKKworLyoqCisgKiAgYmZhX3Jwb3J0X3B1YmxpYworICovCisKKy8qKgorICogCQlScG9ydCBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4KKyAqLwordm9pZAorYmZhX3Jwb3J0X2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwl1bmlvbiBiZmlfcnBvcnRfaTJoX21zZ191IG1zZzsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwOworCisJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXNnX2lkKTsKKworCW1zZy5tc2cgPSBtOworCisJc3dpdGNoIChtLT5taGRyLm1zZ19pZCkgeworCWNhc2UgQkZJX1JQT1JUX0kySF9DUkVBVEVfUlNQOgorCQlycCA9IEJGQV9SUE9SVF9GUk9NX1RBRyhiZmEsIG1zZy5jcmVhdGVfcnNwLT5iZmFfaGFuZGxlKTsKKwkJcnAtPmZ3X2hhbmRsZSA9IG1zZy5jcmVhdGVfcnNwLT5md19oYW5kbGU7CisJCXJwLT5xb3NfYXR0ciA9IG1zZy5jcmVhdGVfcnNwLT5xb3NfYXR0cjsKKwkJYmZhX2Fzc2VydChtc2cuY3JlYXRlX3JzcC0+c3RhdHVzID09IEJGQV9TVEFUVVNfT0spOworCQliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX0ZXUlNQKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9SUE9SVF9JMkhfREVMRVRFX1JTUDoKKwkJcnAgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBtc2cuZGVsZXRlX3JzcC0+YmZhX2hhbmRsZSk7CisJCWJmYV9hc3NlcnQobXNnLmRlbGV0ZV9yc3AtPnN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnAsIEJGQV9SUE9SVF9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUlBPUlRfSTJIX1FPU19TQ046CisJCXJwID0gQkZBX1JQT1JUX0ZST01fVEFHKGJmYSwgbXNnLnFvc19zY25fZXZ0LT5iZmFfaGFuZGxlKTsKKwkJcnAtPmV2ZW50X2FyZy5md19tc2cgPSBtc2cucW9zX3Njbl9ldnQ7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fUU9TX1NDTik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXNnX2lkKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfcnBvcnRfYXBpCisgKi8KKworc3RydWN0IGJmYV9ycG9ydF9zICoKK2JmYV9ycG9ydF9jcmVhdGUoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnJwb3J0X2RydikKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwOworCisJcnAgPSBiZmFfcnBvcnRfYWxsb2MoQkZBX1JQT1JUX01PRChiZmEpKTsKKworCWlmIChycCA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJcnAtPmJmYSA9IGJmYTsKKwlycC0+cnBvcnRfZHJ2ID0gcnBvcnRfZHJ2OworCWJmYV9ycG9ydF9jbGVhcl9zdGF0cyhycCk7CisKKwliZmFfYXNzZXJ0KGJmYV9zbV9jbXBfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpKTsKKwliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX0NSRUFURSk7CisKKwlyZXR1cm4gKHJwKTsKK30KKwordm9pZAorYmZhX3Jwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBCRkFfUlBPUlRfU01fREVMRVRFKTsKK30KKwordm9pZAorYmZhX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgYmZhX3Jwb3J0X2luZm9fcyAqcnBvcnRfaW5mbykKK3sKKwliZmFfYXNzZXJ0KHJwb3J0X2luZm8tPm1heF9mcm1zeiAhPSAwKTsKKworCS8qKgorCSAqIFNvbWUgSkJPRHMgYXJlIHNlZW4gdG8gYmUgbm90IHNldHRpbmcgUERVIHNpemUgY29ycmVjdGx5IGluIFBMT0dJCisJICogcmVzcG9uc2VzLiBEZWZhdWx0IHRvIG1pbmltdW0gc2l6ZS4KKwkgKi8KKwlpZiAocnBvcnRfaW5mby0+bWF4X2ZybXN6ID09IDApIHsKKwkJYmZhX3RyYyhycG9ydC0+YmZhLCBycG9ydC0+cnBvcnRfdGFnKTsKKwkJcnBvcnRfaW5mby0+bWF4X2ZybXN6ID0gRkNfTUlOX1BEVVNaOworCX0KKworCWJmYV9vc19hc3NpZ24ocnBvcnQtPnJwb3J0X2luZm8sICpycG9ydF9pbmZvKTsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX09OTElORSk7Cit9CisKK3ZvaWQKK2JmYV9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9PRkZMSU5FKTsKK30KKwordm9pZAorYmZhX3Jwb3J0X3NwZWVkKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIGVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKQoreworCWJmYV9hc3NlcnQoc3BlZWQgIT0gMCk7CisJYmZhX2Fzc2VydChzcGVlZCAhPSBCRkFfUFBPUlRfU1BFRURfQVVUTyk7CisKKwlycG9ydC0+cnBvcnRfaW5mby5zcGVlZCA9IHNwZWVkOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBCRkFfUlBPUlRfU01fU0VUX1NQRUVEKTsKK30KKwordm9pZAorYmZhX3Jwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LAorCXN0cnVjdCBiZmFfcnBvcnRfaGFsX3N0YXRzX3MgKnN0YXRzKQoreworCSpzdGF0cyA9IHJwb3J0LT5zdGF0czsKK30KKwordm9pZAorYmZhX3Jwb3J0X2dldF9xb3NfYXR0cihzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgKnFvc19hdHRyKQoreworCXFvc19hdHRyLT5xb3NfcHJpb3JpdHkgID0gYmZhX29zX250b2hsKHJwb3J0LT5xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCXFvc19hdHRyLT5xb3NfZmxvd19pZCAgPSBiZmFfb3NfbnRvaGwocnBvcnQtPnFvc19hdHRyLnFvc19mbG93X2lkKTsKKworfQorCit2b2lkCitiZmFfcnBvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfb3NfbWVtc2V0KCZycG9ydC0+c3RhdHMsIDAsIHNpemVvZihycG9ydC0+c3RhdHMpKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9ycG9ydF9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9ycG9ydF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5MGNlMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0X3ByaXYuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfUlBPUlRfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfUlBPUlRfUFJJVl9IX18KKworI2luY2x1ZGUgPGJmYV9zdmMuaD4KKworI2RlZmluZSBCRkFfUlBPUlRfTUlOCTQKKworc3RydWN0IGJmYV9ycG9ydF9tb2RfcyB7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycHNfbGlzdDsJLyogIGxpc3Qgb2YgcnBvcnRzCSovCisJc3RydWN0IGxpc3RfaGVhZCAJcnBfZnJlZV9xOwkvKiAgZnJlZSBiZmFfcnBvcnRzCSovCisJc3RydWN0IGxpc3RfaGVhZCAJcnBfYWN0aXZlX3E7CS8qICBmcmVlIGJmYV9ycG9ydHMgCSovCisJdTE2CW51bV9ycG9ydHM7CS8qICBudW1iZXIgb2YgcnBvcnRzCSovCit9OworCisjZGVmaW5lIEJGQV9SUE9SVF9NT0QoX19iZmEpCSgmKF9fYmZhKS0+bW9kdWxlcy5ycG9ydF9tb2QpCisKKy8qKgorICogQ29udmVydCBycG9ydCB0YWcgdG8gUlBPUlQKKyAqLworI2RlZmluZSBCRkFfUlBPUlRfRlJPTV9UQUcoX19iZmEsIF90YWcpCQkJCVwKKwkoQkZBX1JQT1JUX01PRChfX2JmYSktPnJwc19saXN0ICsJCQkJXAorCSAoKF90YWcpICYgKEJGQV9SUE9SVF9NT0QoX19iZmEpLT5udW1fcnBvcnRzIC0gMSkpKQorCisvKgorICogZXh0ZXJuYWwgZnVuY3Rpb25zCisgKi8KK3ZvaWQJYmZhX3Jwb3J0X2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKTsKKyNlbmRpZiAvKiBfX0JGQV9SUE9SVF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc2dwZy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc2dwZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OWQ4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnLmMKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBTR1BHKTsKK0JGQV9NT0RVTEUoc2dwZyk7CisKKy8qKgorICogIGJmYV9zZ3BnX21vZCBCRkEgU0dQRyBNb2RlIG1vZHVsZQorICovCisKKy8qKgorICogQ29tcHV0ZSBhbmQgcmV0dXJuIG1lbW9yeSBuZWVkZWQgYnkgRkNQKGltKSBtb2R1bGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfc2dwZ19tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCXUzMiAqZG1fbGVuKQoreworCWlmIChjZmctPmRydmNmZy5udW1fc2dwZ3MgPCBCRkFfU0dQR19NSU4pCisJCWNmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyA9IEJGQV9TR1BHX01JTjsKKworCSprbV9sZW4gKz0gKGNmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyArIDEpICogc2l6ZW9mKHN0cnVjdCBiZmFfc2dwZ19zKTsKKwkqZG1fbGVuICs9IChjZmctPmRydmNmZy5udW1fc2dwZ3MgKyAxKSAqIHNpemVvZihzdHJ1Y3QgYmZpX3NncGdfcyk7Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9zZ3BnX21vZF9zCSptb2QgPSBCRkFfU0dQR19NT0QoYmZhKTsKKwlpbnQJCQkJaTsKKwlzdHJ1Y3QgYmZhX3NncGdfcwkJKmhzZ3BnOworCXN0cnVjdCBiZmlfc2dwZ19zIAkqc2dwZzsKKwl1NjQJCWFsaWduX2xlbjsKKworCXVuaW9uIHsKKwkJdTY0ICAgICAgICBwYTsKKwkJdW5pb24gYmZpX2FkZHJfdSAgICAgIGFkZHI7CisJfSBzZ3BnX3BhOworCisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+c2dwZ19xKTsKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5zZ3BnX3dhaXRfcSk7CisKKwliZmFfdHJjKGJmYSwgY2ZnLT5kcnZjZmcubnVtX3NncGdzKTsKKworCW1vZC0+bnVtX3NncGdzID0gY2ZnLT5kcnZjZmcubnVtX3NncGdzOworCW1vZC0+c2dwZ19hcnJfcGEgPSBiZmFfbWVtaW5mb19kbWFfcGh5cyhtaW5mbyk7CisJYWxpZ25fbGVuID0gKEJGQV9TR1BHX1JPVU5EVVAobW9kLT5zZ3BnX2Fycl9wYSkgLSBtb2QtPnNncGdfYXJyX3BhKTsKKwltb2QtPnNncGdfYXJyX3BhICs9IGFsaWduX2xlbjsKKwltb2QtPmhzZ3BnX2FyciA9IChzdHJ1Y3QgYmZhX3NncGdfcyAqKSAoYmZhX21lbWluZm9fa3ZhKG1pbmZvKSArCisJCQkJCQlhbGlnbl9sZW4pOworCW1vZC0+c2dwZ19hcnIgPSAoc3RydWN0IGJmaV9zZ3BnX3MgKikgKGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pbmZvKSArCisJCQkJCQlhbGlnbl9sZW4pOworCisJaHNncGcgPSBtb2QtPmhzZ3BnX2FycjsKKwlzZ3BnID0gbW9kLT5zZ3BnX2FycjsKKwlzZ3BnX3BhLnBhID0gbW9kLT5zZ3BnX2Fycl9wYTsKKwltb2QtPmZyZWVfc2dwZ3MgPSBtb2QtPm51bV9zZ3BnczsKKworCWJmYV9hc3NlcnQoIShzZ3BnX3BhLnBhICYgKHNpemVvZihzdHJ1Y3QgYmZpX3NncGdfcykgLSAxKSkpOworCisJZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX3NncGdzOyBpKyspIHsKKwkJYmZhX29zX21lbXNldChoc2dwZywgMCwgc2l6ZW9mKCpoc2dwZykpOworCQliZmFfb3NfbWVtc2V0KHNncGcsIDAsIHNpemVvZigqc2dwZykpOworCisJCWhzZ3BnLT5zZ3BnID0gc2dwZzsKKwkJaHNncGctPnNncGdfcGEgPSBzZ3BnX3BhLmFkZHI7CisJCWxpc3RfYWRkX3RhaWwoJmhzZ3BnLT5xZSwgJm1vZC0+c2dwZ19xKTsKKworCQloc2dwZysrOworCQlzZ3BnKys7CisJCXNncGdfcGEucGEgKz0gc2l6ZW9mKHN0cnVjdCBiZmlfc2dwZ19zKTsKKwl9CisKKwliZmFfbWVtaW5mb19rdmEobWluZm8pID0gKHU4ICopIGhzZ3BnOworCWJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pbmZvKSA9ICh1OCAqKSBzZ3BnOworCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1pbmZvKSA9IHNncGdfcGEucGE7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfc2dwZ19pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKKworCisvKioKKyAqICBiZmFfc2dwZ19wdWJsaWMgQkZBIFNHUEcgcHVibGljIGZ1bmN0aW9ucworICovCisKK2JmYV9zdGF0dXNfdAorYmZhX3NncGdfbWFsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpzZ3BnX3EsIGludCBuc2dwZ3MpCit7CisJc3RydWN0IGJmYV9zZ3BnX21vZF9zICptb2QgPSBCRkFfU0dQR19NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3NncGdfcyAqaHNncGc7CisJaW50ICAgICAgICAgICAgIGk7CisKKwliZmFfdHJjX2ZwKGJmYSwgbnNncGdzKTsKKworCWlmIChtb2QtPmZyZWVfc2dwZ3MgPCBuc2dwZ3MpCisJCXJldHVybiBCRkFfU1RBVFVTX0VOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBuc2dwZ3M7IGkrKykgeworCQliZmFfcV9kZXEoJm1vZC0+c2dwZ19xLCAmaHNncGcpOworCQliZmFfYXNzZXJ0KGhzZ3BnKTsKKwkJbGlzdF9hZGRfdGFpbCgmaHNncGctPnFlLCBzZ3BnX3EpOworCX0KKworCW1vZC0+ZnJlZV9zZ3BncyAtPSBuc2dwZ3M7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK3ZvaWQKK2JmYV9zZ3BnX21mcmVlKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpzZ3BnX3EsIGludCBuc2dwZykKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MgKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCXN0cnVjdCBiZmFfc2dwZ193cWVfcyAqd3FlOworCisJYmZhX3RyY19mcChiZmEsIG5zZ3BnKTsKKworCW1vZC0+ZnJlZV9zZ3BncyArPSBuc2dwZzsKKwliZmFfYXNzZXJ0KG1vZC0+ZnJlZV9zZ3BncyA8PSBtb2QtPm51bV9zZ3Bncyk7CisKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoc2dwZ19xLCAmbW9kLT5zZ3BnX3EpOworCisJaWYgKGxpc3RfZW1wdHkoJm1vZC0+c2dwZ193YWl0X3EpKQorCQlyZXR1cm47CisKKwkvKioKKwkgKiBzYXRpc2Z5IGFzIG1hbnkgd2FpdGluZyByZXF1ZXN0cyBhcyBwb3NzaWJsZQorCSAqLworCWRvIHsKKwkJd3FlID0gYmZhX3FfZmlyc3QoJm1vZC0+c2dwZ193YWl0X3EpOworCQlpZiAobW9kLT5mcmVlX3NncGdzIDwgd3FlLT5uc2dwZykKKwkJCW5zZ3BnID0gbW9kLT5mcmVlX3NncGdzOworCQllbHNlCisJCQluc2dwZyA9IHdxZS0+bnNncGc7CisJCWJmYV9zZ3BnX21hbGxvYyhiZmEsICZ3cWUtPnNncGdfcSwgbnNncGcpOworCQl3cWUtPm5zZ3BnIC09IG5zZ3BnOworCQlpZiAod3FlLT5uc2dwZyA9PSAwKSB7CisJCQlsaXN0X2RlbCgmd3FlLT5xZSk7CisJCQl3cWUtPmNiZm4od3FlLT5jYmFyZyk7CisJCX0KKwl9IHdoaWxlIChtb2QtPmZyZWVfc2dwZ3MgJiYgIWxpc3RfZW1wdHkoJm1vZC0+c2dwZ193YWl0X3EpKTsKK30KKwordm9pZAorYmZhX3NncGdfd2FpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWUsIGludCBuc2dwZykKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MgKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCisJYmZhX2Fzc2VydChuc2dwZyA+IDApOworCWJmYV9hc3NlcnQobnNncGcgPiBtb2QtPmZyZWVfc2dwZ3MpOworCisJd3FlLT5uc2dwZ190b3RhbCA9IHdxZS0+bnNncGcgPSBuc2dwZzsKKworCS8qKgorCSAqIGFsbG9jYXRlIGFueSBsZWZ0IHRvIHRoaXMgb25lIGZpcnN0CisJICovCisJaWYgKG1vZC0+ZnJlZV9zZ3BncykgeworCQkvKioKKwkJICogbm8gb25lIGVsc2UgaXMgd2FpdGluZyBmb3IgU0dQRworCQkgKi8KKwkJYmZhX2Fzc2VydChsaXN0X2VtcHR5KCZtb2QtPnNncGdfd2FpdF9xKSk7CisJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmbW9kLT5zZ3BnX3EsICZ3cWUtPnNncGdfcSk7CisJCXdxZS0+bnNncGcgLT0gbW9kLT5mcmVlX3NncGdzOworCQltb2QtPmZyZWVfc2dwZ3MgPSAwOworCX0KKworCWxpc3RfYWRkX3RhaWwoJndxZS0+cWUsICZtb2QtPnNncGdfd2FpdF9xKTsKK30KKwordm9pZAorYmZhX3NncGdfd2NhbmNlbChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWUpCit7CisJc3RydWN0IGJmYV9zZ3BnX21vZF9zICptb2QgPSBCRkFfU0dQR19NT0QoYmZhKTsKKworCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmbW9kLT5zZ3BnX3dhaXRfcSwgd3FlKSk7CisJbGlzdF9kZWwoJndxZS0+cWUpOworCisJaWYgKHdxZS0+bnNncGdfdG90YWwgIT0gd3FlLT5uc2dwZykKKwkJYmZhX3NncGdfbWZyZWUoYmZhLCAmd3FlLT5zZ3BnX3EsCisJCQkJICAgd3FlLT5uc2dwZ190b3RhbCAtIHdxZS0+bnNncGcpOworfQorCit2b2lkCitiZmFfc2dwZ193aW5pdChzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSwgdm9pZCAoKmNiZm4pICh2b2lkICpjYmFyZyksCisJCSAgIHZvaWQgKmNiYXJnKQoreworCUlOSVRfTElTVF9IRUFEKCZ3cWUtPnNncGdfcSk7CisJd3FlLT5jYmZuID0gY2JmbjsKKwl3cWUtPmNiYXJnID0gY2Jhcmc7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc2dwZ19wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzJhOGNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc2dwZ19wcml2LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBoYWxfc2dwZy5oIEJGQSBTRyBwYWdlIG1vZHVsZQorICovCisKKyNpZm5kZWYgX19CRkFfU0dQR19QUklWX0hfXworI2RlZmluZSBfX0JGQV9TR1BHX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorCisjZGVmaW5lIEJGQV9TR1BHX01JTgkoMTYpCisKKy8qKgorICogQWxpZ25tZW50IG1hY3JvIGZvciBTRyBwYWdlIGFsbG9jYXRpb24KKyAqLworI2RlZmluZSBCRkFfU0dQR19ST1VORFVQKF9sKSAoKChfbCkgKyAoc2l6ZW9mKHN0cnVjdCBiZmlfc2dwZ19zKSAtIDEpKSBcCisJCQkmIH4oc2l6ZW9mKHN0cnVjdCBiZmlfc2dwZ19zKSAtIDEpKQorCitzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgcWU7CS8qICBxdWV1ZSBzZyBwYWdlIGVsZW1lbnQJKi8KKwlpbnQJbnNncGc7CQkvKiAgcGFnZXMgdG8gYmUgYWxsb2NhdGVkCSovCisJaW50CW5zZ3BnX3RvdGFsOwkvKiAgdG90YWwgcGFnZXMgcmVxdWlyZWQJKi8KKwl2b2lkCSgqY2JmbikgKHZvaWQgKmNiYXJnKTsKKwkJCQkvKiAgY2FsbGJhY2sgZnVuY3Rpb24JCSovCisJdm9pZAkqY2Jhcmc7CQkvKiAgY2FsbGJhY2sgYXJnCQkqLworCXN0cnVjdCBsaXN0X2hlYWQgc2dwZ19xOwkvKiAgcXVldWUgb2YgYWxsb2NlZCBzZ3BncwkqLworfTsKKworc3RydWN0IGJmYV9zZ3BnX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgCXFlOwkvKiAgcXVldWUgc2cgcGFnZSBlbGVtZW50CSovCisJc3RydWN0IGJmaV9zZ3BnX3MgKnNncGc7IC8qICB2YSBvZiBTRyBwYWdlCQkqLworCXVuaW9uIGJmaV9hZGRyX3Ugc2dwZ19wYTsvKiAgcGEgb2YgU0cgcGFnZQkJKi8KK307CisKKy8qKgorICogR2l2ZW4gbnVtYmVyIG9mIFNHIGVsZW1lbnRzLCBCRkFfU0dQR19OUEFHRSgpIHJldHVybnMgdGhlIG51bWJlciBvZgorICogU0cgcGFnZXMgcmVxdWlyZWQuCisgKi8KKyNkZWZpbmUgQkZBX1NHUEdfTlBBR0UoX25zZ2VzKSAgKCgoX25zZ2VzKSAvIEJGSV9TR1BHX0RBVEFfU0dFUykgKyAxKQorCitzdHJ1Y3QgYmZhX3NncGdfbW9kX3MgeworCXN0cnVjdCBiZmFfcyAqYmZhOworCWludAkJbnVtX3NncGdzOwkvKiAgbnVtYmVyIG9mIFNHIHBhZ2VzCQkqLworCWludAkJZnJlZV9zZ3BnczsJLyogIG51bWJlciBvZiBmcmVlIFNHIHBhZ2VzCSovCisJc3RydWN0IGJmYV9zZ3BnX3MgKmhzZ3BnX2FycjsJLyogIEJGQSBTRyBwYWdlIGFycmF5CSovCisJc3RydWN0IGJmaV9zZ3BnX3MgKnNncGdfYXJyOwkvKiAgYWN0dWFsIFNHIHBhZ2UgYXJyYXkJKi8KKwl1NjQJc2dwZ19hcnJfcGE7CS8qICBTRyBwYWdlIGFycmF5IERNQSBhZGRyCSovCisJc3RydWN0IGxpc3RfaGVhZCBzZ3BnX3E7CS8qICBxdWV1ZSBvZiBmcmVlIFNHIHBhZ2VzCSovCisJc3RydWN0IGxpc3RfaGVhZCBzZ3BnX3dhaXRfcTsgLyogIHdhaXQgcXVldWUgZm9yIFNHIHBhZ2VzCSovCit9OworI2RlZmluZSBCRkFfU0dQR19NT0QoX19iZmEpCSgmKF9fYmZhKS0+bW9kdWxlcy5zZ3BnX21vZCkKKworYmZhX3N0YXR1c190CWJmYV9zZ3BnX21hbGxvYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqc2dwZ19xLAorCQkJCQkJCQlpbnQgbnNncGdzKTsKK3ZvaWQJCWJmYV9zZ3BnX21mcmVlKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpzZ3BnX3EsCisJCQkJCQkJCWludCBuc2dwZ3MpOwordm9pZAkJYmZhX3NncGdfd2luaXQoc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWUsCisJCQkJICAgdm9pZCAoKmNiZm4pICh2b2lkICpjYmFyZyksIHZvaWQgKmNiYXJnKTsKK3ZvaWQJCWJmYV9zZ3BnX3dhaXQoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfc2dwZ193cWVfcyAqd3FlLAorCQkJCQkJCQlpbnQgbnNncGdzKTsKK3ZvaWQJCWJmYV9zZ3BnX3djYW5jZWwoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfc2dwZ193cWVfcyAqd3FlKTsKKworI2VuZGlmIC8qIF9fQkZBX1NHUEdfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NtLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MjBmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zbS5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhc20uYyBCRkEgU3RhdGUgbWFjaGluZSB1dGlsaXR5IGZ1bmN0aW9ucworICovCisKKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKworLyoqCisgKiAgY3Nfc21fYXBpCisgKi8KKworaW50CitiZmFfc21fdG9fc3RhdGUoc3RydWN0IGJmYV9zbV90YWJsZV9zICpzbXQsIGJmYV9zbV90IHNtKQoreworCWludCAgICAgICAgICAgICBpID0gMDsKKworCXdoaWxlIChzbXRbaV0uc20gJiYgc210W2ldLnNtICE9IHNtKQorCQlpKys7CisJcmV0dXJuIHNtdFtpXS5zdGF0ZTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV90aW1lci5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjc2NDgxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdGltZXIuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmFfdGltZXIuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKwordm9pZAorYmZhX3RpbWVyX2luaXQoc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqbW9kKQoreworCUlOSVRfTElTVF9IRUFEKCZtb2QtPnRpbWVyX3EpOworfQorCit2b2lkCitiZmFfdGltZXJfYmVhdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpCit7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFoID0gJm1vZC0+dGltZXJfcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZV9uZXh0OworCXN0cnVjdCBiZmFfdGltZXJfcyAqZWxlbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgdGltZWRvdXRfcTsKKworCUlOSVRfTElTVF9IRUFEKCZ0aW1lZG91dF9xKTsKKworCXFlID0gYmZhX3FfbmV4dChxaCk7CisKKwl3aGlsZSAocWUgIT0gcWgpIHsKKwkJcWVfbmV4dCA9IGJmYV9xX25leHQocWUpOworCisJCWVsZW0gPSAoc3RydWN0IGJmYV90aW1lcl9zICopIHFlOworCQlpZiAoZWxlbS0+dGltZW91dCA8PSBCRkFfVElNRVJfRlJFUSkgeworCQkJZWxlbS0+dGltZW91dCA9IDA7CisJCQlsaXN0X2RlbCgmZWxlbS0+cWUpOworCQkJbGlzdF9hZGRfdGFpbCgmZWxlbS0+cWUsICZ0aW1lZG91dF9xKTsKKwkJfSBlbHNlIHsKKwkJCWVsZW0tPnRpbWVvdXQgLT0gQkZBX1RJTUVSX0ZSRVE7CisJCX0KKworCQlxZSA9IHFlX25leHQ7CS8qIGdvIHRvIG5leHQgZWxlbSAqLworCX0KKworCS8qCisJICogUG9wIGFsbCB0aGUgdGltZW91dCBlbnRyaWVzCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0aW1lZG91dF9xKSkgeworCQliZmFfcV9kZXEoJnRpbWVkb3V0X3EsICZlbGVtKTsKKwkJZWxlbS0+dGltZXJjYihlbGVtLT5hcmcpOworCX0KK30KKworLyoqCisgKiBTaG91bGQgYmUgY2FsbGVkIHdpdGggbG9jayBwcm90ZWN0aW9uCisgKi8KK3ZvaWQKK2JmYV90aW1lcl9iZWdpbihzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QsIHN0cnVjdCBiZmFfdGltZXJfcyAqdGltZXIsCisJCSAgICB2b2lkICgqdGltZXJjYikgKHZvaWQgKiksIHZvaWQgKmFyZywgdW5zaWduZWQgaW50IHRpbWVvdXQpCit7CisKKwliZmFfYXNzZXJ0KHRpbWVyY2IgIT0gTlVMTCk7CisJYmZhX2Fzc2VydCghYmZhX3FfaXNfb25fcSgmbW9kLT50aW1lcl9xLCB0aW1lcikpOworCisJdGltZXItPnRpbWVvdXQgPSB0aW1lb3V0OworCXRpbWVyLT50aW1lcmNiID0gdGltZXJjYjsKKwl0aW1lci0+YXJnID0gYXJnOworCisJbGlzdF9hZGRfdGFpbCgmdGltZXItPnFlLCAmbW9kLT50aW1lcl9xKTsKK30KKworLyoqCisgKiBTaG91bGQgYmUgY2FsbGVkIHdpdGggbG9jayBwcm90ZWN0aW9uCisgKi8KK3ZvaWQKK2JmYV90aW1lcl9zdG9wKHN0cnVjdCBiZmFfdGltZXJfcyAqdGltZXIpCit7CisJYmZhX2Fzc2VydCghbGlzdF9lbXB0eSgmdGltZXItPnFlKSk7CisKKwlsaXN0X2RlbCgmdGltZXItPnFlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RyY21vZF9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV90cmNtb2RfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTYyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV90cmNtb2RfcHJpdi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgaGFsX3RyY21vZC5oIEJGQSB0cmFjZSBtb2R1bGVzCisgKi8KKworI2lmbmRlZiBfX0JGQV9UUkNNT0RfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfVFJDTU9EX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisKKy8qCisgKiAhISEgT25seSBhcHBlbmQgdG8gdGhlIGVudW1zIGRlZmluZWQgaGVyZSB0byBhdm9pZCBhbnkgdmVyc2lvbmluZworICogISEhIG5lZWRlZCBiZXR3ZWVuIHRyYWNlIHV0aWxpdHkgYW5kIGRyaXZlciB2ZXJzaW9uCisgKi8KK2VudW0geworCUJGQV9UUkNfSEFMX0lPQwkJPSAxLAorCUJGQV9UUkNfSEFMX0lOVFIJPSAyLAorCUJGQV9UUkNfSEFMX0ZDWFAJPSAzLAorCUJGQV9UUkNfSEFMX1VGCQk9IDQsCisJQkZBX1RSQ19IQUxfRElBRwk9IDUsCisJQkZBX1RSQ19IQUxfUlBPUlQJPSA2LAorCUJGQV9UUkNfSEFMX0ZDUElNCT0gNywKKwlCRkFfVFJDX0hBTF9JT0lNCT0gOCwKKwlCRkFfVFJDX0hBTF9UU0tJTQk9IDksCisJQkZBX1RSQ19IQUxfSVROSU0JPSAxMCwKKwlCRkFfVFJDX0hBTF9QUE9SVAk9IDExLAorCUJGQV9UUkNfSEFMX1NHUEcJPSAxMiwKKwlCRkFfVFJDX0hBTF9GTEFTSAk9IDEzLAorCUJGQV9UUkNfSEFMX0RFQlVHCT0gMTQsCisJQkZBX1RSQ19IQUxfV1dOCQk9IDE1LAorCUJGQV9UUkNfSEFMX0ZMQVNIX1JBVwk9IDE2LAorCUJGQV9UUkNfSEFMX1NCT09UCT0gMTcsCisJQkZBX1RSQ19IQUxfU0JPT1RfSU8JPSAxOCwKKwlCRkFfVFJDX0hBTF9TQk9PVF9JTlRSCT0gMTksCisJQkZBX1RSQ19IQUxfU0JURVNUCT0gMjAsCisJQkZBX1RSQ19IQUxfSVBGQwk9IDIxLAorCUJGQV9UUkNfSEFMX0lPQ0ZDCT0gMjIsCisJQkZBX1RSQ19IQUxfRkNQVE0JPSAyMywKKwlCRkFfVFJDX0hBTF9JT1RNCT0gMjQsCisJQkZBX1RSQ19IQUxfVFNLVE0JPSAyNSwKKwlCRkFfVFJDX0hBTF9USU4JCT0gMjYsCisJQkZBX1RSQ19IQUxfTFBTCQk9IDI3LAorCUJGQV9UUkNfSEFMX0ZDRElBRwk9IDI4LAorCUJGQV9UUkNfSEFMX1BCSU5ECT0gMjksCisJQkZBX1RSQ19IQUxfSU9DRkNfQ1QJPSAzMCwKKwlCRkFfVFJDX0hBTF9JT0NGQ19DQgk9IDMxLAorCUJGQV9UUkNfSEFMX0lPQ0ZDX1EJPSAzMiwKK307CisKKyNlbmRpZiAvKiBfX0JGQV9UUkNNT0RfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Rza2ltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV90c2tpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMGQ0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV90c2tpbS5jCkBAIC0wLDAgKzEsNjg5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfY2JfaW9pbV9tYWNyb3MuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgVFNLSU0pOworCisvKioKKyAqIHRhc2sgbWFuYWdlbWVudCBjb21wbGV0aW9uIGhhbmRsaW5nCisgKi8KKyNkZWZpbmUgYmZhX3Rza2ltX3Fjb21wKF9fdHNraW0sIF9fY2JmbikgZG8gewkJCSAgICAgXAorCWJmYV9jYl9xdWV1ZSgoX190c2tpbSktPmJmYSwgJihfX3Rza2ltKS0+aGNiX3FlLCBfX2NiZm4sIChfX3Rza2ltKSk7IFwKKwliZmFfdHNraW1fbm90aWZ5X2NvbXAoX190c2tpbSk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfdHNraW1fbm90aWZ5X2NvbXAoX190c2tpbSkgZG8gewkJCQkgICAgIFwKKwlpZiAoKF9fdHNraW0pLT5ub3RpZnkpCQkJCQkgICAgIAkgICAgIFwKKwkJYmZhX2l0bmltX3Rza2RvbmUoKF9fdHNraW0pLT5pdG5pbSk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBfX2JmYV9jYl90c2tpbV9kb25lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkICAgICBfX2JmYV9jYl90c2tpbV9mYWlsZWQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Rza2ltX21hdGNoX3Njb3BlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJCSAgICAgICBsdW5fdCBsdW4pOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9nYXRoZXJfaW9zKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9jbGVhbnBfY29tcCh2b2lkICp0c2tpbV9jYmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX2NsZWFudXBfaW9zKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Rza2ltX3NlbmQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfdHNraW1fc2VuZF9hYm9ydChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1faW9jZGlzYWJsZV9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CisKKy8qKgorICogIGJmYV90c2tpbV9zbQorICovCisKK2VudW0gYmZhX3Rza2ltX2V2ZW50IHsKKwlCRkFfVFNLSU1fU01fU1RBUlQgICAgICAgID0gMSwgIC8qICBUTSBjb21tYW5kIHN0YXJ0ICAgICAgICAgICAgKi8KKwlCRkFfVFNLSU1fU01fRE9ORSAgICAgICAgID0gMiwgIC8qICBUTSBjb21wbGV0aW9uICAgICAgICAgICAgICAgKi8KKwlCRkFfVFNLSU1fU01fUVJFU1VNRSAgICAgID0gMywgIC8qICByZXN1bWUgYWZ0ZXIgcWZ1bGwgICAgICAgICAgKi8KKwlCRkFfVFNLSU1fU01fSFdGQUlMICAgICAgID0gNSwgIC8qICBJT0MgaC93IGZhaWx1cmUgZXZlbnQgICAgICAgKi8KKwlCRkFfVFNLSU1fU01fSENCICAgICAgICAgID0gNiwgIC8qICBCRkEgY2FsbGJhY2sgY29tcGxldGlvbiAgICAgKi8KKwlCRkFfVFNLSU1fU01fSU9TX0RPTkUgICAgID0gNywgIC8qICBJTyBhbmQgc3ViIFRNIGNvbXBsZXRpb25zICAgKi8KKwlCRkFfVFNLSU1fU01fQ0xFQU5VUCAgICAgID0gOCwgIC8qICBUTSBjbGVhbnVwIG9uIElUTiBvZmZsaW5lICAgKi8KKwlCRkFfVFNLSU1fU01fQ0xFQU5VUF9ET05FID0gOSwgIC8qICBUTSBhYm9ydCBjb21wbGV0aW9uICAgICAgICAgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fc21fdW5pbml0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJCWVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fc21fYWN0aXZlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJCWVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fc21fY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCQkgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9pb2NsZWFudXAoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fc21fcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkgICAgICAgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9jbGVhbnVwX3FmdWxsKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJICAgICAgIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fc21faGNiKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJICAgICBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CisKKy8qKgorICogICAgICBUYXNrIG1hbmFnZW1lbnQgY29tbWFuZCBiZWdpbm5pbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21fdW5pbml0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmModHNraW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1RTS0lNX1NNX1NUQVJUOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21fYWN0aXZlKTsKKwkJYmZhX3Rza2ltX2dhdGhlcl9pb3ModHNraW0pOworCisJCS8qKgorCQkgKiBJZiBkZXZpY2UgaXMgb2ZmbGluZSwgZG8gbm90IHNlbmQgVE0gb24gd2lyZS4gSnVzdCBjbGVhbnVwCisJCSAqIGFueSBwZW5kaW5nIElPIHJlcXVlc3RzIGFuZCBjb21wbGV0ZSBUTSByZXF1ZXN0LgorCQkgKi8KKwkJaWYgKCFiZmFfaXRuaW1faXNfb25saW5lKHRza2ltLT5pdG5pbSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9pb2NsZWFudXApOworCQkJdHNraW0tPnRza19zdGF0dXMgPSBCRklfVFNLSU1fU1RTX09LOworCQkJYmZhX3Rza2ltX2NsZWFudXBfaW9zKHRza2ltKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmICghYmZhX3Rza2ltX3NlbmQodHNraW0pKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21fcWZ1bGwpOworCQkJYmZhX3JlcXFfd2FpdCh0c2tpbS0+YmZhLCB0c2tpbS0+aXRuaW0tPnJlcXEsCisJCQkJCSAgJnRza2ltLT5yZXFxX3dhaXQpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogYnJpZWYKKyAqCVRNIGNvbW1hbmQgaXMgYWN0aXZlLCBhd2FpdGluZyBjb21wbGV0aW9uIGZyb20gZmlybXdhcmUgdG8KKyAqCWNsZWFudXAgSU8gcmVxdWVzdHMgaW4gVE0gc2NvcGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21fYWN0aXZlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmModHNraW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1RTS0lNX1NNX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9pb2NsZWFudXApOworCQliZmFfdHNraW1fY2xlYW51cF9pb3ModHNraW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0NMRUFOVVA6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9jbGVhbnVwKTsKKwkJaWYgKCFiZmFfdHNraW1fc2VuZF9hYm9ydCh0c2tpbSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9jbGVhbnVwX3FmdWxsKTsKKwkJCWJmYV9yZXFxX3dhaXQodHNraW0tPmJmYSwgdHNraW0tPml0bmltLT5yZXFxLAorCQkJCSZ0c2tpbS0+cmVxcV93YWl0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2hjYik7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyh0c2tpbSk7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZmFpbGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKglBbiBhY3RpdmUgVE0gaXMgYmVpbmcgY2xlYW5lZCB1cCBzaW5jZSBJVE4gaXMgb2ZmbGluZS4gQXdhaXRpbmcgY2xlYW51cAorICoJY29tcGxldGlvbiBldmVudCBmcm9tIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX2NsZWFudXAoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fRE9ORToKKwkJLyoqCisJCSAqIElnbm9yZSBhbmQgd2FpdCBmb3IgQUJPUlQgY29tcGxldGlvbiBmcm9tIGZpcm13YXJlLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9DTEVBTlVQX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9pb2NsZWFudXApOworCQliZmFfdHNraW1fY2xlYW51cF9pb3ModHNraW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2hjYik7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyh0c2tpbSk7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZmFpbGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV9pb2NsZWFudXAoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fSU9TX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9oY2IpOworCQliZmFfdHNraW1fcWNvbXAodHNraW0sIF9fYmZhX2NiX3Rza2ltX2RvbmUpOworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0NMRUFOVVA6CisJCS8qKgorCQkgKiBJZ25vcmUsIFRNIGNvbW1hbmQgY29tcGxldGVkIG9uIHdpcmUuCisJCSAqIE5vdGlmeSBUTSBjb25tcGxldGlvbiBvbiBJTyBjbGVhbnVwIGNvbXBsZXRpb24uCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2hjYik7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyh0c2tpbSk7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZmFpbGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAgICAgIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGlzIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUQorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX3FmdWxsKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmModHNraW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1RTS0lNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9hY3RpdmUpOworCQliZmFfdHNraW1fc2VuZCh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fQ0xFQU5VUDoKKwkJLyoqCisJCSAqIE5vIG5lZWQgdG8gc2VuZCBUTSBvbiB3aXJlIHNpbmNlIElUTiBpcyBvZmZsaW5lLgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2lvY2xlYW51cCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnRza2ltLT5yZXFxX3dhaXQpOworCQliZmFfdHNraW1fY2xlYW51cF9pb3ModHNraW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJnRza2ltLT5yZXFxX3dhaXQpOworCQliZmFfdHNraW1faW9jZGlzYWJsZV9pb3ModHNraW0pOworCQliZmFfdHNraW1fcWNvbXAodHNraW0sIF9fYmZhX2NiX3Rza2ltX2ZhaWxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogICAgICBUYXNrIG1hbmFnZW1lbnQgY29tbWFuZCBpcyBhY3RpdmUsIGF3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EKKyAqCXRvIHNlbmQgY2xlYW4gdXAgcmVxdWVzdC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV9jbGVhbnVwX3FmdWxsKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCWVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmModHNraW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1RTS0lNX1NNX0RPTkU6CisJCWJmYV9yZXFxX3djYW5jZWwoJnRza2ltLT5yZXFxX3dhaXQpOworCQkvKioKKwkJICoKKwkJICogRmFsbCB0aHJvdWdoICEhIQorCQkgKi8KKworCWNhc2UgQkZBX1RTS0lNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9jbGVhbnVwKTsKKwkJYmZhX3Rza2ltX3NlbmRfYWJvcnQodHNraW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJnRza2ltLT5yZXFxX3dhaXQpOworCQliZmFfdHNraW1faW9jZGlzYWJsZV9pb3ModHNraW0pOworCQliZmFfdHNraW1fcWNvbXAodHNraW0sIF9fYmZhX2NiX3Rza2ltX2ZhaWxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogICAgICBCRkEgY2FsbGJhY2sgaXMgcGVuZGluZworICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX2hjYihzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9IQ0I6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV91bmluaXQpOworCQliZmFfdHNraW1fZnJlZSh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fQ0xFQU5VUDoKKwkJYmZhX3Rza2ltX25vdGlmeV9jb21wKHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfdHNraW1fcHJpdmF0ZQorICovCisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl90c2tpbV9kb25lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0gPSBjYmFyZzsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJYmZhX3N0YXRzKHRza2ltLT5pdG5pbSwgdG1fc3VjY2Vzcyk7CisJYmZhX2NiX3Rza2ltX2RvbmUodHNraW0tPmJmYS0+YmZhZCwgdHNraW0tPmR0c2ssIHRza2ltLT50c2tfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3Rza2ltX2ZhaWxlZCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHRza2ltLCBCRkFfVFNLSU1fU01fSENCKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX2ZhaWx1cmVzKTsKKwliZmFfY2JfdHNraW1fZG9uZSh0c2tpbS0+YmZhLT5iZmFkLCB0c2tpbS0+ZHRzaywKKwkJCSAgIEJGSV9UU0tJTV9TVFNfRkFJTEVEKTsKK30KKworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV90c2tpbV9tYXRjaF9zY29wZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBsdW5fdCBsdW4pCit7CisJc3dpdGNoICh0c2tpbS0+dG1fY21uZCkgeworCWNhc2UgRkNQX1RNX1RBUkdFVF9SRVNFVDoKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJY2FzZSBGQ1BfVE1fQUJPUlRfVEFTS19TRVQ6CisJY2FzZSBGQ1BfVE1fQ0xFQVJfVEFTS19TRVQ6CisJY2FzZSBGQ1BfVE1fTFVOX1JFU0VUOgorCWNhc2UgRkNQX1RNX0NMRUFSX0FDQToKKwkJcmV0dXJuICh0c2tpbS0+bHVuID09IGx1bik7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KKworCXJldHVybiBCRkFfRkFMU0U7Cit9CisKKy8qKgorICogICAgICBHYXRoZXIgYWZmZWN0ZWQgSU8gcmVxdWVzdHMgYW5kIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9nYXRoZXJfaW9zKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IHRza2ltLT5pdG5pbTsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlJTklUX0xJU1RfSEVBRCgmdHNraW0tPmlvX3EpOworCisJLyoqCisJICogR2F0aGVyIGFueSBhY3RpdmUgSU8gcmVxdWVzdHMgZmlyc3QuCisJICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+aW9fcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQlpZiAoYmZhX3Rza2ltX21hdGNoX3Njb3BlCisJCSAgICAodHNraW0sIGJmYV9jYl9pb2ltX2dldF9sdW4oaW9pbS0+ZGlvKSkpIHsKKwkJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJnRza2ltLT5pb19xKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEZhaWxiYWNrIGFueSBwZW5kaW5nIElPIHJlcXVlc3RzIGltbWVkaWF0ZWx5LgorCSAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPnBlbmRpbmdfcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQlpZiAoYmZhX3Rza2ltX21hdGNoX3Njb3BlCisJCSAgICAodHNraW0sIGJmYV9jYl9pb2ltX2dldF9sdW4oaW9pbS0+ZGlvKSkpIHsKKwkJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7CisJCQliZmFfaW9pbV90b3YoaW9pbSk7CisJCX0KKwl9Cit9CisKKy8qKgorICogCQlJTyBjbGVhbnVwIGNvbXBsZXRpb24KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9jbGVhbnBfY29tcCh2b2lkICp0c2tpbV9jYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltID0gdHNraW1fY2Jhcmc7CisKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9pb19jb21wcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9JT1NfRE9ORSk7Cit9CisKKy8qKgorICogICAgICBHYXRoZXIgYWZmZWN0ZWQgSU8gcmVxdWVzdHMgYW5kIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9jbGVhbnVwX2lvcyhzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWJmYV93Y19pbml0KCZ0c2tpbS0+d2MsIGJmYV90c2tpbV9jbGVhbnBfY29tcCwgdHNraW0pOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZ0c2tpbS0+aW9fcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQliZmFfd2NfdXAoJnRza2ltLT53Yyk7CisJCWJmYV9pb2ltX2NsZWFudXBfdG0oaW9pbSwgdHNraW0pOworCX0KKworCWJmYV93Y193YWl0KCZ0c2tpbS0+d2MpOworfQorCisvKioKKyAqICAgICAgU2VuZCB0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdCB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV90c2tpbV9zZW5kKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IHRza2ltLT5pdG5pbTsKKwlzdHJ1Y3QgYmZpX3Rza2ltX3JlcV9zICptOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KHRza2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlpZiAoIW0pCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwkvKioKKwkgKiBidWlsZCBpL28gcmVxdWVzdCBtZXNzYWdlIG5leHQKKwkgKi8KKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1RTS0lNLCBCRklfVFNLSU1fSDJJX1RNX1JFUSwKKwkJCWJmYV9scHVpZCh0c2tpbS0+YmZhKSk7CisKKwltLT50c2tfdGFnID0gYmZhX29zX2h0b25zKHRza2ltLT50c2tfdGFnKTsKKwltLT5pdG5fZmhkbCA9IHRza2ltLT5pdG5pbS0+cnBvcnQtPmZ3X2hhbmRsZTsKKwltLT50X3NlY3MgPSB0c2tpbS0+dHNlY3M7CisJbS0+bHVuID0gdHNraW0tPmx1bjsKKwltLT50bV9mbGFncyA9IHRza2ltLT50bV9jbW5kOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHRza2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogICAgICBTZW5kIGFib3J0IHJlcXVlc3QgdG8gY2xlYW51cCBhbiBhY3RpdmUgVE0gdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyBiZmFfYm9vbGVhbl90CitiZmFfdHNraW1fc2VuZF9hYm9ydChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAgICAgICAgICAgICAqaXRuaW0gPSB0c2tpbS0+aXRuaW07CisJc3RydWN0IGJmaV90c2tpbV9hYm9ydHJlcV9zICAgICptOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KHRza2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlpZiAoIW0pCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwkvKioKKwkgKiBidWlsZCBpL28gcmVxdWVzdCBtZXNzYWdlIG5leHQKKwkgKi8KKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1RTS0lNLCBCRklfVFNLSU1fSDJJX0FCT1JUX1JFUSwKKwkJCWJmYV9scHVpZCh0c2tpbS0+YmZhKSk7CisKKwltLT50c2tfdGFnICA9IGJmYV9vc19odG9ucyh0c2tpbS0+dHNrX3RhZyk7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UodHNraW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiAgICAgIENhbGwgdG8gcmVzdW1lIHRhc2sgbWFuYWdlbWVudCBjbW5kIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9xcmVzdW1lKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0gPSBjYmFyZzsKKworCWJmYV9mY3BpbV9zdGF0cyh0c2tpbS0+ZmNwaW0sIHFyZXN1bWVzKTsKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9xcmVzdW1lcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9RUkVTVU1FKTsKK30KKworLyoqCisgKiBDbGVhbnVwIElPcyBhc3NvY2lhdGVkIHdpdGggYSB0YXNrIG1hbmdlbWVudCBjb21tYW5kIG9uIElPQyBmYWlsdXJlcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyhzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmdHNraW0tPmlvX3EpIHsKKwkJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBxZTsKKwkJYmZhX2lvaW1faW9jZGlzYWJsZShpb2ltKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfdHNraW1fZnJpZW5kCisgKi8KKworLyoqCisgKiBOb3RpZmljYXRpb24gb24gY29tcGxldGlvbnMgZnJvbSByZWxhdGVkIGlvaW0uCisgKi8KK3ZvaWQKK2JmYV90c2tpbV9pb2RvbmUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwliZmFfd2NfZG93bigmdHNraW0tPndjKTsKK30KKworLyoqCisgKiBIYW5kbGUgSU9DIGgvdyBmYWlsdXJlIG5vdGlmaWNhdGlvbiBmcm9tIGl0bmltLgorICovCit2b2lkCitiZmFfdHNraW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCXRza2ltLT5ub3RpZnkgPSBCRkFfRkFMU0U7CisJYmZhX3N0YXRzKHRza2ltLT5pdG5pbSwgdG1faW9jZG93bnMpOworCWJmYV9zbV9zZW5kX2V2ZW50KHRza2ltLCBCRkFfVFNLSU1fU01fSFdGQUlMKTsKK30KKworLyoqCisgKiBDbGVhbnVwIFRNIGNvbW1hbmQgYW5kIGFzc29jaWF0ZWQgSU9zIGFzIHBhcnQgb2YgSVROSU0gb2ZmbGluZS4KKyAqLwordm9pZAorYmZhX3Rza2ltX2NsZWFudXAoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwl0c2tpbS0+bm90aWZ5ID0gQkZBX1RSVUU7CisJYmZhX3N0YXRzKHRza2ltLT5pdG5pbSwgdG1fY2xlYW51cHMpOworCWJmYV9zbV9zZW5kX2V2ZW50KHRza2ltLCBCRkFfVFNLSU1fU01fQ0xFQU5VUCk7Cit9CisKKy8qKgorICogICAgICBNZW1vcnkgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uCisgKi8KK3ZvaWQKK2JmYV90c2tpbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaW5mbykKK3sKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltOworCXUxNiAgICAgICAgaTsKKworCUlOSVRfTElTVF9IRUFEKCZmY3BpbS0+dHNraW1fZnJlZV9xKTsKKworCXRza2ltID0gKHN0cnVjdCBiZmFfdHNraW1fcyAqKSBiZmFfbWVtaW5mb19rdmEobWluZm8pOworCWZjcGltLT50c2tpbV9hcnIgPSB0c2tpbTsKKworCWZvciAoaSA9IDA7IGkgPCBmY3BpbS0+bnVtX3Rza2ltX3JlcXM7IGkrKywgdHNraW0rKykgeworCQkvKgorCQkgKiBpbml0aWFsaXplIFRTS0lNCisJCSAqLworCQliZmFfb3NfbWVtc2V0KHRza2ltLCAwLCBzaXplb2Yoc3RydWN0IGJmYV90c2tpbV9zKSk7CisJCXRza2ltLT50c2tfdGFnID0gaTsKKwkJdHNraW0tPmJmYSAgICAgPSBmY3BpbS0+YmZhOworCQl0c2tpbS0+ZmNwaW0gICA9IGZjcGltOworCQl0c2tpbS0+bm90aWZ5ICA9IEJGQV9GQUxTRTsKKwkJYmZhX3JlcXFfd2luaXQoJnRza2ltLT5yZXFxX3dhaXQsIGJmYV90c2tpbV9xcmVzdW1lLAorCQkJCSAgIHRza2ltKTsKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX3VuaW5pdCk7CisKKwkJbGlzdF9hZGRfdGFpbCgmdHNraW0tPnFlLCAmZmNwaW0tPnRza2ltX2ZyZWVfcSk7CisJfQorCisJYmZhX21lbWluZm9fa3ZhKG1pbmZvKSA9ICh1OCAqKSB0c2tpbTsKK30KKwordm9pZAorYmZhX3Rza2ltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSkKK3sKKyAgICAvKioKKyAgICAgKiBAdG9kbworICAgICAqLworfQorCit2b2lkCitiZmFfdHNraW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmlfdHNraW1fcnNwX3MgKnJzcCA9IChzdHJ1Y3QgYmZpX3Rza2ltX3JzcF9zICopIG07CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwl1MTYgICAgICAgIHRza190YWcgPSBiZmFfb3NfbnRvaHMocnNwLT50c2tfdGFnKTsKKworCXRza2ltID0gQkZBX1RTS0lNX0ZST01fVEFHKGZjcGltLCB0c2tfdGFnKTsKKwliZmFfYXNzZXJ0KHRza2ltLT50c2tfdGFnID09IHRza190YWcpOworCisJdHNraW0tPnRza19zdGF0dXMgPSByc3AtPnRza19zdGF0dXM7CisKKwkvKioKKwkgKiBGaXJtd2FyZSBzZW5kcyBCRklfVFNLSU1fU1RTX0FCT1JURUQgc3RhdHVzIGZvciBhYm9ydAorCSAqIHJlcXVlc3RzLiBBbGwgb3RoZXIgc3RhdHVzZXMgYXJlIGZvciBub3JtYWwgY29tcGxldGlvbnMuCisJICovCisJaWYgKHJzcC0+dHNrX3N0YXR1cyA9PSBCRklfVFNLSU1fU1RTX0FCT1JURUQpIHsKKwkJYmZhX3N0YXRzKHRza2ltLT5pdG5pbSwgdG1fY2xlYW51cF9jb21wcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHRza2ltLCBCRkFfVFNLSU1fU01fQ0xFQU5VUF9ET05FKTsKKwl9IGVsc2UgeworCQliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9md19yc3BzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9ET05FKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfdHNraW1fYXBpCisgKi8KKworCitzdHJ1Y3QgYmZhX3Rza2ltX3MgKgorYmZhX3Rza2ltX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF90c2tpbV9zICpkdHNrKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisKKwliZmFfcV9kZXEoJmZjcGltLT50c2tpbV9mcmVlX3EsICZ0c2tpbSk7CisKKwlpZiAoIXRza2ltKQorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIG5vX3Rza2ltcyk7CisJZWxzZQorCQl0c2tpbS0+ZHRzayA9IGR0c2s7CisKKwlyZXR1cm4gdHNraW07Cit9CisKK3ZvaWQKK2JmYV90c2tpbV9mcmVlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xX2Z1bmMoJnRza2ltLT5pdG5pbS0+dHNrX3EsICZ0c2tpbS0+cWUpKTsKKwlsaXN0X2RlbCgmdHNraW0tPnFlKTsKKwlsaXN0X2FkZF90YWlsKCZ0c2tpbS0+cWUsICZ0c2tpbS0+ZmNwaW0tPnRza2ltX2ZyZWVfcSk7Cit9CisKKy8qKgorICogICAgICBTdGFydCBhIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kLgorICoKKyAqIEBwYXJhbVtpbl0gICAgICAgdHNraW0gICAgICAgQkZBIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGluc3RhbmNlCisgKiBAcGFyYW1baW5dICAgICAgIGl0bmltICAgICAgIGktdCBuZXh1cyBmb3IgdGhlIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kCisgKiBAcGFyYW1baW5dICAgICAgIGx1biAgICAgICAgIGx1biwgaWYgYXBwbGljYWJsZQorICogQHBhcmFtW2luXSAgICAgICB0bV9jbW5kICAgICBUYXNrIG1hbmFnZW1lbnQgY29tbWFuZCBjb2RlLgorICogQHBhcmFtW2luXSAgICAgICB0X3NlY3MgICAgICBUaW1lb3V0IGluIHNlY29uZHMKKyAqCisgKiBAcmV0dXJuIE5vbmUuCisgKi8KK3ZvaWQKK2JmYV90c2tpbV9zdGFydChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBsdW5fdCBsdW4sCisJCSAgICBlbnVtIGZjcF90bV9jbW5kIHRtX2NtbmQsIHU4IHRzZWNzKQoreworCXRza2ltLT5pdG5pbSAgID0gaXRuaW07CisJdHNraW0tPmx1biAgICAgPSBsdW47CisJdHNraW0tPnRtX2NtbmQgPSB0bV9jbW5kOworCXRza2ltLT50c2VjcyAgID0gdHNlY3M7CisJdHNraW0tPm5vdGlmeSAgPSBCRkFfRkFMU0U7CisJYmZhX3N0YXRzKGl0bmltLCB0bV9jbW5kcyk7CisKKwlsaXN0X2FkZF90YWlsKCZ0c2tpbS0+cWUsICZpdG5pbS0+dHNrX3EpOworCWJmYV9zbV9zZW5kX2V2ZW50KHRza2ltLCBCRkFfVFNLSU1fU01fU1RBUlQpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWY5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zi5jCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV91Zi5jIEJGQSB1bnNvbGljaXRlZCBmcmFtZSByZWNlaXZlIGltcGxlbWVudGF0aW9uCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX3VmLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIFVGKTsKK0JGQV9NT0RVTEUodWYpOworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbnRlcm5hbCBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitzdGF0aWMgdm9pZAorX19iZmFfY2JfdWZfcmVjdih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWYgPSBjYmFyZzsKKwlzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0gPSBCRkFfVUZfTU9EKHVmLT5iZmEpOworCisJaWYgKGNvbXBsZXRlKQorCQl1Zm0tPnVmcmVjdih1Zm0tPmNiYXJnLCB1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitjbGFpbV91Zl9wYnMoc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJdTMyICAgICAgICB1Zl9wYl90b3Rfc3o7CisKKwl1Zm0tPnVmX3Bic19rdmEgPSAoc3RydWN0IGJmYV91Zl9idWZfcyAqKSBiZmFfbWVtaW5mb19kbWFfdmlydChtaSk7CisJdWZtLT51Zl9wYnNfcGEgPSBiZmFfbWVtaW5mb19kbWFfcGh5cyhtaSk7CisJdWZfcGJfdG90X3N6ID0gQkZBX1JPVU5EVVAoKHNpemVvZihzdHJ1Y3QgYmZhX3VmX2J1Zl9zKSAqIHVmbS0+bnVtX3VmcyksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisKKwliZmFfbWVtaW5mb19kbWFfdmlydChtaSkgKz0gdWZfcGJfdG90X3N6OworCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKSArPSB1Zl9wYl90b3Rfc3o7CisKKwliZmFfb3NfbWVtc2V0KCh2b2lkICopdWZtLT51Zl9wYnNfa3ZhLCAwLCB1Zl9wYl90b3Rfc3opOworfQorCitzdGF0aWMgdm9pZAorY2xhaW1fdWZfcG9zdF9tc2dzKHN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pKQoreworCXN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcyAqdWZfYnBfbXNnOworCXN0cnVjdCBiZmlfc2dlX3MgICAgICAqc2dlOworCXVuaW9uIGJmaV9hZGRyX3UgICAgICBzZ2FfemVybyA9IHsgezB9IH07CisJdTE2ICAgICAgICBpOworCXUxNiAgICAgICAgYnVmX2xlbjsKKworCXVmbS0+dWZfYnVmX3Bvc3RzID0gKHN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcyAqKSBiZmFfbWVtaW5mb19rdmEobWkpOworCXVmX2JwX21zZyA9IHVmbS0+dWZfYnVmX3Bvc3RzOworCisJZm9yIChpID0gMCwgdWZfYnBfbXNnID0gdWZtLT51Zl9idWZfcG9zdHM7IGkgPCB1Zm0tPm51bV91ZnM7CisJICAgICBpKyssIHVmX2JwX21zZysrKSB7CisJCWJmYV9vc19tZW1zZXQodWZfYnBfbXNnLCAwLCBzaXplb2Yoc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zKSk7CisKKwkJdWZfYnBfbXNnLT5idWZfdGFnID0gaTsKKwkJYnVmX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmZhX3VmX2J1Zl9zKTsKKwkJdWZfYnBfbXNnLT5idWZfbGVuID0gYmZhX29zX2h0b25zKGJ1Zl9sZW4pOworCQliZmlfaDJpX3NldCh1Zl9icF9tc2ctPm1oLCBCRklfTUNfVUYsIEJGSV9VRl9IMklfQlVGX1BPU1QsCisJCQkgICAgYmZhX2xwdWlkKHVmbS0+YmZhKSk7CisKKwkJc2dlID0gdWZfYnBfbXNnLT5zZ2U7CisJCXNnZVswXS5zZ19sZW4gPSBidWZfbGVuOworCQlzZ2VbMF0uZmxhZ3MgPSBCRklfU0dFX0RBVEFfTEFTVDsKKwkJYmZhX2RtYV9hZGRyX3NldChzZ2VbMF0uc2dhLCB1Zm1fcGJzX3BhKHVmbSwgaSkpOworCQliZmFfc2dlX3RvX2JlKHNnZSk7CisKKwkJc2dlWzFdLnNnX2xlbiA9IGJ1Zl9sZW47CisJCXNnZVsxXS5mbGFncyA9IEJGSV9TR0VfUEdETEVOOworCQlzZ2VbMV0uc2dhID0gc2dhX3plcm87CisJCWJmYV9zZ2VfdG9fYmUoJnNnZVsxXSk7CisJfQorCisJLyoqCisJICogYWR2YW5jZSBwb2ludGVyIGJleW9uZCBjb25zdW1lZCBtZW1vcnkKKwkgKi8KKwliZmFfbWVtaW5mb19rdmEobWkpID0gKHU4ICopIHVmX2JwX21zZzsKK30KKworc3RhdGljIHZvaWQKK2NsYWltX3VmcyhzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSkKK3sKKwl1MTYgICAgICAgIGk7CisJc3RydWN0IGJmYV91Zl9zICAgKnVmOworCisJLyoKKwkgKiBDbGFpbSBibG9jayBvZiBtZW1vcnkgZm9yIFVGIGxpc3QKKwkgKi8KKwl1Zm0tPnVmX2xpc3QgPSAoc3RydWN0IGJmYV91Zl9zICopIGJmYV9tZW1pbmZvX2t2YShtaSk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgVUZzIGFuZCBxdWV1ZSBpdCBpbiBVRiBmcmVlIHF1ZXVlCisJICovCisJZm9yIChpID0gMCwgdWYgPSB1Zm0tPnVmX2xpc3Q7IGkgPCB1Zm0tPm51bV91ZnM7IGkrKywgdWYrKykgeworCQliZmFfb3NfbWVtc2V0KHVmLCAwLCBzaXplb2Yoc3RydWN0IGJmYV91Zl9zKSk7CisJCXVmLT5iZmEgPSB1Zm0tPmJmYTsKKwkJdWYtPnVmX3RhZyA9IGk7CisJCXVmLT5wYl9sZW4gPSBzaXplb2Yoc3RydWN0IGJmYV91Zl9idWZfcyk7CisJCXVmLT5idWZfa3ZhID0gKHZvaWQgKikmdWZtLT51Zl9wYnNfa3ZhW2ldOworCQl1Zi0+YnVmX3BhID0gdWZtX3Bic19wYSh1Zm0sIGkpOworCQlsaXN0X2FkZF90YWlsKCZ1Zi0+cWUsICZ1Zm0tPnVmX2ZyZWVfcSk7CisJfQorCisJLyoqCisJICogYWR2YW5jZSBtZW1vcnkgcG9pbnRlcgorCSAqLworCWJmYV9tZW1pbmZvX2t2YShtaSkgPSAodTggKikgdWY7Cit9CisKK3N0YXRpYyB2b2lkCit1Zl9tZW1fY2xhaW0oc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJY2xhaW1fdWZfcGJzKHVmbSwgbWkpOworCWNsYWltX3Vmcyh1Zm0sIG1pKTsKKwljbGFpbV91Zl9wb3N0X21zZ3ModWZtLCBtaSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwgdTMyICpkbV9sZW4pCit7CisJdTMyICAgICAgICBudW1fdWZzID0gY2ZnLT5md2NmZy5udW1fdWZfYnVmczsKKworCS8qCisJICogZG1hLWFibGUgbWVtb3J5IGZvciBVRiBwb3N0ZWQgYnVmcworCSAqLworCSpkbV9sZW4gKz0gQkZBX1JPVU5EVVAoKHNpemVvZihzdHJ1Y3QgYmZhX3VmX2J1Zl9zKSAqIG51bV91ZnMpLAorCQkJCQkJCUJGQV9ETUFfQUxJR05fU1opOworCisJLyoKKwkgKiBrZXJuZWwgVmlydHVhbCBtZW1vcnkgZm9yIFVGcyBhbmQgVUYgYnVmIHBvc3QgbXNnIGNvcGllcworCSAqLworCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZhX3VmX3MpICogbnVtX3VmczsKKwkqbmRtX2xlbiArPSBzaXplb2Yoc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zKSAqIG51bV91ZnM7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0gPSBCRkFfVUZfTU9EKGJmYSk7CisKKwliZmFfb3NfbWVtc2V0KHVmbSwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfdWZfbW9kX3MpKTsKKwl1Zm0tPmJmYSA9IGJmYTsKKwl1Zm0tPm51bV91ZnMgPSBjZmctPmZ3Y2ZnLm51bV91Zl9idWZzOworCUlOSVRfTElTVF9IRUFEKCZ1Zm0tPnVmX2ZyZWVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJnVmbS0+dWZfcG9zdGVkX3EpOworCisJdWZfbWVtX2NsYWltKHVmbSwgbWVtaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgc3RydWN0IGJmYV91Zl9zICoKK2JmYV91Zl9nZXQoc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZfbW9kKQoreworCXN0cnVjdCBiZmFfdWZfcyAgICp1ZjsKKworCWJmYV9xX2RlcSgmdWZfbW9kLT51Zl9mcmVlX3EsICZ1Zik7CisJcmV0dXJuICh1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfcHV0KHN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmX21vZCwgc3RydWN0IGJmYV91Zl9zICp1ZikKK3sKKwlsaXN0X2FkZF90YWlsKCZ1Zi0+cWUsICZ1Zl9tb2QtPnVmX2ZyZWVfcSk7Cit9CisKK3N0YXRpYyBiZmFfc3RhdHVzX3QKK2JmYV91Zl9wb3N0KHN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSwgc3RydWN0IGJmYV91Zl9zICp1ZikKK3sKKwlzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MgKnVmX3Bvc3RfbXNnOworCisJdWZfcG9zdF9tc2cgPSBiZmFfcmVxcV9uZXh0KHVmbS0+YmZhLCBCRkFfUkVRUV9GQ1hQKTsKKwlpZiAoIXVmX3Bvc3RfbXNnKQorCQlyZXR1cm4gQkZBX1NUQVRVU19GQUlMRUQ7CisKKwliZmFfb3NfbWVtY3B5KHVmX3Bvc3RfbXNnLCAmdWZtLT51Zl9idWZfcG9zdHNbdWYtPnVmX3RhZ10sCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MpKTsKKwliZmFfcmVxcV9wcm9kdWNlKHVmbS0+YmZhLCBCRkFfUkVRUV9GQ1hQKTsKKworCWJmYV90cmModWZtLT5iZmEsIHVmLT51Zl90YWcpOworCisJbGlzdF9hZGRfdGFpbCgmdWYtPnFlLCAmdWZtLT51Zl9wb3N0ZWRfcSk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfcG9zdF9hbGwoc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZfbW9kKQoreworCXN0cnVjdCBiZmFfdWZfcyAgICp1ZjsKKworCXdoaWxlICgodWYgPSBiZmFfdWZfZ2V0KHVmX21vZCkpICE9IE5VTEwpIHsKKwkJaWYgKGJmYV91Zl9wb3N0KHVmX21vZCwgdWYpICE9IEJGQV9TVEFUVVNfT0spCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1Zl9yZWN2KHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX3VmX2ZybV9yY3ZkX3MgKm0pCit7CisJc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtID0gQkZBX1VGX01PRChiZmEpOworCXUxNiAgICAgICAgdWZfdGFnID0gbS0+YnVmX3RhZzsKKwlzdHJ1Y3QgYmZhX3VmX2J1Zl9zICp1Zl9idWYgPSAmdWZtLT51Zl9wYnNfa3ZhW3VmX3RhZ107CisJc3RydWN0IGJmYV91Zl9zICAgKnVmID0gJnVmbS0+dWZfbGlzdFt1Zl90YWddOworCXU4ICAgICAgICAqYnVmID0gJnVmX2J1Zi0+ZFswXTsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgKmZjaHM7CisKKwltLT5mcm1fbGVuID0gYmZhX29zX250b2hzKG0tPmZybV9sZW4pOworCW0tPnhmcl9sZW4gPSBiZmFfb3NfbnRvaHMobS0+eGZyX2xlbik7CisKKwlmY2hzID0gKHN0cnVjdCBmY2hzX3MgKikgdWZfYnVmOworCisJbGlzdF9kZWwoJnVmLT5xZSk7CS8qIGRlcXVldWUgZnJvbSBwb3N0ZWQgcXVldWUgKi8KKworCXVmLT5kYXRhX3B0ciA9IGJ1ZjsKKwl1Zi0+ZGF0YV9sZW4gPSBtLT54ZnJfbGVuOworCisJYmZhX2Fzc2VydCh1Zi0+ZGF0YV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKKworCWlmICh1Zi0+ZGF0YV9sZW4gPT0gc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKSB7CisJCWJmYV9wbG9nX2ZjaGRyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfVUYsIEJGQV9QTF9FSURfUlgsCisJCQkgICAgICAgdWYtPmRhdGFfbGVuLCAoc3RydWN0IGZjaHNfcyAqKSBidWYpOworCX0gZWxzZSB7CisJCXUzMiAgICAgICAgcGxkX3cwID0gKigodTMyICopIChidWYgKyBzaXplb2Yoc3RydWN0IGZjaHNfcykpKTsKKwkJYmZhX3Bsb2dfZmNoZHJfYW5kX3BsKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfVUYsCisJCQkJICAgICAgQkZBX1BMX0VJRF9SWCwgdWYtPmRhdGFfbGVuLAorCQkJCSAgICAgIChzdHJ1Y3QgZmNoc19zICopIGJ1ZiwgcGxkX3cwKTsKKwl9CisKKwliZmFfY2JfcXVldWUoYmZhLCAmdWYtPmhjYl9xZSwgX19iZmFfY2JfdWZfcmVjdiwgdWYpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0gPSBCRkFfVUZfTU9EKGJmYSk7CisJc3RydWN0IGJmYV91Zl9zICAgKnVmOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmdWZtLT51Zl9wb3N0ZWRfcSkgeworCQl1ZiA9IChzdHJ1Y3QgYmZhX3VmX3MgKikgcWU7CisJCWxpc3RfZGVsKCZ1Zi0+cWUpOworCQliZmFfdWZfcHV0KHVmbSwgdWYpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfdWZfcG9zdF9hbGwoQkZBX1VGX01PRChiZmEpKTsKK30KKworCisKKy8qKgorICogIGJmYV91Zl9hcGkKKyAqLworCisvKioKKyAqIAkJUmVnaXN0ZXIgaGFuZGxlciBmb3IgYWxsIHVuc29saWN0ZWQgcmVjaWV2ZSBmcmFtZXMuCisgKgorICogQHBhcmFtW2luXQliZmEJCUJGQSBpbnN0YW5jZQorICogQHBhcmFtW2luXQl1ZnJlY3YJcmVjZWl2ZSBoYW5kbGVyIGZ1bmN0aW9uCisgKiBAcGFyYW1baW5dCWNiYXJnCXJlY2VpdmUgaGFuZGxlciBhcmcKKyAqLwordm9pZAorYmZhX3VmX3JlY3ZfcmVnaXN0ZXIoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl91Zl9yZWN2X3QgdWZyZWN2LCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0gPSBCRkFfVUZfTU9EKGJmYSk7CisKKwl1Zm0tPnVmcmVjdiA9IHVmcmVjdjsKKwl1Zm0tPmNiYXJnID0gY2Jhcmc7Cit9CisKKy8qKgorICogCQlGcmVlIGFuIHVuc29saWNpdGVkIGZyYW1lIGJhY2sgdG8gQkZBLgorICoKKyAqIEBwYXJhbVtpbl0JCXVmCQl1bnNvbGljaXRlZCBmcmFtZSB0byBiZSBmcmVlZAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfdWZfZnJlZShzdHJ1Y3QgYmZhX3VmX3MgKnVmKQoreworCWJmYV91Zl9wdXQoQkZBX1VGX01PRCh1Zi0+YmZhKSwgdWYpOworCWJmYV91Zl9wb3N0X2FsbChCRkFfVUZfTU9EKHVmLT5iZmEpKTsKK30KKworCisKKy8qKgorICogIHVmX3B1YiBCRkEgdWYgbW9kdWxlIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworCit2b2lkCitiZmFfdWZfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpCit7CisJYmZhX3RyYyhiZmEsIG1zZy0+bWhkci5tc2dfaWQpOworCisJc3dpdGNoIChtc2ctPm1oZHIubXNnX2lkKSB7CisJY2FzZSBCRklfVUZfSTJIX0ZSTV9SQ1ZEOgorCQl1Zl9yZWN2KGJmYSwgKHN0cnVjdCBiZmlfdWZfZnJtX3JjdmRfcyAqKSBtc2cpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV90cmMoYmZhLCBtc2ctPm1oZHIubXNnX2lkKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdWZfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdWZfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjQ5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zl9wcml2LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9VRl9QUklWX0hfXworI2RlZmluZSBfX0JGQV9VRl9QUklWX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3NtLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfdWYuaD4KKworI2RlZmluZSBCRkFfVUZfTUlOCSg0KQorCitzdHJ1Y3QgYmZhX3VmX21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3MgKmJmYTsJCS8qICBiYWNrIHBvaW50ZXIgdG8gQkZBICovCisJc3RydWN0IGJmYV91Zl9zICp1Zl9saXN0OwkvKiAgYXJyYXkgb2YgVUZzICovCisJdTE2CW51bV91ZnM7CS8qICBudW0gdW5zb2xpY2l0ZWQgcnggZnJhbWVzICovCisJc3RydWN0IGxpc3RfaGVhZCAJdWZfZnJlZV9xOwkvKiAgZnJlZSBVRnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAl1Zl9wb3N0ZWRfcTsJLyogIFVGcyBwb3N0ZWQgdG8gSU9DICovCisJc3RydWN0IGJmYV91Zl9idWZfcyAqdWZfcGJzX2t2YTsJLyogIGxpc3QgVUYgYnVmcyByZXF1ZXN0IHBsZCAqLworCXU2NAl1Zl9wYnNfcGE7CS8qICBwaHkgYWRkciBmb3IgVUYgYnVmcyAqLworCXN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcyAqdWZfYnVmX3Bvc3RzOworCQkJCQkvKiAgcHJlLWJ1aWx0IFVGIHBvc3QgbXNncyAqLworCWJmYV9jYl91Zl9yZWN2X3QgdWZyZWN2OwkvKiAgdWYgcmVjdiBoYW5kbGVyIGZ1bmN0aW9uICovCisJdm9pZAkJKmNiYXJnOwkJLyogIHVmIHJlY2VpdmUgaGFuZGxlciBhcmcgKi8KK307CisKKyNkZWZpbmUgQkZBX1VGX01PRChfX2JmYSkJKCYoX19iZmEpLT5tb2R1bGVzLnVmX21vZCkKKworI2RlZmluZSB1Zm1fcGJzX3BhKF91Zm1vZCwgX3VmdGFnKQlcCisJKChfdWZtb2QpLT51Zl9wYnNfcGEgKyBzaXplb2Yoc3RydWN0IGJmYV91Zl9idWZfcykgKiAoX3VmdGFnKSkKKwordm9pZAliZmFfdWZfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworCisjZW5kaWYgLyogX19CRkFfVUZfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYyYmU1YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZC5jCkBAIC0wLDAgKzEsMTE4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFkLmMgTGludXggZHJpdmVyIFBDSSBpbnRlcmZhY2UgbW9kdWxlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlICJiZmFkX2Rydi5oIgorI2luY2x1ZGUgImJmYWRfaW0uaCIKKyNpbmNsdWRlICJiZmFkX3RtLmgiCisjaW5jbHVkZSAiYmZhZF9pcGZjLmgiCisjaW5jbHVkZSAiYmZhZF90cmNtb2QuaCIKKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYl92Zi5oPgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfcG9ydC5oPgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiLmg+CisKK0JGQV9UUkNfRklMRShMRFJWLCBCRkFEKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYmZhZF9tdXRleCk7CitMSVNUX0hFQUQoYmZhZF9saXN0KTsKK3N0YXRpYyBpbnQgICAgICBiZmFkX2luc3Q7CitpbnQgYmZhZF9zdXBwb3J0ZWRfZmM0czsKKworc3RhdGljIGNoYXIgICAgICpob3N0X25hbWU7CitzdGF0aWMgY2hhciAgICAgKm9zX25hbWU7CitzdGF0aWMgY2hhciAgICAgKm9zX3BhdGNoOworc3RhdGljIGludCAgICAgIG51bV9ycG9ydHM7CitzdGF0aWMgaW50ICAgICAgbnVtX2lvczsKK3N0YXRpYyBpbnQgICAgICBudW1fdG1zOworc3RhdGljIGludCAgICAgIG51bV9mY3hwczsKK3N0YXRpYyBpbnQgICAgICBudW1fdWZidWZzOworc3RhdGljIGludCAgICAgIHJlcXFfc2l6ZTsKK3N0YXRpYyBpbnQgICAgICByc3BxX3NpemU7CitzdGF0aWMgaW50ICAgICAgbnVtX3NncGdzOworc3RhdGljIGludCAgICAgIHJwb3J0X2RlbF90aW1lb3V0ID0gQkZBX0ZDU19SUE9SVF9ERUZfREVMX1RJTUVPVVQ7CitzdGF0aWMgaW50ICAgICAgYmZhX2lvX21heF9zZ2UgPSBCRkFEX0lPX01BWF9TR0U7CitzdGF0aWMgaW50ICAgICAgbG9nX2xldmVsID0gQkZBX0xPR19XQVJOSU5HOworc3RhdGljIGludCAgICAgIGlvY19hdXRvX3JlY292ZXIgPSBCRkFfVFJVRTsKK3N0YXRpYyBpbnQgICAgICBpcGZjX2VuYWJsZSA9IEJGQV9GQUxTRTsKK3N0YXRpYyBpbnQgICAgICBpcGZjX210dSA9IC0xOworaW50IAkJYmZhX2x1bl9xdWV1ZV9kZXB0aCA9IEJGQURfTFVOX1FVRVVFX0RFUFRIOworaW50ICAgICAgCWJmYV9saW5rdXBfZGVsYXkgPSAtMTsKKworbW9kdWxlX3BhcmFtKG9zX25hbWUsIGNoYXJwLCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0ob3NfcGF0Y2gsIGNoYXJwLCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oaG9zdF9uYW1lLCBjaGFycCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKG51bV9ycG9ydHMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKG51bV9pb3MsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKG51bV90bXMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKG51bV9mY3hwcywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX3VmYnVmcywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0ocmVxcV9zaXplLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShyc3BxX3NpemUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKG51bV9zZ3BncywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0ocnBvcnRfZGVsX3RpbWVvdXQsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGJmYV9sdW5fcXVldWVfZGVwdGgsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGJmYV9pb19tYXhfc2dlLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShsb2dfbGV2ZWwsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGlvY19hdXRvX3JlY292ZXIsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGlwZmNfZW5hYmxlLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShpcGZjX210dSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oYmZhX2xpbmt1cF9kZWxheSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CisKKy8qCisgKiBTdG9yZXMgdGhlIG1vZHVsZSBwYXJtIG51bV9zZ3BncyB2YWx1ZTsKKyAqIHVzZWQgdG8gcmVzZXQgZm9yIGJmYWQgbmV4dCBpbnN0YW5jZS4KKyAqLworc3RhdGljIGludCBudW1fc2dwZ3NfcGFybTsKKworc3RhdGljIGJmYV9zdGF0dXNfdAorYmZhZF9mYzRfcHJvYmUoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpbnQgICAgICAgICAgICAgcmM7CisKKwlyYyA9IGJmYWRfaW1fcHJvYmUoYmZhZCk7CisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gZXh0OworCisJYmZhZF90bV9wcm9iZShiZmFkKTsKKworCWlmIChpcGZjX2VuYWJsZSkKKwkJYmZhZF9pcGZjX3Byb2JlKGJmYWQpOworZXh0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQKK2JmYWRfZmM0X3Byb2JlX3VuZG8oc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwliZmFkX2ltX3Byb2JlX3VuZG8oYmZhZCk7CisJYmZhZF90bV9wcm9iZV91bmRvKGJmYWQpOworCWlmIChpcGZjX2VuYWJsZSkKKwkJYmZhZF9pcGZjX3Byb2JlX3VuZG8oYmZhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFkX2ZjNF9wcm9iZV9wb3N0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaWYgKGJmYWQtPmltKQorCQliZmFkX2ltX3Byb2JlX3Bvc3QoYmZhZC0+aW0pOworCisJYmZhZF90bV9wcm9iZV9wb3N0KGJmYWQpOworCWlmIChpcGZjX2VuYWJsZSkKKwkJYmZhZF9pcGZjX3Byb2JlX3Bvc3QoYmZhZCk7Cit9CisKK3N0YXRpYyBiZmFfc3RhdHVzX3QKK2JmYWRfZmM0X3BvcnRfbmV3KHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCwgaW50IHJvbGVzKQoreworCWludCAgICAgICAgICAgICByYyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisJCXJjID0gYmZhZF9pbV9wb3J0X25ldyhiZmFkLCBwb3J0KTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBleHQ7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkKKwkJcmMgPSBiZmFkX3RtX3BvcnRfbmV3KGJmYWQsIHBvcnQpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIGV4dDsKKworCWlmICgocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKSAmJiBpcGZjX2VuYWJsZSkKKwkJcmMgPSBiZmFkX2lwZmNfcG9ydF9uZXcoYmZhZCwgcG9ydCwgcG9ydC0+cHZiX3R5cGUpOworZXh0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQKK2JmYWRfZmM0X3BvcnRfZGVsZXRlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCwgaW50IHJvbGVzKQoreworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorCQliZmFkX2ltX3BvcnRfZGVsZXRlKGJmYWQsIHBvcnQpOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisJCWJmYWRfdG1fcG9ydF9kZWxldGUoYmZhZCwgcG9ydCk7CisKKwlpZiAoKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykgJiYgaXBmY19lbmFibGUpCisJCWJmYWRfaXBmY19wb3J0X2RlbGV0ZShiZmFkLCBwb3J0KTsKK30KKworLyoqCisgKiAgQkZBIGNhbGxiYWNrcworICovCit2b2lkCitiZmFkX2hjYl9jb21wKHZvaWQgKmFyZywgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhZF9oYWxfY29tcCAqZmNvbXAgPSAoc3RydWN0IGJmYWRfaGFsX2NvbXAgKilhcmc7CisKKwlmY29tcC0+c3RhdHVzID0gc3RhdHVzOworCWNvbXBsZXRlKCZmY29tcC0+Y29tcCk7Cit9CisKKy8qKgorICogYmZhX2luaXQgY2FsbGJhY2sKKyAqLwordm9pZAorYmZhX2NiX2luaXQodm9pZCAqZHJ2LCBiZmFfc3RhdHVzX3QgaW5pdF9zdGF0dXMpCit7CisJc3RydWN0IGJmYWRfcyAgKmJmYWQgPSBkcnY7CisKKwlpZiAoaW5pdF9zdGF0dXMgPT0gQkZBX1NUQVRVU19PSykKKwkJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX0hBTF9JTklUX0RPTkU7CisKKwljb21wbGV0ZSgmYmZhZC0+Y29tcCk7Cit9CisKKworCisvKioKKyAqICBCRkFfRkNTIGNhbGxiYWNrcworICovCitzdGF0aWMgc3RydWN0IGJmYWRfcG9ydF9zICoKK2JmYWRfZ2V0X2Rydl9wb3J0KHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2RydiwKKwkJICBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJcmV0dXJuICgodnBfZHJ2KSA/ICgmKHZwX2RydiktPmRydl9wb3J0KQorCQk6ICgodmZfZHJ2KSA/ICgmKHZmX2RydiktPmJhc2VfcG9ydCkgOiAoJihiZmFkKS0+cHBvcnQpKSk7Cit9CisKK3N0cnVjdCBiZmFkX3BvcnRfcyAqCitiZmFfZmNiX3BvcnRfbmV3KHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlcywgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LAorCQkgc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBfZHJ2KQoreworCWJmYV9zdGF0dXNfdCAgICByYzsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnRfZHJ2OworCisJaWYgKCF2cF9kcnYgJiYgIXZmX2RydikgeworCQlwb3J0X2RydiA9ICZiZmFkLT5wcG9ydDsKKwkJcG9ydF9kcnYtPnB2Yl90eXBlID0gQkZBRF9QT1JUX1BIWVNfQkFTRTsKKwl9IGVsc2UgaWYgKCF2cF9kcnYgJiYgdmZfZHJ2KSB7CisJCXBvcnRfZHJ2ID0gJnZmX2Rydi0+YmFzZV9wb3J0OworCQlwb3J0X2Rydi0+cHZiX3R5cGUgPSBCRkFEX1BPUlRfVkZfQkFTRTsKKwl9IGVsc2UgaWYgKHZwX2RydiAmJiAhdmZfZHJ2KSB7CisJCXBvcnRfZHJ2ID0gJnZwX2Rydi0+ZHJ2X3BvcnQ7CisJCXBvcnRfZHJ2LT5wdmJfdHlwZSA9IEJGQURfUE9SVF9QSFlTX1ZQT1JUOworCX0gZWxzZSB7CisJCXBvcnRfZHJ2ID0gJnZwX2Rydi0+ZHJ2X3BvcnQ7CisJCXBvcnRfZHJ2LT5wdmJfdHlwZSA9IEJGQURfUE9SVF9WRl9WUE9SVDsKKwl9CisKKwlwb3J0X2Rydi0+ZmNzX3BvcnQgPSBwb3J0OworCXBvcnRfZHJ2LT5yb2xlcyA9IHJvbGVzOworCXJjID0gYmZhZF9mYzRfcG9ydF9uZXcoYmZhZCwgcG9ydF9kcnYsIHJvbGVzKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFkX2ZjNF9wb3J0X2RlbGV0ZShiZmFkLCBwb3J0X2Rydiwgcm9sZXMpOworCQlwb3J0X2RydiA9IE5VTEw7CisJfQorCisJcmV0dXJuIHBvcnRfZHJ2OworfQorCit2b2lkCitiZmFfZmNiX3BvcnRfZGVsZXRlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlcywKKwkJICAgIHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2Rydiwgc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBfZHJ2KQoreworCXN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydF9kcnY7CisKKwkvKgorCSAqIHRoaXMgd2lsbCBiZSBvbmx5IGNhbGxlZCBmcm9tIHJtbW9kIGNvbnRleHQKKwkgKi8KKwlpZiAodnBfZHJ2ICYmICF2cF9kcnYtPmNvbXBfZGVsKSB7CisJCXBvcnRfZHJ2ID0gYmZhZF9nZXRfZHJ2X3BvcnQoYmZhZCwgdmZfZHJ2LCB2cF9kcnYpOworCQliZmFfdHJjKGJmYWQsIHJvbGVzKTsKKwkJYmZhZF9mYzRfcG9ydF9kZWxldGUoYmZhZCwgcG9ydF9kcnYsIHJvbGVzKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9mY2JfcG9ydF9vbmxpbmUoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLAorCQkgICAgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0X2RydiA9IGJmYWRfZ2V0X2Rydl9wb3J0KGJmYWQsIHZmX2RydiwgdnBfZHJ2KTsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorCQliZmFkX2ltX3BvcnRfb25saW5lKGJmYWQsIHBvcnRfZHJ2KTsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorCQliZmFkX3RtX3BvcnRfb25saW5lKGJmYWQsIHBvcnRfZHJ2KTsKKworCWlmICgocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKSAmJiBpcGZjX2VuYWJsZSkKKwkJYmZhZF9pcGZjX3BvcnRfb25saW5lKGJmYWQsIHBvcnRfZHJ2KTsKKworCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9QT1JUX09OTElORTsKK30KKwordm9pZAorYmZhX2ZjYl9wb3J0X29mZmxpbmUoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLAorCQkgICAgIHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2Rydiwgc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBfZHJ2KQoreworCXN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydF9kcnYgPSBiZmFkX2dldF9kcnZfcG9ydChiZmFkLCB2Zl9kcnYsIHZwX2Rydik7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKwkJYmZhZF9pbV9wb3J0X29mZmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisJCWJmYWRfdG1fcG9ydF9vZmZsaW5lKGJmYWQsIHBvcnRfZHJ2KTsKKworCWlmICgocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKSAmJiBpcGZjX2VuYWJsZSkKKwkJYmZhZF9pcGZjX3BvcnRfb2ZmbGluZShiZmFkLCBwb3J0X2Rydik7Cit9CisKK3ZvaWQKK2JmYV9mY2JfdnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0X2RydikKK3sKKwlpZiAodnBvcnRfZHJ2LT5jb21wX2RlbCkgeworCQljb21wbGV0ZSh2cG9ydF9kcnYtPmNvbXBfZGVsKTsKKwkJcmV0dXJuOworCX0KKworCWtmcmVlKHZwb3J0X2Rydik7Cit9CisKKy8qKgorICogRkNTIFJQT1JUIGFsbG9jIGNhbGxiYWNrLCBhZnRlciBzdWNjZXNzZnVsIFBMT0dJIGJ5IEZDUworICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY2JfcnBvcnRfYWxsb2Moc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKnJwb3J0LAorCQkgICAgc3RydWN0IGJmYWRfcnBvcnRfcyAqKnJwb3J0X2RydikKK3sKKwliZmFfc3RhdHVzX3QgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCisJKnJwb3J0X2RydiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3Jwb3J0X3MpLCBHRlBfQVRPTUlDKTsKKwlpZiAoKnJwb3J0X2RydiA9PSBOVUxMKSB7CisJCXJjID0gQkZBX1NUQVRVU19FTk9NRU07CisJCWdvdG8gZXh0OworCX0KKworCSpycG9ydCA9ICYoKnJwb3J0X2RydiktPmZjc19ycG9ydDsKKworZXh0OgorCXJldHVybiByYzsKK30KKworCisKK3ZvaWQKK2JmYWRfaGFsX21lbV9yZWxlYXNlKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9tZW1pbmZvX3MgKmhhbF9tZW1pbmZvID0gJmJmYWQtPm1lbWluZm87CisJc3RydWN0IGJmYV9tZW1fZWxlbV9zICptZW1pbmZvX2VsZW07CisKKwlmb3IgKGkgPSAwOyBpIDwgQkZBX01FTV9UWVBFX01BWDsgaSsrKSB7CisJCW1lbWluZm9fZWxlbSA9ICZoYWxfbWVtaW5mby0+bWVtaW5mb1tpXTsKKwkJaWYgKG1lbWluZm9fZWxlbS0+a3ZhICE9IE5VTEwpIHsKKwkJCXN3aXRjaCAobWVtaW5mb19lbGVtLT5tZW1fdHlwZSkgeworCQkJY2FzZSBCRkFfTUVNX1RZUEVfS1ZBOgorCQkJCXZmcmVlKG1lbWluZm9fZWxlbS0+a3ZhKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQkZBX01FTV9UWVBFX0RNQToKKwkJCQlkbWFfZnJlZV9jb2hlcmVudCgmYmZhZC0+cGNpZGV2LT5kZXYsCisJCQkJCQltZW1pbmZvX2VsZW0tPm1lbV9sZW4sCisJCQkJCQltZW1pbmZvX2VsZW0tPmt2YSwKKwkJCQkJCShkbWFfYWRkcl90KSBtZW1pbmZvX2VsZW0tPmRtYSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJmYV9hc3NlcnQoMCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwltZW1zZXQoaGFsX21lbWluZm8sIDAsIHNpemVvZihzdHJ1Y3QgYmZhX21lbWluZm9fcykpOworfQorCit2b2lkCitiZmFkX3VwZGF0ZV9oYWxfY2ZnKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmJmYV9jZmcpCit7CisJaWYgKG51bV9ycG9ydHMgPiAwKQorCQliZmFfY2ZnLT5md2NmZy5udW1fcnBvcnRzID0gbnVtX3Jwb3J0czsKKwlpZiAobnVtX2lvcyA+IDApCisJCWJmYV9jZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPSBudW1faW9zOworCWlmIChudW1fdG1zID4gMCkKKwkJYmZhX2NmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXMgPSBudW1fdG1zOworCWlmIChudW1fZmN4cHMgPiAwKQorCQliZmFfY2ZnLT5md2NmZy5udW1fZmN4cF9yZXFzID0gbnVtX2ZjeHBzOworCWlmIChudW1fdWZidWZzID4gMCkKKwkJYmZhX2NmZy0+ZndjZmcubnVtX3VmX2J1ZnMgPSBudW1fdWZidWZzOworCWlmIChyZXFxX3NpemUgPiAwKQorCQliZmFfY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXMgPSByZXFxX3NpemU7CisJaWYgKHJzcHFfc2l6ZSA+IDApCisJCWJmYV9jZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyA9IHJzcHFfc2l6ZTsKKwlpZiAobnVtX3NncGdzID4gMCkKKwkJYmZhX2NmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyA9IG51bV9zZ3BnczsKKworCS8qCisJICogcG9wdWxhdGUgdGhlIGhhbCB2YWx1ZXMgYmFjayB0byB0aGUgZHJpdmVyIGZvciBzeXNmcyB1c2UuCisJICogb3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCB2YWx1ZXMgd2lsbCBiZSBzaG93biBhcyAwIGluIHN5c2ZzCisJICovCisJbnVtX3Jwb3J0cyA9IGJmYV9jZmctPmZ3Y2ZnLm51bV9ycG9ydHM7CisJbnVtX2lvcyAgICA9IGJmYV9jZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXM7CisJbnVtX3RtcwkgICA9IGJmYV9jZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzOworCW51bV9mY3hwcyAgPSBiZmFfY2ZnLT5md2NmZy5udW1fZmN4cF9yZXFzOworCW51bV91ZmJ1ZnMgPSBiZmFfY2ZnLT5md2NmZy5udW1fdWZfYnVmczsKKwlyZXFxX3NpemUgID0gYmZhX2NmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zOworCXJzcHFfc2l6ZSAgPSBiZmFfY2ZnLT5kcnZjZmcubnVtX3JzcHFfZWxlbXM7CisJbnVtX3NncGdzICA9IGJmYV9jZmctPmRydmNmZy5udW1fc2dwZ3M7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9oYWxfbWVtX2FsbG9jKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJc3RydWN0IGJmYV9tZW1pbmZvX3MgKmhhbF9tZW1pbmZvID0gJmJmYWQtPm1lbWluZm87CisJc3RydWN0IGJmYV9tZW1fZWxlbV9zICptZW1pbmZvX2VsZW07CisJYmZhX3N0YXR1c190ICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKwlkbWFfYWRkcl90ICAgICAgcGh5c19hZGRyOworCWludCAgICAgICAgICAgICByZXRyeV9jb3VudCA9IDA7CisJaW50ICAgICAgICAgICAgIHJlc2V0X3ZhbHVlID0gMTsKKwlpbnQgICAgICAgICAgICAgbWluX251bV9zZ3BncyA9IDUxMjsKKwl2b2lkICAgICAgICAgICAqa3ZhOworCWludCAgICAgICAgICAgICBpOworCisJYmZhX2NmZ19nZXRfZGVmYXVsdCgmYmZhZC0+aW9jX2NmZyk7CisKK3JldHJ5OgorCWJmYWRfdXBkYXRlX2hhbF9jZmcoJmJmYWQtPmlvY19jZmcpOworCWJmYWQtPmNmZ19kYXRhLmlvY19xdWV1ZV9kZXB0aCA9IGJmYWQtPmlvY19jZmcuZndjZmcubnVtX2lvaW1fcmVxczsKKwliZmFfY2ZnX2dldF9tZW1pbmZvKCZiZmFkLT5pb2NfY2ZnLCBoYWxfbWVtaW5mbyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkZBX01FTV9UWVBFX01BWDsgaSsrKSB7CisJCW1lbWluZm9fZWxlbSA9ICZoYWxfbWVtaW5mby0+bWVtaW5mb1tpXTsKKwkJc3dpdGNoIChtZW1pbmZvX2VsZW0tPm1lbV90eXBlKSB7CisJCWNhc2UgQkZBX01FTV9UWVBFX0tWQToKKwkJCWt2YSA9IHZtYWxsb2MobWVtaW5mb19lbGVtLT5tZW1fbGVuKTsKKwkJCWlmIChrdmEgPT0gTlVMTCkgeworCQkJCWJmYWRfaGFsX21lbV9yZWxlYXNlKGJmYWQpOworCQkJCXJjID0gQkZBX1NUQVRVU19FTk9NRU07CisJCQkJZ290byBleHQ7CisJCQl9CisJCQltZW1zZXQoa3ZhLCAwLCBtZW1pbmZvX2VsZW0tPm1lbV9sZW4pOworCQkJbWVtaW5mb19lbGVtLT5rdmEgPSBrdmE7CisJCQlicmVhazsKKwkJY2FzZSBCRkFfTUVNX1RZUEVfRE1BOgorCQkJa3ZhID0gZG1hX2FsbG9jX2NvaGVyZW50KCZiZmFkLT5wY2lkZXYtPmRldiwKKwkJCQkJbWVtaW5mb19lbGVtLT5tZW1fbGVuLAorCQkJCQkmcGh5c19hZGRyLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChrdmEgPT0gTlVMTCkgeworCQkJCWJmYWRfaGFsX21lbV9yZWxlYXNlKGJmYWQpOworCQkJCS8qCisJCQkJICogSWYgd2UgY2Fubm90IGFsbG9jYXRlIHdpdGggZGVmYXVsdAorCQkJCSAqIG51bV9zZ3BhZ2VzIHRyeSB3aXRoIGhhbGYgdGhlIHZhbHVlLgorCQkJCSAqLworCQkJCWlmIChudW1fc2dwZ3MgPiBtaW5fbnVtX3NncGdzKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8gImJmYWRbJWRdOiBtZW1vcnkiCisJCQkJCQkiIGFsbG9jYXRpb24gZmFpbGVkIHdpdGgiCisJCQkJCQkiIG51bV9zZ3BnczogJWRcbiIsCisJCQkJCQliZmFkLT5pbnN0X25vLCBudW1fc2dwZ3MpOworCQkJCQluZXh0TG93ZXJJbnQoJm51bV9zZ3Bncyk7CisJCQkJCXByaW50ayhLRVJOX0lORk8gImJmYWRbJWRdOiB0cnlpbmcgdG8iCisJCQkJCQkiIGFsbG9jYXRlIG1lbW9yeSB3aXRoIgorCQkJCQkJIiBudW1fc2dwZ3M6ICVkXG4iLAorCQkJCQkJYmZhZC0+aW5zdF9ubywgbnVtX3NncGdzKTsKKwkJCQkJcmV0cnlfY291bnQrKzsKKwkJCQkJZ290byByZXRyeTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAobnVtX3NncGdzX3Bhcm0gPiAwKQorCQkJCQkJbnVtX3NncGdzID0gbnVtX3NncGdzX3Bhcm07CisJCQkJCWVsc2UgeworCQkJCQkJcmVzZXRfdmFsdWUgPQorCQkJCQkJCSgxIDw8IHJldHJ5X2NvdW50KTsKKwkJCQkJCW51bV9zZ3BncyAqPSByZXNldF92YWx1ZTsKKwkJCQkJfQorCQkJCQlyYyA9IEJGQV9TVEFUVVNfRU5PTUVNOworCQkJCQlnb3RvIGV4dDsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChudW1fc2dwZ3NfcGFybSA+IDApCisJCQkJbnVtX3NncGdzID0gbnVtX3NncGdzX3Bhcm07CisJCQllbHNlIHsKKwkJCQlyZXNldF92YWx1ZSA9ICgxIDw8IHJldHJ5X2NvdW50KTsKKwkJCQludW1fc2dwZ3MgKj0gcmVzZXRfdmFsdWU7CisJCQl9CisKKwkJCW1lbXNldChrdmEsIDAsIG1lbWluZm9fZWxlbS0+bWVtX2xlbik7CisJCQltZW1pbmZvX2VsZW0tPmt2YSA9IGt2YTsKKwkJCW1lbWluZm9fZWxlbS0+ZG1hID0gcGh5c19hZGRyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKworCQl9CisJfQorZXh0OgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBDcmVhdGUgYSB2cG9ydCB1bmRlciBhIHZmLgorICovCitiZmFfc3RhdHVzX3QKK2JmYWRfdnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHUxNiB2Zl9pZCwKKwkJICBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnKQoreworCXN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0OworCWludCAgICAgICAgICAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCXN0cnVjdCBjb21wbGV0aW9uIGZjb21wOworCisJdnBvcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhZF92cG9ydF9zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cG9ydCkgeworCQlyYyA9IEJGQV9TVEFUVVNfRU5PTUVNOworCQlnb3RvIGV4dDsKKwl9CisKKwl2cG9ydC0+ZHJ2X3BvcnQuYmZhZCA9IGJmYWQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXJjID0gYmZhX2Zjc192cG9ydF9jcmVhdGUoJnZwb3J0LT5mY3NfdnBvcnQsICZiZmFkLT5iZmFfZmNzLCB2Zl9pZCwKKwkJCQkgIHBvcnRfY2ZnLCB2cG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBleHRfZnJlZV92cG9ydDsKKworCWlmIChwb3J0X2NmZy0+cm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkgeworCQlyYyA9IGJmYWRfaW1fc2NzaV9ob3N0X2FsbG9jKGJmYWQsIHZwb3J0LT5kcnZfcG9ydC5pbV9wb3J0KTsKKwkJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCQlnb3RvIGV4dF9mcmVlX2Zjc192cG9ydDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX2Zjc192cG9ydF9zdGFydCgmdnBvcnQtPmZjc192cG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKKworZXh0X2ZyZWVfZmNzX3Zwb3J0OgorCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwl2cG9ydC0+Y29tcF9kZWwgPSAmZmNvbXA7CisJaW5pdF9jb21wbGV0aW9uKHZwb3J0LT5jb21wX2RlbCk7CisJYmZhX2Zjc192cG9ydF9kZWxldGUoJnZwb3J0LT5mY3NfdnBvcnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXdhaXRfZm9yX2NvbXBsZXRpb24odnBvcnQtPmNvbXBfZGVsKTsKK2V4dF9mcmVlX3Zwb3J0OgorCWtmcmVlKHZwb3J0KTsKK2V4dDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgdmYgYW5kIGl0cyBiYXNlIHZwb3J0IGltcGxpY2l0ZWx5LgorICovCitiZmFfc3RhdHVzX3QKK2JmYWRfdmZfY3JlYXRlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHUxNiB2Zl9pZCwKKwkgICAgICAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZykKK3sKKwlzdHJ1Y3QgYmZhZF92Zl9zICp2ZjsKKwlpbnQgICAgICAgICAgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCisJdmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhZF92Zl9zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2ZikgeworCQlyYyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQlnb3RvIGV4dDsKKwl9CisKKwlyYyA9IGJmYV9mY3NfdmZfY3JlYXRlKCZ2Zi0+ZmNzX3ZmLCAmYmZhZC0+YmZhX2ZjcywgdmZfaWQsIHBvcnRfY2ZnLAorCQkJICAgICAgIHZmKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJa2ZyZWUodmYpOworZXh0OgorCXJldHVybiByYzsKK30KKwordm9pZAorYmZhZF9iZmFfdG1vKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYmZhZF9zICAqYmZhZCA9IChzdHJ1Y3QgYmZhZF9zICopZGF0YTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAgZG9uZXE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwliZmFfdGltZXJfdGljaygmYmZhZC0+YmZhKTsKKworCWJmYV9jb21wX2RlcSgmYmZhZC0+YmZhLCAmZG9uZXEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaWYgKCFsaXN0X2VtcHR5KCZkb25lcSkpIHsKKwkJYmZhX2NvbXBfcHJvY2VzcygmYmZhZC0+YmZhLCAmZG9uZXEpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWJmYV9jb21wX2ZyZWUoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJfQorCisJbW9kX3RpbWVyKCZiZmFkLT5oYWxfdG1vLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhCRkFfVElNRVJfRlJFUSkpOworfQorCit2b2lkCitiZmFkX2luaXRfdGltZXIoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpbml0X3RpbWVyKCZiZmFkLT5oYWxfdG1vKTsKKwliZmFkLT5oYWxfdG1vLmZ1bmN0aW9uID0gYmZhZF9iZmFfdG1vOworCWJmYWQtPmhhbF90bW8uZGF0YSA9ICh1bnNpZ25lZCBsb25nKWJmYWQ7CisKKwltb2RfdGltZXIoJmJmYWQtPmhhbF90bW8sIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEJGQV9USU1FUl9GUkVRKSk7Cit9CisKK2ludAorYmZhZF9wY2lfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwl1bnNpZ25lZCBsb25nICAgYmFyMF9sZW47CisJaW50ICAgICAgICAgICAgIHJjID0gLUVOT0RFVjsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlCRkFfUFJJTlRGKEJGQV9FUlIsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsICVwXG4iLCBwZGV2KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgQkZBRF9EUklWRVJfTkFNRSkpCisJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpICE9IDApCisJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpICE9IDApIHsKKwkJCUJGQV9QUklOVEYoQkZBX0VSUiwgInBjaV9zZXRfZG1hX21hc2sgZmFpbCAlcFxuIiwgcGRldik7CisJCQlnb3RvIG91dF9yZWxlYXNlX3JlZ2lvbjsKKwkJfQorCisJYmZhZC0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWJhcjBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwliZmFkLT5wY2lfYmFyMF9rdmEgPSBpb3JlbWFwKGJmYWQtPnBjaV9iYXIwX21hcCwgYmFyMF9sZW4pOworCisJaWYgKGJmYWQtPnBjaV9iYXIwX2t2YSA9PSBOVUxMKSB7CisJCUJGQV9QUklOVEYoQkZBX0VSUiwgIkZhaWwgdG8gbWFwIGJhcjBcbiIpOworCQlnb3RvIG91dF9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKwliZmFkLT5oYWxfcGNpZGV2LnBjaV9zbG90ID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pOworCWJmYWQtPmhhbF9wY2lkZXYucGNpX2Z1bmMgPSBQQ0lfRlVOQyhwZGV2LT5kZXZmbik7CisJYmZhZC0+aGFsX3BjaWRldi5wY2lfYmFyX2t2YSA9IGJmYWQtPnBjaV9iYXIwX2t2YTsKKwliZmFkLT5oYWxfcGNpZGV2LmRldmljZV9pZCA9IHBkZXYtPmRldmljZTsKKwliZmFkLT5wY2lfbmFtZSA9IHBjaV9uYW1lKHBkZXYpOworCisJYmZhZC0+cGNpX2F0dHIudmVuZG9yX2lkID0gcGRldi0+dmVuZG9yOworCWJmYWQtPnBjaV9hdHRyLmRldmljZV9pZCA9IHBkZXYtPmRldmljZTsKKwliZmFkLT5wY2lfYXR0ci5zc2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKKwliZmFkLT5wY2lfYXR0ci5zc3ZpZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CisJYmZhZC0+cGNpX2F0dHIucGNpZm4gPSBQQ0lfRlVOQyhwZGV2LT5kZXZmbik7CisKKwliZmFkLT5wY2lkZXYgPSBwZGV2OworCXJldHVybiAwOworCitvdXRfcmVsZWFzZV9yZWdpb246CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK291dF9kaXNhYmxlX2RldmljZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCit2b2lkCitiZmFkX3BjaV91bmluaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisjaWYgZGVmaW5lZChfX2lhNjRfXykKKwlwY2lfaW91bm1hcChwZGV2LCBiZmFkLT5wY2lfYmFyMF9rdmEpOworI2Vsc2UKKwlpb3VubWFwKGJmYWQtPnBjaV9iYXIwX2t2YSk7CisjZW5kaWYKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cit9CisKK3ZvaWQKK2JmYWRfZmNzX3BvcnRfY2ZnKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zIHBvcnRfY2ZnOworCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIGF0dHI7CisJY2hhciAgICAgICAgICAgIHN5bW5hbWVbQkZBX1NZTU5BTUVfTUFYTEVOXTsKKworCXNwcmludGYoc3ltbmFtZSwgIiVzLSVkIiwgQkZBRF9EUklWRVJfTkFNRSwgYmZhZC0+aW5zdF9ubyk7CisJbWVtY3B5KHBvcnRfY2ZnLnN5bV9uYW1lLnN5bW5hbWUsIHN5bW5hbWUsIHN0cmxlbihzeW1uYW1lKSk7CisJYmZhX3Bwb3J0X2dldF9hdHRyKCZiZmFkLT5iZmEsICZhdHRyKTsKKwlwb3J0X2NmZy5ud3duID0gYXR0ci5ud3duOworCXBvcnRfY2ZnLnB3d24gPSBhdHRyLnB3d247CisKKwliZmFfZmNzX2NmZ19iYXNlX3BvcnQoJmJmYWQtPmJmYV9mY3MsICZwb3J0X2NmZyk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9kcnZfaW5pdChzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWJmYV9zdGF0dXNfdCAgICByYzsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyBkcml2ZXJfaW5mbzsKKwlpbnQgICAgICAgICAgICAgaTsKKworCWJmYWQtPmNmZ19kYXRhLnJwb3J0X2RlbF90aW1lb3V0ID0gcnBvcnRfZGVsX3RpbWVvdXQ7CisJYmZhZC0+Y2ZnX2RhdGEubHVuX3F1ZXVlX2RlcHRoID0gYmZhX2x1bl9xdWV1ZV9kZXB0aDsKKwliZmFkLT5jZmdfZGF0YS5pb19tYXhfc2dlID0gYmZhX2lvX21heF9zZ2U7CisJYmZhZC0+Y2ZnX2RhdGEuYmluZGluZ19tZXRob2QgPSBGQ1BfUFdXTl9CSU5ESU5HOworCisJcmMgPSBiZmFkX2hhbF9tZW1fYWxsb2MoYmZhZCk7CisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZCVkIGJmYWRfaGFsX21lbV9hbGxvYyBmYWlsdXJlXG4iLAorCQkgICAgICAgYmZhZC0+aW5zdF9ubyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJOb3QgZW5vdWdoIG1lbW9yeSB0byBhdHRhY2ggYWxsIEJyb2NhZGUgSEJBIHBvcnRzLCIKKwkJCSIgU3lzdGVtIG1heSBuZWVkIG1vcmUgbWVtb3J5LlxuIik7CisJCWdvdG8gb3V0X2hhbF9tZW1fYWxsb2NfZmFpbHVyZTsKKwl9CisKKwliZmFfaW5pdF9sb2coJmJmYWQtPmJmYSwgYmZhZC0+bG9nbW9kKTsKKwliZmFfaW5pdF90cmMoJmJmYWQtPmJmYSwgYmZhZC0+dHJjbW9kKTsKKwliZmFfaW5pdF9hZW4oJmJmYWQtPmJmYSwgYmZhZC0+YWVuKTsKKwlJTklUX0xJU1RfSEVBRCgmYmZhZC0+ZmlsZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmYmZhZC0+ZmlsZV9mcmVlX3EpOworCWZvciAoaSA9IDA7IGkgPCBCRkFEX0FFTl9NQVhfQVBQUzsgaSsrKSB7CisJCWJmYV9xX3FlX2luaXQoJmJmYWQtPmZpbGVfYnVmW2ldLnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmYmZhZC0+ZmlsZV9idWZbaV0ucWUsICZiZmFkLT5maWxlX2ZyZWVfcSk7CisJfQorCWJmYV9pbml0X3Bsb2coJmJmYWQtPmJmYSwgJmJmYWQtPnBsb2dfYnVmKTsKKwliZmFfcGxvZ19pbml0KCZiZmFkLT5wbG9nX2J1Zik7CisJYmZhX3Bsb2dfc3RyKCZiZmFkLT5wbG9nX2J1ZiwgQkZBX1BMX01JRF9EUlZSLCBCRkFfUExfRUlEX0RSSVZFUl9TVEFSVCwKKwkJICAgICAwLCAiRHJpdmVyIEF0dGFjaCIpOworCisJYmZhX2F0dGFjaCgmYmZhZC0+YmZhLCBiZmFkLCAmYmZhZC0+aW9jX2NmZywgJmJmYWQtPm1lbWluZm8sCisJCSAgICZiZmFkLT5oYWxfcGNpZGV2KTsKKworCWluaXRfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisKKwkvKgorCSAqIEVuYWJsZSBJbnRlcnJ1cHQgYW5kIHdhaXQgYmZhX2luaXQgY29tcGxldGlvbgorCSAqLworCWlmIChiZmFkX3NldHVwX2ludHIoYmZhZCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZCVkOiBiZmFkX3NldHVwX2ludHIgZmFpbGVkXG4iLAorCQkgICAgICAgYmZhZC0+aW5zdF9ubyk7CisJCWdvdG8gb3V0X3NldHVwX2ludHJfZmFpbHVyZTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX2luaXQoJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFNldCB1cCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgZWFjaCB2ZWN0b3JzCisJICovCisJaWYgKChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9NU0lYX09OKQorCSAgICAmJiBiZmFkX2luc3RhbGxfbXNpeF9oYW5kbGVyKGJmYWQpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpbnN0YWxsX21zaXggZmFpbGVkLCBiZmFkJWRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGJmYWQtPmluc3Rfbm8pOworCX0KKworCWJmYWRfaW5pdF90aW1lcihiZmFkKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCisJbWVtc2V0KCZkcml2ZXJfaW5mbywgMCwgc2l6ZW9mKGRyaXZlcl9pbmZvKSk7CisJc3RybmNweShkcml2ZXJfaW5mby52ZXJzaW9uLCBCRkFEX0RSSVZFUl9WRVJTSU9OLAorCQlzaXplb2YoZHJpdmVyX2luZm8udmVyc2lvbikgLSAxKTsKKwlpZiAoaG9zdF9uYW1lKQorCQlzdHJuY3B5KGRyaXZlcl9pbmZvLmhvc3RfbWFjaGluZV9uYW1lLCBob3N0X25hbWUsCisJCQlzaXplb2YoZHJpdmVyX2luZm8uaG9zdF9tYWNoaW5lX25hbWUpIC0gMSk7CisJaWYgKG9zX25hbWUpCisJCXN0cm5jcHkoZHJpdmVyX2luZm8uaG9zdF9vc19uYW1lLCBvc19uYW1lLAorCQkJc2l6ZW9mKGRyaXZlcl9pbmZvLmhvc3Rfb3NfbmFtZSkgLSAxKTsKKwlpZiAob3NfcGF0Y2gpCisJCXN0cm5jcHkoZHJpdmVyX2luZm8uaG9zdF9vc19wYXRjaCwgb3NfcGF0Y2gsCisJCQlzaXplb2YoZHJpdmVyX2luZm8uaG9zdF9vc19wYXRjaCkgLSAxKTsKKworCXN0cm5jcHkoZHJpdmVyX2luZm8ub3NfZGV2aWNlX25hbWUsIGJmYWQtPnBjaV9uYW1lLAorCQlzaXplb2YoZHJpdmVyX2luZm8ub3NfZGV2aWNlX25hbWUgLSAxKSk7CisKKwkvKgorCSAqIEZDUyBJTklUCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWJmYV9mY3NfbG9nX2luaXQoJmJmYWQtPmJmYV9mY3MsIGJmYWQtPmxvZ21vZCk7CisJYmZhX2Zjc190cmNfaW5pdCgmYmZhZC0+YmZhX2ZjcywgYmZhZC0+dHJjbW9kKTsKKwliZmFfZmNzX2Flbl9pbml0KCZiZmFkLT5iZmFfZmNzLCBiZmFkLT5hZW4pOworCWJmYV9mY3NfaW5pdCgmYmZhZC0+YmZhX2ZjcywgJmJmYWQtPmJmYSwgYmZhZCwgQkZBX0ZBTFNFKTsKKwliZmFfZmNzX2RyaXZlcl9pbmZvX2luaXQoJmJmYWQtPmJmYV9mY3MsICZkcml2ZXJfaW5mbyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfRFJWX0lOSVRfRE9ORTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKKworb3V0X3NldHVwX2ludHJfZmFpbHVyZToKKwliZmFfZGV0YWNoKCZiZmFkLT5iZmEpOworCWJmYWRfaGFsX21lbV9yZWxlYXNlKGJmYWQpOworb3V0X2hhbF9tZW1fYWxsb2NfZmFpbHVyZToKKwlyZXR1cm4gQkZBX1NUQVRVU19GQUlMRUQ7Cit9CisKK3ZvaWQKK2JmYWRfZHJ2X3VuaW5pdChzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWRlbF90aW1lcl9zeW5jKCZiZmFkLT5oYWxfdG1vKTsKKwliZmFfaXNyX2Rpc2FibGUoJmJmYWQtPmJmYSk7CisJYmZhX2RldGFjaCgmYmZhZC0+YmZhKTsKKwliZmFkX3JlbW92ZV9pbnRyKGJmYWQpOworCWJmYV9hc3NlcnQobGlzdF9lbXB0eSgmYmZhZC0+ZmlsZV9xKSk7CisJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7Cit9CisKK3ZvaWQKK2JmYWRfZHJ2X3N0YXJ0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWJmYV9zdGFydCgmYmZhZC0+YmZhKTsKKwliZmFfZmNzX3N0YXJ0KCZiZmFkLT5iZmFfZmNzKTsKKwliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfSEFMX1NUQVJUX0RPTkU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwliZmFkX2ZjNF9wcm9iZV9wb3N0KGJmYWQpOworfQorCit2b2lkCitiZmFkX2Rydl9zdG9wKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWluaXRfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisJYmZhZC0+cHBvcnQuZmxhZ3MgfD0gQkZBRF9QT1JUX0RFTEVURTsKKwliZmFfZmNzX2V4aXQoJmJmYWQtPmJmYV9mY3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWluaXRfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisJYmZhX3N0b3AoJmJmYWQtPmJmYSk7CisJYmZhZC0+YmZhZF9mbGFncyAmPSB+QkZBRF9IQUxfU1RBUlRfRE9ORTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKK30KKworYmZhX3N0YXR1c190CitiZmFkX2NmZ19wcG9ydChzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZSkKK3sKKwlpbnQgICAgICAgICAgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCisJLyoKKwkgKiBBbGxvY2F0ZSBzY3NpX2hvc3QgZm9yIHRoZSBwaHlzaWNhbCBwb3J0CisJICovCisJaWYgKChiZmFkX3N1cHBvcnRlZF9mYzRzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisJICAgICYmIChyb2xlICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pKSB7CisJCWlmIChiZmFkLT5wcG9ydC5pbV9wb3J0ID09IE5VTEwpIHsKKwkJCXJjID0gQkZBX1NUQVRVU19GQUlMRUQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJjID0gYmZhZF9pbV9zY3NpX2hvc3RfYWxsb2MoYmZhZCwgYmZhZC0+cHBvcnQuaW1fcG9ydCk7CisJCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQkJZ290byBvdXQ7CisKKwkJYmZhZC0+cHBvcnQucm9sZXMgfD0gQkZBX1BPUlRfUk9MRV9GQ1BfSU07CisJfQorCisJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX0NGR19QUE9SVF9ET05FOworCitvdXQ6CisJcmV0dXJuIHJjOworfQorCit2b2lkCitiZmFkX3VuY2ZnX3Bwb3J0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaWYgKChiZmFkLT5wcG9ydC5yb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKSB7CisJCWJmYWRfaXBmY19wb3J0X2RlbGV0ZShiZmFkLCAmYmZhZC0+cHBvcnQpOworCQliZmFkLT5wcG9ydC5yb2xlcyAmPSB+QkZBX1BPUlRfUk9MRV9GQ1BfSVBGQzsKKwl9CisKKwlpZiAoKGJmYWRfc3VwcG9ydGVkX2ZjNHMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKwkgICAgJiYgKGJmYWQtPnBwb3J0LnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pKSB7CisJCWJmYWRfaW1fc2NzaV9ob3N0X2ZyZWUoYmZhZCwgYmZhZC0+cHBvcnQuaW1fcG9ydCk7CisJCWJmYWRfaW1fcG9ydF9jbGVhbihiZmFkLT5wcG9ydC5pbV9wb3J0KTsKKwkJa2ZyZWUoYmZhZC0+cHBvcnQuaW1fcG9ydCk7CisJCWJmYWQtPnBwb3J0LnJvbGVzICY9IH5CRkFfUE9SVF9ST0xFX0ZDUF9JTTsKKwl9CisKKwliZmFkLT5iZmFkX2ZsYWdzICY9IH5CRkFEX0NGR19QUE9SVF9ET05FOworfQorCit2b2lkCitiZmFkX2Rydl9sb2dfbGV2ZWxfc2V0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaWYgKGxvZ19sZXZlbCA+IEJGQV9MT0dfSU5WQUxJRCAmJiBsb2dfbGV2ZWwgPD0gQkZBX0xPR19MRVZFTF9NQVgpCisJCWJmYV9sb2dfc2V0X2xldmVsX2FsbCgmYmZhZC0+bG9nX2RhdGEsIGxvZ19sZXZlbCk7Cit9CisKKyAvKgorICAqICBQQ0lfZW50cnkgUENJIGRyaXZlciBlbnRyaWVzICogeworICAqLworCisvKioKKyAqIFBDSSBwcm9iZSBlbnRyeS4KKyAqLworaW50CitiZmFkX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBpZCkKK3sKKwlzdHJ1Y3QgYmZhZF9zICAqYmZhZDsKKwlpbnQgICAgICAgICAgICAgZXJyb3IgPSAtRU5PREVWLCByZXR2YWw7CisJY2hhciAgICAgICAgICAgIGJ1ZlsxNl07CisKKwkvKgorCSAqIEZvciBzaW5nbGUgcG9ydCBjYXJkcyAtIG9ubHkgY2xhaW0gZnVuY3Rpb24gMAorCSAqLworCWlmICgocGRldi0+ZGV2aWNlID09IEJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMVApCisJICAgICYmIChQQ0lfRlVOQyhwZGV2LT5kZXZmbikgIT0gMCkpCisJCXJldHVybiAtRU5PREVWOworCisJQkZBX1RSQUNFKEJGQV9JTkZPLCAiYmZhZF9wY2lfcHJvYmUgZW50cnkiKTsKKworCWJmYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhZF9zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiZmFkKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYmZhZC0+dHJjbW9kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYV90cmNfbW9kX3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJmYWQtPnRyY21vZCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFcnJvciBhbGxvYyB0cmFjZSBidWZmZXIhXG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dF9hbGxvY190cmFjZV9mYWlsdXJlOworCX0KKworCS8qCisJICogTE9HL1RSQUNFIElOSVQKKwkgKi8KKwliZmFfdHJjX2luaXQoYmZhZC0+dHJjbW9kKTsKKwliZmFfdHJjKGJmYWQsIGJmYWRfaW5zdCk7CisKKwliZmFkLT5sb2dtb2QgPSAmYmZhZC0+bG9nX2RhdGE7CisJc3ByaW50ZihidWYsICIlZCIsIGJmYWRfaW5zdCk7CisJYmZhX2xvZ19pbml0KGJmYWQtPmxvZ21vZCwgYnVmLCBiZmFfb3NfcHJpbnRmKTsKKworCWJmYWRfZHJ2X2xvZ19sZXZlbF9zZXQoYmZhZCk7CisKKwliZmFkLT5hZW4gPSAmYmZhZC0+YWVuX2J1ZjsKKworCWlmICghKGJmYWRfbG9hZF9md2ltZyhwZGV2KSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZF9sb2FkX2Z3aW1nIGZhaWx1cmUhXG4iKTsKKwkJa2ZyZWUoYmZhZC0+dHJjbW9kKTsKKwkJZ290byBvdXRfYWxsb2NfdHJhY2VfZmFpbHVyZTsKKwl9CisKKwlyZXR2YWwgPSBiZmFkX3BjaV9pbml0KHBkZXYsIGJmYWQpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZF9wY2lfaW5pdCBmYWlsdXJlIVxuIik7CisJCWVycm9yID0gcmV0dmFsOworCQlnb3RvIG91dF9wY2lfaW5pdF9mYWlsdXJlOworCX0KKworCW11dGV4X2xvY2soJmJmYWRfbXV0ZXgpOworCWJmYWQtPmluc3Rfbm8gPSBiZmFkX2luc3QrKzsKKwlsaXN0X2FkZF90YWlsKCZiZmFkLT5saXN0X2VudHJ5LCAmYmZhZF9saXN0KTsKKwltdXRleF91bmxvY2soJmJmYWRfbXV0ZXgpOworCisJc3Bpbl9sb2NrX2luaXQoJmJmYWQtPmJmYWRfbG9jayk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGJmYWQpOworCisJYmZhZC0+cmVmX2NvdW50ID0gMDsKKwliZmFkLT5wcG9ydC5iZmFkID0gYmZhZDsKKworCXJldHZhbCA9IGJmYWRfZHJ2X2luaXQoYmZhZCk7CisJaWYgKHJldHZhbCAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIG91dF9kcnZfaW5pdF9mYWlsdXJlOworCWlmICghKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX0hBTF9JTklUX0RPTkUpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWQlZDogaGFsIGluaXQgZmFpbGVkXG4iLCBiZmFkLT5pbnN0X25vKTsKKwkJZ290byBvazsKKwl9CisKKwkvKgorCSAqIFBQT1JUIEZDUyBjb25maWcKKwkgKi8KKwliZmFkX2Zjc19wb3J0X2NmZyhiZmFkKTsKKworCXJldHZhbCA9IGJmYWRfY2ZnX3Bwb3J0KGJmYWQsIEJGQV9QT1JUX1JPTEVfRkNQX0lNKTsKKwlpZiAocmV0dmFsICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gb3V0X2NmZ19wcG9ydF9mYWlsdXJlOworCisJLyoKKwkgKiBCRkFEIGxldmVsIEZDNCAoSU0vVE0vSVBGQykgc3BlY2lmaWMgcmVzb3VyY2UgYWxsb2NhdGlvbgorCSAqLworCXJldHZhbCA9IGJmYWRfZmM0X3Byb2JlKGJmYWQpOworCWlmIChyZXR2YWwgIT0gQkZBX1NUQVRVU19PSykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkX2ZjNF9wcm9iZSBmYWlsZWRcbiIpOworCQlnb3RvIG91dF9mYzRfcHJvYmVfZmFpbHVyZTsKKwl9CisKKwliZmFkX2Rydl9zdGFydChiZmFkKTsKKworCS8qCisJICogSWYgYmZhX2xpbmt1cF9kZWxheSBpcyBzZXQgdG8gLTEgZGVmYXVsdDsgdHJ5IHRvIHJldHJpdmUgdGhlCisJICogdmFsdWUgdXNpbmcgdGhlIGJmYWRfb3NfZ2V0X2xpbmt1cF9kZWxheSgpOyBlbHNlIHVzZSB0aGUKKwkgKiBwYXNzZWQgaW4gbW9kdWxlIHBhcmFtIHZhbHVlIGFzIHRoZSBiZmFfbGlua3VwX2RlbGF5LgorCSAqLworCWlmIChiZmFfbGlua3VwX2RlbGF5IDwgMCkgeworCQliZmFfbGlua3VwX2RlbGF5ID0gYmZhZF9vc19nZXRfbGlua3VwX2RlbGF5KGJmYWQpOworCQliZmFkX29zX3Jwb3J0X29ubGluZV93YWl0KGJmYWQpOworCQliZmFfbGlua3VwX2RlbGF5ID0gLTE7CisJfSBlbHNlIHsKKwkJYmZhZF9vc19ycG9ydF9vbmxpbmVfd2FpdChiZmFkKTsKKwl9CisKKwliZmFfbG9nKGJmYWQtPmxvZ21vZCwgQkZBX0xPR19MSU5VWF9ERVZJQ0VfQ0xBSU1FRCwgYmZhZC0+cGNpX25hbWUpOworb2s6CisJcmV0dXJuIDA7CisKK291dF9mYzRfcHJvYmVfZmFpbHVyZToKKwliZmFkX2ZjNF9wcm9iZV91bmRvKGJmYWQpOworCWJmYWRfdW5jZmdfcHBvcnQoYmZhZCk7CitvdXRfY2ZnX3Bwb3J0X2ZhaWx1cmU6CisJYmZhZF9kcnZfdW5pbml0KGJmYWQpOworb3V0X2Rydl9pbml0X2ZhaWx1cmU6CisJbXV0ZXhfbG9jaygmYmZhZF9tdXRleCk7CisJYmZhZF9pbnN0LS07CisJbGlzdF9kZWwoJmJmYWQtPmxpc3RfZW50cnkpOworCW11dGV4X3VubG9jaygmYmZhZF9tdXRleCk7CisJYmZhZF9wY2lfdW5pbml0KHBkZXYsIGJmYWQpOworb3V0X3BjaV9pbml0X2ZhaWx1cmU6CisJa2ZyZWUoYmZhZC0+dHJjbW9kKTsKK291dF9hbGxvY190cmFjZV9mYWlsdXJlOgorCWtmcmVlKGJmYWQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBQQ0kgcmVtb3ZlIGVudHJ5LgorICovCit2b2lkCitiZmFkX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGJmYWRfcyAgKmJmYWQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJYmZhX3RyYyhiZmFkLCBiZmFkLT5pbnN0X25vKTsKKworCWlmICgoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfRFJWX0lOSVRfRE9ORSkKKwkgICAgJiYgIShiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9IQUxfSU5JVF9ET05FKSkgeworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKwkJYmZhX3N0b3AoJmJmYWQtPmJmYSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKworCQliZmFkX3JlbW92ZV9pbnRyKGJmYWQpOworCQlkZWxfdGltZXJfc3luYygmYmZhZC0+aGFsX3Rtbyk7CisJCWdvdG8gaGFsX2RldGFjaDsKKwl9IGVsc2UgaWYgKCEoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfRFJWX0lOSVRfRE9ORSkpIHsKKwkJZ290byByZW1vdmVfc3lzZnM7CisJfQorCisJaWYgKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX0hBTF9TVEFSVF9ET05FKQorCQliZmFkX2Rydl9zdG9wKGJmYWQpOworCisJYmZhZF9yZW1vdmVfaW50cihiZmFkKTsKKworCWRlbF90aW1lcl9zeW5jKCZiZmFkLT5oYWxfdG1vKTsKKwliZmFkX2ZjNF9wcm9iZV91bmRvKGJmYWQpOworCisJaWYgKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX0NGR19QUE9SVF9ET05FKQorCQliZmFkX3VuY2ZnX3Bwb3J0KGJmYWQpOworCitoYWxfZGV0YWNoOgorCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfZGV0YWNoKCZiZmFkLT5iZmEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWJmYWRfaGFsX21lbV9yZWxlYXNlKGJmYWQpOworcmVtb3ZlX3N5c2ZzOgorCisJbXV0ZXhfbG9jaygmYmZhZF9tdXRleCk7CisJYmZhZF9pbnN0LS07CisJbGlzdF9kZWwoJmJmYWQtPmxpc3RfZW50cnkpOworCW11dGV4X3VubG9jaygmYmZhZF9tdXRleCk7CisJYmZhZF9wY2lfdW5pbml0KHBkZXYsIGJmYWQpOworCisJa2ZyZWUoYmZhZC0+dHJjbW9kKTsKKwlrZnJlZShiZmFkKTsKK30KKworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYmZhZF9pZF90YWJsZVtdID0geworCXsKKwkgLnZlbmRvciA9IEJGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsCisJIC5kZXZpY2UgPSBCRkFfUENJX0RFVklDRV9JRF9GQ184RzJQLAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkgLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJeworCSAudmVuZG9yID0gQkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwKKwkgLmRldmljZSA9IEJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMVAsCisJIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCSAuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7CisJIC52ZW5kb3IgPSBCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLAorCSAuZGV2aWNlID0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QsCisJIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCSAuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgLmNsYXNzID0gKFBDSV9DTEFTU19TRVJJQUxfRklCRVIgPDwgOCksCisJIC5jbGFzc19tYXNrID0gfjAsCisJIH0sCisKKwl7MCwgMH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmZhZF9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiZmFkX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSBCRkFEX0RSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IGJmYWRfaWRfdGFibGUsCisJLnByb2JlID0gYmZhZF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGJmYWRfcGNpX3JlbW92ZSksCit9OworCisvKioKKyAqICBMaW51eCBkcml2ZXIgbW9kdWxlIGZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QKK2JmYWRfZmM0X21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50ICAgICAgICAgICAgIHJjOworCisJcmMgPSBiZmFkX2ltX21vZHVsZV9pbml0KCk7CisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gZXh0OworCisJYmZhZF90bV9tb2R1bGVfaW5pdCgpOworCWlmIChpcGZjX2VuYWJsZSkKKwkJYmZhZF9pcGZjX21vZHVsZV9pbml0KCk7CitleHQ6CisJcmV0dXJuIHJjOworfQorCit2b2lkCitiZmFkX2ZjNF9tb2R1bGVfZXhpdCh2b2lkKQoreworCWlmIChpcGZjX2VuYWJsZSkKKwkJYmZhZF9pcGZjX21vZHVsZV9leGl0KCk7CisJYmZhZF90bV9tb2R1bGVfZXhpdCgpOworCWJmYWRfaW1fbW9kdWxlX2V4aXQoKTsKK30KKworLyoqCisgKiBEcml2ZXIgbW9kdWxlIGluaXQuCisgKi8KK3N0YXRpYyBpbnQgICAgICBfX2luaXQKK2JmYWRfaW5pdCh2b2lkKQoreworCWludCAgICAgICAgICAgICBlcnJvciA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJCcm9jYWRlIEJGQSBGQy9GQ09FIFNDU0kgZHJpdmVyIC0gdmVyc2lvbjogJXNcbiIsCisJICAgICAgIEJGQURfRFJJVkVSX1ZFUlNJT04pOworCisJaWYgKG51bV9zZ3BncyA+IDApCisJCW51bV9zZ3Bnc19wYXJtID0gbnVtX3NncGdzOworCisJZXJyb3IgPSBiZmFkX2ZjNF9tb2R1bGVfaW5pdCgpOworCWlmIChlcnJvcikgeworCQllcnJvciA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWRfZmM0X21vZHVsZV9pbml0IGZhaWx1cmVcbiIpOworCQlnb3RvIGV4dDsKKwl9CisKKwlpZiAoIXN0cmNtcChGQ1BJX05BTUUsICIgZmNwaW0iKSkKKwkJYmZhZF9zdXBwb3J0ZWRfZmM0cyB8PSBCRkFfUE9SVF9ST0xFX0ZDUF9JTTsKKwlpZiAoIXN0cmNtcChGQ1BUX05BTUUsICIgZmNwdG0iKSkKKwkJYmZhZF9zdXBwb3J0ZWRfZmM0cyB8PSBCRkFfUE9SVF9ST0xFX0ZDUF9UTTsKKwlpZiAoIXN0cmNtcChJUEZDX05BTUUsICIgaXBmYyIpKQorCQliZmFkX3N1cHBvcnRlZF9mYzRzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX0lQRkM7CisKKwliZmFfaW9jX2F1dG9fcmVjb3Zlcihpb2NfYXV0b19yZWNvdmVyKTsKKwliZmFfZmNzX3Jwb3J0X3NldF9kZWxfdGltZW91dChycG9ydF9kZWxfdGltZW91dCk7CisJZXJyb3IgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiZmFkX3BjaV9kcml2ZXIpOworCisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWQgcGNpX3JlZ2lzdGVyX2RyaXZlciBmYWlsdXJlXG4iKTsKKwkJZ290byBleHQ7CisJfQorCisJcmV0dXJuIDA7CisKK2V4dDoKKwliZmFkX2ZjNF9tb2R1bGVfZXhpdCgpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBEcml2ZXIgbW9kdWxlIGV4aXQuCisgKi8KK3N0YXRpYyB2b2lkICAgICBfX2V4aXQKK2JmYWRfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYmZhZF9wY2lfZHJpdmVyKTsKKwliZmFkX2ZjNF9tb2R1bGVfZXhpdCgpOworCWJmYWRfZnJlZV9md2ltZygpOworfQorCisjZGVmaW5lIEJGQURfUFJPVE9fTkFNRSBGQ1BJX05BTUUgRkNQVF9OQU1FIElQRkNfTkFNRQorCittb2R1bGVfaW5pdChiZmFkX2luaXQpOworbW9kdWxlX2V4aXQoYmZhZF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIiIEJGQURfUFJPVE9fTkFNRSk7CitNT0RVTEVfQVVUSE9SKCJCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4iKTsKK01PRFVMRV9WRVJTSU9OKEJGQURfRFJJVkVSX1ZFUlNJT04pOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMjlhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYXR0ci5jCkBAIC0wLDAgKzEsNjQ5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9hdHRyLmMgTGludXggZHJpdmVyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIG1vZHVsZS4KKyAqLworCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKKyNpbmNsdWRlICJiZmFkX2ltLmgiCisjaW5jbHVkZSAiYmZhZF90cmNtb2QuaCIKKyNpbmNsdWRlICJiZmFkX2F0dHIuaCIKKworLyoqCisgKiAgRkNfdHJhbnNwb3J0X3RlbXBsYXRlIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZQorICovCisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSB0YXJnZXQgcG9ydCBJRC4KKyAqLwordm9pZAorYmZhZF9pbV9nZXRfc3RhcmdldF9wb3J0X2lkKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW0gPSBOVUxMOworCXUzMiAgICAgICAgZmNfaWQgPSAtMTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzaG9zdCA9IGJmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdGFyZ2V0KTsKKwlpbV9wb3J0ID0gKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaXRuaW0gPSBiZmFkX29zX2dldF9pdG5pbShpbV9wb3J0LCBzdGFyZ2V0LT5pZCk7CisJaWYgKGl0bmltKQorCQlmY19pZCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoJml0bmltLT5mY3NfaXRuaW0pOworCisJZmNfc3RhcmdldF9wb3J0X2lkKHN0YXJnZXQpID0gZmNfaWQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSB0YXJnZXQgbnd3bi4KKyAqLwordm9pZAorYmZhZF9pbV9nZXRfc3RhcmdldF9ub2RlX25hbWUoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IE5VTEw7CisJdTY0ICAgICAgICAgICAgIG5vZGVfbmFtZSA9IDA7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJc2hvc3QgPSBiZmFkX29zX3N0YXJnZXRfdG9fc2hvc3Qoc3RhcmdldCk7CisJaW1fcG9ydCA9IChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCWJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWl0bmltID0gYmZhZF9vc19nZXRfaXRuaW0oaW1fcG9ydCwgc3RhcmdldC0+aWQpOworCWlmIChpdG5pbSkKKwkJbm9kZV9uYW1lID0gYmZhX2Zjc19pdG5pbV9nZXRfbnd3bigmaXRuaW0tPmZjc19pdG5pbSk7CisKKwlmY19zdGFyZ2V0X25vZGVfbmFtZShzdGFyZ2V0KSA9IGJmYV9vc19odG9ubGwobm9kZV9uYW1lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBwd3duLgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X3BvcnRfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gTlVMTDsKKwl1NjQgICAgICAgICAgICAgcG9ydF9uYW1lID0gMDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzaG9zdCA9IGJmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdGFyZ2V0KTsKKwlpbV9wb3J0ID0gKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaXRuaW0gPSBiZmFkX29zX2dldF9pdG5pbShpbV9wb3J0LCBzdGFyZ2V0LT5pZCk7CisJaWYgKGl0bmltKQorCQlwb3J0X25hbWUgPSBiZmFfZmNzX2l0bmltX2dldF9wd3duKCZpdG5pbS0+ZmNzX2l0bmltKTsKKworCWZjX3N0YXJnZXRfcG9ydF9uYW1lKHN0YXJnZXQpID0gYmZhX29zX2h0b25sbChwb3J0X25hbWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgaG9zdCBwb3J0IElELgorICovCit2b2lkCitiZmFkX2ltX2dldF9ob3N0X3BvcnRfaWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydCA9IGltX3BvcnQtPnBvcnQ7CisKKwlmY19ob3N0X3BvcnRfaWQoc2hvc3QpID0KKwkJCWJmYV9vc19odG9uM2IoYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQtPmZjc19wb3J0KSk7Cit9CisKKworCisKKworc3RydWN0IFNjc2lfSG9zdCAqCitiZmFkX29zX3N0YXJnZXRfdG9fc2hvc3Qoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXJldHVybiBkZXZfdG9fc2hvc3Qoc3RhcmdldC0+ZGV2LnBhcmVudCk7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgdHlwZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfcG9ydF90eXBlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIGF0dHI7CisKKwliZmFfcHBvcnRfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmF0dHIpOworCisJc3dpdGNoIChhdHRyLnBvcnRfdHlwZSkgeworCWNhc2UgQkZBX1BQT1JUX1RZUEVfTlBPUlQ6CisJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX05QT1JUOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9UWVBFX05MUE9SVDoKKwkJZmNfaG9zdF9wb3J0X3R5cGUoc2hvc3QpID0gRkNfUE9SVFRZUEVfTkxQT1JUOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9UWVBFX1AyUDoKKwkJZmNfaG9zdF9wb3J0X3R5cGUoc2hvc3QpID0gRkNfUE9SVFRZUEVfUFRQOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9UWVBFX0xQT1JUOgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9MUE9SVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZmNfaG9zdF9wb3J0X3R5cGUoc2hvc3QpID0gRkNfUE9SVFRZUEVfVU5LTk9XTjsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgaG9zdCBwb3J0IHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9nZXRfaG9zdF9wb3J0X3N0YXRlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIGF0dHI7CisKKwliZmFfcHBvcnRfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmF0dHIpOworCisJc3dpdGNoIChhdHRyLnBvcnRfc3RhdGUpIHsKKwljYXNlIEJGQV9QUE9SVF9TVF9MSU5LRE9XTjoKKwkJZmNfaG9zdF9wb3J0X3N0YXRlKHNob3N0KSA9IEZDX1BPUlRTVEFURV9MSU5LRE9XTjsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUFBPUlRfU1RfTElOS1VQOgorCQlmY19ob3N0X3BvcnRfc3RhdGUoc2hvc3QpID0gRkNfUE9SVFNUQVRFX09OTElORTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUFBPUlRfU1RfVU5JTklUOgorCWNhc2UgQkZBX1BQT1JUX1NUX0VOQUJMSU5HX1FXQUlUOgorCWNhc2UgQkZBX1BQT1JUX1NUX0VOQUJMSU5HOgorCWNhc2UgQkZBX1BQT1JUX1NUX0RJU0FCTElOR19RV0FJVDoKKwljYXNlIEJGQV9QUE9SVF9TVF9ESVNBQkxJTkc6CisJY2FzZSBCRkFfUFBPUlRfU1RfRElTQUJMRUQ6CisJY2FzZSBCRkFfUFBPUlRfU1RfU1RPUFBFRDoKKwljYXNlIEJGQV9QUE9SVF9TVF9JT0NET1dOOgorCWRlZmF1bHQ6CisJCWZjX2hvc3RfcG9ydF9zdGF0ZShzaG9zdCkgPSBGQ19QT1JUU1RBVEVfVU5LTk9XTjsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgaG9zdCBhY3RpdmUgZmM0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfYWN0aXZlX2ZjNHMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydCA9IGltX3BvcnQtPnBvcnQ7CisKKwltZW1zZXQoZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdCksIDAsCisJICAgICAgIHNpemVvZihmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KSkpOworCisJaWYgKHBvcnQtPnN1cHBvcnRlZF9mYzRzICYKKwkJKEJGQV9QT1JUX1JPTEVfRkNQX0lNIHwgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pKQorCQlmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KVsyXSA9IDE7CisKKwlpZiAocG9ydC0+c3VwcG9ydGVkX2ZjNHMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKQorCQlmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KVszXSA9IDB4MjA7CisKKwlmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KVs3XSA9IDE7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IGxpbmsgc3BlZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX2dldF9ob3N0X3NwZWVkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIGF0dHI7CisKKwliZmFfcHBvcnRfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmF0dHIpOworCXN3aXRjaCAoYXR0ci5zcGVlZCkgeworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzhHQlBTOgorCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF84R0JJVDsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUFBPUlRfU1BFRURfNEdCUFM6CisJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzRHQklUOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TUEVFRF8yR0JQUzoKKwkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfMkdCSVQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzFHQlBTOgorCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF8xR0JJVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfVU5LTk9XTjsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgaG9zdCBwb3J0IHR5cGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX2dldF9ob3N0X2ZhYnJpY19uYW1lKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQgPSBpbV9wb3J0LT5wb3J0OworCXd3bl90ICAgICAgICAgICBmYWJyaWNfbnd3biA9IDA7CisKKwlmYWJyaWNfbnd3biA9IGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX25hbWUocG9ydC0+ZmNzX3BvcnQpOworCisJZmNfaG9zdF9mYWJyaWNfbmFtZShzaG9zdCkgPSBiZmFfb3NfaHRvbmxsKGZhYnJpY19ud3duKTsKKworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IEJGQUQgc3RhdGlzdGljcy4KKyAqLworc3RhdGljIHN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKgorYmZhZF9pbV9nZXRfc3RhdHMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfaGFsX2NvbXAgZmNvbXA7CisJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyAqaHN0YXRzOworCWJmYV9zdGF0dXNfdCAgICByYzsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwloc3RhdHMgPSAmYmZhZC0+bGlua19zdGF0czsKKwlpbml0X2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwltZW1zZXQoaHN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcykpOworCXJjID0gYmZhX3Bwb3J0X2dldF9zdGF0cygmYmZhZC0+YmZhLAorCQkJCSAgICAgKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICopIGhzdGF0cywKKwkJCQkgICAgIGJmYWRfaGNiX2NvbXAsICZmY29tcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCXJldHVybiBOVUxMOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisKKwlyZXR1cm4gaHN0YXRzOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgcmVzZXQgQkZBRCBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9yZXNldF9zdGF0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhZF9oYWxfY29tcCBmY29tcDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJYmZhX3N0YXR1c190ICAgIHJjOworCisJaW5pdF9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcmMgPSBiZmFfcHBvcnRfY2xlYXJfc3RhdHMoJmJmYWQtPmJmYSwgYmZhZF9oY2JfY29tcCwgJmZjb21wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlyZXR1cm47CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBycG9ydCBsb3NzIHRpbWVvdXQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX2dldF9ycG9ydF9sb3NzX3RtbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQoreworCXN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqaXRuaW1fZGF0YSA9IHJwb3J0LT5kZF9kYXRhOworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW0gPSBpdG5pbV9kYXRhLT5pdG5pbTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpdG5pbS0+aW0tPmJmYWQ7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXJwb3J0LT5kZXZfbG9zc190bW8gPSBiZmFfZmNwaW1fcGF0aF90b3ZfZ2V0KCZiZmFkLT5iZmEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgc2V0IHJwb3J0IGxvc3MgdGltZW91dC4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fc2V0X3Jwb3J0X2xvc3NfdG1vKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsIHUzMiB0aW1lb3V0KQoreworCXN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqaXRuaW1fZGF0YSA9IHJwb3J0LT5kZF9kYXRhOworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW0gPSBpdG5pbV9kYXRhLT5pdG5pbTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpdG5pbS0+aW0tPmJmYWQ7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJaWYgKHRpbWVvdXQgPiAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJYmZhX2ZjcGltX3BhdGhfdG92X3NldCgmYmZhZC0+YmZhLCB0aW1lb3V0KTsKKwkJcnBvcnQtPmRldl9sb3NzX3RtbyA9IGJmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoJmJmYWQtPmJmYSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCX0KKworfQorCitzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgYmZhZF9pbV9mY19mdW5jdGlvbl90ZW1wbGF0ZSA9IHsKKworCS8qIFRhcmdldCBkeW5hbWljIGF0dHJpYnV0ZXMgKi8KKwkuZ2V0X3N0YXJnZXRfcG9ydF9pZCA9IGJmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9pZCwKKwkuc2hvd19zdGFyZ2V0X3BvcnRfaWQgPSAxLAorCS5nZXRfc3RhcmdldF9ub2RlX25hbWUgPSBiZmFkX2ltX2dldF9zdGFyZ2V0X25vZGVfbmFtZSwKKwkuc2hvd19zdGFyZ2V0X25vZGVfbmFtZSA9IDEsCisJLmdldF9zdGFyZ2V0X3BvcnRfbmFtZSA9IGJmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9uYW1lLAorCS5zaG93X3N0YXJnZXRfcG9ydF9uYW1lID0gMSwKKworCS8qIEhvc3QgZHluYW1pYyBhdHRyaWJ1dGUgKi8KKwkuZ2V0X2hvc3RfcG9ydF9pZCA9IGJmYWRfaW1fZ2V0X2hvc3RfcG9ydF9pZCwKKwkuc2hvd19ob3N0X3BvcnRfaWQgPSAxLAorCisJLyogSG9zdCBmaXhlZCBhdHRyaWJ1dGVzICovCisJLnNob3dfaG9zdF9ub2RlX25hbWUgPSAxLAorCS5zaG93X2hvc3RfcG9ydF9uYW1lID0gMSwKKwkuc2hvd19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzID0gMSwKKwkuc2hvd19ob3N0X3N1cHBvcnRlZF9mYzRzID0gMSwKKwkuc2hvd19ob3N0X3N1cHBvcnRlZF9zcGVlZHMgPSAxLAorCS5zaG93X2hvc3RfbWF4ZnJhbWVfc2l6ZSA9IDEsCisKKwkvKiBNb3JlIGhvc3QgZHluYW1pYyBhdHRyaWJ1dGVzICovCisJLnNob3dfaG9zdF9wb3J0X3R5cGUgPSAxLAorCS5nZXRfaG9zdF9wb3J0X3R5cGUgPSBiZmFkX2ltX2dldF9ob3N0X3BvcnRfdHlwZSwKKwkuc2hvd19ob3N0X3BvcnRfc3RhdGUgPSAxLAorCS5nZXRfaG9zdF9wb3J0X3N0YXRlID0gYmZhZF9pbV9nZXRfaG9zdF9wb3J0X3N0YXRlLAorCS5zaG93X2hvc3RfYWN0aXZlX2ZjNHMgPSAxLAorCS5nZXRfaG9zdF9hY3RpdmVfZmM0cyA9IGJmYWRfaW1fZ2V0X2hvc3RfYWN0aXZlX2ZjNHMsCisJLnNob3dfaG9zdF9zcGVlZCA9IDEsCisJLmdldF9ob3N0X3NwZWVkID0gYmZhZF9pbV9nZXRfaG9zdF9zcGVlZCwKKwkuc2hvd19ob3N0X2ZhYnJpY19uYW1lID0gMSwKKwkuZ2V0X2hvc3RfZmFicmljX25hbWUgPSBiZmFkX2ltX2dldF9ob3N0X2ZhYnJpY19uYW1lLAorCisJLnNob3dfaG9zdF9zeW1ib2xpY19uYW1lID0gMSwKKworCS8qIFN0YXRpc3RpY3MgKi8KKwkuZ2V0X2ZjX2hvc3Rfc3RhdHMgPSBiZmFkX2ltX2dldF9zdGF0cywKKwkucmVzZXRfZmNfaG9zdF9zdGF0cyA9IGJmYWRfaW1fcmVzZXRfc3RhdHMsCisKKwkvKiBBbGxvY2F0aW9uIGxlbmd0aCBmb3IgaG9zdCBzcGVjaWZpYyBkYXRhICovCisJLmRkX2ZjcnBvcnRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKiksCisKKwkvKiBSZW1vdGUgcG9ydCBmaXhlZCBhdHRyaWJ1dGVzICovCisJLnNob3dfcnBvcnRfbWF4ZnJhbWVfc2l6ZSA9IDEsCisJLnNob3dfcnBvcnRfc3VwcG9ydGVkX2NsYXNzZXMgPSAxLAorCS5zaG93X3Jwb3J0X2Rldl9sb3NzX3RtbyA9IDEsCisJLmdldF9ycG9ydF9kZXZfbG9zc190bW8gPSBiZmFkX2ltX2dldF9ycG9ydF9sb3NzX3RtbywKKwkuc2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyA9IGJmYWRfaW1fc2V0X3Jwb3J0X2xvc3NfdG1vLAorfTsKKworLyoqCisgKiAgU2NzaV9Ib3N0X2F0dHJzIFNDU0kgaG9zdCBhdHRyaWJ1dGVzCisgKi8KK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX3NlcmlhbF9udW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLAorCQkJaW9jX2F0dHIuYWRhcHRlcl9hdHRyLnNlcmlhbF9udW0pOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9tb2RlbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgaW9jX2F0dHIuYWRhcHRlcl9hdHRyLm1vZGVsKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fbW9kZWxfZGVzY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLAorCQkJaW9jX2F0dHIuYWRhcHRlcl9hdHRyLm1vZGVsX2Rlc2NyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fbm9kZV9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKwl1NjQgICAgICAgIG53d247CisKKwlud3duID0gYmZhX2Zjc19wb3J0X2dldF9ud3duKHBvcnQtPmZjc19wb3J0KTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCVsbHhcbiIsIGJmYV9vc19odG9ubGwobnd3bikpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9zeW1ib2xpY19uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJCcm9jYWRlICVzIEZWJXMgRFYlc1xuIiwKKwkJCWlvY19hdHRyLmFkYXB0ZXJfYXR0ci5tb2RlbCwKKwkJCWlvY19hdHRyLmFkYXB0ZXJfYXR0ci5md192ZXIsIEJGQURfRFJJVkVSX1ZFUlNJT04pOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9od192ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgaW9jX2F0dHIuYWRhcHRlcl9hdHRyLmh3X3Zlcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX2Rydl92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIEJGQURfRFJJVkVSX1ZFUlNJT04pOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9vcHRpb25yb21fdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCisJCQlpb2NfYXR0ci5hZGFwdGVyX2F0dHIub3B0cm9tX3Zlcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX2Z3X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgaW9jX2F0dHIuYWRhcHRlcl9hdHRyLmZ3X3Zlcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX251bV9vZl9wb3J0c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGlvY19hdHRyLmFkYXB0ZXJfYXR0ci5ucG9ydHMpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9kcnZfbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBCRkFEX0RSSVZFUl9OQU1FKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fbnVtX29mX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCWludCAgICAgICAgbnJwb3J0cyA9IDIwNDg7CisJd3duX3QgICAgICAgICAgKnJwb3J0cyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJcnBvcnRzID0ga3phbGxvYyhzaXplb2Yod3duX3QpICogbnJwb3J0cyAsIEdGUF9BVE9NSUMpOworCWlmIChycG9ydHMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX2Zjc19wb3J0X2dldF9ycG9ydHMocG9ydC0+ZmNzX3BvcnQsIHJwb3J0cywgJm5ycG9ydHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWtmcmVlKHJwb3J0cyk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgbnJwb3J0cyk7Cit9CisKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihzZXJpYWxfbnVtYmVyLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fc2VyaWFsX251bV9zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihtb2RlbCwgU19JUlVHTywgYmZhZF9pbV9tb2RlbF9zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihtb2RlbF9kZXNjcmlwdGlvbiwgU19JUlVHTywKKwkJCQliZmFkX2ltX21vZGVsX2Rlc2Nfc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIobm9kZV9uYW1lLCBTX0lSVUdPLCBiZmFkX2ltX25vZGVfbmFtZV9zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihzeW1ib2xpY19uYW1lLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fc3ltYm9saWNfbmFtZV9zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihoYXJkd2FyZV92ZXJzaW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1faHdfdmVyc2lvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihkcml2ZXJfdmVyc2lvbiwgU19JUlVHTywKKwkJCQliZmFkX2ltX2Rydl92ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG9wdGlvbl9yb21fdmVyc2lvbiwgU19JUlVHTywKKwkJCQliZmFkX2ltX29wdGlvbnJvbV92ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKGZpcm13YXJlX3ZlcnNpb24sIFNfSVJVR08sCisJCQkJYmZhZF9pbV9md192ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG51bWJlcl9vZl9wb3J0cywgU19JUlVHTywKKwkJCQliZmFkX2ltX251bV9vZl9wb3J0c19zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihkcml2ZXJfbmFtZSwgU19JUlVHTywgYmZhZF9pbV9kcnZfbmFtZV9zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihudW1iZXJfb2ZfZGlzY292ZXJlZF9wb3J0cywgU19JUlVHTywKKwkJCQliZmFkX2ltX251bV9vZl9kaXNjb3ZlcmVkX3BvcnRzX3Nob3csIE5VTEwpOworCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYmZhZF9pbV9ob3N0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3NlcmlhbF9udW1iZXIsCisJJmRldl9hdHRyX21vZGVsLAorCSZkZXZfYXR0cl9tb2RlbF9kZXNjcmlwdGlvbiwKKwkmZGV2X2F0dHJfbm9kZV9uYW1lLAorCSZkZXZfYXR0cl9zeW1ib2xpY19uYW1lLAorCSZkZXZfYXR0cl9oYXJkd2FyZV92ZXJzaW9uLAorCSZkZXZfYXR0cl9kcml2ZXJfdmVyc2lvbiwKKwkmZGV2X2F0dHJfb3B0aW9uX3JvbV92ZXJzaW9uLAorCSZkZXZfYXR0cl9maXJtd2FyZV92ZXJzaW9uLAorCSZkZXZfYXR0cl9udW1iZXJfb2ZfcG9ydHMsCisJJmRldl9hdHRyX2RyaXZlcl9uYW1lLAorCSZkZXZfYXR0cl9udW1iZXJfb2ZfZGlzY292ZXJlZF9wb3J0cywKKwlOVUxMLAorfTsKKworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmJmYWRfaW1fdnBvcnRfYXR0cnNbXSA9IHsKKyAgICAmZGV2X2F0dHJfc2VyaWFsX251bWJlciwKKyAgICAmZGV2X2F0dHJfbW9kZWwsCisgICAgJmRldl9hdHRyX21vZGVsX2Rlc2NyaXB0aW9uLAorICAgICZkZXZfYXR0cl9ub2RlX25hbWUsCisgICAgJmRldl9hdHRyX3N5bWJvbGljX25hbWUsCisgICAgJmRldl9hdHRyX2hhcmR3YXJlX3ZlcnNpb24sCisgICAgJmRldl9hdHRyX2RyaXZlcl92ZXJzaW9uLAorICAgICZkZXZfYXR0cl9vcHRpb25fcm9tX3ZlcnNpb24sCisgICAgJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24sCisgICAgJmRldl9hdHRyX251bWJlcl9vZl9wb3J0cywKKyAgICAmZGV2X2F0dHJfZHJpdmVyX25hbWUsCisgICAgJmRldl9hdHRyX251bWJlcl9vZl9kaXNjb3ZlcmVkX3BvcnRzLAorICAgIE5VTEwsCit9OworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYXR0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMzMxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYXR0ci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQURfQVRUUl9IX18KKyNkZWZpbmUgX19CRkFEX0FUVFJfSF9fCisvKioKKyAqICBiZmFkX2F0dHIuaCBWTXdhcmUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIG1vZHVsZS4KKyAqLworCisvKioKKyAqICBGQ190cmFuc3BvcnRfdGVtcGxhdGUgRkMgdHJhbnNwb3J0IHRlbXBsYXRlCisgKi8KKworc3RydWN0IFNjc2lfSG9zdCoKK2JmYWRfb3NfZGV2X3RvX3Nob3N0KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCk7CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSB0YXJnZXQgcG9ydCBJRC4KKyAqLwordm9pZAorYmZhZF9pbV9nZXRfc3RhcmdldF9wb3J0X2lkKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCk7CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSB0YXJnZXQgbnd3bi4KKyAqLwordm9pZAorYmZhZF9pbV9nZXRfc3RhcmdldF9ub2RlX25hbWUoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBwd3duLgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X3BvcnRfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpOworCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgaG9zdCBwb3J0IElELgorICovCit2b2lkCitiZmFkX2ltX2dldF9ob3N0X3BvcnRfaWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOworCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgaXNzdWUgYSBMSVAuCisgKi8KK2ludAorYmZhZF9pbV9pc3N1ZV9mY19ob3N0X2xpcChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CisKK3N0cnVjdCBTY3NpX0hvc3QqCitiZmFkX29zX3N0YXJnZXRfdG9fc2hvc3Qoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKKworCisjZW5kaWYgLyogIF9fQkZBRF9BVFRSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Rydi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MmM4MWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmgKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBDb250YWlucyBiYXNlIGRyaXZlciBkZWZpbml0aW9ucy4KKyAqLworCisvKioKKyAqICBiZmFfZHJ2LmggTGludXggZHJpdmVyIGRhdGEgc3RydWN0dXJlcy4KKyAqLworCisjaWZuZGVmIF9fQkZBRF9EUlZfSF9fCisjZGVmaW5lIF9fQkZBRF9EUlZfSF9fCisKKyNpbmNsdWRlICJiZmFfb3NfaW5jLmgiCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcnBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdnBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc192cG9ydC5oPgorCisjaW5jbHVkZSA8Y3MvYmZhX3Bsb2cuaD4KKyNpbmNsdWRlICJhZW4vYmZhX2Flbi5oIgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2xpbnV4Lmg+CisKKyNkZWZpbmUgQkZBRF9EUklWRVJfTkFNRSAgICAgICAgImJmYSIKKyNpZmRlZiBCRkFfRFJJVkVSX1ZFUlNJT04KKyNkZWZpbmUgQkZBRF9EUklWRVJfVkVSU0lPTiAgICBCRkFfRFJJVkVSX1ZFUlNJT04KKyNlbHNlCisjZGVmaW5lIEJGQURfRFJJVkVSX1ZFUlNJT04gICAgIjIuMC4wLjAiCisjZW5kaWYKKworCisjZGVmaW5lIEJGQURfSVJRX0ZMQUdTIElSUUZfU0hBUkVECisKKy8qCisgKiBCRkFEIGZsYWdzCisgKi8KKyNkZWZpbmUgQkZBRF9NU0lYX09OCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQkZBRF9IQUxfSU5JVF9ET05FCQkJMHgwMDAwMDAwMgorI2RlZmluZSBCRkFEX0RSVl9JTklUX0RPTkUJCQkweDAwMDAwMDA0CisjZGVmaW5lIEJGQURfQ0ZHX1BQT1JUX0RPTkUJCQkweDAwMDAwMDA4CisjZGVmaW5lIEJGQURfSEFMX1NUQVJUX0RPTkUJCQkweDAwMDAwMDEwCisjZGVmaW5lIEJGQURfUE9SVF9PTkxJTkUJCQkweDAwMDAwMDIwCisjZGVmaW5lIEJGQURfUlBPUlRfT05MSU5FCQkJMHgwMDAwMDA0MAorCisjZGVmaW5lIEJGQURfUE9SVF9ERUxFVEUJCQkweDAwMDAwMDAxCisKKy8qCisgKiBCRkFEIHJlbGF0ZWQgZGVmaW5pdGlvbgorICovCisjZGVmaW5lIFNDU0lfU0NBTl9ERUxBWQkJSFoKKyNkZWZpbmUgQkZBRF9TVE9QX1RJTUVPVVQJMzAKKyNkZWZpbmUgQkZBRF9TVVNQRU5EX1RJTUVPVVQJQkZBRF9TVE9QX1RJTUVPVVQKKworLyoKKyAqIEJGQUQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZXMKKyAqLworI2RlZmluZSBCRkFEX0xVTl9RVUVVRV9ERVBUSCAJCTMyCisjZGVmaW5lIEJGQURfSU9fTUFYX1NHRSAJCVNHX0FMTAorCisjZGVmaW5lIGJmYWRfaXNyX3QgaXJxX2hhbmRsZXJfdAorCisjZGVmaW5lIE1BWF9NU0lYX0VOVFJZIDIyCisKK3N0cnVjdCBiZmFkX21zaXhfcyB7CisJc3RydWN0IGJmYWRfcyAqYmZhZDsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4OworfTsKKworZW51bSBiZmFkX3BvcnRfcHZiX3R5cGUgeworCUJGQURfUE9SVF9QSFlTX0JBU0UgPSAwLAorCUJGQURfUE9SVF9QSFlTX1ZQT1JUID0gMSwKKwlCRkFEX1BPUlRfVkZfQkFTRSA9IDIsCisJQkZBRF9QT1JUX1ZGX1ZQT1JUID0gMywKK307CisKKy8qCisgKiBQT1JUIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3BvcnRfcyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0OworCXUzMiAgICAgICAgcm9sZXM7CisJczMyICAgICAgICAgZmxhZ3M7CisJdTMyICAgICAgICBzdXBwb3J0ZWRfZmM0czsKKwl1OAkJaXBmY19mbGFnczsKKwllbnVtIGJmYWRfcG9ydF9wdmJfdHlwZSBwdmJfdHlwZTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CS8qIElNIHNwZWNpZmljIGRhdGEgKi8KKwlzdHJ1Y3QgYmZhZF90bV9wb3J0X3MgKnRtX3BvcnQ7CS8qIFRNIHNwZWNpZmljIGRhdGEgKi8KKwlzdHJ1Y3QgYmZhZF9pcGZjX3BvcnRfcyAqaXBmY19wb3J0OwkvKiBJUEZDIHNwZWNpZmljIGRhdGEgKi8KK307CisKKy8qCisgKiBWUE9SVCBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhZF92cG9ydF9zIHsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgIGRydl9wb3J0OworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgZmNzX3Zwb3J0OworCXN0cnVjdCBjb21wbGV0aW9uICpjb21wX2RlbDsKK307CisKKy8qCisgKiBWRiBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhZF92Zl9zIHsKKwliZmFfZmNzX3ZmX3QgICAgZmNzX3ZmOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICBiYXNlX3BvcnQ7CS8qIGJhc2UgcG9ydCBmb3IgdmYgKi8KKwlzdHJ1Y3QgYmZhZF9zICAgKmJmYWQ7Cit9OworCitzdHJ1Y3QgYmZhZF9jZmdfcGFyYW1fcyB7CisJdTMyICAgICAgICBycG9ydF9kZWxfdGltZW91dDsKKwl1MzIgICAgICAgIGlvY19xdWV1ZV9kZXB0aDsKKwl1MzIgICAgICAgIGx1bl9xdWV1ZV9kZXB0aDsKKwl1MzIgICAgICAgIGlvX21heF9zZ2U7CisJdTMyICAgICAgICBiaW5kaW5nX21ldGhvZDsKK307CisKKyNkZWZpbmUgQkZBRF9BRU5fTUFYX0FQUFMgOAorc3RydWN0IGJmYWRfYWVuX2ZpbGVfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgcWU7CisJc3RydWN0IGJmYWRfcyAqYmZhZDsKKwlzMzIgcmk7CisJczMyIGFwcF9pZDsKK307CisKKy8qCisgKiBCRkFEIChQQ0kgZnVuY3Rpb24pIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTsKKwlzdHJ1Y3QgYmZhX3MgICAgICAgYmZhOworCXN0cnVjdCBiZmFfZmNzX3MgICAgICAgYmZhX2ZjczsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCWNvbnN0IGNoYXIgKnBjaV9uYW1lOworCXN0cnVjdCBiZmFfcGNpZGV2X3MgaGFsX3BjaWRldjsKKwlzdHJ1Y3QgYmZhX2lvY19wY2lfYXR0cl9zIHBjaV9hdHRyOworCXVuc2lnbmVkIGxvbmcgICBwY2lfYmFyMF9tYXA7CisJdm9pZCBfX2lvbWVtICAgKnBjaV9iYXIwX2t2YTsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOworCXN0cnVjdCBjb21wbGV0aW9uIHN1c3BlbmQ7CisJc3RydWN0IGNvbXBsZXRpb24gZGlzYWJsZV9jb21wOworCWJmYV9ib29sZWFuX3QgICBkaXNhYmxlX2FjdGl2ZTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgIHBwb3J0OwkvKiBwaHlzaWNhbCBwb3J0IG9mIHRoZSBCRkFEICovCisJc3RydWN0IGJmYV9tZW1pbmZvX3MgbWVtaW5mbzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICAgaW9jX2NmZzsKKwl1MzIgICAgICAgIGluc3Rfbm87CS8qIEJGQUQgaW5zdGFuY2UgbnVtYmVyICovCisJdTMyICAgICAgICBiZmFkX2ZsYWdzOworCXNwaW5sb2NrX3QgICAgICBiZmFkX2xvY2s7CisJc3RydWN0IGJmYWRfY2ZnX3BhcmFtX3MgY2ZnX2RhdGE7CisJc3RydWN0IGJmYWRfbXNpeF9zIG1zaXhfdGFiW01BWF9NU0lYX0VOVFJZXTsKKwlpbnQgICAgICAgICAgICAgbnZlYzsKKwljaGFyICAgICAgICAgICAgYWRhcHRlcl9uYW1lW0JGQV9BREFQVEVSX1NZTV9OQU1FX0xFTl07CisJY2hhciAgICAgICAgICAgIHBvcnRfbmFtZVtCRkFfQURBUFRFUl9TWU1fTkFNRV9MRU5dOworCXN0cnVjdCB0aW1lcl9saXN0IGhhbF90bW87CisJdW5zaWduZWQgbG9uZyAgIGhzX3N0YXJ0OworCXN0cnVjdCBiZmFkX2ltX3MgKmltOwkJLyogSU0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiZmFkX3RtX3MgKnRtOwkJLyogVE0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiZmFkX2lwZmNfcyAqaXBmYzsJLyogSVBGQyBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGJmYV9sb2dfbW9kX3MgICBsb2dfZGF0YTsKKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAgKnRyY21vZDsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAgKmxvZ21vZDsKKwlzdHJ1Y3QgYmZhX2Flbl9zICAgICAgKmFlbjsKKwlzdHJ1Y3QgYmZhX2Flbl9zICAgICAgIGFlbl9idWY7CisJc3RydWN0IGJmYWRfYWVuX2ZpbGVfcyBmaWxlX2J1ZltCRkFEX0FFTl9NQVhfQVBQU107CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIGZpbGVfcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgZmlsZV9mcmVlX3E7CisJc3RydWN0IGJmYV9wbG9nX3MgICAgICBwbG9nX2J1ZjsKKwlpbnQgICAgICAgICAgICAgcmVmX2NvdW50OworCWJmYV9ib29sZWFuX3QJaXBmY19lbmFibGVkOworCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgbGlua19zdGF0czsKKworCXN0cnVjdCBrb2JqZWN0ICpiZmFfa29iajsKKwlzdHJ1Y3Qga29iamVjdCAqaW9jX2tvYmo7CisJc3RydWN0IGtvYmplY3QgKnBwb3J0X2tvYmo7CisJc3RydWN0IGtvYmplY3QgKmxwb3J0X2tvYmo7Cit9OworCisvKgorICogUlBPUlQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfcnBvcnRfcyB7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyBmY3NfcnBvcnQ7Cit9OworCitzdHJ1Y3QgYmZhZF9idWZfaW5mbyB7CisJdm9pZCAgICAgICAgICAgKnZpcnQ7CisJZG1hX2FkZHJfdCAgICAgIHBoeXM7CisJdTMyICAgICAgICBzaXplOworfTsKKworc3RydWN0IGJmYWRfZmN4cCB7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0OworCXN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0OworCWJmYV9zdGF0dXNfdCAgICByZXFfc3RhdHVzOworCXUxNiAgICAgICAgdGFnOworCXUxNiAgICAgICAgcnNwX2xlbjsKKwl1MTYgICAgICAgIHJzcF9tYXhsZW47CisJdTggICAgICAgICB1c2VfaXJlcWJ1ZjsKKwl1OCAgICAgICAgIHVzZV9pcnNwYnVmOworCXUzMiAgICAgICAgbnVtX3JlcV9zZ2xlczsKKwl1MzIgICAgICAgIG51bV9yc3Bfc2dsZXM7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXZvaWQgICAgICAgICAgICpyZXFidWZfaW5mbzsKKwl2b2lkICAgICAgICAgICAqcnNwYnVmX2luZm87CisJc3RydWN0IGJmYV9zZ2VfcyAgKnJlcV9zZ2U7CisJc3RydWN0IGJmYV9zZ2VfcyAgKnJzcF9zZ2U7CisJZmN4cF9zZW5kX2NiX3QgIHNlbmRfY2JmbjsKKwl2b2lkICAgICAgICAgICAqc2VuZF9jYmFyZzsKKwl2b2lkICAgICAgICAgICAqYmZhX2ZjeHA7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKK307CisKK3N0cnVjdCBiZmFkX2hhbF9jb21wIHsKKwliZmFfc3RhdHVzX3QgICAgc3RhdHVzOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7Cit9OworCisvKgorICogTWFjcm8gdG8gb2J0YWluIHRoZSBpbW1lZGlhdGUgbG93ZXIgcG93ZXIKKyAqIG9mIHR3byBmb3IgdGhlIGludGVnZXIuCisgKi8KKyNkZWZpbmUgbmV4dExvd2VySW50KHgpICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorCWludCBqOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorCSgqeCktLTsgICAgCQkgICAgICAgICAgICAgICAgCVwKKwlmb3IgKGogPSAxOyBqIDwgKHNpemVvZihpbnQpICogOCk7IGogPDw9IDEpICAgICBcCisJCSgqeCkgPSAoKngpIHwgKCp4KSA+PiBqOyAgICAgICAgCVwKKwkoKngpKys7ICAgICAgICAgICAgICAgICAgCSAgICAgICAgCVwKKwkoKngpID0gKCp4KSA+PiAxOyAgICAgICAgICAgICAgICAgICAgICAgCVwKK30gd2hpbGUgKDApCisKKworYmZhX3N0YXR1c190ICAgIGJmYWRfdnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHUxNiB2Zl9pZCwKKwkJCQkgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpOworYmZhX3N0YXR1c190ICAgIGJmYWRfdmZfY3JlYXRlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHUxNiB2Zl9pZCwKKwkJCSAgICAgICBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFkX2NmZ19wcG9ydChzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZSk7CitiZmFfc3RhdHVzX3QgICAgYmZhZF9kcnZfaW5pdChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX2Rydl9zdGFydChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX3VuY2ZnX3Bwb3J0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfZHJ2X3N0b3Aoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkICAgICAgICAgICAgYmZhZF9yZW1vdmVfaW50cihzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX2hhbF9tZW1fcmVsZWFzZShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX2hjYl9jb21wKHZvaWQgKmFyZywgYmZhX3N0YXR1c190IHN0YXR1cyk7CisKK2ludCAgICAgICAgICAgICBiZmFkX3NldHVwX2ludHIoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkICAgICAgICAgICAgYmZhZF9yZW1vdmVfaW50cihzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKKwordm9pZAkJYmZhZF91cGRhdGVfaGFsX2NmZyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpiZmFfY2ZnKTsKK2JmYV9zdGF0dXNfdAliZmFkX2hhbF9tZW1fYWxsb2Moc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkCQliZmFkX2JmYV90bW8odW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQJCWJmYWRfaW5pdF90aW1lcihzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK2ludAkJYmZhZF9wY2lfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkCQliZmFkX3BjaV91bmluaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZAkJYmZhZF9mY3NfcG9ydF9jZmcoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkCQliZmFkX2Rydl91bmluaXQoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkCQliZmFkX2Rydl9sb2dfbGV2ZWxfc2V0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOworYmZhX3N0YXR1c190CWJmYWRfZmM0X21vZHVsZV9pbml0KHZvaWQpOwordm9pZAkJYmZhZF9mYzRfbW9kdWxlX2V4aXQodm9pZCk7CisKK3ZvaWQgYmZhZF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2ludCBiZmFkX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBpZCk7Cit2b2lkIGJmYWRfb3NfcnBvcnRfb25saW5lX3dhaXQoc3RydWN0IGJmYWRfcyAqYmZhZCk7CitpbnQgYmZhZF9vc19nZXRfbGlua3VwX2RlbGF5KHN0cnVjdCBiZmFkX3MgKmJmYWQpOworaW50IGJmYWRfaW5zdGFsbF9tc2l4X2hhbmRsZXIoc3RydWN0IGJmYWRfcyAqYmZhZCk7CisKK2V4dGVybiBzdHJ1Y3QgaWRyIGJmYWRfaW1fcG9ydF9pbmRleDsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGJmYWRfbGlzdDsKK2V4dGVybiBpbnQgYmZhX2x1bl9xdWV1ZV9kZXB0aDsKK2V4dGVybiBpbnQgYmZhZF9zdXBwb3J0ZWRfZmM0czsKK2V4dGVybiBpbnQgYmZhX2xpbmt1cF9kZWxheTsKKworI2VuZGlmIC8qIF9fQkZBRF9EUlZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZndpbWcuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9md2ltZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMzRiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZndpbWcuYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYWRfZndpbWcuYyBMaW51eCBkcml2ZXIgUENJIGludGVyZmFjZSBtb2R1bGUuCisgKi8KKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8YmZhZF9kcnYuaD4KKyNpbmNsdWRlIDxiZmFkX2ltX2NvbXBhdC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YmZhX2Z3aW1nX3ByaXYuaD4KKyNpbmNsdWRlIDxiZmEuaD4KKwordTMyIGJmaV9pbWFnZV9jdF9zaXplOwordTMyIGJmaV9pbWFnZV9jYl9zaXplOwordTMyICpiZmlfaW1hZ2VfY3Q7Cit1MzIgKmJmaV9pbWFnZV9jYjsKKworCisjZGVmaW5lCUJGQURfRldfRklMRV9DVAkiY3Rmdy5iaW4iCisjZGVmaW5lCUJGQURfRldfRklMRV9DQgkiY2Jmdy5iaW4iCitNT0RVTEVfRklSTVdBUkUoQkZBRF9GV19GSUxFX0NUKTsKK01PRFVMRV9GSVJNV0FSRShCRkFEX0ZXX0ZJTEVfQ0IpOworCit1MzIgKgorYmZhZF9yZWFkX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKipiZmlfaW1hZ2UsCisJCQl1MzIgKmJmaV9pbWFnZV9zaXplLCBjaGFyICpmd19uYW1lKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZwZGV2LT5kZXYpKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICJDYW4ndCBsb2NhdGUgZmlybXdhcmUgJXNcbiIsIGZ3X25hbWUpOworCQlnb3RvIGVycm9yOworCX0KKworCSpiZmlfaW1hZ2UgPSB2bWFsbG9jKGZ3LT5zaXplKTsKKwlpZiAoTlVMTCA9PSAqYmZpX2ltYWdlKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICJGYWlsIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZncgaW1hZ2UgIgorCQkJInNpemU9JXghXG4iLCAodTMyKSBmdy0+c2l6ZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJbWVtY3B5KCpiZmlfaW1hZ2UsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJKmJmaV9pbWFnZV9zaXplID0gZnctPnNpemUvc2l6ZW9mKHUzMik7CisKKwlyZXR1cm4oKmJmaV9pbWFnZSk7CisKK2Vycm9yOgorCXJldHVybihOVUxMKTsKK30KKwordTMyICoKK2JmYWRfZ2V0X2Zpcm13YXJlX2J1ZihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAocGRldi0+ZGV2aWNlID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSB7CisJCWlmIChiZmlfaW1hZ2VfY3Rfc2l6ZSA9PSAwKQorCQkJYmZhZF9yZWFkX2Zpcm13YXJlKHBkZXYsICZiZmlfaW1hZ2VfY3QsCisJCQkJJmJmaV9pbWFnZV9jdF9zaXplLCBCRkFEX0ZXX0ZJTEVfQ1QpOworCQlyZXR1cm4oYmZpX2ltYWdlX2N0KTsKKwl9IGVsc2UgeworCQlpZiAoYmZpX2ltYWdlX2NiX3NpemUgPT0gMCkKKwkJCWJmYWRfcmVhZF9maXJtd2FyZShwZGV2LCAmYmZpX2ltYWdlX2NiLAorCQkJCSZiZmlfaW1hZ2VfY2Jfc2l6ZSwgQkZBRF9GV19GSUxFX0NCKTsKKwkJcmV0dXJuKGJmaV9pbWFnZV9jYik7CisJfQorfQorCit1MzIgKgorYmZpX2ltYWdlX2N0X2dldF9jaHVuayh1MzIgb2ZmKQoreyByZXR1cm4gKHUzMiAqKShiZmlfaW1hZ2VfY3QgKyBvZmYpOyB9CisKK3UzMiAqCitiZmlfaW1hZ2VfY2JfZ2V0X2NodW5rKHUzMiBvZmYpCit7IHJldHVybiAodTMyICopKGJmaV9pbWFnZV9jYiArIG9mZik7IH0KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWQwMTJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMKQEAgLTAsMCArMSwxMjMwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYWRfaW0uYyBMaW51eCBkcml2ZXIgSU0gbW9kdWxlLgorICovCisKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgorI2luY2x1ZGUgImJmYWRfaW0uaCIKKyNpbmNsdWRlICJiZmFkX3RyY21vZC5oIgorI2luY2x1ZGUgImJmYV9jYl9pb2ltX21hY3Jvcy5oIgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX2ZjcGltLmg+CisKK0JGQV9UUkNfRklMRShMRFJWLCBJTSk7CisKK0RFRklORV9JRFIoYmZhZF9pbV9wb3J0X2luZGV4KTsKK3N0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqYmZhZF9pbV9zY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZTsKK3N0YXRpYyB2b2lkIGJmYWRfaW1faXRuaW1fd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgaW50IGJmYWRfaW1fcXVldWVjb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQsCisJCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKK3N0YXRpYyBpbnQgYmZhZF9pbV9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOworCit2b2lkCitiZmFfY2JfaW9pbV9kb25lKHZvaWQgKmRydiwgc3RydWN0IGJmYWRfaW9pbV9zICpkaW8sCisJCQllbnVtIGJmaV9pb2ltX3N0YXR1cyBpb19zdGF0dXMsIHU4IHNjc2lfc3RhdHVzLAorCQkJaW50IHNuc19sZW4sIHU4ICpzbnNfaW5mbywgczMyIHJlc2lkdWUpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGRydjsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW07CisKKwlzd2l0Y2ggKGlvX3N0YXR1cykgeworCWNhc2UgQkZJX0lPSU1fU1RTX09LOgorCQliZmFfdHJjKGJmYWQsIHNjc2lfc3RhdHVzKTsKKwkJY21uZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfT0ssIHNjc2lfc3RhdHVzKTsKKwkJc2NzaV9zZXRfcmVzaWQoY21uZCwgMCk7CisKKwkJaWYgKHNuc19sZW4gPiAwKSB7CisJCQliZmFfdHJjKGJmYWQsIHNuc19sZW4pOworCQkJaWYgKHNuc19sZW4gPiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpCisJCQkJc25zX2xlbiA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKKwkJCW1lbWNweShjbW5kLT5zZW5zZV9idWZmZXIsIHNuc19pbmZvLCBzbnNfbGVuKTsKKwkJfQorCQlpZiAocmVzaWR1ZSA+IDApCisJCQlzY3NpX3NldF9yZXNpZChjbW5kLCByZXNpZHVlKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19BQk9SVEVEOgorCWNhc2UgQkZJX0lPSU1fU1RTX1RJTUVET1VUOgorCWNhc2UgQkZJX0lPSU1fU1RTX1BBVEhUT1Y6CisJZGVmYXVsdDoKKwkJY21uZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfRVJST1IsIDApOworCX0KKworCS8qIFVubWFwIERNQSwgaWYgaG9zdCBpcyBOVUxMLCBpdCBtZWFucyBhIHNjc2kgcGFzc3RocnUgY21kICovCisJaWYgKGNtbmQtPmRldmljZS0+aG9zdCAhPSBOVUxMKQorCQlzY3NpX2RtYV91bm1hcChjbW5kKTsKKworCWNtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOworCWJmYV90cmMoYmZhZCwgY21uZC0+cmVzdWx0KTsKKworCWl0bmltX2RhdGEgPSBjbW5kLT5kZXZpY2UtPmhvc3RkYXRhOworCWlmIChpdG5pbV9kYXRhKSB7CisJCWl0bmltID0gaXRuaW1fZGF0YS0+aXRuaW07CisJCWlmICghY21uZC0+cmVzdWx0ICYmIGl0bmltICYmCisJCQkgKGJmYV9sdW5fcXVldWVfZGVwdGggPiBjbW5kLT5kZXZpY2UtPnF1ZXVlX2RlcHRoKSkgeworCQkJLyogUXVldWUgZGVwdGggYWRqdXN0bWVudCBmb3IgZ29vZCBzdGF0dXMgY29tcGxldGlvbiAqLworCQkJYmZhZF9vc19yYW1wX3VwX3FkZXB0aChpdG5pbSwgY21uZC0+ZGV2aWNlKTsKKwkJfSBlbHNlIGlmIChjbW5kLT5yZXN1bHQgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCAmJiBpdG5pbSkgeworCQkJLyogcWZ1bGwgaGFuZGxpbmcgKi8KKwkJCWJmYWRfb3NfaGFuZGxlX3FmdWxsKGl0bmltLCBjbW5kLT5kZXZpY2UpOworCQl9CisJfQorCisJY21uZC0+c2NzaV9kb25lKGNtbmQpOworfQorCit2b2lkCitiZmFfY2JfaW9pbV9nb29kX2NvbXAodm9pZCAqZHJ2LCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhOworCXN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltOworCisJY21uZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfT0ssIFNDU0lfU1RBVFVTX0dPT0QpOworCisJLyogVW5tYXAgRE1BLCBpZiBob3N0IGlzIE5VTEwsIGl0IG1lYW5zIGEgc2NzaSBwYXNzdGhydSBjbWQgKi8KKwlpZiAoY21uZC0+ZGV2aWNlLT5ob3N0ICE9IE5VTEwpCisJCXNjc2lfZG1hX3VubWFwKGNtbmQpOworCisJY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CisKKwkvKiBRdWV1ZSBkZXB0aCBhZGp1c3RtZW50ICovCisJaWYgKGJmYV9sdW5fcXVldWVfZGVwdGggPiBjbW5kLT5kZXZpY2UtPnF1ZXVlX2RlcHRoKSB7CisJCWl0bmltX2RhdGEgPSBjbW5kLT5kZXZpY2UtPmhvc3RkYXRhOworCQlpZiAoaXRuaW1fZGF0YSkgeworCQkJaXRuaW0gPSBpdG5pbV9kYXRhLT5pdG5pbTsKKwkJCWlmIChpdG5pbSkKKwkJCQliZmFkX29zX3JhbXBfdXBfcWRlcHRoKGl0bmltLCBjbW5kLT5kZXZpY2UpOworCQl9CisJfQorCisJY21uZC0+c2NzaV9kb25lKGNtbmQpOworfQorCit2b2lkCitiZmFfY2JfaW9pbV9hYm9ydCh2b2lkICpkcnYsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBkcnY7CisKKwljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9FUlJPUiwgMCk7CisKKwkvKiBVbm1hcCBETUEsIGlmIGhvc3QgaXMgTlVMTCwgaXQgbWVhbnMgYSBzY3NpIHBhc3N0aHJ1IGNtZCAqLworCWlmIChjbW5kLT5kZXZpY2UtPmhvc3QgIT0gTlVMTCkKKwkJc2NzaV9kbWFfdW5tYXAoY21uZCk7CisKKwliZmFfdHJjKGJmYWQsIGNtbmQtPnJlc3VsdCk7CisJY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7Cit9CisKK3ZvaWQKK2JmYV9jYl90c2tpbV9kb25lKHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX3Rza2ltX3MgKmR0c2ssCisJCSAgIGVudW0gYmZpX3Rza2ltX3N0YXR1cyB0c2tfc3RhdHVzKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWR0c2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxOworCisJY21uZC0+U0NwLlN0YXR1cyB8PSB0c2tfc3RhdHVzIDw8IDE7CisJc2V0X2JpdChJT19ET05FX0JJVCwgKHVuc2lnbmVkIGxvbmcgKikmY21uZC0+U0NwLlN0YXR1cyk7CisJd3EgPSAod2FpdF9xdWV1ZV9oZWFkX3QgKikgY21uZC0+U0NwLnB0cjsKKwljbW5kLT5TQ3AucHRyID0gTlVMTDsKKworCWlmICh3cSkKKwkJd2FrZV91cCh3cSk7Cit9CisKK3ZvaWQKK2JmYV9jYl9pb2ltX3Jlc2ZyZWUodm9pZCAqZHJ2KQoreworfQorCisvKioKKyAqICBTY3NpX0hvc3RfdGVtcGxhdGUgU0NTSSBob3N0IHRlbXBsYXRlCisgKi8KKy8qKgorICogU2NzaV9Ib3N0IHRlbXBsYXRlIGVudHJ5LCByZXR1cm5zIEJGQUQgUENJIGluZm8uCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2JmYWRfaW1faW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdGF0aWMgY2hhciAgICAgYmZhX2J1ZlsyNTZdOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKworCW1lbXNldChiZmFfYnVmLCAwLCBzaXplb2YoYmZhX2J1ZikpOworCXNucHJpbnRmKGJmYV9idWYsIHNpemVvZihiZmFfYnVmKSwKKwkJICJCcm9jYWRlIEZDL0ZDT0UgQWRhcHRlciwgIiAibW9kZWw6ICVzIGh3cGF0aDogJXMgZHJpdmVyOiAlcyIsCisJCSBpb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWwsIGJmYWQtPnBjaV9uYW1lLAorCQkgQkZBRF9EUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIGJmYV9idWY7Cit9CisKKy8qKgorICogU2NzaV9Ib3N0IHRlbXBsYXRlIGVudHJ5LCBhYm9ydHMgdGhlIHNwZWNpZmllZCBTQ1NJIGNvbW1hbmQuCisgKgorICogUmV0dXJuczogU1VDQ0VTUyBvciBGQUlMRUQuCisgKi8KK3N0YXRpYyBpbnQKK2JmYWRfaW1fYWJvcnRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY21uZC0+ZGV2aWNlLT5ob3N0OworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9pbV9zICpoYWxfaW87CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCXUzMiAgICAgICAgdGltZW91dDsKKwlpbnQgICAgICAgICAgICAgcmMgPSBGQUlMRUQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaGFsX2lvID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIGNtbmQtPmhvc3Rfc2NyaWJibGU7CisJaWYgKCFoYWxfaW8pIHsKKwkJLyogSU8gaGFzIGJlZW4gY29tcGxldGVkLCByZXRydW4gc3VjY2VzcyAqLworCQlyYyA9IFNVQ0NFU1M7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaGFsX2lvLT5kaW8gIT0gKHN0cnVjdCBiZmFkX2lvaW1fcyAqKSBjbW5kKSB7CisJCXJjID0gRkFJTEVEOworCQlnb3RvIG91dDsKKwl9CisKKwliZmFfdHJjKGJmYWQsIGhhbF9pby0+aW90YWcpOworCWJmYV9sb2coYmZhZC0+bG9nbW9kLCBCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlQsCisJCWltX3BvcnQtPnNob3N0LT5ob3N0X25vLCBjbW5kLCBoYWxfaW8tPmlvdGFnKTsKKwliZmFfaW9pbV9hYm9ydChoYWxfaW8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJLyogTmVlZCB0byB3YWl0IHVudGlsIHRoZSBjb21tYW5kIGdldCBhYm9ydGVkICovCisJdGltZW91dCA9IDEwOworCXdoaWxlICgoc3RydWN0IGJmYV9pb2ltX3MgKikgY21uZC0+aG9zdF9zY3JpYmJsZSA9PSBoYWxfaW8pIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCQlpZiAodGltZW91dCA8IDQgKiBIWikKKwkJCXRpbWVvdXQgKj0gMjsKKwl9CisKKwljbW5kLT5zY3NpX2RvbmUoY21uZCk7CisJYmZhX3RyYyhiZmFkLCBoYWxfaW8tPmlvdGFnKTsKKwliZmFfbG9nKGJmYWQtPmxvZ21vZCwgQkZBX0xPR19MSU5VWF9TQ1NJX0FCT1JUX0NPTVAsCisJCWltX3BvcnQtPnNob3N0LT5ob3N0X25vLCBjbW5kLCBoYWxfaW8tPmlvdGFnKTsKKwlyZXR1cm4gU1VDQ0VTUzsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBiZmFfc3RhdHVzX3QKK2JmYWRfaW1fdGFyZ2V0X3Jlc2V0X3NlbmQoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IHNjc2lfY21uZCAqY21uZCwKKwkJICAgICBzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltOworCXN0cnVjdCBiZmFfaXRuaW1fcyAqYmZhX2l0bmltOworCWJmYV9zdGF0dXNfdCAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisKKwliZmFfaXRuaW0gPSBiZmFfZmNzX2l0bmltX2dldF9oYWxpdG4oJml0bmltLT5mY3NfaXRuaW0pOworCXRza2ltID0gYmZhX3Rza2ltX2FsbG9jKCZiZmFkLT5iZmEsIChzdHJ1Y3QgYmZhZF90c2tpbV9zICopIGNtbmQpOworCWlmICghdHNraW0pIHsKKwkJQkZBX0RFVl9QUklOVEYoYmZhZCwgQkZBX0VSUiwKKwkJCSAgICAgICAidGFyZ2V0IHJlc2V0LCBmYWlsIHRvIGFsbG9jYXRlIHRza2ltXG4iKTsKKwkJcmMgPSBCRkFfU1RBVFVTX0ZBSUxFRDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBTZXQgaG9zdF9zY3JpYmJsZSB0byBOVUxMIHRvIGF2b2lkIGFib3J0aW5nIGEgdGFzayBjb21tYW5kIGlmCisJICogaGFwcGVucy4KKwkgKi8KKwljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKKwljbW5kLT5TQ3AuU3RhdHVzID0gMDsKKwliZmFfaXRuaW0gPSBiZmFfZmNzX2l0bmltX2dldF9oYWxpdG4oJml0bmltLT5mY3NfaXRuaW0pOworCWJmYV90c2tpbV9zdGFydCh0c2tpbSwgYmZhX2l0bmltLCAobHVuX3QpMCwKKwkJCSAgICBGQ1BfVE1fVEFSR0VUX1JFU0VULCBCRkFEX1RBUkdFVF9SRVNFVF9UTU8pOworb3V0OgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIHJlc2V0cyBhIExVTiBhbmQgYWJvcnQgaXRzIGFsbCBjb21tYW5kcy4KKyAqCisgKiBSZXR1cm5zOiBTVUNDRVNTIG9yIEZBSUxFRC4KKyAqCisgKi8KK3N0YXRpYyBpbnQKK2JmYWRfaW1fcmVzZXRfbHVuX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNtbmQtPmRldmljZS0+aG9zdDsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhID0gY21uZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKmJmYV9pdG5pbTsKKwlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh3cSk7CisJaW50ICAgICAgICAgICAgIHJjID0gU1VDQ0VTUzsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJZW51bSBiZmlfdHNraW1fc3RhdHVzIHRhc2tfc3RhdHVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWl0bmltID0gaXRuaW1fZGF0YS0+aXRuaW07CisJaWYgKCFpdG5pbSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJcmMgPSBGQUlMRUQ7CisJCWdvdG8gb3V0OworCX0KKworCXRza2ltID0gYmZhX3Rza2ltX2FsbG9jKCZiZmFkLT5iZmEsIChzdHJ1Y3QgYmZhZF90c2tpbV9zICopIGNtbmQpOworCWlmICghdHNraW0pIHsKKwkJQkZBX0RFVl9QUklOVEYoYmZhZCwgQkZBX0VSUiwKKwkJCQkiTFVOIHJlc2V0LCBmYWlsIHRvIGFsbG9jYXRlIHRza2ltIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlyYyA9IEZBSUxFRDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoqCisJICogU2V0IGhvc3Rfc2NyaWJibGUgdG8gTlVMTCB0byBhdm9pZCBhYm9ydGluZyBhIHRhc2sgY29tbWFuZAorCSAqIGlmIGhhcHBlbnMuCisJICovCisJY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CisJY21uZC0+U0NwLnB0ciA9IChjaGFyICopJndxOworCWNtbmQtPlNDcC5TdGF0dXMgPSAwOworCWJmYV9pdG5pbSA9IGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bigmaXRuaW0tPmZjc19pdG5pbSk7CisJYmZhX3Rza2ltX3N0YXJ0KHRza2ltLCBiZmFfaXRuaW0sCisJCQkgICAgYmZhZF9pbnRfdG9fbHVuKGNtbmQtPmRldmljZS0+bHVuKSwKKwkJCSAgICBGQ1BfVE1fTFVOX1JFU0VULCBCRkFEX0xVTl9SRVNFVF9UTU8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJd2FpdF9ldmVudCh3cSwgdGVzdF9iaXQoSU9fRE9ORV9CSVQsCisJCQkodW5zaWduZWQgbG9uZyAqKSZjbW5kLT5TQ3AuU3RhdHVzKSk7CisKKwl0YXNrX3N0YXR1cyA9IGNtbmQtPlNDcC5TdGF0dXMgPj4gMTsKKwlpZiAodGFza19zdGF0dXMgIT0gQkZJX1RTS0lNX1NUU19PSykgeworCQlCRkFfREVWX1BSSU5URihiZmFkLCBCRkFfRVJSLCAiTFVOIHJlc2V0IGZhaWx1cmUsIHN0YXR1czogJWRcbiIsCisJCQkgICAgICAgdGFza19zdGF0dXMpOworCQlyYyA9IEZBSUxFRDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogU2NzaV9Ib3N0IHRlbXBsYXRlIGVudHJ5LCByZXNldHMgdGhlIGJ1cyBhbmQgYWJvcnQgYWxsIGNvbW1hbmRzLgorICovCitzdGF0aWMgaW50CitiZmFkX2ltX3Jlc2V0X2J1c19oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbW5kLT5kZXZpY2UtPmhvc3Q7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW07CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCXUzMiAgICAgICAgaSwgcmMsIGVycl9jbnQgPSAwOworCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKKwllbnVtIGJmaV90c2tpbV9zdGF0dXMgdGFza19zdGF0dXM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9GQ1BfVEFSR0VUOyBpKyspIHsKKwkJaXRuaW0gPSBiZmFkX29zX2dldF9pdG5pbShpbV9wb3J0LCBpKTsKKwkJaWYgKGl0bmltKSB7CisJCQljbW5kLT5TQ3AucHRyID0gKGNoYXIgKikmd3E7CisJCQlyYyA9IGJmYWRfaW1fdGFyZ2V0X3Jlc2V0X3NlbmQoYmZhZCwgY21uZCwgaXRuaW0pOworCQkJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJCQllcnJfY250Kys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIHdhaXQgdGFyZ2V0IHJlc2V0IHRvIGNvbXBsZXRlICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJCXdhaXRfZXZlbnQod3EsIHRlc3RfYml0KElPX0RPTkVfQklULAorCQkJCQkodW5zaWduZWQgbG9uZyAqKSZjbW5kLT5TQ3AuU3RhdHVzKSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwkJCXRhc2tfc3RhdHVzID0gY21uZC0+U0NwLlN0YXR1cyA+PiAxOworCQkJaWYgKHRhc2tfc3RhdHVzICE9IEJGSV9UU0tJTV9TVFNfT0spIHsKKwkJCQlCRkFfREVWX1BSSU5URihiZmFkLCBCRkFfRVJSLAorCQkJCQkidGFyZ2V0IHJlc2V0IGZhaWx1cmUsIgorCQkJCQkiIHN0YXR1czogJWRcbiIsIHRhc2tfc3RhdHVzKTsKKwkJCQllcnJfY250Kys7CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAoZXJyX2NudCkKKwkJcmV0dXJuIEZBSUxFRDsKKworCXJldHVybiBTVUNDRVNTOworfQorCisvKioKKyAqIFNjc2lfSG9zdCB0ZW1wbGF0ZSBlbnRyeSBzbGF2ZV9kZXN0cm95LgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzZGV2LT5ob3N0ZGF0YSA9IE5VTEw7CisJcmV0dXJuOworfQorCisvKioKKyAqICBCRkEgRkNTIGl0bmltIGNhbGxiYWNrcworICovCisKKy8qKgorICogQkZBIEZDUyBpdG5pbSBhbGxvYyBjYWxsYmFjaywgYWZ0ZXIgc3VjY2Vzc2Z1bCBQUkxJCisgKiBDb250ZXh0OiBJbnRlcnJ1cHQKKyAqLwordm9pZAorYmZhX2ZjYl9pdG5pbV9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICoqaXRuaW0sCisJCSAgICBzdHJ1Y3QgYmZhZF9pdG5pbV9zICoqaXRuaW1fZHJ2KQoreworCSppdG5pbV9kcnYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhZF9pdG5pbV9zKSwgR0ZQX0FUT01JQyk7CisJaWYgKCppdG5pbV9kcnYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJKCppdG5pbV9kcnYpLT5pbSA9IGJmYWQtPmltOworCSppdG5pbSA9ICYoKml0bmltX2RydiktPmZjc19pdG5pbTsKKwkoKml0bmltX2RydiktPnN0YXRlID0gSVROSU1fU1RBVEVfTk9ORTsKKworCS8qCisJICogSW5pdGlhemUgdGhlIGl0bmltX3dvcmsKKwkgKi8KKwlJTklUX1dPUksoJigqaXRuaW1fZHJ2KS0+aXRuaW1fd29yaywgYmZhZF9pbV9pdG5pbV93b3JrX2hhbmRsZXIpOworCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9SUE9SVF9PTkxJTkU7Cit9CisKKy8qKgorICogQkZBIEZDUyBpdG5pbSBmcmVlIGNhbGxiYWNrLgorICogQ29udGV4dDogSW50ZXJydXB0LiBiZmFkX2xvY2sgaXMgaGVsZAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KQoreworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydDsKKwl3d25fdCB3d3BuOworCXUzMiBmY2lkOworCWNoYXIgd3dwbl9zdHJbMzJdLCBmY2lkX3N0clsxNl07CisKKwkvKiBvbmxpbmUgdG8gZnJlZSBzdGF0ZSB0cmFuc3Rpb24gc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwliZmFfYXNzZXJ0KGl0bmltX2Rydi0+c3RhdGUgIT0gSVROSU1fU1RBVEVfT05MSU5FKTsKKworCWl0bmltX2Rydi0+cXVldWVfd29yayA9IDE7CisJLyogb2ZmbGluZSByZXF1ZXN0IGlzIG5vdCB5ZXQgZG9uZSwgdXNlIHRoZSBzYW1lIHJlcXVlc3QgdG8gZnJlZSAqLworCWlmIChpdG5pbV9kcnYtPnN0YXRlID09IElUTklNX1NUQVRFX09GRkxJTkVfUEVORElORykKKwkJaXRuaW1fZHJ2LT5xdWV1ZV93b3JrID0gMDsKKworCWl0bmltX2Rydi0+c3RhdGUgPSBJVE5JTV9TVEFURV9GUkVFOworCXBvcnQgPSBiZmFfZmNzX2l0bmltX2dldF9kcnZwb3J0KCZpdG5pbV9kcnYtPmZjc19pdG5pbSk7CisJaXRuaW1fZHJ2LT5pbV9wb3J0ID0gcG9ydC0+aW1fcG9ydDsKKwl3d3BuID0gYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW1fZHJ2LT5mY3NfaXRuaW0pOworCWZjaWQgPSBiZmFfZmNzX2l0bmltX2dldF9mY2lkKCZpdG5pbV9kcnYtPmZjc19pdG5pbSk7CisJd3duMnN0cih3d3BuX3N0ciwgd3dwbik7CisJZmNpZDJzdHIoZmNpZF9zdHIsIGZjaWQpOworCWJmYV9sb2coYmZhZC0+bG9nbW9kLCBCRkFfTE9HX0xJTlVYX0lUTklNX0ZSRUUsCisJCXBvcnQtPmltX3BvcnQtPnNob3N0LT5ob3N0X25vLAorCQlmY2lkX3N0ciwgd3dwbl9zdHIpOworCWJmYWRfb3NfaXRuaW1fcHJvY2VzcyhpdG5pbV9kcnYpOworfQorCisvKioKKyAqIEJGQSBGQ1MgaXRuaW0gb25saW5lIGNhbGxiYWNrLgorICogQ29udGV4dDogSW50ZXJydXB0LiBiZmFkX2xvY2sgaXMgaGVsZAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX29ubGluZShzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbV9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0OworCisJaXRuaW1fZHJ2LT5iZmFfaXRuaW0gPSBiZmFfZmNzX2l0bmltX2dldF9oYWxpdG4oJml0bmltX2Rydi0+ZmNzX2l0bmltKTsKKwlwb3J0ID0gYmZhX2Zjc19pdG5pbV9nZXRfZHJ2cG9ydCgmaXRuaW1fZHJ2LT5mY3NfaXRuaW0pOworCWl0bmltX2Rydi0+c3RhdGUgPSBJVE5JTV9TVEFURV9PTkxJTkU7CisJaXRuaW1fZHJ2LT5xdWV1ZV93b3JrID0gMTsKKwlpdG5pbV9kcnYtPmltX3BvcnQgPSBwb3J0LT5pbV9wb3J0OworCWJmYWRfb3NfaXRuaW1fcHJvY2VzcyhpdG5pbV9kcnYpOworfQorCisvKioKKyAqIEJGQSBGQ1MgaXRuaW0gb2ZmbGluZSBjYWxsYmFjay4KKyAqIENvbnRleHQ6IEludGVycnVwdC4gYmZhZF9sb2NrIGlzIGhlbGQKKyAqLwordm9pZAorYmZhX2ZjYl9pdG5pbV9vZmZsaW5lKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2RydikKK3sKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQ7CisJc3RydWN0IGJmYWRfcyAqYmZhZDsKKworCXBvcnQgPSBiZmFfZmNzX2l0bmltX2dldF9kcnZwb3J0KCZpdG5pbV9kcnYtPmZjc19pdG5pbSk7CisJYmZhZCA9IHBvcnQtPmJmYWQ7CisJaWYgKChiZmFkLT5wcG9ydC5mbGFncyAmIEJGQURfUE9SVF9ERUxFVEUpIHx8CisJCSAocG9ydC0+ZmxhZ3MgJiBCRkFEX1BPUlRfREVMRVRFKSkgeworCQlpdG5pbV9kcnYtPnN0YXRlID0gSVROSU1fU1RBVEVfT0ZGTElORTsKKwkJcmV0dXJuOworCX0KKwlpdG5pbV9kcnYtPmltX3BvcnQgPSBwb3J0LT5pbV9wb3J0OworCWl0bmltX2Rydi0+c3RhdGUgPSBJVE5JTV9TVEFURV9PRkZMSU5FX1BFTkRJTkc7CisJaXRuaW1fZHJ2LT5xdWV1ZV93b3JrID0gMTsKKwliZmFkX29zX2l0bmltX3Byb2Nlc3MoaXRuaW1fZHJ2KTsKK30KKworLyoqCisgKiBCRkEgRkNTIGl0bmltIHRpbWVvdXQgY2FsbGJhY2suCisgKiBDb250ZXh0OiBJbnRlcnJ1cHQuIGJmYWRfbG9jayBpcyBoZWxkCisgKi8KK3ZvaWQgYmZhX2ZjYl9pdG5pbV90b3Yoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0pCit7CisJaXRuaW0tPnN0YXRlID0gSVROSU1fU1RBVEVfVElNRU9VVDsKK30KKworLyoqCisgKiBQYXRoIFRPViBwcm9jZXNzaW5nIGJlZ2luIG5vdGlmaWNhdGlvbiAtLSBkdW1teSBmb3IgbGludXgKKyAqLwordm9pZAorYmZhX2ZjYl9pdG5pbV90b3ZfYmVnaW4oc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0pCit7Cit9CisKKworCisvKioKKyAqIEFsbG9jYXRlIGEgU2NzaV9Ib3N0IGZvciBhIHBvcnQuCisgKi8KK2ludAorYmZhZF9pbV9zY3NpX2hvc3RfYWxsb2Moc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KQoreworCWludCBlcnJvciA9IDE7CisKKwlpZiAoIWlkcl9wcmVfZ2V0KCZiZmFkX2ltX3BvcnRfaW5kZXgsIEdGUF9LRVJORUwpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlkcl9wcmVfZ2V0IGZhaWx1cmVcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnJvciA9IGlkcl9nZXRfbmV3KCZiZmFkX2ltX3BvcnRfaW5kZXgsIGltX3BvcnQsCisJCQkJCSAmaW1fcG9ydC0+aWRyX2lkKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRyX2dldF9uZXcgZmFpbHVyZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWltX3BvcnQtPnNob3N0ID0gYmZhZF9vc19zY3NpX2hvc3RfYWxsb2MoaW1fcG9ydCwgYmZhZCk7CisJaWYgKCFpbV9wb3J0LT5zaG9zdCkgeworCQllcnJvciA9IDE7CisJCWdvdG8gb3V0X2ZyZWVfaWRyOworCX0KKworCWltX3BvcnQtPnNob3N0LT5ob3N0ZGF0YVswXSA9ICh1bnNpZ25lZCBsb25nKWltX3BvcnQ7CisJaW1fcG9ydC0+c2hvc3QtPnVuaXF1ZV9pZCA9IGltX3BvcnQtPmlkcl9pZDsKKwlpbV9wb3J0LT5zaG9zdC0+dGhpc19pZCA9IC0xOworCWltX3BvcnQtPnNob3N0LT5tYXhfaWQgPSBNQVhfRkNQX1RBUkdFVDsKKwlpbV9wb3J0LT5zaG9zdC0+bWF4X2x1biA9IE1BWF9GQ1BfTFVOOworCWltX3BvcnQtPnNob3N0LT5tYXhfY21kX2xlbiA9IDE2OworCWltX3BvcnQtPnNob3N0LT5jYW5fcXVldWUgPSBiZmFkLT5jZmdfZGF0YS5pb2NfcXVldWVfZGVwdGg7CisJaW1fcG9ydC0+c2hvc3QtPnRyYW5zcG9ydHQgPSBiZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlOworCisJZXJyb3IgPSBiZmFkX29zX3Njc2lfYWRkX2hvc3QoaW1fcG9ydC0+c2hvc3QsIGltX3BvcnQsIGJmYWQpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkX29zX3Njc2lfYWRkX2hvc3QgZmFpbHVyZSAlZFxuIiwKKwkJCQkJCQllcnJvcik7CisJCWdvdG8gb3V0X2ZjX3JlbDsKKwl9CisKKwkvKiBzZXR1cCBob3N0IGZpeGVkIGF0dHJpYnV0ZSBpZiB0aGUgbGsgc3VwcG9ydHMgKi8KKwliZmFkX29zX2ZjX2hvc3RfaW5pdChpbV9wb3J0KTsKKworCXJldHVybiAwOworCitvdXRfZmNfcmVsOgorCXNjc2lfaG9zdF9wdXQoaW1fcG9ydC0+c2hvc3QpOworb3V0X2ZyZWVfaWRyOgorCWlkcl9yZW1vdmUoJmJmYWRfaW1fcG9ydF9pbmRleCwgaW1fcG9ydC0+aWRyX2lkKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQKK2JmYWRfaW1fc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwliZmFfdHJjKGJmYWQsIGJmYWQtPmluc3Rfbm8pOworCWJmYV9sb2coYmZhZC0+bG9nbW9kLCBCRkFfTE9HX0xJTlVYX1NDU0lfSE9TVF9GUkVFLAorCQkJaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8pOworCisJZmNfcmVtb3ZlX2hvc3QoaW1fcG9ydC0+c2hvc3QpOworCisJc2NzaV9yZW1vdmVfaG9zdChpbV9wb3J0LT5zaG9zdCk7CisJc2NzaV9ob3N0X3B1dChpbV9wb3J0LT5zaG9zdCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaWRyX3JlbW92ZSgmYmZhZF9pbV9wb3J0X2luZGV4LCBpbV9wb3J0LT5pZHJfaWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZAorYmZhZF9pbV9wb3J0X2RlbGV0ZV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGJmYWRfaW1fcG9ydF9zLCBwb3J0X2RlbGV0ZV93b3JrKTsKKworCWJmYWRfaW1fc2NzaV9ob3N0X2ZyZWUoaW1fcG9ydC0+YmZhZCwgaW1fcG9ydCk7CisJYmZhZF9pbV9wb3J0X2NsZWFuKGltX3BvcnQpOworCWtmcmVlKGltX3BvcnQpOworfQorCitiZmFfc3RhdHVzX3QKK2JmYWRfaW1fcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0KQoreworCWludCAgICAgICAgICAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0OworCisJaW1fcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyksIEdGUF9BVE9NSUMpOworCWlmIChpbV9wb3J0ID09IE5VTEwpIHsKKwkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJZ290byBleHQ7CisJfQorCXBvcnQtPmltX3BvcnQgPSBpbV9wb3J0OworCWltX3BvcnQtPnBvcnQgPSBwb3J0OworCWltX3BvcnQtPmJmYWQgPSBiZmFkOworCisJSU5JVF9XT1JLKCZpbV9wb3J0LT5wb3J0X2RlbGV0ZV93b3JrLCBiZmFkX2ltX3BvcnRfZGVsZXRlX2hhbmRsZXIpOworCUlOSVRfTElTVF9IRUFEKCZpbV9wb3J0LT5pdG5pbV9tYXBwZWRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmltX3BvcnQtPmJpbmRpbmdfbGlzdCk7CisKK2V4dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfaW1fcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7CisKKwlxdWV1ZV93b3JrKGJmYWQtPmltLT5kcnZfd29ya3EsCisJCQkJJmltX3BvcnQtPnBvcnRfZGVsZXRlX3dvcmspOworfQorCit2b2lkCitiZmFkX2ltX3BvcnRfY2xlYW4oc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KQoreworCXN0cnVjdCBiZmFkX2ZjcF9iaW5kaW5nICpicCwgKmJwX25ldzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSAgaW1fcG9ydC0+YmZhZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnAsIGJwX25ldywgJmltX3BvcnQtPmJpbmRpbmdfbGlzdCwKKwkJCQkJbGlzdF9lbnRyeSkgeworCQlsaXN0X2RlbCgmYnAtPmxpc3RfZW50cnkpOworCQlrZnJlZShicCk7CisJfQorCisJLyogdGhlIGl0bmltX21hcHBlZF9saXN0IG11c3QgYmUgZW1wdHkgYXQgdGhpcyB0aW1lICovCisJYmZhX2Fzc2VydChsaXN0X2VtcHR5KCZpbV9wb3J0LT5pdG5pbV9tYXBwZWRfbGlzdCkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQKK2JmYWRfaW1fcG9ydF9vbmxpbmUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0KQoreworfQorCit2b2lkCitiZmFkX2ltX3BvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCit7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9pbV9wcm9iZShzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCXN0cnVjdCBiZmFkX2ltX3MgICAgICAqaW07CisJYmZhX3N0YXR1c190ICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKworCWltID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfaW1fcyksIEdGUF9LRVJORUwpOworCWlmIChpbSA9PSBOVUxMKSB7CisJCXJjID0gQkZBX1NUQVRVU19FTk9NRU07CisJCWdvdG8gZXh0OworCX0KKworCWJmYWQtPmltID0gaW07CisJaW0tPmJmYWQgPSBiZmFkOworCisJaWYgKGJmYWRfb3NfdGhyZWFkX3dvcmtxKGJmYWQpICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJa2ZyZWUoaW0pOworCQlyYyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCX0KKworZXh0OgorCXJldHVybiByYzsKK30KKwordm9pZAorYmZhZF9pbV9wcm9iZV91bmRvKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaWYgKGJmYWQtPmltKSB7CisJCWJmYWRfb3NfZGVzdHJveV93b3JrcShiZmFkLT5pbSk7CisJCWtmcmVlKGJmYWQtPmltKTsKKwkJYmZhZC0+aW0gPSBOVUxMOworCX0KK30KKworCisKKworaW50CitiZmFkX29zX3Njc2lfYWRkX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCwKKwkJCXN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisgICAgc3RydWN0IGRldmljZSAqZGV2OworCisgICAgaWYgKGltX3BvcnQtPnBvcnQtPnB2Yl90eXBlID09IEJGQURfUE9SVF9QSFlTX0JBU0UpCisJCWRldiA9ICZiZmFkLT5wY2lkZXYtPmRldjsKKyAgICBlbHNlCisJCWRldiA9ICZiZmFkLT5wcG9ydC5pbV9wb3J0LT5zaG9zdC0+c2hvc3RfZ2VuZGV2OworCisgICAgcmV0dXJuIHNjc2lfYWRkX2hvc3Qoc2hvc3QsIGRldik7Cit9CisKK3N0cnVjdCBTY3NpX0hvc3QgKgorYmZhZF9vc19zY3NpX2hvc3RfYWxsb2Moc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LCBzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodDsKKworCWlmIChpbV9wb3J0LT5wb3J0LT5wdmJfdHlwZSA9PSBCRkFEX1BPUlRfUEhZU19CQVNFKQorCQlzaHQgPSAmYmZhZF9pbV9zY3NpX2hvc3RfdGVtcGxhdGU7CisJZWxzZQorCQlzaHQgPSAmYmZhZF9pbV92cG9ydF90ZW1wbGF0ZTsKKworCXNodC0+c2dfdGFibGVzaXplID0gYmZhZC0+Y2ZnX2RhdGEuaW9fbWF4X3NnZTsKKworCXJldHVybiBzY3NpX2hvc3RfYWxsb2Moc2h0LCBzaXplb2YodW5zaWduZWQgbG9uZykpOworfQorCit2b2lkCitiZmFkX29zX3Njc2lfaG9zdF9mcmVlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCkKK3sKKwlmbHVzaF93b3JrcXVldWUoYmZhZC0+aW0tPmRydl93b3JrcSk7CisJYmZhZF9pbV9zY3NpX2hvc3RfZnJlZShpbV9wb3J0LT5iZmFkLCBpbV9wb3J0KTsKKwliZmFkX2ltX3BvcnRfY2xlYW4oaW1fcG9ydCk7CisJa2ZyZWUoaW1fcG9ydCk7Cit9CisKK3ZvaWQKK2JmYWRfb3NfZGVzdHJveV93b3JrcShzdHJ1Y3QgYmZhZF9pbV9zICppbSkKK3sKKwlpZiAoaW0gJiYgaW0tPmRydl93b3JrcSkgeworCQlkZXN0cm95X3dvcmtxdWV1ZShpbS0+ZHJ2X3dvcmtxKTsKKwkJaW0tPmRydl93b3JrcSA9IE5VTEw7CisJfQorfQorCitiZmFfc3RhdHVzX3QKK2JmYWRfb3NfdGhyZWFkX3dvcmtxKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJc3RydWN0IGJmYWRfaW1fcyAgICAgICppbSA9IGJmYWQtPmltOworCisJYmZhX3RyYyhiZmFkLCAwKTsKKwlzbnByaW50ZihpbS0+ZHJ2X3dvcmtxX25hbWUsIEJGQURfS09CSl9OQU1FX0xFTiwgImJmYWRfd3FfJWQiLAorCQkgYmZhZC0+aW5zdF9ubyk7CisJaW0tPmRydl93b3JrcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGltLT5kcnZfd29ya3FfbmFtZSk7CisJaWYgKCFpbS0+ZHJ2X3dvcmtxKQorCQlyZXR1cm4gQkZBX1NUQVRVU19GQUlMRUQ7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnkuCisgKgorICogRGVzY3JpcHRpb246CisgKiBPUyBlbnRyeSBwb2ludCB0byBhZGp1c3QgdGhlIHF1ZXVlX2RlcHRocyBvbiBhIHBlci1kZXZpY2UgYmFzaXMuCisgKiBDYWxsZWQgb25jZSBwZXIgZGV2aWNlIGR1cmluZyB0aGUgYnVzIHNjYW4uCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQKK2JmYWRfaW1fc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKKwkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgYmZhX2x1bl9xdWV1ZV9kZXB0aCk7CisJZWxzZQorCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIGJmYV9sdW5fcXVldWVfZGVwdGgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYmZhZF9pbV9zY3NpX2hvc3RfdGVtcGxhdGUgPSB7CisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gQkZBRF9EUklWRVJfTkFNRSwKKwkuaW5mbyA9IGJmYWRfaW1faW5mbywKKwkucXVldWVjb21tYW5kID0gYmZhZF9pbV9xdWV1ZWNvbW1hbmQsCisJLmVoX2Fib3J0X2hhbmRsZXIgPSBiZmFkX2ltX2Fib3J0X2hhbmRsZXIsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gYmZhZF9pbV9yZXNldF9sdW5faGFuZGxlciwKKwkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgPSBiZmFkX2ltX3Jlc2V0X2J1c19oYW5kbGVyLAorCisJLnNsYXZlX2FsbG9jID0gYmZhZF9pbV9zbGF2ZV9hbGxvYywKKwkuc2xhdmVfY29uZmlndXJlID0gYmZhZF9pbV9zbGF2ZV9jb25maWd1cmUsCisJLnNsYXZlX2Rlc3Ryb3kgPSBiZmFkX2ltX3NsYXZlX2Rlc3Ryb3ksCisKKwkudGhpc19pZCA9IC0xLAorCS5zZ190YWJsZXNpemUgPSBCRkFEX0lPX01BWF9TR0UsCisJLmNtZF9wZXJfbHVuID0gMywKKwkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKKwkuc2hvc3RfYXR0cnMgPSBiZmFkX2ltX2hvc3RfYXR0cnMsCisJLm1heF9zZWN0b3JzID0gMHhGRkZGLAorfTsKKworc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBiZmFkX2ltX3Zwb3J0X3RlbXBsYXRlID0geworCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9IEJGQURfRFJJVkVSX05BTUUsCisJLmluZm8gPSBiZmFkX2ltX2luZm8sCisJLnF1ZXVlY29tbWFuZCA9IGJmYWRfaW1fcXVldWVjb21tYW5kLAorCS5laF9hYm9ydF9oYW5kbGVyID0gYmZhZF9pbV9hYm9ydF9oYW5kbGVyLAorCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IGJmYWRfaW1fcmVzZXRfbHVuX2hhbmRsZXIsCisJLmVoX2J1c19yZXNldF9oYW5kbGVyID0gYmZhZF9pbV9yZXNldF9idXNfaGFuZGxlciwKKworCS5zbGF2ZV9hbGxvYyA9IGJmYWRfaW1fc2xhdmVfYWxsb2MsCisJLnNsYXZlX2NvbmZpZ3VyZSA9IGJmYWRfaW1fc2xhdmVfY29uZmlndXJlLAorCS5zbGF2ZV9kZXN0cm95ID0gYmZhZF9pbV9zbGF2ZV9kZXN0cm95LAorCisJLnRoaXNfaWQgPSAtMSwKKwkuc2dfdGFibGVzaXplID0gQkZBRF9JT19NQVhfU0dFLAorCS5jbWRfcGVyX2x1biA9IDMsCisJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCisJLnNob3N0X2F0dHJzID0gYmZhZF9pbV92cG9ydF9hdHRycywKKwkubWF4X3NlY3RvcnMgPSAweEZGRkYsCit9OworCit2b2lkCitiZmFkX2ltX3Byb2JlX3Bvc3Qoc3RydWN0IGJmYWRfaW1fcyAqaW0pCit7CisJZmx1c2hfd29ya3F1ZXVlKGltLT5kcnZfd29ya3EpOworfQorCitiZmFfc3RhdHVzX3QKK2JmYWRfaW1fbW9kdWxlX2luaXQodm9pZCkKK3sKKwliZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlID0KKwkJZmNfYXR0YWNoX3RyYW5zcG9ydCgmYmZhZF9pbV9mY19mdW5jdGlvbl90ZW1wbGF0ZSk7CisJaWYgKCFiZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FTk9NRU07CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwordm9pZAorYmZhZF9pbV9tb2R1bGVfZXhpdCh2b2lkKQoreworCWlmIChiZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlKQorCQlmY19yZWxlYXNlX3RyYW5zcG9ydChiZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlKTsKK30KKwordm9pZAorYmZhZF9vc19pdG5pbV9wcm9jZXNzKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2RydikKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9zICAgICAgKmltID0gaXRuaW1fZHJ2LT5pbTsKKworCWlmIChpdG5pbV9kcnYtPnF1ZXVlX3dvcmspCisJCXF1ZXVlX3dvcmsoaW0tPmRydl93b3JrcSwgJml0bmltX2Rydi0+aXRuaW1fd29yayk7Cit9CisKK3ZvaWQKK2JmYWRfb3NfcmFtcF91cF9xZGVwdGgoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnRtcF9zZGV2OworCisJaWYgKCgoamlmZmllcyAtIGl0bmltLT5sYXN0X3JhbXBfdXBfdGltZSkgPgorCQlCRkFfUVVFVUVfRlVMTF9SQU1QX1VQX1RJTUUgKiBIWikgJiYKKwkJKChqaWZmaWVzIC0gaXRuaW0tPmxhc3RfcXVldWVfZnVsbF90aW1lKSA+CisJCUJGQV9RVUVVRV9GVUxMX1JBTVBfVVBfVElNRSAqIEhaKSkgeworCQlzaG9zdF9mb3JfZWFjaF9kZXZpY2UodG1wX3NkZXYsIHNkZXYtPmhvc3QpIHsKKwkJCWlmIChiZmFfbHVuX3F1ZXVlX2RlcHRoID4gdG1wX3NkZXYtPnF1ZXVlX2RlcHRoKSB7CisJCQkJaWYgKHRtcF9zZGV2LT5pZCAhPSBzZGV2LT5pZCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHRtcF9zZGV2LT5vcmRlcmVkX3RhZ3MpCisJCQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHRtcF9zZGV2LAorCQkJCQkJTVNHX09SREVSRURfVEFHLAorCQkJCQkJdG1wX3NkZXYtPnF1ZXVlX2RlcHRoICsgMSk7CisJCQkJZWxzZQorCQkJCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCh0bXBfc2RldiwKKwkJCQkJCU1TR19TSU1QTEVfVEFHLAorCQkJCQkJdG1wX3NkZXYtPnF1ZXVlX2RlcHRoICsgMSk7CisKKwkJCQlpdG5pbS0+bGFzdF9yYW1wX3VwX3RpbWUgPSBqaWZmaWVzOworCQkJfQorCQl9CisJfQorfQorCit2b2lkCitiZmFkX29zX2hhbmRsZV9xZnVsbChzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSwgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqdG1wX3NkZXY7CisKKwlpdG5pbS0+bGFzdF9xdWV1ZV9mdWxsX3RpbWUgPSBqaWZmaWVzOworCisJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHRtcF9zZGV2LCBzZGV2LT5ob3N0KSB7CisJCWlmICh0bXBfc2Rldi0+aWQgIT0gc2Rldi0+aWQpCisJCQljb250aW51ZTsKKwkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHRtcF9zZGV2LCB0bXBfc2Rldi0+cXVldWVfZGVwdGggLSAxKTsKKwl9Cit9CisKKworCisKK3N0cnVjdCBiZmFkX2l0bmltX3MgKgorYmZhZF9vc19nZXRfaXRuaW0oc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LCBpbnQgaWQpCit7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IE5VTEw7CisKKwkvKiBTZWFyY2ggdGhlIG1hcHBlZCBsaXN0IGZvciB0aGlzIHRhcmdldCBJRCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRuaW0sICZpbV9wb3J0LT5pdG5pbV9tYXBwZWRfbGlzdCwgbGlzdF9lbnRyeSkgeworCQlpZiAoaWQgPT0gaXRuaW0tPnNjc2lfdGd0X2lkKQorCQkJcmV0dXJuIGl0bmltOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIFNjc2lfSG9zdCB0ZW1wbGF0ZSBlbnRyeSBzbGF2ZV9hbGxvYworICovCitzdGF0aWMgaW50CitiZmFkX2ltX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzZGV2KSk7CisKKwlpZiAoIXJwb3J0IHx8IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCXNkZXYtPmhvc3RkYXRhID0gcnBvcnQtPmRkX2RhdGE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorYmZhZF9vc19mY19ob3N0X2luaXQoc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBpbV9wb3J0LT5zaG9zdDsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydCA9IGltX3BvcnQtPnBvcnQ7CisJdW5pb24gYXR0ciB7CisJCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIHBhdHRyOworCQlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCX0gYXR0cjsKKworCWZjX2hvc3Rfbm9kZV9uYW1lKGhvc3QpID0KKwkJYmZhX29zX2h0b25sbCgoYmZhX2Zjc19wb3J0X2dldF9ud3duKHBvcnQtPmZjc19wb3J0KSkpOworCWZjX2hvc3RfcG9ydF9uYW1lKGhvc3QpID0KKwkJYmZhX29zX2h0b25sbCgoYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQtPmZjc19wb3J0KSkpOworCisJZmNfaG9zdF9zdXBwb3J0ZWRfY2xhc3Nlcyhob3N0KSA9IEZDX0NPU19DTEFTUzM7CisKKwltZW1zZXQoZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KSwgMCwKKwkgICAgICAgc2l6ZW9mKGZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoaG9zdCkpKTsKKwlpZiAoYmZhZF9zdXBwb3J0ZWRfZmM0cyAmIChCRkFfUE9SVF9ST0xFX0ZDUF9JTSB8IEJGQV9QT1JUX1JPTEVfRkNQX1RNKSkKKwkJLyogRm9yIEZDUCB0eXBlIDB4MDggKi8KKwkJZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVsyXSA9IDE7CisJaWYgKGJmYWRfc3VwcG9ydGVkX2ZjNHMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKQorCQkvKiBGb3IgTExDL1NOQVAgdHlwZSAweDA1ICovCisJCWZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoaG9zdClbM10gPSAweDIwOworCS8qIEZvciBmaWJyZSBjaGFubmVsIHNlcnZpY2VzIHR5cGUgMHgyMCAqLworCWZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoaG9zdClbN10gPSAxOworCisJbWVtc2V0KCZhdHRyLmlvY19hdHRyLCAwLCBzaXplb2YoYXR0ci5pb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0ci5pb2NfYXR0cik7CisJc3ByaW50ZihmY19ob3N0X3N5bWJvbGljX25hbWUoaG9zdCksICJCcm9jYWRlICVzIEZWJXMgRFYlcyIsCisJCWF0dHIuaW9jX2F0dHIuYWRhcHRlcl9hdHRyLm1vZGVsLAorCQlhdHRyLmlvY19hdHRyLmFkYXB0ZXJfYXR0ci5md192ZXIsIEJGQURfRFJJVkVSX1ZFUlNJT04pOworCisJZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKGhvc3QpID0gMDsKKwlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgfD0KKwkJRkNfUE9SVFNQRUVEXzhHQklUIHwgRkNfUE9SVFNQRUVEXzRHQklUIHwgRkNfUE9SVFNQRUVEXzJHQklUIHwKKwkJRkNfUE9SVFNQRUVEXzFHQklUOworCisJbWVtc2V0KCZhdHRyLnBhdHRyLCAwLCBzaXplb2YoYXR0ci5wYXR0cikpOworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0ci5wYXR0cik7CisJZmNfaG9zdF9tYXhmcmFtZV9zaXplKGhvc3QpID0gYXR0ci5wYXR0ci5wcG9ydF9jZmcubWF4ZnJzaXplOworfQorCitzdGF0aWMgdm9pZAorYmZhZF9pbV9mY19ycG9ydF9hZGQoc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LCBzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgcnBvcnRfaWRzOworCXN0cnVjdCBmY19ycG9ydCAqZmNfcnBvcnQ7CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhOworCisJcnBvcnRfaWRzLm5vZGVfbmFtZSA9CisJCWJmYV9vc19odG9ubGwoYmZhX2Zjc19pdG5pbV9nZXRfbnd3bigmaXRuaW0tPmZjc19pdG5pbSkpOworCXJwb3J0X2lkcy5wb3J0X25hbWUgPQorCQliZmFfb3NfaHRvbmxsKGJmYV9mY3NfaXRuaW1fZ2V0X3B3d24oJml0bmltLT5mY3NfaXRuaW0pKTsKKwlycG9ydF9pZHMucG9ydF9pZCA9CisJCWJmYV9vc19odG9uM2IoYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSkpOworCXJwb3J0X2lkcy5yb2xlcyA9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTjsKKworCWl0bmltLT5mY19ycG9ydCA9IGZjX3Jwb3J0ID0KKwkJZmNfcmVtb3RlX3BvcnRfYWRkKGltX3BvcnQtPnNob3N0LCAwLCAmcnBvcnRfaWRzKTsKKworCWlmICghZmNfcnBvcnQpCisJCXJldHVybjsKKworCWZjX3Jwb3J0LT5tYXhmcmFtZV9zaXplID0KKwkJYmZhX2Zjc19pdG5pbV9nZXRfbWF4ZnJzaXplKCZpdG5pbS0+ZmNzX2l0bmltKTsKKwlmY19ycG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBiZmFfZmNzX2l0bmltX2dldF9jb3MoJml0bmltLT5mY3NfaXRuaW0pOworCisJaXRuaW1fZGF0YSA9IGZjX3Jwb3J0LT5kZF9kYXRhOworCWl0bmltX2RhdGEtPml0bmltID0gaXRuaW07CisKKwlycG9ydF9pZHMucm9sZXMgfD0gRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUOworCisJaWYgKHJwb3J0X2lkcy5yb2xlcyAhPSBGQ19SUE9SVF9ST0xFX1VOS05PV04pCisJCWZjX3JlbW90ZV9wb3J0X3JvbGVjaGcoZmNfcnBvcnQsIHJwb3J0X2lkcy5yb2xlcyk7CisKKwlpZiAoKGZjX3Jwb3J0LT5zY3NpX3RhcmdldF9pZCAhPSAtMSkKKwkgICAgJiYgKGZjX3Jwb3J0LT5zY3NpX3RhcmdldF9pZCA8IE1BWF9GQ1BfVEFSR0VUKSkKKwkJaXRuaW0tPnNjc2lfdGd0X2lkID0gZmNfcnBvcnQtPnNjc2lfdGFyZ2V0X2lkOworCisJcmV0dXJuOworfQorCisvKioKKyAqIFdvcmsgcXVldWUgaGFuZGxlciB1c2luZyBGQyB0cmFuc3BvcnQgc2VydmljZQorKiBDb250ZXh0OiBrZXJuZWwKKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1faXRuaW1fd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZmFkX2l0bmltX3MsCisJCQkJCQkJaXRuaW1fd29yayk7CisJc3RydWN0IGJmYWRfaW1fcyAgICAgICppbSA9IGl0bmltLT5pbTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbS0+YmZhZDsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCXN0cnVjdCBmY19ycG9ydCAqZmNfcnBvcnQ7CisJd3duX3Qgd3dwbjsKKwl1MzIgZmNpZDsKKwljaGFyIHd3cG5fc3RyWzMyXSwgZmNpZF9zdHJbMTZdOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWltX3BvcnQgPSBpdG5pbS0+aW1fcG9ydDsKKwliZmFfdHJjKGJmYWQsIGl0bmltLT5zdGF0ZSk7CisJc3dpdGNoIChpdG5pbS0+c3RhdGUpIHsKKwljYXNlIElUTklNX1NUQVRFX09OTElORToKKwkJaWYgKCFpdG5pbS0+ZmNfcnBvcnQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQkJYmZhZF9pbV9mY19ycG9ydF9hZGQoaW1fcG9ydCwgaXRuaW0pOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQkJd3dwbiA9IGJmYV9mY3NfaXRuaW1fZ2V0X3B3d24oJml0bmltLT5mY3NfaXRuaW0pOworCQkJZmNpZCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoJml0bmltLT5mY3NfaXRuaW0pOworCQkJd3duMnN0cih3d3BuX3N0ciwgd3dwbik7CisJCQlmY2lkMnN0cihmY2lkX3N0ciwgZmNpZCk7CisJCQlsaXN0X2FkZF90YWlsKCZpdG5pbS0+bGlzdF9lbnRyeSwKKwkJCQkmaW1fcG9ydC0+aXRuaW1fbWFwcGVkX2xpc3QpOworCQkJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfSVROSU1fT05MSU5FLAorCQkJCWltX3BvcnQtPnNob3N0LT5ob3N0X25vLAorCQkJCWl0bmltLT5zY3NpX3RndF9pZCwKKwkJCQlmY2lkX3N0ciwgd3dwbl9zdHIpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSIlczogaXRuaW0gJWxseCBpcyBhbHJlYWR5IGluIG9ubGluZSBzdGF0ZVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sCisJCQkJYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSkpOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBJVE5JTV9TVEFURV9PRkZMSU5FX1BFTkRJTkc6CisJCWl0bmltLT5zdGF0ZSA9IElUTklNX1NUQVRFX09GRkxJTkU7CisJCWlmIChpdG5pbS0+ZmNfcnBvcnQpIHsKKwkJCWZjX3Jwb3J0ID0gaXRuaW0tPmZjX3Jwb3J0OworCQkJKChzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKikKKwkJCQlmY19ycG9ydC0+ZGRfZGF0YSktPml0bmltID0gTlVMTDsKKwkJCWl0bmltLT5mY19ycG9ydCA9IE5VTEw7CisJCQlpZiAoIShpbV9wb3J0LT5wb3J0LT5mbGFncyAmIEJGQURfUE9SVF9ERUxFVEUpKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQkJZmNfcnBvcnQtPmRldl9sb3NzX3RtbyA9CisJCQkJCWJmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoJmJmYWQtPmJmYSkgKyAxOworCQkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShmY19ycG9ydCk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQkJfQorCQkJd3dwbiA9IGJmYV9mY3NfaXRuaW1fZ2V0X3B3d24oJml0bmltLT5mY3NfaXRuaW0pOworCQkJZmNpZCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoJml0bmltLT5mY3NfaXRuaW0pOworCQkJd3duMnN0cih3d3BuX3N0ciwgd3dwbik7CisJCQlmY2lkMnN0cihmY2lkX3N0ciwgZmNpZCk7CisJCQlsaXN0X2RlbCgmaXRuaW0tPmxpc3RfZW50cnkpOworCQkJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfSVROSU1fT0ZGTElORSwKKwkJCQlpbV9wb3J0LT5zaG9zdC0+aG9zdF9ubywKKwkJCQlpdG5pbS0+c2NzaV90Z3RfaWQsCisJCQkJZmNpZF9zdHIsIHd3cG5fc3RyKTsKKwkJfQorCQlicmVhazsKKwljYXNlIElUTklNX1NUQVRFX0ZSRUU6CisJCWlmIChpdG5pbS0+ZmNfcnBvcnQpIHsKKwkJCWZjX3Jwb3J0ID0gaXRuaW0tPmZjX3Jwb3J0OworCQkJKChzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKikKKwkJCQlmY19ycG9ydC0+ZGRfZGF0YSktPml0bmltID0gTlVMTDsKKwkJCWl0bmltLT5mY19ycG9ydCA9IE5VTEw7CisJCQlpZiAoIShpbV9wb3J0LT5wb3J0LT5mbGFncyAmIEJGQURfUE9SVF9ERUxFVEUpKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQkJZmNfcnBvcnQtPmRldl9sb3NzX3RtbyA9CisJCQkJCWJmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoJmJmYWQtPmJmYSkgKyAxOworCQkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShmY19ycG9ydCk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQkJfQorCQkJbGlzdF9kZWwoJml0bmltLT5saXN0X2VudHJ5KTsKKwkJfQorCisJCWtmcmVlKGl0bmltKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogU2NzaV9Ib3N0IHRlbXBsYXRlIGVudHJ5LCBxdWV1ZSBhIFNDU0kgY29tbWFuZCB0byB0aGUgQkZBRC4KKyAqLworc3RhdGljIGludAorYmZhZF9pbV9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21uZCwgdm9pZCAoKmRvbmUpIChzdHJ1Y3Qgc2NzaV9jbW5kICopKQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgY21uZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqaXRuaW1fZGF0YSA9IGNtbmQtPmRldmljZS0+aG9zdGRhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbTsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaGFsX2lvOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlpbnQgICAgICAgICAgICAgcmM7CisJczE2ICAgICAgICBzZ19jbnQgPSAwOworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KGNtbmQtPmRldmljZSkpOworCisJcmMgPSBmY19yZW1vdGVfcG9ydF9jaGtyZWFkeShycG9ydCk7CisJaWYgKHJjKSB7CisJCWNtbmQtPnJlc3VsdCA9IHJjOworCQlkb25lKGNtbmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZ19jbnQgPSBzY3NpX2RtYV9tYXAoY21uZCk7CisKKwlpZiAoc2dfY250IDwgMCkKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisKKwljbW5kLT5zY3NpX2RvbmUgPSBkb25lOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlmICghKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX0hBTF9TVEFSVF9ET05FKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiYmZhZCVkLCBxdWV1ZWNvbW1hbmQgJXAgJXggZmFpbGVkLCBCRkEgc3RvcHBlZFxuIiwKKwkJICAgICAgIGJmYWQtPmluc3Rfbm8sIGNtbmQsIGNtbmQtPmNtbmRbMF0pOworCQljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9OT19DT05ORUNULCAwKTsKKwkJZ290byBvdXRfZmFpbF9jbWQ7CisJfQorCisJaXRuaW0gPSBpdG5pbV9kYXRhLT5pdG5pbTsKKwlpZiAoIWl0bmltKSB7CisJCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX0lNTV9SRVRSWSwgMCk7CisJCWdvdG8gb3V0X2ZhaWxfY21kOworCX0KKworCWhhbF9pbyA9IGJmYV9pb2ltX2FsbG9jKCZiZmFkLT5iZmEsIChzdHJ1Y3QgYmZhZF9pb2ltX3MgKikgY21uZCwKKwkJCQkgICAgaXRuaW0tPmJmYV9pdG5pbSwgc2dfY250KTsKKwlpZiAoIWhhbF9pbykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJoYWxfaW8gZmFpbHVyZVxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlzY3NpX2RtYV91bm1hcChjbW5kKTsKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJfQorCisJY21uZC0+aG9zdF9zY3JpYmJsZSA9IChjaGFyICopaGFsX2lvOworCWJmYV90cmNfZnAoYmZhZCwgaGFsX2lvLT5pb3RhZyk7CisJYmZhX2lvaW1fc3RhcnQoaGFsX2lvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworCitvdXRfZmFpbF9jbWQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJc2NzaV9kbWFfdW5tYXAoY21uZCk7CisJaWYgKGRvbmUpCisJCWRvbmUoY21uZCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorYmZhZF9vc19ycG9ydF9vbmxpbmVfd2FpdChzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCBpOworCWludCBycG9ydF9kZWxheSA9IDEwOworCisJZm9yIChpID0gMDsgIShiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9QT1JUX09OTElORSkKKwkJICYmIGkgPCBiZmFfbGlua3VwX2RlbGF5OyBpKyspCisJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKEhaKTsKKworCWlmIChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9QT1JUX09OTElORSkgeworCQlycG9ydF9kZWxheSA9IHJwb3J0X2RlbGF5IDwgYmZhX2xpbmt1cF9kZWxheSA/CisJCQkJIHJwb3J0X2RlbGF5IDogYmZhX2xpbmt1cF9kZWxheTsKKwkJZm9yIChpID0gMDsgIShiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9SUE9SVF9PTkxJTkUpCisJCQkgJiYgaSA8IHJwb3J0X2RlbGF5OyBpKyspCisJCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWik7CisKKwkJaWYgKHJwb3J0X2RlbGF5ID4gMCAmJiAoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfUlBPUlRfT05MSU5FKSkKKwkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHJwb3J0X2RlbGF5ICogSFopOworCX0KK30KKworaW50CitiZmFkX29zX2dldF9saW5rdXBfZGVsYXkoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKworCXU4ICAgICAgICAgbnd3bnMgPSAwOworCXd3bl90ICAgICAgICAgICAqd3duczsKKwlpbnQgICAgICAgICAgICAgbGRlbGF5OworCisJLyoKKwkgKiBRdWVyeWluZyBmb3IgdGhlIGJvb3QgdGFyZ2V0IHBvcnQgd3ducworCSAqIC0tIHJlYWQgZnJvbSBib290IGluZm9ybWF0aW9uIGluIGZsYXNoLgorCSAqIElmIG53d25zID4gMCA9PiBib290IG92ZXIgU0FOIGFuZCBzZXQgYmZhX2xpbmt1cF9kZWxheSA9IDMwCisJICogZWxzZSA9PiBsb2NhbCBib290IG1hY2hpbmUgc2V0IGJmYV9saW5rdXBfZGVsYXkgPSAxMAorCSAqLworCisJYmZhX2lvY2ZjX2dldF9ib290d3ducygmYmZhZC0+YmZhLCAmbnd3bnMsICZ3d25zKTsKKworCWlmIChud3ducyA+IDApIHsKKwkJLyogSWYgYm9vdCBvdmVyIFNBTjsgbGlua3VwX2RlbGF5ID0gMzBzZWMgKi8KKwkJbGRlbGF5ID0gMzA7CisJfSBlbHNlIHsKKwkJLyogSWYgbG9jYWwgYm9vdDsgbGlua3VwX2RlbGF5ID0gMTBzZWMgKi8KKwkJbGRlbGF5ID0gMDsKKwl9CisKKwlyZXR1cm4gbGRlbGF5OworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5YTViMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFEX0lNX0hfXworI2RlZmluZSBfX0JGQURfSU1fSF9fCisKKyNpbmNsdWRlICJmY3MvYmZhX2Zjc19mY3BpbS5oIgorI2luY2x1ZGUgImJmYWRfaW1fY29tcGF0LmgiCisKKyNkZWZpbmUgRkNQSV9OQU1FICIgZmNwaW0iCisKK3ZvaWQgYmZhZF9mbGFnc19zZXQoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTMyIGZsYWdzKTsKK2JmYV9zdGF0dXNfdCBiZmFkX2ltX21vZHVsZV9pbml0KHZvaWQpOwordm9pZCBiZmFkX2ltX21vZHVsZV9leGl0KHZvaWQpOworYmZhX3N0YXR1c190IGJmYWRfaW1fcHJvYmUoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkIGJmYWRfaW1fcHJvYmVfdW5kbyhzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgYmZhZF9pbV9wcm9iZV9wb3N0KHN0cnVjdCBiZmFkX2ltX3MgKmltKTsKK2JmYV9zdGF0dXNfdCBiZmFkX2ltX3BvcnRfbmV3KHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYWRfaW1fcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhZF9pbV9wb3J0X29ubGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFkX2ltX3BvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFkX2ltX3BvcnRfY2xlYW4oc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KTsKK2ludCAgYmZhZF9pbV9zY3NpX2hvc3RfYWxsb2Moc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCQlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpOwordm9pZCBiZmFkX2ltX3Njc2lfaG9zdF9mcmVlKHN0cnVjdCBiZmFkX3MgKmJmYWQsCisJCQkJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KTsKKworI2RlZmluZSBNQVhfRkNQX1RBUkdFVCAxMDI0CisjZGVmaW5lIE1BWF9GQ1BfTFVOIDE2Mzg0CisjZGVmaW5lIEJGQURfVEFSR0VUX1JFU0VUX1RNTyA2MAorI2RlZmluZSBCRkFEX0xVTl9SRVNFVF9UTU8gNjAKKyNkZWZpbmUgU2NzaVJlc3VsdChob3N0X2NvZGUsIHNjc2lfY29kZSkgKCgoaG9zdF9jb2RlKSA8PCAxNikgfCBzY3NpX2NvZGUpCisjZGVmaW5lIEJGQV9RVUVVRV9GVUxMX1JBTVBfVVBfVElNRSAxMjAKKyNkZWZpbmUgQkZBRF9LT0JKX05BTUVfTEVOIDIwCisKKy8qCisgKiBpdG5pbSBmbGFncworICovCisjZGVmaW5lIElUTklNX01BUFBFRAkJMHgwMDAwMDAwMQorCisjZGVmaW5lIFNDU0lfVEFTS19NR01UCQkweDAwMDAwMDAxCisjZGVmaW5lIElPX0RPTkVfQklUCQkJMAorCitzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgeworCXN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltOworfTsKKworc3RydWN0IGJmYWRfaW1fcG9ydF9zIHsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQ7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0OworCXN0cnVjdCB3b3JrX3N0cnVjdCBwb3J0X2RlbGV0ZV93b3JrOworCWludCAgICAgICAgICAgICBpZHJfaWQ7CisJdTE2ICAgICAgICBjdXJfc2NzaV9pZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJpbmRpbmdfbGlzdDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGl0bmltX21hcHBlZF9saXN0OworfTsKKworZW51bSBiZmFkX2l0bmltX3N0YXRlIHsKKwlJVE5JTV9TVEFURV9OT05FLAorCUlUTklNX1NUQVRFX09OTElORSwKKwlJVE5JTV9TVEFURV9PRkZMSU5FX1BFTkRJTkcsCisJSVROSU1fU1RBVEVfT0ZGTElORSwKKwlJVE5JTV9TVEFURV9USU1FT1VULAorCUlUTklNX1NUQVRFX0ZSRUUsCit9OworCisvKgorICogUGVyIGl0bmltIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX2l0bmltX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTsKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zIGZjc19pdG5pbTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXRuaW1fd29yazsKKwl1MzIgICAgICAgIGZsYWdzOworCWVudW0gYmZhZF9pdG5pbV9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3QgYmZhZF9pbV9zICppbTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CisJc3RydWN0IGJmYWRfcnBvcnRfcyAqZHJ2X3Jwb3J0OworCXN0cnVjdCBmY19ycG9ydCAqZmNfcnBvcnQ7CisJc3RydWN0IGJmYV9pdG5pbV9zICpiZmFfaXRuaW07CisJdTE2ICAgICAgICBzY3NpX3RndF9pZDsKKwl1MTYgICAgICAgIHF1ZXVlX3dvcms7CisJdW5zaWduZWQgbG9uZwlsYXN0X3JhbXBfdXBfdGltZTsKKwl1bnNpZ25lZCBsb25nCWxhc3RfcXVldWVfZnVsbF90aW1lOworfTsKKworZW51bSBiZmFkX2JpbmRpbmdfdHlwZSB7CisJRkNQX1BXV05fQklORElORyA9IDB4MSwKKwlGQ1BfTldXTl9CSU5ESU5HID0gMHgyLAorCUZDUF9GQ0lEX0JJTkRJTkcgPSAweDMsCit9OworCitzdHJ1Y3QgYmZhZF9mY3BfYmluZGluZyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5OworCWVudW0gYmZhZF9iaW5kaW5nX3R5cGUgYmluZGluZ190eXBlOworCXUxNiAgICAgICAgc2NzaV90YXJnZXRfaWQ7CisJdTMyICAgICAgICBmY19pZDsKKwl3d25fdCAgICAgICAgICAgbnd3bjsKKwl3d25fdCAgICAgICAgICAgcHd3bjsKK307CisKK3N0cnVjdCBiZmFkX2ltX3MgeworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJ2X3dvcmtxOworCWNoYXIgICBkcnZfd29ya3FfbmFtZVtCRkFEX0tPQkpfTkFNRV9MRU5dOworfTsKKworc3RydWN0IFNjc2lfSG9zdCAqYmZhZF9vc19zY3NpX2hvc3RfYWxsb2Moc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LAorCQkJCXN0cnVjdCBiZmFkX3MgKik7CitiZmFfc3RhdHVzX3QgYmZhZF9vc190aHJlYWRfd29ya3Eoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkIGJmYWRfb3NfZGVzdHJveV93b3JrcShzdHJ1Y3QgYmZhZF9pbV9zICppbSk7Cit2b2lkIGJmYWRfb3NfaXRuaW1fcHJvY2VzcyhzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbV9kcnYpOwordm9pZCBiZmFkX29zX2ZjX2hvc3RfaW5pdChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpOwordm9pZCBiZmFkX29zX2luaXRfd29yayhzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpOwordm9pZCBiZmFkX29zX3Njc2lfaG9zdF9mcmVlKHN0cnVjdCBiZmFkX3MgKmJmYWQsCisJCQkJIHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Cit2b2lkIGJmYWRfb3NfcmFtcF91cF9xZGVwdGgoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0sCisJCQkJIHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7Cit2b2lkIGJmYWRfb3NfaGFuZGxlX3FmdWxsKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOworc3RydWN0IGJmYWRfaXRuaW1fcyAqYmZhZF9vc19nZXRfaXRuaW0oc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LCBpbnQgaWQpOworaW50IGJmYWRfb3Nfc2NzaV9hZGRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LCBzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKKworLyoKKyAqIHNjc2lfaG9zdF90ZW1wbGF0ZSBlbnRyaWVzCisgKi8KK3ZvaWQgYmZhZF9pbV9pdG5pbV91bm1hcChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgICppbV9wb3J0LAorCQkJIHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltKTsKKworZXh0ZXJuIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYmZhZF9pbV9zY3NpX2hvc3RfdGVtcGxhdGU7CitleHRlcm4gc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBiZmFkX2ltX3Zwb3J0X3RlbXBsYXRlOworZXh0ZXJuIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBiZmFkX2ltX2ZjX2Z1bmN0aW9uX3RlbXBsYXRlOworZXh0ZXJuIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqYmZhZF9pbV9zY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW1fY29tcGF0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW1fY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzZTc0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbV9jb21wYXQuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFEX0lNX0NPTVBBVF9IX18KKyNkZWZpbmUgX19CRkFEX0lNX0NPTVBBVF9IX18KKworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2J1ZjsKK2V4dGVybiB1MzIgYmZpX2ltYWdlX3NpemU7CisKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYmZhZF9pbV9ob3N0X2F0dHJzW107CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmJmYWRfaW1fdnBvcnRfYXR0cnNbXTsKKwordTMyICpiZmFkX2dldF9maXJtd2FyZV9idWYoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwordTMyICpiZmFkX3JlYWRfZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiAqKmJmaV9pbWFnZSwKKwkJCXUzMiAqYmZpX2ltYWdlX3NpemUsIGNoYXIgKmZ3X25hbWUpOworCitzdGF0aWMgaW5saW5lIHUzMiAqCitiZmFkX2xvYWRfZndpbWcoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcmV0dXJuKGJmYWRfZ2V0X2Zpcm13YXJlX2J1ZihwZGV2KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhZF9mcmVlX2Z3aW1nKHZvaWQpCit7CisJaWYgKGJmaV9pbWFnZV9jdF9zaXplICYmIGJmaV9pbWFnZV9jdCkKKwkJdmZyZWUoYmZpX2ltYWdlX2N0KTsKKwlpZiAoYmZpX2ltYWdlX2NiX3NpemUgJiYgYmZpX2ltYWdlX2NiKQorCQl2ZnJlZShiZmlfaW1hZ2VfY2IpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbnRyLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW50ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMDRlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW50ci5jCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgorI2luY2x1ZGUgImJmYWRfdHJjbW9kLmgiCisKK0JGQV9UUkNfRklMRShMRFJWLCBJTlRSKTsKKworLyoqCisgKiAgYmZhX2lzciBCRkEgZHJpdmVyIGludGVycnVwdCBmdW5jdGlvbnMKKyAqLworaXJxcmV0dXJuX3QgYmZhZF9pbnR4KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgaW50IG1zaXhfZGlzYWJsZTsKK21vZHVsZV9wYXJhbShtc2l4X2Rpc2FibGUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworLyoqCisgKiBMaW5lIGJhc2VkIGludGVycnVwdCBoYW5kbGVyLgorICovCitpcnFyZXR1cm5fdAorYmZhZF9pbnR4KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBkZXZfaWQ7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIGRvbmVxOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwliZmFfYm9vbGVhbl90IHJjOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXJjID0gYmZhX2ludHgoJmJmYWQtPmJmYSk7CisJaWYgKCFyYykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWJmYV9jb21wX2RlcSgmYmZhZC0+YmZhLCAmZG9uZXEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaWYgKCFsaXN0X2VtcHR5KCZkb25lcSkpIHsKKwkJYmZhX2NvbXBfcHJvY2VzcygmYmZhZC0+YmZhLCAmZG9uZXEpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJYmZhX2NvbXBfZnJlZSgmYmZhZC0+YmZhLCAmZG9uZXEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJYmZhX3RyY19mcChiZmFkLCBpcnEpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKKworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2JmYWRfbXNpeChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGJmYWRfbXNpeF9zICp2ZWMgPSBkZXZfaWQ7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IHZlYy0+YmZhZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRvbmVxOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWJmYV9tc2l4KCZiZmFkLT5iZmEsIHZlYy0+bXNpeC5lbnRyeSk7CisJYmZhX2NvbXBfZGVxKCZiZmFkLT5iZmEsICZkb25lcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRvbmVxKSkgeworCQliZmFfY29tcF9wcm9jZXNzKCZiZmFkLT5iZmEsICZkb25lcSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfY29tcF9mcmVlKCZiZmFkLT5iZmEsICZkb25lcSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBNU0lYIGVudHJ5IHRhYmxlLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbml0X21zaXhfZW50cnkoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IG1zaXhfZW50cnkgKm1zaXhfZW50cmllcywKKwkJCSBpbnQgbWFzaywgaW50IG1heF9iaXQpCit7CisJaW50ICAgICAgICAgICAgIGk7CisJaW50ICAgICAgICAgICAgIG1hdGNoID0gMHgwMDAwMDAwMTsKKworCWZvciAoaSA9IDAsIGJmYWQtPm52ZWMgPSAwOyBpIDwgTUFYX01TSVhfRU5UUlk7IGkrKykgeworCQlpZiAobWFzayAmIG1hdGNoKSB7CisJCQliZmFkLT5tc2l4X3RhYltiZmFkLT5udmVjXS5tc2l4LmVudHJ5ID0gaTsKKwkJCWJmYWQtPm1zaXhfdGFiW2JmYWQtPm52ZWNdLmJmYWQgPSBiZmFkOworCQkJbXNpeF9lbnRyaWVzW2JmYWQtPm52ZWNdLmVudHJ5ID0gaTsKKwkJCWJmYWQtPm52ZWMrKzsKKwkJfQorCisJCW1hdGNoIDw8PSAxOworCX0KKworfQorCitpbnQKK2JmYWRfaW5zdGFsbF9tc2l4X2hhbmRsZXIoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpbnQgICAgICAgICAgICAgaSwgZXJyb3IgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGJmYWQtPm52ZWM7IGkrKykgeworCQllcnJvciA9IHJlcXVlc3RfaXJxKGJmYWQtPm1zaXhfdGFiW2ldLm1zaXgudmVjdG9yLAorCQkJCSAgICAoaXJxX2hhbmRsZXJfdCkgYmZhZF9tc2l4LCAwLAorCQkJCSAgICBCRkFEX0RSSVZFUl9OQU1FLCAmYmZhZC0+bXNpeF90YWJbaV0pOworCQliZmFfdHJjKGJmYWQsIGkpOworCQliZmFfdHJjKGJmYWQsIGJmYWQtPm1zaXhfdGFiW2ldLm1zaXgudmVjdG9yKTsKKwkJaWYgKGVycm9yKSB7CisJCQlpbnQgICAgICAgICAgICAgajsKKworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJCQlmcmVlX2lycShiZmFkLT5tc2l4X3RhYltqXS5tc2l4LnZlY3RvciwKKwkJCQkJCSZiZmFkLT5tc2l4X3RhYltqXSk7CisKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogU2V0dXAgTVNJWCBiYXNlZCBpbnRlcnJ1cHQuCisgKi8KK2ludAorYmZhZF9zZXR1cF9pbnRyKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaW50IGVycm9yID0gMDsKKwl1MzIgbWFzayA9IDAsIGksIG51bV9iaXQgPSAwLCBtYXhfYml0ID0gMDsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4X2VudHJpZXNbTUFYX01TSVhfRU5UUlldOworCisJLyogQ2FsbCBCRkEgdG8gZ2V0IHRoZSBtc2l4IG1hcCBmb3IgdGhpcyBQQ0kgZnVuY3Rpb24uICAqLworCWJmYV9tc2l4X2dldHZlY3MoJmJmYWQtPmJmYSwgJm1hc2ssICZudW1fYml0LCAmbWF4X2JpdCk7CisKKwkvKiBTZXQgdXAgdGhlIG1zaXggZW50cnkgdGFibGUgKi8KKwliZmFkX2luaXRfbXNpeF9lbnRyeShiZmFkLCBtc2l4X2VudHJpZXMsIG1hc2ssIG1heF9iaXQpOworCisJaWYgKCFtc2l4X2Rpc2FibGUpIHsKKwkJZXJyb3IgPSBwY2lfZW5hYmxlX21zaXgoYmZhZC0+cGNpZGV2LCBtc2l4X2VudHJpZXMsIGJmYWQtPm52ZWMpOworCQlpZiAoZXJyb3IpIHsKKwkJCS8qCisJCQkgKiBPbmx5IGVycm9yIG51bWJlciBvZiB2ZWN0b3IgaXMgYXZhaWxhYmxlLgorCQkJICogV2UgZG9uJ3QgaGF2ZSBhIG1lY2hhbmlzbSB0byBtYXAgbXVsdGlwbGUKKwkJCSAqIGludGVycnVwdHMgaW50byBvbmUgdmVjdG9yLCBzbyBldmVuIGlmIHdlCisJCQkgKiBjYW4gdHJ5IHRvIHJlcXVlc3QgbGVzcyB2ZWN0b3JzLCB3ZSBkb24ndAorCQkJICoga25vdyBob3cgdG8gYXNzb2NpYXRlIGludGVycnVwdCBldmVudHMgdG8KKwkJCSAqICB2ZWN0b3JzLiBMaW51eCBkb2Vzbid0IGR1cGljYXRlIHZlY3RvcnMKKwkJCSAqIGluIHRoZSBNU0lYIHRhYmxlIGZvciB0aGlzIGNhc2UuCisJCQkgKi8KKworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZCVkOiAiCisJCQkJInBjaV9lbmFibGVfbXNpeCBmYWlsZWQgKCVkKSwiCisJCQkJIiB1c2UgbGluZSBiYXNlZC5cbiIsIGJmYWQtPmluc3Rfbm8sIGVycm9yKTsKKworCQkJZ290byBsaW5lX2Jhc2VkOworCQl9CisKKwkJLyogU2F2ZSB0aGUgdmVjdG9ycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgYmZhZC0+bnZlYzsgaSsrKSB7CisJCQliZmFfdHJjKGJmYWQsIG1zaXhfZW50cmllc1tpXS52ZWN0b3IpOworCQkJYmZhZC0+bXNpeF90YWJbaV0ubXNpeC52ZWN0b3IgPSBtc2l4X2VudHJpZXNbaV0udmVjdG9yOworCQl9CisKKwkJYmZhX21zaXhfaW5pdCgmYmZhZC0+YmZhLCBiZmFkLT5udmVjKTsKKworCQliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfTVNJWF9PTjsKKworCQlyZXR1cm4gZXJyb3I7CisJfQorCitsaW5lX2Jhc2VkOgorCWVycm9yID0gMDsKKwlpZiAocmVxdWVzdF9pcnEKKwkgICAgKGJmYWQtPnBjaWRldi0+aXJxLCAoaXJxX2hhbmRsZXJfdCkgYmZhZF9pbnR4LCBCRkFEX0lSUV9GTEFHUywKKwkgICAgIEJGQURfRFJJVkVSX05BTUUsIGJmYWQpICE9IDApIHsKKwkJLyogRW5hYmxlIGludGVycnVwdCBoYW5kbGVyIGZhaWxlZCAqLworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQKK2JmYWRfcmVtb3ZlX2ludHIoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKworCWlmIChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9NU0lYX09OKSB7CisJCWZvciAoaSA9IDA7IGkgPCBiZmFkLT5udmVjOyBpKyspCisJCQlmcmVlX2lycShiZmFkLT5tc2l4X3RhYltpXS5tc2l4LnZlY3RvciwKKwkJCQkJJmJmYWQtPm1zaXhfdGFiW2ldKTsKKworCQlwY2lfZGlzYWJsZV9tc2l4KGJmYWQtPnBjaWRldik7CisJCWJmYWQtPmJmYWRfZmxhZ3MgJj0gfkJGQURfTVNJWF9PTjsKKwl9IGVsc2UgeworCQlmcmVlX2lycShiZmFkLT5wY2lkZXYtPmlycSwgYmZhZCk7CisJfQorfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pcGZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaXBmYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOGJjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaXBmYy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfRFJWX0lQRkNfSF9fCisjZGVmaW5lIF9fQkZBX0RSVl9JUEZDX0hfXworCisKKyNkZWZpbmUgSVBGQ19OQU1FICIiCisKKyNkZWZpbmUgYmZhZF9pcGZjX21vZHVsZV9pbml0KHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBiZmFkX2lwZmNfbW9kdWxlX2V4aXQoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfaXBmY19wcm9iZSh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3Byb2JlX3VuZG8oeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfaXBmY19wb3J0X2NvbmZpZyh4LCB5KSBCRkFfU1RBVFVTX09LCisjZGVmaW5lIGJmYWRfaXBmY19wb3J0X3VuY29uZmlnKHgsIHkpIGRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYWRfaXBmY19wcm9iZV9wb3N0KHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBiZmFkX2lwZmNfcG9ydF9uZXcoeCwgeSwgeikgQkZBX1NUQVRVU19PSworI2RlZmluZSBiZmFkX2lwZmNfcG9ydF9kZWxldGUoeCwgeSkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfaXBmY19wb3J0X29ubGluZSh4LCB5KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3BvcnRfb2ZmbGluZSh4LCB5KSBkbyB7fSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFkX2lwX2dldF9hdHRyKHgpIEJGQV9TVEFUVVNfRkFJTEVECisjZGVmaW5lIGJmYWRfaXBfcmVzZXRfZHJ2X3N0YXRzKHgpIEJGQV9TVEFUVVNfRkFJTEVECisjZGVmaW5lIGJmYWRfaXBfZ2V0X2Rydl9zdGF0cyh4LCB5KSBCRkFfU1RBVFVTX0ZBSUxFRAorI2RlZmluZSBiZmFkX2lwX2VuYWJsZV9pcGZjKHgsIHksIHopIEJGQV9TVEFUVVNfRkFJTEVECisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfb3MuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9vcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZjQ3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfb3MuYwpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYWRfb3MuYyBMaW51eCBkcml2ZXIgT1Mgc3BlY2lmaWMgY2FsbHMuCisgKi8KKworI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgorCit2b2lkCitiZmFfb3NfZ2V0dGltZW9mZGF5KHN0cnVjdCBiZmFfdGltZXZhbF9zICp0dikKK3sKKwlzdHJ1Y3QgdGltZXZhbCAgdG1wX3R2OworCisJZG9fZ2V0dGltZW9mZGF5KCZ0bXBfdHYpOworCXR2LT50dl9zZWMgPSAodTMyKSB0bXBfdHYudHZfc2VjOworCXR2LT50dl91c2VjID0gKHUzMikgdG1wX3R2LnR2X3VzZWM7Cit9CisKK3ZvaWQKK2JmYV9vc19wcmludGYoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQsCisJCQljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCSNkZWZpbmUgQkZBX1NUUklOR18yNTYJMjU2CisJY2hhciB0bXBbQkZBX1NUUklOR18yNTZdOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnNwcmludGYodG1wLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcHJpbnRrKHRtcCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX3RtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTAxYjFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX3RtLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhCQSBMaW51eCBUYXJnZXQgTW9kZSBEcml2ZXIKKyAqLworCisvKioKKyAqICB0bS9kdW1teS9iZmFkX3RtLmggQkZBIGNhbGxiYWNrIGR1bW15IGhlYWRlciBmaWxlIGZvciBCRkEgTGludXggdGFyZ2V0IG1vZGUgUENJIGludGVyZmFjZSBtb2R1bGUuCisgKi8KKworI2lmbmRlZiBfX0JGQURfVE1fSF9fCisjZGVmaW5lIF9fQkZBRF9UTV9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisKKyNkZWZpbmUgRkNQVF9OQU1FIAkJIiIKKworLyoKKyAqIENhbGxlZCBmcm9tIGJhc2UgTGludXggZHJpdmVyIG9uIChEZSlJbml0IGV2ZW50cworICovCisKKy8qIGF0dGFjaCB0Z3QgdGVtcGxhdGUgd2l0aCBzY3N0ICovCisjZGVmaW5lIGJmYWRfdG1fbW9kdWxlX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKKworLyogZGV0YWNoL3JlbGVhc2UgdGd0IHRlbXBsYXRlICovCisjZGVmaW5lIGJmYWRfdG1fbW9kdWxlX2V4aXQoKQlkbyB7fSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFkX3RtX3Byb2JlKHgpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBiZmFkX3RtX3Byb2JlX3VuZG8oeCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfdG1fcHJvYmVfcG9zdCh4KQlkbyB7fSB3aGlsZSAoMCkKKworLyoKKyAqIENhbGxlZCBieSBiYXNlIExpbnV4IGRyaXZlciBidXQgdHJpZ2dlcmVkIGJ5IEJGQSBGQ1Mgb24gY29uZmlnIGV2ZW50cworICovCisjZGVmaW5lIGJmYWRfdG1fcG9ydF9uZXcoeCwgeSkJCUJGQV9TVEFUVVNfT0sKKyNkZWZpbmUgYmZhZF90bV9wb3J0X2RlbGV0ZSh4LCB5KQlkbyB7fSB3aGlsZSAoMCkKKworLyoKKyAqIENhbGxlZCBieSBiYXNlIExpbnV4IGRyaXZlciBidXQgdHJpZ2dlcmVkIGJ5IEJGQSBGQ1Mgb24gUExPR0kvTyBldmVudHMKKyAqLworI2RlZmluZSBiZmFkX3RtX3BvcnRfb25saW5lKHgsIHkpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBiZmFkX3RtX3BvcnRfb2ZmbGluZSh4LCB5KQlkbyB7fSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfdHJjbW9kLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfdHJjbW9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyN2IyYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF90cmNtb2QuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYWRfdHJjbW9kLmggTGludXggZHJpdmVyIHRyYWNlIG1vZHVsZXMKKyAqLworCisKKyNpZm5kZWYgX19CRkFEX1RSQ01PRF9IX18KKyNkZWZpbmUgX19CRkFEX1RSQ01PRF9IX18KKworI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKworLyoKKyAqICEhISBPbmx5IGFwcGVuZCB0byB0aGUgZW51bXMgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGFueSB2ZXJzaW9uaW5nCisgKiAhISEgbmVlZGVkIGJldHdlZW4gdHJhY2UgdXRpbGl0eSBhbmQgZHJpdmVyIHZlcnNpb24KKyAqLworZW51bSB7CisJLyogMi42IERyaXZlciAqLworCUJGQV9UUkNfTERSVl9CRkFECQk9IDEsCisJQkZBX1RSQ19MRFJWX0JGQURfMl82CQk9IDIsCisJQkZBX1RSQ19MRFJWX0JGQURfMl82XzkJCT0gMywKKwlCRkFfVFJDX0xEUlZfQkZBRF8yXzZfMTAJPSA0LAorCUJGQV9UUkNfTERSVl9JTlRSCQk9IDUsCisJQkZBX1RSQ19MRFJWX0lPQ1RMCQk9IDYsCisJQkZBX1RSQ19MRFJWX09TCQkJPSA3LAorCUJGQV9UUkNfTERSVl9JTQkJCT0gOCwKKwlCRkFfVFJDX0xEUlZfSU1fMl82CQk9IDksCisJQkZBX1RSQ19MRFJWX0lNXzJfNl85CQk9IDEwLAorCUJGQV9UUkNfTERSVl9JTV8yXzZfMTAJCT0gMTEsCisJQkZBX1RSQ19MRFJWX1RNCQkJPSAxMiwKKwlCRkFfVFJDX0xEUlZfSVBGQwkJPSAxMywKKwlCRkFfVFJDX0xEUlZfSU1fMl80CQk9IDE0LAorCUJGQV9UUkNfTERSVl9JTV9WTVcJCT0gMTUsCisJQkZBX1RSQ19MRFJWX0lNX0xUXzJfNl8xMAk9IDE2LAorfTsKKworI2VuZGlmIC8qIF9fQkZBRF9UUkNNT0RfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZhYi5jIGIvZHJpdmVycy9zY3NpL2JmYS9mYWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTNhNGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mYWIuYwpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorCisvKioKKyAqICBmYWIuYyBwb3J0IGZhYiBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX3BvcnRfZmFiX3B1YmxpYyBwb3J0IGZhYiBwdWJsaWMgZnVuY3Rpb25zCisgKi8KKworLyoqCisgKiAgIENhbGxlZCBieSBwb3J0IHRvIGluaXRpYWxpemUgZmFicmljIHNlcnZpY2VzIG9mIHRoZSBiYXNlIHBvcnQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9mYWJfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX2Zjc19wb3J0X25zX2luaXQocG9ydCk7CisJYmZhX2Zjc19wb3J0X3Njbl9pbml0KHBvcnQpOworCWJmYV9mY3NfcG9ydF9tc19pbml0KHBvcnQpOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb25saW5lIHN0YXRlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfZmFiX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX2Zjc19wb3J0X25zX29ubGluZShwb3J0KTsKKwliZmFfZmNzX3BvcnRfc2NuX29ubGluZShwb3J0KTsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBwb3J0IHRvIG5vdGlmeSB0cmFuc2l0aW9uIHRvIG9mZmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9mYWJfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX2Zjc19wb3J0X25zX29mZmxpbmUocG9ydCk7CisJYmZhX2Zjc19wb3J0X3Njbl9vZmZsaW5lKHBvcnQpOworCWJmYV9mY3NfcG9ydF9tc19vZmZsaW5lKHBvcnQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mYWJyaWMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmFicmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiMTRjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmFicmljLmMKQEAgLTAsMCArMSwxMjc4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZhYnJpYy5jIEZhYnJpYyBtb2R1bGUgaW1wbGVtZW50YXRpb24uCisgKi8KKworI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJmY3NfYXV0aC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgImZjYnVpbGQuaCIKKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19mY3MuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9wb3J0Lmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorCitCRkFfVFJDX0ZJTEUoRkNTLCBGQUJSSUMpOworCisjZGVmaW5lIEJGQV9GQ1NfRkFCUklDX1JFVFJZX0RFTEFZCSgyMDAwKQkvKiBNaWxsaXNlY29uZHMgKi8KKyNkZWZpbmUgQkZBX0ZDU19GQUJSSUNfQ0xFQU5VUF9ERUxBWQkoMTAwMDApCS8qIE1pbGxpc2Vjb25kcyAqLworCisjZGVmaW5lIGJmYV9mY3NfZmFicmljX3NldF9vcGVydHlwZShfX2ZhYnJpYykgZG8geyAgICAgICAgICBcCisgICAgaWYgKGJmYV9wcG9ydF9nZXRfdG9wb2xvZ3koKF9fZmFicmljKS0+ZmNzLT5iZmEpICAgIFwKKwkJCQk9PSBCRkFfUFBPUlRfVE9QT0xPR1lfUDJQKSAgIFwKKwkgICAgKF9fZmFicmljKS0+b3Blcl90eXBlID0gQkZBX1BQT1JUX1RZUEVfTlBPUlQ7ICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgKF9fZmFicmljKS0+b3Blcl90eXBlID0gQkZBX1BQT1JUX1RZUEVfTkxQT1JUOyAgICAgIFwKK30gd2hpbGUgKDApCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19sb2dpbihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19ub3RpZnlfb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX25vdGlmeV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX2RlbGF5KHZvaWQgKmNiYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19kZWxldGUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfZGVsZXRlX2NvbXAodm9pZCAqY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3Byb2Nlc3NfdWYoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICBzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19wcm9jZXNzX2Zsb2dpKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqZmNocywgdTE2IGxlbik7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc2VuZF9mbG9naV9hY2Moc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfZmxvZ2lhY2NfY29tcCh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMsCisJCQkJCSAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BmY2hzKTsKKy8qKgorICogIGZjc19mYWJyaWNfc20gZmFicmljIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBGYWJyaWMgc3RhdGUgbWFjaGluZSBldmVudHMKKyAqLworZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCB7CisJQkZBX0ZDU19GQUJSSUNfU01fQ1JFQVRFID0gMSwJLyogIGZhYnJpYyBjcmVhdGUgZnJvbSBkcml2ZXIgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEUgPSAyLAkvKiAgZmFicmljIGRlbGV0ZSBmcm9tIGRyaXZlciAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTiA9IDMsCS8qICBsaW5rIGRvd24gZnJvbSBwb3J0ICovCisJQkZBX0ZDU19GQUJSSUNfU01fTElOS19VUCA9IDQsCS8qICBsaW5rIHVwIGZyb20gcG9ydCAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0NPTlRfT1AgPSA1LAkvKiAgY29udGludWUgb3AgZnJvbSBmbG9naS9hdXRoICovCisJQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1AgPSA2LAkvKiAgY29udGludWUgb3AgZnJvbSBmbG9naS9hdXRoICovCisJQkZBX0ZDU19GQUJSSUNfU01fTk9fRkFCUklDID0gNywJLyogIG5vIGZhYnJpYyBmcm9tIGZsb2dpL2F1dGgKKwkJCQkJCSAqLworCUJGQV9GQ1NfRkFCUklDX1NNX1BFUkZfRVZGUCA9IDgsCS8qICBwZXJmb3JtIEVWRlAgZnJvbQorCQkJCQkJICpmbG9naS9hdXRoICovCisJQkZBX0ZDU19GQUJSSUNfU01fSVNPTEFURSA9IDksCS8qICBpc29sYXRlIGZyb20gRVZGUCBwcm9jZXNzaW5nICovCisJQkZBX0ZDU19GQUJSSUNfU01fTk9fVEFHR0lORyA9IDEwLC8qICBubyBWRlQgdGFnZ2luZyBmcm9tIEVWRlAgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9ERUxBWUVEID0gMTEsCS8qICB0aW1lb3V0IGRlbGF5IGV2ZW50ICovCisJQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9GQUlMRUQgPSAxMiwJLyogIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfU1VDQ0VTUyA9IDEzLAkvKiAgYXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bAorCQkJCQkJICovCisJQkZBX0ZDU19GQUJSSUNfU01fREVMQ09NUCA9IDE0LAkvKiAgYWxsIHZwb3J0cyBkZWxldGVkIGV2ZW50ICovCisJQkZBX0ZDU19GQUJSSUNfU01fTE9PUEJBQ0sgPSAxNSwJLyogIFJlY2VpdmVkIG91ciBvd24gRkxPR0kgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9TVEFSVCA9IDE2LAkvKiAgZmFicmljIGRlbGV0ZSBmcm9tIGRyaXZlciAqLworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fY3JlYXRlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3NtX2Zsb2dpKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCWVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3NtX2Zsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSAgICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3NtX2F1dGgoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkgICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fbG9vcGJhY2soc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fbm9mYWJyaWMoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9ldmZwKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJICAgICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3NtX2V2ZnBfZG9uZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21faXNvbGF0ZWQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CisvKioKKyAqICAgQmVnaW5uaW5nIHN0YXRlIGJlZm9yZSBmYWJyaWMgY3JlYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQ1JFQVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fY3JlYXRlZCk7CisJCWJmYV9mY3NfZmFicmljX2luaXQoZmFicmljKTsKKwkJYmZhX2Zjc19scG9ydF9pbml0KCZmYWJyaWMtPmJwb3J0LCBmYWJyaWMtPmZjcywgRkNfVkZfSURfTlVMTCwKKwkJCQkgICAmZmFicmljLT5icG9ydC5wb3J0X2NmZywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgorCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEJlZ2lubmluZyBzdGF0ZSBiZWZvcmUgZmFicmljIGNyZWF0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fY3JlYXRlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fU1RBUlQ6CisJCWlmIChiZmFfcHBvcnRfaXNfbGlua3VwKGZhYnJpYy0+ZmNzLT5iZmEpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZmxvZ2kpOworCQkJYmZhX2Zjc19mYWJyaWNfbG9naW4oZmFicmljKTsKKwkJfSBlbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19VUDoKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX3VuaW5pdCk7CisJCWJmYV9mY3NfbW9kZXhpdF9jb21wKGZhYnJpYy0+ZmNzKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogICBMaW5rIGlzIGRvd24sIGF3YWl0aW5nIExJTksgVVAgZXZlbnQgZnJvbSBwb3J0LiBUaGlzIGlzIGFsc28gdGhlCisgKiAgIGZpcnN0IHN0YXRlIGF0IGZhYnJpYyBjcmVhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19VUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2Zsb2dpKTsKKwkJYmZhX2Zjc19mYWJyaWNfbG9naW4oZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX1JFVFJZX09QOgorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogICBGTE9HSSBpcyBpbiBwcm9ncmVzcywgYXdhaXRpbmcgRkxPR0kgcmVwbHkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9mbG9naShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0NPTlRfT1A6CisKKwkJYmZhX3Bwb3J0X3NldF90eF9iYmNyZWRpdChmYWJyaWMtPmZjcy0+YmZhLCBmYWJyaWMtPmJiX2NyZWRpdCk7CisJCWZhYnJpYy0+ZmFiX3R5cGUgPSBCRkFfRkNTX0ZBQlJJQ19TV0lUQ0hFRDsKKworCQlpZiAoZmFicmljLT5hdXRoX3JlcWQgJiYgZmFicmljLT5pc19hdXRoKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fYXV0aCk7CisJCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fb25saW5lKTsKKwkJCWJmYV9mY3NfZmFicmljX25vdGlmeV9vbmxpbmUoZmFicmljKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1A6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9mbG9naV9yZXRyeSk7CisJCWJmYV90aW1lcl9zdGFydChmYWJyaWMtPmZjcy0+YmZhLCAmZmFicmljLT5kZWxheV90aW1lciwKKwkJCQliZmFfZmNzX2ZhYnJpY19kZWxheSwgZmFicmljLAorCQkJCUJGQV9GQ1NfRkFCUklDX1JFVFJZX0RFTEFZKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xPT1BCQUNLOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbG9vcGJhY2spOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQliZmFfZmNzX2ZhYnJpY19zZXRfb3BlcnR5cGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX05PX0ZBQlJJQzoKKwkJZmFicmljLT5mYWJfdHlwZSA9IEJGQV9GQ1NfRkFCUklDX04yTjsKKwkJYmZhX3Bwb3J0X3NldF90eF9iYmNyZWRpdChmYWJyaWMtPmZjcy0+YmZhLCBmYWJyaWMtPmJiX2NyZWRpdCk7CisJCWJmYV9mY3NfZmFicmljX25vdGlmeV9vbmxpbmUoZmFicmljKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX25vZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKKwkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2RlbGV0aW5nKTsKKwkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYmZhX2Zjc19mYWJyaWNfZGVsZXRlKGZhYnJpYyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9mbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEFZRUQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9mbG9naSk7CisJCWJmYV9mY3NfZmFicmljX2xvZ2luKGZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJmYV90aW1lcl9zdG9wKCZmYWJyaWMtPmRlbGF5X3RpbWVyKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2RlbGV0aW5nKTsKKwkJYmZhX3RpbWVyX3N0b3AoJmZhYnJpYy0+ZGVsYXlfdGltZXIpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogICBBdXRoZW50aWNhdGlvbiBpcyBpbiBwcm9ncmVzcywgYXdhaXRpbmcgYXV0aGVudGljYXRpb24gcmVzdWx0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2F1dGgoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJICAgICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9BVVRIX0ZBSUxFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2F1dGhfZmFpbGVkKTsKKwkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfU1VDQ0VTUzoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX29ubGluZSk7CisJCWJmYV9mY3NfZmFicmljX25vdGlmeV9vbmxpbmUoZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX1BFUkZfRVZGUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2V2ZnApOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogICBBdXRoZW50aWNhdGlvbiBmYWlsZWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2F1dGhfZmFpbGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogICBQb3J0IGlzIGluIGxvb3BiYWNrIG1vZGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29mZmxpbmUoZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2RlbGV0aW5nKTsKKwkJYmZhX2Zjc19mYWJyaWNfZGVsZXRlKGZhYnJpYyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisvKioKKyAqICAgVGhlcmUgaXMgbm8gYXR0YWNoZWQgZmFicmljIC0gcHJpdmF0ZSBsb29wIG9yIE5Qb3J0LXRvLU5Qb3J0IHRvcG9sb2d5LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fbm9mYWJyaWMoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJmYV9mY3NfZmFicmljX25vdGlmeV9vZmZsaW5lKGZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTk9fRkFCUklDOgorCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJiX2NyZWRpdCk7CisJCWJmYV9wcG9ydF9zZXRfdHhfYmJjcmVkaXQoZmFicmljLT5mY3MtPmJmYSwgZmFicmljLT5iYl9jcmVkaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEZhYnJpYyBpcyBvbmxpbmUgLSBub3JtYWwgb3BlcmF0aW5nIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKKwkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29mZmxpbmUoZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2RlbGV0aW5nKTsKKwkJYmZhX2Zjc19mYWJyaWNfZGVsZXRlKGZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9BVVRIX0ZBSUxFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2F1dGhfZmFpbGVkKTsKKwkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfU1VDQ0VTUzoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogICBFeGNoYW5naW5nIHZpcnR1YWwgZmFicmljIHBhcmFtZXRlcnMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9ldmZwKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCSAgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQ09OVF9PUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2V2ZnBfZG9uZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9JU09MQVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21faXNvbGF0ZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEVWRlAgZXhjaGFuZ2UgY29tcGxldGUgYW5kIFZGVCB0YWdnaW5nIGlzIGVuYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9ldmZwX2RvbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworfQorCisvKioKKyAqICAgUG9ydCBpcyBpc29sYXRlZCBhZnRlciBFVkZQIGV4Y2hhbmdlIGR1ZSB0byBWRl9JRCBtaXNtYXRjaCAoTiBhbmQgRikuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9pc29sYXRlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCWJmYV9sb2coZmFicmljLT5mY3MtPmxvZ20sIEJGQV9MT0dfRkNTX0ZBQlJJQ19JU09MQVRFRCwKKwkJZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duLCBmYWJyaWMtPmZjcy0+cG9ydF92ZmlkLAorCQlmYWJyaWMtPmV2ZW50X2FyZy5zd3BfdmZpZCk7Cit9CisKKy8qKgorICogICBGYWJyaWMgaXMgYmVpbmcgZGVsZXRlZCwgYXdhaXRpbmcgdnBvcnQgZGVsZXRlIGNvbXBsZXRpb25zLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxDT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KTsKKwkJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmFicmljLT5mY3MpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19VUDoKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29mZmxpbmUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKworCisvKioKKyAqICBmY3NfZmFicmljX3ByaXZhdGUgZmFicmljIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2luaXQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnID0gJmZhYnJpYy0+YnBvcnQucG9ydF9jZmc7CisKKwlwb3J0X2NmZy0+cm9sZXMgPSBCRkFfUE9SVF9ST0xFX0ZDUF9JTTsKKwlwb3J0X2NmZy0+bnd3biA9IGJmYV9pb2NfZ2V0X253d24oJmZhYnJpYy0+ZmNzLT5iZmEtPmlvYyk7CisJcG9ydF9jZmctPnB3d24gPSBiZmFfaW9jX2dldF9wd3duKCZmYWJyaWMtPmZjcy0+YmZhLT5pb2MpOworfQorCisvKioKKyAqIFBvcnQgU3ltYm9saWMgTmFtZSBDcmVhdGlvbiBmb3IgYmFzZSBwb3J0LgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19wc3ltYl9pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZyA9ICZmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnOworCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgYWRhcHRlcl9hdHRyOworCXN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgKmRyaXZlcl9pbmZvID0gJmZhYnJpYy0+ZmNzLT5kcml2ZXJfaW5mbzsKKworCWJmYV9vc19tZW1zZXQoKHZvaWQgKikmYWRhcHRlcl9hdHRyLCAwLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcykpOworCWJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cigmZmFicmljLT5mY3MtPmJmYS0+aW9jLCAmYWRhcHRlcl9hdHRyKTsKKworCS8qCisJICogTW9kZWwgbmFtZS9udW1iZXIKKwkgKi8KKwlzdHJuY3B5KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwgYWRhcHRlcl9hdHRyLm1vZGVsLAorCQlCRkFfRkNTX1BPUlRfU1lNQk5BTUVfTU9ERUxfU1opOworCXN0cm5jYXQoKGNoYXIgKikmcG9ydF9jZmctPnN5bV9uYW1lLCBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SLAorCQlzaXplb2YoQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUikpOworCisJLyoKKwkgKiBEcml2ZXIgVmVyc2lvbgorCSAqLworCXN0cm5jYXQoKGNoYXIgKikmcG9ydF9jZmctPnN5bV9uYW1lLCAoY2hhciAqKWRyaXZlcl9pbmZvLT52ZXJzaW9uLAorCQlCRkFfRkNTX1BPUlRfU1lNQk5BTUVfVkVSU0lPTl9TWik7CisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisKKwkvKgorCSAqIEhvc3QgbWFjaGluZSBuYW1lCisJICovCisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsCisJCShjaGFyICopZHJpdmVyX2luZm8tPmhvc3RfbWFjaGluZV9uYW1lLAorCQlCRkFfRkNTX1BPUlRfU1lNQk5BTUVfTUFDSElORU5BTUVfU1opOworCXN0cm5jYXQoKGNoYXIgKikmcG9ydF9jZmctPnN5bV9uYW1lLCBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SLAorCQlzaXplb2YoQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUikpOworCisJLyoKKwkgKiBIb3N0IE9TIEluZm8gOgorCSAqIElmIE9TIFBhdGNoIEluZm8gaXMgbm90IHRoZXJlLCBkbyBub3QgdHJ1bmNhdGUgYW55IGJ5dGVzIGZyb20gdGhlCisJICogT1MgbmFtZSBzdHJpbmcgYW5kIGluc3RlYWQgY29weSB0aGUgZW50aXJlIE9TIGluZm8gc3RyaW5nICg2NCBieXRlcykuCisJICovCisJaWYgKGRyaXZlcl9pbmZvLT5ob3N0X29zX3BhdGNoWzBdID09ICdcMCcpIHsKKwkJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsCisJCQkoY2hhciAqKWRyaXZlcl9pbmZvLT5ob3N0X29zX25hbWUsIEJGQV9GQ1NfT1NfU1RSX0xFTik7CisJCXN0cm5jYXQoKGNoYXIgKikmcG9ydF9jZmctPnN5bV9uYW1lLAorCQkJQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUiwKKwkJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisJfSBlbHNlIHsKKwkJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsCisJCQkoY2hhciAqKWRyaXZlcl9pbmZvLT5ob3N0X29zX25hbWUsCisJCQlCRkFfRkNTX1BPUlRfU1lNQk5BTUVfT1NJTkZPX1NaKTsKKwkJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsCisJCQlCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SLAorCQkJc2l6ZW9mKEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IpKTsKKworCQkvKgorCQkgKiBBcHBlbmQgaG9zdCBPUyBQYXRjaCBJbmZvCisJCSAqLworCQlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJCShjaGFyICopZHJpdmVyX2luZm8tPmhvc3Rfb3NfcGF0Y2gsCisJCQlCRkFfRkNTX1BPUlRfU1lNQk5BTUVfT1NQQVRDSF9TWik7CisJfQorCisJLyoKKwkgKiBudWxsIHRlcm1pbmF0ZQorCSAqLworCXBvcnRfY2ZnLT5zeW1fbmFtZS5zeW1uYW1lW0JGQV9TWU1OQU1FX01BWExFTiAtIDFdID0gMDsKK30KKworLyoqCisgKiBiZmEgbHBzIGxvZ2luIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqLwordm9pZAorYmZhX2NiX2xwc19mbG9naV9jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyA9IHVhcmc7CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIHN0YXR1cyk7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgQkZBX1NUQVRVU19PSzoKKwkJZmFicmljLT5zdGF0cy5mbG9naV9hY2NlcHRzKys7CisJCWJyZWFrOworCisJY2FzZSBCRkFfU1RBVFVTX0lOVkFMSURfTUFDOgorCQkvKgorCQkgKiBPbmx5IGZvciBDTkEKKwkJICovCisJCWZhYnJpYy0+c3RhdHMuZmxvZ2lfYWNjX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX1JFVFJZX09QKTsKKworCQlyZXR1cm47CisKKwljYXNlIEJGQV9TVEFUVVNfRVBST1RPQ09MOgorCQlzd2l0Y2ggKGJmYV9scHNfZ2V0X2V4dHN0YXR1cyhmYWJyaWMtPmxwcykpIHsKKwkJY2FzZSBCRkFfRVBST1RPX0JBRF9BQ0NFUFQ6CisJCQlmYWJyaWMtPnN0YXRzLmZsb2dpX2FjY19lcnIrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgQkZBX0VQUk9UT19VTktOT1dOX1JTUDoKKwkJCWZhYnJpYy0+c3RhdHMuZmxvZ2lfdW5rbm93bl9yc3ArKzsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX1JFVFJZX09QKTsKKworCQlyZXR1cm47CisKKwljYXNlIEJGQV9TVEFUVVNfRkFCUklDX1JKVDoKKwkJZmFicmljLT5zdGF0cy5mbG9naV9yZWplY3RzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1ApOworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlmYWJyaWMtPnN0YXRzLmZsb2dpX3JzcF9lcnIrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUCk7CisJCXJldHVybjsKKwl9CisKKwlmYWJyaWMtPmJiX2NyZWRpdCA9IGJmYV9scHNfZ2V0X3BlZXJfYmJjcmVkaXQoZmFicmljLT5scHMpOworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YmJfY3JlZGl0KTsKKworCWlmICghYmZhX2xwc19pc19icmNkX2ZhYnJpYyhmYWJyaWMtPmxwcykpCisJCWZhYnJpYy0+ZmFicmljX25hbWUgPSBiZmFfbHBzX2dldF9wZWVyX253d24oZmFicmljLT5scHMpOworCisJLyoKKwkgKiBDaGVjayBwb3J0IHR5cGUuIEl0IHNob3VsZCBiZSAxID0gRi1wb3J0LgorCSAqLworCWlmIChiZmFfbHBzX2lzX2Zwb3J0KGZhYnJpYy0+bHBzKSkgeworCQlmYWJyaWMtPmJwb3J0LnBpZCA9IGJmYV9scHNfZ2V0X3BpZChmYWJyaWMtPmxwcyk7CisJCWZhYnJpYy0+aXNfbnBpdiA9IGJmYV9scHNfaXNfbnBpdl9lbihmYWJyaWMtPmxwcyk7CisJCWZhYnJpYy0+aXNfYXV0aCA9IGJmYV9scHNfaXNfYXV0aHJlcShmYWJyaWMtPmxwcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fQ09OVF9PUCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTnBvcnQtMi1OcG9ydCBkaXJlY3QgYXR0YWNoZWQKKwkJICovCisJCWZhYnJpYy0+YnBvcnQucG9ydF90b3BvLnBuMm4ucmVtX3BvcnRfd3duID0KKwkJCWJmYV9scHNfZ2V0X3BlZXJfcHd3bihmYWJyaWMtPmxwcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fTk9fRkFCUklDKTsKKwl9CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBpZCk7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5pc19ucGl2KTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmlzX2F1dGgpOworfQorCisvKioKKyAqIAkJQWxsb2NhdGUgYW5kIHNlbmQgRkxPR0kuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19sb2dpbihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXN0cnVjdCBiZmFfcyAgICpiZmEgPSBmYWJyaWMtPmZjcy0+YmZhOworCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcGNmZyA9ICZmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnOworCXU4ICAgICAgICAgYWxwYSA9IDA7CisKKwlpZiAoYmZhX3Bwb3J0X2dldF90b3BvbG9neShiZmEpID09IEJGQV9QUE9SVF9UT1BPTE9HWV9MT09QKQorCQlhbHBhID0gYmZhX3Bwb3J0X2dldF9teWFscGEoYmZhKTsKKworCWJmYV9scHNfZmxvZ2koZmFicmljLT5scHMsIGZhYnJpYywgYWxwYSwgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUoYmZhKSwKKwkJICAgICAgcGNmZy0+cHd3biwgcGNmZy0+bnd3biwgZmFicmljLT5hdXRoX3JlcWQpOworCisJZmFicmljLT5zdGF0cy5mbG9naV9zZW50Kys7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19ub3RpZnlfb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmZhYnJpY19uYW1lKTsKKworCWJmYV9mY3NfZmFicmljX3NldF9vcGVydHlwZShmYWJyaWMpOworCWZhYnJpYy0+c3RhdHMuZmFicmljX29ubGluZXMrKzsKKworCS8qKgorCSAqIG5vdGlmeSBvbmxpbmUgZXZlbnQgdG8gYmFzZSBhbmQgdGhlbiB2aXJ0dWFsIHBvcnRzCisJICovCisJYmZhX2Zjc19wb3J0X29ubGluZSgmZmFicmljLT5icG9ydCk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJmZhYnJpYy0+dnBvcnRfcSkgeworCQl2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopcWU7CisJCWJmYV9mY3NfdnBvcnRfb25saW5lKHZwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5mYWJyaWNfbmFtZSk7CisJZmFicmljLT5zdGF0cy5mYWJyaWNfb2ZmbGluZXMrKzsKKworCS8qKgorCSAqIG5vdGlmeSBvZmZsaW5lIGV2ZW50IGZpcnN0IHRvIHZwb3J0cyBhbmQgdGhlbiBiYXNlIHBvcnQuCisJICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZmYWJyaWMtPnZwb3J0X3EpIHsKKwkJdnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqKXFlOworCQliZmFfZmNzX3Zwb3J0X29mZmxpbmUodnBvcnQpOworCX0KKworCWJmYV9mY3NfcG9ydF9vZmZsaW5lKCZmYWJyaWMtPmJwb3J0KTsKKworCWZhYnJpYy0+ZmFicmljX25hbWUgPSAwOworCWZhYnJpYy0+ZmFicmljX2lwX2FkZHJbMF0gPSAwOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfZGVsYXkodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyA9IGNiYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxBWUVEKTsKK30KKworLyoqCisgKiBEZWxldGUgYWxsIHZwb3J0cyBhbmQgd2FpdCBmb3IgdnBvcnQgZGVsZXRlIGNvbXBsZXRpb25zLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfZGVsZXRlKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJmZhYnJpYy0+dnBvcnRfcSkgeworCQl2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopcWU7CisJCWJmYV9mY3NfdnBvcnRfZGVsZXRlKHZwb3J0KTsKKwl9CisKKwliZmFfZmNzX3BvcnRfZGVsZXRlKCZmYWJyaWMtPmJwb3J0KTsKKwliZmFfd2Nfd2FpdCgmZmFicmljLT53Yyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19kZWxldGVfY29tcCh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljID0gY2Jhcmc7CisKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0RFTENPTVApOworfQorCisKKworLyoqCisgKiAgZmNzX2ZhYnJpY19wdWJsaWMgZmFicmljIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqICAgTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWM7CisKKwlmYWJyaWMgPSAmZmNzLT5mYWJyaWM7CisJYmZhX29zX21lbXNldChmYWJyaWMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcykpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBiYXNlIGZhYnJpYy4KKwkgKi8KKwlmYWJyaWMtPmZjcyA9IGZjczsKKwlJTklUX0xJU1RfSEVBRCgmZmFicmljLT52cG9ydF9xKTsKKwlJTklUX0xJU1RfSEVBRCgmZmFicmljLT52Zl9xKTsKKwlmYWJyaWMtPmxwcyA9IGJmYV9scHNfYWxsb2MoZmNzLT5iZmEpOworCWJmYV9hc3NlcnQoZmFicmljLT5scHMpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBmYWJyaWMgZGVsZXRlIGNvbXBsZXRpb24gaGFuZGxlci4gRmFicmljIGRlbGV0aW9uIGlzIGNvbXBsZXRlCisJICogd2hlbiB0aGUgbGFzdCB2cG9ydCBkZWxldGUgaXMgY29tcGxldGUuCisJICovCisJYmZhX3djX2luaXQoJmZhYnJpYy0+d2MsIGJmYV9mY3NfZmFicmljX2RlbGV0ZV9jb21wLCBmYWJyaWMpOworCWJmYV93Y191cCgmZmFicmljLT53Yyk7CS8qIEZvciB0aGUgYmFzZSBwb3J0ICovCisKKwliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KTsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0NSRUFURSk7CisJYmZhX3RyYyhmY3MsIDApOworfQorCisvKioKKyAqICAgTW9kdWxlIGNsZWFudXAKKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsKKworCWJmYV90cmMoZmNzLCAwKTsKKworCS8qKgorCSAqIENsZWFudXAgYmFzZSBmYWJyaWMuCisJICovCisJZmFicmljID0gJmZjcy0+ZmFicmljOworCWJmYV9scHNfZGVsZXRlKGZhYnJpYy0+bHBzKTsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURSk7Cit9CisKKy8qKgorICogRmFicmljIG1vZHVsZSBzdGFydCAtLSBraWNrIHN0YXJ0cyBGQ1MgYWN0aW9ucworICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19tb2RzdGFydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsKKworCWJmYV90cmMoZmNzLCAwKTsKKwlmYWJyaWMgPSAmZmNzLT5mYWJyaWM7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9TVEFSVCk7Cit9CisKKy8qKgorICogICBTdXNwZW5kIGZhYnJpYyBhY3Rpdml0eSBhcyBwYXJ0IG9mIGRyaXZlciBzdXNwZW5kLgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19tb2RzdXNwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX2Zjc19mYWJyaWNfaXNfbG9vcGJhY2soc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlyZXR1cm4gKGJmYV9zbV9jbXBfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjaykpOworfQorCitlbnVtIGJmYV9wcG9ydF90eXBlCitiZmFfZmNzX2ZhYnJpY19wb3J0X3R5cGUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlyZXR1cm4gZmFicmljLT5vcGVyX3R5cGU7Cit9CisKKy8qKgorICogICBMaW5rIHVwIG5vdGlmaWNhdGlvbiBmcm9tIEJGQSBwaHlzaWNhbCBwb3J0IG1vZHVsZS4KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfbGlua191cChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQKTsKK30KKworLyoqCisgKiAgIExpbmsgZG93biBub3RpZmljYXRpb24gZnJvbSBCRkEgcGh5c2ljYWwgcG9ydCBtb2R1bGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX2xpbmtfZG93bihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV04pOworfQorCisvKioKKyAqICAgQSBjaGlsZCB2cG9ydCBpcyBiZWluZyBjcmVhdGVkIGluIHRoZSBmYWJyaWMuCisgKgorICogICBDYWxsIGZyb20gdnBvcnQgbW9kdWxlIGF0IHZwb3J0IGNyZWF0aW9uLiBBIGxpc3Qgb2YgYmFzZSBwb3J0IGFuZCB2cG9ydHMKKyAqICAgYmVsb25naW5nIHRvIGEgZmFicmljIGlzIG1haW50YWluZWQgdG8gcHJvcGFnYXRlIGxpbmsgZXZlbnRzLgorICoKKyAqICAgcGFyYW1baW5dIGZhYnJpYyAtIEZhYnJpYyBpbnN0YW5jZS4gVGhpcyBjYW4gYmUgYSBiYXNlIGZhYnJpYyBvciB2Zi4KKyAqICAgcGFyYW1baW5dIHZwb3J0ICAtIFZwb3J0IGJlaW5nIGNyZWF0ZWQuCisgKgorICogICBAcmV0dXJuIE5vbmUgKGFsd2F5cyBzdWNjZWVkcykKKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfYWRkdnBvcnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCS8qKgorCSAqIC0gYWRkIHZwb3J0IHRvIGZhYnJpYydzIHZwb3J0X3EKKwkgKi8KKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPnZmX2lkKTsKKworCWxpc3RfYWRkX3RhaWwoJnZwb3J0LT5xZSwgJmZhYnJpYy0+dnBvcnRfcSk7CisJZmFicmljLT5udW1fdnBvcnRzKys7CisJYmZhX3djX3VwKCZmYWJyaWMtPndjKTsKK30KKworLyoqCisgKiAgIEEgY2hpbGQgdnBvcnQgaXMgYmVpbmcgZGVsZXRlZCBmcm9tIGZhYnJpYy4KKyAqCisgKiAgIFZwb3J0IGlzIGJlaW5nIGRlbGV0ZWQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX2RlbHZwb3J0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwlsaXN0X2RlbCgmdnBvcnQtPnFlKTsKKwlmYWJyaWMtPm51bV92cG9ydHMtLTsKKwliZmFfd2NfZG93bigmZmFicmljLT53Yyk7Cit9CisKKy8qKgorICogICBCYXNlIHBvcnQgaXMgZGVsZXRlZC4KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfcG9ydF9kZWxldGVfY29tcChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCWJmYV93Y19kb3duKCZmYWJyaWMtPndjKTsKK30KKworLyoqCisgKiAgICBDaGVjayBpZiBmYWJyaWMgaXMgb25saW5lLgorICoKKyAqICAgcGFyYW1baW5dIGZhYnJpYyAtIEZhYnJpYyBpbnN0YW5jZS4gVGhpcyBjYW4gYmUgYSBiYXNlIGZhYnJpYyBvciB2Zi4KKyAqCisgKiAgIEByZXR1cm4gIFRSVUUvRkFMU0UKKyAqLworaW50CitiZmFfZmNzX2ZhYnJpY19pc19vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlyZXR1cm4gKGJmYV9zbV9jbXBfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUpKTsKK30KKworCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfZmFicmljX2FkZHZmKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICp2Ziwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkgICAgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcsCisJCSAgICAgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KQoreworCWJmYV9zbV9zZXRfc3RhdGUodmYsIGJmYV9mY3NfZmFicmljX3NtX3VuaW5pdCk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogTG9va3VwIGZvciBhIHZwb3J0IHdpdGhpbmcgYSBmYWJyaWMgZ2l2ZW4gaXRzIHB3d24KKyAqLworc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqCitiZmFfZmNzX2ZhYnJpY192cG9ydF9sb29rdXAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywgd3duX3QgcHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKworCWxpc3RfZm9yX2VhY2gocWUsICZmYWJyaWMtPnZwb3J0X3EpIHsKKwkJdnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqKXFlOworCQlpZiAoYmZhX2Zjc19wb3J0X2dldF9wd3duKCZ2cG9ydC0+bHBvcnQpID09IHB3d24pCisJCQlyZXR1cm4gdnBvcnQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogICAgSW4gYSBnaXZlbiBmYWJyaWMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGxwb3J0cy4KKyAqCisgKiAgIHBhcmFtW2luXSBmYWJyaWMgLSBGYWJyaWMgaW5zdGFuY2UuIFRoaXMgY2FuIGJlIGEgYmFzZSBmYWJyaWMgb3IgdmYuCisgKgorKiAgICBAcmV0dXJuIDogMSBvciBtb3JlLgorICovCit1MTYKK2JmYV9mY3NfZmFicmljX3Zwb3J0X2NvdW50KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJcmV0dXJuIChmYWJyaWMtPm51bV92cG9ydHMpOworfQorCisvKioKKyAqIAkJVW5zb2xpY2l0ZWQgZnJhbWUgcmVjZWl2ZSBoYW5kbGluZy4KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkgICAgICAgdTE2IGxlbikKK3sKKwl1MzIgICAgICAgIHBpZCA9IGZjaHMtPmRfaWQ7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqZmxvZ2kgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSBlbHNfY21kOworCisJYmZhX3RyYyhmYWJyaWMtPmZjcywgbGVuKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBwaWQpOworCisJLyoqCisJICogTG9vayBmb3Igb3VyIG93biBGTE9HSSBmcmFtZXMgYmVpbmcgbG9vcGVkIGJhY2suIFRoaXMgbWVhbnMgYW4KKwkgKiBleHRlcm5hbCBsb29wYmFjayBjYWJsZSBpcyBpbiBwbGFjZS4gT3VyIG93biBGTE9HSSBmcmFtZXMgYXJlCisJICogc29tZXRpbWVzIGxvb3BlZCBiYWNrIHdoZW4gc3dpdGNoIHBvcnQgZ2V0cyB0ZW1wb3JhcmlseSBieXBhc3NlZC4KKwkgKi8KKwlpZiAoKHBpZCA9PSBiZmFfb3NfbnRvaDNiKEZDX0ZBQlJJQ19QT1JUKSkKKwkgICAgJiYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19GTE9HSSkKKwkgICAgJiYgKGZsb2dpLT5wb3J0X25hbWUgPT0gYmZhX2Zjc19wb3J0X2dldF9wd3duKCZmYWJyaWMtPmJwb3J0KSkpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9MT09QQkFDSyk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBGTE9HSS9FVkZQIGV4Y2hhbmdlcyBzaG91bGQgYmUgY29uc3VtZWQgYnkgYmFzZSBmYWJyaWMuCisJICovCisJaWYgKGZjaHMtPmRfaWQgPT0gYmZhX29zX2h0b24zYihGQ19GQUJSSUNfUE9SVCkpIHsKKwkJYmZhX3RyYyhmYWJyaWMtPmZjcywgcGlkKTsKKwkJYmZhX2Zjc19mYWJyaWNfcHJvY2Vzc191ZihmYWJyaWMsIGZjaHMsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZmFicmljLT5icG9ydC5waWQgPT0gcGlkKSB7CisJCS8qKgorCQkgKiBBbGwgYXV0aGVudGljYXRpb24gZnJhbWVzIHNob3VsZCBiZSByb3V0ZWQgdG8gYXV0aAorCQkgKi8KKwkJYmZhX3RyYyhmYWJyaWMtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCQlpZiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX0FVVEgpIHsKKwkJCWJmYV90cmMoZmFicmljLT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwkJCWZhYnJpYy0+YXV0aC5yZXNwb25zZSA9ICh1OCAqKSBlbHNfY21kOworCQkJcmV0dXJuOworCQl9CisKKwkJYmZhX3RyYyhmYWJyaWMtPmZjcywgKih1OCAqKSAoKHU4ICopIGZjaHMpKTsKKwkJYmZhX2Zjc19wb3J0X3VmX3JlY3YoJmZhYnJpYy0+YnBvcnQsIGZjaHMsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBsb29rIGZvciBhIG1hdGNoaW5nIGxvY2FsIHBvcnQgSUQKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoKHFlLCAmZmFicmljLT52cG9ydF9xKSB7CisJCXZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKilxZTsKKwkJaWYgKHZwb3J0LT5scG9ydC5waWQgPT0gcGlkKSB7CisJCQliZmFfZmNzX3BvcnRfdWZfcmVjdigmdnBvcnQtPmxwb3J0LCBmY2hzLCBsZW4pOworCQkJcmV0dXJuOworCQl9CisJfQorCWJmYV90cmMoZmFicmljLT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwliZmFfZmNzX3BvcnRfdWZfcmVjdigmZmFicmljLT5icG9ydCwgZmNocywgbGVuKTsKK30KKworLyoqCisgKiAJCVVuc29saWNpdGVkIGZyYW1lcyB0byBiZSBwcm9jZXNzZWQgYnkgZmFicmljLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfcHJvY2Vzc191ZihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJICB1MTYgbGVuKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisKKwlzd2l0Y2ggKGVsc19jbWQtPmVsc19jb2RlKSB7CisJY2FzZSBGQ19FTFNfRkxPR0k6CisJCWJmYV9mY3NfZmFicmljX3Byb2Nlc3NfZmxvZ2koZmFicmljLCBmY2hzLCBsZW4pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qCisJCSAqIG5lZWQgdG8gZ2VuZXJhdGUgYSBMU19SSlQKKwkJICovCisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiAJUHJvY2VzcwlpbmNvbWluZyBGTE9HSQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfcHJvY2Vzc19mbG9naShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJc3RydWN0IGZjaHNfcyAqZmNocywgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqZmxvZ2kgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqYnBvcnQgPSAmZmFicmljLT5icG9ydDsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIGZjaHMtPnNfaWQpOworCisJZmFicmljLT5zdGF0cy5mbG9naV9yY3ZkKys7CisJLyoKKwkgKiBDaGVjayBwb3J0IHR5cGUuIEl0IHNob3VsZCBiZSAwID0gbi1wb3J0LgorCSAqLworCWlmIChmbG9naS0+Y3NwLnBvcnRfdHlwZSkgeworCQkvKgorCQkgKiBAdG9kbzogbWF5IG5lZWQgdG8gc2VuZCBhIExTX1JKVAorCQkgKi8KKwkJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmxvZ2ktPnBvcnRfbmFtZSk7CisJCWZhYnJpYy0+c3RhdHMuZmxvZ2lfcmVqZWN0ZWQrKzsKKwkJcmV0dXJuOworCX0KKworCWZhYnJpYy0+YmJfY3JlZGl0ID0gYmZhX29zX250b2hzKGZsb2dpLT5jc3AuYmJjcmVkKTsKKwlicG9ydC0+cG9ydF90b3BvLnBuMm4ucmVtX3BvcnRfd3duID0gZmxvZ2ktPnBvcnRfbmFtZTsKKwlicG9ydC0+cG9ydF90b3BvLnBuMm4ucmVwbHlfb3hpZCA9IGZjaHMtPm94X2lkOworCisJLyoKKwkgKiBTZW5kIGEgRmxvZ2kgQWNjCisJICovCisJYmZhX2Zjc19mYWJyaWNfc2VuZF9mbG9naV9hY2MoZmFicmljKTsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX05PX0ZBQlJJQyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zZW5kX2Zsb2dpX2FjYyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcGNmZyA9ICZmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbjJuX3MgKm4ybl9wb3J0ID0gJmZhYnJpYy0+YnBvcnQucG9ydF90b3BvLnBuMm47CisJc3RydWN0IGJmYV9zICAgKmJmYSA9IGZhYnJpYy0+ZmNzLT5iZmE7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTE2ICAgICAgICByZXFsZW47CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhmYWJyaWMtPmZjcyk7CisJLyoqCisJICogRG8gbm90IGV4cGVjdCB0aGlzIGZhaWx1cmUgLS0gZXhwZWN0IHJlbW90ZSBub2RlIHRvIHJldHJ5CisJICovCisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlyZXFsZW4gPSBmY19mbG9naV9hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkJICAgIGJmYV9vc19odG9uM2IoRkNfRkFCUklDX1BPUlQpLAorCQkJCSAgICBuMm5fcG9ydC0+cmVwbHlfb3hpZCwgcGNmZy0+cHd3biwKKwkJCQkgICAgcGNmZy0+bnd3biwgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUoYmZhKSwKKwkJCQkgICAgYmZhX3Bwb3J0X2dldF9yeF9iYmNyZWRpdChiZmEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgZmFicmljLT52Zl9pZCwgYmZhX2xwc19nZXRfdGFnKGZhYnJpYy0+bHBzKSwKKwkJCUJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgcmVxbGVuLCAmZmNocywKKwkJCWJmYV9mY3NfZmFicmljX2Zsb2dpYWNjX2NvbXAsIGZhYnJpYywKKwkJCUZDX01BWF9QRFVTWiwgMCk7IC8qIFRpbWVvdXQgMCBpbmRpY2F0ZXMgbm8KKwkJCQkJICAgKiByZXNwb25zZSBleHBlY3RlZAorCQkJCQkgICAqLworfQorCisvKioKKyAqICAgRmxvZ2kgQWNjIGNvbXBsZXRpb24gY2FsbGJhY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19mbG9naWFjY19jb21wKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgICBiZmFfc3RhdHVzX3Qgc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCSAgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljID0gY2Jhcmc7CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBzdGF0dXMpOworfQorCisvKgorICoKKyAqIEBwYXJhbVtpbl0gZmFicmljIC0gZmFicmljCisgKiBAcGFyYW1baW5dIHJlc3VsdCAtIDEKKyAqCisgKiBAcmV0dXJuIC0gbm9uZQorICovCit2b2lkCitiZmFfZmNzX2F1dGhfZmluaXNoZWQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywgZW51bSBhdXRoX3N0YXR1cyBzdGF0dXMpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgc3RhdHVzKTsKKworCWlmIChzdGF0dXMgPT0gRkNfQVVUSF9TVEFURV9TVUNDRVNTKQorCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfU1VDQ0VTUyk7CisJZWxzZQorCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfRkFJTEVEKTsKK30KKworLyoqCisgKiBTZW5kIEFFTiBub3RpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCWVudW0gYmZhX3BvcnRfYWVuX2V2ZW50IGV2ZW50KQoreworCXVuaW9uIGJmYV9hZW5fZGF0YV91IGFlbl9kYXRhOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QgPSBwb3J0LT5mY3MtPmxvZ207CisJd3duX3QgICAgICAgICAgIHB3d24gPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisJd3duX3QgICAgICAgICAgIGZ3d24gPSBiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19uYW1lKHBvcnQpOworCWNoYXIgICAgICAgICAgICBwd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKwljaGFyICAgICAgICAgICAgZnd3bl9wdHJbQkZBX1NUUklOR18zMl07CisKKwl3d24yc3RyKHB3d25fcHRyLCBwd3duKTsKKwl3d24yc3RyKGZ3d25fcHRyLCBmd3duKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QT1JUX0FFTl9GQUJSSUNfTkFNRV9DSEFOR0U6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1BPUlRfRkFCUklDX05BTUVfQ0hBTkdFLCBwd3duX3B0ciwKKwkJCWZ3d25fcHRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWVuX2RhdGEucG9ydC5wd3duID0gcHd3bjsKKwlhZW5fZGF0YS5wb3J0LmZ3d24gPSBmd3duOworfQorCisvKgorICoKKyAqIEBwYXJhbVtpbl0gZmFicmljIC0gZmFicmljCisgKiBAcGFyYW1baW5dIHd3bl90IC0gbmV3IGZhYnJpYyBuYW1lCisgKgorICogQHJldHVybiAtIG5vbmUKKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfc2V0X2ZhYnJpY19uYW1lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICAgICAgd3duX3QgZmFicmljX25hbWUpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljX25hbWUpOworCisJaWYgKGZhYnJpYy0+ZmFicmljX25hbWUgPT0gMCkgeworCQkvKgorCQkgKiBXaXRoIEJSQ0Qgc3dpdGNoZXMsIHdlIGRvbid0IGdldCBGYWJyaWMgTmFtZSBpbiBGTE9HSS4KKwkJICogRG9uJ3QgZ2VuZXJhdGUgYSBmYWJyaWMgbmFtZSBjaGFuZ2UgZXZlbnQgaW4gdGhpcyBjYXNlLgorCQkgKi8KKwkJZmFicmljLT5mYWJyaWNfbmFtZSA9IGZhYnJpY19uYW1lOworCX0gZWxzZSB7CisJCWZhYnJpYy0+ZmFicmljX25hbWUgPSBmYWJyaWNfbmFtZTsKKwkJLyoKKwkJICogR2VuZXJhdGUgYSBFdmVudAorCQkgKi8KKwkJYmZhX2Zjc19mYWJyaWNfYWVuX3Bvc3QoJmZhYnJpYy0+YnBvcnQsCisJCQkJCUJGQV9QT1JUX0FFTl9GQUJSSUNfTkFNRV9DSEFOR0UpOworCX0KKworfQorCisvKioKKyAqIE5vdCB1c2VkIGJ5IEZDUy4KKyAqLwordm9pZAorYmZhX2NiX2xwc19mbG9nb19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcpCit7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY2J1aWxkLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2ZjYnVpbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTc0NzA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY2J1aWxkLmMKQEAgLTAsMCArMSwxNDQ5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisvKgorICogZmNidWlsZC5jIC0gRkMgbGluayBzZXJ2aWNlIGZyYW1lIGJ1aWxkaW5nIGFuZCBwYXJzaW5nIHJvdXRpbmVzCisgKi8KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlICJmY2J1aWxkLmgiCisKKy8qCisgKiBzdGF0aWMgYnVpbGQgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkIGZjX2Vsc19yc3BfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKTsKK3N0YXRpYyB2b2lkIGZjX2Jsc19yc3BfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKTsKK3N0YXRpYyBzdHJ1Y3QgZmNoc19zICAgZmNfZWxzX3JlcV90bXBsOworc3RhdGljIHN0cnVjdCBmY2hzX3MgICBmY19lbHNfcnNwX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjaHNfcyAgIGZjX2Jsc19yZXFfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNoc19zICAgZmNfYmxzX3JzcF90bXBsOworc3RhdGljIHN0cnVjdCBmY19iYV9hY2NfcyBiYV9hY2NfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNfbG9naV9zIHBsb2dpX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjX3BybGlfcyBwcmxpX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjX3JycV9zIHJycV90bXBsOworc3RhdGljIHN0cnVjdCBmY2hzX3MgICBmY3BfZmNoc190bXBsOworCit2b2lkCitmY2J1aWxkX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIGZjX2Vsc19yZXFfdG1wbAorCSAqLworCWZjX2Vsc19yZXFfdG1wbC5yb3V0aW5nID0gRkNfUlRHX0VYVF9MSU5LOworCWZjX2Vsc19yZXFfdG1wbC5jYXRfaW5mbyA9IEZDX0NBVF9MRF9SRVFVRVNUOworCWZjX2Vsc19yZXFfdG1wbC50eXBlID0gRkNfVFlQRV9FTFM7CisJZmNfZWxzX3JlcV90bXBsLmZfY3RsID0KKwkJYmZhX29zX2h0b24zYihGQ1RMX1NFUV9JTkkgfCBGQ1RMX0ZTX0VYQ0ggfCBGQ1RMX0VORF9TRVEgfAorCQkJICAgICAgRkNUTF9TSV9YRkVSKTsKKwlmY19lbHNfcmVxX3RtcGwucnhfaWQgPSBGQ19SWElEX0FOWTsKKworCS8qCisJICogZmNfZWxzX3JzcF90bXBsCisJICovCisJZmNfZWxzX3JzcF90bXBsLnJvdXRpbmcgPSBGQ19SVEdfRVhUX0xJTks7CisJZmNfZWxzX3JzcF90bXBsLmNhdF9pbmZvID0gRkNfQ0FUX0xEX1JFUExZOworCWZjX2Vsc19yc3BfdG1wbC50eXBlID0gRkNfVFlQRV9FTFM7CisJZmNfZWxzX3JzcF90bXBsLmZfY3RsID0KKwkJYmZhX29zX2h0b24zYihGQ1RMX0VDX1JFU1AgfCBGQ1RMX1NFUV9JTkkgfCBGQ1RMX0xTX0VYQ0ggfAorCQkJICAgICAgRkNUTF9FTkRfU0VRIHwgRkNUTF9TSV9YRkVSKTsKKwlmY19lbHNfcnNwX3RtcGwucnhfaWQgPSBGQ19SWElEX0FOWTsKKworCS8qCisJICogZmNfYmxzX3JlcV90bXBsCisJICovCisJZmNfYmxzX3JlcV90bXBsLnJvdXRpbmcgPSBGQ19SVEdfQkFTSUNfTElOSzsKKwlmY19ibHNfcmVxX3RtcGwudHlwZSA9IEZDX1RZUEVfQkxTOworCWZjX2Jsc19yZXFfdG1wbC5mX2N0bCA9IGJmYV9vc19odG9uM2IoRkNUTF9FTkRfU0VRIHwgRkNUTF9TSV9YRkVSKTsKKwlmY19ibHNfcmVxX3RtcGwucnhfaWQgPSBGQ19SWElEX0FOWTsKKworCS8qCisJICogZmNfYmxzX3JzcF90bXBsCisJICovCisJZmNfYmxzX3JzcF90bXBsLnJvdXRpbmcgPSBGQ19SVEdfQkFTSUNfTElOSzsKKwlmY19ibHNfcnNwX3RtcGwuY2F0X2luZm8gPSBGQ19DQVRfQkFfQUNDOworCWZjX2Jsc19yc3BfdG1wbC50eXBlID0gRkNfVFlQRV9CTFM7CisJZmNfYmxzX3JzcF90bXBsLmZfY3RsID0KKwkJYmZhX29zX2h0b24zYihGQ1RMX0VDX1JFU1AgfCBGQ1RMX1NFUV9JTkkgfCBGQ1RMX0xTX0VYQ0ggfAorCQkJICAgICAgRkNUTF9FTkRfU0VRIHwgRkNUTF9TSV9YRkVSKTsKKwlmY19ibHNfcnNwX3RtcGwucnhfaWQgPSBGQ19SWElEX0FOWTsKKworCS8qCisJICogYmFfYWNjX3RtcGwKKwkgKi8KKwliYV9hY2NfdG1wbC5zZXFfaWRfdmFsaWQgPSAwOworCWJhX2FjY190bXBsLmxvd19zZXFfY250ID0gMDsKKwliYV9hY2NfdG1wbC5oaWdoX3NlcV9jbnQgPSAweEZGRkY7CisKKwkvKgorCSAqIHBsb2dpX3RtcGwKKwkgKi8KKwlwbG9naV90bXBsLmNzcC52ZXJoaSA9IEZDX1BIX1ZFUl9QSF8zOworCXBsb2dpX3RtcGwuY3NwLnZlcmxvID0gRkNfUEhfVkVSXzRfMzsKKwlwbG9naV90bXBsLmNzcC5iYmNyZWQgPSBiZmFfb3NfaHRvbnMoMHgwMDA0KTsKKwlwbG9naV90bXBsLmNzcC5jaXJvID0gMHgxOworCXBsb2dpX3RtcGwuY3NwLmNpc2MgPSAweDA7CisJcGxvZ2lfdG1wbC5jc3AuYWx0YmJjcmVkID0gMHgwOworCXBsb2dpX3RtcGwuY3NwLmNvbnNlcSA9IGJmYV9vc19odG9ucygweDAwRkYpOworCXBsb2dpX3RtcGwuY3NwLnJvX2JpdG1hcCA9IGJmYV9vc19odG9ucygweDAwMDIpOworCXBsb2dpX3RtcGwuY3NwLmVfZF90b3YgPSBiZmFfb3NfaHRvbmwoMjAwMCk7CisKKwlwbG9naV90bXBsLmNsYXNzMy5jbGFzc192YWxpZCA9IDE7CisJcGxvZ2lfdG1wbC5jbGFzczMuc2VxdWVudGlhbCA9IDE7CisJcGxvZ2lfdG1wbC5jbGFzczMuY29uc2VxID0gMHhGRjsKKwlwbG9naV90bXBsLmNsYXNzMy5vc3B4ID0gMTsKKworCS8qCisJICogcHJsaV90bXBsCisJICovCisJcHJsaV90bXBsLmNvbW1hbmQgPSBGQ19FTFNfUFJMSTsKKwlwcmxpX3RtcGwucGdsZW4gPSAweDEwOworCXBybGlfdG1wbC5wYWdlYnl0ZXMgPSBiZmFfb3NfaHRvbnMoMHgwMDE0KTsKKwlwcmxpX3RtcGwucGFyYW1wYWdlLnR5cGUgPSBGQ19UWVBFX0ZDUDsKKwlwcmxpX3RtcGwucGFyYW1wYWdlLmltYWdlcGFpciA9IDE7CisJcHJsaV90bXBsLnBhcmFtcGFnZS5zZXJ2cGFyYW1zLnJ4cmRpc2FiID0gMTsKKworCS8qCisJICogcnJxX3RtcGwKKwkgKi8KKwlycnFfdG1wbC5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX1JSUTsKKworCS8qCisJICogZmNwX2ZjaHNfdG1wbAorCSAqLworCWZjcF9mY2hzX3RtcGwucm91dGluZyA9IEZDX1JUR19GQzRfREVWX0RBVEE7CisJZmNwX2ZjaHNfdG1wbC5jYXRfaW5mbyA9IEZDX0NBVF9VTlNPTElDSVRfQ01EOworCWZjcF9mY2hzX3RtcGwudHlwZSA9IEZDX1RZUEVfRkNQOworCWZjcF9mY2hzX3RtcGwuZl9jdGwgPQorCQliZmFfb3NfaHRvbjNiKEZDVExfRlNfRVhDSCB8IEZDVExfRU5EX1NFUSB8IEZDVExfU0lfWEZFUik7CisJZmNwX2ZjaHNfdG1wbC5zZXFfaWQgPSAxOworCWZjcF9mY2hzX3RtcGwucnhfaWQgPSBGQ19SWElEX0FOWTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2dzX2ZjaGRyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUzMiBveF9pZCkKK3sKKwliZmFfb3NfbWVtc2V0KGZjaHMsIDAsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CisKKwlmY2hzLT5yb3V0aW5nID0gRkNfUlRHX0ZDNF9ERVZfREFUQTsKKwlmY2hzLT5jYXRfaW5mbyA9IEZDX0NBVF9VTlNPTElDSVRfQ1RSTDsKKwlmY2hzLT50eXBlID0gRkNfVFlQRV9TRVJWSUNFUzsKKwlmY2hzLT5mX2N0bCA9CisJCWJmYV9vc19odG9uM2IoRkNUTF9TRVFfSU5JIHwgRkNUTF9GU19FWENIIHwgRkNUTF9FTkRfU0VRIHwKKwkJCSAgICAgIEZDVExfU0lfWEZFUik7CisJZmNocy0+cnhfaWQgPSBGQ19SWElEX0FOWTsKKwlmY2hzLT5kX2lkID0gKGRfaWQpOworCWZjaHMtPnNfaWQgPSAoc19pZCk7CisJZmNocy0+b3hfaWQgPSBiZmFfb3NfaHRvbnMob3hfaWQpOworCisJLyoqCisJICogQHRvZG8gbm8gbmVlZCB0byBzZXQgb3hfaWQgZm9yIHJlcXVlc3QKKwkgKiAgICAgICBubyBuZWVkIHRvIHNldCByeF9pZCBmb3IgcmVzcG9uc2UKKwkgKi8KK30KKwordm9pZAorZmNfZWxzX3JlcV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpCit7CisJYmZhX29zX21lbWNweShmY2hzLCAmZmNfZWxzX3JlcV90bXBsLCBzaXplb2Yoc3RydWN0IGZjaHNfcykpOworCWZjaHMtPmRfaWQgPSAoZF9pZCk7CisJZmNocy0+c19pZCA9IChzX2lkKTsKKwlmY2hzLT5veF9pZCA9IGJmYV9vc19odG9ucyhveF9pZCk7Cit9CisKK3N0YXRpYyB2b2lkCitmY19lbHNfcnNwX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCkKK3sKKwliZmFfb3NfbWVtY3B5KGZjaHMsICZmY19lbHNfcnNwX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CisJZmNocy0+ZF9pZCA9IGRfaWQ7CisJZmNocy0+c19pZCA9IHNfaWQ7CisJZmNocy0+b3hfaWQgPSBveF9pZDsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX2Vsc19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSAoZmNocyArIDEpOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBlbHNfY21kOworCisJbGVuID0gbGVuOworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCWNhc2UgRkNfRUxTX0xTX1JKVDoKKwkJaWYgKGxzX3JqdC0+cmVhc29uX2NvZGUgPT0gRkNfTFNfUkpUX1JTTl9MT0dJQ0FMX0JVU1kpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0JVU1kpOworCQllbHNlCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJY2FzZSBGQ19FTFNfQUNDOgorCQlyZXR1cm4gKEZDX1BBUlNFX09LKTsKKwl9CisJcmV0dXJuIChGQ19QQVJTRV9PSyk7Cit9CisKK3N0YXRpYyB2b2lkCitmY19ibHNfcnNwX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCkKK3sKKwliZmFfb3NfbWVtY3B5KGZjaHMsICZmY19ibHNfcnNwX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CisJZmNocy0+ZF9pZCA9IGRfaWQ7CisJZmNocy0+c19pZCA9IHNfaWQ7CisJZmNocy0+b3hfaWQgPSBveF9pZDsKK30KKworc3RhdGljICAgICAgICAgIHUxNgorZmNfcGxvZ2lfeF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCSB1MTYgcGR1X3NpemUsIHU4IGVsc19jb2RlKQoreworCXN0cnVjdCBmY19sb2dpX3MgICAgICpwbG9naSA9IChzdHJ1Y3QgZmNfbG9naV9zICopIChwbGQpOworCisJYmZhX29zX21lbWNweShwbG9naSwgJnBsb2dpX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7CisKKwlwbG9naS0+ZWxzX2NtZC5lbHNfY29kZSA9IGVsc19jb2RlOworCWlmIChlbHNfY29kZSA9PSBGQ19FTFNfUExPR0kpCisJCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWVsc2UKKwkJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwlwbG9naS0+Y3NwLnJ4c3ogPSBwbG9naS0+Y2xhc3MzLnJ4c3ogPSBiZmFfb3NfaHRvbnMocGR1X3NpemUpOworCisJYmZhX29zX21lbWNweSgmcGxvZ2ktPnBvcnRfbmFtZSwgJnBvcnRfbmFtZSwgc2l6ZW9mKHd3bl90KSk7CisJYmZhX29zX21lbWNweSgmcGxvZ2ktPm5vZGVfbmFtZSwgJm5vZGVfbmFtZSwgc2l6ZW9mKHd3bl90KSk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7Cit9CisKK3UxNgorZmNfZmxvZ2lfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksIHUzMiBzX2lkLAorCQl1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lLAorCQl1MTYgcGR1X3NpemUsIHU4IHNldF9ucGl2LCB1OCBzZXRfYXV0aCwKKwkJdTE2IGxvY2FsX2JiX2NyZWRpdHMpCit7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19GQUJSSUNfUE9SVCk7CisJdTMyIAkqdnZsX2luZm87CisKKwliZmFfb3NfbWVtY3B5KGZsb2dpLCAmcGxvZ2lfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKKworCWZsb2dpLT5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX0ZMT0dJOworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJZmxvZ2ktPmNzcC5yeHN6ID0gZmxvZ2ktPmNsYXNzMy5yeHN6ID0gYmZhX29zX2h0b25zKHBkdV9zaXplKTsKKwlmbG9naS0+cG9ydF9uYW1lID0gcG9ydF9uYW1lOworCWZsb2dpLT5ub2RlX25hbWUgPSBub2RlX25hbWU7CisKKwkvKgorCSAqIFNldCB0aGUgTlBJViBDYXBhYmlsaXR5IEJpdCAoIHdvcmQgMSwgYml0IDMxKSBvZiBDb21tb24KKwkgKiBTZXJ2aWNlIFBhcmFtZXRlcnMuCisJICovCisJZmxvZ2ktPmNzcC5jaXJvID0gc2V0X25waXY7CisKKwkvKiBzZXQgQVVUSCBjYXBhYmlsaXR5ICovCisJZmxvZ2ktPmNzcC5zZWN1cml0eSA9IHNldF9hdXRoOworCisJZmxvZ2ktPmNzcC5iYmNyZWQgPSBiZmFfb3NfaHRvbnMobG9jYWxfYmJfY3JlZGl0cyk7CisKKwkvKiBTZXQgYnJjZCB0b2tlbiBpbiBWVkwgKi8KKwl2dmxfaW5mbyA9ICh1MzIgKikmZmxvZ2ktPnZ2bFswXTsKKworCS8qIHNldCB0aGUgZmxhZyB0byBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb2YgVlZMICovCisJZmxvZ2ktPmNzcC5ucGl2X3N1cHAgICAgPSAxOyAvKiBAdG9kby4gZmllbGQgbmFtZSBpcyBub3QgY29ycmVjdCAqLworCXZ2bF9pbmZvWzBdCT0gYmZhX29zX2h0b25sKEZMT0dJX1ZWTF9CUkNEKTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKK30KKwordTE2CitmY19mbG9naV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksIHUzMiBzX2lkLAorCQkgICB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lLAorCQkgICB1MTYgcGR1X3NpemUsIHUxNiBsb2NhbF9iYl9jcmVkaXRzKQoreworCXUzMiAgICAgICAgZF9pZCA9IDA7CisKKwliZmFfb3NfbWVtY3B5KGZsb2dpLCAmcGxvZ2lfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCWZsb2dpLT5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX0FDQzsKKwlmbG9naS0+Y3NwLnJ4c3ogPSBmbG9naS0+Y2xhc3MzLnJ4c3ogPSBiZmFfb3NfaHRvbnMocGR1X3NpemUpOworCWZsb2dpLT5wb3J0X25hbWUgPSBwb3J0X25hbWU7CisJZmxvZ2ktPm5vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKworCWZsb2dpLT5jc3AuYmJjcmVkID0gYmZhX29zX2h0b25zKGxvY2FsX2JiX2NyZWRpdHMpOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworfQorCit1MTYKK2ZjX2ZkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sb2dpX3MgKmZsb2dpLCB1MzIgc19pZCwKKwkJdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJdTE2IHBkdV9zaXplKQoreworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfRkFCUklDX1BPUlQpOworCisJYmZhX29zX21lbWNweShmbG9naSwgJnBsb2dpX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7CisKKwlmbG9naS0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19GRElTQzsKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCWZsb2dpLT5jc3AucnhzeiA9IGZsb2dpLT5jbGFzczMucnhzeiA9IGJmYV9vc19odG9ucyhwZHVfc2l6ZSk7CisJZmxvZ2ktPnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKwlmbG9naS0+bm9kZV9uYW1lID0gbm9kZV9uYW1lOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworfQorCit1MTYKK2ZjX3Bsb2dpX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsIHUzMiBzX2lkLAorCSAgICAgICB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lLAorCSAgICAgICB1MTYgcGR1X3NpemUpCit7CisJcmV0dXJuIGZjX3Bsb2dpX3hfYnVpbGQoZmNocywgcGxkLCBkX2lkLCBzX2lkLCBveF9pZCwgcG9ydF9uYW1lLAorCQkJCW5vZGVfbmFtZSwgcGR1X3NpemUsIEZDX0VMU19QTE9HSSk7Cit9CisKK3UxNgorZmNfcGxvZ2lfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkgICB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lLAorCQkgICB1MTYgcGR1X3NpemUpCit7CisJcmV0dXJuIGZjX3Bsb2dpX3hfYnVpbGQoZmNocywgcGxkLCBkX2lkLCBzX2lkLCBveF9pZCwgcG9ydF9uYW1lLAorCQkJCW5vZGVfbmFtZSwgcGR1X3NpemUsIEZDX0VMU19BQ0MpOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcGxvZ2lfcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4sIHd3bl90IHBvcnRfbmFtZSkKK3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSAoZmNocyArIDEpOworCXN0cnVjdCBmY19sb2dpX3MgICAgICpwbG9naTsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MgICAgKmxzX3JqdDsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKwljYXNlIEZDX0VMU19MU19SSlQ6CisJCWxzX3JqdCA9IChzdHJ1Y3QgZmNfbHNfcmp0X3MgKikgKGZjaHMgKyAxKTsKKwkJaWYgKGxzX3JqdC0+cmVhc29uX2NvZGUgPT0gRkNfTFNfUkpUX1JTTl9MT0dJQ0FMX0JVU1kpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0JVU1kpOworCQllbHNlCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCWNhc2UgRkNfRUxTX0FDQzoKKwkJcGxvZ2kgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCQlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKQorCQkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCQlpZiAoIXd3bl9pc19lcXVhbChwbG9naS0+cG9ydF9uYW1lLCBwb3J0X25hbWUpKQorCQkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCQlpZiAoIXBsb2dpLT5jbGFzczMuY2xhc3NfdmFsaWQpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJCWlmIChiZmFfb3NfbnRvaHMocGxvZ2ktPmNsYXNzMy5yeHN6KSA8IChGQ19NSU5fUERVU1opKQorCQkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCQlyZXR1cm4gKEZDX1BBUlNFX09LKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCX0KK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX3Bsb2dpX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMpCit7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBsb2dpID0gKHN0cnVjdCBmY19sb2dpX3MgKikgKGZjaHMgKyAxKTsKKworCWlmIChwbG9naS0+Y2xhc3MzLmNsYXNzX3ZhbGlkICE9IDEpCisJCXJldHVybiBGQ19QQVJTRV9GQUlMVVJFOworCisJaWYgKChiZmFfb3NfbnRvaHMocGxvZ2ktPmNsYXNzMy5yeHN6KSA8IEZDX01JTl9QRFVTWikKKwkgICAgfHwgKGJmYV9vc19udG9ocyhwbG9naS0+Y2xhc3MzLnJ4c3opID4gRkNfTUFYX1BEVVNaKQorCSAgICB8fCAocGxvZ2ktPmNsYXNzMy5yeHN6ID09IDApKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJcmV0dXJuIEZDX1BBUlNFX09LOworfQorCit1MTYKK2ZjX3BybGlfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJICAgICAgdTE2IG94X2lkKQoreworCXN0cnVjdCBmY19wcmxpX3MgICAgICAqcHJsaSA9IChzdHJ1Y3QgZmNfcHJsaV9zICopIChwbGQpOworCisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJYmZhX29zX21lbWNweShwcmxpLCAmcHJsaV90bXBsLCBzaXplb2Yoc3RydWN0IGZjX3BybGlfcykpOworCisJcHJsaS0+Y29tbWFuZCA9IEZDX0VMU19QUkxJOworCXBybGktPnBhcmFtcGFnZS5zZXJ2cGFyYW1zLmluaXRpYXRvciAgICAgPSAxOworCXBybGktPnBhcmFtcGFnZS5zZXJ2cGFyYW1zLnJldHJ5ICAgICAgICAgPSAxOworCXBybGktPnBhcmFtcGFnZS5zZXJ2cGFyYW1zLnJlY19zdXBwb3J0ICAgPSAxOworCXBybGktPnBhcmFtcGFnZS5zZXJ2cGFyYW1zLnRhc2tfcmV0cnlfaWQgPSAwOworCXBybGktPnBhcmFtcGFnZS5zZXJ2cGFyYW1zLmNvbmZpcm0gICAgICAgPSAxOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3BybGlfcykpOworfQorCit1MTYKK2ZjX3BybGlfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkgIHUxNiBveF9pZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUpCit7CisJc3RydWN0IGZjX3BybGlfcyAgICAgICpwcmxpID0gKHN0cnVjdCBmY19wcmxpX3MgKikgKHBsZCk7CisKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwliZmFfb3NfbWVtY3B5KHBybGksICZwcmxpX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSk7CisKKwlwcmxpLT5jb21tYW5kID0gRkNfRUxTX0FDQzsKKworCWlmICgocm9sZSAmIEJGQV9QT1JUX1JPTEVfRkNQX1RNKSA9PSBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkKKwkJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMudGFyZ2V0ID0gMTsKKwllbHNlCisJCXBybGktPnBhcmFtcGFnZS5zZXJ2cGFyYW1zLmluaXRpYXRvciA9IDE7CisKKwlwcmxpLT5wYXJhbXBhZ2UucnNwY29kZSA9IEZDX1BSTElfQUNDX1hRVEQ7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSk7Cit9CisKK2VudW0gZmNfcGFyc2Vfc3RhdHVzCitmY19wcmxpX3JzcF9wYXJzZShzdHJ1Y3QgZmNfcHJsaV9zICpwcmxpLCBpbnQgbGVuKQoreworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGZjX3BybGlfcykpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAocHJsaS0+Y29tbWFuZCAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJaWYgKChwcmxpLT5wYXJhbXBhZ2UucnNwY29kZSAhPSBGQ19QUkxJX0FDQ19YUVREKQorCSAgICAmJiAocHJsaS0+cGFyYW1wYWdlLnJzcGNvZGUgIT0gRkNfUFJMSV9BQ0NfUFJFREVGX0lNRykpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAocHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMudGFyZ2V0ICE9IDEpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlyZXR1cm4gKEZDX1BBUlNFX09LKTsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX3BybGlfcGFyc2Uoc3RydWN0IGZjX3BybGlfcyAqcHJsaSkKK3sKKwlpZiAocHJsaS0+cGFyYW1wYWdlLnR5cGUgIT0gRkNfVFlQRV9GQ1ApCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAoIXBybGktPnBhcmFtcGFnZS5pbWFnZXBhaXIpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAoIXBybGktPnBhcmFtcGFnZS5zZXJ2cGFyYW1zLmluaXRpYXRvcikKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCit1MTYKK2ZjX2xvZ29fYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ29fcyAqbG9nbywgdTMyIGRfaWQsCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUpCit7CisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwltZW1zZXQobG9nbywgJ1wwJywgc2l6ZW9mKHN0cnVjdCBmY19sb2dvX3MpKTsKKwlsb2dvLT5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX0xPR087CisJbG9nby0+bnBvcnRfaWQgPSAoc19pZCk7CisJbG9nby0+b3JpZ19wb3J0X25hbWUgPSBwb3J0X25hbWU7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfbG9nb19zKSk7Cit9CisKK3N0YXRpYyAgICAgICAgICB1MTYKK2ZjX2FkaXNjX3hfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2FkaXNjX3MgKmFkaXNjLCB1MzIgZF9pZCwKKwkJIHUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwKKwkJIHd3bl90IG5vZGVfbmFtZSwgdTggZWxzX2NvZGUpCit7CisJbWVtc2V0KGFkaXNjLCAnXDAnLCBzaXplb2Yoc3RydWN0IGZjX2FkaXNjX3MpKTsKKworCWFkaXNjLT5lbHNfY21kLmVsc19jb2RlID0gZWxzX2NvZGU7CisKKwlpZiAoZWxzX2NvZGUgPT0gRkNfRUxTX0FESVNDKQorCQlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwllbHNlCisJCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJYWRpc2MtPm9yaWdfSEEgPSAwOworCWFkaXNjLT5vcmlnX3BvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKwlhZGlzYy0+b3JpZ19ub2RlX25hbWUgPSBub2RlX25hbWU7CisJYWRpc2MtPm5wb3J0X2lkID0gKHNfaWQpOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2FkaXNjX3MpKTsKK30KKwordTE2CitmY19hZGlzY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsIHUzMiBkX2lkLAorCQl1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsCisJCXd3bl90IG5vZGVfbmFtZSkKK3sKKwlyZXR1cm4gZmNfYWRpc2NfeF9idWlsZChmY2hzLCBhZGlzYywgZF9pZCwgc19pZCwgb3hfaWQsIHBvcnRfbmFtZSwKKwkJCQlub2RlX25hbWUsIEZDX0VMU19BRElTQyk7Cit9CisKK3UxNgorZmNfYWRpc2NfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19hZGlzY19zICphZGlzYywgdTMyIGRfaWQsCisJCSAgIHUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwKKwkJICAgd3duX3Qgbm9kZV9uYW1lKQoreworCXJldHVybiBmY19hZGlzY194X2J1aWxkKGZjaHMsIGFkaXNjLCBkX2lkLCBzX2lkLCBveF9pZCwgcG9ydF9uYW1lLAorCQkJCW5vZGVfbmFtZSwgRkNfRUxTX0FDQyk7Cit9CisKK2VudW0gZmNfcGFyc2Vfc3RhdHVzCitmY19hZGlzY19yc3BfcGFyc2Uoc3RydWN0IGZjX2FkaXNjX3MgKmFkaXNjLCBpbnQgbGVuLCB3d25fdCBwb3J0X25hbWUsCisJCQkJIHd3bl90IG5vZGVfbmFtZSkKK3sKKworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGZjX2FkaXNjX3MpKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJaWYgKGFkaXNjLT5lbHNfY21kLmVsc19jb2RlICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAoIXd3bl9pc19lcXVhbChhZGlzYy0+b3JpZ19wb3J0X25hbWUsIHBvcnRfbmFtZSkpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlyZXR1cm4gKEZDX1BBUlNFX09LKTsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX2FkaXNjX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGhvc3RfZGFwLAorCQkgd3duX3Qgbm9kZV9uYW1lLCB3d25fdCBwb3J0X25hbWUpCit7CisJc3RydWN0IGZjX2FkaXNjX3MgICAgICphZGlzYyA9IChzdHJ1Y3QgZmNfYWRpc2NfcyAqKSBwbGQ7CisKKwlpZiAoYWRpc2MtPmVsc19jbWQuZWxzX2NvZGUgIT0gRkNfRUxTX0FDQykKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICgoYWRpc2MtPm5wb3J0X2lkID09IChob3N0X2RhcCkpCisJICAgICYmIHd3bl9pc19lcXVhbChhZGlzYy0+b3JpZ19wb3J0X25hbWUsIHBvcnRfbmFtZSkKKwkgICAgJiYgd3duX2lzX2VxdWFsKGFkaXNjLT5vcmlnX25vZGVfbmFtZSwgbm9kZV9uYW1lKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9PSyk7CisKKwlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcGRpc2NfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgd3duX3Qgbm9kZV9uYW1lLCB3d25fdCBwb3J0X25hbWUpCit7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBkaXNjID0gKHN0cnVjdCBmY19sb2dpX3MgKikgKGZjaHMgKyAxKTsKKworCWlmIChwZGlzYy0+Y2xhc3MzLmNsYXNzX3ZhbGlkICE9IDEpCisJCXJldHVybiBGQ19QQVJTRV9GQUlMVVJFOworCisJaWYgKChiZmFfb3NfbnRvaHMocGRpc2MtPmNsYXNzMy5yeHN6KSA8CisJCSAoRkNfTUlOX1BEVVNaIC0gc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKSkKKwkgICAgfHwgKHBkaXNjLT5jbGFzczMucnhzeiA9PSAwKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghd3duX2lzX2VxdWFsKHBkaXNjLT5wb3J0X25hbWUsIHBvcnRfbmFtZSkpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAoIXd3bl9pc19lcXVhbChwZGlzYy0+bm9kZV9uYW1lLCBub2RlX25hbWUpKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJcmV0dXJuIEZDX1BBUlNFX09LOworfQorCit1MTYKK2ZjX2FidHNfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQpCit7CisJYmZhX29zX21lbWNweShmY2hzLCAmZmNfYmxzX3JlcV90bXBsLCBzaXplb2Yoc3RydWN0IGZjaHNfcykpOworCWZjaHMtPmNhdF9pbmZvID0gRkNfQ0FUX0FCVFM7CisJZmNocy0+ZF9pZCA9IChkX2lkKTsKKwlmY2hzLT5zX2lkID0gKHNfaWQpOworCWZjaHMtPm94X2lkID0gYmZhX29zX2h0b25zKG94X2lkKTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX2FidHNfcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pCit7CisJaWYgKChmY2hzLT5jYXRfaW5mbyA9PSBGQ19DQVRfQkFfQUNDKQorCSAgICB8fCAoZmNocy0+Y2F0X2luZm8gPT0gRkNfQ0FUX0JBX1JKVCkpCisJCXJldHVybiAoRkNfUEFSU0VfT0spOworCisJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKK30KKwordTE2CitmY19ycnFfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JycV9zICpycnEsIHUzMiBkX2lkLAorCQkJIHUzMiBzX2lkLCB1MTYgb3hfaWQsIHUxNiBycnFfb3hpZCkKK3sKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCS8qCisJICogYnVpbGQgcnJxIHBheWxvYWQKKwkgKi8KKwliZmFfb3NfbWVtY3B5KHJycSwgJnJycV90bXBsLCBzaXplb2Yoc3RydWN0IGZjX3JycV9zKSk7CisJcnJxLT5zX2lkID0gKHNfaWQpOworCXJycS0+b3hfaWQgPSBiZmFfb3NfaHRvbnMocnJxX294aWQpOworCXJycS0+cnhfaWQgPSBGQ19SWElEX0FOWTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19ycnFfcykpOworfQorCit1MTYKK2ZjX2xvZ29fYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkgIHUxNiBveF9pZCkKK3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmFjYyA9IHBsZDsKKworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJbWVtc2V0KGFjYywgMCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfY21kX3MpKTsKKwlhY2MtPmVsc19jb2RlID0gRkNfRUxTX0FDQzsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19lbHNfY21kX3MpKTsKK30KKwordTE2CitmY19sc19yanRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xzX3JqdF9zICpsc19yanQsIHUzMiBkX2lkLAorCQl1MzIgc19pZCwgdTE2IG94X2lkLCB1OCByZWFzb25fY29kZSwKKwkJdTggcmVhc29uX2NvZGVfZXhwbCkKK3sKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwltZW1zZXQobHNfcmp0LCAwLCBzaXplb2Yoc3RydWN0IGZjX2xzX3JqdF9zKSk7CisKKwlsc19yanQtPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfTFNfUkpUOworCWxzX3JqdC0+cmVhc29uX2NvZGUgPSByZWFzb25fY29kZTsKKwlsc19yanQtPnJlYXNvbl9jb2RlX2V4cGwgPSByZWFzb25fY29kZV9leHBsOworCWxzX3JqdC0+dmVuZG9yX3VuaXF1ZSA9IDB4MDA7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfbHNfcmp0X3MpKTsKK30KKwordTE2CitmY19iYV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2JhX2FjY19zICpiYV9hY2MsIHUzMiBkX2lkLAorCQl1MzIgc19pZCwgdTE2IG94X2lkLCB1MTYgcnhfaWQpCit7CisJZmNfYmxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwliZmFfb3NfbWVtY3B5KGJhX2FjYywgJmJhX2FjY190bXBsLCBzaXplb2Yoc3RydWN0IGZjX2JhX2FjY19zKSk7CisKKwlmY2hzLT5yeF9pZCA9IHJ4X2lkOworCisJYmFfYWNjLT5veF9pZCA9IGZjaHMtPm94X2lkOworCWJhX2FjYy0+cnhfaWQgPSBmY2hzLT5yeF9pZDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19iYV9hY2NfcykpOworfQorCit1MTYKK2ZjX2xzX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfZWxzX2NtZF9zICplbHNfY21kLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQpCit7CisJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJbWVtc2V0KGVsc19jbWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNfZWxzX2NtZF9zKSk7CisJZWxzX2NtZC0+ZWxzX2NvZGUgPSBGQ19FTFNfQUNDOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2Vsc19jbWRfcykpOworfQorCitpbnQKK2ZjX2xvZ291dF9wYXJhbXNfcGFnZXMoc3RydWN0IGZjaHNfcyAqZmNfZnJhbWUsIHU4IGVsc19jb2RlKQoreworCWludCAgICAgICAgICAgICBudW1fcGFnZXMgPSAwOworCXN0cnVjdCBmY19wcmxvX3MgICAgICAqcHJsbzsKKwlzdHJ1Y3QgZmNfdHBybG9fcyAgICAgKnRwcmxvOworCisJaWYgKGVsc19jb2RlID09IEZDX0VMU19QUkxPKSB7CisJCXBybG8gPSAoc3RydWN0IGZjX3BybG9fcyAqKSAoZmNfZnJhbWUgKyAxKTsKKwkJbnVtX3BhZ2VzID0gKGJmYV9vc19udG9ocyhwcmxvLT5wYXlsb2FkX2xlbikgLSA0KSAvIDE2OworCX0gZWxzZSB7CisJCXRwcmxvID0gKHN0cnVjdCBmY190cHJsb19zICopIChmY19mcmFtZSArIDEpOworCQludW1fcGFnZXMgPSAoYmZhX29zX250b2hzKHRwcmxvLT5wYXlsb2FkX2xlbikgLSA0KSAvIDE2OworCX0KKwlyZXR1cm4gbnVtX3BhZ2VzOworfQorCit1MTYKK2ZjX3RwcmxvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfdHBybG9fYWNjX3MgKnRwcmxvX2FjYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJaW50IG51bV9wYWdlcykKK3sKKwlpbnQgICAgICAgICAgICAgcGFnZTsKKworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJbWVtc2V0KHRwcmxvX2FjYywgMCwgKG51bV9wYWdlcyAqIDE2KSArIDQpOworCXRwcmxvX2FjYy0+Y29tbWFuZCA9IEZDX0VMU19BQ0M7CisKKwl0cHJsb19hY2MtPnBhZ2VfbGVuID0gMHgxMDsKKwl0cHJsb19hY2MtPnBheWxvYWRfbGVuID0gYmZhX29zX2h0b25zKChudW1fcGFnZXMgKiAxNikgKyA0KTsKKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBudW1fcGFnZXM7IHBhZ2UrKykgeworCQl0cHJsb19hY2MtPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ub3BhX3ZhbGlkID0gMDsKKwkJdHBybG9fYWNjLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJwYV92YWxpZCA9IDA7CisJCXRwcmxvX2FjYy0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5mYzR0eXBlX2NzcCA9IEZDX1RZUEVfRkNQOworCQl0cHJsb19hY2MtPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ub3JpZ19wcm9jZXNzX2Fzc2MgPSAwOworCQl0cHJsb19hY2MtPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ucmVzcF9wcm9jZXNzX2Fzc2MgPSAwOworCX0KKwlyZXR1cm4gKGJmYV9vc19udG9ocyh0cHJsb19hY2MtPnBheWxvYWRfbGVuKSk7Cit9CisKK3UxNgorZmNfcHJsb19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3BybG9fYWNjX3MgKnBybG9fYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlpbnQgbnVtX3BhZ2VzKQoreworCWludCAgICAgICAgICAgICBwYWdlOworCisJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwltZW1zZXQocHJsb19hY2MsIDAsIChudW1fcGFnZXMgKiAxNikgKyA0KTsKKwlwcmxvX2FjYy0+Y29tbWFuZCA9IEZDX0VMU19BQ0M7CisJcHJsb19hY2MtPnBhZ2VfbGVuID0gMHgxMDsKKwlwcmxvX2FjYy0+cGF5bG9hZF9sZW4gPSBiZmFfb3NfaHRvbnMoKG51bV9wYWdlcyAqIDE2KSArIDQpOworCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG51bV9wYWdlczsgcGFnZSsrKSB7CisJCXBybG9fYWNjLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0ub3BhX3ZhbGlkID0gMDsKKwkJcHJsb19hY2MtPnBybG9fYWNjX3BhcmFtc1twYWdlXS5ycGFfdmFsaWQgPSAwOworCQlwcmxvX2FjYy0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLmZjNHR5cGVfY3NwID0gRkNfVFlQRV9GQ1A7CisJCXBybG9fYWNjLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0ub3JpZ19wcm9jZXNzX2Fzc2MgPSAwOworCQlwcmxvX2FjYy0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJlc3BfcHJvY2Vzc19hc3NjID0gMDsKKwl9CisKKwlyZXR1cm4gKGJmYV9vc19udG9ocyhwcmxvX2FjYy0+cGF5bG9hZF9sZW4pKTsKK30KKwordTE2CitmY19ybmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ybmlkX2NtZF9zICpybmlkLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHUzMiBkYXRhX2Zvcm1hdCkKK3sKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCW1lbXNldChybmlkLCAwLCBzaXplb2Yoc3RydWN0IGZjX3JuaWRfY21kX3MpKTsKKworCXJuaWQtPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfUk5JRDsKKwlybmlkLT5ub2RlX2lkX2RhdGFfZm9ybWF0ID0gZGF0YV9mb3JtYXQ7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcm5pZF9jbWRfcykpOworfQorCit1MTYKK2ZjX3JuaWRfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ybmlkX2FjY19zICpybmlkX2FjYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJdTMyIGRhdGFfZm9ybWF0LAorCQkJc3RydWN0IGZjX3JuaWRfY29tbW9uX2lkX2RhdGFfcyAqY29tbW9uX2lkX2RhdGEsCisJCQlzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyAqZ2VuX3RvcG9fZGF0YSkKK3sKKwltZW1zZXQocm5pZF9hY2MsIDAsIHNpemVvZihzdHJ1Y3QgZmNfcm5pZF9hY2NfcykpOworCisJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwlybmlkX2FjYy0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19BQ0M7CisJcm5pZF9hY2MtPm5vZGVfaWRfZGF0YV9mb3JtYXQgPSBkYXRhX2Zvcm1hdDsKKwlybmlkX2FjYy0+Y29tbW9uX2lkX2RhdGFfbGVuZ3RoID0KKwkJCXNpemVvZihzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zKTsKKwlybmlkX2FjYy0+Y29tbW9uX2lkX2RhdGEgPSAqY29tbW9uX2lkX2RhdGE7CisKKwlpZiAoZGF0YV9mb3JtYXQgPT0gUk5JRF9OT0RFSURfREFUQV9GT1JNQVRfRElTQ09WRVJZKSB7CisJCXJuaWRfYWNjLT5zcGVjaWZpY19pZF9kYXRhX2xlbmd0aCA9CisJCQlzaXplb2Yoc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MpOworCQliZmFfb3NfYXNzaWduKHJuaWRfYWNjLT5nZW5fdG9wb2xvZ3lfZGF0YSwgKmdlbl90b3BvX2RhdGEpOworCQlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcm5pZF9hY2NfcykpOworCX0gZWxzZSB7CisJCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2FjY19zKSAtCisJCQlzaXplb2Yoc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MpKTsKKwl9CisKK30KKwordTE2CitmY19ycHNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjX2NtZF9zICpycHNjLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQpCit7CisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwltZW1zZXQocnBzYywgMCwgc2l6ZW9mKHN0cnVjdCBmY19ycHNjX2NtZF9zKSk7CisKKwlycHNjLT5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX1JQU0M7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3Jwc2NfY21kX3MpKTsKK30KKwordTE2CitmY19ycHNjMl9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcnBzYzJfY21kX3MgKnJwc2MyLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MzIgKnBpZF9saXN0LAorCQkJdTE2IG5waWRzKQoreworCXUzMiBkY3Rscl9pZCA9IEZDX0RPTUFJTl9DVFJMUihiZmFfb3NfaHRvbjNiKGRfaWQpKTsKKwlpbnQgaSA9IDA7CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGJmYV9vc19odG9uM2IoZGN0bHJfaWQpLCBzX2lkLCAwKTsKKworCW1lbXNldChycHNjMiwgMCwgc2l6ZW9mKHN0cnVjdCBmY19ycHNjMl9jbWRfcykpOworCisJcnBzYzItPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfUlBTQzsKKwlycHNjMi0+dG9rZW4gPSBiZmFfb3NfaHRvbmwoRkNfQlJDRF9UT0tFTik7CisJcnBzYzItPm51bV9waWRzICA9IGJmYV9vc19odG9ucyhucGlkcyk7CisJZm9yIChpID0gMDsgaSA8IG5waWRzOyBpKyspCisJCXJwc2MyLT5waWRfbGlzdFtpXS5waWQgPSBwaWRfbGlzdFtpXTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19ycHNjMl9jbWRfcykgKyAoKG5waWRzIC0gMSkgKgorCQkJKHNpemVvZih1MzIpKSkpOworfQorCit1MTYKK2ZjX3Jwc2NfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjX2FjY19zICpycHNjX2FjYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJc3RydWN0IGZjX3Jwc2Nfc3BlZWRfaW5mb19zICpvcGVyX3NwZWVkKQoreworCW1lbXNldChycHNjX2FjYywgMCwgc2l6ZW9mKHN0cnVjdCBmY19ycHNjX2FjY19zKSk7CisKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCXJwc2NfYWNjLT5jb21tYW5kID0gRkNfRUxTX0FDQzsKKwlycHNjX2FjYy0+bnVtX2VudHJpZXMgPSBiZmFfb3NfaHRvbnMoMSk7CisKKwlycHNjX2FjYy0+c3BlZWRfaW5mb1swXS5wb3J0X3NwZWVkX2NhcCA9CisJCWJmYV9vc19odG9ucyhvcGVyX3NwZWVkLT5wb3J0X3NwZWVkX2NhcCk7CisKKwlycHNjX2FjYy0+c3BlZWRfaW5mb1swXS5wb3J0X29wX3NwZWVkID0KKwkJYmZhX29zX2h0b25zKG9wZXJfc3BlZWQtPnBvcnRfb3Bfc3BlZWQpOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3Jwc2NfYWNjX3MpKTsKKworfQorCisvKgorICogVEJEIC0KKyAqIC4gZ2V0IHJpZCBvZiB1bm5lY2Vzc2FyeSBtZW1zZXRzCisgKi8KKwordTE2CitmY19sb2dvX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwlsZW4gPSBsZW47CisJaWYgKGVsc19jbWQtPmVsc19jb2RlICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiBGQ19QQVJTRV9GQUlMVVJFOworCisJcmV0dXJuIEZDX1BBUlNFX09LOworfQorCit1MTYKK2ZjX3BkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCQl1MTYgcGR1X3NpemUpCit7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBkaXNjID0gKHN0cnVjdCBmY19sb2dpX3MgKikgKGZjaHMgKyAxKTsKKworCWJmYV9vc19tZW1jcHkocGRpc2MsICZwbG9naV90bXBsLCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworCisJcGRpc2MtPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfUERJU0M7CisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwlwZGlzYy0+Y3NwLnJ4c3ogPSBwZGlzYy0+Y2xhc3MzLnJ4c3ogPSBiZmFfb3NfaHRvbnMocGR1X3NpemUpOworCXBkaXNjLT5wb3J0X25hbWUgPSBwb3J0X25hbWU7CisJcGRpc2MtPm5vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKK30KKwordTE2CitmY19wZGlzY19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbiwgd3duX3QgcG9ydF9uYW1lKQoreworCXN0cnVjdCBmY19sb2dpX3MgICAgICpwZGlzYyA9IChzdHJ1Y3QgZmNfbG9naV9zICopIChmY2hzICsgMSk7CisKKwlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKQorCQlyZXR1cm4gKEZDX1BBUlNFX0xFTl9JTlZBTCk7CisKKwlpZiAocGRpc2MtPmVsc19jbWQuZWxzX2NvZGUgIT0gRkNfRUxTX0FDQykKKwkJcmV0dXJuIChGQ19QQVJTRV9BQ0NfSU5WQUwpOworCisJaWYgKCF3d25faXNfZXF1YWwocGRpc2MtPnBvcnRfbmFtZSwgcG9ydF9uYW1lKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9QV1dOX05PVF9FUVVBTCk7CisKKwlpZiAoIXBkaXNjLT5jbGFzczMuY2xhc3NfdmFsaWQpCisJCXJldHVybiAoRkNfUEFSU0VfTldXTl9OT1RfRVFVQUwpOworCisJaWYgKGJmYV9vc19udG9ocyhwZGlzYy0+Y2xhc3MzLnJ4c3opIDwgKEZDX01JTl9QRFVTWikpCisJCXJldHVybiAoRkNfUEFSU0VfUlhTWl9JTlZBTCk7CisKKwlyZXR1cm4gKEZDX1BBUlNFX09LKTsKK30KKwordTE2CitmY19wcmxvX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgIGludCBudW1fcGFnZXMpCit7CisJc3RydWN0IGZjX3BybG9fcyAgICAgICpwcmxvID0gKHN0cnVjdCBmY19wcmxvX3MgKikgKGZjaHMgKyAxKTsKKwlpbnQgICAgICAgICAgICAgcGFnZTsKKworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCW1lbXNldChwcmxvLCAwLCAobnVtX3BhZ2VzICogMTYpICsgNCk7CisJcHJsby0+Y29tbWFuZCA9IEZDX0VMU19QUkxPOworCXBybG8tPnBhZ2VfbGVuID0gMHgxMDsKKwlwcmxvLT5wYXlsb2FkX2xlbiA9IGJmYV9vc19odG9ucygobnVtX3BhZ2VzICogMTYpICsgNCk7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJcHJsby0+cHJsb19wYXJhbXNbcGFnZV0udHlwZSA9IEZDX1RZUEVfRkNQOworCQlwcmxvLT5wcmxvX3BhcmFtc1twYWdlXS5vcGFfdmFsaWQgPSAwOworCQlwcmxvLT5wcmxvX3BhcmFtc1twYWdlXS5ycGFfdmFsaWQgPSAwOworCQlwcmxvLT5wcmxvX3BhcmFtc1twYWdlXS5vcmlnX3Byb2Nlc3NfYXNzYyA9IDA7CisJCXBybG8tPnBybG9fcGFyYW1zW3BhZ2VdLnJlc3BfcHJvY2Vzc19hc3NjID0gMDsKKwl9CisKKwlyZXR1cm4gKGJmYV9vc19udG9ocyhwcmxvLT5wYXlsb2FkX2xlbikpOworfQorCit1MTYKK2ZjX3BybG9fcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pCit7CisJc3RydWN0IGZjX3BybG9fYWNjX3MgICpwcmxvID0gKHN0cnVjdCBmY19wcmxvX2FjY19zICopIChmY2hzICsgMSk7CisJaW50ICAgICAgICAgICAgIG51bV9wYWdlcyA9IDA7CisJaW50ICAgICAgICAgICAgIHBhZ2UgPSAwOworCisJbGVuID0gbGVuOworCisJaWYgKHBybG8tPmNvbW1hbmQgIT0gRkNfRUxTX0FDQykKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCW51bV9wYWdlcyA9ICgoYmZhX29zX250b2hzKHBybG8tPnBheWxvYWRfbGVuKSkgLSA0KSAvIDE2OworCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG51bV9wYWdlczsgcGFnZSsrKSB7CisJCWlmIChwcmxvLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0udHlwZSAhPSBGQ19UWVBFX0ZDUCkKKwkJCXJldHVybiBGQ19QQVJTRV9GQUlMVVJFOworCisJCWlmIChwcmxvLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0ub3BhX3ZhbGlkICE9IDApCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKworCQlpZiAocHJsby0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJwYV92YWxpZCAhPSAwKQorCQkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwkJaWYgKHBybG8tPnBybG9fYWNjX3BhcmFtc1twYWdlXS5vcmlnX3Byb2Nlc3NfYXNzYyAhPSAwKQorCQkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwkJaWYgKHBybG8tPnBybG9fYWNjX3BhcmFtc1twYWdlXS5yZXNwX3Byb2Nlc3NfYXNzYyAhPSAwKQorCQkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisJfQorCXJldHVybiAoRkNfUEFSU0VfT0spOworCit9CisKK3UxNgorZmNfdHBybG9fYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCBpbnQgbnVtX3BhZ2VzLAorCQkJZW51bSBmY190cHJsb190eXBlIHRwcmxvX3R5cGUsIHUzMiB0cHJfaWQpCit7CisJc3RydWN0IGZjX3RwcmxvX3MgICAgICp0cHJsbyA9IChzdHJ1Y3QgZmNfdHBybG9fcyAqKSAoZmNocyArIDEpOworCWludCAgICAgICAgICAgICBwYWdlOworCisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJbWVtc2V0KHRwcmxvLCAwLCAobnVtX3BhZ2VzICogMTYpICsgNCk7CisJdHBybG8tPmNvbW1hbmQgPSBGQ19FTFNfVFBSTE87CisJdHBybG8tPnBhZ2VfbGVuID0gMHgxMDsKKwl0cHJsby0+cGF5bG9hZF9sZW4gPSBiZmFfb3NfaHRvbnMoKG51bV9wYWdlcyAqIDE2KSArIDQpOworCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG51bV9wYWdlczsgcGFnZSsrKSB7CisJCXRwcmxvLT50cHJsb19wYXJhbXNbcGFnZV0udHlwZSA9IEZDX1RZUEVfRkNQOworCQl0cHJsby0+dHBybG9fcGFyYW1zW3BhZ2VdLm9wYV92YWxpZCA9IDA7CisJCXRwcmxvLT50cHJsb19wYXJhbXNbcGFnZV0ucnBhX3ZhbGlkID0gMDsKKwkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS5vcmlnX3Byb2Nlc3NfYXNzYyA9IDA7CisJCXRwcmxvLT50cHJsb19wYXJhbXNbcGFnZV0ucmVzcF9wcm9jZXNzX2Fzc2MgPSAwOworCQlpZiAodHBybG9fdHlwZSA9PSBGQ19HTE9CQUxfTE9HTykgeworCQkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS5nbG9iYWxfcHJvY2Vzc19sb2dvdXQgPSAxOworCQl9IGVsc2UgaWYgKHRwcmxvX3R5cGUgPT0gRkNfVFBSX0xPR08pIHsKKwkJCXRwcmxvLT50cHJsb19wYXJhbXNbcGFnZV0udHBvX25wb3J0X3ZhbGlkID0gMTsKKwkJCXRwcmxvLT50cHJsb19wYXJhbXNbcGFnZV0udHBvX25wb3J0X2lkID0gKHRwcl9pZCk7CisJCX0KKwl9CisKKwlyZXR1cm4gKGJmYV9vc19udG9ocyh0cHJsby0+cGF5bG9hZF9sZW4pKTsKK30KKwordTE2CitmY190cHJsb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZmNfdHBybG9fYWNjX3MgKnRwcmxvID0gKHN0cnVjdCBmY190cHJsb19hY2NfcyAqKSAoZmNocyArIDEpOworCWludCAgICAgICAgICAgICBudW1fcGFnZXMgPSAwOworCWludCAgICAgICAgICAgICBwYWdlID0gMDsKKworCWxlbiA9IGxlbjsKKworCWlmICh0cHJsby0+Y29tbWFuZCAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0FDQ19JTlZBTCk7CisKKwludW1fcGFnZXMgPSAoYmZhX29zX250b2hzKHRwcmxvLT5wYXlsb2FkX2xlbikgLSA0KSAvIDE2OworCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG51bV9wYWdlczsgcGFnZSsrKSB7CisJCWlmICh0cHJsby0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS50eXBlICE9IEZDX1RZUEVfRkNQKQorCQkJcmV0dXJuIChGQ19QQVJTRV9OT1RfRkNQKTsKKwkJaWYgKHRwcmxvLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLm9wYV92YWxpZCAhPSAwKQorCQkJcmV0dXJuIChGQ19QQVJTRV9PUEFGTEFHX0lOVkFMKTsKKwkJaWYgKHRwcmxvLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJwYV92YWxpZCAhPSAwKQorCQkJcmV0dXJuIChGQ19QQVJTRV9SUEFGTEFHX0lOVkFMKTsKKwkJaWYgKHRwcmxvLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLm9yaWdfcHJvY2Vzc19hc3NjICE9IDApCisJCQlyZXR1cm4gKEZDX1BBUlNFX09QQV9JTlZBTCk7CisJCWlmICh0cHJsby0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5yZXNwX3Byb2Nlc3NfYXNzYyAhPSAwKQorCQkJcmV0dXJuIChGQ19QQVJTRV9SUEFfSU5WQUwpOworCX0KKwlyZXR1cm4gKEZDX1BBUlNFX09LKTsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX3JycV9yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSAoZmNocyArIDEpOworCisJbGVuID0gbGVuOworCWlmIChlbHNfY21kLT5lbHNfY29kZSAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKworCXJldHVybiBGQ19QQVJTRV9PSzsKK30KKwordTE2CitmY19iYV9yanRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB1MzIgcmVhc29uX2NvZGUsCisJCQl1MzIgcmVhc29uX2V4cGwpCit7CisJc3RydWN0IGZjX2JhX3JqdF9zICAgICpiYV9yanQgPSAoc3RydWN0IGZjX2JhX3JqdF9zICopIChmY2hzICsgMSk7CisKKwlmY19ibHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCWZjaHMtPmNhdF9pbmZvID0gRkNfQ0FUX0JBX1JKVDsKKwliYV9yanQtPnJlYXNvbl9jb2RlID0gcmVhc29uX2NvZGU7CisJYmFfcmp0LT5yZWFzb25fZXhwbCA9IHJlYXNvbl9leHBsOworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19iYV9yanRfcykpOworfQorCitzdGF0aWMgdm9pZAorZmNfZ3NfY3RoZHJfYnVpbGQoc3RydWN0IGN0X2hkcl9zICpjdGhkciwgdTMyIHNfaWQsIHUxNiBjbWRfY29kZSkKK3sKKwliZmFfb3NfbWVtc2V0KGN0aGRyLCAwLCBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7CisJY3RoZHItPnJldl9pZCA9IENUX0dTM19SRVZJU0lPTjsKKwljdGhkci0+Z3NfdHlwZSA9IENUX0dTVFlQRV9ESVJTRVJWSUNFOworCWN0aGRyLT5nc19zdWJfdHlwZSA9IENUX0dTU1VCVFlQRV9OQU1FU0VSVkVSOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfaHRvbnMoY21kX2NvZGUpOworfQorCitzdGF0aWMgdm9pZAorZmNfZ3NfZmRtaV9jdGhkcl9idWlsZChzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyLCB1MzIgc19pZCwgdTE2IGNtZF9jb2RlKQoreworCWJmYV9vc19tZW1zZXQoY3RoZHIsIDAsIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKKwljdGhkci0+cmV2X2lkID0gQ1RfR1MzX1JFVklTSU9OOworCWN0aGRyLT5nc190eXBlID0gQ1RfR1NUWVBFX01HTVRTRVJWSUNFOworCWN0aGRyLT5nc19zdWJfdHlwZSA9IENUX0dTU1VCVFlQRV9IQkFfTUdNVFNFUlZFUjsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX2h0b25zKGNtZF9jb2RlKTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2dzX21zX2N0aGRyX2J1aWxkKHN0cnVjdCBjdF9oZHJfcyAqY3RoZHIsIHUzMiBzX2lkLCB1MTYgY21kX2NvZGUsCisJCQkJCSB1OCBzdWJfdHlwZSkKK3sKKwliZmFfb3NfbWVtc2V0KGN0aGRyLCAwLCBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7CisJY3RoZHItPnJldl9pZCA9IENUX0dTM19SRVZJU0lPTjsKKwljdGhkci0+Z3NfdHlwZSA9IENUX0dTVFlQRV9NR01UU0VSVklDRTsKKwljdGhkci0+Z3Nfc3ViX3R5cGUgPSBzdWJfdHlwZTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX2h0b25zKGNtZF9jb2RlKTsKK30KKwordTE2CitmY19naWRwbl9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICB3d25fdCBwb3J0X25hbWUpCit7CisKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX2dpZHBuX3JlcV9zICpnaWRwbiA9CisJCQkoc3RydWN0IGZjZ3NfZ2lkcG5fcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0dJRF9QTik7CisKKwliZmFfb3NfbWVtc2V0KGdpZHBuLCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfZ2lkcG5fcmVxX3MpKTsKKwlnaWRwbi0+cG9ydF9uYW1lID0gcG9ydF9uYW1lOworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX2dpZHBuX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19ncG5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICB1MzIgcG9ydF9pZCkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJZmNnc19ncG5pZF9yZXFfdCAqZ3BuaWQgPSAoZmNnc19ncG5pZF9yZXFfdCAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfR1BOX0lEKTsKKworCWJmYV9vc19tZW1zZXQoZ3BuaWQsIDAsIHNpemVvZihmY2dzX2dwbmlkX3JlcV90KSk7CisJZ3BuaWQtPmRhcCA9IHBvcnRfaWQ7CisJcmV0dXJuIChzaXplb2YoZmNnc19ncG5pZF9yZXFfdCkgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfZ25uaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkgICAgICAgdTMyIHBvcnRfaWQpCit7CisKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCWZjZ3NfZ25uaWRfcmVxX3QgKmdubmlkID0gKGZjZ3NfZ25uaWRfcmVxX3QgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0dOTl9JRCk7CisKKwliZmFfb3NfbWVtc2V0KGdubmlkLCAwLCBzaXplb2YoZmNnc19nbm5pZF9yZXFfdCkpOworCWdubmlkLT5kYXAgPSBwb3J0X2lkOworCXJldHVybiAoc2l6ZW9mKGZjZ3NfZ25uaWRfcmVxX3QpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX2N0X3JzcF9wYXJzZShzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyKQoreworCWlmIChiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSkgIT0gQ1RfUlNQX0FDQ0VQVCkgeworCQlpZiAoY3RoZHItPnJlYXNvbl9jb2RlID09IENUX1JTTl9MT0dJQ0FMX0JVU1kpCisJCQlyZXR1cm4gRkNfUEFSU0VfQlVTWTsKKwkJZWxzZQorCQkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisJfQorCisJcmV0dXJuIEZDX1BBUlNFX09LOworfQorCit1MTYKK2ZjX3Njcl9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfc2NyX3MgKnNjciwgdTggc2V0X2JyX3JlZywKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQpCit7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19GQUJSSUNfQ09OVFJPTExFUik7CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCWJmYV9vc19tZW1zZXQoc2NyLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Njcl9zKSk7CisJc2NyLT5jb21tYW5kID0gRkNfRUxTX1NDUjsKKwlzY3ItPnJlZ19mdW5jID0gRkNfU0NSX1JFR19GVU5DX0ZVTEw7CisJaWYgKHNldF9icl9yZWcpCisJCXNjci0+dnVfcmVnX2Z1bmMgPSBGQ19WVV9TQ1JfUkVHX0ZVTkNfRkFCUklDX05BTUVfQ0hBTkdFOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3Njcl9zKSk7Cit9CisKK3UxNgorZmNfcnNjbl9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcnNjbl9wbF9zICpyc2NuLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCkKK3sKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19DT05UUk9MTEVSKTsKKwl1MTYgICAgICAgIHBheWxkbGVuOworCisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJcnNjbi0+Y29tbWFuZCA9IEZDX0VMU19SU0NOOworCXJzY24tPnBhZ2VsZW4gPSBzaXplb2YocnNjbi0+ZXZlbnRbMF0pOworCisJcGF5bGRsZW4gPSBzaXplb2YodTMyKSArIHJzY24tPnBhZ2VsZW47CisJcnNjbi0+cGF5bGRsZW4gPSBiZmFfb3NfaHRvbnMocGF5bGRsZW4pOworCisJcnNjbi0+ZXZlbnRbMF0uZm9ybWF0ID0gRkNfUlNDTl9GT1JNQVRfUE9SVElEOworCXJzY24tPmV2ZW50WzBdLnBvcnRpZCA9IHNfaWQ7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcnNjbl9wbF9zKSk7Cit9CisKK3UxNgorZmNfcmZ0aWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkgICAgICAgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MgKnJmdGlkID0KKwkJCShzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIHR5cGVfdmFsdWUsIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKwl1OCAgICAgICAgIGluZGV4OworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SRlRfSUQpOworCisJYmZhX29zX21lbXNldChyZnRpZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zKSk7CisKKwlyZnRpZC0+ZGFwID0gc19pZDsKKworCS8qIEJ5IGRlZmF1bHQsIEZDUCBGQzQgVHlwZSBpcyByZWdpc3RlcmVkICovCisJaW5kZXggPSBGQ19UWVBFX0ZDUCA+PiA1OworCXR5cGVfdmFsdWUgPSAxIDw8IChGQ19UWVBFX0ZDUCAlIDMyKTsKKwlyZnRpZC0+ZmM0X3R5cGVbaW5kZXhdID0gYmZhX29zX2h0b25sKHR5cGVfdmFsdWUpOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykgeworCQlpbmRleCA9IEZDX1RZUEVfSVAgPj4gNTsKKwkJdHlwZV92YWx1ZSA9IDEgPDwgKEZDX1RZUEVfSVAgJSAzMik7CisJCXJmdGlkLT5mYzRfdHlwZVtpbmRleF0gfD0gYmZhX29zX2h0b25sKHR5cGVfdmFsdWUpOworCX0KKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19yZnRpZF9idWlsZF9zb2woc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIHU4ICpmYzRfYml0bWFwLAorCQkJdTMyIGJpdG1hcF9zaXplKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MgKnJmdGlkID0KKwkJCShzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUkZUX0lEKTsKKworCWJmYV9vc19tZW1zZXQocmZ0aWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcykpOworCisJcmZ0aWQtPmRhcCA9IHNfaWQ7CisJYmZhX29zX21lbWNweSgodm9pZCAqKXJmdGlkLT5mYzRfdHlwZSwgKHZvaWQgKilmYzRfYml0bWFwLAorCQkJKGJpdG1hcF9zaXplIDwgMzIgPyBiaXRtYXBfc2l6ZSA6IDMyKSk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcykgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfcmZmaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkgICAgICAgdTggZmM0X3R5cGUsIHU4IGZjNF9mdHJzKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19yZmZpZF9yZXFfcyAqcmZmaWQgPQorCQkJKHN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUkZGX0lEKTsKKworCWJmYV9vc19tZW1zZXQocmZmaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19yZmZpZF9yZXFfcykpOworCisJcmZmaWQtPmRhcCAJCSAJPSBzX2lkOworCXJmZmlkLT5mYzRmdHJfYml0cyAgPSBmYzRfZnRyczsKKwlyZmZpZC0+ZmM0X3R5cGUJCT0gZmM0X3R5cGU7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNnc19yZmZpZF9yZXFfcykgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfcnNwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCXU4ICpuYW1lKQoreworCisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19yc3BuaWRfcmVxX3MgKnJzcG5pZCA9CisJCQkoc3RydWN0IGZjZ3NfcnNwbmlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SU1BOX0lEKTsKKworCWJmYV9vc19tZW1zZXQocnNwbmlkLCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfcnNwbmlkX3JlcV9zKSk7CisKKwlyc3BuaWQtPmRhcCA9IHNfaWQ7CisJcnNwbmlkLT5zcG5fbGVuID0gKHU4KSBzdHJsZW4oKGNoYXIgKiluYW1lKTsKKwlzdHJuY3B5KChjaGFyICopcnNwbmlkLT5zcG4sIChjaGFyICopbmFtZSwgcnNwbmlkLT5zcG5fbGVuKTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JzcG5pZF9yZXFfcykgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfZ2lkX2Z0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTggZmM0X3R5cGUpCit7CisKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX2dpZGZ0X3JlcV9zICpnaWRmdCA9CisJCQkoc3RydWN0IGZjZ3NfZ2lkZnRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19HSURfRlQpOworCisJYmZhX29zX21lbXNldChnaWRmdCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX2dpZGZ0X3JlcV9zKSk7CisJZ2lkZnQtPmZjNF90eXBlID0gZmM0X3R5cGU7CisJZ2lkZnQtPmRvbWFpbl9pZCA9IDA7CisJZ2lkZnQtPmFyZWFfaWQgPSAwOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfZ2lkZnRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX3JwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MzIgcG9ydF9pZCwKKwkgICAgICAgd3duX3QgcG9ydF9uYW1lKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfcnBuaWRfcmVxX3MgKnJwbmlkID0KKwkJCShzdHJ1Y3QgZmNnc19ycG5pZF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SUE5fSUQpOworCisJYmZhX29zX21lbXNldChycG5pZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JwbmlkX3JlcV9zKSk7CisJcnBuaWQtPnBvcnRfaWQgPSBwb3J0X2lkOworCXJwbmlkLT5wb3J0X25hbWUgPSBwb3J0X25hbWU7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNnc19ycG5pZF9yZXFfcykgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfcm5uaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUzMiBwb3J0X2lkLAorCSAgICAgICB3d25fdCBub2RlX25hbWUpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19ybm5pZF9yZXFfcyAqcm5uaWQgPQorCQkJKHN0cnVjdCBmY2dzX3JubmlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JOTl9JRCk7CisKKwliZmFfb3NfbWVtc2V0KHJubmlkLCAwLCBzaXplb2Yoc3RydWN0IGZjZ3Nfcm5uaWRfcmVxX3MpKTsKKwlybm5pZC0+cG9ydF9pZCA9IHBvcnRfaWQ7CisJcm5uaWQtPm5vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JubmlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19yY3NpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTMyIHBvcnRfaWQsCisJICAgICAgIHUzMiBjb3MpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19yY3NpZF9yZXFfcyAqcmNzaWQgPQorCQkJKHN0cnVjdCBmY2dzX3Jjc2lkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JDU19JRCk7CisKKwliZmFfb3NfbWVtc2V0KHJjc2lkLCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfcmNzaWRfcmVxX3MpKTsKKwlyY3NpZC0+cG9ydF9pZCA9IHBvcnRfaWQ7CisJcmNzaWQtPmNvcyA9IGNvczsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3Jjc2lkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19ycHRpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTMyIHBvcnRfaWQsCisJICAgICAgIHU4IHBvcnRfdHlwZSkKK3sKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3JwdGlkX3JlcV9zICpycHRpZCA9CisJCQkoc3RydWN0IGZjZ3NfcnB0aWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUlBUX0lEKTsKKworCWJmYV9vc19tZW1zZXQocnB0aWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19ycHRpZF9yZXFfcykpOworCXJwdGlkLT5wb3J0X2lkID0gcG9ydF9pZDsKKwlycHRpZC0+cG9ydF90eXBlID0gcG9ydF90eXBlOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfcnB0aWRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX2dhbnh0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MzIgcG9ydF9pZCkKK3sKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX2dhbnh0X3JlcV9zICpnYW54dCA9CisJCQkoc3RydWN0IGZjZ3NfZ2FueHRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfR0FfTlhUKTsKKworCWJmYV9vc19tZW1zZXQoZ2FueHQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19nYW54dF9yZXFfcykpOworCWdhbnh0LT5wb3J0X2lkID0gcG9ydF9pZDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykgKyBzaXplb2Yoc3RydWN0IGZjZ3NfZ2FueHRfcmVxX3MpKTsKK30KKworLyoKKyAqIEJ1aWxkcyBmYyBoZHIgYW5kIGN0IGhkciBmb3IgRkRNSSByZXF1ZXN0cy4KKyAqLwordTE2CitmY19mZG1pX3JlcWhkcl9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJICAgICB1MTYgY21kX2NvZGUpCit7CisKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTUdNVF9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfZmRtaV9jdGhkcl9idWlsZChjdGhkciwgc19pZCwgY21kX2NvZGUpOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKKy8qCisgKiBHaXZlbiBhIEZDNCBUeXBlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBmYzQgdHlwZSBiaXRtYXNrCisgKi8KK3ZvaWQKK2ZjX2dldF9mYzR0eXBlX2JpdG1hc2sodTggZmM0X3R5cGUsIHU4ICpiaXRfbWFzaykKK3sKKwl1OCAgICAgICAgIGluZGV4OworCXUzMiAgICAgICAqcHRyID0gKHUzMiAqKSBiaXRfbWFzazsKKwl1MzIgICAgICAgIHR5cGVfdmFsdWU7CisKKwkvKgorCSAqIEB0b2RvIDogQ2hlY2sgZm9yIGJpdG1hc2sgc2l6ZQorCSAqLworCisJaW5kZXggPSBmYzRfdHlwZSA+PiA1OworCXR5cGVfdmFsdWUgPSAxIDw8IChmYzRfdHlwZSAlIDMyKTsKKwlwdHJbaW5kZXhdID0gYmZhX29zX2h0b25sKHR5cGVfdmFsdWUpOworCit9CisKKy8qCisgKiBHTUFMIFJlcXVlc3QKKyAqLwordTE2CitmY19nbWFsX3JlcV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgd3duX3Qgd3duKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJZmNnc19nbWFsX3JlcV90ICpnbWFsID0gKGZjZ3NfZ21hbF9yZXFfdCAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX01HTVRfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCWZjX2dzX21zX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19GQ19HTUFMX0NNRCwKKwkJCUNUX0dTU1VCVFlQRV9DRkdTRVJWRVIpOworCisJYmZhX29zX21lbXNldChnbWFsLCAwLCBzaXplb2YoZmNnc19nbWFsX3JlcV90KSk7CisJZ21hbC0+d3duID0gd3duOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSArIHNpemVvZihmY2dzX2dtYWxfcmVxX3QpKTsKK30KKworLyoKKyAqIEdGTiAoR2V0IEZhYnJpYyBOYW1lKSBSZXF1ZXN0CisgKi8KK3UxNgorZmNfZ2ZuX3JlcV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgd3duX3Qgd3duKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJZmNnc19nZm5fcmVxX3QgKmdmbiA9IChmY2dzX2dmbl9yZXFfdCAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX01HTVRfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCWZjX2dzX21zX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19GQ19HRk5fQ01ELAorCQkJQ1RfR1NTVUJUWVBFX0NGR1NFUlZFUik7CisKKwliZmFfb3NfbWVtc2V0KGdmbiwgMCwgc2l6ZW9mKGZjZ3NfZ2ZuX3JlcV90KSk7CisJZ2ZuLT53d24gPSB3d247CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpICsgc2l6ZW9mKGZjZ3NfZ2ZuX3JlcV90KSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZjYnVpbGQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNidWlsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMjQ4NDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZjYnVpbGQuaApAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworLyoKKyAqIGZjYnVpbGQuaCAtIEZDIGxpbmsgc2VydmljZSBmcmFtZSBidWlsZGluZyBhbmQgcGFyc2luZyByb3V0aW5lcworICovCisKKyNpZm5kZWYgX19GQ0JVSUxEX0hfXworI2RlZmluZSBfX0ZDQlVJTERfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvZmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mY3AuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9jdC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKworLyoKKyAqIFV0aWxpdHkgTWFjcm9zL2Z1bmN0aW9ucworICovCisKKyNkZWZpbmUgZmNpZl9zb2Zfc2V0KF9pZmhkciwgX3NvZikJKF9pZmhkciktPnNvZiA9IEZDXyAjIyBfc29mCisjZGVmaW5lIGZjaWZfZW9mX3NldChfaWZoZHIsIF9lb2YpCShfaWZoZHIpLT5lb2YgPSBGQ18gIyMgX2VvZgorCisjZGVmaW5lIHd3bl9pc19lcXVhbChfd3duMSwgX3d3bjIpCQlcCisJKG1lbWNtcCgmKF93d24xKSwgJihfd3duMiksIHNpemVvZih3d25fdCkpID09IDApCisKKyNkZWZpbmUgZmNfcm91bmR1cChfbCwgX3MpICgoKF9sKSArICgoX3MpIC0gMSkpICYgfigoX3MpIC0gMSkpCisKKy8qCisgKiBHaXZlbiB0aGUgZmMgcmVzcG9uc2UgbGVuZ3RoLCB0aGlzIHJvdXRpbmUgd2lsbCByZXR1cm4KKyAqIHRoZSBsZW5ndGggb2YgdGhlIGFjdHVhbCBwYXlsb2FkIGJ5dGVzIGZvbGxvd2luZyB0aGUgQ1QgaGVhZGVyLgorICoKKyAqIEFzc3VtZXMgdGhlIGlucHV0IHJlc3BvbnNlIGxlbmd0aCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBjcmMsIGVvZiwgZXRjLgorICovCitzdGF0aWMgaW5saW5lICAgdTMyCitmY19nZXRfY3RyZXNwX3B5bGRfbGVuKHUzMiByZXNwX2xlbikKK3sKKwlyZXR1cm4gKHJlc3BfbGVuIC0gc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCisvKgorICogQ29udmVydCBiZmEgc3BlZWQgdG8gcnBzYyBzcGVlZCB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBlbnVtIGJmYV9wcG9ydF9zcGVlZAorZmNfcnBzY19vcGVyc3BlZWRfdG9fYmZhX3NwZWVkKGVudW0gZmNfcnBzY19vcF9zcGVlZF9zIHNwZWVkKQoreworCXN3aXRjaCAoc3BlZWQpIHsKKworCWNhc2UgUlBTQ19PUF9TUEVFRF8xRzoKKwkJcmV0dXJuIEJGQV9QUE9SVF9TUEVFRF8xR0JQUzsKKworCWNhc2UgUlBTQ19PUF9TUEVFRF8yRzoKKwkJcmV0dXJuIEJGQV9QUE9SVF9TUEVFRF8yR0JQUzsKKworCWNhc2UgUlBTQ19PUF9TUEVFRF80RzoKKwkJcmV0dXJuIEJGQV9QUE9SVF9TUEVFRF80R0JQUzsKKworCWNhc2UgUlBTQ19PUF9TUEVFRF84RzoKKwkJcmV0dXJuIEJGQV9QUE9SVF9TUEVFRF84R0JQUzsKKworCWRlZmF1bHQ6CisJCXJldHVybiBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTjsKKwl9Cit9CisKKy8qCisgKiBDb252ZXJ0IFJQU0Mgc3BlZWQgdG8gYmZhIHNwZWVkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lICAgZW51bSBmY19ycHNjX29wX3NwZWVkX3MKK2ZjX2JmYV9zcGVlZF90b19ycHNjX29wZXJzcGVlZChlbnVtIGJmYV9wcG9ydF9zcGVlZCBvcF9zcGVlZCkKK3sKKwlzd2l0Y2ggKG9wX3NwZWVkKSB7CisKKwljYXNlIEJGQV9QUE9SVF9TUEVFRF8xR0JQUzoKKwkJcmV0dXJuIFJQU0NfT1BfU1BFRURfMUc7CisKKwljYXNlIEJGQV9QUE9SVF9TUEVFRF8yR0JQUzoKKwkJcmV0dXJuIFJQU0NfT1BfU1BFRURfMkc7CisKKwljYXNlIEJGQV9QUE9SVF9TUEVFRF80R0JQUzoKKwkJcmV0dXJuIFJQU0NfT1BfU1BFRURfNEc7CisKKwljYXNlIEJGQV9QUE9SVF9TUEVFRF84R0JQUzoKKwkJcmV0dXJuIFJQU0NfT1BfU1BFRURfOEc7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF9OT1RfRVNUOworCX0KK30KK2VudW0gZmNfcGFyc2Vfc3RhdHVzIHsKKwlGQ19QQVJTRV9PSyA9IDAsCisJRkNfUEFSU0VfRkFJTFVSRSA9IDEsCisJRkNfUEFSU0VfQlVTWSA9IDIsCisJRkNfUEFSU0VfTEVOX0lOVkFMLAorCUZDX1BBUlNFX0FDQ19JTlZBTCwKKwlGQ19QQVJTRV9QV1dOX05PVF9FUVVBTCwKKwlGQ19QQVJTRV9OV1dOX05PVF9FUVVBTCwKKwlGQ19QQVJTRV9SWFNaX0lOVkFMLAorCUZDX1BBUlNFX05PVF9GQ1AsCisJRkNfUEFSU0VfT1BBRkxBR19JTlZBTCwKKwlGQ19QQVJTRV9SUEFGTEFHX0lOVkFMLAorCUZDX1BBUlNFX09QQV9JTlZBTCwKKwlGQ19QQVJTRV9SUEFfSU5WQUwsCisKK307CisKK3N0cnVjdCBmY190ZW1wbGF0ZXNfcyB7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY19lbHNfcmVxOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNfYmxzX3JlcTsKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAgcGxvZ2k7CisJc3RydWN0IGZjX3JycV9zICAgICAgICBycnE7Cit9OworCit2b2lkIGZjYnVpbGRfaW5pdCh2b2lkKTsKKwordTE2IGZjX2Zsb2dpX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sb2dpX3MgKmZsb2dpLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkJd3duX3Qgbm9kZV9uYW1lLCB1MTYgcGR1X3NpemUsIHU4IHNldF9ucGl2LAorCQkJdTggc2V0X2F1dGgsIHUxNiBsb2NhbF9iYl9jcmVkaXRzKTsKK3UxNiBmY19mZGlzY19idWlsZChzdHJ1Y3QgZmNoc19zICpidWYsIHN0cnVjdCBmY19sb2dpX3MgKmZsb2dpLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkJd3duX3Qgbm9kZV9uYW1lLCB1MTYgcGR1X3NpemUpOwordTE2IGZjX2Zsb2dpX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9naV9zICpmbG9naSwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwKKwkJCXd3bl90IG5vZGVfbmFtZSwgdTE2IHBkdV9zaXplLAorCQkJdTE2IGxvY2FsX2JiX2NyZWRpdHMpOwordTE2IGZjX3Bsb2dpX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsCisJCQl3d25fdCBub2RlX25hbWUsIHUxNiBwZHVfc2l6ZSk7CitlbnVtIGZjX3BhcnNlX3N0YXR1cyBmY19wbG9naV9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzKTsKK3UxNiBmY19hYnRzX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmJ1ZiwgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX2FidHNfcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmJ1ZiwgaW50IGxlbik7Cit1MTYgZmNfcnJxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmJ1Ziwgc3RydWN0IGZjX3JycV9zICpycnEsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgdTE2IHJycV9veGlkKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX3JycV9yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqYnVmLCBpbnQgbGVuKTsKK3UxNiBmY19yc3BuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTggKm5hbWUpOwordTE2IGZjX3JmdGlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlKTsKK3UxNiBmY19yZnRpZF9idWlsZF9zb2woc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIHU4ICpmYzRfYml0bWFwLAorCQkJdTMyIGJpdG1hcF9zaXplKTsKK3UxNiBmY19yZmZpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTggZmM0X3R5cGUsIHU4IGZjNF9mdHJzKTsKK3UxNiBmY19naWRwbl9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lKTsKK3UxNiBmY19ncG5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB1MzIgcG9ydF9pZCk7Cit1MTYgZmNfc2NyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19zY3JfcyAqc2NyLAorCQkJdTggc2V0X2JyX3JlZywgdTMyIHNfaWQsIHUxNiBveF9pZCk7Cit1MTYgZmNfcGxvZ2lfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsIHUxNiBwZHVfc2l6ZSk7CisKK3UxNiBmY19hZGlzY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCXd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX2FkaXNjX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwKKwkJCXUzMiBob3N0X2RhcCwKKwkJCXd3bl90IG5vZGVfbmFtZSwgd3duX3QgcG9ydF9uYW1lKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX2FkaXNjX3JzcF9wYXJzZShzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsIGludCBsZW4sCisJCQl3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSk7Cit1MTYgZmNfYWRpc2NfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19hZGlzY19zICphZGlzYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUpOwordTE2IGZjX2xzX3JqdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbHNfcmp0X3MgKmxzX3JqdCwKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJdTggcmVhc29uX2NvZGUsIHU4IHJlYXNvbl9jb2RlX2V4cGwpOwordTE2IGZjX2xzX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfZWxzX2NtZF9zICplbHNfY21kLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQpOwordTE2IGZjX3BybGlfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfcHJsaV9yc3BfcGFyc2Uoc3RydWN0IGZjX3BybGlfcyAqcHJsaSwgaW50IGxlbik7CisKK3UxNiBmY19wcmxpX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCWVudW0gYmZhX3BvcnRfcm9sZSByb2xlKTsKK3UxNiBmY19ybmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ybmlkX2NtZF9zICpybmlkLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1MzIgZGF0YV9mb3JtYXQpOwordTE2IGZjX3JuaWRfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ybmlkX2FjY19zICpybmlkX2FjYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJdTMyIGRhdGFfZm9ybWF0LAorCQkJc3RydWN0IGZjX3JuaWRfY29tbW9uX2lkX2RhdGFfcyAqY29tbW9uX2lkX2RhdGEsCisJCQlzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyAqCisJCQlnZW5fdG9wb19kYXRhKTsKK3UxNiBmY19ycHNjMl9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcnBzYzJfY21kX3MgKnJwczJjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTMyICpwaWRfbGlzdCwgdTE2IG5waWRzKTsKK3UxNiBmY19ycHNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjX2NtZF9zICpycHNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQpOwordTE2IGZjX3Jwc2NfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjX2FjY19zICpycHNjX2FjYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJc3RydWN0IGZjX3Jwc2Nfc3BlZWRfaW5mb19zICpvcGVyX3NwZWVkKTsKK3UxNiBmY19naWRfZnRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgc19pZCwKKwkJCXU4IGZjNF90eXBlKTsKK3UxNiBmY19ycG5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUzMiBwb3J0X2lkLCB3d25fdCBwb3J0X25hbWUpOwordTE2IGZjX3JubmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTMyIHBvcnRfaWQsIHd3bl90IG5vZGVfbmFtZSk7Cit1MTYgZmNfcmNzaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MzIgcG9ydF9pZCwgdTMyIGNvcyk7Cit1MTYgZmNfcnB0aWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MzIgcG9ydF9pZCwgdTggcG9ydF90eXBlKTsKK3UxNiBmY19nYW54dF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUzMiBwb3J0X2lkKTsKK3UxNiBmY19sb2dvX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sb2dvX3MgKmxvZ28sCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCXd3bl90IHBvcnRfbmFtZSk7Cit1MTYgZmNfbG9nb19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQpOwordTE2IGZjX2ZkbWlfcmVxaGRyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTE2IGNtZF9jb2RlKTsKK3UxNiBmY19nbWFsX3JlcV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXd3bl90IHd3bik7Cit1MTYgZmNfZ2ZuX3JlcV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXd3bl90IHd3bik7Cit2b2lkIGZjX2dldF9mYzR0eXBlX2JpdG1hc2sodTggZmM0X3R5cGUsIHU4ICpiaXRfbWFzayk7Cit2b2lkIGZjX2Vsc19yZXFfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX2Vsc19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbik7CitlbnVtIGZjX3BhcnNlX3N0YXR1cyBmY19wbG9naV9yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbiwKKwkJCSB3d25fdCBwb3J0X25hbWUpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfcHJsaV9wYXJzZShzdHJ1Y3QgZmNfcHJsaV9zICpwcmxpKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX3BkaXNjX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHd3bl90IG5vZGVfbmFtZSwKKwkJCXd3bl90IHBvcnRfbmFtZSk7Cit1MTYgZmNfYmFfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19iYV9hY2NfcyAqYmFfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1MTYgcnhfaWQpOworaW50IGZjX2xvZ291dF9wYXJhbXNfcGFnZXMoc3RydWN0IGZjaHNfcyAqZmNfZnJhbWUsIHU4IGVsc19jb2RlKTsKK3UxNiBmY190cHJsb19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXN0cnVjdCBmY190cHJsb19hY2NfcyAqdHBybG9fYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlpbnQgbnVtX3BhZ2VzKTsKK3UxNiBmY19wcmxvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcHJsb19hY2NfcyAqcHJsb19hY2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCWludCBudW1fcGFnZXMpOwordTE2IGZjX2xvZ29fcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pOwordTE2IGZjX3BkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCQl1MTYgcGR1X3NpemUpOwordTE2IGZjX3BkaXNjX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuLCB3d25fdCBwb3J0X25hbWUpOwordTE2IGZjX3BybG9fYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCBpbnQgbnVtX3BhZ2VzKTsKK3UxNiBmY19wcmxvX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKTsKK3UxNiBmY190cHJsb19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIGludCBudW1fcGFnZXMsCisJCQllbnVtIGZjX3RwcmxvX3R5cGUgdHBybG9fdHlwZSwgdTMyIHRwcl9pZCk7Cit1MTYgZmNfdHBybG9fcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pOwordTE2IGZjX2JhX3JqdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIHUzMiByZWFzb25fY29kZSwKKwkJCXUzMiByZWFzb25fZXhwbCk7Cit1MTYgZmNfZ25uaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIHUzMiBwb3J0X2lkKTsKK3UxNiBmY19jdF9yc3BfcGFyc2Uoc3RydWN0IGN0X2hkcl9zICpjdGhkcik7Cit1MTYgZmNfcnNjbl9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcnNjbl9wbF9zICpyc2NuLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNwaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNwaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2U1ZDg5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNwaW0uYwpAQCAtMCwwICsxLDg0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3BpbS5jIC0gRkNQIGluaXRpYXRvciBtb2RlIGktdCBuZXh1cyBzdGF0ZSBtYWNoaW5lCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfZmNwaW0uaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19mY3BpbS5oPgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX2ZjcGltLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faXRuaW0uaD4KKworQkZBX1RSQ19GSUxFKEZDUywgRkNQSU0pOworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fdGltZW91dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fZnJlZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9zZW5kX3BybGkodm9pZCAqaXRuaW1fY2JhcmcsCisJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fcHJsaV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkgICAgICAgZW51bSBiZmFfaXRuaW1fYWVuX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiAgZmNzX2l0bmltX3NtIEZDUyBpdG5pbSBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCisKK2VudW0gYmZhX2Zjc19pdG5pbV9ldmVudCB7CisJQkZBX0ZDU19JVE5JTV9TTV9PTkxJTkUgPSAxLAkvKiAgcnBvcnQgb25saW5lIGV2ZW50ICovCisJQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FID0gMiwJLyogIHJwb3J0IG9mZmxpbmUgKi8KKwlCRkFfRkNTX0lUTklNX1NNX0ZSTVNFTlQgPSAzLAkvKiAgcHJsaSBmcmFtZSBpcyBzZW50ICovCisJQkZBX0ZDU19JVE5JTV9TTV9SU1BfT0sgPSA0LAkvKiAgZ29vZCByZXNwb25zZSAqLworCUJGQV9GQ1NfSVROSU1fU01fUlNQX0VSUk9SID0gNSwJLyogIGVycm9yIHJlc3BvbnNlICovCisJQkZBX0ZDU19JVE5JTV9TTV9USU1FT1VUID0gNiwJLyogIGRlbGF5IHRpbWVvdXQgKi8KKwlCRkFfRkNTX0lUTklNX1NNX0hDQl9PRkZMSU5FID0gNywJLyogIEJGQSBvbmxpbmUgY2FsbGJhY2sgKi8KKwlCRkFfRkNTX0lUTklNX1NNX0hDQl9PTkxJTkUgPSA4LAkvKiAgQkZBIG9mZmxpbmUgY2FsbGJhY2sgKi8KKwlCRkFfRkNTX0lUTklNX1NNX0lOSVRJQVRPUiA9IDksCS8qICBycG9ydCBpcyBpbml0aWF0b3IgKi8KKwlCRkFfRkNTX0lUTklNX1NNX0RFTEVURSA9IDEwLAkvKiAgZGVsZXRlIGV2ZW50IGZyb20gcnBvcnQgKi8KKwlCRkFfRkNTX0lUTklNX1NNX1BSTE8gPSAxMSwJLyogIGRlbGV0ZSBldmVudCBmcm9tIHJwb3J0ICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX3BybGlfc2VuZChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkJICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX3BybGkoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkJICAgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX3BybGlfcmV0cnkoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21faGNiX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkJICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkJCWVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkJICAgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworCitzdGF0aWMgc3RydWN0IGJmYV9zbV90YWJsZV9zIGl0bmltX3NtX3RhYmxlW10gPSB7CisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpLCBCRkFfSVROSU1fT0ZGTElORX0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX3BybGlfc2VuZCksIEJGQV9JVE5JTV9QUkxJX1NFTkR9LAorCXtCRkFfU00oYmZhX2Zjc19pdG5pbV9zbV9wcmxpKSwgQkZBX0lUTklNX1BSTElfU0VOVH0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX3BybGlfcmV0cnkpLCBCRkFfSVROSU1fUFJMSV9SRVRSWX0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX2hjYl9vbmxpbmUpLCBCRkFfSVROSU1fSENCX09OTElORX0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX29ubGluZSksIEJGQV9JVE5JTV9PTkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb2ZmbGluZSksIEJGQV9JVE5JTV9IQ0JfT0ZGTElORX0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX2luaXRpYXRvciksIEJGQV9JVE5JTV9JTklUSUFUSU9SfSwKK307CisKKy8qKgorICogIGZjc19pdG5pbV9zbSBGQ1MgaXRuaW0gc3RhdGUgbWFjaGluZQorICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX3BybGlfc2VuZCk7CisJCWJmYV9mY3NfaXRuaW1fc2VuZF9wcmxpKGl0bmltLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORToKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fSU5JVElBVE9SOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX2luaXRpYXRvcik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX2Zjc19pdG5pbV9mcmVlKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KKworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9zbV9wcmxpX3NlbmQoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV90cmMoaXRuaW0tPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9GUk1TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX3BybGkpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChpdG5pbS0+ZmNzLT5iZmEsICZpdG5pbS0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKGl0bmltLT5ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChpdG5pbS0+ZmNzLT5iZmEsICZpdG5pbS0+ZmN4cF93cWUpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9zbV9wcmxpKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkgICAgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV90cmMoaXRuaW0tPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faGNiX29ubGluZSk7CisJCWJmYV9pdG5pbV9vbmxpbmUoaXRuaW0tPmJmYV9pdG5pbSwgaXRuaW0tPnNlcV9yZWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9SU1BfRVJST1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9yZXRyeSk7CisJCWJmYV90aW1lcl9zdGFydChpdG5pbS0+ZmNzLT5iZmEsICZpdG5pbS0+dGltZXIsCisJCQkJYmZhX2Zjc19pdG5pbV90aW1lb3V0LCBpdG5pbSwKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKGl0bmltLT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fSU5JVElBVE9SOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX2luaXRpYXRvcik7CisJCS8qCisJCSAqIGRvbnQgZGlzY2FyZCBmY3hwLiBhY2NlcHQgd2lsbCByZWFjaCBzYW1lIHN0YXRlCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQoaXRuaW0tPmZjeHApOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9zbV9wcmxpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKTsKKwkJYmZhX2Zjc19pdG5pbV9zZW5kX3BybGkoaXRuaW0sIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmaXRuaW0tPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fSU5JVElBVE9SOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX2luaXRpYXRvcik7CisJCWJmYV90aW1lcl9zdG9wKCZpdG5pbS0+dGltZXIpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZpdG5pbS0+dGltZXIpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb25saW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0hDQl9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb25saW5lKTsKKwkJYmZhX2ZjYl9pdG5pbV9vbmxpbmUoaXRuaW0tPml0bmltX2Rydik7CisJCWJmYV9mY3NfaXRuaW1fYWVuX3Bvc3QoaXRuaW0sIEJGQV9JVE5JTV9BRU5fT05MSU5FKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2l0bmltX29mZmxpbmUoaXRuaW0tPmJmYV9pdG5pbSk7CisJCWJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKGl0bmltLT5ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19pdG5pbV9mcmVlKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb2ZmbGluZSk7CisJCWJmYV9mY2JfaXRuaW1fb2ZmbGluZShpdG5pbS0+aXRuaW1fZHJ2KTsKKwkJYmZhX2l0bmltX29mZmxpbmUoaXRuaW0tPmJmYV9pdG5pbSk7CisJCWlmIChiZmFfZmNzX3BvcnRfaXNfb25saW5lKGl0bmltLT5ycG9ydC0+cG9ydCkgPT0gQkZBX1RSVUUpIHsKKwkJCWJmYV9mY3NfaXRuaW1fYWVuX3Bvc3QoaXRuaW0sIEJGQV9JVE5JTV9BRU5fRElTQ09OTkVDVCk7CisJCX0gZWxzZSB7CisJCQliZmFfZmNzX2l0bmltX2Flbl9wb3N0KGl0bmltLCBCRkFfSVROSU1fQUVOX09GRkxJTkUpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19pdG5pbV9mcmVlKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc21faGNiX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkgICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0hDQl9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3NfaXRuaW1fZnJlZShpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIHN0YXRlIGlzIHNldCB3aGVuIGEgZGlzY292ZXJlZCBycG9ydCBpcyBhbHNvIGluIGludGlhdG9yIG1vZGUuCisgKiBUaGlzIElUTiBpcyBtYXJrZWQgYXMgbm9fb3AgYW5kIGlzIG5vdCBhY3RpdmUgYW5kIHdpbGwgbm90IGJlIHRydW5lZCBpbnRvCisgKiBvbmxpbmUgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX2luaXRpYXRvcihzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCSAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKGl0bmltLT5ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX1JTUF9FUlJPUjoKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fT05MSU5FOgorCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19pdG5pbV9mcmVlKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGl0bmltX3ByaXZhdGUgRkNTIElUTklNIHByaXZhdGUgaW50ZXJmYWNlcworICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkgICAgICAgZW51bSBiZmFfaXRuaW1fYWVuX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gaXRuaW0tPnJwb3J0OworCXVuaW9uIGJmYV9hZW5fZGF0YV91IGFlbl9kYXRhOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QgPSBycG9ydC0+ZmNzLT5sb2dtOworCXd3bl90ICAgICAgICAgICBscHd3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihycG9ydC0+cG9ydCk7CisJd3duX3QgICAgICAgICAgIHJwd3duID0gcnBvcnQtPnB3d247CisJY2hhciAgICAgICAgICAgIGxwd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKwljaGFyICAgICAgICAgICAgcnB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCisJLyoKKwkgKiBEb24ndCBwb3N0IGV2ZW50cyBmb3Igd2VsbCBrbm93biBhZGRyZXNzZXMKKwkgKi8KKwlpZiAoQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQlyZXR1cm47CisKKwl3d24yc3RyKGxwd3duX3B0ciwgbHB3d24pOworCXd3bjJzdHIocnB3d25fcHRyLCBycHd3bik7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fQUVOX09OTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fSVROSU1fT05MSU5FLCBycHd3bl9wdHIsIGxwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX0lUTklNX0FFTl9PRkZMSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JVE5JTV9PRkZMSU5FLCBycHd3bl9wdHIsIGxwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX0lUTklNX0FFTl9ESVNDT05ORUNUOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JVE5JTV9ESVNDT05ORUNULCBycHd3bl9wdHIsIGxwd3duX3B0cik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWFlbl9kYXRhLml0bmltLnZmX2lkID0gcnBvcnQtPnBvcnQtPmZhYnJpYy0+dmZfaWQ7CisJYWVuX2RhdGEuaXRuaW0ucHB3d24gPQorCQliZmFfZmNzX3BvcnRfZ2V0X3B3d24oYmZhX2Zjc19nZXRfYmFzZV9wb3J0KGl0bmltLT5mY3MpKTsKKwlhZW5fZGF0YS5pdG5pbS5scHd3biA9IGxwd3duOworCWFlbl9kYXRhLml0bmltLnJwd3duID0gcnB3d247Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NlbmRfcHJsaSh2b2lkICppdG5pbV9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IGl0bmltX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gaXRuaW0tPnJwb3J0OworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlpdG5pbS0+c3RhdHMuZmN4cF9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZpdG5pbS0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfaXRuaW1fc2VuZF9wcmxpLCBpdG5pbSk7CisJCXJldHVybjsKKwl9CisJaXRuaW0tPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcHJsaV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgaXRuaW0tPnJwb3J0LT5waWQsCisJCQkgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgcnBvcnQtPmJmYV9ycG9ydCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLAorCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsCisJCSAgICAgIGJmYV9mY3NfaXRuaW1fcHJsaV9yZXNwb25zZSwgKHZvaWQgKilpdG5pbSwgRkNfTUFYX1BEVVNaLAorCQkgICAgICBGQ19SQV9UT1YpOworCisJaXRuaW0tPnN0YXRzLnBybGlfc2VudCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX0ZSTVNFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9wcmxpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCSAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICopY2Jhcmc7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCXN0cnVjdCBmY19wcmxpX3MgICAgICAqcHJsaV9yZXNwOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCXN0cnVjdCBmY19wcmxpX3BhcmFtc19zICpzcGFyYW1zOworCisJYmZhX3RyYyhpdG5pbS0+ZmNzLCByZXFfc3RhdHVzKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJaXRuaW0tPnN0YXRzLnBybGlfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwlpZiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX0FDQykgeworCQlwcmxpX3Jlc3AgPSAoc3RydWN0IGZjX3BybGlfcyAqKSBlbHNfY21kOworCisJCWlmIChmY19wcmxpX3JzcF9wYXJzZShwcmxpX3Jlc3AsIHJzcF9sZW4pICE9IEZDX1BBUlNFX09LKSB7CisJCQliZmFfdHJjKGl0bmltLT5mY3MsIHJzcF9sZW4pOworCQkJLyoKKwkJCSAqIENoZWNrIGlmIHRoaXMgIHItcG9ydCBpcyBhbHNvIGluIEluaXRpYXRvciBtb2RlLgorCQkJICogSWYgc28sIHdlIG5lZWQgdG8gc2V0IHRoaXMgSVROIGFzIGEgbm8tb3AuCisJCQkgKi8KKwkJCWlmIChwcmxpX3Jlc3AtPnBhcmFtcGFnZS5zZXJ2cGFyYW1zLmluaXRpYXRvcikgeworCQkJCWJmYV90cmMoaXRuaW0tPmZjcywgcHJsaV9yZXNwLT5wYXJhbXBhZ2UudHlwZSk7CisJCQkJaXRuaW0tPnJwb3J0LT5zY3NpX2Z1bmN0aW9uID0KKwkJCQkJQkZBX1JQT1JUX0lOSVRJQVRPUjsKKwkJCQlpdG5pbS0+c3RhdHMucHJsaV9yc3BfYWNjKys7CisJCQkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sCisJCQkJCQkgIEJGQV9GQ1NfSVROSU1fU01fSU5JVElBVE9SKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWl0bmltLT5zdGF0cy5wcmxpX3JzcF9wYXJzZV9lcnIrKzsKKwkJCXJldHVybjsKKwkJfQorCQlpdG5pbS0+cnBvcnQtPnNjc2lfZnVuY3Rpb24gPSBCRkFfUlBPUlRfVEFSR0VUOworCisJCXNwYXJhbXMgPSAmcHJsaV9yZXNwLT5wYXJhbXBhZ2Uuc2VydnBhcmFtczsKKwkJaXRuaW0tPnNlcV9yZWMgPSBzcGFyYW1zLT5yZXRyeTsKKwkJaXRuaW0tPnJlY19zdXBwb3J0ID0gc3BhcmFtcy0+cmVjX3N1cHBvcnQ7CisJCWl0bmltLT50YXNrX3JldHJ5X2lkID0gc3BhcmFtcy0+dGFza19yZXRyeV9pZDsKKwkJaXRuaW0tPmNvbmZfY29tcCA9IHNwYXJhbXMtPmNvbmZpcm07CisKKwkJaXRuaW0tPnN0YXRzLnBybGlfcnNwX2FjYysrOworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9SU1BfT0spOworCX0gZWxzZSB7CisJCWxzX3JqdCA9IChzdHJ1Y3QgZmNfbHNfcmp0X3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCQliZmFfdHJjKGl0bmltLT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKGl0bmltLT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCk7CisKKwkJaXRuaW0tPnN0YXRzLnBybGlfcnNwX3JqdCsrOworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9SU1BfRVJST1IpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWFyZzsKKworCWl0bmltLT5zdGF0cy50aW1lb3V0Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fVElNRU9VVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX2ZyZWUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX2l0bmltX2RlbGV0ZShpdG5pbS0+YmZhX2l0bmltKTsKKwliZmFfZmNiX2l0bmltX2ZyZWUoaXRuaW0tPmZjcy0+YmZhZCwgaXRuaW0tPml0bmltX2Rydik7Cit9CisKKworCisvKioKKyAqICBpdG5pbV9wdWJsaWMgRkNTIElUTklNIHB1YmxpYyBpbnRlcmZhY2VzCisgKi8KKworLyoqCisgKiAJQ2FsbGVkIGJ5IHJwb3J0IHdoZW4gYSBuZXcgcnBvcnQgaXMgY3JlYXRlZC4KKyAqCisgKiBAcGFyYW1baW5dIHJwb3J0CS0gIHJlbW90ZSBwb3J0LgorICovCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICoKK2JmYV9mY3NfaXRuaW1fY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltOworCXN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2RydjsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKmJmYV9pdG5pbTsKKworCS8qCisJICogY2FsbCBiZmFkIHRvIGFsbG9jYXRlIHRoZSBpdG5pbQorCSAqLworCWJmYV9mY2JfaXRuaW1fYWxsb2MocG9ydC0+ZmNzLT5iZmFkLCAmaXRuaW0sICZpdG5pbV9kcnYpOworCWlmIChpdG5pbSA9PSBOVUxMKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSBpdG5pbQorCSAqLworCWl0bmltLT5ycG9ydCA9IHJwb3J0OworCWl0bmltLT5mY3MgPSBycG9ydC0+ZmNzOworCWl0bmltLT5pdG5pbV9kcnYgPSBpdG5pbV9kcnY7CisKKwkvKgorCSAqIGNhbGwgQkZBIHRvIGNyZWF0ZSB0aGUgaXRuaW0KKwkgKi8KKwliZmFfaXRuaW0gPSBiZmFfaXRuaW1fY3JlYXRlKHBvcnQtPmZjcy0+YmZhLCBycG9ydC0+YmZhX3Jwb3J0LCBpdG5pbSk7CisKKwlpZiAoYmZhX2l0bmltID09IE5VTEwpIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwkJYmZhX2ZjYl9pdG5pbV9mcmVlKHBvcnQtPmZjcy0+YmZhZCwgaXRuaW1fZHJ2KTsKKwkJYmZhX2Fzc2VydCgwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaXRuaW0tPmJmYV9pdG5pbSA9IGJmYV9pdG5pbTsKKwlpdG5pbS0+c2VxX3JlYyA9IEJGQV9GQUxTRTsKKwlpdG5pbS0+cmVjX3N1cHBvcnQgPSBCRkFfRkFMU0U7CisJaXRuaW0tPmNvbmZfY29tcCA9IEJGQV9GQUxTRTsKKwlpdG5pbS0+dGFza19yZXRyeV9pZCA9IEJGQV9GQUxTRTsKKworCS8qCisJICogU2V0IFN0YXRlIG1hY2hpbmUKKwkgKi8KKwliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCisJcmV0dXJuIGl0bmltOworfQorCisvKioKKyAqIAlDYWxsZWQgYnkgcnBvcnQgdG8gZGVsZXRlICB0aGUgaW5zdGFuY2Ugb2YgRkNQSU0uCisgKgorICogQHBhcmFtW2luXSBycG9ydAktICByZW1vdGUgcG9ydC4KKyAqLwordm9pZAorYmZhX2Zjc19pdG5pbV9kZWxldGUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnBpZCk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFKTsKK30KKworLyoqCisgKiBOb3RpZmljYXRpb24gZnJvbSBycG9ydCB0aGF0IFBMT0dJIGlzIGNvbXBsZXRlIHRvIGluaXRpYXRlIEZDLTQgc2Vzc2lvbi4KKyAqLwordm9pZAorYmZhX2Zjc19pdG5pbV9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJaXRuaW0tPnN0YXRzLm9ubGluZXMrKzsKKworCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKGl0bmltLT5ycG9ydC0+cGlkKSkgeworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9PTkxJTkUpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEZvciB3ZWxsIGtub3duIGFkZHJlc3Nlcywgd2Ugc2V0IHRoZSBpdG5pbSB0byBpbml0aWF0b3IKKwkJICogc3RhdGUKKwkJICovCisJCWl0bmltLT5zdGF0cy5pbml0aWF0b3IrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fSU5JVElBVE9SKTsKKwl9Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IHJwb3J0IHRvIGhhbmRsZSBhIHJlbW90ZSBkZXZpY2Ugb2ZmbGluZS4KKyAqLwordm9pZAorYmZhX2Zjc19pdG5pbV9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCWl0bmltLT5zdGF0cy5vZmZsaW5lcysrOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkUpOworfQorCisvKioKKyAqIENhbGxlZCBieSBycG9ydCB3aGVuIHJlbW90ZSBwb3J0IGlzIGtub3duIHRvIGJlIGFuIGluaXRpYXRvciBmcm9tCisgKiBQUkxJIHJlY2VpdmVkLgorICovCit2b2lkCitiZmFfZmNzX2l0bmltX2lzX2luaXRpYXRvcihzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cGlkKTsKKwlpdG5pbS0+c3RhdHMuaW5pdGlhdG9yKys7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fSU5JVElBVE9SKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgcnBvcnQgdG8gY2hlY2sgaWYgdGhlIGl0bmltIGlzIG9ubGluZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX2l0bmltX2dldF9vbmxpbmVfc3RhdGUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnBpZCk7CisJc3dpdGNoIChiZmFfc21fdG9fc3RhdGUoaXRuaW1fc21fdGFibGUsIGl0bmltLT5zbSkpIHsKKwljYXNlIEJGQV9JVE5JTV9PTkxJTkU6CisJY2FzZSBCRkFfSVROSU1fSU5JVElBVElPUjoKKwkJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUzsKKworCX0KK30KKworLyoqCisgKiBCRkEgY29tcGxldGlvbiBjYWxsYmFjayBmb3IgYmZhX2l0bmltX29ubGluZSgpLgorICovCit2b2lkCitiZmFfY2JfaXRuaW1fb25saW5lKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKiljYmFyZzsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9IQ0JfT05MSU5FKTsKK30KKworLyoqCisgKiBCRkEgY29tcGxldGlvbiBjYWxsYmFjayBmb3IgYmZhX2l0bmltX29mZmxpbmUoKS4KKyAqLwordm9pZAorYmZhX2NiX2l0bmltX29mZmxpbmUodm9pZCAqY2JfYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKiljYl9hcmc7CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fSENCX09GRkxJTkUpOworfQorCisvKioKKyAqIE1hcmsgdGhlIGJlZ2lubmluZyBvZiBQQVRIIFRPViBoYW5kbGluZy4gSU8gY29tcGxldGlvbiBjYWxsYmFja3MKKyAqIGFyZSBzdGlsbCBwZW5kaW5nLgorICovCit2b2lkCitiZmFfY2JfaXRuaW1fdG92X2JlZ2luKHZvaWQgKmNiX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICopY2JfYXJnOworCisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV9mY2JfaXRuaW1fdG92X2JlZ2luKGl0bmltLT5pdG5pbV9kcnYpOworfQorCisvKioKKyAqIE1hcmsgdGhlIGVuZCBvZiBQQVRIIFRPViBoYW5kbGluZy4gQWxsIHBlbmRpbmcgSU9zIGFyZSBhbHJlYWR5IGNsZWFuZWQgdXAuCisgKi8KK3ZvaWQKK2JmYV9jYl9pdG5pbV90b3Yodm9pZCAqY2JfYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKiljYl9hcmc7CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX2ZjYl9pdG5pbV90b3YoaXRuaW0tPml0bmltX2Rydik7Cit9CisKKy8qKgorICogCQlCRkEgbm90aWZpY2F0aW9uIHRvIEZDUy9kcml2ZXIgZm9yIHNlY29uZCBsZXZlbCBlcnJvciByZWNvdmVyeS4KKyAqCisgKiBBdGxlYXN0IG9uZSBJL08gcmVxdWVzdCBoYXMgdGltZWRvdXQgYW5kIHRhcmdldCBpcyB1bnJlc3BvbnNpdmUgdG8KKyAqIHJlcGVhdGVkIGFib3J0IHJlcXVlc3RzLiBTZWNvbmQgbGV2ZWwgZXJyb3IgcmVjb3Zlcnkgc2hvdWxkIGJlIGluaXRpYXRlZAorICogYnkgc3RhcnRpbmcgaW1wbGljaXQgbG9nb3V0IGFuZCByZWNvdmVyeSBwcm9jZWR1cmVzLgorICovCit2b2lkCitiZmFfY2JfaXRuaW1fc2xlcih2b2lkICpjYl9hcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWNiX2FyZzsKKworCWl0bmltLT5zdGF0cy5zbGVyKys7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV9mY3NfcnBvcnRfbG9nb19pbXAoaXRuaW0tPnJwb3J0KTsKK30KKworc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqCitiZmFfZmNzX2l0bmltX2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9sb29rdXAocG9ydCwgcnB3d24pOworCisJaWYgKCFycG9ydCkKKwkJcmV0dXJuIE5VTEw7CisKKwliZmFfYXNzZXJ0KHJwb3J0LT5pdG5pbSAhPSBOVUxMKTsKKwlyZXR1cm4gKHJwb3J0LT5pdG5pbSk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19pdG5pbV9hdHRyX2dldChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duLAorCQkgICAgICAgc3RydWN0IGJmYV9pdG5pbV9hdHRyX3MgKmF0dHIpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSBOVUxMOworCisJaXRuaW0gPSBiZmFfZmNzX2l0bmltX2xvb2t1cChwb3J0LCBycHd3bik7CisKKwlpZiAoaXRuaW0gPT0gTlVMTCkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfTk9fRkNQSU1fTkVYVVM7CisKKwlhdHRyLT5zdGF0ZSA9IGJmYV9zbV90b19zdGF0ZShpdG5pbV9zbV90YWJsZSwgaXRuaW0tPnNtKTsKKwlhdHRyLT5yZXRyeSA9IGl0bmltLT5zZXFfcmVjOworCWF0dHItPnJlY19zdXBwb3J0ID0gaXRuaW0tPnJlY19zdXBwb3J0OworCWF0dHItPmNvbmZfY29tcCA9IGl0bmltLT5jb25mX2NvbXA7CisJYXR0ci0+dGFza19yZXRyeV9pZCA9IGl0bmltLT50YXNrX3JldHJ5X2lkOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19pdG5pbV9zdGF0c19nZXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3biwKKwkJCXN0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcyAqc3RhdHMpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSBOVUxMOworCisJYmZhX2Fzc2VydChwb3J0ICE9IE5VTEwpOworCisJaXRuaW0gPSBiZmFfZmNzX2l0bmltX2xvb2t1cChwb3J0LCBycHd3bik7CisKKwlpZiAoaXRuaW0gPT0gTlVMTCkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfTk9fRkNQSU1fTkVYVVM7CisKKwliZmFfb3NfbWVtY3B5KHN0YXRzLCAmaXRuaW0tPnN0YXRzLCBzaXplb2Yoc3RydWN0IGJmYV9pdG5pbV9zdGF0c19zKSk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNzX2l0bmltX3N0YXRzX2NsZWFyKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSBOVUxMOworCisJYmZhX2Fzc2VydChwb3J0ICE9IE5VTEwpOworCisJaXRuaW0gPSBiZmFfZmNzX2l0bmltX2xvb2t1cChwb3J0LCBycHd3bik7CisKKwlpZiAoaXRuaW0gPT0gTlVMTCkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfTk9fRkNQSU1fTkVYVVM7CisKKwliZmFfb3NfbWVtc2V0KCZpdG5pbS0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MpKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwordm9pZAorYmZhX2Zjc19mY3BpbV91Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkgICAgICB1MTYgbGVuKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZDsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgZmNocy0+dHlwZSk7CisKKwlpZiAoZmNocy0+dHlwZSAhPSBGQ19UWVBFX0VMUykKKwkJcmV0dXJuOworCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKwljYXNlIEZDX0VMU19QUkxPOgorCQkvKiBiZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9QUkxPKTsgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKwordm9pZAorYmZhX2Zjc19pdG5pbV9wYXVzZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKK30KKwordm9pZAorYmZhX2Zjc19pdG5pbV9yZXN1bWUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7Cit9CisKKy8qKgorICogICBNb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZAorYmZhX2Zjc19mY3BpbV9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKK30KKworLyoqCisgKiAgIE1vZHVsZSBjbGVhbnVwCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmNwaW1fbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZjcHRtLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2ZjcHRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4YjA4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNwdG0uYwpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGR1bW15IEZDUFRNIHJvdXRpbmVzIHRvIGFpZCBpbiBJbml0aWF0b3IgTW9kZSBvbmx5CisgKiBjb21waWxhdGlvbiBvZiBPUyBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJiZmFfb3NfaW5jLmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX2ZjcHRtLmgiCisjaW5jbHVkZSAiZmNzL2JmYV9mY3NfcnBvcnQuaCIKKworc3RydWN0IGJmYV9mY3NfdGluX3MgKgorYmZhX2Zjc190aW5fY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXJldHVybiBOVUxMOworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9kZWxldGUoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbikKK3sKK30KKwordm9pZAorYmZhX2Zjc190aW5fcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbikKK3sKK30KKwordm9pZAorYmZhX2Zjc190aW5fcnhfcHJsaShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluLCBzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKQoreworfQorCit2b2lkCitiZmFfZmNzX2ZjcHRtX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbiwgc3RydWN0IGZjaHNfcyAqZmNocywgdTE2IGxlbikKK3sKK30KKwordm9pZAorYmZhX2Zjc190aW5fcGF1c2Uoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbikKK3sKK30KKwordm9pZAorYmZhX2Zjc190aW5fcmVzdW1lKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pCit7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWVlNjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3MuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjcy5oIEZDUyBtb2R1bGUgZnVuY3Rpb25zCisgKi8KKworCisjaWZuZGVmIF9fRkNTX0hfXworI2RlZmluZSBfX0ZDU19IX18KKworI2RlZmluZSBfX2Zjc19taW5fY2ZnKF9fZmNzKSAgICAgICAoX19mY3MpLT5taW5fY2ZnCisKK3ZvaWQgYmZhX2Zjc19tb2RleGl0X2NvbXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fRkNTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfYXV0aC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfYXV0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZDE1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19hdXRoLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3NfdWYuaCBGQ1MgdW5zb2xpY2l0ZWQgZnJhbWUgcmVjZWl2ZQorICovCisKKworI2lmbmRlZiBfX0ZDU19BVVRIX0hfXworI2RlZmluZSBfX0ZDU19BVVRIX0hfXworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc192cG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisKKy8qCisgKiBmY3MgZnJpZW5kIGZ1bmN0aW9uczogb25seSBiZXR3ZWVuIGZjcyBtb2R1bGVzCisgKi8KK3ZvaWQgYmZhX2Zjc19hdXRoX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywgaW50IGxlbik7Cit2b2lkIGJmYV9mY3NfYXV0aF9zdGFydChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3ZvaWQgYmZhX2Zjc19hdXRoX3N0b3Aoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CisKKyNlbmRpZiAvKiBfX0ZDU19VRl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZhYnJpYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmFicmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlOTYwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZhYnJpYy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX2xwb3J0LmggRkNTIGxvZ2ljYWwgcG9ydCBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0ZDU19GQUJSSUNfSF9fCisjZGVmaW5lIF9fRkNTX0ZBQlJJQ19IX18KKworI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfdnBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorCisvKgorKiBmY3MgZnJpZW5kIGZ1bmN0aW9uczogb25seSBiZXR3ZWVuIGZjcyBtb2R1bGVzCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY19tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX21vZHN1c3Aoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY19saW5rX3VwKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX2xpbmtfZG93bihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY19hZGR2cG9ydChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfZGVsdnBvcnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworaW50ICAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX2lzX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3N0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKmJmYV9mY3NfZmFicmljX3Zwb3J0X2xvb2t1cCgKKwkJCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsIHd3bl90IHB3d24pOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX21vZHN0YXJ0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJc3RydWN0IGZjaHNfcyAqZmNocywgdTE2IGxlbik7Cit1MTYgICAgICAgIGJmYV9mY3NfZmFicmljX3Zwb3J0X2NvdW50KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworYmZhX2Jvb2xlYW5fdCAgIGJmYV9mY3NfZmFicmljX2lzX2xvb3BiYWNrKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworZW51bSBiZmFfcHBvcnRfdHlwZSBiZmFfZmNzX2ZhYnJpY19wb3J0X3R5cGUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7Cit2b2lkICAgICAJYmZhX2Zjc19mYWJyaWNfcHN5bWJfaW5pdChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3ZvaWQgYmZhX2Zjc19mYWJyaWNfcG9ydF9kZWxldGVfY29tcChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKKworYmZhX3N0YXR1c190IGJmYV9mY3NfZmFicmljX2FkZHZmKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICp2ZiwKKwkJCXN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJCXN0cnVjdCBiZmFkX3ZmX3MgKnZmX2Rydik7Cit2b2lkIGJmYV9mY3NfYXV0aF9maW5pc2hlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJZW51bSBhdXRoX3N0YXR1cyBzdGF0dXMpOworCit2b2lkIGJmYV9mY3NfZmFicmljX3NldF9mYWJyaWNfbmFtZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJd3duX3QgZmFicmljX25hbWUpOworI2VuZGlmIC8qIF9fRkNTX0ZBQlJJQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjcGltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3BpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZTllMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3BpbS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19GQ1NfRkNQSU1fSF9fCisjZGVmaW5lIF9fRkNTX0ZDUElNX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorCisvKgorICogRm9sbG93aW5nIHJvdXRpbmVzIGFyZSBmcm9tIEZDUElNIGFuZCB3aWxsIGJlIGNhbGxlZCBieSBycG9ydC4KKyAqLworc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqYmZhX2Zjc19pdG5pbV9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX2l0bmltX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSk7Cit2b2lkIGJmYV9mY3NfaXRuaW1fcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSk7Cit2b2lkIGJmYV9mY3NfaXRuaW1fcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX2l0bmltX2dldF9vbmxpbmVfc3RhdGUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pOworCit2b2lkIGJmYV9mY3NfaXRuaW1faXNfaW5pdGlhdG9yKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9wYXVzZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSk7Cit2b2lkIGJmYV9mY3NfaXRuaW1fcmVzdW1lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKKworLyoKKyAqIE1vZHVkbGUgaW5pdC9jbGVhbnVwIHJvdXRpbmVzLgorICovCit2b2lkIGJmYV9mY3NfZmNwaW1fbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX2ZjcGltX21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19mY3BpbV91Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJdTE2IGxlbik7CisjZW5kaWYgLyogX19GQ1NfRkNQSU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3B0bS5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmNwdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmZmMDgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmNwdG0uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19GQ1NfRkNQVE1fSF9fCisjZGVmaW5lIF9fRkNTX0ZDUFRNX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorCisvKgorICogRm9sbG93aW5nIHJvdXRpbmVzIGFyZSBmcm9tIEZDUFRNIGFuZCB3aWxsIGJlIGNhbGxlZCBieSBycG9ydC4KKyAqLworc3RydWN0IGJmYV9mY3NfdGluX3MgKmJmYV9mY3NfdGluX2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfdGluX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbik7Cit2b2lkIGJmYV9mY3NfdGluX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKTsKK3ZvaWQgYmZhX2Zjc190aW5fZGVsZXRlKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pOwordm9pZCBiZmFfZmNzX3Rpbl9yeF9wcmxpKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4sIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKTsKK3ZvaWQgYmZhX2Zjc190aW5fcGF1c2Uoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbik7Cit2b2lkIGJmYV9mY3NfdGluX3Jlc3VtZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKTsKKworLyoKKyAqIE1vZHVkbGUgaW5pdC9jbGVhbnVwIHJvdXRpbmVzLgorICovCit2b2lkIGJmYV9mY3NfZmNwdG1fbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX2ZjcHRtX21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19mY3B0bV91Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4sIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKTsKKworI2VuZGlmIC8qIF9fRkNTX0ZDUFRNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmN4cC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmN4cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNzdmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3hwLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3NfZmN4cC5oIEZDWFAgaGVscGVyIG1hY3JvcyBmb3IgRkNTCisgKi8KKworCisjaWZuZGVmIF9fRkNTX0ZDWFBfSF9fCisjZGVmaW5lIF9fRkNTX0ZDWFBfSF9fCisKKyNkZWZpbmUgYmZhX2Zjc19mY3hwX2FsbG9jKF9fZmNzKQlcCisJYmZhX2ZjeHBfYWxsb2MoTlVMTCwgKF9fZmNzKS0+YmZhLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorCisjZW5kaWYgLyogX19GQ1NfRkNYUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2xwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19scG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzQ0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19scG9ydC5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19scG9ydC5oIEZDUyBsb2dpY2FsIHBvcnQgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19GQ1NfTFBPUlRfSF9fCisjZGVmaW5lIF9fRkNTX0xQT1JUX0hfXworCisjZGVmaW5lIF9fVlBPUlRfSF9fCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfcnBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc192cG9ydC5oPgorI2luY2x1ZGUgPGZjc19mYWJyaWMuaD4KKyNpbmNsdWRlIDxmY3NfbXMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGZjYnVpbGQuaD4KKworLyoKKyAqIFBJRCB1c2VkIGluIFAyUC9OMk4gKCBJbiBCaWcgRW5kaWFuKQorICovCisjZGVmaW5lIE4yTl9MT0NBTF9QSUQJICAgIDB4MDEwMDAwCisjZGVmaW5lIE4yTl9SRU1PVEVfUElECQkweDAyMDAwMAorCisvKgorICogTWlzYyBUaW1lb3V0cworICovCisvKgorICogVG8gYmUgdXNlZCB3aGVuIHNwYXduaW5nIGEgdGltZXIgYmVmb3JlIHJldHJ5aW5nIGEgZmFpbGVkIGNvbW1hbmQuIE1pbGxpCisgKiBTZWNzLgorICovCisjZGVmaW5lCUJGQV9GQ1NfUkVUUllfVElNRU9VVCAyMDAwCisKKy8qCisgKiBDaGVjayBmb3IgUG9ydC9WcG9ydCBNb2RlL1JvbGUKKyAqLworI2RlZmluZQlCRkFfRkNTX1ZQT1JUX0lTX0lOSVRJQVRPUl9NT0RFKHBvcnQpIFwKKwkJKHBvcnQtPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisKKyNkZWZpbmUJQkZBX0ZDU19WUE9SVF9JU19UQVJHRVRfTU9ERShwb3J0KSBcCisJCShwb3J0LT5wb3J0X2NmZy5yb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorCisjZGVmaW5lCUJGQV9GQ1NfVlBPUlRfSVNfSVBGQ19NT0RFKHBvcnQpIFwKKwkJKHBvcnQtPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykKKworLyoKKyAqIElzIHRoaXMgYSBXZWxsIEtub3duIEFkZHJlc3MKKyAqLworI2RlZmluZSBCRkFfRkNTX1BJRF9JU19XS0EocGlkKSAgKChiZmFfb3NfbnRvaDNiKHBpZCkgPiAweEZGRjAwMCkgPyAgMSA6IDApCisKKy8qCisgKiBQb2ludGVyIHRvIGVsZW1lbnRzIHdpdGhpbiBQb3J0CisgKi8KKyNkZWZpbmUgQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChwb3J0KSAgKHBvcnQtPmZjcy0+YmZhKQorI2RlZmluZSBCRkFfRkNTX0dFVF9OU19GUk9NX1BPUlQocG9ydCkgICgmcG9ydC0+cG9ydF90b3BvLnBmYWIubnMpCisjZGVmaW5lIEJGQV9GQ1NfR0VUX1NDTl9GUk9NX1BPUlQocG9ydCkgICgmcG9ydC0+cG9ydF90b3BvLnBmYWIuc2NuKQorI2RlZmluZSBCRkFfRkNTX0dFVF9NU19GUk9NX1BPUlQocG9ydCkgICgmcG9ydC0+cG9ydF90b3BvLnBmYWIubXMpCisjZGVmaW5lIEJGQV9GQ1NfR0VUX0ZETUlfRlJPTV9QT1JUKHBvcnQpICAoJnBvcnQtPnBvcnRfdG9wby5wZmFiLm1zLmZkbWkpCisKKy8qCisgKiBoYW5kbGVyIGZvciB1bnNvbGljaWVkIGZyYW1lcworICovCit2b2lkIGJmYV9mY3NfcG9ydF91Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqbHBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKTsKKworLyoKKyAqIEZvbGxvd2luZyByb3V0aW5lcyB3aWxsIGJlIGNhbGxlZCBieSBGYWJyaWMgdG8gaW5kaWNhdGUgcG9ydAorICogb25saW5lL29mZmxpbmUgdG8gdnBvcnQuCisgKi8KK3ZvaWQgYmZhX2Zjc19scG9ydF9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqbHBvcnQsIHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXUxNiB2Zl9pZCwgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFfZmNzX3BvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFfZmNzX3BvcnRfZGVsZXRlKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitiZmFfYm9vbGVhbl90ICAgYmZhX2Zjc19wb3J0X2lzX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCisvKgorICogTG9va3VwIHJwb3J0IGJhc2VkIG9uIFBJRAorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3BpZCgKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTMyIHBpZCk7CisKKy8qCisgKiBMb29rdXAgcnBvcnQgYmFzZWQgb24gUFdXTgorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3B3d24oCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHB3d24pOworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9ud3duKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBud3duKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2FkZF9ycG9ydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9kZWxfcnBvcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworCit2b2lkIGJmYV9mY3NfcG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfcG9ydF9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfcG9ydF9saXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKworI2VuZGlmIC8qIF9fRkNTX0xQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfbXMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX21zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhOGMxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX21zLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3NfbXMuaCBGQ1MgbXMgaW50ZXJmYWNlcworICovCisjaWZuZGVmIF9fRkNTX01TX0hfXworI2RlZmluZSBfX0ZDU19NU19IX18KKworLyogTVMgRkNTIHJvdXRpbmVzICovCit2b2lkIGJmYV9mY3NfcG9ydF9tc19pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9tc19vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9tc19vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X21zX2ZhYnJpY19yc2NuKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CisKKy8qIEZETUkgRkNTIHJvdXRpbmVzICovCit2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyk7Cit2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyk7Cit2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19wb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiNjUxOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3BvcnQuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19wcG9ydC5oIEZDUyBwaHlzaWNhbCBwb3J0IGludGVyZmFjZXMKKyAqLworCisKKyNpZm5kZWYgX19GQ1NfUFBPUlRfSF9fCisjZGVmaW5lIF9fRkNTX1BQT1JUX0hfXworCisvKgorICogZmNzIGZyaWVuZCBmdW5jdGlvbnM6IG9ubHkgYmV0d2VlbiBmY3MgbW9kdWxlcworICovCit2b2lkIGJmYV9mY3NfcHBvcnRfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX3Bwb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fRkNTX1BQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfcnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Jwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwMWU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Jwb3J0LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3NfcnBvcnQuaCBGQ1MgcnBvcnQgaW50ZXJmYWNlcyBhbmQgZGVmaW5lcworICovCisKKyNpZm5kZWYgX19GQ1NfUlBPUlRfSF9fCisjZGVmaW5lIF9fRkNTX1JQT1JUX0hfXworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfcnBvcnQuaD4KKwordm9pZCBiZmFfZmNzX3Jwb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CisKK3ZvaWQgYmZhX2Zjc19ycG9ydF91Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJdTE2IGxlbik7Cit2b2lkIGJmYV9mY3NfcnBvcnRfc2NuKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKKworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19ycG9ydF9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJdTMyIHBpZCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X3N0YXJ0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpX3JzcCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfcGxvZ2lfY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQlzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfbG9nb19pbXAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfaXRudG1fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF90aW5fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9mY3B0bV9vZmZsaW5lX2RvbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworaW50ICBiZmFfZmNzX3Jwb3J0X2dldF9zdGF0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3Jwb3J0X2NyZWF0ZV9ieV93d24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3Qgd3duKTsKKworCisvKiBScG9ydCBGZWF0dXJlcyAqLwordm9pZCAgYmZhX2Zjc19ycGZfaW5pdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkICBiZmFfZmNzX3JwZl9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCAgYmZhX2Zjc19ycGZfcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CisKKyNlbmRpZiAvKiBfX0ZDU19SUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3RyY21vZC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfdHJjbW9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiNWFlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3RyY21vZC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX3RyY21vZC5oIEJGQSBGQ1MgdHJhY2UgbW9kdWxlcworICovCisKKyNpZm5kZWYgX19GQ1NfVFJDTU9EX0hfXworI2RlZmluZSBfX0ZDU19UUkNNT0RfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisKKy8qCisgKiAhISEgT25seSBhcHBlbmQgdG8gdGhlIGVudW1zIGRlZmluZWQgaGVyZSB0byBhdm9pZCBhbnkgdmVyc2lvbmluZworICogISEhIG5lZWRlZCBiZXR3ZWVuIHRyYWNlIHV0aWxpdHkgYW5kIGRyaXZlciB2ZXJzaW9uCisgKi8KK2VudW0geworCUJGQV9UUkNfRkNTX0ZBQlJJQwkJPSAxLAorCUJGQV9UUkNfRkNTX1ZGQVBJCQk9IDIsCisJQkZBX1RSQ19GQ1NfUE9SVAkJPSAzLAorCUJGQV9UUkNfRkNTX1ZQT1JUCQk9IDQsCisJQkZBX1RSQ19GQ1NfVlBfQVBJCQk9IDUsCisJQkZBX1RSQ19GQ1NfVlBTCQkJPSA2LAorCUJGQV9UUkNfRkNTX1JQT1JUCQk9IDcsCisJQkZBX1RSQ19GQ1NfRkNQSU0JCT0gOCwKKwlCRkFfVFJDX0ZDU19GQ1BUTQkJPSA5LAorCUJGQV9UUkNfRkNTX05TCQkJPSAxMCwKKwlCRkFfVFJDX0ZDU19TQ04JCQk9IDExLAorCUJGQV9UUkNfRkNTX0xPT1AJCT0gMTIsCisJQkZBX1RSQ19GQ1NfVUYJCQk9IDEzLAorCUJGQV9UUkNfRkNTX1BQT1JUCQk9IDE0LAorCUJGQV9UUkNfRkNTX0ZDUElQCQk9IDE1LAorCUJGQV9UUkNfRkNTX1BPUlRfQVBJCT0gMTYsCisJQkZBX1RSQ19GQ1NfUlBPUlRfQVBJCT0gMTcsCisJQkZBX1RSQ19GQ1NfQVVUSAkJPSAxOCwKKwlCRkFfVFJDX0ZDU19OMk4JCQk9IDE5LAorCUJGQV9UUkNfRkNTX01TCQkJPSAyMCwKKwlCRkFfVFJDX0ZDU19GRE1JCQk9IDIxLAorCUJGQV9UUkNfRkNTX1JQT1JUX0ZUUlMJPSAyMiwKK307CisKKyNlbmRpZiAvKiBfX0ZDU19UUkNNT0RfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc191Zi5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfdWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmYxYmRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfdWYuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc191Zi5oIEZDUyB1bnNvbGljaXRlZCBmcmFtZSByZWNlaXZlCisgKi8KKworCisjaWZuZGVmIF9fRkNTX1VGX0hfXworI2RlZmluZSBfX0ZDU19VRl9IX18KKworLyoKKyAqIGZjcyBmcmllbmQgZnVuY3Rpb25zOiBvbmx5IGJldHdlZW4gZmNzIG1vZHVsZXMKKyAqLwordm9pZCBiZmFfZmNzX3VmX21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc191Zl9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CisKKyNlbmRpZiAvKiBfX0ZDU19VRl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Zwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc192cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODBiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc192cG9ydC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDU19WUE9SVF9IX18KKyNkZWZpbmUgX19GQ1NfVlBPUlRfSF9fCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wY2kuaD4KKworLyoKKyAqIE1vZHVkbGUgaW5pdC9jbGVhbnVwIHJvdXRpbmVzLgorICovCisKK3ZvaWQgYmZhX2Zjc192cG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfdnBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworCit2b2lkIGJmYV9mY3NfdnBvcnRfY2xlYW51cChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7Cit2b2lkIGJmYV9mY3NfdnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9kZWxldGVfY29tcChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7Cit1MzIgYmZhX2Zjc192cG9ydF9nZXRfbWF4KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CisKKyNlbmRpZiAvKiBfX0ZDU19WUE9SVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mZG1pLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2ZkbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQ1ZWIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mZG1pLmMKQEAgLTAsMCArMSwxMjIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIHBvcnRfYXBpLmMgQkZBIEZDUyBwb3J0CisgKi8KKworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImxwb3J0X3ByaXYuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19mZG1pLmg+CisKK0JGQV9UUkNfRklMRShGQ1MsIEZETUkpOworCisjZGVmaW5lIEJGQV9GQ1NfRkRNSV9DTURfTUFYX1JFVFJJRVMgMgorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcmhiYSh2b2lkICpmZG1pX2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9ycHJ0KHZvaWQgKmZkbWlfY2JhcmcsCisJCQkJCSAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwYSh2b2lkICpmZG1pX2NiYXJnLAorCQkJCQkgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9yaGJhX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9ycHJ0X3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9ycGFfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQodm9pZCAqYXJnKTsKK3N0YXRpYyB1MTYgYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcmhiYV9weWxkKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksIHU4ICpweWxkKTsKK3N0YXRpYyB1MTYgYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcnBydF9weWxkKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksIHU4ICpweWxkKTsKK3N0YXRpYyB1MTYgYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcnBhX3B5bGQoCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwgdTggKnB5bGQpOworc3RhdGljIHUxNiBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9wb3J0YXR0cl9ibG9jaygKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLCB1OCAqcHlsZCk7Cit2b2lkIGJmYV9mY3NfZmRtaV9nZXRfaGJhYXR0cihzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCXN0cnVjdCBiZmFfZmNzX2ZkbWlfaGJhX2F0dHJfcyAqaGJhX2F0dHIpOwordm9pZCBiZmFfZmNzX2ZkbWlfZ2V0X3BvcnRhdHRyKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJc3RydWN0IGJmYV9mY3NfZmRtaV9wb3J0X2F0dHJfcyAqcG9ydF9hdHRyKTsKKy8qKgorICogIGZjc19mZG1pX3NtIEZDUyBGRE1JIHN0YXRlIG1hY2hpbmUKKyAqLworCisvKioKKyAqICBGRE1JIFN0YXRlIE1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gcG9ydF9mZG1pX2V2ZW50IHsKKwlGRE1JU01fRVZFTlRfUE9SVF9PTkxJTkUgPSAxLAorCUZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkUgPSAyLAorCUZETUlTTV9FVkVOVF9SU1BfT0sgPSA0LAorCUZETUlTTV9FVkVOVF9SU1BfRVJST1IgPSA1LAorCUZETUlTTV9FVkVOVF9USU1FT1VUID0gNiwKKwlGRE1JU01fRVZFTlRfUkhCQV9TRU5UID0gNywKKwlGRE1JU01fRVZFTlRfUlBSVF9TRU5UID0gOCwKKwlGRE1JU01fRVZFTlRfUlBBX1NFTlQgPSA5LAorfTsKKworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcmhiYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JoYmEoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9yaGJhX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19ycHJ0KHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JwcnRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9zZW5kaW5nX3JwYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGEoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBhX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKKy8qKgorICogCQlTdGFydCBpbiBvZmZsaW5lIHN0YXRlIC0gYXdhaXRpbmcgTVMgdG8gc2VuZCBzdGFydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgICAgIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlmZG1pLT5yZXRyeV9jbnQgPSAwOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT05MSU5FOgorCQlpZiAocG9ydC0+dnBvcnQpIHsKKwkJCS8qCisJCQkgKiBGb3IgVnBvcnRzLCByZWdpc3RlciBhIG5ldyBwb3J0LgorCQkJICovCisJCQliZmFfc21fc2V0X3N0YXRlKGZkbWksCisJCQkJCSBiZmFfZmNzX3BvcnRfZmRtaV9zbV9zZW5kaW5nX3JwcnQpOworCQkJYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9ycHJ0KGZkbWksIE5VTEwpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEZvciBhIGJhc2UgcG9ydCwgd2Ugc2hvdWxkIGZpcnN0IHJlZ2lzdGVyIHRoZSBIQkEKKwkJCSAqIGF0cmlidXRlLiBUaGUgSEJBIGF0dHJpYnV0ZSBhbHNvIGNvbnRhaW5zIHRoZSBiYXNlCisJCQkgKiAgcG9ydCByZWdpc3RyYXRpb24uCisJCQkgKi8KKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwKKwkJCQkJIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcmhiYSk7CisJCQliZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JoYmEoZmRtaSwgTlVMTCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9zZW5kaW5nX3JoYmEoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkJICBlbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1JIQkFfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9yaGJhKTsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChwb3J0KSwKKwkJCQkgICAgICAgJmZkbWktPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3JoYmEoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBpZiBtYXggcmV0cmllcyBoYXZlIG5vdCBiZWVuIHJlYWNoZWQsIHN0YXJ0IHRpbWVyIGZvciBhCisJCSAqIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWlmIChmZG1pLT5yZXRyeV9jbnQrKyA8IEJGQV9GQ1NfRkRNSV9DTURfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcmhiYV9yZXRyeSk7CisJCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChwb3J0KSwKKwkJCQkJJmZkbWktPnRpbWVyLCBiZmFfZmNzX3BvcnRfZmRtaV90aW1lb3V0LAorCQkJCQlmZG1pLCBCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHNldCBzdGF0ZSB0byBvZmZsaW5lCisJCQkgKi8KKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfT0s6CisJCS8qCisJCSAqIEluaXRpYXRlIFJlZ2lzdGVyIFBvcnQgQXR0cmlidXRlcworCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9zZW5kaW5nX3JwYSk7CisJCWZkbWktPnJldHJ5X2NudCA9IDA7CisJCWJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBhKGZkbWksIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX2ZjeHBfZGlzY2FyZChmZG1pLT5mY3hwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3JoYmFfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcmhiYSk7CisJCWJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcmhiYShmZG1pLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZmZG1pLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qCisqIFJQUlQgOiBSZWdpc3RlciBQb3J0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9zZW5kaW5nX3JwcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkJICBlbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1JQUlRfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycHJ0KTsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChwb3J0KSwKKwkJCQkgICAgICAgJmZkbWktPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3JwcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBpZiBtYXggcmV0cmllcyBoYXZlIG5vdCBiZWVuIHJlYWNoZWQsIHN0YXJ0IHRpbWVyIGZvciBhCisJCSAqIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWlmIChmZG1pLT5yZXRyeV9jbnQrKyA8IEJGQV9GQ1NfRkRNSV9DTURfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBydF9yZXRyeSk7CisJCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChwb3J0KSwKKwkJCQkJJmZkbWktPnRpbWVyLCBiZmFfZmNzX3BvcnRfZmRtaV90aW1lb3V0LAorCQkJCQlmZG1pLCBCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogc2V0IHN0YXRlIHRvIG9mZmxpbmUKKwkJCSAqLworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJCWZkbWktPnJldHJ5X2NudCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfT0s6CisJCWZkbWktPnJldHJ5X2NudCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb25saW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9mY3hwX2Rpc2NhcmQoZmRtaS0+ZmN4cCk7CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycHJ0X3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfVElNRU9VVDoKKwkJLyoKKwkJICogUmV0cnkgVGltZXIgRXhwaXJlZC4gUmUtc2VuZAorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9zZW5kaW5nX3JwcnQpOworCQliZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwcnQoZmRtaSwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmZmRtaS0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKgorICogUmVnaXN0ZXIgUG9ydCBBdHRyaWJ1dGVzCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9zZW5kaW5nX3JwYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9SUEFfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGEpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCSAgICAgICAmZmRtaS0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBhKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBpZiBtYXggcmV0cmllcyBoYXZlIG5vdCBiZWVuIHJlYWNoZWQsIHN0YXJ0IHRpbWVyIGZvciBhCisJCSAqIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWlmIChmZG1pLT5yZXRyeV9jbnQrKyA8IEJGQV9GQ1NfRkRNSV9DTURfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBhX3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCQkmZmRtaS0+dGltZXIsIGJmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQsCisJCQkJCWZkbWksIEJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogc2V0IHN0YXRlIHRvIG9mZmxpbmUKKwkJCSAqLworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJCWZkbWktPnJldHJ5X2NudCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb25saW5lKTsKKwkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9mY3hwX2Rpc2NhcmQoZmRtaS0+ZmN4cCk7CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGFfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgICAgICAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBhKTsKKwkJYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9ycGEoZmRtaSwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmZmRtaS0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJICAgIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKy8qKgorKiAgIFJIQkEgOiBSZWdpc3RlciBIQkEgQXR0cmlidXRlcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcmhiYSh2b2lkICpmZG1pX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gZmRtaV9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbiwgYXR0cl9sZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICpweWxkOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmZmRtaS0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcmhiYSwgZmRtaSk7CisJCXJldHVybjsKKwl9CisJZmRtaS0+ZmN4cCA9IGZjeHA7CisKKwlweWxkID0gYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKTsKKwliZmFfb3NfbWVtc2V0KHB5bGQsIDAsIEZDX01BWF9QRFVTWik7CisKKwlsZW4gPSBmY19mZG1pX3JlcWhkcl9idWlsZCgmZmNocywgcHlsZCwgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLAorCQkJCSAgIEZETUlfUkhCQSk7CisKKwlhdHRyX2xlbiA9IGJmYV9mY3NfcG9ydF9mZG1pX2J1aWxkX3JoYmFfcHlsZChmZG1pLAorCQkJKHU4ICopICgoc3RydWN0IGN0X2hkcl9zICopIHB5bGQgKyAxKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCAobGVuICsgYXR0cl9sZW4pLCAmZmNocywKKwkJICAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfcmhiYV9yZXNwb25zZSwgKHZvaWQgKilmZG1pLAorCQkgICAgICBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUkhCQV9TRU5UKTsKK30KKworc3RhdGljICAgICAgICAgIHUxNgorYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcmhiYV9weWxkKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCSAgdTggKnB5bGQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zIGhiYV9hdHRyOwkvKiBAdG9kbyAqLworCXN0cnVjdCBiZmFfZmNzX2ZkbWlfaGJhX2F0dHJfcyAqZmNzX2hiYV9hdHRyID0gJmhiYV9hdHRyOyAvKiBAdG9kbyAqLworCXN0cnVjdCBmZG1pX3JoYmFfcyAgICAqcmhiYSA9IChzdHJ1Y3QgZmRtaV9yaGJhX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmRtaV9hdHRyX3MgICAgKmF0dHI7CisJdTggICAgICAgICpjdXJyX3B0cjsKKwl1MTYgICAgICAgIGxlbiwgY291bnQ7CisKKwkvKgorCSAqIGdldCBoYmEgYXR0cmlidXRlcworCSAqLworCWJmYV9mY3NfZmRtaV9nZXRfaGJhYXR0cihmZG1pLCBmY3NfaGJhX2F0dHIpOworCisJcmhiYS0+aGJhX2lkID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCXJoYmEtPnBvcnRfbGlzdC5udW1fcG9ydHMgPSBiZmFfb3NfaHRvbmwoMSk7CisJcmhiYS0+cG9ydF9saXN0LnBvcnRfZW50cnkgPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisKKwlsZW4gPSBzaXplb2YocmhiYS0+aGJhX2lkKSArIHNpemVvZihyaGJhLT5wb3J0X2xpc3QpOworCisJY291bnQgPSAwOworCWxlbiArPSBzaXplb2YocmhiYS0+aGJhX2F0dHJfYmxrLmF0dHJfY291bnQpOworCisJLyoKKwkgKiBmaWxsIG91dCB0aGUgaW52aWRpZHVhbCBlbnRyaWVzIG9mIHRoZSBIQkEgYXR0cmliIEJsb2NrCisJICovCisJY3Vycl9wdHIgPSAodTggKikgJnJoYmEtPmhiYV9hdHRyX2Jsay5oYmFfYXR0cjsKKworCS8qCisJICogTm9kZSBOYW1lCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX0hCQV9BVFRSSUJfTk9ERU5BTUUpOworCWF0dHItPmxlbiA9IHNpemVvZih3d25fdCk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCAmYmZhX2Zjc19wb3J0X2dldF9ud3duKHBvcnQpLCBhdHRyLT5sZW4pOworCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCWxlbiArPSBhdHRyLT5sZW47CisJY291bnQrKzsKKwlhdHRyLT5sZW4gPQorCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCisJLyoKKwkgKiBNYW51ZmFjdHVyZXIKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9NQU5VRkFDVFVSRVIpOworCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPm1hbnVmYWN0dXJlcik7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPm1hbnVmYWN0dXJlciwgYXR0ci0+bGVuKTsKKwkvKiB2YXJpYWJsZSBmaWVsZHMgbmVlZCB0byBiZSA0IGJ5dGUgYWxpZ25lZCAqLworCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIFNlcmlhbCBOdW1iZXIKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9TRVJJQUxOVU0pOworCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPnNlcmlhbF9udW0pOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5zZXJpYWxfbnVtLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCWNvdW50Kys7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogTW9kZWwKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9NT0RFTCk7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+bW9kZWwpOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5tb2RlbCwgYXR0ci0+bGVuKTsKKwkvKiB2YXJpYWJsZSBmaWVsZHMgbmVlZCB0byBiZSA0IGJ5dGUgYWxpZ25lZCAqLworCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE1vZGVsIERlc2MKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9NT0RFTF9ERVNDKTsKKwlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5tb2RlbF9kZXNjKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+bW9kZWxfZGVzYywgYXR0ci0+bGVuKTsKKwkvKiB2YXJpYWJsZSBmaWVsZHMgbmVlZCB0byBiZSA0IGJ5dGUgYWxpZ25lZCAqLworCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIEgvVyBWZXJzaW9uCisJICovCisJaWYgKGZjc19oYmFfYXR0ci0+aHdfdmVyc2lvblswXSAhPSAnXDAnKSB7CisJCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCQlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9IV19WRVJTSU9OKTsKKwkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+aHdfdmVyc2lvbik7CisJCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5od192ZXJzaW9uLCBhdHRyLT5sZW4pOworCQkvKiB2YXJpYWJsZSBmaWVsZHMgbmVlZCB0byBiZSA0IGJ5dGUgYWxpZ25lZCAqLworCQlhdHRyLT5sZW4gPSBmY19yb3VuZHVwKGF0dHItPmxlbiwgc2l6ZW9mKHUzMikpOworCQljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwkJbGVuICs9IGF0dHItPmxlbjsKKwkJY291bnQrKzsKKwkJYXR0ci0+bGVuID0KKwkJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCX0KKworCS8qCisJICogRHJpdmVyIFZlcnNpb24KKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9EUklWRVJfVkVSU0lPTik7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+ZHJpdmVyX3ZlcnNpb24pOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbiwgYXR0ci0+bGVuKTsKKwkvKiB2YXJpYWJsZSBmaWVsZHMgbmVlZCB0byBiZSA0IGJ5dGUgYWxpZ25lZCAqLworCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjs7CisJY291bnQrKzsKKwlhdHRyLT5sZW4gPQorCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCisJLyoKKwkgKiBPcHRpb24gUm9tIFZlcnNpb24KKwkgKi8KKwlpZiAoZmNzX2hiYV9hdHRyLT5vcHRpb25fcm9tX3ZlclswXSAhPSAnXDAnKSB7CisJCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCQlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9ST01fVkVSU0lPTik7CisJCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPm9wdGlvbl9yb21fdmVyKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPm9wdGlvbl9yb21fdmVyLCBhdHRyLT5sZW4pOworCQkvKiB2YXJpYWJsZSBmaWVsZHMgbmVlZCB0byBiZSA0IGJ5dGUgYWxpZ25lZCAqLworCQlhdHRyLT5sZW4gPSBmY19yb3VuZHVwKGF0dHItPmxlbiwgc2l6ZW9mKHUzMikpOworCQljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwkJbGVuICs9IGF0dHItPmxlbjsKKwkJY291bnQrKzsKKwkJYXR0ci0+bGVuID0KKwkJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCX0KKworCS8qCisJICogZi93IFZlcnNpb24gPSBkcml2ZXIgdmVyc2lvbgorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX0ZXX1ZFUlNJT04pOworCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPmRyaXZlcl92ZXJzaW9uKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+ZHJpdmVyX3ZlcnNpb24sIGF0dHItPmxlbik7CisJLyogdmFyaWFibGUgZmllbGRzIG5lZWQgdG8gYmUgNCBieXRlIGFsaWduZWQgKi8KKwlhdHRyLT5sZW4gPSBmY19yb3VuZHVwKGF0dHItPmxlbiwgc2l6ZW9mKHUzMikpOworCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCWxlbiArPSBhdHRyLT5sZW47CisJY291bnQrKzsKKwlhdHRyLT5sZW4gPQorCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCisJLyoKKwkgKiBPUyBOYW1lCisJICovCisJaWYgKGZjc19oYmFfYXR0ci0+b3NfbmFtZVswXSAhPSAnXDAnKSB7CisJCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCQlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9PU19OQU1FKTsKKwkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+b3NfbmFtZSk7CisJCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5vc19uYW1lLCBhdHRyLT5sZW4pOworCQkvKiB2YXJpYWJsZSBmaWVsZHMgbmVlZCB0byBiZSA0IGJ5dGUgYWxpZ25lZCAqLworCQlhdHRyLT5sZW4gPSBmY19yb3VuZHVwKGF0dHItPmxlbiwgc2l6ZW9mKHUzMikpOworCQljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwkJbGVuICs9IGF0dHItPmxlbjsKKwkJY291bnQrKzsKKwkJYXR0ci0+bGVuID0KKwkJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCX0KKworCS8qCisJICogTUFYX0NUX1BBWUxPQUQKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9NQVhfQ1QpOworCWF0dHItPmxlbiA9IHNpemVvZihmY3NfaGJhX2F0dHItPm1heF9jdF9weWxkKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsICZmY3NfaGJhX2F0dHItPm1heF9jdF9weWxkLCBhdHRyLT5sZW4pOworCWxlbiArPSBhdHRyLT5sZW47CisJY291bnQrKzsKKwlhdHRyLT5sZW4gPQorCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCisJLyoKKwkgKiBVcGRhdGUgc2l6ZSBvZiBwYXlsb2FkCisJICovCisJbGVuICs9ICgoc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikpICogY291bnQpOworCisJcmhiYS0+aGJhX2F0dHJfYmxrLmF0dHJfY291bnQgPSBiZmFfb3NfaHRvbmwoY291bnQpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9yaGJhX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwljdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX250b2hzKGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCisJaWYgKGN0aGRyLT5jbWRfcnNwX2NvZGUgPT0gQ1RfUlNQX0FDQ0VQVCkgeworCQliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfRVJST1IpOworfQorCisvKioKKyogICBSUFJUIDogUmVnaXN0ZXIgUG9ydAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9ycHJ0KHZvaWQgKmZkbWlfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSBmZG1pX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwl1MTYgICAgICAgIGxlbiwgYXR0cl9sZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICpweWxkOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmZmRtaS0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBydCwgZmRtaSk7CisJCXJldHVybjsKKwl9CisJZmRtaS0+ZmN4cCA9IGZjeHA7CisKKwlweWxkID0gYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKTsKKwliZmFfb3NfbWVtc2V0KHB5bGQsIDAsIEZDX01BWF9QRFVTWik7CisKKwlsZW4gPSBmY19mZG1pX3JlcWhkcl9idWlsZCgmZmNocywgcHlsZCwgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLAorCQkJCSAgIEZETUlfUlBSVCk7CisKKwlhdHRyX2xlbiA9IGJmYV9mY3NfcG9ydF9mZG1pX2J1aWxkX3JwcnRfcHlsZChmZG1pLAorCQkJKHU4ICopICgoc3RydWN0IGN0X2hkcl9zICopIHB5bGQgKyAxKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4gKyBhdHRyX2xlbiwgJmZjaHMsCisJCSAgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JwcnRfcmVzcG9uc2UsICh2b2lkICopZmRtaSwKKwkJICAgICAgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JQUlRfU0VOVCk7Cit9CisKKy8qKgorICogVGhpcyByb3V0aW5lIGJ1aWxkcyBQb3J0IEF0dHJpYnV0ZSBCbG9jayB0aGF0IHVzZWQgaW4gUlBBLCBSUFJUIGNvbW1hbmRzLgorICovCitzdGF0aWMgICAgICAgICAgdTE2CitiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9wb3J0YXR0cl9ibG9jayhzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgICAgICAgdTggKnB5bGQpCit7CisJc3RydWN0IGJmYV9mY3NfZmRtaV9wb3J0X2F0dHJfcyBmY3NfcG9ydF9hdHRyOworCXN0cnVjdCBmZG1pX3BvcnRfYXR0cl9zICpwb3J0X2F0dHJpYiA9IChzdHJ1Y3QgZmRtaV9wb3J0X2F0dHJfcyAqKSBweWxkOworCXN0cnVjdCBmZG1pX2F0dHJfcyAgICAqYXR0cjsKKwl1OCAgICAgICAgKmN1cnJfcHRyOworCXUxNiAgICAgICAgbGVuOworCXU4ICAgICAgICAgY291bnQgPSAwOworCisJLyoKKwkgKiBnZXQgcG9ydCBhdHRyaWJ1dGVzCisJICovCisJYmZhX2Zjc19mZG1pX2dldF9wb3J0YXR0cihmZG1pLCAmZmNzX3BvcnRfYXR0cik7CisKKwlsZW4gPSBzaXplb2YocG9ydF9hdHRyaWItPmF0dHJfY291bnQpOworCisJLyoKKwkgKiBmaWxsIG91dCB0aGUgaW52aWRpZHVhbCBlbnRyaWVzCisJICovCisJY3Vycl9wdHIgPSAodTggKikgJnBvcnRfYXR0cmliLT5wb3J0X2F0dHI7CisKKwkvKgorCSAqIEZDNCBUeXBlcworCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9QT1JUX0FUVFJJQl9GQzRfVFlQRVMpOworCWF0dHItPmxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLnN1cHBfZmM0X3R5cGVzKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19wb3J0X2F0dHIuc3VwcF9mYzRfdHlwZXMsIGF0dHItPmxlbik7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwkrK2NvdW50OworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIFN1cHBvcnRlZCBTcGVlZAorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9QT1JUX0FUVFJJQl9TVVBQX1NQRUVEKTsKKwlhdHRyLT5sZW4gPSBzaXplb2YoZmNzX3BvcnRfYXR0ci5zdXBwX3NwZWVkKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsICZmY3NfcG9ydF9hdHRyLnN1cHBfc3BlZWQsIGF0dHItPmxlbik7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwkrK2NvdW50OworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIGN1cnJlbnQgUG9ydCBTcGVlZAorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9QT1JUX0FUVFJJQl9QT1JUX1NQRUVEKTsKKwlhdHRyLT5sZW4gPSBzaXplb2YoZmNzX3BvcnRfYXR0ci5jdXJyX3NwZWVkKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsICZmY3NfcG9ydF9hdHRyLmN1cnJfc3BlZWQsIGF0dHItPmxlbik7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwkrK2NvdW50OworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIG1heCBmcmFtZSBzaXplCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX0ZSQU1FX1NJWkUpOworCWF0dHItPmxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLm1heF9mcm1fc2l6ZSk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCAmZmNzX3BvcnRfYXR0ci5tYXhfZnJtX3NpemUsIGF0dHItPmxlbik7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwkrK2NvdW50OworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE9TIERldmljZSBOYW1lCisJICovCisJaWYgKGZjc19wb3J0X2F0dHIub3NfZGV2aWNlX25hbWVbMF0gIT0gJ1wwJykgeworCQlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwkJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX0RFVl9OQU1FKTsKKwkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19wb3J0X2F0dHIub3NfZGV2aWNlX25hbWUpOworCQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19wb3J0X2F0dHIub3NfZGV2aWNlX25hbWUsIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQkrK2NvdW50OworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwl9CisJLyoKKwkgKiBIb3N0IE5hbWUKKwkgKi8KKwlpZiAoZmNzX3BvcnRfYXR0ci5ob3N0X25hbWVbMF0gIT0gJ1wwJykgeworCQlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwkJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX0hPU1RfTkFNRSk7CisJCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfcG9ydF9hdHRyLmhvc3RfbmFtZSk7CisJCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX3BvcnRfYXR0ci5ob3N0X25hbWUsIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQkrK2NvdW50OworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBzaXplIG9mIHBheWxvYWQKKwkgKi8KKwlwb3J0X2F0dHJpYi0+YXR0cl9jb3VudCA9IGJmYV9vc19odG9ubChjb3VudCk7CisJbGVuICs9ICgoc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikpICogY291bnQpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyAgICAgICAgICB1MTYKK2JmYV9mY3NfcG9ydF9mZG1pX2J1aWxkX3JwcnRfcHlsZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgIHU4ICpweWxkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBmZG1pX3JwcnRfcyAgICAqcnBydCA9IChzdHJ1Y3QgZmRtaV9ycHJ0X3MgKikgcHlsZDsKKwl1MTYgICAgICAgIGxlbjsKKworCXJwcnQtPmhiYV9pZCA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihiZmFfZmNzX2dldF9iYXNlX3BvcnQocG9ydC0+ZmNzKSk7CisJcnBydC0+cG9ydF9uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCisJbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcG9ydGF0dHJfYmxvY2soZmRtaSwKKwkJCSh1OCAqKSAmcnBydC0+cG9ydF9hdHRyX2Jsayk7CisKKwlsZW4gKz0gc2l6ZW9mKHJwcnQtPmhiYV9pZCkgKyBzaXplb2YocnBydC0+cG9ydF9uYW1lKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9ycHJ0X3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwljdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX250b2hzKGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCisJaWYgKGN0aGRyLT5jbWRfcnNwX2NvZGUgPT0gQ1RfUlNQX0FDQ0VQVCkgeworCQliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfRVJST1IpOworfQorCisvKioKKyogICBSUEEgOiBSZWdpc3RlciBQb3J0IEF0dHJpYnV0ZXMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwYSh2b2lkICpmZG1pX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gZmRtaV9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJdTE2ICAgICAgICBsZW4sIGF0dHJfbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXU4ICAgICAgICAqcHlsZDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJmZkbWktPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwYSwgZmRtaSk7CisJCXJldHVybjsKKwl9CisJZmRtaS0+ZmN4cCA9IGZjeHA7CisKKwlweWxkID0gYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKTsKKwliZmFfb3NfbWVtc2V0KHB5bGQsIDAsIEZDX01BWF9QRFVTWik7CisKKwlsZW4gPSBmY19mZG1pX3JlcWhkcl9idWlsZCgmZmNocywgcHlsZCwgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLAorCQkJCSAgIEZETUlfUlBBKTsKKworCWF0dHJfbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcnBhX3B5bGQoZmRtaSwKKwkJCSh1OCAqKSAoKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkICsgMSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuICsgYXR0cl9sZW4sICZmY2hzLAorCQkgICAgICBiZmFfZmNzX3BvcnRfZmRtaV9ycGFfcmVzcG9uc2UsICh2b2lkICopZmRtaSwKKwkJICAgICAgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JQQV9TRU5UKTsKK30KKworc3RhdGljICAgICAgICAgIHUxNgorYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcnBhX3B5bGQoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkJIHU4ICpweWxkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBmZG1pX3JwYV9zICAgICAqcnBhID0gKHN0cnVjdCBmZG1pX3JwYV9zICopIHB5bGQ7CisJdTE2ICAgICAgICBsZW47CisKKwlycGEtPnBvcnRfbmFtZSA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKworCWxlbiA9IGJmYV9mY3NfcG9ydF9mZG1pX2J1aWxkX3BvcnRhdHRyX2Jsb2NrKGZkbWksCisJCQkodTggKikgJnJwYS0+cG9ydF9hdHRyX2Jsayk7CisKKwlsZW4gKz0gc2l6ZW9mKHJwYS0+cG9ydF9uYW1lKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9ycGFfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCSAgICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkgICAgICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkgICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV90aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqKWFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9USU1FT1VUKTsKK30KKwordm9pZAorYmZhX2Zjc19mZG1pX2dldF9oYmFhdHRyKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJIHN0cnVjdCBiZmFfZmNzX2ZkbWlfaGJhX2F0dHJfcyAqaGJhX2F0dHIpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyAqZHJpdmVyX2luZm8gPSAmcG9ydC0+ZmNzLT5kcml2ZXJfaW5mbzsKKwlzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zIGFkYXB0ZXJfYXR0cjsKKworCWJmYV9vc19tZW1zZXQoaGJhX2F0dHIsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2Zjc19mZG1pX2hiYV9hdHRyX3MpKTsKKwliZmFfb3NfbWVtc2V0KCZhZGFwdGVyX2F0dHIsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zKSk7CisKKwliZmFfaW9jX2dldF9hZGFwdGVyX2F0dHIoJnBvcnQtPmZjcy0+YmZhLT5pb2MsICZhZGFwdGVyX2F0dHIpOworCisJc3RybmNweShoYmFfYXR0ci0+bWFudWZhY3R1cmVyLCBhZGFwdGVyX2F0dHIubWFudWZhY3R1cmVyLAorCQlzaXplb2YoYWRhcHRlcl9hdHRyLm1hbnVmYWN0dXJlcikpOworCisJc3RybmNweShoYmFfYXR0ci0+c2VyaWFsX251bSwgYWRhcHRlcl9hdHRyLnNlcmlhbF9udW0sCisJCXNpemVvZihhZGFwdGVyX2F0dHIuc2VyaWFsX251bSkpOworCisJc3RybmNweShoYmFfYXR0ci0+bW9kZWwsIGFkYXB0ZXJfYXR0ci5tb2RlbCwgc2l6ZW9mKGhiYV9hdHRyLT5tb2RlbCkpOworCisJc3RybmNweShoYmFfYXR0ci0+bW9kZWxfZGVzYywgYWRhcHRlcl9hdHRyLm1vZGVsX2Rlc2NyLAorCQlzaXplb2YoaGJhX2F0dHItPm1vZGVsX2Rlc2MpKTsKKworCXN0cm5jcHkoaGJhX2F0dHItPmh3X3ZlcnNpb24sIGFkYXB0ZXJfYXR0ci5od192ZXIsCisJCXNpemVvZihoYmFfYXR0ci0+aHdfdmVyc2lvbikpOworCisJc3RybmNweShoYmFfYXR0ci0+ZHJpdmVyX3ZlcnNpb24sIChjaGFyICopZHJpdmVyX2luZm8tPnZlcnNpb24sCisJCXNpemVvZihoYmFfYXR0ci0+ZHJpdmVyX3ZlcnNpb24pKTsKKworCXN0cm5jcHkoaGJhX2F0dHItPm9wdGlvbl9yb21fdmVyLCBhZGFwdGVyX2F0dHIub3B0cm9tX3ZlciwKKwkJc2l6ZW9mKGhiYV9hdHRyLT5vcHRpb25fcm9tX3ZlcikpOworCisJc3RybmNweShoYmFfYXR0ci0+ZndfdmVyc2lvbiwgYWRhcHRlcl9hdHRyLmZ3X3ZlciwKKwkJc2l6ZW9mKGhiYV9hdHRyLT5md192ZXJzaW9uKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5vc19uYW1lLCBkcml2ZXJfaW5mby0+aG9zdF9vc19uYW1lLAorCQlzaXplb2YoaGJhX2F0dHItPm9zX25hbWUpKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBwYXRjaCBsZXZlbCwgYXBwZW5kIGl0IHRvIHRoZSBvcyBuYW1lIGFsb25nIHdpdGggYQorCSAqIHNlcGFyYXRvcgorCSAqLworCWlmIChkcml2ZXJfaW5mby0+aG9zdF9vc19wYXRjaFswXSAhPSAnXDAnKSB7CisJCXN0cm5jYXQoaGJhX2F0dHItPm9zX25hbWUsIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCQlzaXplb2YoQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUikpOworCQlzdHJuY2F0KGhiYV9hdHRyLT5vc19uYW1lLCBkcml2ZXJfaW5mby0+aG9zdF9vc19wYXRjaCwKKwkJCXNpemVvZihkcml2ZXJfaW5mby0+aG9zdF9vc19wYXRjaCkpOworCX0KKworCWhiYV9hdHRyLT5tYXhfY3RfcHlsZCA9IGJmYV9vc19odG9ubChGQ19NQVhfUERVU1opOworCit9CisKK3ZvaWQKK2JmYV9mY3NfZmRtaV9nZXRfcG9ydGF0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgIHN0cnVjdCBiZmFfZmNzX2ZkbWlfcG9ydF9hdHRyX3MgKnBvcnRfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zICpkcml2ZXJfaW5mbyA9ICZwb3J0LT5mY3MtPmRyaXZlcl9pbmZvOworCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIHBwb3J0X2F0dHI7CisKKwliZmFfb3NfbWVtc2V0KHBvcnRfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmNzX2ZkbWlfcG9ydF9hdHRyX3MpKTsKKworCS8qCisJICogZ2V0IHBwb3J0IGF0dHJpYnV0ZXMgZnJvbSBoYWwKKwkgKi8KKwliZmFfcHBvcnRfZ2V0X2F0dHIocG9ydC0+ZmNzLT5iZmEsICZwcG9ydF9hdHRyKTsKKworCS8qCisJICogZ2V0IEZDNCB0eXBlIEJpdG1hc2sKKwkgKi8KKwlmY19nZXRfZmM0dHlwZV9iaXRtYXNrKEZDX1RZUEVfRkNQLCBwb3J0X2F0dHItPnN1cHBfZmM0X3R5cGVzKTsKKworCS8qCisJICogU3VwcG9ydGVkIFNwZWVkcworCSAqLworCXBvcnRfYXR0ci0+c3VwcF9zcGVlZCA9IGJmYV9vc19odG9ubChCRkFfRkNTX0ZETUlfU1VQT1JURURfU1BFRURTKTsKKworCS8qCisJICogQ3VycmVudCBTcGVlZAorCSAqLworCXBvcnRfYXR0ci0+Y3Vycl9zcGVlZCA9IGJmYV9vc19odG9ubChwcG9ydF9hdHRyLnNwZWVkKTsKKworCS8qCisJICogTWF4IFBEVSBTaXplLgorCSAqLworCXBvcnRfYXR0ci0+bWF4X2ZybV9zaXplID0gYmZhX29zX2h0b25sKEZDX01BWF9QRFVTWik7CisKKwkvKgorCSAqIE9TIGRldmljZSBOYW1lCisJICovCisJc3RybmNweShwb3J0X2F0dHItPm9zX2RldmljZV9uYW1lLCAoY2hhciAqKWRyaXZlcl9pbmZvLT5vc19kZXZpY2VfbmFtZSwKKwkJc2l6ZW9mKHBvcnRfYXR0ci0+b3NfZGV2aWNlX25hbWUpKTsKKworCS8qCisJICogSG9zdCBuYW1lCisJICovCisJc3RybmNweShwb3J0X2F0dHItPmhvc3RfbmFtZSwgKGNoYXIgKilkcml2ZXJfaW5mby0+aG9zdF9tYWNoaW5lX25hbWUsCisJCXNpemVvZihwb3J0X2F0dHItPmhvc3RfbmFtZSkpOworCit9CisKKwordm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gJm1zLT5mZG1pOworCisJZmRtaS0+bXMgPSBtczsKKwliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAmbXMtPmZkbWk7CisKKwlmZG1pLT5tcyA9IG1zOworCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9ICZtcy0+ZmRtaTsKKworCWZkbWktPm1zID0gbXM7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1BPUlRfT05MSU5FKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4Y2FjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbi5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfQUVOX0hfXworI2RlZmluZSBfX0JGQV9BRU5fSF9fCisKKyNpbmNsdWRlICJkZWZzL2JmYV9kZWZzX2Flbi5oIgorCisjZGVmaW5lIEJGQV9BRU5fTUFYX0VOVFJZICAgNTEyCisKK2V4dGVybiBzMzIgYmZhX2Flbl9tYXhfY2ZnX2VudHJ5Oworc3RydWN0IGJmYV9hZW5fcyB7CisJdm9pZAkJKmJmYWQ7CisJczMyCQltYXhfZW50cnk7CisJczMyCQl3cml0ZV9pbmRleDsKKwlzMzIJCXJlYWRfaW5kZXg7CisJdTMyCWJmYWRfbnVtOworCXUzMglzZXFfbnVtOworCXZvaWQJCSgqYWVuX2NiX25vdGlmeSkodm9pZCAqYmZhZCk7CisJdm9pZAkJKCpnZXR0aW1lb2ZkYXkpKHN0cnVjdCBiZmFfdGltZXZhbF9zICp0dik7CisJc3RydWN0IGJmYV90cmNfbW9kX3MgCSp0cmNtb2Q7CisJc3RydWN0IGJmYV9hZW5fZW50cnlfcwlsaXN0W0JGQV9BRU5fTUFYX0VOVFJZXTsgLyogTXVzdCBiZSB0aGUgbGFzdCAqLworfTsKKworCisvKioKKyAqIFB1YmxpYyBBUElzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX2Flbl9zZXRfbWF4X2NmZ19lbnRyeShpbnQgbWF4X2VudHJ5KQoreworCWJmYV9hZW5fbWF4X2NmZ19lbnRyeSA9IG1heF9lbnRyeTsKK30KKworc3RhdGljIGlubGluZSBzMzIKK2JmYV9hZW5fZ2V0X21heF9jZmdfZW50cnkodm9pZCkKK3sKKwlyZXR1cm4gYmZhX2Flbl9tYXhfY2ZnX2VudHJ5OworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9nZXRfbWVtaW5mbyh2b2lkKQoreworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBiZmFfYWVuX2VudHJ5X3MpICogYmZhX2Flbl9nZXRfbWF4X2NmZ19lbnRyeSgpKTsKK30KKworc3RhdGljIGlubGluZSBzMzIKK2JmYV9hZW5fZ2V0X3dpKHN0cnVjdCBiZmFfYWVuX3MgKmFlbikKK3sKKwlyZXR1cm4gYWVuLT53cml0ZV9pbmRleDsKK30KKworc3RhdGljIGlubGluZSBzMzIKK2JmYV9hZW5fZ2V0X3JpKHN0cnVjdCBiZmFfYWVuX3MgKmFlbikKK3sKKwlyZXR1cm4gYWVuLT5yZWFkX2luZGV4OworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9mZXRjaF9jb3VudChzdHJ1Y3QgYmZhX2Flbl9zICphZW4sIHMzMiByZWFkX2luZGV4KQoreworCXJldHVybiAoKGFlbi0+d3JpdGVfaW5kZXggKyBhZW4tPm1heF9lbnRyeSkgLSByZWFkX2luZGV4KQorCQklIGFlbi0+bWF4X2VudHJ5OworfQorCitzMzIgYmZhX2Flbl9pbml0KHN0cnVjdCBiZmFfYWVuX3MgKmFlbiwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwKKwkJdm9pZCAqYmZhZCwgdTMyIGluc3RfaWQsIHZvaWQgKCphZW5fY2Jfbm90aWZ5KSh2b2lkICopLAorCQl2b2lkICgqZ2V0dGltZW9mZGF5KShzdHJ1Y3QgYmZhX3RpbWV2YWxfcyAqKSk7CisKK3MzMiBiZmFfYWVuX3Bvc3Qoc3RydWN0IGJmYV9hZW5fcyAqYWVuLCBlbnVtIGJmYV9hZW5fY2F0ZWdvcnkgYWVuX2NhdGVnb3J5LAorCQkgICAgIGludCBhZW5fdHlwZSwgdW5pb24gYmZhX2Flbl9kYXRhX3UgKmFlbl9kYXRhKTsKKworczMyIGJmYV9hZW5fZmV0Y2goc3RydWN0IGJmYV9hZW5fcyAqYWVuLCBzdHJ1Y3QgYmZhX2Flbl9lbnRyeV9zICphZW5fZW50cnksCisJCSAgICAgIHMzMiBlbnRyeV9zcGFjZSwgczMyIHJpaSwgczMyICpyaV9hcnIsCisJCSAgICAgIHMzMiByaV9hcnJfY250KTsKKworczMyIGJmYV9hZW5fZ2V0X2luc3Qoc3RydWN0IGJmYV9hZW5fcyAqYWVuKTsKKworI2VuZGlmIC8qIF9fQkZBX0FFTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hZGFwdGVyLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fYWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MGQzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fYWRhcHRlci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9BREFQVEVSIE1vZHVsZSAqLworI2lmbmRlZglfX2JmYV9hZW5fYWRhcHRlcl9oX18KKyNkZWZpbmUJX19iZmFfYWVuX2FkYXB0ZXJfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fQURBUFRFUl9BREQgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0FEQVBURVIsIEJGQV9BREFQVEVSX0FFTl9BREQpCisjZGVmaW5lIEJGQV9BRU5fQURBUFRFUl9SRU1PVkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0FEQVBURVIsIEJGQV9BREFQVEVSX0FFTl9SRU1PVkUpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fYXVkaXQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hdWRpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2Q3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fYXVkaXQuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfQVVESVQgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9hdWRpdF9oX18KKyNkZWZpbmUJX19iZmFfYWVuX2F1ZGl0X2hfXworCisjaW5jbHVkZSAgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlICA8ZGVmcy9iZmFfZGVmc19hZW4uaD4KKworI2RlZmluZSBCRkFfQUVOX0FVRElUX0FVVEhfRU5BQkxFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9BVURJVCwgQkZBX0FVRElUX0FFTl9BVVRIX0VOQUJMRSkKKyNkZWZpbmUgQkZBX0FFTl9BVURJVF9BVVRIX0RJU0FCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0FVRElULCBCRkFfQVVESVRfQUVOX0FVVEhfRElTQUJMRSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9ldGhwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fZXRocG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwN2QwYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fZXRocG9ydC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9FVEhQT1JUIE1vZHVsZSAqLworI2lmbmRlZglfX2JmYV9hZW5fZXRocG9ydF9oX18KKyNkZWZpbmUJX19iZmFfYWVuX2V0aHBvcnRfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fRVRIUE9SVF9MSU5LVVAgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0VUSFBPUlQsIEJGQV9FVEhQT1JUX0FFTl9MSU5LVVApCisjZGVmaW5lIEJGQV9BRU5fRVRIUE9SVF9MSU5LRE9XTiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfRVRIUE9SVCwgQkZBX0VUSFBPUlRfQUVOX0xJTktET1dOKQorI2RlZmluZSBCRkFfQUVOX0VUSFBPUlRfRU5BQkxFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9FVEhQT1JULCBCRkFfRVRIUE9SVF9BRU5fRU5BQkxFKQorI2RlZmluZSBCRkFfQUVOX0VUSFBPUlRfRElTQUJMRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfRVRIUE9SVCwgQkZBX0VUSFBPUlRfQUVOX0RJU0FCTEUpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5faW9jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5faW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzNzhiNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9pb2MuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfSU9DIE1vZHVsZSAqLworI2lmbmRlZglfX2JmYV9hZW5faW9jX2hfXworI2RlZmluZQlfX2JmYV9hZW5faW9jX2hfXworCisjaW5jbHVkZSAgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlICA8ZGVmcy9iZmFfZGVmc19hZW4uaD4KKworI2RlZmluZSBCRkFfQUVOX0lPQ19IQkdPT0QgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fSEJHT09EKQorI2RlZmluZSBCRkFfQUVOX0lPQ19IQkZBSUwgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fSEJGQUlMKQorI2RlZmluZSBCRkFfQUVOX0lPQ19FTkFCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fRU5BQkxFKQorI2RlZmluZSBCRkFfQUVOX0lPQ19ESVNBQkxFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9JT0MsIEJGQV9JT0NfQUVOX0RJU0FCTEUpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0ZXTUlTTUFUQ0ggXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fRldNSVNNQVRDSCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9pdG5pbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2l0bmltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkOGRkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9pdG5pbS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9JVE5JTSBNb2R1bGUgKi8KKyNpZm5kZWYJX19iZmFfYWVuX2l0bmltX2hfXworI2RlZmluZQlfX2JmYV9hZW5faXRuaW1faF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fSVROSU1fT05MSU5FIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9JVE5JTSwgQkZBX0lUTklNX0FFTl9PTkxJTkUpCisjZGVmaW5lIEJGQV9BRU5fSVROSU1fT0ZGTElORSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSVROSU0sIEJGQV9JVE5JTV9BRU5fT0ZGTElORSkKKyNkZWZpbmUgQkZBX0FFTl9JVE5JTV9ESVNDT05ORUNUIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9JVE5JTSwgQkZBX0lUTklNX0FFTl9ESVNDT05ORUNUKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2xwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fbHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YThlYmI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2xwb3J0LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0xQT1JUIE1vZHVsZSAqLworI2lmbmRlZglfX2JmYV9hZW5fbHBvcnRfaF9fCisjZGVmaW5lCV9fYmZhX2Flbl9scG9ydF9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9ORVcgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX05FVykKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9ERUxFVEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX0RFTEVURSkKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9PTkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX09OTElORSkKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9PRkZMSU5FIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9MUE9SVCwgQkZBX0xQT1JUX0FFTl9PRkZMSU5FKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX0RJU0NPTk5FQ1QgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1QpCisjZGVmaW5lIEJGQV9BRU5fTFBPUlRfTkVXX1BST1AgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX05FV19QUk9QKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX0RFTEVURV9QUk9QIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9MUE9SVCwgQkZBX0xQT1JUX0FFTl9ERUxFVEVfUFJPUCkKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9ORVdfU1RBTkRBUkQgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX05FV19TVEFOREFSRCkKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9ERUxFVEVfU1RBTkRBUkQgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX0RFTEVURV9TVEFOREFSRCkKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9OUElWX0RVUF9XV04gXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX05QSVZfRFVQX1dXTikKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9OUElWX0ZBQlJJQ19NQVggXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX05QSVZfRkFCUklDX01BWCkKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9OUElWX1VOS05PV04gXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX05QSVZfVU5LTk9XTikKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9wb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZGQ5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fcG9ydC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9QT1JUIE1vZHVsZSAqLworI2lmbmRlZglfX2JmYV9hZW5fcG9ydF9oX18KKyNkZWZpbmUJX19iZmFfYWVuX3BvcnRfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9PTkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9PTkxJTkUpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9PRkZMSU5FIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fT0ZGTElORSkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX1JMSVIgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9STElSKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfU0ZQX0lOU0VSVCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1NGUF9JTlNFUlQpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9TRlBfUkVNT1ZFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fU0ZQX1JFTU9WRSkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX1NGUF9QT00gXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9TRlBfUE9NKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfRU5BQkxFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fRU5BQkxFKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfRElTQUJMRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX0RJU0FCTEUpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9BVVRIX09OIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fQVVUSF9PTikKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX0FVVEhfT0ZGIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fQVVUSF9PRkYpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9ESVNDT05ORUNUIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fRElTQ09OTkVDVCkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX1FPU19ORUcgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9RT1NfTkVHKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfRkFCUklDX05BTUVfQ0hBTkdFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fRkFCUklDX05BTUVfQ0hBTkdFKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfU0ZQX0FDQ0VTU19FUlJPUiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1NGUF9BQ0NFU1NfRVJST1IpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9TRlBfVU5TVVBQT1JUIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fU0ZQX1VOU1VQUE9SVCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX3Jwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U0YmUxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9ycG9ydC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9SUE9SVCBNb2R1bGUgKi8KKyNpZm5kZWYJX19iZmFfYWVuX3Jwb3J0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fcnBvcnRfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fUlBPUlRfT05MSU5FIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9SUE9SVCwgQkZBX1JQT1JUX0FFTl9PTkxJTkUpCisjZGVmaW5lIEJGQV9BRU5fUlBPUlRfT0ZGTElORSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUlBPUlQsIEJGQV9SUE9SVF9BRU5fT0ZGTElORSkKKyNkZWZpbmUgQkZBX0FFTl9SUE9SVF9ESVNDT05ORUNUIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9SUE9SVCwgQkZBX1JQT1JUX0FFTl9ESVNDT05ORUNUKQorI2RlZmluZSBCRkFfQUVOX1JQT1JUX1FPU19QUklPIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9SUE9SVCwgQkZBX1JQT1JUX0FFTl9RT1NfUFJJTykKKyNkZWZpbmUgQkZBX0FFTl9SUE9SVF9RT1NfRkxPV0lEIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9SUE9SVCwgQkZBX1JQT1JUX0FFTl9RT1NfRkxPV0lEKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YzE0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfSF9fCisjZGVmaW5lIF9fQkZBX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcGxvZy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2MuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvY2ZjLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW4uaD4KKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisKK3N0cnVjdCBiZmFfczsKKyNpbmNsdWRlIDxiZmFfaW50cl9wcml2Lmg+CisKK3N0cnVjdCBiZmFfcGNpZGV2X3M7CisKKy8qKgorICogUENJIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IEJGQQorICovCitzdHJ1Y3QgYmZhX3BjaWlkX3MgeworCXUxNiAgICAgICAgZGV2aWNlX2lkOworCXUxNiAgICAgICAgdmVuZG9yX2lkOworfTsKKworZXh0ZXJuIGNoYXIgICAgIGJmYV92ZXJzaW9uW107CisKKy8qKgorICogQkZBIFBvd2VyIE1nbXQgQ29tbWFuZHMKKyAqLworZW51bSBiZmFfcG1fY21kIHsKKwlCRkFfUE1fQ1RMX0QwID0gMCwKKwlCRkFfUE1fQ1RMX0QxID0gMSwKKwlCRkFfUE1fQ1RMX0QyID0gMiwKKwlCRkFfUE1fQ1RMX0QzID0gMywKK307CisKKy8qKgorICogQkZBIG1lbW9yeSByZXNvdXJjZXMKKyAqLworZW51bSBiZmFfbWVtX3R5cGUgeworCUJGQV9NRU1fVFlQRV9LVkEgPSAxLAkvKiEgS2VybmVsIFZpcnR1YWwgTWVtb3J5ICoobm9uLWRtYS1hYmxlKSAqLworCUJGQV9NRU1fVFlQRV9ETUEgPSAyLAkvKiEgRE1BLWFibGUgbWVtb3J5ICovCisJQkZBX01FTV9UWVBFX01BWCA9IEJGQV9NRU1fVFlQRV9ETUEsCit9OworCitzdHJ1Y3QgYmZhX21lbV9lbGVtX3MgeworCWVudW0gYmZhX21lbV90eXBlIG1lbV90eXBlOwkvKiAgc2VlIGVudW0gYmZhX21lbV90eXBlIAkqLworCXUzMiAgICAgICAgbWVtX2xlbjsJLyogIFRvdGFsIExlbmd0aCBpbiBCeXRlcwkqLworCXU4ICAgICAgIAkqa3ZhOwkJLyogIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MJKi8KKwl1NjQgICAgICAgIGRtYTsJCS8qICBkbWEgYWRkcmVzcyBpZiBETUEgbWVtb3J5CSovCisJdTggICAgICAgCSprdmFfY3VycDsJLyogIGt2YSBhbGxvY2F0aW9uIGN1cnNvcgkqLworCXU2NCAgICAgICAgZG1hX2N1cnA7CS8qICBkbWEgYWxsb2NhdGlvbiBjdXJzb3IJKi8KK307CisKK3N0cnVjdCBiZmFfbWVtaW5mb19zIHsKKwlzdHJ1Y3QgYmZhX21lbV9lbGVtX3MgbWVtaW5mb1tCRkFfTUVNX1RZUEVfTUFYXTsKK307CisjZGVmaW5lIGJmYV9tZW1pbmZvX2t2YShfbSkJXAorCShfbSktPm1lbWluZm9bQkZBX01FTV9UWVBFX0tWQSAtIDFdLmt2YV9jdXJwCisjZGVmaW5lIGJmYV9tZW1pbmZvX2RtYV92aXJ0KF9tKQlcCisJKF9tKS0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfRE1BIC0gMV0ua3ZhX2N1cnAKKyNkZWZpbmUgYmZhX21lbWluZm9fZG1hX3BoeXMoX20pCVwKKwkoX20pLT5tZW1pbmZvW0JGQV9NRU1fVFlQRV9ETUEgLSAxXS5kbWFfY3VycAorCisvKioKKyAqIEdlbmVyaWMgU2NhdHRlciBHYXRoZXIgRWxlbWVudCB1c2VkIGJ5IGRyaXZlcgorICovCitzdHJ1Y3QgYmZhX3NnZV9zIHsKKwl1MzIgICAgICAgIHNnX2xlbjsKKwl2b2lkICAgICAgICAgICAqc2dfYWRkcjsKK307CisKKyNkZWZpbmUgYmZhX3NnZV90b19iZShfX3NnZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoKHUzMiAqKShfX3NnZSkpWzBdID0gYmZhX29zX2h0b25sKCgodTMyICopKF9fc2dlKSlbMF0pOyAgICAgIFwKKwkoKHUzMiAqKShfX3NnZSkpWzFdID0gYmZhX29zX2h0b25sKCgodTMyICopKF9fc2dlKSlbMV0pOyAgICAgIFwKKwkoKHUzMiAqKShfX3NnZSkpWzJdID0gYmZhX29zX2h0b25sKCgodTMyICopKF9fc2dlKSlbMl0pOyAgICAgIFwKK30gd2hpbGUgKDApCisKKworLyoKKyAqIGJmYSBzdGF0cyBpbnRlcmZhY2VzCisgKi8KKyNkZWZpbmUgYmZhX3N0YXRzKF9tb2QsIF9zdGF0cykJKF9tb2QpLT5zdGF0cy5fc3RhdHMgKysKKworI2RlZmluZSBiZmFfaW9jX2dldF9zdGF0cyhfX2JmYSwgX19pb2Nfc3RhdHMpCVwKKwliZmFfaW9jX2ZldGNoX3N0YXRzKCYoX19iZmEpLT5pb2MsIF9faW9jX3N0YXRzKQorI2RlZmluZSBiZmFfaW9jX2NsZWFyX3N0YXRzKF9fYmZhKQlcCisJYmZhX2lvY19jbHJfc3RhdHMoJihfX2JmYSktPmlvYykKKworLyoKKyAqIGJmYSBBUEkgZnVuY3Rpb25zCisgKi8KK3ZvaWQgYmZhX2dldF9wY2lpZHMoc3RydWN0IGJmYV9wY2lpZF9zICoqcGNpaWRzLCBpbnQgKm5wY2lpZHMpOwordm9pZCBiZmFfY2ZnX2dldF9kZWZhdWx0KHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZyk7Cit2b2lkIGJmYV9jZmdfZ2V0X21pbihzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcpOwordm9pZCBiZmFfY2ZnX2dldF9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJCXN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvKTsKK3ZvaWQgYmZhX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkJc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sCisJCQlzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpOwordm9pZCBiZmFfaW5pdF90cmMoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QpOwordm9pZCBiZmFfaW5pdF9sb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpOwordm9pZCBiZmFfaW5pdF9hZW4oc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfYWVuX3MgKmFlbik7Cit2b2lkIGJmYV9pbml0X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKK3ZvaWQgYmZhX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pbml0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfYXR0YWNoX2ZjcyhzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9jYl9pbml0KHZvaWQgKmJmYWQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordm9pZCBiZmFfY2Jfc3RvcCh2b2lkICpiZmFkLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKK3ZvaWQgYmZhX2NiX3VwZGF0ZXEodm9pZCAqYmZhZCwgYmZhX3N0YXR1c190IHN0YXR1cyk7CisKK2JmYV9ib29sZWFuX3QgYmZhX2ludHgoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaXNyX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pc3JfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9tc2l4X2dldHZlY3Moc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqbXNpeF92ZWNzX2JtYXAsCisJCQl1MzIgKm51bV92ZWNzLCB1MzIgKm1heF92ZWNfYml0KTsKKyNkZWZpbmUgYmZhX21zaXgoX19iZmEsIF9fdmVjKSAoX19iZmEpLT5tc2l4LmhhbmRsZXJbX192ZWNdKF9fYmZhLCBfX3ZlYykKKwordm9pZCBiZmFfY29tcF9kZXEoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKmNvbXBfcSk7Cit2b2lkIGJmYV9jb21wX3Byb2Nlc3Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKmNvbXBfcSk7Cit2b2lkIGJmYV9jb21wX2ZyZWUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKmNvbXBfcSk7CisKK3R5cGVkZWYgdm9pZCAoKmJmYV9jYl9pb2NfdCkgKHZvaWQgKmNiYXJnLCBlbnVtIGJmYV9zdGF0dXMgc3RhdHVzKTsKK3ZvaWQgYmZhX2lvY2ZjX2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2lvY2ZjX2F0dHJfcyAqYXR0cik7CitiZmFfc3RhdHVzX3QgYmZhX2lvY2ZjX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXN0cnVjdCBiZmFfaW9jZmNfc3RhdHNfcyAqc3RhdHMsCisJCQliZmFfY2JfaW9jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190IGJmYV9pb2NmY19jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCWJmYV9jYl9pb2NfdCBjYmZuLCB2b2lkICpjYmFyZyk7Cit2b2lkIGJmYV9nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NfYXR0cl9zICppb2NfYXR0cik7CisKK3ZvaWQgYmZhX2FkYXB0ZXJfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsCisJCQlzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zICphZF9hdHRyKTsKK3U2NCBiZmFfYWRhcHRlcl9nZXRfaWQoc3RydWN0IGJmYV9zICpiZmEpOworCitiZmFfc3RhdHVzX3QgYmZhX2lvY2ZjX2lzcmF0dHJfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcyAqYXR0cik7CisKK3ZvaWQgYmZhX2lvY2ZjX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY19hdXRvX3JlY292ZXIoYmZhX2Jvb2xlYW5fdCBhdXRvX3JlY292ZXIpOwordm9pZCBiZmFfY2JfaW9jX2Rpc2FibGUodm9pZCAqYmZhZCk7Cit2b2lkIGJmYV90aW1lcl90aWNrKHN0cnVjdCBiZmFfcyAqYmZhKTsKKyNkZWZpbmUgYmZhX3RpbWVyX3N0YXJ0KF9iZmEsIF90aW1lciwgX3RpbWVyY2IsIF9hcmcsIF90aW1lb3V0KQlcCisJYmZhX3RpbWVyX2JlZ2luKCYoX2JmYSktPnRpbWVyX21vZCwgX3RpbWVyLCBfdGltZXJjYiwgX2FyZywgX3RpbWVvdXQpCisKKy8qCisgKiBCRkEgZGVidWcgQVBJIGZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgYmZhX2RlYnVnX2Z3dHJjKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbik7CitiZmFfc3RhdHVzX3QgYmZhX2RlYnVnX2Z3c2F2ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqdHJjZGF0YSwgaW50ICp0cmNsZW4pOworCisjaW5jbHVkZSAiYmZhX3ByaXYuaCIKKworI2VuZGlmIC8qIF9fQkZBX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9mY3BpbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9mY3BpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Nzg5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX2ZjcGltLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1BJTV9IX18KKyNkZWZpbmUgX19CRkFfRkNQSU1fSF9fCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9mY3BpbS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfZmNwaW0uaD4KKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0cnVjdCBiZmFfaXRuaW1fczsKK3N0cnVjdCBiZmFfaW9pbV9zOworc3RydWN0IGJmYV90c2tpbV9zOworc3RydWN0IGJmYWRfaW9pbV9zOworc3RydWN0IGJmYWRfdHNraW1fczsKKworLyoKKyAqIGJmYSBmY3BpbSBtb2R1bGUgQVBJIGZ1bmN0aW9ucworICovCit2b2lkCQliZmFfZmNwaW1fcGF0aF90b3Zfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgcGF0aF90b3YpOwordTE2CWJmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZAkJYmZhX2ZjcGltX3FkZXB0aF9zZXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBxX2RlcHRoKTsKK3UxNgliZmFfZmNwaW1fcWRlcHRoX2dldChzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfc3RhdHVzX3QgYmZhX2ZjcGltX2dldF9tb2RzdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXN0cnVjdCBiZmFfZmNwaW1fc3RhdHNfcyAqbW9kc3RhdHMpOworYmZhX3N0YXR1c190IGJmYV9mY3BpbV9jbHJfbW9kc3RhdHMoc3RydWN0IGJmYV9zICpiZmEpOworCisvKgorICogYmZhIGl0bmltIEFQSSBmdW5jdGlvbnMKKyAqLworc3RydWN0IGJmYV9pdG5pbV9zICpiZmFfaXRuaW1fY3JlYXRlKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LCB2b2lkICppdG5pbSk7Cit2b2lkCQliZmFfaXRuaW1fZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOwordm9pZAkJYmZhX2l0bmltX29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCSBiZmFfYm9vbGVhbl90IHNlcV9yZWMpOwordm9pZAkJYmZhX2l0bmltX29mZmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7Cit2b2lkCQliZmFfaXRuaW1fZ2V0X3N0YXRzKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQlzdHJ1Y3QgYmZhX2l0bmltX2hhbF9zdGF0c19zICpzdGF0cyk7Cit2b2lkCQliZmFfaXRuaW1fY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CisKKworLyoqCisgKiAJCUJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb25saW5lKCkuCisgKgorICogQHBhcmFtW2luXQkJaXRuaW0JCUZDUyBvciBkcml2ZXIgaXRuaW0gaW5zdGFuY2UKKyAqCisgKiByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2NiX2l0bmltX29ubGluZSh2b2lkICppdG5pbSk7CisKKy8qKgorICogCQlCRkEgY29tcGxldGlvbiBjYWxsYmFjayBmb3IgYmZhX2l0bmltX29mZmxpbmUoKS4KKyAqCisgKiBAcGFyYW1baW5dCQlpdG5pbQkJRkNTIG9yIGRyaXZlciBpdG5pbSBpbnN0YW5jZQorICoKKyAqIHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaXRuaW1fb2ZmbGluZSh2b2lkICppdG5pbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2NiX2l0bmltX3Rvdl9iZWdpbih2b2lkICppdG5pbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2NiX2l0bmltX3Rvdih2b2lkICppdG5pbSk7CisKKy8qKgorICogCQlCRkEgbm90aWZpY2F0aW9uIHRvIEZDUy9kcml2ZXIgZm9yIHNlY29uZCBsZXZlbCBlcnJvciByZWNvdmVyeS4KKyAqCisgKiBBdGxlYXN0IG9uZSBJL08gcmVxdWVzdCBoYXMgdGltZWRvdXQgYW5kIHRhcmdldCBpcyB1bnJlc3BvbnNpdmUgdG8KKyAqIHJlcGVhdGVkIGFib3J0IHJlcXVlc3RzLiBTZWNvbmQgbGV2ZWwgZXJyb3IgcmVjb3Zlcnkgc2hvdWxkIGJlIGluaXRpYXRlZAorICogYnkgc3RhcnRpbmcgaW1wbGljaXQgbG9nb3V0IGFuZCByZWNvdmVyeSBwcm9jZWR1cmVzLgorICoKKyAqIEBwYXJhbVtpbl0JCWl0bmltCQlGQ1Mgb3IgZHJpdmVyIGl0bmltIGluc3RhbmNlCisgKgorICogcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9jYl9pdG5pbV9zbGVyKHZvaWQgKml0bmltKTsKKworLyoKKyAqIGJmYSBpb2ltIEFQSSBmdW5jdGlvbnMKKyAqLworc3RydWN0IGJmYV9pb2ltX3MJKmJmYV9pb2ltX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJCQlzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywKKwkJCQkJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJdTE2IG5zZ2xlcyk7CisKK3ZvaWQJCWJmYV9pb2ltX2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOwordm9pZAkJYmZhX2lvaW1fc3RhcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOwordm9pZAkJYmZhX2lvaW1fYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOwordm9pZCAJCWJmYV9pb2ltX2RlbGF5ZWRfY29tcChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICBiZmFfYm9vbGVhbl90IGlvdG92KTsKKworCisvKioKKyAqIAkJSS9PIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0JCWRpbwkJCWRyaXZlciBJTyBzdHJ1Y3R1cmUKKyAqIEBwYXJhbVtpbl0JCWlvX3N0YXR1cwkJSU8gY29tcGxldGlvbiBzdGF0dXMKKyAqIEBwYXJhbVtpbl0JCXNjc2lfc3RhdHVzCQlTQ1NJIHN0YXR1cyByZXR1cm5lZCBieSB0YXJnZXQKKyAqIEBwYXJhbVtpbl0JCXNuc19sZW4JCQlTQ1NJIHNlbnNlIGxlbmd0aCwgMCBpZiBub25lCisgKiBAcGFyYW1baW5dCQlzbnNfaW5mbwkJU0NTSSBzZW5zZSBkYXRhLCBpZiBhbnkKKyAqIEBwYXJhbVtpbl0JCXJlc2lkdWUJCQlSZXNpZHVhbCBsZW5ndGgKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9jYl9pb2ltX2RvbmUodm9pZCAqYmZhZCwgc3RydWN0IGJmYWRfaW9pbV9zICpkaW8sCisJCQkJICBlbnVtIGJmaV9pb2ltX3N0YXR1cyBpb19zdGF0dXMsCisJCQkJICB1OCBzY3NpX3N0YXR1cywgaW50IHNuc19sZW4sCisJCQkJICB1OCAqc25zX2luZm8sIHMzMiByZXNpZHVlKTsKKworLyoqCisgKiAJCUkvTyBnb29kIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0JCWRpbwkJCWRyaXZlciBJTyBzdHJ1Y3R1cmUKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9jYl9pb2ltX2dvb2RfY29tcCh2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbyk7CisKKy8qKgorICogCQlJL08gYWJvcnQgY29tcGxldGlvbiBub3RpZmljYXRpb24KKyAqCisgKiBAcGFyYW1baW5dCQlkaW8JCQlkcml2ZXIgSU8gdGhhdCB3YXMgYWJvcnRlZAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2NiX2lvaW1fYWJvcnQodm9pZCAqYmZhZCwgc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pOwordm9pZAkJYmZhX2NiX2lvaW1fcmVzZnJlZSh2b2lkICpoY2JfYmZhZCk7CisKK3ZvaWQgCQkJYmZhX2NiX2lvaW1fcmVzZnJlZSh2b2lkICpoY2JfYmZhZCk7CisKKy8qCisgKiBiZmEgdHNraW0gQVBJIGZ1bmN0aW9ucworICovCitzdHJ1Y3QgYmZhX3Rza2ltX3MJKmJmYV90c2tpbV9hbGxvYyhzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCQkJc3RydWN0IGJmYWRfdHNraW1fcyAqZHRzayk7Cit2b2lkCQliZmFfdHNraW1fZnJlZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3ZvaWQJCWJmYV90c2tpbV9zdGFydChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGx1bl90IGx1biwKKwkJCQllbnVtIGZjcF90bV9jbW5kIHRtLCB1OCB0X3NlY3MpOwordm9pZAkJYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqYmZhZCwgc3RydWN0IGJmYWRfdHNraW1fcyAqZHRzaywKKwkJCQkgIGVudW0gYmZpX3Rza2ltX3N0YXR1cyB0c2tfc3RhdHVzKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDUElNX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX2ZjcHRtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX2ZjcHRtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1ZmZlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfZmNwdG0uaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNQVE1fSF9fCisjZGVmaW5lIF9fQkZBX0ZDUFRNX0hfXworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfZmNwdG0uaD4KKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0cnVjdCBiZmFfdGluX3M7CitzdHJ1Y3QgYmZhX2lvdG1fczsKK3N0cnVjdCBiZmFfdHNrdG1fczsKKworLyoKKyAqIGJmYSBmY3B0bSBtb2R1bGUgQVBJIGZ1bmN0aW9ucworICovCit2b2lkIGJmYV9mY3B0bV9wYXRoX3Rvdl9zZXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBwYXRoX3Rvdik7Cit1MTYgYmZhX2ZjcHRtX3BhdGhfdG92X2dldChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9mY3B0bV9xZGVwdGhfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgcV9kZXB0aCk7Cit1MTYgYmZhX2ZjcHRtX3FkZXB0aF9nZXQoc3RydWN0IGJmYV9zICpiZmEpOworCisvKgorICogYmZhIHRpbiBBUEkgZnVuY3Rpb25zCisgKi8KK3ZvaWQgYmZhX3Rpbl9nZXRfc3RhdHMoc3RydWN0IGJmYV90aW5fcyAqdGluLCBzdHJ1Y3QgYmZhX3Rpbl9zdGF0c19zICpzdGF0cyk7Cit2b2lkIGJmYV90aW5fY2xlYXJfc3RhdHMoc3RydWN0IGJmYV90aW5fcyAqdGluKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDUFRNX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3N2Yy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9zdmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzgwYjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9zdmMuaApAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9TVkNfSF9fCisjZGVmaW5lIF9fQkZBX1NWQ19IX18KKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0cnVjdCBiZmFfZmN4cF9zOworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ycG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcW9zLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3NtLmg+CisjaW5jbHVkZSA8YmZhLmg+CisKKy8qKgorICogCQlCRkEgcnBvcnQgaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBiZmFfcnBvcnRfaW5mb19zIHsKKwl1MTYgICAgICAgIG1heF9mcm1zejsJLyogIG1heCByY3YgcGR1IHNpemUgICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgcGlkIDogMjQsCS8qICByZW1vdGUgcG9ydCBJRCAgICAgICAgICAgICAgICAgKi8KKwkJCWxwX3RhZyA6IDg7CisJdTMyICAgICAgICBsb2NhbF9waWQgOiAyNCwJLyogIGxvY2FsIHBvcnQgSUQJCSAgICAqLworCQkJY2lzYyA6IDg7CS8qICBDSVJPIHN1cHBvcnRlZAkJICAgICovCisJdTggICAgICAgICBmY19jbGFzczsJLyogIHN1cHBvcnRlZCBGQyBjbGFzc2VzLiBlbnVtIGZjX2NvcyAqLworCXU4ICAgICAgICAgdmZfZW47CQkvKiAgdmlydHVhbCBmYWJyaWMgZW5hYmxlICAgICAgICAgICovCisJdTE2ICAgICAgICB2Zl9pZDsJCS8qICB2aXJ0dWFsIGZhYnJpYyBJRCAgICAgICAgICAgICAgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZDsJLyogIFJwb3J0J3MgY3VycmVudCBzcGVlZAkgICAgKi8KK307CisKKy8qKgorICogQkZBIHJwb3J0IGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFfcnBvcnRfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgcWU7CSAgLyogIHF1ZXVlIGVsZW1lbnQgKi8KKwliZmFfc21fdAkgICAgICBzbTsgCSAgLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX3MgICAgICAgICAgKmJmYTsJICAvKiAgYmFja3BvaW50ZXIgdG8gQkZBICovCisJdm9pZCAgICAgICAgICAgICAgICAgICpycG9ydF9kcnY7IC8qICBmY3MvZHJpdmVyIHJwb3J0IG9iamVjdCAqLworCXUxNiAgICAgICAgICAgICAgZndfaGFuZGxlOyAvKiAgZmlybXdhcmUgcnBvcnQgaGFuZGxlICovCisJdTE2ICAgICAgICAgICAgICBycG9ydF90YWc7IC8qICBCRkEgcnBvcnQgdGFnICovCisJc3RydWN0IGJmYV9ycG9ydF9pbmZvX3MgcnBvcnRfaW5mbzsgLyogIHJwb3J0IGluZm8gZnJvbSAqZmNzL2RyaXZlciAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgcmVxcV93YWl0OyAvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJc3RydWN0IGJmYV9jYl9xZV9zICAgIGhjYl9xZTsJIC8qICBCRkEgY2FsbGJhY2sgcWVsZW0gKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X2hhbF9zdGF0c19zIHN0YXRzOyAvKiAgQkZBIHJwb3J0IHN0YXRpc3RpY3MgICovCisJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zICBxb3NfYXR0cjsKKwl1bmlvbiBhIHsKKwkJYmZhX3N0YXR1c190ICAgIHN0YXR1czsJIC8qICBmL3cgc3RhdHVzICovCisJCXZvaWQgICAgICAgICAgICAqZndfbXNnOyAvKiAgUW9TIHNjbiBldmVudCAqLworCX0gZXZlbnRfYXJnOworfTsKKyNkZWZpbmUgQkZBX1JQT1JUX0ZDX0NPUyhfcnBvcnQpCSgoX3Jwb3J0KS0+cnBvcnRfaW5mby5mY19jbGFzcykKKworLyoqCisgKiBTZW5kIGNvbXBsZXRpb24gY2FsbGJhY2suCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9jYl9mY3hwX3NlbmRfdCkgKHZvaWQgKmJmYWRfZmN4cCwgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQl2b2lkICpjYmFyZywgZW51bSBiZmFfc3RhdHVzIHJlcV9zdGF0dXMsCisJCQl1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKworLyoqCisgKiBCRkEgZmN4cCBhbGxvY2F0aW9uIChhc3luY2hyb25vdXMpCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9mY3hwX2FsbG9jX2NiZm5fdCkgKHZvaWQgKmNiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCk7CisKK3N0cnVjdCBiZmFfZmN4cF93cWVfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIHFlOworCWJmYV9mY3hwX2FsbG9jX2NiZm5fdCAgYWxsb2NfY2JmbjsKKwl2b2lkICAgICAgICAgICAqYWxsb2NfY2Jhcmc7Cit9OworCit0eXBlZGVmIHU2NCAoKmJmYV9mY3hwX2dldF9zZ2FkZHJfdCkgKHZvaWQgKmJmYWRfZmN4cCwgaW50IHNnZWlkKTsKK3R5cGVkZWYgdTMyICgqYmZhX2ZjeHBfZ2V0X3NnbGVuX3QpICh2b2lkICpiZmFkX2ZjeHAsIGludCBzZ2VpZCk7CisKKyNkZWZpbmUgQkZBX1VGX0JVRlNaCSgyICogMTAyNCArIDI1NikKKworLyoqCisgKiBAdG9kbyBwcml2YXRlCisgKi8KK3N0cnVjdCBiZmFfdWZfYnVmX3MgeworCXU4ICAgICAgICAgZFtCRkFfVUZfQlVGU1pdOworfTsKKworCitzdHJ1Y3QgYmZhX3VmX3MgeworCXN0cnVjdCBsaXN0X2hlYWQJcWU7CQkvKiAgcXVldWUgZWxlbWVudAkgICovCisJc3RydWN0IGJmYV9zCSpiZmE7CQkvKiAgYmZhIGluc3RhbmNlCSAgKi8KKwl1MTYgICAgICAgIHVmX3RhZzsJCS8qICBpZGVudGlmeWluZyB0YWcgZi93IG1lc3NhZ2VzICovCisJdTE2ICAgICAgICB2Zl9pZDsKKwl1MTYgICAgICAgIHNyY19ycG9ydF9oYW5kbGU7CisJdTE2ICAgICAgICByc3ZkOworCXU4ICAgICAgICAJKmRhdGFfcHRyOworCXUxNiAgICAgICAgZGF0YV9sZW47CS8qICBhY3R1YWwgcmVjZWl2ZSBsZW5ndGgJICAqLworCXUxNiAgICAgICAgcGJfbGVuOwkJLyogIHBvc3RlZCBidWZmZXIgbGVuZ3RoCSAgKi8KKwl2b2lkICAgICAgICAgICAJKmJ1Zl9rdmE7CS8qICBidWZmZXIgdmlydHVhbCBhZGRyZXNzCSAgKi8KKwl1NjQgICAgICAgIGJ1Zl9wYTsJCS8qICBidWZmZXIgcGh5c2ljYWwgYWRkcmVzcwkgICovCisJc3RydWN0IGJmYV9jYl9xZV9zICAgIGhjYl9xZTsJLyogIGNvbXA6IEJGQSBjb21wIHFlbGVtCSAgKi8KKwlzdHJ1Y3QgYmZhX3NnZV9zICAgCXNnZXNbQkZJX1NHRV9JTkxJTkVfTUFYXTsKK307CisKK3R5cGVkZWYgdm9pZCAoKmJmYV9jYl9wcG9ydF90KSAodm9pZCAqY2JhcmcsIGVudW0gYmZhX3N0YXR1cyBzdGF0dXMpOworCisvKioKKyAqIGJmYSBscG9ydCBsb2dpbi9sb2dvdXQgc2VydmljZSBpbnRlcmZhY2UKKyAqLworc3RydWN0IGJmYV9scHNfcyB7CisJc3RydWN0IGxpc3RfaGVhZAlxZTsJCS8qICBxdWV1ZSBlbGVtZW50ICovCisJc3RydWN0IGJmYV9zCSpiZmE7CQkvKiAgcGFyZW50IGJmYSBpbnN0YW5jZQkqLworCWJmYV9zbV90CXNtOwkJLyogIGZpbml0ZSBzdGF0ZSBtYWNoaW5lCSovCisJdTgJCWxwX3RhZzsJCS8qICBscG9ydCB0YWcJCQkqLworCXU4CQlyZXFxOwkJLyogIGxwb3J0IHJlcXVlc3QgcXVldWUJKi8KKwl1OAkJYWxwYTsJCS8qICBBTFBBIGZvciBsb29wIHRvcG9sb2dpZXMJKi8KKwl1MzIJbHBfcGlkOwkJLyogIGxwb3J0IHBvcnQgSUQJCSovCisJYmZhX2Jvb2xlYW5fdAlmZGlzYzsJCS8qICBzZW5kIEZESVNDIGluc3RlYWQgb2YgRkxPR0kqLworCWJmYV9ib29sZWFuX3QJYXV0aF9lbjsJLyogIGVuYWJsZSBhdXRoZW50aWNhdGlvbgkqLworCWJmYV9ib29sZWFuX3QJYXV0aF9yZXE7CS8qICBhdXRoZW50aWNhdGlvbiByZXF1aXJlZAkqLworCWJmYV9ib29sZWFuX3QJbnBpdl9lbjsJLyogIE5QSVYgaXMgYWxsb3dlZCBieSBwZWVyCSovCisJYmZhX2Jvb2xlYW5fdAlmcG9ydDsJCS8qICBhdHRhY2hlZCBwZWVyIGlzIEZfUE9SVAkqLworCWJmYV9ib29sZWFuX3QJYnJjZF9zd2l0Y2g7LyogIGF0dGFjaGVkIHBlZXIgaXMgYnJjZCBzd2l0Y2gJKi8KKwliZmFfc3RhdHVzX3QJc3RhdHVzOwkJLyogIGxvZ2luIHN0YXR1cwkJKi8KKwl1MTYJcGR1c3o7CQkvKiAgbWF4IHJlY2VpdmUgUERVIHNpemUgCSovCisJdTE2CXByX2JiY3JlZDsJLyogIEJCX0NSRURJVCBmcm9tIHBlZXIgCSovCisJdTgJCWxzcmp0X3JzbjsJLyogIExTUkpUIHJlYXNvbgkJKi8KKwl1OAkJbHNyanRfZXhwbDsJLyogIExTUkpUIGV4cGxhbmF0aW9uCQkqLworCXd3bl90CQlwd3duOwkJLyogIHBvcnQgd3duIG9mIGxwb3J0CQkqLworCXd3bl90CQlud3duOwkJLyogIG5vZGUgd3duIG9mIGxwb3J0CQkqLworCXd3bl90CQlwcl9wd3duOwkvKiAgcG9ydCB3d24gb2YgbHBvcnQgcGVlcgkqLworCXd3bl90CQlwcl9ud3duOwkvKiAgbm9kZSB3d24gb2YgbHBvcnQgcGVlcgkqLworCW1hY190CQlscF9tYWM7CQkvKiAgZnBtYS9zcG1hIE1BQyBmb3IgbHBvcnQJKi8KKwltYWNfdAkJZmNmX21hYzsJLyogIEZDRiBNQUMgb2YgbHBvcnQJCSovCisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcwl3cWU7CS8qICByZXF1ZXN0IHdhaXQgcXVldWUgZWxlbWVudAkqLworCXZvaWQJCSp1YXJnOwkJLyogIHVzZXIgY2FsbGJhY2sgYXJnCQkqLworCXN0cnVjdCBiZmFfY2JfcWVfcyBoY2JfcWU7CS8qICBjb21wOiBjYWxsYmFjayBxZWxlbQkqLworCXN0cnVjdCBiZmlfbHBzX2xvZ2luX3JzcF9zICpsb2dpbnJzcDsKKwliZmFfZXByb3RvX3N0YXR1c190CWV4dF9zdGF0dXM7Cit9OworCisvKgorICogYmZhIHBwb3J0IEFQSSBmdW5jdGlvbnMKKyAqLworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9lbmFibGUoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2ZnX3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpOworZW51bSBiZmFfcHBvcnRfc3BlZWQgYmZhX3Bwb3J0X2dldF9zcGVlZChzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2NmZ190b3BvbG9neShzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCWVudW0gYmZhX3Bwb3J0X3RvcG9sb2d5IHRvcG8pOworZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kgYmZhX3Bwb3J0X2dldF90b3BvbG9neShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2NmZ19oYXJkYWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggYWxwYSk7CitiZmFfYm9vbGVhbl90IGJmYV9wcG9ydF9nZXRfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEsIHU4ICphbHBhKTsKK3U4IGJmYV9wcG9ydF9nZXRfbXlhbHBhKHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2xyX2hhcmRhbHBhKHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2ZnX21heGZyc2l6ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IG1heHNpemUpOwordTE2IGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3UzMiBiZmFfcHBvcnRfbXlwaWQoc3RydWN0IGJmYV9zICpiZmEpOwordTggYmZhX3Bwb3J0X2dldF9yeF9iYmNyZWRpdChzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X3RydW5rX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggYml0bWFwKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfdHJ1bmtfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfYm9vbGVhbl90IGJmYV9wcG9ydF90cnVua19xdWVyeShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICpiaXRtYXApOwordm9pZCBiZmFfcHBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zICphdHRyKTsKK3d3bl90IGJmYV9wcG9ydF9nZXRfd3duKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG5vZGUpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsCisJCQl1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHMsCisJCQliZmFfY2JfcHBvcnRfdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfcHBvcnRfdCBjYmZuLAorCQkJdm9pZCAqY2JhcmcpOwordm9pZCBiZmFfcHBvcnRfZXZlbnRfcmVnaXN0ZXIoc3RydWN0IGJmYV9zICpiZmEsCisJCQl2b2lkICgqZXZlbnRfY2JmbikgKHZvaWQgKmNiYXJnLAorCQkJYmZhX3Bwb3J0X2V2ZW50X3QgZXZlbnQpLCB2b2lkICpldmVudF9jYmFyZyk7CitiZmFfYm9vbGVhbl90IGJmYV9wcG9ydF9pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9wcG9ydF9jZmdfcW9zKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG9uX29mZik7Cit2b2lkIGJmYV9wcG9ydF9jZmdfcmF0ZWxpbShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBvbl9vZmYpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jZmdfcmF0ZWxpbV9zcGVlZChzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKTsKK2VudW0gYmZhX3Bwb3J0X3NwZWVkIGJmYV9wcG9ydF9nZXRfcmF0ZWxpbV9zcGVlZChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisKK3ZvaWQgYmZhX3Bwb3J0X3NldF90eF9iYmNyZWRpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHR4X2JiY3JlZGl0KTsKK3ZvaWQgYmZhX3Bwb3J0X2J1c3koc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgc3RhdHVzKTsKK3ZvaWQgYmZhX3Bwb3J0X2JlYWNvbihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBiZWFjb24sCisJCQliZmFfYm9vbGVhbl90IGxpbmtfZTJlX2JlYWNvbik7Cit2b2lkIGJmYV9jYl9wcG9ydF9ldmVudCh2b2lkICpjYmFyZywgYmZhX3Bwb3J0X2V2ZW50X3QgZXZlbnQpOwordm9pZCBiZmFfcHBvcnRfcW9zX2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Fvc19hdHRyX3MgKnFvc19hdHRyKTsKK3ZvaWQgYmZhX3Bwb3J0X3Fvc19nZXRfdmNfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXN0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyAqcW9zX3ZjX2F0dHIpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9nZXRfcW9zX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkJYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9wcG9ydF90IGNiZm4sCisJCQl2b2lkICpjYmFyZyk7CitiZmFfYm9vbGVhbl90ICAgICBiZmFfcHBvcnRfaXNfcmF0ZWxpbShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfYm9vbGVhbl90CWJmYV9wcG9ydF9pc19saW5rdXAoc3RydWN0IGJmYV9zICpiZmEpOworCisvKgorICogYmZhIHJwb3J0IEFQSSBmdW5jdGlvbnMKKyAqLworc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpycG9ydF9kcnYpOwordm9pZCBiZmFfcnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X2luZm9fcyAqcnBvcnRfaW5mbyk7Cit2b2lkIGJmYV9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfcnBvcnRfc3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpOwordm9pZCBiZmFfcnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X2hhbF9zdGF0c19zICpzdGF0cyk7Cit2b2lkIGJmYV9ycG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2NiX3Jwb3J0X29ubGluZSh2b2lkICpycG9ydCk7Cit2b2lkIGJmYV9jYl9ycG9ydF9vZmZsaW5lKHZvaWQgKnJwb3J0KTsKK3ZvaWQgYmZhX2NiX3Jwb3J0X3Fvc19zY25fZmxvd2lkKHZvaWQgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG9sZF9xb3NfYXR0ciwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBuZXdfcW9zX2F0dHIpOwordm9pZCBiZmFfY2JfcnBvcnRfcW9zX3Njbl9wcmlvKHZvaWQgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG9sZF9xb3NfYXR0ciwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBuZXdfcW9zX2F0dHIpOwordm9pZCBiZmFfcnBvcnRfZ2V0X3Fvc19hdHRyKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgKnFvc19hdHRyKTsKKworLyoKKyAqIGJmYSBmY3hwIEFQSSBmdW5jdGlvbnMKKyAqLworc3RydWN0IGJmYV9mY3hwX3MgKmJmYV9mY3hwX2FsbG9jKHZvaWQgKmJmYWRfZmN4cCwgc3RydWN0IGJmYV9zICpiZmEsCisJCQlpbnQgbnJlcV9zZ2xlcywgaW50IG5yc3Bfc2dsZXMsCisJCQliZmFfZmN4cF9nZXRfc2dhZGRyX3QgZ2V0X3JlcV9zZ2EsCisJCQliZmFfZmN4cF9nZXRfc2dsZW5fdCBnZXRfcmVxX3NnbGVuLAorCQkJYmZhX2ZjeHBfZ2V0X3NnYWRkcl90IGdldF9yc3Bfc2dhLAorCQkJYmZhX2ZjeHBfZ2V0X3NnbGVuX3QgZ2V0X3JzcF9zZ2xlbik7Cit2b2lkIGJmYV9mY3hwX2FsbG9jX3dhaXQoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfZmN4cF93cWVfcyAqd3FlLAorCQkJYmZhX2ZjeHBfYWxsb2NfY2Jmbl90IGFsbG9jX2NiZm4sIHZvaWQgKmNiYXJnKTsKK3ZvaWQgYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXN0cnVjdCBiZmFfZmN4cF93cWVfcyAqd3FlKTsKK3ZvaWQgYmZhX2ZjeHBfZGlzY2FyZChzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCk7CisKK3ZvaWQgKmJmYV9mY3hwX2dldF9yZXFidWYoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApOwordm9pZCAqYmZhX2ZjeHBfZ2V0X3JzcGJ1ZihzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCk7CisKK3ZvaWQgYmZhX2ZjeHBfZnJlZShzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCk7CisKK3ZvaWQgYmZhX2ZjeHBfc2VuZChzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIHUxNiB2Zl9pZCwgdTggbHBfdGFnLAorCQkJYmZhX2Jvb2xlYW5fdCBjdHMsIGVudW0gZmNfY29zIGNvcywKKwkJCXUzMiByZXFsZW4sIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQliZmFfY2JfZmN4cF9zZW5kX3QgY2JmbiwKKwkJCXZvaWQgKmNiYXJnLAorCQkJdTMyIHJzcF9tYXhsZW4sIHU4IHJzcF90aW1lb3V0KTsKK2JmYV9zdGF0dXNfdCBiZmFfZmN4cF9hYm9ydChzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCk7Cit1MzIgICAgICAgIGJmYV9mY3hwX2dldF9yZXFidWZzeihzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCk7Cit1MzIJYmZhX2ZjeHBfZ2V0X21heHJzcChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitiZmFfdWZfZ2V0X2ZybWJ1ZihzdHJ1Y3QgYmZhX3VmX3MgKnVmKQoreworCXJldHVybiB1Zi0+ZGF0YV9wdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgICB1MTYKK2JmYV91Zl9nZXRfZnJtbGVuKHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJcmV0dXJuIHVmLT5kYXRhX2xlbjsKK30KKworLyoqCisgKiAgICAgIENhbGxiYWNrIHByb3RvdHlwZSBmb3IgdW5zb2xpY2l0ZWQgZnJhbWUgcmVjZWl2ZSBoYW5kbGVyLgorICoKKyAqIEBwYXJhbVtpbl0gICAgICAgICAgIGNiYXJnICAgICAgICAgICBjYWxsYmFjayBhcmcgZm9yIHJlY2VpdmUgaGFuZGxlcgorICogQHBhcmFtW2luXSAgICAgICAgICAgdWYgICAgICAgICAgICAgIHVuc29saWNpdGVkIGZyYW1lIGRlc2NyaXB0b3IKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2NiX3VmX3JlY3ZfdCkgKHZvaWQgKmNiYXJnLCBzdHJ1Y3QgYmZhX3VmX3MgKnVmKTsKKworLyoKKyAqIGJmYSB1ZiBBUEkgZnVuY3Rpb25zCisgKi8KK3ZvaWQgYmZhX3VmX3JlY3ZfcmVnaXN0ZXIoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl91Zl9yZWN2X3QgdWZyZWN2LAorCQkJdm9pZCAqY2JhcmcpOwordm9pZCBiZmFfdWZfZnJlZShzdHJ1Y3QgYmZhX3VmX3MgKnVmKTsKKworLyoqCisgKiBiZmEgbHBvcnQgc2VydmljZSBhcGkKKyAqLworCitzdHJ1Y3QgYmZhX2xwc19zICpiZmFfbHBzX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2xwc19kZWxldGUoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3ZvaWQgYmZhX2xwc19kaXNjYXJkKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit2b2lkIGJmYV9scHNfZmxvZ2koc3RydWN0IGJmYV9scHNfcyAqbHBzLCB2b2lkICp1YXJnLCB1OCBhbHBhLCB1MTYgcGR1c3osCisJCSAgIHd3bl90IHB3d24sIHd3bl90IG53d24sIGJmYV9ib29sZWFuX3QgYXV0aF9lbik7Cit2b2lkIGJmYV9scHNfZmRpc2Moc3RydWN0IGJmYV9scHNfcyAqbHBzLCB2b2lkICp1YXJnLCB1MTYgcGR1c3osIHd3bl90IHB3d24sCisJCSAgIHd3bl90IG53d24pOwordm9pZCBiZmFfbHBzX2Zsb2dvKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit2b2lkIGJmYV9scHNfZmRpc2Nsb2dvKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit1OCBiZmFfbHBzX2dldF90YWcoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK2JmYV9ib29sZWFuX3QgYmZhX2xwc19pc19ucGl2X2VuKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitiZmFfYm9vbGVhbl90IGJmYV9scHNfaXNfZnBvcnQoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK2JmYV9ib29sZWFuX3QgYmZhX2xwc19pc19icmNkX2ZhYnJpYyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworYmZhX2Jvb2xlYW5fdCBiZmFfbHBzX2lzX2F1dGhyZXEoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK2JmYV9lcHJvdG9fc3RhdHVzX3QgYmZhX2xwc19nZXRfZXh0c3RhdHVzKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit1MzIgYmZhX2xwc19nZXRfcGlkKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit1OCBiZmFfbHBzX2dldF90YWdfZnJvbV9waWQoc3RydWN0IGJmYV9zICpiZmEsIHUzMiBwaWQpOwordTE2IGJmYV9scHNfZ2V0X3BlZXJfYmJjcmVkaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3d3bl90IGJmYV9scHNfZ2V0X3BlZXJfcHd3bihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOword3duX3QgYmZhX2xwc19nZXRfcGVlcl9ud3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit1OCBiZmFfbHBzX2dldF9sc3JqdF9yc24oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3U4IGJmYV9scHNfZ2V0X2xzcmp0X2V4cGwoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3ZvaWQgYmZhX2NiX2xwc19mbG9naV9jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordm9pZCBiZmFfY2JfbHBzX2Zsb2dvX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZyk7Cit2b2lkIGJmYV9jYl9scHNfZmRpc2NfY29tcCh2b2lkICpiZmFkLCB2b2lkICp1YXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKK3ZvaWQgYmZhX2NiX2xwc19mZGlzY2xvZ29fY29tcCh2b2lkICpiZmFkLCB2b2lkICp1YXJnKTsKKworI2VuZGlmIC8qIF9fQkZBX1NWQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV90aW1lci5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDcxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3RpbWVyLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9USU1FUl9IX18KKyNkZWZpbmUgX19CRkFfVElNRVJfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKworc3RydWN0IGJmYV9zOworCit0eXBlZGVmIHZvaWQgKCpiZmFfdGltZXJfY2Jmbl90KSh2b2lkICopOworCisvKioKKyAqIEJGQSB0aW1lciBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX3RpbWVyX3MgeworCXN0cnVjdCBsaXN0X2hlYWQJcWU7CisJYmZhX3RpbWVyX2NiZm5fdCB0aW1lcmNiOworCXZvaWQgICAgICAgICAgICAqYXJnOworCWludCAgICAgICAgICAgICB0aW1lb3V0OwkvKio8IGluIG1pbGxpc2Vjcy4gKi8KK307CisKKy8qKgorICogVGltZXIgbW9kdWxlIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRpbWVyX3E7Cit9OworCisjZGVmaW5lIEJGQV9USU1FUl9GUkVRIDUwMCAvKio8IHNwZWNpZmllZCBpbiBtaWxsaXNlY3MgKi8KKwordm9pZCBiZmFfdGltZXJfYmVhdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpOwordm9pZCBiZmFfdGltZXJfaW5pdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpOwordm9pZCBiZmFfdGltZXJfYmVnaW4oc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqbW9kLCBzdHJ1Y3QgYmZhX3RpbWVyX3MgKnRpbWVyLAorCQkJYmZhX3RpbWVyX2NiZm5fdCB0aW1lcmNiLCB2b2lkICphcmcsCisJCQl1bnNpZ25lZCBpbnQgdGltZW91dCk7Cit2b2lkIGJmYV90aW1lcl9zdG9wKHN0cnVjdCBiZmFfdGltZXJfcyAqdGltZXIpOworCisjZW5kaWYgLyogX19CRkFfVElNRVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2FkZmUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmkuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0hfXworI2RlZmluZSBfX0JGSV9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorCisjcHJhZ21hIHBhY2soMSkKKworLyoqCisgKiBNc2cgaGVhZGVyIGNvbW1vbiB0byBhbGwgbXNncworICovCitzdHJ1Y3QgYmZpX21oZHJfcyB7CisJdTggICAgICAgICBtc2dfY2xhc3M7CS8qICBAcmVmIGJmaV9tY2xhc3NfdAkgICAgKi8KKwl1OCAgICAgICAgIG1zZ19pZDsJCS8qICBtc2cgb3Bjb2RlIHdpdGggaW4gdGhlIGNsYXNzICAgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCAgICAgICAgIHJzdmQ7CisJCQl1OCAgICAgICAgIGxwdV9pZDsJLyogIG1zZyBkZXN0aW5hdGlvbgkgICAgKi8KKwkJfSBoMmk7CisJCXUxNiAgICAgICAgaTJodG9rOwkvKiAgdG9rZW4gaW4gbXNncyB0byBob3N0CSAgICAqLworCX0gbXRhZzsKK307CisKKyNkZWZpbmUgYmZpX2gyaV9zZXQoX21oLCBfbWMsIF9vcCwgX2xwdWlkKSBkbyB7CQlcCisJKF9taCkubXNnX2NsYXNzIAkJPSAoX21jKTsgICAgICBcCisJKF9taCkubXNnX2lkCQkJPSAoX29wKTsgICAgICBcCisJKF9taCkubXRhZy5oMmkubHB1X2lkCT0gKF9scHVpZCk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmlfaTJoX3NldChfbWgsIF9tYywgX29wLCBfaTJodG9rKSBkbyB7CQlcCisJKF9taCkubXNnX2NsYXNzIAkJPSAoX21jKTsgICAgICBcCisJKF9taCkubXNnX2lkCQkJPSAoX29wKTsgICAgICBcCisJKF9taCkubXRhZy5pMmh0b2sJCT0gKF9pMmh0b2spOyAgICAgIFwKK30gd2hpbGUgKDApCisKKy8qCisgKiBNZXNzYWdlIG9wY29kZXM6IDAtMTI3IHRvIGZpcm13YXJlLCAxMjgtMjU1IHRvIGhvc3QKKyAqLworI2RlZmluZSBCRklfSTJIX09QQ09ERV9CQVNFCTEyOAorI2RlZmluZSBCRkFfSTJITShfeCkgCQkJKChfeCkgKyBCRklfSTJIX09QQ09ERV9CQVNFKQorCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU2NhdHRlciBHYXRoZXIgRWxlbWVudCBhbmQgUGFnZSBkZWZpbml0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjZGVmaW5lIEJGSV9TR0VfSU5MSU5FCTEKKyNkZWZpbmUgQkZJX1NHRV9JTkxJTkVfTUFYCShCRklfU0dFX0lOTElORSArIDEpCisKKy8qKgorICogU0cgRmxhZ3MKKyAqLworZW51bSB7CisJQkZJX1NHRV9EQVRBCT0gMCwJLyogIGRhdGEgYWRkcmVzcywgbm90IGxhc3QJICAgICAqLworCUJGSV9TR0VfREFUQV9DUEwJPSAxLAkvKiAgZGF0YSBhZGRyLCBsYXN0IGluIGN1cnJlbnQgcGFnZSAqLworCUJGSV9TR0VfREFUQV9MQVNUCT0gMywJLyogIGRhdGEgYWRkcmVzcywgbGFzdAkJICAgICAqLworCUJGSV9TR0VfTElOSwk9IDIsCS8qICBsaW5rIGFkZHJlc3MJCSAgICAgKi8KKwlCRklfU0dFX1BHRExFTgk9IDIsCS8qICBjdW11bGF0aXZlIGRhdGEgbGVuZ3RoIGZvciBwYWdlICovCit9OworCisvKioKKyAqIERNQSBhZGRyZXNzZXMKKyAqLwordW5pb24gYmZpX2FkZHJfdSB7CisJc3RydWN0IHsKKwkJdTMyICAgICAgICBhZGRyX2xvOworCQl1MzIgICAgICAgIGFkZHJfaGk7CisJfSBhMzI7Cit9OworCisvKioKKyAqIFNjYXR0ZXIgR2F0aGVyIEVsZW1lbnQKKyAqLworc3RydWN0IGJmaV9zZ2VfcyB7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIGZsYWdzCTogMiwKKwkJCXJzdmQJOiAyLAorCQkJc2dfbGVuCTogMjg7CisjZWxzZQorCXUzMiAgICAgICAgc2dfbGVuCTogMjgsCisJCQlyc3ZkCTogMiwKKwkJCWZsYWdzCTogMjsKKyNlbmRpZgorCXVuaW9uIGJmaV9hZGRyX3Ugc2dhOworfTsKKworLyoqCisgKiBTY2F0dGVyIEdhdGhlciBQYWdlCisgKi8KKyNkZWZpbmUgQkZJX1NHUEdfREFUQV9TR0VTCQk3CisjZGVmaW5lIEJGSV9TR1BHX1NHRVNfTUFYCQkoQkZJX1NHUEdfREFUQV9TR0VTICsgMSkKKyNkZWZpbmUgQkZJX1NHUEdfUlNWRF9XRF9MRU4JOAorc3RydWN0IGJmaV9zZ3BnX3MgeworCXN0cnVjdCBiZmlfc2dlX3Mgc2dlc1tCRklfU0dQR19TR0VTX01BWF07CisJdTMyCXJzdmRbQkZJX1NHUEdfUlNWRF9XRF9MRU5dOworfTsKKworLyoKKyAqIExhcmdlIE1lc3NhZ2Ugc3RydWN0dXJlIC0gMTI4IEJ5dGVzIHNpemUgTXNncworICovCisjZGVmaW5lIEJGSV9MTVNHX1NaCQkxMjgKKyNkZWZpbmUgQkZJX0xNU0dfUExfV1NaCVwKKwkJCSgoQkZJX0xNU0dfU1ogLSBzaXplb2Yoc3RydWN0IGJmaV9taGRyX3MpKSAvIDQpCisKK3N0cnVjdCBiZmlfbXNnX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIG1oZHI7CisJdTMyCXBsW0JGSV9MTVNHX1BMX1dTWl07Cit9OworCisvKioKKyAqIE1haWxib3ggbWVzc2FnZSBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSBCRklfTUJNU0dfU1oJCTcKK3N0cnVjdCBiZmlfbWJtc2dfcyB7CisJc3RydWN0IGJmaV9taGRyX3MJbWg7CisJdTMyCQlwbFtCRklfTUJNU0dfU1pdOworfTsKKworLyoqCisgKiBNZXNzYWdlIENsYXNzZXMKKyAqLworZW51bSBiZmlfbWNsYXNzIHsKKwlCRklfTUNfSU9DCQk9IDEsCS8qICBJTyBDb250cm9sbGVyIChJT0MpCSAgICAqLworCUJGSV9NQ19ESUFHCQk9IDIsCS8qICBEaWFnbm9zdGljIE1zZ3MJCSAgICAqLworCUJGSV9NQ19GTEFTSAkJPSAzLAkvKiAgRmxhc2ggbWVzc2FnZSBjbGFzcwkgICAgKi8KKwlCRklfTUNfQ0VFCQk9IDQsCisJQkZJX01DX0ZDX1BPUlQJCT0gNSwJLyogIEZDIHBvcnQJCSAgIAkgICAgKi8KKwlCRklfTUNfSU9DRkMJCT0gNiwJLyogIEZDIC0gSU8gQ29udHJvbGxlciAoSU9DKQkgICAgKi8KKwlCRklfTUNfTEwJCT0gNywJLyogIExpbmsgTGF5ZXIJCSAJICAgICovCisJQkZJX01DX1VGCQk9IDgsCS8qICBVbnNvbGljaXRlZCBmcmFtZSByZWNlaXZlCSAgICAqLworCUJGSV9NQ19GQ1hQCQk9IDksCS8qICBGQyBUcmFuc3BvcnQJCSAgICAqLworCUJGSV9NQ19MUFMJCT0gMTAsCS8qICBscG9ydCBmYyBsb2dpbiBzZXJ2aWNlcwkgICAgKi8KKwlCRklfTUNfUlBPUlQJCT0gMTEsCS8qICBSZW1vdGUgcG9ydAkJICAgICovCisJQkZJX01DX0lUTklNCQk9IDEyLAkvKiAgSS1UIG5leHVzIChJbml0aWF0b3IgbW9kZSkJICAgICovCisJQkZJX01DX0lPSU1fUkVBRAk9IDEzLAkvKiAgcmVhZCBJTyAoSW5pdGlhdG9yIG1vZGUpCSAgICAqLworCUJGSV9NQ19JT0lNX1dSSVRFCT0gMTQsCS8qICB3cml0ZSBJTyAoSW5pdGlhdG9yIG1vZGUpCSAgICAqLworCUJGSV9NQ19JT0lNX0lPCQk9IDE1LAkvKiAgSU8gKEluaXRpYXRvciBtb2RlKQkgICAgKi8KKwlCRklfTUNfSU9JTQkJPSAxNiwJLyogIElPIChJbml0aWF0b3IgbW9kZSkJICAgICovCisJQkZJX01DX0lPSU1fSU9DT00JPSAxNywJLyogIGdvb2QgSU8gY29tcGxldGlvbgkJICAgICovCisJQkZJX01DX1RTS0lNCQk9IDE4LAkvKiAgSW5pdGlhdG9yIFRhc2sgbWFuYWdlbWVudAkgICAgKi8KKwlCRklfTUNfU0JPT1QJCT0gMTksCS8qICBTQU4gYm9vdCBzZXJ2aWNlcwkJICAgICovCisJQkZJX01DX0lQRkMJCT0gMjAsCS8qICBJUCBvdmVyIEZDIE1zZ3MJCSAgICAqLworCUJGSV9NQ19QT1JUCQk9IDIxLAkvKiAgUGh5c2ljYWwgcG9ydAkJICAgICovCisJQkZJX01DX01BWAkJPSAzMgorfTsKKworI2RlZmluZSBCRklfSU9DX01BWF9DUVMJCTQKKyNkZWZpbmUgQkZJX0lPQ19NQVhfQ1FTX0FTSUMJOAorI2RlZmluZSBCRklfSU9DX01TR0xFTl9NQVgJMzIJLyogMzIgYnl0ZXMgKi8KKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ib290LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1NWFmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2Jvb3QuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisvKgorICogYmZpX2Jvb3QuaAorICovCisKKyNpZm5kZWYgX19CRklfQk9PVF9IX18KKyNkZWZpbmUgX19CRklfQk9PVF9IX18KKworI2RlZmluZSBCRklfQk9PVF9UWVBFX09GRgkJOAorI2RlZmluZSBCRklfQk9PVF9QQVJBTV9PRkYJCTEyCisKKyNkZWZpbmUgQkZJX0JPT1RfVFlQRV9OT1JNQUwgCQkwCS8qIHBhcmFtIGlzIGRldmljZSBpZCAqLworI2RlZmluZQlCRklfQk9PVF9UWVBFX0ZMQVNICQkxCisjZGVmaW5lCUJGSV9CT09UX1RZUEVfTUVNVEVTVAkJMgorCisjZGVmaW5lIEJGSV9CT09UX01FTVRFU1RfUkVTX0FERFIgICAweDkwMAorI2RlZmluZSBCRklfQk9PVF9NRU1URVNUX1JFU19TSUcgICAgMHhBMEExQTJBMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NicmVnLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jYnJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYmI1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jYnJlZy5oCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBiZmlfY2JyZWcuaCBjcm9zc2JvdyBob3N0IGJsb2NrIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogISEhIERvIG5vdCBlZGl0LiBBdXRvIGdlbmVyYXRlZC4gISEhCisgKi8KKworI2lmbmRlZiBfX0JGSV9DQlJFR19IX18KKyNkZWZpbmUgX19CRklfQ0JSRUdfSF9fCisKKworI2RlZmluZSBIT1NURk4wX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0MDAwCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTF9NSyAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMX1NIICAgICAgMjAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMKF92KSAgICAgKChfdikgPDwgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMX1NIKQorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19QICAgICAgICAgICAweDAwMGZmZmZmCisjZGVmaW5lIEhPU1RGTjBfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQwMDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjAgICAgICAgICAgICAgICAgMHgwMDAxNDAwOAorI2RlZmluZSBfX0hPU1RfUEFHRV9OVU1fRk4gICAgICAgICAgICAgICAweDAwMDAwMWZmCisjZGVmaW5lIEhPU1RGTjFfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQxMDAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUX0xWTF9NSyAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRfTFZMX1NIICAgICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRfTFZMKF92KSAgICAgICAoKF92KSA8PCBfX0hPU1RGTjFfSU5UX1NUQVRfTFZMX1NIKQorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRfUCAgICAgICAgICAgICAweDAwMGZmZmZmCisjZGVmaW5lIEhPU1RGTjFfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQxMDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjEgICAgICAgICAgICAgICAgMHgwMDAxNDEwOAorI2RlZmluZSBBUFBfUExMXzQwMF9DVExfUkVHICAgICAgICAgICAgICAweDAwMDE0MjA0CisjZGVmaW5lIF9fUF80MDBfUExMX0xPQ0sgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9TUkFNX1VTRV8xMDBNSFogICAgMHgwMDEwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1JFU0VUX1RJTUVSX01LICAgICAweDAwMGUwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUkVTRVRfVElNRVJfU0ggICAgIDE3CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUkVTRVRfVElNRVIoX3YpICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MDBfUkVTRVRfVElNRVJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfTE9HSUNfU09GVF9SRVNFVCAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9DTlRMTVQwXzFfTUsgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0NOVExNVDBfMV9TSCAgICAgICAxNAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0NOVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDAwX0NOVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9KSVRMTVQwXzFfTUsgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0pJVExNVDBfMV9TSCAgICAgICAxMgorI2RlZmluZSBfX0FQUF9QTExfNDAwX0pJVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDAwX0pJVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9IUkVGICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0hESVYgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUDBfMV9NSyAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9QMF8xX1NIICAgICAgICAgICAgOAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1AwXzEoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDAwX1AwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfWjBfMl9NSyAgICAgICAgICAgIDB4MDAwMDAwZTAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9aMF8yX1NIICAgICAgICAgICAgNQorI2RlZmluZSBfX0FQUF9QTExfNDAwX1owXzIoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDAwX1owXzJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUlNFTDIwMDUwMCAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9FTkFSU1QgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0JZUEFTUyAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfTFJFU0VUTiAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9FTkFCTEUgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUFBfUExMXzIxMl9DVExfUkVHICAgICAgICAgICAgICAweDAwMDE0MjA4CisjZGVmaW5lIF9fUF8yMTJfUExMX0xPQ0sgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9SRVNFVF9USU1FUl9NSyAgICAgMHgwMDBlMDAwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX1JFU0VUX1RJTUVSX1NIICAgICAxNworI2RlZmluZSBfX0FQUF9QTExfMjEyX1JFU0VUX1RJTUVSKF92KSAgICAoKF92KSA8PCBfX0FQUF9QTExfMjEyX1JFU0VUX1RJTUVSX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMjEyX0xPR0lDX1NPRlRfUkVTRVQgICAweDAwMDEwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfQ05UTE1UMF8xX01LICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9DTlRMTVQwXzFfU0ggICAgICAgMTQKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9DTlRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzIxMl9DTlRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfSklUTE1UMF8xX01LICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9KSVRMTVQwXzFfU0ggICAgICAgMTIKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9KSVRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzIxMl9KSVRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfSFJFRiAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9IRElWICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX1AwXzFfTUsgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUDBfMV9TSCAgICAgICAgICAgIDgKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9QMF8xKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzIxMl9QMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMjEyX1owXzJfTUsgICAgICAgICAgICAweDAwMDAwMGUwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfWjBfMl9TSCAgICAgICAgICAgIDUKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9aMF8yKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzIxMl9aMF8yX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMjEyX1JTRUwyMDA1MDAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfRU5BUlNUICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9CWVBBU1MgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0xSRVNFVE4gICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfRU5BQkxFICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVF9TRU0wX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzMAorI2RlZmluZSBfX0hPU1RfU0VNQVBIT1JFICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RfU0VNMV9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMzQKKyNkZWZpbmUgSE9TVF9TRU0yX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzOAorI2RlZmluZSBIT1NUX1NFTTNfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjNjCisjZGVmaW5lIEhPU1RfU0VNMF9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNDAKKyNkZWZpbmUgSE9TVF9TRU0xX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0NAorI2RlZmluZSBIT1NUX1NFTTJfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjQ4CisjZGVmaW5lIEhPU1RfU0VNM19JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNGMKKyNkZWZpbmUgSE9TVEZOMF9MUFUwX0NNRF9TVEFUICAgICAgICAgICAgMHgwMDAxOTAwMAorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YX0lORk9fTUsgICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1hfSU5GT19TSCAgICAgIDEKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWF9JTkZPKF92KSAgICAgKChfdikgPDwgX19IT1NURk4wX0xQVTBfTUJPWF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YX0NNRF9TVEFUVVMgICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTBfSE9TVEZOMF9DTURfU1RBVCAgICAgICAgICAgIDB4MDAwMTkwMDgKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWF9JTkZPX01LICAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YX0lORk9fU0ggICAgICAxCisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1hfSU5GTyhfdikgICAgICgoX3YpIDw8IF9fTFBVMF9IT1NURk4wX01CT1hfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWF9DTURfU1RBVFVTICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4xX0xQVTFfQ01EX1NUQVQgICAgICAgICAgICAweDAwMDE5MDE0CisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1hfSU5GT19NSyAgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWF9JTkZPX1NIICAgICAgMQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YX0lORk8oX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjFfTFBVMV9NQk9YX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1hfQ01EX1NUQVRVUyAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMV9IT1NURk4xX0NNRF9TVEFUICAgICAgICAgICAgMHgwMDAxOTAxYworI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YX0lORk9fTUsgICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1hfSU5GT19TSCAgICAgIDEKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWF9JTkZPKF92KSAgICAgKChfdikgPDwgX19MUFUxX0hPU1RGTjFfTUJPWF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YX0NNRF9TVEFUVVMgICAweDAwMDAwMDAxCisjZGVmaW5lIENQRV9RMF9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMTQKKyNkZWZpbmUgQ1BFX1EwX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAxYworI2RlZmluZSBDUEVfUTBfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDIwCisjZGVmaW5lIENQRV9RMV9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMzQKKyNkZWZpbmUgQ1BFX1ExX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAzYworI2RlZmluZSBDUEVfUTFfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDQwCisjZGVmaW5lIENQRV9RMl9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwNTQKKyNkZWZpbmUgQ1BFX1EyX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA1YworI2RlZmluZSBDUEVfUTJfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDYwCisjZGVmaW5lIENQRV9RM19ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwNzQKKyNkZWZpbmUgQ1BFX1EzX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA3YworI2RlZmluZSBDUEVfUTNfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDgwCisjZGVmaW5lIENQRV9RNF9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwOTQKKyNkZWZpbmUgQ1BFX1E0X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA5YworI2RlZmluZSBDUEVfUTRfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGEwCisjZGVmaW5lIENQRV9RNV9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwYjQKKyNkZWZpbmUgQ1BFX1E1X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBiYworI2RlZmluZSBDUEVfUTVfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGMwCisjZGVmaW5lIENQRV9RNl9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwZDQKKyNkZWZpbmUgQ1BFX1E2X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBkYworI2RlZmluZSBDUEVfUTZfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGUwCisjZGVmaW5lIENQRV9RN19ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwZjQKKyNkZWZpbmUgQ1BFX1E3X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBmYworI2RlZmluZSBDUEVfUTdfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMTAwCisjZGVmaW5lIFJNRV9RMF9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwMTQKKyNkZWZpbmUgUk1FX1EwX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTAxYworI2RlZmluZSBSTUVfUTBfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDIwCisjZGVmaW5lIFJNRV9RMV9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwMzQKKyNkZWZpbmUgUk1FX1ExX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTAzYworI2RlZmluZSBSTUVfUTFfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDQwCisjZGVmaW5lIFJNRV9RMl9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwNTQKKyNkZWZpbmUgUk1FX1EyX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA1YworI2RlZmluZSBSTUVfUTJfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDYwCisjZGVmaW5lIFJNRV9RM19ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwNzQKKyNkZWZpbmUgUk1FX1EzX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA3YworI2RlZmluZSBSTUVfUTNfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDgwCisjZGVmaW5lIFJNRV9RNF9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwOTQKKyNkZWZpbmUgUk1FX1E0X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA5YworI2RlZmluZSBSTUVfUTRfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGEwCisjZGVmaW5lIFJNRV9RNV9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwYjQKKyNkZWZpbmUgUk1FX1E1X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBiYworI2RlZmluZSBSTUVfUTVfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGMwCisjZGVmaW5lIFJNRV9RNl9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwZDQKKyNkZWZpbmUgUk1FX1E2X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBkYworI2RlZmluZSBSTUVfUTZfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGUwCisjZGVmaW5lIFJNRV9RN19ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwZjQKKyNkZWZpbmUgUk1FX1E3X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBmYworI2RlZmluZSBSTUVfUTdfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMTAwCisjZGVmaW5lIFBTU19DVExfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTg4MDAKKyNkZWZpbmUgX19QU1NfSTJDX0NMS19ESVZfTUsgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVl9TSCAgICAgICAgICAgICAxNgorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVihfdikgICAgICAgICAgICAoKF92KSA8PCBfX1BTU19JMkNfQ0xLX0RJVl9TSCkKKyNkZWZpbmUgX19QU1NfTE1FTV9JTklUX0RPTkUgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBfX1BTU19MTUVNX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIF9fUFNTX0xNRU1fSU5JVF9FTiAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgX19QU1NfTFBVMV9SRVNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX1BTU19MUFUwX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKworLyoKKyAqIFRoZXNlIGRlZmluaXRpb25zIGFyZSBlaXRoZXIgaW4gZXJyb3IvbWlzc2luZyBpbiBzcGVjLiBJdHMgYXV0by1nZW5lcmF0ZWQKKyAqIGZyb20gaGFyZCBjb2RlZCB2YWx1ZXMgaW4gcmVncGFyc2UucGwuCisgKi8KKyNkZWZpbmUgX19FTVBIUE9TVF9BVF80R19NS19GSVggICAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZSBfX0VNUEhQT1NUX0FUXzRHX1NIX0ZJWCAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fRU1QSFBSRV9BVF80R19GSVggICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgX19TRlBfVFhSQVRFX0VOX0ZJWCAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBfX1NGUF9SWFJBVEVfRU5fRklYICAgICAgICAgICAgICAweDAwMDAwMDgwCisKKworLyoKKyAqIFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGFyZSBhdXRvLWdlbmVyYXRlZCBmcm9tIGhhcmQgY29kZWQgdmFsdWVzCisgKiBpbiByZWdwYXJzZS5wbC4KKyAqLworI2RlZmluZSBIT1NURk4wX0xQVV9NQk9YMF8wICAgICAgICAgICAgICAweDAwMDE5MjAwCisjZGVmaW5lIEhPU1RGTjFfTFBVX01CT1gwXzggICAgICAgICAgICAgIDB4MDAwMTkyNjAKKyNkZWZpbmUgTFBVX0hPU1RGTjBfTUJPWDBfMCAgICAgICAgICAgICAgMHgwMDAxOTI4MAorI2RlZmluZSBMUFVfSE9TVEZOMV9NQk9YMF84ICAgICAgICAgICAgICAweDAwMDE5MmUwCisKKworLyoKKyAqIFRoZXNlIHJlZ2lzdGVyIG1hcHBpbmcgZGVmaW5pdGlvbnMgYXJlIGF1dG8tZ2VuZXJhdGVkIGZyb20gbWFwcGluZyB0YWJsZXMKKyAqIGluIHJlZ3BhcnNlLnBsLgorICovCisjZGVmaW5lIEJGQV9JT0MwX0hCRUFUX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMF9JTkZPX1JFRworI2RlZmluZSBCRkFfSU9DMF9TVEFURV9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTFfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQzFfSEJFQVRfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0yX0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0MxX1NUQVRFX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNM19JTkZPX1JFRworI2RlZmluZSBCRkFfRldfVVNFX0NPVU5UICAgICAgICAgICAgICAgICBIT1NUX1NFTTRfSU5GT19SRUcKKworI2RlZmluZSBDUEVfUV9ERVBUSChfX24pIFwKKwkoQ1BFX1EwX0RFUFRIICsgKF9fbikgKiAoQ1BFX1ExX0RFUFRIIC0gQ1BFX1EwX0RFUFRIKSkKKyNkZWZpbmUgQ1BFX1FfUEkoX19uKSBcCisJKENQRV9RMF9QSSArIChfX24pICogKENQRV9RMV9QSSAtIENQRV9RMF9QSSkpCisjZGVmaW5lIENQRV9RX0NJKF9fbikgXAorCShDUEVfUTBfQ0kgKyAoX19uKSAqIChDUEVfUTFfQ0kgLSBDUEVfUTBfQ0kpKQorI2RlZmluZSBSTUVfUV9ERVBUSChfX24pIFwKKwkoUk1FX1EwX0RFUFRIICsgKF9fbikgKiAoUk1FX1ExX0RFUFRIIC0gUk1FX1EwX0RFUFRIKSkKKyNkZWZpbmUgUk1FX1FfUEkoX19uKSBcCisJKFJNRV9RMF9QSSArIChfX24pICogKFJNRV9RMV9QSSAtIFJNRV9RMF9QSSkpCisjZGVmaW5lIFJNRV9RX0NJKF9fbikgXAorCShSTUVfUTBfQ0kgKyAoX19uKSAqIChSTUVfUTFfQ0kgLSBSTUVfUTBfQ0kpKQorCisjZGVmaW5lIENQRV9RX05VTShfX2ZuLCBfX3EpICAoKChfX2ZuKSA8PCAyKSArIChfX3EpKQorI2RlZmluZSBSTUVfUV9OVU0oX19mbiwgX19xKSAgKCgoX19mbikgPDwgMikgKyAoX19xKSkKKyNkZWZpbmUgQ1BFX1FfTUFTSyhfX3EpICAoKF9fcSkgJiAweDMpCisjZGVmaW5lIFJNRV9RX01BU0soX19xKSAgKChfX3EpICYgMHgzKQorCisKKy8qCisgKiBQQ0kgTVNJLVggdmVjdG9yIGRlZmluZXMKKyAqLworZW51bSB7CisgICAgQkZBX01TSVhfQ1BFX1EwID0gMCwKKyAgICBCRkFfTVNJWF9DUEVfUTEgPSAxLAorICAgIEJGQV9NU0lYX0NQRV9RMiA9IDIsCisgICAgQkZBX01TSVhfQ1BFX1EzID0gMywKKyAgICBCRkFfTVNJWF9DUEVfUTQgPSA0LAorICAgIEJGQV9NU0lYX0NQRV9RNSA9IDUsCisgICAgQkZBX01TSVhfQ1BFX1E2ID0gNiwKKyAgICBCRkFfTVNJWF9DUEVfUTcgPSA3LAorICAgIEJGQV9NU0lYX1JNRV9RMCA9IDgsCisgICAgQkZBX01TSVhfUk1FX1ExID0gOSwKKyAgICBCRkFfTVNJWF9STUVfUTIgPSAxMCwKKyAgICBCRkFfTVNJWF9STUVfUTMgPSAxMSwKKyAgICBCRkFfTVNJWF9STUVfUTQgPSAxMiwKKyAgICBCRkFfTVNJWF9STUVfUTUgPSAxMywKKyAgICBCRkFfTVNJWF9STUVfUTYgPSAxNCwKKyAgICBCRkFfTVNJWF9STUVfUTcgPSAxNSwKKyAgICBCRkFfTVNJWF9FUlJfRU1DID0gMTYsCisgICAgQkZBX01TSVhfRVJSX0xQVTAgPSAxNywKKyAgICBCRkFfTVNJWF9FUlJfTFBVMSA9IDE4LAorICAgIEJGQV9NU0lYX0VSUl9QU1MgPSAxOSwKKyAgICBCRkFfTVNJWF9NQk9YX0xQVTAgPSAyMCwKKyAgICBCRkFfTVNJWF9NQk9YX0xQVTEgPSAyMSwKKyAgICBCRkFfTVNJWF9DQl9NQVggPSAyMiwKK307CisKKy8qCisgKiBBbmQgY29ycmVzcG9uZGluZyBob3N0IGludGVycnVwdCBzdGF0dXMgYml0IGZpZWxkIGRlZmluZXMKKyAqLworI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EzICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E2ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTcgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1ExICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMyAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E0ICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTUgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNiAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E3ICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfRU1DICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9MUFUwICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX0xQVTEgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfUFNTICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1hfTFBVMCAgICAgICAgICAgICAgICAweDAwMTAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWF9MUFUxICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YMV9MUFUwICAgICAgICAgICAgICAgMHgwMDQwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1gxX0xQVTEgICAgICAgICAgICAgICAweDAwODAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmZVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMFUKKworCisvKgorICogY3Jvc3Nib3cgbWVtb3J5IG1hcC4KKyAqLworI2RlZmluZSBQU1NfU01FTV9QQUdFX1NUQVJUCTB4ODAwMAorI2RlZmluZSBQU1NfU01FTV9QR05VTShfcGcwLCBfbWEpCSgoX3BnMCkgKyAoKF9tYSkgPj4gMTUpKQorI2RlZmluZSBQU1NfU01FTV9QR09GRihfbWEpCSgoX21hKSAmIDB4N2ZmZikKKworLyoKKyAqIEVuZCBvZiBjcm9zc2JvdyBtZW1vcnkgbWFwCisgKi8KKworCisjZW5kaWYgLyogX19CRklfQ0JSRUdfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NlZS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY2VlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3MDU5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jZWUuaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworLyoqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgYmZpX2RjYnguaCBCRkkgSW50ZXJmYWNlIChNYWlsYm94IGNvbW1hbmRzIGFuZCByZWxhdGVkIHN0cnVjdHVyZXMpCisgKiBiZXR3ZWVuIGhvc3QgZHJpdmVyIGFuZCBEQ0JYL0xMRFAgZmlybXdhcmUgbW9kdWxlLgorICoKKyoqLworCisjaWZuZGVmIF9fQkZJX0NFRV9IX18KKyNkZWZpbmUgX19CRklfQ0VFX0hfXworCisjaW5jbHVkZSA8YmZpL2JmaS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworCitlbnVtIGJmaV9jZWVfaDJpX21zZ3NfZSB7CisJQkZJX0NFRV9IMklfR0VUX0NGR19SRVEgPSAxLAorCUJGSV9DRUVfSDJJX1JFU0VUX1NUQVRTID0gMiwKKwlCRklfQ0VFX0gySV9HRVRfU1RBVFNfUkVRID0gMywKK307CisKKworZW51bSBiZmlfY2VlX2kyaF9tc2dzX2UgeworCUJGSV9DRUVfSTJIX0dFVF9DRkdfUlNQID0gQkZBX0kySE0oMSksCisJQkZJX0NFRV9JMkhfUkVTRVRfU1RBVFNfUlNQID0gQkZBX0kySE0oMiksCisJQkZJX0NFRV9JMkhfR0VUX1NUQVRTX1JTUCA9IEJGQV9JMkhNKDMpLAorfTsKKworCisvKiBEYXRhIHN0cnVjdHVyZXMgKi8KKworLyoKKyAqIEJGSV9DRUVfSDJJX1JFU0VUX1NUQVRTCisgKi8KK3N0cnVjdCBiZmlfbGxkcF9yZXNldF9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7Cit9OworCisvKgorICogQkZJX0NFRV9IMklfUkVTRVRfU1RBVFMKKyAqLworc3RydWN0IGJmaV9jZWVfcmVzZXRfc3RhdHNfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOworfTsKKworLyoKKyAqIEJGSV9DRUVfSDJJX0dFVF9DRkdfUkVRCisgKi8KK3N0cnVjdCBiZmlfY2VlX2dldF9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOworCXVuaW9uIGJmaV9hZGRyX3UgICBkbWFfYWRkcjsKK307CisKKworLyoKKyAqIEJGSV9DRUVfSTJIX0dFVF9DRkdfUlNQCisgKi8KK3N0cnVjdCBiZmlfY2VlX2dldF9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOworCXU4ICAgICAgICAgICAgY21kX3N0YXR1czsKKwl1OCAgICAgICAgICAgIHJzdmRbM107Cit9OworCisvKgorICogQkZJX0NFRV9IMklfR0VUX1NUQVRTX1JFUQorICovCitzdHJ1Y3QgYmZpX2NlZV9zdGF0c19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOworCXVuaW9uIGJmaV9hZGRyX3UgICBkbWFfYWRkcjsKK307CisKKworLyoKKyAqIEJGSV9DRUVfSTJIX0dFVF9TVEFUU19SU1AKKyAqLworc3RydWN0IGJmaV9jZWVfc3RhdHNfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKKwl1OCAJCSAgIGNtZF9zdGF0dXM7CisJdTggCQkgICByc3ZkWzNdOworfTsKKworCisKK3VuaW9uIGJmaV9jZWVfaDJpX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgICAgICAgICAgbWg7CisJc3RydWN0IGJmaV9jZWVfZ2V0X3JlcV9zICAgZ2V0X3JlcTsKKwlzdHJ1Y3QgYmZpX2NlZV9zdGF0c19yZXFfcyBzdGF0c19yZXE7Cit9OworCisKK3VuaW9uIGJmaV9jZWVfaTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgICAgICAgIG1oOworCXN0cnVjdCBiZmlfY2VlX2dldF9yc3BfcyAgZ2V0X3JzcDsKKwlzdHJ1Y3QgYmZpX2NlZV9zdGF0c19yc3BfcyBzdGF0c19yc3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisKKyNlbmRpZiAvKiBfX0JGSV9DRUVfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2N0cmVnLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jdHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzY2FhNTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jdHJlZy5oCkBAIC0wLDAgKzEsNjExIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBiZmlfY3RyZWcuaCBjYXRhcHVsdCBob3N0IGJsb2NrIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogISEhIERvIG5vdCBlZGl0LiBBdXRvIGdlbmVyYXRlZC4gISEhCisgKi8KKworI2lmbmRlZiBfX0JGSV9DVFJFR19IX18KKyNkZWZpbmUgX19CRklfQ1RSRUdfSF9fCisKKworI2RlZmluZSBIT1NURk4wX0xQVV9NQk9YMF8wICAgICAgICAgICAgICAweDAwMDE5MjAwCisjZGVmaW5lIEhPU1RGTjFfTFBVX01CT1gwXzggICAgICAgICAgICAgIDB4MDAwMTkyNjAKKyNkZWZpbmUgTFBVX0hPU1RGTjBfTUJPWDBfMCAgICAgICAgICAgICAgMHgwMDAxOTI4MAorI2RlZmluZSBMUFVfSE9TVEZOMV9NQk9YMF84ICAgICAgICAgICAgICAweDAwMDE5MmUwCisjZGVmaW5lIEhPU1RGTjJfTFBVX01CT1gwXzAgICAgICAgICAgICAgIDB4MDAwMTk0MDAKKyNkZWZpbmUgSE9TVEZOM19MUFVfTUJPWDBfOCAgICAgICAgICAgICAgMHgwMDAxOTQ2MAorI2RlZmluZSBMUFVfSE9TVEZOMl9NQk9YMF8wICAgICAgICAgICAgICAweDAwMDE5NDgwCisjZGVmaW5lIExQVV9IT1NURk4zX01CT1gwXzggICAgICAgICAgICAgIDB4MDAwMTk0ZTAKKyNkZWZpbmUgSE9TVEZOMF9JTlRfU1RBVFVTICAgICAgICAgICAgICAgMHgwMDAxNDAwMAorI2RlZmluZSBfX0hPU1RGTjBfSEFMVF9PQ0NVUlJFRCAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTF9NSyAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMX1NIICAgICAgMjAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMKF92KSAgICAgKChfdikgPDwgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMX1NIKQorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19QX01LICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX1BfU0ggICAgICAgIDE2CisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX1AoX3YpICAgICAgICgoX3YpIDw8IF9fSE9TVEZOMF9JTlRfU1RBVFVTX1BfU0gpCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX0YgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSE9TVEZOMF9JTlRfTVNLICAgICAgICAgICAgICAgICAgMHgwMDAxNDAwNAorI2RlZmluZSBIT1NUX1BBR0VfTlVNX0ZOMCAgICAgICAgICAgICAgICAweDAwMDE0MDA4CisjZGVmaW5lIF9fSE9TVF9QQUdFX05VTV9GTiAgICAgICAgICAgICAgIDB4MDAwMDAxZmYKKyNkZWZpbmUgSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjAgICAgICAgICAgMHgwMDAxNDAwYworI2RlZmluZSBfX01TSVhfRVJSX0lOREVYX0ZOICAgICAgICAgICAgICAweDAwMDAwMWZmCisjZGVmaW5lIEhPU1RGTjFfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQxMDAKKyNkZWZpbmUgX19IT1NURk4xX0hBTFRfT0NDVVJSRUQgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRVU19MVkxfTUsgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX0xWTF9TSCAgICAgIDIwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX0xWTChfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOMV9JTlRfU1RBVFVTX0xWTF9TSCkKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfUF9NSyAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRVU19QX1NIICAgICAgICAxNgorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRVU19QKF92KSAgICAgICAoKF92KSA8PCBfX0hPU1RGTjFfSU5UX1NUQVRVU19QX1NIKQorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRVU19GICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhPU1RGTjFfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQxMDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjEgICAgICAgICAgICAgICAgMHgwMDAxNDEwOAorI2RlZmluZSBIT1NUX01TSVhfRVJSX0lOREVYX0ZOMSAgICAgICAgICAweDAwMDE0MTBjCisjZGVmaW5lIEFQUF9QTExfNDI1X0NUTF9SRUcgICAgICAgICAgICAgIDB4MDAwMTQyMDQKKyNkZWZpbmUgX19QXzQyNV9QTExfTE9DSyAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1NSQU1fVVNFXzEwME1IWiAgICAweDAwMTAwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUkVTRVRfVElNRVJfTUsgICAgIDB4MDAwZTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9SRVNFVF9USU1FUl9TSCAgICAgMTcKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9SRVNFVF9USU1FUihfdikgICAgKChfdikgPDwgX19BUFBfUExMXzQyNV9SRVNFVF9USU1FUl9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9MT0dJQ19TT0ZUX1JFU0VUICAgMHgwMDAxMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0NOVExNVDBfMV9NSyAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfQ05UTE1UMF8xX1NIICAgICAgIDE0CisjZGVmaW5lIF9fQVBQX1BMTF80MjVfQ05UTE1UMF8xKF92KSAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MjVfQ05UTE1UMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDI1X0pJVExNVDBfMV9NSyAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfSklUTE1UMF8xX1NIICAgICAgIDEyCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfSklUTE1UMF8xKF92KSAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MjVfSklUTE1UMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDI1X0hSRUYgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfSERJViAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9QMF8xX01LICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1AwXzFfU0ggICAgICAgICAgICA4CisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUDBfMShfdikgICAgICAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MjVfUDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9aMF8yX01LICAgICAgICAgICAgMHgwMDAwMDBlMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1owXzJfU0ggICAgICAgICAgICA1CisjZGVmaW5lIF9fQVBQX1BMTF80MjVfWjBfMihfdikgICAgICAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MjVfWjBfMl9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9SU0VMMjAwNTAwICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0VOQVJTVCAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIF9fQVBQX1BMTF80MjVfQllQQVNTICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9MUkVTRVROICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0FQUF9QTExfNDI1X0VOQUJMRSAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFQUF9QTExfMzEyX0NUTF9SRUcgICAgICAgICAgICAgIDB4MDAwMTQyMDgKKyNkZWZpbmUgX19QXzMxMl9QTExfTE9DSyAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0VOQUJMRV9NQUNfQUhCXzEgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIF9fRU5BQkxFX01BQ19BSEJfMCAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgX19FTkFCTEVfTUFDXzEgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBfX0VOQUJMRV9NQUNfMCAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUkVTRVRfVElNRVJfTUsgICAgIDB4MDAwZTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9SRVNFVF9USU1FUl9TSCAgICAgMTcKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9SRVNFVF9USU1FUihfdikgICAgKChfdikgPDwgX19BUFBfUExMXzMxMl9SRVNFVF9USU1FUl9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9MT0dJQ19TT0ZUX1JFU0VUICAgMHgwMDAxMDAwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0NOVExNVDBfMV9NSyAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfQ05UTE1UMF8xX1NIICAgICAgIDE0CisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfQ05UTE1UMF8xKF92KSAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF8zMTJfQ05UTE1UMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMzEyX0pJVExNVDBfMV9NSyAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfSklUTE1UMF8xX1NIICAgICAgIDEyCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfSklUTE1UMF8xKF92KSAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF8zMTJfSklUTE1UMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMzEyX0hSRUYgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfSERJViAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9QMF8xX01LICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX1AwXzFfU0ggICAgICAgICAgICA4CisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUDBfMShfdikgICAgICAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF8zMTJfUDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9aMF8yX01LICAgICAgICAgICAgMHgwMDAwMDBlMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX1owXzJfU0ggICAgICAgICAgICA1CisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfWjBfMihfdikgICAgICAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF8zMTJfWjBfMl9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9SU0VMMjAwNTAwICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0VOQVJTVCAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfQllQQVNTICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9MUkVTRVROICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0FQUF9QTExfMzEyX0VOQUJMRSAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1CSVNUX0NUTF9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMjAKKyNkZWZpbmUgX19FRFJBTV9CSVNUUl9TVEFSVCAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX01CSVNUX1JFU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fTUJJU1RfU1RBUlQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUJJU1RfU1RBVF9SRUcgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIyNAorI2RlZmluZSBfX0VEUkFNX0JJU1RSX1NUQVRVUyAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIF9fRURSQU1fQklTVFJfRE9ORSAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19NRU1fQklUX1NUQVRVUyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX01CSVNUX0RPTkUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RfU0VNMF9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMzAKKyNkZWZpbmUgX19IT1NUX1NFTUFQSE9SRSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NUX1NFTTFfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjM0CisjZGVmaW5lIEhPU1RfU0VNMl9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMzgKKyNkZWZpbmUgSE9TVF9TRU0zX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzYworI2RlZmluZSBIT1NUX1NFTTBfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjQwCisjZGVmaW5lIEhPU1RfU0VNMV9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNDQKKyNkZWZpbmUgSE9TVF9TRU0yX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0OAorI2RlZmluZSBIT1NUX1NFTTNfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjRjCisjZGVmaW5lIEVUSF9NQUNfU0VSX1JFRyAgICAgICAgICAgICAgICAgIDB4MDAwMTQyODgKKyNkZWZpbmUgX19BUFBfRU1TX0NLQlVGQU1QSU4gICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBfX0FQUF9FTVNfUkVGQ0xLU0VMICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIF9fQVBQX0VNU19DTUxDS1NFTCAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19BUFBfRU1TX1JFRkNLQlVGRU4yICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX0FQUF9FTVNfUkVGQ0tCVUZFTjEgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fQVBQX0VNU19DSEFOTkVMX1NFTCAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOMl9JTlRfU1RBVFVTICAgICAgICAgICAgICAgMHgwMDAxNDMwMAorI2RlZmluZSBfX0hPU1RGTjJfSEFMVF9PQ0NVUlJFRCAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMl9JTlRfU1RBVFVTX0xWTF9NSyAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfTFZMX1NIICAgICAgMjAKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfTFZMKF92KSAgICAgKChfdikgPDwgX19IT1NURk4yX0lOVF9TVEFUVVNfTFZMX1NIKQorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19QX01LICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIF9fSE9TVEZOMl9JTlRfU1RBVFVTX1BfU0ggICAgICAgIDE2CisjZGVmaW5lIF9fSE9TVEZOMl9JTlRfU1RBVFVTX1AoX3YpICAgICAgICgoX3YpIDw8IF9fSE9TVEZOMl9JTlRfU1RBVFVTX1BfU0gpCisjZGVmaW5lIF9fSE9TVEZOMl9JTlRfU1RBVFVTX0YgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSE9TVEZOMl9JTlRfTVNLICAgICAgICAgICAgICAgICAgMHgwMDAxNDMwNAorI2RlZmluZSBIT1NUX1BBR0VfTlVNX0ZOMiAgICAgICAgICAgICAgICAweDAwMDE0MzA4CisjZGVmaW5lIEhPU1RfTVNJWF9FUlJfSU5ERVhfRk4yICAgICAgICAgIDB4MDAwMTQzMGMKKyNkZWZpbmUgSE9TVEZOM19JTlRfU1RBVFVTICAgICAgICAgICAgICAgMHgwMDAxNDQwMAorI2RlZmluZSBfX0hBTFRfT0NDVVJSRUQgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIF9fSE9TVEZOM19JTlRfU1RBVFVTX0xWTF9NSyAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfTFZMX1NIICAgICAgMjAKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfTFZMKF92KSAgICAgKChfdikgPDwgX19IT1NURk4zX0lOVF9TVEFUVVNfTFZMX1NIKQorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19QX01LICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIF9fSE9TVEZOM19JTlRfU1RBVFVTX1BfU0ggICAgICAgIDE2CisjZGVmaW5lIF9fSE9TVEZOM19JTlRfU1RBVFVTX1AoX3YpICAgICAgICgoX3YpIDw8IF9fSE9TVEZOM19JTlRfU1RBVFVTX1BfU0gpCisjZGVmaW5lIF9fSE9TVEZOM19JTlRfU1RBVFVTX0YgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSE9TVEZOM19JTlRfTVNLICAgICAgICAgICAgICAgICAgMHgwMDAxNDQwNAorI2RlZmluZSBIT1NUX1BBR0VfTlVNX0ZOMyAgICAgICAgICAgICAgICAweDAwMDE0NDA4CisjZGVmaW5lIEhPU1RfTVNJWF9FUlJfSU5ERVhfRk4zICAgICAgICAgIDB4MDAwMTQ0MGMKKyNkZWZpbmUgRk5DX0lEX1JFRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYwMAorI2RlZmluZSBfX0ZVTkNUSU9OX05VTUJFUiAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEZOQ19QRVJTX1JFRyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MDQKKyNkZWZpbmUgX19GM19GVU5DVElPTl9BQ1RJVkUgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0YzX0ZVTkNUSU9OX01PREUgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fRjNfUE9SVF9NQVBfTUsgICAgICAgICAgICAgICAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgX19GM19QT1JUX01BUF9TSCAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgX19GM19QT1JUX01BUChfdikgICAgICAgICAgICAgICAgKChfdikgPDwgX19GM19QT1JUX01BUF9TSCkKKyNkZWZpbmUgX19GM19WTV9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBfX0YzX0lOVFhfU1RBVFVTX01LICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIF9fRjNfSU5UWF9TVEFUVVNfU0ggICAgICAgICAgICAgIDI0CisjZGVmaW5lIF9fRjNfSU5UWF9TVEFUVVMoX3YpICAgICAgICAgICAgICgoX3YpIDw8IF9fRjNfSU5UWF9TVEFUVVNfU0gpCisjZGVmaW5lIF9fRjJfRlVOQ1RJT05fQUNUSVZFICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgX19GMl9GVU5DVElPTl9NT0RFICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBfX0YyX1BPUlRfTUFQX01LICAgICAgICAgICAgICAgICAweDAwMzAwMDAwCisjZGVmaW5lIF9fRjJfUE9SVF9NQVBfU0ggICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIF9fRjJfUE9SVF9NQVAoX3YpICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fRjJfUE9SVF9NQVBfU0gpCisjZGVmaW5lIF9fRjJfVk1fTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgX19GMl9JTlRYX1NUQVRVU19NSyAgICAgICAgICAgICAgMHgwMDA3MDAwMAorI2RlZmluZSBfX0YyX0lOVFhfU1RBVFVTX1NIICAgICAgICAgICAgICAxNgorI2RlZmluZSBfX0YyX0lOVFhfU1RBVFVTKF92KSAgICAgICAgICAgICAoKF92KSA8PCBfX0YyX0lOVFhfU1RBVFVTX1NIKQorI2RlZmluZSBfX0YxX0ZVTkNUSU9OX0FDVElWRSAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIF9fRjFfRlVOQ1RJT05fTU9ERSAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgX19GMV9QT1JUX01BUF9NSyAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBfX0YxX1BPUlRfTUFQX1NIICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBfX0YxX1BPUlRfTUFQKF92KSAgICAgICAgICAgICAgICAoKF92KSA8PCBfX0YxX1BPUlRfTUFQX1NIKQorI2RlZmluZSBfX0YxX1ZNX01PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIF9fRjFfSU5UWF9TVEFUVVNfTUsgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgX19GMV9JTlRYX1NUQVRVU19TSCAgICAgICAgICAgICAgOAorI2RlZmluZSBfX0YxX0lOVFhfU1RBVFVTKF92KSAgICAgICAgICAgICAoKF92KSA8PCBfX0YxX0lOVFhfU1RBVFVTX1NIKQorI2RlZmluZSBfX0YwX0ZVTkNUSU9OX0FDVElWRSAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIF9fRjBfRlVOQ1RJT05fTU9ERSAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgX19GMF9QT1JUX01BUF9NSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBfX0YwX1BPUlRfTUFQX1NIICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIF9fRjBfUE9SVF9NQVAoX3YpICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fRjBfUE9SVF9NQVBfU0gpCisjZGVmaW5lIF9fRjBfVk1fTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19GMF9JTlRYX1NUQVRVUyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworZW51bSB7CisgICAgX19GMF9JTlRYX1NUQVRVU19NU0lYICAgICAgICAgICAgPSAweDAsCisgICAgX19GMF9JTlRYX1NUQVRVU19JTlRBICAgICAgICAgICAgPSAweDEsCisgICAgX19GMF9JTlRYX1NUQVRVU19JTlRCICAgICAgICAgICAgPSAweDIsCisgICAgX19GMF9JTlRYX1NUQVRVU19JTlRDICAgICAgICAgICAgPSAweDMsCisgICAgX19GMF9JTlRYX1NUQVRVU19JTlREICAgICAgICAgICAgPSAweDQsCit9OworI2RlZmluZSBPUF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjBjCisjZGVmaW5lIF9fQVBQX0VUSF9DTEtfTE9XU1BFRUQgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19HTE9CQUxfQ09SRUNMS19IQUxGU1BFRUQgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0dMT0JBTF9GQ09FX01PREUgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RfU0VNNF9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MTAKKyNkZWZpbmUgSE9TVF9TRU01X1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYxNAorI2RlZmluZSBIT1NUX1NFTTZfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjE4CisjZGVmaW5lIEhPU1RfU0VNN19SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MWMKKyNkZWZpbmUgSE9TVF9TRU00X0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDYyMAorI2RlZmluZSBIT1NUX1NFTTVfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0NjI0CisjZGVmaW5lIEhPU1RfU0VNNl9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQ2MjgKKyNkZWZpbmUgSE9TVF9TRU03X0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDYyYworI2RlZmluZSBIT1NURk4wX0xQVTBfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDAwCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjBfTFBVMF9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjBfTFBVMV9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMDQKKyNkZWZpbmUgX19IT1NURk4wX0xQVTFfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMV9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUxX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOMF9MUFUxX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUxX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMF9IT1NURk4wX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAwOAorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUwX0hPU1RGTjBfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUxX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDBjCisjZGVmaW5lIF9fTFBVMV9IT1NURk4wX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjBfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMF9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTFfSE9TVEZOMF9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMF9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjFfTFBVMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMTAKKyNkZWZpbmUgX19IT1NURk4xX0xQVTBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUwX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOMV9MUFUwX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUwX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOMV9MUFUxX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAxNAorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4xX0xQVTFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUwX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDE4CisjZGVmaW5lIF9fTFBVMF9IT1NURk4xX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjFfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMV9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTBfSE9TVEZOMV9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMV9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTFfSE9TVEZOMV9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMWMKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMV9IT1NURk4xX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOMl9MUFUwX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE1MAorI2RlZmluZSBfX0hPU1RGTjJfTFBVMF9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUwX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4yX0xQVTBfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4yX0xQVTBfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4yX0xQVTBfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4yX0xQVTFfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTU0CisjZGVmaW5lIF9fSE9TVEZOMl9MUFUxX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4yX0xQVTFfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjJfTFBVMV9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjJfTFBVMV9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjJfTFBVMV9NQk9YMEJPWDBfQ01EX1NUQVRVUyAweDAwMDAwMDAxCisjZGVmaW5lIExQVTBfSE9TVEZOMl9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNTgKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjJfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMl9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMF9IT1NURk4yX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMF9IT1NURk4yX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMF9IT1NURk4yX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMV9IT1NURk4yX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE1YworI2RlZmluZSBfX0xQVTFfSE9TVEZOMl9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMV9IT1NURk4yX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjJfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUxX0hPU1RGTjJfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4zX0xQVTBfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTYwCisjZGVmaW5lIF9fSE9TVEZOM19MUFUwX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4zX0xQVTBfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjNfTFBVMF9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjNfTFBVMF9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjNfTFBVMF9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjNfTFBVMV9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNjQKKyNkZWZpbmUgX19IT1NURk4zX0xQVTFfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjNfTFBVMV9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOM19MUFUxX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOM19MUFUxX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOM19MUFUxX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMF9IT1NURk4zX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE2OAorI2RlZmluZSBfX0xQVTBfSE9TVEZOM19NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMF9IT1NURk4zX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjNfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUwX0hPU1RGTjNfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUxX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTZjCisjZGVmaW5lIF9fTFBVMV9IT1NURk4zX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjNfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTFfSE9TVEZOM19NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTFfSE9TVEZOM19NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTFfSE9TVEZOM19NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEZXX0lOSVRfSEFMVF9QMCAgICAgICAgICAgICAgICAgIDB4MDAwMTkxYWMKKyNkZWZpbmUgX19GV19JTklUX0hBTFRfUCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGV19JTklUX0hBTFRfUDEgICAgICAgICAgICAgICAgICAweDAwMDE5MWJjCisjZGVmaW5lIENQRV9QSV9QVFJfUTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMDAKKyNkZWZpbmUgX19DUEVfUElfVU5VU0VEX01LICAgICAgICAgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBfX0NQRV9QSV9VTlVTRURfU0ggICAgICAgICAgICAgICAxNgorI2RlZmluZSBfX0NQRV9QSV9VTlVTRUQoX3YpICAgICAgICAgICAgICAoKF92KSA8PCBfX0NQRV9QSV9VTlVTRURfU0gpCisjZGVmaW5lIF9fQ1BFX1BJX1BUUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQ1BFX1BJX1BUUl9RMSAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA0MAorI2RlZmluZSBDUEVfQ0lfUFRSX1EwICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDA0CisjZGVmaW5lIF9fQ1BFX0NJX1VOVVNFRF9NSyAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgX19DUEVfQ0lfVU5VU0VEX1NIICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19DUEVfQ0lfVU5VU0VEKF92KSAgICAgICAgICAgICAgKChfdikgPDwgX19DUEVfQ0lfVU5VU0VEX1NIKQorI2RlZmluZSBfX0NQRV9DSV9QVFIgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIENQRV9DSV9QVFJfUTEgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNDQKKyNkZWZpbmUgQ1BFX0RFUFRIX1EwICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAwOAorI2RlZmluZSBfX0NQRV9ERVBUSF9VTlVTRURfTUsgICAgICAgICAgICAweGY4MDAwMDAwCisjZGVmaW5lIF9fQ1BFX0RFUFRIX1VOVVNFRF9TSCAgICAgICAgICAgIDI3CisjZGVmaW5lIF9fQ1BFX0RFUFRIX1VOVVNFRChfdikgICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0RFUFRIX1VOVVNFRF9TSCkKKyNkZWZpbmUgX19DUEVfTVNJWF9WRUNfSU5ERVhfTUsgICAgICAgICAgMHgwN2ZmMDAwMAorI2RlZmluZSBfX0NQRV9NU0lYX1ZFQ19JTkRFWF9TSCAgICAgICAgICAxNgorI2RlZmluZSBfX0NQRV9NU0lYX1ZFQ19JTkRFWChfdikgICAgICAgICAoKF92KSA8PCBfX0NQRV9NU0lYX1ZFQ19JTkRFWF9TSCkKKyNkZWZpbmUgX19DUEVfREVQVEggICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBDUEVfREVQVEhfUTEgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDQ4CisjZGVmaW5lIENQRV9RQ1RSTF9RMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMGMKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQzMF9NSyAgICAgICAgICAgMHhmYzAwMDAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDMwX1NIICAgICAgICAgICAyNgorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDMwKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDMwX1NIKQorI2RlZmluZSBfX0NQRV9GVU5DX0lOVF9DVFJMX01LICAgICAgICAgICAweDAzMDAwMDAwCisjZGVmaW5lIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfU0ggICAgICAgICAgIDI0CisjZGVmaW5lIF9fQ1BFX0ZVTkNfSU5UX0NUUkwoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0ZVTkNfSU5UX0NUUkxfU0gpCitlbnVtIHsKKyAgICBfX0NQRV9GVU5DX0lOVF9DVFJMX0RJU0FCTEUgICAgICA9IDB4MCwKKyAgICBfX0NQRV9GVU5DX0lOVF9DVFJMX0YyTkYgICAgICAgICA9IDB4MSwKKyAgICBfX0NQRV9GVU5DX0lOVF9DVFJMXzNRVUFSVCAgICAgICA9IDB4MiwKKyAgICBfX0NQRV9GVU5DX0lOVF9DVFJMX0hBTEYgICAgICAgICA9IDB4MywKK307CisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMjBfTUsgICAgICAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQyMF9TSCAgICAgICAgICAgMjAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQyMChfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQyMF9TSCkKKyNkZWZpbmUgX19DUEVfU0NJX1RIX01LICAgICAgICAgICAgICAgICAgMHgwMDBmMDAwMAorI2RlZmluZSBfX0NQRV9TQ0lfVEhfU0ggICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBfX0NQRV9TQ0lfVEgoX3YpICAgICAgICAgICAgICAgICAoKF92KSA8PCBfX0NQRV9TQ0lfVEhfU0gpCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMTBfTUsgICAgICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQxMF9TSCAgICAgICAgICAgMTQKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQxMChfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQxMF9TSCkKKyNkZWZpbmUgX19DUEVfQUNLX1BFTkRJTkcgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDQwX01LICAgICAgICAgICAweDAwMDAxYzAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VENDBfU0ggICAgICAgICAgIDEwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VENDAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VENDBfU0gpCisjZGVmaW5lIF9fQ1BFX1BDSUVJRF9NSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19DUEVfUENJRUlEX1NIICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBfX0NQRV9QQ0lFSUQoX3YpICAgICAgICAgICAgICAgICAoKF92KSA8PCBfX0NQRV9QQ0lFSURfU0gpCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMDBfTUsgICAgICAgICAgIDB4MDAwMDAwZmUKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQwMF9TSCAgICAgICAgICAgMQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDAwKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDAwX1NIKQorI2RlZmluZSBfX0NQRV9FU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQRV9RQ1RSTF9RMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNGMKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQzMV9NSyAgICAgICAgICAgMHhmYzAwMDAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDMxX1NIICAgICAgICAgICAyNgorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDMxKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDMxX1NIKQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIxX01LICAgICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMjFfU0ggICAgICAgICAgIDIwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMjEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMjFfU0gpCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMTFfTUsgICAgICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQxMV9TSCAgICAgICAgICAgMTQKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQxMShfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQxMV9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MV9NSyAgICAgICAgICAgMHgwMDAwMWMwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDQxX1NIICAgICAgICAgICAxMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDQxKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDQxX1NIKQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDAxX01LICAgICAgICAgICAweDAwMDAwMGZlCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMDFfU0ggICAgICAgICAgIDEKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQwMShfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQwMV9TSCkKKyNkZWZpbmUgUk1FX1BJX1BUUl9RMCAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAyMAorI2RlZmluZSBfX0xBVEVOQ1lfVElNRV9TVEFNUF9NSyAgICAgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIF9fTEFURU5DWV9USU1FX1NUQU1QX1NIICAgICAgICAgIDE2CisjZGVmaW5lIF9fTEFURU5DWV9USU1FX1NUQU1QKF92KSAgICAgICAgICgoX3YpIDw8IF9fTEFURU5DWV9USU1FX1NUQU1QX1NIKQorI2RlZmluZSBfX1JNRV9QSV9QVFIgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIFJNRV9QSV9QVFJfUTEgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNjAKKyNkZWZpbmUgUk1FX0NJX1BUUl9RMCAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAyNAorI2RlZmluZSBfX0RFTEFZX1RJTUVfU1RBTVBfTUsgICAgICAgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIF9fREVMQVlfVElNRV9TVEFNUF9TSCAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fREVMQVlfVElNRV9TVEFNUChfdikgICAgICAgICAgICgoX3YpIDw8IF9fREVMQVlfVElNRV9TVEFNUF9TSCkKKyNkZWZpbmUgX19STUVfQ0lfUFRSICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBSTUVfQ0lfUFRSX1ExICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDY0CisjZGVmaW5lIFJNRV9ERVBUSF9RMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMjgKKyNkZWZpbmUgX19STUVfREVQVEhfVU5VU0VEX01LICAgICAgICAgICAgMHhmODAwMDAwMAorI2RlZmluZSBfX1JNRV9ERVBUSF9VTlVTRURfU0ggICAgICAgICAgICAyNworI2RlZmluZSBfX1JNRV9ERVBUSF9VTlVTRUQoX3YpICAgICAgICAgICAoKF92KSA8PCBfX1JNRV9ERVBUSF9VTlVTRURfU0gpCisjZGVmaW5lIF9fUk1FX01TSVhfVkVDX0lOREVYX01LICAgICAgICAgIDB4MDdmZjAwMDAKKyNkZWZpbmUgX19STUVfTVNJWF9WRUNfSU5ERVhfU0ggICAgICAgICAgMTYKKyNkZWZpbmUgX19STUVfTVNJWF9WRUNfSU5ERVgoX3YpICAgICAgICAgKChfdikgPDwgX19STUVfTVNJWF9WRUNfSU5ERVhfU0gpCisjZGVmaW5lIF9fUk1FX0RFUFRIICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgUk1FX0RFUFRIX1ExICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA2OAorI2RlZmluZSBSTUVfUUNUUkxfUTAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDJjCisjZGVmaW5lIF9fUk1FX0lOVF9MQVRFTkNZX1RJTUVSX01LICAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgX19STUVfSU5UX0xBVEVOQ1lfVElNRVJfU0ggICAgICAgMjQKKyNkZWZpbmUgX19STUVfSU5UX0xBVEVOQ1lfVElNRVIoX3YpICAgICAgKChfdikgPDwgX19STUVfSU5UX0xBVEVOQ1lfVElNRVJfU0gpCisjZGVmaW5lIF9fUk1FX0lOVF9ERUxBWV9USU1FUl9NSyAgICAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgX19STUVfSU5UX0RFTEFZX1RJTUVSX1NIICAgICAgICAgMTYKKyNkZWZpbmUgX19STUVfSU5UX0RFTEFZX1RJTUVSKF92KSAgICAgICAgKChfdikgPDwgX19STUVfSU5UX0RFTEFZX1RJTUVSX1NIKQorI2RlZmluZSBfX1JNRV9JTlRfREVMQVlfRElTQUJMRSAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIF9fUk1FX0RMWV9ERUxBWV9ESVNBQkxFICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgX19STUVfQUNLX1BFTkRJTkcgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBfX1JNRV9GVUxMX0lOVEVSUlVQVF9ESVNBQkxFICAgICAweDAwMDAxMDAwCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMTBfTUsgICAgICAgICAgIDB4MDAwMDBjMDAKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQxMF9TSCAgICAgICAgICAgMTAKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQxMChfdikgICAgICAgICAgKChfdikgPDwgX19STUVfQ1RSTF9VTlVTRUQxMF9TSCkKKyNkZWZpbmUgX19STUVfUENJRUlEX01LICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBfX1JNRV9QQ0lFSURfU0ggICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIF9fUk1FX1BDSUVJRChfdikgICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fUk1FX1BDSUVJRF9TSCkKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQwMF9NSyAgICAgICAgICAgMHgwMDAwMDBmZQorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDAwX1NIICAgICAgICAgICAxCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMDAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fUk1FX0NUUkxfVU5VU0VEMDBfU0gpCisjZGVmaW5lIF9fUk1FX0VTSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUk1FX1FDVFJMX1ExICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA2YworI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDExX01LICAgICAgICAgICAweDAwMDAwYzAwCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMTFfU0ggICAgICAgICAgIDEwCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMTEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fUk1FX0NUUkxfVU5VU0VEMTFfU0gpCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMDFfTUsgICAgICAgICAgIDB4MDAwMDAwZmUKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQwMV9TSCAgICAgICAgICAgMQorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDAxKF92KSAgICAgICAgICAoKF92KSA8PCBfX1JNRV9DVFJMX1VOVVNFRDAxX1NIKQorI2RlZmluZSBQU1NfQ1RMX1JFRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDE4ODAwCisjZGVmaW5lIF9fUFNTX0kyQ19DTEtfRElWX01LICAgICAgICAgICAgIDB4MDA3ZjAwMDAKKyNkZWZpbmUgX19QU1NfSTJDX0NMS19ESVZfU0ggICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19QU1NfSTJDX0NMS19ESVYoX3YpICAgICAgICAgICAgKChfdikgPDwgX19QU1NfSTJDX0NMS19ESVZfU0gpCisjZGVmaW5lIF9fUFNTX0xNRU1fSU5JVF9ET05FICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgX19QU1NfTE1FTV9SRVNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBfX1BTU19MTUVNX0lOSVRfRU4gICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIF9fUFNTX0xQVTFfUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19QU1NfTFBVMF9SRVNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIUU1fUVNFVDBfUlhRX0RSQkxfUDAgICAgICAgICAgICAweDAwMDM4MDAwCisjZGVmaW5lIF9fUlhRMF9BRERfVkVDVE9SU19QICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19SWFEwX1NUT1BfUCAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX1JYUTBfUFJEX1BUUl9QICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMV9SWFFfRFJCTF9QMCAgICAgICAgICAgIDB4MDAwMzgwODAKKyNkZWZpbmUgX19SWFExX0FERF9WRUNUT1JTX1AgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX1JYUTFfU1RPUF9QICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fUlhRMV9QUkRfUFRSX1AgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQwX1JYUV9EUkJMX1AxICAgICAgICAgICAgMHgwMDAzYzAwMAorI2RlZmluZSBIUU1fUVNFVDFfUlhRX0RSQkxfUDEgICAgICAgICAgICAweDAwMDNjMDgwCisjZGVmaW5lIEhRTV9RU0VUMF9UWFFfRFJCTF9QMCAgICAgICAgICAgIDB4MDAwMzgwMjAKKyNkZWZpbmUgX19UWFEwX0FERF9WRUNUT1JTX1AgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX1RYUTBfU1RPUF9QICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fVFhRMF9QUkRfUFRSX1AgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQxX1RYUV9EUkJMX1AwICAgICAgICAgICAgMHgwMDAzODBhMAorI2RlZmluZSBfX1RYUTFfQUREX1ZFQ1RPUlNfUCAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fVFhRMV9TVE9QX1AgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19UWFExX1BSRF9QVFJfUCAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDBfVFhRX0RSQkxfUDEgICAgICAgICAgICAweDAwMDNjMDIwCisjZGVmaW5lIEhRTV9RU0VUMV9UWFFfRFJCTF9QMSAgICAgICAgICAgIDB4MDAwM2MwYTAKKyNkZWZpbmUgSFFNX1FTRVQwX0lCX0RSQkxfMV9QMCAgICAgICAgICAgMHgwMDAzODA0MAorI2RlZmluZSBfX0lCMV8wX0FDS19QICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fSUIxXzBfRElTQUJMRV9QICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19JQjFfMF9OVU1fT0ZfQUNLRURfRVZFTlRTX1AgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDFfSUJfRFJCTF8xX1AwICAgICAgICAgICAweDAwMDM4MGMwCisjZGVmaW5lIF9fSUIxXzFfQUNLX1AgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19JQjFfMV9ESVNBQkxFX1AgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX0lCMV8xX05VTV9PRl9BQ0tFRF9FVkVOVFNfUCAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMF9JQl9EUkJMXzFfUDEgICAgICAgICAgIDB4MDAwM2MwNDAKKyNkZWZpbmUgSFFNX1FTRVQxX0lCX0RSQkxfMV9QMSAgICAgICAgICAgMHgwMDAzYzBjMAorI2RlZmluZSBIUU1fUVNFVDBfSUJfRFJCTF8yX1AwICAgICAgICAgICAweDAwMDM4MDYwCisjZGVmaW5lIF9fSUIyXzBfQUNLX1AgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19JQjJfMF9ESVNBQkxFX1AgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX0lCMl8wX05VTV9PRl9BQ0tFRF9FVkVOVFNfUCAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMV9JQl9EUkJMXzJfUDAgICAgICAgICAgIDB4MDAwMzgwZTAKKyNkZWZpbmUgX19JQjJfMV9BQ0tfUCAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0lCMl8xX0RJU0FCTEVfUCAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fSUIyXzFfTlVNX09GX0FDS0VEX0VWRU5UU19QICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQwX0lCX0RSQkxfMl9QMSAgICAgICAgICAgMHgwMDAzYzA2MAorI2RlZmluZSBIUU1fUVNFVDFfSUJfRFJCTF8yX1AxICAgICAgICAgICAweDAwMDNjMGUwCisKKworLyoKKyAqIFRoZXNlIGRlZmluaXRpb25zIGFyZSBlaXRoZXIgaW4gZXJyb3IvbWlzc2luZyBpbiBzcGVjLiBJdHMgYXV0by1nZW5lcmF0ZWQKKyAqIGZyb20gaGFyZCBjb2RlZCB2YWx1ZXMgaW4gcmVncGFyc2UucGwuCisgKi8KKyNkZWZpbmUgX19FTVBIUE9TVF9BVF80R19NS19GSVggICAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZSBfX0VNUEhQT1NUX0FUXzRHX1NIX0ZJWCAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fRU1QSFBSRV9BVF80R19GSVggICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgX19TRlBfVFhSQVRFX0VOX0ZJWCAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBfX1NGUF9SWFJBVEVfRU5fRklYICAgICAgICAgICAgICAweDAwMDAwMDgwCisKKworLyoKKyAqIFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGFyZSBhdXRvLWdlbmVyYXRlZCBmcm9tIGhhcmQgY29kZWQgdmFsdWVzCisgKiBpbiByZWdwYXJzZS5wbC4KKyAqLworCisKKy8qCisgKiBUaGVzZSByZWdpc3RlciBtYXBwaW5nIGRlZmluaXRpb25zIGFyZSBhdXRvLWdlbmVyYXRlZCBmcm9tIG1hcHBpbmcgdGFibGVzCisgKiBpbiByZWdwYXJzZS5wbC4KKyAqLworI2RlZmluZSBCRkFfSU9DMF9IQkVBVF9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTBfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQzBfU1RBVEVfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0xX0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0MxX0hCRUFUX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMl9JTkZPX1JFRworI2RlZmluZSBCRkFfSU9DMV9TVEFURV9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTNfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0ZXX1VTRV9DT1VOVCAgICAgICAgICAgICAgICAgSE9TVF9TRU00X0lORk9fUkVHCisKKyNkZWZpbmUgQ1BFX0RFUFRIX1EoX19uKSBcCisJKENQRV9ERVBUSF9RMCArIChfX24pICogKENQRV9ERVBUSF9RMSAtIENQRV9ERVBUSF9RMCkpCisjZGVmaW5lIENQRV9RQ1RSTF9RKF9fbikgXAorCShDUEVfUUNUUkxfUTAgKyAoX19uKSAqIChDUEVfUUNUUkxfUTEgLSBDUEVfUUNUUkxfUTApKQorI2RlZmluZSBDUEVfUElfUFRSX1EoX19uKSBcCisJKENQRV9QSV9QVFJfUTAgKyAoX19uKSAqIChDUEVfUElfUFRSX1ExIC0gQ1BFX1BJX1BUUl9RMCkpCisjZGVmaW5lIENQRV9DSV9QVFJfUShfX24pIFwKKwkoQ1BFX0NJX1BUUl9RMCArIChfX24pICogKENQRV9DSV9QVFJfUTEgLSBDUEVfQ0lfUFRSX1EwKSkKKyNkZWZpbmUgUk1FX0RFUFRIX1EoX19uKSBcCisJKFJNRV9ERVBUSF9RMCArIChfX24pICogKFJNRV9ERVBUSF9RMSAtIFJNRV9ERVBUSF9RMCkpCisjZGVmaW5lIFJNRV9RQ1RSTF9RKF9fbikgXAorCShSTUVfUUNUUkxfUTAgKyAoX19uKSAqIChSTUVfUUNUUkxfUTEgLSBSTUVfUUNUUkxfUTApKQorI2RlZmluZSBSTUVfUElfUFRSX1EoX19uKSBcCisJKFJNRV9QSV9QVFJfUTAgKyAoX19uKSAqIChSTUVfUElfUFRSX1ExIC0gUk1FX1BJX1BUUl9RMCkpCisjZGVmaW5lIFJNRV9DSV9QVFJfUShfX24pIFwKKwkoUk1FX0NJX1BUUl9RMCArIChfX24pICogKFJNRV9DSV9QVFJfUTEgLSBSTUVfQ0lfUFRSX1EwKSkKKyNkZWZpbmUgSFFNX1FTRVRfUlhRX0RSQkxfUDAoX19uKSBcCisJKEhRTV9RU0VUMF9SWFFfRFJCTF9QMCArIChfX24pICogKEhRTV9RU0VUMV9SWFFfRFJCTF9QMCAtIFwKKwlIUU1fUVNFVDBfUlhRX0RSQkxfUDApKQorI2RlZmluZSBIUU1fUVNFVF9UWFFfRFJCTF9QMChfX24pIFwKKwkoSFFNX1FTRVQwX1RYUV9EUkJMX1AwICsgKF9fbikgKiAoSFFNX1FTRVQxX1RYUV9EUkJMX1AwIC0gXAorCUhRTV9RU0VUMF9UWFFfRFJCTF9QMCkpCisjZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMV9QMChfX24pIFwKKwkoSFFNX1FTRVQwX0lCX0RSQkxfMV9QMCArIChfX24pICogKEhRTV9RU0VUMV9JQl9EUkJMXzFfUDAgLSBcCisJSFFNX1FTRVQwX0lCX0RSQkxfMV9QMCkpCisjZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMl9QMChfX24pIFwKKwkoSFFNX1FTRVQwX0lCX0RSQkxfMl9QMCArIChfX24pICogKEhRTV9RU0VUMV9JQl9EUkJMXzJfUDAgLSBcCisJSFFNX1FTRVQwX0lCX0RSQkxfMl9QMCkpCisjZGVmaW5lIEhRTV9RU0VUX1JYUV9EUkJMX1AxKF9fbikgXAorCShIUU1fUVNFVDBfUlhRX0RSQkxfUDEgKyAoX19uKSAqIChIUU1fUVNFVDFfUlhRX0RSQkxfUDEgLSBcCisJSFFNX1FTRVQwX1JYUV9EUkJMX1AxKSkKKyNkZWZpbmUgSFFNX1FTRVRfVFhRX0RSQkxfUDEoX19uKSBcCisJKEhRTV9RU0VUMF9UWFFfRFJCTF9QMSArIChfX24pICogKEhRTV9RU0VUMV9UWFFfRFJCTF9QMSAtIFwKKwlIUU1fUVNFVDBfVFhRX0RSQkxfUDEpKQorI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzFfUDEoX19uKSBcCisJKEhRTV9RU0VUMF9JQl9EUkJMXzFfUDEgKyAoX19uKSAqIChIUU1fUVNFVDFfSUJfRFJCTF8xX1AxIC0gXAorCUhRTV9RU0VUMF9JQl9EUkJMXzFfUDEpKQorI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzJfUDEoX19uKSBcCisJKEhRTV9RU0VUMF9JQl9EUkJMXzJfUDEgKyAoX19uKSAqIChIUU1fUVNFVDFfSUJfRFJCTF8yX1AxIC0gXAorCUhRTV9RU0VUMF9JQl9EUkJMXzJfUDEpKQorCisjZGVmaW5lIENQRV9RX05VTShfX2ZuLCBfX3EpICAoKChfX2ZuKSA8PCAyKSArIChfX3EpKQorI2RlZmluZSBSTUVfUV9OVU0oX19mbiwgX19xKSAgKCgoX19mbikgPDwgMikgKyAoX19xKSkKKyNkZWZpbmUgQ1BFX1FfTUFTSyhfX3EpICAoKF9fcSkgJiAweDMpCisjZGVmaW5lIFJNRV9RX01BU0soX19xKSAgKChfX3EpICYgMHgzKQorCisKKy8qCisgKiBQQ0kgTVNJLVggdmVjdG9yIGRlZmluZXMKKyAqLworZW51bSB7CisgICAgQkZBX01TSVhfQ1BFX1EwID0gMCwKKyAgICBCRkFfTVNJWF9DUEVfUTEgPSAxLAorICAgIEJGQV9NU0lYX0NQRV9RMiA9IDIsCisgICAgQkZBX01TSVhfQ1BFX1EzID0gMywKKyAgICBCRkFfTVNJWF9STUVfUTAgPSA0LAorICAgIEJGQV9NU0lYX1JNRV9RMSA9IDUsCisgICAgQkZBX01TSVhfUk1FX1EyID0gNiwKKyAgICBCRkFfTVNJWF9STUVfUTMgPSA3LAorICAgIEJGQV9NU0lYX0xQVV9FUlIgPSA4LAorICAgIEJGQV9NU0lYX0NUX01BWCA9IDksCit9OworCisvKgorICogQW5kIGNvcnJlc3BvbmRpbmcgaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIGJpdCBmaWVsZCBkZWZpbmVzCisgKi8KKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1ExICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E0ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTUgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E3ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMSAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1EyICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNCAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E1ICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTYgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNyAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX0VNQyAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfTFBVMCAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9MUFUxICAgICAgICAgICAgICAgICAweDAwMDQwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX1BTUyAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YX0xQVTAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1hfTFBVMSAgICAgICAgICAgICAgICAweDAwMjAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWDFfTFBVMCAgICAgICAgICAgICAgIDB4MDA0MDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YMV9MUFUxICAgICAgICAgICAgICAgMHgwMDgwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMGZmVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMGZmMDBVCisKKworLyoKKyAqIGNhdGFwdWx0IG1lbW9yeSBtYXAuCisgKi8KKyNkZWZpbmUgTExfUEdOX0hRTTAgICAgICAgICAgICAgICAgICAgICAgMHgwMDk2CisjZGVmaW5lIExMX1BHTl9IUU0xICAgICAgICAgICAgICAgICAgICAgIDB4MDA5NworI2RlZmluZSBQU1NfU01FTV9QQUdFX1NUQVJUCTB4ODAwMAorI2RlZmluZSBQU1NfU01FTV9QR05VTShfcGcwLCBfbWEpCSgoX3BnMCkgKyAoKF9tYSkgPj4gMTUpKQorI2RlZmluZSBQU1NfU01FTV9QR09GRihfbWEpCSgoX21hKSAmIDB4N2ZmZikKKworLyoKKyAqIEVuZCBvZiBjYXRhcHVsdCBtZW1vcnkgbWFwCisgKi8KKworCisjZW5kaWYgLyogX19CRklfQ1RSRUdfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZhYnJpYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmFicmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2NjllZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZhYnJpYy5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9GQUJSSUNfSF9fCisjZGVmaW5lIF9fQkZJX0ZBQlJJQ19IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2ZhYnJpY19oMmlfbXNncyB7CisJQkZJX0ZBQlJJQ19IMklfQ1JFQVRFX1JFUQk9IDEsCisJQkZJX0ZBQlJJQ19IMklfREVMRVRFX1JFUQk9IDIsCisJQkZJX0ZBQlJJQ19IMklfU0VUQVVUSAkJPSAzLAorfTsKKworZW51bSBiZmlfZmFicmljX2kyaF9tc2dzIHsKKwlCRklfRkFCUklDX0kySF9DUkVBVEVfUlNQCT0gQkZBX0kySE0oMSksCisJQkZJX0ZBQlJJQ19JMkhfREVMRVRFX1JTUAk9IEJGQV9JMkhNKDIpLAorCUJGSV9GQUJSSUNfSTJIX1NFVEFVVEhfUlNQCT0gQkZBX0kySE0oMyksCisJQkZJX0ZBQlJJQ19JMkhfT05MSU5FCQk9IEJGQV9JMkhNKDQpLAorCUJGSV9GQUJSSUNfSTJIX09GRkxJTkUJCT0gQkZBX0kySE0oNSksCit9OworCitzdHJ1Y3QgYmZpX2ZhYnJpY19jcmVhdGVfcmVxX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTggICAgICAgICB2Zl9lbjsJCS8qICB2aXJ0dWFsIGZhYnJpYyBlbmFibGUJKi8KKwl1OCAgICAgICAgIHJzdmQ7CisJdTE2ICAgICAgICB2Zl9pZDsJCS8qICB2aXJ0dWFsIGZhYnJpYyBJRAkJKi8KKwl3d25fdAkJcHd3bjsJCS8qICBwb3J0IG5hbWUJCQkqLworCXd3bl90CQlud3duOwkJLyogIG5vZGUgbmFtZQkJCSovCit9OworCitzdHJ1Y3QgYmZpX2ZhYnJpY19jcmVhdGVfcnNwX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBmYWJyaWMgaGFuZGxlCQkqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGZhYnJpYyBjcmVhdGUgc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkOworfTsKKworc3RydWN0IGJmaV9mYWJyaWNfZGVsZXRlX3JlcV9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZmlybXdhcmUgZmFicmljIGhhbmRsZQkqLworCXUxNiAgICAgICAgcnN2ZDsKK307CisKK3N0cnVjdCBiZmlfZmFicmljX2RlbGV0ZV9yc3BfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IGZhYnJpYyBoYW5kbGUJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgZmFicmljIGRlbGV0aW9uIHN0YXR1cwkqLworCXU4ICAgICAgICAgcnN2ZDsKK307CisKKyNkZWZpbmUgQkZJX0ZBQlJJQ19BVVRIU0VDUkVUX0xFTgk2NAorc3RydWN0IGJmaV9mYWJyaWNfc2V0YXV0aF9yZXFfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGYvdyBoYW5kbGUgb2YgZmFicmljCSovCisJdTgJCWFsZ29yaXRobTsKKwl1OAkJZ3JvdXA7CisJdTgJCXNlY3JldFtCRklfRkFCUklDX0FVVEhTRUNSRVRfTEVOXTsKK307CisKK3VuaW9uIGJmaV9mYWJyaWNfaDJpX21zZ191IHsKKwliZmlfbXNnX3QJCSptc2c7CisJc3RydWN0IGJmaV9mYWJyaWNfY3JlYXRlX3JlcV9zCSpjcmVhdGVfcmVxOworCXN0cnVjdCBiZmlfZmFicmljX2RlbGV0ZV9yZXFfcwkqZGVsZXRlX3JlcTsKK307CisKK3VuaW9uIGJmaV9mYWJyaWNfaTJoX21zZ191IHsKKwliZmlfbXNnX3QJCSptc2c7CisJc3RydWN0IGJmaV9mYWJyaWNfY3JlYXRlX3JzcF9zCSpjcmVhdGVfcnNwOworCXN0cnVjdCBiZmlfZmFicmljX2RlbGV0ZV9yc3BfcwkqZGVsZXRlX3JzcDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9GQUJSSUNfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZjcGltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mY3BpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzA1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mY3BpbS5oCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfRkNQSU1fSF9fCisjZGVmaW5lIF9fQkZJX0ZDUElNX0hfXworCisjaW5jbHVkZSAiYmZpLmgiCisjaW5jbHVkZSA8cHJvdG9jb2wvZmNwLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCisvKgorICogSW5pdGlhdG9yIG1vZGUgSS1UIG5leHVzIGludGVyZmFjZSBkZWZpbmVzLgorICovCisKK2VudW0gYmZpX2l0bmltX2gyaSB7CisJQkZJX0lUTklNX0gySV9DUkVBVEVfUkVRID0gMSwJLyogIGktdCBuZXh1cyBjcmVhdGlvbiAqLworCUJGSV9JVE5JTV9IMklfREVMRVRFX1JFUSA9IDIsCS8qICBpLXQgbmV4dXMgZGVsZXRpb24gKi8KK307CisKK2VudW0gYmZpX2l0bmltX2kyaCB7CisJQkZJX0lUTklNX0kySF9DUkVBVEVfUlNQID0gQkZBX0kySE0oMSksCisJQkZJX0lUTklNX0kySF9ERUxFVEVfUlNQID0gQkZBX0kySE0oMiksCisJQkZJX0lUTklNX0kySF9TTEVSX0VWRU5UID0gQkZBX0kySE0oMyksCit9OworCitzdHJ1Y3QgYmZpX2l0bmltX2NyZWF0ZV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGYvdyBoYW5kbGUgZm9yIGl0bmltCSAqLworCXU4ICAgICAgICAgY2xhc3M7CQkvKiAgRkMgY2xhc3MgZm9yIElPCQkgKi8KKwl1OCAgICAgICAgIHNlcV9yZWM7CS8qICBzZXF1ZW5jZSByZWNvdmVyeSBzdXBwb3J0CSAqLworCXU4ICAgICAgICAgbXNnX25vOwkJLyogIHNlcSBpZCBvZiB0aGUgbXNnCQkgKi8KK307CisKK3N0cnVjdCBiZmlfaXRuaW1fY3JlYXRlX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGJmYSBoYW5kbGUgZm9yIGl0bmltCSAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGZjcCByZXF1ZXN0IHN0YXR1cwkJICovCisJdTggICAgICAgICBzZXFfaWQ7CQkvKiAgc2VxIGlkIG9mIHRoZSBtc2cJCSAqLworfTsKKworc3RydWN0IGJmaV9pdG5pbV9kZWxldGVfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmL3cgaXRuaW0gaGFuZGxlCQkgKi8KKwl1OCAgICAgICAgIHNlcV9pZDsJCS8qICBzZXEgaWQgb2YgdGhlIG1zZwkJICovCisJdTggICAgICAgICByc3ZkOworfTsKKworc3RydWN0IGJmaV9pdG5pbV9kZWxldGVfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgYmZhIGhhbmRsZSBmb3IgaXRuaW0JICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgZmNwIHJlcXVlc3Qgc3RhdHVzCQkgKi8KKwl1OCAgICAgICAgIHNlcV9pZDsJCS8qICBzZXEgaWQgb2YgdGhlIG1zZwkJICovCit9OworCitzdHJ1Y3QgYmZpX2l0bmltX3NsZXJfZXZlbnRfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBiZmEgaGFuZGxlIGZvciBpdG5pbQkgKi8KKwl1MTYgICAgICAgIHJzdmQ7Cit9OworCit1bmlvbiBiZmlfaXRuaW1faDJpX21zZ191IHsKKwlzdHJ1Y3QgYmZpX2l0bmltX2NyZWF0ZV9yZXFfcyAqY3JlYXRlX3JlcTsKKwlzdHJ1Y3QgYmZpX2l0bmltX2RlbGV0ZV9yZXFfcyAqZGVsZXRlX3JlcTsKKwlzdHJ1Y3QgYmZpX21zZ19zICAgICAgKm1zZzsKK307CisKK3VuaW9uIGJmaV9pdG5pbV9pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfaXRuaW1fY3JlYXRlX3JzcF9zICpjcmVhdGVfcnNwOworCXN0cnVjdCBiZmlfaXRuaW1fZGVsZXRlX3JzcF9zICpkZWxldGVfcnNwOworCXN0cnVjdCBiZmlfaXRuaW1fc2xlcl9ldmVudF9zICpzbGVyX2V2ZW50OworCXN0cnVjdCBiZmlfbXNnX3MgICAgICAqbXNnOworfTsKKworLyoKKyAqIEluaXRpYXRvciBtb2RlIElPIGludGVyZmFjZSBkZWZpbmVzLgorICovCisKK2VudW0gYmZpX2lvaW1faDJpIHsKKwlCRklfSU9JTV9IMklfSU9BQk9SVF9SRVEgPSAxLAkvKiAgSU8gYWJvcnQgcmVxdWVzdAkgKi8KKwlCRklfSU9JTV9IMklfSU9DTEVBTlVQX1JFUSA9IDIsCS8qICBJTyBjbGVhbnVwIHJlcXVlc3QJICovCit9OworCitlbnVtIGJmaV9pb2ltX2kyaCB7CisJQkZJX0lPSU1fSTJIX0lPX1JTUCA9IEJGQV9JMkhNKDEpLAkvKiAgbm9uLWZwIElPIHJlc3BvbnNlCSAqLworCUJGSV9JT0lNX0kySF9JT0FCT1JUX1JTUCA9IEJGQV9JMkhNKDIpLC8qICBBQk9SVCByc3AJICovCit9OworCisvKioKKyAqIElPIGNvbW1hbmQgRElGIGluZm8KKyAqLworc3RydWN0IGJmaV9pb2ltX2RpZl9zIHsKKwl1MzIJZGlmX2luZm9bNF07Cit9OworCisvKioKKyAqIEZDUCBJTyBtZXNzYWdlcyBvdmVydmlldworICoKKyAqIEBub3RlCisgKiAtIE1heCBDREIgbGVuZ3RoIHN1cHBvcnRlZCBpcyA2NCBieXRlcy4KKyAqIC0gU0NTSSBMaW5rZWQgY29tbWFuZHMgYW5kIFNDU0kgYmktZGlyZWN0aW9uYWwgQ29tbWFuZHMgbm90CisgKiAJIHN1cHBvcnRlZC4KKyAqCisgKi8KK3N0cnVjdCBiZmlfaW9pbV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIGlvX3RhZzsJCS8qICBJL08gdGFnCQkJICovCisJdTE2ICAgICAgICBycG9ydF9oZGw7CS8qICBpdG5pbS9ycG9ydCBmaXJtd2FyZSBoYW5kbGUgKi8KKwlzdHJ1Y3QgZmNwX2NtbmRfcyBjbW5kOwkJLyogIElPIHJlcXVlc3QgaW5mbwkJICovCisKKwkvKioKKwkgKiBTRyBlbGVtZW50cyBhcnJheSB3aXRoaW4gdGhlIElPIHJlcXVlc3QgbXVzdCBiZSBkb3VibGUgd29yZAorCSAqIGFsaWduZWQuIFRoaXMgYWxpZ21lbnQgaXMgcmVxdWlyZWQgdG8gb3B0aW1pemUgU0dNIHNldHVwIGZvciB0aGUgSU8uCisJICovCisJc3RydWN0IGJmaV9zZ2VfcyAgIHNnZXNbQkZJX1NHRV9JTkxJTkVfTUFYXTsKKwl1OCAgICAgICAgIGlvX3RpbWVvdXQ7CisJdTggICAgICAgICBkaWZfZW47CisJdTggICAgICAgICByc3ZkX2FbMl07CisJc3RydWN0IGJmaV9pb2ltX2RpZl9zICBkaWY7Cit9OworCisvKioKKyAqIAlUaGlzIHRhYmxlIHNob3dzIHZhcmlvdXMgSU8gc3RhdHVzIGNvZGVzIGZyb20gZmlybXdhcmUgYW5kIHRoZWlyCisgKgltZWFuaW5nLiBIb3N0IGRyaXZlciBjYW4gdXNlIHRoZXNlIHN0YXR1cyBjb2RlcyB0byBmdXJ0aGVyIHByb2Nlc3MKKyAqCUlPIGNvbXBsZXRpb25zLgorICoKKyAqIAlCRklfSU9JTV9TVFNfT0sJCTogSU8gY29tcGxldGVkIHdpdGggZXJyb3IgZnJlZSBTQ1NJICYKKyAqCQkJCQkgICB0cmFuc3BvcnQgc3RhdHVzLgorICogCQkJCQkgICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICoKKyAqIAlCRkFfSU9JTV9TVFNfU0NTSV9FUlIJCTogSU8gY29tcGxldGVkIHdpdGggc2NzaSBlcnJvci4KKyAqIAkJCQkJICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICoKKyAqIAlCRklfSU9JTV9TVFNfSE9TVF9BQk9SVEVECTogSU8gd2FzIGFib3J0ZWQgc3VjY2Vzc2Z1bGx5IGR1ZSB0bworICoJCQkJCSAgIGhvc3QgcmVxdWVzdC4KKyAqIAkJCQkJICAgLSBpby10YWcgY2Fubm90IGJlIHJldXNlZCB5ZXQuCisgKgorICogCUJGSV9JT0lNX1NUU19BQk9SVEVECQk6IElPIHdhcyBhYm9ydGVkIHN1Y2Nlc3NmdWxseQorICoJCQkJCSAgIGludGVybmFsbHkgYnkgZi93LgorICogCQkJCQkgICAtIGlvLXRhZyBjYW5ub3QgYmUgcmV1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1RJTUVET1VUCTogSU8gdGltZWRvdXQgYW5kIEFCVFMvUlJRIGlzIGhhcHBlbmluZworICoJCQkJCSAgIGluIHRoZSBmaXJtd2FyZSBhbmQKKyAqIAkJCQkJICAgLSBpby10YWcgY2Fubm90IGJlIHJldXNlZCB5ZXQuCisgKgorICogCUJGSV9JT0lNX1NUU19TUUVSX05FRURFRAk6IEZpcm13YXJlIGNvdWxkIG5vdCByZWNvdmVyIHRoZSBJTworICoJCQkJCSAgd2l0aCBzZXF1ZW5jZSBsZXZlbCBlcnJvcgorICogCQkJCQkgIGxvZ2ljIGFuZCBoZW5jZSBob3N0IG5lZWRzIHRvIHJldHJ5CisgKgkJCQkJICB0aGlzIElPIHdpdGggYSBkaWZmZXJlbnQgSU8gdGFnCisgKiAJCQkJCSAgLSBpby10YWcgY2Fubm90IGJlIHVzZWQgeWV0LgorICoKKyAqIAlCRklfSU9JTV9TVFNfTkVYVVNfQUJPUlQJOiBTZWNvbmQgTGV2ZWwgRXJyb3IgUmVjb3ZlcnkgZnJvbSBob3N0CisgKgkJCQkJICBpcyByZXF1aXJlZCBiZWNhdXNlIDIgY29uc2VjdXRpdmUgQUJUUworICoJCQkJCSAgdGltZWRvdXQgYW5kIGhvc3QgbmVlZHMgbG9nb3V0IGFuZAorICoJCQkJCSAgcmUtbG9naW4gd2l0aCB0aGUgdGFyZ2V0CisgKiAJCQkJCSAgLSBpby10YWcgY2Fubm90IGJlIHVzZWQgeWV0LgorICoKKyAqIAlCRklfSU9JTV9TVFNfVU5ERVJSVU4JOiBJTyBjb21wbGV0ZWQgd2l0aCBTQ1NJIHN0YXR1cyBnb29kLAorICoJCQkJCSAgYnV0IHRoZSBkYXRhIHRyYW5mZXJyZWQgaXMgbGVzcyB0aGFuCisgKgkJCQkJICB0aGUgZmNwIGRhdGEgbGVuZ3RoIGluIHRoZSBjb21tYW5kLgorICoJCQkJCSAgZXguIFNDU0kgSU5RVUlSWSB3aGVyZSB0cmFuc2ZlcnJlZAorICoJCQkJCSAgZGF0YSBsZW5ndGggYW5kIHJlc2lkdWUgY291bnQgaW4gRkNQCisgKgkJCQkJICByZXNwb25zZSBhY2NvdW50cyBmb3IgdG90YWwgZmNwLWRsCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX09WRVJSVU4JOiBJTyBjb21wbGV0ZWQgd2l0aCBTQ1NJIHN0YXR1cyBnb29kLAorICoJCQkJCSAgYnV0IHRoZSBkYXRhIHRyYW5zZXJyZWQgaXMgbW9yZSB0aGFuCisgKgkJCQkJICBmY3AgZGF0YSBsZW5ndGggaW4gdGhlIGNvbW1hbmQuIGV4LgorICoJCQkJCSAgVEFQRSBJT3Mgd2hlcmUgYmxvY2tzIGNhbiBvZiB1bmVxdWFsCisgKgkJCQkJICBsZW5ndGhzLgorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGSV9JT0lNX1NUU19SRVNfRlJFRQk6IEZpcm13YXJlIGhhcyBjb21wbGV0ZWQgdXNpbmcgaW8tdGFnCisgKgkJCQkJICBkdXJpbmcgYWJvcnQgcHJvY2VzcworICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGSV9JT0lNX1NUU19QUk9UT19FUlIJOiBGaXJtd2FyZSBkZXRlY3RlZCBhIHByb3RvY29sIGVycm9yLgorICoJCQkJCSAgZXggdGFyZ2V0IHNlbnQgbW9yZSBkYXRhIHRoYW4KKyAqCQkJCQkgIHJlcXVlc3RlZCwgb3IgdGhlcmUgd2FzIGRhdGEgZnJhbWUKKyAqCQkJCQkgIGxvc3MgYW5kIG90aGVyIHJlYXNvbnMKKyAqIAkJCQkJICAtIGlvLXRhZyBjYW5ub3QgYmUgdXNlZCB5ZXQuCisgKgorICogCUJGSV9JT0lNX1NUU19ESUZfRVJSCTogRmlyd21hcmUgZGV0ZWN0ZWQgRElGIGVycm9yLiBleDogRElGCisgKiAJCQkJCSAgQ1JDIGVyciBvciBSZWYgVGFnIGVyciBvciBBcHAgdGFnIGVyci4KKyAqIAkJCQkJICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICoKKyAqIAlCRkFfSU9JTV9TVFNfVFNLX01HVF9BQk9SVAk6IElPIHdhcyBhYm9ydGVkIGJlY2F1c2Ugb2YgVGFzaworICoJCQkJCSAgTWFuYWdlbWVudCBjb21tYW5kIGZyb20gdGhlIGhvc3QKKyAqIAkJCQkJICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICoKKyAqIAlCRklfSU9JTV9TVFNfVVRBRwkJOiBGaXJtd2FyZSBkb2VzIG5vdCBrbm93IGFib3V0IHRoaXMKKyAqCQkJCQkgIGlvX3RhZy4KKyAqIAkJCQkJICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICovCitlbnVtIGJmaV9pb2ltX3N0YXR1cyB7CisJQkZJX0lPSU1fU1RTX09LID0gMCwKKwlCRklfSU9JTV9TVFNfSE9TVF9BQk9SVEVEID0gMSwKKwlCRklfSU9JTV9TVFNfQUJPUlRFRCA9IDIsCisJQkZJX0lPSU1fU1RTX1RJTUVET1VUID0gMywKKwlCRklfSU9JTV9TVFNfUkVTX0ZSRUUgPSA0LAorCUJGSV9JT0lNX1NUU19TUUVSX05FRURFRCA9IDUsCisJQkZJX0lPSU1fU1RTX1BST1RPX0VSUiA9IDYsCisJQkZJX0lPSU1fU1RTX1VUQUcgPSA3LAorCUJGSV9JT0lNX1NUU19QQVRIVE9WID0gOCwKK307CisKKyNkZWZpbmUgQkZJX0lPSU1fU05TTEVOCSgyNTYpCisvKioKKyAqIEkvTyByZXNwb25zZSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9pbV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCSAJICovCisJdTE2ICAgICAgICBpb190YWc7CQkvKiAgY29tcGxldGVkIElPIHRhZwkJICovCisJdTE2ICAgICAgICBiZmFfcnBvcnRfaG5kbDsJLyogIHJlbGVhdGVkIHJwb3J0IGhhbmRsZQkgKi8KKwl1OCAgICAgICAgIGlvX3N0YXR1czsJLyogIElPIGNvbXBsZXRpb24gc3RhdHVzCSAqLworCXU4ICAgICAgICAgcmV1c2VfaW9fdGFnOwkvKiAgSU8gdGFnIGNhbiBiZSByZXVzZWQgICAgICAgICovCisJdTE2CWFib3J0X3RhZzsJLyogIGhvc3QgYWJvcnQgcmVxdWVzdCB0YWcgICAgICAqLworCXU4CQlzY3NpX3N0YXR1czsJLyogIHNjc2kgc3RhdHVzIGZyb20gdGFyZ2V0CSAqLworCXU4CQlzbnNfbGVuOwkvKiAgc2NzaSBzZW5zZSBsZW5ndGgJCSAqLworCXU4CQlyZXNpZF9mbGFnczsJLyogIElPIHJlc2lkdWUgZmxhZ3MJCSAqLworCXU4CQlyc3ZkX2E7CisJdTMyCXJlc2lkdWU7CS8qICBJTyByZXNpZHVhbCBsZW5ndGggaW4gYnl0ZXMgKi8KKwl1MzIJcnN2ZF9iWzNdOworfTsKKworc3RydWN0IGJmaV9pb2ltX2Fib3J0X3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7ICAgICAgICAgIC8qICBDb21tb24gbXNnIGhlYWRlciAgKi8KKwl1MTYgICAgICAgIGlvX3RhZzsgICAgICAgICAvKiAgSS9PIHRhZyAgICAgICAgICAgICovCisJdTE2ICAgICAgICBhYm9ydF90YWc7ICAgICAgLyogIHVuaXF1ZSByZXF1ZXN0IHRhZyAqLworfTsKKworLyoKKyAqIEluaXRpYXRvciBtb2RlIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGludGVyZmFjZSBkZWZpbmVzLgorICovCisKK2VudW0gYmZpX3Rza2ltX2gyaSB7CisJQkZJX1RTS0lNX0gySV9UTV9SRVEgICAgPSAxLCAvKiAgdGFzay1tZ210IGNvbW1hbmQgICAgICAgICAqLworCUJGSV9UU0tJTV9IMklfQUJPUlRfUkVRID0gMiwgLyogIHRhc2stbWdtdCBjb21tYW5kICAgICAgICAgKi8KK307CisKK2VudW0gYmZpX3Rza2ltX2kyaCB7CisJQkZJX1RTS0lNX0kySF9UTV9SU1AgPSBCRkFfSTJITSgxKSwKK307CisKK3N0cnVjdCBiZmlfdHNraW1fcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsgICAgICAgICAgICAgLyogIENvbW1vbiBtc2cgaGVhZGVyICAgICAgICAgICovCisJdTE2ICAgICAgICB0c2tfdGFnOyAgICAgICAgLyogIHRhc2sgbWFuYWdlbWVudCB0YWcgICAgICAgICovCisJdTE2ICAgICAgICBpdG5fZmhkbDsgICAgICAgLyogIGl0biBmaXJtd2FyZSBoYW5kbGUgICAgICAgICovCisJbHVuX3QgICAgICAgICAgIGx1bjsgICAgICAgICAgICAvKiAgTFUgbnVtYmVyICAgICAgICAgICAgICAgICAgKi8KKwl1OCAgICAgICAgIHRtX2ZsYWdzOyAgICAgICAvKiAgc2VlIGZjcF90bV9jbW5kX3QgICAgICAgICAgKi8KKwl1OCAgICAgICAgIHRfc2VjczsgICAgICAgICAvKiAgVGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzICAgKi8KKwl1OCAgICAgICAgIHJzdmRbMl07Cit9OworCitzdHJ1Y3QgYmZpX3Rza2ltX2Fib3J0cmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsgICAgICAgICAgICAgLyogIENvbW1vbiBtc2cgaGVhZGVyICAgICAgICAgICovCisJdTE2ICAgICAgICB0c2tfdGFnOyAgICAgICAgLyogIHRhc2sgbWFuYWdlbWVudCB0YWcgICAgICAgICovCisJdTE2ICAgICAgICByc3ZkOworfTsKKworZW51bSBiZmlfdHNraW1fc3RhdHVzIHsKKwkvKgorCSAqIEZvbGxvd2luZyBhcmUgRkNQLTQgc3BlYyBkZWZpbmVkIHN0YXR1cyBjb2RlcywKKwkgKiAqKkRPIE5PVCBDSEFOR0UgVEhFTSAqKgorCSAqLworCUJGSV9UU0tJTV9TVFNfT0sgICAgICAgPSAwLAorCUJGSV9UU0tJTV9TVFNfTk9UX1NVUFAgPSA0LAorCUJGSV9UU0tJTV9TVFNfRkFJTEVEICAgPSA1LAorCisJLyoqCisJICogRGVmaW5lZCBieSBCRkEKKwkgKi8KKwlCRklfVFNLSU1fU1RTX1RJTUVPVVQgID0gMTAsICAgIC8qICBUTSByZXF1ZXN0IHRpbWVkb3V0ICAgICAqLworCUJGSV9UU0tJTV9TVFNfQUJPUlRFRCAgPSAxMSwgICAgLyogIEFib3J0ZWQgb24gaG9zdCByZXF1ZXN0ICovCit9OworCitzdHJ1Y3QgYmZpX3Rza2ltX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgdHNrX3RhZzsJLyogIHRhc2sgbWdtdCBjbW5kIHRhZwkJICovCisJdTggICAgICAgICB0c2tfc3RhdHVzOwkvKiAgQHJlZiBiZmlfdHNraW1fc3RhdHVzICovCisJdTggICAgICAgICByc3ZkOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0ZDUElNX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mY3hwLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mY3hwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBlOTk1YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZjeHAuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfRkNYUF9IX18KKyNkZWZpbmUgX19CRklfRkNYUF9IX18KKworI2luY2x1ZGUgImJmaS5oIgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfZmN4cF9oMmkgeworCUJGSV9GQ1hQX0gySV9TRU5EX1JFUSA9IDEsCit9OworCitlbnVtIGJmaV9mY3hwX2kyaCB7CisJQkZJX0ZDWFBfSTJIX1NFTkRfUlNQID0gQkZBX0kySE0oMSksCit9OworCisjZGVmaW5lIEJGQV9GQ1hQX01BWF9TR0VTCTIKKworLyoqCisgKiBGQ1hQIHNlbmQgcmVxdWVzdCBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJICAgICovCisJdTE2ICAgICAgICBmY3hwX3RhZzsJLyogIGRyaXZlciByZXF1ZXN0IHRhZwkJICAgICovCisJdTE2ICAgICAgICBtYXhfZnJtc3o7CS8qICBtYXggc2VuZCBmcmFtZSBzaXplCSAgICAqLworCXUxNiAgICAgICAgdmZfaWQ7CQkvKiAgdnNhbiB0YWcgaWYgYXBwbGljYWJsZQkgICAgKi8KKwl1MTYgICAgICAgIHJwb3J0X2Z3X2huZGw7CS8qICBGVyBIYW5kbGUgZm9yIHRoZSByZW1vdGUgcG9ydCAgKi8KKwl1OCAgICAgICAgIGNsYXNzOwkJLyogIEZDIGNsYXNzIHVzZWQgZm9yIHJlcS9yc3AJICAgICovCisJdTggICAgICAgICByc3BfdGltZW91dDsJLyogIHRpbWVvdXQgaW4gc2VjcywgMC1ubyByZXNwb25zZSAqLworCXU4ICAgICAgICAgY3RzOwkJLyogIGNvbnRpbnVlIHNlcXVlbmNlCQkgICAgKi8KKwl1OCAgICAgICAgIGxwX3RhZzsJCS8qICBscG9ydCB0YWcJCQkgICAgKi8KKwlzdHJ1Y3QgZmNoc19zICAgZmNoczsJCS8qICByZXF1ZXN0IEZDIGhlYWRlciBzdHJ1Y3R1cmUgICAgKi8KKwl1MzIgICAgICAgIHJlcV9sZW47CS8qICByZXF1ZXN0IHBheWxvYWQgbGVuZ3RoCSAgICAqLworCXUzMiAgICAgICAgcnNwX21heGxlbjsJLyogIG1heCByZXNwb25zZSBsZW5ndGggZXhwZWN0ZWQgICAqLworCXN0cnVjdCBiZmlfc2dlX3MgICByZXFfc2dlW0JGQV9GQ1hQX01BWF9TR0VTXTsJLyogIHJlcXVlc3QgYnVmICAgICovCisJc3RydWN0IGJmaV9zZ2VfcyAgIHJzcF9zZ2VbQkZBX0ZDWFBfTUFYX1NHRVNdOwkvKiAgcmVzcG9uc2UgYnVmICAgKi8KK307CisKKy8qKgorICogRkNYUCBzZW5kIHJlc3BvbnNlIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkgICAgKi8KKwl1MTYgICAgICAgIGZjeHBfdGFnOwkvKiAgc2VuZCByZXF1ZXN0IHRhZwkJICAgICovCisJdTggICAgICAgICByZXFfc3RhdHVzOwkvKiAgcmVxdWVzdCBzdGF0dXMJCSAgICAqLworCXU4ICAgICAgICAgcnN2ZDsKKwl1MzIgICAgICAgIHJzcF9sZW47CS8qICBhY3R1YWwgcmVzcG9uc2UgbGVuZ3RoCSAgICAqLworCXUzMiAgICAgICAgcmVzaWR1ZV9sZW47CS8qICByZXNpZHVhbCByZXNwb25zZSBsZW5ndGgJICAgICovCisJc3RydWN0IGZjaHNfcyAgIGZjaHM7CQkvKiAgcmVzcG9uc2UgRkMgaGVhZGVyIHN0cnVjdHVyZSAgICovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfRkNYUF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjZlOWMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jLmgKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9JT0NfSF9fCisjZGVmaW5lIF9fQkZJX0lPQ19IX18KKworI2luY2x1ZGUgImJmaS5oIgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9pb2NfaDJpX21zZ3MgeworCUJGSV9JT0NfSDJJX0VOQUJMRV9SRVEgCQk9IDEsCisJQkZJX0lPQ19IMklfRElTQUJMRV9SRVEgCT0gMiwKKwlCRklfSU9DX0gySV9HRVRBVFRSX1JFUSAJPSAzLAorCUJGSV9JT0NfSDJJX0RCR19TWU5DCSAJPSA0LAorCUJGSV9JT0NfSDJJX0RCR19EVU1QCSAJPSA1LAorfTsKKworZW51bSBiZmlfaW9jX2kyaF9tc2dzIHsKKwlCRklfSU9DX0kySF9FTkFCTEVfUkVQTFkJPSBCRkFfSTJITSgxKSwKKwlCRklfSU9DX0kySF9ESVNBQkxFX1JFUExZIAk9IEJGQV9JMkhNKDIpLAorCUJGSV9JT0NfSTJIX0dFVEFUVFJfUkVQTFkgCT0gQkZBX0kySE0oMyksCisJQkZJX0lPQ19JMkhfUkVBRFlfRVZFTlQgCT0gQkZBX0kySE0oNCksCisJQkZJX0lPQ19JMkhfSEJFQVQJCT0gQkZBX0kySE0oNSksCit9OworCisvKioKKyAqIEJGSV9JT0NfSDJJX0dFVEFUVFJfUkVRIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NfZ2V0YXR0cl9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MJbWg7CisJdW5pb24gYmZpX2FkZHJfdQlhdHRyX2FkZHI7Cit9OworCitzdHJ1Y3QgYmZpX2lvY19hdHRyX3MgeworCXd3bl90ICAgICAgICAgICBtZmdfd3duOworCW1hY190CQltZmdfbWFjOworCXUxNglyc3ZkX2E7CisJY2hhciAgICAgICAgICAgIGJyY2Rfc2VyaWFsbnVtW1NUUlNaKEJGQV9NRkdfU0VSSUFMTlVNX1NJWkUpXTsKKwl1OCAgICAgICAgIHBjaWVfZ2VuOworCXU4ICAgICAgICAgcGNpZV9sYW5lc19vcmlnOworCXU4ICAgICAgICAgcGNpZV9sYW5lczsKKwl1OCAgICAgICAgIHJ4X2JiY3JlZGl0OwkvKiAgcmVjZWl2ZSBidWZmZXIgY3JlZGl0cyAqLworCXUzMiAgICAgICAgYWRhcHRlcl9wcm9wOwkvKiAgYWRhcHRlciBwcm9wZXJ0aWVzICAgICAqLworCXUxNiAgICAgICAgbWF4ZnJzaXplOwkvKiAgbWF4IHJlY2VpdmUgZnJhbWUgc2l6ZSAqLworCWNoYXIgICAgICAgICAJYXNpY19yZXY7CisJdTggICAgICAgICByc3ZkX2I7CisJY2hhciAgICAgICAgICAgIGZ3X3ZlcnNpb25bQkZBX1ZFUlNJT05fTEVOXTsKKwljaGFyICAgICAgICAgICAgb3B0cm9tX3ZlcnNpb25bQkZBX1ZFUlNJT05fTEVOXTsKKwlzdHJ1Y3QgYmZhX21mZ192cGRfcwl2cGQ7Cit9OworCisvKioKKyAqIEJGSV9JT0NfSTJIX0dFVEFUVFJfUkVQTFkgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY19nZXRhdHRyX3JlcGx5X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlciAgICAgICAgICAqLworCXU4CQlzdGF0dXM7CS8qICBjZmcgcmVwbHkgc3RhdHVzICAgICAgICAgICAqLworCXU4CQlyc3ZkWzNdOworfTsKKworLyoqCisgKiBGaXJtd2FyZSBtZW1vcnkgcGFnZSBvZmZzZXRzCisgKi8KKyNkZWZpbmUgQkZJX0lPQ19TTUVNX1BHMF9DQgkoMHg0MCkKKyNkZWZpbmUgQkZJX0lPQ19TTUVNX1BHMF9DVAkoMHgxODApCisKKy8qKgorICogRmlybXdhcmUgdHJhY2Ugb2Zmc2V0CisgKi8KKyNkZWZpbmUgQkZJX0lPQ19UUkNfT0ZGCQkoMHg0YjAwKQorI2RlZmluZSBCRklfSU9DX1RSQ19FTlRTCTI1NgorCisjZGVmaW5lIEJGSV9JT0NfRldfU0lHTkFUVVJFCSgweGJmYWRiZmFkKQorI2RlZmluZSBCRklfSU9DX01ENVNVTV9TWgk0CitzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyB7CisJdTMyICAgICAgICBzaWduYXR1cmU7CS8qICBjb25zdGFudCBzaWduYXR1cmUgKi8KKwl1MzIgICAgICAgIHJzdmRfYTsKKwl1MzIgICAgICAgIGV4ZWM7CQkvKiAgZXhlYyB2ZWN0b3IgICAgICAgICovCisJdTMyICAgICAgICBwYXJhbTsJCS8qICBwYXJhbWV0ZXJzICAgICAgICAgKi8KKwl1MzIgICAgICAgIHJzdmRfYls0XTsKKwl1MzIgICAgICAgIG1kNXN1bVtCRklfSU9DX01ENVNVTV9TWl07Cit9OworCisvKioKKyAqICBCRklfSU9DX0kySF9SRUFEWV9FVkVOVCBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jX3JkeV9ldmVudF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkJLyogIGNvbW1vbiBtc2cgaGVhZGVyICovCisJdTggICAgICAgICBpbml0X3N0YXR1czsJLyogIGluaXQgZXZlbnQgc3RhdHVzICovCisJdTggICAgICAgICByc3ZkWzNdOworfTsKKworc3RydWN0IGJmaV9pb2NfaGJlYXRfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUzMgkgICBoYl9jb3VudDsJLyogIGN1cnJlbnQgaGVhcnQgYmVhdCBjb3VudAkqLworfTsKKworLyoqCisgKiBJT0MgaGFyZHdhcmUvZmlybXdhcmUgc3RhdGUKKyAqLworZW51bSBiZmlfaW9jX3N0YXRlIHsKKwlCRklfSU9DX1VOSU5JVCAJID0gMCwJCS8qICBub3QgaW5pdGlhbGl6ZWQgICAgICAgICAgICAgICAgICovCisJQkZJX0lPQ19JTklUSU5HIAkgPSAxLAkvKiAgaC93IGlzIGJlaW5nIGluaXRpYWxpemVkICAgICAgICAqLworCUJGSV9JT0NfSFdJTklUIAkgPSAyLAkJLyogIGgvdyBpcyBpbml0aWFsaXplZCAgICAgICAgICAgICAgKi8KKwlCRklfSU9DX0NGRyAJID0gMywJCS8qICBJT0MgY29uZmlndXJhdGlvbiBpbiBwcm9ncmVzcyAgICovCisJQkZJX0lPQ19PUCAJCSA9IDQsCS8qICBJT0MgaXMgb3BlcmF0aW9uYWwgICAgICAgICAgICAgICovCisJQkZJX0lPQ19ESVNBQkxJTkcgCSA9IDUsCS8qICBJT0MgaXMgYmVpbmcgZGlzYWJsZWQgICAgICAgICAgICovCisJQkZJX0lPQ19ESVNBQkxFRCAJID0gNiwJLyogIElPQyBpcyBkaXNhYmxlZCAgICAgICAgICAgICAgICAgKi8KKwlCRklfSU9DX0NGR19ESVNBQkxFRCA9IDcsCS8qICBJT0MgaXMgYmVpbmcgZGlzYWJsZWQ7dHJhbnNpZW50ICovCisJQkZJX0lPQ19IQkZBSUwgICAgICAgPSA4LAkvKiAgSU9DIGhlYXJ0LWJlYXQgZmFpbHVyZSAgICAgICAgICAqLworCUJGSV9JT0NfTUVNVEVTVCAgICAgID0gOSwJLyogIElPQyBpcyBkb2luZyBtZW10ZXN0ICAgICAgICAgICAgKi8KK307CisKKyNkZWZpbmUgQkZJX0lPQ19FTkRJQU5fU0lHICAweDEyMzQ1Njc4CisKK2VudW0geworCUJGSV9BREFQVEVSX1RZUEVfRkMgICA9IDB4MDEsCQkvKiAgRkMgYWRhcHRlcnMgICAgICAgICAgICovCisJQkZJX0FEQVBURVJfVFlQRV9NSyAgID0gMHgwZjAwMDAsCS8qICBhZGFwdGVyIHR5cGUgbWFzayAgICAgKi8KKwlCRklfQURBUFRFUl9UWVBFX1NIICAgPSAxNiwJICAgICAgICAvKiAgYWRhcHRlciB0eXBlIHNoaWZ0ICAgICovCisJQkZJX0FEQVBURVJfTlBPUlRTX01LID0gMHhmZjAwLAkJLyogIG51bWJlciBvZiBwb3J0cyBtYXNrICAqLworCUJGSV9BREFQVEVSX05QT1JUU19TSCA9IDgsCSAgICAgICAgLyogIG51bWJlciBvZiBwb3J0cyBzaGlmdCAqLworCUJGSV9BREFQVEVSX1NQRUVEX01LICA9IDB4ZmYsCQkvKiAgYWRhcHRlciBzcGVlZCBtYXNrICAgICovCisJQkZJX0FEQVBURVJfU1BFRURfU0ggID0gMCwJICAgICAgICAvKiAgYWRhcHRlciBzcGVlZCBzaGlmdCAgICovCisJQkZJX0FEQVBURVJfUFJPVE8gICAgID0gMHgxMDAwMDAsCS8qICBwcm90b3R5cGUgYWRhcGF0ZXJzICAgKi8KKwlCRklfQURBUFRFUl9UVFYgICAgICAgPSAweDIwMDAwMCwJLyogIFRUViBkZWJ1ZyBjYXBhYmxlICAgICAqLworCUJGSV9BREFQVEVSX1VOU1VQUCAgICA9IDB4NDAwMDAwLAkvKiAgdW5rbm93biBhZGFwdGVyIHR5cGUgICovCit9OworCisjZGVmaW5lIEJGSV9BREFQVEVSX0dFVFAoX19wcm9wLF9fYWRhcF9wcm9wKSAgICAgICAgICAJCVwKKyAgICAoKChfX2FkYXBfcHJvcCkgJiBCRklfQURBUFRFUl8gIyMgX19wcm9wICMjIF9NSykgPj4gICAgICAgICBcCisgICAgIEJGSV9BREFQVEVSXyAjIyBfX3Byb3AgIyMgX1NIKQorI2RlZmluZSBCRklfQURBUFRFUl9TRVRQKF9fcHJvcCwgX192YWwpICAgICAgICAgCQlcCisgICAgKChfX3ZhbCkgPDwgQkZJX0FEQVBURVJfICMjIF9fcHJvcCAjIyBfU0gpCisjZGVmaW5lIEJGSV9BREFQVEVSX0lTX1BST1RPKF9fYWRhcF90eXBlKSAgIAkJCVwKKyAgICAoKF9fYWRhcF90eXBlKSAmIEJGSV9BREFQVEVSX1BST1RPKQorI2RlZmluZSBCRklfQURBUFRFUl9JU19UVFYoX19hZGFwX3R5cGUpICAgICAJCQlcCisgICAgKChfX2FkYXBfdHlwZSkgJiBCRklfQURBUFRFUl9UVFYpCisjZGVmaW5lIEJGSV9BREFQVEVSX0lTX1VOU1VQUChfX2FkYXBfdHlwZSkgIAkJCVwKKyAgICAoKF9fYWRhcF90eXBlKSAmIEJGSV9BREFQVEVSX1VOU1VQUCkKKyNkZWZpbmUgQkZJX0FEQVBURVJfSVNfU1BFQ0lBTChfX2FkYXBfdHlwZSkgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChfX2FkYXBfdHlwZSkgJiAoQkZJX0FEQVBURVJfVFRWIHwgQkZJX0FEQVBURVJfUFJPVE8gfCAgICAgXAorCQkJQkZJX0FEQVBURVJfVU5TVVBQKSkKKworLyoqCisgKiBCRklfSU9DX0gySV9FTkFCTEVfUkVRICYgQkZJX0lPQ19IMklfRElTQUJMRV9SRVEgbWVzc2FnZXMKKyAqLworc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MJbWg7CisJdTgJCQlpb2NfY2xhc3M7CisJdTggICAgICAgICAJcnN2ZFszXTsKK307CisKKy8qKgorICogQkZJX0lPQ19JMkhfRU5BQkxFX1JFUExZICYgQkZJX0lPQ19JMkhfRElTQUJMRV9SRVBMWSBtZXNzYWdlcworICovCitzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcGx5X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlciAgICAgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBlbmFibGUvZGlzYWJsZSBzdGF0dXMgKi8KKwl1OCAgICAgICAgIHJzdmRbM107Cit9OworCisjZGVmaW5lIEJGSV9JT0NfTVNHU1ogICA4CisvKioKKyAqIEgySSBNZXNzYWdlcworICovCit1bmlvbiBiZmlfaW9jX2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgCW1oOworCXN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MgZW5hYmxlX3JlcTsKKwlzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zIGRpc2FibGVfcmVxOworCXN0cnVjdCBiZmlfaW9jX2dldGF0dHJfcmVxX3MgZ2V0YXR0cl9yZXE7CisJdTMyICAgICAgIAkJbWJveG1zZ1tCRklfSU9DX01TR1NaXTsKK307CisKKy8qKgorICogSTJIIE1lc3NhZ2VzCisgKi8KK3VuaW9uIGJmaV9pb2NfaTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgICAgIAltaDsKKwlzdHJ1Y3QgYmZpX2lvY19yZHlfZXZlbnRfcyAJcmR5X2V2ZW50OworCXUzMiAgICAgICAJCW1ib3htc2dbQkZJX0lPQ19NU0dTWl07Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfSU9DX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2NmYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzc2MGRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfaW9jZmMuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0lPQ0ZDX0hfXworI2RlZmluZSBfX0JGSV9JT0NGQ19IX18KKworI2luY2x1ZGUgImJmaS5oIgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2NmYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYm9vdC5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfaW9jZmNfaDJpX21zZ3MgeworCUJGSV9JT0NGQ19IMklfQ0ZHX1JFUSAJCT0gMSwKKwlCRklfSU9DRkNfSDJJX0dFVF9TVEFUU19SRVEgCT0gMiwKKwlCRklfSU9DRkNfSDJJX0NMRUFSX1NUQVRTX1JFUQk9IDMsCisJQkZJX0lPQ0ZDX0gySV9TRVRfSU5UUl9SRVEgCT0gNCwKKwlCRklfSU9DRkNfSDJJX1VQREFURVFfUkVRID0gNSwKK307CisKK2VudW0gYmZpX2lvY2ZjX2kyaF9tc2dzIHsKKwlCRklfSU9DRkNfSTJIX0NGR19SRVBMWQkJPSBCRkFfSTJITSgxKSwKKwlCRklfSU9DRkNfSTJIX0dFVF9TVEFUU19SU1AgCT0gQkZBX0kySE0oMiksCisJQkZJX0lPQ0ZDX0kySF9DTEVBUl9TVEFUU19SU1AJPSBCRkFfSTJITSgzKSwKKwlCRklfSU9DRkNfSTJIX1VQREFURVFfUlNQID0gQkZBX0kySE0oNSksCit9OworCitzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zIHsKKwl1OCAgICAgICAgIG51bV9jcXM7IAkvKiAgTnVtYmVyIG9mIENRcyB0byBiZSB1c2VkICAgICAqLworCXU4ICAgICAgICAgc2Vuc2VfYnVmX2xlbjsJLyogIFNDU0kgc2Vuc2UgbGVuZ3RoICAgICAgICAgICAgKi8KKwl1OCAgICAgICAgIHRydW5rX2VuYWJsZWQ7CS8qICBwb3J0IHRydW5raW5nIGVuYWJsZWQgICAgICAgICovCisJdTggICAgICAgICB0cnVua19wb3J0czsJLyogIHRydW5rIHBvcnRzIGJpdCBtYXAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIGVuZGlhbl9zaWc7CS8qICBlbmRpYW4gc2lnbmF0dXJlIG9mIGhvc3QgICAgICovCisKKwkvKioKKwkgKiBSZXF1ZXN0IGFuZCByZXNwb25zZSBjaXJjdWxhciBxdWV1ZSBiYXNlIGFkZHJlc3Nlcywgc2l6ZSBhbmQKKwkgKiBzaGFkb3cgaW5kZXggcG9pbnRlcnMuCisJICovCisJdW5pb24gYmZpX2FkZHJfdSAgcmVxX2NxX2JhW0JGSV9JT0NfTUFYX0NRU107CisJdW5pb24gYmZpX2FkZHJfdSAgcmVxX3NoYWRvd19jaVtCRklfSU9DX01BWF9DUVNdOworCXUxNiAgICByZXFfY3FfZWxlbXNbQkZJX0lPQ19NQVhfQ1FTXTsKKwl1bmlvbiBiZmlfYWRkcl91ICByc3BfY3FfYmFbQkZJX0lPQ19NQVhfQ1FTXTsKKwl1bmlvbiBiZmlfYWRkcl91ICByc3Bfc2hhZG93X3BpW0JGSV9JT0NfTUFYX0NRU107CisJdTE2ICAgIHJzcF9jcV9lbGVtc1tCRklfSU9DX01BWF9DUVNdOworCisJdW5pb24gYmZpX2FkZHJfdSAgc3RhdHNfYWRkcjsJLyogIERNQS1hYmxlIGFkZHJlc3MgZm9yIHN0YXRzCSAgKi8KKwl1bmlvbiBiZmlfYWRkcl91ICBjZmdyc3BfYWRkcjsJLyogIGNvbmZpZyByZXNwb25zZSBkbWEgYWRkcmVzcyAgKi8KKwl1bmlvbiBiZmlfYWRkcl91ICBpb2ltX3Nuc2Jhc2U7ICAvKiAgSU8gc2Vuc2UgYnVmZmVyIGJhc2UgYWRkcmVzcyAqLworCXN0cnVjdCBiZmFfaW9jZmNfaW50cl9hdHRyX3MgaW50cl9hdHRyOyAvKiAgSU9DIGludGVycnVwdCBhdHRyaWJ1dGVzICovCit9OworCisvKioKKyAqIEJvb3QgdGFyZ2V0IHd3biBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwb3J0LiBUaGlzIGNvbnRhaW5zIGVpdGhlciB0aGUgc3RvcmVkCisgKiBvciBkaXNjb3ZlcmVkIGJvb3QgdGFyZ2V0IHBvcnQgd3ducyBmb3IgdGhlIHBvcnQuCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfYm9vdHd3bnMgeworCXd3bl90CQl3d25bQkZBX0JPT1RfQk9PVExVTl9NQVhdOworCXU4CQlud3duczsKKwl1OAkJcnN2ZFs3XTsKK307CisKK3N0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MgeworCXN0cnVjdCBiZmFfaW9jZmNfZndjZmdfcwlmd2NmZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2ludHJfYXR0cl9zCWludHJfYXR0cjsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2Jvb3R3d25zCWJvb3R3d25zOworfTsKKworLyoqCisgKiBCRklfSU9DRkNfSDJJX0NGR19SRVEgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgICAgICBtaDsKKwl1bmlvbiBiZmlfYWRkcl91ICAgICAgaW9jX2NmZ19kbWFfYWRkcjsKK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0kySF9DRkdfUkVQTFkgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXBseV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICAgICAgICAgKi8KKwl1OCAgICAgICAgIGNmZ19zdWNjZXNzOwkvKiAgY2ZnIHJlcGx5IHN0YXR1cyAgICAgICAgICAgKi8KKwl1OCAgICAgICAgIGxwdV9ibTsJCS8qICBMUFVzIGFzc2lnbmVkIGZvciB0aGlzIElPQyAqLworCXU4ICAgICAgICAgcnN2ZFsyXTsKK307CisKKy8qKgorICogIEJGSV9JT0NGQ19IMklfR0VUX1NUQVRTX1JFUSAmIEJGSV9JT0NGQ19IMklfQ0xFQVJfU1RBVFNfUkVRIG1lc3NhZ2VzCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIG1oOwkJLyogIG1zZyBoZWFkZXIgICAgICAgICAgICAqLworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkgICAgICAqLworfTsKKworLyoqCisgKiBCRklfSU9DRkNfSTJIX0dFVF9TVEFUU19SU1AgJiBCRklfSU9DRkNfSTJIX0NMRUFSX1NUQVRTX1JTUCBtZXNzYWdlcworICovCitzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlciAgICAgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICByZXBseSBzdGF0dXMgICAgICAgICAgKi8KKwl1OCAgICAgICAgIHJzdmRbM107CisJdTMyICAgICAgICBtc2d0YWc7CQkvKiAgbXNndGFnIGZvciByZXBseSAgICAgICovCit9OworCisvKioKKyAqIEJGSV9JT0NGQ19IMklfU0VUX0lOVFJfUkVRIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NmY19zZXRfaW50cl9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIgICAgICovCisJdTgJCWNvYWxlc2NlOwkvKiAgZW5hYmxlIGludHIgY29hbGVzY2luZyovCisJdTggICAgICAgICByc3ZkWzNdOworCXUxNglkZWxheTsJCS8qICBkZWxheSB0aW1lciAwLi4xMTI1dXMgICovCisJdTE2CWxhdGVuY3k7CS8qICBsYXRlbmN5IHRpbWVyIDAuLjIyNXVzICovCit9OworCisvKioKKyAqIEJGSV9JT0NGQ19IMklfVVBEQVRFUV9SRVEgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyICAgICAqLworCXUzMiByZXFxX2JhOwkJCS8qICByZXFxIGJhc2UgYWRkciAgICAgICAgKi8KKwl1MzIgcnNwcV9iYTsJCQkvKiAgcnNwcSBiYXNlIGFkZHIgICAgICAgICovCisJdTMyIHJlcXFfc2NpOwkJCS8qICByZXFxIHNoYWRvdyBjaSAgICAgICAgKi8KKwl1MzIgcnNwcV9zcGk7CQkJLyogIHJzcHEgc2hhZG93IHBpICAgICAgICAqLworfTsKKworLyoqCisgKiBCRklfSU9DRkNfSTJIX1VQREFURVFfUlNQIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NmY191cGRhdGVxX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlciAgICAgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICB1cGRhdGVxICBzdGF0dXMgICAgICAgKi8KKwl1OCAgICAgICAgIHJzdmRbM107Cit9OworCisvKioKKyAqIEgySSBNZXNzYWdlcworICovCit1bmlvbiBiZmlfaW9jZmNfaDJpX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAJCW1oOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcV9zIAljZmdfcmVxOworCXN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3Mgc3RhdHNfZ2V0OworCXN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3Mgc3RhdHNfY2xyOworCXN0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yZXFfcyB1cGRhdGVxX3JlcTsKKwl1MzIgICAgICAgCQkJbWJveG1zZ1tCRklfSU9DX01TR1NaXTsKK307CisKKy8qKgorICogSTJIIE1lc3NhZ2VzCisgKi8KK3VuaW9uIGJmaV9pb2NmY19pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgCQltaDsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXBseV9zIAkJY2ZnX3JlcGx5OworCXN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcnNwX3Mgc3RhdHNfZ2V0X3JzcDsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JzcF9zIHN0YXRzX2Nscl9yc3A7CisJc3RydWN0IGJmaV9pb2NmY191cGRhdGVxX3JzcF9zIHVwZGF0ZXFfcnNwOworCXUzMiAgICAgICAJCQltYm94bXNnW0JGSV9JT0NfTVNHU1pdOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0lPQ0ZDX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9scG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfbHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTAxMDYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfbHBvcnQuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfTFBPUlRfSF9fCisjZGVmaW5lIF9fQkZJX0xQT1JUX0hfXworCisjaW5jbHVkZSA8YmZpL2JmaS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfbHBvcnRfaDJpX21zZ3MgeworCUJGSV9MUE9SVF9IMklfQ1JFQVRFX1JFUSA9IDEsCisJQkZJX0xQT1JUX0gySV9ERUxFVEVfUkVRID0gMiwKK307CisKK2VudW0gYmZpX2xwb3J0X2kyaF9tc2dzIHsKKwlCRklfTFBPUlRfSTJIX0NSRUFURV9SU1AgPSBCRkFfSTJITSgxKSwKKwlCRklfTFBPUlRfSTJIX0RFTEVURV9SU1AgPSBCRkFfSTJITSgyKSwKKwlCRklfTFBPUlRfSTJIX09OTElORQkgID0gQkZBX0kySE0oMyksCisJQkZJX0xQT1JUX0kySF9PRkZMSU5FCSAgPSBCRkFfSTJITSg0KSwKK307CisKKyNkZWZpbmUgQkZJX0xQT1JUX01BWF9TWU5OQU1FCTY0CisKK2VudW0gYmZpX2xwb3J0X3JvbGVfZSB7CisJQkZJX0xQT1JUX1JPTEVfRkNQSU0JPSAxLAorCUJGSV9MUE9SVF9ST0xFX0ZDUFRNCT0gMiwKKwlCRklfTFBPUlRfUk9MRV9JUEZDCT0gNCwKK307CisKK3N0cnVjdCBiZmlfbHBvcnRfY3JlYXRlX3JlcV9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNglmYWJyaWNfZndoZGw7CS8qICBwYXJlbnQgZmFicmljIGluc3RhbmNlCSovCisJdTgJCXJvbGVzOwkJLyogIGxwb3J0IEZDLTQgcm9sZXMJCSovCisJdTgJCXJzdmQ7CisJd3duX3QJCXB3d247CQkvKiAgcG9ydCBuYW1lCQkJKi8KKwl3d25fdAkJbnd3bjsJCS8qICBub2RlIG5hbWUJCQkqLworCXU4CQlzeW1uYW1lW0JGSV9MUE9SVF9NQVhfU1lOTkFNRV07Cit9OworCitzdHJ1Y3QgYmZpX2xwb3J0X2NyZWF0ZV9yc3BfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBscG9ydCBjcmVhdGlvbiBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmRbM107Cit9OworCitzdHJ1Y3QgYmZpX2xwb3J0X2RlbGV0ZV9yZXFfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGZpcm13YXJlIGxwb3J0IGhhbmRsZQkqLworCXUxNiAgICAgICAgcnN2ZDsKK307CisKK3N0cnVjdCBiZmlfbHBvcnRfZGVsZXRlX3JzcF9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgbHBvcnQgaGFuZGxlCQkqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGxwb3J0IGRlbGV0aW9uIHN0YXR1cwkqLworCXU4ICAgICAgICAgcnN2ZDsKK307CisKK3VuaW9uIGJmaV9scG9ydF9oMmlfbXNnX3UgeworCWJmaV9tc2dfdAkJKm1zZzsKKwlzdHJ1Y3QgYmZpX2xwb3J0X2NyZWF0ZV9yZXFfcwkqY3JlYXRlX3JlcTsKKwlzdHJ1Y3QgYmZpX2xwb3J0X2RlbGV0ZV9yZXFfcwkqZGVsZXRlX3JlcTsKK307CisKK3VuaW9uIGJmaV9scG9ydF9pMmhfbXNnX3UgeworCWJmaV9tc2dfdAkJKm1zZzsKKwlzdHJ1Y3QgYmZpX2xwb3J0X2NyZWF0ZV9yc3BfcwkqY3JlYXRlX3JzcDsKKwlzdHJ1Y3QgYmZpX2xwb3J0X2RlbGV0ZV9yc3BfcwkqZGVsZXRlX3JzcDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9MUE9SVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfbHBzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9scHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTRiMGUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfbHBzLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0xQU19IX18KKyNkZWZpbmUgX19CRklfTFBTX0hfXworCisjaW5jbHVkZSA8YmZpL2JmaS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfbHBzX2gyaV9tc2dzIHsKKwlCRklfTFBTX0gySV9MT0dJTl9SRVEJPSAxLAorCUJGSV9MUFNfSDJJX0xPR09VVF9SRVEJPSAyLAorfTsKKworZW51bSBiZmlfbHBzX2kyaF9tc2dzIHsKKwlCRklfTFBTX0gySV9MT0dJTl9SU1AJPSBCRkFfSTJITSgxKSwKKwlCRklfTFBTX0gySV9MT0dPVVRfUlNQCT0gQkZBX0kySE0oMiksCit9OworCitzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXU4CQlscF90YWc7CisJdTgJCWFscGE7CisJdTE2CXBkdV9zaXplOworCXd3bl90CQlwd3duOworCXd3bl90CQlud3duOworCXU4CQlmZGlzYzsKKwl1OAkJYXV0aF9lbjsKKwl1OAkJcnN2ZFsyXTsKK307CisKK3N0cnVjdCBiZmlfbHBzX2xvZ2luX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTgJCWxwX3RhZzsKKwl1OAkJc3RhdHVzOworCXU4CQlsc3JqdF9yc247CisJdTgJCWxzcmp0X2V4cGw7CisJd3duX3QJCXBvcnRfbmFtZTsKKwl3d25fdAkJbm9kZV9uYW1lOworCXUxNgliYl9jcmVkaXQ7CisJdTgJCWZfcG9ydDsKKwl1OAkJbnBpdl9lbjsKKwl1MzIJbHBfcGlkIDogMjQ7CisJdTMyCWF1dGhfcmVxIDogODsKKwltYWNfdAkJbHBfbWFjOworCW1hY190CQlmY2ZfbWFjOworCXU4CQlleHRfc3RhdHVzOworCXU4ICAJYnJjZF9zd2l0Y2g7LyogIGF0dGFjaGVkIHBlZXIgaXMgYnJjZCBzd2l0Y2gJKi8KK307CisKK3N0cnVjdCBiZmlfbHBzX2xvZ291dF9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXU4CQlscF90YWc7CisJdTgJCXJzdmRbM107CisJd3duX3QJCXBvcnRfbmFtZTsKK307CisKK3N0cnVjdCBiZmlfbHBzX2xvZ291dF9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXU4CQlscF90YWc7CisJdTgJCXN0YXR1czsKKwl1OAkJcnN2ZFsyXTsKK307CisKK3VuaW9uIGJmaV9scHNfaDJpX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcwkJKm1zZzsKKwlzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yZXFfcwkqbG9naW5fcmVxOworCXN0cnVjdCBiZmlfbHBzX2xvZ291dF9yZXFfcwkqbG9nb3V0X3JlcTsKK307CisKK3VuaW9uIGJmaV9scHNfaTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21zZ19zCQkqbXNnOworCXN0cnVjdCBiZmlfbHBzX2xvZ2luX3JzcF9zCSpsb2dpbl9yc3A7CisJc3RydWN0IGJmaV9scHNfbG9nb3V0X3JzcF9zCSpsb2dvdXRfcnNwOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0xQU19IX18gKi8KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9wb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjM2JlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3BvcnQuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGSV9QT1JUX0hfXworI2RlZmluZSBfX0JGSV9QT1JUX0hfXworCisjaW5jbHVkZSA8YmZpL2JmaS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX3BvcnRfaDJpIHsKKwlCRklfUE9SVF9IMklfRU5BQkxFX1JFUQkJPSAoMSksCisJQkZJX1BPUlRfSDJJX0RJU0FCTEVfUkVRCT0gKDIpLAorCUJGSV9QT1JUX0gySV9HRVRfU1RBVFNfUkVRCT0gKDMpLAorCUJGSV9QT1JUX0gySV9DTEVBUl9TVEFUU19SRVEJPSAoNCksCit9OworCitlbnVtIGJmaV9wb3J0X2kyaCB7CisJQkZJX1BPUlRfSTJIX0VOQUJMRV9SU1AJCT0gQkZBX0kySE0oMSksCisJQkZJX1BPUlRfSTJIX0RJU0FCTEVfUlNQCT0gQkZBX0kySE0oMiksCisJQkZJX1BPUlRfSTJIX0dFVF9TVEFUU19SU1AJPSBCRkFfSTJITSgzKSwKKwlCRklfUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQCT0gQkZBX0kySE0oNCksCit9OworCisvKioKKyAqIEdlbmVyaWMgUkVRIHR5cGUKKyAqLworc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBtc2cgaGVhZGVyCQkJICAgICovCisJdTMyICAgICAgICBtc2d0YWc7CQkvKiAgbXNndGFnIGZvciByZXBseQkJICAgICovCisJdTMyCXJzdmQ7Cit9OworCisvKioKKyAqIEdlbmVyaWMgUlNQIHR5cGUKKyAqLworc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICAgICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgcG9ydCBlbmFibGUgc3RhdHVzCQkgICAgKi8KKwl1OCAgICAgICAgIHJzdmRbM107CisJdTMyICAgICAgICBtc2d0YWc7CQkvKiAgbXNndGFnIGZvciByZXBseQkJICAgICovCit9OworCisvKioKKyAqIEB0b2RvCisgKiBCRklfUE9SVF9IMklfRU5BQkxFX1JFUQorICovCisKKy8qKgorICogQHRvZG8KKyAqIEJGSV9QT1JUX0kySF9FTkFCTEVfUlNQCisgKi8KKworLyoqCisgKiBCRklfUE9SVF9IMklfRElTQUJMRV9SRVEKKyAqLworCisvKioKKyAqIEJGSV9QT1JUX0kySF9ESVNBQkxFX1JTUAorICovCisKKy8qKgorICogQkZJX1BPUlRfSDJJX0dFVF9TVEFUU19SRVEKKyAqLworc3RydWN0IGJmaV9wb3J0X2dldF9zdGF0c19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgICAgKi8KKwl1bmlvbiBiZmlfYWRkcl91ICAgZG1hX2FkZHI7Cit9OworCisvKioKKyAqIEJGSV9QT1JUX0kySF9HRVRfU1RBVFNfUlNQCisgKi8KKworLyoqCisgKiBCRklfUE9SVF9IMklfQ0xFQVJfU1RBVFNfUkVRCisgKi8KKworLyoqCisgKiBCRklfUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQCisgKi8KKwordW5pb24gYmZpX3BvcnRfaDJpX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcwkJbWg7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MJZW5hYmxlX3JlcTsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcwlkaXNhYmxlX3JlcTsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2V0X3N0YXRzX3JlcV9zCWdldHN0YXRzX3JlcTsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcwljbGVhcnN0YXRzX3JlcTsKK307CisKK3VuaW9uIGJmaV9wb3J0X2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgICAgICAgICAJbWg7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcnNwX3MJZW5hYmxlX3JzcDsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yc3BfcwlkaXNhYmxlX3JzcDsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yc3BfcwlnZXRzdGF0c19yc3A7CisJc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcnNwX3MJY2xlYXJzdGF0c19yc3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfUE9SVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3Bwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2ZDI0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3Bwb3J0LmgKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRklfUFBPUlRfSF9fCisjZGVmaW5lIF9fQkZJX1BQT1JUX0hfXworCisjaW5jbHVkZSA8YmZpL2JmaS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX3Bwb3J0X2gyaSB7CisJQkZJX1BQT1JUX0gySV9FTkFCTEVfUkVRCQk9ICgxKSwKKwlCRklfUFBPUlRfSDJJX0RJU0FCTEVfUkVRCQk9ICgyKSwKKwlCRklfUFBPUlRfSDJJX0dFVF9TVEFUU19SRVEJCT0gKDMpLAorCUJGSV9QUE9SVF9IMklfQ0xFQVJfU1RBVFNfUkVRCT0gKDQpLAorCUJGSV9QUE9SVF9IMklfU0VUX1NWQ19QQVJBTVNfUkVRCT0gKDUpLAorCUJGSV9QUE9SVF9IMklfRU5BQkxFX1JYX1ZGX1RBR19SRVEJPSAoNiksCisJQkZJX1BQT1JUX0gySV9FTkFCTEVfVFhfVkZfVEFHX1JFUQk9ICg3KSwKKwlCRklfUFBPUlRfSDJJX0dFVF9RT1NfU1RBVFNfUkVRCQk9ICg4KSwKKwlCRklfUFBPUlRfSDJJX0NMRUFSX1FPU19TVEFUU19SRVEJPSAoOSksCit9OworCitlbnVtIGJmaV9wcG9ydF9pMmggeworCUJGSV9QUE9SVF9JMkhfRU5BQkxFX1JTUAkJPSBCRkFfSTJITSgxKSwKKwlCRklfUFBPUlRfSTJIX0RJU0FCTEVfUlNQCQk9IEJGQV9JMkhNKDIpLAorCUJGSV9QUE9SVF9JMkhfR0VUX1NUQVRTX1JTUAkJPSBCRkFfSTJITSgzKSwKKwlCRklfUFBPUlRfSTJIX0NMRUFSX1NUQVRTX1JTUAk9IEJGQV9JMkhNKDQpLAorCUJGSV9QUE9SVF9JMkhfU0VUX1NWQ19QQVJBTVNfUlNQCT0gQkZBX0kySE0oNSksCisJQkZJX1BQT1JUX0kySF9FTkFCTEVfUlhfVkZfVEFHX1JTUAk9IEJGQV9JMkhNKDYpLAorCUJGSV9QUE9SVF9JMkhfRU5BQkxFX1RYX1ZGX1RBR19SU1AJPSBCRkFfSTJITSg3KSwKKwlCRklfUFBPUlRfSTJIX0VWRU5UCQkJPSBCRkFfSTJITSg4KSwKKwlCRklfUFBPUlRfSTJIX0dFVF9RT1NfU1RBVFNfUlNQCQk9IEJGQV9JMkhNKDkpLAorCUJGSV9QUE9SVF9JMkhfQ0xFQVJfUU9TX1NUQVRTX1JTUAk9IEJGQV9JMkhNKDEwKSwKK307CisKKy8qKgorICogR2VuZXJpYyBSRVEgdHlwZQorICovCitzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBtc2cgaGVhZGVyCQkJICAgICovCisJdTMyICAgICAgICBtc2d0YWc7CQkvKiAgbXNndGFnIGZvciByZXBseQkJICAgICovCit9OworCisvKioKKyAqIEdlbmVyaWMgUlNQIHR5cGUKKyAqLworc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIHBvcnQgZW5hYmxlIHN0YXR1cwkJICAgICovCisJdTggICAgICAgICByc3ZkWzNdOworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkJCSAgICAqLworfTsKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0VOQUJMRV9SRVEKKyAqLworc3RydWN0IGJmaV9wcG9ydF9lbmFibGVfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBtc2cgaGVhZGVyCQkJICAgICovCisJdTMyICAgICAgICByc3ZkMTsKKwl3d25fdCAgICAgICAgICAgbnd3bjsJCS8qICBub2RlIHd3biBvZiBwaHlzaWNhbCBwb3J0CSAgICAqLworCXd3bl90ICAgICAgICAgICBwd3duOwkJLyogIHBvcnQgd3duIG9mIHBoeXNpY2FsIHBvcnQJICAgICovCisJc3RydWN0IGJmYV9wcG9ydF9jZmdfcyBwb3J0X2NmZzsJLyogIHBvcnQgY29uZmlndXJhdGlvbgkgICAgKi8KKwl1bmlvbiBiZmlfYWRkcl91ICBzdGF0c19kbWFfYWRkcjsJLyogIERNQSBhZGRyZXNzIGZvciBzdGF0cyAgKi8KKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5CQkgICAgKi8KKwl1MzIgICAgICAgIHJzdmQyOworfTsKKworLyoqCisgKiBCRklfUFBPUlRfSTJIX0VOQUJMRV9SU1AKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfZW5hYmxlX3JzcF90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfRElTQUJMRV9SRVEKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfZGlzYWJsZV9yZXFfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MKKworLyoqCisgKiBCRklfUFBPUlRfSTJIX0RJU0FCTEVfUlNQCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2Rpc2FibGVfcnNwX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9HRVRfU1RBVFNfUkVRCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2dldF9zdGF0c19yZXFfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MKKworLyoqCisgKiBCRklfUFBPUlRfSTJIX0dFVF9TVEFUU19SU1AKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfZ2V0X3N0YXRzX3JzcF90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfQ0xFQVJfU1RBVFNfUkVRCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2NsZWFyX3N0YXRzX3JlcV90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcworCisvKioKKyAqIEJGSV9QUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2NsZWFyX3N0YXRzX3JzcF90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfR0VUX1FPU19TVEFUU19SRVEKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfZ2V0X3Fvc19zdGF0c19yZXFfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0dFVF9RT1NfU1RBVFNfUlNQCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2dldF9xb3Nfc3RhdHNfcnNwX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9DTEVBUl9RT1NfU1RBVFNfUkVRCisgKi8KKyNkZWZpbmUgYmZpX3Bwb3J0X2NsZWFyX3Fvc19zdGF0c19yZXFfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0NMRUFSX1FPU19TVEFUU19SU1AKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfY2xlYXJfcW9zX3N0YXRzX3JzcF90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfU0VUX1NWQ19QQVJBTVNfUkVRCisgKi8KK3N0cnVjdCBiZmlfcHBvcnRfc2V0X3N2Y19wYXJhbXNfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBtc2cgaGVhZGVyICovCisJdTE2ICAgICAgICB0eF9iYmNyZWRpdDsJLyogIFR4IGNyZWRpdHMgKi8KKwl1MTYgICAgICAgIHJzdmQ7Cit9OworCisvKioKKyAqIEJGSV9QUE9SVF9JMkhfU0VUX1NWQ19QQVJBTVNfUlNQCisgKi8KKworLyoqCisgKiBCRklfUFBPUlRfSTJIX0VWRU5UCisgKi8KK3N0cnVjdCBiZmlfcHBvcnRfZXZlbnRfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgCW1oOwkvKiAgY29tbW9uIG1zZyBoZWFkZXIgKi8KKwlzdHJ1Y3QgYmZhX3Bwb3J0X2xpbmtfcwlsaW5rX3N0YXRlOworfTsKKwordW5pb24gYmZpX3Bwb3J0X2gyaV9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MJCQkqbWhkcjsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2VuYWJsZV9yZXFfcwkJKnBlbmFibGU7CisJc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCQkqcGRpc2FibGU7CisJc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCQkqcGdldHN0YXRzOworCXN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcwkJKnBjbGVhcnN0YXRzOworCXN0cnVjdCBiZmlfcHBvcnRfc2V0X3N2Y19wYXJhbXNfcmVxX3MJKnBzZXRzdmNwYXJhbXM7CisJc3RydWN0IGJmaV9wcG9ydF9nZXRfcW9zX3N0YXRzX3JlcV9zCSpwZ2V0cW9zc3RhdHM7CisJc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCQkqcGNsZWFycW9zc3RhdHM7Cit9OworCit1bmlvbiBiZmlfcHBvcnRfaTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21zZ19zCQkJKm1zZzsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MJCSplbmFibGVfcnNwOworCXN0cnVjdCBiZmlfcHBvcnRfZGlzYWJsZV9yc3BfcwkJKmRpc2FibGVfcnNwOworCXN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcwkJKmdldHN0YXRzX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2NsZWFyX3N0YXRzX3JzcF9zCSpjbGVhcnN0YXRzX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X3NldF9zdmNfcGFyYW1zX3JzcF9zCSpzZXRzdmNwYXJhc21fcnNwOworCXN0cnVjdCBiZmlfcHBvcnRfZ2V0X3Fvc19zdGF0c19yc3BfcwkqZ2V0cW9zc3RhdHNfcnNwOworCXN0cnVjdCBiZmlfcHBvcnRfY2xlYXJfcW9zX3N0YXRzX3JzcF9zCSpjbGVhcnFvc3N0YXRzX3JzcDsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2V2ZW50X3MJCSpldmVudDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9QUE9SVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3Jwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyMGY1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3Jwb3J0LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9SUE9SVF9IX18KKyNkZWZpbmUgX19CRklfUlBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9ycG9ydF9oMmlfbXNncyB7CisJQkZJX1JQT1JUX0gySV9DUkVBVEVfUkVRID0gMSwKKwlCRklfUlBPUlRfSDJJX0RFTEVURV9SRVEgPSAyLAorCUJGSV9SUE9SVF9IMklfU0VUX1NQRUVEX1JFUSAgPSAzLAorfTsKKworZW51bSBiZmlfcnBvcnRfaTJoX21zZ3MgeworCUJGSV9SUE9SVF9JMkhfQ1JFQVRFX1JTUCA9IEJGQV9JMkhNKDEpLAorCUJGSV9SUE9SVF9JMkhfREVMRVRFX1JTUCA9IEJGQV9JMkhNKDIpLAorCUJGSV9SUE9SVF9JMkhfUU9TX1NDTiAgICA9IEJGQV9JMkhNKDMpLAorfTsKKworc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IHJwb3J0IGhhbmRsZQkJKi8KKwl1MTYgICAgICAgIG1heF9mcm1zejsJLyogIG1heCByY3YgcGR1IHNpemUJCSovCisJdTMyICAgICAgICBwaWQgICAgICAgOiAyNCwJLyogIHJlbW90ZSBwb3J0IElECQkqLworCQkJbHBfdGFnICAgIDogODsJLyogIGxvY2FsIHBvcnQgdGFnCQkqLworCXUzMiAgICAgICAgbG9jYWxfcGlkIDogMjQsCS8qICBsb2NhbCBwb3J0IElECQkqLworCQkJY2lzYyAgICAgIDogODsKKwl1OCAgICAgICAgIGZjX2NsYXNzOwkvKiAgc3VwcG9ydGVkIEZDIGNsYXNzZXMJKi8KKwl1OCAgICAgICAgIHZmX2VuOwkJLyogIHZpcnR1YWwgZmFicmljIGVuYWJsZQkqLworCXUxNiAgICAgICAgdmZfaWQ7CQkvKiAgdmlydHVhbCBmYWJyaWMgSUQJCSovCit9OworCitzdHJ1Y3QgYmZpX3Jwb3J0X2NyZWF0ZV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIHJwb3J0IGNyZWF0aW9uIHN0YXR1cwkqLworCXU4ICAgICAgICAgcnN2ZFszXTsKKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IHJwb3J0IGhhbmRsZQkJKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGZpcm13YXJlIHJwb3J0IGhhbmRsZQkqLworCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBxb3NfYXR0cjsgIC8qIFFvUyBBdHRyaWJ1dGVzICovCit9OworCitzdHJ1Y3QgYmZhX3Jwb3J0X3NwZWVkX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmaXJtd2FyZSBycG9ydCBoYW5kbGUJKi8KKwl1OAkJc3BlZWQ7CQkvKiEgcnBvcnQncyBzcGVlZCB2aWEgUlBTQyAgKi8KKwl1OAkJcnN2ZDsKK307CisKK3N0cnVjdCBiZmlfcnBvcnRfZGVsZXRlX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmaXJtd2FyZSBycG9ydCBoYW5kbGUJKi8KKwl1MTYgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX3Jwb3J0X2RlbGV0ZV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgcnBvcnQgaGFuZGxlCQkqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIHJwb3J0IGRlbGV0aW9uIHN0YXR1cwkqLworCXU4ICAgICAgICAgcnN2ZDsKK307CisKK3N0cnVjdCBiZmlfcnBvcnRfcW9zX3Njbl9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBycG9ydCBoYW5kbGUJCSovCisJdTE2ICAgICAgICByc3ZkOworCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBvbGRfcW9zX2F0dHI7ICAvKiBPbGQgUW9TIEF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgbmV3X3Fvc19hdHRyOyAgLyogTmV3IFFvUyBBdHRyaWJ1dGVzICovCit9OworCit1bmlvbiBiZmlfcnBvcnRfaDJpX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21zZ19zIAkJKm1zZzsKKwlzdHJ1Y3QgYmZpX3Jwb3J0X2NyZWF0ZV9yZXFfcwkqY3JlYXRlX3JlcTsKKwlzdHJ1Y3QgYmZpX3Jwb3J0X2RlbGV0ZV9yZXFfcwkqZGVsZXRlX3JlcTsKKwlzdHJ1Y3QgYmZpX3Jwb3J0X3NwZWVkX3JlcV9zCSpzcGVlZF9yZXE7Cit9OworCit1bmlvbiBiZmlfcnBvcnRfaTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21zZ19zIAkJKm1zZzsKKwlzdHJ1Y3QgYmZpX3Jwb3J0X2NyZWF0ZV9yc3BfcwkqY3JlYXRlX3JzcDsKKwlzdHJ1Y3QgYmZpX3Jwb3J0X2RlbGV0ZV9yc3BfcwkqZGVsZXRlX3JzcDsKKwlzdHJ1Y3QgYmZpX3Jwb3J0X3Fvc19zY25fcwkqcW9zX3Njbl9ldnQ7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfUlBPUlRfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3VmLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV91Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMjhhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV91Zi5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9VRl9IX18KKyNkZWZpbmUgX19CRklfVUZfSF9fCisKKyNpbmNsdWRlICJiZmkuaCIKKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX3VmX2gyaSB7CisJQkZJX1VGX0gySV9CVUZfUE9TVCA9IDEsCit9OworCitlbnVtIGJmaV91Zl9pMmggeworCUJGSV9VRl9JMkhfRlJNX1JDVkQgPSBCRkFfSTJITSgxKSwKK307CisKKyNkZWZpbmUgQkZBX1VGX01BWF9TR0VTCTIKKworc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBidWZfdGFnOwkvKiAgYnVmZmVyIHRhZwkJCSovCisJdTE2ICAgICAgICBidWZfbGVuOwkvKiAgdG90YWwgYnVmZmVyIGxlbmd0aAkqLworCXN0cnVjdCBiZmlfc2dlX3MgICBzZ2VbQkZBX1VGX01BWF9TR0VTXTsgLyogIGJ1ZmZlciBETUEgU0dFcwkqLworfTsKKworc3RydWN0IGJmaV91Zl9mcm1fcmN2ZF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBidWZfdGFnOwkvKiAgYnVmZmVyIHRhZwkJCSovCisJdTE2ICAgICAgICByc3ZkOworCXUxNiAgICAgICAgZnJtX2xlbjsJLyogIHJlY2VpdmVkIGZyYW1lIGxlbmd0aCAJKi8KKwl1MTYgICAgICAgIHhmcl9sZW47CS8qICB0cmFuZmVycmVkIGxlbmd0aAkJKi8KK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9VRl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvYmZhX2NuYV90cmNtb2QuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvYmZhX2NuYV90cmNtb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2JhNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9iZmFfY25hX3RyY21vZC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2NuYV90cmNtb2QuaCBDTkEgdHJhY2UgbW9kdWxlcworICovCisKKyNpZm5kZWYgX19CRkFfQ05BX1RSQ01PRF9IX18KKyNkZWZpbmUgX19CRkFfQ05BX1RSQ01PRF9IX18KKworI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKworLyoKKyAqICEhISBPbmx5IGFwcGVuZCB0byB0aGUgZW51bXMgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGFueSB2ZXJzaW9uaW5nCisgKiAhISEgbmVlZGVkIGJldHdlZW4gdHJhY2UgdXRpbGl0eSBhbmQgZHJpdmVyIHZlcnNpb24KKyAqLworZW51bSB7CisJQkZBX1RSQ19DTkFfQ0VFCQk9IDEsCisJQkZBX1RSQ19DTkFfUE9SVAk9IDIsCit9OworCisjZW5kaWYgLyogX19CRkFfQ05BX1RSQ01PRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvY2VlL2JmYV9jZWUuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvY2VlL2JmYV9jZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2YyOTdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9jZWUvYmZhX2NlZS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9DRUVfSF9fCisjZGVmaW5lIF9fQkZBX0NFRV9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfY2VlLmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisKK3R5cGVkZWYgdm9pZCAoKmJmYV9jZWVfZ2V0X2F0dHJfY2Jmbl90KSAodm9pZCAqZGV2LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9jZWVfZ2V0X3N0YXRzX2NiZm5fdCkgKHZvaWQgKmRldiwgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfY2VlX3Jlc2V0X3N0YXRzX2NiZm5fdCkgKHZvaWQgKmRldiwgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfY2VlX2hiZmFpbF9jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOworCitzdHJ1Y3QgYmZhX2NlZV9jYmZuX3MgeworCWJmYV9jZWVfZ2V0X2F0dHJfY2Jmbl90ICAgIGdldF9hdHRyX2NiZm47CisJdm9pZCAqZ2V0X2F0dHJfY2Jhcmc7CisJYmZhX2NlZV9nZXRfc3RhdHNfY2Jmbl90ICAgZ2V0X3N0YXRzX2NiZm47CisJdm9pZCAqZ2V0X3N0YXRzX2NiYXJnOworCWJmYV9jZWVfcmVzZXRfc3RhdHNfY2Jmbl90IHJlc2V0X3N0YXRzX2NiZm47CisJdm9pZCAqcmVzZXRfc3RhdHNfY2Jhcmc7Cit9OworCitzdHJ1Y3QgYmZhX2NlZV9zIHsKKwl2b2lkICpkZXY7CisJYmZhX2Jvb2xlYW5fdCBnZXRfYXR0cl9wZW5kaW5nOworCWJmYV9ib29sZWFuX3QgZ2V0X3N0YXRzX3BlbmRpbmc7CisJYmZhX2Jvb2xlYW5fdCByZXNldF9zdGF0c19wZW5kaW5nOworCWJmYV9zdGF0dXNfdCBnZXRfYXR0cl9zdGF0dXM7CisJYmZhX3N0YXR1c190IGdldF9zdGF0c19zdGF0dXM7CisJYmZhX3N0YXR1c190IHJlc2V0X3N0YXRzX3N0YXR1czsKKwlzdHJ1Y3QgYmZhX2NlZV9jYmZuX3MgY2JmbjsKKwlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgaGJmYWlsOworCXN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2Q7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZDsKKwlzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgKmF0dHI7CisJc3RydWN0IGJmYV9jZWVfc3RhdHNfcyAqc3RhdHM7CisJc3RydWN0IGJmYV9kbWFfcyBhdHRyX2RtYTsKKwlzdHJ1Y3QgYmZhX2RtYV9zIHN0YXRzX2RtYTsKKwlzdHJ1Y3QgYmZhX2lvY19zICppb2M7CisJc3RydWN0IGJmYV9tYm94X2NtZF9zIGdldF9jZmdfbWI7CisJc3RydWN0IGJmYV9tYm94X2NtZF9zIGdldF9zdGF0c19tYjsKKwlzdHJ1Y3QgYmZhX21ib3hfY21kX3MgcmVzZXRfc3RhdHNfbWI7Cit9OworCit1MzIgYmZhX2NlZV9tZW1pbmZvKHZvaWQpOwordm9pZCBiZmFfY2VlX21lbV9jbGFpbShzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIHU4ICpkbWFfa3ZhLAorCQkJIHU2NCBkbWFfcGEpOwordm9pZCBiZmFfY2VlX2F0dGFjaChzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGV2LAorCQkJc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwKKwkJCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpOwordm9pZCBiZmFfY2VlX2RldGFjaChzdHJ1Y3QgYmZhX2NlZV9zICpjZWUpOworYmZhX3N0YXR1c190IGJmYV9jZWVfZ2V0X2F0dHIoc3RydWN0IGJmYV9jZWVfcyAqY2VlLAorCQkJIHN0cnVjdCBiZmFfY2VlX2F0dHJfcyAqYXR0ciwKKwkJCWJmYV9jZWVfZ2V0X2F0dHJfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCBiZmFfY2VlX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsCisJCQlzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zICpzdGF0cywKKwkJCWJmYV9jZWVfZ2V0X3N0YXRzX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgYmZhX2NlZV9yZXNldF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsCisJCQliZmFfY2VlX3Jlc2V0X3N0YXRzX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZyk7CisjZW5kaWYgLyogX19CRkFfQ0VFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wb3J0L2JmYV9wb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BvcnQvYmZhX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2JmMTdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wb3J0L2JmYV9wb3J0LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX1BPUlRfSF9fCisjZGVmaW5lIF9fQkZBX1BPUlRfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmFfaW9jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKwordHlwZWRlZiB2b2lkICAgICgqYmZhX3BvcnRfc3RhdHNfY2Jmbl90KSAodm9pZCAqZGV2LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKK3R5cGVkZWYgdm9pZCAgICAoKmJmYV9wb3J0X2VuZGlzX2NiZm5fdCkgKHZvaWQgKmRldiwgYmZhX3N0YXR1c190IHN0YXR1cyk7CisKK3N0cnVjdCBiZmFfcG9ydF9zIHsKKwl2b2lkICAgICAgICAgICAqZGV2OworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYzsKKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2Q7CisJdTMyICAgICAgICBtc2d0YWc7CisJYmZhX2Jvb2xlYW5fdCAgIHN0YXRzX2J1c3k7CisJc3RydWN0IGJmYV9tYm94X2NtZF9zIHN0YXRzX21iOworCWJmYV9wb3J0X3N0YXRzX2NiZm5fdCBzdGF0c19jYmZuOworCXZvaWQgICAgICAgICAgICpzdGF0c19jYmFyZzsKKwliZmFfc3RhdHVzX3QgICAgc3RhdHNfc3RhdHVzOworCXVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0czsKKwlzdHJ1Y3QgYmZhX2RtYV9zIHN0YXRzX2RtYTsKKwliZmFfYm9vbGVhbl90ICAgZW5kaXNfcGVuZGluZzsKKwlzdHJ1Y3QgYmZhX21ib3hfY21kX3MgZW5kaXNfbWI7CisJYmZhX3BvcnRfZW5kaXNfY2Jmbl90IGVuZGlzX2NiZm47CisJdm9pZCAgICAgICAgICAgKmVuZGlzX2NiYXJnOworCWJmYV9zdGF0dXNfdCAgICBlbmRpc19zdGF0dXM7CisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zIGhiZmFpbDsKK307CisKK3ZvaWQgICAgICAgICAgICBiZmFfcG9ydF9hdHRhY2goc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHN0cnVjdCBiZmFfaW9jX3MgKmlvYywKKwkJCQl2b2lkICpkZXYsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsCisJCQkJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCk7Cit2b2lkICAgICAgICAgICAgYmZhX3BvcnRfZGV0YWNoKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfcG9ydF9oYmZhaWwodm9pZCAqYXJnKTsKKworYmZhX3N0YXR1c190ICAgIGJmYV9wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwKKwkJCQkgICB1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHMsCisJCQkJICAgYmZhX3BvcnRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfcG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwKKwkJCQkgICAgIGJmYV9wb3J0X3N0YXRzX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgICAgYmZhX3BvcnRfZW5hYmxlKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LAorCQkJCWJmYV9wb3J0X2VuZGlzX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgICAgYmZhX3BvcnRfZGlzYWJsZShzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwKKwkJCQkgYmZhX3BvcnRfZW5kaXNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK3UzMiAgICAgICAgYmZhX3BvcnRfbWVtaW5mbyh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBiZmFfcG9ydF9tZW1fY2xhaW0oc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHU4ICpkbWFfa3ZhLAorCQkJCSAgIHU2NCBkbWFfcGEpOworCisjZW5kaWYgLyogX19CRkFfUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcHN0YXRzL2V0aHBvcnRfZGVmcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wc3RhdHMvZXRocG9ydF9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2M2VlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcHN0YXRzL2V0aHBvcnRfZGVmcy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fRVRIUE9SVF9ERUZTX0hfXworI2RlZmluZSBfX0VUSFBPUlRfREVGU19IX18KKworc3RydWN0IGJuYWRfZHJ2X3N0YXRzIHsKKwl1NjQgbmV0aWZfcXVldWVfc3RvcDsKKwl1NjQgbmV0aWZfcXVldWVfd2FrZXVwOworCXU2NCB0c280OworCXU2NCB0c282OworCXU2NCB0c29fZXJyOworCXU2NCB0Y3Bjc3VtX29mZmxvYWQ7CisJdTY0IHVkcGNzdW1fb2ZmbG9hZDsKKwl1NjQgY3N1bV9oZWxwOworCXU2NCBjc3VtX2hlbHBfZXJyOworCisJdTY0IGh3X3N0YXRzX3VwZGF0ZXM7CisJdTY0IG5ldGlmX3J4X3NjaGVkdWxlOworCXU2NCBuZXRpZl9yeF9jb21wbGV0ZTsKKwl1NjQgbmV0aWZfcnhfZHJvcHBlZDsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcHN0YXRzL3BoeXBvcnRfZGVmcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wc3RhdHMvcGh5cG9ydF9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3NTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcHN0YXRzL3BoeXBvcnRfZGVmcy5oCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX1BIWVBPUlRfREVGU19IX18KKyNkZWZpbmUgX19QSFlQT1JUX0RFRlNfSF9fCisKKyNkZWZpbmUgQk5BX1RYRl9JRF9NQVggIAk2NAorI2RlZmluZSBCTkFfUlhGX0lEX01BWCAgCTY0CisKKy8qCisgKiBTdGF0aXN0aWNzCisgKi8KKworLyoKKyAqIFR4RiBGcmFtZSBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBibmFfc3RhdHNfdHhmIHsKKwl1NjQgICAgICAgIHVjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHVjYXN0OworCXU2NCAgICAgICAgdWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgbWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgbWNhc3Q7CisJdTY0ICAgICAgICBtY2FzdF92bGFuOworCisJdTY0ICAgICAgICBiY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICBiY2FzdDsKKwl1NjQgICAgICAgIGJjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIGVycm9yczsKKwl1NjQgICAgICAgIGZpbHRlcl92bGFuOwkvKiBmcmFtZXMgZmlsdGVyZWQgZHVlIHRvIFZMQU4gKi8KKwl1NjQgICAgICAgIGZpbHRlcl9tYWNfc2E7CS8qIGZyYW1lcyBmaWx0ZXJlZCBkdWUgdG8gU0EgY2hlY2sgKi8KK307CisKKy8qCisgKiBSeEYgRnJhbWUgU3RhdGlzdGljcworICovCitzdHJ1Y3QgYm5hX3N0YXRzX3J4ZiB7CisJdTY0ICAgICAgICB1Y2FzdF9vY3RldHM7CisJdTY0ICAgICAgICB1Y2FzdDsKKwl1NjQgICAgICAgIHVjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIG1jYXN0X29jdGV0czsKKwl1NjQgICAgICAgIG1jYXN0OworCXU2NCAgICAgICAgbWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgYmNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgYmNhc3Q7CisJdTY0ICAgICAgICBiY2FzdF92bGFuOworCXU2NCAgICAgICAgZnJhbWVfZHJvcHM7Cit9OworCisvKgorICogRkMgVHggRnJhbWUgU3RhdGlzdGljcworICovCitzdHJ1Y3QgYm5hX3N0YXRzX2ZjX3R4IHsKKwl1NjQgICAgICAgIHR4Zl91Y2FzdF9vY3RldHM7CisJdTY0ICAgICAgICB0eGZfdWNhc3Q7CisJdTY0ICAgICAgICB0eGZfdWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgdHhmX21jYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHR4Zl9tY2FzdDsKKwl1NjQgICAgICAgIHR4Zl9tY2FzdF92bGFuOworCisJdTY0ICAgICAgICB0eGZfYmNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgdHhmX2JjYXN0OworCXU2NCAgICAgICAgdHhmX2JjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHR4Zl9wYXJpdHlfZXJyb3JzOworCXU2NCAgICAgICAgdHhmX3RpbWVvdXQ7CisJdTY0ICAgICAgICB0eGZfZmlkX3Bhcml0eV9lcnJvcnM7Cit9OworCisvKgorICogRkMgUnggRnJhbWUgU3RhdGlzdGljcworICovCitzdHJ1Y3QgYm5hX3N0YXRzX2ZjX3J4IHsKKwl1NjQgICAgICAgIHJ4Zl91Y2FzdF9vY3RldHM7CisJdTY0ICAgICAgICByeGZfdWNhc3Q7CisJdTY0ICAgICAgICByeGZfdWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgcnhmX21jYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHJ4Zl9tY2FzdDsKKwl1NjQgICAgICAgIHJ4Zl9tY2FzdF92bGFuOworCisJdTY0ICAgICAgICByeGZfYmNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgcnhmX2JjYXN0OworCXU2NCAgICAgICAgcnhmX2JjYXN0X3ZsYW47Cit9OworCisvKgorICogUkFEIEZyYW1lIFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGNuYV9zdGF0c19yYWQgeworCXU2NCAgICAgICAgcnhfZnJhbWVzOworCXU2NCAgICAgICAgcnhfb2N0ZXRzOworCXU2NCAgICAgICAgcnhfdmxhbl9mcmFtZXM7CisKKwl1NjQgICAgICAgIHJ4X3VjYXN0OworCXU2NCAgICAgICAgcnhfdWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgcnhfdWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgcnhfbWNhc3Q7CisJdTY0ICAgICAgICByeF9tY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICByeF9tY2FzdF92bGFuOworCisJdTY0ICAgICAgICByeF9iY2FzdDsKKwl1NjQgICAgICAgIHJ4X2JjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHJ4X2JjYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHJ4X2Ryb3BzOworfTsKKworLyoKKyAqIEJQQyBUeCBSZWdpc3RlcnMKKyAqLworc3RydWN0IGNuYV9zdGF0c19icGNfdHggeworCXU2NCAgICAgICAgdHhfcGF1c2VbOF07CisJdTY0ICAgICAgICB0eF96ZXJvX3BhdXNlWzhdOwkvKiAgUGF1c2UgY2FuY2VsbGF0aW9uICovCisJdTY0ICAgICAgICB0eF9maXJzdF9wYXVzZVs4XTsJLyogIFBhdXNlIGluaXRpYXRpb24gcmF0aGVyCisJCQkJCQkgKnRoYW4gcmV0ZW50aW9uICovCit9OworCisvKgorICogQlBDIFJ4IFJlZ2lzdGVycworICovCitzdHJ1Y3QgY25hX3N0YXRzX2JwY19yeCB7CisJdTY0ICAgICAgICByeF9wYXVzZVs4XTsKKwl1NjQgICAgICAgIHJ4X3plcm9fcGF1c2VbOF07CS8qICBQYXVzZSBjYW5jZWxsYXRpb24gKi8KKwl1NjQgICAgICAgIHJ4X2ZpcnN0X3BhdXNlWzhdOwkvKiAgUGF1c2UgaW5pdGlhdGlvbiByYXRoZXIKKwkJCQkJCSAqdGhhbiByZXRlbnRpb24gKi8KK307CisKKy8qCisgKiBNQUMgUnggU3RhdGlzdGljcworICovCitzdHJ1Y3QgY25hX3N0YXRzX21hY19yeCB7CisJdTY0ICAgICAgICBmcmFtZV82NDsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgZnJhbWVfNjVfMTI3OwkvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0ICAgICAgICBmcmFtZV8xMjhfMjU1OwkvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0ICAgICAgICBmcmFtZV8yNTZfNTExOwkvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0ICAgICAgICBmcmFtZV81MTJfMTAyMzsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgZnJhbWVfMTAyNF8xNTE4OwkvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0ICAgICAgICBmcmFtZV8xNTE4XzE1MjI7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIHJ4X2J5dGVzOworCXU2NCAgICAgICAgcnhfcGFja2V0czsKKwl1NjQgICAgICAgIHJ4X2Zjc19lcnJvcjsKKwl1NjQgICAgICAgIHJ4X211bHRpY2FzdDsKKwl1NjQgICAgICAgIHJ4X2Jyb2FkY2FzdDsKKwl1NjQgICAgICAgIHJ4X2NvbnRyb2xfZnJhbWVzOworCXU2NCAgICAgICAgcnhfcGF1c2U7CisJdTY0ICAgICAgICByeF91bmtub3duX29wY29kZTsKKwl1NjQgICAgICAgIHJ4X2FsaWdubWVudF9lcnJvcjsKKwl1NjQgICAgICAgIHJ4X2ZyYW1lX2xlbmd0aF9lcnJvcjsKKwl1NjQgICAgICAgIHJ4X2NvZGVfZXJyb3I7CisJdTY0ICAgICAgICByeF9jYXJyaWVyX3NlbnNlX2Vycm9yOworCXU2NCAgICAgICAgcnhfdW5kZXJzaXplOworCXU2NCAgICAgICAgcnhfb3ZlcnNpemU7CisJdTY0ICAgICAgICByeF9mcmFnbWVudHM7CisJdTY0ICAgICAgICByeF9qYWJiZXI7CisJdTY0ICAgICAgICByeF9kcm9wOworfTsKKworLyoKKyAqIE1BQyBUeCBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBjbmFfc3RhdHNfbWFjX3R4IHsKKwl1NjQgICAgICAgIHR4X2J5dGVzOworCXU2NCAgICAgICAgdHhfcGFja2V0czsKKwl1NjQgICAgICAgIHR4X211bHRpY2FzdDsKKwl1NjQgICAgICAgIHR4X2Jyb2FkY2FzdDsKKwl1NjQgICAgICAgIHR4X3BhdXNlOworCXU2NCAgICAgICAgdHhfZGVmZXJyYWw7CisJdTY0ICAgICAgICB0eF9leGNlc3NpdmVfZGVmZXJyYWw7CisJdTY0ICAgICAgICB0eF9zaW5nbGVfY29sbGlzaW9uOworCXU2NCAgICAgICAgdHhfbXVsaXBsZV9jb2xsaXNpb247CisJdTY0ICAgICAgICB0eF9sYXRlX2NvbGxpc2lvbjsKKwl1NjQgICAgICAgIHR4X2V4Y2Vzc2l2ZV9jb2xsaXNpb247CisJdTY0ICAgICAgICB0eF90b3RhbF9jb2xsaXNpb247CisJdTY0ICAgICAgICB0eF9wYXVzZV9ob25vcmVkOworCXU2NCAgICAgICAgdHhfZHJvcDsKKwl1NjQgICAgICAgIHR4X2phYmJlcjsKKwl1NjQgICAgICAgIHR4X2Zjc19lcnJvcjsKKwl1NjQgICAgICAgIHR4X2NvbnRyb2xfZnJhbWU7CisJdTY0ICAgICAgICB0eF9vdmVyc2l6ZTsKKwl1NjQgICAgICAgIHR4X3VuZGVyc2l6ZTsKKwl1NjQgICAgICAgIHR4X2ZyYWdtZW50czsKK307CisKKy8qCisgKiBDb21wbGV0ZSBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBibmFfc3RhdHMgeworCXN0cnVjdCBjbmFfc3RhdHNfbWFjX3J4IG1hY19yeF9zdGF0czsKKwlzdHJ1Y3QgY25hX3N0YXRzX2JwY19yeCBicGNfcnhfc3RhdHM7CisJc3RydWN0IGNuYV9zdGF0c19yYWQgcmFkX3N0YXRzOworCXN0cnVjdCBibmFfc3RhdHNfZmNfcnggZmNfcnhfc3RhdHM7CisJc3RydWN0IGNuYV9zdGF0c19tYWNfdHggbWFjX3R4X3N0YXRzOworCXN0cnVjdCBjbmFfc3RhdHNfYnBjX3R4IGJwY190eF9zdGF0czsKKwlzdHJ1Y3QgYm5hX3N0YXRzX2ZjX3R4IGZjX3R4X3N0YXRzOworCXN0cnVjdCBibmFfc3RhdHNfcnhmIHJ4Zl9zdGF0c1tCTkFfVFhGX0lEX01BWF07CisJc3RydWN0IGJuYV9zdGF0c190eGYgdHhmX3N0YXRzW0JOQV9SWEZfSURfTUFYXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9jaGVja3N1bS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGMxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2NoZWNrc3VtLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfY2hlY2tzdW0uaCBCRkEgY2hlY2tzdW0gdXRpbGl0aWVzCisgKi8KKworI2lmbmRlZiBfX0JGQV9DSEVDS1NVTV9IX18KKyNkZWZpbmUgX19CRkFfQ0hFQ0tTVU1fSF9fCisKK3N0YXRpYyBpbmxpbmUgdTMyCitiZmFfY2hlY2tzdW1fdTMyKHUzMiAqYnVmLCBpbnQgc3opCit7CisJaW50CQlpLCBtID0gc3ogPj4gMjsKKwl1MzIJc3VtID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBtOyBpKyspCisJCXN1bSBePSBidWZbaV07CisKKwlyZXR1cm4gKHN1bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2CitiZmFfY2hlY2tzdW1fdTE2KHUxNiAqYnVmLCBpbnQgc3opCit7CisJaW50ICAgICAgICAgICAgIGksIG0gPSBzeiA+PiAxOworCXUxNiAgICAgICAgc3VtID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBtOyBpKyspCisJCXN1bSBePSBidWZbaV07CisKKwlyZXR1cm4gKHN1bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTgKK2JmYV9jaGVja3N1bV91OCh1OCAqYnVmLCBpbnQgc3opCit7CisJaW50ICAgICAgICAgICAgIGk7CisJdTggICAgICAgICBzdW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspCisJCXN1bSBePSBidWZbaV07CisKKwlyZXR1cm4gKHN1bSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfZGVidWcuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDFiZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9kZWJ1Zy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2RlYnVnLmggQkZBIGRlYnVnIGludGVyZmFjZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX0RFQlVHX0hfXworI2RlZmluZSBfX0JGQV9ERUJVR19IX18KKworI2RlZmluZSBiZmFfYXNzZXJ0KF9fY29uZCkJZG8gewkJCQkJXAorCWlmICghKF9fY29uZCkpIAkJCQkJCQlcCisJCWJmYV9wYW5pYyhfX0xJTkVfXywgX19GSUxFX18sICNfX2NvbmQpOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX3NtX2ZhdWx0KF9fbW9kLCBfX2V2ZW50KQlkbyB7CQkJCVwKKwliZmFfc21fcGFuaWMoKF9fbW9kKS0+bG9nbSwgX19MSU5FX18sIF9fRklMRV9fLCBfX2V2ZW50KTsgICAgICBcCit9IHdoaWxlICgwKQorCisjaWZuZGVmIEJGQV9QRVJGX0JVSUxECisjZGVmaW5lIGJmYV9hc3NlcnRfZnAoX19jb25kKQliZmFfYXNzZXJ0KF9fY29uZCkKKyNlbHNlCisjZGVmaW5lIGJmYV9hc3NlcnRfZnAoX19jb25kKQorI2VuZGlmCisKK3N0cnVjdCBiZmFfbG9nX21vZF9zOwordm9pZCBiZmFfcGFuaWMoaW50IGxpbmUsIGNoYXIgKmZpbGUsIGNoYXIgKnBhbmljc3RyKTsKK3ZvaWQgYmZhX3NtX3BhbmljKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtLCBpbnQgbGluZSwgY2hhciAqZmlsZSwgaW50IGV2ZW50KTsKKworI2VuZGlmIC8qIF9fQkZBX0RFQlVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9sb2cuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxY2JlMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfbG9nLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2xvZy5oIEJGQSBsb2cgbGlicmFyeSBkYXRhIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbgorICovCisKKyNpZm5kZWYgX19CRkFfTE9HX0hfXworI2RlZmluZSBfX0JGQV9MT0dfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisvKgorICogQkZBIGxvZyBtb2R1bGUgZGVmaW5pdGlvbgorICoKKyAqIFRvIGNyZWF0ZSBhIG5ldyBtb2R1bGUgaWQ6CisgKiBBZGQgYSAjZGVmaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgYmVsb3cuIFNlbGVjdCBhIHZhbHVlIGZvciB5b3VyCisgKiBkZWZpbml0aW9uIHNvIHRoYXQgaXQgaXMgb25lICgxKSBncmVhdGVyIHRoYW4gdGhlIHByZXZpb3VzCisgKiBkZWZpbml0aW9uLiBNb2RpZnkgdGhlIGRlZmluaXRpb24gb2YgQkZBX0xPR19NT0RVTEVfSURfTUFYIHRvIGJlY29tZQorICogeW91ciBuZXcgZGVmaW5pdGlvbi4KKyAqIFNob3VsZCBoYXZlIG5vIGdhcHMgaW4gYmV0d2VlbiB0aGUgdmFsdWVzIGJlY2F1c2UgdGhpcyBpcyB1c2VkIGluIGFycmF5cy4KKyAqIElNUE9SVEFOVDogQUVOX0lEcyBtdXN0IGJlIGF0IHRoZSBiZWdpbmluZywgb3RoZXJ3aXNlIHVwZGF0ZSBiZmFfZGVmc19hZW4uaAorICovCisKK2VudW0gYmZhX2xvZ19tb2R1bGVfaWQgeworCUJGQV9MT0dfVU5VU0VEX0lECT0gMCwKKworCS8qIEFFTiBkZWZzIGJlZ2luICovCisJQkZBX0xPR19BRU5fTUlOCQk9IEJGQV9MT0dfVU5VU0VEX0lELAorCisJQkZBX0xPR19BRU5fSURfQURBUFRFUiAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9BREFQVEVSLC8qIDEgKi8KKwlCRkFfTE9HX0FFTl9JRF9QT1JUIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX1BPUlQsCS8qIDIgKi8KKwlCRkFfTE9HX0FFTl9JRF9MUE9SVCAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9MUE9SVCwJLyogMyAqLworCUJGQV9MT0dfQUVOX0lEX1JQT1JUIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX1JQT1JULAkvKiA0ICovCisJQkZBX0xPR19BRU5fSURfSVROSU0gCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfSVROSU0sCS8qIDUgKi8KKwlCRkFfTE9HX0FFTl9JRF9USU4gCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfVElOLAkvKiA2ICovCisJQkZBX0xPR19BRU5fSURfSVBGQyAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9JUEZDLAkvKiA3ICovCisJQkZBX0xPR19BRU5fSURfQVVESVQgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfQVVESVQsCS8qIDggKi8KKwlCRkFfTE9HX0FFTl9JRF9JT0MJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9JT0MsCS8qIDkgKi8KKwlCRkFfTE9HX0FFTl9JRF9FVEhQT1JUCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfRVRIUE9SVCwvKiAxMCAqLworCisJQkZBX0xPR19BRU5fTUFYCQk9IEJGQV9MT0dfQUVOX0lEX0VUSFBPUlQsCisJLyogQUVOIGRlZnMgZW5kICovCisKKwlCRkFfTE9HX01PRFVMRV9JRF9NSU4JPSBCRkFfTE9HX0FFTl9NQVgsCisKKwlCRkFfTE9HX0ZXX0lECQk9IEJGQV9MT0dfTU9EVUxFX0lEX01JTiArIDEsCisJQkZBX0xPR19IQUxfSUQJCT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgMiwKKwlCRkFfTE9HX0ZDU19JRAkJPSBCRkFfTE9HX01PRFVMRV9JRF9NSU4gKyAzLAorCUJGQV9MT0dfV0RSVl9JRAkJPSBCRkFfTE9HX01PRFVMRV9JRF9NSU4gKyA0LAorCUJGQV9MT0dfTElOVVhfSUQJPSBCRkFfTE9HX01PRFVMRV9JRF9NSU4gKyA1LAorCUJGQV9MT0dfU09MQVJJU19JRAk9IEJGQV9MT0dfTU9EVUxFX0lEX01JTiArIDYsCisKKwlCRkFfTE9HX01PRFVMRV9JRF9NQVggCT0gQkZBX0xPR19TT0xBUklTX0lELAorCisJLyogTm90IHBhcnQgb2YgYW55IGFycmF5cyAqLworCUJGQV9MT0dfTU9EVUxFX0lEX0FMTCAJPSBCRkFfTE9HX01PRFVMRV9JRF9NQVggKyAxLAorCUJGQV9MT0dfQUVOX0FMTCAJPSBCRkFfTE9HX01PRFVMRV9JRF9NQVggKyAyLAorCUJGQV9MT0dfRFJWX0FMTAkJPSBCRkFfTE9HX01PRFVMRV9JRF9NQVggKyAzLAorfTsKKworLyoKKyAqIEJGQSBsb2cgY2F0YWxvZyBuYW1lCisgKi8KKyNkZWZpbmUgQkZBX0xPR19DQVRfTkFNRQkiQkZBIgorCisvKgorICogYmZhIGxvZyBzZXZlcml0eSB2YWx1ZXMKKyAqLworZW51bSBiZmFfbG9nX3NldmVyaXR5IHsKKwlCRkFfTE9HX0lOVkFMSUQgPSAwLAorCUJGQV9MT0dfQ1JJVElDQUwgPSAxLAorCUJGQV9MT0dfRVJST1IgPSAyLAorCUJGQV9MT0dfV0FSTklORyA9IDMsCisJQkZBX0xPR19JTkZPID0gNCwKKwlCRkFfTE9HX05PTkUgPSA1LAorCUJGQV9MT0dfTEVWRUxfTUFYID0gQkZBX0xPR19OT05FCit9OworCisjZGVmaW5lIEJGQV9MT0dfTU9ESURfT0ZGU0VUCQkxNgorCisKK3N0cnVjdCBiZmFfbG9nX21zZ2RlZl9zIHsKKwl1MzIJbXNnX2lkOwkJLyogIG1lc3NhZ2UgaWQgKi8KKwlpbnQJCWF0dHJpYnV0ZXM7CS8qICBhdHRyaWJ1dGVzICovCisJaW50CQlzZXZlcml0eTsJLyogIHNldmVyaXR5IGxldmVsICovCisJY2hhcgkJKm1zZ192YWx1ZTsKKwkJCQkJLyogIG1zZyBzdHJpbmcgKi8KKwljaGFyCQkqbWVzc2FnZTsKKwkJCQkJLyogIG1zZyBmb3JtYXQgc3RyaW5nICovCisJaW50CQlhcmdfdHlwZTsJLyogIGFyZ3VtZW50IHR5cGUgKi8KKwlpbnQJCWFyZ19udW07CS8qICBudW1iZXIgb2YgYXJndW1lbnQgKi8KK307CisKKy8qCisgKiBzdXBwb3J0ZWQgYXJndW1lbnQgdHlwZQorICovCitlbnVtIGJmYV9sb2dfYXJnX3R5cGUgeworCUJGQV9MT0dfUyA9IDAsCQkvKiAgc3RyaW5nICovCisJQkZBX0xPR19ELAkJLyogIGRlY2ltYWwgKi8KKwlCRkFfTE9HX0ksCQkvKiAgaW50ZWdlciAqLworCUJGQV9MT0dfTywJCS8qICBvY3QgbnVtYmVyICovCisJQkZBX0xPR19VLAkJLyogIHVuc2lnbmVkIGludGVnZXIgKi8KKwlCRkFfTE9HX1gsCQkvKiAgaGV4IG51bWJlciAqLworCUJGQV9MT0dfRiwJCS8qICBmbG9hdGluZyAqLworCUJGQV9MT0dfQywJCS8qICBjaGFyYWN0ZXIgKi8KKwlCRkFfTE9HX0wsCQkvKiAgZG91YmxlICovCisJQkZBX0xPR19QCQkvKiAgcG9pbnRlciAqLworfTsKKworI2RlZmluZSBCRkFfTE9HX0FSR19UWVBFCTIKKyNkZWZpbmUgQkZBX0xPR19BUkcwCQkoMCAqIEJGQV9MT0dfQVJHX1RZUEUpCisjZGVmaW5lIEJGQV9MT0dfQVJHMQkJKDEgKiBCRkFfTE9HX0FSR19UWVBFKQorI2RlZmluZSBCRkFfTE9HX0FSRzIJCSgyICogQkZBX0xPR19BUkdfVFlQRSkKKyNkZWZpbmUgQkZBX0xPR19BUkczCQkoMyAqIEJGQV9MT0dfQVJHX1RZUEUpCisKKyNkZWZpbmUgQkZBX0xPR19HRVRfTU9EX0lEKG1zZ2lkKSAoKG1zZ2lkID4+IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSAmIDB4ZmYpCisjZGVmaW5lIEJGQV9MT0dfR0VUX01TR19JRFgobXNnaWQpIChtc2dpZCAmIDB4ZmZmZikKKyNkZWZpbmUgQkZBX0xPR19HRVRfTVNHX0lEKG1zZ2RlZikgKChtc2dkZWYpLT5tc2dfaWQpCisjZGVmaW5lIEJGQV9MT0dfR0VUX01TR19GTVRfU1RSSU5HKG1zZ2RlZikgKChtc2dkZWYpLT5tZXNzYWdlKQorI2RlZmluZSBCRkFfTE9HX0dFVF9TRVZFUklUWShtc2dkZWYpICgobXNnZGVmKS0+c2V2ZXJpdHkpCisKKy8qCisgKiBFdmVudCBhdHRyaWJ1dGVzCisgKi8KKyNkZWZpbmUgQkZBX0xPR19BVFRSX05PTkUJMAorI2RlZmluZSBCRkFfTE9HX0FUVFJfQVVESVQJMQorI2RlZmluZSBCRkFfTE9HX0FUVFJfTE9HCTIKKyNkZWZpbmUgQkZBX0xPR19BVFRSX0ZGREMJNAorCisjZGVmaW5lIEJGQV9MT0dfQ1JFQVRFX0lEKG1zdywgbHN3KSBcCisJKCgodTMyKW1zdyA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCBsc3cpCisKK3N0cnVjdCBiZmFfbG9nX21vZF9zOworCisvKioKKyAqIGNhbGxiYWNrIGZ1bmN0aW9uCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9sb2dfY2JfdCkoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQsCisJCQljb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKKworc3RydWN0IGJmYV9sb2dfbW9kX3MgeworCWNoYXIJCWluc3RhbmNlX2luZm9bMTZdOwkvKiAgaW5zdGFuY2UgaW5mbyAqLworCWludAkJbG9nX2xldmVsW0JGQV9MT0dfTU9EVUxFX0lEX01BWCArIDFdOworCQkJCQkJLyogIGxvZyBsZXZlbCBmb3IgbW9kdWxlcyAqLworCWJmYV9sb2dfY2JfdAljYmZuOyAJCQkvKiAgY2FsbGJhY2sgZnVuY3Rpb24gKi8KK307CisKK2V4dGVybiBpbnQgYmZhX2xvZ19pbml0KHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLAorCQkJY2hhciAqaW5zdGFuY2VfbmFtZSwgYmZhX2xvZ19jYl90IGNiZm4pOworZXh0ZXJuIGludCBiZmFfbG9nKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCB1MzIgbXNnX2lkLCAuLi4pOworZXh0ZXJuIGJmYV9zdGF0dXNfdCBiZmFfbG9nX3NldF9sZXZlbChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJCWludCBtb2RfaWQsIGVudW0gYmZhX2xvZ19zZXZlcml0eSBsb2dfbGV2ZWwpOworZXh0ZXJuIGJmYV9zdGF0dXNfdCBiZmFfbG9nX3NldF9sZXZlbF9hbGwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCQllbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbG9nX2xldmVsKTsKK2V4dGVybiBiZmFfc3RhdHVzX3QgYmZhX2xvZ19zZXRfbGV2ZWxfYWVuKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLAorCQkJZW51bSBiZmFfbG9nX3NldmVyaXR5IGxvZ19sZXZlbCk7CitleHRlcm4gZW51bSBiZmFfbG9nX3NldmVyaXR5IGJmYV9sb2dfZ2V0X2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLAorCQkJaW50IG1vZF9pZCk7CitleHRlcm4gZW51bSBiZmFfbG9nX3NldmVyaXR5IGJmYV9sb2dfZ2V0X21zZ19sZXZlbCgKKwkJCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCB1MzIgbXNnX2lkKTsKKy8qCisgKiBhcnJheSBvZiBtZXNzYWdlcyBnZW5lcmF0ZWQgZnJvbSB4bWwgZmlsZXMKKyAqLworZXh0ZXJuIHN0cnVjdCBiZmFfbG9nX21zZ2RlZl9zIGJmYV9sb2dfbXNnX2FycmF5W107CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9wZXJmLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3BlcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWFhNWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9wZXJmLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQURfUEVSRl9IX18KKyNkZWZpbmUgX19CRkFEX1BFUkZfSF9fCisKKyNpZmRlZiBCRkFEX1BFUkZfQlVJTEQKKworI3VuZGVmIGJmYV90cmMKKyN1bmRlZiBiZmFfdHJjMzIKKyN1bmRlZiBiZmFfYXNzZXJ0CisjdW5kZWYgQkZBX1RSQ19GSUxFCisKKyNkZWZpbmUgYmZhX3RyYyhfdHJjcCwgX2RhdGEpCisjZGVmaW5lIGJmYV90cmMzMihfdHJjcCwgX2RhdGEpCisjZGVmaW5lIGJmYV9hc3NlcnQoX19jb25kKQorI2RlZmluZSBCRkFfVFJDX0ZJTEUoX19tb2QsIF9fc3VibW9kKQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQkZBRF9QRVJGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9wbG9nLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3Bsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzBmODZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9wbG9nLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfUE9SVExPR19IX18KKyNkZWZpbmUgX19CRkFfUE9SVExPR19IX18KKworI2luY2x1ZGUgInByb3RvY29sL2ZjLmgiCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorCisjZGVmaW5lIEJGQV9QTF9OTE9HX0VOVFMgMjU2CisjZGVmaW5lIEJGQV9QTF9MT0dfUkVDX0lOQ1IoX3gpICgoX3gpKyssIChfeCkgJT0gQkZBX1BMX05MT0dfRU5UUykKKworI2RlZmluZSBCRkFfUExfU1RSSU5HX0xPR19TWiAgIDMyICAgLyogbnVtYmVyIG9mIGNoYXJzIGluIHN0cmluZyBsb2cgKi8KKyNkZWZpbmUgQkZBX1BMX0lOVF9MT0dfU1ogICAgICA4ICAgIC8qIG51bWJlciBvZiBpbnRlZ2VycyBpbiB0aGUgaW50ZWdlciBsb2cgKi8KKworZW51bSBiZmFfcGxvZ19sb2dfdHlwZSB7CisJQkZBX1BMX0xPR19UWVBFX0lOVkFMSUQgPSAwLAorCUJGQV9QTF9MT0dfVFlQRV9JTlQgCT0gMSwKKwlCRkFfUExfTE9HX1RZUEVfU1RSSU5HIAk9IDIsCit9OworCisvKgorICogdGhlIChmaXhlZCBzaXplKSByZWNvcmQgZm9ybWF0IGZvciBlYWNoIGVudHJ5IGluIHRoZSBwb3J0bG9nCisgKi8KK3N0cnVjdCBiZmFfcGxvZ19yZWNfcyB7CisJdTMyICAgICAgICB0djsJLyogRmlsbGVkIGJ5IHRoZSBwb3J0bG9nIGRyaXZlciB3aGVuIHRoZSAqCisJCQkJICogZW50cnkgaXMgYWRkZWQgdG8gdGhlIGNpcmN1bGFyIGxvZy4gICAqLworCXU4ICAgICAgICAgcG9ydDsJLyogU291cmNlIHBvcnQgdGhhdCBsb2dnZWQgdGhpcyBlbnRyeS4gQ00KKwkJCQkgKiBlbnRpdGllcyB3aWxsIHVzZSAweEZGICovCisJdTggICAgICAgICBtaWQ7CS8qIEludGVnZXIgdmFsdWUgdG8gYmUgdXNlZCBieSBhbGwgZW50aXRpZXMgKgorCQkJCSAqIHdoaWxlIGxvZ2dpbmcuIFRoZSBtb2R1bGUgaWQgdG8gc3RyaW5nICAgKgorCQkJCSAqIGNvbnZlcnNpb24gd2lsbCBiZSBkb25lIGJ5IEJGQUwuIFNlZQorCQkJCSAqIGVudW0gYmZhX3Bsb2dfbWlkICovCisJdTggICAgICAgICBlaWQ7CS8qIGluZGljYXRlcyBSeCwgVHgsIElPQ1RMLCBldGMuIFNlZQorCQkJCSAqIGVudW0gYmZhX3Bsb2dfZWlkICovCisJdTggICAgICAgICBsb2dfdHlwZTsgLyogaW5kaWNhdGVzIHN0cmluZyBsb2cgb3IgaW50ZWdlciBsb2cuCisJCQkJICAgKiBzZWUgYmZhX3Bsb2dfbG9nX3R5cGVfdCAqLworCXU4ICAgICAgICAgbG9nX251bV9pbnRzOworCS8qCisJICogaW50ZXJwcmV0ZWQgb25seSBpZiBsb2dfdHlwZSBpcyBJTlRfTE9HLiBpbmRpY2F0ZXMgbnVtYmVyIG9mCisJICogaW50ZWdlcnMgaW4gdGhlIGludF9sb2dbXSAoMC1QTF9JTlRfTE9HX1NaKS4KKwkgKi8KKwl1OCAgICAgICAgIHJzdmQ7CisJdTE2ICAgICAgICBtaXNjOwkvKiBjYW4gYmUgdXNlZCB0byBpbmRpY2F0ZSBmYyBmcmFtZSBsZW5ndGgsCisJCQkJICpldGMuLiAqLworCXVuaW9uIHsKKwkJY2hhciAgICAgICAgICAgIHN0cmluZ19sb2dbQkZBX1BMX1NUUklOR19MT0dfU1pdOworCQl1MzIgICAgICAgIGludF9sb2dbQkZBX1BMX0lOVF9MT0dfU1pdOworCX0gbG9nX2VudHJ5OworCit9OworCisvKgorICogdGhlIGZvbGxvd2luZyAjZGVmaW5lcyB3aWxsIGJlIHVzZWQgYnkgdGhlIGxvZ2dpbmcgZW50aXRpZXMgdG8gaW5kaWNhdGUKKyAqIHRoZWlyIG1vZHVsZSBpZC4gQkZBTCB3aWxsIGNvbnZlcnQgdGhlIGludGVnZXIgdmFsdWUgdG8gc3RyaW5nIGZvcm1hdAorICoKKyogcHJvY2VzcyB0byBiZSB1c2VkIHdoaWxlIGNoYW5naW5nIHRoZSBmb2xsb3dpbmcgI2RlZmluZXM6CisgKiAgLSBBbHdheXMgYWRkIG5ldyBlbnRyaWVzIGF0IHRoZSBlbmQKKyAqICAtIGRlZmluZSBjb3JyZXNwb25kaW5nIHN0cmluZyBpbiBCRkFMCisgKiAgLSBEbyBub3QgcmVtb3ZlIGFueSBlbnRyeSBvciByZWFycmFuZ2UgdGhlIG9yZGVyLgorICovCitlbnVtIGJmYV9wbG9nX21pZCB7CisJQkZBX1BMX01JRF9JTlZBTElEIAk9IDAsCisJQkZBX1BMX01JRF9ERUJVRyAJPSAxLAorCUJGQV9QTF9NSURfRFJWUiAJPSAyLAorCUJGQV9QTF9NSURfSEFMIAkJPSAzLAorCUJGQV9QTF9NSURfSEFMX0ZDWFAgCT0gNCwKKwlCRkFfUExfTUlEX0hBTF9VRiAJPSA1LAorCUJGQV9QTF9NSURfRkNTIAkJPSA2LAorCUJGQV9QTF9NSURfTUFYIAkJPSA3Cit9OworCisjZGVmaW5lIEJGQV9QTF9NSURfU1RSTEVOICAgIDgKK3N0cnVjdCBiZmFfcGxvZ19taWRfc3RyaW5nc19zIHsKKwljaGFyICAgICAgICAgICAgbV9zdHJbQkZBX1BMX01JRF9TVFJMRU5dOworfTsKKworLyoKKyAqIHRoZSBmb2xsb3dpbmcgI2RlZmluZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSBsb2dnaW5nIGVudGl0aWVzIHRvIGluZGljYXRlCisgKiB0aGVpciBldmVudCB0eXBlLiBCRkFMIHdpbGwgY29udmVydCB0aGUgaW50ZWdlciB2YWx1ZSB0byBzdHJpbmcgZm9ybWF0CisgKgorKiBwcm9jZXNzIHRvIGJlIHVzZWQgd2hpbGUgY2hhbmdpbmcgdGhlIGZvbGxvd2luZyAjZGVmaW5lczoKKyAqICAtIEFsd2F5cyBhZGQgbmV3IGVudHJpZXMgYXQgdGhlIGVuZAorICogIC0gZGVmaW5lIGNvcnJlc3BvbmRpbmcgc3RyaW5nIGluIEJGQUwKKyAqICAtIERvIG5vdCByZW1vdmUgYW55IGVudHJ5IG9yIHJlYXJyYW5nZSB0aGUgb3JkZXIuCisgKi8KK2VudW0gYmZhX3Bsb2dfZWlkIHsKKwlCRkFfUExfRUlEX0lOVkFMSUQgCQk9IDAsCisJQkZBX1BMX0VJRF9JT0NfRElTQUJMRSAJCT0gMSwKKwlCRkFfUExfRUlEX0lPQ19FTkFCTEUgCQk9IDIsCisJQkZBX1BMX0VJRF9QT1JUX0RJU0FCTEUgCT0gMywKKwlCRkFfUExfRUlEX1BPUlRfRU5BQkxFIAkJPSA0LAorCUJGQV9QTF9FSURfUE9SVF9TVF9DSEFOR0UgCT0gNSwKKwlCRkFfUExfRUlEX1RYIAkJCT0gNiwKKwlCRkFfUExfRUlEX1RYX0FDSzEgCQk9IDcsCisJQkZBX1BMX0VJRF9UWF9SSlQgCQk9IDgsCisJQkZBX1BMX0VJRF9UWF9CU1kgCQk9IDksCisJQkZBX1BMX0VJRF9SWCAJCQk9IDEwLAorCUJGQV9QTF9FSURfUlhfQUNLMSAJCT0gMTEsCisJQkZBX1BMX0VJRF9SWF9SSlQgCQk9IDEyLAorCUJGQV9QTF9FSURfUlhfQlNZIAkJPSAxMywKKwlCRkFfUExfRUlEX0NUX0lOIAkJPSAxNCwKKwlCRkFfUExfRUlEX0NUX09VVCAJCT0gMTUsCisJQkZBX1BMX0VJRF9EUklWRVJfU1RBUlQgCT0gMTYsCisJQkZBX1BMX0VJRF9SU0NOIAkJPSAxNywKKwlCRkFfUExfRUlEX0RFQlVHIAkJPSAxOCwKKwlCRkFfUExfRUlEX01JU0MgCQk9IDE5LAorCUJGQV9QTF9FSURfTUFYIAkJCT0gMjAKK307CisKKyNkZWZpbmUgQkZBX1BMX0VOQU1FX1NUUkxFTiAgICAJOAorc3RydWN0IGJmYV9wbG9nX2VpZF9zdHJpbmdzX3MgeworCWNoYXIgICAgICAgICAgICBlX3N0cltCRkFfUExfRU5BTUVfU1RSTEVOXTsKK307CisKKyNkZWZpbmUgQkZBX1BMX1NJR19MRU4JOAorI2RlZmluZSBCRkFfUExfU0lHX1NUUiAgIjEycGwxMjMiCisKKy8qCisgKiBwZXIgcG9ydCBjaXJjdWxhciBsb2cgYnVmZmVyCisgKi8KK3N0cnVjdCBiZmFfcGxvZ19zIHsKKwljaGFyICAgICAgICAgICAgcGxvZ19zaWdbQkZBX1BMX1NJR19MRU5dOwkvKiBTdGFydCBzaWduYXR1cmUgKi8KKwl1OCAgICAgICAgIHBsb2dfZW5hYmxlZDsKKwl1OCAgICAgICAgIHJzdmRbN107CisJdTMyICAgICAgICB0aWNrczsKKwl1MTYgICAgICAgIGhlYWQ7CisJdTE2ICAgICAgICB0YWlsOworCXN0cnVjdCBiZmFfcGxvZ19yZWNfcyAgcGxvZ19yZWNzW0JGQV9QTF9OTE9HX0VOVFNdOworfTsKKwordm9pZCBiZmFfcGxvZ19pbml0KHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKK3ZvaWQgYmZhX3Bsb2dfc3RyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsIGNoYXIgKmxvZ19zdHIpOwordm9pZCBiZmFfcGxvZ19pbnRhcnIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIGVudW0gYmZhX3Bsb2dfbWlkIG1pZCwKKwkJCWVudW0gYmZhX3Bsb2dfZWlkIGV2ZW50LCB1MTYgbWlzYywKKwkJCXUzMiAqaW50YXJyLCB1MzIgbnVtX2ludHMpOwordm9pZCBiZmFfcGxvZ19mY2hkcihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkJZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsIHUxNiBtaXNjLAorCQkJc3RydWN0IGZjaHNfcyAqZmNoZHIpOwordm9pZCBiZmFfcGxvZ19mY2hkcl9hbmRfcGwoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIGVudW0gYmZhX3Bsb2dfbWlkIG1pZCwKKwkJCWVudW0gYmZhX3Bsb2dfZWlkIGV2ZW50LCB1MTYgbWlzYywKKwkJCXN0cnVjdCBmY2hzX3MgKmZjaGRyLCB1MzIgcGxkX3cwKTsKK3ZvaWQgYmZhX3Bsb2dfY2xlYXIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpOwordm9pZCBiZmFfcGxvZ19lbmFibGUoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpOwordm9pZCBiZmFfcGxvZ19kaXNhYmxlKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKK2JmYV9ib29sZWFuX3QJYmZhX3Bsb2dfZ2V0X3NldHRpbmcoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpOworCisjZW5kaWYgLyogX19CRkFfUE9SVExPR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9xLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4OTVmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcS5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX3EuaCBDaXJjdWxhciBxdWV1ZSBkZWZpbml0aW9ucy4KKyAqLworCisjaWZuZGVmIF9fQkZBX1FfSF9fCisjZGVmaW5lIF9fQkZBX1FfSF9fCisKKyNkZWZpbmUgYmZhX3FfZmlyc3QoX3EpICgodm9pZCAqKSgoKHN0cnVjdCBsaXN0X2hlYWQgKikgKF9xKSktPm5leHQpKQorI2RlZmluZSBiZmFfcV9uZXh0KF9xZSkJKCgoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3FlKSktPm5leHQpCisjZGVmaW5lIGJmYV9xX3ByZXYoX3FlKSAoKChzdHJ1Y3QgbGlzdF9oZWFkICopIChfcWUpKS0+cHJldikKKworLyoKKyAqIGJmYV9xX3FlX2luaXQgLSB0byBpbml0aWFsaXplIGEgcXVldWUgZWxlbWVudAorICovCisjZGVmaW5lIGJmYV9xX3FlX2luaXQoX3FlKSB7CQkJCQkJXAorCWJmYV9xX25leHQoX3FlKSA9IChzdHJ1Y3QgbGlzdF9oZWFkICopIE5VTEw7CQkJXAorCWJmYV9xX3ByZXYoX3FlKSA9IChzdHJ1Y3QgbGlzdF9oZWFkICopIE5VTEw7CQkJXAorfQorCisvKgorICogYmZhX3FfZGVxIC0gZGVxdWV1ZSBhbiBlbGVtZW50IGZyb20gaGVhZCBvZiB0aGUgcXVldWUKKyAqLworI2RlZmluZSBiZmFfcV9kZXEoX3EsIF9xZSkgewkJCQkJCVwKKwlpZiAoIWxpc3RfZW1wdHkoX3EpKSB7CQkJCQlcCisJCSgqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSAoX3FlKSkpID0gYmZhX3FfbmV4dChfcSk7CVwKKwkJYmZhX3FfcHJldihiZmFfcV9uZXh0KCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIF9xZSkpKSA9CVwKKwkJCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopIChfcSk7IFwKKwkJYmZhX3FfbmV4dChfcSkgPSBiZmFfcV9uZXh0KCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIF9xZSkpOyBcCisJCUJGQV9RX0RCR19JTklUKCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIF9xZSkpOwkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJKigoc3RydWN0IGxpc3RfaGVhZCAqKikgKF9xZSkpID0gKHN0cnVjdCBsaXN0X2hlYWQgKikgTlVMTDsgXAorCX0JCQkJCQkJCVwKK30KKworLyoKKyAqIGJmYV9xX2RlcV90YWlsIC0gZGVxdWV1ZSBhbiBlbGVtZW50IGZyb20gdGFpbCBvZiB0aGUgcXVldWUKKyAqLworI2RlZmluZSBiZmFfcV9kZXFfdGFpbChfcSwgX3FlKSB7CQkJCQkgICAgXAorCWlmICghbGlzdF9lbXB0eShfcSkpIHsJCQkJCSAgICAgICAgICAgIFwKKwkJKigoc3RydWN0IGxpc3RfaGVhZCAqKikgKF9xZSkpID0gYmZhX3FfcHJldihfcSk7CSAgICBcCisJCWJmYV9xX25leHQoYmZhX3FfcHJldigqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKSkgPSAJICAgIFwKKwkJCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopIChfcSk7ICBcCisJCWJmYV9xX3ByZXYoX3EpID0gYmZhX3FfcHJldigqKHN0cnVjdCBsaXN0X2hlYWQgKiopIF9xZSk7ICAgIFwKKwkJQkZBX1FfREJHX0lOSVQoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKSk7CQkgICAgXAorCX0gZWxzZSB7CQkJCQkJCSAgICBcCisJCSooKHN0cnVjdCBsaXN0X2hlYWQgKiopIChfcWUpKSA9IChzdHJ1Y3QgbGlzdF9oZWFkICopIE5VTEw7IFwKKwl9CQkJCQkJCQkgICAgXAorfQorCisvKgorICogI2lmZGVmIEJGQV9ERUJVRyAoVXNpbmcgYmZhX2Fzc2VydCB0byBjaGVjayBmb3IgZGVidWdfYnVpbGQgaXMgbm90CisgKiBjb25zaXN0ZW50IGFjcm9zcyBtb2R1bGVzKQorICovCisjaWZuZGVmIEJGQV9QRVJGX0JVSUxECisjZGVmaW5lIEJGQV9RX0RCR19JTklUKF9xZSkJYmZhX3FfcWVfaW5pdChfcWUpCisjZWxzZQorI2RlZmluZSBCRkFfUV9EQkdfSU5JVChfcWUpCisjZW5kaWYKKworI2RlZmluZSBiZmFfcV9pc19vbl9xKF9xLCBfcWUpCQlcCisJYmZhX3FfaXNfb25fcV9mdW5jKF9xLCAoc3RydWN0IGxpc3RfaGVhZCAqKShfcWUpKQorZXh0ZXJuIGludCBiZmFfcV9pc19vbl9xX2Z1bmMoc3RydWN0IGxpc3RfaGVhZCAqcSwgc3RydWN0IGxpc3RfaGVhZCAqcWUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfc20uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODc3MDY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9zbS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhc20uaCBTdGF0ZSBtYWNoaW5lIGRlZmluZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX1NNX0hfXworI2RlZmluZSBfX0JGQV9TTV9IX18KKwordHlwZWRlZiB2b2lkICgqYmZhX3NtX3QpKHZvaWQgKnNtLCBpbnQgZXZlbnQpOworCisjZGVmaW5lIGJmYV9zbV9zZXRfc3RhdGUoX3NtLCBfc3RhdGUpCShfc20pLT5zbSA9IChiZmFfc21fdCkoX3N0YXRlKQorI2RlZmluZSBiZmFfc21fc2VuZF9ldmVudChfc20sIF9ldmVudCkJKF9zbSktPnNtKChfc20pLCAoX2V2ZW50KSkKKyNkZWZpbmUgYmZhX3NtX2dldF9zdGF0ZShfc20pCQkoKF9zbSktPnNtKQorI2RlZmluZSBiZmFfc21fY21wX3N0YXRlKF9zbSwgX3N0YXRlKQkoKF9zbSktPnNtID09IChiZmFfc21fdCkoX3N0YXRlKSkKKworLyoqCisgKiBGb3IgY29udmVydGluZyBmcm9tIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb24gdG8gc3RhdGUgZW5jb2RpbmcuCisgKi8KK3N0cnVjdCBiZmFfc21fdGFibGVfcyB7CisJYmZhX3NtX3QJc207CS8qICBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9uCSovCisJaW50CQlzdGF0ZTsJLyogIHN0YXRlIG1hY2hpbmUgZW5jb2RpbmcJKi8KKwljaGFyCQkqbmFtZTsJLyogIHN0YXRlIG5hbWUgZm9yIGRpc3BsYXkJKi8KK307CisjZGVmaW5lIEJGQV9TTShfc20pCSgoYmZhX3NtX3QpKF9zbSkpCisKK2ludCBiZmFfc21fdG9fc3RhdGUoc3RydWN0IGJmYV9zbV90YWJsZV9zICpzbXQsIGJmYV9zbV90IHNtKTsKKworLyoqCisgKiBTdGF0ZSBtYWNoaW5lIHdpdGggZW50cnkgYWN0aW9ucy4KKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2ZzbV90KSh2b2lkICpmc20sIGludCBldmVudCk7CisKKy8qKgorICogb2MgLSBvYmplY3QgY2xhc3MgZWcuIGJmYV9pb2MKKyAqIHN0IC0gc3RhdGUsIGVnLiByZXNldAorICogb3R5cGUgLSBvYmplY3QgdHlwZSwgZWcuIHN0cnVjdCBiZmFfaW9jX3MKKyAqIGV0eXBlIC0gb2JqZWN0IHR5cGUsIGVnLiBlbnVtIGlvY19ldmVudAorICovCisjZGVmaW5lIGJmYV9mc21fc3RhdGVfZGVjbChvYywgc3QsIG90eXBlLCBldHlwZSkJCVwKKwlzdGF0aWMgdm9pZCBvYyAjIyBfc21fICMjIHN0KG90eXBlICogZnNtLCBldHlwZSBldmVudCk7ICAgICAgXAorCXN0YXRpYyB2b2lkIG9jICMjIF9zbV8gIyMgc3QgIyMgX2VudHJ5KG90eXBlICogZnNtKQorCisjZGVmaW5lIGJmYV9mc21fc2V0X3N0YXRlKF9mc20sIF9zdGF0ZSkgZG8gewlcCisJKF9mc20pLT5mc20gPSAoYmZhX2ZzbV90KShfc3RhdGUpOyAgICAgIFwKKwlfc3RhdGUgIyMgX2VudHJ5KF9mc20pOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX2ZzbV9zZW5kX2V2ZW50KF9mc20sIF9ldmVudCkJXAorCShfZnNtKS0+ZnNtKChfZnNtKSwgKF9ldmVudCkpCisjZGVmaW5lIGJmYV9mc21fY21wX3N0YXRlKF9mc20sIF9zdGF0ZSkJCVwKKwkoKF9mc20pLT5mc20gPT0gKGJmYV9mc21fdCkoX3N0YXRlKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3RyYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV90cmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTc0MzkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV90cmMuaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9UUkNfSF9fCisjZGVmaW5lIF9fQkZBX1RSQ19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKworI2lmbmRlZiBCRkFfVFJDX01BWAorI2RlZmluZSBCRkFfVFJDX01BWAkoNCAqIDEwMjQpCisjZW5kaWYKKworI2lmbmRlZiBCRkFfVFJDX1RTCisjZGVmaW5lIEJGQV9UUkNfVFMoX3RyY20pCSgoX3RyY20pLT50aWNrcyArKykKKyNlbmRpZgorCitzdHJ1Y3QgYmZhX3RyY19zIHsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUxNglmaWxlbm87CisJdTE2CWxpbmU7CisjZWxzZQorCXUxNglsaW5lOworCXUxNglmaWxlbm87CisjZW5kaWYKKwl1MzIJdGltZXN0YW1wOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMglyc3ZkOworCQkJdTMyCXUzMjsKKwkJfSB1MzI7CisJCXU2NAl1NjQ7CisJfSBkYXRhOworfTsKKworCitzdHJ1Y3QgYmZhX3RyY19tb2RfcyB7CisJdTMyCWhlYWQ7CisJdTMyCXRhaWw7CisJdTMyCW50cmM7CisJdTMyCXN0b3BwZWQ7CisJdTMyCXRpY2tzOworCXUzMglyc3ZkWzNdOworCXN0cnVjdCBiZmFfdHJjX3MgdHJjW0JGQV9UUkNfTUFYXTsKK307CisKKworZW51bSB7CisJQkZBX1RSQ19GVyAgID0gMSwJLyogIGZpcm13YXJlIG1vZHVsZXMgKi8KKwlCRkFfVFJDX0hBTCAgPSAyLAkvKiAgQkZBIG1vZHVsZXMgKi8KKwlCRkFfVFJDX0ZDUyAgPSAzLAkvKiAgQkZBIEZDUyBtb2R1bGVzICovCisJQkZBX1RSQ19MRFJWID0gNCwJLyogIExpbnV4IGRyaXZlciBtb2R1bGVzICovCisJQkZBX1RSQ19TRFJWID0gNSwJLyogIFNvbGFyaXMgZHJpdmVyIG1vZHVsZXMgKi8KKwlCRkFfVFJDX1ZEUlYgPSA2LAkvKiAgdm13YXJlIGRyaXZlciBtb2R1bGVzICovCisJQkZBX1RSQ19XRFJWID0gNywJLyogIHdpbmRvd3MgZHJpdmVyIG1vZHVsZXMgKi8KKwlCRkFfVFJDX0FFTiAgPSA4LAkvKiAgQUVOIG1vZHVsZSAqLworCUJGQV9UUkNfQklPUyA9IDksCS8qICBiaW9zIGRyaXZlciBtb2R1bGVzICovCisJQkZBX1RSQ19FRkkgID0gMTAsCS8qICBFRkkgZHJpdmVyIG1vZHVsZXMgKi8KKwlCTkFfVFJDX1dEUlYgPSAxMSwJLyogIEJOQSB3aW5kb3dzIGRyaXZlciBtb2R1bGVzICovCisJQk5BX1RSQ19WRFJWID0gMTIsCS8qICBCTkEgdm13YXJlIGRyaXZlciBtb2R1bGVzICovCisJQk5BX1RSQ19TRFJWID0gMTMsCS8qICBCTkEgU29sYXJpcyBkcml2ZXIgbW9kdWxlcyAqLworCUJOQV9UUkNfTERSViA9IDE0LAkvKiAgQk5BIExpbnV4IGRyaXZlciBtb2R1bGVzICovCisJQk5BX1RSQ19IQUwgID0gMTUsCS8qICBCTkEgbW9kdWxlcyAqLworCUJGQV9UUkNfQ05BICA9IDE2LAkvKiAgQ29tbW9uIG1vZHVsZXMgKi8KKwlCTkFfVFJDX0lNRFJWID0gMTcJLyogIEJOQSB3aW5kb3dzIGludGVybWVkaWF0ZSBkcml2ZXIgbW9kdWxlcyAqLworfTsKKyNkZWZpbmUgQkZBX1RSQ19NT0RfU0gJMTAKKyNkZWZpbmUgQkZBX1RSQ19NT0QoX19tb2QpCSgoQkZBX1RSQ18gIyMgX19tb2QpIDw8IEJGQV9UUkNfTU9EX1NIKQorCisvKioKKyAqIERlZmluZSBhIG5ldyB0cmFjaW5nIGZpbGUgKG1vZHVsZSkuIE1vZHVsZSBzaG91bGQgbWF0Y2ggb25lIGRlZmluZWQgYWJvdmUuCisgKi8KKyNkZWZpbmUgQkZBX1RSQ19GSUxFKF9fbW9kLCBfX3N1Ym1vZCkJCQkJCVwKKwlzdGF0aWMgaW50IF9fdHJjX2ZpbGVubyA9ICgoQkZBX1RSQ18gIyMgX19tb2QgIyMgXyAjIyBfX3N1Ym1vZCkgfCBcCisJCQkJCQkgQkZBX1RSQ19NT0QoX19tb2QpKQorCisKKyNkZWZpbmUgYmZhX3RyYzMyKF90cmNwLCBfZGF0YSkJXAorCV9fYmZhX3RyYygoX3RyY3ApLT50cmNtb2QsIF9fdHJjX2ZpbGVubywgX19MSU5FX18sICh1MzIpX2RhdGEpCisKKworI2lmbmRlZiBCRkFfQk9PVF9CVUlMRAorI2RlZmluZSBiZmFfdHJjKF90cmNwLCBfZGF0YSkJXAorCV9fYmZhX3RyYygoX3RyY3ApLT50cmNtb2QsIF9fdHJjX2ZpbGVubywgX19MSU5FX18sICh1NjQpX2RhdGEpCisjZWxzZQordm9pZCBiZmFfYm9vdF90cmMoc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwgdTE2IGZpbGVubywKKwkJCXUxNiBsaW5lLCB1MzIgZGF0YSk7CisjZGVmaW5lIGJmYV90cmMoX3RyY3AsIF9kYXRhKQlcCisJYmZhX2Jvb3RfdHJjKChfdHJjcCktPnRyY21vZCwgX190cmNfZmlsZW5vLCBfX0xJTkVfXywgKHUzMilfZGF0YSkKKyNlbmRpZgorCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3RyY19pbml0KHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtKQoreworCXRyY20tPmhlYWQgPSB0cmNtLT50YWlsID0gdHJjbS0+c3RvcHBlZCA9IDA7CisJdHJjbS0+bnRyYyA9IEJGQV9UUkNfTUFYOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3RyY19zdG9wKHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtKQoreworCXRyY20tPnN0b3BwZWQgPSAxOworfQorCisjaWZkZWYgRldUUkMKK2V4dGVybiB2b2lkIGRjX2ZsdXNoKHZvaWQgKmRhdGEpOworI2Vsc2UKKyNkZWZpbmUgZGNfZmx1c2goZGF0YSkKKyNlbmRpZgorCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19iZmFfdHJjKHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtLCBpbnQgZmlsZW5vLCBpbnQgbGluZSwgdTY0IGRhdGEpCit7CisJaW50CQl0YWlsID0gdHJjbS0+dGFpbDsKKwlzdHJ1Y3QgYmZhX3RyY19zIAkqdHJjID0gJnRyY20tPnRyY1t0YWlsXTsKKworCWlmICh0cmNtLT5zdG9wcGVkKQorCQlyZXR1cm47CisKKwl0cmMtPmZpbGVubyA9ICh1MTYpIGZpbGVubzsKKwl0cmMtPmxpbmUgPSAodTE2KSBsaW5lOworCXRyYy0+ZGF0YS51NjQgPSBkYXRhOworCXRyYy0+dGltZXN0YW1wID0gQkZBX1RSQ19UUyh0cmNtKTsKKwlkY19mbHVzaCh0cmMpOworCisJdHJjbS0+dGFpbCA9ICh0cmNtLT50YWlsICsgMSkgJiAoQkZBX1RSQ19NQVggLSAxKTsKKwlpZiAodHJjbS0+dGFpbCA9PSB0cmNtLT5oZWFkKQorCQl0cmNtLT5oZWFkID0gKHRyY20tPmhlYWQgKyAxKSAmIChCRkFfVFJDX01BWCAtIDEpOworCWRjX2ZsdXNoKHRyY20pOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19iZmFfdHJjMzIoc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY20sIGludCBmaWxlbm8sIGludCBsaW5lLCB1MzIgZGF0YSkKK3sKKwlpbnQJCXRhaWwgPSB0cmNtLT50YWlsOworCXN0cnVjdCBiZmFfdHJjX3MgKnRyYyA9ICZ0cmNtLT50cmNbdGFpbF07CisKKwlpZiAodHJjbS0+c3RvcHBlZCkKKwkJcmV0dXJuOworCisJdHJjLT5maWxlbm8gPSAodTE2KSBmaWxlbm87CisJdHJjLT5saW5lID0gKHUxNikgbGluZTsKKwl0cmMtPmRhdGEudTMyLnUzMiA9IGRhdGE7CisJdHJjLT50aW1lc3RhbXAgPSBCRkFfVFJDX1RTKHRyY20pOworCWRjX2ZsdXNoKHRyYyk7CisKKwl0cmNtLT50YWlsID0gKHRyY20tPnRhaWwgKyAxKSAmIChCRkFfVFJDX01BWCAtIDEpOworCWlmICh0cmNtLT50YWlsID09IHRyY20tPmhlYWQpCisJCXRyY20tPmhlYWQgPSAodHJjbS0+aGVhZCArIDEpICYgKEJGQV9UUkNfTUFYIC0gMSk7CisJZGNfZmx1c2godHJjbSk7Cit9CisKKyNpZm5kZWYgQkZBX1BFUkZfQlVJTEQKKyNkZWZpbmUgYmZhX3RyY19mcChfdHJjcCwgX2RhdGEpCWJmYV90cmMoX3RyY3AsIF9kYXRhKQorI2Vsc2UKKyNkZWZpbmUgYmZhX3RyY19mcChfdHJjcCwgX2RhdGEpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQkZBX1RSQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV93Yy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV93Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NjBiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3djLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfd2MuaCBHZW5lcmljIHdhaXQgY291bnRlci4KKyAqLworCisjaWZuZGVmIF9fQkZBX1dDX0hfXworI2RlZmluZSBfX0JGQV9XQ19IX18KKwordHlwZWRlZiB2b2lkICgqYmZhX3djX3Jlc3VtZV90KSAodm9pZCAqY2JhcmcpOworCitzdHJ1Y3QgYmZhX3djX3MgeworCWJmYV93Y19yZXN1bWVfdCB3Y19yZXN1bWU7CisJdm9pZAkJKndjX2NiYXJnOworCWludAkJd2NfY291bnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV93Y191cChzdHJ1Y3QgYmZhX3djX3MgKndjKQoreworCXdjLT53Y19jb3VudCsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV93Y19kb3duKHN0cnVjdCBiZmFfd2NfcyAqd2MpCit7CisJd2MtPndjX2NvdW50LS07CisJaWYgKHdjLT53Y19jb3VudCA9PSAwKQorCQl3Yy0+d2NfcmVzdW1lKHdjLT53Y19jYmFyZyk7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBhIHdhaXRpbmcgY291bnRlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitiZmFfd2NfaW5pdChzdHJ1Y3QgYmZhX3djX3MgKndjLCBiZmFfd2NfcmVzdW1lX3Qgd2NfcmVzdW1lLCB2b2lkICp3Y19jYmFyZykKK3sKKwl3Yy0+d2NfcmVzdW1lID0gd2NfcmVzdW1lOworCXdjLT53Y19jYmFyZyA9IHdjX2NiYXJnOworCXdjLT53Y19jb3VudCA9IDA7CisJYmZhX3djX3VwKHdjKTsKK30KKworLyoqCisgKiBXYWl0IGZvciBjb3VudGVyIHRvIHJlYWNoIHplcm8KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitiZmFfd2Nfd2FpdChzdHJ1Y3QgYmZhX3djX3MgKndjKQoreworCWJmYV93Y19kb3duKHdjKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hZGFwdGVyLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyMDhmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2FkYXB0ZXIuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfQURBUFRFUl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19BREFQVEVSX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX21mZy5oPgorCisvKioKKyAqIEJGQSBhZGFwdGVyIGxldmVsIGF0dHJpYnV0ZXMuCisgKi8KK2VudW0geworCUJGQV9BREFQVEVSX1NFUklBTF9OVU1fTEVOID0gU1RSU1ooQkZBX01GR19TRVJJQUxOVU1fU0laRSksCisJCQkJCS8qCisJCQkJCSAqITwgYWRhcHRlciBzZXJpYWwgbnVtIGxlbmd0aAorCQkJCQkgKi8KKwlCRkFfQURBUFRFUl9NT0RFTF9OQU1FX0xFTiAgPSAxNiwgIC8qICBtb2RlbCBuYW1lIGxlbmd0aCAqLworCUJGQV9BREFQVEVSX01PREVMX0RFU0NSX0xFTiA9IDEyOCwgLyogIG1vZGVsIGRlc2NyaXB0aW9uIGxlbmd0aCAqLworCUJGQV9BREFQVEVSX01GR19OQU1FX0xFTiAgICA9IDgsICAgLyogIG1hbnVmYWN0dXJlciBuYW1lIGxlbmd0aCAqLworCUJGQV9BREFQVEVSX1NZTV9OQU1FX0xFTiAgICA9IDY0LCAgLyogIGFkYXB0ZXIgc3ltYm9saWMgbmFtZSBsZW5ndGggKi8KKwlCRkFfQURBUFRFUl9PU19UWVBFX0xFTgkgICAgPSA2NCwgIC8qICBhZGFwdGVyIG9zIHR5cGUgbGVuZ3RoICovCit9OworCitzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zIHsKKwljaGFyICAgICAgICAgICAgbWFudWZhY3R1cmVyW0JGQV9BREFQVEVSX01GR19OQU1FX0xFTl07CisJY2hhciAgICAgICAgICAgIHNlcmlhbF9udW1bQkZBX0FEQVBURVJfU0VSSUFMX05VTV9MRU5dOworCXUzMglyc3ZkMTsKKwljaGFyICAgICAgICAgICAgbW9kZWxbQkZBX0FEQVBURVJfTU9ERUxfTkFNRV9MRU5dOworCWNoYXIgICAgICAgICAgICBtb2RlbF9kZXNjcltCRkFfQURBUFRFUl9NT0RFTF9ERVNDUl9MRU5dOworCXd3bl90ICAgICAgICAgICBwd3duOworCWNoYXIgICAgICAgICAgICBub2RlX3N5bW5hbWVbRkNfU1lNTkFNRV9NQVhdOworCWNoYXIgICAgICAgICAgICBod192ZXJbQkZBX1ZFUlNJT05fTEVOXTsKKwljaGFyICAgICAgICAgICAgZndfdmVyW0JGQV9WRVJTSU9OX0xFTl07CisJY2hhciAgICAgICAgICAgIG9wdHJvbV92ZXJbQkZBX1ZFUlNJT05fTEVOXTsKKwljaGFyICAgICAgICAgICAgb3NfdHlwZVtCRkFfQURBUFRFUl9PU19UWVBFX0xFTl07CisJc3RydWN0IGJmYV9tZmdfdnBkX3MJdnBkOworCXN0cnVjdCBtYWNfcwltYWM7CisKKwl1OAkJbnBvcnRzOworCXU4CQltYXhfc3BlZWQ7CisJdTgJCXByb3RvdHlwZTsKKwljaGFyCSAgICAgICAgYXNpY19yZXY7CisKKwl1OCAgICAgICAgIHBjaWVfZ2VuOworCXU4ICAgICAgICAgcGNpZV9sYW5lc19vcmlnOworCXU4ICAgICAgICAgcGNpZV9sYW5lczsKKwl1OAkgICAgICAgIGNuYV9jYXBhYmxlOworfTsKKworLyoqCisgKiBCRkEgYWRhcHRlciBsZXZlbCBldmVudHMKKyAqIEFyZ3VtZW50cyBiZWxvdyBhcmUgaW4gQkZBTCBjb250ZXh0IGZyb20gTWdtdAorICogQkZBX1BPUlRfQUVOX0FERDogICAgICAgIFtpbl06IE5vbmUgICAgIFtvdXRdOiBzZXJpYWxfbnVtLCBwd3duLCBucG9ydHMKKyAqIEJGQV9QT1JUX0FFTl9SRU1PVkU6ICAgICBbaW5dOiBwd3duICAgICBbb3V0XTogc2VyaWFsX251bSwgcHd3biwgbnBvcnRzCisgKi8KK2VudW0gYmZhX2FkYXB0ZXJfYWVuX2V2ZW50IHsKKwlCRkFfQURBUFRFUl9BRU5fQUREIAk9IDEsCS8qICBOZXcgQWRhcHRlciBmb3VuZCBldmVudCAqLworCUJGQV9BREFQVEVSX0FFTl9SRU1PVkUgCT0gMiwJLyogIEFkYXB0ZXIgcmVtb3ZlZCBldmVudCAqLworfTsKKworc3RydWN0IGJmYV9hZGFwdGVyX2Flbl9kYXRhX3MgeworCWNoYXIgICAgICAgICAgICBzZXJpYWxfbnVtW0JGQV9BREFQVEVSX1NFUklBTF9OVU1fTEVOXTsKKwl1MzIgICAgICAgIG5wb3J0czsJLyogIE51bWJlciBvZiBOUG9ydHMgKi8KKwl3d25fdCAgICAgICAgICAgcHd3bjsJLyogIFdXTiBvZiBvbmUgb2YgaXRzIHBoeXNpY2FsIHBvcnQgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0FEQVBURVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hZW4uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Flbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjODFhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hZW4uaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19BRU5fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQUVOX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19hZGFwdGVyLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19scG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcnBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2l0bmltLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190aW4uaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lwZmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2F1ZGl0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ldGhwb3J0Lmg+CisKK2VudW0gYmZhX2Flbl9jYXRlZ29yeSB7CisJQkZBX0FFTl9DQVRfQURBUFRFUiAJPSAxLAorCUJGQV9BRU5fQ0FUX1BPUlQgCT0gMiwKKwlCRkFfQUVOX0NBVF9MUE9SVCAJPSAzLAorCUJGQV9BRU5fQ0FUX1JQT1JUIAk9IDQsCisJQkZBX0FFTl9DQVRfSVROSU0gCT0gNSwKKwlCRkFfQUVOX0NBVF9USU4gCT0gNiwKKwlCRkFfQUVOX0NBVF9JUEZDIAk9IDcsCisJQkZBX0FFTl9DQVRfQVVESVQgCT0gOCwKKwlCRkFfQUVOX0NBVF9JT0MgCT0gOSwKKwlCRkFfQUVOX0NBVF9FVEhQT1JUCT0gMTAsCisJQkZBX0FFTl9NQVhfQ0FUIAk9IDEwCit9OworCisjcHJhZ21hIHBhY2soMSkKK3VuaW9uIGJmYV9hZW5fZGF0YV91IHsKKwlzdHJ1Y3QgYmZhX2FkYXB0ZXJfYWVuX2RhdGFfcyAJYWRhcHRlcjsKKwlzdHJ1Y3QgYmZhX3BvcnRfYWVuX2RhdGFfcyAJcG9ydDsKKwlzdHJ1Y3QgYmZhX2xwb3J0X2Flbl9kYXRhX3MgCWxwb3J0OworCXN0cnVjdCBiZmFfcnBvcnRfYWVuX2RhdGFfcyAJcnBvcnQ7CisJc3RydWN0IGJmYV9pdG5pbV9hZW5fZGF0YV9zIAlpdG5pbTsKKwlzdHJ1Y3QgYmZhX2F1ZGl0X2Flbl9kYXRhX3MgCWF1ZGl0OworCXN0cnVjdCBiZmFfaW9jX2Flbl9kYXRhX3MgCWlvYzsKKwlzdHJ1Y3QgYmZhX2V0aHBvcnRfYWVuX2RhdGFfcyAJZXRocG9ydDsKK307CisKK3N0cnVjdCBiZmFfYWVuX2VudHJ5X3MgeworCWVudW0gYmZhX2Flbl9jYXRlZ29yeSAJYWVuX2NhdGVnb3J5OworCWludAkJCWFlbl90eXBlOworCXVuaW9uIGJmYV9hZW5fZGF0YV91ICAJYWVuX2RhdGE7CisJc3RydWN0IGJmYV90aW1ldmFsX3MgICAJYWVuX3R2OworCXMzMiAgICAgICAgIAlzZXFfbnVtOworCXMzMiAgICAgICAgIAliZmFkX251bTsKKwlzMzIgICAgICAgICAJcnN2ZFsxXTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNkZWZpbmUgYmZhX2Flbl9ldmVudF90IGludAorCisjZW5kaWYgLyogX19CRkFfREVGU19BRU5fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdWRpdC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYXVkaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTNhOTYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYXVkaXQuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19BVURJVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19BVURJVF9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKworLyoqCisgKiBCRkEgYXVkaXQgZXZlbnRzCisgKi8KK2VudW0gYmZhX2F1ZGl0X2Flbl9ldmVudCB7CisJQkZBX0FVRElUX0FFTl9BVVRIX0VOQUJMRSAJPSAxLAorCUJGQV9BVURJVF9BRU5fQVVUSF9ESVNBQkxFIAk9IDIsCit9OworCisvKioKKyAqIGF1ZGl0IGV2ZW50IGRhdGEKKyAqLworc3RydWN0IGJmYV9hdWRpdF9hZW5fZGF0YV9zIHsKKwl3d25fdCAgICAgICAgICAgcHd3bjsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0FVRElUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYXV0aC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYXV0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTljODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdXRoLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19BVVRIX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0FVVEhfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisKKyNkZWZpbmUgUFVCTElDX0tFWQkJCTE1NDA5CisjZGVmaW5lIFBSSVZBVEVfS0VZCQkJMTkwMDkKKyNkZWZpbmUgS0VZX0xFTgkJCQkzMjM5OQorI2RlZmluZSBCRkFfQVVUSF9TRUNSRVRfU1RSSU5HX0xFTgkyNTYKKyNkZWZpbmUgQkZBX0FVVEhfRkFJTF9USU1FT1VUCQkweEZGCisKKy8qKgorICogQXV0aGVudGljYXRpb24gc3RhdHVzCisgKi8KK2VudW0gYmZhX2F1dGhfc3RhdHVzIHsKKwlCRkFfQVVUSF9TVEFUVVNfTk9ORSAJPSAwLAkvKiAgbm8gYXV0aGVudGljYXRpb24gKi8KKwlCRkFfQVVUSF9VTklOSVQgCT0gMSwJLyogIHN0YXRlIC0gdW5pbml0ICovCisJQkZBX0FVVEhfTkVHX1NFTkQgCT0gMiwJLyogIHN0YXRlIC0gbmVnb3RpYXRlIHNlbmQgKi8KKwlCRkFfQVVUSF9DSEFMX1dBSVQgCT0gMywJLyogIHN0YXRlIC0gY2hhbGxlbmdlIHdhaXQgKi8KKwlCRkFfQVVUSF9ORUdfUkVUUlkgCT0gNCwJLyogIHN0YXRlIC0gbmVnb3RpYXRlIHJldHJ5ICovCisJQkZBX0FVVEhfUkVQTFlfU0VORCAJPSA1LAkvKiAgc3RhdGUgLSByZXBseSBzZW5kICovCisJQkZBX0FVVEhfU1RBVFVTX1dBSVQgCT0gNiwJLyogIHN0YXRlIC0gc3RhdHVzIHdhaXQgKi8KKwlCRkFfQVVUSF9TVUNDRVNTIAk9IDcsCS8qICBzdGF0ZSAtIHN1Y2Nlc3MgKi8KKwlCRkFfQVVUSF9GQUlMRUQgCT0gOCwJLyogIHN0YXRlIC0gZmFpbGVkICovCisJQkZBX0FVVEhfU1RBVFVTX1VOS05PV04gPSA5LAkvKiAgYXV0aGVudGljYXRpb24gc3RhdHVzIHVua25vd24gKi8KK307CisKK3N0cnVjdCBhdXRoX3Byb3RvX3N0YXRzX3MgeworCXUzMiAgICAgICAgYXV0aF9yanRzOworCXUzMiAgICAgICAgYXV0aF9uZWdzOworCXUzMiAgICAgICAgYXV0aF9kb25lczsKKworCXUzMiAgICAgICAgZGhjaGFwX2NoYWxsZW5nZXM7CisJdTMyICAgICAgICBkaGNoYXBfcmVwbGllczsKKwl1MzIgICAgICAgIGRoY2hhcF9zdWNjZXNzZXM7Cit9OworCisvKioKKyAqIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX2F1dGhfc3RhdHNfcyB7CisJdTMyICAgICAgICAgICBhdXRoX2ZhaWx1cmVzOwkvKiAgYXV0aGVudGljYXRpb24gZmFpbHVyZXMgKi8KKwl1MzIgICAgICAgICAgIGF1dGhfc3VjY2Vzc2VzOwkvKiAgYXV0aGVudGljYXRpb24gc3VjY2Vzc2VzKi8KKwlzdHJ1Y3QgYXV0aF9wcm90b19zdGF0c19zIGF1dGhfcnhfc3RhdHM7IC8qICBSeCBwcm90b2NvbCBzdGF0cyAqLworCXN0cnVjdCBhdXRoX3Byb3RvX3N0YXRzX3MgYXV0aF90eF9zdGF0czsgLyogIFR4IHByb3RvY29sIHN0YXRzICovCit9OworCisvKioKKyAqIEF1dGhlbnRpY2F0aW9uIGhhc2ggZnVuY3Rpb24gYWxnb3JpdGhtcworICovCitlbnVtIGJmYV9hdXRoX2FsZ28geworCUJGQV9BVVRIX0FMR09fTUQ1IAk9IDEsCS8qICBNZXNzYWdlLURpZ2VzdCBhbGdvcml0aG0gNSAqLworCUJGQV9BVVRIX0FMR09fU0hBMSAJPSAyLAkvKiAgU2VjdXJlIEhhc2ggQWxnb3JpdGhtIDEgKi8KKwlCRkFfQVVUSF9BTEdPX01TIAk9IDMsCS8qICBNRDUsIHRoZW4gU0hBLTEgKi8KKwlCRkFfQVVUSF9BTEdPX1NNIAk9IDQsCS8qICBTSEEtMSwgdGhlbiBNRDUgKi8KK307CisKKy8qKgorICogREggR3JvdXBzCisgKgorICogQ3VycmVudCB2YWx1ZSBjb3VsZCBiZSBjb21iaW5hdGlvbiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcworICovCitlbnVtIGJmYV9hdXRoX2dyb3VwIHsKKwlCRkFfQVVUSF9HUk9VUF9ESE5VTEwgCT0gMCwJLyogIERIIE5VTEwgKHZhbHVlID09IDApICovCisJQkZBX0FVVEhfR1JPVVBfREg3NjggCT0gMSwJLyogIERIIGdyb3VwIDc2OCAodmFsdWUgPT0gMSkgKi8KKwlCRkFfQVVUSF9HUk9VUF9ESDEwMjQgCT0gMiwJLyogIERIIGdyb3VwIDEwMjQgKHZhbHVlID09IDIpICovCisJQkZBX0FVVEhfR1JPVVBfREgxMjgwIAk9IDQsCS8qICBESCBncm91cCAxMjgwICh2YWx1ZSA9PSAzKSAqLworCUJGQV9BVVRIX0dST1VQX0RIMTUzNiAJPSA4LAkvKiAgREggZ3JvdXAgMTUzNiAodmFsdWUgPT0gNCkgKi8KKworCUJGQV9BVVRIX0dST1VQX0FMTCAJPSAyNTYJLyogIFVzZSBkZWZhdWx0IERIIGdyb3VwIG9yZGVyCisJCQkJCSAqICAgIDAsIDEsIDIsIDMsIDQgKi8KK307CisKKy8qKgorICogQXV0aGVudGljYXRpb24gc2VjcmV0IHNvdXJjZXMKKyAqLworZW51bSBiZmFfYXV0aF9zZWNyZXRzb3VyY2UgeworCUJGQV9BVVRIX1NFQ1NSQ19MT0NBTCAJPSAxLAkvKiAgbG9jYWxseSBjb25maWd1cmVkICovCisJQkZBX0FVVEhfU0VDU1JDX1JBRElVUyAJPSAyLAkvKiAgdXNlIHJhZGl1cyBzZXJ2ZXIgKi8KKwlCRkFfQVVUSF9TRUNTUkNfVEFDQUNTIAk9IDMsCS8qICBUQUNBQ1Mgc2VydmVyICovCit9OworCisvKioKKyAqIEF1dGhlbnRpY2F0aW9uIGF0dHJpYnV0ZXMKKyAqLworc3RydWN0IGJmYV9hdXRoX2F0dHJfcyB7CisJZW51bSBiZmFfYXV0aF9zdGF0dXMgCXN0YXR1czsKKwllbnVtIGJmYV9hdXRoX2FsZ28gCWFsZ287CisJZW51bSBiZmFfYXV0aF9ncm91cCAJZGhfZ3JwOworCXUxNgkJcmp0X2NvZGU7CisJdTE2CQlyanRfY29kZV9leHA7CisJdTgJCQlzZWNyZXRfc2V0OworCXU4CQkJcmVzdls3XTsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0FVVEhfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ib290LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0YWE1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Jvb3QuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19CT09UX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0JPT1RfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisKK2VudW0geworCUJGQV9CT09UX0JPT1RMVU5fTUFYID0gNCwJLyogIG1heGltdW0gYm9vdCBsdW4gcGVyIElPQyAqLworfTsKKworI2RlZmluZSBCT09UX0NGR19SRVYxCTEKKworLyoqCisgKiAgICAgIEJvb3Qgb3B0aW9ucyBzZXR0aW5nLiBCb290IG9wdGlvbnMgc2V0dGluZyBkZXRlcm1pbmVzIGZyb20gd2hlcmUKKyAqICAgICAgdG8gZ2V0IHRoZSBib290IGx1biBpbmZvcm1hdGlvbgorICovCitlbnVtIGJmYV9ib290X2Jvb3RvcHQgeworICAgIEJGQV9CT09UX0FVVE9fRElTQ09WRVIgPSAwLCAgICAvKiAgQm9vdCBmcm9tIGJsdW4gcHJvdmlkZWQgYnkgZmFicmljICovCisgICAgQkZBX0JPT1RfU1RPUkVEX0JMVU4gICA9IDEsICAgIC8qICBCb290IGZyb20gYmx1bnMgc3RvcmVkIGluIGZsYXNoICAgKi8KKyAgICBCRkFfQk9PVF9GSVJTVF9MVU4gICAgID0gMiwgICAgLyogIEJvb3QgZnJvbSBmaXJzdCBkaXNjb3ZlcmVkIGJsdW4gICAqLworfTsKKworLyoqCisgKiBCb290IGx1biBpbmZvcm1hdGlvbi4KKyAqLworc3RydWN0IGJmYV9ib290X2Jvb3RsdW5fcyB7CisJd3duX3QgICAgICAgICAgIHB3d247CS8qICBwb3J0IHd3biBvZiB0YXJnZXQgKi8KKwlsdW5fdCAgICAgICAgICAgbHVuOwkvKiAgNjQtYml0IGx1biAqLworfTsKKworLyoqCisgKiBCT09UIGJvb3QgY29uZmlndXJhdG9uCisgKi8KK3N0cnVjdCBiZmFfYm9vdF9jZmdfcyB7CisJdTggICAgICAgICB2ZXJzaW9uOworCXU4ICAgICAgICAgcnN2ZDE7CisJdTE2ICAgICAgICBjaGtzdW07CisKKwl1OCAgICAgICAgIGVuYWJsZTsJCS8qICBlbmFibGUvZGlzYWJsZSBTQU4gYm9vdCAqLworCXU4ICAgICAgICAgc3BlZWQ7CQkvKiAgYm9vdCBzcGVlZCBzZXR0aW5ncyAqLworCXU4ICAgICAgICAgdG9wb2xvZ3k7CS8qICBib290IHRvcG9sb2d5IHNldHRpbmcgKi8KKwl1OCAgICAgICAgIGJvb3RvcHQ7CS8qICBiZmFfYm9vdF9ib290b3B0X3QgKi8KKworCXUzMiAgICAgICAgbmJsdW5zOwkJLyogIG51bWJlciBvZiBib290IGx1bnMgKi8KKworCXUzMiAgICAgICAgcnN2ZDI7CisKKwlzdHJ1Y3QgYmZhX2Jvb3RfYm9vdGx1bl9zIGJsdW5bQkZBX0JPT1RfQk9PVExVTl9NQVhdOworCXN0cnVjdCBiZmFfYm9vdF9ib290bHVuX3MgYmx1bl9kaXNjW0JGQV9CT09UX0JPT1RMVU5fTUFYXTsKK307CisKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfQk9PVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2NlZS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfY2VlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwYTIyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2NlZS5oCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiAgYmZhX2RlZnNfY2VlLmggSW50ZXJmYWNlIGRlY2xhcmF0aW9ucyBiZXR3ZWVuIGhvc3QgYmFzZWQKKyAqCUJGQUwgYW5kIERDQlgvTExEUCBtb2R1bGUgaW4gRmlybXdhcmUKKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfQ0VFX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0NFRV9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKyNkZWZpbmUgQkZBX0NFRV9MTERQX01BWF9TVFJJTkdfTEVOICgxMjgpCisKKworLyogRklYTUU6IHRoaXMgaXMgY29taW5nIGZyb20gdGhlIHByb3RvY29sIHNwZWMuIENhbiB0aGUgaG9zdCAmIGFwcHMgc2hhcmUgdGhlCisgICBwcm90b2NvbCAuaCBmaWxlcyA/CisgKi8KKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfT1RIRVIgICAgICAgMHgwMDAxCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1JFUEVBVEVSICAgIDB4MDAwMgorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9NQUNfQlJJREdFICAweDAwMDQKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfV0xBTl9BUCAgICAgMHgwMDA4CisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1JPVVRFUiAgICAgIDB4MDAxMAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9URUxFUEhPTkUgCSAweDAwMjAKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfRE9DU0lTX0NEICAgMHgwMDQwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1NUQVRJT04gICAgIDB4MDA4MAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9DVkxBTgkgICAgIDB4MDEwMAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9TVkxBTiAJICAgICAweDAyMDAKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfVFBNUgkJIDB4MDQwMAorCisKKy8qIExMRFAgc3RyaW5nIHR5cGUgKi8KK3N0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3MgeworCXU4IHN1Yl90eXBlOworCXU4IGxlbjsKKwl1OCByc3ZkWzJdOworCXU4IHZhbHVlW0JGQV9DRUVfTExEUF9NQVhfU1RSSU5HX0xFTl07Cit9OworCisKKy8qIExMRFAgcGFyYW10ZXJzICovCitzdHJ1Y3QgYmZhX2NlZV9sbGRwX2NmZ19zIHsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIGNoYXNzaXNfaWQ7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyBwb3J0X2lkOworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3MgcG9ydF9kZXNjOworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3Mgc3lzX25hbWU7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyBzeXNfZGVzYzsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIG1nbXRfYWRkcjsKKwl1MTYgICAgdGltZV90b19pbnRlcnZhbDsKKwl1MTYgICAgZW5hYmxlZF9zeXN0ZW1fY2FwOworfTsKKworZW51bSBiZmFfY2VlX2RjYnhfdmVyc2lvbl9lIHsKKwlEQ0JYX1BST1RPQ09MX1BSRUNFRSA9IDEsCisJRENCWF9QUk9UT0NPTF9DRUUgICAgPSAyLAorfTsKKworZW51bSBiZmFfY2VlX2xsc19lIHsKKwlDRUVfTExTX0RPV05fTk9fVExWID0gMCwgLyogTExTIGlzIGRvd24gYmVjYXVzZSB0aGUgVExWIG5vdCBzZW50IGJ5CisJCQkJICAqIHRoZSBwZWVyICovCisJQ0VFX0xMU19ET1dOICAgICAgICA9IDEsIC8qIExMUyBpcyBkb3duIGFzIGFkdmVydGlzZWQgYnkgdGhlIHBlZXIgKi8KKwlDRUVfTExTX1VQICAgICAgICAgID0gMiwKK307CisKKy8qIENFRS9EQ0JYIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBiZmFfY2VlX2RjYnhfY2ZnX3MgeworCXU4IHBnaWRbOF07CisJdTggcGdfcGVyY2VudGFnZVs4XTsKKwl1OCBwZmNfZW5hYmxlZDsgICAgICAgICAgLyogYml0bWFwIG9mIHByaW9ydGllcyB3aXRoIFBGQyBlbmFibGVkICovCisJdTggZmNvZV91c2VyX3ByaW9yaXR5OyAgIC8qIGJpdG1hcCBvZiBwcmlvcml0aWVzIHVzZWQgZm9yIEZjb0UKKwkJCQkgICAgICAgKiB0cmFmZmljICovCisJdTggZGNieF92ZXJzaW9uOwkvKiBvcGVyYXRpbmcgdmVyc2lvbjpDRUUgb3IgcHJlQ0VFICovCisJdTggbGxzX2Zjb2U7CS8qIEZDb0UgTG9naWNhbCBMaW5rIFN0YXR1cyAqLworCXU4IGxsc19sYW47CS8qIExBTiBMb2dpY2FsIExpbmsgU3RhdHVzICovCisJdTggcnN2ZFszXTsKK307CisKKy8qIENFRSBzdGF0dXMgKi8KKy8qIE1ha2luZyB0aGlzIHRvIHRyaS1zdGF0ZSBmb3IgdGhlIGJlbmVmaXQgb2YgcG9ydCBsaXN0IGNvbW1hbmQgKi8KK2VudW0gYmZhX2NlZV9zdGF0dXNfZSB7CisgICAgQ0VFX1BIWV9ET1dOID0gMCwKKyAgICBDRUVfUEhZX1VQID0gMSwKKyAgICBDRUVfVVAgPSAyLAorfTsKKworLyogQ0VFIFF1ZXJ5ICovCitzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgeworCXU4ICAgICAgICAgICAgICAgICAgIGNlZV9zdGF0dXM7CisJdTggICAgICAgICAgICAgICAgICAgZXJyb3JfcmVhc29uOworCXN0cnVjdCBiZmFfY2VlX2xsZHBfY2ZnX3MgbGxkcF9yZW1vdGU7CisJc3RydWN0IGJmYV9jZWVfZGNieF9jZmdfcyBkY2J4X3JlbW90ZTsKKwltYWNfdCBzcmNfbWFjOworCXU4IGxpbmtfc3BlZWQ7CisJdTggZmlsbGVyWzNdOworfTsKKworCisKKworLyogTExEUC9EQ0JYL0NFRSBTdGF0aXN0aWNzICovCisKK3N0cnVjdCBiZmFfY2VlX2xsZHBfc3RhdHNfcyB7CisJdTMyIGZyYW1lc190cmFuc21pdHRlZDsKKwl1MzIgZnJhbWVzX2FnZWRfb3V0OworCXUzMiBmcmFtZXNfZGlzY2FyZGVkOworCXUzMiBmcmFtZXNfaW5fZXJyb3I7CisJdTMyIGZyYW1lc19yY3ZkOworCXUzMiB0bHZzX2Rpc2NhcmRlZDsKKwl1MzIgdGx2c191bnJlY29nbml6ZWQ7Cit9OworCitzdHJ1Y3QgYmZhX2NlZV9kY2J4X3N0YXRzX3MgeworCXUzMiBzdWJ0bHZzX3VucmVjb2duaXplZDsKKwl1MzIgbmVnb3RpYXRpb25fZmFpbGVkOworCXUzMiByZW1vdGVfY2ZnX2NoYW5nZWQ7CisJdTMyIHRsdnNfcmVjZWl2ZWQ7CisJdTMyIHRsdnNfaW52YWxpZDsKKwl1MzIgc2Vxbm87CisJdTMyIGFja25vOworCXUzMiByZWN2ZF9zZXFubzsKKwl1MzIgcmVjdmRfYWNrbm87Cit9OworCitzdHJ1Y3QgYmZhX2NlZV9jZmdfc3RhdHNfcyB7CisJdTMyIGNlZV9zdGF0dXNfZG93bjsKKwl1MzIgY2VlX3N0YXR1c191cDsKKwl1MzIgY2VlX2h3X2NmZ19jaGFuZ2VkOworCXUzMiByZWN2ZF9pbnZhbGlkX2NmZzsKK307CisKKworc3RydWN0IGJmYV9jZWVfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdGF0c19zIGxsZHBfc3RhdHM7CisJc3RydWN0IGJmYV9jZWVfZGNieF9zdGF0c19zIGRjYnhfc3RhdHM7CisJc3RydWN0IGJmYV9jZWVfY2ZnX3N0YXRzX3MgIGNmZ19zdGF0czsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKworI2VuZGlmCS8qIF9fQkZBX0RFRlNfQ0VFX0hfXyAqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2RyaXZlci5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwNDk4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2RyaXZlci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0RSSVZFUl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19EUklWRVJfSF9fCisKKy8qKgorICogRHJpdmVyIHN0YXRpc3RpY3MKKyAqLworCXUxNiAgICB0bV9pb19hYm9ydDsKKyAgICB1MTYgICAgdG1faW9fYWJvcnRfY29tcDsKKyAgICB1MTYgICAgdG1fbHVuX3Jlc2V0OworICAgIHUxNiAgICB0bV9sdW5fcmVzZXRfY29tcDsKKyAgICB1MTYgICAgdG1fdGFyZ2V0X3Jlc2V0OworICAgIHUxNiAgICB0bV9idXNfcmVzZXQ7CisgICAgdTE2ICAgIGlvY19yZXN0YXJ0OyAgICAgICAgLyogIElPQyByZXN0YXJ0IGNvdW50ICovCisgICAgdTE2ICAgIGlvX3BlbmRpbmc7ICAgICAgICAgLyogIG91dHN0YW5kaW5nIGlvIGNvdW50IHBlci1JT0MgKi8KKyAgICB1NjQgICAgY29udHJvbF9yZXE7CisgICAgdTY0ICAgIGlucHV0X3JlcTsKKyAgICB1NjQgICAgb3V0cHV0X3JlcTsKKyAgICB1NjQgICAgaW5wdXRfd29yZHM7CisgICAgdTY0ICAgIG91dHB1dF93b3JkczsKK30gYmZhX2RyaXZlcl9zdGF0c190OworCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0RSSVZFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2V0aHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2V0aHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWY5YjNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZXRocG9ydC5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0VUSFBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfRVRIUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxjbmEvcHN0YXRzL3BoeXBvcnRfZGVmcy5oPgorI2luY2x1ZGUgPGNuYS9wc3RhdHMvZXRocG9ydF9kZWZzLmg+CisKK3N0cnVjdCBibmFfdHhfaW5mb19zIHsKKwl1MzIgICAgbWluaXBvcnRfc3RhdGU7CisJdTMyICAgIGFkYXB0ZXJfc3RhdGU7CisJdTY0ICAgIHR4X2NvdW50OworCXU2NCAgICB0eF93aTsKKwl1NjQgICAgdHhfc2c7CisJdTY0ICAgIHR4X3RjcF9jaGtzdW07CisJdTY0ICAgIHR4X3VkcF9jaGtzdW07CisJdTY0ICAgIHR4X2lwX2Noa3N1bTsKKwl1NjQgICAgdHhfbHNvdjE7CisJdTY0ICAgIHR4X2xzb3YyOworCXU2NCAgICB0eF9tYXhfc2dfbGVuIDsKK307CisKK3N0cnVjdCBibmFfcnhfcXVldWVfaW5mb19zIHsKKwl1MTYgICAgcV9pZCA7CisJdTE2ICAgIGJ1Zl9zaXplIDsKKwl1MTYgICAgYnVmX2NvdW50IDsKKwl1MTYgICAgcnN2ZCA7CisJdTY0ICAgIHJ4X2NvdW50IDsKKwl1NjQgICAgcnhfZHJvcHBlZCA7CisJdTY0ICAgIHJ4X3Vuc3VwcG9ydGVkIDsKKwl1NjQgICAgcnhfaW50ZXJuYWxfZXJyIDsKKwl1NjQgICAgcnNzX2NvdW50IDsKKwl1NjQgICAgdmxhbl9jb3VudCA7CisJdTY0ICAgIHJ4X3RjcF9jaGtzdW0gOworCXU2NCAgICByeF91ZHBfY2hrc3VtIDsKKwl1NjQgICAgcnhfaXBfY2hrc3VtIDsKKwl1NjQgICAgcnhfaGRzIDsKK307CisKK3N0cnVjdCBibmFfcnhfcV9zZXRfcyB7CisJdTE2ICAgIHFfc2V0X3R5cGU7CisJdTMyICAgIG1pbmlwb3J0X3N0YXRlOworCXUzMiAgICBhZGFwdGVyX3N0YXRlOworCXN0cnVjdCBibmFfcnhfcXVldWVfaW5mb19zICAgIHJ4X3F1ZXVlWzJdOworfTsKKworc3RydWN0IGJuYV9wb3J0X3N0YXRzX3MgeworCXN0cnVjdCBibmFfdHhfaW5mb19zICAgdHhfc3RhdHM7CisJdTE2ICAgICAgICBxc2V0X2NvdW50IDsKKwlzdHJ1Y3QgYm5hX3J4X3Ffc2V0X3MgIHJ4X3FzZXRbOF07Cit9OworCitzdHJ1Y3QgYmZhX2V0aHBvcnRfc3RhdHNfcyB7CisJc3RydWN0IGJuYV9zdGF0c190eGYJdHhmX3N0YXRzWzFdOworCXN0cnVjdCBibmFfc3RhdHNfcnhmCXJ4Zl9zdGF0c1sxXTsKKwlzdHJ1Y3QgYm5hZF9kcnZfc3RhdHMgZHJ2X3N0YXRzOworfTsKKworLyoqCisgKiBFdGhlcm5ldCBwb3J0IGV2ZW50cworICogQXJndW1lbnRzIGJlbG93IGFyZSBpbiBCRkFMIGNvbnRleHQgZnJvbSBNZ210CisgKiBCRkFfUE9SVF9BRU5fRVRIX0xJTktVUDogICAgW2luXTogbWFjIFtvdXRdOiBtYWMKKyAqIEJGQV9QT1JUX0FFTl9FVEhfTElOS0RPV046ICBbaW5dOiBtYWMgW291dF06IG1hYworICogQkZBX1BPUlRfQUVOX0VUSF9FTkFCTEU6ICBbaW5dOiBtYWMgW291dF06IG1hYworICogQkZBX1BPUlRfQUVOX0VUSF9ESVNBQkxFOiAgW2luXTogbWFjIFtvdXRdOiBtYWMKKyAqCisgKi8KK2VudW0gYmZhX2V0aHBvcnRfYWVuX2V2ZW50IHsKKwlCRkFfRVRIUE9SVF9BRU5fTElOS1VQID0gMSwgLyogIEJhc2UgUG9ydCBFdGhlcm5ldCBsaW5rIHVwIGV2ZW50ICovCisJQkZBX0VUSFBPUlRfQUVOX0xJTktET1dOID0gMiwgLyogIEJhc2UgUG9ydCBFdGhlcm5ldCBsaW5rIGRvd24gZXZlbnQgKi8KKwlCRkFfRVRIUE9SVF9BRU5fRU5BQkxFID0gMywgLyogIEJhc2UgUG9ydCBFdGhlcm5ldCBsaW5rIGVuYWJsZSBldmVudCAqLworCUJGQV9FVEhQT1JUX0FFTl9ESVNBQkxFID0gNCwgLyogIEJhc2UgUG9ydCBFdGhlcm5ldCBsaW5rIGRpc2FibGUKKwkJCQkgICAgICAqIGV2ZW50ICovCit9OworCitzdHJ1Y3QgYmZhX2V0aHBvcnRfYWVuX2RhdGFfcyB7CisJbWFjX3QgbWFjOwkvKiAgTUFDIGFkZHJlc3Mgb2YgdGhlIHBoeXNpY2FsIHBvcnQgKi8KK307CisKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfRVRIUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ZjcGltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19mY3BpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOGY0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19mY3BpbS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19GQ1BJTV9IX18KKyNkZWZpbmUgX19CRkFfREVGU19GQ1BJTV9IX18KKworc3RydWN0IGJmYV9mY3BpbV9zdGF0c19zIHsKKwl1MzIgICAgICAgIHRvdGFsX2lvczsJLyogIFRvdGFsIElPIGNvdW50ICovCisJdTMyICAgICAgICBxcmVzdW1lczsJLyogIElPIHdhaXRpbmcgZm9yIENRIHNwYWNlICovCisJdTMyICAgICAgICBub19pb3RhZ3M7CS8qICBOTyBJTyBjb250ZXh0cyAqLworCXUzMiAgICAgICAgaW9fYWJvcnRzOwkvKiAgSU8gYWJvcnQgcmVxdWVzdHMgKi8KKwl1MzIgICAgICAgIG5vX3Rza2ltczsJLyogIE5PIHRhc2sgbWFuYWdlbWVudCBjb250ZXh0cyAqLworCXUzMiAgICAgICAgaW9jb21wX29rOwkvKiAgSU8gY29tcGxldGlvbnMgd2l0aCBPSyBzdGF0dXMgKi8KKwl1MzIgICAgICAgIGlvY29tcF91bmRlcnJ1bjsJLyogIElPIHVuZGVycnVuIChnb29kKSAqLworCXUzMiAgICAgICAgaW9jb21wX292ZXJydW47CS8qICBJTyBvdmVycnVuIChnb29kKSAqLworCXUzMiAgICAgICAgaW9jb21wX2Fib3J0ZWQ7CS8qICBBYm9ydGVkIElPIHJlcXVlc3RzICovCisJdTMyICAgICAgICBpb2NvbXBfdGltZWRvdXQ7CS8qICBJTyB0aW1lb3V0cyAqLworCXUzMiAgICAgICAgaW9jb21fbmV4dXNfYWJvcnQ7CS8qICBJTyBzZWxlY3Rpb24gdGltZW91dHMgKi8KKwl1MzIgICAgICAgIGlvY29tX3Byb3RvX2VycjsJLyogIElPIHByb3RvY29sIGVycm9ycyAqLworCXUzMiAgICAgICAgaW9jb21fZGlmX2VycjsJLyogIElPIFNCQy0zIHByb3RlY3Rpb24gZXJyb3JzICovCisJdTMyICAgICAgICBpb2NvbV90bV9hYm9ydDsJLyogIElPIGFib3J0ZWQgYnkgVE0gcmVxdWVzdHMgKi8KKwl1MzIgICAgICAgIGlvY29tX3NxZXJfbmVlZGVkOwkvKiAgSU8gcmV0cnkgZm9yIFNRIGVycm9yCisJCQkJCQkgKnJlY292ZXJ5ICovCisJdTMyICAgICAgICBpb2NvbV9yZXNfZnJlZTsJLyogIERlbGF5ZWQgZnJlZWluZyBvZiBJTyByZXNvdXJjZXMgKi8KKwl1MzIgICAgICAgIGlvY29tcF9zY3NpZXJyOwkvKiAgSU8gd2l0aCBub24tZ29vZCBTQ1NJIHN0YXR1cyAqLworCXUzMiAgICAgICAgaW9jb21faG9zdGFicnRzOwkvKiAgSG9zdCBJTyBhYm9ydCByZXF1ZXN0cyAqLworCXUzMiAgICAgICAgaW9jb21fdXRhZ3M7CS8qICBJTyBjb21wIHdpdGggdW5rbm93biB0YWdzICovCisJdTMyICAgICAgICBpb19jbGVhbnVwczsJLyogIElPIGltcGxpY2l0bHkgYWJvcnRlZCAqLworCXUzMiAgICAgICAgaW9fdG1hYm9ydHM7CS8qICBJTyBhYm9ydGVkIGR1ZSB0byBUTSBjb21tYW5kcyAqLworCXUzMiAgICAgICAgcnN2ZDsKK307CisjZW5kaWYgLypfX0JGQV9ERUZTX0ZDUElNX0hfXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pbV9jb21tb24uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljY2Y1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pbV9jb21tb24uaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19JTV9DT01NT05fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfSU1fQ09NTU9OX0hfXworCisjZGVmaW5lCUJGQV9BREFQVEVSX05BTUVfTEVOCTI1NgorI2RlZmluZSBCRkFfQURBUFRFUl9HVUlEX0xFTiAgICAyNTYKKyNkZWZpbmUgUkVTRVJWRURfVkxBTl9OQU1FICAgICAgTCJQT1JUIFZMQU4iCisjZGVmaW5lIFBBU1NUSFJVX1ZMQU5fTkFNRSAgICAgIEwiUEFTU1RIUlUgVkxBTiIKKworCXU2NAl0eF9wa3RfY250OworCXU2NAlyeF9wa3RfY250OworCXUzMglkdXJhdGlvbjsKKwl1OAkJc3RhdHVzOworfSBiZmFfaW1fc3RhdHNfdCwgKnBiZmFfaW1fc3RhdHNfdDsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfSU1fQ09NTU9OX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW1fdGVhbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW1fdGVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODZhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pbV90ZWFtLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfSU1fVEVBTV9IX18KKyNkZWZpbmUgX19CRkFfREVGU19JTV9URUFNX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI2RlZmluZQlCRkFfVEVBTV9NQVhfUE9SVFMJOAorI2RlZmluZQlCRkFfVEVBTV9OQU1FX0xFTgkyNTYKKyNkZWZpbmUgQkZBX01BWF9OVU1fVEVBTVMJMTYKKyNkZWZpbmUgQkZBX1RFQU1fSU5WQUxJRF9ERUxBWSAtMQorCisJQkZBX0xBQ1BfUkFURV9TTE9XID0gMSwKKwlCRkFfTEFDUF9SQVRFX0ZBU1QKK30gYmZhX2ltX2xhY3BfcmF0ZV90OworCisJQkZBX1RFQU1fTU9ERV9GQUlMX09WRVIgPSAxLAorCUJGQV9URUFNX01PREVfRkFJTF9CQUNLLAorCUJGQV9URUFNX01PREVfTEFDUCwKKwlCRkFfVEVBTV9NT0RFX05PTkUKK30gYmZhX2ltX3RlYW1fbW9kZV90OworCisJQkZBX1hNSVRfUE9MSUNZX0wyID0gMSwKKwlCRkFfWE1JVF9QT0xJQ1lfTDNfTDQKK30gYmZhX2ltX3htaXRfcG9saWN5X3Q7CisKKwliZmFfaW1fdGVhbV9tb2RlX3QgICAgIHRlYW1fbW9kZTsKKwliZmFfaW1fbGFjcF9yYXRlX3QgICAgIGxhY3BfcmF0ZTsKKwliZmFfaW1feG1pdF9wb2xpY3lfdCAgIHhtaXRfcG9saWN5OworCWludCAgIAkgICAgICAgICAgZGVsYXk7CisJd2NoYXJfdCAgICAJICBwcmltYXJ5W0JGQV9BREFQVEVSX05BTUVfTEVOXTsKKwl3Y2hhcl90ICAgICAgICAJICBwcmVmZXJyZWRfcHJpbWFyeVtCRkFfQURBUFRFUl9OQU1FX0xFTl07CisJbWFjX3QJICAgICAgICAgIG1hYzsKKwl1MTYgICAgICAgCSAgbnVtX3BvcnRzOworCXUxNiAgICAgICAgICBudW1fdmxhbnM7CisJdTE2IHZsYW5fbGlzdFtCRkFfTUFYX1ZMQU5TX1BFUl9QT1JUXTsKKwl3Y2hhcl90CSB0ZWFtX2d1aWRfbGlzdFtCRkFfVEVBTV9NQVhfUE9SVFNdW0JGQV9BREFQVEVSX0dVSURfTEVOXTsKKwl3Y2hhcl90CSBpb2NfbmFtZV9saXN0W0JGQV9URUFNX01BWF9QT1JUU11bQkZBX0FEQVBURVJfTkFNRV9MRU5dOworfSBiZmFfaW1fdGVhbV9hdHRyX3Q7CisKKwl3Y2hhcl90CQkgICAgICAgICAgICAgdGVhbV9uYW1lW0JGQV9URUFNX05BTUVfTEVOXTsKKwliZmFfaW1feG1pdF9wb2xpY3lfdAkgeG1pdF9wb2xpY3k7CisJaW50ICAgICAgICAgICAgICAgICAJIGRlbGF5OworCXdjaGFyX3QgICAgICAgICAgICAgICAgCSBwcmltYXJ5W0JGQV9BREFQVEVSX05BTUVfTEVOXTsKKwl3Y2hhcl90ICAgICAgICAgICAgICAgCSBwcmVmZXJyZWRfcHJpbWFyeVtCRkFfQURBUFRFUl9OQU1FX0xFTl07Cit9IGJmYV9pbV90ZWFtX2VkaXRfdCwgKnBiZmFfaW1fdGVhbV9lZGl0X3Q7CisKKwl3Y2hhcl90CQkJCQl0ZWFtX25hbWVbQkZBX1RFQU1fTkFNRV9MRU5dOworCWJmYV9pbV90ZWFtX21vZGVfdCAgICAgIHRlYW1fbW9kZTsKKwltYWNfdAkgICAgICAgICAgICAgICAJbWFjOworfSBiZmFfaW1fdGVhbV9pbmZvX3Q7CisKKwliZmFfaW1fdGVhbV9pbmZvX3QgCQl0ZWFtX2luZm9bQkZBX01BWF9OVU1fVEVBTVNdOworCXUxNiAJCQkJbnVtX3RlYW1zOworfSBiZmFfaW1fdGVhbV9saXN0X3QsICpwYmZhX2ltX3RlYW1fbGlzdF90OworCisjZW5kaWYgLyogX19CRkFfREVGU19JTV9URUFNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW9jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWQ1MzJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW9jLmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0lPQ19IX18KKyNkZWZpbmUgX19CRkFfREVGU19JT0NfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2FkYXB0ZXIuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BtLmg+CisKK2VudW0geworCUJGQV9JT0NfRFJJVkVSX0xFTgk9IDE2LAorCUJGQV9JT0NfQ0hJUF9SRVZfTEVOIAk9IDgsCit9OworCisvKioKKyAqIERyaXZlciBhbmQgZmlybXdhcmUgdmVyc2lvbnMuCisgKi8KK3N0cnVjdCBiZmFfaW9jX2RyaXZlcl9hdHRyX3MgeworCWNoYXIgICAgICAgICAgICBkcml2ZXJbQkZBX0lPQ19EUklWRVJfTEVOXTsJLyogIGRyaXZlciBuYW1lICovCisJY2hhciAgICAgICAgICAgIGRyaXZlcl92ZXJbQkZBX1ZFUlNJT05fTEVOXTsJLyogIGRyaXZlciB2ZXJzaW9uICovCisJY2hhciAgICAgICAgICAgIGZ3X3ZlcltCRkFfVkVSU0lPTl9MRU5dOwkvKiAgZmlybXdhcmUgdmVyc2lvbiovCisJY2hhciAgICAgICAgICAgIGJpb3NfdmVyW0JGQV9WRVJTSU9OX0xFTl07CS8qICBiaW9zIHZlcnNpb24gKi8KKwljaGFyICAgICAgICAgICAgZWZpX3ZlcltCRkFfVkVSU0lPTl9MRU5dOwkvKiAgRUZJIHZlcnNpb24gKi8KKwljaGFyICAgICAgICAgICAgb2JfdmVyW0JGQV9WRVJTSU9OX0xFTl07CS8qICBvcGVuYm9vdCB2ZXJzaW9uKi8KK307CisKKy8qKgorICogSU9DIFBDSSBkZXZpY2UgYXR0cmlidXRlcworICovCitzdHJ1Y3QgYmZhX2lvY19wY2lfYXR0cl9zIHsKKwl1MTYgICAgICAgIHZlbmRvcl9pZDsJLyogIFBDSSB2ZW5kb3IgSUQgKi8KKwl1MTYgICAgICAgIGRldmljZV9pZDsJLyogIFBDSSBkZXZpY2UgSUQgKi8KKwl1MTYgICAgICAgIHNzaWQ7CQkvKiAgc3Vic3lzdGVtIElEICovCisJdTE2ICAgICAgICBzc3ZpZDsJCS8qICBzdWJzeXN0ZW0gdmVuZG9yIElEICovCisJdTMyICAgICAgICBwY2lmbjsJCS8qICBQQ0kgZGV2aWNlIGZ1bmN0aW9uICovCisJdTMyICAgICAgICByc3ZkOwkJLyogcGFkZGluZyAqLworCXU4ICAgICAgICAgY2hpcF9yZXZbQkZBX0lPQ19DSElQX1JFVl9MRU5dOwkgLyogIGNoaXAgcmV2aXNpb24gKi8KK307CisKKy8qKgorICogSU9DIHN0YXRlcworICovCitlbnVtIGJmYV9pb2Nfc3RhdGUgeworCUJGQV9JT0NfUkVTRVQgICAgICAgPSAxLCAgLyogIElPQyBpcyBpbiByZXNldCBzdGF0ZSAqLworCUJGQV9JT0NfU0VNV0FJVCAgICAgPSAyLCAgLyogIFdhaXRpbmcgZm9yIElPQyBoYXJkd2FyZSBzZW1hcGhvcmUgKi8KKwlCRkFfSU9DX0hXSU5JVCAJICAgID0gMywgIC8qICBJT0MgaGFyZHdhcmUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfSU9DX0dFVEFUVFIgICAgID0gNCwgIC8qICBJT0MgaXMgYmVpbmcgY29uZmlndXJlZCAqLworCUJGQV9JT0NfT1BFUkFUSU9OQUwgPSA1LCAgLyogIElPQyBpcyBvcGVyYXRpb25hbCAqLworCUJGQV9JT0NfSU5JVEZBSUwgICAgPSA2LCAgLyogIElPQyBoYXJkd2FyZSBmYWlsdXJlICovCisJQkZBX0lPQ19IQkZBSUwgICAgICA9IDcsICAvKiAgSU9DIGhlYXJ0LWJlYXQgZmFpbHVyZSAqLworCUJGQV9JT0NfRElTQUJMSU5HICAgPSA4LCAgLyogIElPQyBpcyBiZWluZyBkaXNhYmxlZCAqLworCUJGQV9JT0NfRElTQUJMRUQgICAgPSA5LCAgLyogIElPQyBpcyBkaXNhYmxlZCAqLworCUJGQV9JT0NfRldNSVNNQVRDSCAgPSAxMCwgLyogIElPQyBmaXJtd2FyZSBkaWZmZXJlbnQgZnJvbSBkcml2ZXJzICovCit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBzdGF0cworICovCitzdHJ1Y3QgYmZhX2Z3X2lvY19zdGF0c19zIHsKKwl1MzIgICAgICAgIGhiX2NvdW50OworCXUzMiAgICAgICAgY2ZnX3JlcXM7CisJdTMyICAgICAgICBlbmFibGVfcmVxczsKKwl1MzIgICAgICAgIGRpc2FibGVfcmVxczsKKwl1MzIgICAgICAgIHN0YXRzX3JlcXM7CisJdTMyICAgICAgICBjbHJzdGF0c19yZXFzOworCXUzMiAgICAgICAgdW5rbm93bl9yZXFzOworCXUzMiAgICAgICAgaWNfcmVxczsJCS8qICBpbnRlcnJ1cHQgY29hbGVzY2UgcmVxcyAqLworfTsKKworLyoqCisgKiBJT0MgZHJpdmVyIHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfaW9jX2Rydl9zdGF0c19zIHsKKwl1MzIJaW9jX2lzcnM7CisJdTMyCWlvY19lbmFibGVzOworCXUzMglpb2NfZGlzYWJsZXM7CisJdTMyCWlvY19oYmZhaWxzOworCXUzMglpb2NfYm9vdHM7CisJdTMyCXN0YXRzX3Rtb3M7CisJdTMyICAgICAgICBoYl9jb3VudDsKKwl1MzIgICAgICAgIGRpc2FibGVfcmVxczsKKwl1MzIgICAgICAgIGVuYWJsZV9yZXFzOworCXUzMiAgICAgICAgZGlzYWJsZV9yZXBsaWVzOworCXUzMiAgICAgICAgZW5hYmxlX3JlcGxpZXM7Cit9OworCisvKioKKyAqIElPQyBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfaW9jX3N0YXRzX3MgeworCXN0cnVjdCBiZmFfaW9jX2Rydl9zdGF0c19zCWRydl9zdGF0czsgLyogIGRyaXZlciBJT0Mgc3RhdHMgKi8KKwlzdHJ1Y3QgYmZhX2Z3X2lvY19zdGF0c19zIAlmd19zdGF0czsgIC8qICBmaXJtd2FyZSBJT0Mgc3RhdHMgKi8KK307CisKKworZW51bSBiZmFfaW9jX3R5cGVfZSB7CisJQkZBX0lPQ19UWVBFX0ZDCSAgPSAxLAorCUJGQV9JT0NfVFlQRV9GQ29FID0gMiwKKwlCRkFfSU9DX1RZUEVfTEwJICA9IDMsCit9OworCisvKioKKyAqIElPQyBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9pb2NfYXR0cl9zIHsKKwllbnVtIGJmYV9pb2NfdHlwZV9lCQlpb2NfdHlwZTsKKwllbnVtIGJmYV9pb2Nfc3RhdGUgCQlzdGF0ZTsJCS8qICBJT0Mgc3RhdGUgICAgICAqLworCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MJYWRhcHRlcl9hdHRyOwkvKiAgSEJBIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgYmZhX2lvY19kcml2ZXJfYXR0cl9zIAlkcml2ZXJfYXR0cjsJLyogIGRyaXZlciBhdHRyICAgICovCisJc3RydWN0IGJmYV9pb2NfcGNpX2F0dHJfcwlwY2lfYXR0cjsKKwl1OAkJCQlwb3J0X2lkOwkvKiAgcG9ydCBudW1iZXIgICAgKi8KK307CisKKy8qKgorICogQkZBIElPQyBsZXZlbCBldmVudHMKKyAqLworZW51bSBiZmFfaW9jX2Flbl9ldmVudCB7CisJQkZBX0lPQ19BRU5fSEJHT09ECT0gMSwJLyogIEhlYXJ0IEJlYXQgcmVzdG9yZSBldmVudAkqLworCUJGQV9JT0NfQUVOX0hCRkFJTAk9IDIsCS8qICBIZWFydCBCZWF0IGZhaWx1cmUgZXZlbnQJKi8KKwlCRkFfSU9DX0FFTl9FTkFCTEUJPSAzLAkvKiAgSU9DIGVuYWJsZWQgZXZlbnQJCSovCisJQkZBX0lPQ19BRU5fRElTQUJMRQk9IDQsCS8qICBJT0MgZGlzYWJsZWQgZXZlbnQJCSovCisJQkZBX0lPQ19BRU5fRldNSVNNQVRDSAk9IDUsCS8qICBJT0MgZmlybXdhcmUgbWlzbWF0Y2gJKi8KK307CisKKy8qKgorICogQkZBIElPQyBsZXZlbCBldmVudCBkYXRhLCBub3cganVzdCBhIHBsYWNlIGhvbGRlcgorICovCitzdHJ1Y3QgYmZhX2lvY19hZW5fZGF0YV9zIHsKKwllbnVtIGJmYV9pb2NfdHlwZV9lIGlvY190eXBlOworCXd3bl90CXB3d247CisJbWFjX3QJbWFjOworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfSU9DX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2NmYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW9jZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzZiY2JkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW9jZmMuaApAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfSU9DRkNfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfSU9DRkNfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2FkYXB0ZXIuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BtLmg+CisKKyNkZWZpbmUgQkZBX0lPQ0ZDX0lOVFJfREVMQVkJMTEyNQorI2RlZmluZSBCRkFfSU9DRkNfSU5UUl9MQVRFTkNZCTIyNQorCisvKioKKyAqIEludGVycnVwdCBjb2FsZXNjaW5nIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0cnVjdCBiZmFfaW9jZmNfaW50cl9hdHRyX3MgeworCWJmYV9ib29sZWFuX3QJY29hbGVzY2U7CS8qICBlbmFibGUvZGlzYWJsZSBjb2FsZXNjaW5nICovCisJdTE2CWxhdGVuY3k7CS8qICBsYXRlbmN5IGluIG1pY3Jvc2Vjb25kcyAgICovCisJdTE2CWRlbGF5OwkJLyogIGRlbGF5IGluIG1pY3Jvc2Vjb25kcyAgICAgKi8KK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIGNvbmZpZ3VyYXRvbgorICovCitzdHJ1Y3QgYmZhX2lvY2ZjX2Z3Y2ZnX3MgeworCXUxNiAgICAgICAgbnVtX2ZhYnJpY3M7CS8qICBudW1iZXIgb2YgZmFicmljcwkJKi8KKwl1MTYgICAgICAgIG51bV9scG9ydHM7CS8qICBudW1iZXIgb2YgbG9jYWwgbHBvcnRzCSovCisJdTE2ICAgICAgICBudW1fcnBvcnRzOwkvKiAgbnVtYmVyIG9mIHJlbW90ZSBwb3J0cwkqLworCXUxNiAgICAgICAgbnVtX2lvaW1fcmVxczsJLyogIG51bWJlciBvZiBJTyByZXFzCQkqLworCXUxNiAgICAgICAgbnVtX3Rza2ltX3JlcXM7CS8qICB0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdHMJKi8KKwl1MTYgICAgICAgIG51bV9pb3RtX3JlcXM7CS8qICBudW1iZXIgb2YgVE0gSU8gcmVxcwkqLworCXUxNiAgICAgICAgbnVtX3Rza3RtX3JlcXM7CS8qICBUTSB0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdHMqLworCXUxNiAgICAgICAgbnVtX2ZjeHBfcmVxczsJLyogIHVuYXNzaXN0ZWQgRkMgZXhjaGFuZ2VzCSovCisJdTE2ICAgICAgICBudW1fdWZfYnVmczsJLyogIHVuc29saWNpdGVkIHJlY3YgYnVmZmVycwkqLworCXU4CQludW1fY3FzOworCXU4CQlyc3ZkOworfTsKKworc3RydWN0IGJmYV9pb2NmY19kcnZjZmdfcyB7CisJdTE2ICAgICAgICBudW1fcmVxcV9lbGVtczsJLyogIG51bWJlciBvZiByZXEgcXVldWUgZWxlbWVudHMgKi8KKwl1MTYgICAgICAgIG51bV9yc3BxX2VsZW1zOwkvKiAgbnVtYmVyIG9mIHJzcCBxdWV1ZSBlbGVtZW50cyAqLworCXUxNiAgICAgICAgbnVtX3NncGdzOwkvKiAgbnVtYmVyIG9mIHRvdGFsIFNHIHBhZ2VzCSAgKi8KKwl1MTYgICAgICAgIG51bV9zYm9vdF90Z3RzOwkvKiAgbnVtYmVyIG9mIFNBTiBib290IHRhcmdldHMJICAqLworCXUxNiAgICAgICAgbnVtX3Nib290X2x1bnM7CS8qICBudW1iZXIgb2YgU0FOIGJvb3QgbHVucwkgICovCisJdTE2CSAgICBpb2NfcmVjb3ZlcjsJLyogIElPQyByZWNvdmVyeSBtb2RlCQkgICovCisJdTE2CSAgICBtaW5fY2ZnOwkvKiAgbWluaW11bSBjb25maWd1cmF0aW9uCSAgKi8KKwl1MTYgICAgICAgIHBhdGhfdG92OwkvKiAgZGV2aWNlIHBhdGggdGltZW91dAkgICovCisJYmZhX2Jvb2xlYW5fdCAgIGRlbGF5X2NvbXA7IC8qICBkZWxheSBjb21wbGV0aW9uIG9mCisJCQkJCQkJZmFpbGVkIGluZmxpZ2h0IElPcyAqLworCXUzMgkJcnN2ZDsKK307CisvKioKKyAqIElPQyBjb25maWd1cmF0aW9uCisgKi8KK3N0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgeworCXN0cnVjdCBiZmFfaW9jZmNfZndjZmdfcwlmd2NmZzsJLyogIGZpcm13YXJlIHNpZGUgY29uZmlnICovCisJc3RydWN0IGJmYV9pb2NmY19kcnZjZmdfcwlkcnZjZmc7CS8qICBkcml2ZXIgc2lkZSBjb25maWcJICAqLworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgSU8gc3RhdHMKKyAqLworc3RydWN0IGJmYV9md19pb19zdGF0c19zIHsKKwl1MzIJaG9zdF9hYm9ydDsJCS8qICBJTyBhYm9ydGVkIGJ5IGhvc3QgZHJpdmVyKi8KKwl1MzIJaG9zdF9jbGVhbnVwOwkJLyogIElPIGNsZWFuIHVwIGJ5IGhvc3QgZHJpdmVyICovCisKKwl1MzIJZndfaW9fdGltZW91dDsJCS8qICBJT3MgdGltZWRvdXQgKi8KKwl1MzIJZndfZnJtX3BhcnNlOwkJLyogIGZyYW1lIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZnJtX2RhdGE7CQkvKiAgZmNwX2RhdGEgZnJhbWUgcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19mcm1fcnNwOwkJLyogIGZjcF9yc3AgZnJhbWUgcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19mcm1feGZlcl9yZHk7CS8qICB4ZmVyX3JkeSBmcmFtZSBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV9ibHNfYWNjOwkJLyogIEJMUyBBQ0MgIGZyYW1lIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZnJtX3RndF9hYm9ydDsJLyogIHRhcmdldCBBQlRTIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZnJtX3Vua25vd247CQkvKiAgdW5rbm93biBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2RhdGFfZG1hOwkJLyogIGYvdyBETUEnZWQgdGhlIGRhdGEgZnJhbWUgKi8KKwl1MzIJZndfZnJtX2Ryb3A7CQkvKiAgZi93IGRyb3AgdGhlIGZyYW1lICovCisKKwl1MzIJcmVjX3RpbWVvdXQ7CQkvKiAgRlcgcmVjIHRpbWVkIG91dCAqLworCXUzMgllcnJvcl9yZWM7CQkJLyogIEZXIHNlbmRpbmcgcmVjIG9uCisJCQkJCQkJKiBhbiBlcnJvciBjb25kaXRpb24qLworCXUzMgl3YWl0X2Zvcl9zaTsJCS8qICBGVyB3YWl0IGZvciBTSSAqLworCXUzMglyZWNfcnNwX2ludmFsOwkJLyogIFJFQyByc3AgaW52YWxpZCAqLworCXUzMglzZXFyX2lvX2Fib3J0OwkJLyogIHRhcmdldCBkb2VzIG5vdCBrbm93IGNtZCBzbyBhYm9ydCAqLworCXUzMglzZXFyX2lvX3JldHJ5OwkJLyogIFNFUVIgZmFpbGVkIHNvIHJldHJ5IElPICovCisKKwl1MzIJaXRuX2Npc2NfdXBkX3JzcDsJLyogIElUTiBjaXNjIHVwZGF0ZWQgb24gZmNwX3JzcCAqLworCXUzMglpdG5fY2lzY191cGRfZGF0YTsJLyogIElUTiBjaXNjIHVwZGF0ZWQgb24gZmNwX2RhdGEgKi8KKwl1MzIJaXRuX2Npc2NfdXBkX3hmZXJfcmR5OwkvKiAgSVROIGNpc2MgdXBkYXRlZCBvbiBmY3BfZGF0YSAqLworCisJdTMyCWZjcF9kYXRhX2xvc3Q7CQkvKiAgZmNwIGRhdGEgbG9zdCAqLworCisJdTMyCXJvX3NldF9pbl94ZmVyX3JkeTsJLyogIFRhcmdldCBzZXQgUk8gaW4gWGZlcl9yZHkgZnJhbWUgKi8KKwl1MzIJeGZlcl9yZHlfb29vX2VycjsJLyogIE91dCBvZiBvcmRlciBYZmVyX3JkeSByZWNlaXZlZCAqLworCXUzMgl4ZmVyX3JkeV91bmtub3duX2VycjsJLyogIHVua25vd24gZXJyb3IgaW4geGZlcl9yZHkgZnJhbWUgKi8KKworCXUzMglpb19hYm9ydF90aW1lb3V0OwkvKiAgQUJUUyB0aW1lZG91dCAgKi8KKwl1MzIJc2xlcl9pbml0aWF0ZWQ7CQkvKiAgU0xFUiBpbml0aWF0ZWQgKi8KKworCXUzMgl1bmV4cF9mY3BfcnNwOwkJLyogIGZjcCByZXNwb25zZSBpbiB3cm9uZyBzdGF0ZSAqLworCisJdTMyCWZjcF9yc3BfdW5kZXJfcnVuOwkvKiAgZmNwIHJzcCBJTyB1bmRlcnJ1biAqLworCXUzMiAgICAgICAgZmNwX3JzcF91bmRlcl9ydW5fd3I7ICAgLyogIGZjcCByc3AgSU8gdW5kZXJydW4gZm9yIHdyaXRlICovCisJdTMyCWZjcF9yc3BfdW5kZXJfcnVuX2VycjsJLyogIGZjcCByc3AgSU8gdW5kZXJydW4gZXJyb3IgKi8KKwl1MzIgICAgICAgIGZjcF9yc3BfcmVzaWRfaW52YWw7ICAgIC8qICBpbnZhbGlkIHJlc2lkdWUgKi8KKwl1MzIJZmNwX3JzcF9vdmVyX3J1bjsJLyogIGZjcCByc3AgSU8gb3ZlcnJ1biAqLworCXUzMglmY3BfcnNwX292ZXJfcnVuX2VycjsJLyogIGZjcCByc3AgSU8gb3ZlcnJ1biBlcnJvciAqLworCXUzMglmY3BfcnNwX3Byb3RvX2VycjsJLyogIHByb3RvY29sIGVycm9yIGluIGZjcCByc3AgKi8KKwl1MzIJZmNwX3JzcF9zZW5zZV9lcnI7CS8qICBlcnJvciBpbiBzZW5zZSBpbmZvIGluIGZjcCByc3AgKi8KKwl1MzIJZmNwX2NvbmZfcmVxOwkJLyogIEZDUCBjb25mIHJlcXVlc3RlZCAqLworCisJdTMyCXRndF9hYm9ydGVkX2lvOwkJLyogIHRhcmdldCBpbml0aWF0ZWQgYWJvcnQgKi8KKworCXUzMglpb2hfZWR0b3ZfdGltZW91dF9ldmVudDsvKiAgSU9IIGVkdG92IHRpbWVyIHBvcHBlZCAqLworCXUzMglpb2hfZmNwX3JzcF9leGNwX2V2ZW50OwkvKiAgSU9IIEZDUF9SU1AgZXhjZXB0aW9uICovCisJdTMyCWlvaF9mY3BfY29uZl9ldmVudDsJLyogIElPSCBGQ1BfQ09ORiAqLworCXUzMglpb2hfbXVsdF9mcm1fcnNwX2V2ZW50OwkvKiAgSU9IIG11bHRpX2ZyYW1lIEZDUF9SU1AgKi8KKwl1MzIJaW9oX2hpdF9jbGFzczJfZXZlbnQ7CS8qICBJT0ggaGl0IGNsYXNzMiAqLworCXUzMglpb2hfbWlzc19vdGhlcl9ldmVudDsJLyogIElPSCBtaXNzIG90aGVyICovCisJdTMyCWlvaF9zZXFfY250X2Vycl9ldmVudDsJLyogIElPSCBzZXEgY250IGVycm9yICovCisJdTMyCWlvaF9sZW5fZXJyX2V2ZW50OwkJLyogIElPSCBsZW4gZXJyb3IgLSBmY3BfZGwgIT0KKwkJCQkJCQkqIGJ5dGVzIHhmZXJlZCAqLworCXUzMglpb2hfc2VxX2xlbl9lcnJfZXZlbnQ7CS8qICBJT0ggc2VxIGxlbiBlcnJvciAqLworCXUzMglpb2hfZGF0YV9vb3JfZXZlbnQ7CS8qICBEYXRhIG91dCBvZiByYW5nZSAqLworCXUzMglpb2hfcm9fb29vX2V2ZW50OwkvKiAgUmVsYXRpdmUgb2Zmc2V0IG91dCBvZiByYW5nZSAqLworCXUzMglpb2hfY3B1X293bmVkX2V2ZW50OwkvKiAgSU9IIGhpdCAtaW9zdCBvd25lZCBieSBmL3cgKi8KKwl1MzIJaW9oX3VuZXhwX2ZyYW1lX2V2ZW50OwkvKiAgdW5leHBlY3RlZCBmcmFtZSByZWNpZXZlZAorCQkJCQkJICogICBjb3VudCAqLworCXUzMglpb2hfZXJyX2ludDsJCS8qICBJT0ggZXJyb3IgaW50IGR1cmluZyBkYXRhLXBoYXNlCisJCQkJCQkgKiAgIGZvciBzY3NpIHdyaXRlCisJCQkJCQkgKi8KK307CisKKy8qKgorICogSU9DIHBvcnQgZmlybXdhcmUgc3RhdHMKKyAqLworCitzdHJ1Y3QgYmZhX2Z3X3BvcnRfZnBnX3N0YXRzX3MgeworICAgIHUzMiAgICBpbnRyX2V2dDsKKyAgICB1MzIgICAgaW50cjsKKyAgICB1MzIgICAgaW50cl9leGNlc3M7CisgICAgdTMyICAgIGludHJfY2F1c2UwOworICAgIHUzMiAgICBpbnRyX290aGVyOworICAgIHUzMiAgICBpbnRyX290aGVyX2lnbjsKKyAgICB1MzIgICAgc2lnX2xvc3Q7CisgICAgdTMyICAgIHNpZ19yZWdhaW5lZDsKKyAgICB1MzIgICAgc3luY19sb3N0OworICAgIHUzMiAgICBzeW5jX3RvOworICAgIHUzMiAgICBzeW5jX3JlZ2FpbmVkOworICAgIHUzMiAgICBkaXYyX292ZXJmbG93OworICAgIHUzMiAgICBkaXYyX3VuZGVyZmxvdzsKKyAgICB1MzIgICAgZWZpZm9fb3ZlcmZsb3c7CisgICAgdTMyICAgIGVmaWZvX3VuZGVyZmxvdzsKKyAgICB1MzIgICAgaWRsZV9yeDsKKyAgICB1MzIgICAgbHJyX3J4OworICAgIHUzMiAgICBscl9yeDsKKyAgICB1MzIgICAgb2xzX3J4OworICAgIHUzMiAgICBub3Nfcng7CisgICAgdTMyICAgIGxpcF9yeDsKKyAgICB1MzIgICAgYXJiZjBfcng7CisgICAgdTMyICAgIG1ya19yeDsKKyAgICB1MzIgICAgY29uc3RfbXJrX3J4OworICAgIHUzMiAgICBwcmltX3Vua25vd247CisgICAgdTMyICAgIHJzdmQ7Cit9OworCisKK3N0cnVjdCBiZmFfZndfcG9ydF9sa3NtX3N0YXRzX3MgeworICAgIHUzMiAgICBod3NtX3N1Y2Nlc3M7ICAgICAgIC8qICBod3NtIHN0YXRlIG1hY2hpbmUgc3VjY2VzcyAgICAgICAgICAqLworICAgIHUzMiAgICBod3NtX2ZhaWxzOyAgICAgICAgIC8qICBod3NtIGZhaWxzICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBod3NtX3dkdG92OyAgICAgICAgIC8qICBod3NtIHRpbWVkIG91dCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBzd3NtX3N1Y2Nlc3M7ICAgICAgIC8qICBzd3NtIHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBzd3NtX2ZhaWxzOyAgICAgICAgIC8qICBzd3NtIGZhaWxzICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBzd3NtX3dkdG92OyAgICAgICAgIC8qICBzd3NtIHRpbWVkIG91dCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBidXN5YnVmczsgICAgICAgICAgIC8qICBsaW5rIGluaXQgZmFpbGVkIGR1ZSB0byBidXN5YnVmICAgICAqLworICAgIHUzMiAgICBidWZfd2FpdHM7ICAgICAgICAgIC8qICBidWZ3YWl0IHN0YXRlIGVudHJpZXMgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBsaW5rX2ZhaWxzOyAgICAgICAgIC8qICBsaW5rIGZhaWx1cmVzICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBwc3BfZXJyb3JzOyAgICAgICAgIC8qICBwcmltaXRpdmUgc2VxdWVuY2UgcHJvdG9jb2wgZXJyb3JzICAqLworICAgIHUzMiAgICBscl91bmV4cDsgICAgICAgICAgIC8qICBOby4gb2YgdGltZXMgTFIgcngtZWQgdW5leHBlY3RlZGx5ICAqLworICAgIHUzMiAgICBscnJfdW5leHA7ICAgICAgICAgIC8qICBOby4gb2YgdGltZXMgTFJSIHJ4LWVkIHVuZXhwZWN0ZWRseSAqLworICAgIHUzMiAgICBscl90eDsgICAgICAgICAgICAgIC8qICBOby4gb2YgdGltZXMgTFIgdHggc3RhcnRlZCAgICAgICAgICAqLworICAgIHUzMiAgICBscnJfdHg7ICAgICAgICAgICAgIC8qICBOby4gb2YgdGltZXMgTFJSIHR4IHN0YXJ0ZWQgICAgICAgICAqLworICAgIHUzMiAgICBvbHNfdHg7ICAgICAgICAgICAgIC8qICBOby4gb2YgdGltZXMgT0xTIHR4IHN0YXJ0ZWQgICAgICAgICAqLworICAgIHUzMiAgICBub3NfdHg7ICAgICAgICAgICAgIC8qICBOby4gb2YgdGltZXMgTk9TIHR4IHN0YXJ0ZWQgICAgICAgICAqLworfTsKKworCitzdHJ1Y3QgYmZhX2Z3X3BvcnRfc25zbV9zdGF0c19zIHsKKyAgICB1MzIgICAgaHdzbV9zdWNjZXNzOyAgICAgICAvKiAgU3VjY2Vzc2Z1bCBod3NtIHRlcm1pbmF0aW9ucyAgICAgICAgKi8KKyAgICB1MzIgICAgaHdzbV9mYWlsczsgICAgICAgICAvKiAgaHdzbSBmYWlsIGNvdW50ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgaHdzbV93ZHRvdjsgICAgICAgICAvKiAgaHdzbSB0aW1lZCBvdXQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgc3dzbV9zdWNjZXNzOyAgICAgICAvKiAgc3dzbSBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgc3dzbV93ZHRvdjsgICAgICAgICAvKiAgc3dzbSB0aW1lZCBvdXQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgZXJyb3JfcmVzZXRzOyAgICAgICAvKiAgZXJyb3IgcmVzZXRzIGluaXRpYXRlZCBieSB1cHNtICAgICAgKi8KKyAgICB1MzIgICAgc3luY19sb3N0OyAgICAgICAgICAvKiAgU3luYyBsb3NzIGNvdW50ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgc2lnX2xvc3Q7ICAgICAgICAgICAvKiAgU2lnbmFsIGxvc3MgY291bnQgICAgICAgICAgICAgICAgICAgKi8KK307CisKKworc3RydWN0IGJmYV9md19wb3J0X3BoeXNtX3N0YXRzX3MgeworICAgIHUzMiAgICBtb2R1bGVfaW5zZXJ0czsgICAgIC8qICBNb2R1bGUgaW5zZXJ0IGNvdW50ICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBtb2R1bGVfeHRyYWN0czsgICAgIC8qICBNb2R1bGUgZXh0cmFjdHMgY291bnQgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBtb2R1bGVfaW52YWxpZHM7ICAgIC8qICBJbnZhbGlkIG1vZHVsZSBpbnNlcnRlZCBjb3VudCAgICAgICAqLworICAgIHUzMiAgICBtb2R1bGVfcmVhZF9pZ247ICAgIC8qICBNb2R1bGUgdmFsaWRhdGlvbiBzdGF0dXMgaWdub3JlZCAgICAqLworICAgIHUzMiAgICBsYXNlcl9mYXVsdHM7ICAgICAgIC8qICBMYXNlciBmYXVsdCBjb3VudCAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICByc3ZkOworfTsKKworCitzdHJ1Y3QgYmZhX2Z3X2ZpcF9zdGF0c19zIHsKKyAgICB1MzIgICAgZGlzY19yZXE7ICAgICAgICAgICAvKiAgRGlzY292ZXJ5IHNvbGljaXQgcmVxdWVzdHMgICAgICAgICAgKi8KKyAgICB1MzIgICAgZGlzY19yc3A7ICAgICAgICAgICAvKiAgRGlzY292ZXJ5IHNvbGljaXQgcmVzcG9uc2UgICAgICAgICAgKi8KKyAgICB1MzIgICAgZGlzY19lcnI7ICAgICAgICAgICAvKiAgRGlzY292ZXJ5IGFkdnQuIHBhcnNlIGVycm9ycyAgICAgICAgKi8KKyAgICB1MzIgICAgZGlzY191bnNvbDsgICAgICAgICAvKiAgRGlzY292ZXJ5IHVuc29saWNpdGVkICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgZGlzY190aW1lb3V0czsgICAgICAvKiAgRGlzY292ZXJ5IHRpbWVvdXRzICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgbGlua3N2Y191bnN1cHA7ICAgICAvKiAgVW5zdXBwb3J0ZWQgbGluayBzZXJ2aWNlIHJlcSAgICAgICAgKi8KKyAgICB1MzIgICAgbGlua3N2Y19lcnI7ICAgICAgICAvKiAgUGFyc2UgZXJyb3IgaW4gbGluayBzZXJ2aWNlIHJlcSAgICAgKi8KKyAgICB1MzIgICAgbG9nb19yZXE7ICAgICAgICAgICAvKiAgTnVtYmVyIG9mIEZJUCBsb2dvcyByZWNlaXZlZCAgICAgICAgKi8KKyAgICB1MzIgICAgY2xydmxpbmtfcmVxOyAgICAgICAvKiAgQ2xlYXIgdmlydHVhbCBsaW5rIHJlcSAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgb3BfdW5zdXBwOyAgICAgICAgICAvKiAgVW5zdXBwb3J0ZWQgRklQIG9wZXJhdGlvbiAgICAgICAgICAgKi8KKyAgICB1MzIgICAgdW50YWdnZWQ7ICAgICAgICAgICAvKiAgVW50YWdnZWQgZnJhbWVzIChpZ25vcmVkKSAgICAgICAgICAgKi8KKyAgICB1MzIgICAgcnN2ZDsKK307CisKKworc3RydWN0IGJmYV9md19scHNfc3RhdHNfcyB7CisgICAgdTMyICAgIG1hY19pbnZhbGlkczsgICAgICAgLyogIEludmFsaWQgbWFjIGFzc2lnbmVkICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHJzdmQ7Cit9OworCisKK3N0cnVjdCBiZmFfZndfZmNvZV9zdGF0c19zIHsKKyAgICB1MzIgICAgY2VlX2xpbmt1cHM7ICAgICAgICAvKiAgQ0VFIGxpbmsgdXAgY291bnQgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgY2VlX2xpbmtkbnM7ICAgICAgICAvKiAgQ0VFIGxpbmsgZG93biBjb3VudCAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgZmlwX2xpbmt1cHM7ICAgICAgICAvKiAgRklQIGxpbmsgdXAgY291bnQgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgZmlwX2xpbmtkbnM7ICAgICAgICAvKiAgRklQIGxpbmsgdXAgY291bnQgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgZmlwX2ZhaWxzOyAgICAgICAgICAvKiAgRklQIGZhaWwgY291bnQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgbWFjX2ludmFsaWRzOyAgICAgICAvKiAgSW52YWxpZCBtYWMgYXNzaWduZWQgICAgICAgICAgICAgICAgKi8KK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIEZDb0UgcG9ydCBzdGF0cworICovCitzdHJ1Y3QgYmZhX2Z3X2Zjb2VfcG9ydF9zdGF0c19zIHsKKyAgICBzdHJ1Y3QgYmZhX2Z3X2Zjb2Vfc3RhdHNfcyAgZmNvZV9zdGF0czsKKyAgICBzdHJ1Y3QgYmZhX2Z3X2ZpcF9zdGF0c19zICAgZmlwX3N0YXRzOworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgRkMgcG9ydCBzdGF0cworICovCitzdHJ1Y3QgYmZhX2Z3X2ZjX3BvcnRfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9md19wb3J0X2ZwZ19zdGF0c19zCQlmcGdfc3RhdHM7CisJc3RydWN0IGJmYV9md19wb3J0X3BoeXNtX3N0YXRzX3MJcGh5c21fc3RhdHM7CisJc3RydWN0IGJmYV9md19wb3J0X3Nuc21fc3RhdHNfcwkJc25zbV9zdGF0czsKKwlzdHJ1Y3QgYmZhX2Z3X3BvcnRfbGtzbV9zdGF0c19zCQlsa3NtX3N0YXRzOworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgRkMgcG9ydCBzdGF0cworICovCit1bmlvbiBiZmFfZndfcG9ydF9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2Z3X2ZjX3BvcnRfc3RhdHNfcwlmY19zdGF0czsKKwlzdHJ1Y3QgYmZhX2Z3X2Zjb2VfcG9ydF9zdGF0c19zCWZjb2Vfc3RhdHM7Cit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBzdGF0cworICovCitzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgeworCXN0cnVjdCBiZmFfZndfaW9jX3N0YXRzX3MJaW9jX3N0YXRzOworCXN0cnVjdCBiZmFfZndfaW9fc3RhdHNfcwlpb19zdGF0czsKKwl1bmlvbiAgYmZhX2Z3X3BvcnRfc3RhdHNfcwlwb3J0X3N0YXRzOworfTsKKworLyoqCisgKiBJT0Mgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX2lvY2ZjX3N0YXRzX3MgeworCXN0cnVjdCBiZmFfZndfc3RhdHNfcyAJZndfc3RhdHM7CS8qICBmaXJtd2FyZSBJT0Mgc3RhdHMgICAgICAqLworfTsKKworLyoqCisgKiBJT0MgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfaW9jZmNfYXR0cl9zIHsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zCQljb25maWc7CQkvKiAgSU9DRkMgY29uZmlnICAgKi8KKwlzdHJ1Y3QgYmZhX2lvY2ZjX2ludHJfYXR0cl9zCWludHJfYXR0cjsJLyogIGludGVycnVwdCBhdHRyICovCit9OworCisjZGVmaW5lIEJGQV9JT0NGQ19QQVRIVE9WX01BWAk2MAorI2RlZmluZSBCRkFfSU9DRkNfUURFUFRIX01BWAkyMDAwCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lPQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lwZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lwZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2I2M2VhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXBmYy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19JUEZDX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lQRkNfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisKKy8qKgorICogRkNTIGlwIHJlbW90ZSBwb3J0IHN0YXRlcworICovCitlbnVtIGJmYV9pcHJwX3N0YXRlIHsKKwlCRkFfSVBSUF9VTklOSVQgID0gMCwJLyogIFBPUlQgaXMgbm90IHlldCBpbml0aWFsaXplZCAqLworCUJGQV9JUFJQX09OTElORSAgPSAxLAkvKiAgcHJvY2VzcyBsb2dpbiBpcyBjb21wbGV0ZSAqLworCUJGQV9JUFJQX09GRkxJTkUgPSAyLAkvKiAgaXBycCBpcyBvZmZsaW5lICovCit9OworCisvKioKKyAqIEZDUyByZW1vdGUgcG9ydCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfaXBycF9zdGF0c19zIHsKKwl1MzIgICAgICAgIG9mZmxpbmVzOworCXUzMiAgICAgICAgb25saW5lczsKKwl1MzIgICAgICAgIHJzY25zOworCXUzMiAgICAgICAgcGxvZ2lzOworCXUzMiAgICAgICAgbG9nb3M7CisJdTMyICAgICAgICBwbG9naV90aW1lb3V0czsKKwl1MzIgICAgICAgIHBsb2dpX3JlamVjdHM7Cit9OworCisvKioKKyAqIEZDUyBpcHJwIGF0dHJpYnV0ZSByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfaXBycF9hdHRyX3MgeworCWVudW0gYmZhX2lwcnBfc3RhdGUgc3RhdGU7Cit9OworCitzdHJ1Y3QgYmZhX2lwZmNfc3RhdHNfcyB7CisJdTMyIGFycF9zZW50OworCXUzMiBhcnBfcmVjdjsKKwl1MzIgYXJwX3JlcGx5X3NlbnQ7CisJdTMyIGFycF9yZXBseV9yZWN2OworCXUzMiBmYXJwX3NlbnQ7CisJdTMyIGZhcnBfcmVjdjsKKwl1MzIgZmFycF9yZXBseV9zZW50OworCXUzMiBmYXJwX3JlcGx5X3JlY3Y7CisJdTMyIGZhcnBfcmVqZWN0X3NlbnQ7CisJdTMyIGZhcnBfcmVqZWN0X3JlY3Y7Cit9OworCitzdHJ1Y3QgYmZhX2lwZmNfYXR0cl9zIHsKKwliZmFfYm9vbGVhbl90IGVuYWJsZWQ7Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19JUEZDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXRuaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2l0bmltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjNzY5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2l0bmltLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19JVE5JTV9IX18KKyNkZWZpbmUgX19CRkFfREVGU19JVE5JTV9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisvKioKKyAqIEZDUyBpdG5pbSBzdGF0ZXMKKyAqLworZW51bSBiZmFfaXRuaW1fc3RhdGUgeworCUJGQV9JVE5JTV9PRkZMSU5FIAk9IDAsCS8qICBvZmZsaW5lICovCisJQkZBX0lUTklNX1BSTElfU0VORCAJPSAxLAkvKiAgcHJsaSBzZW5kICovCisJQkZBX0lUTklNX1BSTElfU0VOVCAJPSAyLAkvKiAgcHJsaSBzZW50ICovCisJQkZBX0lUTklNX1BSTElfUkVUUlkgCT0gMywJLyogIHBybGkgcmV0cnkgKi8KKwlCRkFfSVROSU1fSENCX09OTElORSAJPSA0LAkvKiAgb25saW5lIGNhbGxiYWNrICovCisJQkZBX0lUTklNX09OTElORSAJPSA1LAkvKiAgb25saW5lICovCisJQkZBX0lUTklNX0hDQl9PRkZMSU5FIAk9IDYsCS8qICBvZmZsaW5lIGNhbGxiYWNrICovCisJQkZBX0lUTklNX0lOSVRJQVRJT1IgCT0gNywJLyogIGluaXRpYXRvciAqLworfTsKKworc3RydWN0IGJmYV9pdG5pbV9oYWxfc3RhdHNfcyB7CisJdTMyCW9ubGluZXM7CS8qICBJVE4gbmV4dXMgb25saW5lcyAoUFJMSSBkb25lKSAqLworCXUzMglvZmZsaW5lczsJLyogIElUTiBOZXh1cyBvZmZsaW5lcyAJKi8KKwl1MzIJY3JlYXRlczsJLyogIElUTiBjcmVhdGUgcmVxdWVzdHMgCSovCisJdTMyCWRlbGV0ZXM7CS8qICBJVE4gZGVsZXRlIHJlcXVlc3RzIAkqLworCXUzMgljcmVhdGVfY29tcHM7CS8qICBJVE4gY3JlYXRlIGNvbXBsZXRpb25zIAkqLworCXUzMglkZWxldGVfY29tcHM7CS8qICBJVE4gZGVsZXRlIGNvbXBsZXRpb25zIAkqLworCXUzMglzbGVyX2V2ZW50czsJLyogIFNMRVIgKHNlcXVlbmNlIGxldmVsIGVycm9yCisJCQkJCSAqIHJlY292ZXJ5KSBldmVudHMgKi8KKwl1MzIJaW9jX2Rpc2FibGVkOwkvKiAgTnVtIElPQyBkaXNhYmxlcwkJKi8KKwl1MzIJY2xlYW51cF9jb21wczsJLyogIElUTiBjbGVhbnVwIGNvbXBsZXRpb25zICovCisJdTMyCXRtX2NtbmRzOwkvKiAgdGFzayBtYW5hZ2VtZW50KFRNKSBjbW5kcyBzZW50ICovCisJdTMyCXRtX2Z3X3JzcHM7CS8qICBUTSBjbWRzIGZpcm13YXJlIHJlc3BvbnNlcyAqLworCXUzMgl0bV9zdWNjZXNzOwkvKiAgVE0gc3VjY2Vzc2VzICovCisJdTMyCXRtX2ZhaWx1cmVzOwkvKiAgVE0gZmFpbHVyZXMgKi8KKwl1MzIJdG1faW9fY29tcHM7CS8qICBUTSBJTyBjb21wbGV0aW9ucyAqLworCXUzMgl0bV9xcmVzdW1lczsJLyogIFRNIHF1ZXVlIHJlc3VtZXMgKGFmdGVyIHdhaXRpbmcKKwkJCQkJICogZm9yIHJlc291cmNlcykKKwkJCQkJICovCisJdTMyCXRtX2lvY2Rvd25zOwkvKiAgVE0gY21uZHMgYWZmZWN0ZWQgYnkgSU9DIGRvd24gKi8KKwl1MzIJdG1fY2xlYW51cHM7CS8qICBUTSBjbGVhbnVwcyAqLworCXUzMgl0bV9jbGVhbnVwX2NvbXBzOworCQkJCQkvKiAgVE0gY2xlYW51cCBjb21wbGV0aW9ucyAqLworCXUzMglpb3M7CQkvKiAgSU8gcmVxdWVzdHMgKi8KKwl1MzIJaW9fY29tcHM7CS8qICBJTyBjb21wbGV0aW9ucyAqLworCXU2NAlpbnB1dF9yZXFzOwkvKiAgSU5QVVQgcmVxdWVzdHMgKi8KKwl1NjQJb3V0cHV0X3JlcXM7CS8qICBPVVRQVVQgcmVxdWVzdHMgKi8KK307CisKKy8qKgorICogRkNTIHJlbW90ZSBwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9pdG5pbV9zdGF0c19zIHsKKwl1MzIgICAgICAgIG9ubGluZXM7CS8qICBudW0gcnBvcnQgb25saW5lICovCisJdTMyICAgICAgICBvZmZsaW5lczsJLyogIG51bSBycG9ydCBvZmZsaW5lICovCisJdTMyICAgICAgICBwcmxpX3NlbnQ7CS8qICBudW0gcHJsaSBzZW50IG91dCAqLworCXUzMiAgICAgICAgZmN4cF9hbGxvY193YWl0Oy8qICBudW0gZmN4cCBhbGxvYyB3YWl0cyAqLworCXUzMiAgICAgICAgcHJsaV9yc3BfZXJyOwkvKiAgbnVtIHBybGkgcnNwIGVycm9ycyAqLworCXUzMiAgICAgICAgcHJsaV9yc3BfYWNjOwkvKiAgbnVtIHBybGkgcnNwIGFjY2VwdHMgKi8KKwl1MzIgICAgICAgIGluaXRpYXRvcjsJLyogIHJwb3J0IGlzIGFuIGluaXRpYXRvciAqLworCXUzMiAgICAgICAgcHJsaV9yc3BfcGFyc2VfZXJyOwkvKiAgcHJsaSByc3AgcGFyc2luZyBlcnJvcnMgKi8KKwl1MzIgICAgICAgIHBybGlfcnNwX3JqdDsJLyogIG51bSBwcmxpIHJzcCByZWplY3RzICovCisJdTMyICAgICAgICB0aW1lb3V0OwkvKiAgbnVtIHRpbWVvdXRzIGRldGVjdGVkICovCisJdTMyICAgICAgICBzbGVyOwkJLyogIG51bSBzbGVyIG5vdGlmaWNhdGlvbiBmcm9tIEJGQSAqLworCXUzMglyc3ZkOworCXN0cnVjdCBiZmFfaXRuaW1faGFsX3N0YXRzX3MJaGFsX3N0YXRzOworfTsKKworLyoqCisgKiBGQ1MgaXRuaW0gYXR0cmlidXRlcyByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfaXRuaW1fYXR0cl9zIHsKKwllbnVtIGJmYV9pdG5pbV9zdGF0ZSBzdGF0ZTsgLyogIEZDUyBpdG5pbSBzdGF0ZSAgICAgICAgKi8KKwl1OCByZXRyeTsJCS8qICBkYXRhIHJldHJhbnNtaXNpb24gc3VwcG9ydCAqLworCXU4CXRhc2tfcmV0cnlfaWQ7ICAvKiAgdGFzayByZXRyeSBpZGVudCBzdXBwb3J0ICAgKi8KKwl1OCByZWNfc3VwcG9ydDsgICAgLyogIFJFQyBzdXBwb3J0ZWQgICAgICAgICAgICAgICovCisJdTggY29uZl9jb21wOyAgICAgIC8qICBjb25maXJtZWQgY29tcGxldGlvbiBzdXBwICAqLworfTsKKworLyoqCisgKiBCRkEgSVROSU0gZXZlbnRzLgorICogQXJndW1lbnRzIGJlbG93IGFyZSBpbiBCRkFMIGNvbnRleHQgZnJvbSBNZ210CisgKiBCRkFfSVROSU1fQUVOX05FVzogICAgICAgW2luXTogTm9uZSAgW291dF06IHZmX2lkLCBscHd3bgorICogQkZBX0lUTklNX0FFTl9ERUxFVEU6ICAgIFtpbl06IHZmX2lkLCBscHd3biwgcnB3d24gKDAgPSBhbGwgZmNwNCB0YXJnZXRzKSwKKyAqCQkJCSAgW291dF06IHZmX2lkLCBwcHd3biwgbHB3d24sIHJwd3duCisgKiBCRkFfSVROSU1fQUVOX09OTElORTogICAgW2luXTogdmZfaWQsIGxwd3duLCBycHd3biAoMCA9IGFsbCBmY3A0IHRhcmdldHMpLAorICoJCQkJICBbb3V0XTogdmZfaWQsIHBwd3duLCBscHd3biwgcnB3d24KKyAqIEJGQV9JVE5JTV9BRU5fT0ZGTElORTogICBbaW5dOiB2Zl9pZCwgbHB3d24sIHJwd3duICgwID0gYWxsIGZjcDQgdGFyZ2V0cyksCisgKgkJCQkgIFtvdXRdOiB2Zl9pZCwgcHB3d24sIGxwd3duLCBycHd3bgorICogQkZBX0lUTklNX0FFTl9ESVNDT05ORUNUOltpbl06IHZmX2lkLCBscHd3biwgcnB3d24gKDAgPSBhbGwgZmNwNCB0YXJnZXRzKSwKKyAqCQkJCSAgW291dF06IHZmX2lkLCBwcHd3biwgbHB3d24sIHJwd3duCisgKi8KK2VudW0gYmZhX2l0bmltX2Flbl9ldmVudCB7CisJQkZBX0lUTklNX0FFTl9PTkxJTkUgCT0gMSwJLyogIFRhcmdldCBvbmxpbmUgKi8KKwlCRkFfSVROSU1fQUVOX09GRkxJTkUgCT0gMiwJLyogIFRhcmdldCBvZmZsaW5lICovCisJQkZBX0lUTklNX0FFTl9ESVNDT05ORUNUID0gMywJLyogIFRhcmdldCBkaXNjb25uZWN0ZWQgKi8KK307CisKKy8qKgorICogQkZBIElUTklNIGV2ZW50IGRhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgYmZhX2l0bmltX2Flbl9kYXRhX3MgeworCXUxNiAgICAgICAgdmZfaWQ7CS8qICB2Zl9pZCBvZiB0aGUgSVQgbmV4dXMgKi8KKwl1MTYgICAgICAgIHJzdmRbM107CisJd3duX3QgICAgICAgICAgIHBwd3duOwkvKiAgV1dOIG9mIGl0cyBwaHlzaWNhbCBwb3J0ICovCisJd3duX3QgICAgICAgICAgIGxwd3duOwkvKiAgV1dOIG9mIGxvZ2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBycHd3bjsJLyogIFdXTiBvZiByZW1vdGUodGFyZ2V0KSBwb3J0ICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19JVE5JTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2xlZC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwMzkyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2xlZC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0xFRF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19MRURfSF9fCisKKyNkZWZpbmUJQkZBX0xFRF9NQVhfTlVNCQkzCisKK2VudW0gYmZhX2xlZF9vcCB7CisJQkZBX0xFRF9PRkYgICA9IDAsCisJQkZBX0xFRF9PTiAgICA9IDEsCisJQkZBX0xFRF9GTElDSyA9IDIsCisJQkZBX0xFRF9CTElOSyA9IDMsCit9OworCitlbnVtIGJmYV9sZWRfY29sb3IgeworCUJGQV9MRURfR1JFRU4gPSAwLAorCUJGQV9MRURfQU1CRVIgPSAxLAorfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfTEVEX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2xwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1OWY4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2xwb3J0LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfTFBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfTFBPUlRfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisKKy8qKgorICogQkZBIEFFTiBsb2dpY2FsIHBvcnQgZXZlbnRzLgorICogQXJndW1lbnRzIGJlbG93IGFyZSBpbiBCRkFMIGNvbnRleHQgZnJvbSBNZ210CisgKiBCRkFfTFBPUlRfQUVOX05FVzogICAgICAgW2luXTogTm9uZSAgICAgICAgIFtvdXRdOiB2Zl9pZCwgcHB3d24sIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9ERUxFVEU6ICAgIFtpbl06IGxwd3duICAgICAgICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fT05MSU5FOiAgICBbaW5dOiBscHd3biAgICAgICAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX09GRkxJTkU6ICAgW2luXTogbHB3d24gICAgICAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9ESVNDT05ORUNUOltpbl06IGxwd3duICAgICAgICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fTkVXX1BST1A6ICBbaW5dOiBOb25lICAgICAgICAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX0RFTEVURV9QUk9QOiAgICAgW2luXTogbHB3d24gIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9ORVdfU1RBTkRBUkQ6ICAgIFtpbl06IE5vbmUgICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fREVMRVRFX1NUQU5EQVJEOiBbaW5dOiBscHd3biAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX05QSVZfRFVQX1dXTjogICAgW2luXTogbHB3d24gIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9OUElWX0ZBQlJJQ19NQVg6IFtpbl06IGxwd3duICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fTlBJVl9VTktOT1dOOiAgICBbaW5dOiBscHd3biAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKi8KK2VudW0gYmZhX2xwb3J0X2Flbl9ldmVudCB7CisJQkZBX0xQT1JUX0FFTl9ORVcJPSAxLAkvKiAgTFBvcnQgY3JlYXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fREVMRVRFCT0gMiwJLyogIExQb3J0IGRlbGV0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX09OTElORQk9IDMsCS8qICBMUG9ydCBvbmxpbmUgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX09GRkxJTkUJPSA0LAkvKiAgTFBvcnQgb2ZmbGluZSBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fRElTQ09OTkVDVCA9IDUsCS8qICBMUG9ydCBkaXNjb25uZWN0IGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9ORVdfUFJPUAk9IDYsCS8qICBWUG9ydCBjcmVhdGVkIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9ERUxFVEVfUFJPUCA9IDcsCS8qICBWUG9ydCBkZWxldGVkIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9ORVdfU1RBTkRBUkQgPSA4LAkvKiAgVlBvcnQgY3JlYXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fREVMRVRFX1NUQU5EQVJEID0gOSwgIC8qICBWUG9ydCBkZWxldGVkIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9OUElWX0RVUF9XV04gPSAxMCwgICAgLyogIFZQb3J0IGNvbmZpZ3VyZWQgd2l0aAorCQkJCQkgICAgICogICBkdXBsaWNhdGUgV1dOIGV2ZW50CisJCQkJCQkgKi8KKwlCRkFfTFBPUlRfQUVOX05QSVZfRkFCUklDX01BWCA9IDExLCAvKiAgTWF4IE5QSVYgaW4gZmFicmljL2Zwb3J0ICovCisJQkZBX0xQT1JUX0FFTl9OUElWX1VOS05PV04gPSAxMiwgLyogIFVua25vd24gTlBJViBFcnJvciBjb2RlIGV2ZW50ICovCit9OworCisvKioKKyAqIEJGQSBBRU4gZXZlbnQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYV9scG9ydF9hZW5fZGF0YV9zIHsKKwl1MTYgICAgICAgIHZmX2lkOwkvKiAgdmZfaWQgb2YgdGhpcyBsb2dpY2FsIHBvcnQgKi8KKwl1MTYgICAgICAgIHJzdmQ7CisJZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzOwkvKiAgTG9naWNhbCBwb3J0IG1vZGUsSU0vVE0vSVAgZXRjICovCisJd3duX3QgICAgICAgICAgIHBwd3duOwkvKiAgV1dOIG9mIGl0cyBwaHlzaWNhbCBwb3J0ICovCisJd3duX3QgICAgICAgICAgIGxwd3duOwkvKiAgV1dOIG9mIHRoaXMgbG9naWNhbCBwb3J0ICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19MUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX21mZy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbWZnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmZDRhYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX21mZy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19NRkdfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfTUZHX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorCisvKioKKyAqIE1hbnVmYWN0dXJpbmcgYmxvY2sgdmVyc2lvbgorICovCisjZGVmaW5lIEJGQV9NRkdfVkVSU0lPTgkJCQkxCisKKy8qKgorICogTWFudWZhY3R1cmluZyBibG9jayBmb3JtYXQKKyAqLworI2RlZmluZSBCRkFfTUZHX1NFUklBTE5VTV9TSVpFCQkJMTEKKyNkZWZpbmUgQkZBX01GR19QQVJUTlVNX1NJWkUJCQkxNAorI2RlZmluZSBCRkFfTUZHX1NVUFBMSUVSX0lEX1NJWkUJCTEwCisjZGVmaW5lIEJGQV9NRkdfU1VQUExJRVJfUEFSVE5VTV9TSVpFCTIwCisjZGVmaW5lIEJGQV9NRkdfU1VQUExJRVJfU0VSSUFMTlVNX1NJWkUJMjAKKyNkZWZpbmUgQkZBX01GR19TVVBQTElFUl9SRVZJU0lPTl9TSVpFCTQKKyNkZWZpbmUgU1RSU1ooX24pCSgoKF9uKSArIDQpICYgfjMpCisKKy8qKgorICogVlBEIGRhdGEgbGVuZ3RoCisgKi8KKyNkZWZpbmUgQkZBX01GR19WUERfTEVOICAgICAyNTYKKworLyoqCisgKiBBbGwgbnVtZXJpY2FsIGZpZWxkcyBhcmUgaW4gYmlnLWVuZGlhbiBmb3JtYXQuCisgKi8KK3N0cnVjdCBiZmFfbWZnX3ZwZF9zIHsKKyAgICB1OCAgICAgdmVyc2lvbjsgICAgLyogIHZwZCBkYXRhIHZlcnNpb24gKi8KKyAgICB1OCAgICAgdnBkX3NpZ1szXTsgLyogIGNoYXJhY3RlcnMgJ1YnLCAnUCcsICdEJyAqLworICAgIHU4ICAgICBjaGtzdW07ICAgICAvKiAgdTggY2hlY2tzdW0gKi8KKyAgICB1OCAgICAgdmVuZG9yOyAgICAgLyogIHZlbmRvciAqLworICAgIHU4ICAgICBsZW47ICAgICAgICAvKiAgdnBkIGRhdGEgbGVuZ3RoIGV4Y2x1ZGluZyBoZWFkZXIgKi8KKyAgICB1OCAgICAgcnN2OworICAgIHU4ICAgICBkYXRhW0JGQV9NRkdfVlBEX0xFTl07ICAvKiAgdnBkIGRhdGEgKi8KK307CisKKyNwcmFnbWEgcGFjaygxKQorCisjZW5kaWYgLyogX19CRkFfREVGU19NRkdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wY2kuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjgzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wY2kuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19QQ0lfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUENJX0hfXworCisvKioKKyAqIFBDSSBkZXZpY2UgYW5kIHZlbmRvciBJRCBpbmZvcm1hdGlvbgorICovCitlbnVtIHsKKwlCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFCT0gMHgxNjU3LAorCUJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMlAJPSAweDEzLAorCUJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMVAJPSAweDE3LAorCUJGQV9QQ0lfREVWSUNFX0lEX0NUCQk9IDB4MTQsCit9OworCisvKioKKyAqIFBDSSBzdWItc3lzdGVtIGRldmljZSBhbmQgdmVuZG9yIElEIGluZm9ybWF0aW9uCisgKi8KK2VudW0geworCUJGQV9QQ0lfRkNPRV9TU0RFVklDRV9JRAk9IDB4MTQsCit9OworCisjZGVmaW5lIEJGQV9QQ0lfQUNDRVNTX1JBTkdFUyAxCS8qIE1heGltdW0gbnVtYmVyIG9mIGRldmljZSBhZGRyZXNzIHJhbmdlcworCQkJCSAqIG1hcHBlZCB0aHJvdWdoIGRpZmZlcmVudCBCQVIocykuICovCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1BDSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZDZkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wbS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1BNX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1BNX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorCisvKioKKyAqIEJGQSBwb3dlciBtYW5hZ2VtZW50IGRldmljZSBzdGF0ZXMKKyAqLworZW51bSBiZmFfcG1fZHMgeworCUJGQV9QTV9EU19EMCA9IDAsCS8qICBmdWxsIHBvd2VyIG1vZGUgKi8KKwlCRkFfUE1fRFNfRDEgPSAxLAkvKiAgcG93ZXIgc2F2ZSBzdGF0ZSAxICovCisJQkZBX1BNX0RTX0QyID0gMiwJLyogIHBvd2VyIHNhdmUgc3RhdGUgMiAqLworCUJGQV9QTV9EU19EMyA9IDMsCS8qICBwb3dlciBvZmYgc3RhdGUgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1BNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG9tLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWZhMjc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG9tLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX1BPTV9IX18KKyNkZWZpbmUgX19CRkFfREVGU19QT01fSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorCisvKioKKyAqIFBPTSBoZWFsdGggc3RhdHVzIGxldmVscyBmb3IgZWFjaCBhdHRyaWJ1dGVzLgorICovCitlbnVtIGJmYV9wb21fZW50cnlfaGVhbHRoIHsKKwlCRkFfUE9NX0hFQUxUSF9OT0lORk8gID0gMSwJLyogIG5vIGluZm9ybWF0aW9uICovCisJQkZBX1BPTV9IRUFMVEhfTk9STUFMICA9IDIsCS8qICBoZWFsdGggaXMgbm9ybWFsICovCisJQkZBX1BPTV9IRUFMVEhfV0FSTklORyA9IDMsCS8qICB3YXJuaW5nIGxldmVsICovCisJQkZBX1BPTV9IRUFMVEhfQUxBUk0gICA9IDQsCS8qICBhbGFybWluZyBsZXZlbCAqLworfTsKKworLyoqCisgKiBSZWFkaW5nIG9mIHRlbXBlcmF0dXJlL3ZvbHRhZ2UvY3VycmVudC9wb3dlcgorICovCitzdHJ1Y3QgYmZhX3BvbV9lbnRyeV9zIHsKKwllbnVtIGJmYV9wb21fZW50cnlfaGVhbHRoIGhlYWx0aDsJLyogIFBPTSBlbnRyeSBoZWFsdGggKi8KKwl1MzIgICAgICAgIGN1cnJfdmFsdWU7CS8qICBjdXJyZW50IHZhbHVlICovCisJdTMyICAgICAgICB0aHJfd2Fybl9oaWdoOwkvKiAgdGhyZXNob2xkIHdhcm5pbmcgaGlnaCAqLworCXUzMiAgICAgICAgdGhyX3dhcm5fbG93OwkvKiAgdGhyZXNob2xkIHdhcm5pbmcgbG93ICovCisJdTMyICAgICAgICB0aHJfYWxhcm1fbG93OwkvKiAgdGhyZXNob2xkIGFsYXJhbSBsb3cgKi8KKwl1MzIgICAgICAgIHRocl9hbGFybV9oaWdoOwkvKiAgdGhyZXNob2xkIGFsYXJtIGhpZ2ggKi8KK307CisKKy8qKgorICogUE9NIGF0dHJpYnV0ZXMKKyAqLworc3RydWN0IGJmYV9wb21fYXR0cl9zIHsKKwlzdHJ1Y3QgYmZhX3BvbV9lbnRyeV9zIHRlbXBlcmF0dXJlOwkvKiAgY2VudGlncmFkZSAqLworCXN0cnVjdCBiZmFfcG9tX2VudHJ5X3Mgdm9sdGFnZTsJLyogIHZvbHRzICovCisJc3RydWN0IGJmYV9wb21fZW50cnlfcyBjdXJyOwkvKiAgbWlsbGkgYW1wcyAqLworCXN0cnVjdCBiZmFfcG9tX2VudHJ5X3MgdHhwb3dlcjsJLyogIG1pY3JvIHdhdHRzICovCisJc3RydWN0IGJmYV9wb21fZW50cnlfcyByeHBvd2VyOwkvKiAgbWljcm8gd2F0dHMgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1BPTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA2OTZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG9ydC5oCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19QT1JUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1BPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2MuaD4KKworI2RlZmluZSBCRkFfRkNTX0ZBQlJJQ19JUEFERFJfU1ogIDE2CisKKy8qKgorICogc3ltYm9saWMgbmFtZXMgZm9yIGJhc2UgcG9ydC92aXJ0dWFsIHBvcnQKKyAqLworI2RlZmluZSBCRkFfU1lNTkFNRV9NQVhMRU4JMTI4CS8qIHZtd2FyZS93aW5kb3dzIHVzZXMgMTI4IGJ5dGVzICovCitzdHJ1Y3QgYmZhX3BvcnRfc3ltbmFtZV9zIHsKKwljaGFyICAgICAgICAgICAgc3ltbmFtZVtCRkFfU1lNTkFNRV9NQVhMRU5dOworfTsKKworLyoqCisqIFJvbGVzIG9mIEZDUyBwb3J0OgorICogICAgIC0gRkNQIElNIGFuZCBGQ1AgVE0gcm9sZXMgY2Fubm90IGJlIGVuYWJsZWQgdG9nZXRoZXIgZm9yIGEgRkNTIHBvcnQKKyAqICAgICAtIENyZWF0ZSBtdWx0aXBsZSBwb3J0cyBpZiBib3RoIElNIGFuZCBUTSBmdW5jdGlvbnMgcmVxdWlyZWQuCisgKiAgICAgLSBBdGxlYXN0IG9uZSByb2xlIG11c3QgYmUgc3BlY2lmaWVkLgorICovCitlbnVtIGJmYV9wb3J0X3JvbGUgeworCUJGQV9QT1JUX1JPTEVfRkNQX0lNIAk9IDB4MDEsCS8qICBGQ1AgaW5pdGlhdG9yIHJvbGUgKi8KKwlCRkFfUE9SVF9ST0xFX0ZDUF9UTSAJPSAweDAyLAkvKiAgRkNQIHRhcmdldCByb2xlICovCisJQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQyAJPSAweDA0LAkvKiAgSVAgb3ZlciBGQyByb2xlICovCisJQkZBX1BPUlRfUk9MRV9GQ1BfTUFYIAk9IEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMgfCBCRkFfUE9SVF9ST0xFX0ZDUF9JTQorfTsKKworLyoqCisgKiBGQ1MgcG9ydCBjb25maWd1cmF0aW9uLgorICovCitzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgeworICAgIHd3bl90ICAgICAgICAgICAgICAgcHd3bjsgICAgICAgLyogIHBvcnQgd3duICovCisgICAgd3duX3QgICAgICAgICAgICAgICBud3duOyAgICAgICAvKiAgbm9kZSB3d24gKi8KKyAgICBzdHJ1Y3QgYmZhX3BvcnRfc3ltbmFtZV9zICBzeW1fbmFtZTsgICAvKiAgdm0gcG9ydCBzeW1ib2xpYyBuYW1lICovCisgICAgZW51bSBiZmFfcG9ydF9yb2xlICAgICByb2xlczsgICAgICAvKiAgRkNTIHBvcnQgcm9sZXMgKi8KKwl1MzIJCQlyc3ZkOworICAgIHU4ICAgICAgICAgICAgIHRhZ1sxNl07CS8qICBvcGFxdWUgdGFnIGZyb20gYXBwbGljYXRpb24gKi8KK307CisKKy8qKgorICogRkNTIHBvcnQgc3RhdGVzCisgKi8KK2VudW0gYmZhX3BvcnRfc3RhdGUgeworCUJGQV9QT1JUX1VOSU5JVCAgPSAwLAkvKiAgUE9SVCBpcyBub3QgeWV0IGluaXRpYWxpemVkICovCisJQkZBX1BPUlRfRkRJU0MgICA9IDEsCS8qICBGRElTQyBpcyBpbiBwcm9ncmVzcyAqLworCUJGQV9QT1JUX09OTElORSAgPSAyLAkvKiAgbG9naW4gdG8gZmFicmljIGlzIGNvbXBsZXRlICovCisJQkZBX1BPUlRfT0ZGTElORSA9IDMsCS8qICBObyBsb2dpbiB0byBmYWJyaWMgKi8KK307CisKKy8qKgorICogRkNTIHBvcnQgdHlwZS4gUmVxdWlyZWQgZm9yIFZtV2FyZS4KKyAqLworZW51bSBiZmFfcG9ydF90eXBlIHsKKwlCRkFfUE9SVF9UWVBFX1BIWVNJQ0FMID0gMCwKKwlCRkFfUE9SVF9UWVBFX1ZJUlRVQUwsCit9OworCisvKioKKyAqIEZDUyBwb3J0IG9mZmxpbmUgcmVhc29uLiBSZXF1aXJlZCBmb3IgVm1XYXJlLgorICovCitlbnVtIGJmYV9wb3J0X29mZmxpbmVfcmVhc29uIHsKKwlCRkFfUE9SVF9PRkZMSU5FX1VOS05PV04gPSAwLAorCUJGQV9QT1JUX09GRkxJTkVfTElOS0RPV04sCisJQkZBX1BPUlRfT0ZGTElORV9GQUJfVU5TVVBQT1JURUQsCS8qICBOUElWIG5vdCBzdXBwb3J0ZWQgYnkgdGhlCisJCQkJCQkgKiAgICBmYWJyaWMgKi8KKwlCRkFfUE9SVF9PRkZMSU5FX0ZBQl9OT1JFU09VUkNFUywKKwlCRkFfUE9SVF9PRkZMSU5FX0ZBQl9MT0dPVVQsCit9OworCisvKioKKyAqIEZDUyBscG9ydCBpbmZvLiBSZXF1aXJlZCBmb3IgVm1XYXJlLgorICovCitzdHJ1Y3QgYmZhX3BvcnRfaW5mb19zIHsKKwl1OCAgICAgICAgIHBvcnRfdHlwZTsJLyogYmZhX3BvcnRfdHlwZV90IDogcGh5c2ljYWwgb3IKKwkJCQkJICogdmlydHVhbCAqLworCXU4ICAgICAgICAgcG9ydF9zdGF0ZTsJLyogb25lIG9mIGJmYV9wb3J0X3N0YXRlIHZhbHVlcyAqLworCXU4ICAgICAgICAgb2ZmbGluZV9yZWFzb247CS8qIG9uZSBvZiBiZmFfcG9ydF9vZmZsaW5lX3JlYXNvbl90CisJCQkJCSAqIHZhbHVlcyAqLworCXd3bl90ICAgICAgICAgICBwb3J0X3d3bjsKKwl3d25fdCAgICAgICAgICAgbm9kZV93d247CisKKwkvKgorCSAqIGZvbGxvd2luZyA0IGZlaWxkcyBhcmUgdmFsaWQgZm9yIFBoeXNpY2FsIFBvcnRzIG9ubHkKKwkgKi8KKwl1MzIgICAgICAgIG1heF92cG9ydHNfc3VwcDsJLyogTWF4IHN1cHBvcnRlZCB2cG9ydHMgKi8KKwl1MzIgICAgICAgIG51bV92cG9ydHNfaW51c2U7CS8qIE51bSBvZiBpbiB1c2UgdnBvcnRzICovCisJdTMyICAgICAgICBtYXhfcnBvcnRzX3N1cHA7CS8qIE1heCBzdXBwb3J0ZWQgcnBvcnRzICovCisJdTMyICAgICAgICBudW1fcnBvcnRzX2ludXNlOwkvKiBOdW0gb2YgZG9zY292ZXJlZCBycG9ydHMgKi8KKworfTsKKworLyoqCisgKiBGQ1MgcG9ydCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfcG9ydF9zdGF0c19zIHsKKwl1MzIgICAgICAgIG5zX3Bsb2dpX3NlbnQ7CisJdTMyICAgICAgICBuc19wbG9naV9yc3BfZXJyOworCXUzMiAgICAgICAgbnNfcGxvZ2lfYWNjX2VycjsKKwl1MzIgICAgICAgIG5zX3Bsb2dpX2FjY2VwdHM7CisJdTMyICAgICAgICBuc19yZWplY3RzOwkvKiBOUyBjb21tYW5kIHJlamVjdHMgKi8KKwl1MzIgICAgICAgIG5zX3Bsb2dpX3Vua25vd25fcnNwOworCXUzMiAgICAgICAgbnNfcGxvZ2lfYWxsb2Nfd2FpdDsKKworCXUzMiAgICAgICAgbnNfcmV0cmllczsJLyogTlMgY29tbWFuZCByZXRyaWVzICovCisJdTMyICAgICAgICBuc190aW1lb3V0czsJLyogTlMgY29tbWFuZCB0aW1lb3V0cyAqLworCisJdTMyICAgICAgICBuc19yc3BuaWRfc2VudDsKKwl1MzIgICAgICAgIG5zX3JzcG5pZF9hY2NlcHRzOworCXUzMiAgICAgICAgbnNfcnNwbmlkX3JzcF9lcnI7CisJdTMyICAgICAgICBuc19yc3BuaWRfcmVqZWN0czsKKwl1MzIgICAgICAgIG5zX3JzcG5pZF9hbGxvY193YWl0OworCisJdTMyICAgICAgICBuc19yZnRpZF9zZW50OworCXUzMiAgICAgICAgbnNfcmZ0aWRfYWNjZXB0czsKKwl1MzIgICAgICAgIG5zX3JmdGlkX3JzcF9lcnI7CisJdTMyICAgICAgICBuc19yZnRpZF9yZWplY3RzOworCXUzMiAgICAgICAgbnNfcmZ0aWRfYWxsb2Nfd2FpdDsKKworCXUzMgluc19yZmZpZF9zZW50OworCXUzMgluc19yZmZpZF9hY2NlcHRzOworCXUzMgluc19yZmZpZF9yc3BfZXJyOworCXUzMgluc19yZmZpZF9yZWplY3RzOworCXUzMgluc19yZmZpZF9hbGxvY193YWl0OworCisJdTMyICAgICAgICBuc19naWRmdF9zZW50OworCXUzMiAgICAgICAgbnNfZ2lkZnRfYWNjZXB0czsKKwl1MzIgICAgICAgIG5zX2dpZGZ0X3JzcF9lcnI7CisJdTMyICAgICAgICBuc19naWRmdF9yZWplY3RzOworCXUzMiAgICAgICAgbnNfZ2lkZnRfdW5rbm93bl9yc3A7CisJdTMyICAgICAgICBuc19naWRmdF9hbGxvY193YWl0OworCisJLyoKKwkgKiBNZ210IFNlcnZlciBzdGF0cworCSAqLworCXUzMiAgICAgICAgbXNfcmV0cmllczsJLyogTVMgY29tbWFuZCByZXRyaWVzICovCisJdTMyICAgICAgICBtc190aW1lb3V0czsJLyogTVMgY29tbWFuZCB0aW1lb3V0cyAqLworCXUzMiAgICAgICAgbXNfcGxvZ2lfc2VudDsKKwl1MzIgICAgICAgIG1zX3Bsb2dpX3JzcF9lcnI7CisJdTMyICAgICAgICBtc19wbG9naV9hY2NfZXJyOworCXUzMiAgICAgICAgbXNfcGxvZ2lfYWNjZXB0czsKKwl1MzIgICAgICAgIG1zX3JlamVjdHM7CS8qIE5TIGNvbW1hbmQgcmVqZWN0cyAqLworCXUzMiAgICAgICAgbXNfcGxvZ2lfdW5rbm93bl9yc3A7CisJdTMyICAgICAgICBtc19wbG9naV9hbGxvY193YWl0OworCisJdTMyICAgICAgICBudW1fcnNjbjsJLyogTnVtIG9mIFJTQ04gcmVjZWl2ZWQgKi8KKwl1MzIgICAgICAgIG51bV9wb3J0aWRfcnNjbjsvKiBOdW0gcG9ydGlkIGZvcm1hdCBSU0NOCisJCQkJCQkJCSogcmVjZWl2ZWQgKi8KKworCXUzMgl1Zl9yZWN2czsgCS8qIHVuc29saWNpdGVkIHJlY3YgZnJhbWVzICAgICAgKi8KKwl1MzIJdWZfcmVjdl9kcm9wczsgCS8qIGRyb3BwZWQgcmVjZWl2ZWQgZnJhbWVzCSovCisKKwl1MzIJcnN2ZDsgCQkvKiBwYWRkaW5nIGZvciA2NCBiaXQgYWxpZ25tZW50ICovCit9OworCisvKioKKyAqIEJGQSBwb3J0IGF0dHJpYnV0ZSByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfcG9ydF9hdHRyX3MgeworCWVudW0gYmZhX3BvcnRfc3RhdGUgc3RhdGU7CQkvKiAgcG9ydCBzdGF0ZSAqLworCXUzMiAgICAgICAgIHBpZDsJCS8qICBwb3J0IElEICovCisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICAgcG9ydF9jZmc7CS8qICBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KKwllbnVtIGJmYV9wcG9ydF90eXBlIHBvcnRfdHlwZTsJLyogIGN1cnJlbnQgdG9wb2xvZ3kgKi8KKwl1MzIgICAgICAgICBsb29wYmFjazsJLyogIGNhYmxlIGlzIGV4dGVybmFsbHkgbG9vcGVkIGJhY2sgKi8KKwl3d25fdAkJZmFicmljX25hbWU7IC8qICBhdHRhY2hlZCBzd2l0Y2gncyBud3duICovCisJdTgJCWZhYnJpY19pcF9hZGRyW0JGQV9GQ1NfRkFCUklDX0lQQUREUl9TWl07IC8qICBhdHRhY2hlZAorCQkJCQkJCSogZmFicmljJ3MgaXAgYWRkciAqLworfTsKKworLyoqCisgKiBCRkEgcGh5c2ljYWwgcG9ydCBMZXZlbCBldmVudHMKKyAqIEFyZ3VtZW50cyBiZWxvdyBhcmUgaW4gQkZBTCBjb250ZXh0IGZyb20gTWdtdAorICogQkZBX1BPUlRfQUVOX09OTElORTogICAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9PRkZMSU5FOiAgICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fUkxJUjogICAgICAgW2luXTogTm9uZQlbb3V0XTogcHd3biwgcmxpcl9kYXRhLCBybGlyX2xlbgorICogQkZBX1BPUlRfQUVOX1NGUF9JTlNFUlQ6IFtpbl06IHB3d24JW291dF06IHBvcnRfaWQsIHB3d24KKyAqIEJGQV9QT1JUX0FFTl9TRlBfUkVNT1ZFOiBbaW5dOiBwd3duCVtvdXRdOiBwb3J0X2lkLCBwd3duCisgKiBCRkFfUE9SVF9BRU5fU0ZQX1BPTTogICAgW2luXTogcHd3bglbb3V0XTogbGV2ZWwsIHBvcnRfaWQsIHB3d24KKyAqIEJGQV9QT1JUX0FFTl9FTkFCTEU6ICAgICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fRElTQUJMRTogICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX0FVVEhfT046ICAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9BVVRIX09GRjogICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fRElTQ09OTkVDVDogW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX1FPU19ORUc6ICAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9GQUJSSUNfTkFNRV9DSEFOR0U6IFtpbl06IHB3d24sIFtvdXRdOiBwd3duLCBmd3duCisgKgorICovCitlbnVtIGJmYV9wb3J0X2Flbl9ldmVudCB7CisJQkZBX1BPUlRfQUVOX09OTElORSAgICAgPSAxLAkvKiAgUGh5c2ljYWwgUG9ydCBvbmxpbmUgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fT0ZGTElORSAgICA9IDIsCS8qICBQaHlzaWNhbCBQb3J0IG9mZmxpbmUgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fUkxJUiAgICAgICA9IDMsCS8qICBSTElSIGV2ZW50LCBub3Qgc3VwcG9ydGVkICovCisJQkZBX1BPUlRfQUVOX1NGUF9JTlNFUlQgPSA0LAkvKiAgU0ZQIGluc2VydGVkIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1NGUF9SRU1PVkUgPSA1LAkvKiAgU0ZQIHJlbW92ZWQgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1BPTSAgICA9IDYsCS8qICBTRlAgUE9NIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0VOQUJMRSAgICAgPSA3LAkvKiAgUGh5c2ljYWwgUG9ydCBlbmFibGUgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fRElTQUJMRSAgICA9IDgsCS8qICBQaHlzaWNhbCBQb3J0IGRpc2FibGUgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fQVVUSF9PTiAgICA9IDksCS8qICBQaHlzaWNhbCBQb3J0IGF1dGggc3VjY2VzcyBldmVudCAqLworCUJGQV9QT1JUX0FFTl9BVVRIX09GRiAgID0gMTAsCS8qICBQaHlzaWNhbCBQb3J0IGF1dGggZmFpbCBldmVudCAqLworCUJGQV9QT1JUX0FFTl9ESVNDT05ORUNUID0gMTEsCS8qICBQaHlzaWNhbCBQb3J0IGRpc2Nvbm5lY3QgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fUU9TX05FRyAgICA9IDEyLCAgCS8qICBCYXNlIFBvcnQgUU9TIG5lZ290aWF0aW9uIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0ZBQlJJQ19OQU1FX0NIQU5HRSA9IDEzLCAvKiAgRmFicmljIE5hbWUvV1dOIGNoYW5nZQorCQkJCQkgICAgICAgKiBldmVudCAqLworCUJGQV9QT1JUX0FFTl9TRlBfQUNDRVNTX0VSUk9SID0gMTQsIC8qICBTRlAgcmVhZCBlcnJvciBldmVudCAqLworCUJGQV9QT1JUX0FFTl9TRlBfVU5TVVBQT1JUID0gMTUsIC8qICBVbnN1cHBvcnRlZCBTRlAgZXZlbnQgKi8KK307CisKK2VudW0gYmZhX3BvcnRfYWVuX3NmcF9wb20geworCUJGQV9QT1JUX0FFTl9TRlBfUE9NX0dSRUVOID0gMSwJLyogIE5vcm1hbCAqLworCUJGQV9QT1JUX0FFTl9TRlBfUE9NX0FNQkVSID0gMiwJLyogIFdhcm5pbmcgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1BPTV9SRUQgICA9IDMsCS8qICBDcml0aWNhbCAqLworCUJGQV9QT1JUX0FFTl9TRlBfUE9NX01BWCAgID0gQkZBX1BPUlRfQUVOX1NGUF9QT01fUkVECit9OworCitzdHJ1Y3QgYmZhX3BvcnRfYWVuX2RhdGFfcyB7CisJZW51bSBiZmFfaW9jX3R5cGVfZSBpb2NfdHlwZTsKKwl3d25fdCAgICAgICAgICAgcHd3bjsJICAgICAgLyogIFdXTiBvZiB0aGUgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBmd3duOwkgICAgICAvKiAgV1dOIG9mIHRoZSBmYWJyaWMgcG9ydCAqLworCW1hY190ICAgICAgICAgICBtYWM7CSAgICAgIC8qICBNQUMgYWRkcmVzIG9mIHRoZSBldGhlcm5ldCBwb3J0LAorCQkJCSAgICAgICAqIGFwcGxpY2FibGUgdG8gQ05BIHBvcnQgb25seSAqLworCWludCAgICAgICAgICAgICBwaHlfcG9ydF9udW07IC8qISBGb3IgU0ZQIHJlbGF0ZWQgZXZlbnRzICovCisJZW51bSBiZmFfcG9ydF9hZW5fc2ZwX3BvbSBsZXZlbDsgLyogIE9ubHkgdHJhbnNpdGlvbnMgd2lsbAorCQkJCQkgICogYmUgaW5mb3JtZWQgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1BPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDAwYmM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcHBvcnQuaApAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUFBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUFBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvZmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19xb3MuaD4KKyNpbmNsdWRlIDxjbmEvcHN0YXRzL3BoeXBvcnRfZGVmcy5oPgorCisvKiBNb2RpZnkgY2hhciogcG9ydF9zdHRbXSBpbiBiZmFsX3BvcnQuYyBpZiBhIG5ldyBzdGF0ZSB3YXMgYWRkZWQgKi8KK2VudW0gYmZhX3Bwb3J0X3N0YXRlcyB7CisJQkZBX1BQT1JUX1NUX1VOSU5JVCAJCT0gMSwKKwlCRkFfUFBPUlRfU1RfRU5BQkxJTkdfUVdBSVQgCT0gMiwKKwlCRkFfUFBPUlRfU1RfRU5BQkxJTkcgCQk9IDMsCisJQkZBX1BQT1JUX1NUX0xJTktET1dOIAkJPSA0LAorCUJGQV9QUE9SVF9TVF9MSU5LVVAgCQk9IDUsCisJQkZBX1BQT1JUX1NUX0RJU0FCTElOR19RV0FJVCAJPSA2LAorCUJGQV9QUE9SVF9TVF9ESVNBQkxJTkcJCT0gNywKKwlCRkFfUFBPUlRfU1RfRElTQUJMRUQgCQk9IDgsCisJQkZBX1BQT1JUX1NUX1NUT1BQRUQgCQk9IDksCisJQkZBX1BQT1JUX1NUX0lPQ0RPV04gCQk9IDEwLAorCUJGQV9QUE9SVF9TVF9JT0NESVMgCQk9IDExLAorCUJGQV9QUE9SVF9TVF9GV01JU01BVENICQk9IDEyLAorCUJGQV9QUE9SVF9TVF9NQVhfU1RBVEUsCit9OworCisvKioKKyAqIAlQb3J0IHNwZWVkIHNldHRpbmdzLiBFYWNoIHNwZWNpZmljIHNwZWVkIGlzIGEgYml0IGZpZWxkLiBVc2UgbXVsdGlwbGUKKyAqICAgICAgYml0cyB0byBzcGVjaWZ5IHNwZWVkcyB0byBiZSBzZWxlY3RlZCBmb3IgYXV0by1uZWdvdGlhdGlvbi4KKyAqLworZW51bSBiZmFfcHBvcnRfc3BlZWQgeworCUJGQV9QUE9SVF9TUEVFRF9VTktOT1dOID0gMCwKKwlCRkFfUFBPUlRfU1BFRURfMUdCUFMgCT0gMSwKKwlCRkFfUFBPUlRfU1BFRURfMkdCUFMgCT0gMiwKKwlCRkFfUFBPUlRfU1BFRURfNEdCUFMgCT0gNCwKKwlCRkFfUFBPUlRfU1BFRURfOEdCUFMgCT0gOCwKKwlCRkFfUFBPUlRfU1BFRURfMTBHQlBTIAk9IDEwLAorCUJGQV9QUE9SVF9TUEVFRF9BVVRPID0KKwkJKEJGQV9QUE9SVF9TUEVFRF8xR0JQUyB8IEJGQV9QUE9SVF9TUEVFRF8yR0JQUyB8CisJCSBCRkFfUFBPUlRfU1BFRURfNEdCUFMgfCBCRkFfUFBPUlRfU1BFRURfOEdCUFMpLAorfTsKKworLyoqCisgKiAJCVBvcnQgb3BlcmF0aW9uYWwgdHlwZSAoaW4gc3luYyB3aXRoIFNOSUEgcG9ydCB0eXBlKS4KKyAqLworZW51bSBiZmFfcHBvcnRfdHlwZSB7CisJQkZBX1BQT1JUX1RZUEVfVU5LTk9XTiA9IDEsCS8qICBwb3J0IHR5cGUgaXMgdW5rb3duICovCisJQkZBX1BQT1JUX1RZUEVfVFJVTktFRCA9IDIsCS8qICBUcnVua2VkIG1vZGUgKi8KKwlCRkFfUFBPUlRfVFlQRV9OUE9SVCAgID0gNSwJLyogIFAyUCB3aXRoIHN3aXRjaGVkIGZhYnJpYyAqLworCUJGQV9QUE9SVF9UWVBFX05MUE9SVCAgPSA2LAkvKiAgcHVibGljIGxvb3AgKi8KKwlCRkFfUFBPUlRfVFlQRV9MUE9SVCAgID0gMjAsCS8qICBwcml2YXRlIGxvb3AgKi8KKwlCRkFfUFBPUlRfVFlQRV9QMlAgICAgID0gMjEsCS8qICBQMlAgd2l0aCBubyBzd2l0Y2hlZCBmYWJyaWMgKi8KKwlCRkFfUFBPUlRfVFlQRV9WUE9SVCAgID0gMjIsCS8qICBOUElWIC0gdmlydHVhbCBwb3J0ICovCit9OworCisvKioKKyAqIAkJUG9ydCB0b3BvbG9neSBzZXR0aW5nLiBBIHBvcnQncyB0b3BvbG9neSBhbmQgZmFicmljIGxvZ2luIHN0YXR1cworICogCQlkZXRlcm1pbmUgaXRzIG9wZXJhdGlvbmFsIHR5cGUuCisgKi8KK2VudW0gYmZhX3Bwb3J0X3RvcG9sb2d5IHsKKwlCRkFfUFBPUlRfVE9QT0xPR1lfTk9ORSA9IDAsCS8qICBObyB2YWxpZCB0b3BvbG9neSAqLworCUJGQV9QUE9SVF9UT1BPTE9HWV9QMlAgID0gMSwJLyogIFAyUCBvbmx5ICovCisJQkZBX1BQT1JUX1RPUE9MT0dZX0xPT1AgPSAyLAkvKiAgTE9PUCB0b3BvbG9neSAqLworCUJGQV9QUE9SVF9UT1BPTE9HWV9BVVRPID0gMywJLyogIGF1dG8gdG9wb2xvZ3kgc2VsZWN0aW9uICovCit9OworCisvKioKKyAqIAkJUGh5c2ljYWwgcG9ydCBsb29wYmFjayB0eXBlcy4KKyAqLworZW51bSBiZmFfcHBvcnRfb3Btb2RlIHsKKwlCRkFfUFBPUlRfT1BNT0RFX05PUk1BTCAgID0gMHgwMCwgLyogIG5vcm1hbCBub24tbG9vcGJhY2sgbW9kZSAqLworCUJGQV9QUE9SVF9PUE1PREVfTEJfSU5UICAgPSAweDAxLCAvKiAgaW50ZXJuYWwgbG9vcCBiYWNrICovCisJQkZBX1BQT1JUX09QTU9ERV9MQl9TTFcgICA9IDB4MDIsIC8qICBzZXJpYWwgbGluayB3cmFwYmFjayAoc2VyZGVzKSAqLworCUJGQV9QUE9SVF9PUE1PREVfTEJfRVhUICAgPSAweDA0LCAvKiAgZXh0ZXJuYWwgbG9vcCBiYWNrIChzZXJkZXMpICovCisJQkZBX1BQT1JUX09QTU9ERV9MQl9DQkwgICA9IDB4MDgsIC8qICBjYWJsZWQgbG9vcCBiYWNrICovCisJQkZBX1BQT1JUX09QTU9ERV9MQl9OTElOVCA9IDB4MjAsIC8qICBOTF9Qb3J0IGludGVybmFsIGxvb3BiYWNrICovCit9OworCisjZGVmaW5lIEJGQV9QUE9SVF9PUE1PREVfTEJfSEFSRChfbW9kZSkJCQlcCisJKChfbW9kZSA9PSBCRkFfUFBPUlRfT1BNT0RFX0xCX0lOVCkgfHwJCVwKKyAgICAgKF9tb2RlID09IEJGQV9QUE9SVF9PUE1PREVfTEJfU0xXKSB8fAkJXAorICAgICAoX21vZGUgPT0gQkZBX1BQT1JUX09QTU9ERV9MQl9FWFQpKQorCisvKioKKwkJUG9ydCBTdGF0ZSAoaW4gc3luYyB3aXRoIFNOSUEgcG9ydCBzdGF0ZSkuCisgKi8KK2VudW0gYmZhX3Bwb3J0X3NuaWFfc3RhdGUgeworCUJGQV9QUE9SVF9TVEFURV9VTktOT1dOICA9IDEsCS8qICBwb3J0IGlzIG5vdCBpbml0aWFsaXplZCAqLworCUJGQV9QUE9SVF9TVEFURV9PTkxJTkUgICA9IDIsCS8qICBwb3J0IGlzIE9OTElORSAqLworCUJGQV9QUE9SVF9TVEFURV9ESVNBQkxFRCA9IDMsCS8qICBwb3J0IGlzIGRpc2FibGVkIGJ5IHVzZXIgKi8KKwlCRkFfUFBPUlRfU1RBVEVfQllQQVNTRUQgPSA0LAkvKiAgcG9ydCBpcyBieXBhc3NlZCAoaW4gTE9PUCkgKi8KKwlCRkFfUFBPUlRfU1RBVEVfRElBRyAgICAgPSA1LAkvKiAgcG9ydCBkaWFnbm9zdGljcyBpcyBhY3RpdmUgKi8KKwlCRkFfUFBPUlRfU1RBVEVfTElOS0RPV04gPSA2LAkvKiAgbGluayBpcyBkb3duICovCisJQkZBX1BQT1JUX1NUQVRFX0xPT1BCQUNLID0gOCwJLyogIHBvcnQgaXMgbG9vcGVkIGJhY2sgKi8KK307CisKKy8qKgorICogCQlQb3J0IGxpbmsgc3RhdGUKKyAqLworZW51bSBiZmFfcHBvcnRfbGlua3N0YXRlIHsKKwlCRkFfUFBPUlRfTElOS1VQIAkgPSAxLAkvKiAgUGh5c2ljYWwgcG9ydC9UcnVuayBsaW5rIHVwICovCisJQkZBX1BQT1JUX0xJTktET1dOIAkgPSAyLAkvKiAgUGh5c2ljYWwgcG9ydC9UcnVuayBsaW5rIGRvd24gKi8KKwlCRkFfUFBPUlRfVFJVTktfTElOS0RPV04gPSAzLAkvKiAgVHJ1bmsgbGluayBkb3duIChuZXcgdG1hc3RlcikgKi8KK307CisKKy8qKgorICogCQlQb3J0IGxpbmsgc3RhdGUgZXZlbnQKKyAqLworI2RlZmluZSBiZmFfcHBvcnRfZXZlbnRfdCBlbnVtIGJmYV9wcG9ydF9saW5rc3RhdGUKKworLyoqCisgKiAJCVBvcnQgbGluayBzdGF0ZSByZWFzb24gY29kZQorICovCitlbnVtIGJmYV9wcG9ydF9saW5rc3RhdGVfcnNuIHsKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9OT05FCQk9IDAsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fRElTQUJMRUQgCT0gMSwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9SWF9OT1MgCQk9IDIsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUlhfT0xTIAkJPSAzLAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1JYX0xJUCAJCT0gNCwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9SWF9MSVBGNyAJPSA1LAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1NGUF9SRU1PVkVEIAk9IDYsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUE9SVF9GQVVMVCAJPSA3LAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1JYX0xPUyAJCT0gOCwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9MT0NBTF9GQVVMVCAJPSA5LAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1JFTU9URV9GQVVMVCAJPSAxMCwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9USU1FT1VUIAk9IDExLAorCisKKworCS8qIENFRSByZWxhdGVkIHJlYXNvbiBjb2Rlcy9lcnJvcnMgKi8KKwlDRUVfTExEUF9JTkZPX0FHRURfT1VUICAgICAgID0gMjAsCisJQ0VFX0xMRFBfU0hVVERPV05fVExWX1JDVkQgICA9IDIxLAorCUNFRV9QRUVSX05PVF9BRFZFUlRJU0VfRENCWCAgPSAyMiwKKwlDRUVfUEVFUl9OT1RfQURWRVJUSVNFX1BHICAgID0gMjMsCisJQ0VFX1BFRVJfTk9UX0FEVkVSVElTRV9QRkMgICA9IDI0LAorCUNFRV9QRUVSX05PVF9BRFZFUlRJU0VfRkNPRSAgPSAyNSwKKwlDRUVfUEdfTk9UX0NPTVBBVElCTEUgICAgICAgID0gMjYsCisJQ0VFX1BGQ19OT1RfQ09NUEFUSUJMRSAgICAgICA9IDI3LAorCUNFRV9GQ09FX05PVF9DT01QQVRJQkxFICAgICAgPSAyOCwKKwlDRUVfQkFEX1BHX1JDVkQgICAgICAgICAgICAgID0gMjksCisJQ0VFX0JBRF9CV19SQ1ZEICAgICAgICAgICAgICA9IDMwLAorCUNFRV9CQURfUEZDX1JDVkQgICAgICAgICAgICAgPSAzMSwKKwlDRUVfQkFEX0ZDT0VfUFJJX1JDVkQgICAgICAgID0gMzIsCisJQ0VFX0ZDT0VfUFJJX1BGQ19PRkYgICAgICAgICA9IDMzLAorCUNFRV9EVVBfQ09OVFJPTF9UTFZfUkNWRCAgICAgPSAzNCwKKwlDRUVfRFVQX0ZFQVRfVExWX1JDVkQgICAgICAgID0gMzUsCisJQ0VFX0FQUExZX05FV19DRkcgICAgICAgICAgICA9IDM2LAkvKiByZWFzb24sIG5vdCBhbiBlcnJvciAqLworCUNFRV9QUk9UT0NPTF9JTklUICAgICAgICAgICAgPSAzNywgIC8qIHJlYXNvbiwgbm90IGFuIGVycm9yICovCisJQ0VFX1BIWV9MSU5LX0RPV04gICAgICAgICAgICA9IDM4LAorCUNFRV9MTFNfRkNPRV9BQlNFTlQgICAgICAgICAgPSAzOSwKKwlDRUVfTExTX0ZDT0VfRE9XTiAgICAgICAgICAgID0gNDAKK307CisKKy8qKgorICogICAgICBEZWZhdWx0IFRhcmdldCBSYXRlIExpbWl0aW5nIFNwZWVkLgorICovCisjZGVmaW5lIEJGQV9QUE9SVF9ERUZfVFJMX1NQRUVEICBCRkFfUFBPUlRfU1BFRURfMUdCUFMKKworLyoqCisgKiAgICAgIFBoeXNpY2FsIHBvcnQgY29uZmlndXJhdGlvbgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X2NmZ19zIHsKKwl1OCAgICAgICAgIHRvcG9sb2d5OwkvKiAgYmZhX3Bwb3J0X3RvcG9sb2d5CQkqLworCXU4ICAgICAgICAgc3BlZWQ7CQkvKiAgZW51bSBiZmFfcHBvcnRfc3BlZWQJKi8KKwl1OCAgICAgICAgIHRydW5rZWQ7CS8qICB0cnVua2VkIG9yIG5vdAkJKi8KKwl1OCAgICAgICAgIHFvc19lbmFibGVkOwkvKiAgcW9zIGVuYWJsZWQgb3Igbm90CQkqLworCXU4ICAgICAgICAgdHJ1bmtfcG9ydHM7CS8qICBiaXRtYXAgb2YgdHJ1bmtlZCBwb3J0cwkqLworCXU4ICAgICAgICAgY2ZnX2hhcmRhbHBhOwkvKiAgaXMgaGFyZCBhbHBhIGNvbmZpZ3VyZWQJKi8KKwl1MTYgICAgICAgIG1heGZyc2l6ZTsJLyogIG1heGltdW0gZnJhbWUgc2l6ZQkJKi8KKwl1OCAgICAgICAgIGhhcmRhbHBhOwkvKiAgY29uZmlndXJlZCBoYXJkIGFscGEJKi8KKwl1OCAgICAgICAgIHJ4X2JiY3JlZGl0OwkvKiAgcmVjZWl2ZSBidWZmZXIgY3JlZGl0cwkqLworCXU4ICAgICAgICAgdHhfYmJjcmVkaXQ7CS8qICB0cmFuc21pdCBidWZmZXIgY3JlZGl0cwkqLworCXU4ICAgICAgICAgcmF0ZWxpbWl0OwkvKiAgcmF0ZWxpbWl0IGVuYWJsZWQgb3Igbm90CSovCisJdTggICAgICAgICB0cmxfZGVmX3NwZWVkOwkvKiAgcmF0ZWxpbWl0IGRlZmF1bHQgc3BlZWQJKi8KKwl1OAkJcnN2ZFszXTsKKwl1MTYgICAJcGF0aF90b3Y7CS8qICBkZXZpY2UgcGF0aCB0aW1lb3V0CSovCisJdTE2ICAgCXFfZGVwdGg7CS8qICBTQ1NJIFF1ZXVlIGRlcHRoCQkqLworfTsKKworLyoqCisgKiAJCVBvcnQgYXR0cmlidXRlIHZhbHVlcy4KKyAqLworc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgeworCS8qCisJICogU3RhdGljIGZpZWxkcworCSAqLworCXd3bl90ICAgICAgICAgICBud3duOwkJLyogIG5vZGUgd3duICovCisJd3duX3QgICAgICAgICAgIHB3d247CQkvKiAgcG9ydCB3d24gKi8KKwllbnVtIGZjX2NvcyAgICAgY29zX3N1cHBvcnRlZDsJLyogIHN1cHBvcnRlZCBjbGFzcyBvZiBzZXJ2aWNlcyAqLworCXUzMiAgICAgICAgcnN2ZDsKKwlzdHJ1Y3QgZmNfc3ltbmFtZV9zICAgIHBvcnRfc3ltbmFtZTsJLyogIHBvcnQgc3ltYm9saWMgbmFtZSAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkX3N1cHBvcnRlZDsgLyogIHN1cHBvcnRlZCBzcGVlZHMgKi8KKwliZmFfYm9vbGVhbl90ICAgcGJpbmRfZW5hYmxlZDsJLyogIFdpbGwgYmUgc2V0IGlmIFBlcnNpc3RlbnQgYmluZGluZworCQkJCQkgKiAgIGVuYWJsZWQuIFJlbGV2YW50IG9ubHkgaW4gV2luZG93cworCQkJCQkgKi8KKworCS8qCisJICogQ29uZmlndXJlZCB2YWx1ZXMKKwkgKi8KKwlzdHJ1Y3QgYmZhX3Bwb3J0X2NmZ19zIHBwb3J0X2NmZzsJLyogIHBwb3J0IGNmZyAqLworCisJLyoKKwkgKiBEeW5hbWljIGZpZWxkIC0gaW5mbyBmcm9tIEJGQQorCSAqLworCWVudW0gYmZhX3Bwb3J0X3N0YXRlcyAJcG9ydF9zdGF0ZTsJLyogIGN1cnJlbnQgcG9ydCBzdGF0ZSAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIAlzcGVlZDsJCS8qICBjdXJyZW50IHNwZWVkICovCisJZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kgCXRvcG9sb2d5OwkvKiAgY3VycmVudCB0b3BvbG9neSAqLworCWJmYV9ib29sZWFuX3QJCWJlYWNvbjsJCS8qICBjdXJyZW50IGJlYWNvbiBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90CQlsaW5rX2UyZV9iZWFjb247LyogIHNldCBpZiBsaW5rIGJlYWNvbiBvbiAqLworCWJmYV9ib29sZWFuX3QJCXBsb2dfZW5hYmxlZDsJLyogIHNldCBpZiBwb3J0bG9nIGlzIGVuYWJsZWQqLworCisJLyoKKwkgKiBEeW5hbWljIGZpZWxkIC0gaW5mbyBmcm9tIEZDUworCSAqLworCXUzMiAgICAgICAgCXBpZDsJCS8qICBwb3J0IElEICovCisJZW51bSBiZmFfcHBvcnRfdHlwZSAJcG9ydF90eXBlOwkvKiAgY3VycmVudCB0b3BvbG9neSAqLworCXUzMiAgICAgICAgCWxvb3BiYWNrOwkvKiAgZXh0ZXJuYWwgbG9vcGJhY2sgKi8KKwl1MzIJCXJzdmQxOworCXUzMgkJcnN2ZDI7CQkvKiAgcGFkZGluZyBmb3IgNjQgYml0ICovCit9OworCisvKioKKyAqIAkJRkMgUG9ydCBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X2ZjX3N0YXRzX3MgeworCXU2NCAgICAgICAgc2Vjc19yZXNldDsJLyogIHNlY29uZHMgc2luY2Ugc3RhdHMgaXMgcmVzZXQgKi8KKwl1NjQgICAgICAgIHR4X2ZyYW1lczsJLyogIHRyYW5zbWl0dGVkIGZyYW1lcyAqLworCXU2NCAgICAgICAgdHhfd29yZHM7CS8qICB0cmFuc21pdHRlZCB3b3JkcyAqLworCXU2NCAgICAgICAgcnhfZnJhbWVzOwkvKiAgcmVjZWl2ZWQgZnJhbWVzICovCisJdTY0ICAgICAgICByeF93b3JkczsJLyogIHJlY2VpdmVkIHdvcmRzICovCisJdTY0ICAgICAgICBsaXBfY291bnQ7CS8qICBMSVBzIHNlZW4gKi8KKwl1NjQgICAgICAgIG5vc19jb3VudDsJLyogIE5PUyBjb3VudCAqLworCXU2NCAgICAgICAgZXJyb3JfZnJhbWVzOwkvKiAgZXJyb3JlZCBmcmFtZXMgKHNlbnQ/KSAqLworCXU2NCAgICAgICAgZHJvcHBlZF9mcmFtZXM7CS8qICBkcm9wcGVkIGZyYW1lcyAqLworCXU2NCAgICAgICAgbGlua19mYWlsdXJlczsJLyogIGxpbmsgZmFpbHVyZSBjb3VudCAqLworCXU2NCAgICAgICAgbG9zc19vZl9zeW5jczsJLyogIGxvc3Mgb2Ygc3luYyBjb3VudCAqLworCXU2NCAgICAgICAgbG9zc19vZl9zaWduYWxzOy8qICBsb3NzIG9mIHNpZ25hbCBjb3VudCAqLworCXU2NCAgICAgICAgcHJpbXNlcV9lcnJzOwkvKiAgcHJpbWl0aXZlIHNlcXVlbmNlIHByb3RvY29sICovCisJdTY0ICAgICAgICBiYWRfb3NfY291bnQ7CS8qICBpbnZhbGlkIG9yZGVyZWQgc2V0ICovCisJdTY0ICAgICAgICBlcnJfZW5jX291dDsJLyogIEVuY29kaW5nIGVycm9yIG91dHNpZGUgZnJhbWUgKi8KKwl1NjQgICAgICAgIGludmFsaWRfY3JjczsJLyogIGZyYW1lcyByZWNlaXZlZCB3aXRoIGludmFsaWQgQ1JDKi8KKwl1NjQJdW5kZXJzaXplZF9mcm07IC8qICB1bmRlcnNpemVkIGZyYW1lcyAqLworCXU2NAlvdmVyc2l6ZWRfZnJtOwkvKiAgb3ZlcnNpemVkIGZyYW1lcyAqLworCXU2NAliYWRfZW9mX2ZybTsJLyogIGZyYW1lcyB3aXRoIGJhZCBFT0YgKi8KKwlzdHJ1Y3QgYmZhX3Fvc19zdGF0c19zCXFvc19zdGF0czsJLyogIFFvUyBzdGF0aXN0aWNzICovCit9OworCisvKioKKyAqIAkJRXRoIFBvcnQgc3RhdGlzdGljcy4KKyAqLworc3RydWN0IGJmYV9wcG9ydF9ldGhfc3RhdHNfcyB7CisJdTY0CXNlY3NfcmVzZXQ7CS8qICBzZWNvbmRzIHNpbmNlIHN0YXRzIGlzIHJlc2V0ICovCisJdTY0CWZyYW1lXzY0OyAgICAgIC8qICBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0CWZyYW1lXzY1XzEyNzsgICAgICAvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0CWZyYW1lXzEyOF8yNTU7ICAgICAvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0CWZyYW1lXzI1Nl81MTE7ICAgICAvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0CWZyYW1lXzUxMl8xMDIzOyAgICAvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0CWZyYW1lXzEwMjRfMTUxODsgICAvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0CWZyYW1lXzE1MTlfMTUyMjsgICAvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisKKwl1NjQJdHhfYnl0ZXM7CisJdTY0CXR4X3BhY2tldHM7CisJdTY0CXR4X21jYXN0X3BhY2tldHM7CisJdTY0CXR4X2JjYXN0X3BhY2tldHM7CisJdTY0CXR4X2NvbnRyb2xfZnJhbWU7CisJdTY0CXR4X2Ryb3A7CisJdTY0CXR4X2phYmJlcjsKKwl1NjQJdHhfZmNzX2Vycm9yOworCXU2NAl0eF9mcmFnbWVudHM7CisKKwl1NjQJcnhfYnl0ZXM7CisJdTY0CXJ4X3BhY2tldHM7CisJdTY0CXJ4X21jYXN0X3BhY2tldHM7CisJdTY0CXJ4X2JjYXN0X3BhY2tldHM7CisJdTY0CXJ4X2NvbnRyb2xfZnJhbWVzOworCXU2NAlyeF91bmtub3duX29wY29kZTsKKwl1NjQJcnhfZHJvcDsKKwl1NjQJcnhfamFiYmVyOworCXU2NAlyeF9mY3NfZXJyb3I7CisJdTY0CXJ4X2FsaWdubWVudF9lcnJvcjsKKwl1NjQJcnhfZnJhbWVfbGVuZ3RoX2Vycm9yOworCXU2NAlyeF9jb2RlX2Vycm9yOworCXU2NAlyeF9mcmFnbWVudHM7CisKKwl1NjQJcnhfcGF1c2U7IC8qIEJQQyAqLworCXU2NAlyeF96ZXJvX3BhdXNlOyAvKiAgQlBDIFBhdXNlIGNhbmNlbGxhdGlvbiAqLworCXU2NAl0eF9wYXVzZTsgICAgICAvKiBCUEMgKi8KKwl1NjQJdHhfemVyb19wYXVzZTsgLyogIEJQQyBQYXVzZSBjYW5jZWxsYXRpb24gKi8KKwl1NjQJcnhfZmNvZV9wYXVzZTsgLyogQlBDICovCisJdTY0CXJ4X2Zjb2VfemVyb19wYXVzZTsgLyogIEJQQyBQYXVzZSBjYW5jZWxsYXRpb24gKi8KKwl1NjQJdHhfZmNvZV9wYXVzZTsgICAgICAvKiBCUEMgKi8KKwl1NjQJdHhfZmNvZV96ZXJvX3BhdXNlOyAvKiAgQlBDIFBhdXNlIGNhbmNlbGxhdGlvbiAqLworfTsKKworLyoqCisgKiAJCVBvcnQgc3RhdGlzdGljcy4KKyAqLwordW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgeworCXN0cnVjdCBiZmFfcHBvcnRfZmNfc3RhdHNfcwlmYzsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2V0aF9zdGF0c19zIAlldGg7Cit9OworCisvKioKKyAqICAgICAgICAgICAgICBQb3J0IEZDUCBtYXBwaW5ncy4KKyAqLworc3RydWN0IGJmYV9wcG9ydF9mY3BtYXBfcyB7CisJY2hhcgkJb3NkZXZuYW1lWzI1Nl07CisJdTMyCWJ1czsKKwl1MzIgICAgICAgIHRhcmdldDsKKwl1MzIgICAgICAgIG9zbHVuOworCXUzMiAgICAgICAgZmNpZDsKKwl3d25fdCAgICAgICAgICAgbnd3bjsKKwl3d25fdCAgICAgICAgICAgcHd3bjsKKwl1NjQgICAgICAgIGZjcGx1bjsKKwljaGFyCQlsdWlkWzI1Nl07Cit9OworCisvKioKKyAqICAgICAgICAgICAgICBQb3J0IFJOSUQgaW5mby4KKyAqLworc3RydWN0IGJmYV9wcG9ydF9ybmlkX3MgeworCXd3bl90ICAgICAgICAgICAgIHd3bjsKKwl1MzIgICAgICAgICAgdW5pdHR5cGU7CisJdTMyICAgICAgICAgIHBvcnRpZDsKKwl1MzIgICAgICAgICAgYXR0YWNoZWRfbm9kZXNfbnVtOworCXUxNiAgICAgICAgICBpcF92ZXJzaW9uOworCXUxNiAgICAgICAgICB1ZHBfcG9ydDsKKwl1OCAgICAgICAgICAgaXBhZGRyWzE2XTsKKwl1MTYgICAgICAgICAgcnN2ZDsKKwl1MTYgICAgICAgICAgdG9wb2xvZ3lkaXNjb3ZlcnlmbGFnczsKK307CisKKy8qKgorICogCQlMaW5rIHN0YXRlIGluZm9ybWF0aW9uCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfbGlua19zIHsKKwl1OCAgICAgICAgIGxpbmtzdGF0ZTsJLyogIExpbmsgc3RhdGUgYmZhX3Bwb3J0X2xpbmtzdGF0ZSAqLworCXU4ICAgICAgICAgbGlua3N0YXRlX3JzbjsJLyogIGJmYV9wcG9ydF9saW5rc3RhdGVfcnNuX3QgKi8KKwl1OCAgICAgICAgIHRvcG9sb2d5OwkvKiAgUDJQL0xPT1AgYmZhX3Bwb3J0X3RvcG9sb2d5ICovCisJdTggICAgICAgICBzcGVlZDsJCS8qICBMaW5rIHNwZWVkICgxLzIvNC84IEcpICovCisJdTMyICAgICAgICBsaW5rc3RhdGVfb3B0OwkvKiAgTGlua3N0YXRlIG9wdGlvbmFsIGRhdGEgKGRlYnVnKSAqLworCXU4ICAgICAgICAgdHJ1bmtlZDsJLyogIFRydW5rZWQgb3Igbm90ICgxIG9yIDApICovCisJdTggICAgICAgICByZXN2ZFszXTsKKwlzdHJ1Y3QgYmZhX3Fvc19hdHRyX3MgIHFvc19hdHRyOyAgIC8qIFFvUyBBdHRyaWJ1dGVzICovCisJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zIHFvc192Y19hdHRyOyAgLyogIFZDIGluZm8gZnJvbSBFTFAgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCAgICAgICAgIHRtYXN0ZXI7LyogIFRydW5rIE1hc3RlciBvcgorCQkJCQkJICogICAgbm90ICgxIG9yIDApICovCisJCQl1OCAgICAgICAgIHRsaW5rczsJLyogIFRydW5rIGxpbmtzIGJpdG1hcAorCQkJCQkJICogICAgKGxpbmt1cCkgKi8KKwkJCXU4ICAgICAgICAgcmVzdjE7CS8qICBSZXNlcnZlZCAqLworCQl9IHRydW5rX2luZm87CisKKwkJc3RydWN0IHsKKwkJCXU4ICAgICAgICAgbXlhbHBhOwkgICAvKiAgYWxwYSBjbGFpbWVkICovCisJCQl1OCAgICAgICAgIGxvZ2luX3JlcTsgLyogIExvZ2luIHJlcXVpcmVkIG9yCisJCQkJCQkgICAgKiAgICBub3QgKDEgb3IgMCkgKi8KKwkJCXU4ICAgICAgICAgYWxwYWJtX3ZhbDsvKiAgYWxwYSBiaXRtYXAgdmFsaWQKKwkJCQkJCSAgICAqICAgIG9yIG5vdCAoMSBvciAwKSAqLworCQkJc3RydWN0IGZjX2FscGFibV9zICAgICBhbHBhYm07CSAgIC8qICBhbHBhIGJpdG1hcCAqLworCQl9IGxvb3BfaW5mbzsKKwl9IHRsOworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19xb3MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Fvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZGJhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19xb3MuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19RT1NfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUU9TX0hfXworCisvKioKKyAqIFFvUyBzdGF0ZXMKKyAqLworZW51bSBiZmFfcW9zX3N0YXRlIHsKKwlCRkFfUU9TX09OTElORSA9IDEsCQkvKiAgUW9TIGlzIG9ubGluZSAqLworCUJGQV9RT1NfT0ZGTElORSA9IDIsCQkvKiAgUW9TIGlzIG9mZmxpbmUgKi8KK307CisKKworLyoqCisgKiBRb1MgIFByaW9yaXR5IGxldmVscy4KKyAqLworZW51bSBiZmFfcW9zX3ByaW9yaXR5IHsKKwlCRkFfUU9TX1VOS05PV04gPSAwLAorCUJGQV9RT1NfSElHSCAgPSAxLAkvKiAgUW9TIFByaW9yaXR5IExldmVsIEhpZ2ggKi8KKwlCRkFfUU9TX01FRCAgPSAgMiwJLyogIFFvUyBQcmlvcml0eSBMZXZlbCBNZWRpdW0gKi8KKwlCRkFfUU9TX0xPVyAgPSAgMywJLyogIFFvUyBQcmlvcml0eSBMZXZlbCBMb3cgKi8KK307CisKKworLyoqCisgKiBRb1MgIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGZvciBlYWNoIHByaW9yaXR5IGxldmVsCisgKi8KK2VudW0gYmZhX3Fvc19id19hbGxvYyB7CisJQkZBX1FPU19CV19ISUdIICA9IDYwLAkvKiAgYmFuZHdpZHRoIGFsbG9jYXRpb24gZm9yIEhpZ2ggKi8KKwlCRkFfUU9TX0JXX01FRCAgPSAgMzAsCS8qICBiYW5kd2lkdGggYWxsb2NhdGlvbiBmb3IgTWVkaXVtICovCisJQkZBX1FPU19CV19MT1cgID0gIDEwLAkvKiAgYmFuZHdpZHRoIGFsbG9jYXRpb24gZm9yIExvdyAqLworfTsKKworLyoqCisgKiBRb1MgYXR0cmlidXRlIHJldHVybmVkIGluIFFvUyBRdWVyeQorICovCitzdHJ1Y3QgYmZhX3Fvc19hdHRyX3MgeworCWVudW0gYmZhX3Fvc19zdGF0ZSBzdGF0ZTsJCS8qICBRb1MgY3VycmVudCBzdGF0ZSAqLworCXUzMiAgdG90YWxfYmJfY3I7ICAJIAkvKiAgVG90YWwgQkIgQ3JlZGl0cyAqLworfTsKKworLyoqCisgKiBUaGVzZSBmaWVsZHMgc2hvdWxkIGJlIGRpc3BsYXllZCBvbmx5IGZyb20gdGhlIENMSS4KKyAqIFRoZXJlIHdpbGwgYmUgYSBzZXBhcmF0ZSBCRkFMIEFQSSAoZ2V0X3Fvc192Y19hdHRyID8pCisgKiB0byByZXRyaWV2ZSB0aGlzLgorICoKKyAqLworI2RlZmluZSAgQkZBX1FPU19NQVhfVkMgIDE2CisKK3N0cnVjdCBiZmFfcW9zX3ZjX2luZm9fcyB7CisJdTggdmNfY3JlZGl0OworCXU4IGJvcnJvd19jcmVkaXQ7CisJdTggcHJpb3JpdHk7CisJdTggcmVzdmQ7Cit9OworCitzdHJ1Y3QgYmZhX3Fvc192Y19hdHRyX3MgeworCXUxNiAgdG90YWxfdmNfY291bnQ7ICAgICAgICAgICAgICAgICAgICAvKiAgVG90YWwgVkMgQ291bnQgKi8KKwl1MTYgIHNoYXJlZF9jcmVkaXQ7CisJdTMyICBlbHBfb3Btb2RlX2ZsYWdzOworCXN0cnVjdCBiZmFfcW9zX3ZjX2luZm9fcyB2Y19pbmZvW0JGQV9RT1NfTUFYX1ZDXTsgIC8qICAgYXMgbWFueSBhcworCQkJCQkJCSAgICAqIHRvdGFsX3ZjX2NvdW50ICovCit9OworCisvKioKKyAqIFFvUyBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfcW9zX3N0YXRzX3MgeworCXUzMglmbG9naV9zZW50OyAJCS8qICBRb1MgRmxvZ2kgc2VudCAqLworCXUzMglmbG9naV9hY2NfcmVjdmQ7CS8qICBRb1MgRmxvZ2kgQWNjIHJlY2VpdmVkICovCisJdTMyCWZsb2dpX3JqdF9yZWN2ZDsgLyogIFFvUyBGbG9naSByZWplY3RzIHJlY2VpdmVkICovCisJdTMyCWZsb2dpX3JldHJpZXM7CQkvKiAgUW9TIEZsb2dpIHJldHJpZXMgKi8KKworCXUzMgllbHBfcmVjdmQ7IAkgICAJLyogIFFvUyBFTFAgcmVjZWl2ZWQgKi8KKwl1MzIJZWxwX2FjY2VwdGVkOyAgICAgICAvKiAgUW9TIEVMUCBBY2NlcHRlZCAqLworCXUzMgllbHBfcmVqZWN0ZWQ7ICAgICAgIC8qICBRb1MgRUxQIHJlamVjdGVkICovCisJdTMyCWVscF9kcm9wcGVkOyAgICAgICAgLyogIFFvUyBFTFAgZHJvcHBlZCAgKi8KKworCXUzMglxb3NfcnNjbl9yZWN2ZDsgICAgIC8qICBRb1MgUlNDTiByZWNlaXZlZCAqLworCXUzMglyc3ZkOyAJCS8qIHBhZGRpbmcgZm9yIDY0IGJpdCBhbGlnbm1lbnQgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1FPU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ycG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYWY1OWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ycG9ydC5oCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19SUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19SUE9SVF9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Fvcy5oPgorCisvKioKKyAqIEZDUyByZW1vdGUgcG9ydCBzdGF0ZXMKKyAqLworZW51bSBiZmFfcnBvcnRfc3RhdGUgeworCUJGQV9SUE9SVF9VTklOSVQgCT0gMCwJLyogIFBPUlQgaXMgbm90IHlldCBpbml0aWFsaXplZCAqLworCUJGQV9SUE9SVF9PRkZMSU5FIAk9IDEsCS8qICBycG9ydCBpcyBvZmZsaW5lICovCisJQkZBX1JQT1JUX1BMT0dJIAk9IDIsCS8qICBQTE9HSSB0byBycG9ydCBpcyBpbiBwcm9ncmVzcyAqLworCUJGQV9SUE9SVF9PTkxJTkUgCT0gMywJLyogIGxvZ2luIHRvIHJwb3J0IGlzIGNvbXBsZXRlICovCisJQkZBX1JQT1JUX1BMT0dJX1JFVFJZIAk9IDQsCS8qICByZXRyeWluZyBsb2dpbiB0byBycG9ydCAqLworCUJGQV9SUE9SVF9OU1FVRVJZIAk9IDUsCS8qICBuYW1lc2VydmVyIHF1ZXJ5ICovCisJQkZBX1JQT1JUX0FESVNDIAk9IDYsCS8qICBBRElTQyBhdXRoZW50aWNhdGlvbiAqLworCUJGQV9SUE9SVF9MT0dPIAkJPSA3LAkvKiAgbG9nZ2luZyBvdXQgd2l0aCBycG9ydCAqLworCUJGQV9SUE9SVF9MT0dPUkNWIAk9IDgsCS8qICBoYW5kbGluZyBMT0dPIGZyb20gcnBvcnQgKi8KKwlCRkFfUlBPUlRfTlNESVNDIAk9IDksCS8qICByZS1kaXNjb3ZlciBycG9ydCAqLworfTsKKworLyoqCisgKiAgUnBvcnQgU2NzaSBGdW5jdGlvbiA6IEluaXRpYXRvci9UYXJnZXQuCisgKi8KK2VudW0gYmZhX3Jwb3J0X2Z1bmN0aW9uIHsKKwlCRkFfUlBPUlRfSU5JVElBVE9SIAk9IDB4MDEsCS8qICBTQ1NJIEluaXRpYXRvcgkqLworCUJGQV9SUE9SVF9UQVJHRVQgCT0gMHgwMiwJLyogIFNDU0kgVGFyZ2V0CSovCit9OworCisvKioKKyAqIHBvcnQvbm9kZSBzeW1ib2xpYyBuYW1lcyBmb3IgcnBvcnQKKyAqLworI2RlZmluZSBCRkFfUlBPUlRfU1lNTkFNRV9NQVhMRU4JMjU1CitzdHJ1Y3QgYmZhX3Jwb3J0X3N5bW5hbWVfcyB7CisJY2hhciAgICAgICAgICAgIHN5bW5hbWVbQkZBX1JQT1JUX1NZTU5BTUVfTUFYTEVOXTsKK307CisKK3N0cnVjdCBiZmFfcnBvcnRfaGFsX3N0YXRzX3MgeworCXUzMiAgICAgICAgc21fdW5fY3I7CSAgICAvKiAgdW5pbml0OiBjcmVhdGUgZXZlbnRzICAgICAgKi8KKwl1MzIgICAgICAgIHNtX3VuX3VuZXhwOwkgICAgLyogIHVuaW5pdDogZXhjZXB0aW9uIGV2ZW50cyAgICovCisJdTMyICAgICAgICBzbV9jcl9vbjsJICAgIC8qICBjcmVhdGVkOiBvbmxpbmUgZXZlbnRzICAgICAqLworCXUzMiAgICAgICAgc21fY3JfZGVsOwkgICAgLyogIGNyZWF0ZWQ6IGRlbGV0ZSBldmVudHMgICAgICovCisJdTMyICAgICAgICBzbV9jcl9od2Y7CSAgICAvKiAgY3JlYXRlZDogSU9DIGRvd24gICAgICAgICAgKi8KKwl1MzIgICAgICAgIHNtX2NyX3VuZXhwOwkgICAgLyogIGNyZWF0ZWQ6IGV4Y2VwdGlvbiBldmVudHMgICovCisJdTMyICAgICAgICBzbV9md2NfcnNwOwkgICAgLyogIGZ3IGNyZWF0ZTogZi93IHJlc3BvbnNlcyAgICovCisJdTMyICAgICAgICBzbV9md2NfZGVsOwkgICAgLyogIGZ3IGNyZWF0ZTogZGVsZXRlIGV2ZW50cyAgICovCisJdTMyICAgICAgICBzbV9md2Nfb2ZmOwkgICAgLyogIGZ3IGNyZWF0ZTogb2ZmbGluZSBldmVudHMgICovCisJdTMyICAgICAgICBzbV9md2NfaHdmOwkgICAgLyogIGZ3IGNyZWF0ZTogSU9DIGRvd24gICAgICAgICovCisJdTMyICAgICAgICBzbV9md2NfdW5leHA7CSAgICAvKiAgZncgY3JlYXRlOiBleGNlcHRpb24gZXZlbnRzKi8KKwl1MzIgICAgICAgIHNtX29uX29mZjsJICAgIC8qICBvbmxpbmU6IG9mZmxpbmUgZXZlbnRzICAgICAqLworCXUzMiAgICAgICAgc21fb25fZGVsOwkgICAgLyogIG9ubGluZTogZGVsZXRlIGV2ZW50cyAgICAgICovCisJdTMyICAgICAgICBzbV9vbl9od2Y7CSAgICAvKiAgb25saW5lOiBJT0MgZG93biBldmVudHMgICAgKi8KKwl1MzIgICAgICAgIHNtX29uX3VuZXhwOwkgICAgLyogIG9ubGluZTogZXhjZXB0aW9uIGV2ZW50cyAgICovCisJdTMyICAgICAgICBzbV9md2RfcnNwOwkgICAgLyogIGZ3IGRlbGV0ZTogZncgcmVzcG9uc2VzICAgICovCisJdTMyICAgICAgICBzbV9md2RfZGVsOwkgICAgLyogIGZ3IGRlbGV0ZTogZGVsZXRlIGV2ZW50cyAgICovCisJdTMyICAgICAgICBzbV9md2RfaHdmOwkgICAgLyogIGZ3IGRlbGV0ZTogSU9DIGRvd24gZXZlbnRzICovCisJdTMyICAgICAgICBzbV9md2RfdW5leHA7CSAgICAvKiAgZncgZGVsZXRlOiBleGNlcHRpb24gZXZlbnRzKi8KKwl1MzIgICAgICAgIHNtX29mZl9kZWw7CSAgICAvKiAgb2ZmbGluZTogZGVsZXRlIGV2ZW50cyAgICAgKi8KKwl1MzIgICAgICAgIHNtX29mZl9vbjsJICAgIC8qICBvZmZsaW5lOiBvbmxpbmUgZXZlbnRzICAgICAqLworCXUzMiAgICAgICAgc21fb2ZmX2h3ZjsJICAgIC8qICBvZmZsaW5lOiBJT0MgZG93biBldmVudHMgICAqLworCXUzMiAgICAgICAgc21fb2ZmX3VuZXhwOwkgICAgLyogIG9mZmxpbmU6IGV4Y2VwdGlvbiBldmVudHMgICovCisJdTMyICAgICAgICBzbV9kZWxfZndyc3A7CSAgICAvKiAgZGVsZXRlOiBmdyByZXNwb25zZXMgICAgICAgKi8KKwl1MzIgICAgICAgIHNtX2RlbF9od2Y7CSAgICAvKiAgZGVsZXRlOiBJT0MgZG93biBldmVudHMgICAgKi8KKwl1MzIgICAgICAgIHNtX2RlbF91bmV4cDsJICAgIC8qICBkZWxldGU6IGV4Y2VwdGlvbiBldmVudHMgICAqLworCXUzMiAgICAgICAgc21fZGVscF9md3JzcDsJICAgIC8qICBkZWxldGUgcGVuZDogZncgcmVzcG9uc2VzICAqLworCXUzMiAgICAgICAgc21fZGVscF9od2Y7CSAgICAvKiAgZGVsZXRlIHBlbmQ6IElPQyBkb3ducyAgICAgKi8KKwl1MzIgICAgICAgIHNtX2RlbHBfdW5leHA7CSAgICAvKiAgZGVsZXRlIHBlbmQ6IGV4Y2VwdGlvbnMgICAgKi8KKwl1MzIgICAgICAgIHNtX29mZnBfZndyc3A7CSAgICAvKiAgb2ZmLXBlbmRpbmc6IGZ3IHJlc3BvbnNlcyAgKi8KKwl1MzIgICAgICAgIHNtX29mZnBfZGVsOwkgICAgLyogIG9mZi1wZW5kaW5nOiBkZWxldGVzICAgICAgICovCisJdTMyICAgICAgICBzbV9vZmZwX2h3ZjsJICAgIC8qICBvZmYtcGVuZGluZzogSU9DIGRvd25zICAgICAqLworCXUzMiAgICAgICAgc21fb2ZmcF91bmV4cDsJICAgIC8qICBvZmYtcGVuZGluZzogZXhjZXB0aW9ucyAgICAqLworCXUzMiAgICAgICAgc21faW9jZF9vZmY7CSAgICAvKiAgSU9DIGRvd246IG9mZmxpbmUgZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2lvY2RfZGVsOwkgICAgLyogIElPQyBkb3duOiBkZWxldGUgZXZlbnRzICAgICovCisJdTMyICAgICAgICBzbV9pb2NkX29uOwkgICAgLyogIElPQyBkb3duOiBvbmxpbmUgZXZlbnRzICAgICovCisJdTMyICAgICAgICBzbV9pb2NkX3VuZXhwOwkgICAgLyogIElPQyBkb3duOiBleGNlcHRpb25zICAgICAgICovCisJdTMyICAgICAgICByc3ZkOworfTsKKworLyoqCisgKiBGQ1MgcmVtb3RlIHBvcnQgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX3Jwb3J0X3N0YXRzX3MgeworCXUzMiAgICAgICAgb2ZmbGluZXM7ICAgICAgICAgICAvKiAgcmVtb3RlIHBvcnQgb2ZmbGluZSBjb3VudCAgKi8KKwl1MzIgICAgICAgIG9ubGluZXM7ICAgICAgICAgICAgLyogIHJlbW90ZSBwb3J0IG9ubGluZSBjb3VudCAgICovCisJdTMyICAgICAgICByc2NuczsgICAgICAgICAgICAgIC8qICBSU0NOIGFmZmVjdGluZyBycG9ydCAgICAgICAqLworCXUzMiAgICAgICAgcGxvZ2lzOwkJICAgIC8qICBwbG9naXMgc2VudCAgICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgcGxvZ2lfYWNjczsJICAgIC8qICBwbG9naSBhY2NlcHRzICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgcGxvZ2lfdGltZW91dHM7CSAgICAvKiAgcGxvZ2kgdGltZW91dHMgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBsb2dpX3JlamVjdHM7CSAgICAvKiAgcmN2ZCBwbG9naSByZWplY3RzICAgICAgICAgKi8KKwl1MzIgICAgICAgIHBsb2dpX2ZhaWxlZDsJICAgIC8qICBsb2NhbCBmYWlsdXJlICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgcGxvZ2lfcmN2ZDsJICAgIC8qICBwbG9naXMgcmN2ZCAgICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgcHJsaV9yY3ZkOyAgICAgICAgICAvKiAgaW5ib3VuZCBQUkxJcyAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIGFkaXNjX3JjdmQ7ICAgICAgICAgLyogIEFESVNDcyByZWNlaXZlZCAgICAgICAgICAgICovCisJdTMyICAgICAgICBhZGlzY19yZWplY3RzOyAgICAgIC8qICByZWN2ZCAgQURJU0MgcmVqZWN0cyAgICAgICAqLworCXUzMiAgICAgICAgYWRpc2Nfc2VudDsgICAgICAgICAvKiAgQURJU0MgcmVxdWVzdHMgc2VudCAgICAgICAgKi8KKwl1MzIgICAgICAgIGFkaXNjX2FjY3M7ICAgICAgICAgLyogIEFESVNDIGFjY2VwdGVkIGJ5IHJwb3J0ICAgICovCisJdTMyICAgICAgICBhZGlzY19mYWlsZWQ7ICAgICAgIC8qICBBRElTQyBmYWlsZWQgKG5vIHJlc3BvbnNlKSAqLworCXUzMiAgICAgICAgYWRpc2NfcmVqZWN0ZWQ7ICAgICAvKiAgQURJU0MgcmVqZWN0ZWQgYnkgdXMgICAgKi8KKwl1MzIgICAgICAgIGxvZ29zOyAgICAgICAgICAgICAgLyogIGxvZ29zIHNlbnQgICAgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBsb2dvX2FjY3M7ICAgICAgICAgIC8qICBMT0dPIGFjY2VwdHMgZnJvbSBycG9ydCAgICAqLworCXUzMiAgICAgICAgbG9nb19mYWlsZWQ7ICAgICAgICAvKiAgTE9HTyBmYWlsdXJlcyAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIGxvZ29fcmVqZWN0ZWQ7ICAgICAgLyogIExPR08gcmVqZWN0cyBmcm9tIHJwb3J0ICAgICovCisJdTMyICAgICAgICBsb2dvX3JjdmQ7ICAgICAgICAgIC8qICBMT0dPIGZyb20gcmVtb3RlIHBvcnQgICAgICAqLworCisJdTMyICAgICAgICBycHNjX3JjdmQ7ICAgICAgICAgLyogIFJQU0MgcmVjZWl2ZWQgICAgICAgICAgICAqLworCXUzMiAgICAgICAgcnBzY19yZWplY3RzOyAgICAgIC8qICByZWN2ZCAgUlBTQyByZWplY3RzICAgICAgICovCisJdTMyICAgICAgICBycHNjX3NlbnQ7ICAgICAgICAgLyogIFJQU0MgcmVxdWVzdHMgc2VudCAgICAgICAgKi8KKwl1MzIgICAgICAgIHJwc2NfYWNjczsgICAgICAgICAvKiAgUlBTQyBhY2NlcHRlZCBieSBycG9ydCAgICAqLworCXUzMiAgICAgICAgcnBzY19mYWlsZWQ7ICAgICAgIC8qICBSUFNDIGZhaWxlZCAobm8gcmVzcG9uc2UpICovCisJdTMyICAgICAgICBycHNjX3JlamVjdGVkOyAgICAgLyogIFJQU0MgcmVqZWN0ZWQgYnkgdXMgICAgKi8KKworCXUzMiAgICAgICAgcnN2ZDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X2hhbF9zdGF0c19zCWhhbF9zdGF0czsgIC8qICBCRkEgcnBvcnQgc3RhdHMgICAgKi8KK307CisKKy8qKgorICogIFJwb3J0J3MgUW9TIGF0dHJpYnV0ZXMKKyAqLworc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIHsKKwllbnVtIGJmYV9xb3NfcHJpb3JpdHkgcW9zX3ByaW9yaXR5OyAgLyogIHJwb3J0J3MgUW9TIHByaW9yaXR5ICAgKi8KKwl1MzIJICAgICAgIHFvc19mbG93X2lkOwkgIC8qICBRb1MgZmxvdyBJZAkgKi8KK307CisKKy8qKgorICogRkNTIHJlbW90ZSBwb3J0IGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX3Jwb3J0X2F0dHJfcyB7CisJd3duX3QgICAgICAgICAgIAlud3duOwkvKiAgbm9kZSB3d24gKi8KKwl3d25fdCAgICAgICAgICAgCXB3d247CS8qICBwb3J0IHd3biAqLworCWVudW0gZmNfY29zIGNvc19zdXBwb3J0ZWQ7CS8qICBzdXBwb3J0ZWQgY2xhc3Mgb2Ygc2VydmljZXMgKi8KKwl1MzIgICAgICAgIAlwaWQ7CS8qICBwb3J0IElEICovCisJdTMyICAgICAgICAJZGZfc3o7CS8qICBNYXggcGF5bG9hZCBzaXplICovCisJZW51bSBiZmFfcnBvcnRfc3RhdGUgCXN0YXRlOwkvKiAgUnBvcnQgU3RhdGUgbWFjaGluZSBzdGF0ZSAqLworCWVudW0gZmNfY29zICAgICAgICAJZmNfY29zOwkvKiAgRkMgY2xhc3NlcyBvZiBzZXJ2aWNlcyAqLworCWJmYV9ib29sZWFuX3QgICAJY2lzYzsJLyogIENJU0MgY2FwYWJsZSBkZXZpY2UgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3N5bW5hbWVfcyBzeW1uYW1lOyAvKiAgU3ltYm9saWMgTmFtZSAqLworCWVudW0gYmZhX3Jwb3J0X2Z1bmN0aW9uCXNjc2lfZnVuY3Rpb247IC8qICBJbml0aWF0b3IvVGFyZ2V0ICovCisJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIHFvc19hdHRyOyAvKiAgcW9zIGF0dHJpYnV0ZXMgICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgY3Vycl9zcGVlZDsgICAvKiAgb3BlcmF0aW5nIHNwZWVkIGdvdCBmcm9tCisJCQkJCSAgICAqIFJQU0MgRUxTLiBVTktOT1dOLCBpZiBSUFNDCisJCQkJCSAgICAqIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwliZmFfYm9vbGVhbl90IAl0cmxfZW5mb3JjZWQ7CS8qICBUUkwgZW5mb3JjZWQgPyBUUlVFL0ZBTFNFICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQJYXNzaWduZWRfc3BlZWQ7CS8qIFNwZWVkIGFzc2lnbmVkIGJ5IHRoZSB1c2VyLgorCQkJCQkJICogd2lsbCBiZSB1c2VkIGlmIFJQU0MgaXMgbm90CisJCQkJCQkgKiBzdXBwb3J0ZWQgYnkgdGhlIHJwb3J0ICovCit9OworCisjZGVmaW5lIGJmYV9ycG9ydF9hZW5fcW9zX2RhdGFfdCBzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MKKworLyoqCisgKiBCRkEgcmVtb3RlIHBvcnQgZXZlbnRzCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9SUE9SVF9BRU5fT05MSU5FOiAgICBbaW5dOiBscHd3bglbb3V0XTogdmZfaWQsIGxwd3duLCBycHd3bgorICogQkZBX1JQT1JUX0FFTl9PRkZMSU5FOiAgIFtpbl06IGxwd3duIFtvdXRdOiB2Zl9pZCwgbHB3d24sIHJwd3duCisgKiBCRkFfUlBPUlRfQUVOX0RJU0NPTk5FQ1Q6W2luXTogbHB3d24gW291dF06IHZmX2lkLCBscHd3biwgcnB3d24KKyAqIEJGQV9SUE9SVF9BRU5fUU9TX1BSSU86ICBbaW5dOiBscHd3biBbb3V0XTogdmZfaWQsIGxwd3duLCBycHd3biwgcHJpbworICogQkZBX1JQT1JUX0FFTl9RT1NfRkxPV0lEOltpbl06IGxwd3duIFtvdXRdOiB2Zl9pZCwgbHB3d24sIHJwd3duLCBmbG93X2lkCisgKi8KK2VudW0gYmZhX3Jwb3J0X2Flbl9ldmVudCB7CisJQkZBX1JQT1JUX0FFTl9PTkxJTkUgICAgICA9IDEsCS8qICBSUG9ydCBvbmxpbmUgZXZlbnQgKi8KKwlCRkFfUlBPUlRfQUVOX09GRkxJTkUgICAgID0gMiwJLyogIFJQb3J0IG9mZmxpbmUgZXZlbnQgKi8KKwlCRkFfUlBPUlRfQUVOX0RJU0NPTk5FQ1QgID0gMywJLyogIFJQb3J0IGRpc2Nvbm5lY3QgZXZlbnQgKi8KKwlCRkFfUlBPUlRfQUVOX1FPU19QUklPICAgID0gNCwJLyogIFFPUyBwcmlvcml0eSBjaGFuZ2UgZXZlbnQgKi8KKwlCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQgID0gNSwJLyogIFFPUyBmbG93IElkIGNoYW5nZSBldmVudCAqLworfTsKKworc3RydWN0IGJmYV9ycG9ydF9hZW5fZGF0YV9zIHsKKwl1MTYgICAgICAgIHZmX2lkOwkvKiAgdmZfaWQgb2YgdGhpcyBsb2dpY2FsIHBvcnQgKi8KKwl1MTYgICAgICAgIHJzdmRbM107CisJd3duX3QgICAgICAgICAgIHBwd3duOwkvKiAgV1dOIG9mIGl0cyBwaHlzaWNhbCBwb3J0ICovCisJd3duX3QgICAgICAgICAgIGxwd3duOwkvKiAgV1dOIG9mIHRoaXMgbG9naWNhbCBwb3J0ICovCisJd3duX3QgICAgICAgICAgIHJwd3duOwkvKiAgV1dOIG9mIHRoaXMgcmVtb3RlIHBvcnQgKi8KKwl1bmlvbiB7CisJCWJmYV9ycG9ydF9hZW5fcW9zX2RhdGFfdCBxb3M7CisJfSBwcml2OworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUlBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19zdGF0dXMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3N0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkY2VhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19zdGF0dXMuaApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX1NUQVRVU19IX18KKyNkZWZpbmUgX19CRkFfREVGU19TVEFUVVNfSF9fCisKKy8qKgorICogQVBJIHN0YXR1cyByZXR1cm4gdmFsdWVzCisgKgorICogTk9URTogVGhlIGVycm9yIG1zZ3MgYXJlIGF1dG8gZ2VuZXJhdGVkIGZyb20gdGhlIGNvbW1lbnRzLiBPbmx5IHNpbmdlIGxpbmUKKyAqIGNvbW1lbnRzIGFyZSBzdXBwb3J0ZWQKKyAqLworZW51bSBiZmFfc3RhdHVzIHsKKwlCRkFfU1RBVFVTX09LIAkJPSAwLAkvKiAgU3VjY2VzcyAqLworCUJGQV9TVEFUVVNfRkFJTEVEIAk9IDEsCS8qICBPcGVyYXRpb24gZmFpbGVkICovCisJQkZBX1NUQVRVU19FSU5WQUwgCT0gMiwJLyogIEludmFsaWQgcGFyYW1zIENoZWNrIGlucHV0CisJCQkJCSAqIHBhcmFtZXRlcnMgKi8KKwlCRkFfU1RBVFVTX0VOT01FTSAJPSAzLAkvKiAgT3V0IG9mIHJlc291cmNlcyAqLworCUJGQV9TVEFUVVNfRU5PU1lTIAk9IDQsCS8qICBGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQgKi8KKwlCRkFfU1RBVFVTX0VUSU1FUiAJPSA1LAkvKiAgVGltZXIgZXhwaXJlZCAtIFJldHJ5LCBpZgorCQkJCQkgKiBwZXJzaXN0cywgY29udGFjdCBzdXBwb3J0ICovCisJQkZBX1NUQVRVU19FUFJPVE9DT0wgCT0gNiwJLyogIFByb3RvY29sIGVycm9yICovCisJQkZBX1NUQVRVU19FTk9GQ1BPUlRTIAk9IDcsCS8qICBObyBGQyBwb3J0cyByZXNvdXJjZXMgKi8KKwlCRkFfU1RBVFVTX05PRkxBU0ggCT0gOCwJLyogIEZsYXNoIG5vdCBwcmVzZW50ICovCisJQkZBX1NUQVRVU19CQURGTEFTSCAJPSA5LAkvKiAgRmxhc2ggaXMgY29ycnVwdGVkIG9yIGJhZCAqLworCUJGQV9TVEFUVVNfU0ZQX1VOU1VQUCAJPSAxMCwJLyogIFVuc3VwcG9ydGVkIFNGUCAtIFJlcGxhY2UgU0ZQICovCisJQkZBX1NUQVRVU19VTktOT1dOX1ZGSUQgPSAxMSwJLyogIFZGX0lEIG5vdCBmb3VuZCAqLworCUJGQV9TVEFUVVNfREFUQUNPUlJVUFRFRCA9IDEyLAkvKiAgRGlhZyByZXR1cm5lZCBkYXRhIGNvcnJ1cHRlZAorCQkJCQkgKiBjb250YWN0IHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0RFVkJVU1kgCT0gMTMsCS8qICBEZXZpY2UgYnVzeSAtIFJldHJ5IG9wZXJhdGlvbiAqLworCUJGQV9TVEFUVVNfQUJPUlRFRCAJPSAxNCwJLyogIE9wZXJhdGlvbiBhYm9ydGVkICovCisJQkZBX1NUQVRVU19OT0RFViAJPSAxNSwJLyogIERldiBpcyBub3QgcHJlc2VudCAqLworCUJGQV9TVEFUVVNfSERNQV9GQUlMRUQgCT0gMTYsCS8qICBIb3N0IGRtYSBmYWlsZWQgY29udGFjdCBzdXBwb3J0ICovCisJQkZBX1NUQVRVU19GTEFTSF9CQURfTEVOID0gMTcsCS8qICBGbGFzaCBiYWQgbGVuZ3RoICovCisJQkZBX1NUQVRVU19VTktOT1dOX0xXV04gPSAxOCwJLyogIExQT1JUIFBXV04gbm90IGZvdW5kICovCisJQkZBX1NUQVRVU19VTktOT1dOX1JXV04gPSAxOSwJLyogIFJQT1JUIFBXV04gbm90IGZvdW5kICovCisJQkZBX1NUQVRVU19GQ1BUX0xTX1JKVCAJPSAyMCwJLyogIEdvdCBMU19SSlQgZm9yIEZDIFBhc3MKKwkJCQkJICogdGhyb3VnaCBSZXEgKi8KKwlCRkFfU1RBVFVTX1ZQT1JUX0VYSVNUUyA9IDIxLAkvKiAgVlBPUlQgYWxyZWFkeSBleGlzdHMgKi8KKwlCRkFfU1RBVFVTX1ZQT1JUX01BWCAJPSAyMiwJLyogIFJlYWNoZWQgbWF4IFZQT1JUIHN1cHBvcnRlZAorCQkJCQkgKiBsaW1pdCAqLworCUJGQV9TVEFUVVNfVU5TVVBQX1NQRUVEID0gMjMsCS8qICBJbnZhbGlkIFNwZWVkIENoZWNrIHNwZWVkCisJCQkJCSAqIHNldHRpbmcgKi8KKwlCRkFfU1RBVFVTX0lOVkxEX0RGU1ogCT0gMjQsCS8qICBJbnZhbGlkIE1heCBkYXRhIGZpZWxkIHNpemUgKi8KKwlCRkFfU1RBVFVTX0NORkdfRkFJTEVEIAk9IDI1LAkvKiAgU2V0dGluZyBjYW4gbm90IGJlIHBlcnNpc3RlZCAqLworCUJGQV9TVEFUVVNfQ01EX05PVFNVUFAgCT0gMjYsCS8qICBDb21tYW5kL0FQSSBub3Qgc3VwcG9ydGVkICovCisJQkZBX1NUQVRVU19OT19BREFQVEVSIAk9IDI3LAkvKiAgTm8gQnJvY2FkZSBBZGFwdGVyIEZvdW5kICovCisJQkZBX1NUQVRVU19MSU5LRE9XTiAJPSAyOCwJLyogIExpbmsgaXMgZG93biAtIENoZWNrIG9yIHJlcGxhY2UKKwkJCQkJICogU0ZQL2NhYmxlICovCisJQkZBX1NUQVRVU19GQUJSSUNfUkpUIAk9IDI5LAkvKiAgUmVqZWN0IGZyb20gYXR0YWNoZWQgZmFicmljICovCisJQkZBX1NUQVRVU19VTktOT1dOX1ZXV04gPSAzMCwJLyogIFZQT1JUIFBXV04gbm90IGZvdW5kICovCisJQkZBX1NUQVRVU19OU0xPR0lOX0ZBSUxFRCA9IDMxLAkvKiAgTmFtZXNlcnZlciBsb2dpbiBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX05PX1JQT1JUUyAJPSAzMiwJLyogIE5vIHJlbW90ZSBwb3J0cyBmb3VuZCAqLworCUJGQV9TVEFUVVNfTlNRVUVSWV9GQUlMRUQgPSAzMywJLyogIE5hbWVzZXJ2ZXIgcXVlcnkgZmFpbGVkICovCisJQkZBX1NUQVRVU19QT1JUX09GRkxJTkUgPSAzNCwJLyogIFBvcnQgaXMgbm90IG9ubGluZSAqLworCUJGQV9TVEFUVVNfUlBPUlRfT0ZGTElORSA9IDM1LAkvKiAgUlBPUlQgaXMgbm90IG9ubGluZSAqLworCUJGQV9TVEFUVVNfVEdUT1BFTl9GQUlMRUQgPSAzNiwJLyogIFJlbW90ZSBTQ1NJIHRhcmdldCBvcGVuIGZhaWxlZCAqLworCUJGQV9TVEFUVVNfQkFEX0xVTlMgCT0gMzcsCS8qICBObyB2YWxpZCBMVU5zIGZvdW5kICovCisJQkZBX1NUQVRVU19JT19GQUlMVVJFIAk9IDM4LAkvKiAgU0NTSSB0YXJnZXQgSU8gZmFpbHVyZSAqLworCUJGQV9TVEFUVVNfTk9fRkFCUklDIAk9IDM5LAkvKiAgTm8gc3dpdGNoZWQgZmFicmljIHByZXNlbnQgKi8KKwlCRkFfU1RBVFVTX0VCQURGIAk9IDQwLAkvKiAgQmFkIGZpbGUgZGVzY3JpcHRvciAqLworCUJGQV9TVEFUVVNfRUlOVFIgCT0gNDEsCS8qICBBIHNpZ25hbCB3YXMgY2F1Z2h0IGR1cmluZyBpb2N0bCAqLworCUJGQV9TVEFUVVNfRUlPIAkJPSA0MiwJLyogIEkvTyBlcnJvciAqLworCUJGQV9TVEFUVVNfRU5PVFRZIAk9IDQzLAkvKiAgSW5hcHByb3ByaWF0ZSBJL08gY29udHJvbAorCQkJCQkgKiBvcGVyYXRpb24gKi8KKwlCRkFfU1RBVFVTX0VOWElPIAk9IDQ0LAkvKiAgTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyAqLworCUJGQV9TVEFUVVNfRUZPUEVOIAk9IDQ1LAkvKiAgRmFpbGVkIHRvIG9wZW4gZmlsZSAqLworCUJGQV9TVEFUVVNfVlBPUlRfV1dOX0JQID0gNDYsCS8qICBXV04gaXMgc2FtZSBhcyBiYXNlIHBvcnQncyBXV04gKi8KKwlCRkFfU1RBVFVTX1BPUlRfTk9UX0RJU0FCTEVEID0gNDcsIC8qICBQb3J0IG5vdCBkaXNhYmxlZCBkaXNhYmxlIHBvcnQKKwkJCQkJICAgICogZmlyc3QgKi8KKwlCRkFfU1RBVFVTX0JBREZSTUhEUiAJPSA0OCwJLyogIEJhZCBmcmFtZSBoZWFkZXIgKi8KKwlCRkFfU1RBVFVTX0JBREZSTVNaIAk9IDQ5LAkvKiAgQmFkIGZyYW1lIHNpemUgY2hlY2sgYW5kIHJlcGxhY2UKKwkJCQkJICogU0ZQL2NhYmxlICovCisJQkZBX1NUQVRVU19NSVNTSU5HRlJNIAk9IDUwLAkvKiAgTWlzc2luZyBmcmFtZSBjaGVjayBhbmQgcmVwbGFjZQorCQkJCQkgKiBTRlAvY2FibGUgKi8KKwlCRkFfU1RBVFVTX0xJTktUSU1FT1VUIAk9IDUxLAkvKiAgTGluayB0aW1lb3V0IGNoZWNrIGFuZCByZXBsYWNlCisJCQkJCSAqIFNGUC9jYWJsZSAqLworCUJGQV9TVEFUVVNfTk9fRkNQSU1fTkVYVVMgPSA1MiwJLyogIE5vIEZDUCBOZXh1cyBleGlzdHMgd2l0aCB0aGUKKwkJCQkJICogcnBvcnQgKi8KKwlCRkFfU1RBVFVTX0NIRUNLU1VNX0ZBSUwgPSA1MywJLyogIGNoZWNrc3VtIGZhaWx1cmUgKi8KKwlCRkFfU1RBVFVTX0daTUVfRkFJTEVEIAk9IDU0LAkvKiAgR2V0IHpvbmUgbWVtYmVyIHF1ZXJ5IGZhaWxlZCAqLworCUJGQV9TVEFUVVNfU0NTSVNUQVJUX1JFUUQgPSA1NSwJLyogIFNDU0kgZGlzayByZXF1aXJlIFNUQVJUIGNvbW1hbmQgKi8KKwlCRkFfU1RBVFVTX0lPQ19GQUlMVVJFIAk9IDU2LAkvKiAgSU9DIGZhaWx1cmUgLSBSZXRyeSwgaWYgcGVyc2lzdHMKKwkJCQkJICogY29udGFjdCBzdXBwb3J0ICovCisJQkZBX1NUQVRVU19JTlZBTElEX1dXTiAJPSA1NywJLyogIEludmFsaWQgV1dOICovCisJQkZBX1NUQVRVU19NSVNNQVRDSCAJPSA1OCwJLyogIFZlcnNpb24gbWlzbWF0Y2ggKi8KKwlCRkFfU1RBVFVTX0lPQ19FTkFCTEVEIAk9IDU5LAkvKiAgSU9DIGlzIGFscmVhZHkgZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfQURBUFRFUl9FTkFCTEVEID0gNjAsIC8qICBBZGFwdGVyIGlzIG5vdCBkaXNhYmxlZCBkaXNhYmxlCisJCQkJCSAgKiBhZGFwdGVyIGZpcnN0ICovCisJQkZBX1NUQVRVU19JT0NfTk9OX09QIAk9IDYxLAkvKiAgSU9DIGlzIG5vdCBvcGVyYXRpb25hbC4gRW5hYmxlIElPQworCQkJCQkgKiBhbmQgaWYgaXQgc3RpbGwgZmFpbHMsCisJCQkJCSAqIGNvbnRhY3Qgc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfQUREUl9NQVBfRkFJTFVSRSA9IDYyLCAvKiAgUENJIGJhc2UgYWRkcmVzcyBub3QgbWFwcGVkCisJCQkJCSAgICogaW4gT1MgKi8KKwlCRkFfU1RBVFVTX1NBTUVfTkFNRSAJPSA2MywJLyogIE5hbWUgZXhpc3RzISB1c2UgYSBkaWZmZXJlbnQKKwkJCQkJICogbmFtZSAqLworCUJGQV9TVEFUVVNfUEVORElORyAgICAgID0gNjQsICAgLyogIEFQSSBjb21wbGV0ZXMgYXN5bmNocm9ub3VzbHkgKi8KKwlCRkFfU1RBVFVTXzhHX1NQRAk9IDY1LAkvKiAgU3BlZWQgc2V0dGluZyBub3QgdmFsaWQgZm9yCisJCQkJCSAqIDhHIEhCQSAqLworCUJGQV9TVEFUVVNfNEdfU1BECT0gNjYsCS8qICBTcGVlZCBzZXR0aW5nIG5vdCB2YWxpZCBmb3IKKwkJCQkJICogNEcgSEJBICovCisJQkZBX1NUQVRVU19BRF9JU19FTkFCTEUgPSA2NywJLyogIEFkYXB0ZXIgaXMgYWxyZWFkeSBlbmFibGVkICovCisJQkZBX1NUQVRVU19FSU5WQUxfVE9WIAk9IDY4LAkvKiAgSW52YWxpZCBwYXRoIGZhaWxvdmVyIFRPViAqLworCUJGQV9TVEFUVVNfRUlOVkFMX1FERVBUSCA9IDY5LAkvKiAgSW52YWxpZCBxdWV1ZSBkZXB0aCB2YWx1ZSAqLworCUJGQV9TVEFUVVNfVkVSU0lPTl9GQUlMID0gNzAsCS8qICBBcHBsaWNhdGlvbi9Ecml2ZXIgdmVyc2lvbgorCQkJCQkgKiBtaXNtYXRjaCAqLworCUJGQV9TVEFUVVNfRElBR19CVVNZICAgID0gNzEsCS8qICBkaWFnIGJ1c3kgKi8KKwlCRkFfU1RBVFVTX0JFQUNPTl9PTgk9IDcyLAkvKiAgUG9ydCBCZWFjb24gYWxyZWFkeSBvbiAqLworCUJGQV9TVEFUVVNfQkVBQ09OX09GRgk9IDczLAkvKiAgUG9ydCBCZWFjb24gYWxyZWFkeSBvZmYgKi8KKwlCRkFfU1RBVFVTX0xCRUFDT05fT04gICA9IDc0LAkvKiAgTGluayBFbmQtdG8tRW5kIEJlYWNvbiBhbHJlYWR5CisJCQkJCSAqIG9uICovCisJQkZBX1NUQVRVU19MQkVBQ09OX09GRgk9IDc1LAkvKiAgTGluayBFbmQtdG8tRW5kIEJlYWNvbiBhbHJlYWR5CisJCQkJCSAqIG9mZiAqLworCUJGQV9TVEFUVVNfUE9SVF9OT1RfSU5JVEVEID0gNzYsIC8qICBQb3J0IG5vdCBpbml0aWFsaXplZCAqLworCUJGQV9TVEFUVVNfUlBTQ19FTkFCTEVEID0gNzcsIC8qICBUYXJnZXQgaGFzIGEgdmFsaWQgc3BlZWQgKi8KKwlCRkFfU1RBVFVTX0VOT0ZTQVZFID0gNzgsCS8qICBObyBzYXZlZCBmaXJtd2FyZSB0cmFjZSAqLworCUJGQV9TVEFUVVNfQkFEX0ZJTEUgPSA3OSwJLyogIE5vdCBhIHZhbGlkIEJyb2NhZGUgQm9vdCBDb2RlCisJCQkJCSAqIGZpbGUgKi8KKwlCRkFfU1RBVFVTX1JMSU1fRU4gPSA4MCwJLyogIFRhcmdldCByYXRlIGxpbWl0aW5nIGlzIGFscmVhZHkKKwkJCQkJICogZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfUkxJTV9ESVMgPSA4MSwgIC8qICBUYXJnZXQgcmF0ZSBsaW1pdGluZyBpcyBhbHJlYWR5CisJCQkJICAgICogZGlzYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0lPQ19ESVNBQkxFRCA9IDgyLCAgIC8qICBJT0MgaXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfQURBUFRFUl9ESVNBQkxFRCA9IDgzLCAgIC8qICBBZGFwdGVyIGlzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0JJT1NfRElTQUJMRUQgPSA4NCwgICAvKiAgQmlvcyBpcyBhbHJlYWR5IGRpc2FibGVkICovCisJQkZBX1NUQVRVU19BVVRIX0VOQUJMRUQgPSA4NSwgICAvKiAgQXV0aGVudGljYXRpb24gaXMgYWxyZWFkeQorCQkJCQkgKiBlbmFibGVkICovCisJQkZBX1NUQVRVU19BVVRIX0RJU0FCTEVEID0gODYsICAgLyogIEF1dGhlbnRpY2F0aW9uIGlzIGFscmVhZHkKKwkJCQkJICogZGlzYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0VSUk9SX1RSTF9FTkFCTEVEID0gODcsICAgLyogIFRhcmdldCByYXRlIGxpbWl0aW5nIGlzCisJCQkJCSAgICAgICogZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfRVJST1JfUU9TX0VOQUJMRUQgPSA4OCwgICAvKiAgUW9TIGlzIGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX05PX1NGUF9ERVYgPSA4OSwgLyogIE5vIFNGUCBkZXZpY2UgY2hlY2sgb3IgcmVwbGFjZSBTRlAgKi8KKwlCRkFfU1RBVFVTX01FTVRFU1RfRkFJTEVEID0gOTAsCS8qICBNZW1vcnkgdGVzdCBmYWlsZWQgY29udGFjdAorCQkJCQkgKiBzdXBwb3J0ICovCisJQkZBX1NUQVRVU19JTlZBTElEX0RFVklEID0gOTEsCS8qICBJbnZhbGlkIGRldmljZSBpZCBwcm92aWRlZCAqLworCUJGQV9TVEFUVVNfUU9TX0VOQUJMRUQgPSA5MiwgLyogIFFPUyBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX1FPU19ESVNBQkxFRCA9IDkzLCAvKiAgUU9TIGlzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0lOQ09SUkVDVF9EUlZfQ09ORklHID0gOTQsIC8qICBDaGVjayBjb25maWd1cmF0aW9uCisJCQkJCSAgICAgICAqIGtleS92YWx1ZSBwYWlyICovCisJQkZBX1NUQVRVU19SRUdfRkFJTCA9IDk1LCAvKiAgQ2FuJ3QgcmVhZCB3aW5kb3dzIHJlZ2lzdHJ5ICovCisJQkZBX1NUQVRVU19JTV9JTlZfQ09ERSA9IDk2LCAvKiAgSW52YWxpZCBJT0NUTCBjb2RlICovCisJQkZBX1NUQVRVU19JTV9JTlZfVkxBTiA9IDk3LCAvKiAgSW52YWxpZCBWTEFOIElEICovCisJQkZBX1NUQVRVU19JTV9JTlZfQURBUFRfTkFNRSA9IDk4LCAvKiAgSW52YWxpZCBhZGFwdGVyIG5hbWUgKi8KKwlCRkFfU1RBVFVTX0lNX0xPV19SRVNPVVJDRVMgPSA5OSwgLyogIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgaW4KKwkJCQkJICAgKiBkcml2ZXIgKi8KKwlCRkFfU1RBVFVTX0lNX1ZMQU5JRF9JU19QVklEID0gMTAwLCAvKiAgR2l2ZW4gVkxBTiBpZCBzYW1lIGFzIFBWSUQgKi8KKwlCRkFfU1RBVFVTX0lNX1ZMQU5JRF9FWElTVFMgPSAxMDEsIC8qICBHaXZlbiBWTEFOIGlkIGFscmVhZHkgZXhpc3RzICovCisJQkZBX1NUQVRVU19JTV9GV19VUERBVEVfRkFJTCA9IDEwMiwgLyogIFVwZGF0aW5nIGZpcm13YXJlIHdpdGggbmV3CisJCQkJCSAgICAgKiBWTEFOIElEIGZhaWxlZCAqLworCUJGQV9TVEFUVVNfUE9SVExPR19FTkFCTEVEID0gMTAzLCAvKiAgUG9ydCBMb2cgaXMgYWxyZWFkeSBlbmFibGVkICovCisJQkZBX1NUQVRVU19QT1JUTE9HX0RJU0FCTEVEID0gMTA0LCAvKiAgUG9ydCBMb2cgaXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfRklMRV9OT1RfRk9VTkQgPSAxMDUsIC8qICBTcGVjaWZpZWQgZmlsZSBjb3VsZCBub3QgYmUKKwkJCQkJICAqIGZvdW5kICovCisJQkZBX1NUQVRVU19RT1NfRkNfT05MWSA9IDEwNiwgLyogIFFPUyBjYW4gYmUgZW5hYmxlZCBmb3IgRkMgbW9kZQorCQkJCSAgICAgICAqIG9ubHkgKi8KKwlCRkFfU1RBVFVTX1JMSU1fRkNfT05MWSA9IDEwNywgLyogIFJBVEVMSU0gY2FuIGJlIGVuYWJsZWQgZm9yIEZDIG1vZGUKKwkJCQkJKiBvbmx5ICovCisJQkZBX1NUQVRVU19DVF9TUEQgPSAxMDgsIC8qICBJbnZhbGlkIHNwZWVkIHNlbGVjdGlvbiBmb3IgQ2F0YXB1bHQuICovCisJQkZBX1NUQVRVU19MRURURVNUX09QID0gMTA5LCAvKiAgTEVEIHRlc3QgaXMgb3BlcmF0aW5nICovCisJQkZBX1NUQVRVU19DRUVfTk9UX0ROID0gMTEwLCAvKiAgZXRoIHBvcnQgaXMgbm90IGF0IGRvd24gc3RhdGUsIHBsZWFzZQorCQkJCSAgICAgICogYnJpbmcgZG93biBmaXJzdCAqLworCUJGQV9TVEFUVVNfMTBHX1NQRCA9IDExMSwgLyogIFNwZWVkIHNldHRpbmcgbm90IHZhbGlkIGZvciAxMEcgSEJBICovCisJQkZBX1NUQVRVU19JTV9JTlZfVEVBTV9OQU1FID0gMTEyLCAvKiAgSW52YWxpZCB0ZWFtIG5hbWUgKi8KKwlCRkFfU1RBVFVTX0lNX0RVUF9URUFNX05BTUUgPSAxMTMsIC8qICBHaXZlbiB0ZWFtIG5hbWUgYWxyZWFkeQorCQkJCQkgICAgKiBleGlzdHMgKi8KKwlCRkFfU1RBVFVTX0lNX0FEQVBUX0FMUkVBRFlfSU5fVEVBTSA9IDExNCwgLyogIEdpdmVuIGFkYXB0ZXIgaXMgcGFydAorCQkJCQkJICAgICogb2YgYW5vdGhlciB0ZWFtICovCisJQkZBX1NUQVRVU19JTV9BREFQVF9IQVNfVkxBTlMgPSAxMTUsIC8qICBBZGFwdGVyIGhhcyBWTEFOcyBjb25maWd1cmVkLgorCQkJCQkgICAgICAqIERlbGV0ZSBhbGwgVkxBTnMgYmVmb3JlCisJCQkJCSAgICAgICogY3JlYXRpbmcgdGVhbSAqLworCUJGQV9TVEFUVVNfSU1fUFZJRF9NSVNNQVRDSCA9IDExNiwgLyogIE1pc21hdGNoaW5nIFBWSURzIGNvbmZpZ3VyZWQKKwkJCQkJICAgICogZm9yIGFkYXB0ZXJzICovCisJQkZBX1NUQVRVU19JTV9MSU5LX1NQRUVEX01JU01BVENIID0gMTE3LCAvKiAgTWlzbWF0Y2hpbmcgbGluayBzcGVlZHMKKwkJCQkJCSAgKiBjb25maWd1cmVkIGZvciBhZGFwdGVycyAqLworCUJGQV9TVEFUVVNfSU1fTVRVX01JU01BVENIID0gMTE4LCAvKiAgTWlzbWF0Y2hpbmcgTVRVcyBjb25maWd1cmVkIGZvcgorCQkJCQkgICAqIGFkYXB0ZXJzICovCisJQkZBX1NUQVRVU19JTV9SU1NfTUlTTUFUQ0ggPSAxMTksIC8qICBNaXNtYXRjaGluZyBSU1MgcGFyYW1ldGVycworCQkJCQkgICAqIGNvbmZpZ3VyZWQgZm9yIGFkYXB0ZXJzICovCisJQkZBX1NUQVRVU19JTV9IRFNfTUlTTUFUQ0ggPSAxMjAsIC8qICBNaXNtYXRjaGluZyBIRFMgcGFyYW1ldGVycworCQkJCQkgICAqIGNvbmZpZ3VyZWQgZm9yIGFkYXB0ZXJzICovCisJQkZBX1NUQVRVU19JTV9PRkZMT0FEX01JU01BVENIID0gMTIxLCAvKiAgTWlzbWF0Y2hpbmcgb2ZmbG9hZAorCQkJCQkgICAgICAgKiBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgZm9yCisJCQkJCSAgICAgICAqIGFkYXB0ZXJzICovCisJQkZBX1NUQVRVU19JTV9QT1JUX1BBUkFNUyA9IDEyMiwgLyogIEVycm9yIHNldHRpbmcgcG9ydCBwYXJhbWV0ZXJzICovCisJQkZBX1NUQVRVU19JTV9QT1JUX05PVF9JTl9URUFNID0gMTIzLCAvKiAgUG9ydCBpcyBub3QgcGFydCBvZiB0ZWFtICovCisJQkZBX1NUQVRVU19JTV9DQU5OT1RfUkVNX1BSSSA9IDEyNCwgLyogIFByaW1hcnkgYWRhcHRlciBjYW5ub3QgYmUKKwkJCQkJICAgICAqIHJlbW92ZWQuIENoYW5nZSBwcmltYXJ5IGJlZm9yZQorCQkJCQkgICAgICogcmVtb3ZpbmcgKi8KKwlCRkFfU1RBVFVTX0lNX01BWF9QT1JUU19SRUFDSEVEID0gMTI1LCAvKiAgRXhjZWVkaW5nIG1heGltdW0gcG9ydHMKKwkJCQkJCSogcGVyIHRlYW0gKi8KKwlCRkFfU1RBVFVTX0lNX0xBU1RfUE9SVF9ERUxFVEUgPSAxMjYsIC8qICBMYXN0IHBvcnQgaW4gdGVhbSBiZWluZworCQkJCQkgICAgICAgKiBkZWxldGVkICovCisJQkZBX1NUQVRVU19JTV9OT19EUklWRVIgPSAxMjcsIC8qICBJTSBkcml2ZXIgaXMgbm90IGluc3RhbGxlZCAqLworCUJGQV9TVEFUVVNfSU1fTUFYX1ZMQU5TX1JFQUNIRUQgPSAxMjgsIC8qICBFeGNlZWRpbmcgbWF4aW11bSBWTEFOcworCQkJCQkJKiBwZXIgcG9ydCAqLworCUJGQV9TVEFUVVNfVE9NQ0FUX1NQRF9OT1RfQUxMT1dFRCA9IDEyOSwgLyogQmlvcyBzcGVlZCBjb25maWcgbm90CisJCQkJCQkgICogYWxsb3dlZCBmb3IgQ05BICovCisJQkZBX1NUQVRVU19OT19NSU5QT1JUX0RSSVZFUiA9IDEzMCwgLyogIE1pbmlwb3J0IGRyaXZlciBpcyBub3QKKwkJCQkJICAgICAqIGxvYWRlZCAqLworCUJGQV9TVEFUVVNfQ0FSRF9UWVBFX01JU01BVENIID0gMTMxLCAvKiAgQ2FyZCB0eXBlIG1pc21hdGNoICovCisJQkZBX1NUQVRVU19CQURfQVNJQ0JMSyA9IDEzMiwgLyogIEJhZCBBU0lDIGJsb2NrICovCisJQkZBX1NUQVRVU19OT19EUklWRVIgPSAxMzMsIC8qICBTdG9yYWdlL0V0aGVybmV0IGRyaXZlciBub3QgbG9hZGVkICovCisJQkZBX1NUQVRVU19JTlZBTElEX01BQyA9IDEzNCwgLyogIEludmFsaWQgbWFjIGFkZHJlc3MgKi8KKwlCRkFfU1RBVFVTX0lNX05PX1ZMQU4gPSAxMzUsIC8qICBObyBWTEFOcyBjb25maWd1cmVkIG9uIHRoZSBhZGFwdGVyICovCisJQkZBX1NUQVRVU19JTV9FVEhfTEJfRkFJTEVEID0gMTM2LCAvKiAgRXRoZXJuZXQgbG9vcGJhY2sgdGVzdCBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX0lNX1BWSURfUkVNT1ZFID0gMTM3LCAvKiAgQ2Fubm90IHJlbW92ZSBwb3J0IHZsYW4gKFBWSUQpICovCisJQkZBX1NUQVRVU19JTV9QVklEX0VESVQgPSAxMzgsIC8qICBDYW5ub3QgZWRpdCBwb3J0IHZsYW4gKFBWSUQpICovCisJQkZBX1NUQVRVU19DTkFfTk9fQk9PVCA9IDEzOSwgLyogIEJvb3QgdXBsb2FkIG5vdCBhbGxvd2VkIGZvciBDTkEgKi8KKwlCRkFfU1RBVFVTX0lNX1BWSURfTk9OX1pFUk8gPSAxNDAsIC8qICBQb3J0IFZMQU4gSUQgKFBWSUQpIGlzIFNldCB0bworCQkJCQkgICAgKiBOb24tWmVybyBWYWx1ZSAqLworCUJGQV9TVEFUVVNfSU1fSU5FVENGR19MT0NLX0ZBSUxFRCA9IDE0MSwgLyogIEFjcXVpcmluZyBOZXR3b3JrCisJCQkJCQkgICogU3Vic3l0ZW0gTG9jayBGYWlsZWQuUGxlYXNlCisJCQkJCQkgICogdHJ5IGFmdGVyIHNvbWUgdGltZSAqLworCUJGQV9TVEFUVVNfSU1fR0VUX0lORVRDRkdfRkFJTEVEID0gMTQyLCAvKiAgQWNxdWlyaW5nIE5ldHdvcmsgU3Vic3l0ZW0KKwkJCQkJCSAqIGhhbmRsZSBGYWlsZWQuIFBsZWFzZSB0cnkKKwkJCQkJCSAqIGFmdGVyIHNvbWUgdGltZSAqLworCUJGQV9TVEFUVVNfSU1fTk9UX0JPVU5EID0gMTQzLCAvKiAgQnJvY2FkZSAxMEcgRXRoZXJuZXQgU2VydmljZSBpcyBub3QKKwkJCQkJKiBFbmFibGVkIG9uIHRoaXMgcG9ydCAqLworCUJGQV9TVEFUVVNfSU5TVUZGSUNJRU5UX1BFUk1TID0gMTQ0LCAvKiAgVXNlciBkb2Vzbid0IGhhdmUgc3VmZmljaWVudAorCQkJCQkgICAgICAqIHBlcm1pc3Npb25zIHRvIGV4ZWN1dGUgdGhlIEJDVQorCQkJCQkgICAgICAqIGFwcGxpY2F0aW9uICovCisJQkZBX1NUQVRVU19JTV9JTlZfVkxBTl9OQU1FID0gMTQ1LCAvKiAgSW52YWxpZC9SZXNlcnZlZCBWbGFuIG5hbWUKKwkJCQkJICAgICogc3RyaW5nLiBUaGUgbmFtZSBpcyBub3QgYWxsb3dlZAorCQkJCQkgICAgKiBmb3IgdGhlIG5vcm1hbCBWbGFucyAqLworCUJGQV9TVEFUVVNfQ01EX05PVFNVUFBfQ05BID0gMTQ2LCAvKiAgQ29tbWFuZCBub3Qgc3VwcG9ydGVkIGZvciBDTkEgKi8KKwlCRkFfU1RBVFVTX0lNX1BBU1NUSFJVX0VESVQgPSAxNDcsIC8qICBDYW4gbm90IGVkaXQgcGFzc3RocnUgdmxhbiBpZCAqLworCUJGQV9TVEFUVVNfSU1fQklORF9GQUlMRUQgPSAxNDgsIC8qISA8IElNIERyaXZlciBiaW5kIG9wZXJhdGlvbgorCQkJCQkgICogZmFpbGVkICovCisJQkZBX1NUQVRVU19JTV9VTkJJTkRfRkFJTEVEID0gMTQ5LCAvKiAhIDwgSU0gRHJpdmVyIHVuYmluZCBvcGVyYXRpb24KKwkJCQkJICAgICogZmFpbGVkICovCisJQkZBX1NUQVRVU19NQVhfVkFMCQkvKiAgVW5rbm93biBlcnJvciBjb2RlICovCit9OworI2RlZmluZSBiZmFfc3RhdHVzX3QgZW51bSBiZmFfc3RhdHVzCisKK2VudW0gYmZhX2Vwcm90b19zdGF0dXMgeworCUJGQV9FUFJPVE9fQkFEX0FDQ0VQVCA9IDAsCisJQkZBX0VQUk9UT19VTktOT1dOX1JTUCA9IDEKK307CisjZGVmaW5lIGJmYV9lcHJvdG9fc3RhdHVzX3QgZW51bSBiZmFfZXByb3RvX3N0YXR1cworCisjZW5kaWYgLyogX19CRkFfREVGU19TVEFUVVNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190aW4uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Rpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNWEyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190aW4uaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfVElOX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1RJTl9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvZmMuaD4KKworLyoqCisgKiBGQ1MgdGluIHN0YXRlcworICovCitlbnVtIGJmYV90aW5fc3RhdGVfZSB7CisJQkZBX1RJTl9TTV9PRkZMSU5FID0gMCwJCS8qICB0aW4gaXMgb2ZmbGluZSAqLworCUJGQV9USU5fU01fV09TX0xPR0lOID0gMSwJLyogIFdhaXRpbmcgUFJMSSBBQ0MvUkpUIGZyb20gVUxQICovCisJQkZBX1RJTl9TTV9XRldfT05MSU5FID0gMiwJLyogIFdhaXRpbmcgQUNLIHRvIFBSTEkgQUNDIGZyb20gRlcgKi8KKwlCRkFfVElOX1NNX09OTElORSA9IDMsCQkvKiAgdGluIGxvZ2luIGlzIGNvbXBsZXRlICovCisJQkZBX1RJTl9TTV9XSU9fUkVMT0dJTiA9IDQsCS8qICB0aW4gcmVsb2dpbiBpcyBpbiBwcm9ncmVzcyAqLworCUJGQV9USU5fU01fV0lPX0xPR09VVCA9IDUsCS8qICBQcm9jZXNzaW5nIG9mIFBSTE8gcmVxIGZyb20KKwkJCQkJICogICBJbml0aWF0b3IgaXMgaW4gcHJvZ3Jlc3MKKwkJCQkJICovCisJQkZBX1RJTl9TTV9XT1NfTE9HT1VUID0gNiwJLyogIFByb2Nlc3Npbmcgb2YgUFJMTyByZXEgZnJvbQorCQkJCQkgKiAgIEluaXRpYXRvciBpcyBpbiBwcm9ncmVzcworCQkJCQkgKi8KKwlCRkFfVElOX1NNX1dJT19DTEVBTiA9IDcsCS8qICBXYWl0aW5nIGZvciBJTyBjbGVhbnVwIGJlZm9yZSB0aW4KKwkJCQkJICogICBpcyBvZmZsaW5lLiBUaGlzIGNhbiBiZSB0cmlnZ2VyZWQKKwkJCQkJICogICBieSBSUE9SVCBMT0dPIChyY3ZkL3NlbnQpIG9yIGJ5CisJCQkJCSAqICAgUFJMTyAocmN2ZC9zZW50KQorCQkJCQkgKi8KK307CisKK3N0cnVjdCBiZmFfcHJsaV9yZXFfcyB7CisJc3RydWN0IGZjaHNfcyBmY2hzOworCXN0cnVjdCBmY19wcmxpX3MgcHJsaV9wYXlsb2FkOworfTsKKworc3RydWN0IGJmYV9wcmxvX3JlcV9zIHsKKwlzdHJ1Y3QgZmNoc19zIGZjaHM7CisJc3RydWN0IGZjX3BybG9fcyBwcmxvX3BheWxvYWQ7Cit9OworCit2b2lkIGJmYV90aW5fc2VuZF9sb2dpbl9yc3Aodm9pZCAqYmZhX3RpbiwgdTMyIGxvZ2luX3JzcCwKKwkJCQlzdHJ1Y3QgZmNfbHNfcmp0X3Mgcmp0X3BheWxvYWQpOwordm9pZCBiZmFfdGluX3NlbmRfbG9nb3V0X3JzcCh2b2lkICpiZmFfdGluLCB1MzIgbG9nb3V0X3JzcCwKKwkJCQlzdHJ1Y3QgZmNfbHNfcmp0X3Mgcmp0X3BheWxvYWQpOworLyoqCisgKiBGQ1MgdGFyZ2V0IHBvcnQgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX3Rpbl9zdGF0c19zIHsKKwl1MzIgb25saW5lczsJLyogIElUTiBuZXh1cyBvbmxpbmVzIChQUkxJIGRvbmUpICovCisJdTMyIG9mZmxpbmVzOwkvKiAgSVROIE5leHVzIG9mZmxpbmVzIAkqLworCXUzMiBwcmxpX3JlcV9wYXJzZV9lcnI7CS8qICBwcmxpIHJlcSBwYXJzaW5nIGVycm9ycyAqLworCXUzMiBwcmxpX3JzcF9yanQ7CS8qICBudW0gcHJsaSByc3AgcmVqZWN0cyBzZW50ICovCisJdTMyIHBybGlfcnNwX2FjYzsJLyogIG51bSBwcmxpIHJzcCBhY2NlcHRzIHNlbnQgKi8KKwl1MzIgY2xlYW51cF9jb21wczsJLyogIElUTiBjbGVhbnVwIGNvbXBsZXRpb25zICovCit9OworCisvKioKKyAqIEZDUyB0aW4gYXR0cmlidXRlcyByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfdGluX2F0dHJfcyB7CisJZW51bSBiZmFfdGluX3N0YXRlX2Ugc3RhdGU7CisJdTgJc2VxX3JldHJ5OyAgICAvKiAgU2VxdWVuY2UgcmV0cnkgc3VwcG9ydGVkICAgICAgKi8KKwl1OAlyc3ZkWzNdOworfTsKKworLyoqCisgKiBCRkEgVElOIGFzeW5jIGV2ZW50IGRhdGEgc3RydWN0dXJlIGZvciBCRkFMCisgKi8KK2VudW0gYmZhX3Rpbl9hZW5fZXZlbnQgeworCUJGQV9USU5fQUVOX09OTElORSAJPSAxLAkvKiAgVGFyZ2V0IG9ubGluZSAqLworCUJGQV9USU5fQUVOX09GRkxJTkUgCT0gMiwJLyogIFRhcmdldCBvZmZsaW5lICovCisJQkZBX1RJTl9BRU5fRElTQ09OTkVDVAk9IDMsCS8qICBUYXJnZXQgZGlzY29ubmVjdGVkICovCit9OworCisvKioKKyAqIEJGQSBUSU4gZXZlbnQgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBiZmFfdGluX2Flbl9kYXRhX3MgeworCXUxNiB2Zl9pZDsJLyogIHZmX2lkIG9mIHRoZSBJVCBuZXh1cyAqLworCXUxNiByc3ZkWzNdOworCXd3bl90IGxwd3duOwkvKiAgV1dOIG9mIGxvZ2ljYWwgcG9ydCAqLworCXd3bl90IHJwd3duOwkvKiAgV1dOIG9mIHJlbW90ZSh0YXJnZXQpIHBvcnQgKi8KK307CisKKy8qKgorICogQmVsb3cgQVBJcyBhcmUgbmVlZGVkIGZyb20gQkZBIGRyaXZlcgorICogTW92ZSB0aGVzZSB0byBCRkEgZHJpdmVyIHB1YmxpYyBoZWFkZXIgZmlsZT8KKyAqLworLyogIFRJTiByY3ZkIG5ldyBQUkxJICYgZ2V0cyBiZmFkX3Rpbl90IHB0ciBmcm9tIGRyaXZlciB0aGlzIGNhbGxiYWNrICovCit2b2lkICpiZmFkX3Rpbl9yY3ZkX2xvZ2luX3JlcSh2b2lkICpiZmFkX3RtX3BvcnQsIHZvaWQgKmJmYV90aW4sCisJCQkJd3duX3QgcnBfd3duLCB1MzIgcnBfZmNpZCwKKwkJCQlzdHJ1Y3QgYmZhX3BybGlfcmVxX3MgcHJsaV9yZXEpOworLyogIFRJTiByY3ZkIG5ldyBQUkxPICovCit2b2lkIGJmYWRfdGluX3JjdmRfbG9nb3V0X3JlcSh2b2lkICpiZmFkX3Rpbiwgd3duX3QgcnBfd3duLCB1MzIgcnBfZmNpZCwKKwkJCQlzdHJ1Y3QgYmZhX3BybG9fcmVxX3MgcHJsb19yZXEpOworLyogIFRJTiBpcyBvbmxpbmUgYW5kIHJlYWR5IGZvciBJTyAqLwordm9pZCBiZmFkX3Rpbl9vbmxpbmUodm9pZCAqYmZhZF90aW4pOworLyogIFRJTiBpcyBvZmZsaW5lIGFuZCBCRkEgZHJpdmVyIGNhbiBzaHV0ZG93biBpdHMgdXBwZXIgc3RhY2sgKi8KK3ZvaWQgYmZhZF90aW5fb2ZmbGluZSh2b2lkICpiZmFkX3Rpbik7CisvKiAgVElOIGRvZXMgbm90IG5lZWQgdGhpcyBCRkEgZHJpdmVyIHRpbiB0YWcgYW55bW9yZSwgc28gY2FuIGJlIGZyZWVkICovCit2b2lkIGJmYWRfdGluX3Jlc19mcmVlKHZvaWQgKmJmYWRfdGluKTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfVElOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdHNlbnNvci5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdHNlbnNvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODgxZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190c2Vuc29yLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfVFNFTlNPUl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19UU0VOU09SX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKworLyoqCisgKiBUZW1wZXJhdHVyZSBzZW5zb3Igc3RhdHVzIHZhbHVlcworICovCitlbnVtIGJmYV90c2Vuc29yX3N0YXR1cyB7CisJQkZBX1RTRU5TT1JfU1RBVFVTX1VOS05PV04gICA9IDEsICAgLyogIHVua293biBzdGF0dXMgKi8KKwlCRkFfVFNFTlNPUl9TVEFUVVNfRkFVTFRZICAgID0gMiwgICAvKiAgc2Vuc29yIGlzIGZhdWx0eSAqLworCUJGQV9UU0VOU09SX1NUQVRVU19CRUxPV19NSU4gPSAzLCAgIC8qICB0ZW1wZXJhdHVyZSBiZWxvdyBtaW5pbnVtICovCisJQkZBX1RTRU5TT1JfU1RBVFVTX05PTUlOQUwgICA9IDQsICAgLyogIG5vcm1hbCB0ZW1wZXJhdHVyZSAqLworCUJGQV9UU0VOU09SX1NUQVRVU19BQk9WRV9NQVggPSA1LCAgIC8qICB0ZW1wZXJhdHVyZSBhYm92ZSBtYXhpbXVtICovCit9OworCisvKioKKyAqIFRlbXBlcmF0dXJlIHNlbnNvciBhdHRyaWJ1dGUKKyAqLworc3RydWN0IGJmYV90c2Vuc29yX2F0dHJfcyB7CisJZW51bSBiZmFfdHNlbnNvcl9zdGF0dXMgc3RhdHVzOwkvKiAgdGVtcGVyYXR1cmUgc2Vuc29yIHN0YXR1cyAqLworCXUzMiAgICAgICAgCXZhbHVlOwkvKiAgY3VycmVudCB0ZW1wZXJhdHVyZSBpbiBjZWxzaXVzICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19UU0VOU09SX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdHlwZXMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0ODMzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3R5cGVzLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX1RZUEVTX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1RZUEVTX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorCitlbnVtIGJmYV9ib29sZWFuIHsKKwlCRkFfRkFMU0UgPSAwLAorCUJGQV9UUlVFICA9IDEKK307CisjZGVmaW5lIGJmYV9ib29sZWFuX3QgZW51bSBiZmFfYm9vbGVhbgorCisjZGVmaW5lIEJGQV9TVFJJTkdfMzIJMzIKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5MDJhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZlcnNpb24uaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfVkVSU0lPTl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19WRVJTSU9OX0hfXworCisjZGVmaW5lIEJGQV9WRVJTSU9OX0xFTgkJNjQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192Zi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjM1YmU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdmYuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19WRl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19WRl9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisvKioKKyAqIFZGIHN0YXRlcworICovCitlbnVtIGJmYV92Zl9zdGF0ZSB7CisJQkZBX1ZGX1VOSU5JVCAgICA9IDAsCS8qICBmYWJyaWMgaXMgbm90IHlldCBpbml0aWFsaXplZCAqLworCUJGQV9WRl9MSU5LX0RPV04gPSAxLAkvKiAgbGluayBpcyBkb3duICovCisJQkZBX1ZGX0ZMT0dJICAgICA9IDIsCS8qICBmbG9naSBpcyBpbiBwcm9ncmVzcyAqLworCUJGQV9WRl9BVVRIICAgICAgPSAzLAkvKiAgYXV0aGVudGljYXRpb24gaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfVkZfTk9GQUJSSUMgID0gNCwJLyogIGZhYnJpYyBpcyBub3QgcHJlc2VudCAqLworCUJGQV9WRl9PTkxJTkUgICAgPSA1LAkvKiAgbG9naW4gdG8gZmFicmljIGlzIGNvbXBsZXRlICovCisJQkZBX1ZGX0VWRlAgICAgICA9IDYsCS8qICBFVkZQIGlzIGluIHByb2dyZXNzICovCisJQkZBX1ZGX0lTT0xBVEVEICA9IDcsCS8qICBwb3J0IGlzb2xhdGVkIGR1ZSB0byB2Zl9pZCBtaXNtYXRjaCAqLworfTsKKworLyoqCisgKiBWRiBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfdmZfc3RhdHNfcyB7CisJdTMyICAgICAgICBmbG9naV9zZW50OwkvKiAgTnVtIEZMT0dJcyBzZW50IAkJKi8KKwl1MzIgICAgICAgIGZsb2dpX3JzcF9lcnI7CS8qICBGTE9HSSByZXNwb25zZSBlcnJvcnMgCSovCisJdTMyICAgICAgICBmbG9naV9hY2NfZXJyOwkvKiAgRkxPR0kgYWNjZXB0IGVycm9ycyAJKi8KKwl1MzIgICAgICAgIGZsb2dpX2FjY2VwdHM7CS8qICBGTE9HSSBhY2NlcHRzIHJlY2VpdmVkIAkqLworCXUzMiAgICAgICAgZmxvZ2lfcmVqZWN0czsJLyogIEZMT0dJIHJlamVjdHMgcmVjZWl2ZWQgCSovCisJdTMyICAgICAgICBmbG9naV91bmtub3duX3JzcDsgLyogIFVua25vd24gcmVzcG9uc2VzIGZvciBGTE9HSSAqLworCXUzMiAgICAgICAgZmxvZ2lfYWxsb2Nfd2FpdDsgLyogIEFsbG9jYXRpb24gd2FpdHMgcHJpb3IgdG8KKwkJCQkJICAgKiBzZW5kaW5nIEZMT0dJCisJCQkJCSAgICovCisJdTMyICAgICAgICBmbG9naV9yY3ZkOwkvKiAgRkxPR0lzIHJlY2VpdmVkICovCisJdTMyICAgICAgICBmbG9naV9yZWplY3RlZDsJLyogIEluY29taW5nIEZMT0dJcyByZWplY3RlZCAqLworCXUzMiAgICAgICAgZmFicmljX29ubGluZXM7CS8qICBJbnRlcm5hbCBmYWJyaWMgb25saW5lCisJCQkJCSAqIG5vdGlmaWNhdGlvbiBzZW50IHRvIG90aGVyCisJCQkJCSAqIG1vZHVsZXMKKwkJCQkJICovCisJdTMyICAgICAgICBmYWJyaWNfb2ZmbGluZXM7IC8qICBJbnRlcm5hbCBmYWJyaWMgb2ZmbGluZQorCQkJCQkgICogbm90aWZpY2F0aW9uIHNlbnQgdG8gb3RoZXIKKwkJCQkJICAqIG1vZHVsZXMKKwkJCQkJICAqLworCXUzMiAgICAgICAgcmVzdmQ7Cit9OworCisvKioKKyAqIFZGIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX3ZmX2F0dHJfcyB7CisJZW51bSBiZmFfdmZfc3RhdGUgIHN0YXRlOwkJLyogIFZGIHN0YXRlICovCisJdTMyICAgICAgICByc3ZkOworCXd3bl90ICAgICAgICAgICBmYWJyaWNfbmFtZTsJLyogIGZhYnJpYyBuYW1lICovCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19WRl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Zwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMDIxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192cG9ydC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1ZQT1JUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1ZQT1JUX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKy8qKgorICogVlBPUlQgc3RhdGVzCisgKi8KK2VudW0gYmZhX3Zwb3J0X3N0YXRlIHsKKwlCRkFfRkNTX1ZQT1JUX1VOSU5JVCAJCT0gMCwKKwlCRkFfRkNTX1ZQT1JUX0NSRUFURUQgCQk9IDEsCisJQkZBX0ZDU19WUE9SVF9PRkZMSU5FIAkJPSAxLAorCUJGQV9GQ1NfVlBPUlRfRkRJU0NfU0VORCAJPSAyLAorCUJGQV9GQ1NfVlBPUlRfRkRJU0MgCQk9IDMsCisJQkZBX0ZDU19WUE9SVF9GRElTQ19SRVRSWSAJPSA0LAorCUJGQV9GQ1NfVlBPUlRfT05MSU5FIAkJPSA1LAorCUJGQV9GQ1NfVlBPUlRfREVMRVRJTkcgCQk9IDYsCisJQkZBX0ZDU19WUE9SVF9DTEVBTlVQIAkJPSA2LAorCUJGQV9GQ1NfVlBPUlRfTE9HT19TRU5EIAk9IDcsCisJQkZBX0ZDU19WUE9SVF9MT0dPIAkJCT0gOCwKKwlCRkFfRkNTX1ZQT1JUX0VSUk9SCQkJPSA5LAorCUJGQV9GQ1NfVlBPUlRfTUFYX1NUQVRFLAorfTsKKworLyoqCisgKiB2cG9ydCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfdnBvcnRfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9wb3J0X3N0YXRzX3MgcG9ydF9zdGF0czsJLyogIGJhc2UgY2xhc3MgKHBvcnQpIHN0YXRzICovCisJLyoKKwkgKiBUT0RPIC0gcmVtb3ZlCisJICovCisKKwl1MzIgICAgICAgIGZkaXNjX3NlbnQ7CS8qICBudW0gZmRpc2Mgc2VudCAqLworCXUzMiAgICAgICAgZmRpc2NfYWNjZXB0czsJLyogIGZkaXNjIGFjY2VwdHMgKi8KKwl1MzIgICAgICAgIGZkaXNjX3JldHJpZXM7CS8qICBmZGlzYyByZXRyaWVzICovCisJdTMyICAgICAgICBmZGlzY190aW1lb3V0czsJLyogIGZkaXNjIHRpbWVvdXRzICovCisJdTMyICAgICAgICBmZGlzY19yc3BfZXJyOwkvKiAgZmRpc2MgcmVzcG9uc2UgZXJyb3IgKi8KKwl1MzIgICAgICAgIGZkaXNjX2FjY19iYWQ7CS8qICBiYWQgZmRpc2MgYWNjZXB0cyAqLworCXUzMiAgICAgICAgZmRpc2NfcmVqZWN0czsJLyogIGZkaXNjIHJlamVjdHMgKi8KKwl1MzIgICAgICAgIGZkaXNjX3Vua25vd25fcnNwOworCS8qCisJICohPCBmZGlzYyByc3AgdW5rbm93biBlcnJvcgorCSAqLworCXUzMiAgICAgICAgZmRpc2NfYWxsb2Nfd2FpdDsvKiAgZmRpc2MgcmVxIChmY3hwKWFsbG9jIHdhaXQgKi8KKworCXUzMiAgICAgICAgbG9nb19hbGxvY193YWl0Oy8qICBsb2dvIHJlcSAoZmN4cCkgYWxsb2Mgd2FpdCAqLworCXUzMiAgICAgICAgbG9nb19zZW50OwkvKiAgbG9nbyBzZW50ICovCisJdTMyICAgICAgICBsb2dvX2FjY2VwdHM7CS8qICBsb2dvIGFjY2VwdHMgKi8KKwl1MzIgICAgICAgIGxvZ29fcmVqZWN0czsJLyogIGxvZ28gcmVqZWN0cyAqLworCXUzMiAgICAgICAgbG9nb19yc3BfZXJyOwkvKiAgbG9nbyByc3AgZXJyb3JzICovCisJdTMyICAgICAgICBsb2dvX3Vua25vd25fcnNwOworCQkJLyogIGxvZ28gcnNwIHVua25vd24gZXJyb3JzICovCisKKwl1MzIgICAgICAgIGZhYl9ub19ucGl2OwkvKiAgZmFicmljIGRvZXMgbm90IHN1cHBvcnQgbnBpdiAqLworCisJdTMyICAgICAgICBmYWJfb2ZmbGluZTsJLyogIG9mZmxpbmUgZXZlbnRzIGZyb20gZmFiIFNNICovCisJdTMyICAgICAgICBmYWJfb25saW5lOwkvKiAgb25saW5lIGV2ZW50cyBmcm9tIGZhYiBTTSAqLworCXUzMiAgICAgICAgZmFiX2NsZWFudXA7CS8qICBjbGVhbnVwIHJlcXVlc3QgZnJvbSBmYWIgU00gKi8KKwl1MzIgICAgICAgIHJzdmQ7Cit9OworCisvKioKKyAqIEJGQSB2cG9ydCBhdHRyaWJ1dGUgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX3Zwb3J0X2F0dHJfcyB7CisJc3RydWN0IGJmYV9wb3J0X2F0dHJfcyAgIHBvcnRfYXR0cjsgLyogIGJhc2UgY2xhc3MgKHBvcnQpIGF0dHJpYnV0ZXMgKi8KKwllbnVtIGJmYV92cG9ydF9zdGF0ZSB2cG9ydF9zdGF0ZTsgLyogIHZwb3J0IHN0YXRlICovCisJdTMyICAgICAgICAgIHJzdmQ7Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19WUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2M2IwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYi5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2ZjYi5oIEJGQSBGQ1MgY2FsbGJhY2sgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfSF9fCisKKy8qKgorICogIGZjYiBNYWluIGZjcyBjYWxsYmFja3MKKyAqLworCit2b2lkIGJmYV9mY2JfZXhpdChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKKworCisKKyNlbmRpZiAvKiBfX0JGQV9GQ0JfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9mY3BpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzcwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfZmNwaW0uaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorKiA6IGJmYWRfZmNwaW0uaCAtIEJGQSBGQ1MgaW5pdGlhdG9yIG1vZGUgcmVtb3RlIHBvcnQgY2FsbGJhY2tzCisgKi8KKworI2lmbmRlZiBfX0JGQURfRkNCX0ZDUElNX0hfXworI2RlZmluZSBfX0JGQURfRkNCX0ZDUElNX0hfXworCitzdHJ1Y3QgYmZhZF9pdG5pbV9zOworCisvKgorICogUlBJTSBjYWxsYmFja3MKKyAqLworCisvKioKKyAqIAlNZW1vcnkgYWxsb2NhdGlvbiBmb3IgcmVtb3RlIHBvcnQgaW5zdGFuY2UuIENhbGxlZCBiZWZvcmUgUFJMSSBpcworICogCWluaXRpYXRlZCB0byB0aGUgcmVtb3RlIHRhcmdldCBwb3J0LgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZAkJLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtvdXRdIGl0bmltCQktIEZDUyByZW1vdGUgcG9ydCAoSU0pIGluc3RhbmNlCisgKiBAcGFyYW1bb3V0XSBpdG5pbV9kcnYJLSBkcml2ZXIgcmVtb3RlIHBvcnQgKElNKSBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkIGJmYV9mY2JfaXRuaW1fYWxsb2Moc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKml0bmltLAorCQkJCSAgICBzdHJ1Y3QgYmZhZF9pdG5pbV9zICoqaXRuaW1fZHJ2KTsKKworLyoqCisgKiAJCUZyZWUgcmVtb3RlIHBvcnQgKElNKSBpbnN0YW5jZS4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQJLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gaXRuaW1fZHJ2CS0gZHJpdmVyIHJlbW90ZSBwb3J0IGluc3RhbmNlCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX2l0bmltX2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCQkgICBzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbV9kcnYpOworCisvKioKKyAqIAlOb3RpZmljYXRpb24gb2Ygd2hlbiBsb2dpbiB3aXRoIGEgcmVtb3RlIHRhcmdldCBkZXZpY2UgaXMgY29tcGxldGUuCisgKgorICogQHBhcmFtW2luXSBpdG5pbV9kcnYJLSBkcml2ZXIgcmVtb3RlIHBvcnQgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfaXRuaW1fb25saW5lKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7CisKKy8qKgorICogCU5vdGlmaWNhdGlvbiB3aGVuIGxvZ2luIHdpdGggdGhlIHJlbW90ZSBkZXZpY2UgaXMgc2V2ZXJlZC4KKyAqCisgKiBAcGFyYW1baW5dIGl0bmltX2RydgktIGRyaXZlciByZW1vdGUgcG9ydCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2ZjYl9pdG5pbV9vZmZsaW5lKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7CisKK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX2l0bmltX3Rvdl9iZWdpbihzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbV9kcnYpOwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfaXRuaW1fdG92KHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7CisKKyNlbmRpZiAvKiBfX0JGQURfRkNCX0ZDUElNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkN2Y5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9wb3J0LmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2ZjYl9wb3J0LmggQkZBIEZDUyB2aXJ0dWFsIHBvcnQgZHJpdmVyIGludGVyZmFjZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDQl9QT1JUX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfUE9SVF9IX18KKworI2luY2x1ZGUgPGZjYi9iZmFfZmNiX3Zwb3J0Lmg+CisvKioKKyAqICBmY3NfcG9ydF9mY2IgRkNTIHBvcnQgZHJpdmVyIGludGVyZmFjZXMKKyAqLworCisvKgorICogRm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RydWN0IGJmYWRfcG9ydF9zOworCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zIGZyb20gQkZBIEZDUyB0byBkcml2ZXIKKyAqLworCisvKioKKyAqIAlDYWxsIGZyb20gRkNTIHRvIGRyaXZlciBtb2R1bGUgd2hlbiBhIHBvcnQgaXMgaW5zdGFudGlhdGVkLiBUaGUgcG9ydAorICogCWNhbiBiZSBhIGJhc2UgcG9ydCBvciBhIHZpcnR1YWwgcG9ydCB3aXRoIGluIHRoZSBiYXNlIGZhYnJpYyBvcgorICogCWEgdmlydHVhbCBmYWJyaWMuCisgKgorICogIE9uIHRoaXMgY2FsbGJhY2ssIGRyaXZlciBpcyBzdXBwb3NlZCB0byBjcmVhdGUgc2NzaV9ob3N0LCBzY3NpX3RndCBvcgorICogIG5ldHdvcmsgaW50ZXJmYWNlcyBiYXNlcyBvbiBwb3J0cyBwZXJzb25hbGl0eS9yb2xlcy4KKyAqCisgKiAgICAgIGJhc2UgcG9ydCBvZiBiYXNlIGZhYnJpYzoJdmZfZHJ2ID09IE5VTEwgJiYgdnBfZHJ2ID09IE5VTEwKKyAqICAgICAgdnBvcnQgb2YgYmFzZSBmYWJyaWM6CQl2Zl9kcnYgPT0gTlVMTCAmJiB2cF9kcnYgIT0gTlVMTAorICogICAgICBiYXNlIHBvcnQgb2YgVkY6CQl2Zl9kcnYgIT0gTlVMTCAmJiB2cF9kcnYgPT0gTlVMTAorICogICAgICB2cG9ydCBvZiBWRjoJCQl2Zl9kcnYgIT0gTlVMTCAmJiB2cF9kcnYgIT0gTlVMTAorICoKKyAqIEBwYXJhbVtpbl0gYmZhZCAgIC0gZHJpdmVyIGluc3RhbmNlCisgKiBAcGFyYW1baW5dIHBvcnQgICAtIEZDUyBwb3J0IGluc3RhbmNlCisgKiBAcGFyYW1baW5dIHJvbGVzICAtIHBvcnQgcm9sZXM6IElNLCBUTSwgSVAKKyAqIEBwYXJhbVtpbl0gdmZfZHJ2IC0gVkYgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgZmFicmljIChubyBWRikKKyAqIEBwYXJhbVtpbl0gdnBfZHJ2IC0gdnBvcnQgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgcG9ydAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCitzdHJ1Y3QgYmZhZF9wb3J0X3MgKmJmYV9mY2JfcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCWVudW0gYmZhX3BvcnRfcm9sZSByb2xlcywgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LAorCQkJc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBfZHJ2KTsKKworLyoqCisgKiAJQ2FsbCBmcm9tIEZDUyB0byBkcml2ZXIgbW9kdWxlIHdoZW4gYSBwb3J0IGlzIGRlbGV0ZWQuIFRoZSBwb3J0CisgKiAJY2FuIGJlIGEgYmFzZSBwb3J0IG9yIGEgdmlydHVhbCBwb3J0IHdpdGggaW4gdGhlIGJhc2UgZmFicmljIG9yCisgKiAJYSB2aXJ0dWFsIGZhYnJpYy4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQgICAtIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSByb2xlcyAgLSBwb3J0IHJvbGVzOiBJTSwgVE0sIElQCisgKiBAcGFyYW1baW5dIHZmX2RydiAtIFZGIGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIGZhYnJpYyAobm8gVkYpCisgKiBAcGFyYW1baW5dIHZwX2RydiAtIHZwb3J0IGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIHBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3BvcnRfZGVsZXRlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlcywKKwkJCXN0cnVjdCBiZmFkX3ZmX3MgKnZmX2Rydiwgc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBfZHJ2KTsKKworLyoqCisgKiAJTm90aWZpY2F0aW9uIHdoZW4gcG9ydCB0cmFuc2l0aW9ucyB0byBPTkxJTkUgc3RhdGUuCisgKgorICogT25saW5lIG5vdGlmaWNhdGlvbiBpcyBhIGxvZ2ljYWwgbGluayB1cCBmb3IgdGhlIGxvY2FsIHBvcnQuIFRoaXMKKyAqIG5vdGlmaWNhdGlvbiBpcyBzZW50IGFmdGVyIGEgc3VjY2Vzc2Z1bGwgRkxPR0ksIG9yIGEgc3VjY2Vzc2Z1bAorICogbGluayBpbml0aWFsaXphdGlvbiBpbiBwcm92aWF0ZS1sb29wIG9yIE4yTiB0b3BvbG9naWVzLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZCAgIC0gZHJpdmVyIGluc3RhbmNlCisgKiBAcGFyYW1baW5dIHJvbGVzICAtIHBvcnQgcm9sZXM6IElNLCBUTSwgSVAKKyAqIEBwYXJhbVtpbl0gdmZfZHJ2IC0gVkYgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgZmFicmljIChubyBWRikKKyAqIEBwYXJhbVtpbl0gdnBfZHJ2IC0gdnBvcnQgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgcG9ydAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkIGJmYV9mY2JfcG9ydF9vbmxpbmUoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLAorCQkJc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpOworCisvKioKKyAqIAlOb3RpZmljYXRpb24gd2hlbiBwb3J0IHRyYW5zaXRpb25zIHRvIE9GRkxJTkUgc3RhdGUuCisgKgorICogT2ZmbGluZSBub3RpZmljYXRpb24gaXMgYSBsb2dpY2FsIGxpbmsgZG93biBmb3IgdGhlIGxvY2FsIHBvcnQuCisgKgorICogQHBhcmFtW2luXSBiZmFkICAgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcm9sZXMgIC0gcG9ydCByb2xlczogSU0sIFRNLCBJUAorICogQHBhcmFtW2luXSB2Zl9kcnYgLSBWRiBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBmYWJyaWMgKG5vIFZGKQorICogQHBhcmFtW2luXSB2cF9kcnYgLSB2cG9ydCBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9wb3J0X29mZmxpbmUoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLAorCQkJc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpOworCisKKyNlbmRpZiAvKiBfX0JGQV9GQ0JfUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Jwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyNjFiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9ycG9ydC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2ZjYl9ycG9ydC5oIEJGQSBGQ1MgcnBvcnQgZHJpdmVyIGludGVyZmFjZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDQl9SUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfRkNCX1JQT1JUX0hfXworCisvKioKKyAqICBmY3NfcnBvcnRfZmNiIFJlbW90ZSBwb3J0IGRyaXZlciBpbnRlcmZhY2VzCisgKi8KKworCitzdHJ1Y3QgYmZhZF9ycG9ydF9zOworCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zIGZyb20gQkZBIEZDUyB0byBkcml2ZXIKKyAqLworCisvKioKKyAqIAlDb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfZmNzX3Jwb3J0X2FkZCgpLgorICoKKyAqIEBwYXJhbVtpbl0gcnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHJwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9ycG9ydF9hZGQoc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2KTsKKworLyoqCisgKiAJQ29tcGxldGlvbiBjYWxsYmFjayBmb3IgYmZhX2Zjc19ycG9ydF9yZW1vdmUoKS4KKyAqCisgKiBAcGFyYW1baW5dIHJwb3J0X2RydiAtIGRyaXZlciBpbnN0YW5jZSBvZiBycG9ydAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkIGJmYV9mY2JfcnBvcnRfcmVtb3ZlKHN0cnVjdCBiZmFkX3Jwb3J0X3MgKnJwb3J0X2Rydik7CisKKy8qKgorICogCQlDYWxsIHRvIGFsbG9jYXRlIGEgcnBvcnQgaW5zdGFuY2UuCisgKgorICogQHBhcmFtW2luXSBiZmFkIC0gZHJpdmVyIGluc3RhbmNlCisgKiBAcGFyYW1bb3V0XSBycG9ydCAtIEJGQSBGQ1MgaW5zdGFuY2Ugb2YgcnBvcnQKKyAqIEBwYXJhbVtvdXRdIHJwb3J0X2RydiAtIGRyaXZlciBpbnN0YW5jZSBvZiBycG9ydAorICoKKyAqIEByZXR2YWwgQkZBX1NUQVRVU19PSyAtIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQKKyAqIEByZXR2YWwgQkZBX1NUQVRVU19FTk9NRU0gLSBjYW5ub3QgYWxsb2NhdGUKKyAqLworYmZhX3N0YXR1c190IGJmYV9mY2JfcnBvcnRfYWxsb2Moc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKipycG9ydCwKKwkJCXN0cnVjdCBiZmFkX3Jwb3J0X3MgKipycG9ydF9kcnYpOworCisvKioKKyAqIAlDYWxsIHRvIGZyZWUgcnBvcnQgbWVtb3J5IHJlc291cmNlcy4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHJwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9ycG9ydF9mcmVlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3Jwb3J0X3MgKipycG9ydF9kcnYpOworCisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9SUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl92Zi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3ZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkM2ZhYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl92Zi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2ZjYl92Zi5oIEJGQSBGQ1MgdmlydHVhbCBmYWJyaWMgZHJpdmVyIGludGVyZmFjZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDQl9WRl9IX18KKyNkZWZpbmUgX19CRkFfRkNCX1ZGX0hfXworCisvKioKKyAqICBmY3NfdmZfZmNiIFZpcnR1YWwgZmFicmljIGRyaXZlciBpbnRyZWZhY2VzCisgKi8KKworCitzdHJ1Y3QgYmZhZF92Zl9zOworCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zIGZyb20gQkZBIEZDUyB0byBkcml2ZXIKKyAqLworCisvKioKKyAqIAlDb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfZmNzX3ZmX3N0b3AoKS4KKyAqCisgKiBAcGFyYW1baW5dIHZmX2RydiAtIGRyaXZlciBpbnN0YW5jZSBvZiB2ZgorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2ZjYl92Zl9zdG9wKHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2Rydik7CisKKworCisjZW5kaWYgLyogX19CRkFfRkNCX1ZGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Zwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzlmNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Zwb3J0LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiX3Zwb3J0LmggQkZBIEZDUyB2aXJ0dWFsIHBvcnQgZHJpdmVyIGludGVyZmFjZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDQl9WUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfRkNCX1ZQT1JUX0hfXworCisvKioKKyAqICBmY3NfdnBvcnRfZmNiIFZpcnR1YWwgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKworc3RydWN0IGJmYWRfdnBvcnRfczsKKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9ucyBmcm9tIEJGQSBGQ1MgdG8gZHJpdmVyCisgKi8KKworLyoqCisgKiAJQ29tcGxldGlvbiBjYWxsYmFjayBmb3IgYmZhX2Zjc192cG9ydF9kZWxldGUoKS4KKyAqCisgKiBAcGFyYW1baW5dIHZwb3J0X2RydiAtIGRyaXZlciBpbnN0YW5jZSBvZiB2cG9ydAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2ZjYl92cG9ydF9kZWxldGUoc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnRfZHJ2KTsKKworCisKKyNlbmRpZiAvKiBfX0JGQV9GQ0JfVlBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzY2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3MuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNTX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmVyc2lvbi5oPgorI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2ZhYnJpYy5oPgorCisjZGVmaW5lIEJGQV9GQ1NfT1NfU1RSX0xFTiAgCQk2NAorCitzdHJ1Y3QgYmZhX2Zjc19zdGF0c19zIHsKKwlzdHJ1Y3QgeworCQl1MzIgICAgICAgIHVudGFnZ2VkOyAvKiAgdW50YWdnZWQgcmVjZWl2ZSBmcmFtZXMgKi8KKwkJdTMyICAgICAgICB0YWdnZWQ7CS8qICB0YWdnZWQgcmVjZWl2ZSBmcmFtZXMgKi8KKwkJdTMyICAgICAgICB2ZmlkX3Vua25vd247CS8qICBWRiBpZCBpcyB1bmtub3duICovCisJfSB1ZjsKK307CisKK3N0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgeworCXU4ICB2ZXJzaW9uW0JGQV9WRVJTSU9OX0xFTl07CQkvKiAgRHJpdmVyIFZlcnNpb24gKi8KKwl1OCAgaG9zdF9tYWNoaW5lX25hbWVbQkZBX0ZDU19PU19TVFJfTEVOXTsKKwl1OCAgaG9zdF9vc19uYW1lW0JGQV9GQ1NfT1NfU1RSX0xFTl07IC8qICBPUyBuYW1lIGFuZCB2ZXJzaW9uICovCisJdTggIGhvc3Rfb3NfcGF0Y2hbQkZBX0ZDU19PU19TVFJfTEVOXTsvKiAgcGF0Y2ggb3Igc2VydmljZSBwYWNrICovCisJdTggIG9zX2RldmljZV9uYW1lW0JGQV9GQ1NfT1NfU1RSX0xFTl07IC8qICBEcml2ZXIgRGV2aWNlIE5hbWUgKi8KK307CisKK3N0cnVjdCBiZmFfZmNzX3MgeworCXN0cnVjdCBiZmFfcyAgICAgICpiZmE7CS8qICBjb3JyZXNwb25kaW5nIEJGQSBiZmEgaW5zdGFuY2UgKi8KKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQ7IC8qICBjb3JyZXNwb25kaW5nIEJEQSBkcml2ZXIgaW5zdGFuY2UgKi8KKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAgKmxvZ207CS8qICBkcml2ZXIgbG9nZ2luZyBtb2R1bGUgaW5zdGFuY2UgKi8KKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAgKnRyY21vZDsJLyogIHRyYWNpbmcgbW9kdWxlICovCisJc3RydWN0IGJmYV9hZW5fcyAgICAgICphZW47CS8qICBhZW4gY29tcG9uZW50ICovCisJYmZhX2Jvb2xlYW5fdCAgIHZmX2VuYWJsZWQ7CS8qICBWRiBtb2RlIGlzIGVuYWJsZWQgKi8KKwliZmFfYm9vbGVhbl90IG1pbl9jZmc7CQkvKiBtaW4gY2ZnIGVuYWJsZWQvZGlzYWJsZWQgKi8KKwl1MTYgICAgICAgIHBvcnRfdmZpZDsJLyogIHBvcnQgZGVmYXVsdCBWRiBJRCAqLworCXN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgZHJpdmVyX2luZm87CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgZmFicmljOyAvKiAgYmFzZSBmYWJyaWMgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfZmNzX3N0YXRzX3MJc3RhdHM7CS8qICBGQ1Mgc3RhdGlzdGljcyAqLworCXN0cnVjdCBiZmFfd2NfcyAgICAgICAJd2M7CS8qICB3YWl0aW5nIGNvdW50ZXIgKi8KK307CisKKy8qCisgKiBiZmEgZmNzIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfZmNzX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCWJmYV9ib29sZWFuX3QgbWluX2NmZyk7Cit2b2lkIGJmYV9mY3NfZHJpdmVyX2luZm9faW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCQlzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zICpkcml2ZXJfaW5mbyk7Cit2b2lkIGJmYV9mY3NfZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX3RyY19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCk7Cit2b2lkIGJmYV9mY3NfbG9nX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKTsKK3ZvaWQgYmZhX2Zjc19hZW5faW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfYWVuX3MgKmFlbik7Cit2b2lkIAkgIAliZmFfZmNzX3N0YXJ0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CisKKyNlbmRpZiAvKiBfX0JGQV9GQ1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfYXV0aC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2F1dGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGM0YzlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2F1dGguaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNTX0FVVEhfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19BVVRIX0hfXworCitzdHJ1Y3QgYmZhX2Zjc19zOworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2F1dGguaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3ZmLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mY19zcC5oPgorCitzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfczsKKworCisKK3N0cnVjdCBiZmFfZmNzX2F1dGhfcyB7CisJYmZhX3NtX3QJc207CS8qICBzdGF0ZSBtYWNoaW5lICovCisJYmZhX2Jvb2xlYW5fdCAgIHBvbGljeTsJLyogIGF1dGhlbnRpY2F0aW9uIGVuYWJsZWQvZGlzYWJsZWQgKi8KKwllbnVtIGJmYV9hdXRoX3N0YXR1cyBzdGF0dXM7CS8qICBhdXRoZW50aWNhdGlvbiBzdGF0dXMgKi8KKwllbnVtIGF1dGhfcmp0X2NvZGVzICByanRfY29kZTsJLyogIGF1dGggcmVqZWN0IHN0YXR1cyAqLworCWVudW0gYXV0aF9yanRfY29kZV9leHBzICByanRfY29kZV9leHA7CS8qICBhdXRoIHJlamVjdCByZWFzb24gKi8KKwllbnVtIGJmYV9hdXRoX2FsZ28gYWxnbzsJLyogIEF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSAqLworCXN0cnVjdCBiZmFfYXV0aF9zdGF0c19zIHN0YXRzOwkvKiAgU3RhdGlzdGljcyAqLworCWVudW0gYXV0aF9kaF9naWQgICBncm91cDsJLyogIERIKGRpZmZpZS1oZWxsbWFuKSBHcm91cCAqLworCWVudW0gYmZhX2F1dGhfc2VjcmV0c291cmNlIHNvdXJjZTsJLyogIFNlY3JldCBzb3VyY2UgKi8KKwljaGFyICAgICAgICAgICAgc2VjcmV0W0JGQV9BVVRIX1NFQ1JFVF9TVFJJTkdfTEVOXTsKKwkJCQkvKiAgc2VjcmV0IHN0cmluZyAqLworCXU4ICAgICAgICAgc2VjcmV0X2xlbjsKKwkJCQkvKiAgc2VjcmV0IHN0cmluZyBsZW5ndGggKi8KKwl1OCAgICAgICAgIG5yZXRyaWVzOworCQkJCS8qICBudW1iZXIgb2YgcmV0cmllcyAqLworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWM7LyogIHBvaW50ZXIgdG8gZmFicmljICovCisJdTggICAgICAgICBzZW50Y29kZTsJLyogIHBvaW50ZXIgdG8gcmVzcG9uc2UgZGF0YSAqLworCXU4ICAgICAgICAqcmVzcG9uc2U7CS8qICBwb2ludGVyIHRvIHJlc3BvbnNlIGRhdGEgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgZGVsYXlfdGltZXI7IAkvKiAgZGVsYXkgdGltZXIgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsJCS8qICBwb2ludGVyIHRvIGZjeHAgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgZmN4cF93cWU7Cit9OworCisvKioKKyAqIGJmYSBmY3MgYXV0aGVudGljYXRpb24gcHVibGljIGZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQsCisJCQkJICAgICAgc3RydWN0IGJmYV9hdXRoX2F0dHJfcyAqYXR0cik7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX3NldF9wb2xpY3koc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkJYmZhX2Jvb2xlYW5fdCBwb2xpY3kpOworZW51bSBiZmFfYXV0aF9zdGF0dXMgYmZhX2Zjc19hdXRoX2dldF9zdGF0dXMoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCk7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX3NldF9hbGdvKHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQsCisJCQkJICAgICAgZW51bSBiZmFfYXV0aF9hbGdvIGFsZ28pOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkgICAgICAgc3RydWN0IGJmYV9hdXRoX3N0YXRzX3MgKnN0YXRzKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X2RoX2dyb3VwKHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQsIGludCBncm91cCk7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX3NldF9zZWNyZXRzdHJpbmcoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkJICAgICAgY2hhciAqc2VjcmV0KTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X3NlY3JldHN0cmluZ19lbmNyeXB0KHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQsCisJCQkJCSAgICAgIHUzMiBzZWNyZXRbXSwgdTMyIGxlbik7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX3NldF9zZWNyZXRzb3VyY2Uoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkJICAgICAgZW51bSBiZmFfYXV0aF9zZWNyZXRzb3VyY2Ugc3JjKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfcmVzZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCk7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX3JlaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0KTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19BVVRIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZhYnJpYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZhYnJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZmQyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmFicmljLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfRkFCUklDX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfRkFCUklDX0hfXworCitzdHJ1Y3QgYmZhX2Zjc19zOworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3ZmLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mY19zcC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2F1dGguaD4KKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb24KKyAqLworc3RydWN0IGJmYWRfdmZfczsKKworZW51bSBiZmFfZmNzX2ZhYnJpY190eXBlIHsKKwlCRkFfRkNTX0ZBQlJJQ19VTktOT1dOID0gMCwKKwlCRkFfRkNTX0ZBQlJJQ19TV0lUQ0hFRCA9IDEsCisJQkZBX0ZDU19GQUJSSUNfUExPT1AgPSAyLAorCUJGQV9GQ1NfRkFCUklDX04yTiA9IDMsCit9OworCisKK3N0cnVjdCBiZmFfZmNzX2ZhYnJpY19zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgcWU7CQkvKiAgcXVldWUgZWxlbWVudCAqLworCWJmYV9zbV90CSBzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV9mY3NfcyAqZmNzOwkJLyogIEZDUyBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAgYnBvcnQ7CS8qICBiYXNlIGxvZ2ljYWwgcG9ydCAqLworCWVudW0gYmZhX2Zjc19mYWJyaWNfdHlwZSBmYWJfdHlwZTsgLyogIGZhYnJpYyB0eXBlICovCisJZW51bSBiZmFfcHBvcnRfdHlwZSBvcGVyX3R5cGU7CS8qICBjdXJyZW50IGxpbmsgdG9wb2xvZ3kgKi8KKwl1OCAgICAgICAgIGlzX3ZmOwkJLyogIGlzIHZpcnR1YWwgZmFicmljPyAqLworCXU4ICAgICAgICAgaXNfbnBpdjsJLyogIGlzIE5QSVYgc3VwcG9ydGVkID8gKi8KKwl1OCAgICAgICAgIGlzX2F1dGg7CS8qICBpcyBTZWN1cml0eS9BdXRoIHN1cHBvcnRlZCA/ICovCisJdTE2ICAgICAgICBiYl9jcmVkaXQ7CS8qICBCQiBjcmVkaXQgZnJvbSBmYWJyaWMgKi8KKwl1MTYgICAgICAgIHZmX2lkOwkJLyogIHZpcnR1YWwgZmFicmljIElEICovCisJdTE2ICAgICAgICBudW1fdnBvcnRzOwkvKiAgbnVtIHZwb3J0cyAqLworCXUxNiAgICAgICAgcnN2ZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgdnBvcnRfcTsJLyogIHF1ZXVlIG9mIHZpcnR1YWwgcG9ydHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgdmZfcTsJLyogIHF1ZXVlIG9mIHZpcnR1YWwgZmFicmljcyAqLworCXN0cnVjdCBiZmFkX3ZmX3MgICAgICAqdmZfZHJ2OwkvKiAgZHJpdmVyIHZmIHN0cnVjdHVyZSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyBsaW5rX3RpbWVyOwkvKiAgTGluayBGYWlsdXJlIHRpbWVyLiBWcG9ydCAqLworCXd3bl90ICAgICAgICAgICBmYWJyaWNfbmFtZTsJLyogIGF0dGFjaGVkIGZhYnJpYyBuYW1lICovCisJYmZhX2Jvb2xlYW5fdCAgIGF1dGhfcmVxZDsJLyogIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkCSovCisJc3RydWN0IGJmYV90aW1lcl9zIGRlbGF5X3RpbWVyOwkvKiAgZGVsYXkgdGltZXIJCSovCisJdW5pb24geworCQl1MTYgICAgICAgIHN3cF92ZmlkOy8qICBzd2l0Y2ggcG9ydCBWRiBpZAkJKi8KKwl9IGV2ZW50X2FyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19hdXRoX3MgIGF1dGg7CS8qICBhdXRoZW50aWNhdGlvbiBjb25maWcJKi8KKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgIHdjOwkvKiAgd2FpdCBjb3VudGVyIGZvciBkZWxldGUJKi8KKwlzdHJ1Y3QgYmZhX3ZmX3N0YXRzX3MgIHN0YXRzOyAJLyogIGZhYnJpYy92ZiBzdGF0cwkJKi8KKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHM7CS8qICBscG9ydCBsb2dpbiBzZXJ2aWNlcwkqLworCXU4CWZhYnJpY19pcF9hZGRyW0JGQV9GQ1NfRkFCUklDX0lQQUREUl9TWl07ICAvKiAgYXR0YWNoZWQKKwkJCQkJCQkgICAgKiBmYWJyaWMncyBpcCBhZGRyCisJCQkJCQkJICAgICovCit9OworCisjZGVmaW5lIGJmYV9mY3NfZmFicmljX25waXZfY2FwYWJsZShfX2YpICAgIChfX2YpLT5pc19ucGl2CisjZGVmaW5lIGJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKF9fZikJCQlcCisJKChfX2YpLT5mYWJfdHlwZSA9PSBCRkFfRkNTX0ZBQlJJQ19TV0lUQ0hFRCkKKworLyoqCisgKiAgIFRoZSBkZXNpZ24gY2FsbHMgZm9yIGEgc2luZ2xlIGltcGxlbWVudGF0aW9uIG9mIGJhc2UgZmFicmljIGFuZCB2Zi4KKyAqLworI2RlZmluZSBiZmFfZmNzX3ZmX3Qgc3RydWN0IGJmYV9mY3NfZmFicmljX3MKKworc3RydWN0IGJmYV92Zl9ldmVudF9zIHsKKwl1MzIgICAgICAgIHVuZGVmaW5lZDsKK307CisKKy8qKgorICogYmZhIGZjcyB2ZiBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3ZmX21vZGVfZW5hYmxlKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3ZmX21vZGVfZGlzYWJsZShzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfY3JlYXRlKGJmYV9mY3NfdmZfdCAqdmYsIHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCSAgICAgICB1MTYgdmZfaWQsIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcsCisJCQkgICAgICAgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3ZmX2RlbGV0ZShiZmFfZmNzX3ZmX3QgKnZmKTsKK3ZvaWQgYmZhX2Zjc192Zl9zdGFydChiZmFfZmNzX3ZmX3QgKnZmKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3ZmX3N0b3AoYmZhX2Zjc192Zl90ICp2Zik7Cit2b2lkIGJmYV9mY3NfdmZfbGlzdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiAqdmZfaWRzLCBpbnQgKm52ZnMpOwordm9pZCBiZmFfZmNzX3ZmX2xpc3RfYWxsKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2ICp2Zl9pZHMsIGludCAqbnZmcyk7Cit2b2lkIGJmYV9mY3NfdmZfZ2V0X2F0dHIoYmZhX2Zjc192Zl90ICp2Ziwgc3RydWN0IGJmYV92Zl9hdHRyX3MgKnZmX2F0dHIpOwordm9pZCBiZmFfZmNzX3ZmX2dldF9zdGF0cyhiZmFfZmNzX3ZmX3QgKnZmLAorCQkJICBzdHJ1Y3QgYmZhX3ZmX3N0YXRzX3MgKnZmX3N0YXRzKTsKK3ZvaWQgYmZhX2Zjc192Zl9jbGVhcl9zdGF0cyhiZmFfZmNzX3ZmX3QgKnZmKTsKK3ZvaWQgYmZhX2Zjc192Zl9nZXRfcG9ydHMoYmZhX2Zjc192Zl90ICp2Ziwgd3duX3QgdnB3d25bXSwgaW50ICpucG9ydHMpOworYmZhX2Zjc192Zl90ICpiZmFfZmNzX3ZmX2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCk7CitzdHJ1Y3QgYmZhZF92Zl9zICpiZmFfZmNzX3ZmX2dldF9kcnZfdmYoYmZhX2Zjc192Zl90ICp2Zik7CisKKyNlbmRpZiAvKiBfX0JGQV9GQ1NfRkFCUklDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZjcGltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmNwaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzE5ZjJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZjcGltLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc19mY3BpbS5oIEJGQSBGQ1MgRkNQIEluaXRpYXRvciBNb2RlIGludGVyZmFjZXMvZGVmaW5lcy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19GQ1BJTV9IX18KKyNkZWZpbmUgX19CRkFfRkNTX0ZDUElNX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2l0bmltLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8YmZhX2ZjcGltLmg+CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdHJ1Y3QgYmZhZF9pdG5pbV9zOworCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zIHsKKwliZmFfc21fdAkJc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgCSpycG9ydDsJCS8qICBwYXJlbnQgcmVtb3RlIHJwb3J0ICAqLworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAJKml0bmltX2RydjsJLyogIGRyaXZlciBwZWVyIGluc3RhbmNlICovCisJc3RydWN0IGJmYV9mY3NfcyAgICAgIAkqZmNzOwkJLyogIGZjcyBpbnN0YW5jZSAgICAgICAgICovCisJc3RydWN0IGJmYV90aW1lcl9zIAl0aW1lcjsJCS8qICB0aW1lciBmdW5jdGlvbnMgICAgICAqLworCXN0cnVjdCBiZmFfaXRuaW1fcyAJKmJmYV9pdG5pbTsJLyogIEJGQSBpdG5pbSBzdHJ1Y3QgICAgICovCisJYmZhX2Jvb2xlYW5fdAkgCXNlcV9yZWM7CS8qICBzZXEgcmVjb3Zlcnkgc3VwcG9ydCAqLworCWJmYV9ib29sZWFuX3QJIAlyZWNfc3VwcG9ydDsJLyogIFJFQyBzdXBwb3J0ZWQgICAgICAgICovCisJYmZhX2Jvb2xlYW5fdAkgCWNvbmZfY29tcDsJLyogIEZDUF9DT05GICAgICBzdXBwb3J0ICovCisJYmZhX2Jvb2xlYW5fdAkgCXRhc2tfcmV0cnlfaWQ7CS8qICB0YXNrIHJldHJ5IGlkIHN1cHAgICAqLworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyAJZmN4cF93cWU7CS8qICB3YWl0IHFlbGVtIGZvciBmY3hwICAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOwkJLyogIEZDWFAgaW4gdXNlICAgICAgICAgICovCisJc3RydWN0IGJmYV9pdG5pbV9zdGF0c19zIAlzdGF0czsJLyogIGl0biBzdGF0aXN0aWNzICAgICAgICovCit9OworCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJmYWRfcG9ydF9zICoKK2JmYV9mY3NfaXRuaW1fZ2V0X2RydnBvcnQoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+cG9ydC0+YmZhZF9wb3J0OworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJmYV9mY3NfcG9ydF9zICoKK2JmYV9mY3NfaXRuaW1fZ2V0X3BvcnQoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+cG9ydDsKK30KKworCitzdGF0aWMgaW5saW5lIHd3bl90CitiZmFfZmNzX2l0bmltX2dldF9ud3duKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+cnBvcnQtPm53d247Cit9CisKKworc3RhdGljIGlubGluZSB3d25fdAorYmZhX2Zjc19pdG5pbV9nZXRfcHd3bihzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5wd3duOworfQorCisKK3N0YXRpYyBpbmxpbmUgdTMyCitiZmFfZmNzX2l0bmltX2dldF9mY2lkKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+cnBvcnQtPnBpZDsKK30KKworCitzdGF0aWMgaW5saW5lICAgdTMyCitiZmFfZmNzX2l0bmltX2dldF9tYXhmcnNpemUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+bWF4ZnJzaXplOworfQorCisKK3N0YXRpYyBpbmxpbmUgICBlbnVtIGZjX2NvcworYmZhX2Zjc19pdG5pbV9nZXRfY29zKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+cnBvcnQtPmZjX2NvczsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZmFkX2l0bmltX3MgKgorYmZhX2Zjc19pdG5pbV9nZXRfZHJ2aXRuKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+aXRuaW1fZHJ2OworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJmYV9pdG5pbV9zICoKK2JmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bihzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPmJmYV9pdG5pbTsKK30KKworLyoqCisgKiBiZmEgZmNzIEZDUCBJbml0aWF0b3IgbW9kZSBBUEkgZnVuY3Rpb25zCisgKi8KK3ZvaWQgYmZhX2Zjc19pdG5pbV9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCXN0cnVjdCBiZmFfaXRuaW1fYXR0cl9zICphdHRyKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQlzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MgKnN0YXRzKTsKK3N0cnVjdCBiZmFfZmNzX2l0bmltX3MgKmJmYV9mY3NfaXRuaW1fbG9va3VwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXd3bl90IHJwd3duKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX2l0bmltX2F0dHJfZ2V0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24sCisJCQlzdHJ1Y3QgYmZhX2l0bmltX2F0dHJfcyAqYXR0cik7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc19pdG5pbV9zdGF0c19nZXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3biwKKwkJCXN0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcyAqc3RhdHMpOworYmZhX3N0YXR1c190IGJmYV9mY3NfaXRuaW1fc3RhdHNfY2xlYXIoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3QgcnB3d24pOworI2VuZGlmIC8qIF9fQkZBX0ZDU19GQ1BJTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mZG1pLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmRtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NDFmZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmRtaS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc19mZG1pLmggQkZBIGZjcyBmZG1pIG1vZHVsZSBwdWJsaWMgaW50ZXJmYWNlCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfRkRNSV9IX18KKyNkZWZpbmUgX19CRkFfRkNTX0ZETUlfSF9fCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZkbWkuaD4KKworI2RlZmluZQlCRkFfRkNTX0ZETUlfU1VQT1JURURfU1BFRURTICAoRkRNSV9UUkFOU19TUEVFRF8xRyAgfCBcCisJCQkJCUZETUlfVFJBTlNfU1BFRURfMkcgfCBcCisJCQkJCUZETUlfVFJBTlNfU1BFRURfNEcgfCBcCisJCQkJCUZETUlfVFJBTlNfU1BFRURfOEcpCisKKy8qCisqIEhCQSBBdHRyaWJ1dGUgQmxvY2sgOiBCRkEgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uIE5vdGUgOiBTb21lIHZhcmlhYmxlCisqIHNpemVzIGhhdmUgYmVlbiB0cmltbWVkIHRvIHN1aXQgQkZBIEZvciBFeCA6IE1vZGVsIHdpbGwgYmUgIkJyb2NhZGUiLiBCYXNlZAorICogb24gdGhpcyB0aGUgc2l6ZSBoYXMgYmVlbiByZWR1Y2VkIHRvIDE2IGJ5dGVzIGZyb20gdGhlIHN0YW5kYXJkJ3MgNjQgYnl0ZXMuCisgKi8KK3N0cnVjdCBiZmFfZmNzX2ZkbWlfaGJhX2F0dHJfcyB7CisJd3duX3QgICAgICAgICAgIG5vZGVfbmFtZTsKKwl1OCAgICAgICAgIG1hbnVmYWN0dXJlcls2NF07CisJdTggICAgICAgICBzZXJpYWxfbnVtWzY0XTsKKwl1OCAgICAgICAgIG1vZGVsWzE2XTsKKwl1OCAgICAgICAgIG1vZGVsX2Rlc2NbMjU2XTsKKwl1OCAgICAgICAgIGh3X3ZlcnNpb25bOF07CisJdTggICAgICAgICBkcml2ZXJfdmVyc2lvbls4XTsKKwl1OCAgICAgICAgIG9wdGlvbl9yb21fdmVyW0JGQV9WRVJTSU9OX0xFTl07CisJdTggICAgICAgICBmd192ZXJzaW9uWzhdOworCXU4ICAgICAgICAgb3NfbmFtZVsyNTZdOworCXUzMiAgICAgICAgbWF4X2N0X3B5bGQ7Cit9OworCisvKgorICogUG9ydCBBdHRyaWJ1dGUgQmxvY2sKKyAqLworc3RydWN0IGJmYV9mY3NfZmRtaV9wb3J0X2F0dHJfcyB7CisJdTggICAgICAgICBzdXBwX2ZjNF90eXBlc1szMl07CS8qIHN1cHBvcnRlZCBGQzQgdHlwZXMgKi8KKwl1MzIgICAgICAgIHN1cHBfc3BlZWQ7CS8qIHN1cHBvcnRlZCBzcGVlZCAqLworCXUzMiAgICAgICAgY3Vycl9zcGVlZDsJLyogY3VycmVudCBTcGVlZCAqLworCXUzMiAgICAgICAgbWF4X2ZybV9zaXplOwkvKiBtYXggZnJhbWUgc2l6ZSAqLworCXU4ICAgICAgICAgb3NfZGV2aWNlX25hbWVbMjU2XTsJLyogT1MgZGV2aWNlIE5hbWUgKi8KKwl1OCAgICAgICAgIGhvc3RfbmFtZVsyNTZdOwkvKiBob3N0IG5hbWUgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9GQ1NfRkRNSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19scG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2xwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1Y2JhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19scG9ydC5oCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfcG9ydC5oIEJGQSBmY3MgcG9ydCBtb2R1bGUgcHVibGljIGludGVyZmFjZQorICovCisKKyNpZm5kZWYgX19CRkFfRkNTX1BPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19QT1JUX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ycG9ydC5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGNzL2JmYV93Yy5oPgorCitzdHJ1Y3QgYmZhX2Zjc19zOworc3RydWN0IGJmYV9mY3NfZmFicmljX3M7CisKKy8qCisqIEB0b2RvIDogbmVlZCB0byBtb3ZlIHRvIGEgZ2xvYmFsIGNvbmZpZyBmaWxlLgorICogTWF4aW11bSBWcG9ydHMgc3VwcG9ydGVkIHBlciBwaHlzaWNhbCBwb3J0IG9yIHZmLgorICovCisjZGVmaW5lIEJGQV9GQ1NfTUFYX1ZQT1JUU19TVVBQX0NCICAyNTUKKyNkZWZpbmUgQkZBX0ZDU19NQVhfVlBPUlRTX1NVUFBfQ1QgIDE5MQorCisvKgorKiBAdG9kbyA6IG5lZWQgdG8gbW92ZSB0byBhIGdsb2JhbCBjb25maWcgZmlsZS4KKyAqIE1heGltdW0gUnBvcnRzIHN1cHBvcnRlZCBwZXIgcG9ydCAocGh5c2ljYWwvbG9naWNhbCkuCisgKi8KKyNkZWZpbmUgQkZBX0ZDU19NQVhfUlBPUlRTX1NVUFAgIDI1NgkvKiBAdG9kbyA6IHRlbnRhdGl2ZSB2YWx1ZSAqLworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyB7CisJYmZhX3NtX3QgICAgICAgIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OwkvKiAgcGFyZW50IHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgZmN4cF93cWU7Cit9OworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgeworCWJmYV9zbV90ICAgICAgICBzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV90aW1lcl9zIHRpbWVyOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsJLyogIHBhcmVudCBwb3J0ICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIGZjeHBfd3FlOworfTsKKworCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyB7CisJYmZhX3NtX3QgICAgICAgIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptczsJLyogIHBhcmVudCBtcyAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKKwl1OCAgICAgICAgIHJldHJ5X2NudDsJLyogIHJldHJ5IGNvdW50ICovCisJdTgJIAkgICByc3ZkWzNdOworfTsKKworCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgeworCWJmYV9zbV90ICAgICAgICBzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV90aW1lcl9zIHRpbWVyOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsJLyogIHBhcmVudCBwb3J0ICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIGZjeHBfd3FlOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zIGZkbWk7CS8qICBGRE1JIGNvbXBvbmVudCBvZiBNUyAqLworCXU4ICAgICAgICAgcmV0cnlfY250OwkvKiAgcmV0cnkgY291bnQgKi8KKwl1OAkgCSAgIHJzdmRbM107Cit9OworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfZmFiX3MgeworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyBuczsJLyogIE5TIGNvbXBvbmVudCBvZiBwb3J0ICovCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyBzY247CS8qICBzY24gY29tcG9uZW50IG9mIHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgbXM7CS8qICBNUyBjb21wb25lbnQgb2YgcG9ydCAqLworfTsKKworCisKKyNkZWZpbmUgCU1BWF9BTFBBX0NPVU5UIAkJMTI3CisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfbG9vcF9zIHsKKwl1OCAgICAgICAgIG51bV9hbHBhOwkvKiAgTnVtIG9mIEFMUEEgZW50cmllcyBpbiB0aGUgbWFwICovCisJdTggICAgICAgICBhbHBhX3Bvc19tYXBbTUFYX0FMUEFfQ09VTlRdOwkvKiAgQUxQQSBQb3NpdGlvbmFsCisJCQkJCQkJICpNYXAgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQ7CS8qICBwYXJlbnQgcG9ydCAqLworfTsKKworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfbjJuX3MgeworCXUzMiAgICAgICAgcnN2ZDsKKwl1MTYgICAgICAgIHJlcGx5X294aWQ7CS8qICBveF9pZCBmcm9tIHRoZSByZXEgZmxvZ2kgdG8gYmUKKwkJCQkJICp1c2VkIGluIGZsb2dpIGFjYyAqLworCXd3bl90ICAgICAgICAgICByZW1fcG9ydF93d247CS8qICBBdHRhY2hlZCBwb3J0J3Mgd3duICovCit9OworCisKK3VuaW9uIGJmYV9mY3NfcG9ydF90b3BvX3UgeworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmFiX3MgcGZhYjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2xvb3BfcyBwbG9vcDsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X24ybl9zIHBuMm47Cit9OworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIHFlOwkvKiAgdXNlZCBieSBwb3J0L3Zwb3J0ICovCisJYmZhX3NtX3QgICAgICAgICAgICAgICBzbTsJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOwkvKiAgcGFyZW50IGZhYnJpYyAqLworCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAgcG9ydF9jZmc7CS8qICBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgbGlua190aW1lcjsJLyogIHRpbWVyIGZvciBsaW5rIG9mZmxpbmUgKi8KKwl1MzIgICAgICAgIHBpZCA6IDI0OwkvKiAgRkMgYWRkcmVzcyAqLworCXU4ICAgICAgICAgbHBfdGFnOwkJLyogIGxwb3J0IHRhZyAqLworCXUxNiAgICAgICAgbnVtX3Jwb3J0czsJLyogIE51bSBvZiByLXBvcnRzICovCisJc3RydWN0IGxpc3RfaGVhZCBycG9ydF9xOwkvKiAgcXVldWUgb2YgZGlzY292ZXJlZCByLXBvcnRzICovCisJc3RydWN0IGJmYV9mY3NfcyAqZmNzOwkvKiAgRkNTIGluc3RhbmNlICovCisJdW5pb24gYmZhX2Zjc19wb3J0X3RvcG9fdSBwb3J0X3RvcG87CS8qICBmYWJyaWMvbG9vcC9uMm4gZGV0YWlscyAqLworCXN0cnVjdCBiZmFkX3BvcnRfcyAqYmZhZF9wb3J0OwkvKiAgZHJpdmVyIHBlZXIgaW5zdGFuY2UgKi8KKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsJLyogIE5VTEwgZm9yIGJhc2UgcG9ydHMgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgZmN4cF93cWU7CisJc3RydWN0IGJmYV9wb3J0X3N0YXRzX3Mgc3RhdHM7CisJc3RydWN0IGJmYV93Y19zICAgICAgICB3YzsJLyogIHdhaXRpbmcgY291bnRlciBmb3IgZXZlbnRzICovCit9OworCisjZGVmaW5lIGJmYV9mY3NfbHBvcnRfdCBzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MKKworLyoqCisgKiBTeW1ib2xpYyBOYW1lIHJlbGF0ZWQgZGVmaW5lcworICogIFRvdGFsIGJ5dGVzIDI1NS4KKyAqICBQaHlzaWNhbCBQb3J0J3Mgc3ltYm9saWMgbmFtZSAxMjggYnl0ZXMuCisgKiAgRm9yIFZwb3J0cywgVnBvcnQncyBzeW1ib2xpYyBuYW1lIGlzIGFwcGVuZGVkIHRvIHRoZSBQaHlzaWNhbCBwb3J0J3MKKyAqICBTeW1ib2xpYyBOYW1lLgorICoKKyAqICBQaHlzaWNhbCBQb3J0J3Mgc3ltYm9saWMgbmFtZSBGb3JtYXQgOiAoVG90YWwgMTI4IGJ5dGVzKQorICogIEFkYXB0ZXIgTW9kZWwgbnVtYmVyL25hbWUgOiAxMiBieXRlcworICogIERyaXZlciBWZXJzaW9uICAgICA6IDEwIGJ5dGVzCisgKiAgSG9zdCBNYWNoaW5lIE5hbWUgIDogMzAgYnl0ZXMKKyAqIAlIb3N0IE9TIEluZm8JICAgOiA0OCBieXRlcworICogCUhvc3QgT1MgUEFUQ0ggSW5mbyA6IDE2IGJ5dGVzCisgKiAgKCByZW1haW5pbmcgMTIgYnl0ZXMgcmVzZXJ2ZWQgdG8gYmUgdXNlZCBmb3Igc2VwYXJhdG9yKQorICovCisjZGVmaW5lIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IgCQkiIHwgIgorCisjZGVmaW5lIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9NT0RFTF9TWgkJCTEyCisjZGVmaW5lIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9WRVJTSU9OX1NaIAkJMTAKKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX01BQ0hJTkVOQU1FX1NaIAkzMAorI2RlZmluZSBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfT1NJTkZPX1NaCQkJNDgKKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX09TUEFUQ0hfU1oJCTE2CisKKy8qKgorICogR2V0IEZDIHBvcnQgSUQgZm9yIGEgbG9naWNhbCBwb3J0LgorICovCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChfbHBvcnQpCSgoX2xwb3J0KS0+cGlkKQorI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24oX2xwb3J0KQkoKF9scG9ydCktPnBvcnRfY2ZnLnB3d24pCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfbnd3bihfbHBvcnQpCSgoX2xwb3J0KS0+cG9ydF9jZmcubnd3bikKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUoX2xwb3J0KQkoKF9scG9ydCktPnBvcnRfY2ZnLnN5bV9uYW1lKQorI2RlZmluZSBiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKF9scG9ydCkJXAorCQkJKChfbHBvcnQpLT5wb3J0X2NmZy5yb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorI2RlZmluZSBiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KF9scG9ydCkJXAorCQkJKChfbHBvcnQpLT5wb3J0X2NmZy5yb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X25ycG9ydHMoX2xwb3J0KQlcCisJCQkoKF9scG9ydCkgPyAoX2xwb3J0KS0+bnVtX3Jwb3J0cyA6IDApCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJmYWRfcG9ydF9zICoKK2JmYV9mY3NfcG9ydF9nZXRfZHJ2cG9ydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJcmV0dXJuIHBvcnQtPmJmYWRfcG9ydDsKK30KKworCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfb3BlcnR5cGUoX2xwb3J0KQkoX2xwb3J0KS0+ZmFicmljLT5vcGVyX3R5cGUKKworCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX25hbWUoX2xwb3J0KQkoX2xwb3J0KS0+ZmFicmljLT5mYWJyaWNfbmFtZQorCisKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfaXBhZGRyKF9scG9ydCkJKF9scG9ydCktPmZhYnJpYy0+ZmFicmljX2lwX2FkZHIKKworLyoqCisgKiBiZmEgZmNzIHBvcnQgcHVibGljIGZ1bmN0aW9ucworICovCit2b2lkIGJmYV9mY3NfY2ZnX2Jhc2VfcG9ydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCQlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnKTsKK3N0cnVjdCBiZmFfZmNzX3BvcnRfcyAqYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXd3bl90IHJwb3J0X3d3bnNbXSwgaW50ICpucnBvcnRzKTsKKword3duX3QgYmZhX2Zjc19wb3J0X2dldF9ycG9ydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHd3biwKKwkJCWludCBpbmRleCwgaW50IG5ycG9ydHMsIGJmYV9ib29sZWFuX3QgYnd3bik7CisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfcyAqYmZhX2Zjc19sb29rdXBfcG9ydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCQl1MTYgdmZfaWQsIHd3bl90IGxwd3duKTsKKwordm9pZCBiZmFfZmNzX3BvcnRfZ2V0X2luZm8oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGJmYV9wb3J0X2luZm9fcyAqcG9ydF9pbmZvKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBiZmFfcG9ydF9hdHRyX3MgKnBvcnRfYXR0cik7Cit2b2lkIGJmYV9mY3NfcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCwKKwkJCXN0cnVjdCBiZmFfcG9ydF9zdGF0c19zICpwb3J0X3N0YXRzKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQpOworZW51bSBiZmFfcHBvcnRfc3BlZWQgYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9tYXhfc3BlZWQoCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFfZmNzX3BvcnRfZW5hYmxlX2lwZmNfcm9sZXMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9kaXNhYmxlX2lwZmNfcm9sZXMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCk7CisKKyNlbmRpZiAvKiBfX0JGQV9GQ1NfUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Jwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAyYjk1YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19ycG9ydC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNTX1JQT1JUX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfUlBPUlRfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Jwb3J0Lmg+CisKKyNkZWZpbmUgQkZBX0ZDU19SUE9SVF9ERUZfREVMX1RJTUVPVVQgCTkwIAkvKiBpbiBzZWNzICovCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RydWN0IGJmYWRfcnBvcnRfczsKKworc3RydWN0IGJmYV9mY3NfaXRuaW1fczsKK3N0cnVjdCBiZmFfZmNzX3Rpbl9zOworc3RydWN0IGJmYV9mY3NfaXBycF9zOworCisvKiBScG9ydCBGZWF0dXJlcyAoUlBGKSAqLworc3RydWN0IGJmYV9mY3NfcnBmX3MgeworCWJmYV9zbV90ICAgICAgICAgICAgICAgc207CS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CS8qICBwYXJlbnQgcnBvcnQgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCXRpbWVyOwkvKiAgZ2VuZXJhbCBwdXJwb3NlIHRpbWVyICovCisJc3RydWN0IGJmYV9mY3hwX3MgCSpmY3hwOwkvKiAgRkNYUCBuZWVkZWQgZm9yIGRpc2NhcmRpbmcgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgCWZjeHBfd3FlOwkvKiAgZmN4cCB3YWl0IHF1ZXVlIGVsZW1lbnQgKi8KKwlpbnQgICAgICAgICAgICAgCXJwc2NfcmV0cmllczsJLyogIG1heCBSUFNDIHJldHJ5IGF0dGVtcHRzICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgCXJwc2Nfc3BlZWQ7CS8qIEN1cnJlbnQgU3BlZWQgZnJvbSBSUFNDLgorCQkJCQkJICogTyBpZiBSUFNDIGZhaWxzICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQJYXNzaWduZWRfc3BlZWQ7CS8qIFNwZWVkIGFzc2lnbmVkIGJ5IHRoZSB1c2VyLgorCQkJCQkJICogd2lsbCBiZSB1c2VkIGlmIFJQU0MgaXMgbm90CisJCQkJCQkgKiBzdXBwb3J0ZWQgYnkgdGhlIHJwb3J0ICovCit9OworCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgcWU7CS8qICB1c2VkIGJ5IHBvcnQvdnBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQ7CS8qICBwYXJlbnQgRkNTIHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zICAgICAgKmZjczsJLyogIGZjcyBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFkX3Jwb3J0X3MgICAqcnBfZHJ2OwkvKiAgZHJpdmVyIHBlZXIgaW5zdGFuY2UgKi8KKwl1MzIgICAgICAgIHBpZDsJLyogIHBvcnQgSUQgb2YgcnBvcnQgKi8KKwl1MTYgICAgICAgIG1heGZyc2l6ZTsJLyogIG1heGltdW0gZnJhbWUgc2l6ZSAqLworCXUxNiAgICAgICAgcmVwbHlfb3hpZDsJLyogIE9YX0lEIG9mIGluYm91bmQgcmVxdWVzdHMgKi8KKwllbnVtIGZjX2NvcyAgICAgICAgZmNfY29zOwkvKiAgRkMgY2xhc3NlcyBvZiBzZXJ2aWNlIHN1cHAgKi8KKwliZmFfYm9vbGVhbl90ICAgY2lzYzsJLyogIENJU0MgY2FwYWJsZSBkZXZpY2UgKi8KKwl3d25fdCAgICAgICAgICAgcHd3bjsJLyogIHBvcnQgd3duIG9mIHJwb3J0ICovCisJd3duX3QgICAgICAgICAgIG53d247CS8qICBub2RlIHd3biBvZiBycG9ydCAqLworCXN0cnVjdCBiZmFfcnBvcnRfc3ltbmFtZV9zIHBzeW1fbmFtZTsgLyogIHBvcnQgc3ltYm9saWMgbmFtZSAgKi8KKwliZmFfc21fdCAgICAgICAgc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsJLyogIGdlbmVyYWwgcHVycG9zZSB0aW1lciAqLworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltOwkvKiAgSVROIGluaXRpYXRvciBtb2RlIHJvbGUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluOwkvKiAgSVROIGluaXRpYXRvciBtb2RlIHJvbGUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19pcHJwX3MgKmlwcnA7CS8qICBJUC9GQyByb2xlICovCisJc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnQ7CS8qICBCRkEgUnBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsJLyogIEZDWFAgbmVlZGVkIGZvciBkaXNjYXJkaW5nICovCisJaW50ICAgICAgICAgICAgIHBsb2dpX3JldHJpZXM7CS8qICBtYXggcGxvZ2kgcmV0cnkgYXR0ZW1wdHMgKi8KKwlpbnQgICAgICAgICAgICAgbnNfcmV0cmllczsJLyogIG1heCBOUyBxdWVyeSByZXRyeSBhdHRlbXB0cyAqLworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyAJZmN4cF93cWU7IC8qICBmY3hwIHdhaXQgcXVldWUgZWxlbWVudCAqLworCXN0cnVjdCBiZmFfcnBvcnRfc3RhdHNfcyBzdGF0czsJLyogIHJwb3J0IHN0YXRzICovCisJZW51bSBiZmFfcnBvcnRfZnVuY3Rpb24Jc2NzaV9mdW5jdGlvbjsgIC8qICBJbml0aWF0b3IvVGFyZ2V0ICovCisJc3RydWN0IGJmYV9mY3NfcnBmX3MgcnBmOyAJLyogUnBvcnQgZmVhdHVyZXMgbW9kdWxlICovCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZmFfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2dldF9oYWxycG9ydChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlyZXR1cm4gcnBvcnQtPmJmYV9ycG9ydDsKK30KKworLyoqCisgKiBiZmEgZmNzIHJwb3J0IEFQSSBmdW5jdGlvbnMKKyAqLworYmZhX3N0YXR1c190IGJmYV9mY3NfcnBvcnRfYWRkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgKnB3d24sCisJCQlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFkX3Jwb3J0X3MgKnJwb3J0X2Rydik7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc19ycG9ydF9yZW1vdmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9hdHRyX3MgKmF0dHIpOwordm9pZCBiZmFfZmNzX3Jwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfc3RhdHNfcyAqc3RhdHMpOwordm9pZCBiZmFfZmNzX3Jwb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcnBvcnRfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXd3bl90IHJwd3duKTsKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcnBvcnRfbG9va3VwX2J5X253d24oCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJud3duKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9zZXRfZGVsX3RpbWVvdXQodTggcnBvcnRfdG1vKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9zZXRfc3BlZWQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCk7CisjZW5kaWYgLyogX19CRkFfRkNTX1JQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Zwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfdnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDMzZjJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Zwb3J0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX3Zwb3J0LmggQkZBIGZjcyB2cG9ydCBtb2R1bGUgcHVibGljIGludGVyZmFjZQorICovCisKKyNpZm5kZWYgX19CRkFfRkNTX1ZQT1JUX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfVlBPUlRfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdnBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX3Zwb3J0Lmg+CisKK3N0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgeworCXN0cnVjdCBsaXN0X2hlYWQJCXFlOwkJLyogIHF1ZXVlIGVsZW0JICovCisJYmZhX3NtX3QJCXNtOwkJLyogIHN0YXRlIG1hY2hpbmUJKi8KKwliZmFfZmNzX2xwb3J0X3QJCWxwb3J0OwkJLyogIGxvZ2ljYWwgcG9ydAkqLworCXN0cnVjdCBiZmFfdGltZXJfcwl0aW1lcjsJCS8qICBnZW5lcmFsIHB1cnBvc2UgdGltZXIgKi8KKwlzdHJ1Y3QgYmZhZF92cG9ydF9zCSp2cG9ydF9kcnY7CS8qICBEcml2ZXIgcHJpdmF0ZQkqLworCXN0cnVjdCBiZmFfdnBvcnRfc3RhdHNfcyB2cG9ydF9zdGF0czsJLyogIHZwb3J0IHN0YXRpc3RpY3MJKi8KKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHM7CQkvKiAgTHBvcnQgbG9naW4gc2VydmljZSAqLworCWludAkJCWZkaXNjX3JldHJpZXM7Cit9OworCisjZGVmaW5lIGJmYV9mY3NfdnBvcnRfZ2V0X3BvcnQodnBvcnQpIFwKKwkJCSgoc3RydWN0IGJmYV9mY3NfcG9ydF9zICAqKSgmdnBvcnQtPnBvcnQpKQorCisvKioKKyAqIGJmYSBmY3MgdnBvcnQgcHVibGljIGZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgYmZhX2Zjc192cG9ydF9jcmVhdGUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQlzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCwKKwkJCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcsCisJCQlzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cG9ydF9kcnYpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3Zwb3J0X3N0YXJ0KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3Zwb3J0X3N0b3Aoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwordm9pZCBiZmFfZmNzX3Zwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJc3RydWN0IGJmYV92cG9ydF9hdHRyX3MgKnZwb3J0X2F0dHIpOwordm9pZCBiZmFfZmNzX3Zwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCXN0cnVjdCBiZmFfdnBvcnRfc3RhdHNfcyAqdnBvcnRfc3RhdHMpOwordm9pZCBiZmFfZmNzX3Zwb3J0X2Nscl9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CitzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICpiZmFfZmNzX3Zwb3J0X2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCQl1MTYgdmZfaWQsIHd3bl90IHZwd3duKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19WUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19mY3MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19mY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmY1ZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2Zjcy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIG1lc3NhZ2VzIGRlZmluZSBmb3IgRkNTIE1vZHVsZQorICovCisjaWZuZGVmCV9fQkZBX0xPR19GQ1NfSF9fCisjZGVmaW5lCV9fQkZBX0xPR19GQ1NfSF9fCisjaW5jbHVkZSAgPGNzL2JmYV9sb2cuaD4KKyNkZWZpbmUgQkZBX0xPR19GQ1NfRkFCUklDX05PU1dJVENIIAlcCisJKCgodTMyKSBCRkFfTE9HX0ZDU19JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAxKQorI2RlZmluZSBCRkFfTE9HX0ZDU19GQUJSSUNfSVNPTEFURUQgCVwKKwkoKCh1MzIpIEJGQV9MT0dfRkNTX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDIpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19oYWwuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19oYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDEyYWVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2hhbC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBIQUwgTW9kdWxlICovCisjaWZuZGVmCV9fQkZBX0xPR19IQUxfSF9fCisjZGVmaW5lCV9fQkZBX0xPR19IQUxfSF9fCisjaW5jbHVkZSAgPGNzL2JmYV9sb2cuaD4KKyNkZWZpbmUgQkZBX0xPR19IQUxfQVNTRVJUIFwKKwkoKCh1MzIpIEJGQV9MT0dfSEFMX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDEpCisjZGVmaW5lIEJGQV9MT0dfSEFMX0hFQVJUQkVBVF9GQUlMVVJFIFwKKwkoKCh1MzIpIEJGQV9MT0dfSEFMX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDIpCisjZGVmaW5lIEJGQV9MT0dfSEFMX0ZDUElNX1BBUk1fSU5WQUxJRCBcCisJKCgodTMyKSBCRkFfTE9HX0hBTF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAzKQorI2RlZmluZSBCRkFfTE9HX0hBTF9TTV9BU1NFUlQgXAorCSgoKHUzMikgQkZBX0xPR19IQUxfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgNCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2xpbnV4LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfbGludXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTdjMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2xpbnV4LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIExJTlVYIE1vZHVsZSAqLworI2lmbmRlZglfX0JGQV9MT0dfTElOVVhfSF9fCisjZGVmaW5lCV9fQkZBX0xPR19MSU5VWF9IX18KKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0RFVklDRV9DTEFJTUVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDEpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfSEFTSF9JTklUX0ZBSUxFRCBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAyKQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX1NZU0ZTX0ZBSUxFRCBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAzKQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX01FTV9BTExPQ19GQUlMRUQgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgNCkKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9EUklWRVJfUkVHSVNUUkFUSU9OX0ZBSUxFRCBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA1KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0lUTklNX0ZSRUUgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgNikKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9JVE5JTV9PTkxJTkUgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgNykKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9JVE5JTV9PRkZMSU5FIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDgpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfU0NTSV9IT1NUX0ZSRUUgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgOSkKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9TQ1NJX0FCT1JUIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDEwKQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlRfQ09NUCBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAxMSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX3dkcnYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ193ZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5YTk1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ193ZHJ2LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogbWVzc2FnZXMgZGVmaW5lIGZvciBXRFJWIE1vZHVsZQorICovCisjaWZuZGVmCV9fQkZBX0xPR19XRFJWX0hfXworI2RlZmluZQlfX0JGQV9MT0dfV0RSVl9IX18KKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2RlZmluZSBCRkFfTE9HX1dEUlZfSU9DX0lOSVRfRVJST1IgCVwKKwkoKCh1MzIpIEJGQV9MT0dfV0RSVl9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAxKQorI2RlZmluZSBCRkFfTE9HX1dEUlZfSU9DX0lOVEVSTkFMX0VSUk9SIFwKKwkoKCh1MzIpIEJGQV9MT0dfV0RSVl9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAyKQorI2RlZmluZSBCRkFfTE9HX1dEUlZfSU9DX1NUQVJUX0VSUk9SIAlcCisJKCgodTMyKSBCRkFfTE9HX1dEUlZfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMykKKyNkZWZpbmUgQkZBX0xPR19XRFJWX0lPQ19TVE9QX0VSUk9SIAlcCisJKCgodTMyKSBCRkFfTE9HX1dEUlZfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgNCkKKyNkZWZpbmUgQkZBX0xPR19XRFJWX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMgXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDUpCisjZGVmaW5lIEJGQV9MT0dfV0RSVl9CQVNFX0FERFJFU1NfTUFQX0VSUk9SIFwKKwkoKCh1MzIpIEJGQV9MT0dfV0RSVl9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA2KQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvY3QuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9jdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OWQ2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvY3QuaApAQCAtMCwwICsxLDQ5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQ1RfSF9fCisjZGVmaW5lIF9fQ1RfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisjcHJhZ21hIHBhY2soMSkKKworc3RydWN0IGN0X2hkcl9zeworCXUzMglyZXZfaWQ6ODsJLyogUmV2aXNpb24gb2YgdGhlIENUICovCisJdTMyCWluX2lkOjI0OwkvKiBJbml0aWF0b3IgSWQgKi8KKwl1MzIJZ3NfdHlwZTo4OwkvKiBHZW5lcmljIHNlcnZpY2UgVHlwZSAqLworCXUzMglnc19zdWJfdHlwZTo4OwkvKiBHZW5lcmljIHNlcnZpY2Ugc3ViIHR5cGUgKi8KKwl1MzIJb3B0aW9uczo4OwkvKiBvcHRpb25zICovCisJdTMyCXJzdnJkOjg7CS8qIHJlc2VydmVkICovCisJdTMyCWNtZF9yc3BfY29kZToxNjsvKiBjdCBjb21tYW5kL3Jlc3BvbnNlIGNvZGUgKi8KKwl1MzIJbWF4X3Jlc19zaXplOjE2Oy8qIG1heGltdW0vcmVzaWR1YWwgc2l6ZSAqLworCXUzMglmcmFnX2lkOjg7CS8qIGZyYWdtZW50IElEICovCisJdTMyCXJlYXNvbl9jb2RlOjg7CS8qIHJlYXNvbiBjb2RlICovCisJdTMyCWV4cF9jb2RlOjg7CS8qIGV4cGxhbmF0aW9uIGNvZGUgKi8KKwl1MzIJdmVuZG9yX3VucTo4OwkvKiB2ZW5kb3IgdW5pcXVlICovCit9OworCisvKgorICogZGVmaW5lcyBmb3IgdGhlIFJldmlzaW9uCisgKi8KK2VudW0geworCUNUX0dTM19SRVZJU0lPTiA9IDB4MDEsCit9OworCisvKgorICogZGVmaW5lcyBmb3IgZ3NfdHlwZQorICovCitlbnVtIHsKKwlDVF9HU1RZUEVfS0VZU0VSVklDRQk9IDB4RjcsCisJQ1RfR1NUWVBFX0FMSUFTU0VSVklDRQk9IDB4RjgsCisJQ1RfR1NUWVBFX01HTVRTRVJWSUNFCT0gMHhGQSwKKwlDVF9HU1RZUEVfVElNRVNFUlZJQ0UJPSAweEZCLAorCUNUX0dTVFlQRV9ESVJTRVJWSUNFCT0gMHhGQywKK307CisKKy8qCisgKiBkZWZpbmVzIGZvciBnc19zdWJfdHlwZSBmb3IgZ3MgdHlwZSBkaXJlY3Rvcnkgc2VydmljZQorICovCitlbnVtIHsKKwlDVF9HU1NVQlRZUEVfTkFNRVNFUlZFUiA9IDB4MDIsCit9OworCisvKgorICogZGVmaW5lcyBmb3IgZ3Nfc3ViX3R5cGUgZm9yIGdzIHR5cGUgbWFuYWdlbWVudCBzZXJ2aWNlCisgKi8KK2VudW0geworCUNUX0dTU1VCVFlQRV9DRkdTRVJWRVIJPSAweDAxLAorCUNUX0dTU1VCVFlQRV9VTlpPTkVEX05TID0gMHgwMiwKKwlDVF9HU1NVQlRZUEVfWk9ORVNFUlZFUiA9IDB4MDMsCisJQ1RfR1NTVUJUWVBFX0xPQ0tTRVJWRVIgPSAweDA0LAorCUNUX0dTU1VCVFlQRV9IQkFfTUdNVFNFUlZFUiA9IDB4MTAsCS8qIGZvciBGRE1JICovCit9OworCisvKgorICogZGVmaW5lcyBmb3IgQ1QgcmVzcG9uc2UgY29kZSBmaWVsZAorICovCitlbnVtIHsKKwlDVF9SU1BfUkVKRUNUID0gMHg4MDAxLAorCUNUX1JTUF9BQ0NFUFQgPSAweDgwMDIsCit9OworCisvKgorICogZGVmaW50aW9ucyBmb3IgQ1QgcmVhc29uIGNvZGUKKyAqLworZW51bSB7CisJQ1RfUlNOX0lOVl9DTUQJCT0gMHgwMSwKKwlDVF9SU05fSU5WX1ZFUgkJPSAweDAyLAorCUNUX1JTTl9MT0dJQ19FUlIJPSAweDAzLAorCUNUX1JTTl9JTlZfU0laRQkJPSAweDA0LAorCUNUX1JTTl9MT0dJQ0FMX0JVU1kJPSAweDA1LAorCUNUX1JTTl9QUk9UT19FUlIJPSAweDA3LAorCUNUX1JTTl9VTkFCTEVfVE9fUEVSRgk9IDB4MDksCisJQ1RfUlNOX05PVF9TVVBQCQkJPSAweDBCLAorCUNUX1JTTl9TRVJWRVJfTk9UX0FWQkwgID0gMHgwRCwKKwlDVF9SU05fU0VTU0lPTl9DT1VMRF9OT1RfQkVfRVNUQkQgPSAweDBFLAorCUNUX1JTTl9WRU5ET1JfU1BFQ0lGSUMgID0gMHhGRiwKKworfTsKKworLyoKKyAqIGRlZmluaXRpb25zIGZvciBleHBsYW5hdGlvbnMgY29kZSBmb3IgTmFtZSBzZXJ2ZXIKKyAqLworZW51bSB7CisJQ1RfTlNfRVhQX05PQURESVRJT05BTAk9IDB4MDAsCisJQ1RfTlNfRVhQX0lEX05PVF9SRUcJPSAweDAxLAorCUNUX05TX0VYUF9QTl9OT1RfUkVHCT0gMHgwMiwKKwlDVF9OU19FWFBfTk5fTk9UX1JFRwk9IDB4MDMsCisJQ1RfTlNfRVhQX0NTX05PVF9SRUcJPSAweDA0LAorCUNUX05TX0VYUF9JUE5fTk9UX1JFRwk9IDB4MDUsCisJQ1RfTlNfRVhQX0lQQV9OT1RfUkVHCT0gMHgwNiwKKwlDVF9OU19FWFBfRlRfTk9UX1JFRwk9IDB4MDcsCisJQ1RfTlNfRVhQX1NQTl9OT1RfUkVHCT0gMHgwOCwKKwlDVF9OU19FWFBfU05OX05PVF9SRUcJPSAweDA5LAorCUNUX05TX0VYUF9QVF9OT1RfUkVHCT0gMHgwQSwKKwlDVF9OU19FWFBfSVBQX05PVF9SRUcJPSAweDBCLAorCUNUX05TX0VYUF9GUE5fTk9UX1JFRwk9IDB4MEMsCisJQ1RfTlNfRVhQX0hBX05PVF9SRUcJPSAweDBELAorCUNUX05TX0VYUF9GRF9OT1RfUkVHCT0gMHgwRSwKKwlDVF9OU19FWFBfRkZfTk9UX1JFRwk9IDB4MEYsCisJQ1RfTlNfRVhQX0FDQ0VTU0RFTklFRAk9IDB4MTAsCisJQ1RfTlNfRVhQX1VOQUNDRVBUQUJMRV9JRCA9IDB4MTEsCisJQ1RfTlNfRVhQX0RBVEFCQVNFRU1QVFkJCQk9IDB4MTIsCisJQ1RfTlNfRVhQX05PVF9SRUdfSU5fU0NPUEUgCQk9IDB4MTMsCisJQ1RfTlNfRVhQX0RPTV9JRF9OT1RfUFJFU0VOVCAJPSAweDE0LAorCUNUX05TX0VYUF9QT1JUX05VTV9OT1RfUFJFU0VOVCAgPSAweDE1LAorCUNUX05TX0VYUF9OT19ERVZJQ0VfQVRUQUNIRUQgCT0gMHgxNgorfTsKKworLyoKKyAqIGRlZmludGlvbnMgZm9yIHRoZSBleHBsYW5hdGlvbiBjb2RlIGZvciBhbGwgc2VydmVycworICovCitlbnVtIHsKKwlDVF9FWFBfQVVUSF9FWENFUFRJT04JCQk9IDB4RjEsCisJQ1RfRVhQX0RCX0ZVTEwJCQkJCT0gMHhGMiwKKwlDVF9FWFBfREJfRU1QVFkJCQkJCT0gMHhGMywKKwlDVF9FWFBfUFJPQ0VTU0lOR19SRVEJCQk9IDB4RjQsCisJQ1RfRVhQX1VOQUJMRV9UT19WRVJJRllfQ09OTgk9IDB4RjUsCisJQ1RfRVhQX0RFVklDRVNfTk9UX0lOX0NNTl9aT05FICA9IDB4RjYKK307CisKKy8qCisgKiBDb21tYW5kIGNvZGVzIGZvciBOYW1lIHNlcnZlcgorICovCitlbnVtIHsKKwlHU19HSURfUE4JPSAweDAxMjEsCS8qIEdldCBJZCBvbiBwb3J0IG5hbWUgKi8KKwlHU19HUE5fSUQJPSAweDAxMTIsCS8qIEdldCBwb3J0IG5hbWUgb24gSUQgKi8KKwlHU19HTk5fSUQJPSAweDAxMTMsCS8qIEdldCBub2RlIG5hbWUgb24gSUQgKi8KKwlHU19HSURfRlQJPSAweDAxNzEsCS8qIEdldCBJZCBvbiBGQzQgdHlwZSAqLworCUdTX0dTUE5fSUQJPSAweDAxMTgsCS8qIEdldCBzeW1ib2xpYyBQTiBvbiBJRCAqLworCUdTX1JGVF9JRAk9IDB4MDIxNywJLyogUmVnaXN0ZXIgZmM0dHlwZSBvbiBJRCAqLworCUdTX1JTUE5fSUQJPSAweDAyMTgsCS8qIFJlZ2lzdGVyIHN5bWJvbGljIFBOIG9uIElEICovCisJR1NfUlBOX0lECT0gMHgwMjEyLAkvKiBSZWdpc3RlciBwb3J0IG5hbWUgKi8KKwlHU19STk5fSUQJPSAweDAyMTMsCS8qIFJlZ2lzdGVyIG5vZGUgbmFtZSAqLworCUdTX1JDU19JRAk9IDB4MDIxNCwJLyogUmVnaXN0ZXIgY2xhc3Mgb2Ygc2VydmljZSAqLworCUdTX1JQVF9JRAk9IDB4MDIxQSwJLyogUmVnaXN0ZXIgcG9ydCB0eXBlICovCisJR1NfR0FfTlhUCT0gMHgwMTAwLAkvKiBHZXQgYWxsIG5leHQgKi8KKwlHU19SRkZfSUQJPSAweDAyMUYsCS8qIFJlZ2lzdGVyIEZDNCBGZWF0dXJlCQkqLworfTsKKworc3RydWN0IGZjZ3NfaWRfcmVxX3N7CisJdTMyCXJzdmQ6ODsKKwl1MzIJZGFwOjI0OwkvKiBwb3J0IGlkZW50aWZpZXIgKi8KK307CisjZGVmaW5lIGZjZ3NfZ3BuaWRfcmVxX3Qgc3RydWN0IGZjZ3NfaWRfcmVxX3MKKyNkZWZpbmUgZmNnc19nbm5pZF9yZXFfdCBzdHJ1Y3QgZmNnc19pZF9yZXFfcworI2RlZmluZSBmY2dzX2dzcG5pZF9yZXFfdCBzdHJ1Y3QgZmNnc19pZF9yZXFfcworCitzdHJ1Y3QgZmNnc19naWRwbl9yZXFfc3sKKwl3d25fdAlwb3J0X25hbWU7CS8qIHBvcnQgd3duICovCit9OworCitzdHJ1Y3QgZmNnc19naWRwbl9yZXNwX3N7CisJdTMyCXJzdmQ6ODsKKwl1MzIJZGFwOjI0OwkvKiBwb3J0IGlkZW50aWZpZXIgKi8KK307CisKKy8qKgorICogUkZUX0lECisgKi8KK3N0cnVjdCBmY2dzX3JmdGlkX3JlcV9zIHsKKwl1MzIJcnN2ZDo4OworCXUzMglkYXA6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIgKi8KKwl1MzIJZmM0X3R5cGVbOF07CS8qIGZjNCB0eXBlcyAqLworfTsKKworLyoqCisgKiBSRkZfSUQgOiBSZWdpc3RlciBGQzQgZmVhdHVyZXMuCisgKi8KKworI2RlZmluZSBGQ19HU19GQ1BfRkM0X0ZFQVRVUkVfSU5JVElBVE9SICAweDAyCisjZGVmaW5lIEZDX0dTX0ZDUF9GQzRfRkVBVFVSRV9UQVJHRVQJIDB4MDEKKworc3RydWN0IGZjZ3NfcmZmaWRfcmVxX3N7CisgICAgdTMyICAgIHJzdmQgICAgICAgICAgOjg7CisgICAgdTMyICAgIGRhcCAgICAgICAgCSAgOjI0OwkJLyogcG9ydCBpZGVudGlmaWVyCSovCisgICAgdTMyICAgIHJzdmQxICAgICAgICAgOjE2OworICAgIHUzMiAgICBmYzRmdHJfYml0cyAgIDo4OwkJLyogZmM0IGZlYXR1cmUgYml0cwkqLworICAgIHUzMiAgICBmYzRfdHlwZSAgICAgIDo4OwkJLyogY29ycmVzcG9uZGluZyBGQzQgVHlwZSAqLworfTsKKworLyoqCisgKiBHSURfRlQgUmVxdWVzdAorICovCitzdHJ1Y3QgZmNnc19naWRmdF9yZXFfc3sKKwl1OAlyZXNlcnZlZDsKKwl1OAlkb21haW5faWQ7CS8qIGRvbWFpbiwgMCAtIGFsbCBmYWJyaWMgKi8KKwl1OAlhcmVhX2lkOwkvKiBhcmVhLCAwIC0gd2hvbGUgZG9tYWluICovCisJdTgJZmM0X3R5cGU7CS8qIEZDX1RZUEVfRkNQIGZvciBTQ1NJIGRldmljZXMgKi8KK307CQkJCS8qIEdJRF9GVCBSZXF1ZXN0ICovCisKKy8qKgorICogR0lEX0ZUIFJlc3BvbnNlCisgKi8KK3N0cnVjdCBmY2dzX2dpZGZ0X3Jlc3BfcyB7CisJdTgJCWxhc3Q6MTsJLyogbGFzdCBwb3J0IGlkZW50aWZpZXIgZmxhZyAqLworCXU4CQlyZXNlcnZlZDo3OworCXUzMglwaWQ6MjQ7CS8qIHBvcnQgaWRlbnRpZmllciAqLworfTsJCQkJLyogR0lEX0ZUIFJlc3BvbnNlICovCisKKy8qKgorICogUlNQTl9JRAorICovCitzdHJ1Y3QgZmNnc19yc3BuaWRfcmVxX3N7CisJdTMyCXJzdmQ6ODsKKwl1MzIJZGFwOjI0OwkJLyogcG9ydCBpZGVudGlmaWVyICovCisJdTgJCXNwbl9sZW47CS8qIHN5bWJvbGljIHBvcnQgbmFtZSBsZW5ndGggKi8KKwl1OAkJc3BuWzI1Nl07CS8qIHN5bWJvbGljIHBvcnQgbmFtZSAqLworfTsKKworLyoqCisgKiBSUE5fSUQKKyAqLworc3RydWN0IGZjZ3NfcnBuaWRfcmVxX3N7CisJdTMyCXJzdmQ6ODsKKwl1MzIJcG9ydF9pZDoyNDsKKwl3d25fdAkJcG9ydF9uYW1lOworfTsKKworLyoqCisgKiBSTk5fSUQKKyAqLworc3RydWN0IGZjZ3Nfcm5uaWRfcmVxX3N7CisJdTMyCXJzdmQ6ODsKKwl1MzIJcG9ydF9pZDoyNDsKKwl3d25fdAkJbm9kZV9uYW1lOworfTsKKworLyoqCisgKiBSQ1NfSUQKKyAqLworc3RydWN0IGZjZ3NfcmNzaWRfcmVxX3N7CisJdTMyCXJzdmQ6ODsKKwl1MzIJcG9ydF9pZDoyNDsKKwl1MzIJY29zOworfTsKKworLyoqCisgKiBSUFRfSUQKKyAqLworc3RydWN0IGZjZ3NfcnB0aWRfcmVxX3N7CisJdTMyCXJzdmQ6ODsKKwl1MzIJcG9ydF9pZDoyNDsKKwl1MzIJcG9ydF90eXBlOjg7CisJdTMyCXJzdmQxOjI0OworfTsKKworLyoqCisgKiBHQV9OWFQgUmVxdWVzdAorICovCitzdHJ1Y3QgZmNnc19nYW54dF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworfTsKKworLyoqCisgKiBHQV9OWFQgUmVzcG9uc2UKKyAqLworc3RydWN0IGZjZ3NfZ2FueHRfcnNwX3N7CisJdTMyCXBvcnRfdHlwZTo4OwkvKiBQb3J0IFR5cGUgKi8KKwl1MzIJcG9ydF9pZDoyNDsJLyogUG9ydCBJZGVudGlmaWVyICovCisJd3duX3QJCXBvcnRfbmFtZTsJLyogUG9ydCBOYW1lICovCisJdTgJCXNwbl9sZW47CS8qIExlbmd0aCBvZiBTeW1ib2xpYyBQb3J0IE5hbWUgKi8KKwljaGFyCQlzcG5bMjU1XTsJLyogU3ltYm9saWMgUG9ydCBOYW1lICovCisJd3duX3QJCW5vZGVfbmFtZTsJLyogTm9kZSBOYW1lICovCisJdTgJCXNubl9sZW47CS8qIExlbmd0aCBvZiBTeW1ib2xpYyBOb2RlIE5hbWUgKi8KKwljaGFyCQlzbm5bMjU1XTsJLyogU3ltYm9saWMgTm9kZSBOYW1lICovCisJdTgJCWlwYVs4XTsJCS8qIEluaXRpYWwgUHJvY2VzcyBBc3NvY2lhdG9yICovCisJdTgJCWlwWzE2XTsJCS8qIElQIEFkZHJlc3MgKi8KKwl1MzIJY29zOwkJLyogQ2xhc3Mgb2YgU2VydmljZSAqLworCXUzMglmYzR0eXBlc1s4XTsJLyogRkMtNCBUWVBFcyAqLworCXd3bl90CQlmYWJyaWNfcG9ydF9uYW1lOworCQkJCQkvKiBGYWJyaWMgUG9ydCBOYW1lICovCisJdTMyCXJzdmQ6ODsJCS8qIFJlc2VydmVkICovCisJdTMyCWhhcmRfYWRkcjoyNDsJLyogSGFyZCBBZGRyZXNzICovCit9OworCisvKgorICogRmFicmljIENvbmZpZyBTZXJ2ZXIKKyAqLworCisvKgorICogQ29tbWFuZCBjb2RlcyBmb3IgRmFicmljIENvbmZpZ3VyYXRpb24gU2VydmVyCisgKi8KK2VudW0geworCUdTX0ZDX0dGTl9DTUQJPSAweDAxMTQsCS8qIEdTIEZDIEdldCBGYWJyaWMgTmFtZSAgKi8KKwlHU19GQ19HTUFMX0NNRAk9IDB4MDExNiwJLyogR1MgRkMgR01BTCAgKi8KKwlHU19GQ19UUkFDRV9DTUQJPSAweDA0MDAsCS8qIEdTIEZDIFRyYWNlIFJvdXRlICovCisJR1NfRkNfUElOR19DTUQJPSAweDA0MDEsCS8qIEdTIEZDIFBpbmcgKi8KK307CisKKy8qCisgKiBTb3VyY2Ugb3IgRGVzdGluYXRpb24gUG9ydCBUYWdzLgorICovCitlbnVtIHsKKwlHU19GVFJBQ0VfVEFHX05QT1JUX0lECQk9IDEsCisJR1NfRlRSQUNFX1RBR19OUE9SVF9OQU1FCT0gMiwKK307CisKKy8qCisqIFBvcnQgVmFsdWUgOiBDb3VsZCBiZSBhIFBvcnQgaWQgb3Igd3duCisgKi8KK3VuaW9uIGZjZ3NfcG9ydF92YWxfdXsKKwl1MzIJbnBvcnRfaWQ7CisJd3duX3QJCW5wb3J0X3d3bjsKK307CisKKyNkZWZpbmUgR1NfRlRSQUNFX01BWF9IT1BfQ09VTlQJMjAKKyNkZWZpbmUgR1NfRlRSQUNFX1JFVklTSU9OCTEKKworLyoKKyAqIEZ0cmFjZSBSZWxhdGVkIFN0cnVjdHVyZXMuCisgKi8KKworLyoKKyAqIFNUUiAoU3dpdGNoIFRyYWNlKSBSZWplY3QgUmVhc29uIENvZGVzLiBGcm9tIEZDLVNXLgorICovCitlbnVtIHsKKwlHU19GVFJBQ0VfU1RSX0NNRF9DT01QTEVURURfU1VDQwk9IDAsCisJR1NfRlRSQUNFX1NUUl9DTURfTk9UX1NVUFBfSU5fTkVYVF9TV0lUQ0gsCisJR1NfRlRSQUNFX1NUUl9OT19SRVNQX0ZST01fTkVYVF9TV0lUQ0gsCisJR1NfRlRSQUNFX1NUUl9NQVhfSE9QX0NOVF9SRUFDSEVELAorCUdTX0ZUUkFDRV9TVFJfU1JDX1BPUlRfTk9UX0ZPVU5ELAorCUdTX0ZUUkFDRV9TVFJfRFNUX1BPUlRfTk9UX0ZPVU5ELAorCUdTX0ZUUkFDRV9TVFJfREVWSUNFU19OT1RfSU5fQ09NTU9OX1pPTkUsCisJR1NfRlRSQUNFX1NUUl9OT19ST1VURV9CV19QT1JUUywKKwlHU19GVFJBQ0VfU1RSX05PX0FERExfRVhQTE4sCisJR1NfRlRSQUNFX1NUUl9GQUJSSUNfQlVTWSwKKwlHU19GVFJBQ0VfU1RSX0ZBQlJJQ19CVUlMRF9JTl9QUk9HUkVTUywKKwlHU19GVFJBQ0VfU1RSX1ZFTkRPUl9TUEVDSUZJQ19FUlJfU1RBUlQgPSAweGYwLAorCUdTX0ZUUkFDRV9TVFJfVkVORE9SX1NQRUNJRklDX0VSUl9FTkQgPSAweGZmLAorfTsKKworLyoKKyAqIEZ0cmFjZSBSZXF1ZXN0CisgKi8KK3N0cnVjdCBmY2dzX2Z0cmFjZV9yZXFfc3sKKwl1MzIJcmV2aXNpb247CisJdTE2CXNyY19wb3J0X3RhZzsJLyogU291cmNlIFBvcnQgdGFnICovCisJdTE2CXNyY19wb3J0X2xlbjsJLyogU291cmNlIFBvcnQgbGVuICovCisJdW5pb24gZmNnc19wb3J0X3ZhbF91IHNyY19wb3J0X3ZhbDsJLyogU291cmNlIFBvcnQgdmFsdWUgKi8KKwl1MTYJZHN0X3BvcnRfdGFnOwkvKiBEZXN0aW5hdGlvbiBQb3J0IHRhZyAqLworCXUxNglkc3RfcG9ydF9sZW47CS8qIERlc3RpbmF0aW9uIFBvcnQgbGVuICovCisJdW5pb24gZmNnc19wb3J0X3ZhbF91IGRzdF9wb3J0X3ZhbDsJLyogRGVzdGluYXRpb24gUG9ydCB2YWx1ZSAqLworCXUzMgl0b2tlbjsKKwl1OAkJdmVuZG9yX2lkWzhdOwkvKiBUMTAgVmVuZG9yIElkZW50aWZpZXIgKi8KKwl1OAkJdmVuZG9yX2luZm9bOF07CS8qIFZlbmRvciBzcGVjaWZpYyBJbmZvICovCisJdTMyCW1heF9ob3BfY250OwkvKiBNYXggSG9wIENvdW50ICovCit9OworCisvKgorICogUGF0aCBpbmZvIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgZmNnc19mdHJhY2VfcGF0aF9pbmZvX3N7CisJd3duX3QJCXN3aXRjaF9uYW1lOwkJLyogU3dpdGNoIFdXTiAqLworCXUzMglkb21haW5faWQ7CisJd3duX3QJCWluZ3Jlc3NfcG9ydF9uYW1lOwkvKiBJbmdyZXNzIHBvcnRzIHd3biAqLworCXUzMglpbmdyZXNzX3BoeXNfcG9ydF9udW07CS8qIEluZ3Jlc3MgcG9ydHMgcGh5c2ljYWwgcG9ydAorCQkJCQkJICogbnVtYmVyCisJCQkJCQkgKi8KKwl3d25fdAkJZWdyZXNzX3BvcnRfbmFtZTsJLyogSW5ncmVzcyBwb3J0cyB3d24gKi8KKwl1MzIJZWdyZXNzX3BoeXNfcG9ydF9udW07CS8qIEluZ3Jlc3MgcG9ydHMgcGh5c2ljYWwgcG9ydAorCQkJCQkJICogbnVtYmVyCisJCQkJCQkgKi8KK307CisKKy8qCisgKiBGdHJhY2UgQWNjIFJlc3BvbnNlCisgKi8KK3N0cnVjdCBmY2dzX2Z0cmFjZV9yZXNwX3N7CisJdTMyCXJldmlzaW9uOworCXUzMgl0b2tlbjsKKwl1OAkJdmVuZG9yX2lkWzhdOwkJLyogVDEwIFZlbmRvciBJZGVudGlmaWVyICovCisJdTgJCXZlbmRvcl9pbmZvWzhdOwkJLyogVmVuZG9yIHNwZWNpZmljIEluZm8gKi8KKwl1MzIJc3RyX3Jlal9yZWFzb25fY29kZTsJLyogU1RSIFJlamVjdCBSZWFzb24gQ29kZSAqLworCXUzMgludW1fcGF0aF9pbmZvX2VudHJpZXM7CS8qIE5vLiBvZiBwYXRoIGluZm8gZW50cmllcyAqLworCS8qCisJICogcGF0aCBpbmZvIGVudHJ5L2VudHJpZXMuCisJICovCisJc3RydWN0IGZjZ3NfZnRyYWNlX3BhdGhfaW5mb19zIHBhdGhfaW5mb1sxXTsKKworfTsKKworLyoKKyogRmFicmljIENvbmZpZyBTZXJ2ZXIgOiBGQ1BpbmcKKyAqLworCisvKgorICogRkMgUGluZyBSZXF1ZXN0CisgKi8KK3N0cnVjdCBmY2dzX2ZjcGluZ19yZXFfc3sKKwl1MzIJcmV2aXNpb247CisJdTE2CXBvcnRfdGFnOworCXUxNglwb3J0X2xlbjsJLyogUG9ydCBsZW4gKi8KKwl1bmlvbiBmY2dzX3BvcnRfdmFsX3UgcG9ydF92YWw7CS8qIFBvcnQgdmFsdWUgKi8KKwl1MzIJdG9rZW47Cit9OworCisvKgorICogRkMgUGluZyBSZXNwb25zZQorICovCitzdHJ1Y3QgZmNnc19mY3BpbmdfcmVzcF9zeworCXUzMgl0b2tlbjsKK307CisKKy8qCisgKiBDb21tYW5kIGNvZGVzIGZvciB6b25lIHNlcnZlciBxdWVyeS4KKyAqLworZW51bSB7CisJWlNfR1pNRSA9IDB4MDEyNCwJLyogR2V0IHpvbmUgbWVtYmVyIGV4dGVuZGVkICovCit9OworCisvKgorICogWlMgR1pNRSByZXF1ZXN0CisgKi8KKyNkZWZpbmUgWlNfR1pNRV9aTkFNRUxFTgkzMgorc3RydWN0IHpzX2d6bWVfcmVxX3N7CisJdTgJem5hbWVsZW47CisJdTgJcnN2ZFszXTsKKwl1OAl6bmFtZVtaU19HWk1FX1pOQU1FTEVOXTsKK307CisKK2VudW0genNfbWJyX3R5cGV7CisJWlNfTUJSX1RZUEVfUFdXTgk9IDEsCisJWlNfTUJSX1RZUEVfRE9NUE9SVAk9IDIsCisJWlNfTUJSX1RZUEVfUE9SVElECT0gMywKKwlaU19NQlJfVFlQRV9OV1dOCT0gNCwKK307CisKK3N0cnVjdCB6c19tYnJfd3duX3N7CisJdTgJbWJyX3R5cGU7CisJdTgJcnN2ZFszXTsKKwl3d25fdAl3d247Cit9OworCitzdHJ1Y3QgenNfcXVlcnlfcmVzcF9zeworCXUzMglubWJyczsJLyogIG51bWJlciBvZiB6b25lIG1lbWJlcnMgKi8KKwlzdHJ1Y3QgenNfbWJyX3d3bl9zCW1iclsxXTsKK307CisKKy8qCisgKiBHTUFMIENvbW1hbmQgKCBHZXQgKCBpbnRlcmNvbm5lY3QgRWxlbWVudCkgTWFuYWdlbWVudCBBZGRyZXNzIExpc3QpCisgKiBUbyByZXRyaWV2ZSB0aGUgSVAgQWRkcmVzcyBvZiBhIFN3aXRjaC4KKyAqLworCisjZGVmaW5lIENUX0dNQUxfUkVTUF9QUkVGSVhfVEVMTkVUCSAidGVsbmV0Oi8vIgorI2RlZmluZSBDVF9HTUFMX1JFU1BfUFJFRklYX0hUVFAJICJodHRwOi8vIgorCisvKiAgR01BTC9HRk4gcmVxdWVzdCAqLworc3RydWN0IGZjZ3NfcmVxX3MgeworCXd3bl90ICAgIHd3bjsgCS8qIFBXV04vTldXTiAqLworfTsKKworI2RlZmluZSBmY2dzX2dtYWxfcmVxX3Qgc3RydWN0IGZjZ3NfcmVxX3MKKyNkZWZpbmUgZmNnc19nZm5fcmVxX3Qgc3RydWN0IGZjZ3NfcmVxX3MKKworLyogQWNjZXB0IFJlc3BvbnNlIHRvIEdNQUwgKi8KK3N0cnVjdCBmY2dzX2dtYWxfcmVzcF9zIHsKKwl1MzIgCQltc19sZW47ICAgLyogTnVtIG9mIGVudHJpZXMgKi8KKwl1OCAgICAgCW1zX21hWzI1Nl07Cit9OworCitzdHJ1Y3QgZmNfZ21hbF9lbnRyeV9zIHsKKwl1OCAgbGVuOworCXU4ICBwcmVmaXhbN107IC8qIGxpa2UgImh0dHA6Ly8iICovCisJdTggIGlwX2FkZHJbMjQ4XTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTM5YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjLmgKQEAgLTAsMCArMSwxMTA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19GQ19IX18KKyNkZWZpbmUgX19GQ19IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCisvKgorICogRmlicmUgQ2hhbm5lbCBIZWFkZXIgU3RydWN0dXJlIChGQ0hTKSBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCBmY2hzX3MgeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICByb3V0aW5nOjQ7CS8qIHJvdXRpbmcgYml0cyAqLworCXUzMiAgICAgICAgY2F0X2luZm86NDsJLyogY2F0ZWdvcnkgaW5mbyAqLworI2Vsc2UKKwl1MzIgICAgICAgIGNhdF9pbmZvOjQ7CS8qIGNhdGVnb3J5IGluZm8gKi8KKwl1MzIgICAgICAgIHJvdXRpbmc6NDsJLyogcm91dGluZyBiaXRzICovCisjZW5kaWYKKwl1MzIgICAgICAgIGRfaWQ6MjQ7CS8qIGRlc3RpbmF0aW9uIGlkZW50aWZpZXIgKi8KKworCXUzMiAgICAgICAgY3NfY3RsOjg7CS8qIGNsYXNzIHNwZWNpZmljIGNvbnRyb2wgKi8KKwl1MzIgICAgICAgIHNfaWQ6MjQ7CS8qIHNvdXJjZSBpZGVudGlmaWVyICovCisKKwl1MzIgICAgICAgIHR5cGU6ODsJCS8qIGRhdGEgc3RydWN0dXJlIHR5cGUgKi8KKwl1MzIgICAgICAgIGZfY3RsOjI0OwkvKiBpbml0aWFsIGZyYW1lIGNvbnRyb2wgKi8KKworCXU4ICAgICAgICAgc2VxX2lkOwkJLyogc2VxdWVuY2UgaWRlbnRpZmllciAqLworCXU4ICAgICAgICAgZGZfY3RsOwkJLyogZGF0YSBmaWVsZCBjb250cm9sICovCisJdTE2ICAgICAgICBzZXFfY250OwkvKiBzZXF1ZW5jZSBjb3VudCAqLworCisJdTE2ICAgICAgICBveF9pZDsJCS8qIG9yaWdpbmF0b3IgZXhjaGFuZ2UgSUQgKi8KKwl1MTYgICAgICAgIHJ4X2lkOwkJLyogcmVzcG9uZGVyIGV4Y2hhbmdlIElEICovCisKKwl1MzIgICAgICAgIHJvOwkJLyogcmVsYXRpdmUgb2Zmc2V0ICovCit9OworLyoKKyAqIEZpYnJlIENoYW5uZWwgQkJfRSBIZWFkZXIgU3RydWN0dXJlCisgKi8KK3N0cnVjdCBmY2JiZWhzX3MgeworCXUxNgl2ZXJfcnN2ZDsKKwl1MzIJcnN2ZFsyXTsKKwl1MzIJcnN2ZF9fc29mOworfTsKKworI2RlZmluZSBGQ19TRVFfSURfTUFYCQkyNTYKKworLyoKKyAqIHJvdXRpbmcgYml0IGRlZmluaXRpb25zCisgKi8KK2VudW0geworCUZDX1JUR19GQzRfREVWX0RBVEEJPSAweDAsCS8qIEZDLTQgRGV2aWNlIERhdGEgKi8KKwlGQ19SVEdfRVhUX0xJTksJCT0gMHgyLAkvKiBFeHRlbmRlZCBMaW5rIERhdGEgKi8KKwlGQ19SVEdfRkM0X0xJTktfREFUQQk9IDB4MywJLyogRkMtNCBMaW5rIERhdGEgKi8KKwlGQ19SVEdfVklERU9fREFUQQk9IDB4NCwJLyogVmlkZW8gRGF0YSAqLworCUZDX1JUR19FWFRfSERSCQk9IDB4NSwJLyogVkZULCBJRlIgb3IgRW5jYXBzdWxlZCAqLworCUZDX1JUR19CQVNJQ19MSU5LCT0gMHg4LAkvKiBCYXNpYyBMaW5rIGRhdGEgKi8KKwlGQ19SVEdfTElOS19DVFJMCT0gMHhDLAkvKiBMaW5rIENvbnRyb2wgKi8KK307CisKKy8qCisgKiBpbmZvcm1hdGlvbiBjYXRlZ29yeSBmb3IgZXh0ZW5kZWQgbGluayBkYXRhIGFuZCBGQy00IExpbmsgRGF0YQorICovCitlbnVtIHsKKwlGQ19DQVRfTERfUkVRVUVTVAk9IDB4MiwJLyogUmVxdWVzdCAqLworCUZDX0NBVF9MRF9SRVBMWQkJPSAweDMsCS8qIFJlcGx5ICovCisJRkNfQ0FUX0xEX0RJQUcJCT0gMHhGLAkvKiBmb3IgRElBRyB1c2Ugb25seSAqLworfTsKKworLyoKKyAqIGluZm9ybWF0aW9uIGNhdGVnb3J5IGZvciBleHRlbmRlZCBoZWFkZXJzIChWRlQsIElGUiBvciBlbmNhcHN1bGF0aW9uKQorICovCitlbnVtIHsKKwlGQ19DQVRfVkZUX0hEUiA9IDB4MCwJLyogVmlydHVhbCBmYWJyaWMgdGFnZ2luZyBoZWFkZXIgKi8KKwlGQ19DQVRfSUZSX0hEUiA9IDB4MSwJLyogSW50ZXItRmFicmljIHJvdXRpbmcgaGVhZGVyICovCisJRkNfQ0FUX0VOQ19IRFIgPSAweDIsCS8qIEVuY2Fwc3VsYXRpb24gaGVhZGVyICovCit9OworCisvKgorICogaW5mb3JtYXRpb24gY2F0ZWdvcnkgZm9yIEZDLTQgZGV2aWNlIGRhdGEKKyAqLworZW51bSB7CisJRkNfQ0FUX1VOQ0FURUdfSU5GTwk9IDB4MCwJLyogVW5jYXRlZ29yaXplZCBpbmZvcm1hdGlvbiAqLworCUZDX0NBVF9TT0xJQ0lUX0RBVEEJPSAweDEsCS8qIFNvbGljaXRlZCBEYXRhICovCisJRkNfQ0FUX1VOU09MSUNJVF9DVFJMCT0gMHgyLAkvKiBVbnNvbGljaXRlZCBDb250cm9sICovCisJRkNfQ0FUX1NPTElDSVRfQ1RSTAk9IDB4MywJLyogU29saWNpdGVkIENvbnRyb2wgKi8KKwlGQ19DQVRfVU5TT0xJQ0lUX0RBVEEJPSAweDQsCS8qIFVuc29saWNpdGVkIERhdGEgKi8KKwlGQ19DQVRfREFUQV9ERVNDCT0gMHg1LAkvKiBEYXRhIERlc2NyaXB0b3IgKi8KKwlGQ19DQVRfVU5TT0xJQ0lUX0NNRAk9IDB4NiwJLyogVW5zb2xpY2l0ZWQgQ29tbWFuZCAqLworCUZDX0NBVF9DTURfU1RBVFVTCT0gMHg3LAkvKiBDb21tYW5kIFN0YXR1cyAqLworfTsKKworLyoKKyAqIGluZm9ybWF0aW9uIGNhdGVnb3J5IGZvciBMaW5rIENvbnRyb2wKKyAqLworZW51bSB7CisJRkNfQ0FUX0FDS18xCQk9IDB4MDAsCisJRkNfQ0FUX0FDS18wX04JCT0gMHgwMSwKKwlGQ19DQVRfUF9SSlQJCT0gMHgwMiwKKwlGQ19DQVRfRl9SSlQJCT0gMHgwMywKKwlGQ19DQVRfUF9CU1kJCT0gMHgwNCwKKwlGQ19DQVRfRl9CU1lfREFUQQk9IDB4MDUsCisJRkNfQ0FUX0ZfQlNZX0xJTktfQ1RMCT0gMHgwNiwKKwlGQ19DQVRfRl9MQ1IJCT0gMHgwNywKKwlGQ19DQVRfTlRZCQk9IDB4MDgsCisJRkNfQ0FUX0VORAkJPSAweDA5LAorfTsKKworLyoKKyAqIFR5cGUgRmllbGQgRGVmaW5pdGlvbnMuIEZDLVBIIFNlY3Rpb24gMTguNSBwZy4gMTY1CisgKi8KK2VudW0geworCUZDX1RZUEVfQkxTCQk9IDB4MCwJLyogQmFzaWMgTGluayBTZXJ2aWNlICovCisJRkNfVFlQRV9FTFMJCT0gMHgxLAkvKiBFeHRlbmRlZCBMaW5rIFNlcnZpY2UgKi8KKwlGQ19UWVBFX0lQCQk9IDB4NSwJLyogSVAgKi8KKwlGQ19UWVBFX0ZDUAkJPSAweDgsCS8qIFNDU0ktRkNQICovCisJRkNfVFlQRV9HUFAJCT0gMHg5LAkvKiBTQ1NJX0dQUCAqLworCUZDX1RZUEVfU0VSVklDRVMJPSAweDIwLAkvKiBGaWJyZSBDaGFubmVsIFNlcnZpY2VzICovCisJRkNfVFlQRV9GQ19GU1MJCT0gMHgyMiwJLyogRmFicmljIFN3aXRjaCBTZXJ2aWNlcyAqLworCUZDX1RZUEVfRkNfQUwJCT0gMHgyMywJLyogRkMtQUwgKi8KKwlGQ19UWVBFX0ZDX1NOTVAJCT0gMHgyNCwJLyogRkMtU05NUCAqLworCUZDX1RZUEVfTUFYCQk9IDI1NiwJLyogMjU2IEZDLTQgdHlwZXMgKi8KK307CisKK3N0cnVjdCBmY19mYzR0eXBlc19zeworCXU4ICAgICAgICAgYml0c1tGQ19UWVBFX01BWCAvIDhdOworfTsKKworLyoKKyAqIEZyYW1lIENvbnRyb2wgRGVmaW5pdGlvbnMuIEZDLVBIIFRhYmxlLTQ1LiBwZy4gMTY4CisgKi8KK2VudW0geworCUZDVExfRUNfT1JJRyA9IDB4MDAwMDAwLAkvKiBleGNoYW5nZSBvcmlnaW5hdG9yICovCisJRkNUTF9FQ19SRVNQID0gMHg4MDAwMDAsCS8qIGV4Y2hhbmdlIHJlc3BvbmRlciAqLworCUZDVExfU0VRX0lOSSA9IDB4MDAwMDAwLAkvKiBzZXF1ZW5jZSBpbml0aWF0b3IgKi8KKwlGQ1RMX1NFUV9SRUMgPSAweDQwMDAwMCwJLyogc2VxdWVuY2UgcmVjaXBpZW50ICovCisJRkNUTF9GU19FWENIID0gMHgyMDAwMDAsCS8qIGZpcnN0IHNlcXVlbmNlIG9mIHhjaGcgKi8KKwlGQ1RMX0xTX0VYQ0ggPSAweDEwMDAwMCwJLyogbGFzdCBzZXF1ZW5jZSBvZiB4Y2hnICovCisJRkNUTF9FTkRfU0VRID0gMHgwODAwMDAsCS8qIGxhc3QgZnJhbWUgb2Ygc2VxdWVuY2UgKi8KKwlGQ1RMX1NJX1hGRVIgPSAweDAxMDAwMCwJLyogc2VxIGluaXRpYXRpdmUgdHJhbnNmZXIgKi8KKwlGQ1RMX1JPX1BSRVNFTlQgPSAweDAwMDAwOCwJLyogcmVsYXRpdmUgb2Zmc2V0IHByZXNlbnQgKi8KKwlGQ1RMX0ZJTExCWVRFX01BU0sgPSAweDAwMDAwMwkvKiAsIGZpbGwgYnl0ZSBtYXNrICovCit9OworCisvKgorICogRmFicmljIFdlbGwgS25vd24gQWRkcmVzc2VzCisgKi8KK2VudW0geworCUZDX01JTl9XRUxMX0tOT1dOX0FERFIJCT0gMHhGRkZGRjAsCisJRkNfRE9NQUlOX0NPTlRST0xMRVJfTUFTSyAJPSAweEZGRkMwMCwKKwlGQ19BTElBU19TRVJWRVIJCQk9IDB4RkZGRkY4LAorCUZDX01HTVRfU0VSVkVSCQkJPSAweEZGRkZGQSwKKwlGQ19USU1FX1NFUlZFUgkJCT0gMHhGRkZGRkIsCisJRkNfTkFNRV9TRVJWRVIJCQk9IDB4RkZGRkZDLAorCUZDX0ZBQlJJQ19DT05UUk9MTEVSCQk9IDB4RkZGRkZELAorCUZDX0ZBQlJJQ19QT1JUCQkJPSAweEZGRkZGRSwKKwlGQ19CUk9BRENBU1RfU0VSVkVSCQk9IDB4RkZGRkZGCit9OworCisvKgorICogZG9tYWluL2FyZWEvcG9ydCBkZWZpbmVzCisgKi8KKyNkZWZpbmUgRkNfRE9NQUlOX01BU0sgIDB4RkYwMDAwCisjZGVmaW5lIEZDX0RPTUFJTl9TSElGVCAxNgorI2RlZmluZSBGQ19BUkVBX01BU0sgICAgMHgwMEZGMDAKKyNkZWZpbmUgRkNfQVJFQV9TSElGVCAgIDgKKyNkZWZpbmUgRkNfUE9SVF9NQVNLICAgIDB4MDAwMEZGCisjZGVmaW5lIEZDX1BPUlRfU0hJRlQgICAwCisKKyNkZWZpbmUgRkNfR0VUX0RPTUFJTihwKQkoKChwKSAmIEZDX0RPTUFJTl9NQVNLKSA+PiBGQ19ET01BSU5fU0hJRlQpCisjZGVmaW5lIEZDX0dFVF9BUkVBKHApCQkoKChwKSAmIEZDX0FSRUFfTUFTSykgPj4gRkNfQVJFQV9TSElGVCkKKyNkZWZpbmUgRkNfR0VUX1BPUlQocCkJCSgoKHApICYgRkNfUE9SVF9NQVNLKSA+PiBGQ19QT1JUX1NISUZUKQorCisjZGVmaW5lIEZDX0RPTUFJTl9DVFJMUihwKQkoRkNfRE9NQUlOX0NPTlRST0xMRVJfTUFTSyB8IChGQ19HRVRfRE9NQUlOKHApKSkKKworZW51bSB7CisJRkNfUlhJRF9BTlkgPSAweEZGRkZVLAorfTsKKworLyoKKyAqIGdlbmVyaWMgRUxTIGNvbW1hbmQKKyAqLworc3RydWN0IGZjX2Vsc19jbWRfc3sKKwl1MzIgICAgICAgIGVsc19jb2RlOjg7CS8qIEVMUyBDb21tYW5kIENvZGUgKi8KKwl1MzIgICAgICAgIHJlc2VydmVkOjI0OworfTsKKworLyoKKyAqIEVMUyBDb21tYW5kIENvZGVzLiBGQy1QSCBUYWJsZS03NS4gcGcuIDIyMworICovCitlbnVtIHsKKwlGQ19FTFNfTFNfUkpUID0gMHgxLAkvKiBMaW5rIFNlcnZpY2UgUmVqZWN0LiAqLworCUZDX0VMU19BQ0MgPSAweDAyLAkvKiBBY2NlcHQgKi8KKwlGQ19FTFNfUExPR0kgPSAweDAzLAkvKiBOX1BvcnQgTG9naW4uICovCisJRkNfRUxTX0ZMT0dJID0gMHgwNCwJLyogRl9Qb3J0IExvZ2luLiAqLworCUZDX0VMU19MT0dPID0gMHgwNSwJLyogTG9nb3V0LiAqLworCUZDX0VMU19BQlRYID0gMHgwNiwJLyogQWJvcnQgRXhjaGFuZ2UgKi8KKwlGQ19FTFNfUkVTID0gMHgwOCwJLyogUmVhZCBFeGNoYW5nZSBzdGF0dXMgKi8KKwlGQ19FTFNfUlNTID0gMHgwOSwJLyogUmVhZCBzZXF1ZW5jZSBzdGF0dXMgYmxvY2sgKi8KKwlGQ19FTFNfUlNJID0gMHgwQSwJLyogUmVxdWVzdCBTZXF1ZW5jZSBJbml0aWF0aXZlICovCisJRkNfRUxTX0VTVEMgPSAweDBDLAkvKiBFc3RpbWF0ZSBDcmVkaXQuICovCisJRkNfRUxTX1JUViA9IDB4MEUsCS8qIFJlYWQgVGltZW91dCBWYWx1ZS4gKi8KKwlGQ19FTFNfUkxTID0gMHgwRiwJLyogUmVhZCBMaW5rIFN0YXR1cy4gKi8KKwlGQ19FTFNfRUNITyA9IDB4MTAsCS8qIEVjaG8gKi8KKwlGQ19FTFNfVEVTVCA9IDB4MTEsCS8qIFRlc3QgKi8KKwlGQ19FTFNfUlJRID0gMHgxMiwJLyogUmVpbnN0YXRlIFJlY292ZXJ5IFF1YWxpZmllci4gKi8KKwlGQ19FTFNfUkVDID0gMHgxMywJLyogQWRkIHRoaXMgZm9yIFRBUEUgc3VwcG9ydCBpbiBGQ1IgKi8KKwlGQ19FTFNfUFJMSSA9IDB4MjAsCS8qIFByb2Nlc3MgTG9naW4gKi8KKwlGQ19FTFNfUFJMTyA9IDB4MjEsCS8qIFByb2Nlc3MgTG9nb3V0LiAqLworCUZDX0VMU19TQ04gPSAweDIyLAkvKiBTdGF0ZSBDaGFuZ2UgTm90aWZpY2F0aW9uLiAqLworCUZDX0VMU19UUFJMTyA9IDB4MjQsCS8qIFRoaXJkIFBhcnR5IFByb2Nlc3MgTG9nb3V0LiAqLworCUZDX0VMU19QRElTQyA9IDB4NTAsCS8qIERpc2NvdmVyIE5fUG9ydCBQYXJhbWV0ZXJzLiAqLworCUZDX0VMU19GRElTQyA9IDB4NTEsCS8qIERpc2NvdmVyIEZfUG9ydCBQYXJhbWV0ZXJzLiAqLworCUZDX0VMU19BRElTQyA9IDB4NTIsCS8qIERpc2NvdmVyIEFkZHJlc3MuICovCisJRkNfRUxTX0ZBTiA9IDB4NjAsCS8qIEZhYnJpYyBBZGRyZXNzIE5vdGlmaWNhdGlvbiAqLworCUZDX0VMU19SU0NOID0gMHg2MSwJLyogUmVnIFN0YXRlIENoYW5nZSBOb3RpZmljYXRpb24gKi8KKwlGQ19FTFNfU0NSID0gMHg2MiwJLyogU3RhdGUgQ2hhbmdlIFJlZ2lzdHJhdGlvbi4gKi8KKwlGQ19FTFNfUlRJTiA9IDB4NzcsCS8qIE1hbmdlbWVudCBzZXJ2ZXIgcmVxdWVzdCAqLworCUZDX0VMU19STklEID0gMHg3OCwJLyogTWFuZ2VtZW50IHNlcnZlciByZXF1ZXN0ICovCisJRkNfRUxTX1JMSVIgPSAweDc5LAkvKiBSZWdpc3RlcmVkIExpbmsgSW5jaWRlbnQgUmVjb3JkICovCisKKwlGQ19FTFNfUlBTQyA9IDB4N0QsCS8qIFJlcG9ydCBQb3J0IFNwZWVkIENhcGFiaWxpdGllcyAqLworCUZDX0VMU19RU0EgPSAweDdFLAkvKiBRdWVyeSBTZWN1cml0eSBBdHRyaWJ1dGVzLiBSZWYgRkMtU1AgKi8KKwlGQ19FTFNfRTJFX0xCRUFDT04gPSAweDgxLAorCQkJCS8qIEVuZC10by1FbmQgTGluayBCZWFjb24gKi8KKwlGQ19FTFNfQVVUSCA9IDB4OTAsCS8qIEF1dGhlbnRpY2F0aW9uLiBSZWYgRkMtU1AgKi8KKwlGQ19FTFNfUkZDTiA9IDB4OTcsCS8qIFJlcXVlc3QgRmFicmljIENoYW5nZSBOb3RpZmljYXRpb24uIFJlZgorCQkJCSAqRkMtU1AgKi8KKworfTsKKworLyoKKyAqICBWZXJzaW9uIG51bWJlcnMgZm9yIEZDLVBIIHN0YW5kYXJkcywKKyAqICB1c2VkIGluIGxvZ2luIHRvIGluZGljYXRlIHdoYXQgcG9ydAorICogIHN1cHBvcnRzLiBTZWUgRkMtUEgtWCB0YWJsZSAxNTguCisgKi8KK2VudW0geworCUZDX1BIX1ZFUl80XzMgPSAweDA5LAorCUZDX1BIX1ZFUl9QSF8zID0gMHgyMCwKK307CisKKy8qCisgKiBQRFUgc2l6ZSBkZWZpbmVzCisgKi8KK2VudW0geworCUZDX01JTl9QRFVTWiA9IDUxMiwKKwlGQ19NQVhfUERVU1ogPSAyMTEyLAorfTsKKworLyoKKyAqIE5fUG9ydCBQTE9HSSBDb21tb24gU2VydmljZSBQYXJhbWV0ZXJzLgorICogRkMtUEgteC4gRmlndXJlLTc2LiBwZy4gMzA4LgorICovCitzdHJ1Y3QgZmNfcGxvZ2lfY3NwX3N7CisJdTggICAgICAgICB2ZXJoaTsJLyogRkMtUEggaGlnaCB2ZXJzaW9uICovCisJdTggICAgICAgICB2ZXJsbzsJLyogRkMtUEggbG93IHZlcnNpb24gKi8KKwl1MTYgICAgICAgIGJiY3JlZDsJLyogQkJfQ3JlZGl0ICovCisKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgY2lybzoxLAkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgUk8gKi8KKwkJCXJybzoxLAkJLyogcmFuZG9tIHJlbGF0aXZlIG9mZnNldCAqLworCQkJbnBpdl9zdXBwOjEsCS8qIE5QSVYgc3VwcG9ydGVkICovCisJCQlwb3J0X3R5cGU6MSwJLyogTl9Qb3J0L0ZfcG9ydCAqLworCQkJYWx0YmJjcmVkOjEsCS8qIGFsdGVybmF0ZSBCQl9DcmVkaXQgKi8KKwkJCXJlc29sdXRpb246MSwJLyogbXMvbnMgRURfVE9WIHJlc29sdXRpb24gKi8KKwkJCXZ2bF9pbmZvOjEsCS8qIFZWTCBJbmZvIGluY2x1ZGVkICovCisJCQlyZXNlcnZlZDE6MTsKKworCXU4ICAgICAgICAgaGdfc3VwcDoxLAorCQkJcXVlcnlfZGJjOjEsCisJCQlzZWN1cml0eToxLAorCQkJc3luY19jYXA6MSwKKwkJCXJfdF90b3Y6MSwKKwkJCWRoX2R1cF9zdXBwOjEsCisJCQljaXNjOjEsCQkvKiBjb250aW51b3VzbHkgaW5jcmVhc2luZyBzZXEgY291bnQgKi8KKwkJCXBheWxvYWQ6MTsKKyNlbHNlCisJdTggICAgICAgICByZXNlcnZlZDI6MiwKKwkJCXJlc29sdXRpb246MSwJLyogbXMvbnMgRURfVE9WIHJlc29sdXRpb24gKi8KKwkJCWFsdGJiY3JlZDoxLAkvKiBhbHRlcm5hdGUgQkJfQ3JlZGl0ICovCisJCQlwb3J0X3R5cGU6MSwJLyogTl9Qb3J0L0ZfcG9ydCAqLworCQkJbnBpdl9zdXBwOjEsCS8qIE5QSVYgc3VwcG9ydGVkICovCisJCQlycm86MSwJCS8qIHJhbmRvbSByZWxhdGl2ZSBvZmZzZXQgKi8KKwkJCWNpcm86MTsJCS8qIGNvbnRpbnVvdXNseSBpbmNyZWFzaW5nIFJPICovCisKKwl1OCAgICAgICAgIHBheWxvYWQ6MSwKKwkJCWNpc2M6MSwJCS8qIGNvbnRpbnVvdXNseSBpbmNyZWFzaW5nIHNlcSBjb3VudCAqLworCQkJZGhfZHVwX3N1cHA6MSwKKwkJCXJfdF90b3Y6MSwKKwkJCXN5bmNfY2FwOjEsCisJCQlzZWN1cml0eToxLAorCQkJcXVlcnlfZGJjOjEsCisJCQloZ19zdXBwOjE7CisjZW5kaWYKKworCXUxNiAgICAgICAgcnhzejsJCS8qIHJlY2lldmUgZGF0YV9maWVsZCBzaXplICovCisKKwl1MTYgICAgICAgIGNvbnNlcTsKKwl1MTYgICAgICAgIHJvX2JpdG1hcDsKKworCXUzMiAgICAgICAgZV9kX3RvdjsKK307CisKKy8qCisgKiBOX1BvcnQgUExPR0kgQ2xhc3MgU3BlY2lmaWMgUGFyYW1ldGVycy4KKyAqIEZDLVBILXguIEZpZ3VyZSA3OC4gcGcuIDMxOC4KKyAqLworc3RydWN0IGZjX3Bsb2dpX2NscF9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBjbGFzc192YWxpZDoxOworCXUzMiAgICAgICAgaW50ZXJtaXg6MTsJLyogY2xhc3MgaW50ZXJtaXggc3VwcG9ydGVkIGlmIHNldCA9MS4KKwkJCQkJICogdmFsaWQgb25seSBmb3IgY2xhc3MxLiBSZXNlcnZlZCBmb3IKKwkJCQkJICogY2xhc3MyICYgY2xhc3MzCisJCQkJCSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTMyICAgICAgICBzZXF1ZW50aWFsOjE7CisJdTMyICAgICAgICByZXNlcnZlZDI6MzsKKyNlbHNlCisJdTMyICAgICAgICByZXNlcnZlZDI6MzsKKwl1MzIgICAgICAgIHNlcXVlbnRpYWw6MTsKKwl1MzIgICAgICAgIHJlc2VydmVkMToyOworCXUzMiAgICAgICAgaW50ZXJtaXg6MTsJLyogY2xhc3MgaW50ZXJtaXggc3VwcG9ydGVkIGlmIHNldCA9MS4KKwkJCQkJICogdmFsaWQgb25seSBmb3IgY2xhc3MxLiBSZXNlcnZlZCBmb3IKKwkJCQkJICogY2xhc3MyICYgY2xhc3MzCisJCQkJCSAqLworCXUzMiAgICAgICAgY2xhc3NfdmFsaWQ6MTsKKyNlbmRpZgorCisJdTMyICAgICAgICByZXNlcnZlZDM6MjQ7CisKKwl1MzIgICAgICAgIHJlc2VydmVkNDoxNjsKKwl1MzIgICAgICAgIHJ4c3o6MTY7CS8qIFJlY2VpdmUgZGF0YV9maWVsZCBzaXplICovCisKKwl1MzIgICAgICAgIHJlc2VydmVkNTo4OworCXUzMiAgICAgICAgY29uc2VxOjg7CisJdTMyICAgICAgICBlMmVfY3JlZGl0OjE2OwkvKiBlbmQgdG8gZW5kIGNyZWRpdCAqLworCisJdTMyICAgICAgICByZXNlcnZlZDc6ODsKKwl1MzIgICAgICAgIG9zcHg6ODsKKwl1MzIgICAgICAgIHJlc2VydmVkODoxNjsKK307CisKKyNkZWZpbmUgRkxPR0lfVlZMX0JSQ0QgICAgMHg0MjUyNDM0NCAvKiBBU0NJSSB2YWx1ZSBmb3IgZWFjaCBjaGFyYWN0ZXIgaW4KKwkJCQkgICAgICAqIHN0cmluZyAiQlJDRCIgKi8KKworLyoKKyAqIFBMT0dJIGVscyBjb21tYW5kIGFuZCByZXBseSBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19sb2dpX3N7CisJc3RydWN0IGZjX2Vsc19jbWRfcyBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJc3RydWN0IGZjX3Bsb2dpX2NzcF9zICBjc3A7CQkvKiBjb21tb24gc2VydmljZSBwYXJhbXMgKi8KKwl3d25fdCAgICAgICAgICAgcG9ydF9uYW1lOworCXd3bl90ICAgICAgICAgICBub2RlX25hbWU7CisJc3RydWN0IGZjX3Bsb2dpX2NscF9zICBjbGFzczE7CQkvKiBjbGFzcyAxIHNlcnZpY2UgcGFyYW1ldGVycyAqLworCXN0cnVjdCBmY19wbG9naV9jbHBfcyAgY2xhc3MyOwkJLyogY2xhc3MgMiBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgIGNsYXNzMzsJCS8qIGNsYXNzIDMgc2VydmljZSBwYXJhbWV0ZXJzICovCisJc3RydWN0IGZjX3Bsb2dpX2NscF9zICBjbGFzczQ7CQkvKiBjbGFzcyA0IHNlcnZpY2UgcGFyYW1ldGVycyAqLworCXU4ICAgICAgICAgdnZsWzE2XTsJLyogdmVuZG9yIHZlcnNpb24gbGV2ZWwgKi8KK307CisKKy8qCisgKiBMT0dPIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworc3RydWN0IGZjX2xvZ29fc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG5wb3J0X2lkOjI0OwkvKiBOX1BvcnQgaWRlbnRpZmllciBvZiBzb3VyY2UgKi8KKwl3d25fdCAgICAgICAgICAgb3JpZ19wb3J0X25hbWU7CS8qIFBvcnQgbmFtZSBvZiB0aGUgTE9HTyBvcmlnaW5hdG9yICovCit9OworCisvKgorICogQURJU0MgZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfYWRpc2NfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBvcmlnX0hBOjI0OwkvKiBvcmlnaW5hdG9yIGhhcmQgYWRkcmVzcyAqLworCXd3bl90ICAgICAgICAgICBvcmlnX3BvcnRfbmFtZTsJLyogb3JpZ2luYXRvciBwb3J0IG5hbWUgKi8KKwl3d25fdCAgICAgICAgICAgb3JpZ19ub2RlX25hbWU7CS8qIG9yaWdpbmF0b3Igbm9kZSBuYW1lICovCisJdTMyICAgICAgICByZXMyOjg7CisJdTMyICAgICAgICBucG9ydF9pZDoyNDsJLyogb3JpZ2luYXRvciBOUG9ydElEICovCit9OworCisvKgorICogRXhjaGFuZ2Ugc3RhdHVzIGJsb2NrCisgKi8KK3N0cnVjdCBmY19leGNoX3N0YXR1c19ibGtfc3sKKwl1MzIgICAgICAgIG94aWQ6MTY7CisJdTMyICAgICAgICByeGlkOjE2OworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgb3JpZ19ucDoyNDsJLyogb3JpZ2luYXRvciBOUG9ydElEICovCisJdTMyICAgICAgICByZXMyOjg7CisJdTMyICAgICAgICByZXNwX25wOjI0OwkvKiByZXNwb25kZXIgTlBvcnRJRCAqLworCXUzMiAgICAgICAgZXNfYml0czsKKwl1MzIgICAgICAgIHJlczM7CisJLyoKKwkgKiB1biBtb2RpZmllZCBzZWN0aW9uIG9mIHRoZSBmaWVsZHMKKwkgKi8KK307CisKKy8qCisgKiBSRVMgZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcmVzX3MgeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgbnBvcnRfaWQ6MjQ7CS8qIE5fUG9ydCBpZGVudGlmaWVyIG9mIHNvdXJjZSAqLworCXUzMiAgICAgICAgb3hpZDoxNjsKKwl1MzIgICAgICAgIHJ4aWQ6MTY7CisJdTggICAgICAgICBhc3NvY19oZHJbMzJdOworfTsKKworLyoKKyAqIFJFUyBlbHMgYWNjZXB0IHBheWxvYWQKKyAqLworc3RydWN0IGZjX3Jlc19hY2Nfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwlzdHJ1Y3QgZmNfZXhjaF9zdGF0dXNfYmxrX3MgZmNfZXhjaF9ibGs7IC8qIEV4Y2hhbmdlIHN0YXR1cyBibG9jayAqLworfTsKKworLyoKKyAqIFJFQyBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19yZWNfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBucG9ydF9pZDoyNDsJLyogTl9Qb3J0IGlkZW50aWZpZXIgb2Ygc291cmNlICovCisJdTMyICAgICAgICBveGlkOjE2OworCXUzMiAgICAgICAgcnhpZDoxNjsKK307CisKKyNkZWZpbmUgRkNfUkVDX0VTQl9PV05fUlNQCTB4ODAwMDAwMDAJLyogcmVzcG9uZGVyIG93bnMgKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9TSQkJMHg0MDAwMDAwMAkvKiBTSSBpcyBvd25lZCAJKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9DT01QCQkweDIwMDAwMDAwCS8qIGV4Y2hhbmdlIGlzIGNvbXBsZXRlCSovCisjZGVmaW5lIEZDX1JFQ19FU0JfRU5EQ09ORF9BQk4JMHgxMDAwMDAwMAkvKiBhYm5vcm1hbCBlbmRpbmcgCSovCisjZGVmaW5lIEZDX1JFQ19FU0JfUlFBQ1QJMHgwNDAwMDAwMAkvKiByZWNvdmVyeSBxdWFsIGFjdGl2ZQkqLworI2RlZmluZSBGQ19SRUNfRVNCX0VSUlBfTVNLCTB4MDMwMDAwMDAKKyNkZWZpbmUgRkNfUkVDX0VTQl9PWElEX0lOVgkweDAwODAwMDAwCS8qIGludmFsaWQgT1hJRAkJKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9SWElEX0lOVgkweDAwNDAwMDAwCS8qIGludmFsaWQgUlhJRAkJKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9QUklPX0lOVVNFCTB4MDAyMDAwMDAKKworLyoKKyAqIFJFQyBlbHMgYWNjZXB0IHBheWxvYWQKKyAqLworc3RydWN0IGZjX3JlY19hY2NfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJdTMyICAgICAgICBveGlkOjE2OworCXUzMiAgICAgICAgcnhpZDoxNjsKKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG9yaWdfaWQ6MjQ7CS8qIE5fUG9ydCBpZCBvZiBleGNoYW5nZSBvcmlnaW5hdG9yICovCisJdTMyICAgICAgICByZXMyOjg7CisJdTMyICAgICAgICByZXNwX2lkOjI0OwkvKiBOX1BvcnQgaWQgb2YgZXhjaGFuZ2UgcmVzcG9uZGVyICovCisJdTMyICAgICAgICBjb3VudDsJCS8qIGRhdGEgdHJhbnNmZXIgY291bnQgKi8KKwl1MzIgICAgICAgIGVfc3RhdDsJCS8qIGV4Y2hhbmdlIHN0YXR1cyAqLworfTsKKworLyoKKyAqIFJTSSBlbHMgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcnNpX3MgeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG9yaWdfc2lkOjI0OworCXUzMiAgICAgICAgb3hpZDoxNjsKKwl1MzIgICAgICAgIHJ4aWQ6MTY7Cit9OworCisvKgorICogc3RydWN0dXJlIGZvciBQUkxJIHBhcmFtYXRlciBwYWdlcywgYm90aCByZXF1ZXN0ICYgcmVzcG9uc2UKKyAqIHNlZSBGQy1QSC1YIHRhYmxlIDExMyAmIDExNSBmb3IgZXhwbGFuYXRpb24gYWxzbyBGQ1AgdGFibGUgOAorICovCitzdHJ1Y3QgZmNfcHJsaV9wYXJhbXNfc3sKKwl1MzIgICAgICAgIHJlc2VydmVkOiAxNjsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgcmVzZXJ2ZWQxOiA1OworCXUzMiAgICAgICAgcmVjX3N1cHBvcnQgOiAxOworCXUzMiAgICAgICAgdGFza19yZXRyeV9pZCA6IDE7CisJdTMyICAgICAgICByZXRyeSA6IDE7CisKKwl1MzIgICAgICAgIGNvbmZpcm0gOiAxOworCXUzMiAgICAgICAgZG92ZXJsYXk6MTsKKwl1MzIgICAgICAgIGluaXRpYXRvcjoxOworCXUzMiAgICAgICAgdGFyZ2V0OjE7CisJdTMyICAgICAgICBjZG1peDoxOworCXUzMiAgICAgICAgZHJtaXg6MTsKKwl1MzIgICAgICAgIHJ4cmRpc2FiOjE7CisJdTMyICAgICAgICB3eHJkaXNhYjoxOworI2Vsc2UKKwl1MzIgICAgICAgIHJldHJ5IDogMTsKKwl1MzIgICAgICAgIHRhc2tfcmV0cnlfaWQgOiAxOworCXUzMiAgICAgICAgcmVjX3N1cHBvcnQgOiAxOworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOiA1OworCisJdTMyICAgICAgICB3eHJkaXNhYjoxOworCXUzMiAgICAgICAgcnhyZGlzYWI6MTsKKwl1MzIgICAgICAgIGRybWl4OjE7CisJdTMyICAgICAgICBjZG1peDoxOworCXUzMiAgICAgICAgdGFyZ2V0OjE7CisJdTMyICAgICAgICBpbml0aWF0b3I6MTsKKwl1MzIgICAgICAgIGRvdmVybGF5OjE7CisJdTMyICAgICAgICBjb25maXJtIDogMTsKKyNlbmRpZgorfTsKKworLyoKKyAqIHZhbGlkIHZhbHVlcyBmb3IgcnNwY29kZSBpbiBQUkxJIEFDQyBwYXlsb2FkCisgKi8KK2VudW0geworCUZDX1BSTElfQUNDX1hRVEQgPSAweDEsCQkvKiByZXF1ZXN0IGV4ZWN1dGVkICovCisJRkNfUFJMSV9BQ0NfUFJFREVGX0lNRyA9IDB4NSwJLyogcHJlZGVmaW5lZCBpbWFnZSAtIG5vIHBybGkgbmVlZGVkICovCit9OworCitzdHJ1Y3QgZmNfcHJsaV9wYXJhbXNfcGFnZV9zeworCXUzMiAgICAgICAgdHlwZTo4OworCXUzMiAgICAgICAgY29kZXh0Ojg7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIG9yaWdwcm9jYXN2OjE7CisJdTMyICAgICAgICByc3BwYXY6MTsKKwl1MzIgICAgICAgIGltYWdlcGFpcjoxOworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTMyICAgICAgICByc3Bjb2RlOjQ7CisjZWxzZQorCXUzMiAgICAgICAgcnNwY29kZTo0OworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTMyICAgICAgICBpbWFnZXBhaXI6MTsKKwl1MzIgICAgICAgIHJzcHBhdjoxOworCXUzMiAgICAgICAgb3JpZ3Byb2Nhc3Y6MTsKKyNlbmRpZgorCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjg7CisKKwl1MzIgICAgICAgIG9yaWdwcm9jYXM7CisJdTMyICAgICAgICByc3Bwcm9jYXM7CisJc3RydWN0IGZjX3BybGlfcGFyYW1zX3MgIHNlcnZwYXJhbXM7Cit9OworCisvKgorICogUFJMSSByZXF1ZXN0IGFuZCBhY2NlcHQgcGF5bG9hZCwgRkMtUEgtWCB0YWJsZXMgMTEyICYgMTE0CisgKi8KK3N0cnVjdCBmY19wcmxpX3N7CisJdTMyICAgICAgICBjb21tYW5kOjg7CisJdTMyICAgICAgICBwZ2xlbjo4OworCXUzMiAgICAgICAgcGFnZWJ5dGVzOjE2OworCXN0cnVjdCBmY19wcmxpX3BhcmFtc19wYWdlX3MgcGFyYW1wYWdlOworfTsKKworLyoKKyAqIFBSTE8gbG9nb3V0IHBhcmFtcyBwYWdlCisgKi8KK3N0cnVjdCBmY19wcmxvX3BhcmFtc19wYWdlX3N7CisJdTMyICAgICAgICB0eXBlOjg7CisJdTMyICAgICAgICB0eXBlX2V4dDo4OworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IKKwkJCQkJICogdmFsaWQKKwkJCQkJICovCisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsJLyogcmVzcG9uZGVyIHByb2Nlc3MgYXNzb2NpYXRvciB2YWxpZCAqLworCXUzMiAgICAgICAgcmVzMToxNDsKKyNlbHNlCisJdTMyICAgICAgICByZXMxOjE0OworCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CS8qIHJlc3BvbmRlciBwcm9jZXNzIGFzc29jaWF0b3IgdmFsaWQgKi8KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvcgorCQkJCQkgKiB2YWxpZAorCQkJCQkgKi8KKyNlbmRpZgorCXUzMiAgICAgICAgb3JpZ19wcm9jZXNzX2Fzc2M7CisJdTMyICAgICAgICByZXNwX3Byb2Nlc3NfYXNzYzsKKworCXUzMiAgICAgICAgcmVzMjsKK307CisKKy8qCisgKiBQUkxPIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3BybG9fc3sKKwl1MzIgICAgICAgIAljb21tYW5kOjg7CisJdTMyICAgICAgICAJcGFnZV9sZW46ODsKKwl1MzIgICAgICAgIAlwYXlsb2FkX2xlbjoxNjsKKwlzdHJ1Y3QgZmNfcHJsb19wYXJhbXNfcGFnZV9zIAlwcmxvX3BhcmFtc1sxXTsKK307CisKKy8qCisgKiBQUkxPIExvZ291dCByZXNwb25zZSBwYXJhbWV0ZXIgcGFnZQorICovCitzdHJ1Y3QgZmNfcHJsb19hY2NfcGFyYW1zX3BhZ2Vfc3sKKwl1MzIgICAgICAgIHR5cGU6ODsKKwl1MzIgICAgICAgIHR5cGVfZXh0Ojg7CisKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgb3BhX3ZhbGlkOjE7CS8qIG9yaWdpbmF0b3IgcHJvY2VzcyBhc3NvY2lhdG9yCisJCQkJCSAqIHZhbGlkCisJCQkJCSAqLworCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CS8qIHJlc3BvbmRlciBwcm9jZXNzIGFzc29jaWF0b3IgdmFsaWQgKi8KKwl1MzIgICAgICAgIHJlczE6MTQ7CisjZWxzZQorCXUzMiAgICAgICAgcmVzMToxNDsKKwl1MzIgICAgICAgIHJwYV92YWxpZDoxOwkvKiByZXNwb25kZXIgcHJvY2VzcyBhc3NvY2lhdG9yIHZhbGlkICovCisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IKKwkJCQkJICogdmFsaWQKKwkJCQkJICovCisjZW5kaWYKKwl1MzIgICAgICAgIG9yaWdfcHJvY2Vzc19hc3NjOworCXUzMiAgICAgICAgcmVzcF9wcm9jZXNzX2Fzc2M7CisKKwl1MzIgICAgICAgIGZjNHR5cGVfY3NwOworfTsKKworLyoKKyAqIFBSTE8gZWxzIGNvbW1hbmQgQUNDIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3BybG9fYWNjX3N7CisJdTMyICAgICAgICBjb21tYW5kOjg7CisJdTMyICAgICAgICBwYWdlX2xlbjo4OworCXUzMiAgICAgICAgcGF5bG9hZF9sZW46MTY7CisJc3RydWN0IGZjX3BybG9fYWNjX3BhcmFtc19wYWdlX3MgcHJsb19hY2NfcGFyYW1zWzFdOworfTsKKworLyoKKyAqIFNDUiBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK2VudW0geworCUZDX1NDUl9SRUdfRlVOQ19GQUJSSUNfREVURUNURUQgPSAweDAxLAorCUZDX1NDUl9SRUdfRlVOQ19OX1BPUlRfREVURUNURUQgPSAweDAyLAorCUZDX1NDUl9SRUdfRlVOQ19GVUxMID0gMHgwMywKKwlGQ19TQ1JfUkVHX0ZVTkNfQ0xFQVJfUkVHID0gMHhGRiwKK307CisKKy8qIFNDUiBWVSByZWdpc3RyYXRpb25zICovCitlbnVtIHsKKwlGQ19WVV9TQ1JfUkVHX0ZVTkNfRkFCUklDX05BTUVfQ0hBTkdFID0gMHgwMQorfTsKKworc3RydWN0IGZjX3Njcl9zeworCXUzMiBjb21tYW5kOjg7CisJdTMyIHJlczoyNDsKKwl1MzIgdnVfcmVnX2Z1bmM6ODsgLyogVmVuZG9yIFVuaXF1ZSBSZWdpc3RyYXRpb25zICovCisJdTMyIHJlczE6MTY7CisJdTMyIHJlZ19mdW5jOjg7Cit9OworCisvKgorICogSW5mb3JtYXRpb24gY2F0ZWdvcnkgZm9yIEJhc2ljIGxpbmsgZGF0YQorICovCitlbnVtIHsKKwlGQ19DQVRfTk9QCT0gMHgwLAorCUZDX0NBVF9BQlRTCT0gMHgxLAorCUZDX0NBVF9STUMJPSAweDIsCisJRkNfQ0FUX0JBX0FDQwk9IDB4NCwKKwlGQ19DQVRfQkFfUkpUCT0gMHg1LAorCUZDX0NBVF9QUk1UCT0gMHg2LAorfTsKKworLyoKKyAqIExTX1JKVCBlbHMgcmVwbHkgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfbHNfcmp0X3MgeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsJCS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIHJlYXNvbl9jb2RlOjg7CQkvKiBSZWFzb24gY29kZSBmb3IgcmVqZWN0ICovCisJdTMyICAgICAgICByZWFzb25fY29kZV9leHBsOjg7CS8qIFJlYXNvbiBjb2RlIGV4cGxhbmF0aW9uICovCisJdTMyICAgICAgICB2ZW5kb3JfdW5pcXVlOjg7CS8qIFZlbmRvciBzcGVjaWZpYyAqLworfTsKKworLyoKKyAqIExTX1JKVCByZWFzb24gY29kZXMKKyAqLworZW51bSB7CisJRkNfTFNfUkpUX1JTTl9JTlZfQ01EX0NPREUJPSAweDAxLAorCUZDX0xTX1JKVF9SU05fTE9HSUNBTF9FUlJPUgk9IDB4MDMsCisJRkNfTFNfUkpUX1JTTl9MT0dJQ0FMX0JVU1kJPSAweDA1LAorCUZDX0xTX1JKVF9SU05fUFJPVE9DT0xfRVJST1IJPSAweDA3LAorCUZDX0xTX1JKVF9SU05fVU5BQkxFX1RPX1BFUkZfQ01EID0gMHgwOSwKKwlGQ19MU19SSlRfUlNOX0NNRF9OT1RfU1VQUAk9IDB4MEIsCit9OworCisvKgorICogTFNfUkpUIHJlYXNvbiBjb2RlIGV4cGxhbmF0aW9uCisgKi8KK2VudW0geworCUZDX0xTX1JKVF9FWFBfTk9fQURETF9JTkZPCQk9IDB4MDAsCisJRkNfTFNfUkpUX0VYUF9TUEFSTVNfRVJSX09QVElPTlMJPSAweDAxLAorCUZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9JTklfQ1RMCT0gMHgwMywKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfUkVDX0NUTAk9IDB4MDUsCisJRkNfTFNfUkpUX0VYUF9TUEFSTVNfRVJSX1JYU1oJCT0gMHgwNywKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfQ09OU0VRCQk9IDB4MDksCisJRkNfTFNfUkpUX0VYUF9TUEFSTVNfRVJSX0NSRURJVAkJPSAweDBCLAorCUZDX0xTX1JKVF9FWFBfSU5WX1BPUlRfTkFNRQkJPSAweDBELAorCUZDX0xTX1JKVF9FWFBfSU5WX05PREVfRkFCUklDX05BTUUJPSAweDBFLAorCUZDX0xTX1JKVF9FWFBfSU5WX0NTUAkJCT0gMHgwRiwKKwlGQ19MU19SSlRfRVhQX0lOVl9BU1NPQ19IRFIJCT0gMHgxMSwKKwlGQ19MU19SSlRfRVhQX0FTU09DX0hEUl9SRVFECQk9IDB4MTMsCisJRkNfTFNfUkpUX0VYUF9JTlZfT1JJR19TX0lECQk9IDB4MTUsCisJRkNfTFNfUkpUX0VYUF9JTlZfT1hJRF9SWElEX0NPTUIJPSAweDE3LAorCUZDX0xTX1JKVF9FWFBfQ01EX0FMUkVBRFlfSU5fUFJPRwk9IDB4MTksCisJRkNfTFNfUkpUX0VYUF9MT0dJTl9SRVFVSVJFRAkJPSAweDFFLAorCUZDX0xTX1JKVF9FWFBfSU5WQUxJRF9OUE9SVF9JRAkJPSAweDFGLAorCUZDX0xTX1JKVF9FWFBfSU5TVUZGX1JFUwkJPSAweDI5LAorCUZDX0xTX1JKVF9FWFBfQ01EX05PVF9TVVBQCQk9IDB4MkMsCisJRkNfTFNfUkpUX0VYUF9JTlZfUEFZTE9BRF9MRU4JCT0gMHgyRCwKK307CisKKy8qCisgKiBSUlEgZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcnJxX3N7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBzX2lkOjI0OwkvKiBleGNoYW5nZSBvcmlnaW5hdG9yIFNfSUQgKi8KKworCXUzMiAgICAgICAgb3hfaWQ6MTY7CS8qIG9yaWdpbmF0b3IgZXhjaGFuZ2UgSUQgKi8KKwl1MzIgICAgICAgIHJ4X2lkOjE2OwkvKiByZXNwb25kZXIgZXhjaGFuZ2UgSUQgKi8KKworCXUzMiAgICAgICAgcmVzMls4XTsJLyogb3B0aW9uYWwgYXNzb2NpYXRpb24gaGVhZGVyICovCit9OworCisvKgorICogQUJUUyBCQV9BQ0MgcmVwbHkgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfYmFfYWNjX3N7CisJdTMyICAgICAgICBzZXFfaWRfdmFsaWQ6ODsJLyogc2V0IHRvIDB4MDAgZm9yIEFib3J0IEV4Y2hhbmdlICovCisJdTMyICAgICAgICBzZXFfaWQ6ODsJLyogaW52YWxpZCBmb3IgQWJvcnQgRXhjaGFuZ2UgKi8KKwl1MzIgICAgICAgIHJlczI6MTY7CisJdTMyICAgICAgICBveF9pZDoxNjsJLyogT1hfSUQgZnJvbSBBQlRTIGZyYW1lICovCisJdTMyICAgICAgICByeF9pZDoxNjsJLyogUlhfSUQgZnJvbSBBQlRTIGZyYW1lICovCisJdTMyICAgICAgICBsb3dfc2VxX2NudDoxNjsJLyogc2V0IHRvIDB4MDAwMCBmb3IgQWJvcnQgRXhjaGFuZ2UgKi8KKwl1MzIgICAgICAgIGhpZ2hfc2VxX2NudDoxNjsvKiBzZXQgdG8gMHhGRkZGIGZvciBBYm9ydCBFeGNoYW5nZSAqLworfTsKKworLyoKKyAqIEFCVFMgQkFfUkpUIHJlamVjdCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19iYV9yanRfc3sKKwl1MzIgICAgICAgIHJlczE6ODsJCS8qIFJlc2VydmVkICovCisJdTMyICAgICAgICByZWFzb25fY29kZTo4OwkvKiByZWFzb24gY29kZSBmb3IgcmVqZWN0ICovCisJdTMyICAgICAgICByZWFzb25fZXhwbDo4OwkvKiByZWFzb24gY29kZSBleHBsYW5hdGlvbiAqLworCXUzMiAgICAgICAgdmVuZG9yX3VuaXF1ZTo4Oy8qIHZlbmRvciB1bmlxdWUgcmVhc29uIGNvZGUsc2V0IHRvIDAgKi8KK307CisKKy8qCisgKiBUUFJMTyBsb2dvdXQgcGFyYW1ldGVyIHBhZ2UKKyAqLworc3RydWN0IGZjX3RwcmxvX3BhcmFtc19wYWdlX3N7CisJdTMyICAgICAgICB0eXBlOjg7CisJdTMyICAgICAgICB0eXBlX2V4dDo4OworCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOworCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CisJdTMyICAgICAgICB0cG9fbnBvcnRfdmFsaWQ6MTsKKwl1MzIgICAgICAgIGdsb2JhbF9wcm9jZXNzX2xvZ291dDoxOworCXUzMiAgICAgICAgcmVzMToxMjsKKyNlbHNlCisJdTMyICAgICAgICByZXMxOjEyOworCXUzMiAgICAgICAgZ2xvYmFsX3Byb2Nlc3NfbG9nb3V0OjE7CisJdTMyICAgICAgICB0cG9fbnBvcnRfdmFsaWQ6MTsKKwl1MzIgICAgICAgIHJwYV92YWxpZDoxOworCXUzMiAgICAgICAgb3BhX3ZhbGlkOjE7CisjZW5kaWYKKworCXUzMiAgICAgICAgb3JpZ19wcm9jZXNzX2Fzc2M7CisJdTMyICAgICAgICByZXNwX3Byb2Nlc3NfYXNzYzsKKworCXUzMiAgICAgICAgcmVzMjo4OworCXUzMiAgICAgICAgdHBvX25wb3J0X2lkOworfTsKKworLyoKKyAqIFRQUkxPIEVMUyBjb21tYW5kIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3RwcmxvX3N7CisJdTMyICAgICAgICBjb21tYW5kOjg7CisJdTMyICAgICAgICBwYWdlX2xlbjo4OworCXUzMiAgICAgICAgcGF5bG9hZF9sZW46MTY7CisKKwlzdHJ1Y3QgZmNfdHBybG9fcGFyYW1zX3BhZ2VfcyB0cHJsb19wYXJhbXNbMV07Cit9OworCitlbnVtIGZjX3RwcmxvX3R5cGV7CisJRkNfR0xPQkFMX0xPR08gPSAxLAorCUZDX1RQUl9MT0dPCit9OworCisvKgorICogVFBSTE8gZWxzIGNvbW1hbmQgQUNDIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3RwcmxvX2FjY19zeworCXUzMgljb21tYW5kOjg7CisJdTMyCXBhZ2VfbGVuOjg7CisJdTMyCXBheWxvYWRfbGVuOjE2OworCXN0cnVjdCBmY19wcmxvX2FjY19wYXJhbXNfcGFnZV9zIHRwcmxvX2FjY19wYXJhbXNbMV07Cit9OworCisvKgorICogUlNDTiBlbHMgY29tbWFuZCByZXEgcGF5bG9hZAorICovCisjZGVmaW5lIEZDX1JTQ05fUEdMRU4JMHg0CisKK2VudW0gZmNfcnNjbl9mb3JtYXR7CisJRkNfUlNDTl9GT1JNQVRfUE9SVElECT0gMHgwLAorCUZDX1JTQ05fRk9STUFUX0FSRUEJPSAweDEsCisJRkNfUlNDTl9GT1JNQVRfRE9NQUlOCT0gMHgyLAorCUZDX1JTQ05fRk9STUFUX0ZBQlJJQwk9IDB4MywKK307CisKK3N0cnVjdCBmY19yc2NuX2V2ZW50X3N7CisJdTMyICAgICAgICBmb3JtYXQ6MjsKKwl1MzIgICAgICAgIHF1YWxpZmllcjo0OworCXUzMiAgICAgICAgcmVzdmQ6MjsKKwl1MzIgICAgICAgIHBvcnRpZDoyNDsKK307CisKK3N0cnVjdCBmY19yc2NuX3BsX3N7CisJdTggICAgICAgICBjb21tYW5kOworCXU4ICAgICAgICAgcGFnZWxlbjsKKwl1MTYgICAgICAgIHBheWxkbGVuOworCXN0cnVjdCBmY19yc2NuX2V2ZW50X3MgZXZlbnRbMV07Cit9OworCisvKgorICogRUNITyBlbHMgY29tbWFuZCByZXEgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfZWNob19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7Cit9OworCisvKgorICogUk5JRCBlbHMgY29tbWFuZAorICovCisKKyNkZWZpbmUgUk5JRF9OT0RFSURfREFUQV9GT1JNQVRfQ09NTU9OICAgIAkJIDB4MDAKKyNkZWZpbmUgUk5JRF9OT0RFSURfREFUQV9GT1JNQVRfRkNQMyAgICAgICAgCQkgMHgwOAorI2RlZmluZSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlkgICAgIAkJMHhERgorCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1VOS05PV04gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfT1RIRVIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9IVUIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfR0FURVdBWSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TVE9SQUdFX0RFVklDRSAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0hPU1QgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1RPUkFHRV9TVUJTWVNURU0gICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TVE9SQUdFX0FDQ0VTU19ERVZJQ0UgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX05BU19TRVJWRVIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfQlJJREdFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9WSVJUVUFMSVpBVElPTl9ERVZJQ0UgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX01VTFRJX0ZVTkNUSU9OX0RFVklDRSAgICAgIDB4MDAwMDAwRkYKKworLyoKKyAqIFJOSUQgZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcm5pZF9jbWRfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CisJdTMyICAgICAgICBub2RlX2lkX2RhdGFfZm9ybWF0Ojg7CisJdTMyICAgICAgICByZXNlcnZlZDoyNDsKK307CisKKy8qCisgKiBSTklEIGVscyByZXNwb25zZSBwYXlsb2FkCisgKi8KKworc3RydWN0IGZjX3JuaWRfY29tbW9uX2lkX2RhdGFfc3sKKwl3d25fdCAgICAgICAgICAgcG9ydF9uYW1lOworCXd3bl90ICAgICAgICAgICBub2RlX25hbWU7Cit9OworCitzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfc3sKKwl1MzIgICAgICAgIHZlbmRvcl91bmlxdWVbNF07CisJdTMyICAgICAgICBhc3NvX3R5cGU7CisJdTMyICAgICAgICBwaHlfcG9ydF9udW07CisJdTMyICAgICAgICBudW1fYXR0YWNoZWRfbm9kZXM7CisJdTMyICAgICAgICBub2RlX21nbXQ6ODsKKwl1MzIgICAgICAgIGlwX3ZlcnNpb246ODsKKwl1MzIgICAgICAgIHVkcF90Y3BfcG9ydF9udW06MTY7CisJdTMyICAgICAgICBpcF9hZGRyZXNzWzRdOworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6MTY7CisJdTMyICAgICAgICB2ZW5kb3Jfc3BlY2lmaWM6MTY7Cit9OworCitzdHJ1Y3QgZmNfcm5pZF9hY2Nfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CisJdTMyICAgICAgICBub2RlX2lkX2RhdGFfZm9ybWF0Ojg7CisJdTMyICAgICAgICBjb21tb25faWRfZGF0YV9sZW5ndGg6ODsKKwl1MzIgICAgICAgIHJlc2VydmVkOjg7CisJdTMyICAgICAgICBzcGVjaWZpY19pZF9kYXRhX2xlbmd0aDo4OworCXN0cnVjdCBmY19ybmlkX2NvbW1vbl9pZF9kYXRhX3MgY29tbW9uX2lkX2RhdGE7CisJc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MgZ2VuX3RvcG9sb2d5X2RhdGE7Cit9OworCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1VOS05PV04gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfT1RIRVIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9IVUIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfR0FURVdBWSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TVE9SQUdFX0RFVklDRSAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0hPU1QgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1RPUkFHRV9TVUJTWVNURU0gICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TVE9SQUdFX0FDQ0VTU19ERVZJQ0UgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX05BU19TRVJWRVIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfQlJJREdFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9WSVJUVUFMSVpBVElPTl9ERVZJQ0UgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX01VTFRJX0ZVTkNUSU9OX0RFVklDRSAgICAgIDB4MDAwMDAwRkYKKworZW51bSBmY19ycHNjX3NwZWVkX2NhcHsKKwlSUFNDX1NQRUVEX0NBUF8xRyA9IDB4ODAwMCwKKwlSUFNDX1NQRUVEX0NBUF8yRyA9IDB4NDAwMCwKKwlSUFNDX1NQRUVEX0NBUF80RyA9IDB4MjAwMCwKKwlSUFNDX1NQRUVEX0NBUF8xMEcgPSAweDEwMDAsCisJUlBTQ19TUEVFRF9DQVBfOEcgPSAweDA4MDAsCisJUlBTQ19TUEVFRF9DQVBfMTZHID0gMHgwNDAwLAorCisJUlBTQ19TUEVFRF9DQVBfVU5LTk9XTiA9IDB4MDAwMSwKK307CisKK2VudW0gZmNfcnBzY19vcF9zcGVlZF9zeworCVJQU0NfT1BfU1BFRURfMUcgPSAweDgwMDAsCisJUlBTQ19PUF9TUEVFRF8yRyA9IDB4NDAwMCwKKwlSUFNDX09QX1NQRUVEXzRHID0gMHgyMDAwLAorCVJQU0NfT1BfU1BFRURfMTBHID0gMHgxMDAwLAorCVJQU0NfT1BfU1BFRURfOEcgPSAweDA4MDAsCisJUlBTQ19PUF9TUEVFRF8xNkcgPSAweDA0MDAsCisKKwlSUFNDX09QX1NQRUVEX05PVF9FU1QgPSAweDAwMDEsCS8qISBzcGVlZCBub3QgZXN0YWJsaXNoZWQgKi8KK307CisKK3N0cnVjdCBmY19ycHNjX3NwZWVkX2luZm9fc3sKKwl1MTYgICAgICAgIHBvcnRfc3BlZWRfY2FwOwkvKiEgc2VlIGZjX3Jwc2Nfc3BlZWRfY2FwX3QgKi8KKwl1MTYgICAgICAgIHBvcnRfb3Bfc3BlZWQ7CS8qISBzZWUgZmNfcnBzY19vcF9zcGVlZF90ICovCit9OworCitlbnVtIGxpbmtfZTJlX2JlYWNvbl9zdWJjbWR7CisJTElOS19FMkVfQkVBQ09OX09OID0gMSwKKwlMSU5LX0UyRV9CRUFDT05fT0ZGID0gMgorfTsKKworZW51bSBiZWFjb25fdHlwZXsKKwlCRUFDT05fVFlQRV9OT1JNQUwJPSAxLAkvKiEgTm9ybWFsIEJlYWNvbmluZy4gR3JlZW4gKi8KKwlCRUFDT05fVFlQRV9XQVJOCT0gMiwJLyohIFdhcm5pbmcgQmVhY29uaW5nLiBZZWxsb3cvQW1iZXIgKi8KKwlCRUFDT05fVFlQRV9DUklUSUNBTAk9IDMJLyohIENyaXRpY2FsIEJlYWNvbmluZy4gUmVkICovCit9OworCitzdHJ1Y3QgbGlua19lMmVfYmVhY29uX3BhcmFtX3MgeworCXU4ICAgICAgICAgYmVhY29uX3R5cGU7CS8qIEJlYWNvbiBUeXBlLiBTZWUgYmVhY29uX3R5cGVfdCAqLworCXU4ICAgICAgICAgYmVhY29uX2ZyZXF1ZW5jeTsKKwkJCQkJLyogQmVhY29uIGZyZXF1ZW5jeS4gTnVtYmVyIG9mIGJsaW5rcworCQkJCQkgKiBwZXIgMTAgc2Vjb25kcworCQkJCQkgKi8KKwl1MTYgICAgICAgIGJlYWNvbl9kdXJhdGlvbjsvKiBCZWFjb24gZHVyYXRpb24gKGluIFNlY29uZHMpLiBUaGUKKwkJCQkJICogY29tbWFuZCBvcGVyYXRpb24gc2hvdWxkIGJlCisJCQkJCSAqIHRlcm1pbmF0ZWQgYXQgdGhlIGVuZCBvZiB0aGlzCisJCQkJCSAqIHRpbWVvdXQgdmFsdWUuCisJCQkJCSAqCisJCQkJCSAqIElnbm9yZWQgaWYgZGlhZ19zdWJfY21kIGlzCisJCQkJCSAqIExJTktfRTJFX0JFQUNPTl9PRkYuCisJCQkJCSAqCisJCQkJCSAqIElmIDAsIGJlYWNvbmluZyB3aWxsIGNvbnRpbnVlIHRpbGwgYQorCQkJCQkgKiBCRUFDT04gT0ZGIHJlcXVlc3QgaXMgcmVjZWl2ZWQKKwkJCQkJICovCit9OworCisvKgorICogTGluayBFMkUgYmVhY29uIHJlcXVlc3QvZ29vZCByZXNwb25zZSBmb3JtYXQuIEZvciBMU19SSlRzIHVzZSBmY19sc19yanRfdAorICovCitzdHJ1Y3QgbGlua19lMmVfYmVhY29uX3JlcV9zeworCXUzMiAgICAgICAgbHNfY29kZTsJLyohIEZDX0VMU19FMkVfTEJFQUNPTiBpbiByZXF1ZXN0cyAqCisJCQkJCSAqb3IgRkNfRUxTX0FDQyBpbiBnb29kIHJlcGxpZXMgKi8KKwl1MzIgICAgICAgIGxzX3N1Yl9jbWQ7CS8qISBTZWUgbGlua19lMmVfYmVhY29uX3N1YmNtZF90ICovCisJc3RydWN0IGxpbmtfZTJlX2JlYWNvbl9wYXJhbV9zIGJlYWNvbl9wYXJtOworfTsKKworLyoqCisgKiBJZiBSUFNDIHJlcXVlc3QgaXMgc2VudCB0byB0aGUgRG9tYWluIENvbnRyb2xsZXIsIHRoZSByZXF1ZXN0IGlzIGZvcgorICogYWxsIHRoZSBwb3J0cyB3aXRoaW4gdGhhdCBkb21haW4gKFRPRE8gLSBJIGRvbid0IHRoaW5rIEZPUyBpbXBsZW1lbnRzCisgKiB0aGlzLi4uKS4KKyAqLworc3RydWN0IGZjX3Jwc2NfY21kX3N7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOworfTsKKworLyoKKyAqIFJQU0MgQWNjCisgKi8KK3N0cnVjdCBmY19ycHNjX2FjY19zeworCXUzMiAgICAgICAgY29tbWFuZDo4OworCXUzMiAgICAgICAgcnN2ZDo4OworCXUzMiAgICAgICAgbnVtX2VudHJpZXM6MTY7CisKKwlzdHJ1Y3QgZmNfcnBzY19zcGVlZF9pbmZvX3Mgc3BlZWRfaW5mb1sxXTsKK307CisKKy8qKgorICogSWYgUlBTQzIgcmVxdWVzdCBpcyBzZW50IHRvIHRoZSBEb21haW4gQ29udHJvbGxlciwKKyAqLworI2RlZmluZSBGQ19CUkNEX1RPS0VOICAgIDB4NDI1MjQzNDQKKworc3RydWN0IGZjX3Jwc2MyX2NtZF9zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKKwl1MzIgICAgICAgCXRva2VuOworCXUxNiAgICAgCXJlc3ZkOworCXUxNiAgICAgCW51bV9waWRzOyAgICAgICAvKiBOdW1iZXIgb2YgcGlkcyBpbiB0aGUgcmVxdWVzdCAqLworCXN0cnVjdCAgeworCQl1MzIJcnN2ZDE6ODsKKwkJdTMyCXBpZDoyNDsJLyogcG9ydCBpZGVudGlmaWVyICovCisJfSBwaWRfbGlzdFsxXTsKK307CisKK2VudW0gZmNfcnBzYzJfcG9ydF90eXBleworCVJQU0MyX1BPUlRfVFlQRV9VTktOT1dOID0gMCwKKwlSUFNDMl9QT1JUX1RZUEVfTlBPUlQgICA9IDEsCisJUlBTQzJfUE9SVF9UWVBFX05MUE9SVCAgPSAyLAorCVJQU0MyX1BPUlRfVFlQRV9OUElWX1BPUlQgID0gMHg1ZiwKKwlSUFNDMl9QT1JUX1RZUEVfTlBPUlRfVFJVTksgID0gMHg2ZiwKK307CisKKy8qCisgKiBSUFNDMiBwb3J0SW5mbyBlbnRyeSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGZjX3Jwc2MyX3BvcnRfaW5mb19zeworICAgIHUzMiAgICBwaWQ7ICAgICAgICAvKiBQSUQgKi8KKyAgICB1MTYgICAgcmVzdmQxOworICAgIHUxNiAgICBpbmRleDsgICAgICAvKiBwb3J0IG51bWJlciAvIGluZGV4ICovCisgICAgdTggICAgIHJlc3ZkMjsKKyAgICB1OCAgICAJdHlwZTsgICAgICAgIC8qIHBvcnQgdHlwZSBOL05MLy4uLiAqLworICAgIHUxNiAgICBzcGVlZDsgICAgICAvKiBwb3J0IE9wZXJhdGluZyBTcGVlZCAqLworfTsKKworLyoKKyAqIFJQU0MyIEFjY2VwdCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19ycHNjMl9hY2Nfc3sKKwl1OCAgICAgICAgZWxzX2NtZDsKKwl1OCAgICAgICAgcmVzdmQ7CisJdTE2ICAgICAgIG51bV9waWRzOyAgLyogTnVtYmVyIG9mIHBpZHMgaW4gdGhlIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgZmNfcnBzYzJfcG9ydF9pbmZvX3MgIHBvcnRfaW5mb1sxXTsgICAgLyogcG9ydCBpbmZvcm1hdGlvbiAqLworfTsKKworLyoqCisgKiBiaXQgZmllbGRzIHNvIHRoYXQgbXVsdGlwbGUgY2xhc3NlcyBjYW4gYmUgc3BlY2lmaWVkCisgKi8KK2VudW0gZmNfY29zeworCUZDX0NMQVNTXzIJPSAweDA0LAorCUZDX0NMQVNTXzMJPSAweDA4LAorCUZDX0NMQVNTXzJfMwk9IDB4MEMsCit9OworCisvKgorICogc3ltYm9saWMgbmFtZQorICovCitzdHJ1Y3QgZmNfc3ltbmFtZV9zeworCXU4ICAgICAgICAgc3ltbmFtZVtGQ19TWU1OQU1FX01BWF07Cit9OworCitzdHJ1Y3QgZmNfYWxwYWJtX3N7CisJdTggICAgICAgICBhbHBhX2JtW0ZDX0FMUEFfTUFYIC8gOF07Cit9OworCisvKgorICogcHJvdG9jb2wgZGVmYXVsdCB0aW1lb3V0IHZhbHVlcworICovCisjZGVmaW5lIEZDX0VEX1RPVgkJMgorI2RlZmluZSBGQ19SRUNfVE9WCQkoRkNfRURfVE9WICsgMSkKKyNkZWZpbmUgRkNfUkFfVE9WCQkxMAorI2RlZmluZSBGQ19FTFNfVE9WCQkoMiAqIEZDX1JBX1RPVikKKworLyoKKyAqIHZpcnR1YWwgZmFicmljIHJlbGF0ZWQgZGVmaW5lcworICovCisjZGVmaW5lIEZDX1ZGX0lEX05VTEwgICAgMAkvKiAgbXVzdCBub3QgYmUgdXNlZCBhcyBWRl9JRCAqLworI2RlZmluZSBGQ19WRl9JRF9NSU4gICAgIDEKKyNkZWZpbmUgRkNfVkZfSURfTUFYICAgICAweEVGRgorI2RlZmluZSBGQ19WRl9JRF9DVEwgICAgIDB4RkVGCS8qICBjb250cm9sIFZGX0lEICovCisKKy8qKgorICogVmlydHVhbCBGYWJyaWMgVGFnZ2luZyBoZWFkZXIgZm9ybWF0CisgKiBAY2F1dGlvbiBUaGlzIGlzIGRlZmluZWQgb25seSBpbiBCSUcgRU5ESUFOIGZvcm1hdC4KKyAqLworc3RydWN0IGZjX3ZmdF9zeworCXUzMiAgICAgICAgcl9jdGw6ODsKKwl1MzIgICAgICAgIHZlcjoyOworCXUzMiAgICAgICAgdHlwZTo0OworCXUzMiAgICAgICAgcmVzX2E6MjsKKwl1MzIgICAgICAgIHByaW9yaXR5OjM7CisJdTMyICAgICAgICB2Zl9pZDoxMjsKKwl1MzIgICAgICAgIHJlc19iOjE7CisJdTMyICAgICAgICBob3BjdDo4OworCXUzMiAgICAgICAgcmVzX2M6MjQ7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mY19zcC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjX3NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViYjBiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mY19zcC5oCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19GQ19TUF9IX18KKyNkZWZpbmUgX19GQ19TUF9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGF1dGhfZWxzX2ZsYWdzeworCUZDX0FVVEhfRUxTX01PUkVfRlJBR1NfRkxBRyAJPSAweDgwLAkvKiEgYml0LTcuIE1vcmUgRnJhZ21lbnRzCisJCQkJCQkgKiBGb2xsb3cKKwkJCQkJCSAqLworCUZDX0FVVEhfRUxTX0NPTkNBVF9GTEFHIAk9IDB4NDAsCS8qISBiaXQtNi4gQ29uY2F0ZW5hdGlvbiBGbGFnICovCisJRkNfQVVUSF9FTFNfU0VRX05VTV9GTEFHIAk9IDB4MDEgCS8qISBiaXQtMC4gU2VxdWVuY2UgTnVtYmVyICovCit9OworCitlbnVtIGF1dGhfbXNnX2NvZGVzeworCUZDX0FVVEhfTUNfQVVUSF9SSlQJCT0gMHgwQSwJLyohIEF1dGggUmVqZWN0ICovCisJRkNfQVVUSF9NQ19BVVRIX05FRyAJCT0gMHgwQiwgLyohIEF1dGggTmVnb3RpYXRlICovCisJRkNfQVVUSF9NQ19BVVRIX0RPTkUgCQk9IDB4MEMsIC8qISBBdXRoIERvbmUgKi8KKworCUZDX0FVVEhfTUNfREhDSEFQX0NIQUwgCQk9IDB4MTAsIC8qISBESENIQVAgQ2hhbGxlbmdlICovCisJRkNfQVVUSF9NQ19ESENIQVBfUkVQTFkgCT0gMHgxMSwgLyohIERIQ0hBUCBSZXBseSAqLworCUZDX0FVVEhfTUNfREhDSEFQX1NVQ0MgCQk9IDB4MTIsIC8qISBESENIQVAgU3VjY2VzcyAqLworCisJRkNfQVVUSF9NQ19GQ0FQX1JFUSAJCT0gMHgxMywgLyohIEZDQVAgUmVxdWVzdCAqLworCUZDX0FVVEhfTUNfRkNBUF9BQ0sgCQk9IDB4MTQsIC8qISBGQ0FQIEFja25vd2xlZGdlICovCisJRkNfQVVUSF9NQ19GQ0FQX0NPTkYgCQk9IDB4MTUsIC8qISBGQ0FQIENvbmZpcm0gKi8KKworCUZDX0FVVEhfTUNfRkNQQVBfSU5JVCAJCT0gMHgxNiwgLyohIEZDUEFQIEluaXQgKi8KKwlGQ19BVVRIX01DX0ZDUEFQX0FDQyAJCT0gMHgxNywgLyohIEZDUEFQIEFjY2VwdCAqLworCUZDX0FVVEhfTUNfRkNQQVBfQ09NUCAJCT0gMHgxOCwgLyohIEZDUEFQIENvbXBsZXRlICovCisKKwlGQ19BVVRIX01DX0lLRV9TQV9JTklUIAkJPSAweDIyLCAvKiEgSUtFIFNBIElOSVQgKi8KKwlGQ19BVVRIX01DX0lLRV9TQV9BVVRIIAkJPSAweDIzLCAvKiEgSUtFIFNBIEF1dGggKi8KKwlGQ19BVVRIX01DX0lLRV9DUkVBVEVfQ0hJTERfU0EJPSAweDI0LCAvKiEgSUtFIENyZWF0ZSBDaGlsZCBTQSAqLworCUZDX0FVVEhfTUNfSUtFX0lORk8gCQk9IDB4MjUsIC8qISBJS0UgaW5mb3JtYXRpb25hbCAqLworfTsKKworZW51bSBhdXRoX3Byb3RvX3ZlcnNpb257CisJRkNfQVVUSF9QUk9UT19WRVJfMSAJPSAxLAkvKiEgUHJvdG9jb2wgVmVyc2lvbiAxICovCit9OworCitlbnVtIHsKKwlGQ19BVVRIX0VMU19DT01NQU5EX0NPREUgPSAweDkwLC8qISBBdXRoZW50aWNhdGlvbiBFTFMgQ29tbWFuZCBjb2RlICAqLworCUZDX0FVVEhfUFJPVE9fUEFSQU1fTEVOX1NaID0gNCwJLyohIFNpemUgb2YgUHJvdG8gUGFyYW1ldGVyIExlbiBGaWVsZCAqLworCUZDX0FVVEhfUFJPVE9fUEFSQU1fVkFMX1NaID0gNCwJLyohIFNpemUgb2YgUHJvdG8gUGFyYW1ldGVyIFZhbCBGaWVsZCAqLworCUZDX01BWF9BVVRIX1NFQ1JFVF9MRU4gICAgID0gMjU2LAorCQkJCQkvKiEgTWF4aW11bSBzZWNyZXQgc3RyaW5nIGxlbmd0aCAqLworCUZDX0FVVEhfTlVNX1VTQUJMRV9QUk9UT19MRU5fU1ogPSA0LAorCQkJCQkvKiEgU2l6ZSBvZiB1c2FibGUgcHJvdG9jb2xzIGZpZWxkICovCisJRkNfQVVUSF9SRVNQX1ZBTFVFX0xFTl9TWgk9IDQsCisJCQkJCS8qISBTaXplIG9mIHJlc3BvbnNlIHZhbHVlIGxlbmd0aCAqLworCUZDX01BWF9DSEFQX0tFWV9MRU4JPSAyNTYsCS8qISBNYXhpbXVtIG1kNSBkaWdlc3QgbGVuZ3RoICovCisJRkNfTUFYX0FVVEhfUkVUUklFUyAgICAgPSAzLAkvKiEgTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyAqLworCUZDX01ENV9ESUdFU1RfTEVOICAgICAgID0gMTYsCS8qISBNRDUgZGlnZXN0IGxlbmd0aCAqLworCUZDX1NIQTFfRElHRVNUX0xFTiAgICAgID0gMjAsCS8qISBTSEExIGRpZ2VzdCBsZW5ndGggKi8KKwlGQ19NQVhfREhHX1NVUFBPUlRFRCAgICA9IDEsCS8qISBNYXhpbXVtIERIIEdyb3VwcyBzdXBwb3J0ZWQgKi8KKwlGQ19NQVhfQUxHX1NVUFBPUlRFRCAgICA9IDEsCS8qISBNYXhpbXVtIGFsZ29yaXRobXMgc3VwcG9ydGVkICovCisJRkNfTUFYX1BST1RPX1NVUFBPUlRFRCAgPSAxLAkvKiEgTWF4aW11bSBwcm90b2NvbHMgc3VwcG9ydGVkICovCisJRkNfU1RBUlRfVFhOX0lEICAgICAgICAgPSAyLAkvKiEgU3RhcnRpbmcgdHJhbnNhY3Rpb24gSUQgKi8KK307CisKK2VudW0gYXV0aF9wcm90b19pZHsKKwlGQ19BVVRIX1BST1RPX0RIQ0hBUAkJPSAweDAwMDAwMDAxLAorCUZDX0FVVEhfUFJPVE9fRkNBUCAJCT0gMHgwMDAwMDAwMiwKKwlGQ19BVVRIX1BST1RPX0ZDUEFQIAkJPSAweDAwMDAwMDAzLAorCUZDX0FVVEhfUFJPVE9fSUtFdjIgCQk9IDB4MDAwMDAwMDQsCisJRkNfQVVUSF9QUk9UT19JS0V2Ml9BVVRIIAk9IDB4MDAwMDAwMDUsCit9OworCitzdHJ1Y3QgYXV0aF9uYW1lX3N7CisJdTE2CW5hbWVfdGFnOwkvKiEgTmFtZSBUYWcgPSAxIGZvciBBdXRoZW50aWNhdGlvbiAqLworCXUxNgluYW1lX2xlbjsJLyohIE5hbWUgTGVuZ3RoID0gOCBmb3IgQXV0aGVudGljYXRpb24KKwkJCQkJICovCisJd3duX3QJCW5hbWU7ICAJCS8qISBOYW1lLiBUT0RPIC0gaXMgdGhpcyBQV1dOICovCit9OworCisKK2VudW0gYXV0aF9oYXNoX2Z1bmN7CisJRkNfQVVUSF9IQVNIX0ZVTkNfTUQ1IAkJPSAweDAwMDAwMDA1LAorCUZDX0FVVEhfSEFTSF9GVU5DX1NIQV8xIAk9IDB4MDAwMDAwMDYsCit9OworCitlbnVtIGF1dGhfZGhfZ2lkeworCUZDX0FVVEhfREhfR0lEXzBfREhHX05VTEwJPSAweDAwMDAwMDAwLAorCUZDX0FVVEhfREhfR0lEXzFfREhHXzEwMjQJPSAweDAwMDAwMDAxLAorCUZDX0FVVEhfREhfR0lEXzJfREhHXzEyODAJPSAweDAwMDAwMDAyLAorCUZDX0FVVEhfREhfR0lEXzNfREhHXzE1MzYJPSAweDAwMDAwMDAzLAorCUZDX0FVVEhfREhfR0lEXzRfREhHXzIwNDgJPSAweDAwMDAwMDA0LAorCUZDX0FVVEhfREhfR0lEXzZfREhHXzMwNzIJPSAweDAwMDAwMDA2LAorCUZDX0FVVEhfREhfR0lEXzdfREhHXzQwOTYJPSAweDAwMDAwMDA3LAorCUZDX0FVVEhfREhfR0lEXzhfREhHXzYxNDQJPSAweDAwMDAwMDA4LAorCUZDX0FVVEhfREhfR0lEXzlfREhHXzgxOTIJPSAweDAwMDAwMDA5LAorfTsKKworc3RydWN0IGF1dGhfZWxzX21zZ19zIHsKKwl1OAkJYXV0aF9lbHNfY29kZTsJLyogIEF1dGhlbnRpY2F0aW9uIEVMUyBDb2RlICgweDkwKSAqLworCXU4IAlhdXRoX2Vsc19mbGFnOyAJLyogIEF1dGhlbnRpY2F0aW9uIEVMUyBGbGFncyAqLworCXU4IAlhdXRoX21zZ19jb2RlOyAJLyogIEF1dGhlbnRpY2F0aW9uIE1lc3NhZ2UgQ29kZSAqLworCXU4IAlwcm90b192ZXJzaW9uOyAJLyogIFByb3RvY29sIFZlcnNpb24gKi8KKwl1MzIJbXNnX2xlbjsgCS8qICBNZXNzYWdlIExlbmd0aCAqLworCXUzMgl0cmFuc19pZDsgCS8qICBUcmFuc2FjdGlvbiBJZGVudGlmaWVyIChUX0lEKSAqLworCisJLyogTXNnIHBheWxvYWQgZm9sbG93cy4uLiAqLworfTsKKworCitlbnVtIGF1dGhfbmVnX3BhcmFtX3RhZ3MgeworCUZDX0FVVEhfTkVHX0RIQ0hBUF9IQVNITElTVCAJPSAweDAwMDEsCisJRkNfQVVUSF9ORUdfREhDSEFQX0RIR19JRF9MSVNUIAk9IDB4MDAwMiwKK307CisKKworc3RydWN0IGRoY2hhcF9wYXJhbV9mb3JtYXRfcyB7CisJdTE2CXRhZzsJCS8qISBQYXJhbWV0ZXIgVGFnLiBTZWUKKwkJCQkJICogYXV0aF9uZWdfcGFyYW1fdGFnc190CisJCQkJCSAqLworCXUxNgl3b3JkX2NudDsKKworCS8qIGZvbGxvd2VkIGJ5IHZhcmlhYmxlIGxlbmd0aCBwYXJhbWV0ZXIgdmFsdWUuLi4gKi8KK307CisKK3N0cnVjdCBhdXRoX3Byb3RvX3BhcmFtc19zIHsKKwl1MzIJcHJvdG9fcGFyYW1fbGVuOworCXUzMglwcm90b19pZDsKKworCS8qCisJICogRm9sbG93ZWQgYnkgdmFyaWFibGUgbGVuZ3RoIFByb3RvY29sIHNwZWNpZmljIHBhcmFtZXRlcnMuIERILUNIQVAKKwkgKiB1c2VzIGRoY2hhcF9wYXJhbV9mb3JtYXRfdAorCSAqLworfTsKKworc3RydWN0IGF1dGhfbmVnX21zZ19zIHsKKwlzdHJ1Y3QgYXV0aF9uYW1lX3MJYXV0aF9pbmlfbmFtZTsKKwl1MzIJCXVzYWJsZV9hdXRoX3Byb3RvczsKKwlzdHJ1Y3QgYXV0aF9wcm90b19wYXJhbXNfcyBwcm90b19wYXJhbXNbMV07IC8qISAoMS4udXNhYmxlX2F1dGhfcHJvdG8pCisJCQkJCQkgICAgICogcHJvdG9jb2wgcGFyYW1zCisJCQkJCQkgICAgICovCit9OworCitzdHJ1Y3QgYXV0aF9kaF92YWxfcyB7CisJdTMyIGRoX3ZhbF9sZW47CisJdTMyIGRoX3ZhbFsxXTsKK307CisKK3N0cnVjdCBhdXRoX2RoY2hhcF9jaGFsX21zZ19zIHsKKwlzdHJ1Y3QgYXV0aF9lbHNfbXNnX3MJaGRyOworCXN0cnVjdCBhdXRoX25hbWVfcyBhdXRoX3Jlc3BvbmRlcl9uYW1lOwkvKiBUT0RPIFZSSyAtIGlzIGF1dGhfbmFtZV90CisJCQkJCQkgKiB0eXBlIE9LPworCQkJCQkJICovCisJdTMyIAloYXNoX2lkOworCXUzMiAJZGhfZ3JwX2lkOworCXUzMiAJY2hhbF92YWxfbGVuOworCWNoYXIJCWNoYWxfdmFsWzFdOworCisJLyogLi4uZm9sbG93ZWQgYnkgdmFyaWFibGUgQ2hhbGxlbmdlIGxlbmd0aC92YWx1ZSBhbmQgREggbGVuZ3RoL3ZhbHVlICovCit9OworCisKK2VudW0gYXV0aF9yanRfY29kZXMgeworCUZDX0FVVEhfUkpUX0NPREVfQVVUSF9GQUlMVVJFIAk9IDB4MDEsCisJRkNfQVVUSF9SSlRfQ09ERV9MT0dJQ0FMX0VSUgk9IDB4MDIsCit9OworCitlbnVtIGF1dGhfcmp0X2NvZGVfZXhwcyB7CisJRkNfQVVUSF9DRVhQX0FVVEhfTUVDSF9OT1RfVVNBQkxFCT0gMHgwMSwKKwlGQ19BVVRIX0NFWFBfREhfR1JPVVBfTk9UX1VTQUJMRSAJPSAweDAyLAorCUZDX0FVVEhfQ0VYUF9IQVNIX0ZVTkNfTk9UX1VTQUJMRSAJPSAweDAzLAorCUZDX0FVVEhfQ0VYUF9BVVRIX1hBQ1RfU1RBUlRFRAkJPSAweDA0LAorCUZDX0FVVEhfQ0VYUF9BVVRIX0ZBSUxFRCAJCT0gMHgwNSwKKwlGQ19BVVRIX0NFWFBfSU5DT1JSRUNUX1BMRCAJCT0gMHgwNiwKKwlGQ19BVVRIX0NFWFBfSU5DT1JSRUNUX1BST1RPX01TRyAJPSAweDA3LAorCUZDX0FVVEhfQ0VYUF9SRVNUQVJUX0FVVEhfUFJPVE8gCT0gMHgwOCwKKwlGQ19BVVRIX0NFWFBfQVVUSF9DT05DQVRfTk9UX1NVUFAgCT0gMHgwOSwKKwlGQ19BVVRIX0NFWFBfUFJPVE9fVkVSX05PVF9TVVBQIAk9IDB4MEEsCit9OworCitlbnVtIGF1dGhfc3RhdHVzIHsKKwlGQ19BVVRIX1NUQVRFX0lOUFJPR1JFU1MgPSAwLCAJLyohIGF1dGhlbnRpY2F0aW9uIGluIHByb2dyZXNzIAkqLworCUZDX0FVVEhfU1RBVEVfRkFJTEVECT0gMSwgCS8qISBhdXRoZW50aWNhdGlvbiBmYWlsZWQgKi8KKwlGQ19BVVRIX1NUQVRFX1NVQ0NFU1MJPSAyIAkvKiEgYXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bAkqLworfTsKKworc3RydWN0IGF1dGhfcmp0X21zZ19zIHsKKwlzdHJ1Y3QgYXV0aF9lbHNfbXNnX3MJaGRyOworCXU4CQlyZWFzb25fY29kZTsKKwl1OAkJcmVhc29uX2NvZGVfZXhwOworCXU4CQlyc3ZkWzJdOworfTsKKworCitzdHJ1Y3QgYXV0aF9kaGNoYXBfbmVnX21zZ19zIHsKKwlzdHJ1Y3QgYXV0aF9lbHNfbXNnX3MgaGRyOworCXN0cnVjdCBhdXRoX25lZ19tc2dfcyBuZWdvOworfTsKKworc3RydWN0IGF1dGhfZGhjaGFwX3JlcGx5X21zZ19zIHsKKwlzdHJ1Y3QgYXV0aF9lbHNfbXNnX3MJaGRyOworCisJLyoKKwkgKiBmb2xsb3dlZCBieSByZXNwb25zZSB2YWx1ZSBsZW5ndGggJiBWYWx1ZSArIERIIFZhbHVlIExlbmd0aCAmIFZhbHVlCisJICovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19GQ19TUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mY3AuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWRlNjhhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjcC5oCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19GQ1BQUk9UT19IX18KKyNkZWZpbmUgX19GQ1BQUk9UT19IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3Njc2kuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0geworCUZDUF9SSlQJCT0gMHgwMTAwMDAwMCwJLyogU1JSIHJlamVjdCAqLworCUZDUF9TUlJfQUNDRVBUCT0gMHgwMjAwMDAwMCwJLyogU1JSIGFjY2VwdCAqLworCUZDUF9TUlIJCT0gMHgxNDAwMDAwMCwJLyogU2VxdWVuY2UgUmV0cmFuc21pc3Npb24gUmVxdWVzdCAqLworfTsKKworLyoKKyAqIFNSUiBGQy00IExTIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3Nycl9zeworCXUzMglsc19jbWQ7CisJdTMyICAgICAgICBveF9pZDoxNjsJLyogb3gtaWQgKi8KKwl1MzIgICAgICAgIHJ4X2lkOjE2OwkvKiByeC1pZCAqLworCXUzMiAgICAgICAgcm87CQkvKiByZWxhdGl2ZSBvZmZzZXQgKi8KKwl1MzIgICAgICAgIHJfY3RsOjg7CQkvKiBSX0NUTCBmb3IgSS5VLiAqLworCXUzMiAgICAgICAgcmVzOjI0OworfTsKKworCisvKgorICogRkNQX0NNTkQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBGQ1BfQ01ORF9DREJfTEVOICAgIDE2CisjZGVmaW5lIEZDUF9DTU5EX0xVTl9MRU4gICAgOAorCitzdHJ1Y3QgZmNwX2NtbmRfc3sKKwlsdW5fdCAgICAgICAgICAgbHVuOwkJLyogNjQtYml0IExVIG51bWJlciAqLworCXU4ICAgICAgICAgY3JuOwkJLyogY29tbWFuZCByZWZlcmVuY2UgbnVtYmVyICovCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc3ZkOjEsCisJCQlwcmlvcml0eTo0LAkvKiBGQ1AtMzogU0FNLTMgcHJpb3JpdHkgKi8KKwkJCXRhc2thdHRyOjM7CS8qIHNjc2kgdGFzayBhdHRyaWJ1dGUgKi8KKyNlbHNlCisJdTggICAgICAgICB0YXNrYXR0cjozLAkvKiBzY3NpIHRhc2sgYXR0cmlidXRlICovCisJCQlwcmlvcml0eTo0LAkvKiBGQ1AtMzogU0FNLTMgcHJpb3JpdHkgKi8KKwkJCXJlc3ZkOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHRtX2ZsYWdzOwkvKiB0YXNrIG1hbmFnZW1lbnQgZmxhZ3MgKi8KKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgYWRkbF9jZGJfbGVuOjYsCS8qIGFkZGl0aW9uYWwgQ0RCIGxlbmd0aCB3b3JkcyAqLworCQkJaW9kaXI6MjsJLyogcmVhZC93cml0ZSBGQ1BfREFUQSBJVXMgKi8KKyNlbHNlCisJdTggICAgICAgICBpb2RpcjoyLAkvKiByZWFkL3dyaXRlIEZDUF9EQVRBIElVcyAqLworCQkJYWRkbF9jZGJfbGVuOjY7CS8qIGFkZGl0aW9uYWwgQ0RCIGxlbmd0aCAqLworI2VuZGlmCisJc3RydWN0IHNjc2lfY2RiX3MgICAgICBjZGI7CisKKwkvKgorCSAqICEhISBhZGRpdGlvbmFsIGNkYiBieXRlcyBmb2xsb3dzIGhlcmUhISEKKwkgKi8KKwl1MzIgICAgICAgIGZjcF9kbDsJLyogYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQgKi8KK307CisKKyNkZWZpbmUgZmNwX2NtbmRfY2RiX2xlbihfY21uZCkgKChfY21uZCktPmFkZGxfY2RiX2xlbiAqIDQgKyBGQ1BfQ01ORF9DREJfTEVOKQorI2RlZmluZSBmY3BfY21uZF9mY3BkbChfY21uZCkJKCgmKF9jbW5kKS0+ZmNwX2RsKVsoX2NtbmQpLT5hZGRsX2NkYl9sZW5dKQorCisvKgorICogZmNwX2NtbmRfdC5pb2RpciBmaWVsZCB2YWx1ZXMKKyAqLworZW51bSBmY3BfaW9kaXJ7CisJRkNQX0lPRElSX05PTkUJPSAwLAorCUZDUF9JT0RJUl9XUklURSA9IDEsCisJRkNQX0lPRElSX1JFQUQJPSAyLAorCUZDUF9JT0RJUl9SVwk9IDMsCit9OworCisvKgorICogVGFzayBhdHRyaWJ1dGUgZmllbGQKKyAqLworZW51bSB7CisJRkNQX1RBU0tfQVRUUl9TSU1QTEUJPSAwLAorCUZDUF9UQVNLX0FUVFJfSE9RCT0gMSwKKwlGQ1BfVEFTS19BVFRSX09SREVSRUQJPSAyLAorCUZDUF9UQVNLX0FUVFJfQUNBCT0gNCwKKwlGQ1BfVEFTS19BVFRSX1VOVEFHR0VECT0gNSwJLyogb2Jzb2xldGUgaW4gRkNQLTMgKi8KK307CisKKy8qCisgKiBUYXNrIG1hbmFnZW1lbnQgZmxhZ3MgZmllbGQgLSBvbmx5IG9uZSBiaXQgc2hhbGwgYmUgc2V0CisgKi8KKyNpZm5kZWYgQklUCisjZGVmaW5lIEJJVChfeCkJKDEgPDwgKF94KSkKKyNlbmRpZgorZW51bSBmY3BfdG1fY21uZHsKKwlGQ1BfVE1fQUJPUlRfVEFTS19TRVQJPSBCSVQoMSksCisJRkNQX1RNX0NMRUFSX1RBU0tfU0VUCT0gQklUKDIpLAorCUZDUF9UTV9MVU5fUkVTRVQJPSBCSVQoNCksCisJRkNQX1RNX1RBUkdFVF9SRVNFVAk9IEJJVCg1KSwJLyogb2Jzb2xldGUgaW4gRkNQLTMgKi8KKwlGQ1BfVE1fQ0xFQVJfQUNBCT0gQklUKDYpLAorfTsKKworLyoKKyAqIEZDUF9YRkVSX1JEWSBJVSBkZWZpbmVzCisgKi8KK3N0cnVjdCBmY3BfeGZlcl9yZHlfc3sKKwl1MzIgICAgICAgIGRhdGFfcm87CisJdTMyICAgICAgICBidXJzdF9sZW47CisJdTMyICAgICAgICByZXNlcnZlZDsKK307CisKKy8qCisgKiBGQ1BfUlNQIHJlc2lkdWUgZmxhZ3MKKyAqLworZW51bSBmY3BfcmVzaWR1ZXsKKwlGQ1BfTk9fUkVTSURVRSA9IDAsCS8qIG5vIHJlc2lkdWUgKi8KKwlGQ1BfUkVTSURfT1ZFUiA9IDEsCS8qIG1vcmUgZGF0YSBsZWZ0IHRoYXQgd2FzIG5vdCBzZW50ICovCisJRkNQX1JFU0lEX1VOREVSID0gMiwJLyogbGVzcyBkYXRhIHRoYW4gcmVxdWVzdGVkICovCit9OworCitlbnVtIHsKKwlGQ1BfUlNQSU5GT19HT09EID0gMCwKKwlGQ1BfUlNQSU5GT19EQVRBTEVOX01JU01BVENIID0gMSwKKwlGQ1BfUlNQSU5GT19DTU5EX0lOVkFMSUQgPSAyLAorCUZDUF9SU1BJTkZPX1JPTEVOX01JU01BVENIID0gMywKKwlGQ1BfUlNQSU5GT19UTV9OT1RfU1VQUCA9IDQsCisJRkNQX1JTUElORk9fVE1fRkFJTEVEID0gNSwKK307CisKK3N0cnVjdCBmY3BfcnNwaW5mb19zeworCXUzMiAgICAgICAgcmVzMDoyNDsKKwl1MzIgICAgICAgIHJzcF9jb2RlOjg7CS8qIHJlc3BvbnNlIGNvZGUgKGFzIGFib3ZlKSAqLworCXUzMiAgICAgICAgcmVzMTsKK307CisKK3N0cnVjdCBmY3BfcmVzcF9zeworCXUzMiAgICAgICAgcmVzZXJ2ZWRbMl07CS8qIDIgd29yZHMgcmVzZXJ2ZWQgKi8KKwl1MTYgICAgICAgIHJlc2VydmVkMjsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CisJdTggICAgICAgICBmY3BfY29uZl9yZXE6MTsJLyogRkNQX0NPTkYgaXMgcmVxdWVzdGVkICovCisJdTggICAgICAgICByZXNpZF9mbGFnczoyOwkvKiB1bmRlcmZsb3cvb3ZlcmZsb3cgKi8KKwl1OCAgICAgICAgIHNuc19sZW5fdmFsaWQ6MTsvKiBzZW5zZSBsZW4gaXMgdmFsaWQgKi8KKwl1OCAgICAgICAgIHJzcF9sZW5fdmFsaWQ6MTsvKiByZXNwb25zZSBsZW4gaXMgdmFsaWQgKi8KKyNlbHNlCisJdTggICAgICAgICByc3BfbGVuX3ZhbGlkOjE7LyogcmVzcG9uc2UgbGVuIGlzIHZhbGlkICovCisJdTggICAgICAgICBzbnNfbGVuX3ZhbGlkOjE7Lyogc2Vuc2UgbGVuIGlzIHZhbGlkICovCisJdTggICAgICAgICByZXNpZF9mbGFnczoyOwkvKiB1bmRlcmZsb3cvb3ZlcmZsb3cgKi8KKwl1OCAgICAgICAgIGZjcF9jb25mX3JlcToxOwkvKiBGQ1BfQ09ORiBpcyByZXF1ZXN0ZWQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzozOworI2VuZGlmCisJdTggICAgICAgICBzY3NpX3N0YXR1czsJLyogb25lIGJ5dGUgU0NTSSBzdGF0dXMgKi8KKwl1MzIgICAgICAgIHJlc2lkdWU7CS8qIHJlc2lkdWFsIGRhdGEgYnl0ZXMgKi8KKwl1MzIgICAgICAgIHNuc19sZW47CS8qIGxlbmd0aCBvZCBzZW5zZSBpbmZvICovCisJdTMyICAgICAgICByc3BfbGVuOwkvKiBsZW5ndGggb2YgcmVzcG9uc2UgaW5mbyAqLworfTsKKworI2RlZmluZSBmY3Bfc25zbGVuKF9fZmNwcnNwKQkoKF9fZmNwcnNwKS0+c25zX2xlbl92YWxpZCA/IAkJXAorCQkJCQkoX19mY3Byc3ApLT5zbnNfbGVuIDogMCkKKyNkZWZpbmUgZmNwX3JzcGxlbihfX2ZjcHJzcCkJKChfX2ZjcHJzcCktPnJzcF9sZW5fdmFsaWQgPyAJCVwKKwkJCQkJKF9fZmNwcnNwKS0+cnNwX2xlbiA6IDApCisjZGVmaW5lIGZjcF9yc3BpbmZvKF9fZmNwcnNwKQkoKHN0cnVjdCBmY3BfcnNwaW5mb19zICopKChfX2ZjcHJzcCkgKyAxKSkKKyNkZWZpbmUgZmNwX3Nuc2luZm8oX19mY3Byc3ApCSgoKHU4ICopZmNwX3JzcGluZm8oX19mY3Byc3ApKSArIAlcCisJCQkJCQlmY3BfcnNwbGVuKF9fZmNwcnNwKSkKKworc3RydWN0IGZjcF9jbW5kX2ZyX3N7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBmY3BfY21uZF9zICAgICAgZmNwOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmRtaS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZkbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzA1YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZkbWkuaApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fRkRNSV9IX18KKyNkZWZpbmUgX19GRE1JX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2N0Lmg+CisKKyNwcmFnbWEgcGFjaygxKQorCisvKgorICogRkRNSSBDb21tYW5kIENvZGVzCisgKi8KKyNkZWZpbmUJRkRNSV9HUkhMCQkweDAxMDAKKyNkZWZpbmUJRkRNSV9HSEFUCQkweDAxMDEKKyNkZWZpbmUJRkRNSV9HUlBMCQkweDAxMDIKKyNkZWZpbmUJRkRNSV9HUEFUCQkweDAxMTAKKyNkZWZpbmUJRkRNSV9SSEJBCQkweDAyMDAKKyNkZWZpbmUJRkRNSV9SSEFUCQkweDAyMDEKKyNkZWZpbmUJRkRNSV9SUFJUCQkweDAyMTAKKyNkZWZpbmUJRkRNSV9SUEEJCTB4MDIxMQorI2RlZmluZQlGRE1JX0RIQkEJCTB4MDMwMAorI2RlZmluZQlGRE1JX0RQUlQJCTB4MDMxMAorCisvKgorICogRkRNSSByZWFzb24gY29kZXMKKyAqLworI2RlZmluZQlGRE1JX05PX0FERElUSU9OQUxfRVhQCQkweDAwCisjZGVmaW5lCUZETUlfSEJBX0FMUkVBRFlfUkVHCQkweDEwCisjZGVmaW5lCUZETUlfSEJBX0FUVFJJQl9OT1RfUkVHCQkweDExCisjZGVmaW5lCUZETUlfSEJBX0FUVFJJQl9NVUxUSVBMRQkweDEyCisjZGVmaW5lCUZETUlfSEJBX0FUVFJJQl9MRU5HVEhfSU5WQUxJRAkweDEzCisjZGVmaW5lCUZETUlfSEJBX0FUVFJJQl9OT1RfUFJFU0VOVAkweDE0CisjZGVmaW5lCUZETUlfUE9SVF9PUklHX05PVF9JTl9MSVNUCTB4MTUKKyNkZWZpbmUJRkRNSV9QT1JUX0hCQV9OT1RfSU5fTElTVAkweDE2CisjZGVmaW5lCUZETUlfUE9SVF9BVFRSSUJfTk9UX1JFRwkweDIwCisjZGVmaW5lCUZETUlfUE9SVF9OT1RfUkVHCQkweDIxCisjZGVmaW5lCUZETUlfUE9SVF9BVFRSSUJfTVVMVElQTEUJMHgyMgorI2RlZmluZQlGRE1JX1BPUlRfQVRUUklCX0xFTkdUSF9JTlZBTElECTB4MjMKKyNkZWZpbmUJRkRNSV9QT1JUX0FMUkVBRFlfUkVHSVNURVJFRUQJMHgyNAorCisvKgorICogRkRNSSBUcmFuc21pc3Npb24gU3BlZWQgTWFzayB2YWx1ZXMKKyAqLworI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEXzFHCQkweDAwMDAwMDAxCisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfMkcJCTB4MDAwMDAwMDIKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF8xMEcJCTB4MDAwMDAwMDQKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF80RwkJMHgwMDAwMDAwOAorI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEXzhHCQkweDAwMDAwMDEwCisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfMTZHCQkweDAwMDAwMDIwCisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfVU5LTk9XTgkweDAwMDA4MDAwCisKKy8qCisgKiBGRE1JIEhCQSBhdHRyaWJ1dGUgdHlwZXMKKyAqLworZW51bSBmZG1pX2hiYV9hdHRyaWJ1dGVfdHlwZSB7CisJRkRNSV9IQkFfQVRUUklCX05PREVOQU1FID0gMSwJLyogMHgwMDAxICovCisJRkRNSV9IQkFfQVRUUklCX01BTlVGQUNUVVJFUiwJLyogMHgwMDAyICovCisJRkRNSV9IQkFfQVRUUklCX1NFUklBTE5VTSwJLyogMHgwMDAzICovCisJRkRNSV9IQkFfQVRUUklCX01PREVMLAkJLyogMHgwMDA0ICovCisJRkRNSV9IQkFfQVRUUklCX01PREVMX0RFU0MsCS8qIDB4MDAwNSAqLworCUZETUlfSEJBX0FUVFJJQl9IV19WRVJTSU9OLAkvKiAweDAwMDYgKi8KKwlGRE1JX0hCQV9BVFRSSUJfRFJJVkVSX1ZFUlNJT04sCS8qIDB4MDAwNyAqLworCUZETUlfSEJBX0FUVFJJQl9ST01fVkVSU0lPTiwJLyogMHgwMDA4ICovCisJRkRNSV9IQkFfQVRUUklCX0ZXX1ZFUlNJT04sCS8qIDB4MDAwOSAqLworCUZETUlfSEJBX0FUVFJJQl9PU19OQU1FLAkvKiAweDAwMEEgKi8KKwlGRE1JX0hCQV9BVFRSSUJfTUFYX0NULAkJLyogMHgwMDBCICovCisKKwlGRE1JX0hCQV9BVFRSSUJfTUFYX1RZUEUKK307CisKKy8qCisgKiBGRE1JIFBvcnQgYXR0cmlidXRlIHR5cGVzCisgKi8KK2VudW0gZmRtaV9wb3J0X2F0dHJpYnV0ZV90eXBlIHsKKwlGRE1JX1BPUlRfQVRUUklCX0ZDNF9UWVBFUyA9IDEsCS8qIDB4MDAwMSAqLworCUZETUlfUE9SVF9BVFRSSUJfU1VQUF9TUEVFRCwJLyogMHgwMDAyICovCisJRkRNSV9QT1JUX0FUVFJJQl9QT1JUX1NQRUVELAkvKiAweDAwMDMgKi8KKwlGRE1JX1BPUlRfQVRUUklCX0ZSQU1FX1NJWkUsCS8qIDB4MDAwNCAqLworCUZETUlfUE9SVF9BVFRSSUJfREVWX05BTUUsCS8qIDB4MDAwNSAqLworCUZETUlfUE9SVF9BVFRSSUJfSE9TVF9OQU1FLAkvKiAweDAwMDYgKi8KKworCUZETUlfUE9SVF9BVFRSX01BWF9UWVBFCit9OworCisvKgorICogRkRNSSBhdHRyaWJ1dGUKKyAqLworc3RydWN0IGZkbWlfYXR0cl9zIHsKKwl1MTYgICAgICAgIHR5cGU7CisJdTE2ICAgICAgICBsZW47CisJdTggICAgICAgICB2YWx1ZVsxXTsKK307CisKKy8qCisgKiBIQkEgQXR0cmlidXRlIEJsb2NrCisgKi8KK3N0cnVjdCBmZG1pX2hiYV9hdHRyX3MgeworCXUzMiAgICAgICAgYXR0cl9jb3VudDsJLyogIyBvZiBhdHRyaWJ1dGVzICovCisJc3RydWN0IGZkbWlfYXR0cl9zICAgICBoYmFfYXR0cjsJLyogbiBhdHRyaWJ1dGVzICovCit9OworCisvKgorICogUmVnaXN0ZXJlZCBQb3J0IExpc3QKKyAqLworc3RydWN0IGZkbWlfcG9ydF9saXN0X3MgeworCXUzMiAgICAgICAgbnVtX3BvcnRzOwkvKiBudW1iZXIgT2YgUG9ydCBFbnRyaWVzICovCisJd3duX3QgICAgICAgICAgIHBvcnRfZW50cnk7CS8qIG9uZSBvciBtb3JlICovCit9OworCisvKgorICogUG9ydCBBdHRyaWJ1dGUgQmxvY2sKKyAqLworc3RydWN0IGZkbWlfcG9ydF9hdHRyX3MgeworCXUzMiAgICAgICAgYXR0cl9jb3VudDsJLyogIyBvZiBhdHRyaWJ1dGVzICovCisJc3RydWN0IGZkbWlfYXR0cl9zICAgICBwb3J0X2F0dHI7CS8qIG4gYXR0cmlidXRlcyAqLworfTsKKworLyoKKyAqIEZETUkgUmVnaXN0ZXIgSEJBIEF0dHJpYnV0ZXMKKyAqLworc3RydWN0IGZkbWlfcmhiYV9zIHsKKwl3d25fdCAgICAgICAgICAgaGJhX2lkOwkJLyogSEJBIElkZW50aWZpZXIgKi8KKwlzdHJ1Y3QgZmRtaV9wb3J0X2xpc3RfcyBwb3J0X2xpc3Q7CS8qIFJlZ2lzdGVyZWQgUG9ydCBMaXN0ICovCisJc3RydWN0IGZkbWlfaGJhX2F0dHJfcyBoYmFfYXR0cl9ibGs7CS8qIEhCQSBhdHRyaWJ1dGUgYmxvY2sgKi8KK307CisKKy8qCisgKiBGRE1JIFJlZ2lzdGVyIFBvcnQKKyAqLworc3RydWN0IGZkbWlfcnBydF9zIHsKKwl3d25fdCAgICAgICAgICAgaGJhX2lkOwkJLyogSEJBIElkZW50aWZpZXIgKi8KKwl3d25fdCAgICAgICAgICAgcG9ydF9uYW1lOwkvKiBQb3J0IHd3biAqLworCXN0cnVjdCBmZG1pX3BvcnRfYXR0cl9zIHBvcnRfYXR0cl9ibGs7CS8qIFBvcnQgQXR0ciBCbG9jayAqLworfTsKKworLyoKKyAqIEZETUkgUmVnaXN0ZXIgUG9ydCBBdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBmZG1pX3JwYV9zIHsKKwl3d25fdCAgICAgICAgICAgcG9ydF9uYW1lOwkvKiBwb3J0IHd3biAqLworCXN0cnVjdCBmZG1pX3BvcnRfYXR0cl9zIHBvcnRfYXR0cl9ibGs7CS8qIFBvcnQgQXR0ciBCbG9jayAqLworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvcGNpZncuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9wY2lmdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MzBkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvcGNpZncuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIHBjaWZ3LmggUENJIEZXIHJlbGF0ZWQgaGVhZGVycworICovCisKKyNpZm5kZWYgX19QQ0lGV19IX18KKyNkZWZpbmUgX19QQ0lGV19IX18KKworI3ByYWdtYSBwYWNrKDEpCisKK3N0cnVjdCBwbnBfaGRyX3N7CisgIHUzMglzaWduYXR1cmU7CS8qICIkUG5QIiAqLworICB1OAlyZXY7CQkvKiBTdHJ1Y3QgcmV2aXNpb24gKi8KKyAgdTggCWxlbjsJCS8qIEhlYWRlciBzdHJ1Y3R1cmUgbGVuIGluIG11bHRpcGxlcworCQkJCSAqIG9mIDE2IGJ5dGVzICovCisgIHUxNiAgb2ZmOwkJLyogT2Zmc2V0IHRvIG5leHQgaGVhZGVyIDAwIGlmIG5vbmUgKi8KKyAgdTgJcnN2ZDsJCS8qIFJlc2VydmVkIGJ5dGUgKi8KKyAgdTgJY2tzdW07CQkvKiA4LWJpdCBjaGVja3N1bSBmb3IgdGhpcyBoZWFkZXIgKi8KKyAgdTMyCXBucF9kZXZfaWQ7CS8qIFBuUCBEZXZpY2UgSWQgKi8KKyAgdTE2ICBtZnN0cjsJCS8qIFBvaW50ZXIgdG8gbWFudWZhY3R1cmVyIHN0cmluZyAqLworICB1MTYJcHJzdHI7CQkvKiBQb2ludGVyIHRvIHByb2R1Y3Qgc3RyaW5nICovCisgIHU4CWRldnR5cGVbM107CS8qIERldmljZSBUeXBlIENvZGUgKi8KKyAgdTgJZGV2aW5kOwkJLyogRGV2aWNlIEluZGljYXRvciAqLworICB1MTYJYmN2ZW50cjsJLyogQm9vdHN0cmFwIGVudHJ5IHZlY3RvciAqLworICB1MTYJcnN2ZDI7CQkvKiBSZXNlcnZlZCAqLworICB1MTYgIHNyaXY7CQkvKiBTdGF0aWMgcmVzb3VyY2UgaW5mb3JtYXRpb24gdmVjdG9yICovCit9OworCitzdHJ1Y3QgcGNpXzNfMF9kc19zeworIHUzMglzaWc7ICAgCQkvKiBTaWduYXR1cmUgIlBDSVIiICovCisgdTE2CXZlbmRpZDsJCS8qIFZlbmRvciBJRCAqLworIHUxNglkZXZpZDsJCS8qIERldmljZSBJRCAqLworIHUxNglkZXZsaXN0b2ZmOwkvKiBEZXZpY2UgTGlzdCBPZmZzZXQgKi8KKyB1MTYJbGVuOwkJLyogUENJIERhdGEgU3RydWN0dXJlIExlbmd0aCAqLworIHU4CXJldjsJCS8qIFBDSSBEYXRhIFN0cnVjdHVyZSBSZXZpc2lvbiAqLworIHU4CWNsY29kZVszXTsJLyogQ2xhc3MgQ29kZSAqLworIHUxNglpbWdsZW47CQkvKiBDb2RlIGltYWdlIGxlbmd0aCBpbiBtdWx0aXBsZXMgb2YKKwkJCQkgKiA1MTIgYnl0ZXMgKi8KKyB1MTYJY29kZXJldjsJLyogUmV2aXNpb24gbGV2ZWwgb2YgY29kZS9kYXRhICovCisgdTgJY29kZXR5cGU7CS8qIENvZGUgdHlwZSAweDAwIC0gQklPUyAqLworIHU4CWluZHI7CQkvKiBMYXN0IGltYWdlIGluZGljYXRvciAqLworIHUxNgltcnRpbWdsZW47CS8qIE1heCBSdW4gVGltZSBJbWFnZSBMZW5ndGggKi8KKyB1MTYJY3VvZmY7CQkvKiBDb25maWcgVXRpbGl0eSBDb2RlIEhlYWRlciBPZmZzZXQgKi8KKyB1MTYJZG10ZmNscDsJLyogRE1URiBDTFAgZW50cnkgcG9pbnQgb2Zmc2V0ICovCit9OworCitzdHJ1Y3QgcGNpX29wdHJvbV9oZHJfc3sKKyB1MTYJc2lnOwkJLyogU2lnbmF0dXJlIDB4NTVBQSAqLworIHU4CWxlbjsJCS8qIE9wdGlvbiBST00gbGVuZ3RoIGluIHVuaXRzIG9mIDUxMiBieXRlcyAqLworIHU4CWluaXZlY1szXTsJLyogSW5pdGlhbGl6YXRpb24gdmVjdG9yICovCisgdTgJcnN2ZFsxNl07CS8qIFJlc2VydmVkIGZpZWxkICovCisgdTE2CXZlcnB0cjsJCS8qIFBvaW50ZXIgdG8gdmVyc2lvbiBzdHJpbmcgLSBwcml2YXRlICovCisgdTE2CXBjaWRzOwkJLyogUG9pbnRlciB0byBQQ0kgZGF0YSBzdHJ1Y3R1cmUgKi8KKyB1MTYJcG5waGRyOwkJLyogUG9pbnRlciB0byBQblAgZXhwYW5zaW9uIGhlYWRlciAqLworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvc2NzaS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3Njc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjIwZTZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3Njc2kuaApAQCAtMCwwICsxLDE2NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX1NDU0lfSF9fCisjZGVmaW5lIF9fU0NTSV9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCisvKgorICogZ2VuZXJpYyBTQ1NJIGNkYiBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgU0NTSV9NQVhfQ0RCTEVOICAgICAxNgorc3RydWN0IHNjc2lfY2RiX3N7CisJdTggICAgICAgICBzY3NpX2NkYltTQ1NJX01BWF9DREJMRU5dOworfTsKKworLyoKKyAqIHNjc2kgbHVuIHNlcmlhbCBudW1iZXIgZGVmaW5pdGlvbgorICovCisjZGVmaW5lIFNDU0lfTFVOX1NOX0xFTiAgICAgMzIKK3N0cnVjdCBzY3NpX2x1bl9zbl9zeworCXU4ICAgICAgICAgbHVuX3NuW1NDU0lfTFVOX1NOX0xFTl07Cit9OworCisvKgorICogU0NTSSBEaXJlY3QgQWNjZXNzIENvbW1hbmRzCisgKi8KK2VudW0geworCVNDU0lfT1BfVEVTVF9VTklUX1JFQURZCQk9IDB4MDAsCisJU0NTSV9PUF9SRVFVRVNUX1NFTlNFCQk9IDB4MDMsCisJU0NTSV9PUF9GT1JNQVRfVU5JVAkJPSAweDA0LAorCVNDU0lfT1BfUkVBRDYJCQk9IDB4MDgsCisJU0NTSV9PUF9XUklURTYJCQk9IDB4MEEsCisJU0NTSV9PUF9XUklURV9GSUxFTUFSS1MJCT0gMHgxMCwKKwlTQ1NJX09QX0lOUVVJUlkJCQk9IDB4MTIsCisJU0NTSV9PUF9NT0RFX1NFTEVDVDYJCT0gMHgxNSwKKwlTQ1NJX09QX1JFU0VSVkU2CQk9IDB4MTYsCisJU0NTSV9PUF9SRUxFQVNFNgkJPSAweDE3LAorCVNDU0lfT1BfTU9ERV9TRU5TRTYJCT0gMHgxQSwKKwlTQ1NJX09QX1NUQVJUX1NUT1BfVU5JVAkJPSAweDFCLAorCVNDU0lfT1BfU0VORF9ESUFHTk9TVElDCQk9IDB4MUQsCisJU0NTSV9PUF9SRUFEX0NBUEFDSVRZCQk9IDB4MjUsCisJU0NTSV9PUF9SRUFEMTAJCQk9IDB4MjgsCisJU0NTSV9PUF9XUklURTEwCQkJPSAweDJBLAorCVNDU0lfT1BfVkVSSUZZMTAJCT0gMHgyRiwKKwlTQ1NJX09QX1JFQURfREVGRUNUX0RBVEEJPSAweDM3LAorCVNDU0lfT1BfTE9HX1NFTEVDVAkJPSAweDRDLAorCVNDU0lfT1BfTE9HX1NFTlNFCQk9IDB4NEQsCisJU0NTSV9PUF9NT0RFX1NFTEVDVDEwCQk9IDB4NTUsCisJU0NTSV9PUF9SRVNFUlZFMTAJCT0gMHg1NiwKKwlTQ1NJX09QX1JFTEVBU0UxMAkJPSAweDU3LAorCVNDU0lfT1BfTU9ERV9TRU5TRTEwCQk9IDB4NUEsCisJU0NTSV9PUF9QRVJfUkVTRVJWRV9JTgkJPSAweDVFLAorCVNDU0lfT1BfUEVSX1JFU0VSVkVfT1VSCQk9IDB4NUUsCisJU0NTSV9PUF9SRUFEMTYJCQk9IDB4ODgsCisJU0NTSV9PUF9XUklURTE2CQkJPSAweDhBLAorCVNDU0lfT1BfVkVSSUZZMTYJCT0gMHg4RiwKKwlTQ1NJX09QX1JFQURfQ0FQQUNJVFkxNgkJPSAweDlFLAorCVNDU0lfT1BfUkVQT1JUX0xVTlMJCT0gMHhBMCwKKwlTQ1NJX09QX1JFQUQxMgkJCT0gMHhBOCwKKwlTQ1NJX09QX1dSSVRFMTIJCQk9IDB4QUEsCisJU0NTSV9PUF9VTkRFRgkJCT0gMHhGRiwKK307CisKKy8qCisgKiBTQ1NJIFNUQVJUX1NUT1BfVU5JVCBjb21tYW5kCisgKi8KK3N0cnVjdCBzY3NpX3N0YXJ0X3N0b3BfdW5pdF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIHJlc2VydmVkMTo0OworCXU4ICAgICAgICAgaW1tZWQ6MTsKKyNlbHNlCisJdTggICAgICAgICBpbW1lZDoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjQ7CisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwb3dlcl9jb25kaXRpb25zOjQ7CisJdTggICAgICAgICByZXNlcnZlZDQ6MjsKKwl1OCAgICAgICAgIGxvRWo6MTsKKwl1OCAgICAgICAgIHN0YXJ0OjE7CisjZWxzZQorCXU4ICAgICAgICAgc3RhcnQ6MTsKKwl1OCAgICAgICAgIGxvRWo6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkNDoyOworCXU4ICAgICAgICAgcG93ZXJfY29uZGl0aW9uczo0OworI2VuZGlmCisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIFNDU0kgU0VORF9ESUFHTk9TVElDIGNvbW1hbmQKKyAqLworc3RydWN0IHNjc2lfc2VuZF9kaWFnbm9zdGljX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHNlbGZfdGVzdF9jb2RlOjM7CisJdTggICAgICAgICBwZjoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBzZWxmX3Rlc3Q6MTsKKwl1OCAgICAgICAgIGRldl9vZmZsOjE7CisJdTggICAgICAgICB1bml0X29mZmw6MTsKKyNlbHNlCisJdTggICAgICAgICB1bml0X29mZmw6MTsKKwl1OCAgICAgICAgIGRldl9vZmZsOjE7CisJdTggICAgICAgICBzZWxmX3Rlc3Q6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGY6MTsKKwl1OCAgICAgICAgIHNlbGZfdGVzdF9jb2RlOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkMjsKKworCXU4ICAgICAgICAgcGFyYW1fbGlzdF9sZW5ndGhbMl07CS8qIE1TQiBmaXJzdCAqLworCXU4ICAgICAgICAgY29udHJvbDsKKworfTsKKworLyoKKyAqIFNDU0kgUkVBRDEwL1dSSVRFMTAgY29tbWFuZHMKKyAqLworc3RydWN0IHNjc2lfcncxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIGRwbzoxOwkvKiBEaXNhYmxlIFBhZ2UgT3V0ICovCisJdTggICAgICAgICBmdWE6MTsJLyogRm9yY2UgVW5pdCBBY2Nlc3MgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMToyOworCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisjZWxzZQorCXU4ICAgICAgICAgcmVsX2FkcjoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTggICAgICAgICBmdWE6MTsKKwl1OCAgICAgICAgIGRwbzoxOworCXU4ICAgICAgICAgbHVuOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIGxiYTA7CS8qIGxvZ2ljYWwgYmxvY2sgYWRkcmVzcyAtIE1TQiAqLworCXU4ICAgICAgICAgbGJhMTsKKwl1OCAgICAgICAgIGxiYTI7CisJdTggICAgICAgICBsYmEzOwkvKiBMU0IgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzsKKwl1OCAgICAgICAgIHhmZXJfbGVuZ3RoMDsJLyogdHJhbnNmZXIgbGVuZ3RoIGluIGJsb2NrcyAtIE1TQiAqLworCXU4ICAgICAgICAgeGZlcl9sZW5ndGgxOwkvKiBMU0IgKi8KKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisjZGVmaW5lIFNDU0lfQ0RCMTBfR0VUX0xCQShjZGIpICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoKGNkYiktPmxiYTAgPDwgMjQpIHwgKChjZGIpLT5sYmExIDw8IDE2KSB8ICAgIFwKKyAgICAgKChjZGIpLT5sYmEyIDw8IDgpIHwgKGNkYiktPmxiYTMpCisKKyNkZWZpbmUgU0NTSV9DREIxMF9TRVRfTEJBKGNkYiwgbGJhKSB7ICAgICAgXAorICAgIChjZGIpLT5sYmEwID0gbGJhID4+IDI0OyAgICAgICAgICAgIFwKKyAgICAoY2RiKS0+bGJhMSA9IChsYmEgPj4gMTYpICYgMHhGRjsgICBcCisgICAgKGNkYiktPmxiYTIgPSAobGJhID4+IDgpICYgMHhGRjsgICAgXAorICAgIChjZGIpLT5sYmEzID0gbGJhICYgMHhGRjsgICAgICAgICAgIFwKK30KKworI2RlZmluZSBTQ1NJX0NEQjEwX0dFVF9UTChjZGIpICBcCisgICAgKChjZGIpLT54ZmVyX2xlbmd0aDAgPDwgOCB8IChjZGIpLT54ZmVyX2xlbmd0aDEpCisjZGVmaW5lIFNDU0lfQ0RCMTBfU0VUX1RMKGNkYiwgdGwpIHsgICAgICBcCisgICAgKGNkYiktPnhmZXJfbGVuZ3RoMCA9IHRsID4+IDg7ICAgICAgIFwKKyAgICAoY2RiKS0+eGZlcl9sZW5ndGgxID0gdGwgJiAweEZGOyAgICAgXAorfQorCisvKgorICogU0NTSSBSRUFENi9XUklURTYgY29tbWFuZHMKKyAqLworc3RydWN0IHNjc2lfcnc2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgbGJhMDo1OwkJLyogTVNiICovCisjZWxzZQorCXU4ICAgICAgICAgbGJhMDo1OwkJLyogTVNiICovCisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgbGJhMTsKKwl1OCAgICAgICAgIGxiYTI7CQkvKiBMU0IgKi8KKwl1OCAgICAgICAgIHhmZXJfbGVuZ3RoOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9UQVBFX0NEQjZfR0VUX1RMKGNkYikgICAgICAgICAgICAgIFwKKyAgICAoKChjZGIpLT50bDAgPDwgMTYpIHwgKChjZGIpLT50bDEgPDwgOCkgfCAoY2RiKS0+dGwyKQorCisjZGVmaW5lIFNDU0lfVEFQRV9DREI2X1NFVF9UTChjZGIsIHRsKSB7ICAgICAgXAorICAgIChjZGIpLT50bDAgPSB0bCA+PiAxNjsgICAgICAgICAgICBcCisgICAgKGNkYiktPnRsMSA9ICh0bCA+PiA4KSAmIDB4RkY7ICAgIFwKKyAgICAoY2RiKS0+dGwyID0gdGwgJiAweEZGOyAgICAgICAgICAgXAorfQorCisvKgorICogU0NTSSBzZXF1ZW50aWFsIChUQVBFKSB3cnRpZSBjb21tYW5kCisgKi8KK3N0cnVjdCBzY3NpX3RhcGVfd3Jfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcnN2ZDo3OworCXU4ICAgICAgICAgZml4ZWQ6MTsJLyogTVNiICovCisjZWxzZQorCXU4ICAgICAgICAgZml4ZWQ6MTsJLyogTVNiICovCisJdTggICAgICAgICByc3ZkOjc7CisjZW5kaWYKKwl1OCAgICAgICAgIHRsMDsJCS8qIE1zYiAqLworCXU4ICAgICAgICAgdGwxOworCXU4ICAgICAgICAgdGwyOwkJLyogTHNiICovCisKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisjZGVmaW5lIFNDU0lfQ0RCNl9HRVRfTEJBKGNkYikgICAgICAgICAgICAgIFwKKyAgICAoKChjZGIpLT5sYmEwIDw8IDE2KSB8ICgoY2RiKS0+bGJhMSA8PCA4KSB8IChjZGIpLT5sYmEyKQorCisjZGVmaW5lIFNDU0lfQ0RCNl9TRVRfTEJBKGNkYiwgbGJhKSB7ICAgICAgXAorICAgIChjZGIpLT5sYmEwID0gbGJhID4+IDE2OyAgICAgICAgICAgIFwKKyAgICAoY2RiKS0+bGJhMSA9IChsYmEgPj4gOCkgJiAweEZGOyAgICBcCisgICAgKGNkYiktPmxiYTIgPSBsYmEgJiAweEZGOyAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFNDU0lfQ0RCNl9HRVRfVEwoY2RiKSAoKGNkYiktPnhmZXJfbGVuZ3RoKQorI2RlZmluZSBTQ1NJX0NEQjZfU0VUX1RMKGNkYiwgdGwpIHsgICAgICBcCisgICAgKGNkYiktPnhmZXJfbGVuZ3RoID0gdGw7ICAgICAgICAgXAorfQorCisvKgorICogU0NTSSBzZW5zZSBkYXRhIGZvcm1hdAorICovCitzdHJ1Y3Qgc2NzaV9zZW5zZV9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICB2YWxpZDoxOworCXU4ICAgICAgICAgcnNwX2NvZGU6NzsKKyNlbHNlCisJdTggICAgICAgICByc3BfY29kZTo3OworCXU4ICAgICAgICAgdmFsaWQ6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgc2VnX251bTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgZmlsZV9tYXJrOjE7CisJdTggICAgICAgICBlb206MTsJCS8qIGVuZCBvZiBtZWRpYSAqLworCXU4ICAgICAgICAgaWxpOjE7CQkvKiBpbmNvcnJlY3QgbGVuZ3RoIGluZGljYXRvciAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MTsKKwl1OCAgICAgICAgIHNlbnNlX2tleTo0OworI2Vsc2UKKwl1OCAgICAgICAgIHNlbnNlX2tleTo0OworCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MTsKKwl1OCAgICAgICAgIGlsaToxOwkJLyogaW5jb3JyZWN0IGxlbmd0aCBpbmRpY2F0b3IgKi8KKwl1OCAgICAgICAgIGVvbToxOwkJLyogZW5kIG9mIG1lZGlhICovCisJdTggICAgICAgICBmaWxlX21hcms6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgaW5mb3JtYXRpb25bNF07CS8qIGRldmljZS10eXBlIG9yIGNvbW1hbmQgc3BlY2lmaWMgaW5mbworCQkJCQkgKi8KKwl1OCAgICAgICAgIGFkZF9zZW5zZV9sZW5ndGg7CisJCQkJCS8qIGFkZGl0aW9uYWwgc2Vuc2UgbGVuZ3RoICovCisJdTggICAgICAgICBjb21tYW5kX2luZm9bNF07LyogY29tbWFuZCBzcGVjaWZpYyBpbmZvcm1hdGlvbgorCQkJCQkJICovCisJdTggICAgICAgICBhc2M7CQkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwl1OCAgICAgICAgIGFzY3E7CQkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCisJdTggICAgICAgICBmcnVfY29kZTsJLyogZmllbGQgcmVwbGFjZWFibGUgdW5pdCBjb2RlICovCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHNrc3Y6MTsJCS8qIHNlbnNlIGtleSBzcGVjaWZpYyB2YWxpZCAqLworCXU4ICAgICAgICAgY19kOjE7CQkvKiBjb21tYW5kL2RhdGEgYml0ICovCisJdTggICAgICAgICByZXMxOjI7CisJdTggICAgICAgICBicHY6MTsJCS8qIGJpdCBwb2ludGVyIHZhbGlkICovCisJdTggICAgICAgICBicG9pbnRlcjozOwkvKiBiaXQgcG9pbnRlciAqLworI2Vsc2UKKwl1OCAgICAgICAgIGJwb2ludGVyOjM7CS8qIGJpdCBwb2ludGVyICovCisJdTggICAgICAgICBicHY6MTsJCS8qIGJpdCBwb2ludGVyIHZhbGlkICovCisJdTggICAgICAgICByZXMxOjI7CisJdTggICAgICAgICBjX2Q6MTsJCS8qIGNvbW1hbmQvZGF0YSBiaXQgKi8KKwl1OCAgICAgICAgIHNrc3Y6MTsJCS8qIHNlbnNlIGtleSBzcGVjaWZpYyB2YWxpZCAqLworI2VuZGlmCisJdTggICAgICAgICBmcG9pbnRlclsyXTsJLyogZmllbGQgcG9pbnRlciAqLworfTsKKworI2RlZmluZSBTQ1NJX1NFTlNFX0NVUl9FUlIgICAgICAgICAgMHg3MAorI2RlZmluZSBTQ1NJX1NFTlNFX0RFRl9FUlIgICAgICAgICAgMHg3MQorCisvKgorICogU0NTSSBzZW5zZSBrZXkgdmFsdWVzCisgKi8KKyNkZWZpbmUgU0NTSV9TS19OT19TRU5TRSAgICAgICAgMHgwCisjZGVmaW5lIFNDU0lfU0tfUkVDX0VSUiAgICAgICAgIDB4MQkvKiByZWNvdmVyZWQgZXJyb3IgKi8KKyNkZWZpbmUgU0NTSV9TS19OT1RfUkVBRFkgICAgICAgMHgyCisjZGVmaW5lIFNDU0lfU0tfTUVEX0VSUiAgICAgICAgIDB4MwkvKiBtZWRpdW0gZXJyb3IgKi8KKyNkZWZpbmUgU0NTSV9TS19IV19FUlIgICAgICAgICAgMHg0CS8qIGhhcmR3YXJlIGVycm9yICovCisjZGVmaW5lIFNDU0lfU0tfSUxMRUdBTF9SRVEgICAgIDB4NQorI2RlZmluZSBTQ1NJX1NLX1VOSVRfQVRUICAgICAgICAweDYJLyogdW5pdCBhdHRlbnRpb24gKi8KKyNkZWZpbmUgU0NTSV9TS19EQVRBX1BST1RFQ1QgICAgMHg3CisjZGVmaW5lIFNDU0lfU0tfQkxBTktfQ0hFQ0sgICAgIDB4OAorI2RlZmluZSBTQ1NJX1NLX1ZFTkRPUl9TUEVDICAgICAweDkKKyNkZWZpbmUgU0NTSV9TS19DT1BZX0FCT1JURUQgICAgMHhBCisjZGVmaW5lIFNDU0lfU0tfQUJPUlRFRF9DTU5EICAgIDB4QgorI2RlZmluZSBTQ1NJX1NLX1ZPTF9PVkVSRkxPVyAgICAweEQKKyNkZWZpbmUgU0NTSV9TS19NSVNDT01QQVJFICAgICAgMHhFCisKKy8qCisgKiBTQ1NJIGFkZGl0aW9uYWwgc2Vuc2UgY29kZXMKKyAqLworI2RlZmluZSBTQ1NJX0FTQ19OT19BRERfU0VOU0UgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9BU0NfTFVOX05PVF9SRUFEWSAgICAgICAgICAweDA0CisjZGVmaW5lIFNDU0lfQVNDX0xVTl9DT01NVU5JQ0FUSU9OICAgICAgMHgwOAorI2RlZmluZSBTQ1NJX0FTQ19XUklURV9FUlJPUiAgICAgICAgICAgIDB4MEMKKyNkZWZpbmUgU0NTSV9BU0NfSU5WQUxJRF9DTU5EX0NPREUgICAgICAweDIwCisjZGVmaW5lIFNDU0lfQVNDX0JBRF9MQkEgICAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBTQ1NJX0FTQ19JTlZBTElEX0ZJRUxEX0lOX0NEQiAgIDB4MjQKKyNkZWZpbmUgU0NTSV9BU0NfTFVOX05PVF9TVVBQT1JURUQgICAgICAweDI1CisjZGVmaW5lIFNDU0lfQVNDX0xVTl9XUklURV9QUk9URUNUICAgICAgMHgyNworI2RlZmluZSBTQ1NJX0FTQ19QT1dFUk9OX0JEUiAgICAgICAgICAgIDB4MjkJLyogcG93ZXIgb24gcmVzZXQsIGJ1cyByZXNldCwKKwkJCQkJCSAqIGJ1cyBkZXZpY2UgcmVzZXQKKwkJCQkJCSAqLworI2RlZmluZSBTQ1NJX0FTQ19QQVJBTVNfQ0hBTkdFRCAgICAgICAgIDB4MkEKKyNkZWZpbmUgU0NTSV9BU0NfQ01ORF9DTEVBUkVEX0JZX0FfSSAgICAweDJGCisjZGVmaW5lIFNDU0lfQVNDX1NBVklOR19QQVJBTV9OT1RTVVBQICAgMHgzOQorI2RlZmluZSBTQ1NJX0FTQ19UT0NDICAgICAgICAgICAgICAgICAgIDB4M0YJLyogdGFyZ2V0IG9wZXJhdGluZyBjb25kdGlvbnMKKwkJCQkJCSAqIGNoYW5nZWQKKwkJCQkJCSAqLworI2RlZmluZSBTQ1NJX0FTQ19QQVJJVFlfRVJST1IgICAgICAgICAgIDB4NDcKKyNkZWZpbmUgU0NTSV9BU0NfQ01ORF9QSEFTRV9FUlJPUiAgICAgICAweDRBCisjZGVmaW5lIFNDU0lfQVNDX0RBVEFfUEhBU0VfRVJST1IgICAgICAgMHg0QgorI2RlZmluZSBTQ1NJX0FTQ19WRU5ET1JfU1BFQyAgICAgICAgICAgIDB4N0YKKworLyoKKyAqIFNDU0kgYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllcnMKKyAqLworI2RlZmluZSBTQ1NJX0FTQ1FfQ0FVU0VfTk9UX1JFUE9SVCAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9BU0NRX0JFQ09NSU5HX1JFQURZICAgICAgICAweDAxCisjZGVmaW5lIFNDU0lfQVNDUV9JTklUX0NNRF9SRVEgICAgICAgICAgMHgwMgorI2RlZmluZSBTQ1NJX0FTQ1FfRk9STUFUX0lOX1BST0dSRVNTICAgIDB4MDQKKyNkZWZpbmUgU0NTSV9BU0NRX09QRVJBVElPTl9JTl9QUk9HUkVTUyAweDA3CisjZGVmaW5lIFNDU0lfQVNDUV9TRUxGX1RFU1RfSU5fUFJPR1JFU1MgMHgwOQorI2RlZmluZSBTQ1NJX0FTQ1FfV1JfVU5FWFBfVU5TT0xfREFUQSAgIDB4MEMKKyNkZWZpbmUgU0NTSV9BU0NRX1dSX05PVEVOR19VTlNPTF9EQVRBICAweDBECisKKyNkZWZpbmUgU0NTSV9BU0NRX0xCQV9PVVRfT0ZfUkFOR0UgICAgICAweDAwCisjZGVmaW5lIFNDU0lfQVNDUV9JTlZBTElEX0VMRU1FTlRfQUREUiAgMHgwMQorCisjZGVmaW5lIFNDU0lfQVNDUV9MVU5fV1JJVEVfUFJPVEVDVEVEICAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9BU0NRX0xVTl9IV19XUklURV9QUk9URUNURUQgICAgMHgwMQorI2RlZmluZSBTQ1NJX0FTQ1FfTFVOX1NXX1dSSVRFX1BST1RFQ1RFRCAgICAweDAyCisKKyNkZWZpbmUgU0NTSV9BU0NRX1BPUiAgIDB4MDEJLyogcG93ZXIgb24gcmVzZXQgKi8KKyNkZWZpbmUgU0NTSV9BU0NRX1NCUiAgIDB4MDIJLyogc2NzaSBidXMgcmVzZXQgKi8KKyNkZWZpbmUgU0NTSV9BU0NRX0JEUiAgIDB4MDMJLyogYnVzIGRldmljZSByZXNldCAqLworI2RlZmluZSBTQ1NJX0FTQ1FfRElSICAgMHgwNAkvKiBkZXZpY2UgaW50ZXJuYWwgcmVzZXQgKi8KKworI2RlZmluZSBTQ1NJX0FTQ1FfTU9ERV9QQVJBTVNfQ0hBTkdFRCAgICAgICAweDAxCisjZGVmaW5lIFNDU0lfQVNDUV9MT0dfUEFSQU1TX0NIQU5HRUQgICAgICAgIDB4MDIKKyNkZWZpbmUgU0NTSV9BU0NRX1JFU0VSVkFUSU9OU19QUkVFTVBURUQgICAgMHgwMworI2RlZmluZSBTQ1NJX0FTQ1FfUkVTRVJWQVRJT05TX1JFTEVBU0VEICAgICAweDA0CisjZGVmaW5lIFNDU0lfQVNDUV9SRUdJU1RSQVRJT05TX1BSRUVNUFRFRCAgIDB4MDUKKworI2RlZmluZSBTQ1NJX0FTQ1FfTUlDUk9DT0RFX0NIQU5HRUQgMHgwMQorI2RlZmluZSBTQ1NJX0FTQ1FfQ0hBTkdFRF9PUEVSX0NPTkQgMHgwMgorI2RlZmluZSBTQ1NJX0FTQ1FfSU5RX0NIQU5HRUQgICAgICAgMHgwMwkvKiBpbnF1aXJ5IGRhdGEgY2hhbmdlZCAqLworI2RlZmluZSBTQ1NJX0FTQ1FfRElfQ0hBTkdFRCAgICAgICAgMHgwNQkvKiBkZXZpY2UgaWQgY2hhbmdlZCAqLworI2RlZmluZSBTQ1NJX0FTQ1FfUkxfREFUQV9DSEFOR0VEICAgMHgwRQkvKiByZXBvcnQgbHVucyBkYXRhIGNoYW5nZWQgKi8KKworI2RlZmluZSBTQ1NJX0FTQ1FfRFBfQ1JDX0VSUiAgICAgICAgICAgIDB4MDEJLyogZGF0YSBwaGFzZSBjcmMgZXJyb3IgKi8KKyNkZWZpbmUgU0NTSV9BU0NRX0RQX1NDU0lfUEFSSVRZX0VSUiAgICAweDAyCS8qIGRhdGEgcGhhc2Ugc2NzaSBwYXJpdHkgZXJyb3IKKwkJCQkJCSAqLworI2RlZmluZSBTQ1NJX0FTQ1FfSVVfQ1JDX0VSUiAgICAgICAgICAgIDB4MDMJLyogaW5mb3JtYXRpb24gdW5pdCBjcmMgZXJyb3IgKi8KKyNkZWZpbmUgU0NTSV9BU0NRX1BST1RPX1NFUlZfQ1JDX0VSUiAgICAweDA1CisKKyNkZWZpbmUgU0NTSV9BU0NRX0xVTl9USU1FX09VVCAgICAgICAgICAweDAxCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0NTSSBJTlFVSVJZCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBjbWRfZHQ6MTsKKwl1OCAgICAgICAgIGV2cGQ6MTsKKyNlbHNlCisJdTggICAgICAgICBldnBkOjE7CisJdTggICAgICAgICBjbWRfZHQ6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgbHVuOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfY29kZTsKKwl1OCAgICAgICAgIHJlc2VydmVkMjsKKwl1OCAgICAgICAgIGFsbG9jX2xlbmd0aDsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3ZlbmRvcl9zeworCXU4ICAgICAgICAgdmVuZG9yX2lkWzhdOworfTsKKworc3RydWN0IHNjc2lfaW5xdWlyeV9wcm9kaWRfc3sKKwl1OCAgICAgICAgIHByb2R1Y3RfaWRbMTZdOworfTsKKworc3RydWN0IHNjc2lfaW5xdWlyeV9wcm9kcmV2X3N7CisJdTggICAgICAgICBwcm9kdWN0X3Jldls0XTsKK307CisKK3N0cnVjdCBzY3NpX2lucXVpcnlfZGF0YV9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwZXJpcGhlcmFsX3F1YWw6MzsJLyogcGVyaXBoZXJhbCBxdWFsaWZpZXIgKi8KKwl1OCAgICAgICAgIGRldmljZV90eXBlOjU7CQkvKiBwZXJpcGhlcmFsIGRldmljZSB0eXBlICovCisKKwl1OCAgICAgICAgIHJtYjoxOwkJCS8qIHJlbW92YWJsZSBtZWRpdW0gYml0ICovCisJdTggICAgICAgICBkZXZpY2VfdHlwZV9tb2Q6NzsJLyogZGV2aWNlIHR5cGUgbW9kaWZpZXIgKi8KKworCXU4ICAgICAgICAgdmVyc2lvbjsKKworCXU4ICAgICAgICAgYWVuYzoxOwkJLyogYXN5bmMgZXZlbnQgbm90aWZpY2F0aW9uIGNhcGFiaWxpdHkKKwkJCQkJICovCisJdTggICAgICAgICB0cm1faW9wOjE7CS8qIHRlcm1pbmF0ZSBJL08gcHJvY2VzcyAqLworCXU4ICAgICAgICAgbm9ybV9hY2E6MTsJLyogbm9ybWFsIEFDQSBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIGhpX3N1cHBvcnQ6MTsJLyogU0NTSS0zOiBzdXBwb3J0cyBSRVBPUlQgTFVOUyAqLworCXU4ICAgICAgICAgcnNwX2RhdGFfZm9ybWF0OjQ7CisKKwl1OCAgICAgICAgIGFkZGl0aW9uYWxfbGVuOworCXU4ICAgICAgICAgc2NjczoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjc7CisKKwl1OCAgICAgICAgIHJlc2VydmVkMjoxOworCXU4ICAgICAgICAgZW5jX3NlcnY6MTsJLyogZW5jbG9zdXJlIHNlcnZpY2UgY29tcG9uZW50ICovCisJdTggICAgICAgICByZXNlcnZlZDM6MTsKKwl1OCAgICAgICAgIG11bHRpX3BvcnQ6MTsJLyogbXVsdGktcG9ydCBkZXZpY2UgKi8KKwl1OCAgICAgICAgIG1fY2huZ3I6MTsJLyogZGV2aWNlIGluIG1lZGl1bSB0cmFuc3BvcnQgZWxlbWVudCAqLworCXU4ICAgICAgICAgYWNrX3JlcV9xOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OCAgICAgICAgIGFkZHIzMjoxOwkvKiBTSVAgc3BlY2lmaWMgYml0ICovCisJdTggICAgICAgICBhZGRyMTY6MTsJLyogU0lQIHNwZWNpZmljIGJpdCAqLworCisJdTggICAgICAgICByZWxfYWRyOjE7CS8qIHJlbGF0aXZlIGFkZHJlc3MgKi8KKwl1OCAgICAgICAgIHdfYnVzMzI6MTsKKwl1OCAgICAgICAgIHdfYnVzMTY6MTsKKwl1OCAgICAgICAgIHN5bmNocm9ub3VzOjE7CisJdTggICAgICAgICBsaW5rZWRfY29tbWFuZHM6MTsKKwl1OCAgICAgICAgIHRyYW5zX2RpczoxOworCXU4ICAgICAgICAgY21kX3F1ZXVlOjE7CS8qIGNvbW1hbmQgcXVldWVpbmcgc3VwcG9ydGVkICovCisJdTggICAgICAgICBzb2Z0X3Jlc2V0OjE7CS8qIHNvZnQgcmVzZXQgYWx0ZXJuYXRpdmUgKFZTKSAqLworI2Vsc2UKKwl1OCAgICAgICAgIGRldmljZV90eXBlOjU7CS8qIHBlcmlwaGVyYWwgZGV2aWNlIHR5cGUgKi8KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworCQkJCQkvKiBwZXJpcGhlcmFsIHF1YWxpZmllciAqLworCisJdTggICAgICAgICBkZXZpY2VfdHlwZV9tb2Q6NzsKKwkJCQkJLyogZGV2aWNlIHR5cGUgbW9kaWZpZXIgKi8KKwl1OCAgICAgICAgIHJtYjoxOwkJLyogcmVtb3ZhYmxlIG1lZGl1bSBiaXQgKi8KKworCXU4ICAgICAgICAgdmVyc2lvbjsKKworCXU4ICAgICAgICAgcnNwX2RhdGFfZm9ybWF0OjQ7CisJdTggICAgICAgICBoaV9zdXBwb3J0OjE7CS8qIFNDU0ktMzogc3VwcG9ydHMgUkVQT1JUIExVTlMgKi8KKwl1OCAgICAgICAgIG5vcm1fYWNhOjE7CS8qIG5vcm1hbCBBQ0Egc3VwcG9ydGVkICovCisJdTggICAgICAgICB0ZXJtaW5hdGVfaW9wOjE7LyogdGVybWluYXRlIEkvTyBwcm9jZXNzICovCisJdTggICAgICAgICBhZW5jOjE7CQkvKiBhc3luYyBldmVudCBub3RpZmljYXRpb24gY2FwYWJpbGl0eQorCQkJCQkgKi8KKworCXU4ICAgICAgICAgYWRkaXRpb25hbF9sZW47CisJdTggICAgICAgICByZXNlcnZlZDE6NzsKKwl1OCAgICAgICAgIHNjY3M6MTsKKworCXU4ICAgICAgICAgYWRkcjE2OjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OCAgICAgICAgIGFkZHIzMjoxOwkvKiBTSVAgc3BlY2lmaWMgYml0ICovCisJdTggICAgICAgICBhY2tfcmVxX3E6MTsJLyogU0lQIHNwZWNpZmljIGJpdCAqLworCXU4ICAgICAgICAgbV9jaG5ncjoxOwkvKiBkZXZpY2UgaW4gbWVkaXVtIHRyYW5zcG9ydCBlbGVtZW50ICovCisJdTggICAgICAgICBtdWx0aV9wb3J0OjE7CS8qIG11bHRpLXBvcnQgZGV2aWNlICovCisJdTggICAgICAgICByZXNlcnZlZDM6MTsJLyogVEJEIC0gVmVuZG9yIFNwZWNpZmljICovCisJdTggICAgICAgICBlbmNfc2VydjoxOwkvKiBlbmNsb3N1cmUgc2VydmljZSBjb21wb25lbnQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjoxOworCisJdTggICAgICAgICBzb2Z0X3Nlc2V0OjE7CS8qIHNvZnQgcmVzZXQgYWx0ZXJuYXRpdmUgKFZTKSAqLworCXU4ICAgICAgICAgY21kX3F1ZXVlOjE7CS8qIGNvbW1hbmQgcXVldWVpbmcgc3VwcG9ydGVkICovCisJdTggICAgICAgICB0cmFuc19kaXM6MTsKKwl1OCAgICAgICAgIGxpbmtlZF9jb21tYW5kczoxOworCXU4ICAgICAgICAgc3luY2hyb25vdXM6MTsKKwl1OCAgICAgICAgIHdfYnVzMTY6MTsKKwl1OCAgICAgICAgIHdfYnVzMzI6MTsKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsJLyogcmVsYXRpdmUgYWRkcmVzcyAqLworI2VuZGlmCisJc3RydWN0IHNjc2lfaW5xdWlyeV92ZW5kb3JfcyB2ZW5kb3JfaWQ7CisJc3RydWN0IHNjc2lfaW5xdWlyeV9wcm9kaWRfcyBwcm9kdWN0X2lkOworCXN0cnVjdCBzY3NpX2lucXVpcnlfcHJvZHJldl9zIHByb2R1Y3RfcmV2OworCXU4ICAgICAgICAgdmVuZG9yX3NwZWNpZmljWzIwXTsKKwl1OCAgICAgICAgIHJlc2VydmVkNFs0MF07Cit9OworCisvKgorICogaW5xdWlyeS5wZXJpcGhlcmFsX3F1YWwgZmllbGQgdmFsdWVzCisgKi8KKyNkZWZpbmUgU0NTSV9ERVZRVUFMX0RFRkFVTFQgICAgICAgIDAKKyNkZWZpbmUgU0NTSV9ERVZRVUFMX05PVF9DT05ORUNURUQgIDEKKyNkZWZpbmUgU0NTSV9ERVZRVUFMX05PVF9TVVBQT1JURUQgIDMKKworLyoKKyAqIGlucXVpcnkuZGV2aWNlX3R5cGUgZmllbGQgdmFsdWVzCisgKi8KKyNkZWZpbmUgU0NTSV9ERVZJQ0VfRElSRUNUX0FDQ0VTUyAgICAgICAweDAwCisjZGVmaW5lIFNDU0lfREVWSUNFX1NFUV9BQ0NFU1MgICAgICAgICAgMHgwMQorI2RlZmluZSBTQ1NJX0RFVklDRV9BUlJBWV9DT05UUk9MTEVSICAgIDB4MEMKKyNkZWZpbmUgU0NTSV9ERVZJQ0VfVU5LTk9XTiAgICAgICAgICAgICAweDFGCisKKy8qCisgKiBpbnF1aXJ5LnZlcnNpb24KKyAqLworI2RlZmluZSBTQ1NJX1ZFUlNJT05fQU5TSV9YMzEzMSAgICAgMgkvKiBBTlNJIFgzLjEzMSBTQ1NJLTIgKi8KKyNkZWZpbmUgU0NTSV9WRVJTSU9OX1NQQyAgICAgICAgICAgIDMJLyogU1BDIChTQ1NJLTMpLCBBTlNJIFgzLjMwMToxOTk3ICovCisjZGVmaW5lIFNDU0lfVkVSU0lPTl9TUENfMiAgICAgICAgICA0CS8qIFNQQy0yICovCisKKy8qCisgKiByZXNwb25zZSBkYXRhIGZvcm1hdAorICovCisjZGVmaW5lIFNDU0lfUlNQX0RBVEFfRk9STUFUICAgICAgICAyCS8qIFNDU0ktMiAmIFNQQyAqLworCisvKgorICogU0NTSSBpbnF1aXJ5IHBhZ2UgY29kZXMKKyAqLworI2RlZmluZSBTQ1NJX0lOUV9QQUdFX1ZQRF9QQUdFUyAgICAgMHgwMAkvKiBzdXBwb3J0ZWQgdnBkIHBhZ2VzICovCisjZGVmaW5lIFNDU0lfSU5RX1BBR0VfVVNOX1BBR0UgICAgICAweDgwCS8qIHVuaXQgc2VyaWFsIG51bWJlciBwYWdlICovCisjZGVmaW5lIFNDU0lfSU5RX1BBR0VfREVWX0lERU5UICAgICAweDgzCS8qIGRldmljZSBpbmRlbnRpZmljYXRpb24gcGFnZQorCQkJCQkJICovCisjZGVmaW5lIFNDU0lfSU5RX1BBR0VTX01BWCAgICAgICAgICAzCisKKy8qCisgKiBzdXBwb3J0ZWQgdml0YWwgcHJvZHVjdCBkYXRhIHBhZ2VzCisgKi8KK3N0cnVjdCBzY3NpX2lucV9wYWdlX3ZwZF9wYWdlc19zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwZXJpcGhlcmFsX3F1YWw6MzsKKwl1OCAgICAgICAgIGRldmljZV90eXBlOjU7CisjZWxzZQorCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2NvZGU7CisJdTggICAgICAgICByZXNlcnZlZDsKKwl1OCAgICAgICAgIHBhZ2VfbGVuZ3RoOworCXU4ICAgICAgICAgcGFnZXNbU0NTSV9JTlFfUEFHRVNfTUFYXTsKK307CisKKy8qCisgKiBVbml0IHNlcmlhbCBudW1iZXIgcGFnZQorICovCisjZGVmaW5lIFNDU0lfSU5RX1VTTl9MRU4gMzIKKworc3RydWN0IHNjc2lfaW5xX3Vzbl9zeworCWNoYXIgICAgICAgICAgICB1c25bU0NTSV9JTlFfVVNOX0xFTl07Cit9OworCitzdHJ1Y3Qgc2NzaV9pbnFfcGFnZV91c25fc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OworI2Vsc2UKKwl1OCAgICAgICAgIGRldmljZV90eXBlOjU7CisJdTggICAgICAgICBwZXJpcGhlcmFsX3F1YWw6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9jb2RlOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOworCXU4ICAgICAgICAgcGFnZV9sZW5ndGg7CisJc3RydWN0IHNjc2lfaW5xX3Vzbl9zICB1c247Cit9OworCitlbnVtIHsKKwlTQ1NJX0lOUV9ESVBfQ09ERV9CSU5BUlkgPSAxLAkvKiBpZGVudGlmaWVyIGhhcyBiaW5hcnkgdmFsdWUgKi8KKwlTQ1NJX0lOUV9ESVBfQ09ERV9BU0NJSSA9IDIsCS8qIGlkZW50aWZpZXIgaGFzIGFzY2lpIHZhbHVlICovCit9OworCitlbnVtIHsKKwlTQ1NJX0lOUV9ESVBfQVNTT0NfTFVOID0gMCwJLyogaWQgaXMgYXNzb2NpYXRlZCB3aXRoIGRldmljZSAqLworCVNDU0lfSU5RX0RJUF9BU1NPQ19QT1JUID0gMSwJLyogaWQgaXMgYXNzb2NpYXRlZCB3aXRoIHBvcnQgdGhhdAorCQkJCQkgKiByZWNlaXZlZCB0aGUgcmVxdWVzdAorCQkJCQkgKi8KK307CisKK2VudW0geworCVNDU0lfSU5RX0lEX1RZUEVfVkVORE9SID0gMSwKKwlTQ1NJX0lOUV9JRF9UWVBFX0lFRUUgPSAyLAorCVNDU0lfSU5RX0lEX1RZUEVfRkNfRlMgPSAzLAorCVNDU0lfSU5RX0lEX1RZUEVfT1RIRVIgPSA0LAorfTsKKworc3RydWN0IHNjc2lfaW5xX2RpcF9kZXNjX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlczA6NDsKKwl1OCAgICAgICAgIGNvZGVfc2V0OjQ7CisJdTggICAgICAgICByZXMxOjI7CisJdTggICAgICAgICBhc3NvY2lhdGlvbjoyOworCXU4ICAgICAgICAgaWRfdHlwZTo0OworI2Vsc2UKKwl1OCAgICAgICAgIGNvZGVfc2V0OjQ7CisJdTggICAgICAgICByZXMwOjQ7CisJdTggICAgICAgICBpZF90eXBlOjQ7CisJdTggICAgICAgICBhc3NvY2lhdGlvbjoyOworCXU4ICAgICAgICAgcmVzMToyOworI2VuZGlmCisJdTggICAgICAgICByZXMyOworCXU4ICAgICAgICAgaWRfbGVuOworCXN0cnVjdCBzY3NpX2x1bl9zbl9zICAgaWQ7Cit9OworCisvKgorICogRGV2aWNlIGluZGVudGlmaWNhdGlvbiBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX2lucV9wYWdlX2Rldl9pZGVudF9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwZXJpcGhlcmFsX3F1YWw6MzsKKwl1OCAgICAgICAgIGRldmljZV90eXBlOjU7CisjZWxzZQorCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2NvZGU7CisJdTggICAgICAgICByZXNlcnZlZDE7CisJdTggICAgICAgICBwYWdlX2xlbmd0aDsKKwlzdHJ1Y3Qgc2NzaV9pbnFfZGlwX2Rlc2NfcyBkZXNjOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSRUFEIENBUEFDSVRZCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdHJ1Y3Qgc2NzaV9yZWFkX2NhcGFjaXR5X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjQ7CisJdTggICAgICAgICByZWxfYWRyOjE7CisjZWxzZQorCXU4ICAgICAgICAgcmVsX2FkcjoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjQ7CisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgbGJhMDsJLyogTVNCICovCisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsKKwl1OCAgICAgICAgIGxiYTM7CS8qIExTQiAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDQ6NzsKKwl1OCAgICAgICAgIHBtaToxOwkvKiBwYXJ0aWFsIG1lZGl1bSBpbmRpY2F0b3IgKi8KKyNlbHNlCisJdTggICAgICAgICBwbWk6MTsJLyogcGFydGlhbCBtZWRpdW0gaW5kaWNhdG9yICovCisJdTggICAgICAgICByZXNlcnZlZDQ6NzsKKyNlbmRpZgorCXU4ICAgICAgICAgY29udHJvbDsKK307CisKK3N0cnVjdCBzY3NpX3JlYWRfY2FwYWNpdHlfZGF0YV9zeworCXUzMiAgICAgICAgbWF4X2xiYTsJLyogbWF4aW11bSBMQkEgYXZhaWxhYmxlICovCisJdTMyICAgICAgICBibG9ja19sZW5ndGg7CS8qIGluIGJ5dGVzICovCit9OworCitzdHJ1Y3Qgc2NzaV9yZWFkX2NhcGFjaXR5MTZfZGF0YV9zeworCXU2NCAgICAgICAgbGJhOwkvKiBtYXhpbXVtIExCQSBhdmFpbGFibGUgKi8KKwl1MzIgICAgICAgIGJsb2NrX2xlbmd0aDsJLyogaW4gYnl0ZXMgKi8KKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjQsCisJCQlwX3R5cGU6MywKKwkJCXByb3RfZW46MTsKKwl1OAkJcmVzZXJ2ZWQyOjQsCisJCQlsYl9wYmU6NDsJLyogbG9naWNhbCBibG9ja3MgcGVyIHBoeXNpY2FsIGJsb2NrCisJCQkJCSAqIGV4cG9uZW50ICovCisJdTE2CXJlc2VydmVkMzoyLAorCQkJbGJhX2FsaWduOjE0OwkvKiBsb3dlc3QgYWxpZ25lZCBsb2dpY2FsIGJsb2NrCisJCQkJCSAqIGFkZHJlc3MgKi8KKyNlbHNlCisJdTE2CWxiYV9hbGlnbjoxNCwJLyogbG93ZXN0IGFsaWduZWQgbG9naWNhbCBibG9jaworCQkJCQkgKiBhZGRyZXNzICovCisJCQlyZXNlcnZlZDM6MjsKKwl1OAkJbGJfcGJlOjQsCS8qIGxvZ2ljYWwgYmxvY2tzIHBlciBwaHlzaWNhbCBibG9jaworCQkJCQkgKiBleHBvbmVudCAqLworCQkJcmVzZXJ2ZWQyOjQ7CisJdTgJCXByb3RfZW46MSwKKwkJCXBfdHlwZTozLAorCQkJcmVzZXJ2ZWQxOjQ7CisjZW5kaWYKKwl1NjQJcmVzZXJ2ZWQ0OworCXU2NAlyZXNlcnZlZDU7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJFUE9SVCBMVU5TIGNvbW1hbmQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0cnVjdCBzY3NpX3JlcG9ydF9sdW5zX3N7CisJdTggICAgICAgICBvcGNvZGU7CQkvKiBBMGggLSBSRVBPUlQgTFVOUyBvcENvZGUgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMVs1XTsKKwl1OCAgICAgICAgIGFsbG9jX2xlbmd0aFs0XTsvKiBhbGxvY2F0aW9uIGxlbmd0aCBNU0IgZmlyc3QgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisjZGVmaW5lIFNDU0lfUkVQT1JUX0xVTl9BTExPQ19MRU5HVEgocmwpICAgICAgICAgICAgICAgIAkJXAorICAgICgocmwtPmFsbG9jX2xlbmd0aFswXSA8PCAyNCkgfCAocmwtPmFsbG9jX2xlbmd0aFsxXSA8PCAxNikgfCAJXAorICAgICAocmwtPmFsbG9jX2xlbmd0aFsyXSA8PCA4KSB8IChybC0+YWxsb2NfbGVuZ3RoWzNdKSkKKworI2RlZmluZSBTQ1NJX1JFUE9SVF9MVU5TX1NFVF9BTExPQ0xFTihybCwgYWxsb2NfbGVuKSB7ICAgICAgXAorICAgIChybCktPmFsbG9jX2xlbmd0aFswXSA9IChhbGxvY19sZW4pID4+IDI0OyAgICAgIAkJCVwKKyAgICAocmwpLT5hbGxvY19sZW5ndGhbMV0gPSAoKGFsbG9jX2xlbikgPj4gMTYpICYgMHhGRjsgCQlcCisgICAgKHJsKS0+YWxsb2NfbGVuZ3RoWzJdID0gKChhbGxvY19sZW4pID4+IDgpICYgMHhGRjsgIAkJXAorICAgIChybCktPmFsbG9jX2xlbmd0aFszXSA9IChhbGxvY19sZW4pICYgMHhGRjsgICAgIAkJCVwKK30KKworc3RydWN0IHNjc2lfcmVwb3J0X2x1bnNfZGF0YV9zeworCXUzMiAgICAgICAgbHVuX2xpc3RfbGVuZ3RoOwkvKiBsZW5ndGggb2YgTFVOIGxpc3QgbGVuZ3RoICovCisJdTMyICAgICAgICByZXNlcnZlZDsKKwlsdW5fdCAgICAgICAgICAgbHVuWzFdOwkJCS8qIGZpcnN0IExVTiBpbiBsdW4gbGlzdCAqLworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0NTSSBtb2RlICBwYXJhbWV0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitlbnVtIHsKKwlTQ1NJX0RBX01FRElVTV9ERUYgPSAwLAkvKiBkaXJlY3QgYWNjZXNzIGRlZmF1bHQgbWVkaXVtIHR5cGUgKi8KKwlTQ1NJX0RBX01FRElVTV9TUyA9IDEsCS8qIGRpcmVjdCBhY2Nlc3Mgc2luZ2xlIHNpZGVkICovCisJU0NTSV9EQV9NRURJVU1fRFMgPSAyLAkvKiBkaXJlY3QgYWNjZXNzIGRvdWJsZSBzaWRlZCAqLworfTsKKworLyoKKyAqIFNDU0kgTW9kZSBTZWxlY3QoNikgY2RiCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfc2VsZWN0Nl9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIHBmOjE7CQkvKiBwYWdlIGZvcm1hdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBzcDoxOwkJLyogc2F2ZSBwYWdlcyBpZiBzZXQgdG8gMSAqLworI2Vsc2UKKwl1OCAgICAgICAgIHNwOjE7CS8qIHNhdmUgcGFnZXMgaWYgc2V0IHRvIDEgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCXU4ICAgICAgICAgcGY6MTsJLyogcGFnZSBmb3JtYXQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDNbMl07CisJdTggICAgICAgICBhbGxvY19sZW47CisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIFNDU0kgTW9kZSBTZWxlY3QoMTApIGNkYgorICovCitzdHJ1Y3Qgc2NzaV9tb2RlX3NlbGVjdDEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgcGY6MTsJLyogcGFnZSBmb3JtYXQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCXU4ICAgICAgICAgc3A6MTsJLyogc2F2ZSBwYWdlcyBpZiBzZXQgdG8gMSAqLworI2Vsc2UKKwl1OCAgICAgICAgIHNwOjE7CS8qIHNhdmUgcGFnZXMgaWYgc2V0IHRvIDEgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCXU4ICAgICAgICAgcGY6MTsJLyogcGFnZSBmb3JtYXQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDNbNV07CisJdTggICAgICAgICBhbGxvY19sZW5fbXNiOworCXU4ICAgICAgICAgYWxsb2NfbGVuX2xzYjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogU0NTSSBNb2RlIFNlbnNlKDYpIGNkYgorICovCitzdHJ1Y3Qgc2NzaV9tb2RlX3NlbnNlNl9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIGRiZDoxOwkvKiBkaXNhYmxlIGJsb2NrIGRpc2NyaXB0b3JzIGlmIHNldCB0byAxICovCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKworCXU4ICAgICAgICAgcGM6MjsJLyogcGFnZSBjb250cm9sICovCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKwl1OCAgICAgICAgIGRiZDoxOwkvKiBkaXNhYmxlIGJsb2NrIGRlc2NyaXB0b3JzIGlmIHNldCB0byAxICovCisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICBwYzoyOwkvKiBwYWdlIGNvbnRyb2wgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2ZWQzOworCXU4ICAgICAgICAgYWxsb2NfbGVuOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBTQ1NJIE1vZGUgU2Vuc2UoMTApIGNkYgorICovCitzdHJ1Y3Qgc2NzaV9tb2RlX3NlbnNlMTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBMTEJBQToxOwkvKiBsb25nIExCQSBhY2NlcHRlZCBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgZGJkOjE7CQkvKiBkaXNhYmxlIGJsb2NrIGRlc2NyaXB0b3JzIGlmIHNldAorCQkJCQkgKiB0byAxCisJCQkJCSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisKKwl1OCAgICAgICAgIHBjOjI7CQkvKiBwYWdlIGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCXU4ICAgICAgICAgZGJkOjE7CQkvKiBkaXNhYmxlIGJsb2NrIGRlc2NyaXB0b3JzIGlmIHNldCB0bworCQkJCQkgKiAxCisJCQkJCSAqLworCXU4ICAgICAgICAgTExCQUE6MTsJLyogbG9uZyBMQkEgYWNjZXB0ZWQgaWYgc2V0IHRvIDEgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHBjOjI7CQkvKiBwYWdlIGNvbnRyb2wgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2ZWQzWzRdOworCXU4ICAgICAgICAgYWxsb2NfbGVuX21zYjsKKwl1OCAgICAgICAgIGFsbG9jX2xlbl9sc2I7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworI2RlZmluZSBTQ1NJX0NEQjEwX0dFVF9BTChjZGIpICAJCQkJCVwKKyAgICAoKGNkYiktPmFsbG9jX2xlbl9tc2IgPDwgOCB8IChjZGIpLT5hbGxvY19sZW5fbHNiKQorCisjZGVmaW5lIFNDU0lfQ0RCMTBfU0VUX0FMKGNkYiwgYWwpIHsgICAgICBcCisgICAgKGNkYiktPmFsbG9jX2xlbl9tc2IgPSBhbCA+PiA4OyAgICAgICAJCQkJXAorICAgIChjZGIpLT5hbGxvY19sZW5fbHNiID0gYWwgJiAweEZGOyAgICAgCQkJCVwKK30KKworI2RlZmluZSBTQ1NJX0NEQjZfR0VUX0FMKGNkYikgKChjZGIpLT5hbGxvY19sZW4pCisKKyNkZWZpbmUgU0NTSV9DREI2X1NFVF9BTChjZGIsIGFsKSB7ICAgICAgXAorICAgIChjZGIpLT5hbGxvY19sZW4gPSBhbDsgICAgICAgICAJCQkJCVwKK30KKworLyoKKyAqIHBhZ2UgY29udHJvbCBmaWVsZCB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1NJX1BDX0NVUlJFTlRfVkFMVUVTICAgICAgIDB4MAorI2RlZmluZSBTQ1NJX1BDX0NIQU5HRUFCTEVfVkFMVUVTICAgIDB4MQorI2RlZmluZSBTQ1NJX1BDX0RFRkFVTFRfVkFMVUVTICAgICAgIDB4MgorI2RlZmluZSBTQ1NJX1BDX1NBVkVEX1ZBTFVFUyAgICAgICAgIDB4MworCisvKgorICogU0NTSSBtb2RlIHBhZ2UgY29kZXMKKyAqLworI2RlZmluZSBTQ1NJX01QX1ZFTkRPUl9TUEVDICAgICAweDAwCisjZGVmaW5lIFNDU0lfTVBfRElTQ19SRUNOICAgICAgIDB4MDIJLyogZGlzY29ubmVjdC1yZWNvbm5lY3QgcGFnZSAqLworI2RlZmluZSBTQ1NJX01QX0ZPUk1BVF9ERVZJQ0UgICAweDAzCisjZGVmaW5lIFNDU0lfTVBfUkRHICAgICAgICAgICAgIDB4MDQJLyogcmlnaWQgZGlzayBnZW9tZXRyeSBwYWdlICovCisjZGVmaW5lIFNDU0lfTVBfRkRQICAgICAgICAgICAgIDB4MDUJLyogZmxleGlibGUgZGlzayBwYWdlICovCisjZGVmaW5lIFNDU0lfTVBfQ0FDSElORyAgICAgICAgIDB4MDgJLyogY2FjaGluZyBwYWdlICovCisjZGVmaW5lIFNDU0lfTVBfQ09OVFJPTCAgICAgICAgIDB4MEEJLyogY29udHJvbCBtb2RlIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9NRURfVFlQRVNfU1VQICAgMHgwQgkvKiBtZWRpdW0gdHlwZXMgc3VwcG9ydGVkIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9JTkZPX0VYQ1BfQ05UTCAgMHgxQwkvKiBpbmZvcm1hdGlvbmFsIGV4Y2VwdGlvbiBjb250cm9sICovCisjZGVmaW5lIFNDU0lfTVBfQUxMICAgICAgICAgICAgIDB4M0YJLyogcmV0dXJuIGFsbCBwYWdlcyAtIG1vZGUgc2Vuc2Ugb25seSAqLworCisvKgorICogbW9kZSBwYXJhbWV0ZXIgaGVhZGVyCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyNl9zeworCXU4ICAgICAgICAgbW9kZV9kYXRhbGVuOworCXU4ICAgICAgICAgbWVkaXVtX3R5cGU7CisKKwkvKgorCSAqIGRldmljZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGV4cGFuZGVkIGZvciBkaXJlY3QgYWNjZXNzIGRldmljZXMKKwkgKi8KKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgd3A6MTsJCS8qIHdyaXRlIHByb3RlY3RlZCAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTMyICAgICAgICBkcG9mdWE6MTsJLyogZGlzYWJsZSBwYWdlIG91dCArIGZvcmNlIHVuaXQgYWNjZXNzCisJCQkJCSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjQ7CisjZWxzZQorCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjQ7CisJdTMyICAgICAgICBkcG9mdWE6MTsJLyogZGlzYWJsZSBwYWdlIG91dCArIGZvcmNlIHVuaXQgYWNjZXNzCisJCQkJCSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTMyICAgICAgICB3cDoxOwkJLyogd3JpdGUgcHJvdGVjdGVkICovCisjZW5kaWYKKworCXU4ICAgICAgICAgYmxvY2tfZGVzY2xlbjsKK307CisKK3N0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyMTBfc3sKKwl1MzIgICAgICAgIG1vZGVfZGF0YWxlbjoxNjsKKwl1MzIgICAgICAgIG1lZGl1bV90eXBlOjg7CisKKwkvKgorCSAqIGRldmljZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGV4cGFuZGVkIGZvciBkaXJlY3QgYWNjZXNzIGRldmljZXMKKwkgKi8KKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgd3A6MTsJCS8qIHdyaXRlIHByb3RlY3RlZCAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTMyICAgICAgICBkcG9mdWE6MTsJLyogZGlzYWJsZSBwYWdlIG91dCArIGZvcmNlIHVuaXQgYWNjZXNzCisJCQkJCSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjQ7CisjZWxzZQorCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjQ7CisJdTMyICAgICAgICBkcG9mdWE6MTsJLyogZGlzYWJsZSBwYWdlIG91dCArIGZvcmNlIHVuaXQgYWNjZXNzCisJCQkJCSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTMyICAgICAgICB3cDoxOwkJLyogd3JpdGUgcHJvdGVjdGVkICovCisjZW5kaWYKKworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICByZXNlcnZlZDM6NzsKKwl1MzIgICAgICAgIGxvbmdsYmE6MTsKKyNlbHNlCisJdTMyICAgICAgICBsb25nbGJhOjE7CisJdTMyICAgICAgICByZXNlcnZlZDM6NzsKKyNlbmRpZgorCXUzMiAgICAgICAgcmVzZXJ2ZWQ0Ojg7CisJdTMyICAgICAgICBibG9ja19kZXNjbGVuOjE2OworfTsKKworLyoKKyAqIG1vZGUgcGFyYW1ldGVyIGJsb2NrIGRlc2NyaXB0b3IKKyAqLworc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3N7CisJdTMyICAgICAgICBuYmxrczsKKwl1MzIgICAgICAgIGRlbnNpdHlfY29kZTo4OworCXUzMiAgICAgICAgYmxvY2tfbGVuZ3RoOjI0OworfTsKKworLyoKKyAqIERpc2Nvbm5lY3QtcmVjb25uZWN0IG1vZGUgcGFnZSBmb3JtYXQKKyAqLworc3RydWN0IHNjc2lfbXBfZGlzY19yZWNuX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBzOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwczoxOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2xlbjsKKwl1OCAgICAgICAgIGJ1Zl9mdWxsX3JhdGlvOworCXU4ICAgICAgICAgYnVmX2VtcHR5X3JhdGlvOworCisJdTggICAgICAgICBiaWxfbXNiOwkvKiBidXMgaW5hY3Rpdml0eSBsaW1pdCAtTVNCICovCisJdTggICAgICAgICBiaWxfbHNiOwkvKiBidXMgaW5hY3Rpdml0eSBsaW1pdCAtTFNCICovCisKKwl1OCAgICAgICAgIGR0bF9tc2I7CS8qIGRpc2Nvbm5lY3QgdGltZSBsaW1pdCAtIE1TQiAqLworCXU4ICAgICAgICAgZHRsX2xzYjsJLyogZGlzY29ubmVjdCB0aW1lIGxpbWl0IC0gTFNCICovCisKKwl1OCAgICAgICAgIGN0bF9tc2I7CS8qIGNvbm5lY3QgdGltZSBsaW1pdCAtIE1TQiAqLworCXU4ICAgICAgICAgY3RsX2xzYjsJLyogY29ubmVjdCB0aW1lIGxpbWl0IC0gTFNCICovCisKKwl1OCAgICAgICAgIG1heF9idXJzdF9sZW5fbXNiOworCXU4ICAgICAgICAgbWF4X2J1cnN0X2xlbl9sc2I7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGVtZHA6MTsJLyogZW5hYmxlIG1vZGlmeSBkYXRhIHBvaW50ZXJzICovCisJdTggICAgICAgICBmYTozOwkvKiBmYWlyIGFyYml0cmF0aW9uICovCisJdTggICAgICAgICBkaW1tOjE7CS8qIGRpc2Nvbm5lY3QgaW1tZWRpYXRlICovCisJdTggICAgICAgICBkdGRjOjM7CS8qIGRhdGEgdHJhbnNmZXIgZGlzY29ubmVjdCBjb250cm9sICovCisjZWxzZQorCXU4ICAgICAgICAgZHRkYzozOwkvKiBkYXRhIHRyYW5zZmVyIGRpc2Nvbm5lY3QgY29udHJvbCAqLworCXU4ICAgICAgICAgZGltbToxOwkvKiBkaXNjb25uZWN0IGltbWVkaWF0ZSAqLworCXU4ICAgICAgICAgZmE6MzsJLyogZmFpciBhcmJpdHJhdGlvbiAqLworCXU4ICAgICAgICAgZW1kcDoxOwkvKiBlbmFibGUgbW9kaWZ5IGRhdGEgcG9pbnRlcnMgKi8KKyNlbmRpZgorCisJdTggICAgICAgICByZXNlcnZlZDM7CisKKwl1OCAgICAgICAgIGZpcnN0X2J1cnN0X2xlbl9tc2I7CisJdTggICAgICAgICBmaXJzdF9idXJzdF9sZW5fbHNiOworfTsKKworLyoKKyAqIFNDU0kgZm9ybWF0IGRldmljZSBtb2RlIHBhZ2UKKyAqLworc3RydWN0IHNjc2lfbXBfZm9ybWF0X2RldmljZV9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBwczoxOworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTMyICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTMyICAgICAgICBwYWdlX2NvZGU6NjsKKwl1MzIgICAgICAgIHJlc2VydmVkMToxOworCXUzMiAgICAgICAgcHM6MTsKKyNlbmRpZgorCXUzMiAgICAgICAgcGFnZV9sZW46ODsKKwl1MzIgICAgICAgIHRyYWNrc19wZXJfem9uZToxNjsKKworCXUzMiAgICAgICAgYV9zZWNfcGVyX3pvbmU6MTY7CisJdTMyICAgICAgICBhX3RyYWNrc19wZXJfem9uZToxNjsKKworCXUzMiAgICAgICAgYV90cmFja3NfcGVyX2x1bjoxNjsJLyogYWx0ZXJuYXRlIHRyYWNrcy9sdW4tTVNCICovCisJdTMyICAgICAgICBzZWNfcGVyX3RyYWNrOjE2OwkvKiBzZWN0b3JzL3RyYWNrLU1TQiAqLworCisJdTMyICAgICAgICBieXRlc19wZXJfc2VjdG9yOjE2OworCXUzMiAgICAgICAgaW50ZXJsZWF2ZToxNjsKKworCXUzMiAgICAgICAgdHNmOjE2OwkJCS8qIHRyYWNrIHNrZXcgZmFjdG9yLU1TQiAqLworCXUzMiAgICAgICAgY3NmOjE2OwkJCS8qIGN5bGluZGVyIHNrZXcgZmFjdG9yLU1TQiAqLworCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHNzZWM6MTsJLyogc29mdCBzZWN0b3IgZm9ybWF0dGluZyAqLworCXUzMiAgICAgICAgaHNlYzoxOwkvKiBoYXJkIHNlY3RvciBmb3JtYXR0aW5nICovCisJdTMyICAgICAgICBybWI6MTsJLyogcmVtb3ZhYmxlIG1lZGlhICovCisJdTMyICAgICAgICBzdXJmOjE7CS8qIHN1cmZhY2UgKi8KKwl1MzIgICAgICAgIHJlc2VydmVkMjo0OworI2Vsc2UKKwl1MzIgICAgICAgIHJlc2VydmVkMjo0OworCXUzMiAgICAgICAgc3VyZjoxOwkvKiBzdXJmYWNlICovCisJdTMyICAgICAgICBybWI6MTsJLyogcmVtb3ZhYmxlIG1lZGlhICovCisJdTMyICAgICAgICBoc2VjOjE7CS8qIGhhcmQgc2VjdG9yIGZvcm1hdHRpbmcgKi8KKwl1MzIgICAgICAgIHNzZWM6MTsJLyogc29mdCBzZWN0b3IgZm9ybWF0dGluZyAqLworI2VuZGlmCisJdTMyICAgICAgICByZXNlcnZlZDM6MjQ7Cit9OworCisvKgorICogU0NTSSByaWdpZCBkaXNrIGRldmljZSBnZW9tZXRyeSBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX3JpZ2lkX2RldmljZV9nZW9tZXRyeV9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBwczoxOworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTMyICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTMyICAgICAgICBwYWdlX2NvZGU6NjsKKwl1MzIgICAgICAgIHJlc2VydmVkMToxOworCXUzMiAgICAgICAgcHM6MTsKKyNlbmRpZgorCXUzMiAgICAgICAgcGFnZV9sZW46ODsKKwl1MzIgICAgICAgIG51bV9jeWxpbmRlcnMwOjg7CisJdTMyICAgICAgICBudW1fY3lsaW5kZXJzMTo4OworCisJdTMyICAgICAgICBudW1fY3lsaW5kZXJzMjo4OworCXUzMiAgICAgICAgbnVtX2hlYWRzOjg7CisJdTMyICAgICAgICBzY3dwMDo4OworCXUzMiAgICAgICAgc2N3cDE6ODsKKworCXUzMiAgICAgICAgc2N3cDI6ODsKKwl1MzIgICAgICAgIHNjcndjMDo4OworCXUzMiAgICAgICAgc2Nyd2MxOjg7CisJdTMyICAgICAgICBzY3J3YzI6ODsKKworCXUzMiAgICAgICAgZHNyOjE2OworCXUzMiAgICAgICAgbHNjeWwwOjg7CisJdTMyICAgICAgICBsc2N5bDE6ODsKKworCXUzMiAgICAgICAgbHNjeWwyOjg7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHJlc2VydmVkMjo2OworCXUzMiAgICAgICAgcnBsOjI7CS8qIHJvdGF0aW9uYWwgcG9zaXRpb24gbG9ja2luZyAqLworI2Vsc2UKKwl1MzIgICAgICAgIHJwbDoyOwkvKiByb3RhdGlvbmFsIHBvc2l0aW9uIGxvY2tpbmcgKi8KKwl1MzIgICAgICAgIHJlc2VydmVkMjo2OworI2VuZGlmCisJdTMyICAgICAgICByb3Rfb2ZmOjg7CisJdTMyICAgICAgICByZXNlcnZlZDM6ODsKKworCXUzMiAgICAgICAgbWVkX3JvdF9yYXRlOjE2OworCXUzMiAgICAgICAgcmVzZXJ2ZWQ0OjE2OworfTsKKworLyoKKyAqIFNDU0kgY2FjaGluZyBtb2RlIHBhZ2UKKyAqLworc3RydWN0IHNjc2lfbXBfY2FjaGluZ19zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwczoxOworCXU4ICAgICAgICAgcmVzMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXMxOjE7CisJdTggICAgICAgICBwczoxOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2xlbjsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgaWM6MTsJLyogaW5pdGlhdG9yIGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIGFicGY6MTsJLyogYWJvcnQgcHJlLWZldGNoICovCisJdTggICAgICAgICBjYXA6MTsJLyogY2FjaGluZyBhbmFseXNpcyBwZXJtaXR0ZWQgKi8KKwl1OCAgICAgICAgIGRpc2M6MTsJLyogZGlzY29udGludWl0eSAqLworCXU4ICAgICAgICAgc2l6ZToxOwkvKiBzaXplIGVuYWJsZSAqLworCXU4ICAgICAgICAgd2NlOjE7CS8qIHdyaXRlIGNhY2hlIGVuYWJsZSAqLworCXU4ICAgICAgICAgbWY6MTsJLyogbXVsdGlwbGljYXRpb24gZmFjdG9yICovCisJdTggICAgICAgICByY2Q6MTsJLyogcmVhZCBjYWNoZSBkaXNhYmxlICovCisKKwl1OCAgICAgICAgIGRycnA6NDsJLyogZGVtYW5kIHJlYWQgcmV0ZW50aW9uIHByaW9yaXR5ICovCisJdTggICAgICAgICB3cnA6NDsJLyogd3JpdGUgcmV0ZW50aW9uIHByaW9yaXR5ICovCisjZWxzZQorCXU4ICAgICAgICAgcmNkOjE7CS8qIHJlYWQgY2FjaGUgZGlzYWJsZSAqLworCXU4ICAgICAgICAgbWY6MTsJLyogbXVsdGlwbGljYXRpb24gZmFjdG9yICovCisJdTggICAgICAgICB3Y2U6MTsJLyogd3JpdGUgY2FjaGUgZW5hYmxlICovCisJdTggICAgICAgICBzaXplOjE7CS8qIHNpemUgZW5hYmxlICovCisJdTggICAgICAgICBkaXNjOjE7CS8qIGRpc2NvbnRpbnVpdHkgKi8KKwl1OCAgICAgICAgIGNhcDoxOwkvKiBjYWNoaW5nIGFuYWx5c2lzIHBlcm1pdHRlZCAqLworCXU4ICAgICAgICAgYWJwZjoxOwkvKiBhYm9ydCBwcmUtZmV0Y2ggKi8KKwl1OCAgICAgICAgIGljOjE7CS8qIGluaXRpYXRvciBjb250cm9sICovCisKKwl1OCAgICAgICAgIHdycDo0OwkvKiB3cml0ZSByZXRlbnRpb24gcHJpb3JpdHkgKi8KKwl1OCAgICAgICAgIGRycnA6NDsJLyogZGVtYW5kIHJlYWQgcmV0ZW50aW9uIHByaW9yaXR5ICovCisjZW5kaWYKKwl1OCAgICAgICAgIGRwdGxbMl07LyogZGlzYWJsZSBwcmUtZmV0Y2ggdHJhbnNmZXIgbGVuZ3RoICovCisJdTggICAgICAgICBtaW5fcHJlZmV0Y2hbMl07CisJdTggICAgICAgICBtYXhfcHJlZmV0Y2hbMl07CisJdTggICAgICAgICBtYXhfcHJlZmV0Y2hfbGltaXRbMl07CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGZzdzoxOwkvKiBmb3JjZSBzZXF1ZW50aWFsIHdyaXRlICovCisJdTggICAgICAgICBsYmNzczoxOy8qIGxvZ2ljYWwgYmxvY2sgY2FjaGUgc2VnbWVudCBzaXplICovCisJdTggICAgICAgICBkcmE6MTsJLyogZGlzYWJsZSByZWFkIGFoZWFkICovCisJdTggICAgICAgICB2czoyOwkvKiB2ZW5kb3Igc3BlY2lmaWMgKi8KKwl1OCAgICAgICAgIHJlczI6MzsKKyNlbHNlCisJdTggICAgICAgICByZXMyOjM7CisJdTggICAgICAgICB2czoyOwkvKiB2ZW5kb3Igc3BlY2lmaWMgKi8KKwl1OCAgICAgICAgIGRyYToxOwkvKiBkaXNhYmxlIHJlYWQgYWhlYWQgKi8KKwl1OCAgICAgICAgIGxiY3NzOjE7LyogbG9naWNhbCBibG9jayBjYWNoZSBzZWdtZW50IHNpemUgKi8KKwl1OCAgICAgICAgIGZzdzoxOwkvKiBmb3JjZSBzZXF1ZW50aWFsIHdyaXRlICovCisjZW5kaWYKKwl1OCAgICAgICAgIG51bV9jYWNoZV9zZWdzOworCisJdTggICAgICAgICBjYWNoZV9zZWdfc2l6ZVsyXTsKKwl1OCAgICAgICAgIHJlczM7CisJdTggICAgICAgICBub25fY2FjaGVfc2VnX3NpemVbM107Cit9OworCisvKgorICogU0NTSSBjb250cm9sIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9jb250cm9sX3BhZ2Vfc3sKKyNpZmRlZiBfX0JJR0VORElBTgordTggICAgICAgICBwczoxOwordTggICAgICAgICByZXNlcnZlZDE6MTsKK3U4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQordTggICAgICAgICBwYWdlX2NvZGU6NjsKK3U4ICAgICAgICAgcmVzZXJ2ZWQxOjE7Cit1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICB0c3Q6MzsJCS8qIHRhc2sgc2V0IHR5cGUgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzozOworCXU4ICAgICAgICAgZ2x0c2Q6MTsJLyogZ2xvYmFsIGxvZ2dpbmcgdGFyZ2V0IHNhdmUgZGlzYWJsZSAqLworCXU4ICAgICAgICAgcmxlYzoxOwkJLyogcmVwb3J0IGxvZyBleGNlcHRpb24gY29uZGl0aW9uICovCisKKwl1OCAgICAgICAgIHFhbGdvX21vZDo0OwkvKiBxdWV1ZSBhbG9nb3JpdGhtIG1vZGlmaWVyICovCisJdTggICAgICAgICByZXNlcnZlZDQ6MTsKKwl1OCAgICAgICAgIHFlcnI6MjsJCS8qIHF1ZXVlIGVycm9yIG1hbmFnZW1lbnQgKi8KKwl1OCAgICAgICAgIGRxdWU6MTsJCS8qIGRpc2FibGUgcXVldWluZyAqLworCisJdTggICAgICAgICByZXNlcnZlZDU6MTsKKwl1OCAgICAgICAgIHJhYzoxOwkJLyogcmVwb3J0IGEgY2hlY2sgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNjoyOworCXU4ICAgICAgICAgc3dwOjE7CQkvKiBzb2Z0d2FyZSB3cml0ZSBwcm90ZWN0ICovCisJdTggICAgICAgICByYWVycDoxOwkvKiByZWFkeSBBRVIgcGVybWlzc2lvbiAqLworCXU4ICAgICAgICAgdWFhZXJwOjE7CS8qIHVuaXQgYXR0ZW5zdGlvbiBBRVIgcGVybWlzc2lvbiAqLworCXU4ICAgICAgICAgZWFlcnA6MTsJLyogZXJyb3IgQUVSIHBlcm1pc3Npb24gKi8KKworCXU4ICAgICAgICAgcmVzZXJ2ZWQ3OjU7CisJdTggICAgICAgICBhdXRvbG9hZF9tb2Q6MzsKKyNlbHNlCisJdTggICAgICAgICBybGVjOjE7CQkvKiByZXBvcnQgbG9nIGV4Y2VwdGlvbiBjb25kaXRpb24gKi8KKwl1OCAgICAgICAgIGdsdHNkOjE7CS8qIGdsb2JhbCBsb2dnaW5nIHRhcmdldCBzYXZlIGRpc2FibGUgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzozOworCXU4ICAgICAgICAgdHN0OjM7CQkvKiB0YXNrIHNldCB0eXBlICovCisKKwl1OCAgICAgICAgIGRxdWU6MTsJCS8qIGRpc2FibGUgcXVldWluZyAqLworCXU4ICAgICAgICAgcWVycjoyOwkJLyogcXVldWUgZXJyb3IgbWFuYWdlbWVudCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjE7CisJdTggICAgICAgICBxYWxnb19tb2Q6NDsJLyogcXVldWUgYWxvZ29yaXRobSBtb2RpZmllciAqLworCisJdTggICAgICAgICBlYWVycDoxOwkvKiBlcnJvciBBRVIgcGVybWlzc2lvbiAqLworCXU4ICAgICAgICAgdWFhZXJwOjE7CS8qIHVuaXQgYXR0ZW5zdGlvbiBBRVIgcGVybWlzc2lvbiAqLworCXU4ICAgICAgICAgcmFlcnA6MTsJLyogcmVhZHkgQUVSIHBlcm1pc3Npb24gKi8KKwl1OCAgICAgICAgIHN3cDoxOwkJLyogc29mdHdhcmUgd3JpdGUgcHJvdGVjdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ2OjI7CisJdTggICAgICAgICByYWM6MTsJCS8qIHJlcG9ydCBhIGNoZWNrICovCisJdTggICAgICAgICByZXNlcnZlZDU6MTsKKworCXU4ICAgICAgICAgYXV0b2xvYWRfbW9kOjM7CisJdTggICAgICAgICByZXNlcnZlZDc6NTsKKyNlbmRpZgorCXU4ICAgICAgICAgcmFocF9tc2I7CS8qIHJlYWR5IEFFUiBob2xkb2ZmIHBlcmlvZCAtIE1TQiAqLworCXU4ICAgICAgICAgcmFocF9sc2I7CS8qIHJlYWR5IEFFUiBob2xkb2ZmIHBlcmlvZCAtIExTQiAqLworCisJdTggICAgICAgICBidXN5X3RpbWVvdXRfcGVyaW9kX21zYjsKKwl1OCAgICAgICAgIGJ1c3lfdGltZW91dF9wZXJpb2RfbHNiOworCisJdTggICAgICAgICBleHRfc2VsZnRlc3RfY29tcGxfdGltZV9tc2I7CisJdTggICAgICAgICBleHRfc2VsZnRlc3RfY29tcGxfdGltZV9sc2I7Cit9OworCisvKgorICogU0NTSSBtZWRpdW0gdHlwZXMgc3VwcG9ydGVkIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9tZWRpdW1fdHlwZXNfc3VwX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBzOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwczoxOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2xlbjsKKworCXU4ICAgICAgICAgcmVzZXJ2ZWQzWzJdOworCXU4ICAgICAgICAgbWVkX3R5cGUxX3N1cDsJLyogbWVkaXVtIHR5cGUgb25lIHN1cHBvcnRlZCAqLworCXU4ICAgICAgICAgbWVkX3R5cGUyX3N1cDsJLyogbWVkaXVtIHR5cGUgdHdvIHN1cHBvcnRlZCAqLworCXU4ICAgICAgICAgbWVkX3R5cGUzX3N1cDsJLyogbWVkaXVtIHR5cGUgdGhyZWUgc3VwcG9ydGVkICovCisJdTggICAgICAgICBtZWRfdHlwZTRfc3VwOwkvKiBtZWRpdW0gdHlwZSBmb3VyIHN1cHBvcnRlZCAqLworfTsKKworLyoKKyAqIFNDU0kgaW5mb3JtYXRpb25hbCBleGNlcHRpb24gY29udHJvbCBtb2RlIHBhZ2UKKyAqLworc3RydWN0IHNjc2lfbXBfaW5mb19leGNwdF9jbnRsX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBzOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwczoxOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2xlbjsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcGVyZjoxOwkJLyogcGVyZm9ybWFuY2UgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzoxOworCXU4ICAgICAgICAgZWJmOjE7CQkvKiBlbmFibGUgYmFja2dyb3VuZCBmdWNudGlvbiAqLworCXU4ICAgICAgICAgZXdhc2M6MTsJLyogZW5hYmxlIHdhcm5pbmcgKi8KKwl1OCAgICAgICAgIGRleGNwdDoxOwkvKiBkaXNhYmxlIGV4Y2VwdGlvbiBjb250cm9sICovCisJdTggICAgICAgICB0ZXN0OjE7CQkvKiBlbmFibGUgdGVzdCBkZXZpY2UgZmFpbHVyZQorCQkJCQkgKiBub3RpZmljYXRpb24KKwkJCQkJICovCisJdTggICAgICAgICByZXNlcnZlZDQ6MTsKKwl1OCAgICAgICAgIGxvZ19lcnJvcjoxOworCisJdTggICAgICAgICByZXNlcnZlZDU6NDsKKwl1OCAgICAgICAgIG1yaWU6NDsJCS8qIG1ldGhvZCBvZiByZXBvcnRpbmcgaW5mbworCQkJCQkgKiBleGNlcHRpb25zCisJCQkJCSAqLworI2Vsc2UKKwl1OCAgICAgICAgIGxvZ19lcnJvcjoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjE7CisJdTggICAgICAgICB0ZXN0OjE7CQkvKiBlbmFibGUgdGVzdCBkZXZpY2UgZmFpbHVyZQorCQkJCQkgKiBub3RpZmljYXRpb24KKwkJCQkJICovCisJdTggICAgICAgICBkZXhjcHQ6MTsJLyogZGlzYWJsZSBleGNlcHRpb24gY29udHJvbCAqLworCXU4ICAgICAgICAgZXdhc2M6MTsJLyogZW5hYmxlIHdhcm5pbmcgKi8KKwl1OCAgICAgICAgIGViZjoxOwkJLyogZW5hYmxlIGJhY2tncm91bmQgZnVjbnRpb24gKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzoxOworCXU4ICAgICAgICAgcGVyZjoxOwkJLyogcGVyZm9ybWFuY2UgKi8KKworCXU4ICAgICAgICAgbXJpZTo0OwkJLyogbWV0aG9kIG9mIHJlcG9ydGluZyBpbmZvCisJCQkJCSAqIGV4Y2VwdGlvbnMKKwkJCQkJICovCisJdTggICAgICAgICByZXNlcnZlZDU6NDsKKyNlbmRpZgorCXU4ICAgICAgICAgaW50ZXJ2YWxfdGltZXJfbXNiOworCXU4ICAgICAgICAgaW50ZXJ2YWxfdGltZXJfbHNiOworCisJdTggICAgICAgICByZXBvcnRfY291bnRfbXNiOworCXU4ICAgICAgICAgcmVwb3J0X2NvdW50X2xzYjsKK307CisKKy8qCisgKiBNZXRob2RzIG9mIHJlcG9ydGluZyBpbmZvcm1hdGlvbmFsIGV4Y2VwdGlvbnMKKyAqLworI2RlZmluZSBTQ1NJX01QX0lFQ19OT19SRVBPUlQgICAgICAgMHgwCS8qIG5vIHJlcG9ydGluZyBvZiBleGNlcHRpb25zICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX0FFUiAgICAgICAgICAgICAweDEJLyogYXN5bmMgZXZlbnQgcmVwb3J0aW5nICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX1VOSVRfQVRUTiAgICAgICAweDIJLyogZ2VuZXJhdGUgdW5pdCBhdHRlbnN0aW9uICovCisjZGVmaW5lIFNDU0lfTU9fSUVDX0NPTkRfUkVDX0VSUiAgICAweDMJLyogY29uZGl0aW9uYWxseSBnZW5lcmF0ZSByZWNvdmVyZWQKKwkJCQkJICogZXJyb3IKKwkJCQkJICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX1VOQ09ORF9SRUNfRVJSICAweDQJLyogdW5jb25kaXRpb25hbGx5IGdlbmVyYXRlIHJlY292ZXJlZAorCQkJCQkgKiBlcnJvcgorCQkJCQkgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfTk9fU0VOU0UgICAgICAgIDB4NQkvKiBnZW5lcmF0ZSBubyBzZW5zZSAqLworI2RlZmluZSBTQ1NJX01QX0lFQ19PTl9SRVFVRVNUICAgICAgMHg2CS8qIG9ubHkgcmVwb3J0IGV4Y2VwdGlvbnMgb24gcmVxdWVzdCAqLworCisvKgorICogU0NTSSBmbGV4aWJsZSBkaXNrIHBhZ2UKKyAqLworc3RydWN0IHNjc2lfbXBfZmxleGlibGVfZGlza19zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwczoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcHM6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9sZW47CisKKwl1OCAgICAgICAgIHRyYW5zZmVyX3JhdGVfbXNiOworCXU4ICAgICAgICAgdHJhbnNmZXJfcmF0ZV9sc2I7CisKKwl1OCAgICAgICAgIG51bV9oZWFkczsKKwl1OCAgICAgICAgIG51bV9zZWN0b3JzOworCisJdTggICAgICAgICBieXRlc19wZXJfc2VjdG9yX21zYjsKKwl1OCAgICAgICAgIGJ5dGVzX3Blcl9zZWN0b3JfbHNiOworCisJdTggICAgICAgICBudW1fY3lsaW5kZXJzX21zYjsKKwl1OCAgICAgICAgIG51bV9jeWxpbmRlcnNfbHNiOworCisJdTggICAgICAgICBzY193cGNfbXNiOwkvKiBzdGFydGluZyBjeWxpbmRlci13cml0ZQorCQkJCQkgKiBwcmVjb21wZW5zYXRpb24gbXNiCisJCQkJCSAqLworCXU4ICAgICAgICAgc2Nfd3BjX2xzYjsJLyogc3RhcnRpbmcgY3lsaW5kZXItd3JpdGUKKwkJCQkJICogcHJlY29tcGVuc2F0aW9uIGxzYgorCQkJCQkgKi8KKwl1OCAgICAgICAgIHNjX3J3Y19tc2I7CS8qIHN0YXJ0aW5nIGN5bGluZGVyLXJlZHVjZWQgd3JpdGUKKwkJCQkJICogY3VycmVudCBtc2IKKwkJCQkJICovCisJdTggICAgICAgICBzY19yd2NfbHNiOwkvKiBzdGFydGluZyBjeWxpbmRlci1yZWR1Y2VkIHdyaXRlCisJCQkJCSAqIGN1cnJlbnQgbHNiCisJCQkJCSAqLworCisJdTggICAgICAgICBkZXZfc3RlcF9yYXRlX21zYjsKKwl1OCAgICAgICAgIGRldl9zdGVwX3JhdGVfbHNiOworCisJdTggICAgICAgICBkZXZfc3RlcF9wdWxzZV93aWR0aDsKKworCXU4ICAgICAgICAgaGVhZF9zZF9tc2I7CS8qIGhlYWQgc2V0dGxlIGRlbGF5IG1zYiAqLworCXU4ICAgICAgICAgaGVhZF9zZF9sc2I7CS8qIGhlYWQgc2V0dGxlIGRlbGF5IGxzYiAqLworCisJdTggICAgICAgICBtb3Rvcl9vbl9kZWxheTsKKwl1OCAgICAgICAgIG1vdG9yX29mZl9kZWxheTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgdHJkeToxOwkJLyogdHJ1ZSByZWFkeSBiaXQgKi8KKwl1OCAgICAgICAgIHNzbjoxOwkJLyogc3RhcnQgc2VjdG9yIG51bWJlciBiaXQgKi8KKwl1OCAgICAgICAgIG1vOjE7CQkvKiBtb3RvciBvbiBiaXQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzo1OworCisJdTggICAgICAgICByZXNlcnZlZDQ6NDsKKwl1OCAgICAgICAgIHNwYzo0OwkJLyogc3RlcCBwdWxzZSBwZXIgY3lsaW5kZXIgKi8KKyNlbHNlCisJdTggICAgICAgICByZXNlcnZlZDM6NTsKKwl1OCAgICAgICAgIG1vOjE7CQkvKiBtb3RvciBvbiBiaXQgKi8KKwl1OCAgICAgICAgIHNzbjoxOwkJLyogc3RhcnQgc2VjdG9yIG51bWJlciBiaXQgKi8KKwl1OCAgICAgICAgIHRyZHk6MTsJCS8qIHRydWUgcmVhZHkgYml0ICovCisKKwl1OCAgICAgICAgIHNwYzo0OwkJLyogc3RlcCBwdWxzZSBwZXIgY3lsaW5kZXIgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDo0OworI2VuZGlmCisJdTggICAgICAgICB3cml0ZV9jb21wOworCXU4ICAgICAgICAgaGVhZF9sb2FkX2RlbGF5OworCXU4ICAgICAgICAgaGVhZF91bmxvYWRfZGVsYXk7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBpbjM0OjQ7CS8qIHBpbjM0IHVzYWdlICovCisJdTggICAgICAgICBwaW4yOjQ7CQkvKiBwaW4yIHVzYWdlICovCisKKwl1OCAgICAgICAgIHBpbjQ6NDsJCS8qIHBpbjQgdXNhZ2UgKi8KKwl1OCAgICAgICAgIHBpbjE6NDsJCS8qIHBpbjEgdXNhZ2UgKi8KKyNlbHNlCisJdTggICAgICAgICBwaW4yOjQ7CQkvKiBwaW4yIHVzYWdlICovCisJdTggICAgICAgICBwaW4zNDo0OwkvKiBwaW4zNCB1c2FnZSAqLworCisJdTggICAgICAgICBwaW4xOjQ7CQkvKiBwaW4xIHVzYWdlICovCisJdTggICAgICAgICBwaW40OjQ7CQkvKiBwaW40IHVzYWdlICovCisjZW5kaWYKKwl1OCAgICAgICAgIG1lZF9yb3RfcmF0ZV9tc2I7CisJdTggICAgICAgICBtZWRfcm90X3JhdGVfbHNiOworCisJdTggICAgICAgICByZXNlcnZlZDVbMl07Cit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhZ2VfZm9ybWF0X2RhdGE2X3N7CisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXI2X3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX2Zvcm1hdF9kZXZpY2VfcyBmb3JtYXQ7CS8qIGZvcm1hdCBkZXZpY2UgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX2Zvcm1hdF9kYXRhMTBfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjEwX3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX2Zvcm1hdF9kZXZpY2VfcyBmb3JtYXQ7CS8qIGZvcm1hdCBkZXZpY2UgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX3JkZ19kYXRhNl9zeworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyNl9zIG1waDsJLyogbW9kZSBwYWdlIGhlYWRlciAqLworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1fZGVzY19zIGRlc2M7CS8qIGJsb2NrIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3Qgc2NzaV9tcF9yaWdpZF9kZXZpY2VfZ2VvbWV0cnlfcyByZGc7CisJCQkJCS8qIHJpZ2lkIGdlb21ldHJ5IGRhdGEgKi8KK307CisKK3N0cnVjdCBzY3NpX21vZGVfcGFnZV9yZGdfZGF0YTEwX3N7CisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXIxMF9zIG1waDsJLyogbW9kZSBwYWdlIGhlYWRlciAqLworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1fZGVzY19zIGRlc2M7CS8qIGJsb2NrIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3Qgc2NzaV9tcF9yaWdpZF9kZXZpY2VfZ2VvbWV0cnlfcyByZGc7CisJCQkJCS8qIHJpZ2lkIGdlb21ldHJ5IGRhdGEgKi8KK307CisKK3N0cnVjdCBzY3NpX21vZGVfcGFnZV9jYWNoZTZfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjZfcyBtcGg7CS8qIG1vZGUgcGFnZSBoZWFkZXIgKi8KKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2NfcyBkZXNjOwkvKiBibG9jayBkZXNjcmlwdG9yICovCisJc3RydWN0IHNjc2lfbXBfY2FjaGluZ19zIGNhY2hlOwkvKiBjYWNoZSBwYWdlIGRhdGEgKi8KK307CisKK3N0cnVjdCBzY3NpX21vZGVfcGFnZV9jYWNoZTEwX3N7CisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXIxMF9zIG1waDsJLyogbW9kZSBwYWdlIGhlYWRlciAqLworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1fZGVzY19zIGRlc2M7CS8qIGJsb2NrIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3Qgc2NzaV9tcF9jYWNoaW5nX3MgY2FjaGU7CS8qIGNhY2hlIHBhZ2UgZGF0YSAqLworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZvcm1hdCBVbml0IGNvbW1hbmQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBGb3JtYXQgVW5pdCBDREIKKyAqLworc3RydWN0IHNjc2lfZm9ybWF0X3VuaXRfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzMTozOworCXU4ICAgICAgICAgZm10ZGF0YToxOwkvKiBpZiBzZXQsIGRhdGEgb3V0IHBoYXNlIGhhcyBmb3JtYXQKKwkJCQkJICogZGF0YQorCQkJCQkgKi8KKwl1OCAgICAgICAgIGNtcGxzdDoxOwkvKiBpZiBzZXQsIGRlZmVjdCBsaXN0IGlzIGNvbXBsZXRlICovCisJdTggICAgICAgICBkZWZfbGlzdDozOwkvKiBmb3JtYXQgb2YgZGVmZWN0IGRlc2NyaXB0b3IgaXMKKwkJCQkJICogZm10ZGF0YSA9MQorCQkJCQkgKi8KKyNlbHNlCisJdTggICAgICAgICBkZWZfbGlzdDozOwkvKiBmb3JtYXQgb2YgZGVmZWN0IGRlc2NyaXB0b3IgaXMKKwkJCQkJICogZm10ZGF0YSA9IDEKKwkJCQkJICovCisJdTggICAgICAgICBjbXBsc3Q6MTsJLyogaWYgc2V0LCBkZWZlY3QgbGlzdCBpcyBjb21wbGV0ZSAqLworCXU4ICAgICAgICAgZm10ZGF0YToxOwkvKiBpZiBzZXQsIGRhdGEgb3V0IHBoYXNlIGhhcyBmb3JtYXQKKwkJCQkJICogZGF0YQorCQkJCQkgKi8KKwl1OCAgICAgICAgIHJlczE6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgaW50ZXJsZWF2ZV9tc2I7CisJdTggICAgICAgICBpbnRlcmxlYXZlX2xzYjsKKwl1OCAgICAgICAgIHZlbmRvcl9zcGVjOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBoCisgKi8KK3N0cnVjdCBzY3NpX3Jlc2VydmU2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkOjM7CisJdTggICAgICAgICBvYnNvbGV0ZTo0OworCXU4ICAgICAgICAgZXh0ZW50OjE7CisjZWxzZQorCXU4ICAgICAgICAgZXh0ZW50OjE7CisJdTggICAgICAgICBvYnNvbGV0ZTo0OworCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2YXRpb25faWQ7CisJdTE2ICAgICAgICBwYXJhbV9saXN0X2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogaAorICovCitzdHJ1Y3Qgc2NzaV9yZWxlYXNlNl9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIG9ic29sZXRlOjQ7CisJdTggICAgICAgICBleHRlbnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBleHRlbnQ6MTsKKwl1OCAgICAgICAgIG9ic29sZXRlOjQ7CisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2YXRpb25faWQ7CisJdTE2ICAgICAgICByZXNlcnZlZDI7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIGgKKyAqLworc3RydWN0IHNjc2lfcmVzZXJ2ZTEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgdGhpcmRfcGFydHk6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyOworCXU4ICAgICAgICAgbG9uZ19pZDoxOworCXU4ICAgICAgICAgZXh0ZW50OjE7CisjZWxzZQorCXU4ICAgICAgICAgZXh0ZW50OjE7CisJdTggICAgICAgICBsb25nX2lkOjE7CisJdTggICAgICAgICByZXNlcnZlZDI6MjsKKwl1OCAgICAgICAgIHRoaXJkX3BhcnR5OjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2YXRpb25faWQ7CisJdTggICAgICAgICB0aGlyZF9wdHlfZGV2X2lkOworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OworCXU4ICAgICAgICAgcmVzZXJ2ZWQ1OworCXUxNiAgICAgICAgcGFyYW1fbGlzdF9sZW47CisJdTggICAgICAgICBjb250cm9sOworfTsKKworc3RydWN0IHNjc2lfcmVsZWFzZTEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgdGhpcmRfcGFydHk6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyOworCXU4ICAgICAgICAgbG9uZ19pZDoxOworCXU4ICAgICAgICAgZXh0ZW50OjE7CisjZWxzZQorCXU4ICAgICAgICAgZXh0ZW50OjE7CisJdTggICAgICAgICBsb25nX2lkOjE7CisJdTggICAgICAgICByZXNlcnZlZDI6MjsKKwl1OCAgICAgICAgIHRoaXJkX3BhcnR5OjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2YXRpb25faWQ7CisJdTggICAgICAgICB0aGlyZF9wdHlfZGV2X2lkOworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OworCXU4ICAgICAgICAgcmVzZXJ2ZWQ1OworCXUxNiAgICAgICAgcGFyYW1fbGlzdF9sZW47CisJdTggICAgICAgICBjb250cm9sOworfTsKKworc3RydWN0IHNjc2lfdmVyaWZ5MTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICBkcG86MTsKKwl1OCAgICAgICAgIHJlc2VydmVkOjI7CisJdTggICAgICAgICBieXRjaGs6MTsKKwl1OCAgICAgICAgIHJlbGFkZHI6MTsKKyNlbHNlCisJdTggICAgICAgICByZWxhZGRyOjE7CisJdTggICAgICAgICBieXRjaGs6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkOjI7CisJdTggICAgICAgICBkcG86MTsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICBsYmEwOworCXU4ICAgICAgICAgbGJhMTsKKwl1OCAgICAgICAgIGxiYTI7CisJdTggICAgICAgICBsYmEzOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOworCXU4ICAgICAgICAgdmVyaWZpY2F0aW9uX2xlbjA7CisJdTggICAgICAgICB2ZXJpZmljYXRpb25fbGVuMTsKKwl1OCAgICAgICAgIGNvbnRyb2xfYnl0ZTsKK307CisKK3N0cnVjdCBzY3NpX3JlcXVlc3Rfc2Vuc2Vfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICByZXNlcnZlZDo1OworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkOjU7CisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2ZWQwOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOworCXU4ICAgICAgICAgYWxsb2NfbGVuOworCXU4ICAgICAgICAgY29udHJvbF9ieXRlOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTQ1NJIHN0YXR1cyBieXRlIHZhbHVlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgU0NTSV9TVEFUVVNfR09PRCAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFNDU0lfU1RBVFVTX0NIRUNLX0NPTkRJVElPTiAgICAgICAgMHgwMgorI2RlZmluZSBTQ1NJX1NUQVRVU19DT05ESVRJT05fTUVUICAgICAgICAgIDB4MDQKKyNkZWZpbmUgU0NTSV9TVEFUVVNfQlVTWSAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFNDU0lfU1RBVFVTX0lOVEVSTUVESUFURSAgICAgICAgICAgMHgxMAorI2RlZmluZSBTQ1NJX1NUQVRVU19JQ00gICAgICAgICAgICAgICAgICAgIDB4MTQJLyogaW50ZXJtZWRpYXRlIGNvbmRpdGlvbiBtZXQgKi8KKyNkZWZpbmUgU0NTSV9TVEFUVVNfUkVTRVJWQVRJT05fQ09ORkxJQ1QgICAweDE4CisjZGVmaW5lIFNDU0lfU1RBVFVTX0NPTU1BTkRfVEVSTUlOQVRFRCAgICAgMHgyMgorI2RlZmluZSBTQ1NJX1NUQVRVU19RVUVVRV9GVUxMICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgU0NTSV9TVEFUVVNfQUNBX0FDVElWRSAgICAgICAgICAgICAweDMwCisKKyNkZWZpbmUgU0NTSV9NQVhfQUxMT0NfTEVOCQkweEZGCS8qIG1heGltdW0gYWxsb2NhcmlvbiBsZW5ndGgKKwkJCQkJCSAqIGluIENEQnMKKwkJCQkJCSAqLworCisjZGVmaW5lIFNDU0lfT1BfV1JJVEVfVkVSSUZZMTAgICAgICAweDJFCisjZGVmaW5lIFNDU0lfT1BfV1JJVEVfVkVSSUZZMTIgICAgICAweEFFCisjZGVmaW5lIFNDU0lfT1BfVU5ERUYgICAgICAgICAgICAgICAweEZGCisKKy8qCisgKiBTQ1NJIFdSSVRFLVZFUklGWSgxMCkgY29tbWFuZAorICovCitzdHJ1Y3Qgc2NzaV93cml0ZV92ZXJpZnkxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIGRwbzoxOwkJLyogRGlzYWJsZSBQYWdlIE91dCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjE7CisJdTggICAgICAgICBlYnA6MTsJCS8qIGVyc2UgYnktcGFzcyAqLworCXU4ICAgICAgICAgYnl0Y2hrOjE7CS8qIGJ5dGUgY2hlY2sgKi8KKwl1OCAgICAgICAgIHJlbF9hZHI6MTsJLyogcmVsYXRpdmUgYWRkcmVzcyAqLworI2Vsc2UKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsJLyogcmVsYXRpdmUgYWRkcmVzcyAqLworCXU4ICAgICAgICAgYnl0Y2hrOjE7CS8qIGJ5dGUgY2hlY2sgKi8KKwl1OCAgICAgICAgIGVicDoxOwkJLyogZXJzZSBieS1wYXNzICovCisJdTggICAgICAgICByZXNlcnZlZDI6MTsKKwl1OCAgICAgICAgIGRwbzoxOwkJLyogRGlzYWJsZSBQYWdlIE91dCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIGxiYTA7CQkvKiBsb2dpY2FsIGJsb2NrIGFkZHJlc3MgLSBNU0IgKi8KKwl1OCAgICAgICAgIGxiYTE7CisJdTggICAgICAgICBsYmEyOworCXU4ICAgICAgICAgbGJhMzsJCS8qIExTQiAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOworCXU4ICAgICAgICAgeGZlcl9sZW5ndGgwOwkvKiB0cmFuc2ZlciBsZW5ndGggaW4gYmxvY2tzIC0gTVNCICovCisJdTggICAgICAgICB4ZmVyX2xlbmd0aDE7CS8qIExTQiAqLworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX1NDU0lfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvdHlwZXMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzVhNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvdHlwZXMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIHR5cGVzLmggUHJvdG9jb2wgZGVmaW5lZCBiYXNlIHR5cGVzCisgKi8KKworI2lmbmRlZiBfX1RZUEVTX0hfXworI2RlZmluZSBfX1RZUEVTX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorCisjZGVmaW5lIHd3bl90IHU2NAorI2RlZmluZSBsdW5fdCB1NjQKKworI2RlZmluZSBXV05fTlVMTAkoMCkKKyNkZWZpbmUgRkNfU1lNTkFNRV9NQVgJMjU2CS8qICBtYXggbmFtZSBzZXJ2ZXIgc3ltYm9saWMgbmFtZSBzaXplICovCisjZGVmaW5lIEZDX0FMUEFfTUFYCTEyOAorCisjcHJhZ21hIHBhY2soMSkKKworI2RlZmluZSBNQUNfQUREUkxFTgkoNikKK3N0cnVjdCBtYWNfcyB7IHU4IG1hY1tNQUNfQUREUkxFTl07IH07CisjZGVmaW5lIG1hY190IHN0cnVjdCBtYWNfcworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvbG9vcC5jIGIvZHJpdmVycy9zY3NpL2JmYS9sb29wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxOGRlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvbG9vcC5jCkBAIC0wLDAgKzEsNDIyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIHBvcnRfbG9vcC5jIHZwb3J0IHByaXZhdGUgbG9vcCBpbXBsZW1lbnRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBMT09QKTsKKworLyoqCisgKiAgIEFMUEEgdG8gTElYQSBiaXRtYXAgbWFwcGluZworICoKKyAqICAgQUxQQSAweDAwIChXb3JkIDAsIEJpdCAzMCkgaXMgaW52YWxpZCBmb3IgTl9Qb3J0cy4gQWxzbyBXb3JkIDAgQml0IDMxCisgKiBpcyBmb3IgTF9iaXQgKGxvZ2luIHJlcXVpcmVkKSBhbmQgaXMgZmlsbGVkIGFzIEFMUEEgMHgwMCBoZXJlLgorICovCitzdGF0aWMgY29uc3QgdTggICBwb3J0X2xvb3BfYWxwYV9tYXBbXSA9IHsKKwkweEVGLCAweEU4LCAweEU0LCAweEUyLCAweEUxLCAweEUwLCAweERDLCAweERBLAkvKiBXb3JkIDMgQml0cyAwLi43ICovCisJMHhEOSwgMHhENiwgMHhENSwgMHhENCwgMHhEMywgMHhEMiwgMHhEMSwgMHhDRSwJLyogV29yZCAzIEJpdHMgOC4uMTUgKi8KKwkweENELCAweENDLCAweENCLCAweENBLCAweEM5LCAweEM3LCAweEM2LCAweEM1LAkvKiBXb3JkIDMgQml0cyAxNi4uMjMgKi8KKwkweEMzLCAweEJDLCAweEJBLCAweEI5LCAweEI2LCAweEI1LCAweEI0LCAweEIzLAkvKiBXb3JkIDMgQml0cyAyNC4uMzEgKi8KKworCTB4QjIsIDB4QjEsIDB4QUUsIDB4QUQsIDB4QUMsIDB4QUIsIDB4QUEsIDB4QTksCS8qIFdvcmQgMiBCaXRzIDAuLjcgKi8KKwkweEE3LCAweEE2LCAweEE1LCAweEEzLCAweDlGLCAweDlFLCAweDlELCAweDlCLAkvKiBXb3JkIDIgQml0cyA4Li4xNSAqLworCTB4OTgsIDB4OTcsIDB4OTAsIDB4OEYsIDB4ODgsIDB4ODQsIDB4ODIsIDB4ODEsCS8qIFdvcmQgMiBCaXRzIDE2Li4yMyAqLworCTB4ODAsIDB4N0MsIDB4N0EsIDB4NzksIDB4NzYsIDB4NzUsIDB4NzQsIDB4NzMsCS8qIFdvcmQgMiBCaXRzIDI0Li4zMSAqLworCisJMHg3MiwgMHg3MSwgMHg2RSwgMHg2RCwgMHg2QywgMHg2QiwgMHg2QSwgMHg2OSwJLyogV29yZCAxIEJpdHMgMC4uNyAqLworCTB4NjcsIDB4NjYsIDB4NjUsIDB4NjMsIDB4NUMsIDB4NUEsIDB4NTksIDB4NTYsCS8qIFdvcmQgMSBCaXRzIDguLjE1ICovCisJMHg1NSwgMHg1NCwgMHg1MywgMHg1MiwgMHg1MSwgMHg0RSwgMHg0RCwgMHg0QywJLyogV29yZCAxIEJpdHMgMTYuLjIzICovCisJMHg0QiwgMHg0QSwgMHg0OSwgMHg0NywgMHg0NiwgMHg0NSwgMHg0MywgMHgzQywJLyogV29yZCAxIEJpdHMgMjQuLjMxICovCisKKwkweDNBLCAweDM5LCAweDM2LCAweDM1LCAweDM0LCAweDMzLCAweDMyLCAweDMxLAkvKiBXb3JkIDAgQml0cyAwLi43ICovCisJMHgyRSwgMHgyRCwgMHgyQywgMHgyQiwgMHgyQSwgMHgyOSwgMHgyNywgMHgyNiwJLyogV29yZCAwIEJpdHMgOC4uMTUgKi8KKwkweDI1LCAweDIzLCAweDFGLCAweDFFLCAweDFELCAweDFCLCAweDE4LCAweDE3LAkvKiBXb3JkIDAgQml0cyAxNi4uMjMgKi8KKwkweDEwLCAweDBGLCAweDA4LCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDAwLAkvKiBXb3JkIDAgQml0cyAyNC4uMzEgKi8KK307CisKKy8qCisgKiBMb2NhbCBGdW5jdGlvbnMKKyAqLworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfcG9ydF9sb29wX3NlbmRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgICAgIHU4IGFscGEpOworCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJIHZvaWQgKmNiYXJnLAorCQkJCQkJIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJIHUzMiByc3BfbGVuLAorCQkJCQkJIHUzMiByZXNpZF9sZW4sCisJCQkJCQkgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworCitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9hZGlzYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgICAgdTggYWxwYSk7CisKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9hZGlzY19yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQkgdm9pZCAqY2JhcmcsCisJCQkJCQkgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQkgdTMyIHJzcF9sZW4sCisJCQkJCQkgdTMyIHJlc2lkX2xlbiwKKwkJCQkJCSBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX3Bsb2dpX2FjYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCQkgdTggYWxwYSk7CisKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9wbG9naV9hY2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworCitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9hZGlzY19hY2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkJIHU4IGFscGEpOworCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfYWNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQkgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCSAgICAgdTMyIHJzcF9sZW4sCisJCQkJCQkgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBpbml0aWFsaXphciBpbiBwcm92YXRlIExPT1AgdG9wb2xvZ3kuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb25saW5lIHN0YXRlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbG9vcF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCisJdTggICAgICAgICBudW1fYWxwYSA9IHBvcnQtPnBvcnRfdG9wby5wbG9vcC5udW1fYWxwYTsKKwl1OCAgICAgICAgKmFscGFfcG9zX21hcCA9IHBvcnQtPnBvcnRfdG9wby5wbG9vcC5hbHBhX3Bvc19tYXA7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcl9wb3J0OworCWludCAgICAgICAgICAgICBpaSA9IDA7CisKKwkvKgorCSAqIElmIHRoZSBwb3J0IHJvbGUgaXMgSW5pdGlhdG9yIE1vZGUsIGNyZWF0ZSBScG9ydHMuCisJICovCisJaWYgKHBvcnQtPnBvcnRfY2ZnLnJvbGVzID09IEJGQV9QT1JUX1JPTEVfRkNQX0lNKSB7CisJCS8qCisJCSAqIENoZWNrIGlmIHRoZSBBTFBBIHBvc2l0aW9uYWwgYml0bWFwIGlzIGF2YWlsYWJsZS4KKwkJICogaWYgbm90LCB3ZSBzZW5kIFBMT0dJIHRvIGFsbCBwb3NzaWJsZSBBTFBBcy4KKwkJICovCisJCWlmIChudW1fYWxwYSA+IDApIHsKKwkJCWZvciAoaWkgPSAwOyBpaSA8IG51bV9hbHBhOyBpaSsrKSB7CisJCQkJLyoKKwkJCQkgKiBpZ25vcmUgQUxQQSBvZiBiZmEgcG9ydAorCQkJCSAqLworCQkJCWlmIChhbHBhX3Bvc19tYXBbaWldICE9IHBvcnQtPnBpZCkgeworCQkJCQlyX3BvcnQgPSBiZmFfZmNzX3Jwb3J0X2NyZWF0ZShwb3J0LAorCQkJCQkJYWxwYV9wb3NfbWFwW2lpXSk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJZm9yIChpaSA9IDA7IGlpIDwgTUFYX0FMUEFfQ09VTlQ7IGlpKyspIHsKKwkJCQkvKgorCQkJCSAqIGlnbm9yZSBBTFBBIG9mIGJmYSBwb3J0CisJCQkJICovCisJCQkJaWYgKChwb3J0X2xvb3BfYWxwYV9tYXBbaWldID4gMCkKKwkJCQkgICAgJiYgKHBvcnRfbG9vcF9hbHBhX21hcFtpaV0gIT0gcG9ydC0+cGlkKSkKKwkJCQkJYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9wbG9naShwb3J0LAorCQkJCQkJcG9ydF9sb29wX2FscGFfbWFwW2lpXSk7CisJCQkJLyoqVEJEICovCisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBUQkQgVGFyZ2V0IE1vZGUgPz8KKwkJICovCisJfQorCit9CisKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBub3RpZnkgdHJhbnNpdGlvbiB0byBvZmZsaW5lIHN0YXRlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbG9vcF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gbm90aWZ5IGEgTElQIG9uIHRoZSBsb29wLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbG9vcF9saXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworfQorCisvKioKKyAqIExvY2FsIEZ1bmN0aW9ucy4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTggYWxwYSkKK3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAgPSBOVUxMOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgYWxwYSk7CisKKwlmY3hwID0gYmZhX2ZjeHBfYWxsb2MoTlVMTCwgcG9ydC0+ZmNzLT5iZmEsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICBOVUxMKTsKKwliZmFfYXNzZXJ0KGZjeHApOworCisJbGVuID0gZmNfcGxvZ2lfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIGFscGEsCisJCQkgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCSAgICAgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3biwKKwkJCQkgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUocG9ydC0+ZmNzLT5iZmEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCQkgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsCisJCQkgIGJmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX3Jlc3BvbnNlLCAodm9pZCAqKXBvcnQsCisJCQkgIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IGZjeHAgdG8gbm90aWZ5IHRoZSBQbG9naSByZXNwb25zZQorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbG9vcF9wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJIHUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCSBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICopIGNiYXJnOworCXN0cnVjdCBmY19sb2dpX3MgICAgICpwbG9naV9yZXNwOworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQkvKgorCQkgKiBAdG9kbworCQkgKiBUaGlzIGNvdWxkIG1lYW4gdGhhdCB0aGUgZGV2aWNlIHdpdGggdGhpcyBBUExBIGRvZXMgbm90CisJCSAqIGV4aXN0IG9uIHRoZSBsb29wLgorCQkgKi8KKworCQlyZXR1cm47CisJfQorCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJcGxvZ2lfcmVzcCA9IChzdHJ1Y3QgZmNfbG9naV9zICopIGVsc19jbWQ7CisKKwlpZiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX0FDQykgeworCQliZmFfZmNzX3Jwb3J0X3N0YXJ0KHBvcnQsIHJzcF9mY2hzLCBwbG9naV9yZXNwKTsKKwl9IGVsc2UgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcGxvZ2lfcmVzcC0+ZWxzX2NtZC5lbHNfY29kZSk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcG9ydF9sb29wX3NlbmRfcGxvZ2lfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTggYWxwYSkKK3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBhbHBhKTsKKworCWZjeHAgPSBiZmFfZmN4cF9hbGxvYyhOVUxMLCBwb3J0LT5mY3MtPmJmYSwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgIE5VTEwpOworCWJmYV9hc3NlcnQoZmN4cCk7CisKKwlsZW4gPSBmY19wbG9naV9hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIGFscGEsCisJCQkJIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCQkgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3biwKKwkJCQkgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUocG9ydC0+ZmNzLT5iZmEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCQkJIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsCisJCQkJIGJmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX2FjY19yZXNwb25zZSwKKwkJCQkgKHZvaWQgKilwb3J0LCBGQ19NQVhfUERVU1osIDApOyAvKiBObyByZXNwb25zZQorCQkJCQkJCQkgICogZXhwZWN0ZWQKKwkJCQkJCQkJICAqLworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qCisgKiAgUGxvZ2kgQWNjIFJlc3BvbnNlCisgKiBXZSBkb25vdCBkbyBhbnkgcHJvY2Vzc2luZyBoZXJlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbG9vcF9wbG9naV9hY2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkgICAgIHUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICopIGNiYXJnOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KK30KKworYmZhX3N0YXR1c190CitiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTggYWxwYSkKK3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBhbHBhKTsKKworCWZjeHAgPSBiZmFfZmN4cF9hbGxvYyhOVUxMLCBwb3J0LT5mY3MtPmJmYSwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgIE5VTEwpOworCWJmYV9hc3NlcnQoZmN4cCk7CisKKwlsZW4gPSBmY19hZGlzY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgYWxwYSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCQkgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsCisJCQkgIGJmYV9mY3NfcG9ydF9sb29wX2FkaXNjX3Jlc3BvbnNlLCAodm9pZCAqKXBvcnQsCisJCQkgIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IGZjeHAgdG8gbm90aWZ5IHRoZSBBRElTQyByZXNwb25zZQorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbG9vcF9hZGlzY19yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJIHUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCSBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICopIGNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBmY19hZGlzY19zICAgICAqYWRpc2NfcmVzcDsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisJdTMyICAgICAgICBwaWQgPSByc3BfZmNocy0+c19pZDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJLyoKKwkJICogVEJEIDogd2UgbWF5IG5lZWQgdG8gcmV0cnkgY2VydGFpbiByZXF1ZXN0cworCQkgKi8KKwkJYmZhX2ZjeHBfZnJlZShmY3hwKTsKKwkJcmV0dXJuOworCX0KKworCWVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWFkaXNjX3Jlc3AgPSAoc3RydWN0IGZjX2FkaXNjX3MgKikgZWxzX2NtZDsKKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfQUNDKSB7CisJfSBlbHNlIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGFkaXNjX3Jlc3AtPmVsc19jbWQuZWxzX2NvZGUpOworCisJCS8qCisJCSAqIFRCRDogd2UgbWF5IG5lZWQgdG8gY2hlY2sgZm9yIHJlamVjdCBjb2RlcyBhbmQgcmV0cnkKKwkJICovCisJCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQocG9ydCwgcGlkKTsKKwkJaWYgKHJwb3J0KSB7CisJCQlsaXN0X2RlbCgmcnBvcnQtPnFlKTsKKwkJCWJmYV9mY3NfcnBvcnRfZGVsZXRlKHJwb3J0KTsKKwkJfQorCisJfQorCXJldHVybjsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX2FkaXNjX2FjYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHU4IGFscGEpCit7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgYWxwYSk7CisKKwlmY3hwID0gYmZhX2ZjeHBfYWxsb2MoTlVMTCwgcG9ydC0+ZmNzLT5iZmEsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICBOVUxMKTsKKwliZmFfYXNzZXJ0KGZjeHApOworCisJbGVuID0gZmNfYWRpc2NfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBhbHBhLAorCQkJCSBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkJIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24pOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCQlGQ19DTEFTU18zLCBsZW4sICZmY2hzLAorCQkJCWJmYV9mY3NfcG9ydF9sb29wX2FkaXNjX2FjY19yZXNwb25zZSwKKwkJCQkodm9pZCAqKXBvcnQsIEZDX01BWF9QRFVTWiwgMCk7IC8qIG5vIHJlcG9uc2UKKwkJCQkJCQkJICogZXhwZWN0ZWQKKwkJCQkJCQkJICovCisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoKKyAqICBBZGlzYyBBY2MgUmVzcG9uc2UKKyAqIFdlIGRvbm90IGRvIGFueSBwcm9jZXNzaW5nIGhlcmUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX2FkaXNjX2FjY19yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSAgICAgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCSAgICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKikgY2Jhcmc7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlyZXR1cm47CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9hcGkuYyBiL2RyaXZlcnMvc2NzaS9iZmEvbHBvcnRfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1MWE4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvbHBvcnRfYXBpLmMKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcG9ydF9hcGkuYyBCRkEgRkNTIHBvcnQKKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgUE9SVF9BUEkpOworCisKKworLyoqCisgKiAgZmNzX3BvcnRfYXBpIEJGQSBGQ1MgcG9ydCBBUEkKKyAqLworCit2b2lkCitiZmFfZmNzX2NmZ19iYXNlX3BvcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnKQoreworfQorCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKgorYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlyZXR1cm4gKCZmY3MtPmZhYnJpYy5icG9ydCk7Cit9CisKK3d3bl90CitiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3Qgd3duLCBpbnQgaW5kZXgsCisJCSAgICAgICBpbnQgbnJwb3J0cywgYmZhX2Jvb2xlYW5fdCBid3duKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnFoLCAqcWU7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBOVUxMOworCWludCAgICAgICAgICAgICBpOworCXN0cnVjdCBiZmFfZmNzX3MgKmZjczsKKworCWlmIChwb3J0ID09IE5VTEwgfHwgbnJwb3J0cyA9PSAwKQorCQlyZXR1cm4gKHd3bl90KSAwOworCisJZmNzID0gcG9ydC0+ZmNzOworCWJmYV90cmMoZmNzLCAodTMyKSBucnBvcnRzKTsKKworCWkgPSAwOworCXFoID0gJnBvcnQtPnJwb3J0X3E7CisJcWUgPSBiZmFfcV9maXJzdChxaCk7CisKKwl3aGlsZSAoKHFlICE9IHFoKSAmJiAoaSA8IG5ycG9ydHMpKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJaWYgKGJmYV9vc19udG9oM2IocnBvcnQtPnBpZCkgPiAweEZGRjAwMCkgeworCQkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwkJCWJmYV90cmMoZmNzLCAodTMyKSBycG9ydC0+cHd3bik7CisJCQliZmFfdHJjKGZjcywgcnBvcnQtPnBpZCk7CisJCQliZmFfdHJjKGZjcywgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChid3duKSB7CisJCQlpZiAoIW1lbWNtcCgmd3duLCAmcnBvcnQtPnB3d24sIDgpKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKGkgPT0gaW5kZXgpCisJCQkJYnJlYWs7CisJCX0KKworCQlpKys7CisJCXFlID0gYmZhX3FfbmV4dChxZSk7CisJfQorCisJYmZhX3RyYyhmY3MsIGkpOworCWlmIChycG9ydCkgeworCQlyZXR1cm4gcnBvcnQtPnB3d247CisJfSBlbHNlIHsKKwkJcmV0dXJuICh3d25fdCkgMDsKKwl9Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnBvcnRfd3duc1tdLAorCQkJaW50ICpucnBvcnRzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnFoLCAqcWU7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBOVUxMOworCWludCAgICAgICAgICAgICBpOworCXN0cnVjdCBiZmFfZmNzX3MgKmZjczsKKworCWlmIChwb3J0ID09IE5VTEwgfHwgcnBvcnRfd3ducyA9PSBOVUxMIHx8ICpucnBvcnRzID09IDApCisJCXJldHVybjsKKworCWZjcyA9IHBvcnQtPmZjczsKKwliZmFfdHJjKGZjcywgKHUzMikgKm5ycG9ydHMpOworCisJaSA9IDA7CisJcWggPSAmcG9ydC0+cnBvcnRfcTsKKwlxZSA9IGJmYV9xX2ZpcnN0KHFoKTsKKworCXdoaWxlICgocWUgIT0gcWgpICYmIChpIDwgKm5ycG9ydHMpKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJaWYgKGJmYV9vc19udG9oM2IocnBvcnQtPnBpZCkgPiAweEZGRjAwMCkgeworCQkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwkJCWJmYV90cmMoZmNzLCAodTMyKSBycG9ydC0+cHd3bik7CisJCQliZmFfdHJjKGZjcywgcnBvcnQtPnBpZCk7CisJCQliZmFfdHJjKGZjcywgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJwb3J0X3d3bnNbaV0gPSBycG9ydC0+cHd3bjsKKworCQlpKys7CisJCXFlID0gYmZhX3FfbmV4dChxZSk7CisJfQorCisJYmZhX3RyYyhmY3MsIGkpOworCSpucnBvcnRzID0gaTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBJdGVyYXRlJ3MgdGhyb3VnaCBhbGwgdGhlIHJwb3J0J3MgaW4gdGhlIGdpdmVuIHBvcnQgdG8KKyAqIGRldGVybWluZSB0aGUgbWF4aW11bSBvcGVyYXRpbmcgc3BlZWQuCisgKi8KK2VudW0gYmZhX3Bwb3J0X3NwZWVkCitiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X21heF9zcGVlZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWgsICpxZTsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IE5VTEw7CisJc3RydWN0IGJmYV9mY3NfcyAqZmNzOworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIG1heF9zcGVlZCA9IDA7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgcHBvcnRfYXR0cjsKKwllbnVtIGJmYV9wcG9ydF9zcGVlZCBwcG9ydF9zcGVlZDsKKworCWlmIChwb3J0ID09IE5VTEwpCisJCXJldHVybiAwOworCisJZmNzID0gcG9ydC0+ZmNzOworCisJLyoKKwkgKiBHZXQgUGh5c2ljYWwgcG9ydCdzIGN1cnJlbnQgc3BlZWQKKwkgKi8KKwliZmFfcHBvcnRfZ2V0X2F0dHIocG9ydC0+ZmNzLT5iZmEsICZwcG9ydF9hdHRyKTsKKwlwcG9ydF9zcGVlZCA9IHBwb3J0X2F0dHIuc3BlZWQ7CisJYmZhX3RyYyhmY3MsIHBwb3J0X3NwZWVkKTsKKworCXFoID0gJnBvcnQtPnJwb3J0X3E7CisJcWUgPSBiZmFfcV9maXJzdChxaCk7CisKKwl3aGlsZSAocWUgIT0gcWgpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAoKGJmYV9vc19udG9oM2IocnBvcnQtPnBpZCkgPiAweEZGRjAwMCkKKwkJICAgIHx8IChiZmFfZmNzX3Jwb3J0X2dldF9zdGF0ZShycG9ydCkgPT0gQkZBX1JQT1JUX09GRkxJTkUpKSB7CisJCQlxZSA9IGJmYV9xX25leHQocWUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKHJwb3J0LT5ycGYucnBzY19zcGVlZCA9PSBCRkFfUFBPUlRfU1BFRURfOEdCUFMpCisJCSAgICB8fCAocnBvcnQtPnJwZi5ycHNjX3NwZWVkID4gcHBvcnRfc3BlZWQpKSB7CisJCQltYXhfc3BlZWQgPSBycG9ydC0+cnBmLnJwc2Nfc3BlZWQ7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPiBtYXhfc3BlZWQpIHsKKwkJCW1heF9zcGVlZCA9IHJwb3J0LT5ycGYucnBzY19zcGVlZDsKKwkJfQorCisJCXFlID0gYmZhX3FfbmV4dChxZSk7CisJfQorCisJYmZhX3RyYyhmY3MsIG1heF9zcGVlZCk7CisJcmV0dXJuIG1heF9zcGVlZDsKK30KKworc3RydWN0IGJmYV9mY3NfcG9ydF9zICoKK2JmYV9mY3NfbG9va3VwX3BvcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQsIHd3bl90IGxwd3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0OworCWJmYV9mY3NfdmZfdCAgICp2ZjsKKworCWJmYV9hc3NlcnQoZmNzICE9IE5VTEwpOworCisJdmYgPSBiZmFfZmNzX3ZmX2xvb2t1cChmY3MsIHZmX2lkKTsKKwlpZiAodmYgPT0gTlVMTCkgeworCQliZmFfdHJjKGZjcywgdmZfaWQpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCWlmICghbHB3d24gfHwgKHZmLT5icG9ydC5wb3J0X2NmZy5wd3duID09IGxwd3duKSkKKwkJcmV0dXJuICgmdmYtPmJwb3J0KTsKKworCXZwb3J0ID0gYmZhX2Zjc19mYWJyaWNfdnBvcnRfbG9va3VwKHZmLCBscHd3bik7CisJaWYgKHZwb3J0KQorCQlyZXR1cm4gKCZ2cG9ydC0+bHBvcnQpOworCisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAqICBBUEkgY29ycmVzcG9uZGluZyB0byBWbVdhcmUncyBOUElWX1ZQT1JUX0dFVElORk8uCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9nZXRfaW5mbyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCSAgICAgIHN0cnVjdCBiZmFfcG9ydF9pbmZvX3MgKnBvcnRfaW5mbykKK3sKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5mYWJyaWMtPmZhYnJpY19uYW1lKTsKKworCWlmIChwb3J0LT52cG9ydCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRoaXMgaXMgYSBQaHlzaWNhbCBwb3J0CisJCSAqLworCQlwb3J0X2luZm8tPnBvcnRfdHlwZSA9IEJGQV9QT1JUX1RZUEVfUEhZU0lDQUw7CisKKwkJLyoKKwkJICogQHRvZG8gOiBuZWVkIHRvIGZpeCB0aGUgc3RhdGUgJiByZWFzb24KKwkJICovCisJCXBvcnRfaW5mby0+cG9ydF9zdGF0ZSA9IDA7CisJCXBvcnRfaW5mby0+b2ZmbGluZV9yZWFzb24gPSAwOworCisJCXBvcnRfaW5mby0+cG9ydF93d24gPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisJCXBvcnRfaW5mby0+bm9kZV93d24gPSBiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydCk7CisKKwkJcG9ydF9pbmZvLT5tYXhfdnBvcnRzX3N1cHAgPSBiZmFfZmNzX3Zwb3J0X2dldF9tYXgocG9ydC0+ZmNzKTsKKwkJcG9ydF9pbmZvLT5udW1fdnBvcnRzX2ludXNlID0KKwkJCWJmYV9mY3NfZmFicmljX3Zwb3J0X2NvdW50KHBvcnQtPmZhYnJpYyk7CisJCXBvcnRfaW5mby0+bWF4X3Jwb3J0c19zdXBwID0gQkZBX0ZDU19NQVhfUlBPUlRTX1NVUFA7CisJCXBvcnRfaW5mby0+bnVtX3Jwb3J0c19pbnVzZSA9IHBvcnQtPm51bV9ycG9ydHM7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhpcyBpcyBhIHZpcnR1YWwgcG9ydAorCQkgKi8KKwkJcG9ydF9pbmZvLT5wb3J0X3R5cGUgPSBCRkFfUE9SVF9UWVBFX1ZJUlRVQUw7CisKKwkJLyoKKwkJICogQHRvZG8gOiBuZWVkIHRvIGZpeCB0aGUgc3RhdGUgJiByZWFzb24KKwkJICovCisJCXBvcnRfaW5mby0+cG9ydF9zdGF0ZSA9IDA7CisJCXBvcnRfaW5mby0+b2ZmbGluZV9yZWFzb24gPSAwOworCisJCXBvcnRfaW5mby0+cG9ydF93d24gPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisJCXBvcnRfaW5mby0+bm9kZV93d24gPSBiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydCk7CisJfQorfQorCit2b2lkCitiZmFfZmNzX3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQsCisJCSAgICAgICBzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcyAqcG9ydF9zdGF0cykKK3sKKwliZmFfb3NfbWVtY3B5KHBvcnRfc3RhdHMsICZmY3NfcG9ydC0+c3RhdHMsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcykpOworCXJldHVybjsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQpCit7CisJYmZhX29zX21lbXNldCgmZmNzX3BvcnQtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wb3J0X3N0YXRzX3MpKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9lbmFibGVfaXBmY19yb2xlcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0KQoreworCWZjc19wb3J0LT5wb3J0X2NmZy5yb2xlcyB8PSBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDOworCXJldHVybjsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X2Rpc2FibGVfaXBmY19yb2xlcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0KQoreworCWZjc19wb3J0LT5wb3J0X2NmZy5yb2xlcyAmPSB+QkZBX1BPUlRfUk9MRV9GQ1BfSVBGQzsKKwlyZXR1cm47Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmFlMzcwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9wcml2LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fVlBfUFJJVl9IX18KKyNkZWZpbmUgX19WUF9QUklWX0hfXworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc192cG9ydC5oPgorCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHZwcworICovCit2b2lkICAgICAgICAgICAgYmZhX2Zjc192cG9ydF9pbml0KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKKworLyoKKyAqIEZ1bmN0aW9ucyBleHBvcnRlZCBieSB2cHMKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfdnBzX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfdnBzX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3Zwc19saXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKworLyoKKyAqIEZ1bmN0aW9ucyBleHBvcnRlZCBieSBwb3J0X2ZhYgorICovCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2ZhYl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9mYWJfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9mYWJfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfZmFiX3J4X2ZyYW1lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICB1OCAqcnhfZnJhbWUsIHUzMiBsZW4pOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IFZQLU5TLgorICovCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X25zX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X25zX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X25zX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbnNfcXVlcnkoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKworLyoKKyAqIEZ1bmN0aW9ucyBleHBvcnRlZCBieSBWUC1TQ04KKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9zY25faW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfc2NuX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X3Njbl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X3Njbl9wcm9jZXNzX3JzY24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgICAgICBzdHJ1Y3QgZmNoc19zICpyeF9mcmFtZSwgdTMyIGxlbik7CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgVlAtTjJOCisgKi8KKwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9uMm5faW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9uMm5fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X24ybl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X24ybl9yeF9mcmFtZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgdTggKnJ4X2ZyYW1lLCB1MzIgbGVuKTsKKworLyoKKyAqIEZ1bmN0aW9ucyBleHBvcnRlZCBieSBWUC1MT09QCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3Bfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3Bfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX3J4X2ZyYW1lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICAgdTggKnJ4X2ZyYW1lLCB1MzIgbGVuKTsKKworI2VuZGlmIC8qIF9fVlBfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvbXMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZiM2NhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9tcy5jCkBAIC0wLDAgKzEsNzU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIE1TKTsKKworI2RlZmluZSBCRkFfRkNTX01TX0NNRF9NQVhfUkVUUklFUyAgMgorLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9wbG9naSh2b2lkICptc19jYmFyZywKKwkJCQkJICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3RpbWVvdXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NlbmRfZ21hbCh2b2lkICptc19jYmFyZywKKwkJCQkJICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfZ21hbF9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuKHZvaWQgKm1zX2NiYXJnLAorCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX2dmbl9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisvKioKKyAqICBmY3NfbXNfc20gRkNTIE1TIHN0YXRlIG1hY2hpbmUKKyAqLworCisvKioKKyAqICBNUyBTdGF0ZSBNYWNoaW5lIGV2ZW50cworICovCitlbnVtIHBvcnRfbXNfZXZlbnQgeworCU1TU01fRVZFTlRfUE9SVF9PTkxJTkUgPSAxLAorCU1TU01fRVZFTlRfUE9SVF9PRkZMSU5FID0gMiwKKwlNU1NNX0VWRU5UX1JTUF9PSyA9IDMsCisJTVNTTV9FVkVOVF9SU1BfRVJST1IgPSA0LAorCU1TU01fRVZFTlRfVElNRU9VVCA9IDUsCisJTVNTTV9FVkVOVF9GQ1hQX1NFTlQgPSA2LAorCU1TU01fRVZFTlRfUE9SVF9GQUJSSUNfUlNDTiA9IDcKK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naV9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCQkgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJCWVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWwoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkgICAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJICAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CisvKioKKyAqIAkJU3RhcnQgaW4gb2ZmbGluZSBzdGF0ZSAtIGF3YWl0aW5nIE5TIHRvIHNlbmQgc3RhcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3NlbmRpbmcpOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9wbG9naShtcywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9wbG9naV9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2kpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwKKwkJCQkgICAgICAgJm1zLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIFN0YXJ0IHRpbWVyIGZvciBhIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naV9yZXRyeSk7CisJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwgJm1zLT50aW1lciwKKwkJCQliZmFfZmNzX3BvcnRfbXNfdGltZW91dCwgbXMsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUlNQX09LOgorCQkvKgorCQkgKiBzaW5jZSBwbG9naSBpcyBkb25lLCBub3cgaW52b2tlIE1TIHJlbGF0ZWQgc3ViLW1vZHVsZXMKKwkJICovCisJCWJmYV9mY3NfcG9ydF9mZG1pX29ubGluZShtcyk7CisKKwkJLyoqCisJCSAqIGlmIHRoaXMgaXMgYSBWcG9ydCwgZ28gdG8gb25saW5lIHN0YXRlLgorCQkgKi8KKwkJaWYgKG1zLT5wb3J0LT52cG9ydCkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29ubGluZSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIEZvciBhIGJhc2UgcG9ydCB3ZSBuZWVkIHRvIGdldCB0aGUKKwkJICogc3dpdGNoJ3MgSVAgYWRkcmVzcy4KKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3NlbmRpbmcpOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9nbWFsKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQobXMtPmZjeHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX3Bsb2dpKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZtcy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQkvKgorCQkgKiBub3cgaW52b2tlIE1TIHJlbGF0ZWQgc3ViLW1vZHVsZXMKKwkJICovCisJCWJmYV9mY3NfcG9ydF9mZG1pX29mZmxpbmUobXMpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX0ZBQlJJQ19SU0NOOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3NlbmRpbmcpOworCQltcy0+cmV0cnlfY250ID0gMDsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQllbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwKKwkJCQkgICAgICAgJm1zLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fZ21hbChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLCBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKG1zLT5yZXRyeV9jbnQrKyA8IEJGQV9GQ1NfTVNfQ01EX01BWF9SRVRSSUVTKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbF9yZXRyeSk7CisJCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChtcy0+cG9ydCksCisJCQkJCSZtcy0+dGltZXIsIGJmYV9mY3NfcG9ydF9tc190aW1lb3V0LCBtcywKKwkJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyk7CisJCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4obXMsIE5VTEwpOworCQkJbXMtPnJldHJ5X2NudCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3NlbmRpbmcpOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4obXMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChtcy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fZ21hbF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJICAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbF9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfZ21hbChtcywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmbXMtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAgbXNfcHZ0IE1TIGxvY2FsIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc2VuZF9nbWFsKHZvaWQgKm1zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSBtc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBtcy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbXMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9nbWFsLCBtcyk7CisJCXJldHVybjsKKwl9CisJbXMtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfZ21hbF9yZXFfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkJYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLAorCQkJCWJmYV9scHNfZ2V0X3BlZXJfbnd3bihwb3J0LT5mYWJyaWMtPmxwcykpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X21zX2dtYWxfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbXMsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfZ21hbF9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJICAgICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG1zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCXN0cnVjdCBmY2dzX2dtYWxfcmVzcF9zICpnbWFsX3Jlc3A7CisJc3RydWN0IGZjX2dtYWxfZW50cnlfcyAqZ21hbF9lbnRyeTsKKwl1MzIgICAgICAgIG51bV9lbnRyaWVzOworCXU4ICAgICAgICAqcnNwX3N0cjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCWdtYWxfcmVzcCA9IChzdHJ1Y3QgZmNnc19nbWFsX3Jlc3BfcyAqKShjdGhkciArIDEpOworCQludW1fZW50cmllcyA9IGJmYV9vc19udG9obChnbWFsX3Jlc3AtPm1zX2xlbik7CisJCWlmIChudW1fZW50cmllcyA9PSAwKSB7CisJCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCQkJcmV0dXJuOworCQl9CisJCS8qCisJCSAqIFRoZSByZXNwb25zZSBjb3VsZCBjb250YWluIG11bHRpcGxlIEVudHJpZXMuCisJCSAqIEVudHJpZXMgZm9yIFNOTVAgaW50ZXJmYWNlLCBldGMuCisJCSAqIFdlIGxvb2sgZm9yIHRoZSBlbnRyeSB3aXRoIGEgdGVsbmV0IHByZWZpeC4KKwkJICogRmlyc3QgImh0dHA6Ly8iIGVudHJ5IHJlZmVycyB0byBJUCBhZGRyCisJCSAqLworCisJCWdtYWxfZW50cnkgPSAoc3RydWN0IGZjX2dtYWxfZW50cnlfcyAqKWdtYWxfcmVzcC0+bXNfbWE7CisJCXdoaWxlIChudW1fZW50cmllcyA+IDApIHsKKwkJCWlmIChzdHJuY21wCisJCQkgICAgKGdtYWxfZW50cnktPnByZWZpeCwgQ1RfR01BTF9SRVNQX1BSRUZJWF9IVFRQLAorCQkJICAgICBzaXplb2YoZ21hbF9lbnRyeS0+cHJlZml4KSkgPT0gMCkgeworCisJCQkJLyoKKwkJCQkgKiBpZiB0aGUgSVAgYWRkcmVzcyBpcyB0ZXJtaW5hdGluZyB3aXRoIGEgJy8nLAorCQkJCSAqIHJlbW92ZSBpdC4gKkJ5dGUgMCBjb25zaXN0cyBvZiB0aGUgbGVuZ3RoCisJCQkJICogb2YgdGhlIHN0cmluZy4KKwkJCQkgKi8KKwkJCQlyc3Bfc3RyID0gJihnbWFsX2VudHJ5LT5wcmVmaXhbMF0pOworCQkJCWlmIChyc3Bfc3RyW2dtYWxfZW50cnktPmxlbiAtIDFdID09ICcvJykKKwkJCQkJcnNwX3N0cltnbWFsX2VudHJ5LT5sZW4gLSAxXSA9IDA7CisJCQkJLyoKKwkJCQkgKiBjb3B5IElQIEFkZHJlc3MgdG8gZmFicmljCisJCQkJICovCisJCQkJc3RybmNweShiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19pcGFkZHIocG9ydCksCisJCQkJCWdtYWxfZW50cnktPmlwX2FkZHIsCisJCQkJCUJGQV9GQ1NfRkFCUklDX0lQQUREUl9TWik7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCS0tbnVtX2VudHJpZXM7CisJCQkJKytnbWFsX2VudHJ5OworCQkJfQorCQl9CisKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCSAgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dmbik7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLAorCQkJCSAgICAgICAmbXMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nZm4oc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIFN0YXJ0IHRpbWVyIGZvciBhIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWlmIChtcy0+cmV0cnlfY250KysgPCBCRkFfRkNTX01TX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9yZXRyeSk7CisJCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChtcy0+cG9ydCksCisJCQkJCSZtcy0+dGltZXIsIGJmYV9mY3NfcG9ydF9tc190aW1lb3V0LCBtcywKKwkJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vbmxpbmUpOworCQkJbXMtPnJldHJ5X2NudCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQobXMtPmZjeHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dmbihtcywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmbXMtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAgbXNfcHZ0IE1TIGxvY2FsIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4odm9pZCAqbXNfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IG1zX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZtcy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9tc19zZW5kX2dmbiwgbXMpOworCQlyZXR1cm47CisJfQorCW1zLT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX2dmbl9yZXFfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkgICAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLAorCQkJICAgICAgIGJmYV9scHNfZ2V0X3BlZXJfbnd3bihwb3J0LT5mYWJyaWMtPmxwcykpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X21zX2dmbl9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKiltcywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19nZm5fcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCSAgICAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG1zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCXd3bl90ICAgICAgICAgICpnZm5fcmVzcDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCWdmbl9yZXNwID0gKHd3bl90ICopIChjdGhkciArIDEpOworCQkvKgorCQkgKiBjaGVjayBpZiBpdCBoYXMgYWN0dWFsbHkgY2hhbmdlZAorCQkgKi8KKwkJaWYgKChtZW1jbXAKKwkJICAgICAoKHZvaWQgKikmYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfbmFtZShwb3J0KSwgZ2ZuX3Jlc3AsCisJCSAgICAgIHNpemVvZih3d25fdCkpICE9IDApKQorCQkJYmZhX2Zjc19mYWJyaWNfc2V0X2ZhYnJpY19uYW1lKHBvcnQtPmZhYnJpYywgKmdmbl9yZXNwKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorICogIG1zX3B2dCBNUyBsb2NhbCBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NlbmRfcGxvZ2kodm9pZCAqbXNfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IG1zX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCXBvcnQtPnN0YXRzLm1zX3Bsb2dpX2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm1zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X21zX3NlbmRfcGxvZ2ksIG1zKTsKKwkJcmV0dXJuOworCX0KKwltcy0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19wbG9naV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgYmZhX29zX2h0b24zYihGQ19NR01UX1NFUlZFUiksCisJCQkgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCSAgICAgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3biwKKwkJCSAgICAgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUocG9ydC0+ZmNzLT5iZmEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9tc19wbG9naV9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKiltcywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcG9ydC0+c3RhdHMubXNfcGxvZ2lfc2VudCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCSAgICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkgICAgICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkgICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKiljYmFyZzsKKworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG1zLT5wb3J0OworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZDsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MgICAgKmxzX3JqdDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCXBvcnQtPnN0YXRzLm1zX3Bsb2dpX3JzcF9lcnIrKzsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwlzd2l0Y2ggKGVsc19jbWQtPmVsc19jb2RlKSB7CisKKwljYXNlIEZDX0VMU19BQ0M6CisJCWlmIChyc3BfbGVuIDwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKSB7CisJCQliZmFfdHJjKHBvcnQtPmZjcywgcnNwX2xlbik7CisJCQlwb3J0LT5zdGF0cy5tc19wbG9naV9hY2NfZXJyKys7CisJCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCQkJYnJlYWs7CisJCX0KKwkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfYWNjZXB0cysrOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfT0spOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX0xTX1JKVDoKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJCWJmYV90cmMocG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlKTsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCk7CisKKwkJcG9ydC0+c3RhdHMubXNfcmVqZWN0cysrOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXBvcnQtPnN0YXRzLm1zX3Bsb2dpX3Vua25vd25fcnNwKys7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3RpbWVvdXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICopYXJnOworCisJbXMtPnBvcnQtPnN0YXRzLm1zX3RpbWVvdXRzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfVElNRU9VVCk7Cit9CisKKwordm9pZAorYmZhX2Zjc19wb3J0X21zX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSBCRkFfRkNTX0dFVF9NU19GUk9NX1BPUlQocG9ydCk7CisKKwltcy0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCisJLyoKKwkgKiBJbnZva2UgaW5pdCByb3V0aW5lcyBvZiBzdWIgbW9kdWxlcy4KKwkgKi8KKwliZmFfZmNzX3BvcnRfZmRtaV9pbml0KG1zKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X21zX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSBCRkFfRkNTX0dFVF9NU19GUk9NX1BPUlQocG9ydCk7CisKKwltcy0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X21zX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KTsKKworCW1zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9QT1JUX09OTElORSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9tc19mYWJyaWNfcnNjbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KTsKKworCS8qCisJICogQHRvZG8uICBIYW5kbGUgdGhpcyBvbmx5IHdoZW4gaW4gT25saW5lIHN0YXRlCisJICovCisJaWYgKGJmYV9zbV9jbXBfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vbmxpbmUpKQorCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9QT1JUX0ZBQlJJQ19SU0NOKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvbjJuLmMgYi9kcml2ZXJzL3Njc2kvYmZhL24ybi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTQ1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL24ybi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIG4ybi5jIG4ybiBpbXBsZW1lbnRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBOMk4pOworCisvKioKKyAqICAgQ2FsbGVkIGJ5IGZjcy9wb3J0IHRvIGluaXRpYWxpemUgTjJOIHRvcG9sb2d5LgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbjJuX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IGZjcy9wb3J0IHRvIG5vdGlmeSB0cmFuc2l0aW9uIHRvIG9ubGluZSBzdGF0ZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X24ybl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbjJuX3MgKm4ybl9wb3J0ID0gJnBvcnQtPnBvcnRfdG9wby5wbjJuOworCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcGNmZyA9ICZwb3J0LT5wb3J0X2NmZzsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwY2ZnLT5wd3duKTsKKworCS8qCisJICogSWYgb3VyIFBXV04gaXMgPiB0aGFuIHRoYXQgb2YgdGhlIHItcG9ydCwgd2UgaGF2ZSB0byBpbml0aWF0ZSBQTE9HSQorCSAqIGFuZCBhc3NpZ24gYW4gQWRkcmVzcy4gaWYgbm90LCB3ZSBuZWVkIHRvIHdhaXQgZm9yIGl0cyBQTE9HSS4KKwkgKgorCSAqIElmIG91ciBQV1dOIGlzIDwgdGhhbiB0aGF0IG9mIHRoZSByZW1vdGUgcG9ydCwgaXQgd2lsbCBzZW5kIGEgUExPR0kKKwkgKiB3aXRoIHRoZSBQSURzIGFzc2lnbmVkLiBUaGUgcnBvcnQgc3RhdGUgbWFjaGluZSB0YWtlIGNhcmUgb2YgdGhpcworCSAqIGluY29taW5nIFBMT0dJLgorCSAqLworCWlmIChtZW1jbXAKKwkgICAgKCh2b2lkICopJnBjZmctPnB3d24sICh2b2lkICopJm4ybl9wb3J0LT5yZW1fcG9ydF93d24sCisJICAgICBzaXplb2Yod3duX3QpKSA+IDApIHsKKwkJcG9ydC0+cGlkID0gTjJOX0xPQ0FMX1BJRDsKKwkJLyoqCisJCSAqIEZpcnN0LCBjaGVjayBpZiB3ZSBrbm93IHRoZSBkZXZpY2UgYnkgcHd3bi4KKwkJICovCisJCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9wd3duKHBvcnQsCisJCQkJCQkgICAgICAgbjJuX3BvcnQtPnJlbV9wb3J0X3d3bik7CisJCWlmIChycG9ydCkgeworCQkJYmZhX3RyYyhwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCQkJYmZhX3RyYyhwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwkJCXJwb3J0LT5waWQgPSBOMk5fUkVNT1RFX1BJRDsKKwkJCWJmYV9mY3NfcnBvcnRfb25saW5lKHJwb3J0KTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qCisJCSAqIEluIG4ybiB0aGVyZSBjYW4gYmUgb25seSBvbmUgcnBvcnQuIERlbGV0ZSB0aGUgb2xkIG9uZSB3aG9zZQorCQkgKiBwaWQgc2hvdWxkIGJlIHplcm8sIGJlY2F1c2UgaXQgaXMgb2ZmbGluZS4KKwkJICovCisJCWlmIChwb3J0LT5udW1fcnBvcnRzID4gMCkgeworCQkJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3BpZChwb3J0LCAwKTsKKwkJCWJmYV9hc3NlcnQocnBvcnQgIT0gTlVMTCk7CisJCQlpZiAocnBvcnQpIHsKKwkJCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCQkJCWJmYV9mY3NfcnBvcnRfZGVsZXRlKHJwb3J0KTsKKwkJCX0KKwkJfQorCQliZmFfZmNzX3Jwb3J0X2NyZWF0ZShwb3J0LCBOMk5fUkVNT1RFX1BJRCk7CisJfQorfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IGZjcy9wb3J0IHRvIG5vdGlmeSB0cmFuc2l0aW9uIHRvIG9mZmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9uMm5fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyAqbjJuX3BvcnQgPSAmcG9ydC0+cG9ydF90b3BvLnBuMm47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKwlwb3J0LT5waWQgPSAwOworCW4ybl9wb3J0LT5yZW1fcG9ydF93d24gPSAwOworCW4ybl9wb3J0LT5yZXBseV9veGlkID0gMDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL25zLmMgYi9kcml2ZXJzL3Njc2kvYmZhL25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmZWE5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvbnMuYwpAQCAtMCwwICsxLDEyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBAcGFnZSBuc19zbV9pbmZvIFZQT1JUIE5TIFN0YXRlIE1hY2hpbmUKKyAqCisgKiBAc2VjdGlvbiBuc19zbV9pbnRlcmFjdGlvbnMgVlBPUlQgTlMgU3RhdGUgTWFjaGluZSBJbnRlcmFjdGlvbnMKKyAqCisgKiBAc2VjdGlvbiBuc19zbSBWUE9SVCBOUyBTdGF0ZSBNYWNoaW5lCisgKiAJaW1nIG5zX3NtLmpwZworICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmYV9pb2NmYy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgImxwb3J0X3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgTlMpOworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpKHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9yc3BuX2lkKHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3JmdF9pZCh2b2lkICpuc19jYmFyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3JmZl9pZCh2b2lkICpuc19jYmFyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdCh2b2lkICpuc19jYmFyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc190aW1lb3V0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcnNwbl9pZF9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQkgdm9pZCAqY2JhcmcsCisJCQkJCQkgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQkgdTMyIHJzcF9sZW4sCisJCQkJCQkgdTMyIHJlc2lkX2xlbiwKKwkJCQkJCSBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3JmdF9pZF9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCXZvaWQgKmNiYXJnLAorCQkJCQkJYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQl1MzIgcnNwX2xlbiwKKwkJCQkJCXUzMiByZXNpZF9sZW4sCisJCQkJCQlzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3JmZl9pZF9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCXZvaWQgKmNiYXJnLAorCQkJCQkJYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQl1MzIgcnNwX2xlbiwKKwkJCQkJCXUzMiByZXNpZF9sZW4sCisJCQkJCQlzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX2dpZF9mdF9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCXZvaWQgKmNiYXJnLAorCQkJCQkJYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQl1MzIgcnNwX2xlbiwKKwkJCQkJCXUzMiByZXNpZF9sZW4sCisJCQkJCQlzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3Byb2Nlc3NfZ2lkZnRfcGlkcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCQkgICB1MzIgKnBpZF9idWYsCisJCQkJCQkgICB1MzIgbl9waWRzKTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19ib290X3RhcmdldF9kaXNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CisvKioKKyAqICBmY3NfbnNfc20gRkNTIG5hbWVzZXJ2ZXIgaW50ZXJmYWNlIHN0YXRlIG1hY2hpbmUKKyAqLworCisvKioKKyAqIFZQb3J0IE5TIFN0YXRlIE1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gdnBvcnRfbnNfZXZlbnQgeworCU5TU01fRVZFTlRfUE9SVF9PTkxJTkUgPSAxLAorCU5TU01fRVZFTlRfUE9SVF9PRkZMSU5FID0gMiwKKwlOU1NNX0VWRU5UX1BMT0dJX1NFTlQgPSAzLAorCU5TU01fRVZFTlRfUlNQX09LID0gNCwKKwlOU1NNX0VWRU5UX1JTUF9FUlJPUiA9IDUsCisJTlNTTV9FVkVOVF9USU1FT1VUID0gNiwKKwlOU1NNX0VWRU5UX05TX1FVRVJZID0gNywKKwlOU1NNX0VWRU5UX1JTUE5JRF9TRU5UID0gOCwKKwlOU1NNX0VWRU5UX1JGVElEX1NFTlQgPSA5LAorCU5TU01fRVZFTlRfUkZGSURfU0VOVCA9IDEwLAorCU5TU01fRVZFTlRfR0lERlRfU0VOVCA9IDExLAorfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9wbG9naV9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQkgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICAgICAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JzcG5faWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQkgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZ0X2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9yZnRfaWRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCWVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9yZnRfaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yZmZfaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JmZl9pZF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JmZl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fZ2lkX2Z0KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworLyoqCisgKiAJCVN0YXJ0IGluIG9mZmxpbmUgc3RhdGUgLSBhd2FpdGluZyBsaW5rdXAKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3NlbmRpbmcpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9wbG9naShucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9wbG9naV9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1BMT0dJX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9wbG9naSk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLAorCQkJCSAgICAgICAmbnMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JzcG5faWQpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9yc3BuX2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQobnMtPmZjeHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgICAgICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfVElNRU9VVDoKKwkJLyoKKwkJICogUmV0cnkgVGltZXIgRXhwaXJlZC4gUmUtc2VuZAorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3NlbmRpbmcpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9wbG9naShucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmbnMtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JzcG5faWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BOSURfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3JzcG5faWQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwKKwkJCQkgICAgICAgJm5zLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcnNwbl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcnNwbl9pZF9yZXRyeSk7CisJCW5zLT5wb3J0LT5zdGF0cy5uc19yZXRyaWVzKys7CisJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwgJm5zLT50aW1lciwKKwkJCQliZmFfZmNzX3BvcnRfbnNfdGltZW91dCwgbnMsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yZnRfaWQpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9yZnRfaWQobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9mY3hwX2Rpc2NhcmQobnMtPmZjeHApOworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcnNwbl9pZF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCSBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yc3BuX2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcnNwbl9pZChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmbnMtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmdF9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUkZUSURfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLAorCQkJCSAgICAgICAmbnMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9yZnRfaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUlNQX09LOgorCQkvKgorCQkgKiBOb3cgbW92ZSB0byByZWdpc3RlciBGQzQgRmVhdHVyZXMKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmZl9pZCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3JmZl9pZChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZF9yZXRyeSk7CisJCW5zLT5wb3J0LT5zdGF0cy5uc19yZXRyaWVzKys7CisJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwgJm5zLT50aW1lciwKKwkJCQliZmFfZmNzX3BvcnRfbnNfdGltZW91dCwgbnMsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQobnMtPmZjeHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCWVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmdF9pZCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3JmdF9pZChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmbnMtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmZl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUkZGSURfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3JmZl9pZCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLAorCQkJCSAgICAgICAmbnMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9yZmZfaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUlNQX09LOgorCisJCS8qCisJCSAqIElmIG1pbiBjZmcgbW9kZSBpcyBlbmFibGVkLCB3ZSBkb25vdCBpbml0aWF0ZSBycG9ydAorCQkgKiBkaXNjb3Zlcnkgd2l0aCB0aGUgZmFicmljLiBJbnN0ZWFkLCB3ZSB3aWxsIHJldHJpZXZlIHRoZQorCQkgKiBib290IHRhcmdldHMgZnJvbSBIQUwvRlcuCisJCSAqLworCQlpZiAoX19mY3NfbWluX2NmZyhucy0+cG9ydC0+ZmNzKSkgeworCQkJYmZhX2Zjc19wb3J0X25zX2Jvb3RfdGFyZ2V0X2Rpc2MobnMtPnBvcnQpOworCQkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29ubGluZSk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGUgcG9ydCByb2xlIGlzIEluaXRpYXRvciBNb2RlIGlzc3VlIE5TIHF1ZXJ5LgorCQkgKiBJZiBpdCBpcyBUYXJnZXQgTW9kZSwgc2tpcCB0aGlzIGFuZCBnbyB0byBvbmxpbmUuCisJCSAqLworCQlpZiAoQkZBX0ZDU19WUE9SVF9JU19JTklUSUFUT1JfTU9ERShucy0+cG9ydCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdCk7CisJCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9naWRfZnQobnMsIE5VTEwpOworCQl9IGVsc2UgaWYgKEJGQV9GQ1NfVlBPUlRfSVNfVEFSR0VUX01PREUobnMtPnBvcnQpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKTsKKwkJfQorCQkvKgorCQkgKiBraWNrIG9mZiBtZ210IHNydnIgc3RhdGUgbWFjaGluZQorCQkgKi8KKwkJYmZhX2Zjc19wb3J0X21zX29ubGluZShucy0+cG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3JmZl9pZF9yZXRyeSk7CisJCW5zLT5wb3J0LT5zdGF0cy5uc19yZXRyaWVzKys7CisJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwgJm5zLT50aW1lciwKKwkJCQliZmFfZmNzX3BvcnRfbnNfdGltZW91dCwgbnMsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQobnMtPmZjeHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3JmZl9pZF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCWVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmZl9pZCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3JmZl9pZChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmbnMtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19naWRfZnQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX0dJREZUX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9naWRfZnQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwKKwkJCQkgICAgICAgJm5zLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fZ2lkX2Z0KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29ubGluZSk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogVEJEOiBmb3IgY2VydGFpbiByZWplY3QgY29kZXMsIHdlIGRvbid0IG5lZWQgdG8gcmV0cnkKKwkJICovCisJCS8qCisJCSAqIFN0YXJ0IHRpbWVyIGZvciBhIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9naWRfZnRfcmV0cnkpOworCQlucy0+cG9ydC0+c3RhdHMubnNfcmV0cmllcysrOworCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksICZucy0+dGltZXIsCisJCQkJYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQsIG5zLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKG5zLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9naWRfZnRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQllbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9USU1FT1VUOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19naWRfZnQpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9naWRfZnQobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJm5zLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9OU19RVUVSWToKKwkJLyoKKwkJICogSWYgdGhlIHBvcnQgcm9sZSBpcyBJbml0aWF0b3IgTW9kZSBpc3N1ZSBOUyBxdWVyeS4KKwkJICogSWYgaXQgaXMgVGFyZ2V0IE1vZGUsIHNraXAgdGhpcyBhbmQgZ28gdG8gb25saW5lLgorCQkgKi8KKwkJaWYgKEJGQV9GQ1NfVlBPUlRfSVNfSU5JVElBVE9SX01PREUobnMtPnBvcnQpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19naWRfZnQpOworCQkJYmZhX2Zjc19wb3J0X25zX3NlbmRfZ2lkX2Z0KG5zLCBOVUxMKTsKKwkJfTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIG5zX3B2dCBOYW1lc2VydmVyIGxvY2FsIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc2VuZF9wbG9naSh2b2lkICpuc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gbnNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJcG9ydC0+c3RhdHMubnNfcGxvZ2lfYWxsb2Nfd2FpdCsrOworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbnMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9wbG9naSwgbnMpOworCQlyZXR1cm47CisJfQorCW5zLT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX3Bsb2dpX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJICAgICBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJICAgICBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X25zX3Bsb2dpX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisJcG9ydC0+c3RhdHMubnNfcGxvZ2lfc2VudCsrOworCisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUExPR0lfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCSAgICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkgICAgICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkgICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwkvKiBzdHJ1Y3QgZmNfbG9naV9zICpwbG9naV9yZXNwOyAqLworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZDsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MgICAgKmxzX3JqdDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHMubnNfcGxvZ2lfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwlzd2l0Y2ggKGVsc19jbWQtPmVsc19jb2RlKSB7CisKKwljYXNlIEZDX0VMU19BQ0M6CisJCWlmIChyc3BfbGVuIDwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKSB7CisJCQliZmFfdHJjKHBvcnQtPmZjcywgcnNwX2xlbik7CisJCQlwb3J0LT5zdGF0cy5uc19wbG9naV9hY2NfZXJyKys7CisJCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQkJYnJlYWs7CisJCX0KKwkJcG9ydC0+c3RhdHMubnNfcGxvZ2lfYWNjZXB0cysrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfT0spOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX0xTX1JKVDoKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJCWJmYV90cmMocG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlKTsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCk7CisKKwkJcG9ydC0+c3RhdHMubnNfcmVqZWN0cysrOworCisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcG9ydC0+c3RhdHMubnNfcGxvZ2lfdW5rbm93bl9yc3ArKzsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwl9Cit9CisKKy8qKgorICogUmVnaXN0ZXIgdGhlIHN5bWJvbGljIHBvcnQgbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQodm9pZCAqbnNfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IG5zX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXU4ICAgICAgICAgc3ltYmxbMjU2XTsKKwl1OCAgICAgICAgKnBzeW1ibCA9ICZzeW1ibFswXTsKKworCWJmYV9vc19tZW1zZXQoc3ltYmwsIDAsIHNpemVvZihzeW1ibCkpOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlwb3J0LT5zdGF0cy5uc19yc3BuaWRfYWxsb2Nfd2FpdCsrOworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbnMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9yc3BuX2lkLCBucyk7CisJCXJldHVybjsKKwl9CisJbnMtPmZjeHAgPSBmY3hwOworCisJLyoKKwkgKiBmb3IgVi1Qb3J0LCBmb3JtIGEgUG9ydCBTeW1ib2xpYyBOYW1lCisJICovCisJaWYgKHBvcnQtPnZwb3J0KSB7CisJCS8qKkZvciBWcG9ydHMsCisJCSAqICB3ZSBhcHBlbmQgdGhlIHZwb3J0J3MgcG9ydCBzeW1ib2xpYyBuYW1lIHRvIHRoYXQgb2YgdGhlIGJhc2UgcG9ydC4KKwkJICovCisKKwkJc3RybmNweSgoY2hhciAqKXBzeW1ibCwKKwkJCShjaGFyICopCisJCQkmKGJmYV9mY3NfcG9ydF9nZXRfcHN5bV9uYW1lCisJCQkgIChiZmFfZmNzX2dldF9iYXNlX3BvcnQocG9ydC0+ZmNzKSkpLAorCQkJc3RybGVuKChjaGFyICopCisJCQkgICAgICAgJmJmYV9mY3NfcG9ydF9nZXRfcHN5bV9uYW1lKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydAorCQkJCQkJCSAgIChwb3J0LT5mY3MpKSkpOworCisJCS8qCisJCSAqIEVuc3VyZSB3ZSBoYXZlIGEgbnVsbCB0ZXJtaW5hdGluZyBzdHJpbmcuCisJCSAqLworCQkoKGNoYXIgKikKKwkJIHBzeW1ibClbc3RybGVuKChjaGFyICopCisJCQkJJmJmYV9mY3NfcG9ydF9nZXRfcHN5bV9uYW1lCisJCQkJKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChwb3J0LT5mY3MpKSldID0gMDsKKworCQlzdHJuY2F0KChjaGFyICopcHN5bWJsLAorCQkJKGNoYXIgKikmKGJmYV9mY3NfcG9ydF9nZXRfcHN5bV9uYW1lKHBvcnQpKSwKKwkJCXN0cmxlbigoY2hhciAqKSZiZmFfZmNzX3BvcnRfZ2V0X3BzeW1fbmFtZShwb3J0KSkpOworCX0gZWxzZSB7CisJCXBzeW1ibCA9ICh1OCAqKSAmKGJmYV9mY3NfcG9ydF9nZXRfcHN5bV9uYW1lKHBvcnQpKTsKKwl9CisKKwlsZW4gPSBmY19yc3BuaWRfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsIHBzeW1ibCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbnNfcnNwbl9pZF9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilucywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcG9ydC0+c3RhdHMubnNfcnNwbmlkX3NlbnQrKzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUE5JRF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19yc3BuX2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHMubnNfcnNwbmlkX3JzcF9lcnIrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JzcG5pZF9hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0LT5zdGF0cy5uc19yc3BuaWRfcmVqZWN0cysrOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorICogUmVnaXN0ZXIgRkM0LVR5cGVzCisgKiBUQkQsIE5lZWQgdG8gcmV0cmlldmUgdGhpcyBmcm9tIHRoZSBPUyBkcml2ZXIsIGluIGNhc2UgSVBGQyBpcyBlbmFibGVkID8KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zZW5kX3JmdF9pZCh2b2lkICpuc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gbnNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JmdGlkX2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm5zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkLCBucyk7CisJCXJldHVybjsKKwl9CisJbnMtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcmZ0aWRfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCSAgICAgcG9ydC0+cG9ydF9jZmcucm9sZXMpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X25zX3JmdF9pZF9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilucywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcG9ydC0+c3RhdHMubnNfcmZ0aWRfc2VudCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JGVElEX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3JmdF9pZF9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCXZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQl1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQlzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXBvcnQtPnN0YXRzLm5zX3JmdGlkX3JzcF9lcnIrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JmdGlkX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQtPnN0YXRzLm5zX3JmdGlkX3JlamVjdHMrKzsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworfQorCisvKioKKyogUmVnaXN0ZXIgRkM0LUZlYXR1cmVzIDogU2hvdWxkIGJlIGRvbmUgYWZ0ZXIgUkZUX0lECisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc2VuZF9yZmZfaWQodm9pZCAqbnNfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IG5zX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXU4ICAgICAgICAgZmM0X2Z0cnMgPSAwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlwb3J0LT5zdGF0cy5uc19yZmZpZF9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3JmZl9pZCwgbnMpOworCQlyZXR1cm47CisJfQorCW5zLT5mY3hwID0gZmN4cDsKKworCWlmIChCRkFfRkNTX1ZQT1JUX0lTX0lOSVRJQVRPUl9NT0RFKG5zLT5wb3J0KSkgeworCQlmYzRfZnRycyA9IEZDX0dTX0ZDUF9GQzRfRkVBVFVSRV9JTklUSUFUT1I7CisJfSBlbHNlIGlmIChCRkFfRkNTX1ZQT1JUX0lTX1RBUkdFVF9NT0RFKG5zLT5wb3J0KSkgeworCQlmYzRfZnRycyA9IEZDX0dTX0ZDUF9GQzRfRkVBVFVSRV9UQVJHRVQ7CisJfQorCisJbGVuID0gZmNfcmZmaWRfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwgRkNfVFlQRV9GQ1AsCisJCQkgICAgIGZjNF9mdHJzKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9uc19yZmZfaWRfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbnMsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCXBvcnQtPnN0YXRzLm5zX3JmZmlkX3NlbnQrKzsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SRkZJRF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19yZmZfaWRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQl2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlwb3J0LT5zdGF0cy5uc19yZmZpZF9yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwljdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX250b2hzKGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCisJaWYgKGN0aGRyLT5jbWRfcnNwX2NvZGUgPT0gQ1RfUlNQX0FDQ0VQVCkgeworCQlwb3J0LT5zdGF0cy5uc19yZmZpZF9hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0LT5zdGF0cy5uc19yZmZpZF9yZWplY3RzKys7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisKKwlpZiAoY3RoZHItPnJlYXNvbl9jb2RlID09IENUX1JTTl9OT1RfU1VQUCkgeworCQkvKgorCQkgKiBpZiB0aGlzIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCwgd2UgZG9uJ3QgcmV0cnkKKwkJICovCisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJfSBlbHNlIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwl9Cit9CisKKy8qKgorICogUXVlcnkgRmFicmljIGZvciBGQzQtVHlwZXMgRGV2aWNlcy4KKyAqCisqICBUQkQgOiBOZWVkIHRvIHVzZSBhIGxvY2FsIChGQ1MgcHJpdmF0ZSkgcmVzcG9uc2UgYnVmZmVyLCBzaW5jZSB0aGUgcmVzcG9uc2UKKyAqIGNhbiBiZSBsYXJnZXIgdGhhbiAySy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdCh2b2lkICpuc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gbnNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJcG9ydC0+c3RhdHMubnNfZ2lkZnRfYWxsb2Nfd2FpdCsrOworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbnMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9naWRfZnQsIG5zKTsKKwkJcmV0dXJuOworCX0KKwlucy0+ZmN4cCA9IGZjeHA7CisKKwkvKgorCSAqIFRoaXMgcXVlcnkgaXMgb25seSBpbml0aWF0ZWQgZm9yIEZDUCBpbml0aWF0b3IgbW9kZS4KKwkgKi8KKwlsZW4gPSBmY19naWRfZnRfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIG5zLT5wb3J0LT5waWQsCisJCQkgICAgICBGQ19UWVBFX0ZDUCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbnNfZ2lkX2Z0X3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW5zLCBiZmFfZmN4cF9nZXRfbWF4cnNwKHBvcnQtPmZjcy0+YmZhKSwKKwkJICAgICAgRkNfUkFfVE9WKTsKKworCXBvcnQtPnN0YXRzLm5zX2dpZGZ0X3NlbnQrKzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX0dJREZUX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX2dpZF9mdF9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCXZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQl1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQlzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCXUzMiAgICAgICAgbl9waWRzOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXBvcnQtPnN0YXRzLm5zX2dpZGZ0X3JzcF9lcnIrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChyZXNpZF9sZW4gIT0gMCkgeworCQkvKgorCQkgKiBUQkQgOiB3ZSB3aWxsIG5lZWQgdG8gYWxsb2NhdGUgYSBsYXJnZXIgYnVmZmVyICYgcmV0cnkgdGhlCisJCSAqIGNvbW1hbmQKKwkJICovCisJCWJmYV90cmMocG9ydC0+ZmNzLCByc3BfbGVuKTsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlc2lkX2xlbik7CisJCXJldHVybjsKKwl9CisKKwljdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX250b2hzKGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCisJc3dpdGNoIChjdGhkci0+Y21kX3JzcF9jb2RlKSB7CisKKwljYXNlIENUX1JTUF9BQ0NFUFQ6CisKKwkJcG9ydC0+c3RhdHMubnNfZ2lkZnRfYWNjZXB0cysrOworCQluX3BpZHMgPSAoZmNfZ2V0X2N0cmVzcF9weWxkX2xlbihyc3BfbGVuKSAvIHNpemVvZih1MzIpKTsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIG5fcGlkcyk7CisJCWJmYV9mY3NfcG9ydF9uc19wcm9jZXNzX2dpZGZ0X3BpZHMocG9ydCwKKwkJCQkJCSAgICh1MzIgKikgKGN0aGRyICsgMSksCisJCQkJCQkgICBuX3BpZHMpOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfT0spOworCQlicmVhazsKKworCWNhc2UgQ1RfUlNQX1JFSkVDVDoKKworCQkvKgorCQkgKiBDaGVjayB0aGUgcmVhc29uIGNvZGUgICYgZXhwbGFuYXRpb24uCisJCSAqIFRoZXJlIG1heSBub3QgaGF2ZSBiZWVuIGFueSBGQzQgZGV2aWNlcyBpbiB0aGUgZmFicmljCisJCSAqLworCQlwb3J0LT5zdGF0cy5uc19naWRmdF9yZWplY3RzKys7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKworCQlpZiAoKGN0aGRyLT5yZWFzb25fY29kZSA9PSBDVF9SU05fVU5BQkxFX1RPX1BFUkYpCisJCSAgICAmJiAoY3RoZHItPmV4cF9jb2RlID09IENUX05TX0VYUF9GVF9OT1RfUkVHKSkgeworCisJCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfT0spOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIGZvciBhbGwgb3RoZXIgZXJyb3JzLCByZXRyeQorCQkJICovCisJCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcG9ydC0+c3RhdHMubnNfZ2lkZnRfdW5rbm93bl9yc3ArKzsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCX0KK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGJ5IGJmYV90aW1lciBvbiB0aW1lciB0aW1lb3V0cy4KKyAqCisgKiAJcGFyYW1baW5dIAlwb3J0IAktIHBvaW50ZXIgdG8gYmZhX2Zjc19wb3J0X3QuCisgKgorICogCXJldHVybgorICogCQl2b2lkCisgKgorKiAJU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiAJbm90ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICopYXJnOworCisJbnMtPnBvcnQtPnN0YXRzLm5zX3RpbWVvdXRzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfVElNRU9VVCk7Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBQSUQgbGlzdCBpbiBHSURfRlQgcmVzcG9uc2UKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19wcm9jZXNzX2dpZGZ0X3BpZHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgIHUzMiAqcGlkX2J1ZiwgdTMyIG5fcGlkcykKK3sKKwlzdHJ1Y3QgZmNnc19naWRmdF9yZXNwX3MgKmdpZGZ0X2VudHJ5OworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXUzMiAgICAgICAgaWk7CisKKwlmb3IgKGlpID0gMDsgaWkgPCBuX3BpZHM7IGlpKyspIHsKKwkJZ2lkZnRfZW50cnkgPSAoc3RydWN0IGZjZ3NfZ2lkZnRfcmVzcF9zICopICZwaWRfYnVmW2lpXTsKKworCQlpZiAoZ2lkZnRfZW50cnktPnBpZCA9PSBwb3J0LT5waWQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDaGVjayBpZiB0aGlzIHJwb3J0IGFscmVhZHkgZXhpc3RzCisJCSAqLworCQlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHBvcnQsIGdpZGZ0X2VudHJ5LT5waWQpOworCQlpZiAocnBvcnQgPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIHRoaXMgaXMgYSBuZXcgZGV2aWNlLiBjcmVhdGUgcnBvcnQKKwkJCSAqLworCQkJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2NyZWF0ZShwb3J0LCBnaWRmdF9lbnRyeS0+cGlkKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiB0aGlzIHJwb3J0IGFscmVhZHkgZXhpc3RzCisJCQkgKi8KKwkJCWJmYV9mY3NfcnBvcnRfc2NuKHJwb3J0KTsKKwkJfQorCisJCWJmYV90cmMocG9ydC0+ZmNzLCBnaWRmdF9lbnRyeS0+cGlkKTsKKworCQkvKgorCQkgKiBpZiB0aGUgbGFzdCBlbnRyeSBiaXQgaXMgc2V0LCBiYWlsIG91dC4KKwkJICovCisJCWlmIChnaWRmdF9lbnRyeS0+bGFzdCkKKwkJCXJldHVybjsKKwl9Cit9CisKKy8qKgorICogIGZjc19uc19wdWJsaWMgRkNTIG5hbWVzZXJ2ZXIgcHVibGljIGludGVyZmFjZXMKKyAqLworCisvKgorICogRnVuY3Rpb25zIGNhbGxlZCBieSBwb3J0L2ZhYi4KKyAqIFRoZXNlIHdpbGwgc2VuZCByZWxldmFudCBFdmVudHMgdG8gdGhlIG5zIHN0YXRlIG1hY2hpbmUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9uc19pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gQkZBX0ZDU19HRVRfTlNfRlJPTV9QT1JUKHBvcnQpOworCisJbnMtPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X25zX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBCRkFfRkNTX0dFVF9OU19GUk9NX1BPUlQocG9ydCk7CisKKwlucy0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X25zX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IEJGQV9GQ1NfR0VUX05TX0ZST01fUE9SVChwb3J0KTsKKworCW5zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9QT1JUX09OTElORSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9uc19xdWVyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IEJGQV9GQ1NfR0VUX05TX0ZST01fUE9SVChwb3J0KTsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX05TX1FVRVJZKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19ib290X3RhcmdldF9kaXNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXU4ICAgICAgICAgbnd3bnM7CisJd3duX3QgICAgICAgICAgKnd3bnM7CisJaW50ICAgICAgICAgICAgIGlpOworCisJYmZhX2lvY2ZjX2dldF9ib290d3ducyhwb3J0LT5mY3MtPmJmYSwgJm53d25zLCAmd3ducyk7CisKKwlmb3IgKGlpID0gMDsgaWkgPCBud3duczsgKytpaSkgeworCQlycG9ydCA9IGJmYV9mY3NfcnBvcnRfY3JlYXRlX2J5X3d3bihwb3J0LCB3d25zW2lpXSk7CisJCWJmYV9hc3NlcnQocnBvcnQpOworCX0KK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3Bsb2cuYyBiL2RyaXZlcnMvc2NzaS9iZmEvcGxvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YWY4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Bsb2cuYwpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9wbG9nLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisKK3N0YXRpYyBpbnQKK3Bsa2RfdmFsaWRhdGVfbG9ncmVjKHN0cnVjdCBiZmFfcGxvZ19yZWNfcyAqcGxfcmVjKQoreworCWlmICgocGxfcmVjLT5sb2dfdHlwZSAhPSBCRkFfUExfTE9HX1RZUEVfSU5UKQorCSAgICAmJiAocGxfcmVjLT5sb2dfdHlwZSAhPSBCRkFfUExfTE9HX1RZUEVfU1RSSU5HKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKHBsX3JlYy0+bG9nX3R5cGUgIT0gQkZBX1BMX0xPR19UWVBFX0lOVCkKKwkgICAgJiYgKHBsX3JlYy0+bG9nX251bV9pbnRzID4gQkZBX1BMX0lOVF9MT0dfU1opKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bsb2dfYWRkKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgKnBsX3JlYykKK3sKKwl1MTYgICAgICAgIHRhaWw7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICpwbF9yZWNwOworCisJaWYgKHBsb2ctPnBsb2dfZW5hYmxlZCA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAocGxrZF92YWxpZGF0ZV9sb2dyZWMocGxfcmVjKSkgeworCQliZmFfYXNzZXJ0KDApOworCQlyZXR1cm47CisJfQorCisJdGFpbCA9IHBsb2ctPnRhaWw7CisKKwlwbF9yZWNwID0gJihwbG9nLT5wbG9nX3JlY3NbdGFpbF0pOworCisJYmZhX29zX21lbWNweShwbF9yZWNwLCBwbF9yZWMsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKworCXBsX3JlY3AtPnR2ID0gQkZBX1RSQ19UUyhwbG9nKTsKKwlCRkFfUExfTE9HX1JFQ19JTkNSKHBsb2ctPnRhaWwpOworCisJaWYgKHBsb2ctPmhlYWQgPT0gcGxvZy0+dGFpbCkKKwkJQkZBX1BMX0xPR19SRUNfSU5DUihwbG9nLT5oZWFkKTsKK30KKwordm9pZAorYmZhX3Bsb2dfaW5pdChzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwliZmFfb3NfbWVtc2V0KChjaGFyICopcGxvZywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcGxvZ19zKSk7CisKKwliZmFfb3NfbWVtY3B5KHBsb2ctPnBsb2dfc2lnLCBCRkFfUExfU0lHX1NUUiwgQkZBX1BMX1NJR19MRU4pOworCXBsb2ctPmhlYWQgPSBwbG9nLT50YWlsID0gMDsKKwlwbG9nLT5wbG9nX2VuYWJsZWQgPSAxOworfQorCit2b2lkCitiZmFfcGxvZ19zdHIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIGVudW0gYmZhX3Bsb2dfbWlkIG1pZCwKKwkJZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsCisJCXUxNiBtaXNjLCBjaGFyICpsb2dfc3RyKQoreworCXN0cnVjdCBiZmFfcGxvZ19yZWNfcyAgbHA7CisKKwlpZiAocGxvZy0+cGxvZ19lbmFibGVkKSB7CisJCWJmYV9vc19tZW1zZXQoJmxwLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wbG9nX3JlY19zKSk7CisJCWxwLm1pZCA9IG1pZDsKKwkJbHAuZWlkID0gZXZlbnQ7CisJCWxwLmxvZ190eXBlID0gQkZBX1BMX0xPR19UWVBFX1NUUklORzsKKwkJbHAubWlzYyA9IG1pc2M7CisJCXN0cm5jcHkobHAubG9nX2VudHJ5LnN0cmluZ19sb2csIGxvZ19zdHIsCisJCQlCRkFfUExfU1RSSU5HX0xPR19TWiAtIDEpOworCQlscC5sb2dfZW50cnkuc3RyaW5nX2xvZ1tCRkFfUExfU1RSSU5HX0xPR19TWiAtIDFdID0gJ1wwJzsKKwkJYmZhX3Bsb2dfYWRkKHBsb2csICZscCk7CisJfQorfQorCit2b2lkCitiZmFfcGxvZ19pbnRhcnIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIGVudW0gYmZhX3Bsb2dfbWlkIG1pZCwKKwkJZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsCisJCXUxNiBtaXNjLCB1MzIgKmludGFyciwgdTMyIG51bV9pbnRzKQoreworCXN0cnVjdCBiZmFfcGxvZ19yZWNfcyAgbHA7CisJdTMyICAgICAgICBpOworCisJaWYgKG51bV9pbnRzID4gQkZBX1BMX0lOVF9MT0dfU1opCisJCW51bV9pbnRzID0gQkZBX1BMX0lOVF9MT0dfU1o7CisKKwlpZiAocGxvZy0+cGxvZ19lbmFibGVkKSB7CisJCWJmYV9vc19tZW1zZXQoJmxwLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wbG9nX3JlY19zKSk7CisJCWxwLm1pZCA9IG1pZDsKKwkJbHAuZWlkID0gZXZlbnQ7CisJCWxwLmxvZ190eXBlID0gQkZBX1BMX0xPR19UWVBFX0lOVDsKKwkJbHAubWlzYyA9IG1pc2M7CisKKwkJZm9yIChpID0gMDsgaSA8IG51bV9pbnRzOyBpKyspCisJCQliZmFfb3NfYXNzaWduKGxwLmxvZ19lbnRyeS5pbnRfbG9nW2ldLAorCQkJCQlpbnRhcnJbaV0pOworCisJCWxwLmxvZ19udW1faW50cyA9ICh1OCkgbnVtX2ludHM7CisKKwkJYmZhX3Bsb2dfYWRkKHBsb2csICZscCk7CisJfQorfQorCit2b2lkCitiZmFfcGxvZ19mY2hkcihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkJZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsCisJCQl1MTYgbWlzYywgc3RydWN0IGZjaHNfcyAqZmNoZHIpCit7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICBscDsKKwl1MzIgICAgICAgKnRtcF9pbnQgPSAodTMyICopIGZjaGRyOworCXUzMiAgICAgICAgaW50c1tCRkFfUExfSU5UX0xPR19TWl07CisKKwlpZiAocGxvZy0+cGxvZ19lbmFibGVkKSB7CisJCWJmYV9vc19tZW1zZXQoJmxwLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wbG9nX3JlY19zKSk7CisKKwkJaW50c1swXSA9IHRtcF9pbnRbMF07CisJCWludHNbMV0gPSB0bXBfaW50WzFdOworCQlpbnRzWzJdID0gdG1wX2ludFs0XTsKKworCQliZmFfcGxvZ19pbnRhcnIocGxvZywgbWlkLCBldmVudCwgbWlzYywgaW50cywgMyk7CisJfQorfQorCit2b2lkCitiZmFfcGxvZ19mY2hkcl9hbmRfcGwoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIGVudW0gYmZhX3Bsb2dfbWlkIG1pZCwKKwkJICAgICAgZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsIHUxNiBtaXNjLCBzdHJ1Y3QgZmNoc19zICpmY2hkciwKKwkJICAgICAgdTMyIHBsZF93MCkKK3sKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgIGxwOworCXUzMiAgICAgICAqdG1wX2ludCA9ICh1MzIgKikgZmNoZHI7CisJdTMyICAgICAgICBpbnRzW0JGQV9QTF9JTlRfTE9HX1NaXTsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQpIHsKKwkJYmZhX29zX21lbXNldCgmbHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKworCQlpbnRzWzBdID0gdG1wX2ludFswXTsKKwkJaW50c1sxXSA9IHRtcF9pbnRbMV07CisJCWludHNbMl0gPSB0bXBfaW50WzRdOworCQlpbnRzWzNdID0gcGxkX3cwOworCisJCWJmYV9wbG9nX2ludGFycihwbG9nLCBtaWQsIGV2ZW50LCBtaXNjLCBpbnRzLCA0KTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2NsZWFyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKQoreworCXBsb2ctPmhlYWQgPSBwbG9nLT50YWlsID0gMDsKK30KKwordm9pZAorYmZhX3Bsb2dfZW5hYmxlKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKQoreworCXBsb2ctPnBsb2dfZW5hYmxlZCA9IDE7Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2Rpc2FibGUoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCit7CisJcGxvZy0+cGxvZ19lbmFibGVkID0gMDsKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX3Bsb2dfZ2V0X3NldHRpbmcoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCit7CisJcmV0dXJuKChiZmFfYm9vbGVhbl90KXBsb2ctPnBsb2dfZW5hYmxlZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmNThiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnQuYwpAQCAtMCwwICsxLDI2MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcnBvcnQuYyBSZW1vdGUgcG9ydCBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjYnVpbGQuaCIKKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmNwaW0uaCIKKyNpbmNsdWRlICJmY3NfZmNwdG0uaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYl9ycG9ydC5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX3Jwb3J0Lmg+CisKK0JGQV9UUkNfRklMRShGQ1MsIFJQT1JUKTsKKworI2RlZmluZSBCRkFfRkNTX1JQT1JUX01BWF9SRVRSSUVTCQkoNSkKKworLyogSW4gbWlsbGlzZWNzICovCitzdGF0aWMgdTMyIGJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQgPQorCQkJQkZBX0ZDU19SUE9SVF9ERUZfREVMX1RJTUVPVVQgKiAxMDAwOworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcnBvcnRfYWxsb2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkJICAgd3duX3QgcHd3biwgdTMyIHJwaWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfZnJlZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X29ubGluZV9hY3Rpb24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfdXBkYXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCSAgICAgc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfZmM0X3BhdXNlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X2ZjNF9yZXN1bWUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfdGltZW91dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naSh2b2lkICpycG9ydF9jYmFyZywKKwkJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyh2b2lkICpycG9ydF9jYmFyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9hZGlzYyh2b2lkICpycG9ydF9jYmFyZywKKwkJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfYWRpc2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbih2b2lkICpycG9ydF9jYmFyZywKKwkJCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfZ2lkcG5fcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJCQlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2Modm9pZCAqcnBvcnRfY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfcHJvY2Vzc19wcmxpKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTE2IGxlbik7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2xzX3JqdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsIHU4IHJlYXNvbl9jb2RlLAorCQkJdTggcmVhc29uX2NvZGVfZXhwbCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9wcm9jZXNzX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTE2IGxlbik7CisvKioKKyAqICBmY3NfcnBvcnRfc20gRkNTIHJwb3J0IHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KKworZW51bSBycG9ydF9ldmVudCB7CisJUlBTTV9FVkVOVF9QTE9HSV9TRU5EID0gMSwJLyogIG5ldyBycG9ydDsgc3RhcnQgd2l0aCBQTE9HSSAqLworCVJQU01fRVZFTlRfUExPR0lfUkNWRCA9IDIsCS8qICBJbmJvdW5kIFBMT0dJIGZyb20gcmVtb3RlIHBvcnQgKi8KKwlSUFNNX0VWRU5UX1BMT0dJX0NPTVAgPSAzLAkvKiAgUExPR0kgY29tcGxldGVkIHRvIHJwb3J0ICovCisJUlBTTV9FVkVOVF9MT0dPX1JDVkQgPSA0LAkvKiAgTE9HTyBmcm9tIHJlbW90ZSBkZXZpY2UgKi8KKwlSUFNNX0VWRU5UX0xPR09fSU1QID0gNSwJLyogIGltcGxpY2l0IGxvZ28gZm9yIFNMRVIgKi8KKwlSUFNNX0VWRU5UX0ZDWFBfU0VOVCA9IDYsCS8qICBGcmFtZSBmcm9tIGhhcyBiZWVuIHNlbnQgKi8KKwlSUFNNX0VWRU5UX0RFTEVURSA9IDcsCS8qICBSUE9SVCBkZWxldGUgcmVxdWVzdCAqLworCVJQU01fRVZFTlRfU0NOID0gOCwJLyogIHN0YXRlIGNoYW5nZSBub3RpZmljYXRpb24gKi8KKwlSUFNNX0VWRU5UX0FDQ0VQVEVEID0gOSwvKiAgR29vZCByZXNwb25zZSBmcm9tIHJlbW90ZSBkZXZpY2UgKi8KKwlSUFNNX0VWRU5UX0ZBSUxFRCA9IDEwLAkvKiAgUmVxdWVzdCB0byBycG9ydCBmYWlsZWQuICAqLworCVJQU01fRVZFTlRfVElNRU9VVCA9IDExLAkvKiAgUnBvcnQgU00gdGltZW91dCBldmVudCAqLworCVJQU01fRVZFTlRfSENCX09OTElORSA9IDEyLAkvKiAgQkZBIHJwb3J0IG9ubGluZSBjYWxsYmFjayAqLworCVJQU01fRVZFTlRfSENCX09GRkxJTkUgPSAxMywJLyogIEJGQSBycG9ydCBvZmZsaW5lIGNhbGxiYWNrICovCisJUlBTTV9FVkVOVF9GQzRfT0ZGTElORSA9IDE0LAkvKiAgRkMtNCBvZmZsaW5lIGNvbXBsZXRlICovCisJUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRSA9IDE1LAkvKiAgUnBvcnQncyBQSUQgaGFzIGNoYW5nZWQgKi8KKwlSUFNNX0VWRU5UX0FERFJFU1NfRElTQyA9IDE2CS8qICBOZWVkIHRvIERpc2NvdmVyIHJwb3J0J3MgUElEICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJCSAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5X3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCQkgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9hZGlzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9hZGlzYyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkgICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3JjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29yY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fbG9nb19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkJZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2NfcmV0cnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbnQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VudChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKKworc3RhdGljIHN0cnVjdCBiZmFfc21fdGFibGVfcyBycG9ydF9zbV90YWJsZVtdID0geworCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpLCBCRkFfUlBPUlRfVU5JTklUfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyksIEJGQV9SUE9SVF9QTE9HSX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpLCBCRkFfUlBPUlRfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfcmV0cnkpLCBCRkFfUlBPUlRfUExPR0lfUkVUUll9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9wbG9naSksIEJGQV9SUE9SVF9QTE9HSX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpLCBCRkFfUlBPUlRfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fb25saW5lKSwgQkZBX1JQT1JUX09OTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnlfc2VuZGluZyksIEJGQV9SUE9SVF9OU1FVRVJZfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeSksIEJGQV9SUE9SVF9OU1FVRVJZfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fYWRpc2Nfc2VuZGluZyksIEJGQV9SUE9SVF9BRElTQ30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjKSwgQkZBX1JQT1JUX0FESVNDfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpLCBCRkFfUlBPUlRfTE9HT1JDVn0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCksIEJGQV9SUE9SVF9MT0dPfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpLCBCRkFfUlBPUlRfT0ZGTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKSwgQkZBX1JQT1JUX09GRkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3JjdiksIEJGQV9SUE9SVF9MT0dPUkNWfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29zZW5kKSwgQkZBX1JQT1JUX0xPR099LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9sb2dvX3NlbmRpbmcpLCBCRkFfUlBPUlRfTE9HT30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpLCBCRkFfUlBPUlRfT0ZGTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKSwgQkZBX1JQT1JUX05TRElTQ30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19yZXRyeSksIEJGQV9SUE9SVF9OU0RJU0N9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VudCksIEJGQV9SUE9SVF9OU0RJU0N9LAorfTsKKworLyoqCisgKiAJCUJlZ2lubmluZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1NFTkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyk7CisJCXJwb3J0LT5wbG9naV9yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfRElTQzoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVBMT0dJIGlzIGJlaW5nIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2kpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlycG9ydC0+cGlkID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVBMT0dJIGlzIGJlaW5nIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogSWdub3JlLCBTQ04gaXMgcG9zc2libHkgb25saW5lIG5vdGlmaWNhdGlvbi4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlycG9ydC0+cGlkID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0hDQl9PRkZMSU5FOgorCQkvKioKKwkJICogSWdub3JlIEJGQSBjYWxsYmFjaywgb24gYSBQTE9HSSByZWNlaXZlIHdlIGNhbGwgYmZhIG9mZmxpbmUuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUExPR0kgaXMgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCS8qCisJCSAqICEhIGZhbGwgdGhyb3VnaCAhIQorCQkgKi8KKworCWNhc2UgUlBTTV9FVkVOVF9USU1FT1VUOgorCQlycG9ydC0+cGxvZ2lfcmV0cmllcysrOworCQlpZiAocnBvcnQtPnBsb2dpX3JldHJpZXMgPCBCRkFfRkNTX1JQT1JUX01BWF9SRVRSSUVTKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcpOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXJwb3J0LT5waWQgPSAwOworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUExPR0kgaXMgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fcGxvZ2koc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfQUNDRVBURUQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCXJwb3J0LT5wbG9naV9yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2MocnBvcnQpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJLyoKKwkJICogISEgZmFsbCB0aHJvdWdoICEhCisJCSAqLworCWNhc2UgUlBTTV9FVkVOVF9GQUlMRUQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfcmV0cnkpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBJZ25vcmUgU0NOIC0gd2FpdCBmb3IgUExPR0kgcmVzcG9uc2UuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUExPR0kgaXMgY29tcGxldGUuIEF3YWl0aW5nIEJGQSBycG9ydCBvbmxpbmUgY2FsbGJhY2suIEZDLTRzCisgKiAJCWFyZSBvZmZsaW5lLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9IQ0JfT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29ubGluZSk7CisJCWJmYV9mY3NfcnBvcnRfb25saW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3Jjdik7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX29mZmxpbmUpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogQHRvZG8KKwkJICogSWdub3JlIFNDTiAtIFBMT0dJIGp1c3QgY29tcGxldGVkLCBGQy00IGxvZ2luIHNob3VsZCBkZXRlY3QKKwkJICogZGV2aWNlIGZhaWx1cmVzLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVJwb3J0IGlzIE9OTElORS4gRkMtNHMgYWN0aXZlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogUGF1c2UgRkMtNCBhY3Rpdml0eSB0aWxsIHJwb3J0IGlzIGF1dGhlbnRpY2F0ZWQuCisJCSAqIEluIHN3aXRjaGVkIGZhYnJpY3MsIGNoZWNrIHByZXNlbmNlIG9mIGRldmljZSBpbiBuYW1lc2VydmVyCisJCSAqIGZpcnN0LgorCQkgKi8KKwkJYmZhX2Zjc19ycG9ydF9mYzRfcGF1c2UocnBvcnQpOworCisJCWlmIChiZmFfZmNzX2ZhYnJpY19pc19zd2l0Y2hlZChycG9ydC0+cG9ydC0+ZmFicmljKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeV9zZW5kaW5nKTsKKwkJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjX3NlbmRpbmcpOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2FkaXNjKHJwb3J0LCBOVUxMKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUFuIFNDTiBldmVudCBpcyByZWNlaXZlZCBpbiBPTkxJTkUgc3RhdGUuIE5TIHF1ZXJ5IGlzIGJlaW5nIHNlbnQKKyAqIAkJcHJpb3IgdG8gQURJU0MgYXV0aGVudGljYXRpb24gd2l0aCBycG9ydC4gRkMtNHMgYXJlIHBhdXNlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fbnNxdWVyeV9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCSBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJLyoqCisJCSAqIGlnbm9yZSBTQ04sIHdhaXQgZm9yIHJlc3BvbnNlIHRvIHF1ZXJ5IGl0c2VsZgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAlBbiBTQ04gZXZlbnQgaXMgcmVjZWl2ZWQgaW4gT05MSU5FIHN0YXRlLiBOUyBxdWVyeSBpcyBzZW50IHRvIHJwb3J0LgorICogCUZDLTRzIGFyZSBwYXVzZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfQUNDRVBURUQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fYWRpc2Nfc2VuZGluZyk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9hZGlzYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0ZBSUxFRDoKKwkJcnBvcnQtPm5zX3JldHJpZXMrKzsKKwkJaWYgKHJwb3J0LT5uc19yZXRyaWVzIDwgQkZBX0ZDU19SUE9SVF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeV9zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKTsKKwkJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCUFuIFNDTiBldmVudCBpcyByZWNlaXZlZCBpbiBPTkxJTkUgc3RhdGUuIEFESVNDIGlzIGJlaW5nIHNlbnQgZm9yCisgKiAJYXV0aGVudGljYXRpbmcgd2l0aCBycG9ydC4gRkMtNHMgYXJlIHBhdXNlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fYWRpc2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9hZGlzYyk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJQW4gU0NOIGV2ZW50IGlzIHJlY2VpdmVkIGluIE9OTElORSBzdGF0ZS4gQURJU0MgaXMgdG8gcnBvcnQuCisgKiAJCUZDLTRzIGFyZSBwYXVzZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0FDQ0VQVEVEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29ubGluZSk7CisJCWJmYV9mY3NfcnBvcnRfZmM0X3Jlc3VtZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCS8qKgorCQkgKiBUb28gY29tcGxleCB0byBjbGVhbnVwIEZDLTQgJiBycG9ydCBhbmQgdGhlbiBhY2MgdG8gUExPR0kuCisJCSAqIEF0IGxlYXN0IGdvIG9mZmxpbmUgd2hlbiBhIFBMT0dJIGlzIHJlY2VpdmVkLgorCQkgKi8KKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCS8qCisJCSAqICEhISBmYWxsIHRocm91Z2ggISEhCisJCSAqLworCisJY2FzZSBSUFNNX0VWRU5UX0ZBSUxFRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogYWxyZWFkeSBwcm9jZXNzaW5nIFJTQ04KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBoYXMgc2VudCBMT0dPLiBBd2FpdGluZyBGQy00IG9mZmxpbmUgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvcmN2KTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJTE9HTyBuZWVkcyB0byBiZSBzZW50IHRvIHJwb3J0LiBBd2FpdGluZyBGQy00IG9mZmxpbmUgY29tcGxldGlvbgorICogCQljYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQzRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJUnBvcnQgaXMgZ29pbmcgb2ZmbGluZS4gQXdhaXRpbmcgRkMtNCBvZmZsaW5lIGNvbXBsZXRpb24gY2FsbGJhY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQzRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZSk7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQkvKioKKwkJICogcnBvcnQgaXMgYWxyZWFkeSBnb2luZyBvZmZsaW5lLgorCQkgKiBTQ04gLSBpZ25vcmUgYW5kIHdhaXQgdGlsbCB0cmFuc2l0aW9uaW5nIHRvIG9mZmxpbmUgc3RhdGUKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUnBvcnQgaXMgb2ZmbGluZS4gRkMtNHMgYXJlIG9mZmxpbmUuIEF3YWl0aW5nIEJGQSBycG9ydCBvZmZsaW5lCisgKiAJCWNhbGxiYWNrLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfSENCX09GRkxJTkU6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlpZiAoYmZhX2Zjc19wb3J0X2lzX29ubGluZShycG9ydC0+cG9ydCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsCisJCQkJCSBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlycG9ydC0+cGlkID0gMDsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCS8qKgorCQkgKiBJZ25vcmUsIGFscmVhZHkgb2ZmbGluZS4KKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBpcyBvZmZsaW5lLiBGQy00cyBhcmUgb2ZmbGluZS4gQXdhaXRpbmcgQkZBIHJwb3J0IG9mZmxpbmUKKyAqIAkJY2FsbGJhY2sgdG8gc2VuZCBMT0dPIGFjY2VwdC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29yY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0hDQl9PRkZMSU5FOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJaWYgKHJwb3J0LT5waWQpCisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2MocnBvcnQpOworCQkvKgorCQkgKiBJZiB0aGUgbHBvcnQgaXMgb25saW5lIGFuZCBpZiB0aGUgcnBvcnQgaXMgbm90IGEgd2VsbCBrbm93bgorCQkgKiBhZGRyZXNzIHBvcnQsIHdlIHRyeSB0byByZS1kaXNjb3ZlciB0aGUgci1wb3J0LgorCQkgKi8KKwkJaWYgKGJmYV9mY3NfcG9ydF9pc19vbmxpbmUocnBvcnQtPnBvcnQpCisJCSAgICAmJiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsCisJCQkJCSBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogaWYgaXQgaXMgbm90IGEgd2VsbCBrbm93biBhZGRyZXNzLCByZXNldCB0aGUgcGlkIHRvCisJCQkgKgorCQkJICovCisJCQlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkKKwkJCQlycG9ydC0+cGlkID0gMDsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29zZW5kKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX29mZmxpbmUpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCS8qKgorCQkgKiBJZ25vcmUgLSBhbHJlYWR5IHByb2Nlc3NpbmcgYSBMT0dPLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBScG9ydCBpcyBiZWluZyBkZWxldGVkLiBGQy00cyBhcmUgb2ZmbGluZS4gQXdhaXRpbmcgQkZBIHJwb3J0IG9mZmxpbmUKKyAqIGNhbGxiYWNrIHRvIHNlbmQgTE9HTy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29zZW5kKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9IQ0JfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9sb2dvX3NlbmRpbmcpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfbG9nbyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBpcyBiZWluZyBkZWxldGVkLiBGQy00cyBhcmUgb2ZmbGluZS4gTE9HTyBpcyBiZWluZyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9sb2dvX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJLyoKKwkJICogT25jZSBMT0dPIGlzIHNlbnQsIHdlIGRvbm90IHdhaXQgZm9yIHRoZSByZXNwb25zZQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUnBvcnQgaXMgb2ZmbGluZS4gRkMtNHMgYXJlIG9mZmxpbmUuIEJGQSBycG9ydCBpcyBvZmZsaW5lLgorICogCQlUaW1lciBhY3RpdmUgdG8gZGVsZXRlIHN0YWxlIHJwb3J0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9TRU5EOgorCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKTsKKwkJcnBvcnQtPnBsb2dpX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAlScG9ydCBhZGRyZXNzIGhhcyBjaGFuZ2VkLiBOYW1lc2VydmVyIGRpc2NvdmVyeSByZXF1ZXN0IGlzIGJlaW5nIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfU0VORDoKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsJLyogcmVzZXQgdGhlIHJldHJ5IGNvdW50ICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJTmFtZXNlcnZlciBkaXNjb3ZlcnkgZmFpbGVkLiBXYWl0aW5nIGZvciB0aW1lb3V0IHRvIHJldHJ5LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2NfcmV0cnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyhycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFJwb3J0IGFkZHJlc3MgaGFzIGNoYW5nZWQuIE5hbWVzZXJ2ZXIgZGlzY292ZXJ5IHJlcXVlc3QgaXMgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbnQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0FDQ0VQVEVEOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJaWYgKHJwb3J0LT5waWQpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyk7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kocnBvcnQsIE5VTEwpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9GQUlMRUQ6CisJCXJwb3J0LT5uc19yZXRyaWVzKys7CisJCWlmIChycG9ydC0+bnNfcmV0cmllcyA8IEJGQV9GQ1NfUlBPUlRfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsCisJCQkJCSBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlycG9ydC0+cGlkID0gMDsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJfTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBpZ25vcmUsIHdhaXQgZm9yIE5TIHF1ZXJ5IHJlc3BvbnNlCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCS8qKgorCQkgKiBOb3QgbG9nZ2VkLWluIHlldC4gQWNjZXB0IExPR08uCisJCSAqLworCQliZmFfZmNzX3Jwb3J0X3NlbmRfbG9nb19hY2MocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGZjc19ycG9ydF9wcml2YXRlIEZDUyBSUE9SVCBwcm92YXRlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kodm9pZCAqcnBvcnRfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2ksIHJwb3J0KTsKKwkJcmV0dXJuOworCX0KKwlycG9ydC0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19wbG9naV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnBvcnQtPnBpZCwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJICAgICBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycG9ydF9wbG9naV9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilycG9ydCwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcnBvcnQtPnN0YXRzLnBsb2dpcysrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCQkgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKwlzdHJ1Y3QgZmNfbG9naV9zCSpwbG9naV9yc3A7CisJc3RydWN0IGZjX2xzX3JqdF9zCSpsc19yanQ7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqdHdpbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHJwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlycG9ydC0+c3RhdHMucGxvZ2lfZmFpbGVkKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZBSUxFRCk7CisJCXJldHVybjsKKwl9CisKKwlwbG9naV9yc3AgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJLyoqCisJICogQ2hlY2sgZm9yIGZhaWx1cmUgZmlyc3QuCisJICovCisJaWYgKHBsb2dpX3JzcC0+ZWxzX2NtZC5lbHNfY29kZSAhPSBGQ19FTFNfQUNDKSB7CisJCWxzX3JqdCA9IChzdHJ1Y3QgZmNfbHNfcmp0X3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCk7CisKKwkJcnBvcnQtPnN0YXRzLnBsb2dpX3JlamVjdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkFJTEVEKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIFBMT0dJIGlzIGNvbXBsZXRlLiBNYWtlIHN1cmUgdGhpcyBkZXZpY2UgaXMgbm90IG9uZSBvZiB0aGUga25vd24KKwkgKiBkZXZpY2Ugd2l0aCBhIG5ldyBGQyBwb3J0IGFkZHJlc3MuCisJICovCisJbGlzdF9mb3JfZWFjaChxZSwgJnJwb3J0LT5wb3J0LT5ycG9ydF9xKSB7CisJCXR3aW4gPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAodHdpbiA9PSBycG9ydCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJwb3J0LT5wd3duICYmIChwbG9naV9yc3AtPnBvcnRfbmFtZSA9PSB0d2luLT5wd3duKSkgeworCQkJYmZhX3RyYyhycG9ydC0+ZmNzLCB0d2luLT5waWQpOworCQkJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCQkJLyoKKwkJCSAqIFVwZGF0ZSBwbG9naSBzdGF0cyBpbiB0d2luCisJCQkgKi8KKwkJCXR3aW4tPnN0YXRzLnBsb2dpcyArPSBycG9ydC0+c3RhdHMucGxvZ2lzOworCQkJdHdpbi0+c3RhdHMucGxvZ2lfcmVqZWN0cyArPSBycG9ydC0+c3RhdHMucGxvZ2lfcmVqZWN0czsKKwkJCXR3aW4tPnN0YXRzLnBsb2dpX3RpbWVvdXRzICs9CisJCQkJcnBvcnQtPnN0YXRzLnBsb2dpX3RpbWVvdXRzOworCQkJdHdpbi0+c3RhdHMucGxvZ2lfZmFpbGVkICs9IHJwb3J0LT5zdGF0cy5wbG9naV9mYWlsZWQ7CisJCQl0d2luLT5zdGF0cy5wbG9naV9yY3ZkICs9IHJwb3J0LT5zdGF0cy5wbG9naV9yY3ZkOworCQkJdHdpbi0+c3RhdHMucGxvZ2lfYWNjcysrOworCisJCQliZmFfZmNzX3Jwb3J0X2RlbGV0ZShycG9ydCk7CisKKwkJCWJmYV9mY3NfcnBvcnRfdXBkYXRlKHR3aW4sIHBsb2dpX3JzcCk7CisJCQl0d2luLT5waWQgPSByc3BfZmNocy0+c19pZDsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHR3aW4sIFJQU01fRVZFTlRfUExPR0lfQ09NUCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKioKKwkgKiBOb3JtYWwgbG9naW4gcGF0aCAtLSBubyBldmlsIHR3aW5zLgorCSAqLworCXJwb3J0LT5zdGF0cy5wbG9naV9hY2NzKys7CisJYmZhX2Zjc19ycG9ydF91cGRhdGUocnBvcnQsIHBsb2dpX3JzcCk7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfQUNDRVBURUQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHZvaWQgKnJwb3J0X2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBvcnRfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5yZXBseV9veGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjLCBycG9ydCk7CisJCXJldHVybjsKKwl9CisJcnBvcnQtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcGxvZ2lfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJCSBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJwb3J0LT5yZXBseV9veGlkLAorCQkJCSBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJCSBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwgRkNfTUFYX1BEVVNaLCAwKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfYWRpc2Modm9pZCAqcnBvcnRfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfYWRpc2MsIHJwb3J0KTsKKwkJcmV0dXJuOworCX0KKwlycG9ydC0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19hZGlzY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnBvcnQtPnBpZCwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcnBvcnRfYWRpc2NfcmVzcG9uc2UsCisJCSAgICAgIHJwb3J0LCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlycG9ydC0+c3RhdHMuYWRpc2Nfc2VudCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2FkaXNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCQkgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKwl2b2lkICAgICAgICAgICAqcGxkID0gYmZhX2ZjeHBfZ2V0X3JzcGJ1ZihmY3hwKTsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MgICAgKmxzX3JqdDsKKworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcnBvcnQtPnN0YXRzLmFkaXNjX2ZhaWxlZCsrOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGZjX2FkaXNjX3JzcF9wYXJzZSgoc3RydWN0IGZjX2FkaXNjX3MgKilwbGQsIHJzcF9sZW4sIHJwb3J0LT5wd3duLAorCQlycG9ydC0+bnd3bikgID09IEZDX1BBUlNFX09LKSB7CisJCXJwb3J0LT5zdGF0cy5hZGlzY19hY2NzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0FDQ0VQVEVEKTsKKwkJcmV0dXJuOworCX0KKworCXJwb3J0LT5zdGF0cy5hZGlzY19yZWplY3RzKys7CisJbHNfcmp0ID0gcGxkOworCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5lbHNfY21kLmVsc19jb2RlKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHZvaWQgKnJwb3J0X2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBvcnRfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4sIHJwb3J0KTsKKwkJcmV0dXJuOworCX0KKwlycG9ydC0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19naWRwbl9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLCBycG9ydC0+cHd3bik7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3Jwb3J0X2dpZHBuX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKXJwb3J0LCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9naWRwbl9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqdHdpbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgCSpjdGhkcjsKKwlzdHJ1Y3QgZmNnc19naWRwbl9yZXNwX3MJKmdpZHBuX3JzcDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIHBpZCBpcyB0aGUgc2FtZSBhcyBiZWZvcmUuCisJCSAqLworCQlnaWRwbl9yc3AgPSAoc3RydWN0IGZjZ3NfZ2lkcG5fcmVzcF9zICopIChjdGhkciArIDEpOworCisJCWlmIChnaWRwbl9yc3AtPmRhcCA9PSBycG9ydC0+cGlkKSB7CisJCQkvKgorCQkJICogRGV2aWNlIGlzIG9ubGluZQorCQkJICovCisJCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9BQ0NFUFRFRCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRGV2aWNlJ3MgUElEIGhhcyBjaGFuZ2VkLiBXZSBuZWVkIHRvIGNsZWFudXAgYW5kCisJCQkgKiByZS1sb2dpbi4gSWYgdGhlcmUgaXMgYW5vdGhlciBkZXZpY2Ugd2l0aCB0aGUgdGhlCisJCQkgKiBuZXdseSBkaXNjb3ZlcmVkIHBpZCwgc2VuZCBhbiBzY24gbm90aWNlIHNvIHRoYXQgaXRzCisJCQkgKiBuZXcgcGlkIGNhbiBiZSBkaXNjb3ZlcmVkLgorCQkJICovCisJCQlsaXN0X2Zvcl9lYWNoKHFlLCAmcnBvcnQtPnBvcnQtPnJwb3J0X3EpIHsKKwkJCQl0d2luID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJCQlpZiAodHdpbiA9PSBycG9ydCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKGdpZHBuX3JzcC0+ZGFwID09IHR3aW4tPnBpZCkgeworCQkJCQliZmFfdHJjKHJwb3J0LT5mY3MsIHR3aW4tPnBpZCk7CisJCQkJCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwkJCQkJdHdpbi0+cGlkID0gMDsKKwkJCQkJYmZhX3NtX3NlbmRfZXZlbnQodHdpbiwKKwkJCQkJCVJQU01fRVZFTlRfQUREUkVTU19DSEFOR0UpOworCQkJCX0KKwkJCX0KKwkJCXJwb3J0LT5waWQgPSBnaWRwbl9yc3AtPmRhcDsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBSZWplY3QgUmVzcG9uc2UKKwkgKi8KKwlzd2l0Y2ggKGN0aGRyLT5yZWFzb25fY29kZSkgeworCWNhc2UgQ1RfUlNOX0xPR0lDQUxfQlVTWToKKwkJLyoKKwkJICogTmVlZCB0byByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBDVF9SU05fVU5BQkxFX1RPX1BFUkY6CisJCS8qCisJCSAqIGRldmljZSBkb2Vzbid0IGV4aXN0IDogU3RhcnQgdGltZXIgdG8gY2xlYW51cCB0aGlzIGxhdGVyLgorCQkgKi8KKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkFJTEVEKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogICAgQ2FsbGVkIHRvIHNlbmQgYSBsb2dvdXQgdG8gdGhlIHJwb3J0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ28odm9pZCAqcnBvcnRfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXUxNiAgICAgICAgbGVuOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCXBvcnQgPSBycG9ydC0+cG9ydDsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ28sIHJwb3J0KTsKKwkJcmV0dXJuOworCX0KKwlycG9ydC0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19sb2dvX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCSAgICBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgcnBvcnQsIEZDX01BWF9QRFVTWiwKKwkJICAgICAgRkNfRURfVE9WKTsKKworCXJwb3J0LT5zdGF0cy5sb2dvcysrOworCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKKy8qKgorICogICAgU2VuZCBBQ0MgZm9yIGEgTE9HTyByZWNlaXZlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyh2b2lkICpycG9ydF9jYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwb3J0X2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTE2ICAgICAgICBsZW47CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJcG9ydCA9IHJwb3J0LT5wb3J0OworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJcnBvcnQtPnN0YXRzLmxvZ29fcmN2ZCsrOworCWxlbiA9IGZjX2xvZ29fYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJCWJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnBvcnQtPnJlcGx5X294aWQpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGJ5IGJmYV90aW1lciBvbiB0aW1lciB0aW1lb3V0cy4KKyAqCisgKiAJcGFyYW1baW5dIAlycG9ydCAJCQktIHBvaW50ZXIgdG8gYmZhX2Zjc19wb3J0X25zX3QuCisgKiAJcGFyYW1bb3V0XQlycG9ydF9zdGF0dXMgCS0gcG9pbnRlciB0byByZXR1cm4gdnBvcnQgc3RhdHVzIGluCisgKgorICogCXJldHVybgorICogCQl2b2lkCisgKgorKiAgCVNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogCW5vdGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWFyZzsKKworCXJwb3J0LT5zdGF0cy5wbG9naV90aW1lb3V0cysrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1RJTUVPVVQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9wcm9jZXNzX3BybGkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNfcHJsaV9zICAgICAgKnBybGk7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCisJcnBvcnQtPnN0YXRzLnBybGlfcmN2ZCsrOworCisJaWYgKEJGQV9GQ1NfVlBPUlRfSVNfVEFSR0VUX01PREUocG9ydCkpIHsKKwkJLyoKKwkJICogVGFyZ2V0IE1vZGUgOiBMZXQgdGhlIGZjcHRtIGhhbmRsZSBpdAorCQkgKi8KKwkJYmZhX2Zjc190aW5fcnhfcHJsaShycG9ydC0+dGluLCByeF9mY2hzLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSBhcmUgZWl0aGVyIGluIEluaXRpYXRvciBvciBpcGZjIE1vZGUKKwkgKi8KKwlwcmxpID0gKHN0cnVjdCBmY19wcmxpX3MgKikgKHJ4X2ZjaHMgKyAxKTsKKworCWlmIChwcmxpLT5wYXJhbXBhZ2Uuc2VydnBhcmFtcy5pbml0aWF0b3IpIHsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBwcmxpLT5wYXJhbXBhZ2UudHlwZSk7CisJCXJwb3J0LT5zY3NpX2Z1bmN0aW9uID0gQkZBX1JQT1JUX0lOSVRJQVRPUjsKKwkJYmZhX2Zjc19pdG5pbV9pc19pbml0aWF0b3IocnBvcnQtPml0bmltKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBAdG9kbzogUFJMSSBmcm9tIGEgdGFyZ2V0ID8KKwkJICovCisJCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwkJcnBvcnQtPnNjc2lfZnVuY3Rpb24gPSBCRkFfUlBPUlRfVEFSR0VUOworCX0KKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCWxlbiA9IGZjX3BybGlfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJCWJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkJcG9ydC0+cG9ydF9jZmcucm9sZXMpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfcHJvY2Vzc19ycHNjKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjX3Jwc2Nfc3BlZWRfaW5mb19zIHNwZWVkczsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyBwcG9ydF9hdHRyOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5kX2lkKTsKKworCXJwb3J0LT5zdGF0cy5ycHNjX3JjdmQrKzsKKwlzcGVlZHMucG9ydF9zcGVlZF9jYXAgPQorCQlSUFNDX1NQRUVEX0NBUF8xRyB8IFJQU0NfU1BFRURfQ0FQXzJHIHwgUlBTQ19TUEVFRF9DQVBfNEcgfAorCQlSUFNDX1NQRUVEX0NBUF84RzsKKworCS8qCisJICogZ2V0IGN1cmVudCBzcGVlZCBmcm9tIHBwb3J0IGF0dHJpYnV0ZXMgZnJvbSBCRkEKKwkgKi8KKwliZmFfcHBvcnRfZ2V0X2F0dHIocG9ydC0+ZmNzLT5iZmEsICZwcG9ydF9hdHRyKTsKKworCXNwZWVkcy5wb3J0X29wX3NwZWVkID0gZmNfYmZhX3NwZWVkX3RvX3Jwc2Nfb3BlcnNwZWVkKHBwb3J0X2F0dHIuc3BlZWQpOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfcnBzY19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJ4X2ZjaHMtPnNfaWQsCisJCQkJYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCwKKwkJCQkmc3BlZWRzKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfYWRpc2Moc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNfYWRpc2NfcyAgICAgICphZGlzYzsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisKKwlycG9ydC0+c3RhdHMuYWRpc2NfcmN2ZCsrOworCisJaWYgKEJGQV9GQ1NfVlBPUlRfSVNfVEFSR0VUX01PREUocG9ydCkpIHsKKwkJLyoKKwkJICogQHRvZG8gOiBUYXJnZXQgTW9kZSBoYW5kbGluZworCQkgKi8KKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCQliZmFfYXNzZXJ0KDApOworCQlyZXR1cm47CisJfQorCisJYWRpc2MgPSAoc3RydWN0IGZjX2FkaXNjX3MgKikgKHJ4X2ZjaHMgKyAxKTsKKworCS8qCisJICogQWNjZXB0IGlmIHRoZSBpdG5pbSBmb3IgdGhpcyBycG9ydCBpcyBvbmxpbmUuIEVsc2UgcmVqZWN0IHRoZSBBRElTQworCSAqLworCWlmIChiZmFfZmNzX2l0bmltX2dldF9vbmxpbmVfc3RhdGUocnBvcnQtPml0bmltKSA9PSBCRkFfU1RBVFVTX09LKSB7CisKKwkJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCQlpZiAoIWZjeHApCisJCQlyZXR1cm47CisKKwkJbGVuID0gZmNfYWRpc2NfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJCQkgcnhfZmNocy0+c19pZCwKKwkJCQkJIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwKKwkJCQkJIHJ4X2ZjaHMtPm94X2lkLCBwb3J0LT5wb3J0X2NmZy5wd3duLAorCQkJCQkgcG9ydC0+cG9ydF9jZmcubnd3bik7CisKKwkJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsCisJCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCQkgICAgICBGQ19NQVhfUERVU1osIDApOworCX0gZWxzZSB7CisJCXJwb3J0LT5zdGF0cy5hZGlzY19yZWplY3RlZCsrOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfbHNfcmp0KHJwb3J0LCByeF9mY2hzLAorCQkJCQkgIEZDX0xTX1JKVF9SU05fVU5BQkxFX1RPX1BFUkZfQ01ELAorCQkJCQkgIEZDX0xTX1JKVF9FWFBfTE9HSU5fUkVRVUlSRUQpOworCX0KKworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9oYWxfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBiZmFfcnBvcnRfaW5mb19zIHJwb3J0X2luZm87CisKKwlycG9ydF9pbmZvLnBpZCA9IHJwb3J0LT5waWQ7CisJcnBvcnRfaW5mby5sb2NhbF9waWQgPSBwb3J0LT5waWQ7CisJcnBvcnRfaW5mby5scF90YWcgPSBwb3J0LT5scF90YWc7CisJcnBvcnRfaW5mby52Zl9pZCA9IHBvcnQtPmZhYnJpYy0+dmZfaWQ7CisJcnBvcnRfaW5mby52Zl9lbiA9IHBvcnQtPmZhYnJpYy0+aXNfdmY7CisJcnBvcnRfaW5mby5mY19jbGFzcyA9IHJwb3J0LT5mY19jb3M7CisJcnBvcnRfaW5mby5jaXNjID0gcnBvcnQtPmNpc2M7CisJcnBvcnRfaW5mby5tYXhfZnJtc3ogPSBycG9ydC0+bWF4ZnJzaXplOworCWJmYV9ycG9ydF9vbmxpbmUocnBvcnQtPmJmYV9ycG9ydCwgJnJwb3J0X2luZm8pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9mYzRfcGF1c2Uoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJaWYgKGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocnBvcnQtPnBvcnQpKQorCQliZmFfZmNzX2l0bmltX3BhdXNlKHJwb3J0LT5pdG5pbSk7CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX3RhcmdldChycG9ydC0+cG9ydCkpCisJCWJmYV9mY3NfdGluX3BhdXNlKHJwb3J0LT50aW4pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9mYzRfcmVzdW1lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHJwb3J0LT5wb3J0KSkKKwkJYmZhX2Zjc19pdG5pbV9yZXN1bWUocnBvcnQtPml0bmltKTsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHJwb3J0LT5wb3J0KSkKKwkJYmZhX2Zjc190aW5fcmVzdW1lKHJwb3J0LT50aW4pOworfQorCitzdGF0aWMgc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2FsbG9jKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcHd3biwgdTMyIHJwaWQpCit7CisJc3RydWN0IGJmYV9mY3NfcyAqZmNzID0gcG9ydC0+ZmNzOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBiZmFkX3Jwb3J0X3MgKnJwb3J0X2RydjsKKworCS8qKgorCSAqIGFsbG9jYXRlIHJwb3J0CisJICovCisJaWYgKGJmYV9mY2JfcnBvcnRfYWxsb2MoZmNzLT5iZmFkLCAmcnBvcnQsICZycG9ydF9kcnYpCisJICAgICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhmY3MsIHJwaWQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgci1wb3J0CisJICovCisJcnBvcnQtPnBvcnQgPSBwb3J0OworCXJwb3J0LT5mY3MgPSBmY3M7CisJcnBvcnQtPnJwX2RydiA9IHJwb3J0X2RydjsKKwlycG9ydC0+cGlkID0gcnBpZDsKKwlycG9ydC0+cHd3biA9IHB3d247CisKKwkvKioKKwkgKiBhbGxvY2F0ZSBCRkEgcnBvcnQKKwkgKi8KKwlycG9ydC0+YmZhX3Jwb3J0ID0gYmZhX3Jwb3J0X2NyZWF0ZShwb3J0LT5mY3MtPmJmYSwgcnBvcnQpOworCWlmICghcnBvcnQtPmJmYV9ycG9ydCkgeworCQliZmFfdHJjKGZjcywgcnBpZCk7CisJCWtmcmVlKHJwb3J0X2Rydik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qKgorCSAqIGFsbG9jYXRlIEZDLTRzCisJICovCisJYmZhX2Fzc2VydChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpIF4KKwkJICAgYmZhX2Zjc19wb3J0X2lzX3RhcmdldChwb3J0KSk7CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihwb3J0KSkgeworCQlycG9ydC0+aXRuaW0gPSBiZmFfZmNzX2l0bmltX2NyZWF0ZShycG9ydCk7CisJCWlmICghcnBvcnQtPml0bmltKSB7CisJCQliZmFfdHJjKGZjcywgcnBpZCk7CisJCQliZmFfcnBvcnRfZGVsZXRlKHJwb3J0LT5iZmFfcnBvcnQpOworCQkJa2ZyZWUocnBvcnRfZHJ2KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpIHsKKwkJcnBvcnQtPnRpbiA9IGJmYV9mY3NfdGluX2NyZWF0ZShycG9ydCk7CisJCWlmICghcnBvcnQtPnRpbikgeworCQkJYmZhX3RyYyhmY3MsIHJwaWQpOworCQkJYmZhX3Jwb3J0X2RlbGV0ZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJCWtmcmVlKHJwb3J0X2Rydik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCWJmYV9mY3NfcG9ydF9hZGRfcnBvcnQocG9ydCwgcnBvcnQpOworCisJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBScG9ydCBGZWF0dXJlcyhSUEYpIFN1YiBNb2R1bGUKKwkgKi8KKwlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkKKwkJYmZhX2Zjc19ycGZfaW5pdChycG9ydCk7CisKKwlyZXR1cm4gcnBvcnQ7Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfZnJlZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKworCS8qKgorCSAqIC0gZGVsZXRlIEZDLTRzCisJICogLSBkZWxldGUgQkZBIHJwb3J0CisJICogLSByZW1vdmUgZnJvbSBxdWV1ZSBvZiBycG9ydHMKKwkgKi8KKwlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihwb3J0KSkKKwkJYmZhX2Zjc19pdG5pbV9kZWxldGUocnBvcnQtPml0bmltKTsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHBvcnQpKQorCQliZmFfZmNzX3Rpbl9kZWxldGUocnBvcnQtPnRpbik7CisKKwliZmFfcnBvcnRfZGVsZXRlKHJwb3J0LT5iZmFfcnBvcnQpOworCWJmYV9mY3NfcG9ydF9kZWxfcnBvcnQocG9ydCwgcnBvcnQpOworCWtmcmVlKHJwb3J0LT5ycF9kcnYpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJICAgICAgIGVudW0gYmZhX3Jwb3J0X2Flbl9ldmVudCBldmVudCwKKwkJICAgICAgIHN0cnVjdCBiZmFfcnBvcnRfYWVuX2RhdGFfcyAqZGF0YSkKK3sKKwl1bmlvbiBiZmFfYWVuX2RhdGFfdSBhZW5fZGF0YTsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kID0gcnBvcnQtPmZjcy0+bG9nbTsKKwl3d25fdCAgICAgICAgICAgbHB3d24gPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocnBvcnQtPnBvcnQpOworCXd3bl90ICAgICAgICAgICBycHd3biA9IHJwb3J0LT5wd3duOworCWNoYXIgICAgICAgICAgICBscHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisJY2hhciAgICAgICAgICAgIHJwd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKwljaGFyICAgICAgICAgICAqcHJpb19zdHJbXSA9IHsgInVua25vd24iLCAiaGlnaCIsICJtZWRpdW0iLCAibG93IiB9OworCisJd3duMnN0cihscHd3bl9wdHIsIGxwd3duKTsKKwl3d24yc3RyKHJwd3duX3B0ciwgcnB3d24pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX0FFTl9PTkxJTkU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1JQT1JUX09OTElORSwgcnB3d25fcHRyLCBscHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9SUE9SVF9BRU5fT0ZGTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUlBPUlRfT0ZGTElORSwgcnB3d25fcHRyLCBscHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9SUE9SVF9BRU5fRElTQ09OTkVDVDoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUlBPUlRfRElTQ09OTkVDVCwgcnB3d25fcHRyLCBscHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9SUE9SVF9BRU5fUU9TX1BSSU86CisJCWFlbl9kYXRhLnJwb3J0LnByaXYucW9zID0gZGF0YS0+cHJpdi5xb3M7CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1JQT1JUX1FPU19QUklPLAorCQkJcHJpb19zdHJbYWVuX2RhdGEucnBvcnQucHJpdi5xb3MucW9zX3ByaW9yaXR5XSwKKwkJCXJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQ6CisJCWFlbl9kYXRhLnJwb3J0LnByaXYucW9zID0gZGF0YS0+cHJpdi5xb3M7CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1JQT1JUX1FPU19GTE9XSUQsCisJCQlhZW5fZGF0YS5ycG9ydC5wcml2LnFvcy5xb3NfZmxvd19pZCwgcnB3d25fcHRyLAorCQkJbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWVuX2RhdGEucnBvcnQudmZfaWQgPSBycG9ydC0+cG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZGF0YS5ycG9ydC5wcHd3biA9CisJCWJmYV9mY3NfcG9ydF9nZXRfcHd3bihiZmFfZmNzX2dldF9iYXNlX3BvcnQocnBvcnQtPmZjcykpOworCWFlbl9kYXRhLnJwb3J0Lmxwd3duID0gbHB3d247CisJYWVuX2RhdGEucnBvcnQucnB3d24gPSBycHd3bjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfb25saW5lX2FjdGlvbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKworCXJwb3J0LT5zdGF0cy5vbmxpbmVzKys7CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihwb3J0KSkgeworCQliZmFfZmNzX2l0bmltX3Jwb3J0X29ubGluZShycG9ydC0+aXRuaW0pOworCQlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkKKwkJCWJmYV9mY3NfcnBmX3Jwb3J0X29ubGluZShycG9ydCk7CisJfTsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHBvcnQpKQorCQliZmFfZmNzX3Rpbl9ycG9ydF9vbmxpbmUocnBvcnQtPnRpbik7CisKKwkvKgorCSAqIERvbid0IHBvc3QgZXZlbnRzIGZvciB3ZWxsIGtub3duIGFkZHJlc3NlcworCSAqLworCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX09OTElORSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCisJcnBvcnQtPnN0YXRzLm9mZmxpbmVzKys7CisKKwkvKgorCSAqIERvbid0IHBvc3QgZXZlbnRzIGZvciB3ZWxsIGtub3duIGFkZHJlc3NlcworCSAqLworCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKSB7CisJCWlmIChiZmFfZmNzX3BvcnRfaXNfb25saW5lKHJwb3J0LT5wb3J0KSA9PSBCRkFfVFJVRSkgeworCQkJYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChycG9ydCwgQkZBX1JQT1JUX0FFTl9ESVNDT05ORUNULAorCQkJCQkgICAgICAgTlVMTCk7CisJCX0gZWxzZSB7CisJCQliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX09GRkxJTkUsCisJCQkJCSAgICAgICBOVUxMKTsKKwkJfQorCX0KKworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKSB7CisJCWJmYV9mY3NfaXRuaW1fcnBvcnRfb2ZmbGluZShycG9ydC0+aXRuaW0pOworCQlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkKKwkJCWJmYV9mY3NfcnBmX3Jwb3J0X29mZmxpbmUocnBvcnQpOworCX0KKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHBvcnQpKQorCQliZmFfZmNzX3Rpbl9ycG9ydF9vZmZsaW5lKHJwb3J0LT50aW4pOworfQorCisvKioKKyAqIFVwZGF0ZSBycG9ydCBwYXJhbWV0ZXJzIGZyb20gUExPR0kgb3IgUExPR0kgYWNjZXB0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF91cGRhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCisJLyoqCisJICogLSBwb3J0IG5hbWUKKwkgKiAtIG5vZGUgbmFtZQorCSAqLworCXJwb3J0LT5wd3duID0gcGxvZ2ktPnBvcnRfbmFtZTsKKwlycG9ydC0+bnd3biA9IHBsb2dpLT5ub2RlX25hbWU7CisKKwkvKioKKwkgKiAtIGNsYXNzIG9mIHNlcnZpY2UKKwkgKi8KKwlycG9ydC0+ZmNfY29zID0gMDsKKwlpZiAocGxvZ2ktPmNsYXNzMy5jbGFzc192YWxpZCkKKwkJcnBvcnQtPmZjX2NvcyA9IEZDX0NMQVNTXzM7CisKKwlpZiAocGxvZ2ktPmNsYXNzMi5jbGFzc192YWxpZCkKKwkJcnBvcnQtPmZjX2NvcyB8PSBGQ19DTEFTU18yOworCisJLyoqCisJICogLSBDSVNDCisJICogLSBNQVggcmVjZWl2ZSBmcmFtZSBzaXplCisJICovCisJcnBvcnQtPmNpc2MgPSBwbG9naS0+Y3NwLmNpc2M7CisJcnBvcnQtPm1heGZyc2l6ZSA9IGJmYV9vc19udG9ocyhwbG9naS0+Y2xhc3MzLnJ4c3opOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGJmYV9vc19udG9ocyhwbG9naS0+Y3NwLmJiY3JlZCkpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5mYWJyaWMtPmJiX2NyZWRpdCk7CisJLyoqCisJICogRGlyZWN0IEF0dGFjaCBQMlAgbW9kZSA6CisJICogVGhpcyBpcyB0byBoYW5kbGUgYSBidWcgKDIzMzQ3NikgaW4gSUJNIHRhcmdldHMgaW4gRGlyZWN0IEF0dGFjaAorCSAqIE1vZGUuIEJhc2ljYWxseSwgaW4gRkxPR0kgQWNjZXB0IHRoZSB0YXJnZXQgd291bGQgaGF2ZSBlcnJvbmVvdXNseQorCSAqIHNldCB0aGUgQkIgQ3JlZGl0IHRvIHRoZSB2YWx1ZSB1c2VkIGluIHRoZSBGTE9HSSBzZW50IGJ5IHRoZSBIQkEuCisJICogSXQgdXNlcyB0aGUgY29ycmVjdCB2YWx1ZSAoaXRzIG93biBCQiBjcmVkaXQpIGluIFBMT0dJLgorCSAqLworCWlmICgoIWJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHBvcnQtPmZhYnJpYykpCisJICAgICYmIChiZmFfb3NfbnRvaHMocGxvZ2ktPmNzcC5iYmNyZWQpIDwgcG9ydC0+ZmFicmljLT5iYl9jcmVkaXQpKSB7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGJmYV9vc19udG9ocyhwbG9naS0+Y3NwLmJiY3JlZCkpOworCQliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+ZmFicmljLT5iYl9jcmVkaXQpOworCisJCXBvcnQtPmZhYnJpYy0+YmJfY3JlZGl0ID0gYmZhX29zX250b2hzKHBsb2dpLT5jc3AuYmJjcmVkKTsKKwkJYmZhX3Bwb3J0X3NldF90eF9iYmNyZWRpdChwb3J0LT5mY3MtPmJmYSwKKwkJCQkJICBwb3J0LT5mYWJyaWMtPmJiX2NyZWRpdCk7CisJfQorCit9CisKKy8qKgorICogICBDYWxsZWQgdG8gaGFuZGxlIExPR08gcmVjZWl2ZWQgZnJvbSBhbiBleGlzdGluZyByZW1vdGUgcG9ydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfcHJvY2Vzc19sb2dvKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzKQoreworCXJwb3J0LT5yZXBseV9veGlkID0gZmNocy0+b3hfaWQ7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cmVwbHlfb3hpZCk7CisKKwlycG9ydC0+c3RhdHMubG9nb19yY3ZkKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfTE9HT19SQ1ZEKTsKK30KKworCisKKy8qKgorICogIGZjc19ycG9ydF9wdWJsaWMgRkNTIHJwb3J0IHB1YmxpYyBpbnRlcmZhY2VzCisgKi8KKworLyoqCisgKiAJQ2FsbGVkIGJ5IGJwb3J0L3Zwb3J0IHRvIGNyZWF0ZSBhIHJlbW90ZSBwb3J0IGluc3RhbmNlIGZvciBhIGRpc2NvdmVyZWQKKyAqIAlyZW1vdGUgZGV2aWNlLgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydAktIGJhc2UgcG9ydCBvciB2cG9ydAorICogQHBhcmFtW2luXSBycGlkCS0gcmVtb3RlIHBvcnQgSUQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHUzMiBycGlkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJwaWQpOworCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9hbGxvYyhwb3J0LCBXV05fTlVMTCwgcnBpZCk7CisJaWYgKCFycG9ydCkKKwkJcmV0dXJuIE5VTEw7CisKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9TRU5EKTsKKwlyZXR1cm4gcnBvcnQ7Cit9CisKKy8qKgorICogQ2FsbGVkIHRvIGNyZWF0ZSBhIHJwb3J0IGZvciB3aGljaCBvbmx5IHRoZSB3d24gaXMga25vd24uCisgKgorICogQHBhcmFtW2luXSBwb3J0CS0gYmFzZSBwb3J0CisgKiBAcGFyYW1baW5dIHJwd3duCS0gcmVtb3RlIHBvcnQgd3duCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKgorYmZhX2Zjc19ycG9ydF9jcmVhdGVfYnlfd3duKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnB3d24pOworCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9hbGxvYyhwb3J0LCBycHd3biwgMCk7CisJaWYgKCFycG9ydCkKKwkJcmV0dXJuIE5VTEw7CisKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9BRERSRVNTX0RJU0MpOworCXJldHVybiBycG9ydDsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgYnBvcnQgaW4gcHJpdmF0ZSBsb29wIHRvcG9sb2d5IHRvIGluZGljYXRlIHRoYXQgYQorICogcnBvcnQgaGFzIGJlZW4gZGlzY292ZXJlZCBhbmQgcGxvZ2kgaGFzIGJlZW4gY29tcGxldGVkLgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydAktIGJhc2UgcG9ydCBvciB2cG9ydAorICogQHBhcmFtW2luXSBycGlkCS0gcmVtb3RlIHBvcnQgSUQKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9zdGFydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQlzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9hbGxvYyhwb3J0LCBXV05fTlVMTCwgZmNocy0+c19pZCk7CisJaWYgKCFycG9ydCkKKwkJcmV0dXJuOworCisJYmZhX2Zjc19ycG9ydF91cGRhdGUocnBvcnQsIHBsb2dpKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1BMT0dJX0NPTVApOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IGJwb3J0L3Zwb3J0IHRvIGhhbmRsZSBQTE9HSSByZWNlaXZlZCBmcm9tIGEgbmV3IHJlbW90ZSBwb3J0LgorICogICBJZiBhbiBleGlzdGluZyBycG9ydCBkb2VzIGEgcGxvZ2ksIGl0IHdpbGwgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3Bsb2dpX2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQkgICBzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9hbGxvYyhwb3J0LCBwbG9naS0+cG9ydF9uYW1lLCBmY2hzLT5zX2lkKTsKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm47CisKKwliZmFfZmNzX3Jwb3J0X3VwZGF0ZShycG9ydCwgcGxvZ2kpOworCisJcnBvcnQtPnJlcGx5X294aWQgPSBmY2hzLT5veF9pZDsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5yZXBseV9veGlkKTsKKworCXJwb3J0LT5zdGF0cy5wbG9naV9yY3ZkKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfUExPR0lfUkNWRCk7Cit9CisKK3N0YXRpYyBpbnQKK3d3bl9jb21wYXJlKHd3bl90IHd3bjEsIHd3bl90IHd3bjIpCit7CisJdTggICAgICAgICpiMSA9ICh1OCAqKSAmd3duMTsKKwl1OCAgICAgICAgKmIyID0gKHU4ICopICZ3d24yOworCWludCAgICAgICAgICAgICBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZih3d25fdCk7IGkrKykgeworCQlpZiAoYjFbaV0gPCBiMltpXSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKGIxW2ldID4gYjJbaV0pCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gaGFuZGxlIFBMT0dJIHJlY2VpdmVkIGZyb20gYW4gZXhpc3RpbmcKKyAqIAkgcmVtb3RlIHBvcnQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCSAgICBzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSkKK3sKKwkvKioKKwkgKiBAdG9kbyBIYW5kbGUgUDJQIGFuZCBpbml0aWF0b3ItaW5pdGlhdG9yLgorCSAqLworCisJYmZhX2Zjc19ycG9ydF91cGRhdGUocnBvcnQsIHBsb2dpKTsKKworCXJwb3J0LT5yZXBseV9veGlkID0gcnhfZmNocy0+b3hfaWQ7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cmVwbHlfb3hpZCk7CisKKwkvKioKKwkgKiBJbiBTd2l0Y2hlZCBmYWJyaWMgdG9wb2xvZ3ksCisJICogUExPR0kgdG8gZWFjaCBvdGhlci4gSWYgb3VyIHB3d24gaXMgc21hbGxlciwgaWdub3JlIGl0LAorCSAqIGlmIGl0IGlzIG5vdCBhIHdlbGwga25vd24gYWRkcmVzcy4KKwkgKiBJZiB0aGUgbGluayB0b3BvbG9neSBpcyBOMk4sCisJICogdGhpcyBQbG9naSBzaG91bGQgYmUgYWNjZXB0ZWQuCisJICovCisJaWYgKCh3d25fY29tcGFyZShycG9ydC0+cG9ydC0+cG9ydF9jZmcucHd3biwgcnBvcnQtPnB3d24pID09IC0xKQorCSAgICAmJiAoYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQocnBvcnQtPnBvcnQtPmZhYnJpYykpCisJICAgICYmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKSkgeworCQliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCQlyZXR1cm47CisJfQorCisJcnBvcnQtPnN0YXRzLnBsb2dpX3JjdmQrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gZGVsZXRlIGEgcmVtb3RlIHBvcnQgaW5zdGFuY2UuCisgKgorKiBScG9ydCBkZWxldGUgaXMgY2FsbGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAkJLSB2cG9ydCBpcyBkZWxldGVkCisgKiAJCS0gdmYgaXMgZGVsZXRlZAorICogCQktIGV4cGxpY2l0IHJlcXVlc3QgZnJvbSBPUyB0byBkZWxldGUgcnBvcnQgKHZtd2FyZSkKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfREVMRVRFKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gIHdoZW4gYSB0YXJnZXQgZ29lcyBvZmZsaW5lLgorICoKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0xPR09fSU1QKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgYnBvcnQgaW4gbjJuIHdoZW4gYSB0YXJnZXQgKGF0dGFjaGVkIHBvcnQpIGJlY29tZXMgb25saW5lLgorICoKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfUExPR0lfU0VORCk7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gbm90aWZ5IFNDTiBmb3IgdGhlIHJlbW90ZSBwb3J0CisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfc2NuKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCisJcnBvcnQtPnN0YXRzLnJzY25zKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfU0NOKTsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSAgZmNwaW0gdG8gbm90aWZ5IHRoYXQgdGhlIElUTiBjbGVhbnVwIGlzIGRvbmUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FKTsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBmY3B0bSB0byBub3RpZnkgdGhhdCB0aGUgSVROIGNsZWFudXAgaXMgZG9uZS4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF90aW5fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FKTsKK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIEJGQSBjYWxsYmFjayBmb3IgYmZhX3Jwb3J0X29ubGluZSgpIGNhbGwuCisgKgorICogCXBhcmFtW2luXSAJY2JfYXJnCS0gIHJwb3J0IHN0cnVjdC4KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisqIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3ZvaWQKK2JmYV9jYl9ycG9ydF9vbmxpbmUodm9pZCAqY2JhcmcpCit7CisKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9IQ0JfT05MSU5FKTsKK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIEJGQSBjYWxsYmFjayBmb3IgYmZhX3Jwb3J0X29mZmxpbmUoKSBjYWxsLgorICoKKyAqIAlwYXJhbVtpbl0gCXJwb3J0IAktCisgKgorICogCXJldHVybgorICogCQl2b2lkCisgKgorICogCVNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogCW5vdGUKKyAqLwordm9pZAorYmZhX2NiX3Jwb3J0X29mZmxpbmUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWNiYXJnOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfSENCX09GRkxJTkUpOworfQorCisvKioKKyAqIFRoaXMgcm91dGluZSBpcyBhIHN0YXRpYyBCRkEgY2FsbGJhY2sgd2hlbiB0aGVyZSBpcyBhIFFvUyBmbG93X2lkCisgKiBjaGFuZ2Ugbm90aWZpY2F0aW9uCisgKgorICogQHBhcmFtW2luXSAJcnBvcnQgCS0KKyAqCisgKiBAcmV0dXJuICAJdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogQG5vdGUKKyAqLwordm9pZAorYmZhX2NiX3Jwb3J0X3Fvc19zY25fZmxvd2lkKHZvaWQgKmNiYXJnLAorCQkJICAgIHN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBvbGRfcW9zX2F0dHIsCisJCQkgICAgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9ycG9ydF9hZW5fZGF0YV9zIGFlbl9kYXRhOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYWVuX2RhdGEucHJpdi5xb3MgPSBuZXdfcW9zX2F0dHI7CisJYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChycG9ydCwgQkZBX1JQT1JUX0FFTl9RT1NfRkxPV0lELCAmYWVuX2RhdGEpOworfQorCisvKioKKyAqIFRoaXMgcm91dGluZSBpcyBhIHN0YXRpYyBCRkEgY2FsbGJhY2sgd2hlbiB0aGVyZSBpcyBhIFFvUyBwcmlvcml0eQorICogY2hhbmdlIG5vdGlmaWNhdGlvbgorICoKKyAqIEBwYXJhbVtpbl0gCXJwb3J0IAktCisgKgorICogQHJldHVybiAJdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogQG5vdGUKKyAqLwordm9pZAorYmZhX2NiX3Jwb3J0X3Fvc19zY25fcHJpbyh2b2lkICpjYmFyZywgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG9sZF9xb3NfYXR0ciwKKwkJCSAgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9ycG9ydF9hZW5fZGF0YV9zIGFlbl9kYXRhOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYWVuX2RhdGEucHJpdi5xb3MgPSBuZXdfcW9zX2F0dHI7CisJYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChycG9ydCwgQkZBX1JQT1JUX0FFTl9RT1NfUFJJTywgJmFlbl9kYXRhKTsKK30KKworLyoqCisgKiAJCUNhbGxlZCB0byBwcm9jZXNzIGFueSB1bnNvbGljdGVkIGZyYW1lcyBmcm9tIHRoaXMgcmVtb3RlIHBvcnQKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9MT0dPX0lNUCk7Cit9CisKKy8qKgorICogCQlDYWxsZWQgdG8gcHJvY2VzcyBhbnkgdW5zb2xpY3RlZCBmcmFtZXMgZnJvbSB0aGlzIHJlbW90ZSBwb3J0CisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBmY2hzLT5zX2lkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGZjaHMtPmRfaWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+dHlwZSk7CisKKwlpZiAoZmNocy0+dHlwZSAhPSBGQ19UWVBFX0VMUykKKwkJcmV0dXJuOworCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKwljYXNlIEZDX0VMU19MT0dPOgorCQliZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfbG9nbyhycG9ydCwgZmNocyk7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfQURJU0M6CisJCWJmYV9mY3NfcnBvcnRfcHJvY2Vzc19hZGlzYyhycG9ydCwgZmNocywgbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19QUkxPOgorCQlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihwb3J0KSkKKwkJCWJmYV9mY3NfZmNwaW1fdWZfcmVjdihycG9ydC0+aXRuaW0sIGZjaHMsIGxlbik7CisKKwkJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpCisJCQliZmFfZmNzX2ZjcHRtX3VmX3JlY3YocnBvcnQtPnRpbiwgZmNocywgbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19QUkxJOgorCQliZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfcHJsaShycG9ydCwgZmNocywgbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19SUFNDOgorCQliZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfcnBzYyhycG9ydCwgZmNocywgbGVuKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfZmNzX3Jwb3J0X3NlbmRfbHNfcmp0KHJwb3J0LCBmY2hzLAorCQkJCQkgIEZDX0xTX1JKVF9SU05fQ01EX05PVF9TVVBQLAorCQkJCQkgIEZDX0xTX1JKVF9FWFBfTk9fQURETF9JTkZPKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogU2VuZCBhIExTIHJlamVjdAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX2xzX3JqdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCSAgdTggcmVhc29uX2NvZGUsIHU4IHJlYXNvbl9jb2RlX2V4cGwpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhycG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCWxlbiA9IGZjX2xzX3JqdF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCSAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkgICAgICByZWFzb25fY29kZSwgcmVhc29uX2NvZGVfZXhwbCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLCBGQ19NQVhfUERVU1osIDApOworfQorCisvKioKKyAqICAgTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7Cit9CisKKy8qKgorICogICBNb2R1bGUgY2xlYW51cAorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV9mY3NfbW9kZXhpdF9jb21wKGZjcyk7Cit9CisKKy8qKgorICogUmV0dXJuIHN0YXRlIG9mIHJwb3J0LgorICovCitpbnQKK2JmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXJldHVybiBiZmFfc21fdG9fc3RhdGUocnBvcnRfc21fdGFibGUsIHJwb3J0LT5zbSk7Cit9CisKKy8qKgorICogCQkgQ2FsbGVkIGJ5IHRoZSBEcml2ZXIgdG8gc2V0IHJwb3J0IGRlbGV0ZS9hZ2VvdXQgdGltZW91dAorICoKKyAqIAlwYXJhbVtpbl0JCXJwb3J0IHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9zZXRfZGVsX3RpbWVvdXQodTggcnBvcnRfdG1vKQoreworCS8qCisJICogY29udmVydCB0byBNaWxsaXNlY3MKKwkgKi8KKwlpZiAocnBvcnRfdG1vID4gMCkKKwkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCA9IHJwb3J0X3RtbyAqIDEwMDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2FwaS5jIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGFlMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9hcGkuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIFJQT1JUX0FQSSk7CisKKy8qKgorICogIHJwb3J0X2FwaS5jIFJlbW90ZSBwb3J0IGltcGxlbWVudGF0aW9uLgorICovCisKKy8qKgorICogIGZjc19ycG9ydF9hcGkgRkNTIHJwb3J0IEFQSS4KKyAqLworCisvKioKKyAqIAlEaXJlY3QgQVBJIHRvIGFkZCBhIHRhcmdldCBieSBwb3J0IHd3bi4gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCwgZm9yCisgKglleGFtcGxlLCBieSBiaW9zIHdoZW4gdGFyZ2V0IHB3d24gaXMga25vd24gZnJvbSBib290IGx1biBjb25maWd1cmF0aW9uLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcnBvcnRfYWRkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgKnB3d24sCisJCQlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFkX3Jwb3J0X3MgKnJwb3J0X2RydikKK3sKKwliZmFfdHJjKHBvcnQtPmZjcywgKnB3d24pOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICoJRGlyZWN0IEFQSSB0byByZW1vdmUgYSB0YXJnZXQgYW5kIGl0cyBhc3NvY2lhdGVkIHJlc291cmNlcy4gVGhpcworICoJaW50ZXJmYWNlIGlzIHVzZWQsIGZvciBleGFtcGxlLCBieSB2bXdhcmUgZHJpdmVyIHRvIHJlbW92ZSB0YXJnZXQKKyAqCXBvcnRzIGZyb20gdGhlIHRhcmdldCBsaXN0IGZvciBhIFZNLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcnBvcnRfcmVtb3ZlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0X2luKQoreworCisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0X2luLT5mY3MsIHJwb3J0X2luLT5wd3duKTsKKworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9wd3duKHJwb3J0X2luLT5wb3J0LCBycG9ydF9pbi0+cHd3bik7CisJaWYgKHJwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogVEJEIEVycm9yIGhhbmRsaW5nCisJCSAqLworCQliZmFfdHJjKHJwb3J0X2luLT5mY3MsIHJwb3J0X2luLT5waWQpOworCQlyZXR1cm4gQkZBX1NUQVRVU19VTktOT1dOX1JXV047CisJfQorCisJLyoKKwkgKiBUQkQgaWYgdGhpcyByZW1vdGUgcG9ydCBpcyBvbmxpbmUsIHNlbmQgYSBsb2dvCisJICovCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CisKK30KKworLyoqCisgKglSZW1vdGUgZGV2aWNlIHN0YXR1cyBmb3IgZGlzcGxheS9kZWJ1Zy4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfYXR0cl9zICpycG9ydF9hdHRyKQoreworCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBxb3NfYXR0cjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKworCWJmYV9vc19tZW1zZXQocnBvcnRfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfYXR0cl9zKSk7CisKKwlycG9ydF9hdHRyLT5waWQgPSBycG9ydC0+cGlkOworCXJwb3J0X2F0dHItPnB3d24gPSBycG9ydC0+cHd3bjsKKwlycG9ydF9hdHRyLT5ud3duID0gcnBvcnQtPm53d247CisJcnBvcnRfYXR0ci0+Y29zX3N1cHBvcnRlZCA9IHJwb3J0LT5mY19jb3M7CisJcnBvcnRfYXR0ci0+ZGZfc3ogPSBycG9ydC0+bWF4ZnJzaXplOworCXJwb3J0X2F0dHItPnN0YXRlID0gYmZhX2Zjc19ycG9ydF9nZXRfc3RhdGUocnBvcnQpOworCXJwb3J0X2F0dHItPmZjX2NvcyA9IHJwb3J0LT5mY19jb3M7CisJcnBvcnRfYXR0ci0+Y2lzYyA9IHJwb3J0LT5jaXNjOworCXJwb3J0X2F0dHItPnNjc2lfZnVuY3Rpb24gPSBycG9ydC0+c2NzaV9mdW5jdGlvbjsKKwlycG9ydF9hdHRyLT5jdXJyX3NwZWVkICA9IHJwb3J0LT5ycGYucnBzY19zcGVlZDsKKwlycG9ydF9hdHRyLT5hc3NpZ25lZF9zcGVlZCAgPSBycG9ydC0+cnBmLmFzc2lnbmVkX3NwZWVkOworCisJYmZhX3Jwb3J0X2dldF9xb3NfYXR0cihycG9ydC0+YmZhX3Jwb3J0LCAmcW9zX2F0dHIpOworCXJwb3J0X2F0dHItPnFvc19hdHRyID0gcW9zX2F0dHI7CisKKwlycG9ydF9hdHRyLT50cmxfZW5mb3JjZWQgPSBCRkFfRkFMU0U7CisJaWYgKGJmYV9wcG9ydF9pc19yYXRlbGltKHBvcnQtPmZjcy0+YmZhKSkgeworCQlpZiAoKHJwb3J0LT5ycGYucnBzY19zcGVlZCA9PSBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTikgfHwKKwkJCShycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPAorCQkJYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9tYXhfc3BlZWQocG9ydCkpKQorCQkJcnBvcnRfYXR0ci0+dHJsX2VuZm9yY2VkID0gQkZBX1RSVUU7CisJfQorCisJLyoKKwkgKiBUT0RPCisJICogcnBvcnQtPnN5bW5hbWUKKwkgKi8KK30KKworLyoqCisgKiAJUGVyIHJlbW90ZSBkZXZpY2Ugc3RhdGlzdGljcy4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3N0YXRzX3MgKnN0YXRzKQoreworCSpzdGF0cyA9IHJwb3J0LT5zdGF0czsKK30KKwordm9pZAorYmZhX2Zjc19ycG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfb3NfbWVtc2V0KChjaGFyICopJnJwb3J0LT5zdGF0cywgMCwKKwkJCXNpemVvZihzdHJ1Y3QgYmZhX3Jwb3J0X3N0YXRzX3MpKTsKK30KKworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3B3d24ocG9ydCwgcnB3d24pOworCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRCRCBFcnJvciBoYW5kbGluZworCQkgKi8KKwl9CisKKwlyZXR1cm4gcnBvcnQ7Cit9CisKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKgorYmZhX2Zjc19ycG9ydF9sb29rdXBfYnlfbnd3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJud3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X253d24ocG9ydCwgcm53d24pOworCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRCRCBFcnJvciBoYW5kbGluZworCQkgKi8KKwl9CisKKwlyZXR1cm4gcnBvcnQ7Cit9CisKKy8qCisgKiBUaGlzIEFQSSBpcyB0byBzZXQgdGhlIFJwb3J0J3Mgc3BlZWQuIFNob3VsZCBiZSB1c2VkIHdoZW4gUlBTQyBpcyBub3QKKyAqIHN1cHBvcnRlZCBieSB0aGUgcnBvcnQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfc2V0X3NwZWVkKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpCit7CisJcnBvcnQtPnJwZi5hc3NpZ25lZF9zcGVlZCAgPSBzcGVlZDsKKworCS8qIFNldCB0aGlzIHNwZWVkIGluIGYvdyBvbmx5IGlmIHRoZSBSUFNDIHNwZWVkIGlzIG5vdCBhdmFpbGFibGUgKi8KKwlpZiAocnBvcnQtPnJwZi5ycHNjX3NwZWVkID09IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKQorCQliZmFfcnBvcnRfc3BlZWQocnBvcnQtPmJmYV9ycG9ydCwgc3BlZWQpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfZnRycy5jIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9mdHJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExZjU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfZnRycy5jCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIHJwb3J0X2Z0cnMuYyBSZW1vdGUgcG9ydCBmZWF0dXJlcyAoUlBGKSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjYnVpbGQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZjeHAuaCIKKyNpbmNsdWRlICJmY3MuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgUlBPUlRfRlRSUyk7CisKKyNkZWZpbmUgQkZBX0ZDU19SUEZfUkVUUklFUwkoMykKKyNkZWZpbmUgQkZBX0ZDU19SUEZfUkVUUllfVElNRU9VVCAgKDEwMDApIC8qIDEgc2VjIChJbiBtaWxsaXNlY3MpICovCisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycGZfcnBzYzJfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJdTMyIHJlc2lkX2xlbiwKKwkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl90aW1lb3V0KHZvaWQgKmFyZyk7CisKKy8qKgorICogIGZjc19ycG9ydF9mdHJzX3NtIEZDUyBycG9ydCBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCisKK2VudW0gcnBmX2V2ZW50IHsKKwlSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FICA9IDEsICAgICAvKiAgUnBvcnQgb2ZmbGluZSAgICAgICAgICAgICovCisJUlBGU01fRVZFTlRfUlBPUlRfT05MSU5FICAgPSAyLCAgICAgLyogIFJwb3J0IG9ubGluZSAgICAgICAgICAgICovCisJUlBGU01fRVZFTlRfRkNYUF9TRU5UICAgICAgPSAzLCAgICAvKiAgRnJhbWUgZnJvbSBoYXMgYmVlbiBzZW50ICovCisJUlBGU01fRVZFTlRfVElNRU9VVCAgCSAgID0gNCwgICAgLyogIFJwb3J0IFNNIHRpbWVvdXQgZXZlbnQgICAqLworCVJQRlNNX0VWRU5UX1JQU0NfQ09NUCAgICAgID0gNSwKKwlSUEZTTV9FVkVOVF9SUFNDX0ZBSUwgICAgICA9IDYsCisJUlBGU01fRVZFTlRfUlBTQ19FUlJPUiAgICAgPSA3LAorfTsKKworc3RhdGljIHZvaWQJYmZhX2Zjc19ycGZfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCWVudW0gcnBmX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9zbV9ycHNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwKKwkJCQkJICAgICAgIGVudW0gcnBmX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9zbV9ycHNjKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCSAgICAgICBlbnVtIHJwZl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAJYmZhX2Zjc19ycGZfc21fcnBzY19yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLAorCQkJCQkJCWVudW0gcnBmX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCQkJZW51bSBycGZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLAorCQkJCQkJCWVudW0gcnBmX2V2ZW50IGV2ZW50KTsKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLCBlbnVtIHJwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT05MSU5FIDoKKwkJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9ycHNjX3NlbmRpbmcpOworCQkJcnBmLT5ycHNjX3JldHJpZXMgPSAwOworCQkJYmZhX2Zjc19ycGZfc2VuZF9ycHNjMihycGYsIE5VTEwpOworCQkJYnJlYWs7CisJCX07CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfc21fcnBzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsIGVudW0gcnBmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBGU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fcnBzYyk7CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FIDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwZi0+ZmN4cF93cWUpOworCQlycGYtPnJwc2NfcmV0cmllcyA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zbV9ycHNjKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsIGVudW0gcnBmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUEZTTV9FVkVOVF9SUFNDX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vbmxpbmUpOworCQkvKiBVcGRhdGUgc3BlZWQgaW5mbyBpbiBmL3cgdmlhIEJGQSAqLworCQlpZiAocnBmLT5ycHNjX3NwZWVkICE9IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKSB7CisJCQliZmFfcnBvcnRfc3BlZWQocnBvcnQtPmJmYV9ycG9ydCwgcnBmLT5ycHNjX3NwZWVkKTsKKwkJfSBlbHNlIGlmIChycGYtPmFzc2lnbmVkX3NwZWVkICE9IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKSB7CisJCQliZmFfcnBvcnRfc3BlZWQocnBvcnQtPmJmYV9ycG9ydCwgcnBmLT5hc3NpZ25lZF9zcGVlZCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQU0NfRkFJTDoKKwkJLyogUlBTQyBub3Qgc3VwcG9ydGVkIGJ5IHJwb3J0ICovCisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBTQ19FUlJPUjoKKwkJLyogbmVlZCB0byByZXRyeS4uLmRlbGF5ZWQgYSBiaXQuICovCisJCWlmIChycGYtPnJwc2NfcmV0cmllcysrIDwgQkZBX0ZDU19SUEZfUkVUUklFUykgeworCQkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwZi0+dGltZXIsCisJCQkJICAgIGJmYV9mY3NfcnBmX3RpbWVvdXQsIHJwZiwKKwkJCQkgICAgQkZBX0ZDU19SUEZfUkVUUllfVElNRU9VVCk7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fcnBzY19yZXRyeSk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb25saW5lKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycGYtPmZjeHApOworCQlycGYtPnJwc2NfcmV0cmllcyA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zbV9ycHNjX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsIGVudW0gcnBmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUEZTTV9FVkVOVF9USU1FT1VUIDoKKwkJLyogcmUtc2VuZCB0aGUgUlBTQyAqLworCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fcnBzY19zZW5kaW5nKTsKKwkJYmZhX2Zjc19ycGZfc2VuZF9ycHNjMihycGYsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSA6CisJCWJmYV90aW1lcl9zdG9wKCZycGYtPnRpbWVyKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29mZmxpbmUpOworCQlycGYtPnJwc2NfcmV0cmllcyA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgOgorCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb2ZmbGluZSk7CisJCXJwZi0+cnBzY19yZXRyaWVzID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09OTElORSA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9ycHNjX3NlbmRpbmcpOworCQliZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHJwZiwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FIDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKy8qKgorICogQ2FsbGVkIHdoZW4gUnBvcnQgaXMgY3JlYXRlZC4KKyAqLwordm9pZCAgYmZhX2Zjc19ycGZfaW5pdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmID0gJnJwb3J0LT5ycGY7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCXJwZi0+cnBvcnQgPSBycG9ydDsKKworCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV91bmluaXQpOworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIFJwb3J0IGJlY29tZXMgb25saW5lCisgKi8KK3ZvaWQgIGJmYV9mY3NfcnBmX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJaWYgKF9fZmNzX21pbl9jZmcocnBvcnQtPnBvcnQtPmZjcykpCisJCXJldHVybjsKKworCWlmIChiZmFfZmNzX2ZhYnJpY19pc19zd2l0Y2hlZChycG9ydC0+cG9ydC0+ZmFicmljKSkKKwkJYmZhX3NtX3NlbmRfZXZlbnQoJnJwb3J0LT5ycGYsIFJQRlNNX0VWRU5UX1JQT1JUX09OTElORSk7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gUnBvcnQgYmVjb21lcyBvZmZsaW5lCisgKi8KK3ZvaWQgIGJmYV9mY3NfcnBmX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCWlmIChfX2Zjc19taW5fY2ZnKHJwb3J0LT5wb3J0LT5mY3MpKQorCQlyZXR1cm47CisKKwliZmFfc21fc2VuZF9ldmVudCgmcnBvcnQtPnJwZiwgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl90aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmID0gKHN0cnVjdCBiZmFfZmNzX3JwZl9zICopIGFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfVElNRU9VVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHZvaWQgKnJwZl9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmIAk9IChzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqKXJwZl9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJnJwZi0+ZmN4cF93cWUsCisJCQkJCWJmYV9mY3NfcnBmX3NlbmRfcnBzYzIsIHJwZik7CisJCXJldHVybjsKKwl9CisJcnBmLT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX3Jwc2MyX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgJnJwb3J0LT5waWQsIDEpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCSAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycGZfcnBzYzJfcmVzcG9uc2UsCisJCQkgIHJwZiwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCXJwb3J0LT5zdGF0cy5ycHNjX3NlbnQrKzsKKwliZmFfc21fc2VuZF9ldmVudChycGYsIFJQRlNNX0VWRU5UX0ZDWFBfU0VOVCk7CisKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3Jwc2MyX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCSAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmID0gKHN0cnVjdCBiZmFfZmNzX3JwZl9zICopIGNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MgICAgKmxzX3JqdDsKKwlzdHJ1Y3QgZmNfcnBzYzJfYWNjX3MgICpycHNjMl9hY2M7CisJdTE2ICAgICAgICBudW1fZW50czsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisKKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWlmIChyZXFfc3RhdHVzID09IEJGQV9TVEFUVVNfRVRJTUVSKQorCQkJcnBvcnQtPnN0YXRzLnJwc2NfZmFpbGVkKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfUlBTQ19FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwlycHNjMl9hY2MgPSAoc3RydWN0IGZjX3Jwc2MyX2FjY19zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJaWYgKHJwc2MyX2FjYy0+ZWxzX2NtZCA9PSBGQ19FTFNfQUNDKSB7CisJCXJwb3J0LT5zdGF0cy5ycHNjX2FjY3MrKzsKKwkJbnVtX2VudHMgPSBiZmFfb3NfbnRvaHMocnBzYzJfYWNjLT5udW1fcGlkcyk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgbnVtX2VudHMpOworCQlpZiAobnVtX2VudHMgPiAwKSB7CisJCQliZmFfYXNzZXJ0KHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLnBpZCAhPSBycG9ydC0+cGlkKTsKKwkJCWJmYV90cmMocnBvcnQtPmZjcywKKwkJCQliZmFfb3NfbnRvaHMocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0ucGlkKSk7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsCisJCQkJYmZhX29zX250b2hzKHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLnNwZWVkKSk7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsCisJCQkJYmZhX29zX250b2hzKHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLmluZGV4KSk7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsCisJCQkJcnBzYzJfYWNjLT5wb3J0X2luZm9bMF0udHlwZSk7CisKKwkJCWlmIChycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5zcGVlZCA9PSAwKSB7CisJCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9SUFNDX0VSUk9SKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCXJwZi0+cnBzY19zcGVlZCA9IGZjX3Jwc2Nfb3BlcnNwZWVkX3RvX2JmYV9zcGVlZCgKKwkJCQliZmFfb3NfbnRvaHMocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0uc3BlZWQpKTsKKworCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9SUFNDX0NPTVApOworCQl9CisJfSBlbHNlIHsKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHJwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCk7CisJCXJwb3J0LT5zdGF0cy5ycHNjX3JlamVjdHMrKzsKKwkJaWYgKGxzX3JqdC0+cmVhc29uX2NvZGUgPT0gRkNfTFNfUkpUX1JTTl9DTURfTk9UX1NVUFApIHsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfUlBTQ19GQUlMKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfUlBTQ19FUlJPUik7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3Njbi5jIGIvZHJpdmVycy9zY3NpL2JmYS9zY24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQ3NzFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9zY24uYwpAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19tcy5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgImxwb3J0X3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgU0NOKTsKKworI2RlZmluZSBGQ19RT1NfUlNDTl9FVkVOVAkJMHgwYworI2RlZmluZSBGQ19GQUJSSUNfTkFNRV9SU0NOX0VWRU5UCTB4MGQKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NlbmRfc2NyKHZvaWQgKnNjbl9jYmFyZywKKwkJCQkJICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3Njcl9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zZW5kX2xzX2FjYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnhfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl90aW1lb3V0KHZvaWQgKmFyZyk7CisKKy8qKgorICogIGZjc19zY21fc20gRkNTIFNDTiBzdGF0ZSBtYWNoaW5lCisgKi8KKworLyoqCisgKiBWUG9ydCBTQ04gU3RhdGUgTWFjaGluZSBldmVudHMKKyAqLworZW51bSBwb3J0X3Njbl9ldmVudCB7CisJU0NOU01fRVZFTlRfUE9SVF9PTkxJTkUgPSAxLAorCVNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORSA9IDIsCisJU0NOU01fRVZFTlRfUlNQX09LID0gMywKKwlTQ05TTV9FVkVOVF9SU1BfRVJST1IgPSA0LAorCVNDTlNNX0VWRU5UX1RJTUVPVVQgPSA1LAorCVNDTlNNX0VWRU5UX1NDUl9TRU5UID0gNiwKK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJCQkgICAgZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zbV9zZW5kaW5nX3NjcihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkJCQllbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NtX3NjcihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkJCWVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc21fc2NyX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCQkJICAgICAgZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJCQkgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiAJCVN0YXJ0aW5nIHN0YXRlIC0gYXdhaXRpbmcgbGluayB1cC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkgICAgZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTQ05TTV9FVkVOVF9QT1JUX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fc2VuZGluZ19zY3IpOworCQliZmFfZmNzX3BvcnRfc2NuX3NlbmRfc2NyKHNjbiwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NtX3NlbmRpbmdfc2NyKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCQllbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNDTlNNX0VWRU5UX1NDUl9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9zY3IpOworCQlicmVhazsKKworCWNhc2UgU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChzY24tPnBvcnQtPmZjcy0+YmZhLCAmc2NuLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NtX3NjcihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQllbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHNjbi0+cG9ydDsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNDTlNNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fb25saW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDTlNNX0VWRU5UX1JTUF9FUlJPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fc2NyX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHBvcnQtPmZjcy0+YmZhLCAmc2NuLT50aW1lciwKKwkJCQliZmFfZmNzX3BvcnRfc2NuX3RpbWVvdXQsIHNjbiwKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChzY24tPmZjeHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zbV9zY3JfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJICAgICAgZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTQ05TTV9FVkVOVF9USU1FT1VUOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9zZW5kaW5nX3Njcik7CisJCWJmYV9mY3NfcG9ydF9zY25fc2VuZF9zY3Ioc2NuLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZzY24tPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCSAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGZjc19zY25fcHJpdmF0ZSBGQ1MgU0NOIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgdG8gc2VuZCBhIFNDUiBjb21tYW5kLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zZW5kX3Njcih2b2lkICpzY25fY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuID0gc2NuX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHNjbi0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJnNjbi0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9zY25fc2VuZF9zY3IsIHNjbik7CisJCXJldHVybjsKKwl9CisJc2NuLT5mY3hwID0gZmN4cDsKKworCS8qCisJICogSGFuZGxlIFZVIHJlZ2lzdHJhdGlvbnMgZm9yIEJhc2UgcG9ydCBvbmx5CisJICovCisJaWYgKCghcG9ydC0+dnBvcnQpICYmIGJmYV9pb2NfZ2V0X2ZjbW9kZSgmcG9ydC0+ZmNzLT5iZmEtPmlvYykpIHsKKwkJbGVuID0gZmNfc2NyX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJCSAgIGJmYV9scHNfaXNfYnJjZF9mYWJyaWMocG9ydC0+ZmFicmljLT5scHMpLAorCQkJCSAgIHBvcnQtPnBpZCwgMCk7CisJfSBlbHNlIHsKKwkJbGVuID0gZmNfc2NyX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBCRkFfRkFMU0UsCisJCQkJICAgcG9ydC0+cGlkLCAwKTsKKwl9CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfc2NuX3Njcl9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilzY24sIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfU0NSX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zY3JfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCSAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgIHUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBzY24tPnBvcnQ7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCisJY2FzZSBGQ19FTFNfQUNDOgorCQliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfTFNfUkpUOgorCisJCWxzX3JqdCA9IChzdHJ1Y3QgZmNfbHNfcmp0X3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlX2V4cGwpOworCisJCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1JTUF9FUlJPUik7CisJfQorfQorCisvKgorICogU2VuZCBhIExTIEFjY2VwdAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zZW5kX2xzX2FjYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCWxlbiA9IGZjX2xzX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCSAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBiZmFfcnBvcnQsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywKKwkJICAgICAgQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLAorCQkgICAgICBGQ19NQVhfUERVU1osIDApOworfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgYmZhX3RpbWVyIG9uIHRpbWVyIHRpbWVvdXRzLgorICoKKyAqIAlwYXJhbVtpbl0gCXZwb3J0IAkJCS0gcG9pbnRlciB0byBiZmFfZmNzX3BvcnRfdC4KKyAqIAlwYXJhbVtvdXRdCXZwb3J0X3N0YXR1cyAJLSBwb2ludGVyIHRvIHJldHVybiB2cG9ydCBzdGF0dXMgaW4KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisqICAJU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiAJbm90ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl90aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqKWFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfVElNRU9VVCk7Cit9CisKKworCisvKioKKyAqICBmY3Nfc2NuX3B1YmxpYyBGQ1Mgc3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBwdWJsaWMgaW50ZXJmYWNlcworICovCisKKy8qCisgKiBGdW5jdGlvbnMgY2FsbGVkIGJ5IHBvcnQvZmFiCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9zY25faW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuID0gQkZBX0ZDU19HRVRfU0NOX0ZST01fUE9SVChwb3J0KTsKKworCXNjbi0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NldF9zdGF0ZShzY24sIGJmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9zY25fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuID0gQkZBX0ZDU19HRVRfU0NOX0ZST01fUE9SVChwb3J0KTsKKworCXNjbi0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfc2NuX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuID0gQkZBX0ZDU19HRVRfU0NOX0ZST01fUE9SVChwb3J0KTsKKworCXNjbi0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9QT1JUX09OTElORSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3BvcnRpZF9yc2NuKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTMyIHJwaWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnBpZCk7CisKKwkvKioKKwkgKiBJZiB0aGlzIGlzIGFuIHVua25vd24gZGV2aWNlLCB0aGVuIGl0IGp1c3QgY2FtZSBvbmxpbmUuCisJICogT3RoZXJ3aXNlIGxldCBycG9ydCBoYW5kbGUgdGhlIFJTQ04gZXZlbnQuCisJICovCisJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3BpZChwb3J0LCBycGlkKTsKKwlpZiAocnBvcnQgPT0gTlVMTCkgeworCQkvKgorCQkgKiBJZiBtaW4gY2ZnIG1vZGUgaXMgZW5hYmxlZCwgd2UgZG9ub3QgbmVlZCB0bworCQkgKiBkaXNjb3ZlciBhbnkgbmV3IHJwb3J0cy4KKwkJICovCisJCWlmICghX19mY3NfbWluX2NmZyhwb3J0LT5mY3MpKQorCQkJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2NyZWF0ZShwb3J0LCBycGlkKTsKKwl9IGVsc2UgeworCQliZmFfZmNzX3Jwb3J0X3NjbihycG9ydCk7CisJfQorfQorCisvKioKKyAqIHJzY24gZm9ybWF0IGJhc2VkIFBJRCBjb21wYXJpc29uCisgKi8KKyNkZWZpbmUgX19mY19waWRfbWF0Y2goX19jMCwgX19jMSwgX19mbXQpCQlcCisJKCgoX19mbXQpID09IEZDX1JTQ05fRk9STUFUX0ZBQlJJQykgfHwJCVwKKwkgKCgoX19mbXQpID09IEZDX1JTQ05fRk9STUFUX0RPTUFJTikgJiYJCVwKKwkgICgoX19jMClbMF0gPT0gKF9fYzEpWzBdKSkgfHwJCQlcCisJICgoKF9fZm10KSA9PSBGQ19SU0NOX0ZPUk1BVF9BUkVBKSAmJgkJXAorCSAgKChfX2MwKVswXSA9PSAoX19jMSlbMF0pICYmCQkJXAorCSAgKChfX2MwKVsxXSA9PSAoX19jMSlbMV0pKSkKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fbXVsdGlwb3J0X3JzY24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBmY19yc2NuX2Zvcm1hdCBmb3JtYXQsIHUzMiByc2NuX3BpZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlX25leHQ7CisJdTggICAgICAgICpjMCwgKmMxOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGZvcm1hdCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJzY25fcGlkKTsKKworCWMwID0gKHU4ICopICZyc2NuX3BpZDsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVfbmV4dCwgJnBvcnQtPnJwb3J0X3EpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQljMSA9ICh1OCAqKSAmcnBvcnQtPnBpZDsKKwkJaWYgKF9fZmNfcGlkX21hdGNoKGMwLCBjMSwgZm9ybWF0KSkKKwkJCWJmYV9mY3NfcnBvcnRfc2NuKHJwb3J0KTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9zY25fcHJvY2Vzc19yc2NuKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCSAgICAgIHUzMiBsZW4pCit7CisJc3RydWN0IGZjX3JzY25fcGxfcyAgICpyc2NuID0gKHN0cnVjdCBmY19yc2NuX3BsX3MgKikgKGZjaHMgKyAxKTsKKwlpbnQgICAgICAgICAgICAgbnVtX2VudHJpZXM7CisJdTMyICAgICAgICByc2NuX3BpZDsKKwliZmFfYm9vbGVhbl90ICAgbnNxdWVyeSA9IEJGQV9GQUxTRTsKKwlpbnQgICAgICAgICAgICAgaSA9IDA7CisKKwludW1fZW50cmllcyA9CisJCShiZmFfb3NfbnRvaHMocnNjbi0+cGF5bGRsZW4pIC0KKwkJIHNpemVvZih1MzIpKSAvIHNpemVvZihyc2NuLT5ldmVudFswXSk7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgbnVtX2VudHJpZXMpOworCisJcG9ydC0+c3RhdHMubnVtX3JzY24rKzsKKworCWJmYV9mY3NfcG9ydF9zY25fc2VuZF9sc19hY2MocG9ydCwgZmNocyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykgeworCQlyc2NuX3BpZCA9IHJzY24tPmV2ZW50W2ldLnBvcnRpZDsKKworCQliZmFfdHJjKHBvcnQtPmZjcywgcnNjbi0+ZXZlbnRbaV0uZm9ybWF0KTsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJzY25fcGlkKTsKKworCQlzd2l0Y2ggKHJzY24tPmV2ZW50W2ldLmZvcm1hdCkgeworCQljYXNlIEZDX1JTQ05fRk9STUFUX1BPUlRJRDoKKwkJCWlmIChyc2NuLT5ldmVudFtpXS5xdWFsaWZpZXIgPT0gRkNfUU9TX1JTQ05fRVZFTlQpIHsKKwkJCQkvKgorCQkJCSAqIElnbm9yZSB0aGlzIGV2ZW50LiBmL3cgd291bGQgaGF2ZSBwcm9jZXNzZWQKKwkJCQkgKiBpdAorCQkJCSAqLworCQkJCWJmYV90cmMocG9ydC0+ZmNzLCByc2NuX3BpZCk7CisJCQl9IGVsc2UgeworCQkJCXBvcnQtPnN0YXRzLm51bV9wb3J0aWRfcnNjbisrOworCQkJCWJmYV9mY3NfcG9ydF9zY25fcG9ydGlkX3JzY24ocG9ydCwgcnNjbl9waWQpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBGQ19SU0NOX0ZPUk1BVF9GQUJSSUM6CisJCQlpZiAocnNjbi0+ZXZlbnRbaV0ucXVhbGlmaWVyID09CisJCQkgICAgRkNfRkFCUklDX05BTUVfUlNDTl9FVkVOVCkgeworCQkJCWJmYV9mY3NfcG9ydF9tc19mYWJyaWNfcnNjbihwb3J0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qCisJCQkgKiAhISEhISEhISEgRmFsbCBUaHJvdWdoICEhISEhISEhISEhISEKKwkJCSAqLworCisJCWNhc2UgRkNfUlNDTl9GT1JNQVRfQVJFQToKKwkJY2FzZSBGQ19SU0NOX0ZPUk1BVF9ET01BSU46CisJCQluc3F1ZXJ5ID0gQkZBX1RSVUU7CisJCQliZmFfZmNzX3BvcnRfc2NuX211bHRpcG9ydF9yc2NuKHBvcnQsCisJCQkJCQkJcnNjbi0+ZXZlbnRbaV0uZm9ybWF0LAorCQkJCQkJCXJzY25fcGlkKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQliZmFfYXNzZXJ0KDApOworCQkJbnNxdWVyeSA9IEJGQV9UUlVFOworCQl9CisJfQorCisJLyoqCisJICogSWYgYW55IG9mIGFyZWEsIGRvbWFpbiBvciBmYWJyaWMgUlNDTiBpcyByZWNlaXZlZCwgZG8gYSBmcmVzaCBkaXNjb3ZlcnkKKwkgKiB0byBmaW5kIG5ldyBkZXZpY2VzLgorCSAqLworCWlmIChuc3F1ZXJ5KQorCQliZmFfZmNzX3BvcnRfbnNfcXVlcnkocG9ydCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS92ZmFwaS5jIGIvZHJpdmVycy9zY3NpL2JmYS92ZmFwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZDgxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL3ZmYXBpLmMKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgdmZhcGkuYyBGYWJyaWMgbW9kdWxlIGltcGxlbWVudGF0aW9uLgorICovCisKKyNpbmNsdWRlICJmY3NfZmFicmljLmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBWRkFQSSk7CisKKy8qKgorICogIGZjc192Zl9hcGkgdmlydHVhbCBmYWJyaWNzIEFQSQorICovCisKKy8qKgorICogCQlFbmFibGUgVkYgbW9kZS4KKyAqCisgKiBAcGFyYW1baW5dCQlmY3MJCWZjcyBtb2R1bGUgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0JCXZmX2lkCQlkZWZhdWx0IHZmX2lkIG9mIHBvcnQsIEZDX1ZGX0lEX05VTEwKKyAqIAkJCQkJdG8gdXNlIHN0YW5kYXJkIGRlZmF1bHQgdmZfaWQgb2YgMS4KKyAqCisgKiBAcmV0dmFsCUJGQV9TVEFUVVNfT0sJCXZmIG1vZGUgaXMgZW5hYmxlZAorICogQHJldHZhbAlCRkFfU1RBVFVTX0JVU1kJCVBvcnQgaXMgYWN0aXZlLiBQb3J0IG11c3QgYmUgZGlzYWJsZWQKKyAqCQkJCQliZWZvcmUgVkYgbW9kZSBjYW4gYmUgZW5hYmxlZC4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3ZmX21vZGVfZW5hYmxlKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkKQoreworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIAkJRGlzYWJsZSBWRiBtb2RlLgorICoKKyAqIEBwYXJhbVtpbl0JCWZjcwkJZmNzIG1vZHVsZSBpbnN0YW5jZQorICoKKyAqIEByZXR2YWwJQkZBX1NUQVRVU19PSwkJdmYgbW9kZSBpcyBkaXNhYmxlZAorICogQHJldHZhbAlCRkFfU1RBVFVTX0JVU1kJCVZGcyBhcmUgcHJlc2VudCBhbmQgYmVpbmcgdXNlZC4gQWxsCisgKiAJCQkJCVZGcyBtdXN0IGJlIGRlbGV0ZWQgYmVmb3JlIGRpc2FibGluZworICoJCQkJCVZGIG1vZGUuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192Zl9tb2RlX2Rpc2FibGUoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIAkJQ3JlYXRlIGEgbmV3IFZGIGluc3RhbmNlLgorICoKKyAqICBBIG5ldyBWRiBpcyBjcmVhdGVkIHVzaW5nIHRoZSBnaXZlbiBWRiBjb25maWd1cmF0aW9uLiBBIFZGIGlzIGlkZW50aWZpZWQKKyAqICBieSBWRiBpZC4gTm8gZHVwbGljYXRlIFZGIGNyZWF0aW9uIGlzIGFsbG93ZWQgd2l0aCB0aGUgc2FtZSBWRiBpZC4gT25jZQorICogIGEgVkYgaXMgY3JlYXRlZCwgVkYgaXMgYXV0b21hdGljYWxseSBzdGFydGVkIGFmdGVyIGxpbmsgaW5pdGlhbGl6YXRpb24KKyAqICBhbmQgRVZGUCBleGNoYW5nZSBpcyBjb21wbGV0ZWQuCisgKgorICogCXBhcmFtW2luXSB2ZgkJLSAJRkNTIHZmIGRhdGEgc3RydWN0dXJlLiBNZW1vcnkgaXMKKyAqCQkJCQlhbGxvY2F0ZWQgYnkgY2FsbGVyIChkcml2ZXIpCisgKiAJcGFyYW1baW5dIGZjcyAJCS0gCUZDUyBtb2R1bGUKKyAqIAlwYXJhbVtpbl0gdmZfY2ZnCS0gCVZGIGNvbmZpZ3VyYXRpb24KKyAqIAlwYXJhbVtpbl0gdmZfZHJ2IAktIAlPcGFxdWUgaGFuZGxlIGJhY2sgdG8gdGhlIGRyaXZlcidzCisgKgkJCQkJdmlydHVhbCB2ZiBzdHJ1Y3R1cmUKKyAqCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfT0sgVkYgY3JlYXRpb24gaXMgc3VjY2Vzc2Z1bAorICogCXJldHZhbCBCRkFfU1RBVFVTX0ZBSUxFRCBWRiBjcmVhdGlvbiBmYWlsZWQKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19FRVhJU1QgQSBWRiBleGlzdHMgd2l0aCB0aGUgZ2l2ZW4gdmZfaWQKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3ZmX2NyZWF0ZShiZmFfZmNzX3ZmX3QgKnZmLCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCwKKwkJICBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLCBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYpCit7CisJYmZhX3RyYyhmY3MsIHZmX2lkKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRlbGV0ZSBhIEJGQSBWRiBvYmplY3QuIFZGIG9iamVjdCBzaG91bGQKKyAqIAkJYmUgc3RvcHBlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBjYWxsLgorICoKKyAqIAlwYXJhbVtpbl0gdmYgLSBwb2ludGVyIHRvIGJmYV92Zl90LgorICoKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19PSwlPbiB2ZiBkZWxldGlvbiBzdWNjZXNzCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfQlVTWSBWRiBpcyBub3QgaW4gYSBzdG9wcGVkIHN0YXRlCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfSU5QUk9HUkVTUyBWRiBkZWxldGlvbiBpbiBpbiBwcm9ncmVzcworICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdmZfZGVsZXRlKGJmYV9mY3NfdmZfdCAqdmYpCit7CisJYmZhX3RyYyh2Zi0+ZmNzLCB2Zi0+dmZfaWQpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJU3RhcnQgcGFydGljaXBhdGlvbiBpbiBWRi4gVGhpcyB0cmlnZ2VycyBsb2dpbiB0byB0aGUgdmlydHVhbCBmYWJyaWMuCisgKgorICogCXBhcmFtW2luXSB2ZiAtIHBvaW50ZXIgdG8gYmZhX3ZmX3QuCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfdmZfc3RhcnQoYmZhX2Zjc192Zl90ICp2ZikKK3sKKwliZmFfdHJjKHZmLT5mY3MsIHZmLT52Zl9pZCk7Cit9CisKKy8qKgorICogIAlMb2dvdXQgd2l0aCB0aGUgdmlydHVhbCBmYWJyaWMuCisgKgorICogCXBhcmFtW2luXSB2ZiAtIHBvaW50ZXIgdG8gYmZhX3ZmX3QuCisgKgorICogCXJldHZhbCBCRkFfU1RBVFVTX09LIAlPbiBzdWNjZXNzLgorICogCXJldHZhbCBCRkFfU1RBVFVTX0lOUFJPR1JFU1MgVkYgaXMgYmVpbmcgc3RvcHBlZC4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3ZmX3N0b3AoYmZhX2Zjc192Zl90ICp2ZikKK3sKKwliZmFfdHJjKHZmLT5mY3MsIHZmLT52Zl9pZCk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlSZXR1cm5zIGF0dHJpYnV0ZXMgb2YgdGhlIGdpdmVuIFZGLgorICoKKyAqIAlwYXJhbVtpbl0gCXZmCQkJcG9pbnRlciB0byBiZmFfdmZfdC4KKyAqIAlwYXJhbVtvdXRdIHZmX2F0dHIgCXZmIGF0dHJpYnV0ZXMgcmV0dXJuZWQKKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192Zl9nZXRfYXR0cihiZmFfZmNzX3ZmX3QgKnZmLCBzdHJ1Y3QgYmZhX3ZmX2F0dHJfcyAqdmZfYXR0cikKK3sKKwliZmFfdHJjKHZmLT5mY3MsIHZmLT52Zl9pZCk7Cit9CisKKy8qKgorICogCQlSZXR1cm4gc3RhdGlzdGljcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHZmLgorICoKKyAqIAlwYXJhbVtpbl0gCXZmCQkJcG9pbnRlciB0byBiZmFfdmZfdC4KKyAqIAlwYXJhbVtvdXRdIHZmX3N0YXRzIAl2ZiBzdGF0aXN0aWNzIHJldHVybmVkCisgKgorICogIEByZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3ZmX2dldF9zdGF0cyhiZmFfZmNzX3ZmX3QgKnZmLCBzdHJ1Y3QgYmZhX3ZmX3N0YXRzX3MgKnZmX3N0YXRzKQoreworCWJmYV9vc19tZW1jcHkodmZfc3RhdHMsICZ2Zi0+c3RhdHMsIHNpemVvZihzdHJ1Y3QgYmZhX3ZmX3N0YXRzX3MpKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQKKy8qKgorICogCQljbGVhciBzdGF0aXN0aWNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdmYuCisgKgorICogCXBhcmFtW2luXSAJdmYJCQlwb2ludGVyIHRvIGJmYV92Zl90LgorICoKKyAqICBAcmV0dXJuIE5vbmUKKyAqLworYmZhX2Zjc192Zl9jbGVhcl9zdGF0cyhiZmFfZmNzX3ZmX3QgKnZmKQoreworCWJmYV9vc19tZW1zZXQoJnZmLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfdmZfc3RhdHNfcykpOworCXJldHVybjsKK30KKworLyoqCisgKiAgCVJldHVybnMgRkNTIHZmIHN0cnVjdHVyZSBmb3IgYSBnaXZlbiB2Zl9pZC4KKyAqCisgKiAJcGFyYW1baW5dIAl2Zl9pZAkJLSBWRl9JRAorICoKKyAqIAlyZXR1cm4KKyAqIAkJSWYgbG9va3VwIHN1Y2NlZWRzLCByZXR1bnMgZmNzIHZmIG9iamVjdCwgb3RoZXJ3aXNlIHJldHVybnMgTlVMTAorICovCitiZmFfZmNzX3ZmX3QgICAqCitiZmFfZmNzX3ZmX2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCkKK3sKKwliZmFfdHJjKGZjcywgdmZfaWQpOworCWlmICh2Zl9pZCA9PSBGQ19WRl9JRF9OVUxMKQorCQlyZXR1cm4gKCZmY3MtPmZhYnJpYyk7CisKKwkvKioKKwkgKiBAdG9kbyB2ZiBzdXBwb3J0CisJICovCisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiAgCVJldHVybnMgZHJpdmVyIFZGIHN0cnVjdHVyZSBmb3IgYSBnaXZlbiBGQ1MgdmYuCisgKgorICogCXBhcmFtW2luXSAJdmYJCS0gcG9pbnRlciB0byBiZmFfdmZfdAorICoKKyAqIAlyZXR1cm4gRHJpdmVyIFZGIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhZF92Zl9zICAgICAgKgorYmZhX2Zjc192Zl9nZXRfZHJ2X3ZmKGJmYV9mY3NfdmZfdCAqdmYpCit7CisJYmZhX2Fzc2VydCh2Zik7CisJYmZhX3RyYyh2Zi0+ZmNzLCB2Zi0+dmZfaWQpOworCXJldHVybiB2Zi0+dmZfZHJ2OworfQorCisvKioKKyAqICAJUmV0dXJuIHRoZSBsaXN0IG9mIFZGcyBjb25maWd1cmVkLgorICoKKyAqIAlwYXJhbVtpbl0JZmNzCWZjcyBtb2R1bGUgaW5zdGFuY2UKKyAqIAlwYXJhbVtvdXRdIAl2Zl9pZHMJcmV0dXJuZWQgbGlzdCBvZiB2Zl9pZHMKKyAqIAlwYXJhbVtpbixvdXRdIAludmZzCWluOnNpemUgb2YgdmZfaWRzIGFycmF5LAorICogCQkJCW91dDp0b3RhbCBlbGVtZW50cyBwcmVzZW50LAorICogCQkJCWFjdHVhbCBlbGVtZW50cyByZXR1cm5lZCBpcyBsaW1pdGVkIGJ5IHRoZSBzaXplCisgKgorICogCXJldHVybiBEcml2ZXIgVkYgc3RydWN0dXJlCisgKi8KK3ZvaWQKK2JmYV9mY3NfdmZfbGlzdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiAqdmZfaWRzLCBpbnQgKm52ZnMpCit7CisJYmZhX3RyYyhmY3MsICpudmZzKTsKK30KKworLyoqCisgKiAgCVJldHVybiB0aGUgbGlzdCBvZiBhbGwgVkZzIHZpc2libGUgZnJvbSBmYWJyaWMuCisgKgorICogCXBhcmFtW2luXQlmY3MJZmNzIG1vZHVsZSBpbnN0YW5jZQorICogCXBhcmFtW291dF0gCXZmX2lkcwlyZXR1cm5lZCBsaXN0IG9mIHZmX2lkcworICogCXBhcmFtW2luLG91dF0gCW52ZnMJaW46c2l6ZSBvZiB2Zl9pZHMgYXJyYXksCisgKgkJCQlvdXQ6dG90YWwgZWxlbWVudHMgcHJlc2VudCwKKyAqIAkJCQlhY3R1YWwgZWxlbWVudHMgcmV0dXJuZWQgaXMgbGltaXRlZCBieSB0aGUgc2l6ZQorICoKKyAqIAlyZXR1cm4gRHJpdmVyIFZGIHN0cnVjdHVyZQorICovCit2b2lkCitiZmFfZmNzX3ZmX2xpc3RfYWxsKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2ICp2Zl9pZHMsIGludCAqbnZmcykKK3sKKwliZmFfdHJjKGZjcywgKm52ZnMpOworfQorCisvKioKKyAqIAkJUmV0dXJuIHRoZSBsaXN0IG9mIGxvY2FsIGxvZ2ljYWwgcG9ydHMgcHJlc2VudCBpbiB0aGUgZ2l2ZW4gVkYuCisgKgorICogCXBhcmFtW2luXQl2Zgl2ZiBmb3Igd2hpY2ggbG9naWNhbCBwb3J0cyBhcmUgcmV0dXJuZWQKKyAqIAlwYXJhbVtvdXRdIAlscHd3bglyZXR1cm5lZCBsb2dpY2FsIHBvcnQgd3duIGxpc3QKKyAqIAlwYXJhbVtpbixvdXRdIAlubHBvcnRzCWluOnNpemUgb2YgbHB3d24gbGlzdDsKKyAqCQkJCW91dDp0b3RhbCBlbGVtZW50cyBwcmVzZW50LAorICogCQkJCWFjdHVhbCBlbGVtZW50cyByZXR1cm5lZCBpcyBsaW1pdGVkIGJ5IHRoZSBzaXplCisgKgorICovCit2b2lkCitiZmFfZmNzX3ZmX2dldF9wb3J0cyhiZmFfZmNzX3ZmX3QgKnZmLCB3d25fdCBscHd3bltdLCBpbnQgKm5scG9ydHMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlOworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0OworCWludCAgICAgICAgICAgICBpOworCXN0cnVjdCBiZmFfZmNzX3MgICAgICAqZmNzOworCisJaWYgKHZmID09IE5VTEwgfHwgbHB3d24gPT0gTlVMTCB8fCAqbmxwb3J0cyA9PSAwKQorCQlyZXR1cm47CisKKwlmY3MgPSB2Zi0+ZmNzOworCisJYmZhX3RyYyhmY3MsIHZmLT52Zl9pZCk7CisJYmZhX3RyYyhmY3MsICh1MzIpICpubHBvcnRzKTsKKworCWkgPSAwOworCWxwd3duW2krK10gPSB2Zi0+YnBvcnQucG9ydF9jZmcucHd3bjsKKworCWxpc3RfZm9yX2VhY2gocWUsICZ2Zi0+dnBvcnRfcSkgeworCQlpZiAoaSA+PSAqbmxwb3J0cykKKwkJCWJyZWFrOworCisJCXZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKikgcWU7CisJCWxwd3duW2krK10gPSB2cG9ydC0+bHBvcnQucG9ydF9jZmcucHd3bjsKKwl9CisKKwliZmFfdHJjKGZjcywgaSk7CisJKm5scG9ydHMgPSBpOworCXJldHVybjsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3Zwb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL3Zwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwYWYwNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvdnBvcnQuYwpAQCAtMCwwICsxLDg5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX3Zwb3J0LmMgRkNTIHZpcnR1YWwgcG9ydCBzdGF0ZSBtYWNoaW5lCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxmY2J1aWxkLmg+CisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9scG9ydC5oPgorCitCRkFfVFJDX0ZJTEUoRkNTLCBWUE9SVCk7CisKKyNkZWZpbmUgX192cG9ydF9mY3MoX192cCkgICAgICAgKF9fdnApLT5scG9ydC5mY3MKKyNkZWZpbmUgX192cG9ydF9wd3duKF9fdnApICAgICAgKF9fdnApLT5scG9ydC5wb3J0X2NmZy5wd3duCisjZGVmaW5lIF9fdnBvcnRfbnd3bihfX3ZwKSAgICAgIChfX3ZwKS0+bHBvcnQucG9ydF9jZmcubnd3bgorI2RlZmluZSBfX3Zwb3J0X2JmYShfX3ZwKSAgICAgICAoX192cCktPmxwb3J0LmZjcy0+YmZhCisjZGVmaW5lIF9fdnBvcnRfZmNpZChfX3ZwKSAgICAgIChfX3ZwKS0+bHBvcnQucGlkCisjZGVmaW5lIF9fdnBvcnRfZmFicmljKF9fdnApICAgIChfX3ZwKS0+bHBvcnQuZmFicmljCisjZGVmaW5lIF9fdnBvcnRfdmZpZChfX3ZwKSAgICAgIChfX3ZwKS0+bHBvcnQuZmFicmljLT52Zl9pZAorCisjZGVmaW5lIEJGQV9GQ1NfVlBPUlRfTUFYX1JFVFJJRVMgIDUKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9kb19mZGlzYyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF90aW1lb3V0KHZvaWQgKnZwb3J0X2FyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9kb19sb2dvKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X2ZyZWUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworCisvKioKKyAqICBmY3NfdnBvcnRfc20gRkNTIHZpcnR1YWwgcG9ydCBzdGF0ZSBtYWNoaW5lCisgKi8KKworLyoqCisgKiBWUG9ydCBTdGF0ZSBNYWNoaW5lIGV2ZW50cworICovCitlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgeworCUJGQV9GQ1NfVlBPUlRfU01fQ1JFQVRFID0gMSwJLyogIHZwb3J0IGNyZWF0ZSBldmVudCAqLworCUJGQV9GQ1NfVlBPUlRfU01fREVMRVRFID0gMiwJLyogIHZwb3J0IGRlbGV0ZSBldmVudCAqLworCUJGQV9GQ1NfVlBPUlRfU01fU1RBUlQgPSAzLAkvKiAgdnBvcnQgc3RhcnQgcmVxdWVzdCAqLworCUJGQV9GQ1NfVlBPUlRfU01fU1RPUCA9IDQsCS8qICBzdG9wOiB1bnN1cHBvcnRlZCAqLworCUJGQV9GQ1NfVlBPUlRfU01fT05MSU5FID0gNSwJLyogIGZhYnJpYyBvbmxpbmUgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkUgPSA2LAkvKiAgZmFicmljIG9mZmxpbmUgZXZlbnQgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX0ZSTVNFTlQgPSA3LAkvKiAgZmRpc2MvbG9nbyBzZW50IGV2ZW50cyAqLworCUJGQV9GQ1NfVlBPUlRfU01fUlNQX09LID0gOCwJLyogIGdvb2QgcmVzcG9uc2UgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUiA9IDksCS8qICBlcnJvci9iYWQgcmVzcG9uc2UgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1RJTUVPVVQgPSAxMCwJLyogIGRlbGF5IHRpbWVyIGV2ZW50ICovCisJQkZBX0ZDU19WUE9SVF9TTV9ERUxDT01QID0gMTEsCS8qICBscG9ydCBkZWxldGUgY29tcGxldGlvbiAqLworCUJGQV9GQ1NfVlBPUlRfU01fUlNQX0RVUF9XV04gPSAxMiwJLyogIER1cCB3bm4gZXJyb3IgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX1JTUF9GQUlMRUQgPSAxMywJLyogIG5vbi1yZXRyeWFibGUgZmFpbHVyZSAqLworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCQllbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fY3JlYXRlZChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCQkgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fZmRpc2NfcmV0cnkoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCSAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCQkgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCQkgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX2xvZ28oc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJICAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX2Vycm9yKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworCitzdGF0aWMgc3RydWN0IGJmYV9zbV90YWJsZV9zIHZwb3J0X3NtX3RhYmxlW10gPSB7CisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX3VuaW5pdCksIEJGQV9GQ1NfVlBPUlRfVU5JTklUfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fY3JlYXRlZCksIEJGQV9GQ1NfVlBPUlRfQ1JFQVRFRH0sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpLCBCRkFfRkNTX1ZQT1JUX09GRkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9mZGlzYyksIEJGQV9GQ1NfVlBPUlRfRkRJU0N9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9mZGlzY19yZXRyeSksIEJGQV9GQ1NfVlBPUlRfRkRJU0NfUkVUUll9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9vbmxpbmUpLCBCRkFfRkNTX1ZQT1JUX09OTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2RlbGV0aW5nKSwgQkZBX0ZDU19WUE9SVF9ERUxFVElOR30sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXApLCBCRkFfRkNTX1ZQT1JUX0NMRUFOVVB9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9sb2dvKSwgQkZBX0ZDU19WUE9SVF9MT0dPfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fZXJyb3IpLCBCRkFfRkNTX1ZQT1JUX0VSUk9SfQorfTsKKworLyoqCisgKiBCZWdpbm5pbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCWVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fQ1JFQVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2NyZWF0ZWQpOworCQliZmFfZmNzX2ZhYnJpY19hZGR2cG9ydChfX3Zwb3J0X2ZhYnJpYyh2cG9ydCksIHZwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBDcmVhdGVkIHN0YXRlIC0gYSBzdGFydCBldmVudCBpcyByZXF1aXJlZCB0byBzdGFydCB1cCB0aGUgc3RhdGUgbWFjaGluZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fY3JlYXRlZChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCSBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1NUQVJUOgorCQlpZiAoYmZhX2Zjc19mYWJyaWNfaXNfb25saW5lKF9fdnBvcnRfZmFicmljKHZwb3J0KSkKKwkJICAgICYmIGJmYV9mY3NfZmFicmljX25waXZfY2FwYWJsZShfX3Zwb3J0X2ZhYnJpYyh2cG9ydCkpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjKTsKKwkJCWJmYV9mY3NfdnBvcnRfZG9fZmRpc2ModnBvcnQpOworCQl9IGVsc2UgeworCQkJLyoqCisJCQkgKiBGYWJyaWMgaXMgb2ZmbGluZSBvciBub3QgTlBJViBjYXBhYmxlLCBzdGF5IGluCisJCQkgKiBvZmZsaW5lIHN0YXRlLgorCQkJICovCisJCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmFiX25vX25waXYrKzsKKwkJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXApOworCQliZmFfZmNzX3BvcnRfZGVsZXRlKCZ2cG9ydC0+bHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PTkxJTkU6CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCS8qKgorCQkgKiBJZ25vcmUgT05MSU5FL09GRkxJTkUgZXZlbnRzIGZyb20gZmFicmljIHRpbGwgdnBvcnQgaXMgc3RhcnRlZC4KKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogT2ZmbGluZSBzdGF0ZSAtIGF3YWl0aW5nIE9OTElORSBldmVudCBmcm9tIGZhYnJpYyBTTS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCSBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKTsKKwkJYmZhX2Zjc19wb3J0X2RlbGV0ZSgmdnBvcnQtPmxwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjKTsKKwkJdnBvcnQtPmZkaXNjX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Zwb3J0X2RvX2ZkaXNjKHZwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJLyoKKwkJICogVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSB2cG9ydCBjb3VsZG4ndCBiZSBpbml0aWFsemllZCBkdWUKKwkJICogdGhlIGZhY3QgdGhhdCB0aGUgbnBpdiB3YXMgbm90IGVuYWJsZWQgb24gdGhlIHN3aXRjaC4gSW4KKwkJICogdGhhdCBjYXNlIHdlIHdpbGwgcHV0IHRoZSB2cG9ydCBpbiBvZmZsaW5lIHN0YXRlLiBIb3dldmVyLAorCQkgKiB0aGUgbGluayBjYW4gZ28gZG93biBhbmQgY2F1c2UgdGhlIHRoaXMgZXZlbnQgdG8gYmUgc2VudCB3aGVuCisJCSAqIHdlIGFyZSBhbHJlYWR5IG9mZmxpbmUuIElnbm9yZSBpdC4KKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogRkRJU0MgaXMgc2VudCBhbmQgYXdhaXRpbmcgcmVwbHkgZnJvbSBmYWJyaWMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkgICAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fbG9nbyk7CisJCWJmYV9scHNfZGlzY2FyZCh2cG9ydC0+bHBzKTsKKwkJYmZhX2Zjc192cG9ydF9kb19sb2dvKHZwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2xwc19kaXNjYXJkKHZwb3J0LT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fb25saW5lKTsKKwkJYmZhX2Zjc19wb3J0X29ubGluZSgmdnBvcnQtPmxwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KF9fdnBvcnRfYmZhKHZwb3J0KSwgJnZwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Zwb3J0X3RpbWVvdXQsIHZwb3J0LAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9GQUlMRUQ6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9EVVBfV1dOOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2Vycm9yKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBGRElTQyBhdHRlbXB0IGZhaWxlZCAtIGEgdGltZXIgaXMgYWN0aXZlIHRvIHJldHJ5IEZESVNDLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9mZGlzY19yZXRyeShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCSAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cCk7CisJCWJmYV90aW1lcl9zdG9wKCZ2cG9ydC0+dGltZXIpOworCQliZmFfZmNzX3BvcnRfZGVsZXRlKCZ2cG9ydC0+bHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmdnBvcnQtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9mZGlzYyk7CisJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19yZXRyaWVzKys7CisJCXZwb3J0LT5mZGlzY19yZXRyaWVzKys7CisJCWJmYV9mY3NfdnBvcnRfZG9fZmRpc2ModnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFZwb3J0IGlzIG9ubGluZSAoRkRJU0MgaXMgY29tcGxldGUpLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQllbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfcG9ydF9kZWxldGUoJnZwb3J0LT5scG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9scHNfZGlzY2FyZCh2cG9ydC0+bHBzKTsKKwkJYmZhX2Zjc19wb3J0X29mZmxpbmUoJnZwb3J0LT5scG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogVnBvcnQgaXMgYmVpbmcgZGVsZXRlZCAtIGF3YWl0aW5nIGxwb3J0IGRlbGV0ZSBjb21wbGV0aW9uIHRvIHNlbmQKKyAqIExPR08gdG8gZmFicmljLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCSAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTENPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fbG9nbyk7CisJCWJmYV9mY3NfdnBvcnRfZG9fbG9nbyh2cG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogRXJyb3IgU3RhdGUuCisgKiBUaGlzIHN0YXRlIHdpbGwgYmUgc2V0IHdoZW4gdGhlIFZwb3J0IENyZWF0aW9uIGZhaWxzIGR1ZSB0byBlcnJvcnMgbGlrZQorICogRHVwIFdXTi4gSW4gdGhpcyBzdGF0ZSBvbmx5IG9wZXJhdGlvbiBhbGxvd2VkIGlzIGEgVnBvcnQgRGVsZXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9lcnJvcihzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJICAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3NfdnBvcnRfZnJlZSh2cG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogTHBvcnQgY2xlYW51cCBpcyBpbiBwcm9ncmVzcyBzaW5jZSB2cG9ydCBpcyBiZWluZyBkZWxldGVkLiBGYWJyaWMgaXMKKyAqIG9mZmxpbmUsIHNvIG5vIExPR08gaXMgbmVlZGVkIHRvIGNvbXBsZXRlIHZwb3J0IGRlbGV0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Zwb3J0X2ZyZWUodnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogTE9HTyBpcyBzZW50IHRvIGZhYnJpYy4gVnBvcnQgZGVsZXRlIGlzIGluIHByb2dyZXNzLiBMcG9ydCBkZWxldGUgY2xlYW51cAorICogaXMgZG9uZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fbG9nbyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJICAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfbHBzX2Rpc2NhcmQodnBvcnQtPmxwcyk7CisJCS8qCisJCSAqICEhISBmYWxsIHRocm91Z2ggISEhCisJCSAqLworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9PSzoKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3NfdnBvcnRfZnJlZSh2cG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGZjc192cG9ydF9wcml2YXRlIEZDUyB2aXJ0dWFsIHBvcnQgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIFNlbmQgQUVOIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9hZW5fcG9zdChiZmFfZmNzX2xwb3J0X3QgKnBvcnQsIGVudW0gYmZhX2xwb3J0X2Flbl9ldmVudCBldmVudCkKK3sKKwl1bmlvbiBiZmFfYWVuX2RhdGFfdSBhZW5fZGF0YTsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kID0gcG9ydC0+ZmNzLT5sb2dtOworCWVudW0gYmZhX3BvcnRfcm9sZSByb2xlID0gcG9ydC0+cG9ydF9jZmcucm9sZXM7CisJd3duX3QgICAgICAgICAgIGxwd3duID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCWNoYXIgICAgICAgICAgICBscHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisJY2hhciAgICAgICAgICAgKnJvbGVfc3RyW0JGQV9QT1JUX1JPTEVfRkNQX01BWCAvIDIgKyAxXSA9CisJCXsgIkluaXRpYXRvciIsICJUYXJnZXQiLCAiSVBGQyIgfTsKKworCXd3bjJzdHIobHB3d25fcHRyLCBscHd3bik7CisKKwliZmFfYXNzZXJ0KHJvbGUgPD0gQkZBX1BPUlRfUk9MRV9GQ1BfTUFYKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUE9SVF9BRU5fTlBJVl9EVVBfV1dOOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9OUElWX0RVUF9XV04sIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9OUElWX0ZBQlJJQ19NQVg6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX05QSVZfRkFCUklDX01BWCwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfTFBPUlRfQUVOX05QSVZfVU5LTk9XTjoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fTFBPUlRfTlBJVl9VTktOT1dOLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlhZW5fZGF0YS5scG9ydC52Zl9pZCA9IHBvcnQtPmZhYnJpYy0+dmZfaWQ7CisJYWVuX2RhdGEubHBvcnQucm9sZXMgPSByb2xlOworCWFlbl9kYXRhLmxwb3J0LnBwd3duID0KKwkJYmZhX2Zjc19wb3J0X2dldF9wd3duKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChwb3J0LT5mY3MpKTsKKwlhZW5fZGF0YS5scG9ydC5scHd3biA9IGxwd3duOworfQorCisvKioKKyAqIFRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCB0byBzZW5kIGEgRkRJU0MgY29tbWFuZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfZG9fZmRpc2Moc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX2xwc19mZGlzYyh2cG9ydC0+bHBzLCB2cG9ydCwKKwkJICAgICAgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUoX192cG9ydF9iZmEodnBvcnQpKSwKKwkJICAgICAgX192cG9ydF9wd3duKHZwb3J0KSwgX192cG9ydF9ud3duKHZwb3J0KSk7CisJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX3NlbnQrKzsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfZmRpc2NfcmVqZWN0ZWQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJdTggICAgICAgICBsc3JqdF9yc24gPSBiZmFfbHBzX2dldF9sc3JqdF9yc24odnBvcnQtPmxwcyk7CisJdTggICAgICAgICBsc3JqdF9leHBsID0gYmZhX2xwc19nZXRfbHNyanRfZXhwbCh2cG9ydC0+bHBzKTsKKworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBsc3JqdF9yc24pOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBsc3JqdF9leHBsKTsKKworCS8qCisJICogRm9yIGNlcnRhaW4gcmVhc29uIGNvZGVzLCB3ZSBkb24ndCB3YW50IHRvIHJldHJ5LgorCSAqLworCXN3aXRjaCAoYmZhX2xwc19nZXRfbHNyanRfZXhwbCh2cG9ydC0+bHBzKSkgeworCWNhc2UgRkNfTFNfUkpUX0VYUF9JTlZfUE9SVF9OQU1FOgkvKiBieSBicm9jYWRlICovCisJY2FzZSBGQ19MU19SSlRfRVhQX0lOVkFMSURfTlBPUlRfSUQ6CS8qIGJ5IENpc2NvICovCisJCWlmICh2cG9ydC0+ZmRpc2NfcmV0cmllcyA8IEJGQV9GQ1NfVlBPUlRfTUFYX1JFVFJJRVMpCisJCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IpOworCQllbHNlIHsKKwkJCWJmYV9mY3NfdnBvcnRfYWVuX3Bvc3QoJnZwb3J0LT5scG9ydCwKKwkJCQkJICAgICAgIEJGQV9MUE9SVF9BRU5fTlBJVl9EVVBfV1dOKTsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9EVVBfV1dOKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkNfTFNfUkpUX0VYUF9JTlNVRkZfUkVTOgorCQkvKgorCQkgKiBUaGlzIG1lYW5zIG1heCBsb2dpbnMgcGVyIHBvcnQvc3dpdGNoIHNldHRpbmcgb24gdGhlCisJCSAqIHN3aXRjaCB3YXMgZXhjZWVkZWQuCisJCSAqLworCQlpZiAodnBvcnQtPmZkaXNjX3JldHJpZXMgPCBCRkFfRkNTX1ZQT1JUX01BWF9SRVRSSUVTKQorCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKKwkJZWxzZSB7CisJCQliZmFfZmNzX3Zwb3J0X2Flbl9wb3N0KCZ2cG9ydC0+bHBvcnQsCisJCQkJCSAgICAgICBCRkFfTFBPUlRfQUVOX05QSVZfRkFCUklDX01BWCk7CisJCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRkFJTEVEKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWlmICh2cG9ydC0+ZmRpc2NfcmV0cmllcyA9PSAwKQkvKiBQcmludCBvbmx5IG9uY2UgKi8KKwkJCWJmYV9mY3NfdnBvcnRfYWVuX3Bvc3QoJnZwb3J0LT5scG9ydCwKKwkJCQkJICAgICAgIEJGQV9MUE9SVF9BRU5fTlBJVl9VTktOT1dOKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKKwl9Cit9CisKKy8qKgorICogCUNhbGxlZCB0byBzZW5kIGEgbG9nb3V0IHRvIHRoZSBmYWJyaWMuIFVzZWQgd2hlbiBhIFYtUG9ydCBpcworICogCWRlbGV0ZWQvc3RvcHBlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfZG9fbG9nbyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisKKwl2cG9ydC0+dnBvcnRfc3RhdHMubG9nb19zZW50Kys7CisJYmZhX2xwc19mZGlzY2xvZ28odnBvcnQtPmxwcyk7Cit9CisKKy8qKgorICogICAgIFRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCBieSBiZmFfdGltZXIgb24gdGltZXIgdGltZW91dHMuCisgKgorICogCXBhcmFtW2luXSAJdnBvcnQgCQktIHBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICogCXBhcmFtW291dF0JdnBvcnRfc3RhdHVzIAktIHBvaW50ZXIgdG8gcmV0dXJuIHZwb3J0IHN0YXR1cyBpbgorICoKKyAqIAlyZXR1cm4KKyAqIAkJdm9pZAorICoKKyogCVNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogCW5vdGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfdGltZW91dCh2b2lkICp2cG9ydF9hcmcpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqKXZwb3J0X2FyZzsKKworCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY190aW1lb3V0cysrOworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1RJTUVPVVQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9mcmVlKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV9mY3NfZmFicmljX2RlbHZwb3J0KF9fdnBvcnRfZmFicmljKHZwb3J0KSwgdnBvcnQpOworCWJmYV9mY2JfdnBvcnRfZGVsZXRlKHZwb3J0LT52cG9ydF9kcnYpOworCWJmYV9scHNfZGVsZXRlKHZwb3J0LT5scHMpOworfQorCisKKworLyoqCisgKiAgZmNzX3Zwb3J0X3B1YmxpYyBGQ1MgdmlydHVhbCBwb3J0IHB1YmxpYyBpbnRlcmZhY2VzCisgKi8KKworLyoqCisgKiBPbmxpbmUgbm90aWZpY2F0aW9uIGZyb20gZmFicmljIFNNLgorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwl2cG9ydC0+dnBvcnRfc3RhdHMuZmFiX29ubGluZSsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX09OTElORSk7Cit9CisKKy8qKgorICogT2ZmbGluZSBub3RpZmljYXRpb24gZnJvbSBmYWJyaWMgU00uCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwl2cG9ydC0+dnBvcnRfc3RhdHMuZmFiX29mZmxpbmUrKzsKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FKTsKK30KKworLyoqCisgKiBDbGVhbnVwIG5vdGlmaWNhdGlvbiBmcm9tIGZhYnJpYyBTTSBvbiBsaW5rIHRpbWVyIGV4cGlyeS4KKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9jbGVhbnVwKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCXZwb3J0LT52cG9ydF9zdGF0cy5mYWJfY2xlYW51cCsrOworfQorCisvKioKKyAqIERlbGV0ZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZyb20gYXNzb2NpYXRlZCBscG9ydAorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX0RFTENPTVApOworfQorCisvKioKKyAqICAgTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7Cit9CisKKy8qKgorICogICBNb2R1bGUgY2xlYW51cAorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV9mY3NfbW9kZXhpdF9jb21wKGZjcyk7Cit9CisKK3UzMgorYmZhX2Zjc192cG9ydF9nZXRfbWF4KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgaW9jX2F0dHI7CisKKwliZmFfZ2V0X2F0dHIoZmNzLT5iZmEsICZpb2NfYXR0cik7CisKKwlpZiAoaW9jX2F0dHIucGNpX2F0dHIuZGV2aWNlX2lkID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKQorCQlyZXR1cm4gKEJGQV9GQ1NfTUFYX1ZQT1JUU19TVVBQX0NUKTsKKwllbHNlCisJCXJldHVybiAoQkZBX0ZDU19NQVhfVlBPUlRTX1NVUFBfQ0IpOworfQorCisKKworLyoqCisgKiAgZmNzX3Zwb3J0X2FwaSBWaXJ0dWFsIHBvcnQgQVBJCisgKi8KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHRvIGluc3RhbnRpYXRlIGEgbmV3IEZDUyB2cG9ydCBvYmplY3QuIFRoaXMKKyAqIAlmdW5jdGlvbiB3aWxsIG5vdCB0cmlnZ2VyIGFueSBIVyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh3aGljaCB3aWxsIGJlCisgKiAJZG9uZSBpbiB2cG9ydF9zdGFydCgpIGNhbGwpCisgKgorICogCXBhcmFtW2luXSB2cG9ydAktIAlwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4gVGhpcyBzcGFjZQorICogCQkJCQluZWVkcyB0byBiZSBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlci4KKyAqIAlwYXJhbVtpbl0gZmNzIAkJLSAJRkNTIGluc3RhbmNlCisgKiAJcGFyYW1baW5dIHZwb3J0X2NmZwktIAl2cG9ydCBjb25maWd1cmF0aW9uCisgKiAJcGFyYW1baW5dIHZmX2lkICAgIAktIAlWRl9JRCBpZiB2cG9ydCBpcyBjcmVhdGVkIHdpdGhpbiBhIFZGLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIAkJRkNfVkZfSURfTlVMTCB0byBzcGVjaWZ5IGJhc2UgZmFicmljLgorICogCXBhcmFtW2luXSB2cG9ydF9kcnYgCS0gCU9wYXF1ZSBoYW5kbGUgYmFjayB0byB0aGUgZHJpdmVyJ3MgdnBvcnQKKyAqIAkJCQkJc3RydWN0dXJlCisgKgorICogCXJldHZhbCBCRkFfU1RBVFVTX09LIC0gb24gc3VjY2Vzcy4KKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19GQUlMRUQgLSBvbiBmYWlsdXJlLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCSAgICAgdTE2IHZmX2lkLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnZwb3J0X2NmZywKKwkJICAgICBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cG9ydF9kcnYpCit7CisJaWYgKHZwb3J0X2NmZy0+cHd3biA9PSAwKQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfSU5WQUxJRF9XV04pOworCisJaWYgKGJmYV9mY3NfcG9ydF9nZXRfcHd3bigmZmNzLT5mYWJyaWMuYnBvcnQpID09IHZwb3J0X2NmZy0+cHd3bikKKwkJcmV0dXJuIEJGQV9TVEFUVVNfVlBPUlRfV1dOX0JQOworCisJaWYgKGJmYV9mY3NfdnBvcnRfbG9va3VwKGZjcywgdmZfaWQsIHZwb3J0X2NmZy0+cHd3bikgIT0gTlVMTCkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfVlBPUlRfRVhJU1RTOworCisJaWYgKGJmYV9mY3NfZmFicmljX3Zwb3J0X2NvdW50KCZmY3MtPmZhYnJpYykgPT0KKwkgICAgYmZhX2Zjc192cG9ydF9nZXRfbWF4KGZjcykpCisJCXJldHVybiBCRkFfU1RBVFVTX1ZQT1JUX01BWDsKKworCXZwb3J0LT5scHMgPSBiZmFfbHBzX2FsbG9jKGZjcy0+YmZhKTsKKwlpZiAoIXZwb3J0LT5scHMpCisJCXJldHVybiBCRkFfU1RBVFVTX1ZQT1JUX01BWDsKKworCXZwb3J0LT52cG9ydF9kcnYgPSB2cG9ydF9kcnY7CisJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV91bmluaXQpOworCisJYmZhX2Zjc19scG9ydF9pbml0KCZ2cG9ydC0+bHBvcnQsIGZjcywgdmZfaWQsIHZwb3J0X2NmZywgdnBvcnQpOworCisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fQ1JFQVRFKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZSB0aGUgdnBvcnQuCisgKgorICogIEBwYXJhbVtpbl0gdnBvcnQgLSBwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqCisgKiAgQHJldHVybnMgTm9uZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdnBvcnRfc3RhcnQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fU1RBUlQpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiBxdWllc2UgdGhlIHZwb3J0IG9iamVjdC4gVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybgorICogCWltbWVkaWF0ZWx5LCB3aGVuIHRoZSB2cG9ydCBpcyBhY3R1YWxseSBzdG9wcGVkLCB0aGUKKyAqIAliZmFfZHJ2X3Zwb3J0X3N0b3BfY2IoKSB3aWxsIGJlIGNhbGxlZC4KKyAqCisgKiAJcGFyYW1baW5dIHZwb3J0IC0gcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCisgKgorICogCXJldHVybiBOb25lCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192cG9ydF9zdG9wKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1NUT1ApOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiB0byBkZWxldGUgYSB2cG9ydCBvYmplY3QuIEZhYnJpYyBvYmplY3Qgc2hvdWxkCisgKiAJCWJlIHN0b3BwZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gY2FsbC4KKyAqCisgKiAJcGFyYW1baW5dIHZwb3J0IC0gcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCisgKgorICogCXJldHVybiAgICAgTm9uZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURSk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB2cG9ydCdzIGN1cnJlbnQgc3RhdHVzIGluZm8uCisgKgorICogCXBhcmFtW2luXSAJdnBvcnQgCQlwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqIAlwYXJhbVtvdXRdCWF0dHIgCQlwb2ludGVyIHRvIHJldHVybiB2cG9ydCBhdHRyaWJ1dGVzCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCSAgICAgICBzdHJ1Y3QgYmZhX3Zwb3J0X2F0dHJfcyAqYXR0cikKK3sKKwlpZiAodnBvcnQgPT0gTlVMTCB8fCBhdHRyID09IE5VTEwpCisJCXJldHVybjsKKworCWJmYV9vc19tZW1zZXQoYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfdnBvcnRfYXR0cl9zKSk7CisKKwliZmFfZmNzX3BvcnRfZ2V0X2F0dHIoJnZwb3J0LT5scG9ydCwgJmF0dHItPnBvcnRfYXR0cik7CisJYXR0ci0+dnBvcnRfc3RhdGUgPSBiZmFfc21fdG9fc3RhdGUodnBvcnRfc21fdGFibGUsIHZwb3J0LT5zbSk7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdnBvcnQncyBzdGF0aXN0aWNzLgorICoKKyAqIAlwYXJhbVtpbl0gCXZwb3J0IAkJcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCisgKiAJcGFyYW1bb3V0XQlzdGF0cwkJcG9pbnRlciB0byByZXR1cm4gdnBvcnQgc3RhdGlzdGljcyBpbgorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCXN0cnVjdCBiZmFfdnBvcnRfc3RhdHNfcyAqc3RhdHMpCit7CisJKnN0YXRzID0gdnBvcnQtPnZwb3J0X3N0YXRzOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgdnBvcnQncyBzdGF0aXN0aWNzLgorICoKKyAqIAlwYXJhbVtpbl0gCXZwb3J0IAkJcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfY2xyX3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV9vc19tZW1zZXQoJnZwb3J0LT52cG9ydF9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfdnBvcnRfc3RhdHNfcykpOworfQorCisvKioKKyAqICAgICAgTG9va3VwIGEgdmlydHVhbCBwb3J0LiBFeGNsdWRlcyBiYXNlIHBvcnQgZnJvbSBsb29rdXAuCisgKi8KK3N0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKgorYmZhX2Zjc192cG9ydF9sb29rdXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQsIHd3bl90IHZwd3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0OworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWM7CisKKwliZmFfdHJjKGZjcywgdmZfaWQpOworCWJmYV90cmMoZmNzLCB2cHd3bik7CisKKwlmYWJyaWMgPSBiZmFfZmNzX3ZmX2xvb2t1cChmY3MsIHZmX2lkKTsKKwlpZiAoIWZhYnJpYykgeworCQliZmFfdHJjKGZjcywgdmZfaWQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl2cG9ydCA9IGJmYV9mY3NfZmFicmljX3Zwb3J0X2xvb2t1cChmYWJyaWMsIHZwd3duKTsKKwlyZXR1cm4gdnBvcnQ7Cit9CisKKy8qKgorICogRkRJU0MgUmVzcG9uc2UKKyAqLwordm9pZAorYmZhX2NiX2xwc19mZGlzY19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQgPSB1YXJnOworCisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBzdGF0dXMpOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIEJGQV9TVEFUVVNfT0s6CisJCS8qCisJCSAqIEluaXRpYWxpYXplIHRoZSBWLVBvcnQgZmllbGRzCisJCSAqLworCQlfX3Zwb3J0X2ZjaWQodnBvcnQpID0gYmZhX2xwc19nZXRfcGlkKHZwb3J0LT5scHMpOworCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfYWNjZXB0cysrOworCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfT0spOworCQlicmVhazsKKworCWNhc2UgQkZBX1NUQVRVU19JTlZBTElEX01BQzoKKwkJLyoKKwkJICogT25seSBmb3IgQ05BCisJCSAqLworCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfYWNjX2JhZCsrOworCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IpOworCisJCWJyZWFrOworCisJY2FzZSBCRkFfU1RBVFVTX0VQUk9UT0NPTDoKKwkJc3dpdGNoIChiZmFfbHBzX2dldF9leHRzdGF0dXModnBvcnQtPmxwcykpIHsKKwkJY2FzZSBCRkFfRVBST1RPX0JBRF9BQ0NFUFQ6CisJCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfYWNjX2JhZCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBCRkFfRVBST1RPX1VOS05PV05fUlNQOgorCQkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX3Vua25vd25fcnNwKys7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IpOworCQlicmVhazsKKworCWNhc2UgQkZBX1NUQVRVU19GQUJSSUNfUkpUOgorCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfcmVqZWN0cysrOworCQliZmFfZmNzX3Zwb3J0X2ZkaXNjX3JlamVjdGVkKHZwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IpOworCX0KK30KKworLyoqCisgKiBMT0dPIHJlc3BvbnNlCisgKi8KK3ZvaWQKK2JmYV9jYl9scHNfZmRpc2Nsb2dvX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCA9IHVhcmc7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX09LKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaCBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oCmluZGV4IGQ3NTc2ZjIuLjVlZGRlMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oCkBAIC0xMDAsNiArMTAwLDggQEAKICNkZWZpbmUgQ1RYX09GRlNFVCAJCQkweDEwMDAwCiAjZGVmaW5lIE1BWF9DSURfQ05UCQkJMHg0MDAwCiAKKyNkZWZpbmUgQk5YMklfNTcwWF9QQUdFX1NJWkVfREVGQVVMVAk0MDk2CisKIC8qIDU3MDkgY29udGV4dCByZWdpc3RlcnMgKi8KICNkZWZpbmUgQk5YMl9NUV9DT05GSUcyCQkJMHgwMDAwM2QwMAogI2RlZmluZSBCTlgyX01RX0NPTkZJRzJfQ09OVF9TWgkJKDB4N0w8PDQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKaW5kZXggNDFlMWIwZS4uNWM4ZDc2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYwpAQCAtMjM4Niw3ICsyMzg2LDcgQEAKIAkJY3R4X3N6ID0gKGNvbmZpZzIgJiBCTlgyX01RX0NPTkZJRzJfQ09OVF9TWikgPj4gMzsKIAkJaWYgKGN0eF9zeikKIAkJCXJlZ19vZmYgPSBDVFhfT0ZGU0VUICsgTUFYX0NJRF9DTlQgKiBNQl9LRVJORUxfQ1RYX1NJWkUKLQkJCQkgICsgUEFHRV9TSVpFICoKKwkJCQkgICsgQk5YMklfNTcwWF9QQUdFX1NJWkVfREVGQVVMVCAqCiAJCQkJICAoKChjaWRfbnVtIC0gZmlyc3RfbDRsNSkgLyBjdHhfc3opICsgMjU2KTsKIAkJZWxzZQogCQkJcmVnX29mZiA9IENUWF9PRkZTRVQgKyAoTUJfS0VSTkVMX0NUWF9TSVpFICogY2lkX251bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCmluZGV4IDlhN2JhNzEuLmNhZmI4ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCkBAIC0xMjQzLDcgKzEyNDMsNyBAQAogCQljbWRzX21heCA9IEJOWDJJX1NRX1dRRVNfTUlOOwogCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9zZXNzaW9uX3NldHVwKCZibngyaV9pc2NzaV90cmFuc3BvcnQsIHNob3N0LAotCQkJCQkgIGNtZHNfbWF4LCBzaXplb2Yoc3RydWN0IGJueDJpX2NtZCksCisJCQkJCSAgY21kc19tYXgsIDAsIHNpemVvZihzdHJ1Y3QgYm54MmlfY21kKSwKIAkJCQkJICBpbml0aWFsX2NtZHNuLCBJU0NTSV9NQVhfVEFSR0VUKTsKIAlpZiAoIWNsc19zZXNzaW9uKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCmluZGV4IGMzOTlmNDguLjI2MzFiZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYwpAQCAtNDIyLDcgKzQyMiw3IEBACiAJQlVHX09OKGhiYSAhPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpKTsKIAogCWNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmY3hnYjNpX2lzY3NpX3RyYW5zcG9ydCwgc2hvc3QsCi0JCQkJCSAgY21kc19tYXgsCisJCQkJCSAgY21kc19tYXgsIDAsCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV90Y3BfdGFzaykgKwogCQkJCQkgIHNpemVvZihzdHJ1Y3QgY3hnYjNpX3Rhc2tfZGF0YSksCiAJCQkJCSAgaW5pdGlhbF9jbWRzbiwgSVNDU0lfTUFYX1RBUkdFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKaW5kZXggMTFjODkzMS4uMjY4MTg5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwpAQCAtNTAwLDggKzUwMCw2IEBACiAJaWYgKCFyZXQpCiAJCWdvdG8gZG9uZTsKIAotCWVyciA9IFNDU0lfREhfT0s7Ci0KIAlzd2l0Y2ggKHNlbnNlX2hkci5zZW5zZV9rZXkpIHsKIAljYXNlIE5PX1NFTlNFOgogCWNhc2UgQUJPUlRFRF9DT01NQU5EOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKaW5kZXggYjZhZjYzYy4uNDk2NzY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYworKysgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCkBAIC0xOTE4LDYgKzE5MTgsMTAgQEAKIAkJfQogCQlzaXplID0gc2l6ZT4+MTY7CiAJCXNpemUgKj0gNDsKKwkJaWYgKHNpemUgPiBNQVhfTUVTU0FHRV9TSVpFKSB7CisJCQlyY29kZSA9IC1FSU5WQUw7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KIAkJLyogQ29weSBpbiB0aGUgdXNlcidzIEkyTyBjb21tYW5kICovCiAJCWlmIChjb3B5X2Zyb21fdXNlciAobXNnLCB1c2VyX21zZywgc2l6ZSkpIHsKIAkJCXJjb2RlID0gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoLmMgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCmluZGV4IDE4NWU2YmMuLjllOGZjZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoLmMKKysrIGIvZHJpdmVycy9zY3NpL2dkdGguYwpAQCAtMjkwMCw3ICsyOTAwLDcgQEAKICAgICAgICAgZWluZGV4ID0gaGFuZGxlOwogICAgIGVzdHItPmV2ZW50X3NvdXJjZSA9IDA7CiAKLSAgICBpZiAoZWluZGV4ID49IE1BWF9FVkVOVFMpIHsKKyAgICBpZiAoZWluZGV4IDwgMCB8fCBlaW5kZXggPj0gTUFYX0VWRU5UUykgewogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKICAgICAgICAgcmV0dXJuIGVpbmRleDsKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmMgYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKaW5kZXggYzU5NmFiNS4uYTBlN2U3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwdGlvcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBIaWdoUG9pbnQgUlIzeHh4LzR4eHggY29udHJvbGxlciBkcml2ZXIgZm9yIExpbnV4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00MSw3ICs0MSw3IEBACiAKIHN0YXRpYyBjaGFyIGRyaXZlcl9uYW1lW10gPSAiaHB0aW9wIjsKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lX2xvbmdbXSA9ICJSb2NrZXRSQUlEIDN4eHgvNHh4eCBDb250cm9sbGVyIGRyaXZlciI7Ci1zdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfdmVyW10gPSAidjEuMyAoMDcxMjAzKSI7CitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfdmVyW10gPSAidjEuNiAoMDkwOTEwKSI7CiAKIHN0YXRpYyBpbnQgaW9wX3NlbmRfc3luY19tc2coc3RydWN0IGhwdGlvcF9oYmEgKmhiYSwgdTMyIG1zZywgdTMyIG1pbGxpc2VjKTsKIHN0YXRpYyB2b2lkIGhwdGlvcF9maW5pc2hfc2NzaV9yZXEoc3RydWN0IGhwdGlvcF9oYmEgKmhiYSwgdTMyIHRhZywKQEAgLTExNSw5ICsxMTUsMTMgQEAKIHN0YXRpYyBpbnQgaW9wX2ludHJfaXRsKHN0cnVjdCBocHRpb3BfaGJhICpoYmEpCiB7CiAJc3RydWN0IGhwdF9pb3BtdV9pdGwgX19pb21lbSAqaW9wID0gaGJhLT51Lml0bC5pb3A7CisJdm9pZCBfX2lvbWVtICpwbHggPSBoYmEtPnUuaXRsLnBseDsKIAl1MzIgc3RhdHVzOwogCWludCByZXQgPSAwOwogCisJaWYgKHBseCAmJiByZWFkbChwbHggKyAweDExQzVDKSAmIDB4ZikKKwkJd3JpdGVsKDEsIHBseCArIDB4MTFDNjApOworCiAJc3RhdHVzID0gcmVhZGwoJmlvcC0+b3V0Ym91bmRfaW50c3RhdHVzKTsKIAogCWlmIChzdGF0dXMgJiBJT1BNVV9PVVRCT1VORF9JTlRfTVNHMCkgewpAQCAtNDYwLDE1ICs0NjQsMjUgQEAKIAogc3RhdGljIGludCBocHRpb3BfbWFwX3BjaV9iYXJfaXRsKHN0cnVjdCBocHRpb3BfaGJhICpoYmEpCiB7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IGhiYS0+cGNpZGV2OwogCWhiYS0+dS5pdGwuaW9wID0gaHB0aW9wX21hcF9wY2lfYmFyKGhiYSwgMCk7Ci0JaWYgKGhiYS0+dS5pdGwuaW9wKQotCQlyZXR1cm4gMDsKLQllbHNlCisJaWYgKGhiYS0+dS5pdGwuaW9wID09IE5VTEwpCiAJCXJldHVybiAtMTsKKwlpZiAoKHBjaWRldi0+ZGV2aWNlICYgMHhmZjAwKSA9PSAweDQ0MDApIHsKKwkJaGJhLT51Lml0bC5wbHggPSBoYmEtPnUuaXRsLmlvcDsKKwkJaGJhLT51Lml0bC5pb3AgPSBocHRpb3BfbWFwX3BjaV9iYXIoaGJhLCAyKTsKKwkJaWYgKGhiYS0+dS5pdGwuaW9wID09IE5VTEwpIHsKKwkJCWlvdW5tYXAoaGJhLT51Lml0bC5wbHgpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBocHRpb3BfdW5tYXBfcGNpX2Jhcl9pdGwoc3RydWN0IGhwdGlvcF9oYmEgKmhiYSkKIHsKKwlpZiAoaGJhLT51Lml0bC5wbHgpCisJCWlvdW5tYXAoaGJhLT51Lml0bC5wbHgpOwogCWlvdW5tYXAoaGJhLT51Lml0bC5pb3ApOwogfQogCkBAIC0xMjM5LDIyICsxMjUzLDIzIEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHB0aW9wX2lkX3RhYmxlW10gPSB7CiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzIyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzMzIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAotCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCi0JeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKKwl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNDEwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MTApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzUxMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKKwl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MjEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzUyMiksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNDEwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAotCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1NDApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzUzMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKKwl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTQwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1NjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCi0JeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMiksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzIxKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQyMTApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4NDIxMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzEwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMTEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKKwl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzIxKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4NDQwMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzMTIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfbXZfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzEyMiksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX212X29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDMwMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9tdl9vcHMgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuaCBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuaAppbmRleCBhMDI4OWYyLi4wYjg3MWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIEhpZ2hQb2ludCBSUjN4eHgvNHh4eCBjb250cm9sbGVyIGRyaXZlciBmb3IgTGludXgKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IEhpZ2hQb2ludCBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IEhpZ2hQb2ludCBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIyOCw2ICsyMjgsNyBAQAogCXVuaW9uIHsKIAkJc3RydWN0IHsKIAkJCXN0cnVjdCBocHRfaW9wbXVfaXRsIF9faW9tZW0gKmlvcDsKKwkJCXZvaWQgX19pb21lbSAqcGx4OwogCQl9IGl0bDsKIAkJc3RydWN0IHsKIAkJCXN0cnVjdCBocHRfaW9wbXZfcmVncyAqcmVnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCA1ZjA0NTUwLi43NmQyOTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC00MTg5LDYgKzQxODksMjUgQEAKIH0KIAogLyoqCisgKiBpcHJfaXNyX2VoIC0gSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBlcnJvciBoYW5kbGVyCisgKiBAaW9hX2NmZzoJaW9hIGNvbmZpZyBzdHJ1Y3QKKyAqIEBtc2c6CW1lc3NhZ2UgdG8gbG9nCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCW5vbmUKKyAqKi8KK3N0YXRpYyB2b2lkIGlwcl9pc3JfZWgoc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnLCBjaGFyICptc2cpCit7CisJaW9hX2NmZy0+ZXJyb3JzX2xvZ2dlZCsrOworCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgIiVzXG4iLCBtc2cpOworCisJaWYgKFdBSVRfRk9SX0RVTVAgPT0gaW9hX2NmZy0+c2R0X3N0YXRlKQorCQlpb2FfY2ZnLT5zZHRfc3RhdGUgPSBHRVRfRFVNUDsKKworCWlwcl9pbml0aWF0ZV9pb2FfcmVzZXQoaW9hX2NmZywgSVBSX1NIVVRET1dOX05PTkUpOworfQorCisvKioKICAqIGlwcl9pc3IgLSBJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCiAgKiBAaXJxOglpcnEgbnVtYmVyCiAgKiBAZGV2cDoJcG9pbnRlciB0byBpb2EgY29uZmlnIHN0cnVjdApAQCAtNDIwMyw2ICs0MjIyLDcgQEAKIAl2b2xhdGlsZSB1MzIgaW50X3JlZywgaW50X21hc2tfcmVnOwogCXUzMiBpb2FzYzsKIAl1MTYgY21kX2luZGV4OworCWludCBudW1faHJycSA9IDA7CiAJc3RydWN0IGlwcl9jbW5kICppcHJfY21kOwogCWlycXJldHVybl90IHJjID0gSVJRX05PTkU7CiAKQEAgLTQyMzMsMTMgKzQyNTMsNyBAQAogCQkJCSAgICAgSVBSX0hSUlFfUkVRX1JFU1BfSEFORExFX01BU0spID4+IElQUl9IUlJRX1JFUV9SRVNQX0hBTkRMRV9TSElGVDsKIAogCQkJaWYgKHVubGlrZWx5KGNtZF9pbmRleCA+PSBJUFJfTlVNX0NNRF9CTEtTKSkgewotCQkJCWlvYV9jZmctPmVycm9yc19sb2dnZWQrKzsKLQkJCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsICJJbnZhbGlkIHJlc3BvbnNlIGhhbmRsZSBmcm9tIElPQVxuIik7Ci0KLQkJCQlpZiAoV0FJVF9GT1JfRFVNUCA9PSBpb2FfY2ZnLT5zZHRfc3RhdGUpCi0JCQkJCWlvYV9jZmctPnNkdF9zdGF0ZSA9IEdFVF9EVU1QOwotCi0JCQkJaXByX2luaXRpYXRlX2lvYV9yZXNldChpb2FfY2ZnLCBJUFJfU0hVVERPV05fTk9ORSk7CisJCQkJaXByX2lzcl9laChpb2FfY2ZnLCAiSW52YWxpZCByZXNwb25zZSBoYW5kbGUgZnJvbSBJT0EiKTsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQkJfQpAQCAtNDI2Niw4ICs0MjgwLDE4IEBACiAKIAkJaWYgKGlwcl9jbWQgIT0gTlVMTCkgewogCQkJLyogQ2xlYXIgdGhlIFBDSSBpbnRlcnJ1cHQgKi8KLQkJCXdyaXRlbChJUFJfUENJSV9IUlJRX1VQREFURUQsIGlvYV9jZmctPnJlZ3MuY2xyX2ludGVycnVwdF9yZWcpOwotCQkJaW50X3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X3JlZykgJiB+aW50X21hc2tfcmVnOworCQkJZG8geworCQkJCXdyaXRlbChJUFJfUENJSV9IUlJRX1VQREFURUQsIGlvYV9jZmctPnJlZ3MuY2xyX2ludGVycnVwdF9yZWcpOworCQkJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWcpICYgfmludF9tYXNrX3JlZzsKKwkJCX0gd2hpbGUgKGludF9yZWcgJiBJUFJfUENJSV9IUlJRX1VQREFURUQgJiYKKwkJCQkJbnVtX2hycnErKyA8IElQUl9NQVhfSFJSUV9SRVRSSUVTKTsKKworCQkJaWYgKGludF9yZWcgJiBJUFJfUENJSV9IUlJRX1VQREFURUQpIHsKKwkJCQlpcHJfaXNyX2VoKGlvYV9jZmcsICJFcnJvciBjbGVhcmluZyBIUlJRIik7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCX0KKwogCQl9IGVsc2UKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuaCBiL2RyaXZlcnMvc2NzaS9pcHIuaAppbmRleCAxNjMyNDVhLi4xOWJiY2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmgKKysrIGIvZHJpdmVycy9zY3NpL2lwci5oCkBAIC0xNDQsNiArMTQ0LDcgQEAKICNkZWZpbmUgSVBSX0lPQV9NQVhfU0VDVE9SUwkJCQkzMjc2NwogI2RlZmluZSBJUFJfVlNFVF9NQVhfU0VDVE9SUwkJCQk1MTIKICNkZWZpbmUgSVBSX01BWF9DREJfTEVOCQkJCQkxNgorI2RlZmluZSBJUFJfTUFYX0hSUlFfUkVUUklFUwkJCQkzCiAKICNkZWZpbmUgSVBSX0RFRkFVTFRfQlVTX1dJRFRICQkJCTE2CiAjZGVmaW5lIElQUl84ME1Cc19TQ1NJX1JBVEUJCSgoODAgKiAxMCkgLyAoSVBSX0RFRkFVTFRfQlVTX1dJRFRIIC8gOCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKaW5kZXggMmIxYjgzNC4uZWRjNDljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwpAQCAtODExLDcgKzgxMSw3IEBACiAJCWdvdG8gZnJlZV9ob3N0OwogCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9zZXNzaW9uX3NldHVwKCZpc2NzaV9zd190Y3BfdHJhbnNwb3J0LCBzaG9zdCwKLQkJCQkJICBjbWRzX21heCwKKwkJCQkJICBjbWRzX21heCwgMCwKIAkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX3RjcF90YXNrKSArCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9zd190Y3BfaGRyYnVmKSwKIAkJCQkJICBpbml0aWFsX2NtZHNuLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKaW5kZXggOGRjNzNjNC4uZjFhNDI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKQEAgLTI0MzYsNyArMjQzNiw3IEBACiAgKi8KIHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqCiBpc2NzaV9zZXNzaW9uX3NldHVwKHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKmlzY3NpdCwgc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCi0JCSAgICB1aW50MTZfdCBjbWRzX21heCwgaW50IGNtZF90YXNrX3NpemUsCisJCSAgICB1aW50MTZfdCBjbWRzX21heCwgaW50IGRkX3NpemUsIGludCBjbWRfdGFza19zaXplLAogCQkgICAgdWludDMyX3QgaW5pdGlhbF9jbWRzbiwgdW5zaWduZWQgaW50IGlkKQogewogCXN0cnVjdCBpc2NzaV9ob3N0ICppaG9zdCA9IHNob3N0X3ByaXYoc2hvc3QpOwpAQCAtMjQ4Niw3ICsyNDg2LDggQEAKIAlzY3NpX2NtZHMgPSB0b3RhbF9jbWRzIC0gSVNDU0lfTUdNVF9DTURTX01BWDsKIAogCWNsc19zZXNzaW9uID0gaXNjc2lfYWxsb2Nfc2Vzc2lvbihzaG9zdCwgaXNjc2l0LAotCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfc2Vzc2lvbikpOworCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfc2Vzc2lvbikgKworCQkJCQkgIGRkX3NpemUpOwogCWlmICghY2xzX3Nlc3Npb24pCiAJCWdvdG8gZGVjX3Nlc3Npb25fY291bnQ7CiAJc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwpAQCAtMjUwMyw2ICsyNTA0LDcgQEAKIAlzZXNzaW9uLT5tYXhfY21kc24gPSBpbml0aWFsX2NtZHNuICsgMTsKIAlzZXNzaW9uLT5tYXhfcjJ0ID0gMTsKIAlzZXNzaW9uLT50dCA9IGlzY3NpdDsKKwlzZXNzaW9uLT5kZF9kYXRhID0gY2xzX3Nlc3Npb24tPmRkX2RhdGEgKyBzaXplb2YoKnNlc3Npb24pOwogCW11dGV4X2luaXQoJnNlc3Npb24tPmVoX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmc2Vzc2lvbi0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCmluZGV4IGIzMzgxOTUuLjMzY2Y5ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYwpAQCAtOTYwLDcgKzk2MCw2IEBACiAKIAkJCX0KIAkJfQotCQlyZXMgPSAwOwogCX0KIAogCXJldHVybiByZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IDYxZDA4OTcuLmM4OGY1OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC01Niw4ICs1Niw2IEBACiAJIlNDU0lfUFJPVF9XUklURV9JTlNFUlQiLAogCSJTQ1NJX1BST1RfUkVBRF9QQVNTIiwKIAkiU0NTSV9QUk9UX1dSSVRFX1BBU1MiLAotCSJTQ1NJX1BST1RfUkVBRF9DT05WRVJUIiwKLQkiU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQiCiB9Owogc3RhdGljIHZvaWQKIGxwZmNfcmVsZWFzZV9zY3NpX2J1Zl9zNChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3Njc2lfYnVmICpwc2IpOwpAQCAtMTEzMSwxMyArMTEyOSwxMSBAQAogCQkJcmV0X3Byb2YgPSBMUEZDX1BST0ZfQTE7CiAJCQlicmVhazsKIAotCQljYXNlIFNDU0lfUFJPVF9SRUFEX0NPTlZFUlQ6Ci0JCWNhc2UgU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQ6CisJCWNhc2UgU0NTSV9QUk9UX1JFQURfUEFTUzoKKwkJY2FzZSBTQ1NJX1BST1RfV1JJVEVfUEFTUzoKIAkJCXJldF9wcm9mID0gTFBGQ19QUk9GX0FTVDE7CiAJCQlicmVhazsKIAotCQljYXNlIFNDU0lfUFJPVF9SRUFEX1BBU1M6Ci0JCWNhc2UgU0NTSV9QUk9UX1dSSVRFX1BBU1M6CiAJCWNhc2UgU0NTSV9QUk9UX05PUk1BTDoKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUiAiQmFkIG9wL2d1YXJkOiVkLyVkIGNvbWJpbmF0aW9uXG4iLApAQCAtMTE1Nyw4ICsxMTUzLDYgQEAKIAkJCXJldF9wcm9mID0gTFBGQ19QUk9GX0MxOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTQ1NJX1BST1RfUkVBRF9DT05WRVJUOgotCQljYXNlIFNDU0lfUFJPVF9XUklURV9DT05WRVJUOgogCQljYXNlIFNDU0lfUFJPVF9SRUFEX0lOU0VSVDoKIAkJY2FzZSBTQ1NJX1BST1RfV1JJVEVfU1RSSVA6CiAJCWNhc2UgU0NTSV9QUk9UX05PUk1BTDoKQEAgLTEyMDksOCArMTIwMyw3IEBACiAJc3RhdGljIGludCBjbnQ7CiAKIAlpZiAocHJvdGNudCAmJiAob3AgPT0gU0NTSV9QUk9UX1dSSVRFX1NUUklQIHx8Ci0JCQkJb3AgPT0gU0NTSV9QUk9UX1dSSVRFX1BBU1MgfHwKLQkJCQlvcCA9PSBTQ1NJX1BST1RfV1JJVEVfQ09OVkVSVCkpIHsKKwkJCQlvcCA9PSBTQ1NJX1BST1RfV1JJVEVfUEFTUykpIHsKIAogCQljbnQrKzsKIAkJc3B0ID0gcGFnZV9hZGRyZXNzKHNnX3BhZ2Uoc2NzaV9wcm90X3NnbGlzdChzYykpKSArCkBAIC0xNTAxLDggKzE0OTQsNiBAQAogCWNhc2UgU0NTSV9QUk9UX1dSSVRFX1NUUklQOgogCWNhc2UgU0NTSV9QUk9UX1JFQURfUEFTUzoKIAljYXNlIFNDU0lfUFJPVF9XUklURV9QQVNTOgotCWNhc2UgU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQ6Ci0JY2FzZSBTQ1NJX1BST1RfUkVBRF9DT05WRVJUOgogCQlyZXQgPSBMUEZDX1BHX1RZUEVfRElGX0JVRjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCmluZGV4IDRhODY4NTUuLjcwYzRjMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZwpAQCAtMiw3ICsyLDcgQEAKICMgS2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIE1QVDJTQVMKICMKICMgVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKLSMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAjICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKaW5kZXggN2JiMmVjZS4uZjlmNmMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCkBAIC04LDcgKzgsNyBAQAogICogICAgICAgICAgICAgICAgICBzY2F0dGVyL2dhdGhlciBmb3JtYXRzLgogICogIENyZWF0aW9uIERhdGU6ICBKdW5lIDIxLCAyMDA2CiAgKgotICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMTEKKyAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjEyCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtNDUsNiArNDUsMTMgQEAKICAqICAxMC0wMi0wOCAgMDIuMDAuMTAgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBMVU4gZmllbGQgZGVmaW5lcyBmcm9tIG1waTJfaW5pdC5oLgogICogIDAxLTE5LTA5ICAwMi4wMC4xMSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMTIgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBJbiBhbGwgcmVxdWVzdCBhbmQgcmVwbHkgZGVzY3JpcHRvcnMsIHJlcGxhY2VkIFZGX0lECisgKiAgICAgICAgICAgICAgICAgICAgICBmaWVsZCB3aXRoIE1TSXhJbmRleCBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgRGV2SGFuZGxlIGZpZWxkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgYW5kIG1hZGUgdGhvc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUkFJRCBBY2NlbGVyYXRvciBmdW5jdGlvbmFsaXR5LgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtNzAsNyArNzcsNyBAQAogI2RlZmluZSBNUEkyX1ZFUlNJT05fMDJfMDAgICAgICAgICAgICAgICAgICAoMHgwMjAwKQogCiAvKiB2ZXJzaW9uaW5nIGZvciB0aGlzIE1QSSBoZWFkZXIgc2V0ICovCi0jZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCAgICAgICAgICAgICgweDBCKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAoMHgwQykKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVYgICAgICAgICAgICAgKDB4MDApCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9NQVNLICAgICAgICgweEZGMDApCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9TSElGVCAgICAgICg4KQpAQCAtMjU3LDcgKzI2NCw3IEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9ERUZBVUxUX1JFUVVFU1RfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLwogICAgIFUxNiAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZURlcGVuZGVudDsgICAgLyogMHgwNiAqLwpAQCAtMjcxLDYgKzI3OCw3IEBACiAjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1NDU0lfVEFSR0VUICAgICAgICAgICAgICgweDAyKQogI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ISUdIX1BSSU9SSVRZICAgICAgICAgICAoMHgwNikKICNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfREVGQVVMVF9UWVBFICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1JBSURfQUNDRUxFUkFUT1IgICAgICAgICgweDBBKQogCiAjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0lPQ19GSUZPX01BUktFUiAoMHgwMSkKIApAQCAtMjc5LDcgKzI4Nyw3IEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLwogICAgIFUxNiAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLwpAQCAtMjkzLDcgKzMwMSw3IEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQ1NJX0lPX1JFUVVFU1RfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLwogICAgIFUxNiAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLwpAQCAtMzA2LDcgKzMxNCw3IEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KICAgICBVMTYgICAgICAgICAgICAgSW9JbmRleDsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KQEAgLTMxNSwxNCArMzIzLDI5IEBACiAgIE1waTJTQ1NJVGFyZ2V0UmVxdWVzdERlc2NyaXB0b3JfdCwKICAgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSVRhcmdldFJlcXVlc3REZXNjcmlwdG9yX3Q7CiAKKworLyogUkFJRCBBY2NlbGVyYXRvciBSZXF1ZXN0IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfQUNDRUxfUkVRVUVTVF9ERVNDUklQVE9SIHsKKyAgICBVOCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVMTYgICAgICAgICAgICAgUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK30gTVBJMl9SQUlEX0FDQ0VMX1JFUVVFU1RfREVTQ1JJUFRPUiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNDRUxfUkVRVUVTVF9ERVNDUklQVE9SLAorICBNcGkyUkFJREFjY2VsZXJhdG9yUmVxdWVzdERlc2NyaXB0b3JfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyUkFJREFjY2VsZXJhdG9yUmVxdWVzdERlc2NyaXB0b3JfdDsKKworCiAvKiB1bmlvbiBvZiBSZXF1ZXN0IERlc2NyaXB0b3JzICovCiB0eXBlZGVmIHVuaW9uIF9NUEkyX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTgogewotICAgIE1QSTJfREVGQVVMVF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICBEZWZhdWx0OwotICAgIE1QSTJfSElHSF9QUklPUklUWV9SRVFVRVNUX0RFU0NSSVBUT1IgICBIaWdoUHJpb3JpdHk7Ci0gICAgTVBJMl9TQ1NJX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgIFNDU0lJTzsKLSAgICBNUEkyX1NDU0lfVEFSR0VUX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgU0NTSVRhcmdldDsKLSAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZHM7CisgICAgTVBJMl9ERUZBVUxUX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgICAgICBEZWZhdWx0OworICAgIE1QSTJfSElHSF9QUklPUklUWV9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgSGlnaFByaW9yaXR5OworICAgIE1QSTJfU0NTSV9JT19SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICAgICAgU0NTSUlPOworICAgIE1QSTJfU0NTSV9UQVJHRVRfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgU0NTSVRhcmdldDsKKyAgICBNUEkyX1JBSURfQUNDRUxfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgIFJBSURBY2NlbGVyYXRvcjsKKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmRzOwogfSBNUEkyX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiwKICAgTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90OwogCkBAIC0zMzMsMTkgKzM1NiwyMCBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIERlc2NyaXB0b3JUeXBlRGVwZW5kZW50MTsgICAvKiAweDAyICovCiAgICAgVTMyICAgICAgICAgICAgIERlc2NyaXB0b3JUeXBlRGVwZW5kZW50MjsgICAvKiAweDA0ICovCiB9IE1QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SLAogICBNcGkyRGVmYXVsdFJlcGx5RGVzY3JpcHRvcl90LCBNUEkyX1BPSU5URVIgcE1waTJEZWZhdWx0UmVwbHlEZXNjcmlwdG9yX3Q7CiAKIC8qIGRlZmluZXMgZm9yIHRoZSBSZXBseUZsYWdzIGZpZWxkICovCi0jZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RZUEVfTUFTSyAgICAgICAgICAgICAgICgweDBGKQotI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19TQ1NJX0lPX1NVQ0NFU1MgICAgICAgICAoMHgwMCkKLSNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfQUREUkVTU19SRVBMWSAgICAgICAgICAgKDB4MDEpCi0jZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVEFTU0lTVF9TVUNDRVNTICAgICgweDAyKQotI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRfQ09NTUFORF9CVUZGRVIgICAoMHgwMykKLSNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVU5VU0VEICAgICAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfU0NTSV9JT19TVUNDRVNTICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19BRERSRVNTX1JFUExZICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVEFTU0lTVF9TVUNDRVNTICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVEFSR0VUX0NPTU1BTkRfQlVGRkVSICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19SQUlEX0FDQ0VMRVJBVE9SX1NVQ0NFU1MgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1VOVVNFRCAgICAgICAgICAgICAgICAgICAgICAoMHgwRikKIAogLyogdmFsdWVzIGZvciBtYXJraW5nIGEgcmVwbHkgZGVzY3JpcHRvciBhcyB1bnVzZWQgKi8KICNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfVU5VU0VEX1dPUkQwX01BUksgICAgICAgICAgICAgKDB4RkZGRkZGRkYpCkBAIC0zNTUsNyArMzc5LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFUzMiAgICAgICAgICAgICBSZXBseUZyYW1lQWRkcmVzczsgICAgICAgICAgLyogMHgwNCAqLwogfSBNUEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiwKQEAgLTM2OCwxMCArMzkyLDEwIEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFUxNiAgICAgICAgICAgICBUYXNrVGFnOyAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLwotICAgIFUxNiAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFUxNiAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLwogfSBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SLAogICBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCiAgIE1waTJTQ1NJSU9TdWNjZXNzUmVwbHlEZXNjcmlwdG9yX3QsCkBAIC0zODIsNyArNDA2LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVOCAgICAgICAgICAgICAgU2VxdWVuY2VOdW1iZXI7ICAgICAgICAgICAgIC8qIDB4MDQgKi8KICAgICBVOCAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDUgKi8KQEAgLTM5Nyw3ICs0MjEsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfVEFSR0VUX0NPTU1BTkRfQlVGRkVSX1JFUExZX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVOCAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KICAgICBVOCAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KICAgICBVMTYgICAgICAgICAgICAgSW5pdGlhdG9yRGV2SGFuZGxlOyAgICAgICAgIC8qIDB4MDQgKi8KQEAgLTQxMSwxNSArNDM1LDI4IEBACiAjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX1RDQl9GTEFHU19QSFlOVU1fTUFTSyAgICAgKDB4M0YpCiAKIAorLyogUkFJRCBBY2NlbGVyYXRvciBTdWNjZXNzIFJlcGx5IERlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1JBSURfQUNDRUxFUkFUT1JfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SIHsKKyAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMzIgICAgICAgICAgICAgUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KK30gTVBJMl9SQUlEX0FDQ0VMRVJBVE9SX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1JBSURfQUNDRUxFUkFUT1JfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SLAorICBNcGkyUkFJREFjY2VsZXJhdG9yU3VjY2Vzc1JlcGx5RGVzY3JpcHRvcl90LAorICBNUEkyX1BPSU5URVIgcE1waTJSQUlEQWNjZWxlcmF0b3JTdWNjZXNzUmVwbHlEZXNjcmlwdG9yX3Q7CisKKwogLyogdW5pb24gb2YgUmVwbHkgRGVzY3JpcHRvcnMgKi8KIHR5cGVkZWYgdW5pb24gX01QSTJfUkVQTFlfREVTQ1JJUFRPUlNfVU5JT04KIHsKLSAgICBNUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUiAgICAgICAgICAgICAgIERlZmF1bHQ7Ci0gICAgTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgICAgICBBZGRyZXNzUmVwbHk7Ci0gICAgTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiAgICAgICBTQ1NJSU9TdWNjZXNzOwotICAgIE1QSTJfVEFSR0VUQVNTSVNUX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiAgVGFyZ2V0QXNzaXN0U3VjY2VzczsKLSAgICBNUEkyX1RBUkdFVF9DT01NQU5EX0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SIFRhcmdldENvbW1hbmRCdWZmZXI7Ci0gICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkczsKKyAgICBNUEkyX0RFRkFVTFRfUkVQTFlfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICBEZWZhdWx0OworICAgIE1QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgIEFkZHJlc3NSZXBseTsKKyAgICBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICBTQ1NJSU9TdWNjZXNzOworICAgIE1QSTJfVEFSR0VUQVNTSVNUX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiAgICAgIFRhcmdldEFzc2lzdFN1Y2Nlc3M7CisgICAgTVBJMl9UQVJHRVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUiAgICAgVGFyZ2V0Q29tbWFuZEJ1ZmZlcjsKKyAgICBNUEkyX1JBSURfQUNDRUxFUkFUT1JfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICBSQUlEQWNjZWxlcmF0b3JTdWNjZXNzOworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmRzOwogfSBNUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkVQTFlfREVTQ1JJUFRPUlNfVU5JT04sCiAgIE1waTJSZXBseURlc2NyaXB0b3JzVW5pb25fdCwgTVBJMl9QT0lOVEVSIHBNcGkyUmVwbHlEZXNjcmlwdG9yc1VuaW9uX3Q7CiAKQEAgLTQ1OCw2ICs0OTUsNyBAQAogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0RJQUdfUkVMRUFTRSAgICAgICAgICAgICAgICAgICgweDFFKSAvKiBEaWFnbm9zdGljIFJlbGVhc2UgKi8KICNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfQ01EX0JVRl9CQVNFX1BPU1QgICAgICAoMHgyNCkgLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFBvc3QgQmFzZSAqLwogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RBUkdFVF9DTURfQlVGX0xJU1RfUE9TVCAgICAgICgweDI1KSAvKiBUYXJnZXQgQ29tbWFuZCBCdWZmZXIgUG9zdCBMaXN0ICovCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fUkFJRF9BQ0NFTEVSQVRPUiAgICAgICAgICAgICAgKDB4MkMpIC8qIFJBSUQgQWNjZWxlcmF0b3IqLwogCiAKIApAQCAtNTU1LDEyICs1OTMsMTcgQEAKIAogI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19ESUFHTk9TVElDX1JFTEVBU0VEICAgICAgICAgICgweDAwQTApCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBSQUlEIEFjY2VsZXJhdG9yIHZhbHVlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19SQUlEX0FDQ0VMX0VSUk9SICAgICAgICAgICAgICgweDAwQjApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBJT0NTdGF0dXMgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGxvZyBpbmZvIGlzIGF2YWlsYWJsZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19GTEFHX0xPR19JTkZPX0FWQUlMQUJMRSAgKDB4ODAwMCkKKyNkZWZpbmUgTVBJMl9JT0NTVEFUVVNfRkxBR19MT0dfSU5GT19BVkFJTEFCTEUgICAgICAoMHg4MDAwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgSU9DTG9nSW5mbyBUeXBlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCmluZGV4IDJmMjdjZjYuLmFiNDdjNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBDb25maWd1cmF0aW9uIG1lc3NhZ2VzIGFuZCBwYWdlcwogICogIENyZWF0aW9uIERhdGU6ICBOb3ZlbWJlciAxMCwgMjAwNgogICoKLSAqICAgIG1waTJfY25mZy5oIFZlcnNpb246ICAwMi4wMC4xMAorICogICAgbXBpMl9jbmZnLmggVmVyc2lvbjogIDAyLjAwLjExCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtOTUsNiArOTUsMTEgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19ERVZJQ0VfQkxPQ0tFRCBkZWZpbmUuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQb3J0R3JvdXBzLCBEbWFHcm91cCwgYW5kIENvbnRyb2xHcm91cCBmaWVsZHMgdG8KICAqICAgICAgICAgICAgICAgICAgICAgIFNBUyBEZXZpY2UgUGFnZSAwLgorICogIDA1LTA2LTA5ICAwMi4wMC4xMSAgQWRkZWQgc3RydWN0dXJlcyBhbmQgZGVmaW5lcyBmb3IgSU8gVW5pdCBQYWdlIDUgYW5kIElPCisgKiAgICAgICAgICAgICAgICAgICAgICBVbml0IFBhZ2UgNi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGV4cGFuZGVyIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSBkYXRhIHRvIFNBUworICogICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXIgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBIWSBQYWdlIDIgYW5kIFNBUyBQSFkgUGFnZSAzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtNzIzLDYgKzcyOCw2NSBAQAogI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UzX0dQSU9fU0VUVElOR19PTiAgICAgICAgICAgICAgICAoMHgwMDAxKQogCiAKKy8qIElPIFVuaXQgUGFnZSA1ICovCisKKy8qCisgKiBVcHBlciBsYXllciBjb2RlIChkcml2ZXJzLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLlBhZ2VMZW5ndGggb3IgTnVtRG1hRW5naW5lcyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfSU9VTklUUEFHRTVfRE1BRU5HSU5FX0VOVFJJRVMKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFFTkdJTkVfRU5UUklFUyAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfNSB7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOwkJCQkvKiAweDAwICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgUmFpZEFjY2VsZXJhdG9yQnVmZmVyQmFzZUFkZHJlc3M7ICAvKiAweDA0ICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgUmFpZEFjY2VsZXJhdG9yQnVmZmVyU2l6ZTsgICAgICAgICAvKiAweDBDICovCisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgUmFpZEFjY2VsZXJhdG9yQ29udHJvbEJhc2VBZGRyZXNzOyAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUkFDb250cm9sU2l6ZTsgICAgICAgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTnVtRG1hRW5naW5lczsgICAgICAgICAgICAgICAgICAgICAvKiAweDFEICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUkFNaW5Db250cm9sU2l6ZTsgICAgICAgICAgICAgICAgICAvKiAweDFFICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUkFNYXhDb250cm9sU2l6ZTsgICAgICAgICAgICAgICAgICAvKiAweDFGICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDI0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDI4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRG1hRW5naW5lQ2FwYWJpbGl0aWVzCisJCQkJW01QSTJfSU9VTklUUEFHRTVfRE1BRU5HSU5FX0VOVFJJRVNdOyAvKiAweDJDICovCit9IE1QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF81LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF81LAorICBNcGkySU9Vbml0UGFnZTVfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9Vbml0UGFnZTVfdDsKKworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAoMHgwMCkKKworLyogZGVmaW5lcyBmb3IgSU8gVW5pdCBQYWdlIDUgRG1hRW5naW5lQ2FwYWJpbGl0aWVzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BX0NBUF9NQVNLX01BWF9SRVFVRVNUUyAgICAgICgweEZGMDApCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BX0NBUF9TSElGVF9NQVhfUkVRVUVTVFMgICAgICgxNikKKworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQV9DQVBfRUVEUCAgICAgICAgICAgICAgICAgICAoMHgwMDA4KQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQV9DQVBfUEFSSVRZX0dFTkVSQVRJT04gICAgICAoMHgwMDA0KQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQV9DQVBfSEFTSElORyAgICAgICAgICAgICAgICAoMHgwMDAyKQorI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQV9DQVBfRU5DUllQVElPTiAgICAgICAgICAgICAoMHgwMDAxKQorCisKKy8qIElPIFVuaXQgUGFnZSA2ICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfNiB7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJBSG9zdENvbnRyb2xTaXplOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBSYWlkQWNjZWxlcmF0b3JIb3N0Q29udHJvbEJhc2VBZGRyZXNzOyAgLyogMHgwOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworfSBNUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfNiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0lPX1VOSVRfNiwKKyAgTXBpMklPVW5pdFBhZ2U2X3QsIE1QSTJfUE9JTlRFUiBwTXBpMklPVW5pdFBhZ2U2X3Q7CisKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNl9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgKDB4MDApCisKKy8qIGRlZmluZXMgZm9yIElPIFVuaXQgUGFnZSA2IEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTZfRkxBR1NfRU5BQkxFX1JBSURfQUNDRUxFUkFUT1IgICgweDAwMDEpCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICBJT0MgQ29uZmlnIFBhZ2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTcwOSwxMCArMTc3MywxNCBAQAogICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2ZVpvbmVNYW5hZ2VyU0FTQWRkcmVzczsvKiAweDJDICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWm9uZUxvY2tJbmFjdGl2aXR5TGltaXQ7ICAgIC8qIDB4MzQgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgzNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVUb1JlZHVjZWRGdW5jOyAgICAgICAgICAvKiAweDM4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbFRpbWVUb1JlZHVjZWRGdW5jOyAgIC8qIDB4MzkgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhSZWR1Y2VkRnVuY1RpbWU7ICAgICAgICAgLyogMHgzQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDNCICovCiB9IE1QSTJfQ09ORklHX1BBR0VfRVhQQU5ERVJfMCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX0VYUEFOREVSXzAsCiAgIE1waTJFeHBhbmRlclBhZ2UwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV4cGFuZGVyUGFnZTBfdDsKIAotI2RlZmluZSBNUEkyX1NBU0VYUEFOREVSMF9QQUdFVkVSU0lPTiAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9TQVNFWFBBTkRFUjBfUEFHRVZFUlNJT04gICAgICAgKDB4MDYpCiAKIC8qIHZhbHVlcyBmb3IgU0FTIEV4cGFuZGVyIFBhZ2UgMCBEaXNjb3ZlcnlTdGF0dXMgZmllbGQgKi8KICNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX01BWF9FTkNMT1NVUkVTX0VYQ0VFRCAgICAgICAgICgweDgwMDAwMDAwKQpAQCAtMTczNyw2ICsxODA1LDcgQEAKICNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0RTX0xPT1BfREVURUNURUQgICAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQogCiAvKiB2YWx1ZXMgZm9yIFNBUyBFeHBhbmRlciBQYWdlIDAgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX1JFRFVDRURfRlVOQ1RJT05BTElUWSAgICAgICgweDIwMDApCiAjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19aT05FX0xPQ0tFRCAgICAgICAgICAgICAgICAoMHgxMDAwKQogI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfU1VQUE9SVEVEX1BIWVNJQ0FMX1BSRVMgICAgKDB4MDgwMCkKICNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX0FTU0VSVEVEX1BIWVNJQ0FMX1BSRVMgICAgICgweDA0MDApCkBAIC0xOTQ0LDYgKzIwMTMsMTMzIEBACiAjZGVmaW5lIE1QSTJfU0FTUEhZMV9QQUdFVkVSU0lPTiAgICAgICAgICAgICgweDAxKQogCiAKKy8qIFNBUyBQSFkgUGFnZSAyICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NBU1BIWTJfUEhZX0VWRU5UIHsKKyAgICBVOCAgICAgICAgICBQaHlFdmVudENvZGU7ICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMzIgICAgICAgICBQaHlFdmVudEluZm87ICAgICAgIC8qIDB4MDQgKi8KK30gTVBJMl9TQVNQSFkyX1BIWV9FVkVOVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NBU1BIWTJfUEhZX0VWRU5ULAorICBNcGkyU2FzUGh5MlBoeUV2ZW50X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeTJQaHlFdmVudF90OworCisvKiB1c2UgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfIGZvciB0aGUgUGh5RXZlbnRDb2RlIGZpZWxkICovCisKKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5FeHRQYWdlTGVuZ3RoIG9yIE51bVBoeUV2ZW50cyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfU0FTUEhZMl9QSFlfRVZFTlRfTUFYCisjZGVmaW5lIE1QSTJfU0FTUEhZMl9QSFlfRVZFTlRfTUFYICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8yIHsKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtUGh5RXZlbnRzOyAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgTVBJMl9TQVNQSFkyX1BIWV9FVkVOVCAgICAgICAgICAgICAgUGh5RXZlbnRbTVBJMl9TQVNQSFkyX1BIWV9FVkVOVF9NQVhdOworCQkJCQkJCQkvKiAweDEwICovCit9IE1QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8yLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8yLAorICBNcGkyU2FzUGh5UGFnZTJfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUGh5UGFnZTJfdDsKKworI2RlZmluZSBNUEkyX1NBU1BIWTJfUEFHRVZFUlNJT04gICAgICAgICAgICAoMHgwMCkKKworCisvKiBTQVMgUEhZIFBhZ2UgMyAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9DT05GSUcgeworICAgIFU4ICAgICAgICAgIFBoeUV2ZW50Q29kZTsgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgIENvdW50ZXJUeXBlOyAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgIFRocmVzaG9sZFdpbmRvdzsgICAgLyogMHgwNSAqLworICAgIFU4ICAgICAgICAgIFRpbWVVbml0czsgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMHgwNyAqLworICAgIFUzMiAgICAgICAgIEV2ZW50VGhyZXNob2xkOyAgICAgLyogMHgwOCAqLworICAgIFUxNiAgICAgICAgIFRocmVzaG9sZEZsYWdzOyAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgLyogMHgwRSAqLworfSBNUEkyX1NBU1BIWTNfUEhZX0VWRU5UX0NPTkZJRywgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NBU1BIWTNfUEhZX0VWRU5UX0NPTkZJRywKKyAgTXBpMlNhc1BoeTNQaHlFdmVudENvbmZpZ190LCBNUEkyX1BPSU5URVIgcE1waTJTYXNQaHkzUGh5RXZlbnRDb25maWdfdDsKKworLyogdmFsdWVzIGZvciBQaHlFdmVudENvZGUgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfTk9fRVZFTlQgICAgICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9JTlZBTElEX0RXT1JEICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JVTk5JTkdfRElTUEFSSVRZX0VSUk9SICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfTE9TU19EV09SRF9TWU5DICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9QSFlfUkVTRVRfUFJPQkxFTSAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX0VMQVNUSUNJVFlfQlVGX09WRVJGTE9XICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfRVJST1IgICAgICAgICAgICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9BRERSX0ZSQU1FX0VSUk9SICAgICAgICAgKDB4MjApCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX0FDX09QRU5fUkVKRUNUICAgICAgICAgICAoMHgyMSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfQUNfT1BFTl9SRUpFQ1QgICAgICAgICAgICgweDIyKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9SQ19PUEVOX1JFSkVDVCAgICAgICAgICAgKDB4MjMpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX1JDX09QRU5fUkVKRUNUICAgICAgICAgICAoMHgyNCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfQUlQX1BBUlRJQUxfV0FJVElOR19PTiAgICgweDI1KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9BSVBfQ09OTkVDVF9XQUlUSU5HX09OICAgKDB4MjYpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX0JSRUFLICAgICAgICAgICAgICAgICAgICAoMHgyNykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfQlJFQUsgICAgICAgICAgICAgICAgICAgICgweDI4KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9CUkVBS19USU1FT1VUICAgICAgICAgICAgICAgKDB4MjkpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX0NPTk5FQ1RJT04gICAgICAgICAgICAgICAgICAoMHgyQSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUEVBS1RYX1BBVEhXQVlfQkxPQ0tFRCAgICAgICgweDJCKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9QRUFLVFhfQVJCX1dBSVRfVElNRSAgICAgICAgKDB4MkMpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1BFQUtfQVJCX1dBSVRfVElNRSAgICAgICAgICAoMHgyRCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUEVBS19DT05ORUNUX1RJTUUgICAgICAgICAgICgweDJFKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9TU1BfRlJBTUVTICAgICAgICAgICAgICAgKDB4NDApCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX1NTUF9GUkFNRVMgICAgICAgICAgICAgICAoMHg0MSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfU1NQX0VSUk9SX0ZSQU1FUyAgICAgICAgICgweDQyKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9TU1BfRVJST1JfRlJBTUVTICAgICAgICAgKDB4NDMpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX0NSRURJVF9CTE9DS0VEICAgICAgICAgICAoMHg0NCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfQ1JFRElUX0JMT0NLRUQgICAgICAgICAgICgweDQ1KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9TQVRBX0ZSQU1FUyAgICAgICAgICAgICAgKDB4NTApCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX1NBVEFfRlJBTUVTICAgICAgICAgICAgICAoMHg1MSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfU0FUQV9PVkVSRkxPVyAgICAgICAgICAgICAgICgweDUyKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9TTVBfRlJBTUVTICAgICAgICAgICAgICAgKDB4NjApCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX1NNUF9GUkFNRVMgICAgICAgICAgICAgICAoMHg2MSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfU01QX0VSUk9SX0ZSQU1FUyAgICAgICAgICgweDYzKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9IT1RQTFVHX1RJTUVPVVQgICAgICAgICAgICAgKDB4RDApCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX01JU0FMSUdORURfTVVYX1BSSU1JVElWRSAgICAoMHhEMSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfQUlQICAgICAgICAgICAgICAgICAgICAgICgweEQyKQorCisvKiB2YWx1ZXMgZm9yIHRoZSBDb3VudGVyVHlwZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU1BIWTNfQ09VTlRFUl9UWVBFX1dSQVBQSU5HICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0FTUEhZM19DT1VOVEVSX1RZUEVfU0FUVVJBVElORyAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0NPVU5URVJfVFlQRV9QRUFLX1ZBTFVFICAgICAgICAgICAgICAgICgweDAyKQorCisvKiB2YWx1ZXMgZm9yIHRoZSBUaW1lVW5pdHMgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1RJTUVfVU5JVFNfMTBfTUlDUk9TRUNPTkRTICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfVElNRV9VTklUU18xMDBfTUlDUk9TRUNPTkRTICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19USU1FX1VOSVRTXzFfTUlMTElTRUNPTkQgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1RJTUVfVU5JVFNfMTBfTUlMTElTRUNPTkRTICAgICAgICAgICAgICgweDAzKQorCisvKiB2YWx1ZXMgZm9yIHRoZSBUaHJlc2hvbGRGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU1BIWTNfVEZMQUdTX1BIWV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1RGTEFHU19FVkVOVF9OT1RJRlkgICAgICAgICAgICAgICAgICAgICgweDAwMDEpCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuRXh0UGFnZUxlbmd0aCBvciBOdW1QaHlFdmVudHMgYXQgcnVudGltZS4KKyAqLworI2lmbmRlZiBNUEkyX1NBU1BIWTNfUEhZX0VWRU5UX01BWAorI2RlZmluZSBNUEkyX1NBU1BIWTNfUEhZX0VWRU5UX01BWCAgICAgICgxKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMyB7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeUV2ZW50czsgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIE1QSTJfU0FTUEhZM19QSFlfRVZFTlRfQ09ORklHICAgICAgIFBoeUV2ZW50Q29uZmlnCisJCQkJCVtNUEkyX1NBU1BIWTNfUEhZX0VWRU5UX01BWF07IC8qIDB4MTAgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzMsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzMsCisgIE1waTJTYXNQaHlQYWdlM190LCBNUEkyX1BPSU5URVIgcE1waTJTYXNQaHlQYWdlM190OworCisjZGVmaW5lIE1QSTJfU0FTUEhZM19QQUdFVkVSU0lPTiAgICAgICAgICAgICgweDAwKQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgU0FTIFBvcnQgQ29uZmlnIFBhZ2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaGlzdG9yeS50eHQgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWZjYWEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaGlzdG9yeS50eHQKQEAgLTAsMCArMSwzMzQgQEAKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBGdXNpb24tTVBUIE1QSSAyLjAgSGVhZGVyIEZpbGUgQ2hhbmdlIEhpc3RvcnkKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IExTSSBDb3Jwb3JhdGlvbi4KKworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhlYWRlciBTZXQgUmVsZWFzZSBWZXJzaW9uOiAgICAwMi4wMC4xMgorIEhlYWRlciBTZXQgUmVsZWFzZSBEYXRlOiAgICAgICAwNS0wNi0wOQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgRmlsZW5hbWUgICAgICAgICAgICAgICBDdXJyZW50IHZlcnNpb24gICAgIFByaW9yIHZlcnNpb24KKyAtLS0tLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLSAgICAgLS0tLS0tLS0tLS0tLQorIG1waTIuaCAgICAgICAgICAgICAgICAgMDIuMDAuMTIgICAgICAgICAgICAwMi4wMC4xMQorIG1waTJfY25mZy5oICAgICAgICAgICAgMDIuMDAuMTEgICAgICAgICAgICAwMi4wMC4xMAorIG1waTJfaW5pdC5oICAgICAgICAgICAgMDIuMDAuMDcgICAgICAgICAgICAwMi4wMC4wNgorIG1waTJfaW9jLmggICAgICAgICAgICAgMDIuMDAuMTEgICAgICAgICAgICAwMi4wMC4xMAorIG1waTJfcmFpZC5oICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMworIG1waTJfc2FzLmggICAgICAgICAgICAgMDIuMDAuMDIgICAgICAgICAgICAwMi4wMC4wMgorIG1waTJfdGFyZy5oICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMworIG1waTJfdG9vbC5oICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMgorIG1waTJfdHlwZS5oICAgICAgICAgICAgMDIuMDAuMDAgICAgICAgICAgICAwMi4wMC4wMAorIG1waTJfcmEuaCAgICAgICAgICAgICAgMDIuMDAuMDAKKyBtcGkyX2hpc3RvcnkudHh0ICAgICAgIDAyLjAwLjExICAgICAgICAgICAgMDIuMDAuMTIKKworCisgKiAgRGF0ZSAgICAgIFZlcnNpb24gICBEZXNjcmlwdGlvbgorICogIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTIuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwNi0wNC0wNyAgMDIuMDAuMDEgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDYtMjYtMDcgIDAyLjAwLjAyICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA4LTMxLTA3ICAwMi4wMC4wMyAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIFJlcGx5UG9zdEhvc3RJbmRleCByZWdpc3RlciB0byBvZmZzZXQgMHg2QyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfU1lTVEVNX0lOVEVSRkFDRV9SRUdTIGFuZCBtb2RpZmllZCB0aGUgZGVmaW5lIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9SRVBMWV9QT1NUX0hPU1RfSU5ERVhfT0ZGU0VULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdW5pb24gb2YgcmVxdWVzdCBkZXNjcmlwdG9ycy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHVuaW9uIG9mIHJlcGx5IGRlc2NyaXB0b3JzLgorICogIDEwLTMxLTA3ICAwMi4wMC4wNCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZSBmb3IgTVBJMl9WRVJTSU9OXzAyXzAwLgorICogICAgICAgICAgICAgICAgICAgICAgRml4ZWQgdGhlIHNpemUgb2YgdGhlIEZ1bmN0aW9uRGVwZW5kZW50NSBmaWVsZCBpbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfREVGQVVMVF9SRVBMWSBzdHJ1Y3R1cmUuCisgKiAgMTItMTgtMDcgIDAyLjAwLjA1ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCB0aGUgTVBJLWRlZmluZWQgRmF1bHQgQ29kZXMgYW5kIGV4dGVuZGVkIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCBzcGVjaWZpYyBjb2RlcyB1cCB0byAweEVGRkYuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBhIHNpeHRoIGtleSB2YWx1ZSBmb3IgdGhlIFdyaXRlU2VxdWVuY2UgcmVnaXN0ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBjaGFuZ2VkIHRoZSBmbHVzaCB2YWx1ZSB0byAweDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBtZXNzYWdlIGZ1bmN0aW9uIGNvZGVzIGZvciBEaWFnbm9zdGljIEJ1ZmZlciBQb3N0CisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgRGlhZ25zb3RpYyBSZWxlYXNlLgorICogICAgICAgICAgICAgICAgICAgICAgTmV3IElPQ1N0YXR1cyBkZWZpbmU6IE1QSTJfSU9DU1RBVFVTX0RJQUdOT1NUSUNfUkVMRUFTRUQKKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIE1QSTJfVkVSU0lPTl9VTklPTiBmcm9tIG1waTJfaW9jLmguCisgKiAgMDItMjktMDggIDAyLjAwLjA2ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDAzLTAzLTA4ICAwMi4wMC4wNyAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwNS0yMS0wOCAgMDIuMDAuMDggIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCAjZGVmaW5lcyBmb3IgbWFya2luZyBhIHJlcGx5IGRlc2NyaXB0b3IgYXMgdW51c2VkLgorICogIDA2LTI3LTA4ICAwMi4wMC4wOSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMTAgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBMVU4gZmllbGQgZGVmaW5lcyBmcm9tIG1waTJfaW5pdC5oLgorICogIDAxLTE5LTA5ICAwMi4wMC4xMSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMTIgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBJbiBhbGwgcmVxdWVzdCBhbmQgcmVwbHkgZGVzY3JpcHRvcnMsIHJlcGxhY2VkIFZGX0lECisgKiAgICAgICAgICAgICAgICAgICAgICBmaWVsZCB3aXRoIE1TSXhJbmRleCBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgRGV2SGFuZGxlIGZpZWxkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgYW5kIG1hZGUgdGhvc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUkFJRCBBY2NlbGVyYXRvciBmdW5jdGlvbmFsaXR5LgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfY25mZy5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA2LTA0LTA3ICAwMi4wMC4wMSAgQWRkZWQgZGVmaW5lcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAyIFBoeUZsYWdzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWFudWZhY3R1cmluZyBQYWdlIDExLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX0NPTk5FQ1RPUl9FTkRfREVWSUNFCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUuCisgKiAgMDYtMjYtMDcgIDAyLjAwLjAyICBBZGRpbmcgZ2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIHByb2R1Y3Qtc3BlY2lmaWMKKyAqICAgICAgICAgICAgICAgICAgICAgIE1hbnVmYWN0dXJpbmcgcGFnZXM6IE1QSTJfQ09ORklHX1BBR0VfTUFOVUZBQ1RVUklOR19QUy4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJld29yayBvZiBCSU9TIFBhZ2UgMiBjb25maWd1cmF0aW9uIHBhZ2UuCisgKiAgICAgICAgICAgICAgICAgICAgICBGaXhlZCBNUEkyX0JJT1NQQUdFMl9CT09UX0RFVklDRSB0byBiZSBhIHVuaW9uIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgZm9ybXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBjb25maWd1cmF0aW9uIHBhZ2VzIElPQyBQYWdlIDggYW5kIERyaXZlcgorICogICAgICAgICAgICAgICAgICAgICAgUGVyc2lzdGVudCBNYXBwaW5nIFBhZ2UgMC4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDMgIE1vZGlmaWVkIGNvbmZpZ3VyYXRpb24gcGFnZXMgZGVhbGluZyB3aXRoIEludGVncmF0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIFJBSUQgKE1hbnVmYWN0dXJpbmcgUGFnZSA0LCBSQUlEIFZvbHVtZSBQYWdlcyAwIGFuZCAxLAorICogICAgICAgICAgICAgICAgICAgICAgUkFJRCBQaHlzaWNhbCBEaXNrIFBhZ2VzIDAgYW5kIDEsIFJBSUQgQ29uZmlndXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAwKS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyB2YWx1ZSBmb3IgQWNjZXNzU3RhdHVzIGZpZWxkIG9mIFNBUyBEZXZpY2UKKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMCAoX1NBVEFfTkVFRFNfSU5JVElBTElaQVRJT04pLgorICogIDEwLTMxLTA3ICAwMi4wMC4wNCAgQWRkZWQgbWlzc2luZyBTRVBEZXZIYW5kbGUgZmllbGQgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfQ09ORklHX1BBR0VfU0FTX0VOQ0xPU1VSRV8wLgorICogIDEyLTE4LTA3ICAwMi4wMC4wNSAgTW9kaWZpZWQgSU8gVW5pdCBQYWdlIDAgdG8gdXNlIDMyLWJpdCB2ZXJzaW9uIGZpZWxkcyBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE5WREFUQS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIElPQyBQYWdlIDcgdG8gdXNlIG1hc2tzIGFuZCBhZGRlZCBmaWVsZCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIFNBU0Jyb2FkY2FzdFByaW1pdGl2ZU1hc2tzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9DT05GSUdfUEFHRV9CSU9TXzQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0NPTkZJR19QQUdFX0xPR18wLgorICogIDAyLTI5LTA4ICAwMi4wMC4wNiAgTW9kaWZpZWQgdmFyaW91cyBuYW1lcyB0byBtYWtlIHRoZW0gMzItY2hhcmFjdGVyIHVuaXF1ZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBEZXZpY2UgSURzLgorICogICAgICAgICAgICAgICAgICAgICAgVXBkYXRlZCBJbnRlZ3JhdGVkIFJBSUQgY29uZmlndXJhdGlvbiBwYWdlcyBpbmNsdWRpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgIE1hbnVmYWN0dXJpbmcgUGFnZSA0LCBJT0MgUGFnZSA2LCBhbmQgUkFJRCBDb25maWd1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDAuCisgKiAgMDUtMjEtMDggIDAyLjAwLjA3ICBBZGRlZCBkZWZpbmUgTVBJMl9NQU5QQUdFNF9NSVhfU1NEX1NBU19TQVRBLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lIE1QSTJfTUFOUEFHRTRfUEhZU0RJU0tfMTI4TUJfQ09FUkNJT04uCisgKiAgICAgICAgICAgICAgICAgICAgICBGaXhlZCBkZWZpbmUgTVBJMl9JT0NQQUdFOF9GTEFHU19FTkNMT1NVUkVfU0xPVF9NQVBQSU5HLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbWlzc2luZyBNYXhOdW1Sb3V0ZWRTYXNBZGRyZXNzZXMgZmllbGQgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfQ09ORklHX1BBR0VfRVhQQU5ERVJfMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBQb3J0IFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIHN0cnVjdHVyZSBsYXlvdXQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0NPTkZJR19QQUdFX0RSSVZFUl9NQVBQSU5HXzAuCisgKiAgMDYtMjctMDggIDAyLjAwLjA4ICBDaGFuZ2VkIE1QSTJfQ09ORklHX1BBR0VfUkRfUERJU0tfMSB0byB1c2UKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfUkFJRF9QSFlTX0RJU0sxX1BBVEhfTUFYIHRvIHNpemUgdGhlIGFycmF5LgorICogIDEwLTAyLTA4ICAwMi4wMC4wOSAgQ2hhbmdlZCBNUEkyX1JBSURfUEdBRF9DT05GSUdOVU1fTUFTSyBmcm9tIDB4MDAwMEZGRkYKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIDB4MDAwMDAwRkYuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IHZhbHVlcyBmb3IgdGhlIFBoeXNpY2FsIERpc2sgQ29lcmNpb24gU2l6ZQorICogICAgICAgICAgICAgICAgICAgICAgYml0cyBpbiB0aGUgRmxhZ3MgZmllbGQgb2YgTWFudWZhY3R1cmluZyBQYWdlIDQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBwcm9kdWN0LXNwZWNpZmljIE1hbnVmYWN0dXJpbmcgcGFnZXMgMTYgdG8gMzEuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCBGbGFncyBiaXRzIGZvciBjb250cm9sbGluZyB3cml0ZSBjYWNoZSBvbiBTQVRBCisgKiAgICAgICAgICAgICAgICAgICAgICBkcml2ZXMgaW4gSU8gVW5pdCBQYWdlIDEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgYml0IHRvIEFkZGl0aW9uYWxDb250cm9sRmxhZ3Mgb2YgU0FTIElPIFVuaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMSB0byBjb250cm9sIEludmFsaWQgVG9wb2xvZ3kgQ29ycmVjdGlvbi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFN1cHBvcnRlZFBoeXNEaXNrcyBmaWVsZCB0byBSQUlEIFZvbHVtZSBQYWdlIDEgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICBhZGRlZCByZWxhdGVkIGRlZmluZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBhZGRpdGlvbmFsIGRlZmluZXMgZm9yIFJBSUQgVm9sdW1lIFBhZ2UgMAorICogICAgICAgICAgICAgICAgICAgICAgVm9sdW1lU3RhdHVzRmxhZ3MgZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCBtZWFuaW5nIG9mIFJBSUQgVm9sdW1lIFBhZ2UgMCBWb2x1bWVTZXR0aW5ncworICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIGZvciBhdXRvLWNvbmZpZ3VyZSBvZiBob3Qtc3dhcCBkcml2ZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQaHlzRGlza0F0dHJpYnV0ZXMgZmllbGQgKGFuZCByZWxhdGVkIGRlZmluZXMpIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBSQUlEIFBoeXNpY2FsIERpc2sgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQVNfUEhZSU5GT19QSFlfVkFDQU5UIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHRocmVlIG5ldyBEaXNjb3ZlcnlTdGF0dXMgYml0cyBmb3IgU0FTIElPIFVuaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMCBhbmQgU0FTIEV4cGFuZGVyIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgbXVsdGlwbGV4aW5nIGluZm9ybWF0aW9uIGZyb20gU0FTIElPIFVuaXQgcGFnZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBCb290RGV2aWNlV2FpdFRpbWUgZmllbGQgdG8gU0FTIElPIFVuaXQgUGFnZSA0LgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBab25lIEFkZHJlc3MgUmVzb2x2ZWQgYml0IGZyb20gUGh5SW5mbyBhbmQgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXIgUGFnZSAwIEZsYWdzIGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyBBY2Nlc3NTdGF0dXMgdmFsdWVzIHRvIFNBUyBEZXZpY2UgUGFnZSAwCisgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5kaWNhdGluZyByb3V0aW5nIHByb2JsZW1zLiBBZGRlZCAzIHJlc2VydmVkIHdvcmRzCisgKiAgICAgICAgICAgICAgICAgICAgICB0byB0aGlzIHBhZ2UuCisgKiAgMDEtMTktMDkgIDAyLjAwLjEwICBGaXhlZCBkZWZpbmVzIGZvciBHUElPVmFsIGZpZWxkIG9mIElPIFVuaXQgUGFnZSAzLgorICogICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0ZWQgbWlzc2luZyByZXNlcnZlZCBmaWVsZCBpbnRvIHN0cnVjdHVyZSBmb3IgSU9DCisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDYuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBtb3JlIHBlbmRpbmcgdGFzayBiaXRzIHRvIFJBSUQgVm9sdW1lIFBhZ2UgMAorICogICAgICAgICAgICAgICAgICAgICAgVm9sdW1lU3RhdHVzRmxhZ3MgZGVmaW5lcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfUEhZU0RJU0swX1NUQVRVU19GTEFHX05PVF9DRVJUSUZJRUQgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgYSBuZXcgRGlzY292ZXJ5U3RhdHVzIGJpdCBmb3IgU0FTIElPIFVuaXQgUGFnZSAwCisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgU0FTIEV4cGFuZGVyIFBhZ2UgMCB0byBmbGFnIGEgZG93bnN0cmVhbSBpbml0aWF0b3IKKyAqICAgICAgICAgICAgICAgICAgICAgIHdoZW4gaW4gc2ltcGxpZmllZCByb3V0aW5nIG1vZGUuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIFNBVEEgSW5pdCBGYWlsdXJlIGRlZmluZXMgZm9yIERpc2NvdmVyeVN0YXR1cworICogICAgICAgICAgICAgICAgICAgICAgZmllbGRzIG9mIFNBUyBJTyBVbml0IFBhZ2UgMCBhbmQgU0FTIEV4cGFuZGVyIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0FTX0RFVklDRTBfQVNUQVRVU19ERVZJQ0VfQkxPQ0tFRCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQb3J0R3JvdXBzLCBEbWFHcm91cCwgYW5kIENvbnRyb2xHcm91cCBmaWVsZHMgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIFNBUyBEZXZpY2UgUGFnZSAwLgorICogIDA1LTA2LTA5ICAwMi4wMC4xMSAgQWRkZWQgc3RydWN0dXJlcyBhbmQgZGVmaW5lcyBmb3IgSU8gVW5pdCBQYWdlIDUgYW5kIElPCisgKiAgICAgICAgICAgICAgICAgICAgICBVbml0IFBhZ2UgNi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGV4cGFuZGVyIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSBkYXRhIHRvIFNBUworICogICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXIgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBIWSBQYWdlIDIgYW5kIFNBUyBQSFkgUGFnZSAzLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfaW5pdC5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDEwLTMxLTA3ICAwMi4wMC4wMSAgRml4ZWQgbmFtZSBmb3IgcE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QuCisgKiAgMTItMTgtMDcgIDAyLjAwLjAyICBNb2RpZmllZCBUYXNrIE1hbmFnZW1lbnQgVGFyZ2V0IFJlc2V0IE1ldGhvZCBkZWZpbmVzLgorICogIDAyLTI5LTA4ICAwMi4wMC4wMyAgQWRkZWQgUXVlcnkgVGFzayBTZXQgYW5kIFF1ZXJ5IFVuaXQgQXR0ZW50aW9uLgorICogIDAzLTAzLTA4ICAwMi4wMC4wNCAgRml4ZWQgbmFtZSBvZiBzdHJ1Y3QgX01QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWS4KKyAqICAwNS0yMS0wOCAgMDIuMDAuMDUgIEZpeGVkIHR5cG8gaW4gbmFtZSBvZiBNcGkyU2VwUmVxdWVzdF90LgorICogIDEwLTAyLTA4ICAwMi4wMC4wNiAgUmVtb3ZlZCBVbnRhZ2dlZCBhbmQgTm8gRGlzY29ubmVjdCB2YWx1ZXMgZnJvbSBTQ1NJIElPCisgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIGZpZWxkIFRhc2sgQXR0cmlidXRlIGZsYWdzLgorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTFVOIGZpZWxkIGRlZmluZXMgdG8gbXBpMi5oIGJlY2FzdWUgdGhleSBhcmUKKyAqICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbiB0byBtYW55IHN0cnVjdHVyZXMuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjA3ICBDaGFuZ2VkIHRhc2sgbWFuYWdlbWVudCB0eXBlIG9mIFF1ZXJ5IFVuaXQgQXR0ZW50aW9uIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBRdWVyeSBBc3luY2hyb25vdXMgRXZlbnQuCisgKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVkIHR3byBuZXcgYml0cyBpbiB0aGUgU2xvdFN0YXR1cyBmaWVsZCBvZiB0aGUgU0NTSQorICogICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlIFByb2Nlc3NvciBSZXF1ZXN0IGFuZCBSZXBseS4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX2lvYy5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA2LTA0LTA3ICAwMi4wMC4wMSAgSW4gSU9DRmFjdHMgUmVwbHkgc3RydWN0dXJlLCByZW5hbWVkIE1heERldmljZXMgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIE1heFRhcmdldHMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBUb3RhbEltYWdlU2l6ZSBmaWVsZCB0byBGV0Rvd25sb2FkIFJlcXVlc3QuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCByZXNlcnZlZCB3b3JkcyB0byBGV1VwbG9hZCBSZXF1ZXN0LgorICogIDA2LTI2LTA3ICAwMi4wMC4wMiAgQWRkZWQgSVIgQ29uZmlndXJhdGlvbiBDaGFuZ2UgTGlzdCBFdmVudC4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDMgIFJlbW92ZWQgU3lzdGVtUmVwbHlRdWV1ZURlcHRoIGZpZWxkIGZyb20gdGhlIElPQ0luaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgYW5kIHJlcGxhY2VkIGl0IHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoIGFuZCBSZXBseUZyZWVRdWV1ZURlcHRoLgorICogICAgICAgICAgICAgICAgICAgICAgUmVwbGFjZWQgdGhlIE1pblJlcGx5UXVldWVEZXB0aCBmaWVsZCBvZiB0aGUgSU9DRmFjdHMKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlcGx5IHdpdGggTWF4UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGguCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1JEUFFfREVQVEhfTUlOIGRlZmluZSB0byBzcGVjaWZ5IHRoZSBtaW5pbXVtCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXB0aCBmb3IgdGhlIFJlcGx5IERlc2NyaXB0b3IgUG9zdCBRdWV1ZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBU0FkZHJlc3MgZmllbGQgdG8gSW5pdGlhdG9yIERldmljZSBUYWJsZQorICogICAgICAgICAgICAgICAgICAgICAgT3ZlcmZsb3cgRXZlbnQgZGF0YS4KKyAqICAxMC0zMS0wNyAgMDIuMDAuMDQgIEFkZGVkIFJlYXNvbkNvZGUgTVBJMl9FVkVOVF9TQVNfSU5JVF9SQ19OT1RfUkVTUE9ORElORworICogICAgICAgICAgICAgICAgICAgICAgZm9yIFNBUyBJbml0aWF0b3IgRGV2aWNlIFN0YXR1cyBDaGFuZ2UgRXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIFJlYXNvbiBDb2RlIGRlZmluZXMgZm9yIFNBUyBUb3BvbG9neSBDaGFuZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgIExpc3QgRXZlbnQgZGF0YSwgaW5jbHVkaW5nIGFkZGluZyBhIGJpdCBmb3IgUEhZIFZhY2FudAorICogICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBhbmQgYWRkaW5nIGEgbWFzayBmb3IgdGhlIFJlYXNvbiBDb2RlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19ERUxBWV9OT1RfUkVTUE9ORElORy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZSBmb3IgTVBJMl9FWFRfSU1BR0VfVFlQRV9NRUdBUkFJRC4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDUgIEFkZGVkIEJvb3QgU3RhdHVzIGRlZmluZXMgZm9yIHRoZSBJT0NFeGNlcHRpb25zIGZpZWxkIG9mCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgSU9DRmFjdHMgUmVwbHkuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FWFRFTkRFRF9CVUZGRVIgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTVBJMl9WRVJTSU9OX1VOSU9OIHRvIG1waTIuaC4KKyAqICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWQgTVBJMl9FVkVOVF9OT1RJRklDQVRJT05fUkVRVUVTVCB0byB1c2UgbWFza3MKKyAqICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgZW5hYmxlcywgYW5kIGFkZGVkIFNBU0Jyb2FkY2FzdFByaW1pdGl2ZU1hc2tzCisgKiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIExvZyBFbnRyeSBBZGRlZCBFdmVudCBhbmQgcmVsYXRlZCBzdHJ1Y3R1cmUuCisgKiAgMDItMjktMDggIDAyLjAwLjA2ICBBZGRlZCBkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0lOVEVHUkFURURfUkFJRC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgZGVmaW5lIE1QSTJfSU9DRkFDVFNfUFJPVE9DT0xfU01QX1RBUkdFVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1heFZvbHVtZXMgYW5kIE1heFBlcnNpc3RlbnRFbnRyaWVzIGZpZWxkcyB0bworICogICAgICAgICAgICAgICAgICAgICAgSU9DRmFjdHMgcmVwbHkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQcm90b2NhbEZsYWdzIGFuZCBJT0NDYXBhYmlsaXRpZXMgZmllbGRzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0ZXX0lNQUdFX0hFQURFUi4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgTVBJMl9QT1JURU5BQkxFX0ZMQUdTX0VOQUJMRV9TSU5HTEVfUE9SVC4KKyAqICAwMy0wMy0wOCAgMDIuMDAuMDcgIEZpeGVkIE1QSTJfRldfSU1BR0VfSEVBREVSIGJ5IGNoYW5naW5nIFJlc2VydmVkMjYgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIGEgVTE2IChmcm9tIGEgVTMyKS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgZXh0cmEgJ3MnIGZyb20gRXZlbnRNYXNrcyBuYW1lLgorICogIDA2LTI3LTA4ICAwMi4wMC4wOCAgRml4ZWQgYW4gb2Zmc2V0IGluIGEgY29tbWVudC4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDkgIFJlbW92ZWQgU3lzdGVtUmVwbHlGcmFtZVNpemUgZnJvbSBNUEkyX0lPQ19JTklUX1JFUVVFU1QuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIEN1clJlcGx5RnJhbWVTaXplIGZyb20gTVBJMl9JT0NfRkFDVFNfUkVQTFkgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICByZW5hbWVkIE1pblJlcGx5RnJhbWVTaXplIHRvIFJlcGx5RnJhbWVTaXplLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19FWENFUFRfSVJfRk9SRUlHTl9DT05GSUdfTUFYLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyBSQUlET3BlcmF0aW9uIHZhbHVlcyBmb3IgSW50ZWdyYXRlZCBSQUlECisgKiAgICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb25zIFN0YXR1cyBFdmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZm91ciBuZXcgSVIgQ29uZmlndXJhdGlvbiBDaGFuZ2UgTGlzdCBFdmVudCBkYXRhCisgKiAgICAgICAgICAgICAgICAgICAgICBSZWFzb25Db2RlIHZhbHVlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgUmVhc29uQ29kZSBkZWZpbmVzIGZvciBTQVMgRGV2aWNlIFN0YXR1cworICogICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlIEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0aHJlZSBuZXcgRGlzY292ZXJ5U3RhdHVzIGJpdHMgZm9yIHRoZSBTQVMKKyAqICAgICAgICAgICAgICAgICAgICAgIERpc2NvdmVyeSBldmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTXVsdGlwbGV4aW5nIFN0YXR1cyBDaGFuZ2UgYml0IHRvIHRoZSBQaHlTdGF0dXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIG9mIHRoZSBTQVMgVG9wb2xvZ3kgQ2hhbmdlIExpc3QgZXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgZGVmaW5lIGZvciBNUEkyX0lOSVRfSU1BR0VfQk9PVEZMQUdTX1hNRU1DT1BZLgorICogICAgICAgICAgICAgICAgICAgICAgQm9vdEZsYWdzIGFyZSBub3cgcHJvZHVjdC1zcGVjaWZpYy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZXMgZm9yIHRoZSBpbmRpdmR1YWwgc2lnbmF0dXJlIGJ5dGVzCisgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgTVBJMl9JTklUX0lNQUdFX0ZPT1RFUi4KKyAqICAwMS0xOS0wOSAgMDIuMDAuMTAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FVkVOVF9SRVBMQVkgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19ET1dOU1RSRUFNX0lOSVRJQVRPUgorICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU0FUQV9JTklUX0ZBSUxVUkUKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19TQVRBX0lOSVRfRkFJTFVSRSBkZWZpbmUuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjExICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfUkFJRF9BQ0NFTEVSQVRPUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfTVNJX1hfSU5ERVggZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyByZWFzb24gY29kZXMgZm9yIFNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZQorICogICAgICAgICAgICAgICAgICAgICAgRXZlbnQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgZXZlbnQ6IFNBUyBQSFkgQ291bnRlci4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX3JhaWQuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwOC0zMS0wNyAgMDIuMDAuMDEgIE1vZGlmaWNhdGlvbnMgdG8gUkFJRCBBY3Rpb24gcmVxdWVzdCBhbmQgcmVwbHksCisgKiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIEFjdGlvbnMgYW5kIEFjdGlvbkRhdGEuCisgKiAgMDItMjktMDggIDAyLjAwLjAyICBBZGRlZCBNUEkyX1JBSURfQUNUSU9OX0FEQVRBX0RJU0FCTF9GVUxMX1JFQlVJTEQuCisgKiAgMDUtMjEtMDggIDAyLjAwLjAzICBBZGRlZCBNUEkyX1JBSURfVk9MX0NSRUFUSU9OX05VTV9QSFlTRElTS1Mgc28gdGhhdAorICogICAgICAgICAgICAgICAgICAgICAgdGhlIFBoeXNEaXNrIGFycmF5IGluIE1QSTJfUkFJRF9WT0xVTUVfQ1JFQVRJT05fU1RSVUNUCisgKiAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgc2l6ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50LgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfc2FzLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMjYtMDcgIDAyLjAwLjAxICBBZGRlZCBDbGVhciBBbGwgUGVyc2lzdGVudCBPcGVyYXRpb24gdG8gU0FTIElPIFVuaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgUmVxdWVzdC4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDIgIEFkZGVkIFNldCBJT0MgUGFyYW1ldGVyIE9wZXJhdGlvbiB0byBTQVMgSU8gVW5pdCBDb250cm9sCisgKiAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfdGFyZy5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA4LTMxLTA3ICAwMi4wMC4wMSAgQWRkZWQgQ29tbWFuZCBCdWZmZXIgRGF0YSBMb2NhdGlvbiBBZGRyZXNzIFNwYWNlIGJpdHMgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclBvc3RGbGFncyBmaWVsZCBvZiBDb21tYW5kQnVmZmVyUG9zdEJhc2UgUmVxdWVzdC4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDIgIE1vZGlmaWVkIHZhcmlvdXMgbmFtZXMgdG8gbWFrZSB0aGVtIDMyLWNoYXJhY3RlciB1bmlxdWUuCisgKiAgMTAtMDItMDggIDAyLjAwLjAzICBSZW1vdmVkIE5leHRDbWRCdWZmZXJPZmZzZXQgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9UQVJHRVRfQ01EX0JVRl9QT1NUX0JBU0VfUkVRVUVTVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCBTdGF0dXMgU2VuZCBSZXF1ZXN0IG9ubHkgdGFrZXMgYSBzaW5nbGUgU0dFIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgZGF0YS4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX3Rvb2wuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDEgIEFkZGVkIERpYWdub3N0aWMgQnVmZmVyIFBvc3QgYW5kIERpYWdub3N0aWMgUmVsZWFzZQorICogICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlcyBhbmQgZGVmaW5lcy4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDIgIE1vZGlmaWVkIHZhcmlvdXMgbmFtZXMgdG8gbWFrZSB0aGVtIDMyLWNoYXJhY3RlciB1bmlxdWUuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjAzICBBZGRlZCBJU1RXSSBSZWFkIFdyaXRlIFRvb2wgYW5kIERpYWdub3N0aWMgQ0xJIFRvb2wuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl90eXBlLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9yYS5oCisgKiAgMDUtMDYtMDkgIDAyLjAwLjAwICBJbml0aWFsIHZlcnNpb24uCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9oaXN0b3J5LnR4dCAgICAgICAgIFBhcnRzIGxpc3QgaGlzdG9yeQorCitGaWxlbmFtZSAgICAgMDIuMDAuMTIKKy0tLS0tLS0tLS0gICAtLS0tLS0tLQorbXBpMi5oICAgICAgIDAyLjAwLjEyCittcGkyX2NuZmcuaCAgMDIuMDAuMTEKK21waTJfaW5pdC5oICAwMi4wMC4wNworbXBpMl9pb2MuaCAgIDAyLjAwLjExCittcGkyX3JhaWQuaCAgMDIuMDAuMDMKK21waTJfc2FzLmggICAwMi4wMC4wMgorbXBpMl90YXJnLmggIDAyLjAwLjAzCittcGkyX3Rvb2wuaCAgMDIuMDAuMDMKK21waTJfdHlwZS5oICAwMi4wMC4wMAorbXBpMl9yYS5oICAgIDAyLjAwLjAwCisKK0ZpbGVuYW1lICAgICAwMi4wMC4xMSAgMDIuMDAuMTAgIDAyLjAwLjA5ICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA2CistLS0tLS0tLS0tICAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLQorbXBpMi5oICAgICAgIDAyLjAwLjExICAwMi4wMC4xMCAgMDIuMDAuMDkgIDAyLjAwLjA4ICAwMi4wMC4wNyAgMDIuMDAuMDYKK21waTJfY25mZy5oICAwMi4wMC4xMCAgMDIuMDAuMDkgIDAyLjAwLjA4ICAwMi4wMC4wNyAgMDIuMDAuMDYgIDAyLjAwLjA2CittcGkyX2luaXQuaCAgMDIuMDAuMDYgIDAyLjAwLjA2ICAwMi4wMC4wNSAgMDIuMDAuMDUgIDAyLjAwLjA0ICAwMi4wMC4wMworbXBpMl9pb2MuaCAgIDAyLjAwLjEwICAwMi4wMC4wOSAgMDIuMDAuMDggIDAyLjAwLjA3ICAwMi4wMC4wNyAgMDIuMDAuMDYKK21waTJfcmFpZC5oICAwMi4wMC4wMyAgMDIuMDAuMDMgIDAyLjAwLjAzICAwMi4wMC4wMyAgMDIuMDAuMDIgIDAyLjAwLjAyCittcGkyX3Nhcy5oICAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMQorbXBpMl90YXJnLmggIDAyLjAwLjAzICAwMi4wMC4wMyAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDIKK21waTJfdG9vbC5oICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAyCittcGkyX3R5cGUuaCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorCitGaWxlbmFtZSAgICAgMDIuMDAuMDUgIDAyLjAwLjA0ICAwMi4wMC4wMyAgMDIuMDAuMDIgIDAyLjAwLjAxICAwMi4wMC4wMAorLS0tLS0tLS0tLSAgIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0KK21waTIuaCAgICAgICAwMi4wMC4wNSAgMDIuMDAuMDQgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDEgIDAyLjAwLjAwCittcGkyX2NuZmcuaCAgMDIuMDAuMDUgIDAyLjAwLjA0ICAwMi4wMC4wMyAgMDIuMDAuMDIgIDAyLjAwLjAxICAwMi4wMC4wMAorbXBpMl9pbml0LmggIDAyLjAwLjAyICAwMi4wMC4wMSAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfaW9jLmggICAwMi4wMC4wNSAgMDIuMDAuMDQgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDEgIDAyLjAwLjAwCittcGkyX3JhaWQuaCAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl9zYXMuaCAgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfdGFyZy5oICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX3Rvb2wuaCAgMDIuMDAuMDEgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl90eXBlLmggIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCmluZGV4IGYxMTE1ZjAuLjU2M2U1NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKQEAgLTEsMTIgKzEsMTIgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDggTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IExTSSBDb3Jwb3JhdGlvbi4KICAqCiAgKgogICogICAgICAgICAgIE5hbWU6ICBtcGkyX2luaXQuaAogICogICAgICAgICAgVGl0bGU6ICBNUEkgU0NTSSBpbml0aWF0b3IgbW9kZSBtZXNzYWdlcyBhbmQgc3RydWN0dXJlcwogICogIENyZWF0aW9uIERhdGU6ICBKdW5lIDIzLCAyMDA2CiAgKgotICogICAgbXBpMl9pbml0LmggVmVyc2lvbjogIDAyLjAwLjA2CisgKiAgICBtcGkyX2luaXQuaCBWZXJzaW9uOiAgMDIuMDAuMDcKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC0yMyw2ICsyMywxMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCBmaWVsZCBUYXNrIEF0dHJpYnV0ZSBmbGFncy4KICAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIHRvIG1waTIuaCBiZWNhc3VlIHRoZXkgYXJlCiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21tb24gdG8gbWFueSBzdHJ1Y3R1cmVzLgorICogIDA1LTA2LTA5ICAwMi4wMC4wNyAgQ2hhbmdlZCB0YXNrIG1hbmFnZW1lbnQgdHlwZSBvZiBRdWVyeSBVbml0IEF0dGVudGlvbiB0bworICogICAgICAgICAgICAgICAgICAgICAgUXVlcnkgQXN5bmNocm9ub3VzIEV2ZW50LgorICogICAgICAgICAgICAgICAgICAgICAgRGVmaW5lZCB0d28gbmV3IGJpdHMgaW4gdGhlIFNsb3RTdGF0dXMgZmllbGQgb2YgdGhlIFNDU0kKKyAqICAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZSBQcm9jZXNzb3IgUmVxdWVzdCBhbmQgUmVwbHkuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0yODksNyArMjkzLDExIEBACiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FVRVJZX1RBU0sgICAgICAgICAgICgweDA3KQogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9DTFJfQUNBICAgICAgICAgICAgICAoMHgwOCkKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX1RBU0tfU0VUICAgICAgICAgKDB4MDkpCi0jZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FSWV9VTklUX0FUVEVOVElPTiAgICgweDBBKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RUllfQVNZTkNfRVZFTlQgICAgICAoMHgwQSkKKworLyogb2Jzb2xldGUgVGFza1R5cGUgbmFtZSAqLworI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RUllfVU5JVF9BVFRFTlRJT04JXAorCShNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RUllfQVNZTkNfRVZFTlQpCiAKIC8qIE1zZ0ZsYWdzIGJpdHMgKi8KIApAQCAtMzc1LDYgKzM4Myw4IEBACiAjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0hPVF9TUEFSRSAgICAgICAgICAgICAgICgweDAwMDAwMTAwKQogI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19VTkNPTkZJR1VSRUQgICAgICAgICAgICAoMHgwMDAwMDA4MCkKICNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfUFJFRElDVEVEX0ZBVUxUICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0lOX0NSSVRJQ0FMX0FSUkFZICAgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19JTl9GQUlMRURfQVJSQVkgICAgICAgICAoMHgwMDAwMDAwOCkKICNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfREVWX1JFQlVJTERJTkcgICAgICAgICAgKDB4MDAwMDAwMDQpCiAjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0RFVl9GQVVMVFkgICAgICAgICAgICAgICgweDAwMDAwMDAyKQogI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19OT19FUlJPUiAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKQEAgLTQxMCw2ICs0MjAsOCBAQAogI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0hPVF9TUEFSRSAgICAgICAgICAgICAoMHgwMDAwMDEwMCkKICNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19VTkNPTkZJR1VSRUQgICAgICAgICAgKDB4MDAwMDAwODApCiAjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfUFJFRElDVEVEX0ZBVUxUICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0lOX0NSSVRJQ0FMX0FSUkFZICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19JTl9GQUlMRURfQVJSQVkgICAgICAgKDB4MDAwMDAwMDgpCiAjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfREVWX1JFQlVJTERJTkcgICAgICAgICgweDAwMDAwMDA0KQogI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0RFVl9GQVVMVFkgICAgICAgICAgICAoMHgwMDAwMDAwMikKICNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19OT19FUlJPUiAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oCmluZGV4IDhjNWQ4MTguLmMyOTQxMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgSU9DLCBQb3J0LCBFdmVudCwgRlcgRG93bmxvYWQsIGFuZCBGVyBVcGxvYWQgbWVzc2FnZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgT2N0b2JlciAxMSwgMjAwNgogICoKLSAqICBtcGkyX2lvYy5oIFZlcnNpb246ICAwMi4wMC4xMAorICogIG1waTJfaW9jLmggVmVyc2lvbjogIDAyLjAwLjExCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtNzksNiArNzksMTEgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NBVEFfSU5JVF9GQUlMVVJFCiAgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUuCiAgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIE1QSTJfRVZFTlRfU0FTX0RJU0NfRFNfU0FUQV9JTklUX0ZBSUxVUkUgZGVmaW5lLgorICogIDA1LTA2LTA5ICAwMi4wMC4xMSAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1JBSURfQUNDRUxFUkFUT1IgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX01TSV9YX0lOREVYIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgcmVhc29uIGNvZGVzIGZvciBTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IGV2ZW50OiBTQVMgUEhZIENvdW50ZXIuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0yNjEsNiArMjY2LDggQEAKIC8qIFByb2R1Y3RJRCBmaWVsZCB1c2VzIE1QSTJfRldfSEVBREVSX1BJRF8gKi8KIAogLyogSU9DQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9NU0lfWF9JTkRFWCAgICAgICAgICAgICgweDAwMDA4MDAwKQorI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfUkFJRF9BQ0NFTEVSQVRPUiAgICAgICAoMHgwMDAwNDAwMCkKICNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VWRU5UX1JFUExBWSAgICAgICAgICAgKDB4MDAwMDIwMDApCiAjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9JTlRFR1JBVEVEX1JBSUQgICAgICAgICgweDAwMDAxMDAwKQogI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfVExSICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDgwMCkKQEAgLTQ0MCw2ICs0NDcsNyBAQAogI2RlZmluZSBNUEkyX0VWRU5UX0lSX1BIWVNJQ0FMX0RJU0sgICAgICAgICAgICAgICAgICgweDAwMUYpCiAjZGVmaW5lIE1QSTJfRVZFTlRfSVJfQ09ORklHVVJBVElPTl9DSEFOR0VfTElTVCAgICAgKDB4MDAyMCkKICNkZWZpbmUgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQgICAgICAgICAgICAgICAgICAoMHgwMDIxKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19QSFlfQ09VTlRFUiAgICAgICAgICAgICAgICAgICgweDAwMjIpCiAKIAogLyogTG9nIEVudHJ5IEFkZGVkIEV2ZW50IGRhdGEgKi8KQEAgLTUwMiwxNyArNTEwLDE5IEBACiAgIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90OwogCiAvKiBTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2UgRXZlbnQgZGF0YSBSZWFzb25Db2RlIHZhbHVlcyAqLwotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TTUFSVF9EQVRBICAgICAgICAgICAgICAgKDB4MDUpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1VOU1VQUE9SVEVEICAgICAgICAgICAgICAoMHgwNykKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfSU5URVJOQUxfREVWSUNFX1JFU0VUICAgICgweDA4KQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19UQVNLX0FCT1JUX0lOVEVSTkFMICAgICAgKDB4MDkpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FCT1JUX1RBU0tfU0VUX0lOVEVSTkFMICAoMHgwQSkKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ0xFQVJfVEFTS19TRVRfSU5URVJOQUwgICgweDBCKQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19RVUVSWV9UQVNLX0lOVEVSTkFMICAgICAgKDB4MEMpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FTWU5DX05PVElGSUNBVElPTiAgICAgICAoMHgwRCkKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ01QX0lOVEVSTkFMX0RFVl9SRVNFVCAgICgweDBFKQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfVEFTS19BQk9SVF9JTlRFUk5BTCAgKDB4MEYpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NBVEFfSU5JVF9GQUlMVVJFICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU01BUlRfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0lOVEVSTkFMX0RFVklDRV9SRVNFVCAgICAgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVEFTS19BQk9SVF9JTlRFUk5BTCAgICAgICAgICAgICAgICAgICgweDA5KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BQk9SVF9UQVNLX1NFVF9JTlRFUk5BTCAgICAgICAgICAgICAgKDB4MEEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NMRUFSX1RBU0tfU0VUX0lOVEVSTkFMICAgICAgICAgICAgICAoMHgwQikKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfUVVFUllfVEFTS19JTlRFUk5BTCAgICAgICAgICAgICAgICAgICgweDBDKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BU1lOQ19OT1RJRklDQVRJT04gICAgICAgICAgICAgICAgICAgKDB4MEQpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9JTlRFUk5BTF9ERVZfUkVTRVQgICAgICAgICAgICAgICAoMHgwRSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ01QX1RBU0tfQUJPUlRfSU5URVJOQUwgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TQVRBX0lOSVRfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0VYUEFOREVSX1JFRFVDRURfRlVOQ1RJT05BTElUWSAgICAgICAoMHgxMSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ01QX0VYUEFOREVSX1JFRFVDRURfRlVOQ1RJT05BTElUWSAgICgweDEyKQogCiAKIC8qIEludGVncmF0ZWQgUkFJRCBPcGVyYXRpb24gU3RhdHVzIEV2ZW50IGRhdGEgKi8KQEAgLTgyMiw2ICs4MzIsMzcgQEAKICNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfRU5DTF9SQ19OT1RfUkVTUE9ORElORyAgICAgICAoMHgwMikKIAogCisvKiBTQVMgUEhZIENvdW50ZXIgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX1NBU19QSFlfQ09VTlRFUiB7CisgICAgVTY0ICAgICAgICAgVGltZVN0YW1wOyAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgUGh5RXZlbnRDb2RlOyAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgUGh5TnVtOyAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgUGh5RXZlbnRJbmZvOyAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgQ291bnRlclR5cGU7ICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgVGhyZXNob2xkV2luZG93OyAgICAvKiAweDE1ICovCisgICAgVTggICAgICAgICAgVGltZVVuaXRzOyAgICAgICAgICAvKiAweDE2ICovCisgICAgVTggICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDE3ICovCisgICAgVTMyICAgICAgICAgRXZlbnRUaHJlc2hvbGQ7ICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgVGhyZXNob2xkRmxhZ3M7ICAgICAvKiAweDFDICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDFFICovCit9IE1QSTJfRVZFTlRfREFUQV9TQVNfUEhZX0NPVU5URVIsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9EQVRBX1NBU19QSFlfQ09VTlRFUiwKKyAgTXBpMkV2ZW50RGF0YVNhc1BoeUNvdW50ZXJfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhU2FzUGh5Q291bnRlcl90OworCisvKiB1c2UgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfIHZhbHVlcyBmcm9tIG1waTJfY25mZy5oIGZvciB0aGUKKyAqIFBoeUV2ZW50Q29kZSBmaWVsZAorICogdXNlIE1QSTJfU0FTUEhZM19DT1VOVEVSX1RZUEVfIHZhbHVlcyBmcm9tIG1waTJfY25mZy5oIGZvciB0aGUKKyAqIENvdW50ZXJUeXBlIGZpZWxkCisgKiB1c2UgTVBJMl9TQVNQSFkzX1RJTUVfVU5JVFNfIHZhbHVlcyBmcm9tIG1waTJfY25mZy5oIGZvciB0aGUKKyAqIFRpbWVVbml0cyBmaWVsZAorICogdXNlIE1QSTJfU0FTUEhZM19URkxBR1NfIHZhbHVlcyBmcm9tIG1waTJfY25mZy5oIGZvciB0aGUKKyAqIFRocmVzaG9sZEZsYWdzIGZpZWxkCisgKiAqLworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBFdmVudEFjayBtZXNzYWdlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oCmluZGV4IDJmZjRlOTMuLjAwN2U5NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmgKQEAgLTEsMTIgKzEsMTIgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDggTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IExTSSBDb3Jwb3JhdGlvbi4KICAqCiAgKgogICogICAgICAgICAgIE5hbWU6ICBtcGkyX3Rvb2wuaAogICogICAgICAgICAgVGl0bGU6ICBNUEkgZGlhZ25vc3RpYyB0b29sIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE1hcmNoIDI2LCAyMDA3CiAgKgotICogICAgbXBpMl90b29sLmggVmVyc2lvbjogIDAyLjAwLjAyCisgKiAgICBtcGkyX3Rvb2wuaCBWZXJzaW9uOiAgMDIuMDAuMDMKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC0xNyw2ICsxNyw3IEBACiAgKiAgMTItMTgtMDcgIDAyLjAwLjAxICBBZGRlZCBEaWFnbm9zdGljIEJ1ZmZlciBQb3N0IGFuZCBEaWFnbm9zdGljIFJlbGVhc2UKICAqICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMuCiAgKiAgMDItMjktMDggIDAyLjAwLjAyICBNb2RpZmllZCB2YXJpb3VzIG5hbWVzIHRvIG1ha2UgdGhlbSAzMi1jaGFyYWN0ZXIgdW5pcXVlLgorICogIDA1LTA2LTA5ICAwMi4wMC4wMyAgQWRkZWQgSVNUV0kgUmVhZCBXcml0ZSBUb29sIGFuZCBEaWFnbm9zdGljIENMSSBUb29sLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMzIsNyArMzMsMTAgQEAKIC8qIGRlZmluZXMgZm9yIHRoZSBUb29scyAqLwogI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fVE9PTCAgICAgICAgICAgICAgICAgICAgICgweDAwKQogI2RlZmluZSBNUEkyX1RPT0xCT1hfTUVNT1JZX01PVkVfVE9PTCAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfSVNUV0lfUkVBRF9XUklURV9UT09MICAgICAgICAgICgweDAzKQogI2RlZmluZSBNUEkyX1RPT0xCT1hfQkVBQ09OX1RPT0wgICAgICAgICAgICAgICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1RPT0xCT1hfRElBR05PU1RJQ19DTElfVE9PTCAgICAgICAgICAgICgweDA2KQorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBUb29sYm94IHJlcGx5CkBAIC0xMTIsNiArMTE2LDc3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFRvb2xib3ggSVNUV0kgUmVhZCBXcml0ZSBUb29sCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUb29sYm94IElTVFdJIFJlYWQgV3JpdGUgVG9vbCByZXF1ZXN0IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfSVNUV0lfUkVBRF9XUklURV9SRVFVRVNUIHsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBUb29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBEZXZJbmRleDsgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDE1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0dMRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDc7ICAgICAgICAgICAgICAgICAgLyogMHgxNyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFR4RGF0YUxlbmd0aDsgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUnhEYXRhTGVuZ3RoOyAgICAgICAgICAgICAgIC8qIDB4MUEgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDg7ICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkOTsgICAgICAgICAgICAgICAgICAvKiAweDIwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxMDsgICAgICAgICAgICAgICAgIC8qIDB4MjQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDExOyAgICAgICAgICAgICAgICAgLyogMHgyOCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTI7ICAgICAgICAgICAgICAgICAvKiAweDJDICovCisgICAgTVBJMl9TR0VfU0lNUExFX1VOSU9OICAgU0dMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MzAgKi8KK30gTVBJMl9UT09MQk9YX0lTVFdJX1JFQURfV1JJVEVfUkVRVUVTVCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1RPT0xCT1hfSVNUV0lfUkVBRF9XUklURV9SRVFVRVNULAorICBNcGkyVG9vbGJveElzdHdpUmVhZFdyaXRlUmVxdWVzdF90LAorICBNUEkyX1BPSU5URVIgcE1waTJUb29sYm94SXN0d2lSZWFkV3JpdGVSZXF1ZXN0X3Q7CisKKy8qIHZhbHVlcyBmb3IgdGhlIEFjdGlvbiBmaWVsZCAqLworI2RlZmluZSBNUEkyX1RPT0xfSVNUV0lfQUNUSU9OX1JFQURfREFUQSAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1RPT0xfSVNUV0lfQUNUSU9OX1dSSVRFX0RBVEEgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1RPT0xfSVNUV0lfQUNUSU9OX1NFUVVFTkNFICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUEkyX1RPT0xfSVNUV0lfQUNUSU9OX1JFU0VSVkVfQlVTICAgICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX1RPT0xfSVNUV0lfQUNUSU9OX1JFTEVBU0VfQlVTICAgICAgICAgICgweDExKQorI2RlZmluZSBNUEkyX1RPT0xfSVNUV0lfQUNUSU9OX1JFU0VUICAgICAgICAgICAgICAgICgweDEyKQorCisvKiB2YWx1ZXMgZm9yIFNHTEZsYWdzIGZpZWxkIGFyZSBpbiB0aGUgU0dMIHNlY3Rpb24gb2YgbXBpMi5oICovCisKKworLyogVG9vbGJveCBJU1RXSSBSZWFkIFdyaXRlIFRvb2wgcmVwbHkgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVE9PTEJPWF9JU1RXSV9SRVBMWSB7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVG9vbDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MEEgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBEZXZJbmRleDsgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDE1ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSXN0d2lTdGF0dXM7ICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgLyogMHgxNyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFR4RGF0YUNvdW50OyAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUnhEYXRhQ291bnQ7ICAgICAgICAgICAgICAgIC8qIDB4MUEgKi8KK30gTVBJMl9UT09MQk9YX0lTVFdJX1JFUExZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfVE9PTEJPWF9JU1RXSV9SRVBMWSwKKyAgTXBpMlRvb2xib3hJc3R3aVJlcGx5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hJc3R3aVJlcGx5X3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIFRvb2xib3ggQmVhY29uIFRvb2wgcmVxdWVzdAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTM5LDYgKzIxNCw2MSBAQAogI2RlZmluZSBNUEkyX1RPT0xCT1hfRkxBR1NfQkVBQ09OTU9ERV9PTiAgICAgICAgKDB4MDEpCiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFRvb2xib3ggRGlhZ25vc3RpYyBDTEkgVG9vbAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNUEkyX1RPT0xCT1hfRElBR19DTElfQ01EX0xFTkdUSCAgICAoMHg1QykKKworLyogVG9vbGJveCBEaWFnbm9zdGljIENMSSBUb29sIHJlcXVlc3QgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9SRVFVRVNUIHsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBUb29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY0NsaUNvbW1hbmQKKwkJW01QSTJfVE9PTEJPWF9ESUFHX0NMSV9DTURfTEVOR1RIXTsgICAgIC8qIDB4MTQgKi8KKyAgICBNUEkyX1NHRV9TSU1QTEVfVU5JT04gICBTR0w7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHg3MCAqLworfSBNUEkyX1RPT0xCT1hfRElBR05PU1RJQ19DTElfUkVRVUVTVCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1RPT0xCT1hfRElBR05PU1RJQ19DTElfUkVRVUVTVCwKKyAgTXBpMlRvb2xib3hEaWFnbm9zdGljQ2xpUmVxdWVzdF90LAorICBNUEkyX1BPSU5URVIgcE1waTJUb29sYm94RGlhZ25vc3RpY0NsaVJlcXVlc3RfdDsKKworLyogdmFsdWVzIGZvciBTR0xGbGFncyBmaWVsZCBhcmUgaW4gdGhlIFNHTCBzZWN0aW9uIG9mIG1waTIuaCAqLworCisKKy8qIFRvb2xib3ggRGlhZ25vc3RpYyBDTEkgVG9vbCByZXBseSBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1JFUExZIHsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBUb29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJldHVybmVkRGF0YUxlbmd0aDsgICAgICAgICAvKiAweDE0ICovCit9IE1QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9SRVBMWSwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1RPT0xCT1hfRElBR19DTElfUkVQTFksCisgIE1waTJUb29sYm94RGlhZ25vc3RpY0NsaVJlcGx5X3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hEaWFnbm9zdGljQ2xpUmVwbHlfdDsKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogICAgICAgRGlhZ25vc3RpYyBCdWZmZXIgTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKaW5kZXggZDk1ZDJmMi4uNjcwMjQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKQEAgLTMsNyArMyw3IEBACiAgKiBmb3IgYWNjZXNzIHRvIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGZpcm13YXJlLgogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2Jhc2UuYwotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC02Myw3ICs2Myw3IEBACiBzdGF0aWMgTVBUX0NBTExCQUNLCW1wdF9jYWxsYmFja3NbTVBUX01BWF9DQUxMQkFDS1NdOwogCiAjZGVmaW5lIEZBVUxUX1BPTExJTkdfSU5URVJWQUwgMTAwMCAvKiBpbiBtaWxsaXNlY29uZHMgKi8KLSNkZWZpbmUgTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSA1MDAgLyogbWF4aW11bSBjb250cm9sbGVyIHF1ZXVlIGRlcHRoICovCisjZGVmaW5lIE1QVDJTQVNfTUFYX1JFUVVFU1RfUVVFVUUgNjAwIC8qIG1heGltdW0gY29udHJvbGxlciBxdWV1ZSBkZXB0aCAqLwogCiBzdGF0aWMgaW50IG1heF9xdWV1ZV9kZXB0aCA9IC0xOwogbW9kdWxlX3BhcmFtKG1heF9xdWV1ZV9kZXB0aCwgaW50LCAwKTsKQEAgLTU0MywxMyArNTQzLDEzIEBACiAgKiBfYmFzZV9kaXNwbGF5X3JlcGx5X2luZm8gLQogICogQGlvYzogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAotX2Jhc2VfZGlzcGxheV9yZXBseV9pbmZvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELAorX2Jhc2VfZGlzcGxheV9yZXBseV9pbmZvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCiAgICAgdTMyIHJlcGx5KQogewogCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OwpAQCAtNTcyLDIyICs1NzIsMjQgQEAKICAqIG1wdDJzYXNfYmFzZV9kb25lIC0gYmFzZSBpbnRlcm5hbCBjb21tYW5kIGNvbXBsZXRpb24gcm91dGluZQogICogQGlvYzogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICoKLSAqIFJldHVybiBub3RoaW5nLgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXZvaWQKLW1wdDJzYXNfYmFzZV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit1OAorbXB0MnNhc19iYXNlX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CiAKIAltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAlpZiAobXBpX3JlcGx5ICYmIG1waV9yZXBseS0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9FVkVOVF9BQ0spCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAKIAlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCiAJaW9jLT5iYXNlX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOwogCWlmIChtcGlfcmVwbHkpIHsKQEAgLTU5NiwxOCArNTk4LDIwIEBACiAJfQogCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmPSB+TVBUMl9DTURfUEVORElORzsKIAljb21wbGV0ZSgmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgogICogX2Jhc2VfYXN5bmNfZXZlbnQgLSBtYWluIGNhbGxiYWNrIGhhbmRsZXIgZm9yIGZpcm13YXJlIGFzeW4gZXZlbnRzCiAgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqCi0gKiBSZXR1cm4gbm90aGluZy4KKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdm9pZAotX2Jhc2VfYXN5bmNfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQorc3RhdGljIHU4CitfYmFzZV9hc3luY19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IG1zaXhfaW5kZXgsIHUzMiByZXBseSkKIHsKIAlNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHk7CiAJTXBpMkV2ZW50QWNrUmVxdWVzdF90ICphY2tfcmVxdWVzdDsKQEAgLTYxNSw5ICs2MTksOSBAQAogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJaWYgKCFtcGlfcmVwbHkpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaWYgKG1waV9yZXBseS0+RnVuY3Rpb24gIT0gTVBJMl9GVU5DVElPTl9FVkVOVF9OT1RJRklDQVRJT04pCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJX2Jhc2VfZGlzcGxheV9ldmVudF9kYXRhKGlvYywgbXBpX3JlcGx5KTsKICNlbmRpZgpAQCAtNjM1LDE2ICs2MzksNDcgQEAKIAlhY2tfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0VWRU5UX0FDSzsKIAlhY2tfcmVxdWVzdC0+RXZlbnQgPSBtcGlfcmVwbHktPkV2ZW50OwogCWFja19yZXF1ZXN0LT5FdmVudENvbnRleHQgPSBtcGlfcmVwbHktPkV2ZW50Q29udGV4dDsKLQlhY2tfcmVxdWVzdC0+VkZfSUQgPSBWRl9JRDsKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIFZGX0lEKTsKKwlhY2tfcmVxdWVzdC0+VkZfSUQgPSAwOyAgLyogVE9ETyAqLworCWFja19yZXF1ZXN0LT5WUF9JRCA9IDA7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAogIG91dDoKIAogCS8qIHNjc2loIGNhbGxiYWNrIGhhbmRsZXIgKi8KLQltcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKGlvYywgVkZfSUQsIHJlcGx5KTsKKwltcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrKGlvYywgbXNpeF9pbmRleCwgcmVwbHkpOwogCiAJLyogY3RsIGNhbGxiYWNrIGhhbmRsZXIgKi8KLQltcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayhpb2MsIFZGX0lELCByZXBseSk7CisJbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soaW9jLCBtc2l4X2luZGV4LCByZXBseSk7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBfYmFzZV9nZXRfY2JfaWR4IC0gb2J0YWluIHRoZSBjYWxsYmFjayBpbmRleAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICoKKyAqIFJldHVybiBjYWxsYmFjayBpbmRleC4KKyAqLworc3RhdGljIHU4CitfYmFzZV9nZXRfY2JfaWR4KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJaW50IGk7CisJdTggY2JfaWR4ID0gMHhGRjsKKworCWlmIChzbWlkID49IGlvYy0+aGlfcHJpb3JpdHlfc21pZCkgeworCQlpZiAoc21pZCA8IGlvYy0+aW50ZXJuYWxfc21pZCkgeworCQkJaSA9IHNtaWQgLSBpb2MtPmhpX3ByaW9yaXR5X3NtaWQ7CisJCQljYl9pZHggPSBpb2MtPmhwcl9sb29rdXBbaV0uY2JfaWR4OworCQl9IGVsc2UgeworCQkJaSA9IHNtaWQgLSBpb2MtPmludGVybmFsX3NtaWQ7CisJCQljYl9pZHggPSBpb2MtPmludGVybmFsX2xvb2t1cFtpXS5jYl9pZHg7CisJCX0KKwl9IGVsc2UgeworCQlpID0gc21pZCAtIDE7CisJCWNiX2lkeCA9IGlvYy0+c2NzaV9sb29rdXBbaV0uY2JfaWR4OworCX0KKwlyZXR1cm4gY2JfaWR4OwogfQogCiAvKioKQEAgLTY4MCw3ICs3MTUsNiBAQAogewogCXUzMiBoaW1fcmVnaXN0ZXI7CiAKLQl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CiAJaGltX3JlZ2lzdGVyID0gcmVhZGwoJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdE1hc2spOwogCWhpbV9yZWdpc3RlciAmPSB+TVBJMl9ISU1fUklNOwogCXdyaXRlbChoaW1fcmVnaXN0ZXIsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRNYXNrKTsKQEAgLTcxMiw5ICs3NDYsMTAgQEAKIAl1MTYgc21pZDsKIAl1OCBjYl9pZHg7CiAJdTMyIHJlcGx5OwotCXU4IFZGX0lEOworCXU4IG1zaXhfaW5kZXg7CiAJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gYnVzX2lkOwogCU1waTJSZXBseURlc2NyaXB0b3JzVW5pb25fdCAqcnBmOworCXU4IHJjOwogCiAJaWYgKGlvYy0+bWFza19pbnRlcnJ1cHRzKQogCQlyZXR1cm4gSVJRX05PTkU7CkBAIC03MzMsNyArNzY4LDcgQEAKIAkJcmVwbHkgPSAwOwogCQljYl9pZHggPSAweEZGOwogCQlzbWlkID0gbGUxNl90b19jcHUocnBmLT5EZWZhdWx0LkRlc2NyaXB0b3JUeXBlRGVwZW5kZW50MSk7Ci0JCVZGX0lEID0gcnBmLT5EZWZhdWx0LlZGX0lEOworCQltc2l4X2luZGV4ID0gcnBmLT5EZWZhdWx0Lk1TSXhJbmRleDsKIAkJaWYgKHJlcXVlc3RfZGVzcmlwdF90eXBlID09CiAJCSAgICBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19BRERSRVNTX1JFUExZKSB7CiAJCQlyZXBseSA9IGxlMzJfdG9fY3B1CkBAIC03NDUsMTYgKzc4MCwxOCBAQAogCQkgICAgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVEFSR0VUQVNTSVNUX1NVQ0NFU1MpCiAJCQlnb3RvIG5leHQ7CiAJCWlmIChzbWlkKQotCQkJY2JfaWR4ID0gaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uY2JfaWR4OworCQkJY2JfaWR4ID0gX2Jhc2VfZ2V0X2NiX2lkeChpb2MsIHNtaWQpOwogCQlpZiAoc21pZCAmJiBjYl9pZHggIT0gMHhGRikgewotCQkJbXB0X2NhbGxiYWNrc1tjYl9pZHhdKGlvYywgc21pZCwgVkZfSUQsIHJlcGx5KTsKKwkJCXJjID0gbXB0X2NhbGxiYWNrc1tjYl9pZHhdKGlvYywgc21pZCwgbXNpeF9pbmRleCwKKwkJCSAgICByZXBseSk7CiAJCQlpZiAocmVwbHkpCi0JCQkJX2Jhc2VfZGlzcGxheV9yZXBseV9pbmZvKGlvYywgc21pZCwgVkZfSUQsCisJCQkJX2Jhc2VfZGlzcGxheV9yZXBseV9pbmZvKGlvYywgc21pZCwgbXNpeF9pbmRleCwKIAkJCQkgICAgcmVwbHkpOwotCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOworCQkJaWYgKHJjKQorCQkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBzbWlkKTsKIAkJfQogCQlpZiAoIXNtaWQpCi0JCQlfYmFzZV9hc3luY19ldmVudChpb2MsIFZGX0lELCByZXBseSk7CisJCQlfYmFzZV9hc3luY19ldmVudChpb2MsIG1zaXhfaW5kZXgsIHJlcGx5KTsKIAogCQkvKiByZXBseSBmcmVlIHF1ZXVlIGhhbmRsaW5nICovCiAJCWlmIChyZXBseSkgewpAQCAtMTE5MSwxOSArMTIyOCw2IEBACiB9CiAKIC8qKgotICogbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWVfZG1hIC0gb2J0YWluIHJlcXVlc3QgbWYgcG9pbnRlciBwaHlzIGFkZHIKLSAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgoc21pZCB6ZXJvIGlzIGludmFsaWQpCi0gKgotICogUmV0dXJucyBwaHlzIHBvaW50ZXIgdG8gbWVzc2FnZSBmcmFtZS4KLSAqLwotZG1hX2FkZHJfdAotbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWVfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCi17Ci0JcmV0dXJuIGlvYy0+cmVxdWVzdF9kbWEgKyAoc21pZCAqIGlvYy0+cmVxdWVzdF9zeik7Ci19Ci0KLS8qKgogICogbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUgLSBvYnRhaW4gcmVxdWVzdCBtZiBwb2ludGVyCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4KHNtaWQgemVybyBpcyBpbnZhbGlkKQpAQCAtMTI1OCw3ICsxMjgyLDcgQEAKIH0KIAogLyoqCi0gKiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQgLSBvYnRhaW4gYSBmcmVlIHNtaWQKKyAqIG1wdDJzYXNfYmFzZV9nZXRfc21pZCAtIG9idGFpbiBhIGZyZWUgc21pZCBmcm9tIGludGVybmFsIHF1ZXVlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBjYl9pZHg6IGNhbGxiYWNrIGluZGV4CiAgKgpAQCAtMTI3Miw2ICsxMjk2LDM5IEBACiAJdTE2IHNtaWQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmlvYy0+aW50ZXJuYWxfZnJlZV9saXN0KSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IHNtaWQgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXF1ZXN0ID0gbGlzdF9lbnRyeShpb2MtPmludGVybmFsX2ZyZWVfbGlzdC5uZXh0LAorCSAgICBzdHJ1Y3QgcmVxdWVzdF90cmFja2VyLCB0cmFja2VyX2xpc3QpOworCXJlcXVlc3QtPmNiX2lkeCA9IGNiX2lkeDsKKwlzbWlkID0gcmVxdWVzdC0+c21pZDsKKwlsaXN0X2RlbCgmcmVxdWVzdC0+dHJhY2tlcl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc21pZDsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvIC0gb2J0YWluIGEgZnJlZSBzbWlkIGZyb20gc2NzaWlvIHF1ZXVlCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBjYl9pZHg6IGNhbGxiYWNrIGluZGV4CisgKiBAc2NtZDogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CisgKgorICogUmV0dXJucyBzbWlkICh6ZXJvIGlzIGludmFsaWQpCisgKi8KK3UxNgorbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IGNiX2lkeCwKKyAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJlcXVlc3RfdHJhY2tlciAqcmVxdWVzdDsKKwl1MTYgc21pZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAlpZiAobGlzdF9lbXB0eSgmaW9jLT5mcmVlX2xpc3QpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogc21pZCBub3QgYXZhaWxhYmxlXG4iLApAQCAtMTI4MSw2ICsxMzM4LDM2IEBACiAKIAlyZXF1ZXN0ID0gbGlzdF9lbnRyeShpb2MtPmZyZWVfbGlzdC5uZXh0LAogCSAgICBzdHJ1Y3QgcmVxdWVzdF90cmFja2VyLCB0cmFja2VyX2xpc3QpOworCXJlcXVlc3QtPnNjbWQgPSBzY21kOworCXJlcXVlc3QtPmNiX2lkeCA9IGNiX2lkeDsKKwlzbWlkID0gcmVxdWVzdC0+c21pZDsKKwlsaXN0X2RlbCgmcmVxdWVzdC0+dHJhY2tlcl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc21pZDsKK30KKworLyoqCisgKiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfaHByIC0gb2J0YWluIGEgZnJlZSBzbWlkIGZyb20gaGktcHJpb3JpdHkgcXVldWUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHNtaWQgKHplcm8gaXMgaW52YWxpZCkKKyAqLwordTE2CittcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfaHByKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJlcXVlc3RfdHJhY2tlciAqcmVxdWVzdDsKKwl1MTYgc21pZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmaW9jLT5ocHJfZnJlZV9saXN0KSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVxdWVzdCA9IGxpc3RfZW50cnkoaW9jLT5ocHJfZnJlZV9saXN0Lm5leHQsCisJICAgIHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIsIHRyYWNrZXJfbGlzdCk7CiAJcmVxdWVzdC0+Y2JfaWR4ID0gY2JfaWR4OwogCXNtaWQgPSByZXF1ZXN0LT5zbWlkOwogCWxpc3RfZGVsKCZyZXF1ZXN0LT50cmFja2VyX2xpc3QpOwpAQCAtMTMwMCwxMCArMTM4NywzMiBAQAogbXB0MnNhc19iYXNlX2ZyZWVfc21pZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7Ci0JaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uY2JfaWR4ID0gMHhGRjsKLQlsaXN0X2FkZF90YWlsKCZpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS50cmFja2VyX2xpc3QsCisJaWYgKHNtaWQgPj0gaW9jLT5oaV9wcmlvcml0eV9zbWlkKSB7CisJCWlmIChzbWlkIDwgaW9jLT5pbnRlcm5hbF9zbWlkKSB7CisJCQkvKiBoaS1wcmlvcml0eSAqLworCQkJaSA9IHNtaWQgLSBpb2MtPmhpX3ByaW9yaXR5X3NtaWQ7CisJCQlpb2MtPmhwcl9sb29rdXBbaV0uY2JfaWR4ID0gMHhGRjsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvYy0+aHByX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCisJCQkgICAgJmlvYy0+aHByX2ZyZWVfbGlzdCk7CisJCX0gZWxzZSB7CisJCQkvKiBpbnRlcm5hbCBxdWV1ZSAqLworCQkJaSA9IHNtaWQgLSBpb2MtPmludGVybmFsX3NtaWQ7CisJCQlpb2MtPmludGVybmFsX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOworCQkJbGlzdF9hZGRfdGFpbCgmaW9jLT5pbnRlcm5hbF9sb29rdXBbaV0udHJhY2tlcl9saXN0LAorCQkJICAgICZpb2MtPmludGVybmFsX2ZyZWVfbGlzdCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzY3NpaW8gcXVldWUgKi8KKwlpID0gc21pZCAtIDE7CisJaW9jLT5zY3NpX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOworCWlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCA9IE5VTEw7CisJbGlzdF9hZGRfdGFpbCgmaW9jLT5zY3NpX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCiAJICAgICZpb2MtPmZyZWVfbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAKQEAgLTEzNTIsMjEgKzE0NjEsMTkgQEAKICAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvIC0gc2VuZCBTQ1NJX0lPIHJlcXVlc3QgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEB2Zl9pZDogdmlydHVhbCBmdW5jdGlvbiBpZAogICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiB2b2lkCi1tcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCwKLSAgICB1MTYgaGFuZGxlKQorbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTE2IGhhbmRsZSkKIHsKIAlNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90IGRlc2NyaXB0b3I7CiAJdTY0ICpyZXF1ZXN0ID0gKHU2NCAqKSZkZXNjcmlwdG9yOwogCiAKIAlkZXNjcmlwdG9yLlNDU0lJTy5SZXF1ZXN0RmxhZ3MgPSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19TQ1NJX0lPOwotCWRlc2NyaXB0b3IuU0NTSUlPLlZGX0lEID0gdmZfaWQ7CisJZGVzY3JpcHRvci5TQ1NJSU8uTVNJeEluZGV4ID0gMDsgLyogVE9ETyAqLwogCWRlc2NyaXB0b3IuU0NTSUlPLlNNSUQgPSBjcHVfdG9fbGUxNihzbWlkKTsKIAlkZXNjcmlwdG9yLlNDU0lJTy5EZXZIYW5kbGUgPSBjcHVfdG9fbGUxNihoYW5kbGUpOwogCWRlc2NyaXB0b3IuU0NTSUlPLkxNSUQgPSAwOwpAQCAtMTM3OSwyMCArMTQ4NiwxOCBAQAogICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5IC0gc2VuZCBUYXNrIE1hbmFnbWVudCByZXF1ZXN0IHRvIGZpcm13YXJlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogdm9pZAotbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCi0gICAgdTggdmZfaWQpCittcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKIHsKIAlNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90IGRlc2NyaXB0b3I7CiAJdTY0ICpyZXF1ZXN0ID0gKHU2NCAqKSZkZXNjcmlwdG9yOwogCiAJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuUmVxdWVzdEZsYWdzID0KIAkgICAgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfSElHSF9QUklPUklUWTsKLQlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5WRl9JRCA9IHZmX2lkOworCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5Lk1TSXhJbmRleCA9IDA7IC8qIFRPRE8gKi8KIAlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5TTUlEID0gY3B1X3RvX2xlMTYoc21pZCk7CiAJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuTE1JRCA9IDA7CiAJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuUmVzZXJ2ZWQxID0gMDsKQEAgLTE0MDQsMTggKzE1MDksMTcgQEAKICAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0IC0gRGVmYXVsdCwgcHJpbWFyaWx5IHVzZWQgZm9yIGNvbmZpZyBwYWdlcwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHZvaWQKLW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkKQorbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKIHsKIAlNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90IGRlc2NyaXB0b3I7CiAJdTY0ICpyZXF1ZXN0ID0gKHU2NCAqKSZkZXNjcmlwdG9yOwogCiAJZGVzY3JpcHRvci5EZWZhdWx0LlJlcXVlc3RGbGFncyA9IE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0RFRkFVTFRfVFlQRTsKLQlkZXNjcmlwdG9yLkRlZmF1bHQuVkZfSUQgPSB2Zl9pZDsKKwlkZXNjcmlwdG9yLkRlZmF1bHQuTVNJeEluZGV4ID0gMDsgLyogVE9ETyAqLwogCWRlc2NyaXB0b3IuRGVmYXVsdC5TTUlEID0gY3B1X3RvX2xlMTYoc21pZCk7CiAJZGVzY3JpcHRvci5EZWZhdWx0LkxNSUQgPSAwOwogCWRlc2NyaXB0b3IuRGVmYXVsdC5EZXNjcmlwdG9yVHlwZURlcGVuZGVudCA9IDA7CkBAIC0xNDI3LDIxICsxNTMxLDIwIEBACiAgKiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfdGFyZ2V0X2Fzc2lzdCAtIHNlbmQgVGFyZ2V0IEFzc2lzdC9TdGF0dXMgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEB2Zl9pZDogdmlydHVhbCBmdW5jdGlvbiBpZAogICogQGlvX2luZGV4OiB2YWx1ZSB1c2VkIHRvIHRyYWNrIHRoZSBJTwogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiB2b2lkCiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfdGFyZ2V0X2Fzc2lzdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAotICAgIHU4IHZmX2lkLCB1MTYgaW9faW5kZXgpCisgICAgdTE2IGlvX2luZGV4KQogewogCU1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QgZGVzY3JpcHRvcjsKIAl1NjQgKnJlcXVlc3QgPSAodTY0ICopJmRlc2NyaXB0b3I7CiAKIAlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuUmVxdWVzdEZsYWdzID0KIAkgICAgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9UQVJHRVQ7Ci0JZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LlZGX0lEID0gdmZfaWQ7CisJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0Lk1TSXhJbmRleCA9IDA7IC8qIFRPRE8gKi8KIAlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuU01JRCA9IGNwdV90b19sZTE2KHNtaWQpOwogCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5MTUlEID0gMDsKIAlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuSW9JbmRleCA9IGNwdV90b19sZTE2KGlvX2luZGV4KTsKQEAgLTE3MTcsNiArMTgyMCw4IEBACiAJfQogCiAJa2ZyZWUoaW9jLT5zY3NpX2xvb2t1cCk7CisJa2ZyZWUoaW9jLT5ocHJfbG9va3VwKTsKKwlrZnJlZShpb2MtPmludGVybmFsX2xvb2t1cCk7CiB9CiAKIApAQCAtMTczNiw3ICsxODQxLDYgQEAKIAl1MTYgbnVtX29mX3JlcGx5X2ZyYW1lczsKIAl1MTYgY2hhaW5zX25lZWRlZF9wZXJfaW87CiAJdTMyIHN6LCB0b3RhbF9zejsKLQl1MTYgaTsKIAl1MzIgcmV0cnlfc3o7CiAJdTE2IG1heF9yZXF1ZXN0X2NyZWRpdDsKIApAQCAtMTc2NCw3ICsxODY4LDEwIEBACiAJCSAgICBNUFQyU0FTX01BWF9SRVFVRVNUX1FVRVVFKSA/IE1QVDJTQVNfTUFYX1JFUVVFU1RfUVVFVUUgOgogCQkgICAgZmFjdHMtPlJlcXVlc3RDcmVkaXQ7CiAJfQotCWlvYy0+cmVxdWVzdF9kZXB0aCA9IG1heF9yZXF1ZXN0X2NyZWRpdDsKKworCWlvYy0+aGJhX3F1ZXVlX2RlcHRoID0gbWF4X3JlcXVlc3RfY3JlZGl0OworCWlvYy0+aGlfcHJpb3JpdHlfZGVwdGggPSBmYWN0cy0+SGlnaFByaW9yaXR5Q3JlZGl0OworCWlvYy0+aW50ZXJuYWxfZGVwdGggPSBpb2MtPmhpX3ByaW9yaXR5X2RlcHRoICsgNTsKIAogCS8qIHJlcXVlc3QgZnJhbWUgc2l6ZSAqLwogCWlvYy0+cmVxdWVzdF9zeiA9IGZhY3RzLT5JT0NSZXF1ZXN0RnJhbWVTaXplICogNDsKQEAgLTE4MDIsNyArMTkwOSw3IEBACiAJaW9jLT5jaGFpbnNfbmVlZGVkX3Blcl9pbyA9IGNoYWluc19uZWVkZWRfcGVyX2lvOwogCiAJLyogcmVwbHkgZnJlZSBxdWV1ZSBzaXppbmcgLSB0YWtpbmcgaW50byBhY2NvdW50IGZvciBldmVudHMgKi8KLQludW1fb2ZfcmVwbHlfZnJhbWVzID0gaW9jLT5yZXF1ZXN0X2RlcHRoICsgMzI7CisJbnVtX29mX3JlcGx5X2ZyYW1lcyA9IGlvYy0+aGJhX3F1ZXVlX2RlcHRoICsgMzI7CiAKIAkvKiBudW1iZXIgb2YgcmVwbGllcyBmcmFtZXMgY2FuJ3QgYmUgYSBtdWx0aXBsZSBvZiAxNiAqLwogCS8qIGRlY3JlYXNlIG51bWJlciBvZiByZXBseSBmcmFtZXMgYnkgMSAqLwpAQCAtMTgyMyw3ICsxOTMwLDcgQEAKIAkgKiBmcmFtZXMKIAkgKi8KIAotCXF1ZXVlX3NpemUgPSBpb2MtPnJlcXVlc3RfZGVwdGggKyBudW1fb2ZfcmVwbHlfZnJhbWVzICsgMTsKKwlxdWV1ZV9zaXplID0gaW9jLT5oYmFfcXVldWVfZGVwdGggKyBudW1fb2ZfcmVwbHlfZnJhbWVzICsgMTsKIAkvKiByb3VuZCB1cCB0byAxNiBieXRlIGJvdW5kYXJ5ICovCiAJaWYgKHF1ZXVlX3NpemUgJSAxNikKIAkJcXVldWVfc2l6ZSArPSAxNiAtIChxdWV1ZV9zaXplICUgMTYpOwpAQCAtMTgzNyw2MCArMTk0NCw4NSBAQAogCQlpZiAocXVldWVfZGlmZiAlIDE2KQogCQkJcXVldWVfZGlmZiArPSAxNiAtIChxdWV1ZV9kaWZmICUgMTYpOwogCi0JCS8qIGFkanVzdCByZXF1ZXN0X2RlcHRoLCByZXBseV9mcmVlX3F1ZXVlX2RlcHRoLAorCQkvKiBhZGp1c3QgaGJhX3F1ZXVlX2RlcHRoLCByZXBseV9mcmVlX3F1ZXVlX2RlcHRoLAogCQkgKiBhbmQgcXVldWVfc2l6ZQogCQkgKi8KLQkJaW9jLT5yZXF1ZXN0X2RlcHRoIC09IHF1ZXVlX2RpZmY7CisJCWlvYy0+aGJhX3F1ZXVlX2RlcHRoIC09IHF1ZXVlX2RpZmY7CiAJCWlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCAtPSBxdWV1ZV9kaWZmOwogCQlxdWV1ZV9zaXplIC09IHF1ZXVlX2RpZmY7CiAJfQogCWlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCA9IHF1ZXVlX3NpemU7CiAKLQkvKiBtYXggc2NzaSBob3N0IHF1ZXVlIGRlcHRoICovCi0JaW9jLT5zaG9zdC0+Y2FuX3F1ZXVlID0gaW9jLT5yZXF1ZXN0X2RlcHRoIC0gSU5URVJOQUxfQ01EU19DT1VOVDsKLQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzY3NpIGhvc3QgcXVldWU6IGRlcHRoIgotCSAgICAiKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnNob3N0LT5jYW5fcXVldWUpKTsKLQogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNjYXR0ZXIgZ2F0aGVyOiAiCiAJICAgICJzZ2VfaW5fbWFpbl9tc2coJWQpLCBzZ2VfcGVyX2NoYWluKCVkKSwgc2dlX3Blcl9pbyglZCksICIKIAkgICAgImNoYWluc19wZXJfaW8oJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+bWF4X3NnZXNfaW5fbWFpbl9tZXNzYWdlLAogCSAgICBpb2MtPm1heF9zZ2VzX2luX2NoYWluX21lc3NhZ2UsIGlvYy0+c2hvc3QtPnNnX3RhYmxlc2l6ZSwKIAkgICAgaW9jLT5jaGFpbnNfbmVlZGVkX3Blcl9pbykpOwogCisJaW9jLT5zY3NpaW9fZGVwdGggPSBpb2MtPmhiYV9xdWV1ZV9kZXB0aCAtCisJICAgIGlvYy0+aGlfcHJpb3JpdHlfZGVwdGggLSBpb2MtPmludGVybmFsX2RlcHRoOworCisJLyogc2V0IHRoZSBzY3NpIGhvc3QgY2FuX3F1ZXVlIGRlcHRoCisJICogd2l0aCBzb21lIGludGVybmFsIGNvbW1hbmRzIHRoYXQgY291bGQgYmUgb3V0c3RhbmRpbmcKKwkgKi8KKwlpb2MtPnNob3N0LT5jYW5fcXVldWUgPSBpb2MtPnNjc2lpb19kZXB0aCAtICgyKTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzY3NpIGhvc3Q6ICIKKwkgICAgImNhbl9xdWV1ZSBkZXB0aCAoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+c2hvc3QtPmNhbl9xdWV1ZSkpOworCiAJLyogY29udGlndW91cyBwb29sIGZvciByZXF1ZXN0IGFuZCBjaGFpbnMsIDE2IGJ5dGUgYWxpZ24sIG9uZSBleHRyYSAiCiAJICogImZyYW1lIGZvciBzbWlkPTAKIAkgKi8KLQlpb2MtPmNoYWluX2RlcHRoID0gaW9jLT5jaGFpbnNfbmVlZGVkX3Blcl9pbyAqIGlvYy0+cmVxdWVzdF9kZXB0aDsKLQlzeiA9ICgoaW9jLT5yZXF1ZXN0X2RlcHRoICsgMSArIGlvYy0+Y2hhaW5fZGVwdGgpICogaW9jLT5yZXF1ZXN0X3N6KTsKKwlpb2MtPmNoYWluX2RlcHRoID0gaW9jLT5jaGFpbnNfbmVlZGVkX3Blcl9pbyAqIGlvYy0+c2NzaWlvX2RlcHRoOworCXN6ID0gKChpb2MtPnNjc2lpb19kZXB0aCArIDEgKyBpb2MtPmNoYWluX2RlcHRoKSAqIGlvYy0+cmVxdWVzdF9zeik7CisKKwkvKiBoaS1wcmlvcml0eSBxdWV1ZSAqLworCXN6ICs9IChpb2MtPmhpX3ByaW9yaXR5X2RlcHRoICogaW9jLT5yZXF1ZXN0X3N6KTsKKworCS8qIGludGVybmFsIHF1ZXVlICovCisJc3ogKz0gKGlvYy0+aW50ZXJuYWxfZGVwdGggKiBpb2MtPnJlcXVlc3Rfc3opOwogCiAJaW9jLT5yZXF1ZXN0X2RtYV9zeiA9IHN6OwogCWlvYy0+cmVxdWVzdCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGRldiwgc3osICZpb2MtPnJlcXVlc3RfZG1hKTsKIAlpZiAoIWlvYy0+cmVxdWVzdCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJyZXF1ZXN0IHBvb2w6IHBjaV9hbGxvY19jb25zaXN0ZW50ICIKLQkJICAgICJmYWlsZWQ6IHJlcV9kZXB0aCglZCksIGNoYWluc19wZXJfaW8oJWQpLCBmcmFtZV9zeiglZCksICIKLQkJICAgICJ0b3RhbCglZCBrQilcbiIsIGlvYy0+bmFtZSwgaW9jLT5yZXF1ZXN0X2RlcHRoLAorCQkgICAgImZhaWxlZDogaGJhX2RlcHRoKCVkKSwgY2hhaW5zX3Blcl9pbyglZCksIGZyYW1lX3N6KCVkKSwgIgorCQkgICAgInRvdGFsKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmhiYV9xdWV1ZV9kZXB0aCwKIAkJICAgIGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8sIGlvYy0+cmVxdWVzdF9zeiwgc3ovMTAyNCk7Ci0JCWlmIChpb2MtPnJlcXVlc3RfZGVwdGggPCBNUFQyU0FTX1NBU19RVUVVRV9ERVBUSCkKKwkJaWYgKGlvYy0+c2NzaWlvX2RlcHRoIDwgTVBUMlNBU19TQVNfUVVFVUVfREVQVEgpCiAJCQlnb3RvIG91dDsKIAkJcmV0cnlfc3ogKz0gNjQ7Ci0JCWlvYy0+cmVxdWVzdF9kZXB0aCA9IG1heF9yZXF1ZXN0X2NyZWRpdCAtIHJldHJ5X3N6OworCQlpb2MtPmhiYV9xdWV1ZV9kZXB0aCA9IG1heF9yZXF1ZXN0X2NyZWRpdCAtIHJldHJ5X3N6OwogCQlnb3RvIHJldHJ5X2FsbG9jYXRpb247CiAJfQogCiAJaWYgKHJldHJ5X3N6KQogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJyZXF1ZXN0IHBvb2w6IHBjaV9hbGxvY19jb25zaXN0ZW50ICIKLQkJICAgICJzdWNjZWVkOiByZXFfZGVwdGgoJWQpLCBjaGFpbnNfcGVyX2lvKCVkKSwgZnJhbWVfc3ooJWQpLCAiCi0JCSAgICAidG90YWwoJWQga2IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+cmVxdWVzdF9kZXB0aCwKKwkJICAgICJzdWNjZWVkOiBoYmFfZGVwdGgoJWQpLCBjaGFpbnNfcGVyX2lvKCVkKSwgZnJhbWVfc3ooJWQpLCAiCisJCSAgICAidG90YWwoJWQga2IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+aGJhX3F1ZXVlX2RlcHRoLAogCQkgICAgaW9jLT5jaGFpbnNfbmVlZGVkX3Blcl9pbywgaW9jLT5yZXF1ZXN0X3N6LCBzei8xMDI0KTsKIAotCWlvYy0+Y2hhaW4gPSBpb2MtPnJlcXVlc3QgKyAoKGlvYy0+cmVxdWVzdF9kZXB0aCArIDEpICoKKworCS8qIGhpLXByaW9yaXR5IHF1ZXVlICovCisJaW9jLT5oaV9wcmlvcml0eSA9IGlvYy0+cmVxdWVzdCArICgoaW9jLT5zY3NpaW9fZGVwdGggKyAxKSAqCiAJICAgIGlvYy0+cmVxdWVzdF9zeik7Ci0JaW9jLT5jaGFpbl9kbWEgPSBpb2MtPnJlcXVlc3RfZG1hICsgKChpb2MtPnJlcXVlc3RfZGVwdGggKyAxKSAqCisJaW9jLT5oaV9wcmlvcml0eV9kbWEgPSBpb2MtPnJlcXVlc3RfZG1hICsgKChpb2MtPnNjc2lpb19kZXB0aCArIDEpICoKIAkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKKworCS8qIGludGVybmFsIHF1ZXVlICovCisJaW9jLT5pbnRlcm5hbCA9IGlvYy0+aGlfcHJpb3JpdHkgKyAoaW9jLT5oaV9wcmlvcml0eV9kZXB0aCAqCisJICAgIGlvYy0+cmVxdWVzdF9zeik7CisJaW9jLT5pbnRlcm5hbF9kbWEgPSBpb2MtPmhpX3ByaW9yaXR5X2RtYSArIChpb2MtPmhpX3ByaW9yaXR5X2RlcHRoICoKKwkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKKworCWlvYy0+Y2hhaW4gPSBpb2MtPmludGVybmFsICsgKGlvYy0+aW50ZXJuYWxfZGVwdGggKgorCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCWlvYy0+Y2hhaW5fZG1hID0gaW9jLT5pbnRlcm5hbF9kbWEgKyAoaW9jLT5pbnRlcm5hbF9kZXB0aCAqCisJICAgIGlvYy0+cmVxdWVzdF9zeik7CisKIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXF1ZXN0IHBvb2woMHglcCk6ICIKIAkgICAgImRlcHRoKCVkKSwgZnJhbWVfc2l6ZSglZCksIHBvb2xfc2l6ZSglZCBrQilcbiIsIGlvYy0+bmFtZSwKLQkgICAgaW9jLT5yZXF1ZXN0LCBpb2MtPnJlcXVlc3RfZGVwdGgsIGlvYy0+cmVxdWVzdF9zeiwKLQkgICAgKChpb2MtPnJlcXVlc3RfZGVwdGggKyAxKSAqIGlvYy0+cmVxdWVzdF9zeikvMTAyNCkpOworCSAgICBpb2MtPnJlcXVlc3QsIGlvYy0+aGJhX3F1ZXVlX2RlcHRoLCBpb2MtPnJlcXVlc3Rfc3osCisJICAgIChpb2MtPmhiYV9xdWV1ZV9kZXB0aCAqIGlvYy0+cmVxdWVzdF9zeikvMTAyNCkpOwogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImNoYWluIHBvb2woMHglcCk6IGRlcHRoIgogCSAgICAiKCVkKSwgZnJhbWVfc2l6ZSglZCksIHBvb2xfc2l6ZSglZCBrQilcbiIsIGlvYy0+bmFtZSwgaW9jLT5jaGFpbiwKIAkgICAgaW9jLT5jaGFpbl9kZXB0aCwgaW9jLT5yZXF1ZXN0X3N6LCAoKGlvYy0+Y2hhaW5fZGVwdGggKgpAQCAtMTg5OSw3ICsyMDMxLDcgQEAKIAkgICAgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKSBpb2MtPnJlcXVlc3RfZG1hKSk7CiAJdG90YWxfc3ogKz0gc3o7CiAKLQlpb2MtPnNjc2lfbG9va3VwID0ga2NhbGxvYyhpb2MtPnJlcXVlc3RfZGVwdGgsCisJaW9jLT5zY3NpX2xvb2t1cCA9IGtjYWxsb2MoaW9jLT5zY3NpaW9fZGVwdGgsCiAJICAgIHNpemVvZihzdHJ1Y3QgcmVxdWVzdF90cmFja2VyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpb2MtPnNjc2lfbG9va3VwKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInNjc2lfbG9va3VwOiBrY2FsbG9jIGZhaWxlZFxuIiwKQEAgLTE5MDcsMTIgKzIwMzksMzggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JIC8qIGluaXRpYWxpemUgc29tZSBiaXRzICovCi0JZm9yIChpID0gMDsgaSA8IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSsrKQotCQlpb2MtPnNjc2lfbG9va3VwW2ldLnNtaWQgPSBpICsgMTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzY3NpaW8oMHglcCk6ICIKKwkgICAgImRlcHRoKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnJlcXVlc3QsCisJICAgIGlvYy0+c2NzaWlvX2RlcHRoKSk7CisKKwkvKiBpbml0aWFsaXplIGhpLXByaW9yaXR5IHF1ZXVlIHNtaWQncyAqLworCWlvYy0+aHByX2xvb2t1cCA9IGtjYWxsb2MoaW9jLT5oaV9wcmlvcml0eV9kZXB0aCwKKwkgICAgc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYy0+aHByX2xvb2t1cCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJocHJfbG9va3VwOiBrY2FsbG9jIGZhaWxlZFxuIiwKKwkJICAgIGlvYy0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpb2MtPmhpX3ByaW9yaXR5X3NtaWQgPSBpb2MtPnNjc2lpb19kZXB0aCArIDE7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaGlfcHJpb3JpdHkoMHglcCk6ICIKKwkgICAgImRlcHRoKCVkKSwgc3RhcnQgc21pZCglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5oaV9wcmlvcml0eSwKKwkgICAgaW9jLT5oaV9wcmlvcml0eV9kZXB0aCwgaW9jLT5oaV9wcmlvcml0eV9zbWlkKSk7CisKKwkvKiBpbml0aWFsaXplIGludGVybmFsIHF1ZXVlIHNtaWQncyAqLworCWlvYy0+aW50ZXJuYWxfbG9va3VwID0ga2NhbGxvYyhpb2MtPmludGVybmFsX2RlcHRoLAorCSAgICBzaXplb2Yoc3RydWN0IHJlcXVlc3RfdHJhY2tlciksIEdGUF9LRVJORUwpOworCWlmICghaW9jLT5pbnRlcm5hbF9sb29rdXApIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiaW50ZXJuYWxfbG9va3VwOiBrY2FsbG9jIGZhaWxlZFxuIiwKKwkJICAgIGlvYy0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpb2MtPmludGVybmFsX3NtaWQgPSBpb2MtPmhpX3ByaW9yaXR5X3NtaWQgKyBpb2MtPmhpX3ByaW9yaXR5X2RlcHRoOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImludGVybmFsKDB4JXApOiAiCisJICAgICJkZXB0aCglZCksIHN0YXJ0IHNtaWQoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+aW50ZXJuYWwsCisJICAgICBpb2MtPmludGVybmFsX2RlcHRoLCBpb2MtPmludGVybmFsX3NtaWQpKTsKIAogCS8qIHNlbnNlIGJ1ZmZlcnMsIDQgYnl0ZSBhbGlnbiAqLwotCXN6ID0gaW9jLT5yZXF1ZXN0X2RlcHRoICogU0NTSV9TRU5TRV9CVUZGRVJTSVpFOworCXN6ID0gaW9jLT5zY3NpaW9fZGVwdGggKiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CiAJaW9jLT5zZW5zZV9kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgic2Vuc2UgcG9vbCIsIGlvYy0+cGRldiwgc3osIDQsCiAJICAgIDApOwogCWlmICghaW9jLT5zZW5zZV9kbWFfcG9vbCkgewpAQCAtMTkyOSw3ICsyMDg3LDcgQEAKIAl9CiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAogCSAgICAic2Vuc2UgcG9vbCgweCVwKTogZGVwdGgoJWQpLCBlbGVtZW50X3NpemUoJWQpLCBwb29sX3NpemUiCi0JICAgICIoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+c2Vuc2UsIGlvYy0+cmVxdWVzdF9kZXB0aCwKKwkgICAgIiglZCBrQilcbiIsIGlvYy0+bmFtZSwgaW9jLT5zZW5zZSwgaW9jLT5zY3NpaW9fZGVwdGgsCiAJICAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgc3ovMTAyNCkpOwogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNlbnNlX2RtYSgweCVsbHgpXG4iLAogCSAgICBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpaW9jLT5zZW5zZV9kbWEpKTsKQEAgLTIzMDQsNyArMjQ2Miw3IEBACiAJICAgICgocmVxdWVzdF9ieXRlcy80KTw8TVBJMl9ET09SQkVMTF9BRERfRFdPUkRTX1NISUZUKSksCiAJICAgICZpb2MtPmNoaXAtPkRvb3JiZWxsKTsKIAotCWlmICgoX2Jhc2Vfd2FpdF9mb3JfZG9vcmJlbGxfaW50KGlvYywgNSwgc2xlZXBfZmxhZykpKSB7CisJaWYgKChfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9pbnQoaW9jLCA1LCBOT19TTEVFUCkpKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImRvb3JiZWxsIGhhbmRzaGFrZSAiCiAJCSAgICJpbnQgZmFpbGVkIChsaW5lPSVkKVxuIiwgaW9jLT5uYW1lLCBfX0xJTkVfXyk7CiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjQ1NCw3ICsyNjEyLDggQEAKIAlpZiAobXBpX3JlcXVlc3QtPk9wZXJhdGlvbiA9PSBNUEkyX1NBU19PUF9QSFlfSEFSRF9SRVNFVCB8fAogCSAgICBtcGlfcmVxdWVzdC0+T3BlcmF0aW9uID09IE1QSTJfU0FTX09QX1BIWV9MSU5LX1JFU0VUKQogCQlpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzID0gMTsKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+YmFzZV9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmJhc2VfY21kcy5kb25lLAogCSAgICBtc2Vjc190b19qaWZmaWVzKDEwMDAwKSk7CiAJaWYgKChtcGlfcmVxdWVzdC0+T3BlcmF0aW9uID09IE1QSTJfU0FTX09QX1BIWV9IQVJEX1JFU0VUIHx8CkBAIC0yNTU1LDcgKzI3MTQsOCBAQAogCXJlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOwogCWlvYy0+YmFzZV9jbWRzLnNtaWQgPSBzbWlkOwogCW1lbWNweShyZXF1ZXN0LCBtcGlfcmVxdWVzdCwgc2l6ZW9mKE1waTJTZXBSZXBseV90KSk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5iYXNlX2NtZHMuZG9uZSwKIAkgICAgbXNlY3NfdG9famlmZmllcygxMDAwMCkpOwogCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgewpAQCAtMjcwMSwxMyArMjg2MSwxMiBAQAogLyoqCiAgKiBfYmFzZV9zZW5kX2lvY19pbml0IC0gc2VuZCBpb2NfaW5pdCB0byBmaXJtd2FyZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1fYmFzZV9zZW5kX2lvY19pbml0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIGludCBzbGVlcF9mbGFnKQorX2Jhc2Vfc2VuZF9pb2NfaW5pdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnKQogewogCU1waTJJT0NJbml0UmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCU1waTJJT0NJbml0UmVwbHlfdCBtcGlfcmVwbHk7CkBAIC0yNzE5LDcgKzI4NzgsOCBAQAogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkySU9DSW5pdFJlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9JT0NfSU5JVDsKIAltcGlfcmVxdWVzdC5XaG9Jbml0ID0gTVBJMl9XSE9JTklUX0hPU1RfRFJJVkVSOwotCW1waV9yZXF1ZXN0LlZGX0lEID0gVkZfSUQ7CisJbXBpX3JlcXVlc3QuVkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QuVlBfSUQgPSAwOwogCW1waV9yZXF1ZXN0Lk1zZ1ZlcnNpb24gPSBjcHVfdG9fbGUxNihNUEkyX1ZFUlNJT04pOwogCW1waV9yZXF1ZXN0LkhlYWRlclZlcnNpb24gPSBjcHVfdG9fbGUxNihNUEkyX0hFQURFUl9WRVJTSU9OKTsKIApAQCAtMjc5NSwxMyArMjk1NSwxMiBAQAogLyoqCiAgKiBfYmFzZV9zZW5kX3BvcnRfZW5hYmxlIC0gc2VuZCBwb3J0X2VuYWJsZShkaXNjb3Zlcnkgc3R1ZmYpIHRvIGZpcm13YXJlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAogICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAogICoKICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQKLV9iYXNlX3NlbmRfcG9ydF9lbmFibGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgaW50IHNsZWVwX2ZsYWcpCitfYmFzZV9zZW5kX3BvcnRfZW5hYmxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcpCiB7CiAJTXBpMlBvcnRFbmFibGVSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OwogCXUzMiBpb2Nfc3RhdGU7CkBAIC0yODI5LDkgKzI5ODgsMTEgQEAKIAlpb2MtPmJhc2VfY21kcy5zbWlkID0gc21pZDsKIAltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyUG9ydEVuYWJsZVJlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fUE9SVF9FTkFCTEU7Ci0JbXBpX3JlcXVlc3QtPlZGX0lEID0gVkZfSUQ7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIFZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+YmFzZV9jbWRzLmRvbmUsCiAJICAgIDMwMCpIWik7CiAJaWYgKCEoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CkBAIC0yODkyLDEzICszMDUzLDEyIEBACiAvKioKICAqIF9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbiAtIHNlbmQgZXZlbnQgbm90aWZpY2F0aW9uCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAogICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAogICoKICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQKLV9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCBpbnQgc2xlZXBfZmxhZykKK19iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnKQogewogCU1waTJFdmVudE5vdGlmaWNhdGlvblJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CiAJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKQEAgLTI5MjYsMTEgKzMwODYsMTMgQEAKIAlpb2MtPmJhc2VfY21kcy5zbWlkID0gc21pZDsKIAltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyRXZlbnROb3RpZmljYXRpb25SZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0VWRU5UX05PVElGSUNBVElPTjsKLQltcGlfcmVxdWVzdC0+VkZfSUQgPSBWRl9JRDsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgTVBJMl9FVkVOVF9OT1RJRllfRVZFTlRNQVNLX1dPUkRTOyBpKyspCiAJCW1waV9yZXF1ZXN0LT5FdmVudE1hc2tzW2ldID0KIAkJICAgIGxlMzJfdG9fY3B1KGlvYy0+ZXZlbnRfbWFza3NbaV0pOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgVkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5iYXNlX2NtZHMuZG9uZSwgMzAqSFopOwogCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogdGltZW91dFxuIiwKQEAgLTI5ODEsNyArMzE0Myw3IEBACiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKLQlfYmFzZV9ldmVudF9ub3RpZmljYXRpb24oaW9jLCAwLCBDQU5fU0xFRVApOworCV9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihpb2MsIENBTl9TTEVFUCk7CiAJbXV0ZXhfdW5sb2NrKCZpb2MtPmJhc2VfY21kcy5tdXRleCk7CiB9CiAKQEAgLTMwMDYsNyArMzE2OCw2IEBACiAKIAlkcnNwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImNsZWFyIGludGVycnVwdHNcbiIsCiAJICAgIGlvYy0+bmFtZSkpOwotCXdyaXRlbCgwLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKIAogCWNvdW50ID0gMDsKIAlkbyB7CkBAIC0zMTYwLDMwICszMzIxLDYwIEBACiAvKioKICAqIF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsIC0gcHV0IGNvbnRyb2xsZXIgaW4gT1BFUkFUSU9OQUwgc3RhdGUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KICAqLwogc3RhdGljIGludAotX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBpbnQgc2xlZXBfZmxhZykKK19iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcpCiB7CiAJaW50IHIsIGk7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAl1MzIgcmVwbHlfYWRkcmVzczsKKwl1MTYgc21pZDsKKwlzdHJ1Y3QgX3RyX2xpc3QgKmRlbGF5ZWRfdHIsICpkZWxheWVkX3RyX25leHQ7CiAKIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIAorCS8qIGNsZWFuIHRoZSBkZWxheWVkIHRhcmdldCByZXNldCBsaXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlbGF5ZWRfdHIsIGRlbGF5ZWRfdHJfbmV4dCwKKwkgICAgJmlvYy0+ZGVsYXllZF90cl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZkZWxheWVkX3RyLT5saXN0KTsKKwkJa2ZyZWUoZGVsYXllZF90cik7CisJfQorCiAJLyogaW5pdGlhbGl6ZSB0aGUgc2NzaSBsb29rdXAgZnJlZSBsaXN0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCUlOSVRfTElTVF9IRUFEKCZpb2MtPmZyZWVfbGlzdCk7Ci0JZm9yIChpID0gMDsgaSA8IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSsrKSB7CisJc21pZCA9IDE7CisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2NzaWlvX2RlcHRoOyBpKyssIHNtaWQrKykgewogCQlpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJCWlvYy0+c2NzaV9sb29rdXBbaV0uc21pZCA9IHNtaWQ7CisJCWlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCA9IE5VTEw7CiAJCWxpc3RfYWRkX3RhaWwoJmlvYy0+c2NzaV9sb29rdXBbaV0udHJhY2tlcl9saXN0LAogCQkgICAgJmlvYy0+ZnJlZV9saXN0KTsKIAl9CisKKwkvKiBoaS1wcmlvcml0eSBxdWV1ZSAqLworCUlOSVRfTElTVF9IRUFEKCZpb2MtPmhwcl9mcmVlX2xpc3QpOworCXNtaWQgPSBpb2MtPmhpX3ByaW9yaXR5X3NtaWQ7CisJZm9yIChpID0gMDsgaSA8IGlvYy0+aGlfcHJpb3JpdHlfZGVwdGg7IGkrKywgc21pZCsrKSB7CisJCWlvYy0+aHByX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOworCQlpb2MtPmhwcl9sb29rdXBbaV0uc21pZCA9IHNtaWQ7CisJCWxpc3RfYWRkX3RhaWwoJmlvYy0+aHByX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCisJCSAgICAmaW9jLT5ocHJfZnJlZV9saXN0KTsKKwl9CisKKwkvKiBpbnRlcm5hbCBxdWV1ZSAqLworCUlOSVRfTElTVF9IRUFEKCZpb2MtPmludGVybmFsX2ZyZWVfbGlzdCk7CisJc21pZCA9IGlvYy0+aW50ZXJuYWxfc21pZDsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5pbnRlcm5hbF9kZXB0aDsgaSsrLCBzbWlkKyspIHsKKwkJaW9jLT5pbnRlcm5hbF9sb29rdXBbaV0uY2JfaWR4ID0gMHhGRjsKKwkJaW9jLT5pbnRlcm5hbF9sb29rdXBbaV0uc21pZCA9IHNtaWQ7CisJCWxpc3RfYWRkX3RhaWwoJmlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKKwkJICAgICZpb2MtPmludGVybmFsX2ZyZWVfbGlzdCk7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCiAJLyogaW5pdGlhbGl6ZSBSZXBseSBGcmVlIFF1ZXVlICovCkBAIC0zMTk2LDcgKzMzODcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGg7IGkrKykKIAkJaW9jLT5yZXBseV9wb3N0X2ZyZWVbaV0uV29yZHMgPSBVTExPTkdfTUFYOwogCi0JciA9IF9iYXNlX3NlbmRfaW9jX2luaXQoaW9jLCBWRl9JRCwgc2xlZXBfZmxhZyk7CisJciA9IF9iYXNlX3NlbmRfaW9jX2luaXQoaW9jLCBzbGVlcF9mbGFnKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKQEAgLTMyMDcsMTQgKzMzOTgsMTQgQEAKIAl3cml0ZWwoMCwgJmlvYy0+Y2hpcC0+UmVwbHlQb3N0SG9zdEluZGV4KTsKIAogCV9iYXNlX3VubWFza19pbnRlcnJ1cHRzKGlvYyk7Ci0JciA9IF9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihpb2MsIFZGX0lELCBzbGVlcF9mbGFnKTsKKwlyID0gX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCiAJaWYgKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKQogCQlfYmFzZV9zdGF0aWNfY29uZmlnX3BhZ2VzKGlvYyk7CiAKLQlyID0gX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZShpb2MsIFZGX0lELCBzbGVlcF9mbGFnKTsKKwlyID0gX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZShpb2MsIHNsZWVwX2ZsYWcpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIApAQCAtMzI3OCw2ICszNDY5LDE3IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwogCisJaW9jLT5wZmFjdHMgPSBrY2FsbG9jKGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0cywKKwkgICAgc2l6ZW9mKE1waTJQb3J0RmFjdHNSZXBseV90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MtPnBmYWN0cykKKwkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0czsgaSsrKSB7CisJCXIgPSBfYmFzZV9nZXRfcG9ydF9mYWN0cyhpb2MsIGksIENBTl9TTEVFUCk7CisJCWlmIChyKQorCQkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CisJfQorCiAJciA9IF9iYXNlX2FsbG9jYXRlX21lbW9yeV9wb29scyhpb2MsIENBTl9TTEVFUCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwpAQCAtMzI4Niw3ICszNDg4LDYgQEAKIAogCS8qIGJhc2UgaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCiAJbXV0ZXhfaW5pdCgmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CiAJaW9jLT5iYXNlX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwogCWlvYy0+YmFzZV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwogCkBAIC0zMjk0LDcgKzM0OTUsNiBAQAogCWlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwogCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAJbXV0ZXhfaW5pdCgmaW9jLT50cmFuc3BvcnRfY21kcy5tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUpOwogCiAJLyogdGFzayBtYW5hZ2VtZW50IGludGVybmFsIGNvbW1hbmQgYml0cyAqLwogCWlvYy0+dG1fY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CkBAIC0zMzEwLDcgKzM1MTAsNiBAQAogCWlvYy0+Y3RsX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwogCWlvYy0+Y3RsX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAJbXV0ZXhfaW5pdCgmaW9jLT5jdGxfY21kcy5tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZpb2MtPmN0bF9jbWRzLmRvbmUpOwogCiAJZm9yIChpID0gMDsgaSA8IE1QSTJfRVZFTlRfTk9USUZZX0VWRU5UTUFTS19XT1JEUzsgaSsrKQogCQlpb2MtPmV2ZW50X21hc2tzW2ldID0gLTE7CkBAIC0zMzI3LDE4ICszNTI2LDcgQEAKIAlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9JUl9PUEVSQVRJT05fU1RBVFVTKTsKIAlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9UQVNLX1NFVF9GVUxMKTsKIAlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQpOwotCi0JaW9jLT5wZmFjdHMgPSBrY2FsbG9jKGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0cywKLQkgICAgc2l6ZW9mKE1waTJQb3J0RmFjdHNSZXBseV90KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpb2MtPnBmYWN0cykKLQkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0czsgaSsrKSB7Ci0JCXIgPSBfYmFzZV9nZXRfcG9ydF9mYWN0cyhpb2MsIGksIENBTl9TTEVFUCk7Ci0JCWlmIChyKQotCQkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7Ci0JfQotCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIDAsIENBTl9TTEVFUCk7CisJciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgQ0FOX1NMRUVQKTsKIAlpZiAocikKIAkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CiAKQEAgLTM0NjYsNyArMzY1NCw3IEBACiAKIAkvKiBwZW5kaW5nIGNvbW1hbmQgY291bnQgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNjc2lpb19kZXB0aDsgaSsrKQogCQlpZiAoaW9jLT5zY3NpX2xvb2t1cFtpXS5jYl9pZHggIT0gMHhGRikKIAkJCWlvYy0+cGVuZGluZ19pb19jb3VudCsrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwpAQCAtMzQ5MCw3ICszNjc4LDcgQEAKIG1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZywKICAgICBlbnVtIHJlc2V0X3R5cGUgdHlwZSkKIHsKLQlpbnQgciwgaTsKKwlpbnQgcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKQEAgLTM1MTMsOSArMzcwMSw3IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCV9iYXNlX3Jlc2V0X2hhbmRsZXIoaW9jLCBNUFQyX0lPQ19BRlRFUl9SRVNFVCk7Ci0JZm9yIChpID0gMCA7IGkgPCBpb2MtPmZhY3RzLk51bWJlck9mUG9ydHM7IGkrKykKLQkJciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgaW9jLT5wZmFjdHNbaV0uVkZfSUQsCi0JCSAgICBzbGVlcF9mbGFnKTsKKwlyID0gX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoaW9jLCBzbGVlcF9mbGFnKTsKIAlpZiAoIXIpCiAJCV9iYXNlX3Jlc2V0X2hhbmRsZXIoaW9jLCBNUFQyX0lPQ19ET05FX1JFU0VUKTsKICBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCmluZGV4IDJmYWFiMWUuLjBjZjZiYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCkBAIC0zLDcgKzMsNyBAQAogICogZm9yIGFjY2VzcyB0byBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBmaXJtd2FyZS4KICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9iYXNlLmgKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNjksMTAgKzY5LDEwIEBACiAjZGVmaW5lIE1QVDJTQVNfRFJJVkVSX05BTUUJCSJtcHQyc2FzIgogI2RlZmluZSBNUFQyU0FTX0FVVEhPUgkiTFNJIENvcnBvcmF0aW9uIDxETC1NUFRGdXNpb25MaW51eEBsc2kuY29tPiIKICNkZWZpbmUgTVBUMlNBU19ERVNDUklQVElPTgkiTFNJIE1QVCBGdXNpb24gU0FTIDIuMCBEZXZpY2UgRHJpdmVyIgotI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDEuMTAwLjA2LjAwIgotI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTAxCisjZGVmaW5lIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04JCSIwMi4xMDAuMDMuMDAiCisjZGVmaW5lIE1QVDJTQVNfTUFKT1JfVkVSU0lPTgkJMDIKICNkZWZpbmUgTVBUMlNBU19NSU5PUl9WRVJTSU9OCQkxMDAKLSNkZWZpbmUgTVBUMlNBU19CVUlMRF9WRVJTSU9OCQkwNgorI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTAzCiAjZGVmaW5lIE1QVDJTQVNfUkVMRUFTRV9WRVJTSU9OCQkwMAogCiAvKgpAQCAtMjY0LDYgKzI2NCwxMyBAQAogICogU0FTIFRvcG9sb2d5IFN0cnVjdHVyZXMKICAqLwogCisjZGVmaW5lIE1QVFNBU19TVEFURV9UUl9TRU5ECQkweDAwMDEKKyNkZWZpbmUgTVBUU0FTX1NUQVRFX1RSX0NPTVBMRVRFCTB4MDAwMgorI2RlZmluZSBNUFRTQVNfU1RBVEVfQ05UUkxfU0VORAkJMHgwMDA0CisjZGVmaW5lIE1QVFNBU19TVEFURV9DTlRSTF9DT01QTEVURQkweDAwMDgKKworI2RlZmluZSBNUFQyU0FTX1JFUV9TQVNfQ05UUkwJCTB4MDAxMAorCiAvKioKICAqIHN0cnVjdCBfc2FzX2RldmljZSAtIGF0dGFjaGVkIGRldmljZSBpbmZvcm1hdGlvbgogICogQGxpc3Q6IHNhcyBkZXZpY2UgbGlzdApAQCAtMzAwLDYgKzMwNyw3IEBACiAJdTE2CXNsb3Q7CiAJdTgJaGlkZGVuX3JhaWRfY29tcG9uZW50OwogCXU4CXJlc3BvbmRpbmc7CisJdTE2CXN0YXRlOwogfTsKIAogLyoqCkBAIC00MzYsNiArNDQ0LDE3IEBACiAJc3RydWN0IGxpc3RfaGVhZCB0cmFja2VyX2xpc3Q7CiB9OwogCisvKioKKyAqIHN0cnVjdCBfdHJfbGlzdCAtIHRhcmdldCByZXNldCBsaXN0CisgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCisgKiBAc3RhdGU6IHN0YXRlIG1hY2hpbmUKKyAqLworc3RydWN0IF90cl9saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdTE2CWhhbmRsZTsKKwl1MTYJc3RhdGU7Cit9OworCiB0eXBlZGVmIHZvaWQgKCpNUFRfQUREX1NHRSkodm9pZCAqcGFkZHIsIHUzMiBmbGFnc19sZW5ndGgsIGRtYV9hZGRyX3QgZG1hX2FkZHIpOwogCiAvKioKQEAgLTUxMCw4ICs1MjksOSBAQAogICogQGNvbmZpZ19wYWdlX3N6OiBjb25maWcgcGFnZSBzaXplCiAgKiBAY29uZmlnX3BhZ2U6IHJlc2VydmUgbWVtb3J5IGZvciBjb25maWcgcGFnZSBwYXlsb2FkCiAgKiBAY29uZmlnX3BhZ2VfZG1hOgorICogQGhiYV9xdWV1ZV9kZXB0aDogaGJhIHJlcXVlc3QgcXVldWUgZGVwdGgKICAqIEBzZ2Vfc2l6ZTogc2cgZWxlbWVudCBzaXplIGZvciBlaXRoZXIgMzIvNjQgYml0Ci0gKiBAcmVxdWVzdF9kZXB0aDogaGJhIHJlcXVlc3QgcXVldWUgZGVwdGgKKyAqIEBzY3NpaW9fZGVwdGg6IFNDU0lfSU8gcXVldWUgZGVwdGgKICAqIEByZXF1ZXN0X3N6OiBwZXIgcmVxdWVzdCBmcmFtZSBzaXplCiAgKiBAcmVxdWVzdDogcG9vbCBvZiByZXF1ZXN0IGZyYW1lcwogICogQHJlcXVlc3RfZG1hOgpAQCAtNTI4LDYgKzU0OCwxOCBAQAogICogQGNoYWluc19uZWVkZWRfcGVyX2lvOiBtYXggY2hhaW5zIHBlciBpbwogICogQGNoYWluX29mZnNldF92YWx1ZV9mb3JfbWFpbl9tZXNzYWdlOiBsb2NhdGlvbiAxc3Qgc2cgaW4gbWFpbgogICogQGNoYWluX2RlcHRoOiB0b3RhbCBjaGFpbnMgYWxsb2NhdGVkCisgKiBAaGlfcHJpb3JpdHlfc21pZDoKKyAqIEBoaV9wcmlvcml0eToKKyAqIEBoaV9wcmlvcml0eV9kbWE6CisgKiBAaGlfcHJpb3JpdHlfZGVwdGg6CisgKiBAaHByX2xvb2t1cDoKKyAqIEBocHJfZnJlZV9saXN0OgorICogQGludGVybmFsX3NtaWQ6CisgKiBAaW50ZXJuYWw6CisgKiBAaW50ZXJuYWxfZG1hOgorICogQGludGVybmFsX2RlcHRoOgorICogQGludGVybmFsX2xvb2t1cDoKKyAqIEBpbnRlcm5hbF9mcmVlX2xpc3Q6CiAgKiBAc2Vuc2U6IHBvb2wgb2Ygc2Vuc2UKICAqIEBzZW5zZV9kbWE6CiAgKiBAc2Vuc2VfZG1hX3Bvb2w6CkBAIC01OTcsNiArNjI5LDggQEAKIAl1OAkJY3RsX2NiX2lkeDsKIAl1OAkJYmFzZV9jYl9pZHg7CiAJdTgJCWNvbmZpZ19jYl9pZHg7CisJdTgJCXRtX3RyX2NiX2lkeDsKKwl1OAkJdG1fc2FzX2NvbnRyb2xfY2JfaWR4OwogCXN0cnVjdCBfaW50ZXJuYWxfY21kIGJhc2VfY21kczsKIAlzdHJ1Y3QgX2ludGVybmFsX2NtZCB0cmFuc3BvcnRfY21kczsKIAlzdHJ1Y3QgX2ludGVybmFsX2NtZCB0bV9jbWRzOwpAQCAtNjQzLDkgKzY3NywxMCBAQAogCXZvaWQgCQkqY29uZmlnX3BhZ2U7CiAJZG1hX2FkZHJfdAljb25maWdfcGFnZV9kbWE7CiAKLQkvKiByZXF1ZXN0ICovCisJLyogc2NzaWlvIHJlcXVlc3QgKi8KKwl1MTYJCWhiYV9xdWV1ZV9kZXB0aDsKIAl1MTYJCXNnZV9zaXplOwotCXUxNiAJCXJlcXVlc3RfZGVwdGg7CisJdTE2IAkJc2NzaWlvX2RlcHRoOwogCXUxNgkJcmVxdWVzdF9zejsKIAl1OAkJKnJlcXVlc3Q7CiAJZG1hX2FkZHJfdAlyZXF1ZXN0X2RtYTsKQEAgLTY2NSw2ICs3MDAsMjIgQEAKIAl1MTYJCWNoYWluX29mZnNldF92YWx1ZV9mb3JfbWFpbl9tZXNzYWdlOwogCXUxNgkJY2hhaW5fZGVwdGg7CiAKKwkvKiBoaS1wcmlvcml0eSBxdWV1ZSAqLworCXUxNgkJaGlfcHJpb3JpdHlfc21pZDsKKwl1OAkJKmhpX3ByaW9yaXR5OworCWRtYV9hZGRyX3QJaGlfcHJpb3JpdHlfZG1hOworCXUxNgkJaGlfcHJpb3JpdHlfZGVwdGg7CisJc3RydWN0IHJlcXVlc3RfdHJhY2tlciAqaHByX2xvb2t1cDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhwcl9mcmVlX2xpc3Q7CisKKwkvKiBpbnRlcm5hbCBxdWV1ZSAqLworCXUxNgkJaW50ZXJuYWxfc21pZDsKKwl1OAkJKmludGVybmFsOworCWRtYV9hZGRyX3QJaW50ZXJuYWxfZG1hOworCXUxNgkJaW50ZXJuYWxfZGVwdGg7CisJc3RydWN0IHJlcXVlc3RfdHJhY2tlciAqaW50ZXJuYWxfbG9va3VwOworCXN0cnVjdCBsaXN0X2hlYWQgaW50ZXJuYWxfZnJlZV9saXN0OworCiAJLyogc2Vuc2UgKi8KIAl1OAkJKnNlbnNlOwogCWRtYV9hZGRyX3QJc2Vuc2VfZG1hOwpAQCAtNjkwLDYgKzc0MSw4IEBACiAJc3RydWN0IGRtYV9wb29sICpyZXBseV9wb3N0X2ZyZWVfZG1hX3Bvb2w7CiAJdTMyCQlyZXBseV9wb3N0X2hvc3RfaW5kZXg7CiAKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGF5ZWRfdHJfbGlzdDsKKwogCS8qIGRpYWcgYnVmZmVyIHN1cHBvcnQgKi8KIAl1OAkJKmRpYWdfYnVmZmVyW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CiAJdTMyCQlkaWFnX2J1ZmZlcl9zeltNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOwpAQCAtNzAxLDcgKzc1NCw3IEBACiAJdTMyCQlkaWFnbm9zdGljX2ZsYWdzW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CiB9OwogCi10eXBlZGVmIHZvaWQgKCpNUFRfQ0FMTEJBQ0spKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELAordHlwZWRlZiB1OCAoKk1QVF9DQUxMQkFDSykoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKICAgICB1MzIgcmVwbHkpOwogCiAKQEAgLTcyMCwyMiArNzczLDI4IEBACiB2b2lkICptcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKIHZvaWQgKm1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwogdm9pZCBtcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdm9pZCAqcGFkZHIpOwotZG1hX2FkZHJfdCBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZV9kbWEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7Ci1kbWFfYWRkcl90IG1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKK2RtYV9hZGRyX3QgbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXJfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICB1MTYgc21pZCk7CisKKy8qIGhpLXByaW9yaXR5IHF1ZXVlICovCit1MTYgbXB0MnNhc19iYXNlX2dldF9zbWlkX2hwcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IGNiX2lkeCk7Cit1MTYgbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IGNiX2lkeCwKKyAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKTsKIAogdTE2IG1wdDJzYXNfYmFzZV9nZXRfc21pZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IGNiX2lkeCk7CiB2b2lkIG1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7Ci12b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkLAordm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAogICAgIHUxNiBoYW5kbGUpOwotdm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQpOwordm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CiB2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF90YXJnZXRfYXNzaXN0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCi0gICAgdTggdmZfaWQsIHUxNiBpb19pbmRleCk7Ci12b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkKTsKKyAgICB1MTYgaW9faW5kZXgpOwordm9pZCBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKIHZvaWQgbXB0MnNhc19iYXNlX2luaXRpYWxpemVfY2FsbGJhY2tfaGFuZGxlcih2b2lkKTsKIHU4IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKE1QVF9DQUxMQkFDSyBjYl9mdW5jKTsKIHZvaWQgbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih1OCBjYl9pZHgpOwogCi12b2lkIG1wdDJzYXNfYmFzZV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwordTggbXB0MnNhc19iYXNlX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpOwogdm9pZCAqbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MzIgcGh5c19hZGRyKTsKIAogdTMyIG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgY29va2VkKTsKQEAgLTc0OSw2ICs4MDgsOCBAQAogdm9pZCBtcHQyc2FzX2Jhc2VfdmFsaWRhdGVfZXZlbnRfdHlwZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUzMiAqZXZlbnRfdHlwZSk7CiAKIC8qIHNjc2loIHNoYXJlZCBBUEkgKi8KK3U4IG1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSk7CiB2b2lkIG1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlLCB1aW50IGx1biwKICAgICB1OCB0eXBlLCB1MTYgc21pZF90YXNrLCB1bG9uZyB0aW1lb3V0KTsKIHZvaWQgbXB0MnNhc19zY3NpaF9zZXRfdG1fZmxhZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpOwpAQCAtNzYwLDExICs4MjEsMTEgQEAKIHN0cnVjdCBfc2FzX2RldmljZSAqbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoCiAgICAgc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2FkZHJlc3MpOwogCi12b2lkIG1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKIHZvaWQgbXB0MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHJlc2V0X3BoYXNlKTsKIAogLyogY29uZmlnIHNoYXJlZCBBUEkgKi8KLXZvaWQgbXB0MnNhc19jb25maWdfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3U4IG1wdDJzYXNfY29uZmlnX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9udW1iZXJfaGJhX3BoeXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCAqbnVtX3BoeXMpOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9tYW51ZmFjdHVyaW5nX3BnMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgTXBpMk1hbnVmYWN0dXJpbmdQYWdlMF90ICpjb25maWdfcGFnZSk7CkBAIC04MTcsMTQgKzg3OCwxNyBAQAogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptcHQyc2FzX2Rldl9hdHRyc1tdOwogdm9pZCBtcHQyc2FzX2N0bF9pbml0KHZvaWQpOwogdm9pZCBtcHQyc2FzX2N0bF9leGl0KHZvaWQpOwotdm9pZCBtcHQyc2FzX2N0bF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwordTggbXB0MnNhc19jdGxfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSk7CiB2b2lkIG1wdDJzYXNfY3RsX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpOwotdm9pZCBtcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwordTggbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSk7CiB2b2lkIG1wdDJzYXNfY3RsX2FkZF90b19ldmVudF9sb2coc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIE1waTJFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKm1waV9yZXBseSk7CiAKIC8qIHRyYW5zcG9ydCBzaGFyZWQgQVBJICovCi12b2lkIG1wdDJzYXNfdHJhbnNwb3J0X2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSk7Cit1OCBtcHQyc2FzX3RyYW5zcG9ydF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIHN0cnVjdCBfc2FzX3BvcnQgKm1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfYWRkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKICAgICB1MTYgaGFuZGxlLCB1MTYgcGFyZW50X2hhbmRsZSk7CiB2b2lkIG1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHNhc19hZGRyZXNzLApAQCAtODM4LDYgKzkwMiw4IEBACiBleHRlcm4gc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSBtcHQyc2FzX3RyYW5zcG9ydF9mdW5jdGlvbnM7CiBleHRlcm4gc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICptcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZTsKIGV4dGVybiBpbnQgc2NzaV9pbnRlcm5hbF9kZXZpY2VfYmxvY2soc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKK2V4dGVybiB1OCBtcHQyc2FzX3N0bV96ZXJvX3NtaWRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgdTggbXNpeF9pbmRleCwgdTMyIHJlcGx5KTsKIGV4dGVybiBpbnQgc2NzaV9pbnRlcm5hbF9kZXZpY2VfdW5ibG9jayhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwogCiAjZW5kaWYgLyogTVBUMlNBU19CQVNFX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCmluZGV4IGFiOGM1NjAuLjU5NGEzODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYwpAQCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGNvbW1vbiBBUEkgZm9yIGFjY2Vzc2luZyBmaXJtd2FyZSBjb25maWd1cmF0aW9uIHBhZ2VzCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfYmFzZS5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyNywyMyArMjI3LDI1IEBACiAgKiBtcHQyc2FzX2NvbmZpZ19kb25lIC0gY29uZmlnIHBhZ2UgY29tcGxldGlvbiByb3V0aW5lCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKiBDb250ZXh0OiBub25lLgogICoKICAqIFRoZSBjYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgX2NvbmZpZ19yZXF1ZXN0LgogICoKLSAqIFJldHVybiBub3RoaW5nLgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXZvaWQKLW1wdDJzYXNfY29uZmlnX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSkKK3U4CittcHQyc2FzX2NvbmZpZ19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KQogewogCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlmIChpb2MtPmNvbmZpZ19jbWRzLnNtaWQgIT0gc21pZCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9DT01QTEVURTsKIAltcGlfcmVwbHkgPSAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJaWYgKG1waV9yZXBseSkgewpAQCAtMjU3LDYgKzI1OSw3IEBACiAjZW5kaWYKIAlpb2MtPmNvbmZpZ19jbWRzLnNtaWQgPSBVU0hPUlRfTUFYOwogCWNvbXBsZXRlKCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUpOworCXJldHVybiAxOwogfQogCiAvKioKQEAgLTMwMyw2ICszMDYsOSBAQAogCXJldHJ5X2NvdW50ID0gMDsKIAltZW1zZXQoJm1lbSwgMCwgc2l6ZW9mKHN0cnVjdCBjb25maWdfcmVxdWVzdCkpOwogCisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CisKIAlpZiAoY29uZmlnX3BhZ2UpIHsKIAkJbXBpX3JlcXVlc3QtPkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwogCQltcGlfcmVxdWVzdC0+SGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwpAQCAtMzgwLDcgKzM4Niw3IEBACiAJX2NvbmZpZ19kaXNwbGF5X3NvbWVfZGVidWcoaW9jLCBzbWlkLCAiY29uZmlnX3JlcXVlc3QiLCBOVUxMKTsKICNlbmRpZgogCWluaXRfY29tcGxldGlvbigmaW9jLT5jb25maWdfY21kcy5kb25lKTsKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIGNvbmZpZ19yZXF1ZXN0LT5WRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jb25maWdfY21kcy5kb25lLAogCSAgICB0aW1lb3V0KkhaKTsKIAlpZiAoIShpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKaW5kZXggYzJhNTEwMS4uNTdkNzI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCkBAIC0zLDcgKzMsNyBAQAogICogY29udHJvbGxlcnMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9jdGwuYwotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMTksMjMgKzIxOSwyNSBAQAogICogbXB0MnNhc19jdGxfZG9uZSAtIGN0bCBtb2R1bGUgY29tcGxldGlvbiByb3V0aW5lCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKiBDb250ZXh0OiBub25lLgogICoKICAqIFRoZSBjYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgaW9jLT5jdGxfY2JfaWR4LgogICoKLSAqIFJldHVybiBub3RoaW5nLgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXZvaWQKLW1wdDJzYXNfY3RsX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSkKK3U4CittcHQyc2FzX2N0bF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisJdTMyIHJlcGx5KQogewogCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJaWYgKGlvYy0+Y3RsX2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlmIChpb2MtPmN0bF9jbWRzLnNtaWQgIT0gc21pZCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpb2MtPmN0bF9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9DT01QTEVURTsKIAltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAlpZiAobXBpX3JlcGx5KSB7CkBAIC0yNDcsNiArMjQ5LDcgQEAKICNlbmRpZgogCWlvYy0+Y3RsX2NtZHMuc3RhdHVzICY9IH5NUFQyX0NNRF9QRU5ESU5HOwogCWNvbXBsZXRlKCZpb2MtPmN0bF9jbWRzLmRvbmUpOworCXJldHVybiAxOwogfQogCiAvKioKQEAgLTMyOCwyMiArMzMxLDI1IEBACiAvKioKICAqIG1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrIC0gZmlybXdhcmUgZXZlbnQgaGFuZGxlciAoY2FsbGVkIGF0IElTUiB0aW1lKQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKiBDb250ZXh0OiBpbnRlcnJ1cHQuCiAgKgogICogVGhpcyBmdW5jdGlvbiBtZXJlbHkgYWRkcyBhIG5ldyB3b3JrIHRhc2sgaW50byBpb2MtPmZpcm13YXJlX2V2ZW50X3RocmVhZC4KICAqIFRoZSB0YXNrcyBhcmUgd29ya2VkIGZyb20gX2Zpcm13YXJlX2V2ZW50X3dvcmsgaW4gdXNlciBjb250ZXh0LgogICoKLSAqIFJldHVybiBub3RoaW5nLgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXZvaWQKLW1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSkKK3U4CittcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IG1zaXhfaW5kZXgsCisJdTMyIHJlcGx5KQogewogCU1waTJFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKm1waV9yZXBseTsKIAogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCW1wdDJzYXNfY3RsX2FkZF90b19ldmVudF9sb2coaW9jLCBtcGlfcmVwbHkpOworCXJldHVybiAxOwogfQogCiAvKioKQEAgLTUwNyw3ICs1MTMsNyBAQAogCiAJaGFuZGxlID0gbGUxNl90b19jcHUodG1fcmVxdWVzdC0+RGV2SGFuZGxlKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gaW9jLT5yZXF1ZXN0X2RlcHRoOyBpICYmICFmb3VuZDsgaS0tKSB7CisJZm9yIChpID0gaW9jLT5zY3NpaW9fZGVwdGg7IGkgJiYgIWZvdW5kOyBpLS0pIHsKIAkJc2NtZCA9IGlvYy0+c2NzaV9sb29rdXBbaSAtIDFdLnNjbWQ7CiAJCWlmIChzY21kID09IE5VTEwgfHwgc2NtZC0+ZGV2aWNlID09IE5VTEwgfHwKIAkJICAgIHNjbWQtPmRldmljZS0+aG9zdGRhdGEgPT0gTlVMTCkKQEAgLTYxNCw3ICs2MjAsNyBAQAogCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGlvYyBpcyBvcGVyYXRpb25hbFxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOwogCi0Jc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+Y3RsX2NiX2lkeCk7CisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8oaW9jLCBpb2MtPmN0bF9jYl9pZHgsIE5VTEwpOwogCWlmICghc21pZCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKQEAgLTczNyw3ICs3NDMsNyBAQAogCQkgICAgKHUzMiltcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcl9kbWEoaW9jLCBzbWlkKTsKIAkJcHJpdl9zZW5zZSA9IG1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyKGlvYywgc21pZCk7CiAJCW1lbXNldChwcml2X3NlbnNlLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwotCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhpb2MsIHNtaWQsIDAsCisJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKGlvYywgc21pZCwKIAkJICAgIGxlMTZfdG9fY3B1KG1waV9yZXF1ZXN0LT5GdW5jdGlvbkRlcGVuZGVudDEpKTsKIAkJYnJlYWs7CiAJfQpAQCAtNzU5LDggKzc2NSw3IEBACiAJCW11dGV4X2xvY2soJmlvYy0+dG1fY21kcy5tdXRleCk7CiAJCW1wdDJzYXNfc2NzaWhfc2V0X3RtX2ZsYWcoaW9jLCBsZTE2X3RvX2NwdSgKIAkJICAgIHRtX3JlcXVlc3QtPkRldkhhbmRsZSkpOwotCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkLAotCQkgICAgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KGlvYywgc21pZCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOgpAQCAtNzgxLDcgKzc4Niw3IEBACiAJCQlpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzID0gMTsKIAkJCWlvYy0+aWdub3JlX2xvZ2luZm9zID0gMTsKIAkJfQotCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIE1QSTJfRlVOQ1RJT05fU0FTX0lPX1VOSVRfQ09OVFJPTDoKQEAgLTc5NSwxMSArODAwLDExIEBACiAJCQlpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzID0gMTsKIAkJCWlvYy0+aWdub3JlX2xvZ2luZm9zID0gMTsKIAkJfQotCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CiAJCWJyZWFrOwogCX0KIAlkZWZhdWx0OgotCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CiAJCWJyZWFrOwogCX0KIApAQCAtODA3LDYgKzgxMiw3IEBACiAJCXRpbWVvdXQgPSBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVDsKIAllbHNlCiAJCXRpbWVvdXQgPSBrYXJnLnRpbWVvdXQ7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmN0bF9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmN0bF9jbWRzLmRvbmUsCiAJICAgIHRpbWVvdXQqSFopOwogCWlmIChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX1RBU0tfTUdNVCkgewpAQCAtMTM3MSw2ICsxMzc3LDggQEAKIAltcGlfcmVxdWVzdC0+RmxhZ3MgPSBjcHVfdG9fbGUzMihrYXJnLmRpYWdub3N0aWNfZmxhZ3MpOwogCW1waV9yZXF1ZXN0LT5CdWZmZXJBZGRyZXNzID0gY3B1X3RvX2xlNjQocmVxdWVzdF9kYXRhX2RtYSk7CiAJbXBpX3JlcXVlc3QtPkJ1ZmZlckxlbmd0aCA9IGNwdV90b19sZTMyKHJlcXVlc3RfZGF0YV9zeik7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAKIAlkY3RscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZGlhZ19idWZmZXIoMHglcCksICIKIAkgICAgImRtYSgweCVsbHgpLCBzeiglZClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIHJlcXVlc3RfZGF0YSwKQEAgLTEzODAsNyArMTM4OCw4IEBACiAJCW1waV9yZXF1ZXN0LT5Qcm9kdWN0U3BlY2lmaWNbaV0gPQogCQkJY3B1X3RvX2xlMzIoaW9jLT5wcm9kdWN0X3NwZWNpZmljW2J1ZmZlcl90eXBlXVtpXSk7CiAKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKIAkgICAgTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQqSFopOwogCkBAIC0xNjQzLDggKzE2NTIsMTEgQEAKIAogCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fRElBR19SRUxFQVNFOwogCW1waV9yZXF1ZXN0LT5CdWZmZXJUeXBlID0gYnVmZmVyX3R5cGU7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKIAkgICAgTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQqSFopOwogCkBAIC0xOTAyLDggKzE5MTQsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTVBUMl9QUk9EVUNUX1NQRUNJRklDX0RXT1JEUzsgaSsrKQogCQltcGlfcmVxdWVzdC0+UHJvZHVjdFNwZWNpZmljW2ldID0KIAkJCWNwdV90b19sZTMyKGlvYy0+cHJvZHVjdF9zcGVjaWZpY1tidWZmZXJfdHlwZV1baV0pOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCi0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBtcGlfcmVxdWVzdC0+VkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmN0bF9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmN0bF9jbWRzLmRvbmUsCiAJICAgIE1QVDJfSU9DVExfREVGQVVMVF9USU1FT1VUKkhaKTsKIApAQCAtMjA2OSw2ICsyMDg0LDcgQEAKIF9jdGxfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWxvbmcgcmV0OworCiAJbG9ja19rZXJuZWwoKTsKIAlyZXQgPSBfY3RsX2lvY3RsX21haW4oZmlsZSwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwogCXVubG9ja19rZXJuZWwoKTsKQEAgLTIxNDMsNiArMjE1OSw3IEBACiBfY3RsX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlsb25nIHJldDsKKwogCWxvY2tfa2VybmVsKCk7CiAJaWYgKGNtZCA9PSBNUFQyQ09NTUFORDMyKQogCQlyZXQgPSBfY3RsX2NvbXBhdF9tcHRfY29tbWFuZChmaWxlLCBjbWQsIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaAppbmRleCA0ZGExMTQzLi4yMTFmMjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmgKQEAgLTMsNyArMyw3IEBACiAgKiBjb250cm9sbGVycwogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2N0bC5oCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfZGVidWcuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfZGVidWcuaAppbmRleCBhZDMyNTA5Li41MzA4YTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oCkBAIC0yLDcgKzIsNyBAQAogICogTG9nZ2luZyBTdXBwb3J0IGZvciBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBiYXNlZCBjb250cm9sbGVycwogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2RlYnVnLmMKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IDc3NGIzNDUuLjg2YWIzMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTIsNyArMiw3IEBACiAgKiBTY3NpIEhvc3QgTGF5ZXIgZm9yIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGJhc2VkIGNvbnRyb2xsZXJzCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfc2NzaWguYwotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03OSw2ICs3OSw5IEBACiBzdGF0aWMgdTggY29uZmlnX2NiX2lkeCA9IC0xOwogc3RhdGljIGludCBtcHRfaWRzOwogCitzdGF0aWMgdTggdG1fdHJfY2JfaWR4ID0gLTEgOworc3RhdGljIHU4IHRtX3Nhc19jb250cm9sX2NiX2lkeCA9IC0xOworCiAvKiBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLwogc3RhdGljIHUzMiBsb2dnaW5nX2xldmVsOwogTU9EVUxFX1BBUk1fREVTQyhsb2dnaW5nX2xldmVsLCAiIGJpdHMgZm9yIGVuYWJsaW5nIGFkZGl0aW9uYWwgbG9nZ2luZyBpbmZvICIKQEAgLTEwOSw2ICsxMTIsNyBAQAogICogQHdvcms6IHdvcmsgb2JqZWN0IChpb2MtPmZhdWx0X3Jlc2V0X3dvcmtfcSkKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAVlBfSUQ6IHZpcnR1YWwgcG9ydCBpZAogICogQGhvc3RfcmVzZXRfaGFuZGxpbmc6IGhhbmRsaW5nIGV2ZW50cyBkdXJpbmcgaG9zdCByZXNldAogICogQGlnbm9yZTogZmxhZyBtZWFuaW5nIHRoaXMgZXZlbnQgaGFzIGJlZW4gbWFya2VkIHRvIGlnbm9yZQogICogQGV2ZW50OiBmaXJtd2FyZSBldmVudCBNUEkyX0VWRU5UX1hYWCBkZWZpbmVkIGluIG1wdDJfaW9jLmgKQEAgLTEyMSw2ICsxMjUsNyBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKIAl1OAkJCVZGX0lEOworCXU4CQkJVlBfSUQ7CiAJdTgJCQlob3N0X3Jlc2V0X2hhbmRsaW5nOwogCXU4CQkJaWdub3JlOwogCXUxNgkJCWV2ZW50OwpAQCAtMTM4LDggKzE0MywxMCBAQAogICogQGx1bjogbHVuIG51bWJlcgogICogQGNkYl9sZW5ndGg6IGNkYiBsZW5ndGgKICAqIEBjZGI6IGNkYiBjb250ZW50cwotICogQHZhbGlkX3JlcGx5OiBmbGFnIHNldCBmb3IgcmVwbHkgbWVzc2FnZQogICogQHRpbWVvdXQ6IHRpbWVvdXQgZm9yIHRoaXMgY29tbWFuZAorICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAVlBfSUQ6IHZpcnR1YWwgcG9ydCBpZAorICogQHZhbGlkX3JlcGx5OiBmbGFnIHNldCBmb3IgcmVwbHkgbWVzc2FnZQogICogQHNlbnNlX2xlbmd0aDogc2Vuc2UgbGVuZ3RoCiAgKiBAaW9jX3N0YXR1czogaW9jIHN0YXR1cwogICogQHNjc2lfc3RhdGU6IHNjc2kgc3RhdGUKQEAgLTE2MSw2ICsxNjgsOCBAQAogCXU4CWNkYl9sZW5ndGg7CiAJdTgJY2RiWzMyXTsKIAl1OAl0aW1lb3V0OworCXU4CVZGX0lEOworCXU4CVZQX0lEOwogCXU4CXZhbGlkX3JlcGx5OwogICAvKiB0aGUgZm9sbG93aW5nIGJpdHMgYXJlIG9ubHkgdmFsaWQgd2hlbiAndmFsaWRfcmVwbHkgPSAxJyAqLwogCXUzMglzZW5zZV9sZW5ndGg7CkBAIC03NTYsNjYgKzc2NSwxNiBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQgLSByZXR1cm5zIHNjbWQgZW50cnkKKyAqIG1wdHNjc2loX2dldF9zY3NpX2xvb2t1cCAtIHJldHVybnMgc2NtZCBlbnRyeQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zY3NpX2xvb2t1cF9sb2NrLgogICoKICAqIFJldHVybnMgdGhlIHNtaWQgc3RvcmVkIHNjbWQgcG9pbnRlci4KICAqLwogc3RhdGljIHN0cnVjdCBzY3NpX2NtbmQgKgogX3Njc2loX3Njc2lfbG9va3VwX2dldChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQogewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0Jc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlzY21kID0gaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gc2NtZDsKLX0KLQotLyoqCi0gKiBtcHRzY3NpaF9nZXRjbGVhcl9zY3NpX2xvb2t1cCAtIHJldHVybnMgc2NtZCBlbnRyeQotICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zY3NpX2xvb2t1cF9sb2NrLgotICoKLSAqIFJldHVybnMgdGhlIHNtaWQgc3RvcmVkIHNjbWQgcG9pbnRlciwgYXMgd2VsbCBhcyBjbGVhcmluZyB0aGUgc2NtZCBwb2ludGVyLgotICovCi1zdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqCi1fc2NzaWhfc2NzaV9sb29rdXBfZ2V0Y2xlYXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKLXsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7Ci0Jc2NtZCA9IGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQ7Ci0JaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZCA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHNjbWQ7Ci19Ci0KLS8qKgotICogX3Njc2loX3Njc2lfbG9va3VwX3NldCAtIHVwZGF0ZXMgc2NtZCBlbnRyeSBpbiBsb29rdXAKLSAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBzY21kOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKLSAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gd2lsbCBhY3F1aXJlIGlvYy0+c2NzaV9sb29rdXBfbG9jay4KLSAqCi0gKiBUaGlzIHdpbGwgc2F2ZSBzY21kIHBvaW50ZXIgaW4gdGhlIHNjc2lfbG9va3VwIGFycmF5LgotICoKLSAqIFJldHVybiBub3RoaW5nLgotICovCi1zdGF0aWMgdm9pZAotX3Njc2loX3Njc2lfbG9va3VwX3NldChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAotICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCi17Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kID0gc2NtZDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZDsKIH0KIAogLyoqCkBAIC04MzgsOSArNzk3LDkgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAlzbWlkID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5zY3NpaW9fZGVwdGg7IGkrKykgewogCQlpZiAoaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kID09IHNjbWQpIHsKLQkJCXNtaWQgPSBpICsgMTsKKwkJCXNtaWQgPSBpb2MtPnNjc2lfbG9va3VwW2ldLnNtaWQ7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTg2OSw3ICs4MjgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCWZvdW5kID0gMDsKLQlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSsrKSB7CisJZm9yIChpID0gMCA7IGkgPCBpb2MtPnNjc2lpb19kZXB0aDsgaSsrKSB7CiAJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgJiYKIAkJICAgIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQtPmRldmljZS0+aWQgPT0gaWQgJiYKIAkJICAgIGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZC0+ZGV2aWNlLT5jaGFubmVsID09IGNoYW5uZWwpKSB7CkBAIC05MDMsNyArODYyLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAlmb3VuZCA9IDA7Ci0JZm9yIChpID0gMCA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykgeworCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5zY3NpaW9fZGVwdGg7IGkrKykgewogCQlpZiAoaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kICYmCiAJCSAgICAoaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kLT5kZXZpY2UtPmlkID09IGlkICYmCiAJCSAgICBpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQtPmRldmljZS0+Y2hhbm5lbCA9PSBjaGFubmVsICYmCkBAIC0xMTEzLDcgKzEwNzIsNyBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBjaGFuZ2luZyBkZXZpY2UgcXVldWUgdGFnIHR5cGUKKyAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfdHlwZSAtIGNoYW5naW5nIGRldmljZSBxdWV1ZSB0YWcgdHlwZQogICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICogQHRhZ190eXBlOiByZXF1ZXN0ZWQgdGFnIHR5cGUKICAqCkBAIC0xNjc5LDIzICsxNjM4LDI0IEBACiAgKiBfc2NzaWhfdG1fZG9uZSAtIHRtIGNvbXBsZXRpb24gcm91dGluZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICogQ29udGV4dDogbm9uZS4KICAqCiAgKiBUaGUgY2FsbGJhY2sgaGFuZGxlciB3aGVuIHVzaW5nIHNjc2loX2lzc3VlX3RtLgogICoKLSAqIFJldHVybiBub3RoaW5nLgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkCi1fc2NzaWhfdG1fZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQorc3RhdGljIHU4Citfc2NzaWhfdG1fZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LCB1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CiAKIAlpZiAoaW9jLT50bV9jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9OT1RfVVNFRCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpZiAoaW9jLT50bV9jbWRzLnNtaWQgIT0gc21pZCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpb2MtPnRtX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOwogCW1waV9yZXBseSA9ICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAlpZiAobXBpX3JlcGx5KSB7CkBAIC0xNzA0LDYgKzE2NjQsNyBAQAogCX0KIAlpb2MtPnRtX2NtZHMuc3RhdHVzICY9IH5NUFQyX0NNRF9QRU5ESU5HOwogCWNvbXBsZXRlKCZpb2MtPnRtX2NtZHMuZG9uZSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMTc5MCw3ICsxNzUxLDYgQEAKIAl1MTYgc21pZCA9IDA7CiAJdTMyIGlvY19zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OwotCXU4IFZGX0lEID0gMDsKIAogCWlmIChpb2MtPnRtX2NtZHMuc3RhdHVzICE9IE1QVDJfQ01EX05PVF9VU0VEKSB7CiAJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogdG1fY21kIGJ1c3khISFcbiIsCkBAIC0xODE3LDcgKzE3NzcsNyBAQAogCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CiAJfQogCi0Jc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+dG1fY2JfaWR4KTsKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX2hwcihpb2MsIGlvYy0+dG1fY2JfaWR4KTsKIAlpZiAoIXNtaWQpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CkBAIC0xODI1LDcgKzE3ODUsOCBAQAogCX0KIAogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzZW5kaW5nIHRtOiBoYW5kbGUoMHglMDR4KSwiCi0JICAgICIgdGFza190eXBlKDB4JTAyeCksIHNtaWQoJWQpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSwgdHlwZSwgc21pZCkpOworCSAgICAiIHRhc2tfdHlwZSgweCUwMngpLCBzbWlkKCVkKVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUsIHR5cGUsCisJICAgIHNtaWRfdGFzaykpOwogCWlvYy0+dG1fY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOwogCW1waV9yZXF1ZXN0ID0gbXB0MnNhc19iYXNlX2dldF9tc2dfZnJhbWUoaW9jLCBzbWlkKTsKIAlpb2MtPnRtX2NtZHMuc21pZCA9IHNtaWQ7CkBAIC0xODM0LDEwICsxNzk1LDEyIEBACiAJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CiAJbXBpX3JlcXVlc3QtPlRhc2tUeXBlID0gdHlwZTsKIAltcGlfcmVxdWVzdC0+VGFza01JRCA9IGNwdV90b19sZTE2KHNtaWRfdGFzayk7CisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsgIC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOwogCWludF90b19zY3NpbHVuKGx1biwgKHN0cnVjdCBzY3NpX2x1biAqKW1waV9yZXF1ZXN0LT5MVU4pOwogCW1wdDJzYXNfc2NzaWhfc2V0X3RtX2ZsYWcoaW9jLCBoYW5kbGUpOwogCWluaXRfY29tcGxldGlvbigmaW9jLT50bV9jbWRzLmRvbmUpOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQsIFZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50bV9jbWRzLmRvbmUsIHRpbWVvdXQqSFopOwogCW1wdDJzYXNfc2NzaWhfY2xlYXJfdG1fZmxhZyhpb2MsIGhhbmRsZSk7CiAJaWYgKCEoaW9jLT50bV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX0NPTVBMRVRFKSkgewpAQCAtMjA3NSw3ICsyMDM4LDcgQEAKIH0KIAogLyoqCi0gKiBfc2NzaWhfYWJvcnQgLSBlaCB0aHJlYWRzIG1haW4gaG9zdCByZXNldCByb3V0aW5lCisgKiBfc2NzaWhfaG9zdF9yZXNldCAtIGVoIHRocmVhZHMgbWFpbiBob3N0IHJlc2V0IHJvdXRpbmUKICAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKICAqCiAgKiBSZXR1cm5zIFNVQ0NFU1MgaWYgY29tbWFuZCBhYm9ydGVkIGVsc2UgRkFJTEVECkBAIC0yMzU0LDYgKzIzMTcsMjMxIEBACiB9CiAKIC8qKgorICogX3Njc2loX3RtX3RyX3NlbmQgLSBzZW5kIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIENvbnRleHQ6IGludGVycnVwdCB0aW1lLgorICoKKyAqIFRoaXMgY29kZSBpcyB0byBpbml0aWF0ZSB0aGUgZGV2aWNlIHJlbW92YWwgaGFuZHNoYWtlIHByb3RvY2FsCisgKiB3aXRoIGNvbnRyb2xsZXIgZmlybXdhcmUuICBUaGlzIGZ1bmN0aW9uIHdpbGwgaXNzdWUgdGFyZ2V0IHJlc2V0CisgKiB1c2luZyBoaWdoIHByaW9yaXR5IHJlcXVlc3QgcXVldWUuICBJdCB3aWxsIHNlbmQgYSBzYXMgaW91bml0CisgKiBjb250cm9sbCByZXF1ZXN0IChNUEkyX1NBU19PUF9SRU1PVkVfREVWSUNFKSBmcm9tIHRoaXMgY29tcGxldGlvbi4KKyAqCisgKiBUaGlzIGlzIGRlc2lnbmVkIHRvIHNlbmQgbXVsaXBsZSB0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdCBhdCB0aGUgc2FtZQorICogdGltZSB0byB0aGUgZmlmby4gSWYgdGhlIGZpZm8gaXMgZnVsbCwgd2Ugd2lsbCBhcHBlbmQgdGhlIHJlcXVlc3QsCisgKiBhbmQgcHJvY2VzcyBpdCBpbiBhIGZ1dHVyZSBjb21wbGV0aW9uLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX3RtX3RyX3NlbmQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKQoreworCU1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJdTE2IHNtaWQ7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IF90cl9saXN0ICpkZWxheWVkX3RyOworCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluIHByb2dyZXNzIVxuIiwKKwkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlpZiAoIXNhc19kZXZpY2UpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBmaW5kaW5nIHNhc19kZXZpY2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJLyogc2tpcCBpcyBoaWRkZW4gcmFpZCBjb21wb25lbnQgKi8KKwlpZiAoc2FzX2RldmljZS0+aGlkZGVuX3JhaWRfY29tcG9uZW50KQorCQlyZXR1cm47CisKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX2hwcihpb2MsIGlvYy0+dG1fdHJfY2JfaWR4KTsKKwlpZiAoIXNtaWQpIHsKKwkJZGVsYXllZF90ciA9IGt6YWxsb2Moc2l6ZW9mKCpkZWxheWVkX3RyKSwgR0ZQX0FUT01JQyk7CisJCWlmICghZGVsYXllZF90cikKKwkJCXJldHVybjsKKwkJSU5JVF9MSVNUX0hFQUQoJmRlbGF5ZWRfdHItPmxpc3QpOworCQlkZWxheWVkX3RyLT5oYW5kbGUgPSBoYW5kbGU7CisJCWRlbGF5ZWRfdHItPnN0YXRlID0gTVBUMlNBU19SRVFfU0FTX0NOVFJMOworCQlsaXN0X2FkZF90YWlsKCZkZWxheWVkX3RyLT5saXN0LAorCQkgICAgJmlvYy0+ZGVsYXllZF90cl9saXN0KTsKKwkJaWYgKHNhc19kZXZpY2UtPnN0YXJnZXQpCisJCQlkZXd0cHJpbnRrKGlvYywgc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLAorCQkJICAgIHNhc19kZXZpY2UtPnN0YXJnZXQsICJERUxBWUVEOnRyOmhhbmRsZSgweCUwNHgpLCAiCisJCQkgICAgIihvcGVuKVxuIiwgc2FzX2RldmljZS0+aGFuZGxlKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc2FzX2RldmljZS0+c3RhcmdldCAmJiBzYXNfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YSkgeworCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHNhc19kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhOworCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+dG1fYnVzeSA9IDE7CisJCWRld3RwcmludGsoaW9jLCBzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHNhc19kZXZpY2UtPnN0YXJnZXQsCisJCSAgICAidHI6aGFuZGxlKDB4JTA0eCksIChvcGVuKVxuIiwgc2FzX2RldmljZS0+aGFuZGxlKSk7CisJfQorCisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOworCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UOworCW1waV9yZXF1ZXN0LT5EZXZIYW5kbGUgPSBjcHVfdG9fbGUxNihoYW5kbGUpOworCW1waV9yZXF1ZXN0LT5UYXNrVHlwZSA9IE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1RBUkdFVF9SRVNFVDsKKwlzYXNfZGV2aWNlLT5zdGF0ZSB8PSBNUFRTQVNfU1RBVEVfVFJfU0VORDsKKwlzYXNfZGV2aWNlLT5zdGF0ZSB8PSBNUFQyU0FTX1JFUV9TQVNfQ05UUkw7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KGlvYywgc21pZCk7Cit9CisKKworCisvKioKKyAqIF9zY3NpaF9zYXNfY29udHJvbF9jb21wbGV0ZSAtIGNvbXBsZXRpb24gcm91dGluZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCisgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKKyAqIENvbnRleHQ6IGludGVycnVwdCB0aW1lLgorICoKKyAqIFRoaXMgaXMgdGhlIHNhcyBpb3VuaXQgY29udHJvbGwgY29tcGxldGlvbiByb3V0aW5lLgorICogVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvZGUgdG8gaW5pdGlhdGUgdGhlIGRldmljZSByZW1vdmFsCisgKiBoYW5kc2hha2UgcHJvdG9jYWwgd2l0aCBjb250cm9sbGVyIGZpcm13YXJlLgorICoKKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgdTgKK19zY3NpaF9zYXNfY29udHJvbF9jb21wbGV0ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLAorICAgIHU4IG1zaXhfaW5kZXgsIHUzMiByZXBseSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBoYW5kbGU7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCU1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCAqbXBpX3JlcGx5ID0KKwkgICAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisKKwloYW5kbGUgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkRldkhhbmRsZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGZpbmRpbmcgc2FzX2RldmljZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gMTsKKwl9CisJc2FzX2RldmljZS0+c3RhdGUgfD0gTVBUU0FTX1NUQVRFX0NOVFJMX0NPTVBMRVRFOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoc2FzX2RldmljZS0+c3RhcmdldCkKKwkJZGV3dHByaW50ayhpb2MsIHN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwKKwkJICAgICJzY19jb21wbGV0ZTpoYW5kbGUoMHglMDR4KSwgIgorCQkgICAgImlvY19zdGF0dXMoMHglMDR4KSwgbG9naW5mbygweCUwOHgpXG4iLAorCQkgICAgaGFuZGxlLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyksCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pKSk7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogX3Njc2loX3RtX3RyX2NvbXBsZXRlIC0KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUworICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCisgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KKyAqCisgKiBUaGlzIGlzIHRoZSB0YXJnZXQgcmVzZXQgY29tcGxldGlvbiByb3V0aW5lLgorICogVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvZGUgdG8gaW5pdGlhdGUgdGhlIGRldmljZSByZW1vdmFsCisgKiBoYW5kc2hha2UgcHJvdG9jYWwgd2l0aCBjb250cm9sbGVyIGZpcm13YXJlLgorICogSXQgd2lsbCBzZW5kIGEgc2FzIGlvdW5pdCBjb250cm9sbCByZXF1ZXN0IChNUEkyX1NBU19PUF9SRU1PVkVfREVWSUNFKQorICoKKyAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CisgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgdTgKK19zY3NpaF90bV90cl9jb21wbGV0ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBoYW5kbGU7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCU1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXBseV90ICptcGlfcmVwbHkgPQorCSAgICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKwlNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJdTE2IHNtaWRfc2FzX2N0cmw7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlzdHJ1Y3QgX3RyX2xpc3QgKmRlbGF5ZWRfdHI7CisJdTggcmM7CisKKwloYW5kbGUgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkRldkhhbmRsZSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwlpZiAoIXNhc19kZXZpY2UpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBmaW5kaW5nIHNhc19kZXZpY2VcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDE7CisJfQorCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVFNBU19TVEFURV9UUl9DT01QTEVURTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJaWYgKHNhc19kZXZpY2UtPnN0YXJnZXQpCisJCWRld3RwcmludGsoaW9jLCBzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHNhc19kZXZpY2UtPnN0YXJnZXQsCisJCSAgICAidHJfY29tcGxldGU6aGFuZGxlKDB4JTA0eCksICglcykgaW9jX3N0YXR1cygweCUwNHgpLCAiCisJCSAgICAibG9naW5mbygweCUwOHgpLCBjb21wbGV0ZWQoJWQpXG4iLAorCQkgICAgc2FzX2RldmljZS0+aGFuZGxlLCAoc2FzX2RldmljZS0+c3RhdGUgJgorCQkgICAgTVBUMlNBU19SRVFfU0FTX0NOVFJMKSA/ICJvcGVuIiA6ICJhY3RpdmUiLAorCQkgICAgbGUxNl90b19jcHUobXBpX3JlcGx5LT5JT0NTdGF0dXMpLAorCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5JT0NMb2dJbmZvKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VGVybWluYXRpb25Db3VudCkpKTsKKworCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0ICYmIHNhc19kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhKSB7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGE7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhLT50bV9idXN5ID0gMDsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJmlvYy0+ZGVsYXllZF90cl9saXN0KSkgeworCQlkZWxheWVkX3RyID0gbGlzdF9lbnRyeShpb2MtPmRlbGF5ZWRfdHJfbGlzdC5uZXh0LAorCQkgICAgc3RydWN0IF90cl9saXN0LCBsaXN0KTsKKwkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOworCQlpZiAoZGVsYXllZF90ci0+c3RhdGUgJiBNUFQyU0FTX1JFUV9TQVNfQ05UUkwpCisJCQlfc2NzaWhfdG1fdHJfc2VuZChpb2MsIGRlbGF5ZWRfdHItPmhhbmRsZSk7CisJCWxpc3RfZGVsKCZkZWxheWVkX3RyLT5saXN0KTsKKwkJa2ZyZWUoZGVsYXllZF90cik7CisJCXJjID0gMDsgLyogdGVsbHMgYmFzZV9pbnRlcnJ1cHQgbm90IHRvIGZyZWUgbWYgKi8KKwl9IGVsc2UKKwkJcmMgPSAxOworCisKKwlpZiAoIShzYXNfZGV2aWNlLT5zdGF0ZSAmIE1QVDJTQVNfUkVRX1NBU19DTlRSTCkpCisJCXJldHVybiByYzsKKworCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCisJCSAgICBfX2Z1bmNfXywgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXNtaWRfc2FzX2N0cmwgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWQoaW9jLCBpb2MtPnRtX3Nhc19jb250cm9sX2NiX2lkeCk7CisJaWYgKCFzbWlkX3Nhc19jdHJsKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gcmM7CisJfQorCisJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWRfc2FzX2N0cmwpOworCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOworCW1waV9yZXF1ZXN0LT5PcGVyYXRpb24gPSBNUEkyX1NBU19PUF9SRU1PVkVfREVWSUNFOworCW1waV9yZXF1ZXN0LT5EZXZIYW5kbGUgPSBtcGlfcmVwbHktPkRldkhhbmRsZTsKKwlzYXNfZGV2aWNlLT5zdGF0ZSB8PSBNUFRTQVNfU1RBVEVfQ05UUkxfU0VORDsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWRfc2FzX2N0cmwpOworCXJldHVybiByYzsKK30KKworLyoqCiAgKiBfc2NzaWhfY2hlY2tfdG9wb19kZWxldGVfZXZlbnRzIC0gc2FuaXR5IGNoZWNrIG9uIHRvcG8gZXZlbnRzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBldmVudF9kYXRhOiB0aGUgZXZlbnQgZGF0YSBwYXlsb2FkCkBAIC0yMzc1LDYgKzI1NjMsMjEgQEAKIAl1MTYgZXhwYW5kZXJfaGFuZGxlOwogCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpLCByZWFzb25fY29kZTsKKwl1MTYgaGFuZGxlOworCisJZm9yIChpID0gMCA7IGkgPCBldmVudF9kYXRhLT5OdW1FbnRyaWVzOyBpKyspIHsKKwkJaWYgKGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgorCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19QSFlTVEFUVVNfVkFDQU5UKQorCQkJY29udGludWU7CisJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlBIWVtpXS5BdHRhY2hlZERldkhhbmRsZSk7CisJCWlmICghaGFuZGxlKQorCQkJY29udGludWU7CisJCXJlYXNvbl9jb2RlID0gZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX01BU0s7CisJCWlmIChyZWFzb25fY29kZSA9PSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1RBUkdfTk9UX1JFU1BPTkRJTkcpCisJCQlfc2NzaWhfdG1fdHJfc2VuZChpb2MsIGhhbmRsZSk7CisJfQogCiAJZXhwYW5kZXJfaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RXhwYW5kZXJEZXZIYW5kbGUpOwogCWlmIChleHBhbmRlcl9oYW5kbGUgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMpIHsKQEAgLTI0MzMsOCArMjYzNiw4IEBACiAJdTE2IHNtaWQ7CiAJdTE2IGNvdW50ID0gMDsKIAotCWZvciAoc21pZCA9IDE7IHNtaWQgPD0gaW9jLT5yZXF1ZXN0X2RlcHRoOyBzbWlkKyspIHsKLQkJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXRjbGVhcihpb2MsIHNtaWQpOworCWZvciAoc21pZCA9IDE7IHNtaWQgPD0gaW9jLT5zY3NpaW9fZGVwdGg7IHNtaWQrKykgeworCQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOwogCQlpZiAoIXNjbWQpCiAJCQljb250aW51ZTsKIAkJY291bnQrKzsKQEAgLTI2MTYsNyArMjgxOSw3IEBACiAJaWYgKChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX1RMUl9PTikpCiAJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfVExSX09OOwogCi0Jc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+c2NzaV9pb19jYl9pZHgpOworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvKGlvYywgaW9jLT5zY3NpX2lvX2NiX2lkeCwgc2NtZCk7CiAJaWYgKCFzbWlkKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOwpAQCAtMjY0Myw3ICsyODQ2LDggQEAKIAltcGlfcmVxdWVzdC0+U0dMT2Zmc2V0MCA9IG9mZnNldG9mKE1waTJTQ1NJSU9SZXF1ZXN0X3QsIFNHTCkgLyA0OwogCW1waV9yZXF1ZXN0LT5TR0xGbGFncyA9IGNwdV90b19sZTE2KE1QSTJfU0NTSUlPX1NHTEZMQUdTX1RZUEVfTVBJICsKIAkgICAgTVBJMl9TQ1NJSU9fU0dMRkxBR1NfU1lTVEVNX0FERFIpOwotCisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAJaW50X3RvX3Njc2lsdW4oc2FzX2RldmljZV9wcml2X2RhdGEtPmx1biwgKHN0cnVjdCBzY3NpX2x1biAqKQogCSAgICBtcGlfcmVxdWVzdC0+TFVOKTsKIAltZW1jcHkobXBpX3JlcXVlc3QtPkNEQi5DREIzMiwgc2NtZC0+Y21uZCwgc2NtZC0+Y21kX2xlbik7CkBAIC0yNjU3LDggKzI4NjEsNyBAQAogCQl9CiAJfQogCi0JX3Njc2loX3Njc2lfbG9va3VwX3NldChpb2MsIHNtaWQsIHNjbWQpOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKGlvYywgc21pZCwgMCwKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhpb2MsIHNtaWQsCiAJICAgIHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGUpOwogCXJldHVybiAwOwogCkBAIC0yOTU0LDE1ICszMTU3LDE2IEBACiAgKiBfc2NzaWhfaW9fZG9uZSAtIHNjc2kgcmVxdWVzdCBjYWxsYmFjawogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICoKLSAqIENhbGxiYWNrIGhhbmRsZXIgd2hlbiB1c2luZyBzY3NpaF9xY21kLgorICogQ2FsbGJhY2sgaGFuZGxlciB3aGVuIHVzaW5nIF9zY3NpaF9xY21kLgogICoKLSAqIFJldHVybiBub3RoaW5nLgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkCi1fc2NzaWhfaW9fZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQorc3RhdGljIHU4Citfc2NzaWhfaW9fZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LCB1MzIgcmVwbHkpCiB7CiAJTXBpMlNDU0lJT1JlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CiAJTXBpMlNDU0lJT1JlcGx5X3QgKm1waV9yZXBseTsKQEAgLTI5NzYsOSArMzE4MCw5IEBACiAJdTMyIHJlc3BvbnNlX2NvZGU7CiAKIAltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKLQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldGNsZWFyKGlvYywgc21pZCk7CisJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKIAlpZiAoc2NtZCA9PSBOVUxMKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCiAJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOwogCkBAIC0zMTM0LDYgKzMzMzgsNyBAQAogIG91dDoKIAlzY3NpX2RtYV91bm1hcChzY21kKTsKIAlzY21kLT5zY3NpX2RvbmUoc2NtZCk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMzM5OCw5ICszNjAzLDggQEAKIAkJfQogCX0KIAotCXNhc19hZGRyZXNzID0gbGU2NF90b19jcHUoZXhwYW5kZXJfcGcwLlNBU0FkZHJlc3MpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOworCXNhc19hZGRyZXNzID0gbGU2NF90b19jcHUoZXhwYW5kZXJfcGcwLlNBU0FkZHJlc3MpOwogCXNhc19leHBhbmRlciA9IG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCiAJICAgIHNhc19hZGRyZXNzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKQEAgLTM2NjYsNiArMzg3MCwxMiBAQAogCWlmIChpb2MtPnJlbW92ZV9ob3N0KQogCQlnb3RvIG91dDsKIAorCWlmICgoc2FzX2RldmljZS0+c3RhdGUgJiBNUFRTQVNfU1RBVEVfVFJfQ09NUExFVEUpKSB7CisJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiXHRza2lwICIKKwkJICAgInRhcmdldF9yZXNldCBoYW5kbGUoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUpKTsKKwkJZ290byBza2lwX3RyOworCX0KKwogCS8qIFRhcmdldCBSZXNldCB0byBmbHVzaCBvdXQgYWxsIHRoZSBvdXRzdGFuZGluZyBJTyAqLwogCWRldmljZV9oYW5kbGUgPSAoc2FzX2RldmljZS0+aGlkZGVuX3JhaWRfY29tcG9uZW50KSA/CiAJICAgIHNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUgOiBoYW5kbGU7CkBAIC0zNjgyLDYgKzM4OTIsMTMgQEAKIAkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCiAJCQlnb3RvIG91dDsKIAl9Cisgc2tpcF90cjoKKworCWlmICgoc2FzX2RldmljZS0+c3RhdGUgJiBNUFRTQVNfU1RBVEVfQ05UUkxfQ09NUExFVEUpKSB7CisJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiXHRza2lwICIKKwkJICAgInNhc19jbnRybCBoYW5kbGUoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUpKTsKKwkJZ290byBvdXQ7CisJfQogCiAJLyogU0FTX0lPX1VOSVRfQ05UUiAtIHNlbmQgUkVNT1ZFX0RFVklDRSAqLwogCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2FzX2lvdW5pdDogaGFuZGxlIgpAQCAtMzY5MCw3ICszOTA3LDggQEAKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0FTX0lPX1VOSVRfQ09OVFJPTDsKIAltcGlfcmVxdWVzdC5PcGVyYXRpb24gPSBNUEkyX1NBU19PUF9SRU1PVkVfREVWSUNFOwogCW1waV9yZXF1ZXN0LkRldkhhbmRsZSA9IGhhbmRsZTsKLQltcGlfcmVxdWVzdC5WRl9JRCA9IDA7CisJbXBpX3JlcXVlc3QuVkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QuVlBfSUQgPSAwOwogCWlmICgobXB0MnNhc19iYXNlX3Nhc19pb3VuaXRfY29udHJvbChpb2MsICZtcGlfcmVwbHksCiAJICAgICZtcGlfcmVxdWVzdCkpICE9IDApIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKQEAgLTM4MDAsMTUgKzQwMTgsMTIgQEAKIC8qKgogICogX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQgLSBoYW5kbGUgdG9wb2xvZ3kgY2hhbmdlcwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCi0gKiBmd19ldmVudDoKKyAqIEBmd19ldmVudDogVGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfdG9wb2xvZ3lfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90ICpldmVudF9kYXRhLAorX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlpbnQgaTsKQEAgLTM4MTgsNiArNDAzMyw3IEBACiAJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggbGlua19yYXRlXzsKKwlNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKIAogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQpAQCAtMzg1MSwxNSArNDA2NywxNiBAQAogCQl9CiAJCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQogCQkJcmV0dXJuOwotCQlpZiAoZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCi0JCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWVNUQVRVU19WQUNBTlQpCisJCXBoeV9udW1iZXIgPSBldmVudF9kYXRhLT5TdGFydFBoeU51bSArIGk7CisJCXJlYXNvbl9jb2RlID0gZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX01BU0s7CisJCWlmICgoZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWVNUQVRVU19WQUNBTlQpICYmIChyZWFzb25fY29kZSAhPQorCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19UQVJHX05PVF9SRVNQT05ESU5HKSkKIAkJCWNvbnRpbnVlOwogCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5QSFlbaV0uQXR0YWNoZWREZXZIYW5kbGUpOwogCQlpZiAoIWhhbmRsZSkKIAkJCWNvbnRpbnVlOwotCQlwaHlfbnVtYmVyID0gZXZlbnRfZGF0YS0+U3RhcnRQaHlOdW0gKyBpOwotCQlyZWFzb25fY29kZSA9IGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgotCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19NQVNLOwogCQlsaW5rX3JhdGVfID0gZXZlbnRfZGF0YS0+UEhZW2ldLkxpbmtSYXRlID4+IDQ7CiAJCXN3aXRjaCAocmVhc29uX2NvZGUpIHsKIAkJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1BIWV9DSEFOR0VEOgpAQCAtMzk3MSwxOSArNDE4OCwxOSBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50IC0gaGFuZGxlIGRldmljZSBzdGF0dXMgY2hhbmdlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDoKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIEBmd19ldmVudDogVGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFTYXNEZXZpY2VTdGF0dXNDaGFuZ2VfdCAqZXZlbnRfZGF0YSkKK19zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKLQkJX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudF9kZWJ1Zyhpb2MsIGV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50X2RlYnVnKGlvYywKKwkJICAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CiAjZW5kaWYKIH0KIApAQCAtNDAyNiwzNCArNDI0MywzMyBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudCAtIGhhbmRsZSBlbmNsb3N1cmUgZXZlbnRzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDoKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIEBmd19ldmVudDogVGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAogX3Njc2loX3Nhc19lbmNsb3N1cmVfZGV2X3N0YXR1c19jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAotICAgIHU4IFZGX0lELCBNcGkyRXZlbnREYXRhU2FzRW5jbERldlN0YXR1c0NoYW5nZV90ICpldmVudF9kYXRhKQorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKIAkJX3Njc2loX3Nhc19lbmNsb3N1cmVfZGV2X3N0YXR1c19jaGFuZ2VfZXZlbnRfZGVidWcoaW9jLAotCQkgICAgIGV2ZW50X2RhdGEpOworCQkgICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKICNlbmRpZgogfQogCiAvKioKICAqIF9zY3NpaF9zYXNfYnJvYWRjYXN0X3ByaW1hdGl2ZV9ldmVudCAtIGhhbmRsZSBicm9hZGNhc3QgZXZlbnRzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIEBmd19ldmVudDogVGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YVNhc0Jyb2FkY2FzdFByaW1pdGl2ZV90ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKIAl1MTYgc21pZCwgaGFuZGxlOwpAQCAtNDA2MiwxMSArNDI3OCwxMiBAQAogCXUzMiB0ZXJtaW5hdGlvbl9jb3VudDsKIAl1MzIgcXVlcnlfY291bnQ7CiAJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QgKm1waV9yZXBseTsKLQorI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORworCU1waTJFdmVudERhdGFTYXNCcm9hZGNhc3RQcmltaXRpdmVfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOworI2VuZGlmCiAJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiYnJvYWRjYXN0IHByaW1hdGl2ZTogIgogCSAgICAicGh5IG51bWJlciglZCksIHdpZHRoKCVkKVxuIiwgaW9jLT5uYW1lLCBldmVudF9kYXRhLT5QaHlOdW0sCiAJICAgIGV2ZW50X2RhdGEtPlBvcnRXaWR0aCkpOwotCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKIApAQCAtNDA3NCw3ICs0MjkxLDcgQEAKIAl0ZXJtaW5hdGlvbl9jb3VudCA9IDA7CiAJcXVlcnlfY291bnQgPSAwOwogCW1waV9yZXBseSA9IGlvYy0+dG1fY21kcy5yZXBseTsKLQlmb3IgKHNtaWQgPSAxOyBzbWlkIDw9IGlvYy0+cmVxdWVzdF9kZXB0aDsgc21pZCsrKSB7CisJZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnNjc2lpb19kZXB0aDsgc21pZCsrKSB7CiAJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CiAJCWlmICghc2NtZCkKIAkJCWNvbnRpbnVlOwpAQCAtNDEyMSwyMyArNDMzOCwyNSBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudCAtIGhhbmRsZSBkaXNjb3ZlcnkgZXZlbnRzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIEBmd19ldmVudDogVGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc19kaXNjb3ZlcnlfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhU2FzRGlzY292ZXJ5X3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogeworCU1waTJFdmVudERhdGFTYXNEaXNjb3ZlcnlfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOworCiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spIHsKIAkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJkaXNjb3ZlcnkgZXZlbnQ6ICglcykiLCBpb2MtPm5hbWUsCiAJCSAgICAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSA9PSBNUEkyX0VWRU5UX1NBU19ESVNDX1JDX1NUQVJURUQpID8KIAkJICAgICJzdGFydCIgOiAic3RvcCIpOwogCWlmIChldmVudF9kYXRhLT5EaXNjb3ZlcnlTdGF0dXMpCi0JCXByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiLCBkaXNjb3Zlcnlfc3RhdHVzKDB4JTA4eCkiLAotCQkgICAgaW9jLT5uYW1lLCBsZTMyX3RvX2NwdShldmVudF9kYXRhLT5EaXNjb3ZlcnlTdGF0dXMpKTsKKwkJcHJpbnRrKCJkaXNjb3Zlcnlfc3RhdHVzKDB4JTA4eCkiLAorCQkgICAgbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+RGlzY292ZXJ5U3RhdHVzKSk7CiAJcHJpbnRrKCJcbiIpOwogCX0KICNlbmRpZgpAQCAtNDQ4OCwxOSArNDcwNywxOSBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQgLSBoYW5kbGUgaXIgY29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDoKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIEBmd19ldmVudDogVGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YUlyQ29uZmlnQ2hhbmdlTGlzdF90ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAJTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3QgKmVsZW1lbnQ7CiAJaW50IGk7CiAJdTggZm9yZWlnbl9jb25maWc7CisJTXBpMkV2ZW50RGF0YUlyQ29uZmlnQ2hhbmdlTGlzdF90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKQEAgLTQ1NDMsMTQgKzQ3NjIsMTQgQEAKIC8qKgogICogX3Njc2loX3Nhc19pcl92b2x1bWVfZXZlbnQgLSBJUiB2b2x1bWUgZXZlbnQKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFJclZvbHVtZV90ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19pcl92b2x1bWVfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAl1NjQgd3dpZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDU1OSw2ICs0Nzc4LDcgQEAKIAl1MzIgc3RhdGU7CiAJaW50IHJjOwogCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJTXBpMkV2ZW50RGF0YUlyVm9sdW1lX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKIAogCWlmIChldmVudF9kYXRhLT5SZWFzb25Db2RlICE9IE1QSTJfRVZFTlRfSVJfVk9MVU1FX1JDX1NUQVRFX0NIQU5HRUQpCiAJCXJldHVybjsKQEAgLTQ2MjgsMTQgKzQ4NDgsMTQgQEAKIC8qKgogICogX3Njc2loX3Nhc19pcl9waHlzaWNhbF9kaXNrX2V2ZW50IC0gUEQgZXZlbnQKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgIE1waTJFdmVudERhdGFJclBoeXNpY2FsRGlza190ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19pcl9waHlzaWNhbF9kaXNrX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAJdTE2IGhhbmRsZTsKIAl1MzIgc3RhdGU7CkBAIC00NjQ0LDYgKzQ4NjQsNyBAQAogCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKIAlNcGkyU2FzRGV2aWNlUGFnZTBfdCBzYXNfZGV2aWNlX3BnMDsKIAl1MzIgaW9jX3N0YXR1czsKKwlNcGkyRXZlbnREYXRhSXJQaHlzaWNhbERpc2tfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwogCiAJaWYgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgIT0gTVBJMl9FVkVOVF9JUl9QSFlTRElTS19SQ19TVEFURV9DSEFOR0VEKQogCQlyZXR1cm47CkBAIC00NzQzLDMzICs0OTY0LDMzIEBACiAvKioKICAqIF9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudCAtIGhhbmRsZSBSQUlEIG9wZXJhdGlvbiBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhSXJPcGVyYXRpb25TdGF0dXNfdCAqZXZlbnRfZGF0YSkKK19zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQotCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnRfZGVidWcoaW9jLCBldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50X2RlYnVnKGlvYywKKwkJICAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CiAjZW5kaWYKIH0KIAogLyoqCiAgKiBfc2NzaWhfdGFza19zZXRfZnVsbCAtIGhhbmRsZSB0YXNrIHNldCBmdWxsCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKKyAqIEBmd19ldmVudDogVGhlIGZ3X2V2ZW50X3dvcmsgb2JqZWN0CiAgKiBDb250ZXh0OiB1c2VyLgogICoKICAqIFRocm90dGxlIGJhY2sgcWRlcHRoLgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Rhc2tfc2V0X2Z1bGwoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhVGFza1NldEZ1bGxfdCAqZXZlbnRfZGF0YSkKK19zY3NpaF90YXNrX3NldF9mdWxsKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IGZ3X2V2ZW50X3dvcmsKKwkqZndfZXZlbnQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CkBAIC00NzgwLDYgKzUwMDEsNyBAQAogCXUxNiBoYW5kbGU7CiAJaW50IGlkLCBjaGFubmVsOwogCXU2NCBzYXNfYWRkcmVzczsKKwlNcGkyRXZlbnREYXRhVGFza1NldEZ1bGxfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwogCiAJY3VycmVudF9kZXB0aCA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkN1cnJlbnREZXB0aCk7CiAJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RGV2SGFuZGxlKTsKQEAgLTQ4NjgsNiArNTA5MCwxMCBAQAogCQlpZiAoc2FzX2RldmljZS0+c2FzX2FkZHJlc3MgPT0gc2FzX2FkZHJlc3MgJiYKIAkJICAgIHNhc19kZXZpY2UtPnNsb3QgPT0gc2xvdCAmJiBzYXNfZGV2aWNlLT5zdGFyZ2V0KSB7CiAJCQlzYXNfZGV2aWNlLT5yZXNwb25kaW5nID0gMTsKKwkJCXNhc19kZXZpY2UtPnN0YXRlID0gMDsKKwkJCXN0YXJnZXQgPSBzYXNfZGV2aWNlLT5zdGFyZ2V0OworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT50bV9idXN5ID0gMDsKIAkJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwKIAkJCSAgICAiaGFuZGxlKDB4JTA0eCksIHNhc19hZGRyKDB4JTAxNmxseCksIGVuY2xvc3VyZSAiCiAJCQkgICAgImxvZ2ljYWwgaWQoMHglMDE2bGx4KSwgc2xvdCglZClcbiIsIGhhbmRsZSwKQEAgLTQ4ODAsOCArNTEwNiw2IEBACiAJCQlwcmludGsoS0VSTl9JTkZPICJcdGhhbmRsZSBjaGFuZ2VkIGZyb20oMHglMDR4KSEhIVxuIiwKIAkJCSAgICBzYXNfZGV2aWNlLT5oYW5kbGUpOwogCQkJc2FzX2RldmljZS0+aGFuZGxlID0gaGFuZGxlOwotCQkJc3RhcmdldCA9IHNhc19kZXZpY2UtPnN0YXJnZXQ7Ci0JCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhvc3RkYXRhOwogCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmhhbmRsZSA9IGhhbmRsZTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC01MjI3LDQ0ICs1NDUxLDM4IEBACiAKIAlzd2l0Y2ggKGZ3X2V2ZW50LT5ldmVudCkgewogCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT0xPR1lfQ0hBTkdFX0xJU1Q6Ci0JCV9zY3NpaF9zYXNfdG9wb2xvZ3lfY2hhbmdlX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAotCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEsIGZ3X2V2ZW50KTsKKwkJX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQoaW9jLCBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWSUNFX1NUQVRVU19DSEFOR0U6Ci0JCV9zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnQoaW9jLAorCQkgICAgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfU0FTX0RJU0NPVkVSWToKLQkJX3Njc2loX3Nhc19kaXNjb3ZlcnlfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50KGlvYywKKwkJICAgIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19CUk9BRENBU1RfUFJJTUlUSVZFOgotCQlfc2NzaWhfc2FzX2Jyb2FkY2FzdF9wcmltYXRpdmVfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfYnJvYWRjYXN0X3ByaW1hdGl2ZV9ldmVudChpb2MsCisJCSAgICBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9TQVNfRU5DTF9ERVZJQ0VfU1RBVFVTX0NIQU5HRToKIAkJX3Njc2loX3Nhc19lbmNsb3N1cmVfZGV2X3N0YXR1c19jaGFuZ2VfZXZlbnQoaW9jLAotCQkgICAgZndfZXZlbnQtPlZGX0lELCBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCSAgICBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9JUl9DT05GSUdVUkFUSU9OX0NIQU5HRV9MSVNUOgotCQlfc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX1ZPTFVNRToKLQkJX3Njc2loX3Nhc19pcl92b2x1bWVfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfaXJfdm9sdW1lX2V2ZW50KGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSzoKLQkJX3Njc2loX3Nhc19pcl9waHlzaWNhbF9kaXNrX2V2ZW50KGlvYywgZndfZXZlbnQtPlZGX0lELAotCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQoaW9jLCBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9JUl9PUEVSQVRJT05fU1RBVFVTOgotCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1RBU0tfU0VUX0ZVTEw6Ci0JCV9zY3NpaF90YXNrX3NldF9mdWxsKGlvYywgZndfZXZlbnQtPlZGX0lELAotCQkgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOworCQlfc2NzaWhfdGFza19zZXRfZnVsbChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJfQogCV9zY3NpaF9md19ldmVudF9mcmVlKGlvYywgZndfZXZlbnQpOwpAQCAtNTI3MywxNyArNTQ5MSwxOSBAQAogLyoqCiAgKiBtcHQyc2FzX3Njc2loX2V2ZW50X2NhbGxiYWNrIC0gZmlybXdhcmUgZXZlbnQgaGFuZGxlciAoY2FsbGVkIGF0IElTUiB0aW1lKQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKiBDb250ZXh0OiBpbnRlcnJ1cHQuCiAgKgogICogVGhpcyBmdW5jdGlvbiBtZXJlbHkgYWRkcyBhIG5ldyB3b3JrIHRhc2sgaW50byBpb2MtPmZpcm13YXJlX2V2ZW50X3RocmVhZC4KICAqIFRoZSB0YXNrcyBhcmUgd29ya2VkIGZyb20gX2Zpcm13YXJlX2V2ZW50X3dvcmsgaW4gdXNlciBjb250ZXh0LgogICoKLSAqIFJldHVybiBub3RoaW5nLgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXZvaWQKLW1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBtc2l4X2luZGV4LAorCXUzMiByZXBseSkKIHsKIAlzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQ7CiAJTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5OwpAQCAtNTI5NCwxMSArNTUxNCwxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKIAlpZiAoaW9jLT5md19ldmVudHNfb2ZmIHx8IGlvYy0+cmVtb3ZlX2hvc3QpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOwogCi0JbXBpX3JlcGx5ID0gIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWV2ZW50ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FdmVudCk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC01MzEyLDcgKzU1MzIsNyBAQAogCQlpZiAoYmFlbl9kYXRhLT5QcmltaXRpdmUgIT0KIAkJICAgIE1QSTJfRVZFTlRfUFJJTUlUSVZFX0FTWU5DSFJPTk9VU19FVkVOVCB8fAogCQkgICAgaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kpCi0JCQlyZXR1cm47CisJCQlyZXR1cm4gMTsKIAkJaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAxOwogCQlicmVhazsKIAl9CkBAIC01MzM0LDE0ICs1NTU0LDE0IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDogLyogaWdub3JlIHRoZSByZXN0ICovCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJfQogCiAJZndfZXZlbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZndfZXZlbnRfd29yayksIEdGUF9BVE9NSUMpOwogCWlmICghZndfZXZlbnQpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJfQogCWZ3X2V2ZW50LT5ldmVudF9kYXRhID0KIAkgICAga3phbGxvYyhtcGlfcmVwbHktPkV2ZW50RGF0YUxlbmd0aCo0LCBHRlBfQVRPTUlDKTsKQEAgLTUzNDksMTUgKzU1NjksMTcgQEAKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CiAJCWtmcmVlKGZ3X2V2ZW50KTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAKIAltZW1jcHkoZndfZXZlbnQtPmV2ZW50X2RhdGEsIG1waV9yZXBseS0+RXZlbnREYXRhLAogCSAgICBtcGlfcmVwbHktPkV2ZW50RGF0YUxlbmd0aCo0KTsKIAlmd19ldmVudC0+aW9jID0gaW9jOwotCWZ3X2V2ZW50LT5WRl9JRCA9IFZGX0lEOworCWZ3X2V2ZW50LT5WRl9JRCA9IG1waV9yZXBseS0+VkZfSUQ7CisJZndfZXZlbnQtPlZQX0lEID0gbXBpX3JlcGx5LT5WUF9JRDsKIAlmd19ldmVudC0+ZXZlbnQgPSBldmVudDsKIAlfc2NzaWhfZndfZXZlbnRfYWRkKGlvYywgZndfZXZlbnQpOworCXJldHVybiAxOwogfQogCiAvKiBzaG9zdCB0ZW1wbGF0ZSAqLwpAQCAtNTYxNyw3ICs1ODM5LDcgQEAKIH0KIAogLyoqCi0gKiBfc2NzaWhfcHJvYmVfc2FzIC0gcmVwb3J0aW5nIHJhaWQgdm9sdW1lcyB0byBzYXMgdHJhbnNwb3J0CisgKiBfc2NzaWhfcHJvYmVfc2FzIC0gcmVwb3J0aW5nIHNhcyBkZXZpY2VzIHRvIHNhcyB0cmFuc3BvcnQKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICoKICAqIENhbGxlZCBkdXJpbmcgaW5pdGlhbCBsb2FkaW5nIG9mIHRoZSBkcml2ZXIuCkBAIC01NzE0LDYgKzU5MzYsOCBAQAogCWlvYy0+YmFzZV9jYl9pZHggPSBiYXNlX2NiX2lkeDsKIAlpb2MtPnRyYW5zcG9ydF9jYl9pZHggPSB0cmFuc3BvcnRfY2JfaWR4OwogCWlvYy0+Y29uZmlnX2NiX2lkeCA9IGNvbmZpZ19jYl9pZHg7CisJaW9jLT50bV90cl9jYl9pZHggPSB0bV90cl9jYl9pZHg7CisJaW9jLT50bV9zYXNfY29udHJvbF9jYl9pZHggPSB0bV9zYXNfY29udHJvbF9jYl9pZHg7CiAJaW9jLT5sb2dnaW5nX2xldmVsID0gbG9nZ2luZ19sZXZlbDsKIAkvKiBtaXNjIHNlbWFwaG9yZXMgYW5kIHNwaW4gbG9ja3MgKi8KIAlzcGluX2xvY2tfaW5pdCgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jayk7CkBAIC01NzI5LDYgKzU5NTMsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZpb2MtPmZ3X2V2ZW50X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZpb2MtPnJhaWRfZGV2aWNlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZpb2MtPnNhc19oYmEuc2FzX3BvcnRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmlvYy0+ZGVsYXllZF90cl9saXN0KTsKIAogCS8qIGluaXQgc2hvc3QgcGFyYW1ldGVycyAqLwogCXNob3N0LT5tYXhfY21kX2xlbiA9IDE2OwpAQCAtNTc0NSw2ICs1OTcwLDcgQEAKIAogCXNjc2lfaG9zdF9zZXRfcHJvdChzaG9zdCwgU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT04KIAkgICAgfCBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTik7CisJc2NzaV9ob3N0X3NldF9ndWFyZChzaG9zdCwgU0hPU1RfRElYX0dVQVJEX0NSQyk7CiAKIAkvKiBldmVudCB0aHJlYWQgKi8KIAlzbnByaW50Zihpb2MtPmZpcm13YXJlX2V2ZW50X25hbWUsIHNpemVvZihpb2MtPmZpcm13YXJlX2V2ZW50X25hbWUpLApAQCAtNTg5NCw2ICs2MTIwLDExIEBACiAJLyogY3RsIG1vZHVsZSBjYWxsYmFjayBoYW5kbGVyICovCiAJY3RsX2NiX2lkeCA9IG1wdDJzYXNfYmFzZV9yZWdpc3Rlcl9jYWxsYmFja19oYW5kbGVyKG1wdDJzYXNfY3RsX2RvbmUpOwogCisJdG1fdHJfY2JfaWR4ID0gbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIoCisJICAgIF9zY3NpaF90bV90cl9jb21wbGV0ZSk7CisJdG1fc2FzX2NvbnRyb2xfY2JfaWR4ID0gbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIoCisJICAgIF9zY3NpaF9zYXNfY29udHJvbF9jb21wbGV0ZSk7CisKIAltcHQyc2FzX2N0bF9pbml0KCk7CiAKIAllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNjc2loX2RyaXZlcik7CkBAIC01OTI0LDYgKzYxNTUsOSBAQAogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIoY29uZmlnX2NiX2lkeCk7CiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihjdGxfY2JfaWR4KTsKIAorCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodG1fdHJfY2JfaWR4KTsKKwltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHRtX3Nhc19jb250cm9sX2NiX2lkeCk7CisKIAltcHQyc2FzX2N0bF9leGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCmluZGV4IDc0MjMyNGEuLmViOTgxODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYwpAQCAtMiw3ICsyLDcgQEAKICAqIFNBUyBUcmFuc3BvcnQgTGF5ZXIgZm9yIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGJhc2VkIGNvbnRyb2xsZXJzCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfdHJhbnNwb3J0LmMKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjEyLDI1ICsyMTIsMjYgQEAKICAqIG1wdDJzYXNfdHJhbnNwb3J0X2RvbmUgLSAgaW50ZXJuYWwgdHJhbnNwb3J0IGxheWVyIGNhbGxiYWNrIGhhbmRsZXIuCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKgogICogQ2FsbGJhY2sgaGFuZGxlciB3aGVuIHNlbmRpbmcgaW50ZXJuYWwgZ2VuZXJhdGVkIHRyYW5zcG9ydCBjbWRzLgogICogVGhlIGNhbGxiYWNrIGluZGV4IHBhc3NlZCBpcyBgaW9jLT50cmFuc3BvcnRfY2JfaWR4YAogICoKLSAqIFJldHVybiBub3RoaW5nLgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXZvaWQKLW1wdDJzYXNfdHJhbnNwb3J0X2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsCit1OAorbXB0MnNhc190cmFuc3BvcnRfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAogICAgIHUzMiByZXBseSkKIHsKIAlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKIAogCW1waV9yZXBseSA9ICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAlpZiAoaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaWYgKGlvYy0+dHJhbnNwb3J0X2NtZHMuc21pZCAhPSBzbWlkKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOwogCWlmIChtcGlfcmVwbHkpIHsKIAkJbWVtY3B5KGlvYy0+dHJhbnNwb3J0X2NtZHMucmVwbHksIG1waV9yZXBseSwKQEAgLTIzOSw2ICsyNDAsNyBAQAogCX0KIAlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyAmPSB+TVBUMl9DTURfUEVORElORzsKIAljb21wbGV0ZSgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKKwlyZXR1cm4gMTsKIH0KIAogLyogcmVwb3J0IG1hbnVmYWN0dXJlIHJlcXVlc3Qgc3RydWN0dXJlICovCkBAIC0zNjksNiArMzcxLDggQEAKIAltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NNUF9QQVNTVEhST1VHSDsKIAltcGlfcmVxdWVzdC0+UGh5c2ljYWxQb3J0ID0gMHhGRjsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAlzYXNfYWRkcmVzc19sZSA9ICh1NjQgKikmbXBpX3JlcXVlc3QtPlNBU0FkZHJlc3M7CiAJKnNhc19hZGRyZXNzX2xlID0gY3B1X3RvX2xlNjQoc2FzX2FkZHJlc3MpOwogCW1waV9yZXF1ZXN0LT5SZXF1ZXN0RGF0YUxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCk7CkBAIC0zOTYsNyArNDAwLDggQEAKIAlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJyZXBvcnRfbWFudWZhY3R1cmUgLSAiCiAJICAgICJzZW5kIHRvIHNhc19hZGRyKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwKIAkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfYWRkcmVzcykpOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgMCAvKiBWRl9JRCAqLyk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+dHJhbnNwb3J0X2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+dHJhbnNwb3J0X2NtZHMuZG9uZSwKIAkgICAgMTAqSFopOwogCkBAIC0xMTA2LDYgKzExMTEsOCBAQAogCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOwogCW1waV9yZXF1ZXN0LT5QaHlzaWNhbFBvcnQgPSAweEZGOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCSooKHU2NCAqKSZtcGlfcmVxdWVzdC0+U0FTQWRkcmVzcykgPSAocnBoeSkgPwogCSAgICBjcHVfdG9fbGU2NChycGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcykgOgogCSAgICBjcHVfdG9fbGU2NChpb2MtPnNhc19oYmEuc2FzX2FkZHJlc3MpOwpAQCAtMTE0Nyw3ICsxMTU0LDggQEAKIAlkdHJhbnNwb3J0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlcyAtICIKIAkgICAgInNlbmRpbmcgc21wIHJlcXVlc3RcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKIAotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgMCAvKiBWRl9JRCAqLyk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+dHJhbnNwb3J0X2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+dHJhbnNwb3J0X2NtZHMuZG9uZSwKIAkgICAgMTAqSFopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfZGVmcy5oIGIvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaAppbmRleCBmOGNiOWRlLi4xODQ5ZGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfZGVmcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmgKQEAgLTI1LDYgKzI1LDggQEAKICNpZm5kZWYgX01WX0RFRlNfSF8KICNkZWZpbmUgX01WX0RFRlNfSF8KIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSRUNBXzEzMDAJMHgxMzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMyMAkweDEzMjAKIAogZW51bSBjaGlwX2ZsYXZvcnMgewogCWNoaXBfNjMyMCwKQEAgLTMyLDYgKzM0LDggQEAKIAljaGlwXzY0ODUsCiAJY2hpcF85NDgwLAogCWNoaXBfOTE4MCwKKwljaGlwXzEzMDAsCisJY2hpcF8xMzIwCiB9OwogCiAvKiBkcml2ZXIgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCmluZGV4IDg2NDZhMTkuLmM3OTBkNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYwpAQCAtMzIsNiArMzIsOCBAQAogCVtjaGlwXzY0ODVdID0JeyAxLCA4LCAweDgwMCwgMzMsIDMyLCAxMCwgJm12c182NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzkxODBdID0JeyAyLCA0LCAweDgwMCwgMTcsIDY0LCAgOSwgJm12c185NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzk0ODBdID0JeyAyLCA0LCAweDgwMCwgMTcsIDY0LCAgOSwgJm12c185NHh4X2Rpc3BhdGNoLCB9LAorCVtjaGlwXzEzMDBdID0JeyAxLCA0LCAweDQwMCwgMTcsIDE2LCAgOSwgJm12c182NHh4X2Rpc3BhdGNoLCB9LAorCVtjaGlwXzEzMjBdID0JeyAyLCA0LCAweDgwMCwgMTcsIDY0LCAgOSwgJm12c185NHh4X2Rpc3BhdGNoLCB9LAogfTsKIAogI2RlZmluZSBTT0NfU0FTX05VTSAyCkBAIC02NTMsNiArNjU1LDggQEAKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4NjQ4NSksIGNoaXBfNjQ4NSB9LAogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg5NDgwKSwgY2hpcF85NDgwIH0sCiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDkxODApLCBjaGlwXzkxODAgfSwKKwl7IFBDSV9WREVWSUNFKEFSRUNBLCBQQ0lfREVWSUNFX0lEX0FSRUNBXzEzMDApLCBjaGlwXzEzMDAgfSwKKwl7IFBDSV9WREVWSUNFKEFSRUNBLCBQQ0lfREVWSUNFX0lEX0FSRUNBXzEzMjApLCBjaGlwXzEzMjAgfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCmluZGV4IDQzMDJmMDYuLjBhOTdiYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CkBAIC02ODQsNyArNjg1LDcgQEAKIAlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKLQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwlkZXZfaW5mbygmcGluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCSJBZGFwdGVyIGJlaW5nIHJlc2V0IGR1ZSB0byBjb21tYW5kIHRpbWVvdXQuXG4iKTsKIAogCS8qIENvbW1hbmQgdGltZW91dHMgcmVzdWx0IGluIGhhcmQgcmVzZXQgc2VxdWVuY2UuIFRoZSBjb21tYW5kIHRoYXQgZ290CkBAIC04MTUsOCArODE2LDkgQEAKIAogCWlmIChQTUNSQUlEX0lPQVNDX1NFTlNFX0tFWShpb2FzYykgPiAwKSB7CiAJCXNjc2lfY21kLT5yZXN1bHQgfD0gKERJRF9FUlJPUiA8PCAxNik7Ci0JCXBtY3JhaWRfZXJyKCJjb21tYW5kIENEQlswXSA9ICV4IGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsCi0JCQkgICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLCBpb2FzYyk7CisJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NzaV9jbWQsCisJCQkgICAgImNvbW1hbmQgQ0RCWzBdID0gJXggZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwKKwkJCSAgICBjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwgaW9hc2MpOwogCX0KIAogCS8qIGlmIHdlIGhhZCBhbGxvY2F0ZWQgc2Vuc2UgYnVmZmVycyBmb3IgcmVxdWVzdCBzZW5zZSwgY29weSB0aGUgc2Vuc2UKQEAgLTEwNjksNyArMTA3MSw3IEBACiAKIAlpb2FyY2ItPmRhdGFfdHJhbnNmZXJfbGVuZ3RoID0gY3B1X3RvX2xlMzIocmNiX3NpemUpOwogCi0JaW9hZGxbMF0uZmxhZ3MgfD0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfUkVBRF9MQVNUKTsKKwlpb2FkbFswXS5mbGFncyB8PSBJT0FETF9GTEFHU19SRUFEX0xBU1Q7CiAJaW9hZGxbMF0uZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihyY2Jfc2l6ZSk7CiAJaW9hZGxbMF0uYWRkcmVzcyA9IGNwdV90b19sZTMyKGRtYSk7CiAKQEAgLTE1NDEsMTMgKzE1NDMsMTMgQEAKIAogCWlmIChwaW5zdGFuY2UtPmxkbi5oY2FtLT5ub3RpZmljYXRpb25fbG9zdCA9PQogCSAgICBIT1NUUkNCX05PVElGSUNBVElPTlNfTE9TVCkKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsICJFcnJvciBub3RpZmljYXRpb25zIGxvc3RcbiIpOworCQlkZXZfaW5mbygmcGluc3RhbmNlLT5wZGV2LT5kZXYsICJFcnJvciBub3RpZmljYXRpb25zIGxvc3RcbiIpOwogCiAJaW9hc2MgPSBsZTMyX3RvX2NwdShoY2FtX2xkbi0+ZXJyb3JfbG9nLmZkX2lvYXNjKTsKIAogCWlmIChpb2FzYyA9PSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVQgfHwKIAkJaW9hc2MgPT0gUE1DUkFJRF9JT0FTQ19VQV9CVVNfV0FTX1JFU0VUX0JZX09USEVSKSB7Ci0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQlkZXZfaW5mbygmcGluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkiVW5pdEF0dGVudGlvbiBkdWUgdG8gSU9BIEJ1cyBSZXNldFxuIik7CiAJCXNjc2lfcmVwb3J0X2J1c19yZXNldCgKIAkJCXBpbnN0YW5jZS0+aG9zdCwKQEAgLTE1ODQsNyArMTU4Niw3IEBACiAJICAgIGF0b21pY19yZWFkKCZwaW5zdGFuY2UtPmNjbi5pZ25vcmUpID09IDEpIHsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoaW9hc2MpIHsKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJCSJIb3N0IFJDQiAoQ0NOKSBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLCBpb2FzYyk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAkJcG1jcmFpZF9zZW5kX2hjYW0ocGluc3RhbmNlLCBQTUNSQUlEX0hDQU1fQ09ERV9DT05GSUdfQ0hBTkdFKTsKQEAgLTE2MzQsNyArMTYzNiw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAl9IGVsc2UgewotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJZGV2X2luZm8oJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAogCQkJIkhvc3QgUkNCKExETikgZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwgaW9hc2MpOwogCX0KIAkvKiBzZW5kIG5ldGxpbmsgbWVzc2FnZSBmb3IgSENBTSBub3RpZmljYXRpb24gaWYgZW5hYmxlZCAqLwpAQCAtMTgyMiw3ICsxODI0LDYgQEAKIAkJCXNjc2lfZG1hX3VubWFwKHNjc2lfY21kKTsKIAkJCXBtY3JhaWRfcmV0dXJuX2NtZChjbWQpOwogCi0KIAkJCXBtY3JhaWRfaW5mbygiZmFpbGluZyglZCkgQ0RCWzBdID0gJXggcmVzdWx0OiAleFxuIiwKIAkJCQkgICAgIGxlMzJfdG9fY3B1KHJlc3ApID4+IDIsCiAJCQkJICAgICBjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwKQEAgLTIyNTAsNyArMjI1MSw3IEBACiAKIAlpb2FkbC0+YWRkcmVzcyA9IGNwdV90b19sZTY0KGNtZC0+c2Vuc2VfYnVmZmVyX2RtYSk7CiAJaW9hZGwtPmRhdGFfbGVuID0gY3B1X3RvX2xlMzIoU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQlpb2FkbC0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19MQVNUX0RFU0MpOworCWlvYWRsLT5mbGFncyA9IElPQURMX0ZMQUdTX0xBU1RfREVTQzsKIAogCS8qIHJlcXVlc3Qgc2Vuc2UgbWlnaHQgYmUgY2FsbGVkIGFzIHBhcnQgb2YgZXJyb3IgcmVzcG9uc2UgcHJvY2Vzc2luZwogCSAqIHdoaWNoIHJ1bnMgaW4gdGFza2xldHMgY29udGV4dC4gSXQgaXMgcG9zc2libGUgdGhhdCBtaWQtbGF5ZXIgbWlnaHQKQEAgLTI1MTQsNyArMjUxNSw4IEBACiAJcmVzID0gc2NzaV9jbWQtPmRldmljZS0+aG9zdGRhdGE7CiAKIAlpZiAoIXJlcykgewotCQlwbWNyYWlkX2VycigicmVzZXRfZGV2aWNlOiBOVUxMIHJlc291cmNlIHBvaW50ZXJcbiIpOworCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2NzaV9jbWQtPmRldmljZSwKKwkJCSAgICAicmVzZXRfZGV2aWNlOiBOVUxMIHJlc291cmNlIHBvaW50ZXJcbiIpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIApAQCAtMjc1Miw4ICsyNzU0LDggQEAKIAlwaW5zdGFuY2UgPQogCQkoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKilzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAotCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAotCQkiSS9PIGNvbW1hbmQgdGltZWQgb3V0LCBhYm9ydGluZyBpdC5cbiIpOworCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NzaV9jbWQsCisJCSAgICAiSS9PIGNvbW1hbmQgdGltZWQgb3V0LCBhYm9ydGluZyBpdC5cbiIpOwogCiAJcmVzID0gc2NzaV9jbWQtPmRldmljZS0+aG9zdGRhdGE7CiAKQEAgLTI4MjQsNyArMjgyNiw4IEBACiAgKi8KIHN0YXRpYyBpbnQgcG1jcmFpZF9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQogewotCXBtY3JhaWRfZXJyKCJEb2luZyBkZXZpY2UgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCisJCSAgICAicmVzZXR0aW5nIGRldmljZSBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOwogCXJldHVybiBwbWNyYWlkX3Jlc2V0X2RldmljZShzY21kLAogCQkJCSAgICBQTUNSQUlEX0lOVEVSTkFMX1RJTUVPVVQsCiAJCQkJICAgIFJFU0VUX0RFVklDRV9MVU4pOwpAQCAtMjgzMiw3ICsyODM1LDggQEAKIAogc3RhdGljIGludCBwbWNyYWlkX2VoX2J1c19yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7Ci0JcG1jcmFpZF9lcnIoIkRvaW5nIGJ1cyByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOworCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKKwkJICAgICJEb2luZyBidXMgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKIAlyZXR1cm4gcG1jcmFpZF9yZXNldF9kZXZpY2Uoc2NtZCwKIAkJCQkgICAgUE1DUkFJRF9SRVNFVF9CVVNfVElNRU9VVCwKIAkJCQkgICAgUkVTRVRfREVWSUNFX0JVUyk7CkBAIC0yODQwLDcgKzI4NDQsOCBAQAogCiBzdGF0aWMgaW50IHBtY3JhaWRfZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKIHsKLQlwbWNyYWlkX2VycigiRG9pbmcgdGFyZ2V0IHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CisJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAorCQkgICAgIkRvaW5nIHRhcmdldCByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOwogCXJldHVybiBwbWNyYWlkX3Jlc2V0X2RldmljZShzY21kLAogCQkJCSAgICBQTUNSQUlEX0lOVEVSTkFMX1RJTUVPVVQsCiAJCQkJICAgIFJFU0VUX0RFVklDRV9UQVJHRVQpOwpAQCAtMjk4OCwxMSArMjk5MywxMSBAQAogCW5zZWcgPSBzY3NpX2RtYV9tYXAoc2NzaV9jbWQpOwogCiAJaWYgKG5zZWcgPCAwKSB7Ci0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LCAic2NzaV9tYXBfZG1hIGZhaWxlZCFcbiIpOworCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgc2NzaV9jbWQsICJzY3NpX21hcF9kbWEgZmFpbGVkIVxuIik7CiAJCXJldHVybiAtMTsKIAl9IGVsc2UgaWYgKG5zZWcgPiBQTUNSQUlEX01BWF9JT0FETFMpIHsKIAkJc2NzaV9kbWFfdW5tYXAoc2NzaV9jbWQpOwotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJc2NtZF9wcmludGsoS0VSTl9FUlIsIHNjc2lfY21kLAogCQkJInNnIGNvdW50IGlzICglZCkgbW9yZSB0aGFuIGFsbG93ZWQhXG4iLCBuc2VnKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTMwMTIsNyArMzAxNyw3IEBACiAJCWlvYWRsW2ldLmZsYWdzID0gMDsKIAl9CiAJLyogc2V0dXAgbGFzdCBkZXNjcmlwdG9yICovCi0JaW9hZGxbaSAtIDFdLmZsYWdzID0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfTEFTVF9ERVNDKTsKKwlpb2FkbFtpIC0gMV0uZmxhZ3MgPSBJT0FETF9GTEFHU19MQVNUX0RFU0M7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzODIsNyArMzM4Nyw3IEBACiAJfQogCiAJLyogc2V0dXAgdGhlIGxhc3QgZGVzY3JpcHRvciAqLwotCWlvYWRsW2kgLSAxXS5mbGFncyA9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX0xBU1RfREVTQyk7CisJaW9hZGxbaSAtIDFdLmZsYWdzID0gSU9BRExfRkxBR1NfTEFTVF9ERVNDOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MDQwLDcgKzUwNDUsNyBAQAogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAKIAlpZiAocmMpIHsKLQkJcG1jcmFpZF9lcnIoInBtY3JhaWQ6IEVuYWJsZSBkZXZpY2UgZmFpbGVkXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVzdW1lOiBFbmFibGUgZGV2aWNlIGZhaWxlZFxuIik7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTUwNTQsNyArNTA1OSw3IEBACiAJCXJjID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCiAJaWYgKHJjICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCBQQ0kgRE1BIG1hc2tcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXN1bWU6IEZhaWxlZCB0byBzZXQgUENJIERNQSBtYXNrXG4iKTsKIAkJZ290byBkaXNhYmxlX2RldmljZTsKIAl9CiAKQEAgLTUwNjMsNyArNTA2OCw4IEBACiAJcmMgPSBwbWNyYWlkX3JlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyKHBpbnN0YW5jZSk7CiAKIAlpZiAocmMpIHsKLQkJcG1jcmFpZF9lcnIoInJlc3VtZTogY291bGRuJ3QgcmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJzXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJInJlc3VtZTogY291bGRuJ3QgcmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJzXG4iKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIHJlbGVhc2VfaG9zdDsKIAl9CkBAIC01MDgwLDcgKzUwODYsNyBAQAogCSAqIHN0YXRlLgogCSAqLwogCWlmIChwbWNyYWlkX3Jlc2V0X2JyaW5ndXAocGluc3RhbmNlKSkgewotCQlwbWNyYWlkX2VycigiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0EgXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0EgXG4iKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIHJlbGVhc2VfdGFza2xldHM7CiAJfQpAQCAtNTE4Nyw3ICs1MTkzLDcgQEAKIAlMSVNUX0hFQUQob2xkX3Jlcyk7CiAKIAlpZiAocGluc3RhbmNlLT5jZmdfdGFibGUtPmZsYWdzICYgTUlDUk9DT0RFX1VQREFURV9SRVFVSVJFRCkKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsICJSZXF1aXJlIG1pY3JvY29kZSBkb3dubG9hZFxuIik7CisJCXBtY3JhaWRfZXJyKCJJT0EgcmVxdWlyZXMgbWljcm9jb2RlIGRvd25sb2FkXG4iKTsKIAogCS8qIHJlc291cmNlIGxpc3QgaXMgcHJvdGVjdGVkIGJ5IHBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jay4KIAkgKiBpbml0X3Jlc190YWJsZSBjYW4gYmUgY2FsbGVkIGZyb20gcHJvYmUgKHVzZXItdGhyZWFkKSBvciBydW50aW1lCkBAIC01MjI0LDggKzUyMzAsNyBAQAogCQlpZiAoIWZvdW5kKSB7CiAKIAkJCWlmIChsaXN0X2VtcHR5KCZwaW5zdGFuY2UtPmZyZWVfcmVzX3EpKSB7Ci0JCQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCi0JCQkJCSJUb28gbWFueSBkZXZpY2VzIGF0dGFjaGVkXG4iKTsKKwkJCQlwbWNyYWlkX2VycigiVG9vIG1hbnkgZGV2aWNlcyBhdHRhY2hlZFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTUzMDksNyArNTMxNCw3IEBACiAJCWNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGUpKTsKIAogCWlvYWRsID0gJihpb2FyY2ItPmFkZF9kYXRhLnUuaW9hZGxbMF0pOwotCWlvYWRsLT5mbGFncyA9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX0xBU1RfREVTQyk7CisJaW9hZGwtPmZsYWdzID0gSU9BRExfRkxBR1NfTEFTVF9ERVNDOwogCWlvYWRsLT5hZGRyZXNzID0gY3B1X3RvX2xlNjQocGluc3RhbmNlLT5jZmdfdGFibGVfYnVzX2FkZHIpOwogCWlvYWRsLT5kYXRhX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGUpKTsKIApAQCAtNTQ0Miw3ICs1NDQ3LDcgQEAKIAlyYyA9IHBtY3JhaWRfcmVnaXN0ZXJfaW50ZXJydXB0X2hhbmRsZXIocGluc3RhbmNlKTsKIAogCWlmIChyYykgewotCQlwbWNyYWlkX2VycigiY291bGRuJ3QgcmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlclxuIik7CiAJCWdvdG8gb3V0X3Njc2lfaG9zdF9wdXQ7CiAJfQogCkBAIC01NDY2LDcgKzU0NzEsNyBAQAogCSAqLwogCXBtY3JhaWRfaW5mbygic3RhcnRpbmcgSU9BIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlXG4iKTsKIAlpZiAocG1jcmFpZF9yZXNldF9icmluZ3VwKHBpbnN0YW5jZSkpIHsKLQkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGluaXRpYWxpemUgSU9BIFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IGluaXRpYWxpemUgSU9BIFxuIik7CiAJCXJjID0gMTsKIAkJZ290byBvdXRfcmVsZWFzZV9idWZzOwogCX0KQEAgLTU1MzQsNyArNTUzOSw2IEBACiAJLnNodXRkb3duID0gcG1jcmFpZF9zaHV0ZG93bgogfTsKIAotCiAvKioKICAqIHBtY3JhaWRfaW5pdCAtIG1vZHVsZSBsb2FkIGVudHJ5IHBvaW50CiAgKi8KQEAgLTU1NjYsNyArNTU3MCw2IEBACiAJCWdvdG8gb3V0X3VucmVnX2NocmRldjsKIAl9CiAKLQogCWVycm9yID0gcG1jcmFpZF9uZXRsaW5rX2luaXQoKTsKIAogCWlmIChlcnJvcikKQEAgLTU1ODQsNiArNTU4Nyw3IEBACiAKIG91dF91bnJlZ19jaHJkZXY6CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKHBtY3JhaWRfbWFqb3IsIDApLCBQTUNSQUlEX01BWF9BREFQVEVSUyk7CisKIG91dF9pbml0OgogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmggYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCmluZGV4IDYxNGIzYTcuLjM0NDFiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKKysrIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuaApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKaW5kZXggNDJiNzk5YS4uZTA3YjM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwpAQCAtNTY4LDcgKzU2OCw3IEBACiAJaWYgKHJlcSA9PSBOVUxMKSB7CiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkiCiAJCQkiZm9yIHJlcXVlc3QgcXVlXG4iKTsKLQkJZ290byBxdWVfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAlyZXEtPmxlbmd0aCA9IFJFUVVFU1RfRU5UUllfQ05UXzI0WFg7CkBAIC02MzIsNiArNjMyLDcgQEAKIAogcXVlX2ZhaWxlZDoKIAlxbGEyNXh4X2ZyZWVfcmVxX3F1ZShiYXNlX3ZoYSwgcmVxKTsKK2ZhaWxlZDoKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjU5LDcgKzY2MCw3IEBACiAJaWYgKHJzcCA9PSBOVUxMKSB7CiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIgogCQkJCSIgcmVzcG9uc2UgcXVlXG4iKTsKLQkJZ290byBxdWVfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAlyc3AtPmxlbmd0aCA9IFJFU1BPTlNFX0VOVFJZX0NOVF9NUTsKQEAgLTcyOCw2ICs3MjksNyBAQAogCiBxdWVfZmFpbGVkOgogCXFsYTI1eHhfZnJlZV9yc3BfcXVlKGJhc2VfdmhhLCByc3ApOworZmFpbGVkOgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCBiNmUwMzA3Li5kZDA5OGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTI0MSwxMCArMjQxLDcgQEAKICAqLwogc3RydWN0IHNjc2lfY21uZCAqX19zY3NpX2dldF9jb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBnZnBfdCBnZnBfbWFzaykKIHsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCi0JY21kID0gc2NzaV9ob3N0X2FsbG9jX2NvbW1hbmQoc2hvc3QsIGdmcF9tYXNrKTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBzY3NpX2hvc3RfYWxsb2NfY29tbWFuZChzaG9zdCwgZ2ZwX21hc2spOwogCiAJaWYgKHVubGlrZWx5KCFjbWQpKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNTgsOSArMjU1LDE1IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNob3N0LT5mcmVlX2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJCWlmIChjbWQpIHsKKwkJCXZvaWQgKmJ1ZiwgKnByb3Q7CisKIAkJCWJ1ZiA9IGNtZC0+c2Vuc2VfYnVmZmVyOworCQkJcHJvdCA9IGNtZC0+cHJvdF9zZGI7CisKIAkJCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisKIAkJCWNtZC0+c2Vuc2VfYnVmZmVyID0gYnVmOworCQkJY21kLT5wcm90X3NkYiA9IHByb3Q7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCmluZGV4IGZiOWFmMjAuLmM0MTAzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpY2FtLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgogCiAjaW5jbHVkZSAic2QuaCIKICNpbmNsdWRlICJzY3NpX2xvZ2dpbmcuaCIKQEAgLTY0LDYgKzY1LDcgQEAKICNkZWZpbmUgUEFSQU1FVEVSX0xJU1RfTEVOR1RIX0VSUiAweDFhCiAjZGVmaW5lIElOVkFMSURfT1BDT0RFIDB4MjAKICNkZWZpbmUgQUREUl9PVVRfT0ZfUkFOR0UgMHgyMQorI2RlZmluZSBJTlZBTElEX0NPTU1BTkRfT1BDT0RFIDB4MjAKICNkZWZpbmUgSU5WQUxJRF9GSUVMRF9JTl9DREIgMHgyNAogI2RlZmluZSBJTlZBTElEX0ZJRUxEX0lOX1BBUkFNX0xJU1QgMHgyNgogI2RlZmluZSBQT1dFUk9OX1JFU0VUIDB4MjkKQEAgLTE4MCw3ICsxODIsNyBAQAogI2RlZmluZSBTREVCVUdfU0VOU0VfTEVOIDMyCiAKICNkZWZpbmUgU0NTSV9ERUJVR19DQU5RVUVVRSAgMjU1Ci0jZGVmaW5lIFNDU0lfREVCVUdfTUFYX0NNRF9MRU4gMTYKKyNkZWZpbmUgU0NTSV9ERUJVR19NQVhfQ01EX0xFTiAzMgogCiBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OwpAQCAtMjk2LDkgKzI5OCwyNSBAQAogfQogCiBzdGF0aWMgdm9pZCBnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKHVuc2lnbmVkIGNoYXIgKmNtZCwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKmxiYSwgdW5zaWduZWQgaW50ICpudW0pCisJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nICpsYmEsIHVuc2lnbmVkIGludCAqbnVtLAorCQkJCSAgIHUzMiAqZWlfbGJhKQogeworCSplaV9sYmEgPSAwOworCiAJc3dpdGNoICgqY21kKSB7CisJY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgorCQkqbGJhID0gKHU2NCljbWRbMTldIHwgKHU2NCljbWRbMThdIDw8IDggfAorCQkJKHU2NCljbWRbMTddIDw8IDE2IHwgKHU2NCljbWRbMTZdIDw8IDI0IHwKKwkJCSh1NjQpY21kWzE1XSA8PCAzMiB8ICh1NjQpY21kWzE0XSA8PCA0MCB8CisJCQkodTY0KWNtZFsxM10gPDwgNDggfCAodTY0KWNtZFsxMl0gPDwgNTY7CisKKwkJKmVpX2xiYSA9ICh1MzIpY21kWzIzXSB8ICh1MzIpY21kWzIyXSA8PCA4IHwKKwkJCSh1MzIpY21kWzIxXSA8PCAxNiB8ICh1MzIpY21kWzIwXSA8PCAyNDsKKworCQkqbnVtID0gKHUzMiljbWRbMzFdIHwgKHUzMiljbWRbMzBdIDw8IDggfCAodTMyKWNtZFsyOV0gPDwgMTYgfAorCQkJKHUzMiljbWRbMjhdIDw8IDI0OworCQlicmVhazsKKwogCWNhc2UgV1JJVEVfMTY6CiAJY2FzZSBSRUFEXzE2OgogCQkqbGJhID0gKHU2NCljbWRbOV0gfCAodTY0KWNtZFs4XSA8PCA4IHwKQEAgLTE1ODksNyArMTYwNyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcHJvdF92ZXJpZnlfcmVhZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgc2VjdG9yX3Qgc3RhcnRfc2VjLAotCQkJICAgIHVuc2lnbmVkIGludCBzZWN0b3JzKQorCQkJICAgIHVuc2lnbmVkIGludCBzZWN0b3JzLCB1MzIgZWlfbGJhKQogewogCXVuc2lnbmVkIGludCBpLCByZXNpZDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBzZ2w7CkBAIC0xNjM2LDEzICsxNjU0LDIzIEBACiAJCQlyZXR1cm4gMHgwMTsKIAkJfQogCi0JCWlmIChzY3NpX2RlYnVnX2RpZiAhPSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTiAmJgorCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gJiYKIAkJICAgIGJlMzJfdG9fY3B1KHNkdFtpXS5yZWZfdGFnKSAhPSAoc2VjdG9yICYgMHhmZmZmZmZmZikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFJFRiBjaGVjayBmYWlsZWQgb24gc2VjdG9yICVsdVxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc2VjdG9yKTsKIAkJCWRpZl9lcnJvcnMrKzsKIAkJCXJldHVybiAweDAzOwogCQl9CisKKwkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCisJCSAgICBiZTMyX3RvX2NwdShzZHRbaV0ucmVmX3RhZykgIT0gZWlfbGJhKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSRUYgY2hlY2sgZmFpbGVkIG9uIHNlY3RvciAlbHVcbiIsCisJCQkgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBsb25nKXNlY3Rvcik7CisJCQlkaWZfZXJyb3JzKys7CisJCQlyZXR1cm4gMHgwMzsKKwkJfQorCisJCWVpX2xiYSsrOwogCX0KIAogCXJlc2lkID0gc2VjdG9ycyAqIDg7IC8qIEJ5dGVzIG9mIHByb3RlY3Rpb24gZGF0YSB0byBjb3B5IGludG8gc2dsICovCkBAIC0xNjcwLDcgKzE2OTgsOCBAQAogfQogCiBzdGF0aWMgaW50IHJlc3BfcmVhZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKLQkJICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKKwkJICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCwKKwkJICAgICB1MzIgZWlfbGJhKQogewogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCWludCByZXQ7CkBAIC0xNjk5LDcgKzE3MjgsNyBAQAogCiAJLyogRElYICsgVDEwIERJRiAqLwogCWlmIChzY3NpX2RlYnVnX2RpeCAmJiBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKSB7Ci0JCWludCBwcm90X3JldCA9IHByb3RfdmVyaWZ5X3JlYWQoU0NwbnQsIGxiYSwgbnVtKTsKKwkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfcmVhZChTQ3BudCwgbGJhLCBudW0sIGVpX2xiYSk7CiAKIAkJaWYgKHByb3RfcmV0KSB7CiAJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIEFCT1JURURfQ09NTUFORCwgMHgxMCwgcHJvdF9yZXQpOwpAQCAtMTczNSw3ICsxNzY0LDcgQEAKIH0KIAogc3RhdGljIGludCBwcm90X3ZlcmlmeV93cml0ZShzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgc2VjdG9yX3Qgc3RhcnRfc2VjLAotCQkJICAgICB1bnNpZ25lZCBpbnQgc2VjdG9ycykKKwkJCSAgICAgdW5zaWduZWQgaW50IHNlY3RvcnMsIHUzMiBlaV9sYmEpCiB7CiAJaW50IGksIGosIHJldDsKIAlzdHJ1Y3Qgc2RfZGlmX3R1cGxlICpzZHQ7CkBAIC0xNzQ5LDExICsxNzc4LDYgQEAKIAogCXNlY3RvciA9IGRvX2Rpdih0bXBfc2VjLCBzZGVidWdfc3RvcmVfc2VjdG9ycyk7CiAKLQlpZiAoKChTQ3BudC0+Y21uZFsxXSA+PiA1KSAmIDcpICE9IDEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaV9kZWJ1ZzogV1JQUk9URUNUICE9IDFcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlCVUdfT04oc2NzaV9zZ19jb3VudChTQ3BudCkgPT0gMCk7CiAJQlVHX09OKHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkgPT0gMCk7CiAKQEAgLTE4MDgsNyArMTgzMiw3IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCWlmIChzY3NpX2RlYnVnX2RpZiAhPSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTiAmJgorCQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OICYmCiAJCQkgICAgYmUzMl90b19jcHUoc2R0LT5yZWZfdGFnKQogCQkJICAgICE9IChzdGFydF9zZWMgJiAweGZmZmZmZmZmKSkgewogCQkJCXByaW50ayhLRVJOX0VSUgpAQCAtMTgxOSw2ICsxODQzLDE2IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKKwkJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCQkJICAgIGJlMzJfdG9fY3B1KHNkdC0+cmVmX3RhZykgIT0gZWlfbGJhKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogUkVGIGNoZWNrIGZhaWxlZCBvbiBzZWN0b3IgJWx1XG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc2VjdG9yKTsKKwkJCQlyZXQgPSAweDAzOworCQkJCWR1bXBfc2VjdG9yKGRhZGRyLCBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwogCQkJLyogV291bGQgYmUgZ3JlYXQgdG8gY29weSB0aGlzIGluIGJpZ2dlcgogCQkJICogY2h1bmtzLiAgSG93ZXZlciwgZm9yIHRoZSBzYWtlIG9mCiAJCQkgKiBjb3JyZWN0bmVzcyB3ZSBuZWVkIHRvIHZlcmlmeSBlYWNoIHNlY3RvcgpAQCAtMTgzMiw2ICsxODY2LDcgQEAKIAkJCQlzZWN0b3IgPSAwOwkvKiBGb3JjZSB3cmFwICovCiAKIAkJCXN0YXJ0X3NlYysrOworCQkJZWlfbGJhKys7CiAJCQlkYWRkciArPSBzY3NpX2RlYnVnX3NlY3Rvcl9zaXplOwogCQkJcHBhZ2Vfb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2RfZGlmX3R1cGxlKTsKIAkJfQpAQCAtMTg1Myw3ICsxODg4LDggQEAKIH0KIAogc3RhdGljIGludCByZXNwX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKKwkJICAgICAgdW5zaWduZWQgaW50IG51bSwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXAsCisJCSAgICAgIHUzMiBlaV9sYmEpCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJaW50IHJldDsKQEAgLTE4NjQsNyArMTkwMCw3IEBACiAKIAkvKiBESVggKyBUMTAgRElGICovCiAJaWYgKHNjc2lfZGVidWdfZGl4ICYmIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpIHsKLQkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfd3JpdGUoU0NwbnQsIGxiYSwgbnVtKTsKKwkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBlaV9sYmEpOwogCiAJCWlmIChwcm90X3JldCkgewogCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsIDB4MTAsIHByb3RfcmV0KTsKQEAgLTI4NzIsMTEgKzI5MDgsMTIgQEAKIAogCWNhc2UgU0RfRElGX1RZUEUwX1BST1RFQ1RJT046CiAJY2FzZSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTjoKKwljYXNlIFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OOgogCWNhc2UgU0RfRElGX1RZUEUzX1BST1RFQ1RJT046CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpX2RlYnVnX2luaXQ6IGRpZiBtdXN0IGJlIDAsIDEgb3IgM1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAic2NzaV9kZWJ1Z19pbml0OiBkaWYgbXVzdCBiZSAwLCAxLCAyIG9yIDNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTMxMjEsNiArMzE1OCw3IEBACiAJaW50IGxlbiwgazsKIAl1bnNpZ25lZCBpbnQgbnVtOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBsYmE7CisJdTMyIGVpX2xiYTsKIAlpbnQgZXJyc3RzID0gMDsKIAlpbnQgdGFyZ2V0ID0gU0NwbnQtPmRldmljZS0+aWQ7CiAJc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXAgPSBOVUxMOwpAQCAtMzI1NCwxNCArMzI5MiwzMCBAQAogCWNhc2UgUkVBRF8xNjoKIAljYXNlIFJFQURfMTI6CiAJY2FzZSBSRUFEXzEwOgorCQkvKiBSRUFEezEwLDEyLDE2fSBhbmQgRElGIFR5cGUgMiBhcmUgbmF0dXJhbCBlbmVtaWVzICovCisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCQkgICAgY21kWzFdICYgMHhlMCkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsCisJCQkJCUlOVkFMSURfQ09NTUFORF9PUENPREUsIDApOworCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8fAorCQkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApID09IDApCisJCQlwcmludGsoS0VSTl9FUlIgIlVucHJvdGVjdGVkIFJEL1dSIHRvIERJRiBkZXZpY2VcbiIpOworCisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgUkVBRF82OgorcmVhZDoKIAkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAwLCBkZXZpcCk7CiAJCWlmIChlcnJzdHMpCiAJCQlicmVhazsKIAkJaWYgKHNjc2lfZGVidWdfZmFrZV9ydykKIAkJCWJyZWFrOwotCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSk7Ci0JCWVycnN0cyA9IHJlc3BfcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKKwkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOworCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCwgZWlfbGJhKTsKIAkJaWYgKGlual9yZWNvdmVyZWQgJiYgKDAgPT0gZXJyc3RzKSkgewogCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBSRUNPVkVSRURfRVJST1IsCiAJCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7CkBAIC0zMjg4LDE0ICszMzQyLDMwIEBACiAJY2FzZSBXUklURV8xNjoKIAljYXNlIFdSSVRFXzEyOgogCWNhc2UgV1JJVEVfMTA6CisJCS8qIFdSSVRFezEwLDEyLDE2fSBhbmQgRElGIFR5cGUgMiBhcmUgbmF0dXJhbCBlbmVtaWVzICovCisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJgorCQkgICAgY21kWzFdICYgMHhlMCkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsCisJCQkJCUlOVkFMSURfQ09NTUFORF9PUENPREUsIDApOworCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8fAorCQkgICAgIHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSAmJgorCQkgICAgKGNtZFsxXSAmIDB4ZTApID09IDApCisJCQlwcmludGsoS0VSTl9FUlIgIlVucHJvdGVjdGVkIFJEL1dSIHRvIERJRiBkZXZpY2VcbiIpOworCisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgV1JJVEVfNjoKK3dyaXRlOgogCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDAsIGRldmlwKTsKIAkJaWYgKGVycnN0cykKIAkJCWJyZWFrOwogCQlpZiAoc2NzaV9kZWJ1Z19mYWtlX3J3KQogCQkJYnJlYWs7Ci0JCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtKTsKLQkJZXJyc3RzID0gcmVzcF93cml0ZShTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKKwkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOworCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXAsIGVpX2xiYSk7CiAJCWlmIChpbmpfcmVjb3ZlcmVkICYmICgwID09IGVycnN0cykpIHsKIAkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgUkVDT1ZFUkVEX0VSUk9SLAogCQkJCQlUSFJFU0hPTERfRVhDRUVERUQsIDApOwpAQCAtMzM0MSwxNSArMzQxMSwzOCBAQAogCQkJYnJlYWs7CiAJCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCiAJCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0pOwotCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7CisJCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtLCAmZWlfbGJhKTsKKwkJZXJyc3RzID0gcmVzcF9yZWFkKFNDcG50LCBsYmEsIG51bSwgZGV2aXAsIGVpX2xiYSk7CiAJCWlmIChlcnJzdHMpCiAJCQlicmVhazsKLQkJZXJyc3RzID0gcmVzcF93cml0ZShTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKKwkJZXJyc3RzID0gcmVzcF93cml0ZShTQ3BudCwgbGJhLCBudW0sIGRldmlwLCBlaV9sYmEpOwogCQlpZiAoZXJyc3RzKQogCQkJYnJlYWs7CiAJCWVycnN0cyA9IHJlc3BfeGR3cml0ZXJlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7CiAJCWJyZWFrOworCWNhc2UgVkFSSUFCTEVfTEVOR1RIX0NNRDoKKwkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OKSB7CisKKwkJCWlmICgoY21kWzEwXSAmIDB4ZTApID09IDApCisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJVbnByb3RlY3RlZCBSRC9XUiB0byBESUYgZGV2aWNlXG4iKTsKKworCQkJaWYgKGNtZFs5XSA9PSBSRUFEXzMyKSB7CisJCQkJQlVHX09OKFNDcG50LT5jbWRfbGVuIDwgMzIpOworCQkJCWdvdG8gcmVhZDsKKwkJCX0KKworCQkJaWYgKGNtZFs5XSA9PSBXUklURV8zMikgeworCQkJCUJVR19PTihTQ3BudC0+Y21kX2xlbiA8IDMyKTsKKwkJCQlnb3RvIHdyaXRlOworCQkJfQorCQl9CisKKwkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsCisJCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKIAkJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IE9wY29kZTogMHgleCBub3QgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggODc3MjA0ZC4uMWIwMDYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC03MjUsNiArNzI1LDkgQEAKIAkJY2FzZSBORUVEU19SRVRSWToKIAkJY2FzZSBGQUlMRUQ6CiAJCQlicmVhazsKKwkJY2FzZSBBRERfVE9fTUxRVUVVRToKKwkJCXJ0biA9IE5FRURTX1JFVFJZOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlydG4gPSBGQUlMRUQ7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCBjNDQ3ODM4Li4wNTQ3YTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC0zMTcsNiArMzE3LDcgQEAKIG91dF9kZXZpY2VfZGVzdHJveToKIAlzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9ERUwpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOworCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZGV2KTsKIAlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiBvdXQ6CiAJaWYgKGRpc3BsYXlfZmFpbHVyZV9tc2cpCkBAIC05NTcsNiArOTU4LDcgQEAKIAlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3kpCiAJCXNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KHNkZXYpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOworCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZGV2KTsKIAlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IGZkZTU0NTMuLjVjN2ViNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtODY0LDEwICs4NjQsNiBAQAogCQlnb3RvIGNsZWFuX2RldmljZTsKIAl9CiAKLQkvKiB0YWtlIGEgcmVmZXJlbmNlIGZvciB0aGUgc2Rldl9kZXY7IHRoaXMgaXMKLQkgKiByZWxlYXNlZCBieSB0aGUgc2Rldl9jbGFzcyAucmVsZWFzZSAqLwotCWdldF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKLQogCS8qIGNyZWF0ZSBxdWV1ZSBmaWxlcywgd2hpY2ggbWF5IGJlIHdyaXRhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGhvc3QgKi8KIAlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPmNoYW5nZV9xdWV1ZV9kZXB0aCkKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmc2Rldl9hdHRyX3F1ZXVlX2RlcHRoX3J3KTsKQEAgLTkxNyw2ICs5MTMsNyBAQAogCiAJZGV2aWNlX2RlbCgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOworCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZGV2KTsKIAlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC0xMDY1LDcgKzEwNjIsNyBAQAogCQkgICAgIHNkZXYtPmhvc3QtPmhvc3Rfbm8sIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwogCiAJZGV2aWNlX2luaXRpYWxpemUoJnNkZXYtPnNkZXZfZGV2KTsKLQlzZGV2LT5zZGV2X2Rldi5wYXJlbnQgPSAmc2Rldi0+c2Rldl9nZW5kZXY7CisJc2Rldi0+c2Rldl9kZXYucGFyZW50ID0gZ2V0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXNkZXYtPnNkZXZfZGV2LmNsYXNzID0gJnNkZXZfY2xhc3M7CiAJZGV2X3NldF9uYW1lKCZzZGV2LT5zZGV2X2RldiwgIiVkOiVkOiVkOiVkIiwKIAkJICAgICBzZGV2LT5ob3N0LT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggYjk4ODg1ZC4uYzZmNzBkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTM1ODYsNiArMzU4Niw3IEBACiAKIC8qKgogICogZmNfYnNnX2hvc3RfZGlzcGF0Y2ggLSBwcm9jZXNzIGZjIGhvc3QgYnNnIHJlcXVlc3RzIGFuZCBkaXNwYXRjaCB0byBMTERECisgKiBAcToJCWZjIGhvc3QgcmVxdWVzdCBxdWV1ZQogICogQHNob3N0OglzY3NpIGhvc3QgcnBvcnQgYXR0YWNoZWQgdG8KICAqIEBqb2I6CWJzZyBqb2IgdG8gYmUgcHJvY2Vzc2VkCiAgKi8KQEAgLTM2NTUsNiArMzY1Niw3IEBACiBmYWlsX2hvc3RfbXNnOgogCS8qIHJldHVybiB0aGUgZXJybm8gZmFpbHVyZSBjb2RlIGFzIHRoZSBvbmx5IHN0YXR1cyAqLwogCUJVR19PTihqb2ItPnJlcGx5X2xlbiA8IHNpemVvZih1aW50MzJfdCkpOworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmV0OwogCWpvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHVpbnQzMl90KTsKIAlmY19ic2dfam9iZG9uZShqb2IpOwpAQCAtMzY5Myw2ICszNjk1LDcgQEAKIAogLyoqCiAgKiBmY19ic2dfcnBvcnRfZGlzcGF0Y2ggLSBwcm9jZXNzIHJwb3J0IGJzZyByZXF1ZXN0cyBhbmQgZGlzcGF0Y2ggdG8gTExERAorICogQHE6CQlycG9ydCByZXF1ZXN0IHF1ZXVlCiAgKiBAc2hvc3Q6CXNjc2kgaG9zdCBycG9ydCBhdHRhY2hlZCB0bwogICogQHJwb3J0OglycG9ydCByZXF1ZXN0IGRlc3RpbmVkIHRvCiAgKiBAam9iOglic2cgam9iIHRvIGJlIHByb2Nlc3NlZApAQCAtMzczOSw2ICszNzQyLDcgQEAKIGZhaWxfcnBvcnRfbXNnOgogCS8qIHJldHVybiB0aGUgZXJybm8gZmFpbHVyZSBjb2RlIGFzIHRoZSBvbmx5IHN0YXR1cyAqLwogCUJVR19PTihqb2ItPnJlcGx5X2xlbiA8IHNpemVvZih1aW50MzJfdCkpOworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmV0OwogCWpvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHVpbnQzMl90KTsKIAlmY19ic2dfam9iZG9uZShqb2IpOwpAQCAtMzc5NSw2ICszNzk5LDcgQEAKIAkJLyogY2hlY2sgaWYgd2UgaGF2ZSB0aGUgbXNnY29kZSB2YWx1ZSBhdCBsZWFzdCAqLwogCQlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8IHNpemVvZih1aW50MzJfdCkpIHsKIAkJCUJVR19PTihqb2ItPnJlcGx5X2xlbiA8IHNpemVvZih1aW50MzJfdCkpOworCQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAkJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FTk9NU0c7CiAJCQlqb2ItPnJlcGx5X2xlbiA9IHNpemVvZih1aW50MzJfdCk7CiAJCQlmY19ic2dfam9iZG9uZShqb2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCA4ZGQ5NmRjLi45MDkzYzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMTE2LDYgKzExNiw5IEBACiAgKiBvYmplY3QgYWZ0ZXIgbGFzdCBwdXQpICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHNkX3JlZl9tdXRleCk7CiAKK3N0cnVjdCBrbWVtX2NhY2hlICpzZF9jZGJfY2FjaGU7CittZW1wb29sX3QgKnNkX2NkYl9wb29sOworCiBzdGF0aWMgY29uc3QgY2hhciAqc2RfY2FjaGVfdHlwZXNbXSA9IHsKIAkid3JpdGUgdGhyb3VnaCIsICJub25lIiwgIndyaXRlIGJhY2siLAogCSJ3cml0ZSBiYWNrLCBubyByZWFkIChkYWZ0KSIKQEAgLTM3MCw2ICszNzMsMzEgQEAKIAltdXRleF91bmxvY2soJnNkX3JlZl9tdXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNkX3Byb3Rfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZikKK3sKKwl1bnNpZ25lZCBpbnQgcHJvdF9vcCA9IFNDU0lfUFJPVF9OT1JNQUw7CisJdW5zaWduZWQgaW50IGRpeCA9IHNjc2lfcHJvdF9zZ19jb3VudChzY21kKTsKKworCWlmIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJaWYgKGRpZiAmJiBkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1JFQURfUEFTUzsKKwkJZWxzZSBpZiAoZGlmICYmICFkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1JFQURfU1RSSVA7CisJCWVsc2UgaWYgKCFkaWYgJiYgZGl4KQorCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX0lOU0VSVDsKKwl9IGVsc2UgeworCQlpZiAoZGlmICYmIGRpeCkKKwkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfUEFTUzsKKwkJZWxzZSBpZiAoZGlmICYmICFkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX0lOU0VSVDsKKwkJZWxzZSBpZiAoIWRpZiAmJiBkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX1NUUklQOworCX0KKworCXNjc2lfc2V0X3Byb3Rfb3Aoc2NtZCwgcHJvdF9vcCk7CisJc2NzaV9zZXRfcHJvdF90eXBlKHNjbWQsIGRpZik7Cit9CisKIC8qKgogICoJc2RfaW5pdF9jb21tYW5kIC0gYnVpbGQgYSBzY3NpIChyZWFkIG9yIHdyaXRlKSBjb21tYW5kIGZyb20KICAqCWluZm9ybWF0aW9uIGluIHRoZSByZXF1ZXN0IHN0cnVjdHVyZS4KQEAgLTM4OCw2ICs0MTYsNyBAQAogCXNlY3Rvcl90IHRocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgdGhpc19jb3VudCA9IGJsa19ycV9zZWN0b3JzKHJxKTsKIAlpbnQgcmV0LCBob3N0X2RpZjsKKwl1bnNpZ25lZCBjaGFyIHByb3RlY3Q7CiAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXJldCA9IHNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoc2RwLCBycSk7CkBAIC01MjAsMTMgKzU0OSw0OSBAQAogCS8qIFNldCBSRFBST1RFQ1QvV1JQUk9URUNUIGlmIGRpc2sgaXMgZm9ybWF0dGVkIHdpdGggRElGICovCiAJaG9zdF9kaWYgPSBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpOwogCWlmIChob3N0X2RpZikKLQkJU0NwbnQtPmNtbmRbMV0gPSAxIDw8IDU7CisJCXByb3RlY3QgPSAxIDw8IDU7CiAJZWxzZQotCQlTQ3BudC0+Y21uZFsxXSA9IDA7CisJCXByb3RlY3QgPSAwOwogCi0JaWYgKGJsb2NrID4gMHhmZmZmZmZmZikgeworCWlmIChob3N0X2RpZiA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTikgeworCQlTQ3BudC0+Y21uZCA9IG1lbXBvb2xfYWxsb2Moc2RfY2RiX3Bvb2wsIEdGUF9BVE9NSUMpOworCisJCWlmICh1bmxpa2VseShTQ3BudC0+Y21uZCA9PSBOVUxMKSkgeworCQkJcmV0ID0gQkxLUFJFUF9ERUZFUjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJU0NwbnQtPmNtZF9sZW4gPSBTRF9FWFRfQ0RCX1NJWkU7CisJCW1lbXNldChTQ3BudC0+Y21uZCwgMCwgU0NwbnQtPmNtZF9sZW4pOworCQlTQ3BudC0+Y21uZFswXSA9IFZBUklBQkxFX0xFTkdUSF9DTUQ7CisJCVNDcG50LT5jbW5kWzddID0gMHgxODsKKwkJU0NwbnQtPmNtbmRbOV0gPSAocnFfZGF0YV9kaXIocnEpID09IFJFQUQpID8gUkVBRF8zMiA6IFdSSVRFXzMyOworCQlTQ3BudC0+Y21uZFsxMF0gPSBwcm90ZWN0IHwgKGJsa19mdWFfcnEocnEpID8gMHg4IDogMCk7CisKKwkJLyogTEJBICovCisJCVNDcG50LT5jbW5kWzEyXSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA1NikgJiAweGZmIDogMDsKKwkJU0NwbnQtPmNtbmRbMTNdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDQ4KSAmIDB4ZmYgOiAwOworCQlTQ3BudC0+Y21uZFsxNF0gPSBzaXplb2YoYmxvY2spID4gNCA/ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gNDApICYgMHhmZiA6IDA7CisJCVNDcG50LT5jbW5kWzE1XSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAzMikgJiAweGZmIDogMDsKKwkJU0NwbnQtPmNtbmRbMTZdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAyNCkgJiAweGZmOworCQlTQ3BudC0+Y21uZFsxN10gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDE2KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzE4XSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gOCkgJiAweGZmOworCQlTQ3BudC0+Y21uZFsxOV0gPSAodW5zaWduZWQgY2hhcikgYmxvY2sgJiAweGZmOworCisJCS8qIEV4cGVjdGVkIEluZGlyZWN0IExCQSAqLworCQlTQ3BudC0+Y21uZFsyMF0gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDI0KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzIxXSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gMTYpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMjJdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA4KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzIzXSA9ICh1bnNpZ25lZCBjaGFyKSBibG9jayAmIDB4ZmY7CisKKwkJLyogVHJhbnNmZXIgbGVuZ3RoICovCisJCVNDcG50LT5jbW5kWzI4XSA9ICh1bnNpZ25lZCBjaGFyKSAodGhpc19jb3VudCA+PiAyNCkgJiAweGZmOworCQlTQ3BudC0+Y21uZFsyOV0gPSAodW5zaWduZWQgY2hhcikgKHRoaXNfY291bnQgPj4gMTYpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMzBdID0gKHVuc2lnbmVkIGNoYXIpICh0aGlzX2NvdW50ID4+IDgpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMzFdID0gKHVuc2lnbmVkIGNoYXIpIHRoaXNfY291bnQgJiAweGZmOworCX0gZWxzZSBpZiAoYmxvY2sgPiAweGZmZmZmZmZmKSB7CiAJCVNDcG50LT5jbW5kWzBdICs9IFJFQURfMTYgLSBSRUFEXzY7Ci0JCVNDcG50LT5jbW5kWzFdIHw9IGJsa19mdWFfcnEocnEpID8gMHg4IDogMDsKKwkJU0NwbnQtPmNtbmRbMV0gPSBwcm90ZWN0IHwgKGJsa19mdWFfcnEocnEpID8gMHg4IDogMCk7CiAJCVNDcG50LT5jbW5kWzJdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDU2KSAmIDB4ZmYgOiAwOwogCQlTQ3BudC0+Y21uZFszXSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA0OCkgJiAweGZmIDogMDsKIAkJU0NwbnQtPmNtbmRbNF0gPSBzaXplb2YoYmxvY2spID4gNCA/ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gNDApICYgMHhmZiA6IDA7CkBAIC01NDcsNyArNjEyLDcgQEAKIAkJCXRoaXNfY291bnQgPSAweGZmZmY7CiAKIAkJU0NwbnQtPmNtbmRbMF0gKz0gUkVBRF8xMCAtIFJFQURfNjsKLQkJU0NwbnQtPmNtbmRbMV0gfD0gYmxrX2Z1YV9ycShycSkgPyAweDggOiAwOworCQlTQ3BudC0+Y21uZFsxXSA9IHByb3RlY3QgfCAoYmxrX2Z1YV9ycShycSkgPyAweDggOiAwKTsKIAkJU0NwbnQtPmNtbmRbMl0gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDI0KSAmIDB4ZmY7CiAJCVNDcG50LT5jbW5kWzNdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAxNikgJiAweGZmOwogCQlTQ3BudC0+Y21uZFs0XSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gOCkgJiAweGZmOwpAQCAtNTc4LDggKzY0Myw3IEBACiAKIAkvKiBJZiBESUYgb3IgRElYIGlzIGVuYWJsZWQsIHRlbGwgSEJBIGhvdyB0byBoYW5kbGUgcmVxdWVzdCAqLwogCWlmIChob3N0X2RpZiB8fCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKQotCQlzZF9kaWZfb3AoU0NwbnQsIGhvc3RfZGlmLCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpLAotCQkJICBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpOworCQlzZF9wcm90X29wKFNDcG50LCBob3N0X2RpZik7CiAKIAkvKgogCSAqIFdlIHNob3VsZG4ndCBkaXNjb25uZWN0IGluIHRoZSBtaWRkbGUgb2YgYSBzZWN0b3IsIHNvIHdpdGggYSBkdW1iCkBAIC0xMDIzLDYgKzEwODcsNyBAQAogCWludCByZXN1bHQgPSBTQ3BudC0+cmVzdWx0OwogCXVuc2lnbmVkIGludCBnb29kX2J5dGVzID0gcmVzdWx0ID8gMCA6IHNjc2lfYnVmZmxlbihTQ3BudCk7CiAJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOworCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSBzY3NpX2Rpc2soU0NwbnQtPnJlcXVlc3QtPnJxX2Rpc2spOwogCWludCBzZW5zZV92YWxpZCA9IDA7CiAJaW50IHNlbnNlX2RlZmVycmVkID0gMDsKIApAQCAtMTA4NCw2ICsxMTQ5LDEwIEBACiAJaWYgKHJxX2RhdGFfZGlyKFNDcG50LT5yZXF1ZXN0KSA9PSBSRUFEICYmIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpCiAJCXNkX2RpZl9jb21wbGV0ZShTQ3BudCwgZ29vZF9ieXRlcyk7CiAKKwlpZiAoc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNka3AtPmRldmljZS0+aG9zdCwgc2RrcC0+cHJvdGVjdGlvbl90eXBlKQorCSAgICA9PSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTiAmJiBTQ3BudC0+Y21uZCAhPSBTQ3BudC0+cmVxdWVzdC0+Y21kKQorCQltZW1wb29sX2ZyZWUoU0NwbnQtPmNtbmQsIHNkX2NkYl9wb29sKTsKKwogCXJldHVybiBnb29kX2J5dGVzOwogfQogCkBAIC0xMjM4LDM0ICsxMzA3LDI4IEBACiAJdTggdHlwZTsKIAogCWlmIChzY3NpX2RldmljZV9wcm90ZWN0aW9uKHNkcCkgPT0gMCB8fCAoYnVmZmVyWzEyXSAmIDEpID09IDApCi0JCXR5cGUgPSAwOwotCWVsc2UKLQkJdHlwZSA9ICgoYnVmZmVyWzEyXSA+PiAxKSAmIDcpICsgMTsgLyogUF9UWVBFIDAgPSBUeXBlIDEgKi8KKwkJcmV0dXJuOworCisJdHlwZSA9ICgoYnVmZmVyWzEyXSA+PiAxKSAmIDcpICsgMTsgLyogUF9UWVBFIDAgPSBUeXBlIDEgKi8KKworCWlmICh0eXBlID09IHNka3AtPnByb3RlY3Rpb25fdHlwZSB8fCAhc2RrcC0+Zmlyc3Rfc2NhbikKKwkJcmV0dXJuOwogCiAJc2RrcC0+cHJvdGVjdGlvbl90eXBlID0gdHlwZTsKIAotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgU0RfRElGX1RZUEUwX1BST1RFQ1RJT046Ci0JY2FzZSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTjoKLQljYXNlIFNEX0RJRl9UWVBFM19QUk9URUNUSU9OOgotCQlicmVhazsKLQotCWNhc2UgU0RfRElGX1RZUEUyX1BST1RFQ1RJT046Ci0JCXNkX3ByaW50ayhLRVJOX0VSUiwgc2RrcCwgImZvcm1hdHRlZCB3aXRoIERJRiBUeXBlIDIgIglcCi0JCQkgICJwcm90ZWN0aW9uIHdoaWNoIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4gIglcCi0JCQkgICJEaXNhYmxpbmcgZGlzayFcbiIpOwotCQlnb3RvIGRpc2FibGU7Ci0KLQlkZWZhdWx0OgotCQlzZF9wcmludGsoS0VSTl9FUlIsIHNka3AsICJmb3JtYXR0ZWQgd2l0aCB1bmtub3duICIJXAotCQkJICAicHJvdGVjdGlvbiB0eXBlICVkLiBEaXNhYmxpbmcgZGlzayFcbiIsIHR5cGUpOwotCQlnb3RvIGRpc2FibGU7CisJaWYgKHR5cGUgPiBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTikgeworCQlzZF9wcmludGsoS0VSTl9FUlIsIHNka3AsICJmb3JtYXR0ZWQgd2l0aCB1bnN1cHBvcnRlZCAiCVwKKwkJCSAgInByb3RlY3Rpb24gdHlwZSAldS4gRGlzYWJsaW5nIGRpc2shXG4iLCB0eXBlKTsKKwkJc2RrcC0+Y2FwYWNpdHkgPSAwOworCQlyZXR1cm47CiAJfQogCi0JcmV0dXJuOwotCi1kaXNhYmxlOgotCXNka3AtPmNhcGFjaXR5ID0gMDsKKwlpZiAoc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNkcC0+aG9zdCwgdHlwZSkpCisJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCSAgIkVuYWJsaW5nIERJRiBUeXBlICV1IHByb3RlY3Rpb25cbiIsIHR5cGUpOworCWVsc2UKKwkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAorCQkJICAiRGlzYWJsaW5nIERJRiBUeXBlICV1IHByb3RlY3Rpb25cbiIsIHR5cGUpOwogfQogCiBzdGF0aWMgdm9pZCByZWFkX2NhcGFjaXR5X2Vycm9yKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RwLApAQCAtMjMwMCw4ICsyMzYzLDI0IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2NsYXNzOwogCisJc2RfY2RiX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInNkX2V4dF9jZGIiLCBTRF9FWFRfQ0RCX1NJWkUsCisJCQkJCSAwLCAwLCBOVUxMKTsKKwlpZiAoIXNkX2NkYl9jYWNoZSkgeworCQlwcmludGsoS0VSTl9FUlIgInNkOiBjYW4ndCBpbml0IGV4dGVuZGVkIGNkYiBjYWNoZVxuIik7CisJCWdvdG8gZXJyX291dF9jbGFzczsKKwl9CisKKwlzZF9jZGJfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChTRF9NRU1QT09MX1NJWkUsIHNkX2NkYl9jYWNoZSk7CisJaWYgKCFzZF9jZGJfcG9vbCkgeworCQlwcmludGsoS0VSTl9FUlIgInNkOiBjYW4ndCBpbml0IGV4dGVuZGVkIGNkYiBwb29sXG4iKTsKKwkJZ290byBlcnJfb3V0X2NhY2hlOworCX0KKwogCXJldHVybiAwOwogCitlcnJfb3V0X2NhY2hlOgorCWttZW1fY2FjaGVfZGVzdHJveShzZF9jZGJfY2FjaGUpOworCiBlcnJfb3V0X2NsYXNzOgogCWNsYXNzX3VucmVnaXN0ZXIoJnNkX2Rpc2tfY2xhc3MpOwogZXJyX291dDoKQEAgLTIzMjEsNiArMjQwMCw5IEBACiAKIAlTQ1NJX0xPR19ITFFVRVVFKDMsIHByaW50aygiZXhpdF9zZDogZXhpdGluZyBzZCBkcml2ZXJcbiIpKTsKIAorCW1lbXBvb2xfZGVzdHJveShzZF9jZGJfcG9vbCk7CisJa21lbV9jYWNoZV9kZXN0cm95KHNkX2NkYl9jYWNoZSk7CisKIAlzY3NpX3VucmVnaXN0ZXJfZHJpdmVyKCZzZF90ZW1wbGF0ZS5nZW5kcnYpOwogCWNsYXNzX3VucmVnaXN0ZXIoJnNkX2Rpc2tfY2xhc3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuaCBiL2RyaXZlcnMvc2NzaS9zZC5oCmluZGV4IDg0NzRiNWJhLi5lMzc0ODA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuaAorKysgYi9kcml2ZXJzL3Njc2kvc2QuaApAQCAtMzcsNiArMzcsMTEgQEAKICAqLwogI2RlZmluZSBTRF9MQVNUX0JVR0dZX1NFQ1RPUlMJOAogCitlbnVtIHsKKwlTRF9FWFRfQ0RCX1NJWkUgPSAzMiwJLyogRXh0ZW5kZWQgQ0RCIHNpemUgKi8KKwlTRF9NRU1QT09MX1NJWkUgPSAyLAkvKiBDREIgcG9vbCBzaXplICovCit9OworCiBzdHJ1Y3Qgc2NzaV9kaXNrIHsKIAlzdHJ1Y3Qgc2NzaV9kcml2ZXIgKmRyaXZlcjsJLyogYWx3YXlzICZzZF90ZW1wbGF0ZSAqLwogCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlOwpAQCAtMTAxLDE2ICsxMDYsMTIgQEAKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOVEVHUklUWQogCi1leHRlcm4gdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHNkX2RpZl9jb25maWdfaG9zdChzdHJ1Y3Qgc2NzaV9kaXNrICopOwogZXh0ZXJuIGludCBzZF9kaWZfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2RfZGlmX2NvbXBsZXRlKHN0cnVjdCBzY3NpX2NtbmQgKiwgdW5zaWduZWQgaW50KTsKIAogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqY21kLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGludCBjKQotewotfQogc3RhdGljIGlubGluZSB2b2lkIHNkX2RpZl9jb25maWdfaG9zdChzdHJ1Y3Qgc2NzaV9kaXNrICpkaXNrKQogewogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkX2RpZi5jIGIvZHJpdmVycy9zY3NpL3NkX2RpZi5jCmluZGV4IDgyZjE0YTkuLjg4ZGE5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZF9kaWYuYworKysgYi9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKQEAgLTMyMCwxNSArMzIwLDYgQEAKIAkJZGlmID0gMDsgZGl4ID0gMTsKIAl9CiAKLQlpZiAodHlwZSkgewotCQlpZiAoZGlmKQotCQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAotCQkJCSAgIkVuYWJsaW5nIERJRiBUeXBlICVkIHByb3RlY3Rpb25cbiIsIHR5cGUpOwotCQllbHNlCi0JCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCi0JCQkJICAiRGlzYWJsaW5nIERJRiBUeXBlICVkIHByb3RlY3Rpb25cbiIsIHR5cGUpOwotCX0KLQogCWlmICghZGl4KQogCQlyZXR1cm47CiAKQEAgLTM2MCw2MiArMzUxLDYgQEAKIH0KIAogLyoKLSAqIERJRiBETUEgb3BlcmF0aW9uIG1hZ2ljIGRlY29kZXIgcmluZy4KLSAqLwotdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZiwgdW5zaWduZWQgaW50IGRpeCwgdW5zaWduZWQgaW50IHR5cGUpCi17Ci0JaW50IGNzdW1fY29udmVydCwgcHJvdF9vcDsKLQotCXByb3Rfb3AgPSAwOwotCi0JLyogQ29udmVydCBjaGVja3N1bT8gKi8KLQlpZiAoc2NzaV9ob3N0X2dldF9ndWFyZChzY21kLT5kZXZpY2UtPmhvc3QpICE9IFNIT1NUX0RJWF9HVUFSRF9DUkMpCi0JCWNzdW1fY29udmVydCA9IDE7Ci0JZWxzZQotCQljc3VtX2NvbnZlcnQgPSAwOwotCi0JQlVHX09OKGRpZiAmJiAoc2NtZC0+Y21uZFswXSA9PSBSRUFEXzYgfHwgc2NtZC0+Y21uZFswXSA9PSBXUklURV82KSk7Ci0KLQlzd2l0Y2ggKHNjbWQtPmNtbmRbMF0pIHsKLQljYXNlIFJFQURfNjoKLQljYXNlIFJFQURfMTA6Ci0JY2FzZSBSRUFEXzEyOgotCWNhc2UgUkVBRF8xNjoKLQkJaWYgKGRpZiAmJiBkaXgpCi0JCQlpZiAoY3N1bV9jb252ZXJ0KQotCQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9DT05WRVJUOwotCQkJZWxzZQotCQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9QQVNTOwotCQllbHNlIGlmIChkaWYgJiYgIWRpeCkKLQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9TVFJJUDsKLQkJZWxzZSBpZiAoIWRpZiAmJiBkaXgpCi0JCQlwcm90X29wID0gU0NTSV9QUk9UX1JFQURfSU5TRVJUOwotCi0JCWJyZWFrOwotCi0JY2FzZSBXUklURV82OgotCWNhc2UgV1JJVEVfMTA6Ci0JY2FzZSBXUklURV8xMjoKLQljYXNlIFdSSVRFXzE2OgotCQlpZiAoZGlmICYmIGRpeCkKLQkJCWlmIChjc3VtX2NvbnZlcnQpCi0JCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9XUklURV9DT05WRVJUOwotCQkJZWxzZQotCQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfUEFTUzsKLQkJZWxzZSBpZiAoZGlmICYmICFkaXgpCi0JCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX0lOU0VSVDsKLQkJZWxzZSBpZiAoIWRpZiAmJiBkaXgpCi0JCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX1NUUklQOwotCi0JCWJyZWFrOwotCX0KLQotCXNjc2lfc2V0X3Byb3Rfb3Aoc2NtZCwgcHJvdF9vcCk7Ci0JaWYgKGRpZikKLQkJc2NzaV9zZXRfcHJvdF90eXBlKHNjbWQsIHR5cGUpOwotfQotCi0vKgogICogVGhlIHZpcnR1YWwgc3RhcnQgc2VjdG9yIGlzIHRoZSBvbmUgdGhhdCB3YXMgb3JpZ2luYWxseSBzdWJtaXR0ZWQKICAqIGJ5IHRoZSBibG9jayBsYXllci4JRHVlIHRvIHBhcnRpdGlvbmluZywgTUQvRE0gY2xvbmluZywgZXRjLiB0aGUKICAqIGFjdHVhbCBwaHlzaWNhbCBzdGFydCBzZWN0b3IgaXMgbGlrZWx5IHRvIGJlIGRpZmZlcmVudC4gIFJlbWFwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDg0OGI1OTQuLjA0MGY3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0xMTg1LDcgKzExODUsNyBAQAogCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2dfbW1hcF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNnX21tYXBfdm1fb3BzID0gewogCS5mYXVsdCA9IHNnX3ZtYV9mYXVsdCwKIH07CiAKQEAgLTEzMTcsNyArMTMxNyw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2dfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkucmVhZCA9IHNnX3JlYWQsCiAJLndyaXRlID0gc2dfd3JpdGUsCkBAIC0xNzA4LDExICsxNzA4LDYgQEAKIAlTZ19zY2F0dGVyX2hvbGQgKnJlcV9zY2hwID0gJnNycC0+ZGF0YTsKIAogCVNDU0lfTE9HX1RJTUVPVVQoNCwgcHJpbnRrKCJzZ19maW5pc2hfcmVtX3JlcTogcmVzX3VzZWQ9JWRcbiIsIChpbnQpIHNycC0+cmVzX3VzZWQpKTsKLQlpZiAoc3JwLT5yZXNfdXNlZCkKLQkJc2dfdW5saW5rX3Jlc2VydmUoc2ZwLCBzcnApOwotCWVsc2UKLQkJc2dfcmVtb3ZlX3NjYXQocmVxX3NjaHApOwotCiAJaWYgKHNycC0+cnEpIHsKIAkJaWYgKHNycC0+YmlvKQogCQkJcmV0ID0gYmxrX3JxX3VubWFwX3VzZXIoc3JwLT5iaW8pOwpAQCAtMTcyMCw2ICsxNzE1LDExIEBACiAJCWJsa19wdXRfcmVxdWVzdChzcnAtPnJxKTsKIAl9CiAKKwlpZiAoc3JwLT5yZXNfdXNlZCkKKwkJc2dfdW5saW5rX3Jlc2VydmUoc2ZwLCBzcnApOworCWVsc2UKKwkJc2dfcmVtb3ZlX3NjYXQocmVxX3NjaHApOworCiAJc2dfcmVtb3ZlX3JlcXVlc3Qoc2ZwLCBzcnApOwogCiAJcmV0dXJuIHJldDsKQEAgLTIxOTQsOSArMjE5NCwxMSBAQAogc3RhdGljIGludCBzZ19wcm9jX3NpbmdsZV9vcGVuX2FkaW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIHNzaXplX3Qgc2dfcHJvY193cml0ZV9hZGlvKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJICAgICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWRpb19mb3BzID0gewotCS8qIC5vd25lciwgLnJlYWQgYW5kIC5sbHNlZWsgYWRkZWQgaW4gc2dfcHJvY19pbml0KCkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFkaW9fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fYWRpbywKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLndyaXRlID0gc2dfcHJvY193cml0ZV9hZGlvLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwpAQCAtMjIwNCwyMyArMjIwNiwzMiBAQAogc3RhdGljIGludCBzZ19wcm9jX3NpbmdsZV9vcGVuX2RyZXNzeihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgc3NpemVfdCBzZ19wcm9jX3dyaXRlX2RyZXNzeihzdHJ1Y3QgZmlsZSAqZmlscCwgCiAJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJlc3N6X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcmVzc3pfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fZHJlc3N6LAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkud3JpdGUgPSBzZ19wcm9jX3dyaXRlX2RyZXNzeiwKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBzZ19wcm9jX3NlcV9zaG93X3ZlcnNpb24oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgc2dfcHJvY19zaW5nbGVfb3Blbl92ZXJzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZlcnNpb25fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZlcnNpb25fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fdmVyc2lvbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgc2dfcHJvY19zZXFfc2hvd19kZXZoZHIoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgc2dfcHJvY19zaW5nbGVfb3Blbl9kZXZoZHIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2aGRyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZoZHJfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfc2luZ2xlX29wZW5fZGV2aGRyLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIApAQCAtMjIyOSw4ICsyMjQwLDExIEBACiBzdGF0aWMgdm9pZCAqIGRldl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcyk7CiBzdGF0aWMgdm9pZCAqIGRldl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKTsKIHN0YXRpYyB2b2lkIGRldl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfb3Blbl9kZXYsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZXZfc2VxX29wcyA9IHsKQEAgLTIyNDIsOCArMjI1NiwxMSBAQAogCiBzdGF0aWMgaW50IHNnX3Byb2Nfc2VxX3Nob3dfZGV2c3RycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwogc3RhdGljIGludCBzZ19wcm9jX29wZW5fZGV2c3RycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZzdHJzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZzdHJzX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBzZ19wcm9jX29wZW5fZGV2c3RycywKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldnN0cnNfc2VxX29wcyA9IHsKQEAgLTIyNTUsOCArMjI3MiwxMSBAQAogCiBzdGF0aWMgaW50IHNnX3Byb2Nfc2VxX3Nob3dfZGVidWcoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KTsKIHN0YXRpYyBpbnQgc2dfcHJvY19vcGVuX2RlYnVnKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19vcGVuX2RlYnVnLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGVidWdfc2VxX29wcyA9IHsKQEAgLTIyNjksNyArMjI4OSw3IEBACiAKIHN0cnVjdCBzZ19wcm9jX2xlYWYgewogCWNvbnN0IGNoYXIgKiBuYW1lOwotCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKiBmb3BzOworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKiBmb3BzOwogfTsKIAogc3RhdGljIHN0cnVjdCBzZ19wcm9jX2xlYWYgc2dfcHJvY19sZWFmX2FycltdID0gewpAQCAtMjI5NSw5ICsyMzE1LDYgQEAKIAlmb3IgKGsgPSAwOyBrIDwgbnVtX2xlYXZlczsgKytrKSB7CiAJCWxlYWYgPSAmc2dfcHJvY19sZWFmX2FycltrXTsKIAkJbWFzayA9IGxlYWYtPmZvcHMtPndyaXRlID8gU19JUlVHTyB8IFNfSVdVU1IgOiBTX0lSVUdPOwotCQlsZWFmLT5mb3BzLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlsZWFmLT5mb3BzLT5yZWFkID0gc2VxX3JlYWQ7Ci0JCWxlYWYtPmZvcHMtPmxsc2VlayA9IHNlcV9sc2VlazsKIAkJcHJvY19jcmVhdGUobGVhZi0+bmFtZSwgbWFzaywgc2dfcHJvY19zZ3AsIGxlYWYtPmZvcHMpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5jIGIvZHJpdmVycy9zY3NpL3NyLmMKaW5kZXggZWI2MWY3YS4uZDZmMzQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyLmMKQEAgLTY4NCwxNCArNjg0LDIwIEBACiAJCWNkLT5jYXBhY2l0eSA9IDB4MWZmZmZmOwogCQlzZWN0b3Jfc2l6ZSA9IDIwNDg7CS8qIEEgZ3Vlc3MsIGp1c3QgaW4gY2FzZSAqLwogCX0gZWxzZSB7Ci0jaWYgMAotCQlpZiAoY2Ryb21fZ2V0X2xhc3Rfd3JpdHRlbigmY2QtPmNkaSwKLQkJCQkJICAgJmNkLT5jYXBhY2l0eSkpCi0jZW5kaWYKLQkJCWNkLT5jYXBhY2l0eSA9IDEgKyAoKGJ1ZmZlclswXSA8PCAyNCkgfAotCQkJCQkJICAgIChidWZmZXJbMV0gPDwgMTYpIHwKLQkJCQkJCSAgICAoYnVmZmVyWzJdIDw8IDgpIHwKLQkJCQkJCSAgICBidWZmZXJbM10pOworCQlsb25nIGxhc3Rfd3JpdHRlbjsKKworCQljZC0+Y2FwYWNpdHkgPSAxICsgKChidWZmZXJbMF0gPDwgMjQpIHwgKGJ1ZmZlclsxXSA8PCAxNikgfAorCQkJCSAgICAoYnVmZmVyWzJdIDw8IDgpIHwgYnVmZmVyWzNdKTsKKwkJLyoKKwkJICogUkVBRF9DQVBBQ0lUWSBkb2Vzbid0IHJldHVybiB0aGUgY29ycmVjdCBzaXplIG9uCisJCSAqIGNlcnRhaW4gVURGIG1lZGlhLiAgSWYgbGFzdF93cml0dGVuIGlzIGxhcmdlciwgdXNlCisJCSAqIGl0IGluc3RlYWQuCisJCSAqCisJCSAqIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD05NjY4CisJCSAqLworCQlpZiAoIWNkcm9tX2dldF9sYXN0X3dyaXR0ZW4oJmNkLT5jZGksICZsYXN0X3dyaXR0ZW4pKQorCQkJY2QtPmNhcGFjaXR5ID0gbWF4X3QobG9uZywgY2QtPmNhcGFjaXR5LCBsYXN0X3dyaXR0ZW4pOworCiAJCXNlY3Rvcl9zaXplID0gKGJ1ZmZlcls0XSA8PCAyNCkgfAogCQkgICAgKGJ1ZmZlcls1XSA8PCAxNikgfCAoYnVmZmVyWzZdIDw8IDgpIHwgYnVmZmVyWzddOwogCQlzd2l0Y2ggKHNlY3Rvcl9zaXplKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IGIzM2QwNDIuLjEyZDU4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC0yODU5LDExICsyODU5LDggQEAKIAkJCWlvY3RsX3Jlc3VsdCA9IHN0X2ludF9pb2N0bChTVHAsIE1UQlNGLCAxKTsKIAogCQlpZiAoY21kX2luID09IE1UU0VUQkxLIHx8IGNtZF9pbiA9PSBTRVRfREVOU19BTkRfQkxLKSB7Ci0JCQlpbnQgb2xkX2Jsb2NrX3NpemUgPSBTVHAtPmJsb2NrX3NpemU7CiAJCQlTVHAtPmJsb2NrX3NpemUgPSBhcmcgJiBNVF9TVF9CTEtTSVpFX01BU0s7CiAJCQlpZiAoU1RwLT5ibG9ja19zaXplICE9IDApIHsKLQkJCQlpZiAob2xkX2Jsb2NrX3NpemUgPT0gMCkKLQkJCQkJbm9ybWFsaXplX2J1ZmZlcihTVHAtPmJ1ZmZlcik7CiAJCQkJKFNUcC0+YnVmZmVyKS0+YnVmZmVyX2Jsb2NrcyA9CiAJCQkJICAgIChTVHAtPmJ1ZmZlciktPmJ1ZmZlcl9zaXplIC8gU1RwLT5ibG9ja19zaXplOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IDIyMDk2MjAuLjczN2I0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTY0LDYgKzY0LDggQEAKIAlyZXR1cm4gKHNlcmlhbDgyNTBfcmVnLm1pbm9yIC0gNjQpICsgcG9ydC0+bGluZTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBza2lwX3R4ZW5fdGVzdDsgLyogZm9yY2Ugc2tpcCBvZiB0eGVuIHRlc3QgYXQgaW5pdCB0aW1lICovCisKIC8qCiAgKiBEZWJ1Z2dpbmcuCiAgKi8KQEAgLTEwODcsNyArMTA4OSw3IEBACiAJaWYgKCF1cC0+cG9ydC5pb2Jhc2UgJiYgIXVwLT5wb3J0Lm1hcGJhc2UgJiYgIXVwLT5wb3J0Lm1lbWJhc2UpCiAJCXJldHVybjsKIAotCURFQlVHX0FVVE9DT05GKCJ0dHlTJWQ6IGF1dG9jb25mICgweCUwNHgsIDB4JXApOiAiLAorCURFQlVHX0FVVE9DT05GKCJ0dHlTJWQ6IGF1dG9jb25mICgweCUwNGx4LCAweCVwKTogIiwKIAkJICAgICAgIHNlcmlhbF9pbmRleCgmdXAtPnBvcnQpLCB1cC0+cG9ydC5pb2Jhc2UsIHVwLT5wb3J0Lm1lbWJhc2UpOwogCiAJLyoKQEAgLTIxMDgsNyArMjExMCw3IEBACiAJICAgaXMgdmFyaWFibGUuIFNvLCBsZXQncyBqdXN0IGRvbid0IHRlc3QgaWYgd2UgcmVjZWl2ZQogCSAgIFRYIGlycS4gVGhpcyB3YXksIHdlJ2xsIG5ldmVyIGVuYWJsZSBVQVJUX0JVR19UWEVOLgogCSAqLwotCWlmICh1cC0+cG9ydC5mbGFncyAmIFVQRl9OT19UWEVOX1RFU1QpCisJaWYgKHNraXBfdHhlbl90ZXN0IHx8IHVwLT5wb3J0LmZsYWdzICYgVVBGX05PX1RYRU5fVEVTVCkKIAkJZ290byBkb250X3Rlc3RfdHhfZW47CiAKIAkvKgpAQCAtMzI0OCw2ICszMjUwLDkgQEAKIG1vZHVsZV9wYXJhbShucl91YXJ0cywgdWludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5yX3VhcnRzLCAiTWF4aW11bSBudW1iZXIgb2YgVUFSVHMgc3VwcG9ydGVkLiAoMS0iIF9fTU9EVUxFX1NUUklORyhDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFMpICIpIik7CiAKK21vZHVsZV9wYXJhbShza2lwX3R4ZW5fdGVzdCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNraXBfdHhlbl90ZXN0LCAiU2tpcCBjaGVja2luZyBmb3IgdGhlIFRYRU4gYnVnIGF0IGluaXQgdGltZSIpOworCiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX1JTQQogbW9kdWxlX3BhcmFtX2FycmF5KHByb2JlX3JzYSwgdWxvbmcsICZwcm9iZV9yc2FfY291bnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwcm9iZV9yc2EsICJQcm9iZSBJL08gcG9ydHMgZm9yIFJTQSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggZTcxMDhlNy4uYjI4YWYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC0xNTYxLDExICsxNTYxLDE2IEBACiAJcGJuX2V4YXJfWFIxN0MxNTIsCiAJcGJuX2V4YXJfWFIxN0MxNTQsCiAJcGJuX2V4YXJfWFIxN0MxNTgsCisJcGJuX2V4YXJfaWJtX3NhdHVybiwKIAlwYm5fcGFzZW1pXzE2ODJNLAogCXBibl9uaTg0MzBfMiwKIAlwYm5fbmk4NDMwXzQsCiAJcGJuX25pODQzMF84LAogCXBibl9uaTg0MzBfMTYsCisJcGJuX0FERElEQVRBX1BDSWVfMV8zOTA2MjUwLAorCXBibl9BRERJREFUQV9QQ0llXzJfMzkwNjI1MCwKKwlwYm5fQURESURBVEFfUENJZV80XzM5MDYyNTAsCisJcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwLAogfTsKIAogLyoKQEAgLTIxNDYsNiArMjE1MSwxMyBAQAogCQkuYmFzZV9iYXVkCT0gOTIxNjAwLAogCQkudWFydF9vZmZzZXQJPSAweDIwMCwKIAl9LAorCVtwYm5fZXhhcl9pYm1fc2F0dXJuXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDkyMTYwMCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJfSwKKwogCS8qCiAJICogUEEgU2VtaSBQV1JmaWNpZW50IFBBNlQtMTY4Mk0gb24tY2hpcCBVQVJUCiAJICovCkBAIC0yMTg1LDYgKzIxOTcsMzcgQEAKIAkJLnVhcnRfb2Zmc2V0CT0gMHgxMCwKIAkJLmZpcnN0X29mZnNldAk9IDB4ODAwLAogCX0sCisJLyoKKwkgKiBBRERJLURBVEEgR21iSCBQQ0ktRXhwcmVzcyBjb21tdW5pY2F0aW9uIGNhcmRzIDxpbmZvQGFkZGktZGF0YS5jb20+CisJICovCisJW3Bibl9BRERJREFUQV9QQ0llXzFfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDEsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAorCVtwYm5fQURESURBVEFfUENJZV8yXzM5MDYyNTBdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSAyLAorCQkuYmFzZV9iYXVkCT0gMzkwNjI1MCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJCS5maXJzdF9vZmZzZXQJPSAweDEwMDAsCisJfSwKKwlbcGJuX0FERElEQVRBX1BDSWVfNF8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gNCwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDgsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNvZnRtb2RlbV9ibGFja2xpc3RbXSA9IHsKQEAgLTIzNDAsNyArMjM4Myw3IEBACiAJCQlicmVhazsKIAogI2lmZGVmIFNFUklBTF9ERUJVR19QQ0kKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlNldHVwIFBDSSBwb3J0OiBwb3J0ICV4LCBpcnEgJWQsIHR5cGUgJWRcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHICJTZXR1cCBQQ0kgcG9ydDogcG9ydCAlbHgsIGlycSAlZCwgdHlwZSAlZFxuIiwKIAkJICAgICAgIHNlcmlhbF9wb3J0LmlvYmFzZSwgc2VyaWFsX3BvcnQuaXJxLCBzZXJpYWxfcG9ydC5pb3R5cGUpOwogI2VuZGlmCiAKQEAgLTI2NDksNiArMjY5Miw5IEBACiAJCVBDSV9TVUJWRU5ET1JfSURfQ09OTkVDVF9URUNILAogCQlQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF84XzQ4NSwgMCwgMCwKIAkJcGJuX2IwXzhfMTg0MzIwMF8yMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfRVhBUiwgUENJX0RFVklDRV9JRF9FWEFSX1hSMTdDMTUyLAorCQlQQ0lfVkVORE9SX0lEX0lCTSwgUENJX1NVQkRFVklDRV9JRF9JQk1fU0FUVVJOX1NFUklBTF9PTkVfUE9SVCwKKwkJMCwgMCwgcGJuX2V4YXJfaWJtX3NhdHVybiB9LAogCiAJewlQQ0lfVkVORE9SX0lEX1NFQUxFVkVMLCBQQ0lfREVWSUNFX0lEX1NFQUxFVkVMX1U1MzAsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCkBAIC0zMDkzLDYgKzMxMzksMTIgQEAKIAl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19CLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCQlwYm5fYjBfYnRfMl8xMTUyMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRUUk9fQSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IwX2J0XzJfMTE1MjAwIH0sCisJewlQQ0lfVkVORE9SX0lEX0xBVkEsIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUVFJPX0IsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9iMF9idF8yXzExNTIwMCB9LAogCXsJUENJX1ZFTkRPUl9JRF9MQVZBLCBQQ0lfREVWSUNFX0lEX0xBVkFfT0NUT19BLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCQlwYm5fYjBfYnRfNF80NjA4MDAgfSwKQEAgLTM1NTYsNiArMzYwOCwzOCBAQAogCQkwLAogCQlwYm5fYjBfOF8xMTUyMDAgfSwKIAorCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc1MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzRfMzkwNjI1MCB9LAorCisJewlQQ0lfVkVORE9SX0lEX0FERElEQVRBLAorCQlQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzQyMCwKKwkJUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwKKwkJMCwKKwkJMCwKKwkJcGJuX0FERElEQVRBX1BDSWVfMl8zOTA2MjUwIH0sCisKKwl7CVBDSV9WRU5ET1JfSURfQURESURBVEEsCisJCVBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3MzAwLAorCQlQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELAorCQkwLAorCQkwLAorCQlwYm5fQURESURBVEFfUENJZV8xXzM5MDYyNTAgfSwKKworCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc4MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MCB9LAorCiAJewlQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSwKIAkJUENJX1ZFTkRPUl9JRF9JQk0sIDB4MDI5OSwKIAkJMCwgMCwgcGJuX2IwX2J0XzJfMTE1MjAwIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCAwMzQyMmNlLi5lNTIyNTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTg2Miw3ICs4NjIsNyBAQAogCiBjb25maWcgU0VSSUFMX1VBUlRMSVRFCiAJdHJpc3RhdGUgIlhpbGlueCB1YXJ0bGl0ZSBzZXJpYWwgcG9ydCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDMzIgfHwgTUlDUk9CTEFaRQorCWRlcGVuZHMgb24gUFBDMzIgfHwgTUlDUk9CTEFaRSB8fCBNRkRfVElNQkVSREFMRQogCXNlbGVjdCBTRVJJQUxfQ09SRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBYaWxpbnggdWFydGxpdGUgc2VyaWFsIGNvbnRyb2xsZXIuCkBAIC0xNDU4LDQgKzE0NTgsMjMgQEAKIAktLS1oZWxwLS0tCiAJQWRkIHN1cHBvcnQgZm9yIFVBUlQgY29udHJvbGxlciBvbiB0aW1iZXJkYWxlLgogCitjb25maWcgU0VSSUFMX0JDTTYzWFgKKwl0cmlzdGF0ZSAiYmNtNjN4eCBzZXJpYWwgcG9ydCBzdXBwb3J0IgorCXNlbGVjdCBTRVJJQUxfQ09SRQorCWRlcGVuZHMgb24gQkNNNjNYWAorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgYmNtNjN4eCBDUFUsIHlvdSBjYW4gZW5hYmxlIGl0cyBvbmJvYXJkCisJICBzZXJpYWwgcG9ydCBieSBlbmFibGluZyB0aGlzIG9wdGlvbnMuCisKKyAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKyAgICAgICAgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmNtOTYzeHhfdWFydC4KKworY29uZmlnIFNFUklBTF9CQ002M1hYX0NPTlNPTEUKKwlib29sICJDb25zb2xlIG9uIGJjbTYzeHggc2VyaWFsIHBvcnQiCisJZGVwZW5kcyBvbiBTRVJJQUxfQkNNNjNYWD15CisJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBlbmFibGVkIHRoZSBzZXJpYWwgcG9ydCBvbiB0aGUgYmNtNjN4eCBDUFUKKwkgIHlvdSBjYW4gbWFrZSBpdCB0aGUgY29uc29sZSBieSBhbnN3ZXJpbmcgWSB0byB0aGlzIG9wdGlvbi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQppbmRleCA5N2Y2ZmNjLi5kMjFkNWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9QWEEpICs9IHB4YS5vCiBvYmotJChDT05GSUdfU0VSSUFMX1BOWDhYWFgpICs9IHBueDh4eHhfdWFydC5vCiBvYmotJChDT05GSUdfU0VSSUFMX1NBMTEwMCkgKz0gc2ExMTAwLm8KK29iai0kKENPTkZJR19TRVJJQUxfQkNNNjNYWCkgKz0gYmNtNjN4eF91YXJ0Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfQkZJTikgKz0gYmZpbl81eHgubwogb2JqLSQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSArPSBiZmluX3Nwb3J0X3VhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9TQU1TVU5HKSArPSBzYW1zdW5nLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggMzU1MWM1Yy4uOWQ5NDhiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTE1MzEsNyArMTUzMSw3IEBACiAJdm9pZCAqZGF0YTsKIAlpbnQgcmV0OwogCi0JQlVJTERfQlVHX09OKCFpc19wb3dlcl9vZl8yKEFUTUVMX1NFUklBTF9SSU5HU0laRSkpOworCUJVSUxEX0JVR19PTihBVE1FTF9TRVJJQUxfUklOR1NJWkUgJiAoQVRNRUxfU0VSSUFMX1JJTkdTSVpFIC0gMSkpOwogCiAJcG9ydCA9ICZhdG1lbF9wb3J0c1twZGV2LT5pZF07CiAJcG9ydC0+YmFja3VwX2ltciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL2JjbTYzeHhfdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZGRhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYwpAQCAtMCwwICsxLDg5MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIERlcml2ZWQgZnJvbSBtYW55IGRyaXZlcnMgdXNpbmcgZ2VuZXJpY19zZXJpYWwgaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPgorICoKKyAqICBTZXJpYWwgZHJpdmVyIGZvciBCQ002M3h4IGludGVncmF0ZWQgVUFSVC4KKyAqCisgKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgd2FzIF9ub3RfIHRlc3RlZCBzaW5jZSBJIG9ubHkgaGF2ZSBSWC9UWCBvbgorICogbXkgYm9hcmQuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CQ002M1hYX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQorI2RlZmluZSBTVVBQT1JUX1NZU1JRCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPGJjbTYzeHhfY2xrLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9pcnEuaD4KKyNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KKyNpbmNsdWRlIDxiY202M3h4X2lvLmg+CisKKyNkZWZpbmUgQkNNNjNYWF9OUl9VQVJUUwkxCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHBvcnRzW0JDTTYzWFhfTlJfVUFSVFNdOworCisvKgorICogcnggaW50ZXJydXB0IG1hc2sgLyBzdGF0CisgKgorICogbWFzazoKKyAqICAtIHJ4IGZpZm8gZnVsbAorICogIC0gcnggZmlmbyBhYm92ZSB0aHJlc2hvbGQKKyAqICAtIHJ4IGZpZm8gbm90IGVtcHR5IGZvciB0b28gbG9uZworICovCisjZGVmaW5lIFVBUlRfUlhfSU5UX01BU0sJKFVBUlRfSVJfTUFTSyhVQVJUX0lSX1JYT1ZFUikgfAkJXAorCQkJCVVBUlRfSVJfTUFTSyhVQVJUX0lSX1JYVEhSRVNIKSB8CVwKKwkJCQlVQVJUX0lSX01BU0soVUFSVF9JUl9SWFRJTUVPVVQpKQorCisjZGVmaW5lIFVBUlRfUlhfSU5UX1NUQVQJKFVBUlRfSVJfU1RBVChVQVJUX0lSX1JYT1ZFUikgfAkJXAorCQkJCVVBUlRfSVJfU1RBVChVQVJUX0lSX1JYVEhSRVNIKSB8CVwKKwkJCQlVQVJUX0lSX1NUQVQoVUFSVF9JUl9SWFRJTUVPVVQpKQorCisvKgorICogdHggaW50ZXJydXB0IG1hc2sgLyBzdGF0CisgKgorICogbWFzazoKKyAqIC0gdHggZmlmbyBlbXB0eQorICogLSB0eCBmaWZvIGJlbG93IHRocmVzaG9sZAorICovCisjZGVmaW5lIFVBUlRfVFhfSU5UX01BU0sJKFVBUlRfSVJfTUFTSyhVQVJUX0lSX1RYRU1QVFkpIHwJXAorCQkJCVVBUlRfSVJfTUFTSyhVQVJUX0lSX1RYVFJFU0gpKQorCisjZGVmaW5lIFVBUlRfVFhfSU5UX1NUQVQJKFVBUlRfSVJfU1RBVChVQVJUX0lSX1RYRU1QVFkpIHwJXAorCQkJCVVBUlRfSVJfU1RBVChVQVJUX0lSX1RYVFJFU0gpKQorCisvKgorICogZXh0ZXJuYWwgaW5wdXQgaW50ZXJydXB0CisgKgorICogbWFzazogYW55IGVkZ2Ugb24gQ1RTLCBEQ0QKKyAqLworI2RlZmluZSBVQVJUX0VYVElOUF9JTlRfTUFTSwkoVUFSVF9FWFRJTlBfSVJNQVNLKFVBUlRfRVhUSU5QX0lSX0NUUykgfCBcCisJCQkJIFVBUlRfRVhUSU5QX0lSTUFTSyhVQVJUX0VYVElOUF9JUl9EQ0QpKQorCisvKgorICogaGFuZHkgdWFydCByZWdpc3RlciBhY2Nlc3NvcgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiY21fdWFydF9yZWFkbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCQkgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gYmNtX3JlYWRsKHBvcnQtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmNtX3VhcnRfd3JpdGVsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJICB1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJYmNtX3dyaXRlbCh2YWx1ZSwgcG9ydC0+bWVtYmFzZSArIG9mZnNldCk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGNoZWNrIGlmIHVhcnQgdHggZmlmbyBpcyBlbXB0eQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGJjbV91YXJ0X3R4X2VtcHR5KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfSVJfUkVHKTsKKwlyZXR1cm4gKHZhbCAmIFVBUlRfSVJfU1RBVChVQVJUX0lSX1RYRU1QVFkpKSA/IDEgOiAwOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBzZXQgUlRTIGFuZCBEVFIgcGluIHN0YXRlIGFuZCBsb29wYmFjayBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfTUNUTF9SRUcpOworCXZhbCAmPSB+KFVBUlRfTUNUTF9EVFJfTUFTSyB8IFVBUlRfTUNUTF9SVFNfTUFTSyk7CisJLyogaW52ZXJ0IG9mIHdyaXR0ZW4gdmFsdWUgaXMgcmVmbGVjdGVkIG9uIHRoZSBwaW4gKi8KKwlpZiAoIShtY3RybCAmIFRJT0NNX0RUUikpCisJCXZhbCB8PSBVQVJUX01DVExfRFRSX01BU0s7CisJaWYgKCEobWN0cmwgJiBUSU9DTV9SVFMpKQorCQl2YWwgfD0gVUFSVF9NQ1RMX1JUU19NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfTUNUTF9SRUcpOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwlpZiAobWN0cmwgJiBUSU9DTV9MT09QKQorCQl2YWwgfD0gVUFSVF9DVExfTE9PUEJBQ0tfTUFTSzsKKwllbHNlCisJCXZhbCAmPSB+VUFSVF9DVExfTE9PUEJBQ0tfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byByZXR1cm4gUkksIENUUywgRENEIGFuZCBEU1IgcGluIHN0YXRlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmNtX3VhcnRfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbCwgbWN0cmw7CisKKwltY3RybCA9IDA7CisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9FWFRJTlBfUkVHKTsKKwlpZiAodmFsICYgVUFSVF9FWFRJTlBfUklfTUFTSykKKwkJbWN0cmwgfD0gVElPQ01fUkk7CisJaWYgKHZhbCAmIFVBUlRfRVhUSU5QX0NUU19NQVNLKQorCQltY3RybCB8PSBUSU9DTV9DVFM7CisJaWYgKHZhbCAmIFVBUlRfRVhUSU5QX0RDRF9NQVNLKQorCQltY3RybCB8PSBUSU9DTV9DRDsKKwlpZiAodmFsICYgVUFSVF9FWFRJTlBfRFNSX01BU0spCisJCW1jdHJsIHw9IFRJT0NNX0RTUjsKKwlyZXR1cm4gbWN0cmw7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGRpc2FibGUgdHggQVNBUCAodXNlZCBmb3IgZmxvdyBjb250cm9sKQorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJdmFsICY9IH4oVUFSVF9DVExfVFhFTl9NQVNLKTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCXZhbCAmPSB+VUFSVF9UWF9JTlRfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0lSX1JFRyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIChyZSllbmFibGUgdHgKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCXZhbCB8PSBVQVJUX1RYX0lOVF9NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfSVJfUkVHKTsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJdmFsIHw9IFVBUlRfQ1RMX1RYRU5fTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBzdG9wIHJ4LCBjYWxsZWQgYmVmb3JlIHBvcnQgc2h1dGRvd24KKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJdmFsICY9IH5VQVJUX1JYX0lOVF9NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfSVJfUkVHKTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gZW5hYmxlIG1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgcmVwb3J0aW5nCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2VuYWJsZV9tcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJdmFsIHw9IFVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0lSX1JFRyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIHN0YXJ0L3N0b3AgZW1pdHRpbmcgYnJlYWsgY2hhcgorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGN0bCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwlpZiAoY3RsKQorCQl2YWwgfD0gVUFSVF9DVExfWE1JVEJSS19NQVNLOworCWVsc2UKKwkJdmFsICY9IH5VQVJUX0NUTF9YTUlUQlJLX01BU0s7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9DVExfUkVHKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIHJldHVybiBwb3J0IHR5cGUgaW4gc3RyaW5nIGZvcm1hdAorICovCitzdGF0aWMgY29uc3QgY2hhciAqYmNtX3VhcnRfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiAocG9ydC0+dHlwZSA9PSBQT1JUX0JDTTYzWFgpID8gImJjbTYzeHhfdWFydCIgOiBOVUxMOworfQorCisvKgorICogcmVhZCBhbGwgY2hhcnMgaW4gcnggZmlmbyBhbmQgc2VuZCB0aGVtIHRvIGNvcmUKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZG9fcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGludCBtYXhfY291bnQ7CisKKwkvKiBsaW1pdCBudW1iZXIgb2YgY2hhciByZWFkIGluIGludGVycnVwdCwgc2hvdWxkIG5vdCBiZQorCSAqIGhpZ2hlciB0aGFuIGZpZm8gc2l6ZSBhbnl3YXkgc2luY2Ugd2UncmUgbXVjaCBmYXN0ZXIgdGhhbgorCSAqIHNlcmlhbCBwb3J0ICovCisJbWF4X2NvdW50ID0gMzI7CisJdHR5ID0gcG9ydC0+aW5mby0+cG9ydC50dHk7CisJZG8geworCQl1bnNpZ25lZCBpbnQgaWVzdGF0LCBjLCBjc3RhdDsKKwkJY2hhciBmbGFnOworCisJCS8qIGdldCBvdmVycnVuL2ZpZm8gZW1wdHkgaW5mb3JtYXRpb24gZnJvbSBpZXIKKwkJICogcmVnaXN0ZXIgKi8KKwkJaWVzdGF0ID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCQlpZiAoIShpZXN0YXQgJiBVQVJUX0lSX1NUQVQoVUFSVF9JUl9SWE5PVEVNUFRZKSkpCisJCQlicmVhazsKKworCQljc3RhdCA9IGMgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0ZJRk9fUkVHKTsKKwkJcG9ydC0+aWNvdW50LnJ4Kys7CisJCWZsYWcgPSBUVFlfTk9STUFMOworCQljICY9IDB4ZmY7CisKKwkJaWYgKHVubGlrZWx5KChjc3RhdCAmIFVBUlRfRklGT19BTllFUlJfTUFTSykpKSB7CisJCQkvKiBkbyBzdGF0cyBmaXJzdCAqLworCQkJaWYgKGNzdGF0ICYgVUFSVF9GSUZPX0JSS0RFVF9NQVNLKSB7CisJCQkJcG9ydC0+aWNvdW50LmJyaysrOworCQkJCWlmICh1YXJ0X2hhbmRsZV9icmVhayhwb3J0KSkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChjc3RhdCAmIFVBUlRfRklGT19QQVJFUlJfTUFTSykKKwkJCQlwb3J0LT5pY291bnQucGFyaXR5Kys7CisJCQlpZiAoY3N0YXQgJiBVQVJUX0ZJRk9fRlJBTUVFUlJfTUFTSykKKwkJCQlwb3J0LT5pY291bnQuZnJhbWUrKzsKKworCQkJLyogdXBkYXRlIGZsYWcgd3J0IHJlYWRfc3RhdHVzX21hc2sgKi8KKwkJCWNzdGF0ICY9IHBvcnQtPnJlYWRfc3RhdHVzX21hc2s7CisJCQlpZiAoY3N0YXQgJiBVQVJUX0ZJRk9fQlJLREVUX01BU0spCisJCQkJZmxhZyA9IFRUWV9CUkVBSzsKKwkJCWlmIChjc3RhdCAmIFVBUlRfRklGT19GUkFNRUVSUl9NQVNLKQorCQkJCWZsYWcgPSBUVFlfRlJBTUU7CisJCQlpZiAoY3N0YXQgJiBVQVJUX0ZJRk9fUEFSRVJSX01BU0spCisJCQkJZmxhZyA9IFRUWV9QQVJJVFk7CisJCX0KKworCQlpZiAodWFydF9oYW5kbGVfc3lzcnFfY2hhcihwb3J0LCBjKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh1bmxpa2VseShpZXN0YXQgJiBVQVJUX0lSX1NUQVQoVUFSVF9JUl9SWE9WRVIpKSkgeworCQkJcG9ydC0+aWNvdW50Lm92ZXJydW4rKzsKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCQl9CisKKwkJaWYgKChjc3RhdCAmIHBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzaykgPT0gMCkKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgYywgZmxhZyk7CisKKwl9IHdoaWxlICgtLW1heF9jb3VudCk7CisKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworfQorCisvKgorICogZmlsbCB0eCBmaWZvIHdpdGggY2hhcnMgdG8gc2VuZCwgc3RvcCB3aGVuIGZpZm8gaXMgYWJvdXQgdG8gYmUgZnVsbAorICogb3Igd2hlbiBhbGwgY2hhcnMgaGF2ZSBiZWVuIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2RvX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0OworCXVuc2lnbmVkIGludCB2YWwsIG1heF9jb3VudDsKKworCWlmIChwb3J0LT54X2NoYXIpIHsKKwkJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHBvcnQtPnhfY2hhciwgVUFSVF9GSUZPX1JFRyk7CisJCXBvcnQtPmljb3VudC50eCsrOworCQlwb3J0LT54X2NoYXIgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHVhcnRfdHhfc3RvcHBlZChwb3J0KSkgeworCQliY21fdWFydF9zdG9wX3R4KHBvcnQpOworCQlyZXR1cm47CisJfQorCisJeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCisJCWdvdG8gdHhxX2VtcHR5OworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9NQ1RMX1JFRyk7CisJdmFsID0gKHZhbCAmIFVBUlRfTUNUTF9UWEZJRk9GSUxMX01BU0spID4+IFVBUlRfTUNUTF9UWEZJRk9GSUxMX1NISUZUOworCW1heF9jb3VudCA9IHBvcnQtPmZpZm9zaXplIC0gdmFsOworCisJd2hpbGUgKG1heF9jb3VudC0tKSB7CisJCXVuc2lnbmVkIGludCBjOworCisJCWMgPSB4bWl0LT5idWZbeG1pdC0+dGFpbF07CisJCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBjLCBVQVJUX0ZJRk9fUkVHKTsKKwkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwkJcG9ydC0+aWNvdW50LnR4Kys7CisJCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworCisJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKKwkJZ290byB0eHFfZW1wdHk7CisJcmV0dXJuOworCit0eHFfZW1wdHk6CisJLyogbm90aGluZyB0byBzZW5kLCBkaXNhYmxlIHRyYW5zbWl0IGludGVycnVwdCAqLworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfSVJfUkVHKTsKKwl2YWwgJj0gflVBUlRfVFhfSU5UX01BU0s7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9JUl9SRUcpOworCXJldHVybjsKK30KKworLyoKKyAqIHByb2Nlc3MgdWFydCBpbnRlcnJ1cHQKKyAqLworc3RhdGljIGlycXJldHVybl90IGJjbV91YXJ0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBpbnQgaXJxc3RhdDsKKworCXBvcnQgPSBkZXZfaWQ7CisJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKworCWlycXN0YXQgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJaWYgKGlycXN0YXQgJiBVQVJUX1JYX0lOVF9TVEFUKQorCQliY21fdWFydF9kb19yeChwb3J0KTsKKworCWlmIChpcnFzdGF0ICYgVUFSVF9UWF9JTlRfU1RBVCkKKwkJYmNtX3VhcnRfZG9fdHgocG9ydCk7CisKKwlpZiAoaXJxc3RhdCAmIFVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKSkgeworCQl1bnNpZ25lZCBpbnQgZXN0YXQ7CisKKwkJZXN0YXQgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0VYVElOUF9SRUcpOworCQlpZiAoZXN0YXQgJiBVQVJUX0VYVElOUF9JUlNUQVQoVUFSVF9FWFRJTlBfSVJfQ1RTKSkKKwkJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UocG9ydCwKKwkJCQkJICAgICAgIGVzdGF0ICYgVUFSVF9FWFRJTlBfQ1RTX01BU0spOworCQlpZiAoZXN0YXQgJiBVQVJUX0VYVElOUF9JUlNUQVQoVUFSVF9FWFRJTlBfSVJfRENEKSkKKwkJCXVhcnRfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwKKwkJCQkJICAgICAgIGVzdGF0ICYgVUFSVF9FWFRJTlBfRENEX01BU0spOworCX0KKworCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBlbmFibGUgcnggJiB0eCBvcGVyYXRpb24gb24gdWFydAorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9lbmFibGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwl2YWwgfD0gKFVBUlRfQ1RMX0JSR0VOX01BU0sgfCBVQVJUX0NUTF9UWEVOX01BU0sgfCBVQVJUX0NUTF9SWEVOX01BU0spOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7Cit9CisKKy8qCisgKiBkaXNhYmxlIHJ4ICYgdHggb3BlcmF0aW9uIG9uIHVhcnQKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZGlzYWJsZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0NUTF9SRUcpOworCXZhbCAmPSB+KFVBUlRfQ1RMX0JSR0VOX01BU0sgfCBVQVJUX0NUTF9UWEVOX01BU0sgfAorCQkgVUFSVF9DVExfUlhFTl9NQVNLKTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworfQorCisvKgorICogY2xlYXIgYWxsIHVucmVhZCBkYXRhIGluIHJ4IGZpZm8gYW5kIHVuc2VudCBkYXRhIGluIHR4IGZpZm8KKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZmx1c2goc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyogZW1wdHkgcnggYW5kIHR4IGZpZm8gKi8KKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0NUTF9SRUcpOworCXZhbCB8PSBVQVJUX0NUTF9SU1RSWEZJRk9fTUFTSyB8IFVBUlRfQ1RMX1JTVFRYRklGT19NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7CisKKwkvKiByZWFkIGFueSBwZW5kaW5nIGNoYXIgdG8gbWFrZSBzdXJlIGFsbCBpcnEgc3RhdHVzIGFyZQorCSAqIGNsZWFyZWQgKi8KKwkodm9pZCliY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0ZJRk9fUkVHKTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gaW5pdGlhbGl6ZSB1YXJ0IGFuZCBzdGFydCByeCBvcGVyYXRpb24KKyAqLworc3RhdGljIGludCBiY21fdWFydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcmV0OworCisJLyogbWFzayBhbGwgaXJxIGFuZCBmbHVzaCBwb3J0ICovCisJYmNtX3VhcnRfZGlzYWJsZShwb3J0KTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgMCwgVUFSVF9JUl9SRUcpOworCWJjbV91YXJ0X2ZsdXNoKHBvcnQpOworCisJLyogY2xlYXIgYW55IHBlbmRpbmcgZXh0ZXJuYWwgaW5wdXQgaW50ZXJydXB0ICovCisJKHZvaWQpYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9FWFRJTlBfUkVHKTsKKworCS8qIHNldCByeC90eCBmaWZvIHRocmVzaCB0byBmaWZvIGhhbGYgc2l6ZSAqLworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfTUNUTF9SRUcpOworCXZhbCAmPSB+KFVBUlRfTUNUTF9SWEZJRk9USFJFU0hfTUFTSyB8IFVBUlRfTUNUTF9UWEZJRk9USFJFU0hfTUFTSyk7CisJdmFsIHw9IChwb3J0LT5maWZvc2l6ZSAvIDIpIDw8IFVBUlRfTUNUTF9SWEZJRk9USFJFU0hfU0hJRlQ7CisJdmFsIHw9IChwb3J0LT5maWZvc2l6ZSAvIDIpIDw8IFVBUlRfTUNUTF9UWEZJRk9USFJFU0hfU0hJRlQ7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9NQ1RMX1JFRyk7CisKKwkvKiBzZXQgcnggZmlmbyB0aW1lb3V0IHRvIDEgY2hhciB0aW1lICovCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwl2YWwgJj0gflVBUlRfQ1RMX1JYVE1PVVRDTlRfTUFTSzsKKwl2YWwgfD0gMSA8PCBVQVJUX0NUTF9SWFRNT1VUQ05UX1NISUZUOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7CisKKwkvKiByZXBvcnQgYW55IGVkZ2Ugb24gZGNkIGFuZCBjdHMgKi8KKwl2YWwgPSBVQVJUX0VYVElOUF9JTlRfTUFTSzsKKwl2YWwgfD0gVUFSVF9FWFRJTlBfRENEX05PU0VOU0VfTUFTSzsKKwl2YWwgfD0gVUFSVF9FWFRJTlBfQ1RTX05PU0VOU0VfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0VYVElOUF9SRUcpOworCisJLyogcmVnaXN0ZXIgaXJxIGFuZCBlbmFibGUgcnggaW50ZXJydXB0cyAqLworCXJldCA9IHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgYmNtX3VhcnRfaW50ZXJydXB0LCAwLAorCQkJICBiY21fdWFydF90eXBlKHBvcnQpLCBwb3J0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBVQVJUX1JYX0lOVF9NQVNLLCBVQVJUX0lSX1JFRyk7CisJYmNtX3VhcnRfZW5hYmxlKHBvcnQpOworCXJldHVybiAwOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBmbHVzaCAmIGRpc2FibGUgdWFydAorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCAwLCBVQVJUX0lSX1JFRyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJYmNtX3VhcnRfZGlzYWJsZShwb3J0KTsKKwliY21fdWFydF9mbHVzaChwb3J0KTsKKwlmcmVlX2lycShwb3J0LT5pcnEsIHBvcnQpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBjaGFuZ2UgY3VycmVudCB1YXJ0IHNldHRpbmcKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkgc3RydWN0IGt0ZXJtaW9zICpuZXcsCisJCQkJIHN0cnVjdCBrdGVybWlvcyAqb2xkKQoreworCXVuc2lnbmVkIGludCBjdGwsIGJhdWQsIHF1b3QsIGllcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCS8qIGRpc2FibGUgdWFydCB3aGlsZSBjaGFuZ2luZyBzcGVlZCAqLworCWJjbV91YXJ0X2Rpc2FibGUocG9ydCk7CisJYmNtX3VhcnRfZmx1c2gocG9ydCk7CisKKwkvKiB1cGRhdGUgQ29udHJvbCByZWdpc3RlciAqLworCWN0bCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJY3RsICY9IH5VQVJUX0NUTF9CSVRTUEVSU1lNX01BU0s7CisKKwlzd2l0Y2ggKG5ldy0+Y19jZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzU6CisJCWN0bCB8PSAoMCA8PCBVQVJUX0NUTF9CSVRTUEVSU1lNX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCWN0bCB8PSAoMSA8PCBVQVJUX0NUTF9CSVRTUEVSU1lNX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCWN0bCB8PSAoMiA8PCBVQVJUX0NUTF9CSVRTUEVSU1lNX1NISUZUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3RsIHw9ICgzIDw8IFVBUlRfQ1RMX0JJVFNQRVJTWU1fU0hJRlQpOworCQlicmVhazsKKwl9CisKKwljdGwgJj0gflVBUlRfQ1RMX1NUT1BCSVRTX01BU0s7CisJaWYgKG5ldy0+Y19jZmxhZyAmIENTVE9QQikKKwkJY3RsIHw9IFVBUlRfQ1RMX1NUT1BCSVRTXzI7CisJZWxzZQorCQljdGwgfD0gVUFSVF9DVExfU1RPUEJJVFNfMTsKKworCWN0bCAmPSB+KFVBUlRfQ1RMX1JYUEFSRU5fTUFTSyB8IFVBUlRfQ1RMX1RYUEFSRU5fTUFTSyk7CisJaWYgKG5ldy0+Y19jZmxhZyAmIFBBUkVOQikKKwkJY3RsIHw9IChVQVJUX0NUTF9SWFBBUkVOX01BU0sgfCBVQVJUX0NUTF9UWFBBUkVOX01BU0spOworCWN0bCAmPSB+KFVBUlRfQ1RMX1JYUEFSRVZFTl9NQVNLIHwgVUFSVF9DVExfVFhQQVJFVkVOX01BU0spOworCWlmIChuZXctPmNfY2ZsYWcgJiBQQVJPREQpCisJCWN0bCB8PSAoVUFSVF9DVExfUlhQQVJFVkVOX01BU0sgfCBVQVJUX0NUTF9UWFBBUkVWRU5fTUFTSyk7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIGN0bCwgVUFSVF9DVExfUkVHKTsKKworCS8qIHVwZGF0ZSBCYXVkd29yZCByZWdpc3RlciAqLworCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgbmV3LCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsgLyAxNik7CisJcXVvdCA9IHVhcnRfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCkgLSAxOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBxdW90LCBVQVJUX0JBVURfUkVHKTsKKworCS8qIHVwZGF0ZSBJbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKwlpZXIgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisKKwlpZXIgJj0gflVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKTsKKwlpZiAoVUFSVF9FTkFCTEVfTVMocG9ydCwgbmV3LT5jX2NmbGFnKSkKKwkJaWVyIHw9IFVBUlRfSVJfTUFTSyhVQVJUX0lSX0VYVElQKTsKKworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBpZXIsIFVBUlRfSVJfUkVHKTsKKworCS8qIHVwZGF0ZSByZWFkL2lnbm9yZSBtYXNrICovCisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IFVBUlRfRklGT19WQUxJRF9NQVNLOworCWlmIChuZXctPmNfaWZsYWcgJiBJTlBDSykgeworCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19GUkFNRUVSUl9NQVNLOworCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19QQVJFUlJfTUFTSzsKKwl9CisJaWYgKG5ldy0+Y19pZmxhZyAmIChCUktJTlQpKQorCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19CUktERVRfTUFTSzsKKworCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayA9IDA7CisJaWYgKG5ldy0+Y19pZmxhZyAmIElHTlBBUikKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19QQVJFUlJfTUFTSzsKKwlpZiAobmV3LT5jX2lmbGFnICYgSUdOQlJLKQorCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gVUFSVF9GSUZPX0JSS0RFVF9NQVNLOworCWlmICghKG5ldy0+Y19jZmxhZyAmIENSRUFEKSkKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfRklGT19WQUxJRF9NQVNLOworCisJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCBuZXctPmNfY2ZsYWcsIGJhdWQpOworCWJjbV91YXJ0X2VuYWJsZShwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGNsYWltIHVhcnQgaW9tZW0KKyAqLworc3RhdGljIGludCBiY21fdWFydF9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCXNpemUgPSBSU0VUX1VBUlRfU0laRTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBzaXplLCAiYmNtNjN4eCIpKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiTWVtb3J5IHJlZ2lvbiBidXN5XG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlwb3J0LT5tZW1iYXNlID0gaW9yZW1hcChwb3J0LT5tYXBiYXNlLCBzaXplKTsKKwlpZiAoIXBvcnQtPm1lbWJhc2UpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJVbmFibGUgdG8gbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBzaXplKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIHJlbGVhc2UgdWFydCBpb21lbQorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZWxlYXNlX21lbV9yZWdpb24ocG9ydC0+bWFwYmFzZSwgUlNFVF9VQVJUX1NJWkUpOworCWlvdW5tYXAocG9ydC0+bWVtYmFzZSk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGRvIGFueSBwb3J0IHJlcXVpcmVkIGF1dG9jb25maWd1cmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2NvbmZpZ19wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBVQVJUX0NPTkZJR19UWVBFKSB7CisJCWlmIChiY21fdWFydF9yZXF1ZXN0X3BvcnQocG9ydCkpCisJCQlyZXR1cm47CisJCXBvcnQtPnR5cGUgPSBQT1JUX0JDTTYzWFg7CisJfQorfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBjaGVjayB0aGF0IHBvcnQgaW5mb3JtYXRpb24gaW4gc2VyaW5mbyBhcmUKKyAqIHN1aXRhYmxlCisgKi8KK3N0YXRpYyBpbnQgYmNtX3VhcnRfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyaW5mbykKK3sKKwlpZiAocG9ydC0+dHlwZSAhPSBQT1JUX0JDTTYzWFgpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwb3J0LT5pcnEgIT0gc2VyaW5mby0+aXJxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocG9ydC0+aW90eXBlICE9IHNlcmluZm8tPmlvX3R5cGUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwb3J0LT5tYXBiYXNlICE9ICh1bnNpZ25lZCBsb25nKXNlcmluZm8tPmlvbWVtX2Jhc2UpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCisvKiBzZXJpYWwgY29yZSBjYWxsYmFja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgYmNtX3VhcnRfb3BzID0geworCS50eF9lbXB0eQk9IGJjbV91YXJ0X3R4X2VtcHR5LAorCS5nZXRfbWN0cmwJPSBiY21fdWFydF9nZXRfbWN0cmwsCisJLnNldF9tY3RybAk9IGJjbV91YXJ0X3NldF9tY3RybCwKKwkuc3RhcnRfdHgJPSBiY21fdWFydF9zdGFydF90eCwKKwkuc3RvcF90eAk9IGJjbV91YXJ0X3N0b3BfdHgsCisJLnN0b3BfcngJPSBiY21fdWFydF9zdG9wX3J4LAorCS5lbmFibGVfbXMJPSBiY21fdWFydF9lbmFibGVfbXMsCisJLmJyZWFrX2N0bAk9IGJjbV91YXJ0X2JyZWFrX2N0bCwKKwkuc3RhcnR1cAk9IGJjbV91YXJ0X3N0YXJ0dXAsCisJLnNodXRkb3duCT0gYmNtX3VhcnRfc2h1dGRvd24sCisJLnNldF90ZXJtaW9zCT0gYmNtX3VhcnRfc2V0X3Rlcm1pb3MsCisJLnR5cGUJCT0gYmNtX3VhcnRfdHlwZSwKKwkucmVsZWFzZV9wb3J0CT0gYmNtX3VhcnRfcmVsZWFzZV9wb3J0LAorCS5yZXF1ZXN0X3BvcnQJPSBiY21fdWFydF9yZXF1ZXN0X3BvcnQsCisJLmNvbmZpZ19wb3J0CT0gYmNtX3VhcnRfY29uZmlnX3BvcnQsCisJLnZlcmlmeV9wb3J0CT0gYmNtX3VhcnRfdmVyaWZ5X3BvcnQsCit9OworCisKKworI2lmZGVmIENPTkZJR19TRVJJQUxfQkNNNjNYWF9DT05TT0xFCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfeG1pdHIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1vdXQ7CisKKwkvKiBXYWl0IHVwIHRvIDEwbXMgZm9yIHRoZSBjaGFyYWN0ZXIocykgdG8gYmUgc2VudC4gKi8KKwl0bW91dCA9IDEwMDAwOworCXdoaWxlICgtLXRtb3V0KSB7CisJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCQlpZiAodmFsICYgVUFSVF9JUl9TVEFUKFVBUlRfSVJfVFhFTVBUWSkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0KKworCS8qIFdhaXQgdXAgdG8gMXMgZm9yIGZsb3cgY29udHJvbCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAocG9ydC0+ZmxhZ3MgJiBVUEZfQ09OU19GTE9XKSB7CisJCXRtb3V0ID0gMTAwMDAwMDsKKwkJd2hpbGUgKC0tdG1vdXQpIHsKKwkJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfRVhUSU5QX1JFRyk7CisJCQlpZiAodmFsICYgVUFSVF9FWFRJTlBfQ1RTX01BU0spCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoMSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBvdXRwdXQgZ2l2ZW4gY2hhcgorICovCitzdGF0aWMgdm9pZCBiY21fY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKK3sKKwl3YWl0X2Zvcl94bWl0cihwb3J0KTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgY2gsIFVBUlRfRklGT19SRUcpOworfQorCisvKgorICogY29uc29sZSBjb3JlIHJlcXVlc3QgdG8gb3V0cHV0IGdpdmVuIHN0cmluZworICovCitzdGF0aWMgdm9pZCBiY21fY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBsb2NrZWQ7CisKKwlwb3J0ID0gJnBvcnRzW2NvLT5pbmRleF07CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKHBvcnQtPnN5c3JxKSB7CisJCS8qIGJjbV91YXJ0X2ludGVycnVwdCgpIGFscmVhZHkgdG9vayB0aGUgbG9jayAqLworCQlsb2NrZWQgPSAwOworCX0gZWxzZSBpZiAob29wc19pbl9wcm9ncmVzcykgeworCQlsb2NrZWQgPSBzcGluX3RyeWxvY2soJnBvcnQtPmxvY2spOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7CisJCWxvY2tlZCA9IDE7CisJfQorCisJLyogY2FsbCBoZWxwZXIgdG8gZGVhbCB3aXRoIFxyXG4gKi8KKwl1YXJ0X2NvbnNvbGVfd3JpdGUocG9ydCwgcywgY291bnQsIGJjbV9jb25zb2xlX3B1dGNoYXIpOworCisJLyogYW5kIHdhaXQgZm9yIGNoYXIgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKwl3YWl0X2Zvcl94bWl0cihwb3J0KTsKKworCWlmIChsb2NrZWQpCisJCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBjb25zb2xlIGNvcmUgcmVxdWVzdCB0byBzZXR1cCBnaXZlbiBjb25zb2xlLCBmaW5kIG1hdGNoaW5nIHVhcnQKKyAqIHBvcnQgYW5kIHNldHVwIGl0LgorICovCitzdGF0aWMgaW50IGJjbV9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCWludCBiYXVkID0gOTYwMDsKKwlpbnQgYml0cyA9IDg7CisJaW50IHBhcml0eSA9ICduJzsKKwlpbnQgZmxvdyA9ICduJzsKKworCWlmIChjby0+aW5kZXggPCAwIHx8IGNvLT5pbmRleCA+PSBCQ002M1hYX05SX1VBUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwb3J0ID0gJnBvcnRzW2NvLT5pbmRleF07CisJaWYgKCFwb3J0LT5tZW1iYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAob3B0aW9ucykKKwkJdWFydF9wYXJzZV9vcHRpb25zKG9wdGlvbnMsICZiYXVkLCAmcGFyaXR5LCAmYml0cywgJmZsb3cpOworCisJcmV0dXJuIHVhcnRfc2V0X29wdGlvbnMocG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgYmNtX3VhcnRfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgYmNtNjN4eF9jb25zb2xlID0geworCS5uYW1lCQk9ICJ0dHlTIiwKKwkud3JpdGUJCT0gYmNtX2NvbnNvbGVfd3JpdGUsCisJLmRldmljZQkJPSB1YXJ0X2NvbnNvbGVfZGV2aWNlLAorCS5zZXR1cAkJPSBiY21fY29uc29sZV9zZXR1cCwKKwkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleAkJPSAtMSwKKwkuZGF0YQkJPSAmYmNtX3VhcnRfZHJpdmVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmNtNjN4eF9jb25zb2xlX2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9jb25zb2xlKCZiY202M3h4X2NvbnNvbGUpOworCXJldHVybiAwOworfQorCitjb25zb2xlX2luaXRjYWxsKGJjbTYzeHhfY29uc29sZV9pbml0KTsKKworI2RlZmluZSBCQ002M1hYX0NPTlNPTEUJKCZiY202M3h4X2NvbnNvbGUpCisjZWxzZQorI2RlZmluZSBCQ002M1hYX0NPTlNPTEUJTlVMTAorI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfQkNNNjNYWF9DT05TT0xFICovCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgYmNtX3VhcnRfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZHJpdmVyX25hbWUJPSAiYmNtNjN4eF91YXJ0IiwKKwkuZGV2X25hbWUJPSAidHR5UyIsCisJLm1ham9yCQk9IFRUWV9NQUpPUiwKKwkubWlub3IJCT0gNjQsCisJLm5yCQk9IDEsCisJLmNvbnMJCT0gQkNNNjNYWF9DT05TT0xFLAorfTsKKworLyoKKyAqIHBsYXRmb3JtIGRyaXZlciBwcm9iZS9yZW1vdmUgY2FsbGJhY2sKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgYmNtX3VhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19tZW0sICpyZXNfaXJxOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisJc3RydWN0IGNsayAqY2xrOworCWludCByZXQ7CisKKwlpZiAocGRldi0+aWQgPCAwIHx8IHBkZXYtPmlkID49IEJDTTYzWFhfTlJfVUFSVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBvcnRzW3BkZXYtPmlkXS5tZW1iYXNlKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmVzX21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXNfbWVtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlc19pcnEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghcmVzX2lycSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwZXJpcGgiKTsKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybiAtRU5PREVWOworCisJcG9ydCA9ICZwb3J0c1twZGV2LT5pZF07CisJbWVtc2V0KHBvcnQsIDAsIHNpemVvZigqcG9ydCkpOworCXBvcnQtPmlvdHlwZSA9IFVQSU9fTUVNOworCXBvcnQtPm1hcGJhc2UgPSByZXNfbWVtLT5zdGFydDsKKwlwb3J0LT5pcnEgPSByZXNfaXJxLT5zdGFydDsKKwlwb3J0LT5vcHMgPSAmYmNtX3VhcnRfb3BzOworCXBvcnQtPmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkY7CisJcG9ydC0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwb3J0LT5maWZvc2l6ZSA9IDE2OworCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKSAvIDI7CisJY2xrX3B1dChjbGspOworCisJcmV0ID0gdWFydF9hZGRfb25lX3BvcnQoJmJjbV91YXJ0X2RyaXZlciwgcG9ydCk7CisJaWYgKHJldCkgeworCQlrZnJlZShwb3J0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcG9ydCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGJjbV91YXJ0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisKKwlwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdWFydF9yZW1vdmVfb25lX3BvcnQoJmJjbV91YXJ0X2RyaXZlciwgcG9ydCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJLyogbWFyayBwb3J0IGFzIGZyZWUgKi8KKwlwb3J0c1twZGV2LT5pZF0ubWVtYmFzZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwbGF0Zm9ybSBkcml2ZXIgc3R1ZmYKKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmNtX3VhcnRfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZQk9IGJjbV91YXJ0X3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChiY21fdWFydF9yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSAgPSAiYmNtNjN4eF91YXJ0IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmNtX3VhcnRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmYmNtX3VhcnRfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiY21fdWFydF9wbGF0Zm9ybV9kcml2ZXIpOworCWlmIChyZXQpCisJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJjbV91YXJ0X2RyaXZlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmNtX3VhcnRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZiY21fdWFydF9wbGF0Zm9ybV9kcml2ZXIpOworCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJjbV91YXJ0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGJjbV91YXJ0X2luaXQpOworbW9kdWxlX2V4aXQoYmNtX3VhcnRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1heGltZSBCaXpvbiA8bWJpem9uQGZyZWVib3guZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIDYzPHh4IGludGVncmF0ZWQgdWFydCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCA4ZDM0OWIyMy4uMzAwY2VhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJdTggKnA7CiAJaW50IGNvdW50OwogCXN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbyA9IChzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqKXBvcnQ7Ci0Jc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OwogCiAJLyogSGFuZGxlIHhvbi94b2ZmICovCiAJaWYgKHBvcnQtPnhfY2hhcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jIGIvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCmluZGV4IDdiZTUyZmUuLjMxZjE3MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMgYi9kcml2ZXJzL3NlcmlhbC9pY29tLmMKaW5kZXggMmQ3ZmVlYy4uMDAyOGI2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaWNvbS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2ljb20uYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJaWYgKHBvcnQgPCA0KSB7CiAJCXRlbXAgPSByZWFkbChzdG9wX3Byb2NbcG9ydF0uZ2xvYmFsX2NvbnRyb2xfcmVnKTsKIAkJdGVtcCA9Ci0JICAgIAkJKHRlbXAgJiB+c3RhcnRfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQpIHwgc3RvcF9wcm9jW3BvcnRdLnByb2Nlc3Nvcl9pZDsKKwkJCSh0ZW1wICYgfnN0YXJ0X3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkKSB8IHN0b3BfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQ7CiAJCXdyaXRlbCh0ZW1wLCBzdG9wX3Byb2NbcG9ydF0uZ2xvYmFsX2NvbnRyb2xfcmVnKTsKIAogCQkvKiB3cml0ZSBmbHVzaCAqLwpAQCAtMzM2LDcgKzMzNiw3IEBACiAJaWYgKHBvcnQgPCA0KSB7CiAJCXRlbXAgPSByZWFkbChzdGFydF9wcm9jW3BvcnRdLmdsb2JhbF9jb250cm9sX3JlZyk7CiAJCXRlbXAgPQotCSAgICAJCSh0ZW1wICYgfnN0b3BfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQpIHwgc3RhcnRfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQ7CisJCQkodGVtcCAmIH5zdG9wX3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkKSB8IHN0YXJ0X3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkOwogCQl3cml0ZWwodGVtcCwgc3RhcnRfcHJvY1twb3J0XS5nbG9iYWxfY29udHJvbF9yZWcpOwogCiAJCS8qIHdyaXRlIGZsdXNoICovCkBAIC01MDksOCArNTA5LDggQEAKIAkJZGV2X2VycigmaWNvbV9wb3J0LT5hZGFwdGVyLT5wY2lfZGV2LT5kZXYsIlBvcnQgbm90IG9wZXJ0aW9uYWxcbiIpOwogCX0KIAotICAgICAgaWYgKG5ld19wYWdlICE9IE5VTEwpCi0JICAgICAgcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIDQwOTYsIG5ld19wYWdlLCB0ZW1wX3BjaSk7CisJaWYgKG5ld19wYWdlICE9IE5VTEwpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCA0MDk2LCBuZXdfcGFnZSwgdGVtcF9wY2kpOwogfQogCiBzdGF0aWMgaW50IHN0YXJ0dXAoc3RydWN0IGljb21fcG9ydCAqaWNvbV9wb3J0KQpAQCAtMTQ5MywxNSArMTQ5MywxNSBAQAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IGluZGV4OwotICAgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9yZWc7Ci0gICAgICAgIGludCByZXR2YWw7Ci0gICAgICAgIHN0cnVjdCBpY29tX2FkYXB0ZXIgKmljb21fYWRhcHRlcjsKLSAgICAgICAgc3RydWN0IGljb21fcG9ydCAqaWNvbV9wb3J0OworCXVuc2lnbmVkIGludCBjb21tYW5kX3JlZzsKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBpY29tX2FkYXB0ZXIgKmljb21fYWRhcHRlcjsKKwlzdHJ1Y3QgaWNvbV9wb3J0ICppY29tX3BvcnQ7CiAKLSAgICAgICAgcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKLSAgICAgICAgaWYgKHJldHZhbCkgeworCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIkRldmljZSBlbmFibGUgRkFJTEVEXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworCQlyZXR1cm4gcmV0dmFsOwogCX0KIAogCWlmICggKHJldHZhbCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAiaWNvbSIpKSkgewpAQCAtMTUxMCwyMyArMTUxMCwyMyBAQAogCQkgcmV0dXJuIHJldHZhbDsKIAkgfQogCi0gICAgICAgIHBjaV9zZXRfbWFzdGVyKGRldik7CisJcGNpX3NldF9tYXN0ZXIoZGV2KTsKIAotICAgICAgICBpZiAoIChyZXR2YWwgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmRfcmVnKSkpIHsKKwlpZiAoIChyZXR2YWwgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmRfcmVnKSkpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJQQ0kgQ29uZmlnIHJlYWQgRkFJTEVEXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICB9CisJCXJldHVybiByZXR2YWw7CisJfQogCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DT01NQU5ELAogCQljb21tYW5kX3JlZyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUgogIAkJfCBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSKTsKIAotICAgICAgICBpZiAoZW50LT5kcml2ZXJfZGF0YSA9PSBBREFQVEVSX1YxKSB7CisJaWYgKGVudC0+ZHJpdmVyX2RhdGEgPT0gQURBUFRFUl9WMSkgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0NCwgMHg4MzAwODMwQSk7Ci0JIH0gZWxzZSB7CisJfSBlbHNlIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDQsIDB4NDIwMDQyMDApOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgMHg0MjAwNDIwMCk7Ci0gICAgICAgICB9CisJfQogCiAKIAlyZXR2YWwgPSBpY29tX2FsbG9jX2FkYXB0ZXIoJmljb21fYWRhcHRlcik7CkBAIC0xNTM2LDEwICsxNTM2LDEwIEBACiAJCSBnb3RvIHByb2JlX2V4aXQwOwogCX0KIAotCSBpY29tX2FkYXB0ZXItPmJhc2VfYWRkcl9wY2kgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKLQkgaWNvbV9hZGFwdGVyLT5wY2lfZGV2ID0gZGV2OwotCSBpY29tX2FkYXB0ZXItPnZlcnNpb24gPSBlbnQtPmRyaXZlcl9kYXRhOwotCSBpY29tX2FkYXB0ZXItPnN1YnN5c3RlbV9pZCA9IGVudC0+c3ViZGV2aWNlOworCWljb21fYWRhcHRlci0+YmFzZV9hZGRyX3BjaSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOworCWljb21fYWRhcHRlci0+cGNpX2RldiA9IGRldjsKKwlpY29tX2FkYXB0ZXItPnZlcnNpb24gPSBlbnQtPmRyaXZlcl9kYXRhOworCWljb21fYWRhcHRlci0+c3Vic3lzdGVtX2lkID0gZW50LT5zdWJkZXZpY2U7CiAKIAogCXJldHZhbCA9IGljb21faW5pdF9wb3J0cyhpY29tX2FkYXB0ZXIpOwpAQCAtMTU0OCw3ICsxNTQ4LDcgQEAKIAkJZ290byBwcm9iZV9leGl0MTsKIAl9CiAKLQkgaWNvbV9hZGFwdGVyLT5iYXNlX2FkZHIgPSBwY2lfaW9yZW1hcF9iYXIoZGV2LCAwKTsKKwlpY29tX2FkYXB0ZXItPmJhc2VfYWRkciA9IHBjaV9pb3JlbWFwX2JhcihkZXYsIDApOwogCiAJaWYgKCFpY29tX2FkYXB0ZXItPmJhc2VfYWRkcikKIAkJZ290byBwcm9iZV9leGl0MTsKQEAgLTE1NjIsNyArMTU2Miw3IEBACiAKIAlyZXR2YWwgPSBpY29tX2xvYWRfcG9ydHMoaWNvbV9hZGFwdGVyKTsKIAotICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBpY29tX2FkYXB0ZXItPm51bWJfcG9ydHM7IGluZGV4KyspIHsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBpY29tX2FkYXB0ZXItPm51bWJfcG9ydHM7IGluZGV4KyspIHsKIAkJaWNvbV9wb3J0ID0gJmljb21fYWRhcHRlci0+cG9ydF9pbmZvW2luZGV4XTsKIAogCQlpZiAoaWNvbV9wb3J0LT5zdGF0dXMgPT0gSUNPTV9QT1JUX0FDVElWRSkgewpAQCAtMTU3OSw3ICsxNTc5LDcgQEAKIAkJCQlpY29tX3BvcnQtPnN0YXR1cyA9IElDT01fUE9SVF9PRkY7CiAJCQkJZGV2X2VycigmZGV2LT5kZXYsICJEZXZpY2UgYWRkIGZhaWxlZFxuIik7CiAJCQkgfSBlbHNlCi0JCQkgICAgICAgIGRldl9pbmZvKCZkZXYtPmRldiwgIkRldmljZSBhZGRlZFxuIik7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiRGV2aWNlIGFkZGVkXG4iKTsKIAkJfQogCX0KIApAQCAtMTU5NSw5ICsxNTk1LDcgQEAKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKLQotCisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGljb21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IGQ3YmNkMDcuLjdjZTllOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03MDUsNyArNzA1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoKHNlci0+aXJxICE9IHBvcnQtPmlycSkgfHwKLQkgICAgKHNlci0+aW9fdHlwZSAhPSBTRVJJQUxfSU9fTUVNKSB8fAorCSAgICAoc2VyLT5pb190eXBlICE9IFVQSU9fTUVNKSB8fAogCSAgICAoc2VyLT5iYXVkX2Jhc2UgIT0gcG9ydC0+dWFydGNsaykgIHx8CiAJICAgIChzZXItPmlvbWVtX2Jhc2UgIT0gKHZvaWQgKilwb3J0LT5tYXBiYXNlKSB8fAogCSAgICAoc2VyLT5odWI2ICE9IDApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCA2NDQzYjdmLi5iODYyOWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtNzI2LDkgKzcyNiwxMCBAQAogCS5jb25zCQk9IFBYQV9DT05TT0xFLAogfTsKIAotc3RhdGljIGludCBzZXJpYWxfcHhhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNlcmlhbF9weGFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0gICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisgICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAgICAgICAgIGlmIChzcG9ydCkKICAgICAgICAgICAgICAgICB1YXJ0X3N1c3BlbmRfcG9ydCgmc2VyaWFsX3B4YV9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC03MzYsOSArNzM3LDkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3B4YV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBzZXJpYWxfcHhhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0gICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisgICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAgICAgICAgIGlmIChzcG9ydCkKICAgICAgICAgICAgICAgICB1YXJ0X3Jlc3VtZV9wb3J0KCZzZXJpYWxfcHhhX3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTc0Niw2ICs3NDcsMTIgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzZXJpYWxfcHhhX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHNlcmlhbF9weGFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNlcmlhbF9weGFfcmVzdW1lLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IHNlcmlhbF9weGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydDsKQEAgLTgyNSwxMSArODMyLDEyIEBACiAgICAgICAgIC5wcm9iZSAgICAgICAgICA9IHNlcmlhbF9weGFfcHJvYmUsCiAgICAgICAgIC5yZW1vdmUgICAgICAgICA9IHNlcmlhbF9weGFfcmVtb3ZlLAogCi0JLnN1c3BlbmQJPSBzZXJpYWxfcHhhX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzZXJpYWxfcHhhX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkgICAgICAgIC5uYW1lCT0gInB4YTJ4eC11YXJ0IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZzZXJpYWxfcHhhX3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCmluZGV4IDdmNWUyNjguLjIxOTlkODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCkBAIC02MzgsNyArNjM4LDcgQEAKIAlQUFNSIHw9IFBQQ19UWEQxIHwgUFBDX1RYRDM7CiB9CiAKLXZvaWQgX19pbml0IHNhMTEwMF9yZWdpc3Rlcl91YXJ0X2ZucyhzdHJ1Y3Qgc2ExMTAwX3BvcnRfZm5zICpmbnMpCit2b2lkIF9fZGV2aW5pdCBzYTExMDBfcmVnaXN0ZXJfdWFydF9mbnMoc3RydWN0IHNhMTEwMF9wb3J0X2ZucyAqZm5zKQogewogCWlmIChmbnMtPmdldF9tY3RybCkKIAkJc2ExMTAwX3BvcHMuZ2V0X21jdHJsID0gZm5zLT5nZXRfbWN0cmw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwppbmRleCAxNjg5YmRhLi5kY2M3MjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKQEAgLTEyNzAsNiArMTI3MCw5IEBACiAKIAlCVUdfT04oIWtlcm5lbF9sb2NrZWQoKSk7CiAKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm47CisKIAl1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAJcG9ydCA9ICZzdGF0ZS0+cG9ydDsKIApAQCAtMTMxNiw5ICsxMzE5LDkgQEAKIAkgKi8KIAlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXBvcnQtPmxvY2ssIGZsYWdzKTsKIAkJdXBvcnQtPm9wcy0+c3RvcF9yeCh1cG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXBvcnQtPmxvY2ssIGZsYWdzKTsKIAkJLyoKIAkJICogQmVmb3JlIHdlIGRyb3AgRFRSLCBtYWtlIHN1cmUgdGhlIFVBUlQgdHJhbnNtaXR0ZXIKIAkJICogaGFzIGNvbXBsZXRlbHkgZHJhaW5lZDsgdGhpcyBpcyBlc3BlY2lhbGx5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwppbmRleCAwZjdjZjRjLi5jNTBlOWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKQEAgLTIyMSwyMSArMjIxLDI2IEBACiAJCXNpb19vdXQodXAsIFRYWDlfU0lCR1IsIDB4ZmYgfCBUWFg5X1NJQkdSX0JDTEtfVDYpOwogfQogCitzdGF0aWMgc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp0b191YXJ0X3R4eDlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfdHh4OV9wb3J0LCBwb3J0KTsKK30KKwogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJc2lvX21hc2sodXAsIFRYWDlfU0lESUNSLCBUWFg5X1NJRElDUl9USUUpOwogfQogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJc2lvX3NldCh1cCwgVFhYOV9TSURJQ1IsIFRYWDlfU0lESUNSX1RJRSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVwLT5wb3J0LnJlYWRfc3RhdHVzX21hc2sgJj0gflRYWDlfU0lESVNSX1JESVM7CiB9CiAKQEAgLTI0Niw3ICsyNTEsNyBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9pbml0aWFsaXplKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBpbnQgdG1vdXQgPSAxMDAwMDsKIAogCXNpb19vdXQodXAsIFRYWDlfU0lGQ1IsIFRYWDlfU0lGQ1JfU1dSU1QpOwpAQCAtNDE0LDcgKzQxOSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsX3R4eDlfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHJldDsKIApAQCAtNDI3LDcgKzQzMiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsX3R4eDlfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCiAJLyogbm8gbW9kZW0gY29udHJvbCBsaW5lcyAqLwpAQCAtNDQwLDcgKzQ0NSw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAogCWlmIChtY3RybCAmIFRJT0NNX1JUUykKIAkJc2lvX21hc2sodXAsIFRYWDlfU0lGTENSLCBUWFg5X1NJRkxDUl9SVFNTQyk7CkBAIC00NTAsNyArNDU1LDcgQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfYnJlYWtfY3RsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwpAQCAtNDk0LDcgKzQ5OSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGllcjsKIAl1bnNpZ25lZCBjaGFyIGM7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAogCS8qCiAJICoJRmlyc3Qgc2F2ZSB0aGUgSUVSIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cwpAQCAtNTIwLDcgKzUyNSw3IEBACiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9wdXRfcG9sbF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgYykKIHsKIAl1bnNpZ25lZCBpbnQgaWVyOwotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAKIAkvKgogCSAqCUZpcnN0IHNhdmUgdGhlIElFUiB0aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMKQEAgLTU1MSw3ICs1NTYsNyBAQAogCiBzdGF0aWMgaW50IHNlcmlhbF90eHg5X3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldHZhbDsKIApAQCAtNTk2LDcgKzYwMSw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3NodXRkb3duKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKQEAgLTYzNiw3ICs2NDEsNyBAQAogc2VyaWFsX3R4eDlfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAogCQkgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBpbnQgY3ZhbCwgZmNyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBiYXVkLCBxdW90OwpAQCAtODE0LDE5ICs4MTksMTkgQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAlzZXJpYWxfdHh4OV9yZWxlYXNlX3Jlc291cmNlKHVwKTsKIH0KIAogc3RhdGljIGludCBzZXJpYWxfdHh4OV9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXJldHVybiBzZXJpYWxfdHh4OV9yZXF1ZXN0X3Jlc291cmNlKHVwKTsKIH0KIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IHVmbGFncykKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCWludCByZXQ7CiAKIAkvKgpAQCAtODk3LDcgKzkwMiw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAogCXdhaXRfZm9yX3htaXRyKHVwKTsKIAlzaW9fb3V0KHVwLCBUWFg5X1NJVEZJRk8sIGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKaW5kZXggODUxMTlmYi4uNjQ5OGJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKQEAgLTExNDMsNyArMTE0Myw3IEBACiAJd2hpbGUgKChzY2lfaW4ocG9ydCwgU0N4U1IpICYgYml0cykgIT0gYml0cykKIAkJY3B1X3JlbGF4KCk7CiAKLQlpZiAoc2NpX3BvcnQtPmRpc2FibGUpOworCWlmIChzY2lfcG9ydC0+ZGlzYWJsZSkKIAkJc2NpX3BvcnQtPmRpc2FibGUocG9ydCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMgYi9kcml2ZXJzL3NmaS9zZmlfY29yZS5jCmluZGV4IGQzYjQ5NjguLmIyMDRhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMKKysrIGIvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYwpAQCAtOTAsNyArOTAsMTEgQEAKICAqLwogc3RhdGljIHUzMiBzZmlfdXNlX2lvcmVtYXAgX19yZWFkX21vc3RseTsKIAotc3RhdGljIHZvaWQgX19pb21lbSAqc2ZpX21hcF9tZW1vcnkodTY0IHBoeXMsIHUzMiBzaXplKQorLyoKKyAqIHNmaV91bi9tYXBfbWVtb3J5IGNhbGxzIGVhcmx5X2lvcmVtYXAvaW91bm1hcCB3aGljaCBpcyBhIF9faW5pdCBmdW5jdGlvbgorICogYW5kIGludHJvZHVjZXMgc2VjdGlvbiBtaXNtYXRjaC4gU28gdXNlIF9fcmVmIHRvIG1ha2UgaXQgY2FsbS4KKyAqLworc3RhdGljIHZvaWQgX19pb21lbSAqIF9fcmVmIHNmaV9tYXBfbWVtb3J5KHU2NCBwaHlzLCB1MzIgc2l6ZSkKIHsKIAlpZiAoIXBoeXMgfHwgIXNpemUpCiAJCXJldHVybiBOVUxMOwpAQCAtMTAxLDcgKzEwNSw3IEBACiAJCXJldHVybiBlYXJseV9pb3JlbWFwKHBoeXMsIHNpemUpOwogfQogCi1zdGF0aWMgdm9pZCBzZmlfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqdmlydCwgdTMyIHNpemUpCitzdGF0aWMgdm9pZCBfX3JlZiBzZmlfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqdmlydCwgdTMyIHNpemUpCiB7CiAJaWYgKCF2aXJ0IHx8ICFzaXplKQogCQlyZXR1cm47CkBAIC0xMjUsNyArMTI5LDcgQEAKICAqIHNmaV92ZXJpZnlfdGFibGUoKQogICogU2FuaXR5IGNoZWNrIHRhYmxlIGxlbmdoLCBjYWxjdWxhdGUgY2hlY2tzdW0KICAqLwotc3RhdGljIF9faW5pdCBpbnQgc2ZpX3ZlcmlmeV90YWJsZShzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpCitzdGF0aWMgaW50IHNmaV92ZXJpZnlfdGFibGUoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewogCiAJdTggY2hlY2tzdW0gPSAwOwpAQCAtMjEzLDEyICsyMTcsMTcgQEAKICAqICAgIHRoZSBtYXBwZWQgdmlydCBhZGRyZXNzIHdpbGwgYmUgcmV0dXJuZWQsIGFuZCB0aGUgdmlydCBzcGFjZQogICogICAgd2lsbCBiZSByZWxlYXNlZCBieSBjYWxsIHNmaV9wdXRfdGFibGUoKSBsYXRlcgogICoKKyAqIFRoaXMgdHdvIGNhc2VzIGFyZSBmcm9tIHR3byBkaWZmZXJlbnQgZnVuY3Rpb25zIHdpdGggdHdvIGRpZmZlcmVudAorICogc2VjdGlvbnMgYW5kIGNhdXNlcyBzZWN0aW9uIG1pc21hdGNoIHdhcm5pbmcuIFNvIHVzZSBfX3JlZiB0byB0ZWxsCisgKiBtb2Rwb3N0IG5vdCB0byBtYWtlIGFueSBub2lzZS4KKyAqCiAgKiBSZXR1cm4gdmFsdWU6CiAgKglOVUxMOgkJCXdoZW4gY2FuJ3QgZmluZCBhIHRhYmxlIG1hdGNoaW5nIHRoZSBrZXkKICAqCUVSUl9QVFIoZXJyb3IpOgkJZXJyb3IgdmFsdWUKICAqCXZpcnQgdGFibGUgYWRkcmVzczoJd2hlbiBhIG1hdGNoZWQgdGFibGUgaXMgZm91bmQKICAqLwotc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnNmaV9jaGVja190YWJsZSh1NjQgcGEsIHN0cnVjdCBzZmlfdGFibGVfa2V5ICprZXkpCitzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqCisgX19yZWYgc2ZpX2NoZWNrX3RhYmxlKHU2NCBwYSwgc3RydWN0IHNmaV90YWJsZV9rZXkgKmtleSkKIHsKIAlzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGg7CiAJdm9pZCAqcmV0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKaW5kZXggNmQ3YTNmOC4uMjFhMTE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKQEAgLTE3LDcgKzE3LDcgQEAKIG9iai0kKENPTkZJR19TUElfQVUxNTUwKQkJKz0gYXUxNTUwX3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0JVVFRFUkZMWSkJCSs9IHNwaV9idXR0ZXJmbHkubwogb2JqLSQoQ09ORklHX1NQSV9HUElPKQkJCSs9IHNwaV9ncGlvLm8KLW9iai0kKENPTkZJR19TUElfSU1YKQkJCSs9IG14Y19zcGkubworb2JqLSQoQ09ORklHX1NQSV9JTVgpCQkJKz0gc3BpX2lteC5vCiBvYmotJChDT05GSUdfU1BJX0xNNzBfTExQKQkJKz0gc3BpX2xtNzBsbHAubwogb2JqLSQoQ09ORklHX1NQSV9QWEEyWFgpCQkrPSBweGEyeHhfc3BpLm8KIG9iai0kKENPTkZJR19TUElfT01BUF9VV0lSRSkJCSs9IG9tYXBfdXdpcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCmluZGV4IGMwZjk1MGEuLmZmNWJiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYworKysgYi9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKQEAgLTUzMiw3ICs1MzIsNyBAQAogCUdFTl9NQVNLX0JJVFMoU1NQX0RBVEFfQklUU18xMiwgU1NQX0NSMF9NQVNLX0RTUywgMCkJfCBcCiAJR0VOX01BU0tfQklUUyhTU1BfTUlDUk9XSVJFX0NIQU5ORUxfRlVMTF9EVVBMRVgsIFNTUF9DUjBfTUFTS19IQUxGRFVQLCA1KSB8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9DTEtfUE9MX0lETEVfTE9XLCBTU1BfQ1IwX01BU0tfU1BPLCA2KSB8IFwKLQlHRU5fTUFTS19CSVRTKFNTUF9DTEtfRkFMTElOR19FREdFLCBTU1BfQ1IwX01BU0tfU1BILCA3KSB8IFwKKwlHRU5fTUFTS19CSVRTKFNTUF9DTEtfU0VDT05EX0VER0UsIFNTUF9DUjBfTUFTS19TUEgsIDcpIHwgXAogCUdFTl9NQVNLX0JJVFMoTk1ES19TU1BfREVGQVVMVF9DTEtSQVRFLCBTU1BfQ1IwX01BU0tfU0NSLCA4KSB8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9CSVRTXzgsIFNTUF9DUjBfTUFTS19DU1MsIDE2KQl8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9JTlRFUkZBQ0VfTU9UT1JPTEFfU1BJLCBTU1BfQ1IwX01BU0tfRlJGLCAyMSkgXApAQCAtMTI0Nyw4ICsxMjQ3LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjaGlwX2luZm8tPmlmYWNlID09IFNTUF9JTlRFUkZBQ0VfTU9UT1JPTEFfU1BJKSB7Ci0JCWlmICgoY2hpcF9pbmZvLT5jbGtfcGhhc2UgIT0gU1NQX0NMS19SSVNJTkdfRURHRSkKLQkJICAgICYmIChjaGlwX2luZm8tPmNsa19waGFzZSAhPSBTU1BfQ0xLX0ZBTExJTkdfRURHRSkpIHsKKwkJaWYgKChjaGlwX2luZm8tPmNsa19waGFzZSAhPSBTU1BfQ0xLX0ZJUlNUX0VER0UpCisJCSAgICAmJiAoY2hpcF9pbmZvLT5jbGtfcGhhc2UgIT0gU1NQX0NMS19TRUNPTkRfRURHRSkpIHsKIAkJCWRldl9lcnIoY2hpcF9pbmZvLT5kZXYsCiAJCQkJIkNsb2NrIFBoYXNlIGlzIGNvbmZpZ3VyZWQgaW5jb3JyZWN0bHlcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDg1LDcgKzE0ODUsNyBAQAogCQljaGlwX2luZm8tPmRhdGFfc2l6ZSA9IFNTUF9EQVRBX0JJVFNfMTI7CiAJCWNoaXBfaW5mby0+cnhfbGV2X3RyaWcgPSBTU1BfUlhfMV9PUl9NT1JFX0VMRU07CiAJCWNoaXBfaW5mby0+dHhfbGV2X3RyaWcgPSBTU1BfVFhfMV9PUl9NT1JFX0VNUFRZX0xPQzsKLQkJY2hpcF9pbmZvLT5jbGtfcGhhc2UgPSBTU1BfQ0xLX0ZBTExJTkdfRURHRTsKKwkJY2hpcF9pbmZvLT5jbGtfcGhhc2UgPSBTU1BfQ0xLX1NFQ09ORF9FREdFOwogCQljaGlwX2luZm8tPmNsa19wb2wgPSBTU1BfQ0xLX1BPTF9JRExFX0xPVzsKIAkJY2hpcF9pbmZvLT5jdHJsX2xlbiA9IFNTUF9CSVRTXzg7CiAJCWNoaXBfaW5mby0+d2FpdF9zdGF0ZSA9IFNTUF9NV0lSRV9XQUlUX1pFUk87CkBAIC0xODI2LDcgKzE4MjYsNyBAQAogCQkgKiBTVCBNaWNybyBkZXJpdmF0aXZlLCB0aGlzIGhhcyAzMmJpdCB3aWRlCiAJCSAqIGFuZCAzMiBsb2NhdGlvbnMgZGVlcCBUWC9SWCBGSUZPCiAJCSAqLwotCQkuaWQJPSAweDAwMTA4MDIyLAorCQkuaWQJPSAweDAxMDgwMDIyLAogCQkubWFzawk9IDB4ZmZmZmZmZmYsCiAJCS5kYXRhCT0gJnZlbmRvcl9zdCwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXhjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXhjX3NwaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTQ0NzIzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3BpL214Y19zcGkuYworKysgL2Rldi9udWxsCkBAIC0xLDY4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgotICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3NwaS5oPgotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJzcGlfaW14IgotCi0jZGVmaW5lIE1YQ19DU1BJUlhEQVRBCQkweDAwCi0jZGVmaW5lIE1YQ19DU1BJVFhEQVRBCQkweDA0Ci0jZGVmaW5lIE1YQ19DU1BJQ1RSTAkJMHgwOAotI2RlZmluZSBNWENfQ1NQSUlOVAkJMHgwYwotI2RlZmluZSBNWENfUkVTRVQJCTB4MWMKLQotLyogZ2VuZXJpYyBkZWZpbmVzIHRvIGFic3RyYWN0IGZyb20gdGhlIGRpZmZlcmVudCByZWdpc3RlciBsYXlvdXRzICovCi0jZGVmaW5lIE1YQ19JTlRfUlIJKDEgPDwgMCkgLyogUmVjZWl2ZSBkYXRhIHJlYWR5IGludGVycnVwdCAqLwotI2RlZmluZSBNWENfSU5UX1RFCSgxIDw8IDEpIC8qIFRyYW5zbWl0IEZJRk8gZW1wdHkgaW50ZXJydXB0ICovCi0KLXN0cnVjdCBteGNfc3BpX2NvbmZpZyB7Ci0JdW5zaWduZWQgaW50IHNwZWVkX2h6OwotCXVuc2lnbmVkIGludCBicHc7Ci0JdW5zaWduZWQgaW50IG1vZGU7Ci0JaW50IGNzOwotfTsKLQotc3RydWN0IG14Y19zcGlfZGF0YSB7Ci0Jc3RydWN0IHNwaV9iaXRiYW5nIGJpdGJhbmc7Ci0KLQlzdHJ1Y3QgY29tcGxldGlvbiB4ZmVyX2RvbmU7Ci0Jdm9pZCAqYmFzZTsKLQlpbnQgaXJxOwotCXN0cnVjdCBjbGsgKmNsazsKLQl1bnNpZ25lZCBsb25nIHNwaV9jbGs7Ci0JaW50ICpjaGlwc2VsZWN0OwotCi0JdW5zaWduZWQgaW50IGNvdW50OwotCXZvaWQgKCp0eCkoc3RydWN0IG14Y19zcGlfZGF0YSAqKTsKLQl2b2lkICgqcngpKHN0cnVjdCBteGNfc3BpX2RhdGEgKik7Ci0Jdm9pZCAqcnhfYnVmOwotCWNvbnN0IHZvaWQgKnR4X2J1ZjsKLQl1bnNpZ25lZCBpbnQgdHhmaWZvOyAvKiBudW1iZXIgb2Ygd29yZHMgcHVzaGVkIGluIHR4IEZJRk8gKi8KLQotCS8qIFNvQyBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KLQl2b2lkICgqaW50Y3RybCkoc3RydWN0IG14Y19zcGlfZGF0YSAqLCBpbnQpOwotCWludCAoKmNvbmZpZykoc3RydWN0IG14Y19zcGlfZGF0YSAqLCBzdHJ1Y3QgbXhjX3NwaV9jb25maWcgKik7Ci0Jdm9pZCAoKnRyaWdnZXIpKHN0cnVjdCBteGNfc3BpX2RhdGEgKik7Ci0JaW50ICgqcnhfYXZhaWxhYmxlKShzdHJ1Y3QgbXhjX3NwaV9kYXRhICopOwotfTsKLQotI2RlZmluZSBNWENfU1BJX0JVRl9SWCh0eXBlKQkJCQkJCVwKLXN0YXRpYyB2b2lkIG14Y19zcGlfYnVmX3J4XyMjdHlwZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgdmFsID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJUlhEQVRBKTsJXAotCQkJCQkJCQkJXAotCWlmIChteGNfc3BpLT5yeF9idWYpIHsJCQkJCQlcCi0JCSoodHlwZSAqKW14Y19zcGktPnJ4X2J1ZiA9IHZhbDsJCQkJXAotCQlteGNfc3BpLT5yeF9idWYgKz0gc2l6ZW9mKHR5cGUpOwkJCVwKLQl9CQkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgTVhDX1NQSV9CVUZfVFgodHlwZSkJCQkJCQlcCi1zdGF0aWMgdm9pZCBteGNfc3BpX2J1Zl90eF8jI3R5cGUoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkJCVwKLXsJCQkJCQkJCQlcCi0JdHlwZSB2YWwgPSAwOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKG14Y19zcGktPnR4X2J1ZikgewkJCQkJCVwKLQkJdmFsID0gKih0eXBlICopbXhjX3NwaS0+dHhfYnVmOwkJCQlcCi0JCW14Y19zcGktPnR4X2J1ZiArPSBzaXplb2YodHlwZSk7CQkJXAotCX0JCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlteGNfc3BpLT5jb3VudCAtPSBzaXplb2YodHlwZSk7CQkJCQlcCi0JCQkJCQkJCQlcCi0Jd3JpdGVsKHZhbCwgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJVFhEQVRBKTsJCQlcCi19Ci0KLU1YQ19TUElfQlVGX1JYKHU4KQotTVhDX1NQSV9CVUZfVFgodTgpCi1NWENfU1BJX0JVRl9SWCh1MTYpCi1NWENfU1BJX0JVRl9UWCh1MTYpCi1NWENfU1BJX0JVRl9SWCh1MzIpCi1NWENfU1BJX0JVRl9UWCh1MzIpCi0KLS8qIEZpcnN0IGVudHJ5IGlzIHJlc2VydmVkLCBzZWNvbmQgZW50cnkgaXMgdmFsaWQgb25seSBpZiBTREhDX1NQSUVOIGlzIHNldAotICogKHdoaWNoIGlzIGN1cnJlbnRseSBub3QgdGhlIGNhc2UgaW4gdGhpcyBkcml2ZXIpCi0gKi8KLXN0YXRpYyBpbnQgbXhjX2Nsa2RpdnNbXSA9IHswLCAzLCA0LCA2LCA4LCAxMiwgMTYsIDI0LCAzMiwgNDgsIDY0LCA5NiwgMTI4LCAxOTIsCi0JMjU2LCAzODQsIDUxMiwgNzY4LCAxMDI0fTsKLQotLyogTVgyMSwgTVgyNyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBteGNfc3BpX2Nsa2Rpdl8xKHVuc2lnbmVkIGludCBmaW4sCi0JCXVuc2lnbmVkIGludCBmc3BpKQotewotCWludCBpLCBtYXg7Ci0KLQlpZiAoY3B1X2lzX214MjEoKSkKLQkJbWF4ID0gMTg7Ci0JZWxzZQotCQltYXggPSAxNjsKLQotCWZvciAoaSA9IDI7IGkgPCBtYXg7IGkrKykKLQkJaWYgKGZzcGkgKiBteGNfY2xrZGl2c1tpXSA+PSBmaW4pCi0JCQlyZXR1cm4gaTsKLQotCXJldHVybiBtYXg7Ci19Ci0KLS8qIE1YMSwgTVgzMSwgTVgzNSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBteGNfc3BpX2Nsa2Rpdl8yKHVuc2lnbmVkIGludCBmaW4sCi0JCXVuc2lnbmVkIGludCBmc3BpKQotewotCWludCBpLCBkaXYgPSA0OwotCi0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQlpZiAoZnNwaSAqIGRpdiA+PSBmaW4pCi0JCQlyZXR1cm4gaTsKLQkJZGl2IDw8PSAxOwotCX0KLQotCXJldHVybiA3OwotfQotCi0jZGVmaW5lIE1YMzFfSU5UUkVHX1RFRU4JKDEgPDwgMCkKLSNkZWZpbmUgTVgzMV9JTlRSRUdfUlJFTgkoMSA8PCAzKQotCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfRU5BQkxFCSgxIDw8IDApCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfTUFTVEVSCSgxIDw8IDEpCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfWENICSgxIDw8IDIpCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfUE9MCSgxIDw8IDQpCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfUEhBCSgxIDw8IDUpCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfU1NDVEwJKDEgPDwgNikKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9TU1BPTAkoMSA8PCA3KQotI2RlZmluZSBNWDMxX0NTUElDVFJMX0JDX1NISUZUCTgKLSNkZWZpbmUgTVgzNV9DU1BJQ1RSTF9CTF9TSElGVAkyMAotI2RlZmluZSBNWDMxX0NTUElDVFJMX0NTX1NISUZUCTI0Ci0jZGVmaW5lIE1YMzVfQ1NQSUNUUkxfQ1NfU0hJRlQJMTIKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9EUl9TSElGVAkxNgotCi0jZGVmaW5lIE1YMzFfQ1NQSVNUQVRVUwkJMHgxNAotI2RlZmluZSBNWDMxX1NUQVRVU19SUgkJKDEgPDwgMykKLQotLyogVGhlc2UgZnVuY3Rpb25zIGFsc28gd29yayBmb3IgdGhlIGkuTVgzNSwgYnV0IGJlIGF3YXJlIHRoYXQKLSAqIHRoZSBpLk1YMzUgaGFzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHJlZ2lzdGVyIGxheW91dCBmb3IgYml0cwotICogd2UgZG8gbm90IHVzZSBoZXJlLgotICovCi1zdGF0aWMgdm9pZCBteDMxX2ludGN0cmwoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwgaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsID0gMDsKLQotCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQotCQl2YWwgfD0gTVgzMV9JTlRSRUdfVEVFTjsKLQlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKLQkJdmFsIHw9IE1YMzFfSU5UUkVHX1JSRU47Ci0KLQl3cml0ZWwodmFsLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpOwotfQotCi1zdGF0aWMgdm9pZCBteDMxX3RyaWdnZXIoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JcmVnID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci0JcmVnIHw9IE1YMzFfQ1NQSUNUUkxfWENIOwotCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotfQotCi1zdGF0aWMgaW50IG14MzFfY29uZmlnKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGksCi0JCXN0cnVjdCBteGNfc3BpX2NvbmZpZyAqY29uZmlnKQotewotCXVuc2lnbmVkIGludCByZWcgPSBNWDMxX0NTUElDVFJMX0VOQUJMRSB8IE1YMzFfQ1NQSUNUUkxfTUFTVEVSOwotCi0JcmVnIHw9IG14Y19zcGlfY2xrZGl2XzIobXhjX3NwaS0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKLQkJTVgzMV9DU1BJQ1RSTF9EUl9TSElGVDsKLQotCWlmIChjcHVfaXNfbXgzMSgpKQotCQlyZWcgfD0gKGNvbmZpZy0+YnB3IC0gMSkgPDwgTVgzMV9DU1BJQ1RSTF9CQ19TSElGVDsKLQllbHNlIGlmIChjcHVfaXNfbXgzNSgpKSB7Ci0JCXJlZyB8PSAoY29uZmlnLT5icHcgLSAxKSA8PCBNWDM1X0NTUElDVFJMX0JMX1NISUZUOwotCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9TU0NUTDsKLQl9Ci0KLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCi0JCXJlZyB8PSBNWDMxX0NTUElDVFJMX1BIQTsKLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQT0wpCi0JCXJlZyB8PSBNWDMxX0NTUElDVFJMX1BPTDsKLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NTX0hJR0gpCi0JCXJlZyB8PSBNWDMxX0NTUElDVFJMX1NTUE9MOwotCWlmIChjb25maWctPmNzIDwgMCkgewotCQlpZiAoY3B1X2lzX214MzEoKSkKLQkJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDMxX0NTUElDVFJMX0NTX1NISUZUOwotCQllbHNlIGlmIChjcHVfaXNfbXgzNSgpKQotCQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMzVfQ1NQSUNUUkxfQ1NfU0hJRlQ7Ci0JfQotCi0Jd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDMxX3J4X2F2YWlsYWJsZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXJldHVybiByZWFkbChteGNfc3BpLT5iYXNlICsgTVgzMV9DU1BJU1RBVFVTKSAmIE1YMzFfU1RBVFVTX1JSOwotfQotCi0jZGVmaW5lIE1YMjdfSU5UUkVHX1JSCQkoMSA8PCA0KQotI2RlZmluZSBNWDI3X0lOVFJFR19URUVOCSgxIDw8IDkpCi0jZGVmaW5lIE1YMjdfSU5UUkVHX1JSRU4JKDEgPDwgMTMpCi0KLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9QT0wJKDEgPDwgNSkKLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9QSEEJKDEgPDwgNikKLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9TU1BPTAkoMSA8PCA4KQotI2RlZmluZSBNWDI3X0NTUElDVFJMX1hDSAkoMSA8PCA5KQotI2RlZmluZSBNWDI3X0NTUElDVFJMX0VOQUJMRQkoMSA8PCAxMCkKLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9NQVNURVIJKDEgPDwgMTEpCi0jZGVmaW5lIE1YMjdfQ1NQSUNUUkxfRFJfU0hJRlQJMTQKLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9DU19TSElGVAkxOQotCi1zdGF0aWMgdm9pZCBteDI3X2ludGN0cmwoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwgaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsID0gMDsKLQotCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQotCQl2YWwgfD0gTVgyN19JTlRSRUdfVEVFTjsKLQlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKLQkJdmFsIHw9IE1YMjdfSU5UUkVHX1JSRU47Ci0KLQl3cml0ZWwodmFsLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpOwotfQotCi1zdGF0aWMgdm9pZCBteDI3X3RyaWdnZXIoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JcmVnID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci0JcmVnIHw9IE1YMjdfQ1NQSUNUUkxfWENIOwotCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotfQotCi1zdGF0aWMgaW50IG14MjdfY29uZmlnKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGksCi0JCXN0cnVjdCBteGNfc3BpX2NvbmZpZyAqY29uZmlnKQotewotCXVuc2lnbmVkIGludCByZWcgPSBNWDI3X0NTUElDVFJMX0VOQUJMRSB8IE1YMjdfQ1NQSUNUUkxfTUFTVEVSOwotCi0JcmVnIHw9IG14Y19zcGlfY2xrZGl2XzEobXhjX3NwaS0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKLQkJTVgyN19DU1BJQ1RSTF9EUl9TSElGVDsKLQlyZWcgfD0gY29uZmlnLT5icHcgLSAxOwotCi0JaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUEhBKQotCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9QSEE7Ci0JaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUE9MKQotCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9QT0w7Ci0JaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DU19ISUdIKQotCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9TU1BPTDsKLQlpZiAoY29uZmlnLT5jcyA8IDApCi0JCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDI3X0NTUElDVFJMX0NTX1NISUZUOwotCi0Jd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDI3X3J4X2F2YWlsYWJsZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXJldHVybiByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpICYgTVgyN19JTlRSRUdfUlI7Ci19Ci0KLSNkZWZpbmUgTVgxX0lOVFJFR19SUgkJKDEgPDwgMykKLSNkZWZpbmUgTVgxX0lOVFJFR19URUVOCQkoMSA8PCA4KQotI2RlZmluZSBNWDFfSU5UUkVHX1JSRU4JCSgxIDw8IDExKQotCi0jZGVmaW5lIE1YMV9DU1BJQ1RSTF9QT0wJKDEgPDwgNCkKLSNkZWZpbmUgTVgxX0NTUElDVFJMX1BIQQkoMSA8PCA1KQotI2RlZmluZSBNWDFfQ1NQSUNUUkxfWENICSgxIDw8IDgpCi0jZGVmaW5lIE1YMV9DU1BJQ1RSTF9FTkFCTEUJKDEgPDwgOSkKLSNkZWZpbmUgTVgxX0NTUElDVFJMX01BU1RFUgkoMSA8PCAxMCkKLSNkZWZpbmUgTVgxX0NTUElDVFJMX0RSX1NISUZUCTEzCi0KLXN0YXRpYyB2b2lkIG14MV9pbnRjdHJsKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGksIGludCBlbmFibGUpCi17Ci0JdW5zaWduZWQgaW50IHZhbCA9IDA7Ci0KLQlpZiAoZW5hYmxlICYgTVhDX0lOVF9URSkKLQkJdmFsIHw9IE1YMV9JTlRSRUdfVEVFTjsKLQlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKLQkJdmFsIHw9IE1YMV9JTlRSRUdfUlJFTjsKLQotCXdyaXRlbCh2YWwsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG14MV90cmlnZ2VyKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCi17Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCXJlZyA9IHJlYWRsKG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotCXJlZyB8PSBNWDFfQ1NQSUNUUkxfWENIOwotCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotfQotCi1zdGF0aWMgaW50IG14MV9jb25maWcoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwKLQkJc3RydWN0IG14Y19zcGlfY29uZmlnICpjb25maWcpCi17Ci0JdW5zaWduZWQgaW50IHJlZyA9IE1YMV9DU1BJQ1RSTF9FTkFCTEUgfCBNWDFfQ1NQSUNUUkxfTUFTVEVSOwotCi0JcmVnIHw9IG14Y19zcGlfY2xrZGl2XzIobXhjX3NwaS0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKLQkJTVgxX0NTUElDVFJMX0RSX1NISUZUOwotCXJlZyB8PSBjb25maWctPmJwdyAtIDE7Ci0KLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCi0JCXJlZyB8PSBNWDFfQ1NQSUNUUkxfUEhBOwotCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BPTCkKLQkJcmVnIHw9IE1YMV9DU1BJQ1RSTF9QT0w7Ci0KLQl3cml0ZWwocmVnLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MV9yeF9hdmFpbGFibGUoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKLXsKLQlyZXR1cm4gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJSU5UKSAmIE1YMV9JTlRSRUdfUlI7Ci19Ci0KLXN0YXRpYyB2b2lkIG14Y19zcGlfY2hpcHNlbGVjdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgaXNfYWN0aXZlKQotewotCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKLQl1bnNpZ25lZCBpbnQgY3MgPSAwOwotCWludCBncGlvID0gbXhjX3NwaS0+Y2hpcHNlbGVjdFtzcGktPmNoaXBfc2VsZWN0XTsKLQlzdHJ1Y3QgbXhjX3NwaV9jb25maWcgY29uZmlnOwotCi0JaWYgKHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKQotCQljcyA9IDE7Ci0KLQlpZiAoaXNfYWN0aXZlID09IEJJVEJBTkdfQ1NfSU5BQ1RJVkUpIHsKLQkJaWYgKGdwaW8gPj0gMCkKLQkJCWdwaW9fc2V0X3ZhbHVlKGdwaW8sICFjcyk7Ci0JCXJldHVybjsKLQl9Ci0KLQljb25maWcuYnB3ID0gc3BpLT5iaXRzX3Blcl93b3JkOwotCWNvbmZpZy5zcGVlZF9oeiA9IHNwaS0+bWF4X3NwZWVkX2h6OwotCWNvbmZpZy5tb2RlID0gc3BpLT5tb2RlOwotCWNvbmZpZy5jcyA9IG14Y19zcGktPmNoaXBzZWxlY3Rbc3BpLT5jaGlwX3NlbGVjdF07Ci0KLQlteGNfc3BpLT5jb25maWcobXhjX3NwaSwgJmNvbmZpZyk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBmdW5jdGlvbnMgZm9yIHRyYW5zZmVyICovCi0JaWYgKGNvbmZpZy5icHcgPD0gOCkgewotCQlteGNfc3BpLT5yeCA9IG14Y19zcGlfYnVmX3J4X3U4OwotCQlteGNfc3BpLT50eCA9IG14Y19zcGlfYnVmX3R4X3U4OwotCX0gZWxzZSBpZiAoY29uZmlnLmJwdyA8PSAxNikgewotCQlteGNfc3BpLT5yeCA9IG14Y19zcGlfYnVmX3J4X3UxNjsKLQkJbXhjX3NwaS0+dHggPSBteGNfc3BpX2J1Zl90eF91MTY7Ci0JfSBlbHNlIGlmIChjb25maWcuYnB3IDw9IDMyKSB7Ci0JCW14Y19zcGktPnJ4ID0gbXhjX3NwaV9idWZfcnhfdTMyOwotCQlteGNfc3BpLT50eCA9IG14Y19zcGlfYnVmX3R4X3UzMjsKLQl9IGVsc2UKLQkJQlVHKCk7Ci0KLQlpZiAoZ3BpbyA+PSAwKQotCQlncGlvX3NldF92YWx1ZShncGlvLCBjcyk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIG14Y19zcGlfcHVzaChzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXdoaWxlIChteGNfc3BpLT50eGZpZm8gPCA4KSB7Ci0JCWlmICghbXhjX3NwaS0+Y291bnQpCi0JCQlicmVhazsKLQkJbXhjX3NwaS0+dHgobXhjX3NwaSk7Ci0JCW14Y19zcGktPnR4ZmlmbysrOwotCX0KLQotCW14Y19zcGktPnRyaWdnZXIobXhjX3NwaSk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBteGNfc3BpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IGRldl9pZDsKLQotCXdoaWxlIChteGNfc3BpLT5yeF9hdmFpbGFibGUobXhjX3NwaSkpIHsKLQkJbXhjX3NwaS0+cngobXhjX3NwaSk7Ci0JCW14Y19zcGktPnR4Zmlmby0tOwotCX0KLQotCWlmIChteGNfc3BpLT5jb3VudCkgewotCQlteGNfc3BpX3B1c2gobXhjX3NwaSk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0KLQlpZiAobXhjX3NwaS0+dHhmaWZvKSB7Ci0JCS8qIE5vIGRhdGEgbGVmdCB0byBwdXNoLCBidXQgc3RpbGwgd2FpdGluZyBmb3IgcnggZGF0YSwKLQkJICogZW5hYmxlIHJlY2VpdmUgZGF0YSBhdmFpbGFibGUgaW50ZXJydXB0LgotCQkgKi8KLQkJbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCBNWENfSU5UX1JSKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCW14Y19zcGktPmludGN0cmwobXhjX3NwaSwgMCk7Ci0JY29tcGxldGUoJm14Y19zcGktPnhmZXJfZG9uZSk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgbXhjX3NwaV9zZXR1cHhmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKLQkJCQkgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKLXsKLQlzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0Jc3RydWN0IG14Y19zcGlfY29uZmlnIGNvbmZpZzsKLQotCWNvbmZpZy5icHcgPSB0ID8gdC0+Yml0c19wZXJfd29yZCA6IHNwaS0+Yml0c19wZXJfd29yZDsKLQljb25maWcuc3BlZWRfaHogID0gdCA/IHQtPnNwZWVkX2h6IDogc3BpLT5tYXhfc3BlZWRfaHo7Ci0JY29uZmlnLm1vZGUgPSBzcGktPm1vZGU7Ci0KLQlteGNfc3BpLT5jb25maWcobXhjX3NwaSwgJmNvbmZpZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteGNfc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCi0JCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIpCi17Ci0Jc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCi0JbXhjX3NwaS0+dHhfYnVmID0gdHJhbnNmZXItPnR4X2J1ZjsKLQlteGNfc3BpLT5yeF9idWYgPSB0cmFuc2Zlci0+cnhfYnVmOwotCW14Y19zcGktPmNvdW50ID0gdHJhbnNmZXItPmxlbjsKLQlteGNfc3BpLT50eGZpZm8gPSAwOwotCi0JaW5pdF9jb21wbGV0aW9uKCZteGNfc3BpLT54ZmVyX2RvbmUpOwotCi0JbXhjX3NwaV9wdXNoKG14Y19zcGkpOwotCi0JbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCBNWENfSU5UX1RFKTsKLQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJm14Y19zcGktPnhmZXJfZG9uZSk7Ci0KLQlyZXR1cm4gdHJhbnNmZXItPmxlbjsKLX0KLQotc3RhdGljIGludCBteGNfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JaWYgKCFzcGktPmJpdHNfcGVyX3dvcmQpCi0JCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7Ci0KLQlwcl9kZWJ1ZygiJXM6IG1vZGUgJWQsICV1IGJwdywgJWQgaHpcbiIsIF9fZnVuY19fLAotCQkgc3BpLT5tb2RlLCBzcGktPmJpdHNfcGVyX3dvcmQsIHNwaS0+bWF4X3NwZWVkX2h6KTsKLQotCW14Y19zcGlfY2hpcHNlbGVjdChzcGksIEJJVEJBTkdfQ1NfSU5BQ1RJVkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG14Y19zcGlfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotfQotCi1zdGF0aWMgaW50IF9faW5pdCBteGNfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHNwaV9pbXhfbWFzdGVyICpteGNfcGxhdGZvcm1faW5mbzsKLQlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwotCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGk7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IGksIHJldDsKLQotCW14Y19wbGF0Zm9ybV9pbmZvID0gKHN0cnVjdCBzcGlfaW14X21hc3RlciAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWlmICghbXhjX3BsYXRmb3JtX2luZm8pIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IHRoZSBwbGF0Zm9ybSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IG14Y19zcGlfZGF0YSkpOwotCWlmICghbWFzdGVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1hc3Rlcik7Ci0KLQltYXN0ZXItPmJ1c19udW0gPSBwZGV2LT5pZDsKLQltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gbXhjX3BsYXRmb3JtX2luZm8tPm51bV9jaGlwc2VsZWN0OwotCi0JbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQlteGNfc3BpLT5iaXRiYW5nLm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7Ci0JbXhjX3NwaS0+Y2hpcHNlbGVjdCA9IG14Y19wbGF0Zm9ybV9pbmZvLT5jaGlwc2VsZWN0OwotCi0JZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykgewotCQlpZiAobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSA8IDApCi0JCQljb250aW51ZTsKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG14Y19zcGktPmNoaXBzZWxlY3RbaV0sIERSSVZFUl9OQU1FKTsKLQkJaWYgKHJldCkgewotCQkJaS0tOwotCQkJd2hpbGUgKGkgPiAwKQotCQkJCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldID49IDApCi0JCQkJCWdwaW9fZnJlZShteGNfc3BpLT5jaGlwc2VsZWN0W2ktLV0pOwotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGNzIGdwaW9zIik7Ci0JCQlnb3RvIG91dF9tYXN0ZXJfcHV0OwotCQl9Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChteGNfc3BpLT5jaGlwc2VsZWN0W2ldLCAxKTsKLQl9Ci0KLQlteGNfc3BpLT5iaXRiYW5nLmNoaXBzZWxlY3QgPSBteGNfc3BpX2NoaXBzZWxlY3Q7Ci0JbXhjX3NwaS0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9IG14Y19zcGlfc2V0dXB4ZmVyOwotCW14Y19zcGktPmJpdGJhbmcudHhyeF9idWZzID0gbXhjX3NwaV90cmFuc2ZlcjsKLQlteGNfc3BpLT5iaXRiYW5nLm1hc3Rlci0+c2V0dXAgPSBteGNfc3BpX3NldHVwOwotCW14Y19zcGktPmJpdGJhbmcubWFzdGVyLT5jbGVhbnVwID0gbXhjX3NwaV9jbGVhbnVwOwotCi0JaW5pdF9jb21wbGV0aW9uKCZteGNfc3BpLT54ZmVyX2RvbmUpOwotCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJlcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgcGxhdGZvcm0gcmVzb3VyY2VcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9ncGlvX2ZyZWU7Ci0JfQotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dF9ncGlvX2ZyZWU7Ci0JfQotCi0JbXhjX3NwaS0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLQlpZiAoIW14Y19zcGktPmJhc2UpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXRfcmVsZWFzZV9tZW07Ci0JfQotCi0JbXhjX3NwaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIW14Y19zcGktPmlycSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9pb3VubWFwOwotCX0KLQotCXJldCA9IHJlcXVlc3RfaXJxKG14Y19zcGktPmlycSwgbXhjX3NwaV9pc3IsIDAsIERSSVZFUl9OQU1FLCBteGNfc3BpKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpcnElZDogJWRcbiIsIG14Y19zcGktPmlycSwgcmV0KTsKLQkJZ290byBvdXRfaW91bm1hcDsKLQl9Ci0KLQlpZiAoY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpKSB7Ci0JCW14Y19zcGktPmludGN0cmwgPSBteDMxX2ludGN0cmw7Ci0JCW14Y19zcGktPmNvbmZpZyA9IG14MzFfY29uZmlnOwotCQlteGNfc3BpLT50cmlnZ2VyID0gbXgzMV90cmlnZ2VyOwotCQlteGNfc3BpLT5yeF9hdmFpbGFibGUgPSBteDMxX3J4X2F2YWlsYWJsZTsKLQl9IGVsc2UgIGlmIChjcHVfaXNfbXgyNygpIHx8IGNwdV9pc19teDIxKCkpIHsKLQkJbXhjX3NwaS0+aW50Y3RybCA9IG14MjdfaW50Y3RybDsKLQkJbXhjX3NwaS0+Y29uZmlnID0gbXgyN19jb25maWc7Ci0JCW14Y19zcGktPnRyaWdnZXIgPSBteDI3X3RyaWdnZXI7Ci0JCW14Y19zcGktPnJ4X2F2YWlsYWJsZSA9IG14MjdfcnhfYXZhaWxhYmxlOwotCX0gZWxzZSBpZiAoY3B1X2lzX214MSgpKSB7Ci0JCW14Y19zcGktPmludGN0cmwgPSBteDFfaW50Y3RybDsKLQkJbXhjX3NwaS0+Y29uZmlnID0gbXgxX2NvbmZpZzsKLQkJbXhjX3NwaS0+dHJpZ2dlciA9IG14MV90cmlnZ2VyOwotCQlteGNfc3BpLT5yeF9hdmFpbGFibGUgPSBteDFfcnhfYXZhaWxhYmxlOwotCX0gZWxzZQotCQlCVUcoKTsKLQotCW14Y19zcGktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7Ci0JaWYgKElTX0VSUihteGNfc3BpLT5jbGspKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgY2xvY2tcbiIpOwotCQlyZXQgPSBQVFJfRVJSKG14Y19zcGktPmNsayk7Ci0JCWdvdG8gb3V0X2ZyZWVfaXJxOwotCX0KLQotCWNsa19lbmFibGUobXhjX3NwaS0+Y2xrKTsKLQlteGNfc3BpLT5zcGlfY2xrID0gY2xrX2dldF9yYXRlKG14Y19zcGktPmNsayk7Ci0KLQlpZiAoIWNwdV9pc19teDMxKCkgfHwgIWNwdV9pc19teDM1KCkpCi0JCXdyaXRlbCgxLCBteGNfc3BpLT5iYXNlICsgTVhDX1JFU0VUKTsKLQotCW14Y19zcGktPmludGN0cmwobXhjX3NwaSwgMCk7Ci0KLQlyZXQgPSBzcGlfYml0YmFuZ19zdGFydCgmbXhjX3NwaS0+Yml0YmFuZyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJiaXRiYW5nIHN0YXJ0IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOwotCQlnb3RvIG91dF9jbGtfcHV0OwotCX0KLQotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJwcm9iZWRcbiIpOwotCi0JcmV0dXJuIHJldDsKLQotb3V0X2Nsa19wdXQ6Ci0JY2xrX2Rpc2FibGUobXhjX3NwaS0+Y2xrKTsKLQljbGtfcHV0KG14Y19zcGktPmNsayk7Ci1vdXRfZnJlZV9pcnE6Ci0JZnJlZV9pcnEobXhjX3NwaS0+aXJxLCBteGNfc3BpKTsKLW91dF9pb3VubWFwOgotCWlvdW5tYXAobXhjX3NwaS0+YmFzZSk7Ci1vdXRfcmVsZWFzZV9tZW06Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci1vdXRfZ3Bpb19mcmVlOgotCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspCi0JCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldID49IDApCi0JCQlncGlvX2ZyZWUobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSk7Ci1vdXRfbWFzdGVyX3B1dDoKLQlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwotCWtmcmVlKG1hc3Rlcik7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2V4aXQgbXhjX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Ci0JaW50IGk7Ci0KLQlzcGlfYml0YmFuZ19zdG9wKCZteGNfc3BpLT5iaXRiYW5nKTsKLQotCXdyaXRlbCgwLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQljbGtfZGlzYWJsZShteGNfc3BpLT5jbGspOwotCWNsa19wdXQobXhjX3NwaS0+Y2xrKTsKLQlmcmVlX2lycShteGNfc3BpLT5pcnEsIG14Y19zcGkpOwotCWlvdW5tYXAobXhjX3NwaS0+YmFzZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKQotCQlpZiAobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSA+PSAwKQotCQkJZ3Bpb19mcmVlKG14Y19zcGktPmNoaXBzZWxlY3RbaV0pOwotCi0Jc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKLQotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXhjX3NwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJICAgLm5hbWUgPSBEUklWRVJfTkFNRSwKLQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAgIH0sCi0JLnByb2JlID0gbXhjX3NwaV9wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3AobXhjX3NwaV9yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgbXhjX3NwaV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXhjX3NwaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbXhjX3NwaV9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14Y19zcGlfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQobXhjX3NwaV9pbml0KTsKLW1vZHVsZV9leGl0KG14Y19zcGlfZXhpdCk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiU1BJIE1hc3RlciBDb250cm9sbGVyIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCmluZGV4IDMxZGQ1NmYuLmM4YzJiNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKQEAgLTE2NjgsMTAgKzE2NjgsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgcHhhMnh4X3NwaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X3NwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBkcnZfZGF0YS0+c3NwOwogCWludCBzdGF0dXMgPSAwOwogCkBAIC0xNjg0LDkgKzE2ODMsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9zcGlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9zcGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBkcnZfZGF0YS0+c3NwOwogCWludCBzdGF0dXMgPSAwOwogCkBAIC0xNzAzLDI2ICsxNzAyLDI5IEBACiAJLyogU3RhcnQgdGhlIHF1ZXVlIHJ1bm5pbmcgKi8KIAlzdGF0dXMgPSBzdGFydF9xdWV1ZShkcnZfZGF0YSk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gc3RhcnRpbmcgcXVldWUgKCVkKVxuIiwgc3RhdHVzKTsKKwkJZGV2X2VycihkZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHF1ZXVlICglZClcbiIsIHN0YXR1cyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBweGEyeHhfc3BpX3N1c3BlbmQgTlVMTAotI2RlZmluZSBweGEyeHhfc3BpX3Jlc3VtZSBOVUxMCi0jZW5kaWYgLyogQ09ORklHX1BNICovCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGEyeHhfc3BpX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YTJ4eF9zcGlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YTJ4eF9zcGlfcmVzdW1lLAorfTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAicHhhMnh4LXNwaSIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJweGEyeHgtc3BpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGEyeHhfc3BpX3BtX29wcywKKyNlbmRpZgogCX0sCiAJLnJlbW92ZSA9IHB4YTJ4eF9zcGlfcmVtb3ZlLAogCS5zaHV0ZG93biA9IHB4YTJ4eF9zcGlfc2h1dGRvd24sCi0JLnN1c3BlbmQgPSBweGEyeHhfc3BpX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHB4YTJ4eF9zcGlfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcHhhMnh4X3NwaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMgYi9kcml2ZXJzL3NwaS9zcGlfaW14LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljMjJlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwpAQCAtMCwwICsxLDY4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAic3BpX2lteCIKKworI2RlZmluZSBNWENfQ1NQSVJYREFUQQkJMHgwMAorI2RlZmluZSBNWENfQ1NQSVRYREFUQQkJMHgwNAorI2RlZmluZSBNWENfQ1NQSUNUUkwJCTB4MDgKKyNkZWZpbmUgTVhDX0NTUElJTlQJCTB4MGMKKyNkZWZpbmUgTVhDX1JFU0VUCQkweDFjCisKKy8qIGdlbmVyaWMgZGVmaW5lcyB0byBhYnN0cmFjdCBmcm9tIHRoZSBkaWZmZXJlbnQgcmVnaXN0ZXIgbGF5b3V0cyAqLworI2RlZmluZSBNWENfSU5UX1JSCSgxIDw8IDApIC8qIFJlY2VpdmUgZGF0YSByZWFkeSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTVhDX0lOVF9URQkoMSA8PCAxKSAvKiBUcmFuc21pdCBGSUZPIGVtcHR5IGludGVycnVwdCAqLworCitzdHJ1Y3Qgc3BpX2lteF9jb25maWcgeworCXVuc2lnbmVkIGludCBzcGVlZF9oejsKKwl1bnNpZ25lZCBpbnQgYnB3OworCXVuc2lnbmVkIGludCBtb2RlOworCWludCBjczsKK307CisKK3N0cnVjdCBzcGlfaW14X2RhdGEgeworCXN0cnVjdCBzcGlfYml0YmFuZyBiaXRiYW5nOworCisJc3RydWN0IGNvbXBsZXRpb24geGZlcl9kb25lOworCXZvaWQgKmJhc2U7CisJaW50IGlycTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdW5zaWduZWQgbG9uZyBzcGlfY2xrOworCWludCAqY2hpcHNlbGVjdDsKKworCXVuc2lnbmVkIGludCBjb3VudDsKKwl2b2lkICgqdHgpKHN0cnVjdCBzcGlfaW14X2RhdGEgKik7CisJdm9pZCAoKnJ4KShzdHJ1Y3Qgc3BpX2lteF9kYXRhICopOworCXZvaWQgKnJ4X2J1ZjsKKwljb25zdCB2b2lkICp0eF9idWY7CisJdW5zaWduZWQgaW50IHR4ZmlmbzsgLyogbnVtYmVyIG9mIHdvcmRzIHB1c2hlZCBpbiB0eCBGSUZPICovCisKKwkvKiBTb0Mgc3BlY2lmaWMgZnVuY3Rpb25zICovCisJdm9pZCAoKmludGN0cmwpKHN0cnVjdCBzcGlfaW14X2RhdGEgKiwgaW50KTsKKwlpbnQgKCpjb25maWcpKHN0cnVjdCBzcGlfaW14X2RhdGEgKiwgc3RydWN0IHNwaV9pbXhfY29uZmlnICopOworCXZvaWQgKCp0cmlnZ2VyKShzdHJ1Y3Qgc3BpX2lteF9kYXRhICopOworCWludCAoKnJ4X2F2YWlsYWJsZSkoc3RydWN0IHNwaV9pbXhfZGF0YSAqKTsKK307CisKKyNkZWZpbmUgTVhDX1NQSV9CVUZfUlgodHlwZSkJCQkJCQlcCitzdGF0aWMgdm9pZCBzcGlfaW14X2J1Zl9yeF8jI3R5cGUoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkJCVwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgaW50IHZhbCA9IHJlYWRsKHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSVJYREFUQSk7CVwKKwkJCQkJCQkJCVwKKwlpZiAoc3BpX2lteC0+cnhfYnVmKSB7CQkJCQkJXAorCQkqKHR5cGUgKilzcGlfaW14LT5yeF9idWYgPSB2YWw7CQkJCVwKKwkJc3BpX2lteC0+cnhfYnVmICs9IHNpemVvZih0eXBlKTsJCQlcCisJfQkJCQkJCQkJXAorfQorCisjZGVmaW5lIE1YQ19TUElfQlVGX1RYKHR5cGUpCQkJCQkJXAorc3RhdGljIHZvaWQgc3BpX2lteF9idWZfdHhfIyN0eXBlKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCQlcCit7CQkJCQkJCQkJXAorCXR5cGUgdmFsID0gMDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChzcGlfaW14LT50eF9idWYpIHsJCQkJCQlcCisJCXZhbCA9ICoodHlwZSAqKXNwaV9pbXgtPnR4X2J1ZjsJCQkJXAorCQlzcGlfaW14LT50eF9idWYgKz0gc2l6ZW9mKHR5cGUpOwkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJc3BpX2lteC0+Y291bnQgLT0gc2l6ZW9mKHR5cGUpOwkJCQkJXAorCQkJCQkJCQkJXAorCXdyaXRlbCh2YWwsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSVRYREFUQSk7CQkJXAorfQorCitNWENfU1BJX0JVRl9SWCh1OCkKK01YQ19TUElfQlVGX1RYKHU4KQorTVhDX1NQSV9CVUZfUlgodTE2KQorTVhDX1NQSV9CVUZfVFgodTE2KQorTVhDX1NQSV9CVUZfUlgodTMyKQorTVhDX1NQSV9CVUZfVFgodTMyKQorCisvKiBGaXJzdCBlbnRyeSBpcyByZXNlcnZlZCwgc2Vjb25kIGVudHJ5IGlzIHZhbGlkIG9ubHkgaWYgU0RIQ19TUElFTiBpcyBzZXQKKyAqICh3aGljaCBpcyBjdXJyZW50bHkgbm90IHRoZSBjYXNlIGluIHRoaXMgZHJpdmVyKQorICovCitzdGF0aWMgaW50IG14Y19jbGtkaXZzW10gPSB7MCwgMywgNCwgNiwgOCwgMTIsIDE2LCAyNCwgMzIsIDQ4LCA2NCwgOTYsIDEyOCwgMTkyLAorCTI1NiwgMzg0LCA1MTIsIDc2OCwgMTAyNH07CisKKy8qIE1YMjEsIE1YMjcgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BpX2lteF9jbGtkaXZfMSh1bnNpZ25lZCBpbnQgZmluLAorCQl1bnNpZ25lZCBpbnQgZnNwaSkKK3sKKwlpbnQgaSwgbWF4OworCisJaWYgKGNwdV9pc19teDIxKCkpCisJCW1heCA9IDE4OworCWVsc2UKKwkJbWF4ID0gMTY7CisKKwlmb3IgKGkgPSAyOyBpIDwgbWF4OyBpKyspCisJCWlmIChmc3BpICogbXhjX2Nsa2RpdnNbaV0gPj0gZmluKQorCQkJcmV0dXJuIGk7CisKKwlyZXR1cm4gbWF4OworfQorCisvKiBNWDEsIE1YMzEsIE1YMzUgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BpX2lteF9jbGtkaXZfMih1bnNpZ25lZCBpbnQgZmluLAorCQl1bnNpZ25lZCBpbnQgZnNwaSkKK3sKKwlpbnQgaSwgZGl2ID0gNDsKKworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJaWYgKGZzcGkgKiBkaXYgPj0gZmluKQorCQkJcmV0dXJuIGk7CisJCWRpdiA8PD0gMTsKKwl9CisKKwlyZXR1cm4gNzsKK30KKworI2RlZmluZSBNWDMxX0lOVFJFR19URUVOCSgxIDw8IDApCisjZGVmaW5lIE1YMzFfSU5UUkVHX1JSRU4JKDEgPDwgMykKKworI2RlZmluZSBNWDMxX0NTUElDVFJMX0VOQUJMRQkoMSA8PCAwKQorI2RlZmluZSBNWDMxX0NTUElDVFJMX01BU1RFUgkoMSA8PCAxKQorI2RlZmluZSBNWDMxX0NTUElDVFJMX1hDSAkoMSA8PCAyKQorI2RlZmluZSBNWDMxX0NTUElDVFJMX1BPTAkoMSA8PCA0KQorI2RlZmluZSBNWDMxX0NTUElDVFJMX1BIQQkoMSA8PCA1KQorI2RlZmluZSBNWDMxX0NTUElDVFJMX1NTQ1RMCSgxIDw8IDYpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfU1NQT0wJKDEgPDwgNykKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9CQ19TSElGVAk4CisjZGVmaW5lIE1YMzVfQ1NQSUNUUkxfQkxfU0hJRlQJMjAKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9DU19TSElGVAkyNAorI2RlZmluZSBNWDM1X0NTUElDVFJMX0NTX1NISUZUCTEyCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfRFJfU0hJRlQJMTYKKworI2RlZmluZSBNWDMxX0NTUElTVEFUVVMJCTB4MTQKKyNkZWZpbmUgTVgzMV9TVEFUVVNfUlIJCSgxIDw8IDMpCisKKy8qIFRoZXNlIGZ1bmN0aW9ucyBhbHNvIHdvcmsgZm9yIHRoZSBpLk1YMzUsIGJ1dCBiZSBhd2FyZSB0aGF0CisgKiB0aGUgaS5NWDM1IGhhcyBhIHNsaWdodGx5IGRpZmZlcmVudCByZWdpc3RlciBsYXlvdXQgZm9yIGJpdHMKKyAqIHdlIGRvIG5vdCB1c2UgaGVyZS4KKyAqLworc3RhdGljIHZvaWQgbXgzMV9pbnRjdHJsKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9URSkKKwkJdmFsIHw9IE1YMzFfSU5UUkVHX1RFRU47CisJaWYgKGVuYWJsZSAmIE1YQ19JTlRfUlIpCisJCXZhbCB8PSBNWDMxX0lOVFJFR19SUkVOOworCisJd3JpdGVsKHZhbCwgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJSU5UKTsKK30KKworc3RhdGljIHZvaWQgbXgzMV90cmlnZ2VyKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCXJlZyB8PSBNWDMxX0NTUElDVFJMX1hDSDsKKwl3cml0ZWwocmVnLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElDVFJMKTsKK30KKworc3RhdGljIGludCBteDMxX2NvbmZpZyhzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14LAorCQlzdHJ1Y3Qgc3BpX2lteF9jb25maWcgKmNvbmZpZykKK3sKKwl1bnNpZ25lZCBpbnQgcmVnID0gTVgzMV9DU1BJQ1RSTF9FTkFCTEUgfCBNWDMxX0NTUElDVFJMX01BU1RFUjsKKworCXJlZyB8PSBzcGlfaW14X2Nsa2Rpdl8yKHNwaV9pbXgtPnNwaV9jbGssIGNvbmZpZy0+c3BlZWRfaHopIDw8CisJCU1YMzFfQ1NQSUNUUkxfRFJfU0hJRlQ7CisKKwlpZiAoY3B1X2lzX214MzEoKSkKKwkJcmVnIHw9IChjb25maWctPmJwdyAtIDEpIDw8IE1YMzFfQ1NQSUNUUkxfQkNfU0hJRlQ7CisJZWxzZSBpZiAoY3B1X2lzX214MzUoKSkgeworCQlyZWcgfD0gKGNvbmZpZy0+YnB3IC0gMSkgPDwgTVgzNV9DU1BJQ1RSTF9CTF9TSElGVDsKKwkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfU1NDVEw7CisJfQorCisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUEhBKQorCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9QSEE7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUE9MKQorCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9QT0w7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DU19ISUdIKQorCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9TU1BPTDsKKwlpZiAoY29uZmlnLT5jcyA8IDApIHsKKwkJaWYgKGNwdV9pc19teDMxKCkpCisJCQlyZWcgfD0gKGNvbmZpZy0+Y3MgKyAzMikgPDwgTVgzMV9DU1BJQ1RSTF9DU19TSElGVDsKKwkJZWxzZSBpZiAoY3B1X2lzX214MzUoKSkKKwkJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDM1X0NTUElDVFJMX0NTX1NISUZUOworCX0KKworCXdyaXRlbChyZWcsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXgzMV9yeF9hdmFpbGFibGUoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwlyZXR1cm4gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YMzFfQ1NQSVNUQVRVUykgJiBNWDMxX1NUQVRVU19SUjsKK30KKworI2RlZmluZSBNWDI3X0lOVFJFR19SUgkJKDEgPDwgNCkKKyNkZWZpbmUgTVgyN19JTlRSRUdfVEVFTgkoMSA8PCA5KQorI2RlZmluZSBNWDI3X0lOVFJFR19SUkVOCSgxIDw8IDEzKQorCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfUE9MCSgxIDw8IDUpCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfUEhBCSgxIDw8IDYpCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfU1NQT0wJKDEgPDwgOCkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9YQ0gJKDEgPDwgOSkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9FTkFCTEUJKDEgPDwgMTApCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfTUFTVEVSCSgxIDw8IDExKQorI2RlZmluZSBNWDI3X0NTUElDVFJMX0RSX1NISUZUCTE0CisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfQ1NfU0hJRlQJMTkKKworc3RhdGljIHZvaWQgbXgyN19pbnRjdHJsKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9URSkKKwkJdmFsIHw9IE1YMjdfSU5UUkVHX1RFRU47CisJaWYgKGVuYWJsZSAmIE1YQ19JTlRfUlIpCisJCXZhbCB8PSBNWDI3X0lOVFJFR19SUkVOOworCisJd3JpdGVsKHZhbCwgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJSU5UKTsKK30KKworc3RhdGljIHZvaWQgbXgyN190cmlnZ2VyKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCXJlZyB8PSBNWDI3X0NTUElDVFJMX1hDSDsKKwl3cml0ZWwocmVnLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElDVFJMKTsKK30KKworc3RhdGljIGludCBteDI3X2NvbmZpZyhzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14LAorCQlzdHJ1Y3Qgc3BpX2lteF9jb25maWcgKmNvbmZpZykKK3sKKwl1bnNpZ25lZCBpbnQgcmVnID0gTVgyN19DU1BJQ1RSTF9FTkFCTEUgfCBNWDI3X0NTUElDVFJMX01BU1RFUjsKKworCXJlZyB8PSBzcGlfaW14X2Nsa2Rpdl8xKHNwaV9pbXgtPnNwaV9jbGssIGNvbmZpZy0+c3BlZWRfaHopIDw8CisJCU1YMjdfQ1NQSUNUUkxfRFJfU0hJRlQ7CisJcmVnIHw9IGNvbmZpZy0+YnB3IC0gMTsKKworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BIQSkKKwkJcmVnIHw9IE1YMjdfQ1NQSUNUUkxfUEhBOworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BPTCkKKwkJcmVnIHw9IE1YMjdfQ1NQSUNUUkxfUE9MOworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1NfSElHSCkKKwkJcmVnIHw9IE1YMjdfQ1NQSUNUUkxfU1NQT0w7CisJaWYgKGNvbmZpZy0+Y3MgPCAwKQorCQlyZWcgfD0gKGNvbmZpZy0+Y3MgKyAzMikgPDwgTVgyN19DU1BJQ1RSTF9DU19TSElGVDsKKworCXdyaXRlbChyZWcsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXgyN19yeF9hdmFpbGFibGUoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwlyZXR1cm4gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJSU5UKSAmIE1YMjdfSU5UUkVHX1JSOworfQorCisjZGVmaW5lIE1YMV9JTlRSRUdfUlIJCSgxIDw8IDMpCisjZGVmaW5lIE1YMV9JTlRSRUdfVEVFTgkJKDEgPDwgOCkKKyNkZWZpbmUgTVgxX0lOVFJFR19SUkVOCQkoMSA8PCAxMSkKKworI2RlZmluZSBNWDFfQ1NQSUNUUkxfUE9MCSgxIDw8IDQpCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9QSEEJKDEgPDwgNSkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX1hDSAkoMSA8PCA4KQorI2RlZmluZSBNWDFfQ1NQSUNUUkxfRU5BQkxFCSgxIDw8IDkpCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9NQVNURVIJKDEgPDwgMTApCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9EUl9TSElGVAkxMworCitzdGF0aWMgdm9pZCBteDFfaW50Y3RybChzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14LCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJaWYgKGVuYWJsZSAmIE1YQ19JTlRfVEUpCisJCXZhbCB8PSBNWDFfSU5UUkVHX1RFRU47CisJaWYgKGVuYWJsZSAmIE1YQ19JTlRfUlIpCisJCXZhbCB8PSBNWDFfSU5UUkVHX1JSRU47CisKKwl3cml0ZWwodmFsLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElJTlQpOworfQorCitzdGF0aWMgdm9pZCBteDFfdHJpZ2dlcihzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14KQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChzcGlfaW14LT5iYXNlICsgTVhDX0NTUElDVFJMKTsKKwlyZWcgfD0gTVgxX0NTUElDVFJMX1hDSDsKKwl3cml0ZWwocmVnLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElDVFJMKTsKK30KKworc3RhdGljIGludCBteDFfY29uZmlnKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsCisJCXN0cnVjdCBzcGlfaW14X2NvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCByZWcgPSBNWDFfQ1NQSUNUUkxfRU5BQkxFIHwgTVgxX0NTUElDVFJMX01BU1RFUjsKKworCXJlZyB8PSBzcGlfaW14X2Nsa2Rpdl8yKHNwaV9pbXgtPnNwaV9jbGssIGNvbmZpZy0+c3BlZWRfaHopIDw8CisJCU1YMV9DU1BJQ1RSTF9EUl9TSElGVDsKKwlyZWcgfD0gY29uZmlnLT5icHcgLSAxOworCisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUEhBKQorCQlyZWcgfD0gTVgxX0NTUElDVFJMX1BIQTsKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQT0wpCisJCXJlZyB8PSBNWDFfQ1NQSUNUUkxfUE9MOworCisJd3JpdGVsKHJlZywgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDFfcnhfYXZhaWxhYmxlKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCit7CisJcmV0dXJuIHJlYWRsKHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUlOVCkgJiBNWDFfSU5UUkVHX1JSOworfQorCitzdGF0aWMgdm9pZCBzcGlfaW14X2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJaW50IGdwaW8gPSBzcGlfaW14LT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOworCWludCBhY3RpdmUgPSBpc19hY3RpdmUgIT0gQklUQkFOR19DU19JTkFDVElWRTsKKwlpbnQgZGV2X2lzX2xvd2FjdGl2ZSA9ICEoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOworCisJaWYgKGdwaW8gPCAwKQorCQlyZXR1cm47CisKKwlncGlvX3NldF92YWx1ZShncGlvLCBkZXZfaXNfbG93YWN0aXZlIF4gYWN0aXZlKTsKK30KKworc3RhdGljIHZvaWQgc3BpX2lteF9wdXNoKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCit7CisJd2hpbGUgKHNwaV9pbXgtPnR4ZmlmbyA8IDgpIHsKKwkJaWYgKCFzcGlfaW14LT5jb3VudCkKKwkJCWJyZWFrOworCQlzcGlfaW14LT50eChzcGlfaW14KTsKKwkJc3BpX2lteC0+dHhmaWZvKys7CisJfQorCisJc3BpX2lteC0+dHJpZ2dlcihzcGlfaW14KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNwaV9pbXhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gZGV2X2lkOworCisJd2hpbGUgKHNwaV9pbXgtPnJ4X2F2YWlsYWJsZShzcGlfaW14KSkgeworCQlzcGlfaW14LT5yeChzcGlfaW14KTsKKwkJc3BpX2lteC0+dHhmaWZvLS07CisJfQorCisJaWYgKHNwaV9pbXgtPmNvdW50KSB7CisJCXNwaV9pbXhfcHVzaChzcGlfaW14KTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlmIChzcGlfaW14LT50eGZpZm8pIHsKKwkJLyogTm8gZGF0YSBsZWZ0IHRvIHB1c2gsIGJ1dCBzdGlsbCB3YWl0aW5nIGZvciByeCBkYXRhLAorCQkgKiBlbmFibGUgcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSBpbnRlcnJ1cHQuCisJCSAqLworCQlzcGlfaW14LT5pbnRjdHJsKHNwaV9pbXgsIE1YQ19JTlRfUlIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJc3BpX2lteC0+aW50Y3RybChzcGlfaW14LCAwKTsKKwljb21wbGV0ZSgmc3BpX2lteC0+eGZlcl9kb25lKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBzcGlfaW14X3NldHVweGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXggPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3Qgc3BpX2lteF9jb25maWcgY29uZmlnOworCisJY29uZmlnLmJwdyA9IHQgPyB0LT5iaXRzX3Blcl93b3JkIDogc3BpLT5iaXRzX3Blcl93b3JkOworCWNvbmZpZy5zcGVlZF9oeiAgPSB0ID8gdC0+c3BlZWRfaHogOiBzcGktPm1heF9zcGVlZF9oejsKKwljb25maWcubW9kZSA9IHNwaS0+bW9kZTsKKwljb25maWcuY3MgPSBzcGlfaW14LT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOworCisJaWYgKCFjb25maWcuc3BlZWRfaHopCisJCWNvbmZpZy5zcGVlZF9oeiA9IHNwaS0+bWF4X3NwZWVkX2h6OworCWlmICghY29uZmlnLmJwdykKKwkJY29uZmlnLmJwdyA9IHNwaS0+Yml0c19wZXJfd29yZDsKKwlpZiAoIWNvbmZpZy5zcGVlZF9oeikKKwkJY29uZmlnLnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisKKwkvKiBJbml0aWFsaXplIHRoZSBmdW5jdGlvbnMgZm9yIHRyYW5zZmVyICovCisJaWYgKGNvbmZpZy5icHcgPD0gOCkgeworCQlzcGlfaW14LT5yeCA9IHNwaV9pbXhfYnVmX3J4X3U4OworCQlzcGlfaW14LT50eCA9IHNwaV9pbXhfYnVmX3R4X3U4OworCX0gZWxzZSBpZiAoY29uZmlnLmJwdyA8PSAxNikgeworCQlzcGlfaW14LT5yeCA9IHNwaV9pbXhfYnVmX3J4X3UxNjsKKwkJc3BpX2lteC0+dHggPSBzcGlfaW14X2J1Zl90eF91MTY7CisJfSBlbHNlIGlmIChjb25maWcuYnB3IDw9IDMyKSB7CisJCXNwaV9pbXgtPnJ4ID0gc3BpX2lteF9idWZfcnhfdTMyOworCQlzcGlfaW14LT50eCA9IHNwaV9pbXhfYnVmX3R4X3UzMjsKKwl9IGVsc2UKKwkJQlVHKCk7CisKKwlzcGlfaW14LT5jb25maWcoc3BpX2lteCwgJmNvbmZpZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcGlfaW14X3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIpCit7CisJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJc3BpX2lteC0+dHhfYnVmID0gdHJhbnNmZXItPnR4X2J1ZjsKKwlzcGlfaW14LT5yeF9idWYgPSB0cmFuc2Zlci0+cnhfYnVmOworCXNwaV9pbXgtPmNvdW50ID0gdHJhbnNmZXItPmxlbjsKKwlzcGlfaW14LT50eGZpZm8gPSAwOworCisJaW5pdF9jb21wbGV0aW9uKCZzcGlfaW14LT54ZmVyX2RvbmUpOworCisJc3BpX2lteF9wdXNoKHNwaV9pbXgpOworCisJc3BpX2lteC0+aW50Y3RybChzcGlfaW14LCBNWENfSU5UX1RFKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNwaV9pbXgtPnhmZXJfZG9uZSk7CisKKwlyZXR1cm4gdHJhbnNmZXItPmxlbjsKK30KKworc3RhdGljIGludCBzcGlfaW14X3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCWludCBncGlvID0gc3BpX2lteC0+Y2hpcHNlbGVjdFtzcGktPmNoaXBfc2VsZWN0XTsKKworCXByX2RlYnVnKCIlczogbW9kZSAlZCwgJXUgYnB3LCAlZCBoelxuIiwgX19mdW5jX18sCisJCSBzcGktPm1vZGUsIHNwaS0+Yml0c19wZXJfd29yZCwgc3BpLT5tYXhfc3BlZWRfaHopOworCisJaWYgKGdwaW8gPj0gMCkKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMCA6IDEpOworCisJc3BpX2lteF9jaGlwc2VsZWN0KHNwaSwgQklUQkFOR19DU19JTkFDVElWRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BpX2lteF9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNwaV9pbXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgKm14Y19wbGF0Zm9ybV9pbmZvOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaSwgcmV0OworCisJbXhjX3BsYXRmb3JtX2luZm8gPSAoc3RydWN0IHNwaV9pbXhfbWFzdGVyICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFteGNfcGxhdGZvcm1faW5mbykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgdGhlIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3Qgc3BpX2lteF9kYXRhKSk7CisJaWYgKCFtYXN0ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKKworCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBteGNfcGxhdGZvcm1faW5mby0+bnVtX2NoaXBzZWxlY3Q7CisKKwlzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXNwaV9pbXgtPmJpdGJhbmcubWFzdGVyID0gc3BpX21hc3Rlcl9nZXQobWFzdGVyKTsKKwlzcGlfaW14LT5jaGlwc2VsZWN0ID0gbXhjX3BsYXRmb3JtX2luZm8tPmNoaXBzZWxlY3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKSB7CisJCWlmIChzcGlfaW14LT5jaGlwc2VsZWN0W2ldIDwgMCkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBncGlvX3JlcXVlc3Qoc3BpX2lteC0+Y2hpcHNlbGVjdFtpXSwgRFJJVkVSX05BTUUpOworCQlpZiAocmV0KSB7CisJCQlpLS07CisJCQl3aGlsZSAoaSA+IDApCisJCQkJaWYgKHNwaV9pbXgtPmNoaXBzZWxlY3RbaV0gPj0gMCkKKwkJCQkJZ3Bpb19mcmVlKHNwaV9pbXgtPmNoaXBzZWxlY3RbaS0tXSk7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgY3MgZ3Bpb3MiKTsKKwkJCWdvdG8gb3V0X21hc3Rlcl9wdXQ7CisJCX0KKwl9CisKKwlzcGlfaW14LT5iaXRiYW5nLmNoaXBzZWxlY3QgPSBzcGlfaW14X2NoaXBzZWxlY3Q7CisJc3BpX2lteC0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9IHNwaV9pbXhfc2V0dXB4ZmVyOworCXNwaV9pbXgtPmJpdGJhbmcudHhyeF9idWZzID0gc3BpX2lteF90cmFuc2ZlcjsKKwlzcGlfaW14LT5iaXRiYW5nLm1hc3Rlci0+c2V0dXAgPSBzcGlfaW14X3NldHVwOworCXNwaV9pbXgtPmJpdGJhbmcubWFzdGVyLT5jbGVhbnVwID0gc3BpX2lteF9jbGVhbnVwOworCXNwaV9pbXgtPmJpdGJhbmcubWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0NTX0hJR0g7CisKKwlpbml0X2NvbXBsZXRpb24oJnNwaV9pbXgtPnhmZXJfZG9uZSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBwbGF0Zm9ybSByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2dwaW9fZnJlZTsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0X2dwaW9fZnJlZTsKKwl9CisKKwlzcGlfaW14LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghc3BpX2lteC0+YmFzZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9yZWxlYXNlX21lbTsKKwl9CisKKwlzcGlfaW14LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghc3BpX2lteC0+aXJxKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoc3BpX2lteC0+aXJxLCBzcGlfaW14X2lzciwgMCwgRFJJVkVSX05BTUUsIHNwaV9pbXgpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGlycSVkOiAlZFxuIiwgc3BpX2lteC0+aXJxLCByZXQpOworCQlnb3RvIG91dF9pb3VubWFwOworCX0KKworCWlmIChjcHVfaXNfbXgzMSgpIHx8IGNwdV9pc19teDM1KCkpIHsKKwkJc3BpX2lteC0+aW50Y3RybCA9IG14MzFfaW50Y3RybDsKKwkJc3BpX2lteC0+Y29uZmlnID0gbXgzMV9jb25maWc7CisJCXNwaV9pbXgtPnRyaWdnZXIgPSBteDMxX3RyaWdnZXI7CisJCXNwaV9pbXgtPnJ4X2F2YWlsYWJsZSA9IG14MzFfcnhfYXZhaWxhYmxlOworCX0gZWxzZSAgaWYgKGNwdV9pc19teDI3KCkgfHwgY3B1X2lzX214MjEoKSkgeworCQlzcGlfaW14LT5pbnRjdHJsID0gbXgyN19pbnRjdHJsOworCQlzcGlfaW14LT5jb25maWcgPSBteDI3X2NvbmZpZzsKKwkJc3BpX2lteC0+dHJpZ2dlciA9IG14MjdfdHJpZ2dlcjsKKwkJc3BpX2lteC0+cnhfYXZhaWxhYmxlID0gbXgyN19yeF9hdmFpbGFibGU7CisJfSBlbHNlIGlmIChjcHVfaXNfbXgxKCkpIHsKKwkJc3BpX2lteC0+aW50Y3RybCA9IG14MV9pbnRjdHJsOworCQlzcGlfaW14LT5jb25maWcgPSBteDFfY29uZmlnOworCQlzcGlfaW14LT50cmlnZ2VyID0gbXgxX3RyaWdnZXI7CisJCXNwaV9pbXgtPnJ4X2F2YWlsYWJsZSA9IG14MV9yeF9hdmFpbGFibGU7CisJfSBlbHNlCisJCUJVRygpOworCisJc3BpX2lteC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHNwaV9pbXgtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBjbG9ja1xuIik7CisJCXJldCA9IFBUUl9FUlIoc3BpX2lteC0+Y2xrKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CisJfQorCisJY2xrX2VuYWJsZShzcGlfaW14LT5jbGspOworCXNwaV9pbXgtPnNwaV9jbGsgPSBjbGtfZ2V0X3JhdGUoc3BpX2lteC0+Y2xrKTsKKworCWlmICghY3B1X2lzX214MzEoKSB8fCAhY3B1X2lzX214MzUoKSkKKwkJd3JpdGVsKDEsIHNwaV9pbXgtPmJhc2UgKyBNWENfUkVTRVQpOworCisJc3BpX2lteC0+aW50Y3RybChzcGlfaW14LCAwKTsKKworCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZzcGlfaW14LT5iaXRiYW5nKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImJpdGJhbmcgc3RhcnQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X2Nsa19wdXQ7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgInByb2JlZFxuIik7CisKKwlyZXR1cm4gcmV0OworCitvdXRfY2xrX3B1dDoKKwljbGtfZGlzYWJsZShzcGlfaW14LT5jbGspOworCWNsa19wdXQoc3BpX2lteC0+Y2xrKTsKK291dF9mcmVlX2lycToKKwlmcmVlX2lycShzcGlfaW14LT5pcnEsIHNwaV9pbXgpOworb3V0X2lvdW5tYXA6CisJaW91bm1hcChzcGlfaW14LT5iYXNlKTsKK291dF9yZWxlYXNlX21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK291dF9ncGlvX2ZyZWU6CisJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykKKwkJaWYgKHNwaV9pbXgtPmNoaXBzZWxlY3RbaV0gPj0gMCkKKwkJCWdwaW9fZnJlZShzcGlfaW14LT5jaGlwc2VsZWN0W2ldKTsKK291dF9tYXN0ZXJfcHV0OgorCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisJa2ZyZWUobWFzdGVyKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBzcGlfaW14X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlpbnQgaTsKKworCXNwaV9iaXRiYW5nX3N0b3AoJnNwaV9pbXgtPmJpdGJhbmcpOworCisJd3JpdGVsKDAsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCWNsa19kaXNhYmxlKHNwaV9pbXgtPmNsayk7CisJY2xrX3B1dChzcGlfaW14LT5jbGspOworCWZyZWVfaXJxKHNwaV9pbXgtPmlycSwgc3BpX2lteCk7CisJaW91bm1hcChzcGlfaW14LT5iYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspCisJCWlmIChzcGlfaW14LT5jaGlwc2VsZWN0W2ldID49IDApCisJCQlncGlvX2ZyZWUoc3BpX2lteC0+Y2hpcHNlbGVjdFtpXSk7CisKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGlfaW14X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKKwkucHJvYmUgPSBzcGlfaW14X3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcChzcGlfaW14X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzcGlfaW14X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzcGlfaW14X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzcGlfaW14X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3BpX2lteF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzcGlfaW14X2luaXQpOworbW9kdWxlX2V4aXQoc3BpX2lteF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTUEkgTWFzdGVyIENvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jIGIvZHJpdmVycy9zcGkvc3BpX3N0bXAuYwppbmRleCBkODcxZGMyLi4yNTUyYmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNzLT5kb25lKTsKIAogCWlmICghYnVzeV93YWl0KHJlYWRsKHNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKSAmIEJNX1NTUF9DVFJMMF9SVU4pKQotCQlzdGF0dXMgPSBFVElNRURPVVQ7CisJCXN0YXR1cyA9IC1FVElNRURPVVQ7CiAKIAlpZiAoIWRtYV9idWYpCiAJCWRtYV91bm1hcF9zaW5nbGUoc3MtPm1hc3Rlcl9kZXYsIHNwaV9idWZfZG1hLCBsZW4sIGRpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlkZXYuYyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCmluZGV4IGY5MjFiZDEuLjVkMjM5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaWRldi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCkBAIC01MzcsNyArNTM3LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcGlkZXZfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwaWRldl9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS8qIFJFVklTSVQgc3dpdGNoIHRvIGFpbyBwcmltaXRpdmVzLCBzbyB0aGF0IHVzZXJzcGFjZQogCSAqIGdldHMgbW9yZSBjb21wbGV0ZSBBUEkgY292ZXJhZ2UuICBJdCdsbCBzaW1wbGlmeSB0aGluZ3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggOWE0ZGQ1OS4uZDIxYjM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTU5LDggKzU5LDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcG9jaC9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWciCkBAIC05NSw4ICs5Myw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9LY29uZmlnIgpAQCAtMTI5LDcgKzEyNSw1IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9jb3dsb29wL0tjb25maWciCi0KIGVuZGlmICMgIVNUQUdJTkdfRVhDTFVERV9CVUlMRAogZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggMTA0ZjJmOC4uOGNiZjFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNiBAQAogb2JqLSQoQ09ORklHX1BSSVNNMl9VU0IpCSs9IHdsYW4tbmcvCiBvYmotJChDT05GSUdfRUNITykJCSs9IGVjaG8vCiBvYmotJChDT05GSUdfUE9DSCkJCSs9IHBvY2gvCi1vYmotJChDT05GSUdfQUdOWCkJCSs9IGFnbngvCiBvYmotJChDT05GSUdfT1RVUykJCSs9IG90dXMvCiBvYmotJChDT05GSUdfUlQyODYwKQkJKz0gcnQyODYwLwogb2JqLSQoQ09ORklHX1JUMjg3MCkJCSs9IHJ0Mjg3MC8KQEAgLTMwLDcgKzI5LDYgQEAKIG9iai0kKENPTkZJR19BTkRST0lEKQkJKz0gZHJlYW0vCiBvYmotJChDT05GSUdfRFNUKQkJKz0gZHN0Lwogb2JqLSQoQ09ORklHX1BPSE1FTEZTKQkJKz0gcG9obWVsZnMvCi1vYmotJChDT05GSUdfU1RMQzQ1WFgpCQkrPSBzdGxjNDV4eC8KIG9iai0kKENPTkZJR19CM0RGRykJCSs9IGIzZGZnLwogb2JqLSQoQ09ORklHX0lERV9QSElTT04pCSs9IHBoaXNvbi8KIG9iai0kKENPTkZJR19QTEFOOUFVVEgpCQkrPSBwOWF1dGgvCkBAIC00Niw0ICs0NCwzIEBACiBvYmotJChDT05GSUdfUkFSX1JFR0lTVEVSKQkrPSByYXIvCiBvYmotJChDT05GSUdfRFhfU0VQKQkJKz0gc2VwLwogb2JqLSQoQ09ORklHX0lJTykJCSs9IGlpby8KLW9iai0kKENPTkZJR19DT1dMT09QKQkJKz0gY293bG9vcC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQzNTQ5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWNvbmZpZyBBR05YCi0JdHJpc3RhdGUgIldpcmVsZXNzIEFpcmdvIEFHTlggc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdMQU5fODAyMTEgJiYgTUFDODAyMTEKLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIEFpcmdvIEFHTlgwMCB3aXJlbGVzcyBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIxNjU2NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotb2JqLSQoQ09ORklHX0FHTlgpCSs9IGFnbngubwotCi1hZ254LW9ianMgOj0JcmYubwlcCi0JCXBjaS5vCVwKLQkJeG1pdC5vCVwKLQkJdGFibGUubwlcCi0JCXN0YS5vCVwKLQkJcGh5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9UT0RPCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWJlYzc0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0yMDA4IDcvMTgKLQotVGhlIFJYIGhhcyBjYW4ndCByZWNlaXZlIE9GRE0gcGFja2V0IGNvcnJlY3RseSwKLUd1ZXNzIGl0IG5lZWQgYmUgZG8gUlggY2FsaWJyYXRlLgotCi0KLWJlZm9yZSAyMDA4IDMvMQotCi0xOiBUaGUgUlggZ2V0IHRvbyBtdWNoICJDUkMgZmFpbGVkIiBwYWtldHMsIGl0IG1ha2UgdGhlIGNhcmQgd29yayB2ZXJ5IHVuc3RhYmxlLAotMjogQWZ0ZXIgcnVubmluZyBhIHdoaWxlLCB0aGUgY2FyZCB3aWxsIGdldCBpbmZpbml0eSAiUlggRnJhbWUiIGFuZCAiRXJyb3IiCi1pbnRlcnJ1cHQsIG5vdCBrbm93IHRoZSByb290IHJlYXNvbiBzbyBmYXIsIHRyeSB0byBmaXggaXQKLTM6IFVzaW5nIHR3byB0eCBxdWV1ZSB0eGQgYW5kIHR4bSBidXQgbm90IG9ubHkgdHhtLgotNDogU2V0IHRoZSBoZHIgY29ycmVjdGx5LgotNTogVHJ5IHRvIGRvIHJlY2FsaWJyYXRlIGNvcnJldnRseQotNjogVG8gc3VwcG9ydCBHIG1vZGUgaW4gZnV0dXJlCi03OiBGaXggdGhlIG1hYyBhZGRyZXNzIGNhbid0IGJlIHJlYWRlZCBhbmQgc2V0IGNvcnJlY3RseSBpbiBCRSBtYWNoaW5lLgotODogRml4IGluY2x1ZGUgYW5kIGV4Y2x1ZGUgRkNTIGluIHByb21pc291cyBtb2RlIGFuZCBtYW5hZ2UgbW9kZQotOTogVXNpbmcgc3RhX25vdGlmeSB0byBub3RpY2Ugc3RhIGNoYW5nZQotMTA6IFR1cm4gb24gZnJhbWUgcmVjZXB0aW9uIGF0IHRoZSBlbmQgb2Ygc3RhcnQKLTExOiBHdWVzcyB0aGUgY2FyZCBzdXBwb3J0IEhXX01VTFRJQ0FTVF9GSUxURVIKLTEyOiBUaGUgdHggcHJvY2VzcyBzaG91bGQgYmUgaW1wbG1lbnQgYXRvbWljPwotMTM6IFVzaW5nIG1hYzgwMjExIGZ1bmN0aW9uIHRvIGNvbnRyb2wgdGhlIFRYJlJYIExFRC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2M2QyNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9hZ254LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotI2lmbmRlZiBBR05YX0hfCi0jZGVmaW5lIEFHTlhfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJ4bWl0LmgiCi0KLSNkZWZpbmUgUEZYCQkJCUtCVUlMRF9NT0ROQU1FICI6ICIKLQotc3RhdGljIGlubGluZSB1MzIgYWdueF9yZWFkMzIodm9pZCBfX2lvbWVtICptZW1fcmVnaW9uLCB1MzIgb2Zmc2V0KQotewotCXJldHVybiBpb3JlYWQzMihtZW1fcmVnaW9uICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfd3JpdGUzMih2b2lkIF9faW9tZW0gKm1lbV9yZWdpb24sIHUzMiBvZmZzZXQsIHUzMiB2YWwpCi17Ci0JaW93cml0ZTMyKHZhbCwgbWVtX3JlZ2lvbiArIG9mZnNldCk7Ci19Ci0KLS8qIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYWdueF9yYXRlc184MDIxMWJbXSA9IHsgKi8KLS8qIAl7IC5yYXRlID0gMTAsICovCi0vKiAJICAudmFsID0gMHhhLCAqLwotLyogCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLIH0sICovCi0vKiAJeyAucmF0ZSA9IDIwLCAqLwotLyogCSAgLnZhbCA9IDB4MTQsICovCi0vKiAJICAuaHdfdmFsdWUgPSAtMHgxNCwgKi8KLS8qIAkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX0NDS18yIH0sICovCi0vKiAJeyAucmF0ZSA9IDU1LCAqLwotLyogCSAgLnZhbCA9IDB4MzcsICovCi0vKiAJICAudmFsMiA9IC0weDM3LCAqLwotLyogCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLXzIgfSwgKi8KLS8qIAl7IC5yYXRlID0gMTEwLCAqLwotLyogCSAgLnZhbCA9IDB4NmUsICovCi0vKiAJICAudmFsMiA9IC0weDZlLCAqLwotLyogCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLXzIgfSAqLwotLyogfTsgKi8KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIGFnbnhfcmF0ZXNfODAyMTFnW10gPSB7Ci0vKiAJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAxLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LCAqLwotLyogCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gMiwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwgKi8KLS8qIAl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDMsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sICovCi0vKiAJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gNCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwgKi8KLQl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDEsIH0sCi0JeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSAyLCB9LAotCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMywgfSwKLQl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSA0LH0sCi0KLQl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDB4QiwgfSwKLQl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDB4RiwgfSwKLQl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAweEEgfSwKLQl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAweEUsIH0sCi0vKgl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSAweGQsIH0sICovCi0JeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gMHhELCB9LAotCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDB4OCwgfSwKLQl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAweEMsIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGFnbnhfY2hhbm5lbHNbXSA9IHsKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTIsIC5od192YWx1ZSA9IDEsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQyMiwgLmh3X3ZhbHVlID0gMywgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MjcsIC5od192YWx1ZSA9IDQsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQzNywgLmh3X3ZhbHVlID0gNiwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDIsIC5od192YWx1ZSA9IDcsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLmh3X3ZhbHVlID0gOSwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5od192YWx1ZSA9IDEwLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDY3LCAuaHdfdmFsdWUgPSAxMiwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NzIsIC5od192YWx1ZSA9IDEzLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQsIH0sCi19OwotCi0jZGVmaW5lIE5VTV9EUklWRV9NT0RFUwkyCi0vKiBBZ254IG9wZXJhdGUgbW9kZSAqLwotZW51bSB7Ci0JQUdOWF9NT0RFXzgwMjExQSwKLQlBR05YX01PREVfODAyMTFBX09PQiwKLQlBR05YX01PREVfODAyMTFBX01JTU8sCi0JQUdOWF9NT0RFXzgwMjExQl9TSE9SVCwKLQlBR05YX01PREVfODAyMTFCX0xPTkcsCi0JQUdOWF9NT0RFXzgwMjExRywKLQlBR05YX01PREVfODAyMTFHX09PQiwKLQlBR05YX01PREVfODAyMTFHX01JTU8sCi19OwotCi1lbnVtIHsKLQlBR05YX1VOSU5JVCwKLQlBR05YX1NUQVJULAotCUFHTlhfU1RPUCwKLX07Ci0KLXN0cnVjdCBhZ254X3ByaXYgewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCi0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBtdXRleCBtdXRleDsKLQl1bnNpZ25lZCBpbnQgaW5pdF9zdGF0dXM7Ci0KLQl2b2lkIF9faW9tZW0gKmN0bDsJLyogcG9pbnRlciB0byBiYXNlIHJhbSBhZGRyZXNzICovCi0Jdm9pZCBfX2lvbWVtICpkYXRhOwkvKiBwb2ludGVyIHRvIG1lbSByZWdpb24gIzIgKi8KLQotCXN0cnVjdCBhZ254X3Jpbmcgcng7Ci0Jc3RydWN0IGFnbnhfcmluZyB0eG07Ci0Jc3RydWN0IGFnbnhfcmluZyB0eGQ7Ci0KLQkvKiBOZWVkIHZvbGF0aWxlPyAqLwotCXUzMiBpcnFfc3RhdHVzOwotCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBwZXJpb2RpY193b3JrOyAvKiBQZXJpb2RpYyB0YXNrcyBsaWtlIHJlY2FsaWJyYXRlICovCi0Jc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgc3RhdHM7Ci0KLQkvKiB1bnNpZ25lZCBpbnQgcGh5bW9kZTsgKi8KLQlpbnQgbW9kZTsKLQlpbnQgY2hhbm5lbDsKLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0KLQl1OCBtYWNfYWRkcltFVEhfQUxFTl07Ci0JdTggcmV2aWQ7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7Ci19OwotCi0KLSNkZWZpbmUgQUdOWF9DSEFJTlNfTUFYCTYKLSNkZWZpbmUgQUdOWF9QRVJJT0RJQ19ERUxBWSA2MDAwMCAvKiB1bml0OiBtcyAqLwotI2RlZmluZSBMT0NBTF9TVEFJRAkwCS8qIHRoZSBzdGF0aW9uIGVudHJ5IGZvciB0aGUgY2FyZCBpdHNlbGYgKi8KLSNkZWZpbmUgQlNTSURfU1RBSUQJMQkvKiB0aGUgc3RhdGlvbiBlbnRyeSBmb3IgdGhlIGJzc3NpZCBBUCAqLwotI2RlZmluZQlzcGlfZGVsYXkoKQl1ZGVsYXkoNDApCi0jZGVmaW5lIGVlcHJvbV9kZWxheSgpCXVkZWxheSg0MCkKLSNkZWZpbmUJcm91dGluZ190YWJsZV9kZWxheSgpCXVkZWxheSg1MCkKLQotLyogUERVIHBvb2wgTUVNIHJlZ2lvbiAjMiAqLwotI2RlZmluZSBBR05YX1BEVVBPT0wJCTB4NDAwMDAJLyogUERVIHBvb2wgKi8KLSNkZWZpbmUgQUdOWF9QRFVQT09MX1NJWkUJMHg4MDAwCS8qIFBEVSBwb29sIHNpemUqLwotI2RlZmluZSBBR05YX1BEVV9UWF9XUQkJMHg0MTAwMAkvKiBQRFUgbGlzdCBUWCB3b3JrcXVldWUgKi8KLSNkZWZpbmUgQUdOWF9QRFVfRlJFRQkJMHg0MTgwMAkvKiBGcmVlIFBvb2wgKi8KLSNkZWZpbmUgUERVX1NJWkUJCTB4ODAJLyogRnJlZSBQb29sIG5vZGUgc2l6ZSAqLwotI2RlZmluZSBQRFVfRlJFRV9DTlQJCTB4ZDAgLyogRnJlZSBwb29sIG5vZGUgY291bnQgKi8KLQotCi0vKiBSRiBzdHVmZnMgKi8KLWV4dGVybiB2b2lkIHJmX2NoaXBzX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBzcGlfcmNfd3JpdGUodm9pZCBfX2lvbWVtICptZW1fcmVnaW9uLCB1MzIgY2hpcF9pZHMsIHUzMiBzdyk7Ci1leHRlcm4gdm9pZCBjYWxpYnJhdGVfb3NjaWxsYXRvcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGRvX2NhbGlicmF0aW9uKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgYW50ZW5uYV9jYWxpYnJhdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBfX2FudGVubmFfY2FsaWJyYXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgcHJpbnRfb2Zmc2V0cyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgYWdueF9zZXRfY2hhbm5lbChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCk7Ci0KLQotI2VuZGlmIC8qIEFHTlhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9kZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTQ3ZjMyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2RlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MTYgKzAsMCBAQAotI2lmbmRlZiBBR05YX0RFQlVHX0hfCi0jZGVmaW5lIEFHTlhfREVCVUdfSF8KLQotI2luY2x1ZGUgImFnbnguaCIKLSNpbmNsdWRlICJwaHkuaCIKLSNpbmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJ4bWl0LmgiCi0KLSNkZWZpbmUgQUdOWF9UUkFDRSAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnVuY3Rpb246JXMgbGluZTolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKQotCi0jZGVmaW5lIFBSSU5US19MRTE2KHByZWZpeCwgdmFyKQlwcmludGsoS0VSTl9ERUJVRyBQRlggI3ByZWZpeCAiOiAiICN2YXIgIiAweCUuNHhcbiIsIGxlMTZfdG9fY3B1KHZhcikpCi0jZGVmaW5lIFBSSU5US19MRTMyKHByZWZpeCwgdmFyKQlwcmludGsoS0VSTl9ERUJVRyBQRlggI3ByZWZpeCAiOiAiICN2YXIgIiAweCUuOHhcbiIsIGxlMzJfdG9fY3B1KHZhcikpCi0jZGVmaW5lIFBSSU5US19VOChwcmVmaXgsIHZhcikgCQlwcmludGsoS0VSTl9ERUJVRyBQRlggI3ByZWZpeCAiOiAiICN2YXIgIiAweCUuMnhcbiIsIHZhcikKLSNkZWZpbmUgUFJJTlRLX0JFMTYocHJlZml4LCB2YXIpCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI3ZhciAiIDB4JS40eFxuIiwgYmUxNl90b19jcHUodmFyKSkKLSNkZWZpbmUgUFJJTlRLX0JFMzIocHJlZml4LCB2YXIpCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI3ZhciAiIDB4JS44eFxuIiwgYmUzMl90b19jcHUodmFyKSkKLSNkZWZpbmUgUFJJTlRLX0JJVFMocHJlZml4LCBmaWVsZCkgICAgCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI2ZpZWxkICI6IDB4JXhcbiIsIChyZWcgJiBmaWVsZCkgPj4gZmllbGQjI19TSElGVCkKLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfYnVnKGNoYXIgKnJlYXNvbikKLXsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlc1xuIiwgcmVhc29uKTsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfcHJpbnRfZGVzYyhzdHJ1Y3QgYWdueF9kZXNjICpkZXNjKQotewotCXUzMiByZWcgPSBiZTMyX3RvX2NwdShkZXNjLT5mcmFnKTsKLQotCVBSSU5US19CSVRTKERFU0MsIFBBQ0tFVF9MRU4pOwotCi0JaWYgKHJlZyAmIEZJUlNUX0ZSQUcpIHsKLQkJUFJJTlRLX0JJVFMoREVTQywgRklSU1RfUEFDS0VUX01BU0spOwotCQlQUklOVEtfQklUUyhERVNDLCBGSVJTVF9SRVNFUlYyKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgRklSU1RfVEtJUF9FUlJPUik7Ci0JCVBSSU5US19CSVRTKERFU0MsIEZJUlNUX1RLSVBfUEFDS0VUKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgRklSU1RfUkVTRVJWMSk7Ci0JCVBSSU5US19CSVRTKERFU0MsIEZJUlNUX0ZSQUdfTEVOKTsKLQl9IGVsc2UgewotCQlQUklOVEtfQklUUyhERVNDLCBTVUJfUkVTRVJWMik7Ci0JCVBSSU5US19CSVRTKERFU0MsIFNVQl9US0lQX0VSUk9SKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgU1VCX1RLSVBfUEFDS0VUKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgU1VCX1JFU0VSVjEpOwotCQlQUklOVEtfQklUUyhERVNDLCBTVUJfRlJBR19MRU4pOwotCX0KLQotCVBSSU5US19CSVRTKERFU0MsIEZJUlNUX0ZSQUcpOwotCVBSSU5US19CSVRTKERFU0MsIExBU1RfRlJBRyk7Ci0JUFJJTlRLX0JJVFMoREVTQywgT1dORVIpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2llZWU4MDIxMWJfcGh5X2hkcihfX2JlMzIgXzExYjAsIF9fYmUzMiBfMTFiMSkKLXsKLQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWdueF9wcmludF9oZHIoc3RydWN0IGFnbnhfaGRyICpoZHIpCi17Ci0JdTMyIHJlZzsKLQlpbnQgaTsKLQotCXJlZyA9IGJlMzJfdG9fY3B1KGhkci0+cmVnMCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBSVFMpOwotCVBSSU5US19CSVRTKEhEUiwgTVVMVElDQVNUKTsKLQlQUklOVEtfQklUUyhIRFIsIEFDSyk7Ci0JUFJJTlRLX0JJVFMoSERSLCBUTSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBSRUxBWSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBSRVZJU0VEX0ZDUyk7Ci0JUFJJTlRLX0JJVFMoSERSLCBORVhUX0JVRkZFUl9BRERSKTsKLQotCXJlZyA9IGJlMzJfdG9fY3B1KGhkci0+cmVnMSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBNQUNfSERSX0xFTik7Ci0JUFJJTlRLX0JJVFMoSERSLCBEVVJBVElPTl9PVkVSSURFKTsKLQlQUklOVEtfQklUUyhIRFIsIFBIWV9IRFJfT1ZFUklERSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBDUkNfRkFJTCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBTRVFVRU5DRV9OVU1CRVIpOwotCVBSSU5US19CSVRTKEhEUiwgQlVGRl9IRUFEX0FERFIpOwotCi0JcmVnID0gYmUzMl90b19jcHUoaGRyLT5yZWcyKTsKLQlQUklOVEtfQklUUyhIRFIsIFBEVV9DT1VOVCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBXRVBfS0VZKTsKLQlQUklOVEtfQklUUyhIRFIsIFVTRVNfV0VQX0tFWSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBLRUVQX0FMSVZFKTsKLQlQUklOVEtfQklUUyhIRFIsIEJVRkZfVEFJTF9BRERSKTsKLQotCXJlZyA9IGJlMzJfdG9fY3B1KGhkci0+cmVnMyk7Ci0JUFJJTlRLX0JJVFMoSERSLCBDVFNfMTFHKTsKLQlQUklOVEtfQklUUyhIRFIsIFJUU18xMUcpOwotCVBSSU5US19CSVRTKEhEUiwgRlJBR19TSVpFKTsKLQlQUklOVEtfQklUUyhIRFIsIFBBWUxPQURfTEVOKTsKLQlQUklOVEtfQklUUyhIRFIsIEZSQUdfTlVNKTsKLQotCXJlZyA9IGJlMzJfdG9fY3B1KGhkci0+cmVnNCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBSRUxBWV9TVEFJRCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBTVEFUSU9OX0lEKTsKLQlQUklOVEtfQklUUyhIRFIsIFdPUktRVUVVRV9JRCk7Ci0KLQlyZWcgPSBiZTMyX3RvX2NwdShoZHItPnJlZzUpOwotCS8qIHByaW50ZiB0aGUgcm91dGUgZmxhZyAqLwotCVBSSU5US19CSVRTKEhEUiwgUk9VVEVfSE9TVCk7Ci0JUFJJTlRLX0JJVFMoSERSLCBST1VURV9DQVJEX0NQVSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBST1VURV9FTkNSWVBUSU9OKTsKLQlQUklOVEtfQklUUyhIRFIsIFJPVVRFX1RYKTsKLQlQUklOVEtfQklUUyhIRFIsIFJPVVRFX1JYMSk7Ci0JUFJJTlRLX0JJVFMoSERSLCBST1VURV9SWDIpOwotCVBSSU5US19CSVRTKEhEUiwgUk9VVEVfQ09NUFJFU1NJT04pOwotCi0JUFJJTlRLX0JFMzIoSERSLCBoZHItPl8xMWcwKTsKLQlQUklOVEtfQkUzMihIRFIsIGhkci0+XzExZzEpOwotCVBSSU5US19CRTMyKEhEUiwgaGRyLT5fMTFiMCk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPl8xMWIxKTsKLQotCWR1bXBfaWVlZTgwMjExYl9waHlfaGRyKGhkci0+XzExYjAsIGhkci0+XzExYjEpOwotCi0JLyogRml4bWUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZHItPm1hY19oZHIpOyBpKyspIHsKLQkJaWYgKGkgPT0gMCkKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiSUVFRTgwMjExIEhEUjogIik7Ci0JCXByaW50aygiJS4yeCAiLCBoZHItPm1hY19oZHJbaV0pOwotCQlpZiAoaSArIDEgPT0gQVJSQVlfU0laRShoZHItPm1hY19oZHIpKQotCQkJcHJpbnRrKCJcbiIpOwotCX0KLQotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5ydHNfZHVyYXRpb24pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5sYXN0X2R1cmF0aW9uKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+c2VjX2xhc3RfZHVyYXRpb24pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5vdGhlcl9kdXJhdGlvbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPnR4X290aGVyX2R1cmF0aW9uKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+bGFzdF8xMWdfbGVuKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+b3RoZXJfMTFnX2xlbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPmxhc3RfMTFiX2xlbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPm90aGVyXzExYl9sZW4pOwotCi0JLyogRklYTUUgKi8KLQlyZWcgPSBiZTE2X3RvX2NwdShoZHItPnJlZzYpOwotCVBSSU5US19CSVRTKEhEUiwgTUJGKTsKLQlQUklOVEtfQklUUyhIRFIsIFJTVkQ0KTsKLQotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5yeF9mcmFnX3N0YXQpOwotCi0JUFJJTlRLX0JFMzIoSERSLCBoZHItPnRpbWVfc3RhbXApOwotCVBSSU5US19CRTMyKEhEUiwgaGRyLT5waHlfc3RhdHNfaGkpOwotCVBSSU5US19CRTMyKEhEUiwgaGRyLT5waHlfc3RhdHNfbG8pOwotCVBSSU5US19CRTMyKEhEUiwgaGRyLT5taWNfa2V5MCk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPm1pY19rZXkxKTsKLX0gLyogYWdueF9wcmludF9oZHIgKi8KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWdueF9wcmludF9yeF9oZHIoc3RydWN0IGFnbnhfaGRyICpoZHIpCi17Ci0JYWdueF9wcmludF9oZHIoaGRyKTsKLQotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5yeC5yeF9wYWNrZXRfZHVyYXRpb24pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5yeC5yZXBsYXlfY250KTsKLQotCVBSSU5US19VOChIRFIsIGhkci0+cnhfY2hhbm5lbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X3R4X2hkcihzdHJ1Y3QgYWdueF9oZHIgKmhkcikKLXsKLQlhZ254X3ByaW50X2hkcihoZHIpOwotCi0JUFJJTlRLX1U4KEhEUiwgaGRyLT50eC5sb25nX3JldHJ5X2xpbWl0KTsKLQlQUklOVEtfVTgoSERSLCBoZHItPnR4LnNob3J0X3JldHJ5X2xpbWl0KTsKLQlQUklOVEtfVTgoSERSLCBoZHItPnR4LmxvbmdfcmV0cnlfY250KTsKLQlQUklOVEtfVTgoSERSLCBoZHItPnR4LnNob3J0X3JldHJ5X2NudCk7Ci0KLQlQUklOVEtfVTgoSERSLCBoZHItPnJ4X2NoYW5uZWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXN0cnVjdCBhZ254X3N0YV9wb3dlciBwb3dlcjsKLQl1MzIgcmVnOwotCi0JZ2V0X3N0YV9wb3dlcihwcml2LCAmcG93ZXIsIHN0YV9pZHgpOwotCi0JcmVnID0gbGUzMl90b19jcHUocG93ZXIucmVnKTsKLQlQUklOVEtfQklUUyhTVEFfUE9XRVIsIFNJR05BTCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBSQVRFKTsKLQlQUklOVEtfQklUUyhTVEFfUE9XRVIsIFRJRlMpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgRURDRik7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBDSEFOTkVMX0JPTkQpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgUEhZX01PREUpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgUE9XRVJfTEVWRUwpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgTlVNX1RSQU5TTUlUVEVSUyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYWdueF9wcmludF9zdGFfdHhfd3Eoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHN0YV9pZHgsIHVuc2lnbmVkIGludCB3cV9pZHgpCi17Ci0Jc3RydWN0IGFnbnhfc3RhX3R4X3dxIHR4X3dxOwotCXUzMiByZWc7Ci0KLQlnZXRfc3RhX3R4X3dxKHByaXYsICZ0eF93cSwgc3RhX2lkeCwgd3FfaWR4KTsKLQotCXJlZyA9IGxlMzJfdG9fY3B1KHR4X3dxLnJlZzApOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgVEFJTF9QT0lOVEVSKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEhFQURfUE9JTlRFUl9MT1cpOwotCi0JcmVnID0gbGUzMl90b19jcHUodHhfd3EucmVnMyk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBIRUFEX1BPSU5URVJfSElHSCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBBQ0tfUE9JTlRFUl9MT1cpOwotCi0JcmVnID0gbGUzMl90b19jcHUodHhfd3EucmVnMSk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBBQ0tfUE9JTlRFUl9ISUdIKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEhFQURfVElNT1VUX1RBSUxfUEFDS19DTlQpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgQUNLX1RJTU9VVF9UQUlMX1BBQ0tfQ05UKTsKLQotCXJlZyA9IGxlMzJfdG9fY3B1KHR4X3dxLnJlZzIpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgSEVBRF9USU1PVVRfV0lOX0xJTV9CWVRFX0NOVCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBIRUFEX1RJTU9VVF9XSU5fTElNX0ZSQUdfQ05UKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIFdPUktfUVVFVUVfQUNLX1RZUEUpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgV09SS19RVUVVRV9WQUxJRCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X3N0YV90cmFmZmljKHN0cnVjdCBhZ254X3N0YV90cmFmZmljICp0cmFmZmljKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBsZTMyX3RvX2NwdSh0cmFmZmljLT5yZWcwKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgQUNLX1RJTU9VVF9DTlQpOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBUUkFGRklDX0FDS19UWVBFKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgTkVXX1BBQ0tFVCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RSQUZGSUMsIFRSQUZGSUNfVkFMSUQpOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBSWF9IRFJfREVTQ19QT0lOVEVSKTsKLQotCXJlZyA9IGxlMzJfdG9fY3B1KHRyYWZmaWMtPnJlZzEpOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBSWF9QQUNLRVRfVElNRVNUQU1QKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgVFJBRkZJQ19SRVNFUlZFRCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RSQUZGSUMsIFNWKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgUlhfU0VRVUVOQ0VfTlVNKTsKLQotCVBSSU5US19MRTMyKFNUQV9UUkFGRklDLCB0cmFmZmljLT50eF9yZXBsYXlfY250X2xvdyk7Ci0KLQlQUklOVEtfTEUxNihTVEFfVFJBRkZJQywgdHJhZmZpYy0+dHhfcmVwbGF5X2NudF9oaWdoKTsKLQlQUklOVEtfTEUxNihTVEFfVFJBRkZJQywgdHJhZmZpYy0+cnhfcmVwbGF5X2NudF9oaWdoKTsKLQotCVBSSU5US19MRTMyKFNUQV9UUkFGRklDLCB0cmFmZmljLT5yeF9yZXBsYXlfY250X2xvdyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X3N0YShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKLXsKLQlzdHJ1Y3QgYWdueF9zdGEgc3RhdGlvbjsKLQlzdHJ1Y3QgYWdueF9zdGEgKnN0YSA9ICZzdGF0aW9uOwotCXUzMiByZWc7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlnZXRfc3RhKHByaXYsIHN0YSwgc3RhX2lkeCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQlQUklOVEtfTEUzMihTVEEsIHN0YS0+dHhfc2Vzc2lvbl9rZXlzW2ldKTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQlQUklOVEtfTEUzMihTVEEsIHN0YS0+cnhfc2Vzc2lvbl9rZXlzW2ldKTsKLQotCXJlZyA9IGxlMzJfdG9fY3B1KHN0YS0+cmVnKTsKLQlQUklOVEtfQklUUyhTVEEsIElEXzEpOwotCVBSSU5US19CSVRTKFNUQSwgSURfMCk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBFTkFCTEVfQ09OQ0FURU5BVElPTik7Ci0JUFJJTlRLX0JJVFMoU1RBLCBFTkFCTEVfREVDT01QUkVTU0lPTik7Ci0JUFJJTlRLX0JJVFMoU1RBLCBTVEFfUkVTRVJWRUQpOwotCVBSSU5US19CSVRTKFNUQSwgRUFQKTsKLQlQUklOVEtfQklUUyhTVEEsIEVEX05VTEwpOwotCVBSSU5US19CSVRTKFNUQSwgRU5DUllQVElPTl9QT0xJQ1kpOwotCVBSSU5US19CSVRTKFNUQSwgREVGSU5FRF9LRVlfSUQpOwotCVBSSU5US19CSVRTKFNUQSwgRklYRURfS0VZKTsKLQlQUklOVEtfQklUUyhTVEEsIEtFWV9WQUxJRCk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBTVEFUSU9OX1ZBTElEKTsKLQotCVBSSU5US19MRTMyKFNUQSwgc3RhLT50eF9hZXNfYmxrc191bmljYXN0KTsKLQlQUklOVEtfTEUzMihTVEEsIHN0YS0+cnhfYWVzX2Jsa3NfdW5pY2FzdCk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+YWVzX2Zvcm1hdF9lcnJfdW5pY2FzdF9jbnQpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5hZXNfcmVwbGF5X3VuaWNhc3QpOwotCi0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPmFlc19kZWNyeXB0X2Vycl91bmljYXN0KTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+YWVzX2RlY3J5cHRfZXJyX2RlZmF1bHQpOwotCi0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnNpbmdsZV9yZXRyeV9wYWNrZXRzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+ZmFpbGVkX3R4X3BhY2tldHMpOwotCi0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPm11dGlfcmV0cnlfcGFja2V0cyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPmFja190aW1lb3V0cyk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+ZnJhZ190eF9jbnQpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5ydHNfYnJxX3NlbnQpOwotCi0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnR4X3BhY2tldHMpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5jdHNfYmFja190aW1lb3V0KTsKLQotCVBSSU5US19MRTMyKFNUQSwgc3RhLT5waHlfc3RhdHNfaGlnaCk7Ci0JUFJJTlRLX0xFMzIoU1RBLCBzdGEtPnBoeV9zdGF0c19sb3cpOwotCi0JLyogZm9yIChpID0gMDsgaSA8IDg7IGkrKykgKi8KLQlhZ254X3ByaW50X3N0YV90cmFmZmljKHN0YS0+dHJhZmZpYyArIDApOwotCi0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3MwX2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3MxX2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3MyX2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3MzX2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3M0X2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3M1X2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3M2X2ZyYWdfc3VjY2Vzcyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3M3X2ZyYWdfc3VjY2Vzcyk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+bnVtX2ZyYWdfbm9uX3ByaW1lX3JhdGVzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+YWNrX3RpbWVvdXRfbm9uX3ByaW1lX3JhdGVzKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9pZWVlODAyMTFfaGRyKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIGNoYXIgKnRhZykKLXsKLQl1MTYgZmN0bDsKLQlpbnQgaGRybGVuOwotCi0JZmN0bCA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0Jc3dpdGNoIChmY3RsICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlwcmludGsoUEZYICIlcyBEQVRBICIsIHRhZyk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKLQkJcHJpbnRrKFBGWCAiJXMgQ1RMICIsIHRhZyk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6Ci0JCXByaW50ayhQRlggIiVzIE1HTVQgIiwgdGFnKTsKLQkJc3dpdGNoIChmY3RsICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROgotCQkJcHJpbnRrKCJTdWJUeXBlOiBBU1NPQ19SRVEgIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKLQkJCXByaW50aygiU3ViVHlwZTogQVNTT0NfUkVTUCAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUToKLQkJCXByaW50aygiU3ViVHlwZTogUkVBU1NPQ19SRVEgIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBSRUFTU09DX1JFU1AgIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgotCQkJcHJpbnRrKCJTdWJUeXBlOiBQUk9CRV9SRVEgIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJCXByaW50aygiU3ViVHlwZTogUFJPQkVfUkVTUCAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046Ci0JCQlwcmludGsoIlN1YlR5cGU6IEJFQUNPTiAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVElNOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBBVElNICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBESVNBU1NPQyAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBBVVRIICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKLQkJCXByaW50aygiU3ViVHlwZTogREVBVVRIICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKLQkJCXByaW50aygiU3ViVHlwZTogQUNUSU9OICIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoIlN1YlR5cGU6IFVua25vd1xuIik7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKFBGWCAiJXMgUGFja2V0IHR5cGU6IFVua25vd1xuIiwgdGFnKTsKLQl9Ci0KLQloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjdGwpOwotCi0JaWYgKGhkcmxlbiA+PSA0KQotCQlwcmludGsoIkZDPTB4JTA0eCBEVVI9MHglMDR4IiwKLQkJICAgICAgIGZjdGwsIGxlMTZfdG9fY3B1KGhkci0+ZHVyYXRpb25faWQpKTsKLQlpZiAoaGRybGVuID49IDEwKQotCQlwcmludGsoIiBBMT0lcE0iLCBoZHItPmFkZHIxKTsKLQlpZiAoaGRybGVuID49IDE2KQotCQlwcmludGsoIiBBMj0lcE0iLCBoZHItPmFkZHIyKTsKLQlpZiAoaGRybGVuID49IDI0KQotCQlwcmludGsoIiBBMz0lcE0iLCBoZHItPmFkZHIzKTsKLQlpZiAoaGRybGVuID49IDMwKQotCQlwcmludGsoIiBBND0lcE0iLCBoZHItPmFkZHI0KTsKLQlwcmludGsoIlxuIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3R4bV9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MWU4OyBpICs9IDQpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiVFhNOiAleC0tLT4gMHglLjh4XG4iLCBpLCBpb3JlYWQzMihjdGwgKyBpKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9yeG1fcmVnaXN0ZXJzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8PSAweDEwODsgaSArPSA0KQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlJYTTogJXgtLS0+IDB4JS44eFxuIiwgaSwgaW9yZWFkMzIoY3RsICsgMHgyMDAwICsgaSkpOwotfQotc3RhdGljIGlubGluZSB2b2lkIGR1bXBfYm1fcmVnaXN0ZXJzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8PSAweDkwOyBpICs9IDQpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiQk06ICV4LS0tPiAweCUuOHhcbiIsIGksIGlvcmVhZDMyKGN0bCArIDB4MmMwMCArIGkpKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2Npcl9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4Yjg7IGkgKz0gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJDSVI6ICV4LS0tPiAweCUuOHhcbiIsIGksIGlvcmVhZDMyKGN0bCArIDB4MzAwMCArIGkpKTsKLX0KLQotI2VuZGlmIC8qIEFHTlhfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcGNpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYjU0ODkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGNpLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MzUgKzAsMCBAQAotLyoqCi0gKiBBaXJnbyBNSU1PIHdpcmVsZXNzIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNyBMaSBZYW5CbyA8ZHJlYW1mbHkyODFAZ21haWwuY29tPgotCi0gKiBUaGFua3MgZm9yIEplZmYgV2lsbGlhbXMgPGFuZ2VsYmFuZUBnbWFpbC5jb20+IGRvIHJldmVyc2UgZW5naW5lZXIKLSAqIHdvcmtzIGFuZCBwdWJsaXNoZWQgdGhlIFNQRUNTIGF0IGh0dHA6Ly9haXJnby53ZHdjb25zdWx0aW5nLm5ldC9teW1vaW4KLQotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgImFnbnguaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInhtaXQuaCIKLSNpbmNsdWRlICJwaHkuaCIKLQotTU9EVUxFX0FVVEhPUigiTGkgWWFuQm8gPGRyZWFtZmx5MjgxQGdtYWlsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQWlyZ28gTUlNTyBQQ0kgd2lyZWxlc3MgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ254X3BjaV9pZF90YmxbXSBfX2RldmluaXRkYXRhID0gewotCXsgUENJX0RFVklDRSgweDE3Y2IsIDB4MDAwMSkgfSwJLyogQmVrbGluIEY1ZDgwMTAsIE5ldGdlYXIgV0dNNTExIGV0YyAqLwotCXsgUENJX0RFVklDRSgweDE3Y2IsIDB4MDAwMikgfSwJLyogTmV0Z2VhciBXcG50NTExICovCi0JeyAwIH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZ254X3BjaV9pZF90YmwpOwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X2ludGVycnVwdF9hY2soc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTMyICpyZWFzb24pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCWlmICgqcmVhc29uICYgQUdOWF9TVEFUX1JYKSB7Ci0JCS8qIE1hcmsgY29tcGxldGUgUlggKi8KLQkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfUlhDVEwpOwotCQlyZWcgfD0gMHg0OwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci0JCS8qIGRpc2FibGUgUnggaW50ZXJydXB0ICovCi0JfQotCWlmICgqcmVhc29uICYgQUdOWF9TVEFUX1RYKSB7Ci0JCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1RYRENUTCk7Ci0JCWlmIChyZWcgJiAweDQpIHsKLQkJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfQ0lSX1RYRENUTCk7Ci0JCQkqcmVhc29uIHw9IEFHTlhfU1RBVF9UWEQ7Ci0JCX0KLQkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfVFhNQ1RMKTsKLQkJaWYgKHJlZyAmIDB4NCkgewotCQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfVFhNQ1RMKTsKLQkJCSpyZWFzb24gfD0gQUdOWF9TVEFUX1RYTTsKLQkJfQotCX0KLSNpZiAwCi0JaWYgKCpyZWFzb24gJiBBR05YX1NUQVRfWCkgewotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0JCS8qIEZJWE1FIHJlaW5pdCBpbnRlcnJ1cHQgbWFzayAqLwotCQlyZWcgPSAweGMzOTBiZjkgJiB+SVJRX1RYX0JFQUNPTjsKLQkJcmVnICY9IH5JUlFfVFhfRElTQUJMRTsKLQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfTUFTSyk7Ci0JCWlvd3JpdGUzMigweDgwMCwgY3RsICsgQUdOWF9DSVJfQkxLQ1RMKTsKLQl9Ci0jZW5kaWYKLX0gLyogYWdueF9pbnRlcnJ1cHRfYWNrICovCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBhZ254X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKLQl1MzIgaXJxX3JlYXNvbjsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0KLS8qCXByaW50ayhLRVJOX0VSUiBQRlggIkdldCBhIGludGVycnVwdCAlc1xuIiwgX19mdW5jX18pOyAqLwotCi0JaWYgKHByaXYtPmluaXRfc3RhdHVzICE9IEFHTlhfU1RBUlQpCi0JCWdvdG8gb3V0OwotCi0JLyogRmlYTUUgIEhlcmUgaGFzIG5vIGxvY2ssIElzIHRoaXMgd2lsbCBsZWFkIHRvIHJhY2U/ICovCi0JaXJxX3JlYXNvbiA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX0JMS0NUTCk7Ci0JaWYgKCEoaXJxX3JlYXNvbiAmIDB4NykpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gSVJRX0hBTkRMRUQ7Ci0JcHJpdi0+aXJxX3N0YXR1cyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX1NUQVQpOwotCi0vKglwcmludGsoUEZYICJJbnRlcnJ1cHQgcmVhc29uIGlzIDB4JXhcbiIsIGlycV9yZWFzb24pOyAqLwotCS8qIE1ha2Ugc3VyZSB0aGUgdHhtIGFuZCB0eGQgZmxhZ3MgZG9uJ3QgY29uZmxpY3Qgd2l0aCBvdGhlciB1bmtub3duCi0JICAgaW50ZXJydXB0IGZsYWcsIG1heWJlIGlzIG5vdCBuZWNlc3NhcnkgKi8KLQlpcnFfcmVhc29uICY9IDB4RjsKLQotCWRpc2FibGVfcnhfaW50ZXJydXB0KHByaXYpOwotCS8qIFRPRE8gTWFrZSBzdXJlIHRoZSBjYXJkIGZpbmlzaGVkIGluaXRpYWxpemVkICovCi0JYWdueF9pbnRlcnJ1cHRfYWNrKHByaXYsICZpcnFfcmVhc29uKTsKLQotCWlmIChpcnFfcmVhc29uICYgQUdOWF9TVEFUX1JYKQotCQloYW5kbGVfcnhfaXJxKHByaXYpOwotCWlmIChpcnFfcmVhc29uICYgQUdOWF9TVEFUX1RYRCkKLQkJaGFuZGxlX3R4ZF9pcnEocHJpdik7Ci0JaWYgKGlycV9yZWFzb24gJiBBR05YX1NUQVRfVFhNKQotCQloYW5kbGVfdHhtX2lycShwcml2KTsKLQlpZiAoaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9YKQotCQloYW5kbGVfb3RoZXJfaXJxKHByaXYpOwotCi0JZW5hYmxlX3J4X2ludGVycnVwdChwcml2KTsKLW91dDoKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0gLyogYWdueF9pbnRlcnJ1cHRfaGFuZGxlciAqLwotCi0KLS8qIEZJWE1FICovCi1zdGF0aWMgaW50IGFnbnhfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCUFHTlhfVFJBQ0U7Ci0JcmV0dXJuIF9hZ254X3R4KGRldi0+cHJpdiwgc2tiKTsKLX0gLyogYWdueF90eCAqLwotCi0KLXN0YXRpYyBpbnQgYWdueF9nZXRfbWFjX2FkZHJlc3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBBdHRlbnRpb24hIGRpcmVjdGx5IHJlYWQgdGhlIE1BQyBvciBvdGhlciBkYXRlIGZyb20gRUVQUk9NIHdpbGwKLQkgbGVhZCB0byBjYXJkYnVzKFdHTTUxMSkgbG9jayB1cCB3aGVuIHdyaXRlIHRvIFBNIFBMTCByZWdpc3RlciAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHgzNTQ0KTsKLQl1ZGVsYXkoNDApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHgzNTRjKTsKLQl1ZGVsYXkoNTApOwotCS8qIEdldCB0aGUgbWFjIGFkZHJlc3MgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIDB4MzU0NCk7Ci0JdWRlbGF5KDQwKTsKLQotCS8qIEhBQ0sgKi8KLQlyZWcgPSBjcHVfdG9fbGUzMihyZWcpOwotCXByaXYtPm1hY19hZGRyWzBdID0gKCh1OCAqKSZyZWcpWzJdOwotCXByaXYtPm1hY19hZGRyWzFdID0gKCh1OCAqKSZyZWcpWzNdOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHgzNTQ4KTsKLQl1ZGVsYXkoNTApOwotCSooKHUzMiAqKShwcml2LT5tYWNfYWRkciArIDIpKSA9IGNwdV90b19sZTMyKHJlZyk7Ci0KLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi0+bWFjX2FkZHIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJyZWFkIG1hYyAlcE1cbiIsIHByaXYtPm1hY19hZGRyKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkludmFsaWQgaHdhZGRyISBVc2luZyByYW5kb20gaHdhZGRyXG4iKTsKLQkJcmFuZG9tX2V0aGVyX2FkZHIocHJpdi0+bWFjX2FkZHIpOwotCX0KLQotCXJldHVybiAwOwotfSAvKiBhZ254X2dldF9tYWNfYWRkcmVzcyAqLwotCi1zdGF0aWMgaW50IGFnbnhfYWxsb2NfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBBbGxvY2F0ZSBSWC9UWE0vVFhEIHJpbmdzIGluZm8gKi8KLQlwcml2LT5yeC5zaXplID0gQUdOWF9SWF9SSU5HX1NJWkU7Ci0JcHJpdi0+dHhtLnNpemUgPSBBR05YX1RYTV9SSU5HX1NJWkU7Ci0JcHJpdi0+dHhkLnNpemUgPSBBR05YX1RYRF9SSU5HX1NJWkU7Ci0KLQlsZW4gPSBwcml2LT5yeC5zaXplICsgcHJpdi0+dHhtLnNpemUgKyBwcml2LT50eGQuc2l6ZTsKLQotLyoJcHJpdi0+cnguaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pICogbGVuLCBHRlBfS0VSTkVMKTsgKi8KLQlwcml2LT5yeC5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFnbnhfaW5mbykgKiBsZW4sIEdGUF9BVE9NSUMpOwotCWlmICghcHJpdi0+cnguaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcHJpdi0+dHhtLmluZm8gPSBwcml2LT5yeC5pbmZvICsgcHJpdi0+cnguc2l6ZTsKLQlwcml2LT50eGQuaW5mbyA9IHByaXYtPnR4bS5pbmZvICsgcHJpdi0+dHhtLnNpemU7Ci0KLQkvKiBBbGxvY2F0ZSBSWC9UWE0vVFhEIGRlc2NyaXB0b3JzICovCi0JcHJpdi0+cnguZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemVvZihzdHJ1Y3QgYWdueF9kZXNjKSAqIGxlbiwKLQkJCQkJICAgICAmcHJpdi0+cnguZG1hKTsKLQlpZiAoIXByaXYtPnJ4LmRlc2MpIHsKLQkJa2ZyZWUocHJpdi0+cnguaW5mbyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXByaXYtPnR4bS5kZXNjID0gcHJpdi0+cnguZGVzYyArIHByaXYtPnJ4LnNpemU7Ci0JcHJpdi0+dHhtLmRtYSA9IHByaXYtPnJ4LmRtYSArIHNpemVvZihzdHJ1Y3QgYWdueF9kZXNjKSAqIHByaXYtPnJ4LnNpemU7Ci0JcHJpdi0+dHhkLmRlc2MgPSBwcml2LT50eG0uZGVzYyArIHByaXYtPnR4bS5zaXplOwotCXByaXYtPnR4ZC5kbWEgPSBwcml2LT50eG0uZG1hICsgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpICogcHJpdi0+dHhtLnNpemU7Ci0KLQlyZXR1cm4gMDsKLX0gLyogYWdueF9hbGxvY19yaW5ncyAqLwotCi1zdGF0aWMgdm9pZCByaW5nc19mcmVlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0JdW5zaWduZWQgaW50IGxlbiA9IHByaXYtPnJ4LnNpemUgKyBwcml2LT50eG0uc2l6ZSArIHByaXYtPnR4ZC5zaXplOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0Ja2ZyZWUocHJpdi0+cnguaW5mbyk7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplb2Yoc3RydWN0IGFnbnhfZGVzYykgKiBsZW4sCi0JCQkgICAgcHJpdi0+cnguZGVzYywgcHJpdi0+cnguZG1hKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZCBhZ254X3BlcmlvZGljX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWdueF9wcml2LCBwZXJpb2RpY193b3JrLndvcmspOwotLyoJdW5zaWduZWQgbG9uZyBmbGFnczsgKi8KLQl1bnNpZ25lZCBsb25nIGRlbGF5OwotCi0JLyogZml4bWU6IHVzaW5nIG11dGV4Pz8gKi8KLS8qCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7ICovCi0KLQkvKiBUT0RPIFJlY2FsaWJyYXRlKi8KLS8qCWNhbGlicmF0ZV9vc2NpbGxhdG9yKHByaXYpOyAqLwotLyoJYW50ZW5uYV9jYWxpYnJhdGUocHJpdik7ICovCi0vKglhZ254X3NlbmRfcGFja2V0KHByaXYsIDk5Nyk7ICovCi0JLyogRklYTUUgKi8KLS8qIAlpZiAoZGVidWcgPT0gMykgKi8KLS8qICAgICAgICAgICAgICAgICBkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoQUdOWF9QRVJJT0RJQ19ERUxBWSk7ICovCi0vKiAJZWxzZSAqLwotCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhBR05YX1BFUklPRElDX0RFTEFZKTsKLS8qCWRlbGF5ID0gcm91bmRfamlmZmllcyhIWiAqIDE1KTsgKi8KLQotCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+cGVyaW9kaWNfd29yaywgZGVsYXkpOwotCi0vKglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7ICovCi19Ci0jZW5kaWYKLQotc3RhdGljIGludCBhZ254X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCS8qIHVuc2lnbmVkIGxvbmcgZGVsYXk7ICovCi0JaW50IGVyciA9IDA7Ci0JQUdOWF9UUkFDRTsKLQotCWVyciA9IGFnbnhfYWxsb2NfcmluZ3MocHJpdik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCBhbGxvYyBSWC9UWE0vVFhEIHJpbmdzXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVyciA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgJmFnbnhfaW50ZXJydXB0X2hhbmRsZXIsCi0JCQkgIElSUUZfU0hBUkVELCAiYWdueF9wY2kiLCBkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iKTsKLQkJcmluZ3NfZnJlZShwcml2KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0vKgltZGVsYXkoNTAwKTsgKi8KLQotCW1pZ2h0X3NsZWVwKCk7Ci0JYWdueF9od19pbml0KHByaXYpOwotCi0vKgltZGVsYXkoNTAwKTsgKi8KLQltaWdodF9zbGVlcCgpOwotCi0JcHJpdi0+aW5pdF9zdGF0dXMgPSBBR05YX1NUQVJUOwotLyogICAgICAgICBJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cGVyaW9kaWNfd29yaywgYWdueF9wZXJpb2RpY193b3JrX2hhbmRsZXIpOyAqLwotLyogCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhBR05YX1BFUklPRElDX0RFTEFZKTsgKi8KLS8qICAgICAgICAgcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5wZXJpb2RpY193b3JrLCBkZWxheSk7ICovCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0gLyogYWdueF9zdGFydCAqLwotCi1zdGF0aWMgdm9pZCBhZ254X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JQUdOWF9UUkFDRTsKLQotCXByaXYtPmluaXRfc3RhdHVzID0gQUdOWF9TVE9QOwotCS8qIG1ha2Ugc3VyZSBoYXJkd2FyZSB3aWxsIG5vdCBnZW5lcmF0ZSBpcnEgKi8KLQlhZ254X2h3X3Jlc2V0KHByaXYpOwotCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgZGV2KTsKLS8qCWZsdXNoX3dvcmtxdWV1ZShwcml2LT5ody0+d29ya3F1ZXVlKTsgKi8KLS8qCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cGVyaW9kaWNfd29yayk7ICovCi0JdW5maWxsX3JpbmdzKHByaXYpOwotCXJpbmdzX2ZyZWUocHJpdik7Ci19Ci0KLXN0YXRpYyBpbnQgYWdueF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZkZXYtPmNvbmY7Ci0JaW50IGNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGluX2xvY2soJnByaXYtPmxvY2spOwotCS8qIEZJWE1FIG5lZWQgcHJpdiBsb2NrPyAqLwotCWlmIChjaGFubmVsICE9IHByaXYtPmNoYW5uZWwpIHsKLQkJcHJpdi0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0JCWFnbnhfc2V0X2NoYW5uZWwocHJpdiwgcHJpdi0+Y2hhbm5lbCk7Ci0JfQotCi0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhZ254X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYsCi0JCQkJICB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCUFHTlhfVFJBQ0U7Ci0KLQlpZiAoIShjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJnByaXYtPmxvY2spOwotCi0JaWYgKG1lbWNtcChjb25mLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSkgewotCQlhZ254X3NldF9ic3NpZChwcml2LCBjb25mLT5ic3NpZCk7Ci0JCW1lbWNweShwcml2LT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJaGFzaF93cml0ZShwcml2LCBjb25mLT5ic3NpZCwgQlNTSURfU1RBSUQpOwotCQlzdGFfaW5pdChwcml2LCBCU1NJRF9TVEFJRCk7Ci0JCS8qIEZJWE1FIG5lZWRlZD8gKi8KLQkJc3RhX3Bvd2VyX2luaXQocHJpdiwgQlNTSURfU1RBSUQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX01UU00sIDB4ZmYgJiB+MHgxKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotfSAvKiBhZ254X2Jzc19pbmZvX2NoYW5nZWQgKi8KLQotCi1zdGF0aWMgdm9pZCBhZ254X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKLXsKLQl1bnNpZ25lZCBpbnQgbmV3X2ZsYWdzID0gMDsKLQotCSp0b3RhbF9mbGFncyA9IG5ld19mbGFnczsKLQkvKiBUT0RPICovCi19Ci0KLXN0YXRpYyBpbnQgYWdueF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JLyogRklYTUUgKi8KLQlpZiAocHJpdi0+bW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCXByaXYtPm1vZGUgPSBjb25mLT50eXBlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFnbnhfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBUT0RPICovCi0JcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7Ci19Ci0KLXN0YXRpYyBpbnQgYWdueF9nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlBR05YX1RSQUNFOwotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JLyogVE9ETyAhISAqLwotCW1lbWNweShzdGF0cywgJnByaXYtPnN0YXRzLCBzaXplb2YoKnN0YXRzKSk7Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1NjQgYWdueF9nZXRfdHNmdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSAoKHN0cnVjdCBhZ254X3ByaXYgKilkZXYtPnByaXYpLT5jdGw7Ci0JdTMyIHRzZnRsOwotCXU2NCB0c2Z0OwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBGSVhNRSAqLwotCXRzZnRsID0gaW9yZWFkMzIoY3RsICsgQUdOWF9UWE1fVElNRVNUQU1QTE8pOwotCXRzZnQgPSBpb3JlYWQzMihjdGwgKyBBR05YX1RYTV9USU1FU1RBTVBISSk7Ci0JdHNmdCA8PD0gMzI7Ci0JdHNmdCB8PSB0c2Z0bDsKLQotCXJldHVybiB0c2Z0OwotfQotCi1zdGF0aWMgaW50IGFnbnhfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlBR05YX1RSQUNFOwotCi0JLyogRklYTUUgbm93IHdlIGp1c3QgdXNpbmcgdHhkIHF1ZXVlLCBidXQgc2hvdWxkIHVzaW5nIHR4bSBxdWV1ZSB0b28gKi8KLQlzdGF0c1swXS5sZW4gPSAocHJpdi0+dHhkLmlkeCAtIHByaXYtPnR4ZC5pZHhfc2VudCkgLyAyOwotCXN0YXRzWzBdLmxpbWl0ID0gcHJpdi0+dHhkLnNpemUgLSAyOwotCXN0YXRzWzBdLmNvdW50ID0gcHJpdi0+dHhkLmlkeCAvIDI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfb3BzIGFnbnhfb3BzID0gewotCS50eAkJCT0gYWdueF90eCwKLQkuc3RhcnQJCQk9IGFnbnhfc3RhcnQsCi0JLnN0b3AJCQk9IGFnbnhfc3RvcCwKLQkuYWRkX2ludGVyZmFjZQkJPSBhZ254X2FkZF9pbnRlcmZhY2UsCi0JLnJlbW92ZV9pbnRlcmZhY2UJPSBhZ254X3JlbW92ZV9pbnRlcmZhY2UsCi0JLmNvbmZpZwkJCT0gYWdueF9jb25maWcsCi0JLmJzc19pbmZvX2NoYW5nZWQJPSBhZ254X2Jzc19pbmZvX2NoYW5nZWQsCi0JLmNvbmZpZ3VyZV9maWx0ZXIJPSBhZ254X2NvbmZpZ3VyZV9maWx0ZXIsCi0JLmdldF9zdGF0cwkJPSBhZ254X2dldF9zdGF0cywKLQkuZ2V0X3R4X3N0YXRzCQk9IGFnbnhfZ2V0X3R4X3N0YXRzLAotCS5nZXRfdHNmCQk9IGFnbnhfZ2V0X3RzZnQKLX07Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBhZ254X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhZ254X3ByaXYgKnByaXY7Ci0JQUdOWF9UUkFDRTsKLQotCWlmICghZGV2KQotCQlyZXR1cm47Ci0JcHJpdiA9IGRldi0+cHJpdjsKLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkZXYpOwotCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmN0bCk7Ci0JcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+ZGF0YSk7Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KLQlpZWVlODAyMTFfZnJlZV9odyhkZXYpOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZ254X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2OwotCWludCBlcnI7Ci0KLQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBwY2kgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJhZ254LXBjaSIpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVzZXJ2ZSBQQ0kgcmVzb3VyY2VzXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSB8fAotCSAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIik7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyX2ZyZWVfcmVnOwotCX0KLQotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCi0JZGV2ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqcHJpdiksICZhZ254X29wcyk7Ci0JaWYgKCFkZXYpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaWVlZTgwMjExIGFsbG9jIGZhaWxlZFxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2ZyZWVfcmVnOwotCX0KLQlwcml2ID0gZGV2LT5wcml2OwotCW1lbXNldChwcml2LCAwLCBzaXplb2YoKnByaXYpKTsKLQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKLQlwcml2LT5wZGV2ID0gcGRldjsKLQlwcml2LT5odyA9IGRldjsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7Ci0JcHJpdi0+aW5pdF9zdGF0dXMgPSBBR05YX1VOSU5JVDsKLQotCXByaXYtPmN0bCA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKLS8qCWRldl9kYmcoJnBkZXYtPmRldiwgIk1FTTEgbWFwcGVkIGFkZHJlc3MgaXMgMHglcFxuIiwgcHJpdi0+Y3RsKTsgKi8KLQlpZiAoIXByaXYtPmN0bCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBtYXAgZGV2aWNlIG1lbW9yeVxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2ZyZWVfZGV2OwotCX0KLQlwcml2LT5kYXRhID0gcGNpX2lvbWFwKHBkZXYsIDEsIDApOwotCWlmICghcHJpdi0+ZGF0YSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBtYXAgZGV2aWNlIG1lbW9yeVxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2lvdW5tYXAyOwotCX0KLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnByaXYtPnJldmlkKTsKLQotCXByaXYtPmJhbmQuY2hhbm5lbHMgICA9IChzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKilhZ254X2NoYW5uZWxzOwotCXByaXYtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUoYWdueF9jaGFubmVscyk7Ci0JcHJpdi0+YmFuZC5iaXRyYXRlcyAgID0gKHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqKWFnbnhfcmF0ZXNfODAyMTFnOwotCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUoYWdueF9yYXRlc184MDIxMWcpOwotCi0JLyogSW5pdCBpZWVlODAyLjExIGRldiAgKi8KLQlTRVRfSUVFRTgwMjExX0RFVihkZXYsICZwZGV2LT5kZXYpOwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwotCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFnbnhfaGRyKTsKLQotCS8qIEZJWE1FIEl0IG9ubHkgaW5jbHVkZSBGQ1MgaW4gcHJvbWlvdXMgbW9kZSBidXQgbm90IG1hbmFnZSBtb2RlICovCi0vKiAgICAgIGRldi0+ZmxhZ3MgPSAgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUzsgKi8KLQlkZXYtPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOwotCWRldi0+bWF4X3NpZ25hbCA9IDEwMDsKLQkvKiBGSVhNRSAqLwotCWRldi0+cXVldWVzID0gMTsKLQotCWFnbnhfZ2V0X21hY19hZGRyZXNzKHByaXYpOwotCi0JU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBwcml2LT5tYWNfYWRkcik7Ci0KLS8qIAkvXCogRklYTUUgKlwvICovCi0vKiAJZm9yIChpID0gMTsgaSA8IE5VTV9EUklWRV9NT0RFUzsgaSsrKSB7ICovCi0vKiAJCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUoZGV2LCAmcHJpdi0+bW9kZXNbaV0pOyAqLwotLyogCQlpZiAoZXJyKSB7ICovCi0vKiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCByZWdpc3RlciBod21vZGVcbiIpOyAqLwotLyogCQkJZ290byAgZXJyX2lvdW5tYXA7ICovCi0vKiAJCX0gKi8KLS8qIAl9ICovCi0KLQlwcml2LT5jaGFubmVsID0gMTsKLQlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOwotCi0JZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZWdpc3RlciBoYXJkd2FyZVxuIik7Ci0JCWdvdG8gZXJyX2lvdW5tYXA7Ci0JfQotCi0JYWdueF9od19yZXNldChwcml2KTsKLQotCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlczogaHdhZGRyICVwTSwgUmV2IDB4JTAyeFxuIiwKLQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwKLQkJZGV2LT53aXBoeS0+cGVybV9hZGRyLCBwcml2LT5yZXZpZCk7Ci0JcmV0dXJuIDA7Ci0KLSBlcnJfaW91bm1hcDoKLQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5kYXRhKTsKLQotIGVycl9pb3VubWFwMjoKLQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5jdGwpOwotCi0gZXJyX2ZyZWVfZGV2OgotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlpZWVlODAyMTFfZnJlZV9odyhkZXYpOwotCi0gZXJyX2ZyZWVfcmVnOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcmV0dXJuIGVycjsKLX0gLyogYWdueF9wY2lfcHJvYmUqLwotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgYWdueF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlBR05YX1RSQUNFOwotCi0JaWVlZTgwMjExX3N0b3BfcXVldWVzKGRldik7Ci0JYWdueF9zdG9wKGRldik7Ci0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZ254X3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCUFHTlhfVFJBQ0U7Ci0KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0KLQlhZ254X3N0YXJ0KGRldik7Ci0JaWVlZTgwMjExX3dha2VfcXVldWVzKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLQotI2RlZmluZSBhZ254X3BjaV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgYWdueF9wY2lfcmVzdW1lIE5VTEwKLQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ254X3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImFnbngtcGNpIiwKLQkuaWRfdGFibGUJPSBhZ254X3BjaV9pZF90YmwsCi0JLnByb2JlCQk9IGFnbnhfcGNpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYWdueF9wY2lfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IGFnbnhfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBhZ254X3BjaV9yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBhZ254X3BjaV9pbml0KHZvaWQpCi17Ci0JQUdOWF9UUkFDRTsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYWdueF9wY2lfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFnbnhfcGNpX2V4aXQodm9pZCkKLXsKLQlBR05YX1RSQUNFOwotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYWdueF9wY2lfZHJpdmVyKTsKLX0KLQotCi1tb2R1bGVfaW5pdChhZ254X3BjaV9pbml0KTsKLW1vZHVsZV9leGl0KGFnbnhfcGNpX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxY2E4Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuYworKysgL2Rldi9udWxsCkBAIC0xLDk2MCArMCwwIEBACi0vKioKLSAqIEFpcmdvIE1JTU8gd2lyZWxlc3MgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3IExpIFlhbkJvIDxkcmVhbWZseTI4MUBnbWFpbC5jb20+Ci0KLSAqIFRoYW5rcyBmb3IgSmVmZiBXaWxsaWFtcyA8YW5nZWxiYW5lQGdtYWlsLmNvbT4gZG8gcmV2ZXJzZSBlbmdpbmVlcgotICogd29ya3MgYW5kIHB1Ymxpc2hlZCB0aGUgU1BFQ1MgYXQgaHR0cDovL2FpcmdvLndkd2NvbnN1bHRpbmcubmV0L215bW9pbgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgImFnbnguaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInBoeS5oIgotI2luY2x1ZGUgInRhYmxlLmgiCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVkZSAieG1pdC5oIgotCi11OCByZWFkX2Zyb21fZWVwcm9tKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUxNiBhZGRyZXNzKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXN0cnVjdCBhZ254X2VlcHJvbSBjbWQ7Ci0JdTMyIHJlZzsKLQotCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7Ci0JY21kLmNtZCA9IEVFUFJPTV9DTURfUkVBRCA8PCBBR05YX0VFUFJPTV9DT01NQU5EX1NISUZUOwotCWNtZC5hZGRyZXNzID0gYWRkcmVzczsKLQkvKiBWZXJpZnkgdGhhdCB0aGUgU3RhdHVzIGJpdCBpcyBjbGVhciAqLwotCS8qIFJlYWQgQ29tbWFuZCBhbmQgQWRkcmVzcyBhcmUgd3JpdHRlbiB0byB0aGUgU2VyaWFsIEludGVyZmFjZSAqLwotCWlvd3JpdGUzMigqKF9fbGUzMiAqKSZjbWQsIGN0bCArIEFHTlhfQ0lSX1NFUklBTElURik7Ci0JLyogV2FpdCBmb3IgdGhlIFN0YXR1cyBiaXQgdG8gY2xlYXIgYWdhaW4gKi8KLQllZXByb21fZGVsYXkoKTsKLQkvKiBSZWFkIGZyb20gRGF0YSAqLwotCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1NFUklBTElURik7Ci0KLQljbWQgPSAqKHN0cnVjdCBhZ254X2VlcHJvbSAqKSZyZWc7Ci0KLQlyZXR1cm4gY21kLmRhdGE7Ci19Ci0KLXN0YXRpYyBpbnQgY2FyZF9mdWxsX3Jlc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCwgMHg4MCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwpOwotCXJldHVybiAwOwotfQotCi1pbmxpbmUgdm9pZCBlbmFibGVfcG93ZXJfc2F2aW5nKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IH4weDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLX0KLQotaW5saW5lIHZvaWQgZGlzYWJsZV9wb3dlcl9zYXZpbmcoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUE1DVEwsIHJlZyk7Ci19Ci0KLQotdm9pZCBkaXNhYmxlX3JlY2VpdmVyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIEZJWE1FIERpc2FibGUgdGhlIHJlY2VpdmVyICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDApOwotCS8qIFNldCBnYWluIGNvbnRyb2wgcmVzZXQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCS8qIFJlc2V0IGdhaW4gY29udHJvbCByZXNldCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci19Ci0KLQotLyogRml4bWUgdGhpcyBzaG91bGUgYmUgZGlzYWJsZSBSWCwgYWJvdmUgaXMgZW5hYmxlIFJYICovCi12b2lkIGVuYWJsZV9yZWNlaXZlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBTZXQgYWRhcHRpdmUgZ2FpbiBjb250cm9sIGRpc2NvdmVyeSBtb2RlICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCS8qIFNldCBnYWluIGNvbnRyb2wgcmVzZXQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCS8qIENsZWFyIGdhaW4gY29udHJvbCByZXNldCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hY19hZGRyZXNzX3NldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXU4ICptYWNfYWRkciA9IHByaXYtPm1hY19hZGRyOwotCXUzMiByZWc7Ci0KLQkvKiBGSVhNRSAqLwotCXJlZyA9IChtYWNfYWRkclswXSA8PCAyNCkgfCAobWFjX2FkZHJbMV0gPDwgMTYpIHwgbWFjX2FkZHJbMl0gPDwgOCB8IG1hY19hZGRyWzNdOwotCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX01BQ0hJKTsKLQlyZWcgPSAobWFjX2FkZHJbNF0gPDwgOCkgfCBtYWNfYWRkcls1XTsKLQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9NQUNMTyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlY2VpdmVyX2Jzc2lkX3NldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7Ci0JLyogRklYTUUgKi8KLQlyZWcgPSBic3NpZFswXSA8PCAyNCB8IChic3NpZFsxXSA8PCAxNikgfCAoYnNzaWRbMl0gPDwgOCkgfCBic3NpZFszXTsKLQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9CU1NJREhJKTsKLQlyZWcgPSAoYnNzaWRbNF0gPDwgOCkgfCBic3NpZFs1XTsKLQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9CU1NJRExPKTsKLQotCS8qIEVuYWJsZSB0aGUgcmVjZWl2ZXIgKi8KLQllbmFibGVfcmVjZWl2ZXIocHJpdik7Ci0KLQkvKiBDbGVhciB0aGUgVFNGICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVFNGTE8sIDB4MCk7ICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVFNGSEksIDB4MCk7ICovCi0JLyogQ2xlYXIgdGhlIFRCVFQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9UQlRUTE8sIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVEJUVEhJLCAweDApOwotCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7Ci19IC8qIHJlY2VpdmVyX2Jzc2lkX3NldCAqLwotCi1zdGF0aWMgdm9pZCBiYW5kX21hbmFnZW1lbnRfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0JdTMyIHJlZzsKLQlpbnQgaTsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9UWFdBRERSLCBBR05YX1BEVV9UWF9XUSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQUREUldJTiwgMHgwKTsKLQltZW1zZXRfaW8oZGF0YSArIEFHTlhfUERVUE9PTCwgMHgwLCBBR05YX1BEVVBPT0xfU0laRSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9CTUNUTCwgMHgyMDApOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DSVBEVVdDTlQsIDB4NDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fU1BQRFVXQ05ULCAweDIpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fUkZQUERVV0NOVCwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1JIUFBEVVdDTlQsIDB4MjIpOwotCi0JLyogRklYTUUgSW5pdGlhbGl6ZSB0aGUgRnJlZSBQb29sIExpbmtlZCBMaXN0ICovCi0JLyogICAgMS4gV3JpdGUgdGhlIEFkZHJlc3Mgb2YgdGhlIE5leHQgTm9kZSAoKDB4NDE4MDAgKyBub2RlKnNpemUpL3NpemUpCi0JICAgICAgdG8gdGhlIGZpcnN0IHdvcmQgb2YgZWFjaCBub2RlLiAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUERVX0ZSRUVfQ05UOyBpKyspIHsKLQkJaW93cml0ZTMyKChBR05YX1BEVV9GUkVFICsgKGkrMSkqUERVX1NJWkUpL1BEVV9TSVpFLAotCQkJICBkYXRhICsgQUdOWF9QRFVfRlJFRSArIChQRFVfU0laRSAqIGkpKTsKLQkJLyogVGhlIGxhc3Qgbm9kZSBzaG91bGQgYmUgc2V0IHRvIDB4MCAqLwotCQlpZiAoKGkgKyAxKSA9PSBQRFVfRlJFRV9DTlQpCi0JCQltZW1zZXRfaW8oZGF0YSArIEFHTlhfUERVX0ZSRUUgKyAoUERVX1NJWkUgKiBpKSwKLQkJCQkgIDB4MCwgUERVX1NJWkUpOwotCX0KLQotCS8qIEhlYWQgaXMgRmlyc3QgUG9vbCBhZGRyZXNzICgweDQxODAwKSAvIHNpemUgKDB4ODApICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9GUExIUCwgQUdOWF9QRFVfRlJFRS9QRFVfU0laRSk7Ci0JLyogVGFpbCBpcyBMYXN0IFBvb2wgQWRkcmVzcyAoMHg0N2Y4MCkgLyBzaXplICgweDgwKSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fRlBMVFAsIDB4NDdmODAvUERVX1NJWkUpOwotCS8qIENvdW50IGlzIE51bWJlciBvZiBOb2RlcyBpbiB0aGUgUG9vbCAoMHhkMCkgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0ZQQ05ULCBQRFVfRlJFRV9DTlQpOwotCi0JLyogU3RhcnQgYWxsIHdvcmtxdWV1ZSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fQ0lXUUNUTCwgMHg4MDAwMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DUFVMV0NUTCwgMHg4MDAwMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DUFVIV0NUTCwgMHg4MDAwMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DUFVUWFdDVEwsIDB4ODAwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fQ1BVUlhXQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1NQUlhXQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1NQVFhXQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1JGUFdDVEwsIDB4ODAwMDApOwotCi0JLyogRW5hYmxlIHRoZSBCYW5kIE1hbmFnZW1lbnQgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQk1fQk1DVEwpOwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9CTUNUTCwgcmVnKTsKLX0gLyogYmFuZF9tYW5hZ21lbnRfaW5pdCAqLwotCi0KLXN0YXRpYyB2b2lkIHN5c3RlbV9pdGZfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9VVCwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1RFU1RQSFksIDB4MTFlMTQzYSk7Ci0KLQlpZiAocHJpdi0+cmV2aWQgPT0gMCkgewotCQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUpOwotCQlyZWcgfD0gMHgxMTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgcmVnKTsKLQl9Ci0JLyogPz8/IFdoYXQgaXMgdGhhdCBtZWFucz8gaXQgc2hvdWxkIGRpZmZlcmVuY2UgZm9yIGRpZmZlcmljZSB0eXBlCi0JIG9mIGNhcmRzICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfU0VSSUFMSVRGLCAweGZmZjgxMDA2KTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9JTiwgMHgxZjAwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9VVCwgMHg1KTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9JTik7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuY3J5cHRpb25faW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCUFHTlhfVFJBQ0U7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0VOQ1JZX1dFUEtFWTAsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9FTkNSWV9XRVBLRVkxLCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfRU5DUllfV0VQS0VZMiwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0VOQ1JZX1dFUEtFWTMsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9FTkNSWV9DQ01SRUNUTCwgMHg4KTsKLX0KLQotc3RhdGljIHZvaWQgdHhfbWFuYWdlbWVudF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0Jdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBGaWxsIG91dCB0aGUgQ29tcHV0YXRpb25hbEVuZ2luZUxvb2t1cFRhYmxlCi0JICogc3RhcnRpbmcgYXQgbWVtb3J5ICMyIG9mZnNldCAweDgwMAotCSAqLwotCXR4X2VuZ2luZV9sb29rdXBfdGJsX2luaXQocHJpdik7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDEwMDAsIDAsIDB4ZmUwKTsKLQkvKiBFbmFibGUgVHJhbnNtaXNzaW9uIE1hbmFnZW1lbnQgRnVuY3Rpb25zICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fRVRNRiwgMHgzZmYpOwotCS8qIFdyaXRlIDB4M2YgdG8gVHJhbnNtaXNzaW9uIFRlbXBsYXRlICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVFhURU1QLCAweDNmKTsKLQotCWlmIChwcml2LT5yZXZpZCA+PSAyKQotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TSUZTUElGUywgMHgxZTE0MGEwYik7Ci0JZWxzZQotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TSUZTUElGUywgMHgxZTE5MGEwYik7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX1RJRlNFSUZTKTsKLQlyZWcgJj0gMHhmZjAwOwotCXJlZyB8PSAweGI7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9USUZTRUlGUyk7Ci0JcmVnICY9IDB4ZmZmZjAwZmY7Ci0JcmVnIHw9IDB4YTAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1RJRlNFSUZTLCByZWcpOwotCS8qIEVuYWJsZSBUSUZTICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1RMLCAweDQwMDAwKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMpOwotCXJlZyAmPSAweGZmMDBmZmZmOwotCXJlZyB8PSAweDUxMDAwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9USUZTRUlGUywgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX1BST0JERUxBWSk7Ci0JcmVnICY9IDB4ZmYwMGZmZmY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fUFJPQkRFTEFZLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMpOwotCXJlZyAmPSAweDAwZmZmZmZmOwotCXJlZyB8PSAweDFjMDAwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1RJRlNFSUZTLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fUFJPQkRFTEFZKTsKLQlyZWcgJj0gMHgwMGZmZmZmZjsKLQlyZWcgfD0gMHgwMTAwMDAwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9QUk9CREVMQVksIHJlZyk7Ci0KLQkvKiAjIFNldCBESUYgMC0xLDItMyw0LTUsNi03IHRvIGRlZmF1bHRzICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fRElGMDEsIDB4MzIxZDMyMWQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0RJRjIzLCAweDMyMWQzMjFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9ESUY0NSwgMHgzMjFkMzIxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fRElGNjcsIDB4MzIxZDMyMWQpOwotCi0JLyogTWF4IEFjayB0aW1lb3V0IGxpbWl0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fTUFYQUNLVElNLCAweDFlMTkpOwotCS8qIE1heCBSWCBEYXRhIFRpbWVvdXQgY291bnQsICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9NQVhSWFRJTUUpOwotCXJlZyAmPSAweGZmZmYwMDAwOwotCXJlZyB8PSAweGZmOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX01BWFJYVElNRSwgcmVnKTsKLQotCS8qIENGIHBvbGwgUlggVGltZW91dCBjb3VudCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0pOwotCXJlZyAmPSAweGZmZmY7Ci0JcmVnIHw9IDB4ZmYwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NGUE9MTFJYVElNLCByZWcpOwotCi0JLyogTWF4IFRpbWVvdXQgRXhjZWVkZWQgY291bnQsICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9NQVhUSU1PVVQpOwotCXJlZyAmPSAweGZmMDBmZmZmOwotCXJlZyB8PSAweDE5MDAwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9NQVhUSU1PVVQsIHJlZyk7Ci0KLQkvKiBDRiBhY2sgdGltZW91dCBsaW1pdCBmb3IgMTFiICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DRkFDS1QxMUIpOwotCXJlZyAmPSAweGZmMDA7Ci0JcmVnIHw9IDB4MWU7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZBQ0tUMTFCLCByZWcpOwotCi0JLyogTWF4IENGIFBvbGwgVGltZW91dCBDb3VudCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0pOwotCXJlZyAmPSAweGZmZmYwMDAwOwotCXJlZyB8PSAweDE5OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NGUE9MTFJYVElNLCByZWcpOwotCS8qIENGIFBvbGwgUlggVGltZW91dCBDb3VudCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0pOwotCXJlZyAmPSAweGZmZmYwMDAwOwotCXJlZyB8PSAweDFlOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NGUE9MTFJYVElNLCByZWcpOwotCi0JLyogIyB3cml0ZSBkZWZhdWx0IHRvICovCi0JLyogICAgMS4gU2NoZWR1bGUgRW1wdHkgQ291bnQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TQ0hFTVBDTlQsIDB4NSk7Ci0JLyogICAgMi4gQ0ZQIFBlcmlvZCBDb3VudCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NGUEVSQ05ULCAweDEpOwotCS8qICAgIDMuIENGUCBNRFYgICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZQTURWLCAweDEwMDAwKTsKLQotCS8qIFByb2JlIERlbGF5ICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9QUk9CREVMQVkpOwotCXJlZyAmPSAweGZmZmYwMDAwOwotCXJlZyB8PSAweDQwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9QUk9CREVMQVksIHJlZyk7Ci0KLQkvKiBNYXggQ0NBIGNvdW50IFNsb3QgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX01BWENDQUNOVFNMT1QpOwotCXJlZyAmPSAweGZmZmYwMGZmOwotCXJlZyB8PSAweDkwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9NQVhDQ0FDTlRTTE9ULCByZWcpOwotCi0JLyogU2xvdCBsaW1pdC8xIG1zZWMgTGltaXQgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX1NMT1RMSU1JVCk7Ci0JcmVnICY9IDB4ZmYwMGZmZmY7Ci0JcmVnIHw9IDB4MTQwMDc3OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1NMT1RMSU1JVCwgcmVnKTsKLQotCS8qICMgU2V0IENXICMoMC03KSB0byBkZWZhdWx0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1cwLCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1cxLCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1cyLCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1czLCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1c0LCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1c1LCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1c2LCAweGZmMDAwNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1c3LCAweGZmMDAwNyk7Ci0KLQkvKiAjIFNldCBTaG9ydC9Mb25nIGxpbWl0ICMoMC03KSB0byBkZWZhdWx0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU0wLCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU0xLCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU0yLCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU0zLCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU00LCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU01LCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU02LCAgMHhhMDAwYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xCRUFMSU03LCAgMHhhMDAwYSk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX0NUTCk7Ci0JcmVnIHw9IDB4MTQwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVEwsIHJlZyk7Ci0JLyogV2FpdCBmb3IgYml0IDAgaW4gQ29udHJvbCBSZWcgdG8gY2xlYXIgICovCi0JdWRlbGF5KDgwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX0NUTCk7Ci0JLyogT3IgMHgxODAwMCB0byBDb250cm9sIHJlZyAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQlyZWcgfD0gMHgxODAwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVEwsIHJlZyk7Ci0JLyogV2FpdCBmb3IgYml0IDAgaW4gQ29udHJvbCBSZWcgdG8gY2xlYXIgKi8KLQl1ZGVsYXkoODApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQotCS8qIFNldCBMaXN0ZW4gSW50ZXJ2YWwgQ291bnQgdG8gZGVmYXVsdCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0xJU0lOVEVSQ05ULCAweDEpOwotCS8qIFNldCBEVElNIHBlcmlvZCBjb3VudCB0byBkZWZhdWx0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fRFRJTVBFUklDTlQsIDB4MjAwMCk7Ci19IC8qIHR4X21hbmFnZW1lbnRfaW5pdCAqLwotCi1zdGF0aWMgdm9pZCByeF9tYW5hZ2VtZW50X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlBR05YX1RSQUNFOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgUm91dGluZyBUYWJsZSAqLwotCXJvdXRpbmdfdGFibGVfaW5pdChwcml2KTsKLQotCWlmIChwcml2LT5yZXZpZCA+PSAzKSB7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MjA3NCwgMHgxZjE3MTcxMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MjA3OCwgMHgxMDEwMGQwZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MjA3YywgMHgxMTExMTAxMCk7Ci0JfSBlbHNlIHsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fREVMQVkxMSwgMHgwKTsKLQl9Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgMHg4MTk1ZTAwKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBhZ254X3RpbWVyX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlBR05YX1RSQUNFOwotCi0vKiAJL1wqIFdyaXRlIDB4MjQ5ZjAwICh0aWNrIGR1cmF0aW9uPykgdG8gVGltZXIgMSAqXC8gKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RJTUNUTF9USU1FUjEsIDB4MjQ5ZjAwKTsgKi8KLS8qIAkvXCogV3JpdGUgMHhlMiB0byBUaW1lciAxIENvbnRyb2wgKlwvICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9USU1DVExfVElNMUNUTCwgMHhlMik7ICovCi0KLQkvKiBXcml0ZSAweDI0OWYwMCAodGljayBkdXJhdGlvbj8pIHRvIFRpbWVyIDEgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RJTUNUTF9USU1FUjEsIDB4MCk7Ci0JLyogV3JpdGUgMHhlMiB0byBUaW1lciAxIENvbnRyb2wgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RJTUNUTF9USU0xQ1RMLCAweDApOwotCi0JaW93cml0ZTMyKDB4RkZGRkZGRkYsIHByaXYtPmN0bCArIEFHTlhfVFhNX0JFQUNPTl9DVEwpOwotfQotCi1zdGF0aWMgdm9pZCBwb3dlcl9tYW5hZ2VfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fTUFDTVNXLCAweDFmKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1JGQ1RMLCAweDFmKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IDB4ZjAwZjsKLQlyZWcgfD0gMHhhMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BNQ1RMLCByZWcpOwotCi0JaWYgKHByaXYtPnJldmlkID49IDMpIHsKLQkJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QpOwotCQlyZWcgfD0gMHgxODsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCX0KLX0gLyogcG93ZXJfbWFuYWdlX2luaXQgKi8KLQotCi1zdGF0aWMgdm9pZCBnYWluX2N0bGNudF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVFJBQ05UNSwgMHgxMTkpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RSQUNOVDYsIDB4MTE4KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9UUkFDTlQ3LCAweDExNyk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IH4weDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0FERFJXSU4sIDB4MCk7Ci0KLQkvKiBGSVhNRSBXcml0ZSB0aGUgaW5pdGlhbCBTdGF0aW9uIERlc2NyaXB0b3IgZm9yIHRoZSBjYXJkICovCi0Jc3RhX2luaXQocHJpdiwgTE9DQUxfU1RBSUQpOwotCXN0YV9pbml0KHByaXYsIEJTU0lEX1NUQUlEKTsKLQotCS8qIEVuYWJsZSBzdGFpb24gMCBhbmQgMSBjYW4gZG8gVFggKi8KLQkvKiBJdCBzZWVtZWQgaWYgd2Ugc2V0IG90aGVyIGJpdCB0byAxIHRoZSBiaXQgMCB3aWxsCi0JICAgYmUgYXV0byBjaGFuZ2UgdG8gMCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fVFhUT1BFRVIsIDB4MiB8IDB4MSk7Ci0vKglhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1RYVE9QRUVSLCAweDEpOyAqLwotfSAvKiBnYWluX2N0bGNudF9pbml0ICovCi0KLQotc3RhdGljIHZvaWQgcGh5X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl2b2lkIF9faW9tZW0gKmRhdGEgPSBwcml2LT5kYXRhOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIExvYWQgSW5pdGlhbEdhaW5UYWJsZSAqLwotCWdhaW5fdGFibGVfaW5pdChwcml2KTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0FERFJXSU4sIDB4MjAwMDAwMCk7Ci0KLQkvKiBDbGVhciB0aGUgZm9sbG93aW5nIG9mZnNldHMgaW4gTWVtb3J5IFJhbmdlICMyOiAqLwotCW1lbXNldF9pbyhkYXRhICsgMHg1MDQwLCAwLCAweGEgKiA0KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4NTA4MCwgMCwgMHhhICogNCk7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDUwYzAsIDAsIDB4YSAqIDQpOwotCW1lbXNldF9pbyhkYXRhICsgMHg1NDAwLCAwLCAweDgwICogNCk7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDYwMDAsIDAsIDB4MjgwICogNCk7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDcwMDAsIDAsIDB4MjgwICogNCk7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDgwMDAsIDAsIDB4MjgwICogNCk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBGb2xsb3dpbmcgUmVnaXN0ZXJzIEFjY29yZGluZyB0byBQQ0kgUmV2aXNpb24gSUQgKi8KLQlpZiAocHJpdi0+cmV2aWQgPT0gMCkgewotCQkvKiBmaXhtZSB0aGUgcGFydCBoYXNuJ3QgYmVlbiB1cGRhdGUgYnV0IGJlbG93IGhhcyBiZWVuIHVwZGF0ZQotCQkgICBiYXNlZCBvbiBXR001MTEgKi8KLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweGYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjEsIDB4MWQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0FJQ0NIQTBPVkUsIDB4MTEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9BSUNDSEExT1ZFLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQSwgMHg2NCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBTCwgMHg0Yik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCLCAweDRiKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRFVOU0FULCAweDE0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRFNBVCwgMHgyNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RGSVJDQUwsIDB4OCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RHQ1RMMTFBLCAweDFhKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfREdDVEwxMUIsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5JTklULCAweGQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USE5PU0lHLCAweDEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT0FSU1RFUCwgMHg3KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lGU1QxMUEsIDB4MjgpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUZTVDExQiwgMHgyOCk7Ci0JCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfQ1dERVRFQyk7Ci0JCXJlZyB8PSAweDE7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NXREVURUMsIHJlZyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSXzBYMzgsIDB4MWUpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0FDVCwgMHgyNik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RJU0NPVk1PRCwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05BQ1RJQU5ULCAweDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTUVBU0FOVCwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0FQMTFBLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUDExQiwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVBSWDExQSwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVBSWDExQiwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhMRVZEUk8sIDB4MTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9NQVhSWFRJTUUxMUEsIDB4MSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX01BWFJYVElNRTExQiwgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ09SUlRJTUUsIDB4MTkwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHSFRILCAweDc4KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHTFRILCAweDFjKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ09SUkRST1AsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0QsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX01BWFBPV0RJRkYsIDB4MSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RFU1RCVVMsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0FOVENGRywgMHgxZik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RISlVNUCwgMHgxNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIUE9XRVIsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIUE9XQ0xJUCwgMHgzMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCVEZFU1QsIDB4MzIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USFJYMTFCUE9XTUlOLCAweDE5KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfMFgxNGMsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSXzBYMTUwLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MDAsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQwYywgMHg2ZmYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MjgsIDB4YTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MzQsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwNCwgMHgxNSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwYywgMHg3Zik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMzNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhjMDAwLCAweDM4ZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTQwMTgsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTYwMDAsIDB4MSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTEwMDQsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1NCwgMHhhKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzFjLCAweDUpOwotCX0gZWxzZSBpZiAocHJpdi0+cmV2aWQgPiAwKSB7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0xFTiwgMHhmKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDIxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIyLCAweDI3KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfQUlDQ0hBME9WRSwgMHgxMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0FJQ0NIQTFPVkUsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RVTlNBVCwgMHgxNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RTQVQsIDB4MjQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ERklSQ0FMLCAweDgpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ER0NUTDExQSwgMHgxYSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RHQ1RMMTFCLCAweDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOSU5JVCwgMHhkKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhOT1NJRywgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ09BUlNURVAsIDB4Nyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJRlNUMTFBLCAweDI4KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lGU1QxMUIsIDB4MjgpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DV0RFVEVDLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl8wWDM4LCAweDFlKTsKLS8qCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0FDVCwgMHgyNik7Ki8KLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCi0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0FQMTFBLCAweDMyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVAxMUIsIDB4MzIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUFJYMTFBLCAweDMyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVBSWDExQiwgMHgzMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RITEVWRFJPLCAweDEwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTUFYUlhUSU1FMTFBLCAweDFhZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX01BWFJYVElNRTExQiwgMHhhMTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT1JSVElNRSwgMHgxOTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT1JSRFJPUCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDRCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDUywgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTUFYUE9XRElGRiwgMHg0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEVTVEJVUywgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhKVU1QLCAweDFlKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhQT1dFUiwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhQT1dDTElQLCAweDJhKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEJURkVTVCwgMHgzYyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIUlgxMUJQT1dNSU4sIDB4MTkpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl8wWDE0YywgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfMFgxNTAsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfV0FUQ0hET0csIDB4MzcpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MDAsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQwYywgMHg2ZmYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MjgsIDB4YTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDk0MzQsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwNCwgMHgxNSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwYywgMHg3Zik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMzNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhjMDAwLCAweDM4ZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTQwMTQsIDB4MTAwMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTQwMTgsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTYwMDAsIDB4MSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTEwMDQsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1NCwgMHhhKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzFjLCAweDUwKTsKLQl9IGVsc2UgaWYgKHByaXYtPnJldmlkID4gMSkgewotCQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIDB4ZWMxOCk7Ci0JCXJlZyB8PSAweDg7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWMxOCwgcmVnKTsKLQl9Ci0KLQkvKiBXcml0ZSB0aGUgVFggRmlyIENvZWZmaWNpZW50IFRhYmxlICovCi0JdHhfZmlyX3RhYmxlX2luaXQocHJpdik7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyAmPSB+MHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUE1DVEwsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BMTENUTCk7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BMTENUTCwgcmVnKTsKLQotLyogCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHgxYTAzMCk7ICovCi0vKiAJcmVnICY9IH4weDQ7ICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgMHgxYTAzMCwgcmVnKTsgKi8KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RSQUNOVDQsIDB4MTEzKTsKLX0gLyogcGh5X2luaXQgKi8KLQotc3RhdGljIHZvaWQgY2hpcF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYmFuZF9tYW5hZ2VtZW50X2luaXQocHJpdik7Ci0KLQlyZl9jaGlwc19pbml0KHByaXYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUE1DVEwsIHJlZyk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBQSFkgKi8KLQlwaHlfaW5pdChwcml2KTsKLQotCWVuY3J5cHRpb25faW5pdChwcml2KTsKLQotCXR4X21hbmFnZW1lbnRfaW5pdChwcml2KTsKLQotCXJ4X21hbmFnZW1lbnRfaW5pdChwcml2KTsKLQotCXBvd2VyX21hbmFnZV9pbml0KHByaXYpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgVGltZXJzICovCi0JYWdueF90aW1lcl9pbml0KHByaXYpOwotCi0JLyogV3JpdGUgMHhjMzkwYmY5IHRvIEludGVycnVwdCBNYXNrIChEaXNhYmxlIFRYKSAqLwotCXJlZyA9IDB4YzM5MGJmOSAmIH5JUlFfVFhfQkVBQ09OOwotCXJlZyAmPSB+SVJRX1RYX0RJU0FCTEU7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9JTlRfTUFTSywgcmVnKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfQkxLQ1RMKTsKLQlyZWcgfD0gMHg4MDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQkxLQ1RMLCByZWcpOwotCi0JLyogc2V0IGl0IHdoZW4gbmVlZCBnZXQgbXVsdGljYXN0IGVuYWJsZT8gKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX01UU00sIDB4ZmYpOwotfSAvKiBjaGlwX2luaXQgKi8KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Byb21pc19hbmRfbWFuYWdlZChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIDB4MTAgfCAweDIpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIDB4MTAgfCAweDIpOwotfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9sZWFybl9tb2RlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHg4KTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2Nhbl9tb2RlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHgyMCk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQkvKiBhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCAweDIxMCk7Ki8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCAweDEwKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbWFuYWdlZF9tb2RlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHgyKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYWRob2NfbW9kZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIDB4MCk7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZCB1bmtub3dfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgwLCAweDNlKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NCwgMHhiMik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDgsIDB4MTQwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4YywgMHgxQzApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgxMCwgMHgxRkYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgxNCwgMHgxREQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgxOCwgMHgxNUYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgxYywgMHhBMSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDIwLCAweDNFNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDI0LCAweDM2Qik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDI4LCAweDM0OCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDJjLCAweDM3RCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDMwLCAweDNERSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDM0LCAweDM2KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MzgsIDB4NjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgzYywgMHg1Nyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDQwLCAweDIzKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NDQsIDB4M0VEKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NDgsIDB4M0M5KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NGMsIDB4M0NBKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NTAsIDB4M0U3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NTQsIDB4OCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDU4LCAweDFGKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NWMsIDB4MWEpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGNhcmRfaW50ZXJmYWNlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1OCBic3NpZFtFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0JdTMyIHJlZzsKLQl1bnNpZ25lZCBpbnQgaTsKLQlBR05YX1RSQUNFOwotCi0JbWlnaHRfc2xlZXAoKTsKLQkvKiBDbGVhciBSWCBDb250cm9sIGFuZCBFbmFibGUgUlggcXVldWVzICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfUlhDVEwsIDB4OCk7Ci0KLQltaWdodF9zbGVlcCgpOwotCS8qIERvIGEgZnVsbCByZXNldCBvZiB0aGUgY2FyZCAqLwotCWNhcmRfZnVsbF9yZXNldChwcml2KTsKLQltaWdodF9zbGVlcCgpOwotCi0JLyogQ2hlY2sgYW5kIHNldCBDYXJkIEVuZGlhbm5lc3MgKi8KLQlyZWcgPSBpb3JlYWQzMihwcml2LT5jdGwgKyBBR05YX0NJUl9FTkRJQU4pOwotCS8qIFRPRE8gSWYgbm90IDB4QjNCMkIxQjAgc2V0IHRvIDB4QjNCMkIxQjAgKi8KLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQ0lSX0VORElBTiBpcyAleFxuIiwgcmVnKTsKLQotCi0JLyogQ29uZmlnIHRoZSBlZXByb20gKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9TRVJJQUxJVEYsIDB4NzAwMDA4Nik7Ci0JdWRlbGF5KDEwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1NFUklBTElURik7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fU09GVFJTVCwgMHg4MDAwMDAzMyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweGVjNTApOwotCXJlZyB8PSAweGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHhlYzUwLCByZWcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fU09GVFJTVCwgMHgwKTsKLQotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NZU0lURl9HUElPSU4pOwotCXVkZWxheSgxMCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9TRVJJQUxJVEYpOwotCi0JLyogRHVtcCB0aGUgZWVwcm9tICovCi0JZG8gewotCQljaGFyIGVlcHJvbVsweDEwMDAwMC8weDEwMF07Ci0KLQkJZm9yIChpID0gMDsgaSA8IDB4MTAwMDAwOyBpICs9IDB4MTAwKSB7Ci0JCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9TRVJJQUxJVEYsIDB4MzAwMDAwMCArIGkpOwotCQkJdWRlbGF5KDEzKTsKLQkJCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfU0VSSUFMSVRGKTsKLQkJCXVkZWxheSg3MCk7Ci0JCQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1NFUklBTElURik7Ci0JCQllZXByb21baS8weDEwMF0gPSByZWcgJiAweEZGOwotCQkJdWRlbGF5KDEwKTsKLQkJfQotCQlwcmludF9oZXhfZHVtcF9ieXRlcyhQRlggIkVFUFJPTTogIiwgRFVNUF9QUkVGSVhfTk9ORSwgZWVwcm9tLAotCQkJCSAgICAgQVJSQVlfU0laRShlZXByb20pKTsKLQl9IHdoaWxlICgwKTsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwLCAweDI2KTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgc3lzdGVtIGludGVyZmFjZSAqLwotCXN5c3RlbV9pdGZfaW5pdChwcml2KTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JLyogQ2hpcCBJbml0aWFsaXphdGlvbiAoUG9sYXJpcykgKi8KLQljaGlwX2luaXQocHJpdik7Ci0JbWlnaHRfc2xlZXAoKTsKLQotCS8qIENhbGlicmF0ZSB0aGUgYW50ZW5uYWUgKi8KLQlhbnRlbm5hX2NhbGlicmF0ZShwcml2KTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHhlYzUwKTsKLQlyZWcgJj0gfjB4NDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHhlYzUwLCByZWcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fU09GVFJTVCwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BMTENUTCwgMHgxKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9CTV9CTUNUTCk7Ci0JcmVnIHw9IDB4ODAwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0JNQ1RMLCByZWcpOwotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUpOwotCXJlZyB8PSAweDIwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCByZWcpOwotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JLyogSW5pdGlhbGl6ZSBHYWluIENvbnRyb2wgQ291bnRzICovCi0JZ2Fpbl9jdGxjbnRfaW5pdChwcml2KTsKLQotCS8qIFdyaXRlIEluaXRpYWwgU3RhdGlvbiBQb3dlciBUZW1wbGF0ZSBmb3IgdGhpcyBzdGF0aW9uKCMwKSAqLwotCXN0YV9wb3dlcl9pbml0KHByaXYsIExPQ0FMX1NUQUlEKTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JLyogSW5pdGlhbGl6ZSB0aGUgcngsdGQsdG0gcmluZ3MsIGZvciBlYWNoIG5vZGUgaW4gdGhlIHJpbmcgKi8KLQlmaWxsX3JpbmdzKHByaXYpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCAweDgwMDAwMDMzKTsKLQlhZ254X3dyaXRlMzIoY3RsLCAweGVjNTAsIDB4Yyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCAweDApOwotCi0JLyogRklYTUUgSW5pdGlhbGl6ZSB0aGUgdHJhbnNtaXQgY29udHJvbCByZWdpc3RlciAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NUTCwgMHgxOTRjMSk7Ci0KLQllbmFibGVfcmVjZWl2ZXIocHJpdik7Ci0KLQltaWdodF9zbGVlcCgpOwotCS8qIEZJWE1FIFNldCB0aGUgUmVjZWl2ZSBDb250cm9sIE1hYyBBZGRyZXNzIHRvIGNhcmQgYWRkcmVzcyAqLwotCW1hY19hZGRyZXNzX3NldChwcml2KTsKLQllbmFibGVfcmVjZWl2ZXIocHJpdik7Ci0JbWlnaHRfc2xlZXAoKTsKLQotCS8qIFNldCB0aGUgcmVjaWV2ZSByZXF1ZXN0IHJhdGUgKi8KLQkvKiBGSVhNRSBFbmFibGUgdGhlIHJlcXVlc3QgKi8KLQkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCi0JLyogU2V0IG1heGltdW0gcGFja2V0IGxlbmd0aCAqLwotLyoJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgMHg4ODE5NWUwMCk7ICovCi0vKgllbmFibGVfcmVjZWl2ZXIocHJpdik7ICovCi0KLQkvKiBTZXQgdGhlIFJlY2VpdmVyIEJTU0lEICovCi0JcmVjZWl2ZXJfYnNzaWRfc2V0KHByaXYsIGJzc2lkKTsKLQotCS8qIEZJWE1FIFNldCB0byBtYW5hZ2VkIG1vZGUgKi8KLQlzZXRfbWFuYWdlZF9tb2RlKHByaXYpOwotLyoJc2V0X3Byb21pc2N1b3VzX21vZGUocHJpdik7ICovCi0vKglzZXRfc2Nhbl9tb2RlKHByaXYpOyAqLwotLyoJc2V0X2xlYXJuX21vZGUocHJpdik7ICovCi0vKglzZXRfcHJvbWlzX2FuZF9tYW5hZ2VkKHByaXYpOyAqLwotLyoJc2V0X2FkaG9jX21vZGUocHJpdik7ICovCi0KLQkvKiBTZXQgdGhlIHJlY2lldmUgcmVxdWVzdCByYXRlICovCi0JLyogQ2hlY2sgcGFja2V0IGxlbmd0aCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUsIDB4MDgwMDAwMDApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSk7Ci0JLyogU2V0IG1heGltdW0gcGFja2V0IGxlbmd0aCAqLwotCXJlZyB8PSAweDAwMTk1ZTAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUsIHJlZyk7Ci0KLQkvKiBDb25maWd1cmUgdGhlIFJYIGFuZCBUWCBpbnRlcnJ1cHQgKi8KLQlyZWcgPSBFTkFCTEVfUlhfSU5URVJSVVBUIHwgUlhfQ0FDSEVfTElORSB8IEZSQUdfTEVOXzIwNDggfCBGUkFHX0JFOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1JYQ0ZHLCByZWcpOwotCS8qIEZJWE1FICovCi0JcmVnID0gRU5BQkxFX1RYX0lOVEVSUlVQVCB8IFRYX0NBQ0hFX0xJTkUgfCBGUkFHX0xFTl8yMDQ4IHwgRlJBR19CRTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWENGRywgcmVnKTsKLQotCS8qIEVuYWJsZSBSWCBUWCBJbnRlcnJ1cHRzICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfUlhDVEwsIDB4ODApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYTUNUTCwgMHg4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhEQ1RMLCAweDgwKTsKLQotCS8qIEZJWE1FIFNldCB0aGUgbWFzdGVyIGNvbnRyb2wgaW50ZXJydXB0IGluIGJsb2NrIGNvbnRyb2wgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwsIDB4ODAwKTsKLQotCS8qIEVuYWJsZSBSWCBhbmQgVFggcXVldWVzICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9SWENUTCk7Ci0JcmVnIHw9IDB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9SWENUTCwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1RYTUNUTCk7Ci0JcmVnIHw9IDB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWE1DVEwsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9UWERDVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhEQ1RMLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCAweDUpOwotCS8qIEZJWE1FICovCi0JLyogIHVua25vd19yZWdpc3Rlcl93cml0ZShwcml2KTsgKi8KLQkvKiBVcGRhdGUgbG9jYWwgY2FyZCBoYXNoIGVudHJ5ICovCi0JaGFzaF93cml0ZShwcml2LCBwcml2LT5tYWNfYWRkciwgTE9DQUxfU1RBSUQpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCS8qIEZJWE1FICovCi0JYWdueF9zZXRfY2hhbm5lbChwcml2LCAxKTsKLQltaWdodF9zbGVlcCgpOwotfSAvKiBhZ254X2NhcmRfaW50ZXJmYWNlX2luaXQgKi8KLQotCi12b2lkIGFnbnhfaHdfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCUFHTlhfVFJBQ0U7Ci0JbWlnaHRfc2xlZXAoKTsKLQljYXJkX2ludGVyZmFjZV9pbml0KHByaXYpOwotfQotCi1pbnQgYWdueF9od19yZXNldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXJldHVybiBjYXJkX2Z1bGxfcmVzZXQocHJpdik7Ci19Ci0KLWludCBhZ254X3NldF9zc2lkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCi17Ci0JQUdOWF9UUkFDRTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBhZ254X3NldF9ic3NpZChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpCi17Ci0JcmVjZWl2ZXJfYnNzaWRfc2V0KHByaXYsIGJzc2lkKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BoeS5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NTVmMDUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDkgKzAsMCBAQAotI2lmbmRlZiBBR05YX1BIWV9IXwotI2RlZmluZSBBR05YX1BIWV9IXwotCi0jaW5jbHVkZSAiYWdueC5oIgotCi0vKiBUcmFuc21pc3Npb24gTWFuYWdtZW50IFJlZ2lzdGVycyAqLwotI2RlZmluZSBBR05YX1RYTV9CQVNFCQkweDAwMDAKLSNkZWZpbmUgQUdOWF9UWE1fQ1RMCQkweDAwMDAJLyogY29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBBR05YX1RYTV9FVE1GCQkweDAwMDQgLyogZW5hYmxlIHRyYW5zbWlzc2lvbiBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwotI2RlZmluZSBBR05YX1RYTV9UWFRFTVAJCTB4MDAwOCAvKiB0cmFuc21pc3Npb24gdGVtcGxhdGUgKi8KLSNkZWZpbmUgQUdOWF9UWE1fUkVUUllTVEFJRAkweDAwMGMgLyogUmV0cnkgU3RhdGlvbiBJRCAqLwotI2RlZmluZSBBR05YX1RYTV9USU1FU1RBTVBMTwkJMHgwMDEwCS8qIFRpbWVzdGFtcCBMbyAqLwotI2RlZmluZSBBR05YX1RYTV9USU1FU1RBTVBISQkJMHgwMDE0CS8qIFRpbWVzdGFtcCBIaSAqLwotI2RlZmluZSBBR05YX1RYTV9UWERFTEFZCTB4MDAxOCAgLyogdHggZGVsYXkgKi8KLSNkZWZpbmUgQUdOWF9UWE1fVEJUVExPCQkweDAwMjAJLyogdGJ0dCBMbyAqLwotI2RlZmluZSBBR05YX1RYTV9UQlRUSEkJCTB4MDAyNAkvKiB0YnR0IEhpICovCi0jZGVmaW5lIEFHTlhfVFhNX0JFQUlOVEVSCTB4MDAyOCAvKiBCZWFjb24gSW50ZXJ2YWwgKi8KLSNkZWZpbmUgQUdOWF9UWE1fTkFWCQkweDAwMzAgLyogTkFWICovCi0jZGVmaW5lIEFHTlhfVFhNX0NGUE1EVgkJMHgwMDM0IC8qIENGUCBNRFYgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ0ZQRVJDTlQJMHgwMDM4IC8qIENGUCBwZXJpb2QgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fUFJPQkRFTEFZCTB4MDAzYyAvKiBwcm9iZSBkZWxheSAqLwotI2RlZmluZSBBR05YX1RYTV9MSVNJTlRFUkNOVAkweDAwNDAgLyogbGlzdGVuIGludGVydmFsIGNvdW50ICovCi0jZGVmaW5lIEFHTlhfVFhNX0RUSU1QRVJJQ05UCTB4MDA0YyAvKiBEVElNIHBlcmlvZCBjb3VudCAqLwotCi0jZGVmaW5lIEFHTlhfVFhNX0JFQUNPTl9DVEwJMHgwMDVjIC8qIGJlYWNvbiBjb250cm9sICovCi0KLSNkZWZpbmUgQUdOWF9UWE1fU0NIRU1QQ05UCTB4MDA3YyAvKiBzY2hlZHVsZSBlbXB0eSBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9NQVhUSU1PVVQJMHgwMDg0IC8qIG1heCB0aW1lb3V0IGV4Y2VlZCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9NQVhDRlBUSU0JMHgwMDg4IC8qIG1heCBDRiBwb2xsIHRpbWVvdXQgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fTUFYUlhUSU1FCTB4MDA4YyAvKiBtYXggUlggdGltZW91dCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9NQVhBQ0tUSU0JMHgwMDkwCS8qIG1heCBBQ0sgdGltZW91dCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9ESUYwMQkJMHgwMGEwIC8qIERJRiAwLTEgKi8KLSNkZWZpbmUgQUdOWF9UWE1fRElGMjMJCTB4MDBhNCAvKiBESUYgMi0zICovCi0jZGVmaW5lIEFHTlhfVFhNX0RJRjQ1CQkweDAwYTggLyogRElGIDQtNSAqLwotI2RlZmluZSBBR05YX1RYTV9ESUY2NwkJMHgwMGFjIC8qIERJRiA2LTcgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0lGU1BJRlMJMHgwMGIwIC8qIFNJRlMvUElGUyAqLwotI2RlZmluZSBBR05YX1RYTV9USUZTRUlGUwkweDAwYjQgLyogVElGUy9FSUZTICovCi0jZGVmaW5lIEFHTlhfVFhNX01BWENDQUNOVFNMT1QJMHgwMGI4IC8qIG1heCBDQ0EgY291bnQgc2xvdCAqLwotI2RlZmluZSBBR05YX1RYTV9TTE9UTElNSVQJMHgwMGJjIC8qIHNsb3QgbGltaXQvMSBtc2VjIGxpbWl0ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NGUE9MTFJYVElNCTB4MDBmMCAvKiBDRiBwb2xsIFJYIHRpbWVvdXQgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ0ZBQ0tUMTFCCTB4MDBmNCAvKiBDRiBhY2sgdGltZW91dCBsaW1pdCBmb3IgMTFiICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMAkJMHgwMTAwIC8qIENXIDAgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0wCTB4MDEwOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAwICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMQkJMHgwMTIwIC8qIENXIDEgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0xCTB4MDEyOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAxICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMgkJMHgwMTQwIC8qIENXIDIgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0yCTB4MDE0OCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAyICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXMwkJMHgwMTYwIC8qIENXIDMgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU0zCTB4MDE2OCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCAzICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNAkJMHgwMTgwIC8qIENXIDQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU00CTB4MDE4OCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA0ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNQkJMHgwMWEwIC8qIENXIDUgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU01CTB4MDFhOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA1ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNgkJMHgwMWMwIC8qIENXIDYgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU02CTB4MDFjOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA2ICovCi0jZGVmaW5lIEFHTlhfVFhNX0NXNwkJMHgwMWUwIC8qIENXIDcgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU0xCRUFMSU03CTB4MDFlOCAvKiBzaG9ydC9sb25nIGJlYWNvbiBsaW1pdCA3ICovCi0jZGVmaW5lIEFHTlhfVFhNX0JFQUNPTlRFTVAgICAgIDB4MTAwMAkvKiBiZWFjb24gdGVtcGxhdGUgKi8KLSNkZWZpbmUgQUdOWF9UWE1fU1RBUE9XVEVNUAkweDFhMDAgLyogIFN0YXRpb24gUG93ZXIgVGVtcGxhdGUgKi8KLQotLyogUmVjZWl2ZSBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXJzICovCi0jZGVmaW5lIEFHTlhfUlhNX0JBU0UJCTB4MjAwMAotI2RlZmluZSBBR05YX1JYTV9SRVFSQVRFCTB4MjAwMAkvKiByZXF1ZXN0ZWQgcmF0ZSAqLwotI2RlZmluZSBBR05YX1JYTV9NQUNISQkJMHgyMDA0CS8qIGZpcnN0IDQgYnl0ZXMgb2YgbWFjIGFkZHJlc3MgKi8KLSNkZWZpbmUgQUdOWF9SWE1fTUFDTE8JCTB4MjAwOAkvKiBsYXN0IDIgYnl0ZXMgb2YgbWFjIGFkZHJlc3MgKi8KLSNkZWZpbmUgQUdOWF9SWE1fQlNTSURISQkweDIwMGMJLyogYnNzaWQgaGkgKi8KLSNkZWZpbmUgQUdOWF9SWE1fQlNTSURMTwkweDIwMTAJLyogYnNzaWQgbG8gKi8KLSNkZWZpbmUgQUdOWF9SWE1fSEFTSF9DTURfRkxBRwkweDIwMTQJLyogRmxhZ3MgZm9yIHRoZSBSWCBIYXNoIENvbW1hbmQgRGVmYXVsdDowICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gJMHgyMDE4CS8qIFRoZSBIaWdoIGhhbGYgb2YgdGhlIEhhc2ggQ29tbWFuZCAqLwotI2RlZmluZSBBR05YX1JYTV9IQVNIX0NNRF9MT1cJMHgyMDFjCS8qIFRoZSBMb3cgaGFsZiBvZiB0aGUgSGFzaCBDb21tYW5kICovCi0jZGVmaW5lIEFHTlhfUlhNX1JPVVRBQgkJMHgyMDIwCS8qIHJvdXRpbmcgdGFibGUgKi8KLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1NISUZUCTI0Ci0jZGVmaW5lCQlST1VUQUJfVFlQRV9TSElGVAkyOAotI2RlZmluZQkJUk9VVEFCX1NUQVRVU19TSElGVAkzMAotI2RlZmluZQkJUk9VVEFCX1JXX1NISUZUCQkzMQotI2RlZmluZQkJUk9VVEFCX1JPVVRFX0RST1AJMHhmMDAwMDAgLyogRHJvcCAqLwotI2RlZmluZQkJUk9VVEFCX1JPVVRFX0NQVQkweDQwMDAwMCAvKiBDUFUgKi8KLSNkZWZpbmUJCVJPVVRBQl9ST1VURV9FTkNSWQkweDUwMDgwMCAvKiBFbmNyeXB0aW9uICovCi0jZGVmaW5lCQlST1VUQUJfUk9VVEVfUkZQCTB4ODAwMDAwIC8qIFJGUCAqLwotCi0jZGVmaW5lCQlST1VUQUJfVFlQRV9NQU5BRwkweDAgLyogTWFuYWdlbWVudCAqLwotI2RlZmluZQkJUk9VVEFCX1RZUEVfQ1RMCQkweDEgLyogQ29udHJvbCAqLwotI2RlZmluZQkJUk9VVEFCX1RZUEVfREFUQQkweDIgLyogRGF0YSAqLwotCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9EQVRBCQkweDAKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX0RBVEFBQ0sJCTB4MQotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfREFUQVBPTEwJCTB4MgotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfREFUQVBPTExBQ0sJMHgzCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9OVUxMCQkweDQgLyogTlVMTCAqLwotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfTlVMTEFDSwkJMHg1Ci0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9OVUxMUE9MTAkJMHg2Ci0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9OVUxMUE9MTEFDSwkweDcKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU0RBVEEJCTB4OCAvKiBRT1MgREFUQSAqLwotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfUU9TREFUQUFDSwkweDkKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU0RBVEFQT0xMCTB4YQotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfUU9TREFUQUFDS1BPTEwJMHhiCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9RT1NOVUxMCQkweGMKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU05VTExBQ0sJMHhkCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9RT1NOVUxMUE9MTAkweGUKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU05VTExQT0xMQUNLCTB4ZgotI2RlZmluZSBBR05YX1JYTV9ERUxBWTExCSAgIDB4MjAyNAkvKiBkZWxheSAxMShBQikgKi8KLSNkZWZpbmUgQUdOWF9SWE1fU09GX0NOVAkgICAweDIwMjgJLyogU09GIENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX0ZSQUdfQ05UCSAgIDB4MjAyYwkvKiBGcmFnbWVudCBDb3VudCovCi0jZGVmaW5lIEFHTlhfUlhNX0ZDU19DTlQJICAgMHgyMDMwCS8qIEZDUyBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9CU1NJRF9NSVNTX0NOVAkgICAweDIwMzQJLyogQlNTSUQgTWlzcyBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9QRFVfRVJSX0NOVAkgICAweDIwMzgJLyogUERVIEVycm9yIENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX0RFU1RfTUlTU19DTlQJICAgMHgyMDNDCS8qIERlc3RpbmF0aW9uIE1pc3MgQ291bnQgKi8KLSNkZWZpbmUgQUdOWF9SWE1fRFJPUF9DTlQJICAgMHgyMDQwCS8qIERyb3AgQ291bnQgKi8KLSNkZWZpbmUgQUdOWF9SWE1fQUJPUlRfQ05UCSAgIDB4MjA0NAkvKiBBYm9ydCBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9SRUxBWV9DTlQJICAgMHgyMDQ4CS8qIFJlbGF5IENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfTUlTU19DTlQJICAgMHgyMDRjCS8qIEhhc2ggTWlzcyBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9TQV9ISQkJICAgMHgyMDUwCS8qIEFkZHJlc3Mgb2YgcmVjZWl2ZWQgcGFja2V0IEhpICovCi0jZGVmaW5lIEFHTlhfUlhNX1NBX0xPCQkgICAweDIwNTQJLyogQWRkcmVzcyBvZiByZWNlaXZlZCBwYWNrZXQgTG8gKi8KLSNkZWZpbmUgQUdOWF9SWE1fSEFTSF9EVU1QX0xTVAkgICAweDIxMDAJLyogQ29udGFpbnMgSGFzaCBEYXRhICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfRFVNUF9NU1QJICAgMHgyMTA0CS8qIENvbnRhaW5zIEhhc2ggRGF0YSAqLwotI2RlZmluZSBBR05YX1JYTV9IQVNIX0RVTVBfREFUQSAgICAweDIxMDgJLyogVGhlIFN0YXRpb24gSUQgdG8gZHVtcCAqLwotCi0KLS8qIEVuY3J5cHRpb24gTWFuYWdtZW50ICovCi0jZGVmaW5lIEFHTlhfRU5DUllfQkFTRQkJMHgyNDAwCi0jZGVmaW5lIEFHTlhfRU5DUllfV0VQS0VZMAkweDI0NDAgLyogd2VwIGtleSAjMCAqLwotI2RlZmluZSBBR05YX0VOQ1JZX1dFUEtFWTEJMHgyNDQ0IC8qIHdlcCBrZXkgIzEgKi8KLSNkZWZpbmUgQUdOWF9FTkNSWV9XRVBLRVkyCTB4MjQ0OCAvKiB3ZXAga2V5ICMyICovCi0jZGVmaW5lIEFHTlhfRU5DUllfV0VQS0VZMwkweDI0NGMgLyogd2VwIGtleSAjMyAqLwotI2RlZmluZSBBR05YX0VOQ1JZX0NDTVJFQ1RMCTB4MjQ2MCAvKiBjY20gcmVwbGF5IGNvbnRyb2wgKi8KLQotCi0vKiBCYW5kIE1hbmFnZW1lbnQgUmVnaXN0ZXJzICovCi0jZGVmaW5lIEFHTlhfQk1fQkFTRQkJMHgyYzAwCi0jZGVmaW5lIEFHTlhfQk1fQk1DVEwJCTB4MmMwMCAgLyogYmFuZCBtYW5hZ2VtZW50IGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9UWFdBRERSCQkweDJjMTggIC8qIHR4IHdvcmtxdWV1ZSBhZGRyZXNzIHN0YXJ0ICovCi0jZGVmaW5lIEFHTlhfQk1fVFhUT1BFRVIJMHgyYzI0CS8qIHRyYW5zbWl0IHRvIHBlZXJzICovCi0jZGVmaW5lIEFHTlhfQk1fRlBMSFAJCTB4MmMyYyAgLyogZnJlZSBwb29sIGxpc3QgaGVhZCBwb2ludGVyICovCi0jZGVmaW5lIEFHTlhfQk1fRlBMVFAJCTB4MmMzMCAgLyogZnJlZSBwb29sIGxpc3QgdGFpbCBwb2ludGVyICovCi0jZGVmaW5lIEFHTlhfQk1fRlBDTlQJCTB4MmMzNCAgLyogZnJlZSBwb29sIGNvdW50ICovCi0jZGVmaW5lIEFHTlhfQk1fQ0lQRFVXQ05UCTB4MmMzOCAgLyogY2FyZCBpbnRlcmZhY2UgcGR1IHdvcmtxdWV1ZSBjb3VudCAqLwotI2RlZmluZSBBR05YX0JNX1NQUERVV0NOVAkweDJjM2MgIC8qIHNwIHBkdSB3b3JrcXVldWUgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9SRlBQRFVXQ05UCTB4MmM0MCAgLyogcmZwIHBkdSB3b3JrcXVldWUgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9SSFBQRFVXQ05UCTB4MmM0NCAgLyogcmhwIHBkdSB3b3JrcXVldWUgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9DSVdRQ1RMCQkweDJjNDggLyogQ2FyZCBJbnRlcmZhY2UgV29ya1F1ZXVlIENvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9DUFVUWFdDVEwJMHgyYzUwICAvKiBjcHUgdHggd29ya3F1ZXVlIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9DUFVSWFdDVEwJMHgyYzU4ICAvKiBjcHUgcnggd29ya3F1ZXVlIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9DUFVMV0NUTAkweDJjNjAgLyogY3B1IGxvdyB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX0NQVUhXQ1RMCTB4MmM2OCAvKiBjcHUgaGlnaCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX1NQVFhXQ1RMCTB4MmM3MCAvKiBzcCB0eCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX1NQUlhXQ1RMCTB4MmM3OCAvKiBzcCByeCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX1JGUFdDVEwJCTB4MmM4MCAvKiBSRlAgd29ya3F1ZXVlIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9CTV9NVFNNCQkweDJjOTAgLyogTXVsdGljYXN0IFRyYW5zbWl0IFN0YXRpb24gTWFzayAqLwotCi0vKiBDYXJkIEludGVyZmFjZSBSZWdpc3RlcnMgKDMyYml0cykgKi8KLSNkZWZpbmUgQUdOWF9DSVJfQkFTRQkJMHgzMDAwCi0jZGVmaW5lIEFHTlhfQ0lSX0JMS0NUTAkJMHgzMDAwCS8qIGJsb2NrIGNvbnRyb2wqLwotI2RlZmluZQkJQUdOWF9TVEFUX1RYCTB4MQotI2RlZmluZQkJQUdOWF9TVEFUX1JYCTB4MgotI2RlZmluZQkJQUdOWF9TVEFUX1gJMHg0Ci0vKiBCZWxvdyB0d28gaW50ZXJydXB0IGZsYWdzIHdpbGwgYmUgc2V0IGJ5IG91ciBidXQgbm90IENQVSBvciB0aGUgY2FyZCAqLwotI2RlZmluZQkJQUdOWF9TVEFUX1RYRAkweDEwCi0jZGVmaW5lCQlBR05YX1NUQVRfVFhNCTB4MjAKLQotI2RlZmluZSBBR05YX0NJUl9BRERSV0lOCTB4MzAwNAkvKiBBZGRyZXNzYWJsZSBXaW5kb3dzKi8KLSNkZWZpbmUgQUdOWF9DSVJfRU5ESUFOCQkweDMwMDggIC8qIGNhcmQgZW5kaWFubmVzcyAqLwotI2RlZmluZSBBR05YX0NJUl9TRVJJQUxJVEYJMHgzMDIwCS8qIHNlcmlhbCBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9DSVJfUlhDRkcJCTB4MzA0MAkvKiByZWNlaXZlIGNvbmZpZyAqLwotI2RlZmluZQkJRU5BQkxFX1JYX0lOVEVSUlVQVCAweDIwCi0jZGVmaW5lCQlSWF9DQUNIRV9MSU5FCSAgICAweDgKLS8qIHRoZSBSWCBmcmFnbWVudCBsZW5ndGggKi8KLSNkZWZpbmUJCUZSQUdfTEVOXzI1NgkweDAgLyogMjU2QiAqLwotI2RlZmluZQkJRlJBR19MRU5fNTEyCTB4MQotI2RlZmluZQkJRlJBR19MRU5fMTAyNAkweDIKLSNkZWZpbmUJCUZSQUdfTEVOXzIwNDgJMHgzCi0jZGVmaW5lCQlGUkFHX0JFCQkweDEwCi0jZGVmaW5lIEFHTlhfQ0lSX1JYQ1RMCQkweDMwNTAJLyogcmVjZWl2ZSBjb250cm9sICovCi0vKiBtZW1vcnkgYWRkcmVzcywgY2hpcHNpZGUgKi8KLSNkZWZpbmUgQUdOWF9DSVJfUlhDTVNUQVJUCTB4MzA1NAkvKiByZWNlaXZlIGNsaWVudCBtZW1vcnkgc3RhcnQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfUlhDTUVORAkweDMwNTgJLyogcmVjZWl2ZSBjbGllbnQgbWVtb3J5IGVuZCAqLwotLyogbWVtb3J5IGFkZHJlc3MsIHBjaSAqLwotI2RlZmluZSBBR05YX0NJUl9SWEhPU1RBRERSCTB4MzA2MAkvKiByZWNlaXZlIGhvc3RzaWRlIGFkZHJlc3MgKi8KLS8qIG1lbW9yeSBhZGRyZXNzLCBjaGlwc2lkZSAqLwotI2RlZmluZSBBR05YX0NJUl9SWENMSUFERFIJMHgzMDY0CS8qIHJlY2VpdmUgY2xpZW50c2lkZSBhZGRyZXNzICovCi0jZGVmaW5lIEFHTlhfQ0lSX1JYRE1BQ1RMCTB4MzA2OAkvKiByZWNlaXZlIGRtYSBjb250cm9sICovCi0jZGVmaW5lIEFHTlhfQ0lSX1RYQ0ZHCQkweDMwODAJLyogdHJhbnNtaXQgY29uZmlnICovCi0jZGVmaW5lIEFHTlhfQ0lSX1RYTUNUTAkJMHgzMDkwIC8qIFRyYW5zbWl0IE1hbmFnZW1lbnQgQ29udHJvbCAqLwotI2RlZmluZQkJRU5BQkxFX1RYX0lOVEVSUlVQVCAweDIwCi0jZGVmaW5lCQlUWF9DQUNIRV9MSU5FCSAgICAweDgKLSNkZWZpbmUgQUdOWF9DSVJfVFhNU1RBUlQJMHgzMDk0IC8qIFRyYW5zbWl0IE1hbmFnZW1lbnQgU3RhcnQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhNRU5ECQkweDMwOTggLyogVHJhbnNtaXQgTWFuYWdlbWVudCBFbmQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhEQ1RMCQkweDMwYTAJLyogdHJhbnNtaXQgZGF0YSBjb250cm9sICovCi0vKiBtZW1lb3J5IGFkZHJlc3MsIGNoaXBzZXQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhEU1RBUlQJMHgzMGE0CS8qIHRyYW5zbWl0IGRhdGEgc3RhcnQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhERU5ECQkweDMwYTgJLyogdHJhbnNtaXQgZGF0YSBlbmQgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhNSEFERFIJMHgzMGIwIC8qIFRyYW5zbWl0IE1hbmFnZW1lbnQgSG9zdHNpZGUgQWRkcmVzcyAqLwotI2RlZmluZSBBR05YX0NJUl9UWE1DQUREUgkweDMwYjQgLyogVHJhbnNtaXQgTWFuYWdlbWVudCBDbGllbnRzaWRlIEFkZHJlc3MgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhETUFDVEwJMHgzMGI4CS8qIHRyYW5zbWl0IGRtYSBjb250cm9sICovCi0KLQotLyogUG93ZXIgTWFuYWdtZW50IFVuaXQgKi8KLSNkZWZpbmUgQUdOWF9QTV9CQVNFCQkweDNjMDAKLSNkZWZpbmUgQUdOWF9QTV9QTUNUTAkJMHgzYzAwCS8qIFBNIENvbnRyb2wqLwotI2RlZmluZSBBR05YX1BNX01BQ01TVwkJMHgzYzA4IC8qIE1BQyBNYW51YWwgU2xvdyBXb3JrIEVuYWJsZSAqLwotI2RlZmluZSBBR05YX1BNX1JGQ1RMCQkweDNjMGMgLyogUkYgQ29udHJvbCAqLwotI2RlZmluZSBBR05YX1BNX1BIWU1XCQkweDNjMTQJLyogUGh5IE1hbm5hbCBXb3JrICovCi0jZGVmaW5lIEFHTlhfUE1fU09GVFJTVAkJMHgzYzE4CS8qIFBNVSBTb2Z0IFJlc2V0ICovCi0jZGVmaW5lIEFHTlhfUE1fUExMQ1RMCQkweDNjMWMJLyogUE1VIFBMTCBjb250cm9sKi8KLSNkZWZpbmUgQUdOWF9QTV9URVNUUEhZCQkweDNjMjQgLyogUE1VIFRlc3QgUGh5ICovCi0KLQotLyogSW50ZXJydXB0IENvbnRyb2wgaW50ZXJmYWNlICovCi0jZGVmaW5lIEFHTlhfSU5UX0JBU0UJCTB4NDAwMAotI2RlZmluZSBBR05YX0lOVF9TVEFUCQkweDQwMDAJLyogaW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSBBR05YX0lOVF9NQVNLCQkweDQwMGMJLyogaW50ZXJydXB0IG1hc2sgKi8KLS8qIEZJWE1FICovCi0jZGVmaW5lCQlJUlFfVFhfQkVBQ09OCTB4MQkvKiBUWCBCZWFjb24gKi8KLSNkZWZpbmUJCUlSUV9UWF9SRVRSWQkweDgJLyogVFggUmV0cnkgSW50ZXJydXB0ICovCi0jZGVmaW5lCQlJUlFfVFhfQUNUSVZJVFkJMHgxMAkvKiBUWCBBY3Rpdml0eSAqLwotI2RlZmluZQkJSVJRX1JYX0FDVElWSVRZCTB4MjAJLyogUlggQWN0aXZpdHkgKi8KLS8qIEZJWE1FIEkgZ3Vlc3MgdGhhdCBpbnN0ZWFkIFJYIGEgbm9uZSBleGlzdCBzdGFpb24ncyBwYWNrZXQgb3IKLSAgIHRoZSBzdGF0aW9uIGhhc24ndCBiZWVuIGluaXQgKi8KLSNkZWZpbmUJCUlSUV9SWF9YCTB4NDAKLSNkZWZpbmUJCUlSUV9SWF9ZCTB4ODAJLyogUlggPyAqLwotI2RlZmluZQkJSVJRX1JYX0hBU0hISVQJMHgxMDAJLyogUlggSGFzaCBIaXQgKi8KLSNkZWZpbmUJCUlSUV9SWF9GUkFNRQkweDIwMAkvKiBSWCBGcmFtZSAqLwotI2RlZmluZQkJSVJRX0VSUl9JTlQJMHg0MDAJLyogRXJyb3IgSW50ZXJydXB0ICovCi0jZGVmaW5lCQlJUlFfVFhfUVVFX0ZVTEwJMHg4MDAJLyogVFggV29ya3F1ZXVlIEZ1bGwgKi8KLSNkZWZpbmUJCUlSUV9CQU5ETUFOX0VSUgkweDEwMDAwCS8qIEJhbmR3aWR0aCBNYW5hZ2VtZW50IEVycm9yICovCi0jZGVmaW5lCQlJUlFfVFhfRElTQUJMRQkweDIwMDAwCS8qIFRYIERpc2FibGUgKi8KLSNkZWZpbmUJCUlSUV9SWF9JVkFTRVNLRVkgMHg4MDAwMCAvKiBSWCBJbnZhbGlkIFNlc3Npb24gS2V5ICovCi0jZGVmaW5lCQlJUlFfUlhfS0VZSURNSVMJMHgxMDAwMDAgLyogUlgga2V5IElEIE1pc21hdGNoICovCi0jZGVmaW5lCQlJUlFfUkVQX1RISElUCTB4MjAwMDAwIC8qIFJlcGxheSBUaHJlc2hvbGQgSGl0ICovCi0jZGVmaW5lCQlJUlFfVElNRVIxCTB4NDAwMDAwMCAvKiBUaW1lcjEgKi8KLSNkZWZpbmUJCUlSUV9USU1FUl9DTlQJMHgxMDAwMDAwMCAvKiBUaW1lciBDb3VudCAqLwotI2RlZmluZQkJSVJRX1BIWV9GQVNUSU5UIDB4MjAwMDAwMDAgLyogUGh5IEZhc3QgSW50ZXJydXB0ICovCi0jZGVmaW5lCQlJUlFfUEhZX1NMT1dJTlQJMHg0MDAwMDAwMCAvKiBQaHkgU2xvdyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJCUlSUV9PVEhFUgkweDgwMDAwMDAwIC8qIFVua25vdyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUJCUFHTlhfSVJRX0FMTCAgIAkweGZmZmZmZmZmCi0KLS8qIFN5c3RlbSBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9TWVNJVEZfQkFTRQkweDQ0MDAKLSNkZWZpbmUgQUdOWF9TWVNJVEZfU1lTTU9ERQkweDQ0MDAJLyogc3lzdGVtIG1vZGUgKi8KLSNkZWZpbmUgQUdOWF9TWVNJVEZfR1BJT0lOCTB4NDQxMCAvKiBHUElPIEluICovCi0vKiBQSU4gbGluZXMgZm9yIGxlZHM/ICovCi0jZGVmaW5lIEFHTlhfU1lTSVRGX0dQSU9VVAkweDQ0MTQJLyogR1BJTyBPdXQgKi8KLQotLyogVGltZXIgQ29udHJvbCAqLwotI2RlZmluZSBBR05YX1RJTUNUTF9USU1FUjEJMHg0ODAwIC8qIFRpbWVyIDEgKi8KLSNkZWZpbmUgQUdOWF9USU1DVExfVElNMUNUTAkweDQ4MDggLyogVGltZXIgMSBDb250cm9sICovCi0KLQotLyogQW50ZW5uYSBDYWxpYnJhdGlvbiBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9BQ0lfQkFTRQkJMHg1MDAwCi0jZGVmaW5lIEFHTlhfQUNJX01PREUJCTB4NTAwMCAvKiBNb2RlICovCi0jZGVmaW5lIEFHTlhfQUNJX01FQVNVUkUJMHg1MDA0IC8qIE1lYXN1cmUgKi8KLSNkZWZpbmUgQUdOWF9BQ0lfU0VMQ0hBSU4JMHg1MDA4IC8qIFNlbGVjdCBDaGFpbiAqLwotI2RlZmluZSBBR05YX0FDSV9MRU4JCTB4NTAwYyAvKiBMZW5ndGggKi8KLSNkZWZpbmUgQUdOWF9BQ0lfVElNRVIxCQkweDUwMTggLyogVGltZXIgMSAqLwotI2RlZmluZSBBR05YX0FDSV9USU1FUjIJCTB4NTAxYyAvKiBUaW1lciAyICovCi0jZGVmaW5lIEFHTlhfQUNJX09GRlNFVAkJMHg1MDIwIC8qIE9mZnNldCAqLwotI2RlZmluZSBBR05YX0FDSV9TVEFUVVMJCTB4NTAzMCAvKiBTdGF0dXMgKi8KLSNkZWZpbmUJCUNBTElfSURMRQkweDAKLSNkZWZpbmUJCUNBTElfRE9ORQkweDEKLSNkZWZpbmUJCUNBTElfQlVTWQkweDIKLSNkZWZpbmUJCUNBTElfRVJSCTB4MwotI2RlZmluZSBBR05YX0FDSV9BSUNDSEEwT1ZFCTB4NTAzNCAvKiBBSUMgQ2hhbm5lbCAwIE92ZXJyaWRlICovCi0jZGVmaW5lIEFHTlhfQUNJX0FJQ0NIQTFPVkUJMHg1MDM4IC8qIEFJQyBDaGFubmVsIDEgT3ZlcnJpZGUgKi8KLQotLyogR2FpbiBDb250cm9sIFJlZ2lzdGVycyAqLwotI2RlZmluZSBBR05YX0dDUl9CQVNFCQkweDkwMDAKLS8qIHRocmVzaG9sZCBvZiBwcmltYXJ5IGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhEMEEJCTB4OTAwMAkvKiB0aHJlc2hvbGQ/IEQwIEEgKi8KLS8qIGxvdyB0aHJlc2hvbGQgb2YgcHJpbWFyeSBhbnRlbm5hICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIRDBBTAkJMHg5MDA0CS8qIHRocmVzaG9sZD8gRDAgQSBsb3cgKi8KLS8qIHRocmVzaG9sZCBvZiBzZWNvbmRhcnkgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9USEQwQgkJMHg5MDA4CS8qIHRocmVzaG9sZD8gRDBfQiAqLwotI2RlZmluZSBBR05YX0dDUl9EVU5TQVQJCTB4OTAwYyAvKiBkIHVuc2F0dXJhdGVkICovCi0jZGVmaW5lIEFHTlhfR0NSX0RTQVQJCTB4OTAxMCAvKiBkIHNhdHVyYXRlZCAqLwotI2RlZmluZSBBR05YX0dDUl9ERklSQ0FMCTB4OTAxNCAvKiBEIEZpci9DYWwgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfREdDVEwxMUEJMHg5MDE4IC8qIGQgZ2FpbiBjb250cm9sIDExYSAqLwotI2RlZmluZSBBR05YX0dDUl9ER0NUTDExQgkweDkwMWMgLyogZCBnYWluIGNvbnRyb2wgMTFiICovCi0vKiBzdHJlbmd0aCBvZiBnYWluICovCi0jZGVmaW5lIEFHTlhfR0NSX0dBSU5JTklUCTB4OTAyMAkvKiBnYWluIGluaXRpYWxpemF0aW9uICovCi0jZGVmaW5lIEFHTlhfR0NSX1RITk9TSUcJMHg5MDI0IC8qIHRocmVob2xkIG5vIHNpZ25hbCAqLwotI2RlZmluZSBBR05YX0dDUl9DT0FSU1RFUAkweDkwMjggLyogY29hcnNlIHN0ZXBwaW5nICovCi0jZGVmaW5lIEFHTlhfR0NSX1NJRlNUMTFBCTB4OTAyYyAvKiBzaWZ4IHRpbWUgMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX1NJRlNUMTFCCTB4OTAzMCAvKiBzaWZ4IHRpbWUgMTFiICovCi0jZGVmaW5lIEFHTlhfR0NSX0NXREVURUMJMHg5MDM0IC8qIGN3IGRldGVjdGlvbiAqLwotI2RlZmluZSBBR05YX0dDUl8wWDM4CQkweDkwMzggLyogPz8/PyAqLwotI2RlZmluZSBBR05YX0dDUl9CT0FDVAkJMHg5MDNjCS8qIEJPIEFjdGl2ZSAqLwotI2RlZmluZSBBR05YX0dDUl9CT0lOQUNUCTB4OTA0MAkvKiBCTyBJbmFjdGl2ZSAqLwotI2RlZmluZSBBR05YX0dDUl9CT0RZTkEJCTB4OTA0NAkvKiBCTyBkeW5hbWljICovCi0vKiA4MDIuMTEgbW9kZShhLGIsZykgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfRElTQ09WTU9ECTB4OTA0OAkvKiBkaXNjb3ZlcnkgbW9kZSAqLwotI2RlZmluZSBBR05YX0dDUl9OTElTVEFOVAkweDkwNGMJLyogbnVtYmVyIG9mIGxpc3RlbmluZyBhbnRlbm5hICovCi0jZGVmaW5lIEFHTlhfR0NSX05BQ1RJQU5UCTB4OTA1MAkvKiBudW1iZXIgb2YgYWN0aXZlIGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTk1FQVNBTlQJMHg5MDU0CS8qIG51bWJlciBvZiBtZWFzdXJpbmcgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9OQ0FQVEFOVAkweDkwNTgJLyogbnVtYmVyIG9mIGNhcHR1cmUgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9USENBUDExQQkweDkwNWMgLyogdGhyZXNob2xkIGNhcHR1cmUgMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIQ0FQMTFCCTB4OTA2MCAvKiB0aHJlc2hvbGQgY2FwdHVyZSAxMWIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDQVBSWDExQQkweDkwNjQgLyogdGhyZXNob2xkIGNhcHR1cmUgcnggMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIQ0FQUlgxMUIJMHg5MDY4IC8qIHRocmVzaG9sZCBjYXB0dXJlIHJ4IDExYiAqLwotI2RlZmluZSBBR05YX0dDUl9USExFVkRSTwkweDkwNmMgLyogdGhyZXNob2xkIGxldmVsIGRyb3AgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfR0FJTlNFVDAJMHg5MDcwIC8qIEdhaW5zZXQgMCAqLwotI2RlZmluZSBBR05YX0dDUl9HQUlOU0VUMQkweDkwNzQgLyogR2FpbnNldCAxICovCi0jZGVmaW5lIEFHTlhfR0NSX0dBSU5TRVQyCTB4OTA3OCAvKiBHYWluc2V0IDIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTUFYUlhUSU1FMTFBCTB4OTA3YyAvKiBtYXhpbXVtIHJ4IHRpbWUgMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX01BWFJYVElNRTExQgkweDkwODAgLyogbWF4aW11bSByeCB0aW1lIDExYiAqLwotI2RlZmluZSBBR05YX0dDUl9DT1JSVElNRQkweDkwODQgLyogY29ycmVjdGlvbiB0aW1lICovCi0vKiByZXNldCB0aGUgc3Vic3lzdGVtLCAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAqLwotI2RlZmluZSBBR05YX0dDUl9SU1RHQ1RMCTB4OTA4OAkvKiByZXNldCBnYWluIGNvbnRyb2wgKi8KLS8qIGNoYW5uZWwgcmVjZWl2aW5nICovCi0jZGVmaW5lIEFHTlhfR0NSX1JYQ0hBTkVMCTB4OTA4YwkvKiByZWNlaXZlIGNoYW5uZWwgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTk9JU0UwCQkweDkwOTAgLyogTm9pc2UgMCAqLwotI2RlZmluZSBBR05YX0dDUl9OT0lTRTEJCTB4OTA5NCAvKiBOb2lzZSAxICovCi0jZGVmaW5lIEFHTlhfR0NSX05PSVNFMgkJMHg5MDk4IC8qIE5vaXNlIDIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfU0lHSFRICQkweDkwOWMJLyogU2lnbmFsIEhpZ2ggVGhyZXNob2xkICovCi0jZGVmaW5lIEFHTlhfR0NSX1NJR0xUSAkJMHg5MGEwCS8qIFNpZ25hbCBMb3cgVGhyZXNob2xkICovCi0jZGVmaW5lIEFHTlhfR0NSX0NPUlJEUk9QCTB4OTBhNCAvKiBjb3JyZWN0aW9uIGRyb3AgKi8KLS8qIHRocmVzaG9sZCBvZiB0ZXJ0aWF5IGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDRAkJMHg5MGE4CS8qIHRocmVzaG9sZD8gQ0QgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDUwkJMHg5MGFjCS8qIHRocmVzaG9sZD8gQ1MgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTUFYUE9XRElGRgkweDkwYjggLyogbWF4aW11bSBwb3dlciBkaWZmZXJlbmNlICovCi0jZGVmaW5lIEFHTlhfR0NSX1RSQUNOVDQJMHg5MGVjIC8qIFRyYW5zaXRpb24gQ291bnQgNCAqLwotI2RlZmluZSBBR05YX0dDUl9UUkFDTlQ1ICAgICAgCTB4OTBmMAkvKiB0cmFuc2l0aW9uIGNvdW50IDUgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVFJBQ05UNiAgICAgICAJMHg5MGY0CS8qIHRyYW5zaXRpb24gY291bnQgNiAqLwotI2RlZmluZSBBR05YX0dDUl9UUkFDTlQ3ICAgICAgIAkweDkwZjgJLyogdHJhbnNpdGlvbiBjb3V0biA3ICovCi0jZGVmaW5lIEFHTlhfR0NSX1RFU1RCVVMJMHg5MTFjIC8qIHRlc3QgYnVzICovCi0jZGVmaW5lIEFHTlhfR0NSX0NIQUlOTlVNCTB4OTEyMCAvKiBOdW1iZXIgb2YgQ2hhaW5zICovCi0jZGVmaW5lIEFHTlhfR0NSX0FOVENGRwkJMHg5MTI0CS8qIEFudGVubmEgQ29uZmlnICovCi0jZGVmaW5lIEFHTlhfR0NSX1RISlVNUAkJMHg5MTJjIC8qIHRocmVob2xkIGp1bXAgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhQT1dFUgkweDkxMzAgLyogdGhyZXNob2xkIHBvd2VyICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIUE9XQ0xJUAkweDkxMzQgLyogdGhyZXNob2xkIHBvd2VyIGNsaXAqLwotI2RlZmluZSBBR05YX0dDUl9GT1JDRUNUTENMSwkweDkxMzggLyogRm9yY2UgR2FpbiBDb250cm9sIENsb2NrICovCi0jZGVmaW5lIEFHTlhfR0NSX0dBSU5TRVRXUklURQkweDkxM2MgLyogR2FpbnNldCBXcml0ZSAqLwotI2RlZmluZSBBR05YX0dDUl9USEQwQlRGRVNUCTB4OTE0MAkvKiB0aHJlc2hvbGQgZDAgYiB0ZiBlc3RpbWF0ZSAqLwotI2RlZmluZSBBR05YX0dDUl9USFJYMTFCUE9XTUlOCTB4OTE0NAkvKiB0aHJlc2hvbGQgcnggMTFiIHBvd2VyIG1pbmltdW0gKi8KLSNkZWZpbmUgQUdOWF9HQ1JfMFgxNGMJCTB4OTE0YyAvKiA/PyAqLwotI2RlZmluZSBBR05YX0dDUl8wWDE1MAkJMHg5MTUwIC8qID8/ICovCi0jZGVmaW5lIEFHTlhfR0NSX1JYT1ZFUklERQkweDkxOTQJLyogcmVjaWV2ZSBvdmVycmlkZSAqLwotI2RlZmluZSBBR05YX0dDUl9XQVRDSERPRwkweDkxYjAJLyogd2F0Y2hkb2cgdGltZW91dCAqLwotCi0KLS8qIFNwaSBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9TUElfQkFTRQkJMHhkYzAwCi0jZGVmaW5lIEFHTlhfU1BJX0NGRwkJMHhkYzAwIC8qIHNwaSBjb25maWd1cmF0aW9uICovCi0vKiBPbmx5IGFjY2VwdCAxNiBiaXRzICovCi0jZGVmaW5lIEFHTlhfU1BJX1dNU1cJCTB4ZGMwNAkvKiB3cml0ZSBtb3N0IHNpZ25pZmljYW50IHdvcmQgKi8KLS8qIE9ubHkgYWNjZXB0IDE2IGJpdHMgKi8KLSNkZWZpbmUgQUdOWF9TUElfV0xTVwkJMHhkYzA4CS8qIHdyaXRlIGxlYXN0IHNpZ25pZmljYW50IHdvcmQgKi8KLSNkZWZpbmUgQUdOWF9TUElfQ1RMCQkweGRjMGMJLyogc3BpIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9TUElfUk1TVwkJMHhkYzEwIC8qIHJlYWQgbW9zdCBzaWduaWZpY2FudCB3b3JkICovCi0jZGVmaW5lIEFHTlhfU1BJX1JMU1cJCTB4ZGMxNCAvKiByZWFkIGxlYXN0IHNpZ25pZmljYW50IHdvcmQgKi8KLS8qIFNQSSBDb250cm9sIE1hc2sgKi8KLSNkZWZpbmUJCVNQSV9SRUFEX0NUTAkJMHg0MDAwIC8qIHJlYWQgY29udHJvbCAqLwotI2RlZmluZQkJU1BJX0JVU1lfQ1RMCQkweDgwMDAgLyogYnVzeSBjb250cm9sICovCi0vKiBSRiBhbmQgc3ludGggY2hpcHMgaW4gc3BpICovCi0jZGVmaW5lCQlSRl9DSElQMAkweDQwMAotI2RlZmluZQkJUkZfQ0hJUDEJMHg4MDAKLSNkZWZpbmUJCVJGX0NISVAyCTB4MTAwMAotI2RlZmluZQkJU1lOVEhfQ0hJUAkweDIwMDAKLQotLyogVW5rbm93biByZWdpc3RlciAqLwotI2RlZmluZSBBR05YX1VOS05PV05fQkFTRQkweDc4MDAKLQotLyogRklYTUUgTW9uaXRvckdhaW4gKi8KLSNkZWZpbmUgQUdOWF9NT05HQ1JfQkFTRQkweDEyMDAwCi0KLS8qIEdhaW4gVGFibGUgKi8KLSNkZWZpbmUgQUdOWF9HQUlOX1RBQkxFCQkweDEyNDAwCi0KLS8qIFRoZSBpbml0aWFsIEZJUiBjb2VmZmljaWVudCB0YWJsZSAqLwotI2RlZmluZSBBR05YX0ZJUl9CQVNFCQkweDE5ODA0Ci0KLSNkZWZpbmUgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTAkweDgwMAotCi0vKiBlZXByb20gY29tbWFuZHMgKi8KLSNkZWZpbmUgRUVQUk9NX0NNRF9OVUxMCQkweDAgLyogTlVMTCAqLwotI2RlZmluZSBFRVBST01fQ01EX1dSSVRFCTB4MiAvKiB3cml0ZSAqLwotI2RlZmluZSBFRVBST01fQ01EX1JFQUQJCTB4MyAvKiByZWFkICovCi0jZGVmaW5lIEVFUFJPTV9DTURfU1RBVFVTUkVBRAkweDUgLyogc3RhdHVzIHJlZ2lzdGVyIHJlYWQgKi8KLSNkZWZpbmUgRUVQUk9NX0NNRF9XUklURUVOQUJMRQkweDYgLyogd3JpdGUgZW5hYmxlICovCi0jZGVmaW5lIEVFUFJPTV9DTURfQ09ORklHVVJFCTB4NyAvKiBjb25maWd1cmUgKi8KLQotI2RlZmluZSBFRVBST01fREFUQUZPUkNPRklHVVJFCTB4NiAvKiA/Pz8gKi8KLQotLyogZWVwcm9tIGFkZHJlc3MgKi8KLSNkZWZpbmUgRUVQUk9NX0FERFJfU1VCVklECTB4MCAvKiBTdWIgVmVuZG9yIElEICovCi0jZGVmaW5lIEVFUFJPTV9BRERSX1NVQlNJRAkweDIgLyogU3ViIFN5c3RlbSBJRCAqLwotI2RlZmluZSBFRVBST01fQUREUl9NQUNBRERSCTB4MTQ2IC8qIE1BQyBBZGRyZXNzICovCi0jZGVmaW5lIEVFUFJPTV9BRERSX0xPVFlQRQkweDE0ZiAvKiBMTyB0eXBlICovCi0KLXN0cnVjdCBhZ254X2VlcHJvbSB7Ci0JdTggZGF0YTsJLyogZGF0ZSAqLwotCXUxNiBhZGRyZXNzOwkvKiBhZGRyZXNzIGluIEVFUFJPTSAqLwotCXU4IGNtZDsJCS8qIGNvbW1hbmQsIHVua25vd24sIHN0YXR1cyAqLwotfSAgX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0jZGVmaW5lIEFHTlhfRUVQUk9NX0NPTU1BTkRfU0hJRlQJNQotI2RlZmluZSBBR05YX0VFUFJPTV9DT01NQU5EX1NUQVQJMHgwMQotCi12b2lkIGRpc2FibGVfcmVjZWl2ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGVuYWJsZV9yZWNlaXZlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXU4IHJlYWRfZnJvbV9lZXByb20oc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTE2IGFkZHJlc3MpOwotdm9pZCBhZ254X2h3X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1pbnQgYWdueF9od19yZXNldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWludCBhZ254X3NldF9zc2lkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOwotdm9pZCBhZ254X3NldF9ic3NpZChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOwotdm9pZCBlbmFibGVfcG93ZXJfc2F2aW5nKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBkaXNhYmxlX3Bvd2VyX3NhdmluZyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgY2FsaWJyYXRlX2FudGVubmFfcGVyaW9kKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLSNlbmRpZiAvKiBBR05YX1BIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3JmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTQ1N2EuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYworKysgL2Rldi9udWxsCkBAIC0xLDg5MyArMCwwIEBACi0vKioKLSAqIEFpcmdvIE1JTU8gd2lyZWxlc3MgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3IExpIFlhbkJvIDxkcmVhbWZseTI4MUBnbWFpbC5jb20+Ci0KLSAqIFRoYW5rcyBmb3IgSmVmZiBXaWxsaWFtcyA8YW5nZWxiYW5lQGdtYWlsLmNvbT4gZG8gcmV2ZXJzZSBlbmdpbmVlcgotICogd29ya3MgYW5kIHB1Ymxpc2hlZCB0aGUgU1BFQ1MgYXQgaHR0cDovL2FpcmdvLndkd2NvbnN1bHRpbmcubmV0L215bW9pbgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgImFnbnguaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInBoeS5oIgotI2luY2x1ZGUgInRhYmxlLmgiCi0KLS8qIEZJWE1FISAqLwotc3RhdGljIGlubGluZSB2b2lkIHNwaV93cml0ZSh2b2lkIF9faW9tZW0gKnJlZ2lvbiwgdTMyIGNoaXBfaWRzLCB1MzIgc3csCi0JCSAgICAgIHUxNiBzaXplLCB1MzIgY29udHJvbCkKLXsKLQl1MzIgcmVnOwotCXUzMiBsc3cgPSBzdyAmIDB4ZmZmZjsJCS8qIGxvd2VyIDE2IGJpdHMgb2Ygc3cqLwotCXUzMiBtc3cgPSBzdyA+PiAxNjsJCS8qIGhpZ2ggMTYgYml0cyBvZiBzdyAqLwotCi0JLyogRklYTUUgV3JpdGUgTW9zdCBTaWduaWZpY2FudCBXb3JkIG9mIHRoZSAzMmJpdCBkYXRhIHRvIE1TVyAqLwotCS8qIEZJWE1FIEFuZCBMZWFzdCBTaWduaWZpY2FudCBXb3JkIHRvIExTVyAqLwotCWlvd3JpdGUzMigobHN3KSwgcmVnaW9uICsgQUdOWF9TUElfV0xTVyk7Ci0JaW93cml0ZTMyKChtc3cpLCByZWdpb24gKyBBR05YX1NQSV9XTVNXKTsKLQlyZWcgPSBjaGlwX2lkcyB8IHNpemUgfCBjb250cm9sOwotCS8qIFdyaXRlIGNoaXAgaWQocyksIHdyaXRlIHNpemUgYW5kIGJ1c3kgY29udHJvbCB0byBDb250cm9sIFJlZ2lzdGVyICovCi0JaW93cml0ZTMyKChyZWcpLCByZWdpb24gKyBBR05YX1NQSV9DVEwpOwotCS8qIFdhaXQgZm9yIEJ1c3kgY29udHJvbCB0byBjbGVhciAqLwotCXNwaV9kZWxheSgpOwotfQotCi0vKgotICogV3JpdGUgdG8gU1BJIFN5bnRoIHJlZ2lzdGVyCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGlfc3lfd3JpdGUodm9pZCBfX2lvbWVtICpyZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KQotewotCS8qIEZJWE1FIHRoZSBzaXplIDB4MTUgaXMgYSBtYWdpYyB2YWx1ZSovCi0Jc3BpX3dyaXRlKHJlZ2lvbiwgY2hpcF9pZHMsIHN3LCAweDE1LCBTUElfQlVTWV9DVEwpOwotfQotCi0vKgotICogV3JpdGUgdG8gU1BJIFJGIHJlZ2lzdGVyCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGlfcmZfd3JpdGUodm9pZCBfX2lvbWVtICpyZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KQotewotCS8qIEZJWE1FIHRoZSBzaXplIDB4ZCBpcyBhIG1hZ2ljIHZhbHVlKi8KLQlzcGlfd3JpdGUocmVnaW9uLCBjaGlwX2lkcywgc3csIDB4ZCwgU1BJX0JVU1lfQ1RMKTsKLX0gLyogc3BpX3JmX3dyaXRlICovCi0KLS8qCi0gKiBXcml0ZSB0byBTUEkgd2l0aCBSZWFkIENvbnRyb2wgYml0IHNldAotICovCi1pbmxpbmUgdm9pZCBzcGlfcmNfd3JpdGUodm9pZCBfX2lvbWVtICpyZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KQotewotCS8qIEZJWE1FIHRoZSBzaXplIDB4ZTUgaXMgYSBtYWdpYyB2YWx1ZSAqLwotCXNwaV93cml0ZShyZWdpb24sIGNoaXBfaWRzLCBzdywgMHhlNSwgU1BJX0JVU1lfQ1RMfFNQSV9SRUFEX0NUTCk7Ci19Ci0KLS8qIEdldCB0aGUgYWN0aXZlIGNoYWlucydzIGNvdW50ICovCi1zdGF0aWMgaW50IGdldF9hY3RpdmVfY2hhaW5zKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IG51bSA9IDA7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjEpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0JaWYgKHJlZyA9PSAxKQotCQludW0rKzsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAxLCAweDIxKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCWlmIChyZWcgPT0gMSkKLQkJbnVtKys7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgyMSk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQlpZiAocmVnID09IDEpCi0JCW51bSsrOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjYpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0JaWYgKDB4MzMgIT0gcmVnKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5tYXRjaGVkIHJmIGNoaXBzIHJlc3VsdFxuIik7Ci0KLQlyZXR1cm4gbnVtOwotfSAvKiBnZXRfYWN0aXZlX2NoYWlucyAqLwotCi12b2lkIHJmX2NoaXBzX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCWludCBudW07Ci0JQUdOWF9UUkFDRTsKLQotCWlmIChwcml2LT5yZXZpZCA9PSAxKSB7Ci0JCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VUKTsKLQkJcmVnIHw9IDB4ODsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCByZWcpOwotCX0KLQotCS8qIFNldCBTUEkgY2xvY2sgc3BlZWQgdG8gMjAwTlMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weEY7Ci0JcmVnIHw9IDB4MzsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQkvKiBTZXQgU1BJIGNsb2NrIHNwZWVkIHRvIDUwTlMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weEY7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMTAxKTsKLQotCW51bSA9IGdldF9hY3RpdmVfY2hhaW5zKHByaXYpOwotCXByaW50ayhLRVJOX0lORk8gUEZYICJBY3RpdmUgY2hhaW5zIGFyZSAlZFxuIiwgbnVtKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfQ0ZHKTsKLQlyZWcgJj0gfjB4RjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxOTA4KTsKLX0gLyogcmZfY2hpcHNfaW5pdCAqLwotCi0KLXN0YXRpYyB1MzIgY2hhbm5lbF90YmxbMTVdWzldID0gewotCXswLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCi0JezEsICAweDAwLCAweDAwLCAweDYyNCwgMHgwMCwgMHgxYTQsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXsyLCAgMHgwMCwgMHgwMCwgMHg2MTUsIDB4MDAsIDB4MWFlLCAweDI4LCAweDAwLCAweDFlfSwKLQl7MywgIDB4MDAsIDB4MDAsIDB4NjFhLCAweDAwLCAweDFhZSwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezQsICAweDAwLCAweDAwLCAweDYxZiwgMHgwMCwgMHgxYWUsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXs1LCAgMHgwMCwgMHgwMCwgMHg2MjQsIDB4MDAsIDB4MWFlLCAweDI4LCAweDAwLCAweDFlfSwKLQl7NiwgIDB4MDAsIDB4MDAsIDB4NjFmLCAweDAwLCAweDFiMywgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezcsICAweDAwLCAweDAwLCAweDYyNCwgMHgwMCwgMHgxYjMsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXs4LCAgMHgwMCwgMHgwMCwgMHg2MjksIDB4MDAsIDB4MWIzLCAweDI4LCAweDAwLCAweDFlfSwKLQl7OSwgIDB4MDAsIDB4MDAsIDB4NjI0LCAweDAwLCAweDFiOCwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezEwLCAweDAwLCAweDAwLCAweDYyOSwgMHgwMCwgMHgxYjgsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXsxMSwgMHgwMCwgMHgwMCwgMHg2MmUsIDB4MDAsIDB4MWI4LCAweDI4LCAweDAwLCAweDFlfSwKLQl7MTIsIDB4MDAsIDB4MDAsIDB4NjMzLCAweDAwLCAweDFiOCwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezEzLCAweDAwLCAweDAwLCAweDYyOCwgMHgwMCwgMHgxYjgsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXsxNCwgMHgwMCwgMHgwMCwgMHg2NDQsIDB4MDAsIDB4MWI4LCAweDI4LCAweDAwLCAweDFlfSwKLX07Ci0KLQotc3RhdGljIGlubGluZSB2b2lkCi1jaGFubmVsX3RibF93cml0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IHJlZ19udW0pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCXJlZyA9IGNoYW5uZWxfdGJsW2NoYW5uZWxdW3JlZ19udW1dOwotCXJlZyA8PD0gNDsKLQlyZWcgfD0gcmVnX251bTsKLQlzcGlfc3lfd3JpdGUoY3RsLCBTWU5USF9DSElQLCByZWcpOwotfQotCi1zdGF0aWMgdm9pZCBzeW50aF9mcmVxX3NldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQotCS8qIFNldCB0aGUgQ2xvY2sgYml0cyB0byA1ME5TICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9DRkcpOwotCXJlZyAmPSB+MHhGOwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TUElfQ0ZHLCByZWcpOwotCi0JLyogV3JpdGUgMHgwMGMwIHRvIExTVyBhbmQgMHgzIHRvIE1TVyBvZiBTeW50aCBDaGlwICovCi0Jc3BpX3N5X3dyaXRlKGN0bCwgU1lOVEhfQ0hJUCwgMHgzMDBjMCk7Ci0KLQlzcGlfc3lfd3JpdGUoY3RsLCBTWU5USF9DSElQLCAweDMyKTsKLQotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgMSBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDEpOwotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgMyBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDMpOwotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgNiBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDYpOwotCS8qICMgV3JpdGUgdG8gUmVnaXN0ZXIgNSBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDUpOwotCS8qICMgV3JpdGUgdG8gcmVnaXN0ZXIgOCBvbiB0aGUgU3ludGggQ2hpcCAqLwotCWNoYW5uZWxfdGJsX3dyaXRlKHByaXYsIGNoYW5uZWwsIDgpOwotCi0JLyogRklYTUUgQ2xlYXIgdGhlIGNsb2NrIGJpdHMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TUElfQ0ZHLCByZWcpOwotfSAvKiBzeW50aF9jaGlwX2luaXQgKi8KLQotCi1zdGF0aWMgdm9pZCBhbnRlbm5hX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgaW50IG51bV9hbnRlbm5hKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0Jc3dpdGNoIChudW1fYW50ZW5uYSkgewotCWNhc2UgMToKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTUVBU0FOVCwgMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05BQ1RJQU5ULCAxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDEpOwotCi0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0FOVENGRywgNyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAzNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPSU5BQ1QsIDM0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9EWU5BLCAzMCk7Ci0KLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEEsIDEyNSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBTCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEIsIDkwKTsKLQotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQlRGRVNULCA4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0hUSCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHTFRILCAxNik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTUVBU0FOVCwgMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05BQ1RJQU5ULCAyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9BTlRDRkcsIDE1KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9BQ1QsIDM2KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9JTkFDVCwgMzYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0RZTkEsIDMyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEEsIDEyMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBTCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEIsIDgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEJURkVTVCwgNzApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdIVEgsIDEwMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgMzIpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05MSVNUQU5ULCAzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTk1FQVNBTlQsIDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OQUNUSUFOVCwgMyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05DQVBUQU5ULCAzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQU5UQ0ZHLCAzMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAzNik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPSU5BQ1QsIDM2KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9EWU5BLCAzMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBLCAxMDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQUwsIDEwMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCLCA3MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCVEZFU1QsIDcwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHSFRILCAxMDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDQ4KTsKLS8qCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDE2KTsgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vdyBhbnRlbm5hIG51bWJlclxuIik7Ci0JfQotfSAvKiBhbnRlbm5hX2luaXQgKi8KLQotc3RhdGljIHZvaWQgY2hhaW5fdXBkYXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUzMiBjaGFpbikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQotCWlmIChyZWcgPT0gMHg0KQotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgcmVnfDB4MTAwMCk7Ci0JZWxzZSBpZiAocmVnICE9IDB4MCkKLQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIHJlZ3wweDEwMDApOwotCWVsc2UgewotCQlpZiAoY2hhaW4gPT0gMyB8fCBjaGFpbiA9PSA2KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgcmVnfDB4MTAwMCk7Ci0JCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0JCX0gZWxzZSBpZiAoY2hhaW4gPT0gMiB8fCBjaGFpbiA9PSA0KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgcmVnfDB4MTAwMCk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgxMDA1KTsKLQkJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHg4MjQpOwotCQl9IGVsc2UgaWYgKGNoYWluID09IDEpIHsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwLCByZWd8MHgxMDAwKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAxfFJGX0NISVAyLCAweDEwMDQpOwotCQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweGMzNik7Ci0JCX0KLQl9Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMik7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSAwOgotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMDA1KTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlpZiAoY2hhaW4gPT0gNiB8fCBjaGFpbiA9PSA0KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAyKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEwMDUpOwotCQl9IGVsc2UgaWYgKGNoYWluIDwgMykgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MTIwMik7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMXxSRl9DSElQMiwgMHgxMDA1KTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAoY2hhaW4gPT0gMykgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTIwMyk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgxMjAxKTsKLQkJfSBlbHNlIGlmIChjaGFpbiA9PSAyKSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgxMjAzKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEyMDApOwotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDEsIDB4MTIwMSk7Ci0JCX0gZWxzZSBpZiAoY2hhaW4gPT0gMSkgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MTIwMyk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMXxSRl9DSElQMiwgMHgxMjAwKTsKLQkJfSBlbHNlIGlmIChjaGFpbiA9PSA0KSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAzKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEyMDEpOwotCQl9IGVsc2UgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MTIwMyk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMXxSRl9DSElQMiwgMHgxMjAxKTsKLQkJfQotCX0KLX0gLyogY2hhaW5fdXBkYXRlICovCi0KLXN0YXRpYyB2b2lkIGFudGVubmFfY29uZmlnKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JLyogV3JpdGUgMHgwIHRvIHRoZSBUWCBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIgRW5hYmxlIGJpdCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQlyZWcgJj0gfjB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVEwsIHJlZyk7Ci0KLQkvKiBGSVhNRSAqLwotCS8qIFNldCBpbml0aWFsIHZhbHVlIGJhc2VkIG9uIG51bWJlciBvZiBBbnRlbm5hZSAqLwotCWFudGVubmFfaW5pdChwcml2LCAzKTsKLQotCS8qIEZJWE1FIFVwZGF0ZSBQb3dlciBUZW1wbGF0ZXMgZm9yIGN1cnJlbnQgdmFsaWQgU3RhdGlvbnMgKi8KLQkvKiBzdGFfcG93ZXJfaW5pdChwcml2LCAwKTsqLwotCi0JLyogRklYTUUgdGhlIG51bWJlciBvZiBjaGFpbnMgc2hvdWxkIGdldCBmcm9tIGVlcHJvbSovCi0JY2hhaW5fdXBkYXRlKHByaXYsIEFHTlhfQ0hBSU5TX01BWCk7Ci19IC8qIGFudGVubmFfY29uZmlnICovCi0KLXZvaWQgY2FsaWJyYXRlX29zY2lsbGF0b3Ioc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxKTsKLQlyZWcgfD0gMHgxMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSwgcmVnKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVRXUklURSwgMSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMSk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4M2ZmKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMSwgMHgyNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIyLCAweDI3KTsKLQkvKiAoUmVzaWR1YWwgREMgQ2FsaWJyYXRpb24pIHRvIENhbGlicmF0aW9uIE1vZGUgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NT0RFLCAweDIpOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTAwNCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweDNmZik7Ci0JLyogKFRYIExPIENhbGlicmF0aW9uKSB0byBDYWxpYnJhdGlvbiBNb2RlICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTU9ERSwgMHg0KTsKLQotCWRvIHsKLQkJdTMyICByZWcxLCByZWcyLCByZWczOwotCQkvKiBFbmFibGUgUG93ZXIgU2F2aW5nIENvbnRyb2wgKi8KLQkJZW5hYmxlX3Bvd2VyX3NhdmluZyhwcml2KTsKLQkJLyogU2F2ZSB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyB0byByZXN0b3JlICovCi0JCXJlZzEgPSBpb3JlYWQzMihjdGwgKyAweDExMDAwKTsKLQkJcmVnMiA9IGlvcmVhZDMyKGN0bCArIDB4ZWM1MCk7Ci0JCXJlZzMgPSBpb3JlYWQzMihjdGwgKyAweGVjNTQpOwotCQl3bWIoKTsKLQotCQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDAwLCAweGNmZGYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGVjNTAsIDB4NzApOwotCQkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgKi8KLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwMCwgcmVnMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgcmVnMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1NCwgcmVnMyk7Ci0JCS8qIERpc2FibGUgUG93ZXIgU2F2aW5nIENvbnRyb2wgKi8KLQkJZGlzYWJsZV9wb3dlcl9zYXZpbmcocHJpdik7Ci0JfSB3aGlsZSAoMCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAwKTsKLX0gLyogY2FsaWJyYXRlX29zY2lsbGF0b3IgKi8KLQotCi1zdGF0aWMgdm9pZCByYWRpb19jaGFubmVsX3NldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1bnNpZ25lZCBpbnQgZnJlcSA9IHByaXYtPmJhbmQuY2hhbm5lbHNbY2hhbm5lbCAtIDFdLmNlbnRlcl9mcmVxOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDEpOwotCS8qIFNldCBTUEkgQ2xvY2sgdG8gNTAgTnMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weEY7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQkvKiBDbGVhciB0aGUgRGlzYWJsZSBUeCBpbnRlcnJ1cHQgYml0IGluIEludGVycnVwdCBNYXNrICovCi0vKiAJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0lOVF9NQVNLKTsgKi8KLS8qIAlyZWcgJj0gfklSUV9UWF9ESVNBQkxFOyAqLwotLyogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfSU5UX01BU0ssIHJlZyk7ICovCi0KLQkvKiBCYW5kIFNlbGVjdGlvbiAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VUKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9VVCwgcmVnKTsKLQotCS8qIEZJWE1FIFNldCB0aGUgU2lMYWJzIENoaXAgRnJlcXVlbmN5ICovCi0Jc3ludGhfZnJlcV9zZXQocHJpdiwgY2hhbm5lbCk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fU09GVFJTVCk7Ci0JcmVnIHw9IDB4ODAxMDAwMzA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTExDVEwpOwotCXJlZyB8PSAweDIwMDA5OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUExMQ1RMLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCAweDUpOwotCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTEwMCk7Ci0KLQkvKiBMb2FkIHRoZSBNb25pdG9yR2FpbiBUYWJsZSAqLwotCW1vbml0b3JfZ2Fpbl90YWJsZV9pbml0KHByaXYpOwotCi0JLyogTG9hZCB0aGUgVFggRmlyIHRhYmxlICovCi0JdHhfZmlyX3RhYmxlX2luaXQocHJpdik7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDIyKTsKLQl1ZGVsYXkoODApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHhmZik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweGVjNTApOwotCXJlZyB8PSAweDRmOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgcmVnKTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4MTEwMDgsIDB4MSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwYywgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDA4LCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgMHhjKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RJU0NPVk1PRCwgMHgzKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAxMCwgMHg2ZSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAxNCwgMHg2Yyk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAxKTsKLQotCS8qIENhbGlicmF0ZSB0aGUgQW50ZW5uYSAqLwotCS8qIGFudGVubmFfY2FsaWJyYXRlKHByaXYpOyAqLwotCS8qIENhbGlicmF0ZSB0aGUgVHhMb2NhbE9zY2lsbGF0b3IgKi8KLQljYWxpYnJhdGVfb3NjaWxsYXRvcihwcml2KTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IH4weDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOSU5JVCwgMHhhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENELCAweDApOwotCi0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAxOCwgMHhiKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4MCk7Ci0KLQkvKiBXcml0ZSBGcmVxdWVuY3kgdG8gR2FpbiBDb250cm9sIENoYW5uZWwgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWENIQU5FTCwgZnJlcSk7Ci0JLyogV3JpdGUgMHgxNDAwMDAvRnJlcSB0byAweDljMDggKi8KLQlyZWcgPSAweDE0MDAwMC9mcmVxOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4OWMwOCwgcmVnKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNUKTsKLQlyZWcgJj0gfjB4ODAxMDAwMzA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BMTENUTCk7Ci0JcmVnICY9IH4weDIwMDA5OwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTExDVEwsIHJlZyk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NT0RFLCAweDApOwotCi0vKiBGSVhNRSBBY2NvcmRpbmcgdG8gTnVtYmVyIG9mIENoYWluczogKi8KLQotLyogCQkJICAgMS4gMTogKi8KLS8qICAgICAgICAgIDEuIFdyaXRlIDB4MTIwMyB0byBSRiBDaGlwIDAgKi8KLS8qICAgICAgICAgIDIuIFdyaXRlIDB4MTIwMCB0byBSRiBDaGlwcyAxICsyICAqLwotLyogCQkJICAgMi4gMjogKi8KLS8qICAgICAgICAgIDEuIFdyaXRlIDB4MTIwMyB0byBSRiBDaGlwIDAgKi8KLS8qICAgICAgICAgIDIuIFdyaXRlIDB4MTIwMCB0byBSRiBDaGlwIDIgKi8KLS8qICAgICAgICAgIDMuIFdyaXRlIDB4MTIwMSB0byBSRiBDaGlwIDEgICovCi0vKiAJCQkgICAzLiAzOiAqLwotLyogICAgICAgICAgMS4gV3JpdGUgMHgxMjAzIHRvIFJGIENoaXAgMCAqLwotLyogICAgICAgICAgMi4gV3JpdGUgMHgxMjAxIHRvIFJGIENoaXAgMSArIDIgICovCi0vKiAJCQkgICA0LiA0OiAqLwotLyogICAgICAgICAgMS4gV3JpdGUgMHgxMjAzIHRvIFJGIENoaXAgMCArIDEgKi8KLS8qICAgICAgICAgIDIuIFdyaXRlIDB4MTIwMCB0byBSRiBDaGlwIDIgICovCi0KLS8qIAkJCSAgIDUuIDY6ICovCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTIwMyk7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDIsIDB4MTIwMSk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0KLQkvKiBGSVhNRSBTZXQgdGhlIERpc2FibGUgVHggaW50ZXJydXB0IGJpdCBpbiBJbnRlcnJ1cHQgTWFzawotCSAgIChPciAweDIwMDAwIHRvIEludGVycnVwdCBNYXNrKSAqLwotLyogCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9JTlRfTUFTSyk7ICovCi0vKiAJcmVnIHw9IElSUV9UWF9ESVNBQkxFOyAqLwotLyogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfSU5UX01BU0ssIHJlZyk7ICovCi0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci0KLQkvKiBDb25maWd1cmUgdGhlIEFudGVubmEgKi8KLQlhbnRlbm5hX2NvbmZpZyhwcml2KTsKLQotCS8qIFdyaXRlIDB4MCB0byBEaXNjb3ZlcnkgTW9kZSBFbmFibGUgZGV0ZWN0IEcsIEIsIEEgcGFja2V0PyAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RJU0NPVk1PRCwgMCk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUpOwotCXJlZyB8PSAweDgwMDAwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUsIHJlZyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMHgxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDApOwotCi0JLyogZW5hYmxlIHJhZGlvIG9uIGFuZCB0aGUgcG93ZXIgTEVEICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NZU0lURl9HUElPVVQpOwotCXJlZyAmPSB+MHgxOwotCXJlZyB8PSAweDI7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DVEwpOwotCXJlZyB8PSAweDE7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1RMLCByZWcpOwotfSAvKiByYWRpb19jaGFubmVsX3NldCAqLwotCi1zdGF0aWMgdm9pZCBiYXNlX2JhbmRfZmlsdGVyX2NhbGlicmF0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTcwMCk7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwMSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRk9SQ0VDVExDTEssIDB4MCk7Ci0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjcpOwotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAxLCAweDI3KTsKLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgyNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRk9SQ0VDVExDTEssIDB4MSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X29mZnNldChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgY2hhaW4pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIG9mZnNldDsKLQotCWlvd3JpdGUzMigoY2hhaW4pLCBjdGwgKyBBR05YX0FDSV9TRUxDSEFJTik7Ci0JdWRlbGF5KDEwKTsKLQlvZmZzZXQgPSAoaW9yZWFkMzIoY3RsICsgQUdOWF9BQ0lfT0ZGU0VUKSk7Ci0JcHJpbnRrKFBGWCAiQ2hhaW4gaXMgMHgleCwgT2Zmc2V0IGlzIDB4JXhcbiIsIGNoYWluLCBvZmZzZXQpOwotfQotCi12b2lkIHByaW50X29mZnNldHMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQlwcmludF9vZmZzZXQocHJpdiwgMCk7Ci0JcHJpbnRfb2Zmc2V0KHByaXYsIDQpOwotCXByaW50X29mZnNldChwcml2LCAxKTsKLQlwcmludF9vZmZzZXQocHJpdiwgNSk7Ci0JcHJpbnRfb2Zmc2V0KHByaXYsIDIpOwotCXByaW50X29mZnNldChwcml2LCA2KTsKLX0KLQotCi1zdHJ1Y3QgY2hhaW5zIHsKLQl1MzIgY2FsaTsJCS8qIGNhbGlicmF0ZSAgdmFsdWUqLwotCi0jZGVmaW5lICBORUVEX0NBTElCUkFURQkJMAotI2RlZmluZSAgU1VDQ0VTU19DQUxJQlJBVEUJMQotCWludCBzdGF0dXM7Ci19OwotCi1zdGF0aWMgdm9pZCBjaGFpbl9jYWxpYnJhdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGNoYWlucyAqY2hhaW5zLAotCQkJICAgIHVuc2lnbmVkIGludCBudW0pCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIGNhbGlicmEgPSBjaGFpbnNbbnVtXS5jYWxpOwotCi0JaWYgKG51bSA8IDMpCi0JCWNhbGlicmEgfD0gMHgxNDAwOwotCWVsc2UKLQkJY2FsaWJyYSB8PSAweDE1MDA7Ci0KLQlzd2l0Y2ggKG51bSkgewotCWNhc2UgMDoKLQljYXNlIDQ6Ci0JCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwLCBjYWxpYnJhKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCWNhc2UgNToKLQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDEsIGNhbGlicmEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JY2FzZSA2OgotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMiwgY2FsaWJyYSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLX0gLyogY2hhaW5fY2FsaWJyYXRlICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY2FsaWJyZXRlX3ZhbHVlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBjaGFpbnMgKmNoYWlucywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IG51bSkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgb2Zmc2V0OwotCi0JaW93cml0ZTMyKChudW0pLCBjdGwgKyBBR05YX0FDSV9TRUxDSEFJTik7Ci0JLyogRklYTUUgKi8KLQl1ZGVsYXkoMTApOwotCW9mZnNldCA9IChpb3JlYWQzMihjdGwgKyBBR05YX0FDSV9PRkZTRVQpKTsKLQotCWlmIChvZmZzZXQgPCAweGYpIHsKLQkJY2hhaW5zW251bV0uc3RhdHVzID0gU1VDQ0VTU19DQUxJQlJBVEU7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobnVtID09IDAgfHwgbnVtID09IDEgfHwgbnVtID09IDIpIHsKLQkJaWYgKDAgPT0gY2hhaW5zW251bV0uY2FsaSkKLQkJCWNoYWluc1tudW1dLmNhbGkgPSAweGZmOwotCQllbHNlCi0JCQljaGFpbnNbbnVtXS5jYWxpLS07Ci0JfSBlbHNlCi0JCWNoYWluc1tudW1dLmNhbGkrKzsKLQotCWNoYWluc1tudW1dLnN0YXR1cyA9IE5FRURfQ0FMSUJSQVRFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2FsaWJyYV9kZWxheShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JdW5zaWduZWQgaW50IGkgPSAxMDA7Ci0KLQl3bWIoKTsKLQl3aGlsZSAoLS1pKSB7Ci0JCXJlZyA9IChpb3JlYWQzMihjdGwgKyBBR05YX0FDSV9TVEFUVVMpKTsKLQkJaWYgKHJlZyA9PSAweDQwMDApCi0JCQlicmVhazsKLQkJdWRlbGF5KDEwKTsKLQl9Ci0JaWYgKCFpKQotCQlwcmludGsoUEZYICJjYWxpYnJhdGlvbiBmYWlsZWRcbiIpOwotfQotCi12b2lkIGRvX2NhbGlicmF0aW9uKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0Jc3RydWN0IGNoYWlucyBjaGFpbnNbN107Ci0JdW5zaWduZWQgaW50IGksIGo7Ci0JQUdOWF9UUkFDRTsKLQotCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKLQkJaWYgKGkgPT0gMykKLQkJCWNvbnRpbnVlOwotCi0JCWNoYWluc1tpXS5jYWxpID0gMHg3ZjsKLQkJY2hhaW5zW2ldLnN0YXR1cyA9IE5FRURfQ0FMSUJSQVRFOwotCX0KLQotCS8qIEZJWE1FIDB4MzAwIGlzIGEgbWFnaWMgbnVtYmVyICovCi0JZm9yIChqID0gMDsgaiA8IDB4MzAwOyBqKyspIHsKLQkJaWYgKGNoYWluc1swXS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1sxXS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1syXS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1s0XS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1s1XS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUgJiYKLQkJICAgIGNoYWluc1s2XS5zdGF0dXMgPT0gU1VDQ0VTU19DQUxJQlJBVEUpCi0JCQlicmVhazsKLQotCQkvKiBBdHRlbnRpb24sIHRoZXJlIGlzIG5vIGNoYWluIDMgKi8KLQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQkJaWYgKGkgPT0gMykKLQkJCQljb250aW51ZTsKLQkJCWlmIChjaGFpbnNbaV0uc3RhdHVzID09IE5FRURfQ0FMSUJSQVRFKQotCQkJCWNoYWluX2NhbGlicmF0ZShwcml2LCBjaGFpbnMsIGkpOwotCQl9Ci0JCS8qIFdyaXRlIDB4MSB0byBDYWxpYnJhdGlvbiBNZWFzdXJlICovCi0JCWlvd3JpdGUzMigoMHgxKSwgY3RsICsgQUdOWF9BQ0lfTUVBU1VSRSk7Ci0JCWNhbGlicmFfZGVsYXkocHJpdik7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQkJaWYgKGkgPT0gMykKLQkJCQljb250aW51ZTsKLQotCQkJZ2V0X2NhbGlicmV0ZV92YWx1ZShwcml2LCBjaGFpbnMsIGkpOwotCQl9Ci0JfQotCXByaW50ayhQRlggIkNsaWJyYXRlIHRpbWVzIGlzICVkXG4iLCBqKTsKLQlwcmludF9vZmZzZXRzKHByaXYpOwotfSAvKiBkb19jYWxpYnJhdGlvbiAqLwotCi12b2lkIGFudGVubmFfY2FsaWJyYXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDB4Myk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTk1FQVNBTlQsIDB4Myk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkFDVElBTlQsIDB4Myk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDB4Myk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9BTlRDRkcsIDB4MWYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAweDI0KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0lOQUNULCAweDI0KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0RZTkEsIDB4MjApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBLCAweDY0KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQUwsIDB4NjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCLCAweDQ2KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQlRGRVNULCAweDNjKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdIVEgsIDB4NjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgMHgzMCk7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMCk7Ci0JLyogRml4bWUgKi8KLQl1ZGVsYXkoODApOwotCS8qICAgIDEuIFNob3VsZCByZWFkIDB4MCAgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCWlmICgweDAgIT0gcmVnKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5tYXRjaGVkIHJmIGNoaXBzIHJlc3VsdFxuIik7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwMCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMik7Ci0JdWRlbGF5KDgwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCWlmICgweDAgIT0gcmVnKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5tYXRjaGVkIHJmIGNoaXBzIHJlc3VsdFxuIik7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwNSk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fU09GVFJTVCk7Ci0JcmVnIHw9IDB4MWMwMDAwMzI7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTExDVEwpOwotCXJlZyB8PSAweDAwMDNmMDc7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTExDVEwsIHJlZyk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIDB4ZWM1MCk7Ci0JcmVnIHw9IDB4NDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHhlYzUwLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweGZmOCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ0hBSU5OVU0sIDB4Nik7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxOTg3NCwgMHgwKTsKLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxNzAwKTsKLQotCS8qIENhbGlicmF0ZSB0aGUgQmFzZUJhbmRGaWx0ZXIgKi8KLQliYXNlX2JhbmRfZmlsdGVyX2NhbGlicmF0ZShwcml2KTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDEwMDIpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDAsIDB4MWQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxLCAweDFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMiwgMHgxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAweDEpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTU9ERSwgMHgxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4M2ZmKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMSwgMHgyNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIyLCAweDI3KTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE0MDApOwotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE1MDApOwotCi0JLyogTWVhc3VyZSBDYWxpYnJhdGlvbiAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX01FQVNVUkUsIDB4MSk7Ci0JY2FsaWJyYV9kZWxheShwcml2KTsKLQotCS8qIGRvIGNhbGlicmF0aW9uICovCi0JZG9fY2FsaWJyYXRpb24ocHJpdik7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDIxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0xFTiwgMHhmKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDApOwotCXJlZyAmPSAweGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDAsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSk7Ci0JcmVnICY9IDB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQyKTsKLQlyZWcgJj0gMHhmOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQyLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAweDApOwotCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7Ci19IC8qIGFudGVubmFfY2FsaWJyYXRlICovCi0KLXZvaWQgX19hbnRlbm5hX2NhbGlicmF0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0KLQkvKiBDYWxpYnJhdGUgdGhlIEJhc2VCYW5kRmlsdGVyICovCi0JLyogYmFzZV9iYW5kX2ZpbHRlcl9jYWxpYnJhdGUocHJpdik7ICovCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwMik7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQwLCAweDFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMSwgMHgxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIsIDB4MWQpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAweDEpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTU9ERSwgMHgxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4M2ZmKTsKLQotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDI3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE0MDApOwotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE1MDApOwotCS8qIE1lYXN1cmUgQ2FsaWJyYXRpb24gKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NRUFTVVJFLCAweDEpOwotCWNhbGlicmFfZGVsYXkocHJpdik7Ci0JZG9fY2FsaWJyYXRpb24ocHJpdik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweDApOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDIxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweGYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMCk7Ci0JcmVnICY9IDB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMCwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxKTsKLQlyZWcgJj0gMHhmOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIpOwotCXJlZyAmPSAweGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIsIHJlZyk7Ci0KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVRXUklURSwgMHgwKTsKLQotCS8qIFdyaXRlIDB4MyBHYWluIENvbnRyb2wgRGlzY292ZXJ5IE1vZGUgKi8KLQllbmFibGVfcmVjZWl2ZXIocHJpdik7Ci19Ci0KLWludCBhZ254X3NldF9jaGFubmVsKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCUFHTlhfVFJBQ0U7Ci0KLQlwcmludGsoS0VSTl9FUlIgUEZYICJDaGFubmVsIGlzICVkICVzXG4iLCBjaGFubmVsLCBfX2Z1bmNfXyk7Ci0JcmFkaW9fY2hhbm5lbF9zZXQocHJpdiwgY2hhbm5lbCk7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTdkYjVlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSAicGh5LmgiCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLQotdm9pZCBoYXNoX3JlYWQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTMyIHJlZ2hpLCB1MzIgcmVnbG8sIHU4IHN0YV9pZCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQotCXJlZ2xvICY9IDB4RkZGRjsKLQlyZWdsbyB8PSAweDMwMDAwMDAwOwotCXJlZ2xvIHw9IDB4NDAwMDAwMDA7CS8qIFNldCBzdGF0dXMgYnVzeSAqLwotCXJlZ2xvIHw9IHN0YV9pZCA8PCAxNjsKLQotCWlvd3JpdGUzMigwLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9GTEFHKTsKLQlpb3dyaXRlMzIocmVnaGksIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwotCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQotCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0JcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwotCXByaW50ayhQRlggIlJYIGhhc2ggY21kIGFyZSA6ICUuOHglLjh4XG4iLCByZWdoaSwgcmVnbG8pOwotfQotCi12b2lkIGhhc2hfd3JpdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hY19hZGRyLCB1OCBzdGFfaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZ2hpLCByZWdsbzsKLQotCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWRkcikpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVcGRhdGUgaGFzaCB0YWJsZTogSW52YWxpZCBod2FkZHIhXG4iKTsKLQotCXJlZ2hpID0gbWFjX2FkZHJbMF0gPDwgMjQgfCBtYWNfYWRkclsxXSA8PCAxNiB8IG1hY19hZGRyWzJdIDw8IDggfCBtYWNfYWRkclszXTsKLQlyZWdsbyA9IG1hY19hZGRyWzRdIDw8IDggfCBtYWNfYWRkcls1XTsKLQlyZWdsbyB8PSAweDEwMDAwMDAwOwkvKiBTZXQgaGFzaCBjb21tbWFuZCAqLwotCXJlZ2xvIHw9IDB4NDAwMDAwMDA7CS8qIFNldCBzdGF0dXMgYnVzeSAqLwotCXJlZ2xvIHw9IHN0YV9pZCA8PCAxNjsKLQotCWlvd3JpdGUzMigwLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9GTEFHKTsKLQlpb3dyaXRlMzIocmVnaGksIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwotCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQotCXJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQlpZiAoIShyZWdsbyAmIDB4ODAwMDAwMDApKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVXBkYXRlIGhhc2ggdGFibGUgZmFpbGVkXG4iKTsKLX0KLQotdm9pZCBoYXNoX2RlbGV0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgcmVnaGksIHUzMiByZWdsbywgdTggc3RhX2lkKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0JcmVnbG8gJj0gMHhGRkZGOwotCXJlZ2xvIHw9IDB4MjAwMDAwMDA7Ci0JcmVnbG8gfD0gMHg0MDAwMDAwMDsJLyogU2V0IHN0YXR1cyBidXN5ICovCi0JcmVnbG8gfD0gc3RhX2lkIDw8IDE2OwotCi0JaW93cml0ZTMyKDAsIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0ZMQUcpOwotCWlvd3JpdGUzMihyZWdoaSwgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0JaW93cml0ZTMyKHJlZ2xvLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwotCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0KLQlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7Ci0JcHJpbnRrKFBGWCAiUlggaGFzaCBjbWQgYXJlIDogJS44eCUuOHhcbiIsIHJlZ2hpLCByZWdsbyk7Ci0KLX0KLQotdm9pZCBoYXNoX2R1bXAoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTggc3RhX2lkKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWdoaSwgcmVnbG87Ci0KLQlyZWdsbyA9IDB4NDAwMDAwMDA7ICAJLyogc3RhdHVzIGJpdCAqLwotCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQlpb3dyaXRlMzIoc3RhX2lkIDw8IDE2LCBjdGwgKyBBR05YX1JYTV9IQVNIX0RVTVBfREFUQSk7Ci0KLQl1ZGVsYXkoODApOwotCi0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9ISUdIKTsKLQlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7Ci0JcHJpbnRrKFBGWCAiaGFzaCBjbWQgYXJlIDogJS44eCUuOHhcbiIsIHJlZ2hpLCByZWdsbyk7Ci0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9GTEFHKTsKLQlwcmludGsoUEZYICJoYXNoIGZsYWcgaXMgOiAlLjh4XG4iLCByZWdoaSk7Ci0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0RVTVBfTVNUKTsKLQlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfRFVNUF9MU1QpOwotCXByaW50ayhQRlggImhhc2ggZHVtcCBtc3QgbHN0OiAlLjh4JS44eFxuIiwgcmVnaGksIHJlZ2xvKTsKLQlyZWdoaSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfRFVNUF9EQVRBKTsKLQlwcmludGsoUEZYICJoYXNoIGR1bXAgZGF0YTogJS44eFxuIiwgcmVnaGkpOwotfQotCi12b2lkIGdldF9zdGFfcG93ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhX3Bvd2VyICpwb3dlciwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JbWVtY3B5X2Zyb21pbyhwb3dlciwgY3RsICsgQUdOWF9UWE1fU1RBUE9XVEVNUCArIHNpemVvZigqcG93ZXIpICogc3RhX2lkeCwKLQkJICAgICAgc2l6ZW9mKCpwb3dlcikpOwotfQotCi1pbmxpbmUgdm9pZAotc2V0X3N0YV9wb3dlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgKnBvd2VyLCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQkvKiBGSVhNRSAgIDIuIFdyaXRlIFRlbXBsYXRlIHRvIG9mZnNldCArIHN0YXRpb24gbnVtYmVyICAqLwotCW1lbWNweV90b2lvKGN0bCArIEFHTlhfVFhNX1NUQVBPV1RFTVAgKyBzaXplb2YoKnBvd2VyKSAqIHN0YV9pZHgsCi0JCSAgICBwb3dlciwgc2l6ZW9mKCpwb3dlcikpOwotfQotCi0KLXZvaWQgZ2V0X3N0YV90eF93cShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfdHhfd3EgKnR4X3dxLAotCQkgICB1bnNpZ25lZCBpbnQgc3RhX2lkeCwgdW5zaWduZWQgaW50IHdxX2lkeCkKLXsKLQl2b2lkIF9faW9tZW0gKmRhdGEgPSBwcml2LT5kYXRhOwotCW1lbWNweV9mcm9taW8odHhfd3EsIGRhdGEgKyBBR05YX1BEVV9UWF9XUSArIHNpemVvZigqdHhfd3EpICogU1RBX1RYX1dRX05VTSAqIHN0YV9pZHggKwotCQkgICAgICBzaXplb2YoKnR4X3dxKSAqIHdxX2lkeCwgIHNpemVvZigqdHhfd3EpKTsKLQotfQotCi1pbmxpbmUgdm9pZCBzZXRfc3RhX3R4X3dxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV90eF93cSAqdHhfd3EsCi0JCSAgIHVuc2lnbmVkIGludCBzdGFfaWR4LCB1bnNpZ25lZCBpbnQgd3FfaWR4KQotewotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0JbWVtY3B5X3RvaW8oZGF0YSArIEFHTlhfUERVX1RYX1dRICsgc2l6ZW9mKCp0eF93cSkgKiBTVEFfVFhfV1FfTlVNICogc3RhX2lkeCArCi0JCSAgICBzaXplb2YoKnR4X3dxKSAqIHdxX2lkeCwgdHhfd3EsIHNpemVvZigqdHhfd3EpKTsKLX0KLQotCi12b2lkIGdldF9zdGEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhICpzdGEsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0KLQltZW1jcHlfZnJvbWlvKHN0YSwgZGF0YSArIEFHTlhfUERVUE9PTCArIHNpemVvZigqc3RhKSAqIHN0YV9pZHgsCi0JCSAgICAgIHNpemVvZigqc3RhKSk7Ci19Ci0KLWlubGluZSB2b2lkIHNldF9zdGEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhICpzdGEsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0KLQltZW1jcHlfdG9pbyhkYXRhICsgQUdOWF9QRFVQT09MICsgc2l6ZW9mKCpzdGEpICogc3RhX2lkeCwKLQkJICAgIHN0YSwgc2l6ZW9mKCpzdGEpKTsKLX0KLQotLyogRklYTUUgKi8KLXZvaWQgc3RhX3Bvd2VyX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jc3RydWN0IGFnbnhfc3RhX3Bvd2VyIHBvd2VyOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCW1lbXNldCgmcG93ZXIsIDAsIHNpemVvZihwb3dlcikpOwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoRURDRiwgRURDRl9TSElGVCwgMHgxKTsKLQlwb3dlci5yZWcgPSBjcHVfdG9fbGUzMihyZWcpOwotCXNldF9zdGFfcG93ZXIocHJpdiwgJnBvd2VyLCBzdGFfaWR4KTsKLQl1ZGVsYXkoNDApOwotfSAvKiBhZGRfcG93ZXJfdGVtcGxhdGUgKi8KLQotCi0vKiBAbnVtOiBUaGUgI251bWJlciBvZiBzdGF0aW9uIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgY2FyZCAqLwotc3RhdGljIHZvaWQgc3RhX3R4X3dvcmtxdWV1ZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXN0cnVjdCBhZ254X3N0YV90eF93cSB0eF93cTsKLQl1MzIgcmVnOwotCXVuc2lnbmVkIGludCBpOwotCi0JbWVtc2V0KCZ0eF93cSwgMCwgc2l6ZW9mKHR4X3dxKSk7Ci0KLQlyZWcgPSBhZ254X3NldF9iaXRzKFdPUktfUVVFVUVfVkFMSUQsIFdPUktfUVVFVUVfVkFMSURfU0hJRlQsIDEpOwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFdPUktfUVVFVUVfQUNLX1RZUEUsIFdPUktfUVVFVUVfQUNLX1RZUEVfU0hJRlQsIDEpOwotLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoV09SS19RVUVVRV9BQ0tfVFlQRSwgV09SS19RVUVVRV9BQ0tfVFlQRV9TSElGVCwgMCk7ICovCi0JdHhfd3EucmVnMiB8PSBjcHVfdG9fbGUzMihyZWcpOwotCi0JLyogU3VwcG9zZSBhbGwgOCB0cmFmZmljIGNsYXNzIGFyZSB1c2VkICovCi0JZm9yIChpID0gMDsgaSA8IFNUQV9UWF9XUV9OVU07IGkrKykKLQkJc2V0X3N0YV90eF93cShwcml2LCAmdHhfd3EsIHN0YV9pZHgsIGkpOwotfSAvKiBzdGFfdHhfd29ya3F1ZXVlX2luaXQgKi8KLQotCi1zdGF0aWMgdm9pZCBzdGFfdHJhZmZpY19pbml0KHN0cnVjdCBhZ254X3N0YV90cmFmZmljICp0cmFmZmljKQotewotCXUzMiByZWc7Ci0JbWVtc2V0KHRyYWZmaWMsIDAsIHNpemVvZigqdHJhZmZpYykpOwotCi0JcmVnID0gYWdueF9zZXRfYml0cyhORVdfUEFDS0VULCBORVdfUEFDS0VUX1NISUZULCAxKTsKLQlyZWcgfD0gYWdueF9zZXRfYml0cyhUUkFGRklDX1ZBTElELCBUUkFGRklDX1ZBTElEX1NISUZULCAxKTsKLS8qCXJlZyB8PSBhZ254X3NldF9iaXRzKFRSQUZGSUNfQUNLX1RZUEUsIFRSQUZGSUNfQUNLX1RZUEVfU0hJRlQsIDEpOyAqLwotCXRyYWZmaWMtPnJlZzAgPSBjcHVfdG9fbGUzMihyZWcpOwotCi0JLyogCTMuIHNldHRpbmcgUlggU2VxdWVuY2UgTnVtYmVyIHRvIDQwOTUgKi8KLQlyZWcgPSBhZ254X3NldF9iaXRzKFJYX1NFUVVFTkNFX05VTSwgUlhfU0VRVUVOQ0VfTlVNX1NISUZULCA0MDk1KTsKLQl0cmFmZmljLT5yZWcxID0gY3B1X3RvX2xlMzIocmVnKTsKLX0KLQotCi0vKiBAbnVtOiBUaGUgI251bWJlciBvZiBzdGF0aW9uIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgY2FyZCAqLwotdm9pZCBzdGFfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKLXsKLQkvKiBGSVhNRSB0aGUgbGVuZ3RoIG9mIHN0YSBpcyAyNTYgYnl0ZXMgSXMgdGhhdAotCSAqIGRhbmdlcm91cyB0byBzdGFjayBvdmVyZmxvdz8gKi8KLQlzdHJ1Y3QgYWdueF9zdGEgc3RhOwotCXUzMiByZWc7Ci0JaW50IGk7Ci0KLQltZW1zZXQoJnN0YSwgMCwgc2l6ZW9mKHN0YSkpOwotCS8qIFNldCB2YWxpZCB0byAxICovCi0JcmVnID0gYWdueF9zZXRfYml0cyhTVEFUSU9OX1ZBTElELCBTVEFUSU9OX1ZBTElEX1NISUZULCAxKTsKLQkvKiBTZXQgRW5hYmxlIENvbmNhdGVuYXRpb24gdG8gMCAoPykgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhFTkFCTEVfQ09OQ0FURU5BVElPTiwgRU5BQkxFX0NPTkNBVEVOQVRJT05fU0hJRlQsIDApOwotCS8qIFNldCBFbmFibGUgRGVjb21wcmVzc2lvbiB0byAwICg/KSAqLwotCXJlZyB8PSBhZ254X3NldF9iaXRzKEVOQUJMRV9ERUNPTVBSRVNTSU9OLCBFTkFCTEVfREVDT01QUkVTU0lPTl9TSElGVCwgMCk7Ci0Jc3RhLnJlZyA9IGNwdV90b19sZTMyKHJlZyk7Ci0KLQkvKiBJbml0aWFsaXplIGVhY2ggb2YgdGhlIFRyYWZmaWMgQ2xhc3MgU3RydWN0dXJlcyBieTogKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlzdGFfdHJhZmZpY19pbml0KHN0YS50cmFmZmljICsgaSk7Ci0KLQlzZXRfc3RhKHByaXYsICZzdGEsIHN0YV9pZHgpOwotCXN0YV90eF93b3JrcXVldWVfaW5pdChwcml2LCBzdGFfaWR4KTsKLX0gLyogc3RhX2Rlc2NyaXB0b3JfaW5pdCAqLwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5oIGIvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNTA0ZTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotI2lmbmRlZiBBR05YX1NUQV9IXwotI2RlZmluZSBBR05YX1NUQV9IXwotCi0jZGVmaW5lIFNUQV9UWF9XUV9OVU0JOAkvKiBUaGUgbnVtYmVyIG9mIFRYIHdvcmtxdWV1ZSBvbmUgU1RBIGhhcyAqLwotCi1zdHJ1Y3QgYWdueF9oYXNoX2NtZCB7Ci0JX19iZTMyIGNtZGhpOwotI2RlZmluZSBNQUNMTwkJMHhGRkZGMDAwMAotI2RlZmluZSBNQUNMT19TSElGVAkxNgotI2RlZmluZSBTVEFfSUQJCTB4MDAwMEZGRjAKLSNkZWZpbmUgU1RBX0lEX1NISUZUCTQKLSNkZWZpbmUgQ01ECQkweDAwMDAwMDBDCi0jZGVmaW5lIENNRF9TSElGVAkyCi0jZGVmaW5lIFNUQVRVUwkJMHgwMDAwMDAwMgotI2RlZmluZSBTVEFUVVNfU0hJRlQJMQotI2RlZmluZSBQQVNTCQkweDAwMDAwMDAxCi0jZGVmaW5lIFBBU1NfU0hJRlQJMQotCV9fYmUzMiBjbWRsbzsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0KLS8qCi0gKiBTdGF0aW9uIFBvd2VyIFRlbXBsYXRlCi0gKiBGSVhNRSBKdXN0IGZvciBhZ24xMDAgeWV0Ci0gKi8KLXN0cnVjdCBhZ254X3N0YV9wb3dlciB7Ci0JX19sZTMyIHJlZzsKLSNkZWZpbmUgU0lHTkFMCQkJMHgwMDAwMDBGRiAvKiBzaWduYWwgKi8KLSNkZWZpbmUgU0lHTkFMX1NISUZUCQkwCi0jZGVmaW5lIFJBVEUJCQkweDAwMDAwRjAwCi0jZGVmaW5lIFJBVEVfU0hJRlQJCTgKLSNkZWZpbmUgVElGUwkJCTB4MDAwMDEwMDAKLSNkZWZpbmUgVElGU19TSElGVAkJMTIKLSNkZWZpbmUgRURDRgkJCTB4MDAwMDIwMDAKLSNkZWZpbmUgRURDRl9TSElGVAkJMTMKLSNkZWZpbmUgQ0hBTk5FTF9CT05ECQkweDAwMDA0MDAwCi0jZGVmaW5lIENIQU5ORUxfQk9ORF9TSElGVAkxNAotI2RlZmluZSBQSFlfTU9ERQkJMHgwMDAzODAwMAotI2RlZmluZSBQSFlfTU9ERV9TSElGVAkJMTUKLSNkZWZpbmUgUE9XRVJfTEVWRUwJCTB4MDA3QzAwMDAKLSNkZWZpbmUgUE9XRVJfTEVWRUxfU0hJRlQJMTgKLSNkZWZpbmUgTlVNX1RSQU5TTUlUVEVSUwkweDAwODAwMDAwCi0jZGVmaW5lIE5VTV9UUkFOU01JVFRFUlNfU0hJRlQJMjMKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0vKgotICogVFggV29ya3F1ZXVlIERlc2NyaXB0b3IKLSAqLwotc3RydWN0IGFnbnhfc3RhX3R4X3dxIHsKLQlfX2xlMzIgcmVnMDsKLSNkZWZpbmUgSEVBRF9QT0lOVEVSX0xPVwkweEZGMDAwMDAwIC8qIEhlYWQgcG9pbnRlciBsb3cgKi8KLSNkZWZpbmUgSEVBRF9QT0lOVEVSX0xPV19TSElGVAkyNAotI2RlZmluZSBUQUlMX1BPSU5URVIJCTB4MDBGRkZGRkYgLyogVGFpbCBwb2ludGVyICovCi0jZGVmaW5lIFRBSUxfUE9JTlRFUl9TSElGVAkwCi0KLQlfX2xlMzIgcmVnMzsKLSNkZWZpbmUgQUNLX1BPSU5URVJfTE9XCSAgICAgICAgMHhGRkZGMDAwMAkvKiBBQ0sgcG9pbnRlciBsb3cgKi8KLSNkZWZpbmUgQUNLX1BPSU5URVJfTE9XX1NISUZUCTE2Ci0jZGVmaW5lIEhFQURfUE9JTlRFUl9ISUdICTB4MDAwMEZGRkYJLyogSGVhZCBwb2ludGVyIGhpZ2ggKi8KLSNkZWZpbmUgSEVBRF9QT0lOVEVSX0hJR0hfU0hJRlQJMAotCi0JX19sZTMyIHJlZzE7Ci0vKiBBQ0sgdGltZW91dCB0YWlsIHBhY2tldCBjb3VudCAqLwotI2RlZmluZSBBQ0tfVElNT1VUX1RBSUxfUEFDS19DTlQJMHhGRkYwMDAwMAotI2RlZmluZSBBQ0tfVElNT1VUX1RBSUxfUEFDS19DTlRfU0hJRlQJMjAKLS8qIEhlYWQgdGltZW91dCB0YWlsIHBhY2tldCBjb3VudCAqLwotI2RlZmluZSBIRUFEX1RJTU9VVF9UQUlMX1BBQ0tfQ05UCTB4MDAwRkZGMDAKLSNkZWZpbmUgSEVBRF9USU1PVVRfVEFJTF9QQUNLX0NOVF9TSElGVAk4Ci0jZGVmaW5lIEFDS19QT0lOVEVSX0hJR0gJICAgICAgICAweDAwMDAwMEZGIC8qIEFDSyBwb2ludGVyIGhpZ2ggKi8KLSNkZWZpbmUgQUNLX1BPSU5URVJfSElHSF9TSElGVAkJMAotCi0JX19sZTMyIHJlZzI7Ci0jZGVmaW5lIFdPUktfUVVFVUVfVkFMSUQJCTB4ODAwMDAwMDAgLyogdmFsaWQgKi8KLSNkZWZpbmUgV09SS19RVUVVRV9WQUxJRF9TSElGVAkJMzEKLSNkZWZpbmUgV09SS19RVUVVRV9BQ0tfVFlQRQkJMHg0MDAwMDAwMCAvKiBBQ0sgdHlwZSAqLwotI2RlZmluZSBXT1JLX1FVRVVFX0FDS19UWVBFX1NISUZUCTMwCi0vKiBIZWFkIHRpbWVvdXQgd2luZG93IGxpbWl0IGZyYWdtZW50YXRpb24gY291bnQgKi8KLSNkZWZpbmUgSEVBRF9USU1PVVRfV0lOX0xJTV9GUkFHX0NOVAkweDNGRkYwMDAwCi0jZGVmaW5lIEhFQURfVElNT1VUX1dJTl9MSU1fRlJBR19DTlRfU0hJRlQJMTYKLS8qIEhlYWQgdGltZW91dCB3aW5kb3cgbGltaXQgYnl0ZSBjb3VudCAqLwotI2RlZmluZSBIRUFEX1RJTU9VVF9XSU5fTElNX0JZVEVfQ05UCTB4MDAwMEZGRkYKLSNkZWZpbmUgSEVBRF9USU1PVVRfV0lOX0xJTV9CWVRFX0NOVF9TSElGVAkgMAotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLQotLyoKLSAqIFRyYWZmaWMgQ2xhc3MgU3RydWN0dXJlCi0gKi8KLXN0cnVjdCBhZ254X3N0YV90cmFmZmljIHsKLQlfX2xlMzIgcmVnMDsKLSNkZWZpbmUgQUNLX1RJTU9VVF9DTlQJCTB4RkY4MDAwMDAgLyogQUNLIFRpbWVvdXQgQ291bnRzICovCi0jZGVmaW5lIEFDS19USU1PVVRfQ05UX1NISUZUCTIzCi0jZGVmaW5lIFRSQUZGSUNfQUNLX1RZUEUJMHgwMDYwMDAwMCAvKiBBQ0sgVHlwZSAqLwotI2RlZmluZSBUUkFGRklDX0FDS19UWVBFX1NISUZUCTIxCi0jZGVmaW5lIE5FV19QQUNLRVQJCTB4MDAxMDAwMDAgLyogTmV3IFBhY2tldCAgKi8KLSNkZWZpbmUgTkVXX1BBQ0tFVF9TSElGVAkyMAotI2RlZmluZSBUUkFGRklDX1ZBTElECQkweDAwMDgwMDAwIC8qIFZhbGlkICovCi0jZGVmaW5lIFRSQUZGSUNfVkFMSURfU0hJRlQJMTkKLSNkZWZpbmUgUlhfSERSX0RFU0NfUE9JTlRFUgkweDAwMDdGRkZGIC8qIFJYIEhlYWRlciBEZXNjcmlwdGVyIHBvaW50ZXIgKi8KLSNkZWZpbmUgUlhfSERSX0RFU0NfUE9JTlRFUl9TSElGVAkgMAotCi0JX19sZTMyIHJlZzE7Ci0jZGVmaW5lIFJYX1BBQ0tFVF9USU1FU1RBTVAJMHhGRkZGMDAwMCAvKiBSWCBQYWNrZXQgVGltZXN0YW1wICovCi0jZGVmaW5lIFJYX1BBQ0tFVF9USU1FU1RBTVBfU0hJRlQJMTYKLSNkZWZpbmUgVFJBRkZJQ19SRVNFUlZFRAkweDAwMDBFMDAwIC8qIFJlc2VydmVkICovCi0jZGVmaW5lIFRSQUZGSUNfUkVTRVJWRURfU0hJRlQgIDEzCi0jZGVmaW5lIFNWCQkJMHgwMDAwMTAwMCAvKiBzdiAqLwotI2RlZmluZSBTVl9TSElGVAkJMTIKLSNkZWZpbmUgUlhfU0VRVUVOQ0VfTlVNCQkweDAwMDAwRkZGIC8qIFJYIFNlcXVlbmNlIE51bWJlciAqLwotI2RlZmluZSBSWF9TRVFVRU5DRV9OVU1fU0hJRlQJMAotCi0JX19sZTMyIHR4X3JlcGxheV9jbnRfbG93OyAvKiBUWCBSZXBsYXkgQ291bnRlciBMb3cgKi8KLQotCV9fbGUxNiB0eF9yZXBsYXlfY250X2hpZ2g7IC8qIFRYIFJlcGxheSBDb3VudGVyIEhpZ2ggKi8KLQlfX2xlMTYgcnhfcmVwbGF5X2NudF9oaWdoOyAvKiBSWCBSZXBsYXkgQ291bnRlciBIaWdoICovCi0KLQlfX2JlMzIgcnhfcmVwbGF5X2NudF9sb3c7IC8qIFJYIFJlcGxheSBDb3VudGVyIExvdyAqLwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLS8qCi0gKiBTdGF0aW9uIERlc2NyaXB0b3JzCi0gKi8KLXN0cnVjdCBhZ254X3N0YSB7Ci0JX19sZTMyIHR4X3Nlc3Npb25fa2V5c1s0XTsgLyogVHJhbnNtaXQgU2Vzc2lvbiBLZXkgKDAtMykgKi8KLQlfX2xlMzIgcnhfc2Vzc2lvbl9rZXlzWzRdOyAvKiBSZWNlaXZlIFNlc3Npb24gS2V5ICgwLTMpICovCi0KLQlfX2xlMzIgcmVnOwotI2RlZmluZSBJRF8xCQkJMHhDMDAwMDAwMCAvKiBpZCAxICovCi0jZGVmaW5lIElEXzFfU0hJRlQJCTMwCi0jZGVmaW5lIElEXzAJCQkweDMwMDAwMDAwIC8qIGlkIDAgKi8KLSNkZWZpbmUgSURfMF9TSElGVAkJMjgKLSNkZWZpbmUgRU5BQkxFX0NPTkNBVEVOQVRJT04JMHgwRkYwMDAwMCAvKiBFbmFibGUgY29uY2F0ZW5hdGlvbiAqLwotI2RlZmluZSBFTkFCTEVfQ09OQ0FURU5BVElPTl9TSElGVAkyMAotI2RlZmluZSBFTkFCTEVfREVDT01QUkVTU0lPTgkweDAwMEZGMDAwIC8qIEVuYWJsZSBkZWNvbXByZXNzaW9uICovCi0jZGVmaW5lIEVOQUJMRV9ERUNPTVBSRVNTSU9OX1NISUZUCTEyCi0jZGVmaW5lIFNUQV9SRVNFUlZFRAkJMHgwMDAwMEMwMCAvKiBSZXNlcnZlZCAqLwotI2RlZmluZSBTVEFfUkVTRVJWRURfU0hJRlQJMTAKLSNkZWZpbmUgRUFQCQkJMHgwMDAwMDIwMCAvKiBFQVAgKi8KLSNkZWZpbmUgRUFQX1NISUZUCQk5Ci0jZGVmaW5lIEVEX05VTEwJCQkweDAwMDAwMTAwIC8qIEVEIE5VTEwgKi8KLSNkZWZpbmUgRURfTlVMTF9TSElGVAkJOAotI2RlZmluZSBFTkNSWVBUSU9OX1BPTElDWQkweDAwMDAwMEUwIC8qIEVuY3J5cHRpb24gUG9saWN5ICovCi0jZGVmaW5lIEVOQ1JZUFRJT05fUE9MSUNZX1NISUZUIDUKLSNkZWZpbmUgREVGSU5FRF9LRVlfSUQJCTB4MDAwMDAwMTggLyogRGVmaW5lZCBLZXkgSUQgKi8KLSNkZWZpbmUgREVGSU5FRF9LRVlfSURfU0hJRlQJMwotI2RlZmluZSBGSVhFRF9LRVkJCTB4MDAwMDAwMDQgLyogRml4ZWQgS2V5ICovCi0jZGVmaW5lIEZJWEVEX0tFWV9TSElGVAkJMgotI2RlZmluZSBLRVlfVkFMSUQJCTB4MDAwMDAwMDIgLyogS2V5IFZhbGlkICovCi0jZGVmaW5lIEtFWV9WQUxJRF9TSElGVAkJMQotI2RlZmluZSBTVEFUSU9OX1ZBTElECQkweDAwMDAwMDAxIC8qIFN0YXRpb24gVmFsaWQgKi8KLSNkZWZpbmUgU1RBVElPTl9WQUxJRF9TSElGVAkwCi0KLQlfX2xlMzIgdHhfYWVzX2Jsa3NfdW5pY2FzdDsgLyogVFggQUVTIEJsa3MgVW5pY2FzdCAqLwotCV9fbGUzMiByeF9hZXNfYmxrc191bmljYXN0OyAvKiBSWCBBRVMgQmxrcyBVbmljYXN0ICovCi0KLQlfX2xlMTYgYWVzX2Zvcm1hdF9lcnJfdW5pY2FzdF9jbnQ7IC8qIEFFUyBGb3JtYXQgRXJyb3IgVW5pY2FzdCBDb3VudHMgKi8KLQlfX2xlMTYgYWVzX3JlcGxheV91bmljYXN0OyAvKiBBRVMgUmVwbGF5IFVuaWNhc3QgKi8KLQotCV9fbGUxNiBhZXNfZGVjcnlwdF9lcnJfdW5pY2FzdDsJLyogQUVTIERlY3J5cHQgRXJyb3IgVW5pY2FzdCAqLwotCV9fbGUxNiBhZXNfZGVjcnlwdF9lcnJfZGVmYXVsdDsJLyogQUVTIERlY3J5cHQgRXJyb3IgZGVmYXVsdCAqLwotCi0JX19sZTE2IHNpbmdsZV9yZXRyeV9wYWNrZXRzOyAvKiBTaW5nbGUgUmV0cnkgUGFja2V0cyAqLwotCV9fbGUxNiBmYWlsZWRfdHhfcGFja2V0czsgLyogRmFpbGVkIFR4IFBhY2tldHMgKi8KLQotCV9fbGUxNiBtdXRpX3JldHJ5X3BhY2tldHM7IC8qIE11bHRpcGxlIFJldHJ5IFBhY2tldHMgKi8KLQlfX2xlMTYgYWNrX3RpbWVvdXRzOwkvKiBBQ0sgVGltZW91dHMgKi8KLQotCV9fbGUxNiBmcmFnX3R4X2NudDsJLyogRnJhZ21lbnQgVFggQ291bnRzICovCi0JX19sZTE2IHJ0c19icnFfc2VudDsJLyogUlRTIEJycSBTZW50ICovCi0KLQlfX2xlMTYgdHhfcGFja2V0czsJLyogVFggUGFja2V0cyAqLwotCV9fbGUxNiBjdHNfYmFja190aW1lb3V0OyAvKiBDVFMgQmFjayBUaW1lb3V0ICovCi0KLQlfX2xlMzIgcGh5X3N0YXRzX2hpZ2g7CS8qIFBIWSBTdGF0cyBIaWdoICovCi0JX19sZTMyIHBoeV9zdGF0c19sb3c7CS8qIFBIWSBTdGF0cyBMb3cgKi8KLQotCXN0cnVjdCBhZ254X3N0YV90cmFmZmljIHRyYWZmaWNbOF07CS8qIFRyYWZmaWMgQ2xhc3MgU3RydWN0dXJlICg4KSAqLwotCi0JX19sZTE2IHRyYWZmaWNfY2xhc3MwX2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyAwIEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczFfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDEgRnJhZ21lbnQgU3VjY2VzcyAqLwotCV9fbGUxNiB0cmFmZmljX2NsYXNzMl9mcmFnX3N1Y2Nlc3M7IC8qIFRyYWZmaWMgQ2xhc3MgMiBGcmFnbWVudCBTdWNjZXNzICovCi0JX19sZTE2IHRyYWZmaWNfY2xhc3MzX2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyAzIEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczRfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDQgRnJhZ21lbnQgU3VjY2VzcyAqLwotCV9fbGUxNiB0cmFmZmljX2NsYXNzNV9mcmFnX3N1Y2Nlc3M7IC8qIFRyYWZmaWMgQ2xhc3MgNSBGcmFnbWVudCBTdWNjZXNzICovCi0JX19sZTE2IHRyYWZmaWNfY2xhc3M2X2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyA2IEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczdfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDcgRnJhZ21lbnQgU3VjY2VzcyAqLwotCi0JX19sZTE2IG51bV9mcmFnX25vbl9wcmltZV9yYXRlczsgLyogbnVtYmVyIG9mIEZyYWdtZW50cyBmb3Igbm9uLXByaW1lIHJhdGVzICovCi0JX19sZTE2IGFja190aW1lb3V0X25vbl9wcmltZV9yYXRlczsgLyogQUNLIFRpbWVvdXQgZm9yIG5vbi1wcmltZSByYXRlcyAqLwotCi19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotCi1zdHJ1Y3QgYWdueF9iZWFjb25faGRyIHsKLQlzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgcG93ZXI7IC8qIFR4IFN0YXRpb24gUG93ZXIgVGVtcGxhdGUgICovCi0JdTggcGh5X2hkcls2XTsJCS8qIFBIWSBIZHIgKi8KLQl1OCBmcmFtZV9sZW5fbG87CS8qIEZyYW1lIExlbmd0aCBMbyAqLwotCXU4IGZyYW1lX2xlbl9oaTsJLyogRnJhbWUgTGVuZ3RoIEhpICovCi0JdTggbWFjX2hkclsyNF07CQkvKiBNQUMgSGVhZGVyICovCi0JLyogRklYTUUgKi8KLQkvKiA4MDIuMTEoYWJnKSBiZWFjb24gKi8KLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi12b2lkIGhhc2hfd3JpdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hY19hZGRyLCB1OCBzdGFfaWQpOwotdm9pZCBoYXNoX2R1bXAoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTggc3RhX2lkKTsKLXZvaWQgaGFzaF9yZWFkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUzMiByZWdoaSwgdTMyIHJlZ2xvLCB1OCBzdGFfaWQpOwotdm9pZCBoYXNoX2RlbGV0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgcmVnaGksIHUzMiByZWdsbywgdTggc3RhX2lkKTsKLQotdm9pZCBnZXRfc3RhX3Bvd2VyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV9wb3dlciAqcG93ZXIsIHVuc2lnbmVkIGludCBzdGFfaWR4KTsKLXZvaWQgc2V0X3N0YV9wb3dlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgKnBvd2VyLAotCQkgICB1bnNpZ25lZCBpbnQgc3RhX2lkeCk7Ci12b2lkIGdldF9zdGFfdHhfd3Eoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhX3R4X3dxICp0eF93cSwKLQkJICAgdW5zaWduZWQgaW50IHN0YV9pZHgsIHVuc2lnbmVkIGludCB3cV9pZHgpOwotdm9pZCBzZXRfc3RhX3R4X3dxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV90eF93cSAqdHhfd3EsCi0JCSAgIHVuc2lnbmVkIGludCBzdGFfaWR4LCB1bnNpZ25lZCBpbnQgd3FfaWR4KTsKLXZvaWQgZ2V0X3N0YShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGEgKnN0YSwgdW5zaWduZWQgaW50IHN0YV9pZHgpOwotdm9pZCBzZXRfc3RhKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YSAqc3RhLCB1bnNpZ25lZCBpbnQgc3RhX2lkeCk7Ci0KLXZvaWQgc3RhX3Bvd2VyX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG51bSk7Ci12b2lkIHN0YV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBudW0pOwotCi0jZW5kaWYgLyogQUdOWF9TVEFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC90YWJsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTJmZWY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiYWdueC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCi0KLXN0YXRpYyBjb25zdCB1MzIKLXR4X2Zpcl90YWJsZVtdID0geyAweDE5LCAweDVkLCAweGNlLCAweDE1MSwgMHgxYzMsIDB4MWZmLCAweDFlYSwgMHgxN2MsIDB4Y2YsCi0JCSAgIDB4MTksIDB4MzhlLCAweDM1MCwgMHgzNjIsIDB4M2FkLCAweDUsIDB4NDQsIDB4NTksIDB4NDksCi0JCSAgIDB4MjEsIDB4M2Y3LCAweDNlMCwgMHgzZTMsIDB4M2YzLCAweDAgfTsKLQotdm9pZCB0eF9maXJfdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHhfZmlyX3RhYmxlKTsgaSsrKQotCQlpb3dyaXRlMzIodHhfZmlyX3RhYmxlW2ldLCBjdGwgKyBBR05YX0ZJUl9CQVNFICsgaSo0KTsKLX0gLyogZmlyX3RhYmxlX3NldHVwICovCi0KLQotc3RhdGljIGNvbnN0IHUzMgotZ2Fpbl90YWJsZVtdID0geyAweDgsIDB4OCwgMHhmLCAweDEzLCAweDE3LCAweDFiLCAweDFmLCAweDIzLCAweDI3LCAweDJiLAotCQkgMHgyZiwgMHgzMywgMHgzNywgMHgzYiwgMHgzZiwgMHg0MywgMHg0NywgMHg0YiwgMHg0ZiwKLQkJIDB4NTMsIDB4NTcsIDB4NWIsIDB4NWYsIDB4NWYsIDB4NWYsIDB4NWYsIDB4NWYsIDB4NWYsCi0JCSAweDVmLCAweDVmLCAweDVmLCAweDVmIH07Ci0KLXZvaWQgZ2Fpbl90YWJsZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShnYWluX3RhYmxlKTsgaSsrKSB7Ci0JCWlvd3JpdGUzMihnYWluX3RhYmxlW2ldLCBjdGwgKyBBR05YX0dBSU5fVEFCTEUgKyBpKjQpOwotCQlpb3dyaXRlMzIoZ2Fpbl90YWJsZVtpXSwgY3RsICsgQUdOWF9HQUlOX1RBQkxFICsgaSo0ICsgMHg4MCk7Ci0JfQotfSAvKiBnYWluX3RhYmxlX2luaXQgKi8KLQotdm9pZCBtb25pdG9yX2dhaW5fdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDB4NDQ7IGkgKz0gNCkgewotCQlpb3dyaXRlMzIoMHg2MSwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIGkpOwotCQlpb3dyaXRlMzIoMHg2MSwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIDB4MjAwICsgaSk7Ci0JfQotCWZvciAoaSA9IDB4NDQ7IGkgPCAweDY0OyBpICs9IDQpIHsKLQkJaW93cml0ZTMyKDB4NmUsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyBpKTsKLQkJaW93cml0ZTMyKDB4NmUsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyAweDIwMCArIGkpOwotCX0KLQlmb3IgKGkgPSAweDY0OyBpIDwgMHg5NDsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweDdhLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweDdhLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHg5NDsgaSA8IDB4ZGM7IGkgKz0gNCkgewotCQlpb3dyaXRlMzIoMHg4NywgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIGkpOwotCQlpb3dyaXRlMzIoMHg4NywgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIDB4MjAwICsgaSk7Ci0JfQotCWZvciAoaSA9IDB4ZGM7IGkgPCAweDE0ODsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweDk1LCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweDk1LCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHgxNDg7IGkgPCAweDFlODsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweGEyLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweGEyLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHgxZTg7IGkgPD0gMHgxZmM7IGkgKz0gNCkgewotCQlpb3dyaXRlMzIoMHhiMCwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIGkpOwotCQlpb3dyaXRlMzIoMHhiMCwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIDB4MjAwICsgaSk7Ci0JfQotfSAvKiBtb25pdG9yX2dhaW5fdGFibGVfaW5pdCAqLwotCi0KLXZvaWQgcm91dGluZ190YWJsZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdW5zaWduZWQgaW50IHR5cGUsIHN1YnR5cGU7Ci0JdTMyIHJlZzsKLQotCWRpc2FibGVfcmVjZWl2ZXIocHJpdik7Ci0KLQlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgMHgzOyB0eXBlKyspIHsKLQkJZm9yIChzdWJ0eXBlID0gMDsgc3VidHlwZSA8IDB4MTA7IHN1YnR5cGUrKykgewotCQkJLyogMS4gU2V0IFJvdXRpbmcgdGFibGUgdG8gUi9XIGFuZCB0byBSZXR1cm4gc3RhdHVzIG9uIFJlYWQgKi8KLQkJCXJlZyA9ICh0eXBlIDw8IFJPVVRBQl9UWVBFX1NISUZUKSB8Ci0JCQkJKHN1YnR5cGUgPDwgUk9VVEFCX1NVQlRZUEVfU0hJRlQpOwotCQkJcmVnIHw9ICgxIDw8IFJPVVRBQl9SV19TSElGVCkgfCAoMSA8PCBST1VUQUJfU1RBVFVTX1NISUZUKTsKLQkJCWlmICh0eXBlID09IFJPVVRBQl9UWVBFX0RBVEEpIHsKLQkJCQkvKiBOVUxMIGdvZXMgdG8gUkZQICovCi0JCQkJaWYgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTCkKLS8qCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX1JGUDsgKi8KLQkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9DUFU7Ci0JCQkJLyogUU9TIE5VTEwgZ29lcyB0byBDUFUgKi8KLQkJCQllbHNlIGlmIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTEwpCi0JCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfQ1BVOwotCQkJCS8qIEFsbCBEYXRhIGFuZCBRT1MgZGF0YSBzdWJ0eXBlcyBnbyB0byBFbmNyeXB0aW9uICovCi0JCQkJZWxzZSBpZiAoKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfREFUQSkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX0RBVEFBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9EQVRBUE9MTCkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX0RBVEFQT0xMQUNLKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TREFUQSkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU0RBVEFBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NEQVRBUE9MTCkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU0RBVEFBQ0tQT0xMKSkKLQkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9FTkNSWTsKLS8qCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsgKi8KLQkJCQkvKkRyb3AgTlVMTCBhbmQgUU9TIE5VTEwgYWNrLCBwb2xsIGFuZCBwb2xsIGFjayovCi0JCQkJZWxzZSBpZiAoKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTEFDSykgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTExBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9OVUxMUE9MTCkgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTExQT0xMKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTFBPTExBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NOVUxMUE9MTEFDSykpCi0vKgkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9EUk9QOyAqLwotCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVnIHw9IChST1VUQUJfUk9VVEVfQ1BVKTsKLQkJCX0KLQkJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX1JPVVRBQik7Ci0JCQkvKiBDaGVjayB0byB2ZXJpZnkgdGhhdCB0aGUgc3RhdHVzIGJpdCBjbGVhcmVkICovCi0JCQlyb3V0aW5nX3RhYmxlX2RlbGF5KCk7Ci0JCX0KLQl9Ci0JZW5hYmxlX3JlY2VpdmVyKHByaXYpOwotfSAvKiByb3V0aW5nX3RhYmxlX2luaXQgKi8KLQotdm9pZCB0eF9lbmdpbmVfbG9va3VwX3RibF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPD0gMjg7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4YjAwYywgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQlmb3IgKGkgPSAzMjsgaSA8PSAxMjA7IGkgKz0gOCkgewotCQlpb3dyaXRlMzIoMHgxZTU4LCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCQlpb3dyaXRlMzIoMHhiMDBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkgKyA0KTsKLQl9Ci0KLQlmb3IgKGkgPSAxMjg7IGkgPD0gMTU2OyBpICs9IDQpCi0JCWlvd3JpdGUzMigweDk4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JZm9yIChpID0gMTYwOyBpIDw9IDI0ODsgaSArPSA4KSB7Ci0JCWlvd3JpdGUzMigweDE4NTgsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JCWlvd3JpdGUzMigweDk4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSArIDQpOwotCX0KLQotCWZvciAoaSA9IDI1NjsgaSA8PSAyODQ7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4OTgwYywgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQlmb3IgKGkgPSAyODg7IGkgPD0gMzc2OyBpICs9IDgpIHsKLQkJaW93cml0ZTMyKDB4MWE1OCwgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQkJaW93cml0ZTMyKDB4MTg1OCwgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpICsgNCk7Ci0JfQotCi0JZm9yIChpID0gNTEyOyBpIDw9IDU0MDsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHhjMDBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCWZvciAoaSA9IDU0NDsgaSA8PSA2MzI7IGkgKz0gOCkgewotCQlpb3dyaXRlMzIoMHgyMDU4LCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCQlpb3dyaXRlMzIoMHhjMDBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkgKyA0KTsKLQl9Ci0KLQlmb3IgKGkgPSA2NDA7IGkgPD0gNjY4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigweGM4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JZm9yIChpID0gNjcyOyBpIDw9IDc2NDsgaSArPSA4KSB7Ci0JCWlvd3JpdGUzMigweDIyNTgsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JCWlvd3JpdGUzMigweGM4MGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSArIDQpOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNjI2YjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgQUdOWF9UQUJMRV9IXwotI2RlZmluZSBBR05YX1RBQkxFX0hfCi0KLXZvaWQgdHhfZmlyX3RhYmxlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGdhaW5fdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgbW9uaXRvcl9nYWluX3RhYmxlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIHJvdXRpbmdfdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgdHhfZW5naW5lX2xvb2t1cF90YmxfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLQotI2VuZGlmIC8qIEFHTlhfVEFCTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJkYjQxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MzYgKzAsMCBAQAotLyoqCi0gKiBBaXJnbyBNSU1PIHdpcmVsZXNzIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNyBMaSBZYW5CbyA8ZHJlYW1mbHkyODFAZ21haWwuY29tPgotCi0gKiBUaGFua3MgZm9yIEplZmYgV2lsbGlhbXMgPGFuZ2VsYmFuZUBnbWFpbC5jb20+IGRvIHJldmVyc2UgZW5naW5lZXIKLSAqIHdvcmtzIGFuZCBwdWJsaXNoZWQgdGhlIFNQRUNTIGF0IGh0dHA6Ly9haXJnby53ZHdjb25zdWx0aW5nLm5ldC9teW1vaW4KLQotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlICJhZ254LmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKLQotdW5zaWduZWQgaW50IHJ4X2ZyYW1lX2NudDsKLS8qIHVuc2lnbmVkIGludCBsb2NhbF90eF9zZW50X2NudCA9IDA7ICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX3J4X2VuZ2luZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWlvd3JpdGUzMigweDEwMCwgY3RsICsgQUdOWF9DSVJfUlhDVEwpOwotCS8qIFdhaXQgZm9yIFJYIENvbnRyb2wgdG8gaGF2ZSB0aGUgRGlzYWJsZSBSeCBJbnRlcnJ1cHQgKDB4MTAwKSBzZXQgKi8KLQlpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfcnhfZW5naW5lKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW93cml0ZTMyKDB4ODAsIGN0bCArIEFHTlhfQ0lSX1JYQ1RMKTsKLQlpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci19Ci0KLWlubGluZSB2b2lkIGRpc2FibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCWRpc2FibGVfcnhfZW5naW5lKHByaXYpOwotCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ0ZHKTsKLQlyZWcgJj0gfjB4MjA7Ci0JaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfUlhDRkcpOwotCWlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ0ZHKTsKLX0KLQotaW5saW5lIHZvaWQgZW5hYmxlX3J4X2ludGVycnVwdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0KLQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENGRyk7Ci0JcmVnIHw9IDB4MjA7Ci0JaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfUlhDRkcpOwotCWlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ0ZHKTsKLQllbmFibGVfcnhfZW5naW5lKHByaXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnhfZGVzY19pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBpZHgpCi17Ci0Jc3RydWN0IGFnbnhfZGVzYyAqZGVzYyA9IHByaXYtPnJ4LmRlc2MgKyBpZHg7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnJ4LmluZm8gKyBpZHg7Ci0KLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0KLQlpbmZvLT5kbWFfbGVuID0gSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEICsgc2l6ZW9mKHN0cnVjdCBhZ254X2hkcik7Ci0JaW5mby0+c2tiID0gZGV2X2FsbG9jX3NrYihpbmZvLT5kbWFfbGVuKTsKLQlpZiAoaW5mby0+c2tiID09IE5VTEwpCi0JCWFnbnhfYnVnKCJyZWZpbGwgZXJyIik7Ci0KLQlpbmZvLT5tYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiX3RhaWxfcG9pbnRlcihpbmZvLT5za2IpLAotCQkJCSAgICAgICBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5kbWFfYWRkciA9IGNwdV90b19iZTMyKGluZm8tPm1hcHBpbmcpOwotCS8qIFNldCB0aGUgb3duZXIgdG8gdGhlIGNhcmQgKi8KLQlkZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoYmUzMl90b19jcHUoZGVzYy0+ZnJhZykgfCBPV05FUik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByeF9kZXNjX3JlaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWR4KQotewotCXN0cnVjdCBhZ254X2luZm8gKmluZm8gPSBwcml2LT5yeC5pbmZvICsgaWR4OwotCi0JLyogQ2F1c2UgaWVlZTgwMjExIHdpbGwgZnJlZSB0aGUgc2tiIGJ1ZmZlciwgc28gd2UgbmVlZG4ndCB0byBmcmVlIGl0IGFnYWluPyEgKi8KLQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGluZm8tPm1hcHBpbmcsIGluZm8tPmRtYV9sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JcnhfZGVzY19pbml0KHByaXYsIGlkeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByeF9kZXNjX3JldXNpbmcoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjID0gcHJpdi0+cnguZGVzYyArIGlkeDsKLQlzdHJ1Y3QgYWdueF9pbmZvICppbmZvID0gcHJpdi0+cnguaW5mbyArIGlkeDsKLQotCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5kbWFfYWRkciA9IGNwdV90b19iZTMyKGluZm8tPm1hcHBpbmcpOwotCS8qIFNldCB0aGUgb3duZXIgdG8gdGhlIGNhcmQgKi8KLQlkZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoYmUzMl90b19jcHUoZGVzYy0+ZnJhZykgfCBPV05FUik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ4X2Rlc2NfZnJlZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWR4KQotewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2MgPSBwcml2LT5yeC5kZXNjICsgaWR4OwotCXN0cnVjdCBhZ254X2luZm8gKmluZm8gPSBwcml2LT5yeC5pbmZvICsgaWR4OwotCi0JQlVHX09OKCFkZXNjIHx8ICFpbmZvKTsKLQlpZiAoaW5mby0+bWFwcGluZykKLQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBpbmZvLT5tYXBwaW5nLCBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCWlmIChpbmZvLT5za2IpCi0JCWRldl9rZnJlZV9za2IoaW5mby0+c2tiKTsKLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0JbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX190eF9kZXNjX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBhZ254X2Rlc2MgKmRlc2MsIHN0cnVjdCBhZ254X2luZm8gKmluZm8pCi17Ci0JQlVHX09OKCFkZXNjIHx8ICFpbmZvKTsKLQkvKiBUT0RPIG1ha2Ugc3VyZSBtYXBwaW5nLCBza2IgYW5kIGxlbiBhcmUgY29uc2lzdGVuY3kgKi8KLQlpZiAoaW5mby0+bWFwcGluZykKLQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBpbmZvLT5tYXBwaW5nLAotCQkJCSBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAoaW5mby0+dHlwZSA9PSBQQUNLRVQpCi0JCWRldl9rZnJlZV9za2IoaW5mby0+c2tiKTsKLQotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR4bV9kZXNjX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjID0gcHJpdi0+dHhtLmRlc2MgKyBpZHg7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnR4bS5pbmZvICsgaWR4OwotCi0JX190eF9kZXNjX2ZyZWUocHJpdiwgZGVzYywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR4ZF9kZXNjX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjID0gcHJpdi0+dHhkLmRlc2MgKyBpZHg7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnR4ZC5pbmZvICsgaWR4OwotCi0JX190eF9kZXNjX2ZyZWUocHJpdiwgZGVzYywgaW5mbyk7Ci19Ci0KLWludCBmaWxsX3JpbmdzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JcHJpdi0+dHhkLmlkeF9zZW50ID0gcHJpdi0+dHhtLmlkeF9zZW50ID0gMDsKLQlwcml2LT5yeC5pZHggPSBwcml2LT50eG0uaWR4ID0gcHJpdi0+dHhkLmlkeCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnguc2l6ZTsgaSsrKQotCQlyeF9kZXNjX2luaXQocHJpdiwgaSk7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPnR4bS5zaXplOyBpKyspIHsKLQkJbWVtc2V0KHByaXYtPnR4bS5kZXNjICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpKTsKLQkJbWVtc2V0KHByaXYtPnR4bS5pbmZvICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPnR4ZC5zaXplOyBpKyspIHsKLQkJbWVtc2V0KHByaXYtPnR4ZC5kZXNjICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpKTsKLQkJbWVtc2V0KHByaXYtPnR4ZC5pbmZvICsgaSwgMCwgc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pKTsKLQl9Ci0KLQkvKiBGSVhNRSBTZXQgdGhlIGNhcmQgUlggVFhNIGFuZCBUWEQgYWRkcmVzcyAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1JYQ01TVEFSVCwgcHJpdi0+cnguZG1hKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9SWENNRU5ELCBwcml2LT50eG0uZG1hKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYTVNUQVJULCBwcml2LT50eG0uZG1hKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWE1FTkQsIHByaXYtPnR4ZC5kbWEpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhEU1RBUlQsIHByaXYtPnR4ZC5kbWEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYREVORCwgcHJpdi0+dHhkLmRtYSArCi0JCSAgICAgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpICogcHJpdi0+dHhkLnNpemUpOwotCi0JLyogRklYTUUgUmVsaW5xdWlzaCBjb250cm9sIG9mIHJpbmdzIHRvIGNhcmQgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCk7Ci0JcmVnICY9IH4weDgwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwsIHJlZyk7Ci0JcmV0dXJuIDA7Ci19IC8qIGZpbGxfcmluZ3MgKi8KLQotdm9pZCB1bmZpbGxfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4LnNpemU7IGkrKykKLQkJcnhfZGVzY19mcmVlKHByaXYsIGkpOwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT50eG0uc2l6ZTsgaSsrKQotCQl0eG1fZGVzY19mcmVlKHByaXYsIGkpOwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT50eGQuc2l6ZTsgaSsrKQotCQl0eGRfZGVzY19mcmVlKHByaXYsIGkpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotfQotCi0vKiBFeHRyYWN0IHRoZSBiaXRyYXRlIG91dCBvZiBhIENDSyBQTENQIGhlYWRlci4KLSAgIGNvcHkgZnJvbSBiY200M3h4IGRyaXZlciAqLwotc3RhdGljIGlubGluZSB1OCBhZ254X3BsY3BfZ2V0X2JpdHJhdGVfY2NrKF9fYmUzMiAqcGh5aGRyXzExYikKLXsKLQkvKiBGSVhNRSAqLwotCXN3aXRjaCAoKih1OCAqKXBoeWhkcl8xMWIpIHsKLQljYXNlIDB4MEE6Ci0JCXJldHVybiAwOwotCWNhc2UgMHgxNDoKLQkJcmV0dXJuIDE7Ci0JY2FzZSAweDM3OgotCQlyZXR1cm4gMjsKLQljYXNlIDB4NkU6Ci0JCXJldHVybiAzOwotCX0KLQlhZ254X2J1ZygiV3JvbmcgcGxjcCByYXRlIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEZJWE1FICovCi1zdGF0aWMgaW5saW5lIHU4IGFnbnhfcGxjcF9nZXRfYml0cmF0ZV9vZmRtKF9fYmUzMiAqcGh5aGRyXzExZykKLXsKLQl1OCByYXRlID0gKih1OCAqKXBoeWhkcl8xMWcgJiAweEY7Ci0KLQlwcmludGsoUEZYICJHIG1vZGUgcmF0ZSBpcyAweCV4XG4iLCByYXRlKTsKLQlyZXR1cm4gcmF0ZTsKLX0KLQotLyogRklYTUUgKi8KLXN0YXRpYyB2b2lkIGdldF9yeF9zdGF0cyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9oZHIgKmhkciwKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1OCAqcnNzaTsKLQl1MzIgbm9pc2U7Ci0JLyogRklYTUUganVzdCBmb3IgdGVzdCAqLwotCWludCBzbnIgPSA0MDsJCS8qIHNpZ25hbC10by1ub2lzZSByYXRpbyAqLwotCi0JbWVtc2V0KHN0YXQsIDAsIHNpemVvZigqc3RhdCkpOwotCS8qIFJTU0kgKi8KLQlyc3NpID0gKHU4ICopJmhkci0+cGh5X3N0YXRzX2xvOwotLyoJc3RhdC0+c3NpID0gKHJzc2lbMF0gKyByc3NpWzFdICsgcnNzaVsyXSkgLyAzOyAqLwotCS8qIE5vaXNlICovCi0Jbm9pc2UgPSBpb3JlYWQzMihjdGwgKyBBR05YX0dDUl9OT0lTRTApOwotCW5vaXNlICs9IGlvcmVhZDMyKGN0bCArIEFHTlhfR0NSX05PSVNFMSk7Ci0Jbm9pc2UgKz0gaW9yZWFkMzIoY3RsICsgQUdOWF9HQ1JfTk9JU0UyKTsKLQlzdGF0LT5ub2lzZSA9IG5vaXNlIC8gMzsKLQkvKiBTaWduYWwgcXVhbGl0eSAqLwotLyoJc25yID0gc3RhdC0+c3NpIC0gc3RhdC0+bm9pc2U7ICovCi0JaWYgKHNuciA+PSAwICYmIHNuciA8IDQwKQotCQlzdGF0LT5zaWduYWwgPSA1ICogc25yIC8gMjsKLQllbHNlIGlmIChzbnIgPj0gNDApCi0JCXN0YXQtPnNpZ25hbCA9IDEwMDsKLQllbHNlCi0JCXN0YXQtPnNpZ25hbCA9IDA7Ci0KLQotCWlmIChoZHItPl8xMWIwICYmICFoZHItPl8xMWcwKSB7Ci0JCXN0YXQtPnJhdGVfaWR4ID0gYWdueF9wbGNwX2dldF9iaXRyYXRlX2NjaygmaGRyLT5fMTFiMCk7Ci0JfSBlbHNlIGlmICghaGRyLT5fMTFiMCAmJiBoZHItPl8xMWcwKSB7Ci0JCXByaW50ayhQRlggIlJYOiBGb3VuZCBHIG1vZGUgcGFja2V0XG4iKTsKLQkJc3RhdC0+cmF0ZV9pZHggPSBhZ254X3BsY3BfZ2V0X2JpdHJhdGVfb2ZkbSgmaGRyLT5fMTFnMCk7Ci0JfSBlbHNlCi0JCWFnbnhfYnVnKCJVbmtub3duIHBhY2tldHMgdHlwZSIpOwotCi0KLQlzdGF0LT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQlzdGF0LT5mcmVxID0gYWdueF9jaGFubmVsc1twcml2LT5jaGFubmVsIC0gMV0uY2VudGVyX2ZyZXE7Ci0vKglzdGF0LT5hbnRlbm5hID0gMzsKLQlzdGF0LT5tYWN0aW1lID0gYmUzMl90b19jcHUoaGRyLT50aW1lX3N0YW1wKTsKLQlzdGF0LT5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsgKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvbWJpbmVfaGRyX2ZyYWcoc3RydWN0IGllZWU4MDIxMV9oZHIgKmllZWVoZHIsCi0JCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdTE2IGZjdGw7Ci0JdW5zaWduZWQgaW50IGhkcmxlbjsKLQotCWZjdGwgPSBsZTE2X3RvX2NwdShpZWVlaGRyLT5mcmFtZV9jb250cm9sKTsKLQloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjdGwpOwotCS8qIEZJWE1FICovCi0JaWYgKGhkcmxlbiA8ICgyKzIrNikvKm1pbmltdW0gaGRyKi8gfHwKLQkgICAgaGRybGVuID4gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaGRyIGxlbiBpcyAlZFxuIiwgaGRybGVuKTsKLQkJYWdueF9idWcoIldyb25nIGllZWU4MDIxMSBoZHIgZGV0ZWN0ZWQiKTsKLQl9Ci0Jc2tiX3B1c2goc2tiLCBoZHJsZW4pOwotCW1lbWNweShza2ItPmRhdGEsIGllZWVoZHIsIGhkcmxlbik7Ci19IC8qIGNvbWJpbmVfaGRyX2ZyYWcgKi8KLQotc3RhdGljIGlubGluZSBpbnQgYWdueF9wYWNrZXRfY2hlY2soc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfaGRyICphZ254aGRyLAotCQkJCSAgICB1bnNpZ25lZCBwYWNrZXRfbGVuKQotewotCWlmIChhZ254X2dldF9iaXRzKENSQ19GQUlMLCBDUkNfRkFJTF9TSElGVCwgYmUzMl90b19jcHUoYWdueGhkci0+cmVnMSkpID09IDEpIHsKLQkJcHJpbnRrKFBGWCAiUlg6IENSQyBjaGVjayBmYWlsXG4iKTsKLQkJZ290byBkcm9wOwotCX0KLQlpZiAocGFja2V0X2xlbiA+IDIwNDgpIHsKLQkJcHJpbnRrKFBGWCAiUlg6IFRvbyBsb25nIHBhY2tldCBkZXRlY3RlZFxuIik7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0KLQkvKiBGSVhNRSBKdXN0IHVzYWJsZSBmb3IgUHJvbWlvdXMgTW9kZSwgZm9yIE1hbmFnZSBtb2RlIGV4Y2x1ZGUgRkNTICovCi0vKiAJaWYgKHBhY2tldF9sZW4gLSBzaXplb2YoKmFnbnhoZHIpIDwgRkNTX0xFTikgeyAqLwotLyogCQlwcmludGsoUEZYICJSWDogVG9vIHNob3J0IHBhY2tldCBkZXRlY3RlZFxuIik7ICovCi0vKiAJCWdvdG8gZHJvcDsgKi8KLS8qIAl9ICovCi0JcmV0dXJuIDA7Ci1kcm9wOgotCXByaXYtPnN0YXRzLmRvdDExRkNTRXJyb3JDb3VudCsrOwotCXJldHVybiAtMTsKLX0KLQotdm9pZCBoYW5kbGVfcnhfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGludCBsZW47Ci0vKglBR05YX1RSQUNFOyAqLwotCi0JZG8gewotCQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjOwotCQl1MzIgZnJhZzsKLQkJc3RydWN0IGFnbnhfaW5mbyAqaW5mbzsKLQkJc3RydWN0IGFnbnhfaGRyICpoZHI7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCXVuc2lnbmVkIGludCBpID0gcHJpdi0+cnguaWR4ICUgcHJpdi0+cnguc2l6ZTsKLQotCQlkZXNjID0gcHJpdi0+cnguZGVzYyArIGk7Ci0JCWZyYWcgPSBiZTMyX3RvX2NwdShkZXNjLT5mcmFnKTsKLQkJaWYgKGZyYWcgJiBPV05FUikKLQkJCWJyZWFrOwotCi0JCWluZm8gPSBwcml2LT5yeC5pbmZvICsgaTsKLQkJc2tiID0gaW5mby0+c2tiOwotCQloZHIgPSAoc3RydWN0IGFnbnhfaGRyICopKHNrYi0+ZGF0YSk7Ci0KLQkJbGVuID0gKGZyYWcgJiBQQUNLRVRfTEVOKSA+PiBQQUNLRVRfTEVOX1NISUZUOwotCQlpZiAoYWdueF9wYWNrZXRfY2hlY2socHJpdiwgaGRyLCBsZW4pID09IC0xKSB7Ci0JCQlyeF9kZXNjX3JldXNpbmcocHJpdiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlza2JfcHV0KHNrYiwgbGVuKTsKLQotCQlkbyB7Ci0JCQkJdTE2IGZjdGw7Ci0JCQlmY3RsID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkciktPmZyYW1lX2NvbnRyb2wpOwotCQkJaWYgKChmY3RsICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpICE9IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pLyogJiYgIShmY3RsICYgSUVFRTgwMjExX1NUWVBFX0JFQUNPTikpICovCi0JCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWhkci0+bWFjX2hkciwgIlJYIik7Ci0JCX0gd2hpbGUgKDApOwotCi0JCWlmIChoZHItPl8xMWIwICYmICFoZHItPl8xMWcwKSB7Ci0vKgkJCWludCBqOwotCQkJdTE2IGZjdGwgPSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyKQotCQkJCQkgICAgICAgLT5mcmFtZV9jb250cm9sKTsKLQkJCWlmICggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gIElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7Ci0JCQkJYWdueF9wcmludF9yeF9oZHIoaGRyKTsKLQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7Ci0JCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIGopOwotCQkJfSAqLwotCi0JCQlnZXRfcnhfc3RhdHMocHJpdiwgaGRyLCAmc3RhdHVzKTsKLQkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQkJCWNvbWJpbmVfaGRyX2ZyYWcoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyLCBza2IpOwotCQl9IGVsc2UgaWYgKCFoZHItPl8xMWIwICYmIGhkci0+XzExZzApIHsKLS8qCQkJaW50IGo7ICovCi0JCQlhZ254X3ByaW50X3J4X2hkcihoZHIpOwotCQkJYWdueF9wcmludF9zdGEocHJpdiwgQlNTSURfU1RBSUQpOwotLyoJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLwotCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIDApOwotCi0JCQlwcmludF9oZXhfZHVtcF9ieXRlcygiYWdueDogUlhfUEFDS0VUOiAiLCBEVU1QX1BSRUZJWF9OT05FLAotCQkJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4gKyA4KTsKLQotLyoJCQlpZiAoYWdueF9wbGNwX2dldF9iaXRyYXRlX29mZG0oJmhkci0+XzExZzApID09IDApICovCi0JCQlnZXRfcnhfc3RhdHMocHJpdiwgaGRyLCAmc3RhdHVzKTsKLQkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQkJCWNvbWJpbmVfaGRyX2ZyYWcoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopCi0JCQkJCSAoKHZvaWQgKikmaGRyLT5tYWNfaGRyKSwgc2tiKTsKLS8qCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSwgIlJYIEciKTsgKi8KLQkJfSBlbHNlCi0JCQlhZ254X2J1ZygiVW5rbm93biBwYWNrZXRzIHR5cGUiKTsKLQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7Ci0JCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCBza2IpOwotCQlyeF9kZXNjX3JlaW5pdChwcml2LCBpKTsKLQotCX0gd2hpbGUgKHByaXYtPnJ4LmlkeCsrKTsKLX0gLyogaGFuZGxlX3J4X2lycSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX3R4X2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9yaW5nICpyaW5nKQotewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2M7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbzsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSByaW5nLT5pZHhfc2VudDsgaWR4IDwgcmluZy0+aWR4OyBpZHgrKykgewotCQl1bnNpZ25lZCBpbnQgaSA9IGlkeCAlIHJpbmctPnNpemU7Ci0JCXUzMiAgZnJhZzsKLQotCQlkZXNjID0gcmluZy0+ZGVzYyArIGk7Ci0JCWluZm8gPSByaW5nLT5pbmZvICsgaTsKLQotCQlmcmFnID0gYmUzMl90b19jcHUoZGVzYy0+ZnJhZyk7Ci0JCWlmIChmcmFnICYgT1dORVIpIHsKLQkJCWlmIChpbmZvLT50eXBlID09IEhFQURFUikKLQkJCQlicmVhazsKLQkJCWVsc2UKLQkJCQlhZ254X2J1ZygiVFggZXJyb3IiKTsKLQkJfQotCi0JCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgaW5mby0+bWFwcGluZywgaW5mby0+ZG1hX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkJZG8gewotLyoJCQlpbnQgajsgKi8KLQkJCXNpemVfdCBsZW47Ci0JCQlsZW4gPSBpbmZvLT5za2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpICsgaW5mby0+aGRyX2xlbjsKLS8qCQkJaWYgKGxlbiA9PSA2MTQpIHsgKi8KLS8qCQkJCWFnbnhfcHJpbnRfZGVzYyhkZXNjKTsgKi8KLQkJCQlpZiAoaW5mby0+dHlwZSA9PSBQQUNLRVQpIHsKLS8qCQkJCQlhZ254X3ByaW50X3R4X2hkcigoc3RydWN0IGFnbnhfaGRyICopaW5mby0+c2tiLT5kYXRhKTsgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKgkJCQkJYWdueF9wcmludF9zdGEocHJpdiwgTE9DQUxfU1RBSUQpOyAqLwotLyoJCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0vKgkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgTE9DQUxfU1RBSUQsIDApOyAqLwotLyoJCQkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7ICovCi0vKgkJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgMCk7ICovCi0JCQkJfQotLyoJCQl9ICovCi0JCX0gd2hpbGUgKDApOwotCi0JCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkgewotLyoJCQlkdW1wX3R4bV9yZWdpc3RlcnMocHJpdik7Ci0JCQlkdW1wX3J4bV9yZWdpc3RlcnMocHJpdik7Ci0JCQlkdW1wX2JtX3JlZ2lzdGVycyhwcml2KTsKLQkJCWR1bXBfY2lyX3JlZ2lzdGVycyhwcml2KTsgKi8KLQkJfQotCi0JCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkgewotLyoJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOyAqLwotCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGkgPSBJRUVFODAyMTFfU0tCX0NCKGluZm8tPnNrYik7Ci0KLQkJCXNrYl9wdWxsKGluZm8tPnNrYiwgc2l6ZW9mKHN0cnVjdCBhZ254X2hkcikpOwotCQkJbWVtY3B5KHNrYl9wdXNoKGluZm8tPnNrYiwgaW5mby0+aGRyX2xlbiksICZpbmZvLT5oZHIsIGluZm8tPmhkcl9sZW4pOwotCi0vKgkJCWR1bXBfaWVlZTgwMjExX2hkcigoc3RydWN0IGllZWU4MDIxMV9oZHIgKilpbmZvLT5za2ItPmRhdGEsICJUWF9IQU5ETEUiKTsgKi8KLS8qIAkJCXByaW50X2hleF9kdW1wX2J5dGVzKCJhZ254OiBUWF9IQU5ETEU6ICIsIERVTVBfUFJFRklYX05PTkUsICovCi0vKiAJCQkJCSAgICAgaW5mby0+c2tiLT5kYXRhLCBpbmZvLT5za2ItPmxlbik7ICovCi0KLQkJCWlmICghKHR4aS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpCi0JCQkJdHhpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0KLQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgaW5mby0+c2tiKTsKLQotCi0vKiAJCQkJaW5mby0+dHhfc3RhdHVzLnF1ZXVlX251bWJlciA9IChyaW5nLT5zaXplIC0gaSkgLyAyOyAqLwotLyogCQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgaW5mby0+c2tiLCAmKGluZm8tPnR4X3N0YXR1cykpOyAqLwotLyogCQkJfSBlbHNlICovCi0vKiAJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaW5mby0+c2tiKTsgKi8KLQkJfQotCQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Ci0JCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQl9Ci0KLQlyaW5nLT5pZHhfc2VudCA9IGlkeDsKLQkvKiBUT0RPIGZpbGwgdGhlIHByaXYtPmxvd19sZXZlbF9zdGF0cyAqLwotCi0JLyogaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIDApOyAqLwotfQotCi12b2lkIGhhbmRsZV90eG1faXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0JaGFuZGxlX3R4X2lycShwcml2LCAmcHJpdi0+dHhtKTsKLX0KLQotdm9pZCBoYW5kbGVfdHhkX2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCWhhbmRsZV90eF9pcnEocHJpdiwgJnByaXYtPnR4ZCk7Ci19Ci0KLXZvaWQgaGFuZGxlX290aGVyX2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotLyoJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7ICovCi0JdTMyIHN0YXR1cyA9IHByaXYtPmlycV9zdGF0dXM7Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCWlmIChzdGF0dXMgJiBJUlFfVFhfQkVBQ09OKSB7Ci0JCWlvd3JpdGUzMihJUlFfVFhfQkVBQ09OLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBUWCBCZWFjb24gY29udHJvbCBpcyAwWCUuOFhcbiIsIGlvcmVhZDMyKGN0bCArIEFHTlhfVFhNX0JFQUNPTl9DVEwpKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBUWCBCZWFjb24gcnggZnJhbWUgbnVtOiAlZFxuIiwgcnhfZnJhbWVfY250KTsKLQl9Ci0JaWYgKHN0YXR1cyAmIElSUV9UWF9SRVRSWSkgewotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX1RYTV9SRVRSWVNUQUlEKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBUWCBSZXRyeSwgUkVUUlkgU1RBIElEIGlzICV4XG4iLCByZWcpOwotCX0KLQlpZiAoc3RhdHVzICYgSVJRX1RYX0FDVElWSVRZKQotCQlwcmludGsoUEZYICJJUlE6IFRYIEFjdGl2aXR5XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1JYX0FDVElWSVRZKQotCQlwcmludGsoUEZYICJJUlE6IFJYIEFjdGl2aXR5XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1JYX1gpCi0JCXByaW50ayhQRlggIklSUTogUlggWFxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9SWF9ZKSB7Ci0JCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX01BU0spOwotCQlyZWcgJj0gfklSUV9SWF9ZOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJaW93cml0ZTMyKElSUV9SWF9ZLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBSWCBZXG4iKTsKLQl9Ci0JaWYgKHN0YXR1cyAmIElSUV9SWF9IQVNISElUKSAgewotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJcmVnICY9IH5JUlFfUlhfSEFTSEhJVDsKLQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfTUFTSyk7Ci0JCWlvd3JpdGUzMihJUlFfUlhfSEFTSEhJVCwgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0JCXByaW50ayhQRlggIklSUTogUlggSGFzaCBIaXRcbiIpOwotCi0JfQotCWlmIChzdGF0dXMgJiBJUlFfUlhfRlJBTUUpIHsKLQkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9JTlRfTUFTSyk7Ci0JCXJlZyAmPSB+SVJRX1JYX0ZSQU1FOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJaW93cml0ZTMyKElSUV9SWF9GUkFNRSwgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0JCXByaW50ayhQRlggIklSUTogUlggRnJhbWVcbiIpOwotCQlyeF9mcmFtZV9jbnQrKzsKLQl9Ci0JaWYgKHN0YXR1cyAmIElSUV9FUlJfSU5UKSB7Ci0JCWlvd3JpdGUzMihJUlFfRVJSX0lOVCwgY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0vKgkJYWdueF9od19yZXNldChwcml2KTsgKi8KLQkJcHJpbnRrKFBGWCAiSVJROiBFcnJvciBJbnRlcnJ1cHRcbiIpOwotCX0KLQlpZiAoc3RhdHVzICYgSVJRX1RYX1FVRV9GVUxMKQotCQlwcmludGsoUEZYICJJUlE6IFRYIFdvcmtxdWV1ZSBGdWxsXG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX0JBTkRNQU5fRVJSKQotCQlwcmludGsoUEZYICJJUlE6IEJhbmR3aWR0aCBNYW5hZ2VtZW50IEVycm9yXG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1RYX0RJU0FCTEUpCi0JCXByaW50ayhQRlggIklSUTogVFggRGlzYWJsZVxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9SWF9JVkFTRVNLRVkpCi0JCXByaW50ayhQRlggIklSUTogUlggSW52YWxpZCBTZXNzaW9uIEtleVxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9SRVBfVEhISVQpCi0JCXByaW50ayhQRlggIklSUTogUmVwbGF5IFRocmVzaG9sZCBIaXRcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfVElNRVIxKQotCQlwcmludGsoUEZYICJJUlE6IFRpbWVyMVxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9USU1FUl9DTlQpCi0JCXByaW50ayhQRlggIklSUTogVGltZXIgQ291bnRcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfUEhZX0ZBU1RJTlQpCi0JCXByaW50ayhQRlggIklSUTogUGh5IEZhc3QgSW50ZXJydXB0XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1BIWV9TTE9XSU5UKQotCQlwcmludGsoUEZYICJJUlE6IFBoeSBTbG93IEludGVycnVwdFxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9PVEhFUikKLQkJcHJpbnRrKFBGWCAiSVJROiAweDgwMDAwMDAwXG4iKTsKLX0gLyogaGFuZGxlX290aGVyX2lycSAqLwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCByb3V0ZV9mbGFnX3NldChzdHJ1Y3QgYWdueF9oZHIgKnR4aGRyKQotewotLyoJdTMyIHJlZyA9IDA7ICovCi0KLQkvKiBGSVhNRSAqLwotLyoJcmVnID0gKDB4NyA8PCBST1VURV9DT01QUkVTU0lPTl9TSElGVCkgJiBST1VURV9DT01QUkVTU0lPTjsgKi8KLS8qCXR4aGRyLT5yZWc1ID0gY3B1X3RvX2JlMzIocmVnKTsgKi8KLQl0eGhkci0+cmVnNSA9ICgweGEgPDwgMHgwKSB8ICgweDcgPDwgMHgxOCk7Ci0vKgl0eGhkci0+cmVnNSA9IGNwdV90b19iZTMyKCgweGEgPDwgMHgwKSB8ICgweDcgPDwgMHgxOCkpOyAqLwotLyoJdHhoZHItPnJlZzUgPSBjcHVfdG9fYmUzMigweDcgPDwgMHgwKTsgKi8KLX0KLQotLyogUmV0dXJuIDAgaWYgbm8gbWF0Y2ggKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9wb3dlcl9sZXZlbCh1bnNpZ25lZCBpbnQgcmF0ZSwgdW5zaWduZWQgaW50IGFudGVubmFzX251bSkKLXsKLQl1bnNpZ25lZCBpbnQgcG93ZXJfbGV2ZWw7Ci0KLQlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIDEwOgotCWNhc2UgMjA6Ci0JY2FzZSA1NToKLQljYXNlIDYwOgotCWNhc2UgOTA6Ci0JY2FzZSAxMjA6Ci0JCXBvd2VyX2xldmVsID0gMjI7Ci0JCWJyZWFrOwotCi0JY2FzZSAxODA6Ci0JCXBvd2VyX2xldmVsID0gMTk7Ci0JCWJyZWFrOwotCi0JY2FzZSAyNDA6Ci0JCXBvd2VyX2xldmVsID0gMTg7Ci0JCWJyZWFrOwotCi0JY2FzZSAzNjA6Ci0JCXBvd2VyX2xldmVsID0gMTY7Ci0JCWJyZWFrOwotCi0JY2FzZSA0ODA6Ci0JCXBvd2VyX2xldmVsID0gMTU7Ci0JCWJyZWFrOwotCi0JY2FzZSA1NDA6Ci0JCXBvd2VyX2xldmVsID0gMTQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFnbnhfYnVnKCJFcnJvciByYXRlIHNldHRpbmdcbiIpOwotCX0KLQotCWlmIChwb3dlcl9sZXZlbCAmJiAoYW50ZW5uYXNfbnVtID09IDIpKQotCQlwb3dlcl9sZXZlbCAtPSAzOwotCi0JcmV0dXJuIHBvd2VyX2xldmVsOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9hZ254X2hkcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9pbmZvICp0eF9pbmZvKQotewotCXN0cnVjdCBhZ254X2hkciAqdHhoZHIgPSAoc3RydWN0IGFnbnhfaGRyICopdHhfaW5mby0+c2tiLT5kYXRhOwotCXNpemVfdCBsZW47Ci0JdTE2IGZjID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikmdHhfaW5mby0+aGRyKTsKLQl1MzIgcmVnOwotCi0JbWVtc2V0KHR4aGRyLCAwLCBzaXplb2YoKnR4aGRyKSk7Ci0KLS8qCXJlZyA9IGFnbnhfc2V0X2JpdHMoU1RBVElPTl9JRCwgU1RBVElPTl9JRF9TSElGVCwgTE9DQUxfU1RBSUQpOyAqLwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoU1RBVElPTl9JRCwgU1RBVElPTl9JRF9TSElGVCwgQlNTSURfU1RBSUQpOwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFdPUktRVUVVRV9JRCwgV09SS1FVRVVFX0lEX1NISUZULCAwKTsKLQl0eGhkci0+cmVnNCA9IGNwdV90b19iZTMyKHJlZyk7Ci0KLQkvKiBTZXQgdGhlIEhhcmR3YXJlIFNlcXVlbmNlIE51bWJlciB0byAxPyAqLwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoU0VRVUVOQ0VfTlVNQkVSLCBTRVFVRU5DRV9OVU1CRVJfU0hJRlQsIDApOwotLyoJcmVnID0gYWdueF9zZXRfYml0cyhTRVFVRU5DRV9OVU1CRVIsIFNFUVVFTkNFX05VTUJFUl9TSElGVCwgMSk7ICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoTUFDX0hEUl9MRU4sIE1BQ19IRFJfTEVOX1NISUZULCB0eF9pbmZvLT5oZHJfbGVuKTsKLQl0eGhkci0+cmVnMSA9IGNwdV90b19iZTMyKHJlZyk7Ci0JLyogU2V0IHRoZSBhZ254X2hkcidzIE1BQyBoZWFkZXIgKi8KLQltZW1jcHkodHhoZHItPm1hY19oZHIsICZ0eF9pbmZvLT5oZHIsIHR4X2luZm8tPmhkcl9sZW4pOwotCi0JcmVnID0gYWdueF9zZXRfYml0cyhBQ0ssIEFDS19TSElGVCwgMSk7Ci0vKglyZWcgPSBhZ254X3NldF9iaXRzKEFDSywgQUNLX1NISUZULCAwKTsgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhNVUxUSUNBU1QsIE1VTFRJQ0FTVF9TSElGVCwgMCk7Ci0vKglyZWcgfD0gYWdueF9zZXRfYml0cyhNVUxUSUNBU1QsIE1VTFRJQ0FTVF9TSElGVCwgMSk7ICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoUkVMQVksIFJFTEFZX1NISUZULCAwKTsKLQlyZWcgfD0gYWdueF9zZXRfYml0cyhUTSwgVE1fU0hJRlQsIDApOwotCXR4aGRyLT5yZWcwID0gY3B1X3RvX2JlMzIocmVnKTsKLQotCS8qIFNldCB0aGUgbG9uZyBhbmQgc2hvcnQgcmV0cnkgbGltaXRzICovCi0JdHhoZHItPnR4LnNob3J0X3JldHJ5X2xpbWl0ID0gdHhfaW5mby0+dHhpLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OwotCXR4aGRyLT50eC5sb25nX3JldHJ5X2xpbWl0ID0gdHhfaW5mby0+dHhpLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OwotCi0JLyogRklYTUUgKi8KLQlsZW4gPSB0eF9pbmZvLT5za2ItPmxlbiAtIHNpemVvZigqdHhoZHIpICsgdHhfaW5mby0+aGRyX2xlbiArIEZDU19MRU47Ci0JaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKQotCQlsZW4gKz0gODsKLQlsZW4gPSAyMzk4OwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoRlJBR19TSVpFLCBGUkFHX1NJWkVfU0hJRlQsIGxlbik7Ci0JbGVuID0gdHhfaW5mby0+c2tiLT5sZW4gLSBzaXplb2YoKnR4aGRyKTsKLQlyZWcgfD0gYWdueF9zZXRfYml0cyhQQVlMT0FEX0xFTiwgUEFZTE9BRF9MRU5fU0hJRlQsIGxlbik7Ci0JdHhoZHItPnJlZzMgPSBjcHVfdG9fYmUzMihyZWcpOwotCi0Jcm91dGVfZmxhZ19zZXQodHhoZHIpOwotfSAvKiBmaWxsX2hkciAqLwotCi1zdGF0aWMgdm9pZCB0eG1fcG93ZXJfc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpKQotewotCXN0cnVjdCBhZ254X3N0YV9wb3dlciBwb3dlcjsKLQl1MzIgcmVnOwotCi0JLyogRklYTUUgKi8KLQlpZiAodHhpLT5jb250cm9sLnJhdGVzWzBdLmlkeCA8IDApIHsKLQkJLyogRm9yIEIgbW9kZSBTaG9ydCBQcmVhbWJsZSAqLwotCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExQl9TSE9SVCk7Ci0vKgkJY29udHJvbC0+dHhfcmF0ZSA9IC1jb250cm9sLT50eF9yYXRlOyAqLwotCX0gZWxzZQotCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExRyk7Ci0vKgkJcmVnID0gYWdueF9zZXRfYml0cyhQSFlfTU9ERSwgUEhZX01PREVfU0hJRlQsIEFHTlhfTU9ERV84MDIxMUJfTE9ORyk7ICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoU0lHTkFMLCBTSUdOQUxfU0hJRlQsIDB4Qik7Ci0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoUkFURSwgUkFURV9TSElGVCwgMHhCKTsKLS8qCXJlZyB8PSBhZ254X3NldF9iaXRzKFBPV0VSX0xFVkVMLCBQT1dFUl9MRVZFTF9TSElGVCwgMTUpOyAqLwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFBPV0VSX0xFVkVMLCBQT1dFUl9MRVZFTF9TSElGVCwgMjApOwotCS8qIGlmIHJhdGUgPCAxMU0gc2V0IGl0IHRvIDAgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhOVU1fVFJBTlNNSVRURVJTLCBOVU1fVFJBTlNNSVRURVJTX1NISUZULCAxKTsKLS8qCXJlZyB8PSBhZ254X3NldF9iaXRzKEVEQ0YsIEVEQ0ZfU0hJRlQsIDEpOyAqLwotLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoVElGUywgVElGU19TSElGVCwgMSk7ICovCi0KLQlwb3dlci5yZWcgPSByZWc7Ci0vKglwb3dlci5yZWcgPSBjcHVfdG9fbGUzMihyZWcpOyAqLwotCi0vKglzZXRfc3RhX3Bvd2VyKHByaXYsICZwb3dlciwgTE9DQUxfU1RBSUQpOyAqLwotCXNldF9zdGFfcG93ZXIocHJpdiwgJnBvd2VyLCBCU1NJRF9TVEFJRCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHR4X3BhY2tldF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXVuc2lnbmVkIGludCBpZWVlX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7Ci0JaWYgKHNrYi0+bGVuID4gMjA0OCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJsZW5ndGggaXMgJWRcbiIsIHNrYi0+bGVuKTsKLQkJYWdueF9idWcoIlRvbyBsb25nIFRYIHNrYiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCS8qIEZJWE1FICovCi0JaWYgKHNrYi0+bGVuID09IGllZWVfbGVuKSB7Ci0JCXByaW50ayhQRlggIkEgc3RyYW5nZSBUWCBwYWNrZXRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JCS8qIHR4X2ZhaWxlX2lycXNhZmUoKTsgKi8KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19hZ254X3R4KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgc3RydWN0IGFnbnhfcmluZyAqcmluZykKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpoZHJfZGVzYywgKmZyYWdfZGVzYzsKLQlzdHJ1Y3QgYWdueF9pbmZvICpoZHJfaW5mbywgKmZyYWdfaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFRoZSBSWCBpbnRlcnJ1cHQgbmVlZCBiZSBEaXNhYmxlIHVudGlsIHRoaXMgVFggcGFja2V0Ci0JICAgaXMgaGFuZGxlZCBpbiB0aGUgbmV4dCB0eCBpbnRlcnJ1cHQgKi8KLQlkaXNhYmxlX3J4X2ludGVycnVwdChwcml2KTsKLQotCWkgPSByaW5nLT5pZHg7Ci0JcmluZy0+aWR4ICs9IDI7Ci0vKiAgIAlpZiAocHJpdi0+dHhtX2lkeCAtIHByaXYtPnR4bV9pZHhfc2VudCA9PSBBR05YX1RYTV9SSU5HX1NJWkUgLSAyKSAqLwotLyogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShwcml2LT5odywgMCk7ICovCi0KLQkvKiBTZXQgYWdueCBoZWFkZXIncyBpbmZvIGFuZCBkZXNjICovCi0JaSAlPSByaW5nLT5zaXplOwotCWhkcl9kZXNjID0gcmluZy0+ZGVzYyArIGk7Ci0JaGRyX2luZm8gPSByaW5nLT5pbmZvICsgaTsKLQloZHJfaW5mby0+aGRyX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7Ci0JbWVtY3B5KCZoZHJfaW5mby0+aGRyLCBza2ItPmRhdGEsIGhkcl9pbmZvLT5oZHJfbGVuKTsKLQotCS8qIEFkZCB0aGUgYWdueCBoZWFkZXIgdG8gdGhlIGZyb250IG9mIHRoZSBTS0IgKi8KLQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpIC0gaGRyX2luZm8tPmhkcl9sZW4pOwotCi0JaGRyX2luZm8tPnR4aSA9IHR4aTsKLQloZHJfaW5mby0+ZG1hX2xlbiA9IHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpOwotCWhkcl9pbmZvLT5za2IgPSBza2I7Ci0JaGRyX2luZm8tPnR5cGUgPSBIRUFERVI7Ci0JZmlsbF9hZ254X2hkcihwcml2LCBoZHJfaW5mbyk7Ci0JaGRyX2luZm8tPm1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsCi0JCQkJCSAgIGhkcl9pbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlkbyB7Ci0JCXUzMiBmcmFnID0gMDsKLQkJZnJhZyB8PSBhZ254X3NldF9iaXRzKEZJUlNUX0ZSQUcsIEZJUlNUX0ZSQUdfU0hJRlQsIDEpOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoTEFTVF9GUkFHLCBMQVNUX0ZSQUdfU0hJRlQsIDApOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoUEFDS0VUX0xFTiwgUEFDS0VUX0xFTl9TSElGVCwgc2tiLT5sZW4pOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoRklSU1RfRlJBR19MRU4sIEZJUlNUX0ZSQUdfTEVOX1NISUZULCAxKTsKLQkJZnJhZyB8PSBhZ254X3NldF9iaXRzKE9XTkVSLCBPV05FUl9TSElGVCwgMSk7Ci0JCWhkcl9kZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoZnJhZyk7Ci0JfSB3aGlsZSAoMCk7Ci0JaGRyX2Rlc2MtPmRtYV9hZGRyID0gY3B1X3RvX2JlMzIoaGRyX2luZm8tPm1hcHBpbmcpOwotCi0KLQkvKiBTZXQgRnJhZydzIGluZm8gYW5kIGRlc2MgKi8KLQlpID0gKGkgKyAxKSAlIHJpbmctPnNpemU7Ci0JZnJhZ19kZXNjID0gcmluZy0+ZGVzYyArIGk7Ci0JZnJhZ19pbmZvID0gcmluZy0+aW5mbyArIGk7Ci0JbWVtY3B5KGZyYWdfaW5mbywgaGRyX2luZm8sIHNpemVvZihzdHJ1Y3QgYWdueF9pbmZvKSk7Ci0JZnJhZ19pbmZvLT50eXBlID0gUEFDS0VUOwotCWZyYWdfaW5mby0+ZG1hX2xlbiA9IHNrYi0+bGVuIC0gaGRyX2luZm8tPmRtYV9sZW47Ci0JZnJhZ19pbmZvLT5tYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhICsgaGRyX2luZm8tPmRtYV9sZW4sCi0JCQkJCSAgICBmcmFnX2luZm8tPmRtYV9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWRvIHsKLQkJdTMyIGZyYWcgPSAwOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoRklSU1RfRlJBRywgRklSU1RfRlJBR19TSElGVCwgMCk7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhMQVNUX0ZSQUcsIExBU1RfRlJBR19TSElGVCwgMSk7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhQQUNLRVRfTEVOLCBQQUNLRVRfTEVOX1NISUZULCBza2ItPmxlbik7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhTVUJfRlJBR19MRU4sIFNVQl9GUkFHX0xFTl9TSElGVCwgZnJhZ19pbmZvLT5kbWFfbGVuKTsKLQkJZnJhZ19kZXNjLT5mcmFnID0gY3B1X3RvX2JlMzIoZnJhZyk7Ci0JfSB3aGlsZSAoMCk7Ci0JZnJhZ19kZXNjLT5kbWFfYWRkciA9IGNwdV90b19iZTMyKGZyYWdfaW5mby0+bWFwcGluZyk7Ci0KLQl0eG1fcG93ZXJfc2V0KHByaXYsIHR4aSk7Ci0KLS8qCWRvIHsgKi8KLS8qCQlpbnQgajsgKi8KLS8qCQlzaXplX3QgbGVuOyAqLwotLyoJCWxlbiA9IHNrYi0+bGVuIC0gaGRyX2luZm8tPmRtYV9sZW4gKyBoZHJfaW5mby0+aGRyX2xlbjsgICovCi0vKgkJaWYgKGxlbiA9PSA2MTQpIHsgKi8KLS8qCQkJYWdueF9wcmludF9kZXNjKGhkcl9kZXNjKTsgKi8KLS8qCQkJYWdueF9wcmludF9kZXNjKGZyYWdfZGVzYyk7ICovCi0vKgkJCWFnbnhfcHJpbnRfdHhfaGRyKChzdHJ1Y3QgYWdueF9oZHIgKilza2ItPmRhdGEpOyAqLwotLyoJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKgkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KLS8qCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIExPQ0FMX1NUQUlELCBqKTsgKi8KLS8qCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgQlNTSURfU1RBSUQpOyAqLwotLyoJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7ICovCi0vKgkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0vKgkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgaik7ICovCi0vKgkJCX0gKi8KLS8qCX0gd2hpbGUgKDApOyAqLwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JLyogRklYTUUgdWdseSBjb2RlICovCi0JLyogVHJpZ2dlciBUWE0gKi8KLQlkbyB7Ci0JCXUzMiByZWc7Ci0JCXJlZyA9IChpb3JlYWQzMihwcml2LT5jdGwgKyBBR05YX0NJUl9UWE1DVEwpKTsKLQkJcmVnIHw9IDB4ODsKLQkJaW93cml0ZTMyKChyZWcpLCBwcml2LT5jdGwgKyBBR05YX0NJUl9UWE1DVEwpOwotCX0gd2hpbGUgKDApOwotCi0JLyogVHJpZ2dlciBUWEQgKi8KLQlkbyB7Ci0JCXUzMiByZWc7Ci0JCXJlZyA9IChpb3JlYWQzMihwcml2LT5jdGwgKyBBR05YX0NJUl9UWERDVEwpKTsKLQkJcmVnIHw9IDB4ODsKLQkJaW93cml0ZTMyKChyZWcpLCBwcml2LT5jdGwgKyBBR05YX0NJUl9UWERDVEwpOwotCX0gd2hpbGUgKDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBfYWdueF90eChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXUxNiBmY3RsOwotCi0JaWYgKHR4X3BhY2tldF9jaGVjayhza2IpKQotCQlyZXR1cm4gMDsKLQotLyoJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFnbng6IFRYX1BBQ0tFVDogIiwgRFVNUF9QUkVGSVhfTk9ORSwgKi8KLS8qCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuKTsgKi8KLQotCWZjdGwgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilza2ItPmRhdGEpKTsKLQotCWlmICgoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkKLQkJcmV0dXJuIF9fYWdueF90eChwcml2LCBza2IsICZwcml2LT50eGQpOwotCWVsc2UKLQkJcmV0dXJuIF9fYWdueF90eChwcml2LCBza2IsICZwcml2LT50eG0pOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2FjNDE1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0jaWZuZGVmIEFHTlhfWE1JVF9IXwotI2RlZmluZSBBR05YX1hNSVRfSF8KLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi1zdHJ1Y3QgYWdueF9wcml2OwotCi1zdGF0aWMgaW5saW5lIHUzMiBhZ254X3NldF9iaXRzKHUzMiBtYXNrLCB1OCBzaGlmdCwgdTMyIHZhbHVlKQotewotCXJldHVybiAodmFsdWUgPDwgc2hpZnQpICYgbWFzazsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgYWdueF9nZXRfYml0cyh1MzIgbWFzaywgdTggc2hpZnQsIHUzMiB2YWx1ZSkKLXsKLQlyZXR1cm4gKHZhbHVlICYgbWFzaykgPj4gc2hpZnQ7Ci19Ci0KLQotc3RydWN0IGFnbnhfcnggewotCV9fYmUxNiByeF9wYWNrZXRfZHVyYXRpb247IC8qICBSWCBQYWNrZXQgRHVyYXRpb24gKi8KLQlfX2JlMTYgcmVwbGF5X2NudDsJLyogUmVwbGF5IENvdW50ICovCi19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotCi1zdHJ1Y3QgYWdueF90eCB7Ci0JdTggbG9uZ19yZXRyeV9saW1pdDsgLyogTG9uZyBSZXRyeSBMaW1pdCAqLwotCXU4IHNob3J0X3JldHJ5X2xpbWl0OyAvKiBTaG9ydCBSZXRyeSBMaW1pdCAqLwotCXU4IGxvbmdfcmV0cnlfY250OwkvKiBMb25nIFJldHJ5IENvdW50ICovCi0JdTggc2hvcnRfcmV0cnlfY250OyAvKiBTaG9ydCBSZXRyeSBDb3VudCAqLwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLQotLyogQ29weSBmcm9tIGJjbTQzeHggKi8KLSNkZWZpbmUgUDREX0JZVDNTKG1hZ2ljLCBucl9ieXRlcykgICAgICB1OCBfX3A0ZGRpbmcjI21hZ2ljW25yX2J5dGVzXQotI2RlZmluZSBQNERfQllURVMobGluZSwgbnJfYnl0ZXMpICAgICAgIFA0RF9CWVQzUyhsaW5lLCBucl9ieXRlcykKLSNkZWZpbmUgUEFEX0JZVEVTKG5yX2J5dGVzKSAgICAgICAgICAgICBQNERfQllURVMoX19MSU5FX18sIG5yX2J5dGVzKQotCi0jZGVmaW5lIFA0RF9CSVQzUyhtYWdpYywgbnJfYml0cykgICAgICAgX19iZTMyIF9fcGFkZGluZyMjbWFnaWM6bnJfYml0cwotI2RlZmluZSBQNERfQklUUyhsaW5lLCBucl9iaXRzKSAgICAgICAgIFA0RF9CSVQzUyhsaW5lLCBucl9iaXRzKQotI2RlZmluZSBQQURfQklUUyhucl9iaXRzKQkgICAgICAgIFA0RF9CSVRTKF9fTElORV9fLCBucl9iaXRzKQotCi0KLXN0cnVjdCBhZ254X2hkciB7Ci0JX19iZTMyIHJlZzA7Ci0jZGVmaW5lIFJUUwkJICAgICAgICAweDgwMDAwMDAwIC8qIFJUUyAqLwotI2RlZmluZSBSVFNfU0hJRlQJCTMxCi0jZGVmaW5lIE1VTFRJQ0FTVAkgICAgICAgIDB4NDAwMDAwMDAgLyogbXVsdGljYXN0ICovCi0jZGVmaW5lIE1VTFRJQ0FTVF9TSElGVAkJMzAKLSNkZWZpbmUgQUNLCQkJMHgzMDAwMDAwMCAvKiBBQ0sgKi8KLSNkZWZpbmUgQUNLX1NISUZUCQkyOAotI2RlZmluZSBUTQkJCTB4MDgwMDAwMDAgLyogVE0gKi8KLSNkZWZpbmUgVE1fU0hJRlQJCTI3Ci0jZGVmaW5lIFJFTEFZCQkJMHgwNDAwMDAwMCAvKiBSZWxheSAqLwotI2RlZmluZSBSRUxBWV9TSElGVAkJMjYKLS8qIAlQQURfQklUUyg0KTsgKi8KLSNkZWZpbmUgUkVWSVNFRF9GQ1MJCTB4MDAzODAwMDAgLyogcmV2aXNlZCBGQ1MgKi8KLSNkZWZpbmUgUkVWSVNFRF9GQ1NfU0hJRlQJMTkKLSNkZWZpbmUgTkVYVF9CVUZGRVJfQUREUgkweDAwMDdGRkZGIC8qIE5leHQgQnVmZmVyIEFkZHJlc3MgKi8KLSNkZWZpbmUgTkVYVF9CVUZGRVJfQUREUl9TSElGVAkwCi0KLQlfX2JlMzIgcmVnMTsKLSNkZWZpbmUgTUFDX0hEUl9MRU4JCTB4RkMwMDAwMDAgLyogTUFDIEhlYWRlciBMZW5ndGggICovCi0jZGVmaW5lIE1BQ19IRFJfTEVOX1NISUZUCTI2Ci0jZGVmaW5lIERVUkFUSU9OX09WRVJJREUJMHgwMjAwMDAwMCAvKiBEdXJhdGlvbiBPdmVycmlkZSAqLwotI2RlZmluZSBEVVJBVElPTl9PVkVSSURFX1NISUZUCTI1Ci0jZGVmaW5lIFBIWV9IRFJfT1ZFUklERQkJMHgwMTAwMDAwMCAvKiBQSFkgSGVhZGVyIE92ZXJyaWRlICovCi0jZGVmaW5lIFBIWV9IRFJfT1ZFUklERV9TSElGVAkyNAotI2RlZmluZSBDUkNfRkFJTAkJMHgwMDgwMDAwMCAvKiBDUkMgZmFpbCAqLwotI2RlZmluZSBDUkNfRkFJTF9TSElGVAkJMjMKLS8qCVBBRF9CSVRTKDEpOyAqLwotI2RlZmluZSBTRVFVRU5DRV9OVU1CRVIJCTB4MDAyMDAwMDAgLyogU2VxdWVuY2UgTnVtYmVyICovCi0jZGVmaW5lIFNFUVVFTkNFX05VTUJFUl9TSElGVAkyMQotLyoJUEFEX0JJVFMoMik7ICovCi0jZGVmaW5lIEJVRkZfSEVBRF9BRERSCQkweDAwMDdGRkZGIC8qIEJ1ZmZlciBIZWFkIEFkZHJlc3MgKi8KLSNkZWZpbmUgQlVGRl9IRUFEX0FERFJfU0hJRlQJMAotCi0JX19iZTMyIHJlZzI7Ci0jZGVmaW5lIFBEVV9DT1VOVAkJMHhGQzAwMDAwMCAvKiBQRFUgQ291bnQgKi8KLSNkZWZpbmUgUERVX0NPVU5UX1NISUZUCQkyNgotLyogCVBBRF9CSVRTKDMpOyAqLwotI2RlZmluZSBXRVBfS0VZCQkJMHgwMDYwMDAwMCAvKiBXRVAgS2V5ICMgKi8KLSNkZWZpbmUgV0VQX0tFWV9TSElGVAkJMjEKLSNkZWZpbmUgVVNFU19XRVBfS0VZCQkweDAwMTAwMDAwIC8qIFVzZXMgV0VQIEtleSAqLwotI2RlZmluZSBVU0VTX1dFUF9LRVlfU0hJRlQJMjAKLSNkZWZpbmUgS0VFUF9BTElWRQkJMHgwMDA4MDAwMCAvKiBLZWVwIGFsaXZlICovCi0jZGVmaW5lIEtFRVBfQUxJVkVfU0hJRlQJMTkKLSNkZWZpbmUgQlVGRl9UQUlMX0FERFIJCTB4MDAwN0ZGRkYgLyogQnVmZmVyIFRhaWwgQWRkcmVzcyAqLwotI2RlZmluZSBCVUZGX1RBSUxfQUREUl9TSElGVAkwCi0KLQlfX2JlMzIgcmVnMzsKLSNkZWZpbmUgQ1RTXzExRwkJCTB4ODAwMDAwMDAJLyogQ1RTIGluIDExZyAqLwotI2RlZmluZSBDVFNfMTFHX1NISUZUCQkzMQotI2RlZmluZSBSVFNfMTFHCQkJMHg0MDAwMDAwMAkvKiBSVFMgaW4gMTFnICovCi0jZGVmaW5lIFJUU18xMUdfU0hJRlQJCTMwCi0vKiBQQURfQklUUygyKTsgKi8KLSNkZWZpbmUgRlJBR19TSVpFCQkweDBGRkYwMDAwCS8qIGZyYWdtZW50IHNpemUgKi8KLSNkZWZpbmUgRlJBR19TSVpFX1NISUZUCQkxNgotI2RlZmluZSBQQVlMT0FEX0xFTgkJMHgwMDAwRkZGMAkvKiBwYXlsb2FkIGxlbmd0aCAqLwotI2RlZmluZSBQQVlMT0FEX0xFTl9TSElGVAk0Ci0jZGVmaW5lIEZSQUdfTlVNCQkweDAwMDAwMDBGCS8qIG51bWJlciBvZiBmcmFncyAqLwotI2RlZmluZSBGUkFHX05VTV9TSElGVAkJMAotCi0JX19iZTMyIHJlZzQ7Ci0vKiAJUEFEX0JJVFMoNCk7ICovCi0jZGVmaW5lIFJFTEFZX1NUQUlECQkweDBGRkYwMDAwIC8qIHJlbGF5U3RhbGQgKi8KLSNkZWZpbmUgUkVMQVlfU1RBSURfU0hJRlQJMTYKLSNkZWZpbmUgU1RBVElPTl9JRAkJMHgwMDAwRkZGMCAvKiBTdGF0aW9uIElEICovCi0jZGVmaW5lIFNUQVRJT05fSURfU0hJRlQJNAotI2RlZmluZSBXT1JLUVVFVUVfSUQJCTB4MDAwMDAwMEYgLyogV29ya3F1ZXVlIElEICovCi0jZGVmaW5lIFdPUktRVUVVRV9JRF9TSElGVAkwCi0KLQkvKiBGSVhNRSB0aGlzIHJlZ2lzdGVyIG1heWJlIGlzIExFPyAqLwotCV9fYmUzMiByZWc1OwotLyogCVBBRF9CSVRTKDQpOyAqLwotI2RlZmluZSBST1VURV9IT1NUCQkweDBGMDAwMDAwCi0jZGVmaW5lIFJPVVRFX0hPU1RfU0hJRlQJMjQKLSNkZWZpbmUgUk9VVEVfQ0FSRF9DUFUJCTB4MDBGMDAwMDAKLSNkZWZpbmUgUk9VVEVfQ0FSRF9DUFVfU0hJRlQJMjAKLSNkZWZpbmUgUk9VVEVfRU5DUllQVElPTgkweDAwMEYwMDAwCi0jZGVmaW5lIFJPVVRFX0VOQ1JZUFRJT05fU0hJRlQJMTYKLSNkZWZpbmUgUk9VVEVfVFgJCTB4MDAwMEYwMDAKLSNkZWZpbmUgUk9VVEVfVFhfU0hJRlQJCTEyCi0jZGVmaW5lIFJPVVRFX1JYMQkJMHgwMDAwMEYwMAotI2RlZmluZSBST1VURV9SWDFfU0hJRlQJCTgKLSNkZWZpbmUgUk9VVEVfUlgyCQkweDAwMDAwMEYwCi0jZGVmaW5lIFJPVVRFX1JYMl9TSElGVAkJNAotI2RlZmluZSBST1VURV9DT01QUkVTU0lPTgkweDAwMDAwMDBGCi0jZGVmaW5lIFJPVVRFX0NPTVBSRVNTSU9OX1NISUZUIDAKLQotCV9fYmUzMiBfMTFnMDsJCQkvKiAxMWcgKi8KLQlfX2JlMzIgXzExZzE7CQkJLyogMTFnICovCi0JX19iZTMyIF8xMWIwOwkJCS8qIDExYiAqLwotCV9fYmUzMiBfMTFiMTsJCQkvKiAxMWIgKi8KLQl1OCBtYWNfaGRyWzMyXTsJCQkvKiBNQUMgaGVhZGVyICovCi0KLQlfX2JlMTYgcnRzX2R1cmF0aW9uOwkJLyogUlRTIGR1cmF0aW9uICovCi0JX19iZTE2IGxhc3RfZHVyYXRpb247CQkvKiBMYXN0IGR1cmF0aW9uICovCi0JX19iZTE2IHNlY19sYXN0X2R1cmF0aW9uOwkvKiBTZWNvbmQgdG8gTGFzdCBkdXJhdGlvbiAqLwotCV9fYmUxNiBvdGhlcl9kdXJhdGlvbjsJCS8qIE90aGVyIGR1cmF0aW9uICovCi0JX19iZTE2IHR4X2xhc3RfZHVyYXRpb247CS8qIFRYIExhc3QgZHVyYXRpb24gKi8KLQlfX2JlMTYgdHhfb3RoZXJfZHVyYXRpb247CS8qIFRYIE90aGVyIER1cmF0aW9uICovCi0JX19iZTE2IGxhc3RfMTFnX2xlbjsJCS8qIExlbmd0aCBvZiBsYXN0IDExZyAqLwotCV9fYmUxNiBvdGhlcl8xMWdfbGVuOwkJLyogTGVuZ2h0IG9mIG90aGVyIDExZyAqLwotCi0JX19iZTE2IGxhc3RfMTFiX2xlbjsJCS8qIExlbmd0aCBvZiBsYXN0IDExYiAqLwotCV9fYmUxNiBvdGhlcl8xMWJfbGVuOwkJLyogTGVuZ2h0IG9mIG90aGVyIDExYiAqLwotCi0KLQlfX2JlMTYgcmVnNjsKLSNkZWZpbmUgTUJGCQkJMHhGMDAwIC8qIG1iZiAqLwotI2RlZmluZSBNQkZfU0hJRlQJCTEyCi0jZGVmaW5lIFJTVkQ0CQkJMHgwRkZGIC8qIHJzdmQ0ICovCi0jZGVmaW5lIFJTVkQ0X1NISUZUCQkwCi0KLQlfX2JlMTYgcnhfZnJhZ19zdGF0OwkvKiBSWCBmcmFnbWVudGF0aW9uIHN0YXR1cyAqLwotCi0JX19iZTMyIHRpbWVfc3RhbXA7CS8qIFRpbWVTdGFtcCAqLwotCV9fYmUzMiBwaHlfc3RhdHNfaGk7CS8qIFBIWSBzdGF0cyBoaSAqLwotCV9fYmUzMiBwaHlfc3RhdHNfbG87CS8qIFBIWSBzdGF0cyBsbyAqLwotCV9fYmUzMiBtaWNfa2V5MDsJLyogTUlDIGtleSAwICovCi0JX19iZTMyIG1pY19rZXkxOwkvKiBNSUMga2V5IDEgKi8KLQotCXVuaW9uIHsJCQkvKiBSWC9UWCBVbmlvbiAqLwotCQlzdHJ1Y3QgYWdueF9yeCByeDsKLQkJc3RydWN0IGFnbnhfdHggdHg7Ci0JfTsKLQotCXU4IHJ4X2NoYW5uZWw7CQkvKiBSZWNpZXZlIENoYW5uZWwgKi8KLQlQQURfQllURVMoMyk7Ci0KLQl1OCByZXNlcnZlZFs0XTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0KLXN0cnVjdCBhZ254X2Rlc2MgewotI2RlZmluZSBQQUNLRVRfTEVOCQkweEZGRjAwMDAwCi0jZGVmaW5lIFBBQ0tFVF9MRU5fU0hJRlQJMjAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBGSVJTVF9QQUNLRVRfTUFTSwkweDAwMDgwMDAwCi0jZGVmaW5lIEZJUlNUX1BBQ0tFVF9NQVNLX1NISUZUCTE5Ci0jZGVmaW5lIEZJUlNUX1JFU0VSVjIJCTB4MDAwNDAwMDAKLSNkZWZpbmUgRklSU1RfUkVTRVJWMl9TSElGVAkxOAotI2RlZmluZSBGSVJTVF9US0lQX0VSUk9SCTB4MDAwMjAwMDAKLSNkZWZpbmUgRklSU1RfVEtJUF9FUlJPUl9TSElGVAkxNwotI2RlZmluZSBGSVJTVF9US0lQX1BBQ0tFVAkweDAwMDEwMDAwCi0jZGVmaW5lIEZJUlNUX1RLSVBfUEFDS0VUX1NISUZUCTE2Ci0jZGVmaW5lIEZJUlNUX1JFU0VSVjEJCTB4MDAwMEYwMDAKLSNkZWZpbmUgRklSU1RfUkVTRVJWMV9TSElGVAkxMgotI2RlZmluZSBGSVJTVF9GUkFHX0xFTgkJMHgwMDAwMEZGOAotI2RlZmluZSBGSVJTVF9GUkFHX0xFTl9TSElGVAkzCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgU1VCX1JFU0VSVjIJCTB4MDAwYzAwMDAKLSNkZWZpbmUgU1VCX1JFU0VSVjJfU0hJRlQJMTgKLSNkZWZpbmUgU1VCX1RLSVBfRVJST1IJCTB4MDAwMjAwMDAKLSNkZWZpbmUgU1VCX1RLSVBfRVJST1JfU0hJRlQJMTcKLSNkZWZpbmUgU1VCX1RLSVBfUEFDS0VUCQkweDAwMDEwMDAwCi0jZGVmaW5lIFNVQl9US0lQX1BBQ0tFVF9TSElGVAkxNgotI2RlZmluZSBTVUJfUkVTRVJWMQkJMHgwMDAwODAwMAotI2RlZmluZSBTVUJfUkVTRVJWMV9TSElGVAkxNQotI2RlZmluZSBTVUJfRlJBR19MRU4JCTB4MDAwMDdGRjgKLSNkZWZpbmUgU1VCX0ZSQUdfTEVOX1NISUZUCTMKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBGSVJTVF9GUkFHCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEZJUlNUX0ZSQUdfU0hJRlQJMgotI2RlZmluZSBMQVNUX0ZSQUcJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTEFTVF9GUkFHX1NISUZUCQkxCi0jZGVmaW5lIE9XTkVSCQkJMHgwMDAwMDAwMQotI2RlZmluZSBPV05FUl9TSElGVAkJMAotCV9fYmUzMiBmcmFnOwotCV9fYmUzMiBkbWFfYWRkcjsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi1lbnVtIHtIRUFERVIsIFBBQ0tFVH07Ci0KLXN0cnVjdCBhZ254X2luZm8gewotICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotICAgICAgICBkbWFfYWRkcl90IG1hcHBpbmc7Ci0JdTMyIGRtYV9sZW47CQkvKiBkbWEgYnVmZmVyIGxlbiAgKi8KLQkvKiBCZWxvdyBmaWVsZHMgb25seSB1c2Z1bCBmb3IgdHggKi8KLQl1MzIgaGRyX2xlbjsJCS8qIGllZWU4MDIxMSBoZWFkZXIgbGVuZ3RoICovCi0JdW5zaWduZWQgaW50IHR5cGU7Ci0gICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpOwotICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHI7Ci19OwotCi0KLXN0cnVjdCBhZ254X3JpbmcgewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2M7Ci0JZG1hX2FkZHJfdCBkbWE7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbzsKLQkvKiBXaWxsIGxlYWQgdG8gb3ZlcmZsb3cgd2hlbiBzZW50IHBhY2tldCBudW1iZXIgZW5vdWdoPyAqLwotCXVuc2lnbmVkIGludCBpZHg7Ci0JdW5zaWduZWQgaW50IGlkeF9zZW50OwkJLyogb25seSB1c2Z1bCBmb3IgdHhkIGFuZCB0eG0gKi8KLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLX07Ci0KLSNkZWZpbmUgQUdOWF9SWF9SSU5HX1NJWkUJMTI4Ci0jZGVmaW5lIEFHTlhfVFhEX1JJTkdfU0laRQkyNTYKLSNkZWZpbmUgQUdOWF9UWE1fUklOR19TSVpFCTEyOAotCi12b2lkIGRpc2FibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBlbmFibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotaW50IGZpbGxfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIHVuZmlsbF9yaW5ncyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgaGFuZGxlX3J4X2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgaGFuZGxlX3R4ZF9pcnEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGhhbmRsZV90eG1faXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBoYW5kbGVfb3RoZXJfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotaW50IF9hZ254X3R4KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpOwotI2VuZGlmIC8qIEFHTlhfWE1JVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcKaW5kZXggMjQ3MTk0OS4uZWI2NzU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCiBjb25maWcgQU5EUk9JRAogCWJvb2wgIkFuZHJvaWQgRHJpdmVycyIKKwlkZXBlbmRzIG9uIEJST0tFTgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB2YXJpb3VzIGRyaXZlcnMgbmVlZGVkIG9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCmluZGV4IDk0YzVkMjcuLmNkYTI2YmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGIzZGZnX25idWYgPSAyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKaW5kZXggYWY3MjNjYi4uZDYzYzg4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIGNvbmZpZyBDT01FREkKIAl0cmlzdGF0ZSAiRGF0YSBhY3F1aXNpdGlvbiBzdXBwb3J0IChjb21lZGkpIgogCWRlZmF1bHQgTgotCWRlcGVuZHMgb24gbQorCWRlcGVuZHMgb24gbSAmJiAoUENJIHx8IFBDTUNJQSB8fCBQQ0NBUkQgfHwgVVNCKQogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGEgd2lkZSByYW5nZSBvZiBkYXRhIGFjcXVpc2l0aW9uIGRldmljZXMKIAkgIGZvciBMaW51eC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYwppbmRleCBmNTRiYjliLi5hYWFkNzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCkBAIC0yMzM3LDcgKzIzMzcsNyBAQAogCX0KIAogCURQUklOVEsoImNvbWVkaSVpIHN1YmQgJWQgYnVmZmVyIHJlc2l6ZWQgdG8gJWkgYnl0ZXNcbiIsCi0JCWRldi0+bWlub3IsIHMgLSBkZXYtPnN1YmRldmljZXMsIGFzeW5jLT5wcmVhbGxvY19idWZzeik7CisJCWRldi0+bWlub3IsIChpbnQpKHMgLSBkZXYtPnN1YmRldmljZXMpLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCmluZGV4IDEyZDEyYjQuLjgwYzBkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCkBAIC03NDQsNyArNzQ0LDcgQEAKIAogCS8qIEluaXRpYWxpemUgdGhlIHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlICovCiAJLyogSW50ZXJydXB0IHNldHVwICovCi0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCmluZGV4IDRkMTBiYzMuLjA5ZTZlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKQEAgLTUzLDcgKzUzLDggQEAKICAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgogICovCiBzdHJ1Y3QgcGNpZGlvX2JvYXJkIHsKLQljb25zdCBjaGFyICpuYW1lOwkvKiAgYW5tZSBvZiB0aGUgYm9hcmQgKi8KKwljb25zdCBjaGFyICpuYW1lOwkvKiAgbmFtZSBvZiB0aGUgYm9hcmQgKi8KKwlpbnQgZGV2X2lkOwogCWludCBuXzgyNTU7CQkvKiAgbnVtYmVyIG9mIDgyNTUgY2hpcHMgb24gYm9hcmQgKi8KIAogCS8qICBpbmRpY2VzIG9mIGJhc2UgYWRkcmVzcyByZWdpb25zICovCkBAIC02NCwxOCArNjUsMjEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpZGlvX2JvYXJkIHBjaWRpb19ib2FyZHNbXSA9IHsKIAl7CiAJIC5uYW1lID0gInBjaS1kaW8yNCIsCisJIC5kZXZfaWQgPSAweDAwMjgsCiAJIC5uXzgyNTUgPSAxLAogCSAucGNpY29udHJvbGVyX2JhZHJpbmRleCA9IDEsCiAJIC5kaW9yZWdzX2JhZHJpbmRleCA9IDIsCiAJIH0sCiAJewogCSAubmFtZSA9ICJwY2ktZGlvMjRoIiwKKwkgLmRldl9pZCA9IDB4MDAxNCwKIAkgLm5fODI1NSA9IDEsCiAJIC5wY2ljb250cm9sZXJfYmFkcmluZGV4ID0gMSwKIAkgLmRpb3JlZ3NfYmFkcmluZGV4ID0gMiwKIAkgfSwKIAl7CiAJIC5uYW1lID0gInBjaS1kaW80OGgiLAorCSAuZGV2X2lkID0gMHgwMDBiLAogCSAubl84MjU1ID0gMiwKIAkgLnBjaWNvbnRyb2xlcl9iYWRyaW5kZXggPSAwLAogCSAuZGlvcmVnc19iYWRyaW5kZXggPSAxLApAQCAtMjA2LDcgKzIxMCw3IEBACiAJCQljb250aW51ZTsKIAkJLyogIGxvb3AgdGhyb3VnaCBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgKi8KIAkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVJSQVlfU0laRShwY2lkaW9fYm9hcmRzKTsgaW5kZXgrKykgewotCQkJaWYgKHBjaWRpb19wY2lfdGFibGVbaW5kZXhdLmRldmljZSAhPSBwY2lkZXYtPmRldmljZSkKKwkJCWlmIChwY2lkaW9fYm9hcmRzW2luZGV4XS5kZXZfaWQgIT0gcGNpZGV2LT5kZXZpY2UpCiAJCQkJY29udGludWU7CiAKIAkJCS8qICB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCmluZGV4IDE0YmYyOWIuLjBkMmMyZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYwpAQCAtNTE1LDYgKzUxNSw3IEBACiB7CiAJc3RydWN0IHBvbGxfZGVsYXlfdCByZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMTAwMCwgMjAwMCk7CiAJc3RydWN0IGpyM19wY2lfc3ViZGV2X3ByaXZhdGUgKnAgPSBzLT5wcml2YXRlOworCWludCBpOwogCiAJaWYgKHApIHsKIAkJdm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsID0gcC0+Y2hhbm5lbDsKQEAgLTU3MCwxOCArNTcxLDExIEBACiAJCQkJCSAgICAgICBwLT5zZXJpYWxfbm8pOwogCiAJCQkJCS8qICBUcmFuc2Zvcm1hdGlvbiBhbGwgemVyb3MgKi8KLQkJCQkJdHJhbnNmLmxpbmtbMF0ubGlua190eXBlID0KLQkJCQkJICAgIChlbnVtIGxpbmtfdHlwZXMpMDsKLQkJCQkJdHJhbnNmLmxpbmtbMF0ubGlua19hbW91bnQgPSAwOwotCQkJCQl0cmFuc2YubGlua1sxXS5saW5rX3R5cGUgPQotCQkJCQkgICAgKGVudW0gbGlua190eXBlcykwOwotCQkJCQl0cmFuc2YubGlua1sxXS5saW5rX2Ftb3VudCA9IDA7Ci0JCQkJCXRyYW5zZi5saW5rWzJdLmxpbmtfdHlwZSA9Ci0JCQkJCSAgICAoZW51bSBsaW5rX3R5cGVzKTA7Ci0JCQkJCXRyYW5zZi5saW5rWzJdLmxpbmtfYW1vdW50ID0gMDsKLQkJCQkJdHJhbnNmLmxpbmtbM10ubGlua190eXBlID0KLQkJCQkJICAgIChlbnVtIGxpbmtfdHlwZXMpMDsKLQkJCQkJdHJhbnNmLmxpbmtbM10ubGlua19hbW91bnQgPSAwOworCQkJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0cmFuc2YubGluayk7IGkrKykgeworCQkJCQkJdHJhbnNmLmxpbmtbaV0ubGlua190eXBlID0KKwkJCQkJCQkoZW51bSBsaW5rX3R5cGVzKTA7CisJCQkJCQl0cmFuc2YubGlua1tpXS5saW5rX2Ftb3VudCA9IDA7CisJCQkJCX0KIAogCQkJCQlzZXRfdHJhbnNmb3JtcyhjaGFubmVsLCB0cmFuc2YsIDApOwogCQkJCQl1c2VfdHJhbnNmb3JtKGNoYW5uZWwsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCmluZGV4IDJjZGE3YWQuLjgwZTE5MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKQEAgLTUxLDYgKzUxLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgogCiAjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKaW5kZXggNmIxMThjMS4uYmJmNzVlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCkBAIC00MTgsMTUgKzQxOCwxNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAliYXNlX2JpdGZpZWxkX2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIAlmb3IgKGogPSAwOyBqIDwgbWF4X3BvcnRzX3Blcl9iaXRmaWVsZDsgKytqKSB7CisJCWNvbnN0IHVuc2lnbmVkIHBvcnRfb2Zmc2V0ID0gbmlfNjV4eF9wb3J0X2J5X2NoYW5uZWwoYmFzZV9iaXRmaWVsZF9jaGFubmVsKSArIGo7CiAJCWNvbnN0IHVuc2lnbmVkIHBvcnQgPQotCQkgICAgc3ByaXZhdGUocyktPmJhc2VfcG9ydCArCi0JCSAgICBuaV82NXh4X3BvcnRfYnlfY2hhbm5lbChiYXNlX2JpdGZpZWxkX2NoYW5uZWwpICsgajsKKwkJICAgIHNwcml2YXRlKHMpLT5iYXNlX3BvcnQgKyBwb3J0X29mZnNldDsKIAkJdW5zaWduZWQgYmFzZV9wb3J0X2NoYW5uZWw7CiAJCXVuc2lnbmVkIHBvcnRfbWFzaywgcG9ydF9kYXRhLCBwb3J0X3JlYWRfYml0czsKIAkJaW50IGJpdHNoaWZ0OwogCQlpZiAocG9ydCA+PSBuaV82NXh4X3RvdGFsX251bV9wb3J0cyhib2FyZChkZXYpKSkKIAkJCWJyZWFrOwotCQliYXNlX3BvcnRfY2hhbm5lbCA9IHBvcnQgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OworCQliYXNlX3BvcnRfY2hhbm5lbCA9IHBvcnRfb2Zmc2V0ICogbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydDsKIAkJcG9ydF9tYXNrID0gZGF0YVswXTsKIAkJcG9ydF9kYXRhID0gZGF0YVsxXTsKIAkJYml0c2hpZnQgPSBiYXNlX3BvcnRfY2hhbm5lbCAtIGJhc2VfYml0ZmllbGRfY2hhbm5lbDsKQEAgLTQ1Nyw2ICs0NTcsMTIgQEAKIAkJcG9ydF9yZWFkX2JpdHMgPQogCQkgICAgcmVhZGIocHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfRGF0YShwb3J0KSk7CiAvKiBwcmludGsoInJlYWQgMHgleCBmcm9tIHBvcnQgJWlcbiIsIHBvcnRfcmVhZF9iaXRzLCBwb3J0KTsgKi8KKwkJaWYgKHMtPnR5cGUgPT0gQ09NRURJX1NVQkRfRE8gJiYgYm9hcmQoZGV2KS0+aW52ZXJ0X291dHB1dHMpIHsKKwkJCS8qIE91dHB1dHMgaW52ZXJ0ZWQsIHNvIGludmVydCB2YWx1ZSByZWFkIGJhY2sgZnJvbQorCQkJICogRE8gc3ViZGV2aWNlLiAgKERvZXMgbm90IGFwcGx5IHRvIGJvYXJkcyB3aXRoIERJTworCQkJICogc3ViZGV2aWNlLikgKi8KKwkJCXBvcnRfcmVhZF9iaXRzIF49IDB4RkY7CisJCX0KIAkJaWYgKGJpdHNoaWZ0ID4gMCkgewogCQkJcG9ydF9yZWFkX2JpdHMgPDw9IGJpdHNoaWZ0OwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKaW5kZXggNmE3Nzk3Ni4uZWMzMWEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKaW5kZXggYjA2ZTgxYy4uMDcwMGE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV9kaW8yNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAJbGluay0+cHJpdiA9IGxvY2FsOwogCiAJLyogSW50ZXJydXB0IHNldHVwICovCi0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYwppbmRleCA1N2FlY2ZhLi5hMzA1M2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJbGluay0+cHJpdiA9IGxvY2FsOwogCiAJLyogSW50ZXJydXB0IHNldHVwICovCi0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfRk9SQ0VEX1BVTFNFOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0ZPUkNFRF9QVUxTRTsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfSU5GTzJfVkFMSUQgfCBJUlFfUFVMU0VfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwppbmRleCBlM2ZmYjA2Li43NTNlZTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKQEAgLTYyLDYgKzYyLDcgQEAKIC8qICNkZWZpbmUgREVCVUdfU1RBVFVTX0IgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiODI1NS5oIgogI2luY2x1ZGUgIm1pdGUuaCIKICNpbmNsdWRlICJjb21lZGlfZmMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYwppbmRleCBiNzMyMjk2Li45YWVmODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCkBAIC0yNzMsNyArMjczLDcgQEAKIHsKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKIAlsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCmluZGV4IDUyYjJlY2EuLmQ1NDQ2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKQEAgLTcwLDYgKzcwLDcgQEAKIC8qICNkZWZpbmUgREVCVUdfRkxBR1MgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKICNpbmNsdWRlICJtaXRlLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKaW5kZXggMTlkODc1NS4uMjRjOGI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwpAQCAtMjksNyArMjksNyBAQAogICBQQ0ktTUlPLTE2WEUtMTAsIFBYSS02MDMwRSwgUENJLU1JTy0xNkUtMSwgUENJLU1JTy0xNkUtNCwgUENJLTYwMTQsIFBDSS02MDQwRSwKICAgUFhJLTYwNDBFLCBQQ0ktNjAzMEUsIFBDSS02MDMxRSwgUENJLTYwMzJFLCBQQ0ktNjAzM0UsIFBDSS02MDcxRSwgUENJLTYwMjNFLAogICBQQ0ktNjAyNEUsIFBDSS02MDI1RSwgUFhJLTYwMjVFLCBQQ0ktNjAzNEUsIFBDSS02MDM1RSwgUENJLTYwNTJFLAotICBQQ0ktNjExMCwgUENJLTYxMTEsIFBDSS02MjIwLCBQQ0ktNjIyMSwgUENJLTYyMjQsIFBYSS02MjI0LCBQQ0ktNjIyNSwKKyAgUENJLTYxMTAsIFBDSS02MTExLCBQQ0ktNjIyMCwgUENJLTYyMjEsIFBDSS02MjI0LCBQWEktNjIyNCwgUENJLTYyMjUsIFBYSS02MjI1LAogICBQQ0ktNjIyOSwgUENJLTYyNTAsIFBDSS02MjUxLCBQQ0llLTYyNTEsIFBDSS02MjU0LCBQQ0ktNjI1OSwgUENJZS02MjU5LAogICBQQ0ktNjI4MCwgUENJLTYyODEsIFBYSS02MjgxLCBQQ0ktNjI4NCwgUENJLTYyODksCiAgIFBDSS02NzExLCBQWEktNjcxMSwgUENJLTY3MTMsIFBYSS02NzEzLApAQCAtMTc5LDYgKzE3OSw3IEBACiAJUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwZjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCB7CiAJUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxMGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCB7CiAJUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxNmMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCB7CisJUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxNmQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCB7CiAJUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxN2YsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCB7CiAJUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxYmMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCB7CiAJUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxN2QsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCB7CkBAIC05NTMsNiArOTU0LDI1IEBACiAJIC5oYXNfODI1NSA9IDAsCiAJIH0sCiAJeworCSAuZGV2aWNlX2lkID0gMHg3MTZkLAorCSAubmFtZSA9ICJweGktNjIyNSIsCisJIC5uX2FkY2hhbiA9IDgwLAorCSAuYWRiaXRzID0gMTYsCisJIC5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkgLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCSAuYWlfc3BlZWQgPSA0MDAwLAorCSAubl9hb2NoYW4gPSAyLAorCSAuYW9iaXRzID0gMTYsCisJIC5hb19maWZvX2RlcHRoID0gODE5MSwKKwkgLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjIyeF9hbywKKwkgLnJlZ190eXBlID0gbmlfcmVnXzYyMngsCisJIC5hb191bmlwb2xhciA9IDAsCisJIC5hb19zcGVlZCA9IDEyMDAsCisJIC5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJIC5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCSAuaGFzXzgyNTUgPSAwLAorCX0sCisJewogCSAuZGV2aWNlX2lkID0gMHg3MGFhLAogCSAubmFtZSA9ICJwY2ktNjIyOSIsCiAJIC5uX2FkY2hhbiA9IDMyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCmluZGV4IGY2M2JkYzMuLjM0NGI4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKQEAgLTEwNzksNyArMTA3OSw3IEBACiAJbGluay0+cHJpdiA9IGxvY2FsOwogCiAJLyogSW50ZXJydXB0IHNldHVwICovCi0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gZGFxcF9pbnRlcnJ1cHQ7CiAJbGluay0+aXJxLkluc3RhbmNlID0gbG9jYWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M1MjYuYwppbmRleCBiODllMWVjLi4wN2MyMWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMKQEAgLTQzLDYgKzQzLDcgQEAKIAogI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2RlZmluZSBTNTI2X1NJWkUgNjQKIApAQCAtMTEzLDYgKzExNCw3IEBACiB9OwogCiBzdHJ1Y3QgY291bnRlcl9tb2RlX3JlZ2lzdGVyX3QgeworI2lmIGRlZmluZWQgKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKIAl1bnNpZ25lZCBzaG9ydCBjb3V0U291cmNlOjE7CiAJdW5zaWduZWQgc2hvcnQgY291dFBvbGFyaXR5OjE7CiAJdW5zaWduZWQgc2hvcnQgYXV0b0xvYWRSZXNldFJjYXA6MzsKQEAgLTEyNCwxMiArMTI2LDI3IEBACiAJdW5zaWduZWQgc2hvcnQgb3V0cHV0UmVnTGF0Y2hDdHJsOjE7CiAJdW5zaWduZWQgc2hvcnQgcHJlbG9hZFJlZ1NlbDoxOwogCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkOjE7CisgI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ6MTsKKwl1bnNpZ25lZCBzaG9ydCBwcmVsb2FkUmVnU2VsOjE7CisJdW5zaWduZWQgc2hvcnQgb3V0cHV0UmVnTGF0Y2hDdHJsOjE7CisJdW5zaWduZWQgc2hvcnQgY291bnREaXJDdHJsOjE7CisJdW5zaWduZWQgc2hvcnQgY291bnREaXI6MTsKKwl1bnNpZ25lZCBzaG9ydCBjbG9ja1NvdXJjZToyOworCXVuc2lnbmVkIHNob3J0IGN0RW5hYmxlQ3RybDoyOworCXVuc2lnbmVkIHNob3J0IGh3Q3RFbmFibGVTb3VyY2U6MjsKKwl1bnNpZ25lZCBzaG9ydCBhdXRvTG9hZFJlc2V0UmNhcDozOworCXVuc2lnbmVkIHNob3J0IGNvdXRQb2xhcml0eToxOworCXVuc2lnbmVkIHNob3J0IGNvdXRTb3VyY2U6MTsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBiaXQgZmllbGQgb3JkZXIKKyNlbmRpZgogfTsKIAotdW5pb24gewordW5pb24gY21SZWcgewogCXN0cnVjdCBjb3VudGVyX21vZGVfcmVnaXN0ZXJfdCByZWc7CiAJdW5zaWduZWQgc2hvcnQgdmFsdWU7Ci19IGNtUmVnOworfTsKIAogI2RlZmluZSBNQVhfR1BDVF9DT05GSUdfREFUQSA2CiAKQEAgLTI4NSw2ICszMDIsNyBAQAogCWludCBpLCBuOwogLyogc2hvcnQgdmFsdWU7ICovCiAvKiBpbnQgc3ViZGV2X2NoYW5uZWwgPSAwOyAqLworCXVuaW9uIGNtUmVnIGNtUmVnOwogCiAJcHJpbnRrKCJjb21lZGklZDogczUyNjogIiwgZGV2LT5taW5vcik7CiAKQEAgLTM3NSw3ICszOTMsNyBAQAogCWlmICh0aGlzYm9hcmQtPmhhdmVfZGlvKSB7CiAJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CiAJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKLQkJcy0+bl9jaGFuID0gMjsKKwkJcy0+bl9jaGFuID0gODsKIAkJcy0+bWF4ZGF0YSA9IDE7CiAJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CiAJCXMtPmluc25fYml0cyA9IHM1MjZfZGlvX2luc25fYml0czsKQEAgLTQzNSwxMSArNDUzLDExIEBACiAJdWRlbGF5KDEwMDApOwogCXByaW50aygiUmVhZCBiYWNrIG1vZGUgcmVnPTB4JTA0eFxuIiwgaW53KEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgbikpKTsKIAotCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBoaWdoIHdvcmQgKi8KKwkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgaGlnaCB3b3JkICovCiAvKiB2YWx1ZSA9IChzaG9ydCkgKDB4NTUpOyAqLwogLyogb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBuKSk7ICovCiAKLQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgbG93IHdvcmQgKi8KKwkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgbG93IHdvcmQgKi8KIC8qIHZhbHVlID0gKHNob3J0KSgweGFhNTUpOyAqLwogLyogb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBuKSk7ICovCiAKQEAgLTUxNiw2ICs1MzQsNyBAQAogCWludCBzdWJkZXZfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvKiAgVW5wYWNrIGNoYW5zcGVjICovCiAJaW50IGk7CiAJc2hvcnQgdmFsdWU7CisJdW5pb24gY21SZWcgY21SZWc7CiAKIC8qIHByaW50aygiczUyNjogR1BDVF9JTlNOX0NPTkZJRzogQ29uZmlndXJpbmcgQ2hhbm5lbCAlZFxuIiwgc3ViZGV2X2NoYW5uZWwpOyAqLwogCkBAIC01NjgsMTkgKzU4Nyw4IEBACiAKICNpZiAxCiAJCS8qICBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyICovCi0JCWNtUmVnLnJlZy5jb3V0U291cmNlID0gMDsJLyogIG91dCBSQ0FQICovCi0JCWNtUmVnLnJlZy5jb3V0UG9sYXJpdHkgPSAwOwkvKiAgUG9sYXJpdHkgaW52ZXJ0ZWQgKi8KLQkJY21SZWcucmVnLmF1dG9Mb2FkUmVzZXRSY2FwID0gMDsJLyogIEF1dG8gbG9hZCBkaXNhYmxlZCAqLwotCQljbVJlZy5yZWcuaHdDdEVuYWJsZVNvdXJjZSA9IDI7CS8qICBOT1QgUkNBUCAqLwotCQljbVJlZy5yZWcuY3RFbmFibGVDdHJsID0gMTsJLyogIDE6IFNvZnR3YXJlLCAgPjEgOiBIYXJkd2FyZSAqLwotCQljbVJlZy5yZWcuY2xvY2tTb3VyY2UgPSAzOwkvKiAgeDQgKi8KLQkJY21SZWcucmVnLmNvdW50RGlyID0gMDsJLyogIHVwICovCi0JCWNtUmVnLnJlZy5jb3VudERpckN0cmwgPSAwOwkvKiAgcXVhZHJhdHVyZSAqLwotCQljbVJlZy5yZWcub3V0cHV0UmVnTGF0Y2hDdHJsID0gMDsJLyogIGxhdGNoIG9uIHJlYWQgKi8KLQkJY21SZWcucmVnLnByZWxvYWRSZWdTZWwgPSAwOwkvKiAgUFIwICovCi0JCWNtUmVnLnJlZy5yZXNlcnZlZCA9IDA7CisJCWNtUmVnLnZhbHVlID0gaW5zbi0+ZGF0YVsxXSAmIDB4RkZGRjsKIAotCQkvKiAgU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlciAqLwogLyogcHJpbnRrKCJzNTI2OiBDb3VudGVyIE1vZGUgcmVnaXN0ZXI9JXhcbiIsIGNtUmVnLnZhbHVlKTsgKi8KIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCkBAIC02MTUsMTEgKzYyMywxMSBAQAogCQljbVJlZy52YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVsxXSAmIDB4RkZGRik7CiAJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgaGlnaCB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciBoaWdoIHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKChpbnNuLT5kYXRhWzJdID4+IDE2KSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgbG93IHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIGxvdyB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzJdICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOwogCkBAIC02NTMsMTEgKzY2MSwxMSBAQAogCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDA7CS8qICBQUjAgKi8KIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGhpZ2ggd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMCBoaWdoIHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKChpbnNuLT5kYXRhWzJdID4+IDE2KSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMCBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMCBsb3cgd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVsyXSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKIApAQCAtNjY2LDE3ICs2NzQsMTcgQEAKIAkJY21SZWcucmVnLnByZWxvYWRSZWdTZWwgPSAxOwkvKiAgUFIxICovCiAJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMSBoaWdoIHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIDEgaGlnaCB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KSgoaW5zbi0+ZGF0YVszXSA+PiAxNikgJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDEgbG93IHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIDEgbG93IHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbM10gJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CiAKIAkJLyogIFdyaXRlIHRoZSBDb3VudGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQkJaWYgKGluc24tPmRhdGFbM10gIT0gMCkgewotCQkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbM10gJiAweEZGRkYpOworCQlpZiAoaW5zbi0+ZGF0YVs0XSAhPSAwKSB7CisJCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVs0XSAmIDB4RkZGRik7CiAJCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CiAJCX0KIAkJYnJlYWs7CkBAIC02OTgsMTEgKzcwNiwxMSBAQAogCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDA7CS8qICBQUjAgKi8KIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGhpZ2ggd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMCBoaWdoIHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKChpbnNuLT5kYXRhWzJdID4+IDE2KSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMCBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMCBsb3cgd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVsyXSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKIApAQCAtNzExLDE3ICs3MTksMTcgQEAKIAkJY21SZWcucmVnLnByZWxvYWRSZWdTZWwgPSAxOwkvKiAgUFIxICovCiAJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMSBoaWdoIHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIDEgaGlnaCB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KSgoaW5zbi0+ZGF0YVszXSA+PiAxNikgJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDEgbG93IHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIDEgbG93IHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbM10gJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CiAKIAkJLyogIFdyaXRlIHRoZSBDb3VudGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQkJaWYgKGluc24tPmRhdGFbM10gIT0gMCkgewotCQkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbM10gJiAweEZGRkYpOworCQlpZiAoaW5zbi0+ZGF0YVs0XSAhPSAwKSB7CisJCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVs0XSAmIDB4RkZGRik7CiAJCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CiAJCX0KIAkJYnJlYWs7CkBAIC03NDEsNiArNzQ5LDcgQEAKIHsKIAlpbnQgc3ViZGV2X2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLyogIFVucGFjayBjaGFuc3BlYyAqLwogCXNob3J0IHZhbHVlOworCXVuaW9uIGNtUmVnIGNtUmVnOwogCiAJcHJpbnRrKCJzNTI2OiBHUENUX0lOU05fV1JJVEUgb24gY2hhbm5lbCAlZFxuIiwgc3ViZGV2X2NoYW5uZWwpOwogCWNtUmVnLnZhbHVlID0gaW53KEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKQEAgLTc3NSw5ICs3ODQsOCBAQAogCQkJKGRldnByaXYtPnM1MjZfZ3BjdF9jb25maWdbc3ViZGV2X2NoYW5uZWxdKS5kYXRhWzFdID0KIAkJCSAgICBpbnNuLT5kYXRhWzFdOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKCIlZCBcdCAlZFxuIiwgaW5zbi0+ZGF0YVsxXSwgaW5zbi0+ZGF0YVsyXSk7Ci0JCQlwcmludGsKLQkJCSAgICAoInM1MjY6IElOU05fV1JJVEU6IFBURzogUHJvYmxlbSB3aXRoIFB1bHNlIHBhcmFtc1xuIik7CisJCQlwcmludGsoInM1MjY6IElOU05fV1JJVEU6IFBURzogUHJvYmxlbSB3aXRoIFB1bHNlIHBhcmFtcyAtPiAlZCAlZFxuIiwKKwkJCQlpbnNuLT5kYXRhWzBdLCBpbnNuLT5kYXRhWzFdKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTk0OSw3ICs5NTcsNyBAQAogCWRhdGFbMV0gPSBpbncoQUREUl9SRUcoUkVHX0RJTykpICYgMHhGRjsJLyogIGxvdyA4IGJpdHMgYXJlIHRoZSBkYXRhICovCiAJLyogb3Igd2UgY291bGQganVzdCByZXR1cm4gdGhlIHNvZnR3YXJlIGNvcHkgb2YgdGhlIG91dHB1dCB2YWx1ZXMgaWYKIAkgKiBpdCB3YXMgYSBwdXJlbHkgZGlnaXRhbCBvdXRwdXQgc3ViZGV2aWNlICovCi0JLyogZGF0YVsxXT1zLT5zdGF0ZTsgKi8KKwkvKiBkYXRhWzFdPXMtPnN0YXRlICYgMHhGRjsgKi8KIAogCXJldHVybiAyOwogfQpAQCAtOTU5LDI4ICs5NjcsMzMgQEAKIAkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwotCXNob3J0IHZhbHVlOworCWludCBncm91cCwgbWFzazsKIAogCXByaW50aygiUzUyNiBESU8gaW5zbl9jb25maWdcbiIpOwogCi0JaWYgKGluc24tPm4gIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2YWx1ZSA9IGludyhBRERSX1JFRyhSRUdfRElPKSk7Ci0KIAkvKiBUaGUgaW5wdXQgb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gb2YgZWFjaCBkaWdpdGFsIGxpbmUgaXMKIAkgKiBjb25maWd1cmVkIGJ5IGEgc3BlY2lhbCBpbnNuX2NvbmZpZyBpbnN0cnVjdGlvbi4gIGNoYW5zcGVjCiAJICogY29udGFpbnMgdGhlIGNoYW5uZWwgdG8gYmUgY2hhbmdlZCwgYW5kIGRhdGFbMF0gY29udGFpbnMgdGhlCiAJICogdmFsdWUgQ09NRURJX0lOUFVUIG9yIENPTUVESV9PVVRQVVQuICovCiAKLQlpZiAoZGF0YVswXSA9PSBDT01FRElfT1VUUFVUKSB7Ci0JCXZhbHVlIHw9IDEgPDwgKGNoYW4gKyAxMCk7CS8qICBiaXQgMTAvMTEgc2V0IHRoZSBncm91cCAxLzIncyBtb2RlICovCi0JCXMtPmlvX2JpdHMgfD0gKDB4RiA8PCBjaGFuKTsKLQl9IGVsc2UgewotCQl2YWx1ZSAmPSB+KDEgPDwgKGNoYW4gKyAxMCkpOwkvKiAgMSBpcyBvdXRwdXQsIDAgaXMgaW5wdXQuICovCi0JCXMtPmlvX2JpdHMgJj0gfigweEYgPDwgY2hhbik7CisJZ3JvdXAgPSBjaGFuID4+IDI7CisJbWFzayA9IDB4RiA8PCAoZ3JvdXAgPDwgMik7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5zdGF0ZSB8PSAxIDw8IChncm91cCArIDEwKTsgIC8vIGJpdCAxMC8xMSBzZXQgdGhlIGdyb3VwIDEvMidzIG1vZGUKKwkJcy0+aW9fYml0cyB8PSBtYXNrOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+c3RhdGUgJj0gfigxIDw8IChncm91cCArIDEwKSk7Ly8gMSBpcyBvdXRwdXQsIDAgaXMgaW5wdXQuCisJCXMtPmlvX2JpdHMgJj0gfm1hc2s7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0gKHMtPmlvX2JpdHMgJiBtYXNrKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlvdXR3KHZhbHVlLCBBRERSX1JFRyhSRUdfRElPKSk7CisJb3V0dyhzLT5zdGF0ZSwgQUREUl9SRUcoUkVHX0RJTykpOwogCiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwppbmRleCBhMjE5Njc5Li44MmFhODZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS90ZXJtaW9zLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZDJhMjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLWNvbmZpZyBDT1dMT09QCi0JdHJpc3RhdGUgImNvcHktb24td3JpdGUgcHNldWRvIEJsb2NrIERyaXZlciIKLQlkZXBlbmRzIG9uIEJMT0NLCi0JZGVmYXVsdCBuCi0JLS0taGVscC0tLQotCSAgQ293bG9vcCBpcyBhICJjb3B5LW9uLXdyaXRlIiBwc2V1ZG8gYmxvY2sgZHJpdmVyLiBJdCBjYW4gYmUKLQkgIHN0YWNrZWQgb24gdG9wIG9mIGEgInJlYWwiIGJsb2NrIGRyaXZlciwgYW5kIGNhdGNoZXMgYWxsIHdyaXRlCi0JICBvcGVyYXRpb25zIG9uIHRoZWlyIHdheSBmcm9tIHRoZSBmaWxlIHN5c3RlbXMgbGF5ZXIgYWJvdmUgdG8KLQkgIHRoZSByZWFsIGRyaXZlciBiZWxvdywgZWZmZWN0aXZlbHkgc2hpZWxkaW5nIHRoZSBsb3dlciBkcml2ZXIKLQkgIGZyb20gdGhvc2Ugd3JpdGUgYWNjZXNzZXMuIFRoZSByZXF1ZXN0cyBhcmUgdGhlbiBkaXZlcnRlZCB0bwotCSAgYW4gb3JkaW5hcnkgZmlsZSwgbG9jYXRlZCBzb21ld2hlcmUgZWxzZSAoY29uZmlndXJhYmxlKS4gTGF0ZXIKLQkgIHJlYWQgcmVxdWVzdHMgYXJlIGNoZWNrZWQgdG8gc2VlIHdoZXRoZXIgdGhleSBjYW4gYmUgc2VydmljZWQKLQkgIGJ5IHRoZSAicmVhbCIgYmxvY2sgZHJpdmVyIGJlbG93LCBvciBtdXN0IGJlIHB1bGxlZCBpbiBmcm9tCi0JICB0aGUgZGl2ZXJ0ZWQgbG9jYXRpb24uIE1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXJzcGFjZSB0b29scyB0bwotCSAgdXNlIHRoZSBkcml2ZXIgYXJlIG9uIHRoZSBwcm9qZWN0J3Mgd2Vic2l0ZQotCSAgaHR0cDovL3d3dy5BVENvbXB1dGluZy5ubC9jb3dsb29wLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI2YjgxYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9iai0kKENPTkZJR19DT1dMT09QKQkrPSBjb3dsb29wLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9UT0RPCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzk5ZDFjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1UT0RPOgotCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcwotCS0gcnVuIHNwYXJzZSB0byBlbnN1cmUgY2xlYW4KLQktIGZpeCB1cCAzMi82NGJpdCBpb2N0bCBpc3N1ZXMKLQktIG1vdmUgcHJvYyBmaWxlIHVzYWdlIHRvIGRlYnVnZnMKLQktIGF1ZGl0IGlvY3RscwotCS0gYWRkIGRvY3VtZW50YXRpb24KLQktIGdldCBsaW51eC1mc2RldmVsIHRvIHJldmlldyBpdAotCi1QbGVhc2Ugc2VuZCBwYXRjaGVzIHRvICJILkouIFRob21hc3NlbiIgPGhqdEBBVENvbXB1dGluZy5ubD4gYW5kCi1HcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvY293bG9vcC5jIGIvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvY293bG9vcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzFjNzQzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL2Nvd2xvb3AuYworKysgL2Rldi9udWxsCkBAIC0xLDI4NDIgKzAsMCBAQAotLyoKLSoqICAgICAgIENPV0xPT1AgYmxvY2sgZGV2aWNlIGRyaXZlciAoMi42IGtlcm5lbCBjb21wbGlhbnQpCi0qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiogUmVhZC13cml0ZSBsb29wLWRyaXZlciB3aXRoIGNvcHktb24td3JpdGUgZnVuY3Rpb25hbGl0eS4KLSoqCi0qKiBTeW5vcHNpczoKLSoqCi0qKiAgICAgbW9kcHJvYmUgY293bG9vcCBbbWF4Y293cz0uLl0gW3Jkb2ZpbGU9Li4uLi4gY293ZmlsZT0uLi4uIFtvcHRpb249cl1dCi0qKgotKiogRGVmaW5pdGlvbiBvZiBudW1iZXIgb2YgY29uZmlndXJlZCBjb3dkZXZpY2VzOgotKiogICBtYXhjb3dzPQludW1iZXIgb2YgY29uZmlndXJlZCBjb3dkZXZpY2VzIChkZWZhdWx0OiAxNikKLSoqIChkbyBub3QgY29uZnVzZSB0aGlzIHdpdGggTUFYQ09XUzogYWJzb2x1dGUgbWF4aW11bSBhcyBjb21waWxlZCkKLSoqCi0qKiBPbmUgcGFpciBvZiBmaWxlbmFtZXMgY2FuIGJlIHN1cHBsaWVkIGR1cmluZyBpbnNtb2QvbW9kcHJvYmUgdG8gb3BlbgotKiogdGhlIGZpcnN0IGNvd2RldmljZToKLSoqICAgcmRvZmlsZT0JcmVhZC1vbmx5IGZpbGUgKG9yIGZpbGVzeXN0ZW0pCi0qKiAgIGNvd2ZpbGU9CXN0b3JhZ2Utc3BhY2UgZm9yIG1vZGlmaWVkIGJsb2NrcyBvZiByZWFkLW9ubHkgZmlsZShzeXN0ZW0pCi0qKiAgIG9wdGlvbj1yCXJlcGFpciBjb3dmaWxlIGF1dG9tYXRpY2FsbHkgaWYgaXQgYXBwZWFycyB0byBiZSBkaXJ0eQotKioKLSoqIE90aGVyIGNvd2RldmljZXMgY2FuIGJlIGFjdGl2YXRlZCB2aWEgdGhlIGNvbW1hbmQgImNvd2RldiIKLSoqIHdoZW5ldmVyIHRoZSBjb3dsb29wLWRyaXZlciBpcyBsb2FkZWQuCi0qKgotKiogVGhlIHJlYWQtb25seSBmaWxlIG1heSBiZSBvZiB0eXBlICdyZWd1bGFyJyBvciAnYmxvY2stZGV2aWNlJy4KLSoqCi0qKiBUaGUgY293ZmlsZSBtdXN0IGJlIG9mIHR5cGUgJ3JlZ3VsYXInLgotKiogSWYgYW4gZXhpc3RpbmcgcmVndWxhciBmaWxlIGlzIHVzZWQgYXMgY293ZmlsZSwgaXRzIGNvbnRlbnRzIHdpbGwgYmUKLSoqIHVzZWQgYWdhaW4gZm9yIHRoZSBjdXJyZW50IHJlYWQtb25seSBmaWxlLiBXaGVuIHRoZSBjb3dmaWxlIGhhcyBub3QgYmVlbgotKiogY2xvc2VkIHByb3Blcmx5IGR1cmluZyBhIHByZXZpb3VzIHNlc3Npb24gKGkuZS4gcm1tb2QgY293bG9vcCksIHRoZQotKiogY293bG9vcC1kcml2ZXIgcmVmdXNlcyB0byBvcGVuIGl0IHVubGVzcyB0aGUgcGFyYW1ldGVyICJvcHRpb249ciIgaXMKLSoqIHNwZWNpZmllZC4KLSoqCi0qKiBMYXlvdXQgb2YgY293ZmlsZToKLSoqCi0qKiAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotKioJfCAgICAgICBjb3cgaGVhZCBibG9jayAgICAgICAgfCAgIE1BUFVOSVQgYnl0ZXMKLSoqCXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSoqCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBNQVBVTklUIGJ5dGVzCi0qKgl8LS0tICAgICAgICAgICAgICAgICAgICAgICAtLS18Ci0qKgl8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgTUFQVU5JVCBieXRlcwotKioJfC0tLSAgICAgICAgICAgICAgICAgICAgICAgLS0tfAotKioJfCAgICAgIHVzZWQtYmxvY2sgYml0bWFwICAgICAgfCAgIE1BUFVOSVQgYnl0ZXMKLSoqCXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSoqCXwgIGdhcCB0byBhbGlnbiBzdGFydC1vZmZzZXQgIHwKLSoqCXwgICAgICAgIHRvIDRLIG11bHRpcGxlICAgICAgIHwKLSoqCXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgIDwtLS0tIHN0YXJ0LW9mZnNldCBjb3cgYmxvY2tzCi0qKgl8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0qKiAgICAgIHwgICAgd3JpdHRlbiBjb3cgYmxvY2tzICAgICAgIHwgICBNQVBVTklUIGJ5dGVzCi0qKiAgICAgIHwgICAgICAgICAgLi4uLi4gICAgICAgICAgICAgIHwKLSoqCi0qKiAJY293aGVhZCBibG9jazoKLSoqICAgCSAgLSBjb250YWlucyBnZW5lcmFsIGluZm8gYWJvdXQgdGhlIHJkb2ZpbGUgd2hpY2ggaXMgcmVsYXRlZAotKiogCSAgICB0byB0aGlzIGNvd2ZpbGUKLSoqCi0qKiAJdXNlZC1ibG9jayBiaXRtYXA6Ci0qKiAJICAtIGNvbnRhaW5zIG9uZSBiaXQgcGVyIGJsb2NrIHdpdGggYSBzaXplIG9mIE1BUFVOSVQgYnl0ZXMKLSoqIAkgIC0gYml0LXZhbHVlICcxJyA9IGJsb2NrIGhhcyBiZWVuIHdyaXR0ZW4gb24gY293Ci0qKiAJICAgICAgICAgICAgICAnMCcgPSBibG9jayB1bnVzZWQgb24gY293Ci0qKiAJICAtIHRvdGFsIGJpdG1hcCByb3VuZGVkIHRvIG11bHRpcGxlcyBvZiBNQVBVTklUCi0qKgotKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiogQXV0aG9yOiAgICAgICAgICAgICBHZXJsb2YgTGFuZ2V2ZWxkIC0gQVQgQ29tcHV0aW5nIChNYXJjaCAyMDAzKQotKiogQ3VycmVudCBtYWludGFpbmVyOiBIZW5kcmlrLUphbiBUaG9tYXNzZW4gLSBBVCBDb21wdXRpbmcgKFN1bW1lciAyMDA2KQotKiogRW1haWw6ICAgICAgICAgICAgICBoanRAQVRDb21wdXRpbmcubmwKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqIENvcHlyaWdodCAoQykgMjAwMy0yMDA5IEFUIENvbnN1bHRhbmN5Ci0qKgotKiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSoqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKiogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotKiogbGF0ZXIgdmVyc2lvbi4KLSoqCi0qKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0qKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0qKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0qKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0qKgotKiogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0qKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKiogTWFqb3IgbW9kaWZpY2F0aW9uczoKLSoqCi0qKiAJMjAwNDA1CVBvcnRlZCB0byBrZXJuZWwtdmVyc2lvbiAyLjYJCUhlbmRyaWstSmFuIFRob21hc3NlbgotKioJMjAwNDA1CUFkZGVkIGNvd2hlYWQgdG8gY293ZmlsZSB0byBnYXJhbnRlZQotKioJCWNvbnNpc3RlbmN5IHdpdGggcmVhZC1vbmx5IGZpbGUJCUdlcmxvZiBMYW5nZXZlbGQKLSoqCTIwMDQwNQlQb3N0cG9uZWQgZmx1c2hpbmcgb2YgYml0bWFwcyB0byBpbXByb3ZlCi0qKgkJcGVyZm9ybWFuY2UuIAkJCQlHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA0MDUJSW5saW5lIHJlY292ZXJ5IGZvciBkaXJ0eSBjb3dmaWxlcy4JR2VybG9mIExhbmdldmVsZAotKioJMjAwNTAyCVJlZGVzaWduIHRvIHN1cHBvcnQgbW9yZSBjb3dkZXZpY2VzLglHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA1MDIJU3VwcG9ydCBkZXZpY2VzL2ZpbGUgPiAyIEdieXRlcy4JR2VybG9mIExhbmdldmVsZAotKioJMjAwNTA3CUNoZWNrIGZvciBmcmVlIHNwYWNlIHRvIGV4cGFuZCBjb3dmaWxlLglHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA5MDIgIFVwZ3JhZGUgZm9yIGtlcm5lbCAyLjYuMjggICAgICAgICAgICAgICBIZW5kcmlrLUphbiBUaG9tYXNzZW4KLSoqCi0qKiBJbnNwaXJlZCBieQotKiogICAgbG9vcC5jICBieSBUaGVvZG9yZSBUcydvIGFuZAotKiogICAgY2xvb3AuYyBieSBQYXVsIGBSdXN0eScgUnVzc2VsbCAmIEtsYXVzIEtub3BwZXIuCi0qKgotKiogRGVzaWduLWNvbnNpZGVyYXRpb25zOgotKioKLSoqICAgRm9yIHRoZSBmaXJzdCBleHBlcmltZW50cyB3aXRoIHRoZSBjb3dsb29wLWRyaXZlciwgdGhlIHJlcXVlc3QtcXVldWUKLSoqICAgbWFkZSB1c2Ugb2YgdGhlIGRvX2dlbmVyaWNfZmlsZV9yZWFkKCkgd2hpY2ggd29ya2VkIGZpbmUgZXhjZXB0Ci0qKiAgIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNsb29wLWRyaXZlcjsgdGhhdCBjb21iaW5hdGlvbgotKiogICByZXN1bHRlZCBpbiBhIG5vbi1pbnRlcnJ1cHRpYmxlIGhhbmd1cCBvZiB0aGUgc3lzdGVtIGR1cmluZwotKiogICBoZWF2eSBsb2FkLiBPdGhlciBleHBlcmltZW50cyB1c2luZyB0aGUgYG1ha2VfcmVxdWVzdCcgaW50ZXJmYWNlIGFsc28KLSoqICAgcmVzdWx0ZWQgaW4gdW5wcmVkaWN0YWJsZSBzeXN0ZW0gaGFuZ3VwcyAod2l0aCBwcm9wZXIgdXNlIG9mIHNwaW5sb2NrcykuCi0qKgotKiogICBUbyBvdmVyY29tZSB0aGVzZSBwcm9ibGVtcywgdGhlIGNvd2xvb3AtZHJpdmVyIHN0YXJ0cyBhIGtlcm5lbC10aHJlYWQKLSoqICAgZm9yIGV2ZXJ5IGFjdGl2ZSBjb3dkZXZpY2UuCi0qKiAgIEFsbCByZWFkLSBhbmQgd3JpdGUtcmVxdWVzdCBvbiB0aGUgcmVhZC1vbmx5IGZpbGUgYW5kIGNvcHktb24td3JpdGUgZmlsZQotKiogICBhcmUgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGF0IHRocmVhZC4KLSoqICAgQSBzY2hlbWUgaGFzIGJlZW4gZGVzaWduZWQgdG8gd2FrZXVwIHRoZSBrZXJuZWwtdGhyZWFkIGFzCi0qKiAgIHNvb24gYXMgSS9PLXJlcXVlc3RzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHJlcXVlc3QtcXVldWU7IHRoaXMgdGhyZWFkCi0qKiAgIGhhbmRsZXMgdGhlIHJlcXVlc3RzIG9uZS1ieS1vbmUgYnkgY2FsbGluZyB0aGUgcHJvcGVyIHJlYWQtIG9yCi0qKiAgIHdyaXRlLWZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIG9wZW4gcmVhZC1vbmx5IGZpbGUgb3IgY29weS1vbi13cml0ZSBmaWxlLgotKiogICBXaGVuIGFsbCBwZW5kaW5nIHJlcXVlc3RzIGhhdmUgYmVlbiBoYW5kbGVkLCB0aGUga2VybmVsLXRocmVhZCBnb2VzCi0qKiAgIGJhY2sgdG8gc2xlZXAtc3RhdGUuCi0qKiAgIFRoaXMgYXBwcm9hY2ggcmVxdWlyZXMgc29tZSBhZGRpdGlvbmFsIGNvbnRleHQtc3dpdGNoZXM7IGhvd2V2ZXIgdGhlCi0qKiAgIHBlcmZvcm1hbmNlIGxvc3MgZHVyaW5nIGhlYXZ5IEkvTyBpcyBsZXNzIHRoYW4gMyUuCi0qKgotKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBjb3dsb29wIHBhY2thZ2UgdmVyc2lvbiBudW1iZXIuIEl0IG11c3QgYmUKLSAgIGlkZW50aWNhbCB0byB0aGUgY29udGVudCBvZiB0aGUgaW5jbHVkZS1maWxlICJ2ZXJzaW9uLmgiIHRoYXQgaXMKLSAgIHVzZWQgaW4gYWxsIHN1cHBvcnRpbmcgdXRpbGl0aWVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotY2hhciByZXZpc2lvbltdID0gIiRSZXZpc2lvbjogMy4xICQiOyAvKiBjb3dsb19pbml0X21vZHVsZSgpIGhhcwotCQkJICAgICBhc3N1bXB0aW9ucyBhYm91dCB0aGlzIHN0cmluZydzIGZvcm1hdCAgICovCi0KLS8qIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXJlICpub3QqIHRoZSBjb3dsb29wIHBhY2thZ2UgdmVyc2lvbgotICAgbnVtYmVycywgYnV0IHNlcGFyYXRlIHJldmlzaW9uIGhpc3RvcnkgbnVtYmVycyB0byB0cmFjayB0aGUKLSAgIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlOiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogJExvZzogY293bG9vcC5jLHYgJAotKioKLSoqIFJldmlzaW9uIDEuMzAgIDIwMDkvMDIvMDggaGp0Ci0qKiBJbnRlZ3JhdGVkIGVhcmxpZXIgZml4ZXMKLSoqIFVwZ3JhZGVkIHRvIGtlcm5lbCAyLjYuMjggKHRoYW5rcyBKZXJvbWUgUG91bGluKQotKioKLSoqIFJldmlzaW9uIDEuMjkgIDIwMDYvMTIvMDMgMjI6MTI6MDAgIGhqdAotKiogY2hhbmdlZCAnY293ZGV2bG9jaycgZnJvbSBzcGlubG9jayB0byBzZW1hcGhvcmUsIHRvIGF2b2lkCi0qKiAic2NoZWR1bGluZyB3aGlsZSBhdG9taWMiLiBDb250cmlidXRlZCBieSBKdWVyZ2VuIENocmlzdC4KLSoqIEFkZGVkIHZlcnNpb24uaCBhZ2FpbgotKioKLSoqIFJldmlzaW9uIDEuMjggIDIwMDYvMDgvMTYgMTY6MDA6MDAgIGhqdAotKiogbWFsbG9jIGVhY2ggaW5kaXZpZHVhbCBjb3dsb29wZGV2aWNlIHN0cnVjdCBzZXBhcmF0ZWx5Ci0qKgotKiogUmV2aXNpb24gMS4yNyAgMjAwNi8wMy8xNCAxNDo1NzowMyAgcm9vdAotKiogUmVtb3ZlZCBpbmNsdWRlIHZlcnNpb24uaAotKioKLSoqIFJldmlzaW9uIDEuMjYgIDIwMDUvMDgvMDggMTE6MjI6NDggIHJvb3QKLSoqIEltcGxlbWVudCBwb3NzaWJpbGl0eSB0byBjbG9zZSBhIGNvdyBmaWxlIG9yIHJlb3BlbiBhIGNvd2ZpbGUgcmVhZC1vbmx5LgotKioKLSoqIFJldmlzaW9uIDEuMjUgIDIwMDUvMDgvMDMgMTQ6MDA6MzkgIHJvb3QKLSoqIEFkZGVkIG1vZGluZm8gaW5mbyB0byBkcml2ZXIuCi0qKgotKiogUmV2aXNpb24gMS4yNCAgMjAwNS8wNy8yMSAwNjoxNDo1MyAgcm9vdAotKiogQ29zbWV0aWMgY2hhbmdlcyBzb3VyY2UgY29kZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjIzICAyMDA1LzA3LzIwIDEzOjA3OjMyICByb290Ci0qKiBTdXBwbHkgaW9jdGwgdG8gd3JpdGUgd2F0Y2hkb2cgcHJvZ3JhbSB0byByZWFjdCBvbiBsYWNrIG9mIGNvd2ZpbGUgc3BhY2UuCi0qKgotKiogUmV2aXNpb24gMS4yMiAgMjAwNS8wNy8yMCAwNzo1MzozNCAgcm9vdAotKiogUmVndWxhciB2ZXJpZmljYXRpb24gb2YgZnJlZSBzcGFjZSBpbiBmaWxlc3lzdGVtIGhvbGRpbmcgdGhlIGNvd2ZpbGUKLSoqIChnaXZlIHdhcm5pbmdzIHdoZW5ldmVyIHNwYWNlIGlzIGFsbW9zdCBleGhhdXN0ZWQpLgotKiogVGVybWlub2xvZ3kgY2hhbmdlOiBjaGVja3N1bSByZW5hbWVkIHRvIGZpbmdlcnByaW50LgotKioKLSoqIFJldmlzaW9uIDEuMjEgIDIwMDUvMDcvMTkgMDk6MjE6NTIgIHJvb3QKLSoqIFJlbW92aW5nIG1heGltdW0gbGltaXQgb2YgMTYgR2IgcGVyIGNvd2RldmljZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjIwICAyMDA1LzA3LzE5IDA3OjUwOjMzICByb290Ci0qKiBNaW5vciBidWdmaXhlcyBhbmQgY29zbWV0aWMgY2hhbmdlcy4KLSoqCi0qKiBSZXZpc2lvbiAxLjE5ICAyMDA1LzA2LzEwIDEyOjI5OjU1ICByb290Ci0qKiBSZW1vdmVkIGxvY2svdW5sb2NrIG9wZXJhdGlvbiBmcm9tIGNvd2xvX29wZW4oKS4KLSoqCi0qKiBSZXZpc2lvbiAxLjE4ICAyMDA1LzA1LzA5IDEyOjU2OjI2ICByb290Ci0qKiBBbGxvdyBhIGNvd2RldmljZSB0byBiZSBvcGVuIG1vcmUgdGhhbiBvbmNlCi0qKiAobmVlZGVkIGZvciBzdXBwb3J0IG9mIFJlaXNlckZTIGFuZCBYRlMpLgotKioKLSoqIFJldmlzaW9uIDEuMTcgIDIwMDUvMDMvMTcgMTQ6MzY6MTYgIHJvb3QKLSoqIEZpeGVkIHNvbWUgbGljZW5zZSBpc3N1ZXMuCi0qKgotKiogUmV2aXNpb24gMS4xNiAgMjAwNS8wMy8wNyAxNDo0MjowNSAgcm9vdAotKiogT25seSBhbGxvdyBvbmUgcGFyYWxsZWwgb3BlbiBwZXIgY293ZGV2aWNlLgotKioKLSoqIFJldmlzaW9uIDEuMTUgIDIwMDUvMDIvMTggMTE6NTI6MDQgIGdlcmxvZgotKiogUmVkZXNpZ24gdG8gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGNvd2RldmljZSA+IDIgR2Igc3BhY2UuCi0qKgotKiogUmV2aXNpb24gMS4xNCAgMjAwNC8wOC8xNyAxNDoxOToxNiAgZ2VybG9mCi0qKiBNb2RpZmllZCBvdXRwdXQgb2YgL3Byb2MvY293bG9vcC4KLSoqCi0qKiBSZXZpc2lvbiAxLjEzICAyMDA0LzA4LzE2IDA3OjIxOjEwICBnZXJsb2YKLSoqIFNlcGFyYXRlIHN0YXRpc3RpY2FsIGNvdW50ZXIgZm9yIHJlYWQgb24gcmRvZmlsZSBhbmQgY293ZmlsZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjEyICAyMDA0LzA4LzExIDA2OjUyOjExICBnZXJsb2YKLSoqIE1vZGlmaWVkIG1lc3NhZ2VzLgotKioKLSoqIFJldmlzaW9uIDEuMTEgIDIwMDQvMDgvMTEgMDY6NDQ6MTEgIGdlcmxvZgotKiogTW9kaWZpZWQgbG9nIG1lc3NhZ2VzLgotKioKLSoqIFJldmlzaW9uIDEuMTAgIDIwMDQvMDgvMTAgMTI6Mjc6MjcgIGdlcmxvZgotKiogQ29zbWV0aWMgY2hhbmdlcy4KLSoqCi0qKiBSZXZpc2lvbiAxLjkgIDIwMDQvMDgvMDkgMTE6NDM6MzcgIGdlcmxvZgotKiogUmVtb3ZlZCBkb3VibGUgZGVmaW5pdGlvbiBvZiBtYWpvciBudW1iZXIgKENPV01BSk9SKS4KLSoqCi0qKiBSZXZpc2lvbiAxLjggIDIwMDQvMDgvMDkgMDg6MDM6MzkgIGdlcmxvZgotKiogQ2xlYW51cCBvZiBtZXNzYWdlcy4KLSoqCi0qKiBSZXZpc2lvbiAxLjcgIDIwMDQvMDUvMjcgMDY6Mzc6MzMgIGdlcmxvZgotKiogTW9kaWZpZWQgL3Byb2MgbWVzc2FnZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjYgIDIwMDQvMDUvMjYgMjE6MjM6MjggIGdlcmxvZgotKiogTW9kaWZpZWQgL3Byb2Mgb3V0cHV0LgotKioKLSoqIFJldmlzaW9uIDEuNSAgMjAwNC8wNS8yNiAxMzoyMzozNCAgZ2VybG9mCi0qKiBTdXBwb3J0IGNvd3N5bmMgdG8gZm9yY2UgZmx1c2hpbmcgdGhlIGJpdG1hcHMgYW5kIGNvd2hlYWQuCi0qKgotKiogUmV2aXNpb24gMS40ICAyMDA0LzA1LzI2IDExOjExOjEwICBnZXJsb2YKLSoqIFVwZGF0ZWQgdGhlIGNvbW1lbnQgdG8gdGhlIGFjdHVhbCBzaXR1YXRpb24uCi0qKgotKiogUmV2aXNpb24gMS4zICAyMDA0LzA1LzI2IDEwOjUwOjAwICBnZXJsb2YKLSoqIEltcGxlbWVudGVkIHJlY292ZXJ5LW9wdGlvbi4KLSoqCi0qKiBSZXZpc2lvbiAxLjIgIDIwMDQvMDUvMjUgMTU6MTQ6NDEgIGdlcmxvZgotKiogTW9kaWZpZWQgYml0bWFwIGZsdXNoaW5nIHN0cmF0ZWd5LgotKioKLSovCi0KLSNkZWZpbmUgQ09XTUFKT1IJMjQxCi0KLS8vICNkZWZpbmUgQ09XREVCVUcKLQotI2lmZGVmIAlDT1dERUJVRwotI2RlZmluZSBERUJVR1AJCXByaW50awotI2RlZmluZSBEQ09XCQlLRVJOX0FMRVJUCi0jZWxzZQotI2RlZmluZSBERUJVR1AoZm9ybWF0LCB4Li4uKQotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+Ci0jaWZuZGVmIEFVVE9DT05GX0lOQ0xVREVECi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgotI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+Ci0KLSNpbmNsdWRlICJjb3dsb29wLmgiCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLS8qIE1PRFVMRV9BVVRIT1IoIkdlcmxvZiBMYW5nZXZlbGQgPGdlcmxvZkBBVENvbXB1dGluZy5ubD4iKTsgICAgIG9ic29sZXRlIGFkZHJlc3MgKi8KLU1PRFVMRV9BVVRIT1IoIkhlbmRyaWstSmFuIFRob21hc3NlbiA8aGp0QEFUQ29tcHV0aW5nLm5sPiIpOyAvKiBjdXJyZW50IG1haW50YWluZXIgKi8KLU1PRFVMRV9ERVNDUklQVElPTigiQ29weS1vbi13cml0ZSBsb29wIGRyaXZlciIpOwotTU9EVUxFX1BBUk1fREVTQyhtYXhjb3dzLCAiIE51bWJlciBvZiBjb25maWd1cmVkIGNvd2RldmljZXMgKGRlZmF1bHQgMTYpIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHJkb2ZpbGUsICIgUmVhZC1vbmx5IGZpbGUgZm9yIC9kZXYvY293LzAiKTsKLU1PRFVMRV9QQVJNX0RFU0MoY293ZmlsZSwgIiBDb3dmaWxlIGZvciAvZGV2L2Nvdy8wIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG9wdGlvbiwgIiAgUmVwYWlyIGNvd2ZpbGUgaWYgaW5jb25zaXN0ZW50OiBvcHRpb249ciIpOwotCi0jZGVmaW5lIERFVklDRV9OQU1FCSJjb3ciCi0KLSNkZWZpbmUJREZMQ09XUwkJMTYJCS8qIGRlZmF1bHQgY293bG9vcCBkZXZpY2VzCSovCi0KLXN0YXRpYyBpbnQgbWF4Y293cyA9IERGTENPV1M7Ci1tb2R1bGVfcGFyYW0obWF4Y293cywgaW50LCAwKTsKLXN0YXRpYyBjaGFyICpyZG9maWxlID0gIiI7Ci1tb2R1bGVfcGFyYW0ocmRvZmlsZSwgY2hhcnAsIDApOwotc3RhdGljIGNoYXIgKmNvd2ZpbGUgPSAiIjsKLW1vZHVsZV9wYXJhbShjb3dmaWxlLCBjaGFycCwgMCk7Ci1zdGF0aWMgY2hhciAqb3B0aW9uID0gIiI7Ci1tb2R1bGVfcGFyYW0ob3B0aW9uLCBjaGFycCwgMCk7Ci0KLS8qCi0qKiBwZXIgY293ZGV2aWNlIHNldmVyYWwgYml0bWFwIGNodW5rcyBhcmUgYWxsb3dlZCBvZiBNQVBDSFVOS1NaIGVhY2gKLSoqCi0qKiBlYWNoIGJpdG1hcCBjaHVuayBjYW4gZGVzY3JpYmUgTUFQQ0hVTktTWiAqIDggKiBNQVBVTklUIGJ5dGVzIG9mIGRhdGEKLSoqIHN1cHBvc2U6Ci0qKglNQVBDSFVOS1NaIDQwOTYgYW5kIE1BUFVOSVQgMTAyNCAtLT4gNDA5NiAqIDggKiAxMDI0ID0gMzIgTWIgcGVyIGNodW5rCi0qLwotI2RlZmluZQlNQVBDSFVOS1NaCTQwOTYJLyogI2J5dGVzIHBlciBiaXRtYXAgY2h1bmsgIChkbyBub3QgY2hhbmdlKSAgKi8KLQotI2RlZmluZSBTUENNSU5CTEsJMTAwCS8qIHNwYWNlIHRocmVzaG9sZCB0byBnaXZlIHdhcm5pbmcgbWVzc2FnZXMgICovCi0jZGVmaW5lIFNQQ0RGTElOVFZMCTE2CS8qIG9uY2UgZXZlcnkgU1BDREZMSU5UVkwgd3JpdGVzIHRvIGNvd2ZpbGUsICovCi0JCQkJLyogYXZhaWxhYmxlIHNwYWNlIGluIGZpbGVzeXN0ZW0gaXMgY2hlY2tlZCAgKi8KLQotI2RlZmluZQlDQUxDTUFQKHgpCSgoeCkvKE1BUENIVU5LU1oqOCkpCi0jZGVmaW5lCUNBTENCWVRFKHgpCSgoKHgpJShNQVBDSFVOS1NaKjgpKT4+MykKLSNkZWZpbmUJQ0FMQ0JJVCh4KQkoKHgpJjcpCi0KLSNkZWZpbmUgQUxMQ09XCQkxCi0jZGVmaW5lIEFMTFJETwkJMgotI2RlZmluZSBNSVhFRFVQCQkzCi0KLXN0YXRpYyBjaGFyCWFsbHplcm9lc1tNQVBVTklUXTsKLQotLyoKLSoqIGFkbWluaXN0cmF0aW9uIHBlciBjb3dkZXZpY2UgKHBhaXIgb2YgY293ZmlsZS9yZG9maWxlKQotKi8KLQotLyogYml0LXZhbHVlcyBmb3Igc3RhdGUgKi8KLSNkZWZpbmUJQ09XREVWT1BFTgkweDAxCS8qIGNvd2RldmljZSBvcGVuZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUNPV1JXQ09XT1BFTgkweDAyCS8qIGNvd2ZpbGUgb3BlbmVkIHJlYWQtd3JpdGUgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUNPV1JEQ09XT1BFTgkweDA0CS8qIGNvd2ZpbGUgb3BlbmVkIHJlYWQtb25seSAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUNPV1dBVENIRE9HCTB4MDggCS8qIGlvY3RsIGZvciB3YXRjaGRvZyBjb3dmaWxlIHNwYWNlIGFjdGl2ZSAgICovCi0KLSNkZWZpbmUJQ09XQ09XT1BFTgkoQ09XUldDT1dPUEVOfENPV1JEQ09XT1BFTikKLQotc3RydWN0IGNvd2xvb3BfZGV2aWNlCi17Ci0JLyoKLQkqKiBjdXJyZW50IHN0YXR1cwotCSovCi0JaW50CQlzdGF0ZTsJCQkvKiBiaXQtdmFsdWVzIChzZWUgYWJvdmUpICAgICovCi0JaW50CQlvcGVuY250OwkJLyogIyBvcGVucyBmb3IgY293ZGV2aWNlICAgICAqLwotCi0gICAgICAgIC8qCi0JKiogb3BlbiBmaWxlIHBvaW50ZXJzCi0JKi8KLSAgICAgICAgc3RydWN0IGZpbGUgIAkqcmRvZnAsICAgKmNvd2ZwOwkvKiBvcGVuIGZpbGUgcG9pbnRlcnMgICAgICAgICovCi0JY2hhcgkJKnJkb25hbWUsICpjb3duYW1lOwkvKiBmaWxlIG5hbWVzICAgICAgICAgICAgICAgICovCi0KLQkvKgotCSoqIHJlcXVlc3QgcXVldWUgYWRtaW5pc3RyYXRpb24KLQkqLwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlCSpycXVldWU7Ci0Jc3BpbmxvY2tfdAkJcnFsb2NrOwotCXN0cnVjdCBnZW5kaXNrCQkqZ2Q7Ci0KLQkvKgotCSoqIGFkbWluaXN0cmF0aW9uIGFib3V0IHJlYWQtb25seSBmaWxlCi0JKi8KLQl1bnNpZ25lZCBpbnQJICAgICBudW1ibG9ja3M7CS8qICMgYmxvY2tzIGlucHV0IGZpbGUgaW4gTUFQVU5JVCAgICAqLwotCXVuc2lnbmVkIGludAkgICAgIGJsb2Nrc3o7ICAgLyogbWluaW11bSB1bml0IHRvIGFjY2VzcyB0aGlzIGRldiAgICovCi0JdW5zaWduZWQgbG9uZwkgICAgIGZpbmdlcnByaW50OyAvKiBmaW5nZXJwcmludCBvZiBjdXJyZW50IHJkb2ZpbGUgICovCi0Jc3RydWN0IGJsb2NrX2RldmljZSAgKmJlbG93ZGV2OwkvKiBibG9jayBkZXZpY2UgYmVsb3cgdXMgICAgICAgICAgICAgKi8KLQlzdHJ1Y3QgZ2VuZGlzayAgICAgICAqYmVsb3dnZDsgIC8qIGdlbmRpc2sgZm9yIGJsayBkZXYgYmVsb3cgdXMgICAgICAqLwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpiZWxvd3E7CS8qIHJlcS4gcXVldWUgb2YgYmxrIGRldiBiZWxvdyB1cyAgICAqLwotCi0JLyoKLQkqKiBiaXRtYXAgYWRtaW5pc3RyYXRpb24gdG8gcmVnaXN0ZXIgd2hpY2ggYmxvY2tzIGFyZSBtb2RpZmllZAotCSovCi0JbG9uZyBpbnQJbWFwc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBiaXRtYXAgKGJ5dGVzKSAgICAgICovCi0JbG9uZyBpbnQJbWFwcmVtYWluOwkvKiByZW1haW5pbmcgYnl0ZXMgaW4gbGFzdCBiaXRtYXAgICAgKi8KLQlpbnQJCW1hcGNvdW50OyAgICAgICAvKiBudW1iZXIgb2YgYml0bWFwcyBpbiB1c2UgICAgICAgICAgKi8KLQljaGFyIAkJKiptYXBjYWNoZTsJLyogYXJlYSB3aXRoIHBvaW50ZXJzIHRvIGJpdG1hcHMgICAgICovCi0KLQljaGFyCQkqaW9idWY7CQkvKiBkYXRhYnVmZmVyIG9mIE1BUFVOSVQgYnl0ZXMgICAgICAgKi8KLQlzdHJ1Y3QgY293aGVhZAkqY293aGVhZDsJLyogYnVmZmVyIGNvbnRhaW5pbmcgY293aGVhZCAgICAgICAgICovCi0KLQkvKgotCSoqIGFkbWluaXN0cmF0aW9uIGZvciBpbnRlcmZhY2Ugd2l0aCB0aGUga2VybmVsLXRocmVhZAotCSovCi0JaW50CQlwaWQ7CQkvKiBwaWQ9PTA6IG5vIHRocmVhZCBhdmFpbGFibGUgICAgICAgKi8KLQlzdHJ1Y3QgcmVxdWVzdAkqcmVxOwkJLyogcmVxdWVzdCB0byBiZSBoYW5kbGVkIG5vdyAgICAgICAgICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7CS8qIHdhaXQtUTogdGhyZWFkIHdhaXRzIGZvciB3b3JrICAgICAqLwotCWNoYXIJCWNsb3NlZG93bjsJLyogYm9vbGVhbjogdGhyZWFkIGV4aXQgcmVxdWlyZWQgICAgICovCi0JY2hhcgkJcWZpbGxlZDsJLyogYm9vbGVhbjogSS9PIHJlcXVlc3QgcGVuZGluZyAgICAgICovCi0JY2hhcgkJaW9idXN5OwkJLyogYm9vbGVhbjogcmVxIHVuZGVyIHRyZWF0bWVudCAgICAgICovCi0KLQkvKgotCSoqIGFkbWluaXN0cmF0aW9uIHRvIGtlZXAgdHJhY2sgb2YgZnJlZSBzcGFjZSBpbiBjb3dmaWxlIGZpbGVzeXN0ZW0KLQkqLwotCXVuc2lnbmVkIGxvbmcJYmxrc2l6ZTsJLyogYmxvY2sgc2l6ZSBvZiBmcyAoYnl0ZXMpICAgICAgICAgICovCi0JdW5zaWduZWQgbG9uZwlibGt0b3RhbDsJLyogcmVjZW50IHRvdGFsIHNwYWNlIGluIGZzIChibG9ja3MpICovCi0JdW5zaWduZWQgbG9uZwlibGthdmFpbDsJLyogcmVjZW50IGZyZWUgIHNwYWNlIGluIGZzIChibG9ja3MpICovCi0KLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YXRjaHE7CS8qIHdhaXQtUTogd2F0Y2hlciBhd2FpdHMgdGhyZXNob2xkICAqLwotCXVuc2lnbmVkIGxvbmcJd2F0Y2h0aHJlc2g7CS8qIHRocmVzaG9sZCBvZiB3YXRjaGVyIChibG9ja3MpICAgICAqLwotCi0JLyoKLQkqKiBzdGF0aXN0aWNhbCBjb3VudGVycwotCSovCi0JdW5zaWduZWQgbG9uZwlyZG9yZWFkczsJLyogbnVtYmVyIG9mICByZWFkLWFjdGlvbnMgcmRvICAgICAgICovCi0JdW5zaWduZWQgbG9uZwljb3dyZWFkczsJLyogbnVtYmVyIG9mICByZWFkLWFjdGlvbnMgY293ICAgICAgICovCi0JdW5zaWduZWQgbG9uZwljb3d3cml0ZXM7CS8qIG51bWJlciBvZiB3cml0ZS1hY3Rpb25zICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJbnJjb3dibG9ja3M7CS8qIG51bWJlciBvZiBibG9ja3MgaW4gdXNlIG9uIGNvdyAgICAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjb3dsb29wX2RldmljZQkqKmNvd2RldmFsbDsJLyogcHRyIHRvIHB0cnMgdG8gYWxsIGNvd2RldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIAljb3dkZXZsb2NrOwkvKiBnZW5lcmljIGxvY2sgZm9yIGNvd2RldnMgICAgICAqLwotCi1zdGF0aWMgc3RydWN0IGdlbmRpc2sJCSpjb3djdGxnZDsJLyogZ2VuZGlzayBjb250cm9sIGNoYW5uZWwgICAgICAgKi8KLXN0YXRpYyBzcGlubG9ja190CQljb3djdGxycWxvY2s7ICAgLyogZm9yIHJlcS5xLiBvZiBjdHJsLiBjaGFubmVsICAgKi8KLQotLyoKLSoqIHByaXZhdGUgZGlyZWN0b3J5IC9wcm9jL2NvdwotKi8KLXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqY293bG9fcHJvY2RpcjsKLQotLyoKLSoqIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSovCi1zdGF0aWMgbG9uZyBpbnQgY293bG9fZG9fcmVxdWVzdCAoc3RydWN0IHJlcXVlc3QgKnJlcSk7Ci1zdGF0aWMgdm9pZAljb3dsb19zeW5jICAgICAgICh2b2lkKTsKLXN0YXRpYyBpbnQJY293bG9fY2hlY2tpbyAgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosICAgICAgICAgaW50LCBsb2ZmX3QpOwotc3RhdGljIGludAljb3dsb19yZWFkbWl4ICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgaW50CWNvd2xvX3dyaXRlbWl4ICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBsb25nIGludCBjb3dsb19yZWFkcmRvICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgbG9uZyBpbnQgY293bG9fcmVhZGNvdyAgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGxvbmcgaW50IGNvd2xvX3JlYWRjb3dyYXcgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBsb25nIGludCBjb3dsb193cml0ZWNvdyAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgbG9uZyBpbnQgY293bG9fd3JpdGVjb3dyYXcoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGludCAgICAgIGNvd2xvX2lvY3RsICAgICAgKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgZm1vZGVfdCwKLSAgICAgICAgICAgCQkJIAkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyBpbnQJY293bG9fbWFrZXBhaXIgICAgKHN0cnVjdCBjb3dwYWlyIF9fdXNlciAqKTsKLXN0YXRpYyBpbnQJY293bG9fcmVtb3ZlcGFpciAgKHVuc2lnbmVkIGxvbmcgIF9fdXNlciAqKTsKLXN0YXRpYyBpbnQJY293bG9fd2F0Y2ggICAgICAgKHN0cnVjdCBjb3dwYWlyIF9fdXNlciAqKTsKLXN0YXRpYyBpbnQJY293bG9fY293Y3RsICAgICAgKHVuc2lnbmVkIGxvbmcgIF9fdXNlciAqLCBpbnQpOwotc3RhdGljIGludAljb3dsb19vcGVucGFpciAgICAoY2hhciAqLCBjaGFyICosIGludCwgaW50KTsKLXN0YXRpYyBpbnQgCWNvd2xvX2Nsb3NlcGFpciAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50CWNvd2xvX29wZW5yZG8gICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgY2hhciAqKTsKLXN0YXRpYyBpbnQJY293bG9fb3BlbmNvdyAgICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCBjaGFyICosIGludCk7Ci1zdGF0aWMgdm9pZAljb3dsb191bmRvX29wZW5yZG8oc3RydWN0IGNvd2xvb3BfZGV2aWNlICopOwotc3RhdGljIHZvaWQJY293bG9fdW5kb19vcGVuY293KHN0cnVjdCBjb3dsb29wX2RldmljZSAqKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogU3lzdGVtIGNhbGwgaGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotKiogaGFuZGxlIHN5c3RlbSBjYWxsIG9wZW4oKS9tb3VudCgpCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludCBjb3dsb19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYmRldi0+YmRfaW5vZGU7Ci0KLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChpbWFqb3IoaW5vZGUpICE9IENPV01BSk9SKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gdW5leHBlY3RlZCBtYWpvciAlZFxuIiwgaW1ham9yKGlub2RlKSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXN3aXRjaCAoaW1pbm9yKGlub2RlKSkgewotCSAgIGNhc2UgQ09XQ1RMOgotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gb3BlbiAlZCBjb250cm9sXG4iLCBDT1dDVEwpOwotCQlicmVhazsKLQotCSAgIGRlZmF1bHQ6Ci0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBvcGVuIG1pbm9yICVkXG4iLCBpbWlub3IoaW5vZGUpKTsKLQotCQlpZiAoIGltaW5vcihpbm9kZSkgPj0gbWF4Y293cyApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQlpZiAoICEoKGNvd2RldmFsbFtpbWlub3IoaW5vZGUpXSktPnN0YXRlICYgQ09XREVWT1BFTikgKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJKGNvd2RldmFsbFtpbWlub3IoaW5vZGUpXSktPm9wZW5jbnQrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGhhbmRsZSBzeXN0ZW0gY2FsbCBjbG9zZSgpL3Vtb3VudCgpCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qLwotc3RhdGljIGludCBjb3dsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpnZCwgZm1vZGVfdCBtb2RlKQotewotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQotCWJkZXYgPSBiZGdldF9kaXNrKGdkLCAwKTsKLQlpbm9kZSA9IGJkZXYtPmJkX2lub2RlOwotCWlmICghaW5vZGUpCi0JCXJldHVybiAwOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHJlbGVhc2UgKGNsb3NlKSBtaW5vciAlZFxuIiwgaW1pbm9yKGlub2RlKSk7Ci0KLQlpZiAoIGltaW5vcihpbm9kZSkgIT0gQ09XQ1RMKQotCQkoY293ZGV2YWxsW2ltaW5vcihpbm9kZSldKS0+b3BlbmNudC0tOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBoYW5kbGUgc3lzdGVtIGNhbGwgaW9jdGwoKQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQgY293bG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IGhkX2dlb21ldHJ5CWdlbzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYmRldi0+YmRfaW5vZGU7Ci0KLQlERUJVR1AoRENPVyAiY293bG9vcCAtIGlvY3RsIGNtZCAleFxuIiwgY21kKTsKLQotCXN3aXRjaCAoIGltaW5vcihpbm9kZSkgKSB7Ci0KLQkgICAvKgotCSAgICoqIGFsbG93ZWQgdmlhIGNvbnRyb2wgZGV2aWNlIG9ubHkKLQkgICAqLwotCSAgIGNhc2UgQ09XQ1RMOgotCQlzd2l0Y2ggKGNtZCkgewotCQkgICAvKgotCQkgICAqKiB3cml0ZSBhbGwgYml0bWFwIGNodW5rcyBhbmQgY293aGVhZGVycyB0byBjb3dmaWxlcwotCQkgICAqLwotCQkgICBjYXNlIENPV1NZTkM6Ci0JCQlkb3duKCZjb3dkZXZsb2NrKTsKLQkJCWNvd2xvX3N5bmMoKTsKLQkJCXVwKCZjb3dkZXZsb2NrKTsKLQkJCXJldHVybiAwOwotCi0JCSAgIC8qCi0JCSAgICoqIG9wZW4gYSBuZXcgY293ZGV2aWNlIChwYWlyIG9mIHJkb2ZpbGUvY293ZmlsZSkKLQkJICAgKi8KLQkJICAgY2FzZSBDT1dNS1BBSVI6Ci0JCQlyZXR1cm4gY293bG9fbWFrZXBhaXIoKHZvaWQgX191c2VyICopYXJnKTsKLQotCQkgICAvKgotCQkgICAqKiBjbG9zZSBhIGNvd2RldmljZSAocGFpciBvZiByZG9maWxlL2Nvd2ZpbGUpCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XUk1QQUlSOgotCQkJcmV0dXJuIGNvd2xvX3JlbW92ZXBhaXIoKHZvaWQgX191c2VyICopYXJnKTsKLQotCQkgICAvKgotCQkgICAqKiB3YXRjaCBmcmVlIHNwYWNlIG9mIGZpbGVzeXN0ZW0gY29udGFpbmluZyBjb3dmaWxlCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XV0FUQ0g6Ci0JCQlyZXR1cm4gY293bG9fd2F0Y2goKHZvaWQgX191c2VyICopYXJnKTsKLQotCQkgICAvKgotCQkgICAqKiBjbG9zZSBjb3dmaWxlIGZvciBhY3RpdmUgZGV2aWNlCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XQ0xPU0U6Ci0JCQlyZXR1cm4gY293bG9fY293Y3RsKCh2b2lkIF9fdXNlciAqKWFyZywgQ09XQ0xPU0UpOwotCi0JCSAgIC8qCi0JCSAgICoqIHJlb3BlbiBjb3dmaWxlIHJlYWQtb25seSBmb3IgYWN0aXZlIGRldmljZQotCQkgICAqLwotCQkgICBjYXNlIENPV1JET1BFTjoKLQkJCXJldHVybiBjb3dsb19jb3djdGwoKHZvaWQgX191c2VyICopYXJnLCBDT1dSRE9QRU4pOwotCi0JCSAgIGRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSAvKiBlbmQgb2Ygc3dpdGNoIG9uIGNvbW1hbmQgKi8KLQotCSAgIC8qCi0JICAgKiogYWxsb3dlZCBmb3IgYW55IG90aGVyIGNvd2RldmljZQotCSAgICovCi0JICAgZGVmYXVsdDoKLQkJc3dpdGNoIChjbWQpIHsKLQkJICAgLyoKLQkJICAgKiogSERJT19HRVRHRU8gbXVzdCBiZSBzdXBwb3J0ZWQgZm9yIGZkaXNrLCBldGMKLQkJICAgKi8KLQkJICAgY2FzZSBIRElPX0dFVEdFTzoKLQkJCWdlby5jeWxpbmRlcnMgPSAwOwotCQkJZ2VvLmhlYWRzICAgICA9IDA7Ci0JCQlnZW8uc2VjdG9ycyAgID0gMDsKLQotCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZnZW8sIHNpemVvZiBnZW8pKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0KLQkJICAgZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9IC8qIGVuZCBvZiBzd2l0Y2ggb24gaW9jdGwtY21kIGNvZGUgcGFyYW1ldGVyICovCi0JfSAvKiBlbmQgb2Ygc3dpdGNoIG9uIG1pbm9yIG51bWJlciAqLwotfQotCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGNvd2xvX2ZvcHMgPQotewotCS5vd25lcgkgPSAgICAgVEhJU19NT0RVTEUsCi0gICAgICAgIC5vcGVuICAgID0gICAgIGNvd2xvX29wZW4sCS8qIGNhbGxlZCB1cG9uIG9wZW4gICovCi0gICAgICAgIC5yZWxlYXNlID0gICAgIGNvd2xvX3JlbGVhc2UsCS8qIGNhbGxlZCB1cG9uIGNsb3NlICovCi0gICAgICAgIC5pb2N0bCAgID0gICAgIGNvd2xvX2lvY3RsLCAgICAgLyogY2FsbGVkIHVwb24gaW9jdGwgKi8KLX07Ci0KLS8qCi0qKiBoYW5kbGUgaW9jdGwtY29tbWFuZCBDT1dNS1BBSVI6Ci0qKglvcGVuIGEgbmV3IGNvd2RldmljZSAocGFpciBvZiByZG9maWxlL2Nvd2ZpbGUpIG9uLXRoZS1mbHkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19tYWtlcGFpcihzdHJ1Y3QgY293cGFpciBfX3VzZXIgKmFyZykKLXsKLQlpbnQJCWksIHJ2PTA7Ci0Jc3RydWN0IGNvd3BhaXIJY293cGFpcjsKLQl1bnNpZ25lZCBjaGFyCSpjb3dwYXRoOwotCXVuc2lnbmVkIGNoYXIJKnJkb3BhdGg7Ci0KLQkvKgotCSoqIHJldHJpZXZlIGluZm8gYWJvdXQgcGF0aG5hbWVzCi0JKi8KLQlpZiAoIGNvcHlfZnJvbV91c2VyKCZjb3dwYWlyLCBhcmcsIHNpemVvZiBjb3dwYWlyKSApCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKCAoTUFKT1IoY293cGFpci5kZXZpY2UpICE9IENPV01BSk9SKSAmJiAoY293cGFpci5kZXZpY2UgIT0gQU5ZREVWKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCAoTUlOT1IoY293cGFpci5kZXZpY2UpID49IG1heGNvd3MpICAmJiAoY293cGFpci5kZXZpY2UgIT0gQU5ZREVWKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkqKiByZXRyaWV2ZSBwYXRobmFtZSBzdHJpbmdzCi0JKi8KLQlpZiAoIChjb3dwYWlyLmNvd2ZsZW4gPiBQQVRIX01BWCkgfHwgKGNvd3BhaXIucmRvZmxlbiA+IFBBVEhfTUFYKSApCi0JCXJldHVybiAtRU5BTUVUT09MT05HOwotCi0JaWYgKCAhKGNvd3BhdGggPSBrbWFsbG9jKGNvd3BhaXIuY293ZmxlbisxLCBHRlBfS0VSTkVMKSkgKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmICggY29weV9mcm9tX3VzZXIoY293cGF0aCwgKHZvaWQgX191c2VyICopY293cGFpci5jb3dmaWxlLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY293cGFpci5jb3dmbGVuKSApIHsKLQkJa2ZyZWUoY293cGF0aCk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQkqKGNvd3BhdGgrY293cGFpci5jb3dmbGVuKSA9IDA7Ci0KLQlpZiAoICEocmRvcGF0aCA9IGttYWxsb2MoY293cGFpci5yZG9mbGVuKzEsIEdGUF9LRVJORUwpKSApIHsKLQkJa2ZyZWUoY293cGF0aCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWlmICggY29weV9mcm9tX3VzZXIocmRvcGF0aCwgKHZvaWQgX191c2VyICopY293cGFpci5yZG9maWxlLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY293cGFpci5yZG9mbGVuKSApIHsKLQkJa2ZyZWUocmRvcGF0aCk7Ci0JCWtmcmVlKGNvd3BhdGgpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JKihyZG9wYXRoK2Nvd3BhaXIucmRvZmxlbikgPSAwOwotCi0JLyoKLQkqKiBvcGVuIG5ldyBjb3dkZXZpY2UKLQkqLwotCWlmICggY293cGFpci5kZXZpY2UgPT0gQU5ZREVWKSB7Ci0JCS8qCi0JCSoqIHNlYXJjaCBmaXJzdCB1bnVzZWQgbWlub3IKLQkJKi8KLQkJZm9yIChpPTAsIHJ2PS1FQlVTWTsgaSA8IG1heGNvd3M7IGkrKykgewotCQkJaWYgKCAhKChjb3dkZXZhbGxbaV0pLT5zdGF0ZSAmIENPV0RFVk9QRU4pICkgewotCQkJCXJ2ID0gY293bG9fb3BlbnBhaXIocmRvcGF0aCwgY293cGF0aCwgMCwgaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocnYpIHsgCQkvKiBvcGVuIGZhaWxlZD8gKi8KLQkJCWtmcmVlKHJkb3BhdGgpOwotCQkJa2ZyZWUoY293cGF0aCk7Ci0JCQlyZXR1cm4gcnY7Ci0JCX0KLQotCQkvKgotCQkqKiByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGNvd2RldmljZSB0byB1c2VyIHNwYWNlCi0JCSovCi0JCWNvd3BhaXIuZGV2aWNlID0gTUtERVYoQ09XTUFKT1IsIGkpOwotCi0JCWlmICggY29weV90b191c2VyKGFyZywgJmNvd3BhaXIsIHNpemVvZiBjb3dwYWlyKSkgewotCQkJa2ZyZWUocmRvcGF0aCk7Ci0JCQlrZnJlZShjb3dwYXRoKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfSBlbHNlIHsgCQkvKiBzcGVjaWZpYyBtaW5vciByZXF1ZXN0ZWQgKi8KLQkJaWYgKCAocnYgPSBjb3dsb19vcGVucGFpcihyZG9wYXRoLCBjb3dwYXRoLCAwLAotCQkJCQkJTUlOT1IoY293cGFpci5kZXZpY2UpKSkpIHsKLQkJCWtmcmVlKHJkb3BhdGgpOwotCQkJa2ZyZWUoY293cGF0aCk7Ci0JCQlyZXR1cm4gcnY7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGhhbmRsZSBpb2N0bC1jb21tYW5kIENPV1JNUEFJUjoKLSoqIAlkZWFjdGl2YXRlIGFuIGV4aXN0aW5nIGNvd2RldmljZSAocGFpciBvZiByZG9maWxlL2Nvd2ZpbGUpIG9uLXRoZS1mbHkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19yZW1vdmVwYWlyKHVuc2lnbmVkIGxvbmcgX191c2VyICphcmcpCi17Ci0JdW5zaWduZWQgbG9uZwkJY293ZGV2aWNlOwotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2OwotCi0JLyoKLQkqKiByZXRyaWV2ZSBpbmZvIGFib3V0IGRldmljZSB0byBiZSByZW1vdmVkCi0JKi8KLQlpZiAoIGNvcHlfZnJvbV91c2VyKCZjb3dkZXZpY2UsIGFyZywgc2l6ZW9mIGNvd2RldmljZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyoKLQkqKiB2ZXJpZnkgbWFqb3ItbWlub3IgbnVtYmVyCi0JKi8KLQlpZiAoIE1BSk9SKGNvd2RldmljZSkgIT0gQ09XTUFKT1IpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCBNSU5PUihjb3dkZXZpY2UpID49IG1heGNvd3MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY293ZGV2ID0gY293ZGV2YWxsW01JTk9SKGNvd2RldmljZSldOwotCi0JaWYgKCAhKGNvd2Rldi0+c3RhdGUgJiBDT1dERVZPUEVOKSApCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyoKLQkqKiBzeW5jaHJvbml6ZSBiaXRtYXBzIGFuZCBjbG9zZSBjb3dkZXZpY2UKLQkqLwotCWlmIChjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSB7Ci0JCWRvd24oJmNvd2RldmxvY2spOwotCQljb3dsb19zeW5jKCk7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQl9Ci0KLQlyZXR1cm4gY293bG9fY2xvc2VwYWlyKGNvd2Rldik7Ci19Ci0KLS8qCi0qKiBoYW5kbGUgaW9jdGwtY29tbWFuZCBDT1dXQVRDSDoKLSoqCXdhdGNoIHRoZSBmcmVlIHNwYWNlIG9mIHRoZSBmaWxlc3lzdGVtIGNvbnRhaW5pbmcgYSBjb3dmaWxlCi0qKiAgICAgIG9mIGFuIG9wZW4gY293ZGV2aWNlCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fd2F0Y2goc3RydWN0IGNvd3BhaXIgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXY7Ci0Jc3RydWN0IGNvd3dhdGNoCQljb3d3YXRjaDsKLQotCS8qCi0JKiogcmV0cmlldmUgc3RydWN0dXJlIGhvbGRpbmcgaW5mbwotCSovCi0JaWYgKCBjb3B5X2Zyb21fdXNlcigmY293d2F0Y2gsIGFyZywgc2l6ZW9mIGNvd3dhdGNoKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSoqIHZlcmlmeSBpZiBjb3dkZXZpY2UgZXhpc3RzIGFuZCBpcyBjdXJyZW50bHkgb3BlbgotCSovCi0JaWYgKCBNSU5PUihjb3d3YXRjaC5kZXZpY2UpID49IG1heGNvd3MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY293ZGV2ID0gY293ZGV2YWxsW01JTk9SKGNvd3dhdGNoLmRldmljZSldOwotCi0JaWYgKCAhKGNvd2Rldi0+c3RhdGUgJiBDT1dERVZPUEVOKSApCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyoKLQkqKiBpZiB0aGUgV0FUQ0hXQUlULW9wdGlvbiBpcyBzZXQsIHdhaXQgdW50aWwgdGhlIGluZGljYXRlZAotCSoqIHRocmVzaG9sZCBpcyByZWFjaGVkIChvbmx5IG9uZSB3YWl0ZXIgYWxsb3dlZCkKLQkqLwotCWlmIChjb3d3YXRjaC5mbGFncyAmIFdBVENIV0FJVCkgewotCQkvKgotCQkqKiBjaGVjayBpZiBhbHJlYWR5IGFub3RoZXIgd2FpdGVyIGFjdGl2ZQotCQkqKiBmb3IgdGhpcyBjb3dkZXZpY2UKLQkJKi8KLQkJaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dXQVRDSERPRykKLQkJCXJldHVybiAtRUFHQUlOOwotCi0JCWNvd2Rldi0+c3RhdGUgfD0gQ09XV0FUQ0hET0c7Ci0KLQkJY293ZGV2LT53YXRjaHRocmVzaCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCSAgICAgICAgICAgICAgICAgICAgICBjb3d3YXRjaC50aHJlc2hvbGQgLwotCQkJCSAgICAgIChjb3dkZXYtPmJsa3NpemUgLyAxMDI0KTsKLQotCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNvd2Rldi0+d2F0Y2hxLAotCQkgICAgICAgICAgICAgICAgICAgIGNvd2Rldi0+d2F0Y2h0aHJlc2ggPj0gY293ZGV2LT5ibGthdmFpbCkpIHsKLQkJCWNvd2Rldi0+c3RhdGUgJj0gfkNPV1dBVENIRE9HOwotCQkJcmV0dXJuIEVJTlRSOwotCQl9Ci0KLQkJY293ZGV2LT5zdGF0ZSAmPSB+Q09XV0FUQ0hET0c7Ci0JfQotCi0JY293d2F0Y2gudG90YWxrYiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY293ZGV2LT5ibGt0b3RhbCAqCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY293ZGV2LT5ibGtzaXplIC8gMTAyNDsKLQljb3d3YXRjaC5hdmFpbGtiID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljb3dkZXYtPmJsa2F2YWlsICoKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3dkZXYtPmJsa3NpemUgLyAxMDI0OwotCi0JaWYgKCBjb3B5X3RvX3VzZXIoYXJnLCAmY293d2F0Y2gsIHNpemVvZiBjb3d3YXRjaCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBoYW5kbGUgaW9jdGwtY29tbWFuZHMgQ09XQ0xPU0UgYW5kIENPV1JET1BFTjoKLSoqCUNPV0NMT1NFICAtIGNsb3NlIHRoZSBjb3dmaWxlIHdoaWxlIHRoZSBjb3dkZXZpY2UgcmVtYWlucyBvcGVuOwotKiogICAgICAgICAgICAgICAgICB0aGlzIGFsbG93cyBhbiB1bm1vdW50IG9mIHRoZSBmaWxlc3lzdGVtIG9uIHdoaWNoCi0qKiAgICAgICAgICAgICAgICAgIHRoZSBjb3dmaWxlIHJlc2lkZXMKLSoqCUNPV1JET1BFTiAtIGNsb3NlIHRoZSBjb3dmaWxlIGFuZCByZW9wZW4gaXQgZm9yIHJlYWQtb25seTsKLSoqICAgICAgICAgICAgICAgICAgdGhpcyBhbGxvd3MgYSByZW1vdW50IHJlYWQtb255IG9mIHRoZSBmaWxlc3lzdGVtCi0qKiAgICAgICAgICAgICAgICAgIG9uIHdoaWNoIHRoZSBjb3dmaWxlIHJlc2lkZXMKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19jb3djdGwodW5zaWduZWQgbG9uZyBfX3VzZXIgKmFyZywgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldjsKLQl1bnNpZ25lZCBsb25nCQljb3dkZXZpY2U7Ci0KLQkvKgotCSoqIHJldHJpZXZlIGluZm8gYWJvdXQgZGV2aWNlIHRvIGJlIHJlbW92ZWQKLQkqLwotCWlmICggY29weV9mcm9tX3VzZXIoJmNvd2RldmljZSwgYXJnLCBzaXplb2YgY293ZGV2aWNlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSoqIHZlcmlmeSBtYWpvci1taW5vciBudW1iZXIKLQkqLwotCWlmICggTUFKT1IoY293ZGV2aWNlKSAhPSBDT1dNQUpPUikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIE1JTk9SKGNvd2RldmljZSkgPj0gbWF4Y293cykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljb3dkZXYgPSBjb3dkZXZhbGxbTUlOT1IoY293ZGV2aWNlKV07Ci0KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4pICkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKgotCSoqIHN5bmNocm9uaXplIGJpdG1hcHMgYW5kIGNsb3NlIGNvd2ZpbGUKLQkqLwotCWlmIChjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSB7Ci0JCWRvd24oJmNvd2RldmxvY2spOwotCQljb3dsb19zeW5jKCk7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQl9Ci0KLQkvKgotCSoqIGhhbmRsZSBzcGVjaWZpYyBpb2N0bC1jb21tYW5kCi0JKi8KLQlzd2l0Y2ggKGNtZCkgewotCSAgIGNhc2UgQ09XUkRPUEVOOgotCQkvKgotCQkqKiBpZiB0aGUgY293ZmlsZSBpcyBzdGlsbCBvcGVuZWQgcmVhZC13cml0ZQotCQkqLwotCQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTikgewotCQkJLyoKLQkJCSoqIGNsb3NlIHRoZSBjb3dmaWxlCi0JCQkqLwotICAJCQlpZiAoY293ZGV2LT5jb3dmcCkKLQkJICAJCWZpbHBfY2xvc2UoY293ZGV2LT5jb3dmcCwgMCk7Ci0KLQkJCWNvd2Rldi0+c3RhdGUgJj0gfkNPV1JXQ09XT1BFTjsKLQotCQkJLyoKLQkJCSoqIG9wZW4gYWdhaW4gZm9yIHJlYWQtb25seQotCQkJKi8KLQkJCWNvd2Rldi0+Y293ZnAgPSBmaWxwX29wZW4oY293ZGV2LT5jb3duYW1lLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgIE9fUkRPTkxZfE9fTEFSR0VGSUxFLCAwNjAwKTsKLQotCQkJaWYgKCAoY293ZGV2LT5jb3dmcCA9PSBOVUxMKSB8fCBJU19FUlIoY293ZGV2LT5jb3dmcCkgKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAiY293bG9vcCAtIGZhaWxlZCB0byByZW9wZW4gY293ZmlsZSAlc1xuIiwKLQkJCQkgICAgIGNvd2Rldi0+Y293bmFtZSk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkqKiBtYXJrIGNvd2ZpbGUgb3BlbiBmb3IgcmVhZC1vbmx5Ci0JCQkqLwotCQkJY293ZGV2LT5zdGF0ZSB8PSBDT1dSRENPV09QRU47Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQotCSAgIGNhc2UgQ09XQ0xPU0U6Ci0JCS8qCi0JCSoqIGlmIHRoZSBjb3dmaWxlIGlzIHN0aWxsIG9wZW4KLQkJKi8KLQkJaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dDT1dPUEVOKSB7Ci0JCQkvKgotCQkJKiogY2xvc2UgdGhlIGNvd2ZpbGUKLQkJCSovCi0gIAkJCWlmIChjb3dkZXYtPmNvd2ZwKQotCQkgIAkJZmlscF9jbG9zZShjb3dkZXYtPmNvd2ZwLCAwKTsKLQotCQkJY293ZGV2LT5zdGF0ZSAmPSB+Q09XQ09XT1BFTjsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEhhbmRsaW5nIG9mIEkvTy1yZXF1ZXN0cyBmb3IgYSBjb3dkZXZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSoqIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBieSBjb3JlLWtlcm5lbCB0byBoYW5kbGUgdGhlIEkvTy1yZXF1ZXN0cwotKiogaW4gdGhlIHF1ZXVlCi0qLwotc3RhdGljIHZvaWQgY293bG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKLXsKLQlzdHJ1Y3QgcmVxdWVzdAkJKnJlcTsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldjsKLQotCURFQlVHUChEQ09XICJjb3dsb29wIC0gcmVxdWVzdCBmdW5jdGlvbiBjYWxsZWQuLi4uXG4iKTsKLQotCXdoaWxlKChyZXEgPSBibGtfcGVla19yZXF1ZXN0KHEpKSAhPSBOVUxMKSB7Ci0JCURFQlVHUChEQ09XICJjb3dsb29wIC0gZ290IG5leHQgcmVxdWVzdFxuIik7Ci0KLQkJaWYgKCEgYmxrX2ZzX3JlcXVlc3QocmVxKSkgewotICAgICAgICAgICAgICAgCQkgLyogdGhpcyBpcyBub3QgYSBub3JtYWwgZmlsZSBzeXN0ZW0gcmVxdWVzdCAqLwotICAgICAgICAgICAgICAgIAlfX2Jsa19lbmRfcmVxdWVzdF9jdXIocmVxLCAtRUlPKTsKLSAgICAgICAgICAgICAgICAJY29udGludWU7Ci0gICAgICAgIAl9Ci0JCWNvd2RldiA9IHJlcS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JCWlmIChjb3dkZXYtPmlvYnVzeSkKLQkJCXJldHVybjsKLQkJZWxzZQotCQkJY293ZGV2LT5pb2J1c3kgPSAxOwotCi0JCS8qCi0JCSoqIHdoZW4gbm8ga2VybmVsLXRocmVhZCBpcyBhdmFpbGFibGUsIHRoZSByZXF1ZXN0IHdpbGwKLQkJKiogcHJvZHVjZSBhbiBJL08tZXJyb3IKLQkJKi8KLQkJaWYgKCFjb3dkZXYtPnBpZCkgewotCQkJcHJpbnRrKEtFUk5fRVJSImNvd2xvb3AgLSBubyB0aHJlYWQgYXZhaWxhYmxlXG4iKTsKLQkJCV9fYmxrX2VuZF9yZXF1ZXN0X2N1cihyZXEsIC1FSU8pOwkvKiByZXF1ZXN0IGZhaWxlZCAqLwotCQkJY293ZGV2LT5pb2J1c3kJPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkqKiBoYW5kbGUgSS9PLXJlcXVlc3QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGtlcm5lbC10aHJlYWQKLQkJKi8KLQkJY293ZGV2LT5yZXEgCT0gcmVxOwotCQljb3dkZXYtPnFmaWxsZWQJPSAxOwotCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKCZjb3dkZXYtPndhaXRxKTsKLQotCQkvKgotCQkqKiBnZXQgb3V0IG9mIHRoaXMgZnVuY3Rpb24gbm93IHdoaWxlIHRoZSBJL08tcmVxdWVzdCBpcwotCQkqKiB1bmRlciB0cmVhdG1lbnQgb2YgdGhlIGtlcm5lbC10aHJlYWQ7IHRoaXMgZnVuY3Rpb24KLQkJKiogd2lsbCBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgdGhlIGN1cnJlbnQgSS9PLXJlcXVlc3QgaGFzCi0JCSoqIGJlZW4gZmluaXNoZWQgYnkgdGhlIHRocmVhZAotCQkqLwotCQlyZXR1cm47Ci0JfQotfQotCi0vKgotKiogZGFlbW9uLXByb2Nlc3MgKGtlcm5lbC10aHJlYWQpIGV4ZWN1dGVzIHRoaXMgZnVuY3Rpb24KLSovCi1zdGF0aWMgaW50Ci1jb3dsb19kYWVtb24oc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYpCi17Ci0JaW50CXJ2OwotCWludCAgICAgbWlub3I7Ci0JY2hhcglteW5hbWVbMTZdOwotCi0JZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgbWF4Y293czsgbWlub3IrKykgewotCQlpZiAoY293ZGV2ID09IGNvd2RldmFsbFttaW5vcl0pIGJyZWFrOwotCX0KLQlzcHJpbnRmKG15bmFtZSwgImNvd2xvb3BkJWQiLCBtaW5vcik7Ci0KLSAgICAgICAgZGFlbW9uaXplKG15bmFtZSk7Ci0KLQl3aGlsZSAoIWNvd2Rldi0+Y2xvc2Vkb3duKSB7Ci0JCS8qCi0JCSoqIHNsZWVwIHdoaWxlIHdhaXRpbmcgZm9yIGFuIEkvTyByZXF1ZXN0OwotCQkqKiBub3RlIHRoYXQgbm8gbm9uLWludGVycnVwdGlibGUgd2FpdCBoYXMgYmVlbiB1c2VkCi0JCSoqIGJlY2F1c2UgdGhlIG5vbi1pbnRlcnJ1cHRpYmxlIHZlcnNpb24gb2YKLQkJKiogYSAqc3luY2hyb25vdXMqIHdha2VfdXAgZG9lcyBub3QgZXhpc3QgKGFueSBtb3JlKQotCQkqLwotCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNvd2Rldi0+d2FpdHEsIGNvd2Rldi0+cWZpbGxlZCkpewotCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsgLyogaWdub3JlIHNpZ25hbC1iYXNlZCB3YWtldXAgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGNvd2Rldi0+Y2xvc2Vkb3duKQkJLyogbW9kdWxlIHdpbGwgYmUgdW5sb2FkZWQgPyAqL3sKLQkJCWNvd2Rldi0+cGlkID0gMDsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyoKLQkJKiogd29rZW4gdXAgYnkgdGhlIEkvTy1yZXF1ZXN0IGhhbmRsZXI6CXRyZWF0IHJlcXVlc3RlZCBJL08KLQkJKi8KLQkJY293ZGV2LT5xZmlsbGVkID0gMDsKLQotCQlydiA9IGNvd2xvX2RvX3JlcXVlc3QoY293ZGV2LT5yZXEpOwotCi0JCS8qCi0JCSoqIHJlYWNxdWlyZSB0aGUgcXVldWUtc3BpbmxvY2sgZm9yIG1hbmlwdWxhdGluZwotCQkqKiB0aGUgcmVxdWVzdC1xdWV1ZSBhbmQgZGVxdWV1ZSB0aGUgcmVxdWVzdAotCQkqLwotCQlzcGluX2xvY2tfaXJxKCZjb3dkZXYtPnJxbG9jayk7Ci0KLQkJX19ibGtfZW5kX3JlcXVlc3RfY3VyKGNvd2Rldi0+cmVxLCBydik7Ci0JCWNvd2Rldi0+aW9idXN5ID0gMDsKLQotCQkvKgotCQkqKiBpbml0aWF0ZSB0aGUgbmV4dCByZXF1ZXN0IGZyb20gdGhlIHF1ZXVlCi0JCSovCi0JCWNvd2xvX3JlcXVlc3QoY293ZGV2LT5ycXVldWUpOwotCi0JCXNwaW5fdW5sb2NrX2lycSgmY293ZGV2LT5ycWxvY2spOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUga2VybmVsIHRocmVhZAotKiogdG8gaGFuZGxlIHRoZSBxdWV1ZWQgSS9PLXJlcXVlc3RzCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBmYWlsCi0qKiAgICAgIDEgICAtIHN1Y2Nlc3MKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX2RvX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSkKLXsKLQl1bnNpZ25lZCBsb25nCQlsZW47Ci0JbG9uZyBpbnQJCXJ2OwotCWxvZmZfdCAJCQlvZmZzZXQ7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXYgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKLQotCS8qCi0JKiogY2FsY3VsYXRlIHNvbWUgdmFyaWFibGVzIHdoaWNoIGFyZSBuZWVkZWQgbGF0ZXIgb24KLQkqLwotCWxlbiAgICAgPSAgICAgICAgICBibGtfcnFfY3VyX3NlY3RvcnMocmVxKSA8PCA5OwotCW9mZnNldCAgPSAobG9mZl90KSBibGtfcnFfcG9zKHJlcSkgICAgICAgICA8PCA5OwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHJlcSBjbWQ9JWQgb2Zmc2V0PSVsbGQgbGVuPSVsdSBhZGRyPSVwXG4iLAotCQkJCSoocmVxLT5jbWQpLCBvZmZzZXQsIGxlbiwgcmVxLT5idWZmZXIpOwotCi0JLyoKLQkqKiBoYW5kbGUgUkVBRC0gb3IgV1JJVEUtcmVxdWVzdAotCSovCi0Jc3dpdGNoIChycV9kYXRhX2RpcihyZXEpKSB7Ci0JICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JICAgY2FzZSBSRUFEOgotCQlzd2l0Y2ggKCBjb3dsb19jaGVja2lvKGNvd2RldiwgbGVuLCBvZmZzZXQpICkgewotCQkgICBjYXNlIEFMTENPVzoKLQkJCXJ2ID0gY293bG9fcmVhZGNvdyhjb3dkZXYsIHJlcS0+YnVmZmVyLCBsZW4sIG9mZnNldCk7Ci0JCQlicmVhazsKLQotCQkgICBjYXNlIEFMTFJETzoKLQkJCXJ2ID0gY293bG9fcmVhZHJkbyhjb3dkZXYsIHJlcS0+YnVmZmVyLCBsZW4sIG9mZnNldCk7Ci0JCQlicmVhazsKLQotCSAgIAkgICBjYXNlIE1JWEVEVVA6Ci0JCQlydiA9IGNvd2xvX3JlYWRtaXgoY293ZGV2LCByZXEtPmJ1ZmZlciwgbGVuLCBvZmZzZXQpOwotCQkJYnJlYWs7Ci0KLQkJICAgZGVmYXVsdDoKLQkJCXJ2ID0gMDsJLyogbmV2ZXIgaGFwcGVucyAqLwotCQl9Ci0JCWJyZWFrOwotCi0JICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JICAgY2FzZSBXUklURToKLQkJc3dpdGNoICggY293bG9fY2hlY2tpbyhjb3dkZXYsIGxlbiwgb2Zmc2V0KSApIHsKLQkJICAgY2FzZSBBTExDT1c6Ci0JCQkvKgotCQkJKiogc3RyYWlnaHQtZm9yd2FyZCB3cml0ZSB3aWxsIGRvLi4uCi0JCQkqLwotCQkJREVCVUdQKERDT1ciY293bG9vcCAtIHdyaXRlIHN0cmFpZ2h0ICIpOwotCi0JCQlydiA9IGNvd2xvX3dyaXRlY293KGNvd2RldiwgcmVxLT5idWZmZXIsIGxlbiwgb2Zmc2V0KTsKLQkJCWJyZWFrOwkvKiBmcm9tIHN3aXRjaCAqLwotCi0JCSAgIGNhc2UgQUxMUkRPOgotCQkJaWYgKCAobGVuICYgTVVNQVNLKSA9PSAwKSB7Ci0JCQkJREVCVUdQKERDT1ciY293bG9vcCAtIHdyaXRlIHN0cmFpZ2h0ICIpOwotCi0JCQkJcnYgPSBjb3dsb193cml0ZWNvdyhjb3dkZXYsIHJlcS0+YnVmZmVyLAotCQkJCQkJCQlsZW4sIG9mZnNldCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkgICAJICAgY2FzZSBNSVhFRFVQOgotCQkJcnYgPSBjb3dsb193cml0ZW1peChjb3dkZXYsIHJlcS0+YnVmZmVyLCBsZW4sIG9mZnNldCk7Ci0JCQlicmVhazsKLQotCQkgICBkZWZhdWx0OgotCQkJcnYgPSAwOwkvKiBuZXZlciBoYXBwZW5zICovCi0JCX0KLQkJYnJlYWs7Ci0KLQkgICBkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gdW5yZWNvZ25pemVkIGNvbW1hbmQgJWRcbiIsICoocmVxLT5jbWQpKTsKLQkJcnYgPSAwOwotCX0KLQotCXJldHVybiAocnYgPD0gMCA/IDAgOiAxKTsKLX0KLQotLyoKLSoqIGNoZWNrIGZvciBhIGdpdmVuIEkvTy1yZXF1ZXN0IGlmIGFsbCB1bmRlcmx5aW5nIGJsb2NrcwotKiogKHdpdGggc2l6ZSBNQVBVTklUKSBhcmUgZWl0aGVyIGluIHRoZSByZWFkLW9ubHkgZmlsZSBvciBpbgotKiogdGhlIGNvd2ZpbGUgKG9yIGEgY29tYmluYXRpb24gb2YgdGhlIHR3bykKLSoqCi0qKiByZXR1cm5zOgotKiogCUFMTFJETyAgLSBhbGwgdW5kZXJseWluZyBibG9ja3MgaW4gcmRvZmlsZQotKiogICAgICBBTExDT1cgIC0gYWxsIHVuZGVybHlpbmcgYmxvY2tzIGluIGNvd2ZpbGUKLSoqICAgICAgTUlYRURVUCAtIHVuZGVybHlpbmcgYmxvY2tzIHBhcnRseSBpbiByZG9maWxlIGFuZCBwYXJ0bHkgaW4gY293ZmlsZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX2NoZWNraW8oc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JdW5zaWduZWQgbG9uZwltYXBudW0sIGJ5dGVudW0sIGJpdG51bSwgYmxvY2tuciwgcGFydGxlbjsKLQlsb25nIGludAl0b3RjbnQsIGNvd2NudDsKLQljaGFyCQkqbWM7Ci0KLQkvKgotCSoqIG5vdGljZSB0aGF0IHRoZSByZXF1ZXN0ZWQgYmxvY2sgbWlnaHQgY3Jvc3MKLQkqKiBhIGJsb2Nrc2l6ZSBib3VuZGFyeSB3aGlsZSBvbmUgb2YgdGhlIGNvbmNlcm5lZAotCSoqIGJsb2NrcyByZXNpZGVzIGluIHRoZSByZWFkLW9ubHkgZmlsZSBhbmQgYW5vdGhlcgotCSoqIG9uZSBpbiB0aGUgY29weS1vbi13cml0ZSBmaWxlOyBpbiB0aGF0IGNhc2UgdGhlCi0gICAgICAgICoqIHJlcXVlc3Qgd2lsbCBiZSBicm9rZW4gdXAgaW50byBwaWVjZXMKLQkqLwotCWlmICggKGxlbiA8PSBNQVBVTklUKSAmJgotCSAgICAgKE1BUFVOSVQgLSAob2Zmc2V0ICYgTVVNQVNLKSA8PSBsZW4pICkgewotCQkvKgotCQkqKiBlYXN5IHNpdHVhdGlvbjoKLQkJKiogcmVxdWVzdGVkIGRhdGEtYmxvY2sgZW50aXJlbHkgZml0cyB3aXRoaW4KLQkJKiogdGhlIG1hcHVuaXQgdXNlZCBmb3IgdGhlIGJpdG1hcAotCQkqKiBjaGVjayBpZiB0aGF0IGJsb2NrIGlzIGxvY2F0ZWQgaW4gcmRvZmlsZSBvcgotCQkqKiBjb3dmaWxlCi0JCSovCi0JCWJsb2NrbnIgPSBvZmZzZXQgPj4gTVVTSElGVDsKLQotCQltYXBudW0gID0gQ0FMQ01BUCAoYmxvY2tucik7Ci0JCWJ5dGVudW0gPSBDQUxDQllURShibG9ja25yKTsKLQkJYml0bnVtICA9IENBTENCSVQgKGJsb2NrbnIpOwotCi0JCWlmICgqKCooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pK2J5dGVudW0pJigxPDxiaXRudW0pKQotCQkJcmV0dXJuIEFMTENPVzsKLQkJZWxzZQotCQkJcmV0dXJuIEFMTFJETzsKLQl9Ci0KLQkvKgotCSoqIGxlc3MgZWFzeSBzaXR1YXRpb246Ci0JKiogdGhlIHJlcXVlc3RlZCBkYXRhLWJsb2NrIGRvZXMgbm90IGZpdCB3aXRoaW4gdGhlIG1hcHVuaXQKLQkqKiB1c2VkIGZvciB0aGUgYml0bWFwCi0JKiogY2hlY2sgaWYgKmFsbCogdW5kZXJseWluZyBibG9ja3MgaW52b2x2ZWQgcmVzaWRlIG9uIHRoZSByZG9maWxlCi0gICAgICAgCSoqIG9yIHRoZSBjb3dmaWxlIChzbyBzdGlsbCBubyBicmVha3VwIHJlcXVpcmVkKQotCSovCi0JZm9yIChjb3djbnQ9dG90Y250PTA7IGxlbiA+IDA7IGxlbi09cGFydGxlbiwgb2Zmc2V0Kz1wYXJ0bGVuLCB0b3RjbnQrKyl7Ci0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBibG9ja25yIG9mIGludm9sdmVkIGJsb2NrCi0JCSovCi0JCWJsb2NrbnIgPSBvZmZzZXQgPj4gTVVTSElGVDsKLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgcGFydGlhbCBsZW5ndGggZm9yIHRoaXMgdHJhbnNmZXIKLQkJKi8KLQkJcGFydGxlbiA9IE1BUFVOSVQgLSAob2Zmc2V0ICYgTVVNQVNLKTsKLQkJaWYgKHBhcnRsZW4gPiBsZW4pCi0JCQlwYXJ0bGVuID0gbGVuOwotCi0JCS8qCi0JCSoqIGlzIHRoaXMgYmxvY2sgbG9jYXRlZCBpbiB0aGUgY293ZmlsZQotCQkqLwotCQltYXBudW0gID0gQ0FMQ01BUCAoYmxvY2tucik7Ci0JCWJ5dGVudW0gPSBDQUxDQllURShibG9ja25yKTsKLQkJYml0bnVtICA9IENBTENCSVQgKGJsb2NrbnIpOwotCi0JCW1jCT0gKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSk7Ci0KLQkJaWYgKCoobWMrYnl0ZW51bSkmKDE8PGJpdG51bSkpCi0JCQljb3djbnQrKzs7Ci0KLQkJREVCVUdQKERDT1cKLQkJICAgICAgICJjb3dsb29wIC0gY2hlY2sgJWx1IC0gbWFwICVsdSwgYnl0ZSAlbHUsIGJpdCAlbHUsICIKLQkJICAgICAgICJjb3djbnQgJWxkLCB0b3RjbnQgJWxkICUwMnggJXBcbiIsCi0JCQlibG9ja25yLCBtYXBudW0sIGJ5dGVudW0sIGJpdG51bSwgY293Y250LCB0b3RjbnQsCi0JCQkqKG1jK2J5dGVudW0pLCBtYyk7Ci0JfQotCi0JaWYgKGNvd2NudCA9PSAwKQkvKiBhbGwgaW52b2x2ZWQgYmxvY2tzIG9uIHJkb2ZpbGU/ICovCi0JCXJldHVybiBBTExSRE87Ci0KLQlpZiAoY293Y250ID09IHRvdGNudCkJLyogYWxsIGludm9sdmVkIGJsb2NrcyBvbiBjb3dmaWxlPyAqLwotCQlyZXR1cm4gQUxMQ09XOwotCi0JLyoKLQkqKiBzaXR1YXRpb24gc29tZXdoYXQgbW9yZSBjb21wbGljYXRlZDoKLQkqKiBpbnZvbHZlZCB1bmRlcmx5aW5nIGJsb2NrcyBzcHJlYWQgb3ZlciBib3RoIGZpbGVzCi0JKi8KLQlyZXR1cm4gTUlYRURVUDsKLX0KLQotLyoKLSoqIHJlYWQgcmVxdWVzdGVkIGNodW5rIHBhcnRseSBmcm9tIHJkb2ZpbGUgYW5kIHBhcnRseSBmcm9tIGNvd2ZpbGUKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIGZhaWwKLSoqICAgICAgMSAgIC0gc3VjY2VzcwotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX3JlYWRtaXgoc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQl1bnNpZ25lZCBsb25nCW1hcG51bSwgYnl0ZW51bSwgYml0bnVtLCBibG9ja25yLCBwYXJ0bGVuOwotCWxvbmcgaW50CXJ2OwotCWNoYXIJCSptYzsKLQotCS8qCi0JKiogY29tcGxpY2F0ZWQgYXBwcm9hY2g6IGJyZWFrdXAgcmVxdWlyZWQgb2YgcmVhZC1yZXF1ZXN0Ci0JKi8KLQlmb3IgKHJ2PTE7IGxlbiA+IDA7IGxlbi09cGFydGxlbiwgYnVmKz1wYXJ0bGVuLCBvZmZzZXQrPXBhcnRsZW4pIHsKLQkJLyoKLQkJKiogY2FsY3VsYXRlIGJsb2NrbnIgb2YgZW50aXJlIGJsb2NrCi0JCSovCi0JCWJsb2NrbnIgPSBvZmZzZXQgPj4gTVVTSElGVDsKLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgcGFydGlhbCBsZW5ndGggZm9yIHRoaXMgdHJhbnNmZXIKLQkJKi8KLQkJcGFydGxlbiA9IE1BUFVOSVQgLSAob2Zmc2V0ICYgTVVNQVNLKTsKLQkJaWYgKHBhcnRsZW4gPiBsZW4pCi0JCQlwYXJ0bGVuID0gbGVuOwotCi0JCS8qCi0JCSoqIGlzIHRoaXMgYmxvY2sgbG9jYXRlZCBpbiB0aGUgY293ZmlsZQotCQkqLwotCQltYXBudW0gID0gQ0FMQ01BUCAoYmxvY2tucik7Ci0JCWJ5dGVudW0gPSBDQUxDQllURShibG9ja25yKTsKLQkJYml0bnVtICA9IENBTENCSVQgKGJsb2NrbnIpOwotCQltYwk9ICooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pOwotCi0JCWlmICgqKG1jK2J5dGVudW0pJigxPDxiaXRudW0pKSB7Ci0JCQkvKgotCQkJKiogcmVhZCAocGFydGlhbCkgYmxvY2sgZnJvbSBjb3dmaWxlCi0JCQkqLwotCQkJREVCVUdQKERDT1ciY293bG9vcCAtIHNwbGl0IHJlYWQgIgotCQkJCSJjb3cgcGFydGxlbj0lbGQgb2ZmPSVsbGRcbiIsIHBhcnRsZW4sIG9mZnNldCk7Ci0KLQkJCWlmIChjb3dsb19yZWFkY293KGNvd2RldiwgYnVmLCBwYXJ0bGVuLCBvZmZzZXQpIDw9IDApCi0JCQkJcnYgPSAwOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSoqIHJlYWQgKHBhcnRpYWwpIGJsb2NrIGZyb20gcmRvZmlsZQotCQkJKi8KLQkJCURFQlVHUChEQ09XImNvd2xvb3AgLSBzcGxpdCByZWFkICIKLQkJCQkicmRvIHBhcnRsZW49JWxkIG9mZj0lbGxkXG4iLCBwYXJ0bGVuLCBvZmZzZXQpOwotCi0JCQlpZiAoY293bG9fcmVhZHJkbyhjb3dkZXYsIGJ1ZiwgcGFydGxlbiwgb2Zmc2V0KSA8PSAwKQotCQkJCXJ2ID0gMDsKLQkJfQotCX0KLQotCXJldHVybiBydjsKLX0KLQotLyoKLSoqIGNodW5rIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNvd2ZpbGUgbmVlZHMgcGllY2VzIHRvIGJlCi0qKiByZWFkIGZyb20gdGhlIHJkb2ZpbGUKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIGZhaWwKLSoqICAgICAgMSAgIC0gc3VjY2VzcwotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX3dyaXRlbWl4KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCB2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JdW5zaWduZWQgbG9uZwltYXBudW0sIGJ5dGVudW0sIGJpdG51bSwgYmxvY2tuciwgcGFydGxlbjsKLQlsb25nIGludAlydjsKLQljaGFyCQkqbWM7Ci0KLQkvKgotCSoqIHNvbWV3aGF0IG1vcmUgY29tcGxpY2F0ZWQgc3R1ZmYgaXMgcmVxdWlyZWQ6Ci0JKiogaWYgdGhlIHJlcXVlc3QgaXMgbGFyZ2VyIHRoYW4gb25lIHVuZGVybHlpbmcKLQkqKiBibG9jayBvciBpcyBzcHJlYWQgb3ZlciB0d28gdW5kZXJseWluZyBibG9ja3MsCi0JKiogc3BsaXQgdGhlIHJlcXVlc3QgaW50byBwaWVjZXM7IGlmIGEgYmxvY2sgZG9lcyBub3QKLQkqKiBzdGFydCBhdCBhIGJsb2NrIGJvdW5kYXJ5LCB0YWtlIGNhcmUgdGhhdAotCSoqIHN1cnJvdW5kaW5nIGRhdGEgaXMgcmVhZCBmaXJzdCAoaWYgbmVlZGVkKSwKLQkqKiBmaXQgdGhlIG5ldyBkYXRhIGluIGFuZCB3cml0ZSBpdCBhcyBhIGZ1bGwgYmxvY2sKLQkqLwotCWZvciAocnY9MTsgbGVuID4gMDsgbGVuLT1wYXJ0bGVuLCBidWYrPXBhcnRsZW4sIG9mZnNldCs9cGFydGxlbikgewotCQkvKgotCQkqKiBjYWxjdWxhdGUgcGFydGlhbCBsZW5ndGggZm9yIHRoaXMgdHJhbnNmZXIKLQkJKi8KLQkJcGFydGxlbiA9IE1BUFVOSVQgLSAob2Zmc2V0ICYgTVVNQVNLKTsKLQkJaWYgKHBhcnRsZW4gPiBsZW4pCi0JCQlwYXJ0bGVuID0gbGVuOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBibG9ja25yIG9mIGVudGlyZSBibG9jawotCQkqLwotCQlibG9ja25yID0gb2Zmc2V0ID4+IE1VU0hJRlQ7Ci0KLQkJLyoKLQkJKiogaGFzIHRoaXMgYmxvY2sgYmVlbiB3cml0dGVuIGJlZm9yZT8KLQkJKi8KLQkJbWFwbnVtICA9IENBTENNQVAgKGJsb2NrbnIpOwotCQlieXRlbnVtID0gQ0FMQ0JZVEUoYmxvY2tucik7Ci0JCWJpdG51bSAgPSBDQUxDQklUIChibG9ja25yKTsKLQkJbWMJPSAqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKTsKLQotCQlpZiAoKihtYytieXRlbnVtKSYoMTw8Yml0bnVtKSkgewotCQkJLyoKLQkJCSoqIGJsb2NrIGhhcyBiZWVuIHdyaXR0ZW4gYmVmb3JlOwotCQkJKiogd3JpdGUgdHJhbnNwYXJhbnRseSB0byBjb3dmaWxlCi0JCQkqLwotCQkJREVCVUdQKERDT1cKLQkJCSAgICAgICAiY293bG9vcCAtIHNwbGl0d3IgdHJhbnNwXG4iKTsKLQotCQkJaWYgKGNvd2xvX3dyaXRlY293KGNvd2RldiwgYnVmLCBwYXJ0bGVuLCBvZmZzZXQpIDw9IDApCi0JCQkJcnYgPSAwOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSoqIGJsb2NrIGhhcyBuZXZlciBiZWVuIHdyaXR0ZW4gYmVmb3JlLAotCQkJKiogc28gcmVhZCBlbnRpcmUgYmxvY2sgZnJvbQotCQkJKiogcmVhZC1vbmx5IGZpbGUgZmlyc3QsIHVubGVzcwotCQkJKiogYSBmdWxsIGJsb2NrIGlzIHJlcXVlc3RlZCB0bwotCQkJKiogYmUgd3JpdHRlbgotCQkJKi8KLQkJCWlmIChwYXJ0bGVuIDwgTUFQVU5JVCkgewotCQkJCWlmIChjb3dsb19yZWFkcmRvKGNvd2RldiwgY293ZGV2LT5pb2J1ZiwKLQkJCQkgICAgICBNQVBVTklULCAobG9mZl90KWJsb2NrbnIgPDwgTVVTSElGVCkgPD0gMCkKLQkJCQkJcnYgPSAwOwotCQkJfQotCi0JCQkvKgotCQkJKiogdHJhbnNmZXIgbW9kaWZpZWQgcGFydCBpbnRvCi0JCQkqKiB0aGUgYmxvY2sganVzdCByZWFkCi0JCQkqLwotCQkJbWVtY3B5KGNvd2Rldi0+aW9idWYgKyAob2Zmc2V0ICYgTVVNQVNLKSwgYnVmLCBwYXJ0bGVuKTsKLQotCQkJLyoKLQkJCSoqIHdyaXRlIGVudGlyZSBibG9jayB0byBjb3dmaWxlCi0JCQkqLwotCQkJREVCVUdQKERDT1ciY293bG9vcCAtIHNwbGl0ICIKLQkJCQkicGFydGxlbj0lbGQgb2ZmPSVsbGRcbiIsCi0JCQkJcGFydGxlbiwgKGxvZmZfdClibG9ja25yIDw8IE1VU0hJRlQpOwotCi0JCQlpZiAoY293bG9fd3JpdGVjb3coY293ZGV2LCBjb3dkZXYtPmlvYnVmLCBNQVBVTklULAotCQkJCQkgICAgIChsb2ZmX3QpYmxvY2tuciA8PCBNVVNISUZUKSA8PSAwKQotCQkJCXJ2ID0gMDsKLQkJfQotCX0KLQotCXJldHVybiBydjsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSS9PLXN1cHBvcnQgZm9yIHJlYWQtb25seSBmaWxlIGFuZCBjb3B5LW9uLXdyaXRlIGZpbGUgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotKiogcmVhZCBkYXRhIGZyb20gdGhlIHJlYWQtb25seSBmaWxlCi0qKgotKiogcmV0dXJuLXZhbHVlOiBzaW1pbGFyIHRvIHVzZXItbW9kZSByZWFkCi0qLwotc3RhdGljIGxvbmcgaW50Ci1jb3dsb19yZWFkcmRvKHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCB2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JbG9uZyBpbnQJcnY7Ci0JbW1fc2VnbWVudF90CW9sZF9mczsKLQlsb2ZmX3QJCXNhdmVvZmZzZXQgPSBvZmZzZXQ7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVhZHJkbyBjYWxsZWRcbiIpOwotCi0gICAgICAgIG9sZF9mcyA9IGdldF9mcygpOwotCXNldF9mcyggZ2V0X2RzKCkgKTsKLQlydiA9IGNvd2Rldi0+cmRvZnAtPmZfb3AtPnJlYWQoY293ZGV2LT5yZG9mcCwgYnVmLCBsZW4sICZvZmZzZXQpOwotICAgICAgICBzZXRfZnMob2xkX2ZzKTsKLQotCWlmIChydiA8IGxlbikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb3dsb29wIC0gcmVhZC1mYWlsdXJlICVsZCBvbiByZG9maWxlIgotCQkgICAgICAgICAgICAgICAgICAgICItIG9mZnNldD0lbGxkIGxlbj0lZFxuIiwKLQkJCQkJcnYsIHNhdmVvZmZzZXQsIGxlbik7Ci0JfQotCi0JY293ZGV2LT5yZG9yZWFkcysrOwotCXJldHVybiBydjsKLX0KLQotLyoKLSoqIHJlYWQgY293ZmlsZSBmcm9tIGEgbW9kaWZpZWQgb2Zmc2V0LCBpLmUuIHNraXBwaW5nIHRoZSBiaXRtYXAgYW5kIGNvd2hlYWQKLSoqCi0qKiByZXR1cm4tdmFsdWU6IHNpbWlsYXIgdG8gdXNlci1tb2RlIHJlYWQKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX3JlYWRjb3coc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVhZGNvdyBjYWxsZWRcbiIpOwotCi0Jb2Zmc2V0ICs9IGNvd2Rldi0+Y293aGVhZC0+ZG9mZnNldDsKLQotCXJldHVybiBjb3dsb19yZWFkY293cmF3KGNvd2RldiwgYnVmLCBsZW4sIG9mZnNldCk7Ci19Ci0KLS8qCi0qKiByZWFkIGNvd2ZpbGUgZnJvbSBhbiBhYnNvbHV0ZSBvZmZzZXQKLSoqCi0qKiByZXR1cm4tdmFsdWU6IHNpbWlsYXIgdG8gdXNlci1tb2RlIHJlYWQKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX3JlYWRjb3dyYXcoc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsCi0JCQkJCXZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQlsb25nIGludAlydjsKLQltbV9zZWdtZW50X3QJb2xkX2ZzOwotCWxvZmZfdAkJc2F2ZW9mZnNldCA9IG9mZnNldDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZWFkY293cmF3IGNhbGxlZFxuIik7Ci0KLQkvKgotCSoqIGJlIHN1cmUgdGhhdCBjb3dmaWxlIGlzIG9wZW5lZCBmb3IgcmVhZC13cml0ZQotCSovCi0JaWYgKCAhKGNvd2Rldi0+c3RhdGUgJiBDT1dDT1dPUEVOKSApIHsKLQkJIHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICAiY293bG9vcCAtIHJlYWQgcmVxdWVzdCBmcm9tIGNvd2ZpbGUgcmVmdXNlZFxuIik7Ci0KLQkJcmV0dXJuIC1FQkFERjsKLQl9Ci0KLQkvKgotCSoqIGlzc3VlIGxvdyBsZXZlbCByZWFkCi0JKi8KLSAgICAgICAgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKCBnZXRfZHMoKSApOwotCXJ2ID0gY293ZGV2LT5jb3dmcC0+Zl9vcC0+cmVhZChjb3dkZXYtPmNvd2ZwLCBidWYsIGxlbiwgJm9mZnNldCk7Ci0gICAgICAgIHNldF9mcyhvbGRfZnMpOwotCi0JaWYgKHJ2IDwgbGVuKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gcmVhZC1mYWlsdXJlICVsZCBvbiBjb3dmaWxlIgotCQkgICAgICAgIi0gb2Zmc2V0PSVsbGQgbGVuPSVkXG4iLCBydiwgc2F2ZW9mZnNldCwgbGVuKTsKLQl9Ci0KLQljb3dkZXYtPmNvd3JlYWRzKys7Ci0JcmV0dXJuIHJ2OwotfQotCi0vKgotKiogd3JpdGUgY293ZmlsZSBmcm9tIGEgbW9kaWZpZWQgb2Zmc2V0LCBpLmUuIHNraXBwaW5nIHRoZSBiaXRtYXAgYW5kIGNvd2hlYWQKLSoqCi0qKiBpZiBhIGJsb2NrIGlzIHdyaXR0ZW4gZm9yIHRoZSBmaXJzdCB0aW1lIHdoaWxlIGl0cyBjb250ZW50cyBjb25zaXN0cwotKiogb2YgYmluYXJ5IHplcm9lcyBvbmx5LCB0aGUgY29uY2VybmluZyBiaXRtYXAgaXMgZmx1c2hlZCB0byB0aGUgY293ZmlsZQotKioKLSoqIHJldHVybi12YWx1ZTogc2ltaWxhciB0byB1c2VyLW1vZGUgd3JpdGUKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX3dyaXRlY293KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCB2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JbG9uZyBpbnQJcnY7Ci0JdW5zaWduZWQgbG9uZwltYXBudW09MCwgbWFwYnl0ZT0wLCBtYXBiaXQ9MCwgY293YmxvY2s9MCwgcGFydGxlbjsKLQljaGFyCQkqdG1wcHRyLCAgKm1hcHB0ciA9IE5VTEw7Ci0JbG9mZl90CQl0bXBvZmZzZXQsIG1hcG9mZnNldCA9IDA7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gd3JpdGVjb3cgY2FsbGVkXG4iKTsKLQotCS8qCi0JKiogYmUgc3VyZSB0aGF0IGNvd2ZpbGUgaXMgb3BlbmVkIGZvciByZWFkLXdyaXRlCi0JKi8KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTikgKSB7Ci0JCSBwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAgImNvd2xvb3AgLSBXcml0ZSByZXF1ZXN0IHRvIGNvd2ZpbGUgcmVmdXNlZFxuIik7Ci0KLQkJcmV0dXJuIC1FQkFERjsKLQl9Ci0KLQkvKgotCSoqIHdyaXRlIHRoZSBlbnRpcmUgYmxvY2sgdG8gdGhlIGNvd2ZpbGUKLQkqLwotCXRtcG9mZnNldCA9IG9mZnNldCArIGNvd2Rldi0+Y293aGVhZC0+ZG9mZnNldDsKLQotCXJ2ID0gY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCBidWYsIGxlbiwgdG1wb2Zmc2V0KTsKLQotCS8qCi0JKiogdmVyaWZ5IGlmIGVub3VnaCBzcGFjZSBhdmFpbGFibGUgb24gZmlsZXN5c3RlbSBob2xkaW5nCi0JKiogdGhlIGNvd2ZpbGUKLQkqKiAgIC0gd2hlbiB0aGUgbGFzdCB3cml0ZSBmYWlsZWQgKG1pZ2h0IGJlIGNhdXNlZCBieSBsYWNrIG9mIHNwYWNlKQotCSoqICAgLSB3aGVuIGEgd2F0Y2hlciBpcyBhY3RpdmUgKHRvIHJlYWN0IGFkZXF1YXRseSkKLQkqKiAgIC0gd2hlbiB0aGUgcHJldmlvdXMgY2hlY2sgaW5kaWNhdGVkIGZzIHdhcyBhbG1vc3QgZnVsbAotCSoqICAgLSB3aXRoIHJlZ3VsYXIgaW50ZXJ2YWxzCi0JKi8KLQlpZiAoIChydiA8PSAwKQkJCQkgICAgICAgfHwKLQkgICAgIChjb3dkZXYtPnN0YXRlICAgICAgICAmIENPV1dBVENIRE9HKSAgICAgIHx8Ci0JICAgICAoY293ZGV2LT5ibGthdmFpbCAvIDIgPCBTUENERkxJTlRWTCkgICAgICB8fAotCSAgICAgKGNvd2Rldi0+Y293d3JpdGVzICAgICUgU1BDREZMSU5UVkwgPT0gMCkgKSB7Ci0JCXN0cnVjdCBrc3RhdGZzCQlrczsKLQotCQlpZiAodmZzX3N0YXRmcyhjb3dkZXYtPmNvd2ZwLT5mX2RlbnRyeSwgJmtzKT09MCl7Ci0JCQlpZiAoa3MuZl9iYXZhaWwgPD0gU1BDTUlOQkxLKSB7Ci0JCQkJc3dpdGNoIChrcy5mX2JhdmFpbCkgewotCQkJCSAgIGNhc2UgMDoKLQkJCQkgICBjYXNlIDE6Ci0JCQkJICAgY2FzZSAyOgotCQkJCSAgIGNhc2UgMzoKLQkJCQkJcHJpbnRrKEtFUk5fQUxFUlQKLQkJCQkJICAgICAgICJjb3dsb29wIC0gIgotCQkJCQkgICAgICAgIkFMRVJUOiBjb3dmaWxlIGZ1bGwhXG4iKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQkgICBkZWZhdWx0OgotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSAgICAgICAiY293bG9vcCAtIGNvd2ZpbGUgYWxtb3N0ICIKLQkJCQkJICAgICAgICJmdWxsIChvbmx5ICVsbHUgS2IgZnJlZSlcbiIsCi0JCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3MuZl9ic2l6ZSAqIGtzLmZfYmF2YWlsIC8xMDI0KTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWNvd2Rldi0+YmxrdG90YWwgPSBrcy5mX2Jsb2NrczsKLQkJCWNvd2Rldi0+YmxrYXZhaWwgPSBrcy5mX2JhdmFpbDsKLQotCQkJLyoKLQkJCSoqIHdha2V1cCB3YXRjaGVyIGlmIHRocmVzaG9sZCBoYXMgYmVlbiByZWFjaGVkCi0JCQkqLwotCQkJaWYgKCAoY293ZGV2LT5zdGF0ZSAmIENPV1dBVENIRE9HKSAmJgotCQkJICAgIChjb3dkZXYtPndhdGNodGhyZXNoID49IGNvd2Rldi0+YmxrYXZhaWwpICkgewotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY293ZGV2LT53YXRjaHEpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKHJ2IDw9IDApCi0JCXJldHVybiBydjsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSBibG9jayB3cml0dGVuXG4iKTsKLQotCS8qCi0JKiogY2hlY2sgaWYgYmxvY2socykgaXMvYXJlIHdyaXR0ZW4gdG8gdGhlIGNvd2ZpbGUKLQkqKiBmb3IgdGhlIGZpcnN0IHRpbWU7IGlmIHNvLCBhZGFwdCB0aGUgYml0bWFwCi0JKi8KLQlmb3IgKDsgbGVuID4gMDsgbGVuLT1wYXJ0bGVuLCBvZmZzZXQrPXBhcnRsZW4sIGJ1Zis9cGFydGxlbikgewotCQkvKgotCQkqKiBjYWxjdWxhdGUgcGFydGlhbCBsZW5ndGggZm9yIHRoaXMgdHJhbnNmZXIKLQkJKi8KLQkJcGFydGxlbiA9IE1BUFVOSVQgLSAob2Zmc2V0ICYgTVVNQVNLKTsKLQkJaWYgKHBhcnRsZW4gPiBsZW4pCi0JCQlwYXJ0bGVuID0gbGVuOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBiaXRuciBvZiB3cml0dGVuIGNodW5rIG9mIGNvd2Jsb2NrCi0JCSovCi0JCWNvd2Jsb2NrID0gb2Zmc2V0ID4+IE1VU0hJRlQ7Ci0KLQkJbWFwbnVtICAgPSBDQUxDTUFQIChjb3dibG9jayk7Ci0JCW1hcGJ5dGUgID0gQ0FMQ0JZVEUoY293YmxvY2spOwotCQltYXBiaXQgICA9IENBTENCSVQgKGNvd2Jsb2NrKTsKLQotCQlpZiAoKigqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKSttYXBieXRlKSAmICgxPDxtYXBiaXQpKQotCQkJY29udGludWU7CS8qIGFscmVhZHkgd3JpdHRlbiBiZWZvcmUgKi8KLQotCSAgICAgICAJLyoKLQkJKiogaWYgdGhlIGJsb2NrIGlzIHdyaXR0ZW4gZm9yIHRoZSBmaXJzdCB0aW1lLAotCQkqKiB0aGUgY29ycmVzcG9uZGluZyBiaXQgc2hvdWxkIGJlIHNldCBpbiB0aGUgYml0bWFwCi0JCSovCi0JCSooKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSkrbWFwYnl0ZSkgfD0gKDE8PG1hcGJpdCk7Ci0KLQkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCi0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBiaXR1cGRhdGUgYmxrPSVsZCBtYXA9JWxkICIKLQkJICAgICAgICAiYnl0ZT0lbGQgYml0PSVsZFxuIiwKLQkJCWNvd2Jsb2NrLCBtYXBudW0sIG1hcGJ5dGUsIG1hcGJpdCk7Ci0KLQkJLyoKLQkJKiogY2hlY2sgaWYgdGhlIGNvd2hlYWQgaW4gdGhlIGNvd2ZpbGUgaXMgY3VycmVudGx5Ci0JCSoqIG1hcmtlZCBjbGVhbjsgaWYgc28sIG1hcmsgaXQgZGlydHkgYW5kIGZsdXNoIGl0Ci0JCSovCi0JCWlmICggIShjb3dkZXYtPmNvd2hlYWQtPmZsYWdzICY9IENPV0RJUlRZKSkgewotCQkJY293ZGV2LT5jb3doZWFkLT5mbGFncwl8PSBDT1dESVJUWTsKLQotCQkJY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCBjb3dkZXYtPmNvd2hlYWQsCi0JCQkJCQkJTUFQVU5JVCwgKGxvZmZfdCkwKTsKLQkJfQotCi0JCS8qCi0JCSoqIGlmIHRoZSB3cml0dGVuIGRhdGFibG9jayBjb250YWluZWQgYmluYXJ5IHplcm9lcywKLQkJKiogdGhlIGJpdG1hcCBibG9jayBzaG91bGQgYmUgbWFya2VkIHRvIGJlIGZsdXNoZWQgdG8gZGlzawotCQkqKiAoYmxvY2tzIGNvbnRhaW5pbmcgYWxsIHplcm9lcyBjYW5ub3QgYmUgcmVjb3ZlcmVkIGJ5Ci0JCSoqIHRoZSBjb3dyZXBhaXItcHJvZ3JhbSBsYXRlciBvbiBpZiBjb3dsb29wIGlzIG5vdCBwcm9wZXJseQotCQkqKiByZW1vdmVkIHZpYSBybW1vZCkKLQkJKi8KLQkJaWYgKCBtZW1jbXAoYnVmLCBhbGx6ZXJvZXMsIHBhcnRsZW4pICkgLyogbm90IGFsbCB6ZXJvZXM/ICovCi0JCQljb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgLyogbm8gZmx1c2ggbmVlZGVkICovCi0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIHBvc2l0aW9ucyBvZiBiaXRtYXAgYmxvY2sgdG8gYmUgZmx1c2hlZAotCQkqKiAtIHBvaW50ZXIgb2YgYml0bWFwIGJsb2NrIGluIG1lbW9yeQotCQkqKiAtIG9mZnNldCAgb2YgYml0bWFwIGJsb2NrIGluIGNvd2ZpbGUKLQkJKi8KLQkJdG1wcHRyICAgID0gKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSkgKyAobWFwYnl0ZSAmICh+TVVNQVNLKSk7Ci0JCXRtcG9mZnNldCA9IChsb2ZmX3QpIE1BUFVOSVQgKyBtYXBudW0gKiBNQVBDSFVOS1NaICsKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGJ5dGUgJiAofk1VTUFTSykpOwotCi0JCS8qCi0JCSoqIGZsdXNoIGEgYml0bWFwIGJsb2NrIGF0IHRoZSBtb21lbnQgdGhhdCBhbGwgYml0cyBoYXZlCi0JCSoqIGJlZW4gc2V0IGluIHRoYXQgYmxvY2ssIGkuZS4gYXQgdGhlIG1vbWVudCB0aGF0IHdlCi0JCSoqIHN3aXRjaCB0byBhbm90aGVyIGJpdG1hcCBibG9jawotCQkqLwotCQlpZiAoIChtYXBvZmZzZXQgIT0gMCkgJiYgKG1hcG9mZnNldCAhPSB0bXBvZmZzZXQpICkgewotCQkJaWYgKGNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgbWFwcHRyLCBNQVBVTklULAotCQkJCQkJCW1hcG9mZnNldCkgPCAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAgICAgICAiY293bG9vcCAtIHdyaXRlLWZhaWx1cmUgb24gYml0bWFwIC0gIgotCQkJCSAgICAgICAiYmxrPSVsZCBtYXA9JWxkIGJ5dGU9JWxkIGJpdD0lbGRcbiIsCi0JCQkJICAJY293YmxvY2ssIG1hcG51bSwgbWFwYnl0ZSwgbWFwYml0KTsKLQkJCX0KLQotCQkJREVCVUdQKERDT1ciY293bG9vcCAtIGJpdG1hcCBibGsgd3JpdHRlbiAlbGxkXG4iLAotCQkJCQkJCQltYXBvZmZzZXQpOwotCQl9Ci0KLQkJLyoKLQkJKiogcmVtZW1iZXIgb2Zmc2V0IGluIGNvd2ZpbGUgYW5kIG9mZnNldCBpbiBtZW1vcnkKLQkJKiogZm9yIGJpdG1hcCB0byBiZSBmbHVzaGVkOyBmbHVzaGluZyB3aWxsIGJlIGRvbmUKLQkJKiogYXMgc29vbiBhcyBhbGwgdXBkYXRlcyBpbiB0aGlzIGJpdG1hcCBibG9jayBoYXZlCi0JCSoqIGJlZW4gZG9uZQotCQkqLwotCQltYXBvZmZzZXQgPSB0bXBvZmZzZXQ7Ci0JCW1hcHB0ciAgICA9IHRtcHB0cjsKLQl9Ci0KLQkvKgotCSoqIGFueSBuZXcgYmxvY2sgd3JpdHRlbiBjb250YWluaW5nIGJpbmFyeSB6ZXJvZXM/Ci0JKi8KLQlpZiAobWFwb2Zmc2V0KSB7Ci0JCWlmIChjb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsIG1hcHB0ciwgTUFQVU5JVCwgbWFwb2Zmc2V0KSA8IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiY293bG9vcCAtIHdyaXRlLWZhaWx1cmUgb24gYml0bWFwIC0gIgotCQkJICAgICAgICJibGs9JWxkIG1hcD0lbGQgYnl0ZT0lbGQgYml0PSVsZFxuIiwKLQkJCSAgICAgICBjb3dibG9jaywgbWFwbnVtLCBtYXBieXRlLCBtYXBiaXQpOwotCQl9Ci0KLQkJREVCVUdQKERDT1ciY293bG9vcCAtIGJpdG1hcCBibG9jayB3cml0dGVuICVsbGRcbiIsIG1hcG9mZnNldCk7Ci0JfQotCi0JcmV0dXJuIHJ2OwotfQotCi0vKgotKiogd3JpdGUgY293ZmlsZSBmcm9tIGFuIGFic29sdXRlIG9mZnNldAotKioKLSoqIHJldHVybi12YWx1ZTogc2ltaWxhciB0byB1c2VyLW1vZGUgd3JpdGUKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX3dyaXRlY293cmF3KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LAotCQkJCQl2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JbG9uZyBpbnQJcnY7Ci0JbW1fc2VnbWVudF90CW9sZF9mczsKLQlsb2ZmX3QJCXNhdmVvZmZzZXQgPSBvZmZzZXQ7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gd3JpdGVjb3dyYXcgY2FsbGVkXG4iKTsKLQotCS8qCi0JKiogYmUgc3VyZSB0aGF0IGNvd2ZpbGUgaXMgb3BlbmVkIGZvciByZWFkLXdyaXRlCi0JKi8KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTikgKSB7Ci0JCSBwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAgImNvd2xvb3AgLSB3cml0ZSByZXF1ZXN0IHRvIGNvd2ZpbGUgcmVmdXNlZFxuIik7Ci0KLQkJcmV0dXJuIC1FQkFERjsKLQl9Ci0KLQkvKgotCSoqIGlzc3VlIGxvdyBsZXZlbCB3cml0ZQotCSovCi0gICAgICAgIG9sZF9mcyA9IGdldF9mcygpOwotCXNldF9mcyggZ2V0X2RzKCkgKTsKLQlydiA9IGNvd2Rldi0+Y293ZnAtPmZfb3AtPndyaXRlKGNvd2Rldi0+Y293ZnAsIGJ1ZiwgbGVuLCAmb2Zmc2V0KTsKLSAgICAgICAgc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAocnYgPCBsZW4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSB3cml0ZS1mYWlsdXJlICVsZCBvbiBjb3dmaWxlIgotCQkgICAgICAgIi0gb2Zmc2V0PSVsbGQgbGVuPSVkXG4iLCBydiwgc2F2ZW9mZnNldCwgbGVuKTsKLQl9Ci0KLQljb3dkZXYtPmNvd3dyaXRlcysrOwotCXJldHVybiBydjsKLX0KLQotCi0vKgotKiogcmVhZHByb2MtZnVuY3Rpb246IGNhbGxlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIC9wcm9jLWZpbGUgaXMgcmVhZAotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX3JlYWRwcm9jKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBwb3MsIGludCBjbnQsIGludCAqZW9mLCB2b2lkICpwKQotewotCXN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2ID0gcDsKLQotCXJldmlzaW9uW3NpemVvZiByZXZpc2lvbiAtIDNdID0gJ1wwJzsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwKLQkJIiAgIGNvd2xvb3AgdmVyc2lvbjogJTlzXG5cbiIKLQkJIiAgICAgIGRldmljZSBzdGF0ZTogJXMlcyVzJXNcbiIKLQkJIiAgIG51bWJlciBvZiBvcGVuczogJTlkXG4iCi0JCSIgICAgIHBpZCBvZiB0aHJlYWQ6ICU5ZFxuXG4iCi0JCSIgICAgcmVhZC1vbmx5IGZpbGU6ICU5c1xuIgotCQkiICAgICAgICAgIHJkb3JlYWRzOiAlOWx1XG5cbiIKLQkJImNvcHktb24td3JpdGUgZmlsZTogJTlzXG4iCi0JCSIgICAgIHN0YXRlIGNvd2ZpbGU6ICU5c1xuIgotCQkiICAgICBiaXRtYXAtYmxvY2tzOiAlOWx1IChvZiAlZCBieXRlcylcbiIKLQkJIiAgY293YmxvY2tzIGluIHVzZTogJTlsdSAob2YgJWQgYnl0ZXMpXG4iCi0JCSIgICAgICAgICAgY293cmVhZHM6ICU5bHVcbiIKLQkJIiAgICAgICAgIGNvd3dyaXRlczogJTlsdVxuIiwKLQkJCSZyZXZpc2lvblsxMV0sCi0KLQkJCWNvd2Rldi0+c3RhdGUgJiBDT1dERVZPUEVOICAgPyAiZGV2b3BlbiAiICAgOiAiIiwKLQkJCWNvd2Rldi0+c3RhdGUgJiBDT1dSV0NPV09QRU4gPyAiY293b3BlbnJ3ICIgOiAiIiwKLQkJCWNvd2Rldi0+c3RhdGUgJiBDT1dSRENPV09QRU4gPyAiY293b3BlbnJvICIgOiAiIiwKLQkJCWNvd2Rldi0+c3RhdGUgJiBDT1dXQVRDSERPRyAgPyAid2F0Y2hkb2cgIiAgOiAiIiwKLQotCQkJY293ZGV2LT5vcGVuY250LAotCQkJY293ZGV2LT5waWQsCi0JCQljb3dkZXYtPnJkb25hbWUsCi0JCQljb3dkZXYtPnJkb3JlYWRzLAotCQkJY293ZGV2LT5jb3duYW1lLAotCQkJY293ZGV2LT5jb3doZWFkLT5mbGFncyAmIENPV0RJUlRZID8gImRpcnR5IjoiY2xlYW4iLAotCQkJY293ZGV2LT5tYXBzaXplID4+IE1VU0hJRlQsIE1BUFVOSVQsCi0JCQljb3dkZXYtPm5yY293YmxvY2tzLCBNQVBVTklULAotCQkJY293ZGV2LT5jb3dyZWFkcywKLQkJCWNvd2Rldi0+Y293d3JpdGVzKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogU2V0dXAgYW5kIGRlc3Ryb3kgY293ZGV2aWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotKiogb3BlbiBhbmQgcHJlcGFyZSBhIGNvd2RldmljZSAocmRvZmlsZSBhbmQgY293ZmlsZSkgYW5kIGFsbG9jYXRlIGJpdG1hcHMKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19vcGVucGFpcihjaGFyICpyZG9mLCBjaGFyICpjb3dmLCBpbnQgYXV0b3JlY292ZXIsIGludCBtaW5vcikKLXsKLQlsb25nIGludAkJcnY7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXYgPSBjb3dkZXZhbGxbbWlub3JdOwotCXN0cnVjdCBrc3RhdGZzCQlrczsKLQotCWRvd24oJmNvd2RldmxvY2spOwotCi0JLyoKLQkqKiByZXF1ZXN0ZWQgZGV2aWNlIGV4aXN0cz8KLQkqLwotCWlmIChtaW5vciA+PSBtYXhjb3dzKSB7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyoKLQkqKiByZXF1ZXN0ZWQgZGV2aWNlIGFscmVhZHkgYXNzaWduZWQgdG8gY293ZGV2aWNlPwotCSovCi0JaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dERVZPUEVOKSB7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQkvKgotCSoqIGluaXRpYWxpemUgYWRtaW5pc3RyYXRpb24KLQkqLwotCW1lbXNldChjb3dkZXYsIDAsIHNpemVvZiAqY293ZGV2KTsKLQotCXNwaW5fbG9ja19pbml0ICAgICAoJmNvd2Rldi0+cnFsb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb3dkZXYtPndhaXRxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb3dkZXYtPndhdGNocSk7Ci0KLQkvKgotCSoqIG9wZW4gdGhlIHJlYWQtb25seSBmaWxlCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gY2FsbCBvcGVucmRvLi4uLlxuIik7Ci0KLQlpZiAoIChydiA9IGNvd2xvX29wZW5yZG8oY293ZGV2LCByZG9mKSkgKSB7Ci0JCWNvd2xvX3VuZG9fb3BlbnJkbyhjb3dkZXYpOwotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiBydjsKLQl9Ci0KLQkvKgotCSoqIG9wZW4gdGhlIGNvd2ZpbGUKLQkqLwotCURFQlVHUChEQ09XImNvd2xvb3AgLSBjYWxsIG9wZW5jb3cuLi4uXG4iKTsKLQotCWlmICggKHJ2ID0gY293bG9fb3BlbmNvdyhjb3dkZXYsIGNvd2YsIGF1dG9yZWNvdmVyKSkgKSB7Ci0JCWNvd2xvX3VuZG9fb3BlbnJkbyhjb3dkZXYpOwotCQljb3dsb191bmRvX29wZW5jb3coY293ZGV2KTsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gcnY7Ci0JfQotCi0JLyoKLQkqKiBhZG1pbmlzdGVyIHRvdGFsIGFuZCBhdmFpbGFibGUgc2l6ZSBvZiBmaWxlc3lzdGVtIGhvbGRpbmcgY293ZmlsZQotCSovCi0JaWYgKHZmc19zdGF0ZnMoY293ZGV2LT5jb3dmcC0+Zl9kZW50cnksICZrcyk9PTApIHsKLQkJY293ZGV2LT5ibGtzaXplICA9IGtzLmZfYnNpemU7Ci0JCWNvd2Rldi0+YmxrdG90YWwgPSBrcy5mX2Jsb2NrczsKLQkJY293ZGV2LT5ibGthdmFpbCA9IGtzLmZfYmF2YWlsOwotCX0gZWxzZSB7Ci0JCWNvd2Rldi0+Ymxrc2l6ZSAgPSAxMDI0OwkvKiBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvICovCi0JfQotCi0JLyoKLQkqKiBmbHVzaCB0aGUgKHJlY292ZXJlZCkgYml0bWFwcyBhbmQgY293aGVhZCB0byB0aGUgY293ZmlsZQotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGNhbGwgY293c3luYy4uLi5cbiIpOwotCi0JY293bG9fc3luYygpOwotCi0JLyoKLQkqKiBhbGxvY2F0ZSBnZW5kaXNrIGZvciB0aGUgY293IGRldmljZQotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGFsbG9jIGRpc2suLi4uXG4iKTsKLQotCWlmICgoY293ZGV2LT5nZCA9IGFsbG9jX2Rpc2soMSkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSB1bmFibGUgdG8gYWxsb2NfZGlzayBmb3IgY293bG9vcFxuIik7Ci0KLQkJY293bG9fdW5kb19vcGVucmRvKGNvd2Rldik7Ci0JCWNvd2xvX3VuZG9fb3BlbmNvdyhjb3dkZXYpOwotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNvd2Rldi0+Z2QtPm1ham9yICAgICAgICA9IENPV01BSk9SOwotCWNvd2Rldi0+Z2QtPmZpcnN0X21pbm9yICA9IG1pbm9yOwotCWNvd2Rldi0+Z2QtPm1pbm9ycyAgICAgICA9IDE7Ci0JY293ZGV2LT5nZC0+Zm9wcyAgICAgICAgID0gJmNvd2xvX2ZvcHM7Ci0JY293ZGV2LT5nZC0+cHJpdmF0ZV9kYXRhID0gY293ZGV2OwotCXNwcmludGYoY293ZGV2LT5nZC0+ZGlza19uYW1lLCAiJXMlZCIsIERFVklDRV9OQU1FLCBtaW5vcik7Ci0KLQkvKiBpbiAuNSBLYiB1bml0cyAqLwotCXNldF9jYXBhY2l0eShjb3dkZXYtPmdkLCAoY293ZGV2LT5udW1ibG9ja3MqKE1BUFVOSVQvNTEyKSkpOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGluaXQgcmVxdWVzdCBxdWV1ZS4uLi5cbiIpOwotCi0JaWYgKChjb3dkZXYtPnJxdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGNvd2xvX3JlcXVlc3QsICZjb3dkZXYtPnJxbG9jaykpCi0JCQkJCQkJCT09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSB1bmFibGUgdG8gZ2V0IHJlcXVlc3QgcXVldWUgZm9yIGNvd2xvb3BcbiIpOwotCi0JCWRlbF9nZW5kaXNrKGNvd2Rldi0+Z2QpOwotCQljb3dsb191bmRvX29wZW5yZG8oY293ZGV2KTsKLQkJY293bG9fdW5kb19vcGVuY293KGNvd2Rldik7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShjb3dkZXYtPnJxdWV1ZSwgY293ZGV2LT5ibG9ja3N6KTsKLQljb3dkZXYtPmdkLT5xdWV1ZSA9IGNvd2Rldi0+cnF1ZXVlOwotCi0JLyoKLQkqKiBzdGFydCBrZXJuZWwgdGhyZWFkIHRvIGhhbmRsZSByZXF1ZXN0cwotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGtpY2tvZmYgZGFlbW9uLi4uLlxuIik7Ci0KLQljb3dkZXYtPnBpZCA9IGtlcm5lbF90aHJlYWQoKGludCAoKikodm9pZCAqKSljb3dsb19kYWVtb24sIGNvd2RldiwgMCk7Ci0KLQkvKgotCSoqIGNyZWF0ZSBhIGZpbGUgYmVsb3cgZGlyZWN0b3J5IC9wcm9jL2NvdyBmb3IgdGhpcyBuZXcgY293ZGV2aWNlCi0JKi8KLQlpZiAoY293bG9fcHJvY2RpcikgewotCQljaGFyIAl0bXBuYW1lWzY0XTsKLQotCQlzcHJpbnRmKHRtcG5hbWUsICIlZCIsIG1pbm9yKTsKLQotCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KHRtcG5hbWUsIDAgLCBjb3dsb19wcm9jZGlyLAotCQkJCQkJY293bG9fcmVhZHByb2MsIGNvd2Rldik7Ci0JfQotCi0JY293ZGV2LT5zdGF0ZQl8PSBDT1dERVZPUEVOOwotCi0JY293ZGV2LT5yZG9uYW1lID0gcmRvZjsKLQljb3dkZXYtPmNvd25hbWUgPSBjb3dmOwotCi0JLyoKLQkqKiBlbmFibGUgdGhlIG5ldyBkaXNrOyB0aGlzIHRyaWdnZXJzIHRoZSBmaXJzdCByZXF1ZXN0IQotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGNhbGwgYWRkX2Rpc2suLi4uXG4iKTsKLQotCWFkZF9kaXNrKGNvd2Rldi0+Z2QpOwotCi0JdXAoJmNvd2RldmxvY2spOwotCXJldHVybiAwOwotfQotCi0vKgotKiogY2xvc2UgYSBjb3dkZXZpY2UgKHBhaXIgb2YgcmRvZmlsZS9jb3dmaWxlKSBhbmQgcmVsZWFzZSBtZW1vcnkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19jbG9zZXBhaXIoc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYpCi17Ci0JaW50IG1pbm9yOwotCi0JZG93bigmY293ZGV2bG9jayk7Ci0KLQkvKgotCSoqIGlmIGNvd2RldmljZSBpcyBub3QgYWN0aXZhdGVkIGF0IGFsbCwgcmVmdXNlCi0JKi8KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4pICkgewotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qCi0JKiogaWYgdGhpcyBjb3dkZXZpY2UgaXMgc3RpbGwgb3BlbiwgcmVmdXNlCi0JKi8KLQlpZiAoY293ZGV2LT5vcGVuY250ID4gMCkgewotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JdXAoJmNvd2RldmxvY2spOwotCi0JLyoKLQkqKiB3YWtldXAgd2F0Y2hlciAoaWYgYW55KQotCSovCi0JaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dXQVRDSERPRykgewotCQljb3dkZXYtPndhdGNodGhyZXNoID0gY293ZGV2LT5ibGthdmFpbDsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjb3dkZXYtPndhdGNocSk7Ci0JfQotCi0JLyoKLQkqKiB3YWtldXAga2VybmVsLXRocmVhZCB0byBiZSBhYmxlIHRvIGV4aXQKLQkqKiBhbmQgd2FpdCB1bnRpbCBpdCBoYXMgZXhpdGVkCi0JKi8KLQljb3dkZXYtPmNsb3NlZG93biA9IDE7Ci0JY293ZGV2LT5xZmlsbGVkICAgPSAxOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY293ZGV2LT53YWl0cSk7Ci0KLSAgICAgICAJd2hpbGUgKGNvd2Rldi0+cGlkKQotICAgICAgICAgICAgICAgCXNjaGVkdWxlKCk7Ci0KLQlkZWxfZ2VuZGlzayhjb3dkZXYtPmdkKTsgIC8qIHJldmVydCB0aGUgYWxsb2NfZGlzaygpICovCi0JcHV0X2Rpc2soY293ZGV2LT5nZCk7ICAgICAvKiByZXZlcnQgdGhlIGFkZF9kaXNrKCkgICAqLwotCi0JaWYgKGNvd2xvX3Byb2NkaXIpIHsKLQkJY2hhciAJdG1wbmFtZVs2NF07Ci0KLQkJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgbWF4Y293czsgbWlub3IrKykgewotCQkJaWYgKGNvd2RldiA9PSBjb3dkZXZhbGxbbWlub3JdKSBicmVhazsKLQkJfQotCQlzcHJpbnRmKHRtcG5hbWUsICIlZCIsIG1pbm9yKTsKLQotCQlyZW1vdmVfcHJvY19lbnRyeSh0bXBuYW1lLCBjb3dsb19wcm9jZGlyKTsKLQl9Ci0KLQlibGtfY2xlYW51cF9xdWV1ZShjb3dkZXYtPnJxdWV1ZSk7Ci0KLQkvKgotCSoqIHJlbGVhc2UgbWVtb3J5IGZvciBmaWxlbmFtZXMgaWYgdGhlc2UgbmFtZXMgaGF2ZQotCSoqIGJlZW4gYWxsb2NhdGVkIGR5bmFtaWNhbGx5Ci0JKi8KLQlpZiAoIChjb3dkZXYtPmNvd25hbWUpICYmIChjb3dkZXYtPmNvd25hbWUgIT0gY293ZmlsZSkpCi0JCWtmcmVlKGNvd2Rldi0+Y293bmFtZSk7Ci0KLQlpZiAoIChjb3dkZXYtPnJkb25hbWUpICYmIChjb3dkZXYtPnJkb25hbWUgIT0gcmRvZmlsZSkpCi0JCWtmcmVlKGNvd2Rldi0+cmRvbmFtZSk7Ci0KLQljb3dsb191bmRvX29wZW5yZG8oY293ZGV2KTsKLQljb3dsb191bmRvX29wZW5jb3coY293ZGV2KTsKLQotCWNvd2Rldi0+c3RhdGUgJj0gfkNPV0RFVk9QRU47Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIG9wZW4gdGhlIHJlYWQtb25seSBmaWxlCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fb3BlbnJkbyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldiwgY2hhciAqcmRvZikKLXsKLQlzdHJ1Y3QgZmlsZQkqZjsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlOwotCWxvbmcgaW50CWksIG5ydmFsOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIG9wZW5yZG8gY2FsbGVkXG4iKTsKLQotCS8qCi0JKiogb3BlbiB0aGUgcmVhZC1vbmx5IGZpbGUKLQkqLwotICAgICAgICBpZigqcmRvZiA9PSAnXDAnKSB7Ci0gICAgIAkgICAgIAlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gc3BlY2lmeSBuYW1lIGZvciByZWFkLW9ubHkgZmlsZVxuXG4iKTsKLSAgICAgICAgIAlyZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0JZiA9IGZpbHBfb3BlbihyZG9mLCBPX1JET05MWXxPX0xBUkdFRklMRSwgMCk7Ci0KLQlpZiAoIChmID09IE5VTEwpIHx8IElTX0VSUihmKSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY293bG9vcCAtIG9wZW4gb2YgcmRvZmlsZSAlcyBmYWlsZWRcbiIsIHJkb2YpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljb3dkZXYtPnJkb2ZwID0gZjsKLQotCWlub2RlID0gZi0+Zl9kZW50cnktPmRfaW5vZGU7Ci0KLQlpZiAoICFTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmICFTX0lTQkxLKGlub2RlLT5pX21vZGUpICkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gJXMgbm90IHJlZ3VsYXIgZmlsZSBvciBibG9ja2RldlxuIiwgcmRvZik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSBkZXRlcm1pbmUgc2l6ZSByZG8uLi4uXG4iKTsKLQotCS8qCi0JKiogZGV0ZXJtaW5lIGJsb2NrLXNpemUgYW5kIHRvdGFsIHNpemUgb2YgcmVhZC1vbmx5IGZpbGUKLQkqLwotCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0JCS8qCi0JCSoqIHJlYWQtb25seSBmaWxlIGlzIGEgcmVndWxhciBmaWxlCi0JCSovCi0JCWNvd2Rldi0+YmxvY2tzeiAgID0gNTEyOwkvKiBvdGhlciB2YWx1ZSBmYWlscyAqLwotCQljb3dkZXYtPm51bWJsb2NrcyA9IGlub2RlLT5pX3NpemUgPj4gTVVTSElGVDsKLQotCQlpZiAoaW5vZGUtPmlfc2l6ZSAmIE1VTUFTSykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJjb3dsb29wIC0gcmRvZmlsZSAlcyB0cnVuY2F0ZWQgdG8gbXVsdGlwbGUgIgotCQkJICAgICAgICJvZiAlZCBieXRlc1xuIiwgcmRvZiwgTUFQVU5JVCk7Ci0JCX0KLQotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gUk89cmVndWxhcjogbnVtYmxvY2tzPSVkLCBibG9ja3N6PSVkXG4iLAotCQkJY293ZGV2LT5udW1ibG9ja3MsIGNvd2Rldi0+YmxvY2tzeik7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJKiogcmVhZC1vbmx5IGZpbGUgaXMgYSBibG9jayBkZXZpY2UKLQkJKi8KLQkJY293ZGV2LT5iZWxvd2RldiAgPSBpbm9kZS0+aV9iZGV2OwotCQljb3dkZXYtPmJlbG93Z2QgICA9IGNvd2Rldi0+YmVsb3dkZXYtPmJkX2Rpc2s7IC8qIGdlbmRpc2sgKi8KLQotCQlpZiAoY293ZGV2LT5iZWxvd2Rldi0+YmRfcGFydCkgewotCQkJY293ZGV2LT5udW1ibG9ja3MgPSBjb3dkZXYtPmJlbG93ZGV2LT5iZF9wYXJ0LT5ucl9zZWN0cwotCQkJCQkJCQkvIChNQVBVTklULzUxMik7Ci0JCX0KLQotCQlpZiAoY293ZGV2LT5iZWxvd2dkKSB7Ci0JCQljb3dkZXYtPmJlbG93cSA9IGNvd2Rldi0+YmVsb3dnZC0+cXVldWU7Ci0KLQkJCWlmIChjb3dkZXYtPm51bWJsb2NrcyA9PSAwKSB7Ci0JCQkJY293ZGV2LT5udW1ibG9ja3MgPSBnZXRfY2FwYWNpdHkoY293ZGV2LT5iZWxvd2dkKQotICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJLyAoTUFQVU5JVC81MTIpOwotCQkJfQotCQl9Ci0KLQotCQlpZiAoY293ZGV2LT5iZWxvd3EpCi0JCQljb3dkZXYtPmJsb2Nrc3ogPSBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoY293ZGV2LT5iZWxvd3EpOwotCi0JCWlmIChjb3dkZXYtPmJsb2Nrc3ogPT0gMCkKLQkJCWNvd2Rldi0+YmxvY2tzeiA9IEJMT0NLX1NJWkU7IC8qIGRlZmF1bHQgMl4xMCAqLwotCi0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBudW1ibG9ja3M9JWQsICIKLQkJICAgICAgICAgICAiYmxvY2tzej0lZCwgYmVsb3dnZD0lcCwgYmVsb3dxPSVwXG4iLAotCQkgIAljb3dkZXYtPm51bWJsb2NrcywgY293ZGV2LT5ibG9ja3N6LAotCQkJY293ZGV2LT5iZWxvd2dkLCBjb3dkZXYtPmJlbG93cSk7Ci0KLQkJREVCVUdQKERDT1ciY293bG9vcCAtIGJlbG93ZGV2LmJkX2Jsb2NrX3NpemU9JWRcbiIsCi0JCSAgCWNvd2Rldi0+YmVsb3dkZXYtPmJkX2Jsb2NrX3NpemUpOwotCX0KLQotCWlmIChjb3dkZXYtPm51bWJsb2NrcyA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY293bG9vcCAtICVzIGhhcyBubyBjb250ZW50c1xuIiwgcmRvZik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JKiogcmVzZXJ2ZSBzcGFjZSBpbiBtZW1vcnkgYXMgZ2VuZXJpYyBJL08gYnVmZmVyCi0JKi8KLQljb3dkZXYtPmlvYnVmICA9IGttYWxsb2MoTUFQVU5JVCwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWNvd2Rldi0+aW9idWYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY293bG9vcCAtIGNhbm5vdCBnZXQgc3BhY2UgZm9yIGJ1ZmZlciAlZFxuIiwgTUFQVU5JVCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSBkZXRlcm1pbmUgZmluZ2VycHJpbnQgcmRvLi4uLlxuIik7Ci0KLQkvKgotCSoqIGRldGVybWluZSBmaW5nZXJwcmludCBmb3IgcmVhZC1vbmx5IGZpbGUKLQkqKiAJY2FsY3VsYXRlIGZpbmdlcnByaW50IGZyb20gZmlyc3QgZm91ciBkYXRhYmxvY2tzCi0JKioJd2hpY2ggZG8gbm90IGNvbnRhaW4gYmluYXJ5IHplcm9lcwotCSovCi0JZm9yIChpPTAsIGNvd2Rldi0+ZmluZ2VycHJpbnQ9MCwgbnJ2YWw9MDsKLQkJCShucnZhbCA8IDQpJiYoaSA8IGNvd2Rldi0+bnVtYmxvY2tzKTsgaSsrKSB7Ci0JCWludCAJCWo7Ci0JCXVuc2lnbmVkIGNoYXIJY3M7Ci0KLQkJLyoKLQkJKiogcmVhZCBuZXh0IGJsb2NrCi0JCSovCi0JCWlmIChjb3dsb19yZWFkcmRvKGNvd2RldiwgY293ZGV2LT5pb2J1ZiwgTUFQVU5JVCwKLQkJCQkJCShsb2ZmX3QpaSA8PCBNVVNISUZUKSA8IDEpCi0JCQlicmVhazsKLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgZmluZ2VycHJpbnQgYnkgYWRkaW5nIGFsbCBieXRlLXZhbHVlcwotCQkqLwotCQlmb3IgKGo9MCwgY3M9MDsgaiA8IE1BUFVOSVQ7IGorKykKLQkJCWNzICs9ICooY293ZGV2LT5pb2J1ZitqKTsKLQotCQlpZiAoY3MgPT0gMCkJLyogYmxvY2sgcHJvYmFibHkgY29udGFpbmVkIHplcm9lcyAqLwotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJKiogc2hpZnQgYnl0ZS12YWx1ZSB0byBwcm9wZXIgcGxhY2UgaW4gZmluYWwgZmluZ2VycHJpbnQKLQkJKi8KLQkJY293ZGV2LT5maW5nZXJwcmludCB8PSBjcyA8PCAobnJ2YWwqOCk7Ci0JCW5ydmFsKys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiB1bmRvIG1lbW9yeSBhbGxvY3MgYW5kIGZpbGUgb3BlbnMgaXNzdWVkIHNvIGZhcgotKiogcmVsYXRlZCB0byB0aGUgcmVhZC1vbmx5IGZpbGUKLSovCi1zdGF0aWMgdm9pZAotY293bG9fdW5kb19vcGVucmRvKHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2KQotewotCWlmKGNvd2Rldi0+aW9idWYpOwotCQlrZnJlZShjb3dkZXYtPmlvYnVmKTsKLQotCWlmIChjb3dkZXYtPnJkb2ZwKQotICAJCWZpbHBfY2xvc2UoY293ZGV2LT5yZG9mcCwgMCk7Ci19Ci0KLS8qCi0qKiBvcGVuIHRoZSBjb3dmaWxlCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fb3BlbmNvdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldiwgY2hhciAqY293ZiwgaW50IGF1dG9yZWNvdmVyKQotewotCWxvbmcgaW50CQlpLCBydjsKLQlpbnQJCQltaW5vcjsKLQl1bnNpZ25lZCBsb25nCQluYjsKLQlzdHJ1Y3QgZmlsZQkJKmY7Ci0Jc3RydWN0IGlub2RlCQkqaW5vZGU7Ci0JbG9mZl90CQkJb2Zmc2V0OwotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293dG1wOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIG9wZW5jb3cgY2FsbGVkXG4iKTsKLQotCS8qCi0JKiogb3BlbiBjb3B5LW9uLXdyaXRlIGZpbGUgKHJlYWQtd3JpdGUpCi0JKi8KLSAgICAgICAgaWYgKGNvd2ZbMF0gPT0gJ1wwJykgewotICAgICAgICAgIAlwcmludGsoS0VSTl9FUlIKLSAgICAgICAgICAgICAgICAgImNvd2xvb3AgLSBzcGVjaWZ5IG5hbWUgb2YgY29weS1vbi13cml0ZSBmaWxlXG5cbiIpOwotICAgICAgICAgCXJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLQlmID0gZmlscF9vcGVuKGNvd2YsIE9fUkRXUnxPX0xBUkdFRklMRSwgMDYwMCk7Ci0KLQlpZiAoIChmID09IE5VTEwpIHx8IElTX0VSUihmKSApIHsKLQkJLyoKLQkJKiogbm9uLWV4aXN0aW5nIGNvd2ZpbGU6IHRyeSB0byBjcmVhdGUKLQkJKi8KLQkJZiA9IGZpbHBfb3Blbihjb3dmLCBPX1JEV1J8T19DUkVBVHxPX0xBUkdFRklMRSwgMDYwMCk7Ci0KLQkJaWYgKCAoZiA9PSBOVUxMKSB8fCBJU19FUlIoZikgKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgIAkgICJjb3dsb29wIC0gZmFpbGVkIHRvIG9wZW4gZmlsZSAlcyBmb3IgcmVhZC13cml0ZVxuXG4iLAotCQkgICAgICAgCQkJCQkJY293Zik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkgCX0KLQl9Ci0KLQljb3dkZXYtPmNvd2ZwID0gZjsKLQotCWlub2RlID0gZi0+Zl9kZW50cnktPmRfaW5vZGU7Ci0KLQlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3dsb29wIC0gJXMgaXMgbm90IHJlZ3VsYXIgZmlsZVxuIiwgY293Zik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JKiogY2hlY2sgaWYgdGhpcyBjb3dmaWxlIGlzIGFscmVhZHkgaW4gdXNlIGZvciBhbm90aGVyIGNvd2RldmljZQotCSovCi0JZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgbWF4Y293czsgbWlub3IrKykgewotCi0JCWNvd3RtcCA9IGNvd2RldmFsbFttaW5vcl07Ci0KLQkJaWYgKCAhKGNvd3RtcC0+c3RhdGUgJiBDT1dERVZPUEVOKSApCi0JCQljb250aW51ZTsKLQotCQlpZiAoY293dG1wID09IGNvd2RldikKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjb3d0bXAtPmNvd2ZwLT5mX2RlbnRyeS0+ZF9pbm9kZSA9PSBmLT5mX2RlbnRyeS0+ZF9pbm9kZSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSAlczogYWxyZWFkeSBpbiB1c2UgYXMgY293XG4iLCBjb3dmKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQl9Ci0KLQkvKgotCSoqIG1hcmsgY293ZmlsZSBvcGVuIGZvciByZWFkLXdyaXRlCi0JKi8KLQljb3dkZXYtPnN0YXRlIHw9IENPV1JXQ09XT1BFTjsKLQotCS8qCi0JKiogY2FsY3VsYXRlIHNpemUgKGluIGJ5dGVzKSBmb3IgdG90YWwgYml0bWFwIGluIGNvd2ZpbGU7Ci0JKiogd2hlbiB0aGUgc2l6ZSBvZiB0aGUgY293aGVhZCBibG9jayBpcyBhZGRlZCwgdGhlIHN0YXJ0LW9mZnNldAotCSoqIGZvciB0aGUgbW9kaWZpZWQgZGF0YSBibG9ja3MgY2FuIGJlIGZvdW5kCi0JKi8KLQluYiA9IGNvd2Rldi0+bnVtYmxvY2tzOwotCi0JaWYgKG5iJTgpCQkvKiB0cmFuc2Zvcm0gI2JpdHMgdG8gI2J5dGVzICovCi0JCW5iKz04OyAgCS8qIHJvdW5kZWQgaWYgbmVjZXNzYXJ5ICAgICAgKi8KLQluYiAvPSA4OwotCi0JaWYgKG5iICYgTVVNQVNLKQkvKiByb3VuZCB1cCAjYnl0ZXMgdG8gTUFQVU5JVCBjaHVua3MgKi8KLQkJY293ZGV2LT5tYXBzaXplID0gKCAobmI+Pk1VU0hJRlQpICsxKSA8PCBNVVNISUZUOwotCWVsc2UKLQkJY293ZGV2LT5tYXBzaXplID0gbmI7Ci0KLQkvKgotCSoqIHJlc2VydmUgc3BhY2UgaW4gbWVtb3J5IGZvciB0aGUgY293aGVhZAotCSovCi0JY293ZGV2LT5jb3doZWFkID0ga21hbGxvYyhNQVBVTklULCBHRlBfS0VSTkVMKTsKLQotCWlmICghY293ZGV2LT5jb3doZWFkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY293bG9vcCAtIGNhbm5vdCBnZXQgc3BhY2UgZm9yIGNvd2hlYWQgJWRcbiIsCi0JCQkJCQkJCSAgICAgTUFQVU5JVCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbXNldChjb3dkZXYtPmNvd2hlYWQsIDAsIE1BUFVOSVQpOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHByZXBhcmUgY293aGVhZC4uLi5cbiIpOwotCi0JLyoKLQkqKiBjaGVjayBpZiB0aGUgY293ZmlsZSBleGlzdHMgb3Igc2hvdWxkIGJlIGNyZWF0ZWQKLQkqLwotCWlmIChpbm9kZS0+aV9zaXplICE9IDApIHsKLQkJLyoKLQkJKiogZXhpc3RpbmcgY293ZmlsZTogcmVhZCB0aGUgY293IGhlYWQKLQkJKi8KLQkJaWYgKGlub2RlLT5pX3NpemUgPCBNQVBVTklUKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtIGV4aXN0aW5nIGNvd2ZpbGUgJXMgdG9vIHNtYWxsXG4iLAotCQkJCWNvd2YpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQljb3dsb19yZWFkY293cmF3KGNvd2RldiwgY293ZGV2LT5jb3doZWFkLCBNQVBVTklULCAobG9mZl90KSAwKTsKLQotCQkvKgotCQkqKiB2ZXJpZnkgaWYgdGhlIGV4aXN0aW5nIGZpbGUgaXMgcmVhbGx5IGEgY293ZmlsZQotCQkqLwotCQlpZiAoY293ZGV2LT5jb3doZWFkLT5tYWdpYyAhPSBDT1dNQUdJQykgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSBjb3dmaWxlICVzIGhhcyBpbmNvcnJlY3QgZm9ybWF0XG4iLAotCQkJCWNvd2YpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKgotCQkqKiB2ZXJpZnkgdGhlIGNvd2hlYWQgdmVyc2lvbiBvZiB0aGUgY293ZmlsZQotCQkqLwotCQlpZiAoY293ZGV2LT5jb3doZWFkLT52ZXJzaW9uID4gQ09XVkVSU0lPTikgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSBjb3dmaWxlICVzIG5ld2VyIHRoYW4gdGhpcyBkcml2ZXJcbiIsCi0JCQkJY293Zik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qCi0JCSoqIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgbm90IGEgcGFja2VkIGNvd2ZpbGUKLQkJKi8KLQkJaWYgKGNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MgJiBDT1dQQUNLRUQpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICJjb3dsb29wIC0gcGFja2VkIGNvd2ZpbGUgJXMgbm90IGFjY2VwdGVkXG4iLCBjb3dmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyoKLQkJKiogdmVyaWZ5IGlmIHRoZSBjb3dmaWxlIGhhcyBiZWVuIHByb3Blcmx5IGNsb3NlZAotCQkqLwotCQlpZiAoY293ZGV2LT5jb3doZWFkLT5mbGFncyAmIENPV0RJUlRZKSB7Ci0JCQkvKgotCQkJKiogY293ZmlsZSB3YXMgbm90IHByb3Blcmx5IGNsb3NlZDsKLQkJCSoqIGNoZWNrIGlmIGF1dG9tYXRpYyByZWNvdmVyeSBpcyByZXF1aXJlZAotCQkJKiogKGFjdHVhbCByZWNvdmVyeSB3aWxsIGJlIGRvbmUgbGF0ZXIgb24pCi0JCQkqLwotCQkJaWYgKCFhdXRvcmVjb3ZlcikgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiY293bG9vcCAtIGNvd2ZpbGUgJXMgaXMgZGlydHkgIgotCQkJCSAgICAgICAiKG5vdCBwcm9wZXJseSBjbG9zZWQgYnkgcm1tb2Q/KVxuIiwKLQkJCQkJY293Zik7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb3dsb29wIC0gcnVuIGNvd3JlcGFpciBvciBzcGVjaWZ5ICIKLQkJCQkgICAgICAgIidvcHRpb249cicgdG8gcmVjb3ZlclxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQotCQkvKgotCQkqKiB2ZXJpZnkgaWYgdGhlIGNvd2ZpbGUgaXMgcmVhbGx5IHJlbGF0ZWQgdG8gdGhpcyByZG9maWxlCi0JCSovCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPnJkb2Jsb2NrcyAhPSBjb3dkZXYtPm51bWJsb2NrcykgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAJICAgICAgICJjb3dsb29wIC0gY293ZmlsZSAlcyAoc2l6ZSAlbGxkKSBub3QgcmVsYXRlZCAiCi0JCSAgICAgICAJICAgICAgICJ0byByZG9maWxlIChzaXplICVsbGQpXG4iLAotCQkJCWNvd2YsCi0JCQkJKGxvbmcgbG9uZyljb3dkZXYtPmNvd2hlYWQtPnJkb2Jsb2NrcyA8PE1VU0hJRlQsCi0JCQkJKGxvbmcgbG9uZyljb3dkZXYtPm51bWJsb2NrcyA8PE1VU0hJRlQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoY293ZGV2LT5jb3doZWFkLT5yZG9maW5nZXJwcmludCAhPSBjb3dkZXYtPmZpbmdlcnByaW50KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgIAkgICAgICJjb3dsb29wIC0gY293ZmlsZSAlcyBub3QgcmVsYXRlZCB0byByZG9maWxlICIKLQkJCSAgICAgIiAoZmluZ2VycHJpbnQgZXJyIC0gcmRvZmlsZSBtb2RpZmllZD8pXG4iLCBjb3dmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJKiogbmV3IGNvd2ZpbGU6IGRldGVybWluZSB0aGUgbWluaW1hbCBzaXplIChjb3doZWFkK2JpdG1hcCkKLQkJKi8KLQkJb2Zmc2V0ID0gKGxvZmZfdCkgTUFQVU5JVCArIGNvd2Rldi0+bWFwc2l6ZSAtIDE7Ci0KLQkJaWYgKCBjb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsICIiLCAxLCBvZmZzZXQpIDwgMSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSBjYW5ub3Qgc2V0IGNvd2ZpbGUgdG8gc2l6ZSAlbGxkXG4iLAotCQkJCW9mZnNldCsxKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyoKLQkJKiogcHJlcGFyZSBuZXcgY293aGVhZAotCQkqLwotCQljb3dkZXYtPmNvd2hlYWQtPm1hZ2ljCQk9IENPV01BR0lDOwotCQljb3dkZXYtPmNvd2hlYWQtPnZlcnNpb24JPSBDT1dWRVJTSU9OOwotCQljb3dkZXYtPmNvd2hlYWQtPm1hcHVuaXQJPSBNQVBVTklUOwotCQljb3dkZXYtPmNvd2hlYWQtPm1hcHNpemUJPSBjb3dkZXYtPm1hcHNpemU7Ci0JCWNvd2Rldi0+Y293aGVhZC0+cmRvYmxvY2tzCT0gY293ZGV2LT5udW1ibG9ja3M7Ci0JCWNvd2Rldi0+Y293aGVhZC0+cmRvZmluZ2VycHJpbnQJPSBjb3dkZXYtPmZpbmdlcnByaW50OwotCQljb3dkZXYtPmNvd2hlYWQtPmNvd3VzZWQJPSAwOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBzdGFydCBvZmZzZXQgb2YgZGF0YSBpbiBjb3dmaWxlLAotCQkqKiByb3VuZGVkIHVwIHRvIG11bHRpcGxlIG9mIDRLIHRvIGF2b2lkCi0JCSoqIHVubmVjZXNzYXJ5IGRpc2stdXNhZ2UgZm9yIHdyaXR0ZW4gZGF0YWJsb2NrcyBpbgotCQkqKiB0aGUgc3BhcnNlZCBjb3dmaWxlIG9uIGUuZy4gNEsgZmlsZXN5c3RlbXMKLQkJKi8KLQkJY293ZGV2LT5jb3doZWFkLT5kb2Zmc2V0ID0KLQkJCSgoTUFQVU5JVCtjb3dkZXYtPm1hcHNpemUrNDA5NSk+PjEyKTw8MTI7Ci0JfQotCi0JY293ZGV2LT5jb3doZWFkLT5mbGFncwk9IDA7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVzZXJ2ZSBzcGFjZSBiaXRtYXAuLi4uXG4iKTsKLQotCS8qCi0JKiogcmVzZXJ2ZSBzcGFjZSBpbiBtZW1vcnkgZm9yIHRoZSBlbnRpcmUgYml0bWFwIGFuZAotCSoqIGZpbGwgaXQgd2l0aCB0aGUgYml0bWFwLWRhdGEgZnJvbSBkaXNrOyB0aGUgZW50aXJlCi0JKiogYml0bWFwIGlzIGFsbG9jYXRlZCBpbiBzZXZlcmFsIGNodW5rcyBiZWNhdXNlIGttYWxsb2MKLQkqKiBoYXMgcmVzdHJpY3Rpb25zIHJlZ2FyZGluZyB0aGUgYWxsb3dlZCBzaXplIHBlciBrbWFsbG9jCi0JKi8KLQljb3dkZXYtPm1hcGNvdW50ID0gKGNvd2Rldi0+bWFwc2l6ZStNQVBDSFVOS1NaLTEpL01BUENIVU5LU1o7Ci0KLQkvKgotCSoqIHRoZSBzaXplIG9mIGV2ZXJ5IGJpdG1hcCBjaHVuayB3aWxsIGJlIE1BUENIVU5LU1ogYnl0ZXMsIGV4Y2VwdCBmb3IKLQkqKiB0aGUgbGFzdCBiaXRtYXAgY2h1bms6IGNhbGN1bGF0ZSByZW1haW5pbmcgc2l6ZSBmb3IgdGhpcyBjaHVuawotCSovCi0JaWYgKGNvd2Rldi0+bWFwc2l6ZSAlIE1BUENIVU5LU1ogPT0gMCkKLQkJY293ZGV2LT5tYXByZW1haW4gPSBNQVBDSFVOS1NaOwotCWVsc2UKLQkJY293ZGV2LT5tYXByZW1haW4gPSBjb3dkZXYtPm1hcHNpemUgJSBNQVBDSFVOS1NaOwotCi0JLyoKLQkqKiBhbGxvY2F0ZSBzcGFjZSB0byBzdG9yZSBhbGwgcG9pbnRlcnMgZm9yIHRoZSBiaXRtYXAtY2h1bmtzCi0JKiogKGluaXRpYWxpemUgYXJlYSB3aXRoIHplcm9lcyB0byBhbGxvdyBwcm9wZXIgdW5kbykKLQkqLwotCWNvd2Rldi0+bWFwY2FjaGUgPSBrbWFsbG9jKGNvd2Rldi0+bWFwY291bnQgKiBzaXplb2YoY2hhciAqKSwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb3dkZXYtPm1hcGNhY2hlKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvd2xvb3AgLSBjYW4gbm90IGFsbG9jYXRlIHNwYWNlIGZvciBiaXRtYXAgcHRyc1xuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbXNldChjb3dkZXYtPm1hcGNhY2hlLCAwLCBjb3dkZXYtPm1hcGNvdW50ICogc2l6ZW9mKGNoYXIgKikpOwotCi0JLyoKLQkqKiBhbGxvY2F0ZSBzcGFjZSB0byBzdG9yZSB0aGUgYml0bWFwLWNodW5rcyB0aGVtc2VsdmVzCi0JKi8KLQlmb3IgKGk9MDsgaSA8IGNvd2Rldi0+bWFwY291bnQ7IGkrKykgewotCQlpZiAoaSA8IChjb3dkZXYtPm1hcGNvdW50LTEpKQotCQkJKihjb3dkZXYtPm1hcGNhY2hlK2kpID0ga21hbGxvYyhNQVBDSFVOS1NaLCBHRlBfS0VSTkVMKTsKLQkJZWxzZQotCQkJKihjb3dkZXYtPm1hcGNhY2hlK2kpID0ga21hbGxvYyhjb3dkZXYtPm1hcHJlbWFpbiwKLQkJCQkJCSAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwotCi0JCWlmICgqKGNvd2Rldi0+bWFwY2FjaGUraSkgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJjb3dsb29wIC0gbm8gc3BhY2UgZm9yIGJpdG1hcGNodW5rICVsZCIKLQkJCQkJIiB0b3RtYXBzej0lbGQsIG1hcGNudD0lZCBtYXB1bml0PSVkXG4iLAotCQkJCQlpLCBjb3dkZXYtPm1hcHNpemUsIGNvd2Rldi0+bWFwY291bnQsCi0JCQkJCU1BUFVOSVQpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVhZCBiaXRtYXAgZnJvbSBjb3cuLi4uXG4iKTsKLQotCS8qCi0JKiogcmVhZCB0aGUgZW50aXJlIGJpdG1hcCBmcm9tIHRoZSBjb3dmaWxlIGludG8gdGhlIGluLW1lbW9yeSBjYWNoZTsKLQkqKiBjb3VudCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IGFyZSBpbiB1c2UgYWxyZWFkeQotCSoqIChzdGF0aXN0aWNhbCBwdXJwb3NlcykKLQkqLwotCWZvciAoaT0wLCBvZmZzZXQ9TUFQVU5JVDsgaSA8IGNvd2Rldi0+bWFwY291bnQ7Ci0JCQkJCWkrKywgb2Zmc2V0Kz1NQVBDSFVOS1NaKSB7Ci0JCXVuc2lnbmVkIGxvbmcJbnVtYnl0ZXM7Ci0KLQkJaWYgKGkgPCAoY293ZGV2LT5tYXBjb3VudC0xKSkKLQkJCS8qCi0JCQkqKiBmdWxsIGJpdG1hcCBjaHVuawotCQkJKi8KLQkJCW51bWJ5dGVzID0gTUFQQ0hVTktTWjsKLQkJZWxzZQotCQkJLyoKLQkJCSoqIGxhc3QgYml0bWFwIGNodW5rOiBtaWdodCBiZSBwYXJ0bHkgZmlsbGVkCi0JCQkqLwotCQkJbnVtYnl0ZXMgPSBjb3dkZXYtPm1hcHJlbWFpbjsKLQotCQljb3dsb19yZWFkY293cmF3KGNvd2RldiwgKihjb3dkZXYtPm1hcGNhY2hlK2kpLAotCQkJCQkJCW51bWJ5dGVzLCBvZmZzZXQpOwotCX0KLQotCS8qCi0JKiogaWYgdGhlIGNvd2ZpbGUgd2FzIGRpcnR5IGFuZCBhdXRvbWF0aWMgcmVjb3ZlcnkgaXMgcmVxdWlyZWQsCi0JKiogcmVjb25zdHJ1Y3QgYSBwcm9wZXIgYml0bWFwIGluIG1lbW9yeSBub3cKLQkqLwotCWlmIChjb3dkZXYtPmNvd2hlYWQtPmZsYWdzICYgQ09XRElSVFkpIHsKLQkJdW5zaWduZWQgbG9uZyBsb25nCWJsb2NrbnVtOwotCQljaGFyCQkJZGF0YWJ1ZltNQVBVTklUXTsKLQkJdW5zaWduZWQgbG9uZwkJbWFwbnVtLCBtYXBieXRlLCBtYXBiaXQ7Ci0KLQkJcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gcmVjb3ZlciBkaXJ0eSBjb3dmaWxlICVzLi4uLlxuIiwKLQkJCQkJCQljb3dmKTsKLQotCQkvKgotCQkqKiByZWFkIGFsbCBkYXRhIGJsb2NrcwotCQkqLwotCQlmb3IgKGJsb2NrbnVtPTAsIHJ2PTEsIG9mZnNldD0wOwotCQkJY293bG9fcmVhZGNvdyhjb3dkZXYsIGRhdGFidWYsIE1BUFVOSVQsIG9mZnNldCkgPiAwOwotCQkJYmxvY2tudW0rKywgb2Zmc2V0ICs9IE1BUFVOSVQpIHsKLQotCQkJLyoKLQkJCSoqIGlmIHRoaXMgZGF0YWJsb2NrIGNvbnRhaW5zIHJlYWwgZGF0YSAobm90IGJpbmFyeQotCQkJKiogemVyb2VzKSwgc2V0IHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgYml0bWFwCi0JCQkqLwotCQkJaWYgKCBtZW1jbXAoZGF0YWJ1ZiwgYWxsemVyb2VzLCBNQVBVTklUKSA9PSAwKQotCQkJCWNvbnRpbnVlOwotCi0JCQltYXBudW0gID0gQ0FMQ01BUCAoYmxvY2tudW0pOwotCQkJbWFwYnl0ZSA9IENBTENCWVRFKGJsb2NrbnVtKTsKLQkJCW1hcGJpdCAgPSBDQUxDQklUIChibG9ja251bSk7Ci0KLQkJCSooKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSkrbWFwYnl0ZSkgfD0gKDE8PG1hcGJpdCk7Ci0JCX0KLQotCQlwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSBjb3dmaWxlIHJlY292ZXJ5IGNvbXBsZXRlZFxuIik7Ci0JfQotCi0JLyoKLQkqKiBjb3VudCBhbGwgYml0cyBzZXQgaW4gdGhlIGJpdG1hcHMgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzCi0JKi8KLQlmb3IgKGk9MCwgY293ZGV2LT5ucmNvd2Jsb2NrcyA9IDA7IGkgPCBjb3dkZXYtPm1hcGNvdW50OyBpKyspIHsKLQkJbG9uZwludW1ieXRlczsKLQkJY2hhcgkqcDsKLQotCQlpZiAoaSA8IChjb3dkZXYtPm1hcGNvdW50LTEpKQotCQkJbnVtYnl0ZXMgPSBNQVBDSFVOS1NaOwotCQllbHNlCi0JCQludW1ieXRlcyA9IGNvd2Rldi0+bWFwcmVtYWluOwotCi0JCXAgPSAqKGNvd2Rldi0+bWFwY2FjaGUraSk7Ci0KLQkJZm9yIChudW1ieXRlcy0tOyBudW1ieXRlcyA+PSAwOyBudW1ieXRlcy0tLCBwKyspIHsKLQkJCS8qCi0JCQkqKiBmb3Igb25seSBlaWdodCBjaGVja3MgdGhlIGZvbGxvd2luZyBjb25zdHJ1Y3Rpb24KLQkJCSoqIGlzIGZhc3RlciB0aGFuIGEgbG9vcC1jb25zdHJ1Y3Rpb24KLQkJCSovCi0JCQlpZiAoKCpwKSAmIDB4MDEpCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHgwMikJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDA0KQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4MDgpCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHgxMCkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDIwKQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4NDApCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHg4MCkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQl9Ci0JfQotCi0JLyoKLQkqKiBjb25zaXN0ZW5jeS1jaGVjayBmb3IgbnVtYmVyIG9mIGJpdHMgc2V0IGluIGJpdG1hcAotCSovCi0JaWYgKCAhKGNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MgJiBDT1dESVJUWSkgJiYKLQkgICAgKGNvd2Rldi0+Y293aGVhZC0+Y293dXNlZCAhPSBjb3dkZXYtPm5yY293YmxvY2tzKSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3dsb29wIC0gaW5jb25zaXN0ZW50IGNvd2ZpbGUgYWRtaVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotKiogdW5kbyBtZW1vcnkgYWxsb2NzIGFuZCBmaWxlIG9wZW5zIGlzc3VlZCBzbyBmYXIKLSoqIHJlbGF0ZWQgdG8gdGhlIGNvd2ZpbGUKLSovCi1zdGF0aWMgdm9pZAotY293bG9fdW5kb19vcGVuY293KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2KQotewotCWludAlpOwotCi0JaWYgKGNvd2Rldi0+bWFwY2FjaGUpIHsKLQkJZm9yIChpPTA7IGkgPCBjb3dkZXYtPm1hcGNvdW50OyBpKyspIHsKLQkJCWlmICgqKGNvd2Rldi0+bWFwY2FjaGUraSkgIT0gTlVMTCkKLQkJCQlrZnJlZSggKihjb3dkZXYtPm1hcGNhY2hlK2kpICk7Ci0JCX0KLQotCQlrZnJlZShjb3dkZXYtPm1hcGNhY2hlKTsKLQl9Ci0KLQlpZiAoY293ZGV2LT5jb3doZWFkKQotCQlrZnJlZShjb3dkZXYtPmNvd2hlYWQpOwotCi0JaWYgKCAoY293ZGV2LT5zdGF0ZSAmIENPV0NPV09QRU4pICYmIChjb3dkZXYtPmNvd2ZwKSApCi0gIAkJZmlscF9jbG9zZShjb3dkZXYtPmNvd2ZwLCAwKTsKLQotCS8qCi0JKiogbWFyayBjb3dmaWxlIGNsb3NlZAotCSovCi0JY293ZGV2LT5zdGF0ZSAmPSB+Q09XQ09XT1BFTjsKLX0KLQotLyoKLSoqIGZsdXNoIHRoZSBlbnRpcmUgYml0bWFwIGFuZCB0aGUgY293aGVhZCAoY2xlYW4pIHRvIHRoZSBjb3dmaWxlCi0qKgotKiogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY293ZGV2aWNlcy1sb2NrIHNldAotKi8KLXN0YXRpYyB2b2lkCi1jb3dsb19zeW5jKHZvaWQpCi17Ci0JaW50CQkJaSwgbWlub3I7Ci0JbG9mZl90CQkJb2Zmc2V0OwotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2OwotCi0JZm9yIChtaW5vcj0wOyBtaW5vciA8IG1heGNvd3M7ICBtaW5vcisrKSB7Ci0JCWNvd2RldiA9IGNvd2RldmFsbFttaW5vcl07Ci0JCWlmICggISAoY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTikgKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChpPTAsIG9mZnNldD1NQVBVTklUOyBpIDwgY293ZGV2LT5tYXBjb3VudDsKLQkJCQkJaSsrLCBvZmZzZXQgKz0gTUFQQ0hVTktTWikgewotCQkJdW5zaWduZWQgbG9uZwludW1ieXRlczsKLQotCQkJaWYgKGkgPCAoY293ZGV2LT5tYXBjb3VudC0xKSkKLQkJCQkvKgotCQkJCSoqIGZ1bGwgYml0bWFwIGNodW5rCi0JCQkJKi8KLQkJCQludW1ieXRlcyA9IE1BUENIVU5LU1o7Ci0JCQllbHNlCi0JCQkJLyoKLQkJCQkqKiBsYXN0IGJpdG1hcCBjaHVuazogbWlnaHQgYmUgcGFydGx5IGZpbGxlZAotCQkJCSovCi0JCQkJbnVtYnl0ZXMgPSBjb3dkZXYtPm1hcHJlbWFpbjsKLQotCQkJREVCVUdQKERDT1cKLQkJCSAgICAgICAiY293bG9vcCAtIGZsdXNoaW5nIGJpdG1hcCAlMmQgKCUzbGQgS2IpXG4iLAotCQkJCQkJCWksIG51bWJ5dGVzLzEwMjQpOwotCi0JCQlpZiAoY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCAqKGNvd2Rldi0+bWFwY2FjaGUraSksCi0JCQkJCQludW1ieXRlcywgb2Zmc2V0KSA8IG51bWJ5dGVzKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQkvKgotCQkqKiBmbHVzaCBjbGVhbiB1cC10by1kYXRlIGNvd2hlYWQgdG8gY293ZmlsZQotCQkqLwotCQljb3dkZXYtPmNvd2hlYWQtPmNvd3VzZWQJID0gY293ZGV2LT5ucmNvd2Jsb2NrczsKLQkJY293ZGV2LT5jb3doZWFkLT5mbGFncwkJJj0gfkNPV0RJUlRZOwotCi0JCURFQlVHUChEQ09XICJjb3dsb29wIC0gZmx1c2hpbmcgY293aGVhZCAoJTNkIEtiKVxuIiwKLQkJCQkJCQlNQVBVTklULzEwMjQpOwotCi0JCWNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgY293ZGV2LT5jb3doZWFkLCBNQVBVTklULCAobG9mZl90KSAwKTsKLQl9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIE1vZHVsZSBsb2FkaW5nL3VubG9hZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSoqIGNhbGxlZCBkdXJpbmcgaW5zbW9kL21vZHByb2JlCi0qLwotc3RhdGljIGludCBfX2luaXQKLWNvd2xvX2luaXRfbW9kdWxlKHZvaWQpCi17Ci0JaW50CXJ2OwotCWludAltaW5vciwgdXB0b2Nvd3M7Ci0KLSAgICAgICAgcmV2aXNpb25bc2l6ZW9mIHJldmlzaW9uIC0gM10gPSAnXDAnOwotCi0gICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIChDKSAyMDA5IEFUQ29tcHV0aW5nLm5sIC0gdmVyc2lvbjogJXNcbiIsICZyZXZpc2lvblsxMV0pOwotICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSBpbmZvOiB3d3cuQVRDb21wdXRpbmcubmwvY293bG9vcFxuIik7Ci0KLQltZW1zZXQoYWxsemVyb2VzLCAwLCBNQVBVTklUKTsKLQotCS8qCi0JKiogU2V0dXAgYWRtaW5pc3RyYXRpb24gZm9yIGFsbCBwb3NzaWJsZSBjb3dkZXZpY2VzLgotICAgICAgICAqKiBOb3RlIHRoYXQgdGhlaXIgbWlub3IgbnVtYmVycyBnbyBmcm9tIDAgdG8gTUFYQ09XUy0xIGluY2x1c2l2ZQotICAgICAgICAqKiBhbmQgbWlub3IgPT0gTUFYQ09XUy0xIGlzIHJlc2VydmVkIGZvciB0aGUgY29udHJvbCBkZXZpY2UuCi0JKi8KLQlpZiAoKG1heGNvd3MgPCAxKSB8fCAobWF4Y293cyA+IE1BWENPV1MpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gbWF4Y293cyBleGNlZWRzIG1heGltdW0gb2YgJWRcbiIsIE1BWENPV1MpOwotCi0gICAgICAgICAgICAgICAgbWF4Y293cyA9IERGTENPV1M7Ci0gICAgICAgIH0KLQotCS8qIGFsbG9jYXRlIHJvb20gZm9yIGEgdGFibGUgd2l0aCBhIHBvaW50ZXIgdG8gZWFjaCBjb3dsb29wX2RldmljZTogKi8KLSAgICAgICAgaWYgKCAoY293ZGV2YWxsID0ga21hbGxvYyhtYXhjb3dzICogc2l6ZW9mKHN0cnVjdCBjb3dsb29wX2RldmljZSAqKSwKLQkJCQkJCQlHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAgImNvd2xvb3AgLSBjYW4gbm90IGFsbG9jIHRhYmxlIGZvciAlZCBkZXZzXG4iLCBtYXhjb3dzKTsKLQkJdXB0b2Nvd3MgPSAwOwotCQlydiA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3Jfb3V0OwotCX0KLQltZW1zZXQoY293ZGV2YWxsLCAwLCBtYXhjb3dzICogc2l6ZW9mKHN0cnVjdCBjb3dsb29wX2RldmljZSAqKSk7Ci0JLyogdGhlbiBob29rIGFuIGFjdHVhbCBjb3dsb29wX2RldmljZSBzdHJ1Y3QgdG8gZWFjaCBwb2ludGVyOiAqLwotCWZvciAobWlub3I9MDsgbWlub3IgPCBtYXhjb3dzOyBtaW5vcisrKSB7Ci0JCWlmICgoY293ZGV2YWxsW21pbm9yXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb3dsb29wX2RldmljZSksCi0JCQkJCQlHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgICAgICJjb3dsb29wIC0gY2FuIG5vdCBhbGxvYyBhZG1pbi1zdHJ1Y3QgZm9yIGRldiBubyAlZFxuIiwgbWlub3IpOwotCi0JCQl1cHRvY293cyA9IG1pbm9yOyAvKiB0aGlzIGlzIGhvdyBmYXIgd2UgZ290Li4uLiAqLwotCQkJcnYgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvcl9vdXQ7Ci0JCX0KLSAgICAgICAgCW1lbXNldChjb3dkZXZhbGxbbWlub3JdLCAwLCBzaXplb2Yoc3RydWN0IGNvd2xvb3BfZGV2aWNlKSk7Ci0JfQotCXVwdG9jb3dzID0gbWF4Y293czsgLyogd2UgZ290IGFsbCBkZXZpY2VzICovCi0KLQlzZW1hX2luaXQoJmNvd2RldmxvY2ssIDEpOwotCi0JLyoKLQkqKiByZWdpc3RlciBjb3dsb29wIG1vZHVsZQotCSovCi0JaWYgKCByZWdpc3Rlcl9ibGtkZXYoQ09XTUFKT1IsIERFVklDRV9OQU1FKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgImNvd2xvb3AgLSB1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBjb3dsb29wXG4iLCBDT1dNQUpPUik7Ci0JCXJ2ID0gLUVJTzsKLQkJZ290byBlcnJvcl9vdXQ7Ci0JfQotCi0JLyoKLQkqKiBjcmVhdGUgYSBkaXJlY3RvcnkgYmVsb3cgL3Byb2MgdG8gYWxsb2NhdGUgYSBmaWxlCi0JKiogZm9yIGVhY2ggY293ZGV2aWNlIHRoYXQgaXMgYWxsb2NhdGVkIGxhdGVyIG9uCi0JKi8KLQljb3dsb19wcm9jZGlyID0gcHJvY19ta2RpcigiY293IiwgTlVMTCk7Ci0KLQkvKgotCSoqIGNoZWNrIGlmIGEgY293ZGV2aWNlIGhhcyB0byBiZSBvcGVuZWQgZHVyaW5nIGluc21vZC9tb2Rwcm9iZTsKLQkqKiB0d28gcGFyYW1ldGVycyBzaG91bGQgYmUgc3BlY2lmaWVkIHRoZW46IHJkb2ZpbGU9IGFuZCBjb3dmaWxlPQotCSovCi0JaWYoIChyZG9maWxlWzBdICE9ICdcMCcpICYmIChjb3dmaWxlWzBdICE9ICdcMCcpICkgewotCQljaGFyCSpwbyA9IG9wdGlvbjsKLQkJaW50CXdhbnRyZWNvdmVyID0gMDsKLQotCQkvKgotCQkqKiBjaGVjayBpZiBhdXRvbWF0aWMgcmVjb3ZlcnkgaXMgd2FudGVkCi0JCSovCi0JCXdoaWxlICgqcG8pIHsKLQkJCWlmICgqcG8gPT0gJ3InKSB7Ci0JCQkJd2FudHJlY292ZXIgPSAxOwotCQkJCWJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCQkJcG8rKzsKLQkJfQotCi0JCS8qCi0JCSoqIG9wZW4gbmV3IGNvd2RldmljZSB3aXRoIG1pbm9yIG51bWJlciAwCi0JCSovCi0JCWlmICggKHJ2ID0gY293bG9fb3BlbnBhaXIocmRvZmlsZSwgY293ZmlsZSwgd2FudHJlY292ZXIsIDApKSkgewotCQkJcmVtb3ZlX3Byb2NfZW50cnkoImNvdyIsIE5VTEwpOwotCQkJdW5yZWdpc3Rlcl9ibGtkZXYoQ09XTUFKT1IsIERFVklDRV9OQU1FKTsKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCQl9Ci0gICAgICAgIH0gZWxzZSB7Ci0JCS8qCi0JCSoqIGNoZWNrIGlmIG9ubHkgb25lIHBhcmFtZXRlciBoYXMgYmVlbiBzcGVjaWZpZWQKLQkJKi8KLQkJaWYoIChyZG9maWxlWzBdICE9ICdcMCcpIHx8IChjb3dmaWxlWzBdICE9ICdcMCcpICkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSBvbmx5IG9uZSBmaWxlbmFtZSBzcGVjaWZpZWRcbiIpOwotCQkJcmVtb3ZlX3Byb2NfZW50cnkoImNvdyIsIE5VTEwpOwotCQkJdW5yZWdpc3Rlcl9ibGtkZXYoQ09XTUFKT1IsIERFVklDRV9OQU1FKTsKLQkJCXJ2ID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCQl9Ci0JfQotCi0JLyoKLQkqKiBhbGxvY2F0ZSBmYWtlIGRpc2sgYXMgY29udHJvbCBjaGFubmVsIHRvIGhhbmRsZSB0aGUgcmVxdWVzdHMKLQkqKiB0byBhY3RpdmF0ZSBhbmQgZGVhY3RpdmF0ZSBjb3dkZXZpY2VzIGR5bmFtaWNhbGx5Ci0JKi8KLQlpZiAoIShjb3djdGxnZCA9IGFsbG9jX2Rpc2soMSkpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gdW5hYmxlIHRvIGFsbG9jX2Rpc2sgZm9yIGNvd2N0bFxuIik7Ci0KLQkJcmVtb3ZlX3Byb2NfZW50cnkoImNvdyIsIE5VTEwpOwotCQkodm9pZCkgY293bG9fY2xvc2VwYWlyKGNvd2RldmFsbFswXSk7Ci0JCXVucmVnaXN0ZXJfYmxrZGV2KENPV01BSk9SLCBERVZJQ0VfTkFNRSk7Ci0JCXJ2ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9vdXQ7Ci0JfQotCi0Jc3Bpbl9sb2NrX2luaXQoJmNvd2N0bHJxbG9jayk7Ci0JY293Y3RsZ2QtPm1ham9yICAgICAgICA9IENPV01BSk9SOwotCWNvd2N0bGdkLT5maXJzdF9taW5vciAgPSBDT1dDVEw7Ci0JY293Y3RsZ2QtPm1pbm9ycyAgICAgICA9IDE7Ci0JY293Y3RsZ2QtPmZvcHMgICAgICAgICA9ICZjb3dsb19mb3BzOwotCWNvd2N0bGdkLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCS8qIHRoZSBkZXZpY2UgaGFzIGNhcGFjaXR5IDAsIHNvIHRoZXJlIHdpbGwgYmUgbm8gcS1yZXF1ZXN0cyAqLwotCWNvd2N0bGdkLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKE5VTEwsICZjb3djdGxycWxvY2spOwotCXNwcmludGYoY293Y3RsZ2QtPmRpc2tfbmFtZSwgImNvd2N0bCIpOwotCXNldF9jYXBhY2l0eShjb3djdGxnZCwgMCk7Ci0KLQlhZGRfZGlzayhjb3djdGxnZCk7Ci0KLSAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gbnVtYmVyIG9mIGNvbmZpZ3VyZWQgY293ZGV2aWNlczogJWRcbiIsCi0JCQkJCQkJCW1heGNvd3MpOwotCWlmIChyZG9maWxlWzBdICE9ICdcMCcpIHsKLQkgICAgcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gaW5pdGlhbGl6ZWQgb24gcmRvZmlsZT0lc1xuIiwKLQkJCQkJCQkJcmRvZmlsZSk7Ci0JfSBlbHNlIHsKLQkgICAgcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gaW5pdGlhbGl6ZWQgd2l0aG91dCByZG9maWxlIHlldFxuIik7Ci0JfQotCXJldHVybiAwOwotCi1lcnJvcl9vdXQ6Ci0JZm9yIChtaW5vcj0wOyBtaW5vciA8IHVwdG9jb3dzIDsgbWlub3IrKykgewotCQlrZnJlZShjb3dkZXZhbGxbbWlub3JdKTsKLQl9Ci0Ja2ZyZWUoY293ZGV2YWxsKTsKLQlyZXR1cm4gcnY7Ci19Ci0KLS8qCi0qKiBjYWxsZWQgZHVyaW5nIHJtbW9kCi0qLwotc3RhdGljIHZvaWQgX19leGl0Ci1jb3dsb19jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWludAltaW5vcjsKLQotCS8qCi0JKiogZmx1c2ggYml0bWFwcyBhbmQgY293aGVhZHMgdG8gdGhlIGNvd2ZpbGVzCi0JKi8KLQlkb3duKCZjb3dkZXZsb2NrKTsKLQljb3dsb19zeW5jKCk7Ci0JdXAoJmNvd2RldmxvY2spOwotCi0JLyoKLQkqKiBjbG9zZSBhbGwgY293ZGV2aWNlcwotCSovCi0JZm9yIChtaW5vcj0wOyBtaW5vciA8IG1heGNvd3M7ICBtaW5vcisrKQotCQkodm9pZCkgY293bG9fY2xvc2VwYWlyKGNvd2RldmFsbFttaW5vcl0pOwotCi0JdW5yZWdpc3Rlcl9ibGtkZXYoQ09XTUFKT1IsIERFVklDRV9OQU1FKTsKLQotCS8qCi0JKiogZ2V0IHJpZCBvZiAvcHJvYy9jb3cgYW5kIHVucmVnaXN0ZXIgdGhlIGRyaXZlcgotCSovCi0JcmVtb3ZlX3Byb2NfZW50cnkoImNvdyIsIE5VTEwpOwotCi0JZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgbWF4Y293czsgbWlub3IrKykgewotCQlrZnJlZShjb3dkZXZhbGxbbWlub3JdKTsKLQl9Ci0Ja2ZyZWUoY293ZGV2YWxsKTsKLQotCWRlbF9nZW5kaXNrKGNvd2N0bGdkKTsgIC8qIHJldmVydCB0aGUgYWxsb2NfZGlzaygpICovCi0JcHV0X2Rpc2sgICAoY293Y3RsZ2QpOyAgLyogcmV2ZXJ0IHRoZSBhZGRfZGlzaygpICAgKi8KLQlibGtfY2xlYW51cF9xdWV1ZShjb3djdGxnZC0+cXVldWUpOyAvKiBjbGVhbnVwIHRoZSBlbXB0eSBxdWV1ZSAqLwotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gdW5sb2FkZWRcbiIpOwotfQotCi1tb2R1bGVfaW5pdChjb3dsb19pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChjb3dsb19jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmggYi9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZDRhMzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvY293bG9vcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSoqIERPIE5PVCBNT0RJRlkgVEhFU0UgVkFMVUVTICh3b3VsZCBtYWtlIG9sZCBjb3dmaWxlcyB1bnVzYWJsZSkKLSovCi0jZGVmaW5lCU1BUFVOSVQJCTEwMjQJCS8qIGJsb2Nrc2l6ZSBmb3IgYml0IGluIGJpdG1hcCAgICAgICAqLwotI2RlZmluZQlNVVNISUZUCQkxMAkJLyogYml0c2hpZnQgIGZvciBiaXQgaW4gYml0bWFwICAgICAgICovCi0jZGVmaW5lCU1VTUFTSwkJMHgzZmYJCS8qIGJpdG1hc2sgICBmb3IgYml0IGluIGJpdG1hcCAgICAgICAqLwotCi0jZGVmaW5lCUNPV01BR0lDCTB4NTc0ZjQzN2YJLyogYnl0ZS1zd2FwcGVkICc3ZiBDIE8gVycgICAgICAgICAgICovCi0jZGVmaW5lCUNPV0RJUlRZCTB4MDEKLSNkZWZpbmUJQ09XUEFDS0VECTB4MDIKLSNkZWZpbmUJQ09XVkVSU0lPTgkxCi0KLXN0cnVjdCBjb3doZWFkCi17Ci0JaW50CQltYWdpYzsJCS8qIGlkZW50aWZpZXMgYSBjb3dmaWxlICAgICAgICAgICAgICAqLwotCXNob3J0CQl2ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIGNvd2hlYWQgICAgICAgICAgICAgICAgKi8KLQlzaG9ydAkJZmxhZ3M7ICAgIAkvKiBmbGFncyBpbmRpY2F0aW5nIHN0YXR1cyAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCW1hcHVuaXQ7CS8qIGJsb2Nrc2l6ZSBwZXIgYml0IGluIGJpdG1hcCAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJbWFwc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBiaXRtYXAgKGJ5dGVzKSAgICAgICovCi0JdW5zaWduZWQgbG9uZwlkb2Zmc2V0OwkvKiBzdGFydC1vZmZzZXQgZGF0YWJsb2NrcyBpbiBjb3cgICAgKi8KLQl1bnNpZ25lZCBsb25nCXJkb2Jsb2NrczsJLyogc2l6ZSBvZiByZWxhdGVkIHJlYWQtb25seSBmaWxlICAgICovCi0JdW5zaWduZWQgbG9uZwlyZG9maW5nZXJwcmludDsJLyogZmluZ2VycHJpbnQgb2YgcmVhZC1vbmx5IGZpbGUgICAgICovCi0JdW5zaWduZWQgbG9uZwljb3d1c2VkOwkvKiBudW1iZXIgb2YgZGF0YWJsb2NrcyB1c2VkIGluIGNvdyAgKi8KLX07Ci0KLSNkZWZpbmUgQ09XREVWRElSCSIvZGV2L2Nvdy8iCi0jZGVmaW5lIENPV0RFVklDRQlDT1dERVZESVIgIiVsZCIKLSNkZWZpbmUgQ09XQ09OVFJPTAlDT1dERVZESVIgImN0bCIKLQotI2RlZmluZSBNQVhDT1dTCQkxMDI0Ci0jZGVmaW5lIENPV0NUTAkJKE1BWENPV1MtMSkJLyogbWlub3IgbnVtYmVyIG9mIC9kZXYvY293L2N0bCAgICAgKi8KLQotI2RlZmluZSBDT1dQUk9DRElSCSIvcHJvYy9jb3cvIgotI2RlZmluZSBDT1dQUk9DRklMRQlDT1dQUk9DRElSICIlZCIKLQotLyoKLSoqIGlvY3RsIHJlbGF0ZWQgc3R1ZmYKLSovCi0jZGVmaW5lIEFOWURFVgkJKCh1bnNpZ25lZCBsb25nKS0xKQotCi1zdHJ1Y3QgY293cGFpcgotewotCXVuc2lnbmVkIGNoYXIJKnJkb2ZpbGU7CS8qIHBhdGhuYW1lIG9mIHRoZSByZG9maWxlICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIJKmNvd2ZpbGU7CS8qIHBhdGhuYW1lIG9mIHRoZSBjb3dmaWxlICAgICAgICAgICAqLwotCXVuc2lnbmVkIHNob3J0CXJkb2ZsZW47CS8qIGxlbmd0aCBvZiByZG9maWxlIHBhdGhuYW1lICAgICAgICAqLwotCXVuc2lnbmVkIHNob3J0CWNvd2ZsZW47CS8qIGxlbmd0aCBvZiBjb3dmaWxlIHBhdGhuYW1lICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJZGV2aWNlOwkJLyogcmVxdWVzdGVkL3JldHVybmVkIGRldmljZSBudW1iZXIgICovCi19OwotCi1zdHJ1Y3QgY293d2F0Y2gKLXsKLQlpbnQgICAgICAJZmxhZ3M7CQkvKiByZXF1ZXN0IGZsYWdzICAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWRldmljZTsJCS8qIHJlcXVlc3RlZCBkZXZpY2UgbnVtYmVyICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJdGhyZXNob2xkOwkvKiBjb250aW51ZSBpZiBmcmVlIEtiIDwgdGhyZXNob2xkICAgKi8KLQl1bnNpZ25lZCBsb25nCXRvdGFsa2I7CS8qIHJldDogdG90YWwgZmlsZXN5c3RlbSBzaXplIChLYikgICAqLwotCXVuc2lnbmVkIGxvbmcJYXZhaWxrYjsJLyogcmV0OiBmcmVlICBmaWxlc3lzdGVtIHNpemUgKEtiKSAgICovCi19OwotCi0jZGVmaW5lCVdBVENIV0FJVAkweDAxCQkvKiBibG9jayB1bnRpbCB0aHJlc2hvbGQgcmVhY2hlZCAgICAgKi8KLQotI2RlZmluZQlDT1dTWU5DCQlfSU8gICgnQycsIDEpCi0jZGVmaW5lCUNPV01LUEFJUglfSU9XICgnQycsIDIsIHN0cnVjdCBjb3dwYWlyKQotI2RlZmluZQlDT1dSTVBBSVIJX0lPVyAoJ0MnLCAzLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZQlDT1dXQVRDSAlfSU9XICgnQycsIDQsIHN0cnVjdCBjb3d3YXRjaCkKLSNkZWZpbmUJQ09XQ0xPU0UJX0lPVyAoJ0MnLCA1LCB1bnNpZ25lZCBsb25nKQotI2RlZmluZQlDT1dSRE9QRU4JX0lPVyAoJ0MnLCA2LCB1bnNpZ25lZCBsb25nKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCmluZGV4IGVlMTYwMTAuLmMyNGU0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHEtPnF1ZXVlZGF0YTsKIAlpbnQgZXJyID0gLUVJTzsKIAotCWlmIChiaW9fZW1wdHlfYmFycmllcihiaW8pICYmICFxLT5wcmVwYXJlX2Rpc2NhcmRfZm4pIHsKKwlpZiAoYmlvX2VtcHR5X2JhcnJpZXIoYmlvKSAmJiAhYmxrX3F1ZXVlX2Rpc2NhcmQocSkpIHsKIAkJLyoKIAkJICogVGhpcyBpcyBhIGRpcnR5XlduaWNlIGhhY2ssIGJ1dCBpZiB3ZSBjb21wbGV0ZSB0aGlzCiAJCSAqIG9wZXJhdGlvbiB3aXRoIC1FT1BOT1RTVVBQIGxpa2UgaW50ZW5kZWQsIFhGUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKaW5kZXggNjI5NGQzOC4uMmMzZDY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogZXh0ZXJuIGlubGluZSB2b2lkIGFkZF8xMGJpdCh1MzIgKnYsIGludCBuKQogewotCSp2ID0gSU5ERVgxMCgqdiArIG4pOworCSp2ID0gSU5ERVgxMCgqdiArIG4pIHwgKCp2ICYgRVRfRE1BMTBfV1JBUCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwppbmRleCA4ZjJlOTFmLi4xMGUyMWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKQEAgLTExNzcsMTIgKzExNzcsMjAgQEAKIAogc3RhdGljIGlubGluZSB1MzIgYnVtcF9mYnIodTMyICpmYnIsIHUzMiBsaW1pdCkKIHsKLQl1MzIgdiA9ICpmYnI7Ci0JYWRkXzEwYml0KCZ2LCAxKTsKLQlpZiAodiA+IGxpbWl0KQotCQl2ID0gKCpmYnIgJiB+RVRfRE1BMTBfTUFTSykgXiBFVF9ETUExMF9XUkFQOwotCSpmYnIgPSB2OwotCXJldHVybiB2OworICAgICAgICB1MzIgdiA9ICpmYnI7CisgICAgICAgIHYrKzsKKyAgICAgICAgLyogVGhpcyB3b3JrcyBmb3IgYWxsIGNhc2VzIHdoZXJlIGxpbWl0IDwgMTAyNC4gVGhlIDEwMjMgY2FzZQorICAgICAgICAgICB3b3JrcyBiZWNhdXNlIDEwMjMrKyBpcyAxMDI0IHdoaWNoIG1lYW5zIHRoZSBpZiBjb25kaXRpb24gaXMgbm90CisgICAgICAgICAgIHRha2VuIGJ1dCB0aGUgY2Fycnkgb2YgdGhlIGJpdCBpbnRvIHRoZSB3cmFwIGJpdCB0b2dnbGVzIHRoZSB3cmFwCisgICAgICAgICAgIHZhbHVlIGNvcnJlY3RseSAqLworICAgICAgICBpZiAoKHYgJiBFVF9ETUExMF9NQVNLKSA+IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgdiAmPSB+RVRfRE1BMTBfTUFTSzsKKyAgICAgICAgICAgICAgICB2IF49IEVUX0RNQTEwX1dSQVA7CisgICAgICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSAxMDIzIGNhc2UgKi8KKyAgICAgICAgdiAmPSAoRVRfRE1BMTBfTUFTS3xFVF9ETUExMF9XUkFQKTsKKyAgICAgICAgKmZiciA9IHY7CisgICAgICAgIHJldHVybiB2OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9DaGFubmVsTWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKaW5kZXggYTgzOWQ4Zi4uZmE5NzNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgX0NIQU5ORUxfTUdNVF9IXwogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSAiUmluZ0J1ZmZlci5oIgogI2luY2x1ZGUgIlZtYnVzQ2hhbm5lbEludGVyZmFjZS5oIgogI2luY2x1ZGUgIlZtYnVzUGFja2V0Rm9ybWF0LmgiCkBAIC01NCw3ICs1NSw3IEBACiAJQ2hhbm5lbE1lc3NhZ2VWaWV3UmFuZ2VSZW1vdmUJCT0gMTgsCiAjZW5kaWYKIAlDaGFubmVsTWVzc2FnZUNvdW50Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgewogCWVudW0gdm1idXNfY2hhbm5lbF9tZXNzYWdlX3R5cGUgTWVzc2FnZVR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMKaW5kZXggMTYxMGI4NC4uZDM4NGMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssIGZsYWdzKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJm5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QpKSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0LCAmbGlzdEhlYWQpOworCQlsaXN0X21vdmVfdGFpbChuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0Lm5leHQsICZsaXN0SGVhZCk7CiAJCWlmICgrK2NvdW50ID09IHZteGZlcnBhZ2VQYWNrZXQtPlJhbmdlQ291bnQgKyAxKQogCQkJYnJlYWs7CiAJfQpAQCAtMTA3MSw3ICsxMDcxLDcgQEAKIAkJLyogUmV0dXJuIGl0IHRvIHRoZSBmcmVlbGlzdCAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssIGZsYWdzKTsKIAkJZm9yIChpID0gY291bnQ7IGkgIT0gMDsgaS0tKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmbGlzdEhlYWQsCisJCQlsaXN0X21vdmVfdGFpbChsaXN0SGVhZC5uZXh0LAogCQkJCSAgICAgICAmbmV0RGV2aWNlLT5SZWNlaXZlUGFja2V0TGlzdCk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssCkBAIC0xMDg1LDggKzEwODUsNyBAQAogCX0KIAogCS8qIFJlbW92ZSB0aGUgMXN0IHBhY2tldCB0byByZXByZXNlbnQgdGhlIHhmZXIgcGFnZSBwYWNrZXQgaXRzZWxmICovCi0JeGZlcnBhZ2VQYWNrZXQgPSBsaXN0X2VudHJ5KCZsaXN0SGVhZCwgc3RydWN0IHhmZXJwYWdlX3BhY2tldCwKLQkJCQkgICAgTGlzdEVudHJ5KTsKKwl4ZmVycGFnZVBhY2tldCA9IChzdHJ1Y3QgeGZlcnBhZ2VfcGFja2V0KilsaXN0SGVhZC5uZXh0OwogCWxpc3RfZGVsKCZ4ZmVycGFnZVBhY2tldC0+TGlzdEVudHJ5KTsKIAogCS8qIFRoaXMgaXMgaG93IG11Y2ggd2UgY2FuIHNhdGlzZnkgKi8KQEAgLTExMDIsOCArMTEwMSw3IEBACiAKIAkvKiBFYWNoIHJhbmdlIHJlcHJlc2VudHMgMSBSTkRJUyBwa3QgdGhhdCBjb250YWlucyAxIGV0aGVybmV0IGZyYW1lICovCiAJZm9yIChpID0gMDsgaSA8IChjb3VudCAtIDEpOyBpKyspIHsKLQkJbmV0dnNjUGFja2V0ID0gbGlzdF9lbnRyeSgmbGlzdEhlYWQsIHN0cnVjdCBodl9uZXR2c2NfcGFja2V0LAotCQkJCQkgIExpc3RFbnRyeSk7CisJCW5ldHZzY1BhY2tldCA9IChzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCopbGlzdEhlYWQubmV4dDsKIAkJbGlzdF9kZWwoJm5ldHZzY1BhY2tldC0+TGlzdEVudHJ5KTsKIAogCQkvKiBJbml0aWFsaXplIHRoZSBuZXR2c2MgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCmluZGV4IDRkMzkwYjIuLmRiZmJkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCkBAIC0xLDExICsxLDE3IEBACiBUT0RPOgogCS0gZml4IHJlbWFpbmluZyBjaGVja3BhdGNoIHdhcm5pbmdzIGFuZCBlcnJvcnMKKwktIHVzZSBvZiAvKiogd2hlbiBpdCBpcyBub3QgYSBrZXJuZWxkb2MgaGVhZGVyCiAJLSByZW1vdmUgUmluZ0J1ZmZlci5jIHRvIHVzIGluLWtlcm5lbCByaW5nYnVmZmVyIGZ1bmN0aW9ucyBpbnN0ZWFkLgogCS0gYXVkaXQgdGhlIHZtYnVzIHRvIHZlcmlmeSBpdCBpcyB3b3JraW5nIHByb3Blcmx5IHdpdGggdGhlCiAJICBkcml2ZXIgbW9kZWwKKwktIGNvbnZlcnQgdm1idXMgZHJpdmVyIGludGVyZmFjZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcworICAgICAgICAgIHRvIGNvbnN0YW50LCBhLmsuYSB2bWJ1c19vcHMKIAktIHNlZSBpZiB0aGUgdm1idXMgY2FuIGJlIG1lcmdlZCB3aXRoIHRoZSBvdGhlciB2aXJ0dWFsIGJ1c3NlcwogCSAgaW4gdGhlIGtlcm5lbAogCS0gYXVkaXQgdGhlIG5ldHdvcmsgZHJpdmVyCisJICAtIHVzZSBleGlzdGluZyBuZXRfZGV2aWNlX3N0YXRzIHN0cnVjdCBpbiBuZXR3b3JrIGRldmljZQorCSAgLSBjaGVja2luZyBmb3IgY2FycmllciBpbnNpZGUgb3BlbiBpcyB3cm9uZywgbmV0d29yayBkZXZpY2UgQVBJCisgICAgICAgICAgICBjb25mdXNpb24/PwogCS0gYXVkaXQgdGhlIGJsb2NrIGRyaXZlcgogCS0gYXVkaXQgdGhlIHNjc2kgZHJpdmVyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYwppbmRleCA4ZmU1NDNiLi4zYTQ3OTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaAppbmRleCA5NTA0NjA0Li5jZTA2NGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIF9PU0RfSF8KICNkZWZpbmUgX09TRF9IXwogCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIC8qIERlZmluZXMgKi8KICNkZWZpbmUgQUxJR05fVVAodmFsdWUsIGFsaWduKQkoKCh2YWx1ZSkgJiAoYWxpZ24tMSkpID8JCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYwppbmRleCA1ODIzMThmLi44OTRlZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCkBAIC01MDcsMTIgKzUwNywxMiBAQAogCiAJY2hpbGRfZGV2aWNlX29iaiA9ICZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCWNoaWxkX2RldmljZV9vYmotPmNvbnRleHQgPSBjb250ZXh0OwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlVHlwZSwgJnR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlSW5zdGFuY2UsICZpbnN0YW5jZSwKKwltZW1jcHkoJmNoaWxkX2RldmljZV9vYmotPmRldmljZVR5cGUsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlSW5zdGFuY2UsIGluc3RhbmNlLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKIAotCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+Y2xhc3NfaWQsICZ0eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKLQltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9pZCwgJmluc3RhbmNlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKKwltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmNsYXNzX2lkLCB0eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKKwltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9pZCwgaW5zdGFuY2UsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwogCiAJRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIApAQCAtNTM3LDE4ICs1MzcsNyBAQAogCURQUklOVF9EQkcoVk1CVVNfRFJWLCAiY2hpbGQgZGV2aWNlICglcCkgcmVnaXN0ZXJpbmciLAogCQkgICBjaGlsZF9kZXZpY2VfY3R4KTsKIAotCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlZ2lzdGVyZWQgYWxyZWFkeSAqLwotCWlmIChzdHJsZW4oZGV2X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSkpICE9IDApIHsKLQkJRFBSSU5UX0VSUihWTUJVU19EUlYsCi0JCQkgICAiY2hpbGQgZGV2aWNlICglcCkgYWxyZWFkeSByZWdpc3RlcmVkIC0gYnVzaWQgJXMiLAotCQkJICAgY2hpbGRfZGV2aWNlX2N0eCwKLQkJCSAgIGRldl9uYW1lKCZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2UpKTsKLQotCQlyZXQgPSAtMTsKLQkJZ290byBDbGVhbnVwOwotCX0KLQotCS8qIFNldCB0aGUgZGV2aWNlIGJ1cyBpZC4gT3RoZXJ3aXNlLCBkZXZpY2VfcmVnaXN0ZXIoKXdpbGwgZmFpbC4gKi8KKwkvKiBTZXQgdGhlIGRldmljZSBuYW1lLiBPdGhlcndpc2UsIGRldmljZV9yZWdpc3RlcigpIHdpbGwgZmFpbC4gKi8KIAlkZXZfc2V0X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSwgInZtYnVzXzBfJWQiLAogCQkgICAgIGF0b21pY19pbmNfcmV0dXJuKCZkZXZpY2VfbnVtKSk7CiAKQEAgLTU3Myw3ICs1NjIsNiBAQAogCQlEUFJJTlRfSU5GTyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmVkIiwKIAkJCSAgICAmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlKTsKIAotQ2xlYW51cDoKIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCiAJcmV0dXJuIHJldDsKQEAgLTYyMyw4ICs2MTEsNiBAQAogc3RhdGljIGludCB2bWJ1c191ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CiAJc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGRldmljZSk7Ci0JaW50IGkgPSAwOwotCWludCBsZW4gPSAwOwogCWludCByZXQ7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKQEAgLTY0NCw4ICs2MzAsNiBAQAogCQkgICAgZGV2aWNlX2N0eC0+Y2xhc3NfaWQuZGF0YVsxNF0sCiAJCSAgICBkZXZpY2VfY3R4LT5jbGFzc19pZC5kYXRhWzE1XSk7CiAKLQllbnYtPmVudnBfaWR4ID0gaTsKLQllbnYtPmJ1ZmxlbiA9IGxlbjsKIAlyZXQgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJWTUJVU19ERVZJQ0VfQ0xBU1NfR1VJRD17IgogCQkJICAgICAiJTAyeCUwMnglMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0iCiAJCQkgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeH0iLApAQCAtNjkxLDggKzY3NSw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWVudi0+ZW52cFtlbnYtPmVudnBfaWR4XSA9IE5VTEw7Ci0KIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcKaW5kZXggYmViOTlhNS4uNDU4NjY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAKIAogbWVudWNvbmZpZyBJSU8KIAl0cmlzdGF0ZSAiSW5kdXN0cmlhbCBJL08gc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFTMzkwCiAJLS0taGVscC0tLQogCSAgVGhlIGluZHVzdHJpYWwgSS9PIHN1YnN5c3RlbSBwcm92aWRlcyBhIHVuaWZpZWQgZnJhbWV3b3JrIGZvcgogCSAgZHJpdmVycyBmb3IgbWFueSBkaWZmZXJlbnQgdHlwZXMgb2YgZW1iZWRkZWQgc2Vuc29ycyB1c2luZyBhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKaW5kZXggMWZhMThmMi4uNzY4ZjQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlICJpaW8uaCIKICNpbmNsdWRlICJ0cmlnZ2VyX2NvbnN1bWVyLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L3RzbDI1NjEuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jCmluZGV4IGVhOGE1ZWYuLmZjMjEwN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jCkBAIC0yMzksMTAgKzIzOSw2IEBACiAJcmV0dXJuIHRzbDI1NjFfcG93ZXJkb3duKGNsaWVudCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjksIDB4MzksIDB4NDksIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHNsMjU2MV9pZFtdID0gewogCXsgInRzbDI1NjEiLCAwIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZwppbmRleCBkNTQ5ZDA4Li5mNmNjMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgT1RVUwogCXRyaXN0YXRlICJBdGhlcm9zIE9UVVMgODAyLjExbiBVU0Igd2lyZWxlc3Mgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBXTEFOXzgwMjExICYmIE1BQzgwMjExCisJZGVwZW5kcyBvbiBVU0IgJiYgV0xBTiAmJiBNQUM4MDIxMQogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBBdGhlcm9zIDgwMi4xMW4gVVNCIGhhcmR3YXJlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvcDlhdXRoLmMKaW5kZXggOTExMWRjYi4uOGNjZmZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAl1c2VyX2J1Zl9ydW5uaW5nID0gTlVMTDsKIAloYXNoX3N0ciA9IE5VTEw7CiAJbm9kZV9wdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FwX25vZGUpLCBHRlBfS0VSTkVMKTsKLQl1c2VyX2J1ZiA9IGt6YWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCXVzZXJfYnVmID0ga3phbGxvYyhjb3VudCsxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5vZGVfcHRyIHx8ICF1c2VyX2J1ZikKIAkJZ290byBvdXQ7CiAKQEAgLTIwNyw2ICsyMDcsNyBAQAogCQlsaXN0X2FkZCgmKG5vZGVfcHRyLT5saXN0KSwgJihkZXYtPmhlYWQtPmxpc3QpKTsKIAkJbm9kZV9wdHIgPSBOVUxMOwogCX0gZWxzZSB7CisJCWNoYXIgKnRtcHU7CiAJCWlmICghY2FwX2RldmljZXNbMF0uaGVhZCB8fAogCQkJCWxpc3RfZW1wdHkoJihjYXBfZGV2aWNlc1swXS5oZWFkLT5saXN0KSkpIHsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CkBAIC0yMTgsMTAgKzIxOSwxMCBAQAogCQkgKiBuZWVkIHRvIHNwbGl0IGl0IGFuZCBoYXNoICd1c2VyMUB1c2VyMicgdXNpbmcgJ3JhbmRvbXN0cmluZycKIAkJICogYXMgdGhlIGtleS4KIAkJICovCi0JCXVzZXJfYnVmX3J1bm5pbmcgPSBrc3RyZHVwKHVzZXJfYnVmLCBHRlBfS0VSTkVMKTsKLQkJc291cmNlX3VzZXIgPSBzdHJzZXAoJnVzZXJfYnVmX3J1bm5pbmcsICJAIik7Ci0JCXRhcmdldF91c2VyID0gc3Ryc2VwKCZ1c2VyX2J1Zl9ydW5uaW5nLCAiQCIpOwotCQlyYW5kX3N0ciA9IHN0cnNlcCgmdXNlcl9idWZfcnVubmluZywgIkAiKTsKKwkJdG1wdSA9IHVzZXJfYnVmX3J1bm5pbmcgPSBrc3RyZHVwKHVzZXJfYnVmLCBHRlBfS0VSTkVMKTsKKwkJc291cmNlX3VzZXIgPSBzdHJzZXAoJnRtcHUsICJAIik7CisJCXRhcmdldF91c2VyID0gc3Ryc2VwKCZ0bXB1LCAiQCIpOworCQlyYW5kX3N0ciA9IHRtcHU7CiAJCWlmICghc291cmNlX3VzZXIgfHwgIXRhcmdldF91c2VyIHx8ICFyYW5kX3N0cikgewogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwpAQCAtMjI5LDcgKzIzMCw4IEBACiAKIAkJLyogaGFzaCB0aGUgc3RyaW5nIHVzZXIxQHVzZXIyIHdpdGggcmFuZF9zdHIgYXMgdGhlIGtleSAqLwogCQlsZW4gPSBzdHJsZW4oc291cmNlX3VzZXIpICsgc3RybGVuKHRhcmdldF91c2VyKSArIDE7Ci0JCWhhc2hfc3RyID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCQkvKiBzcmMsIEAsIGxlbiwgXDAgKi8KKwkJaGFzaF9zdHIgPSBremFsbG9jKGxlbisxLCBHRlBfS0VSTkVMKTsKIAkJc3RyY2F0KGhhc2hfc3RyLCBzb3VyY2VfdXNlcik7CiAJCXN0cmNhdChoYXNoX3N0ciwgIkAiKTsKIAkJc3RyY2F0KGhhc2hfc3RyLCB0YXJnZXRfdXNlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IGRkN2QzZmQuLjRjZTM5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC0yMDcxLDExICsyMDcxLDE1IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoa2V5cGFkX2VuYWJsZWQgJiYga2V5cGFkX2luaXRpYWxpemVkKQorCWlmIChrZXlwYWRfZW5hYmxlZCAmJiBrZXlwYWRfaW5pdGlhbGl6ZWQpIHsKIAkJbWlzY19kZXJlZ2lzdGVyKCZrZXlwYWRfZGV2KTsKKwkJa2V5cGFkX2luaXRpYWxpemVkID0gMDsKKwl9CiAKLQlpZiAobGNkX2VuYWJsZWQgJiYgbGNkX2luaXRpYWxpemVkKQorCWlmIChsY2RfZW5hYmxlZCAmJiBsY2RfaW5pdGlhbGl6ZWQpIHsKIAkJbWlzY19kZXJlZ2lzdGVyKCZsY2RfZGV2KTsKKwkJbGNkX2luaXRpYWxpemVkID0gMDsKKwl9CiAKIAlwYXJwb3J0X3JlbGVhc2UocHBydCk7CiAJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcHJ0KTsKQEAgLTIyMTEsMTMgKzIyMTUsMTYgQEAKIAkJZGVsX3RpbWVyKCZzY2FuX3RpbWVyKTsKIAogCWlmIChwcHJ0ICE9IE5VTEwpIHsKLQkJaWYgKGtleXBhZF9lbmFibGVkKQorCQlpZiAoa2V5cGFkX2VuYWJsZWQpIHsKIAkJCW1pc2NfZGVyZWdpc3Rlcigma2V5cGFkX2Rldik7CisJCQlrZXlwYWRfaW5pdGlhbGl6ZWQgPSAwOworCQl9CiAKIAkJaWYgKGxjZF9lbmFibGVkKSB7CiAJCQlwYW5lbF9sY2RfcHJpbnQoIlx4MGNMQ0QgZHJpdmVyICIgUEFORUxfVkVSU0lPTgogCQkJCQkiXG51bmxvYWRlZC5ceDFiW0xjXHgxYltMYlx4MWJbTC0iKTsKIAkJCW1pc2NfZGVyZWdpc3RlcigmbGNkX2Rldik7CisJCQlsY2RfaW5pdGlhbGl6ZWQgPSAwOwogCQl9CiAKIAkJLyogVE9ETzogZnJlZSBhbGwgaW5wdXQgc2lnbmFscyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jIGIvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jCmluZGV4IDBkMTExZGQuLjJlYjhlM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJwb2NoLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZwppbmRleCA3ZjQ0ZTVlLi5lZmUzOGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFJUMjg2MAogCXRyaXN0YXRlICJSYWxpbmsgMjg2MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgMjg2MCB3aXJlbGVzcyBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jCmluZGV4IGZiMTczNTUuLjg1N2ZmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMKQEAgLTM2Myw2ICszNjMsOCBAQAogCVVMT05HCQkJU3dJZHggPSBwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4OwogCiAJcFR4RCAgPSAoUFRYRF9TVFJVQykgcEFkLT5NZ210UmluZy5DZWxsW1N3SWR4XS5BbGxvY1ZhOworCWlmICghcFR4RCkKKwkJcmV0dXJuIDA7CiAKIAlwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLnBOZGlzUGFja2V0ID0gcFBhY2tldDsKIAlwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYwppbmRleCA5ZDU4OWMyLi4wMTljYzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMKQEAgLTI1LDYgKzI1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKIAogSU5UCVNob3dfU1NJRF9Qcm9jKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCmluZGV4IGIzOTZhOWIuLmVkMjdiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKQEAgLTI1LDYgKzI1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAicnRfY29uZmlnLmgiCiAKIFVMT05HCVJURGVidWdMZXZlbCA9IFJUX0RFQlVHX0VSUk9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnCmluZGV4IDc2ODQxZjYuLmFlYTVjODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUlQyODcwCiAJdHJpc3RhdGUgIlJhbGluayAyODcwLzMwNzAgd2lyZWxlc3Mgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBYODYgJiYgV0xBTl84MDIxMQorCWRlcGVuZHMgb24gVVNCICYmIFg4NiAmJiBXTEFOCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIHh4NzAgd2lyZWxlc3MgY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL0tjb25maWcKaW5kZXggMjU1ZThlYS4uMmIzZjc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBSVDMwOTAKIAl0cmlzdGF0ZSAiUmFsaW5rIDMwOTAgd2lyZWxlc3Mgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgV0xBTl84MDIxMQorCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBXTEFOCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIDMwOTAgd2lyZWxlc3MgY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvY29tbW9uL2NtbV9pbmZvLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL2NvbW1vbi9jbW1faW5mby5jCmluZGV4IDViZTA3MTQuLjNlNTFlOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvY29tbW9uL2NtbV9pbmZvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYwpAQCAtMzQsNiArMzQsNyBAQAogICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL3J0X2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL3J0X2xpbnV4LmMKaW5kZXggZDIyNDFlYy4uOWI5NGFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9ydF9saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYwpAQCAtMjUsNiArMjUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJydF9jb25maWcuaCIKIAogVUxPTkcJUlREZWJ1Z0xldmVsID0gUlRfREVCVUdfRVJST1I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKaW5kZXggMjM2ZTQyNy4uMjAzYzc5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBSVEw4MTg3U0UKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTg3U0UgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAJZGVwZW5kcyBvbiBXSVJFTEVTU19FWFQKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IDAxM2MzZTEuLjRjNWQ2M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC01MywxMCArNTMsOCBAQAogCiAJCWxpc3RfZGVsKHB0cik7CiAKLQkJaWYgKGVudHJ5LT5vcHMpIHsKKwkJaWYgKGVudHJ5LT5vcHMpCiAJCQllbnRyeS0+b3BzLT5kZWluaXQoZW50cnktPnByaXYpOwotCQkJbW9kdWxlX3B1dChlbnRyeS0+b3BzLT5vd25lcik7Ci0JCX0KIAkJa2ZyZWUoZW50cnkpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCA2ZmJlNDg5Li4xODM5MmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCkBAIC0xODksMTAgKzE4OSw4IEBACiAJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspIHsKIAkJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCA9IGllZWUtPmNyeXB0W2ldOwogCQlpZiAoY3J5cHQpIHsKLQkJCWlmIChjcnlwdC0+b3BzKSB7CisJCQlpZiAoY3J5cHQtPm9wcykKIAkJCQljcnlwdC0+b3BzLT5kZWluaXQoY3J5cHQtPnByaXYpOwotCQkJCW1vZHVsZV9wdXQoY3J5cHQtPm9wcy0+b3duZXIpOwotCQkJfQogCQkJa2ZyZWUoY3J5cHQpOwogCQkJaWVlZS0+Y3J5cHRbaV0gPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCA1OWIyYWI0Li4zMzRlNGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTI4MzksMTYgKzI4MzksMTIgQEAKIAkJZ290byBza2lwX2hvc3RfY3J5cHQ7CiAKIAlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfdGtpcCIpOworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF9jY21wIik7CisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9CiAJaWYgKG9wcyA9PSBOVUxMKSB7CiAJCXByaW50aygidW5rbm93biBjcnlwdG8gYWxnICclcydcbiIsIHBhcmFtLT51LmNyeXB0LmFsZyk7CiAJCXBhcmFtLT51LmNyeXB0LmVyciA9IElFRUVfQ1JZUFRfRVJSX1VOS05PV05fQUxHOwpAQCAtMjg2OSw3ICsyODY1LDcgQEAKIAkJfQogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gb3BzOwotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0KIAkJCQluZXdfY3J5cHQtPm9wcy0+aW5pdChwYXJhbS0+dS5jcnlwdC5pZHgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDhkOGJkZDAuLmEwOGI5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC0zMzEsMTIgKzMzMSwxMCBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoIldFUCIpOwotCQlpZiAoIW5ld19jcnlwdC0+b3BzKSB7Ci0JCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCQlpZiAoIW5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5vcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoIldFUCIpOwotCQl9CiAKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGtleSk7CiAKIAkJaWYgKCFuZXdfY3J5cHQtPm9wcyB8fCAhbmV3X2NyeXB0LT5wcml2KSB7CkBAIC00ODMsNyArNDgxLDcgQEAKICAgICAgICAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwogICAgICAgICBpbnQgaSwgaWR4LCByZXQgPSAwOwogICAgICAgICBpbnQgZ3JvdXBfa2V5ID0gMDsKLSAgICAgICAgY29uc3QgY2hhciAqYWxnLCAqbW9kdWxlOworICAgICAgICBjb25zdCBjaGFyICphbGc7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqb3BzOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKipjcnlwdDsKIApAQCAtNTM5LDE1ICs1MzcsMTIgQEAKICAgICAgICAgc3dpdGNoIChleHQtPmFsZykgewogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfV0VQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJXRVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfd2VwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIlRLSVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfdGtpcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgogICAgICAgICAgICAgICAgIGFsZyA9ICJDQ01QIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X2NjbXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKQEAgLTU1OCwxMCArNTUzLDggQEAKIC8vCXByaW50aygiOC0wOS0wOC05PT09PT0+JXMsIGFsZyBuYW1lOiVzXG4iLF9fZnVuY19fLCBhbGcpOwogCiAJIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0X21vZHVsZShtb2R1bGUpOworICAgICAgICBpZiAob3BzID09IE5VTEwpCiAgICAgICAgICAgICAgICAgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGV4dC0+YWxnKTsKQEAgLTU4MSw3ICs1NzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBuZXdfY3J5cHQtPm9wcyA9IG9wczsKLSAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKyAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5vcHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY3J5cHQtPnByaXYgPSBuZXdfY3J5cHQtPm9wcy0+aW5pdChpZHgpOwogICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPnByaXYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUobmV3X2NyeXB0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKaW5kZXggMzEwMGFhNS4uMzdlNGZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUlRMODE5MkUKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTkyRSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFdMQU4KIAlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IDFhOGVhOGEuLmIxYzU0OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwpAQCAtNTMsMTQgKzUzLDggQEAKIAogCQlsaXN0X2RlbChwdHIpOwogCi0JCWlmIChlbnRyeS0+b3BzKSB7CisJCWlmIChlbnRyeS0+b3BzKQogCQkJZW50cnktPm9wcy0+ZGVpbml0KGVudHJ5LT5wcml2KTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JCQltb2R1bGVfcHV0KGVudHJ5LT5vcHMtPm93bmVyKTsKLSNlbHNlCi0JCQlfX01PRF9ERUNfVVNFX0NPVU5UKGVudHJ5LT5vcHMtPm93bmVyKTsKLSNlbmRpZgotCQl9CiAJCWtmcmVlKGVudHJ5KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IDE2MjU2YTMuLjEyYzJhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCkBAIC0yNDIsMTQgKzI0Miw4IEBACiAJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspIHsKIAkJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCA9IGllZWUtPmNyeXB0W2ldOwogCQlpZiAoY3J5cHQpIHsKLQkJCWlmIChjcnlwdC0+b3BzKSB7CisJCQlpZiAoY3J5cHQtPm9wcykKIAkJCQljcnlwdC0+b3BzLT5kZWluaXQoY3J5cHQtPnByaXYpOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQkJCQltb2R1bGVfcHV0KGNyeXB0LT5vcHMtPm93bmVyKTsKLSNlbHNlCi0JCQkJX19NT0RfREVDX1VTRV9DT1VOVChjcnlwdC0+b3BzLT5vd25lcik7Ci0jZW5kaWYKLQkJCX0KIAkJCWtmcmVlKGNyeXB0KTsKIAkJCWllZWUtPmNyeXB0W2ldID0gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDJmYzA0ZGYuLmVhZTdjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTMyODQsMTcgKzMyODQsMTQgQEAKIAkJZ290byBza2lwX2hvc3RfY3J5cHQ7CiAKIAlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCQkvL3NldCBXRVA0MCBmaXJzdCwgaXQgd2lsbCBiZSBtb2RpZmllZCBhY2NvcmRpbmcgdG8gV0VQMTA0IG9yIFdFUDQwIGF0IG90aGVyIHBsYWNlCi0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF90a2lwIik7CisJCS8qIHNldCBXRVA0MCBmaXJzdCwgaXQgd2lsbCBiZSBtb2RpZmllZCBhY2NvcmRpbmcgdG8gV0VQMTA0IG9yCisJCSAqIFdFUDQwIGF0IG90aGVyIHBsYWNlICovCisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X2NjbXAiKTsKKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0KIAlpZiAob3BzID09IE5VTEwpIHsKIAkJcHJpbnRrKCJ1bmtub3duIGNyeXB0byBhbGcgJyVzJ1xuIiwgcGFyYW0tPnUuY3J5cHQuYWxnKTsKIAkJcGFyYW0tPnUuY3J5cHQuZXJyID0gSUVFRV9DUllQVF9FUlJfVU5LTk9XTl9BTEc7CkBAIC0zMzE1LDExICszMzEyLDcgQEAKIAkJfQogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gb3BzOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCi0jZWxzZQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X2luY19tb2RfY291bnQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKLSNlbmRpZgorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPQogCQkJCW5ld19jcnlwdC0+b3BzLT5pbml0KHBhcmFtLT51LmNyeXB0LmlkeCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDIyMzQ4MzEuLjRlMzRhMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtNDgyLDE1ICs0ODIsOSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoIldFUCIpOwotCQlpZiAoIW5ld19jcnlwdC0+b3BzKSB7Ci0JCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCQlpZiAoIW5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5vcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoIldFUCIpOwotCQl9Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKLSNlbHNlCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfaW5jX21vZF9jb3VudChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotI2VuZGlmCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGtleSk7CiAKIAkJaWYgKCFuZXdfY3J5cHQtPm9wcyB8fCAhbmV3X2NyeXB0LT5wcml2KSB7CkBAIC02NDQsNyArNjM4LDcgQEAKICAgICAgICAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwogICAgICAgICBpbnQgaSwgaWR4OwogICAgICAgICBpbnQgZ3JvdXBfa2V5ID0gMDsKLSAgICAgICAgY29uc3QgY2hhciAqYWxnLCAqbW9kdWxlOworICAgICAgICBjb25zdCBjaGFyICphbGc7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqb3BzOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKipjcnlwdDsKIApAQCAtNzExLDE1ICs3MDUsMTIgQEAKICAgICAgICAgc3dpdGNoIChleHQtPmFsZykgewogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfV0VQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJXRVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfd2VwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIlRLSVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfdGtpcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgogICAgICAgICAgICAgICAgIGFsZyA9ICJDQ01QIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X2NjbXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKQEAgLTczMCwxMCArNzIxLDggQEAKIAlwcmludGsoImFsZyBuYW1lOiVzXG4iLGFsZyk7CiAKIAkgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJlcXVlc3RfbW9kdWxlKG1vZHVsZSk7CisgICAgICAgIGlmIChvcHMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgfQogICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgZXh0LT5hbGcpOwpAQCAtNzU4LDcgKzc0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+b3BzID0gb3BzOwotICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcykKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGlkeCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+cHJpdiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShuZXdfY3J5cHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYwppbmRleCBkNGZhNjU0Li5iMDgwMmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYwpAQCAtNDYsNiArNDYsNyBAQAogI3VuZGVmIERFQlVHX1RYX0RFU0MKIAogLy8jZGVmaW5lIENPTkZJR19SVEw4MTkyX0lPX01BUAorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgInI4MTkyRV9ody5oIgogI2luY2x1ZGUgInI4MTkyRS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCmluZGV4IDc3MGY0MTIuLmI4Yzk1ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUlRMODE5MlNVCiAJdHJpc3RhdGUgIlJlYWxUZWsgUlRMODE5MlNVIFdpcmVsZXNzIExBTiBOSUMgZHJpdmVyIgotCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgogCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCBkNzZhNTRkLi41MjFlN2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwpAQCAtNTMsMTAgKzUzLDggQEAKIAogCQlsaXN0X2RlbChwdHIpOwogCi0JCWlmIChlbnRyeS0+b3BzKSB7CisJCWlmIChlbnRyeS0+b3BzKQogCQkJZW50cnktPm9wcy0+ZGVpbml0KGVudHJ5LT5wcml2KTsKLQkJCW1vZHVsZV9wdXQoZW50cnktPm9wcy0+b3duZXIpOwotCQl9CiAJCWtmcmVlKGVudHJ5KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggNjhkYzhmYS4uYzMzODNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwpAQCAtMjE2LDEwICsyMTYsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQgPSBpZWVlLT5jcnlwdFtpXTsKIAkJaWYgKGNyeXB0KSB7Ci0JCQlpZiAoY3J5cHQtPm9wcykgeworCQkJaWYgKGNyeXB0LT5vcHMpCiAJCQkJY3J5cHQtPm9wcy0+ZGVpbml0KGNyeXB0LT5wcml2KTsKLQkJCQltb2R1bGVfcHV0KGNyeXB0LT5vcHMtPm93bmVyKTsKLQkJCX0KIAkJCWtmcmVlKGNyeXB0KTsKIAkJCWllZWUtPmNyeXB0W2ldID0gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggYzY0YWUwMy4uZmQ4ZTExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC0zMDI2LDE3ICszMDI2LDE0IEBACiAJCWdvdG8gc2tpcF9ob3N0X2NyeXB0OwogCiAJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQkJLy9zZXQgV0VQNDAgZmlyc3QsIGl0IHdpbGwgYmUgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIFdFUDEwNCBvciBXRVA0MCBhdCBvdGhlciBwbGFjZQotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfdGtpcCIpOworCQkvKiBzZXQgV0VQNDAgZmlyc3QsIGl0IHdpbGwgYmUgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIFdFUDEwNCBvcgorCQkgKiBXRVA0MCBhdCBvdGhlciBwbGFjZSAqLworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF9jY21wIik7CisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9CiAJaWYgKG9wcyA9PSBOVUxMKSB7CiAJCXByaW50aygidW5rbm93biBjcnlwdG8gYWxnICclcydcbiIsIHBhcmFtLT51LmNyeXB0LmFsZyk7CiAJCXBhcmFtLT51LmNyeXB0LmVyciA9IElFRUVfQ1JZUFRfRVJSX1VOS05PV05fQUxHOwpAQCAtMzA1OCw3ICszMDU1LDcgQEAKIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IG9wczsKIAotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0KIAkJCQluZXdfY3J5cHQtPm9wcy0+aW5pdChwYXJhbS0+dS5jcnlwdC5pZHgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDEwNzc1OTAuLjYxNDZjNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC0zNTgsMTEgKzM1OCw5IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCWlmICghbmV3X2NyeXB0LT5vcHMpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJCWlmICghbmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCX0KLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGtleSk7CiAKIAkJaWYgKCFuZXdfY3J5cHQtPm9wcyB8fCAhbmV3X2NyeXB0LT5wcml2KSB7CkBAIC01MDcsNyArNTA1LDcgQEAKICAgICAgICAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwogICAgICAgICBpbnQgaSwgaWR4OwogICAgICAgICBpbnQgZ3JvdXBfa2V5ID0gMDsKLSAgICAgICAgY29uc3QgY2hhciAqYWxnLCAqbW9kdWxlOworICAgICAgICBjb25zdCBjaGFyICphbGc7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqb3BzOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKipjcnlwdDsKIApAQCAtNTcwLDE1ICs1NjgsMTIgQEAKICAgICAgICAgc3dpdGNoIChleHQtPmFsZykgewogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfV0VQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJXRVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfd2VwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIlRLSVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfdGtpcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgogICAgICAgICAgICAgICAgIGFsZyA9ICJDQ01QIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X2NjbXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKQEAgLTU4OSwxMCArNTg0LDggQEAKIAlwcmludGsoImFsZyBuYW1lOiVzXG4iLGFsZyk7CiAKIAkgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJlcXVlc3RfbW9kdWxlKCIlcyIsIG1vZHVsZSk7CisgICAgICAgIGlmIChvcHMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgfQogICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgZXh0LT5hbGcpOwpAQCAtNjEyLDcgKzYwNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+b3BzID0gb3BzOwotICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcykKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGlkeCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+cHJpdiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShuZXdfY3J5cHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYwppbmRleCA4N2Y4YTExLi5mODkwYTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDdmYjc1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1jb25maWcgU1RMQzQ1WFgKLQl0cmlzdGF0ZSAic3RsYzQ1NTAvNDU2MCBzdXBwb3J0IgotCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBTUElfTUFTVEVSICYmIEdFTkVSSUNfSEFSRElSUVMKLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgZHJpdmVyIGZvciBzdGxjNDU1MCBhbmQgc3RsYzQ1NjAgY2hpcHNldHMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQotCSAgY2FsbGVkIHN0bGM0NXh4LiAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VlMzI5MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1vYmotJChDT05GSUdfU1RMQzQ1WFgpCSs9IHN0bGM0NXh4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlOTllYjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTk0ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBzdGxjNDV4eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAic3RsYzQ1eHguaCIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLQotI2luY2x1ZGUgInN0bGM0NXh4X2xtYWMuaCIKLQotLyoKLSAqIGdwaW9zIHNob3VsZCBiZSBoYW5kbGVkIGluIGJvYXJkIGZpbGVzIGFuZCBwcm92aWRlZCB2aWEgcGxhdGZvcm0gZGF0YSwKLSAqIGJ1dCBiZWNhdXNlIGl0J3MgY3VycmVudGx5IGltcG9zc2libGUgZm9yIHN0bGM0NXh4IHRvIGhhdmUgYSBoZWFkZXIgZmlsZQotICogaW4gaW5jbHVkZS9saW51eCwgbGV0J3MgdXNlIG1vZHVsZSBwYXJhbWF0ZXJzIGZvciBub3cKLSAqLwotc3RhdGljIGludCBzdGxjNDV4eF9ncGlvX3Bvd2VyID0gOTc7Ci1tb2R1bGVfcGFyYW0oc3RsYzQ1eHhfZ3Bpb19wb3dlciwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moc3RsYzQ1eHhfZ3Bpb19wb3dlciwgInN0bGM0NXh4IGdwaW8gbnVtYmVyIGZvciBwb3dlciBsaW5lIik7Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfZ3Bpb19pcnEgPSA4NzsKLW1vZHVsZV9wYXJhbShzdGxjNDV4eF9ncGlvX2lycSwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moc3RsYzQ1eHhfZ3Bpb19pcnEsICJzdGxjNDV4eCBncGlvIG51bWJlciBmb3IgaXJxIGxpbmUiKTsKLQotc3RhdGljIGNvbnN0IHU4IGRlZmF1bHRfY2FsX2NoYW5uZWxzW10gPSB7Ci0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweDA5LAotCTB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwMCwgMHhlMCwgMHgwMCwKLQkweGUwLCAweDAwLCAweGUwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsCi0JMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LAotCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLAotCTB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwKLQkweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKLQkweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsCi0JMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCi0JMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LAotCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLAotCTB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwKLQkweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKLQkweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsCi0JMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsCi0JMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKLQkweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKLQkweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLAotCTB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywKLQkweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKLQkweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsCi0JMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsCi0JMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLAotCTB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwKLQkweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLAotCTB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCi0JMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwKLQkweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKLQkweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsCi0JMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsCi0JMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LAotCTB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLAotCTB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwKLQkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLAotCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwKLQkweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsCi0JMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsCi0JMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLAotCTB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LAotCTB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLAotCTB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksCi0JMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKLQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsCi0JMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsCi0JMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLAotCTB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLAotCTB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLAotCTB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwKLQkweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OGEsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwKLQkweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAotCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsCi0JMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLAotCTB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLAotCTB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLAotCTB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwKLQkweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwKLQkweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDA5LCAweDAwLCAweDAwLAotCTB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKLQkweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LAotCTB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLAotCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLAotCTB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwKLQkweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKLQkweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsCi0JMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk0LCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCi0JMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLAotCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLAotCTB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwKLQkweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKLQkweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsCi0JMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsCi0JMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwOSwgMHgwMCwKLQkweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLAotCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKLQkweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLAotCTB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwKLQkweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKLQkweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsCi0JMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsCi0JMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LAotCTB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLAotCTB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsCi0JMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwKLQkweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKLQkweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksCi0JMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsCi0JMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LAotCTB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLAotCTB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdTggZGVmYXVsdF9jYWxfcnNzaVtdID0gewotCTB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsCi0JMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsCi0JMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLAotCTB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfZWRjZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpOwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2V0dXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKTsKLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3NjYW4oc3RydWN0IHN0bGM0NXh4ICpzdGxjKTsKLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3BzbShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgZW5hYmxlKTsKLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSk7Ci1zdGF0aWMgaW50IHN0bGM0NXh4X3R4X3BzcG9sbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKTsKLQotc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfcnNzaShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzc2l6ZV90IGxlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWxlbiA9IFBBR0VfU0laRTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChzdGxjLT5jYWxfcnNzaSkKLQkJaGV4X2R1bXBfdG9fYnVmZmVyKHN0bGMtPmNhbF9yc3NpLCBSU1NJX0NBTF9BUlJBWV9MRU4sIDE2LAotCQkJCSAgIDIsIGJ1ZiwgbGVuLCAwKTsKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCWxlbiA9IHN0cmxlbihidWYpOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX3Jzc2koc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKGNvdW50ICE9IFJTU0lfQ0FMX0FSUkFZX0xFTikgewotCQlzdGxjNDV4eF9lcnJvcigiaW52YWxpZCBjYWxfcnNzaSBsZW5ndGg6ICV6dSIsIGNvdW50KTsKLQkJY291bnQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0Ja2ZyZWUoc3RsYy0+Y2FsX3Jzc2kpOwotCi0Jc3RsYy0+Y2FsX3Jzc2kgPSBrbWVtZHVwKGJ1ZiwgUlNTSV9DQUxfQVJSQVlfTEVOLCBHRlBfS0VSTkVMKTsKLQotCWlmICghc3RsYy0+Y2FsX3Jzc2kpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhbF9yc3NpIik7Ci0JCWNvdW50ID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3Nob3dfY2FsX2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbGVuID0gUEFHRV9TSVpFOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKHN0bGMtPmNhbF9jaGFubmVscykKLQkJaGV4X2R1bXBfdG9fYnVmZmVyKHN0bGMtPmNhbF9jaGFubmVscywgQ0hBTk5FTF9DQUxfQVJSQVlfTEVOLAotCQkJCSAgIDE2LCAyLCBidWYsIGxlbiwgMCk7Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCWxlbiA9IHN0cmxlbihidWYpOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChjb3VudCAhPSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4pIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImludmFsaWQgY2FsX2NoYW5uZWxzIHNpemU6ICV6dSAiLCBjb3VudCk7Ci0JCWNvdW50ID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCWtmcmVlKHN0bGMtPmNhbF9jaGFubmVscyk7Ci0KLQlzdGxjLT5jYWxfY2hhbm5lbHMgPSBrbWVtZHVwKGJ1ZiwgY291bnQsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFzdGxjLT5jYWxfY2hhbm5lbHMpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhbF9jaGFubmVscyIpOwotCQljb3VudCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3Nob3dfdHhfYnVmKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQlzc2l6ZV90IGxlbiA9IDA7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzdGxjLT50eF9zZW50LCB0eF9saXN0KSB7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIjB4JXg6IDB4JXgtMHgleFxuIiwKLQkJCSAgICAgICBlbnRyeS0+aGFuZGxlLCBlbnRyeS0+c3RhcnQsCi0JCQkgICAgICAgZW50cnktPmVuZCk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoY2FsX3Jzc2ksIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9yc3NpLAotCQkgICBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfcnNzaSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoY2FsX2NoYW5uZWxzLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfY2hhbm5lbHMsCi0JCSAgIHN0bGM0NXh4X3N5c2ZzX3N0b3JlX2NhbF9jaGFubmVscyk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodHhfYnVmLCBTX0lSVUdPLCBzdGxjNDV4eF9zeXNmc19zaG93X3R4X2J1ZiwgTlVMTCk7Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3NwaV9yZWFkKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsyXTsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQotCS8qIFdlIGZpcnN0IHB1c2ggdGhlIGFkZHJlc3MgKi8KLQlhZGRyID0gKGFkZHIgPDwgOCkgfCBBRERSX1JFQURfQklUXzE1OwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7Ci0KLQl0WzBdLnR4X2J1ZiA9ICZhZGRyOwotCXRbMF0ubGVuID0gMjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwotCi0JdFsxXS5yeF9idWYgPSBidWY7Ci0JdFsxXS5sZW4gPSBsZW47Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKLQotCXNwaV9zeW5jKHN0bGMtPnNwaSwgJm0pOwotfQotCi0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3NwaV93cml0ZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgICB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0WzNdOwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCXUxNiBsYXN0X3dvcmQ7Ci0KLQkvKiBXZSBmaXJzdCBwdXNoIHRoZSBhZGRyZXNzICovCi0JYWRkciA9IGFkZHIgPDwgODsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOwotCi0JdFswXS50eF9idWYgPSAmYWRkcjsKLQl0WzBdLmxlbiA9IDI7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKLQotCXRbMV0udHhfYnVmID0gYnVmOwotCXRbMV0ubGVuID0gbGVuOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7Ci0KLQlpZiAobGVuICUgMikgewotCQlsYXN0X3dvcmQgPSAoKHU4ICopYnVmKVtsZW4gLSAxXTsKLQotCQl0WzJdLnR4X2J1ZiA9ICZsYXN0X3dvcmQ7Ci0JCXRbMl0ubGVuID0gMjsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMl0sICZtKTsKLQl9Ci0KLQlzcGlfc3luYyhzdGxjLT5zcGksICZtKTsKLX0KLQotc3RhdGljIHUxNiBzdGxjNDV4eF9yZWFkMTYoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdTE2IHZhbDsKLQotCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyB1MzIgc3RsYzQ1eHhfcmVhZDMyKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXUzMiB2YWw7Ci0KLQlzdGxjNDV4eF9zcGlfcmVhZChzdGxjLCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93cml0ZTE2KHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgdmFsKQotewotCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3dyaXRlMzIoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiB2YWwpCi17Ci0Jc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKLX0KLQotc3RydWN0IHN0bGM0NXh4X3NwaV9yZWcgewotCXUxNiBhZGRyZXNzOwotCXUxNiBsZW5ndGg7Ci0JY2hhciAqbmFtZTsKLX07Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhidWZmZXJfZHVtcChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHR4YnVmZmVyICp0eGJ1ZmZlcjsKLQljaGFyICpidWYsICpwb3M7Ci0JaW50IGJ1Zl9sZW4sIGwsIGNvdW50OwotCi0JaWYgKCEoREVCVUdfTEVWRUwgJiBERUJVR19UWEJVRkZFUikpCi0JCXJldHVybjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOwotCi0JYnVmX2xlbiA9IDUwMDsKLQlidWYgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9BVE9NSUMpOwotCWlmICghYnVmKQotCQlyZXR1cm47Ci0KLQlwb3MgPSBidWY7Ci0JY291bnQgPSAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0eGJ1ZmZlciwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgewotCQlsID0gc25wcmludGYocG9zLCBidWZfbGVuLCAiMHgleC0weCV4LCIsCi0JCQkgICAgIHR4YnVmZmVyLT5zdGFydCwgdHhidWZmZXItPmVuZCk7Ci0JCS8qIGRyb3AgdGhlIG51bGwgYnl0ZSAqLwotCQlwb3MgKz0gbDsKLQkJYnVmX2xlbiAtPSBsOwotCQljb3VudCsrOwotCX0KLQotCWlmIChjb3VudCA9PSAwKQotCQkqcG9zID0gJ1wwJzsKLQllbHNlCi0JCSotLXBvcyA9ICdcMCc7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBpbiBidWZmZXIgJWQgcmVnaW9uczogJXMiLAotCQkgICAgICAgY291bnQsIGJ1Zik7Ci0KLQlrZnJlZShidWYpOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IHR4YnVmZmVyICp0eGJ1ZmZlcjsKLQlpbnQgcG9zOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7Ci0KLQlwb3MgPSBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVDsKLQotCWlmIChsaXN0X2VtcHR5KCZzdGxjLT50eGJ1ZmZlcikpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiB0aGUgZW50cmllcyBpbiB0eGJ1ZmZlciBtdXN0IGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgYXJlIGluCi0JICogdGhlIHJlYWwgYnVmZmVyCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0eGJ1ZmZlciwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgewotCQlpZiAocG9zICsgbGVuIDwgdHhidWZmZXItPnN0YXJ0KQotCQkJYnJlYWs7Ci0JCXBvcyA9IEFMSUdOKHR4YnVmZmVyLT5lbmQgKyAxLCA0KTsKLQl9Ci0KLQlpZiAocG9zICsgbGVuID4gRklSTVdBUkVfVFhCVUZGRVJfRU5EKQotCQkvKiBub3QgZW5vdWdoIHJvb20gKi8KLQkJcG9zID0gLTE7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBmaW5kICV6dSBCOiAweCV4IiwgbGVuLCBwb3MpOwotCi1vdXQ6Ci0JcmV0dXJuIHBvczsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF90eGJ1ZmZlcl9hZGQoc3RydWN0IHN0bGM0NXh4ICpzdGxjLAotCQkJCSBzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyKQotewotCXN0cnVjdCB0eGJ1ZmZlciAqciwgKnByZXYgPSBOVUxMOwotCi0JaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4YnVmZmVyKSkgewotCQlsaXN0X2FkZCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0LCAmc3RsYy0+dHhidWZmZXIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyID0gbGlzdF9maXJzdF9lbnRyeSgmc3RsYy0+dHhidWZmZXIsIHN0cnVjdCB0eGJ1ZmZlciwgYnVmZmVyX2xpc3QpOwotCi0JaWYgKHR4YnVmZmVyLT5zdGFydCA8IHItPnN0YXJ0KSB7Ci0JCS8qIGFkZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0ICovCi0JCWxpc3RfYWRkKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZzdGxjLT50eGJ1ZmZlcik7Ci0JCXJldHVybiAwOwotCX0KLQotCXByZXYgPSBOVUxMOwotCWxpc3RfZm9yX2VhY2hfZW50cnkociwgJnN0bGMtPnR4YnVmZmVyLCBidWZmZXJfbGlzdCkgewotCQkvKiBza2lwIGZpcnN0IGVudHJ5LCB3ZSBjaGVja2VkIGZvciB0aGF0IGFib3ZlICovCi0JCWlmICghcHJldikgewotCQkJcHJldiA9IHI7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIGRvdWJsZS1jaGVjayBvdmVybGFwcyAqLwotCQlXQVJOX09OX09OQ0UodHhidWZmZXItPnN0YXJ0ID49IHItPnN0YXJ0ICYmCi0JCQkgICAgIHR4YnVmZmVyLT5zdGFydCA8PSByLT5lbmQpOwotCQlXQVJOX09OX09OQ0UodHhidWZmZXItPmVuZCA+PSByLT5zdGFydCAmJgotCQkJICAgICB0eGJ1ZmZlci0+ZW5kIDw9IHItPmVuZCk7Ci0KLQkJaWYgKHByZXYtPmVuZCA8IHR4YnVmZmVyLT5zdGFydCAmJgotCQkgICAgdHhidWZmZXItPmVuZCA8IHItPnN0YXJ0KSB7Ci0JCQkvKiBpbnNlcnQgYXQgdGhpcyBzcG90ICovCi0JCQlsaXN0X2FkZF90YWlsKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZyLT5idWZmZXJfbGlzdCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCXByZXYgPSByOwotCX0KLQotCS8qIG5vdCBmb3VuZCAqLwotCWxpc3RfYWRkX3RhaWwoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnN0bGMtPnR4YnVmZmVyKTsKLQotCXJldHVybiAwOwotCi19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIHN0cnVjdCB0eGJ1ZmZlciAqc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RydWN0IHN0bGM0NXh4ICpzdGxjLAotCQkJCQkJIHNpemVfdCBmcmFtZV9sZW4pCi17Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeSA9IE5VTEw7Ci0Jc2l6ZV90IGxlbjsKLQlpbnQgcG9zOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7Ci0KLQlsZW4gPSBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVIgKyBmcmFtZV9sZW4gKyBGSVJNV0FSRV9UWEJVRkZFUl9UUkFJTEVSOwotCXBvcyA9IHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RsYywgbGVuKTsKLQotCWlmIChwb3MgPCAwKQotCQlyZXR1cm4gTlVMTDsKLQotCVdBUk5fT05fT05DRShwb3MgKyBsZW4gPiBGSVJNV0FSRV9UWEJVRkZFUl9FTkQpOwotCVdBUk5fT05fT05DRShwb3MgPCBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCk7Ci0KLQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOwotCWVudHJ5LT5zdGFydCA9IHBvczsKLQllbnRyeS0+ZnJhbWVfc3RhcnQgPSBwb3MgKyBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVI7Ci0JZW50cnktPmVuZCA9IGVudHJ5LT5zdGFydCArIGxlbiAtIDE7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBhbGxvY2F0ZWQgMHgleC0weCV4IiwKLQkJICAgICAgIGVudHJ5LT5zdGFydCwgZW50cnktPmVuZCk7Ci0KLQlzdGxjNDV4eF90eGJ1ZmZlcl9hZGQoc3RsYywgZW50cnkpOwotCi0Jc3RsYzQ1eHhfdHhidWZmZXJfZHVtcChzdGxjKTsKLQotCXJldHVybiBlbnRyeTsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywKLQkJCQkgICBzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFhCVUZGRVIsICJ0eGJ1ZmZlcjogZnJlZWQgMHgleC0weCV4IiwKLQkJICAgICAgIHR4YnVmZmVyLT5zdGFydCwgdHhidWZmZXItPmVuZCk7Ci0KLQlsaXN0X2RlbCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0KTsKLQlrZnJlZSh0eGJ1ZmZlcik7Ci19Ci0KLQotc3RhdGljIGludCBzdGxjNDV4eF93YWl0X2JpdChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHUxNiByZWcsIHUzMiBtYXNrLAotCQkJICAgICB1MzIgZXhwZWN0ZWQpCi17Ci0JaW50IGk7Ci0JY2hhciBidWZmZXJbNF07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7Ci0JCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIHJlZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0JCWlmICgoKCoodTMyICopYnVmZmVyKSAmIG1hc2spID09IGV4cGVjdGVkKQotCQkJcmV0dXJuIDE7Ci0JCW1zbGVlcCgxKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwotCWludCByZXQ7Ci0KLQkvKiBGSVhNRTogc2hvdWxkIGRyaXZlciB1c2UgaXQncyBvd24gc3RydWN0IGRldmljZT8gKi8KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgIjM4MjYuYXJtIiwgJnN0bGMtPnNwaS0+ZGV2KTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJyZXF1ZXN0X2Zpcm13YXJlKCkgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGZ3LT5zaXplICUgNCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmlybXdhcmUgc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMzJiaXQ6ICV6dSIsCi0JCQkgICAgICAgZnctPnNpemUpOwotCQlyZXR1cm4gLUVJTFNFUTsgLyogSWxsZWdhbCBieXRlIHNlcXVlbmNlICAqLzsKLQl9Ci0KLQlpZiAoZnctPnNpemUgPCAxMDAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmaXJtd2FyZSBpcyB0b28gc21hbGw6ICV6dSIsIGZ3LT5zaXplKTsKLQkJcmV0dXJuIC1FSUxTRVE7Ci0JfQotCi0Jc3RsYy0+ZncgPSBrbWVtZHVwKGZ3LT5kYXRhLCBmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdGxjLT5mdykgewotCQlzdGxjNDV4eF9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlybXdhcmUiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc3RsYy0+ZndfbGVuID0gZnctPnNpemU7Ci0KLQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3VwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHNfZG1hX3JlZ3MgZG1hX3JlZ3M7Ci0JdW5zaWduZWQgbG9uZyBmd19sZW4sIGZ3X2FkZHI7Ci0JbG9uZyBfZndfbGVuOwotCWludCByZXQ7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoIXN0bGMtPmZ3KSB7Ci0JCXJldCA9IHN0bGM0NXh4X3JlcXVlc3RfZmlybXdhcmUoc3RsYyk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBzdG9wIHRoZSBkZXZpY2UgKi8KLQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCi0JCQkgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUCi0JCQkgfCBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCk7Ci0KLQltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOwotCi0Jc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAotCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERQotCQkJIHwgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQpOwotCi0JbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKLQotCWZ3X2FkZHIgPSBGSVJNV0FSRV9BRERSRVNTOwotCWZ3X2xlbiA9IHN0bGMtPmZ3X2xlbjsKLQotCXdoaWxlIChmd19sZW4gPiAwKSB7Ci0JCV9md19sZW4gPSAoZndfbGVuID4gU1BJX01BWF9QQUNLRVRfU0laRSkKLQkJCT8gU1BJX01BWF9QQUNLRVRfU0laRSA6IGZ3X2xlbjsKLQkJZG1hX3JlZ3MuY21kID0gU1BJX0RNQV9XUklURV9DVFJMX0VOQUJMRTsKLQkJZG1hX3JlZ3MubGVuID0gY3B1X3RvX2xlMTYoX2Z3X2xlbik7Ci0JCWRtYV9yZWdzLmFkZHIgPSBjcHVfdG9fbGUzMihmd19hZGRyKTsKLQotCQlmd19sZW4gLT0gX2Z3X2xlbjsKLQkJZndfYWRkciArPSBfZndfbGVuOwotCi0JCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsIGRtYV9yZWdzLmNtZCk7Ci0KLQkJaWYgKHN0bGM0NXh4X3dhaXRfYml0KHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAotCQkJCSAgICAgIEhPU1RfQUxMT1dFRCwgSE9TVF9BTExPV0VEKSA9PSAwKSB7Ci0JCQlzdGxjNDV4eF9lcnJvcigiZndfdXBsb2FkIG5vdCBhbGxvd2VkIHRvIERNQSB3cml0ZSIpOwotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KLQotCQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9MRU4sIGRtYV9yZWdzLmxlbik7Ci0JCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsIGRtYV9yZWdzLmFkZHIpOwotCi0JCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfREFUQSwgc3RsYy0+ZncsIF9md19sZW4pOwotCi0JCS8qIEZJWE1FOiBJIHRoaW5rIHRoaXMgZG9lc24ndCB3b3JrIGlmIGZpcm13YXJlIGlzIGxhcmdlLAotCQkgKiB0aGlzIGxvb3AgZ29lcyB0byBzZWNvbmQgcm91bmQuIGZ3LT5kYXRhIGlzIG5vdAotCQkgKiBpbmNyZWFzZWQgYXQgYWxsISAqLwotCX0KLQotCUJVR19PTihmd19sZW4gIT0gMCk7Ci0KLQkvKiBlbmFibGUgaG9zdCBpbnRlcnJ1cHRzICovCi0Jc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVF9FTiwgU1BJX0hPU1RfSU5UU19ERUZBVUxUKTsKLQotCS8qIGJvb3QgdGhlIGRldmljZSAqLwotCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKLQkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQKLQkJCSB8IFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpOwotCi0JbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKLQotCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKLQkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX1JBTV9CT09UKTsKLQltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfY2hlY2tfdHhzZW50KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5LCAqbjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbiwgJnN0bGMtPnR4X3NlbnQsIHR4X2xpc3QpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZW50cnktPmxpZmV0aW1lKSkgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlzdGxjNDV4eF93YXJuaW5nKCJmcmFtZSAweCV4IGxpZmV0aW1lIGV4Y2VlZGVkIiwKLQkJCQkJCSBlbnRyeS0+c3RhcnQpOwotCQkJbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKLQkJCXNrYl9wdWxsKGVudHJ5LT5za2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQkJCWllZWU4MDIxMV90eF9zdGF0dXMoc3RsYy0+aHcsIGVudHJ5LT5za2IpOwotCQkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3Bvd2VyX29mZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0JZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKLQlncGlvX3NldF92YWx1ZShzdGxjNDV4eF9ncGlvX3Bvd2VyLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfcG93ZXJfb24oc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCWdwaW9fc2V0X3ZhbHVlKHN0bGM0NXh4X2dwaW9fcG93ZXIsIDEpOwotCWVuYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKLQotCS8qCi0JICogbmVlZCB0byB3YWl0IGEgd2hpbGUgYmVmb3JlIGRldmljZSBjYW4gYmUgYWNjZXNzZWQsIHRoZSBsZW5ndGgKLQkgKiBpcyBqdXN0IGEgZ3Vlc3MKLQkgKi8KLQltc2xlZXAoMTApOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X2ZsdXNoX3F1ZXVlcyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpIHsKLQkJZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdGxjLT50eF9zZW50LAotCQkJCQkgc3RydWN0IHR4YnVmZmVyLCB0eF9saXN0KTsKLQkJbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKLQkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKLQkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7Ci0JfQotCi0JV0FSTl9PTighbGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSkgewotCQllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJnN0bGMtPnR4X3BlbmRpbmcsCi0JCQkJCSBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOwotCQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOwotCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOwotCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKLQl9Ci0KLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSk7Ci0JV0FSTl9PTighbGlzdF9lbXB0eSgmc3RsYy0+dHhidWZmZXIpKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29ya19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzdGxjNDV4eCwKLQkJCQkJICAgICB3b3JrX3Jlc2V0KTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRVNFVCkKLQkJZ290byBvdXQ7Ci0KLQlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCS8qIHdhaXQgdGhhdCBhbGwgd29ya19zdHJ1Y3RzIGhhdmUgZmluaXNoZWQsIHdlIGNhbid0IGhvbGQKLQkgKiBzdGxjLT5tdXRleCB0byBhdm9pZCBkZWFkbG9jayAqLwotCWNhbmNlbF93b3JrX3N5bmMoJnN0bGMtPndvcmspOwotCi0JLyogRklYTUU6IGZpbmQgb3V0IGdvb2QgdmFsdWUgdG8gd2FpdCBmb3IgY2hpcCBwb3dlciBkb3duICovCi0JbXNsZWVwKDEwMCk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQkvKiBGSVhNRTogd2Ugc2hvdWxkIGdyYWNlZnVsbHkgaGFuZGxlIGlmIHRoZSBzdGF0ZSBoYXMgY2hhbmdlZAotCSAqIGFmdGVyIHJlLWFjcXVpcmluZyBtdXRleCAqLwotCVdBUk5fT04oc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVTRVQpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQlzdGxjNDV4eF9mbHVzaF9xdWV1ZXMoc3RsYyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0Jc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRVNFVFRJTkc7Ci0KLQlzdGxjNDV4eF9wb3dlcl9vbihzdGxjKTsKLQlzdGxjNDV4eF91cGxvYWRfZmlybXdhcmUoc3RsYyk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCBtdXRleCAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfcmVzZXQoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0bGM0NXh4X3dhcm5pbmcoInJlc2V0dGluZyBmaXJtd2FyZSIpOwotCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVTRVQ7Ci0JaWVlZTgwMjExX3N0b3BfcXVldWVzKHN0bGMtPmh3KTsKLQlxdWV1ZV93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsICZzdGxjLT53b3JrX3Jlc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29ya190eF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0bGM0NXh4LAotCQkJCQkgICAgIHdvcmtfdHhfdGltZW91dC53b3JrKTsKLQotCXN0bGM0NXh4X3dhcm5pbmcoInR4IHRpbWVvdXQiKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSkKLQkJZ290byBvdXQ7Ci0KLQlzdGxjNDV4eF9yZXNldChzdGxjKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9pbnRfYWNrKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTMyIHZhbCkKLXsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0FDSywgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd2FrZXVwKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JdTMyIGludHM7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQkvKiB3YWtlIHRoZSBjaGlwICovCi0Jc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19BUk1fSU5URVJSVVBUUywgU1BJX1RBUkdFVF9JTlRfV0FLRVVQKTsKLQotCS8qIEFuZCB3YWl0IGZvciB0aGUgUkVBRFkgaW50ZXJydXB0ICovCi0JdGltZW91dCA9IGppZmZpZXMgKyBIWjsKLQotCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKLQl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1JFQURZKSkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKLQkJCQlnb3RvIG91dDsKLQkJaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOwotCX0KLQotCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1JFQURZKTsKLQotb3V0OgotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfc2xlZXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMsIFNQSV9UQVJHRVRfSU5UX1NMRUVQKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfaW50X3JlYWR5KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0VOLAotCQkJIFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKTsKLQotCXN3aXRjaCAoc3RsYy0+Zndfc3RhdGUpIHsKLQljYXNlIEZXX1NUQVRFX0JPT1RJTkc6Ci0JCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7Ci0JCWNvbXBsZXRlKCZzdGxjLT5md19jb21wKTsKLQkJYnJlYWs7Ci0JY2FzZSBGV19TVEFURV9SRVNFVFRJTkc6Ci0JCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7Ci0KLQkJc3RsYzQ1eHhfdHhfc2NhbihzdGxjKTsKLQkJc3RsYzQ1eHhfdHhfc2V0dXAoc3RsYyk7Ci0JCXN0bGM0NXh4X3R4X2VkY2Yoc3RsYyk7Ci0KLQkJaWVlZTgwMjExX3dha2VfcXVldWVzKHN0bGMtPmh3KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3J4X3R4YWNrKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3Qgc19sbW9fdHggKnR4OwotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0JaW50IGZvdW5kID0gMDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7Ci0JdHggPSAoc3RydWN0IHNfbG1vX3R4ICopIChjb250cm9sICsgMSk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXN0bGM0NXh4X3dhcm5pbmcoIm5vIGZyYW1lcyB3YWl0aW5nIGZvciAiCi0JCQkJCSAiYWNrbm93bGVkZ2VtZW50Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmc3RsYy0+dHhfc2VudCwgdHhfbGlzdCkgewotCQlpZiAoY29udHJvbC0+aGFuZGxlID09IGVudHJ5LT5oYW5kbGUpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJc3RsYzQ1eHhfd2FybmluZygiY291bGRuJ3QgZmluZCBmcmFtZSBmb3IgdHggYWNrIDB4JXgiLAotCQkJCQkgY29udHJvbC0+aGFuZGxlKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAiVFggQUNLIDB4JXgiLCBlbnRyeS0+aGFuZGxlKTsKLQotCWlmIChlbnRyeS0+c3RhdHVzX25lZWRlZCkgewotCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKLQotCQlpZiAoISh0eC0+ZmxhZ3MgJiBMTV9UWF9GQUlMRUQpKSB7Ci0JCQkvKiBmcmFtZSB3YXMgYWNrZWQgKi8KLQkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQkJCWluZm8tPnN0YXR1cy5hY2tfc2lnbmFsID0gdHgtPnJjcGkgLyAyIC0gMTEwOwotCQl9Ci0KLQkJc2tiX3B1bGwoZW50cnktPnNrYiwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JCWllZWU4MDIxMV90eF9zdGF0dXMoc3RsYy0+aHcsIGVudHJ5LT5za2IpOwotCX0KLQotCWxpc3RfZGVsKCZlbnRyeS0+dHhfbGlzdCk7Ci0KLQlzdGxjNDV4eF9jaGVja190eHNlbnQoc3RsYyk7Ci0JaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4X3NlbnQpKQotCQkvKiB0aGVyZSBhcmUgbm8gcGVuZGluZyBmcmFtZXMsIHdlIGNhbiBzdG9wIHRoZSB0eCB0aW1lb3V0Ci0JCSAqIHRpbWVyICovCi0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJnN0bGMtPndvcmtfdHhfdGltZW91dCk7Ci0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0Jc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7Ci0KLQlpZiAoc3RsYy0+dHhfcXVldWVfc3RvcHBlZCAmJgotCSAgICBzdGxjNDV4eF90eGJ1ZmZlcl9maW5kKHN0bGMsIE1BWF9GUkFNRV9MRU4pICE9IC0xKSB7Ci0JCXN0bGM0NXh4X2RlYnVnKERFQlVHX1FVRVVFLCAicm9vbSBpbiB0eCBidWZmZXIsIHdha2luZyBxdWV1ZXMiKTsKLQkJaWVlZTgwMjExX3dha2VfcXVldWVzKHN0bGMtPmh3KTsKLQkJc3RsYy0+dHhfcXVldWVfc3RvcHBlZCA9IDA7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfY29udHJvbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlpbnQgcmV0ID0gMDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7Ci0KLQlzd2l0Y2ggKGNvbnRyb2wtPm9pZCkgewotCWNhc2UgTE1fT0lEX1RYOgotCQlyZXQgPSBzdGxjNDV4eF9yeF90eGFjayhzdGxjLCBza2IpOwotCQlicmVhazsKLQljYXNlIExNX09JRF9TRVRVUDoKLQljYXNlIExNX09JRF9TQ0FOOgotCWNhc2UgTE1fT0lEX1RSQVA6Ci0JY2FzZSBMTV9PSURfRURDRjoKLQljYXNlIExNX09JRF9LRVlDQUNIRToKLQljYXNlIExNX09JRF9QU006Ci0JY2FzZSBMTV9PSURfU1RBVFM6Ci0JY2FzZSBMTV9PSURfTEVEOgotCWRlZmF1bHQ6Ci0JCXN0bGM0NXh4X3dhcm5pbmcoInVuaGFuZGxlZCByeCBjb250cm9sIG9pZCAlZFxuIiwKLQkJCQkgY29udHJvbC0+b2lkKTsKLQkJYnJlYWs7Ci0JfQotCi0JZGV2X2tmcmVlX3NrYihza2IpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogY29waWVkIGZyb20gbWFjODAyMTEgKi8KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3BhcnNlX2VsZW1zKHU4ICpzdGFydCwgc2l6ZV90IGxlbiwKLQkJCQkgc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqKnRpbSwKLQkJCQkgc2l6ZV90ICp0aW1fbGVuKQotewotCXNpemVfdCBsZWZ0ID0gbGVuOwotCXU4ICpwb3MgPSBzdGFydDsKLQotCXdoaWxlIChsZWZ0ID49IDIpIHsKLQkJdTggaWQsIGVsZW47Ci0KLQkJaWQgPSAqcG9zKys7Ci0JCWVsZW4gPSAqcG9zKys7Ci0JCWxlZnQgLT0gMjsKLQotCQlpZiAoZWxlbiA+IGxlZnQpCi0JCQlyZXR1cm47Ci0KLQkJc3dpdGNoIChpZCkgewotCQljYXNlIFdMQU5fRUlEX1RJTToKLQkJCSp0aW0gPSAoc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqKSBwb3M7Ci0JCQkqdGltX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJbGVmdCAtPSBlbGVuOwotCQlwb3MgKz0gZWxlbjsKLQl9Ci19Ci0KLS8qCi0gKiBtYWM4MDIxMSBkb2Vzbid0IGhhdmUgc3VwcG9ydCBmb3IgYXNraW5nIGZyYW1lcyB3aXRoIFBTLVBvbGwsIHNvIGxldCdzCi0gKiBpbXBsZW1lbnQgaW4gdGhlIGRyaXZlciBmb3Igbm93LiBXZSBoYXZlIHRvIGFkZCBzdXBwb3J0IHRvIG1hYzgwMjExCi0gKiBsYXRlci4KLSAqLwotc3RhdGljIGludCBzdGxjNDV4eF9jaGVja19tb3JlX2RhdGEoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlzaXplX3QgbGVuOwotCXUxNiBmYzsKLQotCWhkciA9ICh2b2lkICopIHNrYi0+ZGF0YSArIHNpemVvZigqZGF0YSk7Ci0JbGVuID0gc2tiLT5sZW4gLSBzaXplb2YoKmRhdGEpOwotCi0JLyogbWluaW11bSBmcmFtZSBsZW5ndGggaXMgdGhlIG51bGwgZnJhbWUgbGVuZ3RoIDI0IGJ5dGVzICovCi0JaWYgKGxlbiA8IDI0KSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImludmFsaWQgZnJhbWUgbGVuZ3RoIHdoZW4gY2hlY2tpbmcgZm9yICIKLQkJCQkgIm1vcmUgZGF0YSIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKQotCQkvKiB0aGlzIGlzIG5vdCBmcm9tIERTICovCi0JCXJldHVybiAwOwotCi0JaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihoZHItPmFkZHIxLCBzdGxjLT5tYWNfYWRkcikgIT0gMCkKLQkJLyogdGhlIGZyYW1lIHdhcyBub3QgZm9yIHVzICovCi0JCXJldHVybiAwOwotCi0JaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9NT1JFREFUQSkpIHsKLQkJLyogQVAgaGFzIG5vIG1vcmUgZnJhbWVzIGJ1ZmZlcmVkIGZvciB1cyAqLwotCQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19QU00sICJhbGwgYnVmZmVyZWQgZnJhbWVzIHJldHJpZXZlZCIpOwotCQlzdGxjLT5wc3BvbGxpbmcgPSBmYWxzZTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogTU9SRURBVEEgYml0IGlzIHNldCwgbGV0J3MgYXNrIGZvciBhIG5ldyBmcmFtZSBmcm9tIHRoZSBBUCAqLwotCXN0bGM0NXh4X3R4X3BzcG9sbChzdGxjLCBzdGxjLT5wc20pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBtYWM4MDIxMSBjYW5ub3QgcmVhZCBUSU0gZnJvbSBiZWFjb25zLCBzbyBsZXQncyBhZGQgYSBoYWNrIHRvIHRoZQotICogZHJpdmVyLiBXZSBoYXZlIHRvIGFkZCBzdXBwb3J0IHRvIG1hYzgwMjExIGxhdGVyLgotICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X3J4X2RhdGFfYmVhY29uKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc19sbV9kYXRhX2luICpkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfaW4gKikgc2tiLT5kYXRhOwotCXNpemVfdCBsZW4gPSBza2ItPmxlbiwgdGltX2xlbiA9IDAsIGJhc2VsZW4sIHB2Ym1hcF9sZW47Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXN0cnVjdCBzdGxjNDV4eF9pZV90aW0gKnRpbSA9IE5VTEw7Ci0JaW50IGJtYXBfb2Zmc2V0LCBpbmRleCwgYWlkX2JpdDsKLQotCW1nbXQgPSAodm9pZCAqKSBza2ItPmRhdGEgKyBzaXplb2YoKmRhdGEpOwotCi0JYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LmJlYWNvbi52YXJpYWJsZSAtICh1OCAqKSBtZ210OwotCWlmIChiYXNlbGVuID4gbGVuKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImludmFsaWQgYmFzZWxlbiBpbiBiZWFjb24iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3RsYzQ1eHhfcGFyc2VfZWxlbXMobWdtdC0+dS5iZWFjb24udmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sICZ0aW0sCi0JCQkgICAgICZ0aW1fbGVuKTsKLQotCWlmICghdGltKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImRpZG4ndCBmaW5kIHRpbSBmcm9tIGEgYmVhY29uIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJtYXBfb2Zmc2V0ID0gdGltLT5ibWFwX2NvbnRyb2wgJiAweGZlOwotCWluZGV4ID0gc3RsYy0+YWlkIC8gOCAtIGJtYXBfb2Zmc2V0OwotCi0JcHZibWFwX2xlbiA9IHRpbV9sZW4gLSAzOwotCWlmIChpbmRleCA+IHB2Ym1hcF9sZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYWlkX2JpdCA9ICEhKHRpbS0+cHZibWFwW2luZGV4XSAmICgxIDw8IHN0bGMtPmFpZCAlIDgpKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgImZjIDB4JXggZHVyYXRpb24gJWQgc2VxICVkIGR0aW0gJXUgIgotCQkgICAgICAgImJtYXBfY29udHJvbCAweCV4IGFpZF9iaXQgJWQiLAotCQkgICAgICAgbWdtdC0+ZnJhbWVfY29udHJvbCwgbWdtdC0+ZHVyYXRpb24sIG1nbXQtPnNlcV9jdHJsID4+IDQsCi0JCSAgICAgICB0aW0tPmR0aW1fY291bnQsIHRpbS0+Ym1hcF9jb250cm9sLCBhaWRfYml0KTsKLQotCWlmICghYWlkX2JpdCkKLQkJcmV0dXJuIDA7Ci0KLQlzdGxjLT5wc3BvbGxpbmcgPSB0cnVlOwotCXN0bGM0NXh4X3R4X3BzcG9sbChzdGxjLCBzdGxjLT5wc20pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfZGF0YShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7Ci0JaW50IGFsaWduID0gMDsKLQl1OCAqcCwgYWxpZ25fbGVuOwotCXUxNiBsZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoc3RsYy0+cHNtKSB7Ci0JCWlmIChkYXRhLT5mbGFncyAmIExNX0lOX0JFQUNPTikKLQkJCXN0bGM0NXh4X3J4X2RhdGFfYmVhY29uKHN0bGMsIHNrYik7Ci0JCWVsc2UgaWYgKHN0bGMtPnBzcG9sbGluZyAmJiAoZGF0YS0+ZmxhZ3MgJiBMTV9JTl9EQVRBKSkKLQkJCXN0bGM0NXh4X2NoZWNrX21vcmVfZGF0YShzdGxjLCBza2IpOwotCX0KLQotCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7Ci0KLQlzdGF0dXMuZnJlcSA9IGRhdGEtPmZyZXF1ZW5jeTsKLQlzdGF0dXMuc2lnbmFsID0gZGF0YS0+cmNwaSAvIDIgLSAxMTA7Ci0KLQkvKiBsZXQncyBhc3N1bWUgdGhhdCBtYXhpbXVtIHJjcGkgdmFsdWUgaXMgMTQwICg9IDM1IGRCbSkgKi8KLQlzdGF0dXMucXVhbCA9IGRhdGEtPnJjcGkgKiAxMDAgLyAxNDA7Ci0KLQlzdGF0dXMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7Ci0KLQkvKgotCSAqIEZJWE1FOiB0aGlzIGdpdmVzIHdhcm5pbmcgZnJvbSBfX2llZWU4MDIxMV9yeCgpCi0JICoKLQkgKiBzdGF0dXMucmF0ZV9pZHggPSBkYXRhLT5yYXRlOwotCSAqLwotCi0JbGVuID0gZGF0YS0+bGVuZ3RoOwotCi0JaWYgKGRhdGEtPmZsYWdzICYgTE1fRkxBR19BTElHTikKLQkJYWxpZ24gPSAxOwotCi0Jc2tiX3B1bGwoc2tiLCBzaXplb2YoKmRhdGEpKTsKLQotCWlmIChhbGlnbikgewotCQlwID0gc2tiLT5kYXRhOwotCQlhbGlnbl9sZW4gPSAqcDsKLQkJc2tiX3B1bGwoc2tiLCBhbGlnbl9sZW4pOwotCX0KLQotCXNrYl90cmltKHNrYiwgbGVuKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1JYLCAicnggZGF0YSAweCVwICVkIEIiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1JYX0NPTlRFTlQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCi0JbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7Ci0JaWVlZTgwMjExX3J4KHN0bGMtPmh3LCBza2IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3J4KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHJldDsKLQl1MTYgbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3RsYzQ1eHhfd2FrZXVwKHN0bGMpOwotCi0JLyogZHVtbXkgcmVhZCB0byBmbHVzaCBTUEkgRE1BIGNvbnRyb2xsZXIgYnVnICovCi0Jc3RsYzQ1eHhfcmVhZDE2KHN0bGMsIFNQSV9BRFJTX0dFTl9QVVJQXzEpOwotCi0JbGVuID0gc3RsYzQ1eHhfcmVhZDE2KHN0bGMsIFNQSV9BRFJTX0RNQV9EQVRBKTsKLQotCWlmIChsZW4gPT0gMCkgewotCQlzdGxjNDV4eF93YXJuaW5nKCJyeCByZXF1ZXN0IG9mIHplcm8gYnl0ZXMiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pOwotCWlmICghc2tiKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImNvdWxkIG5vdCBhbGxvYyBza2IiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEsIHNrYl9wdXQoc2tiLCBsZW4pLCBsZW4pOwotCi0Jc3RsYzQ1eHhfc2xlZXAoc3RsYyk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19SWCwgInJ4IGZyYW1lIDB4JXAgJWQgQiIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCXN0bGM0NXh4X2R1bXAoREVCVUdfUlhfQ09OVEVOVCwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0KLQljb250cm9sID0gKHN0cnVjdCBzX2xtX2NvbnRyb2wgKikgc2tiLT5kYXRhOwotCi0JaWYgKGNvbnRyb2wtPmZsYWdzICYgTE1fRkxBR19DT05UUk9MKQotCQlyZXQgPSBzdGxjNDV4eF9yeF9jb250cm9sKHN0bGMsIHNrYik7Ci0JZWxzZQotCQlyZXQgPSBzdGxjNDV4eF9yeF9kYXRhKHN0bGMsIHNrYik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzdGxjNDV4eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY29uZmlnKQotewotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb25maWc7Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19JUlEsICJJUlEiKTsKLQotCXF1ZXVlX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwgJnN0bGMtPndvcmspOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3R4X2ZyYW1lKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTMyIGFkZHJlc3MsCi0JCQkgICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3Qgc19kbWFfcmVncyBkbWFfcmVnczsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JaW50IHJldCA9IDA7Ci0JdTMyIGludHM7Ci0KLQlzdGxjLT50eF9mcmFtZXMrKzsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZnJhbWUgMHglcCAlenUgQiIsIGJ1ZiwgbGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIGJ1ZiwgbGVuKTsKLQotCXN0bGM0NXh4X3dha2V1cChzdGxjKTsKLQotCWRtYV9yZWdzLmNtZCAgPSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFOwotCWRtYV9yZWdzLmxlbiAgPSBjcHVfdG9fbGUxNihsZW4pOwotCWRtYV9yZWdzLmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyZXNzKTsKLQotCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwgJmRtYV9yZWdzLAotCQkJICAgc2l6ZW9mKGRtYV9yZWdzKSk7Ci0KLQlzdGxjNDV4eF9zcGlfd3JpdGUoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEsIGJ1ZiwgbGVuKTsKLQotCXRpbWVvdXQgPSBqaWZmaWVzICsgMiAqIEhaOwotCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKLQl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1dSX1JFQURZKSkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJc3RsYzQ1eHhfd2FybmluZygiV1JfUkVBRFkgdGltZW91dCIpOwotCQkJcmV0ID0gLTE7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7Ci0JfQotCi0Jc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfV1JfUkVBRFkpOwotCi0Jc3RsYzQ1eHhfc2xlZXAoc3RsYyk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3dxX3R4KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmc3RsYy0+dHhfcGVuZGluZykpIHsKLQkJZW50cnkgPSBsaXN0X2VudHJ5KHN0bGMtPnR4X3BlbmRpbmcubmV4dCwKLQkJCQkgICBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOwotCi0JCWxpc3RfZGVsX2luaXQoJmVudHJ5LT50eF9saXN0KTsKLQotCQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQkJcmV0ID0gc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgZW50cnktPmZyYW1lX3N0YXJ0LAotCQkJCQllbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4pOwotCi0JCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQkJaWYgKHJldCA8IDApIHsKLQkJCS8qIGZyYW1lIHRyYW5zZmVyIHRvIGZpcm13YXJlIGJ1ZmZlciBmYWlsZWQgKi8KLQkJCS8qIEZJWE1FOiByZXBvcnQgdGhpcyB0byBtYWM4MDIxMSAqLwotCQkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKLQkJCXN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RsYywgZW50cnkpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlsaXN0X2FkZCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9zZW50KTsKLQkJcXVldWVfZGVsYXllZF93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsCi0JCQkJICAgJnN0bGMtPndvcmtfdHhfdGltZW91dCwKLQkJCQkgICBtc2Vjc190b19qaWZmaWVzKFRYX1RJTUVPVVQpKTsKLQl9Ci0KLW91dDoKLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzdGxjNDV4eCwgd29yayk7Ci0JdTMyIGludHM7Ci0JaW50IHJldDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChzdGxjLT5md19zdGF0ZSA9PSBGV19TVEFURV9PRkYgJiYKLQkgICAgc3RsYy0+Zndfc3RhdGUgPT0gRldfU1RBVEVfUkVTRVQpCi0JCWdvdG8gb3V0OwotCi0JaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOwotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0JILCAiYmVnaW4gaG9zdF9pbnRzIDB4JTA4eCIsIGludHMpOwotCi0JaWYgKGludHMgJiBTUElfSE9TVF9JTlRfUkVBRFkpIHsKLQkJc3RsYzQ1eHhfaW50X3JlYWR5KHN0bGMpOwotCQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9SRUFEWSk7Ci0JfQotCi0JaWYgKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKQotCQlnb3RvIG91dDsKLQotCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1VQREFURSkgewotCQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9VUERBVEUpOwotCQlyZXQgPSBzdGxjNDV4eF9yeChzdGxjKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0JaWYgKGludHMgJiBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKSB7Ci0JCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1NXX1VQREFURSk7Ci0JCXJldCA9IHN0bGM0NXh4X3J4KHN0bGMpOwotCQlpZiAocmV0IDwgMCkgewotCQkJc3RsYzQ1eHhfcmVzZXQoc3RsYyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCXJldCA9IHN0bGM0NXh4X3dxX3R4KHN0bGMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfQkgsICJlbmQgaG9zdF9pbnRzIDB4JTA4eCIsIGludHMpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X2VkY2Yoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHNfbG1vX2VkY2YgKmVkY2Y7Ci0Jc2l6ZV90IGxlbiwgZWRjZl9sZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQllZGNmX2xlbiA9IHNpemVvZigqZWRjZik7Ci0JbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIGVkY2ZfbGVuOwotCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JZWRjZiA9IChzdHJ1Y3Qgc19sbW9fZWRjZiAqKSAoY29udHJvbCArIDEpOwotCi0JY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOwotCWNvbnRyb2wtPmxlbmd0aCA9IGVkY2ZfbGVuOwotCWNvbnRyb2wtPm9pZCA9IExNX09JRF9FRENGOwotCi0JZWRjZi0+c2xvdHRpbWUgPSAweDE0OwotCWVkY2YtPnNpZnMgPSAxMDsKLQllZGNmLT5lb2ZwYWQgPSA2OwotCWVkY2YtPm1heGJ1cnN0ID0gMTUwMDsKLQotCWVkY2YtPnF1ZXVlc1swXS5haWZzID0gMjsKLQllZGNmLT5xdWV1ZXNbMF0ucGFkMCA9IDE7Ci0JZWRjZi0+cXVldWVzWzBdLmN3bWluID0gMzsKLQllZGNmLT5xdWV1ZXNbMF0uY3dtYXggPSA3OwotCWVkY2YtPnF1ZXVlc1swXS50eG9wID0gNDc7Ci0JZWRjZi0+cXVldWVzWzFdLmFpZnMgPSAyOwotCWVkY2YtPnF1ZXVlc1sxXS5wYWQwID0gMDsKLQllZGNmLT5xdWV1ZXNbMV0uY3dtaW4gPSA3OwotCWVkY2YtPnF1ZXVlc1sxXS5jd21heCA9IDE1OwotCWVkY2YtPnF1ZXVlc1sxXS50eG9wID0gOTQ7Ci0JZWRjZi0+cXVldWVzWzJdLmFpZnMgPSAzOwotCWVkY2YtPnF1ZXVlc1syXS5wYWQwID0gMDsKLQllZGNmLT5xdWV1ZXNbMl0uY3dtaW4gPSAxNTsKLQllZGNmLT5xdWV1ZXNbMl0uY3dtYXggPSAxMDIzOwotCWVkY2YtPnF1ZXVlc1syXS50eG9wID0gMDsKLQllZGNmLT5xdWV1ZXNbM10uYWlmcyA9IDc7Ci0JZWRjZi0+cXVldWVzWzNdLnBhZDAgPSAwOwotCWVkY2YtPnF1ZXVlc1szXS5jd21pbiA9IDE1OwotCWVkY2YtPnF1ZXVlc1szXS5jd21heCA9IDEwMjM7Ci0JZWRjZi0+cXVldWVzWzNdLnR4b3AgPSAwOwotCWVkY2YtPnF1ZXVlc1s0XS5haWZzID0gMTM7Ci0JZWRjZi0+cXVldWVzWzRdLnBhZDAgPSA5OTsKLQllZGNmLT5xdWV1ZXNbNF0uY3dtaW4gPSAzNDM3OwotCWVkY2YtPnF1ZXVlc1s0XS5jd21heCA9IDUxMjsKLQllZGNmLT5xdWV1ZXNbNF0udHhvcCA9IDEyOwotCWVkY2YtPnF1ZXVlc1s1XS5haWZzID0gMTQyOwotCWVkY2YtPnF1ZXVlc1s1XS5wYWQwID0gMTA5OwotCWVkY2YtPnF1ZXVlc1s1XS5jd21pbiA9IDg3NTY7Ci0JZWRjZi0+cXVldWVzWzVdLmN3bWF4ID0gNjsKLQllZGNmLT5xdWV1ZXNbNV0udHhvcCA9IDA7Ci0JZWRjZi0+cXVldWVzWzZdLmFpZnMgPSA0OwotCWVkY2YtPnF1ZXVlc1s2XS5wYWQwID0gMDsKLQllZGNmLT5xdWV1ZXNbNl0uY3dtaW4gPSAwOwotCWVkY2YtPnF1ZXVlc1s2XS5jd21heCA9IDU4NzA1OwotCWVkY2YtPnF1ZXVlc1s2XS50eG9wID0gMjU3MTY7Ci0JZWRjZi0+cXVldWVzWzddLmFpZnMgPSAwOwotCWVkY2YtPnF1ZXVlc1s3XS5wYWQwID0gMDsKLQllZGNmLT5xdWV1ZXNbN10uY3dtaW4gPSAwOwotCWVkY2YtPnF1ZXVlc1s3XS5jd21heCA9IDA7Ci0JZWRjZi0+cXVldWVzWzddLnR4b3AgPSAwOwotCi0Jc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgRklSTVdBUkVfQ09ORklHX1NUQVJULCBjb250cm9sLCBsZW4pOwotCi0Ja2ZyZWUoY29udHJvbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3NldHVwKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBzX2xtb19zZXR1cCAqc2V0dXA7Ci0Jc2l6ZV90IGxlbiwgc2V0dXBfbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc2V0dXBfbGVuID0gc2l6ZW9mKCpzZXR1cCk7Ci0JbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIHNldHVwX2xlbjsKLQljb250cm9sID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCXNldHVwID0gKHN0cnVjdCBzX2xtb19zZXR1cCAqKSAoY29udHJvbCArIDEpOwotCi0JY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOwotCWNvbnRyb2wtPmxlbmd0aCA9IHNldHVwX2xlbjsKLQljb250cm9sLT5vaWQgPSBMTV9PSURfU0VUVVA7Ci0KLQlzZXR1cC0+ZmxhZ3MgPSBMTV9TRVRVUF9JTkZSQTsKLQlzZXR1cC0+YW50ZW5uYSA9IDI7Ci0Jc2V0dXAtPnJ4X2FsaWduID0gMDsKLQlzZXR1cC0+cnhfYnVmZmVyID0gRklSTVdBUkVfUlhCVUZGRVJfU1RBUlQ7Ci0Jc2V0dXAtPnJ4X210dSA9IEZJUk1XQVJFX01UVTsKLQlzZXR1cC0+ZnJvbnRlbmQgPSA1OwotCXNldHVwLT50aW1lb3V0ID0gMDsKLQlzZXR1cC0+dHJ1bmNhdGUgPSA0ODg5NjsKLQlzZXR1cC0+YnJhdGVtYXNrID0gMHhmZmZmZmZmZjsKLQlzZXR1cC0+cmVmX2Nsb2NrID0gNjQ0MjQ1MDk0OwotCXNldHVwLT5scGZfYmFuZHdpZHRoID0gNjU1MzU7Ci0Jc2V0dXAtPm9zY19zdGFydF9kZWxheSA9IDY1NTM1OwotCi0JbWVtY3B5KHNldHVwLT5tYWNhZGRyLCBzdGxjLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShzZXR1cC0+YnNzaWQsIHN0bGMtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7Ci0KLQlrZnJlZShjb250cm9sKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2NhbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3Qgc19sbW9fc2NhbiAqc2NhbjsKLQlzaXplX3QgbGVuLCBzY2FuX2xlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXNjYW5fbGVuID0gc2l6ZW9mKCpzY2FuKTsKLQlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgc2Nhbl9sZW47Ci0JY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlzY2FuID0gKHN0cnVjdCBzX2xtb19zY2FuICopIChjb250cm9sICsgMSk7Ci0KLQljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7Ci0JY29udHJvbC0+bGVuZ3RoID0gc2Nhbl9sZW47Ci0JY29udHJvbC0+b2lkID0gTE1fT0lEX1NDQU47Ci0KLQlzY2FuLT5mbGFncyA9IExNX1NDQU5fRVhJVDsKLQlzY2FuLT5icmF0ZW1hc2sgPSAweDE1ZjsKLQlzY2FuLT5hbG9mdFswXSA9IDM7Ci0Jc2Nhbi0+YWxvZnRbMV0gPSAzOwotCXNjYW4tPmFsb2Z0WzJdID0gMTsKLQlzY2FuLT5hbG9mdFszXSA9IDA7Ci0Jc2Nhbi0+YWxvZnRbNF0gPSAwOwotCXNjYW4tPmFsb2Z0WzVdID0gMDsKLQlzY2FuLT5hbG9mdFs2XSA9IDA7Ci0Jc2Nhbi0+YWxvZnRbN10gPSAwOwotCi0JbWVtY3B5KCZzY2FuLT5yc3NpY2FsLCAmc3RsYy0+Y2FsX3Jzc2lbKHN0bGMtPmNoYW5uZWwgLSAxKSAqCi0JCQkJCSAgICAgICBSU1NJX0NBTF9MRU5dLAotCSAgICAgICBSU1NJX0NBTF9MRU4pOwotCW1lbWNweSgmc2Nhbi0+Y2hhbm5lbCwgJnN0bGMtPmNhbF9jaGFubmVsc1soc3RsYy0+Y2hhbm5lbCAtIDEpICoKLQkJCQkJCSAgIENIQU5ORUxfQ0FMX0xFTl0sCi0JICAgICAgIENIQU5ORUxfQ0FMX0xFTik7Ci0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7Ci0KLQlrZnJlZShjb250cm9sKTsKLX0KLQotLyoKLSAqIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgKLSAqLwotc3RhdGljIGludCBzdGxjNDV4eF90eF9wc3BvbGwoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcHNwb2xsOwotCWludCBwYXlsb2FkX2xlbiwgcGFkZGluZywgaTsKLQlzdHJ1Y3Qgc19sbV9kYXRhX291dCAqZGF0YTsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JY2hhciAqcGF5bG9hZDsKLQl1MTYgZmM7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSArIDE2KTsKLQlpZiAoIXNrYikgewotCQlzdGxjNDV4eF93YXJuaW5nKCJmYWlsZWQgdG8gYWxsb2NhdGUgcHNwb2xsIGZyYW1lIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQlwc3BvbGwgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDE2KTsKLQltZW1zZXQocHNwb2xsLCAwLCAxNik7Ci0JZmMgPSBJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX1BTUE9MTDsKLQlpZiAocG93ZXJzYXZlKQotCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QTTsKLQlwc3BvbGwtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7Ci0JcHNwb2xsLT5kdXJhdGlvbl9pZCA9IGNwdV90b19sZTE2KHN0bGMtPmFpZCk7Ci0KLQkvKiBhaWQgaW4gUFMtUG9sbCBoYXMgaXRzIHR3byBNU0JzIGVhY2ggc2V0IHRvIDEgKi8KLQlwc3BvbGwtPmR1cmF0aW9uX2lkIHw9IGNwdV90b19sZTE2KDEgPDwgMTUpIHwgY3B1X3RvX2xlMTYoMSA8PCAxNCk7Ci0KLQltZW1jcHkocHNwb2xsLT5hZGRyMSwgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkocHNwb2xsLT5hZGRyMiwgc3RsYy0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgUFMtUG9sbCBmcmFtZSB0byAlcE0gKHBvd2Vyc2F2ZSAlZCwgIgotCQkgICAgICAgImZjIDB4JXgsIGFpZCAlZCkiLCBwc3BvbGwtPmFkZHIxLAotCQkgICAgICAgcG93ZXJzYXZlLCBmYywgc3RsYy0+YWlkKTsKLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQllbnRyeSA9IHN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0bGMsIHNrYi0+bGVuKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCWlmICghZW50cnkpIHsKLQkJLyoKLQkJICogVGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgZmlybXdhcmUgYnVmZmVyCi0JCSAqIGlzIGZ1bGwsIHNvIGZpcm13YXJlIGJ1ZmZlciBzaG91bGQgYWx3YXlzIGhhdmUgZW5vdWdoCi0JCSAqIHNwYWNlLgotCQkgKgotCQkgKiBCdXQgSSdtIHRvbyBsYXp5IGFuZCBvbWl0IGl0IGZvciBub3cuCi0JCSAqLwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJc3RsYzQ1eHhfd2FybmluZygiZmlybXdhcmUgdHggYnVmZmVyIGZ1bGwgaXMgZnVsbCAiCi0JCQkJCSAiZm9yIG51bGwgZnJhbWUiKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0JcGF5bG9hZCA9IHNrYi0+ZGF0YTsKLQlwYXlsb2FkX2xlbiA9IHNrYi0+bGVuOwotCXBhZGRpbmcgPSAoaW50KSAoc2tiLT5kYXRhIC0gc2l6ZW9mKCpkYXRhKSkgJiAzOwotCWVudHJ5LT5oZWFkZXJfbGVuID0gc2l6ZW9mKCpkYXRhKSArIHBhZGRpbmc7Ci0KLQllbnRyeS0+c2tiID0gc2tiOwotCWVudHJ5LT5zdGF0dXNfbmVlZGVkID0gZmFsc2U7Ci0JZW50cnktPmhhbmRsZSA9ICh1MzIpIHNrYjsKLQllbnRyeS0+bGlmZXRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUWF9GUkFNRV9MSUZFVElNRSk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGRhdGEgMHgleCAoMHglcCBwYXlsb2FkICVkIEIgIgotCQkgICAgICAgInBhZGRpbmcgJWQgaGVhZGVyX2xlbiAlZCkiLAotCQkgICAgICAgZW50cnktPmhhbmRsZSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIHBhZGRpbmcsCi0JCSAgICAgICBlbnRyeS0+aGVhZGVyX2xlbik7Ci0Jc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7Ci0KLQlkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfb3V0ICopIHNrYl9wdXNoKHNrYiwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JbWVtc2V0KGRhdGEsIDAsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQotCWlmIChwYWRkaW5nKQotCQlkYXRhLT5mbGFncyA9IExNX0ZMQUdfQUxJR047Ci0KLQlkYXRhLT5mbGFncyA9IExNX09VVF9CVVJTVDsKLQlkYXRhLT5sZW5ndGggPSBwYXlsb2FkX2xlbjsKLQlkYXRhLT5oYW5kbGUgPSBlbnRyeS0+aGFuZGxlOwotCWRhdGEtPmFpZCA9IDE7Ci0JZGF0YS0+cnRzX3JldHJpZXMgPSA3OwotCWRhdGEtPnJldHJpZXMgPSA3OwotCWRhdGEtPmFsb2Z0X2N0cmwgPSAwOwotCWRhdGEtPmNyeXB0X29mZnNldCA9IDU4OwotCWRhdGEtPmtleXR5cGUgPSAwOwotCWRhdGEtPmtleWxlbiA9IDA7Ci0JZGF0YS0+cXVldWUgPSBMTV9RVUVVRV9EQVRBMzsKLQlkYXRhLT5iYWNrbG9nID0gMzI7Ci0JZGF0YS0+YW50ZW5uYSA9IDI7Ci0JZGF0YS0+Y3RzID0gMzsKLQlkYXRhLT5wb3dlciA9IDEyNzsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWRhdGEtPmFsb2Z0W2ldID0gMDsKLQotCS8qCi0JICogY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdHggYnVmZmVyCi0JICoKLQkgKiBGSVhNRTogaWdub3JlZCBmb3Igbm93Ci0JICovCi0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBlbnRyeS0+c3RhcnQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCi0JbGlzdF9hZGQoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfc2VudCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgKLSAqCi0gKiBzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBtYWM4MDIxMS9pZWVlODAyMTFfc2VuZF9udWxsZnVuYwotICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X3R4X251bGxmdW5jKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBwb3dlcnNhdmUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKm51bGxmdW5jOwotCWludCBwYXlsb2FkX2xlbiwgcGFkZGluZywgaTsKLQlzdHJ1Y3Qgc19sbV9kYXRhX291dCAqZGF0YTsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JY2hhciAqcGF5bG9hZDsKLQl1MTYgZmM7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKLQlpZiAoIXNrYikgewotCQlzdGxjNDV4eF93YXJuaW5nKCJmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBudWxsIGZyYW1lXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW51bGxmdW5jID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG51bGxmdW5jLCAwLCAyNCk7Ci0JZmMgPSBJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8Ci0JICAgICBJRUVFODAyMTFfRkNUTF9UT0RTOwotCi0JaWYgKHBvd2Vyc2F2ZSkKLQkJZmMgfD0gSUVFRTgwMjExX0ZDVExfUE07Ci0KLQludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIxLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHN0bGMtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgTnVsbCBmcmFtZSB0byAlcE0gKHBvd2Vyc2F2ZSAlZCwgIgotCQkgICAgICAgImZjIDB4JXgpIiwgbnVsbGZ1bmMtPmFkZHIxLCBwb3dlcnNhdmUsIGZjKTsKLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQllbnRyeSA9IHN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0bGMsIHNrYi0+bGVuKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCWlmICghZW50cnkpIHsKLQkJLyoKLQkJICogVGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgZmlybXdhcmUgYnVmZmVyCi0JCSAqIGlzIGZ1bGwsIHNvIGZpcm13YXJlIGJ1ZmZlciBzaG91bGQgYWx3YXlzIGhhdmUgZW5vdWdoCi0JCSAqIHNwYWNlLgotCQkgKgotCQkgKiBCdXQgSSdtIHRvbyBsYXp5IGFuZCBvbWl0IGl0IGZvciBub3cuCi0JCSAqLwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJc3RsYzQ1eHhfd2FybmluZygiZmlybXdhcmUgdHggYnVmZmVyIGZ1bGwgaXMgZnVsbCAiCi0JCQkJCSAiZm9yIG51bGwgZnJhbWUiKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0JcGF5bG9hZCA9IHNrYi0+ZGF0YTsKLQlwYXlsb2FkX2xlbiA9IHNrYi0+bGVuOwotCXBhZGRpbmcgPSAoaW50KSAoc2tiLT5kYXRhIC0gc2l6ZW9mKCpkYXRhKSkgJiAzOwotCWVudHJ5LT5oZWFkZXJfbGVuID0gc2l6ZW9mKCpkYXRhKSArIHBhZGRpbmc7Ci0KLQllbnRyeS0+c2tiID0gc2tiOwotCWVudHJ5LT5zdGF0dXNfbmVlZGVkID0gZmFsc2U7Ci0JZW50cnktPmhhbmRsZSA9ICh1MzIpIHNrYjsKLQllbnRyeS0+bGlmZXRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUWF9GUkFNRV9MSUZFVElNRSk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGRhdGEgMHgleCAoMHglcCBwYXlsb2FkICVkIEIgIgotCQkgICAgICAgInBhZGRpbmcgJWQgaGVhZGVyX2xlbiAlZCkiLAotCQkgICAgICAgZW50cnktPmhhbmRsZSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIHBhZGRpbmcsCi0JCSAgICAgICBlbnRyeS0+aGVhZGVyX2xlbik7Ci0Jc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7Ci0KLQlkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfb3V0ICopIHNrYl9wdXNoKHNrYiwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JbWVtc2V0KGRhdGEsIDAsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQotCWlmIChwYWRkaW5nKQotCQlkYXRhLT5mbGFncyA9IExNX0ZMQUdfQUxJR047Ci0KLQlkYXRhLT5mbGFncyA9IExNX09VVF9CVVJTVDsKLQlkYXRhLT5sZW5ndGggPSBwYXlsb2FkX2xlbjsKLQlkYXRhLT5oYW5kbGUgPSBlbnRyeS0+aGFuZGxlOwotCWRhdGEtPmFpZCA9IDE7Ci0JZGF0YS0+cnRzX3JldHJpZXMgPSA3OwotCWRhdGEtPnJldHJpZXMgPSA3OwotCWRhdGEtPmFsb2Z0X2N0cmwgPSAwOwotCWRhdGEtPmNyeXB0X29mZnNldCA9IDU4OwotCWRhdGEtPmtleXR5cGUgPSAwOwotCWRhdGEtPmtleWxlbiA9IDA7Ci0JZGF0YS0+cXVldWUgPSBMTV9RVUVVRV9EQVRBMzsKLQlkYXRhLT5iYWNrbG9nID0gMzI7Ci0JZGF0YS0+YW50ZW5uYSA9IDI7Ci0JZGF0YS0+Y3RzID0gMzsKLQlkYXRhLT5wb3dlciA9IDEyNzsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWRhdGEtPmFsb2Z0W2ldID0gMDsKLQotCS8qCi0JICogY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdHggYnVmZmVyCi0JICoKLQkgKiBGSVhNRTogaWdub3JlZCBmb3Igbm93Ci0JICovCi0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBlbnRyeS0+c3RhcnQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCi0JbGlzdF9hZGQoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfc2VudCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCBtdXRleCAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfcHNtKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3Qgc19sbW9fcHNtICpwc207Ci0Jc2l6ZV90IGxlbiwgcHNtX2xlbjsKLQotCVdBUk5fT04oIXN0bGMtPmFzc29jaWF0ZWQpOwotCVdBUk5fT04oc3RsYy0+YWlkIDwgMSk7Ci0JV0FSTl9PTihzdGxjLT5haWQgPiAyMDA3KTsKLQotCXBzbV9sZW4gPSBzaXplb2YoKnBzbSk7Ci0JbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIHBzbV9sZW47Ci0JY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlwc20gPSAoc3RydWN0IHNfbG1vX3BzbSAqKSAoY29udHJvbCArIDEpOwotCi0JY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOwotCWNvbnRyb2wtPmxlbmd0aCA9IHBzbV9sZW47Ci0JY29udHJvbC0+b2lkID0gTE1fT0lEX1BTTTsKLQotCWlmIChlbmFibGUpCi0JCXBzbS0+ZmxhZ3MgfD0gTE1fUFNNOwotCi0JcHNtLT5haWQgPSBzdGxjLT5haWQ7Ci0KLQlwc20tPmJlYWNvbl9yY3BpX3NraXBfbWF4ID0gNjA7Ci0KLQlwc20tPmludGVydmFsc1swXS5pbnRlcnZhbCA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbMF0ucGVyaW9kcyA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbMV0uaW50ZXJ2YWwgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzFdLnBlcmlvZHMgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzJdLmludGVydmFsID0gMTsKLQlwc20tPmludGVydmFsc1syXS5wZXJpb2RzID0gMTsKLQlwc20tPmludGVydmFsc1szXS5pbnRlcnZhbCA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbM10ucGVyaW9kcyA9IDE7Ci0KLQlwc20tPm5yID0gMDsKLQlwc20tPmV4Y2x1ZGVbMF0gPSAwOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAic2VuZGluZyBMTV9PSURfUFNNIChhaWQgJWQsIGludGVydmFsICVkKSIsCi0JCSAgICAgICBwc20tPmFpZCwgcHNtLT5pbnRlcnZhbHNbMF0uaW50ZXJ2YWwpOwotCi0Jc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgRklSTVdBUkVfQ09ORklHX1NUQVJULCBjb250cm9sLCBsZW4pOwotCi0Ja2ZyZWUoY29udHJvbCk7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKLQlpbnQgcGF5bG9hZF9sZW4sIHBhZGRpbmcsIGk7Ci0Jc3RydWN0IHNfbG1fZGF0YV9vdXQgKmRhdGE7Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQljaGFyICpwYXlsb2FkOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCWVudHJ5ID0gc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RsYywgc2tiLT5sZW4pOwotCWlmICghZW50cnkpIHsKLQkJLyogdGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgZmlybXdhcmUgYnVmZmVyCi0JCSAqIGlzIGZ1bGwsIHNvIGZpcm13YXJlIGJ1ZmZlciBzaG91bGQgYWx3YXlzIGhhdmUgZW5vdWdoCi0JCSAqIHNwYWNlICovCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlzdGxjNDV4eF93YXJuaW5nKCJmaXJtd2FyZSBidWZmZXIgZnVsbCIpOwotCQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0KLQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCi0JcGF5bG9hZCA9IHNrYi0+ZGF0YTsKLQlwYXlsb2FkX2xlbiA9IHNrYi0+bGVuOwotCXBhZGRpbmcgPSAoaW50KSAoc2tiLT5kYXRhIC0gc2l6ZW9mKCpkYXRhKSkgJiAzOwotCWVudHJ5LT5oZWFkZXJfbGVuID0gc2l6ZW9mKCpkYXRhKSArIHBhZGRpbmc7Ci0KLQllbnRyeS0+c2tiID0gc2tiOwotCWVudHJ5LT5zdGF0dXNfbmVlZGVkID0gdHJ1ZTsKLQllbnRyeS0+aGFuZGxlID0gKHUzMikgc2tiOwotCWVudHJ5LT5saWZldGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRYX0ZSQU1FX0xJRkVUSU1FKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZGF0YSAweCV4ICgweCVwIHBheWxvYWQgJWQgQiAiCi0JCSAgICAgICAicGFkZGluZyAlZCBoZWFkZXJfbGVuICVkKSIsCi0JCSAgICAgICBlbnRyeS0+aGFuZGxlLCBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgcGFkZGluZywKLQkJICAgICAgIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKLQotCWRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9vdXQgKikgc2tiX3B1c2goc2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQltZW1zZXQoZGF0YSwgMCwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JaWYgKHBhZGRpbmcpCi0JCWRhdGEtPmZsYWdzID0gTE1fRkxBR19BTElHTjsKLQotCWRhdGEtPmZsYWdzID0gTE1fT1VUX0JVUlNUOwotCWRhdGEtPmxlbmd0aCA9IHBheWxvYWRfbGVuOwotCWRhdGEtPmhhbmRsZSA9IGVudHJ5LT5oYW5kbGU7Ci0JZGF0YS0+YWlkID0gMTsKLQlkYXRhLT5ydHNfcmV0cmllcyA9IDc7Ci0JZGF0YS0+cmV0cmllcyA9IDc7Ci0JZGF0YS0+YWxvZnRfY3RybCA9IDA7Ci0JZGF0YS0+Y3J5cHRfb2Zmc2V0ID0gNTg7Ci0JZGF0YS0+a2V5dHlwZSA9IDA7Ci0JZGF0YS0+a2V5bGVuID0gMDsKLQlkYXRhLT5xdWV1ZSA9IDI7Ci0JZGF0YS0+YmFja2xvZyA9IDMyOwotCWRhdGEtPmFudGVubmEgPSAyOwotCWRhdGEtPmN0cyA9IDM7Ci0JZGF0YS0+cG93ZXIgPSAxMjc7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoc3RsYy0+aHcsIGluZm8pOwotCQlkYXRhLT5hbG9mdFtpXSA9IHJhdGUtPmh3X3ZhbHVlOwotCX0KLQotCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfcGVuZGluZyk7Ci0KLQkvKiBjaGVjayBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBpbiB0eCBidWZmZXIgKi8KLQlpZiAoc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdGxjLCBNQVhfRlJBTUVfTEVOKSA9PSAtMSkgewotCQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19RVUVVRSwgInR4IGJ1ZmZlciBmdWxsLCBzdG9wcGluZyBxdWV1ZXMiKTsKLQkJc3RsYy0+dHhfcXVldWVfc3RvcHBlZCA9IDE7Ci0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzdGxjLT5odyk7Ci0JfQotCi0JcXVldWVfd29yayhzdGxjLT5ody0+d29ya3F1ZXVlLCAmc3RsYy0+d29yayk7Ci0KLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlpbnQgcmV0ID0gMDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfQk9PVElORzsKLQlzdGxjLT5jaGFubmVsID0gMTsKLQotCXN0bGM0NXh4X3Bvd2VyX29uKHN0bGMpOwotCi0JcmV0ID0gc3RsYzQ1eHhfdXBsb2FkX2Zpcm13YXJlKHN0bGMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCXN0bGMtPnR4X3F1ZXVlX3N0b3BwZWQgPSAwOwotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyMDAwKTsKLQl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJnN0bGMtPmZ3X2NvbXAsCi0JCQkJCQkJICAgIHRpbWVvdXQpOwotCWlmICghdGltZW91dCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmlybXdhcmUgYm9vdCBmYWlsZWQiKTsKLQkJc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0bGMpOwotCQlyZXQgPSAtMTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfQk9PVCwgImZpcm13YXJlIGJvb3RlZCIpOwotCi0JLyogRklYTUU6IHNob3VsZCB3ZSB0YWtlIG11dGV4IGp1c3QgYWZ0ZXIgd2FpdF9mb3JfY29tcGxldGlvbigpPyAqLwotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCVdBUk5fT04oc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpOwotCi1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfb3Bfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCVdBUk5fT04oc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpOwotCi0Jc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0bGMpOwotCi0JLyogRklYTUU6IG1ha2Ugc3VyZSB0aGF0IGFsbCB3b3JrX3N0cnVjdHMgaGF2ZSBjb21wbGV0ZWQgKi8KLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0Jc3RsYzQ1eHhfZmx1c2hfcXVldWVzKHN0bGMpOwotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfT0ZGOwotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JbWVtY3B5KHN0bGMtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKLXsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCXN0bGMtPmNoYW5uZWwgPSBody0+Y29uZi5jaGFubmVsLT5od192YWx1ZTsKLQlzdGxjNDV4eF90eF9zY2FuKHN0bGMpOwotCXN0bGM0NXh4X3R4X3NldHVwKHN0bGMpOwotCXN0bGM0NXh4X3R4X2VkY2Yoc3RsYyk7Ci0KLQlpZiAoKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICE9IHN0bGMtPnBzbSkgewotCQlzdGxjLT5wc20gPSBody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTOwotCQlpZiAoc3RsYy0+YXNzb2NpYXRlZCkgewotCQkJc3RsYzQ1eHhfdHhfcHNtKHN0bGMsIHN0bGMtPnBzbSk7Ci0JCQlzdGxjNDV4eF90eF9udWxsZnVuYyhzdGxjLCBzdGxjLT5wc20pOwotCQl9Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgICAgIGludCBtY19jb3VudCwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQkqdG90YWxfZmxhZ3MgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCi0JCQkJCSB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQltZW1jcHkoc3RsYy0+YnNzaWQsIGluZm8tPmJzc2lkLCBFVEhfQUxFTik7Ci0Jc3RsYzQ1eHhfdHhfc2V0dXAoc3RsYyk7Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKLQkJc3RsYy0+YXNzb2NpYXRlZCA9IGluZm8tPmFzc29jOwotCQlpZiAoaW5mby0+YXNzb2MpCi0JCQlzdGxjLT5haWQgPSBpbmZvLT5haWQ7Ci0JCWVsc2UKLQkJCXN0bGMtPmFpZCA9IC0xOwotCi0JCWlmIChzdGxjLT5wc20pIHsKLQkJCXN0bGM0NXh4X3R4X3BzbShzdGxjLCBzdGxjLT5wc20pOwotCQkJc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RsYywgc3RsYy0+cHNtKTsKLQkJfQotCX0KLX0KLQotCi0vKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgc3RsYzQ1eHhfcmF0ZXNbXSA9IHsKLQl7IC5iaXRyYXRlID0gMTAsICAuaHdfdmFsdWUgPSAwLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAwLCB9LAotCXsgLmJpdHJhdGUgPSAyMCwgIC5od192YWx1ZSA9IDEsICAgIC5od192YWx1ZV9zaG9ydCA9IDEsIH0sCi0JeyAuYml0cmF0ZSA9IDU1LCAgLmh3X3ZhbHVlID0gMiwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gMiwgfSwKLQl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAzLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAzLCB9LAotCXsgLmJpdHJhdGUgPSA2MCwgIC5od192YWx1ZSA9IDQsICAgIC5od192YWx1ZV9zaG9ydCA9IDQsIH0sCi0JeyAuYml0cmF0ZSA9IDkwLCAgLmh3X3ZhbHVlID0gNSwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNSwgfSwKLQl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA2LCB9LAotCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsICAgIC5od192YWx1ZV9zaG9ydCA9IDcsIH0sCi0JeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gOCwgfSwKLQl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA5LCB9LAotCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCAgIC5od192YWx1ZV9zaG9ydCA9IDEwLCB9LAotCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCAgIC5od192YWx1ZV9zaG9ydCA9IDExLCB9LAotfTsKLQotLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHN0bGM0NXh4X2NoYW5uZWxzW10gPSB7Ci0JeyAuaHdfdmFsdWUgPSAxLCAuY2VudGVyX2ZyZXEgPSAyNDEyfSwKLQl7IC5od192YWx1ZSA9IDIsIC5jZW50ZXJfZnJlcSA9IDI0MTd9LAotCXsgLmh3X3ZhbHVlID0gMywgLmNlbnRlcl9mcmVxID0gMjQyMn0sCi0JeyAuaHdfdmFsdWUgPSA0LCAuY2VudGVyX2ZyZXEgPSAyNDI3fSwKLQl7IC5od192YWx1ZSA9IDUsIC5jZW50ZXJfZnJlcSA9IDI0MzJ9LAotCXsgLmh3X3ZhbHVlID0gNiwgLmNlbnRlcl9mcmVxID0gMjQzN30sCi0JeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSAyNDQyfSwKLQl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDI0NDd9LAotCXsgLmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gMjQ1Mn0sCi0JeyAuaHdfdmFsdWUgPSAxMCwgLmNlbnRlcl9mcmVxID0gMjQ1N30sCi0JeyAuaHdfdmFsdWUgPSAxMSwgLmNlbnRlcl9mcmVxID0gMjQ2Mn0sCi0JeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2N30sCi0JeyAuaHdfdmFsdWUgPSAxMywgLmNlbnRlcl9mcmVxID0gMjQ3Mn0sCi19OwotCi0vKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHN0bGM0NXh4X2JhbmRfMmdoeiA9IHsKLQkuY2hhbm5lbHMgPSBzdGxjNDV4eF9jaGFubmVscywKLQkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUoc3RsYzQ1eHhfY2hhbm5lbHMpLAotCS5iaXRyYXRlcyA9IHN0bGM0NXh4X3JhdGVzLAotCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShzdGxjNDV4eF9yYXRlcyksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgc3RsYzQ1eHhfb3BzID0gewotCS5zdGFydCA9IHN0bGM0NXh4X29wX3N0YXJ0LAotCS5zdG9wID0gc3RsYzQ1eHhfb3Bfc3RvcCwKLQkuYWRkX2ludGVyZmFjZSA9IHN0bGM0NXh4X29wX2FkZF9pbnRlcmZhY2UsCi0JLnJlbW92ZV9pbnRlcmZhY2UgPSBzdGxjNDV4eF9vcF9yZW1vdmVfaW50ZXJmYWNlLAotCS5jb25maWcgPSBzdGxjNDV4eF9vcF9jb25maWcsCi0JLmNvbmZpZ3VyZV9maWx0ZXIgPSBzdGxjNDV4eF9vcF9jb25maWd1cmVfZmlsdGVyLAotCS50eCA9IHN0bGM0NXh4X29wX3R4LAotCS5ic3NfaW5mb19jaGFuZ2VkID0gc3RsYzQ1eHhfb3BfYnNzX2luZm9fY2hhbmdlZCwKLX07Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcmVnaXN0ZXJfbWFjODAyMTEoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCS8qIEZJWE1FOiBTRVRfSUVFRTgwMjExX1BFUk1fQUREUigpIHJlcXVpcmVzIGRlZmF1bHRfbWFjX2FkZHIKLQkgICB0byBiZSBub24tY29uc3QgZm9yIHNvbWUgc3RyYW5nZSByZWFzb24gKi8KLQlzdGF0aWMgdTggZGVmYXVsdF9tYWNfYWRkcltFVEhfQUxFTl0gPSB7Ci0JCTB4MDAsIDB4MDIsIDB4ZWUsIDB4YzAsIDB4ZmYsIDB4ZWUKLQl9OwotCWludCByZXQ7Ci0KLQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihzdGxjLT5odywgZGVmYXVsdF9tYWNfYWRkcik7Ci0KLQlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RsYy0+aHcpOwotCWlmIChyZXQpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoInVuYWJsZSB0byByZWdpc3RlciBtYWM4MDIxMSBodzogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0KLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RsYzQ1eHhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzdGxjNDV4eCIsCi0JLmlkCQk9IC0xLAotCi0JLyogZGV2aWNlIG1vZGVsIGluc2lzdHMgdG8gaGF2ZSBhIHJlbGVhc2UgZnVuY3Rpb24gKi8KLQkuZGV2ICAgICAgICAgICAgPSB7Ci0JCS5yZWxlYXNlID0gc3RsYzQ1eHhfZGV2aWNlX3JlbGVhc2UsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHN0bGM0NXh4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCWludCByZXQ7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQkvKiBtYWM4MDIxMSBhbGxvYyAqLwotCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqc3RsYyksICZzdGxjNDV4eF9vcHMpOwotCWlmICghaHcpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImNvdWxkIG5vdCBhbGxvYyBpZWVlODAyMTFfaHciKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogbWFjODAyMTEgY2xlYXJzIGh3LT5wcml2ICovCi0Jc3RsYyA9IGh3LT5wcml2OwotCi0Jc3RsYy0+aHcgPSBodzsKLQlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBzdGxjKTsKLQlzdGxjLT5zcGkgPSBzcGk7Ci0KLQlzcGktPmJpdHNfcGVyX3dvcmQgPSAxNjsKLQlzcGktPm1heF9zcGVlZF9oeiA9IDI0MDAwMDAwOwotCi0JcmV0ID0gc3BpX3NldHVwKHNwaSk7Ci0JaWYgKHJldCA8IDApCi0JCXN0bGM0NXh4X2Vycm9yKCJzcGlfc2V0dXAgZmFpbGVkIik7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3Qoc3RsYzQ1eHhfZ3Bpb19wb3dlciwgInN0bGM0NXh4IHBvd2VyIik7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoInBvd2VyIEdQSU8gcmVxdWVzdCBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3Qoc3RsYzQ1eHhfZ3Bpb19pcnEsICJzdGxjNDV4eCBpcnEiKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigiaXJxIEdQSU8gcmVxdWVzdCBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0bGM0NXh4X2dwaW9fcG93ZXIsIDApOwotCWdwaW9fZGlyZWN0aW9uX2lucHV0KHN0bGM0NXh4X2dwaW9faXJxKTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSwKLQkJCSAgc3RsYzQ1eHhfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAic3RsYzQ1eHgiLAotCQkJICBzdGxjLT5zcGkpOwotCWlmIChyZXQgPCAwKQotCQkvKiBGSVhNRTogaGFuZGxlIHRoZSBlcnJvciAqLwotCQlzdGxjNDV4eF9lcnJvcigicmVxdWVzdF9pcnEoKSBmYWlsZWQiKTsKLQotCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSksCi0JCSAgICAgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwotCi0JZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKLQotCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc3RsYzQ1eHhfZGV2aWNlKTsKLQlpZiAocmV0KSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJDb3VsZG4ndCByZWdpc3RlciB3bGFuX29tYXAgZGV2aWNlLiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlkZXZfc2V0X2RydmRhdGEoJnN0bGM0NXh4X2RldmljZS5kZXYsIHN0bGMpOwotCi0JSU5JVF9XT1JLKCZzdGxjLT53b3JrLCBzdGxjNDV4eF93b3JrKTsKLQlJTklUX1dPUksoJnN0bGMtPndvcmtfcmVzZXQsIHN0bGM0NXh4X3dvcmtfcmVzZXQpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZzdGxjLT53b3JrX3R4X3RpbWVvdXQsIHN0bGM0NXh4X3dvcmtfdHhfdGltZW91dCk7Ci0JbXV0ZXhfaW5pdCgmc3RsYy0+bXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmc3RsYy0+ZndfY29tcCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnN0bGMtPnR4X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZzdGxjLT50eGJ1ZmZlcik7Ci0JSU5JVF9MSVNUX0hFQUQoJnN0bGMtPnR4X3BlbmRpbmcpOwotCUlOSVRfTElTVF9IRUFEKCZzdGxjLT50eF9zZW50KTsKLQotCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAotCQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCUlFRUU4MDIxMV9IV19OT0lTRV9EQk07Ci0JLyogZm91ciBieXRlcyBmb3IgcGFkZGluZyAqLwotCWh3LT5leHRyYV90eF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3Qgc19sbV9kYXRhX291dCkgKyA0OwotCi0JLyogdW5pdCB1cyAqLwotCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTAwMDsKLQotCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOwotCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmc3RsYzQ1eHhfYmFuZF8yZ2h6OwotCi0JU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZzcGktPmRldik7Ci0KLQlCVUlMRF9CVUdfT04oc2l6ZW9mKGRlZmF1bHRfY2FsX3Jzc2kpICE9IFJTU0lfQ0FMX0FSUkFZX0xFTik7Ci0JQlVJTERfQlVHX09OKHNpemVvZihkZWZhdWx0X2NhbF9jaGFubmVscykgIT0gQ0hBTk5FTF9DQUxfQVJSQVlfTEVOKTsKLQotCXN0bGMtPmNhbF9yc3NpID0ga21lbWR1cChkZWZhdWx0X2NhbF9yc3NpLCBSU1NJX0NBTF9BUlJBWV9MRU4sCi0JCQkJIEdGUF9LRVJORUwpOwotCXN0bGMtPmNhbF9jaGFubmVscyA9IGttZW1kdXAoZGVmYXVsdF9jYWxfY2hhbm5lbHMsCi0JCQkJICAgICBDSEFOTkVMX0NBTF9BUlJBWV9MRU4sCi0JCQkJICAgICBHRlBfS0VSTkVMKTsKLQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgJmRldl9hdHRyX2NhbF9yc3NpKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlIGNhbF9yc3NpIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgJmRldl9hdHRyX2NhbF9jaGFubmVscyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSBjYWxfY2hhbm5lbHMiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzdGxjNDV4eF9kZXZpY2UuZGV2LCAmZGV2X2F0dHJfdHhfYnVmKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlIHR4X2J1ZiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBzdGxjNDV4eF9yZWdpc3Rlcl9tYWM4MDIxMShzdGxjKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlzdGxjNDV4eF9pbmZvKCJ2IiBEUklWRVJfVkVSU0lPTiAiIGxvYWRlZCIpOwotCi0Jc3RsYzQ1eHhfaW5mbygiY29uZmlnIGJ1ZmZlciAweCV4LTB4JXgiLAotCQkgICAgICBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIEZJUk1XQVJFX0NPTkZJR19FTkQpOwotCXN0bGM0NXh4X2luZm8oInR4IDB4JXgtMHgleCwgcnggMHgleC0weCV4IiwKLQkJICAgICAgRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQsIEZJUk1XQVJFX1RYQlVGRkVSX0VORCwKLQkJICAgICAgRklSTVdBUkVfUlhCVUZGRVJfU1RBUlQsIEZJUk1XQVJFX1JYQlVGRkVSX0VORCk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzdGxjNDV4eF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZzdGxjNDV4eF9kZXZpY2UpOwotCi0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoc3RsYy0+aHcpOwotCi0JZnJlZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpLCBzcGkpOwotCi0JZ3Bpb19mcmVlKHN0bGM0NXh4X2dwaW9fcG93ZXIpOwotCWdwaW9fZnJlZShzdGxjNDV4eF9ncGlvX2lycSk7Ci0KLQkvKiBGSVhNRTogZnJlZSBjYWxfY2hhbm5lbHMgYW5kIGNhbF9yc3NpPyAqLwotCi0Ja2ZyZWUoc3RsYy0+ZncpOwotCi0JbXV0ZXhfZGVzdHJveSgmc3RsYy0+bXV0ZXgpOwotCi0JLyogZnJlZXMgYWxzbyBzdGxjICovCi0JaWVlZTgwMjExX2ZyZWVfaHcoc3RsYy0+aHcpOwotCXN0bGMgPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHN0bGM0NXh4X3NwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLyogdXNlIGN4MzExMHggbmFtZSBiZWNhdXNlIGJvYXJkLW44MDAuYyB1c2VzIHRoYXQgZm9yIHRoZQotCQkgKiBTUEkgcG9ydCAqLwotCQkubmFtZQkJPSAiY3gzMTEweCIsCi0JCS5idXMJCT0gJnNwaV9idXNfdHlwZSwKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCX0sCi0KLQkucHJvYmUJCT0gc3RsYzQ1eHhfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzdGxjNDV4eF9yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc3RsYzQ1eHhfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZzdGxjNDV4eF9zcGlfZHJpdmVyKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyIFNQSSBkcml2ZXI6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHN0bGM0NXh4X2V4aXQodm9pZCkKLXsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnN0bGM0NXh4X3NwaV9kcml2ZXIpOwotCi0Jc3RsYzQ1eHhfaW5mbygidW5sb2FkZWQiKTsKLX0KLQotbW9kdWxlX2luaXQoc3RsYzQ1eHhfaW5pdCk7Ci1tb2R1bGVfZXhpdChzdGxjNDV4eF9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Iik7Ci1NT0RVTEVfQUxJQVMoInNwaTpjeDMxMTB4Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguaCBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzk2YmJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBzdGxjNDV4eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJzdGxjNDV4eF9sbWFjLmgiCi0KLSNkZWZpbmUgRFJJVkVSX05BTUUgInN0bGM0NXh4IgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xLjMiCi0KLSNkZWZpbmUgRFJJVkVSX1BSRUZJWCBEUklWRVJfTkFNRSAiOiAiCi0KLWVudW0gewotCURFQlVHX05PTkUgPSAwLAotCURFQlVHX0ZVTkMgPSAxIDw8IDAsCi0JREVCVUdfSVJRID0gMSA8PCAxLAotCURFQlVHX0JIID0gMSA8PCAyLAotCURFQlVHX1JYID0gMSA8PCAzLAotCURFQlVHX1JYX0NPTlRFTlQgPSAxIDw8IDUsCi0JREVCVUdfVFggPSAxIDw8IDYsCi0JREVCVUdfVFhfQ09OVEVOVCA9IDEgPDwgOCwKLQlERUJVR19UWEJVRkZFUiA9IDEgPDwgOSwKLQlERUJVR19RVUVVRSA9IDEgPDwgMTAsCi0JREVCVUdfQk9PVCA9IDEgPDwgMTEsCi0JREVCVUdfUFNNID0gMSA8PCAxMiwKLQlERUJVR19BTEwgPSB+MCwKLX07Ci0KLSNkZWZpbmUgREVCVUdfTEVWRUwgREVCVUdfTk9ORQotLyogI2RlZmluZSBERUJVR19MRVZFTCBERUJVR19BTEwgKi8KLS8qICNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX1RYIHwgREVCVUdfUlggfCBERUJVR19JUlEpICovCi0vKiAjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19UWCB8IERFQlVHX01FTVJFR0lPTiB8IERFQlVHX1FVRVVFKSAqLwotLyogI2RlZmluZSBERUJVR19MRVZFTCAoREVCVUdfTUVNUkVHSU9OIHwgREVCVUdfUVVFVUUpICovCi0KLSNkZWZpbmUgc3RsYzQ1eHhfZXJyb3IoZm10LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX1BSRUZJWCAiRVJST1IgIiBmbXQgIlxuIiwgIyNhcmcpCi0KLSNkZWZpbmUgc3RsYzQ1eHhfd2FybmluZyhmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX1BSRUZJWCAiV0FSTklORyAiIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSBzdGxjNDV4eF9pbmZvKGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSBzdGxjNDV4eF9kZWJ1ZyhsZXZlbCwgZm10LCBhcmcuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKLQkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc3RsYzQ1eHhfZHVtcChsZXZlbCwgYnVmLCBsZW4pCQlcCi0JZG8geyBcCi0JCWlmIChsZXZlbCAmIERFQlVHX0xFVkVMKSBcCi0JCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCBcCi0JCQkJICAgICAgIDE2LCAxLCBidWYsIGxlbiwgMSk7CQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBNQUMyU1RSKGEpICgoYSlbMF0sIChhKVsxXSwgKGEpWzJdLCAoYSlbM10sIChhKVs0XSwgKGEpWzVdKQotI2RlZmluZSBNQUNTVFIgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IgotCi0vKiBCaXQgMTUgaXMgcmVhZC93cml0ZSBiaXQ7IE9OID0gUkVBRCwgT0ZGID0gV1JJVEUgKi8KLSNkZWZpbmUgQUREUl9SRUFEX0JJVF8xNSAgMHg4MDAwCi0KLSNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMgICAgIDB4MDAKLSNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVF9FTgkgICAgMHgwNAotCi0jZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyAgICAweDA4Ci0jZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0VOCSAgICAweDBjCi0jZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0FDSwkgICAgMHgxMAotCi0jZGVmaW5lIFNQSV9BRFJTX0dFTl9QVVJQXzEgICAJICAgIDB4MTQKLSNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMiAgIAkgICAgMHgxOAotCi0vKiBoaWdoIHdvcmQgKi8KLSNkZWZpbmUgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCAgICAgIDB4MjYKLQotI2RlZmluZSBTUElfQURSU19ETUFfREFUQSAgICAgIAkgICAgMHgyOAotCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMICAgICAweDJjCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9MRU4gICAgICAweDJlCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9CQVNFICAgICAweDMwCi0KLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQ1RSTCAgICAgIDB4MzQKLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfTEVOICAgICAgIDB4MzYKLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQkFTRSAgICAgIDB4MzgKLQotI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgMHg4MDAwCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEICAweDQwMDAKLSNkZWZpbmUgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCAgICAgIDB4MjAwMAotI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQgICAgMHgxMDAwCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9DUFVfRU4gICAweDA4MDAKLQotI2RlZmluZSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFICAgMHgwMDAxCi0jZGVmaW5lIFNQSV9ETUFfUkVBRF9DVFJMX0VOQUJMRSAgICAweDAwMDEKLSNkZWZpbmUgSE9TVF9BTExPV0VEICAgICAgICAgICAgICAgICgxIDw8IDcpCi0KLSNkZWZpbmUgRklSTVdBUkVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAKLQotI2RlZmluZSBTUElfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwICAgICAgICAgLyogbXNlYyAqLwotCi0jZGVmaW5lIFNQSV9NQVhfVFhfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAzMgotCi0jZGVmaW5lIFNQSV9NQVhfUEFDS0VUX1NJWkUgICAgICAgICAgICAgICAgICAgICAzMjc2NwotCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1dBS0VVUCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1NMRUVQICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1JERE9ORSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0KLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfQ1RTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfRFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLQotI2RlZmluZSBTUElfSE9TVF9JTlRfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTUElfSE9TVF9JTlRfV1JfUkVBRFkgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTUElfSE9TVF9JTlRfU1dfVVBEQVRFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTUElfSE9TVF9JTlRfVVBEQVRFICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotCi0vKiBjbGVhciB0byBzZW5kICovCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9DVFMJICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLQotLyogZGF0YSByZWFkeSAqLwotI2RlZmluZSBTUElfSE9TVF9JTlRfRFIJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotCi0jZGVmaW5lIFNQSV9IT1NUX0lOVFNfREVGQVVMVCBcCi0JKFNQSV9IT1NUX0lOVF9SRUFEWSB8IFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKQotCi0jZGVmaW5lIFRBUkdFVF9CT09UX1NMRUVQIDUwCi0KLS8qIFRoZSBmaXJtd2FyZSBidWZmZXIgaXMgZGl2aWRlZCBpbnRvIHRocmVlIGFyZWFzOgotICoKLSAqIG8gY29uZmlnIGFyZWEgKGZvciBjb250cm9sIGNvbW1hbmRzKQotICogbyB0eCBidWZmZXIKLSAqIG8gcnggYnVmZmVyCi0gKi8KLSNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX1NUQVJUIDB4MjAyMDAKLSNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX0VORCAweDI3YzYwCi0jZGVmaW5lIEZJUk1XQVJFX0JVRkZFUl9MRU4gKEZJUk1XQVJFX0JVRkZFUl9FTkQgLSBGSVJNV0FSRV9CVUZGRVJfU1RBUlQpCi0jZGVmaW5lIEZJUk1XQVJFX01UVSAzMjQwCi0jZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19QQVlMT0FEX0xFTiAxMDI0Ci0jZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19TVEFSVCBGSVJNV0FSRV9CVUZGRVJfU1RBUlQKLSNkZWZpbmUgRklSTVdBUkVfQ09ORklHX0xFTiAoc2l6ZW9mKHN0cnVjdCBzX2xtX2NvbnRyb2wpICsgXAotCQkJICAgICBGSVJNV0FSRV9DT05GSUdfUEFZTE9BRF9MRU4pCi0jZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19FTkQgKEZJUk1XQVJFX0NPTkZJR19TVEFSVCArIEZJUk1XQVJFX0NPTkZJR19MRU4gLSAxKQotI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9MRU4gKDUgKiBGSVJNV0FSRV9NVFUgKyAxMDI0KQotI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCAoRklSTVdBUkVfQlVGRkVSX0VORCAtIEZJUk1XQVJFX1JYQlVGRkVSX0xFTikKLSNkZWZpbmUgRklSTVdBUkVfUlhCVUZGRVJfRU5EIChGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCArIFwKLQkJCSAgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9MRU4gLSAxKQotI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCAoRklSTVdBUkVfQlVGRkVSX1NUQVJUICsgRklSTVdBUkVfQ09ORklHX0xFTikKLSNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfTEVOIChGSVJNV0FSRV9CVUZGRVJfTEVOIC0gRklSTVdBUkVfQ09ORklHX0xFTiAtIFwKLQkJCSAgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9MRU4pCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX0VORCAoRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQgKyBcCi0JCQkgICAgICAgRklSTVdBUkVfVFhCVUZGRVJfTEVOIC0gMSkKLQotI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVIgMTAwCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX1RSQUlMRVIgNAotCi0vKiBGSVhNRTogY29tZSB1cCB3aXRoIGEgcHJvcGVyIHZhbHVlICovCi0jZGVmaW5lIE1BWF9GUkFNRV9MRU4gMjUwMAotCi0vKiB1bml0IGlzIG1zICovCi0jZGVmaW5lIFRYX0ZSQU1FX0xJRkVUSU1FIDIwMDAKLSNkZWZpbmUgVFhfVElNRU9VVCA0MDAwCi0KLSNkZWZpbmUgU1VQUE9SVEVEX0NIQU5ORUxTIDEzCi0KLS8qIEZJWE1FICovCi0vKiAjZGVmaW5lIENIQU5ORUxfQ0FMX0xFTiBvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgYnJhdGVtYXNrKSAtIFwgKi8KLS8qIAlvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgY2hhbm5lbCkgKi8KLSNkZWZpbmUgQ0hBTk5FTF9DQUxfTEVOIDI5MgotI2RlZmluZSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4gKFNVUFBPUlRFRF9DSEFOTkVMUyAqIENIQU5ORUxfQ0FMX0xFTikKLS8qIEZJWE1FICovCi0vKiAjZGVmaW5lIFJTU0lfQ0FMX0xFTiBzaXplb2Yoc3RydWN0IHNfbG1vX3NjYW4pIC0gXCAqLwotLyogCW9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCByc3NpY2FsKSAqLwotI2RlZmluZSBSU1NJX0NBTF9MRU4gOAotI2RlZmluZSBSU1NJX0NBTF9BUlJBWV9MRU4gKFNVUFBPUlRFRF9DSEFOTkVMUyAqIFJTU0lfQ0FMX0xFTikKLQotc3RydWN0IHNfZG1hX3JlZ3MgewotCXVuc2lnbmVkIHNob3J0IGNtZDsKLQl1bnNpZ25lZCBzaG9ydCBsZW47Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotfTsKLQotc3RydWN0IHN0bGM0NXh4X2llX3RpbSB7Ci0JdTggZHRpbV9jb3VudDsKLQl1OCBkdGltX3BlcmlvZDsKLQl1OCBibWFwX2NvbnRyb2w7Ci0JdTggcHZibWFwWzI1MV07Ci19OwotCi1zdHJ1Y3QgdHhidWZmZXIgewotCS8qIGNhbiBiZSByZW1vdmVkIHdoZW4gc3dpdGNoZWQgdG8gc2tiIHF1ZXVlICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eF9saXN0OwotCi0Jc3RydWN0IGxpc3RfaGVhZCBidWZmZXJfbGlzdDsKLQotCWludCBzdGFydDsKLQlpbnQgZnJhbWVfc3RhcnQ7Ci0JaW50IGVuZDsKLQotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTMyIGhhbmRsZTsKLQotCWJvb2wgc3RhdHVzX25lZWRlZDsKLQotCWludCBoZWFkZXJfbGVuOwotCi0JLyogdW5pdCBqaWZmaWVzICovCi0JdW5zaWduZWQgbG9uZyBsaWZldGltZTsKLX07Ci0KLWVudW0gZndfc3RhdGUgewotCUZXX1NUQVRFX09GRiwKLQlGV19TVEFURV9CT09USU5HLAotCUZXX1NUQVRFX1JFQURZLAotCUZXX1NUQVRFX1JFU0VULAotCUZXX1NUQVRFX1JFU0VUVElORywKLX07Ci0KLXN0cnVjdCBzdGxjNDV4eCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19yZXNldDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcmtfdHhfdGltZW91dDsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0Jc3RydWN0IGNvbXBsZXRpb24gZndfY29tcDsKLQotCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQlpbnQgY2hhbm5lbDsKLQotCXU4ICpjYWxfcnNzaTsKLQl1OCAqY2FsX2NoYW5uZWxzOwotCi0JZW51bSBmd19zdGF0ZSBmd19zdGF0ZTsKLQotCXNwaW5sb2NrX3QgdHhfbG9jazsKLQotCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eGJ1ZmZlcjsKLQotCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eF9wZW5kaW5nOwotCi0JLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KLQlpbnQgdHhfcXVldWVfc3RvcHBlZDsKLQotCS8qIHByb3RlY3RlZCBieSBtdXRleCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdHhfc2VudDsKLQotCWludCB0eF9mcmFtZXM7Ci0KLQl1OCAqZnc7Ci0JaW50IGZ3X2xlbjsKLQotCWJvb2wgcHNtOwotCWJvb2wgYXNzb2NpYXRlZDsKLQlpbnQgYWlkOwotCWJvb2wgcHNwb2xsaW5nOwotfTsKLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4X2xtYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY1ZGI4MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogIFRoaXMgaXMgdGhlIExNQUMgQVBJIGludGVyZmFjZSBoZWFkZXIgZmlsZSBmb3IgU1RMQzQ1NjAuICAgICAgICAJKgotKiAgQ29weXJpZ2h0IChDKSAyMDA3IENvbmV4YW50IFN5c3RlbXMsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAgICAgICAgKgotKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgKgotKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIJKgotKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgKgotKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YJKgotKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgKgotKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgKgotKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX2xtYWNfaF9fCi0jZGVmaW5lIF9fbG1hY19oX18KLQotI2RlZmluZSBMTV9UT1BfVkFSSUFOVCAgICAgIDB4MDUwNgotI2RlZmluZSBMTV9CT1RUT01fVkFSSUFOVCAgIDB4MDUwNgotCi0vKgotICogTE1BQyAtIFVNQUMgaW50ZXJmYWNlIGRlZmluaXRpb246Ci0gKi8KLQotI2RlZmluZSBMTV9GTEFHX0NPTlRST0wgICAgIDB4ODAwMAotI2RlZmluZSBMTV9GTEFHX0FMSUdOICAgICAgIDB4NDAwMAotCi0jZGVmaW5lIExNX0NUUkxfT1BTRVQgICAgICAgMHgwMDAxCi0KLSNkZWZpbmUgTE1fT1VUX1BST01JU0MgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fT1VUX1RJTUVTVEFNUCAgICAweDAwMDIKLSNkZWZpbmUgTE1fT1VUX1NFUU5SICAgICAgICAweDAwMDQKLSNkZWZpbmUgTE1fT1VUX0JVUlNUICAgICAgICAweDAwMTAKLSNkZWZpbmUgTE1fT1VUX05PQ0FOQ0VMICAgICAweDAwMjAKLSNkZWZpbmUgTE1fT1VUX0NMRUFSVElNICAgICAweDAwNDAKLSNkZWZpbmUgTE1fT1VUX0hJVENISElLRSAgICAweDAwODAKLSNkZWZpbmUgTE1fT1VUX0NPTVBSRVNTICAgICAweDAxMDAKLSNkZWZpbmUgTE1fT1VUX0NPTkNBVCAgICAgICAweDAyMDAKLSNkZWZpbmUgTE1fT1VUX1BDU19BQ0NFUFQgICAweDA0MDAKLSNkZWZpbmUgTE1fT1VUX1dBSVRFT1NQICAgICAweDA4MDAKLQotCi0jZGVmaW5lIExNX0FMT0ZUX1NQICAgICAgICAgMHgxMAotI2RlZmluZSBMTV9BTE9GVF9DVFMgICAgICAgIDB4MjAKLSNkZWZpbmUgTE1fQUxPRlRfUlRTICAgICAgICAweDQwCi0jZGVmaW5lIExNX0FMT0ZUX01BU0sgICAgICAgMHgxZgotI2RlZmluZSBMTV9BTE9GVF9SQVRFICAgICAgIDB4MGYKLQotI2RlZmluZSBMTV9JTl9GQ1NfR09PRCAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9JTl9NQVRDSF9NQUMgICAgIDB4MDAwMgotI2RlZmluZSBMTV9JTl9NQ0JDICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBMTV9JTl9CRUFDT04gICAgICAgIDB4MDAwOAotI2RlZmluZSBMTV9JTl9NQVRDSF9CU1MgICAgIDB4MDAxMAotI2RlZmluZSBMTV9JTl9CQ0FTVF9CU1MgICAgIDB4MDAyMAotI2RlZmluZSBMTV9JTl9EQVRBICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBMTV9JTl9UUlVOQ0FURUQgICAgIDB4MDA4MAotCi0jZGVmaW5lIExNX0lOX1RSQU5TUEFSRU5UICAgMHgwMjAwCi0KLSNkZWZpbmUgTE1fUVVFVUVfQkVBQ09OICAgICAwCi0jZGVmaW5lIExNX1FVRVVFX1NDQU4gICAgICAgMQotI2RlZmluZSBMTV9RVUVVRV9NR1QgICAgICAgIDIKLSNkZWZpbmUgTE1fUVVFVUVfTUNCQyAgICAgICAzCi0jZGVmaW5lIExNX1FVRVVFX0RBVEEgICAgICAgNAotI2RlZmluZSBMTV9RVUVVRV9EQVRBMCAgICAgIDQKLSNkZWZpbmUgTE1fUVVFVUVfREFUQTEgICAgICA1Ci0jZGVmaW5lIExNX1FVRVVFX0RBVEEyICAgICAgNgotI2RlZmluZSBMTV9RVUVVRV9EQVRBMyAgICAgIDcKLQotI2RlZmluZSBMTV9TRVRVUF9JTkZSQSAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fU0VUVVBfSUJTUyAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIExNX1NFVFVQX1RSQU5TUEFSRU5UICAgIDB4MDAwOAotI2RlZmluZSBMTV9TRVRVUF9QUk9NSVNDVU9VUyAgICAweDAwMTAKLSNkZWZpbmUgTE1fU0VUVVBfSElCRVJOQVRFICAgICAgMHgwMDIwCi0jZGVmaW5lIExNX1NFVFVQX05PQUNLICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBMTV9TRVRVUF9SWF9ESVNBQkxFRCAgICAweDAwODAKLQotI2RlZmluZSBMTV9BTlRFTk5BXzAgICAgICAgICAgICAwCi0jZGVmaW5lIExNX0FOVEVOTkFfMSAgICAgICAgICAgIDEKLSNkZWZpbmUgTE1fQU5URU5OQV9ESVZFUlNJVFkgICAgMgotCi0jZGVmaW5lIExNX1RYX0ZBSUxFRCAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9UWF9QU00gICAgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgTE1fVFhfUFNNX0NBTkNFTExFRAkweDAwMDQKLQotI2RlZmluZSBMTV9TQ0FOX0VYSVQgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fU0NBTl9UUkFQICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIExNX1NDQU5fQUNUSVZFICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBMTV9TQ0FOX0ZJTFRFUiAgICAgICAgICAweDAwMDgKLQotI2RlZmluZSBMTV9QU00gICAgICAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fUFNNX0RUSU0gICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIExNX1BTTV9NQ0JDICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBMTV9QU01fQ0hFQ0tTVU0gICAgICAgICAweDAwMDgKLSNkZWZpbmUgTE1fUFNNX1NLSVBfTU9SRV9EQVRBICAgMHgwMDEwCi0jZGVmaW5lIExNX1BTTV9CRUFDT05fVElNRU9VVCAgIDB4MDAyMAotI2RlZmluZSBMTV9QU01fSEZPU0xFRVAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgTE1fUFNNX0FVVE9TV0lUQ0hfU0xFRVAgMHgwMDgwCi0jZGVmaW5lCUxNX1BTTV9MUElUCQkweDAxMDAKLSNkZWZpbmUgTE1fUFNNX0JGX1VDQVNUX1NLSVAgICAgMHgwMjAwCi0jZGVmaW5lIExNX1BTTV9CRl9NQ0FTVF9TS0lQICAgIDB4MDQwMAotCi0vKiBoZm9zbGVlcCAqLwotI2RlZmluZSBMTV9QU01fU0xFRVBfT1BUSU9OX01BU0sgKExNX1BTTV9BVVRPU1dJVENIX1NMRUVQIHwgTE1fUFNNX0hGT1NMRUVQKQotI2RlZmluZSBMTV9QU01fU0xFRVBfT1BUSU9OX1NISUZUICAgICAgIDYKLS8qIGhmb3NsZWVwZW5kICovCi0jZGVmaW5lIExNX1BTTV9CRl9PUFRJT05fTUFTSyAoTE1fUFNNX0JGX01DQVNUX1NLSVAgfCBMTV9QU01fQkZfVUNBU1RfU0tJUCkKLSNkZWZpbmUgTE1fUFNNX0JGX09QVElPTl9TSElGVCAgOQotCi0KLSNkZWZpbmUgTE1fUFJJVkFDQ19XRVAgICAgICAgICAgMHgwMQotI2RlZmluZSBMTV9QUklWQUNDX1RLSVAgICAgICAgICAweDAyCi0jZGVmaW5lIExNX1BSSVZBQ0NfTUlDSEFFTCAgICAgIDB4MDQKLSNkZWZpbmUgTE1fUFJJVkFDQ19DQ1hfS1AgICAgICAgMHgwOAotI2RlZmluZSBMTV9QUklWQUNDX0NDWF9NSUMgICAgICAweDEwCi0jZGVmaW5lIExNX1BSSVZBQ0NfQUVTX0NDTVAgICAgIDB4MjAKLQotLyogc2l6ZSBvZiBzX2xtX2Rlc2NyIGluIHdvcmRzICovCi0jZGVmaW5lIExNX0RFU0NSX1NJWkVfV09SRFMgICAgIDExCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi1lbnVtIHsKLSAgICBMTV9NT0RFX0NMSUVOVCA9IDAsCi0gICAgTE1fTU9ERV9BUAotfTsKLQotc3RydWN0IHNfbG1fZGVzY3IgewotICAgIHVpbnQxNl90IG1vZGVzOwotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQzMl90IGJ1ZmZlcl9zdGFydDsKLSAgICB1aW50MzJfdCBidWZmZXJfZW5kOwotICAgIHVpbnQ4X3QgaGVhZGVyOwotICAgIHVpbnQ4X3QgdHJhaWxlcjsKLSAgICB1aW50OF90IHR4X3F1ZXVlczsKLSAgICB1aW50OF90IHR4X2RlcHRoOwotICAgIHVpbnQ4X3QgcHJpdmFjeTsKLSAgICB1aW50OF90IHJ4X2tleWNhY2hlOwotICAgIHVpbnQ4X3QgdGltX3NpemU7Ci0gICAgdWludDhfdCBwYWQxOwotICAgIHVpbnQ4X3QgcmF0ZXNbMTZdOwotICAgIHVpbnQzMl90IGxpbms7Ci0JdWludDE2X3QgbXR1OwotfTsKLQotCi1zdHJ1Y3Qgc19sbV9jb250cm9sIHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MTZfdCBsZW5ndGg7Ci0gICAgdWludDMyX3QgaGFuZGxlOwotICAgIHVpbnQxNl90IG9pZDsKLSAgICB1aW50MTZfdCBwYWQ7Ci0gICAgLyogdWludDhfdCBkYXRhW107ICovCi19OwotCi1lbnVtIHsKLSAgICBMTV9QUklWX05PTkUgPSAwLAotICAgIExNX1BSSVZfV0VQLAotICAgIExNX1BSSVZfVEtJUCwKLSAgICBMTV9QUklWX1RLSVBNSUNIQUVMLAotICAgIExNX1BSSVZfQ0NYX1dFUE1JQywKLSAgICBMTV9QUklWX0NDWF9LUE1JQywKLSAgICBMTV9QUklWX0NDWF9LUCwKLSAgICBMTV9QUklWX0FFU19DQ01QCi19OwotCi1lbnVtIHsKLSAgICBMTV9ERUNSWVBUX05PTkUsCi0gICAgTE1fREVDUllQVF9PSywKLSAgICBMTV9ERUNSWVBUX05PS0VZLAotICAgIExNX0RFQ1JZUFRfTk9NSUNIQUVMLAotICAgIExNX0RFQ1JZUFRfTk9DS0lQTUlDLAotICAgIExNX0RFQ1JZUFRfRkFJTF9XRVAsCi0gICAgTE1fREVDUllQVF9GQUlMX1RLSVAsCi0gICAgTE1fREVDUllQVF9GQUlMX01JQ0hBRUwsCi0gICAgTE1fREVDUllQVF9GQUlMX0NLSVBLUCwKLSAgICBMTV9ERUNSWVBUX0ZBSUxfQ0tJUE1JQywKLSAgICBMTV9ERUNSWVBUX0ZBSUxfQUVTQ0NNUAotfTsKLQotc3RydWN0IHNfbG1fZGF0YV9vdXQgewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQxNl90IGxlbmd0aDsKLSAgICB1aW50MzJfdCBoYW5kbGU7Ci0gICAgdWludDE2X3QgYWlkOwotICAgIHVpbnQ4X3QgcnRzX3JldHJpZXM7Ci0gICAgdWludDhfdCByZXRyaWVzOwotICAgIHVpbnQ4X3QgYWxvZnRbOF07Ci0gICAgdWludDhfdCBhbG9mdF9jdHJsOwotICAgIHVpbnQ4X3QgY3J5cHRfb2Zmc2V0OwotICAgIHVpbnQ4X3Qga2V5dHlwZTsKLSAgICB1aW50OF90IGtleWxlbjsKLSAgICB1aW50OF90IGtleVsxNl07Ci0gICAgdWludDhfdCBxdWV1ZTsKLSAgICB1aW50OF90IGJhY2tsb2c7Ci0gICAgdWludDE2X3QgZHVyYXRpb25zWzRdOwotICAgIHVpbnQ4X3QgYW50ZW5uYTsKLSAgICB1aW50OF90IGN0czsKLSAgICBpbnQxNl90IHBvd2VyOwotICAgIHVpbnQ4X3QgcGFkWzJdOwotICAgIC8qdWludDhfdCBkYXRhW107Ki8KLX07Ci0KLSNkZWZpbmUgTE1fUkNQSV9JTlZBTElEICAgICAgICAgKDB4ZmYpCi0KLXN0cnVjdCBzX2xtX2RhdGFfaW4gewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQxNl90IGxlbmd0aDsKLSAgICB1aW50MTZfdCBmcmVxdWVuY3k7Ci0gICAgdWludDhfdCBhbnRlbm5hOwotICAgIHVpbnQ4X3QgcmF0ZTsKLSAgICB1aW50OF90IHJjcGk7Ci0gICAgdWludDhfdCBzcTsKLSAgICB1aW50OF90IGRlY3J5cHQ7Ci0gICAgdWludDhfdCByc3NpX3JhdzsKLSAgICB1aW50MzJfdCBjbG9ja1syXTsKLSAgICAvKnVpbnQ4X3QgZGF0YVtdOyovCi19OwotCi11bmlvbiB1X2xtX2RhdGEgewotICAgIHN0cnVjdCBzX2xtX2RhdGFfb3V0IG91dDsKLSAgICBzdHJ1Y3Qgc19sbV9kYXRhX2luIGluOwotfTsKLQotZW51bSB7Ci0gICAgTE1fT0lEX1NFVFVQCT0gMCwKLSAgICBMTV9PSURfU0NBTgkJPSAxLAotICAgIExNX09JRF9UUkFQCQk9IDIsCi0gICAgTE1fT0lEX0VEQ0YJCT0gMywKLSAgICBMTV9PSURfS0VZQ0FDSEUJPSA0LAotICAgIExNX09JRF9QU00JCT0gNiwKLSAgICBMTV9PSURfVFhDQU5DRUwJPSA3LAotICAgIExNX09JRF9UWAkJPSA4LAotICAgIExNX09JRF9CVVJTVAk9IDksCi0gICAgTE1fT0lEX1NUQVRTCT0gMTAsCi0gICAgTE1fT0lEX0xFRAkJPSAxMywKLSAgICBMTV9PSURfVElNRVIJPSAxNSwKLSAgICBMTV9PSURfTkFWCQk9IDIwLAotICAgIExNX09JRF9QQ1MJCT0gMjIsCi0gICAgTE1fT0lEX0JUX0JBTEFOQ0VSICA9IDI4LAotICAgIExNX09JRF9HUk9VUF9BRERSRVNTX1RBQkxFCT0gMzAsCi0gICAgTE1fT0lEX0FSUFRBQkxFICAgICA9IDMxLAotICAgIExNX09JRF9CVF9PUFRJT05TID0gMzUKLX07Ci0KLWVudW0gewotICAgIExNX0ZST05URU5EX1VOS05PV04gPSAwLAotICAgIExNX0ZST05URU5EX0RVRVRURTMsCi0gICAgTE1fRlJPTlRFTkRfRFVFVFRFMiwKLSAgICBMTV9GUk9OVEVORF9GUklTQkVFLAotICAgIExNX0ZST05URU5EX0NST1NTQk9XLAotICAgIExNX0ZST05URU5EX0xPTkdCT1cKLX07Ci0KLQotI2RlZmluZSBJTlZBTElEX0xQRl9CQU5EV0lEVEggICAweGZmZmYKLSNkZWZpbmUgSU5WQUxJRF9PU0NfU1RBUlRfREVMQVkgMHhmZmZmCi0KLXN0cnVjdCBzX2xtb19zZXR1cCB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDhfdCAgbWFjYWRkcls2XTsKLSAgICB1aW50OF90ICBic3NpZFs2XTsKLSAgICB1aW50OF90ICBhbnRlbm5hOwotICAgIHVpbnQ4X3QgIHJ4X2FsaWduOwotICAgIHVpbnQzMl90IHJ4X2J1ZmZlcjsKLSAgICB1aW50MTZfdCByeF9tdHU7Ci0gICAgdWludDE2X3QgZnJvbnRlbmQ7Ci0gICAgdWludDE2X3QgdGltZW91dDsKLSAgICB1aW50MTZfdCB0cnVuY2F0ZTsKLSAgICB1aW50MzJfdCBicmF0ZW1hc2s7Ci0gICAgdWludDhfdCAgc2Jzc19vZmZzZXQ7Ci0gICAgdWludDhfdCAgbWNhc3Rfd2luZG93OwotICAgIHVpbnQ4X3QgIHJ4X3Jzc2lfdGhyZXNob2xkOwotICAgIHVpbnQ4X3QgIHJ4X2VkX3RocmVzaG9sZDsKLSAgICB1aW50MzJfdCByZWZfY2xvY2s7Ci0gICAgdWludDE2X3QgbHBmX2JhbmR3aWR0aDsKLSAgICB1aW50MTZfdCBvc2Nfc3RhcnRfZGVsYXk7Ci19OwotCi0KLXN0cnVjdCBzX2xtb19zY2FuIHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MTZfdCBkd2VsbDsKLSAgICB1aW50OF90IGNoYW5uZWxbMjkyXTsKLSAgICB1aW50MzJfdCBicmF0ZW1hc2s7Ci0gICAgdWludDhfdCAgYWxvZnRbOF07Ci0gICAgdWludDhfdCAgcnNzaWNhbFs4XTsKLX07Ci0KLQotZW51bSB7Ci0gICAgTE1fVFJBUF9TQ0FOID0gMCwKLSAgICBMTV9UUkFQX1RJTUVSLAotICAgIExNX1RSQVBfQkVBQ09OX1RYLAotICAgIExNX1RSQVBfRkFBX1JBRElPX09OLAotICAgIExNX1RSQVBfRkFBX1JBRElPX09GRiwKLSAgICBMTV9UUkFQX1JBREFSLAotICAgIExNX1RSQVBfTk9fQkVBQ09OLAotICAgIExNX1RSQVBfVEJUVCwKLSAgICBMTV9UUkFQX1NDT19FTlRFUiwKLSAgICBMTV9UUkFQX1NDT19FWElUCi19OwotCi1zdHJ1Y3Qgc19sbW9fdHJhcCB7Ci0gICAgdWludDE2X3QgZXZlbnQ7Ci0gICAgdWludDE2X3QgZnJlcXVlbmN5OwotfTsKLQotc3RydWN0IHNfbG1vX3RpbWVyIHsKLSAgICB1aW50MzJfdCBpbnRlcnZhbDsKLX07Ci0KLXN0cnVjdCBzX2xtb19uYXYgewotICAgIHVpbnQzMl90IHBlcmlvZDsKLX07Ci0KLQotc3RydWN0IHNfbG1vX2VkY2ZfcXVldWU7Ci0KLXN0cnVjdCBzX2xtb19lZGNmIHsKLSAgICB1aW50OF90ICBmbGFnczsKLSAgICB1aW50OF90ICBzbG90dGltZTsKLSAgICB1aW50OF90ICBzaWZzOwotICAgIHVpbnQ4X3QgIGVvZnBhZDsKLSAgICBzdHJ1Y3Qgc19sbW9fZWRjZl9xdWV1ZSB7Ci0JICAgIHVpbnQ4X3QgIGFpZnM7Ci0JICAgIHVpbnQ4X3QgIHBhZDA7Ci0JICAgIHVpbnQxNl90IGN3bWluOwotCSAgICB1aW50MTZfdCBjd21heDsKLQkgICAgdWludDE2X3QgdHhvcDsKLSAgICB9IHF1ZXVlc1s4XTsKLSAgICB1aW50OF90ICBtYXBwaW5nWzRdOwotICAgIHVpbnQxNl90IG1heGJ1cnN0OwotICAgIHVpbnQxNl90IHJvdW5kX3RyaXBfZGVsYXk7Ci19OwotCi1zdHJ1Y3Qgc19sbW9fa2V5Y2FjaGUgewotICAgIHVpbnQ4X3QgZW50cnk7Ci0gICAgdWludDhfdCBrZXlpZDsKLSAgICB1aW50OF90IGFkZHJlc3NbNl07Ci0gICAgdWludDhfdCBwYWRbMl07Ci0gICAgdWludDhfdCBrZXl0eXBlOwotICAgIHVpbnQ4X3Qga2V5bGVuOwotICAgIHVpbnQ4X3Qga2V5WzI0XTsKLX07Ci0KLQotc3RydWN0IHNfbG1faW50ZXJ2YWw7Ci0KLXN0cnVjdCBzX2xtb19wc20gewotICAgIHVpbnQxNl90ICAgIGZsYWdzOwotICAgIHVpbnQxNl90ICAgIGFpZDsKLSAgICBzdHJ1Y3Qgc19sbV9pbnRlcnZhbCB7Ci0JICAgIHVpbnQxNl90IGludGVydmFsOwotCSAgICB1aW50MTZfdCBwZXJpb2RzOwotICAgIH0gaW50ZXJ2YWxzWzRdOwotICAgIC8qIHVpbnQxNl90ICAgIHBhZDsgKi8KLSAgICB1aW50OF90ICAgICBiZWFjb25fcmNwaV9za2lwX21heDsKLSAgICB1aW50OF90ICAgICByY3BpX2RlbHRhX3RocmVzaG9sZDsKLSAgICB1aW50OF90ICAgICBucjsKLSAgICB1aW50OF90ICAgICBleGNsdWRlWzFdOwotfTsKLQotI2RlZmluZSBNQ19GSUxURVJfQUREUkVTU19OVU0gICA0Ci0KLXN0cnVjdCBzX2xtb19ncm91cF9hZGRyZXNzX3RhYmxlIHsKLSAgICB1aW50MTZfdCAgICBmaWx0ZXJfZW5hYmxlOwotICAgIHVpbnQxNl90ICAgIG51bV9hZGRyZXNzOwotICAgIHVpbnQ4X3QgICAgIG1hY2FkZHJfbGlzdFtNQ19GSUxURVJfQUREUkVTU19OVU1dWzZdOwotfTsKLQotc3RydWN0IHNfbG1vX3R4Y2FuY2VsIHsKLSAgICB1aW50MzJfdCBhZGRyZXNzWzFdOwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fdHggewotICAgIHVpbnQ4X3QgIGZsYWdzOwotICAgIHVpbnQ4X3QgIHJldHJpZXM7Ci0gICAgdWludDhfdCAgcmNwaTsKLSAgICB1aW50OF90ICBzcTsKLSAgICB1aW50MTZfdCBzZXFjdHJsOwotICAgIHVpbnQ4X3QgIGFudGVubmE7Ci0gICAgdWludDhfdCAgcGFkOwotfTsKLQotc3RydWN0IHNfbG1vX2J1cnN0IHsKLSAgICB1aW50OF90ICBmbGFnczsKLSAgICB1aW50OF90ICBxdWV1ZTsKLSAgICB1aW50OF90ICBiYWNrbG9nOwotICAgIHVpbnQ4X3QgIHBhZDsKLSAgICB1aW50MTZfdCBkdXJhdGlvbnNbMzJdOwotfTsKLQotc3RydWN0IHNfbG1vX3N0YXRzIHsKLSAgICB1aW50MzJfdCB2YWxpZDsKLSAgICB1aW50MzJfdCBmY3M7Ci0gICAgdWludDMyX3QgYWJvcnQ7Ci0gICAgdWludDMyX3QgcGh5YWJvcnQ7Ci0gICAgdWludDMyX3QgcnRzX3N1Y2Nlc3M7Ci0gICAgdWludDMyX3QgcnRzX2ZhaWw7Ci0gICAgdWludDMyX3QgdGltZXN0YW1wOwotICAgIHVpbnQzMl90IHRpbWVfdHg7Ci0gICAgdWludDMyX3Qgbm9pc2VmbG9vcjsKLSAgICB1aW50MzJfdCBzYW1wbGVfbm9pc2VbOF07Ci0gICAgdWludDMyX3Qgc2FtcGxlX2NjYTsKLSAgICB1aW50MzJfdCBzYW1wbGVfdHg7Ci19OwotCi0KLXN0cnVjdCBzX2xtb19sZWQgewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQxNl90IG1hc2tbMl07Ci0gICAgdWludDE2X3QgZGVsYXkvKlsyXSovOwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fYnRfYmFsYW5jZXIgewotICAgIHVpbnQxNl90IHByaW9fdGhyZXNoOwotICAgIHVpbnQxNl90IGFjbF90aHJlc2g7Ci19OwotCi0KLXN0cnVjdCBzX2xtb19hcnBfdGFibGUgewotICAgIHVpbnQxNl90ICAgIGZpbHRlcl9lbmFibGU7Ci0gICAgdWludDMyX3QgICAgaXBhZGRyOwotfTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KLQotI2VuZGlmIC8qIF9fbG1hY19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYwppbmRleCAzZDJhODRjLi5lMTM5ZWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYwppbmRleCA4OTYwZmE5Li4wMGZlMDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKaW5kZXggN2Y5NmJjYS4uMDUxODYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYwpAQCAtMTMzMiw3ICsxMzMyLDYgQEAKICAgICAgICAgZnJlZV9uZXRkZXYocERldmljZS0+ZGV2KTsKICAgICB9CiAKLQlrZnJlZShwRGV2aWNlKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkZXZpY2VfZGlzY29ubmVjdDMuLiBcbiIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZwppbmRleCA5NDA0NjBjLi4xMzI2NzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgVzM1VU5ECiAJdHJpc3RhdGUgIklTODlDMzUgV0xBTiBVU0IgZHJpdmVyIgotCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOICYmIFVTQiAmJiBFWFBFUklNRU5UQUwKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGhpZ2hseSBleHBlcmltZW50YWwgZHJpdmVyIGZvciBXaW5ib25kIFdJRkkgY2FyZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCmluZGV4IDg5NTA3MjQuLjA2NzA4MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYwpAQCAtNTEsMTAgKzUxLDI2IEBACiAJLm5fYml0cmF0ZXMJPSBBUlJBWV9TSVpFKHdic29mdF9yYXRlcyksCiB9OwogCitzdGF0aWMgdm9pZCBoYWxfc2V0X2JlYWNvbl9wZXJpb2Qoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIHUxNiBiZWFjb25fcGVyaW9kKQoreworCXUzMiB0bXA7CisKKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybjsKKworCXBId0RhdGEtPkJlYWNvblBlcmlvZCA9IGJlYWNvbl9wZXJpb2Q7CisJdG1wID0gcEh3RGF0YS0+QmVhY29uUGVyaW9kIDw8IDE2OworCXRtcCB8PSBwSHdEYXRhLT5Qcm9iZURlbGF5OworCVdiMzVSZWdfV3JpdGUocEh3RGF0YSwgMHgwODQ4LCB0bXApOworfQorCiBzdGF0aWMgaW50IHdic29mdF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlwcmludGsoIndic29mdF9hZGQgaW50ZXJmYWNlIGNhbGxlZFxuIik7CisJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJaGFsX3NldF9iZWFjb25fcGVyaW9kKCZwcml2LT5zSHdEYXRhLCBjb25mLT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgzLDEwICs5OSwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTY0IHdic29mdF9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IG1jX2NvdW50LAorCQkJCSAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKK3sKKwlyZXR1cm4gbWNfY291bnQ7Cit9CisKIHN0YXRpYyB2b2lkIHdic29mdF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKIAkJCQkgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQkJICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCisJCQkJICAgIHU2NCBtdWx0aWNhc3QpCiB7CiAJdW5zaWduZWQgaW50IG5ld19mbGFnczsKIApAQCAtOTQsNyArMTE2LDcgQEAKIAogCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpCiAJCW5ld19mbGFncyB8PSBGSUZfUFJPTUlTQ19JTl9CU1M7Ci0JZWxzZSBpZiAoKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSkgfHwgKG1jX2NvdW50ID4gMzIpKQorCWVsc2UgaWYgKCgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHx8IChtdWx0aWNhc3QgPiAzMikpCiAJCW5ld19mbGFncyB8PSBGSUZfQUxMTVVMVEk7CiAKIAlkZXYtPmZsYWdzICY9IH5JRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOwpAQCAtMTM4LDE5ICsxNjAsNiBAQAogCVdiMzVSZWdfV3JpdGUocEh3RGF0YSwgMHgwODI0LCByZWctPk0yNF9NYWNDb250cm9sKTsKIH0KIAotc3RhdGljIHZvaWQgaGFsX3NldF9iZWFjb25fcGVyaW9kKHN0cnVjdCBod19kYXRhICpwSHdEYXRhLCB1MTYgYmVhY29uX3BlcmlvZCkKLXsKLQl1MzIgdG1wOwotCi0JaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQotCQlyZXR1cm47Ci0KLQlwSHdEYXRhLT5CZWFjb25QZXJpb2QgPSBiZWFjb25fcGVyaW9kOwotCXRtcCA9IHBId0RhdGEtPkJlYWNvblBlcmlvZCA8PCAxNjsKLQl0bXAgfD0gcEh3RGF0YS0+UHJvYmVEZWxheTsKLQlXYjM1UmVnX1dyaXRlKHBId0RhdGEsIDB4MDg0OCwgdG1wKTsKLX0KLQogc3RhdGljIHZvaWQKIGhhbF9zZXRfY3VycmVudF9jaGFubmVsX2V4KHN0cnVjdCBod19kYXRhICpwSHdEYXRhLCBDaGFuSW5mbyBjaGFubmVsKQogewpAQCAtMjQ0LDcgKzI1Myw2IEBACiBzdGF0aWMgaW50IHdic29mdF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MzIgY2hhbmdlZCkKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmRldi0+Y29uZjsKIAlDaGFuSW5mbyBjaDsKIAogCXByaW50aygid2Jzb2Z0X2NvbmZpZyBjYWxsZWRcbiIpOwpAQCAtMjU0LDcgKzI2Miw2IEBACiAJY2guQ2hhbk5vID0gMTsKIAogCWhhbF9zZXRfY3VycmVudF9jaGFubmVsKCZwcml2LT5zSHdEYXRhLCBjaCk7Ci0JaGFsX3NldF9iZWFjb25fcGVyaW9kKCZwcml2LT5zSHdEYXRhLCBjb25mLT5iZWFjb25faW50KTsKIAloYWxfc2V0X2FjY2VwdF9icm9hZGNhc3QoJnByaXYtPnNId0RhdGEsIDEpOwogCWhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzKCZwcml2LT5zSHdEYXRhLCAxKTsKIAloYWxfc2V0X2FjY2VwdF9tdWx0aWNhc3QoJnByaXYtPnNId0RhdGEsIDEpOwpAQCAtMjc3LDYgKzI4NCw3IEBACiAJLmFkZF9pbnRlcmZhY2UJCT0gd2Jzb2Z0X2FkZF9pbnRlcmZhY2UsCiAJLnJlbW92ZV9pbnRlcmZhY2UJPSB3YnNvZnRfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnCQkJPSB3YnNvZnRfY29uZmlnLAorCS5wcmVwYXJlX211bHRpY2FzdAk9IHdic29mdF9wcmVwYXJlX211bHRpY2FzdCwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHdic29mdF9jb25maWd1cmVfZmlsdGVyLAogCS5nZXRfc3RhdHMJCT0gd2Jzb2Z0X2dldF9zdGF0cywKIAkuZ2V0X3R4X3N0YXRzCQk9IHdic29mdF9nZXRfdHhfc3RhdHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwppbmRleCA5OTU5YjY1Li5mNDQyOTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFJJU00yX1VTQgogCXRyaXN0YXRlICJQcmlzbTIuNS8zIFVTQiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBXTEFOXzgwMjExICYmIFVTQiAmJiBXSVJFTEVTU19FWFQKKwlkZXBlbmRzIG9uIFdMQU4gJiYgVVNCICYmIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIHdsYW4tbmcgcHJpc20gMi41LzMgVVNCIGRyaXZlciBmb3IgYSB3aWRlIHJhbmdlIG9mCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jCmluZGV4IDRlODNjMjkuLjZmOGQ4ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jCkBAIC0xODAsMTUgKzE4MCwxNSBAQAogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBUSEVSTUFMX1RSSVBfQ1JJVElDQUw6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImNyaXRpY2FsIik7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImNyaXRpY2FsXG4iKTsKIAljYXNlIFRIRVJNQUxfVFJJUF9IT1Q6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImhvdCIpOworCQlyZXR1cm4gc3ByaW50ZihidWYsICJob3RcbiIpOwogCWNhc2UgVEhFUk1BTF9UUklQX1BBU1NJVkU6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBhc3NpdmUiKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAicGFzc2l2ZVxuIik7CiAJY2FzZSBUSEVSTUFMX1RSSVBfQUNUSVZFOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJhY3RpdmUiKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiYWN0aXZlXG4iKTsKIAlkZWZhdWx0OgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duIik7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInVua25vd25cbiIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvLmMgYi9kcml2ZXJzL3Vpby91aW8uYwppbmRleCAwM2VmYjA2NS4uZTk0MTM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvLmMKKysrIGIvZHJpdmVycy91aW8vdWlvLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KQEAgLTY1OCw3ICs2NTksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVpb192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVpb192bV9vcHMgPSB7CiAJLm9wZW4gPSB1aW9fdm1hX29wZW4sCiAJLmNsb3NlID0gdWlvX3ZtYV9jbG9zZSwKIAkuZmF1bHQgPSB1aW9fdm1hX2ZhdWx0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMgYi9kcml2ZXJzL3Vpby91aW9fcGRydl9nZW5pcnEuYwppbmRleCAwMjM0N2M1Li5hYTUzZGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW9fcGRydl9nZW5pcnEuYworKysgYi9kcml2ZXJzL3Vpby91aW9fcGRydl9nZW5pcnEuYwpAQCAtMTc4LDYgKzE3OCw3IEBACiAJcmV0dXJuIDA7CiAgYmFkMToKIAlrZnJlZShwcml2KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAgYmFkMDoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IGUzODYxYjIuLmU0ZWNhNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTYwOSw5ICs2MDksOSBAQAogCiAJYWNtLT50aHJvdHRsZSA9IDA7CiAKLQl0YXNrbGV0X3NjaGVkdWxlKCZhY20tPnVyYl90YXNrKTsKIAlzZXRfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJmFjbS0+cG9ydC5mbGFncyk7CiAJcnYgPSB0dHlfcG9ydF9ibG9ja190aWxfcmVhZHkoJmFjbS0+cG9ydCwgdHR5LCBmaWxwKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZhY20tPnVyYl90YXNrKTsKIGRvbmU6CiAJbXV0ZXhfdW5sb2NrKCZhY20tPm11dGV4KTsKIGVycl9vdXQ6CkBAIC02ODYsMTUgKzY4NiwyMSBAQAogCiAJLyogUGVyZm9ybSB0aGUgY2xvc2luZyBwcm9jZXNzIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBkbyB0aGUgaGFyZHdhcmUKIAkgICBzaHV0ZG93biAqLwotCWlmICghYWNtIHx8IHR0eV9wb3J0X2Nsb3NlX3N0YXJ0KCZhY20tPnBvcnQsIHR0eSwgZmlscCkgPT0gMCkKKwlpZiAoIWFjbSkKIAkJcmV0dXJuOworCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydCgmYWNtLT5wb3J0LCB0dHksIGZpbHApID09IDApIHsKKwkJbXV0ZXhfbG9jaygmb3Blbl9tdXRleCk7CisJCWlmICghYWNtLT5kZXYpIHsKKwkJCXR0eV9wb3J0X3R0eV9zZXQoJmFjbS0+cG9ydCwgTlVMTCk7CisJCQlhY21fdHR5X3VucmVnaXN0ZXIoYWNtKTsKKwkJCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCQl9CisJCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CisJCXJldHVybjsKKwl9CiAJYWNtX3BvcnRfZG93bihhY20sIDApOwogCXR0eV9wb3J0X2Nsb3NlX2VuZCgmYWNtLT5wb3J0LCB0dHkpOwotCW11dGV4X2xvY2soJm9wZW5fbXV0ZXgpOwogCXR0eV9wb3J0X3R0eV9zZXQoJmFjbS0+cG9ydCwgTlVMTCk7Ci0JaWYgKCFhY20tPmRldikKLQkJYWNtX3R0eV91bnJlZ2lzdGVyKGFjbSk7Ci0JbXV0ZXhfdW5sb2NrKCZvcGVuX211dGV4KTsKIH0KIAogc3RhdGljIGludCBhY21fdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCmluZGV4IDMzM2VlMDIuLjI0NzNjZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCkBAIC0zOSw3ICszOSw3IEBACiAjZGVmaW5lIFVTQlRNQ19TSVpFX0lPQlVGRkVSCTIwNDgKIAogLyogRGVmYXVsdCBVU0IgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSAqLwotI2RlZmluZSBVU0JUTUNfVElNRU9VVAkJMTAKKyNkZWZpbmUgVVNCVE1DX1RJTUVPVVQJCTUwMDAKIAogLyoKICAqIE1heGltdW0gbnVtYmVyIG9mIHJlYWQgY3ljbGVzIHRvIGVtcHR5IGJ1bGsgaW4gZW5kcG9pbnQgZHVyaW5nIENMRUFSIGFuZApAQCAtOTkzLDcgKzk5Myw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IHVzYnRtY19yZWFkLAogCS53cml0ZQkJPSB1c2J0bWNfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IDMzMzUxMzEuLmExOGUzYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0yMjMsNiArMjIzLDcgQEAKIGNvbmZpZyBVU0JfR0FER0VUX1BYQTI1WAogCWJvb2xlYW4gIlBYQSAyNXggb3IgSVhQIDR4eCIKIAlkZXBlbmRzIG9uIChBUkNIX1BYQSAmJiBQWEEyNXgpIHx8IEFSQ0hfSVhQNFhYCisJc2VsZWN0IFVTQl9PVEdfVVRJTFMKIAloZWxwCiAJICAgSW50ZWwncyBQWEEgMjV4IHNlcmllcyBYU2NhbGUgQVJNLTVURSBwcm9jZXNzb3JzIGluY2x1ZGUKIAkgICBhbiBpbnRlZ3JhdGVkIGZ1bGwgc3BlZWQgVVNCIDEuMSBkZXZpY2UgY29udHJvbGxlci4gIFRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwppbmRleCBmMzdkZTI4Li4xNjdjYjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwpAQCAtNjEsMTEgKzYxLDYgQEAKICAqIHNpbXBsZXIsIE1pY3Jvc29mdCBwdXNoZXMgdGhlaXIgb3duIGFwcHJvYWNoOiBSTkRJUy4gIFRoZSBwdWJsaXNoZWQKICAqIFJORElTIHNwZWNzIGFyZSBhbWJpZ3VvdXMgYW5kIGFwcGVhciB0byBiZSBpbmNvbXBsZXRlLCBhbmQgYXJlIGFsc28KICAqIG5lZWRsZXNzbHkgY29tcGxleC4gIFRoZXkgYm9ycm93IG1vcmUgZnJvbSBDREMgQUNNIHRoYW4gQ0RDIEVDTS4KLSAqCi0gKiBXaGlsZSBDREMgRUNNLCBDREMgU3Vic2V0LCBhbmQgUk5ESVMgYXJlIGRlc2lnbmVkIHRvIGV4dGVuZCB0aGUgZXRoZXJuZXQKLSAqIGludGVyZmFjZSB0byB0aGUgdGFyZ2V0LCBDREMgRUVNIHdhcyBkZXNpZ25lZCB0byB1c2UgZXRoZXJuZXQgb3ZlciB0aGUgVVNCCi0gKiBsaW5rIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRhcmdldC4gIENEQyBFRU0gaXMgaW1wbGVtZW50ZWQgYXMgYW4gYWx0ZXJuYXRpdmUKLSAqIHRvIHRob3NlIG90aGVyIHByb3RvY29scyB3aGVuIHRoYXQgY29tbXVuaWNhdGlvbiBtb2RlbCBpcyBtb3JlIGFwcHJvcHJpYXRlCiAgKi8KIAogI2RlZmluZSBEUklWRVJfREVTQwkJIkV0aGVybmV0IEdhZGdldCIKQEAgLTE1Nyw4ICsxNTIsOCBAQAogI2RlZmluZSBSTkRJU19QUk9EVUNUX05VTQkweGE0YTIJLyogRXRoZXJuZXQvUk5ESVMgR2FkZ2V0ICovCiAKIC8qIEZvciBFRU0gZ2FkZ2V0cyAqLwotI2RlZmluZSBFRU1fVkVORE9SX05VTQkweDA1MjUJLyogSU5WQUxJRCAtIE5FRURTIFRPIEJFIEFMTE9DQVRFRCAqLwotI2RlZmluZSBFRU1fUFJPRFVDVF9OVU0JMHhhNGExCS8qIElOVkFMSUQgLSBORUVEUyBUTyBCRSBBTExPQ0FURUQgKi8KKyNkZWZpbmUgRUVNX1ZFTkRPUl9OVU0JCTB4MWQ2YgkvKiBMaW51eCBGb3VuZGF0aW9uICovCisjZGVmaW5lIEVFTV9QUk9EVUNUX05VTQkJMHgwMTAyCS8qIEVFTSBHYWRnZXQgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCmluZGV4IDQyYTc0YjguLmZhM2QxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKQEAgLTIxMzksNyArMjEzOSw3IEBACiBzdGF0aWMgdm9pZCBmc2xfdWRjX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCWNvbXBsZXRlKHVkY19jb250cm9sbGVyLT5kb25lKTsKLQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHVkY19jb250cm9sbGVyLT5lcF9xaF9zaXplLAorCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+cGFyZW50LCB1ZGNfY29udHJvbGxlci0+ZXBfcWhfc2l6ZSwKIAkJCXVkY19jb250cm9sbGVyLT5lcF9xaCwgdWRjX2NvbnRyb2xsZXItPmVwX3FoX2RtYSk7CiAJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKaW5kZXggYzUyYTY4MS4uMDFlZTBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCkBAIC0xNDAyLDcgKzE0MDIsOCBAQAogCXN0cnVjdCBjbGsgKmNsazsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJaW50IHJldCA9IDA7Ci0JaW50IGksIHJlc19zaXplOworCWludCBpOworCXJlc291cmNlX3NpemVfdCByZXNfc2l6ZTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKQEAgLTE0MTYsNyArMTQxNyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJlc19zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwlyZXNfc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNfc2l6ZSwgcmVzLT5uYW1lKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhbGxvY2F0ZSAlZCBieXRlcyBhdCAlZCBhZGRyZXNzXG4iLAogCQkJcmVzX3NpemUsIHJlcy0+c3RhcnQpOwpAQCAtMTUyNyw4ICsxNTI4LDcgQEAKIAljbGtfZGlzYWJsZShpbXhfdXNiLT5jbGspOwogCWlvdW5tYXAoaW14X3VzYi0+YmFzZSk7CiAKLQlyZWxlYXNlX21lbV9yZWdpb24oaW14X3VzYi0+cmVzLT5zdGFydCwKLQkJaW14X3VzYi0+cmVzLT5lbmQgLSBpbXhfdXNiLT5yZXMtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGlteF91c2ItPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoaW14X3VzYi0+cmVzKSk7CiAKIAlpZiAocGRhdGEtPmV4aXQpCiAJCXBkYXRhLT5leGl0KCZwZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwppbmRleCBjNDQzNjdmLi5iZjBmNjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwppbmRleCAyOTUwMDE1Li4yZDg2N2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKQEAgLTg3NSw3ICs4NzUsNyBAQAogfQogCiAvKiB1c2VkIGFmdGVyIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByaW50ZXJfaW9fb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByaW50ZXJfaW9fb3BlcmF0aW9ucyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkub3BlbiA9CQlwcmludGVyX29wZW4sCiAJLnJlYWQgPQkJcHJpbnRlcl9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5oCmluZGV4IDAzMDg3ZTcuLjlhNTM3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmgKQEAgLTEzMSwzMSArMTMxLDQ4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByOGE2NjU5N19yZWFkX2ZpZm8oc3RydWN0IHI4YTY2NTk3ICpyOGE2NjU5NywKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdTE2ICpidWYsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJCSAgICAgIGludCBsZW4pCiB7CisJdW5zaWduZWQgbG9uZyBmaWZvYWRkciA9IHI4YTY2NTk3LT5yZWcgKyBvZmZzZXQ7CisJdW5zaWduZWQgaW50IGRhdGE7CisJaW50IGk7CisKIAlpZiAocjhhNjY1OTctPnBkYXRhLT5vbl9jaGlwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmlmb2FkZHIgPSByOGE2NjU5Ny0+cmVnICsgb2Zmc2V0OwotCQl1bnNpZ25lZCBsb25nIGNvdW50OwotCQl1bmlvbiB7Ci0JCQl1bnNpZ25lZCBsb25nIGR3b3JkOwotCQkJdW5zaWduZWQgY2hhciBieXRlWzRdOwotCQl9IGRhdGE7Ci0JCXVuc2lnbmVkIGNoYXIgKnBiOwotCQlpbnQgaTsKKwkJLyogMzItYml0IGFjY2Vzc2VzIGZvciBvbl9jaGlwIGNvbnRyb2xsZXJzICovCiAKLQkJY291bnQgPSBsZW4gLyA0OwotCQlpbnNsKGZpZm9hZGRyLCBidWYsIGNvdW50KTsKKwkJLyogYWxpZ25lZCBidWYgY2FzZSAqLworCQlpZiAobGVuID49IDQgJiYgISgodW5zaWduZWQgbG9uZylidWYgJiAweDAzKSkgeworCQkJaW5zbChmaWZvYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJCWJ1ZiArPSBsZW4gJiB+MHgwMzsKKwkJCWxlbiAmPSAweDAzOworCQl9CiAKLQkJaWYgKGxlbiAmIDB4MDAwMDAwMDMpIHsKLQkJCWRhdGEuZHdvcmQgPSBpbmwoZmlmb2FkZHIpOwotCQkJcGIgPSAodW5zaWduZWQgY2hhciAqKWJ1ZiArIGNvdW50ICogNDsKLQkJCWZvciAoaSA9IDA7IGkgPCAobGVuICYgMHgwMDAwMDAwMyk7IGkrKykKLQkJCQlwYltpXSA9IGRhdGEuYnl0ZVtpXTsKKwkJLyogdW5hbGlnbmVkIGJ1ZiBjYXNlICovCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJaWYgKCEoaSAmIDB4MDMpKQorCQkJCWRhdGEgPSBpbmwoZmlmb2FkZHIpOworCisJCQlidWZbaV0gPSAoZGF0YSA+PiAoKGkgJiAweDAzKSAqIDgpKSAmIDB4ZmY7CiAJCX0KIAl9IGVsc2UgewotCQlsZW4gPSAobGVuICsgMSkgLyAyOwotCQlpbnN3KHI4YTY2NTk3LT5yZWcgKyBvZmZzZXQsIGJ1ZiwgbGVuKTsKKwkJLyogMTYtYml0IGFjY2Vzc2VzIGZvciBleHRlcm5hbCBjb250cm9sbGVycyAqLworCisJCS8qIGFsaWduZWQgYnVmIGNhc2UgKi8KKwkJaWYgKGxlbiA+PSAyICYmICEoKHVuc2lnbmVkIGxvbmcpYnVmICYgMHgwMSkpIHsKKwkJCWluc3coZmlmb2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCQlidWYgKz0gbGVuICYgfjB4MDE7CisJCQlsZW4gJj0gMHgwMTsKKwkJfQorCisJCS8qIHVuYWxpZ25lZCBidWYgY2FzZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCWlmICghKGkgJiAweDAxKSkKKwkJCQlkYXRhID0gaW53KGZpZm9hZGRyKTsKKworCQkJYnVmW2ldID0gKGRhdGEgPj4gKChpICYgMHgwMSkgKiA4KSkgJiAweGZmOworCQl9CiAJfQogfQogCkBAIC0xNjYsMzggKzE4Myw0MCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcjhhNjY1OTdfd3JpdGVfZmlmbyhzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3LAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdTE2ICpidWYsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCiAJCQkJICAgICAgIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBmaWZvYWRkciA9IHI4YTY2NTk3LT5yZWcgKyBvZmZzZXQ7CisJaW50IGFkaiA9IDA7CisJaW50IGk7CiAKIAlpZiAocjhhNjY1OTctPnBkYXRhLT5vbl9jaGlwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0JCXVuc2lnbmVkIGNoYXIgKnBiOwotCQlpbnQgaTsKLQotCQljb3VudCA9IGxlbiAvIDQ7Ci0JCW91dHNsKGZpZm9hZGRyLCBidWYsIGNvdW50KTsKLQotCQlpZiAobGVuICYgMHgwMDAwMDAwMykgewotCQkJcGIgPSAodW5zaWduZWQgY2hhciAqKWJ1ZiArIGNvdW50ICogNDsKLQkJCWZvciAoaSA9IDA7IGkgPCAobGVuICYgMHgwMDAwMDAwMyk7IGkrKykgewotCQkJCWlmIChyOGE2NjU5N19yZWFkKHI4YTY2NTk3LCBDRklGT1NFTCkgJiBCSUdFTkQpCi0JCQkJCW91dGIocGJbaV0sIGZpZm9hZGRyICsgaSk7Ci0JCQkJZWxzZQotCQkJCQlvdXRiKHBiW2ldLCBmaWZvYWRkciArIDMgLSBpKTsKLQkJCX0KKwkJLyogMzItYml0IGFjY2VzcyBvbmx5IGlmIGJ1ZiBpcyAzMi1iaXQgYWxpZ25lZCAqLworCQlpZiAobGVuID49IDQgJiYgISgodW5zaWduZWQgbG9uZylidWYgJiAweDAzKSkgeworCQkJb3V0c2woZmlmb2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCQlidWYgKz0gbGVuICYgfjB4MDM7CisJCQlsZW4gJj0gMHgwMzsKIAkJfQogCX0gZWxzZSB7Ci0JCWludCBvZGQgPSBsZW4gJiAweDAwMDE7Ci0KLQkJbGVuID0gbGVuIC8gMjsKLQkJb3V0c3coZmlmb2FkZHIsIGJ1ZiwgbGVuKTsKLQkJaWYgKHVubGlrZWx5KG9kZCkpIHsKLQkJCWJ1ZiA9ICZidWZbbGVuXTsKLQkJCW91dGIoKHVuc2lnbmVkIGNoYXIpKmJ1ZiwgZmlmb2FkZHIpOworCQkvKiAxNi1iaXQgYWNjZXNzIG9ubHkgaWYgYnVmIGlzIDE2LWJpdCBhbGlnbmVkICovCisJCWlmIChsZW4gPj0gMiAmJiAhKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIDB4MDEpKSB7CisJCQlvdXRzdyhmaWZvYWRkciwgYnVmLCBsZW4gLyAyKTsKKwkJCWJ1ZiArPSBsZW4gJiB+MHgwMTsKKwkJCWxlbiAmPSAweDAxOwogCQl9CiAJfQorCisJLyogYWRqdXN0IGZpZm8gYWRkcmVzcyBpbiB0aGUgbGl0dGxlIGVuZGlhbiBjYXNlICovCisJaWYgKCEocjhhNjY1OTdfcmVhZChyOGE2NjU5NywgQ0ZJRk9TRUwpICYgQklHRU5EKSkgeworCQlpZiAocjhhNjY1OTctPnBkYXRhLT5vbl9jaGlwKQorCQkJYWRqID0gMHgwMzsgLyogMzItYml0IHdpZGUgKi8KKwkJZWxzZQorCQkJYWRqID0gMHgwMTsgLyogMTYtYml0IHdpZGUgKi8KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCW91dGIoYnVmW2ldLCBmaWZvYWRkciArIGFkaiAtIChpICYgYWRqKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByOGE2NjU5N19tZGZ5KHN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCmluZGV4IDNlYTA1OTMuLmIyNWNkZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCkBAIC0xNDAwLDYgKzE0MDAsMTAgQEAKIAkJZ290byBmYWlsOwogCX0KIAorCXBlcmlvZCA9IHVyYi0+aW50ZXJ2YWw7CisJaWYgKCFzdHJlYW0tPmhpZ2hzcGVlZCkKKwkJcGVyaW9kIDw8PSAzOworCiAJbm93ID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpICUgbW9kOwogCiAJLyogd2hlbidzIHRoZSBsYXN0IHVmcmFtZSB0aGlzIHVyYiBjb3VsZCBzdGFydD8gKi8KQEAgLTE0MTcsMTQgKzE0MjEsMTUgQEAKIAogCQkvKiBGZWxsIGJlaGluZCAoYnkgdXAgdG8gdHdpY2UgdGhlIHNsb3AgYW1vdW50KT8gKi8KIAkJaWYgKHN0YXJ0ID49IG1heCAtIDIgKiA4ICogU0NIRURVTEVfU0xPUCkKLQkJCXN0YXJ0ICs9IHN0cmVhbS0+aW50ZXJ2YWwgKiBESVZfUk9VTkRfVVAoCi0JCQkJCW1heCAtIHN0YXJ0LCBzdHJlYW0tPmludGVydmFsKSAtIG1vZDsKKwkJCXN0YXJ0ICs9IHBlcmlvZCAqIERJVl9ST1VORF9VUCgKKwkJCQkJbWF4IC0gc3RhcnQsIHBlcmlvZCkgLSBtb2Q7CiAKIAkJLyogVHJpZWQgdG8gc2NoZWR1bGUgdG9vIGZhciBpbnRvIHRoZSBmdXR1cmU/ICovCiAJCWlmICh1bmxpa2VseSgoc3RhcnQgKyBzY2hlZC0+c3BhbikgPj0gbWF4KSkgewogCQkJc3RhdHVzID0gLUVGQklHOwogCQkJZ290byBmYWlsOwogCQl9CisJCXN0cmVhbS0+bmV4dF91ZnJhbWUgPSBzdGFydDsKIAkJZ290byByZWFkeTsKIAl9CiAKQEAgLTE0NDAsMTAgKzE0NDUsNiBAQAogCiAJLyogTk9URTogIGFzc3VtZXMgVVJCX0lTT19BU0FQLCB0byBsaW1pdCBjb21wbGV4aXR5L2J1Z3MgKi8KIAotCXBlcmlvZCA9IHVyYi0+aW50ZXJ2YWw7Ci0JaWYgKCFzdHJlYW0tPmhpZ2hzcGVlZCkKLQkJcGVyaW9kIDw8PSAzOwotCiAJLyogZmluZCBhIHVmcmFtZSBzbG90IHdpdGggZW5vdWdoIGJhbmR3aWR0aCAqLwogCWZvciAoOyBzdGFydCA8IChzdHJlYW0tPm5leHRfdWZyYW1lICsgcGVyaW9kKTsgc3RhcnQrKykgewogCQlpbnQJCWVub3VnaF9zcGFjZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwppbmRleCBlMzVkODI4Li41Yzc3NGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCkBAIC0yMjg0LDEwICsyMjg0LDEwIEBACiAJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJJU1AxMzYyIE1lbW9yeSB1c2FnZTpcbiIpOwogCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBJU1RMOiAgICAyICogJTRkOiAgICAgJTRkIEAgJCUwNHg6JCUwNHhcbiIsCiAJCSBpc3RsX3NpemUgLyAyLCBpc3RsX3NpemUsIDAsIGlzdGxfc2l6ZSAvIDIpOwotCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBJTlRMOiAlNGQgKiAoJTN1KzgpOiAgJTRkIEAgJCUwNHhcbiIsCisJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIgIElOVEw6ICU0ZCAqICglM2x1KzgpOiAgJTRkIEAgJCUwNHhcbiIsCiAJCSBJU1AxMzYyX0lOVExfQlVGRkVSUywgaW50bF9ibGtzaXplIC0gUFREX0hFQURFUl9TSVpFLAogCQkgaW50bF9zaXplLCBpc3RsX3NpemUpOwotCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBBVEwgOiAlNGQgKiAoJTN1KzgpOiAgJTRkIEAgJCUwNHhcbiIsCisJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIgIEFUTCA6ICU0ZCAqICglM2x1KzgpOiAgJTRkIEAgJCUwNHhcbiIsCiAJCSBhdGxfYnVmZmVycywgYXRsX2Jsa3NpemUgLSBQVERfSEVBREVSX1NJWkUsCiAJCSBhdGxfc2l6ZSwgaXN0bF9zaXplICsgaW50bF9zaXplKTsKIAlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgVVNFRC9GUkVFOiAgICU0ZCAgICAgICU0ZFxuIiwgdG90YWwsCkBAIC0yNjc3LDEyICsyNjc3LDEyIEBACiAJREJHKDAsICIlczogUmVtb3ZpbmcgSENEXG4iLCBfX2Z1bmNfXyk7CiAJdXNiX3JlbW92ZV9oY2QoaGNkKTsKIAotCURCRygwLCAiJXM6IFVubWFwcGluZyBkYXRhX3JlZyBAICUwOHhcbiIsIF9fZnVuY19fLAotCSAgICAodTMyKWlzcDEzNjJfaGNkLT5kYXRhX3JlZyk7CisJREJHKDAsICIlczogVW5tYXBwaW5nIGRhdGFfcmVnIEAgJXBcbiIsIF9fZnVuY19fLAorCSAgICBpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOwogCWlvdW5tYXAoaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKIAotCURCRygwLCAiJXM6IFVubWFwcGluZyBhZGRyX3JlZyBAICUwOHhcbiIsIF9fZnVuY19fLAotCSAgICAodTMyKWlzcDEzNjJfaGNkLT5hZGRyX3JlZyk7CisJREJHKDAsICIlczogVW5tYXBwaW5nIGFkZHJfcmVnIEAgJXBcbiIsIF9fZnVuY19fLAorCSAgICBpc3AxMzYyX2hjZC0+YWRkcl9yZWcpOwogCWlvdW5tYXAoaXNwMTM2Ml9oY2QtPmFkZHJfcmVnKTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CkBAIC0yODEwLDE2ICsyODEwLDE2IEBACiAJcmV0dXJuIDA7CiAKICBlcnI2OgotCURCRygwLCAiJXM6IEZyZWVpbmcgZGV2ICUwOHhcbiIsIF9fZnVuY19fLCAodTMyKWlzcDEzNjJfaGNkKTsKKwlEQkcoMCwgIiVzOiBGcmVlaW5nIGRldiAlcFxuIiwgX19mdW5jX18sIGlzcDEzNjJfaGNkKTsKIAl1c2JfcHV0X2hjZChoY2QpOwogIGVycjU6Ci0JREJHKDAsICIlczogVW5tYXBwaW5nIGRhdGFfcmVnIEAgJTA4eFxuIiwgX19mdW5jX18sICh1MzIpZGF0YV9yZWcpOworCURCRygwLCAiJXM6IFVubWFwcGluZyBkYXRhX3JlZyBAICVwXG4iLCBfX2Z1bmNfXywgZGF0YV9yZWcpOwogCWlvdW5tYXAoZGF0YV9yZWcpOwogIGVycjQ6CiAJREJHKDAsICIlczogUmVsZWFzaW5nIG1lbSByZWdpb24gJTA4bHhcbiIsIF9fZnVuY19fLCAobG9uZyB1bnNpZ25lZCBpbnQpZGF0YS0+c3RhcnQpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihkYXRhLT5zdGFydCwgcmVzb3VyY2VfbGVuKGRhdGEpKTsKICBlcnIzOgotCURCRygwLCAiJXM6IFVubWFwcGluZyBhZGRyX3JlZyBAICUwOHhcbiIsIF9fZnVuY19fLCAodTMyKWFkZHJfcmVnKTsKKwlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgYWRkcl9yZWcgQCAlcFxuIiwgX19mdW5jX18sIGFkZHJfcmVnKTsKIAlpb3VubWFwKGFkZHJfcmVnKTsKICBlcnIyOgogCURCRygwLCAiJXM6IFJlbGVhc2luZyBtZW0gcmVnaW9uICUwOGx4XG4iLCBfX2Z1bmNfXywgKGxvbmcgdW5zaWduZWQgaW50KWFkZHItPnN0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLmgKaW5kZXggZmU2MGY2Mi4uMWEyNTNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLmgKQEAgLTU4MCw3ICs1ODAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgQUxJR05TVEFUKHN0cnVjdCBpc3AxMzYyX2hjZCAqaXNwMTM2Ml9oY2QsIHZvaWQgKnB0cikKIHsKLQl1bnNpZ25lZCBwID0gKHVuc2lnbmVkKXB0cjsKKwl1bnNpZ25lZCBsb25nIHAgPSAodW5zaWduZWQgbG9uZylwdHI7CiAJaWYgKCEocCAmIDB4ZikpCiAJCWlzcDEzNjJfaGNkLT5zdGF0MTYrKzsKIAllbHNlIGlmICghKHAgJiAweDcpKQpAQCAtNzcwLDcgKzc3MCw3IEBACiAJaWYgKCFsZW4pCiAJCXJldHVybjsKIAotCWlmICgodW5zaWduZWQpZHAgJiAweDEpIHsKKwlpZiAoKHVuc2lnbmVkIGxvbmcpZHAgJiAweDEpIHsKIAkJLyogbm90IGFsaWduZWQgKi8KIAkJZm9yICg7IGxlbiA+IDE7IGxlbiAtPSAyKSB7CiAJCQlkYXRhID0gKmRwKys7CkBAIC05NjIsOCArOTYyLDggQEAKIAogCWlzcDEzNjJfd3JpdGVfZGlyYWRkcihpc3AxMzYyX2hjZCwgb2Zmc2V0LCBsZW4pOwogCi0JREJHKDMsICIlczogUmVhZGluZyAlZCBieXRlIGZyb20gYnVmZmVyIEAlMDR4IHRvIG1lbW9yeSBAICUwOHhcbiIsIF9fZnVuY19fLAotCSAgICBsZW4sIG9mZnNldCwgKHUzMilidWYpOworCURCRygzLCAiJXM6IFJlYWRpbmcgJWQgYnl0ZSBmcm9tIGJ1ZmZlciBAJTA0eCB0byBtZW1vcnkgQCAlcFxuIiwKKwkgICAgX19mdW5jX18sIGxlbiwgb2Zmc2V0LCBidWYpOwogCiAJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCwgSEN1UElOVF9FT1QpOwogCV9XQVJOX09OKChpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9FT1QpKTsKQEAgLTk4Miw4ICs5ODIsOCBAQAogCiAJaXNwMTM2Ml93cml0ZV9kaXJhZGRyKGlzcDEzNjJfaGNkLCBvZmZzZXQsIGxlbik7CiAKLQlEQkcoMywgIiVzOiBXcml0aW5nICVkIGJ5dGUgdG8gYnVmZmVyIEAlMDR4IGZyb20gbWVtb3J5IEAgJTA4eFxuIiwgX19mdW5jX18sCi0JICAgIGxlbiwgb2Zmc2V0LCAodTMyKWJ1Zik7CisJREJHKDMsICIlczogV3JpdGluZyAlZCBieXRlIHRvIGJ1ZmZlciBAJTA0eCBmcm9tIG1lbW9yeSBAICVwXG4iLAorCSAgICBfX2Z1bmNfXywgbGVuLCBvZmZzZXQsIGJ1Zik7CiAKIAlpc3AxMzYyX3dyaXRlX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5ULCBIQ3VQSU5UX0VPVCk7CiAJX1dBUk5fT04oKGlzcDEzNjJfcmVhZF9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCkgJiBIQ3VQSU5UX0VPVCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDc4YmI3NzEuLjI0ZWI3NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTg3LDYgKzg3LDcgQEAKICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgdm9pZCBxdWlya19hbWRfcGxsKGludCBzdGF0ZSk7CiBzdGF0aWMgdm9pZCBhbWRfaXNvX2Rldl9wdXQodm9pZCk7CitzdGF0aWMgdm9pZCBzYjgwMF9wcmVmZXRjaChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBvbik7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHF1aXJrX2FtZF9wbGwoaW50IHN0YXRlKQogewpAQCAtOTYsNiArOTcsMTAgQEAKIHsKIAlyZXR1cm47CiB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2I4MDBfcHJlZmV0Y2goc3RydWN0IG9oY2lfaGNkICpvaGNpLCBpbnQgb24pCit7CisJcmV0dXJuOworfQogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCmluZGV4IGQyYmEwNGQuLmI4YTExNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKQEAgLTE3Nyw2ICsxNzcsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShhbWRfc21idXNfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOworCisJLyogU0I4MDAgbmVlZHMgcHJlLWZldGNoIGZpeCAqLworCWlmICgocmV2ID49IDB4NDApICYmIChyZXYgPD0gMHg0ZikpIHsKKwkJb2hjaS0+ZmxhZ3MgfD0gT0hDSV9RVUlSS19BTURfUFJFRkVUQ0g7CisJCW9oY2lfZGJnKG9oY2ksICJlbmFibGVkIEFNRCBwcmVmZXRjaCBxdWlya1xuIik7CisJfQorCiAJaWYgKChyZXYgPiAweDNiKSB8fCAocmV2IDwgMHgzMCkpIHsKIAkJcGNpX2Rldl9wdXQoYW1kX3NtYnVzX2Rldik7CiAJCWFtZF9zbWJ1c19kZXYgPSBOVUxMOwpAQCAtMjYyLDYgKzI2OSwxOSBAQAogCiB9CiAKK3N0YXRpYyB2b2lkIHNiODAwX3ByZWZldGNoKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgaW50IG9uKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXUxNiBtaXNjOworCisJcGRldiA9IHRvX3BjaV9kZXYob2hjaV90b19oY2Qob2hjaSktPnNlbGYuY29udHJvbGxlcik7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHg1MCwgJm1pc2MpOworCWlmIChvbiA9PSAwKQorCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgMHg1MCwgbWlzYyAmIDB4ZmNmZik7CisJZWxzZQorCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgMHg1MCwgbWlzYyB8IDB4MDMwMCk7Cit9CisKIC8qIExpc3Qgb2YgcXVpcmtzIGZvciBPSENJICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb2hjaV9wY2lfcXVpcmtzW10gPSB7CiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCmluZGV4IGI1Mjk0YTkuLmYxYzA2MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKQEAgLTQ4MSwzOCArNDgxLDQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZglDT05GSUdfUE0KLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBweGEyN3hfb2hjaSAqb2hjaSA9IHRvX3B4YTI3eF9vaGNpKGhjZCk7CiAKIAlpZiAodGltZV9iZWZvcmUoamlmZmllcywgb2hjaS0+b2hjaS5uZXh0X3N0YXRlY2hhbmdlKSkKIAkJbXNsZWVwKDUpOwogCW9oY2ktPm9oY2kubmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CiAKLQlweGEyN3hfc3RvcF9oYyhvaGNpLCAmcGRldi0+ZGV2KTsKKwlweGEyN3hfc3RvcF9oYyhvaGNpLCBkZXYpOwogCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgcHhhMjd4X29oY2kgKm9oY2kgPSB0b19weGEyN3hfb2hjaShoY2QpOworCXN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgKmluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAlpbnQgc3RhdHVzOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm9oY2kubmV4dF9zdGF0ZWNoYW5nZSkpCiAJCW1zbGVlcCg1KTsKIAlvaGNpLT5vaGNpLm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOwogCi0JaWYgKChzdGF0dXMgPSBweGEyN3hfc3RhcnRfaGMob2hjaSwgJnBkZXYtPmRldikpIDwgMCkKKwlpZiAoKHN0YXR1cyA9IHB4YTI3eF9zdGFydF9oYyhvaGNpLCBkZXYpKSA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAKKwkvKiBTZWxlY3QgUG93ZXIgTWFuYWdlbWVudCBNb2RlICovCisJcHhhMjd4X29oY2lfc2VsZWN0X3BtbShvaGNpLCBpbmYtPnBvcnRfbW9kZSk7CisKIAlvaGNpX2ZpbmlzaF9jb250cm9sbGVyX3Jlc3VtZShoY2QpOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgb2hjaV9oY2RfcHhhMjd4X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lLAorfTsKICNlbmRpZgogCiAvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KQEAgLTUyMiwxMyArNTMxLDEyIEBACiAJLnByb2JlCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3JlbW92ZSwKIAkuc2h1dGRvd24JPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUsCi0jZW5kaWYKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAicHhhMjd4LW9oY2kiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJm9oY2lfaGNkX3B4YTI3eF9wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKaW5kZXggMTZmZWNiOC4uMzUyODhiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jCkBAIC00OSw5ICs0OSwxMiBAQAogCXN3aXRjaCAodXNiX3BpcGV0eXBlICh1cmItPnBpcGUpKSB7CiAJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgogCQlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzLS07Ci0JCWlmIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzID09IDAKLQkJCQkmJiBxdWlya19hbWRpc28ob2hjaSkpCi0JCQlxdWlya19hbWRfcGxsKDEpOworCQlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwKSB7CisJCQlpZiAocXVpcmtfYW1kaXNvKG9oY2kpKQorCQkJCXF1aXJrX2FtZF9wbGwoMSk7CisJCQlpZiAocXVpcmtfYW1kcHJlZmV0Y2gob2hjaSkpCisJCQkJc2I4MDBfcHJlZmV0Y2gob2hjaSwgMCk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBQSVBFX0lOVEVSUlVQVDoKIAkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzLS07CkBAIC02ODAsOSArNjgzLDEyIEBACiAJCQkJZGF0YSArIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2NudF0ub2Zmc2V0LAogCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2NudF0ubGVuZ3RoLCB1cmIsIGNudCk7CiAJCX0KLQkJaWYgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMgPT0gMAotCQkJCSYmIHF1aXJrX2FtZGlzbyhvaGNpKSkKLQkJCXF1aXJrX2FtZF9wbGwoMCk7CisJCWlmIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzID09IDApIHsKKwkJCWlmIChxdWlya19hbWRpc28ob2hjaSkpCisJCQkJcXVpcmtfYW1kX3BsbCgwKTsKKwkJCWlmIChxdWlya19hbWRwcmVmZXRjaChvaGNpKSkKKwkJCQlzYjgwMF9wcmVmZXRjaChvaGNpLCAxKTsKKwkJfQogCQlwZXJpb2RpYyA9IG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMrKyA9PSAwCiAJCQkmJiBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMgPT0gMDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCmluZGV4IDIyMjAxMWYuLjViZjE1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCkBAIC00MDIsNiArNDAyLDcgQEAKICNkZWZpbmUJT0hDSV9RVUlSS19GUkFNRV9OTwkweDgwCQkJLyogbm8gYmlnIGVuZGlhbiBmcmFtZV9ubyBzaGlmdCAqLwogI2RlZmluZQlPSENJX1FVSVJLX0hVQl9QT1dFUgkweDEwMAkJCS8qIGRpc3RydXN0IGZpcm13YXJlIHBvd2VyL29jIHNldHVwICovCiAjZGVmaW5lCU9IQ0lfUVVJUktfQU1EX0lTTwkweDIwMAkJCS8qIElTTyB0cmFuc2ZlcnMqLworI2RlZmluZQlPSENJX1FVSVJLX0FNRF9QUkVGRVRDSAkweDQwMAkJCS8qIHByZS1mZXRjaCBmb3IgSVNPIHRyYW5zZmVyICovCiAJLy8gdGhlcmUgYXJlIGFsc28gY2hpcCBxdWlya3MvYnVncyBpbiBpbml0IGxvZ2ljCiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbmVjX3dvcms7CS8qIFdvcmtlciBmb3IgTkVDIHF1aXJrICovCkBAIC00MzMsNiArNDM0LDEwIEBACiB7CiAJcmV0dXJuIG9oY2ktPmZsYWdzICYgT0hDSV9RVUlSS19BTURfSVNPOwogfQorc3RhdGljIGlubGluZSBpbnQgcXVpcmtfYW1kcHJlZmV0Y2goc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCXJldHVybiBvaGNpLT5mbGFncyAmIE9IQ0lfUVVJUktfQU1EX1BSRUZFVENIOworfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHF1aXJrX25lYyhzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCiB7CkBAIC00NDYsNiArNDUxLDEwIEBACiB7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW5saW5lIGludCBxdWlya19hbWRwcmVmZXRjaChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAogLyogY29udmVydCBiZXR3ZWVuIGFuIGhjZCBwb2ludGVyIGFuZCB0aGUgY29ycmVzcG9uZGluZyBvaGNpX2hjZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwppbmRleCAyM2NmM2JkLi44M2I1ZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpAQCAtNDc1LDQgKzQ3NSw0IEBACiAJZWxzZSBpZiAocGRldi0+Y2xhc3MgPT0gUENJX0NMQVNTX1NFUklBTF9VU0JfWEhDSSkKIAkJcXVpcmtfdXNiX2hhbmRvZmZfeGhjaShwZGV2KTsKIH0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya191c2JfZWFybHlfaGFuZG9mZik7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya191c2JfZWFybHlfaGFuZG9mZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwppbmRleCA3NDliNTM3Li5lMzNkMzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKQEAgLTEwMDMsMTkgKzEwMDMsMjAgQEAKIAlpZiAoc3lzc3RzID09IFNFMCkgewogCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkFUVENILCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7CiAJCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIEFUVENIRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOwotCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaWYgKHN5c3N0cyA9PSBGU19KU1RTKQorCQkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgSFNFLCBnZXRfc3lzY2ZnX3JlZyhwb3J0KSk7CisJCWVsc2UgaWYgKHN5c3N0cyA9PSBMU19KU1RTKQorCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgSFNFLCBnZXRfc3lzY2ZnX3JlZyhwb3J0KSk7CisKKwkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5EVENILCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7CisJCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIERUQ0hFLCBnZXRfaW50ZW5iX3JlZyhwb3J0KSk7CisKKwkJaWYgKHI4YTY2NTk3LT5idXNfc3VzcGVuZGVkKQorCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CiAJfQogCi0JaWYgKHN5c3N0cyA9PSBGU19KU1RTKQotCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBIU0UsIGdldF9zeXNjZmdfcmVnKHBvcnQpKTsKLQllbHNlIGlmIChzeXNzdHMgPT0gTFNfSlNUUykKLQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgSFNFLCBnZXRfc3lzY2ZnX3JlZyhwb3J0KSk7Ci0KLQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkRUQ0gsIGdldF9pbnRzdHNfcmVnKHBvcnQpKTsKLQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBEVENIRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOwotCi0JaWYgKHI4YTY2NTk3LT5idXNfc3VzcGVuZGVkKQotCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKKwl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0IGRpc2FibGVkICovCkBAIC0xMDI0LDYgKzEwMjUsOCBAQAogCXUxNiBzcGVlZCA9IGdldF9yaF91c2Jfc3BlZWQocjhhNjY1OTcsIHBvcnQpOwogCXN0cnVjdCByOGE2NjU5N19yb290X2h1YiAqcmggPSAmcjhhNjY1OTctPnJvb3RfaHViW3BvcnRdOwogCisJcmgtPnBvcnQgJj0gfigoMSA8PCBVU0JfUE9SVF9GRUFUX0hJR0hTUEVFRCkgfAorCQkgICAgICAoMSA8PCBVU0JfUE9SVF9GRUFUX0xPV1NQRUVEKSk7CiAJaWYgKHNwZWVkID09IEhTTU9ERSkKIAkJcmgtPnBvcnQgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQpOwogCWVsc2UgaWYgKHNwZWVkID09IExTTU9ERSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYwppbmRleCBjNjMyNDM3Li41NjJlYmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCkBAIC0xMTUsNiArMTE1LDEwIEBACiAJCWlmIChzdGF0dXMgJiBRVERfU1RTX0hBTFRFRCkgewogCQkJLyogVWcsIGFuIGVycm9yLiAqLwogCQkJcHJvY2Vzc19oYWx0ZWRfcXRkKHdoYywgcXNldCwgdGQpOworCQkJLyogQSBoYWx0ZWQgcVREIGFsd2F5cyB0cmlnZ2VycyBhbiB1cGRhdGUKKwkJCSAgIGJlY2F1c2UgdGhlIHFzZXQgd2FzIGVpdGhlciByZW1vdmVkIG9yCisJCQkgICByZWFjdGl2YXRlZC4gKi8KKwkJCXVwZGF0ZSB8PSBXSENfVVBEQVRFX1VQREFURUQ7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIApAQCAtMzA1LDYgKzMwOSw3IEBACiAJc3RydWN0IHdoY191cmIgKnd1cmIgPSB1cmItPmhjcHJpdjsKIAlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQgPSB3dXJiLT5xc2V0OwogCXN0cnVjdCB3aGNfc3RkICpzdGQsICp0OworCWJvb2wgaGFzX3F0ZCA9IGZhbHNlOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzE1LDE3ICszMjAsMjEgQEAKIAkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RkLCB0LCAmcXNldC0+c3RkcywgbGlzdF9ub2RlKSB7Ci0JCWlmIChzdGQtPnVyYiA9PSB1cmIpCisJCWlmIChzdGQtPnVyYiA9PSB1cmIpIHsKKwkJCWlmIChzdGQtPnF0ZCkKKwkJCQloYXNfcXRkID0gdHJ1ZTsKIAkJCXFzZXRfZnJlZV9zdGQod2hjLCBzdGQpOwotCQllbHNlCisJCX0gZWxzZQogCQkJc3RkLT5xdGQgPSBOVUxMOyAvKiBzbyB0aGlzIHN0ZCBpcyByZS1hZGRlZCB3aGVuIHRoZSBxc2V0IGlzICovCiAJfQogCi0JYXNsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7Ci0Jd3VyYi0+c3RhdHVzID0gc3RhdHVzOwotCXd1cmItPmlzX2FzeW5jID0gdHJ1ZTsKLQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd3VyYi0+ZGVxdWV1ZV93b3JrKTsKLQorCWlmIChoYXNfcXRkKSB7CisJCWFzbF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOworCQl3dXJiLT5zdGF0dXMgPSBzdGF0dXM7CisJCXd1cmItPmlzX2FzeW5jID0gdHJ1ZTsKKwkJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7CisJfSBlbHNlCisJCXFzZXRfcmVtb3ZlX3VyYih3aGMsIHFzZXQsIHVyYiwgc3RhdHVzKTsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3aGMtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvZGVidWcuYwppbmRleCBjZjJkNDU5Li4yMjczYzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvZGVidWcuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHB6bF9wcmludCwgaW5vZGUtPmlfcHJpdmF0ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRpX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkaV9mb3BzID0gewogCS5vcGVuICAgID0gZGlfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLApAQCAtMTQyLDcgKzE0Miw3IEBACiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFzbF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXNsX2ZvcHMgPSB7CiAJLm9wZW4gICAgPSBhc2xfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLApAQCAtMTUwLDcgKzE1MCw3IEBACiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB6bF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHpsX2ZvcHMgPSB7CiAJLm9wZW4gICAgPSBwemxfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCmluZGV4IGE5ZTA1YmEuLjBkYjNmYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKQEAgLTEyMSw2ICsxMjEsMTAgQEAKIAkJaWYgKHN0YXR1cyAmIFFURF9TVFNfSEFMVEVEKSB7CiAJCQkvKiBVZywgYW4gZXJyb3IuICovCiAJCQlwcm9jZXNzX2hhbHRlZF9xdGQod2hjLCBxc2V0LCB0ZCk7CisJCQkvKiBBIGhhbHRlZCBxVEQgYWx3YXlzIHRyaWdnZXJzIGFuIHVwZGF0ZQorCQkJICAgYmVjYXVzZSB0aGUgcXNldCB3YXMgZWl0aGVyIHJlbW92ZWQgb3IKKwkJCSAgIHJlYWN0aXZhdGVkLiAqLworCQkJdXBkYXRlIHw9IFdIQ19VUERBVEVfVVBEQVRFRDsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCkBAIC0zMzMsNiArMzM3LDcgQEAKIAlzdHJ1Y3Qgd2hjX3VyYiAqd3VyYiA9IHVyYi0+aGNwcml2OwogCXN0cnVjdCB3aGNfcXNldCAqcXNldCA9IHd1cmItPnFzZXQ7CiAJc3RydWN0IHdoY19zdGQgKnN0ZCwgKnQ7CisJYm9vbCBoYXNfcXRkID0gZmFsc2U7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zNDMsMTcgKzM0OCwyMiBAQAogCQlnb3RvIG91dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGQsIHQsICZxc2V0LT5zdGRzLCBsaXN0X25vZGUpIHsKLQkJaWYgKHN0ZC0+dXJiID09IHVyYikKKwkJaWYgKHN0ZC0+dXJiID09IHVyYikgeworCQkJaWYgKHN0ZC0+cXRkKQorCQkJCWhhc19xdGQgPSB0cnVlOwogCQkJcXNldF9mcmVlX3N0ZCh3aGMsIHN0ZCk7Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQlzdGQtPnF0ZCA9IE5VTEw7IC8qIHNvIHRoaXMgc3RkIGlzIHJlLWFkZGVkIHdoZW4gdGhlIHFzZXQgaXMgKi8KIAl9CiAKLQlwemxfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKLQl3dXJiLT5zdGF0dXMgPSBzdGF0dXM7Ci0Jd3VyYi0+aXNfYXN5bmMgPSBmYWxzZTsKLQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd3VyYi0+ZGVxdWV1ZV93b3JrKTsKLQorCWlmIChoYXNfcXRkKSB7CisJCXB6bF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOworCQl1cGRhdGVfcHpsX2h3X3ZpZXcod2hjKTsKKwkJd3VyYi0+c3RhdHVzID0gc3RhdHVzOworCQl3dXJiLT5pc19hc3luYyA9IGZhbHNlOworCQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd3VyYi0+ZGVxdWV1ZV93b3JrKTsKKwl9IGVsc2UKKwkJcXNldF9yZW1vdmVfdXJiKHdoYywgcXNldCwgdXJiLCBzdGF0dXMpOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndoYy0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMKaW5kZXggOTk5MTFlNy4uOTMyZjk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYwpAQCAtMzM1LDYgKzMzNSwxMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7CiAJeGhjaV9kYmcoeGhjaSwgIm9wIHJlZyBzdGF0dXMgPSAweCV4XG4iLCB0ZW1wKTsKKwlpZiAodGVtcCA9PSAweGZmZmZmZmZmKSB7CisJCXhoY2lfZGJnKHhoY2ksICJIVyBkaWVkLCBwb2xsaW5nIHN0b3BwZWQuXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCiAJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwogCXhoY2lfZGJnKHhoY2ksICJpcl9zZXQgMCBwZW5kaW5nID0gMHgleFxuIiwgdGVtcCk7CiAJeGhjaV9kYmcoeGhjaSwgIk5vLW9wIGNvbW1hbmRzIGhhbmRsZWQgPSAlZFxuIiwgeGhjaS0+bm9vcHNfaGFuZGxlZCk7CkBAIC03NzYsNiArNzgyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CisJdTMyIHRlbXA7CiAJc3RydWN0IHhoY2lfaGNkICp4aGNpOwogCXN0cnVjdCB4aGNpX3RkICp0ZDsKIAl1bnNpZ25lZCBpbnQgZXBfaW5kZXg7CkBAIC03ODgsNiArNzk1LDE3IEBACiAJcmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpOwogCWlmIChyZXQgfHwgIXVyYi0+aGNwcml2KQogCQlnb3RvIGRvbmU7CisJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7CisJaWYgKHRlbXAgPT0gMHhmZmZmZmZmZikgeworCQl4aGNpX2RiZyh4aGNpLCAiSFcgZGllZCwgZnJlZWluZyBURC5cbiIpOworCQl0ZCA9IChzdHJ1Y3QgeGhjaV90ZCAqKSB1cmItPmhjcHJpdjsKKworCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJdXNiX2hjZF9naXZlYmFja191cmIoeGhjaV90b19oY2QoeGhjaSksIHVyYiwgLUVTSFVURE9XTik7CisJCWtmcmVlKHRkKTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAl4aGNpX2RiZyh4aGNpLCAiQ2FuY2VsIFVSQiAlcFxuIiwgdXJiKTsKIAl4aGNpX2RiZyh4aGNpLCAiRXZlbnQgcmluZzpcbiIpOwpAQCAtODc3LDcgKzg5NSw3IEBACiAJY3RybF9jdHgtPmRyb3BfZmxhZ3MgfD0gZHJvcF9mbGFnOwogCW5ld19kcm9wX2ZsYWdzID0gY3RybF9jdHgtPmRyb3BfZmxhZ3M7CiAKLQljdHJsX2N0eC0+YWRkX2ZsYWdzID0gfmRyb3BfZmxhZzsKKwljdHJsX2N0eC0+YWRkX2ZsYWdzICY9IH5kcm9wX2ZsYWc7CiAJbmV3X2FkZF9mbGFncyA9IGN0cmxfY3R4LT5hZGRfZmxhZ3M7CiAKIAlsYXN0X2N0eCA9IHhoY2lfbGFzdF92YWxpZF9lbmRwb2ludChjdHJsX2N0eC0+YWRkX2ZsYWdzKTsKQEAgLTE0MTAsMTEgKzE0MjgsMjAgQEAKIHsKIAlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHN0YXRlOwogCiAJaWYgKHVkZXYtPnNsb3RfaWQgPT0gMCkKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkvKiBEb24ndCBkaXNhYmxlIHRoZSBzbG90IGlmIHRoZSBob3N0IGNvbnRyb2xsZXIgaXMgZGVhZC4gKi8KKwlzdGF0ZSA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7CisJaWYgKHN0YXRlID09IDB4ZmZmZmZmZmYpIHsKKwkJeGhjaV9mcmVlX3ZpcnRfZGV2aWNlKHhoY2ksIHVkZXYtPnNsb3RfaWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoeGhjaV9xdWV1ZV9zbG90X2NvbnRyb2woeGhjaSwgVFJCX0RJU0FCTEVfU0xPVCwgdWRldi0+c2xvdF9pZCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCQl4aGNpX2RiZyh4aGNpLCAiRklYTUU6IGFsbG9jYXRlIGEgY29tbWFuZCByaW5nIHNlZ21lbnRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCmluZGV4IDFkYjRmZWEuLmI4ZmQyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKQEAgLTgwMiw5ICs4MDIsMTEgQEAKIAlpbnQgaTsKIAogCS8qIEZyZWUgdGhlIEV2ZW50IFJpbmcgU2VnbWVudCBUYWJsZSBhbmQgdGhlIGFjdHVhbCBFdmVudCBSaW5nICovCi0JeGhjaV93cml0ZWwoeGhjaSwgMCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9zaXplKTsKLQl4aGNpX3dyaXRlXzY0KHhoY2ksIDAsICZ4aGNpLT5pcl9zZXQtPmVyc3RfYmFzZSk7Ci0JeGhjaV93cml0ZV82NCh4aGNpLCAwLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2RlcXVldWUpOworCWlmICh4aGNpLT5pcl9zZXQpIHsKKwkJeGhjaV93cml0ZWwoeGhjaSwgMCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9zaXplKTsKKwkJeGhjaV93cml0ZV82NCh4aGNpLCAwLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2Jhc2UpOworCQl4aGNpX3dyaXRlXzY0KHhoY2ksIDAsICZ4aGNpLT5pcl9zZXQtPmVyc3RfZGVxdWV1ZSk7CisJfQogCXNpemUgPSBzaXplb2Yoc3RydWN0IHhoY2lfZXJzdF9lbnRyeSkqKHhoY2ktPmVyc3QubnVtX2VudHJpZXMpOwogCWlmICh4aGNpLT5lcnN0LmVudHJpZXMpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZSwKQEAgLTg0MSw5ICs4NDMsOSBAQAogCQkJCXhoY2ktPmRjYmFhLCB4aGNpLT5kY2JhYS0+ZG1hKTsKIAl4aGNpLT5kY2JhYSA9IE5VTEw7CiAKKwlzY3JhdGNocGFkX2ZyZWUoeGhjaSk7CiAJeGhjaS0+cGFnZV9zaXplID0gMDsKIAl4aGNpLT5wYWdlX3NoaWZ0ID0gMDsKLQlzY3JhdGNocGFkX2ZyZWUoeGhjaSk7CiB9CiAKIGludCB4aGNpX21lbV9pbml0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZ2ZwX3QgZmxhZ3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwppbmRleCAxNzNjMzljLi44MjFiN2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKQEAgLTg2NCw5ICs4NjQsMTEgQEAKIAljdXJfc2VnID0gc3RhcnRfc2VnOwogCiAJZG8geworCQlpZiAoc3RhcnRfZG1hID09IDApCisJCQlyZXR1cm4gMDsKIAkJLyogV2UgbWF5IGdldCBhbiBldmVudCBmb3IgYSBMaW5rIFRSQiBpbiB0aGUgbWlkZGxlIG9mIGEgVEQgKi8KIAkJZW5kX3NlZ19kbWEgPSB4aGNpX3RyYl92aXJ0X3RvX2RtYShjdXJfc2VnLAotCQkJCSZzdGFydF9zZWctPnRyYnNbVFJCU19QRVJfU0VHTUVOVCAtIDFdKTsKKwkJCQkmY3VyX3NlZy0+dHJic1tUUkJTX1BFUl9TRUdNRU5UIC0gMV0pOwogCQkvKiBJZiB0aGUgZW5kIFRSQiBpc24ndCBpbiB0aGlzIHNlZ21lbnQsIHRoaXMgaXMgc2V0IHRvIDAgKi8KIAkJZW5kX3RyYl9kbWEgPSB4aGNpX3RyYl92aXJ0X3RvX2RtYShjdXJfc2VnLCBlbmRfdHJiKTsKIApAQCAtODkzLDggKzg5NSw5IEBACiAJCX0KIAkJY3VyX3NlZyA9IGN1cl9zZWctPm5leHQ7CiAJCXN0YXJ0X2RtYSA9IHhoY2lfdHJiX3ZpcnRfdG9fZG1hKGN1cl9zZWcsICZjdXJfc2VnLT50cmJzWzBdKTsKLQl9IHdoaWxlICgxKTsKKwl9IHdoaWxlIChjdXJfc2VnICE9IHN0YXJ0X3NlZyk7CiAKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCmluZGV4IGQ2NDVmMzguLjMyZDAxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwpAQCAtNDI5LDggKzQyOSw3IEBACiAJcmV0dXJuIHJlYWRfY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QKLWZpbGVfb3BlcmF0aW9ucyB1c2JfcmlvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JfcmlvX2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlYWQgPQkJcmVhZF9yaW8sCiAJLndyaXRlID0Jd3JpdGVfcmlvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9pbml0LmMKaW5kZXggMjczZGU1ZC4uMGFiOTkwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfaW5pdC5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KIAogI2luY2x1ZGUgInNpc3VzYi5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwppbmRleCAyOTA5MmI4Li40ZmIxMjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKQEAgLTMxMyw3ICszMTMsOCBAQAogCiAJaWYgKGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4MDAwMSkgewogCQlkZXZfd2FybigmaW50ZXJmYWNlLT5kZXYsICJVU0JMQ0QgbW9kZWwgbm90IHN1cHBvcnRlZC5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKIAl9CiAJCiAJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKaW5kZXggZGZkYzQzZS4uMTBmMzIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCkBAIC0zNDgsMTIgKzM0OCwxMiBAQAogCiAvKgogICogUmV0dXJuIGEgZmV3IChraWxvLSlieXRlcyB0byB0aGUgaGVhZCBvZiB0aGUgYnVmZmVyLgotICogVGhpcyBpcyB1c2VkIGlmIGEgRE1BIGZldGNoIGZhaWxzLgorICogVGhpcyBpcyB1c2VkIGlmIGEgZGF0YSBmZXRjaCBmYWlscy4KICAqLwogc3RhdGljIHZvaWQgbW9uX2J1ZmZfYXJlYV9zaHJpbmsoc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAKLQlzaXplID0gKHNpemUgKyBQS1RfQUxJR04tMSkgJiB+KFBLVF9BTElHTi0xKTsKKwkvKiBzaXplICY9IH4oUEtUX0FMSUdOLTEpOyAgLS0gd2UncmUgY2FsbGVkIHdpdGggYWxpZ25lZCBzaXplICovCiAJcnAtPmJfY250IC09IHNpemU7CiAJaWYgKHJwLT5iX2luIDwgc2l6ZSkKIAkJcnAtPmJfaW4gKz0gcnAtPmJfc2l6ZTsKQEAgLTQzMyw2ICs0MzMsNyBAQAogCXVuc2lnbmVkIGludCB1cmJfbGVuZ3RoOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJdW5zaWduZWQgaW50IGxlbmd0aDsKKwl1bnNpZ25lZCBpbnQgZGVsdGE7CiAJdW5zaWduZWQgaW50IG5kZXNjLCBsZW5kZXNjOwogCXVuc2lnbmVkIGNoYXIgZGlyOwogCXN0cnVjdCBtb25fYmluX2hkciAqZXA7CkBAIC01MzcsOCArNTM4LDEwIEBACiAJaWYgKGxlbmd0aCAhPSAwKSB7CiAJCWVwLT5mbGFnX2RhdGEgPSBtb25fYmluX2dldF9kYXRhKHJwLCBvZmZzZXQsIHVyYiwgbGVuZ3RoKTsKIAkJaWYgKGVwLT5mbGFnX2RhdGEgIT0gMCkgewkvKiBZZXMsIGl0J3MgMHgwMCwgbm90ICcwJyAqLwotCQkJZXAtPmxlbl9jYXAgPSAwOwotCQkJbW9uX2J1ZmZfYXJlYV9zaHJpbmsocnAsIGxlbmd0aCk7CisJCQlkZWx0YSA9IChlcC0+bGVuX2NhcCArIFBLVF9BTElHTi0xKSAmIH4oUEtUX0FMSUdOLTEpOworCQkJZXAtPmxlbl9jYXAgLT0gbGVuZ3RoOworCQkJZGVsdGEgLT0gKGVwLT5sZW5fY2FwICsgUEtUX0FMSUdOLTEpICYgfihQS1RfQUxJR04tMSk7CisJCQltb25fYnVmZl9hcmVhX3NocmluayhycCwgZGVsdGEpOwogCQl9CiAJfSBlbHNlIHsKIAkJZXAtPmZsYWdfZGF0YSA9IGRhdGFfdGFnOwpAQCAtMTE3NCw3ICsxMTc3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtb25fYmluX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW9uX2Jpbl92bV9vcHMgPSB7CiAJLm9wZW4gPSAgICAgbW9uX2Jpbl92bWFfb3BlbiwKIAkuY2xvc2UgPSAgICBtb25fYmluX3ZtYV9jbG9zZSwKIAkuZmF1bHQgPSAgICBtb25fYmluX3ZtYV9mYXVsdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA4MDNhZGNiLi5iODRhYmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC04LDggKzgsOCBAQAogCiAjIChNKUhEUkMgPSAoTXVsdGlwb2ludCkgSGlnaHNwZWVkIER1YWwtUm9sZSBDb250cm9sbGVyCiBjb25maWcgVVNCX01VU0JfSERSQwotCWRlcGVuZHMgb24gKFVTQiB8fCBVU0JfR0FER0VUKSAmJiBIQVZFX0NMSwotCWRlcGVuZHMgb24gIVNVUEVSSAorCWRlcGVuZHMgb24gKFVTQiB8fCBVU0JfR0FER0VUKQorCWRlcGVuZHMgb24gKEFSTSB8fCBCTEFDS0ZJTikKIAlzZWxlY3QgTk9QX1VTQl9YQ0VJViBpZiBBUkNIX0RBVklOQ0kKIAlzZWxlY3QgVFdMNDAzMF9VU0IgaWYgTUFDSF9PTUFQXzM0MzBTRFAKIAlzZWxlY3QgTk9QX1VTQl9YQ0VJViBpZiBNQUNIX09NQVAzRVZNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKaW5kZXggZjJmNjZlYi4uZmNlYzg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCAzODFkNjQ4Li42YWE1ZjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKQEAgLTk1LDYgKzk1LDEzIEBACiAjZW5kaWYKICNlbmRpZgkvKiBuZWVkIE1VU0IgZ2FkZ2V0IHNlbGVjdGlvbiAqLwogCisjaWZuZGVmIENPTkZJR19IQVZFX0NMSworLyogRHVtbXkgc3R1YiBmb3IgY2xrIGZyYW1ld29yayAqLworI2RlZmluZSBjbGtfZ2V0KGRldiwgaWQpCU5VTEwKKyNkZWZpbmUgY2xrX3B1dChjbG9jaykJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBjbGtfZW5hYmxlKGNsb2NrKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgY2xrX2Rpc2FibGUoY2xvY2spCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaAppbmRleCBmYmZkM2ZkLi5jYzFkNzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKQEAgLTQzOSwxNSArNDM5LDYgQEAKIC8qIE5vdCBpbXBsZW1lbnRlZCAtIEhXIGhhcyBzZXBlcmF0ZSBUeC9SeCBGSUZPICovCiAjZGVmaW5lIE1VU0JfVFhDU1JfTU9ERQkJCTB4MDAwMAogCi0vKgotICogRHVtbXkgc3R1YiBmb3IgY2xrIGZyYW1ld29yaywgaXQgd2lsbCBiZSByZW1vdmVkCi0gKiB1bnRpbCBCbGFja2ZpbiBzdXBwb3J0cyBjbGsgZnJhbWV3b3JrCi0gKi8KLSNkZWZpbmUgY2xrX2dldChkZXYsIGlkKQlOVUxMCi0jZGVmaW5lIGNsa19wdXQoY2xvY2spCQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgY2xrX2VuYWJsZShjbG9jaykJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIGNsa19kaXNhYmxlKGNsb2NrKQlkbyB7fSB3aGlsZSAoMCkKLQogc3RhdGljIGlubGluZSB2b2lkIG11c2Jfd3JpdGVfdHhmaWZvc3oodm9pZCBfX2lvbWVtICptYmFzZSwgdTggY19zaXplKQogewogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYwppbmRleCAyY2JmYWIzLi5iMTBhYzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYwpAQCAtNTU0LDEzICs1NTQsMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+cnhfbG9jayk7CiAJcHJpdi0+cnhfZmxhZ3MgfD0gVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnJ4X2xvY2spOwogfQogCiAvKiBCYXNlZCBvbiBmdGRpX3Npby5jIHVudGhyb3R0bGUgKi8KQEAgLTU2OSwxNCArNTY4LDEzIEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGFpcmNhYmxlX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IGFjdHVhbGx5X3Rocm90dGxlZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+cnhfbG9jayk7CiAJYWN0dWFsbHlfdGhyb3R0bGVkID0gcHJpdi0+cnhfZmxhZ3MgJiBBQ1RVQUxMWV9USFJPVFRMRUQ7CiAJcHJpdi0+cnhfZmxhZ3MgJj0gfihUSFJPVFRMRUQgfCBBQ1RVQUxMWV9USFJPVFRMRUQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnJ4X2xvY2spOwogCiAJaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkKIAkJc2NoZWR1bGVfd29yaygmcHJpdi0+cnhfd29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggNGEyMDhmZS4uYmQyNTRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtNTAsNiArNTAsOCBAQAogc3RhdGljIHZvaWQgY3AyMTB4X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGludCBjcDIxMHhfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEweF9kaXNjb25uZWN0KHN0cnVjdCB1c2Jfc2VyaWFsICopOworc3RhdGljIHZvaWQgY3AyMTB4X2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCwgaW50IG9uKTsKK3N0YXRpYyBpbnQgY3AyMTB4X2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnApOwogCiBzdGF0aWMgaW50IGRlYnVnOwogCkBAIC0xMTMsNiArMTE1LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxNjZBLCAweDAzMDMpIH0sIC8qIENsaXBzYWwgNTUwMFBDVSBDLUJ1cyBVU0IgaW50ZXJmYWNlICovCiAJeyBVU0JfREVWSUNFKDB4MTZENiwgMHgwMDAxKSB9LCAvKiBKYWJsb3Ryb24gc2VyaWFsIGludGVyZmFjZSAqLwogCXsgVVNCX0RFVklDRSgweDE4RUYsIDB4RTAwRikgfSwgLyogRUxWIFVTQi1JMkMtSW50ZXJmYWNlICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg5NTAwKSB9LCAvKiBEVzcwMCBHUFMgVVNCIGludGVyZmFjZSAqLwogCXsgfSAvKiBUZXJtaW5hdGluZyBFbnRyeSAqLwogfTsKIApAQCAtMTQyLDYgKzE0NSw4IEBACiAJLnRpb2Ntc2V0CQk9IGNwMjEweF90aW9jbXNldCwKIAkuYXR0YWNoCQkJPSBjcDIxMHhfc3RhcnR1cCwKIAkuZGlzY29ubmVjdAkJPSBjcDIxMHhfZGlzY29ubmVjdCwKKwkuZHRyX3J0cwkJPSBjcDIxMHhfZHRyX3J0cywKKwkuY2Fycmllcl9yYWlzZWQJCT0gY3AyMTB4X2NhcnJpZXJfcmFpc2VkCiB9OwogCiAvKiBDb25maWcgcmVxdWVzdCB0eXBlcyAqLwpAQCAtNzQ1LDYgKzc1MCwxNCBAQAogCXJldHVybiBjcDIxMHhfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMFhfU0VUX01IUywgJmNvbnRyb2wsIDIpOwogfQogCitzdGF0aWMgdm9pZCBjcDIxMHhfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwLCBpbnQgb24pCit7CisJaWYgKG9uKQorCQljcDIxMHhfdGlvY21zZXRfcG9ydChwLCBOVUxMLCAgVElPQ01fRFRSfFRJT0NNX1JUUywgMCk7CisJZWxzZQorCQljcDIxMHhfdGlvY21zZXRfcG9ydChwLCBOVUxMLCAgMCwgVElPQ01fRFRSfFRJT0NNX1JUUyk7Cit9CisKIHN0YXRpYyBpbnQgY3AyMTB4X3Rpb2NtZ2V0IChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTc2Nyw2ICs3ODAsMTUgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50IGNwMjEweF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwKQoreworCXVuc2lnbmVkIGludCBjb250cm9sOworCWNwMjEweF9nZXRfY29uZmlnKHAsIENQMjEwWF9HRVRfTURNU1RTLCAmY29udHJvbCwgMSk7CisJaWYgKGNvbnRyb2wgJiBDT05UUk9MX0RDRCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGNwMjEweF9icmVha19jdGwgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCmluZGV4IGUwYThiNzEuLmE1OTFlYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwpAQCAtMTE1NSwxMyArMTE1NSwxMiBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPnJ4X2ZsYWdzID0gVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogfQogCiAKQEAgLTExNzAsMTQgKzExNjksMTMgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBhY3R1YWxseV90aHJvdHRsZWQsIHJlc3VsdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJYWN0dWFsbHlfdGhyb3R0bGVkID0gcHJpdi0+cnhfZmxhZ3MgJiBBQ1RVQUxMWV9USFJPVFRMRUQ7CiAJcHJpdi0+cnhfZmxhZ3MgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCiAJaWYgKCFwcml2LT5jb21tX2lzX29rKQogCQlyZXR1cm47CkBAIC0xMTg1LDcgKzExODMsNyBAQAogCWlmIChhY3R1YWxseV90aHJvdHRsZWQpIHsKIAkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAocmVzdWx0KSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCAiCiAJCQkJCSJlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKaW5kZXggYWIzZGQ5OS4uNjhlODBiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpAQCAtODk4LDE2ICs4OTgsMTYgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAotCS8qIHR1cm4gdGhyb3R0bGUgb2ZmICovCi0JcHJpdi0+ZHBfdGhyb3R0bGVkID0gMDsKLQlwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0ID0gMDsKLQogCS8qIHJlc3RhcnQgcmVhZCBjaGFpbiAqLwogCWlmIChwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0KSB7CiAJCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJcmV0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCX0KIAorCS8qIHR1cm4gdGhyb3R0bGUgb2ZmICovCisJcHJpdi0+ZHBfdGhyb3R0bGVkID0gMDsKKwlwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0ID0gMDsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKaW5kZXggMzNjOWU5Yy4uN2RkMGUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KQogCQlkZXZfZXJyKCZwb3J0LT5kZXYsCiAJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IDRmODgzYjEuLjljNjBkNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC03NiwxMyArNzYsNyBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF9kdHJfcnRzOwkvKiBzYXZlZCBtb2RlbSBjb250cm9sIG91dHB1dHMgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsgLyogVXNlZCBmb3IgVElPQ01JV0FJVCAqLwogCWNoYXIgcHJldl9zdGF0dXMsIGRpZmZfc3RhdHVzOyAgICAgICAgLyogVXNlZCBmb3IgVElPQ01JV0FJVCAqLwotCV9fdTggcnhfZmxhZ3M7CQkvKiByZWNlaXZlIHN0YXRlIGZsYWdzICh0aHJvdHRsaW5nKSAqLwotCXNwaW5sb2NrX3QgcnhfbG9jazsJLyogc3BpbmxvY2sgZm9yIHJlY2VpdmUgc3RhdGUgKi8KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJ4X3dvcms7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKLQlpbnQgcnhfcHJvY2Vzc2VkOwotCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7Ci0KIAlfX3UxNiBpbnRlcmZhY2U7CS8qIEZUMjIzMkMsIEZUMjIzMkggb3IgRlQ0MjMySCBwb3J0IGludGVyZmFjZQogCQkJCSAgICgwIGZvciBGVDIzMi8yNDUpICovCiAKQEAgLTczNywxMCArNzMxLDYgQEAKIC8qIENvbnN0YW50cyBmb3IgcmVhZCB1cmIgYW5kIHdyaXRlIHVyYiAqLwogI2RlZmluZSBCVUZTWiA1MTIKIAotLyogcnhfZmxhZ3MgKi8KLSNkZWZpbmUgVEhST1RUTEVECQkweDAxCi0jZGVmaW5lIEFDVFVBTExZX1RIUk9UVExFRAkweDAyCi0KIC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KICNkZWZpbmUgRlRESV9TVEFUVVNfQjBfTUFTSwkoRlRESV9SUzBfQ1RTIHwgRlRESV9SUzBfRFNSIHwgRlRESV9SUzBfUkkgfCBGVERJX1JTMF9STFNEKQogI2RlZmluZSBGVERJX1NUQVRVU19CMV9NQVNLCShGVERJX1JTX0JJKQpAQCAtNzYzLDcgKzc1Myw3IEBACiBzdGF0aWMgaW50ICBmdGRpX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIGZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogc3RhdGljIHZvaWQgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkIGZ0ZGlfcHJvY2Vzc19yZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGZ0ZGlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKIHN0YXRpYyBpbnQgIGZ0ZGlfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpOwpAQCAtMTIzNCw3ICsxMjI0LDYgQEAKIAkJCQkJKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19GTEFHUykpOwogCXByaXYtPmN1c3RvbV9kaXZpc29yID0gbmV3X3NlcmlhbC5jdXN0b21fZGl2aXNvcjsKIAotCXR0eS0+bG93X2xhdGVuY3kgPSAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKIAl3cml0ZV9sYXRlbmN5X3RpbWVyKHBvcnQpOwogCiBjaGVja19hbmRfZXhpdDoKQEAgLTE1MjcsNyArMTUxNiw2IEBACiAJfQogCiAJa3JlZl9pbml0KCZwcml2LT5rcmVmKTsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cnhfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4X2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKIAkvKiBUaGlzIHdpbGwgcHVzaCB0aGUgY2hhcmFjdGVycyB0aHJvdWdoIGltbWVkaWF0ZWx5IHJhdGhlcgpAQCAtMTU0OSw3ICsxNTM3LDYgQEAKIAkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBCVUZTWjsKIAl9CiAKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cnhfd29yaywgZnRkaV9wcm9jZXNzX3JlYWQpOwogCXByaXYtPnBvcnQgPSBwb3J0OwogCiAJLyogRnJlZSBwb3J0J3MgZXhpc3Rpbmcgd3JpdGUgdXJiIGFuZCB0cmFuc2ZlciBidWZmZXIuICovCkBAIC0xNjg2LDYgKzE2NzMsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBmdGRpX3N1Ym1pdF9yZWFkX3VyYihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBnZnBfdCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IHVyYiAqdXJiID0gcG9ydC0+cmVhZF91cmI7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmVzdWx0OworCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgICBmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBtZW1fZmxhZ3MpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgaW50IGZ0ZGlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogeyAvKiBmdGRpX29wZW4gKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CkBAIC0xNzAwLDEyICsxNzA3LDYgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCXByaXYtPnR4X2J5dGVzID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQlwcml2LT5yeF9ieXRlcyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHR0eSkKLQkJdHR5LT5sb3dfbGF0ZW5jeSA9IChwcml2LT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOwogCiAJd3JpdGVfbGF0ZW5jeV90aW1lcihwb3J0KTsKIApAQCAtMTcyNSwyMyArMTcyNiwxNCBAQAogCQlmdGRpX3NldF90ZXJtaW9zKHR0eSwgcG9ydCwgdHR5LT50ZXJtaW9zKTsKIAogCS8qIE5vdCB0aHJvdHRsZWQgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCXByaXYtPnJ4X2ZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlwb3J0LT50aHJvdHRsZWQgPSAwOworCXBvcnQtPnRocm90dGxlX3JlcSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KLQlwcml2LT5yeF9wcm9jZXNzZWQgPSAwOwotCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBkZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUoZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCi0JCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVzdWx0KQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsCi0JCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmVzdWx0KTsKLQllbHNlCisJcmVzdWx0ID0gZnRkaV9zdWJtaXRfcmVhZF91cmIocG9ydCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXN1bHQpCiAJCWtyZWZfZ2V0KCZwcml2LT5rcmVmKTsKIAogCXJldHVybiByZXN1bHQ7CkBAIC0xNzg3LDEwICsxNzc5LDYgQEAKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKLQotCS8qIGNhbmNlbCBhbnkgc2NoZWR1bGVkIHJlYWRpbmcgKi8KLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnJ4X3dvcmspOwotCiAJLyogc2h1dGRvd24gb3VyIGJ1bGsgcmVhZCAqLwogCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CiAJa3JlZl9wdXQoJnByaXYtPmtyZWYsIGZ0ZGlfc2lvX3ByaXZfcmVsZWFzZSk7CkBAIC0yMDEzLDI3MSArMjAwMSwxMjEgQEAKIAlyZXR1cm4gYnVmZmVyZWQ7CiB9CiAKK3N0YXRpYyBpbnQgZnRkaV9wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2LAorCQljaGFyICpwYWNrZXQsIGludCBsZW4pCit7CisJaW50IGk7CisJY2hhciBzdGF0dXM7CisJY2hhciBmbGFnOworCWNoYXIgKmNoOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChsZW4gPCAyKSB7CisJCWRiZygibWFsZm9ybWVkIHBhY2tldCIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDb21wYXJlIG5ldyBsaW5lIHN0YXR1cyB0byB0aGUgb2xkIG9uZSwgc2lnbmFsIGlmIGRpZmZlcmVudC8KKwkgICBOLkIuIHBhY2tldCBtYXkgYmUgcHJvY2Vzc2VkIG1vcmUgdGhhbiBvbmNlLCBidXQgZGlmZmVyZW5jZXMKKwkgICBhcmUgb25seSBwcm9jZXNzZWQgb25jZS4gICovCisJc3RhdHVzID0gcGFja2V0WzBdICYgRlRESV9TVEFUVVNfQjBfTUFTSzsKKwlpZiAoc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7CisJCXByaXYtPmRpZmZfc3RhdHVzIHw9IHN0YXR1cyBeIHByaXYtPnByZXZfc3RhdHVzOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwkJcHJpdi0+cHJldl9zdGF0dXMgPSBzdGF0dXM7CisJfQorCisJLyoKKwkgKiBBbHRob3VnaCB0aGUgZGV2aWNlIHVzZXMgYSBiaXRtYXNrIGFuZCBoZW5jZSBjYW4gaGF2ZSBtdWx0aXBsZQorCSAqIGVycm9ycyBvbiBhIHBhY2tldCAtIHRoZSBvcmRlciBoZXJlIHNldHMgdGhlIHByaW9yaXR5IHRoZSBlcnJvciBpcworCSAqIHJldHVybmVkIHRvIHRoZSB0dHkgbGF5ZXIuCisJICovCisJZmxhZyA9IFRUWV9OT1JNQUw7CisJaWYgKHBhY2tldFsxXSAmIEZURElfUlNfT0UpIHsKKwkJZmxhZyA9IFRUWV9PVkVSUlVOOworCQlkYmcoIk9WRVJSUlVOIGVycm9yIik7CisJfQorCWlmIChwYWNrZXRbMV0gJiBGVERJX1JTX0JJKSB7CisJCWZsYWcgPSBUVFlfQlJFQUs7CisJCWRiZygiQlJFQUsgcmVjZWl2ZWQiKTsKKwkJdXNiX3NlcmlhbF9oYW5kbGVfYnJlYWsocG9ydCk7CisJfQorCWlmIChwYWNrZXRbMV0gJiBGVERJX1JTX1BFKSB7CisJCWZsYWcgPSBUVFlfUEFSSVRZOworCQlkYmcoIlBBUklUWSBlcnJvciIpOworCX0KKwlpZiAocGFja2V0WzFdICYgRlRESV9SU19GRSkgeworCQlmbGFnID0gVFRZX0ZSQU1FOworCQlkYmcoIkZSQU1JTkcgZXJyb3IiKTsKKwl9CisKKwlsZW4gLT0gMjsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CS8qIHN0YXR1cyBvbmx5ICovCisJY2ggPSBwYWNrZXQgKyAyOworCisJaWYgKCEocG9ydC0+Y29uc29sZSAmJiBwb3J0LT5zeXNycSkgJiYgZmxhZyA9PSBUVFlfTk9STUFMKQorCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgY2gsIGxlbik7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgY2grKykgeworCQkJaWYgKCF1c2Jfc2VyaWFsX2hhbmRsZV9zeXNycV9jaGFyKHR0eSwgcG9ydCwgKmNoKSkKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksICpjaCwgZmxhZyk7CisJCX0KKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQgZnRkaV9wcm9jZXNzX3JlYWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSBwb3J0LT5yZWFkX3VyYjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJY2hhciAqZGF0YSA9IChjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGk7CisJaW50IGxlbjsKKwlpbnQgY291bnQgPSAwOworCisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGg7IGkgKz0gcHJpdi0+bWF4X3BhY2tldF9zaXplKSB7CisJCWxlbiA9IG1pbl90KGludCwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gaSwgcHJpdi0+bWF4X3BhY2tldF9zaXplKTsKKwkJY291bnQgKz0gZnRkaV9wcm9jZXNzX3BhY2tldCh0dHksIHBvcnQsIHByaXYsICZkYXRhW2ldLCBsZW4pOworCX0KKworCWlmIChjb3VudCkKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKK30KKwogc3RhdGljIHZvaWQgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OwotCXVuc2lnbmVkIGxvbmcgY291bnRyZWFkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwotCi0JaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPiAwKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJWQgIgotCQkJImFjdHVhbF9sZW5ndGggJWQgbnVtYmVyIG9mIHBhY2tldHMgJWRcbiIsIF9fZnVuY19fLAotCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgdHJhbnNmZXJfZmxhZ3MgJXhcbiIsIF9fZnVuY19fLAotCQkJdXJiLT50cmFuc2Zlcl9mbGFncyk7Ci0JfQotCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCWlmIChwb3J0LT5wb3J0LmNvdW50IDw9IDApCi0JCXJldHVybjsKLQotCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwotCWlmICghdHR5KSB7Ci0JCWRiZygiJXMgLSBiYWQgdHR5IHBvaW50ZXIgLSBleGl0aW5nIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlpZiAoIXByaXYpIHsKLQkJZGJnKCIlcyAtIGJhZCBwb3J0IHByaXZhdGUgZGF0YSBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHVyYiAhPSBwb3J0LT5yZWFkX3VyYikKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBOb3QgbXkgdXJiIVxuIiwgX19mdW5jX18pOwotCi0JaWYgKHN0YXR1cykgewotCQkvKiBUaGlzIHdpbGwgaGFwcGVuIGF0IGNsb3NlIGV2ZXJ5IHRpbWUgc28gaXQgaXMgYSBkYmcgbm90IGFuCi0JCSAgIGVyciAqLwotCQlkYmcoIih0aGlzIGlzIG9rIG9uIGNsb3NlKSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgc3RhdHVzKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogY291bnQgZGF0YSBieXRlcywgYnV0IG5vdCBzdGF0dXMgYnl0ZXMgKi8KLQljb3VudHJlYWQgPSB1cmItPmFjdHVhbF9sZW5ndGg7Ci0JY291bnRyZWFkIC09IDIgKiBESVZfUk9VTkRfVVAoY291bnRyZWFkLCBwcml2LT5tYXhfcGFja2V0X3NpemUpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhfYnl0ZXMgKz0gY291bnRyZWFkOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQotCWZ0ZGlfcHJvY2Vzc19yZWFkKCZwcml2LT5yeF93b3JrLndvcmspOwotb3V0OgotCXR0eV9rcmVmX3B1dCh0dHkpOwotfSAvKiBmdGRpX3JlYWRfYnVsa19jYWxsYmFjayAqLwotCi0KLXN0YXRpYyB2b2lkIGZ0ZGlfcHJvY2Vzc19yZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsgLyogZnRkaV9wcm9jZXNzX3JlYWQgKi8KLQlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmdGRpX3ByaXZhdGUsIHJ4X3dvcmsud29yayk7Ci0Jc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHByaXYtPnBvcnQ7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0JY2hhciBlcnJvcl9mbGFnOwotCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0KLQlpbnQgaTsKLQlpbnQgcmVzdWx0OwotCWludCBuZWVkX2ZsaXA7Ci0JaW50IHBhY2tldF9vZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlpZiAocG9ydC0+cG9ydC5jb3VudCA8PSAwKQotCQlyZXR1cm47Ci0KLQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKLQlpZiAoIXR0eSkgewotCQlkYmcoIiVzIC0gYmFkIHR0eSBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJCQkJX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIAotCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JaWYgKCFwcml2KSB7Ci0JCWRiZygiJXMgLSBiYWQgcG9ydCBwcml2YXRlIGRhdGEgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0OwotCX0KKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWZ0ZGlfcHJvY2Vzc19yZWFkKHBvcnQpOwogCi0JdXJiID0gcG9ydC0+cmVhZF91cmI7Ci0JaWYgKCF1cmIpIHsKLQkJZGJnKCIlcyAtIGJhZCByZWFkX3VyYiBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCi0JaWYgKHByaXYtPnJ4X3Byb2Nlc3NlZCkgewotCQlkYmcoIiVzIC0gYWxyZWFkeSBwcm9jZXNzZWQ6ICVkIGJ5dGVzLCAlZCByZW1haW4iLCBfX2Z1bmNfXywKLQkJCQlwcml2LT5yeF9wcm9jZXNzZWQsCi0JCQkJdXJiLT5hY3R1YWxfbGVuZ3RoIC0gcHJpdi0+cnhfcHJvY2Vzc2VkKTsKLQl9IGVsc2UgewotCQkvKiBUaGUgZmlyc3QgdHdvIGJ5dGVzIG9mIGV2ZXJ5IHJlYWQgcGFja2V0IGFyZSBzdGF0dXMgKi8KLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDIpCi0JCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAotCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKLQkJZWxzZQotCQkJZGJnKCJTdGF0dXMgb25seTogJTAzb28gJTAzb28iLCBkYXRhWzBdLCBkYXRhWzFdKTsKLQl9Ci0KLQotCS8qIFRPIERPIC0tIGNoZWNrIGZvciBodW5nIHVwIGxpbmUgYW5kIGhhbmRsZSBhcHByb3ByaWF0ZWx5OiAqLwotCS8qICAgc2VuZCBoYW5ndXAgICovCi0JLyogU2VlIGFjbS5jIC0geW91IGRvIGEgdHR5X2hhbmd1cCAgLSBlZyB0dHlfaGFuZ3VwKHR0eSkgKi8KLQkvKiBpZiBDRCBpcyBkcm9wcGVkIGFuZCB0aGUgbGluZSBpcyBub3QgQ0xPQ0FMIHRoZW4gd2Ugc2hvdWxkIGhhbmd1cCAqLwotCi0JbmVlZF9mbGlwID0gMDsKLQlmb3IgKHBhY2tldF9vZmZzZXQgPSBwcml2LT5yeF9wcm9jZXNzZWQ7Ci0JCXBhY2tldF9vZmZzZXQgPCB1cmItPmFjdHVhbF9sZW5ndGg7IHBhY2tldF9vZmZzZXQgKz0gcHJpdi0+bWF4X3BhY2tldF9zaXplKSB7Ci0JCWludCBsZW5ndGg7Ci0KLQkJLyogQ29tcGFyZSBuZXcgbGluZSBzdGF0dXMgdG8gdGhlIG9sZCBvbmUsIHNpZ25hbCBpZiBkaWZmZXJlbnQvCi0JCSAgIE4uQi4gcGFja2V0IG1heSBiZSBwcm9jZXNzZWQgbW9yZSB0aGFuIG9uY2UsIGJ1dCBkaWZmZXJlbmNlcwotCQkgICBhcmUgb25seSBwcm9jZXNzZWQgb25jZS4gICovCi0JCWNoYXIgbmV3X3N0YXR1cyA9IGRhdGFbcGFja2V0X29mZnNldCArIDBdICYKLQkJCQkJCUZURElfU1RBVFVTX0IwX01BU0s7Ci0JCWlmIChuZXdfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7Ci0JCQlwcml2LT5kaWZmX3N0YXR1cyB8PQotCQkJCW5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwotCQkJcHJpdi0+cHJldl9zdGF0dXMgPSBuZXdfc3RhdHVzOwotCQl9Ci0KLQkJbGVuZ3RoID0gbWluX3QodTMyLCBwcml2LT5tYXhfcGFja2V0X3NpemUsIHVyYi0+YWN0dWFsX2xlbmd0aC1wYWNrZXRfb2Zmc2V0KS0yOwotCQlpZiAobGVuZ3RoIDwgMCkgewotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBiYWQgcGFja2V0IGxlbmd0aDogJWRcbiIsCi0JCQkJX19mdW5jX18sIGxlbmd0aCsyKTsKLQkJCWxlbmd0aCA9IDA7Ci0JCX0KLQotCQlpZiAocHJpdi0+cnhfZmxhZ3MgJiBUSFJPVFRMRUQpIHsKLQkJCWRiZygiJXMgLSB0aHJvdHRsZWQiLCBfX2Z1bmNfXyk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBsZW5ndGgpIDwgbGVuZ3RoKSB7Ci0JCQkvKiBicmVhayBvdXQgJiB3YWl0IGZvciB0aHJvdHRsaW5nL3VudGhyb3R0bGluZyB0bwotCQkJICAgaGFwcGVuICovCi0JCQlkYmcoIiVzIC0gcmVjZWl2ZSByb29tIGxvdyIsIF9fZnVuY19fKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogSGFuZGxlIGVycm9ycyBhbmQgYnJlYWsgKi8KLQkJZXJyb3JfZmxhZyA9IFRUWV9OT1JNQUw7Ci0JCS8qIEFsdGhvdWdoIHRoZSBkZXZpY2UgdXNlcyBhIGJpdG1hc2sgYW5kIGhlbmNlIGNhbiBoYXZlCi0JCSAgIG11bHRpcGxlIGVycm9ycyBvbiBhIHBhY2tldCAtIHRoZSBvcmRlciBoZXJlIHNldHMgdGhlCi0JCSAgIHByaW9yaXR5IHRoZSBlcnJvciBpcyByZXR1cm5lZCB0byB0aGUgdHR5IGxheWVyICAqLwotCi0JCWlmIChkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX09FKSB7Ci0JCQllcnJvcl9mbGFnID0gVFRZX09WRVJSVU47Ci0JCQlkYmcoIk9WRVJSUlVOIGVycm9yIik7Ci0JCX0KLQkJaWYgKGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfQkkpIHsKLQkJCWVycm9yX2ZsYWcgPSBUVFlfQlJFQUs7Ci0JCQlkYmcoIkJSRUFLIHJlY2VpdmVkIik7Ci0JCQl1c2Jfc2VyaWFsX2hhbmRsZV9icmVhayhwb3J0KTsKLQkJfQotCQlpZiAoZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19QRSkgewotCQkJZXJyb3JfZmxhZyA9IFRUWV9QQVJJVFk7Ci0JCQlkYmcoIlBBUklUWSBlcnJvciIpOwotCQl9Ci0JCWlmIChkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX0ZFKSB7Ci0JCQllcnJvcl9mbGFnID0gVFRZX0ZSQU1FOwotCQkJZGJnKCJGUkFNSU5HIGVycm9yIik7Ci0JCX0KLQkJaWYgKGxlbmd0aCA+IDApIHsKLQkJCWZvciAoaSA9IDI7IGkgPCBsZW5ndGgrMjsgaSsrKSB7Ci0JCQkJLyogTm90ZSB0aGF0IHRoZSBlcnJvciBmbGFnIGlzIGR1cGxpY2F0ZWQgZm9yCi0JCQkJICAgZXZlcnkgY2hhcmFjdGVyIHJlY2VpdmVkIHNpbmNlIHdlIGRvbid0IGtub3cKLQkJCQkgICB3aGljaCBjaGFyYWN0ZXIgaXQgYXBwbGllZCB0byAqLwotCQkJCWlmICghdXNiX3NlcmlhbF9oYW5kbGVfc3lzcnFfY2hhcih0dHksIHBvcnQsCi0JCQkJCQlkYXRhW3BhY2tldF9vZmZzZXQgKyBpXSkpCi0JCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwKLQkJCQkJCWRhdGFbcGFja2V0X29mZnNldCArIGldLAotCQkJCQkJZXJyb3JfZmxhZyk7Ci0JCQl9Ci0JCQluZWVkX2ZsaXAgPSAxOwotCQl9Ci0KLSNpZmRlZiBOT1RfQ09SUkVDVF9CVVRfS0VFUElOR19JVF9GT1JfTk9XCi0JCS8qIGlmIGEgcGFyaXR5IGVycm9yIGlzIGRldGVjdGVkIHlvdSBnZXQgc3RhdHVzIHBhY2tldHMgZm9yZXZlcgotCQkgICB1bnRpbCBhIGNoYXJhY3RlciBpcyBzZW50IHdpdGhvdXQgYSBwYXJpdHkgZXJyb3IuCi0JCSAgIFRoaXMgZG9lc24ndCB3b3JrIHdlbGwgc2luY2UgdGhlIGFwcGxpY2F0aW9uIHJlY2VpdmVzIGEKLQkJICAgbmV2ZXIgZW5kaW5nIHN0cmVhbSBvZiBiYWQgZGF0YSAtIGV2ZW4gdGhvdWdoIG5ldyBkYXRhCi0JCSAgIGhhc24ndCBiZWVuIHNlbnQuIFRoZXJlZm9yZSBJIChiaWxsKSBoYXZlIHRha2VuIHRoaXMgb3V0LgotCQkgICBIb3dldmVyIC0gdGhpcyBtaWdodCBtYWtlIHNlbnNlIGZvciBmcmFtaW5nIGVycm9ycyBhbmQgc28gb24KLQkJICAgc28gSSBhbSBsZWF2aW5nIHRoZSBjb2RlIGluIGZvciBub3cuCi0JCSovCi0JCWVsc2UgewotCQkJaWYgKGVycm9yX2ZsYWcgIT0gVFRZX05PUk1BTCkgewotCQkJCWRiZygiZXJyb3JfZmxhZyBpcyBub3Qgbm9ybWFsIik7Ci0JCQkJLyogSW4gdGhpcyBjYXNlIGl0IGlzIGp1c3Qgc3RhdHVzIC0gaWYgdGhhdCBpcwotCQkJCSAgIGFuIGVycm9yIHNlbmQgYSBiYWQgY2hhcmFjdGVyICovCi0JCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKQotCQkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMHhmZiwgZXJyb3JfZmxhZyk7Ci0JCQkJbmVlZF9mbGlwID0gMTsKLQkJCX0KLQkJfQotI2VuZGlmCi0JfSAvKiAiZm9yKHBhY2tldF9vZmZzZXQ9MC4uLiIgKi8KLQotCS8qIExvdyBsYXRlbmN5ICovCi0JaWYgKG5lZWRfZmxpcCkKLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQotCWlmIChwYWNrZXRfb2Zmc2V0IDwgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCS8qIG5vdCBjb21wbGV0ZWx5IHByb2Nlc3NlZCAtIHJlY29yZCBwcm9ncmVzcyAqLwotCQlwcml2LT5yeF9wcm9jZXNzZWQgPSBwYWNrZXRfb2Zmc2V0OwotCQlkYmcoIiVzIC0gaW5jb21wbGV0ZSwgJWQgYnl0ZXMgcHJvY2Vzc2VkLCAlZCByZW1haW4iLAotCQkJCV9fZnVuY19fLCBwYWNrZXRfb2Zmc2V0LAotCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCAtIHBhY2tldF9vZmZzZXQpOwotCQkvKiBjaGVjayBpZiB3ZSB3ZXJlIHRocm90dGxlZCB3aGlsZSBwcm9jZXNzaW5nICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JCWlmIChwcml2LT5yeF9mbGFncyAmIFRIUk9UVExFRCkgewotCQkJcHJpdi0+cnhfZmxhZ3MgfD0gQUNUVUFMTFlfVEhST1RUTEVEOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCQkJZGJnKCIlcyAtIGRlZmVycmluZyByZW1haW5kZXIgdW50aWwgdW50aHJvdHRsZWQiLAotCQkJCQlfX2Z1bmNfXyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JCS8qIGlmIHRoZSBwb3J0IGlzIGNsb3NlZCBzdG9wIHRyeWluZyB0byByZWFkICovCi0JCWlmIChwb3J0LT5wb3J0LmNvdW50ID4gMCkKLQkJCS8qIGRlbGF5IHByb2Nlc3Npbmcgb2YgcmVtYWluZGVyICovCi0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPnJ4X3dvcmssIDEpOwotCQllbHNlCi0JCQlkYmcoIiVzIC0gcG9ydCBpcyBjbG9zZWQiLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIHVyYiBpcyBjb21wbGV0ZWx5IHByb2Nlc3NlZCAqLwotCXByaXYtPnJ4X3Byb2Nlc3NlZCA9IDA7Ci0KLQkvKiBpZiB0aGUgcG9ydCBpcyBjbG9zZWQgc3RvcCB0cnlpbmcgdG8gcmVhZCAqLwotCWlmIChwb3J0LT5wb3J0LmNvdW50ID4gMCkgewotCQkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCi0JCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKLQkJCXVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKLQkJCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwotCi0JCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKLQl9Ci1vdXQ6Ci0JdHR5X2tyZWZfcHV0KHR0eSk7Ci19IC8qIGZ0ZGlfcHJvY2Vzc19yZWFkICovCi0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXBvcnQtPnRocm90dGxlZCA9IHBvcnQtPnRocm90dGxlX3JlcTsKKwlpZiAoIXBvcnQtPnRocm90dGxlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJCWZ0ZGlfc3VibWl0X3JlYWRfdXJiKHBvcnQsIEdGUF9BVE9NSUMpOworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Cit9CiAKIHN0YXRpYyB2b2lkIGZ0ZGlfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKQEAgLTI2MDksMzMgKzI0NDcsMzEgQEAKIHN0YXRpYyB2b2lkIGZ0ZGlfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQlwcml2LT5yeF9mbGFncyB8PSBUSFJPVFRMRUQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJcG9ydC0+dGhyb3R0bGVfcmVxID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiB9CiAKLQotc3RhdGljIHZvaWQgZnRkaV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit2b2lkIGZ0ZGlfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JaW50IGFjdHVhbGx5X3Rocm90dGxlZDsKKwlpbnQgd2FzX3Rocm90dGxlZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JYWN0dWFsbHlfdGhyb3R0bGVkID0gcHJpdi0+cnhfZmxhZ3MgJiBBQ1RVQUxMWV9USFJPVFRMRUQ7Ci0JcHJpdi0+cnhfZmxhZ3MgJj0gfihUSFJPVFRMRUQgfCBBQ1RVQUxMWV9USFJPVFRMRUQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXdhc190aHJvdHRsZWQgPSBwb3J0LT50aHJvdHRsZWQ7CisJcG9ydC0+dGhyb3R0bGVkID0gcG9ydC0+dGhyb3R0bGVfcmVxID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoYWN0dWFsbHlfdGhyb3R0bGVkKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPnJ4X3dvcmssIDApOworCS8qIFJlc3VibWl0IHVyYiBpZiB0aHJvdHRsZWQgYW5kIG9wZW4uICovCisJaWYgKHdhc190aHJvdHRsZWQgJiYgdGVzdF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+cG9ydC5mbGFncykpCisJCWZ0ZGlfc3VibWl0X3JlYWRfdXJiKHBvcnQsIEdGUF9LRVJORUwpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBmdGRpX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCmluZGV4IDIwNDMyZDMuLjVhYzkwMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwpAQCAtMTM5MCwxNCArMTM5MCwxMyBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAkvKiBzZXQgZmxhZywgZGF0YSByZWNlaXZlZCB3aWxsIGJlIHB1dCBpbnRvIGEgcXVldWUKIAkgICBmb3IgbGF0ZXIgcHJvY2Vzc2luZyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmZ2FybWluX2RhdGFfcC0+bG9jayk7CiAJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfUVVFVUlOR3xGTEFHU19USFJPVFRMRUQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmZ2FybWluX2RhdGFfcC0+bG9jayk7CiB9CiAKIApAQCAtMTQwNSwxMyArMTQwNCwxMiBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzdGF0dXM7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmZ2FybWluX2RhdGFfcC0+bG9jayk7CiAJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJj0gfkZMQUdTX1RIUk9UVExFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZnYXJtaW5fZGF0YV9wLT5sb2NrKTsKIAogCS8qIGluIG5hdGl2ZSBtb2RlIHNlbmQgcXVldWVkIGRhdGEgdG8gdHR5LCBpbgogCSAgIHNlcmlhbCBtb2RlIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZSBoZXJlICovCkBAIC0xNDE5LDcgKzE0MTcsNyBAQAogCQlnYXJtaW5fZmx1c2hfcXVldWUoZ2FybWluX2RhdGFfcCk7CiAKIAlpZiAoMCAhPSAoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19CVUxLX0lOX0FDVElWRSkpIHsKLQkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJCWlmIChzdGF0dXMpCiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCiAJCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCBkZWJhMDhjLi5iYmUwMDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTU0Niw3ICs1NDYsNyBAQAogCiAJaWYgKHdhc190aHJvdHRsZWQpIHsKIAkJLyogUmVzdW1lIHJlYWRpbmcgZnJvbSBkZXZpY2UgKi8KLQkJdXNiX3NlcmlhbF9nZW5lcmljX3Jlc3VibWl0X3JlYWRfdXJiKHBvcnQsIEdGUF9LRVJORUwpOworCQlmbHVzaF9hbmRfcmVzdWJtaXRfcmVhZF91cmIocG9ydCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwppbmRleCAyNGZjYzY0Li5kNjIzMWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTk2Niw2ICs5NjYsMTUgQEAKIHN0YXRpYyBpbnQgaXBhcV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCS8qIFNvbWUgb2YgdGhlIGRldmljZXMgaW4gaXBhcV9pZF90YWJsZVtdIGFyZSBjb21wb3NpdGUsIGFuZCB3ZQorCSAqIHNob3VsZG4ndCBiaW5kIHRvIGFsbCB0aGUgaW50ZXJmYWNlcy4gIFRoaXMgdGVzdCB3aWxsIHJ1bGUgb3V0CisJICogc29tZSBvYnZpb3VzbHkgaW52YWxpZCBwb3NzaWJpbGl0aWVzLgorCSAqLworCWlmIChzZXJpYWwtPm51bV9idWxrX2luIDwgc2VyaWFsLT5udW1fcG9ydHMgfHwKKwkJCXNlcmlhbC0+bnVtX2J1bGtfb3V0IDwgc2VyaWFsLT5udW1fcG9ydHMpCisJCXJldHVybiAtRU5PREVWOworCiAJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CiAJCS8qCiAJCSAqIEZJWE1FOiBIUCBpUGFxIHJ4MzcxNSwgcG9zc2libHkgb3RoZXJzLCBoYXZlIDEgY29uZmlnIHRoYXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKaW5kZXggMjU3YzE2Yy4uMTI5NmEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogCS8qIGp1c3QgcmVzdGFydCB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQgVVJCICovCiAJZGJnKCJrZXlzcGFuX3BkYV9yeF91bnRocm90dGxlIHBvcnQgJWQiLCBwb3J0LT5udW1iZXIpOwogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCWlmICh1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKSkKKwlpZiAodXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCkpCiAJCWRiZygiIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSBmYWlsZWQiKTsKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwppbmRleCBmNzM3MzM3Li4zYTc4NzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKQEAgLTk1MSw3ICs5NTEsNyBAQAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KQogCQlkZXZfZXJyKCZwb3J0LT5kZXYsCiAJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCmluZGV4IGFkNDk5OGIuLmNkMDA5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCkBAIC03NzcsMjAgKzc3NywxOSBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGNvbnRyb2xfc3RhdGU7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT5yeF9mbGFncyB8PSBUSFJPVFRMRUQ7CiAJaWYgKENfQ1JUU0NUUyh0dHkpKSB7CiAJCXByaXYtPmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX1JUUzsKIAkJY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAkJKHZvaWQpIG1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHBvcnQtPnNlcmlhbCwgY29udHJvbF9zdGF0ZSk7CiAJfSBlbHNlIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCX0KIH0KIApAQCAtNzk5LDIwICs3OTgsMTkgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJaWYgKChwcml2LT5yeF9mbGFncyAmIFRIUk9UVExFRCkgJiYgQ19DUlRTQ1RTKHR0eSkpIHsKIAkJcHJpdi0+cnhfZmxhZ3MgJj0gflRIUk9UVExFRDsKIAkJcHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBUSU9DTV9SVFM7CiAJCWNvbnRyb2xfc3RhdGUgPSBwcml2LT5jb250cm9sX3N0YXRlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJCSh2b2lkKSBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybChwb3J0LT5zZXJpYWwsIGNvbnRyb2xfc3RhdGUpOwogCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCmluZGV4IDEwODVhNTcuLjgwZjU5YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwpAQCAtMzE0LDIxICszMTQsMjQgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgb3B0aWNvbl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJlc3VsdDsKKwlpbnQgcmVzdWx0LCB3YXNfdGhyb3R0bGVkOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJcHJpdi0+dGhyb3R0bGVkID0gZmFsc2U7CisJd2FzX3Rocm90dGxlZCA9IHByaXYtPmFjdHVhbGx5X3Rocm90dGxlZDsKIAlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSBmYWxzZTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlwcml2LT5idWxrX3JlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5idWxrX3JlYWRfdXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmVzdWx0KQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsCi0JCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJaWYgKHdhc190aHJvdHRsZWQpIHsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+YnVsa19yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAogCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCX0KIH0KIAogc3RhdGljIGludCBvcHRpY29uX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IGY2NmUzOTguLjMxOWFhZjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0xNjUsNiArMTY1LDcgQEAKICNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRTE0M0QJCQkweDE0M0QKICNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRTE0M0UJCQkweDE0M0UKICNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRTE0M0YJCQkweDE0M0YKKyNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRTE0QUMJCQkweDE0QUMKIAogI2RlZmluZSBRVUFOVEFfVkVORE9SX0lECQkJMHgwNDA4CiAjZGVmaW5lIFFVQU5UQV9QUk9EVUNUX1ExMDEJCQkweEVBMDIKQEAgLTMwNyw2ICszMDgsNyBAQAogCiAjZGVmaW5lIERMSU5LX1ZFTkRPUl9JRAkJCQkweDExODYKICNkZWZpbmUgRExJTktfUFJPRFVDVF9EV01fNjUyCQkJMHgzZTA0CisjZGVmaW5lIERMSU5LX1BST0RVQ1RfRFdNXzY1Ml9VNQkJMHhjZTE2CiAKICNkZWZpbmUgUUlTREFfVkVORE9SX0lECQkJCTB4MWRhNQogI2RlZmluZSBRSVNEQV9QUk9EVUNUX0gyMV80NTEyCQkJMHg0NTEyCkBAIC0zMTQsMTAgKzMxNiwxNCBAQAogI2RlZmluZSBRSVNEQV9QUk9EVUNUX0gyMF80NTE1CQkJMHg0NTE1CiAjZGVmaW5lIFFJU0RBX1BST0RVQ1RfSDIwXzQ1MTkJCQkweDQ1MTkKIAorLyogVExBWVRFQ0ggUFJPRFVDVFMgKi8KKyNkZWZpbmUgVExBWVRFQ0hfVkVORE9SX0lECQkJMHgyMEI5CisjZGVmaW5lIFRMQVlURUNIX1BST0RVQ1RfVEVVODAwCQkJMHgxNjgyCiAKIC8qIFRPU0hJQkEgUFJPRFVDVFMgKi8KICNkZWZpbmUgVE9TSElCQV9WRU5ET1JfSUQJCQkweDA5MzAKICNkZWZpbmUgVE9TSElCQV9QUk9EVUNUX0hTRFBBX01JTklDQVJECQkweDEzMDIKKyNkZWZpbmUgVE9TSElCQV9QUk9EVUNUX0c0NTAJCQkweDBkNDUKIAogI2RlZmluZSBBTElOS19WRU5ET1JfSUQJCQkJMHgxZTBlCiAjZGVmaW5lIEFMSU5LX1BST0RVQ1RfM0dVCQkJMHg5MjAwCkBAIC0zMjYsNiArMzMyLDkgQEAKICNkZWZpbmUgQUxDQVRFTF9WRU5ET1JfSUQJCQkweDFiYmIKICNkZWZpbmUgQUxDQVRFTF9QUk9EVUNUX1gwNjBTCQkJMHgwMDAwCiAKKy8qIEFpcnBsdXMgcHJvZHVjdHMgKi8KKyNkZWZpbmUgQUlSUExVU19WRU5ET1JfSUQJCQkweDEwMTEKKyNkZWZpbmUgQUlSUExVU19QUk9EVUNUX01DRDY1MAkJCTB4MzE5OAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgb3B0aW9uX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9DT0xUKSB9LApAQCAtNDI0LDYgKzQzMyw3IEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzRCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDNFLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0M0YsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNEFDKSB9LAogCXsgVVNCX0RFVklDRShBTU9JX1ZFTkRPUl9JRCwgQU1PSV9QUk9EVUNUXzk1MDgpIH0sCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1Y2NDApIH0sIC8qIE5vdmF0ZWwgTWVybGluIFY2NDAvWFY2MjAgKi8KIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjYyMCkgfSwgLyogTm92YXRlbCBNZXJsaW4gVjYyMC9TNjIwICovCkBAIC01NzcsMTQgKzU4NywxOCBAQAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQUMyNzI2LCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRShCRU5RX1ZFTkRPUl9JRCwgQkVOUV9QUk9EVUNUX0gxMCkgfSwKIAl7IFVTQl9ERVZJQ0UoRExJTktfVkVORE9SX0lELCBETElOS19QUk9EVUNUX0RXTV82NTIpIH0sCisJeyBVU0JfREVWSUNFKEFMSU5LX1ZFTkRPUl9JRCwgRExJTktfUFJPRFVDVF9EV01fNjUyX1U1KSB9LCAvKiBZZXMsIEFMSU5LX1ZFTkRPUl9JRCAqLwogCXsgVVNCX0RFVklDRShRSVNEQV9WRU5ET1JfSUQsIFFJU0RBX1BST0RVQ1RfSDIxXzQ1MTIpIH0sCiAJeyBVU0JfREVWSUNFKFFJU0RBX1ZFTkRPUl9JRCwgUUlTREFfUFJPRFVDVF9IMjFfNDUyMykgfSwKIAl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMF80NTE1KSB9LAogCXsgVVNCX0RFVklDRShRSVNEQV9WRU5ET1JfSUQsIFFJU0RBX1BST0RVQ1RfSDIwXzQ1MTkpIH0sCisJeyBVU0JfREVWSUNFKFRPU0hJQkFfVkVORE9SX0lELCBUT1NISUJBX1BST0RVQ1RfRzQ1MCkgfSwKIAl7IFVTQl9ERVZJQ0UoVE9TSElCQV9WRU5ET1JfSUQsIFRPU0hJQkFfUFJPRFVDVF9IU0RQQV9NSU5JQ0FSRCApIH0sIC8qIFRvc2hpYmEgM0cgSFNEUEEgPT0gTm92YXRlbCBFeHBlZGl0ZSBFVTg3MEQgTWluaUNhcmQgKi8KIAl7IFVTQl9ERVZJQ0UoQUxJTktfVkVORE9SX0lELCAweDkwMDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhBTElOS19WRU5ET1JfSUQsIEFMSU5LX1BST0RVQ1RfM0dVLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRShBTENBVEVMX1ZFTkRPUl9JRCwgQUxDQVRFTF9QUk9EVUNUX1gwNjBTKSB9LAorCXsgVVNCX0RFVklDRShBSVJQTFVTX1ZFTkRPUl9JRCwgQUlSUExVU19QUk9EVUNUX01DRDY1MCkgfSwKKwl7IFVTQl9ERVZJQ0UoVExBWVRFQ0hfVkVORE9SX0lELCBUTEFZVEVDSF9QUk9EVUNUX1RFVTgwMCkgfSwKIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgb3B0aW9uX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwppbmRleCAwZjRhNzBjZS4uYzY0NGUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAogCWRiZygiJXMoKTogc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19mdW5jX18pOwogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQgIT0gMCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcygpOiB1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCIKIAkJCQkiIHdpdGggZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwpAQCAtMzM1LDcgKzMzNSw3IEBACiAKIAkJZGJnKCIlcygpOiBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIiLCBfX2Z1bmNfXyk7CiAJCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX05PSU8pOwogCQlpZiAocmVzdWx0ICE9IDApIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkIgogCQkJCSIgd2l0aCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CkBAIC0zNDksNyArMzQ5LDcgQEAKIAogCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNvdW50OwogCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9OT0lPKTsKIAlpZiAocmVzdWx0ICE9IDApIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQiCiAJCQkgICAgICAgIiB3aXRoIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCAxMTI4ZTAxLi45ZWMxYTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC0xMDQ2LDEzICsxMDQ2LDE1IEBACiAJLyogb3ZlcnJ1biBpcyBzcGVjaWFsLCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgY2hhciAqLwogCWlmIChsaW5lX3N0YXR1cyAmIFVBUlRfT1ZFUlJVTl9FUlJPUikKIAkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfT1ZFUlJVTik7Ci0JaWYgKHBvcnQtPmNvbnNvbGUgJiYgcG9ydC0+c3lzcnEpIHsKKworCWlmICh0dHlfZmxhZyA9PSBUVFlfTk9STUFMICYmICEocG9ydC0+Y29uc29sZSAmJiBwb3J0LT5zeXNycSkpCisJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCWVsc2UgewogCQlpbnQgaTsKIAkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgKytpKQogCQkJaWYgKCF1c2Jfc2VyaWFsX2hhbmRsZV9zeXNycV9jaGFyKHR0eSwgcG9ydCwgZGF0YVtpXSkpCiAJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCB0dHlfZmxhZyk7Ci0JfSBlbHNlCi0JCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCX0KIAl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggOGMwNzViMi4uNTAxOTMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwpAQCAtMTcsNyArMTcsNyBAQAogICBXaG9tIGJhc2VkIGhpcyBvbiB0aGUgS2V5c3BhbiBkcml2ZXIgYnkgSHVnaCBCbGVtaW5ncyA8aHVnaEBibGVtaW5ncy5vcmc+CiAqLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2LjEuMy43IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidi4xLjMuOCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiS2V2aW4gTGxveWQsIEVsaW5hIFBhc2hldmEsIE1hdHRoZXcgU2FmYXIsIFJvcnkgRmlsZXIiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgRHJpdmVyIGZvciBTaWVycmEgV2lyZWxlc3MgVVNCIG1vZGVtcyIKIApAQCAtMjk2LDcgKzI5Niw2IEBACiAJaW50IGRzcl9zdGF0ZTsKIAlpbnQgZGNkX3N0YXRlOwogCWludCByaV9zdGF0ZTsKLQogCXVuc2lnbmVkIGludCBvcGVuZWQ6MTsKIH07CiAKQEAgLTMwNiw2ICszMDUsOCBAQAogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAlfX3UxNiBpbnRlcmZhY2UgPSAwOwogCWludCB2YWwgPSAwOworCWludCBkb19zZW5kID0gMDsKKwlpbnQgcmV0dmFsOwogCiAJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIApAQCAtMzI0LDEwICszMjUsNyBAQAogCQkgKi8KIAkJaWYgKHBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKIAkJCS8qIHNlbmQgY29udHJvbCBtZXNzYWdlICovCi0JCQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAotCQkJCXVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkJMHgyMiwgMHgyMSwgdmFsLCBpbnRlcmZhY2UsCi0JCQkJTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCQkJZG9fc2VuZCA9IDE7CiAJCX0KIAl9CiAKQEAgLTMzOSwxMiArMzM3LDE4IEBACiAJCQlpbnRlcmZhY2UgPSAxOwogCQllbHNlIGlmIChwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MgPT0gNSkKIAkJCWludGVyZmFjZSA9IDI7Ci0JCXJldHVybiB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCi0JCQl1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAotCQkJMHgyMiwgMHgyMSwgdmFsLCBpbnRlcmZhY2UsCi0JCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisKKwkJZG9fc2VuZCA9IDE7CiAJfQotCXJldHVybiAwOworCWlmICghZG9fc2VuZCkKKwkJcmV0dXJuIDA7CisKKwl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJMHgyMiwgMHgyMSwgdmFsLCBpbnRlcmZhY2UsIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOworCisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgc2llcnJhX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC03NzMsOCArNzc3LDExIEBACiAKIAlpZiAoc2VyaWFsLT5kZXYpIHsKIAkJbXV0ZXhfbG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKLQkJaWYgKCFzZXJpYWwtPmRpc2Nvbm5lY3RlZCkKKwkJaWYgKCFzZXJpYWwtPmRpc2Nvbm5lY3RlZCkgeworCQkJc2VyaWFsLT5pbnRlcmZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOworCQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKIAkJCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOworCQl9CiAJCW11dGV4X3VubG9jaygmc2VyaWFsLT5kaXNjX211dGV4KTsKIAkJc3Bpbl9sb2NrX2lycSgmaW50ZmRhdGEtPnN1c3BfbG9jayk7CiAJCXBvcnRkYXRhLT5vcGVuZWQgPSAwOwpAQCAtNzg4LDggKzc5NSw2IEBACiAJCQlzaWVycmFfcmVsZWFzZV91cmIocG9ydGRhdGEtPmluX3VyYnNbaV0pOwogCQkJcG9ydGRhdGEtPmluX3VyYnNbaV0gPSBOVUxMOwogCQl9Ci0JCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7Ci0JCXNlcmlhbC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKIAl9CiB9CiAKQEAgLTgyNyw2ICs4MzIsOCBAQAogCWlmIChlcnIpIHsKIAkJLyogZ2V0IHJpZCBvZiBldmVyeXRoaW5nIGFzIGluIGNsb3NlICovCiAJCXNpZXJyYV9jbG9zZShwb3J0KTsKKwkJLyogcmVzdG9yZSBiYWxhbmNlIGZvciBhdXRvcG0gKi8KKwkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJc2llcnJhX3NlbmRfc2V0dXAocG9ydCk7CkBAIC05MTUsNyArOTIyLDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB2b2lkIHN0b3BfcmVhZF93cml0ZV91cmJzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7Ci0JaW50IGksIGo7CisJaW50IGk7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKQEAgLTkyMyw4ICs5MzAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCQlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7IGorKykKLQkJCXVzYl9raWxsX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tqXSk7CisJCXNpZXJyYV9zdG9wX3J4X3VyYnMocG9ydCk7CiAJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnBvcnRkYXRhLT5hY3RpdmUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwppbmRleCBjYjdlOTVmLi5iMjgyYzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCkBAIC0xNjUsMzQgKzE2NSwzNiBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPnRocm90dGxlZCA9IHRydWU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHN5bWJvbF91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJlc3VsdDsKKwlib29sIHdhc190aHJvdHRsZWQ7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT50aHJvdHRsZWQgPSBmYWxzZTsKKwl3YXNfdGhyb3R0bGVkID0gcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkOwogCXByaXYtPmFjdHVhbGx5X3Rocm90dGxlZCA9IGZhbHNlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCiAJcHJpdi0+aW50X3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+aW50X3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCWlmICh3YXNfdGhyb3R0bGVkKSB7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmludF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc3ltYm9sX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IGZmNzVhMzUuLmJkM2ZhN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMTU2LDcgKzE1Niw4IEBACiAJaWYgKHNlcmlhbC0+bWlub3IgIT0gU0VSSUFMX1RUWV9OT19NSU5PUikKIAkJcmV0dXJuX3NlcmlhbChzZXJpYWwpOwogCi0Jc2VyaWFsLT50eXBlLT5yZWxlYXNlKHNlcmlhbCk7CisJaWYgKHNlcmlhbC0+YXR0YWNoZWQpCisJCXNlcmlhbC0+dHlwZS0+cmVsZWFzZShzZXJpYWwpOwogCiAJLyogTm93IHRoYXQgbm90aGluZyBpcyB1c2luZyB0aGUgcG9ydHMsIHRoZXkgY2FuIGJlIGZyZWVkICovCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnM7ICsraSkgewpAQCAtMTkyLDcgKzE5Myw3IEBACiAgKiBUaGlzIGlzIHRoZSBmaXJzdCBwbGFjZSBhIG5ldyB0dHkgZ2V0cyB1c2VkLiAgSGVuY2UgdGhpcyBpcyB3aGVyZSB3ZQogICogYWNxdWlyZSByZWZlcmVuY2VzIHRvIHRoZSB1c2Jfc2VyaWFsIHN0cnVjdHVyZSBhbmQgdGhlIGRyaXZlciBtb2R1bGUsCiAgKiB3aGVyZSB3ZSBzdG9yZSBhIHBvaW50ZXIgdG8gdGhlIHBvcnQsIGFuZCB3aGVyZSB3ZSBkbyBhbiBhdXRvcmVzdW1lLgotICogQWxsIHRoZXNlIGFjdGlvbnMgYXJlIHJldmVyc2VkIGluIHNlcmlhbF9yZWxlYXNlKCkuCisgKiBBbGwgdGhlc2UgYWN0aW9ucyBhcmUgcmV2ZXJzZWQgaW4gc2VyaWFsX2NsZWFudXAoKS4KICAqLwogc3RhdGljIGludCBzZXJpYWxfaW5zdGFsbChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewpAQCAtMzM5LDE1ICszNDAsMTYgQEAKIH0KIAogLyoqCi0gKiBzZXJpYWxfcmVsZWFzZSAtIGZyZWUgcmVzb3VyY2VzIHBvc3QgY2xvc2UvaGFuZ3VwCisgKiBzZXJpYWxfY2xlYW51cCAtIGZyZWUgcmVzb3VyY2VzIHBvc3QgY2xvc2UvaGFuZ3VwCiAgKiBAcG9ydDogcG9ydCB0byBmcmVlIHVwCiAgKgogICogRG8gdGhlIHJlc291cmNlIGZyZWVpbmcgYW5kIHJlZmNvdW50IGRyb3BwaW5nIGZvciB0aGUgcG9ydC4KICAqIEF2b2lkIGZyZWVpbmcgdGhlIGNvbnNvbGUuCiAgKgotICogQ2FsbGVkIHdoZW4gdGhlIGxhc3QgdHR5IGtyZWYgaXMgZHJvcHBlZC4KKyAqIENhbGxlZCBhc3luY2hyb25vdXNseSBhZnRlciB0aGUgbGFzdCB0dHkga3JlZiBpcyBkcm9wcGVkLAorICogYW5kIHRoZSB0dHkgbGF5ZXIgaGFzIGFscmVhZHkgZG9uZSB0aGUgdHR5X3NodXRkb3duKHR0eSk7CiAgKi8KLXN0YXRpYyB2b2lkIHNlcmlhbF9yZWxlYXNlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCitzdGF0aWMgdm9pZCBzZXJpYWxfY2xlYW51cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CkBAIC0zNjEsOSArMzYzLDYgQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQkvKiBTdGFuZGFyZCBzaHV0ZG93biBwcm9jZXNzaW5nICovCi0JdHR5X3NodXRkb3duKHR0eSk7Ci0KIAl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKIAogCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKQEAgLTEwNjEsMTIgKzEwNjAsMTUgQEAKIAkJbW9kdWxlX3B1dCh0eXBlLT5kcml2ZXIub3duZXIpOwogCQlpZiAocmV0dmFsIDwgMCkKIAkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCXNlcmlhbC0+YXR0YWNoZWQgPSAxOwogCQlpZiAocmV0dmFsID4gMCkgewogCQkJLyogcXVpZXRseSBhY2NlcHQgdGhpcyBkZXZpY2UsIGJ1dCBkb24ndCBiaW5kIHRvIGEKIAkJCSAgIHNlcmlhbCBwb3J0IGFzIGl0J3MgYWJvdXQgdG8gZGlzYXBwZWFyICovCiAJCQlzZXJpYWwtPm51bV9wb3J0cyA9IDA7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KKwl9IGVsc2UgeworCQlzZXJpYWwtPmF0dGFjaGVkID0gMTsKIAl9CiAKIAlpZiAoZ2V0X2ZyZWVfc2VyaWFsKHNlcmlhbCwgbnVtX3BvcnRzLCAmbWlub3IpID09IE5VTEwpIHsKQEAgLTExNjYsOCArMTE2OCwxMCBAQAogCiAJaWYgKHNlcmlhbC0+dHlwZS0+c3VzcGVuZCkgewogCQlyID0gc2VyaWFsLT50eXBlLT5zdXNwZW5kKHNlcmlhbCwgbWVzc2FnZSk7Ci0JCWlmIChyIDwgMCkKKwkJaWYgKHIgPCAwKSB7CisJCQlzZXJpYWwtPnN1c3BlbmRpbmcgPSAwOwogCQkJZ290byBlcnJfb3V0OworCQl9CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKQEAgLTEyMTAsNyArMTIxNCw3IEBACiAJLmNoYXJzX2luX2J1ZmZlciA9CXNlcmlhbF9jaGFyc19pbl9idWZmZXIsCiAJLnRpb2NtZ2V0ID0JCXNlcmlhbF90aW9jbWdldCwKIAkudGlvY21zZXQgPQkJc2VyaWFsX3Rpb2Ntc2V0LAotCS5zaHV0ZG93biA9IAkJc2VyaWFsX3JlbGVhc2UsCisJLmNsZWFudXAgPSAJCXNlcmlhbF9jbGVhbnVwLAogCS5pbnN0YWxsID0gCQlzZXJpYWxfaW5zdGFsbCwKIAkucHJvY19mb3BzID0JCSZzZXJpYWxfcHJvY19mb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKaW5kZXggMWFhNWQyMC4uYWQxZjkyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKQEAgLTUxMyw3ICs1MTMsOCBAQAogCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0KIAkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQkJcHJpdi0+Ynl0ZXNfaW4gKz0gYXZhaWxhYmxlX3Jvb207CisJCWlmICh0dHkpCisJCQlwcml2LT5ieXRlc19pbiArPSBhdmFpbGFibGVfcm9vbTsKIAogCX0gZWxzZSB7CiAJCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CkBAIC01ODIsMTIgKzU4MywxMSBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB2aXNvcl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJcHJpdi0+dGhyb3R0bGVkID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIH0KIAogCkBAIC01OTUsMjEgKzU5NSwyMyBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB2aXNvcl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJlc3VsdDsKKwlpbnQgcmVzdWx0LCB3YXNfdGhyb3R0bGVkOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPnRocm90dGxlZCA9IDA7CisJd2FzX3Rocm90dGxlZCA9IHByaXYtPmFjdHVhbGx5X3Rocm90dGxlZDsKIAlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCi0JcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmVzdWx0KQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsCi0JCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJaWYgKHdhc190aHJvdHRsZWQpIHsKKwkJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXN1bHQpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAogCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCX0KIH0KIAogc3RhdGljIGludCBwYWxtX29zXzNfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwppbmRleCA2MjQyNGVlLi4xMDkzZDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCkBAIC05NDksMTMgKzk0OSwxMiBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmaW5mby0+bG9jayk7CiAJaW5mby0+ZmxhZ3MgfD0gVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJmluZm8tPmxvY2spOwogCiAJcmV0dXJuOwogfQpAQCAtOTY2LDE0ICs5NjUsMTMgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IGFjdHVhbGx5X3Rocm90dGxlZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmaW5mby0+bG9jayk7CiAJYWN0dWFsbHlfdGhyb3R0bGVkID0gaW5mby0+ZmxhZ3MgJiBBQ1RVQUxMWV9USFJPVFRMRUQ7CiAJaW5mby0+ZmxhZ3MgJj0gfihUSFJPVFRMRUQgfCBBQ1RVQUxMWV9USFJPVFRMRUQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJmluZm8tPmxvY2spOwogCiAJaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkKIAkJcnhfZGF0YV9zb2Z0aW50KCZpbmZvLT5yeF93b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCmluZGV4IGUyMGRjNTIuLjU4OWY2YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwpAQCAtNjk2LDcgKzY5Niw3IEBACiAJCS8qIGRldmljZSBzdXBwb3J0cyBhbmQgbmVlZHMgYmlnZ2VyIHNlbnNlIGJ1ZmZlciAqLwogCQlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX1NBTkVfU0VOU0UpCiAJCQlzZW5zZV9zaXplID0gfjA7Ci0KK1JldHJ5X1NlbnNlOgogCQlVU19ERUJVR1AoIklzc3VpbmcgYXV0by1SRVFVRVNUX1NFTlNFXG4iKTsKIAogCQlzY3NpX2VoX3ByZXBfY21uZChzcmIsICZzZXMsIE5VTEwsIDAsIHNlbnNlX3NpemUpOwpAQCAtNzIwLDYgKzcyMCwyMSBAQAogCQkJc3JiLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CiAJCQlnb3RvIEhhbmRsZV9FcnJvcnM7CiAJCX0KKworCQkvKiBTb21lIGRldmljZXMgY2xhaW0gdG8gc3VwcG9ydCBsYXJnZXIgc2Vuc2UgYnV0IGZhaWwgd2hlbgorCQkgKiB0cnlpbmcgdG8gcmVxdWVzdCBpdC4gV2hlbiBhIHRyYW5zcG9ydCBmYWlsdXJlIGhhcHBlbnMKKwkJICogdXNpbmcgVVNfRlNfU0FORV9TRU5TRSwgd2UgYWx3YXlzIHJldHJ5IHdpdGggYSBzdGFuZGFyZAorCQkgKiAoc21hbGwpIHNlbnNlIHJlcXVlc3QuIFRoaXMgZml4ZXMgc29tZSBVU0IgR1NNIG1vZGVtcworCQkgKi8KKwkJaWYgKHRlbXBfcmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQgJiYKKwkJICAgICh1cy0+ZmZsYWdzICYgVVNfRkxfU0FORV9TRU5TRSkgJiYKKwkJICAgIHNlbnNlX3NpemUgIT0gVVNfU0VOU0VfU0laRSkgeworCQkJVVNfREVCVUdQKCItLSBhdXRvLXNlbnNlIGZhaWx1cmUsIHJldHJ5IHNtYWxsIHNlbnNlXG4iKTsKKwkJCXNlbnNlX3NpemUgPSBVU19TRU5TRV9TSVpFOworCQkJZ290byBSZXRyeV9TZW5zZTsKKwkJfQorCisJCS8qIE90aGVyIGZhaWx1cmVzICovCiAJCWlmICh0ZW1wX3Jlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgewogCQkJVVNfREVCVUdQKCItLSBhdXRvLXNlbnNlIGZhaWx1cmVcbiIpOwogCkBAIC03NjgsMTcgKzc4MywzMiBAQAogCQkvKiBzZXQgdGhlIHJlc3VsdCBzbyB0aGUgaGlnaGVyIGxheWVycyBleHBlY3QgdGhpcyBkYXRhICovCiAJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCi0JCS8qIElmIHRoaW5ncyBhcmUgcmVhbGx5IG9rYXksIHRoZW4gbGV0J3Mgc2hvdyB0aGF0LiAgWmVybwotCQkgKiBvdXQgdGhlIHNlbnNlIGJ1ZmZlciBzbyB0aGUgaGlnaGVyIGxheWVycyB3b24ndCByZWFsaXplCi0JCSAqIHdlIGRpZCBhbiB1bnNvbGljaXRlZCBhdXRvLXNlbnNlLiAqLwotCQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EICYmCi0JCQkvKiBGaWxlbWFyayAwLCBpZ25vcmUgRU9NLCBJTEkgMCwgbm8gc2Vuc2UgKi8KKwkJLyogV2Ugb2Z0ZW4gZ2V0IGVtcHR5IHNlbnNlIGRhdGEuICBUaGlzIGNvdWxkIGluZGljYXRlIHRoYXQKKwkJICogZXZlcnl0aGluZyB3b3JrZWQgb3IgdGhhdCB0aGVyZSB3YXMgYW4gdW5zcGVjaWZpZWQKKwkJICogcHJvYmxlbS4gIFdlIGhhdmUgdG8gZGVjaWRlIHdoaWNoLgorCQkgKi8KKwkJaWYgKAkvKiBGaWxlbWFyayAwLCBpZ25vcmUgRU9NLCBJTEkgMCwgbm8gc2Vuc2UgKi8KIAkJCQkoc3JiLT5zZW5zZV9idWZmZXJbMl0gJiAweGFmKSA9PSAwICYmCiAJCQkvKiBObyBBU0Mgb3IgQVNDUSAqLwogCQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzEyXSA9PSAwICYmCiAJCQkJc3JiLT5zZW5zZV9idWZmZXJbMTNdID09IDApIHsKLQkJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfR09PRDsKLQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzBdID0gMHgwOworCisJCQkvKiBJZiB0aGluZ3MgYXJlIHJlYWxseSBva2F5LCB0aGVuIGxldCdzIHNob3cgdGhhdC4KKwkJCSAqIFplcm8gb3V0IHRoZSBzZW5zZSBidWZmZXIgc28gdGhlIGhpZ2hlciBsYXllcnMKKwkJCSAqIHdvbid0IHJlYWxpemUgd2UgZGlkIGFuIHVuc29saWNpdGVkIGF1dG8tc2Vuc2UuCisJCQkgKi8KKwkJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCQkJc3JiLT5zZW5zZV9idWZmZXJbMF0gPSAweDA7CisKKwkJCS8qIElmIHRoZXJlIHdhcyBhIHByb2JsZW0sIHJlcG9ydCBhbiB1bnNwZWNpZmllZAorCQkJICogaGFyZHdhcmUgZXJyb3IgdG8gcHJldmVudCB0aGUgaGlnaGVyIGxheWVycyBmcm9tCisJCQkgKiBlbnRlcmluZyBhbiBpbmZpbml0ZSByZXRyeSBsb29wLgorCQkJICovCisJCQl9IGVsc2UgeworCQkJCXNyYi0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzJdID0gSEFSRFdBUkVfRVJST1I7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IDA3OWFlMGYuLmQ0ZjAzNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTgyMyw2ICsxODIzLDEzIEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAogCisvKiBSZXBvcnRlZCBieSBTZXJnZXkgUGluYWV2IDxkZm9AYW50ZXgucnU+ICovCitVTlVTVUFMX0RFViggIDB4NDEwMiwgMHgxMDU5LCAweDAwMDAsICAweDAwMDAsCisgICAgICAgICAgICAgICAiaVJpdmVyIiwKKyAgICAgICAgICAgICAgICJQN0siLAorICAgICAgICAgICAgICAgVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisgICAgICAgICAgICAgICBVU19GTF9NQVhfU0VDVE9SU182NCApLAorCiAvKgogICogRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEAyZ2VuLmNvbT4KICAqIFRoZSBrZXkgbWFrZXMgdGhlIFNDU0kgc3RhY2sgcHJpbnQgY29uZnVzaW5nIChidXQgaGFybWxlc3MpIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYwppbmRleCBiMmYxNDlmLi40NTE2YzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKQEAgLTIwMCwzNSArMjAwLDQwIEBACiB7CiAJaW50IHJlc3VsdCwgYnl0ZXMsIHNlY2Rfc2l6ZTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdXNiX2Rldi0+ZGV2OwotCXN0cnVjdCB1c2Jfc2VjdXJpdHlfZGVzY3JpcHRvciBzZWNkOworCXN0cnVjdCB1c2Jfc2VjdXJpdHlfZGVzY3JpcHRvciAqc2VjZDsKIAljb25zdCBzdHJ1Y3QgdXNiX2VuY3J5cHRpb25fZGVzY3JpcHRvciAqZXRkLCAqY2NtMV9ldGQgPSBOVUxMOwotCXZvaWQgKnNlY2RfYnVmOwogCWNvbnN0IHZvaWQgKml0ciwgKnRvcDsKIAljaGFyIGJ1Zls2NF07CiAKKwlzZWNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNlY2QgPT0gTlVMTCkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKIAlyZXN1bHQgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX1NFQ1VSSVRZLAotCQkJCSAgICAwLCAmc2VjZCwgc2l6ZW9mKHNlY2QpKTsKKwkJCQkgICAgMCwgc2VjZCwgc2l6ZW9mKHN0cnVjdCB1c2Jfc2VjdXJpdHlfZGVzY3JpcHRvcikpOwogCWlmIChyZXN1bHQgPCBzaXplb2Yoc2VjZCkpIHsKIAkJZGV2X2VycihkZXYsICJDYW4ndCByZWFkIHNlY3VyaXR5IGRlc2NyaXB0b3Igb3IgIgogCQkJIm5vdCBlbm91Z2ggZGF0YTogJWRcbiIsIHJlc3VsdCk7Ci0JCWdvdG8gZXJyb3Jfc2VjZDsKKwkJZ290byBvdXQ7CiAJfQotCXNlY2Rfc2l6ZSA9IGxlMTZfdG9fY3B1KHNlY2Qud1RvdGFsTGVuZ3RoKTsKLQlzZWNkX2J1ZiA9IGttYWxsb2Moc2VjZF9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoc2VjZF9idWYgPT0gTlVMTCkgeworCXNlY2Rfc2l6ZSA9IGxlMTZfdG9fY3B1KHNlY2QtPndUb3RhbExlbmd0aCk7CisJc2VjZCA9IGtyZWFsbG9jKHNlY2QsIHNlY2Rfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNlY2QgPT0gTlVMTCkgewogCQlkZXZfZXJyKGRldiwgIkNhbid0IGFsbG9jYXRlIHNwYWNlIGZvciBzZWN1cml0eSBkZXNjcmlwdG9yc1xuIik7Ci0JCWdvdG8gZXJyb3Jfc2VjZF9hbGxvYzsKKwkJZ290byBvdXQ7CiAJfQogCXJlc3VsdCA9IHVzYl9nZXRfZGVzY3JpcHRvcih1c2JfZGV2LCBVU0JfRFRfU0VDVVJJVFksCi0JCQkJICAgIDAsIHNlY2RfYnVmLCBzZWNkX3NpemUpOworCQkJCSAgICAwLCBzZWNkLCBzZWNkX3NpemUpOwogCWlmIChyZXN1bHQgPCBzZWNkX3NpemUpIHsKIAkJZGV2X2VycihkZXYsICJDYW4ndCByZWFkIHNlY3VyaXR5IGRlc2NyaXB0b3Igb3IgIgogCQkJIm5vdCBlbm91Z2ggZGF0YTogJWRcbiIsIHJlc3VsdCk7Ci0JCWdvdG8gZXJyb3Jfc2VjZF9hbGw7CisJCWdvdG8gb3V0OwogCX0KIAlieXRlcyA9IDA7Ci0JaXRyID0gc2VjZF9idWYgKyBzaXplb2Yoc2VjZCk7Ci0JdG9wID0gc2VjZF9idWYgKyByZXN1bHQ7CisJaXRyID0gJnNlY2RbMV07CisJdG9wID0gKHZvaWQgKilzZWNkICsgcmVzdWx0OwogCXdoaWxlIChpdHIgPCB0b3ApIHsKIAkJZXRkID0gaXRyOwogCQlpZiAodG9wIC0gaXRyIDwgc2l6ZW9mKCpldGQpKSB7CkBAIC0yNTksMjQgKzI2NCwxNiBAQAogCQlkZXZfZXJyKGRldiwgIldVU0IgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBDQ00xIGVuY3J5cHRpb24sICIKIAkJCSJjYW4ndCB1c2UhXG4iKTsKIAkJcmVzdWx0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcl9ub19jY20xOworCQlnb3RvIG91dDsKIAl9CiAJd3VzYl9kZXYtPmNjbTFfZXRkID0gKmNjbTFfZXRkOwogCWRldl9kYmcoZGV2LCAic3VwcG9ydGVkIGVuY3J5cHRpb246ICVzOyB1c2luZyAlcyAoMHglMDJ4LyUwMngpXG4iLAogCQlidWYsIHd1c2JfZXRfbmFtZShjY20xX2V0ZC0+YkVuY3J5cHRpb25UeXBlKSwKIAkJY2NtMV9ldGQtPmJFbmNyeXB0aW9uVmFsdWUsIGNjbTFfZXRkLT5iQXV0aEtleUluZGV4KTsKIAlyZXN1bHQgPSAwOwotCWtmcmVlKHNlY2RfYnVmKTsKIG91dDoKKwlrZnJlZShzZWNkKTsKIAlyZXR1cm4gcmVzdWx0OwotCi0KLWVycm9yX25vX2NjbTE6Ci1lcnJvcl9zZWNkX2FsbDoKLQlrZnJlZShzZWNkX2J1Zik7Ci1lcnJvcl9zZWNkX2FsbG9jOgotZXJyb3Jfc2VjZDoKLQlnb3RvIG91dDsKIH0KIAogdm9pZCB3dXNiX2Rldl9zZWNfcm0oc3RydWN0IHd1c2JfZGV2ICp3dXNiX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jIGIvZHJpdmVycy91d2IvdXdiLWRlYnVnLmMKaW5kZXggNGE0Mjk5My4uMmVlY2VjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91d2IvdXdiLWRlYnVnLmMKKysrIGIvZHJpdmVycy91d2IvdXdiLWRlYnVnLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCXJldHVybiByZXQgPCAwID8gcmV0IDogbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb21tYW5kX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb21tYW5kX2ZvcHMgPSB7CiAJLm9wZW4gICA9IGNvbW1hbmRfb3BlbiwKIAkud3JpdGUgID0gY29tbWFuZF93cml0ZSwKIAkucmVhZCAgID0gTlVMTCwKQEAgLTI1NSw3ICsyNTUsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCByZXNlcnZhdGlvbnNfcHJpbnQsIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXNlcnZhdGlvbnNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlc2VydmF0aW9uc19mb3BzID0gewogCS5vcGVuICAgID0gcmVzZXJ2YXRpb25zX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKQEAgLTI4Myw3ICsyODMsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkcnBfYXZhaWxfcHJpbnQsIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcnBfYXZhaWxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRycF9hdmFpbF9mb3BzID0gewogCS5vcGVuICAgID0gZHJwX2F2YWlsX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3doYy1yYy5jIGIvZHJpdmVycy91d2Ivd2hjLXJjLmMKaW5kZXggMWQ5YTZmNS4uMDE5NTBjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91d2Ivd2hjLXJjLmMKKysrIGIvZHJpdmVycy91d2Ivd2hjLXJjLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDliYmIyODUuLjE4OGUxYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTIxMjEsNyArMjEyMSw3IEBACiAKIGNvbmZpZyBGQl9QUkVfSU5JVF9GQgogCWJvb2wgIkRvbid0IHJlaW5pdGlhbGl6ZSwgdXNlIGJvb3Rsb2FkZXIncyBHREMvRGlzcGxheSBjb25maWd1cmF0aW9uIgotCWRlcGVuZHMgb24gRkJfTUI4NjJYWF9MSU1FCisJZGVwZW5kcyBvbiBGQiAmJiBGQl9NQjg2MlhYX0xJTUUKIAktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgZGlzcGxheSBjb250ZW50cyBzaG91bGQgYmUgaW5oZXJpdGVkIGFzIHNldCBieQogCSAgdGhlIGJvb3Rsb2FkZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKaW5kZXggOGNkMjc5Yi4uMzc2MjRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdGFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXRhZmIuYwpAQCAtMzI5LDEyICszMjksNiBAQAogICoKICAqCSogcGVyZm9ybSBmYiBzcGVjaWZpYyBtbWFwICoKICAqCWludCAoKmZiX21tYXApKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci0gKgotICoJKiBzYXZlIGN1cnJlbnQgaGFyZHdhcmUgc3RhdGUgKgotICoJdm9pZCAoKmZiX3NhdmVfc3RhdGUpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLSAqCi0gKgkqIHJlc3RvcmUgc2F2ZWQgc3RhdGUgKgotICoJdm9pZCAoKmZiX3Jlc3RvcmVfc3RhdGUpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKICAqIH0gOwogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYwppbmRleCAyODMwZmZkLi5kNWU4MDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCkBAIC00ODQsNiArNDg0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCXVuc2lnbmVkIGxvbmcgY2xrX3ZhbHVlX2toejsKIAl1bnNpZ25lZCBsb25nIGJpdHNfcGVyX2xpbmU7CisJdW5zaWduZWQgbG9uZyBwaXhfZmFjdG9yID0gMjsKIAogCW1pZ2h0X3NsZWVwKCk7CiAKQEAgLTUxNiwyMCArNTE3LDI0IEBACiAJLyogTm93LCB0aGUgTENEQyBjb3JlLi4uICovCiAKIAkvKiBTZXQgcGl4ZWwgY2xvY2sgKi8KKwlpZiAoY3B1X2lzX2F0OTFzYW05ZzQ1KCkgJiYgIWNwdV9pc19hdDkxc2FtOWc0NWVzKCkpCisJCXBpeF9mYWN0b3IgPSAxOworCiAJY2xrX3ZhbHVlX2toeiA9IGNsa19nZXRfcmF0ZShzaW5mby0+bGNkY19jbGspIC8gMTAwMDsKIAogCXZhbHVlID0gRElWX1JPVU5EX1VQKGNsa192YWx1ZV9raHosIFBJQ09TMktIWihpbmZvLT52YXIucGl4Y2xvY2spKTsKIAotCWlmICh2YWx1ZSA8IDIpIHsKKwlpZiAodmFsdWUgPCBwaXhfZmFjdG9yKSB7CiAJCWRldl9ub3RpY2UoaW5mby0+ZGV2aWNlLCAiQnlwYXNzaW5nIHBpeGVsIGNsb2NrIGRpdmlkZXJcbiIpOwogCQlsY2RjX3dyaXRlbChzaW5mbywgQVRNRUxfTENEQ19MQ0RDT04xLCBBVE1FTF9MQ0RDX0JZUEFTUyk7CiAJfSBlbHNlIHsKLQkJdmFsdWUgPSAodmFsdWUgLyAyKSAtIDE7CisJCXZhbHVlID0gKHZhbHVlIC8gcGl4X2ZhY3RvcikgLSAxOwogCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIiAgKiBwcm9ncmFtbWluZyBDTEtWQUwgPSAweCUwOGx4XG4iLAogCQkJCXZhbHVlKTsKIAkJbGNkY193cml0ZWwoc2luZm8sIEFUTUVMX0xDRENfTENEQ09OMSwKIAkJCQl2YWx1ZSA8PCBBVE1FTF9MQ0RDX0NMS1ZBTF9PRkZTRVQpOwotCQlpbmZvLT52YXIucGl4Y2xvY2sgPSBLSFoyUElDT1MoY2xrX3ZhbHVlX2toeiAvICgyICogKHZhbHVlICsgMSkpKTsKKwkJaW5mby0+dmFyLnBpeGNsb2NrID0KKwkJCUtIWjJQSUNPUyhjbGtfdmFsdWVfa2h6IC8gKHBpeF9mYWN0b3IgKiAodmFsdWUgKyAxKSkpOwogCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIiAgdXBkYXRlZCBwaXhjbGs6ICAgICAlbHUgS0h6XG4iLAogCQkJCQlQSUNPUzJLSFooaW5mby0+dmFyLnBpeGNsb2NrKSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggOTA4NjFjZC4uMDliZmE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC0zMSw2ICszMSwxMyBAQAogCSAgU2F5IHkgaGVyZSB0byBzdXBwb3J0IHRoZSBMQ0QgcGFuZWxzIHVzdWFsbHkgZm91bmQgb24gU0hBUlAKIAkgIGNvcmdpIChDN3gwKSBhbmQgc3BpdHogKEN4eDAwKSBtb2RlbHMuCiAKK2NvbmZpZyBMQ0RfTE1TMjgzR0YwNQorCXRyaXN0YXRlICJTYW1zdW5nIExNUzI4M0dGMDUgTENEIgorCWRlcGVuZHMgb24gTENEX0NMQVNTX0RFVklDRSAmJiBTUElfTUFTVEVSICYmIEdFTkVSSUNfR1BJTworCWhlbHAKKwkgIFNQSSBkcml2ZXIgZm9yIFNhbXN1bmcgTE1TMjgzR0YwNS4gVGhpcyBwcm92aWRlcyBiYXNpYyBzdXBwb3J0CisJICBmb3IgcG93ZXJpbmcgdGhlIExDRCB1cC9kb3duIHRocm91Z2ggYSBzeXNmcyBpbnRlcmZhY2UuCisKIGNvbmZpZyBMQ0RfTFRWMzUwUVYKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBMVFYzNTBRViBMQ0QgUGFuZWwiCiAJZGVwZW5kcyBvbiBMQ0RfQ0xBU1NfREVWSUNFICYmIFNQSV9NQVNURVIKQEAgLTIyOSwzICsyMzYsMjkgQEAKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhIFRhYmxldGtpb3NrIFNhaGFyYSBUb3VjaC1pVCwgc2F5IHkgdG8gZW5hYmxlIHRoZQogCSAgYmFja2xpZ2h0IGRyaXZlci4KKworY29uZmlnIEJBQ0tMSUdIVF9XTTgzMVgKKwl0cmlzdGF0ZSAiV004MzF4IFBNSUMgQmFja2xpZ2h0IERyaXZlciIKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgTUZEX1dNODMxWAorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgYmFja2xpZ2h0IGRyaXZlbiBieSB0aGUgSVNJTksgYW5kIERDREMgb2YgYQorCSAgV004MzF4IFBNSUMgc2F5IHkgdG8gZW5hYmxlIHRoZSBiYWNrbGlnaHQgZHJpdmVyIGZvciBpdC4KKworY29uZmlnIEJBQ0tMSUdIVF9BRFgKKwl0cmlzdGF0ZSAiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBCYWNrbGlnaHQgRHJpdmVyIgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBBUkNIX1BYQV9BRFgKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSB0byBlbmFibGUgdGhlIGJhY2tsaWdodCBkcml2ZXIgb24gQXZpb25pYyBEZXNpZ24gWGFudGhvcy1iYXNlZAorCSAgYm9hcmRzLgorCitjb25maWcgQkFDS0xJR0hUX0FEUDU1MjAKKwl0cmlzdGF0ZSAiQmFja2xpZ2h0IERyaXZlciBmb3IgQURQNTUyMC9BRFA1NTAxIHVzaW5nIFdMRUQiCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFICYmIFBNSUNfQURQNTUyMAorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgTENEIGJhY2tsaWdodCBjb25uZWN0ZWQgdG8gdGhlIEJTVC9CTF9TTksgb3V0cHV0IG9mCisJICBBRFA1NTIwIG9yIEFEUDU1MDEsIHNheSBZIGhlcmUgdG8gZW5hYmxlIHRoaXMgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBhZHA1NTIwX2JsLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCmluZGV4IDRlYjE3OGMuLjlhNDA1NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQAogb2JqLSQoQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UpICAgICArPSBsY2Qubwogb2JqLSQoQ09ORklHX0xDRF9DT1JHSSkJCSAgICs9IGNvcmdpX2xjZC5vCiBvYmotJChDT05GSUdfTENEX0hQNzAwKQkJICAgKz0gam9ybmFkYTcyMF9sY2Qubworb2JqLSQoQ09ORklHX0xDRF9MTVMyODNHRjA1KQkgICArPSBsbXMyODNnZjA1Lm8KIG9iai0kKENPTkZJR19MQ0RfTFRWMzUwUVYpCSAgICs9IGx0djM1MHF2Lm8KIG9iai0kKENPTkZJR19MQ0RfSUxJOTMyMCkJICAgKz0gaWxpOTMyMC5vCiBvYmotJChDT05GSUdfTENEX1BMQVRGT1JNKQkgICArPSBwbGF0Zm9ybV9sY2QubwpAQCAtMjQsNCArMjUsNyBAQAogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9NQlBfTlZJRElBKSArPSBtYnBfbnZpZGlhX2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfVE9TQSkJKz0gdG9zYV9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX1NBSEFSQSkJKz0ga2IzODg2X2JsLm8KK29iai0kKENPTkZJR19CQUNLTElHSFRfV004MzFYKQkrPSB3bTgzMXhfYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9BRFgpICAgICs9IGFkeF9ibC5vCitvYmotJChDT05GSUdfQkFDS0xJR0hUX0FEUDU1MjApCSs9IGFkcDU1MjBfYmwubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwNWRhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDU1MjBfYmwuYwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIEJhY2tsaWdodCBkcml2ZXIgZm9yIEFuYWxvZyBEZXZpY2VzIEFEUDU1MjAvQURQNTUwMSBNRkQgUE1JQ3MKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvYWRwNTUyMC5oPgorCitzdHJ1Y3QgYWRwNTUyMF9ibCB7CisJc3RydWN0IGRldmljZSAqbWFzdGVyOworCXN0cnVjdCBhZHA1NTIwX2JhY2tsaWdodF9wbGF0ZnJvbV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl1bnNpZ25lZCBsb25nIGNhY2hlZF9kYXlsaWdodF9tYXg7CisJaW50IGlkOworCWludCBjdXJyZW50X2JyaWdodG5lc3M7Cit9OworCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfc2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCwgaW50IGJyaWdodG5lc3MpCit7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJc3RydWN0IGRldmljZSAqbWFzdGVyID0gZGF0YS0+bWFzdGVyOworCWludCByZXQgPSAwOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpIHsKKwkJaWYgKChicmlnaHRuZXNzID4gMCkgJiYgKGJyaWdodG5lc3MgPCBBRFA1MDIwX01BWF9CUklHSFRORVNTKSkgeworCQkJLyogRGlzYWJsZSBBbWJpZW50IExpZ2h0IGF1dG8gYWRqdXN0ICovCisJCQlyZXQgfD0gYWRwNTUyMF9jbHJfYml0cyhtYXN0ZXIsIEJMX0NPTlRST0wsCisJCQkJCUJMX0FVVE9fQURKKTsKKwkJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgREFZTElHSFRfTUFYLCBicmlnaHRuZXNzKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBNQVhfQlJJR0hUTkVTUyAtPiBFbmFibGUgQW1iaWVudCBMaWdodCBhdXRvIGFkanVzdAorCQkJICogcmVzdG9yZSBkYXlsaWdodCBsMyBzeXNmcyBicmlnaHRuZXNzCisJCQkgKi8KKwkJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgREFZTElHSFRfTUFYLAorCQkJCQkgZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCk7CisJCQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsIEJMX0NPTlRST0wsCisJCQkJCSBCTF9BVVRPX0FESik7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwgYnJpZ2h0bmVzcyk7CisJfQorCisJaWYgKGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyAmJiBicmlnaHRuZXNzID09IDApCisJCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKG1hc3RlciwKKwkJCQlNT0RFX1NUQVRVUywgRElNX0VOKTsKKwllbHNlIGlmIChkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgPT0gMCAmJiBicmlnaHRuZXNzKQorCQlyZXQgfD0gYWRwNTUyMF9jbHJfYml0cyhtYXN0ZXIsCisJCQkJTU9ERV9TVEFUVVMsIERJTV9FTik7CisKKwlpZiAoIXJldCkKKwkJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWRwNTUyMF9ibF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlpbnQgYnJpZ2h0bmVzcyA9IGJsLT5wcm9wcy5icmlnaHRuZXNzOworCWlmIChibC0+cHJvcHMucG93ZXIgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwlpZiAoYmwtPnByb3BzLmZiX2JsYW5rICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJcmV0dXJuIGFkcDU1MjBfYmxfc2V0KGJsLCBicmlnaHRuZXNzKTsKK30KKworc3RhdGljIGludCBhZHA1NTIwX2JsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlpbnQgZXJyb3I7CisJdWludDhfdCByZWdfdmFsOworCisJZXJyb3IgPSBhZHA1NTIwX3JlYWQoZGF0YS0+bWFzdGVyLCBCTF9WQUxVRSwgJnJlZ192YWwpOworCisJcmV0dXJuIGVycm9yID8gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzIDogcmVnX3ZhbDsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFkcDU1MjBfYmxfb3BzID0geworCS51cGRhdGVfc3RhdHVzCT0gYWRwNTUyMF9ibF91cGRhdGVfc3RhdHVzLAorCS5nZXRfYnJpZ2h0bmVzcwk9IGFkcDU1MjBfYmxfZ2V0X2JyaWdodG5lc3MsCit9OworCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfc2V0dXAoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsKQoreworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXN0cnVjdCBkZXZpY2UgKm1hc3RlciA9IGRhdGEtPm1hc3RlcjsKKwlzdHJ1Y3QgYWRwNTUyMF9iYWNrbGlnaHRfcGxhdGZyb21fZGF0YSAqcGRhdGEgPSBkYXRhLT5wZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgREFZTElHSFRfTUFYLCBwZGF0YS0+bDFfZGF5bGlnaHRfbWF4KTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX0RJTSwgcGRhdGEtPmwxX2RheWxpZ2h0X2RpbSk7CisKKwlpZiAocGRhdGEtPmVuX2FtYmxfc2VucykgeworCQlkYXRhLT5jYWNoZWRfZGF5bGlnaHRfbWF4ID0gcGRhdGEtPmwxX2RheWxpZ2h0X21heDsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBPRkZJQ0VfTUFYLCBwZGF0YS0+bDJfb2ZmaWNlX21heCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgT0ZGSUNFX0RJTSwgcGRhdGEtPmwyX29mZmljZV9kaW0pOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBUktfTUFYLCBwZGF0YS0+bDNfZGFya19tYXgpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBUktfRElNLCBwZGF0YS0+bDNfZGFya19kaW0pOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEwyX1RSSVAsIHBkYXRhLT5sMl90cmlwKTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBMMl9IWVMsIHBkYXRhLT5sMl9oeXN0KTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBMM19UUklQLCBwZGF0YS0+bDNfdHJpcCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgTDNfSFlTLCBwZGF0YS0+bDNfaHlzdCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQUxTX0NNUFJfQ0ZHLAorCQkJQUxTX0NNUFJfQ0ZHX1ZBTChwZGF0YS0+YWJtbF9maWx0LCBMM19FTikpOworCX0KKworCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQkxfQ09OVFJPTCwKKwkJCUJMX0NUUkxfVkFMKHBkYXRhLT5mYWRlX2xlZF9sYXcsIHBkYXRhLT5lbl9hbWJsX3NlbnMpKTsKKworCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgQkxfRkFERSwgRkFERV9WQUwocGRhdGEtPmZhZGVfaW4sCisJCQlwZGF0YS0+ZmFkZV9vdXQpKTsKKworCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKG1hc3RlciwgTU9ERV9TVEFUVVMsIEJMX0VOIHwgRElNX0VOKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBlcnJvcjsKKwl1aW50OF90IHJlZ192YWw7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwllcnJvciA9IGFkcDU1MjBfcmVhZChkYXRhLT5tYXN0ZXIsIHJlZywgJnJlZ192YWwpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcmVnX3ZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsCisJCQkgc2l6ZV90IGNvdW50LCBpbnQgcmVnKQoreworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlhZHA1NTIwX3dyaXRlKGRhdGEtPm1hc3RlciwgcmVnLCB2YWwpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGFya19tYXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgREFSS19NQVgpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgREFSS19NQVgpOworfQorc3RhdGljIERFVklDRV9BVFRSKGRhcmtfbWF4LCAwNjY0LCBhZHA1NTIwX2JsX2RhcmtfbWF4X3Nob3csCisJCQlhZHA1NTIwX2JsX2RhcmtfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9vZmZpY2VfbWF4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWRwNTUyMF9zaG93KGRldiwgYnVmLCBPRkZJQ0VfTUFYKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9vZmZpY2VfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgT0ZGSUNFX01BWCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIob2ZmaWNlX21heCwgMDY2NCwgYWRwNTUyMF9ibF9vZmZpY2VfbWF4X3Nob3csCisJCQlhZHA1NTIwX2JsX29mZmljZV9tYXhfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RheWxpZ2h0X21heF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgREFZTElHSFRfTUFYKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9tYXhfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZkYXRhLT5jYWNoZWRfZGF5bGlnaHRfbWF4KTsKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIERBWUxJR0hUX01BWCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGF5bGlnaHRfbWF4LCAwNjY0LCBhZHA1NTIwX2JsX2RheWxpZ2h0X21heF9zaG93LAorCQkJYWRwNTUyMF9ibF9kYXlsaWdodF9tYXhfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfZGltX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWRwNTUyMF9zaG93KGRldiwgYnVmLCBEQVJLX0RJTSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGFya19kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIERBUktfRElNKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihkYXJrX2RpbSwgMDY2NCwgYWRwNTUyMF9ibF9kYXJrX2RpbV9zaG93LAorCQkJYWRwNTUyMF9ibF9kYXJrX2RpbV9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX2RpbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgT0ZGSUNFX0RJTSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX2RpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhZHA1NTIwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgT0ZGSUNFX0RJTSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIob2ZmaWNlX2RpbSwgMDY2NCwgYWRwNTUyMF9ibF9vZmZpY2VfZGltX3Nob3csCisJCQlhZHA1NTIwX2JsX29mZmljZV9kaW1fc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RheWxpZ2h0X2RpbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgREFZTElHSFRfRElNKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIERBWUxJR0hUX0RJTSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGF5bGlnaHRfZGltLCAwNjY0LCBhZHA1NTIwX2JsX2RheWxpZ2h0X2RpbV9zaG93LAorCQkJYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc3RvcmUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRwNTUyMF9ibF9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2RhcmtfbWF4LmF0dHIsCisJJmRldl9hdHRyX2RhcmtfZGltLmF0dHIsCisJJmRldl9hdHRyX29mZmljZV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfb2ZmaWNlX2RpbS5hdHRyLAorCSZkZXZfYXR0cl9kYXlsaWdodF9tYXguYXR0ciwKKwkmZGV2X2F0dHJfZGF5bGlnaHRfZGltLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRwNTUyMF9ibF9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGFkcDU1MjBfYmxfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkcDU1MjBfYmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGE7CisJaW50IHJldCA9IDA7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPm1hc3RlciA9IHBkZXYtPmRldi5wYXJlbnQ7CisJZGF0YS0+cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChkYXRhLT5wZGF0YSAgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGF0YS0+aWQgPSBwZGV2LT5pZDsKKwlkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgPSAwOworCisJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CisKKwlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwgZGF0YS0+bWFzdGVyLAorCQkJZGF0YSwgJmFkcDU1MjBfYmxfb3BzKTsKKwlpZiAoSVNfRVJSKGJsKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0XG4iKTsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiBQVFJfRVJSKGJsKTsKKwl9CisKKwlibC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPQorCQlibC0+cHJvcHMuYnJpZ2h0bmVzcyA9IEFEUDUwMjBfTUFYX0JSSUdIVE5FU1M7CisKKwlpZiAoZGF0YS0+cGRhdGEtPmVuX2FtYmxfc2VucykKKwkJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZibC0+ZGV2LmtvYmosCisJCQkmYWRwNTUyMF9ibF9hdHRyX2dyb3VwKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHN5c2ZzXG4iKTsKKwkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsKTsKKwkJa2ZyZWUoZGF0YSk7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYmwpOworCXJldCB8PSBhZHA1NTIwX2JsX3NldHVwKGJsKTsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhibCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHA1NTIwX2JsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCisJYWRwNTUyMF9jbHJfYml0cyhkYXRhLT5tYXN0ZXIsIE1PREVfU1RBVFVTLCBCTF9FTik7CisKKwlpZiAoZGF0YS0+cGRhdGEtPmVuX2FtYmxfc2VucykKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZibC0+ZGV2LmtvYmosCisJCQkJJmFkcDU1MjBfYmxfYXR0cl9ncm91cCk7CisKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmwpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWRwNTUyMF9ibF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlyZXR1cm4gYWRwNTUyMF9ibF9zZXQoYmwsIDApOworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhibCk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBhZHA1NTIwX2JsX3N1c3BlbmQJTlVMTAorI2RlZmluZSBhZHA1NTIwX2JsX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWRwNTUyMF9ibF9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImFkcDU1MjAtYmFja2xpZ2h0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gYWRwNTUyMF9ibF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFkcDU1MjBfYmxfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IGFkcDU1MjBfYmxfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFkcDU1MjBfYmxfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWRwNTUyMF9ibF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWRwNTUyMF9ibF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWRwNTUyMF9ibF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFkcDU1MjBfYmxfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhZHA1NTIwX2JsX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhZHA1NTIwX2JsX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRFA1NTIwKDAxKSBCYWNrbGlnaHQgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmFkcDU1MjAtYmFja2xpZ2h0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkeF9ibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjM2JkZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYwpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkeC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEF2aW9uaWMgRGVzaWduIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFdyaXR0ZW4gYnkgVGhpZXJyeSBSZWRpbmcgPHRoaWVycnkucmVkaW5nQGF2aW9uaWMtZGVzaWduLmRlPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKy8qIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIEFEWF9CQUNLTElHSFRfQ09OVFJPTAkJMHgwMAorI2RlZmluZSBBRFhfQkFDS0xJR0hUX0NPTlRST0xfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIEFEWF9CQUNLTElHSFRfQlJJR0hUTkVTUwkweDA4CisjZGVmaW5lIEFEWF9CQUNLTElHSFRfU1RBVFVTCQkweDEwCisjZGVmaW5lIEFEWF9CQUNLTElHSFRfRVJST1IJCTB4MTgKKworc3RydWN0IGFkeGJsIHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7Cit9OworCitzdGF0aWMgaW50IGFkeF9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxkZXYpCit7CisJc3RydWN0IGFkeGJsICpibCA9IGJsX2dldF9kYXRhKGJsZGV2KTsKKwl1MzIgdmFsdWU7CisKKwl2YWx1ZSA9IGJsZGV2LT5wcm9wcy5icmlnaHRuZXNzOworCXdyaXRlbCh2YWx1ZSwgYmwtPmJhc2UgKyBBRFhfQkFDS0xJR0hUX0JSSUdIVE5FU1MpOworCisJdmFsdWUgPSByZWFkbChibC0+YmFzZSArIEFEWF9CQUNLTElHSFRfQ09OVFJPTCk7CisKKwlpZiAoYmxkZXYtPnByb3BzLnN0YXRlICYgQkxfQ09SRV9GQkJMQU5LKQorCQl2YWx1ZSAmPSB+QURYX0JBQ0tMSUdIVF9DT05UUk9MX0VOQUJMRTsKKwllbHNlCisJCXZhbHVlIHw9IEFEWF9CQUNLTElHSFRfQ09OVFJPTF9FTkFCTEU7CisKKwl3cml0ZWwodmFsdWUsIGJsLT5iYXNlICsgQURYX0JBQ0tMSUdIVF9DT05UUk9MKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkeF9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsZGV2KQoreworCXN0cnVjdCBhZHhibCAqYmwgPSBibF9nZXRfZGF0YShibGRldik7CisJdTMyIGJyaWdodG5lc3M7CisKKwlicmlnaHRuZXNzID0gcmVhZGwoYmwtPmJhc2UgKyBBRFhfQkFDS0xJR0hUX0JSSUdIVE5FU1MpOworCXJldHVybiBicmlnaHRuZXNzICYgMHhmZjsKK30KKworc3RhdGljIGludCBhZHhfYmFja2xpZ2h0X2NoZWNrX2ZiKHN0cnVjdCBmYl9pbmZvICpmYikKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFkeF9iYWNrbGlnaHRfb3BzID0geworCS5vcHRpb25zID0gMCwKKwkudXBkYXRlX3N0YXR1cyA9IGFkeF9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MgPSBhZHhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLAorCS5jaGVja19mYiA9IGFkeF9iYWNrbGlnaHRfY2hlY2tfZmIsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHhfYmFja2xpZ2h0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBhZHhibCAqYmw7CisJaW50IHJldCA9IDA7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCXJlc291cmNlX3NpemUocmVzKSwgcmVzLT5uYW1lKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWJsID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqYmwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWJsLT5iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCXJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFibC0+YmFzZSkgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWJsZGV2ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihkZXZfbmFtZSgmcGRldi0+ZGV2KSwgJnBkZXYtPmRldiwgYmwsCisJCQkmYWR4X2JhY2tsaWdodF9vcHMpOworCWlmICghYmxkZXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYmxkZXYtPnByb3BzLm1heF9icmlnaHRuZXNzID0gMHhmZjsKKwlibGRldi0+cHJvcHMuYnJpZ2h0bmVzcyA9IDB4ZmY7CisJYmxkZXYtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGJsZGV2KTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkeF9iYWNrbGlnaHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsZGV2OworCWludCByZXQgPSAwOworCisJYmxkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlibGRldi0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOworCWJsZGV2LT5wcm9wcy5icmlnaHRuZXNzID0gMHhmZjsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhibGRldik7CisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWR4X2JhY2tsaWdodF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHhfYmFja2xpZ2h0X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYWR4X2JhY2tsaWdodF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgYWR4X2JhY2tsaWdodF9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFkeF9iYWNrbGlnaHRfZHJpdmVyID0geworCS5wcm9iZSA9IGFkeF9iYWNrbGlnaHRfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGFkeF9iYWNrbGlnaHRfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IGFkeF9iYWNrbGlnaHRfc3VzcGVuZCwKKwkucmVzdW1lID0gYWR4X2JhY2tsaWdodF9yZXN1bWUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYWR4LWJhY2tsaWdodCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZHhfYmFja2xpZ2h0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhZHhfYmFja2xpZ2h0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHhfYmFja2xpZ2h0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWR4X2JhY2tsaWdodF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhZHhfYmFja2xpZ2h0X2luaXQpOworbW9kdWxlX2V4aXQoYWR4X2JhY2tsaWdodF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGhpZXJyeSBSZWRpbmcgPHRoaWVycnkucmVkaW5nQGF2aW9uaWMtZGVzaWduLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdmlvbmljIERlc2lnbiBYYW50aG9zIEJhY2tsaWdodCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKaW5kZXggMTU3MDU3Yy4uNjYxNWFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKQEAgLTczLDYgKzczLDI3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0ZCICovCiAKK3N0YXRpYyB2b2lkIGJhY2tsaWdodF9nZW5lcmF0ZV9ldmVudChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsCisJCQkJICAgICBlbnVtIGJhY2tsaWdodF91cGRhdGVfcmVhc29uIHJlYXNvbikKK3sKKwljaGFyICplbnZwWzJdOworCisJc3dpdGNoIChyZWFzb24pIHsKKwljYXNlIEJBQ0tMSUdIVF9VUERBVEVfU1lTRlM6CisJCWVudnBbMF0gPSAiU09VUkNFPXN5c2ZzIjsKKwkJYnJlYWs7CisJY2FzZSBCQUNLTElHSFRfVVBEQVRFX0hPVEtFWToKKwkJZW52cFswXSA9ICJTT1VSQ0U9aG90a2V5IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZW52cFswXSA9ICJTT1VSQ0U9dW5rbm93biI7CisJCWJyZWFrOworCX0KKwllbnZwWzFdID0gTlVMTDsKKwlrb2JqZWN0X3VldmVudF9lbnYoJmJkLT5kZXYua29iaiwgS09CSl9DSEFOR0UsIGVudnApOworCXN5c2ZzX25vdGlmeSgmYmQtPmRldi5rb2JqLCBOVUxMLCAiYWN0dWFsX2JyaWdodG5lc3MiKTsKK30KKwogc3RhdGljIHNzaXplX3QgYmFja2xpZ2h0X3Nob3dfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixjaGFyICpidWYpCiB7CkBAIC0xNDIsNiArMTYzLDggQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZiZC0+b3BzX2xvY2spOwogCisJYmFja2xpZ2h0X2dlbmVyYXRlX2V2ZW50KGJkLCBCQUNLTElHSFRfVVBEQVRFX1NZU0ZTKTsKKwogCXJldHVybiByYzsKIH0KIApAQCAtMjE0LDYgKzIzNywyNSBAQAogfTsKIAogLyoqCisgKiBiYWNrbGlnaHRfZm9yY2VfdXBkYXRlIC0gdGVsbCB0aGUgYmFja2xpZ2h0IHN1YnN5c3RlbSB0aGF0IGhhcmR3YXJlIHN0YXRlCisgKiAgIGhhcyBjaGFuZ2VkCisgKiBAYmQ6IHRoZSBiYWNrbGlnaHQgZGV2aWNlIHRvIHVwZGF0ZQorICoKKyAqIFVwZGF0ZXMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBiYWNrbGlnaHQgaW4gcmVzcG9uc2UgdG8gYSBoYXJkd2FyZSBldmVudCwKKyAqIGFuZCBnZW5lcmF0ZSBhIHVldmVudCB0byBub3RpZnkgdXNlcnNwYWNlCisgKi8KK3ZvaWQgYmFja2xpZ2h0X2ZvcmNlX3VwZGF0ZShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsCisJCQkgICAgZW51bSBiYWNrbGlnaHRfdXBkYXRlX3JlYXNvbiByZWFzb24pCit7CisJbXV0ZXhfbG9jaygmYmQtPm9wc19sb2NrKTsKKwlpZiAoYmQtPm9wcyAmJiBiZC0+b3BzLT5nZXRfYnJpZ2h0bmVzcykKKwkJYmQtPnByb3BzLmJyaWdodG5lc3MgPSBiZC0+b3BzLT5nZXRfYnJpZ2h0bmVzcyhiZCk7CisJbXV0ZXhfdW5sb2NrKCZiZC0+b3BzX2xvY2spOworCWJhY2tsaWdodF9nZW5lcmF0ZV9ldmVudChiZCwgcmVhc29uKTsKK30KK0VYUE9SVF9TWU1CT0woYmFja2xpZ2h0X2ZvcmNlX3VwZGF0ZSk7CisKKy8qKgogICogYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlciAtIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgYSBuZXcgb2JqZWN0IG9mCiAgKiAgIGJhY2tsaWdodF9kZXZpY2UgY2xhc3MuCiAgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIG5ldyBvYmplY3QobXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKaW5kZXggMjIxMWE4NS4uOTY3NzQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKQEAgLTQzMyw4ICs0MzMsOSBAQAogCiAJaWYgKGNvcmdpYmxfZmxhZ3MgJiBDT1JHSUJMX1NVU1BFTkRFRCkKIAkJaW50ZW5zaXR5ID0gMDsKLQlpZiAoY29yZ2libF9mbGFncyAmIENPUkdJQkxfQkFUVExPVykKLQkJaW50ZW5zaXR5ICY9IGxjZC0+bGltaXRfbWFzazsKKworCWlmICgoY29yZ2libF9mbGFncyAmIENPUkdJQkxfQkFUVExPVykgJiYgaW50ZW5zaXR5ID4gbGNkLT5saW1pdF9tYXNrKQorCQlpbnRlbnNpdHkgPSBsY2QtPmxpbWl0X21hc2s7CiAKIAlyZXR1cm4gY29yZ2lfYmxfc2V0X2ludGVuc2l0eShsY2QsIGludGVuc2l0eSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTAzeF9ibC5jCmluZGV4IDkzYmI0MzQuLjcwMWExMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTAzeF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTAzeF9ibC5jCkBAIC0xNTQsMzQgKzE1NCwzOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXJldHVybiBkYTkwM3hfYmFja2xpZ2h0X3NldChibCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgZGE5MDN4X2JhY2tsaWdodF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZGE5MDN4X2JhY2tsaWdodF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJsKTsKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIGRhOTAzeF9iYWNrbGlnaHRfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lCQlOVUxMCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBkYTkwM3hfYmFja2xpZ2h0X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IGRhOTAzeF9iYWNrbGlnaHRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkYTkwM3hfYmFja2xpZ2h0X2RyaXZlciA9IHsKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiZGE5MDN4LWJhY2tsaWdodCIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmZGE5MDN4X2JhY2tsaWdodF9wbV9vcHMsCisjZW5kaWYKIAl9LAogCS5wcm9iZQkJPSBkYTkwM3hfYmFja2xpZ2h0X3Byb2JlLAogCS5yZW1vdmUJCT0gZGE5MDN4X2JhY2tsaWdodF9yZW1vdmUsCi0JLnN1c3BlbmQJPSBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBkYTkwM3hfYmFja2xpZ2h0X3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGRhOTAzeF9iYWNrbGlnaHRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKaW5kZXggNWJlNTVhMi4uN2ZiNGVlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkudXBkYXRlX3N0YXR1cyAgPSBocDY4MGJsX3NldF9pbnRlbnNpdHksCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBocDY4MGJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBocDY4MGJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCmluZGV4IGI2NDQ5NDcuLmE0ODJkZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCkBAIC01Niw3ICs1Niw3IEBACiAKIHN0YXRpYyBpbnQgbGNkX3JlZ2lzdGVyX2ZiKHN0cnVjdCBsY2RfZGV2aWNlICpsZCkKIHsKLQltZW1zZXQoJmxkLT5mYl9ub3RpZiwgMCwgc2l6ZW9mKCZsZC0+ZmJfbm90aWYpKTsKKwltZW1zZXQoJmxkLT5mYl9ub3RpZiwgMCwgc2l6ZW9mKGxkLT5mYl9ub3RpZikpOwogCWxkLT5mYl9ub3RpZi5ub3RpZmllcl9jYWxsID0gZmJfbm90aWZpZXJfY2FsbGJhY2s7CiAJcmV0dXJuIGZiX3JlZ2lzdGVyX2NsaWVudCgmbGQtPmZiX25vdGlmKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xtczI4M2dmMDUuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xtczI4M2dmMDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDdiNTQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG1zMjgzZ2YwNS5jCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogbG1zMjgzZ2YwNS5jIC0tIHN1cHBvcnQgZm9yIFNhbXN1bmcgTE1TMjgzR0YwNSBMQ0QKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sY2QuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbG1zMjgzZ2YwNS5oPgorCitzdHJ1Y3QgbG1zMjgzZ2YwNV9zdGF0ZSB7CisJc3RydWN0IHNwaV9kZXZpY2UJKnNwaTsKKwlzdHJ1Y3QgbGNkX2RldmljZQkqbGQ7Cit9OworCitzdHJ1Y3QgbG1zMjgzZ2YwNV9zZXEgeworCXVuc2lnbmVkIGNoYXIJCXJlZzsKKwl1bnNpZ25lZCBzaG9ydAkJdmFsdWU7CisJdW5zaWduZWQgY2hhcgkJZGVsYXk7Cit9OworCisvKiBNYWdpYyBzZXF1ZW5jZXMgc3VwcGxpZWQgYnkgbWFudWZhY3R1cmVyLCBmb3IgZGV0YWlscyByZWZlciB0byBkYXRhc2hlZXQgKi8KK3N0YXRpYyBzdHJ1Y3QgbG1zMjgzZ2YwNV9zZXEgZGlzcF9pbml0c2VxW10gPSB7CisJLyogUkVHLCBWQUxVRSwgREVMQVkgKi8KKwl7IDB4MDcsIDB4MDAwMCwgMCB9LAorCXsgMHgxMywgMHgwMDAwLCAxMCB9LAorCisJeyAweDExLCAweDMwMDQsIDAgfSwKKwl7IDB4MTQsIDB4MjAwRiwgMCB9LAorCXsgMHgxMCwgMHgxYTIwLCAwIH0sCisJeyAweDEzLCAweDAwNDAsIDUwIH0sCisKKwl7IDB4MTMsIDB4MDA2MCwgMCB9LAorCXsgMHgxMywgMHgwMDcwLCAyMDAgfSwKKworCXsgMHgwMSwgMHgwMTI3LCAwIH0sCisJeyAweDAyLAkweDA3MDAsIDAgfSwKKwl7IDB4MDMsIDB4MTAzMCwgMCB9LAorCXsgMHgwOCwgMHgwMjA4LCAwIH0sCisJeyAweDBCLCAweDA2MjAsIDAgfSwKKwl7IDB4MEMsIDB4MDExMCwgMCB9LAorCXsgMHgzMCwgMHgwMTIwLCAwIH0sCisJeyAweDMxLCAweDAxMjcsIDAgfSwKKwl7IDB4MzIsIDB4MDAwMCwgMCB9LAorCXsgMHgzMywgMHgwNTAzLCAwIH0sCisJeyAweDM0LCAweDA3MjcsIDAgfSwKKwl7IDB4MzUsIDB4MDEyNCwgMCB9LAorCXsgMHgzNiwgMHgwNzA2LCAwIH0sCisJeyAweDM3LCAweDA3MDEsIDAgfSwKKwl7IDB4MzgsIDB4MEYwMCwgMCB9LAorCXsgMHgzOSwgMHgwRjAwLCAwIH0sCisJeyAweDQwLCAweDAwMDAsIDAgfSwKKwl7IDB4NDEsIDB4MDAwMCwgMCB9LAorCXsgMHg0MiwgMHgwMTNmLCAwIH0sCisJeyAweDQzLCAweDAwMDAsIDAgfSwKKwl7IDB4NDQsIDB4MDEzZiwgMCB9LAorCXsgMHg0NSwgMHgwMDAwLCAwIH0sCisJeyAweDQ2LCAweGVmMDAsIDAgfSwKKwl7IDB4NDcsIDB4MDEzZiwgMCB9LAorCXsgMHg0OCwgMHgwMDAwLCAwIH0sCisJeyAweDA3LCAweDAwMTUsIDMwIH0sCisKKwl7IDB4MDcsIDB4MDAxNywgMCB9LAorCisJeyAweDIwLCAweDAwMDAsIDAgfSwKKwl7IDB4MjEsIDB4MDAwMCwgMCB9LAorCXsgMHgyMiwgMHgwMDAwLCAwIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbG1zMjgzZ2YwNV9zZXEgZGlzcF9wZHduc2VxW10gPSB7CisJeyAweDA3LCAweDAwMTYsIDMwIH0sCisKKwl7IDB4MDcsIDB4MDAwNCwgMCB9LAorCXsgMHgxMCwgMHgwMjIwLCAyMCB9LAorCisJeyAweDEzLCAweDAwNjAsIDUwIH0sCisKKwl7IDB4MTMsIDB4MDA0MCwgNTAgfSwKKworCXsgMHgxMywgMHgwMDAwLCAwIH0sCisJeyAweDEwLCAweDAwMDAsIDAgfQorfTsKKworCitzdGF0aWMgdm9pZCBsbXMyODNnZjA1X3Jlc2V0KHVuc2lnbmVkIGxvbmcgZ3BpbywgYm9vbCBpbnZlcnRlZCkKK3sKKwlncGlvX3NldF92YWx1ZShncGlvLCAhaW52ZXJ0ZWQpOworCW1kZWxheSgxMDApOworCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIGludmVydGVkKTsKKwltZGVsYXkoMjApOworCWdwaW9fc2V0X3ZhbHVlKGdwaW8sICFpbnZlcnRlZCk7CisJbWRlbGF5KDIwKTsKK30KKworc3RhdGljIHZvaWQgbG1zMjgzZ2YwNV90b2dnbGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCXN0cnVjdCBsbXMyODNnZjA1X3NlcSAqc2VxLCBpbnQgc3opCit7CisJY2hhciBidWZbM107CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3o7IGkrKykgeworCQlidWZbMF0gPSAweDc0OworCQlidWZbMV0gPSAweDAwOworCQlidWZbMl0gPSBzZXFbaV0ucmVnOworCQlzcGlfd3JpdGUoc3BpLCBidWYsIDMpOworCisJCWJ1ZlswXSA9IDB4NzY7CisJCWJ1ZlsxXSA9IHNlcVtpXS52YWx1ZSA+PiA4OworCQlidWZbMl0gPSBzZXFbaV0udmFsdWUgJiAweGZmOworCQlzcGlfd3JpdGUoc3BpLCBidWYsIDMpOworCisJCW1kZWxheShzZXFbaV0uZGVsYXkpOworCX0KK30KKworc3RhdGljIGludCBsbXMyODNnZjA1X3Bvd2VyX3NldChzdHJ1Y3QgbGNkX2RldmljZSAqbGQsIGludCBwb3dlcikKK3sKKwlzdHJ1Y3QgbG1zMjgzZ2YwNV9zdGF0ZSAqc3QgPSBsY2RfZ2V0X2RhdGEobGQpOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBzdC0+c3BpOworCXN0cnVjdCBsbXMyODNnZjA1X3BkYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocG93ZXIpIHsKKwkJaWYgKHBkYXRhKQorCQkJbG1zMjgzZ2YwNV9yZXNldChwZGF0YS0+cmVzZXRfZ3BpbywKKwkJCQkJcGRhdGEtPnJlc2V0X2ludmVydGVkKTsKKwkJbG1zMjgzZ2YwNV90b2dnbGUoc3BpLCBkaXNwX2luaXRzZXEsIEFSUkFZX1NJWkUoZGlzcF9pbml0c2VxKSk7CisJfSBlbHNlIHsKKwkJbG1zMjgzZ2YwNV90b2dnbGUoc3BpLCBkaXNwX3Bkd25zZXEsIEFSUkFZX1NJWkUoZGlzcF9wZHduc2VxKSk7CisJCWlmIChwZGF0YSkKKwkJCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5yZXNldF9ncGlvLAorCQkJCQlwZGF0YS0+cmVzZXRfaW52ZXJ0ZWQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxjZF9vcHMgbG1zX29wcyA9IHsKKwkuc2V0X3Bvd2VyCT0gbG1zMjgzZ2YwNV9wb3dlcl9zZXQsCisJLmdldF9wb3dlcgk9IE5VTEwsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBsbXMyODNnZjA1X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGxtczI4M2dmMDVfc3RhdGUgKnN0OworCXN0cnVjdCBsbXMyODNnZjA1X3BkYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGxjZF9kZXZpY2UgKmxkOworCWludCByZXQgPSAwOworCisJaWYgKHBkYXRhICE9IE5VTEwpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5yZXNldF9ncGlvLCAiTE1TMjg1R0YwNSBSRVNFVCIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPnJlc2V0X2dwaW8sCisJCQkJCQkhcGRhdGEtPnJlc2V0X2ludmVydGVkKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxtczI4M2dmMDVfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3QgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIk5vIG1lbW9yeSBmb3IgZGV2aWNlIHN0YXRlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJbGQgPSBsY2RfZGV2aWNlX3JlZ2lzdGVyKCJsbXMyODNnZjA1IiwgJnNwaS0+ZGV2LCBzdCwgJmxtc19vcHMpOworCWlmIChJU19FUlIobGQpKSB7CisJCXJldCA9IFBUUl9FUlIobGQpOworCQlnb3RvIGVycjI7CisJfQorCisJc3QtPnNwaSA9IHNwaTsKKwlzdC0+bGQgPSBsZDsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHN0KTsKKworCS8qIGtpY2sgaW4gdGhlIExDRCAqLworCWlmIChwZGF0YSkKKwkJbG1zMjgzZ2YwNV9yZXNldChwZGF0YS0+cmVzZXRfZ3BpbywgcGRhdGEtPnJlc2V0X2ludmVydGVkKTsKKwlsbXMyODNnZjA1X3RvZ2dsZShzcGksIGRpc3BfaW5pdHNlcSwgQVJSQVlfU0laRShkaXNwX2luaXRzZXEpKTsKKworCXJldHVybiAwOworCitlcnIyOgorCWtmcmVlKHN0KTsKK2VycjoKKwlpZiAocGRhdGEgIT0gTlVMTCkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5yZXNldF9ncGlvKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGxtczI4M2dmMDVfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGxtczI4M2dmMDVfc3RhdGUgKnN0ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisJc3RydWN0IGxtczI4M2dmMDVfcGRhdGEgKnBkYXRhID0gc3QtPnNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlsY2RfZGV2aWNlX3VucmVnaXN0ZXIoc3QtPmxkKTsKKworCWlmIChwZGF0YSAhPSBOVUxMKQorCQlncGlvX2ZyZWUocGRhdGEtPnJlc2V0X2dwaW8pOworCisJa2ZyZWUoc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBsbXMyODNnZjA1X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJsbXMyODNnZjA1IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbG1zMjgzZ2YwNV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGxtczI4M2dmMDVfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGxtczI4M2dmMDVfaW5pdCh2b2lkKQoreworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZsbXMyODNnZjA1X2RyaXZlcik7Cit9CisKK3N0YXRpYyBfX2V4aXQgdm9pZCBsbXMyODNnZjA1X2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmxtczI4M2dmMDVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobG1zMjgzZ2YwNV9pbml0KTsKK21vZHVsZV9leGl0KGxtczI4M2dmMDVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxDRDI4M0dGMDUgTENEIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMKaW5kZXggM2JiNGMwYS4uOWVkYjhkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21icF9udmlkaWFfYmwuYwpAQCAtMTY2LDYgKzE2NiwxNSBAQAogCX0sCiAJewogCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2tBaXIgMSwxIiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tBaXIxLDEiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmaW50ZWxfY2hpcHNldF9kYXRhLAorCX0sCisJeworCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAogCQkuaWRlbnQJCT0gIk1hY0Jvb2sgNSwxIiwKIAkJLm1hdGNoZXMJPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCkBAIC0xNzUsNiArMTg0LDE1IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCisJCS5pZGVudAkJPSAiTWFjQm9vayA1LDIiLAorCQkubWF0Y2hlcwk9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9vazUsMiIpLAorCQl9LAorCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAorCX0sCisJeworCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAogCQkuaWRlbnQJCT0gIk1hY0Jvb2tBaXIgMiwxIiwKIAkJLm1hdGNoZXMJPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCkBAIC0xOTEsNiArMjA5LDI0IEBACiAJCX0sCiAJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJm52aWRpYV9jaGlwc2V0X2RhdGEsCiAJfSwKKwl7CisJCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCisJCS5pZGVudAkJPSAiTWFjQm9va1BybyA1LDIiLAorCQkubWF0Y2hlcwk9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzUsMiIpLAorCQl9LAorCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAorCX0sCisJeworCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2tQcm8gNSw1IiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81LDUiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC93bTgzMXhfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjdiZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4X2JsLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBCYWNrbGlnaHQgZHJpdmVyIGZvciBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004MzF4IFBNSUNzCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0b25pY3MgcGxjCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L3BkYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9yZWd1bGF0b3IuaD4KKworc3RydWN0IHdtODMxeF9iYWNrbGlnaHRfZGF0YSB7CisJc3RydWN0IHdtODMxeCAqd204MzF4OworCWludCBpc2lua19yZWc7CisJaW50IGN1cnJlbnRfYnJpZ2h0bmVzczsKK307CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2tsaWdodF9zZXQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsLCBpbnQgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9kYXRhICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGRhdGEtPndtODMxeDsKKwlpbnQgcG93ZXJfdXAgPSAhZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzICYmIGJyaWdodG5lc3M7CisJaW50IHBvd2VyX2Rvd24gPSBkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgJiYgIWJyaWdodG5lc3M7CisJaW50IHJldDsKKworCWlmIChwb3dlcl91cCkgeworCQkvKiBFbmFibGUgdGhlIElTSU5LICovCisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRhdGEtPmlzaW5rX3JlZywKKwkJCQkgICAgICBXTTgzMVhfQ1MxX0VOQSwgV004MzFYX0NTMV9FTkEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCisJCS8qIEVuYWJsZSB0aGUgREMtREMgKi8KKwkJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0RDRENfRU5BQkxFLAorCQkJCSAgICAgIFdNODMxWF9EQzRfRU5BLCBXTTgzMVhfREM0X0VOQSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnI7CisJfQorCisJaWYgKHBvd2VyX2Rvd24pIHsKKwkJLyogRENEQyBmaXJzdCAqLworCQlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfRENEQ19FTkFCTEUsCisJCQkJICAgICAgV004MzFYX0RDNF9FTkEsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCisJCS8qIElTSU5LICovCisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRhdGEtPmlzaW5rX3JlZywKKwkJCQkgICAgICBXTTgzMVhfQ1MxX0RSSVZFIHwgV004MzFYX0NTMV9FTkEsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKworCS8qIFNldCB0aGUgbmV3IGJyaWdodG5lc3MgKi8KKwlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBkYXRhLT5pc2lua19yZWcsCisJCQkgICAgICBXTTgzMVhfQ1MxX0lTRUxfTUFTSywgYnJpZ2h0bmVzcyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOworCisJaWYgKHBvd2VyX3VwKSB7CisJCS8qIERyaXZlIGN1cnJlbnQgdGhyb3VnaCB0aGUgSVNJTksgKi8KKwkJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgZGF0YS0+aXNpbmtfcmVnLAorCQkJCSAgICAgIFdNODMxWF9DUzFfRFJJVkUsIFdNODMxWF9DUzFfRFJJVkUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKworCXJldHVybiAwOworCitlcnI6CisJLyogSWYgd2Ugd2VyZSBpbiB0aGUgbWlkZGxlIG9mIGEgcG93ZXIgdHJhbnNpdGlvbiBhbHdheXMgc2h1dCBkb3duCisJICogZm9yIHNhZmV0eS4KKwkgKi8KKwlpZiAocG93ZXJfdXAgfHwgcG93ZXJfZG93bikgeworCQl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfRENEQ19FTkFCTEUsIFdNODMxWF9EQzRfRU5BLCAwKTsKKwkJd204MzF4X3NldF9iaXRzKHdtODMxeCwgZGF0YS0+aXNpbmtfcmVnLCBXTTgzMVhfQ1MxX0VOQSwgMCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTgzMXhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsKQoreworCWludCBicmlnaHRuZXNzID0gYmwtPnByb3BzLmJyaWdodG5lc3M7CisKKwlpZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCWlmIChibC0+cHJvcHMuc3RhdGUgJiBCTF9DT1JFX1NVU1BFTkRFRCkKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwlyZXR1cm4gd204MzF4X2JhY2tsaWdodF9zZXQoYmwsIGJyaWdodG5lc3MpOworfQorCitzdGF0aWMgaW50IHdtODMxeF9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsKQoreworCXN0cnVjdCB3bTgzMXhfYmFja2xpZ2h0X2RhdGEgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJcmV0dXJuIGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzczsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIHdtODMxeF9iYWNrbGlnaHRfb3BzID0geworCS5vcHRpb25zID0gQkxfQ09SRV9TVVNQRU5EUkVTVU1FLAorCS51cGRhdGVfc3RhdHVzCT0gd204MzF4X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzLAorCS5nZXRfYnJpZ2h0bmVzcwk9IHdtODMxeF9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3MsCit9OworCitzdGF0aWMgaW50IHdtODMxeF9iYWNrbGlnaHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHdtODMxeF9wZGF0YSAqd204MzF4X3BkYXRhOworCXN0cnVjdCB3bTgzMXhfYmFja2xpZ2h0X3BkYXRhICpwZGF0YTsKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9kYXRhICpkYXRhOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibDsKKwlpbnQgcmV0LCBpLCBtYXhfaXNlbCwgaXNpbmtfcmVnLCBkY2RjX2NmZzsKKworCS8qIFdlIG5lZWQgcGxhdGZvcm0gZGF0YSAqLworCWlmIChwZGV2LT5kZXYucGFyZW50LT5wbGF0Zm9ybV9kYXRhKSB7CisJCXdtODMxeF9wZGF0YSA9IHBkZXYtPmRldi5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisJCXBkYXRhID0gd204MzF4X3BkYXRhLT5iYWNrbGlnaHQ7CisJfSBlbHNlIHsKKwkJcGRhdGEgPSBOVUxMOworCX0KKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZpZ3VyZSBvdXQgdGhlIG1heGltdW0gY3VycmVudCB3ZSBjYW4gdXNlICovCisJZm9yIChpID0gMDsgaSA8IFdNODMxWF9JU0lOS19NQVhfSVNFTDsgaSsrKSB7CisJCWlmICh3bTgzMXhfaXNpbmt2X3ZhbHVlc1tpXSA+IHBkYXRhLT5tYXhfdUEpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgbWF4X3VBOiAlZHVBXG4iLCBwZGF0YS0+bWF4X3VBKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW1heF9pc2VsID0gaSAtIDE7CisKKwlpZiAocGRhdGEtPm1heF91QSAhPSB3bTgzMXhfaXNpbmt2X3ZhbHVlc1ttYXhfaXNlbF0pCisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkgIk1heGltdW0gY3VycmVudCBpcyAlZHVBIG5vdCAlZHVBIGFzIHJlcXVlc3RlZFxuIiwKKwkJCSB3bTgzMXhfaXNpbmt2X3ZhbHVlc1ttYXhfaXNlbF0sIHBkYXRhLT5tYXhfdUEpOworCisJc3dpdGNoIChwZGF0YS0+aXNpbmspIHsKKwljYXNlIDE6CisJCWlzaW5rX3JlZyA9IFdNODMxWF9DVVJSRU5UX1NJTktfMTsKKwkJZGNkY19jZmcgPSAwOworCQlicmVhazsKKwljYXNlIDI6CisJCWlzaW5rX3JlZyA9IFdNODMxWF9DVVJSRU5UX1NJTktfMjsKKwkJZGNkY19jZmcgPSBXTTgzMVhfREM0X0ZCU1JDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIElTSU5LICVkXG4iLCBwZGF0YS0+aXNpbmspOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDb25maWd1cmUgdGhlIElTSU5LIHRvIHVzZSBmb3IgZmVlZGJhY2sgKi8KKwlyZXQgPSB3bTgzMXhfcmVnX3VubG9jayh3bTgzMXgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0RDNF9DT05UUk9MLCBXTTgzMVhfREM0X0ZCU1JDLAorCQkJICAgICAgZGNkY19jZmcpOworCisJd204MzF4X3JlZ19sb2NrKHdtODMxeCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPndtODMxeCA9IHdtODMxeDsKKwlkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgPSAwOworCWRhdGEtPmlzaW5rX3JlZyA9IGlzaW5rX3JlZzsKKworCWJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcigid204MzF4IiwgJnBkZXYtPmRldiwKKwkJCWRhdGEsICZ3bTgzMXhfYmFja2xpZ2h0X29wcyk7CisJaWYgKElTX0VSUihibCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gUFRSX0VSUihibCk7CisJfQorCisJYmwtPnByb3BzLm1heF9icmlnaHRuZXNzID0gbWF4X2lzZWw7CisJYmwtPnByb3BzLmJyaWdodG5lc3MgPSBtYXhfaXNlbDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGJsKTsKKworCS8qIERpc2FibGUgdGhlIERDREMgaWYgaXQgd2FzIHN0YXJ0ZWQgc28gd2UgY2FuIGJvb3RzdHJhcCAqLworCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9EQ0RDX0VOQUJMRSwgV004MzFYX0RDNF9FTkEsIDApOworCisKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhibCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTgzMXhfYmFja2xpZ2h0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB3bTgzMXhfYmFja2xpZ2h0X2RhdGEgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmwpOworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTgzMXhfYmFja2xpZ2h0X2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAid204MzF4LWJhY2tsaWdodCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHdtODMxeF9iYWNrbGlnaHRfcHJvYmUsCisJLnJlbW92ZQkJPSB3bTgzMXhfYmFja2xpZ2h0X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtODMxeF9iYWNrbGlnaHRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndtODMxeF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtODMxeF9iYWNrbGlnaHRfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTgzMXhfYmFja2xpZ2h0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204MzF4X2JhY2tsaWdodF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204MzF4X2JhY2tsaWdodF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJCYWNrbGlnaHQgRHJpdmVyIGZvciBXTTgzMXggUE1JQ3MiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODMxeC1iYWNrbGlnaHQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggNWE2ODZjZS4uMzY4MWM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTIzMTEsMTQgKzIzMTEsMTEgQEAKIAkJb3BzLT5ncmFwaGljcyA9IDE7CiAKIAkJaWYgKCFibGFuaykgewotCQkJaWYgKGluZm8tPmZib3BzLT5mYl9zYXZlX3N0YXRlKQotCQkJCWluZm8tPmZib3BzLT5mYl9zYXZlX3N0YXRlKGluZm8pOwogCQkJdmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XIHwgRkJfQUNUSVZBVEVfRk9SQ0U7CiAJCQlmYl9zZXRfdmFyKGluZm8sICZ2YXIpOwogCQkJb3BzLT5ncmFwaGljcyA9IDA7CiAJCQlvcHMtPnZhciA9IGluZm8tPnZhcjsKLQkJfSBlbHNlIGlmIChpbmZvLT5mYm9wcy0+ZmJfcmVzdG9yZV9zdGF0ZSkKLQkJCWluZm8tPmZib3BzLT5mYl9yZXN0b3JlX3N0YXRlKGluZm8pOworCQl9CiAJfQogCiAgCWlmICghZmJjb25faXNfaW5hY3RpdmUodmMsIGluZm8pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKaW5kZXggNDJlMTAwNS4uMDM1ZDU2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDx2aWRlby9kYTh4eC1mYi5oPgpAQCAtNzA1LDcgKzcwNCw3IEBACiAKIAlpZiAoaSA9PSBBUlJBWV9TSVpFKGtub3duX2xjZF9wYW5lbHMpKSB7CiAJCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiR0xDRDogTm8gdmFsaWQgcGFuZWwgZm91bmRcbiIpOwotCQlyZXQgPSBFTk9ERVY7CisJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOwogCX0gZWxzZQogCQlkZXZfaW5mbygmZGV2aWNlLT5kZXYsICJHTENEOiBGb3VuZCAlcyBwYW5lbFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYyBiL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYwppbmRleCAwYTdhNjY3Li5jMjdhYjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKKysrIGIvZHJpdmVycy92aWRlby9mYl9kZWZpby5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBmYl9kZWZlcnJlZF9pb192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGZiX2RlZmVycmVkX2lvX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gZmJfZGVmZXJyZWRfaW9fZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IGZiX2RlZmVycmVkX2lvX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1lbS5jIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCmluZGV4IGExZjJlN2MuLjk5YmJkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKQEAgLTE4MDAsNyArMTgwMCw3IEBACiAgCQlnbG9iYWwgPSAxOwogIAl9CiAKLSAJaWYgKCFnbG9iYWwgJiYgIXN0cnN0cihvcHRpb25zLCAiZmI6IikpIHsKKyAJaWYgKCFnbG9iYWwgJiYgIXN0cmNocihvcHRpb25zLCAnOicpKSB7CiAgCQlmYl9tb2RlX29wdGlvbiA9IG9wdGlvbnM7CiAgCQlnbG9iYWwgPSAxOwogIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKaW5kZXggZjJkZTVhMS4uNDc0NDIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbWRkaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYwpAQCAtMjQsMTEgKzI0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQogI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CiAjaW5jbHVkZSAibWRkaV9ody5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9udDM1Mzk5LmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9udDM1Mzk5LmMKaW5kZXggOWM3ODA1MC4uYzllOTM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfbnQzNTM5OS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X250MzUzOTkuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X3Rvc2hpYmEuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X3Rvc2hpYmEuYwppbmRleCA4MGQwZjVmLi43MTA0OGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfdG9zaGliYS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bWFjaC9tc21fZmIuaD4KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcC5jCmluZGV4IDk5NjM2YTIuLjZjNTE5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcC5jCkBAIC0yMiw5ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCi0jaW5jbHVkZSA8bGludXgvYW5kcm9pZF9wbWVtLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogCiAjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KQEAgLTI2MiwxMSArMjU5LDYgQEAKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAl1bnNpZ25lZCBsb25nIHZzdGFydDsKIAotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLQlpZiAoIWdldF9wbWVtX2ZpbGUoaW1nLT5tZW1vcnlfaWQsIHN0YXJ0LCAmdnN0YXJ0LCBsZW4sIGZpbGVwKSkKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQogCWZpbGUgPSBmZ2V0X2xpZ2h0KGltZy0+bWVtb3J5X2lkLCAmcHV0X25lZWRlZCk7CiAJaWYgKGZpbGUgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwpAQCAtMjgzLDEyICsyNzUsNiBAQAogCiB2b2lkIHB1dF9pbWcoc3RydWN0IGZpbGUgKnNyY19maWxlLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUpCiB7Ci0jaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQotCWlmIChzcmNfZmlsZSkKLQkJcHV0X3BtZW1fZmlsZShzcmNfZmlsZSk7Ci0JaWYgKGRzdF9maWxlKQotCQlwdXRfcG1lbV9maWxlKGRzdF9maWxlKTsKLSNlbmRpZgogfQogCiBpbnQgbWRwX2JsaXQoc3RydWN0IG1kcF9kZXZpY2UgKm1kcF9kZXYsIHN0cnVjdCBmYl9pbmZvICpmYiwKQEAgLTMyMCw5ICszMDYsNiBAQAogCWlmICh1bmxpa2VseShnZXRfaW1nKCZyZXEtPmRzdCwgZmIsICZkc3Rfc3RhcnQsICZkc3RfbGVuLCAmZHN0X2ZpbGUpKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1wZF9wcHA6IGNvdWxkIG5vdCByZXRyaWV2ZSBkc3QgaW1hZ2UgZnJvbSAiCiAJCQkJIm1lbW9yeVxuIik7Ci0jaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQotCQlwdXRfcG1lbV9maWxlKHNyY19maWxlKTsKLSNlbmRpZgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJbXV0ZXhfbG9jaygmbWRwX211dGV4KTsKQEAgLTQ5OSw3ICs0ODIsNiBAQAogCS8qIHJlZ2lzdGVyIG1kcCBkZXZpY2UgKi8KIAltZHAtPm1kcF9kZXYuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJbWRwLT5tZHBfZGV2LmRldi5jbGFzcyA9IG1kcF9jbGFzczsKLQlzbnByaW50ZihtZHAtPm1kcF9kZXYuZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJtZHAlZCIsIHBkZXYtPmlkKTsKIAogCS8qIGlmIHlvdSBjYW4gcmVtb3ZlIHRoZSBwbGF0Zm9ybSBkZXZpY2UgeW91J2QgaGF2ZSB0byBpbXBsZW1lbnQKIAkgKiB0aGlzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jCmluZGV4IGJhMmM0NjcuLjRmZjAwMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfcHBwLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tc21fbWRwLmg+Ci0jaW5jbHVkZSA8bGludXgvYW5kcm9pZF9wbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9tc21fZmIuaD4KIAogI2luY2x1ZGUgIm1kcF9ody5oIgpAQCAtNTc5LDI1ICs1NzgsNiBAQAogc3RhdGljIHZvaWQgZmx1c2hfaW1ncyhzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEsIHN0cnVjdCBtZHBfcmVncyAqcmVncywKIAkJICAgICAgIHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgc3RydWN0IGZpbGUgKmRzdF9maWxlKQogewotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLQl1aW50MzJfdCBzcmMwX2xlbiwgc3JjMV9sZW4sIGRzdDBfbGVuLCBkc3QxX2xlbjsKLQotCS8qIGZsdXNoIHNyYyBpbWFnZXMgdG8gbWVtb3J5IGJlZm9yZSBkbWEgdG8gbWRwICovCi0JZ2V0X2xlbigmcmVxLT5zcmMsICZyZXEtPnNyY19yZWN0LCByZWdzLT5zcmNfYnBwLCAmc3JjMF9sZW4sCi0JCSZzcmMxX2xlbik7Ci0JZmx1c2hfcG1lbV9maWxlKHNyY19maWxlLCByZXEtPnNyYy5vZmZzZXQsIHNyYzBfbGVuKTsKLQlpZiAoSVNfUFNFVURPUExOUihyZXEtPnNyYy5mb3JtYXQpKQotCQlmbHVzaF9wbWVtX2ZpbGUoc3JjX2ZpbGUsIHJlcS0+c3JjLm9mZnNldCArIHNyYzBfbGVuLAotCQkJCXNyYzFfbGVuKTsKLQotCS8qIGZsdXNoIGRzdCBpbWFnZXMgKi8KLQlnZXRfbGVuKCZyZXEtPmRzdCwgJnJlcS0+ZHN0X3JlY3QsIHJlZ3MtPmRzdF9icHAsICZkc3QwX2xlbiwKLQkJJmRzdDFfbGVuKTsKLQlmbHVzaF9wbWVtX2ZpbGUoZHN0X2ZpbGUsIHJlcS0+ZHN0Lm9mZnNldCwgZHN0MF9sZW4pOwotCWlmIChJU19QU0VVRE9QTE5SKHJlcS0+ZHN0LmZvcm1hdCkpCi0JCWZsdXNoX3BtZW1fZmlsZShkc3RfZmlsZSwgcmVxLT5kc3Qub2Zmc2V0ICsgZHN0MF9sZW4sCi0JCQkJZHN0MV9sZW4pOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGdldF9jaHJvbWFfYWRkcihzdHJ1Y3QgbWRwX2ltZyAqaW1nLCBzdHJ1Y3QgbWRwX3JlY3QgKnJlY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9ibGl6emFyZC5jCmluZGV4IGQ1ZTU5NTUuLjcwZGFkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9ibGl6emFyZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9ibGl6emFyZC5jCkBAIC05Myw3ICs5Myw3IEBACiB9OwogCiAvKiBUaGVzZSBuZWVkIHRvIGJlIHNhdmVkIC8gcmVzdG9yZWQgc2VwYXJhdGVseSBmcm9tIHRoZSByZXN0LiAqLwotc3RhdGljIHN0cnVjdCBibGl6emFyZF9yZWdfbGlzdCBibGl6emFyZF9wbGxfcmVnc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibGl6emFyZF9yZWdfbGlzdCBibGl6emFyZF9wbGxfcmVnc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gMHgwNCwJCS8qIERvbid0IHNhdmUgUExMIGN0cmwgKDB4MEMpICovCiAJCS5lbmQJPSAweDBhLApAQCAtMTA0LDcgKzEwNCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgYmxpenphcmRfZ2VuX3JlZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgYmxpenphcmRfZ2VuX3JlZ3NbXSA9IHsKIAl7CiAJCS5zdGFydAk9IDB4MTgsCQkvKiBTRFJBTSBjb250cm9sICovCiAJCS5lbmQJPSAweDIwLApAQCAtMTkxLDcgKzE5MSw3IEBACiAKIAlzdHJ1Y3Qgb21hcGZiX2RldmljZQkqZmJkZXY7CiAJc3RydWN0IGxjZF9jdHJsX2V4dGlmCSpleHRpZjsKLQlzdHJ1Y3QgbGNkX2N0cmwJCSppbnRfY3RybDsKKwljb25zdCBzdHJ1Y3QgbGNkX2N0cmwJKmludF9jdHJsOwogCiAJdm9pZAkJCSgqcG93ZXJfdXApKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJdm9pZAkJCSgqcG93ZXJfZG93bikoc3RydWN0IGRldmljZSAqZGV2KTsKQEAgLTEzNzIsNyArMTM3Miw3IEBACiAJCQkgICAoMSA8PCBPTUFQRkJfQ09MT1JfWVVWNDIwKTsKIH0KIAotc3RhdGljIHZvaWQgX3NhdmVfcmVncyhzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgKmxpc3QsIGludCBjbnQpCitzdGF0aWMgdm9pZCBfc2F2ZV9yZWdzKGNvbnN0IHN0cnVjdCBibGl6emFyZF9yZWdfbGlzdCAqbGlzdCwgaW50IGNudCkKIHsKIAlpbnQgaTsKIApAQCAtMTM4Myw3ICsxMzgzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9yZXN0b3JlX3JlZ3Moc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0ICpsaXN0LCBpbnQgY250KQorc3RhdGljIHZvaWQgX3Jlc3RvcmVfcmVncyhjb25zdCBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgKmxpc3QsIGludCBjbnQpCiB7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKaW5kZXggODBhMTFkMC4uZjE2ZTQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKQEAgLTEwMzUsNyArMTAzNSw3IEBACiAJYXRvbWljX2RlYygmZGlzcGMubWFwX2NvdW50W3BsYW5lXSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF91c2VyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF91c2VyX29wcyA9IHsKIAkub3BlbiA9IG1tYXBfdXNlcl9vcGVuLAogCS5jbG9zZSA9IG1tYXBfdXNlcl9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCmluZGV4IDEyNWU2MDUuLjBkMGM4YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCkBAIC0zOTMsNyArMzkzLDcgQEAKICAqIFNldCBmYl9pbmZvLmZpeCBmaWVsZHMgYW5kIGFsc28gdXBkYXRlcyBmYmRldi4KICAqIFdoZW4gY2FsbGluZyB0aGlzIGZiX2luZm8udmFyIG11c3QgYmUgc2V0IHVwIGFscmVhZHkuCiAgKi8KLXN0YXRpYyB2b2lkIHNldF9mYl9maXgoc3RydWN0IGZiX2luZm8gKmZiaSkKK3N0YXRpYyB2b2lkIHNldF9mYl9maXgoc3RydWN0IGZiX2luZm8gKmZiaSwgaW50IGZyb21faW5pdCkKIHsKIAlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCA9ICZmYmktPmZpeDsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZmYmktPnZhcjsKQEAgLTQwMywxMCArNDAzLDE2IEBACiAKIAlyZyA9ICZwbGFuZS0+ZmJkZXYtPm1lbV9kZXNjLnJlZ2lvbltwbGFuZS0+aWR4XTsKIAlmYmktPnNjcmVlbl9iYXNlCT0gcmctPnZhZGRyOwotCW11dGV4X2xvY2soJmZiaS0+bW1fbG9jayk7Ci0JZml4LT5zbWVtX3N0YXJ0CQk9IHJnLT5wYWRkcjsKLQlmaXgtPnNtZW1fbGVuCQk9IHJnLT5zaXplOwotCW11dGV4X3VubG9jaygmZmJpLT5tbV9sb2NrKTsKKworCWlmICghZnJvbV9pbml0KSB7CisJCW11dGV4X2xvY2soJmZiaS0+bW1fbG9jayk7CisJCWZpeC0+c21lbV9zdGFydAkJPSByZy0+cGFkZHI7CisJCWZpeC0+c21lbV9sZW4JCT0gcmctPnNpemU7CisJCW11dGV4X3VubG9jaygmZmJpLT5tbV9sb2NrKTsKKwl9IGVsc2UgeworCQlmaXgtPnNtZW1fc3RhcnQJCT0gcmctPnBhZGRyOworCQlmaXgtPnNtZW1fbGVuCQk9IHJnLT5zaXplOworCX0KIAogCWZpeC0+dHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKIAlicHAgPSB2YXItPmJpdHNfcGVyX3BpeGVsOwpAQCAtNzA0LDcgKzcxMCw3IEBACiAJaW50IHIgPSAwOwogCiAJb21hcGZiX3JxdWV1ZV9sb2NrKGZiZGV2KTsKLQlzZXRfZmJfZml4KGZiaSk7CisJc2V0X2ZiX2ZpeChmYmksIDApOwogCXIgPSBjdHJsX2NoYW5nZV9tb2RlKGZiaSk7CiAJb21hcGZiX3JxdWV1ZV91bmxvY2soZmJkZXYpOwogCkBAIC05MDQsNyArOTEwLDcgQEAKIAkJaWYgKG9sZF9zaXplICE9IHNpemUpIHsKIAkJCWlmIChzaXplKSB7CiAJCQkJbWVtY3B5KCZmYmktPnZhciwgbmV3X3Zhciwgc2l6ZW9mKGZiaS0+dmFyKSk7Ci0JCQkJc2V0X2ZiX2ZpeChmYmkpOworCQkJCXNldF9mYl9maXgoZmJpLCAwKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKIAkJCQkgKiBTZXQgdGhlc2UgZXhwbGljaXRseSB0byBpbmRpY2F0ZSB0aGF0IHRoZQpAQCAtMTUwNCw3ICsxNTEwLDcgQEAKIAl2YXItPmJpdHNfcGVyX3BpeGVsID0gZmJkZXYtPnBhbmVsLT5icHA7CiAKIAlzZXRfZmJfdmFyKGluZm8sIHZhcik7Ci0Jc2V0X2ZiX2ZpeChpbmZvKTsKKwlzZXRfZmJfZml4KGluZm8sIDEpOwogCiAJciA9IGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDE2LCAwKTsKIAlpZiAociAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGFmYi5jIGIvZHJpdmVycy92aWRlby9weGFmYi5jCmluZGV4IDY1MDYxMTcuLjE4MjBjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTE2MzgsMjQgKzE2MzgsMjYgQEAKICAqIFBvd2VyIG1hbmFnZW1lbnQgaG9va3MuICBOb3RlIHRoYXQgd2Ugd29uJ3QgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQsCiAgKiB1bmxpa2UgdGhlIGJsYW5rIGZ1bmN0aW9ucyBhYm92ZSwgc28gd2UgbWF5IHNsZWVwLgogICovCi1zdGF0aWMgaW50IHB4YWZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YWZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCXNldF9jdHJscl9zdGF0ZShmYmksIENfRElTQUJMRV9QTSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlzZXRfY3RybHJfc3RhdGUoZmJpLCBDX0VOQUJMRV9QTSk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBweGFmYl9zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcHhhZmJfcmVzdW1lCU5VTEwKKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHB4YWZiX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YWZiX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGFmYl9yZXN1bWUsCit9OwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHB4YWZiX2luaXRfdmlkZW9fbWVtb3J5KHN0cnVjdCBweGFmYl9pbmZvICpmYmkpCkBAIC0yMDgxLDYgKzIwODMsOSBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAKKwlpZiAoY3B1X2lzX3B4YTN4eCgpICYmIGluZi0+YWNjZWxlcmF0aW9uX2VuYWJsZWQpCisJCWZiaS0+ZmIuZml4LmFjY2VsID0gRkJfQUNDRUxfUFhBM1hYOworCiAJZmJpLT5iYWNrbGlnaHRfcG93ZXIgPSBpbmYtPnB4YWZiX2JhY2tsaWdodF9wb3dlcjsKIAlmYmktPmxjZF9wb3dlciA9IGluZi0+cHhhZmJfbGNkX3Bvd2VyOwogCkBAIC0yMDkxLDE0ICsyMDk2LDE0IEBACiAJCWdvdG8gZmFpbGVkX2ZiaTsKIAl9CiAKLQlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEsIGRldi0+bmFtZSk7CisJciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSwgZGV2LT5uYW1lKTsKIAlpZiAociA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSS9PIG1lbW9yeVxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBmYWlsZWRfZmJpOwogCX0KIAotCWZiaS0+bW1pb19iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlmYmktPm1taW9fYmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCWlmIChmYmktPm1taW9fYmFzZSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBJL08gbWVtb3J5XG4iKTsKIAkJcmV0ID0gLUVCVVNZOwpAQCAtMjE5Nyw3ICsyMjAyLDcgQEAKIGZhaWxlZF9mcmVlX2lvOgogCWlvdW5tYXAoZmJpLT5tbWlvX2Jhc2UpOwogZmFpbGVkX2ZyZWVfcmVzOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogZmFpbGVkX2ZiaToKIAljbGtfcHV0KGZiaS0+Y2xrKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwpAQCAtMjIzNyw3ICsyMjQyLDcgQEAKIAlpb3VubWFwKGZiaS0+bW1pb19iYXNlKTsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CiAKIAljbGtfcHV0KGZiaS0+Y2xrKTsKIAlrZnJlZShmYmkpOwpAQCAtMjI0OCwxMSArMjI1MywxMiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGFmYl9wcm9iZSwKIAkucmVtb3ZlIAk9IF9fZGV2ZXhpdF9wKHB4YWZiX3JlbW92ZSksCi0JLnN1c3BlbmQJPSBweGFmYl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhZmJfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAicHhhMnh4LWZiIiwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnB4YWZiX3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IDM3YjEzNWQuLjg0MmQxNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0xNTY1LDcgKzE1NjUsNyBAQAogCQl2Z2Ffb3V0OCgweDNjNSwgc3I4LCBwYXIpOwogCQl2Z2Ffb3V0OCgweDNjNCwgMHgwZCwgcGFyKTsKIAkJc3JkID0gdmdhX2luOCgweDNjNSwgcGFyKTsKLQkJc3JkICY9IDB4MDM7CisJCXNyZCAmPSAweDUwOwogCiAJCXN3aXRjaCAoYmxhbmspIHsKIAkJY2FzZSBGQl9CTEFOS19VTkJMQU5LOgpAQCAtMTYwNiwyMiArMTYwNiw2IEBACiAJcmV0dXJuIChibGFuayA9PSBGQl9CTEFOS19OT1JNQUwpID8gMSA6IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmFnZWZiX3NhdmVfc3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCi0Jc2F2YWdlX2dldF9kZWZhdWx0X3BhcihwYXIsICZwYXItPnNhdmUpOwotfQotCi1zdGF0aWMgdm9pZCBzYXZhZ2VmYl9yZXN0b3JlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQotCXNhdmFnZWZiX2JsYW5rKEZCX0JMQU5LX1BPV0VSRE9XTiwgaW5mbyk7Ci0Jc2F2YWdlX3NldF9kZWZhdWx0X3BhcihwYXIsICZwYXItPnNhdmUpOwotCXNhdmFnZWZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGluZm8pOwotfQotCiBzdGF0aWMgaW50IHNhdmFnZWZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQogewogCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTE2NjcsOCArMTY1MSw2IEBACiAJLmZiX3NldGNvbHJlZyAgID0gc2F2YWdlZmJfc2V0Y29scmVnLAogCS5mYl9wYW5fZGlzcGxheSA9IHNhdmFnZWZiX3Bhbl9kaXNwbGF5LAogCS5mYl9ibGFuayAgICAgICA9IHNhdmFnZWZiX2JsYW5rLAotCS5mYl9zYXZlX3N0YXRlICA9IHNhdmFnZWZiX3NhdmVfc3RhdGUsCi0JLmZiX3Jlc3RvcmVfc3RhdGUgPSBzYXZhZ2VmYl9yZXN0b3JlX3N0YXRlLAogI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NBVkFHRV9BQ0NFTCkKIAkuZmJfZmlsbHJlY3QgICAgPSBzYXZhZ2VmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEgICAgPSBzYXZhZ2VmYl9jb3B5YXJlYSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKaW5kZXggZTM1MjMyYS4uNTRmYmIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKQEAgLTE0MTEsMjMgKzE0MTEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB1dmVzYWZiX3NhdmVfc3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0KLQlpZiAocGFyLT52YmVfc3RhdGVfc2F2ZWQpCi0JCWtmcmVlKHBhci0+dmJlX3N0YXRlX3NhdmVkKTsKLQotCXBhci0+dmJlX3N0YXRlX3NhdmVkID0gdXZlc2FmYl92YmVfc3RhdGVfc2F2ZShwYXIpOwotfQotCi1zdGF0aWMgdm9pZCB1dmVzYWZiX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0KLQl1dmVzYWZiX3ZiZV9zdGF0ZV9yZXN0b3JlKHBhciwgcGFyLT52YmVfc3RhdGVfc2F2ZWQpOwotfQotCiBzdGF0aWMgc3RydWN0IGZiX29wcyB1dmVzYWZiX29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmZiX29wZW4JPSB1dmVzYWZiX29wZW4sCkBAIC0xNDQxLDggKzE0MjQsNiBAQAogCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAogCS5mYl9jaGVja192YXIJPSB1dmVzYWZiX2NoZWNrX3ZhciwKIAkuZmJfc2V0X3Bhcgk9IHV2ZXNhZmJfc2V0X3BhciwKLQkuZmJfc2F2ZV9zdGF0ZQk9IHV2ZXNhZmJfc2F2ZV9zdGF0ZSwKLQkuZmJfcmVzdG9yZV9zdGF0ZSA9IHV2ZXNhZmJfcmVzdG9yZV9zdGF0ZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB1dmVzYWZiX2luaXRfaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKQEAgLTE0NTksMTUgKzE0NDAsNiBAQAogCWluZm8tPmZpeC55cGFuc3RlcCA9IHBhci0+eXBhbiA/IDEgOiAwOwogCWluZm8tPmZpeC55d3JhcHN0ZXAgPSAocGFyLT55cGFuID4gMSkgPyAxIDogMDsKIAotCS8qCi0JICogSWYgd2Ugd2VyZSB1bmFibGUgdG8gZ2V0IHRoZSBzdGF0ZSBidWZmZXIgc2l6ZSwgZGlzYWJsZQotCSAqIGZ1bmN0aW9ucyBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIGhhcmR3YXJlIHN0YXRlLgotCSAqLwotCWlmIChwYXItPnZiZV9zdGF0ZV9zaXplID09IDApIHsKLQkJaW5mby0+ZmJvcHMtPmZiX3NhdmVfc3RhdGUgPSBOVUxMOwotCQlpbmZvLT5mYm9wcy0+ZmJfcmVzdG9yZV9zdGF0ZSA9IE5VTEw7Ci0JfQotCiAJLyogRGlzYWJsZSBibGFua2luZyBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgc28uICovCiAJaWYgKCFibGFuaykKIAkJaW5mby0+ZmJvcHMtPmZiX2JsYW5rID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCmluZGV4IDIwMGMyMmYuLjlkZDU4ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwpAQCAtMTksNyArMTksNiBAQAogICovCiAvLyNkZWZpbmUgREVCVUcKICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2JhbGxvb24uaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtMjQ4LDcgKzI0Nyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgdmlydGJhbGxvb25fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHZpcnRiYWxsb29uX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiID0gdmRldi0+cHJpdjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCmluZGV4IDRhMWYxZWIuLjI4ZDljZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKQEAgLTUzMCwxOSArNTMwLDIyIEBACiAJCQllcnIgPSBQVFJfRVJSKHZxc1tpXSk7CiAJCQlnb3RvIGVycm9yX2ZpbmQ7CiAJCX0KKworCQlpZiAoIXZwX2Rldi0+cGVyX3ZxX3ZlY3RvcnMgfHwgbXNpeF92ZWMgPT0gVklSVElPX01TSV9OT19WRUNUT1IpCisJCQljb250aW51ZTsKKwogCQkvKiBhbGxvY2F0ZSBwZXItdnEgaXJxIGlmIGF2YWlsYWJsZSBhbmQgbmVjZXNzYXJ5ICovCi0JCWlmICh2cF9kZXYtPnBlcl92cV92ZWN0b3JzKSB7Ci0JCQlzbnByaW50Zih2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAotCQkJCSBzaXplb2YgKnZwX2Rldi0+bXNpeF9uYW1lcywKLQkJCQkgIiVzLSVzIiwKLQkJCQkgZGV2X25hbWUoJnZwX2Rldi0+dmRldi5kZXYpLCBuYW1lc1tpXSk7Ci0JCQllcnIgPSByZXF1ZXN0X2lycShtc2l4X3ZlYywgdnJpbmdfaW50ZXJydXB0LCAwLAotCQkJCQkgIHZwX2Rldi0+bXNpeF9uYW1lc1ttc2l4X3ZlY10sCi0JCQkJCSAgdnFzW2ldKTsKLQkJCWlmIChlcnIpIHsKLQkJCQl2cF9kZWxfdnEodnFzW2ldKTsKLQkJCQlnb3RvIGVycm9yX2ZpbmQ7Ci0JCQl9CisJCXNucHJpbnRmKHZwX2Rldi0+bXNpeF9uYW1lc1ttc2l4X3ZlY10sCisJCQkgc2l6ZW9mICp2cF9kZXYtPm1zaXhfbmFtZXMsCisJCQkgIiVzLSVzIiwKKwkJCSBkZXZfbmFtZSgmdnBfZGV2LT52ZGV2LmRldiksIG5hbWVzW2ldKTsKKwkJZXJyID0gcmVxdWVzdF9pcnEodnBfZGV2LT5tc2l4X2VudHJpZXNbbXNpeF92ZWNdLnZlY3RvciwKKwkJCQkgIHZyaW5nX2ludGVycnVwdCwgMCwKKwkJCQkgIHZwX2Rldi0+bXNpeF9uYW1lc1ttc2l4X3ZlY10sCisJCQkJICB2cXNbaV0pOworCQlpZiAoZXJyKSB7CisJCQl2cF9kZWxfdnEodnFzW2ldKTsKKwkJCWdvdG8gZXJyb3JfZmluZDsKIAkJfQogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCmluZGV4IGY1MzYwMDUuLmZiZDJlY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwpAQCAtMjg1LDYgKzI4NSw5IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCS8qIE9ubHkgZ2V0IHVzZWQgYXJyYXkgZW50cmllcyBhZnRlciB0aGV5IGhhdmUgYmVlbiBleHBvc2VkIGJ5IGhvc3QuICovCisJcm1iKCk7CisKIAlpID0gdnEtPnZyaW5nLnVzZWQtPnJpbmdbdnEtPmxhc3RfdXNlZF9pZHgldnEtPnZyaW5nLm51bV0uaWQ7CiAJKmxlbiA9IHZxLT52cmluZy51c2VkLT5yaW5nW3ZxLT5sYXN0X3VzZWRfaWR4JXZxLT52cmluZy5udW1dLmxlbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ4Mi5jIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ4Mi5jCmluZGV4IGRmNTJjYjMuLjQwNmNhYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDgyLmMKQEAgLTI0LDE5ICsyNCw2IEBACiAjaW5jbHVkZSAiLi4vdzFfaW50LmgiCiAKIC8qKgotICogQWRkcmVzcyBpcyBzZWxlY3RlZCB1c2luZyAyIHBpbnMsIHJlc3VsdGluZyBpbiA0IHBvc3NpYmxlIGFkZHJlc3Nlcy4KLSAqICAweDE4LCAweDE5LCAweDFhLCAweDFiCi0gKiBIb3dldmVyLCB0aGUgY2hpcCBjYW5ub3QgYmUgZGV0ZWN0ZWQgd2l0aG91dCBkb2luZyBhbiBpMmMgd3JpdGUsCi0gKiBzbyB1c2UgdGhlIGZvcmNlIG1vZHVsZSBwYXJhbWV0ZXIuCi0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qKgotICogSW5zbW9kIHBhcmFtZXRlcnMKLSAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShkczI0ODIpOwotCi0vKioKICAqIFRoZSBEUzI0ODIgcmVnaXN0ZXJzIC0gdGhlcmUgYXJlIDMgcmVnaXN0ZXJzIHRoYXQgYXJlIGFkZHJlc3NlZCBieSBhIHJlYWQKICAqIHBvaW50ZXIuIFRoZSByZWFkIHBvaW50ZXIgaXMgc2V0IGJ5IHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuCiAgKgpAQCAtOTYsOCArODMsNiBAQAogCiBzdGF0aWMgaW50IGRzMjQ4Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyBpbnQgZHMyNDgyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwogc3RhdGljIGludCBkczI0ODJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiAKQEAgLTExNyw4ICsxMDIsNiBAQAogCS5wcm9iZQkJPSBkczI0ODJfcHJvYmUsCiAJLnJlbW92ZQkJPSBkczI0ODJfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGRzMjQ4Ml9pZCwKLQkuZGV0ZWN0CQk9IGRzMjQ4Ml9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCiB9OwogCiAvKgpAQCAtNDI1LDE5ICs0MDgsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgZHMyNDgyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKLQkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCi17Ci0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCi0JCQkJICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEgfAotCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfQllURSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc3RybGNweShpbmZvLT50eXBlLCAiZHMyNDgyIiwgSTJDX05BTUVfU0laRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkczI0ODJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTQ0Niw2ICs0MTYsMTEgQEAKIAlpbnQgdGVtcDE7CiAJaW50IGlkeDsKIAorCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBIHwKKwkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX0JZVEUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHMyNDgyX2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IGZmM2ViOGYuLjM3MTFiODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTI4Miw2ICsyODIsMTMgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG51YzkwMF93ZHQuCiAKK2NvbmZpZyBBRFhfV0FUQ0hET0cKKwl0cmlzdGF0ZSAiQXZpb25pYyBEZXNpZ24gWGFudGhvcyB3YXRjaGRvZyIKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBX0FEWAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyIG9uIEF2aW9uaWMKKwkgIERlc2lnbiBYYW50aG9zIGJvYXJkcy4KKwogIyBBVlIzMiBBcmNoaXRlY3R1cmUKIAogY29uZmlnIEFUMzJBUDcwMFhfV0RUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQppbmRleCAzNDhiM2I4Li42OTkxOTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKQEAgLTQ1LDYgKzQ1LDcgQEAKIG9iai0kKENPTkZJR19DT0g5MDEzMjdfV0FUQ0hET0cpICs9IGNvaDkwMTMyN193ZHQubwogb2JqLSQoQ09ORklHX1NUTVAzWFhYX1dBVENIRE9HKSArPSBzdG1wM3h4eF93ZHQubwogb2JqLSQoQ09ORklHX05VQzkwMF9XQVRDSERPRykgKz0gbnVjOTAwX3dkdC5vCitvYmotJChDT05GSUdfQURYX1dBVENIRE9HKSArPSBhZHhfd2R0Lm8KIAogIyBBVlIzMiBBcmNoaXRlY3R1cmUKIG9iai0kKENPTkZJR19BVDMyQVA3MDBYX1dEVCkgKz0gYXQzMmFwNzAweF93ZHQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FkeF93ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2FmYjBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBBdmlvbmljIERlc2lnbiBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorCisjZGVmaW5lIFdBVENIRE9HX05BTUUgImFkeC13ZHQiCisKKy8qIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUJQURYX1dEVF9DT05UUk9MCQkweDAwCisjZGVmaW5lCUFEWF9XRFRfQ09OVFJPTF9FTkFCTEUJKDEgPDwgMCkKKyNkZWZpbmUJQURYX1dEVF9DT05UUk9MX25SRVNFVAkoMSA8PCAxKQorI2RlZmluZQlBRFhfV0RUX1RJTUVPVVQJCTB4MDgKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFkeF93ZHRfZGV2Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgZHJpdmVyX29wZW47CisKKyNkZWZpbmUJV0RUX1NUQVRFX1NUT1AJMAorI2RlZmluZQlXRFRfU1RBVEVfU1RBUlQJMQorCitzdHJ1Y3QgYWR4X3dkdCB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisJdW5zaWduZWQgaW50IHdha2U7CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGFkeF93ZHRfaW5mbyA9IHsKKwkuaWRlbnRpdHkgPSAiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBXYXRjaGRvZyIsCisJLm9wdGlvbnMgPSBXRElPRl9TRVRUSU1FT1VUIHwgV0RJT0ZfS0VFUEFMSVZFUElORywKK307CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfc3RhcnRfbG9ja2VkKHN0cnVjdCBhZHhfd2R0ICp3ZHQpCit7CisJdTMyIGN0cmw7CisKKwljdHJsID0gcmVhZGwod2R0LT5iYXNlICsgQURYX1dEVF9DT05UUk9MKTsKKwljdHJsIHw9IEFEWF9XRFRfQ09OVFJPTF9FTkFCTEU7CisJd3JpdGVsKGN0cmwsIHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisJd2R0LT5zdGF0ZSA9IFdEVF9TVEFURV9TVEFSVDsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9zdGFydChzdHJ1Y3QgYWR4X3dkdCAqd2R0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0LT5sb2NrLCBmbGFncyk7CisJYWR4X3dkdF9zdGFydF9sb2NrZWQod2R0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9zdG9wX2xvY2tlZChzdHJ1Y3QgYWR4X3dkdCAqd2R0KQoreworCXUzMiBjdHJsOworCisJY3RybCA9IHJlYWRsKHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisJY3RybCAmPSB+QURYX1dEVF9DT05UUk9MX0VOQUJMRTsKKwl3cml0ZWwoY3RybCwgd2R0LT5iYXNlICsgQURYX1dEVF9DT05UUk9MKTsKKwl3ZHQtPnN0YXRlID0gV0RUX1NUQVRFX1NUT1A7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfc3RvcChzdHJ1Y3QgYWR4X3dkdCAqd2R0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0LT5sb2NrLCBmbGFncyk7CisJYWR4X3dkdF9zdG9wX2xvY2tlZCh3ZHQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X3NldF90aW1lb3V0KHN0cnVjdCBhZHhfd2R0ICp3ZHQsIHVuc2lnbmVkIGxvbmcgc2Vjb25kcykKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBzZWNvbmRzICogMTAwMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBzdGF0ZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKKwlzdGF0ZSA9IHdkdC0+c3RhdGU7CisJYWR4X3dkdF9zdG9wX2xvY2tlZCh3ZHQpOworCXdyaXRlbCh0aW1lb3V0LCB3ZHQtPmJhc2UgKyBBRFhfV0RUX1RJTUVPVVQpOworCisJaWYgKHN0YXRlID09IFdEVF9TVEFURV9TVEFSVCkKKwkJYWR4X3dkdF9zdGFydF9sb2NrZWQod2R0KTsKKworCXdkdC0+dGltZW91dCA9IHRpbWVvdXQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfZ2V0X3RpbWVvdXQoc3RydWN0IGFkeF93ZHQgKndkdCwgdW5zaWduZWQgbG9uZyAqc2Vjb25kcykKK3sKKwkqc2Vjb25kcyA9IHdkdC0+dGltZW91dCAvIDEwMDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfa2VlcGFsaXZlKHN0cnVjdCBhZHhfd2R0ICp3ZHQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKKwl3cml0ZWwod2R0LT50aW1lb3V0LCB3ZHQtPmJhc2UgKyBBRFhfV0RUX1RJTUVPVVQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGFkeF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoYWR4X3dkdF9kZXYpOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmRyaXZlcl9vcGVuKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHdkdDsKKwlhZHhfd2R0X3NldF90aW1lb3V0KHdkdCwgMzApOworCWFkeF93ZHRfc3RhcnQod2R0KTsKKworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKK30KKworc3RhdGljIGludCBhZHhfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGFkeF93ZHQgKndkdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWFkeF93ZHRfc3RvcCh3ZHQpOworCWNsZWFyX2JpdCgwLCAmZHJpdmVyX29wZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIGFkeF93ZHRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJdW5zaWduZWQgbG9uZyBfX3VzZXIgKnAgPSBhcmdwOworCXVuc2lnbmVkIGxvbmcgc2Vjb25kcyA9IDA7CisJdW5zaWduZWQgaW50IG9wdGlvbnM7CisJbG9uZyByZXQgPSAtRUlOVkFMOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmFkeF93ZHRfaW5mbywgc2l6ZW9mKGFkeF93ZHRfaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldHVybiAwOworCisJY2FzZSBXRElPQ19HRVRTVEFUVVM6CisJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQlyZXR1cm4gcHV0X3VzZXIoMCwgcCk7CisKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJYWR4X3dkdF9rZWVwYWxpdmUod2R0KTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CisJCWlmIChnZXRfdXNlcihzZWNvbmRzLCBwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWFkeF93ZHRfc2V0X3RpbWVvdXQod2R0LCBzZWNvbmRzKTsKKworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJYWR4X3dkdF9nZXRfdGltZW91dCh3ZHQsICZzZWNvbmRzKTsKKwkJcmV0dXJuIHB1dF91c2VyKHNlY29uZHMsIHApOworCisJY2FzZSBXRElPQ19TRVRPUFRJT05TOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJm9wdGlvbnMsIGFyZ3AsIHNpemVvZihvcHRpb25zKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAob3B0aW9ucyAmIFdESU9TX0RJU0FCTEVDQVJEKSB7CisJCQlhZHhfd2R0X3N0b3Aod2R0KTsKKwkJCXJldCA9IDA7CisJCX0KKworCQlpZiAob3B0aW9ucyAmIFdESU9TX0VOQUJMRUNBUkQpIHsKKwkJCWFkeF93ZHRfc3RhcnQod2R0KTsKKwkJCXJldCA9IDA7CisJCX0KKworCQlyZXR1cm4gcmV0OworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FTk9UVFk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkeF93ZHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAorCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGFkeF93ZHQgKndkdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChsZW4pCisJCWFkeF93ZHRfa2VlcGFsaXZlKHdkdCk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZHhfd2R0X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayA9IG5vX2xsc2VlaywKKwkub3BlbiA9IGFkeF93ZHRfb3BlbiwKKwkucmVsZWFzZSA9IGFkeF93ZHRfcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBhZHhfd2R0X2lvY3RsLAorCS53cml0ZSA9IGFkeF93ZHRfd3JpdGUsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgYWR4X3dkdF9taXNjZGV2ID0geworCS5taW5vciA9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lID0gIndhdGNoZG9nIiwKKwkuZm9wcyA9ICZhZHhfd2R0X2ZvcHMsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHhfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGFkeF93ZHQgKndkdDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgY3RybDsKKworCXdkdCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKndkdCksIEdGUF9LRVJORUwpOworCWlmICghd2R0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBXRFQgc3RydWN0dXJlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJndkdC0+bG9jayk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBvYnRhaW4gSS9PIG1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLCByZXMtPm5hbWUpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXF1ZXN0IEkvTyBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwl3ZHQtPmJhc2UgPSBkZXZtX2lvcmVtYXBfbm9jYWNoZSgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCF3ZHQtPmJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIEkvTyBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwkvKiBkaXNhYmxlIHdhdGNoZG9nIGFuZCByZWJvb3Qgb24gdGltZW91dCAqLworCWN0cmwgPSByZWFkbCh3ZHQtPmJhc2UgKyBBRFhfV0RUX0NPTlRST0wpOworCWN0cmwgJj0gfkFEWF9XRFRfQ09OVFJPTF9FTkFCTEU7CisJY3RybCAmPSB+QURYX1dEVF9DT05UUk9MX25SRVNFVDsKKwl3cml0ZWwoY3RybCwgd2R0LT5iYXNlICsgQURYX1dEVF9DT05UUk9MKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHdkdCk7CisJYWR4X3dkdF9kZXYgPSBwZGV2OworCisJcmV0ID0gbWlzY19yZWdpc3RlcigmYWR4X3dkdF9taXNjZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yICVkICIKKwkJCQkiKGVycj0lZClcbiIsIFdBVENIRE9HX01JTk9SLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHhfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW1pc2NfZGVyZWdpc3RlcigmYWR4X3dkdF9taXNjZGV2KTsKKwlhZHhfd2R0X3N0b3Aod2R0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFkeF93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWFkeF93ZHRfc3RvcCh3ZHQpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkeF93ZHRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXdkdC0+d2FrZSA9ICh3ZHQtPnN0YXRlID09IFdEVF9TVEFURV9TVEFSVCkgPyAxIDogMDsKKwlhZHhfd2R0X3N0b3Aod2R0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkeF93ZHRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGFkeF93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHdkdC0+d2FrZSkKKwkJYWR4X3dkdF9zdGFydCh3ZHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBhZHhfd2R0X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IGFkeF93ZHRfc3VzcGVuZCwKKwkucmVzdW1lID0gYWR4X3dkdF9yZXN1bWUsCit9OworCisjICBkZWZpbmUgQURYX1dEVF9QTV9PUFMJKCZhZHhfd2R0X3BtX29wcykKKyNlbHNlCisjICBkZWZpbmUgQURYX1dEVF9QTV9PUFMJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFkeF93ZHRfZHJpdmVyID0geworCS5wcm9iZSA9IGFkeF93ZHRfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGFkeF93ZHRfcmVtb3ZlKSwKKwkuc2h1dGRvd24gPSBhZHhfd2R0X3NodXRkb3duLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gV0FUQ0hET0dfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9IEFEWF9XRFRfUE1fT1BTLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZHhfd2R0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhZHhfd2R0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHhfd2R0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWR4X3dkdF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhZHhfd2R0X2luaXQpOworbW9kdWxlX2V4aXQoYWR4X3dkdF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdmlvbmljIERlc2lnbiBYYW50aG9zIFdhdGNoZG9nIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiVGhpZXJyeSBSZWRpbmcgPHRoaWVycnkucmVkaW5nQGF2aW9uaWMtZGVzaWduLmRlPiIpOworTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCmluZGV4IDFlOGYwMmYuLmQzYzgyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCiAJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBwKTsKIAlyaW93ZF9kZXZpY2UgPSBwOwotCWVyciA9IDA7CisJcmV0dXJuIDA7CiAKIG91dF9pb3VubWFwOgogCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgcC0+cmVncywgMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NiY19maXRwYzJfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiY19maXRwYzJfd2R0LmMKaW5kZXggODUyY2ExOS4uOTE0MzBhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYmNfZml0cGMyX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2ZpdHBjMl93ZHQuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJfQogCiAJZXJyID0gbWlzY19yZWdpc3RlcigmZml0cGMyX3dkdF9taXNjZGV2KTsKLQlpZiAoIWVycikgeworCWlmIChlcnIpIHsKIAkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCQkJCQlXQVRDSERPR19NSU5PUiwgZXJyKTsKIAkJZ290byBlcnJfbWFyZ2luOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuZnMveGVuYnVzLmMgYi9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYwppbmRleCBhOTU5MmQ5Li42YzQyNjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYworKysgYi9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2Rpci5jIGIvZnMvOXAvdmZzX2Rpci5jCmluZGV4IDg3M2NkMzEuLjE1Y2NlNTMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19kaXIuYworKysgYi9mcy85cC92ZnNfZGlyLmMKQEAgLTQwLDYgKzQwLDI0IEBACiAjaW5jbHVkZSAiZmlkLmgiCiAKIC8qKgorICogc3RydWN0IHA5X3JkaXIgLSByZWFkZGlyIGFjY291bnRpbmcKKyAqIEBtdXRleDogbXV0ZXggcHJvdGVjdGluZyByZWFkZGlyCisgKiBAaGVhZDogc3RhcnQgb2Zmc2V0IG9mIGN1cnJlbnQgZGlycmVhZCBidWZmZXIKKyAqIEB0YWlsOiBlbmQgb2Zmc2V0IG9mIGN1cnJlbnQgZGlycmVhZCBidWZmZXIKKyAqIEBidWY6IGRpcnJlYWQgYnVmZmVyCisgKgorICogcHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yIGtlZXBpbmcgdHJhY2sgb2YgcmVhZGRpcgorICogYWxsb2NhdGVkIG9uIGRlbWFuZAorICovCisKK3N0cnVjdCBwOV9yZGlyIHsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJaW50IGhlYWQ7CisJaW50IHRhaWw7CisJdWludDhfdCAqYnVmOworfTsKKworLyoqCiAgKiBkdF90eXBlIC0gcmV0dXJuIGZpbGUgdHlwZQogICogQG1pc3RhdDogbWlzdGF0IHN0cnVjdHVyZQogICoKQEAgLTcwLDU2ICs4OCw3OSBAQAogewogCWludCBvdmVyOwogCXN0cnVjdCBwOV93c3RhdCBzdDsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCXN0cnVjdCBwOV9maWQgKmZpZDsKIAlpbnQgYnVmbGVuOwotCWNoYXIgKnN0YXRidWY7Ci0JaW50IG4sIGkgPSAwOworCWludCByZWNsZW4gPSAwOworCXN0cnVjdCBwOV9yZGlyICpyZGlyOwogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJuYW1lICVzXG4iLCBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJZmlkID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCiAJYnVmbGVuID0gZmlkLT5jbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7Ci0Jc3RhdGJ1ZiA9IGttYWxsb2MoYnVmbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0YXRidWYpCi0JCXJldHVybiAtRU5PTUVNOwogCi0Jd2hpbGUgKDEpIHsKLQkJZXJyID0gdjlmc19maWxlX3JlYWRuKGZpbHAsIHN0YXRidWYsIE5VTEwsIGJ1ZmxlbiwKLQkJCQkJCQkJZmlkLT5yZGlyX2Zwb3MpOwotCQlpZiAoZXJyIDw9IDApCi0JCQlicmVhazsKKwkvKiBhbGxvY2F0ZSByZGlyIG9uIGRlbWFuZCAqLworCWlmICghZmlkLT5yZGlyKSB7CisJCXJkaXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfcmRpcikgKyBidWZsZW4sIEdGUF9LRVJORUwpOwogCi0JCW4gPSBlcnI7Ci0JCXdoaWxlIChpIDwgbikgewotCQkJZXJyID0gcDlzdGF0X3JlYWQoc3RhdGJ1ZiArIGksIGJ1Zmxlbi1pLCAmc3QsCi0JCQkJCQkJZmlkLT5jbG50LT5kb3R1KTsKKwkJaWYgKHJkaXIgPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlzcGluX2xvY2soJmZpbHAtPmZfZGVudHJ5LT5kX2xvY2spOworCQlpZiAoIWZpZC0+cmRpcikgeworCQkJcmRpci0+YnVmID0gKHVpbnQ4X3QgKilyZGlyICsgc2l6ZW9mKHN0cnVjdCBwOV9yZGlyKTsKKwkJCW11dGV4X2luaXQoJnJkaXItPm11dGV4KTsKKwkJCXJkaXItPmhlYWQgPSByZGlyLT50YWlsID0gMDsKKwkJCWZpZC0+cmRpciA9ICh2b2lkICopIHJkaXI7CisJCQlyZGlyID0gTlVMTDsKKwkJfQorCQlzcGluX3VubG9jaygmZmlscC0+Zl9kZW50cnktPmRfbG9jayk7CisJCWtmcmVlKHJkaXIpOworCX0KKwlyZGlyID0gKHN0cnVjdCBwOV9yZGlyICopIGZpZC0+cmRpcjsKKworCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmRpci0+bXV0ZXgpOworCXdoaWxlIChlcnIgPT0gMCkgeworCQlpZiAocmRpci0+dGFpbCA9PSByZGlyLT5oZWFkKSB7CisJCQllcnIgPSB2OWZzX2ZpbGVfcmVhZG4oZmlscCwgcmRpci0+YnVmLCBOVUxMLAorCQkJCQkJCWJ1ZmxlbiwgZmlscC0+Zl9wb3MpOworCQkJaWYgKGVyciA8PSAwKQorCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCisJCQlyZGlyLT5oZWFkID0gMDsKKwkJCXJkaXItPnRhaWwgPSBlcnI7CisJCX0KKworCQl3aGlsZSAocmRpci0+aGVhZCA8IHJkaXItPnRhaWwpIHsKKwkJCWVyciA9IHA5c3RhdF9yZWFkKHJkaXItPmJ1ZiArIHJkaXItPmhlYWQsCisJCQkJCQlidWZsZW4gLSByZGlyLT5oZWFkLCAmc3QsCisJCQkJCQlmaWQtPmNsbnQtPmRvdHUpOwogCQkJaWYgKGVycikgewogCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicmV0dXJuZWQgJWRcbiIsIGVycik7CiAJCQkJZXJyID0gLUVJTzsKIAkJCQlwOXN0YXRfZnJlZSgmc3QpOwotCQkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KLQotCQkJaSArPSBzdC5zaXplKzI7Ci0JCQlmaWQtPnJkaXJfZnBvcyArPSBzdC5zaXplKzI7CisJCQlyZWNsZW4gPSBzdC5zaXplKzI7CiAKIAkJCW92ZXIgPSBmaWxsZGlyKGRpcmVudCwgc3QubmFtZSwgc3RybGVuKHN0Lm5hbWUpLAogCQkJICAgIGZpbHAtPmZfcG9zLCB2OWZzX3FpZDJpbm8oJnN0LnFpZCksIGR0X3R5cGUoJnN0KSk7CiAKLQkJCWZpbHAtPmZfcG9zICs9IHN0LnNpemUrMjsKLQogCQkJcDlzdGF0X2ZyZWUoJnN0KTsKIAogCQkJaWYgKG92ZXIpIHsKIAkJCQllcnIgPSAwOwotCQkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KKwkJCXJkaXItPmhlYWQgKz0gcmVjbGVuOworCQkJZmlscC0+Zl9wb3MgKz0gcmVjbGVuOwogCQl9CiAJfQogCi1mcmVlX2FuZF9leGl0OgotCWtmcmVlKHN0YXRidWYpOwordW5sb2NrX2FuZF9leGl0OgorCW11dGV4X3VubG9jaygmcmRpci0+bXV0ZXgpOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IDU5NDc2MjguLjE4Zjc0ZWMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC05OTQsOCArOTk0LDcgQEAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywKIAkJIiVzIC0+ICVzICglcylcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHN0LT5leHRlbnNpb24sIGJ1ZmZlcik7CiAKLQlyZXR2YWwgPSBidWZsZW47Ci0KKwlyZXR2YWwgPSBzdHJubGVuKGJ1ZmZlciwgYnVmbGVuKTsKIGRvbmU6CiAJa2ZyZWUoc3QpOwogCXJldHVybiByZXR2YWw7CkBAIC0xMDYyLDcgKzEwNjEsNyBAQAogCQkJX19wdXRuYW1lKGxpbmspOwogCQkJbGluayA9IEVSUl9QVFIobGVuKTsKIAkJfSBlbHNlCi0JCQlsaW5rW2xlbl0gPSAwOworCQkJbGlua1ttaW4obGVuLCBQQVRIX01BWC0xKV0gPSAwOwogCX0KIAluZF9zZXRfbGluayhuZCwgbGluayk7CiAKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGQ0YmY4Y2EuLjY0ZDQ0ZWYgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMTM1LDggKzEzNSw4IEBACiAKIGNvbmZpZyBIVUdFVExCRlMKIAlib29sICJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBYODYgfHwgSUE2NCB8fCBQUEM2NCB8fCBTUEFSQzY0IHx8IChTVVBFUkggJiYgTU1VKSB8fCBcCi0JCSAgIChTMzkwICYmIDY0QklUKSB8fCBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTIHx8IEJST0tFTgorCWRlcGVuZHMgb24gWDg2IHx8IElBNjQgfHwgU1BBUkM2NCB8fCAoUzM5MCAmJiA2NEJJVCkgfHwgXAorCQkgICBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTIHx8IEJST0tFTgogCWhlbHAKIAkgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb24KIAkgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWQKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jYWNoZS5oIGIvZnMvYWZzL2NhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNGY2YjQuLjAwMDAwMDAKLS0tIGEvZnMvYWZzL2NhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0vKiBBRlMgbG9jYWwgY2FjaGUgbWFuYWdlbWVudCBpbnRlcmZhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2ZzY2FjaGUuaD4KZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggMTA2YmU2Ni4uNmVjZTJhMSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKKysrIGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTE4LDEwICsxOCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZnNjYWNoZS5oPgogCiAjaW5jbHVkZSAiYWZzLmgiCiAjaW5jbHVkZSAiYWZzX3ZsLmgiCi0jaW5jbHVkZSAiY2FjaGUuaCIKIAogI2RlZmluZSBBRlNfQ0VMTF9NQVhfQUREUlMgMTUKIApkaWZmIC0tZ2l0IGEvZnMvYW5vbl9pbm9kZXMuYyBiL2ZzL2Fub25faW5vZGVzLmMKaW5kZXggZDExYzUxZi4uMmNhN2E3YyAxMDA2NDQKLS0tIGEvZnMvYW5vbl9pbm9kZXMuYworKysgYi9mcy9hbm9uX2lub2Rlcy5jCkBAIC04LDggKzgsMTAgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZnMvYmlvLmMgYi9mcy9iaW8uYwppbmRleCA3NjczODAwLi4xMmRhNWRiIDEwMDY0NAotLS0gYS9mcy9iaW8uYworKysgYi9mcy9iaW8uYwpAQCAtMjQ5LDYgKzI0OSw3IEBACiAKIAltZW1wb29sX2ZyZWUocCwgYnMtPmJpb19wb29sKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2ZyZWUpOwogCiB2b2lkIGJpb19pbml0KHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTI1Nyw2ICsyNTgsNyBAQAogCWJpby0+YmlfY29tcF9jcHUgPSAtMTsKIAlhdG9taWNfc2V0KCZiaW8tPmJpX2NudCwgMSk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19pbml0KTsKIAogLyoqCiAgKiBiaW9fYWxsb2NfYmlvc2V0IC0gYWxsb2NhdGUgYSBiaW8gZm9yIEkvTwpAQCAtMzExLDYgKzMxMyw3IEBACiAJbWVtcG9vbF9mcmVlKHAsIGJzLT5iaW9fcG9vbCk7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19hbGxvY19iaW9zZXQpOwogCiBzdGF0aWMgdm9pZCBiaW9fZnNfZGVzdHJ1Y3RvcihzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC0zMjIsOCArMzI1LDE2IEBACiAgKglAZ2ZwX21hc2s6IGFsbG9jYXRpb24gbWFzayB0byB1c2UKICAqCUBucl9pb3ZlY3M6IG51bWJlciBvZiBpb3ZlY3MKICAqCi0gKglBbGxvY2F0ZSBhIG5ldyBiaW8gd2l0aCBAbnJfaW92ZWNzIGJ2ZWNzLiAgSWYgQGdmcF9tYXNrCi0gKgljb250YWlucyBfX0dGUF9XQUlULCB0aGUgYWxsb2NhdGlvbiBpcyBndWFyYW50ZWVkIHRvIHN1Y2NlZWQuCisgKgliaW9fYWxsb2Mgd2lsbCBhbGxvY2F0ZSBhIGJpbyBhbmQgYXNzb2NpYXRlZCBiaW9fdmVjIGFycmF5IHRoYXQgY2FuIGhvbGQKKyAqCWF0IGxlYXN0IEBucl9pb3ZlY3MgZW50cmllcy4gQWxsb2NhdGlvbnMgd2lsbCBiZSBkb25lIGZyb20gdGhlCisgKglmc19iaW9fc2V0LiBBbHNvIHNlZSBAYmlvX2FsbG9jX2Jpb3NldCBhbmQgQGJpb19rbWFsbG9jLgorICoKKyAqCUlmICVfX0dGUF9XQUlUIGlzIHNldCwgdGhlbiBiaW9fYWxsb2Mgd2lsbCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZQorICoJYSBiaW8uIFRoaXMgaXMgZHVlIHRvIHRoZSBtZW1wb29sIGd1YXJhbnRlZXMuIFRvIG1ha2UgdGhpcyB3b3JrLCBjYWxsZXJzCisgKgltdXN0IG5ldmVyIGFsbG9jYXRlIG1vcmUgdGhhbiAxIGJpbyBhdCBhIHRpbWUgZnJvbSB0aGlzIHBvb2wuIENhbGxlcnMKKyAqCXRoYXQgbmVlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gbXVzdCBhbHdheXMgc3VibWl0IHRoZSBwcmV2aW91c2x5CisgKglhbGxvY2F0ZWQgYmlvIGZvciBJTyBiZWZvcmUgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSBhIG5ldyBvbmUuIEZhaWx1cmUgdG8KKyAqCWRvIHNvIGNhbiBjYXVzZSBsaXZlbG9ja3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICoKICAqCVJFVFVSTlM6CiAgKglQb2ludGVyIHRvIG5ldyBiaW8gb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgpAQCAtMzM3LDYgKzM0OCw3IEBACiAKIAlyZXR1cm4gYmlvOwogfQorRVhQT1JUX1NZTUJPTChiaW9fYWxsb2MpOwogCiBzdGF0aWMgdm9pZCBiaW9fa21hbGxvY19kZXN0cnVjdG9yKHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTM0NiwyMSArMzU4LDEzIEBACiB9CiAKIC8qKgotICogYmlvX2FsbG9jIC0gYWxsb2NhdGUgYSBiaW8gZm9yIEkvTworICogYmlvX2ttYWxsb2MgLSBhbGxvY2F0ZSBhIGJpbyBmb3IgSS9PIHVzaW5nIGttYWxsb2MoKQogICogQGdmcF9tYXNrOiAgIHRoZSBHRlBfIG1hc2sgZ2l2ZW4gdG8gdGhlIHNsYWIgYWxsb2NhdG9yCiAgKiBAbnJfaW92ZWNzOgludW1iZXIgb2YgaW92ZWNzIHRvIHByZS1hbGxvY2F0ZQogICoKICAqIERlc2NyaXB0aW9uOgotICogICBiaW9fYWxsb2Mgd2lsbCBhbGxvY2F0ZSBhIGJpbyBhbmQgYXNzb2NpYXRlZCBiaW9fdmVjIGFycmF5IHRoYXQgY2FuIGhvbGQKLSAqICAgYXQgbGVhc3QgQG5yX2lvdmVjcyBlbnRyaWVzLiBBbGxvY2F0aW9ucyB3aWxsIGJlIGRvbmUgZnJvbSB0aGUKLSAqICAgZnNfYmlvX3NldC4gQWxzbyBzZWUgQGJpb19hbGxvY19iaW9zZXQuCi0gKgotICogICBJZiAlX19HRlBfV0FJVCBpcyBzZXQsIHRoZW4gYmlvX2FsbG9jIHdpbGwgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUKLSAqICAgYSBiaW8uIFRoaXMgaXMgZHVlIHRvIHRoZSBtZW1wb29sIGd1YXJhbnRlZXMuIFRvIG1ha2UgdGhpcyB3b3JrLCBjYWxsZXJzCi0gKiAgIG11c3QgbmV2ZXIgYWxsb2NhdGUgbW9yZSB0aGFuIDEgYmlvIGF0IGEgdGltZSBmcm9tIHRoaXMgcG9vbC4gQ2FsbGVycwotICogICB0aGF0IG5lZWQgdG8gYWxsb2NhdGUgbW9yZSB0aGFuIDEgYmlvIG11c3QgYWx3YXlzIHN1Ym1pdCB0aGUgcHJldmlvdXNseQotICogICBhbGxvY2F0ZWQgYmlvIGZvciBJTyBiZWZvcmUgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSBhIG5ldyBvbmUuIEZhaWx1cmUgdG8KLSAqICAgZG8gc28gY2FuIGNhdXNlIGxpdmVsb2NrcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCisgKiAgIEFsbG9jYXRlIGEgbmV3IGJpbyB3aXRoIEBucl9pb3ZlY3MgYnZlY3MuICBJZiBAZ2ZwX21hc2sgY29udGFpbnMKKyAqICAgJV9fR0ZQX1dBSVQsIHRoZSBhbGxvY2F0aW9uIGlzIGd1YXJhbnRlZWQgdG8gc3VjY2VlZC4KICAqCiAgKiovCiBzdHJ1Y3QgYmlvICpiaW9fa21hbGxvYyhnZnBfdCBnZnBfbWFzaywgaW50IG5yX2lvdmVjcykKQEAgLTM4MCw2ICszODQsNyBAQAogCiAJcmV0dXJuIGJpbzsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2ttYWxsb2MpOwogCiB2b2lkIHplcm9fZmlsbF9iaW8oc3RydWN0IGJpbyAqYmlvKQogewpAQCAtNDAyLDcgKzQwNyw3IEBACiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgIFB1dCBhIHJlZmVyZW5jZSB0byBhICZzdHJ1Y3QgYmlvLCBlaXRoZXIgb25lIHlvdSBoYXZlIGdvdHRlbiB3aXRoCi0gKiAgIGJpb19hbGxvYyBvciBiaW9fZ2V0LiBUaGUgbGFzdCBwdXQgb2YgYSBiaW8gd2lsbCBmcmVlIGl0LgorICogICBiaW9fYWxsb2MsIGJpb19nZXQgb3IgYmlvX2Nsb25lLiBUaGUgbGFzdCBwdXQgb2YgYSBiaW8gd2lsbCBmcmVlIGl0LgogICoqLwogdm9pZCBiaW9fcHV0KHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTQxNiw2ICs0MjEsNyBAQAogCQliaW8tPmJpX2Rlc3RydWN0b3IoYmlvKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGJpb19wdXQpOwogCiBpbmxpbmUgaW50IGJpb19waHlzX3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC00MjQsNiArNDMwLDcgQEAKIAogCXJldHVybiBiaW8tPmJpX3BoeXNfc2VnbWVudHM7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19waHlzX3NlZ21lbnRzKTsKIAogLyoqCiAgKiAJX19iaW9fY2xvbmUJLQljbG9uZSBhIGJpbwpAQCAtNDUxLDYgKzQ1OCw3IEBACiAJYmlvLT5iaV9zaXplID0gYmlvX3NyYy0+Ymlfc2l6ZTsKIAliaW8tPmJpX2lkeCA9IGJpb19zcmMtPmJpX2lkeDsKIH0KK0VYUE9SVF9TWU1CT0woX19iaW9fY2xvbmUpOwogCiAvKioKICAqCWJpb19jbG9uZQktCWNsb25lIGEgYmlvCkBAIC00ODIsNiArNDkwLDcgQEAKIAogCXJldHVybiBiOwogfQorRVhQT1JUX1NZTUJPTChiaW9fY2xvbmUpOwogCiAvKioKICAqCWJpb19nZXRfbnJfdmVjcwkJLSByZXR1cm4gYXBwcm94IG51bWJlciBvZiB2ZWNzCkBAIC01MDUsNiArNTE0LDcgQEAKIAogCXJldHVybiBucl9wYWdlczsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2dldF9ucl92ZWNzKTsKIAogc3RhdGljIGludCBfX2Jpb19hZGRfcGFnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgcGFnZQogCQkJICAqcGFnZSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZnNldCwKQEAgLTYzNSw2ICs2NDUsNyBAQAogCXJldHVybiBfX2Jpb19hZGRfcGFnZShxLCBiaW8sIHBhZ2UsIGxlbiwgb2Zmc2V0LAogCQkJICAgICAgcXVldWVfbWF4X2h3X3NlY3RvcnMocSkpOwogfQorRVhQT1JUX1NZTUJPTChiaW9fYWRkX3BjX3BhZ2UpOwogCiAvKioKICAqCWJpb19hZGRfcGFnZQktCWF0dGVtcHQgdG8gYWRkIHBhZ2UgdG8gYmlvCkBAIC02NTUsNiArNjY2LDcgQEAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKGJpby0+YmlfYmRldik7CiAJcmV0dXJuIF9fYmlvX2FkZF9wYWdlKHEsIGJpbywgcGFnZSwgbGVuLCBvZmZzZXQsIHF1ZXVlX21heF9zZWN0b3JzKHEpKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2FkZF9wYWdlKTsKIAogc3RydWN0IGJpb19tYXBfZGF0YSB7CiAJc3RydWN0IGJpb192ZWMgKmlvdmVjczsKQEAgLTc3Niw2ICs3ODgsNyBAQAogCWJpb19wdXQoYmlvKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChiaW9fdW5jb3B5X3VzZXIpOwogCiAvKioKICAqCWJpb19jb3B5X3VzZXJfaW92CS0JY29weSB1c2VyIGRhdGEgdG8gYmlvCkBAIC05MjAsNiArOTMzLDcgQEAKIAogCXJldHVybiBiaW9fY29weV91c2VyX2lvdihxLCBtYXBfZGF0YSwgJmlvdiwgMSwgd3JpdGVfdG9fdm0sIGdmcF9tYXNrKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2NvcHlfdXNlcik7CiAKIHN0YXRpYyBzdHJ1Y3QgYmlvICpfX2Jpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAJCQkJICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKQEAgLTEwNTAsNiArMTA2NCw3IEBACiAKIAlyZXR1cm4gYmlvX21hcF91c2VyX2lvdihxLCBiZGV2LCAmaW92LCAxLCB3cml0ZV90b192bSwgZ2ZwX21hc2spOwogfQorRVhQT1JUX1NZTUJPTChiaW9fbWFwX3VzZXIpOwogCiAvKioKICAqCWJpb19tYXBfdXNlcl9pb3YgLSBtYXAgdXNlciBzZ19pb3ZlYyB0YWJsZSBpbnRvIGJpbwpAQCAtMTExNywxMyArMTEzMiwxMyBAQAogCV9fYmlvX3VubWFwX3VzZXIoYmlvKTsKIAliaW9fcHV0KGJpbyk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb191bm1hcF91c2VyKTsKIAogc3RhdGljIHZvaWQgYmlvX21hcF9rZXJuX2VuZGlvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKIHsKIAliaW9fcHV0KGJpbyk7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBiaW8gKl9fYmlvX21hcF9rZXJuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB2b2lkICpkYXRhLAogCQkJCSAgdW5zaWduZWQgaW50IGxlbiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CkBAIC0xMTg5LDYgKzEyMDQsNyBAQAogCWJpb19wdXQoYmlvKTsKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX21hcF9rZXJuKTsKIAogc3RhdGljIHZvaWQgYmlvX2NvcHlfa2Vybl9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnIpCiB7CkBAIC0xMjUwLDYgKzEyNjYsNyBAQAogCiAJcmV0dXJuIGJpbzsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2NvcHlfa2Vybik7CiAKIC8qCiAgKiBiaW9fc2V0X3BhZ2VzX2RpcnR5KCkgYW5kIGJpb19jaGVja19wYWdlc19kaXJ0eSgpIGFyZSBzdXBwb3J0IGZ1bmN0aW9ucwpAQCAtMTQwMCw2ICsxNDE3LDcgQEAKIAlpZiAoYmlvLT5iaV9lbmRfaW8pCiAJCWJpby0+YmlfZW5kX2lvKGJpbywgZXJyb3IpOwogfQorRVhQT1JUX1NZTUJPTChiaW9fZW5kaW8pOwogCiB2b2lkIGJpb19wYWlyX3JlbGVhc2Uoc3RydWN0IGJpb19wYWlyICpicCkKIHsKQEAgLTE0MTAsNiArMTQyOCw3IEBACiAJCW1lbXBvb2xfZnJlZShicCwgYnAtPmJpbzIuYmlfcHJpdmF0ZSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChiaW9fcGFpcl9yZWxlYXNlKTsKIAogc3RhdGljIHZvaWQgYmlvX3BhaXJfZW5kXzEoc3RydWN0IGJpbyAqYmksIGludCBlcnIpCiB7CkBAIC0xNDc3LDYgKzE0OTYsNyBAQAogCiAJcmV0dXJuIGJwOwogfQorRVhQT1JUX1NZTUJPTChiaW9fc3BsaXQpOwogCiAvKioKICAqICAgICAgYmlvX3NlY3Rvcl9vZmZzZXQgLSBGaW5kIGhhcmR3YXJlIHNlY3RvciBvZmZzZXQgaW4gYmlvCkBAIC0xNTQ3LDYgKzE1NjcsNyBAQAogCiAJa2ZyZWUoYnMpOwogfQorRVhQT1JUX1NZTUJPTChiaW9zZXRfZnJlZSk7CiAKIC8qKgogICogYmlvc2V0X2NyZWF0ZSAgLSBDcmVhdGUgYSBiaW9fc2V0CkBAIC0xNTkyLDYgKzE2MTMsNyBAQAogCWJpb3NldF9mcmVlKGJzKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woYmlvc2V0X2NyZWF0ZSk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBiaW92ZWNfaW5pdF9zbGFicyh2b2lkKQogewpAQCAtMTYzNiwyOSArMTY1OCw0IEBACiAKIAlyZXR1cm4gMDsKIH0KLQogc3Vic3lzX2luaXRjYWxsKGluaXRfYmlvKTsKLQotRVhQT1JUX1NZTUJPTChiaW9fYWxsb2MpOwotRVhQT1JUX1NZTUJPTChiaW9fa21hbGxvYyk7Ci1FWFBPUlRfU1lNQk9MKGJpb19wdXQpOwotRVhQT1JUX1NZTUJPTChiaW9fZnJlZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb19lbmRpbyk7Ci1FWFBPUlRfU1lNQk9MKGJpb19pbml0KTsKLUVYUE9SVF9TWU1CT0woX19iaW9fY2xvbmUpOwotRVhQT1JUX1NZTUJPTChiaW9fY2xvbmUpOwotRVhQT1JUX1NZTUJPTChiaW9fcGh5c19zZWdtZW50cyk7Ci1FWFBPUlRfU1lNQk9MKGJpb19hZGRfcGFnZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb19hZGRfcGNfcGFnZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb19nZXRfbnJfdmVjcyk7Ci1FWFBPUlRfU1lNQk9MKGJpb19tYXBfdXNlcik7Ci1FWFBPUlRfU1lNQk9MKGJpb191bm1hcF91c2VyKTsKLUVYUE9SVF9TWU1CT0woYmlvX21hcF9rZXJuKTsKLUVYUE9SVF9TWU1CT0woYmlvX2NvcHlfa2Vybik7Ci1FWFBPUlRfU1lNQk9MKGJpb19wYWlyX3JlbGVhc2UpOwotRVhQT1JUX1NZTUJPTChiaW9fc3BsaXQpOwotRVhQT1JUX1NZTUJPTChiaW9fY29weV91c2VyKTsKLUVYUE9SVF9TWU1CT0woYmlvX3VuY29weV91c2VyKTsKLUVYUE9SVF9TWU1CT0woYmlvc2V0X2NyZWF0ZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb3NldF9mcmVlKTsKLUVYUE9SVF9TWU1CT0woYmlvX2FsbG9jX2Jpb3NldCk7CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDljZjRiOTIuLjhiZWQwNTUgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0xMjQ4LDggKzEyNDgsOCBAQAogCQkJYmRfc2V0X3NpemUoYmRldiwgKGxvZmZfdCliZGV2LT5iZF9wYXJ0LT5ucl9zZWN0cyA8PCA5KTsKIAkJfQogCX0gZWxzZSB7Ci0JCXB1dF9kaXNrKGRpc2spOwogCQltb2R1bGVfcHV0KGRpc2stPmZvcHMtPm93bmVyKTsKKwkJcHV0X2Rpc2soZGlzayk7CiAJCWRpc2sgPSBOVUxMOwogCQlpZiAoYmRldi0+YmRfY29udGFpbnMgPT0gYmRldikgewogCQkJaWYgKGJkZXYtPmJkX2Rpc2stPmZvcHMtPm9wZW4pIHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FjbC5jIGIvZnMvYnRyZnMvYWNsLmMKaW5kZXggZjEyODQyNy4uMzYxNjA0MiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYWNsLmMKKysrIGIvZnMvYnRyZnMvYWNsLmMKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJidHJmc19pbm9kZS5oIgogI2luY2x1ZGUgInhhdHRyLmgiCiAKLSNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCisjaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAogCiBzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqYnRyZnNfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSkKIHsKQEAgLTMxMyw3ICszMTMsNyBAQAogCS5zZXQJPSBidHJmc194YXR0cl9hY2xfYWNjZXNzX3NldCwKIH07CiAKLSNlbHNlIC8qIENPTkZJR19GU19QT1NJWF9BQ0wgKi8KKyNlbHNlIC8qIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wgKi8KIAogaW50IGJ0cmZzX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMzI1LDQgKzMyNSw0IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfRlNfUE9TSVhfQUNMICovCisjZW5kaWYgLyogQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTCAqLwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmMgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuYwppbmRleCAyODJjYTA4Li5jMDg2MWU3IDEwMDY0NAotLS0gYS9mcy9idHJmcy9hc3luYy10aHJlYWQuYworKysgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuYwpAQCAtNjQsNiArNjQsNTEgQEAKIH07CiAKIC8qCisgKiBidHJmc19zdGFydF93b3JrZXJzIHVzZXMga3RocmVhZF9ydW4sIHdoaWNoIGNhbiBibG9jayB3YWl0aW5nIGZvciBtZW1vcnkKKyAqIGZvciBhIHZlcnkgbG9uZyB0aW1lLiAgSXQgd2lsbCBhY3R1YWxseSB0aHJvdHRsZSBvbiBwYWdlIHdyaXRlYmFjaywKKyAqIGFuZCBzbyBpdCBtYXkgbm90IG1ha2UgcHJvZ3Jlc3MgdW50aWwgYWZ0ZXIgb3VyIGJ0cmZzIHdvcmtlciB0aHJlYWRzCisgKiBwcm9jZXNzIGFsbCBvZiB0aGUgcGVuZGluZyB3b3JrIHN0cnVjdHMgaW4gdGhlaXIgcXVldWUKKyAqCisgKiBUaGlzIG1lYW5zIHdlIGNhbid0IHVzZSBidHJmc19zdGFydF93b3JrZXJzIGZyb20gaW5zaWRlIGEgYnRyZnMgd29ya2VyCisgKiB0aHJlYWQgdGhhdCBpcyB1c2VkIGFzIHBhcnQgb2YgY2xlYW5pbmcgZGlydHkgbWVtb3J5LCB3aGljaCBwcmV0dHkgbXVjaAorICogaW52b2x2ZXMgYWxsIG9mIHRoZSB3b3JrZXIgdGhyZWFkcy4KKyAqCisgKiBJbnN0ZWFkIHdlIGhhdmUgYSBoZWxwZXIgcXVldWUgd2hvIG5ldmVyIGhhcyBtb3JlIHRoYW4gb25lIHRocmVhZAorICogd2hlcmUgd2Ugc2NoZWR1bGVyIHRocmVhZCBzdGFydCBvcGVyYXRpb25zLiAgVGhpcyB3b3JrZXJfc3RhcnQgc3RydWN0CisgKiBpcyB1c2VkIHRvIGNvbnRhaW4gdGhlIHdvcmsgYW5kIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBxdWV1ZSB0aGF0IG5lZWRzCisgKiBhbm90aGVyIHdvcmtlci4KKyAqLworc3RydWN0IHdvcmtlcl9zdGFydCB7CisJc3RydWN0IGJ0cmZzX3dvcmsgd29yazsKKwlzdHJ1Y3QgYnRyZnNfd29ya2VycyAqcXVldWU7Cit9OworCitzdGF0aWMgdm9pZCBzdGFydF9uZXdfd29ya2VyX2Z1bmMoc3RydWN0IGJ0cmZzX3dvcmsgKndvcmspCit7CisJc3RydWN0IHdvcmtlcl9zdGFydCAqc3RhcnQ7CisJc3RhcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdvcmtlcl9zdGFydCwgd29yayk7CisJYnRyZnNfc3RhcnRfd29ya2VycyhzdGFydC0+cXVldWUsIDEpOworCWtmcmVlKHN0YXJ0KTsKK30KKworc3RhdGljIGludCBzdGFydF9uZXdfd29ya2VyKHN0cnVjdCBidHJmc193b3JrZXJzICpxdWV1ZSkKK3sKKwlzdHJ1Y3Qgd29ya2VyX3N0YXJ0ICpzdGFydDsKKwlpbnQgcmV0OworCisJc3RhcnQgPSBremFsbG9jKHNpemVvZigqc3RhcnQpLCBHRlBfTk9GUyk7CisJaWYgKCFzdGFydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdGFydC0+d29yay5mdW5jID0gc3RhcnRfbmV3X3dvcmtlcl9mdW5jOworCXN0YXJ0LT5xdWV1ZSA9IHF1ZXVlOworCXJldCA9IGJ0cmZzX3F1ZXVlX3dvcmtlcihxdWV1ZS0+YXRvbWljX3dvcmtlcl9zdGFydCwgJnN0YXJ0LT53b3JrKTsKKwlpZiAocmV0KQorCQlrZnJlZShzdGFydCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIGhlbHBlciBmdW5jdGlvbiB0byBtb3ZlIGEgdGhyZWFkIG9udG8gdGhlIGlkbGUgbGlzdCBhZnRlciBpdAogICogaGFzIGZpbmlzaGVkIHNvbWUgcmVxdWVzdHMuCiAgKi8KQEAgLTExOCwxMSArMTYzLDEzIEBACiAJCWdvdG8gb3V0OwogCiAJd29ya2Vycy0+YXRvbWljX3N0YXJ0X3BlbmRpbmcgPSAwOwotCWlmICh3b3JrZXJzLT5udW1fd29ya2VycyA+PSB3b3JrZXJzLT5tYXhfd29ya2VycykKKwlpZiAod29ya2Vycy0+bnVtX3dvcmtlcnMgKyB3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZyA+PQorCSAgICB3b3JrZXJzLT5tYXhfd29ya2VycykKIAkJZ290byBvdXQ7CiAKKwl3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZyArPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtlcnMtPmxvY2ssIGZsYWdzKTsKLQlidHJmc19zdGFydF93b3JrZXJzKHdvcmtlcnMsIDEpOworCXN0YXJ0X25ld193b3JrZXIod29ya2Vycyk7CiAJcmV0dXJuOwogCiBvdXQ6CkBAIC0zOTAsOSArNDM3LDExIEBACiAvKgogICogc2ltcGxlIGluaXQgb24gc3RydWN0IGJ0cmZzX3dvcmtlcnMKICAqLwotdm9pZCBidHJmc19pbml0X3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIGNoYXIgKm5hbWUsIGludCBtYXgpCit2b2lkIGJ0cmZzX2luaXRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywgY2hhciAqbmFtZSwgaW50IG1heCwKKwkJCXN0cnVjdCBidHJmc193b3JrZXJzICphc3luY19oZWxwZXIpCiB7CiAJd29ya2Vycy0+bnVtX3dvcmtlcnMgPSAwOworCXdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nID0gMDsKIAlJTklUX0xJU1RfSEVBRCgmd29ya2Vycy0+d29ya2VyX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZ3b3JrZXJzLT5pZGxlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZ3b3JrZXJzLT5vcmRlcl9saXN0KTsKQEAgLTQwNCwxNCArNDUzLDE1IEBACiAJd29ya2Vycy0+bmFtZSA9IG5hbWU7CiAJd29ya2Vycy0+b3JkZXJlZCA9IDA7CiAJd29ya2Vycy0+YXRvbWljX3N0YXJ0X3BlbmRpbmcgPSAwOwotCXdvcmtlcnMtPmF0b21pY193b3JrZXJfc3RhcnQgPSAwOworCXdvcmtlcnMtPmF0b21pY193b3JrZXJfc3RhcnQgPSBhc3luY19oZWxwZXI7CiB9CiAKIC8qCiAgKiBzdGFydHMgbmV3IHdvcmtlciB0aHJlYWRzLiAgVGhpcyBkb2VzIG5vdCBlbmZvcmNlIHRoZSBtYXggd29ya2VyCiAgKiBjb3VudCBpbiBjYXNlIHlvdSBuZWVkIHRvIHRlbXBvcmFyaWx5IGdvIHBhc3QgaXQuCiAgKi8KLWludCBidHJmc19zdGFydF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLCBpbnQgbnVtX3dvcmtlcnMpCitzdGF0aWMgaW50IF9fYnRyZnNfc3RhcnRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywKKwkJCQkgaW50IG51bV93b3JrZXJzKQogewogCXN0cnVjdCBidHJmc193b3JrZXJfdGhyZWFkICp3b3JrZXI7CiAJaW50IHJldCA9IDA7CkBAIC00NDQsNiArNDk0LDggQEAKIAkJbGlzdF9hZGRfdGFpbCgmd29ya2VyLT53b3JrZXJfbGlzdCwgJndvcmtlcnMtPmlkbGVfbGlzdCk7CiAJCXdvcmtlci0+aWRsZSA9IDE7CiAJCXdvcmtlcnMtPm51bV93b3JrZXJzKys7CisJCXdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nLS07CisJCVdBUk5fT04od29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmcgPCAwKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZ3b3JrZXJzLT5sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NTIsNiArNTA0LDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IGJ0cmZzX3N0YXJ0X3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIGludCBudW1fd29ya2VycykKK3sKKwlzcGluX2xvY2tfaXJxKCZ3b3JrZXJzLT5sb2NrKTsKKwl3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZyArPSBudW1fd29ya2VyczsKKwlzcGluX3VubG9ja19pcnEoJndvcmtlcnMtPmxvY2spOworCXJldHVybiBfX2J0cmZzX3N0YXJ0X3dvcmtlcnMod29ya2VycywgbnVtX3dvcmtlcnMpOworfQorCiAvKgogICogcnVuIHRocm91Z2ggdGhlIGxpc3QgYW5kIGZpbmQgYSB3b3JrZXIgdGhyZWFkIHRoYXQgZG9lc24ndCBoYXZlIGEgbG90CiAgKiB0byBkbyByaWdodCBub3cuICBUaGlzIGNhbiByZXR1cm4gbnVsbCBpZiB3ZSBhcmVuJ3QgeWV0IGF0IHRoZSB0aHJlYWQKQEAgLTQ2MSw3ICs1MjEsMTAgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfd29ya2VyX3RocmVhZCAqd29ya2VyOwogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQ7Ci0JaW50IGVuZm9yY2VfbWluID0gd29ya2Vycy0+bnVtX3dvcmtlcnMgPCB3b3JrZXJzLT5tYXhfd29ya2VyczsKKwlpbnQgZW5mb3JjZV9taW47CisKKwllbmZvcmNlX21pbiA9ICh3b3JrZXJzLT5udW1fd29ya2VycyArIHdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nKSA8CisJCXdvcmtlcnMtPm1heF93b3JrZXJzOwogCiAJLyoKIAkgKiBpZiB3ZSBmaW5kIGFuIGlkbGUgdGhyZWFkLCBkb24ndCBtb3ZlIGl0IHRvIHRoZSBlbmQgb2YgdGhlCkBAIC01MDksMTUgKzU3MiwxNyBAQAogCXdvcmtlciA9IG5leHRfd29ya2VyKHdvcmtlcnMpOwogCiAJaWYgKCF3b3JrZXIpIHsKLQkJaWYgKHdvcmtlcnMtPm51bV93b3JrZXJzID49IHdvcmtlcnMtPm1heF93b3JrZXJzKSB7CisJCWlmICh3b3JrZXJzLT5udW1fd29ya2VycyArIHdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nID49CisJCSAgICB3b3JrZXJzLT5tYXhfd29ya2VycykgewogCQkJZ290byBmYWxsYmFjazsKIAkJfSBlbHNlIGlmICh3b3JrZXJzLT5hdG9taWNfd29ya2VyX3N0YXJ0KSB7CiAJCQl3b3JrZXJzLT5hdG9taWNfc3RhcnRfcGVuZGluZyA9IDE7CiAJCQlnb3RvIGZhbGxiYWNrOwogCQl9IGVsc2UgeworCQkJd29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmcrKzsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtlcnMtPmxvY2ssIGZsYWdzKTsKIAkJCS8qIHdlJ3JlIGJlbG93IHRoZSBsaW1pdCwgc3RhcnQgYW5vdGhlciB3b3JrZXIgKi8KLQkJCWJ0cmZzX3N0YXJ0X3dvcmtlcnMod29ya2VycywgMSk7CisJCQlfX2J0cmZzX3N0YXJ0X3dvcmtlcnMod29ya2VycywgMSk7CiAJCQlnb3RvIGFnYWluOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmggYi9mcy9idHJmcy9hc3luYy10aHJlYWQuaAppbmRleCBmYzA4OWI5Li41MDc3NzQ2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9hc3luYy10aHJlYWQuaAorKysgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuaApAQCAtNjQsNiArNjQsOCBAQAogCS8qIGN1cnJlbnQgbnVtYmVyIG9mIHJ1bm5pbmcgd29ya2VycyAqLwogCWludCBudW1fd29ya2VyczsKIAorCWludCBudW1fd29ya2Vyc19zdGFydGluZzsKKwogCS8qIG1heCBudW1iZXIgb2Ygd29ya2VycyBhbGxvd2VkLiAgY2hhbmdlZCBieSBidHJmc19zdGFydF93b3JrZXJzICovCiAJaW50IG1heF93b3JrZXJzOwogCkBAIC03OCw5ICs4MCwxMCBAQAogCiAJLyoKIAkgKiBhcmUgd2UgYWxsb3dlZCB0byBzbGVlcCB3aGlsZSBzdGFydGluZyB3b3JrZXJzIG9yIGFyZSB3ZSByZXF1aXJlZAotCSAqIHRvIHN0YXJ0IHRoZW0gYXQgYSBsYXRlciB0aW1lPworCSAqIHRvIHN0YXJ0IHRoZW0gYXQgYSBsYXRlciB0aW1lPyAgSWYgd2UgY2FuJ3Qgc2xlZXAsIHRoaXMgaW5kaWNhdGVzCisJICogd2hpY2ggcXVldWUgd2UgbmVlZCB0byB1c2UgdG8gc2NoZWR1bGUgdGhyZWFkIGNyZWF0aW9uLgogCSAqLwotCWludCBhdG9taWNfd29ya2VyX3N0YXJ0OworCXN0cnVjdCBidHJmc193b3JrZXJzICphdG9taWNfd29ya2VyX3N0YXJ0OwogCiAJLyogbGlzdCB3aXRoIGFsbCB0aGUgd29yayB0aHJlYWRzLiAgVGhlIHdvcmtlcnMgb24gdGhlIGlkbGUgdGhyZWFkCiAJICogbWF5IGJlIGFjdGl2ZWx5IHNlcnZpY2luZyBqb2JzLCBidXQgdGhleSBoYXZlbid0IHlldCBoaXQgdGhlCkBAIC0xMDksNyArMTEyLDggQEAKIGludCBidHJmc19xdWV1ZV93b3JrZXIoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIHN0cnVjdCBidHJmc193b3JrICp3b3JrKTsKIGludCBidHJmc19zdGFydF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLCBpbnQgbnVtX3dvcmtlcnMpOwogaW50IGJ0cmZzX3N0b3Bfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2Vycyk7Ci12b2lkIGJ0cmZzX2luaXRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywgY2hhciAqbmFtZSwgaW50IG1heCk7Cit2b2lkIGJ0cmZzX2luaXRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywgY2hhciAqbmFtZSwgaW50IG1heCwKKwkJCXN0cnVjdCBidHJmc193b3JrZXJzICphc3luY19zdGFydGVyKTsKIGludCBidHJmc19yZXF1ZXVlX3dvcmsoc3RydWN0IGJ0cmZzX3dvcmsgKndvcmspOwogdm9pZCBidHJmc19zZXRfd29ya19oaWdoX3ByaW8oc3RydWN0IGJ0cmZzX3dvcmsgKndvcmspOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9idHJmcy9idHJmc19pbm9kZS5oIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAppbmRleCA4MmVlNTZiLi5mNjc4M2E0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9idHJmc19pbm9kZS5oCisrKyBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKQEAgLTg2LDYgKzg2LDEyIEBACiAJICogdHJhbnNpZCBvZiB0aGUgdHJhbnNfaGFuZGxlIHRoYXQgbGFzdCBtb2RpZmllZCB0aGlzIGlub2RlCiAJICovCiAJdTY0IGxhc3RfdHJhbnM7CisKKwkvKgorCSAqIGxvZyB0cmFuc2lkIHdoZW4gdGhpcyBpbm9kZSB3YXMgbGFzdCBtb2RpZmllZAorCSAqLworCXU2NCBsYXN0X3N1Yl90cmFuczsKKwogCS8qCiAJICogdHJhbnNpZCB0aGF0IGxhc3QgbG9nZ2VkIHRoaXMgaW5vZGUKIAkgKi8KQEAgLTEyOCw2ICsxMzQsMTYgQEAKIAl1NjQgbGFzdF91bmxpbmtfdHJhbnM7CiAKIAkvKgorCSAqIENvdW50ZXJzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBleHRlbnQgaXRlbSdzIHdlIG1heSB1c2UgZHVlCisJICogdG8gZGVsYWxsb2MgYW5kIHN1Y2guICBvdXRzdGFuZGluZ19leHRlbnRzIGlzIHRoZSBudW1iZXIgb2YgZXh0ZW50CisJICogaXRlbXMgd2UgdGhpbmsgd2UnbGwgZW5kIHVwIHVzaW5nLCBhbmQgcmVzZXJ2ZWRfZXh0ZW50cyBpcyB0aGUgbnVtYmVyCisJICogb2YgZXh0ZW50IGl0ZW1zIHdlJ3ZlIHJlc2VydmVkIG1ldGFkYXRhIGZvci4KKwkgKi8KKwlzcGlubG9ja190IGFjY291bnRpbmdfbG9jazsKKwlpbnQgcmVzZXJ2ZWRfZXh0ZW50czsKKwlpbnQgb3V0c3RhbmRpbmdfZXh0ZW50czsKKworCS8qCiAJICogb3JkZXJlZF9kYXRhX2Nsb3NlIGlzIHNldCBieSB0cnVuY2F0ZSB3aGVuIGEgZmlsZSB0aGF0IHVzZWQKIAkgKiB0byBoYXZlIGdvb2QgZGF0YSBoYXMgYmVlbiB0cnVuY2F0ZWQgdG8gemVyby4gIFdoZW4gaXQgaXMgc2V0CiAJICogdGhlIGJ0cmZzIGZpbGUgcmVsZWFzZSBjYWxsIHdpbGwgYWRkIHRoaXMgaW5vZGUgdG8gdGhlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCA4MDU5OWI0Li40NDRiM2U5IDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTY3NSwyMSArNjc1LDI4IEBACiAJCQkJICAgY3VycmVudCBhbGxvY2F0aW9ucyAqLwogCXU2NCBieXRlc19yZWFkb25seTsJLyogdG90YWwgYnl0ZXMgdGhhdCBhcmUgcmVhZCBvbmx5ICovCiAJdTY0IGJ5dGVzX3N1cGVyOwkvKiB0b3RhbCBieXRlcyByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIGJsb2NrcyAqLwotCi0JLyogZGVsYWxsb2MgYWNjb3VudGluZyAqLwotCXU2NCBieXRlc19kZWxhbGxvYzsJLyogbnVtYmVyIG9mIGJ5dGVzIHJlc2VydmVkIGZvciBhbGxvY2F0aW9uLAotCQkJCSAgIHRoaXMgc3BhY2UgaXMgbm90IG5lY2Vzc2FyaWx5IHJlc2VydmVkIHlldAotCQkJCSAgIGJ5IHRoZSBhbGxvY2F0b3IgKi8KKwl1NjQgYnl0ZXNfcm9vdDsJCS8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvIGNvbW1pdCBhCisJCQkJICAgdHJhbnNhY3Rpb24gKi8KIAl1NjQgYnl0ZXNfbWF5X3VzZTsJLyogbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbWF5IGJlIHVzZWQgZm9yCi0JCQkJICAgZGVsYWxsb2MgKi8KKwkJCQkgICBkZWxhbGxvYy9hbGxvY2F0aW9ucyAqLworCXU2NCBieXRlc19kZWxhbGxvYzsJLyogbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSByZXNlcnZlZCBmb3IKKwkJCQkgICBkZWxheWVkIGFsbG9jYXRpb24gKi8KIAogCWludCBmdWxsOwkJLyogaW5kaWNhdGVzIHRoYXQgd2UgY2Fubm90IGFsbG9jYXRlIGFueSBtb3JlCiAJCQkJICAgY2h1bmtzIGZvciB0aGlzIHNwYWNlICovCiAJaW50IGZvcmNlX2FsbG9jOwkvKiBzZXQgaWYgd2UgbmVlZCB0byBmb3JjZSBhIGNodW5rIGFsbG9jIGZvcgogCQkJCSAgIHRoaXMgc3BhY2UgKi8KKwlpbnQgZm9yY2VfZGVsYWxsb2M7CS8qIG1ha2UgcGVvcGxlIHN0YXJ0IGRvaW5nIGZpbGVtYXBfZmx1c2ggdW50aWwKKwkJCQkgICB3ZSdyZSB1bmRlciBhIHRocmVzaG9sZCAqLwogCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCisJLyogZm9yIGNvbnRyb2xsaW5nIGhvdyB3ZSBmcmVlIHVwIHNwYWNlIGZvciBhbGxvY2F0aW9ucyAqLworCXdhaXRfcXVldWVfaGVhZF90IGFsbG9jYXRlX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZmx1c2hfd2FpdDsKKwlpbnQgYWxsb2NhdGluZ19jaHVuazsKKwlpbnQgZmx1c2hpbmc7CisKIAkvKiBmb3IgYmxvY2sgZ3JvdXBzIGluIG91ciBzYW1lIHR5cGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2NrX2dyb3VwczsKIAlzcGlubG9ja190IGxvY2s7CkBAIC05MDMsNiArOTEwLDcgQEAKIAkgKiBBIHRoaXJkIHBvb2wgZG9lcyBzdWJtaXRfYmlvIHRvIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhlIG90aGVyCiAJICogdHdvCiAJICovCisJc3RydWN0IGJ0cmZzX3dvcmtlcnMgZ2VuZXJpY193b3JrZXI7CiAJc3RydWN0IGJ0cmZzX3dvcmtlcnMgd29ya2VyczsKIAlzdHJ1Y3QgYnRyZnNfd29ya2VycyBkZWxhbGxvY193b3JrZXJzOwogCXN0cnVjdCBidHJmc193b3JrZXJzIGVuZGlvX3dvcmtlcnM7CkBAIC05MTAsNiArOTE4LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfd29ya2VycyBlbmRpb19tZXRhX3dyaXRlX3dvcmtlcnM7CiAJc3RydWN0IGJ0cmZzX3dvcmtlcnMgZW5kaW9fd3JpdGVfd29ya2VyczsKIAlzdHJ1Y3QgYnRyZnNfd29ya2VycyBzdWJtaXRfd29ya2VyczsKKwlzdHJ1Y3QgYnRyZnNfd29ya2VycyBlbm9zcGNfd29ya2VyczsKIAkvKgogCSAqIGZpeHVwIHdvcmtlcnMgdGFrZSBkaXJ0eSBwYWdlcyB0aGF0IGRpZG4ndCBwcm9wZXJseSBnbyB0aHJvdWdoCiAJICogdGhlIGNvdyBtZWNoYW5pc20gYW5kIG1ha2UgdGhlbSBzYWZlIHRvIHdyaXRlLiAgSXQgaGFwcGVucwpAQCAtMTAwMCw3ICsxMDA5LDEwIEBACiAJYXRvbWljX3QgbG9nX3dyaXRlcnM7CiAJYXRvbWljX3QgbG9nX2NvbW1pdFsyXTsKIAl1bnNpZ25lZCBsb25nIGxvZ190cmFuc2lkOworCXVuc2lnbmVkIGxvbmcgbGFzdF9sb2dfY29tbWl0OwogCXVuc2lnbmVkIGxvbmcgbG9nX2JhdGNoOworCXBpZF90IGxvZ19zdGFydF9waWQ7CisJYm9vbCBsb2dfbXVsdGlwbGVfcGlkczsKIAogCXU2NCBvYmplY3RpZDsKIAl1NjQgbGFzdF90cmFuczsKQEAgLTExNDEsNiArMTE1Myw3IEBACiAjZGVmaW5lIEJUUkZTX01PVU5UX0ZMVVNIT05DT01NSVQgICAgICAgKDEgPDwgNykKICNkZWZpbmUgQlRSRlNfTU9VTlRfU1NEX1NQUkVBRAkJKDEgPDwgOCkKICNkZWZpbmUgQlRSRlNfTU9VTlRfTk9TU0QJCSgxIDw8IDkpCisjZGVmaW5lIEJUUkZTX01PVU5UX0RJU0NBUkQJCSgxIDw8IDEwKQogCiAjZGVmaW5lIGJ0cmZzX2NsZWFyX29wdChvLCBvcHQpCQkoKG8pICY9IH5CVFJGU19NT1VOVF8jI29wdCkKICNkZWZpbmUgYnRyZnNfc2V0X29wdChvLCBvcHQpCQkoKG8pIHw9IEJUUkZTX01PVU5UXyMjb3B0KQpAQCAtMjAyMiw3ICsyMDM1LDEyIEBACiB2b2lkIGJ0cmZzX3NldF9pbm9kZV9zcGFjZV9pbmZvKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlvbmRlKTsKIHZvaWQgYnRyZnNfY2xlYXJfc3BhY2VfaW5mb19mdWxsKHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvKTsKIAotaW50IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworaW50IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCBudW1faXRlbXMpOworaW50IGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcyk7CitpbnQgYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnVtX2l0ZW1zKTsKK2ludCBidHJmc19yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGlub2RlICppbm9kZSwgaW50IG51bV9pdGVtcyk7CiBpbnQgYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXU2NCBieXRlcyk7CiB2b2lkIGJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKQEAgLTIzMTQsNyArMjMzMiw3IEBACiB2b2lkIGJ0cmZzX29ycGhhbl9jbGVhbnVwKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7CiBpbnQgYnRyZnNfaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBidHJmc19kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYnRyZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKIC8qIGlvY3RsLmMgKi8KIGxvbmcgYnRyZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKQEAgLTIzMjYsNyArMjM0NCw3IEBACiBpbnQgYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkJICAgIGludCBza2lwX3Bpbm5lZCk7CiBpbnQgYnRyZnNfY2hlY2tfZmlsZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSk7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnM7CiBpbnQgYnRyZnNfZHJvcF9leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAgICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBsb2NrZWRfZW5kLApAQCAtMjM1Nyw3ICsyMzc1LDcgQEAKIGludCBidHJmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KTsKIAogLyogYWNsLmMgKi8KLSNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCisjaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAogaW50IGJ0cmZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiAjZWxzZQogI2RlZmluZSBidHJmc19jaGVja19hY2wgTlVMTApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDY0NGU3OTYuLjAyYjZhZmIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTgyMiwxNCArODIyLDE0IEBACiAKIGludCBidHJmc193cml0ZV90cmVlX2Jsb2NrKHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYpCiB7Ci0JcmV0dXJuIGJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoYnVmLT5maXJzdF9wYWdlLT5tYXBwaW5nLCBidWYtPnN0YXJ0LAotCQkJCSAgICAgIGJ1Zi0+c3RhcnQgKyBidWYtPmxlbiAtIDEsIFdCX1NZTkNfQUxMKTsKKwlyZXR1cm4gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGJ1Zi0+Zmlyc3RfcGFnZS0+bWFwcGluZywgYnVmLT5zdGFydCwKKwkJCQkJYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSk7CiB9CiAKIGludCBidHJmc193YWl0X3RyZWVfYmxvY2tfd3JpdGViYWNrKHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYpCiB7Ci0JcmV0dXJuIGJ0cmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UoYnVmLT5maXJzdF9wYWdlLT5tYXBwaW5nLAotCQkJCSAgYnVmLT5zdGFydCwgYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSk7CisJcmV0dXJuIGZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKGJ1Zi0+Zmlyc3RfcGFnZS0+bWFwcGluZywKKwkJCQkgICAgICAgYnVmLT5zdGFydCwgYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSk7CiB9CiAKIHN0cnVjdCBleHRlbnRfYnVmZmVyICpyZWFkX3RyZWVfYmxvY2soc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCkBAIC05MTcsNiArOTE3LDcgQEAKIAlhdG9taWNfc2V0KCZyb290LT5sb2dfd3JpdGVycywgMCk7CiAJcm9vdC0+bG9nX2JhdGNoID0gMDsKIAlyb290LT5sb2dfdHJhbnNpZCA9IDA7CisJcm9vdC0+bGFzdF9sb2dfY29tbWl0ID0gMDsKIAlleHRlbnRfaW9fdHJlZV9pbml0KCZyb290LT5kaXJ0eV9sb2dfcGFnZXMsCiAJCQkgICAgIGZzX2luZm8tPmJ0cmVlX2lub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKIApAQCAtMTA4Nyw2ICsxMDg4LDcgQEAKIAlXQVJOX09OKHJvb3QtPmxvZ19yb290KTsKIAlyb290LT5sb2dfcm9vdCA9IGxvZ19yb290OwogCXJvb3QtPmxvZ190cmFuc2lkID0gMDsKKwlyb290LT5sYXN0X2xvZ19jb21taXQgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC0xNjMwLDcgKzE2MzIsNyBAQAogCWZzX2luZm8tPnNiID0gc2I7CiAJZnNfaW5mby0+bWF4X2V4dGVudCA9ICh1NjQpLTE7CiAJZnNfaW5mby0+bWF4X2lubGluZSA9IDgxOTIgKiAxMDI0OwotCWZzX2luZm8tPm1ldGFkYXRhX3JhdGlvID0gODsKKwlmc19pbmZvLT5tZXRhZGF0YV9yYXRpbyA9IDA7CiAKIAlmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywKIAkJCQkJICBudW1fb25saW5lX2NwdXMoKSArIDIsIDgpOwpAQCAtMTc0NiwyMSArMTc0OCwyNSBAQAogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWxfaXB1dDsKIAl9Ci1wcmludGsoInRocmVhZCBwb29sIGlzICVkXG4iLCBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKLQkvKgotCSAqIHdlIG5lZWQgdG8gc3RhcnQgYWxsIHRoZSBlbmRfaW8gd29ya2VycyB1cCBmcm9udCBiZWNhdXNlIHRoZQotCSAqIHF1ZXVlIHdvcmsgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYXQgaW50ZXJydXB0IHRpbWUsIGFuZCBzbyBpdAotCSAqIGNhbm5vdCBkeW5hbWljYWxseSBncm93LgotCSAqLworCisJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5nZW5lcmljX3dvcmtlciwKKwkJCSAgICJnZW53b3JrIiwgMSwgTlVMTCk7CisKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPndvcmtlcnMsICJ3b3JrZXIiLAotCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSk7CisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAogCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+ZGVsYWxsb2Nfd29ya2VycywgImRlbGFsbG9jIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzLCAic3VibWl0IiwKIAkJCSAgIG1pbl90KHU2NCwgZnNfZGV2aWNlcy0+bnVtX2RldmljZXMsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKSk7CisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CisJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5lbm9zcGNfd29ya2VycywgImVub3NwYyIsCisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAogCS8qIGEgaGlnaGVyIGlkbGUgdGhyZXNoIG9uIHRoZSBzdWJtaXQgd29ya2VycyBtYWtlcyBpdCBtdWNoIG1vcmUKIAkgKiBsaWtlbHkgdGhhdCBiaW9zIHdpbGwgYmUgc2VuZCBkb3duIGluIGEgc2FuZSBvcmRlciB0byB0aGUKQEAgLTE3NzQsMTUgKzE3ODAsMjAgQEAKIAlmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzLmlkbGVfdGhyZXNoID0gMjsKIAlmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzLm9yZGVyZWQgPSAxOwogCi0JYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5maXh1cF93b3JrZXJzLCAiZml4dXAiLCAxKTsKKwlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPmZpeHVwX3dvcmtlcnMsICJmaXh1cCIsIDEsCisJCQkgICAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fd29ya2VycywgImVuZGlvIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dvcmtlcnMsICJlbmRpby1tZXRhIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dyaXRlX3dvcmtlcnMsCi0JCQkgICAiZW5kaW8tbWV0YS13cml0ZSIsIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgImVuZGlvLW1ldGEtd3JpdGUiLCBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX3dyaXRlX3dvcmtlcnMsICJlbmRpby13cml0ZSIsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsCisJCQkgICAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCiAJLyoKIAkgKiBlbmRpb3MgYXJlIGxhcmdlbHkgcGFyYWxsZWwgYW5kIHNob3VsZCBoYXZlIGEgdmVyeQpAQCAtMTc5NCwxMiArMTgwNSw4IEBACiAJZnNfaW5mby0+ZW5kaW9fd3JpdGVfd29ya2Vycy5pZGxlX3RocmVzaCA9IDI7CiAJZnNfaW5mby0+ZW5kaW9fbWV0YV93cml0ZV93b3JrZXJzLmlkbGVfdGhyZXNoID0gMjsKIAotCWZzX2luZm8tPmVuZGlvX3dvcmtlcnMuYXRvbWljX3dvcmtlcl9zdGFydCA9IDE7Ci0JZnNfaW5mby0+ZW5kaW9fbWV0YV93b3JrZXJzLmF0b21pY193b3JrZXJfc3RhcnQgPSAxOwotCWZzX2luZm8tPmVuZGlvX3dyaXRlX3dvcmtlcnMuYXRvbWljX3dvcmtlcl9zdGFydCA9IDE7Ci0JZnNfaW5mby0+ZW5kaW9fbWV0YV93cml0ZV93b3JrZXJzLmF0b21pY193b3JrZXJfc3RhcnQgPSAxOwotCiAJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+d29ya2VycywgMSk7CisJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIsIDEpOwogCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5maXh1cF93b3JrZXJzLCAxKTsKQEAgLTE4MDcsNiArMTgxNCw3IEBACiAJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fbWV0YV93b3JrZXJzLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dyaXRlX3dvcmtlcnMsIDEpOwogCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX3dyaXRlX3dvcmtlcnMsIDEpOworCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPmVub3NwY193b3JrZXJzLCAxKTsKIAogCWZzX2luZm8tPmJkaS5yYV9wYWdlcyAqPSBidHJmc19zdXBlcl9udW1fZGV2aWNlcyhkaXNrX3N1cGVyKTsKIAlmc19pbmZvLT5iZGkucmFfcGFnZXMgPSBtYXgoZnNfaW5mby0+YmRpLnJhX3BhZ2VzLApAQCAtMjAxMiw2ICsyMDIwLDcgQEAKIAlmcmVlX2V4dGVudF9idWZmZXIoY2h1bmtfcm9vdC0+bm9kZSk7CiAJZnJlZV9leHRlbnRfYnVmZmVyKGNodW5rX3Jvb3QtPmNvbW1pdF9yb290KTsKIGZhaWxfc2JfYnVmZmVyOgorCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Zml4dXBfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPndvcmtlcnMpOwpAQCAtMjAyMCw2ICsyMDI5LDcgQEAKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX21ldGFfd3JpdGVfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb193cml0ZV93b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzKTsKKwlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVub3NwY193b3JrZXJzKTsKIGZhaWxfaXB1dDoKIAlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMihmc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nKTsKIAlpcHV0KGZzX2luZm8tPmJ0cmVlX2lub2RlKTsKQEAgLTI0MzcsNiArMjQ0Nyw3IEBACiAKIAlpcHV0KGZzX2luZm8tPmJ0cmVlX2lub2RlKTsKIAorCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Zml4dXBfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPndvcmtlcnMpOwpAQCAtMjQ0NSw2ICsyNDU2LDcgQEAKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX21ldGFfd3JpdGVfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb193cml0ZV93b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzKTsKKwlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVub3NwY193b3JrZXJzKTsKIAogCWJ0cmZzX2Nsb3NlX2RldmljZXMoZnNfaW5mby0+ZnNfZGV2aWNlcyk7CiAJYnRyZnNfbWFwcGluZ190cmVlX2ZyZWUoJmZzX2luZm8tPm1hcHBpbmdfdHJlZSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCA5OTNmOTNmLi45NDYyN2M0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTY4LDYgKzY4LDggQEAKIAkJCSAgc3RydWN0IGV4dGVudF9idWZmZXIgKiptdXN0X2NsZWFuKTsKIHN0YXRpYyBpbnQgZmluZF9uZXh0X2tleShzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgaW50IGxldmVsLAogCQkJIHN0cnVjdCBidHJmc19rZXkgKmtleSk7CitzdGF0aWMgdm9pZCBkdW1wX3NwYWNlX2luZm8oc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8sIHU2NCBieXRlcywKKwkJCSAgICBpbnQgZHVtcF9ibG9ja19ncm91cHMpOwogCiBzdGF0aWMgbm9pbmxpbmUgaW50CiBibG9ja19ncm91cF9jYWNoZV9kb25lKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqY2FjaGUpCkBAIC0xNTY2LDIzICsxNTY4LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIEJJT19SV19ESVNDQVJECiBzdGF0aWMgdm9pZCBidHJmc19pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgbGVuKQogewogCWJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0ID4+IDksIGxlbiA+PiA5LCBHRlBfS0VSTkVMLAogCQkJICAgICBESVNDQVJEX0ZMX0JBUlJJRVIpOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgYnRyZnNfZGlzY2FyZF9leHRlbnQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCiAJCQkJdTY0IG51bV9ieXRlcykKIHsKLSNpZmRlZiBCSU9fUldfRElTQ0FSRAogCWludCByZXQ7CiAJdTY0IG1hcF9sZW5ndGggPSBudW1fYnl0ZXM7CiAJc3RydWN0IGJ0cmZzX211bHRpX2JpbyAqbXVsdGkgPSBOVUxMOwogCisJaWYgKCFidHJmc190ZXN0X29wdChyb290LCBESVNDQVJEKSkKKwkJcmV0dXJuIDA7CisKIAkvKiBUZWxsIHRoZSBibG9jayBkZXZpY2UocykgdGhhdCB0aGUgc2VjdG9ycyBjYW4gYmUgZGlzY2FyZGVkICovCiAJcmV0ID0gYnRyZnNfbWFwX2Jsb2NrKCZyb290LT5mc19pbmZvLT5tYXBwaW5nX3RyZWUsIFJFQUQsCiAJCQkgICAgICBieXRlbnIsICZtYXBfbGVuZ3RoLCAmbXVsdGksIDApOwpAQCAtMTYwMiw5ICsxNjA0LDYgQEAKIAl9CiAKIAlyZXR1cm4gcmV0OwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgogfQogCiBpbnQgYnRyZnNfaW5jX2V4dGVudF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCkBAIC0yNzY1LDY3ICsyNzY0LDQ0OCBAQAogCQkJCQkJICAgICAgIGFsbG9jX3RhcmdldCk7CiB9CiAKK3N0YXRpYyB1NjQgY2FsY3VsYXRlX2J5dGVzX25lZWRlZChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcykKK3sKKwl1NjQgbnVtX2J5dGVzOworCWludCBsZXZlbDsKKworCWxldmVsID0gQlRSRlNfTUFYX0xFVkVMIC0gMjsKKwkvKgorCSAqIE5PVEU6IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgYWJzb2x1dGVseSB0aGUgd29yc3QgcG9zc2libGUgY2FzZS4KKwkgKiBUaGlzIGFzc3VtZXMgdGhhdCBfZXZlcnlfIGl0ZW0gd2UgaW5zZXJ0IHdpbGwgcmVxdWlyZSBhIG5ldyBsZWFmLCBhbmQKKwkgKiB0aGF0IHRoZSB0cmVlIGhhcyBncm93biB0byBpdHMgbWF4aW11bSBsZXZlbCBzaXplLgorCSAqLworCisJLyoKKwkgKiBmb3IgZXZlcnkgaXRlbSB3ZSBpbnNlcnQgd2UgY291bGQgaW5zZXJ0IGJvdGggYW4gZXh0ZW50IGl0ZW0gYW5kIGEKKwkgKiBleHRlbnQgcmVmIGl0ZW0uICBUaGVuIGZvciBldmVyIGl0ZW0gd2UgaW5zZXJ0LCB3ZSB3aWxsIG5lZWQgdG8gY293CisJICogYm90aCB0aGUgb3JpZ2luYWwgbGVhZiwgcGx1cyB0aGUgbGVhZiB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgaXQuCisJICoKKwkgKiBVbmxlc3Mgd2UgYXJlIHRhbGtpbmcgYWJvdXQgdGhlIGV4dGVudCByb290LCB0aGVuIHdlIGp1c3Qgd2FudCB0aGUKKwkgKiBudW1iZXIgb2YgaXRlbXMgKiAyLCBzaW5jZSB3ZSBqdXN0IG5lZWQgdGhlIGV4dGVudCBpdGVtIHBsdXMgaXRzIHJlZi4KKwkgKi8KKwlpZiAocm9vdCA9PSByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCkKKwkJbnVtX2J5dGVzID0gbnVtX2l0ZW1zICogMjsKKwllbHNlCisJCW51bV9ieXRlcyA9IChudW1faXRlbXMgKyAoMiAqIG51bV9pdGVtcykpICogMzsKKworCS8qCisJICogbnVtX2J5dGVzIGlzIHRvdGFsIG51bWJlciBvZiBsZWF2ZXMgd2UgY291bGQgbmVlZCB0aW1lcyB0aGUgbGVhZgorCSAqIHNpemUsIGFuZCB0aGVuIGZvciBldmVyeSBsZWFmIHdlIGNvdWxkIGVuZCB1cCBjb3cnaW5nIDIgbm9kZXMgcGVyCisJICogbGV2ZWwsIGRvd24gdG8gdGhlIGxlYWYgbGV2ZWwuCisJICovCisJbnVtX2J5dGVzID0gKG51bV9ieXRlcyAqIHJvb3QtPmxlYWZzaXplKSArCisJCShudW1fYnl0ZXMgKiAobGV2ZWwgKiAyKSkgKiByb290LT5ub2Rlc2l6ZTsKKworCXJldHVybiBudW1fYnl0ZXM7Cit9CisKIC8qCi0gKiBmb3Igbm93IHRoaXMganVzdCBtYWtlcyBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgNSUgb2Ygb3VyIG1ldGFkYXRhIHNwYWNlIGZyZWUKLSAqIGZvciB1c2UuCisgKiBVbnJlc2VydmUgbWV0YWRhdGEgc3BhY2UgZm9yIGRlbGFsbG9jLiAgSWYgd2UgaGF2ZSBsZXNzIHJlc2VydmVkIGNyZWRpdHMgdGhhbgorICogd2UgaGF2ZSBleHRlbnRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KICAqLwotaW50IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCitpbnQgYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnVtX2l0ZW1zKQogewogCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqbWV0YV9zaW5mbzsKLQl1NjQgYWxsb2NfdGFyZ2V0LCB0aHJlc2g7Ci0JaW50IGNvbW1pdHRlZCA9IDAsIHJldDsKKwl1NjQgbnVtX2J5dGVzOworCXU2NCBhbGxvY190YXJnZXQ7CisJYm9vbCBidWcgPSBmYWxzZTsKIAogCS8qIGdldCB0aGUgc3BhY2UgaW5mbyBmb3Igd2hlcmUgdGhlIG1ldGFkYXRhIHdpbGwgbGl2ZSAqLwogCWFsbG9jX3RhcmdldCA9IGJ0cmZzX2dldF9hbGxvY19wcm9maWxlKHJvb3QsIDApOwogCW1ldGFfc2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhpbmZvLCBhbGxvY190YXJnZXQpOwotCWlmICghbWV0YV9zaW5mbykKLQkJZ290byBhbGxvYzsKIAorCW51bV9ieXRlcyA9IGNhbGN1bGF0ZV9ieXRlc19uZWVkZWQocm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCisJCQkJCSAgIG51bV9pdGVtcyk7CisKKwlzcGluX2xvY2soJm1ldGFfc2luZm8tPmxvY2spOworCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJaWYgKEJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9leHRlbnRzIDw9CisJICAgIEJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKSB7CisJCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCisJQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2V4dGVudHMtLTsKKwlCVUdfT04oQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2V4dGVudHMgPCAwKTsKKworCWlmIChtZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyA8IG51bV9ieXRlcykgeworCQlidWcgPSB0cnVlOworCQltZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyA9IDA7CisJfSBlbHNlIHsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MgLT0gbnVtX2J5dGVzOworCX0KKwlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisKKwlCVUdfT04oYnVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaGVja19mb3JjZV9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqbWV0YV9zaW5mbykKK3sKKwl1NjQgdGhyZXNoOworCisJdGhyZXNoID0gbWV0YV9zaW5mby0+Ynl0ZXNfdXNlZCArIG1ldGFfc2luZm8tPmJ5dGVzX3Jlc2VydmVkICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfcGlubmVkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKworCQltZXRhX3NpbmZvLT5ieXRlc19zdXBlciArIG1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgKworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlOworCisJdGhyZXNoID0gbWV0YV9zaW5mby0+dG90YWxfYnl0ZXMgLSB0aHJlc2g7CisJdGhyZXNoICo9IDgwOworCWRvX2Rpdih0aHJlc2gsIDEwMCk7CisJaWYgKHRocmVzaCA8PSBtZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYykKKwkJbWV0YV9zaW5mby0+Zm9yY2VfZGVsYWxsb2MgPSAxOworCWVsc2UKKwkJbWV0YV9zaW5mby0+Zm9yY2VfZGVsYWxsb2MgPSAwOworfQorCitzdHJ1Y3QgYXN5bmNfZmx1c2ggeworCXN0cnVjdCBidHJmc19yb290ICpyb290OworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvOworCXN0cnVjdCBidHJmc193b3JrIHdvcms7Cit9OworCitzdGF0aWMgbm9pbmxpbmUgdm9pZCBmbHVzaF9kZWxhbGxvY19hc3luYyhzdHJ1Y3QgYnRyZnNfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgYXN5bmNfZmx1c2ggKmFzeW5jOworCXN0cnVjdCBidHJmc19yb290ICpyb290OworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvOworCisJYXN5bmMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFzeW5jX2ZsdXNoLCB3b3JrKTsKKwlyb290ID0gYXN5bmMtPnJvb3Q7CisJaW5mbyA9IGFzeW5jLT5pbmZvOworCisJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QpOworCXdha2VfdXAoJmluZm8tPmZsdXNoX3dhaXQpOworCWJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHJvb3QsIDApOworCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwlpbmZvLT5mbHVzaGluZyA9IDA7CisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCXdha2VfdXAoJmluZm8tPmZsdXNoX3dhaXQpOworCisJa2ZyZWUoYXN5bmMpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X29uX2ZsdXNoKHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvKQoreworCURFRklORV9XQUlUKHdhaXQpOworCXU2NCB1c2VkOworCisJd2hpbGUgKDEpIHsKKwkJcHJlcGFyZV90b193YWl0KCZpbmZvLT5mbHVzaF93YWl0LCAmd2FpdCwKKwkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJCWlmICghaW5mby0+Zmx1c2hpbmcpIHsKKwkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdXNlZCA9IGluZm8tPmJ5dGVzX3VzZWQgKyBpbmZvLT5ieXRlc19yZXNlcnZlZCArCisJCQlpbmZvLT5ieXRlc19waW5uZWQgKyBpbmZvLT5ieXRlc19yZWFkb25seSArCisJCQlpbmZvLT5ieXRlc19zdXBlciArIGluZm8tPmJ5dGVzX3Jvb3QgKworCQkJaW5mby0+Ynl0ZXNfbWF5X3VzZSArIGluZm8tPmJ5dGVzX2RlbGFsbG9jOworCQlpZiAodXNlZCA8IGluZm8tPnRvdGFsX2J5dGVzKSB7CisJCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCXNjaGVkdWxlKCk7CisJfQorCWZpbmlzaF93YWl0KCZpbmZvLT5mbHVzaF93YWl0LCAmd2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX2RlbGFsbG9jKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCSBzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgYXN5bmNfZmx1c2ggKmFzeW5jOworCWJvb2wgd2FpdCA9IGZhbHNlOworCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKworCWlmICghaW5mby0+Zmx1c2hpbmcpIHsKKwkJaW5mby0+Zmx1c2hpbmcgPSAxOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5mbHVzaF93YWl0KTsKKwl9IGVsc2UgeworCQl3YWl0ID0gdHJ1ZTsKKwl9CisKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAod2FpdCkgeworCQl3YWl0X29uX2ZsdXNoKGluZm8pOworCQlyZXR1cm47CisJfQorCisJYXN5bmMgPSBremFsbG9jKHNpemVvZigqYXN5bmMpLCBHRlBfTk9GUyk7CisJaWYgKCFhc3luYykKKwkJZ290byBmbHVzaDsKKworCWFzeW5jLT5yb290ID0gcm9vdDsKKwlhc3luYy0+aW5mbyA9IGluZm87CisJYXN5bmMtPndvcmsuZnVuYyA9IGZsdXNoX2RlbGFsbG9jX2FzeW5jOworCisJYnRyZnNfcXVldWVfd29ya2VyKCZyb290LT5mc19pbmZvLT5lbm9zcGNfd29ya2VycywKKwkJCSAgICZhc3luYy0+d29yayk7CisJd2FpdF9vbl9mbHVzaChpbmZvKTsKKwlyZXR1cm47CisKK2ZsdXNoOgorCWJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2Rlcyhyb290KTsKKwlidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwKTsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJaW5mby0+Zmx1c2hpbmcgPSAwOworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwl3YWtlX3VwKCZpbmZvLT5mbHVzaF93YWl0KTsKK30KKworc3RhdGljIGludCBtYXliZV9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8pCit7CisJc3RydWN0IGJ0cmZzX3N1cGVyX2Jsb2NrICpkaXNrX3N1cGVyID0gJnJvb3QtPmZzX2luZm8tPnN1cGVyX2NvcHk7CisJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CisJYm9vbCB3YWl0ID0gZmFsc2U7CisJaW50IHJldCA9IDA7CisJdTY0IG1pbl9tZXRhZGF0YTsKKwl1NjQgZnJlZV9zcGFjZTsKKworCWZyZWVfc3BhY2UgPSBidHJmc19zdXBlcl90b3RhbF9ieXRlcyhkaXNrX3N1cGVyKTsKKwkvKgorCSAqIHdlIGFsbG93IHRoZSBtZXRhZGF0YSB0byBncm93IHRvIGEgbWF4IG9mIGVpdGhlciAxMGdiIG9yIDUlIG9mIHRoZQorCSAqIHNwYWNlIGluIHRoZSB2b2x1bWUuCisJICovCisJbWluX21ldGFkYXRhID0gbWluKCh1NjQpMTAgKiAxMDI0ICogMTAyNCAqIDEwMjQsCisJCQkgICAgIGRpdjY0X3U2NChmcmVlX3NwYWNlICogNSwgMTAwKSk7CisJaWYgKGluZm8tPnRvdGFsX2J5dGVzID49IG1pbl9tZXRhZGF0YSkgeworCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCXJldHVybiAwOworCX0KKworCWlmIChpbmZvLT5mdWxsKSB7CisJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFpbmZvLT5hbGxvY2F0aW5nX2NodW5rKSB7CisJCWluZm8tPmZvcmNlX2FsbG9jID0gMTsKKwkJaW5mby0+YWxsb2NhdGluZ19jaHVuayA9IDE7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmFsbG9jYXRlX3dhaXQpOworCX0gZWxzZSB7CisJCXdhaXQgPSB0cnVlOworCX0KKworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKworCWlmICh3YWl0KSB7CisJCXdhaXRfZXZlbnQoaW5mby0+YWxsb2NhdGVfd2FpdCwKKwkJCSAgICFpbmZvLT5hbGxvY2F0aW5nX2NodW5rKTsKKwkJcmV0dXJuIDE7CisJfQorCisJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoIXRyYW5zKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKKwkJCSAgICAgNDA5NiArIDIgKiAxMDI0ICogMTAyNCwKKwkJCSAgICAgaW5mby0+ZmxhZ3MsIDApOworCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CitvdXQ6CisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwlpbmZvLT5hbGxvY2F0aW5nX2NodW5rID0gMDsKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJd2FrZV91cCgmaW5mby0+YWxsb2NhdGVfd2FpdCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJlc2VydmUgbWV0YWRhdGEgc3BhY2UgZm9yIGRlbGFsbG9jLgorICovCitpbnQgYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Moc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBudW1faXRlbXMpCit7CisJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSByb290LT5mc19pbmZvOworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICptZXRhX3NpbmZvOworCXU2NCBudW1fYnl0ZXM7CisJdTY0IHVzZWQ7CisJdTY0IGFsbG9jX3RhcmdldDsKKwlpbnQgZmx1c2hlZCA9IDA7CisJaW50IGZvcmNlX2RlbGFsbG9jOworCisJLyogZ2V0IHRoZSBzcGFjZSBpbmZvIGZvciB3aGVyZSB0aGUgbWV0YWRhdGEgd2lsbCBsaXZlICovCisJYWxsb2NfdGFyZ2V0ID0gYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgMCk7CisJbWV0YV9zaW5mbyA9IF9fZmluZF9zcGFjZV9pbmZvKGluZm8sIGFsbG9jX3RhcmdldCk7CisKKwludW1fYnl0ZXMgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAorCQkJCQkgICBudW1faXRlbXMpOwogYWdhaW46CiAJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKLQlpZiAoIW1ldGFfc2luZm8tPmZ1bGwpCi0JCXRocmVzaCA9IG1ldGFfc2luZm8tPnRvdGFsX2J5dGVzICogODA7Ci0JZWxzZQotCQl0aHJlc2ggPSBtZXRhX3NpbmZvLT50b3RhbF9ieXRlcyAqIDk1OwogCi0JZG9fZGl2KHRocmVzaCwgMTAwKTsKKwlmb3JjZV9kZWxhbGxvYyA9IG1ldGFfc2luZm8tPmZvcmNlX2RlbGFsbG9jOwogCi0JaWYgKG1ldGFfc2luZm8tPmJ5dGVzX3VzZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZXNlcnZlZCArCi0JICAgIG1ldGFfc2luZm8tPmJ5dGVzX3Bpbm5lZCArIG1ldGFfc2luZm8tPmJ5dGVzX3JlYWRvbmx5ICsKLQkgICAgbWV0YV9zaW5mby0+Ynl0ZXNfc3VwZXIgPiB0aHJlc2gpIHsKLQkJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7Ci0JCWlmICghbWV0YV9zaW5mby0+ZnVsbCkgewotCQkJbWV0YV9zaW5mby0+Zm9yY2VfYWxsb2MgPSAxOworCWlmICh1bmxpa2VseSghbWV0YV9zaW5mby0+Ynl0ZXNfcm9vdCkpCisJCW1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QsIDYpOworCisJaWYgKCFmbHVzaGVkKQorCQltZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyArPSBudW1fYnl0ZXM7CisKKwl1c2VkID0gbWV0YV9zaW5mby0+Ynl0ZXNfdXNlZCArIG1ldGFfc2luZm8tPmJ5dGVzX3Jlc2VydmVkICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfcGlubmVkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKworCQltZXRhX3NpbmZvLT5ieXRlc19zdXBlciArIG1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgKworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlICsgbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2M7CisKKwlpZiAodXNlZCA+IG1ldGFfc2luZm8tPnRvdGFsX2J5dGVzKSB7CisJCWZsdXNoZWQrKzsKKworCQlpZiAoZmx1c2hlZCA9PSAxKSB7CisJCQlpZiAobWF5YmVfYWxsb2NhdGVfY2h1bmsocm9vdCwgbWV0YV9zaW5mbykpCisJCQkJZ290byBhZ2FpbjsKKwkJCWZsdXNoZWQrKzsKKwkJfSBlbHNlIHsKIAkJCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKLWFsbG9jOgotCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKLQkJCWlmICghdHJhbnMpCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAotCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAotCQkJCQkgICAgIDIgKiAxMDI0ICogMTAyNCwgYWxsb2NfdGFyZ2V0LCAwKTsKLQkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQlpZiAoIW1ldGFfc2luZm8pIHsKLQkJCQltZXRhX3NpbmZvID0gX19maW5kX3NwYWNlX2luZm8oaW5mbywKLQkJCQkJCQkgICAgICAgYWxsb2NfdGFyZ2V0KTsKLQkJCX0KKwkJaWYgKGZsdXNoZWQgPT0gMikgeworCQkJZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKKwkJCWdvdG8gYWdhaW47CisJCX0gZWxzZSBpZiAoZmx1c2hlZCA9PSAzKSB7CisJCQlmbHVzaF9kZWxhbGxvYyhyb290LCBtZXRhX3NpbmZvKTsKIAkJCWdvdG8gYWdhaW47CiAJCX0KKwkJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MgLT0gbnVtX2J5dGVzOwogCQlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7Ci0KLQkJaWYgKCFjb21taXR0ZWQpIHsKLQkJCWNvbW1pdHRlZCA9IDE7Ci0JCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCQlpZiAoIXRyYW5zKQotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCWdvdG8gYWdhaW47Ci0JCX0KKwkJcHJpbnRrKEtFUk5fRVJSICJlbm9zcGMsIGhhcyAlZCwgcmVzZXJ2ZWQgJWRcbiIsCisJCSAgICAgICBCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cywKKwkJICAgICAgIEJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9leHRlbnRzKTsKKwkJZHVtcF9zcGFjZV9pbmZvKG1ldGFfc2luZm8sIDAsIDApOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CisKKwlCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfZXh0ZW50cysrOworCWNoZWNrX2ZvcmNlX2RlbGFsbG9jKG1ldGFfc2luZm8pOworCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCWlmICghZmx1c2hlZCAmJiBmb3JjZV9kZWxhbGxvYykKKwkJZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdW5yZXNlcnZlIG51bV9pdGVtcyBudW1iZXIgb2YgaXRlbXMgd29ydGggb2YgbWV0YWRhdGEgc3BhY2UuICBUaGlzIG5lZWRzIHRvCisgKiBiZSBwYWlyZWQgd2l0aCBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlLgorICoKKyAqIE5PVEU6IGlmIHlvdSBoYXZlIHRoZSBvcHRpb24sIHJ1biB0aGlzIF9BRlRFUl8geW91IGRvIGEKKyAqIGJ0cmZzX2VuZF90cmFuc2FjdGlvbiwgc2luY2UgYnRyZnNfZW5kX3RyYW5zYWN0aW9uIHdpbGwgcnVuIGRlbGF5ZWQgcmVmCisgKiBvcHJhdGlvbnMgd2hpY2ggd2lsbCByZXN1bHQgaW4gbW9yZSB1c2VkIG1ldGFkYXRhLCBzbyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZQorICogY2FuIGRvIHRoYXQgd2l0aG91dCBpc3N1ZS4KKyAqLworaW50IGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcykKK3sKKwlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyA9IHJvb3QtPmZzX2luZm87CisJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKm1ldGFfc2luZm87CisJdTY0IG51bV9ieXRlczsKKwl1NjQgYWxsb2NfdGFyZ2V0OworCWJvb2wgYnVnID0gZmFsc2U7CisKKwkvKiBnZXQgdGhlIHNwYWNlIGluZm8gZm9yIHdoZXJlIHRoZSBtZXRhZGF0YSB3aWxsIGxpdmUgKi8KKwlhbGxvY190YXJnZXQgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCAwKTsKKwltZXRhX3NpbmZvID0gX19maW5kX3NwYWNlX2luZm8oaW5mbywgYWxsb2NfdGFyZ2V0KTsKKworCW51bV9ieXRlcyA9IGNhbGN1bGF0ZV9ieXRlc19uZWVkZWQocm9vdCwgbnVtX2l0ZW1zKTsKKworCXNwaW5fbG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisJaWYgKG1ldGFfc2luZm8tPmJ5dGVzX21heV91c2UgPCBudW1fYnl0ZXMpIHsKKwkJYnVnID0gdHJ1ZTsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSA9IDA7CisJfSBlbHNlIHsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSAtPSBudW1fYnl0ZXM7CisJfQorCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCUJVR19PTihidWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXNlcnZlIHNvbWUgbWV0YWRhdGEgc3BhY2UgZm9yIHVzZS4gIFdlJ2xsIGNhbGN1bGF0ZSB0aGUgd29yc3RlIGNhc2UgbnVtYmVyCisgKiBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBtb2RpZnkgbnVtX2l0ZW1zIG51bWJlciBvZiBpdGVtcy4gIElmIHdlCisgKiBoYXZlIHNwYWNlLCBmYW50YXN0aWMsIGlmIG5vdCwgeW91IGdldCAtRU5PU1BDLiAgUGxlYXNlIGNhbGwKKyAqIGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZSB3aGVuIHlvdSBhcmUgZG9uZSBmb3IgdGhlIF9TQU1FXyBudW1iZXIgb2YKKyAqIGl0ZW1zIHlvdSByZXNlcnZlZCwgc2luY2Ugd2hhdGV2ZXIgbWV0YWRhdGEgeW91IG5lZWRlZCBzaG91bGQgaGF2ZSBhbHJlYWR5CisgKiBiZWVuIGFsbG9jYXRlZC4KKyAqCisgKiBUaGlzIHdpbGwgY29tbWl0IHRoZSB0cmFuc2FjdGlvbiB0byBtYWtlIG1vcmUgc3BhY2UgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2gKKyAqIG1ldGFkYXRhIHNwYWNlLiAgVEhlIG9ubHkgdGltZSB3ZSBkb24ndCBkbyB0aGlzIGlzIGlmIHdlJ3JlIHJlc2VydmluZyBzcGFjZQorICogaW5zaWRlIG9mIGEgdHJhbnNhY3Rpb24sIHRoZW4gd2Ugd2lsbCBqdXN0IHJldHVybiAtRU5PU1BDIGFuZCBpdCBpcyB0aGUKKyAqIGNhbGxlcnMgcmVzcG9uc2liaWxpdHkgdG8gaGFuZGxlIGl0IHByb3Blcmx5LgorICovCitpbnQgYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcykKK3sKKwlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyA9IHJvb3QtPmZzX2luZm87CisJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKm1ldGFfc2luZm87CisJdTY0IG51bV9ieXRlczsKKwl1NjQgdXNlZDsKKwl1NjQgYWxsb2NfdGFyZ2V0OworCWludCByZXRyaWVzID0gMDsKKworCS8qIGdldCB0aGUgc3BhY2UgaW5mbyBmb3Igd2hlcmUgdGhlIG1ldGFkYXRhIHdpbGwgbGl2ZSAqLworCWFsbG9jX3RhcmdldCA9IGJ0cmZzX2dldF9hbGxvY19wcm9maWxlKHJvb3QsIDApOworCW1ldGFfc2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhpbmZvLCBhbGxvY190YXJnZXQpOworCisJbnVtX2J5dGVzID0gY2FsY3VsYXRlX2J5dGVzX25lZWRlZChyb290LCBudW1faXRlbXMpOworYWdhaW46CisJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCWlmICh1bmxpa2VseSghbWV0YV9zaW5mby0+Ynl0ZXNfcm9vdCkpCisJCW1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QsIDYpOworCisJaWYgKCFyZXRyaWVzKQorCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlICs9IG51bV9ieXRlczsKKworCXVzZWQgPSBtZXRhX3NpbmZvLT5ieXRlc191c2VkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKworCQltZXRhX3NpbmZvLT5ieXRlc19waW5uZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZWFkb25seSArCisJCW1ldGFfc2luZm8tPmJ5dGVzX3N1cGVyICsgbWV0YV9zaW5mby0+Ynl0ZXNfcm9vdCArCisJCW1ldGFfc2luZm8tPmJ5dGVzX21heV91c2UgKyBtZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYzsKKworCWlmICh1c2VkID4gbWV0YV9zaW5mby0+dG90YWxfYnl0ZXMpIHsKKwkJcmV0cmllcysrOworCQlpZiAocmV0cmllcyA9PSAxKSB7CisJCQlpZiAobWF5YmVfYWxsb2NhdGVfY2h1bmsocm9vdCwgbWV0YV9zaW5mbykpCisJCQkJZ290byBhZ2FpbjsKKwkJCXJldHJpZXMrKzsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKwkJfQorCisJCWlmIChyZXRyaWVzID09IDIpIHsKKwkJCWZsdXNoX2RlbGFsbG9jKHJvb3QsIG1ldGFfc2luZm8pOworCQkJZ290byBhZ2FpbjsKKwkJfQorCQlzcGluX2xvY2soJm1ldGFfc2luZm8tPmxvY2spOworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlIC09IG51bV9ieXRlczsKKwkJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOworCisJCWR1bXBfc3BhY2VfaW5mbyhtZXRhX3NpbmZvLCAwLCAwKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJY2hlY2tfZm9yY2VfZGVsYWxsb2MobWV0YV9zaW5mbyk7CiAJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yODg4LDcgKzMyNjgsNyBAQAogCQlzcGluX3VubG9jaygmZGF0YV9zaW5mby0+bG9jayk7CiAKIAkJLyogY29tbWl0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB0cnkgYWdhaW4gKi8KLQkJaWYgKCFjb21taXR0ZWQpIHsKKwkJaWYgKCFjb21taXR0ZWQgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpIHsKIAkJCWNvbW1pdHRlZCA9IDE7CiAJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJCQlpZiAoIXRyYW5zKQpAQCAtMjkxNiw3ICszMjk2LDcgQEAKIAlCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfYnl0ZXMgKz0gYnl0ZXM7CiAJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOwogCi0JcmV0dXJuIGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zMDE1LDE3ICszMzk1LDE1IEBACiAJQlVHX09OKCFzcGFjZV9pbmZvKTsKIAogCXNwaW5fbG9jaygmc3BhY2VfaW5mby0+bG9jayk7Ci0JaWYgKHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jKSB7CisJaWYgKHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jKQogCQlmb3JjZSA9IDE7Ci0JCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMDsKLQl9CiAJaWYgKHNwYWNlX2luZm8tPmZ1bGwpIHsKIAkJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCQlnb3RvIG91dDsKIAl9CiAKIAl0aHJlc2ggPSBzcGFjZV9pbmZvLT50b3RhbF9ieXRlcyAtIHNwYWNlX2luZm8tPmJ5dGVzX3JlYWRvbmx5OwotCXRocmVzaCA9IGRpdl9mYWN0b3IodGhyZXNoLCA2KTsKKwl0aHJlc2ggPSBkaXZfZmFjdG9yKHRocmVzaCwgOCk7CiAJaWYgKCFmb3JjZSAmJgogCSAgIChzcGFjZV9pbmZvLT5ieXRlc191c2VkICsgc3BhY2VfaW5mby0+Ynl0ZXNfcGlubmVkICsKIAkgICAgc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKyBhbGxvY19ieXRlcykgPCB0aHJlc2gpIHsKQEAgLTMwMzksNyArMzQxNyw3IEBACiAJICogd2Uga2VlcCBhIHJlYXNvbmFibGUgbnVtYmVyIG9mIG1ldGFkYXRhIGNodW5rcyBhbGxvY2F0ZWQgaW4gdGhlCiAJICogRlMgYXMgd2VsbC4KIAkgKi8KLQlpZiAoZmxhZ3MgJiBCVFJGU19CTE9DS19HUk9VUF9EQVRBKSB7CisJaWYgKGZsYWdzICYgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSAmJiBmc19pbmZvLT5tZXRhZGF0YV9yYXRpbykgewogCQlmc19pbmZvLT5kYXRhX2NodW5rX2FsbG9jYXRpb25zKys7CiAJCWlmICghKGZzX2luZm8tPmRhdGFfY2h1bmtfYWxsb2NhdGlvbnMgJQogCQkgICAgICBmc19pbmZvLT5tZXRhZGF0YV9yYXRpbykpCkBAIC0zMDQ3LDggKzM0MjUsMTEgQEAKIAl9CiAKIAlyZXQgPSBidHJmc19hbGxvY19jaHVuayh0cmFucywgZXh0ZW50X3Jvb3QsIGZsYWdzKTsKKwlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCWlmIChyZXQpCiAJCXNwYWNlX2luZm8tPmZ1bGwgPSAxOworCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMDsKKwlzcGluX3VubG9jaygmc3BhY2VfaW5mby0+bG9jayk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZleHRlbnRfcm9vdC0+ZnNfaW5mby0+Y2h1bmtfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0zMzA2LDYgKzM2ODcsMTQgQEAKIAlpZiAoaXNfZGF0YSkKIAkJZ290byBwaW5pdDsKIAorCS8qCisJICogZGlzY2FyZCBpcyBzbG9vb293LCBhbmQgc28gdHJpZ2dlcmluZyBkaXNjYXJkcyBvbgorCSAqIGluZGl2aWR1YWwgYnRyZWUgYmxvY2tzIGlzbid0IGEgZ29vZCBwbGFuLiAgSnVzdAorCSAqIHBpbiBldmVyeXRoaW5nIGluIGRpc2NhcmQgbW9kZS4KKwkgKi8KKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgRElTQ0FSRCkpCisJCWdvdG8gcGluaXQ7CisKIAlidWYgPSBidHJmc19maW5kX3RyZWVfYmxvY2socm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMpOwogCWlmICghYnVmKQogCQlnb3RvIHBpbml0OwpAQCAtMzcxMyw3ICs0MTAyLDcgQEAKIH0KIAogZW51bSBidHJmc19sb29wX3R5cGUgewotCUxPT1BfQ0FDSEVEX09OTFkgPSAwLAorCUxPT1BfRklORF9JREVBTCA9IDAsCiAJTE9PUF9DQUNISU5HX05PV0FJVCA9IDEsCiAJTE9PUF9DQUNISU5HX1dBSVQgPSAyLAogCUxPT1BfQUxMT0NfQ0hVTksgPSAzLApAQCAtMzc0MiwxMSArNDEzMSwxNSBAQAogCXN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAgPSBOVUxMOwogCWludCBlbXB0eV9jbHVzdGVyID0gMiAqIDEwMjQgKiAxMDI0OwogCWludCBhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKKwlpbnQgZG9uZV9jaHVua19hbGxvYyA9IDA7CiAJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNwYWNlX2luZm87CiAJaW50IGxhc3RfcHRyX2xvb3AgPSAwOwogCWludCBsb29wID0gMDsKIAlib29sIGZvdW5kX3VuY2FjaGVkX2JnID0gZmFsc2U7CiAJYm9vbCBmYWlsZWRfY2x1c3Rlcl9yZWZpbGwgPSBmYWxzZTsKKwlib29sIGZhaWxlZF9hbGxvYyA9IGZhbHNlOworCXU2NCBpZGVhbF9jYWNoZV9wZXJjZW50ID0gMDsKKwl1NjQgaWRlYWxfY2FjaGVfb2Zmc2V0ID0gMDsKIAogCVdBUk5fT04obnVtX2J5dGVzIDwgcm9vdC0+c2VjdG9yc2l6ZSk7CiAJYnRyZnNfc2V0X2tleV90eXBlKGlucywgQlRSRlNfRVhURU5UX0lURU1fS0VZKTsKQEAgLTM3ODIsMTQgKzQxNzUsMTkgQEAKIAkJZW1wdHlfY2x1c3RlciA9IDA7CiAKIAlpZiAoc2VhcmNoX3N0YXJ0ID09IGhpbnRfYnl0ZSkgeworaWRlYWxfY2FjaGU6CiAJCWJsb2NrX2dyb3VwID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKHJvb3QtPmZzX2luZm8sCiAJCQkJCQkgICAgICAgc2VhcmNoX3N0YXJ0KTsKIAkJLyoKIAkJICogd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGJsb2NrIGdyb3VwIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggb3VyCiAJCSAqIGFsbG9jYXRpb24gYml0cywgb3IgaWYgaXRzIG5vdCBjYWNoZWQuCisJCSAqCisJCSAqIEhvd2V2ZXIgaWYgd2UgYXJlIHJlLXNlYXJjaGluZyB3aXRoIGFuIGlkZWFsIGJsb2NrIGdyb3VwCisJCSAqIHBpY2tlZCBvdXQgdGhlbiB3ZSBkb24ndCBjYXJlIHRoYXQgdGhlIGJsb2NrIGdyb3VwIGlzIGNhY2hlZC4KIAkJICovCiAJCWlmIChibG9ja19ncm91cCAmJiBibG9ja19ncm91cF9iaXRzKGJsb2NrX2dyb3VwLCBkYXRhKSAmJgotCQkgICAgYmxvY2tfZ3JvdXBfY2FjaGVfZG9uZShibG9ja19ncm91cCkpIHsKKwkJICAgIChibG9ja19ncm91cC0+Y2FjaGVkICE9IEJUUkZTX0NBQ0hFX05PIHx8CisJCSAgICAgc2VhcmNoX3N0YXJ0ID09IGlkZWFsX2NhY2hlX29mZnNldCkpIHsKIAkJCWRvd25fcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7CiAJCQlpZiAobGlzdF9lbXB0eSgmYmxvY2tfZ3JvdXAtPmxpc3QpIHx8CiAJCQkgICAgYmxvY2tfZ3JvdXAtPnJvKSB7CkBAIC0zODAxLDEzICs0MTk5LDEzIEBACiAJCQkJICovCiAJCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAkJCQl1cF9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKIAkJCQlnb3RvIGhhdmVfYmxvY2tfZ3JvdXA7CisJCQl9CiAJCX0gZWxzZSBpZiAoYmxvY2tfZ3JvdXApIHsKIAkJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCX0KIAl9Ci0KIHNlYXJjaDoKIAlkb3duX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxvY2tfZ3JvdXAsICZzcGFjZV9pbmZvLT5ibG9ja19ncm91cHMsIGxpc3QpIHsKQEAgLTM4MTksMjggKzQyMTcsNDUgQEAKIAogaGF2ZV9ibG9ja19ncm91cDoKIAkJaWYgKHVubGlrZWx5KGJsb2NrX2dyb3VwLT5jYWNoZWQgPT0gQlRSRlNfQ0FDSEVfTk8pKSB7CisJCQl1NjQgZnJlZV9wZXJjZW50OworCisJCQlmcmVlX3BlcmNlbnQgPSBidHJmc19ibG9ja19ncm91cF91c2VkKCZibG9ja19ncm91cC0+aXRlbSk7CisJCQlmcmVlX3BlcmNlbnQgKj0gMTAwOworCQkJZnJlZV9wZXJjZW50ID0gZGl2NjRfdTY0KGZyZWVfcGVyY2VudCwKKwkJCQkJCSBibG9ja19ncm91cC0+a2V5Lm9mZnNldCk7CisJCQlmcmVlX3BlcmNlbnQgPSAxMDAgLSBmcmVlX3BlcmNlbnQ7CisJCQlpZiAoZnJlZV9wZXJjZW50ID4gaWRlYWxfY2FjaGVfcGVyY2VudCAmJgorCQkJICAgIGxpa2VseSghYmxvY2tfZ3JvdXAtPnJvKSkgeworCQkJCWlkZWFsX2NhY2hlX29mZnNldCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQ7CisJCQkJaWRlYWxfY2FjaGVfcGVyY2VudCA9IGZyZWVfcGVyY2VudDsKKwkJCX0KKwogCQkJLyoKLQkJCSAqIHdlIHdhbnQgdG8gc3RhcnQgY2FjaGluZyBrdGhyZWFkcywgYnV0IG5vdCB0b28gbWFueQotCQkJICogcmlnaHQgb2ZmIHRoZSBiYXQgc28gd2UgZG9uJ3Qgb3ZlcndoZWxtIHRoZSBzeXN0ZW0sCi0JCQkgKiBzbyBvbmx5IHN0YXJ0IHRoZW0gaWYgdGhlcmUgYXJlIGxlc3MgdGhhbiAyIGFuZCB3ZSdyZQotCQkJICogaW4gdGhlIGluaXRpYWwgYWxsb2NhdGlvbiBwaGFzZS4KKwkJCSAqIFdlIG9ubHkgd2FudCB0byBzdGFydCBrdGhyZWFkIGNhY2hpbmcgaWYgd2UgYXJlIGF0CisJCQkgKiB0aGUgcG9pbnQgd2hlcmUgd2Ugd2lsbCB3YWl0IGZvciBjYWNoaW5nIHRvIG1ha2UKKwkJCSAqIHByb2dyZXNzLCBvciBpZiBvdXIgaWRlYWwgc2VhcmNoIGlzIG92ZXIgYW5kIHdlJ3ZlCisJCQkgKiBmb3VuZCBzb21lYm9keSB0byBzdGFydCBjYWNoaW5nLgogCQkJICovCiAJCQlpZiAobG9vcCA+IExPT1BfQ0FDSElOR19OT1dBSVQgfHwKLQkJCSAgICBhdG9taWNfcmVhZCgmc3BhY2VfaW5mby0+Y2FjaGluZ190aHJlYWRzKSA8IDIpIHsKKwkJCSAgICAobG9vcCA+IExPT1BfRklORF9JREVBTCAmJgorCQkJICAgICBhdG9taWNfcmVhZCgmc3BhY2VfaW5mby0+Y2FjaGluZ190aHJlYWRzKSA8IDIpKSB7CiAJCQkJcmV0ID0gY2FjaGVfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCQkJCUJVR19PTihyZXQpOwogCQkJfQorCQkJZm91bmRfdW5jYWNoZWRfYmcgPSB0cnVlOworCisJCQkvKgorCQkJICogSWYgbG9vcCBpcyBzZXQgZm9yIGNhY2hlZCBvbmx5LCB0cnkgdGhlIG5leHQgYmxvY2sKKwkJCSAqIGdyb3VwLgorCQkJICovCisJCQlpZiAobG9vcCA9PSBMT09QX0ZJTkRfSURFQUwpCisJCQkJZ290byBsb29wOwogCQl9CiAKIAkJY2FjaGVkID0gYmxvY2tfZ3JvdXBfY2FjaGVfZG9uZShibG9ja19ncm91cCk7Ci0JCWlmICh1bmxpa2VseSghY2FjaGVkKSkgeworCQlpZiAodW5saWtlbHkoIWNhY2hlZCkpCiAJCQlmb3VuZF91bmNhY2hlZF9iZyA9IHRydWU7CiAKLQkJCS8qIGlmIHdlIG9ubHkgd2FudCBjYWNoZWQgYmdzLCBsb29wICovCi0JCQlpZiAobG9vcCA9PSBMT09QX0NBQ0hFRF9PTkxZKQotCQkJCWdvdG8gbG9vcDsKLQkJfQotCiAJCWlmICh1bmxpa2VseShibG9ja19ncm91cC0+cm8pKQogCQkJZ290byBsb29wOwogCkBAIC0zOTUxLDE0ICs0MzY2LDIzIEBACiAKIAkJb2Zmc2V0ID0gYnRyZnNfZmluZF9zcGFjZV9mb3JfYWxsb2MoYmxvY2tfZ3JvdXAsIHNlYXJjaF9zdGFydCwKIAkJCQkJCSAgICBudW1fYnl0ZXMsIGVtcHR5X3NpemUpOwotCQlpZiAoIW9mZnNldCAmJiAoY2FjaGVkIHx8ICghY2FjaGVkICYmCi0JCQkJCSAgIGxvb3AgPT0gTE9PUF9DQUNISU5HX05PV0FJVCkpKSB7Ci0JCQlnb3RvIGxvb3A7Ci0JCX0gZWxzZSBpZiAoIW9mZnNldCAmJiAoIWNhY2hlZCAmJgotCQkJCSAgICAgICBsb29wID4gTE9PUF9DQUNISU5HX05PV0FJVCkpIHsKKwkJLyoKKwkJICogSWYgd2UgZGlkbid0IGZpbmQgYSBjaHVuaywgYW5kIHdlIGhhdmVuJ3QgZmFpbGVkIG9uIHRoaXMKKwkJICogYmxvY2sgZ3JvdXAgYmVmb3JlLCBhbmQgdGhpcyBibG9jayBncm91cCBpcyBpbiB0aGUgbWlkZGxlIG9mCisJCSAqIGNhY2hpbmcgYW5kIHdlIGFyZSBvayB3aXRoIHdhaXRpbmcsIHRoZW4gZ28gYWhlYWQgYW5kIHdhaXQKKwkJICogZm9yIHByb2dyZXNzIHRvIGJlIG1hZGUsIGFuZCBzZXQgZmFpbGVkX2FsbG9jIHRvIHRydWUuCisJCSAqCisJCSAqIElmIGZhaWxlZF9hbGxvYyBpcyB0cnVlIHRoZW4gd2UndmUgYWxyZWFkeSB3YWl0ZWQgb24gdGhpcworCQkgKiBibG9jayBncm91cCBvbmNlIGFuZCBzaG91bGQgbW92ZSBvbiB0byB0aGUgbmV4dCBibG9jayBncm91cC4KKwkJICovCisJCWlmICghb2Zmc2V0ICYmICFmYWlsZWRfYWxsb2MgJiYgIWNhY2hlZCAmJgorCQkgICAgbG9vcCA+IExPT1BfQ0FDSElOR19OT1dBSVQpIHsKIAkJCXdhaXRfYmxvY2tfZ3JvdXBfY2FjaGVfcHJvZ3Jlc3MoYmxvY2tfZ3JvdXAsCi0JCQkJCW51bV9ieXRlcyArIGVtcHR5X3NpemUpOworCQkJCQkJbnVtX2J5dGVzICsgZW1wdHlfc2l6ZSk7CisJCQlmYWlsZWRfYWxsb2MgPSB0cnVlOwogCQkJZ290byBoYXZlX2Jsb2NrX2dyb3VwOworCQl9IGVsc2UgaWYgKCFvZmZzZXQpIHsKKwkJCWdvdG8gbG9vcDsKIAkJfQogY2hlY2tzOgogCQlzZWFyY2hfc3RhcnQgPSBzdHJpcGVfYWxpZ24ocm9vdCwgb2Zmc2V0KTsKQEAgLTQwMDYsMTMgKzQ0MzAsMTYgQEAKIAkJYnJlYWs7CiBsb29wOgogCQlmYWlsZWRfY2x1c3Rlcl9yZWZpbGwgPSBmYWxzZTsKKwkJZmFpbGVkX2FsbG9jID0gZmFsc2U7CiAJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJfQogCXVwX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwogCi0JLyogTE9PUF9DQUNIRURfT05MWSwgb25seSBzZWFyY2ggZnVsbHkgY2FjaGVkIGJsb2NrIGdyb3VwcwotCSAqIExPT1BfQ0FDSElOR19OT1dBSVQsIHNlYXJjaCBwYXJ0aWFsbHkgY2FjaGVkIGJsb2NrIGdyb3VwcywgYnV0Ci0JICoJCQlkb250IHdhaXQgZm9SIHRoZW0gdG8gZmluaXNoIGNhY2hpbmcKKwkvKiBMT09QX0ZJTkRfSURFQUwsIG9ubHkgc2VhcmNoIGNhY2hpbmcvY2FjaGVkIGJnJ3MsIGFuZCBkb24ndCB3YWl0IGZvcgorCSAqCQkJZm9yIHRoZW0gdG8gbWFrZSBjYWNoaW5nIHByb2dyZXNzLiAgQWxzbworCSAqCQkJZGV0ZXJtaW5lIHRoZSBiZXN0IHBvc3NpYmxlIGJnIHRvIGNhY2hlCisJICogTE9PUF9DQUNISU5HX05PV0FJVCwgc2VhcmNoIHBhcnRpYWxseSBjYWNoZWQgYmxvY2sgZ3JvdXBzLCBraWNraW5nCisJICoJCQljYWNoaW5nIGt0aHJlYWRzIGFzIHdlIG1vdmUgYWxvbmcKIAkgKiBMT09QX0NBQ0hJTkdfV0FJVCwgc2VhcmNoIGV2ZXJ5dGhpbmcsIGFuZCB3YWl0IGlmIG91ciBiZyBpcyBjYWNoaW5nCiAJICogTE9PUF9BTExPQ19DSFVOSywgZm9yY2UgYSBjaHVuayBhbGxvY2F0aW9uIGFuZCB0cnkgYWdhaW4KIAkgKiBMT09QX05PX0VNUFRZX1NJWkUsIHNldCBlbXB0eV9zaXplIGFuZCBlbXB0eV9jbHVzdGVyIHRvIDAgYW5kIHRyeQpAQCAtNDAyMSwxMiArNDQ0OCw0NyBAQAogCWlmICghaW5zLT5vYmplY3RpZCAmJiBsb29wIDwgTE9PUF9OT19FTVBUWV9TSVpFICYmCiAJICAgIChmb3VuZF91bmNhY2hlZF9iZyB8fCBlbXB0eV9zaXplIHx8IGVtcHR5X2NsdXN0ZXIgfHwKIAkgICAgIGFsbG93ZWRfY2h1bmtfYWxsb2MpKSB7Ci0JCWlmIChmb3VuZF91bmNhY2hlZF9iZykgeworCQlpZiAobG9vcCA9PSBMT09QX0ZJTkRfSURFQUwgJiYgZm91bmRfdW5jYWNoZWRfYmcpIHsKIAkJCWZvdW5kX3VuY2FjaGVkX2JnID0gZmFsc2U7Ci0JCQlpZiAobG9vcCA8IExPT1BfQ0FDSElOR19XQUlUKSB7Ci0JCQkJbG9vcCsrOworCQkJbG9vcCsrOworCQkJaWYgKCFpZGVhbF9jYWNoZV9wZXJjZW50ICYmCisJCQkgICAgYXRvbWljX3JlYWQoJnNwYWNlX2luZm8tPmNhY2hpbmdfdGhyZWFkcykpCiAJCQkJZ290byBzZWFyY2g7Ci0JCQl9CisKKwkJCS8qCisJCQkgKiAxIG9mIHRoZSBmb2xsb3dpbmcgMiB0aGluZ3MgaGF2ZSBoYXBwZW5lZCBzbyBmYXIKKwkJCSAqCisJCQkgKiAxKSBXZSBmb3VuZCBhbiBpZGVhbCBibG9jayBncm91cCBmb3IgY2FjaGluZyB0aGF0CisJCQkgKiBpcyBtb3N0bHkgZnVsbCBhbmQgd2lsbCBjYWNoZSBxdWlja2x5LCBzbyB3ZSBtaWdodAorCQkJICogYXMgd2VsbCB3YWl0IGZvciBpdC4KKwkJCSAqCisJCQkgKiAyKSBXZSBzZWFyY2hlZCBmb3IgY2FjaGVkIG9ubHkgYW5kIHdlIGRpZG4ndCBmaW5kCisJCQkgKiBhbnl0aGluZywgYW5kIHdlIGRpZG4ndCBzdGFydCBhbnkgY2FjaGluZyBrdGhyZWFkcworCQkJICogZWl0aGVyLCBzbyBjaGFuY2VzIGFyZSB3ZSB3aWxsIGxvb3AgdGhyb3VnaCBhbmQKKwkJCSAqIHN0YXJ0IGEgY291cGxlIGNhY2hpbmcga3RocmVhZHMsIGFuZCB0aGVuIGNvbWUgYmFjaworCQkJICogYXJvdW5kIGFuZCBqdXN0IHdhaXQgZm9yIHRoZW0uICBUaGlzIHdpbGwgYmUgc2xvd2VyCisJCQkgKiBiZWNhdXNlIHdlIHdpbGwgaGF2ZSAyIGNhY2hpbmcga3RocmVhZHMgcmVhZGluZyBhdAorCQkJICogdGhlIHNhbWUgdGltZSB3aGVuIHdlIGNvdWxkIGhhdmUganVzdCBzdGFydGVkIG9uZQorCQkJICogYW5kIHdhaXRlZCBmb3IgaXQgdG8gZ2V0IGZhciBlbm91Z2ggdG8gZ2l2ZSB1cyBhbgorCQkJICogYWxsb2NhdGlvbiwgc28gZ28gYWhlYWQgYW5kIGdvIHRvIHRoZSB3YWl0IGNhY2hpbmcKKwkJCSAqIGxvb3AuCisJCQkgKi8KKwkJCWxvb3AgPSBMT09QX0NBQ0hJTkdfV0FJVDsKKwkJCXNlYXJjaF9zdGFydCA9IGlkZWFsX2NhY2hlX29mZnNldDsKKwkJCWlkZWFsX2NhY2hlX3BlcmNlbnQgPSAwOworCQkJZ290byBpZGVhbF9jYWNoZTsKKwkJfSBlbHNlIGlmIChsb29wID09IExPT1BfRklORF9JREVBTCkgeworCQkJLyoKKwkJCSAqIERpZG4ndCBmaW5kIGEgdW5jYWNoZWQgYmcsIHdhaXQgb24gYW55dGhpbmcgd2UgZmluZAorCQkJICogbmV4dC4KKwkJCSAqLworCQkJbG9vcCA9IExPT1BfQ0FDSElOR19XQUlUOworCQkJZ290byBzZWFyY2g7CisJCX0KKworCQlpZiAobG9vcCA8IExPT1BfQ0FDSElOR19XQUlUKSB7CisJCQlsb29wKys7CisJCQlnb3RvIHNlYXJjaDsKIAkJfQogCiAJCWlmIChsb29wID09IExPT1BfQUxMT0NfQ0hVTkspIHsKQEAgLTQwMzgsNyArNDUwMCw4IEBACiAJCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgbnVtX2J5dGVzICsKIAkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGRhdGEsIDEpOwogCQkJYWxsb3dlZF9jaHVua19hbGxvYyA9IDA7Ci0JCX0gZWxzZSB7CisJCQlkb25lX2NodW5rX2FsbG9jID0gMTsKKwkJfSBlbHNlIGlmICghZG9uZV9jaHVua19hbGxvYykgewogCQkJc3BhY2VfaW5mby0+Zm9yY2VfYWxsb2MgPSAxOwogCQl9CiAKQEAgLTQwNjMsMjEgKzQ1MjYsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX3NwYWNlX2luZm8oc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8sIHU2NCBieXRlcykKK3N0YXRpYyB2b2lkIGR1bXBfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbywgdTY0IGJ5dGVzLAorCQkJICAgIGludCBkdW1wX2Jsb2NrX2dyb3VwcykKIHsKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlOwogCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIAlwcmludGsoS0VSTl9JTkZPICJzcGFjZV9pbmZvIGhhcyAlbGx1IGZyZWUsIGlzICVzZnVsbFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoaW5mby0+dG90YWxfYnl0ZXMgLSBpbmZvLT5ieXRlc191c2VkIC0KLQkJCQkgICAgaW5mby0+Ynl0ZXNfcGlubmVkIC0gaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQpLAorCQkJCSAgICBpbmZvLT5ieXRlc19waW5uZWQgLSBpbmZvLT5ieXRlc19yZXNlcnZlZCAtCisJCQkJICAgIGluZm8tPmJ5dGVzX3N1cGVyKSwKIAkgICAgICAgKGluZm8tPmZ1bGwpID8gIiIgOiAibm90ICIpOwogCXByaW50ayhLRVJOX0lORk8gInNwYWNlX2luZm8gdG90YWw9JWxsdSwgcGlubmVkPSVsbHUsIGRlbGFsbG9jPSVsbHUsIgotCSAgICAgICAiIG1heV91c2U9JWxsdSwgdXNlZD0lbGx1XG4iLAorCSAgICAgICAiIG1heV91c2U9JWxsdSwgdXNlZD0lbGx1LCByb290PSVsbHUsIHN1cGVyPSVsbHUsIHJlc2VydmVkPSVsbHUiCisJICAgICAgICJcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+dG90YWxfYnl0ZXMsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfcGlubmVkLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX2RlbGFsbG9jLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX21heV91c2UsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfdXNlZCk7CisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfdXNlZCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmZvLT5ieXRlc19yb290LAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3N1cGVyLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3Jlc2VydmVkKTsKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAoIWR1bXBfYmxvY2tfZ3JvdXBzKQorCQlyZXR1cm47CiAKIAlkb3duX3JlYWQoJmluZm8tPmdyb3Vwc19zZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGUsICZpbmZvLT5ibG9ja19ncm91cHMsIGxpc3QpIHsKQEAgLTQxNDUsNyArNDYxOSw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgYWxsb2NhdGlvbiBmYWlsZWQgZmxhZ3MgJWxsdSwgIgogCQkgICAgICAgIndhbnRlZCAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWRhdGEsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW51bV9ieXRlcyk7Ci0JCWR1bXBfc3BhY2VfaW5mbyhzaW5mbywgbnVtX2J5dGVzKTsKKwkJZHVtcF9zcGFjZV9pbmZvKHNpbmZvLCBudW1fYnl0ZXMsIDEpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC00NTA2LDYgKzQ5ODAsNyBAQAogCXU2NCBieXRlbnI7CiAJdTY0IGdlbmVyYXRpb247CiAJdTY0IHJlZnM7CisJdTY0IGZsYWdzOwogCXU2NCBsYXN0ID0gMDsKIAl1MzIgbnJpdGVtczsKIAl1MzIgYmxvY2tzaXplOwpAQCAtNDU0MywxNSArNTAxOCwxOSBAQAogCQkgICAgZ2VuZXJhdGlvbiA8PSByb290LT5yb290X2tleS5vZmZzZXQpCiAJCQljb250aW51ZTsKIAorCQkvKiBXZSBkb24ndCBsb2NrIHRoZSB0cmVlIGJsb2NrLCBpdCdzIE9LIHRvIGJlIHJhY3kgaGVyZSAqLworCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAorCQkJCQkgICAgICAgJnJlZnMsICZmbGFncyk7CisJCUJVR19PTihyZXQpOworCQlCVUdfT04ocmVmcyA9PSAwKTsKKwogCQlpZiAod2MtPnN0YWdlID09IERST1BfUkVGRVJFTkNFKSB7Ci0JCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsCi0JCQkJCQlieXRlbnIsIGJsb2Nrc2l6ZSwKLQkJCQkJCSZyZWZzLCBOVUxMKTsKLQkJCUJVR19PTihyZXQpOwotCQkJQlVHX09OKHJlZnMgPT0gMCk7CiAJCQlpZiAocmVmcyA9PSAxKQogCQkJCWdvdG8gcmVhZGE7CiAKKwkJCWlmICh3Yy0+bGV2ZWwgPT0gMSAmJgorCQkJICAgIChmbGFncyAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSkKKwkJCQljb250aW51ZTsKIAkJCWlmICghd2MtPnVwZGF0ZV9yZWYgfHwKIAkJCSAgICBnZW5lcmF0aW9uIDw9IHJvb3QtPnJvb3Rfa2V5Lm9mZnNldCkKIAkJCQljb250aW51ZTsKQEAgLTQ1NjAsNiArNTAzOSwxMCBAQAogCQkJCQkJICAmd2MtPnVwZGF0ZV9wcm9ncmVzcyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICh3Yy0+bGV2ZWwgPT0gMSAmJgorCQkJICAgIChmbGFncyAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSkKKwkJCQljb250aW51ZTsKIAkJfQogcmVhZGE6CiAJCXJldCA9IHJlYWRhaGVhZF90cmVlX2Jsb2NrKHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLApAQCAtNDU4Myw3ICs1MDY2LDcgQEAKIHN0YXRpYyBub2lubGluZSBpbnQgd2Fsa19kb3duX3Byb2Moc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCQkJICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MpCisJCQkJICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MsIGludCBsb29rdXBfaW5mbykKIHsKIAlpbnQgbGV2ZWwgPSB3Yy0+bGV2ZWw7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmViID0gcGF0aC0+bm9kZXNbbGV2ZWxdOwpAQCAtNDU5OCw4ICs1MDgxLDkgQEAKIAkgKiB3aGVuIHJlZmVyZW5jZSBjb3VudCBvZiB0cmVlIGJsb2NrIGlzIDEsIGl0IHdvbid0IGluY3JlYXNlCiAJICogYWdhaW4uIG9uY2UgZnVsbCBiYWNrcmVmIGZsYWcgaXMgc2V0LCB3ZSBuZXZlciBjbGVhciBpdC4KIAkgKi8KLQlpZiAoKHdjLT5zdGFnZSA9PSBEUk9QX1JFRkVSRU5DRSAmJiB3Yy0+cmVmc1tsZXZlbF0gIT0gMSkgfHwKLQkgICAgKHdjLT5zdGFnZSA9PSBVUERBVEVfQkFDS1JFRiAmJiAhKHdjLT5mbGFnc1tsZXZlbF0gJiBmbGFnKSkpIHsKKwlpZiAobG9va3VwX2luZm8gJiYKKwkgICAgKCh3Yy0+c3RhZ2UgPT0gRFJPUF9SRUZFUkVOQ0UgJiYgd2MtPnJlZnNbbGV2ZWxdICE9IDEpIHx8CisJICAgICAod2MtPnN0YWdlID09IFVQREFURV9CQUNLUkVGICYmICEod2MtPmZsYWdzW2xldmVsXSAmIGZsYWcpKSkpIHsKIAkJQlVHX09OKCFwYXRoLT5sb2Nrc1tsZXZlbF0pOwogCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsCiAJCQkJCSAgICAgICBlYi0+c3RhcnQsIGViLT5sZW4sCkBAIC00NjYwLDcgKzUxNDQsNyBAQAogc3RhdGljIG5vaW5saW5lIGludCBkb193YWxrX2Rvd24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKLQkJCQkgc3RydWN0IHdhbGtfY29udHJvbCAqd2MpCisJCQkJIHN0cnVjdCB3YWxrX2NvbnRyb2wgKndjLCBpbnQgKmxvb2t1cF9pbmZvKQogewogCXU2NCBieXRlbnI7CiAJdTY0IGdlbmVyYXRpb247CkBAIC00NjgwLDggKzUxNjQsMTAgQEAKIAkgKiBmb3IgdGhlIHN1YnRyZWUKIAkgKi8KIAlpZiAod2MtPnN0YWdlID09IFVQREFURV9CQUNLUkVGICYmCi0JICAgIGdlbmVyYXRpb24gPD0gcm9vdC0+cm9vdF9rZXkub2Zmc2V0KQorCSAgICBnZW5lcmF0aW9uIDw9IHJvb3QtPnJvb3Rfa2V5Lm9mZnNldCkgeworCQkqbG9va3VwX2luZm8gPSAxOwogCQlyZXR1cm4gMTsKKwl9CiAKIAlieXRlbnIgPSBidHJmc19ub2RlX2Jsb2NrcHRyKHBhdGgtPm5vZGVzW2xldmVsXSwgcGF0aC0+c2xvdHNbbGV2ZWxdKTsKIAlibG9ja3NpemUgPSBidHJmc19sZXZlbF9zaXplKHJvb3QsIGxldmVsIC0gMSk7CkBAIC00Njk0LDE0ICs1MTgwLDE5IEBACiAJYnRyZnNfdHJlZV9sb2NrKG5leHQpOwogCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKG5leHQpOwogCi0JaWYgKHdjLT5zdGFnZSA9PSBEUk9QX1JFRkVSRU5DRSkgewotCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAotCQkJCQkgICAgICAgJndjLT5yZWZzW2xldmVsIC0gMV0sCi0JCQkJCSAgICAgICAmd2MtPmZsYWdzW2xldmVsIC0gMV0pOwotCQlCVUdfT04ocmV0KTsKLQkJQlVHX09OKHdjLT5yZWZzW2xldmVsIC0gMV0gPT0gMCk7CisJcmV0ID0gYnRyZnNfbG9va3VwX2V4dGVudF9pbmZvKHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKKwkJCQkgICAgICAgJndjLT5yZWZzW2xldmVsIC0gMV0sCisJCQkJICAgICAgICZ3Yy0+ZmxhZ3NbbGV2ZWwgLSAxXSk7CisJQlVHX09OKHJldCk7CisJQlVHX09OKHdjLT5yZWZzW2xldmVsIC0gMV0gPT0gMCk7CisJKmxvb2t1cF9pbmZvID0gMDsKIAorCWlmICh3Yy0+c3RhZ2UgPT0gRFJPUF9SRUZFUkVOQ0UpIHsKIAkJaWYgKHdjLT5yZWZzW2xldmVsIC0gMV0gPiAxKSB7CisJCQlpZiAobGV2ZWwgPT0gMSAmJgorCQkJICAgICh3Yy0+ZmxhZ3NbMF0gJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikpCisJCQkJZ290byBza2lwOworCiAJCQlpZiAoIXdjLT51cGRhdGVfcmVmIHx8CiAJCQkgICAgZ2VuZXJhdGlvbiA8PSByb290LT5yb290X2tleS5vZmZzZXQpCiAJCQkJZ290byBza2lwOwpAQCAtNDcxNSwxMiArNTIwNiwxNyBAQAogCQkJd2MtPnN0YWdlID0gVVBEQVRFX0JBQ0tSRUY7CiAJCQl3Yy0+c2hhcmVkX2xldmVsID0gbGV2ZWwgLSAxOwogCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxldmVsID09IDEgJiYKKwkJICAgICh3Yy0+ZmxhZ3NbMF0gJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikpCisJCQlnb3RvIHNraXA7CiAJfQogCiAJaWYgKCFidHJmc19idWZmZXJfdXB0b2RhdGUobmV4dCwgZ2VuZXJhdGlvbikpIHsKIAkJYnRyZnNfdHJlZV91bmxvY2sobmV4dCk7CiAJCWZyZWVfZXh0ZW50X2J1ZmZlcihuZXh0KTsKIAkJbmV4dCA9IE5VTEw7CisJCSpsb29rdXBfaW5mbyA9IDE7CiAJfQogCiAJaWYgKCFuZXh0KSB7CkBAIC00NzQzLDIxICs1MjM5LDIyIEBACiBza2lwOgogCXdjLT5yZWZzW2xldmVsIC0gMV0gPSAwOwogCXdjLT5mbGFnc1tsZXZlbCAtIDFdID0gMDsKKwlpZiAod2MtPnN0YWdlID09IERST1BfUkVGRVJFTkNFKSB7CisJCWlmICh3Yy0+ZmxhZ3NbbGV2ZWxdICYgQlRSRlNfQkxPQ0tfRkxBR19GVUxMX0JBQ0tSRUYpIHsKKwkJCXBhcmVudCA9IHBhdGgtPm5vZGVzW2xldmVsXS0+c3RhcnQ7CisJCX0gZWxzZSB7CisJCQlCVUdfT04ocm9vdC0+cm9vdF9rZXkub2JqZWN0aWQgIT0KKwkJCSAgICAgICBidHJmc19oZWFkZXJfb3duZXIocGF0aC0+bm9kZXNbbGV2ZWxdKSk7CisJCQlwYXJlbnQgPSAwOworCQl9CiAKLQlpZiAod2MtPmZsYWdzW2xldmVsXSAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSB7Ci0JCXBhcmVudCA9IHBhdGgtPm5vZGVzW2xldmVsXS0+c3RhcnQ7Ci0JfSBlbHNlIHsKLQkJQlVHX09OKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkICE9Ci0JCSAgICAgICBidHJmc19oZWFkZXJfb3duZXIocGF0aC0+bm9kZXNbbGV2ZWxdKSk7Ci0JCXBhcmVudCA9IDA7CisJCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwgcGFyZW50LAorCQkJCQlyb290LT5yb290X2tleS5vYmplY3RpZCwgbGV2ZWwgLSAxLCAwKTsKKwkJQlVHX09OKHJldCk7CiAJfQotCi0JcmV0ID0gYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLCBwYXJlbnQsCi0JCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsIC0gMSwgMCk7Ci0JQlVHX09OKHJldCk7Ci0KIAlidHJmc190cmVlX3VubG9jayhuZXh0KTsKIAlmcmVlX2V4dGVudF9idWZmZXIobmV4dCk7CisJKmxvb2t1cF9pbmZvID0gMTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDg3MSw2ICs1MzY4LDcgQEAKIAkJCQkgICBzdHJ1Y3Qgd2Fsa19jb250cm9sICp3YykKIHsKIAlpbnQgbGV2ZWwgPSB3Yy0+bGV2ZWw7CisJaW50IGxvb2t1cF9pbmZvID0gMTsKIAlpbnQgcmV0OwogCiAJd2hpbGUgKGxldmVsID49IDApIHsKQEAgLTQ4NzgsMTQgKzUzNzYsMTQgQEAKIAkJICAgIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHBhdGgtPm5vZGVzW2xldmVsXSkpCiAJCQlicmVhazsKIAotCQlyZXQgPSB3YWxrX2Rvd25fcHJvYyh0cmFucywgcm9vdCwgcGF0aCwgd2MpOworCQlyZXQgPSB3YWxrX2Rvd25fcHJvYyh0cmFucywgcm9vdCwgcGF0aCwgd2MsIGxvb2t1cF9pbmZvKTsKIAkJaWYgKHJldCA+IDApCiAJCQlicmVhazsKIAogCQlpZiAobGV2ZWwgPT0gMCkKIAkJCWJyZWFrOwogCi0JCXJldCA9IGRvX3dhbGtfZG93bih0cmFucywgcm9vdCwgcGF0aCwgd2MpOworCQlyZXQgPSBkb193YWxrX2Rvd24odHJhbnMsIHJvb3QsIHBhdGgsIHdjLCAmbG9va3VwX2luZm8pOwogCQlpZiAocmV0ID4gMCkgewogCQkJcGF0aC0+c2xvdHNbbGV2ZWxdKys7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggMGNiODhmOC4uOTY1NzdlOCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTI4MCw2ICsyODAsMTQgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgbWVyZ2VfY2Ioc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpuZXcsCisJCSAgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3RoZXIpCit7CisJaWYgKHRyZWUtPm9wcyAmJiB0cmVlLT5vcHMtPm1lcmdlX2V4dGVudF9ob29rKQorCQl0cmVlLT5vcHMtPm1lcmdlX2V4dGVudF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsIG5ldywKKwkJCQkJICAgICBvdGhlcik7Cit9CisKIC8qCiAgKiB1dGlsaXR5IGZ1bmN0aW9uIHRvIGxvb2sgZm9yIG1lcmdlIGNhbmRpZGF0ZXMgaW5zaWRlIGEgZ2l2ZW4gcmFuZ2UuCiAgKiBBbnkgZXh0ZW50cyB3aXRoIG1hdGNoaW5nIHN0YXRlIGFyZSBtZXJnZWQgdG9nZXRoZXIgaW50byBhIHNpbmdsZQpAQCAtMzAzLDYgKzMxMSw3IEBACiAJCW90aGVyID0gcmJfZW50cnkob3RoZXJfbm9kZSwgc3RydWN0IGV4dGVudF9zdGF0ZSwgcmJfbm9kZSk7CiAJCWlmIChvdGhlci0+ZW5kID09IHN0YXRlLT5zdGFydCAtIDEgJiYKIAkJICAgIG90aGVyLT5zdGF0ZSA9PSBzdGF0ZS0+c3RhdGUpIHsKKwkJCW1lcmdlX2NiKHRyZWUsIHN0YXRlLCBvdGhlcik7CiAJCQlzdGF0ZS0+c3RhcnQgPSBvdGhlci0+c3RhcnQ7CiAJCQlvdGhlci0+dHJlZSA9IE5VTEw7CiAJCQlyYl9lcmFzZSgmb3RoZXItPnJiX25vZGUsICZ0cmVlLT5zdGF0ZSk7CkBAIC0zMTQsMzMgKzMyMywzNyBAQAogCQlvdGhlciA9IHJiX2VudHJ5KG90aGVyX25vZGUsIHN0cnVjdCBleHRlbnRfc3RhdGUsIHJiX25vZGUpOwogCQlpZiAob3RoZXItPnN0YXJ0ID09IHN0YXRlLT5lbmQgKyAxICYmCiAJCSAgICBvdGhlci0+c3RhdGUgPT0gc3RhdGUtPnN0YXRlKSB7CisJCQltZXJnZV9jYih0cmVlLCBzdGF0ZSwgb3RoZXIpOwogCQkJb3RoZXItPnN0YXJ0ID0gc3RhdGUtPnN0YXJ0OwogCQkJc3RhdGUtPnRyZWUgPSBOVUxMOwogCQkJcmJfZXJhc2UoJnN0YXRlLT5yYl9ub2RlLCAmdHJlZS0+c3RhdGUpOwogCQkJZnJlZV9leHRlbnRfc3RhdGUoc3RhdGUpOworCQkJc3RhdGUgPSBOVUxMOwogCQl9CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zdGF0ZV9jYihzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCitzdGF0aWMgaW50IHNldF9zdGF0ZV9jYihzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCQkgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsCiAJCQkgdW5zaWduZWQgbG9uZyBiaXRzKQogewogCWlmICh0cmVlLT5vcHMgJiYgdHJlZS0+b3BzLT5zZXRfYml0X2hvb2spIHsKLQkJdHJlZS0+b3BzLT5zZXRfYml0X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwgc3RhdGUtPnN0YXJ0LAotCQkJCQlzdGF0ZS0+ZW5kLCBzdGF0ZS0+c3RhdGUsIGJpdHMpOworCQlyZXR1cm4gdHJlZS0+b3BzLT5zZXRfYml0X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwKKwkJCQkJICAgICAgIHN0YXRlLT5zdGFydCwgc3RhdGUtPmVuZCwKKwkJCQkJICAgICAgIHN0YXRlLT5zdGF0ZSwgYml0cyk7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyX3N0YXRlX2NiKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAogCQkJICAgdW5zaWduZWQgbG9uZyBiaXRzKQogewotCWlmICh0cmVlLT5vcHMgJiYgdHJlZS0+b3BzLT5jbGVhcl9iaXRfaG9vaykgewotCQl0cmVlLT5vcHMtPmNsZWFyX2JpdF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsIHN0YXRlLT5zdGFydCwKLQkJCQkJICBzdGF0ZS0+ZW5kLCBzdGF0ZS0+c3RhdGUsIGJpdHMpOwotCX0KKwlpZiAodHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+Y2xlYXJfYml0X2hvb2spCisJCXRyZWUtPm9wcy0+Y2xlYXJfYml0X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwgc3RhdGUsIGJpdHMpOwogfQogCiAvKgpAQCAtMzU4LDYgKzM3MSw3IEBACiAJCQlpbnQgYml0cykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlpbnQgcmV0OwogCiAJaWYgKGVuZCA8IHN0YXJ0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgZW5kIDwgc3RhcnQgJWxsdSAlbGx1XG4iLApAQCAtMzY1LDExICszNzksMTQgQEAKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnQpOwogCQlXQVJOX09OKDEpOwogCX0KLQlpZiAoYml0cyAmIEVYVEVOVF9ESVJUWSkKLQkJdHJlZS0+ZGlydHlfYnl0ZXMgKz0gZW5kIC0gc3RhcnQgKyAxOwogCXN0YXRlLT5zdGFydCA9IHN0YXJ0OwogCXN0YXRlLT5lbmQgPSBlbmQ7Ci0Jc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwlyZXQgPSBzZXRfc3RhdGVfY2IodHJlZSwgc3RhdGUsIGJpdHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoYml0cyAmIEVYVEVOVF9ESVJUWSkKKwkJdHJlZS0+ZGlydHlfYnl0ZXMgKz0gZW5kIC0gc3RhcnQgKyAxOwogCXN0YXRlLT5zdGF0ZSB8PSBiaXRzOwogCW5vZGUgPSB0cmVlX2luc2VydCgmdHJlZS0+c3RhdGUsIGVuZCwgJnN0YXRlLT5yYl9ub2RlKTsKIAlpZiAobm9kZSkgewpAQCAtMzg3LDYgKzQwNCwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNwbGl0X2NiKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3JpZywKKwkJICAgICB1NjQgc3BsaXQpCit7CisJaWYgKHRyZWUtPm9wcyAmJiB0cmVlLT5vcHMtPnNwbGl0X2V4dGVudF9ob29rKQorCQlyZXR1cm4gdHJlZS0+b3BzLT5zcGxpdF9leHRlbnRfaG9vayh0cmVlLT5tYXBwaW5nLT5ob3N0LAorCQkJCQkJICAgIG9yaWcsIHNwbGl0KTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIHNwbGl0IGEgZ2l2ZW4gZXh0ZW50IHN0YXRlIHN0cnVjdCBpbiB0d28sIGluc2VydGluZyB0aGUgcHJlYWxsb2NhdGVkCiAgKiBzdHJ1Y3QgJ3ByZWFsbG9jJyBhcyB0aGUgbmV3bHkgY3JlYXRlZCBzZWNvbmQgaGFsZi4gICdzcGxpdCcgaW5kaWNhdGVzIGFuCkBAIC00MDUsNiArNDMxLDkgQEAKIAkJICAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnByZWFsbG9jLCB1NjQgc3BsaXQpCiB7CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwlzcGxpdF9jYih0cmVlLCBvcmlnLCBzcGxpdCk7CisKIAlwcmVhbGxvYy0+c3RhcnQgPSBvcmlnLT5zdGFydDsKIAlwcmVhbGxvYy0+ZW5kID0gc3BsaXQgLSAxOwogCXByZWFsbG9jLT5zdGF0ZSA9IG9yaWctPnN0YXRlOwpAQCAtNDMxLDcgKzQ2MCw4IEBACiAJCQkgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsIGludCBiaXRzLCBpbnQgd2FrZSwKIAkJCSAgICBpbnQgZGVsZXRlKQogewotCWludCByZXQgPSBzdGF0ZS0+c3RhdGUgJiBiaXRzOworCWludCBiaXRzX3RvX2NsZWFyID0gYml0cyAmIH5FWFRFTlRfRE9fQUNDT1VOVElORzsKKwlpbnQgcmV0ID0gc3RhdGUtPnN0YXRlICYgYml0c190b19jbGVhcjsKIAogCWlmICgoYml0cyAmIEVYVEVOVF9ESVJUWSkgJiYgKHN0YXRlLT5zdGF0ZSAmIEVYVEVOVF9ESVJUWSkpIHsKIAkJdTY0IHJhbmdlID0gc3RhdGUtPmVuZCAtIHN0YXRlLT5zdGFydCArIDE7CkBAIC00MzksNyArNDY5LDcgQEAKIAkJdHJlZS0+ZGlydHlfYnl0ZXMgLT0gcmFuZ2U7CiAJfQogCWNsZWFyX3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKLQlzdGF0ZS0+c3RhdGUgJj0gfmJpdHM7CisJc3RhdGUtPnN0YXRlICY9IH5iaXRzX3RvX2NsZWFyOwogCWlmICh3YWtlKQogCQl3YWtlX3VwKCZzdGF0ZS0+d3EpOwogCWlmIChkZWxldGUgfHwgc3RhdGUtPnN0YXRlID09IDApIHsKQEAgLTU0Miw4ICs1NzIsOCBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJCWlmIChzdGF0ZS0+ZW5kIDw9IGVuZCkgewotCQkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBzdGF0ZSwgYml0cywKLQkJCQkJd2FrZSwgZGVsZXRlKTsKKwkJCXNldCB8PSBjbGVhcl9zdGF0ZV9iaXQodHJlZSwgc3RhdGUsIGJpdHMsIHdha2UsCisJCQkJCSAgICAgICBkZWxldGUpOwogCQkJaWYgKGxhc3RfZW5kID09ICh1NjQpLTEpCiAJCQkJZ290byBvdXQ7CiAJCQlzdGFydCA9IGxhc3RfZW5kICsgMTsKQEAgLTU2MSwxMiArNTkxLDExIEBACiAJCQlwcmVhbGxvYyA9IGFsbG9jX2V4dGVudF9zdGF0ZShHRlBfQVRPTUlDKTsKIAkJZXJyID0gc3BsaXRfc3RhdGUodHJlZSwgc3RhdGUsIHByZWFsbG9jLCBlbmQgKyAxKTsKIAkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKLQogCQlpZiAod2FrZSkKIAkJCXdha2VfdXAoJnN0YXRlLT53cSk7CiAKLQkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBwcmVhbGxvYywgYml0cywKLQkJCQkgICAgICAgd2FrZSwgZGVsZXRlKTsKKwkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBwcmVhbGxvYywgYml0cywgd2FrZSwgZGVsZXRlKTsKKwogCQlwcmVhbGxvYyA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTY2NywxNiArNjk2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zdGF0ZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKK3N0YXRpYyBpbnQgc2V0X3N0YXRlX2JpdHMoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsCiAJCQkgICBpbnQgYml0cykKIHsKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJaWYgKChiaXRzICYgRVhURU5UX0RJUlRZKSAmJiAhKHN0YXRlLT5zdGF0ZSAmIEVYVEVOVF9ESVJUWSkpIHsKIAkJdTY0IHJhbmdlID0gc3RhdGUtPmVuZCAtIHN0YXRlLT5zdGFydCArIDE7CiAJCXRyZWUtPmRpcnR5X2J5dGVzICs9IHJhbmdlOwogCX0KLQlzZXRfc3RhdGVfY2IodHJlZSwgc3RhdGUsIGJpdHMpOwogCXN0YXRlLT5zdGF0ZSB8PSBiaXRzOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNhY2hlX3N0YXRlKHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLApAQCAtNzU4LDcgKzc5NCwxMCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCWVyciA9IHNldF9zdGF0ZV9iaXRzKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCiAJCWNhY2hlX3N0YXRlKHN0YXRlLCBjYWNoZWRfc3RhdGUpOwogCQltZXJnZV9zdGF0ZSh0cmVlLCBzdGF0ZSk7CiAJCWlmIChsYXN0X2VuZCA9PSAodTY0KS0xKQpAQCAtODA1LDcgKzg0NCw5IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAkJaWYgKHN0YXRlLT5lbmQgPD0gZW5kKSB7Ci0JCQlzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCQllcnIgPSBzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OwogCQkJY2FjaGVfc3RhdGUoc3RhdGUsIGNhY2hlZF9zdGF0ZSk7CiAJCQltZXJnZV9zdGF0ZSh0cmVlLCBzdGF0ZSk7CiAJCQlpZiAobGFzdF9lbmQgPT0gKHU2NCktMSkKQEAgLTgyOSwxMSArODcwLDEzIEBACiAJCQl0aGlzX2VuZCA9IGxhc3Rfc3RhcnQgLSAxOwogCQllcnIgPSBpbnNlcnRfc3RhdGUodHJlZSwgcHJlYWxsb2MsIHN0YXJ0LCB0aGlzX2VuZCwKIAkJCQkgICBiaXRzKTsKKwkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKKwkJaWYgKGVycikgeworCQkJcHJlYWxsb2MgPSBOVUxMOworCQkJZ290byBvdXQ7CisJCX0KIAkJY2FjaGVfc3RhdGUocHJlYWxsb2MsIGNhY2hlZF9zdGF0ZSk7CiAJCXByZWFsbG9jID0gTlVMTDsKLQkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwogCQlzdGFydCA9IHRoaXNfZW5kICsgMTsKIAkJZ290byBzZWFyY2hfYWdhaW47CiAJfQpAQCAtODUyLDcgKzg5NSwxMSBAQAogCQllcnIgPSBzcGxpdF9zdGF0ZSh0cmVlLCBzdGF0ZSwgcHJlYWxsb2MsIGVuZCArIDEpOwogCQlCVUdfT04oZXJyID09IC1FRVhJU1QpOwogCi0JCXNldF9zdGF0ZV9iaXRzKHRyZWUsIHByZWFsbG9jLCBiaXRzKTsKKwkJZXJyID0gc2V0X3N0YXRlX2JpdHModHJlZSwgcHJlYWxsb2MsIGJpdHMpOworCQlpZiAoZXJyKSB7CisJCQlwcmVhbGxvYyA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQogCQljYWNoZV9zdGF0ZShwcmVhbGxvYywgY2FjaGVkX3N0YXRlKTsKIAkJbWVyZ2Vfc3RhdGUodHJlZSwgcHJlYWxsb2MpOwogCQlwcmVhbGxvYyA9IE5VTEw7CkBAIC05MTAsNyArOTU3LDggQEAKIAkJICAgICAgIGdmcF90IG1hc2spCiB7CiAJcmV0dXJuIGNsZWFyX2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwKLQkJCQlFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MsIDAsIDAsCisJCQkJRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwKKwkJCQlFWFRFTlRfRE9fQUNDT1VOVElORywgMCwgMCwKIAkJCQlOVUxMLCBtYXNrKTsKIH0KIApAQCAtMTM1NSwxMiArMTQwMyw3IEBACiBpbnQgZXh0ZW50X2NsZWFyX3VubG9ja19kZWxhbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCQl1NjQgc3RhcnQsIHU2NCBlbmQsIHN0cnVjdCBwYWdlICpsb2NrZWRfcGFnZSwKLQkJCQlpbnQgdW5sb2NrX3BhZ2VzLAotCQkJCWludCBjbGVhcl91bmxvY2ssCi0JCQkJaW50IGNsZWFyX2RlbGFsbG9jLCBpbnQgY2xlYXJfZGlydHksCi0JCQkJaW50IHNldF93cml0ZWJhY2ssCi0JCQkJaW50IGVuZF93cml0ZWJhY2ssCi0JCQkJaW50IHNldF9wcml2YXRlMikKKwkJCQl1bnNpZ25lZCBsb25nIG9wKQogewogCWludCByZXQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzWzE2XTsKQEAgLTEzNzAsMTcgKzE0MTMsMjEgQEAKIAlpbnQgaTsKIAlpbnQgY2xlYXJfYml0cyA9IDA7CiAKLQlpZiAoY2xlYXJfdW5sb2NrKQorCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9VTkxPQ0spCiAJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0xPQ0tFRDsKLQlpZiAoY2xlYXJfZGlydHkpCisJaWYgKG9wICYgRVhURU5UX0NMRUFSX0RJUlRZKQogCQljbGVhcl9iaXRzIHw9IEVYVEVOVF9ESVJUWTsKIAotCWlmIChjbGVhcl9kZWxhbGxvYykKKwlpZiAob3AgJiBFWFRFTlRfQ0xFQVJfREVMQUxMT0MpCiAJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0RFTEFMTE9DOwogCisJaWYgKG9wICYgRVhURU5UX0NMRUFSX0FDQ09VTlRJTkcpCisJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0RPX0FDQ09VTlRJTkc7CisKIAljbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsIGNsZWFyX2JpdHMsIDEsIDAsIE5VTEwsIEdGUF9OT0ZTKTsKLQlpZiAoISh1bmxvY2tfcGFnZXMgfHwgY2xlYXJfZGlydHkgfHwgc2V0X3dyaXRlYmFjayB8fCBlbmRfd3JpdGViYWNrIHx8Ci0JICAgICAgc2V0X3ByaXZhdGUyKSkKKwlpZiAoIShvcCAmIChFWFRFTlRfQ0xFQVJfVU5MT0NLX1BBR0UgfCBFWFRFTlRfQ0xFQVJfRElSVFkgfAorCQkgICAgRVhURU5UX1NFVF9XUklURUJBQ0sgfCBFWFRFTlRfRU5EX1dSSVRFQkFDSyB8CisJCSAgICBFWFRFTlRfU0VUX1BSSVZBVEUyKSkpCiAJCXJldHVybiAwOwogCiAJd2hpbGUgKG5yX3BhZ2VzID4gMCkgewpAQCAtMTM4OSwyMCArMTQzNiwyMCBAQAogCQkJCSAgICAgbnJfcGFnZXMsIEFSUkFZX1NJWkUocGFnZXMpKSwgcGFnZXMpOwogCQlmb3IgKGkgPSAwOyBpIDwgcmV0OyBpKyspIHsKIAotCQkJaWYgKHNldF9wcml2YXRlMikKKwkJCWlmIChvcCAmIEVYVEVOVF9TRVRfUFJJVkFURTIpCiAJCQkJU2V0UGFnZVByaXZhdGUyKHBhZ2VzW2ldKTsKIAogCQkJaWYgKHBhZ2VzW2ldID09IGxvY2tlZF9wYWdlKSB7CiAJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2VzW2ldKTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmIChjbGVhcl9kaXJ0eSkKKwkJCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9ESVJUWSkKIAkJCQljbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlc1tpXSk7Ci0JCQlpZiAoc2V0X3dyaXRlYmFjaykKKwkJCWlmIChvcCAmIEVYVEVOVF9TRVRfV1JJVEVCQUNLKQogCQkJCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlc1tpXSk7Ci0JCQlpZiAoZW5kX3dyaXRlYmFjaykKKwkJCWlmIChvcCAmIEVYVEVOVF9FTkRfV1JJVEVCQUNLKQogCQkJCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlc1tpXSk7Ci0JCQlpZiAodW5sb2NrX3BhZ2VzKQorCQkJaWYgKG9wICYgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFKQogCQkJCXVubG9ja19wYWdlKHBhZ2VzW2ldKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1tpXSk7CiAJCX0KQEAgLTI2NjgsNyArMjcxNSw4IEBACiAJbG9ja19leHRlbnQodHJlZSwgc3RhcnQsIGVuZCwgR0ZQX05PRlMpOwogCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CiAJY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBzdGFydCwgZW5kLAotCQkJIEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MsCisJCQkgRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQyB8CisJCQkgRVhURU5UX0RPX0FDQ09VTlRJTkcsCiAJCQkgMSwgMSwgTlVMTCwgR0ZQX05PRlMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmggYi9mcy9idHJmcy9leHRlbnRfaW8uaAppbmRleCAxNGVkMTZmLi4zNmRlMjUwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uaAorKysgYi9mcy9idHJmcy9leHRlbnRfaW8uaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBFWFRFTlRfQlVGRkVSX0ZJTExFRCAoMSA8PCA4KQogI2RlZmluZSBFWFRFTlRfQk9VTkRBUlkgKDEgPDwgOSkKICNkZWZpbmUgRVhURU5UX05PREFUQVNVTSAoMSA8PCAxMCkKKyNkZWZpbmUgRVhURU5UX0RPX0FDQ09VTlRJTkcgKDEgPDwgMTEpCiAjZGVmaW5lIEVYVEVOVF9JT0JJVFMgKEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfV1JJVEVCQUNLKQogCiAvKiBmbGFncyBmb3IgYmlvIHN1Ym1pc3Npb24gKi8KQEAgLTI1LDYgKzI2LDE2IEBACiAjZGVmaW5lIEVYVEVOVF9CVUZGRVJfQkxPQ0tJTkcgMQogI2RlZmluZSBFWFRFTlRfQlVGRkVSX0RJUlRZIDIKIAorLyogdGhlc2UgYXJlIGZsYWdzIGZvciBleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jICovCisjZGVmaW5lIEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSAweDEKKyNkZWZpbmUgRVhURU5UX0NMRUFSX1VOTE9DSwkgMHgyCisjZGVmaW5lIEVYVEVOVF9DTEVBUl9ERUxBTExPQwkgMHg0CisjZGVmaW5lIEVYVEVOVF9DTEVBUl9ESVJUWQkgMHg4CisjZGVmaW5lIEVYVEVOVF9TRVRfV1JJVEVCQUNLCSAweDEwCisjZGVmaW5lIEVYVEVOVF9FTkRfV1JJVEVCQUNLCSAweDIwCisjZGVmaW5lIEVYVEVOVF9TRVRfUFJJVkFURTIJIDB4NDAKKyNkZWZpbmUgRVhURU5UX0NMRUFSX0FDQ09VTlRJTkcgIDB4ODAKKwogLyoKICAqIHBhZ2UtPnByaXZhdGUgdmFsdWVzLiAgRXZlcnkgcGFnZSB0aGF0IGlzIGNvbnRyb2xsZWQgYnkgdGhlIGV4dGVudAogICogbWFwIGhhcyBwYWdlLT5wcml2YXRlIHNldCB0byBvbmUuCkBAIC02MCw4ICs3MSwxMyBAQAogCQkJCSAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLCBpbnQgdXB0b2RhdGUpOwogCWludCAoKnNldF9iaXRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIGJpdHMpOwotCWludCAoKmNsZWFyX2JpdF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgYml0cyk7CisJaW50ICgqY2xlYXJfYml0X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBiaXRzKTsKKwlpbnQgKCptZXJnZV9leHRlbnRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAorCQkJCSBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvdGhlcik7CisJaW50ICgqc3BsaXRfZXh0ZW50X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBleHRlbnRfc3RhdGUgKm9yaWcsIHU2NCBzcGxpdCk7CiAJaW50ICgqd3JpdGVfY2FjaGVfcGFnZXNfbG9ja19ob29rKShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB9OwogCkBAIC03OSwxMCArOTUsMTQgQEAKIAl1NjQgc3RhcnQ7CiAJdTY0IGVuZDsgLyogaW5jbHVzaXZlICovCiAJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsKKworCS8qIEFERCBORVcgRUxFTUVOVFMgQUZURVIgVEhJUyAqLwogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKIAlhdG9taWNfdCByZWZzOwogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJdTY0IHNwbGl0X3N0YXJ0OworCXU2NCBzcGxpdF9lbmQ7CiAKIAkvKiBmb3IgdXNlIGJ5IHRoZSBGUyAqLwogCXU2NCBwcml2YXRlOwpAQCAtMjc5LDEwICsyOTksNSBAQAogaW50IGV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgZW5kLCBzdHJ1Y3QgcGFnZSAqbG9ja2VkX3BhZ2UsCi0JCQkJaW50IHVubG9ja19wYWdlLAotCQkJCWludCBjbGVhcl91bmxvY2ssCi0JCQkJaW50IGNsZWFyX2RlbGFsbG9jLCBpbnQgY2xlYXJfZGlydHksCi0JCQkJaW50IHNldF93cml0ZWJhY2ssCi0JCQkJaW50IGVuZF93cml0ZWJhY2ssCi0JCQkJaW50IHNldF9wcml2YXRlMik7CisJCQkJdW5zaWduZWQgbG9uZyBvcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9tYXAuYyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwppbmRleCAyYzcyNmI3Li5jY2JkY2I1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfbWFwLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X21hcC5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAl3cml0ZV9sb2NrKCZ0cmVlLT5sb2NrKTsKIAllbSA9IGxvb2t1cF9leHRlbnRfbWFwcGluZyh0cmVlLCBzdGFydCwgbGVuKTsKIAotCVdBUk5fT04oZW0tPnN0YXJ0ICE9IHN0YXJ0IHx8ICFlbSk7CisJV0FSTl9PTighZW0gfHwgZW0tPnN0YXJ0ICE9IHN0YXJ0KTsKIAogCWlmICghZW0pCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IDU3MWFkM2MuLjA2NTUwYWYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTEyMyw3ICsxMjMsMTAgQEAKIAkJICAgIHJvb3QtPnNlY3RvcnNpemUgLSAxKSAmIH4oKHU2NClyb290LT5zZWN0b3JzaXplIC0gMSk7CiAKIAllbmRfb2ZfbGFzdF9ibG9jayA9IHN0YXJ0X3BvcyArIG51bV9ieXRlcyAtIDE7Ci0JYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgc3RhcnRfcG9zLCBlbmRfb2ZfbGFzdF9ibG9jayk7CisJZXJyID0gYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgc3RhcnRfcG9zLCBlbmRfb2ZfbGFzdF9ibG9jayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgewogCQlzdHJ1Y3QgcGFnZSAqcCA9IHBhZ2VzW2ldOwogCQlTZXRQYWdlVXB0b2RhdGUocCk7CkBAIC04NzUsNyArODc4LDggQEAKIAkJCWJ0cmZzX3B1dF9vcmRlcmVkX2V4dGVudChvcmRlcmVkKTsKIAogCQljbGVhcl9leHRlbnRfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHN0YXJ0X3BvcywKLQkJCQkgIGxhc3RfcG9zIC0gMSwgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DLAorCQkJCSAgbGFzdF9wb3MgLSAxLCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfAorCQkJCSAgRVhURU5UX0RPX0FDQ09VTlRJTkcsCiAJCQkJICBHRlBfTk9GUyk7CiAJCXVubG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAogCQkJICAgICAgc3RhcnRfcG9zLCBsYXN0X3BvcyAtIDEsIEdGUF9OT0ZTKTsKQEAgLTkxNywyMSArOTIxLDM1IEBACiAJc3RhcnRfcG9zID0gcG9zOwogCiAJdmZzX2NoZWNrX2Zyb3plbihpbm9kZS0+aV9zYiwgU0JfRlJFRVpFX1dSSVRFKTsKKworCS8qIGRvIHRoZSByZXNlcnZlIGJlZm9yZSB0aGUgbXV0ZXggbG9jayBpbiBjYXNlIHdlIGhhdmUgdG8gZG8gc29tZQorCSAqIGZsdXNoaW5nLiAgV2Ugd291bGRuJ3QgZGVhZGxvY2ssIGJ1dCB0aGlzIGlzIG1vcmUgcG9saXRlLgorCSAqLworCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9ub2xvY2s7CisKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKIAljdXJyZW50LT5iYWNraW5nX2Rldl9pbmZvID0gaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKIAllcnIgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhmaWxlLCAmcG9zLCAmY291bnQsIFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X25vbG9jazsKKwkJZ290byBvdXQ7CisKIAlpZiAoY291bnQgPT0gMCkKLQkJZ290byBvdXRfbm9sb2NrOworCQlnb3RvIG91dDsKIAogCWVyciA9IGZpbGVfcmVtb3ZlX3N1aWQoZmlsZSk7CiAJaWYgKGVycikKLQkJZ290byBvdXRfbm9sb2NrOworCQlnb3RvIG91dDsKKwogCWZpbGVfdXBkYXRlX3RpbWUoZmlsZSk7CiAKIAlwYWdlcyA9IGttYWxsb2MobnJwdHJzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKIAotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkvKiBnZW5lcmljX3dyaXRlX2NoZWNrcyBjYW4gY2hhbmdlIG91ciBwb3MgKi8KKwlzdGFydF9wb3MgPSBwb3M7CisKIAlCVFJGU19JKGlub2RlKS0+c2VxdWVuY2UrKzsKIAlmaXJzdF9pbmRleCA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCWxhc3RfaW5kZXggPSAocG9zICsgY291bnQpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CkBAIC0xMDA1LDkgKzEwMjMsOCBAQAogCQl9CiAKIAkJaWYgKHdpbGxfd3JpdGUpIHsKLQkJCWJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgcG9zLAotCQkJCQkgICAgICAgcG9zICsgd3JpdGVfYnl0ZXMgLSAxLAotCQkJCQkgICAgICAgV0JfU1lOQ19BTEwpOworCQkJZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHBvcywKKwkJCQkJCSBwb3MgKyB3cml0ZV9ieXRlcyAtIDEpOwogCQl9IGVsc2UgewogCQkJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZF9ucihpbm9kZS0+aV9tYXBwaW5nLAogCQkJCQkJCSAgIG51bV9wYWdlcyk7CkBAIC0xMDI4LDYgKzEwNDUsNyBAQAogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChyZXQpCiAJCWVyciA9IHJldDsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAogb3V0X25vbG9jazoKIAlrZnJlZShwYWdlcyk7CkBAIC0xMDY4LDggKzEwODYsMTAgQEAKIAkJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCQllbHNlCiAJCQkJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQl9IGVsc2UgeworCQkJfSBlbHNlIGlmIChyZXQgIT0gQlRSRlNfTk9fTE9HX1NZTkMpIHsKIAkJCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJfSBlbHNlIHsKKwkJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQkJfQogCQl9CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHsKQEAgLTExMTksNiArMTEzOSwxMyBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwogCisKKwkvKiB3ZSB3YWl0IGZpcnN0LCBzaW5jZSB0aGUgd3JpdGViYWNrIG1heSBjaGFuZ2UgdGhlIGlub2RlICovCisJcm9vdC0+bG9nX2JhdGNoKys7CisJLyogdGhlIFZGUyBjYWxsZWQgZmlsZW1hcF9mZGF0YXdyaXRlIGZvciB1cyAqLworCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CisJcm9vdC0+bG9nX2JhdGNoKys7CisKIAkvKgogCSAqIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGxhc3QgbW9kaWZpZWQgdGhpcyBpbm9kZQogCSAqIGFuZCBzZWUgaWYgaXRzIGFscmVhZHkgYmVlbiBjb21taXR0ZWQKQEAgLTExMjYsNiArMTE1MywxMSBAQAogCWlmICghQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMpCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBpZiB0aGUgbGFzdCB0cmFuc2FjdGlvbiB0aGF0IGNoYW5nZWQgdGhpcyBmaWxlIHdhcyBiZWZvcmUKKwkgKiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgd2UgY2FuIGJhaWwgb3V0IG5vdyB3aXRob3V0IGFueQorCSAqIHN5bmNpbmcKKwkgKi8KIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJaWYgKEJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zIDw9CiAJICAgIHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKSB7CkBAIC0xMTM1LDEzICsxMTY3LDYgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKLQlyb290LT5sb2dfYmF0Y2grKzsKLQlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCAwLCAodTY0KS0xKTsKLQlyb290LT5sb2dfYmF0Y2grKzsKLQotCWlmIChkYXRhc3luYyAmJiAhKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9QQUdFUykpCi0JCWdvdG8gb3V0OwogCS8qCiAJICogb2sgd2UgaGF2ZW4ndCBjb21taXR0ZWQgdGhlIHRyYW5zYWN0aW9uIHlldCwgbGV0cyBkbyBhIGNvbW1pdAogCSAqLwpAQCAtMTE3MCwyMSArMTE5NSwyNSBAQAogCSAqLwogCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAotCWlmIChyZXQgPiAwKSB7Ci0JCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gYnRyZnNfc3luY19sb2codHJhbnMsIHJvb3QpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCQllbHNlCisJaWYgKHJldCAhPSBCVFJGU19OT19MT0dfU1lOQykgeworCQlpZiAocmV0ID4gMCkgewogCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IGJ0cmZzX3N5bmNfbG9nKHRyYW5zLCByb290KTsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJZWxzZQorCQkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0KIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgogCXJldHVybiByZXQgPiAwID8gRUlPIDogcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJ0cmZzX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBidHJmc19maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlCT0gYnRyZnNfcGFnZV9ta3dyaXRlLAogfTsKQEAgLTExOTYsNyArMTIyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQgICAgICAgPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKaW5kZXggNWMyY2FhZC4uY2IyODQ5ZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCisrKyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwpAQCAtMTI5Niw3ICsxMjk2LDcgQEAKIAkJCXdpbmRvd19zdGFydCA9IGVudHJ5LT5vZmZzZXQ7CiAJCQl3aW5kb3dfZnJlZSA9IGVudHJ5LT5ieXRlczsKIAkJCWxhc3QgPSBlbnRyeTsKLQkJCW1heF9leHRlbnQgPSAwOworCQkJbWF4X2V4dGVudCA9IGVudHJ5LT5ieXRlczsKIAkJfSBlbHNlIHsKIAkJCWxhc3QgPSBuZXh0OwogCQkJd2luZG93X2ZyZWUgKz0gbmV4dC0+Ynl0ZXM7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCBlOWI3NmJjLi5iM2FkMTY4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTYyLDcgKzYyLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBidHJmc19hb3BzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZnNfc3ltbGlua19hb3BzOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZGlyX2ZpbGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9maWxlX29wZXJhdGlvbnM7CiBzdGF0aWMgc3RydWN0IGV4dGVudF9pb19vcHMgYnRyZnNfZXh0ZW50X2lvX29wczsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpidHJmc19pbm9kZV9jYWNoZXA7CkBAIC00MjQsOSArNDI0LDEyIEBACiAJCQkgKiBhbmQgZnJlZSB1cCBvdXIgdGVtcCBwYWdlcy4KIAkJCSAqLwogCQkJZXh0ZW50X2NsZWFyX3VubG9ja19kZWxhbGxvYyhpbm9kZSwKLQkJCQkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAotCQkJCQkJICAgICBzdGFydCwgZW5kLCBOVUxMLCAxLCAwLAotCQkJCQkJICAgICAwLCAxLCAxLCAxLCAwKTsKKwkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAorCQkJICAgICBzdGFydCwgZW5kLCBOVUxMLAorCQkJICAgICBFWFRFTlRfQ0xFQVJfVU5MT0NLX1BBR0UgfCBFWFRFTlRfQ0xFQVJfRElSVFkgfAorCQkJICAgICBFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJICAgICBFWFRFTlRfQ0xFQVJfQUNDT1VOVElORyB8CisJCQkgICAgIEVYVEVOVF9TRVRfV1JJVEVCQUNLIHwgRVhURU5UX0VORF9XUklURUJBQ0spOwogCQkJcmV0ID0gMDsKIAkJCWdvdG8gZnJlZV9wYWdlc19vdXQ7CiAJCX0KQEAgLTUzNSw3ICs1MzgsNyBAQAogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IGV4dGVudF9tYXBfdHJlZSAqZW1fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWU7CiAJc3RydWN0IGV4dGVudF9pb190cmVlICppb190cmVlOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlpZiAobGlzdF9lbXB0eSgmYXN5bmNfY293LT5leHRlbnRzKSkKIAkJcmV0dXJuIDA7CkBAIC01NDksNiArNTUyLDcgQEAKIAogCQlpb190cmVlID0gJkJUUkZTX0koaW5vZGUpLT5pb190cmVlOwogCityZXRyeToKIAkJLyogZGlkIHRoZSBjb21wcmVzc2lvbiBjb2RlIGZhbGwgYmFjayB0byB1bmNvbXByZXNzZWQgSU8/ICovCiAJCWlmICghYXN5bmNfZXh0ZW50LT5wYWdlcykgewogCQkJaW50IHBhZ2Vfc3RhcnRlZCA9IDA7CkBAIC01NTksMTEgKzU2MywxMSBAQAogCQkJCSAgICBhc3luY19leHRlbnQtPnJhbV9zaXplIC0gMSwgR0ZQX05PRlMpOwogCiAJCQkvKiBhbGxvY2F0ZSBibG9ja3MgKi8KLQkJCWNvd19maWxlX3JhbmdlKGlub2RlLCBhc3luY19jb3ctPmxvY2tlZF9wYWdlLAotCQkJCSAgICAgICBhc3luY19leHRlbnQtPnN0YXJ0LAotCQkJCSAgICAgICBhc3luY19leHRlbnQtPnN0YXJ0ICsKLQkJCQkgICAgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCi0JCQkJICAgICAgICZwYWdlX3N0YXJ0ZWQsICZucl93cml0dGVuLCAwKTsKKwkJCXJldCA9IGNvd19maWxlX3JhbmdlKGlub2RlLCBhc3luY19jb3ctPmxvY2tlZF9wYWdlLAorCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQsCisJCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArCisJCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCisJCQkJCSAgICAgJnBhZ2Vfc3RhcnRlZCwgJm5yX3dyaXR0ZW4sIDApOwogCiAJCQkvKgogCQkJICogaWYgcGFnZV9zdGFydGVkLCBjb3dfZmlsZV9yYW5nZSBpbnNlcnRlZCBhbgpAQCAtNTcxLDcgKzU3NSw3IEBACiAJCQkgKiBhbmQgSU8gZm9yIHVzLiAgT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIHN1Ym1pdAogCQkJICogYWxsIHRob3NlIHBhZ2VzIGRvd24gdG8gdGhlIGRyaXZlLgogCQkJICovCi0JCQlpZiAoIXBhZ2Vfc3RhcnRlZCkKKwkJCWlmICghcGFnZV9zdGFydGVkICYmICFyZXQpCiAJCQkJZXh0ZW50X3dyaXRlX2xvY2tlZF9yYW5nZShpb190cmVlLAogCQkJCQkJICBpbm9kZSwgYXN5bmNfZXh0ZW50LT5zdGFydCwKIAkJCQkJCSAgYXN5bmNfZXh0ZW50LT5zdGFydCArCkBAIC01OTksNyArNjAzLDIxIEBACiAJCQkJCSAgIGFzeW5jX2V4dGVudC0+Y29tcHJlc3NlZF9zaXplLAogCQkJCQkgICAwLCBhbGxvY19oaW50LAogCQkJCQkgICAodTY0KS0xLCAmaW5zLCAxKTsKLQkJQlVHX09OKHJldCk7CisJCWlmIChyZXQpIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IGFzeW5jX2V4dGVudC0+bnJfcGFnZXM7IGkrKykgeworCQkJCVdBUk5fT04oYXN5bmNfZXh0ZW50LT5wYWdlc1tpXS0+bWFwcGluZyk7CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGFzeW5jX2V4dGVudC0+cGFnZXNbaV0pOworCQkJfQorCQkJa2ZyZWUoYXN5bmNfZXh0ZW50LT5wYWdlcyk7CisJCQlhc3luY19leHRlbnQtPm5yX3BhZ2VzID0gMDsKKwkJCWFzeW5jX2V4dGVudC0+cGFnZXMgPSBOVUxMOworCQkJdW5sb2NrX2V4dGVudChpb190cmVlLCBhc3luY19leHRlbnQtPnN0YXJ0LAorCQkJCSAgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQgKworCQkJCSAgICAgIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLCBHRlBfTk9GUyk7CisJCQlnb3RvIHJldHJ5OworCQl9CisKIAkJZW0gPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKIAkJZW0tPnN0YXJ0ID0gYXN5bmNfZXh0ZW50LT5zdGFydDsKIAkJZW0tPmxlbiA9IGFzeW5jX2V4dGVudC0+cmFtX3NpemU7CkBAIC02MzcsMTEgKzY1NSwxNCBAQAogCQkgKiBjbGVhciBkaXJ0eSwgc2V0IHdyaXRlYmFjayBhbmQgdW5sb2NrIHRoZSBwYWdlcy4KIAkJICovCiAJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCi0JCQkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAotCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQsCi0JCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArCi0JCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCi0JCQkJCSAgICAgTlVMTCwgMSwgMSwgMCwgMSwgMSwgMCwgMCk7CisJCQkJJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAorCQkJCWFzeW5jX2V4dGVudC0+c3RhcnQsCisJCQkJYXN5bmNfZXh0ZW50LT5zdGFydCArCisJCQkJYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCisJCQkJTlVMTCwgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQlFWFRFTlRfQ0xFQVJfVU5MT0NLIHwKKwkJCQlFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJCUVYVEVOVF9DTEVBUl9ESVJUWSB8IEVYVEVOVF9TRVRfV1JJVEVCQUNLKTsKIAogCQlyZXQgPSBidHJmc19zdWJtaXRfY29tcHJlc3NlZF93cml0ZShpbm9kZSwKIAkJCQkgICAgYXN5bmNfZXh0ZW50LT5zdGFydCwKQEAgLTcxMiw5ICs3MzMsMTUgQEAKIAkJCQkJICAgIHN0YXJ0LCBlbmQsIDAsIE5VTEwpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCi0JCQkJCQkgICAgICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJCSAgICAgc3RhcnQsIGVuZCwgTlVMTCwgMSwgMSwKLQkJCQkJCSAgICAgMSwgMSwgMSwgMSwgMCk7CisJCQkJICAgICAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCisJCQkJICAgICBzdGFydCwgZW5kLCBOVUxMLAorCQkJCSAgICAgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9VTkxPQ0sgfAorCQkJCSAgICAgRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9BQ0NPVU5USU5HIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9ESVJUWSB8CisJCQkJICAgICBFWFRFTlRfU0VUX1dSSVRFQkFDSyB8CisJCQkJICAgICBFWFRFTlRfRU5EX1dSSVRFQkFDSyk7CiAJCQkqbnJfd3JpdHRlbiA9ICpucl93cml0dGVuICsKIAkJCSAgICAgKGVuZCAtIHN0YXJ0ICsgUEFHRV9DQUNIRV9TSVpFKSAvIFBBR0VfQ0FDSEVfU0laRTsKIAkJCSpwYWdlX3N0YXJ0ZWQgPSAxOwpAQCAtNzMxLDEzICs3NTgsMjkgQEAKIAllbSA9IHNlYXJjaF9leHRlbnRfbWFwcGluZygmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlLAogCQkJCSAgIHN0YXJ0LCBudW1fYnl0ZXMpOwogCWlmIChlbSkgewotCQlhbGxvY19oaW50ID0gZW0tPmJsb2NrX3N0YXJ0OwotCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQkvKgorCQkgKiBpZiBibG9jayBzdGFydCBpc24ndCBhbiBhY3R1YWwgYmxvY2sgbnVtYmVyIHRoZW4gZmluZCB0aGUKKwkJICogZmlyc3QgYmxvY2sgaW4gdGhpcyBpbm9kZSBhbmQgdXNlIHRoYXQgYXMgYSBoaW50LiAgSWYgdGhhdAorCQkgKiBibG9jayBpcyBhbHNvIGJvZ3VzIHRoZW4ganVzdCBkb24ndCB3b3JyeSBhYm91dCBpdC4KKwkJICovCisJCWlmIChlbS0+YmxvY2tfc3RhcnQgPj0gRVhURU5UX01BUF9MQVNUX0JZVEUpIHsKKwkJCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCQllbSA9IHNlYXJjaF9leHRlbnRfbWFwcGluZyhlbV90cmVlLCAwLCAwKTsKKwkJCWlmIChlbSAmJiBlbS0+YmxvY2tfc3RhcnQgPCBFWFRFTlRfTUFQX0xBU1RfQllURSkKKwkJCQlhbGxvY19oaW50ID0gZW0tPmJsb2NrX3N0YXJ0OworCQkJaWYgKGVtKQorCQkJCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCX0gZWxzZSB7CisJCQlhbGxvY19oaW50ID0gZW0tPmJsb2NrX3N0YXJ0OworCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJfQogCX0KIAlyZWFkX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlLmxvY2spOwogCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBzdGFydCwgc3RhcnQgKyBudW1fYnl0ZXMgLSAxLCAwKTsKIAogCXdoaWxlIChkaXNrX251bV9ieXRlcyA+IDApIHsKKwkJdW5zaWduZWQgbG9uZyBvcDsKKwogCQljdXJfYWxsb2Nfc2l6ZSA9IG1pbihkaXNrX251bV9ieXRlcywgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCk7CiAJCXJldCA9IGJ0cmZzX3Jlc2VydmVfZXh0ZW50KHRyYW5zLCByb290LCBjdXJfYWxsb2Nfc2l6ZSwKIAkJCQkJICAgcm9vdC0+c2VjdG9yc2l6ZSwgMCwgYWxsb2NfaGludCwKQEAgLTc4OSwxMCArODMyLDEzIEBACiAJCSAqIERvIHNldCB0aGUgUHJpdmF0ZTIgYml0IHNvIHdlIGtub3cgdGhpcyBwYWdlIHdhcyBwcm9wZXJseQogCQkgKiBzZXR1cCBmb3Igd3JpdGVwYWdlCiAJCSAqLworCQlvcCA9IHVubG9jayA/IEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSA6IDA7CisJCW9wIHw9IEVYVEVOVF9DTEVBUl9VTkxPQ0sgfCBFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJRVhURU5UX1NFVF9QUklWQVRFMjsKKwogCQlleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jKGlub2RlLCAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCiAJCQkJCSAgICAgc3RhcnQsIHN0YXJ0ICsgcmFtX3NpemUgLSAxLAotCQkJCQkgICAgIGxvY2tlZF9wYWdlLCB1bmxvY2ssIDEsCi0JCQkJCSAgICAgMSwgMCwgMCwgMCwgMSk7CisJCQkJCSAgICAgbG9ja2VkX3BhZ2UsIG9wKTsKIAkJZGlza19udW1fYnl0ZXMgLT0gY3VyX2FsbG9jX3NpemU7CiAJCW51bV9ieXRlcyAtPSBjdXJfYWxsb2Nfc2l6ZTsKIAkJYWxsb2NfaGludCA9IGlucy5vYmplY3RpZCArIGlucy5vZmZzZXQ7CkBAIC04NjQsOCArOTEwLDggQEAKIAl1NjQgY3VyX2VuZDsKIAlpbnQgbGltaXQgPSAxMCAqIDEwMjQgKiAxMDQyOwogCi0JY2xlYXJfZXh0ZW50X2JpdCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHN0YXJ0LCBlbmQsIEVYVEVOVF9MT0NLRUQgfAotCQkJIEVYVEVOVF9ERUxBTExPQywgMSwgMCwgTlVMTCwgR0ZQX05PRlMpOworCWNsZWFyX2V4dGVudF9iaXQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBzdGFydCwgZW5kLCBFWFRFTlRfTE9DS0VELAorCQkJIDEsIDAsIE5VTEwsIEdGUF9OT0ZTKTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKIAkJYXN5bmNfY293ID0ga21hbGxvYyhzaXplb2YoKmFzeW5jX2NvdyksIEdGUF9OT0ZTKTsKIAkJYXN5bmNfY293LT5pbm9kZSA9IGlub2RlOwpAQCAtMTAwNiw2ICsxMDUyLDcgQEAKIAogCQlpZiAoZm91bmRfa2V5Lm9mZnNldCA+IGN1cl9vZmZzZXQpIHsKIAkJCWV4dGVudF9lbmQgPSBmb3VuZF9rZXkub2Zmc2V0OworCQkJZXh0ZW50X3R5cGUgPSAwOwogCQkJZ290byBvdXRfY2hlY2s7CiAJCX0KIApAQCAtMTExMiw4ICsxMTU5LDEwIEBACiAJCUJVR19PTihyZXQpOwogCiAJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJY3VyX29mZnNldCwgY3VyX29mZnNldCArIG51bV9ieXRlcyAtIDEsCi0JCQkJCWxvY2tlZF9wYWdlLCAxLCAxLCAxLCAwLCAwLCAwLCAxKTsKKwkJCQljdXJfb2Zmc2V0LCBjdXJfb2Zmc2V0ICsgbnVtX2J5dGVzIC0gMSwKKwkJCQlsb2NrZWRfcGFnZSwgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQlFWFRFTlRfQ0xFQVJfVU5MT0NLIHwgRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCQlFWFRFTlRfU0VUX1BSSVZBVEUyKTsKIAkJY3VyX29mZnNldCA9IGV4dGVudF9lbmQ7CiAJCWlmIChjdXJfb2Zmc2V0ID4gZW5kKQogCQkJYnJlYWs7CkBAIC0xMTU5LDYgKzEyMDgsODkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGJ0cmZzX3NwbGl0X2V4dGVudF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKm9yaWcsIHU2NCBzcGxpdCkKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCXU2NCBzaXplOworCisJaWYgKCEob3JpZy0+c3RhdGUgJiBFWFRFTlRfREVMQUxMT0MpKQorCQlyZXR1cm4gMDsKKworCXNpemUgPSBvcmlnLT5lbmQgLSBvcmlnLT5zdGFydCArIDE7CisJaWYgKHNpemUgPiByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KSB7CisJCXU2NCBudW1fZXh0ZW50czsKKwkJdTY0IG5ld19zaXplOworCisJCW5ld19zaXplID0gb3JpZy0+ZW5kIC0gc3BsaXQgKyAxOworCQludW1fZXh0ZW50cyA9IGRpdjY0X3U2NChzaXplICsgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCAtIDEsCisJCQkJCXJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpOworCisJCS8qCisJCSAqIGlmIHdlIGJyZWFrIGEgbGFyZ2UgZXh0ZW50IHVwIHRoZW4gbGVhdmUgb3VzdGFuZGluZ19leHRlbnRzCisJCSAqIGJlLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGFjY291bnRlZCBmb3IgdGhlIGxhcmdlIGV4dGVudC4KKwkJICovCisJCWlmIChkaXY2NF91NjQobmV3X3NpemUgKyByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50IC0gMSwKKwkJCSAgICAgIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpIDwgbnVtX2V4dGVudHMpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCUJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKys7CisJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBleHRlbnRfaW8uYyBtZXJnZV9leHRlbnRfaG9vaywgdXNlZCB0byB0cmFjayBtZXJnZWQgZGVsYXllZCBhbGxvY2F0aW9uCisgKiBleHRlbnRzIHNvIHdlIGNhbiBrZWVwIHRyYWNrIG9mIG5ldyBleHRlbnRzIHRoYXQgYXJlIGp1c3QgbWVyZ2VkIG9udG8gb2xkCisgKiBleHRlbnRzLCBzdWNoIGFzIHdoZW4gd2UgYXJlIGRvaW5nIHNlcXVlbnRpYWwgd3JpdGVzLCBzbyB3ZSBjYW4gcHJvcGVybHkKKyAqIGFjY291bnQgZm9yIHRoZSBtZXRhZGF0YSBzcGFjZSB3ZSdsbCBuZWVkLgorICovCitzdGF0aWMgaW50IGJ0cmZzX21lcmdlX2V4dGVudF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAorCQkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKm90aGVyKQoreworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisJdTY0IG5ld19zaXplLCBvbGRfc2l6ZTsKKwl1NjQgbnVtX2V4dGVudHM7CisKKwkvKiBub3QgZGVsYWxsb2MsIGlnbm9yZSBpdCAqLworCWlmICghKG90aGVyLT5zdGF0ZSAmIEVYVEVOVF9ERUxBTExPQykpCisJCXJldHVybiAwOworCisJb2xkX3NpemUgPSBvdGhlci0+ZW5kIC0gb3RoZXItPnN0YXJ0ICsgMTsKKwlpZiAobmV3LT5zdGFydCA8IG90aGVyLT5zdGFydCkKKwkJbmV3X3NpemUgPSBvdGhlci0+ZW5kIC0gbmV3LT5zdGFydCArIDE7CisJZWxzZQorCQluZXdfc2l6ZSA9IG5ldy0+ZW5kIC0gb3RoZXItPnN0YXJ0ICsgMTsKKworCS8qIHdlJ3JlIG5vdCBiaWdnZXIgdGhhbiB0aGUgbWF4LCB1bnJlc2VydmUgdGhlIHNwYWNlIGFuZCBnbyAqLworCWlmIChuZXdfc2l6ZSA8PSByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KSB7CisJCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJCUJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzLS07CisJCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBncmV3IGJ5IGFub3RoZXIgbWF4X2V4dGVudCwganVzdCByZXR1cm4sIHdlIHdhbnQgdG8ga2VlcCB0aGF0CisJICogcmVzZXJ2ZWQgYW1vdW50LgorCSAqLworCW51bV9leHRlbnRzID0gZGl2NjRfdTY0KG9sZF9zaXplICsgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCAtIDEsCisJCQkJcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCk7CisJaWYgKGRpdjY0X3U2NChuZXdfc2l6ZSArIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQgLSAxLAorCQkgICAgICByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KSA+IG51bV9leHRlbnRzKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMtLTsKKwlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIGV4dGVudF9pby5jIHNldF9iaXRfaG9vaywgdXNlZCB0byB0cmFjayBkZWxheWVkIGFsbG9jYXRpb24KICAqIGJ5dGVzIGluIHRoaXMgZmlsZSwgYW5kIHRvIG1haW50YWluIHRoZSBsaXN0IG9mIGlub2RlcyB0aGF0CkBAIC0xMTY3LDYgKzEyOTksNyBAQAogc3RhdGljIGludCBidHJmc19zZXRfYml0X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgYml0cykKIHsKKwogCS8qCiAJICogc2V0X2JpdCBhbmQgY2xlYXIgYml0IGhvb2tzIG5vcm1hbGx5IHJlcXVpcmUgX2lycXNhdmUvcmVzdG9yZQogCSAqIGJ1dCBpbiB0aGlzIGNhc2UsIHdlIGFyZSBvbmx5IHRlc3RlaW5nIGZvciB0aGUgREVMQUxMT0MKQEAgLTExNzQsNiArMTMwNywxMCBAQAogCSAqLwogCWlmICghKG9sZCAmIEVYVEVOVF9ERUxBTExPQykgJiYgKGJpdHMgJiBFWFRFTlRfREVMQUxMT0MpKSB7CiAJCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisKKwkJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMrKzsKKwkJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOwogCQlidHJmc19kZWxhbGxvY19yZXNlcnZlX3NwYWNlKHJvb3QsIGlub2RlLCBlbmQgLSBzdGFydCArIDEpOwogCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOwogCQlCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfYnl0ZXMgKz0gZW5kIC0gc3RhcnQgKyAxOwpAQCAtMTE5MCwyMiArMTMyNywzMSBAQAogLyoKICAqIGV4dGVudF9pby5jIGNsZWFyX2JpdF9ob29rLCBzZWUgc2V0X2JpdF9ob29rIGZvciB3aHkKICAqLwotc3RhdGljIGludCBidHJmc19jbGVhcl9iaXRfaG9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCQkgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgYml0cykKK3N0YXRpYyBpbnQgYnRyZnNfY2xlYXJfYml0X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiaXRzKQogewogCS8qCiAJICogc2V0X2JpdCBhbmQgY2xlYXIgYml0IGhvb2tzIG5vcm1hbGx5IHJlcXVpcmUgX2lycXNhdmUvcmVzdG9yZQogCSAqIGJ1dCBpbiB0aGlzIGNhc2UsIHdlIGFyZSBvbmx5IHRlc3RlaW5nIGZvciB0aGUgREVMQUxMT0MKIAkgKiBiaXQsIHdoaWNoIGlzIG9ubHkgc2V0IG9yIGNsZWFyZWQgd2l0aCBpcnFzIG9uCiAJICovCi0JaWYgKChvbGQgJiBFWFRFTlRfREVMQUxMT0MpICYmIChiaXRzICYgRVhURU5UX0RFTEFMTE9DKSkgeworCWlmICgoc3RhdGUtPnN0YXRlICYgRVhURU5UX0RFTEFMTE9DKSAmJiAoYml0cyAmIEVYVEVOVF9ERUxBTExPQykpIHsKIAkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAorCQlpZiAoYml0cyAmIEVYVEVOVF9ET19BQ0NPVU5USU5HKSB7CisJCQlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCQkJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMtLTsKKwkJCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOworCQl9CisKIAkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5kZWxhbGxvY19sb2NrKTsKLQkJaWYgKGVuZCAtIHN0YXJ0ICsgMSA+IHJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2J5dGVzKSB7CisJCWlmIChzdGF0ZS0+ZW5kIC0gc3RhdGUtPnN0YXJ0ICsgMSA+CisJCSAgICByb290LT5mc19pbmZvLT5kZWxhbGxvY19ieXRlcykgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnMgd2FybmluZzogZGVsYWxsb2MgYWNjb3VudCAiCiAJCQkgICAgICAgIiVsbHUgJWxsdVxuIiwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWVuZCAtIHN0YXJ0ICsgMSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAgICAgIHN0YXRlLT5lbmQgLSBzdGF0ZS0+c3RhcnQgKyAxLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkgICAgICAgcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMpOwogCQkJYnRyZnNfZGVsYWxsb2NfZnJlZV9zcGFjZShyb290LCBpbm9kZSwgKHU2NCktMSk7CkBAIC0xMjEzLDkgKzEzNTksMTIgQEAKIAkJCUJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyA9IDA7CiAJCX0gZWxzZSB7CiAJCQlidHJmc19kZWxhbGxvY19mcmVlX3NwYWNlKHJvb3QsIGlub2RlLAotCQkJCQkJICBlbmQgLSBzdGFydCArIDEpOwotCQkJcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMgLT0gZW5kIC0gc3RhcnQgKyAxOwotCQkJQlRSRlNfSShpbm9kZSktPmRlbGFsbG9jX2J5dGVzIC09IGVuZCAtIHN0YXJ0ICsgMTsKKwkJCQkJCSAgc3RhdGUtPmVuZCAtCisJCQkJCQkgIHN0YXRlLT5zdGFydCArIDEpOworCQkJcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMgLT0gc3RhdGUtPmVuZCAtCisJCQkJc3RhdGUtPnN0YXJ0ICsgMTsKKwkJCUJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyAtPSBzdGF0ZS0+ZW5kIC0KKwkJCQlzdGF0ZS0+c3RhcnQgKyAxOwogCQl9CiAJCWlmIChCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfYnl0ZXMgPT0gMCAmJgogCQkgICAgIWxpc3RfZW1wdHkoJkJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19pbm9kZXMpKSB7CkBAIC0yMzU0LDcgKzI1MDMsMTkgQEAKIAogCXJvb3QgPSBCVFJGU19JKGRpciktPnJvb3Q7CiAKKwkvKgorCSAqIDUgaXRlbXMgZm9yIHVubGluayBpbm9kZQorCSAqIDEgZm9yIG9ycGhhbgorCSAqLworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOworCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CisJfQogCiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCkBAIC0yMzY5LDYgKzI1MzAsNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI0NDksNyArMjYxMSwxNiBAQAogCSAgICBpbm9kZS0+aV9pbm8gPT0gQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkKIAkJcmV0dXJuIC1FTk9URU1QVFk7CiAKKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KKwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWlmICh1bmxpa2VseShpbm9kZS0+aV9pbm8gPT0gQlRSRlNfRU1QVFlfU1VCVk9MX0RJUl9PQkpFQ1RJRCkpIHsKQEAgLTI0NzIsNiArMjY0Myw3IEBACiBvdXQ6CiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAKIAlpZiAocmV0ICYmICFlcnIpCkBAIC0yOTEyLDEyICszMDg0LDIyIEBACiAKIAlpZiAoKG9mZnNldCAmIChibG9ja3NpemUgLSAxKSkgPT0gMCkKIAkJZ290byBvdXQ7CisJcmV0ID0gYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCiAJcmV0ID0gLUVOT01FTTsKIGFnYWluOgogCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOwotCWlmICghcGFnZSkKKwlpZiAoIXBhZ2UpIHsKKwkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAkJZ290byBvdXQ7CisJfQogCiAJcGFnZV9zdGFydCA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpOwogCXBhZ2VfZW5kID0gcGFnZV9zdGFydCArIFBBR0VfQ0FDSEVfU0laRSAtIDE7CkBAIC0yOTUwLDcgKzMxMzIsMTYgQEAKIAkJZ290byBhZ2FpbjsKIAl9CiAKLQlidHJmc19zZXRfZXh0ZW50X2RlbGFsbG9jKGlub2RlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCk7CisJY2xlYXJfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKKwkJCSAgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwgRVhURU5UX0RPX0FDQ09VTlRJTkcsCisJCQkgIEdGUF9OT0ZTKTsKKworCXJldCA9IGJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKKwlpZiAocmV0KSB7CisJCXVubG9ja19leHRlbnQoaW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsIEdGUF9OT0ZTKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCXJldCA9IDA7CiAJaWYgKG9mZnNldCAhPSBQQUdFX0NBQ0hFX1NJWkUpIHsKIAkJa2FkZHIgPSBrbWFwKHBhZ2UpOwpAQCAtMjk2Myw2ICszMTU0LDkgQEAKIAl1bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLCBHRlBfTk9GUyk7CiAKIG91dF91bmxvY2s6CisJaWYgKHJldCkKKwkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIG91dDoKQEAgLTI5ODEsMTcgKzMxNzUsMTUgQEAKIAl1NjQgbGFzdF9ieXRlOwogCXU2NCBjdXJfb2Zmc2V0OwogCXU2NCBob2xlX3NpemU7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCWlmIChzaXplIDw9IGhvbGVfc3RhcnQpCiAJCXJldHVybiAwOwogCi0JZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwllcnIgPSBidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOwotCiAJd2hpbGUgKDEpIHsKIAkJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkOwogCQlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIGhvbGVfc3RhcnQsCkBAIC0zMDI0LDEyICszMjE2LDE4IEBACiAJCQkJCQkgY3VyX29mZnNldCwgJmhpbnRfYnl0ZSwgMSk7CiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOworCisJCQllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKwogCQkJZXJyID0gYnRyZnNfaW5zZXJ0X2ZpbGVfZXh0ZW50KHRyYW5zLCByb290LAogCQkJCQlpbm9kZS0+aV9pbm8sIGN1cl9vZmZzZXQsIDAsCiAJCQkJCTAsIGhvbGVfc2l6ZSwgMCwgaG9sZV9zaXplLAogCQkJCQkwLCAwLCAwKTsKIAkJCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBob2xlX3N0YXJ0LAogCQkJCQlsYXN0X2J5dGUgLSAxLCAwKTsKKwkJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxKTsKIAkJfQogCQlmcmVlX2V4dGVudF9tYXAoZW0pOwogCQljdXJfb2Zmc2V0ID0gbGFzdF9ieXRlOwpAQCAtMzM1Myw2ICszNTUxLDcgQEAKIAliaS0+Z2VuZXJhdGlvbiA9IDA7CiAJYmktPnNlcXVlbmNlID0gMDsKIAliaS0+bGFzdF90cmFucyA9IDA7CisJYmktPmxhc3Rfc3ViX3RyYW5zID0gMDsKIAliaS0+bG9nZ2VkX3RyYW5zID0gMDsKIAliaS0+ZGVsYWxsb2NfYnl0ZXMgPSAwOwogCWJpLT5yZXNlcnZlZF9ieXRlcyA9IDA7CkBAIC0zNTAzLDEyICszNzAyLDE0IEBACiB7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3Q7CiAKLQlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkKLQkJcmV0dXJuIDA7CisJaWYgKCFkZW50cnktPmRfaW5vZGUgJiYgIUlTX1JPT1QoZGVudHJ5KSkKKwkJZGVudHJ5ID0gZGVudHJ5LT5kX3BhcmVudDsKIAotCXJvb3QgPSBCVFJGU19JKGRlbnRyeS0+ZF9pbm9kZSktPnJvb3Q7Ci0JaWYgKGJ0cmZzX3Jvb3RfcmVmcygmcm9vdC0+cm9vdF9pdGVtKSA9PSAwKQotCQlyZXR1cm4gMTsKKwlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CisJCXJvb3QgPSBCVFJGU19JKGRlbnRyeS0+ZF9pbm9kZSktPnJvb3Q7CisJCWlmIChidHJmc19yb290X3JlZnMoJnJvb3QtPnJvb3RfaXRlbSkgPT0gMCkKKwkJCXJldHVybiAxOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzk5MCwxMSArNDE5MSwxOCBAQAogCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMiBmb3IgaW5vZGUgaXRlbSBhbmQgcmVmCisJICogMiBmb3IgZGlyIGl0ZW1zCisJICogMSBmb3IgeGF0dHIgaWYgc2VsaW51eCBpcyBvbgorCSAqLworCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlyZXR1cm4gZXJyOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoIXRyYW5zKQorCQlnb3RvIGZhaWw7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX29iamVjdGlkKHRyYW5zLCByb290LCBkaXItPmlfaW5vLCAmb2JqZWN0aWQpOwpAQCAtNDAzMiw2ICs0MjQwLDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogZmFpbDoKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGRyb3BfaW5vZGUpIHsKIAkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCQlpcHV0KGlub2RlKTsKQEAgLTQwNTIsMTAgKzQyNjEsMTggQEAKIAl1NjQgb2JqZWN0aWQ7CiAJdTY0IGluZGV4ID0gMDsKIAotCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAyIGZvciBpbm9kZSBpdGVtIGFuZCByZWYKKwkgKiAyIGZvciBkaXIgaXRlbXMKKwkgKiAxIGZvciB4YXR0ciBpZiBzZWxpbnV4IGlzIG9uCisJICovCisJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBlcnI7CisKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmICghdHJhbnMpCisJCWdvdG8gZmFpbDsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKIAllcnIgPSBidHJmc19maW5kX2ZyZWVfb2JqZWN0aWQodHJhbnMsIHJvb3QsIGRpci0+aV9pbm8sICZvYmplY3RpZCk7CkBAIC00MDk2LDYgKzQzMTMsNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiBmYWlsOgorCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZHJvcF9pbm9kZSkgewogCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwpAQCAtNDExOCwxMCArNDMzNiwxNiBAQAogCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWJ0cmZzX2luY19ubGluayhpbm9kZSk7Ci0JZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIDEgaXRlbSBmb3IgaW5vZGUgcmVmCisJICogMiBpdGVtcyBmb3IgZGlyIGl0ZW1zCisJICovCisJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAzKTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBlcnI7CisKKwlidHJmc19pbmNfbmxpbmsoaW5vZGUpOworCiAJZXJyID0gYnRyZnNfc2V0X2lub2RlX2luZGV4KGRpciwgJmluZGV4KTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw7CkBAIC00MTQ1LDYgKzQzNjksNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiBmYWlsOgorCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAzKTsKIAlpZiAoZHJvcF9pbm9kZSkgewogCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwpAQCAtNDE2NCwxNyArNDM4OSwyMSBAQAogCXU2NCBpbmRleCA9IDA7CiAJdW5zaWduZWQgbG9uZyBuciA9IDE7CiAKLQllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMiBpdGVtcyBmb3IgaW5vZGUgYW5kIHJlZgorCSAqIDIgaXRlbXMgZm9yIGRpciBpdGVtcworCSAqIDEgZm9yIHhhdHRyIGlmIHNlbGludXggaXMgb24KKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X3VubG9jazsKKwkJcmV0dXJuIGVycjsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwotCi0JaWYgKElTX0VSUih0cmFucykpIHsKLQkJZXJyID0gUFRSX0VSUih0cmFucyk7CisJaWYgKCF0cmFucykgeworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQorCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9vYmplY3RpZCh0cmFucywgcm9vdCwgZGlyLT5pX2lubywgJm9iamVjdGlkKTsKIAlpZiAoZXJyKSB7CkBAIC00MjIzLDYgKzQ0NTIsNyBAQAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiAKIG91dF91bmxvY2s6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChkcm9wX29uX2VycikKIAkJaXB1dChpbm9kZSk7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CkBAIC00Njg0LDcgKzQ5MTQsOCBAQAogCQkgKi8KIAkJY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKIAkJCQkgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwKLQkJCQkgRVhURU5UX0xPQ0tFRCwgMSwgMCwgTlVMTCwgR0ZQX05PRlMpOworCQkJCSBFWFRFTlRfTE9DS0VEIHwgRVhURU5UX0RPX0FDQ09VTlRJTkcsIDEsIDAsCisJCQkJIE5VTEwsIEdGUF9OT0ZTKTsKIAkJLyoKIAkJICogd2hvZXZlciBjbGVhcmVkIHRoZSBwcml2YXRlIGJpdCBpcyByZXNwb25zaWJsZQogCQkgKiBmb3IgdGhlIGZpbmlzaF9vcmRlcmVkX2lvCkBAIC00Njk3LDggKzQ5MjgsOCBAQAogCQlsb2NrX2V4dGVudCh0cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCX0KIAljbGVhcl9leHRlbnRfYml0KHRyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLAotCQkgRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQywKLQkJIDEsIDEsIE5VTEwsIEdGUF9OT0ZTKTsKKwkJIEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfAorCQkgRVhURU5UX0RPX0FDQ09VTlRJTkcsIDEsIDEsIE5VTEwsIEdGUF9OT0ZTKTsKIAlfX2J0cmZzX3JlbGVhc2VwYWdlKHBhZ2UsIEdGUF9OT0ZTKTsKIAogCUNsZWFyUGFnZUNoZWNrZWQocGFnZSk7CkBAIC00NzQ3LDYgKzQ5NzgsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOworCWlmIChyZXQpIHsKKwkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisJCWdvdG8gb3V0OworCX0KKwogCXJldCA9IFZNX0ZBVUxUX05PUEFHRTsgLyogbWFrZSB0aGUgVk0gcmV0cnkgdGhlIGZhdWx0ICovCiBhZ2FpbjoKIAlsb2NrX3BhZ2UocGFnZSk7CkBAIC00Nzc4LDcgKzUwMTYsMjQgQEAKIAkJZ290byBhZ2FpbjsKIAl9CiAKLQlidHJmc19zZXRfZXh0ZW50X2RlbGFsbG9jKGlub2RlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCk7CisJLyoKKwkgKiBYWFggLSBwYWdlX21rd3JpdGUgZ2V0cyBjYWxsZWQgZXZlcnkgdGltZSB0aGUgcGFnZSBpcyBkaXJ0aWVkLCBldmVuCisJICogaWYgaXQgd2FzIGFscmVhZHkgZGlydHksIHNvIGZvciBzcGFjZSBhY2NvdW50aW5nIHJlYXNvbnMgd2UgbmVlZCB0bworCSAqIGNsZWFyIGFueSBkZWxhbGxvYyBiaXRzIGZvciB0aGUgcmFuZ2Ugd2UgYXJlIGZpeGluZyB0byBzYXZlLiAgVGhlcmUKKwkgKiBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcywgYnV0IGZvciBub3cga2VlcCBjb25zaXN0ZW50IHdpdGgKKwkgKiBwcmVwYXJlX3BhZ2VzIGluIHRoZSBub3JtYWwgd3JpdGUgcGF0aC4KKwkgKi8KKwljbGVhcl9leHRlbnRfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLAorCQkJICBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfCBFWFRFTlRfRE9fQUNDT1VOVElORywKKwkJCSAgR0ZQX05PRlMpOworCisJcmV0ID0gYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQpOworCWlmIChyZXQpIHsKKwkJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOworCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAlyZXQgPSAwOwogCiAJLyogcGFnZSBpcyB3aG9sbHkgb3IgcGFydGlhbGx5IGluc2lkZSBFT0YgKi8KQEAgLTQ3OTcsMTAgKzUwNTIsMTMgQEAKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAKLQlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24gKyAxOworCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbjsKKwlCVFJGU19JKGlub2RlKS0+bGFzdF9zdWJfdHJhbnMgPSBCVFJGU19JKGlub2RlKS0+cm9vdC0+bG9nX3RyYW5zaWQ7CisKIAl1bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLCBHRlBfTk9GUyk7CiAKIG91dF91bmxvY2s6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBWTV9GQVVMVF9MT0NLRUQ7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CkBAIC00ODIxLDcgKzUwNzksOSBAQAogCWlmIChJU19BUFBFTkQoaW5vZGUpIHx8IElTX0lNTVVUQUJMRShpbm9kZSkpCiAJCXJldHVybjsKIAotCWJ0cmZzX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7CisJcmV0ID0gYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CiAJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCBpbm9kZS0+aV9zaXplICYgKH5tYXNrKSwgKHU2NCktMSk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOwpAQCAtNDkxNiw3ICs1MTc2LDEyIEBACiAJaWYgKCFlaSkKIAkJcmV0dXJuIE5VTEw7CiAJZWktPmxhc3RfdHJhbnMgPSAwOworCWVpLT5sYXN0X3N1Yl90cmFucyA9IDA7CiAJZWktPmxvZ2dlZF90cmFucyA9IDA7CisJZWktPm91dHN0YW5kaW5nX2V4dGVudHMgPSAwOworCWVpLT5yZXNlcnZlZF9leHRlbnRzID0gMDsKKwllaS0+cm9vdCA9IE5VTEw7CisJc3Bpbl9sb2NrX2luaXQoJmVpLT5hY2NvdW50aW5nX2xvY2spOwogCWJ0cmZzX29yZGVyZWRfaW5vZGVfdHJlZV9pbml0KCZlaS0+b3JkZXJlZF90cmVlKTsKIAlJTklUX0xJU1RfSEVBRCgmZWktPmlfb3JwaGFuKTsKIAlJTklUX0xJU1RfSEVBRCgmZWktPm9yZGVyZWRfb3BlcmF0aW9ucyk7CkBAIC00OTMyLDYgKzUxOTcsMTQgQEAKIAlXQVJOX09OKGlub2RlLT5pX2RhdGEubnJwYWdlcyk7CiAKIAkvKgorCSAqIFRoaXMgY2FuIGhhcHBlbiB3aGVyZSB3ZSBjcmVhdGUgYW4gaW5vZGUsIGJ1dCBzb21lYm9keSBlbHNlIGFsc28KKwkgKiBjcmVhdGVkIHRoZSBzYW1lIGlub2RlIGFuZCB3ZSBuZWVkIHRvIGRlc3Ryb3kgdGhlIG9uZSB3ZSBhbHJlYWR5CisJICogY3JlYXRlZC4KKwkgKi8KKwlpZiAoIXJvb3QpCisJCWdvdG8gZnJlZTsKKworCS8qCiAJICogTWFrZSBzdXJlIHdlJ3JlIHByb3Blcmx5IHJlbW92ZWQgZnJvbSB0aGUgb3JkZXJlZCBvcGVyYXRpb24KIAkgKiBsaXN0cy4KIAkgKi8KQEAgLTQ5NjYsNiArNTIzOSw3IEBACiAJfQogCWlub2RlX3RyZWVfZGVsKGlub2RlKTsKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgMCwgKHU2NCktMSwgMCk7CitmcmVlOgogCWttZW1fY2FjaGVfZnJlZShidHJmc19pbm9kZV9jYWNoZXAsIEJUUkZTX0koaW5vZGUpKTsKIH0KIApAQCAtNTA3MCw3ICs1MzQ0LDE1IEBACiAJICAgIG5ld19pbm9kZS0+aV9zaXplID4gQlRSRlNfRU1QVFlfRElSX1NJWkUpCiAJCXJldHVybiAtRU5PVEVNUFRZOwogCi0JcmV0ID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIFdlIHdhbnQgdG8gcmVzZXJ2ZSB0aGUgYWJzb2x1dGUgd29yc3QgY2FzZSBhbW91bnQgb2YgaXRlbXMuICBTbyBpZgorCSAqIGJvdGggaW5vZGVzIGFyZSBzdWJ2b2xzIGFuZCB3ZSBuZWVkIHRvIHVubGluayB0aGVtIHRoZW4gdGhhdCB3b3VsZAorCSAqIHJlcXVpcmUgNCBpdGVtIG1vZGlmaWNhdGlvbnMsIGJ1dCBpZiB0aGV5IGFyZSBib3RoIG5vcm1hbCBpbm9kZXMgaXQKKwkgKiB3b3VsZCByZXF1aXJlIDUgaXRlbSBtb2RpZmljYXRpb25zLCBzbyB3ZSdsbCBhc3N1bWUgdGhlaXIgbm9ybWFsCisJICogaW5vZGVzLiAgU28gNSAqIDIgaXMgMTAsIHBsdXMgMSBmb3IgdGhlIG5ldyBsaW5rLCBzbyAxMSB0b3RhbCBpdGVtcworCSAqIHNob3VsZCBjb3ZlciB0aGUgd29yc3QgY2FzZSBudW1iZXIgb2YgaXRlbXMgd2UnbGwgbW9kaWZ5LgorCSAqLworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMTEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTUxODUsNiArNTQ2Nyw4IEBACiAKIAlpZiAob2xkX2lub2RlLT5pX2lubyA9PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKQogCQl1cF9yZWFkKCZyb290LT5mc19pbmZvLT5zdWJ2b2xfc2VtKTsKKworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxMSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTI1NiwxMSArNTU0MCwxOCBAQAogCWlmIChuYW1lX2xlbiA+IEJUUkZTX01BWF9JTkxJTkVfREFUQV9TSVpFKHJvb3QpKQogCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAotCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAyIGl0ZW1zIGZvciBpbm9kZSBpdGVtIGFuZCByZWYKKwkgKiAyIGl0ZW1zIGZvciBkaXIgaXRlbXMKKwkgKiAxIGl0ZW0gZm9yIHhhdHRyIGlmIHNlbGludXggaXMgb24KKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZhaWw7CisJCXJldHVybiBlcnI7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmICghdHJhbnMpCisJCWdvdG8gb3V0X2ZhaWw7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX29iamVjdGlkKHRyYW5zLCByb290LCBkaXItPmlfaW5vLCAmb2JqZWN0aWQpOwpAQCAtNTM0MSw2ICs1NjMyLDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogb3V0X2ZhaWw6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChkcm9wX2lub2RlKSB7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CkBAIC01MzYyLDYgKzU2NTQsMTEgQEAKIAogCXdoaWxlIChudW1fYnl0ZXMgPiAwKSB7CiAJCWFsbG9jX3NpemUgPSBtaW4obnVtX2J5dGVzLCByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KTsKKworCQlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKIAkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9leHRlbnQodHJhbnMsIHJvb3QsIGFsbG9jX3NpemUsCiAJCQkJCSAgIHJvb3QtPnNlY3RvcnNpemUsIDAsIGFsbG9jX2hpbnQsCiAJCQkJCSAgICh1NjQpLTEsICZpbnMsIDEpOwpAQCAtNTM4MSw2ICs1Njc4LDcgQEAKIAkJbnVtX2J5dGVzIC09IGlucy5vZmZzZXQ7CiAJCWN1cl9vZmZzZXQgKz0gaW5zLm9mZnNldDsKIAkJYWxsb2NfaGludCA9IGlucy5vYmplY3RpZCArIGlucy5vZmZzZXQ7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxKTsKIAl9CiBvdXQ6CiAJaWYgKGN1cl9vZmZzZXQgPiBzdGFydCkgewpAQCAtNTU0NCw3ICs1ODQyLDcgQEAKIAkucGVybWlzc2lvbgk9IGJ0cmZzX3Blcm1pc3Npb24sCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19kaXJfZmlsZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZGlyX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IGJ0cmZzX3JlYWxfcmVhZGRpciwKQEAgLTU1NjYsNiArNTg2NCw4IEBACiAJLnJlYWRwYWdlX2lvX2ZhaWxlZF9ob29rID0gYnRyZnNfaW9fZmFpbGVkX2hvb2ssCiAJLnNldF9iaXRfaG9vayA9IGJ0cmZzX3NldF9iaXRfaG9vaywKIAkuY2xlYXJfYml0X2hvb2sgPSBidHJmc19jbGVhcl9iaXRfaG9vaywKKwkubWVyZ2VfZXh0ZW50X2hvb2sgPSBidHJmc19tZXJnZV9leHRlbnRfaG9vaywKKwkuc3BsaXRfZXh0ZW50X2hvb2sgPSBidHJmc19zcGxpdF9leHRlbnRfaG9vaywKIH07CiAKIC8qCkBAIC01NjMyLDYgKzU5MzIsNiBAQAogCS5yZW1vdmV4YXR0cgk9IGJ0cmZzX3JlbW92ZXhhdHRyLAogfTsKIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZQk9IGJ0cmZzX2RlbnRyeV9kZWxldGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggYTg1NzdhNy4uY2RiYjA1NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYworKysgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC0yMzksNyArMjM5LDEzIEBACiAJdTY0IGluZGV4ID0gMDsKIAl1bnNpZ25lZCBsb25nIG5yID0gMTsKIAotCXJldCA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAxIC0gaW5vZGUgaXRlbQorCSAqIDIgLSByZWZzCisJICogMSAtIHJvb3QgaXRlbQorCSAqIDIgLSBkaXIgaXRlbXMKKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTM0MCw2ICszNDYsOSBAQAogCWVyciA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJaWYgKGVyciAmJiAhcmV0KQogCQlyZXQgPSBlcnI7CisKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CisJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzU1LDE5ICszNjQsMjcgQEAKIAlpZiAoIXJvb3QtPnJlZl9jb3dzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAxIC0gaW5vZGUgaXRlbQorCSAqIDIgLSByZWZzCisJICogMSAtIHJvb3QgaXRlbQorCSAqIDIgLSBkaXIgaXRlbXMKKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbF91bmxvY2s7CiAKIAlwZW5kaW5nX3NuYXBzaG90ID0ga3phbGxvYyhzaXplb2YoKnBlbmRpbmdfc25hcHNob3QpLCBHRlBfTk9GUyk7CiAJaWYgKCFwZW5kaW5nX3NuYXBzaG90KSB7CiAJCXJldCA9IC1FTk9NRU07CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAJcGVuZGluZ19zbmFwc2hvdC0+bmFtZSA9IGttYWxsb2MobmFtZWxlbiArIDEsIEdGUF9OT0ZTKTsKIAlpZiAoIXBlbmRpbmdfc25hcHNob3QtPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJa2ZyZWUocGVuZGluZ19zbmFwc2hvdCk7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAJbWVtY3B5KHBlbmRpbmdfc25hcHNob3QtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwpAQCAtODEzLDYgKzgzMCw3IEBACiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyKSB7CisJCXNocmlua19kY2FjaGVfc2Iocm9vdC0+ZnNfaW5mby0+c2IpOwogCQlidHJmc19pbnZhbGlkYXRlX2lub2RlcyhkZXN0KTsKIAkJZF9kZWxldGUoZGVudHJ5KTsKIAl9CkBAIC0xMTA1LDggKzExMjMsMTAgQEAKIAkJCQkJZGF0YW8gKz0gb2ZmIC0ga2V5Lm9mZnNldDsKIAkJCQkJZGF0YWwgLT0gb2ZmIC0ga2V5Lm9mZnNldDsKIAkJCQl9Ci0JCQkJaWYgKGtleS5vZmZzZXQgKyBkYXRhbyArIGRhdGFsID4gb2ZmICsgbGVuKQotCQkJCQlkYXRhbCA9IG9mZiArIGxlbiAtIGtleS5vZmZzZXQgLSBkYXRhbzsKKworCQkJCWlmIChrZXkub2Zmc2V0ICsgZGF0YWwgPiBvZmYgKyBsZW4pCisJCQkJCWRhdGFsID0gb2ZmICsgbGVuIC0ga2V5Lm9mZnNldDsKKwogCQkJCS8qIGRpc2tvID09IDAgbWVhbnMgaXQncyBhIGhvbGUgKi8KIAkJCQlpZiAoIWRpc2tvKQogCQkJCQlkYXRhbyA9IDA7CkBAIC0xMjE1LDE1ICsxMjM1LDE1IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZkZW50cnkoZmlsZSktPmRfaW5vZGU7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCisJcmV0ID0gLUVQRVJNOwogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpIHsKLQkJcmV0ID0gLUVJTlBST0dSRVNTOwogCQlnb3RvIG91dDsKLQl9CisKKwlyZXQgPSAtRUlOUFJPR1JFU1M7CisJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBtbnRfd2FudF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKIAlpZiAocmV0KQpAQCAtMTIzMywxMiArMTI1MywxOSBAQAogCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMrKzsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAorCXJldCA9IC1FTk9NRU07CiAJdHJhbnMgPSBidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlpZiAodHJhbnMpCi0JCWZpbGUtPnByaXZhdGVfZGF0YSA9IHRyYW5zOwotCWVsc2UKLQkJcmV0ID0gLUVOT01FTTsKLQkvKnByaW50ayhLRVJOX0lORk8gImJ0cmZzX2lvY3RsX3RyYW5zX3N0YXJ0IG9uICVwXG4iLCBmaWxlKTsqLworCWlmICghdHJhbnMpCisJCWdvdG8gb3V0X2Ryb3A7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB0cmFuczsKKwlyZXR1cm4gMDsKKworb3V0X2Ryb3A6CisJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMtLTsKKwltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwltbnRfZHJvcF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI1NCwyNCArMTI4MSwyMCBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmZGVudHJ5KGZpbGUpLT5kX2lub2RlOwogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7Ci0JaW50IHJldCA9IDA7CiAKIAl0cmFucyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpZiAoIXRyYW5zKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCWlmICghdHJhbnMpCisJCXJldHVybiAtRUlOVkFMOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAKKwlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMtLTsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCW1udF9kcm9wX3dyaXRlKGZpbGUtPmZfcGF0aC5tbnQpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogbG9uZyBidHJmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50CmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCmluZGV4IGI1ZDZkMjQuLjU3OTliYzQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCkBAIC0zMDYsNiArMzA2LDEyIEBACiAJdHJlZS0+bGFzdCA9IE5VTEw7CiAJc2V0X2JpdChCVFJGU19PUkRFUkVEX0NPTVBMRVRFLCAmZW50cnktPmZsYWdzKTsKIAorCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMtLTsKKwlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhCVFJGU19JKGlub2RlKS0+cm9vdCwKKwkJCQkJICAgICAgaW5vZGUsIDEpOworCiAJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+cm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9leHRlbnRfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmZW50cnktPnJvb3RfZXh0ZW50X2xpc3QpOwogCkBAIC00NTgsNyArNDY0LDcgQEAKIAkgKiBzdGFydCBJTyBvbiBhbnkgZGlydHkgb25lcyBzbyB0aGUgd2FpdCBkb2Vzbid0IHN0YWxsIHdhaXRpbmcKIAkgKiBmb3IgcGRmbHVzaCB0byBmaW5kIHRoZW0KIAkgKi8KLQlidHJmc19mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBlbmQsIFdCX1NZTkNfQUxMKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIGVuZCk7CiAJaWYgKHdhaXQpIHsKIAkJd2FpdF9ldmVudChlbnRyeS0+d2FpdCwgdGVzdF9iaXQoQlRSRlNfT1JERVJFRF9DT01QTEVURSwKIAkJCQkJCSAmZW50cnktPmZsYWdzKSk7CkBAIC00ODgsMTcgKzQ5NCwxNSBAQAogCS8qIHN0YXJ0IElPIGFjcm9zcyB0aGUgcmFuZ2UgZmlyc3QgdG8gaW5zdGFudGlhdGUgYW55IGRlbGFsbG9jCiAJICogZXh0ZW50cwogCSAqLwotCWJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kLCBXQl9TWU5DX0FMTCk7CisJZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBvcmlnX2VuZCk7CiAKIAkvKiBUaGUgY29tcHJlc3Npb24gY29kZSB3aWxsIGxlYXZlIHBhZ2VzIGxvY2tlZCBidXQgcmV0dXJuIGZyb20KIAkgKiB3cml0ZXBhZ2Ugd2l0aG91dCBzZXR0aW5nIHRoZSBwYWdlIHdyaXRlYmFjay4gIFN0YXJ0aW5nIGFnYWluCiAJICogd2l0aCBXQl9TWU5DX0FMTCB3aWxsIGVuZCB1cCB3YWl0aW5nIGZvciB0aGUgSU8gdG8gYWN0dWFsbHkgc3RhcnQuCiAJICovCi0JYnRyZnNfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBzdGFydCwgb3JpZ19lbmQsIFdCX1NZTkNfQUxMKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kKTsKIAotCWJ0cmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywKLQkJCQkJICAgc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVCwKLQkJCQkJICAgb3JpZ19lbmQgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisJZmlsZW1hcF9mZGF0YXdhaXRfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kKTsKIAogCWVuZCA9IG9yaWdfZW5kOwogCWZvdW5kID0gMDsKQEAgLTcxNiw4OSArNzIwLDYgQEAKIH0KIAogCi0vKioKLSAqIHRha2VuIGZyb20gbW0vZmlsZW1hcC5jIGJlY2F1c2UgaXQgaXNuJ3QgZXhwb3J0ZWQKLSAqCi0gKiBfX2ZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZSAtIHN0YXJ0IHdyaXRlYmFjayBvbiBtYXBwaW5nIGRpcnR5IHBhZ2VzIGluIHJhbmdlCi0gKiBAbWFwcGluZzoJYWRkcmVzcyBzcGFjZSBzdHJ1Y3R1cmUgdG8gd3JpdGUKLSAqIEBzdGFydDoJb2Zmc2V0IGluIGJ5dGVzIHdoZXJlIHRoZSByYW5nZSBzdGFydHMKLSAqIEBlbmQ6CW9mZnNldCBpbiBieXRlcyB3aGVyZSB0aGUgcmFuZ2UgZW5kcyAoaW5jbHVzaXZlKQotICogQHN5bmNfbW9kZToJZW5hYmxlIHN5bmNocm9ub3VzIG9wZXJhdGlvbgotICoKLSAqIFN0YXJ0IHdyaXRlYmFjayBhZ2FpbnN0IGFsbCBvZiBhIG1hcHBpbmcncyBkaXJ0eSBwYWdlcyB0aGF0IGxpZQotICogd2l0aGluIHRoZSBieXRlIG9mZnNldHMgPHN0YXJ0LCBlbmQ+IGluY2x1c2l2ZS4KLSAqCi0gKiBJZiBzeW5jX21vZGUgaXMgV0JfU1lOQ19BTEwgdGhlbiB0aGlzIGlzIGEgImRhdGEgaW50ZWdyaXR5IiBvcGVyYXRpb24sIGFzCi0gKiBvcHBvc2VkIHRvIGEgcmVndWxhciBtZW1vcnkgY2xlYW5zaW5nIHdyaXRlYmFjay4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLSAqIHRoZXNlIHR3byBvcGVyYXRpb25zIGlzIHRoYXQgaWYgYSBkaXJ0eSBwYWdlL2J1ZmZlciBpcyBlbmNvdW50ZXJlZCwgaXQgbXVzdAotICogYmUgd2FpdGVkIHVwb24sIGFuZCBub3QganVzdCBza2lwcGVkIG92ZXIuCi0gKi8KLWludCBidHJmc19mZGF0YXdyaXRlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsCi0JCQkgICBsb2ZmX3QgZW5kLCBpbnQgc3luY19tb2RlKQotewotCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCS5zeW5jX21vZGUgPSBzeW5jX21vZGUsCi0JCS5ucl90b193cml0ZSA9IG1hcHBpbmctPm5ycGFnZXMgKiAyLAotCQkucmFuZ2Vfc3RhcnQgPSBzdGFydCwKLQkJLnJhbmdlX2VuZCA9IGVuZCwKLQl9OwotCXJldHVybiBidHJmc193cml0ZXBhZ2VzKG1hcHBpbmcsICZ3YmMpOwotfQotCi0vKioKLSAqIHRha2VuIGZyb20gbW0vZmlsZW1hcC5jIGJlY2F1c2UgaXQgaXNuJ3QgZXhwb3J0ZWQKLSAqCi0gKiB3YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlIC0gd2FpdCBmb3Igd3JpdGViYWNrIHRvIGNvbXBsZXRlCi0gKiBAbWFwcGluZzoJdGFyZ2V0IGFkZHJlc3Nfc3BhY2UKLSAqIEBzdGFydDoJYmVnaW5uaW5nIHBhZ2UgaW5kZXgKLSAqIEBlbmQ6CWVuZGluZyBwYWdlIGluZGV4Ci0gKgotICogV2FpdCBmb3Igd3JpdGViYWNrIHRvIGNvbXBsZXRlIGFnYWluc3QgcGFnZXMgaW5kZXhlZCBieSBzdGFydC0+ZW5kCi0gKiBpbmNsdXNpdmUKLSAqLwotaW50IGJ0cmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJICAgICAgIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kKQotewotCXN0cnVjdCBwYWdldmVjIHB2ZWM7Ci0JaW50IG5yX3BhZ2VzOwotCWludCByZXQgPSAwOwotCXBnb2ZmX3QgaW5kZXg7Ci0KLQlpZiAoZW5kIDwgc3RhcnQpCi0JCXJldHVybiAwOwotCi0JcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKLQlpbmRleCA9IHN0YXJ0OwotCXdoaWxlICgoaW5kZXggPD0gZW5kKSAmJgotCQkJKG5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXBfdGFnKCZwdmVjLCBtYXBwaW5nLCAmaW5kZXgsCi0JCQlQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSywKLQkJCW1pbihlbmQgLSBpbmRleCwgKHBnb2ZmX3QpUEFHRVZFQ19TSVpFLTEpICsgMSkpICE9IDApIHsKLQkJdW5zaWduZWQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOwotCi0JCQkvKiB1bnRpbCByYWRpeCB0cmVlIGxvb2t1cCBhY2NlcHRzIGVuZF9pbmRleCAqLwotCQkJaWYgKHBhZ2UtPmluZGV4ID4gZW5kKQotCQkJCWNvbnRpbnVlOwotCi0JCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwotCQkJaWYgKFBhZ2VFcnJvcihwYWdlKSkKLQkJCQlyZXQgPSAtRUlPOwotCQl9Ci0JCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7Ci0JCWNvbmRfcmVzY2hlZCgpOwotCX0KLQotCS8qIENoZWNrIGZvciBvdXRzdGFuZGluZyB3cml0ZSBlcnJvcnMgKi8KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFTX0VOT1NQQywgJm1hcHBpbmctPmZsYWdzKSkKLQkJcmV0ID0gLUVOT1NQQzsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFTX0VJTywgJm1hcHBpbmctPmZsYWdzKSkKLQkJcmV0ID0gLUVJTzsKLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBhZGQgYSBnaXZlbiBpbm9kZSB0byB0aGUgbGlzdCBvZiBpbm9kZXMgdGhhdCBtdXN0IGJlIGZ1bGx5IG9uCiAgKiBkaXNrIGJlZm9yZSBhIHRyYW5zYWN0aW9uIGNvbW1pdCBmaW5pc2hlcy4KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKaW5kZXggOTkzYTdlYS4uZjgyZTg3NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKKysrIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKQEAgLTE1MywxMCArMTUzLDYgQEAKIGludCBidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWQpOwogaW50IGJ0cmZzX2ZpbmRfb3JkZXJlZF9zdW0oc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG9mZnNldCwgdTY0IGRpc2tfYnl0ZW5yLCB1MzIgKnN1bSk7Ci1pbnQgYnRyZnNfd2FpdF9vbl9wYWdlX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCQkgICAgICAgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQpOwotaW50IGJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBzdGFydCwKLQkJCSAgIGxvZmZfdCBlbmQsIGludCBzeW5jX21vZGUpOwogaW50IGJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgbm9jb3dfb25seSk7CiBpbnQgYnRyZnNfcnVuX29yZGVyZWRfb3BlcmF0aW9ucyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IHdhaXQpOwogaW50IGJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwppbmRleCAzNjFhZDMyLi5jZmNjOTNjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMKKysrIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCkBAIC0zNTE4LDcgKzM1MTgsNyBAQAogCUJVR19PTighcmMtPmJsb2NrX2dyb3VwKTsKIAogCWJ0cmZzX2luaXRfd29ya2VycygmcmMtPndvcmtlcnMsICJyZWxvY2F0ZSIsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsIE5VTEwpOwogCiAJcmMtPmV4dGVudF9yb290ID0gZXh0ZW50X3Jvb3Q7CiAJYnRyZnNfcHJlcGFyZV9ibG9ja19ncm91cF9yZWxvY2F0aW9uKGV4dGVudF9yb290LCByYy0+YmxvY2tfZ3JvdXApOwpAQCAtMzcwMSw3ICszNzAxLDcgQEAKIAltYXBwaW5nX3RyZWVfaW5pdCgmcmMtPnJlbG9jX3Jvb3RfdHJlZSk7CiAJSU5JVF9MSVNUX0hFQUQoJnJjLT5yZWxvY19yb290cyk7CiAJYnRyZnNfaW5pdF93b3JrZXJzKCZyYy0+d29ya2VycywgInJlbG9jYXRlIiwKLQkJCSAgIHJvb3QtPmZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgcm9vdC0+ZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwgTlVMTCk7CiAJcmMtPmV4dGVudF9yb290ID0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3Q7CiAKIAlzZXRfcmVsb2NfY29udHJvbChyYyk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9yb290LXRyZWUuYyBiL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jCmluZGV4IDkzNTE0MjguLjY3ZmEyZDIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jCkBAIC0xNTksNyArMTU5LDYgQEAKIAl3cml0ZV9leHRlbnRfYnVmZmVyKGwsIGl0ZW0sIHB0ciwgc2l6ZW9mKCppdGVtKSk7CiAJYnRyZnNfbWFya19idWZmZXJfZGlydHkocGF0aC0+bm9kZXNbMF0pOwogb3V0OgotCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTMzMiw3ICszMzEsNiBAQAogCUJVR19PTihyZWZzICE9IDApOwogCXJldCA9IGJ0cmZzX2RlbF9pdGVtKHRyYW5zLCByb290LCBwYXRoKTsKIG91dDoKLQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuYwppbmRleCA2NzAzNTM4Li43NTJhNTQ2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCisrKyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTY2LDcgKzY2LDggQEAKIAlPcHRfZGVncmFkZWQsIE9wdF9zdWJ2b2wsIE9wdF9kZXZpY2UsIE9wdF9ub2RhdGFzdW0sIE9wdF9ub2RhdGFjb3csCiAJT3B0X21heF9leHRlbnQsIE9wdF9tYXhfaW5saW5lLCBPcHRfYWxsb2Nfc3RhcnQsIE9wdF9ub2JhcnJpZXIsCiAJT3B0X3NzZCwgT3B0X25vc3NkLCBPcHRfc3NkX3NwcmVhZCwgT3B0X3RocmVhZF9wb29sLCBPcHRfbm9hY2wsCi0JT3B0X2NvbXByZXNzLCBPcHRfbm90cmVlbG9nLCBPcHRfcmF0aW8sIE9wdF9mbHVzaG9uY29tbWl0LCBPcHRfZXJyLAorCU9wdF9jb21wcmVzcywgT3B0X25vdHJlZWxvZywgT3B0X3JhdGlvLCBPcHRfZmx1c2hvbmNvbW1pdCwKKwlPcHRfZGlzY2FyZCwgT3B0X2VyciwKIH07CiAKIHN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKQEAgLTg4LDYgKzg5LDcgQEAKIAl7T3B0X25vdHJlZWxvZywgIm5vdHJlZWxvZyJ9LAogCXtPcHRfZmx1c2hvbmNvbW1pdCwgImZsdXNob25jb21taXQifSwKIAl7T3B0X3JhdGlvLCAibWV0YWRhdGFfcmF0aW89JWQifSwKKwl7T3B0X2Rpc2NhcmQsICJkaXNjYXJkIn0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtMjU3LDYgKzI1OSw5IEBACiAJCQkJICAgICAgIGluZm8tPm1ldGFkYXRhX3JhdGlvKTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIE9wdF9kaXNjYXJkOgorCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIERJU0NBUkQpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMzQ0LDcgKzM0OSw5IEBACiAJc2ItPnNfZXhwb3J0X29wID0gJmJ0cmZzX2V4cG9ydF9vcHM7CiAJc2ItPnNfeGF0dHIgPSBidHJmc194YXR0cl9oYW5kbGVyczsKIAlzYi0+c190aW1lX2dyYW4gPSAxOworI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIAlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKKyNlbmRpZgogCiAJdHJlZV9yb290ID0gb3Blbl9jdHJlZShzYiwgZnNfZGV2aWNlcywgKGNoYXIgKilkYXRhKTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKaW5kZXggODhmODY2Zi4uYzIwN2U4YyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYworKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCkBAIC0xNjMsOCArMTYzLDE0IEBACiAJfQogfQogCitlbnVtIGJ0cmZzX3RyYW5zX3R5cGUgeworCVRSQU5TX1NUQVJULAorCVRSQU5TX0pPSU4sCisJVFJBTlNfVVNFUlNQQUNFLAorfTsKKwogc3RhdGljIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnN0YXJ0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQkgICAgIGludCBudW1fYmxvY2tzLCBpbnQgd2FpdCkKKwkJCQkJICAgICBpbnQgbnVtX2Jsb2NrcywgaW50IHR5cGUpCiB7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqaCA9CiAJCWttZW1fY2FjaGVfYWxsb2MoYnRyZnNfdHJhbnNfaGFuZGxlX2NhY2hlcCwgR0ZQX05PRlMpOwpAQCAtMTcyLDcgKzE3OCw4IEBACiAKIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJaWYgKCFyb290LT5mc19pbmZvLT5sb2dfcm9vdF9yZWNvdmVyaW5nICYmCi0JICAgICgod2FpdCA9PSAxICYmICFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSB8fCB3YWl0ID09IDIpKQorCSAgICAoKHR5cGUgPT0gVFJBTlNfU1RBUlQgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpIHx8CisJICAgICB0eXBlID09IFRSQU5TX1VTRVJTUEFDRSkpCiAJCXdhaXRfY3VycmVudF90cmFucyhyb290KTsKIAlyZXQgPSBqb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCUJVR19PTihyZXQpOwpAQCAtMTg2LDYgKzE5Myw5IEBACiAJaC0+YWxsb2NfZXhjbHVkZV9zdGFydCA9IDA7CiAJaC0+ZGVsYXllZF9yZWZfdXBkYXRlcyA9IDA7CiAKKwlpZiAoIWN1cnJlbnQtPmpvdXJuYWxfaW5mbyAmJiB0eXBlICE9IFRSQU5TX1VTRVJTUEFDRSkKKwkJY3VycmVudC0+am91cm5hbF9pbmZvID0gaDsKKwogCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPnVzZV9jb3VudCsrOwogCXJlY29yZF9yb290X2luX3RyYW5zKGgsIHJvb3QpOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwpAQCAtMTk1LDE4ICsyMDUsMTggQEAKIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkJICAgaW50IG51bV9ibG9ja3MpCiB7Ci0JcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9ibG9ja3MsIDEpOworCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyb290LCBudW1fYmxvY2tzLCBUUkFOU19TVEFSVCk7CiB9CiBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkJICAgaW50IG51bV9ibG9ja3MpCiB7Ci0JcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9ibG9ja3MsIDApOworCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyb290LCBudW1fYmxvY2tzLCBUUkFOU19KT0lOKTsKIH0KIAogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnIsCiAJCQkJCQkJIGludCBudW1fYmxvY2tzKQogewotCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyLCBudW1fYmxvY2tzLCAyKTsKKwlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ociwgbnVtX2Jsb2NrcywgVFJBTlNfVVNFUlNQQUNFKTsKIH0KIAogLyogd2FpdCBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgdG8gYmUgZnVsbHkgY29tcGxldGUgKi8KQEAgLTMxNyw2ICszMjcsOSBAQAogCQl3YWtlX3VwKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAltdXRleF91bmxvY2soJmluZm8tPnRyYW5zX211dGV4KTsKKworCWlmIChjdXJyZW50LT5qb3VybmFsX2luZm8gPT0gdHJhbnMpCisJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CiAJbWVtc2V0KHRyYW5zLCAwLCBzaXplb2YoKnRyYW5zKSk7CiAJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zX2hhbmRsZV9jYWNoZXAsIHRyYW5zKTsKIApAQCAtMzM4LDEwICszNTEsMTAgQEAKIC8qCiAgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgogICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCi0gKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKiB0aG9zZSBleHRlbnRzIGFyZSBzZW50IHRvIGRpc2sgYnV0IGRvZXMgbm90IHdhaXQgb24gdGhlbQogICovCi1pbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCitpbnQgYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKIHsKIAlpbnQgcmV0OwogCWludCBlcnIgPSAwOwpAQCAtMzg4LDYgKzQwMSwyOSBAQAogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQl9CiAJfQorCWlmIChlcnIpCisJCXdlcnIgPSBlcnI7CisJcmV0dXJuIHdlcnI7Cit9CisKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0LiAgV2Ugd2FpdAorICogb24gYWxsIHRoZSBwYWdlcyBhbmQgY2xlYXIgdGhlbSBmcm9tIHRoZSBkaXJ0eSBwYWdlcyBzdGF0ZSB0cmVlCisgKi8KK2ludCBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCBlcnIgPSAwOworCWludCB3ZXJyID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaW5vZGUgKmJ0cmVlX2lub2RlID0gcm9vdC0+ZnNfaW5mby0+YnRyZWVfaW5vZGU7CisJdTY0IHN0YXJ0ID0gMDsKKwl1NjQgZW5kOworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoZGlydHlfcGFnZXMsIDAsICZzdGFydCwgJmVuZCwKIAkJCQkJICAgIEVYVEVOVF9ESVJUWSk7CkBAIC00MTgsNiArNDU0LDIyIEBACiAJcmV0dXJuIHdlcnI7CiB9CiAKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKi8KK2ludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCByZXQyOworCisJcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMocm9vdCwgZGlydHlfcGFnZXMpOworCXJldDIgPSBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHJvb3QsIGRpcnR5X3BhZ2VzKTsKKwlyZXR1cm4gcmV0IHx8IHJldDI7Cit9CisKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KQogewpAQCAtNzQzLDYgKzc5NSw3IEBACiAJbWVtY3B5KCZwZW5kaW5nLT5yb290X2tleSwgJmtleSwgc2l6ZW9mKGtleSkpOwogZmFpbDoKIAlrZnJlZShuZXdfcm9vdF9pdGVtKTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA1OSw2ICsxMTEyLDkgQEAKIAogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCisJaWYgKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9PSB0cmFucykKKwkJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKKwogCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc19oYW5kbGVfY2FjaGVwLCB0cmFucyk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IDY2M2M2NzQuLmQ0ZTNlN2EgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtNzksNiArNzksNyBAQAogCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gdHJhbnMtPnRyYW5zYWN0aW9uLT50cmFuc2lkOworCUJUUkZTX0koaW5vZGUpLT5sYXN0X3N1Yl90cmFucyA9IEJUUkZTX0koaW5vZGUpLT5yb290LT5sb2dfdHJhbnNpZDsKIH0KIAogaW50IGJ0cmZzX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKQEAgLTEwNyw1ICsxMDgsOSBAQAogCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CitpbnQgYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpOworaW50IGJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpOwogaW50IGJ0cmZzX3RyYW5zYWN0aW9uX2luX2NvbW1pdChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IDc4Mjc4NDEuLjc0MTY2NmEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtMTM3LDExICsxMzcsMjAgQEAKIAogCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CiAJaWYgKHJvb3QtPmxvZ19yb290KSB7CisJCWlmICghcm9vdC0+bG9nX3N0YXJ0X3BpZCkgeworCQkJcm9vdC0+bG9nX3N0YXJ0X3BpZCA9IGN1cnJlbnQtPnBpZDsKKwkJCXJvb3QtPmxvZ19tdWx0aXBsZV9waWRzID0gZmFsc2U7CisJCX0gZWxzZSBpZiAocm9vdC0+bG9nX3N0YXJ0X3BpZCAhPSBjdXJyZW50LT5waWQpIHsKKwkJCXJvb3QtPmxvZ19tdWx0aXBsZV9waWRzID0gdHJ1ZTsKKwkJfQorCiAJCXJvb3QtPmxvZ19iYXRjaCsrOwogCQlhdG9taWNfaW5jKCZyb290LT5sb2dfd3JpdGVycyk7CiAJCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQorCXJvb3QtPmxvZ19tdWx0aXBsZV9waWRzID0gZmFsc2U7CisJcm9vdC0+bG9nX3N0YXJ0X3BpZCA9IGN1cnJlbnQtPnBpZDsKIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmVlX2xvZ19tdXRleCk7CiAJaWYgKCFyb290LT5mc19pbmZvLT5sb2dfcm9vdF90cmVlKSB7CiAJCXJldCA9IGJ0cmZzX2luaXRfbG9nX3Jvb3RfdHJlZSh0cmFucywgcm9vdC0+ZnNfaW5mbyk7CkBAIC0xOTcxLDYgKzE5ODAsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKmxvZyA9IHJvb3QtPmxvZ19yb290OwogCXN0cnVjdCBidHJmc19yb290ICpsb2dfcm9vdF90cmVlID0gcm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfdHJlZTsKKwl1NjQgbG9nX3RyYW5zaWQgPSAwOwogCiAJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAlpbmRleDEgPSByb290LT5sb2dfdHJhbnNpZCAlIDI7CkBAIC0xOTg3LDEwICsxOTk3LDExIEBACiAKIAl3aGlsZSAoMSkgewogCQl1bnNpZ25lZCBsb25nIGJhdGNoID0gcm9vdC0+bG9nX2JhdGNoOwotCQltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7Ci0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwotCQltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwotCisJCWlmIChyb290LT5sb2dfbXVsdGlwbGVfcGlkcykgeworCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOworCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJCQltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOworCQl9CiAJCXdhaXRfZm9yX3dyaXRlcih0cmFucywgcm9vdCk7CiAJCWlmIChiYXRjaCA9PSByb290LT5sb2dfYmF0Y2gpCiAJCQlicmVhazsKQEAgLTIwMDMsMTQgKzIwMTQsMTkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOworCS8qIHdlIHN0YXJ0IElPIG9uICBhbGwgdGhlIG1hcmtlZCBleHRlbnRzIGhlcmUsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQorCSAqIHdhaXQgZm9yIHRoZW0gdW50aWwgbGF0ZXIuCisJICovCisJcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOwogCUJVR19PTihyZXQpOwogCiAJYnRyZnNfc2V0X3Jvb3Rfbm9kZSgmbG9nLT5yb290X2l0ZW0sIGxvZy0+bm9kZSk7CiAKIAlyb290LT5sb2dfYmF0Y2ggPSAwOworCWxvZ190cmFuc2lkID0gcm9vdC0+bG9nX3RyYW5zaWQ7CiAJcm9vdC0+bG9nX3RyYW5zaWQrKzsKIAlsb2ctPmxvZ190cmFuc2lkID0gcm9vdC0+bG9nX3RyYW5zaWQ7CisJcm9vdC0+bG9nX3N0YXJ0X3BpZCA9IDA7CiAJc21wX21iKCk7CiAJLyoKIAkgKiBsb2cgdHJlZSBoYXMgYmVlbiBmbHVzaGVkIHRvIGRpc2ssIG5ldyBtb2RpZmljYXRpb25zIG9mCkBAIC0yMDM2LDYgKzIwNTIsNyBAQAogCiAJaW5kZXgyID0gbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQgJSAyOwogCWlmIChhdG9taWNfcmVhZCgmbG9nX3Jvb3RfdHJlZS0+bG9nX2NvbW1pdFtpbmRleDJdKSkgeworCQlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAkJd2FpdF9sb2dfY29tbWl0KHRyYW5zLCBsb2dfcm9vdF90cmVlLAogCQkJCWxvZ19yb290X3RyZWUtPmxvZ190cmFuc2lkKTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2dfcm9vdF90cmVlLT5sb2dfbXV0ZXgpOwpAQCAtMjA1NSw2ICsyMDcyLDcgQEAKIAkgKiBjaGVjayB0aGUgZnVsbCBjb21taXQgZmxhZyBhZ2FpbgogCSAqLwogCWlmIChyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9PSB0cmFucy0+dHJhbnNpZCkgeworCQlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2dfcm9vdF90cmVlLT5sb2dfbXV0ZXgpOwogCQlyZXQgPSAtRUFHQUlOOwogCQlnb3RvIG91dF93YWtlX2xvZ19yb290OwpAQCAtMjA2Myw2ICsyMDgxLDcgQEAKIAlyZXQgPSBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2dfcm9vdF90cmVlLAogCQkJCSZsb2dfcm9vdF90cmVlLT5kaXJ0eV9sb2dfcGFnZXMpOwogCUJVR19PTihyZXQpOworCWJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOwogCiAJYnRyZnNfc2V0X3N1cGVyX2xvZ19yb290KCZyb290LT5mc19pbmZvLT5zdXBlcl9mb3JfY29tbWl0LAogCQkJCWxvZ19yb290X3RyZWUtPm5vZGUtPnN0YXJ0KTsKQEAgLTIwODIsOSArMjEwMSwxNCBAQAogCSAqIHRoZSBydW5uaW5nIHRyYW5zYWN0aW9uIG9wZW4sIHNvIGEgZnVsbCBjb21taXQgY2FuJ3QgaG9wCiAJICogaW4gYW5kIGNhdXNlIHByb2JsZW1zIGVpdGhlci4KIAkgKi8KLQl3cml0ZV9jdHJlZV9zdXBlcih0cmFucywgcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LCAyKTsKKwl3cml0ZV9jdHJlZV9zdXBlcih0cmFucywgcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LCAxKTsKIAlyZXQgPSAwOwogCisJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlpZiAocm9vdC0+bGFzdF9sb2dfY29tbWl0IDwgbG9nX3RyYW5zaWQpCisJCXJvb3QtPmxhc3RfbG9nX2NvbW1pdCA9IGxvZ190cmFuc2lkOworCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwogb3V0X3dha2VfbG9nX3Jvb3Q6CiAJYXRvbWljX3NldCgmbG9nX3Jvb3RfdHJlZS0+bG9nX2NvbW1pdFtpbmRleDJdLCAwKTsKIAlzbXBfbWIoKTsKQEAgLTI4NTIsNiArMjg3NiwyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgaW5vZGVfaW5fbG9nKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlpZiAoQlRSRlNfSShpbm9kZSktPmxvZ2dlZF90cmFucyA9PSB0cmFucy0+dHJhbnNpZCAmJgorCSAgICBCVFJGU19JKGlub2RlKS0+bGFzdF9zdWJfdHJhbnMgPD0gcm9vdC0+bGFzdF9sb2dfY29tbWl0KQorCQlyZXQgPSAxOworCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKIC8qCiAgKiBoZWxwZXIgZnVuY3Rpb24gYXJvdW5kIGJ0cmZzX2xvZ19pbm9kZSB0byBtYWtlIHN1cmUgbmV3bHkgY3JlYXRlZAogICogcGFyZW50IGRpcmVjdG9yaWVzIGFsc28gZW5kIHVwIGluIHRoZSBsb2cuICBBIG1pbmltYWwgaW5vZGUgYW5kIGJhY2tyZWYKQEAgLTI4OTEsNiArMjkzMCwxMSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZW5kX25vX3RyYW5zOwogCisJaWYgKGlub2RlX2luX2xvZyh0cmFucywgaW5vZGUpKSB7CisJCXJldCA9IEJUUkZTX05PX0xPR19TWU5DOworCQlnb3RvIGVuZF9ub190cmFuczsKKwl9CisKIAlzdGFydF9sb2dfdHJhbnModHJhbnMsIHJvb3QpOwogCiAJcmV0ID0gYnRyZnNfbG9nX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSwgaW5vZGVfb25seSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5oIGIvZnMvYnRyZnMvdHJlZS1sb2cuaAppbmRleCBkMDljNzYwLi4wNzc2ZWFjIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5oCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmgKQEAgLTE5LDYgKzE5LDkgQEAKICNpZm5kZWYgX19UUkVFX0xPR18KICNkZWZpbmUgX19UUkVFX0xPR18KIAorLyogcmV0dXJuIHZhbHVlIGZvciBidHJmc19sb2dfZGVudHJ5X3NhZmUgdGhhdCBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIGxvZyBpdCBhdCBhbGwgKi8KKyNkZWZpbmUgQlRSRlNfTk9fTE9HX1NZTkMgMjU2CisKIGludCBidHJmc19zeW5jX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogaW50IGJ0cmZzX2ZyZWVfbG9nKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggMjNlN2QzNi4uN2VkYTQ4MyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtNDQ2LDggKzQ0NiwxMCBAQAogCQkJZ290byBlcnJvcjsKIAogCQlkZXZpY2UtPm5hbWUgPSBrc3RyZHVwKG9yaWdfZGV2LT5uYW1lLCBHRlBfTk9GUyk7Ci0JCWlmICghZGV2aWNlLT5uYW1lKQorCQlpZiAoIWRldmljZS0+bmFtZSkgeworCQkJa2ZyZWUoZGV2aWNlKTsKIAkJCWdvdG8gZXJyb3I7CisJCX0KIAogCQlkZXZpY2UtPmRldmlkID0gb3JpZ19kZXYtPmRldmlkOwogCQlkZXZpY2UtPndvcmsuZnVuYyA9IHBlbmRpbmdfYmlvc19mbjsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3hhdHRyLmMgYi9mcy9idHJmcy94YXR0ci5jCmluZGV4IGE5ZDNiZjQuLmI2ZGQ1OTYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3hhdHRyLmMKKysrIGIvZnMvYnRyZnMveGF0dHIuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAgKiBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGRpcmVjdGx5LgogICovCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqYnRyZnNfeGF0dHJfaGFuZGxlcnNbXSA9IHsKLSNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCisjaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAogCSZidHJmc194YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXIsCiAJJmJ0cmZzX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggMjRhZmQ3NC4uNmZhNTMwMiAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTI4MCw3ICsyODAsNyBAQAogRVhQT1JUX1NZTUJPTChpbnZhbGlkYXRlX2JkZXYpOwogCiAvKgotICogS2ljayBwZGZsdXNoIHRoZW4gdHJ5IHRvIGZyZWUgdXAgc29tZSBaT05FX05PUk1BTCBtZW1vcnkuCisgKiBLaWNrIHRoZSB3cml0ZWJhY2sgdGhyZWFkcyB0aGVuIHRyeSB0byBmcmVlIHVwIHNvbWUgWk9ORV9OT1JNQUwgbWVtb3J5LgogICovCiBzdGF0aWMgdm9pZCBmcmVlX21vcmVfbWVtb3J5KHZvaWQpCiB7CkBAIC0xNzA5LDkgKzE3MDksOSBAQAogCQkvKgogCQkgKiBJZiBpdCdzIGEgZnVsbHkgbm9uLWJsb2NraW5nIHdyaXRlIGF0dGVtcHQgYW5kIHdlIGNhbm5vdAogCQkgKiBsb2NrIHRoZSBidWZmZXIgdGhlbiByZWRpcnR5IHRoZSBwYWdlLiAgTm90ZSB0aGF0IHRoaXMgY2FuCi0JCSAqIHBvdGVudGlhbGx5IGNhdXNlIGEgYnVzeS13YWl0IGxvb3AgZnJvbSBwZGZsdXNoIGFuZCBrc3dhcGQKLQkJICogYWN0aXZpdHksIGJ1dCB0aG9zZSBjb2RlIHBhdGhzIGhhdmUgdGhlaXIgb3duIGhpZ2hlci1sZXZlbAotCQkgKiB0aHJvdHRsaW5nLgorCQkgKiBwb3RlbnRpYWxseSBjYXVzZSBhIGJ1c3ktd2FpdCBsb29wIGZyb20gd3JpdGViYWNrIHRocmVhZHMKKwkJICogYW5kIGtzd2FwZCBhY3Rpdml0eSwgYnV0IHRob3NlIGNvZGUgcGF0aHMgaGF2ZSB0aGVpciBvd24KKwkJICogaGlnaGVyLWxldmVsIHRocm90dGxpbmcuCiAJCSAqLwogCQlpZiAod2JjLT5zeW5jX21vZGUgIT0gV0JfU1lOQ19OT05FIHx8ICF3YmMtPm5vbmJsb2NraW5nKSB7CiAJCQlsb2NrX2J1ZmZlcihiaCk7CkBAIC0zMjA4LDcgKzMyMDgsNyBAQAogICogc3RpbGwgcnVubmluZyBvYnNvbGV0ZSBmbHVzaCBkYWVtb25zLCBzbyB3ZSB0ZXJtaW5hdGUgdGhlbSBoZXJlLgogICoKICAqIFVzZSBvZiBiZGZsdXNoKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIGtlcm5lbC4KLSAqIFRoZSBgcGRmbHVzaCcga2VybmVsIHRocmVhZHMgZnVsbHkgcmVwbGFjZSBiZGZsdXNoIGRhZW1vbnMgYW5kIHRoaXMgY2FsbC4KKyAqIFRoZSBgZmx1c2gtWCcga2VybmVsIHRocmVhZHMgZnVsbHkgcmVwbGFjZSBiZGZsdXNoIGRhZW1vbnMgYW5kIHRoaXMgY2FsbC4KICAqLwogU1lTQ0FMTF9ERUZJTkUyKGJkZmx1c2gsIGludCwgZnVuYywgbG9uZywgZGF0YSkKIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCA2OTk0YTBmLi44MGYzNTI1IDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCXRyaXN0YXRlICJDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSwgU01CRlMgc3VjY2Vzc29yKSIKIAlkZXBlbmRzIG9uIElORVQKIAlzZWxlY3QgTkxTCisJc2VsZWN0IFNMT1dfV09SSwogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGNsaWVudCBWRlMgbW9kdWxlIGZvciB0aGUgQ29tbW9uIEludGVybmV0IEZpbGUgU3lzdGVtCiAJICAoQ0lGUykgcHJvdG9jb2wgd2hpY2ggaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgU2VydmVyIE1lc3NhZ2UgQmxvY2sKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDkwYzViMzkuLjlhNWU0ZjUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNjQsOSArNjQsNiBAQAogdW5zaWduZWQgaW50IGV4dGVuZGVkX3NlY3VyaXR5ID0gQ0lGU1NFQ19ERUY7CiAvKiB1bnNpZ25lZCBpbnQgbnRsbXYyX3N1cHBvcnQgPSAwOyAqLwogdW5zaWduZWQgaW50IHNpZ25fQ0lGU19QRFVzID0gMTsKLWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9wbG9ja1RocmVhZDsgLyogcmVtb3ZlIHNwYXJzZSB3YXJuaW5nICovCi1zdHJ1Y3QgdGFza19zdHJ1Y3QgKm9wbG9ja1RocmVhZCA9IE5VTEw7Ci0vKiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICogZG5vdGlmeVRocmVhZDsgcmVtb3ZlIHNwYXJzZSB3YXJuaW5nICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2lmc19zdXBlcl9vcHM7CiB1bnNpZ25lZCBpbnQgQ0lGU01heEJ1ZlNpemUgPSBDSUZTX01BWF9NU0dTSVpFOwogbW9kdWxlX3BhcmFtKENJRlNNYXhCdWZTaXplLCBpbnQsIDApOwpAQCAtOTcyLDg5ICs5NjksMTIgQEAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koY2lmc19vcGxvY2tfY2FjaGVwKTsKIH0KIAotc3RhdGljIGludCBjaWZzX29wbG9ja190aHJlYWQodm9pZCAqZHVtbXlhcmcpCi17Ci0Jc3RydWN0IG9wbG9ja19xX2VudHJ5ICpvcGxvY2tfaXRlbTsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCV9fdTE2ICBuZXRmaWQ7Ci0JaW50IHJjLCB3YWl0cmMgPSAwOwotCi0Jc2V0X2ZyZWV6YWJsZSgpOwotCWRvIHsKLQkJaWYgKHRyeV90b19mcmVlemUoKSkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fbG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci0JCWlmIChsaXN0X2VtcHR5KCZjaWZzX29wbG9ja19saXN0KSkgewotCQkJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCXNjaGVkdWxlX3RpbWVvdXQoMzkqSFopOwotCQl9IGVsc2UgewotCQkJb3Bsb2NrX2l0ZW0gPSBsaXN0X2VudHJ5KGNpZnNfb3Bsb2NrX2xpc3QubmV4dCwKLQkJCQkJCXN0cnVjdCBvcGxvY2tfcV9lbnRyeSwgcWhlYWQpOwotCQkJY0ZZSSgxLCAoImZvdW5kIG9wbG9jayBpdGVtIHRvIHdyaXRlIG91dCIpKTsKLQkJCXBUY29uID0gb3Bsb2NrX2l0ZW0tPnRjb247Ci0JCQlpbm9kZSA9IG9wbG9ja19pdGVtLT5waW5vZGU7Ci0JCQluZXRmaWQgPSBvcGxvY2tfaXRlbS0+bmV0ZmlkOwotCQkJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCQkJRGVsZXRlT3Bsb2NrUUVudHJ5KG9wbG9ja19pdGVtKTsKLQkJCS8qIGNhbiBub3QgZ3JhYiBpbm9kZSBzZW0gaGVyZSBzaW5jZSBpdCB3b3VsZAotCQkJCWRlYWRsb2NrIHdoZW4gb3Bsb2NrIHJlY2VpdmVkIG9uIGRlbGV0ZQotCQkJCXNpbmNlIHZmc191bmxpbmsgaG9sZHMgdGhlIGlfbXV0ZXggYWNyb3NzCi0JCQkJdGhlIGNhbGwgKi8KLQkJCS8qIG11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsqLwotCQkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLSNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKLQkJCQlpZiAoQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPT0gMCkKLQkJCQkJYnJlYWtfbGVhc2UoaW5vZGUsIEZNT0RFX1JFQUQpOwotCQkJCWVsc2UgaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlUmVhZCA9PSAwKQotCQkJCQlicmVha19sZWFzZShpbm9kZSwgRk1PREVfV1JJVEUpOwotI2VuZGlmCi0JCQkJcmMgPSBmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7Ci0JCQkJaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlUmVhZCA9PSAwKSB7Ci0JCQkJCXdhaXRyYyA9IGZpbGVtYXBfZmRhdGF3YWl0KAotCQkJCQkJCSAgICAgIGlub2RlLT5pX21hcHBpbmcpOwotCQkJCQlpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZShpbm9kZSk7Ci0JCQkJfQotCQkJCWlmIChyYyA9PSAwKQotCQkJCQlyYyA9IHdhaXRyYzsKLQkJCX0gZWxzZQotCQkJCXJjID0gMDsKLQkJCS8qIG11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOyovCi0JCQlpZiAocmMpCi0JCQkJQ0lGU19JKGlub2RlKS0+d3JpdGVfYmVoaW5kX3JjID0gcmM7Ci0JCQljRllJKDEsICgiT3Bsb2NrIGZsdXNoIGlub2RlICVwIHJjICVkIiwKLQkJCQlpbm9kZSwgcmMpKTsKLQotCQkJCS8qIHJlbGVhc2luZyBzdGFsZSBvcGxvY2sgYWZ0ZXIgcmVjZW50IHJlY29ubmVjdAotCQkJCW9mIHNtYiBzZXNzaW9uIHVzaW5nIGEgbm93IGluY29ycmVjdCBmaWxlCi0JCQkJaGFuZGxlIGlzIG5vdCBhIGRhdGEgaW50ZWdyaXR5IGlzc3VlIGJ1dCBkbwotCQkJCW5vdCBib3RoZXIgc2VuZGluZyBhbiBvcGxvY2sgcmVsZWFzZSBpZiBzZXNzaW9uCi0JCQkJdG8gc2VydmVyIHN0aWxsIGlzIGRpc2Nvbm5lY3RlZCBzaW5jZSBvcGxvY2sKLQkJCQlhbHJlYWR5IHJlbGVhc2VkIGJ5IHRoZSBzZXJ2ZXIgaW4gdGhhdCBjYXNlICovCi0JCQlpZiAoIXBUY29uLT5uZWVkX3JlY29ubmVjdCkgewotCQkJCXJjID0gQ0lGU1NNQkxvY2soMCwgcFRjb24sIG5ldGZpZCwKLQkJCQkJCTAgLyogbGVuICovICwgMCAvKiBvZmZzZXQgKi8sIDAsCi0JCQkJCQkwLCBMT0NLSU5HX0FORFhfT1BMT0NLX1JFTEVBU0UsCi0JCQkJCQlmYWxzZSAvKiB3YWl0IGZsYWcgKi8pOwotCQkJCWNGWUkoMSwgKCJPcGxvY2sgcmVsZWFzZSByYyA9ICVkIiwgcmMpKTsKLQkJCX0KLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlzY2hlZHVsZV90aW1lb3V0KDEpOyAgLyogeWllbGQgaW4gY2FzZSBxIHdlcmUgY29ycnVwdCAqLwotCQl9Ci0JfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfX2luaXQKIGluaXRfY2lmcyh2b2lkKQogewogCWludCByYyA9IDA7CiAJY2lmc19wcm9jX2luaXQoKTsKIAlJTklUX0xJU1RfSEVBRCgmY2lmc190Y3Bfc2VzX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZjaWZzX29wbG9ja19saXN0KTsKICNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKIAlJTklUX0xJU1RfSEVBRCgmR2xvYmFsRG5vdGlmeVJlcUxpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZHbG9iYWxEbm90aWZ5UnNwX1EpOwpAQCAtMTA4Myw3ICsxMDAzLDYgQEAKIAlyd2xvY2tfaW5pdCgmR2xvYmFsU01CU2VzbG9jayk7CiAJcndsb2NrX2luaXQoJmNpZnNfdGNwX3Nlc19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmR2xvYmFsTWlkX0xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjaWZzX29wbG9ja19sb2NrKTsKIAogCWlmIChjaWZzX21heF9wZW5kaW5nIDwgMikgewogCQljaWZzX21heF9wZW5kaW5nID0gMjsKQEAgLTExMTgsMTYgKzEwMzcsMTMgQEAKIAlpZiAocmMpCiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfa2V5X3R5cGU7CiAjZW5kaWYKLQlvcGxvY2tUaHJlYWQgPSBrdGhyZWFkX3J1bihjaWZzX29wbG9ja190aHJlYWQsIE5VTEwsICJjaWZzb3Bsb2NrZCIpOwotCWlmIChJU19FUlIob3Bsb2NrVGhyZWFkKSkgewotCQlyYyA9IFBUUl9FUlIob3Bsb2NrVGhyZWFkKTsKLQkJY0VSUk9SKDEsICgiZXJyb3IgJWQgY3JlYXRlIG9wbG9jayB0aHJlYWQiLCByYykpOwotCQlnb3RvIG91dF91bnJlZ2lzdGVyX2Rmc19rZXlfdHlwZTsKLQl9CisJcmMgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcigpOworCWlmIChyYykKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9yZXNvbHZlcl9rZXk7CiAKIAlyZXR1cm4gMDsKIAotIG91dF91bnJlZ2lzdGVyX2Rmc19rZXlfdHlwZToKKyBvdXRfdW5yZWdpc3Rlcl9yZXNvbHZlcl9rZXk6CiAjaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAogCXVucmVnaXN0ZXJfa2V5X3R5cGUoJmtleV90eXBlX2Ruc19yZXNvbHZlcik7CiAgb3V0X3VucmVnaXN0ZXJfa2V5X3R5cGU6CkBAIC0xMTY0LDcgKzEwODAsNiBAQAogCWNpZnNfZGVzdHJveV9pbm9kZWNhY2hlKCk7CiAJY2lmc19kZXN0cm95X21pZHMoKTsKIAljaWZzX2Rlc3Ryb3lfcmVxdWVzdF9idWZzKCk7Ci0Ja3RocmVhZF9zdG9wKG9wbG9ja1RocmVhZCk7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlIEZyZW5jaCA8c2ZyZW5jaEB1cy5pYm0uY29tPiIpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDZjZmM4MWEuLjVkMGZkZTEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvc2xvdy13b3JrLmg+CiAjaW5jbHVkZSAiY2lmc19mc19zYi5oIgogI2luY2x1ZGUgImNpZnNhY2wuaCIKIC8qCkBAIC0zNDYsMTQgKzM0NywxNiBAQAogCS8qIGxvY2sgc2NvcGUgaWQgKDAgaWYgbm9uZSkgKi8KIAlzdHJ1Y3QgZmlsZSAqcGZpbGU7IC8qIG5lZWRlZCBmb3Igd3JpdGVwYWdlICovCiAJc3RydWN0IGlub2RlICpwSW5vZGU7IC8qIG5lZWRlZCBmb3Igb3Bsb2NrIGJyZWFrICovCisJc3RydWN0IHZmc21vdW50ICptbnQ7CiAJc3RydWN0IG11dGV4IGxvY2tfbXV0ZXg7CiAJc3RydWN0IGxpc3RfaGVhZCBsbGlzdDsgLyogbGlzdCBvZiBieXRlIHJhbmdlIGxvY2tzIHdlIGhhdmUuICovCiAJYm9vbCBjbG9zZVBlbmQ6MTsJLyogZmlsZSBpcyBtYXJrZWQgdG8gY2xvc2UgKi8KIAlib29sIGludmFsaWRIYW5kbGU6MTsJLyogZmlsZSBjbG9zZWQgdmlhIHNlc3Npb24gYWJlbmQgKi8KLQlib29sIG1lc3NhZ2VNb2RlOjE7CS8qIGZvciBwaXBlczogbWVzc2FnZSB2cyBieXRlIG1vZGUgKi8KKwlib29sIG9wbG9ja19icmVha19jYW5jZWxsZWQ6MTsKIAlhdG9taWNfdCBjb3VudDsJCS8qIHJlZmVyZW5jZSBjb3VudCAqLwogCXN0cnVjdCBtdXRleCBmaF9tdXRleDsgLyogcHJldmVudHMgcmVvcGVuIHJhY2UgYWZ0ZXIgZGVhZCBzZXMqLwogCXN0cnVjdCBjaWZzX3NlYXJjaF9pbmZvIHNyY2hfaW5mOworCXN0cnVjdCBzbG93X3dvcmsgb3Bsb2NrX2JyZWFrOyAvKiBzbG93X3dvcmsgam9iIGZvciBvcGxvY2sgYnJlYWtzICovCiB9OwogCiAvKiBUYWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBmaWxlIHByaXZhdGUgZGF0YSAqLwpAQCAtMzY1LDggKzM2OCwxMCBAQAogLyogUmVsZWFzZSBhIHJlZmVyZW5jZSBvbiB0aGUgZmlsZSBwcml2YXRlIGRhdGEgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjaWZzRmlsZUluZm9fcHV0KHN0cnVjdCBjaWZzRmlsZUluZm8gKmNpZnNfZmlsZSkKIHsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2lmc19maWxlLT5jb3VudCkpCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNpZnNfZmlsZS0+Y291bnQpKSB7CisJCWlwdXQoY2lmc19maWxlLT5wSW5vZGUpOwogCQlrZnJlZShjaWZzX2ZpbGUpOworCX0KIH0KIAogLyoKQEAgLTM4Miw3ICszODcsNiBAQAogCXVuc2lnbmVkIGxvbmcgdGltZTsJLyogamlmZmllcyBvZiBsYXN0IHVwZGF0ZS9jaGVjayBvZiBpbm9kZSAqLwogCWJvb2wgY2xpZW50Q2FuQ2FjaGVSZWFkOjE7CS8qIHJlYWQgb3Bsb2NrICovCiAJYm9vbCBjbGllbnRDYW5DYWNoZUFsbDoxOwkvKiByZWFkIGFuZCB3cml0ZWJlaGluZCBvcGxvY2sgKi8KLQlib29sIG9wbG9ja1BlbmRpbmc6MTsKIAlib29sIGRlbGV0ZV9wZW5kaW5nOjE7CQkvKiBERUxFVEVfT05fQ0xPU0UgaXMgc2V0ICovCiAJdTY0ICBzZXJ2ZXJfZW9mOwkJLyogY3VycmVudCBmaWxlIHNpemUgb24gc2VydmVyICovCiAJdTY0ICB1bmlxdWVpZDsJCQkvKiBzZXJ2ZXIgaW5vZGUgbnVtYmVyICovCkBAIC01ODUsOSArNTg5LDkgQEAKICNkZWZpbmUgICBDSUZTU0VDX01VU1RfTEFOTUFOCTB4MTAwMTAKICNkZWZpbmUgICBDSUZTU0VDX01VU1RfUExOVFhUCTB4MjAwMjAKICNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKLSNkZWZpbmUgICBDSUZTU0VDX01BU0sgICAgICAgICAgMHhBRjBBRiAvKiBhbGxvd3Mgd2VhayBzZWN1cml0eSBidXQgYWxzbyBrcmI1ICovCisjZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4QkYwQkYgLyogYWxsb3dzIHdlYWsgc2VjdXJpdHkgYnV0IGFsc28ga3JiNSAqLwogI2Vsc2UKLSNkZWZpbmUgICBDSUZTU0VDX01BU0sgICAgICAgICAgMHhBNzBBNyAvKiBjdXJyZW50IGZsYWdzIHN1cHBvcnRlZCBpZiB3ZWFrICovCisjZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4QjcwQjcgLyogY3VycmVudCBmbGFncyBzdXBwb3J0ZWQgaWYgd2VhayAqLwogI2VuZGlmIC8qIFVQQ0FMTCAqLwogI2Vsc2UgLyogZG8gbm90IGFsbG93IHdlYWsgcHcgaGFzaCAqLwogI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTApAQCAtNjY5LDEyICs2NzMsNiBAQAogICovCiBHTE9CQUxfRVhURVJOIHJ3bG9ja190IEdsb2JhbFNNQlNlc2xvY2s7CiAKLS8qIEdsb2JhbCBsaXN0IG9mIG9wbG9ja3MgKi8KLUdMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBjaWZzX29wbG9ja19saXN0OwotCi0vKiBQcm90ZWN0cyB0aGUgY2lmc19vcGxvY2tfbGlzdCAqLwotR0xPQkFMX0VYVEVSTiBzcGlubG9ja190IGNpZnNfb3Bsb2NrX2xvY2s7Ci0KIC8qIE91dHN0YW5kaW5nIGRpciBub3RpZnkgcmVxdWVzdHMgKi8KIEdMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBHbG9iYWxEbm90aWZ5UmVxTGlzdDsKIC8qIERpck5vdGlmeSByZXNwb25zZSBxdWV1ZSAqLwpAQCAtNzI1LDMgKzcyMyw0IEBACiBHTE9CQUxfRVhURVJOIHVuc2lnbmVkIGludCBjaWZzX21pbl9zbWFsbDsgIC8qIG1pbiBzaXplIG9mIHNtYWxsIGJ1ZiBwb29sICovCiBHTE9CQUxfRVhURVJOIHVuc2lnbmVkIGludCBjaWZzX21heF9wZW5kaW5nOyAvKiBNQVggcmVxdWVzdHMgYXQgb25jZSB0byBzZXJ2ZXIqLwogCitleHRlcm4gY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgY2lmc19vcGxvY2tfYnJlYWtfb3BzOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggZGE4ZmJmNS4uNTY0NjcyNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC04NiwxOCArODYsMTcgQEAKIAkJCSAgICAgY29uc3QgaW50IHN0YWdlLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY3ApOwogZXh0ZXJuIF9fdTE2IEdldE5leHRNaWQoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKTsKLWV4dGVybiBzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKkFsbG9jT3Bsb2NrUUVudHJ5KHN0cnVjdCBpbm9kZSAqLCB1MTYsCi0JCQkJCQkgc3RydWN0IGNpZnNUY29uSW5mbyAqKTsKLWV4dGVybiB2b2lkIERlbGV0ZU9wbG9ja1FFbnRyeShzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKik7Ci1leHRlcm4gdm9pZCBEZWxldGVUY29uT3Bsb2NrUUVudHJpZXMoc3RydWN0IGNpZnNUY29uSW5mbyAqKTsKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgY2lmc19OVHRpbWVUb1VuaXgoX19sZTY0IHV0Y19uYW5vc2Vjb25kc19zaW5jZV8xNjAxKTsKIGV4dGVybiB1NjQgY2lmc19Vbml4VGltZVRvTlQoc3RydWN0IHRpbWVzcGVjKTsKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgY252cnREb3NVbml4VG0oX19sZTE2IGxlX2RhdGUsIF9fbGUxNiBsZV90aW1lLAogCQkJCSAgICAgIGludCBvZmZzZXQpOwogCitleHRlcm4gc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc19uZXdfZmlsZWluZm8oc3RydWN0IGlub2RlICpuZXdpbm9kZSwKKwkJCQlfX3UxNiBmaWxlSGFuZGxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQlzdHJ1Y3QgdmZzbW91bnQgKm1udCwgdW5zaWduZWQgaW50IG9mbGFncyk7CiBleHRlcm4gaW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKLQkJCSAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAotCQkJICAgaW50ICpwb3Bsb2NrLCBfX3UxNiAqcG5ldGZpZCwgaW50IHhpZCk7CisJCQkgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IG1vZGUsIGludCBvZmxhZ3MsCisJCQkgICBfX3UzMiAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpOwogZXh0ZXJuIHZvaWQgY2lmc191bml4X2Jhc2ljX3RvX2ZhdHRyKHN0cnVjdCBjaWZzX2ZhdHRyICpmYXR0ciwKIAkJCQkgICAgIEZJTEVfVU5JWF9CQVNJQ19JTkZPICppbmZvLAogCQkJCSAgICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYik7CkBAIC0zODksNCArMzg4LDUgQEAKIAkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNHZXRFeHRBdHRyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBpbnQgbmV0ZmlkLCBfX3U2NCAqcEV4dEF0dHJCaXRzLCBfX3U2NCAqcE1hc2spOworZXh0ZXJuIHZvaWQgY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYik7CiAjZW5kaWYJCQkvKiBfQ0lGU1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggMzAxZTMwNy4uOTQxNDQxZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTk0LDYgKzk0LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAxLCAmcFRjb24tPm9wZW5GaWxlTGlzdCkgewogCQlvcGVuX2ZpbGUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNpZnNGaWxlSW5mbywgdGxpc3QpOwogCQlvcGVuX2ZpbGUtPmludmFsaWRIYW5kbGUgPSB0cnVlOworCQlvcGVuX2ZpbGUtPm9wbG9ja19icmVha19jYW5jZWxsZWQgPSB0cnVlOwogCX0KIAl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCS8qIEJCIEFkZCBjYWxsIHRvIGludmFsaWRhdGVfaW5vZGVzKHNiKSBmb3IgYWxsIHN1cGVyYmxvY2tzIG1vdW50ZWQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggZDQ5NjgyNC4uNjNlYTgzZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTE1NzcsNyArMTU3Nyw4IEBACiAKIG91dF9lcnI6CiAJaWYgKHRjcF9zZXMpIHsKLQkJa2ZyZWUodGNwX3Nlcy0+aG9zdG5hbWUpOworCQlpZiAoIUlTX0VSUih0Y3Bfc2VzLT5ob3N0bmFtZSkpCisJCQlrZnJlZSh0Y3Bfc2VzLT5ob3N0bmFtZSk7CiAJCWlmICh0Y3Bfc2VzLT5zc29ja2V0KQogCQkJc29ja19yZWxlYXNlKHRjcF9zZXMtPnNzb2NrZXQpOwogCQlrZnJlZSh0Y3Bfc2VzKTsKQEAgLTE2NzAsNyArMTY3MSw2IEBACiAJQ0lGU1NNQlREaXMoeGlkLCB0Y29uKTsKIAlfRnJlZVhpZCh4aWQpOwogCi0JRGVsZXRlVGNvbk9wbG9ja1FFbnRyaWVzKHRjb24pOwogCXRjb25JbmZvRnJlZSh0Y29uKTsKIAljaWZzX3B1dF9zbWJfc2VzKHNlcyk7CiB9CkBAIC0yMjIwLDE2ICsyMjIwLDggQEAKIAkJICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwgY29uc3QgY2hhciAqZnVsbF9wYXRoKQogewogCWludCByYzsKLQlfX3U2NCBpbm9kZV9udW07CiAJRklMRV9BTExfSU5GTyAqcGZpbGVfaW5mbzsKIAotCXJjID0gQ0lGU0dldFNydklub2RlTnVtYmVyKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCAmaW5vZGVfbnVtLAotCQkJCSAgIGNpZnNfc2ItPmxvY2FsX25scywKLQkJCQkgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCi0JCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Ci0JaWYgKHJjICE9IC1FT1BOT1RTVVBQKQotCQlyZXR1cm4gcmM7Ci0KIAlwZmlsZV9pbmZvID0ga21hbGxvYyhzaXplb2YoRklMRV9BTExfSU5GTyksIEdGUF9LRVJORUwpOwogCWlmIChwZmlsZV9pbmZvID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kaXIuYyBiL2ZzL2NpZnMvZGlyLmMKaW5kZXggYTY0MjRjZi4uNjI3YTYwYSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kaXIuYworKysgYi9mcy9jaWZzL2Rpci5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSAiY2lmc2ZzLmgiCiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCkBAIC0xMjksNDQgKzEzMCw0NSBAQAogCXJldHVybiBmdWxsX3BhdGg7CiB9CiAKLXN0YXRpYyB2b2lkCi1jaWZzX2ZpbGxfZmlsZWluZm8oc3RydWN0IGlub2RlICpuZXdpbm9kZSwgX191MTYgZmlsZUhhbmRsZSwKLQkJCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sIGJvb2wgd3JpdGVfb25seSkKK3N0cnVjdCBjaWZzRmlsZUluZm8gKgorY2lmc19uZXdfZmlsZWluZm8oc3RydWN0IGlub2RlICpuZXdpbm9kZSwgX191MTYgZmlsZUhhbmRsZSwKKwkJICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZmc21vdW50ICptbnQsIHVuc2lnbmVkIGludCBvZmxhZ3MpCiB7CiAJaW50IG9wbG9jayA9IDA7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlOwogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlOworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKG1udC0+bW50X3NiKTsKIAogCXBDaWZzRmlsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaWZzRmlsZUluZm8pLCBHRlBfS0VSTkVMKTsKLQogCWlmIChwQ2lmc0ZpbGUgPT0gTlVMTCkKLQkJcmV0dXJuOworCQlyZXR1cm4gcENpZnNGaWxlOwogCiAJaWYgKG9wbG9ja0VuYWJsZWQpCiAJCW9wbG9jayA9IFJFUV9PUExPQ0s7CiAKIAlwQ2lmc0ZpbGUtPm5ldGZpZCA9IGZpbGVIYW5kbGU7CiAJcENpZnNGaWxlLT5waWQgPSBjdXJyZW50LT50Z2lkOwotCXBDaWZzRmlsZS0+cElub2RlID0gbmV3aW5vZGU7CisJcENpZnNGaWxlLT5wSW5vZGUgPSBpZ3JhYihuZXdpbm9kZSk7CisJcENpZnNGaWxlLT5tbnQgPSBtbnQ7CisJcENpZnNGaWxlLT5wZmlsZSA9IGZpbGU7CiAJcENpZnNGaWxlLT5pbnZhbGlkSGFuZGxlID0gZmFsc2U7CiAJcENpZnNGaWxlLT5jbG9zZVBlbmQgPSBmYWxzZTsKIAltdXRleF9pbml0KCZwQ2lmc0ZpbGUtPmZoX211dGV4KTsKIAltdXRleF9pbml0KCZwQ2lmc0ZpbGUtPmxvY2tfbXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZwQ2lmc0ZpbGUtPmxsaXN0KTsKIAlhdG9taWNfc2V0KCZwQ2lmc0ZpbGUtPmNvdW50LCAxKTsKKwlzbG93X3dvcmtfaW5pdCgmcENpZnNGaWxlLT5vcGxvY2tfYnJlYWssICZjaWZzX29wbG9ja19icmVha19vcHMpOwogCi0JLyogc2V0IHRoZSBmb2xsb3dpbmcgaW4gb3BlbiBub3cKLQkJCXBDaWZzRmlsZS0+cGZpbGUgPSBmaWxlOyAqLwogCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmdGNvbi0+b3BlbkZpbGVMaXN0KTsKKwlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJmNpZnNfc2ItPnRjb24tPm9wZW5GaWxlTGlzdCk7CiAJcENpZnNJbm9kZSA9IENJRlNfSShuZXdpbm9kZSk7CiAJaWYgKHBDaWZzSW5vZGUpIHsKIAkJLyogaWYgcmVhZGFibGUgZmlsZSBpbnN0YW5jZSBwdXQgZmlyc3QgaW4gbGlzdCovCi0JCWlmICh3cml0ZV9vbmx5KQorCQlpZiAob2ZsYWdzICYgRk1PREVfUkVBRCkKKwkJCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LCAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKKwkJZWxzZQogCQkJbGlzdF9hZGRfdGFpbCgmcENpZnNGaWxlLT5mbGlzdCwKIAkJCQkgICAgICAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKLQkJZWxzZQotCQkJbGlzdF9hZGQoJnBDaWZzRmlsZS0+Zmxpc3QsICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOwogCiAJCWlmICgob3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfRVhDTFVTSVZFKSB7CiAJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9IHRydWU7CkBAIC0xNzYsMTggKzE3OCwxOCBAQAogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IHRydWU7CiAJfQogCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisKKwlyZXR1cm4gcENpZnNGaWxlOwogfQogCiBpbnQgY2lmc19wb3NpeF9vcGVuKGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICoqcGlub2RlLAotCQkgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vZGUsIGludCBvZmxhZ3MsCi0JCSAgICBpbnQgKnBvcGxvY2ssIF9fdTE2ICpwbmV0ZmlkLCBpbnQgeGlkKQorCQkgICAgc3RydWN0IHZmc21vdW50ICptbnQsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAorCQkgICAgX191MzIgKnBvcGxvY2ssIF9fdTE2ICpwbmV0ZmlkLCBpbnQgeGlkKQogewogCWludCByYzsKLQlfX3UzMiBvcGxvY2s7Ci0JYm9vbCB3cml0ZV9vbmx5ID0gZmFsc2U7CiAJRklMRV9VTklYX0JBU0lDX0lORk8gKnByZXNwX2RhdGE7CiAJX191MzIgcG9zaXhfZmxhZ3MgPSAwOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKHNiKTsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihtbnQtPm1udF9zYik7CiAJc3RydWN0IGNpZnNfZmF0dHIgZmF0dHI7CiAKIAljRllJKDEsICgicG9zaXggb3BlbiAlcyIsIGZ1bGxfcGF0aCkpOwpAQCAtMjIzLDEyICsyMjUsOSBAQAogCWlmIChvZmxhZ3MgJiBPX0RJUkVDVCkKIAkJcG9zaXhfZmxhZ3MgfD0gU01CX09fRElSRUNUOwogCi0JaWYgKCEob2ZsYWdzICYgRk1PREVfUkVBRCkpCi0JCXdyaXRlX29ubHkgPSB0cnVlOwotCiAJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCXJjID0gQ0lGU1BPU0lYQ3JlYXRlKHhpZCwgY2lmc19zYi0+dGNvbiwgcG9zaXhfZmxhZ3MsIG1vZGUsCi0JCQlwbmV0ZmlkLCBwcmVzcF9kYXRhLCAmb3Bsb2NrLCBmdWxsX3BhdGgsCisJCQlwbmV0ZmlkLCBwcmVzcF9kYXRhLCBwb3Bsb2NrLCBmdWxsX3BhdGgsCiAJCQljaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCWlmIChyYykKQEAgLTI0NCw3ICsyNDMsNyBAQAogCiAJLyogZ2V0IG5ldyBpbm9kZSBhbmQgc2V0IGl0IHVwICovCiAJaWYgKCpwaW5vZGUgPT0gTlVMTCkgewotCQkqcGlub2RlID0gY2lmc19pZ2V0KHNiLCAmZmF0dHIpOworCQkqcGlub2RlID0gY2lmc19pZ2V0KG1udC0+bW50X3NiLCAmZmF0dHIpOwogCQlpZiAoISpwaW5vZGUpIHsKIAkJCXJjID0gLUVOT01FTTsKIAkJCWdvdG8gcG9zaXhfb3Blbl9yZXQ7CkBAIC0yNTMsNyArMjUyLDcgQEAKIAkJY2lmc19mYXR0cl90b19pbm9kZSgqcGlub2RlLCAmZmF0dHIpOwogCX0KIAotCWNpZnNfZmlsbF9maWxlaW5mbygqcGlub2RlLCAqcG5ldGZpZCwgY2lmc19zYi0+dGNvbiwgd3JpdGVfb25seSk7CisJY2lmc19uZXdfZmlsZWluZm8oKnBpbm9kZSwgKnBuZXRmaWQsIE5VTEwsIG1udCwgb2ZsYWdzKTsKIAogcG9zaXhfb3Blbl9yZXQ6CiAJa2ZyZWUocHJlc3BfZGF0YSk7CkBAIC0yODAsNyArMjc5LDcgQEAKIAlpbnQgcmMgPSAtRU5PRU5UOwogCWludCB4aWQ7CiAJaW50IGNyZWF0ZV9vcHRpb25zID0gQ1JFQVRFX05PVF9ESVI7Ci0JaW50IG9wbG9jayA9IDA7CisJX191MzIgb3Bsb2NrID0gMDsKIAlpbnQgb2ZsYWdzOwogCWJvb2wgcG9zaXhfY3JlYXRlID0gZmFsc2U7CiAJLyoKQEAgLTI5OCw3ICsyOTcsNiBAQAogCUZJTEVfQUxMX0lORk8gKmJ1ZiA9IE5VTEw7CiAJc3RydWN0IGlub2RlICpuZXdpbm9kZSA9IE5VTEw7CiAJaW50IGRpc3Bvc2l0aW9uID0gRklMRV9PVkVSV1JJVEVfSUY7Ci0JYm9vbCB3cml0ZV9vbmx5ID0gZmFsc2U7CiAKIAl4aWQgPSBHZXRYaWQoKTsKIApAQCAtMzIzLDcgKzMyMSw3IEBACiAJaWYgKHRjb24tPnVuaXhfZXh0ICYmICh0Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSAmJgogCSAgICAoQ0lGU19VTklYX1BPU0lYX1BBVEhfT1BTX0NBUCAmCiAJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgewotCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZuZXdpbm9kZSwgaW5vZGUtPmlfc2IsCisJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgJm5ld2lub2RlLCBuZC0+cGF0aC5tbnQsCiAJCQkJICAgICBtb2RlLCBvZmxhZ3MsICZvcGxvY2ssICZmaWxlSGFuZGxlLCB4aWQpOwogCQkvKiBFSU8gY291bGQgaW5kaWNhdGUgdGhhdCAocG9zaXggb3Blbikgb3BlcmF0aW9uIGlzIG5vdAogCQkgICBzdXBwb3J0ZWQsIGRlc3BpdGUgd2hhdCBzZXJ2ZXIgY2xhaW1lZCBpbiBjYXBhYmlsaXR5CkBAIC0zNTEsMTEgKzM0OSw4IEBACiAJCWRlc2lyZWRBY2Nlc3MgPSAwOwogCQlpZiAob2ZsYWdzICYgRk1PREVfUkVBRCkKIAkJCWRlc2lyZWRBY2Nlc3MgfD0gR0VORVJJQ19SRUFEOyAvKiBpcyB0aGlzIHRvbyBsaXR0bGU/ICovCi0JCWlmIChvZmxhZ3MgJiBGTU9ERV9XUklURSkgeworCQlpZiAob2ZsYWdzICYgRk1PREVfV1JJVEUpCiAJCQlkZXNpcmVkQWNjZXNzIHw9IEdFTkVSSUNfV1JJVEU7Ci0JCQlpZiAoIShvZmxhZ3MgJiBGTU9ERV9SRUFEKSkKLQkJCQl3cml0ZV9vbmx5ID0gdHJ1ZTsKLQkJfQogCiAJCWlmICgob2ZsYWdzICYgKE9fQ1JFQVQgfCBPX0VYQ0wpKSA9PSAoT19DUkVBVCB8IE9fRVhDTCkpCiAJCQlkaXNwb3NpdGlvbiA9IEZJTEVfQ1JFQVRFOwpAQCAtNDcwLDggKzQ2NSw4IEBACiAJCS8qIG1rbm9kIGNhc2UgLSBkbyBub3QgbGVhdmUgZmlsZSBvcGVuICovCiAJCUNJRlNTTUJDbG9zZSh4aWQsIHRjb24sIGZpbGVIYW5kbGUpOwogCX0gZWxzZSBpZiAoIShwb3NpeF9jcmVhdGUpICYmIChuZXdpbm9kZSkpIHsKLQkJCWNpZnNfZmlsbF9maWxlaW5mbyhuZXdpbm9kZSwgZmlsZUhhbmRsZSwKLQkJCQkJY2lmc19zYi0+dGNvbiwgd3JpdGVfb25seSk7CisJCQljaWZzX25ld19maWxlaW5mbyhuZXdpbm9kZSwgZmlsZUhhbmRsZSwgTlVMTCwKKwkJCQkJCW5kLT5wYXRoLm1udCwgb2ZsYWdzKTsKIAl9CiBjaWZzX2NyZWF0ZV9vdXQ6CiAJa2ZyZWUoYnVmKTsKQEAgLTYxMSw3ICs2MDYsNyBAQAogewogCWludCB4aWQ7CiAJaW50IHJjID0gMDsgLyogdG8gZ2V0IGFyb3VuZCBzcHVyaW91cyBnY2Mgd2FybmluZywgc2V0IHRvIHplcm8gaGVyZSAqLwotCWludCBvcGxvY2sgPSAwOworCV9fdTMyIG9wbG9jayA9IDA7CiAJX191MTYgZmlsZUhhbmRsZSA9IDA7CiAJYm9vbCBwb3NpeF9vcGVuID0gZmFsc2U7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKQEAgLTY4Myw4ICs2NzgsNyBAQAogCQlpZiAoIShuZC0+ZmxhZ3MgJiAoTE9PS1VQX1BBUkVOVCB8IExPT0tVUF9ESVJFQ1RPUlkpKSAmJgogCQkgICAgIChuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikgJiYgIXBUY29uLT5icm9rZW5fcG9zaXhfb3BlbiAmJgogCQkgICAgIChuZC0+aW50ZW50Lm9wZW4uZmxhZ3MgJiBPX0NSRUFUKSkgewotCQkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmbmV3SW5vZGUsCi0JCQkJCXBhcmVudF9kaXJfaW5vZGUtPmlfc2IsCisJCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZuZXdJbm9kZSwgbmQtPnBhdGgubW50LAogCQkJCQluZC0+aW50ZW50Lm9wZW4uY3JlYXRlX21vZGUsCiAJCQkJCW5kLT5pbnRlbnQub3Blbi5mbGFncywgJm9wbG9jaywKIAkJCQkJJmZpbGVIYW5kbGUsIHhpZCk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGZhN2JlYWMuLjQyOTMzN2UgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlICJjaWZzZnMuaCIKICNpbmNsdWRlICJjaWZzcGR1LmgiCkBAIC0zOSwyNyArNDAsNiBAQAogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKICNpbmNsdWRlICJjaWZzX2ZzX3NiLmgiCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc19pbml0X3ByaXZhdGUoCi0Jc3RydWN0IGNpZnNGaWxlSW5mbyAqcHJpdmF0ZV9kYXRhLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCXN0cnVjdCBmaWxlICpmaWxlLCBfX3UxNiBuZXRmaWQpCi17Ci0JbWVtc2V0KHByaXZhdGVfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBjaWZzRmlsZUluZm8pKTsKLQlwcml2YXRlX2RhdGEtPm5ldGZpZCA9IG5ldGZpZDsKLQlwcml2YXRlX2RhdGEtPnBpZCA9IGN1cnJlbnQtPnRnaWQ7Ci0JbXV0ZXhfaW5pdCgmcHJpdmF0ZV9kYXRhLT5maF9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmcHJpdmF0ZV9kYXRhLT5sb2NrX211dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmcHJpdmF0ZV9kYXRhLT5sbGlzdCk7Ci0JcHJpdmF0ZV9kYXRhLT5wZmlsZSA9IGZpbGU7IC8qIG5lZWRlZCBmb3Igd3JpdGVwYWdlICovCi0JcHJpdmF0ZV9kYXRhLT5wSW5vZGUgPSBpbm9kZTsKLQlwcml2YXRlX2RhdGEtPmludmFsaWRIYW5kbGUgPSBmYWxzZTsKLQlwcml2YXRlX2RhdGEtPmNsb3NlUGVuZCA9IGZhbHNlOwotCS8qIEluaXRpYWxpemUgcmVmZXJlbmNlIGNvdW50IHRvIG9uZS4gIFRoZSBwcml2YXRlIGRhdGEgaXMKLQlmcmVlZCBvbiB0aGUgcmVsZWFzZSBvZiB0aGUgbGFzdCByZWZlcmVuY2UgKi8KLQlhdG9taWNfc2V0KCZwcml2YXRlX2RhdGEtPmNvdW50LCAxKTsKLQotCXJldHVybiBwcml2YXRlX2RhdGE7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGNpZnNfY29udmVydF9mbGFncyh1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaWYgKChmbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpCkBAIC0xMjMsOSArMTAzLDExIEBACiB9CiAKIC8qIGFsbCBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGluIGNhbGxlciAqLwotc3RhdGljIGlubGluZSBpbnQgY2lmc19wb3NpeF9vcGVuX2lub2RlX2hlbHBlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlLAotCQkJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlLCBpbnQgb3Bsb2NrLCB1MTYgbmV0ZmlkKQorc3RhdGljIGlubGluZSBpbnQKK2NpZnNfcG9zaXhfb3Blbl9pbm9kZV9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlLAorCQkJICAgICBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGUsIF9fdTMyIG9wbG9jaywKKwkJCSAgICAgdTE2IG5ldGZpZCkKIHsKIAogCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwpAQCAtMjE5LDE3ICsyMDEsNiBAQAogCXN0cnVjdCB0aW1lc3BlYyB0ZW1wOwogCWludCByYzsKIAotCS8qIHdhbnQgaGFuZGxlcyB3ZSBjYW4gdXNlIHRvIHJlYWQgd2l0aCBmaXJzdAotCSAgIGluIHRoZSBsaXN0IHNvIHdlIGRvIG5vdCBoYXZlIHRvIHdhbGsgdGhlCi0JICAgbGlzdCB0byBzZWFyY2ggZm9yIG9uZSBpbiB3cml0ZV9iZWdpbiAqLwotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpIHsKLQkJbGlzdF9hZGRfdGFpbCgmcENpZnNGaWxlLT5mbGlzdCwKLQkJCSAgICAgICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOwotCX0gZWxzZSB7Ci0JCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LAotCQkJICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOwotCX0KLQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCWlmIChwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQpIHsKIAkJLyogd2UgaGF2ZSB0aGUgaW5vZGUgb3BlbiBzb21ld2hlcmUgZWxzZQogCQkgICBubyBuZWVkIHRvIGRpc2NhcmQgY2FjaGUgZGF0YSAqLwpAQCAtMjc5LDcgKzI1MCw4IEBACiBpbnQgY2lmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCByYyA9IC1FQUNDRVM7Ci0JaW50IHhpZCwgb3Bsb2NrOworCWludCB4aWQ7CisJX191MzIgb3Bsb2NrOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGU7CkBAIC0zMjQsNyArMjk2LDcgQEAKIAkJCWxlNjRfdG9fY3B1KHRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpKSB7CiAJCWludCBvZmxhZ3MgPSAoaW50KSBjaWZzX3Bvc2l4X2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CiAJCS8qIGNhbiBub3QgcmVmcmVzaCBpbm9kZSBpbmZvIHNpbmNlIHNpemUgY291bGQgYmUgc3RhbGUgKi8KLQkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmaW5vZGUsIGlub2RlLT5pX3NiLAorCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZpbm9kZSwgZmlsZS0+Zl9wYXRoLm1udCwKIAkJCQkgICAgIGNpZnNfc2ItPm1udF9maWxlX21vZGUgLyogaWdub3JlZCAqLywKIAkJCQkgICAgIG9mbGFncywgJm9wbG9jaywgJm5ldGZpZCwgeGlkKTsKIAkJaWYgKHJjID09IDApIHsKQEAgLTQxNCwyNCArMzg2LDE3IEBACiAJCWNGWUkoMSwgKCJjaWZzX29wZW4gcmV0dXJuZWQgMHgleCIsIHJjKSk7CiAJCWdvdG8gb3V0OwogCX0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPQotCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2lmc0ZpbGVJbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlwQ2lmc0ZpbGUgPSBjaWZzX25ld19maWxlaW5mbyhpbm9kZSwgbmV0ZmlkLCBmaWxlLCBmaWxlLT5mX3BhdGgubW50LAorCQkJCQlmaWxlLT5mX2ZsYWdzKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBwQ2lmc0ZpbGU7CiAJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCXBDaWZzRmlsZSA9IGNpZnNfaW5pdF9wcml2YXRlKGZpbGUtPnByaXZhdGVfZGF0YSwgaW5vZGUsIGZpbGUsIG5ldGZpZCk7Ci0Jd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZ0Y29uLT5vcGVuRmlsZUxpc3QpOwogCi0JcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQlpZiAocENpZnNJbm9kZSkgewotCQlyYyA9IGNpZnNfb3Blbl9pbm9kZV9oZWxwZXIoaW5vZGUsIGZpbGUsIHBDaWZzSW5vZGUsCi0JCQkJCSAgICBwQ2lmc0ZpbGUsIHRjb24sCi0JCQkJCSAgICAmb3Bsb2NrLCBidWYsIGZ1bGxfcGF0aCwgeGlkKTsKLQl9IGVsc2UgewotCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCX0KKwlyYyA9IGNpZnNfb3Blbl9pbm9kZV9oZWxwZXIoaW5vZGUsIGZpbGUsIHBDaWZzSW5vZGUsIHBDaWZzRmlsZSwgdGNvbiwKKwkJCQkgICAgJm9wbG9jaywgYnVmLCBmdWxsX3BhdGgsIHhpZCk7CiAKIAlpZiAob3Bsb2NrICYgQ0lGU19DUkVBVEVfQUNUSU9OKSB7CiAJCS8qIHRpbWUgdG8gc2V0IG1vZGUgd2hpY2ggd2UgY2FuIG5vdCBzZXQgZWFybGllciBkdWUgdG8KQEAgLTQ3NCw3ICs0MzksOCBAQAogc3RhdGljIGludCBjaWZzX3Jlb3Blbl9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBib29sIGNhbl9mbHVzaCkKIHsKIAlpbnQgcmMgPSAtRUFDQ0VTOwotCWludCB4aWQsIG9wbG9jazsKKwlpbnQgeGlkOworCV9fdTMyIG9wbG9jazsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlOwpAQCAtNTQzLDcgKzUwOSw3IEBACiAJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgewogCQlpbnQgb2ZsYWdzID0gKGludCkgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOwogCQkvKiBjYW4gbm90IHJlZnJlc2ggaW5vZGUgaW5mbyBzaW5jZSBzaXplIGNvdWxkIGJlIHN0YWxlICovCi0JCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgTlVMTCwgaW5vZGUtPmlfc2IsCisJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgTlVMTCwgZmlsZS0+Zl9wYXRoLm1udCwKIAkJCQkgICAgIGNpZnNfc2ItPm1udF9maWxlX21vZGUgLyogaWdub3JlZCAqLywKIAkJCQkgICAgIG9mbGFncywgJm9wbG9jaywgJm5ldGZpZCwgeGlkKTsKIAkJaWYgKHJjID09IDApIHsKQEAgLTIzMDgsNiArMjI3NCw3MyBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHZvaWQKK2NpZnNfb3Bsb2NrX2JyZWFrKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNpZnNGaWxlSW5mbywKKwkJCQkJCSAgb3Bsb2NrX2JyZWFrKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY2ZpbGUtPnBJbm9kZTsKKwlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lub2RlID0gQ0lGU19JKGlub2RlKTsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihjZmlsZS0+bW50LT5tbnRfc2IpOworCWludCByYywgd2FpdHJjID0gMDsKKworCWlmIChpbm9kZSAmJiBTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCisJCWlmIChjaW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID09IDApCisJCQlicmVha19sZWFzZShpbm9kZSwgRk1PREVfUkVBRCk7CisJCWVsc2UgaWYgKGNpbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID09IDApCisJCQlicmVha19sZWFzZShpbm9kZSwgRk1PREVfV1JJVEUpOworI2VuZGlmCisJCXJjID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOworCQlpZiAoY2lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPT0gMCkgeworCQkJd2FpdHJjID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCQlpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZShpbm9kZSk7CisJCX0KKwkJaWYgKCFyYykKKwkJCXJjID0gd2FpdHJjOworCQlpZiAocmMpCisJCQljaW5vZGUtPndyaXRlX2JlaGluZF9yYyA9IHJjOworCQljRllJKDEsICgiT3Bsb2NrIGZsdXNoIGlub2RlICVwIHJjICVkIiwgaW5vZGUsIHJjKSk7CisJfQorCisJLyoKKwkgKiByZWxlYXNpbmcgc3RhbGUgb3Bsb2NrIGFmdGVyIHJlY2VudCByZWNvbm5lY3Qgb2Ygc21iIHNlc3Npb24gdXNpbmcKKwkgKiBhIG5vdyBpbmNvcnJlY3QgZmlsZSBoYW5kbGUgaXMgbm90IGEgZGF0YSBpbnRlZ3JpdHkgaXNzdWUgYnV0IGRvCisJICogbm90IGJvdGhlciBzZW5kaW5nIGFuIG9wbG9jayByZWxlYXNlIGlmIHNlc3Npb24gdG8gc2VydmVyIHN0aWxsIGlzCisJICogZGlzY29ubmVjdGVkIHNpbmNlIG9wbG9jayBhbHJlYWR5IHJlbGVhc2VkIGJ5IHRoZSBzZXJ2ZXIKKwkgKi8KKwlpZiAoIWNmaWxlLT5jbG9zZVBlbmQgJiYgIWNmaWxlLT5vcGxvY2tfYnJlYWtfY2FuY2VsbGVkKSB7CisJCXJjID0gQ0lGU1NNQkxvY2soMCwgY2lmc19zYi0+dGNvbiwgY2ZpbGUtPm5ldGZpZCwgMCwgMCwgMCwgMCwKKwkJCQkgTE9DS0lOR19BTkRYX09QTE9DS19SRUxFQVNFLCBmYWxzZSk7CisJCWNGWUkoMSwgKCJPcGxvY2sgcmVsZWFzZSByYyA9ICVkIiwgcmMpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2NpZnNfb3Bsb2NrX2JyZWFrX2dldChzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaWZzRmlsZUluZm8sCisJCQkJCQkgIG9wbG9ja19icmVhayk7CisJbW50Z2V0KGNmaWxlLT5tbnQpOworCWNpZnNGaWxlSW5mb19nZXQoY2ZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY2lmc19vcGxvY2tfYnJlYWtfcHV0KHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNpZnNGaWxlSW5mbywKKwkJCQkJCSAgb3Bsb2NrX2JyZWFrKTsKKwltbnRwdXQoY2ZpbGUtPm1udCk7CisJY2lmc0ZpbGVJbmZvX3B1dChjZmlsZSk7Cit9CisKK2NvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIGNpZnNfb3Bsb2NrX2JyZWFrX29wcyA9IHsKKwkuZ2V0X3JlZgk9IGNpZnNfb3Bsb2NrX2JyZWFrX2dldCwKKwkucHV0X3JlZgk9IGNpZnNfb3Bsb2NrX2JyZWFrX3B1dCwKKwkuZXhlY3V0ZQk9IGNpZnNfb3Bsb2NrX2JyZWFrLAorfTsKKwogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzID0gewogCS5yZWFkcGFnZSA9IGNpZnNfcmVhZHBhZ2UsCiAJLnJlYWRwYWdlcyA9IGNpZnNfcmVhZHBhZ2VzLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDVlMjQ5MjUuLmNhYmFiZDggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTUxMiwxMyArNTEyLDEwIEBACiAJCQkJCWNpZnNfc2ItPmxvY2FsX25scywKIAkJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwotCQkJaWYgKHJjMSkgeworCQkJaWYgKHJjMSB8fCAhZmF0dHIuY2ZfdW5pcXVlaWQpIHsKIAkJCQljRllJKDEsICgiR2V0U3J2SW5vZGVOdW0gcmMgJWQiLCByYzEpKTsKIAkJCQlmYXR0ci5jZl91bmlxdWVpZCA9IGl1bmlxdWUoc2IsIFJPT1RfSSk7Ci0JCQkJLyogZGlzYWJsZSBzZXJ2ZXJpbm8gaWYgY2FsbCBub3Qgc3VwcG9ydGVkICovCi0JCQkJaWYgKHJjMSA9PSAtRUlOVkFMKQotCQkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmPQotCQkJCQkJCX5DSUZTX01PVU5UX1NFUlZFUl9JTlVNOworCQkJCWNpZnNfYXV0b2Rpc2FibGVfc2VydmVyaW5vKGNpZnNfc2IpOwogCQkJfQogCQl9IGVsc2UgewogCQkJZmF0dHIuY2ZfdW5pcXVlaWQgPSBpdW5pcXVlKHNiLCBST09UX0kpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9taXNjLmMgYi9mcy9jaWZzL21pc2MuYwppbmRleCBlMDc5YTkxLi5kMjdkNGVjIDEwMDY0NAotLS0gYS9mcy9jaWZzL21pc2MuYworKysgYi9mcy9jaWZzL21pc2MuYwpAQCAtMzIsNyArMzIsNiBAQAogCiBleHRlcm4gbWVtcG9vbF90ICpjaWZzX3NtX3JlcV9wb29scDsKIGV4dGVybiBtZW1wb29sX3QgKmNpZnNfcmVxX3Bvb2xwOwotZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqb3Bsb2NrVGhyZWFkOwogCiAvKiBUaGUgeGlkIHNlcnZlcyBhcyBhIHVzZWZ1bCBpZGVudGlmaWVyIGZvciBlYWNoIGluY29taW5nIHZmcyByZXF1ZXN0LAogICAgaW4gYSBzaW1pbGFyIHdheSB0byB0aGUgbWlkIHdoaWNoIGlzIHVzZWZ1bCB0byB0cmFjayBlYWNoIHNlbnQgc21iLApAQCAtNTAwLDYgKzQ5OSw3IEBACiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpuZXRmaWxlOworCWludCByYzsKIAogCWNGWUkoMSwgKCJDaGVja2luZyBmb3Igb3Bsb2NrIGJyZWFrIG9yIGRub3RpZnkgcmVzcG9uc2UiKSk7CiAJaWYgKChwU01CLT5oZHIuQ29tbWFuZCA9PSBTTUJfQ09NX05UX1RSQU5TQUNUKSAmJgpAQCAtNTYyLDMwICs1NjIsNDAgQEAKIAkJCQljb250aW51ZTsKIAogCQkJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9vcGxvY2tfYnJrcyk7Ci0JCQl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKKwkJCXJlYWRfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCQlsaXN0X2Zvcl9lYWNoKHRtcDIsICZ0Y29uLT5vcGVuRmlsZUxpc3QpIHsKIAkJCQluZXRmaWxlID0gbGlzdF9lbnRyeSh0bXAyLCBzdHJ1Y3QgY2lmc0ZpbGVJbmZvLAogCQkJCQkJICAgICB0bGlzdCk7CiAJCQkJaWYgKHBTTUItPkZpZCAhPSBuZXRmaWxlLT5uZXRmaWQpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQkJCQlyZWFkX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOworCQkJCS8qCisJCQkJICogZG9uJ3QgZG8gYW55dGhpbmcgaWYgZmlsZSBpcyBhYm91dCB0byBiZQorCQkJCSAqIGNsb3NlZCBhbnl3YXkuCisJCQkJICovCisJCQkJaWYgKG5ldGZpbGUtPmNsb3NlUGVuZCkgeworCQkJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQkJCXJlYWRfdW5sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwogCQkJCWNGWUkoMSwgKCJmaWxlIGlkIG1hdGNoLCBvcGxvY2sgYnJlYWsiKSk7CiAJCQkJcENpZnNJbm9kZSA9IENJRlNfSShuZXRmaWxlLT5wSW5vZGUpOwogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gZmFsc2U7CiAJCQkJaWYgKHBTTUItPk9wbG9ja0xldmVsID09IDApCiAJCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IGZhbHNlOwotCQkJCXBDaWZzSW5vZGUtPm9wbG9ja1BlbmRpbmcgPSB0cnVlOwotCQkJCUFsbG9jT3Bsb2NrUUVudHJ5KG5ldGZpbGUtPnBJbm9kZSwKLQkJCQkJCSAgbmV0ZmlsZS0+bmV0ZmlkLCB0Y29uKTsKLQkJCQljRllJKDEsICgiYWJvdXQgdG8gd2FrZSB1cCBvcGxvY2sgdGhyZWFkIikpOwotCQkJCWlmIChvcGxvY2tUaHJlYWQpCi0JCQkJCXdha2VfdXBfcHJvY2VzcyhvcGxvY2tUaHJlYWQpOwotCisJCQkJcmMgPSBzbG93X3dvcmtfZW5xdWV1ZSgmbmV0ZmlsZS0+b3Bsb2NrX2JyZWFrKTsKKwkJCQlpZiAocmMpIHsKKwkJCQkJY0VSUk9SKDEsICgiZmFpbGVkIHRvIGVucXVldWUgb3Bsb2NrICIKKwkJCQkJCSAgICJicmVhazogJWRcbiIsIHJjKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbmV0ZmlsZS0+b3Bsb2NrX2JyZWFrX2NhbmNlbGxlZCA9IGZhbHNlOworCQkJCX0KKwkJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQkJcmVhZF91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KLQkJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCQlyZWFkX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwogCQkJY0ZZSSgxLCAoIk5vIG1hdGNoaW5nIGZpbGUgZm9yIG9wbG9jayBicmVhayIpKTsKIAkJCXJldHVybiB0cnVlOwpAQCAtNzA1LDMgKzcxNSwxNyBAQAogY3RvVUNTX291dDoKIAlyZXR1cm4gaTsKIH0KKwordm9pZAorY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYikKK3sKKwlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1NFUlZFUl9JTlVNKSB7CisJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICY9IH5DSUZTX01PVU5UX1NFUlZFUl9JTlVNOworCQljRVJST1IoMSwgKCJBdXRvZGlzYWJsaW5nIHRoZSB1c2Ugb2Ygc2VydmVyIGlub2RlIG51bWJlcnMgb24gIgorCQkJICAgIiVzLiBUaGlzIHNlcnZlciBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB0aGVtICIKKwkJCSAgICJwcm9wZXJseS4gSGFyZGxpbmtzIHdpbGwgbm90IGJlIHJlY29nbml6ZWQgb24gdGhpcyAiCisJCQkgICAibW91bnQuIENvbnNpZGVyIG1vdW50aW5nIHdpdGggdGhlIFwibm9zZXJ2ZXJpbm9cIiAiCisJCQkgICAib3B0aW9uIHRvIHNpbGVuY2UgdGhpcyBtZXNzYWdlLiIsCisJCQkgICBjaWZzX3NiLT50Y29uLT50cmVlTmFtZSkpOworCX0KK30KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggZjgyM2E0YS4uZjg0MDYyZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGNpZnNfZGlyX2luZm9fdG9fZmF0dHIoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBGSUxFX0RJUkVDVE9SWV9JTkZPICppbmZvLAogCQkgICAgICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYikKIHsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWNpZnNfZmlsbF9jb21tb25faW5mbyhmYXR0ciwgY2lmc19zYik7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBjaWZzX3N0ZF9pbmZvX3RvX2ZhdHRyKHN0cnVjdCBjaWZzX2ZhdHRyICpmYXR0ciwgRklORF9GSUxFX1NUQU5EQVJEX0lORk8gKmluZm8sCiAJCSAgICAgICBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKQogewpAQCAtNzI3LDExICs3MjcsMTIgQEAKIAkJY2lmc19kaXJfaW5mb190b19mYXR0cigmZmF0dHIsIChGSUxFX0RJUkVDVE9SWV9JTkZPICopCiAJCQkJCXBmaW5kRW50cnksIGNpZnNfc2IpOwogCi0JLyogRklYTUU6IG1ha2UgX3RvX2ZhdHRyIGZ1bmN0aW9ucyBmaWxsIHRoaXMgb3V0ICovCi0JaWYgKHBDaWZzRi0+c3JjaF9pbmYuaW5mb19sZXZlbCA9PSBTTUJfRklORF9GSUxFX0lEX0ZVTExfRElSX0lORk8pCisJaWYgKGludW0gJiYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSkpIHsKIAkJZmF0dHIuY2ZfdW5pcXVlaWQgPSBpbnVtOwotCWVsc2UKKwl9IGVsc2UgewogCQlmYXR0ci5jZl91bmlxdWVpZCA9IGl1bmlxdWUoc2IsIFJPT1RfSSk7CisJCWNpZnNfYXV0b2Rpc2FibGVfc2VydmVyaW5vKGNpZnNfc2IpOworCX0KIAogCWlubyA9IGNpZnNfdW5pcXVlaWRfdG9faW5vX3QoZmF0dHIuY2ZfdW5pcXVlaWQpOwogCXRtcF9kZW50cnkgPSBjaWZzX3JlYWRkaXJfbG9va3VwKGZpbGUtPmZfZGVudHJ5LCAmcXN0cmluZywgJmZhdHRyKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCmluZGV4IDFkYTRhYjIuLjA3YjhlNzEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMKKysrIGIvZnMvY2lmcy90cmFuc3BvcnQuYwpAQCAtMTAzLDU2ICsxMDMsNiBAQAogCW1lbXBvb2xfZnJlZShtaWRFbnRyeSwgY2lmc19taWRfcG9vbHApOwogfQogCi1zdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKgotQWxsb2NPcGxvY2tRRW50cnkoc3RydWN0IGlub2RlICpwaW5vZGUsIF9fdTE2IGZpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbikKLXsKLQlzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKnRlbXA7Ci0JaWYgKChwaW5vZGUgPT0gTlVMTCkgfHwgKHRjb24gPT0gTlVMTCkpIHsKLQkJY0VSUk9SKDEsICgiTnVsbCBwYXJtcyBwYXNzZWQgdG8gQWxsb2NPcGxvY2tRRW50cnkiKSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQl0ZW1wID0gKHN0cnVjdCBvcGxvY2tfcV9lbnRyeSAqKSBrbWVtX2NhY2hlX2FsbG9jKGNpZnNfb3Bsb2NrX2NhY2hlcCwKLQkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAodGVtcCA9PSBOVUxMKQotCQlyZXR1cm4gdGVtcDsKLQllbHNlIHsKLQkJdGVtcC0+cGlub2RlID0gcGlub2RlOwotCQl0ZW1wLT50Y29uID0gdGNvbjsKLQkJdGVtcC0+bmV0ZmlkID0gZmlkOwotCQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCQlsaXN0X2FkZF90YWlsKCZ0ZW1wLT5xaGVhZCwgJmNpZnNfb3Bsb2NrX2xpc3QpOwotCQlzcGluX3VubG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci0JfQotCXJldHVybiB0ZW1wOwotfQotCi12b2lkIERlbGV0ZU9wbG9ja1FFbnRyeShzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKm9wbG9ja0VudHJ5KQotewotCXNwaW5fbG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci0gICAgLyogc2hvdWxkIHdlIGNoZWNrIGlmIGxpc3QgZW1wdHkgZmlyc3Q/ICovCi0JbGlzdF9kZWwoJm9wbG9ja0VudHJ5LT5xaGVhZCk7Ci0Jc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCWttZW1fY2FjaGVfZnJlZShjaWZzX29wbG9ja19jYWNoZXAsIG9wbG9ja0VudHJ5KTsKLX0KLQotCi12b2lkIERlbGV0ZVRjb25PcGxvY2tRRW50cmllcyhzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uKQotewotCXN0cnVjdCBvcGxvY2tfcV9lbnRyeSAqdGVtcDsKLQotCWlmICh0Y29uID09IE5VTEwpCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wLCAmY2lmc19vcGxvY2tfbGlzdCwgcWhlYWQpIHsKLQkJaWYgKCh0ZW1wLT50Y29uKSAmJiAodGVtcC0+dGNvbiA9PSB0Y29uKSkgewotCQkJbGlzdF9kZWwoJnRlbXAtPnFoZWFkKTsKLQkJCWttZW1fY2FjaGVfZnJlZShjaWZzX29wbG9ja19jYWNoZXAsIHRlbXApOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLX0KLQogc3RhdGljIGludAogc21iX3NlbmR2KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IGt2ZWMgKmlvdiwgaW50IG5fdmVjKQogewpkaWZmIC0tZ2l0IGEvZnMvY29kYS9wc2Rldi5jIGIvZnMvY29kYS9wc2Rldi5jCmluZGV4IDAzNzZhYzYuLmJlNDM5MmMgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvcHNkZXYuYworKysgYi9mcy9jb2RhL3BzZGV2LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCBkNTc2YjU1Li42YzE5MDQwIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTUzMiw2ICsxNTMyLDggQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXQ7CiAKKwljdXJyZW50LT5zdGFja19zdGFydCA9IGN1cnJlbnQtPm1tLT5zdGFydF9zdGFjazsKKwogCS8qIGV4ZWN2ZSBzdWNjZWVkZWQgKi8KIAljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdF9pb2N0bC5jIGIvZnMvY29tcGF0X2lvY3RsLmMKaW5kZXggZjkxZmQ1MWIuLmQ4NGU3MDUgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogLyoganVzdCBhY2NvdW50IGZvciBkaWZmZXJlbnQgYWxpZ25tZW50ICovCiBzdGF0aWMgaW50IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNwYWNlX3Jlc3ZfMzIJX191c2VyICpwMzIgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IHNwYWNlX3Jlc3ZfMzIJX191c2VyICpwMzIgPSBjb21wYXRfcHRyKGFyZyk7CiAJc3RydWN0IHNwYWNlX3Jlc3YJX191c2VyICpwID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpwKSk7CiAKIAlpZiAoY29weV9pbl91c2VyKCZwLT5sX3R5cGUsCSZwMzItPmxfdHlwZSwJc2l6ZW9mKHMxNikpIHx8CkBAIC0yODAyLDcgKzI4MDIsNyBAQAogI2Vsc2UKIAljYXNlIEZTX0lPQ19SRVNWU1A6CiAJY2FzZSBGU19JT0NfUkVTVlNQNjQ6Ci0JCWVycm9yID0gaW9jdGxfcHJlYWxsb2NhdGUoZmlscCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJZXJyb3IgPSBpb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBjb21wYXRfcHRyKGFyZykpOwogCQlnb3RvIG91dF9mcHV0OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggMjQwY2VmMS4uNzA3MzZlYiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTMxNiw2ICszMTYsMTAgQEAKIHsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwogCisJLyogd2l0aCBzY3RwIHRoZXJlJ3Mgbm8gY29ubmVjdGluZyB3aXRob3V0IHNlbmRpbmcgKi8KKwlpZiAoZGxtX2NvbmZpZy5jaV9wcm90b2NvbCAhPSAwKQorCQlyZXR1cm4gMDsKKwogCWlmIChub2RlaWQgPT0gZGxtX291cl9ub2RlaWQoKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ1NSw5ICs0NTksOSBAQAogCQkJaW50IHByaW1fbGVuLCByZXQ7CiAJCQlpbnQgYWRkcl9sZW47CiAJCQlzdHJ1Y3QgY29ubmVjdGlvbiAqbmV3X2NvbjsKLQkJCXN0cnVjdCBmaWxlICpmaWxlOwogCQkJc2N0cF9wZWVsb2ZmX2FyZ190IHBhcmc7CiAJCQlpbnQgcGFyZ2xlbiA9IHNpemVvZihwYXJnKTsKKwkJCWludCBlcnI7CiAKIAkJCS8qCiAJCQkgKiBXZSBnZXQgdGhpcyBiZWZvcmUgYW55IGRhdGEgZm9yIGFuIGFzc29jaWF0aW9uLgpAQCAtNTEyLDE5ICs1MTYsMjIgQEAKIAkJCXJldCA9IGtlcm5lbF9nZXRzb2Nrb3B0KGNvbi0+c29jaywgSVBQUk9UT19TQ1RQLAogCQkJCQkJU0NUUF9TT0NLT1BUX1BFRUxPRkYsCiAJCQkJCQkodm9pZCAqKSZwYXJnLCAmcGFyZ2xlbik7Ci0JCQlpZiAocmV0KSB7CisJCQlpZiAocmV0IDwgMCkgewogCQkJCWxvZ19wcmludCgiQ2FuJ3QgcGVlbCBvZmYgYSBzb2NrZXQgZm9yICIKLQkJCQkJICAiY29ubmVjdGlvbiAlZCB0byBub2RlICVkOiBlcnI9JWRcbiIsCisJCQkJCSAgImNvbm5lY3Rpb24gJWQgdG8gbm9kZSAlZDogZXJyPSVkIiwKIAkJCQkJICBwYXJnLmFzc29jaWQsIG5vZGVpZCwgcmV0KTsKKwkJCQlyZXR1cm47CiAJCQl9Ci0JCQlmaWxlID0gZmdldChwYXJnLnNkKTsKLQkJCW5ld19jb24tPnNvY2sgPSBTT0NLRVRfSShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCQluZXdfY29uLT5zb2NrID0gc29ja2ZkX2xvb2t1cChwYXJnLnNkLCAmZXJyKTsKKwkJCWlmICghbmV3X2Nvbi0+c29jaykgeworCQkJCWxvZ19wcmludCgic29ja2ZkX2xvb2t1cCBlcnJvciAlZCIsIGVycik7CisJCQkJcmV0dXJuOworCQkJfQogCQkJYWRkX3NvY2sobmV3X2Nvbi0+c29jaywgbmV3X2Nvbik7Ci0JCQlmcHV0KGZpbGUpOwotCQkJcHV0X3VudXNlZF9mZChwYXJnLnNkKTsKKwkJCXNvY2tmZF9wdXQobmV3X2Nvbi0+c29jayk7CiAKLQkJCWxvZ19wcmludCgiZ290IG5ldy9yZXN0YXJ0ZWQgYXNzb2NpYXRpb24gJWQgbm9kZWlkICVkIiwKLQkJCQkgKGludClzbi0+c25fYXNzb2NfY2hhbmdlLnNhY19hc3NvY19pZCwgbm9kZWlkKTsKKwkJCWxvZ19wcmludCgiY29ubmVjdGluZyB0byAlZCBzY3RwIGFzc29jaWF0aW9uICVkIiwKKwkJCQkgbm9kZWlkLCAoaW50KXNuLT5zbl9hc3NvY19jaGFuZ2Uuc2FjX2Fzc29jX2lkKTsKIAogCQkJLyogU2VuZCBhbnkgcGVuZGluZyB3cml0ZXMgKi8KIAkJCWNsZWFyX2JpdChDRl9DT05ORUNUX1BFTkRJTkcsICZuZXdfY29uLT5mbGFncyk7CkBAIC04MzcsOCArODQ0LDYgQEAKIAlpZiAoY29uLT5yZXRyaWVzKysgPiBNQVhfQ09OTkVDVF9SRVRSSUVTKQogCQlyZXR1cm47CiAKLQlsb2dfcHJpbnQoIkluaXRpYXRpbmcgYXNzb2NpYXRpb24gd2l0aCBub2RlICVkIiwgY29uLT5ub2RlaWQpOwotCiAJaWYgKG5vZGVpZF90b19hZGRyKGNvbi0+bm9kZWlkLCAoc3RydWN0IHNvY2thZGRyICopJnJlbV9hZGRyKSkgewogCQlsb2dfcHJpbnQoIm5vIGFkZHJlc3MgZm9yIG5vZGVpZCAlZCIsIGNvbi0+bm9kZWlkKTsKIAkJcmV0dXJuOwpAQCAtODU1LDExICs4NjAsMTQgQEAKIAlvdXRtZXNzYWdlLm1zZ19mbGFncyA9IE1TR19FT1I7CiAKIAlzcGluX2xvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKLQllID0gbGlzdF9lbnRyeShjb24tPndyaXRlcXVldWUubmV4dCwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksCi0JCSAgICAgICBsaXN0KTsKIAotCUJVR19PTigoc3RydWN0IGxpc3RfaGVhZCAqKSBlID09ICZjb24tPndyaXRlcXVldWUpOworCWlmIChsaXN0X2VtcHR5KCZjb24tPndyaXRlcXVldWUpKSB7CisJCXNwaW5fdW5sb2NrKCZjb24tPndyaXRlcXVldWVfbG9jayk7CisJCWxvZ19wcmludCgid3JpdGVxdWV1ZSBlbXB0eSBmb3Igbm9kZWlkICVkIiwgY29uLT5ub2RlaWQpOworCQlyZXR1cm47CisJfQogCisJZSA9IGxpc3RfZmlyc3RfZW50cnkoJmNvbi0+d3JpdGVxdWV1ZSwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksIGxpc3QpOwogCWxlbiA9IGUtPmxlbjsKIAlvZmZzZXQgPSBlLT5vZmZzZXQ7CiAJc3Bpbl91bmxvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL0tjb25maWcgYi9mcy9lY3J5cHRmcy9LY29uZmlnCmluZGV4IDBjNzU0ZTYuLjFjZDZkOWQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL0tjb25maWcKKysrIGIvZnMvZWNyeXB0ZnMvS2NvbmZpZwpAQCAtMSw2ICsxLDkgQEAKIGNvbmZpZyBFQ1JZUFRfRlMKIAl0cmlzdGF0ZSAiZUNyeXB0IGZpbGVzeXN0ZW0gbGF5ZXIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBLRVlTICYmIENSWVBUTyAmJiBORVQKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBLRVlTICYmIENSWVBUTworCXNlbGVjdCBDUllQVE9fRUNCCisJc2VsZWN0IENSWVBUT19DQkMKKwlzZWxlY3QgQ1JZUFRPX01ENQogCWhlbHAKIAkgIEVuY3J5cHRlZCBmaWxlc3lzdGVtIHRoYXQgb3BlcmF0ZXMgb24gdGhlIFZGUyBsYXllci4gIFNlZQogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lY3J5cHRmcy50eHQ+IHRvIGxlYXJuIG1vcmUgYWJvdXQKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2NyeXB0by5jIGIvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKaW5kZXggYjkxODUxZi4uZmJiNmU1ZSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKKysrIGIvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKQEAgLTI0NSwxMyArMjQ1LDExIEBACiAJCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihjcnlwdF9zdGF0LT50Zm0pOwogCWlmIChjcnlwdF9zdGF0LT5oYXNoX3RmbSkKIAkJY3J5cHRvX2ZyZWVfaGFzaChjcnlwdF9zdGF0LT5oYXNoX3RmbSk7Ci0JbXV0ZXhfbG9jaygmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3RfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXlfc2lnLCBrZXlfc2lnX3RtcCwKIAkJCQkgJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0LCBjcnlwdF9zdGF0X2xpc3QpIHsKIAkJbGlzdF9kZWwoJmtleV9zaWctPmNyeXB0X3N0YXRfbGlzdCk7CiAJCWttZW1fY2FjaGVfZnJlZShlY3J5cHRmc19rZXlfc2lnX2NhY2hlLCBrZXlfc2lnKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5rZXlzaWdfbGlzdF9tdXRleCk7CiAJbWVtc2V0KGNyeXB0X3N0YXQsIDAsIHNpemVvZihzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCkpOwogfQogCkBAIC01MTEsMTMgKzUwOSwxNCBAQAogCQkJCSAgKyBleHRlbnRfb2Zmc2V0KSwgY3J5cHRfc3RhdCk7CiAJCXJjID0gZWNyeXB0ZnNfd3JpdGVfbG93ZXIoZWNyeXB0ZnNfaW5vZGUsIGVuY19leHRlbnRfdmlydCwKIAkJCQkJICBvZmZzZXQsIGNyeXB0X3N0YXQtPmV4dGVudF9zaXplKTsKLQkJaWYgKHJjKSB7CisJCWlmIChyYyA8IDApIHsKIAkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIGF0dGVtcHRpbmcgIgogCQkJCQkidG8gd3JpdGUgbG93ZXIgcGFnZTsgcmMgPSBbJWRdIgogCQkJCQkiXG4iLCByYyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KKwlyYyA9IDA7CiBvdXQ6CiAJaWYgKGVuY19leHRlbnRfcGFnZSkgewogCQlrdW5tYXAoZW5jX2V4dGVudF9wYWdlKTsKQEAgLTYzMyw3ICs2MzIsNyBAQAogCQlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXIoZW5jX2V4dGVudF92aXJ0LCBvZmZzZXQsCiAJCQkJCSBjcnlwdF9zdGF0LT5leHRlbnRfc2l6ZSwKIAkJCQkJIGVjcnlwdGZzX2lub2RlKTsKLQkJaWYgKHJjKSB7CisJCWlmIChyYyA8IDApIHsKIAkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIGF0dGVtcHRpbmcgIgogCQkJCQkidG8gcmVhZCBsb3dlciBwYWdlOyByYyA9IFslZF0iCiAJCQkJCSJcbiIsIHJjKTsKQEAgLTc5Nyw2ICs3OTYsNyBAQAogCWtmcmVlKGZ1bGxfYWxnX25hbWUpOwogCWlmIChJU19FUlIoY3J5cHRfc3RhdC0+dGZtKSkgewogCQlyYyA9IFBUUl9FUlIoY3J5cHRfc3RhdC0+dGZtKTsKKwkJY3J5cHRfc3RhdC0+dGZtID0gTlVMTDsKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiY3J5cHRmczogaW5pdF9jcnlwdF9jdHgoKTogIgogCQkJCSJFcnJvciBpbml0aWFsaXppbmcgY2lwaGVyIFslc11cbiIsCiAJCQkJY3J5cHRfc3RhdC0+Y2lwaGVyKTsKQEAgLTkyNSw3ICs5MjUsOSBAQAogCXN0cnVjdCBlY3J5cHRmc19nbG9iYWxfYXV0aF90b2sgKmdsb2JhbF9hdXRoX3RvazsKIAlpbnQgcmMgPSAwOwogCisJbXV0ZXhfbG9jaygmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3RfbXV0ZXgpOwogCW11dGV4X2xvY2soJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0X211dGV4KTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2xvYmFsX2F1dGhfdG9rLAogCQkJICAgICZtb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfYXV0aF90b2tfbGlzdCwKIAkJCSAgICBtb3VudF9jcnlwdF9zdGF0X2xpc3QpIHsKQEAgLTkzNCwxMyArOTM2LDEzIEBACiAJCXJjID0gZWNyeXB0ZnNfYWRkX2tleXNpZyhjcnlwdF9zdGF0LCBnbG9iYWxfYXV0aF90b2stPnNpZyk7CiAJCWlmIChyYykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhZGRpbmcga2V5c2lnOyByYyA9IFslZF1cbiIsIHJjKTsKLQkJCW11dGV4X3VubG9jaygKLQkJCQkmbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2F1dGhfdG9rX2xpc3RfbXV0ZXgpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZtb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfYXV0aF90b2tfbGlzdF9tdXRleCk7CisKIG91dDoKKwltdXRleF91bmxvY2soJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0X211dGV4KTsKKwltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0X211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEyMTIsMTQgKzEyMTQsMTUgQEAKIAkJY3J5cHRfc3RhdC0+ZXh0ZW50X3NpemUgPSBFQ1JZUFRGU19ERUZBVUxUX0VYVEVOVF9TSVpFOwogCXJjID0gZWNyeXB0ZnNfcmVhZF9sb3dlcihkYXRhLCAwLCBjcnlwdF9zdGF0LT5leHRlbnRfc2l6ZSwKIAkJCQkgZWNyeXB0ZnNfaW5vZGUpOwotCWlmIChyYykgeworCWlmIChyYyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgcmVhZGluZyBoZWFkZXIgcmVnaW9uOyByYyA9IFslZF1cbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgcmMpOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKCFjb250YWluc19lY3J5cHRmc19tYXJrZXIoZGF0YSArIEVDUllQVEZTX0ZJTEVfU0laRV9CWVRFUykpIHsKIAkJcmMgPSAtRUlOVkFMOwotCX0KKwl9IGVsc2UKKwkJcmMgPSAwOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTEzMTQsMTAgKzEzMTcsMTEgQEAKIAogCXJjID0gZWNyeXB0ZnNfd3JpdGVfbG93ZXIoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlLCB2aXJ0LAogCQkJCSAgMCwgdmlydF9sZW4pOwotCWlmIChyYykKKwlpZiAocmMgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXB0aW5nIHRvIHdyaXRlIGhlYWRlciAiCi0JCSAgICAgICAiaW5mb3JtYXRpb24gdG8gbG93ZXIgZmlsZTsgcmMgPSBbJWRdXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgIHJjKTsKKwkJICAgICAgICJpbmZvcm1hdGlvbiB0byBsb3dlciBmaWxlOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7CisJZWxzZQorCQlyYyA9IDA7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNTk3LDcgKzE2MDEsNyBAQAogCX0KIAlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXIocGFnZV92aXJ0LCAwLCBjcnlwdF9zdGF0LT5leHRlbnRfc2l6ZSwKIAkJCQkgZWNyeXB0ZnNfaW5vZGUpOwotCWlmICghcmMpCisJaWYgKHJjID49IDApCiAJCXJjID0gZWNyeXB0ZnNfcmVhZF9oZWFkZXJzX3ZpcnQocGFnZV92aXJ0LCBjcnlwdF9zdGF0LAogCQkJCQkJZWNyeXB0ZnNfZGVudHJ5LAogCQkJCQkJRUNSWVBURlNfVkFMSURBVEVfSEVBREVSX1NJWkUpOwpAQCAtMTcwMiw3ICsxNzA2LDcgQEAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyBzdXBwb3J0IGZvciByZXF1ZXN0ZWQgZmlsZW5hbWUgIgogCQkgICAgICAgImVuY3J5cHRpb24gbWV0aG9kIGluIHRoaXMgcmVsZWFzZVxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogb3V0OgpAQCAtMTc2Myw3ICsxNzY3LDcgQEAKIAlpZiAoSVNfRVJSKCprZXlfdGZtKSkgewogCQlyYyA9IFBUUl9FUlIoKmtleV90Zm0pOwogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBjcnlwdG8gY2lwaGVyIHdpdGggbmFtZSAiCi0JCSAgICAgICAiWyVzXTsgcmMgPSBbJWRdXG4iLCBjaXBoZXJfbmFtZSwgcmMpOworCQkgICAgICAgIlslc107IHJjID0gWyVkXVxuIiwgZnVsbF9hbGdfbmFtZSwgcmMpOwogCQlnb3RvIG91dDsKIAl9CiAJY3J5cHRvX2Jsa2NpcGhlcl9zZXRfZmxhZ3MoKmtleV90Zm0sIENSWVBUT19URk1fUkVRX1dFQUtfS0VZKTsKQEAgLTE3NzYsNyArMTc4MCw4IEBACiAJcmMgPSBjcnlwdG9fYmxrY2lwaGVyX3NldGtleSgqa2V5X3RmbSwgZHVtbXlfa2V5LCAqa2V5X3NpemUpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGF0dGVtcHRpbmcgdG8gc2V0IGtleSBvZiBzaXplIFslemRdIGZvciAiCi0JCSAgICAgICAiY2lwaGVyIFslc107IHJjID0gWyVkXVxuIiwgKmtleV9zaXplLCBjaXBoZXJfbmFtZSwgcmMpOworCQkgICAgICAgImNpcGhlciBbJXNdOyByYyA9IFslZF1cbiIsICprZXlfc2l6ZSwgZnVsbF9hbGdfbmFtZSwKKwkJICAgICAgIHJjKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTY2LDcgKzIxNzEsNyBAQAogCQkJKCplbmNvZGVkX25hbWUpWygqZW5jb2RlZF9uYW1lX3NpemUpXSA9ICdcMCc7CiAJCQkoKmVuY29kZWRfbmFtZV9zaXplKSsrOwogCQl9IGVsc2UgewotCQkJcmMgPSAtRU5PVFNVUFA7CisJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQl9CiAJCWlmIChyYykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1wdGluZyB0byBlbmNvZGUgIgpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggMmYwOTQ1ZC4uMDU2ZmVkNjIgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmMKKysrIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwpAQCAtNDc2LDYgKzQ3Niw3IEBACiAJc3RydWN0IGlub2RlICpsb3dlcl9kaXJfaW5vZGUgPSBlY3J5cHRmc19pbm9kZV90b19sb3dlcihkaXIpOwogCXN0cnVjdCBkZW50cnkgKmxvd2VyX2Rpcl9kZW50cnk7CiAKKwlkZ2V0KGxvd2VyX2RlbnRyeSk7CiAJbG93ZXJfZGlyX2RlbnRyeSA9IGxvY2tfcGFyZW50KGxvd2VyX2RlbnRyeSk7CiAJcmMgPSB2ZnNfdW5saW5rKGxvd2VyX2Rpcl9pbm9kZSwgbG93ZXJfZGVudHJ5KTsKIAlpZiAocmMpIHsKQEAgLTQ4OSw2ICs0OTAsNyBAQAogCWRfZHJvcChkZW50cnkpOwogb3V0X3VubG9jazoKIAl1bmxvY2tfZGlyKGxvd2VyX2Rpcl9kZW50cnkpOworCWRwdXQobG93ZXJfZGVudHJ5KTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMgYi9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCmluZGV4IDI1OTUyNWMuLmEwYTc4NDcgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKKysrIGIvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYwpAQCAtNDE2LDcgKzQxNiw5IEBACiAJCQkgICAgJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0LAogCQkJICAgIG1vdW50X2NyeXB0X3N0YXRfbGlzdCkgewogCQlpZiAobWVtY21wKHdhbGtlci0+c2lnLCBzaWcsIEVDUllQVEZTX1NJR19TSVpFX0hFWCkgPT0gMCkgewotCQkJKCpnbG9iYWxfYXV0aF90b2spID0gd2Fsa2VyOworCQkJcmMgPSBrZXlfdmFsaWRhdGUod2Fsa2VyLT5nbG9iYWxfYXV0aF90b2tfa2V5KTsKKwkJCWlmICghcmMpCisJCQkJKCpnbG9iYWxfYXV0aF90b2spID0gd2Fsa2VyOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC02MTIsNyArNjE0LDEyIEBACiAJfQogCS8qIFRPRE86IFN1cHBvcnQgb3RoZXIga2V5IG1vZHVsZXMgdGhhbiBwYXNzcGhyYXNlIGZvcgogCSAqIGZpbGVuYW1lIGVuY3J5cHRpb24gKi8KLQlCVUdfT04ocy0+YXV0aF90b2stPnRva2VuX3R5cGUgIT0gRUNSWVBURlNfUEFTU1dPUkQpOworCWlmIChzLT5hdXRoX3Rvay0+dG9rZW5fdHlwZSAhPSBFQ1JZUFRGU19QQVNTV09SRCkgeworCQlyYyA9IC1FT1BOT1RTVVBQOworCQlwcmludGsoS0VSTl9JTkZPICIlczogRmlsZW5hbWUgZW5jcnlwdGlvbiBvbmx5IHN1cHBvcnRzICIKKwkJICAgICAgICJwYXNzd29yZCB0b2tlbnNcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXRfZnJlZV91bmxvY2s7CisJfQogCXNnX2luaXRfb25lKAogCQkmcy0+aGFzaF9zZywKIAkJKHU4ICopcy0+YXV0aF90b2stPnRva2VuLnBhc3N3b3JkLnNlc3Npb25fa2V5X2VuY3J5cHRpb25fa2V5LApAQCAtOTEwLDcgKzkxNywxMiBAQAogCX0KIAkvKiBUT0RPOiBTdXBwb3J0IG90aGVyIGtleSBtb2R1bGVzIHRoYW4gcGFzc3BocmFzZSBmb3IKIAkgKiBmaWxlbmFtZSBlbmNyeXB0aW9uICovCi0JQlVHX09OKHMtPmF1dGhfdG9rLT50b2tlbl90eXBlICE9IEVDUllQVEZTX1BBU1NXT1JEKTsKKwlpZiAocy0+YXV0aF90b2stPnRva2VuX3R5cGUgIT0gRUNSWVBURlNfUEFTU1dPUkQpIHsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZpbGVuYW1lIGVuY3J5cHRpb24gb25seSBzdXBwb3J0cyAiCisJCSAgICAgICAicGFzc3dvcmQgdG9rZW5zXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZyZWVfdW5sb2NrOworCX0KIAlyYyA9IGNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KAogCQlzLT5kZXNjLnRmbSwKIAkJcy0+YXV0aF90b2stPnRva2VuLnBhc3N3b3JkLnNlc3Npb25fa2V5X2VuY3J5cHRpb25fa2V5LApAQCAtMTMxNiw4ICsxMzI4LDEwIEBACiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZnJlZTsKIAl9Ci0JZWNyeXB0ZnNfY2lwaGVyX2NvZGVfdG9fc3RyaW5nKGNyeXB0X3N0YXQtPmNpcGhlciwKLQkJCQkgICAgICAgKHUxNilkYXRhWygqcGFja2V0X3NpemUpXSk7CisJcmMgPSBlY3J5cHRmc19jaXBoZXJfY29kZV90b19zdHJpbmcoY3J5cHRfc3RhdC0+Y2lwaGVyLAorCQkJCQkgICAgKHUxNilkYXRhWygqcGFja2V0X3NpemUpXSk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlOwogCS8qIEEgbGl0dGxlIGV4dHJhIHdvcmsgdG8gZGlmZmVyZW50aWF0ZSBhbW9uZyB0aGUgQUVTIGtleQogCSAqIHNpemVzOyBzZWUgUkZDMjQ0MCAqLwogCXN3aXRjaChkYXRhWygqcGFja2V0X3NpemUpKytdKSB7CkBAIC0xMzI4LDcgKzEzNDIsOSBAQAogCQljcnlwdF9zdGF0LT5rZXlfc2l6ZSA9CiAJCQkoKm5ld19hdXRoX3RvayktPnNlc3Npb25fa2V5LmVuY3J5cHRlZF9rZXlfc2l6ZTsKIAl9Ci0JZWNyeXB0ZnNfaW5pdF9jcnlwdF9jdHgoY3J5cHRfc3RhdCk7CisJcmMgPSBlY3J5cHRmc19pbml0X2NyeXB0X2N0eChjcnlwdF9zdGF0KTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CiAJaWYgKHVubGlrZWx5KGRhdGFbKCpwYWNrZXRfc2l6ZSkrK10gIT0gMHgwMykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiT25seSBTMksgSUQgMyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkXG4iKTsKIAkJcmMgPSAtRU5PU1lTOwpAQCAtMjM2NiwyMSArMjM4MiwxOCBAQAogaW50IGVjcnlwdGZzX2FkZF9rZXlzaWcoc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQsIGNoYXIgKnNpZykKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfa2V5X3NpZyAqbmV3X2tleV9zaWc7Ci0JaW50IHJjID0gMDsKIAogCW5ld19rZXlfc2lnID0ga21lbV9jYWNoZV9hbGxvYyhlY3J5cHRmc19rZXlfc2lnX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19rZXlfc2lnKSB7Ci0JCXJjID0gLUVOT01FTTsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiRXJyb3IgYWxsb2NhdGluZyBmcm9tIGVjcnlwdGZzX2tleV9zaWdfY2FjaGVcbiIpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbWNweShuZXdfa2V5X3NpZy0+a2V5c2lnLCBzaWcsIEVDUllQVEZTX1NJR19TSVpFX0hFWCk7Ci0JbXV0ZXhfbG9jaygmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3RfbXV0ZXgpOworCS8qIENhbGxlciBtdXN0IGhvbGQga2V5c2lnX2xpc3RfbXV0ZXggKi8KIAlsaXN0X2FkZCgmbmV3X2tleV9zaWctPmNyeXB0X3N0YXRfbGlzdCwgJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0KTsKLQltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0X211dGV4KTsKLW91dDoKLQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGttZW1fY2FjaGUgKmVjcnlwdGZzX2dsb2JhbF9hdXRoX3Rva19jYWNoZTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYyBiL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYwppbmRleCBjNmQ3YTRkLi5lMTRjZjdlIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9rdGhyZWFkLmMKKysrIGIvZnMvZWNyeXB0ZnMva3RocmVhZC5jCkBAIC0xMzYsNiArMTM2LDcgQEAKIAkJCSAgICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCiB7CiAJc3RydWN0IGVjcnlwdGZzX29wZW5fcmVxICpyZXE7CisJaW50IGZsYWdzID0gT19MQVJHRUZJTEU7CiAJaW50IHJjID0gMDsKIAogCS8qIENvcnJlc3BvbmRpbmcgZHB1dCgpIGFuZCBtbnRwdXQoKSBhcmUgZG9uZSB3aGVuIHRoZQpAQCAtMTQzLDEwICsxNDQsMTQgQEAKIAkgKiBkZXN0cm95ZWQuICovCiAJZGdldChsb3dlcl9kZW50cnkpOwogCW1udGdldChsb3dlcl9tbnQpOwotCSgqbG93ZXJfZmlsZSkgPSBkZW50cnlfb3Blbihsb3dlcl9kZW50cnksIGxvd2VyX21udCwKLQkJCQkgICAgKE9fUkRXUiB8IE9fTEFSR0VGSUxFKSwgY3JlZCk7CisJZmxhZ3MgfD0gSVNfUkRPTkxZKGxvd2VyX2RlbnRyeS0+ZF9pbm9kZSkgPyBPX1JET05MWSA6IE9fUkRXUjsKKwkoKmxvd2VyX2ZpbGUpID0gZGVudHJ5X29wZW4obG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIGZsYWdzLCBjcmVkKTsKIAlpZiAoIUlTX0VSUigqbG93ZXJfZmlsZSkpCiAJCWdvdG8gb3V0OworCWlmIChmbGFncyAmIE9fUkRPTkxZKSB7CisJCXJjID0gUFRSX0VSUigoKmxvd2VyX2ZpbGUpKTsKKwkJZ290byBvdXQ7CisJfQogCXJlcSA9IGttZW1fY2FjaGVfYWxsb2MoZWNyeXB0ZnNfb3Blbl9yZXFfY2FjaGUsIEdGUF9LRVJORUwpOwogCWlmICghcmVxKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTE4MCwyMSArMTg1LDggQEAKIAkJICAgICAgIF9fZnVuY19fKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlpZiAoSVNfRVJSKCpyZXEtPmxvd2VyX2ZpbGUpKSB7CisJaWYgKElTX0VSUigqcmVxLT5sb3dlcl9maWxlKSkKIAkJcmMgPSBQVFJfRVJSKCpyZXEtPmxvd2VyX2ZpbGUpOwotCQlkZ2V0KGxvd2VyX2RlbnRyeSk7Ci0JCW1udGdldChsb3dlcl9tbnQpOwotCQkoKmxvd2VyX2ZpbGUpID0gZGVudHJ5X29wZW4obG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsCi0JCQkJCSAgICAoT19SRE9OTFkgfCBPX0xBUkdFRklMRSksIGNyZWQpOwotCQlpZiAoSVNfRVJSKCpsb3dlcl9maWxlKSkgewotCQkJcmMgPSBQVFJfRVJSKCpyZXEtPmxvd2VyX2ZpbGUpOwotCQkJKCpsb3dlcl9maWxlKSA9IE5VTEw7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgYXR0ZW1wdGluZyBwcml2aWxlZ2VkICIKLQkJCSAgICAgICAib3BlbiBvZiBsb3dlciBmaWxlIHdpdGggZWl0aGVyIFJXIG9yIFJPICIKLQkJCSAgICAgICAicGVybXM7IHJjID0gWyVkXS4gR2l2aW5nIHVwLlxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOwotCQl9Ci0JfQogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJnJlcS0+bXV4KTsKIG91dF9mcmVlOgpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbWFpbi5jIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCmluZGV4IDlmMGFhOTguLmM2YWM4NWQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21haW4uYworKysgYi9mcy9lY3J5cHRmcy9tYWluLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXkuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9mc19zdGFjay5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgImVjcnlwdGZzX2tlcm5lbC5oIgogCiAvKioKQEAgLTExOCw2ICsxMTksNyBAQAogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CiAJc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm8gPQogCQllY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSk7CisJaW50IG9wZW5lZF9sb3dlcl9maWxlID0gMDsKIAlpbnQgcmMgPSAwOwogCiAJbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CkBAIC0xMjksMTUgKzEzMSwxNyBAQAogCQlsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZWNyeXB0ZnNfZGVudHJ5KTsKIAkJcmMgPSBlY3J5cHRmc19wcml2aWxlZ2VkX29wZW4oJmlub2RlX2luZm8tPmxvd2VyX2ZpbGUsCiAJCQkJCSAgICAgIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCBjcmVkKTsKLQkJaWYgKHJjIHx8IElTX0VSUihpbm9kZV9pbmZvLT5sb3dlcl9maWxlKSkgeworCQlpZiAocmMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb3BlbmluZyBsb3dlciBwZXJzaXN0ZW50IGZpbGUgIgogCQkJICAgICAgICJmb3IgbG93ZXJfZGVudHJ5IFsweCVwXSBhbmQgbG93ZXJfbW50IFsweCVwXTsgIgogCQkJICAgICAgICJyYyA9IFslZF1cbiIsIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCByYyk7Ci0JCQlyYyA9IFBUUl9FUlIoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSk7CiAJCQlpbm9kZV9pbmZvLT5sb3dlcl9maWxlID0gTlVMTDsKLQkJfQorCQl9IGVsc2UKKwkJCW9wZW5lZF9sb3dlcl9maWxlID0gMTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKKwlpZiAob3BlbmVkX2xvd2VyX2ZpbGUpCisJCWltYV9jb3VudHNfZ2V0KGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbW1hcC5jIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCmluZGV4IDA1NzcyYWUuLmRmNGNlOTkgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21tYXAuYworKysgYi9mcy9lY3J5cHRmcy9tbWFwLmMKQEAgLTM5Niw5ICszOTYsMTEgQEAKIAlyYyA9IGVjcnlwdGZzX3dyaXRlX2xvd2VyKGVjcnlwdGZzX2lub2RlLCBmaWxlX3NpemVfdmlydCwgMCwKIAkJCQkgIHNpemVvZih1NjQpKTsKIAlrZnJlZShmaWxlX3NpemVfdmlydCk7Ci0JaWYgKHJjKQorCWlmIChyYyA8IDApCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHdyaXRpbmcgZmlsZSBzaXplIHRvIGhlYWRlcjsgIgogCQkgICAgICAgInJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKKwllbHNlCisJCXJjID0gMDsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9yZWFkX3dyaXRlLmMgYi9mcy9lY3J5cHRmcy9yZWFkX3dyaXRlLmMKaW5kZXggYTEzN2M2ZS4uMGNjNGZhZiAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvcmVhZF93cml0ZS5jCisrKyBiL2ZzL2VjcnlwdGZzL3JlYWRfd3JpdGUuYwpAQCAtMzQsMTUgKzM0LDE0IEBACiAgKgogICogV3JpdGUgZGF0YSB0byB0aGUgbG93ZXIgZmlsZS4KICAqCi0gKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb24gZXJyb3IKKyAqIFJldHVybnMgYnl0ZXMgd3JpdHRlbiBvbiBzdWNjZXNzOyBsZXNzIHRoYW4gemVybyBvbiBlcnJvcgogICovCiBpbnQgZWNyeXB0ZnNfd3JpdGVfbG93ZXIoc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSwgY2hhciAqZGF0YSwKIAkJCSBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKLQlzc2l6ZV90IG9jdGV0c193cml0dGVuOwogCW1tX3NlZ21lbnRfdCBmc19zYXZlOwotCWludCByYyA9IDA7CisJc3NpemVfdCByYzsKIAogCWlub2RlX2luZm8gPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2lub2RlKTsKIAltdXRleF9sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKQEAgLTUwLDE0ICs0OSw5IEBACiAJaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CiAJZnNfc2F2ZSA9IGdldF9mcygpOwogCXNldF9mcyhnZXRfZHMoKSk7Ci0Jb2N0ZXRzX3dyaXR0ZW4gPSB2ZnNfd3JpdGUoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSwgZGF0YSwgc2l6ZSwKLQkJCQkgICAmaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MpOworCXJjID0gdmZzX3dyaXRlKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUsIGRhdGEsIHNpemUsCisJCSAgICAgICAmaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MpOwogCXNldF9mcyhmc19zYXZlKTsKLQlpZiAob2N0ZXRzX3dyaXR0ZW4gPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG9jdGV0c193cml0dGVuID0gWyV0ZF07ICIKLQkJICAgICAgICJleHBlY3RlZCBbJXRkXVxuIiwgX19mdW5jX18sIG9jdGV0c193cml0dGVuLCBzaXplKTsKLQkJcmMgPSAtRUlOVkFMOwotCX0KIAltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOwogCW1hcmtfaW5vZGVfZGlydHlfc3luYyhlY3J5cHRmc19pbm9kZSk7CiAJcmV0dXJuIHJjOwpAQCAtOTEsNiArODUsOCBAQAogCQkgICsgb2Zmc2V0X2luX3BhZ2UpOwogCXZpcnQgPSBrbWFwKHBhZ2VfZm9yX2xvd2VyKTsKIAlyYyA9IGVjcnlwdGZzX3dyaXRlX2xvd2VyKGVjcnlwdGZzX2lub2RlLCB2aXJ0LCBvZmZzZXQsIHNpemUpOworCWlmIChyYyA+IDApCisJCXJjID0gMDsKIAlrdW5tYXAocGFnZV9mb3JfbG93ZXIpOwogCXJldHVybiByYzsKIH0KQEAgLTIyOSwzMCArMjI1LDI0IEBACiAgKiBSZWFkIEBzaXplIGJ5dGVzIG9mIGRhdGEgYXQgYnl0ZSBvZmZzZXQgQG9mZnNldCBmcm9tIHRoZSBsb3dlcgogICogaW5vZGUgaW50byBtZW1vcnkgbG9jYXRpb24gQGRhdGEuCiAgKgotICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IG5vbi16ZXJvIG9uIGVycm9yCisgKiBSZXR1cm5zIGJ5dGVzIHJlYWQgb24gc3VjY2VzczsgMCBvbiBFT0Y7IGxlc3MgdGhhbiB6ZXJvIG9uIGVycm9yCiAgKi8KIGludCBlY3J5cHRmc19yZWFkX2xvd2VyKGNoYXIgKmRhdGEsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBzaXplLAogCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSkKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbyA9CiAJCWVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfaW5vZGUpOwotCXNzaXplX3Qgb2N0ZXRzX3JlYWQ7CiAJbW1fc2VnbWVudF90IGZzX3NhdmU7Ci0JaW50IHJjID0gMDsKKwlzc2l6ZV90IHJjOwogCiAJbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CiAJQlVHX09OKCFpbm9kZV9pbmZvLT5sb3dlcl9maWxlKTsKIAlpbm9kZV9pbmZvLT5sb3dlcl9maWxlLT5mX3BvcyA9IG9mZnNldDsKIAlmc19zYXZlID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKGdldF9kcygpKTsKLQlvY3RldHNfcmVhZCA9IHZmc19yZWFkKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUsIGRhdGEsIHNpemUsCi0JCQkgICAgICAgJmlub2RlX2luZm8tPmxvd2VyX2ZpbGUtPmZfcG9zKTsKKwlyYyA9IHZmc19yZWFkKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUsIGRhdGEsIHNpemUsCisJCSAgICAgICZpbm9kZV9pbmZvLT5sb3dlcl9maWxlLT5mX3Bvcyk7CiAJc2V0X2ZzKGZzX3NhdmUpOwotCWlmIChvY3RldHNfcmVhZCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogb2N0ZXRzX3JlYWQgPSBbJXRkXTsgIgotCQkgICAgICAgImV4cGVjdGVkIFsldGRdXG4iLCBfX2Z1bmNfXywgb2N0ZXRzX3JlYWQsIHNpemUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JfQogCW11dGV4X3VubG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMjg0LDYgKzI3NCw4IEBACiAJb2Zmc2V0ID0gKCgoKGxvZmZfdClwYWdlX2luZGV4KSA8PCBQQUdFX0NBQ0hFX1NISUZUKSArIG9mZnNldF9pbl9wYWdlKTsKIAl2aXJ0ID0ga21hcChwYWdlX2Zvcl9lY3J5cHRmcyk7CiAJcmMgPSBlY3J5cHRmc19yZWFkX2xvd2VyKHZpcnQsIG9mZnNldCwgc2l6ZSwgZWNyeXB0ZnNfaW5vZGUpOworCWlmIChyYyA+IDApCisJCXJjID0gMDsKIAlrdW5tYXAocGFnZV9mb3JfZWNyeXB0ZnMpOwogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VfZm9yX2VjcnlwdGZzKTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9zdXBlci5jIGIvZnMvZWNyeXB0ZnMvc3VwZXIuYwppbmRleCAxMmQ2NDk2Li5iMTVhNDNhIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9zdXBlci5jCisrKyBiL2ZzL2VjcnlwdGZzL3N1cGVyLmMKQEAgLTc3LDcgKzc3LDYgQEAKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKIAogCWlub2RlX2luZm8gPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKTsKLQltdXRleF9sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKIAlpZiAoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnkgPQogCQkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9kZW50cnk7CkBAIC04OSw3ICs4OCw2IEBACiAJCQlkX2Ryb3AobG93ZXJfZGVudHJ5KTsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOwogCWVjcnlwdGZzX2Rlc3Ryb3lfY3J5cHRfc3RhdCgmaW5vZGVfaW5mby0+Y3J5cHRfc3RhdCk7CiAJa21lbV9jYWNoZV9mcmVlKGVjcnlwdGZzX2lub2RlX2luZm9fY2FjaGUsIGlub2RlX2luZm8pOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGQ0OWJlNmIuLmJhMTEyYmQgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTYyNCwxMCArNjI0LDggQEAKIAkvKiBNb3ZlIHN0YWNrIHBhZ2VzIGRvd24gaW4gbWVtb3J5LiAqLwogCWlmIChzdGFja19zaGlmdCkgewogCQlyZXQgPSBzaGlmdF9hcmdfcGFnZXModm1hLCBzdGFja19zaGlmdCk7Ci0JCWlmIChyZXQpIHsKLQkJCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCQkJcmV0dXJuIHJldDsKLQkJfQorCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCkBAIC02NDEsNyArNjM5LDcgQEAKIAogb3V0X3VubG9jazoKIAl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpOwogCmRpZmYgLS1naXQgYS9mcy9leHQzL2ZzeW5jLmMgYi9mcy9leHQzL2ZzeW5jLmMKaW5kZXggNDUxZDE2Ni4uODIwOWYyNiAxMDA2NDQKLS0tIGEvZnMvZXh0My9mc3luYy5jCisrKyBiL2ZzL2V4dDMvZnN5bmMuYwpAQCAtNDYsMTkgKzQ2LDIxIEBACiBpbnQgZXh0M19zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gRVhUM19JKGlub2RlKTsKKwlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQzX1NCKGlub2RlLT5pX3NiKS0+c19qb3VybmFsOwogCWludCByZXQgPSAwOworCXRpZF90IGNvbW1pdF90aWQ7CisKKwlpZiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXJldHVybiAwOwogCiAJSl9BU1NFUlQoZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkgPT0gTlVMTCk7CiAKIAkvKgotCSAqIGRhdGE9d3JpdGViYWNrOgorCSAqIGRhdGE9d3JpdGViYWNrLG9yZGVyZWQ6CiAJICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS4KLQkgKiAgc3luY19pbm9kZSgpIHdpbGwgc3luYyB0aGUgbWV0YWRhdGEKLQkgKgotCSAqIGRhdGE9b3JkZXJlZDoKLQkgKiAgVGhlIGNhbGxlcidzIGZpbGVtYXBfZmRhdGF3cml0ZSgpIHdpbGwgd3JpdGUgdGhlIGRhdGEgYW5kCi0JICogIHN5bmNfaW5vZGUoKSB3aWxsIHdyaXRlIHRoZSBpbm9kZSBpZiBpdCBpcyBkaXJ0eS4gIFRoZW4gdGhlIGNhbGxlcidzCi0JICogIGZpbGVtYXBfZmRhdGF3YWl0KCkgd2lsbCB3YWl0IG9uIHRoZSBwYWdlcy4KKwkgKiAgTWV0YWRhdGEgaXMgaW4gdGhlIGpvdXJuYWwsIHdlIHdhaXQgZm9yIGEgcHJvcGVyIHRyYW5zYWN0aW9uCisJICogIHRvIGNvbW1pdCBoZXJlLgogCSAqCiAJICogZGF0YT1qb3VybmFsOgogCSAqICBmaWxlbWFwX2ZkYXRhd3JpdGUgd29uJ3QgZG8gYW55dGhpbmcgKHRoZSBidWZmZXJzIGFyZSBjbGVhbikuCkBAIC03MywyMiArNzUsMTYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGRhdGFzeW5jICYmICEoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZX0RBVEFTWU5DKSkKLQkJZ290byBmbHVzaDsKKwlpZiAoZGF0YXN5bmMpCisJCWNvbW1pdF90aWQgPSBhdG9taWNfcmVhZCgmZWktPmlfZGF0YXN5bmNfdGlkKTsKKwllbHNlCisJCWNvbW1pdF90aWQgPSBhdG9taWNfcmVhZCgmZWktPmlfc3luY190aWQpOwogCi0JLyoKLQkgKiBUaGUgVkZTIGhhcyB3cml0dGVuIHRoZSBmaWxlIGRhdGEuICBJZiB0aGUgaW5vZGUgaXMgdW5hbHRlcmVkCi0JICogdGhlbiB3ZSBuZWVkIG5vdCBzdGFydCBhIGNvbW1pdC4KLQkgKi8KLQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9ESVJUWV9TWU5DfElfRElSVFlfREFUQVNZTkMpKSB7Ci0JCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCi0JCQkubnJfdG9fd3JpdGUgPSAwLCAvKiBzeXNfZnN5bmMgZGlkIHRoaXMgKi8KLQkJfTsKLQkJcmV0ID0gc3luY19pbm9kZShpbm9kZSwgJndiYyk7CisJaWYgKGxvZ19zdGFydF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCkpIHsKKwkJbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpOwogCQlnb3RvIG91dDsKIAl9Ci1mbHVzaDoKKwogCS8qCiAJICogSW4gY2FzZSB3ZSBkaWRuJ3QgY29tbWl0IGEgdHJhbnNhY3Rpb24sIHdlIGhhdmUgdG8gZmx1c2gKIAkgKiBkaXNrIGNhY2hlcyBtYW51YWxseSBzbyB0aGF0IGRhdGEgcmVhbGx5IGlzIG9uIHBlcnNpc3RlbnQKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCBhY2YxYjE0Li4zNTRlZDNiIDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC02OTksOCArNjk5LDkgQEAKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZXh0M19ibG9ja19hbGxvY19pbmZvICpibG9ja19pOwogCWV4dDNfZnNibGtfdCBjdXJyZW50X2Jsb2NrOworCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gRVhUM19JKGlub2RlKTsKIAotCWJsb2NrX2kgPSBFWFQzX0koaW5vZGUpLT5pX2Jsb2NrX2FsbG9jX2luZm87CisJYmxvY2tfaSA9IGVpLT5pX2Jsb2NrX2FsbG9jX2luZm87CiAJLyoKIAkgKiBJZiB3ZSdyZSBzcGxpY2luZyBpbnRvIGEgW3RkXWluZGlyZWN0IGJsb2NrIChhcyBvcHBvc2VkIHRvIHRoZQogCSAqIGlub2RlKSB0aGVuIHdlIG5lZWQgdG8gZ2V0IHdyaXRlIGFjY2VzcyB0byB0aGUgW3RkXWluZGlyZWN0IGJsb2NrCkBAIC03NDEsNiArNzQyLDggQEAKIAogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CisJLyogZXh0M19tYXJrX2lub2RlX2RpcnR5IGFscmVhZHkgdXBkYXRlZCBpX3N5bmNfdGlkICovCisJYXRvbWljX3NldCgmZWktPmlfZGF0YXN5bmNfdGlkLCBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKTsKIAogCS8qIGhhZCB3ZSBzcGxpY2VkIGl0IG9udG8gaW5kaXJlY3QgYmxvY2s/ICovCiAJaWYgKHdoZXJlLT5iaCkgewpAQCAtMTczNSw2ICsxNzM4LDcgQEAKIAlzc2l6ZV90IHJldDsKIAlpbnQgb3JwaGFuID0gMDsKIAlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisJaW50IHJldHJpZXMgPSAwOwogCiAJaWYgKHJ3ID09IFdSSVRFKSB7CiAJCWxvZmZfdCBmaW5hbF9zaXplID0gb2Zmc2V0ICsgY291bnQ7CkBAIC0xNzU3LDkgKzE3NjEsMTIgQEAKIAkJfQogCX0KIAorcmV0cnk6CiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCiAJCQkJIGV4dDNfZ2V0X2Jsb2NrLCBOVUxMKTsKKwlpZiAocmV0ID09IC1FTk9TUEMgJiYgZXh0M19zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkKKwkJZ290byByZXRyeTsKIAogCWlmIChvcnBoYW4pIHsKIAkJaW50IGVycjsKQEAgLTI3NTAsNiArMjc1Nyw4IEBACiAJc3RydWN0IGV4dDNfaW5vZGVfaW5mbyAqZWk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWw7CisJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb247CiAJbG9uZyByZXQ7CiAJaW50IGJsb2NrOwogCkBAIC0yODI3LDYgKzI4MzYsMzAgQEAKIAkJZWktPmlfZGF0YVtibG9ja10gPSByYXdfaW5vZGUtPmlfYmxvY2tbYmxvY2tdOwogCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9vcnBoYW4pOwogCisJLyoKKwkgKiBTZXQgdHJhbnNhY3Rpb24gaWQncyBvZiB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIHRvIGJlIGNvbW1pdHRlZAorCSAqIHRvIGZpbmlzaCBmW2RhdGFdc3luYy4gV2Ugc2V0IHRoZW0gdG8gY3VycmVudGx5IHJ1bm5pbmcgdHJhbnNhY3Rpb24KKwkgKiBhcyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGF0IHRoZSBpbm9kZSBvciBzb21lIG9mIGl0cyBtZXRhZGF0YSBpc24ndAorCSAqIHBhcnQgb2YgdGhlIHRyYW5zYWN0aW9uIC0gdGhlIGlub2RlIGNvdWxkIGhhdmUgYmVlbiByZWNsYWltZWQgYW5kCisJICogbm93IGl0IGlzIHJlcmVhZCBmcm9tIGRpc2suCisJICovCisJaWYgKGpvdXJuYWwpIHsKKwkJdGlkX3QgdGlkOworCisJCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJaWYgKGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbikKKwkJCXRyYW5zYWN0aW9uID0gam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uOworCQllbHNlCisJCQl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbjsKKwkJaWYgKHRyYW5zYWN0aW9uKQorCQkJdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOworCQllbHNlCisJCQl0aWQgPSBqb3VybmFsLT5qX2NvbW1pdF9zZXF1ZW5jZTsKKwkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCB0aWQpOworCQlhdG9taWNfc2V0KCZlaS0+aV9kYXRhc3luY190aWQsIHRpZCk7CisJfQorCiAJaWYgKGlub2RlLT5pX2lubyA+PSBFWFQzX0ZJUlNUX0lOTyhpbm9kZS0+aV9zYikgKyAxICYmCiAJICAgIEVYVDNfSU5PREVfU0laRShpbm9kZS0+aV9zYikgPiBFWFQzX0dPT0RfT0xEX0lOT0RFX1NJWkUpIHsKIAkJLyoKQEAgLTMwMTEsNiArMzA0NCw3IEBACiAJCWVyciA9IHJjOwogCWVpLT5pX3N0YXRlICY9IH5FWFQzX1NUQVRFX05FVzsKIAorCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKTsKIG91dF9icmVsc2U6CiAJYnJlbHNlIChiaCk7CiAJZXh0M19zdGRfZXJyb3IoaW5vZGUtPmlfc2IsIGVycik7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggNzI3NDNkMy4uNDI3NDk2YyAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtNDY2LDYgKzQ2Niw4IEBACiAJCXJldHVybiBOVUxMOwogCWVpLT5pX2Jsb2NrX2FsbG9jX2luZm8gPSBOVUxMOwogCWVpLT52ZnNfaW5vZGUuaV92ZXJzaW9uID0gMTsKKwlhdG9taWNfc2V0KCZlaS0+aV9kYXRhc3luY190aWQsIDApOworCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCAwKTsKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKQEAgLTIzMjEsNyArMjMyMywxOCBAQAogCiAJaWYgKCFzYmgpCiAJCXJldHVybiBlcnJvcjsKLQllcy0+c193dGltZSA9IGNwdV90b19sZTMyKGdldF9zZWNvbmRzKCkpOworCS8qCisJICogSWYgdGhlIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQgcmVhZC1vbmx5LCBkb24ndCB1cGRhdGUgdGhlCisJICogc3VwZXJibG9jayB3cml0ZSB0aW1lLiAgVGhpcyBhdm9pZHMgdXBkYXRpbmcgdGhlIHN1cGVyYmxvY2sKKwkgKiB3cml0ZSB0aW1lIHdoZW4gd2UgYXJlIG1vdW50aW5nIHRoZSByb290IGZpbGUgc3lzdGVtCisJICogcmVhZC9vbmx5IGJ1dCB3ZSBuZWVkIHRvIHJlcGxheSB0aGUgam91cm5hbDsgYXQgdGhhdCBwb2ludCwKKwkgKiBmb3IgcGVvcGxlIHdobyBhcmUgZWFzdCBvZiBHTVQgYW5kIHdobyBtYWtlIHRoZWlyIGNsb2NrCisJICogdGljayBpbiBsb2NhbHRpbWUgZm9yIFdpbmRvd3MgYnVnLWZvci1idWcgY29tcGF0aWJpbGl0eSwKKwkgKiB0aGUgY2xvY2sgaXMgc2V0IGluIHRoZSBmdXR1cmUsIGFuZCB0aGlzIHdpbGwgY2F1c2UgZTJmc2NrCisJICogdG8gY29tcGxhaW4gYW5kIGZvcmNlIGEgZnVsbCBmaWxlIHN5c3RlbSBjaGVjay4KKwkgKi8KKwlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCisJCWVzLT5zX3d0aW1lID0gY3B1X3RvX2xlMzIoZ2V0X3NlY29uZHMoKSk7CiAJZXMtPnNfZnJlZV9ibG9ja3NfY291bnQgPSBjcHVfdG9fbGUzMihleHQzX2NvdW50X2ZyZWVfYmxvY2tzKHNiKSk7CiAJZXMtPnNfZnJlZV9pbm9kZXNfY291bnQgPSBjcHVfdG9fbGUzMihleHQzX2NvdW50X2ZyZWVfaW5vZGVzKHNiKSk7CiAJQlVGRkVSX1RSQUNFKHNiaCwgIm1hcmtpbmcgZGlydHkiKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvS2NvbmZpZyBiL2ZzL2V4dDQvS2NvbmZpZwppbmRleCBkNWMwZWEyLi45ZjJkNDVkIDEwMDY0NAotLS0gYS9mcy9leHQ0L0tjb25maWcKKysrIGIvZnMvZXh0NC9LY29uZmlnCkBAIC0yNiwyMCArMjYsNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgRVhUNERFVl9DT01QQVQKLQlib29sICJFbmFibGUgZXh0NGRldiBjb21wYXRpYmlsaXR5IgotCWRlcGVuZHMgb24gRVhUNF9GUwotCWhlbHAKLQkgIFN0YXJ0aW5nIHdpdGggMi42LjI4LCB0aGUgbmFtZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdhcwotCSAgcmVuYW1lZCBmcm9tIGV4dDRkZXYgdG8gZXh0NC4gIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlIHNvbWUKLQkgIGxlZ2FjeSB1c2Vyc3BhY2UgcHJvZ3JhbXMgKHN1Y2ggYXMga2xpYmMncyBmc3R5cGUpIGhhdmUKLQkgICJleHQ0ZGV2IiBoYXJkY29kZWQuCi0KLQkgIFRvIGVuYWJsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzbyB0aGF0IHN5c3RlbXMgdGhhdCBhcmUKLQkgIHN0aWxsIGV4cGVjdGluZyB0byBtb3VudCBleHQ0IGZpbGVzeXN0ZW1zIHVzaW5nIGV4dDRkZXYsCi0JICBjaG9vc2UgWSBoZXJlLiAgIFRoaXMgZmVhdHVyZSB3aWxsIGdvIGF3YXkgYnkgMi42LjMxLCBzbwotCSAgcGxlYXNlIGFycmFuZ2UgdG8gZ2V0IHlvdXIgdXNlcnNwYWNlIHByb2dyYW1zIGZpeGVkIQotCiBjb25maWcgRVhUNF9GU19YQVRUUgogCWJvb2wgIkV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcyIKIAlkZXBlbmRzIG9uIEVYVDRfRlMKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggZTIyN2VlYS4uODgyNTUxNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTY1LDYgKzY1LDEyIEBACiAvKiBkYXRhIHR5cGUgZm9yIGJsb2NrIGdyb3VwIG51bWJlciAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZXh0NF9ncm91cF90OwogCisvKgorICogRmxhZ3MgdXNlZCBpbiBtYmFsbG9jJ3MgYWxsb2NhdGlvbl9jb250ZXh0IGZsYWdzIGZpZWxkLiAgCisgKgorICogQWxzbyB1c2VkIHRvIHNob3cgd2hhdCdzIGdvaW5nIG9uIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgd2hlbiB0aGUKKyAqIGZsYWcgZmllbGQgaXMgZXhwb3J0ZWQgdmlhIHRoZSB0cmFjZXBvcnQgaW50ZXJmYWNlCisgKi8KIAogLyogcHJlZmVyIGdvYWwgYWdhaW4uIGxlbmd0aCAqLwogI2RlZmluZSBFWFQ0X01CX0hJTlRfTUVSR0UJCTB4MDAwMQpAQCAtMTI3LDYgKzEzMywxNiBAQAogCWludCBwYWdlc193cml0dGVuOwogCWludCByZXR2YWw7CiB9OworI2RlZmluZQlESU9fQUlPX1VOV1JJVFRFTgkweDEKK3R5cGVkZWYgc3RydWN0IGV4dDRfaW9fZW5kIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBwZXItZmlsZSBmaW5pc2hlZCBBSU8gbGlzdCAqLworCXN0cnVjdCBpbm9kZQkJKmlub2RlOwkJLyogZmlsZSBiZWluZyB3cml0dGVuIHRvICovCisJdW5zaWduZWQgaW50CQlmbGFnOwkJLyogdW53cml0dGVuIG9yIG5vdCAqLworCWludAkJCWVycm9yOwkJLyogSS9PIGVycm9yIGNvZGUgKi8KKwlleHQ0X2xibGtfdAkJb2Zmc2V0OwkJLyogb2Zmc2V0IGluIHRoZSBmaWxlICovCisJc2l6ZV90CQkJc2l6ZTsJCS8qIHNpemUgb2YgdGhlIGV4dGVudCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwkJLyogZGF0YSB3b3JrIHF1ZXVlICovCit9IGV4dDRfaW9fZW5kX3Q7CiAKIC8qCiAgKiBTcGVjaWFsIGlub2RlcyBudW1iZXJzCkBAIC0zMDYsNiArMzIyLDcgQEAKICNkZWZpbmUgRVhUNF9TVEFURV9OT19FWFBBTkQJCTB4MDAwMDAwMDggLyogTm8gc3BhY2UgZm9yIGV4cGFuc2lvbiAqLwogI2RlZmluZSBFWFQ0X1NUQVRFX0RBX0FMTE9DX0NMT1NFCTB4MDAwMDAwMTAgLyogQWxsb2MgREEgYmxrcyBvbiBjbG9zZSAqLwogI2RlZmluZSBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFCQkweDAwMDAwMDIwIC8qIElub2RlIGlzIG1pZ3JhdGluZyAqLworI2RlZmluZSBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU4JMHgwMDAwMDA0MCAvKiBuZWVkIGNvbnZlcnQgb24gZGlvIGRvbmUqLwogCiAvKiBVc2VkIHRvIHBhc3MgZ3JvdXAgZGVzY3JpcHRvciBkYXRhIHdoZW4gb25saW5lIHJlc2l6ZSBpcyBkb25lICovCiBzdHJ1Y3QgZXh0NF9uZXdfZ3JvdXBfaW5wdXQgewpAQCAtMzQ3LDcgKzM2NCwxNiBAQAogCS8qIENhbGwgZXh0NF9kYV91cGRhdGVfcmVzZXJ2ZV9zcGFjZSgpIGFmdGVyIHN1Y2Nlc3NmdWxseSAKIAkgICBhbGxvY2F0aW5nIHRoZSBibG9ja3MgKi8KICNkZWZpbmUgRVhUNF9HRVRfQkxPQ0tTX1VQREFURV9SRVNFUlZFX1NQQUNFCTB4MDAwOAotCisJLyogY2FsbGVyIGlzIGZyb20gdGhlIGRpcmVjdCBJTyBwYXRoLCByZXF1ZXN0IHRvIGNyZWF0aW9uIG9mIGFuCisJdW5pdGlhbGl6ZWQgZXh0ZW50cyBpZiBub3QgYWxsb2NhdGVkLCBzcGxpdCB0aGUgdW5pbml0aWFsaXplZAorCWV4dGVudCBpZiBibG9ja3MgaGFzIGJlZW4gcHJlYWxsb2NhdGVkIGFscmVhZHkqLworI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfRElPCQkJMHgwMDEwCisjZGVmaW5lIEVYVDRfR0VUX0JMT0NLU19DT05WRVJUCQkJMHgwMDIwCisjZGVmaW5lIEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVAkJKEVYVDRfR0VUX0JMT0NLU19ESU98XAorCQkJCQkgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9VTklOSVRfRVhUKQorCS8qIENvbnZlcnQgZXh0ZW50IHRvIGluaXRpYWxpemVkIGFmdGVyIGRpcmVjdCBJTyBjb21wbGV0ZSAqLworI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NPTlZFUlRfRVhUCQkoRVhUNF9HRVRfQkxPQ0tTX0NPTlZFUlR8XAorCQkJCQkgRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKQogCiAvKgogICogaW9jdGwgY29tbWFuZHMKQEAgLTUwMCw4ICs1MjYsOCBAQAogc3RhdGljIGlubGluZSBfX2xlMzIgZXh0NF9lbmNvZGVfZXh0cmFfdGltZShzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpCiB7CiAgICAgICAgcmV0dXJuIGNwdV90b19sZTMyKChzaXplb2YodGltZS0+dHZfc2VjKSA+IDQgPwotCQkJICAgdGltZS0+dHZfc2VjID4+IDMyIDogMCkgfAotCQkJICAgKCh0aW1lLT50dl9uc2VjIDw8IDIpICYgRVhUNF9OU0VDX01BU0spKTsKKwkJCSAgICh0aW1lLT50dl9zZWMgPj4gMzIpICYgRVhUNF9FUE9DSF9NQVNLIDogMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHRpbWUtPnR2X25zZWMgPDwgRVhUNF9FUE9DSF9CSVRTKSAmIEVYVDRfTlNFQ19NQVNLKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2RlY29kZV9leHRyYV90aW1lKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgX19sZTMyIGV4dHJhKQpAQCAtNTA5LDcgKzUzNSw3IEBACiAgICAgICAgaWYgKHNpemVvZih0aW1lLT50dl9zZWMpID4gNCkKIAkgICAgICAgdGltZS0+dHZfc2VjIHw9IChfX3U2NCkobGUzMl90b19jcHUoZXh0cmEpICYgRVhUNF9FUE9DSF9NQVNLKQogCQkJICAgICAgIDw8IDMyOwotICAgICAgIHRpbWUtPnR2X25zZWMgPSAobGUzMl90b19jcHUoZXh0cmEpICYgRVhUNF9OU0VDX01BU0spID4+IDI7CisgICAgICAgdGltZS0+dHZfbnNlYyA9IChsZTMyX3RvX2NwdShleHRyYSkgJiBFWFQ0X05TRUNfTUFTSykgPj4gRVhUNF9FUE9DSF9CSVRTOwogfQogCiAjZGVmaW5lIEVYVDRfSU5PREVfU0VUX1hUSU1FKHh0aW1lLCBpbm9kZSwgcmF3X2lub2RlKQkJCSAgICAgICBcCkBAIC02NzIsNiArNjk4LDExIEBACiAJX191MTYgaV9leHRyYV9pc2l6ZTsKIAogCXNwaW5sb2NrX3QgaV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrOworCisJLyogY29tcGxldGVkIGFzeW5jIERJT3MgdGhhdCBtaWdodCBuZWVkIHVud3JpdHRlbiBleHRlbnRzIGhhbmRsaW5nICovCisJc3RydWN0IGxpc3RfaGVhZCBpX2Fpb19kaW9fY29tcGxldGVfbGlzdDsKKwkvKiBjdXJyZW50IGlvX2VuZCBzdHJ1Y3R1cmUgZm9yIGFzeW5jIERJTyB3cml0ZSovCisJZXh0NF9pb19lbmRfdCAqY3VyX2Fpb19kaW87CiB9OwogCiAvKgpAQCAtNzEzLDYgKzc0NCw3IEBACiAjZGVmaW5lIEVYVDRfTU9VTlRfUVVPVEEJCTB4ODAwMDAgLyogU29tZSBxdW90YSBvcHRpb24gc2V0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfVVNSUVVPVEEJCTB4MTAwMDAwIC8qICJvbGQiIHVzZXIgcXVvdGEgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9HUlBRVU9UQQkJMHgyMDAwMDAgLyogIm9sZCIgZ3JvdXAgcXVvdGEgKi8KKyNkZWZpbmUgRVhUNF9NT1VOVF9KT1VSTkFMX0NIRUNLU1VNCTB4ODAwMDAwIC8qIEpvdXJuYWwgY2hlY2tzdW1zICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfSk9VUk5BTF9BU1lOQ19DT01NSVQJMHgxMDAwMDAwIC8qIEpvdXJuYWwgQXN5bmMgQ29tbWl0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfSV9WRVJTSU9OICAgICAgICAgICAgMHgyMDAwMDAwIC8qIGlfdmVyc2lvbiBzdXBwb3J0ICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfREVMQUxMT0MJCTB4ODAwMDAwMCAvKiBEZWxhbGxvYyBzdXBwb3J0ICovCkBAIC05NDIsMTggKzk3NCwxMSBAQAogCXVuc2lnbmVkIGludCBzX21iX3N0YXRzOwogCXVuc2lnbmVkIGludCBzX21iX29yZGVyMl9yZXFzOwogCXVuc2lnbmVkIGludCBzX21iX2dyb3VwX3ByZWFsbG9jOworCXVuc2lnbmVkIGludCBzX21heF93cml0ZWJhY2tfbWJfYnVtcDsKIAkvKiB3aGVyZSBsYXN0IGFsbG9jYXRpb24gd2FzIGRvbmUgLSBmb3Igc3RyZWFtIGFsbG9jYXRpb24gKi8KIAl1bnNpZ25lZCBsb25nIHNfbWJfbGFzdF9ncm91cDsKIAl1bnNpZ25lZCBsb25nIHNfbWJfbGFzdF9zdGFydDsKIAotCS8qIGhpc3RvcnkgdG8gZGVidWcgcG9saWN5ICovCi0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqc19tYl9oaXN0b3J5OwotCWludCBzX21iX2hpc3RvcnlfY3VyOwotCWludCBzX21iX2hpc3RvcnlfbWF4OwotCWludCBzX21iX2hpc3RvcnlfbnVtOwotCXNwaW5sb2NrX3Qgc19tYl9oaXN0b3J5X2xvY2s7Ci0JaW50IHNfbWJfaGlzdG9yeV9maWx0ZXI7Ci0KIAkvKiBzdGF0cyBmb3IgYnVkZHkgYWxsb2NhdG9yICovCiAJc3BpbmxvY2tfdCBzX21iX3BhX2xvY2s7CiAJYXRvbWljX3Qgc19iYWxfcmVxczsJLyogbnVtYmVyIG9mIHJlcXMgd2l0aCBsZW4gPiAxICovCkBAIC05ODAsNiArMTAwNSw5IEBACiAKIAl1bnNpZ25lZCBpbnQgc19sb2dfZ3JvdXBzX3Blcl9mbGV4OwogCXN0cnVjdCBmbGV4X2dyb3VwcyAqc19mbGV4X2dyb3VwczsKKworCS8qIHdvcmtxdWV1ZSBmb3IgZGlvIHVud3JpdHRlbiAqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkaW9fdW53cml0dGVuX3dxOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpFWFQ0X1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC0xMzk3LDcgKzE0MjUsNyBAQAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IGZyb20pOwogZXh0ZXJuIGludCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwogZXh0ZXJuIHFzaXplX3QgZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSk7Ci0KK2V4dGVybiBpbnQgZmx1c2hfYWlvX2Rpb19jb21wbGV0ZWRfSU8oc3RydWN0IGlub2RlICppbm9kZSk7CiAvKiBpb2N0bC5jICovCiBleHRlcm4gbG9uZyBleHQ0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gbG9uZyBleHQ0X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwpAQCAtMTY5OSw2ICsxNzI3LDggQEAKIGV4dGVybiB2b2lkIGV4dDRfZXh0X3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogZXh0ZXJuIGxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCiAJCQkgIGxvZmZfdCBsZW4pOworZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKKwkJCSAgbG9mZl90IGxlbik7CiBleHRlcm4gaW50IGV4dDRfZ2V0X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgc2VjdG9yX3QgYmxvY2ssIHVuc2lnbmVkIGludCBtYXhfYmxvY2tzLAogCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGZsYWdzKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmggYi9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oCmluZGV4IDYxNjUyZjEuLjJjYTY4NjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKKysrIGIvZnMvZXh0NC9leHQ0X2V4dGVudHMuaApAQCAtMjIwLDYgKzIyMCwxMSBAQAogCQkobGUxNl90b19jcHUoZXh0LT5lZV9sZW4pIC0gRVhUX0lOSVRfTUFYX0xFTikpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9leHRfbWFya19pbml0aWFsaXplZChzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4dCkKK3sKKwlleHQtPmVlX2xlbiA9IGNwdV90b19sZTE2KGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4dCkpOworfQorCiBleHRlcm4gaW50IGV4dDRfZXh0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9ja3MpOwogZXh0ZXJuIGV4dDRfZnNibGtfdCBleHRfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgpOwogZXh0ZXJuIGV4dDRfZnNibGtfdCBpZHhfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudF9pZHggKik7CkBAIC0yMzUsNyArMjQwLDcgQEAKIAkJCQkgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCiAJCQkJIHN0cnVjdCBleHQ0X2V4dGVudCAqKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dDRfZXh0ZW50ICosIHN0cnVjdCBleHQ0X2V4dF9wYXRoICopOwotZXh0ZXJuIGludCBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKik7CitleHRlcm4gaW50IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBleHQ0X2V4dF9wYXRoICosIHN0cnVjdCBleHQ0X2V4dGVudCAqLCBpbnQpOwogZXh0ZXJuIGludCBleHQ0X2V4dF93YWxrX3NwYWNlKHN0cnVjdCBpbm9kZSAqLCBleHQ0X2xibGtfdCwgZXh0NF9sYmxrX3QsCiAJCQkJCQkJZXh0X3ByZXBhcmVfY2FsbGJhY2ssIHZvaWQgKik7CiBleHRlcm4gc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfZXh0X2ZpbmRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqLCBleHQ0X2xibGtfdCwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmggYi9mcy9leHQ0L2V4dDRfamJkMi5oCmluZGV4IDEzOWZiOGMuLmEyODY1OTggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmgKKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuaApAQCAtMTYxLDExICsxNjEsMTMgQEAKIGhhbmRsZV90ICpleHQ0X2pvdXJuYWxfc3RhcnRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG5ibG9ja3MpOwogaW50IF9fZXh0NF9qb3VybmFsX3N0b3AoY29uc3QgY2hhciAqd2hlcmUsIGhhbmRsZV90ICpoYW5kbGUpOwogCi0jZGVmaW5lIEVYVDRfTk9KT1VSTkFMX0hBTkRMRQkoKGhhbmRsZV90ICopIDB4MSkKKyNkZWZpbmUgRVhUNF9OT0pPVVJOQUxfTUFYX1JFRl9DT1VOVCAoKHVuc2lnbmVkIGxvbmcpIDQwOTYpCiAKKy8qIE5vdGU6ICBEbyBub3QgdXNlIHRoaXMgZm9yIE5VTEwgaGFuZGxlcy4gIFRoaXMgaXMgb25seSB0byBkZXRlcm1pbmUgaWYKKyAqIGEgcHJvcGVybHkgYWxsb2NhdGVkIGhhbmRsZSBpcyB1c2luZyBhIGpvdXJuYWwgb3Igbm90LiAqLwogc3RhdGljIGlubGluZSBpbnQgZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlX3QgKmhhbmRsZSkKIHsKLQlpZiAoaGFuZGxlID09IEVYVDRfTk9KT1VSTkFMX0hBTkRMRSkKKwlpZiAoKHVuc2lnbmVkIGxvbmcpaGFuZGxlIDwgRVhUNF9OT0pPVVJOQUxfTUFYX1JFRl9DT1VOVCkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IDdhMzgzMjUuLjcxNTI2NGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC03MjMsNyArNzIzLDcgQEAKICAqIGluc2VydCBuZXcgaW5kZXggW0Bsb2dpY2FsO0BwdHJdIGludG8gdGhlIGJsb2NrIGF0IEBjdXJwOwogICogY2hlY2sgd2hlcmUgdG8gaW5zZXJ0OiBiZWZvcmUgQGN1cnAgb3IgYWZ0ZXIgQGN1cnAKICAqLwotc3RhdGljIGludCBleHQ0X2V4dF9pbnNlcnRfaW5kZXgoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBleHQ0X2V4dF9pbnNlcnRfaW5kZXgoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqY3VycCwKIAkJCQlpbnQgbG9naWNhbCwgZXh0NF9mc2Jsa190IHB0cikKIHsKQEAgLTE1ODYsNyArMTU4Niw3IEBACiAgKi8KIGludCBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCi0JCQkJc3RydWN0IGV4dDRfZXh0ZW50ICpuZXdleHQpCisJCQkJc3RydWN0IGV4dDRfZXh0ZW50ICpuZXdleHQsIGludCBmbGFnKQogewogCXN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIgKmVoOwogCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgsICpmZXg7CkBAIC0xNjAyLDcgKzE2MDIsOCBAQAogCUJVR19PTihwYXRoW2RlcHRoXS5wX2hkciA9PSBOVUxMKTsKIAogCS8qIHRyeSB0byBpbnNlcnQgYmxvY2sgaW50byBmb3VuZCBleHRlbnQgYW5kIHJldHVybiAqLwotCWlmIChleCAmJiBleHQ0X2Nhbl9leHRlbnRzX2JlX21lcmdlZChpbm9kZSwgZXgsIG5ld2V4dCkpIHsKKwlpZiAoZXggJiYgKGZsYWcgIT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKQorCQkmJiBleHQ0X2Nhbl9leHRlbnRzX2JlX21lcmdlZChpbm9kZSwgZXgsIG5ld2V4dCkpIHsKIAkJZXh0X2RlYnVnKCJhcHBlbmQgWyVkXSVkIGJsb2NrIHRvICVkOlslZF0lZCAoZnJvbSAlbGx1KVxuIiwKIAkJCQlleHQ0X2V4dF9pc191bmluaXRpYWxpemVkKG5ld2V4dCksCiAJCQkJZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4obmV3ZXh0KSwKQEAgLTE3MjIsNyArMTcyMyw4IEBACiAKIG1lcmdlOgogCS8qIHRyeSB0byBtZXJnZSBleHRlbnRzIHRvIHRoZSByaWdodCAqLwotCWV4dDRfZXh0X3RyeV90b19tZXJnZShpbm9kZSwgcGF0aCwgbmVhcmV4KTsKKwlpZiAoZmxhZyAhPSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQpCisJCWV4dDRfZXh0X3RyeV90b19tZXJnZShpbm9kZSwgcGF0aCwgbmVhcmV4KTsKIAogCS8qIHRyeSB0byBtZXJnZSBleHRlbnRzIHRvIHRoZSBsZWZ0ICovCiAKQEAgLTIzNzgsNiArMjM4MCw3IEBACiAJICovCiAKIAlpZiAoRVhUNF9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpKSB7CisjaWYgZGVmaW5lZChBR0dSRVNTSVZFX1RFU1QpIHx8IGRlZmluZWQoQ0hFQ0tfQklOU0VBUkNIKSB8fCBkZWZpbmVkKEVYVEVOVFNfU1RBVFMpCiAJCXByaW50ayhLRVJOX0lORk8gIkVYVDQtZnM6IGZpbGUgZXh0ZW50cyBlbmFibGVkIik7CiAjaWZkZWYgQUdHUkVTU0lWRV9URVNUCiAJCXByaW50aygiLCBhZ2dyZXNzaXZlIHRlc3RzIik7CkBAIC0yMzg5LDYgKzIzOTIsNyBAQAogCQlwcmludGsoIiwgc3RhdHMiKTsKICNlbmRpZgogCQlwcmludGsoIlxuIik7CisjZW5kaWYKICNpZmRlZiBFWFRFTlRTX1NUQVRTCiAJCXNwaW5fbG9ja19pbml0KCZFWFQ0X1NCKHNiKS0+c19leHRfc3RhdHNfbG9jayk7CiAJCUVYVDRfU0Ioc2IpLT5zX2V4dF9taW4gPSAxIDw8IDMwOwpAQCAtMjQ5MCw3ICsyNDk0LDYgQEAKIH0KIAogI2RlZmluZSBFWFQ0X0VYVF9aRVJPX0xFTiA3Ci0KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQ0X2V4dF9nZXRfYmxvY2tzKCkgaWYgc29tZW9uZSB0cmllcyB0byB3cml0ZQogICogdG8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQuIEl0IG1heSByZXN1bHQgaW4gc3BsaXR0aW5nIHRoZSB1bmluaXRpYWxpemVkCkBAIC0yNTgzLDcgKzI1ODYsOCBAQAogCQkJZXgzLT5lZV9ibG9jayA9IGNwdV90b19sZTMyKGlibG9jayk7CiAJCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgzLCBuZXdibG9jayk7CiAJCQlleDMtPmVlX2xlbiA9IGNwdV90b19sZTE2KGFsbG9jYXRlZCk7Ci0JCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIGV4Myk7CisJCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsCisJCQkJCQkJZXgzLCAwKTsKIAkJCWlmIChlcnIgPT0gLUVOT1NQQykgewogCQkJCWVyciA9ICBleHQ0X2V4dF96ZXJvb3V0KGlub2RlLCAmb3JpZ19leCk7CiAJCQkJaWYgKGVycikKQEAgLTI2MzksNyArMjY0Myw3IEBACiAJCWV4dDRfZXh0X3N0b3JlX3BibG9jayhleDMsIG5ld2Jsb2NrICsgbWF4X2Jsb2Nrcyk7CiAJCWV4My0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoYWxsb2NhdGVkIC0gbWF4X2Jsb2Nrcyk7CiAJCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZChleDMpOwotCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIGV4Myk7CisJCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgZXgzLCAwKTsKIAkJaWYgKGVyciA9PSAtRU5PU1BDKSB7CiAJCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOwogCQkJaWYgKGVycikKQEAgLTI3NTcsNyArMjc2MSw3IEBACiAJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKIAlnb3RvIG91dDsKIGluc2VydDoKLQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCk7CisJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXgsIDApOwogCWlmIChlcnIgPT0gLUVOT1NQQykgewogCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOwogCQlpZiAoZXJyKQpAQCAtMjc4NSw2ICsyNzg5LDMzMSBAQAogfQogCiAvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZXh0NF9leHRfZ2V0X2Jsb2NrcygpIGZyb20KKyAqIGV4dDRfZ2V0X2Jsb2Nrc19kaW9fd3JpdGUoKSB3aGVuIERJTyB0byB3cml0ZQorICogdG8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQuCisgKgorICogV3JpdGluZyB0byBhbiB1bmluaXRpemVkIGV4dGVudCBtYXkgcmVzdWx0IGluIHNwbGl0dGluZyB0aGUgdW5pbml0aWFsaXplZAorICogZXh0ZW50IGludG8gbXVsdGlwbGUgL2ludGlhbGl6ZWQgdW5pbnRpYWxpemVkIGV4dGVudHMgKHVwIHRvIHRocmVlKQorICogVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXM6CisgKiAgIGE+IFRoZXJlIGlzIG5vIHNwbGl0IHJlcXVpcmVkOiBFbnRpcmUgZXh0ZW50IHNob3VsZCBiZSB1bmluaXRpYWxpemVkCisgKiAgIGI+IFNwbGl0cyBpbiB0d28gZXh0ZW50czogV3JpdGUgaXMgaGFwcGVuaW5nIGF0IGVpdGhlciBlbmQgb2YgdGhlIGV4dGVudAorICogICBjPiBTcGxpdHMgaW4gdGhyZWUgZXh0ZW50czogU29tb25lIGlzIHdyaXRpbmcgaW4gbWlkZGxlIG9mIHRoZSBleHRlbnQKKyAqCisgKiBPbmUgb2YgbW9yZSBpbmRleCBibG9ja3MgbWF5YmUgbmVlZGVkIGlmIHRoZSBleHRlbnQgdHJlZSBncm93IGFmdGVyCisgKiB0aGUgdW5pbnRpYWxpemVkIGV4dGVudCBzcGxpdC4gVG8gcHJldmVudCBFTk9TUEMgb2NjdXIgYXQgdGhlIElPCisgKiBjb21wbGV0ZSwgd2UgbmVlZCB0byBzcGxpdCB0aGUgdW5pbml0aWFsaXplZCBleHRlbnQgYmVmb3JlIERJTyBzdWJtaXQKKyAqIHRoZSBJTy4gVGhlIHVuaW5pdGlsaXplZCBleHRlbnQgY2FsbGVkIGF0IHRoaXMgdGltZSB3aWxsIGJlIHNwbGl0CisgKiBpbnRvIHRocmVlIHVuaW5pdGlhbGl6ZWQgZXh0ZW50KGF0IG1vc3QpLiBBZnRlciBJTyBjb21wbGV0ZSwgdGhlIHBhcnQKKyAqIGJlaW5nIGZpbGxlZCB3aWxsIGJlIGNvbnZlcnQgdG8gaW5pdGlhbGl6ZWQgYnkgdGhlIGVuZF9pbyBjYWxsYmFjayBmdW5jdGlvbgorICogdmlhIGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cygpLgorICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdW5pbml0aWFsaXplZCBleHRlbnQgdG8gYmUgd3JpdHRlbiBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IGV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCisJCQkJCWV4dDRfbGJsa190IGlibG9jaywKKwkJCQkJdW5zaWduZWQgaW50IG1heF9ibG9ja3MsCisJCQkJCWludCBmbGFncykKK3sKKwlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4LCBuZXdleCwgb3JpZ19leDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4MSA9IE5VTEw7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleDIgPSBOVUxMOworCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgzID0gTlVMTDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDsKKwlleHQ0X2xibGtfdCBlZV9ibG9jazsKKwl1bnNpZ25lZCBpbnQgYWxsb2NhdGVkLCBlZV9sZW4sIGRlcHRoOworCWV4dDRfZnNibGtfdCBuZXdibG9jazsKKwlpbnQgZXJyID0gMDsKKworCWV4dF9kZWJ1ZygiZXh0NF9zcGxpdF91bndyaXR0ZW5fZXh0ZW50czogaW5vZGUgJWx1LCIKKwkJICAiaWJsb2NrICVsbHUsIG1heF9ibG9ja3MgJXVcbiIsIGlub2RlLT5pX2lubywKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKWlibG9jaywgbWF4X2Jsb2Nrcyk7CisJZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOworCWVoID0gcGF0aFtkZXB0aF0ucF9oZHI7CisJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKKwllZV9ibG9jayA9IGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jayk7CisJZWVfbGVuID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpOworCWFsbG9jYXRlZCA9IGVlX2xlbiAtIChpYmxvY2sgLSBlZV9ibG9jayk7CisJbmV3YmxvY2sgPSBpYmxvY2sgLSBlZV9ibG9jayArIGV4dF9wYmxvY2soZXgpOworCWV4MiA9IGV4OworCW9yaWdfZXguZWVfYmxvY2sgPSBleC0+ZWVfYmxvY2s7CisJb3JpZ19leC5lZV9sZW4gICA9IGNwdV90b19sZTE2KGVlX2xlbik7CisJZXh0NF9leHRfc3RvcmVfcGJsb2NrKCZvcmlnX2V4LCBleHRfcGJsb2NrKGV4KSk7CisKKwkvKgorIAkgKiBJZiB0aGUgdW5pbml0aWFsaXplZCBleHRlbnQgYmVnaW5zIGF0IHRoZSBzYW1lIGxvZ2ljYWwKKyAJICogYmxvY2sgd2hlcmUgdGhlIHdyaXRlIGJlZ2lucywgYW5kIHRoZSB3cml0ZSBjb21wbGV0ZWx5CisgCSAqIGNvdmVycyB0aGUgZXh0ZW50LCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gc3BsaXQgaXQuCisgCSAqLworCWlmICgoaWJsb2NrID09IGVlX2Jsb2NrKSAmJiAoYWxsb2NhdGVkIDw9IG1heF9ibG9ja3MpKQorCQlyZXR1cm4gYWxsb2NhdGVkOworCisJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCS8qIGV4MTogZWVfYmxvY2sgdG8gaWJsb2NrIC0gMSA6IHVuaW5pdGlhbGl6ZWQgKi8KKwlpZiAoaWJsb2NrID4gZWVfYmxvY2spIHsKKwkJZXgxID0gZXg7CisJCWV4MS0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoaWJsb2NrIC0gZWVfYmxvY2spOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgxKTsKKwkJZXgyID0gJm5ld2V4OworCX0KKwkvKgorCSAqIGZvciBzYW5pdHksIHVwZGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBleDIgZXh0ZW50IGJlZm9yZQorCSAqIHdlIGluc2VydCBleDMsIGlmIGV4MSBpcyBOVUxMLiBUaGlzIGlzIHRvIGF2b2lkIHRlbXBvcmFyeQorCSAqIG92ZXJsYXAgb2YgYmxvY2tzLgorCSAqLworCWlmICghZXgxICYmIGFsbG9jYXRlZCA+IG1heF9ibG9ja3MpCisJCWV4Mi0+ZWVfbGVuID0gY3B1X3RvX2xlMTYobWF4X2Jsb2Nrcyk7CisJLyogZXgzOiB0byBlZV9ibG9jayArIGVlX2xlbiA6IHVuaW5pdGlhbGlzZWQgKi8KKwlpZiAoYWxsb2NhdGVkID4gbWF4X2Jsb2NrcykgeworCQl1bnNpZ25lZCBpbnQgbmV3ZGVwdGg7CisJCWV4MyA9ICZuZXdleDsKKwkJZXgzLT5lZV9ibG9jayA9IGNwdV90b19sZTMyKGlibG9jayArIG1heF9ibG9ja3MpOworCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgzLCBuZXdibG9jayArIG1heF9ibG9ja3MpOworCQlleDMtPmVlX2xlbiA9IGNwdV90b19sZTE2KGFsbG9jYXRlZCAtIG1heF9ibG9ja3MpOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgzKTsKKwkJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBleDMsIGZsYWdzKTsKKwkJaWYgKGVyciA9PSAtRU5PU1BDKSB7CisJCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGZpeF9leHRlbnRfbGVuOworCQkJLyogdXBkYXRlIHRoZSBleHRlbnQgbGVuZ3RoIGFuZCBtYXJrIGFzIGluaXRpYWxpemVkICovCisJCQlleC0+ZWVfYmxvY2sgPSBvcmlnX2V4LmVlX2Jsb2NrOworCQkJZXgtPmVlX2xlbiAgID0gb3JpZ19leC5lZV9sZW47CisJCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dF9wYmxvY2soJm9yaWdfZXgpKTsKKwkJCWV4dDRfZXh0X2RpcnR5KGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CisJCQkvKiB6ZXJvZWQgdGhlIGZ1bGwgZXh0ZW50ICovCisJCQkvKiBibG9ja3MgYXZhaWxhYmxlIGZyb20gaWJsb2NrICovCisJCQlyZXR1cm4gYWxsb2NhdGVkOworCisJCX0gZWxzZSBpZiAoZXJyKQorCQkJZ290byBmaXhfZXh0ZW50X2xlbjsKKwkJLyoKKwkJICogVGhlIGRlcHRoLCBhbmQgaGVuY2UgZWggJiBleCBtaWdodCBjaGFuZ2UKKwkJICogYXMgcGFydCBvZiB0aGUgaW5zZXJ0IGFib3ZlLgorCQkgKi8KKwkJbmV3ZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOworCQkvKgorCQkgKiB1cGRhdGUgdGhlIGV4dGVudCBsZW5ndGggYWZ0ZXIgc3VjY2Vzc2Z1bCBpbnNlcnQgb2YgdGhlCisJCSAqIHNwbGl0IGV4dGVudAorCQkgKi8KKwkJb3JpZ19leC5lZV9sZW4gPSBjcHVfdG9fbGUxNihlZV9sZW4gLQorCQkJCQkJZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgzKSk7CisJCWRlcHRoID0gbmV3ZGVwdGg7CisJCWV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTsKKwkJcGF0aCA9IGV4dDRfZXh0X2ZpbmRfZXh0ZW50KGlub2RlLCBpYmxvY2ssIHBhdGgpOworCQlpZiAoSVNfRVJSKHBhdGgpKSB7CisJCQllcnIgPSBQVFJfRVJSKHBhdGgpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKKwkJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKKwkJaWYgKGV4MiAhPSAmbmV3ZXgpCisJCQlleDIgPSBleDsKKworCQllcnIgPSBleHQ0X2V4dF9nZXRfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQlhbGxvY2F0ZWQgPSBtYXhfYmxvY2tzOworCX0KKwkvKgorCSAqIElmIHRoZXJlIHdhcyBhIGNoYW5nZSBvZiBkZXB0aCBhcyBwYXJ0IG9mIHRoZQorCSAqIGluc2VydGlvbiBvZiBleDMgYWJvdmUsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsZW5ndGgKKwkgKiBvZiB0aGUgZXgxIGV4dGVudCBhZ2FpbiBoZXJlCisJICovCisJaWYgKGV4MSAmJiBleDEgIT0gZXgpIHsKKwkJZXgxID0gZXg7CisJCWV4MS0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoaWJsb2NrIC0gZWVfYmxvY2spOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgxKTsKKwkJZXgyID0gJm5ld2V4OworCX0KKwkvKgorCSAqIGV4MjogaWJsb2NrIHRvIGlibG9jayArIG1heGJsb2Nrcy0xIDogdG8gYmUgZGlyZWN0IElPIHdyaXR0ZW4sCisJICogdW5pbml0aWFsaXNlZCBzdGlsbC4KKwkgKi8KKwlleDItPmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoaWJsb2NrKTsKKwlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgyLCBuZXdibG9jayk7CisJZXgyLT5lZV9sZW4gPSBjcHVfdG9fbGUxNihhbGxvY2F0ZWQpOworCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZChleDIpOworCWlmIChleDIgIT0gZXgpCisJCWdvdG8gaW5zZXJ0OworCS8qIE1hcmsgbW9kaWZpZWQgZXh0ZW50IGFzIGRpcnR5ICovCisJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwlleHRfZGVidWcoIm91dCBoZXJlXG4iKTsKKwlnb3RvIG91dDsKK2luc2VydDoKKwllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCwgZmxhZ3MpOworCWlmIChlcnIgPT0gLUVOT1NQQykgeworCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOworCQlpZiAoZXJyKQorCQkJZ290byBmaXhfZXh0ZW50X2xlbjsKKwkJLyogdXBkYXRlIHRoZSBleHRlbnQgbGVuZ3RoIGFuZCBtYXJrIGFzIGluaXRpYWxpemVkICovCisJCWV4LT5lZV9ibG9jayA9IG9yaWdfZXguZWVfYmxvY2s7CisJCWV4LT5lZV9sZW4gICA9IG9yaWdfZXguZWVfbGVuOworCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dF9wYmxvY2soJm9yaWdfZXgpKTsKKwkJZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwkJLyogemVybyBvdXQgdGhlIGZpcnN0IGhhbGYgKi8KKwkJcmV0dXJuIGFsbG9jYXRlZDsKKwl9IGVsc2UgaWYgKGVycikKKwkJZ290byBmaXhfZXh0ZW50X2xlbjsKK291dDoKKwlleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUsIHBhdGgpOworCXJldHVybiBlcnIgPyBlcnIgOiBhbGxvY2F0ZWQ7CisKK2ZpeF9leHRlbnRfbGVuOgorCWV4LT5lZV9ibG9jayA9IG9yaWdfZXguZWVfYmxvY2s7CisJZXgtPmVlX2xlbiAgID0gb3JpZ19leC5lZV9sZW47CisJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBleHRfcGJsb2NrKCZvcmlnX2V4KSk7CisJZXh0NF9leHRfbWFya191bmluaXRpYWxpemVkKGV4KTsKKwlleHQ0X2V4dF9kaXJ0eShoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCXJldHVybiBlcnI7Cit9CitzdGF0aWMgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19kaW8oaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICAgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpCit7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDsKKwlpbnQgZGVwdGg7CisJaW50IGVyciA9IDA7CisJaW50IHJldCA9IDA7CisKKwlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CisJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKKwlleCA9IHBhdGhbZGVwdGhdLnBfZXh0OworCisJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCS8qIGZpcnN0IG1hcmsgdGhlIGV4dGVudCBhcyBpbml0aWFsaXplZCAqLworCWV4dDRfZXh0X21hcmtfaW5pdGlhbGl6ZWQoZXgpOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIHNlZSBpZiBpdCBjYW4gYmUgbWVyZ2VkIHdpdGggdGhlIGV4dGVudAorCSAqIG9uIHRoZSBsZWZ0LgorCSAqLworCWlmIChleCA+IEVYVF9GSVJTVF9FWFRFTlQoZWgpKSB7CisJCS8qCisJCSAqIFRvIG1lcmdlIGxlZnQsIHBhc3MgImV4IC0gMSIgdG8gdHJ5X3RvX21lcmdlKCksCisJCSAqIHNpbmNlIGl0IG1lcmdlcyB0b3dhcmRzIHJpZ2h0IF9vbmx5Xy4KKwkJICovCisJCXJldCA9IGV4dDRfZXh0X3RyeV90b19tZXJnZShpbm9kZSwgcGF0aCwgZXggLSAxKTsKKwkJaWYgKHJldCkgeworCQkJZXJyID0gZXh0NF9leHRfY29ycmVjdF9pbmRleGVzKGhhbmRsZSwgaW5vZGUsIHBhdGgpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKKwkJCWRlcHRoID0gZXh0X2RlcHRoKGlub2RlKTsKKwkJCWV4LS07CisJCX0KKwl9CisJLyoKKwkgKiBUcnkgdG8gTWVyZ2UgdG93YXJkcyByaWdodC4KKwkgKi8KKwlyZXQgPSBleHQ0X2V4dF90cnlfdG9fbWVyZ2UoaW5vZGUsIHBhdGgsIGV4KTsKKwlpZiAocmV0KSB7CisJCWVyciA9IGV4dDRfZXh0X2NvcnJlY3RfaW5kZXhlcyhoYW5kbGUsIGlub2RlLCBwYXRoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CisJfQorCS8qIE1hcmsgbW9kaWZpZWQgZXh0ZW50IGFzIGRpcnR5ICovCisJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKK291dDoKKwlleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUsIHBhdGgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK2V4dDRfZXh0X2hhbmRsZV91bmluaXRpYWxpemVkX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCWV4dDRfbGJsa190IGlibG9jaywgdW5zaWduZWQgaW50IG1heF9ibG9ja3MsCisJCQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwgaW50IGZsYWdzLAorCQkJdW5zaWduZWQgaW50IGFsbG9jYXRlZCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsCisJCQlleHQ0X2ZzYmxrX3QgbmV3YmxvY2spCit7CisJaW50IHJldCA9IDA7CisJaW50IGVyciA9IDA7CisJZXh0NF9pb19lbmRfdCAqaW8gPSBFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbzsKKworCWV4dF9kZWJ1ZygiZXh0NF9leHRfaGFuZGxlX3VuaW5pdGlhbGl6ZWRfZXh0ZW50czogaW5vZGUgJWx1LCBsb2dpY2FsIgorCQkgICJibG9jayAlbGx1LCBtYXhfYmxvY2tzICV1LCBmbGFncyAlZCwgYWxsb2NhdGVkICV1IiwKKwkJICBpbm9kZS0+aV9pbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpaWJsb2NrLCBtYXhfYmxvY2tzLAorCQkgIGZsYWdzLCBhbGxvY2F0ZWQpOworCWV4dDRfZXh0X3Nob3dfbGVhZihpbm9kZSwgcGF0aCk7CisKKwkvKiBESU8gZ2V0X2Jsb2NrKCkgYmVmb3JlIHN1Ym1pdCB0aGUgSU8sIHNwbGl0IHRoZSBleHRlbnQgKi8KKwlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKSB7CisJCXJldCA9IGV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLAorCQkJCQkJaW5vZGUsIHBhdGgsIGlibG9jaywKKwkJCQkJCW1heF9ibG9ja3MsIGZsYWdzKTsKKwkJLyoKKwkJICogRmxhZyB0aGUgaW5vZGUobm9uIGFpbyBjYXNlKSBvciBlbmRfaW8gc3RydWN0IChhaW8gY2FzZSkKKwkJICogdGhhdCB0aGlzIElPIG5lZWRzIHRvIGNvbnZlcnRpb24gdG8gd3JpdHRlbiB3aGVuIElPIGlzCisJCSAqIGNvbXBsZXRlZAorCQkgKi8KKwkJaWYgKGlvKQorCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJZWxzZQorCQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSB8PSBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU47CisJCWdvdG8gb3V0OworCX0KKwkvKiBhc3luYyBESU8gZW5kX2lvIGNvbXBsZXRlLCBjb252ZXJ0IHRoZSBmaWxsZWQgZXh0ZW50IHRvIHdyaXR0ZW4gKi8KKwlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DT05WRVJUX0VYVCkgeworCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZGlvKGhhbmRsZSwgaW5vZGUsCisJCQkJCQkJcGF0aCk7CisJCWdvdG8gb3V0MjsKKwl9CisJLyogYnVmZmVyZWQgSU8gY2FzZSAqLworCS8qCisJICogcmVwZWF0IGZhbGxvY2F0ZSBjcmVhdGlvbiByZXF1ZXN0CisJICogd2UgYWxyZWFkeSBoYXZlIGFuIHVud3JpdHRlbiBleHRlbnQKKwkgKi8KKwlpZiAoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfVU5JTklUX0VYVCkKKwkJZ290byBtYXBfb3V0OworCisJLyogYnVmZmVyZWQgUkVBRCBvciBidWZmZXJlZCB3cml0ZV9iZWdpbigpIGxvb2t1cCAqLworCWlmICgoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKSA9PSAwKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgYmxvY2tzIHJlc2VydmVkIGFscmVhZHkuICBXZQorCQkgKiByZXR1cm4gYWxsb2NhdGVkIGJsb2NrcyBzbyB0aGF0IGRlbGFsbG9jCisJCSAqIHdvbid0IGRvIGJsb2NrIHJlc2VydmF0aW9uIGZvciB1cy4gIEJ1dAorCQkgKiB0aGUgYnVmZmVyIGhlYWQgd2lsbCBiZSB1bm1hcHBlZCBzbyB0aGF0CisJCSAqIGEgcmVhZCBmcm9tIHRoZSBibG9jayByZXR1cm5zIDBzLgorCQkgKi8KKwkJc2V0X2J1ZmZlcl91bndyaXR0ZW4oYmhfcmVzdWx0KTsKKwkJZ290byBvdXQxOworCX0KKworCS8qIGJ1ZmZlcmVkIHdyaXRlLCB3cml0ZXBhZ2UgdGltZSwgY29udmVydCovCisJcmV0ID0gZXh0NF9leHRfY29udmVydF90b19pbml0aWFsaXplZChoYW5kbGUsIGlub2RlLAorCQkJCQkJcGF0aCwgaWJsb2NrLAorCQkJCQkJbWF4X2Jsb2Nrcyk7CitvdXQ6CisJaWYgKHJldCA8PSAwKSB7CisJCWVyciA9IHJldDsKKwkJZ290byBvdXQyOworCX0gZWxzZQorCQlhbGxvY2F0ZWQgPSByZXQ7CisJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKK21hcF9vdXQ6CisJc2V0X2J1ZmZlcl9tYXBwZWQoYmhfcmVzdWx0KTsKK291dDE6CisJaWYgKGFsbG9jYXRlZCA+IG1heF9ibG9ja3MpCisJCWFsbG9jYXRlZCA9IG1heF9ibG9ja3M7CisJZXh0NF9leHRfc2hvd19sZWFmKGlub2RlLCBwYXRoKTsKKwliaF9yZXN1bHQtPmJfYmRldiA9IGlub2RlLT5pX3NiLT5zX2JkZXY7CisJYmhfcmVzdWx0LT5iX2Jsb2NrbnIgPSBuZXdibG9jazsKK291dDI6CisJaWYgKHBhdGgpIHsKKwkJZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpOworCQlrZnJlZShwYXRoKTsKKwl9CisJcmV0dXJuIGVyciA/IGVyciA6IGFsbG9jYXRlZDsKK30KKy8qCiAgKiBCbG9jayBhbGxvY2F0aW9uL21hcC9wcmVhbGxvY2F0aW9uIHJvdXRpbmUgZm9yIGV4dGVudHMgYmFzZWQgZmlsZXMKICAqCiAgKgpAQCAtMjgxNCw2ICszMTQzLDcgQEAKIAlpbnQgZXJyID0gMCwgZGVwdGgsIHJldCwgY2FjaGVfdHlwZTsKIAl1bnNpZ25lZCBpbnQgYWxsb2NhdGVkID0gMDsKIAlzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7CisJZXh0NF9pb19lbmRfdCAqaW8gPSBFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbzsKIAogCV9fY2xlYXJfYml0KEJIX05ldywgJmJoX3Jlc3VsdC0+Yl9zdGF0ZSk7CiAJZXh0X2RlYnVnKCJibG9ja3MgJXUvJXUgcmVxdWVzdGVkIGZvciBpbm9kZSAlbHVcbiIsCkBAIC0yODg5LDMzICszMjE5LDEwIEBACiAJCQkJCQkJRVhUNF9FWFRfQ0FDSEVfRVhURU5UKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWlmIChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19VTklOSVRfRVhUKQotCQkJCWdvdG8gb3V0OwotCQkJaWYgKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpID09IDApIHsKLQkJCQlpZiAoYWxsb2NhdGVkID4gbWF4X2Jsb2NrcykKLQkJCQkJYWxsb2NhdGVkID0gbWF4X2Jsb2NrczsKLQkJCQkvKgotCQkJCSAqIFdlIGhhdmUgYmxvY2tzIHJlc2VydmVkIGFscmVhZHkuICBXZQotCQkJCSAqIHJldHVybiBhbGxvY2F0ZWQgYmxvY2tzIHNvIHRoYXQgZGVsYWxsb2MKLQkJCQkgKiB3b24ndCBkbyBibG9jayByZXNlcnZhdGlvbiBmb3IgdXMuICBCdXQKLQkJCQkgKiB0aGUgYnVmZmVyIGhlYWQgd2lsbCBiZSB1bm1hcHBlZCBzbyB0aGF0Ci0JCQkJICogYSByZWFkIGZyb20gdGhlIGJsb2NrIHJldHVybnMgMHMuCi0JCQkJICovCi0JCQkJc2V0X2J1ZmZlcl91bndyaXR0ZW4oYmhfcmVzdWx0KTsKLQkJCQliaF9yZXN1bHQtPmJfYmRldiA9IGlub2RlLT5pX3NiLT5zX2JkZXY7Ci0JCQkJYmhfcmVzdWx0LT5iX2Jsb2NrbnIgPSBuZXdibG9jazsKLQkJCQlnb3RvIG91dDI7Ci0JCQl9Ci0KLQkJCXJldCA9IGV4dDRfZXh0X2NvbnZlcnRfdG9faW5pdGlhbGl6ZWQoaGFuZGxlLCBpbm9kZSwKLQkJCQkJCQkJcGF0aCwgaWJsb2NrLAotCQkJCQkJCQltYXhfYmxvY2tzKTsKLQkJCWlmIChyZXQgPD0gMCkgewotCQkJCWVyciA9IHJldDsKLQkJCQlnb3RvIG91dDI7Ci0JCQl9IGVsc2UKLQkJCQlhbGxvY2F0ZWQgPSByZXQ7Ci0JCQlnb3RvIG91dG5ldzsKKwkJCXJldCA9IGV4dDRfZXh0X2hhbmRsZV91bmluaXRpYWxpemVkX2V4dGVudHMoaGFuZGxlLAorCQkJCQlpbm9kZSwgaWJsb2NrLCBtYXhfYmxvY2tzLCBwYXRoLAorCQkJCQlmbGFncywgYWxsb2NhdGVkLCBiaF9yZXN1bHQsIG5ld2Jsb2NrKTsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKQEAgLTI5ODYsOSArMzI5MywyNyBAQAogCS8qIHRyeSB0byBpbnNlcnQgbmV3IGV4dGVudCBpbnRvIGZvdW5kIGxlYWYgYW5kIHJldHVybiAqLwogCWV4dDRfZXh0X3N0b3JlX3BibG9jaygmbmV3ZXgsIG5ld2Jsb2NrKTsKIAluZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihhci5sZW4pOwotCWlmIChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19VTklOSVRfRVhUKSAgLyogTWFyayB1bmluaXRpYWxpemVkICovCisJLyogTWFyayB1bmluaXRpYWxpemVkICovCisJaWYgKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1VOSU5JVF9FWFQpewogCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoJm5ld2V4KTsKLQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCk7CisJCS8qCisJCSAqIGlvX2VuZCBzdHJ1Y3R1cmUgd2FzIGNyZWF0ZWQgZm9yIGV2ZXJ5IGFzeW5jCisJCSAqIGRpcmVjdCBJTyB3cml0ZSB0byB0aGUgbWlkZGxlIG9mIHRoZSBmaWxlLgorCQkgKiBUbyBhdm9pZCB1bmVjZXNzYXJ5IGNvbnZlcnRpb24gZm9yIGV2ZXJ5IGFpbyBkaW8gcmV3cml0ZQorCQkgKiB0byB0aGUgbWlkIG9mIGZpbGUsIGhlcmUgd2UgZmxhZyB0aGUgSU8gdGhhdCBpcyByZWFsbHkKKwkJICogbmVlZCB0aGUgY29udmVydGlvbi4KKwkJICogRm9yIG5vbiBhc3ljbiBkaXJlY3QgSU8gY2FzZSwgZmxhZyB0aGUgaW5vZGUgc3RhdGUKKwkJICogdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gY29udmVydGlvbiB3aGVuIElPIGlzIGRvbmUuCisJCSAqLworCQlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKSB7CisJCQlpZiAoaW8pCisJCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJCWVsc2UKKwkJCQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlIHw9CisJCQkJCUVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTjs7CisJCX0KKwl9CisJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXgsIGZsYWdzKTsKIAlpZiAoZXJyKSB7CiAJCS8qIGZyZWUgZGF0YSBibG9ja3Mgd2UganVzdCBhbGxvY2F0ZWQgKi8KIAkJLyogbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgZGlzY2FyZCBoZXJlIGRpcmVjdGx5LApAQCAtMzAwMiw3ICszMzI3LDYgQEAKIAkvKiBwcmV2aW91cyByb3V0aW5lIGNvdWxkIHVzZSBibG9jayB3ZSBhbGxvY2F0ZWQgKi8KIAluZXdibG9jayA9IGV4dF9wYmxvY2soJm5ld2V4KTsKIAlhbGxvY2F0ZWQgPSBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbigmbmV3ZXgpOwotb3V0bmV3OgogCXNldF9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CiAKIAkvKiBDYWNoZSBvbmx5IHdoZW4gaXQgaXMgX25vdF8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQgKi8KQEAgLTMyMDEsNiArMzUyNSw2NCBAQAogfQogCiAvKgorICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0IGEgcmFuZ2Ugb2YgYmxvY2tzIHRvIHdyaXR0ZW4gZXh0ZW50cworICogVGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcGFzcyB0aGUgc3RhcnQgb2Zmc2V0IGFuZCB0aGUgc2l6ZS4KKyAqIGFsbCB1bndyaXR0ZW4gZXh0ZW50cyB3aXRoaW4gdGhpcyByYW5nZSB3aWxsIGJlIGNvbnZlcnRlZCB0bworICogd3JpdHRlbiBleHRlbnRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGRpcmVjdCBJTyBlbmQgaW8gY2FsbCBiYWNrCisgKiBmdW5jdGlvbiwgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIElPIGlzIGNvbXBsZXRlZC4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCisJCQkJICAgIGxvZmZfdCBsZW4pCit7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlleHQ0X2xibGtfdCBibG9jazsKKwl1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0MiA9IDA7CisJc3RydWN0IGJ1ZmZlcl9oZWFkIG1hcF9iaDsKKwl1bnNpZ25lZCBpbnQgY3JlZGl0cywgYmxrYml0cyA9IGlub2RlLT5pX2Jsa2JpdHM7CisKKwlibG9jayA9IG9mZnNldCA+PiBibGtiaXRzOworCS8qCisJICogV2UgY2FuJ3QganVzdCBjb252ZXJ0IGxlbiB0byBtYXhfYmxvY2tzIGJlY2F1c2UKKwkgKiBJZiBibG9ja3NpemUgPSA0MDk2IG9mZnNldCA9IDMwNzIgYW5kIGxlbiA9IDIwNDgKKwkgKi8KKwltYXhfYmxvY2tzID0gKEVYVDRfQkxPQ0tfQUxJR04obGVuICsgb2Zmc2V0LCBibGtiaXRzKSA+PiBibGtiaXRzKQorCQkJCQkJCS0gYmxvY2s7CisJLyoKKwkgKiBjcmVkaXRzIHRvIGluc2VydCAxIGV4dGVudCBpbnRvIGV4dGVudCB0cmVlCisJICovCisJY3JlZGl0cyA9IGV4dDRfY2h1bmtfdHJhbnNfYmxvY2tzKGlub2RlLCBtYXhfYmxvY2tzKTsKKwl3aGlsZSAocmV0ID49IDAgJiYgcmV0IDwgbWF4X2Jsb2NrcykgeworCQlibG9jayA9IGJsb2NrICsgcmV0OworCQltYXhfYmxvY2tzID0gbWF4X2Jsb2NrcyAtIHJldDsKKwkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBjcmVkaXRzKTsKKwkJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCQlicmVhazsKKwkJfQorCQltYXBfYmguYl9zdGF0ZSA9IDA7CisJCXJldCA9IGV4dDRfZ2V0X2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBibG9jaywKKwkJCQkgICAgICBtYXhfYmxvY2tzLCAmbWFwX2JoLAorCQkJCSAgICAgIEVYVDRfR0VUX0JMT0NLU19ESU9fQ09OVkVSVF9FWFQpOworCQlpZiAocmV0IDw9IDApIHsKKwkJCVdBUk5fT04ocmV0IDw9IDApOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXh0NF9leHRfZ2V0X2Jsb2NrcyAiCisJCQkJICAgICJyZXR1cm5lZCBlcnJvciBpbm9kZSMlbHUsIGJsb2NrPSV1LCAiCisJCQkJICAgICJtYXhfYmxvY2tzPSV1IiwgX19mdW5jX18sCisJCQkJICAgIGlub2RlLT5pX2lubywgYmxvY2ssIG1heF9ibG9ja3MpOworCQl9CisJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKKwkJcmV0MiA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CisJCWlmIChyZXQgPD0gMCB8fCByZXQyICkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0ID4gMCA/IHJldDIgOiByZXQ7Cit9CisvKgogICogQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIGV4dGVudCB0byBnYXRoZXIgRklFTUFQIGluZm9ybWF0aW9uLgogICovCiBzdGF0aWMgaW50IGV4dDRfZXh0X2ZpZW1hcF9jYihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggNWNhM2VjYS4uOTYzMDU4MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9maWxlLmMKKysrIGIvZnMvZXh0NC9maWxlLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXh0NF9maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXh0NF9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlICAgPSBleHQ0X3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZzeW5jLmMgYi9mcy9leHQ0L2ZzeW5jLmMKaW5kZXggMDc0NzU3NC4uMmIxNTMxMiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mc3luYy5jCisrKyBiL2ZzL2V4dDQvZnN5bmMuYwpAQCAtNDQsNiArNDQsOCBAQAogICoKICAqIFdoYXQgd2UgZG8gaXMganVzdCBraWNrIG9mZiBhIGNvbW1pdCBhbmQgd2FpdCBvbiBpdC4gIFRoaXMgd2lsbCBzbmFwc2hvdCB0aGUKICAqIGlub2RlIHRvIGRpc2suCisgKgorICogaV9tdXRleCBsb2NrIGlzIGhlbGQgd2hlbiBlbnRlcmluZyBhbmQgZXhpdGluZyB0aGlzIGZ1bmN0aW9uCiAgKi8KIAogaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKQEAgLTU2LDYgKzU4LDkgQEAKIAogCXRyYWNlX2V4dDRfc3luY19maWxlKGZpbGUsIGRlbnRyeSwgZGF0YXN5bmMpOwogCisJcmV0ID0gZmx1c2hfYWlvX2Rpb19jb21wbGV0ZWRfSU8oaW5vZGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAkvKgogCSAqIGRhdGE9d3JpdGViYWNrOgogCSAqICBUaGUgY2FsbGVyJ3MgZmlsZW1hcF9mZGF0YXdyaXRlKCkvd2FpdCB3aWxsIHN5bmMgdGhlIGRhdGEuCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggMDY0NzQ2Zi4uMmM4Y2FhNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlICJleHQ0X2piZDIuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgpAQCAtMTkyLDcgKzE5Myw3IEBACiAgKiBzbyBiZWZvcmUgd2UgY2FsbCBoZXJlIGV2ZXJ5dGhpbmcgbXVzdCBiZSBjb25zaXN0ZW50bHkgZGlydGllZCBhZ2FpbnN0CiAgKiB0aGlzIHRyYW5zYWN0aW9uLgogICovCi0gaW50IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSBpbnQgbmJsb2NrcykKIHsKIAlpbnQgcmV0OwpAQCAtMjA4LDYgKzIwOSw3IEBACiAJdXBfd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pOwogCXJldCA9IGV4dDRfam91cm5hbF9yZXN0YXJ0KGhhbmRsZSwgYmxvY2tzX2Zvcl90cnVuY2F0ZShpbm9kZSkpOwogCWRvd25fd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pOworCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTE0NSw2ICsxMTQ3LDY0IEBACiB9CiAKIC8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjb250aWd1b3VzIGRpcnR5IHBhZ2VzIGluIGEgZ2l2ZW4gaW5vZGUKKyAqIHN0YXJ0aW5nIGF0IHBhZ2UgZnJhbWUgaWR4LgorICovCitzdGF0aWMgcGdvZmZfdCBleHQ0X251bV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGlkeCwKKwkJCQkgICAgdW5zaWduZWQgaW50IG1heF9wYWdlcykKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJcGdvZmZfdAlpbmRleDsKKwlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCXBnb2ZmX3QgbnVtID0gMDsKKwlpbnQgaSwgbnJfcGFnZXMsIGRvbmUgPSAwOworCisJaWYgKG1heF9wYWdlcyA9PSAwKQorCQlyZXR1cm4gMDsKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCXdoaWxlICghZG9uZSkgeworCQlpbmRleCA9IGlkeDsKKwkJbnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cF90YWcoJnB2ZWMsIG1hcHBpbmcsICZpbmRleCwKKwkJCQkJICAgICAgUEFHRUNBQ0hFX1RBR19ESVJUWSwKKwkJCQkJICAgICAgKHBnb2ZmX3QpUEFHRVZFQ19TSVpFKTsKKwkJaWYgKG5yX3BhZ2VzID09IDApCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKKwkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpoZWFkOworCisJCQlsb2NrX3BhZ2UocGFnZSk7CisJCQlpZiAodW5saWtlbHkocGFnZS0+bWFwcGluZyAhPSBtYXBwaW5nKSB8fAorCQkJICAgICFQYWdlRGlydHkocGFnZSkgfHwKKwkJCSAgICBQYWdlV3JpdGViYWNrKHBhZ2UpIHx8CisJCQkgICAgcGFnZS0+aW5kZXggIT0gaWR4KSB7CisJCQkJZG9uZSA9IDE7CisJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgeworCQkJCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKKwkJCQlkbyB7CisJCQkJCWlmICghYnVmZmVyX2RlbGF5KGJoKSAmJgorCQkJCQkgICAgIWJ1ZmZlcl91bndyaXR0ZW4oYmgpKQorCQkJCQkJZG9uZSA9IDE7CisJCQkJCWJoID0gYmgtPmJfdGhpc19wYWdlOworCQkJCX0gd2hpbGUgKCFkb25lICYmIChiaCAhPSBoZWFkKSk7CisJCQl9CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCWlmIChkb25lKQorCQkJCWJyZWFrOworCQkJaWR4Kys7CisJCQludW0rKzsKKwkJCWlmIChudW0gPj0gbWF4X3BhZ2VzKQorCQkJCWJyZWFrOworCQl9CisJCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJfQorCXJldHVybiBudW07Cit9CisKKy8qCiAgKiBUaGUgZXh0NF9nZXRfYmxvY2tzKCkgZnVuY3Rpb24gdHJpZXMgdG8gbG9vayB1cCB0aGUgcmVxdWVzdGVkIGJsb2NrcywKICAqIGFuZCByZXR1cm5zIGlmIHRoZSBibG9ja3MgYXJlIGFscmVhZHkgbWFwcGVkLgogICoKQEAgLTExNzUsNiArMTIzNSw5IEBACiAJY2xlYXJfYnVmZmVyX21hcHBlZChiaCk7CiAJY2xlYXJfYnVmZmVyX3Vud3JpdHRlbihiaCk7CiAKKwlleHRfZGVidWcoImV4dDRfZ2V0X2Jsb2NrcygpOiBpbm9kZSAlbHUsIGZsYWcgJWQsIG1heF9ibG9ja3MgJXUsIgorCQkgICJsb2dpY2FsIGJsb2NrICVsdVxuIiwgaW5vZGUtPmlfaW5vLCBmbGFncywgbWF4X2Jsb2NrcywKKwkJICAodW5zaWduZWQgbG9uZylibG9jayk7CiAJLyoKIAkgKiBUcnkgdG8gc2VlIGlmIHdlIGNhbiBnZXQgdGhlIGJsb2NrIHdpdGhvdXQgcmVxdWVzdGluZyBhIG5ldwogCSAqIGZpbGUgc3lzdGVtIGJsb2NrLgpAQCAtMTc5NiwxMSArMTg1OSwxMSBAQAogCiAJaWYgKGV4dDRfY2xhaW1fZnJlZV9ibG9ja3Moc2JpLCB0b3RhbCkpIHsKIAkJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisJCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCB0b3RhbCk7CiAJCWlmIChleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKSB7CiAJCQl5aWVsZCgpOwogCQkJZ290byByZXBlYXQ7CiAJCX0KLQkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIHRvdGFsKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgKz0gbnJibG9ja3M7CkBAIC0yMDkyLDE4ICsyMTU1LDE4IEBACiBzdGF0aWMgdm9pZCBleHQ0X3ByaW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0+aV9zYik7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlRvdGFsIGZyZWUgYmxvY2tzIGNvdW50ICVsbGRcbiIsCi0JCQlleHQ0X2NvdW50X2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiKSk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIkZyZWUvRGlydHkgYmxvY2sgZGV0YWlsc1xuIik7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgImZyZWVfYmxvY2tzPSVsbGRcbiIsCi0JCQkobG9uZyBsb25nKXBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlcikpOwotCXByaW50ayhLRVJOX0VNRVJHICJkaXJ0eV9ibG9ja3M9JWxsZFxuIiwKLQkJCShsb25nIGxvbmcpcGVyY3B1X2NvdW50ZXJfc3VtKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlcikpOwotCXByaW50ayhLRVJOX0VNRVJHICJCbG9jayByZXNlcnZhdGlvbiBkZXRhaWxzXG4iKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiaV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcz0ldVxuIiwKLQkJCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MpOwotCXByaW50ayhLRVJOX0VNRVJHICJpX3Jlc2VydmVkX21ldGFfYmxvY2tzPSV1XG4iLAotCQkJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2Nrcyk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiVG90YWwgZnJlZSBibG9ja3MgY291bnQgJWxsZFxuIiwKKwkgICAgICAgZXh0NF9jb3VudF9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYikpOworCXByaW50ayhLRVJOX0NSSVQgIkZyZWUvRGlydHkgYmxvY2sgZGV0YWlsc1xuIik7CisJcHJpbnRrKEtFUk5fQ1JJVCAiZnJlZV9ibG9ja3M9JWxsZFxuIiwKKwkgICAgICAgKGxvbmcgbG9uZykgcGVyY3B1X2NvdW50ZXJfc3VtKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyKSk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiZGlydHlfYmxvY2tzPSVsbGRcbiIsCisJICAgICAgIChsb25nIGxvbmcpIHBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2RpcnR5YmxvY2tzX2NvdW50ZXIpKTsKKwlwcmludGsoS0VSTl9DUklUICJCbG9jayByZXNlcnZhdGlvbiBkZXRhaWxzXG4iKTsKKwlwcmludGsoS0VSTl9DUklUICJpX3Jlc2VydmVkX2RhdGFfYmxvY2tzPSV1XG4iLAorCSAgICAgICBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKTsKKwlwcmludGsoS0VSTl9DUklUICJpX3Jlc2VydmVkX21ldGFfYmxvY2tzPSV1XG4iLAorCSAgICAgICBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzKTsKIAlyZXR1cm47CiB9CiAKQEAgLTIxODksMTQgKzIyNTIsMTQgQEAKIAkJICogd3JpdGVwYWdlIGFuZCB3cml0ZXBhZ2VzIHdpbGwgYWdhaW4gdHJ5IHRvIHdyaXRlCiAJCSAqIHRoZSBzYW1lLgogCQkgKi8KLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzIGJsb2NrIGFsbG9jYXRpb24gZmFpbGVkIGZvciBpbm9kZSAlbHUgIgotCQkJCSAgImF0IGxvZ2ljYWwgb2Zmc2V0ICVsbHUgd2l0aCBtYXggYmxvY2tzICIKLQkJCQkgICIlemQgd2l0aCBlcnJvciAlZFxuIiwKLQkJCQkgIF9fZnVuY19fLCBtcGQtPmlub2RlLT5pX2lubywKLQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV4dCwKLQkJCQkgIG1wZC0+Yl9zaXplID4+IG1wZC0+aW5vZGUtPmlfYmxrYml0cywgZXJyKTsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uISEgIgotCQkJCQkiRGF0YSB3aWxsIGJlIGxvc3RcbiIpOworCQlleHQ0X21zZyhtcGQtPmlub2RlLT5pX3NiLCBLRVJOX0NSSVQsCisJCQkgImRlbGF5ZWQgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIGlub2RlICVsdSBhdCAiCisJCQkgImxvZ2ljYWwgb2Zmc2V0ICVsbHUgd2l0aCBtYXggYmxvY2tzICV6ZCB3aXRoICIKKwkJCSAiZXJyb3IgJWRcbiIsIG1wZC0+aW5vZGUtPmlfaW5vLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIG5leHQsCisJCQkgbXBkLT5iX3NpemUgPj4gbXBkLT5pbm9kZS0+aV9ibGtiaXRzLCBlcnIpOworCQlwcmludGsoS0VSTl9DUklUICJUaGlzIHNob3VsZCBub3QgaGFwcGVuISEgICIKKwkJICAgICAgICJEYXRhIHdpbGwgYmUgbG9zdFxuIik7CiAJCWlmIChlcnIgPT0gLUVOT1NQQykgewogCQkJZXh0NF9wcmludF9mcmVlX2Jsb2NrcyhtcGQtPmlub2RlKTsKIAkJfQpAQCAtMjc0Myw4ICsyODA2LDEwIEBACiAJaW50IG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlOwogCWludCBwYWdlc193cml0dGVuID0gMDsKIAlsb25nIHBhZ2VzX3NraXBwZWQ7CisJdW5zaWduZWQgaW50IG1heF9wYWdlczsKIAlpbnQgcmFuZ2VfY3ljbGljLCBjeWNsZWQgPSAxLCBpb19kb25lID0gMDsKLQlpbnQgbmVlZGVkX2Jsb2NrcywgcmV0ID0gMCwgbnJfdG9fd3JpdGVidW1wID0gMDsKKwlpbnQgbmVlZGVkX2Jsb2NrcywgcmV0ID0gMDsKKwlsb25nIGRlc2lyZWRfbnJfdG9fd3JpdGUsIG5yX3RvX3dyaXRlYnVtcCA9IDA7CiAJbG9mZl90IHJhbmdlX3N0YXJ0ID0gd2JjLT5yYW5nZV9zdGFydDsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKG1hcHBpbmctPmhvc3QtPmlfc2IpOwogCkBAIC0yNzcxLDE2ICsyODM2LDYgQEAKIAlpZiAodW5saWtlbHkoc2JpLT5zX21vdW50X2ZsYWdzICYgRVhUNF9NRl9GU19BQk9SVEVEKSkKIAkJcmV0dXJuIC1FUk9GUzsKIAotCS8qCi0JICogTWFrZSBzdXJlIG5yX3RvX3dyaXRlIGlzID49IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdAotCSAqIFRoaXMgbWFrZSBzdXJlIHNtYWxsIGZpbGVzIGJsb2NrcyBhcmUgYWxsb2NhdGVkIGluCi0JICogc2luZ2xlIGF0dGVtcHQuIFRoaXMgZW5zdXJlIHRoYXQgc21hbGwgZmlsZXMKLQkgKiBnZXQgbGVzcyBmcmFnbWVudGVkLgotCSAqLwotCWlmICh3YmMtPm5yX3RvX3dyaXRlIDwgc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0KSB7Ci0JCW5yX3RvX3dyaXRlYnVtcCA9IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCAtIHdiYy0+bnJfdG9fd3JpdGU7Ci0JCXdiYy0+bnJfdG9fd3JpdGUgPSBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3Q7Ci0JfQogCWlmICh3YmMtPnJhbmdlX3N0YXJ0ID09IDAgJiYgd2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKQogCQlyYW5nZV93aG9sZSA9IDE7CiAKQEAgLTI3OTUsNiArMjg1MCwzNiBAQAogCX0gZWxzZQogCQlpbmRleCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAorCS8qCisJICogVGhpcyB3b3JrcyBhcm91bmQgdHdvIGZvcm1zIG9mIHN0dXBpZGl0eS4gIFRoZSBmaXJzdCBpcyBpbgorCSAqIHRoZSB3cml0ZWJhY2sgY29kZSwgd2hpY2ggY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKKwkgKiB3cml0dGVuIHRvIGJlIDEwMjQgcGFnZXMuICBUaGlzIGlzIHdyb25nIG9uIG11bHRpcGxlCisJICogbGV2ZWxzOyBkaWZmZXJlbnQgYXJjaGl0ZWN0dWVzIGhhdmUgYSBkaWZmZXJlbnQgcGFnZSBzaXplLAorCSAqIHdoaWNoIGNoYW5nZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgd2hpY2ggZ2V0cworCSAqIHdyaXR0ZW4uICBTZWNvbmRseSwgNCBtZWdhYnl0ZXMgaXMgd2F5IHRvbyBzbWFsbC4gIFhGUworCSAqIGZvcmNlcyB0aGlzIHZhbHVlIHRvIGJlIDE2IG1lZ2FieXRlcyBieSBtdWx0aXBseWluZworCSAqIG5yX3RvX3dyaXRlIHBhcmFtZXRlciBieSBmb3VyLCBhbmQgdGhlbiByZWxpZXMgb24gaXRzCisJICogYWxsb2NhdG9yIHRvIGFsbG9jYXRlIGxhcmdlciBleHRlbnRzIHRvIG1ha2UgdGhlbQorCSAqIGNvbnRpZ3VvdXMuICBVbmZvcnR1bmF0ZWx5IHRoaXMgYnJpbmdzIHVzIHRvIHRoZSBzZWNvbmQKKwkgKiBzdHVwaWRpdHksIHdoaWNoIGlzIHRoYXQgZXh0NCdzIG1iYWxsb2MgY29kZSBvbmx5IGFsbG9jYXRlcworCSAqIGF0IG1vc3QgMjA0OCBibG9ja3MuICBTbyB3ZSBmb3JjZSBjb250aWd1b3VzIHdyaXRlcyB1cCB0bworCSAqIHRoZSBudW1iZXIgb2YgZGlydHkgYmxvY2tzIGluIHRoZSBpbm9kZSwgb3IKKwkgKiBzYmktPm1heF93cml0ZWJhY2tfbWJfYnVtcCB3aGljaGV2ZXIgaXMgc21hbGxlci4KKwkgKi8KKwltYXhfcGFnZXMgPSBzYmktPnNfbWF4X3dyaXRlYmFja19tYl9idW1wIDw8ICgyMCAtIFBBR0VfQ0FDSEVfU0hJRlQpOworCWlmICghcmFuZ2VfY3ljbGljICYmIHJhbmdlX3dob2xlKQorCQlkZXNpcmVkX25yX3RvX3dyaXRlID0gd2JjLT5ucl90b193cml0ZSAqIDg7CisJZWxzZQorCQlkZXNpcmVkX25yX3RvX3dyaXRlID0gZXh0NF9udW1fZGlydHlfcGFnZXMoaW5vZGUsIGluZGV4LAorCQkJCQkJCSAgIG1heF9wYWdlcyk7CisJaWYgKGRlc2lyZWRfbnJfdG9fd3JpdGUgPiBtYXhfcGFnZXMpCisJCWRlc2lyZWRfbnJfdG9fd3JpdGUgPSBtYXhfcGFnZXM7CisKKwlpZiAod2JjLT5ucl90b193cml0ZSA8IGRlc2lyZWRfbnJfdG9fd3JpdGUpIHsKKwkJbnJfdG9fd3JpdGVidW1wID0gZGVzaXJlZF9ucl90b193cml0ZSAtIHdiYy0+bnJfdG9fd3JpdGU7CisJCXdiYy0+bnJfdG9fd3JpdGUgPSBkZXNpcmVkX25yX3RvX3dyaXRlOworCX0KKwogCW1wZC53YmMgPSB3YmM7CiAJbXBkLmlub2RlID0gbWFwcGluZy0+aG9zdDsKIApAQCAtMjgyMiwxMCArMjkwNyw5IEBACiAJCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgbmVlZGVkX2Jsb2Nrcyk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOwotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGpiZDJfc3RhcnQ6ICIKKwkJCWV4dDRfbXNnKGlub2RlLT5pX3NiLCBLRVJOX0NSSVQsICIlczogamJkMl9zdGFydDogIgogCQkJICAgICAgICIlbGQgcGFnZXMsIGlubyAlbHU7IGVyciAlZFxuIiwgX19mdW5jX18sCiAJCQkJd2JjLT5ucl90b193cml0ZSwgaW5vZGUtPmlfaW5vLCByZXQpOwotCQkJZHVtcF9zdGFjaygpOwogCQkJZ290byBvdXRfd3JpdGVwYWdlczsKIAkJfQogCkBAIC0yODk3LDkgKzI5ODEsMTAgQEAKIAkJZ290byByZXRyeTsKIAl9CiAJaWYgKHBhZ2VzX3NraXBwZWQgIT0gd2JjLT5wYWdlc19za2lwcGVkKQotCQlwcmludGsoS0VSTl9FTUVSRyAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiBsZWF2aW5nICVzICIKLQkJCQkid2l0aCBucl90b193cml0ZSA9ICVsZCByZXQgPSAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgd2JjLT5ucl90b193cml0ZSwgcmV0KTsKKwkJZXh0NF9tc2coaW5vZGUtPmlfc2IsIEtFUk5fQ1JJVCwKKwkJCSAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiBsZWF2aW5nICVzICIKKwkJCSAid2l0aCBucl90b193cml0ZSA9ICVsZCByZXQgPSAlZFxuIiwKKwkJCSBfX2Z1bmNfXywgd2JjLT5ucl90b193cml0ZSwgcmV0KTsKIAogCS8qIFVwZGF0ZSBpbmRleCAqLwogCWluZGV4ICs9IHBhZ2VzX3dyaXR0ZW47CkBAIC0yOTE0LDcgKzI5OTksOCBAQAogb3V0X3dyaXRlcGFnZXM6CiAJaWYgKCFub19ucndyaXRlX2luZGV4X3VwZGF0ZSkKIAkJd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSA9IDA7Ci0Jd2JjLT5ucl90b193cml0ZSAtPSBucl90b193cml0ZWJ1bXA7CisJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPiBucl90b193cml0ZWJ1bXApCisJCXdiYy0+bnJfdG9fd3JpdGUgLT0gbnJfdG9fd3JpdGVidW1wOwogCXdiYy0+cmFuZ2Vfc3RhcnQgPSByYW5nZV9zdGFydDsKIAl0cmFjZV9leHQ0X2RhX3dyaXRlcGFnZXNfcmVzdWx0KGlub2RlLCB3YmMsIHJldCwgcGFnZXNfd3JpdHRlbik7CiAJcmV0dXJuIHJldDsKQEAgLTMyNzIsNiArMzM1OCw4IEBACiB9CiAKIC8qCisgKiBPX0RJUkVDVCBmb3IgZXh0MyAob3IgaW5kaXJlY3QgbWFwKSBiYXNlZCBmaWxlcworICoKICAqIElmIHRoZSBPX0RJUkVDVCB3cml0ZSB3aWxsIGV4dGVuZCB0aGUgZmlsZSB0aGVuIGFkZCB0aGlzIGlub2RlIHRvIHRoZQogICogb3JwaGFuIGxpc3QuICBTbyByZWNvdmVyeSB3aWxsIHRydW5jYXRlIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNpemUKICAqIGlmIHRoZSBtYWNoaW5lIGNyYXNoZXMgZHVyaW5nIHRoZSB3cml0ZS4KQEAgLTMyODAsNyArMzM2OCw3IEBACiAgKiBjcmFzaGVzIHRoZW4gc3RhbGUgZGlzayBkYXRhIF9tYXlfIGJlIGV4cG9zZWQgaW5zaWRlIHRoZSBmaWxlLiBCdXQgY3VycmVudAogICogVkZTIGNvZGUgZmFsbHMgYmFjayBpbnRvIGJ1ZmZlcmVkIHBhdGggaW4gdGhhdCBjYXNlIHNvIHdlIGFyZSBzYWZlLgogICovCi1zdGF0aWMgc3NpemVfdCBleHQ0X2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKK3N0YXRpYyBzc2l6ZV90IGV4dDRfaW5kX2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzKQogewpAQCAtMzI5MSw2ICszMzc5LDcgQEAKIAlzc2l6ZV90IHJldDsKIAlpbnQgb3JwaGFuID0gMDsKIAlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisJaW50IHJldHJpZXMgPSAwOwogCiAJaWYgKHJ3ID09IFdSSVRFKSB7CiAJCWxvZmZfdCBmaW5hbF9zaXplID0gb2Zmc2V0ICsgY291bnQ7CkBAIC0zMzEzLDkgKzM0MDIsMTIgQEAKIAkJfQogCX0KIAorcmV0cnk6CiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCiAJCQkJIGV4dDRfZ2V0X2Jsb2NrLCBOVUxMKTsKKwlpZiAocmV0ID09IC1FTk9TUEMgJiYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkKKwkJZ290byByZXRyeTsKIAogCWlmIChvcnBoYW4pIHsKIAkJaW50IGVycjsKQEAgLTMzNTQsNiArMzQ0NiwzNjQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGV4dDRfZ2V0X2Jsb2NrX2Rpb193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCisJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQoreworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIG1heF9ibG9ja3MgPSBiaF9yZXN1bHQtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOworCWludCBkaW9fY3JlZGl0czsKKworCWV4dDRfZGVidWcoImV4dDRfZ2V0X2Jsb2NrX2Rpb193cml0ZTogaW5vZGUgJWx1LCBjcmVhdGUgZmxhZyAlZFxuIiwKKwkJICAgaW5vZGUtPmlfaW5vLCBjcmVhdGUpOworCS8qCisJICogRElPIFZGUyBjb2RlIHBhc3NlcyBjcmVhdGUgPSAwIGZsYWcgZm9yIHdyaXRlIHRvCisJICogdGhlIG1pZGRsZSBvZiBmaWxlLiBJdCBkb2VzIHRoaXMgdG8gYXZvaWQgYmxvY2sKKwkgKiBhbGxvY2F0aW9uIGZvciBob2xlcywgdG8gcHJldmVudCBleHBvc2Ugc3RhbGUgZGF0YQorCSAqIG91dCB3aGVuIHRoZXJlIGlzIHBhcmFsbGVsIGJ1ZmZlcmVkIHJlYWQgKHdoaWNoIGRvZXMKKwkgKiBub3QgaG9sZCB0aGUgaV9tdXRleCBsb2NrKSB3aGlsZSBkaXJlY3QgSU8gd3JpdGUgaGFzCisJICogbm90IGNvbXBsZXRlZC4gRElPIHJlcXVlc3Qgb24gaG9sZXMgZmluYWxseSBmYWxscyBiYWNrCisJICogdG8gYnVmZmVyZWQgSU8gZm9yIHRoaXMgcmVhc29uLgorCSAqCisJICogRm9yIGV4dDQgZXh0ZW50IGJhc2VkIGZpbGUsIHNpbmNlIHdlIHN1cHBvcnQgZmFsbG9jYXRlLAorCSAqIG5ldyBhbGxvY2F0ZWQgZXh0ZW50IGFzIHVuaW5pdGlhbGl6ZWQsIGZvciBob2xlcywgd2UKKwkgKiBjb3VsZCBmYWxsb2NhdGUgYmxvY2tzIGZvciBob2xlcywgdGh1cyBwYXJhbGxlbAorCSAqIGJ1ZmZlcmVkIElPIHJlYWQgd2lsbCB6ZXJvIG91dCB0aGUgcGFnZSB3aGVuIHJlYWQgb24KKwkgKiBhIGhvbGUgd2hpbGUgcGFyYWxsZWwgRElPIHdyaXRlIHRvIHRoZSBob2xlIGhhcyBub3QgY29tcGxldGVkLgorCSAqCisJICogd2hlbiB3ZSBjb21lIGhlcmUsIHdlIGtub3cgaXQncyBhIGRpcmVjdCBJTyB3cml0ZSB0bworCSAqIHRvIHRoZSBtaWRkbGUgb2YgZmlsZSAoPGlfc2l6ZSkKKwkgKiBzbyBpdCdzIHNhZmUgdG8gb3ZlcnJpZGUgdGhlIGNyZWF0ZSBmbGFnIGZyb20gVkZTLgorCSAqLworCWNyZWF0ZSA9IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVDsKKworCWlmIChtYXhfYmxvY2tzID4gRElPX01BWF9CTE9DS1MpCisJCW1heF9ibG9ja3MgPSBESU9fTUFYX0JMT0NLUzsKKwlkaW9fY3JlZGl0cyA9IGV4dDRfY2h1bmtfdHJhbnNfYmxvY2tzKGlub2RlLCBtYXhfYmxvY2tzKTsKKwloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIGRpb19jcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gZXh0NF9nZXRfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGlibG9jaywgbWF4X2Jsb2NrcywgYmhfcmVzdWx0LAorCQkJICAgICAgY3JlYXRlKTsKKwlpZiAocmV0ID4gMCkgeworCQliaF9yZXN1bHQtPmJfc2l6ZSA9IChyZXQgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJCXJldCA9IDA7CisJfQorCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZXh0NF9mcmVlX2lvX2VuZChleHQ0X2lvX2VuZF90ICppbykKK3sKKwlCVUdfT04oIWlvKTsKKwlpcHV0KGlvLT5pbm9kZSk7CisJa2ZyZWUoaW8pOworfQorc3RhdGljIHZvaWQgZHVtcF9haW9fZGlvX2xpc3Qoc3RydWN0IGlub2RlICogaW5vZGUpCit7CisjaWZkZWYJRVhUNF9ERUJVRworCXN0cnVjdCBsaXN0X2hlYWQgKmN1ciwgKmJlZm9yZSwgKmFmdGVyOworCWV4dDRfaW9fZW5kX3QgKmlvLCAqaW8wLCAqaW8xOworCisJaWYgKGxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSl7CisJCWV4dDRfZGVidWcoImlub2RlICVsdSBhaW8gZGlvIGxpc3QgaXMgZW1wdHlcbiIsIGlub2RlLT5pX2lubyk7CisJCXJldHVybjsKKwl9CisKKwlleHQ0X2RlYnVnKCJEdW1wIGlub2RlICVsdSBhaW9fZGlvX2NvbXBsZXRlZF9JTyBsaXN0IFxuIiwgaW5vZGUtPmlfaW5vKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvLCAmRVhUNF9JKGlub2RlKS0+aV9haW9fZGlvX2NvbXBsZXRlX2xpc3QsIGxpc3QpeworCQljdXIgPSAmaW8tPmxpc3Q7CisJCWJlZm9yZSA9IGN1ci0+cHJldjsKKwkJaW8wID0gY29udGFpbmVyX29mKGJlZm9yZSwgZXh0NF9pb19lbmRfdCwgbGlzdCk7CisJCWFmdGVyID0gY3VyLT5uZXh0OworCQlpbzEgPSBjb250YWluZXJfb2YoYWZ0ZXIsIGV4dDRfaW9fZW5kX3QsIGxpc3QpOworCisJCWV4dDRfZGVidWcoImlvIDB4JXAgZnJvbSBpbm9kZSAlbHUscHJldiAweCVwLG5leHQgMHglcFxuIiwKKwkJCSAgICBpbywgaW5vZGUtPmlfaW5vLCBpbzAsIGlvMSk7CisJfQorI2VuZGlmCit9CisKKy8qCisgKiBjaGVjayBhIHJhbmdlIG9mIHNwYWNlIGFuZCBjb252ZXJ0IHVud3JpdHRlbiBleHRlbnRzIHRvIHdyaXR0ZW4uCisgKi8KK3N0YXRpYyBpbnQgZXh0NF9lbmRfYWlvX2Rpb19ub2xvY2soZXh0NF9pb19lbmRfdCAqaW8pCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGlvLT5pbm9kZTsKKwlsb2ZmX3Qgb2Zmc2V0ID0gaW8tPm9mZnNldDsKKwlzaXplX3Qgc2l6ZSA9IGlvLT5zaXplOworCWludCByZXQgPSAwOworCisJZXh0NF9kZWJ1ZygiZW5kX2Fpb19kaW9fb25sb2NrOiBpbyAweCVwIGZyb20gaW5vZGUgJWx1LGxpc3QtPm5leHQgMHglcCwiCisJCSAgICJsaXN0LT5wcmV2IDB4JXBcbiIsCisJICAgICAgICAgICBpbywgaW5vZGUtPmlfaW5vLCBpby0+bGlzdC5uZXh0LCBpby0+bGlzdC5wcmV2KTsKKworCWlmIChsaXN0X2VtcHR5KCZpby0+bGlzdCkpCisJCXJldHVybiByZXQ7CisKKwlpZiAoaW8tPmZsYWcgIT0gRElPX0FJT19VTldSSVRURU4pCisJCXJldHVybiByZXQ7CisKKwlpZiAob2Zmc2V0ICsgc2l6ZSA8PSBpX3NpemVfcmVhZChpbm9kZSkpCisJCXJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhpbm9kZSwgb2Zmc2V0LCBzaXplKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICIlczogZmFpbGVkIHRvIGNvbnZlcnQgdW53cml0dGVuIgorCQkJImV4dGVudHMgdG8gd3JpdHRlbiBleHRlbnRzLCBlcnJvciBpcyAlZCIKKwkJCSIgaW8gaXMgc3RpbGwgb24gaW5vZGUgJWx1IGFpbyBkaW8gbGlzdFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHJldCwgaW5vZGUtPmlfaW5vKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBjbGVhciB0aGUgRElPIEFJTyB1bndyaXR0ZW4gZmxhZyAqLworCWlvLT5mbGFnID0gMDsKKwlyZXR1cm4gcmV0OworfQorLyoKKyAqIHdvcmsgb24gY29tcGxldGVkIGFpbyBkaW8gSU8sIHRvIGNvbnZlcnQgdW53cml0dGVuIGV4dGVudHMgdG8gZXh0ZW50cworICovCitzdGF0aWMgdm9pZCBleHQ0X2VuZF9haW9fZGlvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWV4dDRfaW9fZW5kX3QgKmlvICA9IGNvbnRhaW5lcl9vZih3b3JrLCBleHQ0X2lvX2VuZF90LCB3b3JrKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW8tPmlub2RlOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKGlvKTsKKwlpZiAocmV0ID49IDApIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZpby0+bGlzdCkpCisJCQlsaXN0X2RlbF9pbml0KCZpby0+bGlzdCk7CisJCWV4dDRfZnJlZV9pb19lbmQoaW8pOworCX0KKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKK30KKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGV4dDRfc3luY19maWxlKCkuCisgKgorICogV2hlbiBBSU8gRElPIElPIGlzIGNvbXBsZXRlZCwgdGhlIHdvcmsgdG8gY29udmVydCB1bndyaXR0ZW4KKyAqIGV4dGVudHMgdG8gd3JpdHRlbiBpcyBxdWV1ZWQgb24gd29ya3F1ZXVlIGJ1dCBtYXkgbm90IGdldCBpbW1lZGlhdGVseQorICogc2NoZWR1bGVkLiBXaGVuIGZzeW5jIGlzIGNhbGxlZCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlCisgKiBjb252ZXJzaW9uIGlzIGNvbXBsZXRlIGJlZm9yZSBmc3luYyByZXR1cm5zLgorICogVGhlIGlub2RlIGtlZXBzIHRyYWNrIG9mIGEgbGlzdCBvZiBjb21wbGV0ZWQgQUlPIGZyb20gRElPIHBhdGgKKyAqIHRoYXQgbWlnaHQgbmVlZHMgdG8gZG8gdGhlIGNvbnZlcnNpb24uIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhyb3VnaAorICogdGhlIGxpc3QgYW5kIGNvbnZlcnQgdGhlIHJlbGF0ZWQgdW53cml0dGVuIGV4dGVudHMgdG8gd3JpdHRlbi4KKyAqLworaW50IGZsdXNoX2Fpb19kaW9fY29tcGxldGVkX0lPKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJZXh0NF9pb19lbmRfdCAqaW87CisJaW50IHJldCA9IDA7CisJaW50IHJldDIgPSAwOworCisJaWYgKGxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSkKKwkJcmV0dXJuIHJldDsKKworCWR1bXBfYWlvX2Rpb19saXN0KGlub2RlKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSl7CisJCWlvID0gbGlzdF9lbnRyeShFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdC5uZXh0LAorCQkJCWV4dDRfaW9fZW5kX3QsIGxpc3QpOworCQkvKgorCQkgKiBDYWxsaW5nIGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKCkgdG8gY29udmVydCBjb21wbGV0ZWQKKwkJICogSU8gdG8gd3JpdHRlbi4KKwkJICoKKwkJICogV2hlbiBleHQ0X3N5bmNfZmlsZSgpIGlzIGNhbGxlZCwgcnVuX3F1ZXVlKCkgbWF5IGFscmVhZHkKKwkJICogYWJvdXQgdG8gZmx1c2ggdGhlIHdvcmsgY29ycmVzcG9uZGluZyB0byB0aGlzIGlvIHN0cnVjdHVyZS4KKwkJICogSXQgd2lsbCBiZSB1cHNldCBpZiBpdCBmb3VuZHMgdGhlIGlvIHN0cnVjdHVyZSByZWxhdGVkCisJCSAqIHRvIHRoZSB3b3JrLXRvLWJlIHNjaGVkdWxlIGlzIGZyZWVkLgorCQkgKgorCQkgKiBUaHVzIHdlIG5lZWQgdG8ga2VlcCB0aGUgaW8gc3RydWN0dXJlIHN0aWxsIHZhbGlkIGhlcmUgYWZ0ZXIKKwkJICogY29udmVydGlvbiBmaW5pc2hlZC4gVGhlIGlvIHN0cnVjdHVyZSBoYXMgYSBmbGFnIHRvCisJCSAqIGF2b2lkIGRvdWJsZSBjb252ZXJ0aW5nIGZyb20gYm90aCBmc3luYyBhbmQgYmFja2dyb3VuZCB3b3JrCisJCSAqIHF1ZXVlIHdvcmsuCisJCSAqLworCQlyZXQgPSBleHQ0X2VuZF9haW9fZGlvX25vbG9jayhpbyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0MiA9IHJldDsKKwkJZWxzZQorCQkJbGlzdF9kZWxfaW5pdCgmaW8tPmxpc3QpOworCX0KKwlyZXR1cm4gKHJldDIgPCAwKSA/IHJldDIgOiAwOworfQorCitzdGF0aWMgZXh0NF9pb19lbmRfdCAqZXh0NF9pbml0X2lvX2VuZCAoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlleHQ0X2lvX2VuZF90ICppbyA9IE5VTEw7CisKKwlpbyA9IGttYWxsb2Moc2l6ZW9mKCppbyksIEdGUF9OT0ZTKTsKKworCWlmIChpbykgeworCQlpZ3JhYihpbm9kZSk7CisJCWlvLT5pbm9kZSA9IGlub2RlOworCQlpby0+ZmxhZyA9IDA7CisJCWlvLT5vZmZzZXQgPSAwOworCQlpby0+c2l6ZSA9IDA7CisJCWlvLT5lcnJvciA9IDA7CisJCUlOSVRfV09SSygmaW8tPndvcmssIGV4dDRfZW5kX2Fpb19kaW9fd29yayk7CisJCUlOSVRfTElTVF9IRUFEKCZpby0+bGlzdCk7CisJfQorCisJcmV0dXJuIGlvOworfQorCitzdGF0aWMgdm9pZCBleHQ0X2VuZF9pb19kaW8oc3RydWN0IGtpb2NiICppb2NiLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJICAgIHNzaXplX3Qgc2l6ZSwgdm9pZCAqcHJpdmF0ZSkKK3sKKyAgICAgICAgZXh0NF9pb19lbmRfdCAqaW9fZW5kID0gaW9jYi0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisKKwkvKiBpZiBub3QgYXN5bmMgZGlyZWN0IElPIG9yIGRpbyB3aXRoIDAgYnl0ZXMgd3JpdGUsIGp1c3QgcmV0dXJuICovCisJaWYgKCFpb19lbmQgfHwgIXNpemUpCisJCXJldHVybjsKKworCWV4dF9kZWJ1ZygiZXh0NF9lbmRfaW9fZGlvKCk6IGlvX2VuZCAweCVwIgorCQkgICJmb3IgaW5vZGUgJWx1LCBpb2NiIDB4JXAsIG9mZnNldCAlbGx1LCBzaXplICVsbHVcbiIsCisgCQkgIGlvY2ItPnByaXZhdGUsIGlvX2VuZC0+aW5vZGUtPmlfaW5vLCBpb2NiLCBvZmZzZXQsCisJCSAgc2l6ZSk7CisKKwkvKiBpZiBub3QgYWlvIGRpbyB3aXRoIHVud3JpdHRlbiBleHRlbnRzLCBqdXN0IGZyZWUgaW8gYW5kIHJldHVybiAqLworCWlmIChpb19lbmQtPmZsYWcgIT0gRElPX0FJT19VTldSSVRURU4peworCQlleHQ0X2ZyZWVfaW9fZW5kKGlvX2VuZCk7CisJCWlvY2ItPnByaXZhdGUgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJaW9fZW5kLT5vZmZzZXQgPSBvZmZzZXQ7CisJaW9fZW5kLT5zaXplID0gc2l6ZTsKKwl3cSA9IEVYVDRfU0IoaW9fZW5kLT5pbm9kZS0+aV9zYiktPmRpb191bndyaXR0ZW5fd3E7CisKKwkvKiBxdWV1ZSB0aGUgd29yayB0byBjb252ZXJ0IHVud3JpdHRlbiBleHRlbnRzIHRvIHdyaXR0ZW4gKi8KKwlxdWV1ZV93b3JrKHdxLCAmaW9fZW5kLT53b3JrKTsKKworCS8qIEFkZCB0aGUgaW9fZW5kIHRvIHBlci1pbm9kZSBjb21wbGV0ZWQgYWlvIGRpbyBsaXN0Ki8KKwlsaXN0X2FkZF90YWlsKCZpb19lbmQtPmxpc3QsCisJCSAmRVhUNF9JKGlvX2VuZC0+aW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCk7CisJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7Cit9CisvKgorICogRm9yIGV4dDQgZXh0ZW50IGZpbGVzLCBleHQ0IHdpbGwgZG8gZGlyZWN0LWlvIHdyaXRlIHRvIGhvbGVzLAorICogcHJlYWxsb2NhdGVkIGV4dGVudHMsIGFuZCB0aG9zZSB3cml0ZSBleHRlbmQgdGhlIGZpbGUsIG5vIG5lZWQgdG8KKyAqIGZhbGwgYmFjayB0byBidWZmZXJlZCBJTy4KKyAqCisgKiBGb3IgaG9sZXMsIHdlIGZhbGxvY2F0ZSB0aG9zZSBibG9ja3MsIG1hcmsgdGhlbSBhcyB1bmludGlhbGl6ZWQKKyAqIElmIHRob3NlIGJsb2NrcyB3ZXJlIHByZWFsbG9jYXRlZCwgd2UgbWFyayBzdXJlIHRoZXkgYXJlIHNwbGl0ZWQsIGJ1dAorICogc3RpbGwga2VlcCB0aGUgcmFuZ2UgdG8gd3JpdGUgYXMgdW5pbnRpYWxpemVkLgorICoKKyAqIFRoZSB1bndycml0dGVuIGV4dGVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gd3JpdHRlbiB3aGVuIERJTyBpcyBjb21wbGV0ZWQuCisgKiBGb3IgYXN5bmMgZGlyZWN0IElPLCBzaW5jZSB0aGUgSU8gbWF5IHN0aWxsIHBlbmRpbmcgd2hlbiByZXR1cm4sIHdlCisgKiBzZXQgdXAgYW4gZW5kX2lvIGNhbGwgYmFjayBmdW5jdGlvbiwgd2hpY2ggd2lsbCBkbyB0aGUgY29udmVydGlvbgorICogd2hlbiBhc3luYyBkaXJlY3QgSU8gY29tcGxldGVkLgorICoKKyAqIElmIHRoZSBPX0RJUkVDVCB3cml0ZSB3aWxsIGV4dGVuZCB0aGUgZmlsZSB0aGVuIGFkZCB0aGlzIGlub2RlIHRvIHRoZQorICogb3JwaGFuIGxpc3QuICBTbyByZWNvdmVyeSB3aWxsIHRydW5jYXRlIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNpemUKKyAqIGlmIHRoZSBtYWNoaW5lIGNyYXNoZXMgZHVyaW5nIHRoZSB3cml0ZS4KKyAqCisgKi8KK3N0YXRpYyBzc2l6ZV90IGV4dDRfZXh0X2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OworCXNzaXplX3QgcmV0OworCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKworCWxvZmZfdCBmaW5hbF9zaXplID0gb2Zmc2V0ICsgY291bnQ7CisJaWYgKHJ3ID09IFdSSVRFICYmIGZpbmFsX3NpemUgPD0gaW5vZGUtPmlfc2l6ZSkgeworCQkvKgorIAkJICogV2UgY291bGQgZGlyZWN0IHdyaXRlIHRvIGhvbGVzIGFuZCBmYWxsb2NhdGUuCisJCSAqCisgCQkgKiBBbGxvY2F0ZWQgYmxvY2tzIHRvIGZpbGwgdGhlIGhvbGUgYXJlIG1hcmtlZCBhcyB1bmluaXRpYWxpemVkCisgCQkgKiB0byBwcmV2ZW50IHBhcmFsZWwgYnVmZmVyZWQgcmVhZCB0byBleHBvc2UgdGhlIHN0YWxlIGRhdGEKKyAJCSAqIGJlZm9yZSBESU8gY29tcGxldGUgdGhlIGRhdGEgSU8uCisJCSAqCisgCQkgKiBBcyB0byBwcmV2aW91c2x5IGZhbGxvY2F0ZWQgZXh0ZW50cywgZXh0NCBnZXRfYmxvY2sKKyAJCSAqIHdpbGwganVzdCBzaW1wbHkgbWFyayB0aGUgYnVmZmVyIG1hcHBlZCBidXQgc3RpbGwKKyAJCSAqIGtlZXAgdGhlIGV4dGVudHMgdW5pbml0aWFsaXplZC4KKyAJCSAqCisJCSAqIGZvciBub24gQUlPIGNhc2UsIHdlIHdpbGwgY29udmVydCB0aG9zZSB1bndyaXR0ZW4gZXh0ZW50cworCQkgKiB0byB3cml0dGVuIGFmdGVyIHJldHVybiBiYWNrIGZyb20gYmxvY2tkZXZfZGlyZWN0X0lPLgorCQkgKgorCQkgKiBmb3IgYXN5bmMgRElPLCB0aGUgY29udmVyc2lvbiBuZWVkcyB0byBiZSBkZWZlcmVkIHdoZW4KKwkJICogdGhlIElPIGlzIGNvbXBsZXRlZC4gVGhlIGV4dDQgZW5kX2lvIGNhbGxiYWNrIGZ1bmN0aW9uCisJCSAqIHdpbGwgYmUgY2FsbGVkIHRvIHRha2UgY2FyZSBvZiB0aGUgY29udmVyc2lvbiB3b3JrLgorCQkgKiBIZXJlIGZvciBhc3luYyBjYXNlLCB3ZSBhbGxvY2F0ZSBhbiBpb19lbmQgc3RydWN0dXJlIHRvCisJCSAqIGhvb2sgdG8gdGhlIGlvY2IuCisgCQkgKi8KKwkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7CisJCUVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvID0gTlVMTDsKKwkJaWYgKCFpc19zeW5jX2tpb2NiKGlvY2IpKSB7CisJCQlpb2NiLT5wcml2YXRlID0gZXh0NF9pbml0X2lvX2VuZChpbm9kZSk7CisJCQlpZiAoIWlvY2ItPnByaXZhdGUpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkvKgorCQkJICogd2Ugc2F2ZSB0aGUgaW8gc3RydWN0dXJlIGZvciBjdXJyZW50IGFzeW5jCisJCQkgKiBkaXJlY3QgSU8sIHNvIHRoYXQgbGF0ZXIgZXh0NF9nZXRfYmxvY2tzKCkKKwkJCSAqIGNvdWxkIGZsYWcgdGhlIGlvIHN0cnVjdHVyZSB3aGV0aGVyIHRoZXJlCisJCQkgKiBpcyBhIHVud3JpdHRlbiBleHRlbnRzIG5lZWRzIHRvIGJlIGNvbnZlcnRlZAorCQkJICogd2hlbiBJTyBpcyBjb21wbGV0ZWQuCisJCQkgKi8KKwkJCUVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvID0gaW9jYi0+cHJpdmF0ZTsKKwkJfQorCisJCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsCisJCQkJCSBpbm9kZS0+aV9zYi0+c19iZGV2LCBpb3YsCisJCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCisJCQkJCSBleHQ0X2dldF9ibG9ja19kaW9fd3JpdGUsCisJCQkJCSBleHQ0X2VuZF9pb19kaW8pOworCQlpZiAoaW9jYi0+cHJpdmF0ZSkKKwkJCUVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvID0gTlVMTDsKKwkJLyoKKwkJICogVGhlIGlvX2VuZCBzdHJ1Y3R1cmUgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIGlub2RlLAorCQkgKiB0aGF0IHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkZXN0cm95ZWQgYW5kIHRoZQorCQkgKiByZWZlcmVuY2UgdG8gdGhlIGlub2RlIG5lZWQgdG8gYmUgZHJvcHBlZCwgd2hlbiBJTyBpcworCQkgKiBjb21wbGV0ZSwgZXZlbiB3aXRoIDAgYnl0ZSB3cml0ZSwgb3IgZmFpbGVkLgorCQkgKgorCQkgKiBJbiB0aGUgc3VjY2Vzc2Z1bCBBSU8gRElPIGNhc2UsIHRoZSBpb19lbmQgc3RydWN0dXJlIHdpbGwgYmUKKwkJICogZGVzY3Ryb3llZCBhbmQgdGhlIHJlZmVyZW5jZSB0byB0aGUgaW5vZGUgd2lsbCBiZSBkcm9wcGVkCisJCSAqIGFmdGVyIHRoZSBlbmRfaW8gY2FsbCBiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKwkJICoKKwkJICogSW4gdGhlIGNhc2UgdGhlcmUgaXMgMCBieXRlIHdyaXRlLCBvciBlcnJvciBjYXNlLCBzaW5jZQorCQkgKiBWRlMgZGlyZWN0IElPIHdvbid0IGludm9rZSB0aGUgZW5kX2lvIGNhbGwgYmFjayBmdW5jdGlvbiwKKwkJICogd2UgbmVlZCB0byBmcmVlIHRoZSBlbmRfaW8gc3RydWN0dXJlIGhlcmUuCisJCSAqLworCQlpZiAocmV0ICE9IC1FSU9DQlFVRVVFRCAmJiByZXQgPD0gMCAmJiBpb2NiLT5wcml2YXRlKSB7CisJCQlleHQ0X2ZyZWVfaW9fZW5kKGlvY2ItPnByaXZhdGUpOworCQkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7CisJCX0gZWxzZSBpZiAocmV0ID4gMCAmJiAoRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmCisJCQkJICAgICAgIEVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTikpIHsKKwkJCWludCBlcnI7CisJCQkvKgorCQkJICogZm9yIG5vbiBBSU8gY2FzZSwgc2luY2UgdGhlIElPIGlzIGFscmVhZHkKKwkJCSAqIGNvbXBsZXRlZCwgd2UgY291bGQgZG8gdGhlIGNvbnZlcnRpb24gcmlnaHQgaGVyZQorCQkJICovCisJCQllcnIgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaW5vZGUsCisJCQkJCQkJICAgICBvZmZzZXQsIHJldCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXQgPSBlcnI7CisJCQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICY9IH5FWFQ0X1NUQVRFX0RJT19VTldSSVRURU47CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBmb3Igd3JpdGUgdGhlIHRoZSBlbmQgb2YgZmlsZSBjYXNlLCB3ZSBmYWxsIGJhY2sgdG8gb2xkIHdheSAqLworCXJldHVybiBleHQ0X2luZF9kaXJlY3RfSU8ocncsIGlvY2IsIGlvdiwgb2Zmc2V0LCBucl9zZWdzKTsKK30KKworc3RhdGljIHNzaXplX3QgZXh0NF9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKworCWlmIChFWFQ0X0koaW5vZGUpLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKQorCQlyZXR1cm4gZXh0NF9leHRfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpb3YsIG9mZnNldCwgbnJfc2Vncyk7CisKKwlyZXR1cm4gZXh0NF9pbmRfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpb3YsIG9mZnNldCwgbnJfc2Vncyk7Cit9CisKIC8qCiAgKiBQYWdlcyBjYW4gYmUgbWFya2VkIGRpcnR5IGNvbXBsZXRlbHkgYXN5bmNocm9ub3VzbHkgZnJvbSBleHQ0J3Mgam91cm5hbGxpbmcKICAqIGFjdGl2aXR5LiAgQnkgZmlsZW1hcF9zeW5jX3B0ZSgpLCB0cnlfdG9fdW5tYXBfb25lKCksIGV0Yy4gIFdlIGNhbm5vdCBkbwpAQCAtNDU1MSw4ICs1MDAxLDcgQEAKICAqLwogc3RhdGljIGludCBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLAogCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJc3RydWN0IGV4dDRfaWxvYyAqaWxvYywKLQkJCQlpbnQgZG9fc3luYykKKwkJCQlzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKQogewogCXN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShpbG9jKTsKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CkBAIC00NjUzLDIyICs1MTAyLDEwIEBACiAJCXJhd19pbm9kZS0+aV9leHRyYV9pc2l6ZSA9IGNwdV90b19sZTE2KGVpLT5pX2V4dHJhX2lzaXplKTsKIAl9CiAKLQkvKgotCSAqIElmIHdlJ3JlIG5vdCB1c2luZyBhIGpvdXJuYWwgYW5kIHdlIHdlcmUgY2FsbGVkIGZyb20KLQkgKiBleHQ0X3dyaXRlX2lub2RlKCkgdG8gc3luYyB0aGUgaW5vZGUgKG1ha2luZyBkb19zeW5jIHRydWUpLAotCSAqIHdlIGNhbiBqdXN0IHVzZSBzeW5jX2RpcnR5X2J1ZmZlcigpIGRpcmVjdGx5IHRvIGRvIG91ciBkaXJ0eQotCSAqIHdvcmsuICBUZXN0aW5nIHNfam91cm5hbCBoZXJlIGlzIGEgYml0IHJlZHVuZGFudCBidXQgaXQncwotCSAqIHdvcnRoIGl0IHRvIGF2b2lkIHBvdGVudGlhbCBmdXR1cmUgdHJvdWJsZS4KLQkgKi8KLQlpZiAoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfam91cm5hbCA9PSBOVUxMICYmIGRvX3N5bmMpIHsKLQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBzeW5jX2RpcnR5X2J1ZmZlciIpOwotCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JfSBlbHNlIHsKLQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOwotCQlyYyA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGJoKTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSByYzsKLQl9CisJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOworCXJjID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgYmgpOworCWlmICghZXJyKQorCQllcnIgPSByYzsKIAllaS0+aV9zdGF0ZSAmPSB+RVhUNF9TVEFURV9ORVc7CiAKIG91dF9icmVsc2U6CkBAIC00NzM2LDggKzUxNzMsMTYgQEAKIAkJZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmaWxvYyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShFWFQ0X05PSk9VUk5BTF9IQU5ETEUsCi0JCQkJCSAgIGlub2RlLCAmaWxvYywgd2FpdCk7CisJCWlmICh3YWl0KQorCQkJc3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7CisJCWlmIChidWZmZXJfcmVxKGlsb2MuYmgpICYmICFidWZmZXJfdXB0b2RhdGUoaWxvYy5iaCkpIHsKKwkJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorCQkJCSAgICJJTyBlcnJvciBzeW5jaW5nIGlub2RlLCAiCisJCQkJICAgImlub2RlPSVsdSwgYmxvY2s9JWxsdSIsCisJCQkJICAgaW5vZGUtPmlfaW5vLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpaWxvYy5iaC0+Yl9ibG9ja25yKTsKKwkJCWVyciA9IC1FSU87CisJCX0KIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTUwMzMsNyArNTQ3OCw3IEBACiAJZ2V0X2JoKGlsb2MtPmJoKTsKIAogCS8qIGV4dDRfZG9fdXBkYXRlX2lub2RlKCkgZG9lcyBqYmQyX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEgKi8KLQllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBpbG9jLCAwKTsKKwllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBpbG9jKTsKIAlwdXRfYmgoaWxvYy0+YmgpOwogCXJldHVybiBlcnI7CiB9CkBAIC01MTc3LDI3ICs1NjIyLDE0IEBACiAgKi8KIHZvaWQgZXh0NF9kaXJ0eV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWhhbmRsZV90ICpjdXJyZW50X2hhbmRsZSA9IGV4dDRfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwogCWhhbmRsZV90ICpoYW5kbGU7CiAKLQlpZiAoIWV4dDRfaGFuZGxlX3ZhbGlkKGN1cnJlbnRfaGFuZGxlKSkgewotCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoY3VycmVudF9oYW5kbGUsIGlub2RlKTsKLQkJcmV0dXJuOwotCX0KLQogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgMik7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlnb3RvIG91dDsKLQlpZiAoY3VycmVudF9oYW5kbGUgJiYKLQkJY3VycmVudF9oYW5kbGUtPmhfdHJhbnNhY3Rpb24gIT0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uKSB7Ci0JCS8qIFRoaXMgdGFzayBoYXMgYSB0cmFuc2FjdGlvbiBvcGVuIGFnYWluc3QgYSBkaWZmZXJlbnQgZnMgKi8KLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiB0cmFuc2FjdGlvbnMgZG8gbm90IG1hdGNoIVxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKLQl9IGVsc2UgewotCQlqYmRfZGVidWcoNSwgIm1hcmtpbmcgZGlydHkuICBvdXRlciBoYW5kbGU9JXBcbiIsCi0JCQkJY3VycmVudF9oYW5kbGUpOwotCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7Ci0JfQorCisJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCiAJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIG91dDoKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGU5YzYxODkuLmJiYTEyODIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0yMDk2LDIwNyArMjA5Niw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmZGVmIEVYVDRfTUJfSElTVE9SWQotc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uIHsKLQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpoaXN0b3J5OwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JaW50IHN0YXJ0OwotCWludCBtYXg7Ci19OwotCi1zdGF0aWMgdm9pZCAqZXh0NF9tYl9oaXN0b3J5X3NraXBfZW1wdHkoc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uICpzLAotCQkJCQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpocywKLQkJCQkJaW50IGZpcnN0KQotewotCWlmIChocyA9PSBzLT5oaXN0b3J5ICsgcy0+bWF4KQotCQlocyA9IHMtPmhpc3Rvcnk7Ci0JaWYgKCFmaXJzdCAmJiBocyA9PSBzLT5oaXN0b3J5ICsgcy0+c3RhcnQpCi0JCXJldHVybiBOVUxMOwotCXdoaWxlIChocy0+b3JpZy5mZV9sZW4gPT0gMCkgewotCQlocysrOwotCQlpZiAoaHMgPT0gcy0+aGlzdG9yeSArIHMtPm1heCkKLQkJCWhzID0gcy0+aGlzdG9yeTsKLQkJaWYgKGhzID09IHMtPmhpc3RvcnkgKyBzLT5zdGFydCkKLQkJCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gaHM7Ci19Ci0KLXN0YXRpYyB2b2lkICpleHQ0X21iX3NlcV9oaXN0b3J5X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgZXh0NF9tYl9wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqaHM7Ci0JaW50IGwgPSAqcG9zOwotCi0JaWYgKGwgPT0gMCkKLQkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKLQlocyA9IGV4dDRfbWJfaGlzdG9yeV9za2lwX2VtcHR5KHMsIHMtPmhpc3RvcnkgKyBzLT5zdGFydCwgMSk7Ci0JaWYgKCFocykKLQkJcmV0dXJuIE5VTEw7Ci0Jd2hpbGUgKC0tbCAmJiAoaHMgPSBleHQ0X21iX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCArK2hzLCAwKSkgIT0gTlVMTCk7Ci0JcmV0dXJuIGhzOwotfQotCi1zdGF0aWMgdm9pZCAqZXh0NF9tYl9zZXFfaGlzdG9yeV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LAotCQkJCSAgICAgIGxvZmZfdCAqcG9zKQotewotCXN0cnVjdCBleHQ0X21iX3Byb2Nfc2Vzc2lvbiAqcyA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpocyA9IHY7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gZXh0NF9tYl9oaXN0b3J5X3NraXBfZW1wdHkocywgcy0+aGlzdG9yeSArIHMtPnN0YXJ0LCAxKTsKLQllbHNlCi0JCXJldHVybiBleHQ0X21iX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCArK2hzLCAwKTsKLX0KLQotc3RhdGljIGludCBleHQ0X21iX3NlcV9oaXN0b3J5X3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JY2hhciBidWZbMjVdLCBidWYyWzI1XSwgYnVmM1syNV0sICpmbXQ7Ci0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqaHMgPSB2OwotCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiJS01cyAlLThzICUtMjNzICUtMjNzICUtMjNzICUtNXMgIgotCQkJCSIlLTVzICUtMnMgJS02cyAlLTVzICUtNXMgJS02c1xuIiwKLQkJCSAgInBpZCIsICJpbm9kZSIsICJvcmlnaW5hbCIsICJnb2FsIiwgInJlc3VsdCIsICJmb3VuZCIsCi0JCQkgICAiZ3JwcyIsICJjciIsICJmbGFncyIsICJtZXJnZSIsICJ0YWlsIiwgImJyb2tlbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoaHMtPm9wID09IEVYVDRfTUJfSElTVE9SWV9BTExPQykgewotCQlmbXQgPSAiJS01dSAlLTh1ICUtMjNzICUtMjNzICUtMjNzICUtNXUgJS01dSAlLTJ1ICIKLQkJCSIweCUwNHggJS01cyAlLTV1ICUtNnVcbiI7Ci0JCXNwcmludGYoYnVmMiwgIiV1LyVkLyV1QCV1IiwgaHMtPnJlc3VsdC5mZV9ncm91cCwKLQkJCWhzLT5yZXN1bHQuZmVfc3RhcnQsIGhzLT5yZXN1bHQuZmVfbGVuLAotCQkJaHMtPnJlc3VsdC5mZV9sb2dpY2FsKTsKLQkJc3ByaW50ZihidWYsICIldS8lZC8ldUAldSIsIGhzLT5vcmlnLmZlX2dyb3VwLAotCQkJaHMtPm9yaWcuZmVfc3RhcnQsIGhzLT5vcmlnLmZlX2xlbiwKLQkJCWhzLT5vcmlnLmZlX2xvZ2ljYWwpOwotCQlzcHJpbnRmKGJ1ZjMsICIldS8lZC8ldUAldSIsIGhzLT5nb2FsLmZlX2dyb3VwLAotCQkJaHMtPmdvYWwuZmVfc3RhcnQsIGhzLT5nb2FsLmZlX2xlbiwKLQkJCWhzLT5nb2FsLmZlX2xvZ2ljYWwpOwotCQlzZXFfcHJpbnRmKHNlcSwgZm10LCBocy0+cGlkLCBocy0+aW5vLCBidWYsIGJ1ZjMsIGJ1ZjIsCi0JCQkJaHMtPmZvdW5kLCBocy0+Z3JvdXBzLCBocy0+Y3IsIGhzLT5mbGFncywKLQkJCQlocy0+bWVyZ2VkID8gIk0iIDogIiIsIGhzLT50YWlsLAotCQkJCWhzLT5idWRkeSA/IDEgPDwgaHMtPmJ1ZGR5IDogMCk7Ci0JfSBlbHNlIGlmIChocy0+b3AgPT0gRVhUNF9NQl9ISVNUT1JZX1BSRUFMTE9DKSB7Ci0JCWZtdCA9ICIlLTV1ICUtOHUgJS0yM3MgJS0yM3MgJS0yM3NcbiI7Ci0JCXNwcmludGYoYnVmMiwgIiV1LyVkLyV1QCV1IiwgaHMtPnJlc3VsdC5mZV9ncm91cCwKLQkJCWhzLT5yZXN1bHQuZmVfc3RhcnQsIGhzLT5yZXN1bHQuZmVfbGVuLAotCQkJaHMtPnJlc3VsdC5mZV9sb2dpY2FsKTsKLQkJc3ByaW50ZihidWYsICIldS8lZC8ldUAldSIsIGhzLT5vcmlnLmZlX2dyb3VwLAotCQkJaHMtPm9yaWcuZmVfc3RhcnQsIGhzLT5vcmlnLmZlX2xlbiwKLQkJCWhzLT5vcmlnLmZlX2xvZ2ljYWwpOwotCQlzZXFfcHJpbnRmKHNlcSwgZm10LCBocy0+cGlkLCBocy0+aW5vLCBidWYsICIiLCBidWYyKTsKLQl9IGVsc2UgaWYgKGhzLT5vcCA9PSBFWFQ0X01CX0hJU1RPUllfRElTQ0FSRCkgewotCQlzcHJpbnRmKGJ1ZjIsICIldS8lZC8ldSIsIGhzLT5yZXN1bHQuZmVfZ3JvdXAsCi0JCQlocy0+cmVzdWx0LmZlX3N0YXJ0LCBocy0+cmVzdWx0LmZlX2xlbik7Ci0JCXNlcV9wcmludGYoc2VxLCAiJS01dSAlLTh1ICUtMjNzIGRpc2NhcmRcbiIsCi0JCQkJaHMtPnBpZCwgaHMtPmlubywgYnVmMik7Ci0JfSBlbHNlIGlmIChocy0+b3AgPT0gRVhUNF9NQl9ISVNUT1JZX0ZSRUUpIHsKLQkJc3ByaW50ZihidWYyLCAiJXUvJWQvJXUiLCBocy0+cmVzdWx0LmZlX2dyb3VwLAotCQkJaHMtPnJlc3VsdC5mZV9zdGFydCwgaHMtPnJlc3VsdC5mZV9sZW4pOwotCQlzZXFfcHJpbnRmKHNlcSwgIiUtNXUgJS04dSAlLTIzcyBmcmVlXG4iLAotCQkJCWhzLT5waWQsIGhzLT5pbm8sIGJ1ZjIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZXh0NF9tYl9zZXFfaGlzdG9yeV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGV4dDRfbWJfc2VxX2hpc3Rvcnlfb3BzID0gewotCS5zdGFydCAgPSBleHQ0X21iX3NlcV9oaXN0b3J5X3N0YXJ0LAotCS5uZXh0ICAgPSBleHQ0X21iX3NlcV9oaXN0b3J5X25leHQsCi0JLnN0b3AgICA9IGV4dDRfbWJfc2VxX2hpc3Rvcnlfc3RvcCwKLQkuc2hvdyAgID0gZXh0NF9tYl9zZXFfaGlzdG9yeV9zaG93LAotfTsKLQotc3RhdGljIGludCBleHQ0X21iX3NlcV9oaXN0b3J5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IFBERShpbm9kZSktPmRhdGE7Ci0Jc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7Ci0Jc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uICpzOwotCWludCByYzsKLQlpbnQgc2l6ZTsKLQotCWlmICh1bmxpa2VseShzYmktPnNfbWJfaGlzdG9yeSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jcy0+c2IgPSBzYjsKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBleHQ0X21iX2hpc3RvcnkpICogc2JpLT5zX21iX2hpc3RvcnlfbWF4OwotCXMtPmhpc3RvcnkgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChzLT5oaXN0b3J5ID09IE5VTEwpIHsKLQkJa2ZyZWUocyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNwaW5fbG9jaygmc2JpLT5zX21iX2hpc3RvcnlfbG9jayk7Ci0JbWVtY3B5KHMtPmhpc3RvcnksIHNiaS0+c19tYl9oaXN0b3J5LCBzaXplKTsKLQlzLT5tYXggPSBzYmktPnNfbWJfaGlzdG9yeV9tYXg7Ci0Jcy0+c3RhcnQgPSBzYmktPnNfbWJfaGlzdG9yeV9jdXIgJSBzLT5tYXg7Ci0Jc3Bpbl91bmxvY2soJnNiaS0+c19tYl9oaXN0b3J5X2xvY2spOwotCi0JcmMgPSBzZXFfb3BlbihmaWxlLCAmZXh0NF9tYl9zZXFfaGlzdG9yeV9vcHMpOwotCWlmIChyYyA9PSAwKSB7Ci0JCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCW0tPnByaXZhdGUgPSBzOwotCX0gZWxzZSB7Ci0JCWtmcmVlKHMtPmhpc3RvcnkpOwotCQlrZnJlZShzKTsKLQl9Ci0JcmV0dXJuIHJjOwotCi19Ci0KLXN0YXRpYyBpbnQgZXh0NF9tYl9zZXFfaGlzdG9yeV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZXh0NF9tYl9wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Ja2ZyZWUocy0+aGlzdG9yeSk7Ci0Ja2ZyZWUocyk7Ci0JcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIHNzaXplX3QgZXh0NF9tYl9zZXFfaGlzdG9yeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZXh0NF9tYl9wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHMtPnNiOwotCWNoYXIgc3RyWzMyXTsKLQlpbnQgdmFsdWU7Ci0KLQlpZiAoY291bnQgPj0gc2l6ZW9mKHN0cikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiAlcyBzdHJpbmcgdG9vIGxvbmcsIG1heCAldSBieXRlc1xuIiwKLQkJCQkibWJfaGlzdG9yeSIsIChpbnQpc2l6ZW9mKHN0cikpOwotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQl9Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woc3RyLCBOVUxMLCAwKTsKLQlpZiAodmFsdWUgPCAwKQotCQlyZXR1cm4gLUVSQU5HRTsKLQlFWFQ0X1NCKHNiKS0+c19tYl9oaXN0b3J5X2ZpbHRlciA9IHZhbHVlOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQ0X21iX3NlcV9oaXN0b3J5X2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGV4dDRfbWJfc2VxX2hpc3Rvcnlfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkud3JpdGUJCT0gZXh0NF9tYl9zZXFfaGlzdG9yeV93cml0ZSwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IGV4dDRfbWJfc2VxX2hpc3RvcnlfcmVsZWFzZSwKLX07Ci0KIHN0YXRpYyB2b2lkICpleHQ0X21iX3NlcV9ncm91cHNfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZXEtPnByaXZhdGU7CkBAIC0yMzk2LDgyICsyMTk1LDYgQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKIAotc3RhdGljIHZvaWQgZXh0NF9tYl9oaXN0b3J5X3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQotCWlmIChzYmktPnNfcHJvYyAhPSBOVUxMKSB7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJtYl9ncm91cHMiLCBzYmktPnNfcHJvYyk7Ci0JCWlmIChzYmktPnNfbWJfaGlzdG9yeV9tYXgpCi0JCQlyZW1vdmVfcHJvY19lbnRyeSgibWJfaGlzdG9yeSIsIHNiaS0+c19wcm9jKTsKLQl9Ci0Ja2ZyZWUoc2JpLT5zX21iX2hpc3RvcnkpOwotfQotCi1zdGF0aWMgdm9pZCBleHQ0X21iX2hpc3RvcnlfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCWludCBpOwotCi0JaWYgKHNiaS0+c19wcm9jICE9IE5VTEwpIHsKLQkJaWYgKHNiaS0+c19tYl9oaXN0b3J5X21heCkKLQkJCXByb2NfY3JlYXRlX2RhdGEoIm1iX2hpc3RvcnkiLCBTX0lSVUdPLCBzYmktPnNfcHJvYywKLQkJCQkJICZleHQ0X21iX3NlcV9oaXN0b3J5X2ZvcHMsIHNiKTsKLQkJcHJvY19jcmVhdGVfZGF0YSgibWJfZ3JvdXBzIiwgU19JUlVHTywgc2JpLT5zX3Byb2MsCi0JCQkJICZleHQ0X21iX3NlcV9ncm91cHNfZm9wcywgc2IpOwotCX0KLQotCXNiaS0+c19tYl9oaXN0b3J5X2N1ciA9IDA7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19tYl9oaXN0b3J5X2xvY2spOwotCWkgPSBzYmktPnNfbWJfaGlzdG9yeV9tYXggKiBzaXplb2Yoc3RydWN0IGV4dDRfbWJfaGlzdG9yeSk7Ci0Jc2JpLT5zX21iX2hpc3RvcnkgPSBpID8ga3phbGxvYyhpLCBHRlBfS0VSTkVMKSA6IE5VTEw7Ci0JLyogaWYgd2UgY2FuJ3QgYWxsb2NhdGUgaGlzdG9yeSwgdGhlbiB3ZSBzaW1wbGUgd29uJ3QgdXNlIGl0ICovCi19Ci0KLXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZAotZXh0NF9tYl9zdG9yZV9oaXN0b3J5KHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpCi17Ci0Jc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihhYy0+YWNfc2IpOwotCXN0cnVjdCBleHQ0X21iX2hpc3RvcnkgaDsKLQotCWlmIChzYmktPnNfbWJfaGlzdG9yeSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoIShhYy0+YWNfb3AgJiBzYmktPnNfbWJfaGlzdG9yeV9maWx0ZXIpKQotCQlyZXR1cm47Ci0KLQloLm9wID0gYWMtPmFjX29wOwotCWgucGlkID0gY3VycmVudC0+cGlkOwotCWguaW5vID0gYWMtPmFjX2lub2RlID8gYWMtPmFjX2lub2RlLT5pX2lubyA6IDA7Ci0JaC5vcmlnID0gYWMtPmFjX29fZXg7Ci0JaC5yZXN1bHQgPSBhYy0+YWNfYl9leDsKLQloLmZsYWdzID0gYWMtPmFjX2ZsYWdzOwotCWguZm91bmQgPSBhYy0+YWNfZm91bmQ7Ci0JaC5ncm91cHMgPSBhYy0+YWNfZ3JvdXBzX3NjYW5uZWQ7Ci0JaC5jciA9IGFjLT5hY19jcml0ZXJpYTsKLQloLnRhaWwgPSBhYy0+YWNfdGFpbDsKLQloLmJ1ZGR5ID0gYWMtPmFjX2J1ZGR5OwotCWgubWVyZ2VkID0gMDsKLQlpZiAoYWMtPmFjX29wID09IEVYVDRfTUJfSElTVE9SWV9BTExPQykgewotCQlpZiAoYWMtPmFjX2dfZXguZmVfc3RhcnQgPT0gYWMtPmFjX2JfZXguZmVfc3RhcnQgJiYKLQkJCQlhYy0+YWNfZ19leC5mZV9ncm91cCA9PSBhYy0+YWNfYl9leC5mZV9ncm91cCkKLQkJCWgubWVyZ2VkID0gMTsKLQkJaC5nb2FsID0gYWMtPmFjX2dfZXg7Ci0JCWgucmVzdWx0ID0gYWMtPmFjX2ZfZXg7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZzYmktPnNfbWJfaGlzdG9yeV9sb2NrKTsKLQltZW1jcHkoc2JpLT5zX21iX2hpc3RvcnkgKyBzYmktPnNfbWJfaGlzdG9yeV9jdXIsICZoLCBzaXplb2YoaCkpOwotCWlmICgrK3NiaS0+c19tYl9oaXN0b3J5X2N1ciA+PSBzYmktPnNfbWJfaGlzdG9yeV9tYXgpCi0JCXNiaS0+c19tYl9oaXN0b3J5X2N1ciA9IDA7Ci0Jc3Bpbl91bmxvY2soJnNiaS0+c19tYl9oaXN0b3J5X2xvY2spOwotfQotCi0jZWxzZQotI2RlZmluZSBleHQ0X21iX2hpc3RvcnlfcmVsZWFzZShzYikKLSNkZWZpbmUgZXh0NF9tYl9oaXN0b3J5X2luaXQoc2IpCi0jZW5kaWYKLQogCiAvKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgZXh0NF9ncm91cF9pbmZvIGRhdGEgZm9yIHRoZSBnaXZlbiBncm91cC4gKi8KIGludCBleHQ0X21iX2FkZF9ncm91cGluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9ncm91cF90IGdyb3VwLApAQCAtMjY5MCw3ICsyNDEzLDYgQEAKIAlzYmktPnNfbWJfc3RhdHMgPSBNQl9ERUZBVUxUX1NUQVRTOwogCXNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCA9IE1CX0RFRkFVTFRfU1RSRUFNX1RIUkVTSE9MRDsKIAlzYmktPnNfbWJfb3JkZXIyX3JlcXMgPSBNQl9ERUZBVUxUX09SREVSMl9SRVFTOwotCXNiaS0+c19tYl9oaXN0b3J5X2ZpbHRlciA9IEVYVDRfTUJfSElTVE9SWV9ERUZBVUxUOwogCXNiaS0+c19tYl9ncm91cF9wcmVhbGxvYyA9IE1CX0RFRkFVTFRfR1JPVVBfUFJFQUxMT0M7CiAKIAlzYmktPnNfbG9jYWxpdHlfZ3JvdXBzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBleHQ0X2xvY2FsaXR5X2dyb3VwKTsKQEAgLTI3MDgsMTIgKzI0MzAsMTIgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJmxnLT5sZ19wcmVhbGxvY19sb2NrKTsKIAl9CiAKLQlleHQ0X21iX2hpc3RvcnlfaW5pdChzYik7CisJaWYgKHNiaS0+c19wcm9jKQorCQlwcm9jX2NyZWF0ZV9kYXRhKCJtYl9ncm91cHMiLCBTX0lSVUdPLCBzYmktPnNfcHJvYywKKwkJCQkgJmV4dDRfbWJfc2VxX2dyb3Vwc19mb3BzLCBzYik7CiAKIAlpZiAoc2JpLT5zX2pvdXJuYWwpCiAJCXNiaS0+c19qb3VybmFsLT5qX2NvbW1pdF9jYWxsYmFjayA9IHJlbGVhc2VfYmxvY2tzX29uX2NvbW1pdDsKLQotCXByaW50ayhLRVJOX0lORk8gIkVYVDQtZnM6IG1iYWxsb2MgZW5hYmxlZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3OTAsNyArMjUxMiw4IEBACiAJfQogCiAJZnJlZV9wZXJjcHUoc2JpLT5zX2xvY2FsaXR5X2dyb3Vwcyk7Ci0JZXh0NF9tYl9oaXN0b3J5X3JlbGVhc2Uoc2IpOworCWlmIChzYmktPnNfcHJvYykKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIm1iX2dyb3VwcyIsIHNiaS0+c19wcm9jKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzI3Niw3ICsyOTk5LDEwIEBACiAJCQlhdG9taWNfaW5jKCZzYmktPnNfYmFsX2JyZWFrcyk7CiAJfQogCi0JZXh0NF9tYl9zdG9yZV9oaXN0b3J5KGFjKTsKKwlpZiAoYWMtPmFjX29wID09IEVYVDRfTUJfSElTVE9SWV9BTExPQykKKwkJdHJhY2VfZXh0NF9tYmFsbG9jX2FsbG9jKGFjKTsKKwllbHNlCisJCXRyYWNlX2V4dDRfbWJhbGxvY19wcmVhbGxvYyhhYyk7CiB9CiAKIC8qCkBAIC0zNzc2LDcgKzM1MDIsNiBAQAogCWlmIChhYykgewogCQlhYy0+YWNfc2IgPSBzYjsKIAkJYWMtPmFjX2lub2RlID0gcGEtPnBhX2lub2RlOwotCQlhYy0+YWNfb3AgPSBFWFQ0X01CX0hJU1RPUllfRElTQ0FSRDsKIAl9CiAKIAl3aGlsZSAoYml0IDwgZW5kKSB7CkBAIC0zNzk2LDcgKzM1MjEsNyBAQAogCQkJYWMtPmFjX2JfZXguZmVfc3RhcnQgPSBiaXQ7CiAJCQlhYy0+YWNfYl9leC5mZV9sZW4gPSBuZXh0IC0gYml0OwogCQkJYWMtPmFjX2JfZXguZmVfbG9naWNhbCA9IDA7Ci0JCQlleHQ0X21iX3N0b3JlX2hpc3RvcnkoYWMpOworCQkJdHJhY2VfZXh0NF9tYmFsbG9jX2Rpc2NhcmQoYWMpOwogCQl9CiAKIAkJdHJhY2VfZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKGFjLCBwYSwgZ3JwX2Jsa19zdGFydCArIGJpdCwKQEAgLTM4MzEsOSArMzU1Niw2IEBACiAJZXh0NF9ncm91cF90IGdyb3VwOwogCWV4dDRfZ3JwYmxrX3QgYml0OwogCi0JaWYgKGFjKQotCQlhYy0+YWNfb3AgPSBFWFQ0X01CX0hJU1RPUllfRElTQ0FSRDsKLQogCXRyYWNlX2V4dDRfbWJfcmVsZWFzZV9ncm91cF9wYShhYywgcGEpOwogCUJVR19PTihwYS0+cGFfZGVsZXRlZCA9PSAwKTsKIAlleHQ0X2dldF9ncm91cF9ub19hbmRfb2Zmc2V0KHNiLCBwYS0+cGFfcHN0YXJ0LCAmZ3JvdXAsICZiaXQpOwpAQCAtMzg0OCw3ICszNTcwLDcgQEAKIAkJYWMtPmFjX2JfZXguZmVfc3RhcnQgPSBiaXQ7CiAJCWFjLT5hY19iX2V4LmZlX2xlbiA9IHBhLT5wYV9sZW47CiAJCWFjLT5hY19iX2V4LmZlX2xvZ2ljYWwgPSAwOwotCQlleHQ0X21iX3N0b3JlX2hpc3RvcnkoYWMpOworCQl0cmFjZV9leHQ0X21iYWxsb2NfZGlzY2FyZChhYyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MTg5LDcgKzM5MTEsNiBAQAogCXNpemUgPSBhYy0+YWNfb19leC5mZV9sb2dpY2FsICsgYWMtPmFjX29fZXguZmVfbGVuOwogCWlzaXplID0gKGlfc2l6ZV9yZWFkKGFjLT5hY19pbm9kZSkgKyBhYy0+YWNfc2ItPnNfYmxvY2tzaXplIC0gMSkKIAkJPj4gYnNiaXRzOwotCXNpemUgPSBtYXgoc2l6ZSwgaXNpemUpOwogCiAJaWYgKChzaXplID09IGlzaXplKSAmJgogCSAgICAhZXh0NF9mc19pc19idXN5KHNiaSkgJiYKQEAgLTQxOTksNiArMzkyMCw3IEBACiAJfQogCiAJLyogZG9uJ3QgdXNlIGdyb3VwIGFsbG9jYXRpb24gZm9yIGxhcmdlIGZpbGVzICovCisJc2l6ZSA9IG1heChzaXplLCBpc2l6ZSk7CiAJaWYgKHNpemUgPj0gc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0KSB7CiAJCWFjLT5hY19mbGFncyB8PSBFWFQ0X01CX1NUUkVBTV9BTExPQzsKIAkJcmV0dXJuOwpAQCAtNDczOSw3ICs0NDYxLDYgQEAKIAogCWFjID0ga21lbV9jYWNoZV9hbGxvYyhleHQ0X2FjX2NhY2hlcCwgR0ZQX05PRlMpOwogCWlmIChhYykgewotCQlhYy0+YWNfb3AgPSBFWFQ0X01CX0hJU1RPUllfRlJFRTsKIAkJYWMtPmFjX2lub2RlID0gaW5vZGU7CiAJCWFjLT5hY19zYiA9IHNiOwogCX0KQEAgLTQ4MDYsNyArNDUyNyw3IEBACiAJCWFjLT5hY19iX2V4LmZlX2dyb3VwID0gYmxvY2tfZ3JvdXA7CiAJCWFjLT5hY19iX2V4LmZlX3N0YXJ0ID0gYml0OwogCQlhYy0+YWNfYl9leC5mZV9sZW4gPSBjb3VudDsKLQkJZXh0NF9tYl9zdG9yZV9oaXN0b3J5KGFjKTsKKwkJdHJhY2VfZXh0NF9tYmFsbG9jX2ZyZWUoYWMpOwogCX0KIAogCWVyciA9IGV4dDRfbWJfbG9hZF9idWRkeShzYiwgYmxvY2tfZ3JvdXAsICZlNGIpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmggYi9mcy9leHQ0L21iYWxsb2MuaAppbmRleCAxODhkM2Q3Li4wY2E4MTEwIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuaAorKysgYi9mcy9leHQ0L21iYWxsb2MuaApAQCAtNTIsMTggKzUyLDggQEAKICNkZWZpbmUgbWJfZGVidWcobiwgZm10LCBhLi4uKQogI2VuZGlmCiAKLS8qCi0gKiB3aXRoIEVYVDRfTUJfSElTVE9SWSBtYmFsbG9jIHN0b3JlcyBsYXN0IE4gYWxsb2NhdGlvbnMgaW4gbWVtb3J5Ci0gKiBhbmQgeW91IGNhbiBtb25pdG9yIGl0IGluIC9wcm9jL2ZzL2V4dDQvPGRldj4vbWJfaGlzdG9yeQotICovCi0jZGVmaW5lIEVYVDRfTUJfSElTVE9SWQogI2RlZmluZSBFWFQ0X01CX0hJU1RPUllfQUxMT0MJCTEJLyogYWxsb2NhdGlvbiAqLwogI2RlZmluZSBFWFQ0X01CX0hJU1RPUllfUFJFQUxMT0MJMgkvKiBwcmVhbGxvY2F0ZWQgYmxvY2tzIHVzZWQgKi8KLSNkZWZpbmUgRVhUNF9NQl9ISVNUT1JZX0RJU0NBUkQJCTQJLyogcHJlYWxsb2NhdGlvbiBkaXNjYXJkZWQgKi8KLSNkZWZpbmUgRVhUNF9NQl9ISVNUT1JZX0ZSRUUJCTgJLyogZnJlZSAqLwotCi0jZGVmaW5lIEVYVDRfTUJfSElTVE9SWV9ERUZBVUxUCQkoRVhUNF9NQl9ISVNUT1JZX0FMTE9DIHwgXAotCQkJCQkgRVhUNF9NQl9ISVNUT1JZX1BSRUFMTE9DKQogCiAvKgogICogSG93IGxvbmcgbWJhbGxvYyBjYW4gbG9vayBmb3IgYSBiZXN0IGV4dGVudCAoaW4gZm91bmQgZXh0ZW50cykKQEAgLTg0LDcgKzc0LDcgQEAKICAqIHdpdGggJ2V4dDRfbWJfc3RhdHMnIGFsbG9jYXRvciB3aWxsIGNvbGxlY3Qgc3RhdHMgdGhhdCB3aWxsIGJlCiAgKiBzaG93biBhdCB1bW91bnQuIFRoZSBjb2xsZWN0aW5nIGNvc3RzIHRob3VnaCEKICAqLwotI2RlZmluZSBNQl9ERUZBVUxUX1NUQVRTCQkxCisjZGVmaW5lIE1CX0RFRkFVTFRfU1RBVFMJCTAKIAogLyoKICAqIGZpbGVzIHNtYWxsZXIgdGhhbiBNQl9ERUZBVUxUX1NUUkVBTV9USFJFU0hPTEQgYXJlIHNlcnZlZApAQCAtMjE3LDIyICsyMDcsNiBAQAogI2RlZmluZSBBQ19TVEFUVVNfRk9VTkQJCTIKICNkZWZpbmUgQUNfU1RBVFVTX0JSRUFLCQkzCiAKLXN0cnVjdCBleHQ0X21iX2hpc3RvcnkgewotCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50IG9yaWc7CS8qIG9yaWcgYWxsb2NhdGlvbiAqLwotCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50IGdvYWw7CS8qIGdvYWwgYWxsb2NhdGlvbiAqLwotCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50IHJlc3VsdDsJLyogcmVzdWx0IGFsbG9jYXRpb24gKi8KLQl1bnNpZ25lZCBwaWQ7Ci0JdW5zaWduZWQgaW5vOwotCV9fdTE2IGZvdW5kOwkvKiBob3cgbWFueSBleHRlbnRzIGhhdmUgYmVlbiBmb3VuZCAqLwotCV9fdTE2IGdyb3VwczsJLyogaG93IG1hbnkgZ3JvdXBzIGhhdmUgYmVlbiBzY2FubmVkICovCi0JX191MTYgdGFpbDsJLyogd2hhdCB0YWlsIGJyb2tlIHNvbWUgYnVkZHkgKi8KLQlfX3UxNiBidWRkeTsJLyogYnVkZHkgdGhlIHRhaWwgXl5eIGJyb2tlICovCi0JX191MTYgZmxhZ3M7Ci0JX191OCBjcjozOwkvKiB3aGljaCBwaGFzZSB0aGUgcmVzdWx0IGV4dGVudCB3YXMgZm91bmQgYXQgKi8KLQlfX3U4IG9wOjQ7Ci0JX191OCBtZXJnZWQ6MTsKLX07Ci0KIHN0cnVjdCBleHQ0X2J1ZGR5IHsKIAlzdHJ1Y3QgcGFnZSAqYmRfYnVkZHlfcGFnZTsKIAl2b2lkICpiZF9idWRkeTsKQEAgLTI0NywxMyArMjIxLDYgQEAKICNkZWZpbmUgRVhUNF9NQl9CSVRNQVAoZTRiKQkoKGU0YiktPmJkX2JpdG1hcCkKICNkZWZpbmUgRVhUNF9NQl9CVUREWShlNGIpCSgoZTRiKS0+YmRfYnVkZHkpCiAKLSNpZm5kZWYgRVhUNF9NQl9ISVNUT1JZCi1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9tYl9zdG9yZV9oaXN0b3J5KHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpCi17Ci0JcmV0dXJuOwotfQotI2VuZGlmCi0KICNkZWZpbmUgaW5fcmFuZ2UoYiwgZmlyc3QsIGxlbikJKChiKSA+PSAoZmlyc3QpICYmIChiKSA8PSAoZmlyc3QpICsgKGxlbikgLSAxKQogCiBzdGF0aWMgaW5saW5lIGV4dDRfZnNibGtfdCBleHQ0X2dycF9vZmZzX3RvX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IGJmNTE5ZjIuLmE5M2Q1YjggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC03NSw3ICs3NSw3IEBACiAJCQkJZ290byBlcnJfb3V0OwogCQl9CiAJfQotCXJldHZhbCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4dCk7CisJcmV0dmFsID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXh0LCAwKTsKIGVycl9vdXQ6CiAJaWYgKHBhdGgpIHsKIAkJZXh0NF9leHRfZHJvcF9yZWZzKHBhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tb3ZlX2V4dGVudC5jIGIvZnMvZXh0NC9tb3ZlX2V4dGVudC5jCmluZGV4IGMwN2EyOTEuLjI1YjZiMTQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbW92ZV9leHRlbnQuYworKysgYi9mcy9leHQ0L21vdmVfZXh0ZW50LmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCQkJZ290byBvdXQ7CiAKIAkJaWYgKGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBvcmlnX2lub2RlLAotCQkJCQlvcmlnX3BhdGgsIG5ld19leHQpKQorCQkJCQlvcmlnX3BhdGgsIG5ld19leHQsIDApKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJCWdvdG8gb3V0OwogCiAJCWlmIChleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgb3JpZ19pbm9kZSwKLQkJCQkJICAgb3JpZ19wYXRoLCBlbmRfZXh0KSkKKwkJCQkJICAgb3JpZ19wYXRoLCBlbmRfZXh0LCAwKSkKIAkJCWdvdG8gb3V0OwogCX0KIG91dDoKQEAgLTEwMDEsMTQgKzEwMDEsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBvcmlnIGFuZCBkb25vciBzaG91bGQgYmUgZGlmZmVyZW50IGZpbGUgKi8KLQlpZiAob3JpZ19pbm9kZS0+aV9pbm8gPT0gZG9ub3JfaW5vZGUtPmlfaW5vKSB7Ci0JCWV4dDRfZGVidWcoImV4dDQgbW92ZSBleHRlbnQ6IFRoZSBhcmd1bWVudCBmaWxlcyBzaG91bGQgbm90ICIKLQkJCSJiZSBzYW1lIGZpbGUgW2lubzpvcmlnICVsdSwgZG9ub3IgJWx1XVxuIiwKLQkJCW9yaWdfaW5vZGUtPmlfaW5vLCBkb25vcl9pbm9kZS0+aV9pbm8pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAkvKiBFeHQ0IG1vdmUgZXh0ZW50IHN1cHBvcnRzIG9ubHkgZXh0ZW50IGJhc2VkIGZpbGUgKi8KIAlpZiAoIShFWFQ0X0kob3JpZ19pbm9kZSktPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpKSB7CiAJCWV4dDRfZGVidWcoImV4dDQgbW92ZSBleHRlbnQ6IG9yaWcgZmlsZSBpcyBub3QgZXh0ZW50cyAiCkBAIC0xMjMyLDYgKzEyMjQsMTQgQEAKIAlpbnQgYmxvY2tfbGVuX2luX3BhZ2U7CiAJaW50IHVuaW5pdDsKIAorCS8qIG9yaWcgYW5kIGRvbm9yIHNob3VsZCBiZSBkaWZmZXJlbnQgZmlsZSAqLworCWlmIChvcmlnX2lub2RlLT5pX2lubyA9PSBkb25vcl9pbm9kZS0+aV9pbm8pIHsKKwkJZXh0NF9kZWJ1ZygiZXh0NCBtb3ZlIGV4dGVudDogVGhlIGFyZ3VtZW50IGZpbGVzIHNob3VsZCBub3QgIgorCQkJImJlIHNhbWUgZmlsZSBbaW5vOm9yaWcgJWx1LCBkb25vciAlbHVdXG4iLAorCQkJb3JpZ19pbm9kZS0+aV9pbm8sIGRvbm9yX2lub2RlLT5pX2lubyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIHByb3RlY3Qgb3JpZyBhbmQgZG9ub3IgYWdhaW5zdCBhIHRydW5jYXRlICovCiAJcmV0MSA9IG1leHRfaW5vZGVfZG91YmxlX2xvY2sob3JpZ19pbm9kZSwgZG9ub3JfaW5vZGUpOwogCWlmIChyZXQxIDwgMCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuYwppbmRleCA0MmY4MWQyLi42ZDJjMWI4IDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKKysrIGIvZnMvZXh0NC9uYW1laS5jCkBAIC0xNTE4LDEyICsxNTE4LDggQEAKIAkJCXJldHVybiByZXR2YWw7CiAKIAkJaWYgKGJsb2NrcyA9PSAxICYmICFkeF9mYWxsYmFjayAmJgotCQkgICAgRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSkgewotCQkJcmV0dmFsID0gbWFrZV9pbmRleGVkX2RpcihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGJoKTsKLQkJCWlmIChyZXR2YWwgPT0gLUVOT1NQQykKLQkJCQlicmVsc2UoYmgpOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQorCQkgICAgRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSkKKwkJCXJldHVybiBtYWtlX2luZGV4ZWRfZGlyKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgYmgpOwogCQlicmVsc2UoYmgpOwogCX0KIAliaCA9IGV4dDRfYXBwZW5kKGhhbmRsZSwgZGlyLCAmYmxvY2ssICZyZXR2YWwpOwpAQCAtMTUzMiwxMCArMTUyOCw3IEBACiAJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgYmgtPmJfZGF0YTsKIAlkZS0+aW5vZGUgPSAwOwogCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soYmxvY2tzaXplLCBibG9ja3NpemUpOwotCXJldHZhbCA9IGFkZF9kaXJlbnRfdG9fYnVmKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgZGUsIGJoKTsKLQlpZiAocmV0dmFsID09IC1FTk9TUEMpCi0JCWJyZWxzZShiaCk7Ci0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gYWRkX2RpcmVudF90b19idWYoaGFuZGxlLCBkZW50cnksIGlub2RlLCBkZSwgYmgpOwogfQogCiAvKgpAQCAtMTY2NCw4ICsxNjU3LDcgQEAKIAlpZiAoIWRlKQogCQlnb3RvIGNsZWFudXA7CiAJZXJyID0gYWRkX2RpcmVudF90b19idWYoaGFuZGxlLCBkZW50cnksIGlub2RlLCBkZSwgYmgpOwotCWlmIChlcnIgIT0gLUVOT1NQQykKLQkJYmggPSBOVUxMOworCWJoID0gTlVMTDsKIAlnb3RvIGNsZWFudXA7CiAKIGpvdXJuYWxfZXJyb3I6CkBAIC0yMDc2LDcgKzIwNjgsOCBAQAogCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzsKIAlpbnQgZXJyID0gMDsKIAotCWlmICghZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkKKwkvKiBleHQ0X2hhbmRsZV92YWxpZCgpIGFzc3VtZXMgYSB2YWxpZCBoYW5kbGVfdCBwb2ludGVyICovCisJaWYgKGhhbmRsZSAmJiAhZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19vcnBoYW5fbG9jayk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggZGY1MzliYS4uZDRjYTkyYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNTAsMTMgKzUwLDYgQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9leHQ0Lmg+CiAKLXN0YXRpYyBpbnQgZGVmYXVsdF9tYl9oaXN0b3J5X2xlbmd0aCA9IDEwMDA7Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZChkZWZhdWx0X21iX2hpc3RvcnlfbGVuZ3RoLCBkZWZhdWx0X21iX2hpc3RvcnlfbGVuZ3RoLAotCQkgICBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X21iX2hpc3RvcnlfbGVuZ3RoLAotCQkgIkRlZmF1bHQgbnVtYmVyIG9mIGVudHJpZXMgc2F2ZWQgZm9yIG1iX2hpc3RvcnkiKTsKLQogc3RydWN0IHByb2NfZGlyX2VudHJ5ICpleHQ0X3Byb2Nfcm9vdDsKIHN0YXRpYyBzdHJ1Y3Qga3NldCAqZXh0NF9rc2V0OwogCkBAIC0xODksNiArMTgyLDM2IEBACiAJCWJnLT5iZ19pdGFibGVfdW51c2VkX2hpID0gY3B1X3RvX2xlMTYoY291bnQgPj4gMTYpOwogfQogCisKKy8qIEp1c3QgaW5jcmVtZW50IHRoZSBub24tcG9pbnRlciBoYW5kbGUgdmFsdWUgKi8KK3N0YXRpYyBoYW5kbGVfdCAqZXh0NF9nZXRfbm9qb3VybmFsKHZvaWQpCit7CisJaGFuZGxlX3QgKmhhbmRsZSA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKKwl1bnNpZ25lZCBsb25nIHJlZl9jbnQgPSAodW5zaWduZWQgbG9uZyloYW5kbGU7CisKKwlCVUdfT04ocmVmX2NudCA+PSBFWFQ0X05PSk9VUk5BTF9NQVhfUkVGX0NPVU5UKTsKKworCXJlZl9jbnQrKzsKKwloYW5kbGUgPSAoaGFuZGxlX3QgKilyZWZfY250OworCisJY3VycmVudC0+am91cm5hbF9pbmZvID0gaGFuZGxlOworCXJldHVybiBoYW5kbGU7Cit9CisKKworLyogRGVjcmVtZW50IHRoZSBub24tcG9pbnRlciBoYW5kbGUgdmFsdWUgKi8KK3N0YXRpYyB2b2lkIGV4dDRfcHV0X25vam91cm5hbChoYW5kbGVfdCAqaGFuZGxlKQoreworCXVuc2lnbmVkIGxvbmcgcmVmX2NudCA9ICh1bnNpZ25lZCBsb25nKWhhbmRsZTsKKworCUJVR19PTihyZWZfY250ID09IDApOworCisJcmVmX2NudC0tOworCWhhbmRsZSA9IChoYW5kbGVfdCAqKXJlZl9jbnQ7CisKKwljdXJyZW50LT5qb3VybmFsX2luZm8gPSBoYW5kbGU7Cit9CisKIC8qCiAgKiBXcmFwcGVycyBmb3IgamJkMl9qb3VybmFsX3N0YXJ0L2VuZC4KICAqCkBAIC0yMTUsMTEgKzIzOCw3IEBACiAJCX0KIAkJcmV0dXJuIGpiZDJfam91cm5hbF9zdGFydChqb3VybmFsLCBuYmxvY2tzKTsKIAl9Ci0JLyoKLQkgKiBXZSdyZSBub3Qgam91cm5hbGluZywgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBpbmRpY2F0aW9uLgotCSAqLwotCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IEVYVDRfTk9KT1VSTkFMX0hBTkRMRTsKLQlyZXR1cm4gY3VycmVudC0+am91cm5hbF9pbmZvOworCXJldHVybiBleHQ0X2dldF9ub2pvdXJuYWwoKTsKIH0KIAogLyoKQEAgLTIzNSwxMSArMjU0LDcgQEAKIAlpbnQgcmM7CiAKIAlpZiAoIWV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZSkpIHsKLQkJLyoKLQkJICogRG8gdGhpcyBoZXJlIHNpbmNlIHdlIGRvbid0IGNhbGwgamJkMl9qb3VybmFsX3N0b3AoKSBpbgotCQkgKiBuby1qb3VybmFsIG1vZGUuCi0JCSAqLwotCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBOVUxMOworCQlleHQ0X3B1dF9ub2pvdXJuYWwoaGFuZGxlKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNiID0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X2pvdXJuYWwtPmpfcHJpdmF0ZTsKQEAgLTU4MCw2ICs1OTUsOSBAQAogCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IHNiaS0+c19lczsKIAlpbnQgaSwgZXJyOwogCisJZmx1c2hfd29ya3F1ZXVlKHNiaS0+ZGlvX3Vud3JpdHRlbl93cSk7CisJZGVzdHJveV93b3JrcXVldWUoc2JpLT5kaW9fdW53cml0dGVuX3dxKTsKKwogCWxvY2tfc3VwZXIoc2IpOwogCWxvY2tfa2VybmVsKCk7CiAJaWYgKHNiLT5zX2RpcnQpCkBAIC02ODQsNiArNzAyLDggQEAKIAllaS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3MgPSAwOwogCWVpLT5pX2RlbGFsbG9jX3Jlc2VydmVkX2ZsYWcgPSAwOwogCXNwaW5fbG9ja19pbml0KCYoZWktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jaykpOworCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9haW9fZGlvX2NvbXBsZXRlX2xpc3QpOworCWVpLT5jdXJfYWlvX2RpbyA9IE5VTEw7CiAKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CkBAIC0xMDUyLDcgKzEwNzIsNyBAQAogCU9wdF9qb3VybmFsX3VwZGF0ZSwgT3B0X2pvdXJuYWxfZGV2LAogCU9wdF9qb3VybmFsX2NoZWNrc3VtLCBPcHRfam91cm5hbF9hc3luY19jb21taXQsCiAJT3B0X2Fib3J0LCBPcHRfZGF0YV9qb3VybmFsLCBPcHRfZGF0YV9vcmRlcmVkLCBPcHRfZGF0YV93cml0ZWJhY2ssCi0JT3B0X2RhdGFfZXJyX2Fib3J0LCBPcHRfZGF0YV9lcnJfaWdub3JlLCBPcHRfbWJfaGlzdG9yeV9sZW5ndGgsCisJT3B0X2RhdGFfZXJyX2Fib3J0LCBPcHRfZGF0YV9lcnJfaWdub3JlLAogCU9wdF91c3JqcXVvdGEsIE9wdF9ncnBqcXVvdGEsIE9wdF9vZmZ1c3JqcXVvdGEsIE9wdF9vZmZncnBqcXVvdGEsCiAJT3B0X2pxZm10X3Zmc29sZCwgT3B0X2pxZm10X3Zmc3YwLCBPcHRfcXVvdGEsIE9wdF9ub3F1b3RhLAogCU9wdF9pZ25vcmUsIE9wdF9iYXJyaWVyLCBPcHRfbm9iYXJyaWVyLCBPcHRfZXJyLCBPcHRfcmVzaXplLApAQCAtMTA5OSw3ICsxMTE5LDYgQEAKIAl7T3B0X2RhdGFfd3JpdGViYWNrLCAiZGF0YT13cml0ZWJhY2sifSwKIAl7T3B0X2RhdGFfZXJyX2Fib3J0LCAiZGF0YV9lcnI9YWJvcnQifSwKIAl7T3B0X2RhdGFfZXJyX2lnbm9yZSwgImRhdGFfZXJyPWlnbm9yZSJ9LAotCXtPcHRfbWJfaGlzdG9yeV9sZW5ndGgsICJtYl9oaXN0b3J5X2xlbmd0aD0ldSJ9LAogCXtPcHRfb2ZmdXNyanF1b3RhLCAidXNyanF1b3RhPSJ9LAogCXtPcHRfdXNyanF1b3RhLCAidXNyanF1b3RhPSVzIn0sCiAJe09wdF9vZmZncnBqcXVvdGEsICJncnBqcXVvdGE9In0sCkBAIC0xMjgxLDkgKzEzMDAsMTEgQEAKIAkJCSpqb3VybmFsX2Rldm51bSA9IG9wdGlvbjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9qb3VybmFsX2NoZWNrc3VtOgotCQkJYnJlYWs7CS8qIEtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEpPVVJOQUxfQ0hFQ0tTVU0pOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2pvdXJuYWxfYXN5bmNfY29tbWl0OgogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBKT1VSTkFMX0FTWU5DX0NPTU1JVCk7CisJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEpPVVJOQUxfQ0hFQ0tTVU0pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vbG9hZDoKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9MT0FEKTsKQEAgLTEzNDAsMTMgKzEzNjEsNiBAQAogCQljYXNlIE9wdF9kYXRhX2Vycl9pZ25vcmU6CiAJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREFUQV9FUlJfQUJPUlQpOwogCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X21iX2hpc3RvcnlfbGVuZ3RoOgotCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCi0JCQkJcmV0dXJuIDA7Ci0JCQlpZiAob3B0aW9uIDwgMCkKLQkJCQlyZXR1cm4gMDsKLQkJCXNiaS0+c19tYl9oaXN0b3J5X21heCA9IG9wdGlvbjsKLQkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19RVU9UQQogCQljYXNlIE9wdF91c3JqcXVvdGE6CiAJCQlxdHlwZSA9IFVTUlFVT1RBOwpAQCAtMTY0NiwxMyArMTY2MCw2IEBACiAJCQlFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpLAogCQkJc2JpLT5zX21vdW50X29wdCk7CiAKLQlpZiAoRVhUNF9TQihzYiktPnNfam91cm5hbCkgewotCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAiJXMgam91cm5hbCBvbiAlcyIsCi0JCSAgICAgICBFWFQ0X1NCKHNiKS0+c19qb3VybmFsLT5qX2lub2RlID8gImludGVybmFsIiA6Ci0JCSAgICAgICAiZXh0ZXJuYWwiLCBFWFQ0X1NCKHNiKS0+c19qb3VybmFsLT5qX2Rldm5hbWUpOwotCX0gZWxzZSB7Ci0JCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJubyBqb3VybmFsIik7Ci0JfQogCXJldHVybiByZXM7CiB9CiAKQEAgLTIxOTcsNiArMjIwNCw3IEBACiBFWFQ0X1JXX0FUVFJfU0JJX1VJKG1iX29yZGVyMl9yZXEsIHNfbWJfb3JkZXIyX3JlcXMpOwogRVhUNF9SV19BVFRSX1NCSV9VSShtYl9zdHJlYW1fcmVxLCBzX21iX3N0cmVhbV9yZXF1ZXN0KTsKIEVYVDRfUldfQVRUUl9TQklfVUkobWJfZ3JvdXBfcHJlYWxsb2MsIHNfbWJfZ3JvdXBfcHJlYWxsb2MpOworRVhUNF9SV19BVFRSX1NCSV9VSShtYXhfd3JpdGViYWNrX21iX2J1bXAsIHNfbWF4X3dyaXRlYmFja19tYl9idW1wKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmV4dDRfYXR0cnNbXSA9IHsKIAlBVFRSX0xJU1QoZGVsYXllZF9hbGxvY2F0aW9uX2Jsb2NrcyksCkBAIC0yMjEwLDYgKzIyMTgsNyBAQAogCUFUVFJfTElTVChtYl9vcmRlcjJfcmVxKSwKIAlBVFRSX0xJU1QobWJfc3RyZWFtX3JlcSksCiAJQVRUUl9MSVNUKG1iX2dyb3VwX3ByZWFsbG9jKSwKKwlBVFRSX0xJU1QobWF4X3dyaXRlYmFja19tYl9idW1wKSwKIAlOVUxMLAogfTsKIApAQCAtMjQxMyw3ICsyNDIyLDYgQEAKIAlzYmktPnNfY29tbWl0X2ludGVydmFsID0gSkJEMl9ERUZBVUxUX01BWF9DT01NSVRfQUdFICogSFo7CiAJc2JpLT5zX21pbl9iYXRjaF90aW1lID0gRVhUNF9ERUZfTUlOX0JBVENIX1RJTUU7CiAJc2JpLT5zX21heF9iYXRjaF90aW1lID0gRVhUNF9ERUZfTUFYX0JBVENIX1RJTUU7Ci0Jc2JpLT5zX21iX2hpc3RvcnlfbWF4ID0gZGVmYXVsdF9tYl9oaXN0b3J5X2xlbmd0aDsKIAogCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgQkFSUklFUik7CiAKQEAgLTI2NzksNiArMjY4Nyw3IEBACiAJfQogCiAJc2JpLT5zX3N0cmlwZSA9IGV4dDRfZ2V0X3N0cmlwZV9zaXplKHNiaSk7CisJc2JpLT5zX21heF93cml0ZWJhY2tfbWJfYnVtcCA9IDEyODsKIAogCS8qCiAJICogc2V0IHVwIGVub3VnaCBzbyB0aGF0IGl0IGNhbiByZWFkIGFuIGlub2RlCkBAIC0yNzUyLDE0ICsyNzYxLDIwIEBACiAJCWdvdG8gZmFpbGVkX21vdW50NDsKIAl9CiAKLQlqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLAotCQkJCSAgSkJEMl9GRUFUVVJFX0NPTVBBVF9DSEVDS1NVTSwgMCwgMCk7Ci0JaWYgKHRlc3Rfb3B0KHNiLCBKT1VSTkFMX0FTWU5DX0NPTU1JVCkpCi0JCWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsIDAsIDAsCisJaWYgKHRlc3Rfb3B0KHNiLCBKT1VSTkFMX0FTWU5DX0NPTU1JVCkpIHsKKwkJamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwKKwkJCQlKQkQyX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNLCAwLAogCQkJCUpCRDJfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQpOwotCWVsc2UKKwl9IGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBKT1VSTkFMX0NIRUNLU1VNKSkgeworCQlqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLAorCQkJCUpCRDJfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sIDAsIDApOwogCQlqYmQyX2pvdXJuYWxfY2xlYXJfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsIDAsIDAsCiAJCQkJSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0FTWU5DX0NPTU1JVCk7CisJfSBlbHNlIHsKKwkJamJkMl9qb3VybmFsX2NsZWFyX2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLAorCQkJCUpCRDJfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sIDAsCisJCQkJSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0FTWU5DX0NPTU1JVCk7CisJfQogCiAJLyogV2UgaGF2ZSBub3cgdXBkYXRlZCB0aGUgam91cm5hbCBpZiByZXF1aXJlZCwgc28gd2UgY2FuCiAJICogdmFsaWRhdGUgdGhlIGRhdGEgam91cm5hbGluZyBtb2RlLiAqLwpAQCAtMjc5OCw2ICsyODEzLDEyIEBACiAJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9CSCk7CiAJCX0KIAl9CisJRVhUNF9TQihzYiktPmRpb191bndyaXR0ZW5fd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJleHQ0LWRpby11bndyaXR0ZW4iKTsKKwlpZiAoIUVYVDRfU0Ioc2IpLT5kaW9fdW53cml0dGVuX3dxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogZmFpbGVkIHRvIGNyZWF0ZSBESU8gd29ya3F1ZXVlXG4iKTsKKwkJZ290byBmYWlsZWRfbW91bnRfd3E7CisJfQorCiAJLyoKIAkgKiBUaGUgamJkMl9qb3VybmFsX2xvYWQgd2lsbCBoYXZlIGRvbmUgYW55IG5lY2Vzc2FyeSBsb2cgcmVjb3ZlcnksCiAJICogc28gd2UgY2FuIHNhZmVseSBtb3VudCB0aGUgcmVzdCBvZiB0aGUgZmlsZXN5c3RlbSBub3cuCkBAIC0yODQ5LDEyICsyODcwLDEyIEBACiAJCQkgImF2YWlsYWJsZSIpOwogCX0KIAotCWlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9KT1VSTkFMX0RBVEEpIHsKKwlpZiAodGVzdF9vcHQoc2IsIERFTEFMTE9DKSAmJgorCSAgICAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKSkgewogCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLCAiSWdub3JpbmcgZGVsYWxsb2Mgb3B0aW9uIC0gIgogCQkJICJyZXF1ZXN0ZWQgZGF0YSBqb3VybmFsaW5nIG1vZGUiKTsKIAkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFTEFMTE9DKTsKLQl9IGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBERUxBTExPQykpCi0JCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJkZWxheWVkIGFsbG9jYXRpb24gZW5hYmxlZCIpOworCX0KIAogCWVyciA9IGV4dDRfc2V0dXBfc3lzdGVtX3pvbmUoc2IpOwogCWlmIChlcnIpIHsKQEAgLTI5MTAsNiArMjkzMSw4IEBACiAKIGZhaWxlZF9tb3VudDQ6CiAJZXh0NF9tc2coc2IsIEtFUk5fRVJSLCAibW91bnQgZmFpbGVkIik7CisJZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktPmRpb191bndyaXR0ZW5fd3EpOworZmFpbGVkX21vdW50X3dxOgogCWV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7CiAJaWYgKHNiaS0+c19qb3VybmFsKSB7CiAJCWpiZDJfam91cm5hbF9kZXN0cm95KHNiaS0+c19qb3VybmFsKTsKQEAgLTMxNjQsOSArMzE4Nyw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoam91cm5hbC0+al9mbGFncyAmIEpCRDJfQkFSUklFUikKLQkJZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgImJhcnJpZXJzIGVuYWJsZWQiKTsKLQllbHNlCisJaWYgKCEoam91cm5hbC0+al9mbGFncyAmIEpCRDJfQkFSUklFUikpCiAJCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJiYXJyaWVycyBkaXNhYmxlZCIpOwogCiAJaWYgKCFyZWFsbHlfcmVhZF9vbmx5ICYmIHRlc3Rfb3B0KHNiLCBVUERBVEVfSk9VUk5BTCkpIHsKQEAgLTMzNjEsMTEgKzMzODIsMTMgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAl0aWRfdCB0YXJnZXQ7CisJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CiAKIAl0cmFjZV9leHQ0X3N5bmNfZnMoc2IsIHdhaXQpOwotCWlmIChqYmQyX2pvdXJuYWxfc3RhcnRfY29tbWl0KEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwsICZ0YXJnZXQpKSB7CisJZmx1c2hfd29ya3F1ZXVlKHNiaS0+ZGlvX3Vud3JpdHRlbl93cSk7CisJaWYgKGpiZDJfam91cm5hbF9zdGFydF9jb21taXQoc2JpLT5zX2pvdXJuYWwsICZ0YXJnZXQpKSB7CiAJCWlmICh3YWl0KQotCQkJamJkMl9sb2dfd2FpdF9jb21taXQoRVhUNF9TQihzYiktPnNfam91cm5hbCwgdGFyZ2V0KTsKKwkJCWpiZDJfbG9nX3dhaXRfY29tbWl0KHNiaS0+c19qb3VybmFsLCB0YXJnZXQpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMzk1MSwyNyArMzk3NCw2IEBACiAJLmZzX2ZsYWdzCT0gRlNfUkVRVUlSRVNfREVWLAogfTsKIAotI2lmZGVmIENPTkZJR19FWFQ0REVWX0NPTVBBVAotc3RhdGljIGludCBleHQ0ZGV2X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAotCQkJICBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSxzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJFWFQ0LWZzICglcyk6IFVwZGF0ZSB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtcyAiCi0JICAgICAgICJ0byBtb3VudCB1c2luZyBleHQ0XG4iLCBkZXZfbmFtZSk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiRVhUNC1mcyAoJXMpOiBleHQ0ZGV2IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICIKLQkgICAgICAgIndpbGwgZ28gYXdheSBieSAyLjYuMzFcbiIsIGRldl9uYW1lKTsKLQlyZXR1cm4gZ2V0X3NiX2JkZXYoZnNfdHlwZSwgZmxhZ3MsIGRldl9uYW1lLCBkYXRhLCBleHQ0X2ZpbGxfc3VwZXIsbW50KTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDRkZXZfZnNfdHlwZSA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gImV4dDRkZXYiLAotCS5nZXRfc2IJCT0gZXh0NGRldl9nZXRfc2IsCi0JLmtpbGxfc2IJPSBraWxsX2Jsb2NrX3N1cGVyLAotCS5mc19mbGFncwk9IEZTX1JFUVVJUkVTX0RFViwKLX07Ci1NT0RVTEVfQUxJQVMoImV4dDRkZXYiKTsKLSNlbmRpZgotCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2V4dDRfZnModm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtMzk5NiwxMyArMzk5OCw2IEBACiAJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXh0NF9mc190eXBlKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLSNpZmRlZiBDT05GSUdfRVhUNERFVl9DT01QQVQKLQllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQ0ZGV2X2ZzX3R5cGUpOwotCWlmIChlcnIpIHsKLQkJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQ0X2ZzX3R5cGUpOwotCQlnb3RvIG91dDsKLQl9Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIG91dDoKIAlkZXN0cm95X2lub2RlY2FjaGUoKTsKQEAgLTQwMjEsOSArNDAxNiw2IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9leHQ0X2ZzKHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQ0X2ZzX3R5cGUpOwotI2lmZGVmIENPTkZJR19FWFQ0REVWX0NPTVBBVAotCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXh0NGRldl9mc190eXBlKTsKLSNlbmRpZgogCWRlc3Ryb3lfaW5vZGVjYWNoZSgpOwogCWV4aXRfZXh0NF94YXR0cigpOwogCWV4aXRfZXh0NF9tYmFsbG9jKCk7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmgKaW5kZXggYWRiMGU3Mi4uN2RiMDk3OSAxMDA2NDQKLS0tIGEvZnMvZmF0L2ZhdC5oCisrKyBiL2ZzL2ZhdC9mYXQuaApAQCAtMzIzLDcgKzMyMyw3IEBACiAvKiBmYXQvbWlzYy5jICovCiBleHRlcm4gdm9pZCBmYXRfZnNfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkgX19jb2xkOwotZXh0ZXJuIHZvaWQgZmF0X2NsdXN0ZXJzX2ZsdXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworZXh0ZXJuIGludCBmYXRfY2x1c3RlcnNfZmx1c2goc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpOwogZXh0ZXJuIHZvaWQgZmF0X3RpbWVfZmF0MnVuaXgoc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSwgc3RydWN0IHRpbWVzcGVjICp0cywKIAkJCSAgICAgIF9fbGUxNiBfX3RpbWUsIF9fbGUxNiBfX2RhdGUsIHU4IHRpbWVfY3MpOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCAwNDYyOWQxLi43NmI3OTYxIDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYworKysgYi9mcy9mYXQvaW5vZGUuYwpAQCAtNDUxLDEyICs0NTEsMTYgQEAKIAogc3RhdGljIGludCBmYXRfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKIHsKLQlsb2NrX3N1cGVyKHNiKTsKLQlmYXRfY2x1c3RlcnNfZmx1c2goc2IpOwotCXNiLT5zX2RpcnQgPSAwOwotCXVubG9ja19zdXBlcihzYik7CisJaW50IGVyciA9IDA7CiAKLQlyZXR1cm4gMDsKKwlpZiAoc2ItPnNfZGlydCkgeworCQlsb2NrX3N1cGVyKHNiKTsKKwkJc2ItPnNfZGlydCA9IDA7CisJCWVyciA9IGZhdF9jbHVzdGVyc19mbHVzaChzYik7CisJCXVubG9ja19zdXBlcihzYik7CisJfQorCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgZmF0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtODEyLDcgKzgxNiw3IEBACiAJCQlzZXFfcHV0cyhtLCAiLHNob3J0bmFtZT1taXhlZCIpOwogCQkJYnJlYWs7CiAJCWNhc2UgVkZBVF9TRk5fRElTUExBWV9MT1dFUiB8IFZGQVRfU0ZOX0NSRUFURV9XSU45NToKLQkJCS8qIHNlcV9wdXRzKG0sICIsc2hvcnRuYW1lPWxvd2VyIik7ICovCisJCQlzZXFfcHV0cyhtLCAiLHNob3J0bmFtZT1sb3dlciIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlzZXFfcHV0cyhtLCAiLHNob3J0bmFtZT11bmtub3duIik7CkBAIC05NjMsNyArOTY3LDcgQEAKIAlvcHRzLT5jb2RlcGFnZSA9IGZhdF9kZWZhdWx0X2NvZGVwYWdlOwogCW9wdHMtPmlvY2hhcnNldCA9IGZhdF9kZWZhdWx0X2lvY2hhcnNldDsKIAlpZiAoaXNfdmZhdCkgewotCQlvcHRzLT5zaG9ydG5hbWUgPSBWRkFUX1NGTl9ESVNQTEFZX0xPV0VSfFZGQVRfU0ZOX0NSRUFURV9XSU45NTsKKwkJb3B0cy0+c2hvcnRuYW1lID0gVkZBVF9TRk5fRElTUExBWV9XSU5OVHxWRkFUX1NGTl9DUkVBVEVfV0lOOTU7CiAJCW9wdHMtPnJvZGlyID0gMDsKIAl9IGVsc2UgewogCQlvcHRzLT5zaG9ydG5hbWUgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmMKaW5kZXggNGUzNWJlOC4uMGY1NWY1YyAxMDA2NDQKLS0tIGEvZnMvZmF0L21pc2MuYworKysgYi9mcy9mYXQvbWlzYy5jCkBAIC00MywxOSArNDMsMTkgQEAKIAogLyogRmx1c2hlcyB0aGUgbnVtYmVyIG9mIGZyZWUgY2x1c3RlcnMgb24gRkFUMzIgKi8KIC8qIFhYWDogTmVlZCB0byB3cml0ZSBvbmUgcGVyIEZTSU5GTyBibG9jay4gIEN1cnJlbnRseSBvbmx5IHdyaXRlcyAxICovCi12b2lkIGZhdF9jbHVzdGVyc19mbHVzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoraW50IGZhdF9jbHVzdGVyc19mbHVzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgZmF0X2Jvb3RfZnNpbmZvICpmc2luZm87CiAKIAlpZiAoc2JpLT5mYXRfYml0cyAhPSAzMikKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCWJoID0gc2JfYnJlYWQoc2IsIHNiaS0+ZnNpbmZvX3NlY3Rvcik7CiAJaWYgKGJoID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGQVQ6IGJyZWFkIGZhaWxlZCBpbiBmYXRfY2x1c3RlcnNfZmx1c2hcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRUlPOwogCX0KIAogCWZzaW5mbyA9IChzdHJ1Y3QgZmF0X2Jvb3RfZnNpbmZvICopYmgtPmJfZGF0YTsKQEAgLTc0LDYgKzc0LDggQEAKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCX0KIAlicmVsc2UoYmgpOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCBjYjZlODM1Li5mNTY1ZjI0IDEwMDY0NAotLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jCisrKyBiL2ZzL2ZhdC9uYW1laV92ZmF0LmMKQEAgLTQ5OSwxNyArNDk5LDEwIEBACiAJaW50IGNoYXJsZW47CiAKIAlpZiAodXRmOCkgewotCQlpbnQgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7Ci0KLQkJKm91dGxlbiA9IHV0ZjhzX3RvX3V0ZjE2cyhuYW1lLCBQQVRIX01BWCwgKHdjaGFyX3QgKikgb3V0bmFtZSk7Ci0KLQkJLyoKLQkJICogV2Ugc3RyaXBwZWQgJy4ncyBiZWZvcmUgYW5kIHNldCBsZW4gYXBwcm9wcmlhdGVseSwKLQkJICogYnV0IHV0ZjhzX3RvX3V0ZjE2cyBkb2Vzbid0IGNhcmUgYWJvdXQgbGVuCi0JCSAqLwotCQkqb3V0bGVuIC09IChuYW1lX2xlbiAtIGxlbik7Ci0KLQkJaWYgKCpvdXRsZW4gPiAyNTUpCisJCSpvdXRsZW4gPSB1dGY4c190b191dGYxNnMobmFtZSwgbGVuLCAod2NoYXJfdCAqKW91dG5hbWUpOworCQlpZiAoKm91dGxlbiA8IDApCisJCQlyZXR1cm4gKm91dGxlbjsKKwkJZWxzZSBpZiAoKm91dGxlbiA+IDI1NSkKIAkJCXJldHVybiAtRU5BTUVUT09MT05HOwogCiAJCW9wID0gJm91dG5hbWVbKm91dGxlbiAqIHNpemVvZih3Y2hhcl90KV07CmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCBmYzA4OWYyLi4yY2Y5M2VjIDEwMDY0NAotLS0gYS9mcy9mY250bC5jCisrKyBiL2ZzL2ZjbnRsLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogCQl0eXBlID0gUElEVFlQRV9QSUQ7CiAJCWJyZWFrOwogCi0JY2FzZSBGX09XTkVSX0dJRDoKKwljYXNlIEZfT1dORVJfUEdSUDoKIAkJdHlwZSA9IFBJRFRZUEVfUEdJRDsKIAkJYnJlYWs7CiAKQEAgLTMyMSw3ICszMjEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUElEVFlQRV9QR0lEOgotCQlvd25lci50eXBlID0gRl9PV05FUl9HSUQ7CisJCW93bmVyLnR5cGUgPSBGX09XTkVSX1BHUlA7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCBmMzEzMzE0Li44N2UxMjkwIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCA4ZTFlNWUxLi45ZDUzNjBjIDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtNDEsOCArNDEsOSBAQAogCWxvbmcgbnJfcGFnZXM7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAllbnVtIHdyaXRlYmFja19zeW5jX21vZGVzIHN5bmNfbW9kZTsKLQlpbnQgZm9yX2t1cGRhdGU7Ci0JaW50IHJhbmdlX2N5Y2xpYzsKKwlpbnQgZm9yX2t1cGRhdGU6MTsKKwlpbnQgcmFuZ2VfY3ljbGljOjE7CisJaW50IGZvcl9iYWNrZ3JvdW5kOjE7CiB9OwogCiAvKgpAQCAtMjQ5LDE0ICsyNTAsMjUgQEAKICAqICAgY29tcGxldGlvbi4gQ2FsbGVyIG5lZWQgbm90IGhvbGQgc2Igc191bW91bnQgc2VtYXBob3JlLgogICoKICAqLwotdm9pZCBiZGlfc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIGxvbmcgbnJfcGFnZXMpCit2b2lkIGJkaV9zdGFydF93cml0ZWJhY2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCSBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyBhcmdzID0geworCQkuc2IJCT0gc2IsCiAJCS5zeW5jX21vZGUJPSBXQl9TWU5DX05PTkUsCiAJCS5ucl9wYWdlcwk9IG5yX3BhZ2VzLAogCQkucmFuZ2VfY3ljbGljCT0gMSwKIAl9OwogCisJLyoKKwkgKiBXZSB0cmVhdCBAbnJfcGFnZXM9MCBhcyB0aGUgc3BlY2lhbCBjYXNlIHRvIGRvIGJhY2tncm91bmQgd3JpdGViYWNrLAorCSAqIGllLiB0byBzeW5jIHBhZ2VzIHVudGlsIHRoZSBiYWNrZ3JvdW5kIGRpcnR5IHRocmVzaG9sZCBpcyByZWFjaGVkLgorCSAqLworCWlmICghbnJfcGFnZXMpIHsKKwkJYXJncy5ucl9wYWdlcyA9IExPTkdfTUFYOworCQlhcmdzLmZvcl9iYWNrZ3JvdW5kID0gMTsKKwl9CisKIAliZGlfYWxsb2NfcXVldWVfd29yayhiZGksICZhcmdzKTsKIH0KIApAQCAtMzEwLDcgKzMyMiw3IEBACiAJICogRm9yIGlub2RlcyBiZWluZyBjb25zdGFudGx5IHJlZGlydGllZCwgZGlydGllZF93aGVuIGNhbiBnZXQgc3R1Y2suCiAJICogSXQgX2FwcGVhcnNfIHRvIGJlIGluIHRoZSBmdXR1cmUsIGJ1dCBpcyBhY3R1YWxseSBpbiBkaXN0YW50IHBhc3QuCiAJICogVGhpcyB0ZXN0IGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHN1Y2ggd3JhcHBlZC1hcm91bmQgcmVsYXRpdmUgdGltZXMKLQkgKiBmcm9tIHBlcm1hbmVudGx5IHN0b3BwaW5nIHRoZSB3aG9sZSBwZGZsdXNoIHdyaXRlYmFjay4KKwkgKiBmcm9tIHBlcm1hbmVudGx5IHN0b3BwaW5nIHRoZSB3aG9sZSBiZGkgd3JpdGViYWNrLgogCSAqLwogCXJldCA9IHJldCAmJiB0aW1lX2JlZm9yZV9lcShpbm9kZS0+ZGlydGllZF93aGVuLCBqaWZmaWVzKTsKICNlbmRpZgpAQCAtMzI0LDEzICszMzYsMzggQEAKIAkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwYXRjaF9xdWV1ZSwKIAkJCQl1bnNpZ25lZCBsb25nICpvbGRlcl90aGFuX3RoaXMpCiB7CisJTElTVF9IRUFEKHRtcCk7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbm9kZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBkb19zYl9zb3J0ID0gMDsKKwogCXdoaWxlICghbGlzdF9lbXB0eShkZWxheWluZ19xdWV1ZSkpIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IGxpc3RfZW50cnkoZGVsYXlpbmdfcXVldWUtPnByZXYsCi0JCQkJCQlzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7CisJCWlub2RlID0gbGlzdF9lbnRyeShkZWxheWluZ19xdWV1ZS0+cHJldiwgc3RydWN0IGlub2RlLCBpX2xpc3QpOwogCQlpZiAob2xkZXJfdGhhbl90aGlzICYmCiAJCSAgICBpbm9kZV9kaXJ0aWVkX2FmdGVyKGlub2RlLCAqb2xkZXJfdGhhbl90aGlzKSkKIAkJCWJyZWFrOwotCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsIGRpc3BhdGNoX3F1ZXVlKTsKKwkJaWYgKHNiICYmIHNiICE9IGlub2RlLT5pX3NiKQorCQkJZG9fc2Jfc29ydCA9IDE7CisJCXNiID0gaW5vZGUtPmlfc2I7CisJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJnRtcCk7CisJfQorCisJLyoganVzdCBvbmUgc2IgaW4gbGlzdCwgc3BsaWNlIHRvIGRpc3BhdGNoX3F1ZXVlIGFuZCB3ZSdyZSBkb25lICovCisJaWYgKCFkb19zYl9zb3J0KSB7CisJCWxpc3Rfc3BsaWNlKCZ0bXAsIGRpc3BhdGNoX3F1ZXVlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE1vdmUgaW5vZGVzIGZyb20gb25lIHN1cGVyYmxvY2sgdG9nZXRoZXIgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnRtcCkpIHsKKwkJaW5vZGUgPSBsaXN0X2VudHJ5KHRtcC5wcmV2LCBzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7CisJCXNiID0gaW5vZGUtPmlfc2I7CisJCWxpc3RfZm9yX2VhY2hfcHJldl9zYWZlKHBvcywgbm9kZSwgJnRtcCkgeworCQkJaW5vZGUgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQkJaWYgKGlub2RlLT5pX3NiID09IHNiKQorCQkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgZGlzcGF0Y2hfcXVldWUpOworCQl9CiAJfQogfQogCkBAIC00MzksOCArNDc2LDE4IEBACiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlpbm9kZS0+aV9zdGF0ZSAmPSB+SV9TWU5DOwogCWlmICghKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlORyB8IElfQ0xFQVIpKSkgewotCQlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpICYmCi0JCSAgICBtYXBwaW5nX3RhZ2dlZChtYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX0RJUlRZKSkgeworCQlpZiAoKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9QQUdFUykgJiYgd2JjLT5mb3Jfa3VwZGF0ZSkgeworCQkJLyoKKwkJCSAqIE1vcmUgcGFnZXMgZ2V0IGRpcnRpZWQgYnkgYSBmYXN0IGRpcnRpZXIuCisJCQkgKi8KKwkJCWdvdG8gc2VsZWN0X3F1ZXVlOworCQl9IGVsc2UgaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkgeworCQkJLyoKKwkJCSAqIEF0IGxlYXN0IFhGUyB3aWxsIHJlZGlydHkgdGhlIGlub2RlIGR1cmluZyB0aGUKKwkJCSAqIHdyaXRlYmFjayAoZGVsYWxsb2MpIGFuZCBvbiBpbyBjb21wbGV0aW9uIChpc2l6ZSkuCisJCQkgKi8KKwkJCXJlZGlydHlfdGFpbChpbm9kZSk7CisJCX0gZWxzZSBpZiAobWFwcGluZ190YWdnZWQobWFwcGluZywgUEFHRUNBQ0hFX1RBR19ESVJUWSkpIHsKIAkJCS8qCiAJCQkgKiBXZSBkaWRuJ3Qgd3JpdGUgYmFjayBhbGwgdGhlIHBhZ2VzLiAgbmZzX3dyaXRlcGFnZXMoKQogCQkJICogc29tZXRpbWVzIGJhbGVzIG91dCB3aXRob3V0IGRvaW5nIGFueXRoaW5nLiBSZWRpcnR5CkBAIC00NjIsNiArNTA5LDcgQEAKIAkJCQkgKiBzb29uIGFzIHRoZSBxdWV1ZSBiZWNvbWVzIHVuY29uZ2VzdGVkLgogCQkJCSAqLwogCQkJCWlub2RlLT5pX3N0YXRlIHw9IElfRElSVFlfUEFHRVM7CitzZWxlY3RfcXVldWU6CiAJCQkJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPD0gMCkgewogCQkJCQkvKgogCQkJCQkgKiBzbGljZSB1c2VkIHVwOiBxdWV1ZSBmb3IgbmV4dCB0dXJuCkBAIC00ODQsMTIgKzUzMiw2IEBACiAJCQkJaW5vZGUtPmlfc3RhdGUgfD0gSV9ESVJUWV9QQUdFUzsKIAkJCQlyZWRpcnR5X3RhaWwoaW5vZGUpOwogCQkJfQotCQl9IGVsc2UgaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkgewotCQkJLyoKLQkJCSAqIFNvbWVvbmUgcmVkaXJ0aWVkIHRoZSBpbm9kZSB3aGlsZSB3ZXJlIHdyaXRpbmcgYmFjawotCQkJICogdGhlIHBhZ2VzLgotCQkJICovCi0JCQlyZWRpcnR5X3RhaWwoaW5vZGUpOwogCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpIHsKIAkJCS8qCiAJCQkgKiBUaGUgaW5vZGUgaXMgY2xlYW4sIGludXNlCkBAIC01MDYsNiArNTQ4LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgdW5waW5fc2JfZm9yX3dyaXRlYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKipwc2IpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9ICpwc2I7CisKKwlpZiAoc2IpIHsKKwkJdXBfcmVhZCgmc2ItPnNfdW1vdW50KTsKKwkJcHV0X3N1cGVyKHNiKTsKKwkJKnBzYiA9IE5VTEw7CisJfQorfQorCiAvKgogICogRm9yIFdCX1NZTkNfTk9ORSB3cml0ZWJhY2ssIHRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSB0aGUgc2IgcGlubmVkCiAgKiBiZWZvcmUgY2FsbGluZyB3cml0ZWJhY2suIFNvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvIHBpbiBpdCwgc28gaXQgZG9lc24ndApAQCAtNTE1LDExICs1NjgsMjAgQEAKICAqIDEgaWYgd2UgZmFpbGVkLgogICovCiBzdGF0aWMgaW50IHBpbl9zYl9mb3Jfd3JpdGViYWNrKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAotCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCisJCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICoqcHNiKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAogCS8qCisJICogSWYgdGhpcyBzYiBpcyBhbHJlYWR5IHBpbm5lZCwgbm90aGluZyBtb3JlIHRvIGRvLiBJZiBub3QgYW5kCisJICogKnBzYiBpcyBub24tTlVMTCwgdW5waW4gdGhlIG9sZCBvbmUgZmlyc3QKKwkgKi8KKwlpZiAoc2IgPT0gKnBzYikKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoKnBzYikKKwkJdW5waW5fc2JfZm9yX3dyaXRlYmFjayhwc2IpOworCisJLyoKIAkgKiBDYWxsZXIgbXVzdCBhbHJlYWR5IGhvbGQgdGhlIHJlZiBmb3IgdGhpcwogCSAqLwogCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkgewpAQCAtNTMyLDcgKzU5NCw3IEBACiAJaWYgKGRvd25fcmVhZF90cnlsb2NrKCZzYi0+c191bW91bnQpKSB7CiAJCWlmIChzYi0+c19yb290KSB7CiAJCQlzcGluX3VubG9jaygmc2JfbG9jayk7Ci0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gcGlubmVkOwogCQl9CiAJCS8qCiAJCSAqIHVtb3VudGVkLCBkcm9wIHJ3c2VtIGFnYWluIGFuZCBmYWxsIHRocm91Z2ggdG8gZmFpbHVyZQpAQCAtNTQzLDI0ICs2MDUsMTUgQEAKIAlzYi0+c19jb3VudC0tOwogCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKIAlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgdW5waW5fc2JfZm9yX3dyaXRlYmFjayhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKLQkJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKLQotCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkKLQkJcmV0dXJuOwotCi0JdXBfcmVhZCgmc2ItPnNfdW1vdW50KTsKLQlwdXRfc3VwZXIoc2IpOworcGlubmVkOgorCSpwc2IgPSBzYjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGViYWNrX2lub2Rlc193YihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsCiAJCQkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHdiYy0+c2I7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHdiYy0+c2IsICpwaW5fc2IgPSBOVUxMOwogCWNvbnN0IGludCBpc19ibGtkZXZfc2IgPSBzYl9pc19ibGtkZXZfc2Ioc2IpOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwkvKiBsaXZlbG9jayBhdm9pZGFuY2UgKi8KIApAQCAtNjE5LDcgKzY3Miw3IEBACiAJCWlmIChpbm9kZV9kaXJ0aWVkX2FmdGVyKGlub2RlLCBzdGFydCkpCiAJCQlicmVhazsKIAotCQlpZiAocGluX3NiX2Zvcl93cml0ZWJhY2sod2JjLCBpbm9kZSkpIHsKKwkJaWYgKHBpbl9zYl9mb3Jfd3JpdGViYWNrKHdiYywgaW5vZGUsICZwaW5fc2IpKSB7CiAJCQlyZXF1ZXVlX2lvKGlub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02MjgsNyArNjgxLDYgQEAKIAkJX19pZ2V0KGlub2RlKTsKIAkJcGFnZXNfc2tpcHBlZCA9IHdiYy0+cGFnZXNfc2tpcHBlZDsKIAkJd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjKTsKLQkJdW5waW5fc2JfZm9yX3dyaXRlYmFjayh3YmMsIGlub2RlKTsKIAkJaWYgKHdiYy0+cGFnZXNfc2tpcHBlZCAhPSBwYWdlc19za2lwcGVkKSB7CiAJCQkvKgogCQkJICogd3JpdGViYWNrIGlzIG5vdCBtYWtpbmcgcHJvZ3Jlc3MgZHVlIHRvIGxvY2tlZApAQCAtNjQ4LDYgKzcwMCw4IEBACiAJCQl3YmMtPm1vcmVfaW8gPSAxOwogCX0KIAorCXVucGluX3NiX2Zvcl93cml0ZWJhY2soJnBpbl9zYik7CisKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAJLyogTGVhdmUgYW55IHVud3JpdHRlbiBpbm9kZXMgb24gYl9pbyAqLwogfQpAQCAtNzA2LDYgKzc2MCw3IEBACiAJfTsKIAl1bnNpZ25lZCBsb25nIG9sZGVzdF9qaWY7CiAJbG9uZyB3cm90ZSA9IDA7CisJc3RydWN0IGlub2RlICppbm9kZTsKIAogCWlmICh3YmMuZm9yX2t1cGRhdGUpIHsKIAkJd2JjLm9sZGVyX3RoYW5fdGhpcyA9ICZvbGRlc3RfamlmOwpAQCAtNzE5LDIwICs3NzQsMTYgQEAKIAogCWZvciAoOzspIHsKIAkJLyoKLQkJICogRG9uJ3QgZmx1c2ggYW55dGhpbmcgZm9yIG5vbi1pbnRlZ3JpdHkgd3JpdGViYWNrIHdoZXJlCi0JCSAqIG5vIG5yX3BhZ2VzIHdhcyBnaXZlbgorCQkgKiBTdG9wIHdyaXRlYmFjayB3aGVuIG5yX3BhZ2VzIGhhcyBiZWVuIGNvbnN1bWVkCiAJCSAqLwotCQlpZiAoIWFyZ3MtPmZvcl9rdXBkYXRlICYmIGFyZ3MtPm5yX3BhZ2VzIDw9IDAgJiYKLQkJICAgICBhcmdzLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKQorCQlpZiAoYXJncy0+bnJfcGFnZXMgPD0gMCkKIAkJCWJyZWFrOwogCiAJCS8qCi0JCSAqIElmIG5vIHNwZWNpZmljIHBhZ2VzIHdlcmUgZ2l2ZW4gYW5kIHRoaXMgaXMganVzdCBhCi0JCSAqIHBlcmlvZGljIGJhY2tncm91bmQgd3JpdGVvdXQgYW5kIHdlIGFyZSBiZWxvdyB0aGUKLQkJICogYmFja2dyb3VuZCBkaXJ0eSB0aHJlc2hvbGQsIGRvbid0IGRvIGFueXRoaW5nCisJCSAqIEZvciBiYWNrZ3JvdW5kIHdyaXRlb3V0LCBzdG9wIHdoZW4gd2UgYXJlIGJlbG93IHRoZQorCQkgKiBiYWNrZ3JvdW5kIGRpcnR5IHRocmVzaG9sZAogCQkgKi8KLQkJaWYgKGFyZ3MtPmZvcl9rdXBkYXRlICYmIGFyZ3MtPm5yX3BhZ2VzIDw9IDAgJiYKLQkJICAgICFvdmVyX2Jncm91bmRfdGhyZXNoKCkpCisJCWlmIChhcmdzLT5mb3JfYmFja2dyb3VuZCAmJiAhb3Zlcl9iZ3JvdW5kX3RocmVzaCgpKQogCQkJYnJlYWs7CiAKIAkJd2JjLm1vcmVfaW8gPSAwOwpAQCAtNzQ0LDEzICs3OTUsMzIgQEAKIAkJd3JvdGUgKz0gTUFYX1dSSVRFQkFDS19QQUdFUyAtIHdiYy5ucl90b193cml0ZTsKIAogCQkvKgotCQkgKiBJZiB3ZSByYW4gb3V0IG9mIHN0dWZmIHRvIHdyaXRlLCBiYWlsIHVubGVzcyBtb3JlX2lvIGdvdCBzZXQKKwkJICogSWYgd2UgY29uc3VtZWQgZXZlcnl0aGluZywgc2VlIGlmIHdlIGhhdmUgbW9yZQogCQkgKi8KLQkJaWYgKHdiYy5ucl90b193cml0ZSA+IDAgfHwgd2JjLnBhZ2VzX3NraXBwZWQgPiAwKSB7Ci0JCQlpZiAod2JjLm1vcmVfaW8gJiYgIXdiYy5mb3Jfa3VwZGF0ZSkKLQkJCQljb250aW51ZTsKKwkJaWYgKHdiYy5ucl90b193cml0ZSA8PSAwKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIERpZG4ndCB3cml0ZSBldmVyeXRoaW5nIGFuZCB3ZSBkb24ndCBoYXZlIG1vcmUgSU8sIGJhaWwKKwkJICovCisJCWlmICghd2JjLm1vcmVfaW8pCiAJCQlicmVhazsKKwkJLyoKKwkJICogRGlkIHdlIHdyaXRlIHNvbWV0aGluZz8gVHJ5IGZvciBtb3JlCisJCSAqLworCQlpZiAod2JjLm5yX3RvX3dyaXRlIDwgTUFYX1dSSVRFQkFDS19QQUdFUykKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBOb3RoaW5nIHdyaXR0ZW4uIFdhaXQgZm9yIHNvbWUgaW5vZGUgdG8KKwkJICogYmVjb21lIGF2YWlsYWJsZSBmb3Igd3JpdGViYWNrLiBPdGhlcndpc2UKKwkJICogd2UnbGwganVzdCBidXN5bG9vcC4KKwkJICovCisJCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmd2ItPmJfbW9yZV9pbykpICB7CisJCQlpbm9kZSA9IGxpc3RfZW50cnkod2ItPmJfbW9yZV9pby5wcmV2LAorCQkJCQkJc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQkJaW5vZGVfd2FpdF9mb3Jfd3JpdGViYWNrKGlub2RlKTsKIAkJfQorCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAJfQogCiAJcmV0dXJuIHdyb3RlOwpAQCAtMTA2MCw5ICsxMTMwLDYgQEAKICAqIElmIG9sZGVyX3RoYW5fdGhpcyBpcyBub24tTlVMTCwgdGhlbiBvbmx5IHdyaXRlIG91dCBpbm9kZXMgd2hpY2gKICAqIGhhZCB0aGVpciBmaXJzdCBkaXJ0eWluZyBhdCBhIHRpbWUgZWFybGllciB0aGFuICpvbGRlcl90aGFuX3RoaXMuCiAgKgotICogSWYgd2UncmUgYSBwZGxmdXNoIHRocmVhZCwgdGhlbiBpbXBsZW1lbnQgcGRmbHVzaCBjb2xsaXNpb24gYXZvaWRhbmNlCi0gKiBhZ2FpbnN0IHRoZSBlbnRpcmUgbGlzdC4KLSAqCiAgKiBJZiBgYmRpJyBpcyBub24temVybyB0aGVuIHdlJ3JlIGJlaW5nIGFza2VkIHRvIHdyaXRlYmFjayBhIHNwZWNpZmljIHF1ZXVlLgogICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGJsb2NrZGV2IHN1cGVyYmxvY2sncyBpbm9kZXMgYXJlIGJhY2tlZCBieQogICogYSB2YXJpZXR5IG9mIHF1ZXVlcywgc28gYWxsIGlub2RlcyBhcmUgc2VhcmNoZWQuICBGb3Igb3RoZXIgc3VwZXJibG9ja3MsCkBAIC0xMTQxLDcgKzEyMDgsNyBAQAogCW5yX3RvX3dyaXRlID0gbnJfZGlydHkgKyBucl91bnN0YWJsZSArCiAJCQkoaW5vZGVzX3N0YXQubnJfaW5vZGVzIC0gaW5vZGVzX3N0YXQubnJfdW51c2VkKTsKIAotCWJkaV93cml0ZWJhY2tfYWxsKHNiLCBucl90b193cml0ZSk7CisJYmRpX3N0YXJ0X3dyaXRlYmFjayhzYi0+c19iZGksIHNiLCBucl90b193cml0ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHdyaXRlYmFja19pbm9kZXNfc2IpOwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCA5OTJmNmM5Li44YWRhNzhhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTcxMiw4ICs3MTIsMTAgQEAKIAkJCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKG5ld2Rpcik7CiAKIAkJLyogbmV3ZW50IHdpbGwgZW5kIHVwIG5lZ2F0aXZlICovCi0JCWlmIChuZXdlbnQtPmRfaW5vZGUpCisJCWlmIChuZXdlbnQtPmRfaW5vZGUpIHsKKwkJCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKG5ld2VudC0+ZF9pbm9kZSk7CiAJCQlmdXNlX2ludmFsaWRhdGVfZW50cnlfY2FjaGUobmV3ZW50KTsKKwkJfQogCX0gZWxzZSBpZiAoZXJyID09IC1FSU5UUikgewogCQkvKiBJZiByZXF1ZXN0IHdhcyBpbnRlcnJ1cHRlZCwgREVJVFkgb25seSBrbm93cyBpZiB0aGUKIAkJICAgcmVuYW1lIGFjdHVhbGx5IHRvb2sgcGxhY2UuICBJZiB0aGUgaW52YWxpZGF0aW9uCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IGNiYzQ2NDAuLmMxODkxM2EgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xMDYzLDcgKzEwNjMsOCBAQAogCQkJCWJyZWFrOwogCQl9CiAJfQotCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJaWYgKCFJU19FUlIocmVxKSkKKwkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAocmVzID4gMCkKIAkJKnBwb3MgPSBwb3M7CiAKQEAgLTEzMTMsNyArMTMxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZnVzZV9maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZnVzZV9maWxlX3ZtX29wcyA9IHsKIAkuY2xvc2UJCT0gZnVzZV92bWFfY2xvc2UsCiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IGZ1c2VfcGFnZV9ta3dyaXRlLApAQCAtMTU5OSw3ICsxNjAwLDcgQEAKIAkJCWthZGRyICs9IGNvcHk7CiAJCX0KIAotCQlrdW5tYXAobWFwKTsKKwkJa3VubWFwKHBhZ2UpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9maWxlLmMgYi9mcy9nZnMyL2ZpbGUuYwppbmRleCAxNjZmMzhmLi40ZWIzMDhhIDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtNDE4LDcgKzQxOCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZnMyX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2ZzMl92bV9vcHMgPSB7CiAJLmZhdWx0ID0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlID0gZ2ZzMl9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvaGZzL2J0cmVlLmMgYi9mcy9oZnMvYnRyZWUuYwppbmRleCA5YjlkNjM5Li4wNTJmMjE0IDEwMDY0NAotLS0gYS9mcy9oZnMvYnRyZWUuYworKysgYi9mcy9oZnMvYnRyZWUuYwpAQCAtNTgsNiArNTgsMTEgQEAKIAl9CiAJdW5sb2NrX25ld19pbm9kZSh0cmVlLT5pbm9kZSk7CiAKKwlpZiAoIUhGU19JKHRyZWUtPmlub2RlKS0+Zmlyc3RfYmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGZzOiBpbnZhbGlkIGJ0cmVlIGV4dGVudCByZWNvcmRzICgwIHNpemUpLlxuIik7CisJCWdvdG8gZnJlZV9pbm9kZTsKKwl9CisKIAltYXBwaW5nID0gdHJlZS0+aW5vZGUtPmlfbWFwcGluZzsKIAlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgMCwgTlVMTCk7CiAJaWYgKElTX0VSUihwYWdlKSkKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKaW5kZXggMTc1ZDA4ZS4uYmVkNzhhYzggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jCisrKyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCkBAIC05OSw2ICs5OSwxMCBAQAogCiAJaWYgKGhmc3BsdXNfZ2V0X2xhc3Rfc2Vzc2lvbihzYiwgJnBhcnRfc3RhcnQsICZwYXJ0X3NpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoKHU2NClwYXJ0X3N0YXJ0ICsgcGFydF9zaXplID4gMHgxMDAwMDAwMDBVTEwpIHsKKwkJcHJfZXJyKCJoZnM6IHZvbHVtZXMgbGFyZ2VyIHRoYW4gMlRCIGFyZSBub3Qgc3VwcG9ydGVkIHlldFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAl3aGlsZSAoMSkgewogCQliaCA9IHNiX2JyZWFkNTEyKHNiLCBwYXJ0X3N0YXJ0ICsgSEZTUExVU19WT0xIRUFEX1NFQ1RPUiwgdmhkcik7CiAJCWlmICghYmgpCmRpZmYgLS1naXQgYS9mcy9pb2N0bC5jIGIvZnMvaW9jdGwuYwppbmRleCA3YjE3YTE0Li42Yzc1MTEwIDEwMDY0NAotLS0gYS9mcy9pb2N0bC5jCisrKyBiL2ZzL2lvY3RsLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQkJICAgdTY0IGxlbiwgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgdG1wOwotCXVuc2lnbmVkIGludCBzdGFydF9ibGs7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0X2JsazsKIAlsb25nIGxvbmcgbGVuZ3RoID0gMCwgbWFwX2xlbiA9IDA7CiAJdTY0IGxvZ2ljYWwgPSAwLCBwaHlzID0gMCwgc2l6ZSA9IDA7CiAJdTMyIGZsYWdzID0gRklFTUFQX0VYVEVOVF9NRVJHRUQ7CmRpZmYgLS1naXQgYS9mcy9qYmQvam91cm5hbC5jIGIvZnMvamJkL2pvdXJuYWwuYwppbmRleCBiZDNjMDczLi40MTYwYWZhIDEwMDY0NAotLS0gYS9mcy9qYmQvam91cm5hbC5jCisrKyBiL2ZzL2piZC9qb3VybmFsLmMKQEAgLTczLDYgKzczLDcgQEAKIEVYUE9SVF9TWU1CT0woam91cm5hbF9hY2tfZXJyKTsKIEVYUE9SVF9TWU1CT0woam91cm5hbF9jbGVhcl9lcnIpOwogRVhQT1JUX1NZTUJPTChsb2dfd2FpdF9jb21taXQpOworRVhQT1JUX1NZTUJPTChsb2dfc3RhcnRfY29tbWl0KTsKIEVYUE9SVF9TWU1CT0woam91cm5hbF9zdGFydF9jb21taXQpOwogRVhQT1JUX1NZTUJPTChqb3VybmFsX2ZvcmNlX2NvbW1pdF9uZXN0ZWQpOwogRVhQT1JUX1NZTUJPTChqb3VybmFsX3dpcGUpOwpAQCAtNzU2LDYgKzc1Nyw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTgyMCw2ICs4MjIsNyBAQAogCiAJcmV0dXJuIGpvdXJuYWw7CiBvdXRfZXJyOgorCWtmcmVlKGpvdXJuYWwtPmpfd2J1Zik7CiAJa2ZyZWUoam91cm5hbCk7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9mcy9qYmQyL2NoZWNrcG9pbnQuYyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCmluZGV4IDVkNzBiM2UuLmNhMGY1ZWIgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY2hlY2twb2ludC5jCisrKyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCkBAIC02NDMsNiArNjQzLDcgQEAKIAogaW50IF9famJkMl9qb3VybmFsX3JlbW92ZV9jaGVja3BvaW50KHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoKQogeworCXN0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfcyAqc3RhdHM7CiAJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb247CiAJam91cm5hbF90ICpqb3VybmFsOwogCWludCByZXQgPSAwOwpAQCAtNjc5LDYgKzY4MCwxMiBAQAogCiAJLyogT0ssIHRoYXQgd2FzIHRoZSBsYXN0IGJ1ZmZlciBmb3IgdGhlIHRyYW5zYWN0aW9uOiB3ZSBjYW4gbm93CiAJICAgc2FmZWx5IHJlbW92ZSB0aGlzIHRyYW5zYWN0aW9uIGZyb20gdGhlIGxvZyAqLworCXN0YXRzID0gJnRyYW5zYWN0aW9uLT50X2NocF9zdGF0czsKKwlpZiAoc3RhdHMtPmNzX2NocF90aW1lKQorCQlzdGF0cy0+Y3NfY2hwX3RpbWUgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy0+Y3NfY2hwX3RpbWUsCisJCQkJCQkgICAgamlmZmllcyk7CisJdHJhY2VfamJkMl9jaGVja3BvaW50X3N0YXRzKGpvdXJuYWwtPmpfZnNfZGV2LT5iZF9kZXYsCisJCQkJICAgIHRyYW5zYWN0aW9uLT50X3RpZCwgc3RhdHMpOwogCiAJX19qYmQyX2pvdXJuYWxfZHJvcF90cmFuc2FjdGlvbihqb3VybmFsLCB0cmFuc2FjdGlvbik7CiAJa2ZyZWUodHJhbnNhY3Rpb24pOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmMKaW5kZXggMjZkOTkxZC4uZDRjZmQ2ZCAxMDA2NDQKLS0tIGEvZnMvamJkMi9jb21taXQuYworKysgYi9mcy9qYmQyL2NvbW1pdC5jCkBAIC00MTAsMTAgKzQxMCwxMCBAQAogCWlmIChjb21taXRfdHJhbnNhY3Rpb24tPnRfc3luY2hyb25vdXNfY29tbWl0KQogCQl3cml0ZV9vcCA9IFdSSVRFX1NZTkNfUExVRzsKIAl0cmFjZV9qYmQyX2NvbW1pdF9sb2NraW5nKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbik7Ci0Jc3RhdHMudS5ydW4ucnNfd2FpdCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9tYXhfd2FpdDsKLQlzdGF0cy51LnJ1bi5yc19sb2NrZWQgPSBqaWZmaWVzOwotCXN0YXRzLnUucnVuLnJzX3J1bm5pbmcgPSBqYmQyX3RpbWVfZGlmZihjb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQsCi0JCQkJCQlzdGF0cy51LnJ1bi5yc19sb2NrZWQpOworCXN0YXRzLnJ1bi5yc193YWl0ID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X21heF93YWl0OworCXN0YXRzLnJ1bi5yc19sb2NrZWQgPSBqaWZmaWVzOworCXN0YXRzLnJ1bi5yc19ydW5uaW5nID0gamJkMl90aW1lX2RpZmYoY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXJ0LAorCQkJCQkgICAgICBzdGF0cy5ydW4ucnNfbG9ja2VkKTsKIAogCXNwaW5fbG9jaygmY29tbWl0X3RyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKIAl3aGlsZSAoY29tbWl0X3RyYW5zYWN0aW9uLT50X3VwZGF0ZXMpIHsKQEAgLTQ4Niw5ICs0ODYsOSBAQAogCWpiZDJfam91cm5hbF9zd2l0Y2hfcmV2b2tlX3RhYmxlKGpvdXJuYWwpOwogCiAJdHJhY2VfamJkMl9jb21taXRfZmx1c2hpbmcoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKLQlzdGF0cy51LnJ1bi5yc19mbHVzaGluZyA9IGppZmZpZXM7Ci0Jc3RhdHMudS5ydW4ucnNfbG9ja2VkID0gamJkMl90aW1lX2RpZmYoc3RhdHMudS5ydW4ucnNfbG9ja2VkLAotCQkJCQkgICAgICAgc3RhdHMudS5ydW4ucnNfZmx1c2hpbmcpOworCXN0YXRzLnJ1bi5yc19mbHVzaGluZyA9IGppZmZpZXM7CisJc3RhdHMucnVuLnJzX2xvY2tlZCA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnJ1bi5yc19sb2NrZWQsCisJCQkJCSAgICAgc3RhdHMucnVuLnJzX2ZsdXNoaW5nKTsKIAogCWNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGF0ZSA9IFRfRkxVU0g7CiAJam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uID0gY29tbWl0X3RyYW5zYWN0aW9uOwpAQCAtNTIzLDExICs1MjMsMTEgQEAKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAogCXRyYWNlX2piZDJfY29tbWl0X2xvZ2dpbmcoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKLQlzdGF0cy51LnJ1bi5yc19sb2dnaW5nID0gamlmZmllczsKLQlzdGF0cy51LnJ1bi5yc19mbHVzaGluZyA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnUucnVuLnJzX2ZsdXNoaW5nLAotCQkJCQkJIHN0YXRzLnUucnVuLnJzX2xvZ2dpbmcpOwotCXN0YXRzLnUucnVuLnJzX2Jsb2NrcyA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzOwotCXN0YXRzLnUucnVuLnJzX2Jsb2Nrc19sb2dnZWQgPSAwOworCXN0YXRzLnJ1bi5yc19sb2dnaW5nID0gamlmZmllczsKKwlzdGF0cy5ydW4ucnNfZmx1c2hpbmcgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy5ydW4ucnNfZmx1c2hpbmcsCisJCQkJCSAgICAgICBzdGF0cy5ydW4ucnNfbG9nZ2luZyk7CisJc3RhdHMucnVuLnJzX2Jsb2NrcyA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzOworCXN0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkID0gMDsKIAogCUpfQVNTRVJUKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9ucl9idWZmZXJzIDw9CiAJCSBjb21taXRfdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyk7CkBAIC02OTUsNyArNjk1LDcgQEAKIAkJCQlzdWJtaXRfYmgod3JpdGVfb3AsIGJoKTsKIAkJCX0KIAkJCWNvbmRfcmVzY2hlZCgpOwotCQkJc3RhdHMudS5ydW4ucnNfYmxvY2tzX2xvZ2dlZCArPSBidWZzOworCQkJc3RhdHMucnVuLnJzX2Jsb2Nrc19sb2dnZWQgKz0gYnVmczsKIAogCQkJLyogRm9yY2UgYSBuZXcgZGVzY3JpcHRvciB0byBiZSBnZW5lcmF0ZWQgbmV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSByb3VuZCB0aGUgbG9vcC4gKi8KQEAgLTk4OCwzMyArOTg4LDMwIEBACiAJSl9BU1NFUlQoY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXRlID09IFRfQ09NTUlUKTsKIAogCWNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGFydCA9IGppZmZpZXM7Ci0Jc3RhdHMudS5ydW4ucnNfbG9nZ2luZyA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnUucnVuLnJzX2xvZ2dpbmcsCi0JCQkJCQljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQpOworCXN0YXRzLnJ1bi5yc19sb2dnaW5nID0gamJkMl90aW1lX2RpZmYoc3RhdHMucnVuLnJzX2xvZ2dpbmcsCisJCQkJCSAgICAgIGNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGFydCk7CiAKIAkvKgotCSAqIEZpbGUgdGhlIHRyYW5zYWN0aW9uIGZvciBoaXN0b3J5CisJICogRmlsZSB0aGUgdHJhbnNhY3Rpb24gc3RhdGlzdGljcwogCSAqLwotCXN0YXRzLnRzX3R5cGUgPSBKQkQyX1NUQVRTX1JVTjsKIAlzdGF0cy50c190aWQgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfdGlkOwotCXN0YXRzLnUucnVuLnJzX2hhbmRsZV9jb3VudCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9oYW5kbGVfY291bnQ7Ci0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci0JbWVtY3B5KGpvdXJuYWwtPmpfaGlzdG9yeSArIGpvdXJuYWwtPmpfaGlzdG9yeV9jdXIsICZzdGF0cywKLQkJCXNpemVvZihzdGF0cykpOwotCWlmICgrK2pvdXJuYWwtPmpfaGlzdG9yeV9jdXIgPT0gam91cm5hbC0+al9oaXN0b3J5X21heCkKLQkJam91cm5hbC0+al9oaXN0b3J5X2N1ciA9IDA7CisJc3RhdHMucnVuLnJzX2hhbmRsZV9jb3VudCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9oYW5kbGVfY291bnQ7CisJdHJhY2VfamJkMl9ydW5fc3RhdHMoam91cm5hbC0+al9mc19kZXYtPmJkX2RldiwKKwkJCSAgICAgY29tbWl0X3RyYW5zYWN0aW9uLT50X3RpZCwgJnN0YXRzLnJ1bik7CiAKIAkvKgogCSAqIENhbGN1bGF0ZSBvdmVyYWxsIHN0YXRzCiAJICovCisJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7CiAJam91cm5hbC0+al9zdGF0cy50c190aWQrKzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX3dhaXQgKz0gc3RhdHMudS5ydW4ucnNfd2FpdDsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX3J1bm5pbmcgKz0gc3RhdHMudS5ydW4ucnNfcnVubmluZzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2xvY2tlZCArPSBzdGF0cy51LnJ1bi5yc19sb2NrZWQ7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19mbHVzaGluZyArPSBzdGF0cy51LnJ1bi5yc19mbHVzaGluZzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2xvZ2dpbmcgKz0gc3RhdHMudS5ydW4ucnNfbG9nZ2luZzsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2hhbmRsZV9jb3VudCArPSBzdGF0cy51LnJ1bi5yc19oYW5kbGVfY291bnQ7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19ibG9ja3MgKz0gc3RhdHMudS5ydW4ucnNfYmxvY2tzOwotCWpvdXJuYWwtPmpfc3RhdHMudS5ydW4ucnNfYmxvY2tzX2xvZ2dlZCArPSBzdGF0cy51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkOworCWpvdXJuYWwtPmpfc3RhdHMucnVuLnJzX3dhaXQgKz0gc3RhdHMucnVuLnJzX3dhaXQ7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfcnVubmluZyArPSBzdGF0cy5ydW4ucnNfcnVubmluZzsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19sb2NrZWQgKz0gc3RhdHMucnVuLnJzX2xvY2tlZDsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19mbHVzaGluZyArPSBzdGF0cy5ydW4ucnNfZmx1c2hpbmc7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfbG9nZ2luZyArPSBzdGF0cy5ydW4ucnNfbG9nZ2luZzsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19oYW5kbGVfY291bnQgKz0gc3RhdHMucnVuLnJzX2hhbmRsZV9jb3VudDsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19ibG9ja3MgKz0gc3RhdHMucnVuLnJzX2Jsb2NrczsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkICs9IHN0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkOwogCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7CiAKIAljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhdGUgPSBUX0ZJTklTSEVEOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCA1M2I4NmUxLi5mZWQ4NTM4OCAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKKysrIGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTEzNiwxMCArMTM2LDYgQEAKIAlqb3VybmFsLT5qX3Rhc2sgPSBjdXJyZW50OwogCXdha2VfdXAoJmpvdXJuYWwtPmpfd2FpdF9kb25lX2NvbW1pdCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJram91cm5hbGQyIHN0YXJ0aW5nOiBwaWQgJWQsIGRldiAlcywgIgotCSAgICAgICAiY29tbWl0IGludGVydmFsICVsZCBzZWNvbmRzXG4iLCBjdXJyZW50LT5waWQsCi0JICAgICAgIGpvdXJuYWwtPmpfZGV2bmFtZSwgam91cm5hbC0+al9jb21taXRfaW50ZXJ2YWwgLyBIWik7Ci0KIAkvKgogCSAqIEFuZCBub3csIHdhaXQgZm9yZXZlciBmb3IgY29tbWl0IHdha2V1cCBldmVudHMuCiAJICovCkBAIC0yMjMsNyArMjE5LDggQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKLQl0ID0ga3RocmVhZF9ydW4oa2pvdXJuYWxkMiwgam91cm5hbCwgImtqb3VybmFsZDIiKTsKKwl0ID0ga3RocmVhZF9ydW4oa2pvdXJuYWxkMiwgam91cm5hbCwgImpiZDIvJXMiLAorCQkJam91cm5hbC0+al9kZXZuYW1lKTsKIAlpZiAoSVNfRVJSKHQpKQogCQlyZXR1cm4gUFRSX0VSUih0KTsKIApAQCAtNjc5LDE1MyArNjc2LDYgQEAKIAlpbnQgbWF4OwogfTsKIAotc3RhdGljIHZvaWQgKmpiZDJfaGlzdG9yeV9za2lwX2VtcHR5KHN0cnVjdCBqYmQyX3N0YXRzX3Byb2Nfc2Vzc2lvbiAqcywKLQkJCQkJc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgKnRzLAotCQkJCQlpbnQgZmlyc3QpCi17Ci0JaWYgKHRzID09IHMtPnN0YXRzICsgcy0+bWF4KQotCQl0cyA9IHMtPnN0YXRzOwotCWlmICghZmlyc3QgJiYgdHMgPT0gcy0+c3RhdHMgKyBzLT5zdGFydCkKLQkJcmV0dXJuIE5VTEw7Ci0Jd2hpbGUgKHRzLT50c190eXBlID09IDApIHsKLQkJdHMrKzsKLQkJaWYgKHRzID09IHMtPnN0YXRzICsgcy0+bWF4KQotCQkJdHMgPSBzLT5zdGF0czsKLQkJaWYgKHRzID09IHMtPnN0YXRzICsgcy0+c3RhcnQpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIHRzOwotCi19Ci0KLXN0YXRpYyB2b2lkICpqYmQyX3NlcV9oaXN0b3J5X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgamJkMl9zdGF0c19wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgKnRzOwotCWludCBsID0gKnBvczsKLQotCWlmIChsID09IDApCi0JCXJldHVybiBTRVFfU1RBUlRfVE9LRU47Ci0JdHMgPSBqYmQyX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCBzLT5zdGF0cyArIHMtPnN0YXJ0LCAxKTsKLQlpZiAoIXRzKQotCQlyZXR1cm4gTlVMTDsKLQlsLS07Ci0Jd2hpbGUgKGwpIHsKLQkJdHMgPSBqYmQyX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCArK3RzLCAwKTsKLQkJaWYgKCF0cykKLQkJCWJyZWFrOwotCQlsLS07Ci0JfQotCXJldHVybiB0czsKLX0KLQotc3RhdGljIHZvaWQgKmpiZDJfc2VxX2hpc3RvcnlfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0Jc3RydWN0IGpiZDJfc3RhdHNfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zICp0cyA9IHY7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gamJkMl9oaXN0b3J5X3NraXBfZW1wdHkocywgcy0+c3RhdHMgKyBzLT5zdGFydCwgMSk7Ci0JZWxzZQotCQlyZXR1cm4gamJkMl9oaXN0b3J5X3NraXBfZW1wdHkocywgKyt0cywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgamJkMl9zZXFfaGlzdG9yeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zICp0cyA9IHY7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiJS00cyAlLTVzICUtNXMgJS01cyAlLTVzICUtNXMgJS01cyAlLTZzICUtNXMgIgotCQkJCSIlLTVzICUtNXMgJS01cyAlLTVzICUtNXNcbiIsICJSL0MiLCAidGlkIiwKLQkJCQkid2FpdCIsICJydW4iLCAibG9jayIsICJmbHVzaCIsICJsb2ciLCAiaG5kbHMiLAotCQkJCSJibG9jayIsICJpbmxvZyIsICJjdGltZSIsICJ3cml0ZSIsICJkcm9wIiwKLQkJCQkiY2xvc2UiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICh0cy0+dHNfdHlwZSA9PSBKQkQyX1NUQVRTX1JVTikKLQkJc2VxX3ByaW50ZihzZXEsICIlLTRzICUtNWx1ICUtNXUgJS01dSAlLTV1ICUtNXUgJS01dSAiCi0JCQkJIiUtNmx1ICUtNWx1ICUtNWx1XG4iLCAiUiIsIHRzLT50c190aWQsCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfd2FpdCksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfcnVubmluZyksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfbG9ja2VkKSwKLQkJCQlqaWZmaWVzX3RvX21zZWNzKHRzLT51LnJ1bi5yc19mbHVzaGluZyksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfbG9nZ2luZyksCi0JCQkJdHMtPnUucnVuLnJzX2hhbmRsZV9jb3VudCwKLQkJCQl0cy0+dS5ydW4ucnNfYmxvY2tzLAotCQkJCXRzLT51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkKTsKLQllbHNlIGlmICh0cy0+dHNfdHlwZSA9PSBKQkQyX1NUQVRTX0NIRUNLUE9JTlQpCi0JCXNlcV9wcmludGYoc2VxLCAiJS00cyAlLTVsdSAlNDhzICUtNXUgJS01bHUgJS01bHUgJS01bHVcbiIsCi0JCQkJIkMiLCB0cy0+dHNfdGlkLCAiICIsCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5jaHAuY3NfY2hwX3RpbWUpLAotCQkJCXRzLT51LmNocC5jc193cml0dGVuLCB0cy0+dS5jaHAuY3NfZHJvcHBlZCwKLQkJCQl0cy0+dS5jaHAuY3NfZm9yY2VkX3RvX2Nsb3NlKTsKLQllbHNlCi0JCUpfQVNTRVJUKDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBqYmQyX3NlcV9oaXN0b3J5X3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgamJkMl9zZXFfaGlzdG9yeV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IGpiZDJfc2VxX2hpc3Rvcnlfc3RhcnQsCi0JLm5leHQgICA9IGpiZDJfc2VxX2hpc3RvcnlfbmV4dCwKLQkuc3RvcCAgID0gamJkMl9zZXFfaGlzdG9yeV9zdG9wLAotCS5zaG93ICAgPSBqYmQyX3NlcV9oaXN0b3J5X3Nob3csCi19OwotCi1zdGF0aWMgaW50IGpiZDJfc2VxX2hpc3Rvcnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlqb3VybmFsX3QgKmpvdXJuYWwgPSBQREUoaW5vZGUpLT5kYXRhOwotCXN0cnVjdCBqYmQyX3N0YXRzX3Byb2Nfc2Vzc2lvbiAqczsKLQlpbnQgcmMsIHNpemU7Ci0KLQlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAocyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zKSAqIGpvdXJuYWwtPmpfaGlzdG9yeV9tYXg7Ci0Jcy0+c3RhdHMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChzLT5zdGF0cyA9PSBOVUxMKSB7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci0JbWVtY3B5KHMtPnN0YXRzLCBqb3VybmFsLT5qX2hpc3RvcnksIHNpemUpOwotCXMtPm1heCA9IGpvdXJuYWwtPmpfaGlzdG9yeV9tYXg7Ci0Jcy0+c3RhcnQgPSBqb3VybmFsLT5qX2hpc3RvcnlfY3VyICUgcy0+bWF4OwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci0KLQlyYyA9IHNlcV9vcGVuKGZpbGUsICZqYmQyX3NlcV9oaXN0b3J5X29wcyk7Ci0JaWYgKHJjID09IDApIHsKLQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQltLT5wcml2YXRlID0gczsKLQl9IGVsc2UgewotCQlrZnJlZShzLT5zdGF0cyk7Ci0JCWtmcmVlKHMpOwotCX0KLQlyZXR1cm4gcmM7Ci0KLX0KLQotc3RhdGljIGludCBqYmQyX3NlcV9oaXN0b3J5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGpiZDJfc3RhdHNfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCi0Ja2ZyZWUocy0+c3RhdHMpOwotCWtmcmVlKHMpOwotCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpiZDJfc2VxX2hpc3RvcnlfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gamJkMl9zZXFfaGlzdG9yeV9vcGVuLAotCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAotCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSAgICAgICAgPSBqYmQyX3NlcV9oaXN0b3J5X3JlbGVhc2UsCi19OwotCiBzdGF0aWMgdm9pZCAqamJkMl9zZXFfaW5mb19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CiAJcmV0dXJuICpwb3MgPyBOVUxMIDogU0VRX1NUQVJUX1RPS0VOOwpAQCAtODQyLDI5ICs2OTIsMjkgQEAKIAogCWlmICh2ICE9IFNFUV9TVEFSVF9UT0tFTikKIAkJcmV0dXJuIDA7Ci0Jc2VxX3ByaW50ZihzZXEsICIlbHUgdHJhbnNhY3Rpb24sIGVhY2ggdXB0byAldSBibG9ja3NcbiIsCisJc2VxX3ByaW50ZihzZXEsICIlbHUgdHJhbnNhY3Rpb24sIGVhY2ggdXAgdG8gJXUgYmxvY2tzXG4iLAogCQkJcy0+c3RhdHMtPnRzX3RpZCwKIAkJCXMtPmpvdXJuYWwtPmpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnMpOwogCWlmIChzLT5zdGF0cy0+dHNfdGlkID09IDApCiAJCXJldHVybiAwOwogCXNlcV9wcmludGYoc2VxLCAiYXZlcmFnZTogXG4gICV1bXMgd2FpdGluZyBmb3IgdHJhbnNhY3Rpb25cbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX3dhaXQgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc193YWl0IC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAldW1zIHJ1bm5pbmcgdHJhbnNhY3Rpb25cbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX3J1bm5pbmcgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc19ydW5uaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAldW1zIHRyYW5zYWN0aW9uIHdhcyBiZWluZyBsb2NrZWRcbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX2xvY2tlZCAvIHMtPnN0YXRzLT50c190aWQpKTsKKwkgICAgamlmZmllc190b19tc2VjcyhzLT5zdGF0cy0+cnVuLnJzX2xvY2tlZCAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJXVtcyBmbHVzaGluZyBkYXRhIChpbiBvcmRlcmVkIG1vZGUpXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc19mbHVzaGluZyAvIHMtPnN0YXRzLT50c190aWQpKTsKKwkgICAgamlmZmllc190b19tc2VjcyhzLT5zdGF0cy0+cnVuLnJzX2ZsdXNoaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAldW1zIGxvZ2dpbmcgdHJhbnNhY3Rpb25cbiIsCi0JICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnUucnVuLnJzX2xvZ2dpbmcgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc19sb2dnaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOwogCXNlcV9wcmludGYoc2VxLCAiICAlbGx1dXMgYXZlcmFnZSB0cmFuc2FjdGlvbiBjb21taXQgdGltZVxuIiwKIAkJICAgZGl2X3U2NChzLT5qb3VybmFsLT5qX2F2ZXJhZ2VfY29tbWl0X3RpbWUsIDEwMDApKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJWx1IGhhbmRsZXMgcGVyIHRyYW5zYWN0aW9uXG4iLAotCSAgICBzLT5zdGF0cy0+dS5ydW4ucnNfaGFuZGxlX2NvdW50IC8gcy0+c3RhdHMtPnRzX3RpZCk7CisJICAgIHMtPnN0YXRzLT5ydW4ucnNfaGFuZGxlX2NvdW50IC8gcy0+c3RhdHMtPnRzX3RpZCk7CiAJc2VxX3ByaW50ZihzZXEsICIgICVsdSBibG9ja3MgcGVyIHRyYW5zYWN0aW9uXG4iLAotCSAgICBzLT5zdGF0cy0+dS5ydW4ucnNfYmxvY2tzIC8gcy0+c3RhdHMtPnRzX3RpZCk7CisJICAgIHMtPnN0YXRzLT5ydW4ucnNfYmxvY2tzIC8gcy0+c3RhdHMtPnRzX3RpZCk7CiAJc2VxX3ByaW50ZihzZXEsICIgICVsdSBsb2dnZWQgYmxvY2tzIHBlciB0cmFuc2FjdGlvblxuIiwKLQkgICAgcy0+c3RhdHMtPnUucnVuLnJzX2Jsb2Nrc19sb2dnZWQgLyBzLT5zdGF0cy0+dHNfdGlkKTsKKwkgICAgcy0+c3RhdHMtPnJ1bi5yc19ibG9ja3NfbG9nZ2VkIC8gcy0+c3RhdHMtPnRzX3RpZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyMCw3ICs3NzAsNyBAQAogCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpiZDJfc2VxX2luZm9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpiZDJfc2VxX2luZm9fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgICAgICAgID0gamJkMl9zZXFfaW5mb19vcGVuLAogCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLApAQCAtOTM0LDggKzc4NCw2IEBACiB7CiAJam91cm5hbC0+al9wcm9jX2VudHJ5ID0gcHJvY19ta2Rpcihqb3VybmFsLT5qX2Rldm5hbWUsIHByb2NfamJkMl9zdGF0cyk7CiAJaWYgKGpvdXJuYWwtPmpfcHJvY19lbnRyeSkgewotCQlwcm9jX2NyZWF0ZV9kYXRhKCJoaXN0b3J5IiwgU19JUlVHTywgam91cm5hbC0+al9wcm9jX2VudHJ5LAotCQkJCSAmamJkMl9zZXFfaGlzdG9yeV9mb3BzLCBqb3VybmFsKTsKIAkJcHJvY19jcmVhdGVfZGF0YSgiaW5mbyIsIFNfSVJVR08sIGpvdXJuYWwtPmpfcHJvY19lbnRyeSwKIAkJCQkgJmpiZDJfc2VxX2luZm9fZm9wcywgam91cm5hbCk7CiAJfQpAQCAtOTQ0LDI3ICs3OTIsOSBAQAogc3RhdGljIHZvaWQgamJkMl9zdGF0c19wcm9jX2V4aXQoam91cm5hbF90ICpqb3VybmFsKQogewogCXJlbW92ZV9wcm9jX2VudHJ5KCJpbmZvIiwgam91cm5hbC0+al9wcm9jX2VudHJ5KTsKLQlyZW1vdmVfcHJvY19lbnRyeSgiaGlzdG9yeSIsIGpvdXJuYWwtPmpfcHJvY19lbnRyeSk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoam91cm5hbC0+al9kZXZuYW1lLCBwcm9jX2piZDJfc3RhdHMpOwogfQogCi1zdGF0aWMgdm9pZCBqb3VybmFsX2luaXRfc3RhdHMoam91cm5hbF90ICpqb3VybmFsKQotewotCWludCBzaXplOwotCi0JaWYgKCFwcm9jX2piZDJfc3RhdHMpCi0JCXJldHVybjsKLQotCWpvdXJuYWwtPmpfaGlzdG9yeV9tYXggPSAxMDA7Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcykgKiBqb3VybmFsLT5qX2hpc3RvcnlfbWF4OwotCWpvdXJuYWwtPmpfaGlzdG9yeSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFqb3VybmFsLT5qX2hpc3RvcnkpIHsKLQkJam91cm5hbC0+al9oaXN0b3J5X21heCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0Jc3Bpbl9sb2NrX2luaXQoJmpvdXJuYWwtPmpfaGlzdG9yeV9sb2NrKTsKLX0KLQogLyoKICAqIE1hbmFnZW1lbnQgZm9yIGpvdXJuYWwgY29udHJvbCBibG9ja3M6IGZ1bmN0aW9ucyB0byBjcmVhdGUgYW5kCiAgKiBkZXN0cm95IGpvdXJuYWxfdCBzdHJ1Y3R1cmVzLCBhbmQgdG8gaW5pdGlhbGlzZSBhbmQgcmVhZCBleGlzdGluZwpAQCAtMTAwOSw3ICs4MzksNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0Jam91cm5hbF9pbml0X3N0YXRzKGpvdXJuYWwpOworCXNwaW5fbG9ja19pbml0KCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7CiAKIAlyZXR1cm4gam91cm5hbDsKIGZhaWw6CkBAIC0xMDgzLDYgKzkxMyw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlqYmQyX3N0YXRzX3Byb2NfZXhpdChqb3VybmFsKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTExMTUsNyArOTQ2LDcgQEAKIAl3aGlsZSAoKHAgPSBzdHJjaHIocCwgJy8nKSkpCiAJCSpwID0gJyEnOwogCXAgPSBqb3VybmFsLT5qX2Rldm5hbWUgKyBzdHJsZW4oam91cm5hbC0+al9kZXZuYW1lKTsKLQlzcHJpbnRmKHAsICI6JWx1Iiwgam91cm5hbC0+al9pbm9kZS0+aV9pbm8pOworCXNwcmludGYocCwgIi0lbHUiLCBqb3VybmFsLT5qX2lub2RlLT5pX2lubyk7CiAJamJkX2RlYnVnKDEsCiAJCSAgImpvdXJuYWwgJXA6IGlub2RlICVzLyVsZCwgc2l6ZSAlTGQsIGJpdHMgJWQsIGJsa3NpemUgJWxkXG4iLAogCQkgIGpvdXJuYWwsIGlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8sCkBAIC0xMTU2LDYgKzk4Nyw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlqYmQyX3N0YXRzX3Byb2NfZXhpdChqb3VybmFsKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL21tYXAuYyBiL2ZzL25jcGZzL21tYXAuYwppbmRleCA1ZDhkY2I5Li4xNTQ1OGRlIDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9tbWFwLmMKKysrIGIvZnMvbmNwZnMvbW1hcC5jCkBAIC05NSw3ICs5NSw3IEBACiAJcmV0dXJuIFZNX0ZBVUxUX01BSk9SOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5jcF9maWxlX21tYXAgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuY3BfZmlsZV9tbWFwID0KIHsKIAkuZmF1bHQgPSBuY3BfZmlsZV9tbWFwX2ZhdWx0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCA2Mzk3NmMwLi45OWVhMTk2IDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC0xMTgwLDcgKzExODAsNyBAQAogCQkJCSAgICAgIDEsIGZsYWdzICYgTkZTX01PVU5UX05PUkVTVlBPUlQpOwogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gZXJyb3I7Ci0JbWVtY3B5KGNscC0+Y2xfaXBhZGRyLCBpcF9hZGRyLCBzaXplb2YoY2xwLT5jbF9pcGFkZHIpKTsKKwlzdHJsY3B5KGNscC0+Y2xfaXBhZGRyLCBpcF9hZGRyLCBzaXplb2YoY2xwLT5jbF9pcGFkZHIpKTsKIAogCWVycm9yID0gbmZzX2lkbWFwX25ldyhjbHApOwogCWlmIChlcnJvciA8IDApIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCAzMjA2MmMzLi43Y2IyOTg1IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xNTM2LDYgKzE1MzYsOCBAQAogCQlvbGRfZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAogCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKKwluZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUpOworCiAJZF9kcm9wKGRlbnRyeSk7CiAJZXJyb3IgPSBORlNfUFJPVE8oZGlyKS0+bGluayhpbm9kZSwgZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlmIChlcnJvciA9PSAwKSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggNmMzMjEwMC4uZTFkNDE1ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtNDU3LDYgKzQ1Nyw3IEBACiAJfTsKIAlzdHJ1Y3QgcnBjX3Rhc2tfc2V0dXAgdGFza19zZXR1cF9kYXRhID0gewogCQkucnBjX2NsaWVudCA9IE5GU19DTElFTlQoaW5vZGUpLAorCQkucnBjX21lc3NhZ2UgPSAmbXNnLAogCQkuY2FsbGJhY2tfb3BzID0gJm5mc193cml0ZV9kaXJlY3Rfb3BzLAogCQkud29ya3F1ZXVlID0gbmZzaW9kX3dvcmtxdWV1ZSwKIAkJLmZsYWdzID0gUlBDX1RBU0tfQVNZTkMsCmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCA4NmQ2YjRkLi5mNWZkZDM5IDEwMDY0NAotLS0gYS9mcy9uZnMvZmlsZS5jCisrKyBiL2ZzL25mcy9maWxlLmMKQEAgLTU5LDcgKzU5LDcgQEAKIHN0YXRpYyBpbnQgbmZzX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7CiBzdGF0aWMgaW50IG5mc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9uZyBhcmcsIHN0cnVjdCBmaWxlX2xvY2sgKipmbCk7CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmZzX2ZpbGVfdm1fb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuZnNfZmlsZV92bV9vcHM7CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IG5mc19maWxlX2xsc2VlaywKQEAgLTU3Miw3ICs1NzIsNyBAQAogCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmZzX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuZnNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0ID0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlID0gbmZzX3ZtX3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jIGIvZnMvbmZzL25mczRuYW1lc3BhY2UuYwppbmRleCAyNjM2YzI2Li5mYTM0MDhmIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCisrKyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCiAJbW50X3BhdGggPSBuZnM0X3BhdGhuYW1lX3N0cmluZygmbG9jYXRpb24tPnJvb3RwYXRoLCBwYWdlMiwgUEFHRV9TSVpFKTsKIAlpZiAoSVNfRVJSKG1udF9wYXRoKSkKLQkJcmV0dXJuIG1udDsKKwkJcmV0dXJuIEVSUl9DQVNUKG1udF9wYXRoKTsKIAltb3VudGRhdGEtPm1udF9wYXRoID0gbW50X3BhdGg7CiAJbWF4YnVmbGVuID0gbW50X3BhdGggLSAxIC0gcGFnZTI7CiAKQEAgLTEzMiwxNSArMTMyLDE1IEBACiAJCWlmIChidWYtPmxlbiA8PSAwIHx8IGJ1Zi0+bGVuID49IG1heGJ1ZmxlbikKIAkJCWNvbnRpbnVlOwogCi0JCW1vdW50ZGF0YS0+YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjsKLQogCQlpZiAobWVtY2hyKGJ1Zi0+ZGF0YSwgSVBWNl9TQ09QRV9ERUxJTUlURVIsIGJ1Zi0+bGVuKSkKIAkJCWNvbnRpbnVlOwotCQltb3VudGRhdGEtPmFkZHJsZW4gPSBuZnNfcGFyc2Vfc2VydmVyX25hbWUoYnVmLT5kYXRhLAotCQkJCWJ1Zi0+bGVuLAotCQkJCW1vdW50ZGF0YS0+YWRkciwgbW91bnRkYXRhLT5hZGRybGVuKTsKKworCQltb3VudGRhdGEtPmFkZHJsZW4gPSBuZnNfcGFyc2Vfc2VydmVyX25hbWUoYnVmLT5kYXRhLCBidWYtPmxlbiwKKwkJCQkoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSk7CiAJCWlmIChtb3VudGRhdGEtPmFkZHJsZW4gPT0gMCkKIAkJCWNvbnRpbnVlOworCisJCW1vdW50ZGF0YS0+YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjsKIAkJcnBjX3NldF9wb3J0KG1vdW50ZGF0YS0+YWRkciwgTkZTX1BPUlQpOwogCiAJCW1lbWNweShwYWdlMiwgYnVmLT5kYXRhLCBidWYtPmxlbik7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IGVkN2MyNjkuLmZmMzc0NTQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC03MiwxMiArNzIsMTcgQEAKIC8qIFByZXZlbnQgbGVha3Mgb2YgTkZTdjQgZXJyb3JzIGludG8gdXNlcmxhbmQgKi8KIHN0YXRpYyBpbnQgbmZzNF9tYXBfZXJyb3JzKGludCBlcnIpCiB7Ci0JaWYgKGVyciA8IC0xMDAwKSB7CisJaWYgKGVyciA+PSAtMTAwMCkKKwkJcmV0dXJuIGVycjsKKwlzd2l0Y2ggKGVycikgeworCWNhc2UgLU5GUzRFUlJfUkVTT1VSQ0U6CisJCXJldHVybiAtRVJFTU9URUlPOworCWRlZmF1bHQ6CiAJCWRwcmludGsoIiVzIGNvdWxkIG5vdCBoYW5kbGUgTkZTdjQgZXJyb3IgJWRcbiIsCiAJCQkJX19mdW5jX18sIC1lcnIpOwotCQlyZXR1cm4gLUVJTzsKKwkJYnJlYWs7CiAJfQotCXJldHVybiBlcnI7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qCkBAIC0zMDYwLDkgKzMwNjUsNiBAQAogCWlmICh0aW1lX2JlZm9yZShjbHAtPmNsX2xhc3RfcmVuZXdhbCx0aW1lc3RhbXApKQogCQljbHAtPmNsX2xhc3RfcmVuZXdhbCA9IHRpbWVzdGFtcDsKIAlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKLQlkcHJpbnRrKCIlcyBjYWxsaW5nIHB1dF9ycGNjcmVkIG9uIHJwY19jcmVkICVwXG4iLCBfX2Z1bmNfXywKLQkJCQl0YXNrLT50a19tc2cucnBjX2NyZWQpOwotCXB1dF9ycGNjcmVkKHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIG5mczRfcmVuZXdfb3BzID0gewpAQCAtNDg3Nyw3ICs0ODc5LDYgQEAKIAluZnM0MV9zZXF1ZW5jZV9mcmVlX3Nsb3QoY2xwLCB0YXNrLT50a19tc2cucnBjX3Jlc3ApOwogCWRwcmludGsoIiVzIHJwY19jcmVkICVwXG4iLCBfX2Z1bmNfXywgdGFzay0+dGtfbXNnLnJwY19jcmVkKTsKIAotCXB1dF9ycGNjcmVkKHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CiAJa2ZyZWUodGFzay0+dGtfbXNnLnJwY19hcmdwKTsKIAlrZnJlZSh0YXNrLT50a19tc2cucnBjX3Jlc3ApOwogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHJlbmV3ZC5jIGIvZnMvbmZzL25mczRyZW5ld2QuYwppbmRleCBlMjdjNmNlLi4wMTU2YzAxIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHJlbmV3ZC5jCisrKyBiL2ZzL25mcy9uZnM0cmVuZXdkLmMKQEAgLTEyNywxMiArMTI3LDYgQEAKIH0KIAogdm9pZAotbmZzNF9yZW5ld2RfcHJlcGFyZV9zaHV0ZG93bihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQotewotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnNlcnZlci0+bmZzX2NsaWVudC0+Y2xfcmVuZXdkKTsKLX0KLQotdm9pZAogbmZzNF9raWxsX3JlbmV3ZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQogewogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmY2xwLT5jbF9yZW5ld2QpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczR4ZHIuYyBiL2ZzL25mcy9uZnM0eGRyLmMKaW5kZXggODNhZDQ3Yy4uMjBiNGUzMCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczR4ZHIuYworKysgYi9mcy9uZnMvbmZzNHhkci5jCkBAIC01NjgxLDcgKzU2ODEsNiBAQAogCXsgTkZTNEVSUl9TRVJWRVJGQVVMVCwJLUVTRVJWRVJGQVVMVAl9LAogCXsgTkZTNEVSUl9CQURUWVBFLAktRUJBRFRZUEUJfSwKIAl7IE5GUzRFUlJfTE9DS0VELAktRUFHQUlOCQl9LAotCXsgTkZTNEVSUl9SRVNPVVJDRSwJLUVSRU1PVEVJTwl9LAogCXsgTkZTNEVSUl9TWU1MSU5LLAktRUxPT1AJCX0sCiAJeyBORlM0RVJSX09QX0lMTEVHQUwsCS1FT1BOT1RTVVBQCX0sCiAJeyBORlM0RVJSX0RFQURMT0NLLAktRURFQURMSwl9LApkaWZmIC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYwppbmRleCA4MTA3NzBmLi45MGJlNTUxIDEwMDY0NAotLS0gYS9mcy9uZnMvc3VwZXIuYworKysgYi9mcy9uZnMvc3VwZXIuYwpAQCAtNzI4LDIyICs3MjgsMjQgQEAKIAl1bmxvY2tfa2VybmVsKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEoaW50IGZsYWdzKQorc3RhdGljIHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKm5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YSh1bnNpZ25lZCBpbnQgdmVyc2lvbikKIHsKIAlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpkYXRhOwogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEpIHsKLQkJZGF0YS0+ZmxhZ3MJCT0gZmxhZ3M7CiAJCWRhdGEtPnJzaXplCQk9IE5GU19NQVhfRklMRV9JT19TSVpFOwogCQlkYXRhLT53c2l6ZQkJPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsKIAkJZGF0YS0+YWNyZWdtaW4JCT0gTkZTX0RFRl9BQ1JFR01JTjsKIAkJZGF0YS0+YWNyZWdtYXgJCT0gTkZTX0RFRl9BQ1JFR01BWDsKIAkJZGF0YS0+YWNkaXJtaW4JCT0gTkZTX0RFRl9BQ0RJUk1JTjsKIAkJZGF0YS0+YWNkaXJtYXgJCT0gTkZTX0RFRl9BQ0RJUk1BWDsKKwkJZGF0YS0+bW91bnRfc2VydmVyLnBvcnQJPSBORlNfVU5TUEVDX1BPUlQ7CiAJCWRhdGEtPm5mc19zZXJ2ZXIucG9ydAk9IE5GU19VTlNQRUNfUE9SVDsKKwkJZGF0YS0+bmZzX3NlcnZlci5wcm90b2NvbCA9IFhQUlRfVFJBTlNQT1JUX1RDUDsKIAkJZGF0YS0+YXV0aF9mbGF2b3JzWzBdCT0gUlBDX0FVVEhfVU5JWDsKIAkJZGF0YS0+YXV0aF9mbGF2b3JfbGVuCT0gMTsKKwkJZGF0YS0+dmVyc2lvbgkJPSB2ZXJzaW9uOwogCQlkYXRhLT5taW5vcnZlcnNpb24JPSAwOwogCX0KIAlyZXR1cm4gZGF0YTsKQEAgLTc3NiwxNSArNzc4LDEzIEBACiAgKiBTZWxlY3QgYmV0d2VlbiBhIGRlZmF1bHQgcG9ydCB2YWx1ZSBhbmQgYSB1c2VyLXNwZWNpZmllZCBwb3J0IHZhbHVlLgogICogSWYgYSB6ZXJvIHZhbHVlIGlzIHNldCwgdGhlbiBhdXRvYmluZCB3aWxsIGJlIHVzZWQuCiAgKi8KLXN0YXRpYyB2b2lkIG5mc19zZXRfZGVmYXVsdF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwLCBjb25zdCBpbnQgcGFyc2VkX3BvcnQsCitzdGF0aWMgdm9pZCBuZnNfc2V0X3BvcnQoc3RydWN0IHNvY2thZGRyICpzYXAsIGludCAqcG9ydCwKIAkJCQkgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVmYXVsdF9wb3J0KQogewotCXVuc2lnbmVkIHNob3J0IHBvcnQgPSBkZWZhdWx0X3BvcnQ7CisJaWYgKCpwb3J0ID09IE5GU19VTlNQRUNfUE9SVCkKKwkJKnBvcnQgPSBkZWZhdWx0X3BvcnQ7CiAKLQlpZiAocGFyc2VkX3BvcnQgIT0gTkZTX1VOU1BFQ19QT1JUKQotCQlwb3J0ID0gcGFyc2VkX3BvcnQ7Ci0KLQlycGNfc2V0X3BvcnQoc2FwLCBwb3J0KTsKKwlycGNfc2V0X3BvcnQoc2FwLCAqcG9ydCk7CiB9CiAKIC8qCkBAIC0xMjUzLDYgKzEyNTMsNyBAQAogCQkJZGVmYXVsdDoKIAkJCQlkZnByaW50ayhNT1VOVCwgIk5GUzogICB1bnJlY29nbml6ZWQgIgogCQkJCQkJInRyYW5zcG9ydCBwcm90b2NvbFxuIik7CisJCQkJa2ZyZWUoc3RyaW5nKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTQ3NSw3ICsxNDc2LDcgQEAKIAkJYXJncy0+bW91bnRfc2VydmVyLmFkZHJsZW4gPSBhcmdzLT5uZnNfc2VydmVyLmFkZHJsZW47CiAJfQogCXJlcXVlc3Quc2FsZW4gPSBhcmdzLT5tb3VudF9zZXJ2ZXIuYWRkcmxlbjsKLQluZnNfc2V0X2RlZmF1bHRfcG9ydChyZXF1ZXN0LnNhcCwgYXJncy0+bW91bnRfc2VydmVyLnBvcnQsIDApOworCW5mc19zZXRfcG9ydChyZXF1ZXN0LnNhcCwgJmFyZ3MtPm1vdW50X3NlcnZlci5wb3J0LCAwKTsKIAogCS8qCiAJICogTm93IGFzayB0aGUgbW91bnQgc2VydmVyIHRvIG1hcCBvdXIgZXhwb3J0IHBhdGgKQEAgLTE3NjUsNyArMTc2Niw3IEBACiAJCQlnb3RvIG91dF92NF9ub3RfY29tcGlsZWQ7CiAjZW5kaWYKIAotCQluZnNfc2V0X2RlZmF1bHRfcG9ydChzYXAsIGFyZ3MtPm5mc19zZXJ2ZXIucG9ydCwgMCk7CisJCW5mc19zZXRfcG9ydChzYXAsICZhcmdzLT5uZnNfc2VydmVyLnBvcnQsIDApOwogCiAJCW5mc19zZXRfbW91bnRfdHJhbnNwb3J0X3Byb3RvY29sKGFyZ3MpOwogCkBAIC0xODQ2LDkgKzE4NDcsMTAgQEAKIAkgICAgZGF0YS0+YWNkaXJtaW4gIT0gbmZzcy0+YWNkaXJtaW4gLyBIWiB8fAogCSAgICBkYXRhLT5hY2Rpcm1heCAhPSBuZnNzLT5hY2Rpcm1heCAvIEhaIHx8CiAJICAgIGRhdGEtPnRpbWVvICE9ICgxMFUgKiBuZnNzLT5jbGllbnQtPmNsX3RpbWVvdXQtPnRvX2luaXR2YWwgLyBIWikgfHwKKwkgICAgZGF0YS0+bmZzX3NlcnZlci5wb3J0ICE9IG5mc3MtPnBvcnQgfHwKIAkgICAgZGF0YS0+bmZzX3NlcnZlci5hZGRybGVuICE9IG5mc3MtPm5mc19jbGllbnQtPmNsX2FkZHJsZW4gfHwKLQkgICAgbWVtY21wKCZkYXRhLT5uZnNfc2VydmVyLmFkZHJlc3MsICZuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRyLAotCQkgICBkYXRhLT5uZnNfc2VydmVyLmFkZHJsZW4pICE9IDApCisJICAgICFycGNfY21wX2FkZHIoKHN0cnVjdCBzb2NrYWRkciAqKSZkYXRhLT5uZnNfc2VydmVyLmFkZHJlc3MsCisJCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIDA7CkBAIC0xODkxLDYgKzE4OTMsNyBAQAogCWRhdGEtPmFjZGlybWluID0gbmZzcy0+YWNkaXJtaW4gLyBIWjsKIAlkYXRhLT5hY2Rpcm1heCA9IG5mc3MtPmFjZGlybWF4IC8gSFo7CiAJZGF0YS0+dGltZW8gPSAxMFUgKiBuZnNzLT5jbGllbnQtPmNsX3RpbWVvdXQtPnRvX2luaXR2YWwgLyBIWjsKKwlkYXRhLT5uZnNfc2VydmVyLnBvcnQgPSBuZnNzLT5wb3J0OwogCWRhdGEtPm5mc19zZXJ2ZXIuYWRkcmxlbiA9IG5mc3MtPm5mc19jbGllbnQtPmNsX2FkZHJsZW47CiAJbWVtY3B5KCZkYXRhLT5uZnNfc2VydmVyLmFkZHJlc3MsICZuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRyLAogCQlkYXRhLT5uZnNfc2VydmVyLmFkZHJsZW4pOwpAQCAtMjEwNCw3ICsyMTA3LDcgQEAKIAl9OwogCWludCBlcnJvciA9IC1FTk9NRU07CiAKLQlkYXRhID0gbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKE5GU19NT1VOVF9WRVIzIHwgTkZTX01PVU5UX1RDUCk7CisJZGF0YSA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YSgzKTsKIAltbnRmaCA9IGt6YWxsb2Moc2l6ZW9mKCptbnRmaCksIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwgfHwgbW50ZmggPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZV9maDsKQEAgLTIzMjksNyArMjMzMiw3IEBACiB7CiAJc3RydWN0IHNvY2thZGRyICpzYXAgPSAoc3RydWN0IHNvY2thZGRyICopJmFyZ3MtPm5mc19zZXJ2ZXIuYWRkcmVzczsKIAotCW5mc19zZXRfZGVmYXVsdF9wb3J0KHNhcCwgYXJncy0+bmZzX3NlcnZlci5wb3J0LCBORlNfUE9SVCk7CisJbmZzX3NldF9wb3J0KHNhcCwgJmFyZ3MtPm5mc19zZXJ2ZXIucG9ydCwgTkZTX1BPUlQpOwogCiAJbmZzX3ZhbGlkYXRlX3RyYW5zcG9ydF9wcm90b2NvbChhcmdzKTsKIApAQCAtMjM3NCw3ICsyMzc3LDYgQEAKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIG91dF9ub19kYXRhOwogCi0JYXJncy0+dmVyc2lvbgkJPSA0OwogCXN3aXRjaCAoZGF0YS0+dmVyc2lvbikgewogCWNhc2UgMToKIAkJaWYgKGRhdGEtPmhvc3RfYWRkcmxlbiA+IHNpemVvZihhcmdzLT5uZnNfc2VydmVyLmFkZHJlc3MpKQpAQCAtMjY1OCw3ICsyNjYwLDcgQEAKIAlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpkYXRhOwogCWludCBlcnJvciA9IC1FTk9NRU07CiAKLQlkYXRhID0gbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKDApOworCWRhdGEgPSBuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEoNCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZV9kYXRhOwogCkBAIC0yNjg4LDcgKzI2OTAsNiBAQAogCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwogCW5mc19zdXBlcl9yZXR1cm5fYWxsX2RlbGVnYXRpb25zKHNiKTsKIAlraWxsX2Fub25fc3VwZXIoc2IpOwotCW5mczRfcmVuZXdkX3ByZXBhcmVfc2h1dGRvd24oc2VydmVyKTsKIAluZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZShzYik7CiAJbmZzX2ZyZWVfc2VydmVyKHNlcnZlcik7CiAJZHByaW50aygiPC0tICVzXG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczN4ZHIuYyBiL2ZzL25mc2QvbmZzM3hkci5jCmluZGV4IGVkZjkyNmUuLmQwYTJjZTEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzM3hkci5jCisrKyBiL2ZzL25mc2QvbmZzM3hkci5jCkBAIC05NTgsNyArOTU4LDcgQEAKIAkJcDEgPSBlbmNvZGVfZW50cnlfYmFnZ2FnZShjZCwgcDEsIG5hbWUsIG5hbWxlbiwgaW5vKTsKIAogCQlpZiAocGx1cykKLQkJCXAgPSBlbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2UoY2QsIHAxLCBuYW1lLCBuYW1sZW4pOworCQkJcDEgPSBlbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2UoY2QsIHAxLCBuYW1lLCBuYW1sZW4pOwogCiAJCS8qIGRldGVybWluZSBlbnRyeSB3b3JkIGxlbmd0aCBhbmQgbGVuZ3RocyB0byBnbyBpbiBwYWdlcyAqLwogCQludW1fZW50cnlfd29yZHMgPSBwMSAtIHRtcDsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzY3RsLmMgYi9mcy9uZnNkL25mc2N0bC5jCmluZGV4IDAwMzg4ZDIuLjVjMDFmYzEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzY3RsLmMKKysrIGIvZnMvbmZzZC9uZnNjdGwuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiBleHRlcm4gaW50IG5mc2RfcG9vbF9zdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIGV4dGVybiBpbnQgbmZzZF9wb29sX3N0YXRzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb29sX3N0YXRzX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb29sX3N0YXRzX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4JCT0gbmZzZF9wb29sX3N0YXRzX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRub2RlLmMgYi9mcy9uaWxmczIvYnRub2RlLmMKaW5kZXggNmEyNzExZi4uODRjMjUzOCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0bm9kZS5jCisrKyBiL2ZzL25pbGZzMi9idG5vZGUuYwpAQCAtMzYsNiArMzYsNyBAQAogCiB2b2lkIG5pbGZzX2J0bm9kZV9jYWNoZV9pbml0X29uY2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJ0bmMpCiB7CisJbWVtc2V0KGJ0bmMsIDAsIHNpemVvZigqYnRuYykpOwogCUlOSVRfUkFESVhfVFJFRSgmYnRuYy0+cGFnZV90cmVlLCBHRlBfQVRPTUlDKTsKIAlzcGluX2xvY2tfaW5pdCgmYnRuYy0+dHJlZV9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYnRuYy0+cHJpdmF0ZV9saXN0KTsKQEAgLTg2LDYgKzg3LDcgQEAKIAkJCWJyZWxzZShiaCk7CiAJCQlCVUcoKTsKIAkJfQorCQltZW1zZXQoYmgtPmJfZGF0YSwgMCwgMSA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIAkJYmgtPmJfYmRldiA9IE5JTEZTX0lfTklMRlMoaW5vZGUpLT5uc19iZGV2OwogCQliaC0+Yl9ibG9ja25yID0gYmxvY2tucjsKIAkJc2V0X2J1ZmZlcl9tYXBwZWQoYmgpOwpAQCAtMjc1LDggKzI3Nyw3IEBACiAJCQkJICAgICAgICJpbnZhbGlkIG9sZGtleSAlbGxkIChuZXdrZXk9JWxsZCkiLAogCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9sZGtleSwKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdrZXkpOwotCQlpZiAoIXRlc3Rfc2V0X2J1ZmZlcl9kaXJ0eShvYmgpICYmIFRlc3RTZXRQYWdlRGlydHkob3BhZ2UpKQotCQkJQlVHKCk7CisJCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KG9iaCk7CiAKIAkJc3Bpbl9sb2NrX2lycSgmYnRuYy0+dHJlZV9sb2NrKTsKIAkJcmFkaXhfdHJlZV9kZWxldGUoJmJ0bmMtPnBhZ2VfdHJlZSwgb2xka2V5KTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9jcGZpbGUuYyBiL2ZzL25pbGZzMi9jcGZpbGUuYwppbmRleCAxYzZjZmI1Li4zZjVkNWQwIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvY3BmaWxlLmMKKysrIGIvZnMvbmlsZnMyL2NwZmlsZS5jCkBAIC04NzEsNyArODcxLDYgQEAKIAkJICogZXhjbHVzaXZlIHdpdGggYSBuZXcgbW91bnQgam9iLiAgVGhvdWdoIGl0IGRvZXNuJ3QgY292ZXIKIAkJICogdW1vdW50LCBpdCdzIGVub3VnaCBmb3IgdGhlIHB1cnBvc2UuCiAJCSAqLwotCQltdXRleF9sb2NrKCZuaWxmcy0+bnNfbW91bnRfbXV0ZXgpOwogCQlpZiAobmlsZnNfY2hlY2twb2ludF9pc19tb3VudGVkKG5pbGZzLCBjbm8sIDEpKSB7CiAJCQkvKiBDdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGhhdmUgdG8gcHJvdGVjdAogCQkJICAgcGxhaW4gcmVhZC1vbmx5IG1vdW50cyBzaW5jZSB0aGV5IGFyZSBleGNsdXNpdmUKQEAgLTg4MCw3ICs4NzksNiBAQAogCQkJcmV0ID0gLUVCVVNZOwogCQl9IGVsc2UKIAkJCXJldCA9IG5pbGZzX2NwZmlsZV9jbGVhcl9zbmFwc2hvdChjcGZpbGUsIGNubyk7Ci0JCW11dGV4X3VubG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAkJcmV0dXJuIHJldDsKIAljYXNlIE5JTEZTX1NOQVBTSE9UOgogCQlyZXR1cm4gbmlsZnNfY3BmaWxlX3NldF9zbmFwc2hvdChjcGZpbGUsIGNubyk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZGlyLmMgYi9mcy9uaWxmczIvZGlyLmMKaW5kZXggMWE0ZmEwNC4uZTA5NzA5OSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2Rpci5jCisrKyBiL2ZzL25pbGZzMi9kaXIuYwpAQCAtNjk3LDcgKzY5Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZGlyX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zID0gewogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAogCS5yZWFkZGlyCT0gbmlsZnNfcmVhZGRpciwKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9maWxlLmMgYi9mcy9uaWxmczIvZmlsZS5jCmluZGV4IGZjODI3OGMuLjMwMjkyZGYgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9maWxlLmMKKysrIGIvZnMvbmlsZnMyL2ZpbGUuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuaWxmc19maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmlsZnNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IG5pbGZzX3BhZ2VfbWt3cml0ZSwKIH07CkBAIC0xMzQsNyArMTM0LDcgQEAKICAqIFdlIGhhdmUgbW9zdGx5IE5VTEwncyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgb2sgZm9yCiAgKiB0aGUgbmlsZnMgZmlsZXN5c3RlbS4KICAqLwotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lub2RlLmMgYi9mcy9uaWxmczIvaW5vZGUuYwppbmRleCAyZDJjNTAxLi4yYTBhNWEzIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvaW5vZGUuYworKysgYi9mcy9uaWxmczIvaW5vZGUuYwpAQCAtNDAwLDYgKzQwMCw3IEBACiAJaWktPmlfZGlyX2FjbCA9IFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgPwogCQkwIDogbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2Rpcl9hY2wpOwogI2VuZGlmCisJaWktPmlfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CiAJaWktPmlfY25vID0gMDsKIAlpbm9kZS0+aV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2dlbmVyYXRpb24pOwogCkBAIC02NjMsNyArNjY0LDYgQEAKIAlpbnQgZXJyOwogCiAJc3Bpbl9sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7Ci0JLyogQ2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gTVVTVCBsb2NrIHNfaW5vZGVfbG9jayAqLwogCWlmIChpaS0+aV9iaCA9PSBOVUxMKSB7CiAJCXNwaW5fdW5sb2NrKCZzYmktPnNfaW5vZGVfbG9jayk7CiAJCWVyciA9IG5pbGZzX2lmaWxlX2dldF9pbm9kZV9ibG9jayhzYmktPnNfaWZpbGUsIGlub2RlLT5pX2lubywKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pb2N0bC5jIGIvZnMvbmlsZnMyL2lvY3RsLmMKaW5kZXggNjU3MmVhNC4uZjZhZjc2MCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lvY3RsLmMKKysrIGIvZnMvbmlsZnMyL2lvY3RsLmMKQEAgLTk5LDcgKzk5LDggQEAKIHN0YXRpYyBpbnQgbmlsZnNfaW9jdGxfY2hhbmdlX2NwbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmdwKQogewotCXN0cnVjdCBpbm9kZSAqY3BmaWxlID0gTklMRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25pbGZzLT5uc19jcGZpbGU7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBOSUxGU19TQihpbm9kZS0+aV9zYiktPnNfbmlsZnM7CisJc3RydWN0IGlub2RlICpjcGZpbGUgPSBuaWxmcy0+bnNfY3BmaWxlOwogCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpOwogCXN0cnVjdCBuaWxmc19jcG1vZGUgY3Btb2RlOwogCWludCByZXQ7CkBAIC0xMDksMTQgKzExMCwxNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmY3Btb2RlLCBhcmdwLCBzaXplb2YoY3Btb2RlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJbXV0ZXhfbG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAluaWxmc190cmFuc2FjdGlvbl9iZWdpbihpbm9kZS0+aV9zYiwgJnRpLCAwKTsKIAlyZXQgPSBuaWxmc19jcGZpbGVfY2hhbmdlX2NwbW9kZSgKIAkJY3BmaWxlLCBjcG1vZGUuY21fY25vLCBjcG1vZGUuY21fbW9kZSk7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CiAJCW5pbGZzX3RyYW5zYWN0aW9uX2Fib3J0KGlub2RlLT5pX3NiKTsKKwkJbXV0ZXhfdW5sb2NrKCZuaWxmcy0+bnNfbW91bnRfbXV0ZXgpOwogCQlyZXR1cm4gcmV0OwogCX0KIAluaWxmc190cmFuc2FjdGlvbl9jb21taXQoaW5vZGUtPmlfc2IpOyAvKiBuZXZlciBmYWlscyAqLworCW11dGV4X3VubG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yOTcsNyArMzAxLDE4IEBACiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfdmJsb2NrbnIpOwogCQlyZXR1cm4gcmV0OwogCX0KLQliaC0+Yl9wcml2YXRlID0gdmRlc2M7CisJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZiaC0+Yl9hc3NvY19idWZmZXJzKSkpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGNvbmZsaWN0aW5nICVzIGJ1ZmZlcjogaW5vPSVsbHUsICIKKwkJICAgICAgICJjbm89JWxsdSwgb2Zmc2V0PSVsbHUsIGJsb2NrbnI9JWxsdSwgdmJsb2NrbnI9JWxsdVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB2ZGVzYy0+dmRfZmxhZ3MgPyAibm9kZSIgOiAiZGF0YSIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9pbm8sCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9jbm8sCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9vZmZzZXQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9ibG9ja25yLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfdmJsb2NrbnIpOworCQlicmVsc2UoYmgpOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CiAJbGlzdF9hZGRfdGFpbCgmYmgtPmJfYXNzb2NfYnVmZmVycywgYnVmZmVycyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMzUsMjQgKzM1MCwxMCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaCwgbiwgJmJ1ZmZlcnMsIGJfYXNzb2NfYnVmZmVycykgewogCQlyZXQgPSBuaWxmc19nY2NhY2hlX3dhaXRfYW5kX21hcmtfZGlydHkoYmgpOwogCQlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKLQkJCWlmIChyZXQgPT0gLUVFWElTVCkgewotCQkJCXZkZXNjID0gYmgtPmJfcHJpdmF0ZTsKLQkJCQlwcmludGsoS0VSTl9DUklUCi0JCQkJICAgICAgICIlczogY29uZmxpY3RpbmcgJXMgYnVmZmVyOiAiCi0JCQkJICAgICAgICJpbm89JWxsdSwgY25vPSVsbHUsIG9mZnNldD0lbGx1LCAiCi0JCQkJICAgICAgICJibG9ja25yPSVsbHUsIHZibG9ja25yPSVsbHVcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fLAotCQkJCSAgICAgICB2ZGVzYy0+dmRfZmxhZ3MgPyAibm9kZSIgOiAiZGF0YSIsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX2lubywKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfY25vLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9vZmZzZXQsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX2Jsb2NrbnIsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX3ZibG9ja25yKTsKLQkJCX0KKwkJCVdBUk5fT04ocmV0ID09IC1FRVhJU1QpOwogCQkJZ290byBmYWlsZWQ7CiAJCX0KIAkJbGlzdF9kZWxfaW5pdCgmYmgtPmJfYXNzb2NfYnVmZmVycyk7Ci0JCWJoLT5iX3ByaXZhdGUgPSBOVUxMOwogCQlicmVsc2UoYmgpOwogCX0KIAlyZXR1cm4gbm1lbWJzOwpAQCAtMzYwLDcgKzM2MSw2IEBACiAgZmFpbGVkOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaCwgbiwgJmJ1ZmZlcnMsIGJfYXNzb2NfYnVmZmVycykgewogCQlsaXN0X2RlbF9pbml0KCZiaC0+Yl9hc3NvY19idWZmZXJzKTsKLQkJYmgtPmJfcHJpdmF0ZSA9IE5VTEw7CiAJCWJyZWxzZShiaCk7CiAJfQogCXJldHVybiByZXQ7CkBAIC00NzEsNyArNDcxLDYgQEAKIAlyZXR1cm4gMDsKIAogIGZhaWxlZDoKLQluaWxmc19yZW1vdmVfYWxsX2djaW5vZGUobmlsZnMpOwogCXByaW50ayhLRVJOX0VSUiAiTklMRlM6IEdDIGZhaWxlZCBkdXJpbmcgcHJlcGFyYXRpb246ICVzOiBlcnI9JWRcbiIsCiAJICAgICAgIG1zZywgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtNTYwLDYgKzU1OSw4IEBACiAJZWxzZQogCQlyZXQgPSBuaWxmc19jbGVhbl9zZWdtZW50cyhpbm9kZS0+aV9zYiwgYXJndiwga2J1ZnMpOwogCisJaWYgKHJldCA8IDApCisJCW5pbGZzX3JlbW92ZV9hbGxfZ2Npbm9kZShuaWxmcyk7CiAJY2xlYXJfbmlsZnNfZ2NfcnVubmluZyhuaWxmcyk7CiAKICBvdXRfZnJlZToKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9tZHQuYyBiL2ZzL25pbGZzMi9tZHQuYwppbmRleCBiMThjNDk5Li5mNjMyNjExIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbWR0LmMKKysrIGIvZnMvbmlsZnMyL21kdC5jCkBAIC00MzMsNyArNDMzLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBkZWZfbWR0X2lvcHM7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfbWR0X2ZvcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfbWR0X2ZvcHM7CiAKIC8qCiAgKiBOSUxGUzIgdXNlcyBwc2V1ZG8gaW5vZGVzIGZvciBtZXRhIGRhdGEgZmlsZXMgc3VjaCBhcyBEQVQsIGNwZmlsZSwgc3VmaWxlLApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL25pbGZzLmggYi9mcy9uaWxmczIvbmlsZnMuaAppbmRleCBiYWQ3MzY4Li40ZGE2ZjY3IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbmlsZnMuaAorKysgYi9mcy9uaWxmczIvbmlsZnMuaApAQCAtMjk0LDkgKzI5NCw5IEBACiAvKgogICogSW5vZGVzIGFuZCBmaWxlcyBvcGVyYXRpb25zCiAgKi8KLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZGlyX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZmlsZV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbmlsZnNfYW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5jIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwppbmRleCA2ODNkZjg5Li42ZWZmNjZhIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5jCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKQEAgLTI0NjgsMTcgKzI0NjgsMjIgQEAKIAkvKiBDbGVhciByZXF1ZXN0cyAoZXZlbiB3aGVuIHRoZSBjb25zdHJ1Y3Rpb24gZmFpbGVkKSAqLwogCXNwaW5fbG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIAotCXNjaS0+c2Nfc3RhdGUgJj0gfk5JTEZTX1NFR0NUT1JfQ09NTUlUOwotCiAJaWYgKHJlcS0+bW9kZSA9PSBTQ19MU0VHX1NSKSB7CisJCXNjaS0+c2Nfc3RhdGUgJj0gfk5JTEZTX1NFR0NUT1JfQ09NTUlUOwogCQlzY2ktPnNjX3NlcV9kb25lID0gcmVxLT5zZXFfYWNjZXB0ZWQ7CiAJCW5pbGZzX3NlZ2N0b3Jfd2FrZXVwKHNjaSwgcmVxLT5zY19lcnIgPyA6IHJlcS0+c2JfZXJyKTsKIAkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ID0gMDsKLQl9IGVsc2UgaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9GSUxFKQotCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0ZJTEVfQklUOwotCWVsc2UgaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9EQVQpCi0JCXNjaS0+c2NfZmx1c2hfcmVxdWVzdCAmPSB+RkxVU0hfREFUX0JJVDsKKwl9IGVsc2UgeworCQlpZiAocmVxLT5tb2RlID09IFNDX0ZMVVNIX0ZJTEUpCisJCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0ZJTEVfQklUOworCQllbHNlIGlmIChyZXEtPm1vZGUgPT0gU0NfRkxVU0hfREFUKQorCQkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ICY9IH5GTFVTSF9EQVRfQklUOwogCisJCS8qIHJlLWVuYWJsZSB0aW1lciBpZiBjaGVja3BvaW50IGNyZWF0aW9uIHdhcyBub3QgZG9uZSAqLworCQlpZiAoc2NpLT5zY190aW1lciAmJiAoc2NpLT5zY19zdGF0ZSAmIE5JTEZTX1NFR0NUT1JfQ09NTUlUKSAmJgorCQkgICAgdGltZV9iZWZvcmUoamlmZmllcywgc2NpLT5zY190aW1lci0+ZXhwaXJlcykpCisJCQlhZGRfdGltZXIoc2NpLT5zY190aW1lcik7CisJfQogCXNwaW5fdW5sb2NrKCZzY2ktPnNjX3N0YXRlX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9mcy9ubHMvbmxzX2Jhc2UuYyBiL2ZzL25scy9ubHNfYmFzZS5jCmluZGV4IDIyMjRiNGQuLjQ0YTg4YTkgMTAwNjQ0Ci0tLSBhL2ZzL25scy9ubHNfYmFzZS5jCisrKyBiL2ZzL25scy9ubHNfYmFzZS5jCkBAIC0xMjQsMTAgKzEyNCwxMCBAQAogCXdoaWxlICgqcyAmJiBsZW4gPiAwKSB7CiAJCWlmICgqcyAmIDB4ODApIHsKIAkJCXNpemUgPSB1dGY4X3RvX3V0ZjMyKHMsIGxlbiwgJnUpOwotCQkJaWYgKHNpemUgPCAwKSB7Ci0JCQkJLyogSWdub3JlIGNoYXJhY3RlciBhbmQgbW92ZSBvbiAqLwotCQkJCXNpemUgPSAxOwotCQkJfSBlbHNlIGlmICh1ID49IFBMQU5FX1NJWkUpIHsKKwkJCWlmIChzaXplIDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKHUgPj0gUExBTkVfU0laRSkgewogCQkJCXUgLT0gUExBTkVfU0laRTsKIAkJCQkqb3ArKyA9ICh3Y2hhcl90KSAoU1VSUk9HQVRFX1BBSVIgfAogCQkJCQkJKCh1ID4+IDEwKSAmIFNVUlJPR0FURV9CSVRTKSk7CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMgYi9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMKaW5kZXggODI4YTg4OS4uN2U1NGU1MiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jCisrKyBiL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYwpAQCAtOTEsNiArOTEsNyBAQAogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqZG47CiAJc3RydWN0IGRub3RpZnlfc3RydWN0ICoqcHJldjsKIAlzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd247CisJX191MzIgdGVzdF9tYXNrID0gZXZlbnQtPm1hc2sgJiB+RlNfRVZFTlRfT05fQ0hJTEQ7CiAKIAl0b190ZWxsID0gZXZlbnQtPnRvX3RlbGw7CiAKQEAgLTEwNiw3ICsxMDcsNyBAQAogCXNwaW5fbG9jaygmZW50cnktPmxvY2spOwogCXByZXYgPSAmZG5lbnRyeS0+ZG47CiAJd2hpbGUgKChkbiA9ICpwcmV2KSAhPSBOVUxMKSB7Ci0JCWlmICgoZG4tPmRuX21hc2sgJiBldmVudC0+bWFzaykgPT0gMCkgeworCQlpZiAoKGRuLT5kbl9tYXNrICYgdGVzdF9tYXNrKSA9PSAwKSB7CiAJCQlwcmV2ID0gJmRuLT5kbl9uZXh0OwogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMgYi9mcy9ub3RpZnkvaW5vZGVfbWFyay5jCmluZGV4IGM4YTA3YzYuLjMxNjVkODUgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMKKysrIGIvZnMvbm90aWZ5L2lub2RlX21hcmsuYwpAQCAtMzI0LDExICszMjQsMTEgQEAKIAlzcGluX2xvY2soJmdyb3VwLT5tYXJrX2xvY2spOwogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAKLQllbnRyeS0+Z3JvdXAgPSBncm91cDsKLQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKLQogCWxlbnRyeSA9IGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeShncm91cCwgaW5vZGUpOwogCWlmICghbGVudHJ5KSB7CisJCWVudHJ5LT5ncm91cCA9IGdyb3VwOworCQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKKwogCQlobGlzdF9hZGRfaGVhZCgmZW50cnktPmlfbGlzdCwgJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtfZW50cmllcyk7CiAJCWxpc3RfYWRkKCZlbnRyeS0+Z19saXN0LCAmZ3JvdXAtPm1hcmtfZW50cmllcyk7CiAKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYyBiL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYwppbmRleCAzODE2ZDU3Li5iOGJmNTNiIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMKKysrIGIvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJCS8qIHJlbWVtYmVyLCBhZnRlciBvbGQgd2FzIHB1dCBvbiB0aGUgd2FpdF9xIHdlIGFyZW4ndAogCQkJICogYWxsb3dlZCB0byBsb29rIGF0IHRoZSBpbm9kZSBhbnkgbW9yZSwgb25seSB0aGluZwogCQkJICogbGVmdCB0byBjaGVjayB3YXMgaWYgdGhlIGZpbGVfbmFtZSBpcyB0aGUgc2FtZSAqLwotCQkJaWYgKG9sZC0+bmFtZV9sZW4gJiYKKwkJCWlmICghb2xkLT5uYW1lX2xlbiB8fAogCQkJICAgICFzdHJjbXAob2xkLT5maWxlX25hbWUsIG5ldy0+ZmlsZV9uYW1lKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggMDljYzI1ZC4uYzQ1MmQxMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC05NjYsNyArOTY2LDcgQEAKIH0KICNlbmRpZiAgLyogQ09ORklHX0RFQlVHX0ZTICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG8yaGJfZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG8yaGJfZGVidWdfZm9wcyA9IHsKIAkub3BlbiA9CQlvMmhiX2RlYnVnX29wZW4sCiAJLnJlbGVhc2UgPQlvMmhiX2RlYnVnX3JlbGVhc2UsCiAJLnJlYWQgPQkJbzJoYl9kZWJ1Z19yZWFkLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jIGIvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jCmluZGV4IGNmYjJiZTcuLmRhNzk0YmMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbmV0ZGVidWcuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnN0X3NlcV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnN0X3NlcV9mb3BzID0gewogCS5vcGVuID0gbnN0X2ZvcF9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTM4OCw3ICszODgsNyBAQAogCXJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2Nfc2VxX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY19zZXFfZm9wcyA9IHsKIAkub3BlbiA9IHNjX2ZvcF9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKaW5kZXggY2E0NjAwMi4uNDJiMGJhZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19wdXJnZWxpc3RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX3B1cmdlbGlzdF9mb3BzID0gewogCS5vcGVuID0JCWRlYnVnX3B1cmdlbGlzdF9vcGVuLAogCS5yZWxlYXNlID0JZGVidWdfYnVmZmVyX3JlbGVhc2UsCiAJLnJlYWQgPQkJZGVidWdfYnVmZmVyX3JlYWQsCkBAIC01MzgsNyArNTM4LDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfbWxlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19tbGVfZm9wcyA9IHsKIAkub3BlbiA9CQlkZWJ1Z19tbGVfb3BlbiwKIAkucmVsZWFzZSA9CWRlYnVnX2J1ZmZlcl9yZWxlYXNlLAogCS5yZWFkID0JCWRlYnVnX2J1ZmZlcl9yZWFkLApAQCAtNzQxLDcgKzc0MSw3IEBACiAJcmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19sb2NrcmVzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19sb2NrcmVzX2ZvcHMgPSB7CiAJLm9wZW4gPQkJZGVidWdfbG9ja3Jlc19vcGVuLAogCS5yZWxlYXNlID0JZGVidWdfbG9ja3Jlc19yZWxlYXNlLAogCS5yZWFkID0JCXNlcV9yZWFkLApAQCAtOTI1LDcgKzkyNSw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX3N0YXRlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19zdGF0ZV9mb3BzID0gewogCS5vcGVuID0JCWRlYnVnX3N0YXRlX29wZW4sCiAJLnJlbGVhc2UgPQlkZWJ1Z19idWZmZXJfcmVsZWFzZSwKIAkucmVhZCA9CQlkZWJ1Z19idWZmZXJfcmVhZCwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL21tYXAuYyBiL2ZzL29jZnMyL21tYXAuYwppbmRleCBiNjA2NDk2Li4zOTczNzYxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9tbWFwLmMKKysrIGIvZnMvb2NmczIvbW1hcC5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG9jZnMyX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBvY2ZzMl9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gb2NmczJfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IG9jZnMyX3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCA0Y2MzYzg5Li5jMGU0OGFlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTM3Myw3ICszNzMsNyBAQAogfQogI2VuZGlmCS8qIENPTkZJR19ERUJVR19GUyAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9vc2JfZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX29zYl9kZWJ1Z19mb3BzID0gewogCS5vcGVuID0JCW9jZnMyX29zYl9kZWJ1Z19vcGVuLAogCS5yZWxlYXNlID0Jb2NmczJfZGVidWdfcmVsZWFzZSwKIAkucmVhZCA9CQlvY2ZzMl9kZWJ1Z19yZWFkLApkaWZmIC0tZ2l0IGEvZnMvb21mcy9kaXIuYyBiL2ZzL29tZnMvZGlyLmMKaW5kZXggMzY4MGJhZS4uYjQyZDYyNCAxMDA2NDQKLS0tIGEvZnMvb21mcy9kaXIuYworKysgYi9mcy9vbWZzL2Rpci5jCkBAIC00OTgsNyArNDk4LDcgQEAKIAkucm1kaXIgPSBvbWZzX3JtZGlyLAogfTsKIAotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9vcGVyYXRpb25zID0gewogCS5yZWFkID0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpciA9IG9tZnNfcmVhZGRpciwKIAkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKZGlmZiAtLWdpdCBhL2ZzL29tZnMvZmlsZS5jIGIvZnMvb21mcy9maWxlLmMKaW5kZXggNDg0NWZiYi4uMzk5NDg3YyAxMDA2NDQKLS0tIGEvZnMvb21mcy9maWxlLmMKKysrIGIvZnMvb21mcy9maWxlLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZywgYmxvY2ssIG9tZnNfZ2V0X2Jsb2NrKTsKIH0KIAotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQgPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlID0gZG9fc3luY193cml0ZSwKZGlmZiAtLWdpdCBhL2ZzL29tZnMvb21mcy5oIGIvZnMvb21mcy9vbWZzLmgKaW5kZXggZGY3MTAzOS4uZWJlMmZkYiAxMDA2NDQKLS0tIGEvZnMvb21mcy9vbWZzLmgKKysrIGIvZnMvb21mcy9vbWZzLmgKQEAgLTQ0LDE0ICs0NCwxNCBAQAogZXh0ZXJuIGludCBvbWZzX2NsZWFyX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBibG9jaywgaW50IGNvdW50KTsKIAogLyogZGlyLmMgKi8KLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZGlyX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9tZnNfZGlyX2lub3BzOwogZXh0ZXJuIGludCBvbWZzX21ha2VfZW1wdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gaW50IG9tZnNfaXNfYmFkKHN0cnVjdCBvbWZzX3NiX2luZm8gKnNiaSwgc3RydWN0IG9tZnNfaGVhZGVyICpoZWFkZXIsCiAJCQl1NjQgZnNibG9jayk7CiAKIC8qIGZpbGUuYyAqLwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfaW5vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBvbWZzX2FvcHM7CiBleHRlcm4gdm9pZCBvbWZzX21ha2VfZW1wdHlfdGFibGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IG9mZnNldCk7CmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggNTJjNDE1MS4uYWUxN2QwMiAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtNzc3LDM2ICs3NzcsNTUgQEAKIHN0YXRpYyBpbnQKIHBpcGVfcmVhZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCS8qIFdlIGNvdWxkIGhhdmUgcGVyaGFwcyB1c2VkIGF0b21pY190LCBidXQgdGhpcyBhbmQgZnJpZW5kcwotCSAgIGJlbG93IGFyZSB0aGUgb25seSBwbGFjZXMuICBTbyBpdCBkb2Vzbid0IHNlZW0gd29ydGh3aGlsZS4gICovCisJaW50IHJldCA9IC1FTk9FTlQ7CisKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOworCisJaWYgKGlub2RlLT5pX3BpcGUpIHsKKwkJcmV0ID0gMDsKKwkJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOworCX0KKwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAogcGlwZV93cml0ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogeworCWludCByZXQgPSAtRU5PRU5UOworCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKworCWlmIChpbm9kZS0+aV9waXBlKSB7CisJCXJldCA9IDA7CisJCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKwl9CisKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKIHBpcGVfcmR3cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogeworCWludCByZXQgPSAtRU5PRU5UOworCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7Ci0JaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisKKwlpZiAoaW5vZGUtPmlfcGlwZSkgeworCQlyZXQgPSAwOworCQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkKKwkJCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKKwkJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQkJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCX0KKwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCAwYzZiYzYwLi44MjJjMmQ1IDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC0zMjIsNiArMzIyLDggQEAKIAkJCXAtPm5pdmNzdyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTU1VCisKIHN0cnVjdCBzdGFja19zdGF0cyB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZwlzdGFydHBhZ2U7CkBAIC00MDIsNiArNDA0LDExIEBACiAJCW1tcHV0KG1tKTsKIAl9CiB9CisjZWxzZQorc3RhdGljIHZvaWQgdGFza19zaG93X3N0YWNrX3VzYWdlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworfQorI2VuZGlmCQkvKiBDT05GSUdfTU1VICovCiAKIGludCBwcm9jX3BpZF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsCiAJCQlzdHJ1Y3QgcGlkICpwaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKQEAgLTU2NCw3ICs1NzEsNyBAQAogCQlyc3NsaW0sCiAJCW1tID8gbW0tPnN0YXJ0X2NvZGUgOiAwLAogCQltbSA/IG1tLT5lbmRfY29kZSA6IDAsCi0JCShwZXJtaXR0ZWQpID8gdGFzay0+c3RhY2tfc3RhcnQgOiAwLAorCQkocGVybWl0dGVkICYmIG1tKSA/IHRhc2stPnN0YWNrX3N0YXJ0IDogMCwKIAkJZXNwLAogCQllaXAsCiAJCS8qIFRoZSBzaWduYWwgaW5mb3JtYXRpb24gaGVyZSBpcyBvYnNvbGV0ZS4KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggODM3NDY5YS4uYWY2NDNiNSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTI1OTcsOCArMjU5Nyw3IEBACiAJbmFtZS5sZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBwaWQpOwogCWRlbnRyeSA9IGRfaGFzaF9hbmRfbG9va3VwKG1udC0+bW50X3Jvb3QsICZuYW1lKTsKIAlpZiAoZGVudHJ5KSB7Ci0JCWlmICghKGN1cnJlbnQtPmZsYWdzICYgUEZfRVhJVElORykpCi0JCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOworCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOwogCQlkX2Ryb3AoZGVudHJ5KTsKIAkJZHB1dChkZW50cnkpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Byb2Mva2NvcmUuYyBiL2ZzL3Byb2Mva2NvcmUuYwppbmRleCA1NjAxMzM3Li5hNDRhNzg5IDEwMDY0NAotLS0gYS9mcy9wcm9jL2tjb3JlLmMKKysrIGIvZnMvcHJvYy9rY29yZS5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvbWVtaW5mby5jIGIvZnMvcHJvYy9tZW1pbmZvLmMKaW5kZXggYzdiZmY0Zi4uYTY1MjM5YyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9tZW1pbmZvLmMKKysrIGIvZnMvcHJvYy9tZW1pbmZvLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJIlZtYWxsb2NVc2VkOiAgICAlOGx1IGtCXG4iCiAJCSJWbWFsbG9jQ2h1bms6ICAgJThsdSBrQlxuIgogI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRQotCQkiSGFyZHdhcmVDb3JydXB0ZWQ6ICU4bHUga0JcbiIKKwkJIkhhcmR3YXJlQ29ycnVwdGVkOiAlNWx1IGtCXG4iCiAjZW5kaWYKIAkJLAogCQlLKGkudG90YWxyYW0pLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wYWdlLmMgYi9mcy9wcm9jL3BhZ2UuYwppbmRleCAyMjgxYzJjLi41MDMzY2UwIDEwMDY0NAotLS0gYS9mcy9wcm9jL3BhZ2UuYworKysgYi9mcy9wcm9jL3BhZ2UuYwpAQCAtOTQsNiArOTQsNyBAQAogI2RlZmluZSBLUEZfQ09NUE9VTkRfVEFJTAkxNgogI2RlZmluZSBLUEZfSFVHRQkJMTcKICNkZWZpbmUgS1BGX1VORVZJQ1RBQkxFCQkxOAorI2RlZmluZSBLUEZfSFdQT0lTT04JCTE5CiAjZGVmaW5lIEtQRl9OT1BBR0UJCTIwCiAKICNkZWZpbmUgS1BGX0tTTQkJCTIxCkBAIC0xODAsNiArMTgxLDEwIEBACiAJdSB8PSBrcGZfY29weV9iaXQoaywgS1BGX1VORVZJQ1RBQkxFLAlQR191bmV2aWN0YWJsZSk7CiAJdSB8PSBrcGZfY29weV9iaXQoaywgS1BGX01MT0NLRUQsCVBHX21sb2NrZWQpOwogCisjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCisJdSB8PSBrcGZfY29weV9iaXQoaywgS1BGX0hXUE9JU09OLAlQR19od3BvaXNvbik7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19JQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUgogCXUgfD0ga3BmX2NvcHlfYml0KGssIEtQRl9VTkNBQ0hFRCwJUEdfdW5jYWNoZWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9yb21mcy9zdG9yYWdlLmMgYi9mcy9yb21mcy9zdG9yYWdlLmMKaW5kZXggYjMyMDhhZC4uNzFlMmI0ZCAxMDA2NDQKLS0tIGEvZnMvcm9tZnMvc3RvcmFnZS5jCisrKyBiL2ZzL3JvbWZzL3N0b3JhZ2UuYwpAQCAtMjUzLDExICsyNTMsMTEgQEAKIAogI2lmZGVmIENPTkZJR19ST01GU19PTl9NVEQKIAlpZiAoc2ItPnNfbXRkKQotCQlyZXR1cm4gcm9tZnNfbXRkX3N0cm5sZW4oc2IsIHBvcywgbGltaXQpOworCQlyZXR1cm4gcm9tZnNfbXRkX3N0cm5sZW4oc2IsIHBvcywgbWF4bGVuKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19ST01GU19PTl9CTE9DSwogCWlmIChzYi0+c19iZGV2KQotCQlyZXR1cm4gcm9tZnNfYmxrX3N0cm5sZW4oc2IsIHBvcywgbGltaXQpOworCQlyZXR1cm4gcm9tZnNfYmxrX3N0cm5sZW4oc2IsIHBvcywgbWF4bGVuKTsKICNlbmRpZgogCXJldHVybiAtRUlPOwogfQpkaWZmIC0tZ2l0IGEvZnMvc2VsZWN0LmMgYi9mcy9zZWxlY3QuYwppbmRleCBhMjAxZmMzLi5mZDM4Y2UyIDEwMDY0NAotLS0gYS9mcy9zZWxlY3QuYworKysgYi9mcy9zZWxlY3QuYwpAQCAtMTUsNiArMTUsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvYmluLmMgYi9mcy9zeXNmcy9iaW4uYwppbmRleCAyNTI0NzE0Li42MGM3MDJiIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9iaW4uYworKysgYi9mcy9zeXNmcy9iaW4uYwpAQCAtNDAsNyArNDAsNyBAQAogCXN0cnVjdCBtdXRleAkJCW11dGV4OwogCXZvaWQJCQkJKmJ1ZmZlcjsKIAlpbnQJCQkJbW1hcHBlZDsKLQlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgCSp2bV9vcHM7CisJY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7CiAJc3RydWN0IGZpbGUJCQkqZmlsZTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQkJbGlzdDsKIH07CkBAIC0zMzEsNyArMzMxLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJpbl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJpbl92bV9vcHMgPSB7CiAJLm9wZW4JCT0gYmluX3ZtYV9vcGVuLAogCS5jbG9zZQkJPSBiaW5fdm1hX2Nsb3NlLAogCS5mYXVsdAkJPSBiaW5fZmF1bHQsCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IDAwNTBmYzQuLmUwMjAxODMgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSAic3lzZnMuaCIKIAogREVGSU5FX01VVEVYKHN5c2ZzX211dGV4KTsKQEAgLTI4NSw2ICsyODYsOSBAQAogCQlzeXNmc19wdXQoc2QtPnNfc3ltbGluay50YXJnZXRfc2QpOwogCWlmIChzeXNmc190eXBlKHNkKSAmIFNZU0ZTX0NPUFlfTkFNRSkKIAkJa2ZyZWUoc2QtPnNfbmFtZSk7CisJaWYgKHNkLT5zX2lhdHRyICYmIHNkLT5zX2lhdHRyLT5pYV9zZWNkYXRhKQorCQlzZWN1cml0eV9yZWxlYXNlX3NlY2N0eChzZC0+c19pYXR0ci0+aWFfc2VjZGF0YSwKKwkJCQkJc2QtPnNfaWF0dHItPmlhX3NlY2RhdGFfbGVuKTsKIAlrZnJlZShzZC0+c19pYXR0cik7CiAJc3lzZnNfZnJlZV9pbm8oc2QtPnNfaW5vKTsKIAlrbWVtX2NhY2hlX2ZyZWUoc3lzZnNfZGlyX2NhY2hlcCwgc2QpOwpAQCAtODk0LDcgKzg5OCw4IEBACiAKIAltdXRleF9sb2NrKCZzeXNmc19yZW5hbWVfbXV0ZXgpOwogCUJVR19PTighc2QtPnNfcGFyZW50KTsKLQluZXdfcGFyZW50X3NkID0gbmV3X3BhcmVudF9rb2JqLT5zZCA/IG5ld19wYXJlbnRfa29iai0+c2QgOiAmc3lzZnNfcm9vdDsKKwluZXdfcGFyZW50X3NkID0gKG5ld19wYXJlbnRfa29iaiAmJiBuZXdfcGFyZW50X2tvYmotPnNkKSA/CisJCW5ld19wYXJlbnRfa29iai0+c2QgOiAmc3lzZnNfcm9vdDsKIAogCWVycm9yID0gMDsKIAlpZiAoc2QtPnNfcGFyZW50ID09IG5ld19wYXJlbnRfc2QpCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9maWxlLmMgYi9mcy9zeXNmcy9maWxlLmMKaW5kZXggNTYxYTljMC4uZjVlYTQ2OCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZCwgKm5ld19vZCA9IE5VTEw7CiAKICByZXRyeToKLQlzcGluX2xvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fbG9ja19pcnEoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOwogCiAJaWYgKCFzZC0+c19hdHRyLm9wZW4gJiYgbmV3X29kKSB7CiAJCXNkLT5zX2F0dHIub3BlbiA9IG5ld19vZDsKQEAgLTI4MSw3ICsyODEsNyBAQAogCQlsaXN0X2FkZF90YWlsKCZidWZmZXItPmxpc3QsICZvZC0+YnVmZmVycyk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CiAKIAlpZiAob2QpIHsKIAkJa2ZyZWUobmV3X29kKTsKQEAgLTMxNSw4ICszMTUsOSBAQAogCQkJCSAgc3RydWN0IHN5c2ZzX2J1ZmZlciAqYnVmZmVyKQogewogCXN0cnVjdCBzeXNmc19vcGVuX2RpcmVudCAqb2QgPSBzZC0+c19hdHRyLm9wZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2ssIGZsYWdzKTsKIAogCWxpc3RfZGVsKCZidWZmZXItPmxpc3QpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZvZC0+cmVmY250KSkKQEAgLTMyNCw3ICszMjUsNyBAQAogCWVsc2UKIAkJb2QgPSBOVUxMOwogCi0Jc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2ssIGZsYWdzKTsKIAogCWtmcmVlKG9kKTsKIH0KQEAgLTQ1Niw4ICs0NTcsOSBAQAogdm9pZCBzeXNmc19ub3RpZnlfZGlyZW50KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQogewogCXN0cnVjdCBzeXNmc19vcGVuX2RpcmVudCAqb2Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2ssIGZsYWdzKTsKIAogCW9kID0gc2QtPnNfYXR0ci5vcGVuOwogCWlmIChvZCkgewpAQCAtNDY1LDcgKzQ2Nyw3IEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmb2QtPnBvbGwpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19ub3RpZnlfZGlyZW50KTsKIApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZmlsZS5jIGIvZnMvdWJpZnMvZmlsZS5jCmluZGV4IDJlNjQ4MWEuLjEwMDlhZGMgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2ZpbGUuYworKysgYi9mcy91Ymlmcy9maWxlLmMKQEAgLTE1MzQsNyArMTUzNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1Ymlmc19maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWJpZnNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0ICAgICAgICA9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZSA9IHViaWZzX3ZtX3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggMzgxODU0NC4uYzJlMzBlZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtMTg2LDE5ICsxODYsMzcgQEAKIH0KIAogLyoKKyAqIElmIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgaW9lbmQgaXMgYmV5b25kIHRoZSBjdXJyZW50IEVPRiwKKyAqIHJldHVybiB0aGUgbmV3IEVPRiB2YWx1ZSwgb3RoZXJ3aXNlIHplcm8uCisgKi8KK1NUQVRJQyB4ZnNfZnNpemVfdAoreGZzX2lvZW5kX25ld19lb2YoCisJeGZzX2lvZW5kX3QJCSppb2VuZCkKK3sKKwl4ZnNfaW5vZGVfdAkJKmlwID0gWEZTX0koaW9lbmQtPmlvX2lub2RlKTsKKwl4ZnNfZnNpemVfdAkJaXNpemU7CisJeGZzX2ZzaXplX3QJCWJzaXplOworCisJYnNpemUgPSBpb2VuZC0+aW9fb2Zmc2V0ICsgaW9lbmQtPmlvX3NpemU7CisJaXNpemUgPSBNQVgoaXAtPmlfc2l6ZSwgaXAtPmlfbmV3X3NpemUpOworCWlzaXplID0gTUlOKGlzaXplLCBic2l6ZSk7CisJcmV0dXJuIGlzaXplID4gaXAtPmlfZC5kaV9zaXplID8gaXNpemUgOiAwOworfQorCisvKgogICogVXBkYXRlIG9uLWRpc2sgZmlsZSBzaXplIG5vdyB0aGF0IGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB0byBkaXNrLgogICogVGhlIGN1cnJlbnQgaW4tbWVtb3J5IGZpbGUgc2l6ZSBpcyBpX3NpemUuICBJZiBhIHdyaXRlIGlzIGJleW9uZAogICogZW9mIGlfbmV3X3NpemUgd2lsbCBiZSB0aGUgaW50ZW5kZWQgZmlsZSBzaXplIHVudGlsIGlfc2l6ZSBpcwogICogdXBkYXRlZC4gIElmIHRoaXMgd3JpdGUgZG9lcyBub3QgZXh0ZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSB2YWxpZAogICogZmlsZSBzaXplIHRoZW4gcmVzdHJpY3QgdGhpcyB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgd3JpdGUuCiAgKi8KKwogU1RBVElDIHZvaWQKIHhmc19zZXRmaWxlc2l6ZSgKIAl4ZnNfaW9lbmRfdAkJKmlvZW5kKQogewogCXhmc19pbm9kZV90CQkqaXAgPSBYRlNfSShpb2VuZC0+aW9faW5vZGUpOwogCXhmc19mc2l6ZV90CQlpc2l6ZTsKLQl4ZnNfZnNpemVfdAkJYnNpemU7CiAKIAlBU1NFUlQoKGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRyk7CiAJQVNTRVJUKGlvZW5kLT5pb190eXBlICE9IElPTUFQX1JFQUQpOwpAQCAtMjA2LDE2ICsyMjQsMTAgQEAKIAlpZiAodW5saWtlbHkoaW9lbmQtPmlvX2Vycm9yKSkKIAkJcmV0dXJuOwogCi0JYnNpemUgPSBpb2VuZC0+aW9fb2Zmc2V0ICsgaW9lbmQtPmlvX3NpemU7Ci0KIAl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQotCWlzaXplID0gTUFYKGlwLT5pX3NpemUsIGlwLT5pX25ld19zaXplKTsKLQlpc2l6ZSA9IE1JTihpc2l6ZSwgYnNpemUpOwotCi0JaWYgKGlwLT5pX2QuZGlfc2l6ZSA8IGlzaXplKSB7CisJaXNpemUgPSB4ZnNfaW9lbmRfbmV3X2VvZihpb2VuZCk7CisJaWYgKGlzaXplKSB7CiAJCWlwLT5pX2QuZGlfc2l6ZSA9IGlzaXplOwotCQlpcC0+aV91cGRhdGVfY29yZSA9IDE7CiAJCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoaXApOwogCX0KIApAQCAtNDA0LDEwICs0MTYsMTYgQEAKIAlzdHJ1Y3QgYmlvCSpiaW8pCiB7CiAJYXRvbWljX2luYygmaW9lbmQtPmlvX3JlbWFpbmluZyk7Ci0KIAliaW8tPmJpX3ByaXZhdGUgPSBpb2VuZDsKIAliaW8tPmJpX2VuZF9pbyA9IHhmc19lbmRfYmlvOwogCisJLyoKKwkgKiBJZiB0aGUgSS9PIGlzIGJleW9uZCBFT0Ygd2UgbWFyayB0aGUgaW5vZGUgZGlydHkgaW1tZWRpYXRlbHkKKwkgKiBidXQgZG9uJ3QgdXBkYXRlIHRoZSBpbm9kZSBzaXplIHVudGlsIEkvTyBjb21wbGV0aW9uLgorCSAqLworCWlmICh4ZnNfaW9lbmRfbmV3X2VvZihpb2VuZCkpCisJCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoWEZTX0koaW9lbmQtPmlvX2lub2RlKSk7CisKIAlzdWJtaXRfYmlvKFdSSVRFLCBiaW8pOwogCUFTU0VSVCghYmlvX2ZsYWdnZWQoYmlvLCBCSU9fRU9QTk9UU1VQUCkpOwogCWJpb19wdXQoYmlvKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwppbmRleCA5ODhkOGY4Li5lZmY2MWUyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCkBAIC00Miw3ICs0Miw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4ZnNfZmlsZV92bV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wczsKIAogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX2Fpb19yZWFkKApAQCAtMTc2LDE0ICsxNzYsNyBAQAogCXN0cnVjdCBkZW50cnkJCSpkZW50cnksCiAJaW50CQkJZGF0YXN5bmMpCiB7Ci0Jc3RydWN0IGlub2RlCQkqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7Ci0JaW50CQkJZXJyb3I7Ci0KLQkvKiBjYXB0dXJlIHNpemUgdXBkYXRlcyBpbiBJL08gY29tcGxldGlvbiBiZWZvcmUgd3JpdGluZyB0aGUgaW5vZGUuICovCi0JZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGRlbnRyeS0+ZF9pbm9kZSk7CiAKIAl4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfSVRSVU5DQVRFRCk7CiAJcmV0dXJuIC14ZnNfZnN5bmMoaXApOwpAQCAtMjgwLDcgKzI3Myw3IEBACiAJLmZzeW5jCQk9IHhmc19maWxlX2ZzeW5jLAogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4ZnNfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlCT0geGZzX3ZtX3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggZGEwMTU5ZC4uY2Q0MmVmNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtNTcsMTkgKzU3LDIyIEBACiAjaW5jbHVkZSA8bGludXgvZmllbWFwLmg+CiAKIC8qCi0gKiBCcmluZyB0aGUgYXRpbWUgaW4gdGhlIFhGUyBpbm9kZSB1cHRvZGF0ZS4KLSAqIFVzZWQgYmVmb3JlIGxvZ2dpbmcgdGhlIGlub2RlIHRvIGRpc2sgb3Igd2hlbiB0aGUgTGludXggaW5vZGUgZ29lcyBhd2F5LgorICogQnJpbmcgdGhlIHRpbWVzdGFtcHMgaW4gdGhlIFhGUyBpbm9kZSB1cHRvZGF0ZS4KKyAqCisgKiBVc2VkIGJlZm9yZSB3cml0aW5nIHRoZSBpbm9kZSB0byBkaXNrLgogICovCiB2b2lkCi14ZnNfc3luY2hyb25pemVfYXRpbWUoCit4ZnNfc3luY2hyb25pemVfdGltZXMoCiAJeGZzX2lub2RlX3QJKmlwKQogewogCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBWRlNfSShpcCk7CiAKLQlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfQ0xFQVIpKSB7Ci0JCWlwLT5pX2QuZGlfYXRpbWUudF9zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2F0aW1lLnR2X3NlYzsKLQkJaXAtPmlfZC5kaV9hdGltZS50X25zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2F0aW1lLnR2X25zZWM7Ci0JfQorCWlwLT5pX2QuZGlfYXRpbWUudF9zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2F0aW1lLnR2X3NlYzsKKwlpcC0+aV9kLmRpX2F0aW1lLnRfbnNlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfYXRpbWUudHZfbnNlYzsKKwlpcC0+aV9kLmRpX2N0aW1lLnRfc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9jdGltZS50dl9zZWM7CisJaXAtPmlfZC5kaV9jdGltZS50X25zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2N0aW1lLnR2X25zZWM7CisJaXAtPmlfZC5kaV9tdGltZS50X3NlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfbXRpbWUudHZfc2VjOworCWlwLT5pX2QuZGlfbXRpbWUudF9uc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9tdGltZS50dl9uc2VjOwogfQogCiAvKgpAQCAtMTA2LDMyICsxMDksMjAgQEAKIAlpZiAoKGZsYWdzICYgWEZTX0lDSEdUSU1FX01PRCkgJiYKIAkgICAgIXRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9tdGltZSwgJnR2KSkgewogCQlpbm9kZS0+aV9tdGltZSA9IHR2OwotCQlpcC0+aV9kLmRpX210aW1lLnRfc2VjID0gKF9faW50MzJfdCl0di50dl9zZWM7Ci0JCWlwLT5pX2QuZGlfbXRpbWUudF9uc2VjID0gKF9faW50MzJfdCl0di50dl9uc2VjOwogCQlzeW5jX2l0ID0gMTsKIAl9CiAJaWYgKChmbGFncyAmIFhGU19JQ0hHVElNRV9DSEcpICYmCiAJICAgICF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZ0dikpIHsKIAkJaW5vZGUtPmlfY3RpbWUgPSB0djsKLQkJaXAtPmlfZC5kaV9jdGltZS50X3NlYyA9IChfX2ludDMyX3QpdHYudHZfc2VjOwotCQlpcC0+aV9kLmRpX2N0aW1lLnRfbnNlYyA9IChfX2ludDMyX3QpdHYudHZfbnNlYzsKIAkJc3luY19pdCA9IDE7CiAJfQogCiAJLyoKLQkgKiBXZSB1cGRhdGUgdGhlIGlfdXBkYXRlX2NvcmUgZmllbGQgX2FmdGVyXyBjaGFuZ2luZwotCSAqIHRoZSB0aW1lc3RhbXBzIGluIG9yZGVyIHRvIGNvb3JkaW5hdGUgcHJvcGVybHkgd2l0aAotCSAqIHhmc19pZmx1c2goKSBzbyB0aGF0IHdlIGRvbid0IGxvc2UgdGltZXN0YW1wIHVwZGF0ZXMuCi0JICogVGhpcyBrZWVwcyB1cyBmcm9tIGhhdmluZyB0byBob2xkIHRoZSBpbm9kZSBsb2NrCi0JICogd2hpbGUgZG9pbmcgdGhpcy4gIFdlIHVzZSB0aGUgU1lOQ0hST05JWkUgbWFjcm8gdG8KLQkgKiBlbnN1cmUgdGhhdCB0aGUgY29tcGlsZXIgZG9lcyBub3QgcmVvcmRlciB0aGUgdXBkYXRlCi0JICogb2YgaV91cGRhdGVfY29yZSBhYm92ZSB0aGUgdGltZXN0YW1wIHVwZGF0ZXMgYWJvdmUuCisJICogVXBkYXRlIGNvbXBsZXRlIC0gbm93IG1ha2Ugc3VyZSBldmVyeW9uZSBrbm93cyB0aGF0IHRoZSBpbm9kZQorCSAqIGlzIGRpcnR5LgogCSAqLwotCWlmIChzeW5jX2l0KSB7Ci0JCVNZTkNIUk9OSVpFKCk7Ci0JCWlwLT5pX3VwZGF0ZV9jb3JlID0gMTsKKwlpZiAoc3luY19pdCkKIAkJeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyhpcCk7Ci0JfQogfQogCiAvKgpAQCAtNTA2LDEwICs0OTcsOCBAQAogCXN0YXQtPmdpZCA9IGlwLT5pX2QuZGlfZ2lkOwogCXN0YXQtPmlubyA9IGlwLT5pX2lubzsKIAlzdGF0LT5hdGltZSA9IGlub2RlLT5pX2F0aW1lOwotCXN0YXQtPm10aW1lLnR2X3NlYyA9IGlwLT5pX2QuZGlfbXRpbWUudF9zZWM7Ci0Jc3RhdC0+bXRpbWUudHZfbnNlYyA9IGlwLT5pX2QuZGlfbXRpbWUudF9uc2VjOwotCXN0YXQtPmN0aW1lLnR2X3NlYyA9IGlwLT5pX2QuZGlfY3RpbWUudF9zZWM7Ci0Jc3RhdC0+Y3RpbWUudHZfbnNlYyA9IGlwLT5pX2QuZGlfY3RpbWUudF9uc2VjOworCXN0YXQtPm10aW1lID0gaW5vZGUtPmlfbXRpbWU7CisJc3RhdC0+Y3RpbWUgPSBpbm9kZS0+aV9jdGltZTsKIAlzdGF0LT5ibG9ja3MgPQogCQlYRlNfRlNCX1RPX0JCKG1wLCBpcC0+aV9kLmRpX25ibG9ja3MgKyBpcC0+aV9kZWxheWVkX2Jsa3MpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IDQ5ZTRhNmEuLjA3MjA1MGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCkBAIC02NjcsNyArNjY3LDcgQEAKIAkJeGlwLT5pX25ld19zaXplID0gbmV3X3NpemU7CiAKIAlpZiAobGlrZWx5KCEoaW9mbGFncyAmIElPX0lOVklTKSkpCi0JCXhmc19pY2hndGltZSh4aXAsIFhGU19JQ0hHVElNRV9NT0QgfCBYRlNfSUNIR1RJTUVfQ0hHKTsKKwkJZmlsZV91cGRhdGVfdGltZShmaWxlKTsKIAogCS8qCiAJICogSWYgdGhlIG9mZnNldCBpcyBiZXlvbmQgdGhlIHNpemUgb2YgdGhlIGZpbGUsIHdlIGhhdmUgYSBjb3VwbGUKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCmluZGV4IDllNDFmOTEuLjNkNGEwYzggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwpAQCAtODAsNyArODAsNyBAQAogCiAJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gLUVST0ZTOwotCWlmICghWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQorCWlmIChvcCAhPSBRX1hRVU9UQVJNICYmICFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCiAJCXJldHVybiAtRU5PU1lTOwogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IGJkZDQxYzguLjE4YTRiOGUxIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTk3Nyw2ICs5NzcsMjggQEAKIH0KIAogLyoKKyAqIERpcnR5IHRoZSBYRlMgaW5vZGUgd2hlbiBtYXJrX2lub2RlX2RpcnR5X3N5bmMoKSBpcyBjYWxsZWQgc28gdGhhdAorICogd2UgY2F0Y2ggdW5sb2dnZWQgVkZTIGxldmVsIHVwZGF0ZXMgdG8gdGhlIGlub2RlLiBDYXJlIG11c3QgYmUgdGFrZW4KKyAqIGhlcmUgLSB0aGUgdHJhbnNhY3Rpb24gY29kZSBjYWxscyBtYXJrX2lub2RlX2RpcnR5X3N5bmMoKSB0byBtYXJrIHRoZQorICogVkZTIGlub2RlIGRpcnR5IGluIGEgdHJhbnNhY3Rpb24gYW5kIGNsZWFycyB0aGUgaV91cGRhdGVfY29yZSBmaWVsZDsKKyAqIGl0IG11c3QgY2xlYXIgdGhlIGZpZWxkIGFmdGVyIGNhbGxpbmcgbWFya19pbm9kZV9kaXJ0eV9zeW5jKCkgdG8KKyAqIGNvcnJlY3RseSBpbmRpY2F0ZSB0aGF0IHRoZSBkaXJ0eSBzdGF0ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIGludG8gdGhlCisgKiBpbm9kZSBsb2cgaXRlbS4KKyAqCisgKiBXZSBuZWVkIHRoZSBiYXJyaWVyKCkgdG8gbWFpbnRhaW4gY29ycmVjdCBvcmRlcmluZyBiZXR3ZWVuIHVubG9nZ2VkCisgKiB1cGRhdGVzIGFuZCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0IGNvZGUgdGhhdCBjbGVhcnMgdGhlIGlfdXBkYXRlX2NvcmUKKyAqIGZpZWxkLiBUaGlzIHJlcXVpcmVzIGFsbCB1cGRhdGVzIHRvIGJlIGNvbXBsZXRlZCBiZWZvcmUgbWFya2luZyB0aGUKKyAqIGlub2RlIGRpcnR5LgorICovCitTVEFUSUMgdm9pZAoreGZzX2ZzX2RpcnR5X2lub2RlKAorCXN0cnVjdCBpbm9kZQkqaW5vZGUpCit7CisJYmFycmllcigpOworCVhGU19JKGlub2RlKS0+aV91cGRhdGVfY29yZSA9IDE7Cit9CisKKy8qCiAgKiBBdHRlbXB0IHRvIGZsdXNoIHRoZSBpbm9kZSwgdGhpcyB3aWxsIGFjdHVhbGx5IGZhaWwKICAqIGlmIHRoZSBpbm9kZSBpcyBwaW5uZWQsIGJ1dCB3ZSBkaXJ0eSB0aGUgaW5vZGUgYWdhaW4KICAqIGF0IHRoZSBwb2ludCB3aGVuIGl0IGlzIHVucGlubmVkIGFmdGVyIGEgbG9nIHdyaXRlLApAQCAtMTEyNiw3ICsxMTQ4LDcgQEAKIH0KIAogU1RBVElDIGludAoteGZzX2ZzX3N5bmNfc3VwZXIoCit4ZnNfZnNfc3luY19mcygKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAogCWludAkJCXdhaXQpCiB7CkBAIC0xMTM0LDIzICsxMTU2LDIzIEBACiAJaW50CQkJZXJyb3I7CiAKIAkvKgotCSAqIFRyZWF0IGEgc3luYyBvcGVyYXRpb24gbGlrZSBhIGZyZWV6ZS4gIFRoaXMgaXMgdG8gd29yawotCSAqIGFyb3VuZCBhIHJhY2UgaW4gc3luY19pbm9kZXMoKSB3aGljaCB3b3JrcyBpbiB0d28gcGhhc2VzCi0JICogLSBhbiBhc3luY2hyb25vdXMgZmx1c2gsIHdoaWNoIGNhbiB3cml0ZSBvdXQgYW4gaW5vZGUKLQkgKiB3aXRob3V0IHdhaXRpbmcgZm9yIGZpbGUgc2l6ZSB1cGRhdGVzIHRvIGNvbXBsZXRlLCBhbmQgYQotCSAqIHN5bmNocm9ub3VzIGZsdXNoLCB3aGljaCB3b250IGRvIGFueXRoaW5nIGJlY2F1c2UgdGhlCi0JICogYXN5bmMgZmx1c2ggcmVtb3ZlZCB0aGUgaW5vZGUncyBkaXJ0eSBmbGFnLiAgQWxzbwotCSAqIHN5bmNfaW5vZGVzKCkgd2lsbCBub3Qgc2VlIGFueSBmaWxlcyB0aGF0IGp1c3QgaGF2ZQotCSAqIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucyB0byBiZSBmbHVzaGVkIGJlY2F1c2Ugd2UgZG9uJ3QKLQkgKiBkaXJ0eSB0aGUgTGludXggaW5vZGUgdW50aWwgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIEkvTwotCSAqIGNvbXBsZXRlcy4KKwkgKiBOb3QgbXVjaCB3ZSBjYW4gZG8gZm9yIHRoZSBmaXJzdCBhc3luYyBwYXNzLiAgV3JpdGluZyBvdXQgdGhlCisJICogc3VwZXJibG9jayB3b3VsZCBiZSBjb3VudGVyLXByb2R1Y3RpdmUgYXMgd2UgYXJlIGdvaW5nIHRvIHJlZGlydHkKKwkgKiB3aGVuIHdyaXRpbmcgb3V0IG90aGVyIGRhdGEgYW5kIG1ldGFkYXRhIChhbmQgd3JpdGluZyBvdXQgYSBzaW5nbGUKKwkgKiBibG9jayBpcyBxdWl0ZSBmYXN0IGFueXdheSkuCisJICoKKwkgKiBUcnkgdG8gYXN5bmNocm9ub3VzbHkga2ljayBvZmYgcXVvdGEgc3luY2luZyBhdCBsZWFzdC4KIAkgKi8KLQlpZiAod2FpdCB8fCB1bmxpa2VseShzYi0+c19mcm96ZW4gPT0gU0JfRlJFRVpFX1dSSVRFKSkKLQkJZXJyb3IgPSB4ZnNfcXVpZXNjZV9kYXRhKG1wKTsKLQllbHNlCi0JCWVycm9yID0geGZzX3N5bmNfZnNkYXRhKG1wLCAwKTsKKwlpZiAoIXdhaXQpIHsKKwkJeGZzX3FtX3N5bmMobXAsIFNZTkNfVFJZTE9DSyk7CisJCXJldHVybiAwOworCX0KIAotCWlmICh1bmxpa2VseShsYXB0b3BfbW9kZSkpIHsKKwllcnJvciA9IHhmc19xdWllc2NlX2RhdGEobXApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIC1lcnJvcjsKKworCWlmIChsYXB0b3BfbW9kZSkgewogCQlpbnQJcHJldl9zeW5jX3NlcSA9IG1wLT5tX3N5bmNfc2VxOwogCiAJCS8qCkBAIC0xMTY5LDcgKzExOTEsNyBAQAogCQkJCW1wLT5tX3N5bmNfc2VxICE9IHByZXZfc3luY19zZXEpOwogCX0KIAotCXJldHVybiAtZXJyb3I7CisJcmV0dXJuIDA7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTE1MzksMTAgKzE1NjEsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB4ZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHsKIAkuYWxsb2NfaW5vZGUJCT0geGZzX2ZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCQk9IHhmc19mc19kZXN0cm95X2lub2RlLAorCS5kaXJ0eV9pbm9kZQkJPSB4ZnNfZnNfZGlydHlfaW5vZGUsCiAJLndyaXRlX2lub2RlCQk9IHhmc19mc193cml0ZV9pbm9kZSwKIAkuY2xlYXJfaW5vZGUJCT0geGZzX2ZzX2NsZWFyX2lub2RlLAogCS5wdXRfc3VwZXIJCT0geGZzX2ZzX3B1dF9zdXBlciwKLQkuc3luY19mcwkJPSB4ZnNfZnNfc3luY19zdXBlciwKKwkuc3luY19mcwkJPSB4ZnNfZnNfc3luY19mcywKIAkuZnJlZXplX2ZzCQk9IHhmc19mc19mcmVlemUsCiAJLnN0YXRmcwkJCT0geGZzX2ZzX3N0YXRmcywKIAkucmVtb3VudF9mcwkJPSB4ZnNfZnNfcmVtb3VudCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwppbmRleCAzMjBiZTZhLi45NjFkZjBhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCkBAIC0zMDksMTEgKzMwOSwxNSBAQAogU1RBVElDIGludAogeGZzX2NvbW1pdF9kdW1teV90cmFucygKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKLQl1aW50CQkJbG9nX2ZsYWdzKQorCXVpbnQJCQlmbGFncykKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IG1wLT5tX3Jvb3RpcDsKIAlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKIAlpbnQJCQllcnJvcjsKKwlpbnQJCQlsb2dfZmxhZ3MgPSBYRlNfTE9HX0ZPUkNFOworCisJaWYgKGZsYWdzICYgU1lOQ19XQUlUKQorCQlsb2dfZmxhZ3MgfD0gWEZTX0xPR19TWU5DOwogCiAJLyoKIAkgKiBQdXQgYSBkdW1teSB0cmFuc2FjdGlvbiBpbiB0aGUgbG9nIHRvIHRlbGwgcmVjb3ZlcnkKQEAgLTMzMSwxMyArMzM1LDEyIEBACiAJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCXhmc190cmFuc19paG9sZCh0cCwgaXApOwogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKLQkvKiBYWFgoaGNoKTogaWdub3JpbmcgdGhlIGVycm9yIGhlcmUuLiAqLwogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7Ci0KIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCisJLyogdGhlIGxvZyBmb3JjZSBlbnN1cmVzIHRoaXMgdHJhbnNhY3Rpb24gaXMgcHVzaGVkIHRvIGRpc2sgKi8KIAl4ZnNfbG9nX2ZvcmNlKG1wLCAwLCBsb2dfZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogaW50CkBAIC0zODUsNyArMzg4LDIwIEBACiAJZWxzZQogCQlYRlNfQlVGX0FTWU5DKGJwKTsKIAotCXJldHVybiB4ZnNfYndyaXRlKG1wLCBicCk7CisJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBkYXRhIGludGVncml0eSBzeW5jIG1ha2Ugc3VyZSBhbGwgcGVuZGluZyBidWZmZXJzCisJICogYXJlIGZsdXNoZWQgb3V0IGZvciB0aGUgbG9nIGNvdmVyYWdlIGNoZWNrIGJlbG93LgorCSAqLworCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKKwkJeGZzX2ZsdXNoX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCwgMSk7CisKKwlpZiAoeGZzX2xvZ19uZWVkX2NvdmVyZWQobXApKQorCQllcnJvciA9IHhmc19jb21taXRfZHVtbXlfdHJhbnMobXAsIGZsYWdzKTsKKwlyZXR1cm4gZXJyb3I7CiAKICBvdXRfYnJlbHNlOgogCXhmc19idWZfcmVsc2UoYnApOwpAQCAtNDE5LDE0ICs0MzUsMTYgQEAKIAkvKiBwdXNoIG5vbi1ibG9ja2luZyAqLwogCXhmc19zeW5jX2RhdGEobXAsIDApOwogCXhmc19xbV9zeW5jKG1wLCBTWU5DX1RSWUxPQ0spOwotCXhmc19maWxlc3RyZWFtX2ZsdXNoKG1wKTsKIAotCS8qIHB1c2ggYW5kIGJsb2NrICovCisJLyogcHVzaCBhbmQgYmxvY2sgdGlsbCBjb21wbGV0ZSAqLwogCXhmc19zeW5jX2RhdGEobXAsIFNZTkNfV0FJVCk7CiAJeGZzX3FtX3N5bmMobXAsIFNZTkNfV0FJVCk7CiAKKwkvKiBkcm9wIGlub2RlIHJlZmVyZW5jZXMgcGlubmVkIGJ5IGZpbGVzdHJlYW1zICovCisJeGZzX2ZpbGVzdHJlYW1fZmx1c2gobXApOworCiAJLyogd3JpdGUgc3VwZXJibG9jayBhbmQgaG9vdmVyIHVwIHNodXRkb3duIGVycm9ycyAqLwotCWVycm9yID0geGZzX3N5bmNfZnNkYXRhKG1wLCAwKTsKKwllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19XQUlUKTsKIAogCS8qIGZsdXNoIGRhdGEtb25seSBkZXZpY2VzICovCiAJaWYgKG1wLT5tX3J0ZGV2X3RhcmdwKQpAQCAtNTcwLDggKzU4OCw2IEBACiAJCS8qIGRnYzogZXJyb3JzIGlnbm9yZWQgaGVyZSAqLwogCQllcnJvciA9IHhmc19xbV9zeW5jKG1wLCBTWU5DX1RSWUxPQ0spOwogCQllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19UUllMT0NLKTsKLQkJaWYgKHhmc19sb2dfbmVlZF9jb3ZlcmVkKG1wKSkKLQkJCWVycm9yID0geGZzX2NvbW1pdF9kdW1teV90cmFucyhtcCwgWEZTX0xPR19GT1JDRSk7CiAJfQogCW1wLT5tX3N5bmNfc2VxKys7CiAJd2FrZV91cCgmbXAtPm1fd2FpdF9zaW5nbGVfc3luY190YXNrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwppbmRleCA0ZTQyNzZiLi41ZDFhM2I5IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCkBAIC04NzYsNyArODc2LDYgQEAKIAkJaXAtPmlfZ2RxdW90ID0gTlVMTDsKIAl9CiAJeGZzX2lwdXQoaXAsIFhGU19JTE9DS19FWENMKTsKLQlJUkVMRShpcCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCA3NDY1ZjllLi5hYjg5YTdlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC0yMDYsMTAgKzIwNiwxMCBAQAogCSAqIHByb2Nlc3MgdGhhdCB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQgb3V0IGZyb20KIAkgKiB1bmRlciBpdC4KIAkgKi8KLQlpZiAoKHNicC0+YnNfY3RpbWUudHZfc2VjICE9IGlwLT5pX2QuZGlfY3RpbWUudF9zZWMpIHx8Ci0JICAgIChzYnAtPmJzX2N0aW1lLnR2X25zZWMgIT0gaXAtPmlfZC5kaV9jdGltZS50X25zZWMpIHx8Ci0JICAgIChzYnAtPmJzX210aW1lLnR2X3NlYyAhPSBpcC0+aV9kLmRpX210aW1lLnRfc2VjKSB8fAotCSAgICAoc2JwLT5ic19tdGltZS50dl9uc2VjICE9IGlwLT5pX2QuZGlfbXRpbWUudF9uc2VjKSkgeworCWlmICgoc2JwLT5ic19jdGltZS50dl9zZWMgIT0gVkZTX0koaXApLT5pX2N0aW1lLnR2X3NlYykgfHwKKwkgICAgKHNicC0+YnNfY3RpbWUudHZfbnNlYyAhPSBWRlNfSShpcCktPmlfY3RpbWUudHZfbnNlYykgfHwKKwkgICAgKHNicC0+YnNfbXRpbWUudHZfc2VjICE9IFZGU19JKGlwKS0+aV9tdGltZS50dl9zZWMpIHx8CisJICAgIChzYnAtPmJzX210aW1lLnR2X25zZWMgIT0gVkZTX0koaXApLT5pX210aW1lLnR2X25zZWMpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVCVVNZKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCmluZGV4IGZhOTEzZTQ1Li40MWFkNTM3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKQEAgLTg1NCw2ICs4NTQsNyBAQAogCQkJICovCiAJCQlyYV93YW50ID0gaG93bWFueShidWZzaXplICsgbXAtPm1fZGlyYmxrc2l6ZSwKIAkJCQkJICBtcC0+bV9zYi5zYl9ibG9ja3NpemUpIC0gMTsKKwkJCUFTU0VSVChyYV93YW50ID49IDApOwogCiAJCQkvKgogCQkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhcyBtYW55IGFzIHdlIHdhbnQsIGFuZCB3ZSBoYXZlbid0CkBAIC0xMDg4LDcgKzEwODksOCBAQAogCQkgKi8KIAkJcHRyICs9IGxlbmd0aDsKIAkJY3Vyb2ZmICs9IGxlbmd0aDsKLQkJYnVmc2l6ZSAtPSBsZW5ndGg7CisJCS8qIGJ1ZnNpemUgbWF5IGhhdmUganVzdCBiZWVuIGEgZ3Vlc3M7IGRvbid0IGdvIG5lZ2F0aXZlICovCisJCWJ1ZnNpemUgPSBidWZzaXplID4gbGVuZ3RoID8gYnVmc2l6ZSAtIGxlbmd0aCA6IDA7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMgYi9mcy94ZnMveGZzX2lhbGxvYy5jCmluZGV4IGFiNjRmM2UuLjA3ODU3OTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2MuYwpAQCAtODgwLDYgKzg4MCw3IEBACiAJCQkJICogTm90IGluIHJhbmdlIC0gc2F2ZSBsYXN0IHNlYXJjaAogCQkJCSAqIGxvY2F0aW9uIGFuZCBhbGxvY2F0ZSBhIG5ldyBpbm9kZQogCQkJCSAqLworCQkJCXhmc19idHJlZV9kZWxfY3Vyc29yKHRjdXIsIFhGU19CVFJFRV9OT0VSUk9SKTsKIAkJCQlwYWctPnBhZ2xfbGVmdHJlYyA9IHRyZWMuaXJfc3RhcnRpbm87CiAJCQkJcGFnLT5wYWdsX3JpZ2h0cmVjID0gcmVjLmlyX3N0YXJ0aW5vOwogCQkJCXBhZy0+cGFnbF9wYWdpbm8gPSBwYWdpbm87CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggYzFkYzdlZi4uYjkyYTRmYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMzA2OCw5ICszMDY4LDkgQEAKIAlTWU5DSFJPTklaRSgpOwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgdG8gZ2V0IHRoZSBsYXRlc3QgYXRpbWUgZnJvbSB0aGUgTGludXggaW5vZGUuCisJICogTWFrZSBzdXJlIHRvIGdldCB0aGUgbGF0ZXN0IHRpbWVzdGFtcHMgZnJvbSB0aGUgTGludXggaW5vZGUuCiAJICovCi0JeGZzX3N5bmNocm9uaXplX2F0aW1lKGlwKTsKKwl4ZnNfc3luY2hyb25pemVfdGltZXMoaXApOwogCiAJaWYgKFhGU19URVNUX0VSUk9SKGJlMTZfdG9fY3B1KGRpcC0+ZGlfbWFnaWMpICE9IFhGU19ESU5PREVfTUFHSUMsCiAJCQkgICAgICAgbXAsIFhGU19FUlJUQUdfSUZMVVNIXzEsIFhGU19SQU5ET01fSUZMVVNIXzEpKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggMGIzOGI5YS4uNDE1NTVkZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtNTA0LDcgKzUwNCw3IEBACiB2b2lkCQl4ZnNfbG9ja19pbm9kZXMoeGZzX2lub2RlX3QgKiosIGludCwgdWludCk7CiB2b2lkCQl4ZnNfbG9ja190d29faW5vZGVzKHhmc19pbm9kZV90ICosIHhmc19pbm9kZV90ICosIHVpbnQpOwogCi12b2lkCQl4ZnNfc3luY2hyb25pemVfYXRpbWUoeGZzX2lub2RlX3QgKik7Cit2b2lkCQl4ZnNfc3luY2hyb25pemVfdGltZXMoeGZzX2lub2RlX3QgKik7CiB2b2lkCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKHhmc19pbm9kZV90ICopOwogCiAjaWYgZGVmaW5lZChYRlNfSU5PREVfVFJBQ0UpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCmluZGV4IDQ3ZDViNjYuLjk3OTRiODcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCkBAIC0yMzIsNiArMjMyLDE1IEBACiAJbnZlY3MJICAgICA9IDE7CiAKIAkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgbGludXggaW5vZGUgaXMgZGlydHkuIFdlIGRvIHRoaXMgYmVmb3JlCisJICogY2xlYXJpbmcgaV91cGRhdGVfY29yZSBhcyB0aGUgVkZTIHdpbGwgY2FsbCBiYWNrIGludG8KKwkgKiBYRlMgaGVyZSBhbmQgc2V0IGlfdXBkYXRlX2NvcmUsIHNvIHdlIG5lZWQgdG8gZGlydHkgdGhlCisJICogaW5vZGUgZmlyc3Qgc28gdGhhdCB0aGUgb3JkZXJpbmcgb2YgaV91cGRhdGVfY29yZSBhbmQKKwkgKiB1bmxvZ2dlZCBtb2RpZmljYXRpb25zIHN0aWxsIHdvcmtzIGFzIGRlc2NyaWJlZCBiZWxvdy4KKwkgKi8KKwl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlwKTsKKworCS8qCiAJICogQ2xlYXIgaV91cGRhdGVfY29yZSBpZiB0aGUgdGltZXN0YW1wcyAob3IgYW55IG90aGVyCiAJICogbm9uLXRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9uKSBuZWVkIGZsdXNoaW5nL2xvZ2dpbmcKIAkgKiBhbmQgd2UncmUgYWJvdXQgdG8gbG9nIHRoZW0gd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29yZS4KQEAgLTI2MywxNCArMjcyLDkgQEAKIAl9CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0byBnZXQgdGhlIGxhdGVzdCBhdGltZSBmcm9tIHRoZSBMaW51eCBpbm9kZS4KKwkgKiBNYWtlIHN1cmUgdG8gZ2V0IHRoZSBsYXRlc3QgdGltZXN0YW1wcyBmcm9tIHRoZSBMaW51eCBpbm9kZS4KIAkgKi8KLQl4ZnNfc3luY2hyb25pemVfYXRpbWUoaXApOwotCi0JLyoKLQkgKiBtYWtlIHN1cmUgdGhlIGxpbnV4IGlub2RlIGlzIGRpcnR5Ci0JICovCi0JeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyhpcCk7CisJeGZzX3N5bmNocm9uaXplX3RpbWVzKGlwKTsKIAogCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmaXAtPmlfZDsKIAl2ZWNwLT5pX2xlbiAgPSBzaXplb2Yoc3RydWN0IHhmc19pY2Rpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2l0YWJsZS5jIGIvZnMveGZzL3hmc19pdGFibGUuYwppbmRleCBiNjhmOTEwLi42MmVmYWIyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2l0YWJsZS5jCisrKyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKQEAgLTU5LDYgKzU5LDcgQEAKIHsKIAl4ZnNfaWNkaW5vZGVfdAkqZGljOwkvKiBkaW5vZGUgY29yZSBpbmZvIHBvaW50ZXIgKi8KIAl4ZnNfaW5vZGVfdAkqaXA7CQkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLworCXN0cnVjdCBpbm9kZQkqaW5vZGU7CiAJaW50CQllcnJvcjsKIAogCWVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIGlubywKQEAgLTcyLDYgKzczLDcgQEAKIAlBU1NFUlQoaXAtPmlfaW1hcC5pbV9ibGtubyAhPSAwKTsKIAogCWRpYyA9ICZpcC0+aV9kOworCWlub2RlID0gVkZTX0koaXApOwogCiAJLyogeGZzX2lnZXQgcmV0dXJucyB0aGUgZm9sbG93aW5nIHdpdGhvdXQgbmVlZGluZwogCSAqIGZ1cnRoZXIgY2hhbmdlLgpAQCAtODMsMTYgKzg1LDE5IEBACiAJYnVmLT5ic191aWQgPSBkaWMtPmRpX3VpZDsKIAlidWYtPmJzX2dpZCA9IGRpYy0+ZGlfZ2lkOwogCWJ1Zi0+YnNfc2l6ZSA9IGRpYy0+ZGlfc2l6ZTsKKwogCS8qCi0JICogV2UgYXJlIHJlYWRpbmcgdGhlIGF0aW1lIGZyb20gdGhlIExpbnV4IGlub2RlIGJlY2F1c2UgdGhlCi0JICogZGlub2RlIG1pZ2h0IG5vdCBiZSB1cHRvZGF0ZS4KKwkgKiBXZSBuZWVkIHRvIHJlYWQgdGhlIHRpbWVzdGFtcHMgZnJvbSB0aGUgTGludXggaW5vZGUgYmVjYXVzZQorCSAqIHRoZSBWRlMga2VlcHMgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgaW5zdGVhZAorCSAqIG9mIHRlbGxpbmcgdXMgYWJvdXQgdGhlIHVwZGF0ZXMuCiAJICovCi0JYnVmLT5ic19hdGltZS50dl9zZWMgPSBWRlNfSShpcCktPmlfYXRpbWUudHZfc2VjOwotCWJ1Zi0+YnNfYXRpbWUudHZfbnNlYyA9IFZGU19JKGlwKS0+aV9hdGltZS50dl9uc2VjOwotCWJ1Zi0+YnNfbXRpbWUudHZfc2VjID0gZGljLT5kaV9tdGltZS50X3NlYzsKLQlidWYtPmJzX210aW1lLnR2X25zZWMgPSBkaWMtPmRpX210aW1lLnRfbnNlYzsKLQlidWYtPmJzX2N0aW1lLnR2X3NlYyA9IGRpYy0+ZGlfY3RpbWUudF9zZWM7Ci0JYnVmLT5ic19jdGltZS50dl9uc2VjID0gZGljLT5kaV9jdGltZS50X25zZWM7CisJYnVmLT5ic19hdGltZS50dl9zZWMgPSBpbm9kZS0+aV9hdGltZS50dl9zZWM7CisJYnVmLT5ic19hdGltZS50dl9uc2VjID0gaW5vZGUtPmlfYXRpbWUudHZfbnNlYzsKKwlidWYtPmJzX210aW1lLnR2X3NlYyA9IGlub2RlLT5pX210aW1lLnR2X3NlYzsKKwlidWYtPmJzX210aW1lLnR2X25zZWMgPSBpbm9kZS0+aV9tdGltZS50dl9uc2VjOworCWJ1Zi0+YnNfY3RpbWUudHZfc2VjID0gaW5vZGUtPmlfY3RpbWUudHZfc2VjOworCWJ1Zi0+YnNfY3RpbWUudHZfbnNlYyA9IGlub2RlLT5pX2N0aW1lLnR2X25zZWM7CisKIAlidWYtPmJzX3hmbGFncyA9IHhmc19pcDJ4ZmxhZ3MoaXApOwogCWJ1Zi0+YnNfZXh0c2l6ZSA9IGRpYy0+ZGlfZXh0c2l6ZSA8PCBtcC0+bV9zYi5zYl9ibG9ja2xvZzsKIAlidWYtPmJzX2V4dGVudHMgPSBkaWMtPmRpX25leHRlbnRzOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCmluZGV4IDEwOTkzOTUuLmZiMTdmODIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYworKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKQEAgLTE5ODAsNyArMTk4MCw3IEBACiAJCQkJCSJYRlM6IE5VTEwgZHF1b3QgaW4gJXMuIiwgX19mdW5jX18pOwogCQkJCWdvdG8gbmV4dDsKIAkJCX0KLQkJCWlmIChpdGVtLT5yaV9idWZbaV0uaV9sZW4gPCBzaXplb2YoeGZzX2RxYmxrX3QpKSB7CisJCQlpZiAoaXRlbS0+cmlfYnVmW2ldLmlfbGVuIDwgc2l6ZW9mKHhmc19kaXNrX2RxdW90X3QpKSB7CiAJCQkJY21uX2VycihDRV9BTEVSVCwKIAkJCQkJIlhGUzogZHF1b3QgdG9vIHNtYWxsICglZCkgaW4gJXMuIiwKIAkJCQkJaXRlbS0+cmlfYnVmW2ldLmlfbGVuLCBfX2Z1bmNfXyk7CkBAIC0yNjM1LDcgKzI2MzUsNyBAQAogCQkJIlhGUzogTlVMTCBkcXVvdCBpbiAlcy4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9Ci0JaWYgKGl0ZW0tPnJpX2J1ZlsxXS5pX2xlbiA8IHNpemVvZih4ZnNfZHFibGtfdCkpIHsKKwlpZiAoaXRlbS0+cmlfYnVmWzFdLmlfbGVuIDwgc2l6ZW9mKHhmc19kaXNrX2RxdW90X3QpKSB7CiAJCWNtbl9lcnIoQ0VfQUxFUlQsCiAJCQkiWEZTOiBkcXVvdCB0b28gc21hbGwgKCVkKSBpbiAlcy4iLAogCQkJaXRlbS0+cmlfYnVmWzFdLmlfbGVuLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jIGIvZnMveGZzL3hmc190cmFuc19haWwuYwppbmRleCBmMzEyNzFjLi4yZmZjNTcwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogewogCXhmc19sb2dfaXRlbV90CQkqZGxpcCA9IE5VTEw7CiAJeGZzX2xvZ19pdGVtX3QJCSptbGlwOwkvKiBwdHIgdG8gbWluaW11bSBsaXAgKi8KKwl4ZnNfbHNuX3QJCXRhaWxfbHNuOwogCiAJbWxpcCA9IHhmc19haWxfbWluKGFpbHApOwogCkBAIC00ODMsOCArNDg0LDE2IEBACiAKIAlpZiAobWxpcCA9PSBkbGlwKSB7CiAJCW1saXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKKwkJLyoKKwkJICogSXQgaXMgbm90IHNhZmUgdG8gYWNjZXNzIG1saXAgYWZ0ZXIgdGhlIEFJTCBsb2NrIGlzCisJCSAqIGRyb3BwZWQsIHNvIHdlIG11c3QgZ2V0IGEgY29weSBvZiBsaV9sc24gYmVmb3JlIHdlIGRvCisJCSAqIHNvLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBvbiAzMi1iaXQgcGxhdGZvcm1zCisJCSAqIHdoZXJlIGFjY2Vzc2luZyBhbmQgdXBkYXRpbmcgNjQtYml0IHZhbHVlcyBsaWtlIGxpX2xzbgorCQkgKiBpcyBub3QgYXRvbWljLgorCQkgKi8KKwkJdGFpbF9sc24gPSBtbGlwLT5saV9sc247CiAJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQkJeGZzX2xvZ19tb3ZlX3RhaWwoYWlscC0+eGFfbW91bnQsIG1saXAtPmxpX2xzbik7CisJCXhmc19sb2dfbW92ZV90YWlsKGFpbHAtPnhhX21vdW50LCB0YWlsX2xzbik7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwogCX0KQEAgLTUxNCw2ICs1MjMsNyBAQAogewogCXhmc19sb2dfaXRlbV90CQkqZGxpcDsKIAl4ZnNfbG9nX2l0ZW1fdAkJKm1saXA7CisJeGZzX2xzbl90CQl0YWlsX2xzbjsKIAogCWlmIChsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgewogCQltbGlwID0geGZzX2FpbF9taW4oYWlscCk7CkBAIC01MjcsOSArNTM3LDE2IEBACiAKIAkJaWYgKG1saXAgPT0gZGxpcCkgewogCQkJbWxpcCA9IHhmc19haWxfbWluKGFpbHApOworCQkJLyoKKwkJCSAqIEl0IGlzIG5vdCBzYWZlIHRvIGFjY2VzcyBtbGlwIGFmdGVyIHRoZSBBSUwgbG9jaworCQkJICogaXMgZHJvcHBlZCwgc28gd2UgbXVzdCBnZXQgYSBjb3B5IG9mIGxpX2xzbgorCQkJICogYmVmb3JlIHdlIGRvIHNvLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudAorCQkJICogb24gMzItYml0IHBsYXRmb3JtcyB3aGVyZSBhY2Nlc3NpbmcgYW5kIHVwZGF0aW5nCisJCQkgKiA2NC1iaXQgdmFsdWVzIGxpa2UgbGlfbHNuIGlzIG5vdCBhdG9taWMuCisJCQkgKi8KKwkJCXRhaWxfbHNuID0gbWxpcCA/IG1saXAtPmxpX2xzbiA6IDA7CiAJCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci0JCQl4ZnNfbG9nX21vdmVfdGFpbChhaWxwLT54YV9tb3VudCwKLQkJCQkJCShtbGlwID8gbWxpcC0+bGlfbHNuIDogMCkpOworCQkJeGZzX2xvZ19tb3ZlX3RhaWwoYWlscC0+eGFfbW91bnQsIHRhaWxfbHNuKTsKIAkJfSBlbHNlIHsKIAkJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IGE0MzRmMjguLmI1NzJmN2UgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTI0NzYsMTIgKzI0NzYsNiBAQAogCUFTU0VSVChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSB8fCBpcC0+aV9kZWxheWVkX2Jsa3MgPT0gMCk7CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgYXRpbWUgaW4gdGhlIFhGUyBpbm9kZSBpcyBjb3JyZWN0IGJlZm9yZSBmcmVlaW5nIHRoZQotCSAqIExpbnV4IGlub2RlLgotCSAqLwotCXhmc19zeW5jaHJvbml6ZV9hdGltZShpcCk7Ci0KLQkvKgogCSAqIElmIHdlIGhhdmUgbm90aGluZyB0byBmbHVzaCB3aXRoIHRoaXMgaW5vZGUgdGhlbiBjb21wbGV0ZSB0aGUKIAkgKiB0ZWFyZG93biBub3csIG90aGVyd2lzZSBicmVhayB0aGUgbGluayBiZXR3ZWVuIHRoZSB4ZnMgaW5vZGUgYW5kIHRoZQogCSAqIGxpbnV4IGlub2RlIGFuZCBjbGVhbiB1cCB0aGUgeGZzIGlub2RlIGxhdGVyLiBUaGlzIGF2b2lkcyBmbHVzaGluZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAppbmRleCAxY2VmMTM5Li4zY2Q5Y2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaApAQCAtNzAsNyArNzAsNiBAQAogCUFDUElfQlVTX1RZUEVfUE9XRVIsCiAJQUNQSV9CVVNfVFlQRV9QUk9DRVNTT1IsCiAJQUNQSV9CVVNfVFlQRV9USEVSTUFMLAotCUFDUElfQlVTX1RZUEVfU1lTVEVNLAogCUFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OLAogCUFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OLAogCUFDUElfQlVTX0RFVklDRV9UWVBFX0NPVU5UCkBAIC0xNDIsMTAgKzE0MSw3IEBACiAKIHN0cnVjdCBhY3BpX2RldmljZV9mbGFncyB7CiAJdTMyIGR5bmFtaWNfc3RhdHVzOjE7Ci0JdTMyIGhhcmR3YXJlX2lkOjE7Ci0JdTMyIGNvbXBhdGlibGVfaWRzOjE7CiAJdTMyIGJ1c19hZGRyZXNzOjE7Ci0JdTMyIHVuaXF1ZV9pZDoxOwogCXUzMiByZW1vdmFibGU6MTsKIAl1MzIgZWplY3RhYmxlOjE7CiAJdTMyIGxvY2thYmxlOjE7CkBAIC0xNTQsNyArMTUwLDcgQEAKIAl1MzIgcGVyZm9ybWFuY2VfbWFuYWdlYWJsZToxOwogCXUzMiB3YWtlX2NhcGFibGU6MTsJLyogV2FrZXVwKF9QUlcpIHN1cHBvcnRlZD8gKi8KIAl1MzIgZm9yY2VfcG93ZXJfc3RhdGU6MTsKLQl1MzIgcmVzZXJ2ZWQ6MTk7CisJdTMyIHJlc2VydmVkOjIyOwogfTsKIAogLyogRmlsZSBTeXN0ZW0gKi8KQEAgLTE3MiwyMCArMTY4LDIzIEBACiB0eXBlZGVmIGNoYXIgYWNwaV9kZXZpY2VfbmFtZVs0MF07CiB0eXBlZGVmIGNoYXIgYWNwaV9kZXZpY2VfY2xhc3NbMjBdOwogCitzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNoYXIgKmlkOworfTsKKwogc3RydWN0IGFjcGlfZGV2aWNlX3BucCB7CiAJYWNwaV9idXNfaWQgYnVzX2lkOwkvKiBPYmplY3QgbmFtZSAqLwogCWFjcGlfYnVzX2FkZHJlc3MgYnVzX2FkZHJlc3M7CS8qIF9BRFIgKi8KLQljaGFyICpoYXJkd2FyZV9pZDsJLyogX0hJRCAqLwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OwkvKiBfQ0lEcyAqLwogCWNoYXIgKnVuaXF1ZV9pZDsJLyogX1VJRCAqLworCXN0cnVjdCBsaXN0X2hlYWQgaWRzOwkJLyogX0hJRCBhbmQgX0NJRHMgKi8KIAlhY3BpX2RldmljZV9uYW1lIGRldmljZV9uYW1lOwkvKiBEcml2ZXItZGV0ZXJtaW5lZCAqLwogCWFjcGlfZGV2aWNlX2NsYXNzIGRldmljZV9jbGFzczsJLyogICAgICAgICIgICAgICAgICAgKi8KIH07CiAKICNkZWZpbmUgYWNwaV9kZXZpY2VfYmlkKGQpCSgoZCktPnBucC5idXNfaWQpCiAjZGVmaW5lIGFjcGlfZGV2aWNlX2FkcihkKQkoKGQpLT5wbnAuYnVzX2FkZHJlc3MpCi0jZGVmaW5lIGFjcGlfZGV2aWNlX2hpZChkKQkoKGQpLT5wbnAuaGFyZHdhcmVfaWQpCi0jZGVmaW5lIGFjcGlfZGV2aWNlX3VpZChkKQkoKGQpLT5wbnAudW5pcXVlX2lkKQorY2hhciAqYWNwaV9kZXZpY2VfaGlkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKICNkZWZpbmUgYWNwaV9kZXZpY2VfbmFtZShkKQkoKGQpLT5wbnAuZGV2aWNlX25hbWUpCiAjZGVmaW5lIGFjcGlfZGV2aWNlX2NsYXNzKGQpCSgoZCktPnBucC5kZXZpY2VfY2xhc3MpCiAKQEAgLTI2Miw3ICsyNjEsOCBAQAogLyogRGV2aWNlICovCiAKIHN0cnVjdCBhY3BpX2RldmljZSB7Ci0JYWNwaV9oYW5kbGUgaGFuZGxlOworCWludCBkZXZpY2VfdHlwZTsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CQkvKiBubyBoYW5kbGUgZm9yIGZpeGVkIGhhcmR3YXJlICovCiAJc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CkBAIC0zMjIsNiArMzIyLDggQEAKIAogaW50IGFjcGlfYnVzX2dldF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKipkZXZpY2UpOwogdm9pZCBhY3BpX2J1c19kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCB2b2lkICpjb250ZXh0KTsKK2FjcGlfc3RhdHVzIGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzdGEpOwogaW50IGFjcGlfYnVzX2dldF9zdGF0dXMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogaW50IGFjcGlfYnVzX2dldF9wb3dlcihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqc3RhdGUpOwogaW50IGFjcGlfYnVzX3NldF9wb3dlcihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggMGMzZGQ4Ni4uNDk1ZGM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaApAQCAtNzMsMTQgKzczLDIzIEBACiAjZGVmaW5lIEZfU0VUU0lHCTEwCS8qIGZvciBzb2NrZXRzLiAqLwogI2RlZmluZSBGX0dFVFNJRwkxMQkvKiBmb3Igc29ja2V0cy4gKi8KICNlbmRpZgorCisjaWZuZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBGX0dFVExLNjQKKyNkZWZpbmUgRl9HRVRMSzY0CTEyCS8qICB1c2luZyAnc3RydWN0IGZsb2NrNjQnICovCisjZGVmaW5lIEZfU0VUTEs2NAkxMworI2RlZmluZSBGX1NFVExLVzY0CTE0CisjZW5kaWYKKyNlbmRpZgorCiAjaWZuZGVmIEZfU0VUT1dOX0VYCi0jZGVmaW5lIEZfU0VUT1dOX0VYCTEyCi0jZGVmaW5lIEZfR0VUT1dOX0VYCTEzCisjZGVmaW5lIEZfU0VUT1dOX0VYCTE1CisjZGVmaW5lIEZfR0VUT1dOX0VYCTE2CiAjZW5kaWYKIAogI2RlZmluZSBGX09XTkVSX1RJRAkwCiAjZGVmaW5lIEZfT1dORVJfUElECTEKLSNkZWZpbmUgRl9PV05FUl9HSUQJMgorI2RlZmluZSBGX09XTkVSX1BHUlAJMgogCiBzdHJ1Y3QgZl9vd25lcl9leCB7CiAJaW50CXR5cGU7CkBAIC0xMzksMTIgKzE0OCw2IEBACiAKICNpZm5kZWYgQ09ORklHXzY0QklUCiAKLSNpZm5kZWYgRl9HRVRMSzY0Ci0jZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLwotI2RlZmluZSBGX1NFVExLNjQJMTMKLSNkZWZpbmUgRl9TRVRMS1c2NAkxNAotI2VuZGlmCi0KICNpZm5kZWYgSEFWRV9BUkNIX1NUUlVDVF9GTE9DSzY0CiAjaWZuZGVmIF9fQVJDSF9GTE9DSzY0X1BBRAogI2RlZmluZSBfX0FSQ0hfRkxPQ0s2NF9QQUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKaW5kZXggOWNjYTM3ODUuLjY2ZDYxMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfQVNNX0dFTkVSSUNfR1BJT19ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19HUElPX0gKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaAppbmRleCAyM2JiNGRhLi42MmY1OTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaApAQCAtNiw3ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgX19zb2Z0aXJxX3BlbmRpbmc7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKIAogI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggMjljYThmNS4uYjZlODE4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtNzIxLDEyICs3MjEsMTIgQEAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsJCQkJCQlcCiAJLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CQkJCVwKIAkJSU5JVF9UQVNLX0RBVEEoaW5pdHRhc2spCQkJCVwKKwkJTk9TQVZFX0RBVEEJCQkJCQlcCisJCVBBR0VfQUxJR05FRF9EQVRBKHBhZ2VhbGlnbmVkKQkJCQlcCiAJCUNBQ0hFTElORV9BTElHTkVEX0RBVEEoY2FjaGVsaW5lKQkJCVwKIAkJUkVBRF9NT1NUTFlfREFUQShjYWNoZWxpbmUpCQkJCVwKIAkJREFUQV9EQVRBCQkJCQkJXAogCQlDT05TVFJVQ1RPUlMJCQkJCQlcCi0JCU5PU0FWRV9EQVRBCQkJCQkJXAotCQlQQUdFX0FMSUdORURfREFUQShwYWdlYWxpZ25lZCkJCQkJXAogCX0KIAogI2RlZmluZSBJTklUX1RFWFRfU0VDVElPTihpbml0dGV4dF9hbGlnbikJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggYWUxZTllMS4uYjY5MzQ3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC0zODcsNiArMzg3LDcgQEAKICAqIEBnZXRfbW9kZXM6IGdldCBtb2RlIGxpc3QgZm9yIHRoaXMgY29ubmVjdG9yCiAgKiBAc2V0X3Byb3BlcnR5OiBwcm9wZXJ0eSBmb3IgdGhpcyBjb25uZWN0b3IgbWF5IG5lZWQgdXBkYXRlCiAgKiBAZGVzdHJveTogbWFrZSBvYmplY3QgZ28gYXdheQorICogQGZvcmNlOiBub3RpZnkgdGhlIGRyaXZlciB0aGUgY29ubmVjdG9yIGlzIGZvcmNlZCBvbgogICoKICAqIEVhY2ggQ1JUQyBtYXkgaGF2ZSBvbmUgb3IgbW9yZSBjb25uZWN0b3JzIGF0dGFjaGVkIHRvIGl0LiAgVGhlIGZ1bmN0aW9ucwogICogYmVsb3cgYWxsb3cgdGhlIGNvcmUgRFJNIGNvZGUgdG8gY29udHJvbCBjb25uZWN0b3JzLCBlbnVtZXJhdGUgYXZhaWxhYmxlIG1vZGVzLApAQCAtNDAxLDYgKzQwMiw3IEBACiAJaW50ICgqc2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKIAkJCSAgICAgdWludDY0X3QgdmFsKTsKIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJdm9pZCAoKmZvcmNlKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIH07CiAKIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB7CkBAIC00MjksNiArNDMxLDEzIEBACiAJdm9pZCAqaGVscGVyX3ByaXZhdGU7CiB9OwogCitlbnVtIGRybV9jb25uZWN0b3JfZm9yY2UgeworCURSTV9GT1JDRV9VTlNQRUNJRklFRCwKKwlEUk1fRk9SQ0VfT0ZGLAorCURSTV9GT1JDRV9PTiwgICAgICAgICAvKiBmb3JjZSBvbiBhbmFsb2cgcGFydCBub3JtYWxseSAqLworCURSTV9GT1JDRV9PTl9ESUdJVEFMLCAvKiBmb3IgRFZJLUkgdXNlIGRpZ2l0YWwgY29ubmVjdG9yICovCit9OworCiAvKioKICAqIGRybV9jb25uZWN0b3IgLSBjZW50cmFsIERSTSBjb25uZWN0b3IgY29udHJvbCBzdHJ1Y3R1cmUKICAqIEBjcnRjOiBDUlRDIHRoaXMgY29ubmVjdG9yIGlzIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8sIE5VTEwgaWYgbm9uZQpAQCAtNDc4LDkgKzQ4NywxMiBAQAogCiAJdm9pZCAqaGVscGVyX3ByaXZhdGU7CiAKKwkvKiBmb3JjZWQgb24gY29ubmVjdG9yICovCisJZW51bSBkcm1fY29ubmVjdG9yX2ZvcmNlIGZvcmNlOwogCXVpbnQzMl90IGVuY29kZXJfaWRzW0RSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVJdOwogCXVpbnQzMl90IGZvcmNlX2VuY29kZXJfaWQ7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOyAvKiBjdXJyZW50bHkgYWN0aXZlIGVuY29kZXIgKi8KKwl2b2lkICpmYl9oZWxwZXJfcHJpdmF0ZTsKIH07CiAKIC8qKgpAQCAtNzQ2LDcgKzc1OCw3IEBACiBleHRlcm4gYm9vbCBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihzdHJ1Y3QgZWRpZCAqZWRpZCk7CiBleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9jdnRfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCWludCBoZGlzcGxheSwgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCi0JCQkJYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQpOworCQkJCWJvb2wgcmVkdWNlZCwgYm9vbCBpbnRlcmxhY2VkLCBib29sIG1hcmdpbnMpOwogZXh0ZXJuIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fZ3RmX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQlpbnQgaGRpc3BsYXksIGludCB2ZGlzcGxheSwgaW50IHZyZWZyZXNoLAogCQkJCWJvb2wgaW50ZXJsYWNlZCwgaW50IG1hcmdpbnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaAppbmRleCA0YzhkYWNhLi5iMjllMjAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaApAQCAtMzksNiArMzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZmIuaD4KIAorI2luY2x1ZGUgImRybV9mYl9oZWxwZXIuaCIKIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgewogCS8qCiAJICogQ29udHJvbCBwb3dlciBsZXZlbHMgb24gdGhlIENSVEMuICBJZiB0aGUgbW9kZSBwYXNzZWQgaW4gaXMKQEAgLTYwLDYgKzYxLDkgQEAKIAkvKiBNb3ZlIHRoZSBjcnRjIG9uIHRoZSBjdXJyZW50IGZiIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiAqb3B0aW9uYWwqICovCiAJaW50ICgqbW9kZV9zZXRfYmFzZSkoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHksCiAJCQkgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYik7CisKKwkvKiByZWxvYWQgdGhlIGN1cnJlbnQgY3J0YyBMVVQgKi8KKwl2b2lkICgqbG9hZF9sdXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiB9OwogCiBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHsKQEAgLTExOSwxMCArMTIzLDExIEBACiAJZW5jb2Rlci0+aGVscGVyX3ByaXZhdGUgPSAodm9pZCAqKWZ1bmNzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCitzdGF0aWMgaW5saW5lIGludCBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAqZnVuY3MpCiB7CiAJY29ubmVjdG9yLT5oZWxwZXJfcHJpdmF0ZSA9ICh2b2lkICopZnVuY3M7CisJcmV0dXJuIGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogfQogCiBleHRlcm4gaW50IGRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKaW5kZXggODhmZmZiZC4uNThjODkyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaApAQCAtMzUsOSArMzUsMzAgQEAKIAlzdHJ1Y3QgZHJtX21vZGVfc2V0IG1vZGVfc2V0OwogfTsKIAorCiBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB7CiAJdm9pZCAoKmdhbW1hX3NldCkoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkgIHUxNiBibHVlLCBpbnQgcmVnbm8pOworCXZvaWQgKCpnYW1tYV9nZXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKTsKK307CisKKy8qIG1vZGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KK3N0cnVjdCBkcm1fZmJfaGVscGVyX2NtZGxpbmVfbW9kZSB7CisJYm9vbCBzcGVjaWZpZWQ7CisJYm9vbCByZWZyZXNoX3NwZWNpZmllZDsKKwlib29sIGJwcF9zcGVjaWZpZWQ7CisJaW50IHhyZXMsIHlyZXM7CisJaW50IGJwcDsKKwlpbnQgcmVmcmVzaDsKKwlib29sIHJiOworCWJvb2wgaW50ZXJsYWNlOworCWJvb2wgY3Z0OworCWJvb2wgbWFyZ2luczsKK307CisKK3N0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciB7CisJc3RydWN0IGRybV9mYl9oZWxwZXJfY21kbGluZV9tb2RlIGNtZGxpbmVfbW9kZTsKIH07CiAKIHN0cnVjdCBkcm1fZmJfaGVscGVyIHsKQEAgLTUyLDExICs3MywxNCBAQAogfTsKIAogaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICBpbnQgcHJlZmVycmVkX2JwcCwKIAkJCQkgIGludCAoKmZiX2NyZWF0ZSkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJCSAgIHVpbnQzMl90IGZiX3dpZHRoLAogCQkJCQkJICAgdWludDMyX3QgZmJfaGVpZ2h0LAogCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV93aWR0aCwKIAkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9kZXB0aCwKKwkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2VfYnBwLAogCQkJCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3B0cikpOwogaW50IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsIGludCBjcnRjX2NvdW50LAogCQkJCSAgaW50IG1heF9jb25uKTsKQEAgLTc3LDYgKzEwMSwxMSBAQAogdm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmUodm9pZCk7CiB2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF92YXIoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJICAgIHVpbnQzMl90IGZiX3dpZHRoLCB1aW50MzJfdCBmYl9oZWlnaHQpOwotdm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1aW50MzJfdCBwaXRjaCk7Cit2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IHBpdGNoLAorCQkJICAgIHVpbnQzMl90IGRlcHRoKTsKKworaW50IGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKK2ludCBkcm1fZmJfaGVscGVyX3BhcnNlX2NvbW1hbmRfbGluZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBkcm1fZmJfaGVscGVyX3NldGNtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggM2Y2ZTU0NS4uZTZmM2IxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtODAsNyArODAsNyBAQAogCXsweDEwMDIsIDB4NTE1OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjIwMH0sIFwKIAl7MHgxMDAyLCAweDUxNTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB9LCBcCiAJezB4MTAwMiwgMHg1MTVBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAotCXsweDEwMDIsIDB4NTE1RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMH0sIFwKKwl7MHgxMDAyLCAweDUxNUUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB8UkFERU9OX1NJTkdMRV9DUlRDfSwgXAogCXsweDEwMDIsIDB4NTQ2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1NDYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKIAl7MHgxMDAyLCAweDU0NjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXApAQCAtMTEzLDcgKzExMyw3IEBACiAJezB4MTAwMiwgMHg1OTYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfSwgXAogCXsweDEwMDIsIDB4NTk2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKIAl7MHgxMDAyLCAweDU5NjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCi0JezB4MTAwMiwgMHg1OTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAorCXsweDEwMDIsIDB4NTk2OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMHxSQURFT05fU0lOR0xFX0NSVEN9LCBcCiAJezB4MTAwMiwgMHg1YTQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg1YTQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9JU19JR1BHQVJUfSwgXAogCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19JR1BHQVJUfSwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCBjZmY0YTEwLi4xZmVlZDcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMTI2LDYgKzEyNiw3IEBACiBoZWFkZXIteSArPSBubDgwMjExLmgKIGhlYWRlci15ICs9IHBhcmFtLmgKIGhlYWRlci15ICs9IHBjaV9yZWdzLmgKK2hlYWRlci15ICs9IHBlcmZfZXZlbnQuaAogaGVhZGVyLXkgKz0gcGZrZXl2Mi5oCiBoZWFkZXIteSArPSBwZy5oCiBoZWFkZXIteSArPSBwaGFudG9tLmgKQEAgLTM2Myw2ICszNjQsNyBAQAogdW5pZmRlZi15ICs9IHZpZGVvZGV2Mi5oCiB1bmlmZGVmLXkgKz0gdmlkZW9kZXYuaAogdW5pZmRlZi15ICs9IHZpcnRpb19jb25maWcuaAordW5pZmRlZi15ICs9IHZpcnRpb19pZHMuaAogdW5pZmRlZi15ICs9IHZpcnRpb19ibGsuaAogdW5pZmRlZi15ICs9IHZpcnRpb19uZXQuaAogdW5pZmRlZi15ICs9IHZpcnRpb185cC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmggYi9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmgKaW5kZXggODgwMTMwZi4uOTEwMWVkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZ3BfYmFja2VuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaApAQCAtNTMsNyArNTMsNyBAQAogCWludCBjdXJyZW50X21lbW9yeTsKIAlib29sIGNhbnRfdXNlX2FwZXJ0dXJlOwogCXVuc2lnbmVkIGxvbmcgcGFnZV9tYXNrOwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOworCWNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCnNpbWlsYXJpdHkgaW5kZXggNjMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvYW1iYS9tbWNpLmgKaW5kZXggYjQ5MGVjYy4uNmI0MjQxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCkBAIC0xLDE3ICsxLDE4IEBACiAvKgotICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmgKKyAqICBpbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCiAgKi8KLSNpZm5kZWYgQVNNQVJNX01BQ0hfTU1DX0gKLSNkZWZpbmUgQVNNQVJNX01BQ0hfTU1DX0gKKyNpZm5kZWYgQU1CQV9NTUNJX0gKKyNkZWZpbmUgQU1CQV9NTUNJX0gKIAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAKLXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSB7CitzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQgb2NyX21hc2s7CQkJLyogYXZhaWxhYmxlIHZvbHRhZ2VzICovCiAJdTMyICgqdHJhbnNsYXRlX3ZkZCkoc3RydWN0IGRldmljZSAqLCB1bnNpZ25lZCBpbnQpOwogCXVuc2lnbmVkIGludCAoKnN0YXR1cykoc3RydWN0IGRldmljZSAqKTsKIAlpbnQJZ3Bpb193cDsKIAlpbnQJZ3Bpb19jZDsKKwl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllczsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWJhL3BsMDIyLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvcGwwMjIuaAppbmRleCBkY2FkMGZmLi5lNDgzNmM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hbWJhL3BsMDIyLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL3BsMDIyLmgKQEAgLTEzNiwxMiArMTM2LDEyIEBACiAKIC8qKgogICogZW51bSBTUEkgQ2xvY2sgUGhhc2UgLSBjbG9jayBwaGFzZSAoTW90b3JvbGEgU1BJIGludGVyZmFjZSBvbmx5KQotICogQFNTUF9DTEtfUklTSU5HX0VER0U6IFJlY2VpdmUgZGF0YSBvbiByaXNpbmcgZWRnZQotICogQFNTUF9DTEtfRkFMTElOR19FREdFOiBSZWNlaXZlIGRhdGEgb24gZmFsbGluZyBlZGdlCisgKiBAU1NQX0NMS19GSVJTVF9FREdFOiBSZWNlaXZlIGRhdGEgb24gZmlyc3QgZWRnZSB0cmFuc2l0aW9uIChhY3R1YWwgZGlyZWN0aW9uIGRlcGVuZHMgb24gcG9sYXJpdHkpCisgKiBAU1NQX0NMS19TRUNPTkRfRURHRTogUmVjZWl2ZSBkYXRhIG9uIHNlY29uZCBlZGdlIHRyYW5zaXRpb24gKGFjdHVhbCBkaXJlY3Rpb24gZGVwZW5kcyBvbiBwb2xhcml0eSkKICAqLwogZW51bSBzc3Bfc3BpX2Nsa19waGFzZSB7Ci0JU1NQX0NMS19SSVNJTkdfRURHRSwKLQlTU1BfQ0xLX0ZBTExJTkdfRURHRQorCVNTUF9DTEtfRklSU1RfRURHRSwKKwlTU1BfQ0xLX1NFQ09ORF9FREdFCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRhLmggYi9pbmNsdWRlL2xpbnV4L2F0YS5oCmluZGV4IDYyOTlhMjUuLjRmYjM1NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdGEuaApAQCAtMzM0LDkgKzMzNCwxMiBAQAogCVNFVEZFQVRVUkVTX1NBVEFfRElTQUJMRSA9IDB4OTAsIC8qIERpc2FibGUgdXNlIG9mIFNBVEEgZmVhdHVyZSAqLwogCiAJLyogU0VURkVBVFVSRSBTZWN0b3IgY291bnRzIGZvciBTQVRBIGZlYXR1cmVzICovCi0JU0FUQV9BTgkJCT0gMHgwNSwgIC8qIEFzeW5jaHJvbm91cyBOb3RpZmljYXRpb24gKi8KLQlTQVRBX0RJUE0JCT0gMHgwMywgIC8qIERldmljZSBJbml0aWF0ZWQgUG93ZXIgTWFuYWdlbWVudCAqLwotCVNBVEFfRlBETUFfQUEJCT0gMHgwMiwgIC8qIERNQSBTZXR1cCBGSVMgQXV0by1BY3RpdmF0ZSAqLworCVNBVEFfRlBETUFfT0ZGU0VUCT0gMHgwMSwJLyogRlBETUEgbm9uLXplcm8gYnVmZmVyIG9mZnNldHMgKi8KKwlTQVRBX0ZQRE1BX0FBCQk9IDB4MDIsIC8qIEZQRE1BIFNldHVwIEZJUyBBdXRvLUFjdGl2YXRlICovCisJU0FUQV9ESVBNCQk9IDB4MDMsCS8qIERldmljZSBJbml0aWF0ZWQgUG93ZXIgTWFuYWdlbWVudCAqLworCVNBVEFfRlBETUFfSU5fT1JERVIJPSAweDA0LAkvKiBGUERNQSBpbi1vcmRlciBkYXRhIGRlbGl2ZXJ5ICovCisJU0FUQV9BTgkJCT0gMHgwNSwJLyogQXN5bmNocm9ub3VzIE5vdGlmaWNhdGlvbiAqLworCVNBVEFfU1NQCQk9IDB4MDYsCS8qIFNvZnR3YXJlIFNldHRpbmdzIFByZXNlcnZhdGlvbiAqLwogCiAJLyogZmVhdHVyZSB2YWx1ZXMgZm9yIFNFVF9NQVggKi8KIAlBVEFfU0VUX01BWF9BRERSCT0gMHgwMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaCBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAppbmRleCAwZWUzM2MyLi5iNDQ5ZTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCkBAIC0xMDEsNyArMTAxLDggQEAKIAkJY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IGJkaV9yZWdpc3Rlcl9kZXYoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgZGV2X3QgZGV2KTsKIHZvaWQgYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7Ci12b2lkIGJkaV9zdGFydF93cml0ZWJhY2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgbG9uZyBucl9wYWdlcyk7Cit2b2lkIGJkaV9zdGFydF93cml0ZWJhY2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQlsb25nIG5yX3BhZ2VzKTsKIGludCBiZGlfd3JpdGViYWNrX3Rhc2soc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKTsKIGludCBiZGlfaGFzX2RpcnR5X2lvKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaAppbmRleCA3OWNhMmRhLi4wZjVmNTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKQEAgLTI3LDYgKzI3LDExIEBACiAgKiBBbnkgb3RoZXIgdXNlIG9mIHRoZSBsb2NrcyBiZWxvdyBpcyBwcm9iYWJseSB3cm9uZy4KICAqLwogCitlbnVtIGJhY2tsaWdodF91cGRhdGVfcmVhc29uIHsKKwlCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSwKKwlCQUNLTElHSFRfVVBEQVRFX1NZU0ZTLAorfTsKKwogc3RydWN0IGJhY2tsaWdodF9kZXZpY2U7CiBzdHJ1Y3QgZmJfaW5mbzsKIApAQCAtMTAwLDYgKzEwNSw4IEBACiBleHRlcm4gc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwKIAlzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRldmRhdGEsIHN0cnVjdCBiYWNrbGlnaHRfb3BzICpvcHMpOwogZXh0ZXJuIHZvaWQgYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCk7CitleHRlcm4gdm9pZCBiYWNrbGlnaHRfZm9yY2VfdXBkYXRlKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCwKKwkJCQkgICBlbnVtIGJhY2tsaWdodF91cGRhdGVfcmVhc29uIHJlYXNvbik7CiAKICNkZWZpbmUgdG9fYmFja2xpZ2h0X2RldmljZShvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlLCBkZXYpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IGUyM2E4NmMuLjIyMWNlY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtODIsNyArODIsNiBAQAogZW51bSB7CiAJUkVRX0xCX09QX0VKRUNUCT0gMHg0MCwJCS8qIGVqZWN0IHJlcXVlc3QgKi8KIAlSRVFfTEJfT1BfRkxVU0ggPSAweDQxLAkJLyogZmx1c2ggcmVxdWVzdCAqLwotCVJFUV9MQl9PUF9ESVNDQVJEID0gMHg0MiwJLyogZGlzY2FyZCBzZWN0b3JzICovCiB9OwogCiAvKgpAQCAtMjYxLDcgKzI2MCw2IEBACiB0eXBlZGVmIGludCAobWFrZV9yZXF1ZXN0X2ZuKSAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyk7CiB0eXBlZGVmIGludCAocHJlcF9ycV9mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogdHlwZWRlZiB2b2lkICh1bnBsdWdfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKLXR5cGVkZWYgaW50IChwcmVwYXJlX2Rpc2NhcmRfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIAogc3RydWN0IGJpb192ZWM7CiBzdHJ1Y3QgYnZlY19tZXJnZV9kYXRhIHsKQEAgLTMxMyw2ICszMTEsNyBAQAogCXVuc2lnbmVkIGludAkJYWxpZ25tZW50X29mZnNldDsKIAl1bnNpZ25lZCBpbnQJCWlvX21pbjsKIAl1bnNpZ25lZCBpbnQJCWlvX29wdDsKKwl1bnNpZ25lZCBpbnQJCW1heF9kaXNjYXJkX3NlY3RvcnM7CiAKIAl1bnNpZ25lZCBzaG9ydAkJbG9naWNhbF9ibG9ja19zaXplOwogCXVuc2lnbmVkIHNob3J0CQltYXhfaHdfc2VnbWVudHM7CkBAIC0zNDAsNyArMzM5LDYgQEAKIAltYWtlX3JlcXVlc3RfZm4JCSptYWtlX3JlcXVlc3RfZm47CiAJcHJlcF9ycV9mbgkJKnByZXBfcnFfZm47CiAJdW5wbHVnX2ZuCQkqdW5wbHVnX2ZuOwotCXByZXBhcmVfZGlzY2FyZF9mbgkqcHJlcGFyZV9kaXNjYXJkX2ZuOwogCW1lcmdlX2J2ZWNfZm4JCSptZXJnZV9idmVjX2ZuOwogCXByZXBhcmVfZmx1c2hfZm4JKnByZXBhcmVfZmx1c2hfZm47CiAJc29mdGlycV9kb25lX2ZuCQkqc29mdGlycV9kb25lX2ZuOwpAQCAtNDYwLDYgKzQ1OCw3IEBACiAjZGVmaW5lIFFVRVVFX0ZMQUdfVklSVCAgICAgICAgUVVFVUVfRkxBR19OT05ST1QgLyogcGFyYXZpcnQgZGV2aWNlICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfSU9fU1RBVCAgICAgMTUJLyogZG8gSU8gc3RhdHMgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19DUQkgICAgICAgMTYJLyogaGFyZHdhcmUgZG9lcyBxdWV1aW5nICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRElTQ0FSRCAgICAgMTcJLyogc3VwcG9ydHMgRElTQ0FSRCAqLwogCiAjZGVmaW5lIFFVRVVFX0ZMQUdfREVGQVVMVAkoKDEgPDwgUVVFVUVfRkxBR19JT19TVEFUKSB8CQlcCiAJCQkJICgxIDw8IFFVRVVFX0ZMQUdfQ0xVU1RFUikgfAkJXApAQCAtNTkxLDYgKzU5MCw3IEBACiAjZGVmaW5lIGJsa19xdWV1ZV9mbHVzaGluZyhxKQkoKHEpLT5vcmRzZXEpCiAjZGVmaW5lIGJsa19xdWV1ZV9zdGFja2FibGUocSkJXAogCXRlc3RfYml0KFFVRVVFX0ZMQUdfU1RBQ0tBQkxFLCAmKHEpLT5xdWV1ZV9mbGFncykKKyNkZWZpbmUgYmxrX3F1ZXVlX2Rpc2NhcmQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19ESVNDQVJELCAmKHEpLT5xdWV1ZV9mbGFncykKIAogI2RlZmluZSBibGtfZnNfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQogI2RlZmluZSBibGtfcGNfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKQpAQCAtOTI5LDYgKzkyOSw4IEBACiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCXVuc2lnbmVkIGludCBtYXhfZGlzY2FyZF9zZWN0b3JzKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3BoeXNpY2FsX2Jsb2NrX3NpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2FsaWdubWVudF9vZmZzZXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCkBAIC05NTUsNyArOTU3LDYgQEAKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9zb2Z0aXJxX2RvbmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc29mdGlycV9kb25lX2ZuICopOwotZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3NldF9kaXNjYXJkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHByZXBhcmVfZGlzY2FyZF9mbiAqKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9ycV90aW1lZF9vdXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgcnFfdGltZWRfb3V0X2ZuICopOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmxrX2dldF9iYWNraW5nX2Rldl9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwpAQCAtMTA4MCwyNSArMTA4MSwzNyBAQAogCXJldHVybiBxLT5saW1pdHMucGh5c2ljYWxfYmxvY2tfc2l6ZTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9waHlzaWNhbF9ibG9ja19zaXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJcmV0dXJuIHF1ZXVlX3BoeXNpY2FsX2Jsb2NrX3NpemUoYmRldl9nZXRfcXVldWUoYmRldikpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxdWV1ZV9pb19taW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJcmV0dXJuIHEtPmxpbWl0cy5pb19taW47CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGJkZXZfaW9fbWluKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJcmV0dXJuIHF1ZXVlX2lvX21pbihiZGV2X2dldF9xdWV1ZShiZGV2KSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHF1ZXVlX2lvX29wdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlyZXR1cm4gcS0+bGltaXRzLmlvX29wdDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9pb19vcHQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gcXVldWVfaW9fb3B0KGJkZXZfZ2V0X3F1ZXVlKGJkZXYpKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgcXVldWVfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlpZiAocSAmJiBxLT5saW1pdHMubWlzYWxpZ25lZCkKKwlpZiAocS0+bGltaXRzLm1pc2FsaWduZWQpCiAJCXJldHVybiAtMTsKIAotCWlmIChxICYmIHEtPmxpbWl0cy5hbGlnbm1lbnRfb2Zmc2V0KQotCQlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX3NlY3Rvcl9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLApAQCAtMTEwOCw2ICsxMTIxLDE5IEBACiAJCSYgKHEtPmxpbWl0cy5pb19taW4gLSAxKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKKworCWlmIChxLT5saW1pdHMubWlzYWxpZ25lZCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpCisJCXJldHVybiBiZGV2LT5iZF9wYXJ0LT5hbGlnbm1lbnRfb2Zmc2V0OworCisJcmV0dXJuIHEtPmxpbWl0cy5hbGlnbm1lbnRfb2Zmc2V0OworfQorCiBzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9kbWFfYWxpZ25tZW50KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCXJldHVybiBxID8gcS0+ZG1hX2FsaWdubWVudCA6IDUxMTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCmluZGV4IDdlNDM1MGUuLjNiNzNiOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaApAQCAtMTk4LDYgKzE5OCw3IEBACiAJCQkgICBjaGFyIF9fdXNlciAqYXJnKTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3JlbW92ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CitleHRlcm4gdm9pZCBibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGJsa190cmFjZV9pbml0X3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIGV4dGVybiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGJsa190cmFjZV9hdHRyX2dyb3VwOwpAQCAtMjExLDYgKzIxMiw3IEBACiAjIGRlZmluZSBibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KQkJCSgtRU5PVFRZKQogIyBkZWZpbmUgYmxrX3RyYWNlX3JlbW92ZShxKQkJCQkoLUVOT1RUWSkKICMgZGVmaW5lIGJsa19hZGRfdHJhY2VfbXNnKHEsIGZtdCwgLi4uKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGJsa190cmFjZV9yZW1vdmVfc3lzZnMoZGV2KQkJCWRvIHsgfSB3aGlsZSAoMCkKIHN0YXRpYyBpbmxpbmUgaW50IGJsa190cmFjZV9pbml0X3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IGI2MmJiOTIuLjAwMDhkZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtMzcsNyArMzcsNyBAQAogZXh0ZXJuIGludCBjZ3JvdXBzdGF0c19idWlsZChzdHJ1Y3QgY2dyb3Vwc3RhdHMgKnN0YXRzLAogCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3VwX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cF9vcGVyYXRpb25zOwogCiAvKiBEZWZpbmUgdGhlIGVudW1lcmF0aW9uIG9mIGFsbCBjZ3JvdXAgc3Vic3lzdGVtcyAqLwogI2RlZmluZSBTVUJTWVMoX3gpIF94ICMjIF9zdWJzeXNfaWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaCBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCmluZGV4IDQ0NzE3ZWIuLjc5YTIzNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCkBAIC0yOTEsOCArMjkxLDE1IEBACiBpbnQgY3B1ZnJlcV9nZXRfcG9saWN5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgY3B1KTsKIGludCBjcHVmcmVxX3VwZGF0ZV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSk7CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIC8qIHF1ZXJ5IHRoZSBjdXJyZW50IENQVSBmcmVxdWVuY3kgKGluIGtIeikuIElmIHplcm8sIGNwdWZyZXEgY291bGRuJ3QgZGV0ZWN0IGl0ICovCiB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSk7CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKiBxdWVyeSB0aGUgbGFzdCBrbm93biBDUFUgZnJlcSAoaW4ga0h6KS4gSWYgemVybywgY3B1ZnJlcSBjb3VsZG4ndCBkZXRlY3QgaXQgKi8KICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGFjYTMxYmYuLjJlYTNlNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMTI0LDcgKzEyNCw5IEBACiAJc3RydWN0IGJ1c190eXBlCQkqYnVzOwogCiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwotCWNvbnN0IGNoYXIgCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8KKwljb25zdCBjaGFyCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8KKworCWJvb2wgc3VwcHJlc3NfYmluZF9hdHRyczsJLyogZGlzYWJsZXMgYmluZC91bmJpbmQgdmlhIHN5c2ZzICovCiAKIAlpbnQgKCpwcm9iZSkgKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJaW50ICgqcmVtb3ZlKSAoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmLmggYi9pbmNsdWRlL2xpbnV4L2VsZi5oCmluZGV4IDQ1YTkzN2IuLjkwYTRlZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxmLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGYuaApAQCAtMzYxLDYgKzM2MSw3IEBACiAjZGVmaW5lIE5UX1BQQ19WU1gJMHgxMDIJCS8qIFBvd2VyUEMgVlNYIHJlZ2lzdGVycyAqLwogI2RlZmluZSBOVF8zODZfVExTCTB4MjAwCQkvKiBpMzg2IFRMUyBzbG90cyAoc3RydWN0IHVzZXJfZGVzYykgKi8KICNkZWZpbmUgTlRfMzg2X0lPUEVSTQkweDIwMQkJLyogeDg2IGlvIHBlcm1pc3Npb24gYml0bWFwICgxPWRlbnkpICovCisjZGVmaW5lIE5UX1BSWFNUQVRVUwkweDMwMAkJLyogczM5MCB1cHBlciByZWdpc3RlciBoYWx2ZXMgKi8KIAogCiAvKiBOb3RlIGhlYWRlciBpbiBhIFBUX05PVEUgc2VjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKaW5kZXggY2ExYmZlOS4uOTNlNzQyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCkBAIC0xMzcsNiArMTM3LDE0IEBACiAJICogYnkgb3RoZXIgbWVhbnMsIHNvIHdlIGhhdmUgdHJ1bmNhdGVfbXV0ZXguCiAJICovCiAJc3RydWN0IG11dGV4IHRydW5jYXRlX211dGV4OworCisJLyoKKwkgKiBUcmFuc2FjdGlvbnMgdGhhdCBjb250YWluIGlub2RlJ3MgbWV0YWRhdGEgbmVlZGVkIHRvIGNvbXBsZXRlCisJICogZnN5bmMgYW5kIGZkYXRhc3luYywgcmVzcGVjdGl2ZWx5LgorCSAqLworCWF0b21pY190IGlfc3luY190aWQ7CisJYXRvbWljX3QgaV9kYXRhc3luY190aWQ7CisKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYi5oIGIvaW5jbHVkZS9saW51eC9mYi5oCmluZGV4IGY4NDdkZjkuLmRlOWM3MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZiLmgKQEAgLTEzMyw2ICsxMzMsNyBAQAogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIyMzAgOTYJLyogTmVvTWFnaWMgTk0yMjMwICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIzNjAgOTcJLyogTmVvTWFnaWMgTk0yMzYwICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIzODAgOTgJLyogTmVvTWFnaWMgTk0yMzgwICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9QWEEzWFgJCSA5OQkvKiBQWEEzeHgJCQkqLwogCiAjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTQgICAgICAgIDB4ODAJLyogUzMgU2F2YWdlNCAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UzRCAgICAgICAweDgxCS8qIFMzIFNhdmFnZTNEICAgICAgICAgICAgICAgICAgKi8KQEAgLTY2OCwxMiArNjY5LDYgQEAKIAkvKiBwZXJmb3JtIGZiIHNwZWNpZmljIG1tYXAgKi8KIAlpbnQgKCpmYl9tbWFwKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCi0JLyogc2F2ZSBjdXJyZW50IGhhcmR3YXJlIHN0YXRlICovCi0Jdm9pZCAoKmZiX3NhdmVfc3RhdGUpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLQotCS8qIHJlc3RvcmUgc2F2ZWQgc3RhdGUgKi8KLQl2b2lkICgqZmJfcmVzdG9yZV9zdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOwotCiAJLyogZ2V0IGNhcGFiaWxpdHkgZ2l2ZW4gdmFyICovCiAJdm9pZCAoKmZiX2dldF9jYXBzKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2JsaXRfY2FwcyAqY2FwcywKIAkJCSAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggMmFkYWEyNS4uMjYyMGE4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMzAwLDYgKzMwMCwxMCBAQAogI2RlZmluZSBCTEtUUkFDRVNUT1AgX0lPKDB4MTIsMTE3KQogI2RlZmluZSBCTEtUUkFDRVRFQVJET1dOIF9JTygweDEyLDExOCkKICNkZWZpbmUgQkxLRElTQ0FSRCBfSU8oMHgxMiwxMTkpCisjZGVmaW5lIEJMS0lPTUlOIF9JTygweDEyLDEyMCkKKyNkZWZpbmUgQkxLSU9PUFQgX0lPKDB4MTIsMTIxKQorI2RlZmluZSBCTEtBTElHTk9GRiBfSU8oMHgxMiwxMjIpCisjZGVmaW5lIEJMS1BCU1pHRVQgX0lPKDB4MTIsMTIzKQogCiAjZGVmaW5lIEJNQVBfSU9DVEwgMQkJLyogb2Jzb2xldGUgLSBrZXB0IGZvciBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIEZJQk1BUAkgICBfSU8oMHgwMCwxKQkvKiBibWFwIGFjY2VzcyAqLwpAQCAtMjQ0Niw3ICsyNDUwLDcgQEAKIAlfX3NpbXBsZV9hdHRyX2NoZWNrX2Zvcm1hdChfX2ZtdCwgMHVsbCk7CQkJXAogCXJldHVybiBzaW1wbGVfYXR0cl9vcGVuKGlub2RlLCBmaWxlLCBfX2dldCwgX19zZXQsIF9fZm10KTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fZm9wcyA9IHsJCQkJXAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19mb3BzID0gewkJCQlcCiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAkJCQkJCVwKIAkub3BlbgkgPSBfX2ZvcHMgIyMgX29wZW4sCQkJCQlcCiAJLnJlbGVhc2UgPSBzaW1wbGVfYXR0cl9yZWxlYXNlLAkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKaW5kZXggY2QzZDJhYi4uMGI0Zjk3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCkBAIC0yNDEsNyArMjQxLDcgQEAKICMgZGVmaW5lIGZ0cmFjZV9zZXRfZmlsdGVyKGJ1ZiwgbGVuLCByZXNldCkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgZnRyYWNlX2Rpc2FibGVfZGFlbW9uKCkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGZ0cmFjZV9lbmFibGVfZGFlbW9uKCkJCQlkbyB7IH0gd2hpbGUgKDApCi1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX3JlbGVhc2Uodm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX3JlbGVhc2VfbW9kKHN0cnVjdCBtb2R1bGUgKm1vZCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpjbWQpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmggYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKaW5kZXggOGVjMTc5OS4uMWU1YTI2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnV0ZXguaApAQCAtMzMsOCArMzMsOCBAQAogI2RlZmluZSBGVVRFWF9MT0NLX1BJX1BSSVZBVEUJKEZVVEVYX0xPQ0tfUEkgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCiAjZGVmaW5lIEZVVEVYX1VOTE9DS19QSV9QUklWQVRFCShGVVRFWF9VTkxPQ0tfUEkgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCiAjZGVmaW5lIEZVVEVYX1RSWUxPQ0tfUElfUFJJVkFURSAoRlVURVhfVFJZTE9DS19QSSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKLSNkZWZpbmUgRlVURVhfV0FJVF9CSVRTRVRfUFJJVkFURQkoRlVURVhfV0FJVF9CSVRTIHwgRlVURVhfUFJJVkFURV9GTEFHKQotI2RlZmluZSBGVVRFWF9XQUtFX0JJVFNFVF9QUklWQVRFCShGVVRFWF9XQUtFX0JJVFMgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCisjZGVmaW5lIEZVVEVYX1dBSVRfQklUU0VUX1BSSVZBVEUJKEZVVEVYX1dBSVRfQklUU0VUIHwgRlVURVhfUFJJVkFURV9GTEFHKQorI2RlZmluZSBGVVRFWF9XQUtFX0JJVFNFVF9QUklWQVRFCShGVVRFWF9XQUtFX0JJVFNFVCB8IEZVVEVYX1BSSVZBVEVfRkxBRykKICNkZWZpbmUgRlVURVhfV0FJVF9SRVFVRVVFX1BJX1BSSVZBVEUJKEZVVEVYX1dBSVRfUkVRVUVVRV9QSSB8IFwKIAkJCQkJIEZVVEVYX1BSSVZBVEVfRkxBRykKICNkZWZpbmUgRlVURVhfQ01QX1JFUVVFVUVfUElfUFJJVkFURQkoRlVURVhfQ01QX1JFUVVFVUVfUEkgfCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCmluZGV4IDExYWIxOWEuLjQxYTU5YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0zLDE1ICszLDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCitzdHJ1Y3QgY3RsX3RhYmxlOworc3RydWN0IHVzZXJfc3RydWN0OworCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKLXN0cnVjdCBjdGxfdGFibGU7Ci1zdHJ1Y3QgdXNlcl9zdHJ1Y3Q7Ci0KIGludCBQYWdlSHVnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3ZtX2h1Z2V0bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTE2Myw3ICsxNjMsNyBAQAogfQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7CiBzdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLCBpbnQgYWNjdCwKIAkJCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKip1c2VyLCBpbnQgY3JlYXRfZmxhZ3MpOwogaW50IGh1Z2V0bGJfZ2V0X3F1b3RhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb25nIGRlbHRhKTsKQEAgLTE4Nyw3ICsxODcsMTEgQEAKIAogI2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKQkJCTAKICNkZWZpbmUgc2V0X2ZpbGVfaHVnZXBhZ2VzKGZpbGUpCQlCVUcoKQotI2RlZmluZSBodWdldGxiX2ZpbGVfc2V0dXAobmFtZSxzaXplLGFjY3QsdXNlcixjcmVhdCkJRVJSX1BUUigtRU5PU1lTKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLAorCQlpbnQgYWNjdGZsYWcsIHN0cnVjdCB1c2VyX3N0cnVjdCAqKnVzZXIsIGludCBjcmVhdF9mbGFncykKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKK30KIAogI2VuZGlmIC8qICFDT05GSUdfSFVHRVRMQkZTICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDU3ZDQxYjAuLjdiNDBjZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtMzYxLDYgKzM2MSwyNCBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGRhdGEpOwogfQogCisvKioKKyAqIGkyY19sb2NrX2FkYXB0ZXIgLSBQcmV2ZW50IGFjY2VzcyB0byBhbiBJMkMgYnVzIHNlZ21lbnQKKyAqIEBhZGFwdGVyOiBUYXJnZXQgSTJDIGJ1cyBzZWdtZW50CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfbG9ja19hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7Cit9CisKKy8qKgorICogaTJjX3VubG9ja19hZGFwdGVyIC0gUmVhdXRob3JpemUgYWNjZXNzIHRvIGFuIEkyQyBidXMgc2VnbWVudAorICogQGFkYXB0ZXI6IFRhcmdldCBJMkMgYnVzIHNlZ21lbnQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGkyY191bmxvY2tfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7Cit9CisKIC8qZmxhZ3MgZm9yIHRoZSBjbGllbnQgc3RydWN0OiAqLwogI2RlZmluZSBJMkNfQ0xJRU5UX1BFQwkweDA0CQkvKiBVc2UgUGFja2V0IEVycm9yIENoZWNraW5nICovCiAjZGVmaW5lIEkyQ19DTElFTlRfVEVOCTB4MTAJCS8qIHdlIGhhdmUgYSB0ZW4gYml0IGNoaXAgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCmluZGV4IDJkMDJkZmQuLjUwODgyNGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCkBAIC0zNDksMTEgKzM0OSwxMSBAQAogCWludAkJaXJxX2xpbmU7CiB9OwogCi0vKiBCb2FyZHMgaGF2ZSB1bmlxZSBtYXBwaW5ncyBvZiB7Y29sLCByb3d9IC0tPiBrZXljb2RlLgotICogQ29sdW1uIGFuZCByb3cgYXJlIDQgYml0cywgYnV0IHJhbmdlIG9ubHkgZnJvbSAwLi43LgorLyogQm9hcmRzIGhhdmUgdW5pcWUgbWFwcGluZ3Mgb2Yge3JvdywgY29sfSAtLT4ga2V5Y29kZS4KKyAqIENvbHVtbiBhbmQgcm93IGFyZSA4IGJpdHMgZWFjaCwgYnV0IHJhbmdlIG9ubHkgZnJvbSAwLi43LgogICogYSBQRVJTSVNURU5UX0tFWSBpcyAiYWx3YXlzIG9uIiBhbmQgbmV2ZXIgcmVwb3J0ZWQuCiAgKi8KLSNkZWZpbmUgUEVSU0lTVEVOVF9LRVkoYywgcikJS0VZKChjKSwgKHIpLCBLRVlfUkVTRVJWRUQpCisjZGVmaW5lIFBFUlNJU1RFTlRfS0VZKHIsIGMpCUtFWSgociksIChjKSwgS0VZX1JFU0VSVkVEKQogCiBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSB7CiAJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXQuaCBiL2luY2x1ZGUvbGludXgvaW5pdC5oCmluZGV4IDQwMGFkYmIuLmZmOGJkZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC0yNzEsNiArMjcxLDcgQEAKICNlbHNlIC8qIE1PRFVMRSAqLwogCiAvKiBEb24ndCB1c2UgdGhlc2UgaW4gbW9kdWxlcywgYnV0IHNvbWUgcGVvcGxlIGRvLi4uICovCisjZGVmaW5lIGVhcmx5X2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCiAjZGVmaW5lIGNvcmVfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKICNkZWZpbmUgcG9zdGNvcmVfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKICNkZWZpbmUgYXJjaF9pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDBjY2ZjMzAuLmMyYjFhN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTEzNzcsNiArMTM3NywxMCBAQAogICogbWV0aG9kczsgZXJhc2UoKSBpcyBvcHRpb25hbC4gc2V0X2dhaW4oKSBhbmQgc2V0X2F1dG9jZW50ZXIoKSBuZWVkCiAgKiBvbmx5IGJlIGltcGxlbWVudGVkIGlmIGRyaXZlciBzZXRzIHVwIEZGX0dBSU4gYW5kIEZGX0FVVE9DRU5URVIKICAqIGJpdHMuCisgKgorICogTm90ZSB0aGF0IHBsYXliYWNrKCksIHNldF9nYWluKCkgYW5kIHNldF9hdXRvY2VudGVyKCkgYXJlIGNhbGxlZCB3aXRoCisgKiBkZXYtPmV2ZW50X2xvY2sgc3BpbmxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBvZmYgYW5kIHRodXMgbWF5IG5vdAorICogc2xlZXAuCiAgKi8KIHN0cnVjdCBmZl9kZXZpY2UgewogCWludCAoKnVwbG9hZCkoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCBiNzhjZjgxLi43Y2E3MmI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KICNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CkBAIC02MTAsNiArNjA5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKSB7IH0KICNlbmRpZgogCitzdHJ1Y3Qgc2VxX2ZpbGU7CiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CiAKIHN0cnVjdCBpcnFfZGVzYzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBjLmggYi9pbmNsdWRlL2xpbnV4L2lwYy5oCmluZGV4IGI4ODI2MTAuLjNiMTU5NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcGMuaApAQCAtNzgsOCArNzgsNiBAQAogI2RlZmluZSBJUENDQUxMKHZlcnNpb24sb3ApCSgodmVyc2lvbik8PDE2IHwgKG9wKSkKIAogI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjZGVmaW5lIElQQ01OSSAzMjc2OCAgLyogPD0gTUFYX0lOVCBsaW1pdCBmb3IgaXBjIGFycmF5cyAoaW5jbHVkaW5nIHN5c2N0bCBjaGFuZ2VzKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQyLmggYi9pbmNsdWRlL2xpbnV4L2piZDIuaAppbmRleCA1MjY5NWQzLi5mMTAxMWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZDIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZDIuaApAQCAtNDY0LDkgKzQ2NCw5IEBACiAgKi8KIHN0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfcyB7CiAJdW5zaWduZWQgbG9uZwkJY3NfY2hwX3RpbWU7Ci0JdW5zaWduZWQgbG9uZwkJY3NfZm9yY2VkX3RvX2Nsb3NlOwotCXVuc2lnbmVkIGxvbmcJCWNzX3dyaXR0ZW47Ci0JdW5zaWduZWQgbG9uZwkJY3NfZHJvcHBlZDsKKwlfX3UzMgkJCWNzX2ZvcmNlZF90b19jbG9zZTsKKwlfX3UzMgkJCWNzX3dyaXR0ZW47CisJX191MzIJCQljc19kcm9wcGVkOwogfTsKIAogLyogVGhlIHRyYW5zYWN0aW9uX3QgdHlwZSBpcyB0aGUgZ3V0cyBvZiB0aGUgam91cm5hbGluZyBtZWNoYW5pc20uICBJdApAQCAtNjY4LDIzICs2NjgsMTYgQEAKIAl1bnNpZ25lZCBsb25nCQlyc19mbHVzaGluZzsKIAl1bnNpZ25lZCBsb25nCQlyc19sb2dnaW5nOwogCi0JdW5zaWduZWQgbG9uZwkJcnNfaGFuZGxlX2NvdW50OwotCXVuc2lnbmVkIGxvbmcJCXJzX2Jsb2NrczsKLQl1bnNpZ25lZCBsb25nCQlyc19ibG9ja3NfbG9nZ2VkOworCV9fdTMyCQkJcnNfaGFuZGxlX2NvdW50OworCV9fdTMyCQkJcnNfYmxvY2tzOworCV9fdTMyCQkJcnNfYmxvY2tzX2xvZ2dlZDsKIH07CiAKIHN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zIHsKLQlpbnQgCQkJdHNfdHlwZTsKIAl1bnNpZ25lZCBsb25nCQl0c190aWQ7Ci0JdW5pb24gewotCQlzdHJ1Y3QgdHJhbnNhY3Rpb25fcnVuX3N0YXRzX3MgcnVuOwotCQlzdHJ1Y3QgdHJhbnNhY3Rpb25fY2hwX3N0YXRzX3MgY2hwOwotCX0gdTsKKwlzdHJ1Y3QgdHJhbnNhY3Rpb25fcnVuX3N0YXRzX3MgcnVuOwogfTsKIAotI2RlZmluZSBKQkQyX1NUQVRTX1JVTgkJMQotI2RlZmluZSBKQkQyX1NUQVRTX0NIRUNLUE9JTlQJMgotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIGpiZDJfdGltZV9kaWZmKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtOTg4LDEyICs5ODEsNiBAQAogCS8qCiAJICogSm91cm5hbCBzdGF0aXN0aWNzCiAJICovCi0Jc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgKmpfaGlzdG9yeTsKLQlpbnQJCQlqX2hpc3RvcnlfbWF4OwotCWludAkJCWpfaGlzdG9yeV9jdXI7Ci0JLyoKLQkgKiBQcm90ZWN0IHRoZSB0cmFuc2FjdGlvbnMgc3RhdGlzdGljcyBoaXN0b3J5Ci0JICovCiAJc3BpbmxvY2tfdAkJal9oaXN0b3J5X2xvY2s7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpqX3Byb2NfZW50cnk7CiAJc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3Mgal9zdGF0czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IGQzY2QyM2YuLmY0ZTMxODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtNjU5LDYgKzY1OSwxMiBAQAogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCisjaWZuZGVmIF9fRVhQT1JURURfSEVBREVSU19fCisjaWZuZGVmIF9fS0VSTkVMX18KKyN3YXJuaW5nIEF0dGVtcHQgdG8gdXNlIGtlcm5lbCBoZWFkZXJzIGZyb20gdXNlciBzcGFjZSwgc2VlIGh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy9LZXJuZWxIZWFkZXJzCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fRVhQT1JURURfSEVBREVSU19fICovCisKICNkZWZpbmUgU0lfTE9BRF9TSElGVAkxNgogc3RydWN0IHN5c2luZm8gewogCWxvbmcgdXB0aW1lOwkJCS8qIFNlY29uZHMgc2luY2UgYm9vdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcmVmLmggYi9pbmNsdWRlL2xpbnV4L2tyZWYuaAppbmRleCAwY2VmNmJhLi5iMGNiMGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tyZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tyZWYuaApAQCAtMTYsNyArMTYsNiBAQAogI2RlZmluZSBfS1JFRl9IXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIHN0cnVjdCBrcmVmIHsKIAlhdG9taWNfdCByZWZjb3VudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDc2MzE5YmYuLjg3Njk4NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtNDE4LDYgKzQxOCwxNyBAQAogCQkJCSAgQVRBX1RJTUlOR19BQ1RJVkUgfCBBVEFfVElNSU5HX1JFQ09WRVIgfAogCQkJCSAgQVRBX1RJTUlOR19ETUFDS19IT0xEIHwgQVRBX1RJTUlOR19DWUNMRSB8CiAJCQkJICBBVEFfVElNSU5HX1VETUEsCisKKwkvKiBBQ1BJIGNvbnN0YW50cyAqLworCUFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSCT0gMSA8PCAwLAorCUFUQV9BQ1BJX0ZJTFRFUl9MT0NLCT0gMSA8PCAxLAorCUFUQV9BQ1BJX0ZJTFRFUl9ESVBNCT0gMSA8PCAyLAorCUFUQV9BQ1BJX0ZJTFRFUl9GUERNQV9PRkZTRVQgPSAxIDw8IDMsCS8qIEZQRE1BIG5vbi16ZXJvIG9mZnNldCAqLworCUFUQV9BQ1BJX0ZJTFRFUl9GUERNQV9BQSA9IDEgPDwgNCwJLyogRlBETUEgYXV0byBhY3RpdmF0ZSAqLworCisJQVRBX0FDUElfRklMVEVSX0RFRkFVTFQJPSBBVEFfQUNQSV9GSUxURVJfU0VUWEZFUiB8CisJCQkJICBBVEFfQUNQSV9GSUxURVJfTE9DSyB8CisJCQkJICBBVEFfQUNQSV9GSUxURVJfRElQTSwKIH07CiAKIGVudW0gYXRhX3hmZXJfbWFzayB7CkBAIC01ODcsNiArNTk4LDcgQEAKICNpZmRlZiBDT05GSUdfQVRBX0FDUEkKIAlhY3BpX2hhbmRsZQkJYWNwaV9oYW5kbGU7CiAJdW5pb24gYWNwaV9vYmplY3QJKmd0Zl9jYWNoZTsKKwl1bnNpZ25lZCBpbnQJCWd0Zl9maWx0ZXI7CiAjZW5kaWYKIAkvKiBuX3NlY3RvciBpcyBDTEVBUl9CRUdJTiwgcmVhZCBjb21tZW50IGFib3ZlIENMRUFSX0JFR0lOICovCiAJdTY0CQkJbl9zZWN0b3JzOwkvKiBzaXplIG9mIGRldmljZSwgaWYgQVRBICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvc3RhdHVzLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvc3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjMDkwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9zdGF0dXMuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3N0YXR1cy5oIC0tIFN0YXR1cyBMRURzIGZvciBXTTgzMXgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19NRkRfV004MzFYX1NUQVRVU19IX18KKyNkZWZpbmUgX19NRkRfV004MzFYX1NUQVRVU19IX18KKworI2RlZmluZSBXTTgzMVhfTEVEX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgICAweEMwMDAgIC8qIExFRF9TUkMgLSBbMTU6MTRdICovCisjZGVmaW5lIFdNODMxWF9MRURfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogTEVEX1NSQyAtIFsxNToxNF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMRURfU1JDIC0gWzE1OjE0XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAzMDAgIC8qIExFRF9NT0RFIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMRURfTU9ERSAtIFs5OjhdICovCisjZGVmaW5lIFdNODMxWF9MRURfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTEVEX01PREUgLSBbOTo4XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX1NFUV9MRU5fTUFTSyAgICAgICAgICAgICAgICAweDAwMzAgIC8qIExFRF9TRVFfTEVOIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9TRVFfTEVOX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBMRURfU0VRX0xFTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODMxWF9MRURfU0VRX0xFTl9XSURUSCAgICAgICAgICAgICAgICAgICAgMiAgLyogTEVEX1NFUV9MRU4gLSBbNTo0XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVUl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIExFRF9EVVIgLSBbMzoyXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExFRF9EVVIgLSBbMzoyXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExFRF9EVVIgLSBbMzoyXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVVFlfQ1lDX01BU0sgICAgICAgICAgICAgICAweDAwMDMgIC8qIExFRF9EVVRZX0NZQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVUWV9DWUNfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogTEVEX0RVVFlfQ1lDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9EVVRZX0NZQ19XSURUSCAgICAgICAgICAgICAgICAgICAyICAvKiBMRURfRFVUWV9DWUMgLSBbMTowXSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCBkZjA4NTUxLi4yNGMzOTU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yODgsNyArMjg4LDcgQEAKICNpZmRlZiBDT05GSUdfTU1VCiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7CiAjZWxzZQotc3RhdGljIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCitzdGF0aWMgaW5saW5lIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggMjFkNmFhNC4uODRhNTI0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMTcxLDcgKzE3MSw3IEBACiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsJLyogU2VyaWFsaXplZCBieSBwYWdlX3RhYmxlX2xvY2sgKi8KIAogCS8qIEZ1bmN0aW9uIHBvaW50ZXJzIHRvIGRlYWwgd2l0aCB0aGlzIHN0cnVjdC4gKi8KLQlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKiB2bV9vcHM7CisJY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7CiAKIAkvKiBJbmZvcm1hdGlvbiBhYm91dCBvdXIgYmFja2luZyBzdG9yZTogKi8KIAl1bnNpZ25lZCBsb25nIHZtX3Bnb2ZmOwkJLyogT2Zmc2V0ICh3aXRoaW4gdm1fZmlsZSkgaW4gUEFHRV9TSVpFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKaW5kZXggODFiYjQyMy4uZWFmMzYzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaApAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSU5VWF9NTUNfSE9TVF9ICiAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAppbmRleCA2NTQ3YzNjLi44MmE5MTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCkBAIC0zNyw3ICszNyw2IEBACiB0eXBlZGVmIGludCAoKnBhcmFtX2dldF9mbikoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CiAKIC8qIEZsYWcgYml0cyBmb3Iga2VybmVsX3BhcmFtLmZsYWdzICovCi0jZGVmaW5lIEtQQVJBTV9LTUFMTE9DRUQJMQogI2RlZmluZSBLUEFSQU1fSVNCT09MCQkyCiAKIHN0cnVjdCBrZXJuZWxfcGFyYW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKaW5kZXggZjZiOTAyNC4uZDA5ZGIxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCkBAIC00MCw3ICs0MCw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oIGIvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaAppbmRleCA3OWZlYzZhLi5jZTUyMDQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmgKQEAgLTQyNSwxNSArNDI1LDYgQEAKIH07CiAKIC8qKgotICogc3RydWN0IG5pbGZzX2RhdF9ncm91cF9kZXNjIC0gYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcgotICogQGRnX25mcmVlczogbnVtYmVyIG9mIGZyZWUgdmlydHVhbCBibG9jayBudW1iZXJzIGluIGJsb2NrIGdyb3VwCi0gKi8KLXN0cnVjdCBuaWxmc19kYXRfZ3JvdXBfZGVzYyB7Ci0JX19sZTMyIGRnX25mcmVlczsKLX07Ci0KLQotLyoqCiAgKiBzdHJ1Y3QgbmlsZnNfc25hcHNob3RfbGlzdCAtIHNuYXBzaG90IGxpc3QKICAqIEBzc2xfbmV4dDogbmV4dCBjaGVja3BvaW50IG51bWJlciBvbiBzbmFwc2hvdCBsaXN0CiAgKiBAc3NsX3ByZXY6IHByZXZpb3VzIGNoZWNrcG9pbnQgbnVtYmVyIG9uIHNuYXBzaG90IGxpc3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggZGExZmRhOC4uODRjZjFmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTM3OSw5ICszNzksNiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFCTB4NDM4YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQQkweDQzOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERQkweDQzOWMKLS8qIEFNRCBTQiBDaGlwc2V0ICovCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX0lERQkgMHg3ODBjCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NBVEFfSURFIDB4NzgwMAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVkxTSQkJMHgxMDA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1OTIJMHgwMDA1CkBAIC00ODUsNiArNDgyLDkgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fSUNPTV9WMl9PTkVfUE9SVF9SVlhfT05FX1BPUlRfTURNX1BDSUUgMHgwMzYxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fRk9VUl9QT1JUX01PREVMCTB4MjUyCiAKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9JQk0JCTB4MTAxNAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0lCTV9TQVRVUk5fU0VSSUFMX09ORV9QT1JUCTB4MDNkNAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVU5JU1lTCQkweDEwMTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VTklTWVNfRE1BX0RJUkVDVE9SIDB4MDAxQwogCkBAIC01NDMsNyArNTQzLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9CUklER0UJMHg3NDUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQVBJQwkweDc0NTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMl9CUklER0UJMHg3NDU4Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NNQlVTCTB4NzgwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NNQlVTCTB4NzgwYgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzVfSURFICAgIDB4MjA4RgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSVNBICAgIDB4MjA5MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfRkxBU0ggIDB4MjA5MQpAQCAtNTUzLDkgKzU1MywxMCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfVURDICAgIDB4MjA5NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfVU9DICAgIDB4MjA5NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSURFICAgIDB4MjA5QQotCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xYX1ZJREVPICAweDIwODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTFhfQUVTICAgIDB4MjA4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX0lERQkJMHg3ODBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUJMHg3ODAwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UUklERU5UCQkweDEwMjMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9EWAkweDIwMDAKQEAgLTc3Niw2ICs3NzcsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1g1MTUJCTB4ODAzNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMTIJCTB4ODAzOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMTJfRk0JMHg4MDNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWElPMjAwMEEJMHg4MjMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMAkJMHhhYzEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTAzMQkJMHhhYzEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMQkJMHhhYzE1CkBAIC0xOTU0LDYgKzE5NTYsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfRFNFUklBTAkweDAxMDAgLyogMnggMTY1NTAgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19BCTB4MDEwMSAvKiAyeCAxNjU1MCwgaGFsZiBvZiA0IHBvcnQgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19CCTB4MDEwMiAvKiAyeCAxNjU1MCwgaGFsZiBvZiA0IHBvcnQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRUUk9fQQkweDAxMjAgLyogMnggMTY1NTBBLCBoYWxmIG9mIDQgcG9ydCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFRST19CCTB4MDEyMSAvKiAyeCAxNjU1MEEsIGhhbGYgb2YgNCBwb3J0ICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9PQ1RPX0EJMHgwMTgwIC8qIDR4IDE2NTUwQSwgaGFsZiBvZiA4IHBvcnQgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQgkweDAxODEgLyogNHggMTY1NTBBLCBoYWxmIG9mIDggcG9ydCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUE9SVF9QTFVTCTB4MDIwMCAvKiAyeCAxNjY1MCAqLwpAQCAtMjE2MSw2ICsyMTY1LDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSTc0MjBfMyAgICAgIDB4NzAwRAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0k3MzAwXzMgICAgICAweDcwMEUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJNzgwMF8zICAgICAgMHg3MDBGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3MzAwICAgICAgIDB4NzAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzQyMCAgICAgICAweDcwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc1MDAgICAgICAgMHg3MDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3ODAwICAgICAgIDB4NzAxMwogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUERDCQkweDE1ZTkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKaW5kZXggMzY4YmQ3MC4uN2I3ZmJmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCkBAIC0zNjEsNyArMzYxLDcgQEAKIAkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCSAqCXUzMgkJCQlwaWQsIHBwaWQ7CiAJICoJdTMyCQkJCXRpZCwgcHRpZDsKLQkgKgl7IHU2NAkJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCisJICoJdTY0CQkJCXRpbWU7CiAJICogfTsKIAkgKi8KIAlQRVJGX0VWRU5UX0ZPUksJCQk9IDcsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IGFjZWZhZjcuLjllNzAxMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0zNTcsNyArMzU3LDcgQEAKIAkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCSAqCXUzMgkJCQlwaWQsIHBwaWQ7CiAJICoJdTMyCQkJCXRpZCwgcHRpZDsKLQkgKgl7IHU2NAkJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCisJICoJdTY0CQkJCXRpbWU7CiAJICogfTsKIAkgKi8KIAlQRVJGX1JFQ09SRF9GT1JLCQkJPSA3LApAQCAtNDQyLDYgKzQ0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2RlZmluZSBQRVJGX01BWF9TVEFDS19ERVBUSAkJMjU1CkBAIC00NzAsOCArNDcxLDggQEAKIAkJCXVuc2lnbmVkIGxvbmcJZXZlbnRfYmFzZTsKIAkJCWludAkJaWR4OwogCQl9OwotCQl1bmlvbiB7IC8qIHNvZnR3YXJlICovCi0JCQlhdG9taWM2NF90CWNvdW50OworCQlzdHJ1Y3QgeyAvKiBzb2Z0d2FyZSAqLworCQkJczY0CQlyZW1haW5pbmc7CiAJCQlzdHJ1Y3QgaHJ0aW1lcglocnRpbWVyOwogCQl9OwogCX07CkBAIC01MTMsNiArNTE0LDEwIEBACiAKIHN0cnVjdCBwZXJmX21tYXBfZGF0YSB7CiAJc3RydWN0IHJjdV9oZWFkCQkJcmN1X2hlYWQ7CisjaWZkZWYgQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0MKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcms7CisjZW5kaWYKKwlpbnQJCQkJZGF0YV9vcmRlcjsKIAlpbnQJCQkJbnJfcGFnZXM7CS8qIG5yIG9mIGRhdGEgcGFnZXMgICovCiAJaW50CQkJCXdyaXRhYmxlOwkvKiBhcmUgd2Ugd3JpdGFibGUgICAqLwogCWludAkJCQlucl9sb2NrZWQ7CS8qIG5yIHBhZ2VzIG1sb2NrZWQgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BvbGwuaCBiL2luY2x1ZGUvbGludXgvcG9sbC5oCmluZGV4IGZhMjg3ZjIuLjY2NzM3NDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9sbC5oCkBAIC02LDEwICs2LDEwIEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogLyogfjgzMiBieXRlcyBvZiBzdGFjayBzcGFjZSB1c2VkIG1heCBpbiBzeXNfc2VsZWN0L3N5c19wb2xsIGJlZm9yZSBhbGxvY2F0aW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKaW5kZXggOTMxMTUwNS4uYTNiYWViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcmN0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJjdGwuaApAQCAtODgsNiArODgsMTggQEAKICNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCQkzMQogI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQkJMzIKIAorLyoKKyAqIFNldCBlYXJseS9sYXRlIGtpbGwgbW9kZSBmb3IgaHdwb2lzb24gbWVtb3J5IGNvcnJ1cHRpb24uCisgKiBUaGlzIGluZmx1ZW5jZXMgd2hlbiB0aGUgcHJvY2VzcyBnZXRzIGtpbGxlZCBvbiBhIG1lbW9yeSBjb3JydXB0aW9uLgorICovCiAjZGVmaW5lIFBSX01DRV9LSUxMCTMzCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9DTEVBUiAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX1NFVCAgICAgMQorCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9MQVRFICAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0VBUkxZICAgMQorIyBkZWZpbmUgUFJfTUNFX0tJTExfREVGQVVMVCAyCisKKyNkZWZpbmUgUFJfTUNFX0tJTExfR0VUIDM0CiAKICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYW1mcy5oIGIvaW5jbHVkZS9saW51eC9yYW1mcy5oCmluZGV4IDM3YWFmMmIuLjRlNzY4ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFtZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhbWZzLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNlbmRpZgogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYW1mc19maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHM7CiBleHRlcm4gaW50IF9faW5pdCBpbml0X3Jvb3Rmcyh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggNmZlMDM2My4uM2ViZDBiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtNzcsNyArNzcsNyBAQAogI2Vycm9yICJVbmtub3duIFJDVSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24iCiAjZW5kaWYKIAotI2RlZmluZSBSQ1VfSEVBRF9JTklUIAl7IC5uZXh0ID0gTlVMTCwgLmZ1bmMgPSBOVUxMIH0KKyNkZWZpbmUgUkNVX0hFQURfSU5JVAl7IC5uZXh0ID0gTlVMTCwgLmZ1bmMgPSBOVUxMIH0KICNkZWZpbmUgUkNVX0hFQUQoaGVhZCkgc3RydWN0IHJjdV9oZWFkIGhlYWQgPSBSQ1VfSEVBRF9JTklUCiAjZGVmaW5lIElOSVRfUkNVX0hFQUQocHRyKSBkbyB7IFwKICAgICAgICAocHRyKS0+bmV4dCA9IE5VTEw7IChwdHIpLT5mdW5jID0gTlVMTDsgXApAQCAtMTI5LDEyICsxMjksNiBAQAogCXJjdV9yZWFkX2FjcXVpcmUoKTsKIH0KIAotLyoqCi0gKiByY3VfcmVhZF91bmxvY2sgLSBtYXJrcyB0aGUgZW5kIG9mIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KLSAqCi0gKiBTZWUgcmN1X3JlYWRfbG9jaygpIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICovCi0KIC8qCiAgKiBTbyB3aGVyZSBpcyByY3Vfd3JpdGVfbG9jaygpPyAgSXQgZG9lcyBub3QgZXhpc3QsIGFzIHRoZXJlIGlzIG5vCiAgKiB3YXkgZm9yIHdyaXRlcnMgdG8gbG9jayBvdXQgUkNVIHJlYWRlcnMuICBUaGlzIGlzIGEgZmVhdHVyZSwgbm90CkBAIC0xNDQsNiArMTM4LDEyIEBACiAgKiB1c2VkIGFzIHdlbGwuICBSQ1UgZG9lcyBub3QgY2FyZSBob3cgdGhlIHdyaXRlcnMga2VlcCBvdXQgb2YgZWFjaAogICogb3RoZXJzJyB3YXksIGFzIGxvbmcgYXMgdGhleSBkbyBzby4KICAqLworCisvKioKKyAqIHJjdV9yZWFkX3VubG9jayAtIG1hcmtzIHRoZSBlbmQgb2YgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICoKKyAqIFNlZSByY3VfcmVhZF9sb2NrKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2sodm9pZCkKIHsKIAlyY3VfcmVhZF9yZWxlYXNlKCk7CkBAIC0xOTYsNiArMTk2LDggQEAKIAlfX2FjcXVpcmUoUkNVX1NDSEVEKTsKIAlyY3VfcmVhZF9hY3F1aXJlKCk7CiB9CisKKy8qIFVzZWQgYnkgbG9ja2RlcCBhbmQgdHJhY2luZzogY2Fubm90IGJlIHRyYWNlZCwgY2Fubm90IGNhbGwgbG9ja2RlcC4gKi8KIHN0YXRpYyBpbmxpbmUgbm90cmFjZSB2b2lkIHJjdV9yZWFkX2xvY2tfc2NoZWRfbm90cmFjZSh2b2lkKQogewogCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CkBAIC0yMTMsNiArMjE1LDggQEAKIAlfX3JlbGVhc2UoUkNVX1NDSEVEKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQorCisvKiBVc2VkIGJ5IGxvY2tkZXAgYW5kIHRyYWNpbmc6IGNhbm5vdCBiZSB0cmFjZWQsIGNhbm5vdCBjYWxsIGxvY2tkZXAuICovCiBzdGF0aWMgaW5saW5lIG5vdHJhY2Ugdm9pZCByY3VfcmVhZF91bmxvY2tfc2NoZWRfbm90cmFjZSh2b2lkKQogewogCV9fcmVsZWFzZShSQ1VfU0NIRUQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAppbmRleCAzNzY4Mjc3Li45NjQyYzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtMzAsMTAgKzMwLDE0IEBACiAjaWZuZGVmIF9fTElOVVhfUkNVVFJFRV9ICiAjZGVmaW5lIF9fTElOVVhfUkNVVFJFRV9ICiAKK3N0cnVjdCBub3RpZmllcl9ibG9jazsKKwogZXh0ZXJuIHZvaWQgcmN1X3NjaGVkX3FzKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgcmN1X2JoX3FzKGludCBjcHUpOwotCitleHRlcm4gaW50IHJjdV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpOwogZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOworZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7CiAKICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQogCkBAIC03MiwxMSArNzYsNyBAQAogCiBleHRlcm4gdm9pZCBjYWxsX3JjdV9zY2hlZChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCiAJCQkgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKLXsKLQlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKLX0KK2V4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9yY3VfYmhfZXhwZWRpdGVkKHZvaWQpCiB7CkBAIC04NSwxNiArODUsMTEgQEAKIAogZXh0ZXJuIHZvaWQgX19yY3VfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpOwotZXh0ZXJuIHZvaWQgcmN1X3Jlc3RhcnRfY3B1KGludCBjcHUpOwogCiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7CiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfYmgodm9pZCk7CiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfaW5pdF9zY2hlZCh2b2lkKQotewotfQotCiAjaWZkZWYgQ09ORklHX05PX0haCiB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpOwogdm9pZCByY3VfZXhpdF9ub2h6KHZvaWQpOwpAQCAtMTA3LDcgKzEwMiw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX05PX0haICovCiAKLS8qIEEgY29udGV4dCBzd2l0Y2ggaXMgYSBncmFjZSBwZXJpb2QgZm9yIHJjdXRyZWUuICovCisvKiBBIGNvbnRleHQgc3dpdGNoIGlzIGEgZ3JhY2UgcGVyaW9kIGZvciBSQ1Utc2NoZWQgYW5kIFJDVS1iaC4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHJjdV9ibG9ja2luZ19pc19ncCh2b2lkKQogewogCXJldHVybiBudW1fb25saW5lX2NwdXMoKSA9PSAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCmluZGV4IDczMWFmNzEuLmZjYjk4ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKQEAgLTExNCw4ICsxMTQsNyBAQAogaW50IF9fbXVzdF9jaGVjayByZXNfY291bnRlcl9jaGFyZ2VfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwKIAkJdW5zaWduZWQgbG9uZyB2YWwpOwogaW50IF9fbXVzdF9jaGVjayByZXNfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLAotCQl1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IHJlc19jb3VudGVyICoqbGltaXRfZmFpbF9hdCwKLQkJc3RydWN0IHJlc19jb3VudGVyICoqc29mdF9saW1pdF9hdCk7CisJCXVuc2lnbmVkIGxvbmcgdmFsLCBzdHJ1Y3QgcmVzX2NvdW50ZXIgKipsaW1pdF9mYWlsX2F0KTsKIAogLyoKICAqIHVuY2hhcmdlIC0gdGVsbCB0aGF0IHNvbWUgcG9ydGlvbiBvZiB0aGUgcmVzb3VyY2UgaXMgcmVsZWFzZWQKQEAgLTEyOCw4ICsxMjcsNyBAQAogICovCiAKIHZvaWQgcmVzX2NvdW50ZXJfdW5jaGFyZ2VfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwpOwotdm9pZCByZXNfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkJCWJvb2wgKndhc19zb2Z0X2xpbWl0X2V4Y2Vzcyk7Cit2b2lkIHJlc19jb3VudGVyX3VuY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmVzX2NvdW50ZXJfbGltaXRfY2hlY2tfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY250KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IGZlNjYxYWYuLmRiNTMyY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTE3Niw2ICsxNzYsOSBAQAogLyogUXVhbGNvbW0gTVNNIFNvQ3MgKi8KICNkZWZpbmUgUE9SVF9NU00JODgKIAorLyogQkNNNjN4eCBmYW1pbHkgU29DcyAqLworI2RlZmluZSBQT1JUX0JDTTYzWFgJODkKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9sbXMyODNnZjA1LmggYi9pbmNsdWRlL2xpbnV4L3NwaS9sbXMyODNnZjA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1ZDI1NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL2xtczI4M2dmMDUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogbG1zMjgzZ2YwNS5oIC0gUGxhdGZvcm0gZ2x1ZSBmb3IgU2Ftc3VuZyBMTVMyODNHRjA1IExDRAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpZm5kZWYgX0lOQ0xVREVfTElOVVhfU1BJX0xNUzI4M0dGMDVfSF8KKyNkZWZpbmUgX0lOQ0xVREVfTElOVVhfU1BJX0xNUzI4M0dGMDVfSF8KKworc3RydWN0IGxtczI4M2dmMDVfcGRhdGEgeworCXVuc2lnbmVkIGxvbmcJcmVzZXRfZ3BpbzsKKwlib29sCQlyZXNldF9pbnZlcnRlZDsKK307CisKKyNlbmRpZiAvKiBfSU5DTFVERV9MSU5VWF9TUElfTE1TMjgzR0YwNV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggNDg5MDE5ZS4uYjg1MDg4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC02Miw3ICs2Miw3IEBACiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlJDSFIKIGV4dGVybiBjaGFyICogc3RycmNocihjb25zdCBjaGFyICosaW50KTsKICNlbmRpZgotZXh0ZXJuIGNoYXIgKiBzdHJzdHJpcChjaGFyICopOworZXh0ZXJuIGNoYXIgKiBfX211c3RfY2hlY2sgc3Ryc3RyaXAoY2hhciAqKTsKICNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU1RSCiBleHRlcm4gY2hhciAqIHN0cnN0cihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmggYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAppbmRleCBjZDE1ZGY2Li41ZTc4MWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaApAQCAtMzAxLDYgKzMwMSw4IEBACiAjZGVmaW5lIHBtX25vdGlmaWVyKGZuLCBwcmkpCWRvIHsgKHZvaWQpKGZuKTsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggcG1fbXV0ZXg7CisKICNpZm5kZWYgQ09ORklHX0hJQkVSTkFUSU9OCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbih1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgZSkKIHsKQEAgLTMwOCw4ICszMTAsMjMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ub3NhdmVfcmVnaW9uX2xhdGUodW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nIGUpCiB7CiB9Ci0jZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCBtdXRleCBwbV9tdXRleDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX3N5c3RlbV9zbGVlcCh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19zeXN0ZW1fc2xlZXAodm9pZCkge30KKworI2Vsc2UKKworLyogTGV0IHNvbWUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBob3RhZGQgZXhjbHVkZSBoaWJlcm5hdGlvbiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19zeXN0ZW1fc2xlZXAodm9pZCkKK3sKKwltdXRleF9sb2NrKCZwbV9tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfc3lzdGVtX3NsZWVwKHZvaWQpCit7CisJbXV0ZXhfdW5sb2NrKCZwbV9tdXRleCk7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9TVVNQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAppbmRleCBmYzBiZjNlLi41N2U2MzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCkBAIC0xMjksNyArMTI5LDcgQEAKIAkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAogCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCiAJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAotCQkJCXwgMSpTRF9QUkVGRVJfTE9DQUwJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9MT0NBTAkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCiAJCQkJfCAxKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKIAkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXApAQCAtMTYyLDcgKzE2Miw3IEBACiAJCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwkJCVwKIAkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCQkJXAogCQkJCXwgMSpTRF9XQUtFX0FGRklORQkJCVwKLQkJCQl8IDEqU0RfUFJFRkVSX0xPQ0FMCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfTE9DQUwJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAogCQkJCXwgMCpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCiAJCQkJfCAwKlNEX1NFUklBTElaRQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCmluZGV4IGMxMzRkZDFmLi4wOTA3N2Y2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmgKQEAgLTcsNyArNyw3IEBACiAKIC8qCiAgKiBUcmFjZSBzZXF1ZW5jZXMgYXJlIHVzZWQgdG8gYWxsb3cgYSBmdW5jdGlvbiB0byBjYWxsIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zCi0gKiB0byBjcmVhdGUgYSBzdHJpbmcgb2YgZGF0YSB0byB1c2UgKHVwIHRvIGEgbWF4IG9mIFBBR0VfU0laRS4KKyAqIHRvIGNyZWF0ZSBhIHN0cmluZyBvZiBkYXRhIHRvIHVzZSAodXAgdG8gYSBtYXggb2YgUEFHRV9TSVpFKS4KICAqLwogCiBzdHJ1Y3QgdHJhY2Vfc2VxIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oIGIvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKaW5kZXggNjYwYTlkZS4uMmFhYzhhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpZm5kZWYgREVDTEFSRV9UUkFDRQogCiAjZGVmaW5lIFRQX1BST1RPKGFyZ3MuLi4pCWFyZ3MKLSNkZWZpbmUgVFBfQVJHUyhhcmdzLi4uKQkJYXJncworI2RlZmluZSBUUF9BUkdTKGFyZ3MuLi4pCWFyZ3MKIAogI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCmluZGV4IDM1NjYxMjkuLmIwODY3NzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCkBAIC00NSw4ICs0NSwxNiBAQAogICoKICAqIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwogICoKLSAqIAlUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gYSBwYXJ0aWN1bGFyIHR0eSBkZXZpY2UgaXMgY2xvc2VkIGZvcgotICoJdGhlIGxhc3QgdGltZSBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMuCisgKiAJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IHdoZW4gYSBwYXJ0aWN1bGFyIHR0eSBkZXZpY2UKKyAqCWlzIGNsb3NlZCBmb3IgdGhlIGxhc3QgdGltZSBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMuCisgKgorICoKKyAqIHZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CisgKgorICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBhc3luY2hyb25vdXNseSB3aGVuIGEgcGFydGljdWxhciB0dHkgZGV2aWNlCisgKglpcyBjbG9zZWQgZm9yIHRoZSBsYXN0IHRpbWUgZnJlZWluZyB1cCB0aGUgcmVzb3VyY2VzLiBUaGlzIGlzCisgKglhY3R1YWxseSB0aGUgc2Vjb25kIHBhcnQgb2Ygc2h1dGRvd24gZm9yIHJvdXRpbmVzIHRoYXQgbWlnaHQgc2xlZXAuCisgKgogICoKICAqIGludCAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwKICAqIAkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKQEAgLTIzMyw2ICsyNDEsNyBAQAogCWludCAgKCpvcGVuKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKIAl2b2lkICgqY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisJdm9pZCAoKmNsZWFudXApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCWludCAgKCp3cml0ZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksCiAJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKIAlpbnQgICgqcHV0X2NoYXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCBjMTdlYjY0Li5jZTkxMWViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtMTUwLDYgKzE1MCw3IEBACiAJc3RydWN0IHVzYl9pbnRlcmZhY2UJCSppbnRlcmZhY2U7CiAJdW5zaWduZWQgY2hhcgkJCWRpc2Nvbm5lY3RlZDoxOwogCXVuc2lnbmVkIGNoYXIJCQlzdXNwZW5kaW5nOjE7CisJdW5zaWduZWQgY2hhcgkJCWF0dGFjaGVkOjE7CiAJdW5zaWduZWQgY2hhcgkJCW1pbm9yOwogCXVuc2lnbmVkIGNoYXIJCQludW1fcG9ydHM7CiAJdW5zaWduZWQgY2hhcgkJCW51bV9wb3J0X3BvaW50ZXJzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKaW5kZXggZWE3MjI2YS4uMDk1ZTEwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVklSVElPXzlQX0gKIC8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAvKiBNYXhpbXVtIG51bWJlciBvZiB2aXJ0aW8gY2hhbm5lbHMgcGVyIHBhcnRpdGlvbiAoMSBmb3Igbm93KSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCmluZGV4IDA5ZDczMDAuLjE0MThmMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fQkFMTE9PTl9ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogLyogVGhlIGZlYXR1cmUgYml0bWFwIGZvciB2aXJ0aW8gYmFsbG9vbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaAppbmRleCAxNWNiNjY2NS4uZmQyOTRjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKQEAgLTMsNiArMyw3IEBACiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAvKiBGZWF0dXJlIGJpdHMgKi8KQEAgLTEzLDExICsxNCw4IEBACiAjZGVmaW5lIFZJUlRJT19CTEtfRl9STwkJNQkvKiBEaXNrIGlzIHJlYWQtb25seSAqLwogI2RlZmluZSBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUJNgkvKiBCbG9jayBzaXplIG9mIGRpc2sgaXMgYXZhaWxhYmxlKi8KICNkZWZpbmUgVklSVElPX0JMS19GX1NDU0kJNwkvKiBTdXBwb3J0cyBzY3NpIGNvbW1hbmQgcGFzc3RocnUgKi8KLSNkZWZpbmUgVklSVElPX0JMS19GX0lERU5USUZZCTgJLyogQVRBIElERU5USUZZIHN1cHBvcnRlZCAqLwogI2RlZmluZSBWSVJUSU9fQkxLX0ZfRkxVU0gJOQkvKiBDYWNoZSBmbHVzaCBjb21tYW5kIHN1cHBvcnQgKi8KIAotI2RlZmluZSBWSVJUSU9fQkxLX0lEX0JZVEVTCShzaXplb2YoX191MTZbMjU2XSkpCS8qIElERU5USUZZIERBVEEgKi8KLQogc3RydWN0IHZpcnRpb19ibGtfY29uZmlnIHsKIAkvKiBUaGUgY2FwYWNpdHkgKGluIDUxMi1ieXRlIHNlY3RvcnMpLiAqLwogCV9fdTY0IGNhcGFjaXR5OwpAQCAtMzMsNyArMzEsNiBAQAogCX0gZ2VvbWV0cnk7CiAJLyogYmxvY2sgc2l6ZSBvZiBkZXZpY2UgKGlmIFZJUlRJT19CTEtfRl9CTEtfU0laRSkgKi8KIAlfX3UzMiBibGtfc2l6ZTsKLQlfX3U4IGlkZW50aWZ5W1ZJUlRJT19CTEtfSURfQllURVNdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAppbmRleCBiNWY1MTk4Li5mZTg4NTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfTElOVVhfVklSVElPX0NPTlNPTEVfSAogI2RlZmluZSBfTElOVVhfVklSVElPX0NPTlNPTEVfSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIC8qIFRoaXMgaGVhZGVyLCBleGNsdWRpbmcgdGhlICNpZmRlZiBfX0tFUk5FTF9fIHBhcnQsIGlzIEJTRCBsaWNlbnNlZCBzbwogICogYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudCBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKaW5kZXggMWY0MTczNC4uMDg1ZTQyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKQEAgLTMsNiArMyw3IEBACiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKaW5kZXggNDgxMjFjMy4uYzRkNWRlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fUk5HX0gKIC8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19STkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaCBiL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKaW5kZXggN2VmMGM3Yi4uY2YyNGMyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCkBAIC0yMDcsNiArMjA3LDcgQEAKIAogZXh0ZXJuIHZvaWQgZmx1c2hfd29ya3F1ZXVlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSk7CiBleHRlcm4gdm9pZCBmbHVzaF9zY2hlZHVsZWRfd29yayh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX2RlbGF5ZWRfd29yayhzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrKTsKIAogZXh0ZXJuIGludCBzY2hlZHVsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBleHRlcm4gaW50IHNjaGVkdWxlX3dvcmtfb24oaW50IGNwdSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oIGIvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKaW5kZXggZTI2ODEyMi4uZmIwMGIzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKQEAgLTE1OSw4ICsxNTksNyBAQAogICogQHFpZDogdGhlICZwOV9xaWQgc2VydmVyIGlkZW50aWZpZXIgdGhpcyBoYW5kbGUgcG9pbnRzIHRvCiAgKiBAaW91bml0OiB0aGUgc2VydmVyIHJlcG9ydGVkIG1heGltdW0gdHJhbnNhY3Rpb24gc2l6ZSBmb3IgdGhpcyBmaWxlCiAgKiBAdWlkOiB0aGUgbnVtZXJpYyB1aWQgb2YgdGhlIGxvY2FsIHVzZXIgd2hvIG93bnMgdGhpcyBoYW5kbGUKLSAqIEBhdXg6IHRyYW5zcG9ydCBzcGVjaWZpYyBpbmZvcm1hdGlvbiAodW51c2VkPykKLSAqIEByZGlyX2Zwb3M6IHRyYWNrcyBvZmZzZXQgb2YgZmlsZSBwb3NpdGlvbiB3aGVuIHJlYWRpbmcgZGlyZWN0b3J5IGNvbnRlbnRzCisgKiBAcmRpcjogcmVhZGRpciBhY2NvdW50aW5nIHN0cnVjdHVyZSAoYWxsb2NhdGVkIG9uIGRlbWFuZCkKICAqIEBmbGlzdDogcGVyLWNsaWVudC1pbnN0YW5jZSBmaWQgdHJhY2tpbmcKICAqIEBkbGlzdDogcGVyLWRlbnRyeSBmaWQgdHJhY2tpbmcKICAqCkBAIC0xNzQsOSArMTczLDkgQEAKIAlzdHJ1Y3QgcDlfcWlkIHFpZDsKIAl1MzIgaW91bml0OwogCXVpZF90IHVpZDsKLQl2b2lkICphdXg7CiAKLQlpbnQgcmRpcl9mcG9zOworCXZvaWQgKnJkaXI7CisKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZsaXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgZGxpc3Q7CS8qIGxpc3Qgb2YgYWxsIGZpZHMgYXR0YWNoZWQgdG8gYSBkZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9zcy5oIGIvaW5jbHVkZS9wY21jaWEvc3MuaAppbmRleCA5YTNiNDk4Li5lMGY2ZmViIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9zcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKQEAgLTI2Miw2ICsyNjIsOCBAQAogCXN0cnVjdCBkZXZpY2UJCQlkZXY7CiAJLyogZGF0YSBpbnRlcm5hbCB0byB0aGUgc29ja2V0IGRyaXZlciAqLwogCXZvaWQJCQkJKmRyaXZlcl9kYXRhOworCS8qIHN0YXR1cyBvZiB0aGUgY2FyZCBkdXJpbmcgcmVzdW1lIGZyb20gYSBzeXN0ZW0gc2xlZXAgc3RhdGUgKi8KKwlpbnQJCQkJcmVzdW1lX3N0YXR1czsKIH07CiAKIApAQCAtMjc5LDcgKzI4MSw5IEBACiBleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX25vbnN0YXRpY19vcHM7CiAKIC8qIHNvY2tldCBkcml2ZXJzIGFyZSBleHBlY3RlZCB0byB1c2UgdGhlc2UgY2FsbGJhY2tzIGluIHRoZWlyIC5kcnYgc3RydWN0ICovCi1leHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworZXh0ZXJuIGludCBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHBjbWNpYV9zb2NrZXRfZGV2X2xhdGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKiBzb2NrZXQgZHJpdmVycyB1c2UgdGhpcyBjYWxsYmFjayBpbiB0aGVpciBJUlEgaGFuZGxlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCA4ODdlNTdlLi5hNzJlZGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtMzAzLDYgKzMwMyw3IEBACiAJaW50CQkJY21kc19tYXg7CS8qIHNpemUgb2YgY21kcyBhcnJheSAqLwogCXN0cnVjdCBpc2NzaV90YXNrCSoqY21kczsJCS8qIE9yaWdpbmFsIENtZHMgYXJyICovCiAJc3RydWN0IGlzY3NpX3Bvb2wJY21kcG9vbDsJLyogUERVJ3MgcG9vbCAqLworCXZvaWQJCQkqZGRfZGF0YTsJLyogTExEIHByaXZhdGUgZGF0YSAqLwogfTsKIAogZW51bSB7CkBAIC0zNjMsNyArMzY0LDcgQEAKICAqLwogZXh0ZXJuIHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqCiBpc2NzaV9zZXNzaW9uX3NldHVwKHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKiwgc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCi0JCSAgICB1aW50MTZfdCwgaW50LCB1aW50MzJfdCwgdW5zaWduZWQgaW50KTsKKwkJICAgIHVpbnQxNl90LCBpbnQsIGludCwgdWludDMyX3QsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBpc2NzaV9zZXNzaW9uX3RlYXJkb3duKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqKTsKIGV4dGVybiB2b2lkIGlzY3NpX3Nlc3Npb25fcmVjb3ZlcnlfdGltZWRvdXQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICopOwogZXh0ZXJuIGludCBpc2NzaV9zZXRfcGFyYW0oc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IDA4NDQ3OGUuLjM0YzQ2YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtMTI5LDYgKzEyOSw5IEBACiAjZGVmaW5lIE1JX1JFUE9SVF9UQVJHRVRfUEdTICAweDBhCiAvKiB2YWx1ZXMgZm9yIG1haW50ZW5hbmNlIG91dCAqLwogI2RlZmluZSBNT19TRVRfVEFSR0VUX1BHUyAgICAgMHgwYQorLyogdmFsdWVzIGZvciB2YXJpYWJsZSBsZW5ndGggY29tbWFuZCAqLworI2RlZmluZSBSRUFEXzMyCQkgICAgICAweDA5CisjZGVmaW5lIFdSSVRFXzMyCSAgICAgIDB4MGIKIAogLyogVmFsdWVzIGZvciBUMTAvMDQtMjYycjcgKi8KICNkZWZpbmUJQVRBXzE2CQkgICAgICAweDg1CS8qIDE2LWJ5dGUgcGFzcy10aHJ1ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKaW5kZXggMzg3OGQxZC4uYTVlODg1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaApAQCAtMjI5LDEwICsyMjksNiBAQAogCS8qIE9TLUhCQTogUHJvdGVjdGVkLCBIQkEtVGFyZ2V0OiBQcm90ZWN0ZWQgKi8KIAlTQ1NJX1BST1RfUkVBRF9QQVNTLAogCVNDU0lfUFJPVF9XUklURV9QQVNTLAotCi0JLyogT1MtSEJBOiBQcm90ZWN0ZWQsIEhCQS1UYXJnZXQ6IFByb3RlY3RlZCwgY2hlY2tzdW0gY29udmVyc2lvbiAqLwotCVNDU0lfUFJPVF9SRUFEX0NPTlZFUlQsCi0JU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQsCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NzaV9zZXRfcHJvdF9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBjaGFyIG9wKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCmluZGV4IGI2MmEwOTcuLjQ3OTQxZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKQEAgLTc5NywyNCArNzk3LDI0IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdW5zaWduZWQgaW50IHRhcmdldF90eXBlKQogewotCXN3aXRjaCAodGFyZ2V0X3R5cGUpIHsKLQljYXNlIDE6IHJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTjsKLQljYXNlIDI6IHJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBTSE9TVF9ESUZfVFlQRTJfUFJPVEVDVElPTjsKLQljYXNlIDM6IHJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTjsKLQl9CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FwW10gPSB7IDAsCisJCQkJICAgICAgIFNIT1NUX0RJRl9UWVBFMV9QUk9URUNUSU9OLAorCQkJCSAgICAgICBTSE9TVF9ESUZfVFlQRTJfUFJPVEVDVElPTiwKKwkJCQkgICAgICAgU0hPU1RfRElGX1RZUEUzX1BST1RFQ1RJT04gfTsKIAotCXJldHVybiAwOworCXJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBjYXBbdGFyZ2V0X3R5cGVdID8gdGFyZ2V0X3R5cGUgOiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzY3NpX2hvc3RfZGl4X2NhcGFibGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGludCB0YXJnZXRfdHlwZSkKIHsKLQlzd2l0Y2ggKHRhcmdldF90eXBlKSB7Ci0JY2FzZSAwOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElYX1RZUEUwX1BST1RFQ1RJT047Ci0JY2FzZSAxOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElYX1RZUEUxX1BST1RFQ1RJT047Ci0JY2FzZSAyOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElYX1RZUEUyX1BST1RFQ1RJT047Ci0JY2FzZSAzOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElYX1RZUEUzX1BST1RFQ1RJT047Ci0JfQorI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKQorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNhcFtdID0geyBTSE9TVF9ESVhfVFlQRTBfUFJPVEVDVElPTiwKKwkJCQkgICAgICAgU0hPU1RfRElYX1RZUEUxX1BST1RFQ1RJT04sCisJCQkJICAgICAgIFNIT1NUX0RJWF9UWVBFMl9QUk9URUNUSU9OLAorCQkJCSAgICAgICBTSE9TVF9ESVhfVFlQRTNfUFJPVEVDVElPTiB9OwogCisJcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIGNhcFt0YXJnZXRfdHlwZV07CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKaW5kZXggZDg2YWY5NC4uMDA0MDViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCkBAIC00ODgsNiArNDg4LDM5IEBACiAJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5vbGRfc2VjdG9yKQogKTsKIAorVFJBQ0VfRVZFTlQoYmxvY2tfcnFfcmVtYXAsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBkZXZfdCBkZXYsCisJCSBzZWN0b3JfdCBmcm9tKSwKKworCVRQX0FSR1MocSwgcnEsIGRldiwgZnJvbSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKCBkZXZfdCwJCWRldgkJKQorCQlfX2ZpZWxkKCBzZWN0b3JfdCwJc2VjdG9yCQkpCisJCV9fZmllbGQoIHVuc2lnbmVkIGludCwJbnJfc2VjdG9yCSkKKwkJX19maWVsZCggZGV2X3QsCQlvbGRfZGV2CQkpCisJCV9fZmllbGQoIHNlY3Rvcl90LAlvbGRfc2VjdG9yCSkKKwkJX19hcnJheSggY2hhciwJCXJ3YnMsCTYJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGRpc2tfZGV2dChycS0+cnFfZGlzayk7CisJCV9fZW50cnktPnNlY3RvcgkJPSBibGtfcnFfcG9zKHJxKTsKKwkJX19lbnRyeS0+bnJfc2VjdG9yCT0gYmxrX3JxX3NlY3RvcnMocnEpOworCQlfX2VudHJ5LT5vbGRfZGV2CT0gZGV2OworCQlfX2VudHJ5LT5vbGRfc2VjdG9yCT0gZnJvbTsKKwkJYmxrX2ZpbGxfcndic19ycShfX2VudHJ5LT5yd2JzLCBycSk7CisJKSwKKworCVRQX3ByaW50aygiJWQsJWQgJXMgJWxsdSArICV1IDwtICglZCwlZCkgJWxsdSIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+cndicywKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPnNlY3RvciwKKwkJICBfX2VudHJ5LT5ucl9zZWN0b3IsCisJCSAgTUFKT1IoX19lbnRyeS0+b2xkX2RldiksIE1JTk9SKF9fZW50cnktPm9sZF9kZXYpLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+b2xkX3NlY3RvcikKKyk7CisKICNlbmRpZiAvKiBfVFJBQ0VfQkxPQ0tfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaAppbmRleCBjMWJkOGYxLi5kMDk1NTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oCkBAIC0xMSw2ICsxMSw3IEBACiBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3Q7CiBzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZTsKIHN0cnVjdCBleHQ0X2lub2RlX2luZm87CitzdHJ1Y3QgbXBhZ2VfZGFfZGF0YTsKIAogI2RlZmluZSBFWFQ0X0koaW5vZGUpIChjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBleHQ0X2lub2RlX2luZm8sIHZmc19pbm9kZSkpCiAKQEAgLTIzNiw2ICsyMzcsNyBAQAogCQlfX2ZpZWxkKAljaGFyLAlmb3Jfa3VwZGF0ZQkJKQogCQlfX2ZpZWxkKAljaGFyLAlmb3JfcmVjbGFpbQkJKQogCQlfX2ZpZWxkKAljaGFyLAlyYW5nZV9jeWNsaWMJCSkKKwkJX19maWVsZCggICAgICAgcGdvZmZfdCwJd3JpdGViYWNrX2luZGV4CQkpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtMjQ5LDE1ICsyNTEsMTcgQEAKIAkJX19lbnRyeS0+Zm9yX2t1cGRhdGUJPSB3YmMtPmZvcl9rdXBkYXRlOwogCQlfX2VudHJ5LT5mb3JfcmVjbGFpbQk9IHdiYy0+Zm9yX3JlY2xhaW07CiAJCV9fZW50cnktPnJhbmdlX2N5Y2xpYwk9IHdiYy0+cmFuZ2VfY3ljbGljOworCQlfX2VudHJ5LT53cml0ZWJhY2tfaW5kZXggPSBpbm9kZS0+aV9tYXBwaW5nLT53cml0ZWJhY2tfaW5kZXg7CiAJKSwKIAotCVRQX3ByaW50aygiZGV2ICVzIGlubyAlbHUgbnJfdG9fd3JpdGUgJWxkIHBhZ2VzX3NraXBwZWQgJWxkIHJhbmdlX3N0YXJ0ICVsbHUgcmFuZ2VfZW5kICVsbHUgbm9uYmxvY2tpbmcgJWQgZm9yX2t1cGRhdGUgJWQgZm9yX3JlY2xhaW0gJWQgcmFuZ2VfY3ljbGljICVkIiwKKwlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IG5yX3RvX3dyaXRlICVsZCBwYWdlc19za2lwcGVkICVsZCByYW5nZV9zdGFydCAlbGx1IHJhbmdlX2VuZCAlbGx1IG5vbmJsb2NraW5nICVkIGZvcl9rdXBkYXRlICVkIGZvcl9yZWNsYWltICVkIHJhbmdlX2N5Y2xpYyAlZCB3cml0ZWJhY2tfaW5kZXggJWx1IiwKIAkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksCiAJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywgX19lbnRyeS0+bnJfdG9fd3JpdGUsCiAJCSAgX19lbnRyeS0+cGFnZXNfc2tpcHBlZCwgX19lbnRyeS0+cmFuZ2Vfc3RhcnQsCiAJCSAgX19lbnRyeS0+cmFuZ2VfZW5kLCBfX2VudHJ5LT5ub25ibG9ja2luZywKIAkJICBfX2VudHJ5LT5mb3Jfa3VwZGF0ZSwgX19lbnRyeS0+Zm9yX3JlY2xhaW0sCi0JCSAgX19lbnRyeS0+cmFuZ2VfY3ljbGljKQorCQkgIF9fZW50cnktPnJhbmdlX2N5Y2xpYywKKwkJICAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+d3JpdGViYWNrX2luZGV4KQogKTsKIAogVFJBQ0VfRVZFTlQoZXh0NF9kYV93cml0ZV9wYWdlcywKQEAgLTMwOSw2ICszMTMsNyBAQAogCQlfX2ZpZWxkKAljaGFyLAllbmNvdW50ZXJlZF9jb25nZXN0aW9uCSkKIAkJX19maWVsZCgJY2hhciwJbW9yZV9pbwkJCSkJCiAJCV9fZmllbGQoCWNoYXIsCW5vX25yd3JpdGVfaW5kZXhfdXBkYXRlICkKKwkJX19maWVsZCggICAgICAgcGdvZmZfdCwJd3JpdGViYWNrX2luZGV4CQkpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtMzIwLDE0ICszMjUsMTYgQEAKIAkJX19lbnRyeS0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbgk9IHdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbjsKIAkJX19lbnRyeS0+bW9yZV9pbwk9IHdiYy0+bW9yZV9pbzsKIAkJX19lbnRyeS0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUgPSB3YmMtPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlOworCQlfX2VudHJ5LT53cml0ZWJhY2tfaW5kZXggPSBpbm9kZS0+aV9tYXBwaW5nLT53cml0ZWJhY2tfaW5kZXg7CiAJKSwKIAotCVRQX3ByaW50aygiZGV2ICVzIGlubyAlbHUgcmV0ICVkIHBhZ2VzX3dyaXR0ZW4gJWQgcGFnZXNfc2tpcHBlZCAlbGQgY29uZ2VzdGlvbiAlZCBtb3JlX2lvICVkIG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlICVkIiwKKwlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IHJldCAlZCBwYWdlc193cml0dGVuICVkIHBhZ2VzX3NraXBwZWQgJWxkIGNvbmdlc3Rpb24gJWQgbW9yZV9pbyAlZCBub19ucndyaXRlX2luZGV4X3VwZGF0ZSAlZCB3cml0ZWJhY2tfaW5kZXggJWx1IiwKIAkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksCiAJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywgX19lbnRyeS0+cmV0LAogCQkgIF9fZW50cnktPnBhZ2VzX3dyaXR0ZW4sIF9fZW50cnktPnBhZ2VzX3NraXBwZWQsCiAJCSAgX19lbnRyeS0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiwgX19lbnRyeS0+bW9yZV9pbywKLQkJICBfX2VudHJ5LT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSkKKwkJICBfX2VudHJ5LT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSwKKwkJICAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+d3JpdGViYWNrX2luZGV4KQogKTsKIAogVFJBQ0VfRVZFTlQoZXh0NF9kYV93cml0ZV9iZWdpbiwKQEAgLTczNyw2ICs3NDQsMTY5IEBACiAJCSAgX19lbnRyeS0+ZGF0YV9ibG9ja3MsIF9fZW50cnktPm1ldGFfYmxvY2tzKQogKTsKIAorVFJBQ0VfRVZFTlQoZXh0NF9tYmFsbG9jX2FsbG9jLAorCVRQX1BST1RPKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpLAorCisJVFBfQVJHUyhhYyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQorCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJZm91bmQJCQkpCisJCV9fZmllbGQoCV9fdTE2LAlncm91cHMJCQkpCisJCV9fZmllbGQoCV9fdTE2LAlidWRkeQkJCSkKKwkJX19maWVsZCgJX191MTYsCWZsYWdzCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJdGFpbAkJCSkKKwkJX19maWVsZCgJX191OCwJY3IJCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJb3JpZ19sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlvcmlnX3N0YXJ0CQkpCisJCV9fZmllbGQoCV9fdTMyLCAJb3JpZ19ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJb3JpZ19sZW4JCSkKKwkJX19maWVsZCgJX191MzIsIAlnb2FsX2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCWdvYWxfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlnb2FsX2dyb3VwCQkpCisJCV9fZmllbGQoCSAgaW50LAlnb2FsX2xlbgkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9sZW4JCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBhYy0+YWNfaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8JCT0gYWMtPmFjX2lub2RlLT5pX2lubzsKKwkJX19lbnRyeS0+Zm91bmQJCT0gYWMtPmFjX2ZvdW5kOworCQlfX2VudHJ5LT5mbGFncwkJPSBhYy0+YWNfZmxhZ3M7CisJCV9fZW50cnktPmdyb3VwcwkJPSBhYy0+YWNfZ3JvdXBzX3NjYW5uZWQ7CisJCV9fZW50cnktPmJ1ZGR5CQk9IGFjLT5hY19idWRkeTsKKwkJX19lbnRyeS0+dGFpbAkJPSBhYy0+YWNfdGFpbDsKKwkJX19lbnRyeS0+Y3IJCT0gYWMtPmFjX2NyaXRlcmlhOworCQlfX2VudHJ5LT5vcmlnX2xvZ2ljYWwJPSBhYy0+YWNfb19leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5vcmlnX3N0YXJ0CT0gYWMtPmFjX29fZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPm9yaWdfZ3JvdXAJPSBhYy0+YWNfb19leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+b3JpZ19sZW4JPSBhYy0+YWNfb19leC5mZV9sZW47CisJCV9fZW50cnktPmdvYWxfbG9naWNhbAk9IGFjLT5hY19nX2V4LmZlX2xvZ2ljYWw7CisJCV9fZW50cnktPmdvYWxfc3RhcnQJPSBhYy0+YWNfZ19leC5mZV9zdGFydDsKKwkJX19lbnRyeS0+Z29hbF9ncm91cAk9IGFjLT5hY19nX2V4LmZlX2dyb3VwOworCQlfX2VudHJ5LT5nb2FsX2xlbgk9IGFjLT5hY19nX2V4LmZlX2xlbjsKKwkJX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwJPSBhYy0+YWNfZl9leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5yZXN1bHRfc3RhcnQJPSBhYy0+YWNfZl9leC5mZV9zdGFydDsKKwkJX19lbnRyeS0+cmVzdWx0X2dyb3VwCT0gYWMtPmFjX2ZfZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPnJlc3VsdF9sZW4JPSBhYy0+YWNfZl9leC5mZV9sZW47CisJKSwKKworCVRQX3ByaW50aygiZGV2ICVzIGlub2RlICVsdSBvcmlnICV1LyVkLyV1QCV1IGdvYWwgJXUvJWQvJXVAJXUgIgorCQkgICJyZXN1bHQgJXUvJWQvJXVAJXUgYmxrcyAldSBncnBzICV1IGNyICV1IGZsYWdzIDB4JTA0eCAiCisJCSAgInRhaWwgJXUgYnJva2VuICV1IiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sCisJCSAgX19lbnRyeS0+b3JpZ19ncm91cCwgX19lbnRyeS0+b3JpZ19zdGFydCwKKwkJICBfX2VudHJ5LT5vcmlnX2xlbiwgX19lbnRyeS0+b3JpZ19sb2dpY2FsLAorCQkgIF9fZW50cnktPmdvYWxfZ3JvdXAsIF9fZW50cnktPmdvYWxfc3RhcnQsCisJCSAgX19lbnRyeS0+Z29hbF9sZW4sIF9fZW50cnktPmdvYWxfbG9naWNhbCwKKwkJICBfX2VudHJ5LT5yZXN1bHRfZ3JvdXAsIF9fZW50cnktPnJlc3VsdF9zdGFydCwKKwkJICBfX2VudHJ5LT5yZXN1bHRfbGVuLCBfX2VudHJ5LT5yZXN1bHRfbG9naWNhbCwKKwkJICBfX2VudHJ5LT5mb3VuZCwgX19lbnRyeS0+Z3JvdXBzLCBfX2VudHJ5LT5jciwKKwkJICBfX2VudHJ5LT5mbGFncywgX19lbnRyeS0+dGFpbCwKKwkJICBfX2VudHJ5LT5idWRkeSA/IDEgPDwgX19lbnRyeS0+YnVkZHkgOiAwKQorKTsKKworVFJBQ0VfRVZFTlQoZXh0NF9tYmFsbG9jX3ByZWFsbG9jLAorCVRQX1BST1RPKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpLAorCisJVFBfQVJHUyhhYyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQorCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCW9yaWdfbG9naWNhbAkJKQorCQlfX2ZpZWxkKAkgIGludCwJb3JpZ19zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCW9yaWdfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCW9yaWdfbGVuCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X2xlbgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGFjLT5hY19pbm9kZS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmlubwkJPSBhYy0+YWNfaW5vZGUtPmlfaW5vOworCQlfX2VudHJ5LT5vcmlnX2xvZ2ljYWwJPSBhYy0+YWNfb19leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5vcmlnX3N0YXJ0CT0gYWMtPmFjX29fZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPm9yaWdfZ3JvdXAJPSBhYy0+YWNfb19leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+b3JpZ19sZW4JPSBhYy0+YWNfb19leC5mZV9sZW47CisJCV9fZW50cnktPnJlc3VsdF9sb2dpY2FsCT0gYWMtPmFjX2JfZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+cmVzdWx0X3N0YXJ0CT0gYWMtPmFjX2JfZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPnJlc3VsdF9ncm91cAk9IGFjLT5hY19iX2V4LmZlX2dyb3VwOworCQlfX2VudHJ5LT5yZXN1bHRfbGVuCT0gYWMtPmFjX2JfZXguZmVfbGVuOworCSksCisKKwlUUF9wcmludGsoImRldiAlcyBpbm9kZSAlbHUgb3JpZyAldS8lZC8ldUAldSByZXN1bHQgJXUvJWQvJXVAJXUiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywKKwkJICBfX2VudHJ5LT5vcmlnX2dyb3VwLCBfX2VudHJ5LT5vcmlnX3N0YXJ0LAorCQkgIF9fZW50cnktPm9yaWdfbGVuLCBfX2VudHJ5LT5vcmlnX2xvZ2ljYWwsCisJCSAgX19lbnRyeS0+cmVzdWx0X2dyb3VwLCBfX2VudHJ5LT5yZXN1bHRfc3RhcnQsCisJCSAgX19lbnRyeS0+cmVzdWx0X2xlbiwgX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwpCispOworCitUUkFDRV9FVkVOVChleHQ0X21iYWxsb2NfZGlzY2FyZCwKKwlUUF9QUk9UTyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKSwKKworCVRQX0FSR1MoYWMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKKwkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfbG9naWNhbAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X3N0YXJ0CQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2dyb3VwCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfbGVuCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYJCT0gYWMtPmFjX2lub2RlLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vCQk9IGFjLT5hY19pbm9kZS0+aV9pbm87CisJCV9fZW50cnktPnJlc3VsdF9sb2dpY2FsCT0gYWMtPmFjX2JfZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+cmVzdWx0X3N0YXJ0CT0gYWMtPmFjX2JfZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPnJlc3VsdF9ncm91cAk9IGFjLT5hY19iX2V4LmZlX2dyb3VwOworCQlfX2VudHJ5LT5yZXN1bHRfbGVuCT0gYWMtPmFjX2JfZXguZmVfbGVuOworCSksCisKKwlUUF9wcmludGsoImRldiAlcyBpbm9kZSAlbHUgZXh0ZW50ICV1LyVkLyV1QCV1ICIsCisJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vLAorCQkgIF9fZW50cnktPnJlc3VsdF9ncm91cCwgX19lbnRyeS0+cmVzdWx0X3N0YXJ0LAorCQkgIF9fZW50cnktPnJlc3VsdF9sZW4sIF9fZW50cnktPnJlc3VsdF9sb2dpY2FsKQorKTsKKworVFJBQ0VfRVZFTlQoZXh0NF9tYmFsbG9jX2ZyZWUsCisJVFBfUFJPVE8oc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyksCisKKwlUUF9BUkdTKGFjKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCisJCV9fZmllbGQoCWlub190LAlpbm8JCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X2xlbgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGFjLT5hY19pbm9kZS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmlubwkJPSBhYy0+YWNfaW5vZGUtPmlfaW5vOworCQlfX2VudHJ5LT5yZXN1bHRfbG9naWNhbAk9IGFjLT5hY19iX2V4LmZlX2xvZ2ljYWw7CisJCV9fZW50cnktPnJlc3VsdF9zdGFydAk9IGFjLT5hY19iX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5yZXN1bHRfZ3JvdXAJPSBhYy0+YWNfYl9leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+cmVzdWx0X2xlbgk9IGFjLT5hY19iX2V4LmZlX2xlbjsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vZGUgJWx1IGV4dGVudCAldS8lZC8ldUAldSAiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywKKwkJICBfX2VudHJ5LT5yZXN1bHRfZ3JvdXAsIF9fZW50cnktPnJlc3VsdF9zdGFydCwKKwkJICBfX2VudHJ5LT5yZXN1bHRfbGVuLCBfX2VudHJ5LT5yZXN1bHRfbG9naWNhbCkKKyk7CisKICNlbmRpZiAvKiBfVFJBQ0VfRVhUNF9IICovCiAKIC8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvamJkMi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvamJkMi5oCmluZGV4IGI4NTFmMGIuLjNjNjBiNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9qYmQyLmgKQEAgLTcsNiArNyw5IEBACiAjaW5jbHVkZSA8bGludXgvamJkMi5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KIAorc3RydWN0IHRyYW5zYWN0aW9uX2NocF9zdGF0c19zOworc3RydWN0IHRyYW5zYWN0aW9uX3J1bl9zdGF0c19zOworCiBUUkFDRV9FVkVOVChqYmQyX2NoZWNrcG9pbnQsCiAKIAlUUF9QUk9UTyhqb3VybmFsX3QgKmpvdXJuYWwsIGludCByZXN1bHQpLApAQCAtMTYyLDYgKzE2NSw4MSBAQAogCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubykKICk7CiAKK1RSQUNFX0VWRU5UKGpiZDJfcnVuX3N0YXRzLAorCVRQX1BST1RPKGRldl90IGRldiwgdW5zaWduZWQgbG9uZyB0aWQsCisJCSBzdHJ1Y3QgdHJhbnNhY3Rpb25fcnVuX3N0YXRzX3MgKnN0YXRzKSwKKworCVRQX0FSR1MoZGV2LCB0aWQsIHN0YXRzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCQlkZXZfdCwJZGV2CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXRpZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAl3YWl0CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXJ1bm5pbmcJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJbG9ja2VkCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWZsdXNoaW5nCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJbG9nZ2luZwkJKQorCQlfX2ZpZWxkKAkJX191MzIsCWhhbmRsZV9jb3VudAkpCisJCV9fZmllbGQoCQlfX3UzMiwJYmxvY2tzCQkpCisJCV9fZmllbGQoCQlfX3UzMiwJYmxvY2tzX2xvZ2dlZAkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYJCT0gZGV2OworCQlfX2VudHJ5LT50aWQJCT0gdGlkOworCQlfX2VudHJ5LT53YWl0CQk9IHN0YXRzLT5yc193YWl0OworCQlfX2VudHJ5LT5ydW5uaW5nCT0gc3RhdHMtPnJzX3J1bm5pbmc7CisJCV9fZW50cnktPmxvY2tlZAkJPSBzdGF0cy0+cnNfbG9ja2VkOworCQlfX2VudHJ5LT5mbHVzaGluZwk9IHN0YXRzLT5yc19mbHVzaGluZzsKKwkJX19lbnRyeS0+bG9nZ2luZwk9IHN0YXRzLT5yc19sb2dnaW5nOworCQlfX2VudHJ5LT5oYW5kbGVfY291bnQJPSBzdGF0cy0+cnNfaGFuZGxlX2NvdW50OworCQlfX2VudHJ5LT5ibG9ja3MJCT0gc3RhdHMtPnJzX2Jsb2NrczsKKwkJX19lbnRyeS0+YmxvY2tzX2xvZ2dlZAk9IHN0YXRzLT5yc19ibG9ja3NfbG9nZ2VkOworCSksCisKKwlUUF9wcmludGsoImRldiAlcyB0aWQgJWx1IHdhaXQgJXUgcnVubmluZyAldSBsb2NrZWQgJXUgZmx1c2hpbmcgJXUgIgorCQkgICJsb2dnaW5nICV1IGhhbmRsZV9jb3VudCAldSBibG9ja3MgJXUgYmxvY2tzX2xvZ2dlZCAldSIsCisJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCBfX2VudHJ5LT50aWQsCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT53YWl0KSwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPnJ1bm5pbmcpLAorCQkgIGppZmZpZXNfdG9fbXNlY3MoX19lbnRyeS0+bG9ja2VkKSwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPmZsdXNoaW5nKSwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPmxvZ2dpbmcpLAorCQkgIF9fZW50cnktPmhhbmRsZV9jb3VudCwgX19lbnRyeS0+YmxvY2tzLAorCQkgIF9fZW50cnktPmJsb2Nrc19sb2dnZWQpCispOworCitUUkFDRV9FVkVOVChqYmQyX2NoZWNrcG9pbnRfc3RhdHMsCisJVFBfUFJPVE8oZGV2X3QgZGV2LCB1bnNpZ25lZCBsb25nIHRpZCwKKwkJIHN0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfcyAqc3RhdHMpLAorCisJVFBfQVJHUyhkZXYsIHRpZCwgc3RhdHMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJCWRldl90LAlkZXYJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJdGlkCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWNocF90aW1lCSkKKwkJX19maWVsZCgJCV9fdTMyLAlmb3JjZWRfdG9fY2xvc2UJKQorCQlfX2ZpZWxkKAkJX191MzIsCXdyaXR0ZW4JCSkKKwkJX19maWVsZCgJCV9fdTMyLAlkcm9wcGVkCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYJCT0gZGV2OworCQlfX2VudHJ5LT50aWQJCT0gdGlkOworCQlfX2VudHJ5LT5jaHBfdGltZQk9IHN0YXRzLT5jc19jaHBfdGltZTsKKwkJX19lbnRyeS0+Zm9yY2VkX3RvX2Nsb3NlPSBzdGF0cy0+Y3NfZm9yY2VkX3RvX2Nsb3NlOworCQlfX2VudHJ5LT53cml0dGVuCT0gc3RhdHMtPmNzX3dyaXR0ZW47CisJCV9fZW50cnktPmRyb3BwZWQJPSBzdGF0cy0+Y3NfZHJvcHBlZDsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgdGlkICVsdSBjaHBfdGltZSAldSBmb3JjZWRfdG9fY2xvc2UgJXUgIgorCQkgICJ3cml0dGVuICV1IGRyb3BwZWQgJXUiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+dGlkLAorCQkgIGppZmZpZXNfdG9fbXNlY3MoX19lbnRyeS0+Y2hwX3RpbWUpLAorCQkgIF9fZW50cnktPmZvcmNlZF90b19jbG9zZSwgX19lbnRyeS0+d3JpdHRlbiwgX19lbnRyeS0+ZHJvcHBlZCkKKyk7CisKICNlbmRpZiAvKiBfVFJBQ0VfSkJEMl9IICovCiAKIC8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy93b3JrcXVldWUuaAppbmRleCBmY2ZkOWExLi5lNDYxMmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93b3JrcXVldWUuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy93b3JrcXVldWUuaApAQCAtMjYsNyArMjYsNyBAQAogCQlfX2VudHJ5LT5mdW5jCQk9IHdvcmstPmZ1bmM7CiAJKSwKIAotCVRQX3ByaW50aygidGhyZWFkPSVzOiVkIGZ1bmM9JXBGIiwgX19lbnRyeS0+dGhyZWFkX2NvbW0sCisJVFBfcHJpbnRrKCJ0aHJlYWQ9JXM6JWQgZnVuYz0lcGYiLCBfX2VudHJ5LT50aHJlYWRfY29tbSwKIAkJX19lbnRyeS0+dGhyZWFkX3BpZCwgX19lbnRyeS0+ZnVuYykKICk7CiAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJX19lbnRyeS0+ZnVuYwkJPSB3b3JrLT5mdW5jOwogCSksCiAKLQlUUF9wcmludGsoInRocmVhZD0lczolZCBmdW5jPSVwRiIsIF9fZW50cnktPnRocmVhZF9jb21tLAorCVRQX3ByaW50aygidGhyZWFkPSVzOiVkIGZ1bmM9JXBmIiwgX19lbnRyeS0+dGhyZWFkX2NvbW0sCiAJCV9fZW50cnktPnRocmVhZF9waWQsIF9fZW50cnktPmZ1bmMpCiApOwogCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggYzdiYWMzOS4uOWUwM2VmOCAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIGNvbmZpZyBBVURJVFNZU0NBTEwKIAlib29sICJFbmFibGUgc3lzdGVtLWNhbGwgYXVkaXRpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFVRElUICYmIChYODYgfHwgUFBDIHx8IFBQQzY0IHx8IFMzOTAgfHwgSUE2NCB8fCBVTUwgfHwgU1BBUkM2NHx8IFNVUEVSSCkKKwlkZXBlbmRzIG9uIEFVRElUICYmIChYODYgfHwgUFBDIHx8IFMzOTAgfHwgSUE2NCB8fCBVTUwgfHwgU1BBUkM2NCB8fCBTVVBFUkgpCiAJZGVmYXVsdCB5IGlmIFNFQ1VSSVRZX1NFTElOVVgKIAloZWxwCiAJICBFbmFibGUgbG93LW92ZXJoZWFkIHN5c3RlbS1jYWxsIGF1ZGl0aW5nIGluZnJhc3RydWN0dXJlIHRoYXQKQEAgLTkyMSw2ICs5MjEsMTEgQEAKIAloZWxwCiAJICBTZWUgdG9vbHMvcGVyZi9kZXNpZ24udHh0IGZvciBkZXRhaWxzLgogCitjb25maWcgUEVSRl9VU0VfVk1BTExPQworCWJvb2wKKwloZWxwCisJICBTZWUgdG9vbHMvcGVyZi9kZXNpZ24udHh0IGZvciBkZXRhaWxzCisKIG1lbnUgIktlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzIgogCiBjb25maWcgUEVSRl9FVkVOVFMKQEAgLTkzMiw3ICs5MzcsNyBAQAogCSAgRW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciB2YXJpb3VzIHBlcmZvcm1hbmNlIGV2ZW50cyBwcm92aWRlZAogCSAgYnkgc29mdHdhcmUgYW5kIGhhcmR3YXJlLgogCi0JICBTb2Z0d2FyZSBldmVudHMgYXJlIHN1cHBvcnRlZCBlaXRoZXIgYnVpbGQtaW4gb3IgdmlhIHRoZQorCSAgU29mdHdhcmUgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgZWl0aGVyIGJ1aWx0LWluIG9yIHZpYSB0aGUKIAkgIHVzZSBvZiBnZW5lcmljIHRyYWNlcG9pbnRzLgogCiAJICBNb3N0IG1vZGVybiBDUFVzIHN1cHBvcnQgcGVyZm9ybWFuY2UgZXZlbnRzIHZpYSBwZXJmb3JtYW5jZQpAQCAtOTQ0LDcgKzk0OSw3IEBACiAJICB1c2VkIHRvIHByb2ZpbGUgdGhlIGNvZGUgdGhhdCBydW5zIG9uIHRoYXQgQ1BVLgogCiAJICBUaGUgTGludXggUGVyZm9ybWFuY2UgRXZlbnQgc3Vic3lzdGVtIHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIG9mCi0JICB0aGVzZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgY2V2ZW50IGFwYWJpbGl0aWVzLCBhdmFpbGFibGUgdmlhIGEKKwkgIHRoZXNlIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBldmVudCBjYXBhYmlsaXRpZXMsIGF2YWlsYWJsZSB2aWEgYQogCSAgc3lzdGVtIGNhbGwgYW5kIHVzZWQgYnkgdGhlICJwZXJmIiB1dGlsaXR5IGluIHRvb2xzL3BlcmYvLiBJdAogCSAgcHJvdmlkZXMgcGVyIHRhc2sgYW5kIHBlciBDUFUgY291bnRlcnMsIGFuZCBpdCBwcm92aWRlcyBldmVudAogCSAgY2FwYWJpbGl0aWVzIG9uIHRvcCBvZiB0aG9zZS4KQEAgLTk3Niw2ICs5ODEsMTkgQEAKIAogCSAgU2F5IE4gaWYgdW5zdXJlLgogCitjb25maWcgREVCVUdfUEVSRl9VU0VfVk1BTExPQworCWRlZmF1bHQgbgorCWJvb2wgIkRlYnVnOiB1c2Ugdm1hbGxvYyB0byBiYWNrIHBlcmYgbW1hcCgpIGJ1ZmZlcnMiCisJZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyAmJiBERUJVR19LRVJORUwKKwlzZWxlY3QgUEVSRl9VU0VfVk1BTExPQworCWhlbHAKKwkgVXNlIHZtYWxsb2MgbWVtb3J5IHRvIGJhY2sgcGVyZiBtbWFwKCkgYnVmZmVycy4KKworCSBNb3N0bHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIHZtYWxsb2MgY29kZSBvbiBwbGF0Zm9ybXMKKwkgdGhhdCBkb24ndCByZXF1aXJlIGl0LgorCisJIFNheSBOIGlmIHVuc3VyZS4KKwogZW5kbWVudQogCiBjb25maWcgVk1fRVZFTlRfQ09VTlRFUlMKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggNzQ0OTgxOS4uNTk4OGRlYiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTc3OCw3ICs3NzgsNiBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgZG9fYmFzaWNfc2V0dXAodm9pZCkKIHsKLQlyY3VfaW5pdF9zY2hlZCgpOyAvKiBuZWVkZWQgYnkgbW9kdWxlX2luaXQgc3RhZ2UuICovCiAJaW5pdF93b3JrcXVldWVzKCk7CiAJY3B1c2V0X2luaXRfc21wKCk7CiAJdXNlcm1vZGVoZWxwZXJfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDllYjE0ODguLjQ2NDY5NGUgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTU1LDcgKzU1LDcgQEAKICNkZWZpbmUgc2htX2ZpbGVfZGF0YShmaWxlKSAoKigoc3RydWN0IHNobV9maWxlX2RhdGEgKiopJihmaWxlKS0+cHJpdmF0ZV9kYXRhKSkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2htX2ZpbGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htX3ZtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htX3ZtX29wczsKIAogI2RlZmluZSBzaG1faWRzKG5zKQkoKG5zKS0+aWRzW0lQQ19TSE1fSURTXSkKIApAQCAtMzEyLDcgKzMxMiw3IEBACiAJLmdldF91bm1hcHBlZF9hcmVhCT0gc2htX2dldF91bm1hcHBlZF9hcmVhLAogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1fdm1fb3BzID0gewogCS5vcGVuCT0gc2htX29wZW4sCS8qIGNhbGxiYWNrIGZvciBhIG5ldyB2bS1hcmVhIG9wZW4gKi8KIAkuY2xvc2UJPSBzaG1fY2xvc2UsCS8qIGNhbGxiYWNrIGZvciB3aGVuIHRoZSB2bS1hcmVhIGlzIHJlbGVhc2VkICovCiAJLmZhdWx0CT0gc2htX2ZhdWx0LApkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IDdjY2JhNGIuLjAyNDlmNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTcwMyw3ICs3MDMsNyBAQAogc3RhdGljIGludCBjZ3JvdXBfcm1kaXIoc3RydWN0IGlub2RlICp1bnVzZWRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogc3RhdGljIGludCBjZ3JvdXBfcG9wdWxhdGVfZGlyKHN0cnVjdCBjZ3JvdXAgKmNncnApOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNncm91cF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9uczsKIAogc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGNncm91cF9iYWNraW5nX2Rldl9pbmZvID0gewogCS5uYW1lCQk9ICJjZ3JvdXAiLApAQCAtMTcxMCwxNCArMTcxMCwxMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWJ1ZmZlcltuYnl0ZXNdID0gMDsgICAgIC8qIG51bC10ZXJtaW5hdGUgKi8KLQlzdHJzdHJpcChidWZmZXIpOwogCWlmIChjZnQtPndyaXRlX3U2NCkgewotCQl1NjQgdmFsID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZmZlciwgJmVuZCwgMCk7CisJCXU2NCB2YWwgPSBzaW1wbGVfc3RydG91bGwoc3Ryc3RyaXAoYnVmZmVyKSwgJmVuZCwgMCk7CiAJCWlmICgqZW5kKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHZhbCA9IGNmdC0+d3JpdGVfdTY0KGNncnAsIGNmdCwgdmFsKTsKIAl9IGVsc2UgewotCQlzNjQgdmFsID0gc2ltcGxlX3N0cnRvbGwoYnVmZmVyLCAmZW5kLCAwKTsKKwkJczY0IHZhbCA9IHNpbXBsZV9zdHJ0b2xsKHN0cnN0cmlwKGJ1ZmZlciksICZlbmQsIDApOwogCQlpZiAoKmVuZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR2YWwgPSBjZnQtPndyaXRlX3M2NChjZ3JwLCBjZnQsIHZhbCk7CkBAIC0xNzUzLDggKzE3NTIsNyBAQAogCX0KIAogCWJ1ZmZlcltuYnl0ZXNdID0gMDsgICAgIC8qIG51bC10ZXJtaW5hdGUgKi8KLQlzdHJzdHJpcChidWZmZXIpOwotCXJldHZhbCA9IGNmdC0+d3JpdGVfc3RyaW5nKGNncnAsIGNmdCwgYnVmZmVyKTsKKwlyZXR2YWwgPSBjZnQtPndyaXRlX3N0cmluZyhjZ3JwLCBjZnQsIHN0cnN0cmlwKGJ1ZmZlcikpOwogCWlmICghcmV0dmFsKQogCQlyZXR2YWwgPSBuYnl0ZXM7CiBvdXQ6CkBAIC0xODYzLDcgKzE4NjEsNyBAQAogCXJldHVybiBzaW5nbGVfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNncm91cF9zZXFmaWxlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfc2VxZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkID0gc2VxX3JlYWQsCiAJLndyaXRlID0gY2dyb3VwX2ZpbGVfd3JpdGUsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTE5MjIsNyArMTkyMCw3IEBACiAJcmV0dXJuIHNpbXBsZV9yZW5hbWUob2xkX2Rpciwgb2xkX2RlbnRyeSwgbmV3X2RpciwgbmV3X2RlbnRyeSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNncm91cF9maWxlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkID0gY2dyb3VwX2ZpbGVfcmVhZCwKIAkud3JpdGUgPSBjZ3JvdXBfZmlsZV93cml0ZSwKIAkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKQEAgLTMzNjksNyArMzM2Nyw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfY2dyb3VwX3Nob3csIHBpZCk7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jZ3JvdXBfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jZ3JvdXBfb3BlcmF0aW9ucyA9IHsKIAkub3BlbgkJPSBjZ3JvdXBfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKQEAgLTMzOTgsNyArMzM5Niw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfY2dyb3Vwc3RhdHNfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9ucyA9IHsKIAkub3BlbiA9IGNncm91cHN0YXRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMzcwOCw4ICszNzA2LDEwIEBACiB2b2lkIF9fY3NzX3B1dChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjc3MtPmNncm91cDsKKwlpbnQgdmFsOwogCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNzcy0+cmVmY250KSA9PSAxKSB7CisJdmFsID0gYXRvbWljX2RlY19yZXR1cm4oJmNzcy0+cmVmY250KTsKKwlpZiAodmFsID09IDEpIHsKIAkJaWYgKG5vdGlmeV9vbl9yZWxlYXNlKGNncnApKSB7CiAJCQlzZXRfYml0KENHUlBfUkVMRUFTQUJMRSwgJmNncnAtPmZsYWdzKTsKIAkJCWNoZWNrX2Zvcl9yZWxlYXNlKGNncnApOwpAQCAtMzcxNyw2ICszNzE3LDcgQEAKIAkJY2dyb3VwX3dha2V1cF9ybWRpcl93YWl0ZXIoY2dycCk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOworCVdBUk5fT05fT05DRSh2YWwgPCAxKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDU4NTlmNTkuLmY3ODY0YWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMzU5LDEwICszNTksOCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKIAotCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKSB7CisJaWYgKHRhc2tfc2Vzc2lvbihjdXJyKSAhPSBwaWQpCiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9TSUQsIHBpZCk7Ci0JCXByb2Nfc2lkX2Nvbm5lY3RvcihjdXJyKTsKLQl9CiAKIAlpZiAodGFza19wZ3JwKGN1cnIpICE9IHBpZCkKIAkJY2hhbmdlX3BpZChjdXJyLCBQSURUWVBFX1BHSUQsIHBpZCk7CkBAIC05OTEsOCArOTg5LDYgQEAKIAl0c2stPm1lbXBvbGljeSA9IE5VTEw7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRlVURVgKLQlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJnRzay0+cGlfc3RhdGVfbGlzdCkpKQotCQlleGl0X3BpX3N0YXRlX2xpc3QodHNrKTsKIAlpZiAodW5saWtlbHkoY3VycmVudC0+cGlfc3RhdGVfY2FjaGUpKQogCQlrZnJlZShjdXJyZW50LT5waV9zdGF0ZV9jYWNoZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDI2NmM2YWYuLjE2NmI4YzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtOTEsNyArOTEsNyBAQAogCWludCBjcHU7CiAJaW50IHRvdGFsID0gMDsKIAotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXRvdGFsICs9IHBlcl9jcHUocHJvY2Vzc19jb3VudHMsIGNwdSk7CiAKIAlyZXR1cm4gdG90YWw7CkBAIC01NzAsMTIgKzU3MCwxOCBAQAogCiAJLyogR2V0IHJpZCBvZiBhbnkgZnV0ZXhlcyB3aGVuIHJlbGVhc2luZyB0aGUgbW0gKi8KICNpZmRlZiBDT05GSUdfRlVURVgKLQlpZiAodW5saWtlbHkodHNrLT5yb2J1c3RfbGlzdCkpCisJaWYgKHVubGlrZWx5KHRzay0+cm9idXN0X2xpc3QpKSB7CiAJCWV4aXRfcm9idXN0X2xpc3QodHNrKTsKKwkJdHNrLT5yb2J1c3RfbGlzdCA9IE5VTEw7CisJfQogI2lmZGVmIENPTkZJR19DT01QQVQKLQlpZiAodW5saWtlbHkodHNrLT5jb21wYXRfcm9idXN0X2xpc3QpKQorCWlmICh1bmxpa2VseSh0c2stPmNvbXBhdF9yb2J1c3RfbGlzdCkpIHsKIAkJY29tcGF0X2V4aXRfcm9idXN0X2xpc3QodHNrKTsKKwkJdHNrLT5jb21wYXRfcm9idXN0X2xpc3QgPSBOVUxMOworCX0KICNlbmRpZgorCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmdHNrLT5waV9zdGF0ZV9saXN0KSkpCisJCWV4aXRfcGlfc3RhdGVfbGlzdCh0c2spOwogI2VuZGlmCiAKIAkvKiBHZXQgcmlkIG9mIGFueSBjYWNoZWQgcmVnaXN0ZXIgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggMjQ4ZGQxMS4uZmI2NWU4MiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTg5LDM2ICs4OSwzNiBAQAogCXVuaW9uIGZ1dGV4X2tleSBrZXk7CiB9OwogCi0vKgotICogV2UgdXNlIHRoaXMgaGFzaGVkIHdhaXRxdWV1ZSBpbnN0ZWFkIG9mIGEgbm9ybWFsIHdhaXRfcXVldWVfdCwgc28KKy8qKgorICogc3RydWN0IGZ1dGV4X3EgLSBUaGUgaGFzaGVkIGZ1dGV4IHF1ZXVlIGVudHJ5LCBvbmUgcGVyIHdhaXRpbmcgdGFzaworICogQHRhc2s6CQl0aGUgdGFzayB3YWl0aW5nIG9uIHRoZSBmdXRleAorICogQGxvY2tfcHRyOgkJdGhlIGhhc2ggYnVja2V0IGxvY2sKKyAqIEBrZXk6CQl0aGUga2V5IHRoZSBmdXRleCBpcyBoYXNoZWQgb24KKyAqIEBwaV9zdGF0ZToJCW9wdGlvbmFsIHByaW9yaXR5IGluaGVyaXRhbmNlIHN0YXRlCisgKiBAcnRfd2FpdGVyOgkJcnRfd2FpdGVyIHN0b3JhZ2UgZm9yIHVzZSB3aXRoIHJlcXVldWVfcGkKKyAqIEByZXF1ZXVlX3BpX2tleToJdGhlIHJlcXVldWVfcGkgdGFyZ2V0IGZ1dGV4IGtleQorICogQGJpdHNldDoJCWJpdHNldCBmb3IgdGhlIG9wdGlvbmFsIGJpdG1hc2tlZCB3YWtldXAKKyAqCisgKiBXZSB1c2UgdGhpcyBoYXNoZWQgd2FpdHF1ZXVlLCBpbnN0ZWFkIG9mIGEgbm9ybWFsIHdhaXRfcXVldWVfdCwgc28KICAqIHdlIGNhbiB3YWtlIG9ubHkgdGhlIHJlbGV2YW50IG9uZXMgKGhhc2hlZCBxdWV1ZXMgbWF5IGJlIHNoYXJlZCkuCiAgKgogICogQSBmdXRleF9xIGhhcyBhIHdva2VuIHN0YXRlLCBqdXN0IGxpa2UgdGFza3MgaGF2ZSBUQVNLX1JVTk5JTkcuCiAgKiBJdCBpcyBjb25zaWRlcmVkIHdva2VuIHdoZW4gcGxpc3Rfbm9kZV9lbXB0eSgmcS0+bGlzdCkgfHwgcS0+bG9ja19wdHIgPT0gMC4KICAqIFRoZSBvcmRlciBvZiB3YWt1cCBpcyBhbHdheXMgdG8gbWFrZSB0aGUgZmlyc3QgY29uZGl0aW9uIHRydWUsIHRoZW4KLSAqIHdha2UgdXAgcS0+d2FpdGVyLCB0aGVuIG1ha2UgdGhlIHNlY29uZCBjb25kaXRpb24gdHJ1ZS4KKyAqIHRoZSBzZWNvbmQuCisgKgorICogUEkgZnV0ZXhlcyBhcmUgdHlwaWNhbGx5IHdva2VuIGJlZm9yZSB0aGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIGhhc2ggbGlzdCB2aWEKKyAqIHRoZSBydF9tdXRleCBjb2RlLiBTZWUgdW5xdWV1ZV9tZV9waSgpLgogICovCiBzdHJ1Y3QgZnV0ZXhfcSB7CiAJc3RydWN0IHBsaXN0X25vZGUgbGlzdDsKLQkvKiBXYWl0ZXIgcmVmZXJlbmNlICovCisKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0KLQkvKiBXaGljaCBoYXNoIGxpc3QgbG9jayB0byB1c2U6ICovCiAJc3BpbmxvY2tfdCAqbG9ja19wdHI7Ci0KLQkvKiBLZXkgd2hpY2ggdGhlIGZ1dGV4IGlzIGhhc2hlZCBvbjogKi8KIAl1bmlvbiBmdXRleF9rZXkga2V5OwotCi0JLyogT3B0aW9uYWwgcHJpb3JpdHkgaW5oZXJpdGFuY2Ugc3RhdGU6ICovCiAJc3RydWN0IGZ1dGV4X3BpX3N0YXRlICpwaV9zdGF0ZTsKLQotCS8qIHJ0X3dhaXRlciBzdG9yYWdlIGZvciByZXF1ZXVlX3BpOiAqLwogCXN0cnVjdCBydF9tdXRleF93YWl0ZXIgKnJ0X3dhaXRlcjsKLQotCS8qIFRoZSBleHBlY3RlZCByZXF1ZXVlIHBpIHRhcmdldCBmdXRleCBrZXk6ICovCiAJdW5pb24gZnV0ZXhfa2V5ICpyZXF1ZXVlX3BpX2tleTsKLQotCS8qIEJpdHNldCBmb3IgdGhlIG9wdGlvbmFsIGJpdG1hc2tlZCB3YWtldXAgKi8KIAl1MzIgYml0c2V0OwogfTsKIApAQCAtMTUwLDcgKzE1MCw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG1hdGNoX2Z1dGV4KHVuaW9uIGZ1dGV4X2tleSAqa2V5MSwgdW5pb24gZnV0ZXhfa2V5ICprZXkyKQogewotCXJldHVybiAoa2V5MS0+Ym90aC53b3JkID09IGtleTItPmJvdGgud29yZAorCXJldHVybiAoa2V5MSAmJiBrZXkyCisJCSYmIGtleTEtPmJvdGgud29yZCA9PSBrZXkyLT5ib3RoLndvcmQKIAkJJiYga2V5MS0+Ym90aC5wdHIgPT0ga2V5Mi0+Ym90aC5wdHIKIAkJJiYga2V5MS0+Ym90aC5vZmZzZXQgPT0ga2V5Mi0+Ym90aC5vZmZzZXQpOwogfQpAQCAtMTk4LDExICsxOTksMTIgQEAKIH0KIAogLyoqCi0gKiBnZXRfZnV0ZXhfa2V5IC0gR2V0IHBhcmFtZXRlcnMgd2hpY2ggYXJlIHRoZSBrZXlzIGZvciBhIGZ1dGV4LgotICogQHVhZGRyOiB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGZ1dGV4Ci0gKiBAZnNoYXJlZDogMCBmb3IgYSBQUk9DRVNTX1BSSVZBVEUgZnV0ZXgsIDEgZm9yIFBST0NFU1NfU0hBUkVECi0gKiBAa2V5OiBhZGRyZXNzIHdoZXJlIHJlc3VsdCBpcyBzdG9yZWQuCi0gKiBAcnc6IG1hcHBpbmcgbmVlZHMgdG8gYmUgcmVhZC93cml0ZSAodmFsdWVzOiBWRVJJRllfUkVBRCwgVkVSSUZZX1dSSVRFKQorICogZ2V0X2Z1dGV4X2tleSgpIC0gR2V0IHBhcmFtZXRlcnMgd2hpY2ggYXJlIHRoZSBrZXlzIGZvciBhIGZ1dGV4CisgKiBAdWFkZHI6CXZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgZnV0ZXgKKyAqIEBmc2hhcmVkOgkwIGZvciBhIFBST0NFU1NfUFJJVkFURSBmdXRleCwgMSBmb3IgUFJPQ0VTU19TSEFSRUQKKyAqIEBrZXk6CWFkZHJlc3Mgd2hlcmUgcmVzdWx0IGlzIHN0b3JlZC4KKyAqIEBydzoJCW1hcHBpbmcgbmVlZHMgdG8gYmUgcmVhZC93cml0ZSAodmFsdWVzOiBWRVJJRllfUkVBRCwKKyAqIAkJVkVSSUZZX1dSSVRFKQogICoKICAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIDAKICAqIFRoZSBrZXkgd29yZHMgYXJlIHN0b3JlZCBpbiAqa2V5IG9uIHN1Y2Nlc3MuCkBAIC0yODgsOCArMjkwLDggQEAKIAlkcm9wX2Z1dGV4X2tleV9yZWZzKGtleSk7CiB9CiAKLS8qCi0gKiBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSAtIGZhdWx0IGluIHVzZXIgYWRkcmVzcyBhbmQgdmVyaWZ5IFJXIGFjY2VzcworLyoqCisgKiBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSgpIC0gRmF1bHQgaW4gdXNlciBhZGRyZXNzIGFuZCB2ZXJpZnkgUlcgYWNjZXNzCiAgKiBAdWFkZHI6CXBvaW50ZXIgdG8gZmF1bHRpbmcgdXNlciBzcGFjZSBhZGRyZXNzCiAgKgogICogU2xvdyBwYXRoIHRvIGZpeHVwIHRoZSBmYXVsdCB3ZSBqdXN0IHRvb2sgaW4gdGhlIGF0b21pYyB3cml0ZQpAQCAtMzA5LDggKzMxMSw4IEBACiAKIC8qKgogICogZnV0ZXhfdG9wX3dhaXRlcigpIC0gUmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHdhaXRlciBvbiBhIGZ1dGV4Ci0gKiBAaGI6ICAgICB0aGUgaGFzaCBidWNrZXQgdGhlIGZ1dGV4X3EncyByZXNpZGUgaW4KLSAqIEBrZXk6ICAgIHRoZSBmdXRleCBrZXkgKHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gb3RoZXIgZnV0ZXggZnV0ZXhfcSdzKQorICogQGhiOgkJdGhlIGhhc2ggYnVja2V0IHRoZSBmdXRleF9xJ3MgcmVzaWRlIGluCisgKiBAa2V5Ogl0aGUgZnV0ZXgga2V5ICh0byBkaXN0aW5ndWlzaCBpdCBmcm9tIG90aGVyIGZ1dGV4IGZ1dGV4X3EncykKICAqCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBoYiBsb2NrIGhlbGQuCiAgKi8KQEAgLTU4OCw3ICs1OTAsNyBAQAogfQogCiAvKioKLSAqIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgLSBhdG9taWMgd29yayByZXF1aXJlZCB0byBhY3F1aXJlIGEgcGkgYXdhcmUgZnV0ZXgKKyAqIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgLSBBdG9taWMgd29yayByZXF1aXJlZCB0byBhY3F1aXJlIGEgcGkgYXdhcmUgZnV0ZXgKICAqIEB1YWRkcjoJCXRoZSBwaSBmdXRleCB1c2VyIGFkZHJlc3MKICAqIEBoYjoJCQl0aGUgcGkgZnV0ZXggaGFzaCBidWNrZXQKICAqIEBrZXk6CQl0aGUgZnV0ZXgga2V5IGFzc29jaWF0ZWQgd2l0aCB1YWRkciBhbmQgaGIKQEAgLTkxNSw4ICs5MTcsOCBAQAogCWhiMSA9IGhhc2hfZnV0ZXgoJmtleTEpOwogCWhiMiA9IGhhc2hfZnV0ZXgoJmtleTIpOwogCi0JZG91YmxlX2xvY2tfaGIoaGIxLCBoYjIpOwogcmV0cnlfcHJpdmF0ZToKKwlkb3VibGVfbG9ja19oYihoYjEsIGhiMik7CiAJb3BfcmV0ID0gZnV0ZXhfYXRvbWljX29wX2ludXNlcihvcCwgdWFkZHIyKTsKIAlpZiAodW5saWtlbHkob3BfcmV0IDwgMCkpIHsKIApAQCAtMTAxMSw5ICsxMDEzLDkgQEAKIAogLyoqCiAgKiByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoKSAtIFdha2UgYSB0YXNrIHRoYXQgYWNxdWlyZWQgdGhlIGxvY2sgZHVyaW5nIHJlcXVldWUKLSAqIHE6CXRoZSBmdXRleF9xCi0gKiBrZXk6CXRoZSBrZXkgb2YgdGhlIHJlcXVldWUgdGFyZ2V0IGZ1dGV4Ci0gKiBoYjogIHRoZSBoYXNoX2J1Y2tldCBvZiB0aGUgcmVxdWV1ZSB0YXJnZXQgZnV0ZXgKKyAqIEBxOgkJdGhlIGZ1dGV4X3EKKyAqIEBrZXk6CXRoZSBrZXkgb2YgdGhlIHJlcXVldWUgdGFyZ2V0IGZ1dGV4CisgKiBAaGI6CQl0aGUgaGFzaF9idWNrZXQgb2YgdGhlIHJlcXVldWUgdGFyZ2V0IGZ1dGV4CiAgKgogICogRHVyaW5nIGZ1dGV4X3JlcXVldWUsIHdpdGggcmVxdWV1ZV9waT0xLCBpdCBpcyBwb3NzaWJsZSB0byBhY3F1aXJlIHRoZQogICogdGFyZ2V0IGZ1dGV4IGlmIGl0IGlzIHVuY29udGVuZGVkIG9yIHZpYSBhIGxvY2sgc3RlYWwuICBTZXQgdGhlIGZ1dGV4X3Ega2V5CkBAIC0xMDI3LDcgKzEwMjksNiBAQAogdm9pZCByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LAogCQkJICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKIHsKLQlkcm9wX2Z1dGV4X2tleV9yZWZzKCZxLT5rZXkpOwogCWdldF9mdXRleF9rZXlfcmVmcyhrZXkpOwogCXEtPmtleSA9ICprZXk7CiAKQEAgLTEyMjUsNiArMTIyNiw3IEBACiAJCSAqLwogCQlpZiAocmV0ID09IDEpIHsKIAkJCVdBUk5fT04ocGlfc3RhdGUpOworCQkJZHJvcF9jb3VudCsrOwogCQkJdGFza19jb3VudCsrOwogCQkJcmV0ID0gZ2V0X2Z1dGV4X3ZhbHVlX2xvY2tlZCgmY3VydmFsMiwgdWFkZHIyKTsKIAkJCWlmICghcmV0KQpAQCAtMTMwMyw2ICsxMzA1LDcgQEAKIAkJCWlmIChyZXQgPT0gMSkgewogCQkJCS8qIFdlIGdvdCB0aGUgbG9jay4gKi8KIAkJCQlyZXF1ZXVlX3BpX3dha2VfZnV0ZXgodGhpcywgJmtleTIsIGhiMik7CisJCQkJZHJvcF9jb3VudCsrOwogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlIGlmIChyZXQpIHsKIAkJCQkvKiAtRURFQURMSyAqLwpAQCAtMTM1MCw2ICsxMzUzLDI1IEBACiAJcmV0dXJuIGhiOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK3F1ZXVlX3VubG9jayhzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKK3sKKwlzcGluX3VubG9jaygmaGItPmxvY2spOworCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7Cit9CisKKy8qKgorICogcXVldWVfbWUoKSAtIEVucXVldWUgdGhlIGZ1dGV4X3Egb24gdGhlIGZ1dGV4X2hhc2hfYnVja2V0CisgKiBAcToJVGhlIGZ1dGV4X3EgdG8gZW5xdWV1ZQorICogQGhiOglUaGUgZGVzdGluYXRpb24gaGFzaCBidWNrZXQKKyAqCisgKiBUaGUgaGItPmxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIsIGFuZCBpcyByZWxlYXNlZCBoZXJlLiBBIGNhbGwgdG8KKyAqIHF1ZXVlX21lKCkgaXMgdHlwaWNhbGx5IHBhaXJlZCB3aXRoIGV4YWN0bHkgb25lIGNhbGwgdG8gdW5xdWV1ZV9tZSgpLiAgVGhlCisgKiBleGNlcHRpb25zIGludm9sdmUgdGhlIFBJIHJlbGF0ZWQgb3BlcmF0aW9ucywgd2hpY2ggbWF5IHVzZSB1bnF1ZXVlX21lX3BpKCkKKyAqIG9yIG5vdGhpbmcgaWYgdGhlIHVucXVldWUgaXMgZG9uZSBhcyBwYXJ0IG9mIHRoZSB3YWtlIHByb2Nlc3MgYW5kIHRoZSB1bnF1ZXVlCisgKiBzdGF0ZSBpcyBpbXBsaWNpdCBpbiB0aGUgc3RhdGUgb2Ygd29rZW4gdGFzayAoc2VlIGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSgpIGZvcgorICogYW4gZXhhbXBsZSkuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9tZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKIHsKIAlpbnQgcHJpbzsKQEAgLTEzNzMsMTkgKzEzOTUsMTcgQEAKIAlzcGluX3VubG9jaygmaGItPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXF1ZXVlX3VubG9jayhzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYikKLXsKLQlzcGluX3VubG9jaygmaGItPmxvY2spOwotCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7Ci19Ci0KLS8qCi0gKiBxdWV1ZV9tZSBhbmQgdW5xdWV1ZV9tZSBtdXN0IGJlIGNhbGxlZCBhcyBhIHBhaXIsIGVhY2gKLSAqIGV4YWN0bHkgb25jZS4gIFRoZXkgYXJlIGNhbGxlZCB3aXRoIHRoZSBoYXNoZWQgc3BpbmxvY2sgaGVsZC4KKy8qKgorICogdW5xdWV1ZV9tZSgpIC0gUmVtb3ZlIHRoZSBmdXRleF9xIGZyb20gaXRzIGZ1dGV4X2hhc2hfYnVja2V0CisgKiBAcToJVGhlIGZ1dGV4X3EgdG8gdW5xdWV1ZQorICoKKyAqIFRoZSBxLT5sb2NrX3B0ciBtdXN0IG5vdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuIEEgY2FsbCB0byB1bnF1ZXVlX21lKCkgbXVzdAorICogYmUgcGFpcmVkIHdpdGggZXhhY3RseSBvbmUgZWFybGllciBjYWxsIHRvIHF1ZXVlX21lKCkuCisgKgorICogUmV0dXJuczoKKyAqICAgMSAtIGlmIHRoZSBmdXRleF9xIHdhcyBzdGlsbCBxdWV1ZWQgKGFuZCB3ZSByZW1vdmVkIHVucXVldWVkIGl0KQorICogICAwIC0gaWYgdGhlIGZ1dGV4X3Egd2FzIGFscmVhZHkgcmVtb3ZlZCBieSB0aGUgd2FraW5nIHRocmVhZAogICovCi0KLS8qIFJldHVybiAxIGlmIHdlIHdlcmUgc3RpbGwgcXVldWVkIChpZS4gMCBtZWFucyB3ZSB3ZXJlIHdva2VuKSAqLwogc3RhdGljIGludCB1bnF1ZXVlX21lKHN0cnVjdCBmdXRleF9xICpxKQogewogCXNwaW5sb2NrX3QgKmxvY2tfcHRyOwpAQCAtMTYzOCwxNyArMTY1OCwxNCBAQAogc3RhdGljIHZvaWQgZnV0ZXhfd2FpdF9xdWV1ZV9tZShzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCBzdHJ1Y3QgZnV0ZXhfcSAqcSwKIAkJCQlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyICp0aW1lb3V0KQogewotCXF1ZXVlX21lKHEsIGhiKTsKLQogCS8qCi0JICogVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIHNjaGVkdWxpbmcgc2luY2UgdGhlIHF1ZXVlX21lKCksIGFzIHdlCi0JICogY2Fubm90IGhvbGQgYSBzcGlubG9jayBhY3Jvc3MgdGhlIGdldF91c2VyKCkgaW4gY2FzZSBpdAotCSAqIGZhdWx0cywgYW5kIHdlIGNhbm5vdCBqdXN0IHNldCBUQVNLX0lOVEVSUlVQVElCTEUgc3RhdGUgd2hlbgotCSAqIHF1ZXVlaW5nIG91cnNlbHZlcyBpbnRvIHRoZSBmdXRleCBoYXNoLiBUaGlzIGNvZGUgdGh1cyBoYXMgdG8KLQkgKiByZWx5IG9uIHRoZSBmdXRleF93YWtlKCkgY29kZSByZW1vdmluZyB1cyBmcm9tIGhhc2ggd2hlbiBpdAotCSAqIHdha2VzIHVzIHVwLgorCSAqIFRoZSB0YXNrIHN0YXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGJlZm9yZSBhbm90aGVyIHRhc2sgY2FuCisJICogd2FrZSBpdC4gc2V0X2N1cnJlbnRfc3RhdGUoKSBpcyBpbXBsZW1lbnRlZCB1c2luZyBzZXRfbWIoKSBhbmQKKwkgKiBxdWV1ZV9tZSgpIGNhbGxzIHNwaW5fdW5sb2NrKCkgdXBvbiBjb21wbGV0aW9uLCBib3RoIHNlcmlhbGl6aW5nCisJICogYWNjZXNzIHRvIHRoZSBoYXNoIGxpc3QgYW5kIGZvcmNpbmcgYW5vdGhlciBtZW1vcnkgYmFycmllci4KIAkgKi8KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXF1ZXVlX21lKHEsIGhiKTsKIAogCS8qIEFybSB0aGUgdGltZXIgKi8KIAlpZiAodGltZW91dCkgewpAQCAtMTY1OCw4ICsxNjc1LDggQEAKIAl9CiAKIAkvKgotCSAqICFwbGlzdF9ub2RlX2VtcHR5KCkgaXMgc2FmZSBoZXJlIHdpdGhvdXQgYW55IGxvY2suCi0JICogcS5sb2NrX3B0ciAhPSAwIGlzIG5vdCBzYWZlLCBiZWNhdXNlIG9mIG9yZGVyaW5nIGFnYWluc3Qgd2FrZXVwLgorCSAqIElmIHdlIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGhhc2ggbGlzdCwgdGhlbiBhbm90aGVyIHRhc2sKKwkgKiBoYXMgdHJpZWQgdG8gd2FrZSB1cywgYW5kIHdlIGNhbiBza2lwIHRoZSBjYWxsIHRvIHNjaGVkdWxlKCkuCiAJICovCiAJaWYgKGxpa2VseSghcGxpc3Rfbm9kZV9lbXB0eSgmcS0+bGlzdCkpKSB7CiAJCS8qCkBAIC0xNzc2LDYgKzE3OTMsNyBAQAogCQkJCQkgICAgIGN1cnJlbnQtPnRpbWVyX3NsYWNrX25zKTsKIAl9CiAKK3JldHJ5OgogCS8qIFByZXBhcmUgdG8gd2FpdCBvbiB1YWRkci4gKi8KIAlyZXQgPSBmdXRleF93YWl0X3NldHVwKHVhZGRyLCB2YWwsIGZzaGFyZWQsICZxLCAmaGIpOwogCWlmIChyZXQpCkBAIC0xNzkzLDkgKzE4MTEsMTQgQEAKIAkJZ290byBvdXRfcHV0X2tleTsKIAogCS8qCi0JICogV2UgZXhwZWN0IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpLCBidXQgYW5vdGhlciB0aHJlYWQgbWF5Ci0JICogaGF2ZSBoYW5kbGVkIGl0IGZvciB1cyBhbHJlYWR5LgorCSAqIFdlIGV4cGVjdCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSwgYnV0IHdlIG1pZ2h0IGJlIHRoZQorCSAqIHZpY3RpbSBvZiBhIHNwdXJpb3VzIHdha2V1cCBhcyB3ZWxsLgogCSAqLworCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOworCQlnb3RvIHJldHJ5OworCX0KKwogCXJldCA9IC1FUkVTVEFSVFNZUzsKIAlpZiAoIWFic190aW1lKQogCQlnb3RvIG91dF9wdXRfa2V5OwpAQCAtMjEwMiwxMSArMjEyNSwxMiBAQAogCQkgKiBVbnF1ZXVlIHRoZSBmdXRleF9xIGFuZCBkZXRlcm1pbmUgd2hpY2ggaXQgd2FzLgogCQkgKi8KIAkJcGxpc3RfZGVsKCZxLT5saXN0LCAmcS0+bGlzdC5wbGlzdCk7Ci0JCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7CiAKKwkJLyogSGFuZGxlIHNwdXJpb3VzIHdha2V1cHMgZ3JhY2VmdWxseSAqLworCQlyZXQgPSAtRVdPVUxEQkxPQ0s7CiAJCWlmICh0aW1lb3V0ICYmICF0aW1lb3V0LT50YXNrKQogCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJZWxzZQorCQllbHNlIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldCA9IC1FUkVTVEFSVE5PSU5UUjsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTIxMTQsMTIgKzIxMzgsMTIgQEAKIAogLyoqCiAgKiBmdXRleF93YWl0X3JlcXVldWVfcGkoKSAtIFdhaXQgb24gdWFkZHIgYW5kIHRha2UgdWFkZHIyCi0gKiBAdWFkZHI6CXRoZSBmdXRleCB3ZSBpbml0aWFseWwgd2FpdCBvbiAobm9uLXBpKQorICogQHVhZGRyOgl0aGUgZnV0ZXggd2UgaW5pdGlhbGx5IHdhaXQgb24gKG5vbi1waSkKICAqIEBmc2hhcmVkOgl3aGV0aGVyIHRoZSBmdXRleGVzIGFyZSBzaGFyZWQgKDEpIG9yIG5vdCAoMCkuICBUaGV5IG11c3QgYmUKICAqIAkJdGhlIHNhbWUgdHlwZSwgbm8gcmVxdWV1ZWluZyBmcm9tIHByaXZhdGUgdG8gc2hhcmVkLCBldGMuCiAgKiBAdmFsOgl0aGUgZXhwZWN0ZWQgdmFsdWUgb2YgdWFkZHIKICAqIEBhYnNfdGltZToJYWJzb2x1dGUgdGltZW91dAotICogQGJpdHNldDoJMzIgYml0IHdha2V1cCBiaXRzZXQgc2V0IGJ5IHVzZXJzcGFjZSwgZGVmYXVsdHMgdG8gYWxsLgorICogQGJpdHNldDoJMzIgYml0IHdha2V1cCBiaXRzZXQgc2V0IGJ5IHVzZXJzcGFjZSwgZGVmYXVsdHMgdG8gYWxsCiAgKiBAY2xvY2tydDoJd2hldGhlciB0byB1c2UgQ0xPQ0tfUkVBTFRJTUUgKDEpIG9yIENMT0NLX01PTk9UT05JQyAoMCkKICAqIEB1YWRkcjI6CXRoZSBwaSBmdXRleCB3ZSB3aWxsIHRha2UgcHJpb3IgdG8gcmV0dXJuaW5nIHRvIHVzZXItc3BhY2UKICAqCkBAIC0yMjQ2LDcgKzIyNzAsNyBAQAogCQlyZXMgPSBmaXh1cF9vd25lcih1YWRkcjIsIGZzaGFyZWQsICZxLCAhcmV0KTsKIAkJLyoKIAkJICogSWYgZml4dXBfb3duZXIoKSByZXR1cm5lZCBhbiBlcnJvciwgcHJvcHJvZ2F0ZSB0aGF0LiAgSWYgaXQKLQkJICogYWNxdWlyZWQgdGhlIGxvY2ssIGNsZWFyIG91ciAtRVRJTUVET1VUIG9yIC1FSU5UUi4KKwkJICogYWNxdWlyZWQgdGhlIGxvY2ssIGNsZWFyIC1FVElNRURPVVQgb3IgLUVJTlRSLgogCQkgKi8KIAkJaWYgKHJlcykKIAkJCXJldCA9IChyZXMgPCAwKSA/IHJlcyA6IDA7CkBAIC0yMzAyLDkgKzIzMjYsOSBAQAogICovCiAKIC8qKgotICogc3lzX3NldF9yb2J1c3RfbGlzdCAtIHNldCB0aGUgcm9idXN0LWZ1dGV4IGxpc3QgaGVhZCBvZiBhIHRhc2sKLSAqIEBoZWFkOiBwb2ludGVyIHRvIHRoZSBsaXN0LWhlYWQKLSAqIEBsZW46IGxlbmd0aCBvZiB0aGUgbGlzdC1oZWFkLCBhcyB1c2Vyc3BhY2UgZXhwZWN0cworICogc3lzX3NldF9yb2J1c3RfbGlzdCgpIC0gU2V0IHRoZSByb2J1c3QtZnV0ZXggbGlzdCBoZWFkIG9mIGEgdGFzaworICogQGhlYWQ6CXBvaW50ZXIgdG8gdGhlIGxpc3QtaGVhZAorICogQGxlbjoJbGVuZ3RoIG9mIHRoZSBsaXN0LWhlYWQsIGFzIHVzZXJzcGFjZSBleHBlY3RzCiAgKi8KIFNZU0NBTExfREVGSU5FMihzZXRfcm9idXN0X2xpc3QsIHN0cnVjdCByb2J1c3RfbGlzdF9oZWFkIF9fdXNlciAqLCBoZWFkLAogCQlzaXplX3QsIGxlbikKQEAgLTIzMjMsMTAgKzIzNDcsMTAgQEAKIH0KIAogLyoqCi0gKiBzeXNfZ2V0X3JvYnVzdF9saXN0IC0gZ2V0IHRoZSByb2J1c3QtZnV0ZXggbGlzdCBoZWFkIG9mIGEgdGFzawotICogQHBpZDogcGlkIG9mIHRoZSBwcm9jZXNzIFt6ZXJvIGZvciBjdXJyZW50IHRhc2tdCi0gKiBAaGVhZF9wdHI6IHBvaW50ZXIgdG8gYSBsaXN0LWhlYWQgcG9pbnRlciwgdGhlIGtlcm5lbCBmaWxscyBpdCBpbgotICogQGxlbl9wdHI6IHBvaW50ZXIgdG8gYSBsZW5ndGggZmllbGQsIHRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIGhlYWRlciBzaXplCisgKiBzeXNfZ2V0X3JvYnVzdF9saXN0KCkgLSBHZXQgdGhlIHJvYnVzdC1mdXRleCBsaXN0IGhlYWQgb2YgYSB0YXNrCisgKiBAcGlkOglwaWQgb2YgdGhlIHByb2Nlc3MgW3plcm8gZm9yIGN1cnJlbnQgdGFza10KKyAqIEBoZWFkX3B0cjoJcG9pbnRlciB0byBhIGxpc3QtaGVhZCBwb2ludGVyLCB0aGUga2VybmVsIGZpbGxzIGl0IGluCisgKiBAbGVuX3B0cjoJcG9pbnRlciB0byBhIGxlbmd0aCBmaWVsZCwgdGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgaGVhZGVyIHNpemUKICAqLwogU1lTQ0FMTF9ERUZJTkUzKGdldF9yb2J1c3RfbGlzdCwgaW50LCBwaWQsCiAJCXN0cnVjdCByb2J1c3RfbGlzdF9oZWFkIF9fdXNlciAqIF9fdXNlciAqLCBoZWFkX3B0ciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGU1ZDk4Y2UuLjNlMWMzNmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtNTA5LDEzICs1MDksMTQgQEAKICAqIG5leHQgZXZlbnQKICAqIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYW5kIGJhc2UtPmxvY2sgaGVsZAogICovCi1zdGF0aWMgdm9pZCBocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UpCitzdGF0aWMgdm9pZAoraHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlLCBpbnQgc2tpcF9lcXVhbCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlID0gY3B1X2Jhc2UtPmNsb2NrX2Jhc2U7Ci0Ja3RpbWVfdCBleHBpcmVzOworCWt0aW1lX3QgZXhwaXJlcywgZXhwaXJlc19uZXh0OwogCi0JY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0ID0gS1RJTUVfTUFYOworCWV4cGlyZXNfbmV4dC50djY0ID0gS1RJTUVfTUFYOwogCiAJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyssIGJhc2UrKykgewogCQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7CkBAIC01MzEsMTAgKzUzMiwxNSBAQAogCQkgKi8KIAkJaWYgKGV4cGlyZXMudHY2NCA8IDApCiAJCQlleHBpcmVzLnR2NjQgPSAwOwotCQlpZiAoZXhwaXJlcy50djY0IDwgY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0KQotCQkJY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7CisJCWlmIChleHBpcmVzLnR2NjQgPCBleHBpcmVzX25leHQudHY2NCkKKwkJCWV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7CiAJfQogCisJaWYgKHNraXBfZXF1YWwgJiYgZXhwaXJlc19uZXh0LnR2NjQgPT0gY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0KQorCQlyZXR1cm47CisKKwljcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgPSBleHBpcmVzX25leHQudHY2NDsKKwogCWlmIChjcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgIT0gS1RJTUVfTUFYKQogCQl0aWNrX3Byb2dyYW1fZXZlbnQoY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dCwgMSk7CiB9CkBAIC02MTcsNyArNjIzLDcgQEAKIAliYXNlLT5jbG9ja19iYXNlW0NMT0NLX1JFQUxUSU1FXS5vZmZzZXQgPQogCQl0aW1lc3BlY190b19rdGltZShyZWFsdGltZV9vZmZzZXQpOwogCi0JaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZSk7CisJaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZSwgMCk7CiAJc3Bpbl91bmxvY2soJmJhc2UtPmxvY2spOwogfQogCkBAIC03MjAsOCArNzI2LDYgQEAKIAkvKiAiUmV0cmlnZ2VyIiB0aGUgaW50ZXJydXB0IHRvIGdldCB0aGluZ3MgZ29pbmcgKi8KIAlyZXRyaWdnZXJfbmV4dF9ldmVudChOVUxMKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlN3aXRjaGVkIHRvIGhpZ2ggcmVzb2x1dGlvbiBtb2RlIG9uIENQVSAlZFxuIiwKLQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNzMwLDcgKzczNCw4IEBACiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2hyZXNfYWN0aXZlKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfaXNfaHJlc19lbmFibGVkKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfc3dpdGNoX3RvX2hyZXModm9pZCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfZm9yY2VfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpiYXNlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZAoraHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmJhc2UsIGludCBza2lwX2VxdWFsKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfZW5xdWV1ZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXIgKnRpbWVyLAogCQkJCQkgICAgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSwKIAkJCQkJICAgIGludCB3YWtldXApCkBAIC04NzMsMTkgKzg3OCwyOSBAQAogCQkJICAgICBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIG5ld3N0YXRlLCBpbnQgcmVwcm9ncmFtKQogewotCWlmICh0aW1lci0+c3RhdGUgJiBIUlRJTUVSX1NUQVRFX0VOUVVFVUVEKSB7Ci0JCS8qCi0JCSAqIFJlbW92ZSB0aGUgdGltZXIgZnJvbSB0aGUgcmJ0cmVlIGFuZCByZXBsYWNlIHRoZQotCQkgKiBmaXJzdCBlbnRyeSBwb2ludGVyIGlmIG5lY2Vzc2FyeS4KLQkJICovCi0JCWlmIChiYXNlLT5maXJzdCA9PSAmdGltZXItPm5vZGUpIHsKLQkJCWJhc2UtPmZpcnN0ID0gcmJfbmV4dCgmdGltZXItPm5vZGUpOwotCQkJLyogUmVwcm9ncmFtIHRoZSBjbG9jayBldmVudCBkZXZpY2UuIGlmIGVuYWJsZWQgKi8KLQkJCWlmIChyZXByb2dyYW0gJiYgaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKQotCQkJCWhydGltZXJfZm9yY2VfcmVwcm9ncmFtKGJhc2UtPmNwdV9iYXNlKTsKKwlpZiAoISh0aW1lci0+c3RhdGUgJiBIUlRJTUVSX1NUQVRFX0VOUVVFVUVEKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgdGltZXIgZnJvbSB0aGUgcmJ0cmVlIGFuZCByZXBsYWNlIHRoZSBmaXJzdAorCSAqIGVudHJ5IHBvaW50ZXIgaWYgbmVjZXNzYXJ5LgorCSAqLworCWlmIChiYXNlLT5maXJzdCA9PSAmdGltZXItPm5vZGUpIHsKKwkJYmFzZS0+Zmlyc3QgPSByYl9uZXh0KCZ0aW1lci0+bm9kZSk7CisjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUworCQkvKiBSZXByb2dyYW0gdGhlIGNsb2NrIGV2ZW50IGRldmljZS4gaWYgZW5hYmxlZCAqLworCQlpZiAocmVwcm9ncmFtICYmIGhydGltZXJfaHJlc19hY3RpdmUoKSkgeworCQkJa3RpbWVfdCBleHBpcmVzOworCisJCQlleHBpcmVzID0ga3RpbWVfc3ViKGhydGltZXJfZ2V0X2V4cGlyZXModGltZXIpLAorCQkJCQkgICAgYmFzZS0+b2Zmc2V0KTsKKwkJCWlmIChiYXNlLT5jcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgPT0gZXhwaXJlcy50djY0KQorCQkJCWhydGltZXJfZm9yY2VfcmVwcm9ncmFtKGJhc2UtPmNwdV9iYXNlLCAxKTsKIAkJfQotCQlyYl9lcmFzZSgmdGltZXItPm5vZGUsICZiYXNlLT5hY3RpdmUpOworI2VuZGlmCiAJfQorCXJiX2VyYXNlKCZ0aW1lci0+bm9kZSwgJmJhc2UtPmFjdGl2ZSk7CitvdXQ6CiAJdGltZXItPnN0YXRlID0gbmV3c3RhdGU7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IGE4MWNmODAuLjE3YzcxYmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtMTEsNiArMTEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwppbmRleCAxMTRlNzA0Li5iZDcyNzNlIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKKysrIGIva2VybmVsL2lycS9zcHVyaW91cy5jCkBAIC0xMjEsNyArMTIxLDkgQEAKIAkJaWYgKCEoc3RhdHVzICYgSVJRX1NQVVJJT1VTX0RJU0FCTEVEKSkKIAkJCWNvbnRpbnVlOwogCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCXRyeV9vbmVfaXJxKGksIGRlc2MpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBjZmFkYzEyLi41MjQwZDc1IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTEzMzMsNyArMTMzMyw3IEBACiAJcmV0dXJuIHNlcV9vcGVuKGZpbHAsICZrcHJvYmVzX3NlcV9vcHMpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX2twcm9iZXNfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnZnNfa3Byb2Jlc19vcGVyYXRpb25zID0gewogCS5vcGVuICAgICAgICAgICA9IGtwcm9iZXNfb3BlbiwKIAkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICAgICAgICAgPSBzZXFfbHNlZWssCkBAIC0xNTE1LDcgKzE1MTUsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19rcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfa3AgPSB7CiAJLnJlYWQgPSAgICAgICAgIHJlYWRfZW5hYmxlZF9maWxlX2Jvb2wsCiAJLndyaXRlID0gICAgICAgIHdyaXRlX2VuYWJsZWRfZmlsZV9ib29sLAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IDVmZTcwOTkuLmFiN2FlNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTUwLDI5ICsxNTAsNiBAQAogRVhQT1JUX1NZTUJPTChrdGhyZWFkX2NyZWF0ZSk7CiAKIC8qKgotICoga3RocmVhZF9iaW5kIC0gYmluZCBhIGp1c3QtY3JlYXRlZCBrdGhyZWFkIHRvIGEgY3B1LgotICogQGs6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCi0gKiBAY3B1OiBjcHUgKG1pZ2h0IG5vdCBiZSBvbmxpbmUsIG11c3QgYmUgcG9zc2libGUpIGZvciBAayB0byBydW4gb24uCi0gKgotICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBzZXRfY3B1c19hbGxvd2VkKCksCi0gKiBleGNlcHQgdGhhdCBAY3B1IGRvZXNuJ3QgbmVlZCB0byBiZSBvbmxpbmUsIGFuZCB0aGUgdGhyZWFkIG11c3QgYmUKLSAqIHN0b3BwZWQgKGkuZS4sIGp1c3QgcmV0dXJuZWQgZnJvbSBrdGhyZWFkX2NyZWF0ZSgpKS4KLSAqLwotdm9pZCBrdGhyZWFkX2JpbmQoc3RydWN0IHRhc2tfc3RydWN0ICprLCB1bnNpZ25lZCBpbnQgY3B1KQotewotCS8qIE11c3QgaGF2ZSBkb25lIHNjaGVkdWxlKCkgaW4ga3RocmVhZCgpIGJlZm9yZSB3ZSBzZXRfdGFza19jcHUgKi8KLQlpZiAoIXdhaXRfdGFza19pbmFjdGl2ZShrLCBUQVNLX1VOSU5URVJSVVBUSUJMRSkpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOwotCX0KLQlzZXRfdGFza19jcHUoaywgY3B1KTsKLQlrLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOwotCWstPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7Ci0Jay0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOwotfQotRVhQT1JUX1NZTUJPTChrdGhyZWFkX2JpbmQpOwotCi0vKioKICAqIGt0aHJlYWRfc3RvcCAtIHN0b3AgYSB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgogICogQGs6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCiAgKgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggMzgxNWFjMWQuLjlhZjU2NzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtMTQyLDYgKzE0MiwxMSBAQAogI2lmZGVmIENPTkZJR19MT0NLX1NUQVQKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbG9ja19jbGFzc19zdGF0c1tNQVhfTE9DS0RFUF9LRVlTXSwgbG9ja19zdGF0cyk7CiAKK3N0YXRpYyBpbmxpbmUgdTY0IGxvY2tzdGF0X2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIGNwdV9jbG9jayhzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCiBzdGF0aWMgaW50IGxvY2tfcG9pbnQodW5zaWduZWQgbG9uZyBwb2ludHNbXSwgdW5zaWduZWQgbG9uZyBpcCkKIHsKIAlpbnQgaTsKQEAgLTE1OCw3ICsxNjMsNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgdm9pZCBsb2NrX3RpbWVfaW5jKHN0cnVjdCBsb2NrX3RpbWUgKmx0LCBzNjQgdGltZSkKK3N0YXRpYyB2b2lkIGxvY2tfdGltZV9pbmMoc3RydWN0IGxvY2tfdGltZSAqbHQsIHU2NCB0aW1lKQogewogCWlmICh0aW1lID4gbHQtPm1heCkKIAkJbHQtPm1heCA9IHRpbWU7CkBAIC0yMzQsMTIgKzIzOSwxMiBAQAogc3RhdGljIHZvaWQgbG9ja19yZWxlYXNlX2hvbGR0aW1lKHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrKQogewogCXN0cnVjdCBsb2NrX2NsYXNzX3N0YXRzICpzdGF0czsKLQlzNjQgaG9sZHRpbWU7CisJdTY0IGhvbGR0aW1lOwogCiAJaWYgKCFsb2NrX3N0YXQpCiAJCXJldHVybjsKIAotCWhvbGR0aW1lID0gc2NoZWRfY2xvY2soKSAtIGhsb2NrLT5ob2xkdGltZV9zdGFtcDsKKwlob2xkdGltZSA9IGxvY2tzdGF0X2Nsb2NrKCkgLSBobG9jay0+aG9sZHRpbWVfc3RhbXA7CiAKIAlzdGF0cyA9IGdldF9sb2NrX3N0YXRzKGhsb2NrX2NsYXNzKGhsb2NrKSk7CiAJaWYgKGhsb2NrLT5yZWFkKQpAQCAtMjc5Miw3ICsyNzk3LDcgQEAKIAlobG9jay0+cmVmZXJlbmNlcyA9IHJlZmVyZW5jZXM7CiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVAogCWhsb2NrLT53YWl0dGltZV9zdGFtcCA9IDA7Ci0JaGxvY2stPmhvbGR0aW1lX3N0YW1wID0gc2NoZWRfY2xvY2soKTsKKwlobG9jay0+aG9sZHRpbWVfc3RhbXAgPSBsb2Nrc3RhdF9jbG9jaygpOwogI2VuZGlmCiAKIAlpZiAoY2hlY2sgPT0gMiAmJiAhbWFya19pcnFmbGFncyhjdXJyLCBobG9jaykpCkBAIC0zMzIyLDcgKzMzMjcsNyBAQAogCWlmIChobG9jay0+aW5zdGFuY2UgIT0gbG9jaykKIAkJcmV0dXJuOwogCi0JaGxvY2stPndhaXR0aW1lX3N0YW1wID0gc2NoZWRfY2xvY2soKTsKKwlobG9jay0+d2FpdHRpbWVfc3RhbXAgPSBsb2Nrc3RhdF9jbG9jaygpOwogCiAJY29udGVudGlvbl9wb2ludCA9IGxvY2tfcG9pbnQoaGxvY2tfY2xhc3MoaGxvY2spLT5jb250ZW50aW9uX3BvaW50LCBpcCk7CiAJY29udGVuZGluZ19wb2ludCA9IGxvY2tfcG9pbnQoaGxvY2tfY2xhc3MoaGxvY2spLT5jb250ZW5kaW5nX3BvaW50LApAQCAtMzM0NSw4ICszMzUwLDcgQEAKIAlzdHJ1Y3QgaGVsZF9sb2NrICpobG9jaywgKnByZXZfaGxvY2s7CiAJc3RydWN0IGxvY2tfY2xhc3Nfc3RhdHMgKnN0YXRzOwogCXVuc2lnbmVkIGludCBkZXB0aDsKLQl1NjQgbm93OwotCXM2NCB3YWl0dGltZSA9IDA7CisJdTY0IG5vdywgd2FpdHRpbWUgPSAwOwogCWludCBpLCBjcHU7CiAKIAlkZXB0aCA9IGN1cnItPmxvY2tkZXBfZGVwdGg7CkBAIC0zMzc0LDcgKzMzNzgsNyBAQAogCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWlmIChobG9jay0+d2FpdHRpbWVfc3RhbXApIHsKLQkJbm93ID0gc2NoZWRfY2xvY2soKTsKKwkJbm93ID0gbG9ja3N0YXRfY2xvY2soKTsKIAkJd2FpdHRpbWUgPSBub3cgLSBobG9jay0+d2FpdHRpbWVfc3RhbXA7CiAJCWhsb2NrLT5ob2xkdGltZV9zdGFtcCA9IG5vdzsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNWEyOTM5Ny4uOGI3ZDg4MCAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMTk5MiwxMiArMTk5MiwxNCBAQAogCQkJCQkgIEVsZl9TaGRyICpzZWNoZHJzLAogCQkJCQkgIHVuc2lnbmVkIGludCBzeW1pbmRleCwKIAkJCQkJICB1bnNpZ25lZCBpbnQgc3RyaW5kZXgsCi0JCQkJCSAgY29uc3QgRWxmX0hkciAqaGRyLAorCQkJCQkgIGNvbnN0IEVsZl9FaGRyICpoZHIsCiAJCQkJCSAgY29uc3QgY2hhciAqc2Vjc3RyaW5ncywKIAkJCQkJICB1bnNpZ25lZCBsb25nICpwc3Ryb2ZmcywKIAkJCQkJICB1bnNpZ25lZCBsb25nICpzdHJtYXApCiB7CisJcmV0dXJuIDA7CiB9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfa2FsbHN5bXMoc3RydWN0IG1vZHVsZSAqbW9kLAogCQkJCUVsZl9TaGRyICpzZWNoZHJzLAogCQkJCXVuc2lnbmVkIGludCBzaG51bSwKQEAgLTIwODEsOSArMjA4Myw4IEBACiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWxvbmcgZXJyID0gMDsKIAl2b2lkICpwZXJjcHUgPSBOVUxMLCAqcHRyID0gTlVMTDsgLyogU3RvcHMgc3B1cmlvdXMgZ2NjIHdhcm5pbmcgKi8KLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMKIAl1bnNpZ25lZCBsb25nIHN5bW9mZnMsIHN0cm9mZnMsICpzdHJtYXA7Ci0jZW5kaWYKKwogCW1tX3NlZ21lbnRfdCBvbGRfZnM7CiAKIAlERUJVR1AoImxvYWRfbW9kdWxlOiB1bW9kPSVwLCBsZW49JWx1LCB1YXJncz0lcFxuIiwKQEAgLTMwOTEsNyArMzA5Miw2IEBACiAJCSAgIHN0cnVjdCBtb2R2ZXJzaW9uX2luZm8gKnZlciwKIAkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AsCiAJCSAgIHN0cnVjdCBrZXJuZWxfc3ltYm9sICprcywKLQkJICAgc3RydWN0IG1hcmtlciAqbWFya2VyLAogCQkgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCiB7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXgtZGVidWcuYyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCmluZGV4IDUwZDAyMmUuLmVjODE1YTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCisrKyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2lzb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9wYW5pYy5jIGIva2VybmVsL3BhbmljLmMKaW5kZXggYmNkZWYyNi4uOTZiNDVkMCAxMDA2NDQKLS0tIGEva2VybmVsL3BhbmljLmMKKysrIGIva2VybmVsL3BhbmljLmMKQEAgLTkwLDYgKzkwLDggQEAKIAogCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZwYW5pY19ub3RpZmllcl9saXN0LCAwLCBidWYpOwogCisJYnVzdF9zcGlubG9ja3MoMCk7CisKIAlpZiAoIXBhbmljX2JsaW5rKQogCQlwYW5pY19ibGluayA9IG5vX2JsaW5rOwogCkBAIC0xMzYsNyArMTM4LDYgQEAKIAkJbWRlbGF5KDEpOwogCQlpKys7CiAJfQotCWJ1c3Rfc3BpbmxvY2tzKDApOwogfQogCiBFWFBPUlRfU1lNQk9MKHBhbmljKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCA5ZGE1OGVhLi5kNjU2YzI3IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC0yMTgsMTUgKzIxOCwxMSBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQlpZiAoa3AtPmZsYWdzICYgS1BBUkFNX0tNQUxMT0NFRCkKLQkJa2ZyZWUoKihjaGFyICoqKWtwLT5hcmcpOwotCiAJLyogVGhpcyBpcyBhIGhhY2suICBXZSBjYW4ndCBuZWVkIHRvIHN0cmR1cCBpbiBlYXJseSBib290LCBhbmQgd2UKIAkgKiBkb24ndCBuZWVkIHRvOyB0aGlzIG1hbmdsZWQgY29tbWFuZGxpbmUgaXMgcHJlc2VydmVkLiAqLwogCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKSB7Ci0JCWtwLT5mbGFncyB8PSBLUEFSQU1fS01BTExPQ0VEOwogCQkqKGNoYXIgKiopa3AtPmFyZyA9IGtzdHJkdXAodmFsLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFrcC0+YXJnKQorCQlpZiAoISooY2hhciAqKilrcC0+YXJnKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlCiAJCSooY29uc3QgY2hhciAqKilrcC0+YXJnID0gdmFsOwpAQCAtMzA0LDYgKzMwMCw3IEBACiAJCSAgICAgICB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4LAogCQkgICAgICAgdm9pZCAqZWxlbSwgaW50IGVsZW1zaXplLAogCQkgICAgICAgaW50ICgqc2V0KShjb25zdCBjaGFyICosIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKSwKKwkJICAgICAgIHUxNiBmbGFncywKIAkJICAgICAgIHVuc2lnbmVkIGludCAqbnVtKQogewogCWludCByZXQ7CkBAIC0zMTMsNiArMzEwLDcgQEAKIAkvKiBHZXQgdGhlIG5hbWUgcmlnaHQgZm9yIGVycm9ycy4gKi8KIAlrcC5uYW1lID0gbmFtZTsKIAlrcC5hcmcgPSBlbGVtOworCWtwLmZsYWdzID0gZmxhZ3M7CiAKIAkvKiBObyBlcXVhbHMgc2lnbj8gKi8KIAlpZiAoIXZhbCkgewpAQCAtMzU4LDcgKzM1Niw4IEBACiAJdW5zaWduZWQgaW50IHRlbXBfbnVtOwogCiAJcmV0dXJuIHBhcmFtX2FycmF5KGtwLT5uYW1lLCB2YWwsIDEsIGFyci0+bWF4LCBhcnItPmVsZW0sCi0JCQkgICBhcnItPmVsZW1zaXplLCBhcnItPnNldCwgYXJyLT5udW0gPzogJnRlbXBfbnVtKTsKKwkJCSAgIGFyci0+ZWxlbXNpemUsIGFyci0+c2V0LCBrcC0+ZmxhZ3MsCisJCQkgICBhcnItPm51bSA/OiAmdGVtcF9udW0pOwogfQogCiBpbnQgcGFyYW1fYXJyYXlfZ2V0KGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCkBAIC02MDUsMTEgKzYwNCw3IEBACiAKIHZvaWQgZGVzdHJveV9wYXJhbXMoY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqcGFyYW1zLCB1bnNpZ25lZCBudW0pCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCi0JCWlmIChwYXJhbXNbaV0uZmxhZ3MgJiBLUEFSQU1fS01BTExPQ0VEKQotCQkJa2ZyZWUoKihjaGFyICoqKXBhcmFtc1tpXS5hcmcpOworCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBmcmVlIGttYWxsb2NlZCBjaGFycCBwYXJhbWV0ZXJzLiAgSXQgZG9lc24ndC4gKi8KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGtlcm5lbF9hZGRfc3lzZnNfcGFyYW0oY29uc3QgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDc2YWM0ZGIuLjdmMjk2NDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KQEAgLTEwMzAsMTQgKzEwMzEsMTAgQEAKIAl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CiAKIAlwZXJmX2Rpc2FibGUoKTsKLQlpZiAoY3R4LT5ucl9hY3RpdmUpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQotCQkJCWV2ZW50X3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOwotCQkJZWxzZQotCQkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOwotCQl9Ci0JfQorCWlmIChjdHgtPm5yX2FjdGl2ZSkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpCisJCQlncm91cF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKKwogCXBlcmZfZW5hYmxlKCk7CiAgb3V0OgogCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwpAQCAtMTI1OCwxMiArMTI1NSw4IEBACiAJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gY3B1KQogCQkJY29udGludWU7CiAKLQkJaWYgKGV2ZW50ICE9IGV2ZW50LT5ncm91cF9sZWFkZXIpCi0JCQlldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0JCWVsc2UgewotCQkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCAxKSkKLQkJCQlncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7Ci0JCX0KKwkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCAxKSkKKwkJCWdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKIAogCQkvKgogCQkgKiBJZiB0aGlzIHBpbm5lZCBncm91cCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsCkBAIC0xMjkxLDE1ICsxMjg0LDkgQEAKIAkJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBjcHUpCiAJCQljb250aW51ZTsKIAotCQlpZiAoZXZlbnQgIT0gZXZlbnQtPmdyb3VwX2xlYWRlcikgewotCQkJaWYgKGV2ZW50X3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKKwkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCBjYW5fYWRkX2h3KSkKKwkJCWlmIChncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSkpCiAJCQkJY2FuX2FkZF9odyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIGNhbl9hZGRfaHcpKSB7Ci0JCQkJaWYgKGdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKLQkJCQkJY2FuX2FkZF9odyA9IDA7Ci0JCQl9Ci0JCX0KIAl9CiAJcGVyZl9lbmFibGUoKTsKICBvdXQ6CkBAIC0xMzY4LDcgKzEzNTUsNyBAQAogCXU2NCBpbnRlcnJ1cHRzLCBmcmVxOwogCiAJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CiAJCWlmIChldmVudC0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCiAJCQljb250aW51ZTsKIApAQCAtMjEwNSw0OSArMjA5MiwzMSBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi1zdGF0aWMgaW50IHBlcmZfbW1hcF9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJmX2RhdGFfc2l6ZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwotCWludCByZXQgPSBWTV9GQVVMVF9TSUdCVVM7Ci0KLQlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfTUtXUklURSkgewotCQlpZiAodm1mLT5wZ29mZiA9PSAwKQotCQkJcmV0ID0gMDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7Ci0JaWYgKCFkYXRhKQotCQlnb3RvIHVubG9jazsKLQotCWlmICh2bWYtPnBnb2ZmID09IDApIHsKLQkJdm1mLT5wYWdlID0gdmlydF90b19wYWdlKGRhdGEtPnVzZXJfcGFnZSk7Ci0JfSBlbHNlIHsKLQkJaW50IG5yID0gdm1mLT5wZ29mZiAtIDE7Ci0KLQkJaWYgKCh1bnNpZ25lZCluciA+IGRhdGEtPm5yX3BhZ2VzKQotCQkJZ290byB1bmxvY2s7Ci0KLQkJaWYgKHZtZi0+ZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKQotCQkJZ290byB1bmxvY2s7Ci0KLQkJdm1mLT5wYWdlID0gdmlydF90b19wYWdlKGRhdGEtPmRhdGFfcGFnZXNbbnJdKTsKLQl9Ci0KLQlnZXRfcGFnZSh2bWYtPnBhZ2UpOwotCXZtZi0+cGFnZS0+bWFwcGluZyA9IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOwotCXZtZi0+cGFnZS0+aW5kZXggICA9IHZtZi0+cGdvZmY7Ci0KLQlyZXQgPSAwOwotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZGF0YS0+bnJfcGFnZXMgPDwgKFBBR0VfU0hJRlQgKyBkYXRhLT5kYXRhX29yZGVyKTsKIH0KIAotc3RhdGljIGludCBwZXJmX21tYXBfZGF0YV9hbGxvYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBucl9wYWdlcykKKyNpZm5kZWYgQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0MKKworLyoKKyAqIEJhY2sgcGVyZl9tbWFwKCkgd2l0aCByZWd1bGFyIEdGUF9LRVJORUwtMCBwYWdlcy4KKyAqLworCitzdGF0aWMgc3RydWN0IHBhZ2UgKgorcGVyZl9tbWFwX3RvX3BhZ2Uoc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQoreworCWlmIChwZ29mZiA+IGRhdGEtPm5yX3BhZ2VzKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChwZ29mZiA9PSAwKQorCQlyZXR1cm4gdmlydF90b19wYWdlKGRhdGEtPnVzZXJfcGFnZSk7CisKKwlyZXR1cm4gdmlydF90b19wYWdlKGRhdGEtPmRhdGFfcGFnZXNbcGdvZmYgLSAxXSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKgorcGVyZl9tbWFwX2RhdGFfYWxsb2Moc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbnJfcGFnZXMpCiB7CiAJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTIxNzIsMTkgKzIxNDEsMTAgQEAKIAkJCWdvdG8gZmFpbF9kYXRhX3BhZ2VzOwogCX0KIAorCWRhdGEtPmRhdGFfb3JkZXIgPSAwOwogCWRhdGEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7Ci0JYXRvbWljX3NldCgmZGF0YS0+bG9jaywgLTEpOwogCi0JaWYgKGV2ZW50LT5hdHRyLndhdGVybWFyaykgewotCQlkYXRhLT53YXRlcm1hcmsgPSBtaW5fdChsb25nLCBQQUdFX1NJWkUgKiBucl9wYWdlcywKLQkJCQkgICAgICBldmVudC0+YXR0ci53YWtldXBfd2F0ZXJtYXJrKTsKLQl9Ci0JaWYgKCFkYXRhLT53YXRlcm1hcmspCi0JCWRhdGEtPndhdGVybWFyayA9IG1heChQQUdFX1NJWkUsIFBBR0VfU0laRSAqIG5yX3BhZ2VzIC8gNCk7Ci0KLQlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIGRhdGEpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGRhdGE7CiAKIGZhaWxfZGF0YV9wYWdlczoKIAlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCkBAIC0yMTk2LDcgKzIxNTYsNyBAQAogCWtmcmVlKGRhdGEpOwogCiBmYWlsOgotCXJldHVybiAtRU5PTUVNOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX21tYXBfZnJlZV9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTIyMDcsMjggKzIxNjcsMTY5IEBACiAJX19mcmVlX3BhZ2UocGFnZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQorc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwogCWludCBpOwogCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCByY3VfaGVhZCk7Ci0KIAlwZXJmX21tYXBfZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWRhdGEtPnVzZXJfcGFnZSk7CiAJZm9yIChpID0gMDsgaSA8IGRhdGEtPm5yX3BhZ2VzOyBpKyspCiAJCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+ZGF0YV9wYWdlc1tpXSk7Cit9CiAKKyNlbHNlCisKKy8qCisgKiBCYWNrIHBlcmZfbW1hcCgpIHdpdGggdm1hbGxvYyBtZW1vcnkuCisgKgorICogUmVxdWlyZWQgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIGQtY2FjaGUgYWxpYXNpbmcgaXNzdWVzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqCitwZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCit7CisJaWYgKHBnb2ZmID4gKDFVTCA8PCBkYXRhLT5kYXRhX29yZGVyKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKCh2b2lkICopZGF0YS0+dXNlcl9wYWdlICsgcGdvZmYgKiBQQUdFX1NJWkUpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfdW5tYXJrX3BhZ2Uodm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKKworCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwl2b2lkICpiYXNlOworCWludCBpLCBucjsKKworCWRhdGEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCB3b3JrKTsKKwluciA9IDEgPDwgZGF0YS0+ZGF0YV9vcmRlcjsKKworCWJhc2UgPSBkYXRhLT51c2VyX3BhZ2U7CisJZm9yIChpID0gMDsgaSA8IG5yICsgMTsgaSsrKQorCQlwZXJmX21tYXBfdW5tYXJrX3BhZ2UoYmFzZSArIChpICogUEFHRV9TSVpFKSk7CisKKwl2ZnJlZShiYXNlKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCit7CisJc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKgorcGVyZl9tbWFwX2RhdGFfYWxsb2Moc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbnJfcGFnZXMpCit7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl2b2lkICphbGxfYnVmOworCisJV0FSTl9PTihhdG9taWNfcmVhZCgmZXZlbnQtPm1tYXBfY291bnQpKTsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfbW1hcF9kYXRhKTsKKwlzaXplICs9IHNpemVvZih2b2lkICopOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlnb3RvIGZhaWw7CisKKwlJTklUX1dPUksoJmRhdGEtPndvcmssIHBlcmZfbW1hcF9kYXRhX2ZyZWVfd29yayk7CisKKwlhbGxfYnVmID0gdm1hbGxvY191c2VyKChucl9wYWdlcyArIDEpICogUEFHRV9TSVpFKTsKKwlpZiAoIWFsbF9idWYpCisJCWdvdG8gZmFpbF9hbGxfYnVmOworCisJZGF0YS0+dXNlcl9wYWdlID0gYWxsX2J1ZjsKKwlkYXRhLT5kYXRhX3BhZ2VzWzBdID0gYWxsX2J1ZiArIFBBR0VfU0laRTsKKwlkYXRhLT5kYXRhX29yZGVyID0gaWxvZzIobnJfcGFnZXMpOworCWRhdGEtPm5yX3BhZ2VzID0gMTsKKworCXJldHVybiBkYXRhOworCitmYWlsX2FsbF9idWY6CisJa2ZyZWUoZGF0YSk7CisKK2ZhaWw6CisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IHBlcmZfbW1hcF9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCWludCByZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisKKwlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfTUtXUklURSkgeworCQlpZiAodm1mLT5wZ29mZiA9PSAwKQorCQkJcmV0ID0gMDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7CisJaWYgKCFkYXRhKQorCQlnb3RvIHVubG9jazsKKworCWlmICh2bWYtPnBnb2ZmICYmICh2bWYtPmZsYWdzICYgRkFVTFRfRkxBR19XUklURSkpCisJCWdvdG8gdW5sb2NrOworCisJdm1mLT5wYWdlID0gcGVyZl9tbWFwX3RvX3BhZ2UoZGF0YSwgdm1mLT5wZ29mZik7CisJaWYgKCF2bWYtPnBhZ2UpCisJCWdvdG8gdW5sb2NrOworCisJZ2V0X3BhZ2Uodm1mLT5wYWdlKTsKKwl2bWYtPnBhZ2UtPm1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZzsKKwl2bWYtPnBhZ2UtPmluZGV4ICAgPSB2bWYtPnBnb2ZmOworCisJcmV0ID0gMDsKK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitwZXJmX21tYXBfZGF0YV9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhKQoreworCWxvbmcgbWF4X3NpemUgPSBwZXJmX2RhdGFfc2l6ZShkYXRhKTsKKworCWF0b21pY19zZXQoJmRhdGEtPmxvY2ssIC0xKTsKKworCWlmIChldmVudC0+YXR0ci53YXRlcm1hcmspIHsKKwkJZGF0YS0+d2F0ZXJtYXJrID0gbWluX3QobG9uZywgbWF4X3NpemUsCisJCQkJCWV2ZW50LT5hdHRyLndha2V1cF93YXRlcm1hcmspOworCX0KKworCWlmICghZGF0YS0+d2F0ZXJtYXJrKQorCQlkYXRhLT53YXRlcm1hcmsgPSBtYXhfdChsb25nLCBQQUdFX1NJWkUsIG1heF9zaXplIC8gMik7CisKKworCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+ZGF0YSwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCit7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCisJZGF0YSA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCByY3VfaGVhZCk7CisJcGVyZl9tbWFwX2RhdGFfZnJlZShkYXRhKTsKIAlrZnJlZShkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9yZWxlYXNlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBldmVudC0+ZGF0YTsKIAogCVdBUk5fT04oYXRvbWljX3JlYWQoJmV2ZW50LT5tbWFwX2NvdW50KSk7CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIE5VTEwpOwotCWNhbGxfcmN1KCZkYXRhLT5yY3VfaGVhZCwgX19wZXJmX21tYXBfZGF0YV9mcmVlKTsKKwljYWxsX3JjdSgmZGF0YS0+cmN1X2hlYWQsIHBlcmZfbW1hcF9kYXRhX2ZyZWVfcmN1KTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9tbWFwX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCkBAIC0yMjQ0LDE2ICsyMzQ1LDE3IEBACiAKIAlXQVJOX09OX09OQ0UoZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CiAJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmV2ZW50LT5tbWFwX2NvdW50LCAmZXZlbnQtPm1tYXBfbXV0ZXgpKSB7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHBlcmZfZGF0YV9zaXplKGV2ZW50LT5kYXRhKTsKIAkJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gY3VycmVudF91c2VyKCk7CiAKLQkJYXRvbWljX2xvbmdfc3ViKGV2ZW50LT5kYXRhLT5ucl9wYWdlcyArIDEsICZ1c2VyLT5sb2NrZWRfdm0pOworCQlhdG9taWNfbG9uZ19zdWIoKHNpemUgPj4gUEFHRV9TSElGVCkgKyAxLCAmdXNlci0+bG9ja2VkX3ZtKTsKIAkJdm1hLT52bV9tbS0+bG9ja2VkX3ZtIC09IGV2ZW50LT5kYXRhLT5ucl9sb2NrZWQ7Ci0JCXBlcmZfbW1hcF9kYXRhX2ZyZWUoZXZlbnQpOworCQlwZXJmX21tYXBfZGF0YV9yZWxlYXNlKGV2ZW50KTsKIAkJbXV0ZXhfdW5sb2NrKCZldmVudC0+bW1hcF9tdXRleCk7CiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBlcmZfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGVyZl9tbWFwX3Ztb3BzID0gewogCS5vcGVuCQk9IHBlcmZfbW1hcF9vcGVuLAogCS5jbG9zZQkJPSBwZXJmX21tYXBfY2xvc2UsCiAJLmZhdWx0CQk9IHBlcmZfbW1hcF9mYXVsdCwKQEAgLTIyNjYsNiArMjM2OCw3IEBACiAJdW5zaWduZWQgbG9uZyB1c2VyX2xvY2tlZCwgdXNlcl9sb2NrX2xpbWl0OwogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGN1cnJlbnRfdXNlcigpOwogCXVuc2lnbmVkIGxvbmcgbG9ja2VkLCBsb2NrX2xpbWl0OworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIHZtYV9zaXplOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CiAJbG9uZyB1c2VyX2V4dHJhLCBleHRyYTsKQEAgLTIzMjgsMTAgKzI0MzEsMTUgQEAKIAl9CiAKIAlXQVJOX09OKGV2ZW50LT5kYXRhKTsKLQlyZXQgPSBwZXJmX21tYXBfZGF0YV9hbGxvYyhldmVudCwgbnJfcGFnZXMpOwotCWlmIChyZXQpCisKKwlkYXRhID0gcGVyZl9tbWFwX2RhdGFfYWxsb2MoZXZlbnQsIG5yX3BhZ2VzKTsKKwlyZXQgPSAtRU5PTUVNOworCWlmICghZGF0YSkKIAkJZ290byB1bmxvY2s7CiAKKwlyZXQgPSAwOworCXBlcmZfbW1hcF9kYXRhX2luaXQoZXZlbnQsIGRhdGEpOworCiAJYXRvbWljX3NldCgmZXZlbnQtPm1tYXBfY291bnQsIDEpOwogCWF0b21pY19sb25nX2FkZCh1c2VyX2V4dHJhLCAmdXNlci0+bG9ja2VkX3ZtKTsKIAl2bWEtPnZtX21tLT5sb2NrZWRfdm0gKz0gZXh0cmE7CkBAIC0yNTE5LDcgKzI2MjcsNyBAQAogCWlmICghZGF0YS0+d3JpdGFibGUpCiAJCXJldHVybiB0cnVlOwogCi0JbWFzayA9IChkYXRhLT5ucl9wYWdlcyA8PCBQQUdFX1NISUZUKSAtIDE7CisJbWFzayA9IHBlcmZfZGF0YV9zaXplKGRhdGEpIC0gMTsKIAogCW9mZnNldCA9IChvZmZzZXQgLSB0YWlsKSAmIG1hc2s7CiAJaGVhZCAgID0gKGhlYWQgICAtIHRhaWwpICYgbWFzazsKQEAgLTI2MjQsNyArMjczMiw3IEBACiAJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBpbnQgcGFnZXNfbWFzazsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBzaXplOwogCXZvaWQgKipwYWdlczsKIApAQCAtMjYzMywxMiArMjc0MSwxNCBAQAogCXBhZ2VzCQk9IGhhbmRsZS0+ZGF0YS0+ZGF0YV9wYWdlczsKIAogCWRvIHsKLQkJdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0OworCQl1bnNpZ25lZCBsb25nIHBhZ2Vfb2Zmc2V0OworCQl1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTsKIAkJaW50IG5yOwogCiAJCW5yCSAgICA9IChvZmZzZXQgPj4gUEFHRV9TSElGVCkgJiBwYWdlc19tYXNrOwotCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUgLSAxKTsKLQkJc2l6ZQkgICAgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0LCBsZW4pOworCQlwYWdlX3NpemUgICA9IDFVTCA8PCAoaGFuZGxlLT5kYXRhLT5kYXRhX29yZGVyICsgUEFHRV9TSElGVCk7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgKHBhZ2Vfc2l6ZSAtIDEpOworCQlzaXplCSAgICA9IG1pbl90KHVuc2lnbmVkIGludCwgcGFnZV9zaXplIC0gcGFnZV9vZmZzZXQsIGxlbik7CiAKIAkJbWVtY3B5KHBhZ2VzW25yXSArIHBhZ2Vfb2Zmc2V0LCBidWYsIHNpemUpOwogCkBAIC0zODQ5LDggKzM5NTksOSBAQAogCQlyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwogCiAJaWYgKHJlZ3MpIHsKLQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKLQkJCXJldCA9IEhSVElNRVJfTk9SRVNUQVJUOworCQlpZiAoIShldmVudC0+YXR0ci5leGNsdWRlX2lkbGUgJiYgY3VycmVudC0+cGlkID09IDApKQorCQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKKwkJCQlyZXQgPSBIUlRJTUVSX05PUkVTVEFSVDsKIAl9CiAKIAlwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBldmVudC0+aHcuc2FtcGxlX3BlcmlvZCk7CkBAIC0zODU5LDYgKzM5NzAsNDIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfc3RhcnRfaHJ0aW1lcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKKwlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKKwlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCXU2NCBwZXJpb2Q7CisKKwkJaWYgKGh3Yy0+cmVtYWluaW5nKSB7CisJCQlpZiAoaHdjLT5yZW1haW5pbmcgPCAwKQorCQkJCXBlcmlvZCA9IDEwMDAwOworCQkJZWxzZQorCQkJCXBlcmlvZCA9IGh3Yy0+cmVtYWluaW5nOworCQkJaHdjLT5yZW1haW5pbmcgPSAwOworCQl9IGVsc2UgeworCQkJcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwkJfQorCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKKwkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAorCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKworCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKKwkJa3RpbWVfdCByZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJmh3Yy0+aHJ0aW1lcik7CisJCWh3Yy0+cmVtYWluaW5nID0ga3RpbWVfdG9fbnMocmVtYWluaW5nKTsKKworCQlocnRpbWVyX2NhbmNlbCgmaHdjLT5ocnRpbWVyKTsKKwl9Cit9CisKIC8qCiAgKiBTb2Z0d2FyZSBldmVudDogY3B1IHdhbGwgdGltZSBjbG9jawogICovCkBAIC0zODgxLDIyICs0MDI4LDE0IEBACiAJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgY3B1X2Nsb2NrKGNwdSkpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJdTY0IHBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAotCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCi0JCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7Ci0JfQorCXBlcmZfc3dldmVudF9zdGFydF9ocnRpbWVyKGV2ZW50KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjcHVfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKGV2ZW50KTsKIAljcHVfY2xvY2tfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQpOwogfQogCkBAIC0zOTMzLDIyICs0MDcyLDE1IEBACiAJbm93ID0gZXZlbnQtPmN0eC0+dGltZTsKIAogCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCBub3cpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJdTY0IHBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAotCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCi0JCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7Ci0JfQorCisJcGVyZl9zd2V2ZW50X3N0YXJ0X2hydGltZXIoZXZlbnQpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHRhc2tfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKGV2ZW50KTsKIAl0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBldmVudC0+Y3R4LT50aW1lKTsKIAogfQpAQCAtNDc4MSw5ICs0OTEzLDcgQEAKIAkgKiBXZSBkb250IGhhdmUgdG8gZGlzYWJsZSBOTUlzIC0gd2UgYXJlIG9ubHkgbG9va2luZyBhdAogCSAqIHRoZSBsaXN0LCBub3QgbWFuaXB1bGF0aW5nIGl0OgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmcGFyZW50X2N0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKLQkJaWYgKGV2ZW50ICE9IGV2ZW50LT5ncm91cF9sZWFkZXIpCi0JCQljb250aW51ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmcGFyZW50X2N0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKIAogCQlpZiAoIWV2ZW50LT5hdHRyLmluaGVyaXQpIHsKIAkJCWluaGVyaXRlZF9hbGwgPSAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCmluZGV4IDA0YjNhODMuLjA0YTllOTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYworKysgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKQEAgLTY5MywyMSArNjkzLDIyIEBACiAJLyogVGhlIHNuYXBzaG90IGRldmljZSBzaG91bGQgbm90IGJlIG9wZW5lZCB3aGlsZSB3ZSdyZSBydW5uaW5nICovCiAJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmc25hcHNob3RfZGV2aWNlX2F2YWlsYWJsZSwgLTEsIDApKSB7CiAJCWVycm9yID0gLUVCVVNZOworCQlzd3N1c3BfY2xvc2UoRk1PREVfUkVBRCk7CiAJCWdvdG8gVW5sb2NrOwogCX0KIAogCXBtX3ByZXBhcmVfY29uc29sZSgpOwogCWVycm9yID0gcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9SRVNUT1JFX1BSRVBBUkUpOwogCWlmIChlcnJvcikKLQkJZ290byBGaW5pc2g7CisJCWdvdG8gY2xvc2VfZmluaXNoOwogCiAJZXJyb3IgPSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIEZpbmlzaDsKKwkJZ290byBjbG9zZV9maW5pc2g7CiAKIAllcnJvciA9IGNyZWF0ZV9iYXNpY19tZW1vcnlfYml0bWFwcygpOwogCWlmIChlcnJvcikKLQkJZ290byBGaW5pc2g7CisJCWdvdG8gY2xvc2VfZmluaXNoOwogCiAJcHJfZGVidWcoIlBNOiBQcmVwYXJpbmcgcHJvY2Vzc2VzIGZvciByZXN0b3JlLlxuIik7CiAJZXJyb3IgPSBwcmVwYXJlX3Byb2Nlc3NlcygpOwpAQCAtNzE5LDYgKzcyMCw3IEBACiAJcHJfZGVidWcoIlBNOiBSZWFkaW5nIGhpYmVybmF0aW9uIGltYWdlLlxuIik7CiAKIAllcnJvciA9IHN3c3VzcF9yZWFkKCZmbGFncyk7CisJc3dzdXNwX2Nsb3NlKEZNT0RFX1JFQUQpOwogCWlmICghZXJyb3IpCiAJCWhpYmVybmF0aW9uX3Jlc3RvcmUoZmxhZ3MgJiBTRl9QTEFURk9STV9NT0RFKTsKIApAQCAtNzM3LDYgKzczOSw5IEBACiAJbXV0ZXhfdW5sb2NrKCZwbV9tdXRleCk7CiAJcHJfZGVidWcoIlBNOiBSZXN1bWUgZnJvbSBkaXNrIGZhaWxlZC5cbiIpOwogCXJldHVybiBlcnJvcjsKK2Nsb3NlX2ZpbmlzaDoKKwlzd3N1c3BfY2xvc2UoRk1PREVfUkVBRCk7CisJZ290byBGaW5pc2g7CiB9CiAKIGxhdGVfaW5pdGNhbGwoc29mdHdhcmVfcmVzdW1lKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYwppbmRleCAxN2Q4YmIxLi4yNTU5NmU0IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3VzcGVuZF90ZXN0LmMKKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmRfdGVzdC5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBUaGUgdGltZSBpdCB0YWtlcyBpcyBzeXN0ZW0tc3BlY2lmaWMgdGhvdWdoLCBzbyB3aGVuIHdlIHRlc3QgdGhpcwogICogZHVyaW5nIHN5c3RlbSBib290dXAgd2UgYWxsb3cgYSBMT1Qgb2YgdGltZS4KICAqLwotI2RlZmluZSBURVNUX1NVU1BFTkRfU0VDT05EUwk1CisjZGVmaW5lIFRFU1RfU1VTUEVORF9TRUNPTkRTCTEwCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1c3BlbmRfdGVzdF9zdGFydF90aW1lOwogCkBAIC00OSw3ICs0OSw4IEBACiAJICogaGFzIHNvbWUgcGVyZm9ybWFuY2UgaXNzdWVzLiAgVGhlIHN0YWNrIGR1bXAgb2YgYSBXQVJOX09OCiAJICogaXMgbW9yZSBsaWtlbHkgdG8gZ2V0IHRoZSByaWdodCBhdHRlbnRpb24gdGhhbiBhIHByaW50ay4uLgogCSAqLwotCVdBUk4obXNlYyA+IChURVNUX1NVU1BFTkRfU0VDT05EUyAqIDEwMDApLCAiQ29tcG9uZW50OiAlc1xuIiwgbGFiZWwpOworCVdBUk4obXNlYyA+IChURVNUX1NVU1BFTkRfU0VDT05EUyAqIDEwMDApLAorCSAgICAgIkNvbXBvbmVudDogJXMsIHRpbWU6ICV1XG4iLCBsYWJlbCwgbXNlYyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dhcC5jIGIva2VybmVsL3Bvd2VyL3N3YXAuYwppbmRleCBiMTAxY2RjLi44OTBmNmIxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3dhcC5jCisrKyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKQEAgLTMxNCw3ICszMTQsNiBAQAogewogCXVuc2lnbmVkIGludCBtOwogCWludCByZXQ7Ci0JaW50IGVycm9yID0gMDsKIAlpbnQgbnJfcGFnZXM7CiAJaW50IGVycjI7CiAJc3RydWN0IGJpbyAqYmlvOwpAQCAtMzI5LDI2ICszMjgsMjcgQEAKIAlucl9wYWdlcyA9IDA7CiAJYmlvID0gTlVMTDsKIAlkb19nZXR0aW1lb2ZkYXkoJnN0YXJ0KTsKLQlkbyB7CisJd2hpbGUgKDEpIHsKIAkJcmV0ID0gc25hcHNob3RfcmVhZF9uZXh0KHNuYXBzaG90LCBQQUdFX1NJWkUpOwotCQlpZiAocmV0ID4gMCkgewotCQkJZXJyb3IgPSBzd2FwX3dyaXRlX3BhZ2UoaGFuZGxlLCBkYXRhX29mKCpzbmFwc2hvdCksCi0JCQkJCQkmYmlvKTsKLQkJCWlmIChlcnJvcikKLQkJCQlicmVhazsKLQkJCWlmICghKG5yX3BhZ2VzICUgbSkpCi0JCQkJcHJpbnRrKCJcYlxiXGJcYiUzZCUlIiwgbnJfcGFnZXMgLyBtKTsKLQkJCW5yX3BhZ2VzKys7Ci0JCX0KLQl9IHdoaWxlIChyZXQgPiAwKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJYnJlYWs7CisJCXJldCA9IHN3YXBfd3JpdGVfcGFnZShoYW5kbGUsIGRhdGFfb2YoKnNuYXBzaG90KSwgJmJpbyk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJaWYgKCEobnJfcGFnZXMgJSBtKSkKKwkJCXByaW50aygiXGJcYlxiXGIlM2QlJSIsIG5yX3BhZ2VzIC8gbSk7CisJCW5yX3BhZ2VzKys7CisJfQogCWVycjIgPSB3YWl0X29uX2Jpb19jaGFpbigmYmlvKTsKIAlkb19nZXR0aW1lb2ZkYXkoJnN0b3ApOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZXJyMjsKLQlpZiAoIWVycm9yKQorCWlmICghcmV0KQorCQlyZXQgPSBlcnIyOworCWlmICghcmV0KQogCQlwcmludGsoIlxiXGJcYlxiZG9uZVxuIik7CisJZWxzZQorCQlwcmludGsoIlxuIik7CiAJc3dzdXNwX3Nob3dfc3BlZWQoJnN0YXJ0LCAmc3RvcCwgbnJfdG9fd3JpdGUsICJXcm90ZSIpOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTUzNiw3ICs1MzYsOCBAQAogCQlzbmFwc2hvdF93cml0ZV9maW5hbGl6ZShzbmFwc2hvdCk7CiAJCWlmICghc25hcHNob3RfaW1hZ2VfbG9hZGVkKHNuYXBzaG90KSkKIAkJCWVycm9yID0gLUVOT0RBVEE7Ci0JfQorCX0gZWxzZQorCQlwcmludGsoIlxuIik7CiAJc3dzdXNwX3Nob3dfc3BlZWQoJnN0YXJ0LCAmc3RvcCwgbnJfdG9fcmVhZCwgIlJlYWQiKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC01NzIsOCArNTczLDYgQEAKIAkJZXJyb3IgPSBsb2FkX2ltYWdlKCZoYW5kbGUsICZzbmFwc2hvdCwgaGVhZGVyLT5wYWdlcyAtIDEpOwogCXJlbGVhc2Vfc3dhcF9yZWFkZXIoJmhhbmRsZSk7CiAKLQlibGtkZXZfcHV0KHJlc3VtZV9iZGV2LCBGTU9ERV9SRUFEKTsKLQogCWlmICghZXJyb3IpCiAJCXByX2RlYnVnKCJQTTogSW1hZ2Ugc3VjY2Vzc2Z1bGx5IGxvYWRlZFxuIik7CiAJZWxzZQpAQCAtNTk2LDcgKzU5NSw3IEBACiAJCWVycm9yID0gYmlvX3JlYWRfcGFnZShzd3N1c3BfcmVzdW1lX2Jsb2NrLAogCQkJCQlzd3N1c3BfaGVhZGVyLCBOVUxMKTsKIAkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOworCQkJZ290byBwdXQ7CiAKIAkJaWYgKCFtZW1jbXAoU1dTVVNQX1NJRywgc3dzdXNwX2hlYWRlci0+c2lnLCAxMCkpIHsKIAkJCW1lbWNweShzd3N1c3BfaGVhZGVyLT5zaWcsIHN3c3VzcF9oZWFkZXItPm9yaWdfc2lnLCAxMCk7CkBAIC02MDQsOCArNjAzLDEwIEBACiAJCQllcnJvciA9IGJpb193cml0ZV9wYWdlKHN3c3VzcF9yZXN1bWVfYmxvY2ssCiAJCQkJCQlzd3N1c3BfaGVhZGVyLCBOVUxMKTsKIAkJfSBlbHNlIHsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZXJyb3IgPSAtRUlOVkFMOwogCQl9CisKK3B1dDoKIAkJaWYgKGVycm9yKQogCQkJYmxrZGV2X3B1dChyZXN1bWVfYmRldiwgRk1PREVfUkVBRCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwZGF0ZS5jIGIva2VybmVsL3JjdXBkYXRlLmMKaW5kZXggMzdhYzQ1NC4uNDAwMTgzMyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdXBkYXRlLmMKQEAgLTQ2LDIyICs0NiwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAKLWVudW0gcmN1X2JhcnJpZXIgewotCVJDVV9CQVJSSUVSX1NURCwKLQlSQ1VfQkFSUklFUl9CSCwKLQlSQ1VfQkFSUklFUl9TQ0hFRCwKLX07CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X2xvY2tfa2V5Oworc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9sb2NrX21hcCA9CisJU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2siLCAmcmN1X2xvY2tfa2V5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9sb2NrX21hcCk7CisjZW5kaWYKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfaGVhZCwgcmN1X2JhcnJpZXJfaGVhZCkgPSB7TlVMTH07Ci1zdGF0aWMgYXRvbWljX3QgcmN1X2JhcnJpZXJfY3B1X2NvdW50Owotc3RhdGljIERFRklORV9NVVRFWChyY3VfYmFycmllcl9tdXRleCk7Ci1zdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gcmN1X2JhcnJpZXJfY29tcGxldGlvbjsKIGludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZSBfX3JlYWRfbW9zdGx5OwogCi1zdGF0aWMgYXRvbWljX3QgcmN1X21pZ3JhdGVfdHlwZV9jb3VudCA9IEFUT01JQ19JTklUKDApOwotc3RhdGljIHN0cnVjdCByY3VfaGVhZCByY3VfbWlncmF0ZV9oZWFkWzNdOwotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJjdV9taWdyYXRlX3dxKTsKLQogLyoKICAqIEF3YWtlbiB0aGUgY29ycmVzcG9uZGluZyBzeW5jaHJvbml6ZV9yY3UoKSBpbnN0YW5jZSBub3cgdGhhdCBhCiAgKiBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQuCkBAIC0xNjQsMTI5ICsxNTcsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV9iaCk7CiAKLXN0YXRpYyB2b2lkIHJjdV9iYXJyaWVyX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqbm90dXNlZCkKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50KSkKLQkJY29tcGxldGUoJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOwotfQotCi0vKgotICogQ2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZCwgYW5kIGZyb20gY3Jvc3MtY3B1IElSUSBjb250ZXh0LgotICovCi1zdGF0aWMgdm9pZCByY3VfYmFycmllcl9mdW5jKHZvaWQgKnR5cGUpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAmcGVyX2NwdShyY3VfYmFycmllcl9oZWFkLCBjcHUpOwotCi0JYXRvbWljX2luYygmcmN1X2JhcnJpZXJfY3B1X2NvdW50KTsKLQlzd2l0Y2ggKChlbnVtIHJjdV9iYXJyaWVyKXR5cGUpIHsKLQljYXNlIFJDVV9CQVJSSUVSX1NURDoKLQkJY2FsbF9yY3UoaGVhZCwgcmN1X2JhcnJpZXJfY2FsbGJhY2spOwotCQlicmVhazsKLQljYXNlIFJDVV9CQVJSSUVSX0JIOgotCQljYWxsX3JjdV9iaChoZWFkLCByY3VfYmFycmllcl9jYWxsYmFjayk7Ci0JCWJyZWFrOwotCWNhc2UgUkNVX0JBUlJJRVJfU0NIRUQ6Ci0JCWNhbGxfcmN1X3NjaGVkKGhlYWQsIHJjdV9iYXJyaWVyX2NhbGxiYWNrKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9taWdyYXRlZF9jYWxsYmFja3Modm9pZCkKLXsKLQl3YWl0X2V2ZW50KHJjdV9taWdyYXRlX3dxLCAhYXRvbWljX3JlYWQoJnJjdV9taWdyYXRlX3R5cGVfY291bnQpKTsKLQlzbXBfbWIoKTsgLyogSW4gY2FzZSB3ZSBkaWRuJ3Qgc2xlZXAuICovCi19Ci0KLS8qCi0gKiBPcmNoZXN0cmF0ZSB0aGUgc3BlY2lmaWVkIHR5cGUgb2YgUkNVIGJhcnJpZXIsIHdhaXRpbmcgZm9yIGFsbAotICogUkNVIGNhbGxiYWNrcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgdG8gY29tcGxldGUuCi0gKi8KLXN0YXRpYyB2b2lkIF9yY3VfYmFycmllcihlbnVtIHJjdV9iYXJyaWVyIHR5cGUpCi17Ci0JQlVHX09OKGluX2ludGVycnVwdCgpKTsKLQkvKiBUYWtlIGNwdWNvbnRyb2wgbXV0ZXggdG8gcHJvdGVjdCBhZ2FpbnN0IENQVSBob3RwbHVnICovCi0JbXV0ZXhfbG9jaygmcmN1X2JhcnJpZXJfbXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Ci0JLyoKLQkgKiBJbml0aWFsaXplIHJjdV9iYXJyaWVyX2NwdV9jb3VudCB0byAxLCB0aGVuIGludm9rZQotCSAqIHJjdV9iYXJyaWVyX2Z1bmMoKSBvbiBlYWNoIENQVSwgc28gdGhhdCBlYWNoIENQVSBhbHNvIGhhcwotCSAqIGluY3JlbWVudGVkIHJjdV9iYXJyaWVyX2NwdV9jb3VudC4gIE9ubHkgdGhlbiBpcyBpdCBzYWZlIHRvCi0JICogZGVjcmVtZW50IHJjdV9iYXJyaWVyX2NwdV9jb3VudCAtLSBvdGhlcndpc2UgdGhlIGZpcnN0IENQVQotCSAqIG1pZ2h0IGNvbXBsZXRlIGl0cyBncmFjZSBwZXJpb2QgYmVmb3JlIGFsbCBvZiB0aGUgb3RoZXIgQ1BVcwotCSAqIGRpZCB0aGVpciBpbmNyZW1lbnQsIGNhdXNpbmcgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gdG9vCi0JICogZWFybHkuCi0JICovCi0JYXRvbWljX3NldCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50LCAxKTsKLQlvbl9lYWNoX2NwdShyY3VfYmFycmllcl9mdW5jLCAodm9pZCAqKXR5cGUsIDEpOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfYmFycmllcl9jcHVfY291bnQpKQotCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Ci0JbXV0ZXhfdW5sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7Ci0Jd2FpdF9taWdyYXRlZF9jYWxsYmFja3MoKTsKLX0KLQotLyoqCi0gKiByY3VfYmFycmllciAtIFdhaXQgdW50aWwgYWxsIGluLWZsaWdodCBjYWxsX3JjdSgpIGNhbGxiYWNrcyBjb21wbGV0ZS4KLSAqLwotdm9pZCByY3VfYmFycmllcih2b2lkKQotewotCV9yY3VfYmFycmllcihSQ1VfQkFSUklFUl9TVEQpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXIpOwotCi0vKioKLSAqIHJjdV9iYXJyaWVyX2JoIC0gV2FpdCB1bnRpbCBhbGwgaW4tZmxpZ2h0IGNhbGxfcmN1X2JoKCkgY2FsbGJhY2tzIGNvbXBsZXRlLgotICovCi12b2lkIHJjdV9iYXJyaWVyX2JoKHZvaWQpCi17Ci0JX3JjdV9iYXJyaWVyKFJDVV9CQVJSSUVSX0JIKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX2JoKTsKLQotLyoqCi0gKiByY3VfYmFycmllcl9zY2hlZCAtIFdhaXQgZm9yIGluLWZsaWdodCBjYWxsX3JjdV9zY2hlZCgpIGNhbGxiYWNrcy4KLSAqLwotdm9pZCByY3VfYmFycmllcl9zY2hlZCh2b2lkKQotewotCV9yY3VfYmFycmllcihSQ1VfQkFSUklFUl9TQ0hFRCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcl9zY2hlZCk7Ci0KLXN0YXRpYyB2b2lkIHJjdV9taWdyYXRlX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqbm90dXNlZCkKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmN1X21pZ3JhdGVfdHlwZV9jb3VudCkpCi0JCXdha2VfdXAoJnJjdV9taWdyYXRlX3dxKTsKLX0KLQotZXh0ZXJuIGludCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KTsKLQogc3RhdGljIGludCBfX2NwdWluaXQgcmN1X2JhcnJpZXJfY3B1X2hvdHBsdWcoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKLQlyY3VfY3B1X25vdGlmeShzZWxmLCBhY3Rpb24sIGhjcHUpOwotCWlmIChhY3Rpb24gPT0gQ1BVX0RZSU5HKSB7Ci0JCS8qCi0JCSAqIHByZWVtcHRfZGlzYWJsZSgpIGluIG9uX2VhY2hfY3B1KCkgcHJldmVudHMgc3RvcF9tYWNoaW5lKCksCi0JCSAqIHNvIHdoZW4gIm9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopdHlwZSwgMSk7IgotCQkgKiByZXR1cm5zLCBhbGwgb25saW5lIGNwdXMgaGF2ZSBxdWV1ZWQgcmN1X2JhcnJpZXJfZnVuYygpLAotCQkgKiBhbmQgdGhlIGRlYWQgY3B1KGlmIGl0IGV4aXN0KSBxdWV1ZXMgcmN1X21pZ3JhdGVfY2FsbGJhY2soKXMuCi0JCSAqCi0JCSAqIFRoZXNlIGNhbGxiYWNrcyBlbnN1cmUgX3JjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIGFsbAotCQkgKiBSQ1UgY2FsbGJhY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB0byBjb21wbGV0ZS4KLQkJICovCi0JCWF0b21pY19zZXQoJnJjdV9taWdyYXRlX3R5cGVfY291bnQsIDMpOwotCQljYWxsX3JjdV9iaChyY3VfbWlncmF0ZV9oZWFkLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7Ci0JCWNhbGxfcmN1X3NjaGVkKHJjdV9taWdyYXRlX2hlYWQgKyAxLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7Ci0JCWNhbGxfcmN1KHJjdV9taWdyYXRlX2hlYWQgKyAyLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7Ci0JfSBlbHNlIGlmIChhY3Rpb24gPT0gQ1BVX0RPV05fUFJFUEFSRSkgewotCQkvKiBEb24ndCBuZWVkIHRvIHdhaXQgdW50aWwgbmV4dCByZW1vdmFsIG9wZXJhdGlvbi4gKi8KLQkJLyogcmN1X21pZ3JhdGVfaGVhZCBpcyBwcm90ZWN0ZWQgYnkgY3B1X2FkZF9yZW1vdmVfbG9jayAqLwotCQl3YWl0X21pZ3JhdGVkX2NhbGxiYWNrcygpOwotCX0KLQotCXJldHVybiBOT1RJRllfT0s7CisJcmV0dXJuIHJjdV9jcHVfbm90aWZ5KHNlbGYsIGFjdGlvbiwgaGNwdSk7CiB9CiAKIHZvaWQgX19pbml0IHJjdV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdXRvcnR1cmUuYwppbmRleCAyMzM3NjhmLi42OTdjMGEwIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKQEAgLTYwNiw4ICs2MDYsNiBAQAogCS5uYW1lCQk9ICJzY2hlZF9zeW5jIgogfTsKIAotZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7Ci0KIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNjaGVkX2V4cGVkaXRlZF9vcHMgPSB7CiAJLmluaXQJCT0gcmN1X3N5bmNfdG9ydHVyZV9pbml0LAogCS5jbGVhbnVwCT0gTlVMTCwKQEAgLTY1MCw3ICs2NDgsNyBAQAogCQlvbGRfcnAgPSByY3VfdG9ydHVyZV9jdXJyZW50OwogCQlycC0+cnRvcnRfbWJ0ZXN0ID0gMTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHJjdV90b3J0dXJlX2N1cnJlbnQsIHJwKTsKLQkJc21wX3dtYigpOworCQlzbXBfd21iKCk7IC8qIE1vZHMgdG8gb2xkX3JwIG11c3QgZm9sbG93IHJjdV9hc3NpZ25fcG9pbnRlcigpICovCiAJCWlmIChvbGRfcnApIHsKIAkJCWkgPSBvbGRfcnAtPnJ0b3J0X3BpcGVfY291bnQ7CiAJCQlpZiAoaSA+IFJDVV9UT1JUVVJFX1BJUEVfTEVOKQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuYyBiL2tlcm5lbC9yY3V0cmVlLmMKaW5kZXggNTJiMDZmNi4uZjMwNzdjMCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuYworKysgYi9rZXJuZWwvcmN1dHJlZS5jCkBAIC00OSwxMyArNDksNiBAQAogCiAjaW5jbHVkZSAicmN1dHJlZS5oIgogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X2xvY2tfa2V5Owotc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9sb2NrX21hcCA9Ci0JU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2siLCAmcmN1X2xvY2tfa2V5KTsKLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9sb2NrX21hcCk7Ci0jZW5kaWYKLQogLyogRGF0YSBzdHJ1Y3R1cmVzLiAqLwogCiAjZGVmaW5lIFJDVV9TVEFURV9JTklUSUFMSVpFUihuYW1lKSB7IFwKQEAgLTY2LDEwICs1OSwxMyBAQAogCQlOVU1fUkNVX0xWTF8yLCBcCiAJCU5VTV9SQ1VfTFZMXzMsIC8qID09IE1BWF9SQ1VfTFZMUyAqLyBcCiAJfSwgXAotCS5zaWduYWxlZCA9IFJDVV9TSUdOQUxfSU5JVCwgXAorCS5zaWduYWxlZCA9IFJDVV9HUF9JRExFLCBcCiAJLmdwbnVtID0gLTMwMCwgXAogCS5jb21wbGV0ZWQgPSAtMzAwLCBcCiAJLm9ub2ZmbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKCZuYW1lLm9ub2ZmbG9jayksIFwKKwkub3JwaGFuX2Nic19saXN0ID0gTlVMTCwgXAorCS5vcnBoYW5fY2JzX3RhaWwgPSAmbmFtZS5vcnBoYW5fY2JzX2xpc3QsIFwKKwkub3JwaGFuX3FsZW4gPSAwLCBcCiAJLmZxc2xvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5mcXNsb2NrKSwgXAogCS5uX2ZvcmNlX3FzID0gMCwgXAogCS5uX2ZvcmNlX3FzX25ncCA9IDAsIFwKQEAgLTgxLDI0ICs3NywxNiBAQAogc3RydWN0IHJjdV9zdGF0ZSByY3VfYmhfc3RhdGUgPSBSQ1VfU1RBVEVfSU5JVElBTElaRVIocmN1X2JoX3N0YXRlKTsKIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X2JoX2RhdGEpOwogCi1leHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQodm9pZCk7Ci1zdGF0aWMgc3RydWN0IHJjdV9ub2RlICpyY3VfZ2V0X3Jvb3Qoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKTsKLXN0YXRpYyB2b2lkIGNwdV9xdWlldF9tc2sodW5zaWduZWQgbG9uZyBtYXNrLCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLXN0YXRpYyB2b2lkIGNwdV9xdWlldF9tc2tfZmluaXNoKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgdm9pZCBfX3JjdV9vZmZsaW5lX2NwdShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApOwotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KLXN0YXRpYyB2b2lkIF9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgc3RydWN0IHJjdV9kYXRhICpyZHApOwotc3RhdGljIHZvaWQgX19jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCi0JCSAgICAgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpLAotCQkgICAgICAgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKTsKLXN0YXRpYyBpbnQgX19yY3VfcGVuZGluZyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3VfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkJCSAgIGludCBwcmVlbXB0YWJsZSk7CiAKLSNpbmNsdWRlICJyY3V0cmVlX3BsdWdpbi5oIgorLyoKKyAqIFJldHVybiB0cnVlIGlmIGFuIFJDVSBncmFjZSBwZXJpb2QgaXMgaW4gcHJvZ3Jlc3MuICBUaGUgQUNDRVNTX09OQ0UoKXMKKyAqIHBlcm1pdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2l0aG91dCBob2xkaW5nIHRoZSByb290IHJjdV9ub2RlCisgKiBzdHJ1Y3R1cmUncyAtPmxvY2ssIGJ1dCBvZiBjb3Vyc2UgcmVzdWx0cyBjYW4gYmUgc3ViamVjdCB0byBjaGFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgcmN1X2dwX2luX3Byb2dyZXNzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlyZXR1cm4gQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpICE9IEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pOworfQogCiAvKgogICogTm90ZSBhIHF1aWVzY2VudCBzdGF0ZS4gIEJlY2F1c2Ugd2UgZG8gbm90IG5lZWQgdG8ga25vdwpAQCAtMTM3LDYgKzEyNSwxMCBAQAogc3RhdGljIGludCBxaGltYXJrID0gMTAwMDA7CS8qIElmIHRoaXMgbWFueSBwZW5kaW5nLCBpZ25vcmUgYmxpbWl0LiAqLwogc3RhdGljIGludCBxbG93bWFyayA9IDEwMDsJLyogT25jZSBvbmx5IHRoaXMgbWFueSBwZW5kaW5nLCB1c2UgYmxpbWl0LiAqLwogCittb2R1bGVfcGFyYW0oYmxpbWl0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHFoaW1hcmssIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocWxvd21hcmssIGludCwgMCk7CisKIHN0YXRpYyB2b2lkIGZvcmNlX3F1aWVzY2VudF9zdGF0ZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGludCByZWxheGVkKTsKIHN0YXRpYyBpbnQgcmN1X3BlbmRpbmcoaW50IGNwdSk7CiAKQEAgLTE3Myw5ICsxNjUsNyBAQAogc3RhdGljIGludAogY3B1X25lZWRzX2Fub3RoZXJfZ3Aoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKLQkvKiBBQ0NFU1NfT05DRSgpIGJlY2F1c2Ugd2UgYXJlIGFjY2Vzc2luZyBvdXRzaWRlIG9mIGxvY2suICovCi0JcmV0dXJuICpyZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF0gJiYKLQkgICAgICAgQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpID09IEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pOworCXJldHVybiAqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdICYmICFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKTsKIH0KIAogLyoKQEAgLTM2OSw3ICszNTksNyBAQAogLyoKICAqIFNuYXBzaG90IHRoZSBzcGVjaWZpZWQgQ1BVJ3MgZHludGlja3MgY291bnRlciBzbyB0aGF0IHdlIGNhbiBsYXRlcgogICogY3JlZGl0IHRoZW0gd2l0aCBhbiBpbXBsaWNpdCBxdWllc2NlbnQgc3RhdGUuICBSZXR1cm4gMSBpZiB0aGlzIENQVQotICogaXMgYWxyZWFkeSBpbiBhIHF1aWVzY2VudCBzdGF0ZSBjb3VydGVzeSBvZiBkeW50aWNrcyBpZGxlIG1vZGUuCisgKiBpcyBpbiBkeW50aWNrcyBpZGxlIG1vZGUsIHdoaWNoIGlzIGFuIGV4dGVuZGVkIHF1aWVzY2VudCBzdGF0ZS4KICAqLwogc3RhdGljIGludCBkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcihzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKQEAgLTQ3NSwzMCArNDY1LDM0IEBACiAJbG9uZyBkZWx0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7Ci0Jc3RydWN0IHJjdV9ub2RlICpybnBfY3VyID0gcnNwLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9lbmQgPSAmcnNwLT5ub2RlW05VTV9SQ1VfTk9ERVNdOwogCiAJLyogT25seSBsZXQgb25lIENQVSBjb21wbGFpbiBhYm91dCBvdGhlcnMgcGVyIHRpbWUgaW50ZXJ2YWwuICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJZGVsdGEgPSBqaWZmaWVzIC0gcnNwLT5qaWZmaWVzX3N0YWxsOwotCWlmIChkZWx0YSA8IFJDVV9TVEFMTF9SQVRfREVMQVkgfHwgcnNwLT5ncG51bSA9PSByc3AtPmNvbXBsZXRlZCkgeworCWlmIChkZWx0YSA8IFJDVV9TVEFMTF9SQVRfREVMQVkgfHwgIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCXJzcC0+amlmZmllc19zdGFsbCA9IGppZmZpZXMgKyBSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0s7CisKKwkvKgorCSAqIE5vdyByYXQgb24gYW55IHRhc2tzIHRoYXQgZ290IGtpY2tlZCB1cCB0byB0aGUgcm9vdCByY3Vfbm9kZQorCSAqIGR1ZSB0byBDUFUgb2ZmbGluaW5nLgorCSAqLworCXJjdV9wcmludF90YXNrX3N0YWxsKHJucCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBPSywgdGltZSB0byByYXQgb24gb3VyIGJ1ZGR5Li4uICovCiAKIAlwcmludGsoS0VSTl9FUlIgIklORk86IFJDVSBkZXRlY3RlZCBDUFUgc3RhbGxzOiIpOwotCWZvciAoOyBybnBfY3VyIDwgcm5wX2VuZDsgcm5wX2N1cisrKSB7CisJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyc3AsIHJucCkgewogCQlyY3VfcHJpbnRfdGFza19zdGFsbChybnApOwotCQlpZiAocm5wX2N1ci0+cXNtYXNrID09IDApCisJCWlmIChybnAtPnFzbWFzayA9PSAwKQogCQkJY29udGludWU7Ci0JCWZvciAoY3B1ID0gMDsgY3B1IDw9IHJucF9jdXItPmdycGhpIC0gcm5wX2N1ci0+Z3JwbG87IGNwdSsrKQotCQkJaWYgKHJucF9jdXItPnFzbWFzayAmICgxVUwgPDwgY3B1KSkKLQkJCQlwcmludGsoIiAlZCIsIHJucF9jdXItPmdycGxvICsgY3B1KTsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPD0gcm5wLT5ncnBoaSAtIHJucC0+Z3JwbG87IGNwdSsrKQorCQkJaWYgKHJucC0+cXNtYXNrICYgKDFVTCA8PCBjcHUpKQorCQkJCXByaW50aygiICVkIiwgcm5wLT5ncnBsbyArIGNwdSk7CiAJfQogCXByaW50aygiIChkZXRlY3RlZCBieSAlZCwgdD0lbGQgamlmZmllcylcbiIsCiAJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgKGxvbmcpKGppZmZpZXMgLSByc3AtPmdwX3N0YXJ0KSk7CkBAIC01MzcsOCArNTMxLDcgQEAKIAkJLyogV2UgaGF2ZW4ndCBjaGVja2VkIGluLCBzbyBnbyBkdW1wIHN0YWNrLiAqLwogCQlwcmludF9jcHVfc3RhbGwocnNwKTsKIAotCX0gZWxzZSBpZiAocnNwLT5ncG51bSAhPSByc3AtPmNvbXBsZXRlZCAmJgotCQkgICBkZWx0YSA+PSBSQ1VfU1RBTExfUkFUX0RFTEFZKSB7CisJfSBlbHNlIGlmIChyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSAmJiBkZWx0YSA+PSBSQ1VfU1RBTExfUkFUX0RFTEFZKSB7CiAKIAkJLyogVGhleSBoYWQgdHdvIHRpbWUgdW5pdHMgdG8gZHVtcCBzdGFjaywgc28gY29tcGxhaW4uICovCiAJCXByaW50X290aGVyX2NwdV9zdGFsbChyc3ApOwpAQCAtNjE3LDkgKzYxMCwxNSBAQAogCW5vdGVfbmV3X2dwbnVtKHJzcCwgcmRwKTsKIAogCS8qCi0JICogQmVjYXVzZSB3ZSBhcmUgZmlyc3QsIHdlIGtub3cgdGhhdCBhbGwgb3VyIGNhbGxiYWNrcyB3aWxsCi0JICogYmUgY292ZXJlZCBieSB0aGlzIHVwY29taW5nIGdyYWNlIHBlcmlvZCwgZXZlbiB0aGUgb25lcwotCSAqIHRoYXQgd2VyZSByZWdpc3RlcmVkIGFyYml0cmFyaWx5IHJlY2VudGx5LgorCSAqIEJlY2F1c2UgdGhpcyBDUFUganVzdCBub3cgc3RhcnRlZCB0aGUgbmV3IGdyYWNlIHBlcmlvZCwgd2Uga25vdworCSAqIHRoYXQgYWxsIG9mIGl0cyBjYWxsYmFja3Mgd2lsbCBiZSBjb3ZlcmVkIGJ5IHRoaXMgdXBjb21pbmcgZ3JhY2UKKwkgKiBwZXJpb2QsIGV2ZW4gdGhlIG9uZXMgdGhhdCB3ZXJlIHJlZ2lzdGVyZWQgYXJiaXRyYXJpbHkgcmVjZW50bHkuCisJICogVGhlcmVmb3JlLCBhZHZhbmNlIGFsbCBvdXRzdGFuZGluZyBjYWxsYmFja3MgdG8gUkNVX1dBSVRfVEFJTC4KKwkgKgorCSAqIE90aGVyIENQVXMgY2Fubm90IGJlIHN1cmUgZXhhY3RseSB3aGVuIHRoZSBncmFjZSBwZXJpb2Qgc3RhcnRlZC4KKwkgKiBUaGVyZWZvcmUsIHRoZWlyIHJlY2VudGx5IHJlZ2lzdGVyZWQgY2FsbGJhY2tzIG11c3QgcGFzcyB0aHJvdWdoCisJICogYW4gYWRkaXRpb25hbCBSQ1VfTkVYVF9SRUFEWSBzdGFnZSwgc28gdGhhdCB0aGV5IHdpbGwgYmUgaGFuZGxlZAorCSAqIGJ5IHRoZSBuZXh0IFJDVSBncmFjZSBwZXJpb2QuCiAJICovCiAJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOwogCXJkcC0+bnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKQEAgLTY1NywxNSArNjU2LDE4IEBACiAJICogb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBDUFUsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIGhhdmUKIAkgKiBpcnFzIGRpc2FibGVkLgogCSAqLwotCWZvciAocm5wID0gJnJzcC0+bm9kZVswXTsgcm5wIDwgJnJzcC0+bm9kZVtOVU1fUkNVX05PREVTXTsgcm5wKyspIHsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmN1X2Zvcl9lYWNoX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgeworCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Mocm5wKTsKIAkJcm5wLT5xc21hc2sgPSBybnAtPnFzbWFza2luaXQ7CiAJCXJucC0+Z3BudW0gPSByc3AtPmdwbnVtOwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJfQogCisJcm5wID0gcmN1X2dldF9yb290KHJzcCk7CisJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAlyc3AtPnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklUOyAvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUgbm93IE9LLiAqLworCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtNzAzLDEwICs3MDUsMTEgQEAKICAqIGhvbGQgcm5wLT5sb2NrLCBhcyByZXF1aXJlZCBieSByY3Vfc3RhcnRfZ3AoKSwgd2hpY2ggd2lsbCByZWxlYXNlIGl0LgogICovCiBzdGF0aWMgdm9pZCBjcHVfcXVpZXRfbXNrX2ZpbmlzaChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi0JX19yZWxlYXNlcyhybnAtPmxvY2spCisJX19yZWxlYXNlcyhyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jaykKIHsKLQlXQVJOX09OX09OQ0UocnNwLT5jb21wbGV0ZWQgPT0gcnNwLT5ncG51bSk7CisJV0FSTl9PTl9PTkNFKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSk7CiAJcnNwLT5jb21wbGV0ZWQgPSByc3AtPmdwbnVtOworCXJzcC0+c2lnbmFsZWQgPSBSQ1VfR1BfSURMRTsKIAlyY3VfcHJvY2Vzc19ncF9lbmQocnNwLCByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldKTsKIAlyY3Vfc3RhcnRfZ3AocnNwLCBmbGFncyk7ICAvKiByZWxlYXNlcyByb290IG5vZGUncyBybnAtPmxvY2suICovCiB9CkBAIC04NDIsMTcgKzg0NSw2MyBAQAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCiAvKgorICogTW92ZSBhIGR5aW5nIENQVSdzIFJDVSBjYWxsYmFja3MgdG8gdGhlIC0+b3JwaGFuX2Nic19saXN0IGZvciB0aGUKKyAqIHNwZWNpZmllZCBmbGF2b3Igb2YgUkNVLiAgVGhlIGNhbGxiYWNrcyB3aWxsIGJlIGFkb3B0ZWQgYnkgdGhlIG5leHQKKyAqIF9yY3VfYmFycmllcigpIGludm9jYXRpb24gb3IgYnkgdGhlIENQVV9ERUFEIG5vdGlmaWVyLCB3aGljaGV2ZXIKKyAqIGNvbWVzIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGludm9rZWQgZnJvbSB0aGUgQ1BVX0RZSU5HIG5vdGlmaWVyLAorICogaXJxcyBhcmUgYWxyZWFkeSBkaXNhYmxlZC4KKyAqLworc3RhdGljIHZvaWQgcmN1X3NlbmRfY2JzX3RvX29ycGhhbmFnZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJaW50IGk7CisJc3RydWN0IHJjdV9kYXRhICpyZHAgPSByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldOworCisJaWYgKHJkcC0+bnh0bGlzdCA9PSBOVUxMKQorCQlyZXR1cm47ICAvKiBpcnFzIGRpc2FibGVkLCBzbyBjb21wYXJpc29uIGlzIHN0YWJsZS4gKi8KKwlzcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkqcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSByZHAtPm54dGxpc3Q7CisJcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CisJcmRwLT5ueHRsaXN0ID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgUkNVX05FWFRfU0laRTsgaSsrKQorCQlyZHAtPm54dHRhaWxbaV0gPSAmcmRwLT5ueHRsaXN0OworCXJzcC0+b3JwaGFuX3FsZW4gKz0gcmRwLT5xbGVuOworCXJkcC0+cWxlbiA9IDA7CisJc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworfQorCisvKgorICogQWRvcHQgcHJldmlvdXNseSBvcnBoYW5lZCBSQ1UgY2FsbGJhY2tzLgorICovCitzdGF0aWMgdm9pZCByY3VfYWRvcHRfb3JwaGFuX2NicyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJkcCA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJaWYgKHJzcC0+b3JwaGFuX2Nic19saXN0ID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwkqcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcnNwLT5vcnBoYW5fY2JzX2xpc3Q7CisJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcnNwLT5vcnBoYW5fY2JzX3RhaWw7CisJcmRwLT5xbGVuICs9IHJzcC0+b3JwaGFuX3FsZW47CisJcnNwLT5vcnBoYW5fY2JzX2xpc3QgPSBOVUxMOworCXJzcC0+b3JwaGFuX2Nic190YWlsID0gJnJzcC0+b3JwaGFuX2Nic19saXN0OworCXJzcC0+b3JwaGFuX3FsZW4gPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7Cit9CisKKy8qCiAgKiBSZW1vdmUgdGhlIG91dGdvaW5nIENQVSBmcm9tIHRoZSBiaXRtYXNrcyBpbiB0aGUgcmN1X25vZGUgaGllcmFyY2h5CiAgKiBhbmQgbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIG91dGdvaW5nIENQVSB0byB0aGUgY3VycmVudCBvbmUuCiAgKi8KIHN0YXRpYyB2b2lkIF9fcmN1X29mZmxpbmVfY3B1KGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKLQlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgbGFzdGNvbXA7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcnNwLT5yZGFbY3B1XTsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcF9tZTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAogCS8qIEV4Y2x1ZGUgYW55IGF0dGVtcHRzIHRvIHN0YXJ0IGEgbmV3IGdyYWNlIHBlcmlvZC4gKi8KQEAgLTg2OCwzOSArOTE3LDI5IEBACiAJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCQlicmVhazsKIAkJfQotCQlyY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHJzcCwgcm5wLCByZHApOworCisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBhIHRhc2sgYmxvY2tpbmcgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLAorCQkgKiBhbmQgaWYgYWxsIENQVXMgaGF2ZSBjaGVja2VkIGluLCB3ZSBuZWVkIHRvIHByb3BhZ2F0ZQorCQkgKiB0aGUgcXVpZXNjZW50IHN0YXRlIHVwIHRoZSByY3Vfbm9kZSBoaWVyYXJjaHkuICBCdXQgdGhhdAorCQkgKiBpcyBpbmNvbnZlbmllbnQgYXQgdGhlIG1vbWVudCBkdWUgdG8gZGVhZGxvY2sgaXNzdWVzIGlmCisJCSAqIHRoaXMgc2hvdWxkIGVuZCB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QuICBTbyBzZXQgdGhlCisJCSAqIG9mZmxpbmVkIENQVSdzIGJpdCBpbiAtPnFzbWFzayBpbiBvcmRlciB0byBmb3JjZSB0aGUKKwkJICogbmV4dCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSBpbnZvY2F0aW9uIHRvIGNsZWFuIHVwIHRoaXMKKwkJICogbWVzcyBpbiBhIGRlYWRsb2NrLWZyZWUgbWFubmVyLgorCQkgKi8KKwkJaWYgKHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MocnNwLCBybnAsIHJkcCkgJiYgIXJucC0+cXNtYXNrKQorCQkJcm5wLT5xc21hc2sgfD0gbWFzazsKKwogCQltYXNrID0gcm5wLT5ncnBtYXNrOwogCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCXJucCA9IHJucC0+cGFyZW50OwogCX0gd2hpbGUgKHJucCAhPSBOVUxMKTsKIAlsYXN0Y29tcCA9IHJzcC0+Y29tcGxldGVkOwogCi0Jc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAKLQkvKgotCSAqIE1vdmUgY2FsbGJhY2tzIGZyb20gdGhlIG91dGdvaW5nIENQVSB0byB0aGUgcnVubmluZyBDUFUuCi0JICogTm90ZSB0aGF0IHRoZSBvdXRnb2luZyBDUFUgaXMgbm93IHF1aXNjZW50LCBzbyBpdCBpcyBub3cKLQkgKiAodW5jaGFyYWN0ZXJpc3RpY2FsbHkpIHNhZmUgdG8gYWNjZXNzIGl0cyByY3VfZGF0YSBzdHJ1Y3R1cmUuCi0JICogTm90ZSBhbHNvIHRoYXQgd2UgbXVzdCBjYXJlZnVsbHkgcmV0YWluIHRoZSBvcmRlciBvZiB0aGUKLQkgKiBvdXRnb2luZyBDUFUncyBjYWxsYmFja3MgaW4gb3JkZXIgZm9yIHJjdV9iYXJyaWVyKCkgdG8gd29yawotCSAqIGNvcnJlY3RseS4gIEZpbmFsbHksIG5vdGUgdGhhdCB3ZSBzdGFydCBhbGwgdGhlIGNhbGxiYWNrcwotCSAqIGFmcmVzaCwgZXZlbiB0aG9zZSB0aGF0IGhhdmUgcGFzc2VkIHRocm91Z2ggYSBncmFjZSBwZXJpb2QKLQkgKiBhbmQgYXJlIHRoZXJlZm9yZSByZWFkeSB0byBpbnZva2UuICBUaGUgdGhlb3J5IGlzIHRoYXQgaG90cGx1ZwotCSAqIGV2ZW50cyBhcmUgcmFyZSwgYW5kIHRoYXQgaWYgdGhleSBhcmUgZnJlcXVlbnQgZW5vdWdoIHRvCi0JICogaW5kZWZpbml0ZWx5IGRlbGF5IGNhbGxiYWNrcywgeW91IGhhdmUgZmFyIHdvcnNlIHRoaW5ncyB0bwotCSAqIGJlIHdvcnJ5aW5nIGFib3V0LgotCSAqLwotCXJkcF9tZSA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JaWYgKHJkcC0+bnh0bGlzdCAhPSBOVUxMKSB7Ci0JCSpyZHBfbWUtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByZHAtPm54dGxpc3Q7Ci0JCXJkcF9tZS0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKLQkJcmRwLT5ueHRsaXN0ID0gTlVMTDsKLQkJZm9yIChpID0gMDsgaSA8IFJDVV9ORVhUX1NJWkU7IGkrKykKLQkJCXJkcC0+bnh0dGFpbFtpXSA9ICZyZHAtPm54dGxpc3Q7Ci0JCXJkcF9tZS0+cWxlbiArPSByZHAtPnFsZW47Ci0JCXJkcC0+cWxlbiA9IDA7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyY3VfYWRvcHRfb3JwaGFuX2Nicyhyc3ApOwogfQogCiAvKgpAQCAtOTE4LDYgKzk1NywxNCBAQAogCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKK3N0YXRpYyB2b2lkIHJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2Uoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworfQorCitzdGF0aWMgdm9pZCByY3VfYWRvcHRfb3JwaGFuX2NicyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7Cit9CisKIHN0YXRpYyB2b2lkIHJjdV9vZmZsaW5lX2NwdShpbnQgY3B1KQogewogfQpAQCAtOTI4LDcgKzk3NSw3IEBACiAgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZQogICogcGVyaW9kLiAgVGhvdHRsZSBhcyBzcGVjaWZpZWQgYnkgcmRwLT5ibGltaXQuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3N0YXRpYyB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJjdV9oZWFkICpuZXh0LCAqbGlzdCwgKip0YWlsOwpAQCAtOTgxLDYgKzEwMjgsMTMgQEAKIAlpZiAocmRwLT5ibGltaXQgPT0gTE9OR19NQVggJiYgcmRwLT5xbGVuIDw9IHFsb3dtYXJrKQogCQlyZHAtPmJsaW1pdCA9IGJsaW1pdDsKIAorCS8qIFJlc2V0IC0+cWxlbl9sYXN0X2Zxc19jaGVjayB0cmlnZ2VyIGlmIGVub3VnaCBDQnMgaGF2ZSBkcmFpbmVkLiAqLworCWlmIChyZHAtPnFsZW4gPT0gMCAmJiByZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgIT0gMCkgeworCQlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSAwOworCQlyZHAtPm5fZm9yY2VfcXNfc25hcCA9IHJzcC0+bl9mb3JjZV9xczsKKwl9IGVsc2UgaWYgKHJkcC0+cWxlbiA8IHJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayAtIHFoaW1hcmspCisJCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IHJkcC0+cWxlbjsKKwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCS8qIFJlLXJhaXNlIHRoZSBSQ1Ugc29mdGlycSBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHJlbWFpbmluZy4gKi8KQEAgLTEwNTAsMzMgKzExMDQsMzIgQEAKIAlpbnQgY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wX2N1ciA9IHJzcC0+bGV2ZWxbTlVNX1JDVV9MVkxTIC0gMV07Ci0Jc3RydWN0IHJjdV9ub2RlICpybnBfZW5kID0gJnJzcC0+bm9kZVtOVU1fUkNVX05PREVTXTsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAotCWZvciAoOyBybnBfY3VyIDwgcm5wX2VuZDsgcm5wX2N1cisrKSB7CisJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyc3AsIHJucCkgewogCQltYXNrID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucF9jdXItPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlpZiAocnNwLT5jb21wbGV0ZWQgIT0gbGFzdGNvbXApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucF9jdXItPmxvY2ssIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIDE7CiAJCX0KLQkJaWYgKHJucF9jdXItPnFzbWFzayA9PSAwKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnBfY3VyLT5sb2NrLCBmbGFncyk7CisJCWlmIChybnAtPnFzbWFzayA9PSAwKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWNwdSA9IHJucF9jdXItPmdycGxvOworCQljcHUgPSBybnAtPmdycGxvOwogCQliaXQgPSAxOwotCQlmb3IgKDsgY3B1IDw9IHJucF9jdXItPmdycGhpOyBjcHUrKywgYml0IDw8PSAxKSB7Ci0JCQlpZiAoKHJucF9jdXItPnFzbWFzayAmIGJpdCkgIT0gMCAmJiBmKHJzcC0+cmRhW2NwdV0pKQorCQlmb3IgKDsgY3B1IDw9IHJucC0+Z3JwaGk7IGNwdSsrLCBiaXQgPDw9IDEpIHsKKwkJCWlmICgocm5wLT5xc21hc2sgJiBiaXQpICE9IDAgJiYgZihyc3AtPnJkYVtjcHVdKSkKIAkJCQltYXNrIHw9IGJpdDsKIAkJfQogCQlpZiAobWFzayAhPSAwICYmIHJzcC0+Y29tcGxldGVkID09IGxhc3Rjb21wKSB7CiAKLQkJCS8qIGNwdV9xdWlldF9tc2soKSByZWxlYXNlcyBybnBfY3VyLT5sb2NrLiAqLwotCQkJY3B1X3F1aWV0X21zayhtYXNrLCByc3AsIHJucF9jdXIsIGZsYWdzKTsKKwkJCS8qIGNwdV9xdWlldF9tc2soKSByZWxlYXNlcyBybnAtPmxvY2suICovCisJCQljcHVfcXVpZXRfbXNrKG1hc2ssIHJzcCwgcm5wLCBmbGFncyk7CiAJCQljb250aW51ZTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnBfY3VyLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTEwOTIsNyArMTE0NSw3IEBACiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAl1OCBzaWduYWxlZDsKIAotCWlmIChBQ0NFU1NfT05DRShyc3AtPmNvbXBsZXRlZCkgPT0gQUNDRVNTX09OQ0UocnNwLT5ncG51bSkpCisJaWYgKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkKIAkJcmV0dXJuOyAgLyogTm8gZ3JhY2UgcGVyaW9kIGluIHByb2dyZXNzLCBub3RoaW5nIHRvIGZvcmNlLiAqLwogCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnJzcC0+ZnFzbG9jaywgZmxhZ3MpKSB7CiAJCXJzcC0+bl9mb3JjZV9xc19saCsrOyAvKiBJbmV4YWN0LCBjYW4gbG9zZSBjb3VudHMuICBUb3VnaCEgKi8KQEAgLTExMTMsOSArMTE2NiwxMCBAQAogCX0KIAlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKIAlzd2l0Y2ggKHNpZ25hbGVkKSB7CisJY2FzZSBSQ1VfR1BfSURMRToKIAljYXNlIFJDVV9HUF9JTklUOgogCi0JCWJyZWFrOyAvKiBncmFjZSBwZXJpb2Qgc3RpbGwgaW5pdGlhbGl6aW5nLCBpZ25vcmUuICovCisJCWJyZWFrOyAvKiBncmFjZSBwZXJpb2QgaWRsZSBvciBpbml0aWFsaXppbmcsIGlnbm9yZS4gKi8KIAogCWNhc2UgUkNVX1NBVkVfRFlOVElDSzoKIApAQCAtMTEyOSw3ICsxMTgzLDggQEAKIAogCQkvKiBVcGRhdGUgc3RhdGUsIHJlY29yZCBjb21wbGV0aW9uIGNvdW50ZXIuICovCiAJCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsKLQkJaWYgKGxhc3Rjb21wID09IHJzcC0+Y29tcGxldGVkKSB7CisJCWlmIChsYXN0Y29tcCA9PSByc3AtPmNvbXBsZXRlZCAmJgorCQkgICAgcnNwLT5zaWduYWxlZCA9PSBSQ1VfU0FWRV9EWU5USUNLKSB7CiAJCQlyc3AtPnNpZ25hbGVkID0gUkNVX0ZPUkNFX1FTOwogCQkJZHludGlja19yZWNvcmRfY29tcGxldGVkKHJzcCwgbGFzdGNvbXApOwogCQl9CkBAIC0xMTk1LDcgKzEyNTAsNyBAQAogCX0KIAogCS8qIElmIHRoZXJlIGFyZSBjYWxsYmFja3MgcmVhZHksIGludm9rZSB0aGVtLiAqLwotCXJjdV9kb19iYXRjaChyZHApOworCXJjdV9kb19iYXRjaChyc3AsIHJkcCk7CiB9CiAKIC8qCkBAIC0xMjUxLDcgKzEzMDYsNyBAQAogCXJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9ICZoZWFkLT5uZXh0OwogCiAJLyogU3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kIGlmIG9uZSBub3QgYWxyZWFkeSBzdGFydGVkLiAqLwotCWlmIChBQ0NFU1NfT05DRShyc3AtPmNvbXBsZXRlZCkgPT0gQUNDRVNTX09OQ0UocnNwLT5ncG51bSkpIHsKKwlpZiAoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7CiAJCXVuc2lnbmVkIGxvbmcgbmVzdGZsYWc7CiAJCXN0cnVjdCByY3Vfbm9kZSAqcm5wX3Jvb3QgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIApAQCAtMTI1OSwxMCArMTMxNCwyMCBAQAogCQlyY3Vfc3RhcnRfZ3AocnNwLCBuZXN0ZmxhZyk7ICAvKiByZWxlYXNlcyBybnBfcm9vdC0+bG9jay4gKi8KIAl9CiAKLQkvKiBGb3JjZSB0aGUgZ3JhY2UgcGVyaW9kIGlmIHRvbyBtYW55IGNhbGxiYWNrcyBvciB0b28gbG9uZyB3YWl0aW5nLiAqLwotCWlmICh1bmxpa2VseSgrK3JkcC0+cWxlbiA+IHFoaW1hcmspKSB7CisJLyoKKwkgKiBGb3JjZSB0aGUgZ3JhY2UgcGVyaW9kIGlmIHRvbyBtYW55IGNhbGxiYWNrcyBvciB0b28gbG9uZyB3YWl0aW5nLgorCSAqIEVuZm9yY2UgaHlzdGVyZXNpcywgYW5kIGRvbid0IGludm9rZSBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKQorCSAqIGlmIHNvbWUgb3RoZXIgQ1BVIGhhcyByZWNlbnRseSBkb25lIHNvLiAgQWxzbywgZG9uJ3QgYm90aGVyCisJICogaW52b2tpbmcgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgaWYgdGhlIG5ld2x5IGVucXVldWVkIGNhbGxiYWNrCisJICogaXMgdGhlIG9ubHkgb25lIHdhaXRpbmcgZm9yIGEgZ3JhY2UgcGVyaW9kIHRvIGNvbXBsZXRlLgorCSAqLworCWlmICh1bmxpa2VseSgrK3JkcC0+cWxlbiA+IHJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayArIHFoaW1hcmspKSB7CiAJCXJkcC0+YmxpbWl0ID0gTE9OR19NQVg7Ci0JCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOworCQlpZiAocnNwLT5uX2ZvcmNlX3FzID09IHJkcC0+bl9mb3JjZV9xc19zbmFwICYmCisJCSAgICAqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdICE9IGhlYWQpCisJCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAwKTsKKwkJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CisJCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IHJkcC0+cWxlbjsKIAl9IGVsc2UgaWYgKChsb25nKShBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpIC0gamlmZmllcykgPCAwKQogCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0xMzMxLDcgKzEzOTYsNyBAQAogCX0KIAogCS8qIEhhcyBhbiBSQ1UgR1AgZ29uZSBsb25nIGVub3VnaCB0byBzZW5kIHJlc2NoZWQgSVBJcyAmYz8gKi8KLQlpZiAoQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpICE9IEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pICYmCisJaWYgKHJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApICYmCiAJICAgICgobG9uZykoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIGppZmZpZXMpIDwgMCkpIHsKIAkJcmRwLT5uX3JwX25lZWRfZnFzKys7CiAJCXJldHVybiAxOwpAQCAtMTM2OCw2ICsxNDMzLDgyIEBACiAJICAgICAgIHJjdV9wcmVlbXB0X25lZWRzX2NwdShjcHUpOwogfQogCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9oZWFkLCByY3VfYmFycmllcl9oZWFkKSA9IHtOVUxMfTsKK3N0YXRpYyBhdG9taWNfdCByY3VfYmFycmllcl9jcHVfY291bnQ7CitzdGF0aWMgREVGSU5FX01VVEVYKHJjdV9iYXJyaWVyX211dGV4KTsKK3N0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiByY3VfYmFycmllcl9jb21wbGV0aW9uOworCitzdGF0aWMgdm9pZCByY3VfYmFycmllcl9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKm5vdHVzZWQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCkpCisJCWNvbXBsZXRlKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKK30KKworLyoKKyAqIENhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQsIGFuZCBmcm9tIGNyb3NzLWNwdSBJUlEgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfZnVuYyh2b2lkICp0eXBlKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IHJjdV9oZWFkICpoZWFkID0gJnBlcl9jcHUocmN1X2JhcnJpZXJfaGVhZCwgY3B1KTsKKwl2b2lkICgqY2FsbF9yY3VfZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkLAorCQkJICAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpOworCisJYXRvbWljX2luYygmcmN1X2JhcnJpZXJfY3B1X2NvdW50KTsKKwljYWxsX3JjdV9mdW5jID0gdHlwZTsKKwljYWxsX3JjdV9mdW5jKGhlYWQsIHJjdV9iYXJyaWVyX2NhbGxiYWNrKTsKK30KKworLyoKKyAqIE9yY2hlc3RyYXRlIHRoZSBzcGVjaWZpZWQgdHlwZSBvZiBSQ1UgYmFycmllciwgd2FpdGluZyBmb3IgYWxsCisgKiBSQ1UgY2FsbGJhY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB0byBjb21wbGV0ZS4KKyAqLworc3RhdGljIHZvaWQgX3JjdV9iYXJyaWVyKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCSB2b2lkICgqY2FsbF9yY3VfZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkLAorCQkJCQkgICAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpKQoreworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisJLyogVGFrZSBtdXRleCB0byBzZXJpYWxpemUgY29uY3VycmVudCByY3VfYmFycmllcigpIHJlcXVlc3RzLiAqLworCW11dGV4X2xvY2soJnJjdV9iYXJyaWVyX211dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOworCS8qCisJICogSW5pdGlhbGl6ZSByY3VfYmFycmllcl9jcHVfY291bnQgdG8gMSwgdGhlbiBpbnZva2UKKwkgKiByY3VfYmFycmllcl9mdW5jKCkgb24gZWFjaCBDUFUsIHNvIHRoYXQgZWFjaCBDUFUgYWxzbyBoYXMKKwkgKiBpbmNyZW1lbnRlZCByY3VfYmFycmllcl9jcHVfY291bnQuICBPbmx5IHRoZW4gaXMgaXQgc2FmZSB0bworCSAqIGRlY3JlbWVudCByY3VfYmFycmllcl9jcHVfY291bnQgLS0gb3RoZXJ3aXNlIHRoZSBmaXJzdCBDUFUKKwkgKiBtaWdodCBjb21wbGV0ZSBpdHMgZ3JhY2UgcGVyaW9kIGJlZm9yZSBhbGwgb2YgdGhlIG90aGVyIENQVXMKKwkgKiBkaWQgdGhlaXIgaW5jcmVtZW50LCBjYXVzaW5nIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIHRvbworCSAqIGVhcmx5LgorCSAqLworCWF0b21pY19zZXQoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCwgMSk7CisJcHJlZW1wdF9kaXNhYmxlKCk7IC8qIHN0b3AgQ1BVX0RZSU5HIGZyb20gZmlsbGluZyBvcnBoYW5fY2JzX2xpc3QgKi8KKwlyY3VfYWRvcHRfb3JwaGFuX2Nicyhyc3ApOworCW9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopY2FsbF9yY3VfZnVuYywgMSk7CisJcHJlZW1wdF9lbmFibGUoKTsgLyogQ1BVX0RZSU5HIGNhbiBhZ2FpbiBmaWxsIG9ycGhhbl9jYnNfbGlzdCAqLworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfYmFycmllcl9jcHVfY291bnQpKQorCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CisJbXV0ZXhfdW5sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7Cit9CisKKy8qKgorICogcmN1X2JhcnJpZXJfYmggLSBXYWl0IHVudGlsIGFsbCBpbi1mbGlnaHQgY2FsbF9yY3VfYmgoKSBjYWxsYmFja3MgY29tcGxldGUuCisgKi8KK3ZvaWQgcmN1X2JhcnJpZXJfYmgodm9pZCkKK3sKKwlfcmN1X2JhcnJpZXIoJnJjdV9iaF9zdGF0ZSwgY2FsbF9yY3VfYmgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXJfYmgpOworCisvKioKKyAqIHJjdV9iYXJyaWVyX3NjaGVkIC0gV2FpdCBmb3IgaW4tZmxpZ2h0IGNhbGxfcmN1X3NjaGVkKCkgY2FsbGJhY2tzLgorICovCit2b2lkIHJjdV9iYXJyaWVyX3NjaGVkKHZvaWQpCit7CisJX3JjdV9iYXJyaWVyKCZyY3Vfc2NoZWRfc3RhdGUsIGNhbGxfcmN1X3NjaGVkKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX3NjaGVkKTsKKwogLyoKICAqIERvIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiBvZiBhIENQVSdzIHBlci1DUFUgUkNVIGRhdGEuCiAgKi8KQEAgLTE0MTgsNiArMTU1OSw4IEBACiAJcmRwLT5iZWVub25saW5lID0gMTsJIC8qIFdlIGhhdmUgbm93IGJlZW4gb25saW5lLiAqLwogCXJkcC0+cHJlZW1wdGFibGUgPSBwcmVlbXB0YWJsZTsKIAlyZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkID0gbGFzdGNvbXAgLSAxOworCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IDA7CisJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CiAJcmRwLT5ibGltaXQgPSBibGltaXQ7CiAJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIApAQCAtMTQ2NCw2ICsxNjA3LDIyIEBACiAJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CiAJCXJjdV9vbmxpbmVfY3B1KGNwdSk7CiAJCWJyZWFrOworCWNhc2UgQ1BVX0RZSU5HOgorCWNhc2UgQ1BVX0RZSU5HX0ZST1pFTjoKKwkJLyoKKwkJICogcHJlZW1wdF9kaXNhYmxlKCkgaW4gX3JjdV9iYXJyaWVyKCkgcHJldmVudHMgc3RvcF9tYWNoaW5lKCksCisJCSAqIHNvIHdoZW4gIm9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopdHlwZSwgMSk7IgorCQkgKiByZXR1cm5zLCBhbGwgb25saW5lIGNwdXMgaGF2ZSBxdWV1ZWQgcmN1X2JhcnJpZXJfZnVuYygpLgorCQkgKiBUaGUgZHlpbmcgQ1BVIGNsZWFycyBpdHMgY3B1X29ubGluZV9tYXNrIGJpdCBhbmQKKwkJICogbW92ZXMgYWxsIG9mIGl0cyBSQ1UgY2FsbGJhY2tzIHRvIC0+b3JwaGFuX2Nic19saXN0CisJCSAqIGluIHRoZSBjb250ZXh0IG9mIHN0b3BfbWFjaGluZSgpLCBzbyBzdWJzZXF1ZW50IGNhbGxzCisJCSAqIHRvIF9yY3VfYmFycmllcigpIHdpbGwgYWRvcHQgdGhlc2UgY2FsbGJhY2tzIGFuZCBvbmx5CisJCSAqIHRoZW4gcXVldWUgcmN1X2JhcnJpZXJfZnVuYygpIG9uIGFsbCByZW1haW5pbmcgQ1BVcy4KKwkJICovCisJCXJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2UoJnJjdV9iaF9zdGF0ZSk7CisJCXJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2UoJnJjdV9zY2hlZF9zdGF0ZSk7CisJCXJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSgpOworCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgogCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgpAQCAtMTUyNiw3ICsxNjg1LDggQEAKIAkJY3B1c3RyaWRlICo9IHJzcC0+bGV2ZWxzcHJlYWRbaV07CiAJCXJucCA9IHJzcC0+bGV2ZWxbaV07CiAJCWZvciAoaiA9IDA7IGogPCByc3AtPmxldmVsY250W2ldOyBqKyssIHJucCsrKSB7Ci0JCQlzcGluX2xvY2tfaW5pdCgmcm5wLT5sb2NrKTsKKwkJCWlmIChybnAgIT0gcmN1X2dldF9yb290KHJzcCkpCisJCQkJc3Bpbl9sb2NrX2luaXQoJnJucC0+bG9jayk7CiAJCQlybnAtPmdwbnVtID0gMDsKIAkJCXJucC0+cXNtYXNrID0gMDsKIAkJCXJucC0+cXNtYXNraW5pdCA9IDA7CkBAIC0xNTQ5LDYgKzE3MDksNyBAQAogCQkJSU5JVF9MSVNUX0hFQUQoJnJucC0+YmxvY2tlZF90YXNrc1sxXSk7CiAJCX0KIAl9CisJc3Bpbl9sb2NrX2luaXQoJnJjdV9nZXRfcm9vdChyc3ApLT5sb2NrKTsKIH0KIAogLyoKQEAgLTE1NTgsNiArMTcxOSwxMCBAQAogICovCiAjZGVmaW5lIFJDVV9JTklUX0ZMQVZPUihyc3AsIHJjdV9kYXRhKSBcCiBkbyB7IFwKKwlpbnQgaTsgXAorCWludCBqOyBcCisJc3RydWN0IHJjdV9ub2RlICpybnA7IFwKKwlcCiAJcmN1X2luaXRfb25lKHJzcCk7IFwKIAlybnAgPSAocnNwKS0+bGV2ZWxbTlVNX1JDVV9MVkxTIC0gMV07IFwKIAlqID0gMDsgXApAQCAtMTU3MCwzMSArMTczNSw4IEBACiAJfSBcCiB9IHdoaWxlICgwKQogCi0jaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKLQotdm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpCi17Ci0JaW50IGk7CQkJLyogQWxsIHVzZWQgYnkgUkNVX0lOSVRfRkxBVk9SKCkuICovCi0JaW50IGo7Ci0Jc3RydWN0IHJjdV9ub2RlICpybnA7Ci0KLQlSQ1VfSU5JVF9GTEFWT1IoJnJjdV9wcmVlbXB0X3N0YXRlLCByY3VfcHJlZW1wdF9kYXRhKTsKLX0KLQotI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCi0KLXZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKQotewotfQotCi0jZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCi0KIHZvaWQgX19pbml0IF9fcmN1X2luaXQodm9pZCkKIHsKLQlpbnQgaTsJCQkvKiBBbGwgdXNlZCBieSBSQ1VfSU5JVF9GTEFWT1IoKS4gKi8KLQlpbnQgajsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKLQogCXJjdV9ib290dXBfYW5ub3VuY2UoKTsKICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgogCXByaW50ayhLRVJOX0lORk8gIlJDVS1iYXNlZCBkZXRlY3Rpb24gb2Ygc3RhbGxlZCBDUFVzIGlzIGVuYWJsZWQuXG4iKTsKQEAgLTE2MDUsNiArMTc0Nyw0IEBACiAJb3Blbl9zb2Z0aXJxKFJDVV9TT0ZUSVJRLCByY3VfcHJvY2Vzc19jYWxsYmFja3MpOwogfQogCi1tb2R1bGVfcGFyYW0oYmxpbWl0LCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHFoaW1hcmssIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0ocWxvd21hcmssIGludCwgMCk7CisjaW5jbHVkZSAicmN1dHJlZV9wbHVnaW4uaCIKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmggYi9rZXJuZWwvcmN1dHJlZS5oCmluZGV4IDhlODI4N2EuLjE4OTkwMjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmgKKysrIGIva2VybmVsL3JjdXRyZWUuaApAQCAtNDgsMTQgKzQ4LDE0IEBACiAjZWxpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVRfU1EKICMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMgogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgKCgoTlJfQ1BVUykgKyBSQ1VfRkFOT1VUIC0gMSkgLyBSQ1VfRkFOT1VUKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVQpCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICAoTlJfQ1BVUykKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8zCSAgICAgIDAKICNlbGlmIE5SX0NQVVMgPD0gUkNVX0ZBTk9VVF9DVUJFCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxTCSAgICAgIDMKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8wCSAgICAgIDEKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgICgoKE5SX0NQVVMpICsgUkNVX0ZBTk9VVF9TUSAtIDEpIC8gUkNVX0ZBTk9VVF9TUSkKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgICgoKE5SX0NQVVMpICsgKFJDVV9GQU5PVVQpIC0gMSkgLyAoUkNVX0ZBTk9VVCkpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICBESVZfUk9VTkRfVVAoTlJfQ1BVUywgUkNVX0ZBTk9VVF9TUSkKKyMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgIERJVl9ST1VORF9VUChOUl9DUFVTLCBSQ1VfRkFOT1VUKQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgTlJfQ1BVUwogI2Vsc2UKICMgZXJyb3IgIkNPTkZJR19SQ1VfRkFOT1VUIGluc3VmZmljaWVudCBmb3IgTlJfQ1BVUyIKQEAgLTc5LDE1ICs3OSwyMSBAQAogICogRGVmaW5pdGlvbiBmb3Igbm9kZSB3aXRoaW4gdGhlIFJDVSBncmFjZS1wZXJpb2QtZGV0ZWN0aW9uIGhpZXJhcmNoeS4KICAqLwogc3RydWN0IHJjdV9ub2RlIHsKLQlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCBsb2NrOwkvKiBSb290IHJjdV9ub2RlJ3MgbG9jayBwcm90ZWN0cyBzb21lICovCisJCQkJLyogIHJjdV9zdGF0ZSBmaWVsZHMgYXMgd2VsbCBhcyBmb2xsb3dpbmcuICovCiAJbG9uZwlncG51bTsJCS8qIEN1cnJlbnQgZ3JhY2UgcGVyaW9kIGZvciB0aGlzIG5vZGUuICovCiAJCQkJLyogIFRoaXMgd2lsbCBlaXRoZXIgYmUgZXF1YWwgdG8gb3Igb25lICovCiAJCQkJLyogIGJlaGluZCB0aGUgcm9vdCByY3Vfbm9kZSdzIGdwbnVtLiAqLwogCXVuc2lnbmVkIGxvbmcgcXNtYXNrOwkvKiBDUFVzIG9yIGdyb3VwcyB0aGF0IG5lZWQgdG8gc3dpdGNoIGluICovCiAJCQkJLyogIG9yZGVyIGZvciBjdXJyZW50IGdyYWNlIHBlcmlvZCB0byBwcm9jZWVkLiovCisJCQkJLyogIEluIGxlYWYgcmN1X25vZGUsIGVhY2ggYml0IGNvcnJlc3BvbmRzIHRvICovCisJCQkJLyogIGFuIHJjdV9kYXRhIHN0cnVjdHVyZSwgb3RoZXJ3aXNlLCBlYWNoICovCisJCQkJLyogIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoaWxkIHJjdV9ub2RlICovCisJCQkJLyogIHN0cnVjdHVyZS4gKi8KIAl1bnNpZ25lZCBsb25nIHFzbWFza2luaXQ7CiAJCQkJLyogUGVyLUdQIGluaXRpYWxpemF0aW9uIGZvciBxc21hc2suICovCiAJdW5zaWduZWQgbG9uZyBncnBtYXNrOwkvKiBNYXNrIHRvIGFwcGx5IHRvIHBhcmVudCBxc21hc2suICovCisJCQkJLyogIE9ubHkgb25lIGJpdCB3aWxsIGJlIHNldCBpbiB0aGlzIG1hc2suICovCiAJaW50CWdycGxvOwkJLyogbG93ZXN0LW51bWJlcmVkIENQVSBvciBncm91cCBoZXJlLiAqLwogCWludAlncnBoaTsJCS8qIGhpZ2hlc3QtbnVtYmVyZWQgQ1BVIG9yIGdyb3VwIGhlcmUuICovCiAJdTgJZ3JwbnVtOwkJLyogQ1BVL2dyb3VwIG51bWJlciBmb3IgbmV4dCBsZXZlbCB1cC4gKi8KQEAgLTk1LDggKzEwMSwyMyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcGFyZW50OwogCXN0cnVjdCBsaXN0X2hlYWQgYmxvY2tlZF90YXNrc1syXTsKIAkJCQkvKiBUYXNrcyBibG9ja2VkIGluIFJDVSByZWFkLXNpZGUgY3JpdHNlY3QuICovCisJCQkJLyogIEdyYWNlIHBlcmlvZCBudW1iZXIgKC0+Z3BudW0pIHggYmxvY2tlZCAqLworCQkJCS8qICBieSB0YXNrcyBvbiB0aGUgKHggJiAweDEpIGVsZW1lbnQgb2YgdGhlICovCisJCQkJLyogIGJsb2NrZWRfdGFza3NbXSBhcnJheS4gKi8KIH0gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKIAorLyoKKyAqIERvIGEgZnVsbCBicmVhZHRoLWZpcnN0IHNjYW4gb2YgdGhlIHJjdV9ub2RlIHN0cnVjdHVyZXMgZm9yIHRoZQorICogc3BlY2lmaWVkIHJjdV9zdGF0ZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgcmN1X2Zvcl9lYWNoX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgXAorCWZvciAoKHJucCkgPSAmKHJzcCktPm5vZGVbMF07IFwKKwkgICAgIChybnApIDwgJihyc3ApLT5ub2RlW05VTV9SQ1VfTk9ERVNdOyAocm5wKSsrKQorCisjZGVmaW5lIHJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApIFwKKwlmb3IgKChybnApID0gKHJzcCktPmxldmVsW05VTV9SQ1VfTFZMUyAtIDFdOyBcCisJICAgICAocm5wKSA8ICYocnNwKS0+bm9kZVtOVU1fUkNVX05PREVTXTsgKHJucCkrKykKKwogLyogSW5kZXggdmFsdWVzIGZvciBueHR0YWlsIGFycmF5IGluIHN0cnVjdCByY3VfZGF0YS4gKi8KICNkZWZpbmUgUkNVX0RPTkVfVEFJTAkJMAkvKiBBbHNvIFJDVV9XQUlUIGhlYWQuICovCiAjZGVmaW5lIFJDVV9XQUlUX1RBSUwJCTEJLyogQWxzbyBSQ1VfTkVYVF9SRUFEWSBoZWFkLiAqLwpAQCAtMTI2LDIzICsxNDcsMzAgQEAKIAkgKiBBbnkgb2YgdGhlIHBhcnRpdGlvbnMgbWlnaHQgYmUgZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlCiAJICogcG9pbnRlciB0byB0aGF0IHBhcnRpdGlvbiB3aWxsIGJlIGVxdWFsIHRvIHRoZSBwb2ludGVyIGZvcgogCSAqIHRoZSBmb2xsb3dpbmcgcGFydGl0aW9uLiAgV2hlbiB0aGUgbGlzdCBpcyBlbXB0eSwgYWxsIG9mCi0JICogdGhlIG54dHRhaWwgZWxlbWVudHMgcG9pbnQgdG8gbnh0bGlzdCwgd2hpY2ggaXMgTlVMTC4KKwkgKiB0aGUgbnh0dGFpbCBlbGVtZW50cyBwb2ludCB0byB0aGUgLT5ueHRsaXN0IHBvaW50ZXIgaXRzZWxmLAorCSAqIHdoaWNoIGluIHRoYXQgY2FzZSBpcyBOVUxMLgogCSAqCi0JICogWypueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdLCBOVUxMID0gKm54dHRhaWxbUkNVX05FWFRfVEFJTF0pOgotCSAqCUVudHJpZXMgdGhhdCBtaWdodCBoYXZlIGFycml2ZWQgYWZ0ZXIgY3VycmVudCBHUCBlbmRlZAotCSAqIFsqbnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSwgKm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0pOgotCSAqCUVudHJpZXMga25vd24gdG8gaGF2ZSBhcnJpdmVkIGJlZm9yZSBjdXJyZW50IEdQIGVuZGVkCi0JICogWypueHR0YWlsW1JDVV9ET05FX1RBSUxdLCAqbnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSk6Ci0JICoJRW50cmllcyB0aGF0IGJhdGNoICMgPD0gLT5jb21wbGV0ZWQgLSAxOiB3YWl0aW5nIGZvciBjdXJyZW50IEdQCiAJICogW254dGxpc3QsICpueHR0YWlsW1JDVV9ET05FX1RBSUxdKToKIAkgKglFbnRyaWVzIHRoYXQgYmF0Y2ggIyA8PSAtPmNvbXBsZXRlZAogCSAqCVRoZSBncmFjZSBwZXJpb2QgZm9yIHRoZXNlIGVudHJpZXMgaGFzIGNvbXBsZXRlZCwgYW5kCiAJICoJdGhlIG90aGVyIGdyYWNlLXBlcmlvZC1jb21wbGV0ZWQgZW50cmllcyBtYXkgYmUgbW92ZWQKIAkgKgloZXJlIHRlbXBvcmFyaWx5IGluIHJjdV9wcm9jZXNzX2NhbGxiYWNrcygpLgorCSAqIFsqbnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSwgKm54dHRhaWxbUkNVX1dBSVRfVEFJTF0pOgorCSAqCUVudHJpZXMgdGhhdCBiYXRjaCAjIDw9IC0+Y29tcGxldGVkIC0gMTogd2FpdGluZyBmb3IgY3VycmVudCBHUAorCSAqIFsqbnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSwgKm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0pOgorCSAqCUVudHJpZXMga25vd24gdG8gaGF2ZSBhcnJpdmVkIGJlZm9yZSBjdXJyZW50IEdQIGVuZGVkCisJICogWypueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdLCAqbnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSk6CisJICoJRW50cmllcyB0aGF0IG1pZ2h0IGhhdmUgYXJyaXZlZCBhZnRlciBjdXJyZW50IEdQIGVuZGVkCisJICoJTm90ZSB0aGF0IHRoZSB2YWx1ZSBvZiAqbnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSB3aWxsCisJICoJYWx3YXlzIGJlIE5VTEwsIGFzIHRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgbGlzdC4KIAkgKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgKm54dGxpc3Q7CiAJc3RydWN0IHJjdV9oZWFkICoqbnh0dGFpbFtSQ1VfTkVYVF9TSVpFXTsKIAlsb25nCQlxbGVuOwkJLyogIyBvZiBxdWV1ZWQgY2FsbGJhY2tzICovCisJbG9uZwkJcWxlbl9sYXN0X2Zxc19jaGVjazsKKwkJCQkJLyogcWxlbiBhdCBsYXN0IGNoZWNrIGZvciBRUyBmb3JjaW5nICovCisJdW5zaWduZWQgbG9uZwluX2ZvcmNlX3FzX3NuYXA7CisJCQkJCS8qIGRpZCBvdGhlciBDUFUgZm9yY2UgUVMgcmVjZW50bHk/ICovCiAJbG9uZwkJYmxpbWl0OwkJLyogVXBwZXIgbGltaXQgb24gYSBwcm9jZXNzZWQgYmF0Y2ggKi8KIAogI2lmZGVmIENPTkZJR19OT19IWgpAQCAtMTczLDkgKzIwMSwxMCBAQAogfTsKIAogLyogVmFsdWVzIGZvciBzaWduYWxlZCBmaWVsZCBpbiBzdHJ1Y3QgcmN1X3N0YXRlLiAqLwotI2RlZmluZSBSQ1VfR1BfSU5JVAkJMAkvKiBHcmFjZSBwZXJpb2QgYmVpbmcgaW5pdGlhbGl6ZWQuICovCi0jZGVmaW5lIFJDVV9TQVZFX0RZTlRJQ0sJMQkvKiBOZWVkIHRvIHNjYW4gZHludGljayBzdGF0ZS4gKi8KLSNkZWZpbmUgUkNVX0ZPUkNFX1FTCQkyCS8qIE5lZWQgdG8gZm9yY2UgcXVpZXNjZW50IHN0YXRlLiAqLworI2RlZmluZSBSQ1VfR1BfSURMRQkJMAkvKiBObyBncmFjZSBwZXJpb2QgaW4gcHJvZ3Jlc3MuICovCisjZGVmaW5lIFJDVV9HUF9JTklUCQkxCS8qIEdyYWNlIHBlcmlvZCBiZWluZyBpbml0aWFsaXplZC4gKi8KKyNkZWZpbmUgUkNVX1NBVkVfRFlOVElDSwkyCS8qIE5lZWQgdG8gc2NhbiBkeW50aWNrIHN0YXRlLiAqLworI2RlZmluZSBSQ1VfRk9SQ0VfUVMJCTMJLyogTmVlZCB0byBmb3JjZSBxdWllc2NlbnQgc3RhdGUuICovCiAjaWZkZWYgQ09ORklHX05PX0haCiAjZGVmaW5lIFJDVV9TSUdOQUxfSU5JVAkJUkNVX1NBVkVfRFlOVElDSwogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLwpAQCAtMjE2LDggKzI0NSwxOSBAQAogCQkJCQkJLyogRm9yY2UgUVMgc3RhdGUuICovCiAJbG9uZwlncG51bTsJCQkJLyogQ3VycmVudCBncCBudW1iZXIuICovCiAJbG9uZwljb21wbGV0ZWQ7CQkJLyogIyBvZiBsYXN0IGNvbXBsZXRlZCBncC4gKi8KKworCS8qIEVuZCAgb2YgZmllbGRzIGd1YXJkZWQgYnkgcm9vdCByY3Vfbm9kZSdzIGxvY2suICovCisKIAlzcGlubG9ja190IG9ub2ZmbG9jazsJCQkvKiBleGNsdWRlIG9uL29mZmxpbmUgYW5kICovCi0JCQkJCQkvKiAgc3RhcnRpbmcgbmV3IEdQLiAqLworCQkJCQkJLyogIHN0YXJ0aW5nIG5ldyBHUC4gIEFsc28gKi8KKwkJCQkJCS8qICBwcm90ZWN0cyB0aGUgZm9sbG93aW5nICovCisJCQkJCQkvKiAgb3JwaGFuX2NicyBmaWVsZHMuICovCisJc3RydWN0IHJjdV9oZWFkICpvcnBoYW5fY2JzX2xpc3Q7CS8qIGxpc3Qgb2YgcmN1X2hlYWQgc3RydWN0cyAqLworCQkJCQkJLyogIG9ycGhhbmVkIGJ5IGFsbCBDUFVzIGluICovCisJCQkJCQkvKiAgYSBnaXZlbiBsZWFmIHJjdV9ub2RlICovCisJCQkJCQkvKiAgZ29pbmcgb2ZmbGluZS4gKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgKipvcnBoYW5fY2JzX3RhaWw7CS8qIEFuZCB0YWlsIHBvaW50ZXIuICovCisJbG9uZyBvcnBoYW5fcWxlbjsJCQkvKiBOdW1iZXIgb2Ygb3JwaGFuZWQgY2JzLiAqLwogCXNwaW5sb2NrX3QgZnFzbG9jazsJCQkvKiBPbmx5IG9uZSB0YXNrIGZvcmNpbmcgKi8KIAkJCQkJCS8qICBxdWllc2NlbnQgc3RhdGVzLiAqLwogCXVuc2lnbmVkIGxvbmcgamlmZmllc19mb3JjZV9xczsJCS8qIFRpbWUgYXQgd2hpY2ggdG8gaW52b2tlICovCkBAIC0yNTUsNSArMjk1LDMwIEBACiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfcHJlZW1wdF9kYXRhKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIAotI2VuZGlmIC8qICNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCisjZWxzZSAvKiAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLwogCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgcmN1dHJlZV9wbHVnaW4uaCAqLworc3RhdGljIGlubGluZSB2b2lkIHJjdV9ib290dXBfYW5ub3VuY2Uodm9pZCk7Citsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSk7CitzdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CisjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKK3N0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Moc3RydWN0IHJjdV9ub2RlICpybnApOworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfb2ZmbGluZV9jcHUoaW50IGNwdSk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfcHJvY2Vzc19jYWxsYmFja3Modm9pZCk7Cit2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSk7CitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X3BlbmRpbmcoaW50IGNwdSk7CitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X25lZWRzX2NwdShpbnQgY3B1KTsKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3VfcHJlZW1wdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHZvaWQpOworc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKTsKKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaCBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCmluZGV4IDFjZWUwNGYuLmVmMmE1OGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCkBAIC0xNTAsNiArMTUwLDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3JjdV9yZWFkX2xvY2spOwogCisvKgorICogQ2hlY2sgZm9yIHByZWVtcHRlZCBSQ1UgcmVhZGVycyBibG9ja2luZyB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QKKyAqIGZvciB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4gIElmIHRoZSBjYWxsZXIgbmVlZHMgYSByZWxpYWJsZQorICogYW5zd2VyLCBpdCBtdXN0IGhvbGQgdGhlIHJjdV9ub2RlJ3MgLT5sb2NrLgorICovCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSk7Cit9CisKIHN0YXRpYyB2b2lkIHJjdV9yZWFkX3VubG9ja19zcGVjaWFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKIAlpbnQgZW1wdHk7CkBAIC0xOTYsNyArMjA2LDcgQEAKIAkJCQlicmVhazsKIAkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCX0KLQkJZW1wdHkgPSBsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pOworCQllbXB0eSA9ICFyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKTsKIAkJbGlzdF9kZWxfaW5pdCgmdC0+cmN1X25vZGVfZW50cnkpOwogCQl0LT5yY3VfYmxvY2tlZF9ub2RlID0gTlVMTDsKIApAQCAtMjA3LDcgKzIxNyw3IEBACiAJCSAqIGRyb3Agcm5wLT5sb2NrIGFuZCByZXN0b3JlIGlycS4KIAkJICovCiAJCWlmICghZW1wdHkgJiYgcm5wLT5xc21hc2sgPT0gMCAmJgotCQkgICAgbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKSkgeworCQkgICAgIXJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7CiAJCQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9wOwogCiAJCQlpZiAocm5wLT5wYXJlbnQgPT0gTlVMTCkgewpAQCAtMjU3LDEyICsyNjcsMTIgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwOwotCWludCBwaGFzZSA9IHJucC0+Z3BudW0gJiAweDE7CisJaW50IHBoYXNlOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAotCWlmICghbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXSkpIHsKKwlpZiAocmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCQlwaGFzZSA9IHJucC0+Z3BudW0gJiAweDE7IC8qIHJlLXJlYWQgdW5kZXIgbG9jay4gKi8KKwkJcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOwogCQlscCA9ICZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsIGxwLCByY3Vfbm9kZV9lbnRyeSkKIAkJCXByaW50aygiIFAlZCIsIHQtPnBpZCk7CkBAIC0yODEsMjAgKzI5MSwxMCBAQAogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQogewotCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKSk7CisJV0FSTl9PTl9PTkNFKHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKTsKIAlXQVJOX09OX09OQ0Uocm5wLT5xc21hc2spOwogfQogCi0vKgotICogQ2hlY2sgZm9yIHByZWVtcHRlZCBSQ1UgcmVhZGVycyBmb3IgdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUuCi0gKiBJZiB0aGUgY2FsbGVyIG5lZWRzIGEgcmVsaWFibGUgYW5zd2VyLCBpdCBtdXN0IGhvbGQgdGhlIHJjdV9ub2RlJ3MKLSAqID5sb2NrLgotICovCi1zdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKLXsKLQlyZXR1cm4gIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSk7Ci19Ci0KICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAogLyoKQEAgLTMwNCwyMSArMzA0LDI1IEBACiAgKiBwYXJlbnQgaXMgdG8gcmVtb3ZlIHRoZSBuZWVkIGZvciByY3VfcmVhZF91bmxvY2tfc3BlY2lhbCgpIHRvCiAgKiBtYWtlIG1vcmUgdGhhbiB0d28gYXR0ZW1wdHMgdG8gYWNxdWlyZSB0aGUgdGFyZ2V0IHJjdV9ub2RlJ3MgbG9jay4KICAqCisgKiBSZXR1cm5zIDEgaWYgdGhlcmUgd2FzIHByZXZpb3VzbHkgYSB0YXNrIGJsb2NraW5nIHRoZSBjdXJyZW50IGdyYWNlCisgKiBwZXJpb2Qgb24gdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUuCisgKgogICogVGhlIGNhbGxlciBtdXN0IGhvbGQgcm5wLT5sb2NrIHdpdGggaXJxcyBkaXNhYmxlZC4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkJICAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCi0JCQkJICAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCSAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCisJCQkJICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpscDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpscF9yb290OworCWludCByZXR2YWwgPSByY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucF9yb290ID0gcmN1X2dldF9yb290KHJzcCk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0cDsKIAogCWlmIChybnAgPT0gcm5wX3Jvb3QpIHsKIAkJV0FSTl9PTkNFKDEsICJMYXN0IENQVSB0aG91Z2h0IHRvIGJlIG9mZmxpbmVkPyIpOwotCQlyZXR1cm47ICAvKiBTaG91bGRuJ3QgaGFwcGVuOiBhdCBsZWFzdCBvbmUgQ1BVIG9ubGluZS4gKi8KKwkJcmV0dXJuIDA7ICAvKiBTaG91bGRuJ3QgaGFwcGVuOiBhdCBsZWFzdCBvbmUgQ1BVIG9ubGluZS4gKi8KIAl9CiAJV0FSTl9PTl9PTkNFKHJucCAhPSByZHAtPm15bm9kZSAmJgogCQkgICAgICghbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzWzBdKSB8fApAQCAtMzQyLDYgKzM0Niw4IEBACiAJCQlzcGluX3VubG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwogCQl9CiAJfQorCisJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoKQEAgLTM5Myw2ICszOTksMTcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKIAogLyoKKyAqIFdhaXQgZm9yIGFuIHJjdS1wcmVlbXB0IGdyYWNlIHBlcmlvZC4gIFdlIGFyZSBzdXBwb3NlZCB0byBleHBlZGl0ZSB0aGUKKyAqIGdyYWNlIHBlcmlvZCwgYnV0IHRoaXMgaXMgdGhlIGNydWRlIHNsb3cgY29tcGF0YWJpbGl0eSBoYWNrLCBzbyBqdXN0CisgKiBpbnZva2Ugc3luY2hyb25pemVfcmN1KCkuCisgKi8KK3ZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKQoreworCXN5bmNocm9uaXplX3JjdSgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCk7CisKKy8qCiAgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGltbWVkaWF0ZSBwcmVlbXB0YWJsZS1SQ1UtcmVsYXRlZCB3b3JrCiAgKiB0byBiZSBkb25lLgogICovCkBAIC00MTAsNiArNDI3LDE1IEBACiAJcmV0dXJuICEhcGVyX2NwdShyY3VfcHJlZW1wdF9kYXRhLCBjcHUpLm54dGxpc3Q7CiB9CiAKKy8qKgorICogcmN1X2JhcnJpZXIgLSBXYWl0IHVudGlsIGFsbCBpbi1mbGlnaHQgY2FsbF9yY3UoKSBjYWxsYmFja3MgY29tcGxldGUuCisgKi8KK3ZvaWQgcmN1X2JhcnJpZXIodm9pZCkKK3sKKwlfcmN1X2JhcnJpZXIoJnJjdV9wcmVlbXB0X3N0YXRlLCBjYWxsX3JjdSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7CisKIC8qCiAgKiBJbml0aWFsaXplIHByZWVtcHRhYmxlIFJDVSdzIHBlci1DUFUgZGF0YS4KICAqLwpAQCAtNDE5LDYgKzQ0NSwyMiBAQAogfQogCiAvKgorICogTW92ZSBwcmVlbXB0YWJsZSBSQ1UncyBjYWxsYmFja3MgdG8gLT5vcnBoYW5fY2JzX2xpc3QuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSh2b2lkKQoreworCXJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2UoJnJjdV9wcmVlbXB0X3N0YXRlKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgcHJlZW1wdGFibGUgUkNVJ3Mgc3RhdGUgc3RydWN0dXJlcy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKQoreworCVJDVV9JTklUX0ZMQVZPUigmcmN1X3ByZWVtcHRfc3RhdGUsIHJjdV9wcmVlbXB0X2RhdGEpOworfQorCisvKgogICogQ2hlY2sgZm9yIGEgdGFzayBleGl0aW5nIHdoaWxlIGluIGEgcHJlZW1wdGFibGUtUkNVIHJlYWQtc2lkZQogICogY3JpdGljYWwgc2VjdGlvbiwgY2xlYW4gdXAgaWYgc28uICBObyBuZWVkIHRvIGlzc3VlIHdhcm5pbmdzLAogICogYXMgZGVidWdfY2hlY2tfbm9fbG9ja3NfaGVsZCgpIGFscmVhZHkgZG9lcyB0aGlzIGlmIGxvY2tkZXAKQEAgLTQ2MSw2ICs1MDMsMTUgQEAKIHsKIH0KIAorLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB0aGVyZSBhcmUgbmV2ZXIgYW55IHByZWVtcHRlZAorICogUkNVIHJlYWRlcnMuCisgKi8KK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKIAogLyoKQEAgLTQ4MywyNSArNTM0LDE5IEBACiAJV0FSTl9PTl9PTkNFKHJucC0+cXNtYXNrKTsKIH0KIAotLyoKLSAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB0aGVyZSBhcmUgbmV2ZXIgYW55IHByZWVtcHRlZAotICogUkNVIHJlYWRlcnMuCi0gKi8KLXN0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQotewotCXJldHVybiAwOwotfQotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAKIC8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgbmVlZHMgdG8gbWlncmF0ZQotICogdGFza3MgdGhhdCB3ZXJlIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuCisgKiB0YXNrcyB0aGF0IHdlcmUgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgYW5kCisgKiBzdWNoIG5vbi1leGlzdGVudCB0YXNrcyBjYW5ub3QgcG9zc2libHkgaGF2ZSBiZWVuIGJsb2NraW5nIHRoZSBjdXJyZW50CisgKiBncmFjZSBwZXJpb2QuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAotCQkJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQorc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01MTgsNyArNTYzLDcgQEAKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBoYXMgYW55IGNhbGxiYWNrcwogICogdG8gY2hlY2suCiAgKi8KLXZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19jYWxsYmFja3MoaW50IGNwdSkKIHsKIH0KIApAQCAtNTI2LDcgKzU3MSw3IEBACiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSBjYWxsYmFja3MKICAqIHRvIHByb2Nlc3MuCiAgKi8KLXZvaWQgcmN1X3ByZWVtcHRfcHJvY2Vzc19jYWxsYmFja3Modm9pZCkKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3Byb2Nlc3NfY2FsbGJhY2tzKHZvaWQpCiB7CiB9CiAKQEAgLTU0MCw2ICs1ODUsMTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKIAogLyoKKyAqIFdhaXQgZm9yIGFuIHJjdS1wcmVlbXB0IGdyYWNlIHBlcmlvZCwgYnV0IG1ha2UgaXQgaGFwcGVuIHF1aWNrbHkuCisgKiBCdXQgYmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIG1hcCB0byByY3Utc2NoZWQuCisgKi8KK3ZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKQoreworCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCk7CisKKy8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSB3b3JrIHRvIGRvLgogICovCiBzdGF0aWMgaW50IHJjdV9wcmVlbXB0X3BlbmRpbmcoaW50IGNwdSkKQEAgLTU1Niw2ICs2MTEsMTYgQEAKIH0KIAogLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCByY3VfYmFycmllcigpIGlzIGp1c3QKKyAqIGFub3RoZXIgbmFtZSBmb3IgcmN1X2JhcnJpZXJfc2NoZWQoKS4KKyAqLwordm9pZCByY3VfYmFycmllcih2b2lkKQoreworCXJjdV9iYXJyaWVyX3NjaGVkKCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7CisKKy8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgaXMgbm8gcGVyLUNQVQogICogZGF0YSB0byBpbml0aWFsaXplLgogICovCkBAIC01NjMsNCArNjI4LDE4IEBACiB7CiB9CiAKKy8qCisgKiBCZWNhdXNlIHRoZXJlIGlzIG5vIHByZWVtcHRhYmxlIFJDVSwgdGhlcmUgYXJlIG5vIGNhbGxiYWNrcyB0byBtb3ZlLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9zZW5kX2Nic190b19vcnBoYW5hZ2Uodm9pZCkKK3sKK30KKworLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZWVkIG5vdCBiZSBpbml0aWFsaXplZC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKQoreworfQorCiAjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV90cmFjZS5jIGIva2VybmVsL3JjdXRyZWVfdHJhY2UuYwppbmRleCBjODlmNWU5Li40YjMxYzc3IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKQEAgLTkzLDcgKzkzLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VkYXRhLCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1ZGF0YV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1ZGF0YV9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcmN1ZGF0YV9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VkYXRhX2NzdiwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWRhdGFfY3N2X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VkYXRhX2Nzdl9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcmN1ZGF0YV9jc3Zfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMTU5LDEzICsxNTksMTMgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAogCXNlcV9wcmludGYobSwgImM9JWxkIGc9JWxkIHM9JWQgamZxPSVsZCBqPSV4ICIKLQkgICAgICAgICAgICAgICJuZnFzPSVsdS9uZnFzbmc9JWx1KCVsdSkgZnFsaD0lbHVcbiIsCisJCSAgICAgICJuZnFzPSVsdS9uZnFzbmc9JWx1KCVsdSkgZnFsaD0lbHUgb3FsZW49JWxkXG4iLAogCQkgICByc3AtPmNvbXBsZXRlZCwgcnNwLT5ncG51bSwgcnNwLT5zaWduYWxlZCwKIAkJICAgKGxvbmcpKHJzcC0+amlmZmllc19mb3JjZV9xcyAtIGppZmZpZXMpLAogCQkgICAoaW50KShqaWZmaWVzICYgMHhmZmZmKSwKIAkJICAgcnNwLT5uX2ZvcmNlX3FzLCByc3AtPm5fZm9yY2VfcXNfbmdwLAogCQkgICByc3AtPm5fZm9yY2VfcXMgLSByc3AtPm5fZm9yY2VfcXNfbmdwLAotCQkgICByc3AtPm5fZm9yY2VfcXNfbGgpOworCQkgICByc3AtPm5fZm9yY2VfcXNfbGgsIHJzcC0+b3JwaGFuX3FsZW4pOwogCWZvciAocm5wID0gJnJzcC0+bm9kZVswXTsgcm5wIC0gJnJzcC0+bm9kZVswXSA8IE5VTV9SQ1VfTk9ERVM7IHJucCsrKSB7CiAJCWlmIChybnAtPmxldmVsICE9IGxldmVsKSB7CiAJCQlzZXFfcHV0cyhtLCAiXG4iKTsKQEAgLTE5Niw3ICsxOTYsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3JjdWhpZXIsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VoaWVyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VoaWVyX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSByY3VoaWVyX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKQEAgLTIyMiw3ICsyMjIsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3JjdWdwLCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1Z3BfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWdwX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSByY3VncF9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VfcGVuZGluZywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdV9wZW5kaW5nX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VfcGVuZGluZ19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcmN1X3BlbmRpbmdfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEva2VybmVsL3JlbGF5LmMgYi9rZXJuZWwvcmVsYXkuYwppbmRleCBiYzE4ODU0Li43NjBjMjYyIDEwMDY0NAotLS0gYS9rZXJuZWwvcmVsYXkuYworKysgYi9rZXJuZWwvcmVsYXkuYwpAQCAtNjAsNyArNjAsNyBAQAogLyoKICAqIHZtX29wcyBmb3IgcmVsYXkgZmlsZSBtYXBwaW5ncy4KICAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCByZWxheV9maWxlX21tYXBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCByZWxheV9maWxlX21tYXBfb3BzID0gewogCS5mYXVsdCA9IHJlbGF5X2J1Zl9mYXVsdCwKIAkuY2xvc2UgPSByZWxheV9maWxlX21tYXBfY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEva2VybmVsL3Jlc19jb3VudGVyLmMgYi9rZXJuZWwvcmVzX2NvdW50ZXIuYwppbmRleCA4OGZhZWMyLi5iY2RhYmYzIDEwMDY0NAotLS0gYS9rZXJuZWwvcmVzX2NvdW50ZXIuYworKysgYi9rZXJuZWwvcmVzX2NvdW50ZXIuYwpAQCAtMzcsMjcgKzM3LDE3IEBACiB9CiAKIGludCByZXNfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJCXN0cnVjdCByZXNfY291bnRlciAqKmxpbWl0X2ZhaWxfYXQsCi0JCQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKipzb2Z0X2xpbWl0X2ZhaWxfYXQpCisJCQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKipsaW1pdF9mYWlsX2F0KQogewogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmMsICp1OwogCiAJKmxpbWl0X2ZhaWxfYXQgPSBOVUxMOwotCWlmIChzb2Z0X2xpbWl0X2ZhaWxfYXQpCi0JCSpzb2Z0X2xpbWl0X2ZhaWxfYXQgPSBOVUxMOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3IgKGMgPSBjb3VudGVyOyBjICE9IE5VTEw7IGMgPSBjLT5wYXJlbnQpIHsKIAkJc3Bpbl9sb2NrKCZjLT5sb2NrKTsKIAkJcmV0ID0gcmVzX2NvdW50ZXJfY2hhcmdlX2xvY2tlZChjLCB2YWwpOwotCQkvKgotCQkgKiBXaXRoIHNvZnQgbGltaXRzLCB3ZSByZXR1cm4gdGhlIGhpZ2hlc3QgYW5jZXN0b3IKLQkJICogdGhhdCBleGNlZWRzIGl0cyBzb2Z0IGxpbWl0Ci0JCSAqLwotCQlpZiAoc29mdF9saW1pdF9mYWlsX2F0ICYmCi0JCQkhcmVzX2NvdW50ZXJfc29mdF9saW1pdF9jaGVja19sb2NrZWQoYykpCi0JCQkqc29mdF9saW1pdF9mYWlsX2F0ID0gYzsKIAkJc3Bpbl91bmxvY2soJmMtPmxvY2spOwogCQlpZiAocmV0IDwgMCkgewogCQkJKmxpbWl0X2ZhaWxfYXQgPSBjOwpAQCAtODUsOCArNzUsNyBAQAogCWNvdW50ZXItPnVzYWdlIC09IHZhbDsKIH0KIAotdm9pZCByZXNfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkJCWJvb2wgKndhc19zb2Z0X2xpbWl0X2V4Y2VzcykKK3ZvaWQgcmVzX2NvdW50ZXJfdW5jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByZXNfY291bnRlciAqYzsKQEAgLTk0LDkgKzgzLDYgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yIChjID0gY291bnRlcjsgYyAhPSBOVUxMOyBjID0gYy0+cGFyZW50KSB7CiAJCXNwaW5fbG9jaygmYy0+bG9jayk7Ci0JCWlmICh3YXNfc29mdF9saW1pdF9leGNlc3MpCi0JCQkqd2FzX3NvZnRfbGltaXRfZXhjZXNzID0KLQkJCQkhcmVzX2NvdW50ZXJfc29mdF9saW1pdF9jaGVja19sb2NrZWQoYyk7CiAJCXJlc19jb3VudGVyX3VuY2hhcmdlX2xvY2tlZChjLCB2YWwpOwogCQlzcGluX3VubG9jaygmYy0+bG9jayk7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCBlZTYxZjQ1Li4zYzExYWUwIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMzA5LDYgKzMwOSw4IEBACiAgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFza19ncm91cF9sb2NrKTsKIAorI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IHJvb3RfdGFza19ncm91cF9lbXB0eSh2b2lkKQogewpAQCAtMzE2LDcgKzMxOCw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAjaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKICMgZGVmaW5lIElOSVRfVEFTS19HUk9VUF9MT0FECSgyKk5JQ0VfMF9MT0FEKQogI2Vsc2UgLyogIUNPTkZJR19VU0VSX1NDSEVEICovCkBAIC02NzYsNiArNjc3LDcgQEAKIAogLyoqCiAgKiBydW5xdWV1ZV9pc19sb2NrZWQKKyAqIEBjcHU6IHRoZSBwcm9jZXNzb3IgaW4gcXVlc3Rpb24uCiAgKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGNwdSBydW5xdWV1ZSBpcyBsb2NrZWQuCiAgKiBUaGlzIGludGVyZmFjZSBhbGxvd3MgcHJpbnRrIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBydW5xdWV1ZSBsb2NrCkBAIC03ODAsNyArNzgyLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgc2NoZWRfZmVhdF9zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NoZWRfZmVhdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NoZWRfZmVhdF9mb3BzID0gewogCS5vcGVuCQk9IHNjaGVkX2ZlYXRfb3BlbiwKIAkud3JpdGUJCT0gc2NoZWRfZmVhdF93cml0ZSwKIAkucmVhZAkJPSBzZXFfcmVhZCwKQEAgLTE1NjMsMTEgKzE1NjUsNyBAQAogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAotc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSB7Ci0JdW5zaWduZWQgbG9uZyBycV93ZWlnaHRbTlJfQ1BVU107Ci19OwotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSwgdXBkYXRlX3NoYXJlc19kYXRhKTsKK3N0YXRpYyBfX3JlYWRfbW9zdGx5IHVuc2lnbmVkIGxvbmcgKnVwZGF0ZV9zaGFyZXNfZGF0YTsKIAogc3RhdGljIHZvaWQgX19zZXRfc2Vfc2hhcmVzKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCB1bnNpZ25lZCBsb25nIHNoYXJlcyk7CiAKQEAgLTE1NzcsMTIgKzE1NzUsMTIgQEAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzZF9zaGFyZXMsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2RfcnFfd2VpZ2h0LAotCQkJCSAgICBzdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhICp1c2QpCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnVzZF9ycV93ZWlnaHQpCiB7CiAJdW5zaWduZWQgbG9uZyBzaGFyZXMsIHJxX3dlaWdodDsKIAlpbnQgYm9vc3QgPSAwOwogCi0JcnFfd2VpZ2h0ID0gdXNkLT5ycV93ZWlnaHRbY3B1XTsKKwlycV93ZWlnaHQgPSB1c2RfcnFfd2VpZ2h0W2NwdV07CiAJaWYgKCFycV93ZWlnaHQpIHsKIAkJYm9vc3QgPSAxOwogCQlycV93ZWlnaHQgPSBOSUNFXzBfTE9BRDsKQEAgLTE2MTcsNyArMTYxNSw3IEBACiBzdGF0aWMgaW50IHRnX3NoYXJlc191cChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyB3ZWlnaHQsIHJxX3dlaWdodCA9IDAsIHNoYXJlcyA9IDA7Ci0Jc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSAqdXNkOworCXVuc2lnbmVkIGxvbmcgKnVzZF9ycV93ZWlnaHQ7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CkBAIC0xNjI2LDExICsxNjI0LDExIEBACiAJCXJldHVybiAwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXVzZCA9ICZfX2dldF9jcHVfdmFyKHVwZGF0ZV9zaGFyZXNfZGF0YSk7CisJdXNkX3JxX3dlaWdodCA9IHBlcl9jcHVfcHRyKHVwZGF0ZV9zaGFyZXNfZGF0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpIHsKIAkJd2VpZ2h0ID0gdGctPmNmc19ycVtpXS0+bG9hZC53ZWlnaHQ7Ci0JCXVzZC0+cnFfd2VpZ2h0W2ldID0gd2VpZ2h0OworCQl1c2RfcnFfd2VpZ2h0W2ldID0gd2VpZ2h0OwogCiAJCS8qCiAJCSAqIElmIHRoZXJlIGFyZSBjdXJyZW50bHkgbm8gdGFza3Mgb24gdGhlIGNwdSBwcmV0ZW5kIHRoZXJlCkBAIC0xNjUxLDcgKzE2NDksNyBAQAogCQlzaGFyZXMgPSB0Zy0+c2hhcmVzOwogCiAJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkKLQkJdXBkYXRlX2dyb3VwX3NoYXJlc19jcHUodGcsIGksIHNoYXJlcywgcnFfd2VpZ2h0LCB1c2QpOworCQl1cGRhdGVfZ3JvdXBfc2hhcmVzX2NwdSh0ZywgaSwgc2hhcmVzLCBycV93ZWlnaHQsIHVzZF9ycV93ZWlnaHQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCkBAIC0xOTk1LDYgKzE5OTMsMzggQEAKIAkJcC0+c2NoZWRfY2xhc3MtPnByaW9fY2hhbmdlZChycSwgcCwgb2xkcHJpbywgcnVubmluZyk7CiB9CiAKKy8qKgorICoga3RocmVhZF9iaW5kIC0gYmluZCBhIGp1c3QtY3JlYXRlZCBrdGhyZWFkIHRvIGEgY3B1LgorICogQHA6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCisgKiBAY3B1OiBjcHUgKG1pZ2h0IG5vdCBiZSBvbmxpbmUsIG11c3QgYmUgcG9zc2libGUpIGZvciBAayB0byBydW4gb24uCisgKgorICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBzZXRfY3B1c19hbGxvd2VkKCksCisgKiBleGNlcHQgdGhhdCBAY3B1IGRvZXNuJ3QgbmVlZCB0byBiZSBvbmxpbmUsIGFuZCB0aGUgdGhyZWFkIG11c3QgYmUKKyAqIHN0b3BwZWQgKGkuZS4sIGp1c3QgcmV0dXJuZWQgZnJvbSBrdGhyZWFkX2NyZWF0ZSgpKS4KKyAqCisgKiBGdW5jdGlvbiBsaXZlcyBoZXJlIGluc3RlYWQgb2Yga3RocmVhZC5jIGJlY2F1c2UgaXQgbWVzc2VzIHdpdGgKKyAqIHNjaGVkdWxlciBpbnRlcm5hbHMgd2hpY2ggcmVxdWlyZSBsb2NraW5nLgorICovCit2b2lkIGt0aHJlYWRfYmluZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCisJaWYgKCF3YWl0X3Rhc2tfaW5hY3RpdmUocCwgVEFTS19VTklOVEVSUlVQVElCTEUpKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlzZXRfdGFza19jcHUocCwgY3B1KTsKKwlwLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCXAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7CisJcC0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGt0aHJlYWRfYmluZCk7CisKICNpZmRlZiBDT05GSUdfU01QCiAvKgogICogSXMgdGhpcyB0YXNrIGxpa2VseSBjYWNoZS1ob3Q6CkBAIC0yMDA3LDcgKzIwMzcsNyBAQAogCS8qCiAJICogQnVkZHkgY2FuZGlkYXRlcyBhcmUgY2FjaGUgaG90OgogCSAqLwotCWlmIChzY2hlZF9mZWF0KENBQ0hFX0hPVF9CVUREWSkgJiYKKwlpZiAoc2NoZWRfZmVhdChDQUNIRV9IT1RfQlVERFkpICYmIHRoaXNfcnEoKS0+bnJfcnVubmluZyAmJgogCQkJKCZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bmV4dCB8fAogCQkJICZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bGFzdCkpCiAJCXJldHVybiAxOwpAQCAtMjMxMSw3ICsyMzQxLDcgQEAKIHsKIAlpbnQgY3B1LCBvcmlnX2NwdSwgdGhpc19jcHUsIHN1Y2Nlc3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJxICpycTsKKwlzdHJ1Y3QgcnEgKnJxLCAqb3JpZ19ycTsKIAogCWlmICghc2NoZWRfZmVhdChTWU5DX1dBS0VVUFMpKQogCQl3YWtlX2ZsYWdzICY9IH5XRl9TWU5DOwpAQCAtMjMxOSw3ICsyMzQ5LDcgQEAKIAl0aGlzX2NwdSA9IGdldF9jcHUoKTsKIAogCXNtcF93bWIoKTsKLQlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCXJxID0gb3JpZ19ycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJaWYgKCEocC0+c3RhdGUgJiBzdGF0ZSkpCiAJCWdvdG8gb3V0OwpAQCAtMjM1MCw2ICsyMzgwLDEwIEBACiAJCXNldF90YXNrX2NwdShwLCBjcHUpOwogCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKworCWlmIChycSAhPSBvcmlnX3JxKQorCQl1cGRhdGVfcnFfY2xvY2socnEpOworCiAJV0FSTl9PTihwLT5zdGF0ZSAhPSBUQVNLX1dBS0lORyk7CiAJY3B1ID0gdGFza19jcHUocCk7CiAKQEAgLTI1MTUsMjIgKzI1NDksMTcgQEAKIAlfX3NjaGVkX2ZvcmsocCk7CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB3ZSBkbyBub3QgbGVhayBQSSBib29zdGluZyBwcmlvcml0eSB0byB0aGUgY2hpbGQuCi0JICovCi0JcC0+cHJpbyA9IGN1cnJlbnQtPm5vcm1hbF9wcmlvOwotCi0JLyoKIAkgKiBSZXZlcnQgdG8gZGVmYXVsdCBwcmlvcml0eS9wb2xpY3kgb24gZm9yayBpZiByZXF1ZXN0ZWQuCiAJICovCiAJaWYgKHVubGlrZWx5KHAtPnNjaGVkX3Jlc2V0X29uX2ZvcmspKSB7Ci0JCWlmIChwLT5wb2xpY3kgPT0gU0NIRURfRklGTyB8fCBwLT5wb2xpY3kgPT0gU0NIRURfUlIpCisJCWlmIChwLT5wb2xpY3kgPT0gU0NIRURfRklGTyB8fCBwLT5wb2xpY3kgPT0gU0NIRURfUlIpIHsKIAkJCXAtPnBvbGljeSA9IFNDSEVEX05PUk1BTDsKLQotCQlpZiAocC0+bm9ybWFsX3ByaW8gPCBERUZBVUxUX1BSSU8pCi0JCQlwLT5wcmlvID0gREVGQVVMVF9QUklPOworCQkJcC0+bm9ybWFsX3ByaW8gPSBwLT5zdGF0aWNfcHJpbzsKKwkJfQogCiAJCWlmIChQUklPX1RPX05JQ0UocC0+c3RhdGljX3ByaW8pIDwgMCkgewogCQkJcC0+c3RhdGljX3ByaW8gPSBOSUNFX1RPX1BSSU8oMCk7CisJCQlwLT5ub3JtYWxfcHJpbyA9IHAtPnN0YXRpY19wcmlvOwogCQkJc2V0X2xvYWRfd2VpZ2h0KHApOwogCQl9CiAKQEAgLTI1NDEsNiArMjU3MCwxMSBAQAogCQlwLT5zY2hlZF9yZXNldF9vbl9mb3JrID0gMDsKIAl9CiAKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBkbyBub3QgbGVhayBQSSBib29zdGluZyBwcmlvcml0eSB0byB0aGUgY2hpbGQuCisJICovCisJcC0+cHJpbyA9IGN1cnJlbnQtPm5vcm1hbF9wcmlvOworCiAJaWYgKCFydF9wcmlvKHAtPnByaW8pKQogCQlwLT5zY2hlZF9jbGFzcyA9ICZmYWlyX3NjaGVkX2NsYXNzOwogCkBAIC0yNTgxLDggKzI2MTUsNiBAQAogCUJVR19PTihwLT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAKLQlwLT5wcmlvID0gZWZmZWN0aXZlX3ByaW8ocCk7Ci0KIAlpZiAoIXAtPnNjaGVkX2NsYXNzLT50YXNrX25ldyB8fCAhY3VycmVudC0+c2Uub25fcnEpIHsKIAkJYWN0aXZhdGVfdGFzayhycSwgcCwgMCk7CiAJfSBlbHNlIHsKQEAgLTM2NTgsNiArMzY5MCw3IEBACiAKIC8qKgogICogdXBkYXRlX3NnX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KICAqIEBncm91cDogc2NoZWRfZ3JvdXAgd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KICAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KICAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQpAQCAtNjcyMCw5ICs2NzUzLDYgQEAKIC8qCiAgKiBUaGlzIHRhc2sgaXMgYWJvdXQgdG8gZ28gdG8gc2xlZXAgb24gSU8uIEluY3JlbWVudCBycS0+bnJfaW93YWl0IHNvCiAgKiB0aGF0IHByb2Nlc3MgYWNjb3VudGluZyBrbm93cyB0aGF0IHRoaXMgaXMgYSB0YXNrIGluIElPIHdhaXQgc3RhdGUuCi0gKgotICogQnV0IGRvbid0IGRvIHRoYXQgaWYgaXQgaXMgYSBkZWxpYmVyYXRlLCB0aHJvdHRsaW5nIElPIHdhaXQgKHRoaXMgdGFzawotICogaGFzIHNldCBpdHMgYmFja2luZ19kZXZfaW5mbzogdGhlIHF1ZXVlIGFnYWluc3Qgd2hpY2ggaXQgc2hvdWxkIHRocm90dGxlKQogICovCiB2b2lkIF9fc2NoZWQgaW9fc2NoZWR1bGUodm9pZCkKIHsKQEAgLTk0MDYsNiArOTQzNiwxMCBAQAogI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX0dST1VQX1NDSEVEICovCiAKKyNpZiBkZWZpbmVkIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICYmIGRlZmluZWQgQ09ORklHX1NNUAorCXVwZGF0ZV9zaGFyZXNfZGF0YSA9IF9fYWxsb2NfcGVyY3B1KG5yX2NwdV9pZHMgKiBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCSAgICBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nKSk7CisjZW5kaWYKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlzdHJ1Y3QgcnEgKnJxOwogCkBAIC05NTMxLDEzICs5NTY1LDEzIEBACiAJY3VycmVudC0+c2NoZWRfY2xhc3MgPSAmZmFpcl9zY2hlZF9jbGFzczsKIAogCS8qIEFsbG9jYXRlIHRoZSBub2h6X2NwdV9tYXNrIGlmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLICovCi0JYWxsb2NfY3B1bWFza192YXIoJm5vaHpfY3B1X21hc2ssIEdGUF9OT1dBSVQpOworCXphbGxvY19jcHVtYXNrX3Zhcigmbm9oel9jcHVfbWFzaywgR0ZQX05PV0FJVCk7CiAjaWZkZWYgQ09ORklHX1NNUAogI2lmZGVmIENPTkZJR19OT19IWgotCWFsbG9jX2NwdW1hc2tfdmFyKCZub2h6LmNwdV9tYXNrLCBHRlBfTk9XQUlUKTsKKwl6YWxsb2NfY3B1bWFza192YXIoJm5vaHouY3B1X21hc2ssIEdGUF9OT1dBSVQpOwogCWFsbG9jX2NwdW1hc2tfdmFyKCZub2h6LmlsYl9ncnBfbm9oel9tYXNrLCBHRlBfTk9XQUlUKTsKICNlbmRpZgotCWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVfaXNvbGF0ZWRfbWFwLCBHRlBfTk9XQUlUKTsKKwl6YWxsb2NfY3B1bWFza192YXIoJmNwdV9pc29sYXRlZF9tYXAsIEdGUF9OT1dBSVQpOwogI2VuZGlmIC8qIFNNUCAqLwogCiAJcGVyZl9ldmVudF9pbml0KCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY2xvY2suYyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCmluZGV4IGFjMmUxZGMuLjQ3OWNlNTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jbG9jay5jCisrKyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAljbG9jayA9IHdyYXBfbWF4KGNsb2NrLCBtaW5fY2xvY2spOwogCWNsb2NrID0gd3JhcF9taW4oY2xvY2ssIG1heF9jbG9jayk7CiAKLQlpZiAoY21weGNoZygmc2NkLT5jbG9jaywgb2xkX2Nsb2NrLCBjbG9jaykgIT0gb2xkX2Nsb2NrKQorCWlmIChjbXB4Y2hnNjQoJnNjZC0+Y2xvY2ssIG9sZF9jbG9jaywgY2xvY2spICE9IG9sZF9jbG9jaykKIAkJZ290byBhZ2FpbjsKIAogCXJldHVybiBjbG9jazsKQEAgLTE2Myw3ICsxNjMsNyBAQAogCQl2YWwgPSByZW1vdGVfY2xvY2s7CiAJfQogCi0JaWYgKGNtcHhjaGcocHRyLCBvbGRfdmFsLCB2YWwpICE9IG9sZF92YWwpCisJaWYgKGNtcHhjaGc2NChwdHIsIG9sZF92YWwsIHZhbCkgIT0gb2xkX3ZhbCkKIAkJZ290byBhZ2FpbjsKIAogCXJldHVybiB2YWw7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCA0ZTc3N2I0Li4zNzA4N2E3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTgyMiw2ICs4MjIsMjYgQEAKIAkJICogcmUtZWxlY3RlZCBkdWUgdG8gYnVkZHkgZmF2b3Vycy4KIAkJICovCiAJCWNsZWFyX2J1ZGRpZXMoY2ZzX3JxLCBjdXJyKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogRW5zdXJlIHRoYXQgYSB0YXNrIHRoYXQgbWlzc2VkIHdha2V1cCBwcmVlbXB0aW9uIGJ5IGEKKwkgKiBuYXJyb3cgbWFyZ2luIGRvZXNuJ3QgaGF2ZSB0byB3YWl0IGZvciBhIGZ1bGwgc2xpY2UuCisJICogVGhpcyBhbHNvIG1pdGlnYXRlcyBidWRkeSBpbmR1Y2VkIGxhdGVuY2llcyB1bmRlciBsb2FkLgorCSAqLworCWlmICghc2NoZWRfZmVhdChXQUtFVVBfUFJFRU1QVCkpCisJCXJldHVybjsKKworCWlmIChkZWx0YV9leGVjIDwgc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eSkKKwkJcmV0dXJuOworCisJaWYgKGNmc19ycS0+bnJfcnVubmluZyA+IDEpIHsKKwkJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSBfX3BpY2tfbmV4dF9lbnRpdHkoY2ZzX3JxKTsKKwkJczY0IGRlbHRhID0gY3Vyci0+dnJ1bnRpbWUgLSBzZS0+dnJ1bnRpbWU7CisKKwkJaWYgKGRlbHRhID4gaWRlYWxfcnVudGltZSkKKwkJCXJlc2NoZWRfdGFzayhycV9vZihjZnNfcnEpLT5jdXJyKTsKIAl9CiB9CiAKQEAgLTg2MSwxMiArODgxLDE4IEBACiBzdGF0aWMgc3RydWN0IHNjaGVkX2VudGl0eSAqcGlja19uZXh0X2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiB7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSBfX3BpY2tfbmV4dF9lbnRpdHkoY2ZzX3JxKTsKKwlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpsZWZ0ID0gc2U7CiAKLQlpZiAoY2ZzX3JxLT5uZXh0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPm5leHQsIHNlKSA8IDEpCi0JCXJldHVybiBjZnNfcnEtPm5leHQ7CisJaWYgKGNmc19ycS0+bmV4dCAmJiB3YWtldXBfcHJlZW1wdF9lbnRpdHkoY2ZzX3JxLT5uZXh0LCBsZWZ0KSA8IDEpCisJCXNlID0gY2ZzX3JxLT5uZXh0OwogCi0JaWYgKGNmc19ycS0+bGFzdCAmJiB3YWtldXBfcHJlZW1wdF9lbnRpdHkoY2ZzX3JxLT5sYXN0LCBzZSkgPCAxKQotCQlyZXR1cm4gY2ZzX3JxLT5sYXN0OworCS8qCisJICogUHJlZmVyIGxhc3QgYnVkZHksIHRyeSB0byByZXR1cm4gdGhlIENQVSB0byBhIHByZWVtcHRlZCB0YXNrLgorCSAqLworCWlmIChjZnNfcnEtPmxhc3QgJiYgd2FrZXVwX3ByZWVtcHRfZW50aXR5KGNmc19ycS0+bGFzdCwgbGVmdCkgPCAxKQorCQlzZSA9IGNmc19ycS0+bGFzdDsKKworCWNsZWFyX2J1ZGRpZXMoY2ZzX3JxLCBzZSk7CiAKIAlyZXR1cm4gc2U7CiB9CkBAIC0xNTY4LDYgKzE1OTQsNyBAQAogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJmN1cnItPnNlLCAqcHNlID0gJnAtPnNlOwogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHRhc2tfY2ZzX3JxKGN1cnIpOwogCWludCBzeW5jID0gd2FrZV9mbGFncyAmIFdGX1NZTkM7CisJaW50IHNjYWxlID0gY2ZzX3JxLT5ucl9ydW5uaW5nID49IHNjaGVkX25yX2xhdGVuY3k7CiAKIAl1cGRhdGVfY3VycihjZnNfcnEpOwogCkBAIC0xNTgyLDE4ICsxNjA5LDcgQEAKIAlpZiAodW5saWtlbHkoc2UgPT0gcHNlKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBPbmx5IHNldCB0aGUgYmFja3dhcmQgYnVkZHkgd2hlbiB0aGUgY3VycmVudCB0YXNrIGlzIHN0aWxsIG9uIHRoZQotCSAqIHJxLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHdha2V1cCBnZXRzIGludGVybGVhdmVkIHdpdGggc2NoZWR1bGUgb24KLQkgKiB0aGUgLT5wcmVfc2NoZWR1bGUoKSBvciBpZGxlX2JhbGFuY2UoKSBwb2ludCwgZWl0aGVyIG9mIHdoaWNoIGNhbgotCSAqIGRyb3AgdGhlIHJxIGxvY2suCi0JICoKLQkgKiBBbHNvLCBkdXJpbmcgZWFybHkgYm9vdCB0aGUgaWRsZSB0aHJlYWQgaXMgaW4gdGhlIGZhaXIgY2xhc3MsIGZvcgotCSAqIG9idmlvdXMgcmVhc29ucyBpdHMgYSBiYWQgaWRlYSB0byBzY2hlZHVsZSBiYWNrIHRvIHRoZSBpZGxlIHRocmVhZC4KLQkgKi8KLQlpZiAoc2NoZWRfZmVhdChMQVNUX0JVRERZKSAmJiBsaWtlbHkoc2UtPm9uX3JxICYmIGN1cnIgIT0gcnEtPmlkbGUpKQotCQlzZXRfbGFzdF9idWRkeShzZSk7Ci0JaWYgKHNjaGVkX2ZlYXQoTkVYVF9CVUREWSkgJiYgISh3YWtlX2ZsYWdzICYgV0ZfRk9SSykpCisJaWYgKHNjaGVkX2ZlYXQoTkVYVF9CVUREWSkgJiYgc2NhbGUgJiYgISh3YWtlX2ZsYWdzICYgV0ZfRk9SSykpCiAJCXNldF9uZXh0X2J1ZGR5KHBzZSk7CiAKIAkvKgpAQCAtMTYzOSw4ICsxNjU1LDIyIEBACiAKIAlCVUdfT04oIXBzZSk7CiAKLQlpZiAod2FrZXVwX3ByZWVtcHRfZW50aXR5KHNlLCBwc2UpID09IDEpCisJaWYgKHdha2V1cF9wcmVlbXB0X2VudGl0eShzZSwgcHNlKSA9PSAxKSB7CiAJCXJlc2NoZWRfdGFzayhjdXJyKTsKKwkJLyoKKwkJICogT25seSBzZXQgdGhlIGJhY2t3YXJkIGJ1ZGR5IHdoZW4gdGhlIGN1cnJlbnQgdGFzayBpcyBzdGlsbAorCQkgKiBvbiB0aGUgcnEuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgd2FrZXVwIGdldHMgaW50ZXJsZWF2ZWQKKwkJICogd2l0aCBzY2hlZHVsZSBvbiB0aGUgLT5wcmVfc2NoZWR1bGUoKSBvciBpZGxlX2JhbGFuY2UoKQorCQkgKiBwb2ludCwgZWl0aGVyIG9mIHdoaWNoIGNhbiAqIGRyb3AgdGhlIHJxIGxvY2suCisJCSAqCisJCSAqIEFsc28sIGR1cmluZyBlYXJseSBib290IHRoZSBpZGxlIHRocmVhZCBpcyBpbiB0aGUgZmFpciBjbGFzcywKKwkJICogZm9yIG9idmlvdXMgcmVhc29ucyBpdHMgYSBiYWQgaWRlYSB0byBzY2hlZHVsZSBiYWNrIHRvIGl0LgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KCFzZS0+b25fcnEgfHwgY3VyciA9PSBycS0+aWRsZSkpCisJCQlyZXR1cm47CisJCWlmIChzY2hlZF9mZWF0KExBU1RfQlVERFkpICYmIHNjYWxlICYmIGVudGl0eV9pc190YXNrKHNlKSkKKwkJCXNldF9sYXN0X2J1ZGR5KHNlKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF90YXNrX2ZhaXIoc3RydWN0IHJxICpycSkKQEAgLTE2NTQsMTYgKzE2ODQsNiBAQAogCiAJZG8gewogCQlzZSA9IHBpY2tfbmV4dF9lbnRpdHkoY2ZzX3JxKTsKLQkJLyoKLQkJICogSWYgc2Ugd2FzIGEgYnVkZHksIGNsZWFyIGl0IHNvIHRoYXQgaXQgd2lsbCBoYXZlIHRvIGVhcm4KLQkJICogdGhlIGZhdm91ciBhZ2Fpbi4KLQkJICoKLQkJICogSWYgc2Ugd2FzIG5vdCBhIGJ1ZGR5LCBjbGVhciB0aGUgYnVkZGllcyBiZWNhdXNlIG5laXRoZXIKLQkJICogd2FzIGVsZWdpYmxlIHRvIHJ1biwgbGV0IHRoZW0gZWFybiBpdCBhZ2Fpbi4KLQkJICoKLQkJICogSU9XLiB1bmNvbmRpdGlvbmFsbHkgY2xlYXIgYnVkZGllcy4KLQkJICovCi0JCV9fY2xlYXJfYnVkZGllcyhjZnNfcnEsIE5VTEwpOwogCQlzZXRfbmV4dF9lbnRpdHkoY2ZzX3JxLCBzZSk7CiAJCWNmc19ycSA9IGdyb3VwX2Nmc19ycShzZSk7CiAJfSB3aGlsZSAoY2ZzX3JxKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAyNTU0NzVkLi5jZTE3NzYwIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0xMTEwLDYgKzExMTAsOCBAQAogCWVyciA9IHNlc3Npb247CiBvdXQ6CiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisJaWYgKGVyciA+IDApCisJCXByb2Nfc2lkX2Nvbm5lY3Rvcihncm91cF9sZWFkZXIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE1NDYsMjQgKzE1NDgsMzcgQEAKIAkJCWlmIChhcmc0IHwgYXJnNSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXN3aXRjaCAoYXJnMikgewotCQkJY2FzZSAwOgorCQkJY2FzZSBQUl9NQ0VfS0lMTF9DTEVBUjoKIAkJCQlpZiAoYXJnMyAhPSAwKQogCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQljdXJyZW50LT5mbGFncyAmPSB+UEZfTUNFX1BST0NFU1M7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIDE6CisJCQljYXNlIFBSX01DRV9LSUxMX1NFVDoKIAkJCQljdXJyZW50LT5mbGFncyB8PSBQRl9NQ0VfUFJPQ0VTUzsKLQkJCQlpZiAoYXJnMyAhPSAwKQorCQkJCWlmIChhcmczID09IFBSX01DRV9LSUxMX0VBUkxZKQogCQkJCQljdXJyZW50LT5mbGFncyB8PSBQRl9NQ0VfRUFSTFk7Ci0JCQkJZWxzZQorCQkJCWVsc2UgaWYgKGFyZzMgPT0gUFJfTUNFX0tJTExfTEFURSkKIAkJCQkJY3VycmVudC0+ZmxhZ3MgJj0gflBGX01DRV9FQVJMWTsKKwkJCQllbHNlIGlmIChhcmczID09IFBSX01DRV9LSUxMX0RFRkFVTFQpCisJCQkJCWN1cnJlbnQtPmZsYWdzICY9CisJCQkJCQl+KFBGX01DRV9FQVJMWXxQRl9NQ0VfUFJPQ0VTUyk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQllcnJvciA9IDA7CiAJCQlicmVhazsKLQorCQljYXNlIFBSX01DRV9LSUxMX0dFVDoKKwkJCWlmIChhcmcyIHwgYXJnMyB8IGFyZzQgfCBhcmc1KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfTUNFX1BST0NFU1MpCisJCQkJZXJyb3IgPSAoY3VycmVudC0+ZmxhZ3MgJiBQRl9NQ0VfRUFSTFkpID8KKwkJCQkJUFJfTUNFX0tJTExfRUFSTFkgOiBQUl9NQ0VfS0lMTF9MQVRFOworCQkJZWxzZQorCQkJCWVycm9yID0gUFJfTUNFX0tJTExfREVGQVVMVDsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMgYi9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKaW5kZXggYjM4NDIzYy4uYjZlN2FhZWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYworKysgYi9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKQEAgLTE1MjEsNyArMTUyMSw3IEBACiAJCQlpZiAoIXRhYmxlLT5jdGxfbmFtZSAmJiB0YWJsZS0+c3RyYXRlZ3kpCiAJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiU3RyYXRlZ3kgd2l0aG91dCBjdGxfbmFtZSIpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKIAkJCWlmICh0YWJsZS0+cHJvY25hbWUgJiYgIXRhYmxlLT5wcm9jX2hhbmRsZXIpCiAJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiTm8gcHJvY19oYW5kbGVyIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IDA5MTEzMzQuLjVlMThjNmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtMzk0LDE1ICszOTQsMTEgQEAKIHsKIAlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzOwogCi0JbXV0ZXhfbG9jaygmY2xvY2tzb3VyY2VfbXV0ZXgpOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcywgJmNsb2Nrc291cmNlX2xpc3QsIGxpc3QpCiAJCWlmIChjcy0+cmVzdW1lKQogCQkJY3MtPnJlc3VtZSgpOwogCiAJY2xvY2tzb3VyY2VfcmVzdW1lX3dhdGNoZG9nKCk7Ci0KLQltdXRleF91bmxvY2soJmNsb2Nrc291cmNlX211dGV4KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKaW5kZXggZTBmNTlhMi4uODlhZWQ1OSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtMjMxLDYgKzIzMSwxMyBAQAogCWlmICghaW5pZGxlICYmICF0cy0+aW5pZGxlKQogCQlnb3RvIGVuZDsKIAorCS8qCisJICogU2V0IHRzLT5pbmlkbGUgdW5jb25kaXRpb25hbGx5LiBFdmVuIGlmIHRoZSBzeXN0ZW0gZGlkIG5vdAorCSAqIHN3aXRjaCB0byBOT0haIG1vZGUgdGhlIGNwdSBmcmVxdWVuY3kgZ292ZXJuZXJzIHJlbHkgb24gdGhlCisJICogdXBkYXRlIG9mIHRoZSBpZGxlIHRpbWUgYWNjb3VudGluZyBpbiB0aWNrX25vaHpfc3RhcnRfaWRsZSgpLgorCSAqLworCXRzLT5pbmlkbGUgPSAxOworCiAJbm93ID0gdGlja19ub2h6X3N0YXJ0X2lkbGUodHMpOwogCiAJLyoKQEAgLTI0OCw4ICsyNTUsNiBAQAogCWlmICh1bmxpa2VseSh0cy0+bm9oel9tb2RlID09IE5PSFpfTU9ERV9JTkFDVElWRSkpCiAJCWdvdG8gZW5kOwogCi0JdHMtPmluaWRsZSA9IDE7Ci0KIAlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCWdvdG8gZW5kOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwppbmRleCBmYjBmNDZmLi5jM2E0ZTI5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCmluZGV4IGZkZGQ2OWQuLjFiNWI3YWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB0aW1lcl9saXN0X3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0aW1lcl9saXN0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0aW1lcl9saXN0X2ZvcHMgPSB7CiAJLm9wZW4JCT0gdGltZXJfbGlzdF9vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYyBiL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKaW5kZXggNGNkZThiOS4uZWU1NjgxZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jCkBAIC0zOTUsNyArMzk1LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgdHN0YXRzX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0c3RhdHNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRzdGF0c19mb3BzID0gewogCS5vcGVuCQk9IHRzdGF0c19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS53cml0ZQkJPSB0c3RhdHNfd3JpdGUsCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDNlYjE1OWMuLmQ5ZDYyMDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC04NTYsNiArODU2LDM3IEBACiB9CiAKIC8qKgorICogYmxrX2FkZF90cmFjZV9ycV9yZW1hcCAtIEFkZCBhIHRyYWNlIGZvciBhIHJlcXVlc3QtcmVtYXAgb3BlcmF0aW9uCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBycToJCXRoZSBzb3VyY2UgcmVxdWVzdAorICogQGRldjoJdGFyZ2V0IGRldmljZQorICogQGZyb206CXNvdXJjZSBzZWN0b3IKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBEZXZpY2UgbWFwcGVyIHJlbWFwcyByZXF1ZXN0IHRvIG90aGVyIGRldmljZXMuCisgKiAgICAgQWRkIGEgdHJhY2UgZm9yIHRoYXQgYWN0aW9uLgorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfcmVtYXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICAgc3RydWN0IHJlcXVlc3QgKnJxLCBkZXZfdCBkZXYsCisJCQkJICAgc2VjdG9yX3QgZnJvbSkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKwlzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHI7CisKKwlpZiAobGlrZWx5KCFidCkpCisJCXJldHVybjsKKworCXIuZGV2aWNlX2Zyb20gPSBjcHVfdG9fYmUzMihkZXYpOworCXIuZGV2aWNlX3RvICAgPSBjcHVfdG9fYmUzMihkaXNrX2RldnQocnEtPnJxX2Rpc2spKTsKKwlyLnNlY3Rvcl9mcm9tID0gY3B1X3RvX2JlNjQoZnJvbSk7CisKKwlfX2Jsa19hZGRfdHJhY2UoYnQsIGJsa19ycV9wb3MocnEpLCBibGtfcnFfYnl0ZXMocnEpLAorCQkJcnFfZGF0YV9kaXIocnEpLCBCTEtfVEFfUkVNQVAsICEhcnEtPmVycm9ycywKKwkJCXNpemVvZihyKSwgJnIpOworfQorCisvKioKICAqIGJsa19hZGRfZHJpdmVyX2RhdGEgLSBBZGQgYmluYXJ5IG1lc3NhZ2Ugd2l0aCBkcml2ZXItc3BlY2lmaWMgZGF0YQogICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCiAgKiBAcnE6CQlpbyByZXF1ZXN0CkBAIC05MjIsMTAgKzk1MywxMyBAQAogCVdBUk5fT04ocmV0KTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19yZW1hcChibGtfYWRkX3RyYWNlX3JlbWFwKTsKIAlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVtYXAoYmxrX2FkZF90cmFjZV9ycV9yZW1hcCk7CisJV0FSTl9PTihyZXQpOwogfQogCiBzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQogeworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVtYXAoYmxrX2FkZF90cmFjZV9ycV9yZW1hcCk7CiAJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19yZW1hcChibGtfYWRkX3RyYWNlX3JlbWFwKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQpOwogCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnX2lvKGJsa19hZGRfdHJhY2VfdW5wbHVnX2lvKTsKQEAgLTE2NTcsNiArMTY5MSwxMSBAQAogCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmJsa190cmFjZV9hdHRyX2dyb3VwKTsKIH0KIAordm9pZCBibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmJsa190cmFjZV9hdHRyX2dyb3VwKTsKK30KKwogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lPX1RSQUNFICovCiAKICNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IGExNDI1NzkuLjZkYzRlNWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTIyNSw3ICsyMjUsMTEgQEAKIAlpZiAoZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID09IGZ0cmFjZV9zdHViKQogCQlyZXR1cm47CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAogCWZ1bmMgPSBmdHJhY2VfdHJhY2VfZnVuY3Rpb247CisjZWxzZQorCWZ1bmMgPSBfX2Z0cmFjZV90cmFjZV9mdW5jdGlvbjsKKyNlbmRpZgogCiAJaWYgKGZ0cmFjZV9waWRfdHJhY2UpIHsKIAkJc2V0X2Z0cmFjZV9waWRfZnVuY3Rpb24oZnVuYyk7CkBAIC03MzYsNyArNzQwLDcgQEAKICBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfcHJvZmlsZV9sb2NrKTsKIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMTA3NCwxNCArMTA3OCw5IEBACiAJCWZhaWxlZCA9IF9fZnRyYWNlX3JlcGxhY2VfY29kZShyZWMsIGVuYWJsZSk7CiAJCWlmIChmYWlsZWQpIHsKIAkJCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZBSUxFRDsKLQkJCWlmICgoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKSB8fAotCQkJICAgICFjb3JlX2tlcm5lbF90ZXh0KHJlYy0+aXApKSB7Ci0JCQkJZnRyYWNlX2ZyZWVfcmVjKHJlYyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQlmdHJhY2VfYnVnKGZhaWxlZCwgcmVjLT5pcCk7Ci0JCQkJCS8qIFN0b3AgcHJvY2Vzc2luZyAqLwotCQkJCQlyZXR1cm47Ci0JCQkJfQorCQkJZnRyYWNlX2J1ZyhmYWlsZWQsIHJlYy0+aXApOworCQkJLyogU3RvcCBwcm9jZXNzaW5nICovCisJCQlyZXR1cm47CiAJCX0KIAl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKIH0KQEAgLTE2MjEsOCArMTYyMCwxMCBAQAogCQlpZiAoIXJldCkgewogCQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQkJbS0+cHJpdmF0ZSA9IGl0ZXI7Ci0JCX0gZWxzZQorCQl9IGVsc2UgeworCQkJdHJhY2VfcGFyc2VyX3B1dCgmaXRlci0+cGFyc2VyKTsKIAkJCWtmcmVlKGl0ZXIpOworCQl9CiAJfSBlbHNlCiAJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGl0ZXI7CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7CkBAIC0yMjAyLDcgKzIyMDMsNyBAQAogCXN0cnVjdCB0cmFjZV9wYXJzZXIgKnBhcnNlcjsKIAlzc2l6ZV90IHJldCwgcmVhZDsKIAotCWlmICghY250IHx8IGNudCA8IDApCisJaWYgKCFjbnQpCiAJCXJldHVybiAwOwogCiAJbXV0ZXhfbG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOwpAQCAtMjIxNiwyMCArMjIxNywyMCBAQAogCXBhcnNlciA9ICZpdGVyLT5wYXJzZXI7CiAJcmVhZCA9IHRyYWNlX2dldF91c2VyKHBhcnNlciwgdWJ1ZiwgY250LCBwcG9zKTsKIAotCWlmICh0cmFjZV9wYXJzZXJfbG9hZGVkKHBhcnNlcikgJiYKKwlpZiAocmVhZCA+PSAwICYmIHRyYWNlX3BhcnNlcl9sb2FkZWQocGFyc2VyKSAmJgogCSAgICAhdHJhY2VfcGFyc2VyX2NvbnQocGFyc2VyKSkgewogCQlyZXQgPSBmdHJhY2VfcHJvY2Vzc19yZWdleChwYXJzZXItPmJ1ZmZlciwKIAkJCQkJICAgcGFyc2VyLT5pZHgsIGVuYWJsZSk7CiAJCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAogCQl0cmFjZV9wYXJzZXJfY2xlYXIocGFyc2VyKTsKIAl9CiAKIAlyZXQgPSByZWFkOwotCitvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOwotb3V0OgorCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjU1Miw4ICsyNTUzLDcgQEAKIAkJICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB0cmFjZV9wYXJzZXIgcGFyc2VyOwotCXNpemVfdCByZWFkID0gMDsKLQlzc2l6ZV90IHJldDsKKwlzc2l6ZV90IHJlYWQsIHJldDsKIAogCWlmICghY250IHx8IGNudCA8IDApCiAJCXJldHVybiAwOwpAQCAtMjU2MiwyOSArMjU2MiwzMSBAQAogCiAJaWYgKGZ0cmFjZV9ncmFwaF9jb3VudCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKSB7CiAJCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlpZiAodHJhY2VfcGFyc2VyX2dldF9pbml0KCZwYXJzZXIsIEZUUkFDRV9CVUZGX01BWCkpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlyZWFkID0gdHJhY2VfZ2V0X3VzZXIoJnBhcnNlciwgdWJ1ZiwgY250LCBwcG9zKTsKIAotCWlmICh0cmFjZV9wYXJzZXJfbG9hZGVkKCgmcGFyc2VyKSkpIHsKKwlpZiAocmVhZCA+PSAwICYmIHRyYWNlX3BhcnNlcl9sb2FkZWQoKCZwYXJzZXIpKSkgewogCQlwYXJzZXIuYnVmZmVyW3BhcnNlci5pZHhdID0gMDsKIAogCQkvKiB3ZSBhbGxvdyBvbmx5IG9uZSBleHByZXNzaW9uIGF0IGEgdGltZSAqLwogCQlyZXQgPSBmdHJhY2Vfc2V0X2Z1bmMoZnRyYWNlX2dyYXBoX2Z1bmNzLCAmZnRyYWNlX2dyYXBoX2NvdW50LAogCQkJCQlwYXJzZXIuYnVmZmVyKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfZnJlZTsKIAl9CiAKIAlyZXQgPSByZWFkOwotIG91dDoKKworb3V0X2ZyZWU6CiAJdHJhY2VfcGFyc2VyX3B1dCgmcGFyc2VyKTsKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZncmFwaF9sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC0yNjU1LDE5ICsyNjU3LDE3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTU9EVUxFUwotdm9pZCBmdHJhY2VfcmVsZWFzZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQordm9pZCBmdHJhY2VfcmVsZWFzZV9tb2Qoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKLQl1bnNpZ25lZCBsb25nIHMgPSAodW5zaWduZWQgbG9uZylzdGFydDsKLQl1bnNpZ25lZCBsb25nIGUgPSAodW5zaWduZWQgbG9uZyllbmQ7CiAKLQlpZiAoZnRyYWNlX2Rpc2FibGVkIHx8ICFzdGFydCB8fCBzdGFydCA9PSBlbmQpCisJaWYgKGZ0cmFjZV9kaXNhYmxlZCkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewotCQlpZiAoKHJlYy0+aXAgPj0gcykgJiYgKHJlYy0+aXAgPCBlKSkgeworCQlpZiAod2l0aGluX21vZHVsZV9jb3JlKHJlYy0+aXAsIG1vZCkpIHsKIAkJCS8qCiAJCQkgKiByZWMtPmlwIGlzIGNoYW5nZWQgaW4gZnRyYWNlX2ZyZWVfcmVjKCkKIAkJCSAqIEl0IHNob3VsZCBub3QgYmV0d2VlbiBzIGFuZCBlIGlmIHJlY29yZCB3YXMgZnJlZWQuCkBAIC0yNjk5LDkgKzI2OTksNyBAQAogCQkJCSAgIG1vZC0+bnVtX2Z0cmFjZV9jYWxsc2l0ZXMpOwogCQlicmVhazsKIAljYXNlIE1PRFVMRV9TVEFURV9HT0lORzoKLQkJZnRyYWNlX3JlbGVhc2UobW9kLT5mdHJhY2VfY2FsbHNpdGVzLAotCQkJICAgICAgIG1vZC0+ZnRyYWNlX2NhbGxzaXRlcyArCi0JCQkgICAgICAgbW9kLT5udW1fZnRyYWNlX2NhbGxzaXRlcyk7CisJCWZ0cmFjZV9yZWxlYXNlX21vZChtb2QpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYwppbmRleCA4MWIxNjQ1Li5hOTFkYTY5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jCkBAIC01MDEsNyArNTAxLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKCFyZWdpc3Rlcl90cmFjZXIoJmttZW1fdHJhY2VyKSkgeworCWlmIChyZWdpc3Rlcl90cmFjZXIoJmttZW1fdHJhY2VyKSAhPSAwKSB7CiAJCXByX3dhcm5pbmcoIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciB0aGUga21lbSB0cmFjZXJcbiIpOwogCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IGQ0ZmYwMTkuLjVkZDAxN2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC00ODMsNyArNDgzLDcgQEAKIC8qIFVwIHRoaXMgaWYgeW91IHdhbnQgdG8gdGVzdCB0aGUgVElNRV9FWFRFTlRTIGFuZCBub3JtYWxpemF0aW9uICovCiAjZGVmaW5lIERFQlVHX1NISUZUIDAKIAotc3RhdGljIGlubGluZSB1NjQgcmJfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgdTY0IHJiX3RpbWVfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCiB7CiAJLyogc2hpZnQgdG8gZGVidWcvdGVzdCBub3JtYWxpemF0aW9uIGFuZCBUSU1FX0VYVEVOVFMgKi8KIAlyZXR1cm4gYnVmZmVyLT5jbG9jaygpIDw8IERFQlVHX1NISUZUOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJdTY0IHRpbWU7CiAKIAlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwotCXRpbWUgPSByYl90aW1lX3N0YW1wKGJ1ZmZlciwgY3B1KTsKKwl0aW1lID0gcmJfdGltZV9zdGFtcChidWZmZXIpOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOwogCiAJcmV0dXJuIHRpbWU7CkBAIC01OTksNyArNTk5LDcgQEAKIH0KIAogLyoKLSAqIHJiX2lzX2hlYWRfcGFnZSAtIHRlc3QgaWYgdGhlIGdpdmUgcGFnZSBpcyB0aGUgaGVhZCBwYWdlCisgKiByYl9pc19oZWFkX3BhZ2UgLSB0ZXN0IGlmIHRoZSBnaXZlbiBwYWdlIGlzIHRoZSBoZWFkIHBhZ2UKICAqCiAgKiBCZWNhdXNlIHRoZSByZWFkZXIgbWF5IG1vdmUgdGhlIGhlYWRfcGFnZSBwb2ludGVyLCB3ZSBjYW4KICAqIG5vdCB0cnVzdCB3aGF0IHRoZSBoZWFkIHBhZ2UgaXMgKGl0IG1heSBiZSBwb2ludGluZyB0bwpAQCAtMTE5Myw2ICsxMTkzLDcgQEAKIAlhdG9taWNfaW5jKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwogCXN5bmNocm9uaXplX3NjaGVkKCk7CiAKKwlzcGluX2xvY2tfaXJxKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jayk7CiAJcmJfaGVhZF9wYWdlX2RlYWN0aXZhdGUoY3B1X2J1ZmZlcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewpAQCAtMTIwNyw2ICsxMjA4LDcgQEAKIAkJcmV0dXJuOwogCiAJcmJfcmVzZXRfY3B1KGNwdV9idWZmZXIpOworCXNwaW5fdW5sb2NrX2lycSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2spOwogCiAJcmJfY2hlY2tfcGFnZXMoY3B1X2J1ZmZlcik7CiAKQEAgLTE4NjgsNyArMTg3MCw3IEBACiAJCSAqIE5lc3RlZCBjb21taXRzIGFsd2F5cyBoYXZlIHplcm8gZGVsdGFzLCBzbwogCQkgKiBqdXN0IHJlcmVhZCB0aGUgdGltZSBzdGFtcAogCQkgKi8KLQkJKnRzID0gcmJfdGltZV9zdGFtcChidWZmZXIsIGNwdV9idWZmZXItPmNwdSk7CisJCSp0cyA9IHJiX3RpbWVfc3RhbXAoYnVmZmVyKTsKIAkJbmV4dF9wYWdlLT5wYWdlLT50aW1lX3N0YW1wID0gKnRzOwogCX0KIApAQCAtMjExMSw3ICsyMTEzLDcgQEAKIAlpZiAoUkJfV0FSTl9PTihjcHVfYnVmZmVyLCArK25yX2xvb3BzID4gMTAwMCkpCiAJCWdvdG8gb3V0X2ZhaWw7CiAKLQl0cyA9IHJiX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+YnVmZmVyLCBjcHVfYnVmZmVyLT5jcHUpOworCXRzID0gcmJfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5idWZmZXIpOwogCiAJLyoKIAkgKiBPbmx5IHRoZSBmaXJzdCBjb21taXQgY2FuIHVwZGF0ZSB0aGUgdGltZXN0YW1wLgpAQCAtMjY4MSw3ICsyNjgzLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VudHJpZXMpOwogCiAvKioKLSAqIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1IC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYnVmZmVyCisgKiByaW5nX2J1ZmZlcl9vdmVycnVucyAtIGdldCB0aGUgbnVtYmVyIG9mIG92ZXJydW5zIGluIGJ1ZmZlcgogICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyCiAgKgogICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIG92ZXJydW5zIGluIHRoZSByaW5nIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwppbmRleCA0MTFhZjM3Li5iMjBkM2VjIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwpAQCAtNDE1LDcgKzQxNSw3IEBACiAKIAkvKiByZWFkIHRoZSBub24tc3BhY2UgaW5wdXQgKi8KIAl3aGlsZSAoY250ICYmICFpc3NwYWNlKGNoKSkgewotCQlpZiAocGFyc2VyLT5pZHggPCBwYXJzZXItPnNpemUpCisJCWlmIChwYXJzZXItPmlkeCA8IHBhcnNlci0+c2l6ZSAtIDEpCiAJCQlwYXJzZXItPmJ1ZmZlcltwYXJzZXItPmlkeCsrXSA9IGNoOwogCQllbHNlIHsKIAkJCXJldCA9IC1FSU5WQUw7CkBAIC0xMzkzLDcgKzEzOTMsNyBAQAogCiBpbnQgdHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKLQlyZXR1cm4gdHJhY2VfYXJyYXlfcHJpbnRrKCZnbG9iYWxfdHJhY2UsIGlwLCBmbXQsIGFyZ3MpOworCXJldHVybiB0cmFjZV9hcnJheV92cHJpbnRrKCZnbG9iYWxfdHJhY2UsIGlwLCBmbXQsIGFyZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfdnByaW50ayk7CiAKQEAgLTI0NDAsNyArMjQ0MCw3IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMjU4Miw3ICsyNTgyLDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMjc2NCw3ICsyNzY0LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZmlscC0+Zl9wb3MgKz0gcmV0OworCSpwcG9zICs9IHJldDsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zMjk5LDcgKzMyOTksNyBAQAogCQl9CiAJfQogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCS8qIElmIGNoZWNrIHBhZ2VzIGZhaWxlZCwgcmV0dXJuIEVOT01FTSAqLwogCWlmICh0cmFjaW5nX2Rpc2FibGVkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCmluZGV4IDdhN2E5ZmQuLjRhMTk0ZjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKQEAgLTM0LDYgKzM0LDcgQEAKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gYnJhbmNoX3RyYWNlcjsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB0cmFjZV9icmFuY2ggKmVudHJ5OworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNwdSwgcGM7CiAJY29uc3QgY2hhciAqcDsKQEAgLTU0LDcgKzU1LDggQEAKIAkJZ290byBvdXQ7CiAKIAlwYyA9IHByZWVtcHRfY291bnQoKTsKLQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0JSQU5DSCwKKwlidWZmZXIgPSB0ci0+YnVmZmVyOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JSQU5DSCwKIAkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dDsKQEAgLTc0LDggKzc2LDggQEAKIAllbnRyeS0+bGluZSA9IGYtPmxpbmU7CiAJZW50cnktPmNvcnJlY3QgPSB2YWwgPT0gZXhwZWN0OwogCi0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgdHItPmJ1ZmZlciwgZXZlbnQpKQotCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKKwlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkKKwkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50KTsKIAogIG91dDoKIAlhdG9taWNfZGVjKCZ0ci0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYwppbmRleCBkZDQ0Yjg3Li44ZDVjMTcxIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJmV2ZW50LT5wcm9maWxlX2NvdW50KSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIXRvdGFsX3Byb2ZpbGVfY291bnQrKykgeworCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCkgewogCQlidWYgPSAoY2hhciAqKWFsbG9jX3BlcmNwdShwcm9maWxlX2J1Zl90KTsKIAkJaWYgKCFidWYpCiAJCQlnb3RvIGZhaWxfYnVmOwpAQCAtNDYsMTQgKzQ2LDE5IEBACiAJfQogCiAJcmV0ID0gZXZlbnQtPnByb2ZpbGVfZW5hYmxlKCk7Ci0JaWYgKCFyZXQpCisJaWYgKCFyZXQpIHsKKwkJdG90YWxfcHJvZmlsZV9jb3VudCsrOwogCQlyZXR1cm4gMDsKKwl9CiAKLQlrZnJlZSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOwogZmFpbF9idWZfbm1pOgotCWtmcmVlKHRyYWNlX3Byb2ZpbGVfYnVmKTsKKwlpZiAoIXRvdGFsX3Byb2ZpbGVfY291bnQpIHsKKwkJZnJlZV9wZXJjcHUodHJhY2VfcHJvZmlsZV9idWZfbm1pKTsKKwkJZnJlZV9wZXJjcHUodHJhY2VfcHJvZmlsZV9idWYpOworCQl0cmFjZV9wcm9maWxlX2J1Zl9ubWkgPSBOVUxMOworCQl0cmFjZV9wcm9maWxlX2J1ZiA9IE5VTEw7CisJfQogZmFpbF9idWY6Ci0JdG90YWxfcHJvZmlsZV9jb3VudC0tOwogCWF0b21pY19kZWMoJmV2ZW50LT5wcm9maWxlX2NvdW50KTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKaW5kZXggNmYwM2M4YS4uZDEyOGY2NSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtMjMyLDEwICsyMzIsOSBAQAogCQkgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHRyYWNlX3BhcnNlciBwYXJzZXI7Ci0Jc2l6ZV90IHJlYWQgPSAwOwotCXNzaXplX3QgcmV0OworCXNzaXplX3QgcmVhZCwgcmV0OwogCi0JaWYgKCFjbnQgfHwgY250IDwgMCkKKwlpZiAoIWNudCkKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSB0cmFjaW5nX3VwZGF0ZV9idWZmZXJzKCk7CkBAIC0yNDcsNyArMjQ2LDcgQEAKIAogCXJlYWQgPSB0cmFjZV9nZXRfdXNlcigmcGFyc2VyLCB1YnVmLCBjbnQsIHBwb3MpOwogCi0JaWYgKHRyYWNlX3BhcnNlcl9sb2FkZWQoKCZwYXJzZXIpKSkgeworCWlmIChyZWFkID49IDAgJiYgdHJhY2VfcGFyc2VyX2xvYWRlZCgoJnBhcnNlcikpKSB7CiAJCWludCBzZXQgPSAxOwogCiAJCWlmICgqcGFyc2VyLmJ1ZmZlciA9PSAnIScpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwppbmRleCAyMzI0NTc4Li45OGE2Y2M1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKQEAgLTkzMyw4ICs5MzMsOSBAQAogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZwcy0+cG9zdGZpeCkpIHsKIAkJZWx0ID0gbGlzdF9maXJzdF9lbnRyeSgmcHMtPnBvc3RmaXgsIHN0cnVjdCBwb3N0Zml4X2VsdCwgbGlzdCk7Ci0JCWtmcmVlKGVsdC0+b3BlcmFuZCk7CiAJCWxpc3RfZGVsKCZlbHQtPmxpc3QpOworCQlrZnJlZShlbHQtPm9wZXJhbmQpOworCQlrZnJlZShlbHQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaHdfYnJhbmNoZXMuYwppbmRleCAyM2I2Mzg1Li42OTU0M2E5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfaHdfYnJhbmNoZXMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaHdfYnJhbmNoZXMuYwpAQCAtMTY1LDYgKzE2NSw3IEBACiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2h3X2JyYW5jaDsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gaHdfYnJhbmNoX3RyYWNlOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWY7CiAJc3RydWN0IGh3X2JyYW5jaF9lbnRyeSAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBpcnExOwogCWludCBjcHU7CkBAIC0xODAsNyArMTgxLDggQEAKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKSAhPSAxKQogCQlnb3RvIG91dDsKIAotCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfSFdfQlJBTkNIRVMsCisJYnVmID0gdHItPmJ1ZmZlcjsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmLCBUUkFDRV9IV19CUkFOQ0hFUywKIAkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgMCk7CiAJaWYgKCFldmVudCkKIAkJZ290byBvdXQ7CkBAIC0xODksOCArMTkxLDggQEAKIAllbnRyeS0+ZW50LnR5cGUgPSBUUkFDRV9IV19CUkFOQ0hFUzsKIAllbnRyeS0+ZnJvbSA9IGZyb207CiAJZW50cnktPnRvICAgPSB0bzsKLQlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCB0ci0+YnVmZmVyLCBldmVudCkpCi0JCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgMCk7CisJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmLCBldmVudCkpCisJCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZiwgZXZlbnQsIDAsIDApOwogCiAgb3V0OgogCWF0b21pY19kZWMoJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwppbmRleCBmNTcyZjQ0Li5iNmMxMmM2IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCkBAIC02OSw2ICs2OSw5IEBACiAgKiBAczogdHJhY2Ugc2VxdWVuY2UgZGVzY3JpcHRvcgogICogQGZtdDogcHJpbnRmIGZvcm1hdCBzdHJpbmcKICAqCisgKiBJdCByZXR1cm5zIDAgaWYgdGhlIHRyYWNlIG92ZXJzaXplcyB0aGUgYnVmZmVyJ3MgZnJlZQorICogc3BhY2UsIDEgb3RoZXJ3aXNlLgorICoKICAqIFRoZSB0cmFjZXIgbWF5IHVzZSBlaXRoZXIgc2VxdWVuY2Ugb3BlcmF0aW9ucyBvciBpdHMgb3duCiAgKiBjb3B5IHRvIHVzZXIgcm91dGluZXMuIFRvIHNpbXBsaWZ5IGZvcm1hdGluZyBvZiBhIHRyYWNlCiAgKiB0cmFjZV9zZXFfcHJpbnRmIGlzIHVzZWQgdG8gc3RvcmUgc3RyaW5ncyBpbnRvIGEgc3BlY2lhbApAQCAtOTUsNyArOTgsNyBAQAogCiAJcy0+bGVuICs9IHJldDsKIAotCXJldHVybiBsZW47CisJcmV0dXJuIDE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9zZXFfcHJpbnRmKTsKIApAQCAtNDg2LDE2ICs0ODksMTggQEAKIAkJCQloYXJkaXJxID8gJ2gnIDogc29mdGlycSA/ICdzJyA6ICcuJykpCiAJCXJldHVybiAwOwogCi0JaWYgKGVudHJ5LT5sb2NrX2RlcHRoIDwgMCkKLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJy4nKTsKKwlpZiAoZW50cnktPnByZWVtcHRfY291bnQpCisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiV4IiwgZW50cnktPnByZWVtcHRfY291bnQpOwogCWVsc2UKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWQiLCBlbnRyeS0+bG9ja19kZXB0aCk7CisJCXJldCA9IHRyYWNlX3NlcV9wdXRjKHMsICcuJyk7CisKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoZW50cnktPnByZWVtcHRfY291bnQpCi0JCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIleCIsIGVudHJ5LT5wcmVlbXB0X2NvdW50KTsKLQlyZXR1cm4gdHJhY2Vfc2VxX3B1dGMocywgJy4nKTsKKwlpZiAoZW50cnktPmxvY2tfZGVwdGggPCAwKQorCQlyZXR1cm4gdHJhY2Vfc2VxX3B1dGMocywgJy4nKTsKKworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCIsIGVudHJ5LT5sb2NrX2RlcHRoKTsKIH0KIAogc3RhdGljIGludApAQCAtODgzLDcgKzg4OCw3IEBACiAJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CiAKIAlpZiAoIVMpCi0JCXRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7CisJCVMgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOwogCVQgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPm5leHRfc3RhdGUpOwogCWlmICghdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiJWQgJWQgJWMgJWQgJWQgJWQgJWNcbiIsCiAJCQkgICAgICBmaWVsZC0+cHJldl9waWQsCkBAIC05MTgsNyArOTIzLDcgQEAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKIAogCWlmICghUykKLQkJdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKKwkJUyA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7CiAJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7CiAKIAlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcGlkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKaW5kZXggOWZiY2U2Yy4uNTI3ZTE3ZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQkJICAgICAgICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIgogCQkJICAgICAgICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIiwKIAkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGludCwgbnIpLAotCQkJICAgICAgIFNZU0NBTExfRklFTEQodW5zaWduZWQgbG9uZywgcmV0KSk7CisJCQkgICAgICAgU1lTQ0FMTF9GSUVMRChsb25nLCByZXQpKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKQEAgLTIxMiw3ICsyMTIsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoY2FsbCwgU1lTQ0FMTF9GSUVMRCh1bnNpZ25lZCBsb25nLCByZXQpLCAwLAorCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChjYWxsLCBTWVNDQUxMX0ZJRUxEKGxvbmcsIHJldCksIDAsCiAJCQkJIEZJTFRFUl9PVEhFUik7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXIuYyBiL2tlcm5lbC91c2VyLmMKaW5kZXggMmMwMDBlNy4uNDZkMDE2NSAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXIuYworKysgYi9rZXJuZWwvdXNlci5jCkBAIC0zMzAsOSArMzMwLDkgQEAKICAqLwogc3RhdGljIHZvaWQgZnJlZV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnVwLT53b3JrLCBjbGVhbnVwX3VzZXJfc3RydWN0KTsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnVwLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKIH0KIAogI2Vsc2UJLyogQ09ORklHX1VTRVJfU0NIRUQgJiYgQ09ORklHX1NZU0ZTICovCmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggYWRkZmUyZC4uNjdlNTI2YiAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtNjQwLDYgKzY0MCwyNCBAQAogRVhQT1JUX1NZTUJPTChzY2hlZHVsZV9kZWxheWVkX3dvcmspOwogCiAvKioKKyAqIGZsdXNoX2RlbGF5ZWRfd29yayAtIGJsb2NrIHVudGlsIGEgZHdvcmtfc3RydWN0J3MgY2FsbGJhY2sgaGFzIHRlcm1pbmF0ZWQKKyAqIEBkd29yazogdGhlIGRlbGF5ZWQgd29yayB3aGljaCBpcyB0byBiZSBmbHVzaGVkCisgKgorICogQW55IHRpbWVvdXQgaXMgY2FuY2VsbGVkLCBhbmQgYW55IHBlbmRpbmcgd29yayBpcyBydW4gaW1tZWRpYXRlbHkuCisgKi8KK3ZvaWQgZmx1c2hfZGVsYXllZF93b3JrKHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrKQoreworCWlmIChkZWxfdGltZXJfc3luYygmZHdvcmstPnRpbWVyKSkgeworCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cTsKKwkJY3dxID0gd3FfcGVyX2NwdShrZXZlbnRkX3dxLCBnZXRfY3B1KCkpOworCQlfX3F1ZXVlX3dvcmsoY3dxLCAmZHdvcmstPndvcmspOworCQlwdXRfY3B1KCk7CisJfQorCWZsdXNoX3dvcmsoJmR3b3JrLT53b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woZmx1c2hfZGVsYXllZF93b3JrKTsKKworLyoqCiAgKiBzY2hlZHVsZV9kZWxheWVkX3dvcmtfb24gLSBxdWV1ZSB3b3JrIGluIGdsb2JhbCB3b3JrcXVldWUgb24gQ1BVIGFmdGVyIGRlbGF5CiAgKiBAY3B1OiBjcHUgdG8gdXNlCiAgKiBAZHdvcms6IGpvYiB0byBiZSBkb25lCkBAIC02NjcsNiArNjg1LDcgQEAKIGludCBzY2hlZHVsZV9vbl9lYWNoX2NwdSh3b3JrX2Z1bmNfdCBmdW5jKQogewogCWludCBjcHU7CisJaW50IG9yaWcgPSAtMTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtzOwogCiAJd29ya3MgPSBhbGxvY19wZXJjcHUoc3RydWN0IHdvcmtfc3RydWN0KTsKQEAgLTY3NCwxNCArNjkzLDI4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZ2V0X29ubGluZV9jcHVzKCk7CisKKwkvKgorCSAqIFdoZW4gcnVubmluZyBpbiBrZXZlbnRkIGRvbid0IHNjaGVkdWxlIGEgd29yayBpdGVtIG9uCisJICogaXRzZWxmLiAgQ2FuIGp1c3QgY2FsbCBkaXJlY3RseSBiZWNhdXNlIHRoZSB3b3JrIHF1ZXVlIGlzCisJICogYWxyZWFkeSBib3VuZC4gIFRoaXMgYWxzbyBpcyBmYXN0ZXIuCisJICovCisJaWYgKGN1cnJlbnRfaXNfa2V2ZW50ZCgpKQorCQlvcmlnID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9IHBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpOwogCiAJCUlOSVRfV09SSyh3b3JrLCBmdW5jKTsKLQkJc2NoZWR1bGVfd29ya19vbihjcHUsIHdvcmspOworCQlpZiAoY3B1ICE9IG9yaWcpCisJCQlzY2hlZHVsZV93b3JrX29uKGNwdSwgd29yayk7CiAJfQorCWlmIChvcmlnID49IDApCisJCWZ1bmMocGVyX2NwdV9wdHIod29ya3MsIG9yaWcpKTsKKwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQlmbHVzaF93b3JrKHBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpKTsKKwogCXB1dF9vbmxpbmVfY3B1cygpOwogCWZyZWVfcGVyY3B1KHdvcmtzKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggODkxMTU1OC4uMjM0Y2ViMSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTM0Niw4ICszNDYsOSBAQAogCiBjb25maWcgREVCVUdfS01FTUxFQUsKIAlib29sICJLZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3IiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgRVhQRVJJTUVOVEFMICYmIChYODYgfHwgQVJNIHx8IFBQQykgJiYgXAotCQkhTUVNT1JZX0hPVFBMVUcKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBFWFBFUklNRU5UQUwgJiYgIU1FTU9SWV9IT1RQTFVHICYmIFwKKwkJKFg4NiB8fCBBUk0gfHwgUFBDIHx8IFMzOTApCisKIAlzZWxlY3QgREVCVUdfRlMgaWYgU1lTRlMKIAlzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlQKIAlzZWxlY3QgS0FMTFNZTVMKQEAgLTM3MCw3ICszNzEsNyBAQAogY29uZmlnIERFQlVHX0tNRU1MRUFLX0VBUkxZX0xPR19TSVpFCiAJaW50ICJNYXhpbXVtIGttZW1sZWFrIGVhcmx5IGxvZyBlbnRyaWVzIgogCWRlcGVuZHMgb24gREVCVUdfS01FTUxFQUsKLQlyYW5nZSAyMDAgMjAwMAorCXJhbmdlIDIwMCA0MDAwMAogCWRlZmF1bHQgNDAwCiAJaGVscAogCSAgS21lbWxlYWsgbXVzdCB0cmFjayBhbGwgdGhlIG1lbW9yeSBhbGxvY2F0aW9ucyB0byBhdm9pZApAQCAtMzkxLDcgKzM5Miw3IEBACiAKIGNvbmZpZyBERUJVR19QUkVFTVBUCiAJYm9vbCAiRGVidWcgcHJlZW1wdGlibGUga2VybmVsIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFBSRUVNUFQgJiYgKFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQgfHwgUFBDNjQpCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgUFJFRU1QVCAmJiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlbiB0aGUga2VybmVsIHdpbGwgdXNlIGEgZGVidWcgdmFyaWFudCBvZiB0aGUKZGlmZiAtLWdpdCBhL2xpYi9kZWJ1Z29iamVjdHMuYyBiL2xpYi9kZWJ1Z29iamVjdHMuYwppbmRleCAyNzU1YTNiLi5lYWU1NmZkIDEwMDY0NAotLS0gYS9saWIvZGVidWdvYmplY3RzLmMKKysrIGIvbGliL2RlYnVnb2JqZWN0cy5jCkBAIC05LDYgKzksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CmRpZmYgLS1naXQgYS9saWIvZG1hLWRlYnVnLmMgYi9saWIvZG1hLWRlYnVnLmMKaW5kZXggNThhOWY5Zi4uY2U2YjdlYSAxMDA2NDQKLS0tIGEvbGliL2RtYS1kZWJ1Zy5jCisrKyBiL2xpYi9kbWEtZGVidWcuYwpAQCAtODE5LDkgKzgxOSwxMSBAQAogCQllcnJfcHJpbnRrKHJlZi0+ZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgZnJlZXMgIgogCQkJICAgIkRNQSBtZW1vcnkgd2l0aCBkaWZmZXJlbnQgQ1BVIGFkZHJlc3MgIgogCQkJICAgIltkZXZpY2UgYWRkcmVzcz0weCUwMTZsbHhdIFtzaXplPSVsbHUgYnl0ZXNdICIKLQkJCSAgICJbY3B1IGFsbG9jIGFkZHJlc3M9JXBdIFtjcHUgZnJlZSBhZGRyZXNzPSVwXSIsCisJCQkgICAiW2NwdSBhbGxvYyBhZGRyZXNzPTB4JTAxNmxseF0gIgorCQkJICAgIltjcHUgZnJlZSBhZGRyZXNzPTB4JTAxNmxseF0iLAogCQkJICAgcmVmLT5kZXZfYWRkciwgcmVmLT5zaXplLAotCQkJICAgKHZvaWQgKillbnRyeS0+cGFkZHIsICh2b2lkICopcmVmLT5wYWRkcik7CisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWVudHJ5LT5wYWRkciwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVmLT5wYWRkcik7CiAJfQogCiAJaWYgKHJlZi0+c2dfY2FsbF9lbnRzICYmIHJlZi0+dHlwZSA9PSBkbWFfZGVidWdfc2cgJiYKZGlmZiAtLWdpdCBhL2xpYi9mYXVsdC1pbmplY3QuYyBiL2xpYi9mYXVsdC1pbmplY3QuYwppbmRleCBmOTdhZjU1Yi4uN2U2NWFmNyAxMDA2NDQKLS0tIGEvbGliL2ZhdWx0LWluamVjdC5jCisrKyBiL2xpYi9mYXVsdC1pbmplY3QuYwpAQCAtMSw2ICsxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvbGliL3N0cmluZy5jIGIvbGliL3N0cmluZy5jCmluZGV4IGIxOWI4N2EuLmU5NjQyMWEgMTAwNjQ0Ci0tLSBhL2xpYi9zdHJpbmcuYworKysgYi9saWIvc3RyaW5nLmMKQEAgLTI0NiwxMyArMjQ2LDE3IEBACiAjdW5kZWYgc3RyY21wCiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCkKIHsKLQlzaWduZWQgY2hhciBfX3JlczsKKwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKIAogCXdoaWxlICgxKSB7Ci0JCWlmICgoX19yZXMgPSAqY3MgLSAqY3QrKykgIT0gMCB8fCAhKmNzKyspCisJCWMxID0gKmNzKys7CisJCWMyID0gKmN0Kys7CisJCWlmIChjMSAhPSBjMikKKwkJCXJldHVybiBjMSA8IGMyID8gLTEgOiAxOworCQlpZiAoIWMxKQogCQkJYnJlYWs7CiAJfQotCXJldHVybiBfX3JlczsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woc3RyY21wKTsKICNlbmRpZgpAQCAtMjY2LDE0ICsyNzAsMTggQEAKICAqLwogaW50IHN0cm5jbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0LCBzaXplX3QgY291bnQpCiB7Ci0Jc2lnbmVkIGNoYXIgX19yZXMgPSAwOworCXVuc2lnbmVkIGNoYXIgYzEsIGMyOwogCiAJd2hpbGUgKGNvdW50KSB7Ci0JCWlmICgoX19yZXMgPSAqY3MgLSAqY3QrKykgIT0gMCB8fCAhKmNzKyspCisJCWMxID0gKmNzKys7CisJCWMyID0gKmN0Kys7CisJCWlmIChjMSAhPSBjMikKKwkJCXJldHVybiBjMSA8IGMyID8gLTEgOiAxOworCQlpZiAoIWMxKQogCQkJYnJlYWs7CiAJCWNvdW50LS07CiAJfQotCXJldHVybiBfX3JlczsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woc3RybmNtcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggYjkxODM5ZS4uMzNiZWQ1ZSAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTE3NzEsNyArMTc3MSw3IEBACiAJCSAqIGFkdmFuY2UgYm90aCBzdHJpbmdzIHRvIG5leHQgd2hpdGUgc3BhY2UKIAkJICovCiAJCWlmICgqZm10ID09ICcqJykgewotCQkJd2hpbGUgKCFpc3NwYWNlKCpmbXQpICYmICpmbXQpCisJCQl3aGlsZSAoIWlzc3BhY2UoKmZtdCkgJiYgKmZtdCAhPSAnJScgJiYgKmZtdCkKIAkJCQlmbXQrKzsKIAkJCXdoaWxlICghaXNzcGFjZSgqc3RyKSAmJiAqc3RyKQogCQkJCXN0cisrOwpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggMjQ3NzYwNy4uNDRjZjZmMCAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC02Nyw3ICs2Nyw3IEBACiAKIGNvbmZpZyBTUEFSU0VNRU0KIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBTUEFSU0VNRU1fTUFOVUFMCisJZGVwZW5kcyBvbiAoIVNFTEVDVF9NRU1PUllfTU9ERUwgJiYgQVJDSF9TUEFSU0VNRU1fRU5BQkxFKSB8fCBTUEFSU0VNRU1fTUFOVUFMCiAKIGNvbmZpZyBGTEFUTUVNCiAJZGVmX2Jvb2wgeQpAQCAtMTI4LDExICsxMjgsOCBAQAogY29uZmlnIE1FTU9SWV9IT1RQTFVHCiAJYm9vbCAiQWxsb3cgZm9yIG1lbW9yeSBob3QtYWRkIgogCWRlcGVuZHMgb24gU1BBUlNFTUVNIHx8IFg4Nl82NF9BQ1BJX05VTUEKLQlkZXBlbmRzIG9uIEhPVFBMVUcgJiYgIShISUJFUk5BVElPTiAmJiAhUzM5MCkgJiYgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKLQlkZXBlbmRzIG9uIChJQTY0IHx8IFg4NiB8fCBQUEM2NCB8fCBTVVBFUkggfHwgUzM5MCkKLQotY29tbWVudCAiTWVtb3J5IGhvdHBsdWcgaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIFNvZnR3YXJlIFN1c3BlbmQiCi0JZGVwZW5kcyBvbiBTUEFSU0VNRU0gJiYgSE9UUExVRyAmJiBISUJFUk5BVElPTiAmJiAhUzM5MAorCWRlcGVuZHMgb24gSE9UUExVRyAmJiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRworCWRlcGVuZHMgb24gKElBNjQgfHwgWDg2IHx8IFBQQ19CT09LM1NfNjQgfHwgU1VQRVJIIHx8IFMzOTApCiAKIGNvbmZpZyBNRU1PUllfSE9UUExVR19TUEFSU0UKIAlkZWZfYm9vbCB5CkBAIC0yMjQsNyArMjIxLDkgQEAKIAkgIHRoZSBtYW55IGluc3RhbmNlcyBieSBhIHNpbmdsZSByZXNpZGVudCBwYWdlIHdpdGggdGhhdCBjb250ZW50LCBzbwogCSAgc2F2aW5nIG1lbW9yeSB1bnRpbCBvbmUgb3IgYW5vdGhlciBhcHAgbmVlZHMgdG8gbW9kaWZ5IHRoZSBjb250ZW50LgogCSAgUmVjb21tZW5kZWQgZm9yIHVzZSB3aXRoIEtWTSwgb3Igd2l0aCBvdGhlciBkdXBsaWNhdGl2ZSBhcHBsaWNhdGlvbnMuCi0JICBTZWUgRG9jdW1lbnRhdGlvbi92bS9rc20udHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCSAgU2VlIERvY3VtZW50YXRpb24vdm0va3NtLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbjogS1NNIGlzIGluYWN0aXZlCisJICB1bnRpbCBhIHByb2dyYW0gaGFzIG1hZHZpc2VkIHRoYXQgYW4gYXJlYSBpcyBNQURWX01FUkdFQUJMRSwgYW5kCisJICByb290IGhhcyBzZXQgL3N5cy9rZXJuZWwvbW0va3NtL3J1biB0byAxIChpZiBDT05GSUdfU1lTRlMgaXMgc2V0KS4KIAogY29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUgogICAgICAgICBpbnQgIkxvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb24iCkBAIC0yNDQsMTAgKzI0MywxMiBAQAogCSAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhZnRlciBib290IHVzaW5nIHRoZQogCSAgL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgdHVuYWJsZS4KIAorY29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUKKwlib29sCiAKIGNvbmZpZyBNRU1PUllfRkFJTFVSRQogCWRlcGVuZHMgb24gTU1VCi0JZGVwZW5kcyBvbiBYODZfTUNFCisJZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFCiAJYm9vbCAiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9ycyIKIAloZWxwCiAJICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXMKZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggNTE1ZmQ3OS4uZWJmODQ5MCAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTUsMTQgKzUsMTQgQEAKIG1tdS15CQkJOj0gbm9tbXUubwogbW11LSQoQ09ORklHX01NVSkJOj0gZnJlbWFwLm8gaGlnaG1lbS5vIG1hZHZpc2UubyBtZW1vcnkubyBtaW5jb3JlLm8gXAogCQkJICAgbWxvY2subyBtbWFwLm8gbXByb3RlY3QubyBtcmVtYXAubyBtc3luYy5vIHJtYXAubyBcCi0JCQkgICB2bWFsbG9jLm8KKwkJCSAgIHZtYWxsb2MubyBwYWdld2Fsay5vCiAKIG9iai15CQkJOj0gYm9vdG1lbS5vIGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXAogCQkJICAgbWFjY2Vzcy5vIHBhZ2VfYWxsb2MubyBwYWdlLXdyaXRlYmFjay5vIFwKIAkJCSAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNobWVtLm8gXAogCQkJICAgcHJpb190cmVlLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXAogCQkJICAgcGFnZV9pc29sYXRpb24ubyBtbV9pbml0Lm8gbW11X2NvbnRleHQubyBcCi0JCQkgICBwYWdld2Fsay5vICQobW11LXkpCisJCQkgICAkKG1tdS15KQogb2JqLXkgKz0gaW5pdC1tbS5vCiAKIG9iai0kKENPTkZJR19CT1VOQ0UpCSs9IGJvdW5jZS5vCmRpZmYgLS1naXQgYS9tbS9iYWNraW5nLWRldi5jIGIvbW0vYmFja2luZy1kZXYuYwppbmRleCAzZDNhY2NiLi4xMWFlZTA5IDEwMDY0NAotLS0gYS9tbS9iYWNraW5nLWRldi5jCisrKyBiL21tL2JhY2tpbmctZGV2LmMKQEAgLTkyLDcgKzkyLDcgQEAKIAkJICAgIkJkaURpcnR5VGhyZXNoOiAgICU4bHUga0JcbiIKIAkJICAgIkRpcnR5VGhyZXNoOiAgICAgICU4bHUga0JcbiIKIAkJICAgIkJhY2tncm91bmRUaHJlc2g6ICU4bHUga0JcbiIKLQkJICAgIldyaXRlQmFjayB0aHJlYWRzOiU4bHVcbiIKKwkJICAgIldyaXRlYmFja1RocmVhZHM6ICU4bHVcbiIKIAkJICAgImJfZGlydHk6ICAgICAgICAgICU4bHVcbiIKIAkJICAgImJfaW86ICAgICAgICAgICAgICU4bHVcbiIKIAkJICAgImJfbW9yZV9pbzogICAgICAgICU4bHVcbiIKQEAgLTYxMCw5ICs2MTAsMjYgQEAKIAkJa3RocmVhZF9zdG9wKHdiLT50YXNrKTsKIH0KIAorLyoKKyAqIFRoaXMgYmRpIGlzIGdvaW5nIGF3YXkgbm93LCBtYWtlIHN1cmUgdGhhdCBubyBzdXBlcl9ibG9ja3MgcG9pbnQgdG8gaXQKKyAqLworc3RhdGljIHZvaWQgYmRpX3BydW5lX3NiKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKworCXNwaW5fbG9jaygmc2JfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CisJCWlmIChzYi0+c19iZGkgPT0gYmRpKQorCQkJc2ItPnNfYmRpID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2soJnNiX2xvY2spOworfQorCiB2b2lkIGJkaV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCiB7CiAJaWYgKGJkaS0+ZGV2KSB7CisJCWJkaV9wcnVuZV9zYihiZGkpOworCiAJCWlmICghYmRpX2NhcF9mbHVzaF9mb3JrZXIoYmRpKSkKIAkJCWJkaV93Yl9zaHV0ZG93bihiZGkpOwogCQliZGlfZGVidWdfdW5yZWdpc3RlcihiZGkpOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDZjODRlNTkuLmVmMTY5ZjMgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTE2MTEsNyArMTYxMSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZpbGVtYXBfZmF1bHQpOwogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2VuZXJpY19maWxlX3ZtX29wcyA9IHsKK2NvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZW5lcmljX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcF94aXAuYyBiL21tL2ZpbGVtYXBfeGlwLmMKaW5kZXggNDI3ZGZlMy4uMTg4OGIyZCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcF94aXAuYworKysgYi9tbS9maWxlbWFwX3hpcC5jCkBAIC0yOTYsNyArMjk2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGlwX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4aXBfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CT0geGlwX2ZpbGVfZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggMjU4NzhjYy4uOWMxZTYyNyAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtNDI2LDE2ICs0MjYsMjEgQEAKIAogdm9pZCBkZWJ1Z19rbWFwX2F0b21pYyhlbnVtIGttX3R5cGUgdHlwZSkKIHsKLQlzdGF0aWMgdW5zaWduZWQgd2Fybl9jb3VudCA9IDEwOworCXN0YXRpYyBpbnQgd2Fybl9jb3VudCA9IDEwOwogCi0JaWYgKHVubGlrZWx5KHdhcm5fY291bnQgPT0gMCkpCisJaWYgKHVubGlrZWx5KHdhcm5fY291bnQgPCAwKSkKIAkJcmV0dXJuOwogCiAJaWYgKHVubGlrZWx5KGluX2ludGVycnVwdCgpKSkgewotCQlpZiAoaW5faXJxKCkpIHsKKwkJaWYgKGluX25taSgpKSB7CisJCQlpZiAodHlwZSAhPSBLTV9OTUkgJiYgdHlwZSAhPSBLTV9OTUlfUFRFKSB7CisJCQkJV0FSTl9PTigxKTsKKwkJCQl3YXJuX2NvdW50LS07CisJCQl9CisJCX0gZWxzZSBpZiAoaW5faXJxKCkpIHsKIAkJCWlmICh0eXBlICE9IEtNX0lSUTAgJiYgdHlwZSAhPSBLTV9JUlExICYmCiAJCQkgICAgdHlwZSAhPSBLTV9CSU9fU1JDX0lSUSAmJiB0eXBlICE9IEtNX0JJT19EU1RfSVJRICYmCi0JCQkgICAgdHlwZSAhPSBLTV9CT1VOQ0VfUkVBRCkgeworCQkJICAgIHR5cGUgIT0gS01fQk9VTkNFX1JFQUQgJiYgdHlwZSAhPSBLTV9JUlFfUFRFKSB7CiAJCQkJV0FSTl9PTigxKTsKIAkJCQl3YXJuX2NvdW50LS07CiAJCQl9CkBAIC00NTIsNyArNDU3LDkgQEAKIAl9CiAKIAlpZiAodHlwZSA9PSBLTV9JUlEwIHx8IHR5cGUgPT0gS01fSVJRMSB8fCB0eXBlID09IEtNX0JPVU5DRV9SRUFEIHx8Ci0JCQl0eXBlID09IEtNX0JJT19TUkNfSVJRIHx8IHR5cGUgPT0gS01fQklPX0RTVF9JUlEpIHsKKwkJCXR5cGUgPT0gS01fQklPX1NSQ19JUlEgfHwgdHlwZSA9PSBLTV9CSU9fRFNUX0lSUSB8fAorCQkJdHlwZSA9PSBLTV9JUlFfUFRFIHx8IHR5cGUgPT0gS01fTk1JIHx8CisJCQl0eXBlID09IEtNX05NSV9QVEUgKSB7CiAJCWlmICghaXJxc19kaXNhYmxlZCgpKSB7CiAJCQlXQVJOX09OKDEpOwogCQkJd2Fybl9jb3VudC0tOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDZmMDQ4ZmMuLjVkNzYwMWIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTE3MjEsNyArMTcyMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wcyA9IHsKK2NvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBodWdldGxiX3ZtX29wX2ZhdWx0LAogCS5vcGVuID0gaHVnZXRsYl92bV9vcF9vcGVuLAogCS5jbG9zZSA9IGh1Z2V0bGJfdm1fb3BfY2xvc2UsCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCA0ZWE0NTEwLi44YmY3NjVjIDEwMDY0NAotLS0gYS9tbS9rbWVtbGVhay5jCisrKyBiL21tL2ttZW1sZWFrLmMKQEAgLTgzMywxMiArODMzLDE1IEBACiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwogCW9iamVjdCA9IGNyZWF0ZV9vYmplY3QoKHVuc2lnbmVkIGxvbmcpbG9nLT5wdHIsIGxvZy0+c2l6ZSwKLQkJCSAgICAgICBsb2ctPm1pbl9jb3VudCwgR0ZQX0tFUk5FTCk7CisJCQkgICAgICAgbG9nLT5taW5fY291bnQsIEdGUF9BVE9NSUMpOworCWlmICghb2JqZWN0KQorCQlnb3RvIG91dDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGxvZy0+dHJhY2VfbGVuOyBpKyspCiAJCW9iamVjdC0+dHJhY2VbaV0gPSBsb2ctPnRyYWNlW2ldOwogCW9iamVjdC0+dHJhY2VfbGVuID0gbG9nLT50cmFjZV9sZW47CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7CitvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKaW5kZXggZjdlZGFjMy4uNTU3NWY4NiAxMDA2NDQKLS0tIGEvbW0va3NtLmMKKysrIGIvbW0va3NtLmMKQEAgLTE4NCwxMSArMTg0LDYgQEAKIAkJc2l6ZW9mKHN0cnVjdCBfX3N0cnVjdCksIF9fYWxpZ25vZl9fKHN0cnVjdCBfX3N0cnVjdCksXAogCQkoX19mbGFncyksIE5VTEwpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBrc21faW5pdF9tYXhfa2VybmVsX3BhZ2VzKHZvaWQpCi17Ci0Ja3NtX21heF9rZXJuZWxfcGFnZXMgPSBucl9mcmVlX2J1ZmZlcl9wYWdlcygpIC8gNDsKLX0KLQogc3RhdGljIGludCBfX2luaXQga3NtX3NsYWJfaW5pdCh2b2lkKQogewogCXJtYXBfaXRlbV9jYWNoZSA9IEtTTV9LTUVNX0NBQ0hFKHJtYXBfaXRlbSwgMCk7CkBAIC0xMDE3LDYgKzEwMTIsNyBAQAogCQlzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbTsKIAkJaW50IHJldDsKIAorCQljb25kX3Jlc2NoZWQoKTsKIAkJdHJlZV9ybWFwX2l0ZW0gPSByYl9lbnRyeSgqbmV3LCBzdHJ1Y3Qgcm1hcF9pdGVtLCBub2RlKTsKIAkJcGFnZTJbMF0gPSBnZXRfbWVyZ2VhYmxlX3BhZ2UodHJlZV9ybWFwX2l0ZW0pOwogCQlpZiAoIXBhZ2UyWzBdKQpAQCAtMTY3Myw3ICsxNjY5LDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtzbV90aHJlYWQ7CiAJaW50IGVycjsKIAotCWtzbV9pbml0X21heF9rZXJuZWxfcGFnZXMoKTsKKwlrc21fbWF4X2tlcm5lbF9wYWdlcyA9IHRvdGFscmFtX3BhZ2VzIC8gNDsKIAogCWVyciA9IGtzbV9zbGFiX2luaXQoKTsKIAlpZiAoZXJyKQpAQCAtMTY5Nyw2ICsxNjkzLDkgQEAKIAkJa3RocmVhZF9zdG9wKGtzbV90aHJlYWQpOwogCQlnb3RvIG91dF9mcmVlMjsKIAl9CisjZWxzZQorCWtzbV9ydW4gPSBLU01fUlVOX01FUkdFOwkvKiBubyB3YXkgZm9yIHVzZXIgdG8gc3RhcnQgaXQgKi8KKwogI2VuZGlmIC8qIENPTkZJR19TWVNGUyAqLwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggZTJiOThhNi4uZjk5ZjU5OSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzEzLDcgKzMxMyw4IEBACiBzdGF0aWMgdm9pZAogX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiwKLQkJCQlzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl96b25lICptY3R6KQorCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHosCisJCQkJdW5zaWduZWQgbG9uZyBsb25nIG5ld191c2FnZV9pbl9leGNlc3MpCiB7CiAJc3RydWN0IHJiX25vZGUgKipwID0gJm1jdHotPnJiX3Jvb3QucmJfbm9kZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKQEAgLTMyMiw3ICszMjMsOSBAQAogCWlmIChtei0+b25fdHJlZSkKIAkJcmV0dXJuOwogCi0JbXotPnVzYWdlX2luX2V4Y2VzcyA9IHJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZtZW0tPnJlcyk7CisJbXotPnVzYWdlX2luX2V4Y2VzcyA9IG5ld191c2FnZV9pbl9leGNlc3M7CisJaWYgKCFtei0+dXNhZ2VfaW5fZXhjZXNzKQorCQlyZXR1cm47CiAJd2hpbGUgKCpwKSB7CiAJCXBhcmVudCA9ICpwOwogCQltel9ub2RlID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSwKQEAgLTM1MywxNiArMzU2LDYgQEAKIH0KIAogc3RhdGljIHZvaWQKLW1lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAotCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCi17Ci0Jc3Bpbl9sb2NrKCZtY3R6LT5sb2NrKTsKLQlfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG1lbSwgbXosIG1jdHopOwotCXNwaW5fdW5sb2NrKCZtY3R6LT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQKIG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAogCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCkBAIC0zOTIsMzQgKzM4NSwzNiBAQAogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV90cmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBwcmV2X3VzYWdlX2luX2V4Y2VzcywgbmV3X3VzYWdlX2luX2V4Y2VzczsKLQlib29sIHVwZGF0ZWRfdHJlZSA9IGZhbHNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBleGNlc3M7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwogCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHo7Ci0KLQlteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtLCBwYWdlX3RvX25pZChwYWdlKSwgcGFnZV96b25lbnVtKHBhZ2UpKTsKKwlpbnQgbmlkID0gcGFnZV90b19uaWQocGFnZSk7CisJaW50IHppZCA9IHBhZ2Vfem9uZW51bShwYWdlKTsKIAltY3R6ID0gc29mdF9saW1pdF90cmVlX2Zyb21fcGFnZShwYWdlKTsKIAogCS8qCi0JICogV2UgZG8gdXBkYXRlcyBpbiBsYXp5IG1vZGUsIG1lbSdzIGFyZSByZW1vdmVkCi0JICogbGF6aWx5IGZyb20gdGhlIHBlci16b25lLCBwZXItbm9kZSByYiB0cmVlCisJICogTmVjZXNzYXJ5IHRvIHVwZGF0ZSBhbGwgYW5jZXN0b3JzIHdoZW4gaGllcmFyY2h5IGlzIHVzZWQuCisJICogYmVjYXVzZSB0aGVpciBldmVudCBjb3VudGVyIGlzIG5vdCB0b3VjaGVkLgogCSAqLwotCXByZXZfdXNhZ2VfaW5fZXhjZXNzID0gbXotPnVzYWdlX2luX2V4Y2VzczsKLQotCW5ld191c2FnZV9pbl9leGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2VzcygmbWVtLT5yZXMpOwotCWlmIChwcmV2X3VzYWdlX2luX2V4Y2VzcykgewotCQltZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChtZW0sIG16LCBtY3R6KTsKLQkJdXBkYXRlZF90cmVlID0gdHJ1ZTsKLQl9Ci0JaWYgKCFuZXdfdXNhZ2VfaW5fZXhjZXNzKQotCQlnb3RvIGRvbmU7Ci0JbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobWVtLCBteiwgbWN0eik7Ci0KLWRvbmU6Ci0JaWYgKHVwZGF0ZWRfdHJlZSkgewotCQlzcGluX2xvY2soJm1jdHotPmxvY2spOwotCQltei0+dXNhZ2VfaW5fZXhjZXNzID0gbmV3X3VzYWdlX2luX2V4Y2VzczsKLQkJc3Bpbl91bmxvY2soJm1jdHotPmxvY2spOworCWZvciAoOyBtZW07IG1lbSA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbSkpIHsKKwkJbXogPSBtZW1fY2dyb3VwX3pvbmVpbmZvKG1lbSwgbmlkLCB6aWQpOworCQlleGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2VzcygmbWVtLT5yZXMpOworCQkvKgorCQkgKiBXZSBoYXZlIHRvIHVwZGF0ZSB0aGUgdHJlZSBpZiBteiBpcyBvbiBSQi10cmVlIG9yCisJCSAqIG1lbSBpcyBvdmVyIGl0cyBzb2Z0bGltaXQuCisJCSAqLworCQlpZiAoZXhjZXNzIHx8IG16LT5vbl90cmVlKSB7CisJCQlzcGluX2xvY2soJm1jdHotPmxvY2spOworCQkJLyogaWYgb24tdHJlZSwgcmVtb3ZlIGl0ICovCisJCQlpZiAobXotPm9uX3RyZWUpCisJCQkJX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChtZW0sIG16LCBtY3R6KTsKKwkJCS8qCisJCQkgKiBJbnNlcnQgYWdhaW4uIG16LT51c2FnZV9pbl9leGNlc3Mgd2lsbCBiZSB1cGRhdGVkLgorCQkJICogSWYgZXhjZXNzIGlzIDAsIG5vIHRyZWUgb3BzLgorCQkJICovCisJCQlfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG1lbSwgbXosIG1jdHosIGV4Y2Vzcyk7CisJCQlzcGluX3VubG9jaygmbWN0ei0+bG9jayk7CisJCX0KIAl9CiB9CiAKQEAgLTQ0Nyw5ICs0NDIsMTAgQEAKIF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl96b25lICptY3R6KQogewogCXN0cnVjdCByYl9ub2RlICpyaWdodG1vc3QgPSBOVUxMOwotCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiA9IE5VTEw7CisJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwogCiByZXRyeToKKwlteiA9IE5VTEw7CiAJcmlnaHRtb3N0ID0gcmJfbGFzdCgmbWN0ei0+cmJfcm9vdCk7CiAJaWYgKCFyaWdodG1vc3QpCiAJCWdvdG8gZG9uZTsJCS8qIE5vdGhpbmcgdG8gcmVjbGFpbSBmcm9tICovCkBAIC0xMjcwLDkgKzEyNjYsOSBAQAogCQkJZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2csCiAJCQlib29sIG9vbSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgKm1lbV9vdmVyX2xpbWl0LCAqbWVtX292ZXJfc29mdF9saW1pdDsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCAqbWVtX292ZXJfbGltaXQ7CiAJaW50IG5yX3JldHJpZXMgPSBNRU1fQ0dST1VQX1JFQ0xBSU1fUkVUUklFUzsKLQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzLCAqc29mdF9mYWlsX3JlcyA9IE5VTEw7CisJc3RydWN0IHJlc19jb3VudGVyICpmYWlsX3JlczsKIAogCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKSkgewogCQkvKiBEb24ndCBhY2NvdW50IHRoaXMhICovCkBAIC0xMzA0LDE3ICsxMzAwLDE2IEBACiAKIAkJaWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKQogCQkJZ290byBkb25lOwotCQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsICZmYWlsX3JlcywKLQkJCQkJCSZzb2Z0X2ZhaWxfcmVzKTsKKwkJcmV0ID0gcmVzX2NvdW50ZXJfY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCAmZmFpbF9yZXMpOwogCQlpZiAobGlrZWx5KCFyZXQpKSB7CiAJCQlpZiAoIWRvX3N3YXBfYWNjb3VudCkKIAkJCQlicmVhazsKIAkJCXJldCA9IHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFLAotCQkJCQkJCSZmYWlsX3JlcywgTlVMTCk7CisJCQkJCQkJJmZhaWxfcmVzKTsKIAkJCWlmIChsaWtlbHkoIXJldCkpCiAJCQkJYnJlYWs7CiAJCQkvKiBtZW0rc3dhcCBjb3VudGVyIGZhaWxzICovCi0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJCQlmbGFncyB8PSBNRU1fQ0dST1VQX1JFQ0xBSU1fTk9TV0FQOwogCQkJbWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fcmVzX2NvdW50ZXIoZmFpbF9yZXMsCiAJCQkJCQkJCQltZW1zdyk7CkBAIC0xMzUzLDE2ICsxMzQ4LDExIEBACiAJCX0KIAl9CiAJLyoKLQkgKiBJbnNlcnQganVzdCB0aGUgYW5jZXN0b3IsIHdlIHNob3VsZCB0cmlja2xlIGRvd24gdG8gdGhlIGNvcnJlY3QKLQkgKiBjZ3JvdXAgZm9yIHJlY2xhaW0sIHNpbmNlIHRoZSBvdGhlciBub2RlcyB3aWxsIGJlIGJlbG93IHRoZWlyCi0JICogc29mdCBsaW1pdAorCSAqIEluc2VydCBhbmNlc3RvciAoYW5kIGFuY2VzdG9yJ3MgYW5jZXN0b3JzKSwgdG8gc29mdGxpbWl0IFJCLXRyZWUuCisJICogaWYgdGhleSBleGNlZWRzIHNvZnRsaW1pdC4KIAkgKi8KLQlpZiAoc29mdF9mYWlsX3JlcykgewotCQltZW1fb3Zlcl9zb2Z0X2xpbWl0ID0KLQkJCW1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihzb2Z0X2ZhaWxfcmVzLCByZXMpOwotCQlpZiAobWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbV9vdmVyX3NvZnRfbGltaXQpKQotCQkJbWVtX2Nncm91cF91cGRhdGVfdHJlZShtZW1fb3Zlcl9zb2Z0X2xpbWl0LCBwYWdlKTsKLQl9CisJaWYgKG1lbV9jZ3JvdXBfc29mdF9saW1pdF9jaGVjayhtZW0pKQorCQltZW1fY2dyb3VwX3VwZGF0ZV90cmVlKG1lbSwgcGFnZSk7CiBkb25lOgogCXJldHVybiAwOwogbm9tZW06CkBAIC0xNDM3LDEwICsxNDI3LDkgQEAKIAlpZiAodW5saWtlbHkoUGFnZUNncm91cFVzZWQocGMpKSkgewogCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKSB7Ci0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUsCi0JCQkJCQkJTlVMTCk7CisJCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSk7CiAJCX0KIAkJY3NzX3B1dCgmbWVtLT5jc3MpOwogCQlyZXR1cm47CkBAIC0xNTE5LDcgKzE1MDgsNyBAQAogCQlnb3RvIG91dDsKIAogCWlmICghbWVtX2Nncm91cF9pc19yb290KGZyb20pKQotCQlyZXNfY291bnRlcl91bmNoYXJnZSgmZnJvbS0+cmVzLCBQQUdFX1NJWkUsIE5VTEwpOworCQlyZXNfY291bnRlcl91bmNoYXJnZSgmZnJvbS0+cmVzLCBQQUdFX1NJWkUpOwogCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MoZnJvbSwgcGMsIGZhbHNlKTsKIAogCXBhZ2UgPSBwYy0+cGFnZTsKQEAgLTE1MzksNyArMTUyOCw3IEBACiAJfQogCiAJaWYgKGRvX3N3YXBfYWNjb3VudCAmJiAhbWVtX2Nncm91cF9pc19yb290KGZyb20pKQotCQlyZXNfY291bnRlcl91bmNoYXJnZSgmZnJvbS0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5tZW1zdywgUEFHRV9TSVpFKTsKIAljc3NfcHV0KCZmcm9tLT5jc3MpOwogCiAJY3NzX2dldCgmdG8tPmNzcyk7CkBAIC0xNjEwLDkgKzE1OTksOSBAQAogCWNzc19wdXQoJnBhcmVudC0+Y3NzKTsKIAkvKiB1bmNoYXJnZSBpZiBtb3ZlIGZhaWxzICovCiAJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QocGFyZW50KSkgewotCQlyZXNfY291bnRlcl91bmNoYXJnZSgmcGFyZW50LT5yZXMsIFBBR0VfU0laRSwgTlVMTCk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZwYXJlbnQtPnJlcywgUEFHRV9TSVpFKTsKIAkJaWYgKGRvX3N3YXBfYWNjb3VudCkKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZwYXJlbnQtPm1lbXN3LCBQQUdFX1NJWkUsIE5VTEwpOworCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnBhcmVudC0+bWVtc3csIFBBR0VfU0laRSk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xODAzLDggKzE3OTIsNyBAQAogCQkJICogY2FsbGluZyBjc3NfdHJ5Z2V0CiAJCQkgKi8KIAkJCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKLQkJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUsCi0JCQkJCQkJTlVMTCk7CisJCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1zdywgUEFHRV9TSVpFKTsKIAkJCW1lbV9jZ3JvdXBfc3dhcF9zdGF0aXN0aWNzKG1lbWNnLCBmYWxzZSk7CiAJCQltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAJCX0KQEAgLTE4MzEsOSArMTgxOSw5IEBACiAJaWYgKCFtZW0pCiAJCXJldHVybjsKIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKSB7Ci0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpOwogCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKIAl9CiAJY3NzX3B1dCgmbWVtLT5jc3MpOwogfQpAQCAtMTg0OCw3ICsxODM2LDYgQEAKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKLQlib29sIHNvZnRfbGltaXRfZXhjZXNzID0gZmFsc2U7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE4ODgsMTAgKzE4NzUsMTAgQEAKIAl9CiAKIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKSB7Ci0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCAmc29mdF9saW1pdF9leGNlc3MpOworCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJCWlmIChkb19zd2FwX2FjY291bnQgJiYKIAkJCQkoY3R5cGUgIT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKSkKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUsIE5VTEwpOworCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSk7CiAJfQogCWlmIChjdHlwZSA9PSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NXQVBPVVQpCiAJCW1lbV9jZ3JvdXBfc3dhcF9zdGF0aXN0aWNzKG1lbSwgdHJ1ZSk7CkBAIC0xOTA4LDcgKzE4OTUsNyBAQAogCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOwogCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAKLQlpZiAoc29mdF9saW1pdF9leGNlc3MgJiYgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbSkpCisJaWYgKG1lbV9jZ3JvdXBfc29mdF9saW1pdF9jaGVjayhtZW0pKQogCQltZW1fY2dyb3VwX3VwZGF0ZV90cmVlKG1lbSwgcGFnZSk7CiAJLyogYXQgc3dhcG91dCwgdGhpcyBtZW1jZyB3aWxsIGJlIGFjY2Vzc2VkIHRvIHJlY29yZCB0byBzd2FwICovCiAJaWYgKGN0eXBlICE9IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCkKQEAgLTE5ODYsNyArMTk3Myw3IEBACiAJCSAqIFRoaXMgbWVtY2cgY2FuIGJlIG9ic29sZXRlIG9uZS4gV2UgYXZvaWQgY2FsbGluZyBjc3NfdHJ5Z2V0CiAJCSAqLwogCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpCi0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUsIE5VTEwpOworCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1zdywgUEFHRV9TSVpFKTsKIAkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtY2csIGZhbHNlKTsKIAkJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCX0KQEAgLTIyMzMsNiArMjIyMCw3IEBACiAJdW5zaWduZWQgbG9uZyByZWNsYWltZWQ7CiAJaW50IGxvb3AgPSAwOwogCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHo7CisJdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VzczsKIAogCWlmIChvcmRlciA+IDApCiAJCXJldHVybiAwOwpAQCAtMjI4NCw5ICsyMjcyLDggQEAKIAkJCQkJYnJlYWs7CiAJCQl9IHdoaWxlICgxKTsKIAkJfQotCQltei0+dXNhZ2VfaW5fZXhjZXNzID0KLQkJCXJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZtei0+bWVtLT5yZXMpOwogCQlfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LT5tZW0sIG16LCBtY3R6KTsKKwkJZXhjZXNzID0gcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3MoJm16LT5tZW0tPnJlcyk7CiAJCS8qCiAJCSAqIE9uZSBzY2hvb2wgb2YgdGhvdWdodCBzYXlzIHRoYXQgd2Ugc2hvdWxkIG5vdCBhZGQKIAkJICogYmFjayB0aGUgbm9kZSB0byB0aGUgdHJlZSBpZiByZWNsYWltIHJldHVybnMgMC4KQEAgLTIyOTUsOCArMjI4Miw4IEBACiAJCSAqIG1lbW9yeSB0byByZWNsYWltIGZyb20uIENvbnNpZGVyIHRoaXMgYXMgYSBsb25nZXIKIAkJICogdGVybSBUT0RPLgogCQkgKi8KLQkJaWYgKG16LT51c2FnZV9pbl9leGNlc3MpCi0JCQlfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG16LT5tZW0sIG16LCBtY3R6KTsKKwkJLyogSWYgZXhjZXNzID09IDAsIG5vIHRyZWUgb3BzICovCisJCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXotPm1lbSwgbXosIG1jdHosIGV4Y2Vzcyk7CiAJCXNwaW5fdW5sb2NrKCZtY3R6LT5sb2NrKTsKIAkJY3NzX3B1dCgmbXotPm1lbS0+Y3NzKTsKIAkJbG9vcCsrOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNzI5ZDRiMS4uZGFjYzY0MSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rc20uaD4KICNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KQEAgLTM3MCw5ICszNzEsNiBAQAogCWludCByZXQgPSBGQUlMRUQ7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAKLQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocCkpCi0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwKTsKLQogCS8qCiAJICogRm9yIGFub255bW91cyBwYWdlcyB3ZSdyZSBkb25lIHRoZSBvbmx5IHJlZmVyZW5jZSBsZWZ0CiAJICogc2hvdWxkIGJlIHRoZSBvbmUgbV9mKCkgaG9sZHMuCkBAIC00OTgsMzAgKzQ5NiwxOCBAQAogICovCiBzdGF0aWMgaW50IG1lX3N3YXBjYWNoZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBwZm4pCiB7Ci0JaW50IHJldCA9IEZBSUxFRDsKLQogCUNsZWFyUGFnZURpcnR5KHApOwogCS8qIFRyaWdnZXIgRUlPIGluIHNobWVtOiAqLwogCUNsZWFyUGFnZVVwdG9kYXRlKHApOwogCi0JaWYgKCFpc29sYXRlX2xydV9wYWdlKHApKSB7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwKTsKLQkJcmV0ID0gREVMQVlFRDsKLQl9Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBERUxBWUVEOwogfQogCiBzdGF0aWMgaW50IG1lX3N3YXBjYWNoZV9jbGVhbihzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBwZm4pCiB7Ci0JaW50IHJldCA9IEZBSUxFRDsKLQotCWlmICghaXNvbGF0ZV9scnVfcGFnZShwKSkgewotCQlwYWdlX2NhY2hlX3JlbGVhc2UocCk7Ci0JCXJldCA9IFJFQ09WRVJFRDsKLQl9CiAJZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShwKTsKLQlyZXR1cm4gcmV0OworCisJcmV0dXJuIFJFQ09WRVJFRDsKIH0KIAogLyoKQEAgLTYxMSw4ICs1OTcsNiBAQAogCXsgMCwJCTAsCQkidW5rbm93biBwYWdlIHN0YXRlIiwJbWVfdW5rbm93biB9LAogfTsKIAotI3VuZGVmIGxydQotCiBzdGF0aWMgdm9pZCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBjaGFyICptc2csIGludCByZXN1bHQpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwpAQCAtNjI5LDEzICs2MTMsMTYgQEAKIAkJCXVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcmVmKQogewogCWludCByZXN1bHQ7CisJaW50IGNvdW50OwogCiAJcmVzdWx0ID0gcHMtPmFjdGlvbihwLCBwZm4pOwogCWFjdGlvbl9yZXN1bHQocGZuLCBwcy0+bXNnLCByZXN1bHQpOwotCWlmIChwYWdlX2NvdW50KHApICE9IDEgKyByZWYpCisKKwljb3VudCA9IHBhZ2VfY291bnQocCkgLSAxIC0gcmVmOworCWlmIChjb3VudCAhPSAwKQogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJNQ0UgJSNseDogJXMgcGFnZSBzdGlsbCByZWZlcmVuY2VkIGJ5ICVkIHVzZXJzXG4iLAotCQkgICAgICAgcGZuLCBwcy0+bXNnLCBwYWdlX2NvdW50KHApIC0gMSk7CisJCSAgICAgICBwZm4sIHBzLT5tc2csIGNvdW50KTsKIAogCS8qIENvdWxkIGRvIG1vcmUgY2hlY2tzIGhlcmUgaWYgcGFnZSBsb29rcyBvayAqLwogCS8qCkBAIC02NjEsMTIgKzY0OCw5IEBACiAJaW50IGk7CiAJaW50IGtpbGwgPSAxOwogCi0JaWYgKFBhZ2VSZXNlcnZlZChwKSB8fCBQYWdlQ29tcG91bmQocCkgfHwgUGFnZVNsYWIocCkpCisJaWYgKFBhZ2VSZXNlcnZlZChwKSB8fCBQYWdlQ29tcG91bmQocCkgfHwgUGFnZVNsYWIocCkgfHwgUGFnZUtzbShwKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFQYWdlTFJVKHApKQotCQlscnVfYWRkX2RyYWluX2FsbCgpOwotCiAJLyoKIAkgKiBUaGlzIGNoZWNrIGltcGxpZXMgd2UgZG9uJ3Qga2lsbCBwcm9jZXNzZXMgaWYgdGhlaXIgcGFnZXMKIAkgKiBhcmUgaW4gdGhlIHN3YXAgY2FjaGUgZWFybHkuIFRob3NlIGFyZSBhbHdheXMgbGF0ZSBraWxscy4KQEAgLTczOCw2ICs3MjIsNyBAQAogCiBpbnQgX19tZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IHRyYXBubywgaW50IHJlZikKIHsKKwl1bnNpZ25lZCBsb25nIGxydV9mbGFnOwogCXN0cnVjdCBwYWdlX3N0YXRlICpwczsKIAlzdHJ1Y3QgcGFnZSAqcDsKIAlpbnQgcmVzOwpAQCAtNzc1LDYgKzc2MCwyNCBAQAogCX0KIAogCS8qCisJICogV2UgaWdub3JlIG5vbi1MUlUgcGFnZXMgZm9yIGdvb2QgcmVhc29ucy4KKwkgKiAtIFBHX2xvY2tlZCBpcyBvbmx5IHdlbGwgZGVmaW5lZCBmb3IgTFJVIHBhZ2VzIGFuZCBhIGZldyBvdGhlcnMKKwkgKiAtIHRvIGF2b2lkIHJhY2VzIHdpdGggX19zZXRfcGFnZV9sb2NrZWQoKQorCSAqIC0gdG8gYXZvaWQgcmFjZXMgd2l0aCBfX1NldFBhZ2VTbGFiKigpIChhbmQgbW9yZSBub24tYXRvbWljIG9wcykKKwkgKiBUaGUgY2hlY2sgKHVubmVjZXNzYXJpbHkpIGlnbm9yZXMgTFJVIHBhZ2VzIGJlaW5nIGlzb2xhdGVkIGFuZAorCSAqIHdhbGtlZCBieSB0aGUgcGFnZSByZWNsYWltIGNvZGUsIGhvd2V2ZXIgdGhhdCdzIG5vdCBhIGJpZyBsb3NzLgorCSAqLworCWlmICghUGFnZUxSVShwKSkKKwkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKKwlscnVfZmxhZyA9IHAtPmZsYWdzICYgbHJ1OworCWlmIChpc29sYXRlX2xydV9wYWdlKHApKSB7CisJCWFjdGlvbl9yZXN1bHQocGZuLCAibm9uIExSVSIsIElHTk9SRUQpOworCQlwdXRfcGFnZShwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcGFnZV9jYWNoZV9yZWxlYXNlKHApOworCisJLyoKIAkgKiBMb2NrIHRoZSBwYWdlIGFuZCB3YWl0IGZvciB3cml0ZWJhY2sgdG8gZmluaXNoLgogCSAqIEl0J3MgdmVyeSBkaWZmaWN1bHQgdG8gbWVzcyB3aXRoIHBhZ2VzIGN1cnJlbnRseSB1bmRlciBJTwogCSAqIGFuZCBpbiBtYW55IGNhc2VzIGltcG9zc2libGUsIHNvIHdlIGp1c3QgYXZvaWQgaXQgaGVyZS4KQEAgLTc5MCw3ICs3OTMsNyBAQAogCS8qCiAJICogVG9ybiBkb3duIGJ5IHNvbWVvbmUgZWxzZT8KIAkgKi8KLQlpZiAoUGFnZUxSVShwKSAmJiAhUGFnZVN3YXBDYWNoZShwKSAmJiBwLT5tYXBwaW5nID09IE5VTEwpIHsKKwlpZiAoKGxydV9mbGFnICYgbHJ1KSAmJiAhUGFnZVN3YXBDYWNoZShwKSAmJiBwLT5tYXBwaW5nID09IE5VTEwpIHsKIAkJYWN0aW9uX3Jlc3VsdChwZm4sICJhbHJlYWR5IHRydW5jYXRlZCBMUlUiLCBJR05PUkVEKTsKIAkJcmVzID0gMDsKIAkJZ290byBvdXQ7CkBAIC03OTgsNyArODAxLDcgQEAKIAogCXJlcyA9IC1FQlVTWTsKIAlmb3IgKHBzID0gZXJyb3Jfc3RhdGVzOzsgcHMrKykgewotCQlpZiAoKHAtPmZsYWdzICYgcHMtPm1hc2spID09IHBzLT5yZXMpIHsKKwkJaWYgKCgocC0+ZmxhZ3MgfCBscnVfZmxhZykmIHBzLT5tYXNrKSA9PSBwcy0+cmVzKSB7CiAJCQlyZXMgPSBwYWdlX2FjdGlvbihwcywgcCwgcGZuLCByZWYpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggN2U5MWI1Zi4uNmFiMTlkZCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTY0MSw2ICs2NDEsNyBAQAogCQlwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogeworCXB0ZV90ICpvcmlnX3NyY19wdGUsICpvcmlnX2RzdF9wdGU7CiAJcHRlX3QgKnNyY19wdGUsICpkc3RfcHRlOwogCXNwaW5sb2NrX3QgKnNyY19wdGwsICpkc3RfcHRsOwogCWludCBwcm9ncmVzcyA9IDA7CkBAIC02NTQsNiArNjU1LDggQEAKIAlzcmNfcHRlID0gcHRlX29mZnNldF9tYXBfbmVzdGVkKHNyY19wbWQsIGFkZHIpOwogCXNyY19wdGwgPSBwdGVfbG9ja3B0cihzcmNfbW0sIHNyY19wbWQpOwogCXNwaW5fbG9ja19uZXN0ZWQoc3JjX3B0bCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCW9yaWdfc3JjX3B0ZSA9IHNyY19wdGU7CisJb3JpZ19kc3RfcHRlID0gZHN0X3B0ZTsKIAlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKIAogCWRvIHsKQEAgLTY3Nyw5ICs2ODAsOSBAQAogCiAJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CiAJc3Bpbl91bmxvY2soc3JjX3B0bCk7Ci0JcHRlX3VubWFwX25lc3RlZChzcmNfcHRlIC0gMSk7CisJcHRlX3VubWFwX25lc3RlZChvcmlnX3NyY19wdGUpOwogCWFkZF9tbV9yc3MoZHN0X21tLCByc3NbMF0sIHJzc1sxXSk7Ci0JcHRlX3VubWFwX3VubG9jayhkc3RfcHRlIC0gMSwgZHN0X3B0bCk7CisJcHRlX3VubWFwX3VubG9jayhvcmlnX2RzdF9wdGUsIGRzdF9wdGwpOwogCWNvbmRfcmVzY2hlZCgpOwogCWlmIChhZGRyICE9IGVuZCkKIAkJZ290byBhZ2FpbjsKQEAgLTE4MjAsMTAgKzE4MjMsMTAgQEAKIAl0b2tlbiA9IHBtZF9wZ3RhYmxlKCpwbWQpOwogCiAJZG8gewotCQllcnIgPSBmbihwdGUsIHRva2VuLCBhZGRyLCBkYXRhKTsKKwkJZXJyID0gZm4ocHRlKyssIHRva2VuLCBhZGRyLCBkYXRhKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwotCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOworCX0gd2hpbGUgKGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CiAKIAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIApAQCAtMjUzOSw3ICsyNTQyLDcgQEAKIAl9IGVsc2UgaWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkgewogCQlyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjsKIAkJZGVsYXlhY2N0X2NsZWFyX2ZsYWcoREVMQVlBQ0NUX1BGX1NXQVBJTik7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9yZWxlYXNlOwogCX0KIAogCWxvY2tfcGFnZShwYWdlKTsKQEAgLTI2MTEsNiArMjYxNCw3IEBACiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwogb3V0X3BhZ2U6CiAJdW5sb2NrX3BhZ2UocGFnZSk7CitvdXRfcmVsZWFzZToKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDgyMWRlZTUuLjIwNDc0NjUgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21pZ3JhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWlzb2xhdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCkBAIC00NDcsNyArNDQ4LDggQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFICovCiAKLXN0YXRpYyBwZ19kYXRhX3QgKmhvdGFkZF9uZXdfcGdkYXQoaW50IG5pZCwgdTY0IHN0YXJ0KQorLyogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVRyAqLworc3RhdGljIHBnX2RhdGFfdCBfX3JlZiAqaG90YWRkX25ld19wZ2RhdChpbnQgbmlkLCB1NjQgc3RhcnQpCiB7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDsKIAl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHswfTsKQEAgLTQ4NCwxNCArNDg2LDE4IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKIAorCWxvY2tfc3lzdGVtX3NsZWVwKCk7CisKIAlyZXMgPSByZWdpc3Rlcl9tZW1vcnlfcmVzb3VyY2Uoc3RhcnQsIHNpemUpOworCXJldCA9IC1FRVhJU1Q7CiAJaWYgKCFyZXMpCi0JCXJldHVybiAtRUVYSVNUOworCQlnb3RvIG91dDsKIAogCWlmICghbm9kZV9vbmxpbmUobmlkKSkgewogCQlwZ2RhdCA9IGhvdGFkZF9uZXdfcGdkYXQobmlkLCBzdGFydCk7CisJCXJldCA9IC1FTk9NRU07CiAJCWlmICghcGdkYXQpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCWdvdG8gb3V0OwogCQluZXdfcGdkYXQgPSAxOwogCX0KIApAQCAtNTE0LDcgKzUyMCw4IEBACiAJCUJVR19PTihyZXQpOwogCX0KIAotCXJldHVybiByZXQ7CisJZ290byBvdXQ7CisKIGVycm9yOgogCS8qIHJvbGxiYWNrIHBnZGF0IGFsbG9jYXRpb24gYW5kIG90aGVycyAqLwogCWlmIChuZXdfcGdkYXQpCkBAIC01MjIsNiArNTI5LDggQEAKIAlpZiAocmVzKQogCQlyZWxlYXNlX21lbW9yeV9yZXNvdXJjZShyZXMpOwogCitvdXQ6CisJdW5sb2NrX3N5c3RlbV9zbGVlcCgpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTsKQEAgLTc1OCw2ICs3NjcsOCBAQAogCWlmICghdGVzdF9wYWdlc19pbl9hX3pvbmUoc3RhcnRfcGZuLCBlbmRfcGZuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlsb2NrX3N5c3RlbV9zbGVlcCgpOworCiAJem9uZSA9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKTsKIAlub2RlID0gem9uZV90b19uaWQoem9uZSk7CiAJbnJfcGFnZXMgPSBlbmRfcGZuIC0gc3RhcnRfcGZuOwpAQCAtNzY1LDcgKzc3Niw3IEBACiAJLyogc2V0IGFib3ZlIHJhbmdlIGFzIGlzb2xhdGVkICovCiAJcmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3Bmbik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXQ7CiAKIAlhcmcuc3RhcnRfcGZuID0gc3RhcnRfcGZuOwogCWFyZy5ucl9wYWdlcyA9IG5yX3BhZ2VzOwpAQCAtODQzLDYgKzg1NCw3IEBACiAJd3JpdGViYWNrX3NldF9yYXRlbGltaXQoKTsKIAogCW1lbW9yeV9ub3RpZnkoTUVNX09GRkxJTkUsICZhcmcpOworCXVubG9ja19zeXN0ZW1fc2xlZXAoKTsKIAlyZXR1cm4gMDsKIAogZmFpbGVkX3JlbW92YWw6CkBAIC04NTIsNiArODY0LDggQEAKIAkvKiBwdXNoYmFjayB0byBmcmVlIGFyZWEgKi8KIAl1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydF9wZm4sIGVuZF9wZm4pOwogCitvdXQ6CisJdW5sb2NrX3N5c3RlbV9zbGVlcCgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggN2RkOWQ5Zi4uNDU0NWQ1OSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKKysrIGIvbW0vbWVtcG9saWN5LmMKQEAgLTEwMjQsNyArMTAyNCw3IEBACiAKIAkJZXJyID0gbWlncmF0ZV9wcmVwKCk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOworCQkJZ290byBtcG9sX291dDsKIAl9CiAJewogCQlOT0RFTUFTS19TQ1JBVENIKHNjcmF0Y2gpOwpAQCAtMTAzOSwxMCArMTAzOSw5IEBACiAJCQllcnIgPSAtRU5PTUVNOwogCQlOT0RFTUFTS19TQ1JBVENIX0ZSRUUoc2NyYXRjaCk7CiAJfQotCWlmIChlcnIpIHsKLQkJbXBvbF9wdXQobmV3KTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKGVycikKKwkJZ290byBtcG9sX291dDsKKwogCXZtYSA9IGNoZWNrX3JhbmdlKG1tLCBzdGFydCwgZW5kLCBubWFzaywKIAkJCSAgZmxhZ3MgfCBNUE9MX01GX0lOVkVSVCwgJnBhZ2VsaXN0KTsKIApAQCAtMTA1OCw5ICsxMDU3LDExIEBACiAKIAkJaWYgKCFlcnIgJiYgbnJfZmFpbGVkICYmIChmbGFncyAmIE1QT0xfTUZfU1RSSUNUKSkKIAkJCWVyciA9IC1FSU87Ci0JfQorCX0gZWxzZQorCQlwdXRiYWNrX2xydV9wYWdlcygmcGFnZWxpc3QpOwogCiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisgbXBvbF9vdXQ6CiAJbXBvbF9wdXQobmV3KTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDFhNGJmNDguLjdkYmNiMjIgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTYwMiw3ICs2MDIsNyBAQAogCXN0cnVjdCBwYWdlICpuZXdwYWdlID0gZ2V0X25ld19wYWdlKHBhZ2UsIHByaXZhdGUsICZyZXN1bHQpOwogCWludCByY3VfbG9ja2VkID0gMDsKIAlpbnQgY2hhcmdlID0gMDsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOwogCiAJaWYgKCFuZXdwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCAyMWQ0MDI5Li43M2Y1ZTRiIDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0yMjgyLDcgKzIyODIsNyBAQAogewogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwZWNpYWxfbWFwcGluZ192bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3BlY2lhbF9tYXBwaW5nX3Ztb3BzID0gewogCS5jbG9zZSA9IHNwZWNpYWxfbWFwcGluZ19jbG9zZSwKIAkuZmF1bHQgPSBzcGVjaWFsX21hcHBpbmdfZmF1bHQsCiB9OwpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggNTZhNDQ2Zi4uOTg3NmZhMCAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC03OSw3ICs3OSw3IEBACiBzdHJ1Y3QgcmJfcm9vdCBub21tdV9yZWdpb25fdHJlZSA9IFJCX1JPT1Q7CiBERUNMQVJFX1JXU0VNKG5vbW11X3JlZ2lvbl9zZW0pOwogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2VuZXJpY19maWxlX3ZtX29wcyA9IHsKK2NvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZW5lcmljX2ZpbGVfdm1fb3BzID0gewogfTsKIAogLyoKQEAgLTgyNiw3ICs4MjYsNyBAQAogCWludCByZXQ7CiAKIAkvKiBkbyB0aGUgc2ltcGxlIGNoZWNrcyBmaXJzdCAqLwotCWlmIChmbGFncyAmIE1BUF9GSVhFRCB8fCBhZGRyKSB7CisJaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHCiAJCSAgICAgICAiJWQ6IENhbid0IGRvIGZpeGVkLWFkZHJlc3Mvb3ZlcmxheSBtbWFwIG9mIFJBTVxuIiwKIAkJICAgICAgIGN1cnJlbnQtPnBpZCk7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQAogCXJldCA9IHZtYS0+dm1fZmlsZS0+Zl9vcC0+bW1hcCh2bWEtPnZtX2ZpbGUsIHZtYSk7CiAJaWYgKHJldCA9PSAwKSB7CiAJCXZtYS0+dm1fcmVnaW9uLT52bV90b3AgPSB2bWEtPnZtX3JlZ2lvbi0+dm1fZW5kOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHJldCAhPSAtRU5PU1lTKQogCQlyZXR1cm4gcmV0OwpAQCAtMTA1MSw3ICsxMDUxLDggQEAKICAqLwogc3RhdGljIGludCBkb19tbWFwX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgICBzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb24sCi0JCQkgICB1bnNpZ25lZCBsb25nIGxlbikKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJICAgdW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzOwogCXVuc2lnbmVkIGxvbmcgdG90YWwsIHBvaW50LCBuLCBybGVuOwpAQCAtMTA2MiwxMyArMTA2MywxMyBAQAogCSAqIHNoYXJlZCBtYXBwaW5ncyBvbiBkZXZpY2VzIG9yIG1lbW9yeQogCSAqIC0gVk1fTUFZU0hBUkUgd2lsbCBiZSBzZXQgaWYgaXQgbWF5IGF0dGVtcHQgdG8gc2hhcmUKIAkgKi8KLQlpZiAodm1hLT52bV9maWxlKSB7CisJaWYgKGNhcGFiaWxpdGllcyAmIEJESV9DQVBfTUFQX0RJUkVDVCkgewogCQlyZXQgPSB2bWEtPnZtX2ZpbGUtPmZfb3AtPm1tYXAodm1hLT52bV9maWxlLCB2bWEpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCS8qIHNob3VsZG4ndCByZXR1cm4gc3VjY2VzcyBpZiB3ZSdyZSBub3Qgc2hhcmluZyAqLwogCQkJQlVHX09OKCEodm1hLT52bV9mbGFncyAmIFZNX01BWVNIQVJFKSk7CiAJCQl2bWEtPnZtX3JlZ2lvbi0+dm1fdG9wID0gdm1hLT52bV9yZWdpb24tPnZtX2VuZDsKLQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAocmV0ICE9IC1FTk9TWVMpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMTE4MSw5ICsxMTgyLDYgQEAKIAogCWtlbnRlcigiLCVseCwlbHgsJWx4LCVseCwlbHgiLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZik7CiAKLQlpZiAoIShmbGFncyAmIE1BUF9GSVhFRCkpCi0JCWFkZHIgPSByb3VuZF9oaW50X3RvX21pbihhZGRyKTsKLQogCS8qIGRlY2lkZSB3aGV0aGVyIHdlIHNob3VsZCBhdHRlbXB0IHRoZSBtYXBwaW5nLCBhbmQgaWYgc28gd2hhdCBzb3J0IG9mCiAJICogbWFwcGluZyAqLwogCXJldCA9IHZhbGlkYXRlX21tYXBfcmVxdWVzdChmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZiwKQEAgLTExOTMsNiArMTE5MSw5IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJLyogd2UgaWdub3JlIHRoZSBhZGRyZXNzIGhpbnQgKi8KKwlhZGRyID0gMDsKKwogCS8qIHdlJ3ZlIGRldGVybWluZWQgdGhhdCB3ZSBjYW4gbWFrZSB0aGUgbWFwcGluZywgbm93IHRyYW5zbGF0ZSB3aGF0IHdlCiAJICogbm93IGtub3cgaW50byBWTUEgZmxhZ3MgKi8KIAl2bV9mbGFncyA9IGRldGVybWluZV92bV9mbGFncyhmaWxlLCBwcm90LCBmbGFncywgY2FwYWJpbGl0aWVzKTsKQEAgLTEzMDYsNyArMTMwNyw3IEBACiAJCSAqIC0gdGhpcyBpcyB0aGUgaG9vayBmb3IgcXVhc2ktbWVtb3J5IGNoYXJhY3RlciBkZXZpY2VzIHRvCiAJCSAqICAgdGVsbCB1cyB0aGUgbG9jYXRpb24gb2YgYSBzaGFyZWQgbWFwcGluZwogCQkgKi8KLQkJaWYgKGZpbGUgJiYgZmlsZS0+Zl9vcC0+Z2V0X3VubWFwcGVkX2FyZWEpIHsKKwkJaWYgKGNhcGFiaWxpdGllcyAmIEJESV9DQVBfTUFQX0RJUkVDVCkgewogCQkJYWRkciA9IGZpbGUtPmZfb3AtPmdldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwKIAkJCQkJCQkgICAgIHBnb2ZmLCBmbGFncyk7CiAJCQlpZiAoSVNfRVJSKCh2b2lkICopIGFkZHIpKSB7CkBAIC0xMzMwLDE1ICsxMzMxLDE3IEBACiAJfQogCiAJdm1hLT52bV9yZWdpb24gPSByZWdpb247Ci0JYWRkX25vbW11X3JlZ2lvbihyZWdpb24pOwogCi0JLyogc2V0IHVwIHRoZSBtYXBwaW5nICovCisJLyogc2V0IHVwIHRoZSBtYXBwaW5nCisJICogLSB0aGUgcmVnaW9uIGlzIGZpbGxlZCBpbiBpZiBCRElfQ0FQX01BUF9ESVJFQ1QgaXMgc3RpbGwgc2V0CisJICovCiAJaWYgKGZpbGUgJiYgdm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkKIAkJcmV0ID0gZG9fbW1hcF9zaGFyZWRfZmlsZSh2bWEpOwogCWVsc2UKLQkJcmV0ID0gZG9fbW1hcF9wcml2YXRlKHZtYSwgcmVnaW9uLCBsZW4pOworCQlyZXQgPSBkb19tbWFwX3ByaXZhdGUodm1hLCByZWdpb24sIGxlbiwgY2FwYWJpbGl0aWVzKTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcl9wdXRfcmVnaW9uOworCQlnb3RvIGVycm9yX2p1c3RfZnJlZTsKKwlhZGRfbm9tbXVfcmVnaW9uKHJlZ2lvbik7CiAKIAkvKiBva2F5Li4uIHdlIGhhdmUgYSBtYXBwaW5nOyBub3cgd2UgaGF2ZSB0byByZWdpc3RlciBpdCAqLwogCXJlc3VsdCA9IHZtYS0+dm1fc3RhcnQ7CkBAIC0xMzU2LDI1ICsxMzU5LDE0IEBACiAJa2xlYXZlKCIgPSAlbHgiLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiAKLWVycm9yX3B1dF9yZWdpb246Ci0JX19wdXRfbm9tbXVfcmVnaW9uKHJlZ2lvbik7Ci0JaWYgKHZtYSkgewotCQlpZiAodm1hLT52bV9maWxlKSB7Ci0JCQlmcHV0KHZtYS0+dm1fZmlsZSk7Ci0JCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpCi0JCQkJcmVtb3ZlZF9leGVfZmlsZV92bWEodm1hLT52bV9tbSk7Ci0JCX0KLQkJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOwotCX0KLQlrbGVhdmUoIiA9ICVkIFtwcl0iLCByZXQpOwotCXJldHVybiByZXQ7Ci0KIGVycm9yX2p1c3RfZnJlZToKIAl1cF93cml0ZSgmbm9tbXVfcmVnaW9uX3NlbSk7CiBlcnJvcjoKLQlmcHV0KHJlZ2lvbi0+dm1fZmlsZSk7CisJaWYgKHJlZ2lvbi0+dm1fZmlsZSkKKwkJZnB1dChyZWdpb24tPnZtX2ZpbGUpOwogCWttZW1fY2FjaGVfZnJlZSh2bV9yZWdpb25famFyLCByZWdpb24pOwotCWZwdXQodm1hLT52bV9maWxlKTsKKwlpZiAodm1hLT52bV9maWxlKQorCQlmcHV0KHZtYS0+dm1fZmlsZSk7CiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDVVRBQkxFKQogCQlyZW1vdmVkX2V4ZV9maWxlX3ZtYSh2bWEtPnZtX21tKTsKIAlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7CmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCBkOTk2NjRlLi4yYzVkNzkyIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTQ0LDE4ICs0NCwyMSBAQAogLyoKICAqIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcyBkZWNpZGVzIHRoYXQgdGhlIGNhbGxlciBuZWVkcyB0byBwZXJmb3JtIHNvbWUKICAqIG5vbi1iYWNrZ3JvdW5kIHdyaXRlYmFjaywgdGhpcyBpcyBob3cgbWFueSBwYWdlcyBpdCB3aWxsIGF0dGVtcHQgdG8gd3JpdGUuCi0gKiBJdCBzaG91bGQgYmUgc29tZXdoYXQgbGFyZ2VyIHRoYW4gUkFURUxJTUlUX1BBR0VTIHRvIGVuc3VyZSB0aGF0IHJlYXNvbmFibHkKKyAqIEl0IHNob3VsZCBiZSBzb21ld2hhdCBsYXJnZXIgdGhhbiBkaXJ0aWVkIHBhZ2VzIHRvIGVuc3VyZSB0aGF0IHJlYXNvbmFibHkKICAqIGxhcmdlIGFtb3VudHMgb2YgSS9PIGFyZSBzdWJtaXR0ZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyBzeW5jX3dyaXRlYmFja19wYWdlcyh2b2lkKQorc3RhdGljIGlubGluZSBsb25nIHN5bmNfd3JpdGViYWNrX3BhZ2VzKHVuc2lnbmVkIGxvbmcgZGlydGllZCkKIHsKLQlyZXR1cm4gcmF0ZWxpbWl0X3BhZ2VzICsgcmF0ZWxpbWl0X3BhZ2VzIC8gMjsKKwlpZiAoZGlydGllZCA8IHJhdGVsaW1pdF9wYWdlcykKKwkJZGlydGllZCA9IHJhdGVsaW1pdF9wYWdlczsKKworCXJldHVybiBkaXJ0aWVkICsgZGlydGllZCAvIDI7CiB9CiAKIC8qIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZXhwb3J0ZWQgdmlhIC9wcm9jL3N5cy92bSAqLwogCiAvKgotICogU3RhcnQgYmFja2dyb3VuZCB3cml0ZWJhY2sgKHZpYSBwZGZsdXNoKSBhdCB0aGlzIHBlcmNlbnRhZ2UKKyAqIFN0YXJ0IGJhY2tncm91bmQgd3JpdGViYWNrICh2aWEgd3JpdGViYWNrIHRocmVhZHMpIGF0IHRoaXMgcGVyY2VudGFnZQogICovCiBpbnQgZGlydHlfYmFja2dyb3VuZF9yYXRpbyA9IDEwOwogCkBAIC00NzQsMTAgKzQ3NywxMSBAQAogICogYmFsYW5jZV9kaXJ0eV9wYWdlcygpIG11c3QgYmUgY2FsbGVkIGJ5IHByb2Nlc3NlcyB3aGljaCBhcmUgZ2VuZXJhdGluZyBkaXJ0eQogICogZGF0YS4gIEl0IGxvb2tzIGF0IHRoZSBudW1iZXIgb2YgZGlydHkgcGFnZXMgaW4gdGhlIG1hY2hpbmUgYW5kIHdpbGwgZm9yY2UKICAqIHRoZSBjYWxsZXIgdG8gcGVyZm9ybSB3cml0ZWJhY2sgaWYgdGhlIHN5c3RlbSBpcyBvdmVyIGB2bV9kaXJ0eV9yYXRpbycuCi0gKiBJZiB3ZSdyZSBvdmVyIGBiYWNrZ3JvdW5kX3RocmVzaCcgdGhlbiBwZGZsdXNoIGlzIHdva2VuIHRvIHBlcmZvcm0gc29tZQotICogd3JpdGVvdXQuCisgKiBJZiB3ZSdyZSBvdmVyIGBiYWNrZ3JvdW5kX3RocmVzaCcgdGhlbiB0aGUgd3JpdGViYWNrIHRocmVhZHMgYXJlIHdva2VuIHRvCisgKiBwZXJmb3JtIHNvbWUgd3JpdGVvdXQuCiAgKi8KLXN0YXRpYyB2b2lkIGJhbGFuY2VfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCitzdGF0aWMgdm9pZCBiYWxhbmNlX2RpcnR5X3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCXVuc2lnbmVkIGxvbmcgd3JpdGVfY2h1bmspCiB7CiAJbG9uZyBucl9yZWNsYWltYWJsZSwgYmRpX25yX3JlY2xhaW1hYmxlOwogCWxvbmcgbnJfd3JpdGViYWNrLCBiZGlfbnJfd3JpdGViYWNrOwpAQCAtNDg1LDcgKzQ4OSw2IEBACiAJdW5zaWduZWQgbG9uZyBkaXJ0eV90aHJlc2g7CiAJdW5zaWduZWQgbG9uZyBiZGlfdGhyZXNoOwogCXVuc2lnbmVkIGxvbmcgcGFnZXNfd3JpdHRlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyB3cml0ZV9jaHVuayA9IHN5bmNfd3JpdGViYWNrX3BhZ2VzKCk7CiAJdW5zaWduZWQgbG9uZyBwYXVzZSA9IDE7CiAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKQEAgLTU2Myw3ICs1NjYsOCBAQAogCQlpZiAocGFnZXNfd3JpdHRlbiA+PSB3cml0ZV9jaHVuaykKIAkJCWJyZWFrOwkJLyogV2UndmUgZG9uZSBvdXIgZHV0eSAqLwogCi0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShwYXVzZSk7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaW9fc2NoZWR1bGVfdGltZW91dChwYXVzZSk7CiAKIAkJLyoKIAkJICogSW5jcmVhc2UgdGhlIGRlbGF5IGZvciBlYWNoIGxvb3AsIHVwIHRvIG91ciBwcmV2aW91cwpAQCAtNTc5LDcgKzU4Myw3IEBACiAJCWJkaS0+ZGlydHlfZXhjZWVkZWQgPSAwOwogCiAJaWYgKHdyaXRlYmFja19pbl9wcm9ncmVzcyhiZGkpKQotCQlyZXR1cm47CQkvKiBwZGZsdXNoIGlzIGFscmVhZHkgd29ya2luZyB0aGlzIHF1ZXVlICovCisJCXJldHVybjsKIAogCS8qCiAJICogSW4gbGFwdG9wIG1vZGUsIHdlIHdhaXQgdW50aWwgaGl0dGluZyB0aGUgaGlnaGVyIHRocmVzaG9sZCBiZWZvcmUKQEAgLTU5MCwxMCArNTk0LDEwIEBACiAJICogYmFja2dyb3VuZF90aHJlc2gsIHRvIGtlZXAgdGhlIGFtb3VudCBvZiBkaXJ0eSBtZW1vcnkgbG93LgogCSAqLwogCWlmICgobGFwdG9wX21vZGUgJiYgcGFnZXNfd3JpdHRlbikgfHwKLQkgICAgKCFsYXB0b3BfbW9kZSAmJiAoKG5yX3dyaXRlYmFjayA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpCi0JCQkJCSAgKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpKQorCSAgICAoIWxhcHRvcF9tb2RlICYmICgoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkKKwkJCSAgICAgICArIGdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykpCiAJCQkJCSAgPiBiYWNrZ3JvdW5kX3RocmVzaCkpKQotCQliZGlfc3RhcnRfd3JpdGViYWNrKGJkaSwgbnJfd3JpdGViYWNrKTsKKwkJYmRpX3N0YXJ0X3dyaXRlYmFjayhiZGksIE5VTEwsIDApOwogfQogCiB2b2lkIHNldF9wYWdlX2RpcnR5X2JhbGFuY2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlX21rd3JpdGUpCkBAIC02NDAsOSArNjQ0LDEwIEBACiAJcCA9ICAmX19nZXRfY3B1X3ZhcihiZHBfcmF0ZWxpbWl0cyk7CiAJKnAgKz0gbnJfcGFnZXNfZGlydGllZDsKIAlpZiAodW5saWtlbHkoKnAgPj0gcmF0ZWxpbWl0KSkgeworCQlyYXRlbGltaXQgPSBzeW5jX3dyaXRlYmFja19wYWdlcygqcCk7CiAJCSpwID0gMDsKIAkJcHJlZW1wdF9lbmFibGUoKTsKLQkJYmFsYW5jZV9kaXJ0eV9wYWdlcyhtYXBwaW5nKTsKKwkJYmFsYW5jZV9kaXJ0eV9wYWdlcyhtYXBwaW5nLCByYXRlbGltaXQpOwogCQlyZXR1cm47CiAJfQogCXByZWVtcHRfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYmY3MjA1NS4uMmJjMmFjNiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMTc2OSw3ICsxNzY5LDcgQEAKIAkJICogU2VlIGFsc28gY3B1c2V0X3pvbmVfYWxsb3dlZCgpIGNvbW1lbnQgaW4ga2VybmVsL2NwdXNldC5jLgogCQkgKi8KIAkJYWxsb2NfZmxhZ3MgJj0gfkFMTE9DX0NQVVNFVDsKLQl9IGVsc2UgaWYgKHVubGlrZWx5KHJ0X3Rhc2socCkpKQorCX0gZWxzZSBpZiAodW5saWtlbHkocnRfdGFzayhwKSkgJiYgIWluX2ludGVycnVwdCgpKQogCQlhbGxvY19mbGFncyB8PSBBTExPQ19IQVJERVI7CiAKIAlpZiAobGlrZWx5KCEoZ2ZwX21hc2sgJiBfX0dGUF9OT01FTUFMTE9DKSkpIHsKQEAgLTE4MTcsOSArMTgxNyw5IEBACiAJaWYgKE5VTUFfQlVJTEQgJiYgKGdmcF9tYXNrICYgR0ZQX1RISVNOT0RFKSA9PSBHRlBfVEhJU05PREUpCiAJCWdvdG8gbm9wYWdlOwogCityZXN0YXJ0OgogCXdha2VfYWxsX2tzd2FwZChvcmRlciwgem9uZWxpc3QsIGhpZ2hfem9uZWlkeCk7CiAKLXJlc3RhcnQ6CiAJLyoKIAkgKiBPSywgd2UncmUgYmVsb3cgdGhlIGtzd2FwZCB3YXRlcm1hcmsgYW5kIGhhdmUga2lja2VkIGJhY2tncm91bmQKIAkgKiByZWNsYWltLiBOb3cgdGhpbmdzIGdldCBtb3JlIGNvbXBsZXgsIHNvIHNldCB1cCBhbGxvY19mbGFncyBhY2NvcmRpbmcKQEAgLTIxODMsNyArMjE4Myw3IEBACiAJcHJpbnRrKCJhY3RpdmVfYW5vbjolbHUgaW5hY3RpdmVfYW5vbjolbHUgaXNvbGF0ZWRfYW5vbjolbHVcbiIKIAkJIiBhY3RpdmVfZmlsZTolbHUgaW5hY3RpdmVfZmlsZTolbHUgaXNvbGF0ZWRfZmlsZTolbHVcbiIKIAkJIiB1bmV2aWN0YWJsZTolbHUiCi0JCSIgZGlydHk6JWx1IHdyaXRlYmFjazolbHUgdW5zdGFibGU6JWx1IGJ1ZmZlcjolbHVcbiIKKwkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKIAkJIiBmcmVlOiVsdSBzbGFiX3JlY2xhaW1hYmxlOiVsdSBzbGFiX3VucmVjbGFpbWFibGU6JWx1XG4iCiAJCSIgbWFwcGVkOiVsdSBzaG1lbTolbHUgcGFnZXRhYmxlczolbHUgYm91bmNlOiVsdVxuIiwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pLApAQCAtMjE5Niw3ICsyMTk2LDYgQEAKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSyksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyksCi0JCW5yX2Jsb2NrZGV2X3BhZ2VzKCksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9VTlJFQ0xBSU1BQkxFKSwKZGlmZiAtLWdpdCBhL21tL3BlcmNwdS5jIGIvbW0vcGVyY3B1LmMKaW5kZXggNDNkOGNhYy4uNWFkZmMyNiAxMDA2NDQKLS0tIGEvbW0vcGVyY3B1LmMKKysrIGIvbW0vcGVyY3B1LmMKQEAgLTE1Myw3ICsxNTMsMTAgQEAKICAqCiAgKiBEdXJpbmcgYWxsb2NhdGlvbiwgcGNwdV9hbGxvY19tdXRleCBpcyBrZXB0IGxvY2tlZCBhbGwgdGhlIHRpbWUgYW5kCiAgKiBwY3B1X2xvY2sgaXMgZ3JhYmJlZCBhbmQgcmVsZWFzZWQgYXMgbmVjZXNzYXJ5LiAgQWxsIGFjdHVhbCBtZW1vcnkKLSAqIGFsbG9jYXRpb25zIGFyZSBkb25lIHVzaW5nIEdGUF9LRVJORUwgd2l0aCBwY3B1X2xvY2sgcmVsZWFzZWQuCisgKiBhbGxvY2F0aW9ucyBhcmUgZG9uZSB1c2luZyBHRlBfS0VSTkVMIHdpdGggcGNwdV9sb2NrIHJlbGVhc2VkLiAgSW4KKyAqIGdlbmVyYWwsIHBlcmNwdSBtZW1vcnkgY2FuJ3QgYmUgYWxsb2NhdGVkIHdpdGggaXJxIG9mZiBidXQKKyAqIGlycXNhdmUvcmVzdG9yZSBhcmUgc3RpbGwgdXNlZCBpbiBhbGxvYyBwYXRoIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQKKyAqIGZyb20gZWFybHkgaW5pdCBwYXRoIC0gc2NoZWRfaW5pdCgpIHNwZWNpZmljYWxseS4KICAqCiAgKiBGcmVlIHBhdGggYWNjZXNzZXMgYW5kIGFsdGVycyBvbmx5IHRoZSBpbmRleCBkYXRhIHN0cnVjdHVyZXMsIHNvIGl0CiAgKiBjYW4gYmUgc2FmZWx5IGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0LiAgV2hlbiBtZW1vcnkgbmVlZHMgdG8gYmUKQEAgLTM1Miw2MiArMzU1LDg2IEBACiB9CiAKIC8qKgotICogcGNwdV9leHRlbmRfYXJlYV9tYXAgLSBleHRlbmQgYXJlYSBtYXAgZm9yIGFsbG9jYXRpb24KLSAqIEBjaHVuazogdGFyZ2V0IGNodW5rCisgKiBwY3B1X25lZWRfdG9fZXh0ZW5kIC0gZGV0ZXJtaW5lIHdoZXRoZXIgY2h1bmsgYXJlYSBtYXAgbmVlZHMgdG8gYmUgZXh0ZW5kZWQKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKICAqCi0gKiBFeHRlbmQgYXJlYSBtYXAgb2YgQGNodW5rIHNvIHRoYXQgaXQgY2FuIGFjY29tb2RhdGUgYW4gYWxsb2NhdGlvbi4KLSAqIEEgc2luZ2xlIGFsbG9jYXRpb24gY2FuIHNwbGl0IGFuIGFyZWEgaW50byB0aHJlZSBhcmVhcywgc28gdGhpcwotICogZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IEBjaHVuay0+bWFwIGhhcyBhdCBsZWFzdCB0d28gZXh0cmEgc2xvdHMuCisgKiBEZXRlcm1pbmUgd2hldGhlciBhcmVhIG1hcCBvZiBAY2h1bmsgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgdG8KKyAqIGFjY29tb2RhdGUgYSBuZXcgYWxsb2NhdGlvbi4KICAqCiAgKiBDT05URVhUOgotICogcGNwdV9hbGxvY19tdXRleCwgcGNwdV9sb2NrLiAgcGNwdV9sb2NrIGlzIHJlbGVhc2VkIGFuZCByZWFjcXVpcmVkCi0gKiBpZiBhcmVhIG1hcCBpcyBleHRlbmRlZC4KKyAqIHBjcHVfbG9jay4KICAqCiAgKiBSRVRVUk5TOgotICogMCBpZiBub29wLCAxIGlmIHN1Y2Nlc3NmdWxseSBleHRlbmRlZCwgLWVycm5vIG9uIGZhaWx1cmUuCisgKiBOZXcgdGFyZ2V0IG1hcCBhbGxvY2F0aW9uIGxlbmd0aCBpZiBleHRlbnNpb24gaXMgbmVjZXNzYXJ5LCAwCisgKiBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgcGNwdV9leHRlbmRfYXJlYV9tYXAoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKQorc3RhdGljIGludCBwY3B1X25lZWRfdG9fZXh0ZW5kKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaykKIHsKIAlpbnQgbmV3X2FsbG9jOwotCWludCAqbmV3OwotCXNpemVfdCBzaXplOwogCi0JLyogaGFzIGVub3VnaD8gKi8KIAlpZiAoY2h1bmstPm1hcF9hbGxvYyA+PSBjaHVuay0+bWFwX3VzZWQgKyAyKQogCQlyZXR1cm4gMDsKIAotCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKLQogCW5ld19hbGxvYyA9IFBDUFVfREZMX01BUF9BTExPQzsKIAl3aGlsZSAobmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMikKIAkJbmV3X2FsbG9jICo9IDI7CiAKLQluZXcgPSBwY3B1X21lbV9hbGxvYyhuZXdfYWxsb2MgKiBzaXplb2YobmV3WzBdKSk7Ci0JaWYgKCFuZXcpIHsKLQkJc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlyZXR1cm4gbmV3X2FsbG9jOworfQorCisvKioKKyAqIHBjcHVfZXh0ZW5kX2FyZWFfbWFwIC0gZXh0ZW5kIGFyZWEgbWFwIG9mIGEgY2h1bmsKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKKyAqIEBuZXdfYWxsb2M6IG5ldyB0YXJnZXQgYWxsb2NhdGlvbiBsZW5ndGggb2YgdGhlIGFyZWEgbWFwCisgKgorICogRXh0ZW5kIGFyZWEgbWFwIG9mIEBjaHVuayB0byBoYXZlIEBuZXdfYWxsb2MgZW50cmllcy4KKyAqCisgKiBDT05URVhUOgorICogRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb24uICBHcmFicyBhbmQgcmVsZWFzZXMgcGNwdV9sb2NrLgorICoKKyAqIFJFVFVSTlM6CisgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHBjcHVfZXh0ZW5kX2FyZWFfbWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG5ld19hbGxvYykKK3sKKwlpbnQgKm9sZCA9IE5VTEwsICpuZXcgPSBOVUxMOworCXNpemVfdCBvbGRfc2l6ZSA9IDAsIG5ld19zaXplID0gbmV3X2FsbG9jICogc2l6ZW9mKG5ld1swXSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW5ldyA9IHBjcHVfbWVtX2FsbG9jKG5ld19zaXplKTsKKwlpZiAoIW5ldykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCi0JLyoKLQkgKiBBY3F1aXJlIHBjcHVfbG9jayBhbmQgc3dpdGNoIHRvIG5ldyBhcmVhIG1hcC4gIE9ubHkgZnJlZQotCSAqIGNvdWxkIGhhdmUgaGFwcGVuZWQgaW5iZXR3ZWVuLCBzbyBtYXBfdXNlZCBjb3VsZG4ndCBoYXZlCi0JICogZ3Jvd24uCi0JICovCi0Jc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKLQlCVUdfT04obmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMik7CisJLyogYWNxdWlyZSBwY3B1X2xvY2sgYW5kIHN3aXRjaCB0byBuZXcgYXJlYSBtYXAgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKLQlzaXplID0gY2h1bmstPm1hcF9hbGxvYyAqIHNpemVvZihjaHVuay0+bWFwWzBdKTsKLQltZW1jcHkobmV3LCBjaHVuay0+bWFwLCBzaXplKTsKKwlpZiAobmV3X2FsbG9jIDw9IGNodW5rLT5tYXBfYWxsb2MpCisJCWdvdG8gb3V0X3VubG9jazsKKworCW9sZF9zaXplID0gY2h1bmstPm1hcF9hbGxvYyAqIHNpemVvZihjaHVuay0+bWFwWzBdKTsKKwltZW1jcHkobmV3LCBjaHVuay0+bWFwLCBvbGRfc2l6ZSk7CiAKIAkvKgogCSAqIG1hcF9hbGxvYyA8IFBDUFVfREZMX01BUF9BTExPQyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2h1bmsgaXMKIAkgKiBvbmUgb2YgdGhlIGZpcnN0IGNodW5rcyBhbmQgc3RpbGwgdXNpbmcgc3RhdGljIG1hcC4KIAkgKi8KIAlpZiAoY2h1bmstPm1hcF9hbGxvYyA+PSBQQ1BVX0RGTF9NQVBfQUxMT0MpCi0JCXBjcHVfbWVtX2ZyZWUoY2h1bmstPm1hcCwgc2l6ZSk7CisJCW9sZCA9IGNodW5rLT5tYXA7CiAKIAljaHVuay0+bWFwX2FsbG9jID0gbmV3X2FsbG9jOwogCWNodW5rLT5tYXAgPSBuZXc7CisJbmV3ID0gTlVMTDsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogcGNwdV9tZW1fZnJlZSgpIG1pZ2h0IGVuZCB1cCBjYWxsaW5nIHZmcmVlKCkgd2hpY2ggdXNlcworCSAqIElSUS11bnNhZmUgbG9jayBhbmQgdGh1cyBjYW4ndCBiZSBjYWxsZWQgdW5kZXIgcGNwdV9sb2NrLgorCSAqLworCXBjcHVfbWVtX2ZyZWUob2xkLCBvbGRfc2l6ZSk7CisJcGNwdV9tZW1fZnJlZShuZXcsIG5ld19zaXplKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDQzLDggKzEwNzAsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgKnBjcHVfYWxsb2Moc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCkKIHsKKwlzdGF0aWMgaW50IHdhcm5fbGltaXQgPSAxMDsKIAlzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bms7Ci0JaW50IHNsb3QsIG9mZjsKKwljb25zdCBjaGFyICplcnI7CisJaW50IHNsb3QsIG9mZiwgbmV3X2FsbG9jOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodW5saWtlbHkoIXNpemUgfHwgc2l6ZSA+IFBDUFVfTUlOX1VOSVRfU0laRSB8fCBhbGlnbiA+IFBBR0VfU0laRSkpIHsKIAkJV0FSTih0cnVlLCAiaWxsZWdhbCBzaXplICglenUpIG9yIGFsaWduICglenUpIGZvciAiCkBAIC0xMDUzLDE3ICsxMDgzLDMxIEBACiAJfQogCiAJbXV0ZXhfbG9jaygmcGNwdV9hbGxvY19tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKIAkvKiBzZXJ2ZSByZXNlcnZlZCBhbGxvY2F0aW9ucyBmcm9tIHRoZSByZXNlcnZlZCBjaHVuayBpZiBhdmFpbGFibGUgKi8KIAlpZiAocmVzZXJ2ZWQgJiYgcGNwdV9yZXNlcnZlZF9jaHVuaykgewogCQljaHVuayA9IHBjcHVfcmVzZXJ2ZWRfY2h1bms7Ci0JCWlmIChzaXplID4gY2h1bmstPmNvbnRpZ19oaW50IHx8Ci0JCSAgICBwY3B1X2V4dGVuZF9hcmVhX21hcChjaHVuaykgPCAwKQorCisJCWlmIChzaXplID4gY2h1bmstPmNvbnRpZ19oaW50KSB7CisJCQllcnIgPSAiYWxsb2MgZnJvbSByZXNlcnZlZCBjaHVuayBmYWlsZWQiOwogCQkJZ290byBmYWlsX3VubG9jazsKKwkJfQorCisJCXdoaWxlICgobmV3X2FsbG9jID0gcGNwdV9uZWVkX3RvX2V4dGVuZChjaHVuaykpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKwkJCWlmIChwY3B1X2V4dGVuZF9hcmVhX21hcChjaHVuaywgbmV3X2FsbG9jKSA8IDApIHsKKwkJCQllcnIgPSAiZmFpbGVkIHRvIGV4dGVuZCBhcmVhIG1hcCBvZiByZXNlcnZlZCBjaHVuayI7CisJCQkJZ290byBmYWlsX3VubG9ja19tdXRleDsKKwkJCX0KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKwkJfQorCiAJCW9mZiA9IHBjcHVfYWxsb2NfYXJlYShjaHVuaywgc2l6ZSwgYWxpZ24pOwogCQlpZiAob2ZmID49IDApCiAJCQlnb3RvIGFyZWFfZm91bmQ7CisKKwkJZXJyID0gImFsbG9jIGZyb20gcmVzZXJ2ZWQgY2h1bmsgZmFpbGVkIjsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKQEAgLTEwNzQsMTMgKzExMTgsMjAgQEAKIAkJCWlmIChzaXplID4gY2h1bmstPmNvbnRpZ19oaW50KQogCQkJCWNvbnRpbnVlOwogCi0JCQlzd2l0Y2ggKHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rKSkgewotCQkJY2FzZSAwOgotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCWdvdG8gcmVzdGFydDsJLyogcGNwdV9sb2NrIGRyb3BwZWQsIHJlc3RhcnQgKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJZ290byBmYWlsX3VubG9jazsKKwkJCW5ld19hbGxvYyA9IHBjcHVfbmVlZF90b19leHRlbmQoY2h1bmspOworCQkJaWYgKG5ld19hbGxvYykgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCQkJCWlmIChwY3B1X2V4dGVuZF9hcmVhX21hcChjaHVuaywKKwkJCQkJCQkgbmV3X2FsbG9jKSA8IDApIHsKKwkJCQkJZXJyID0gImZhaWxlZCB0byBleHRlbmQgYXJlYSBtYXAiOworCQkJCQlnb3RvIGZhaWxfdW5sb2NrX211dGV4OworCQkJCX0KKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CisJCQkJLyoKKwkJCQkgKiBwY3B1X2xvY2sgaGFzIGJlZW4gZHJvcHBlZCwgbmVlZCB0bworCQkJCSAqIHJlc3RhcnQgY3B1X3Nsb3QgbGlzdCB3YWxraW5nLgorCQkJCSAqLworCQkJCWdvdG8gcmVzdGFydDsKIAkJCX0KIAogCQkJb2ZmID0gcGNwdV9hbGxvY19hcmVhKGNodW5rLCBzaXplLCBhbGlnbik7CkBAIC0xMDkwLDIzICsxMTQxLDI2IEBACiAJfQogCiAJLyogaG1tbS4uLiBubyBzcGFjZSBsZWZ0LCBjcmVhdGUgYSBuZXcgY2h1bmsgKi8KLQlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKIAljaHVuayA9IGFsbG9jX3BjcHVfY2h1bmsoKTsKLQlpZiAoIWNodW5rKQorCWlmICghY2h1bmspIHsKKwkJZXJyID0gImZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgY2h1bmsiOwogCQlnb3RvIGZhaWxfdW5sb2NrX211dGV4OworCX0KIAotCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCXBjcHVfY2h1bmtfcmVsb2NhdGUoY2h1bmssIC0xKTsKIAlnb3RvIHJlc3RhcnQ7CiAKIGFyZWFfZm91bmQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJLyogcG9wdWxhdGUsIG1hcCBhbmQgY2xlYXIgdGhlIGFyZWEgKi8KIAlpZiAocGNwdV9wb3B1bGF0ZV9jaHVuayhjaHVuaywgb2ZmLCBzaXplKSkgewotCQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAJCXBjcHVfZnJlZV9hcmVhKGNodW5rLCBvZmYpOworCQllcnIgPSAiZmFpbGVkIHRvIHBvcHVsYXRlIjsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKQEAgLTExMTYsOSArMTE3MCwxNiBAQAogCXJldHVybiBfX2FkZHJfdG9fcGNwdV9wdHIoY2h1bmstPmJhc2VfYWRkciArIG9mZik7CiAKIGZhaWxfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIGZhaWxfdW5sb2NrX211dGV4OgogCW11dGV4X3VubG9jaygmcGNwdV9hbGxvY19tdXRleCk7CisJaWYgKHdhcm5fbGltaXQpIHsKKwkJcHJfd2FybmluZygiUEVSQ1BVOiBhbGxvY2F0aW9uIGZhaWxlZCwgc2l6ZT0lenUgYWxpZ249JXp1LCAiCisJCQkgICAiJXNcbiIsIHNpemUsIGFsaWduLCBlcnIpOworCQlkdW1wX3N0YWNrKCk7CisJCWlmICghLS13YXJuX2xpbWl0KQorCQkJcHJfaW5mbygiUEVSQ1BVOiBsaW1pdCByZWFjaGVkLCBkaXNhYmxlIHdhcm5pbmdcbiIpOworCX0KIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTM0Nyw2ICsxNDA4LDEwIEBACiAJc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7CiAJdW5zaWduZWQgaW50ICpjcHVfbWFwOwogCisJLyogdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzICovCisJbWVtc2V0KGdyb3VwX21hcCwgMCwgc2l6ZW9mKGdyb3VwX21hcCkpOworCW1lbXNldChncm91cF9jbnQsIDAsIHNpemVvZihncm91cF9tYXApKTsKKwogCS8qCiAJICogRGV0ZXJtaW5lIG1pbl91bml0X3NpemUsIGFsbG9jX3NpemUgYW5kIG1heF91cGEgc3VjaCB0aGF0CiAJICogYWxsb2Nfc2l6ZSBpcyBtdWx0aXBsZSBvZiBhdG9tX3NpemUgYW5kIGlzIHRoZSBzbWFsbGVzdApAQCAtMTU3NCw2ICsxNjM5LDcgQEAKIGludCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSwKIAkJCQkgIHZvaWQgKmJhc2VfYWRkcikKIHsKKwlzdGF0aWMgY2hhciBjcHVzX2J1Zls0MDk2XSBfX2luaXRkYXRhOwogCXN0YXRpYyBpbnQgc21hcFsyXSwgZG1hcFsyXTsKIAlzaXplX3QgZHluX3NpemUgPSBhaS0+ZHluX3NpemU7CiAJc2l6ZV90IHNpemVfc3VtID0gYWktPnN0YXRpY19zaXplICsgYWktPnJlc2VydmVkX3NpemUgKyBkeW5fc2l6ZTsKQEAgLTE1ODUsMTcgKzE2NTEsMjYgQEAKIAlpbnQgKnVuaXRfbWFwOwogCWludCBncm91cCwgdW5pdCwgaTsKIAorCWNwdW1hc2tfc2NucHJpbnRmKGNwdXNfYnVmLCBzaXplb2YoY3B1c19idWYpLCBjcHVfcG9zc2libGVfbWFzayk7CisKKyNkZWZpbmUgUENQVV9TRVRVUF9CVUdfT04oY29uZCkJZG8gewkJCQkJXAorCWlmICh1bmxpa2VseShjb25kKSkgewkJCQkJCVwKKwkJcHJfZW1lcmcoIlBFUkNQVTogZmFpbGVkIHRvIGluaXRpYWxpemUsICVzIiwgI2NvbmQpOwlcCisJCXByX2VtZXJnKCJQRVJDUFU6IGNwdV9wb3NzaWJsZV9tYXNrPSVzXG4iLCBjcHVzX2J1Zik7CVwKKwkJcGNwdV9kdW1wX2FsbG9jX2luZm8oS0VSTl9FTUVSRywgYWkpOwkJCVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCiAJLyogc2FuaXR5IGNoZWNrcyAqLwogCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHNtYXApID49IFBDUFVfREZMX01BUF9BTExPQyB8fAogCQkgICAgIEFSUkFZX1NJWkUoZG1hcCkgPj0gUENQVV9ERkxfTUFQX0FMTE9DKTsKLQlCVUdfT04oYWktPm5yX2dyb3VwcyA8PSAwKTsKLQlCVUdfT04oIWFpLT5zdGF0aWNfc2l6ZSk7Ci0JQlVHX09OKCFiYXNlX2FkZHIpOwotCUJVR19PTihhaS0+dW5pdF9zaXplIDwgc2l6ZV9zdW0pOwotCUJVR19PTihhaS0+dW5pdF9zaXplICYgflBBR0VfTUFTSyk7Ci0JQlVHX09OKGFpLT51bml0X3NpemUgPCBQQ1BVX01JTl9VTklUX1NJWkUpOwotCi0JcGNwdV9kdW1wX2FsbG9jX2luZm8oS0VSTl9ERUJVRywgYWkpOworCVBDUFVfU0VUVVBfQlVHX09OKGFpLT5ucl9ncm91cHMgPD0gMCk7CisJUENQVV9TRVRVUF9CVUdfT04oIWFpLT5zdGF0aWNfc2l6ZSk7CisJUENQVV9TRVRVUF9CVUdfT04oIWJhc2VfYWRkcik7CisJUENQVV9TRVRVUF9CVUdfT04oYWktPnVuaXRfc2l6ZSA8IHNpemVfc3VtKTsKKwlQQ1BVX1NFVFVQX0JVR19PTihhaS0+dW5pdF9zaXplICYgflBBR0VfTUFTSyk7CisJUENQVV9TRVRVUF9CVUdfT04oYWktPnVuaXRfc2l6ZSA8IFBDUFVfTUlOX1VOSVRfU0laRSk7CiAKIAkvKiBwcm9jZXNzIGdyb3VwIGluZm9ybWF0aW9uIGFuZCBidWlsZCBjb25maWcgdGFibGVzIGFjY29yZGluZ2x5ICovCiAJZ3JvdXBfb2Zmc2V0cyA9IGFsbG9jX2Jvb3RtZW0oYWktPm5yX2dyb3VwcyAqIHNpemVvZihncm91cF9vZmZzZXRzWzBdKSk7CkBAIC0xNjA0LDcgKzE2NzksNyBAQAogCXVuaXRfb2ZmID0gYWxsb2NfYm9vdG1lbShucl9jcHVfaWRzICogc2l6ZW9mKHVuaXRfb2ZmWzBdKSk7CiAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IG5yX2NwdV9pZHM7IGNwdSsrKQotCQl1bml0X21hcFtjcHVdID0gTlJfQ1BVUzsKKwkJdW5pdF9tYXBbY3B1XSA9IFVJTlRfTUFYOwogCXBjcHVfZmlyc3RfdW5pdF9jcHUgPSBOUl9DUFVTOwogCiAJZm9yIChncm91cCA9IDAsIHVuaXQgPSAwOyBncm91cCA8IGFpLT5ucl9ncm91cHM7IGdyb3VwKyssIHVuaXQgKz0gaSkgewpAQCAtMTYxOCw4ICsxNjkzLDkgQEAKIAkJCWlmIChjcHUgPT0gTlJfQ1BVUykKIAkJCQljb250aW51ZTsKIAotCQkJQlVHX09OKGNwdSA+IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpKTsKLQkJCUJVR19PTih1bml0X21hcFtjcHVdICE9IE5SX0NQVVMpOworCQkJUENQVV9TRVRVUF9CVUdfT04oY3B1ID4gbnJfY3B1X2lkcyk7CisJCQlQQ1BVX1NFVFVQX0JVR19PTighY3B1X3Bvc3NpYmxlKGNwdSkpOworCQkJUENQVV9TRVRVUF9CVUdfT04odW5pdF9tYXBbY3B1XSAhPSBVSU5UX01BWCk7CiAKIAkJCXVuaXRfbWFwW2NwdV0gPSB1bml0ICsgaTsKIAkJCXVuaXRfb2ZmW2NwdV0gPSBnaS0+YmFzZV9vZmZzZXQgKyBpICogYWktPnVuaXRfc2l6ZTsKQEAgLTE2MzIsNyArMTcwOCwxMSBAQAogCXBjcHVfbnJfdW5pdHMgPSB1bml0OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJQlVHX09OKHVuaXRfbWFwW2NwdV0gPT0gTlJfQ1BVUyk7CisJCVBDUFVfU0VUVVBfQlVHX09OKHVuaXRfbWFwW2NwdV0gPT0gVUlOVF9NQVgpOworCisJLyogd2UncmUgZG9uZSBwYXJzaW5nIHRoZSBpbnB1dCwgdW5kZWZpbmUgQlVHIG1hY3JvIGFuZCBkdW1wIGNvbmZpZyAqLworI3VuZGVmIFBDUFVfU0VUVVBfQlVHX09OCisJcGNwdV9kdW1wX2FsbG9jX2luZm8oS0VSTl9JTkZPLCBhaSk7CiAKIAlwY3B1X25yX2dyb3VwcyA9IGFpLT5ucl9ncm91cHM7CiAJcGNwdV9ncm91cF9vZmZzZXRzID0gZ3JvdXBfb2Zmc2V0czsKQEAgLTE3ODIsNyArMTg2Miw3IEBACiAJdm9pZCAqYmFzZSA9ICh2b2lkICopVUxPTkdfTUFYOwogCXZvaWQgKiphcmVhcyA9IE5VTEw7CiAJc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7Ci0Jc2l6ZV90IHNpemVfc3VtLCBhcmVhc19zaXplOworCXNpemVfdCBzaXplX3N1bSwgYXJlYXNfc2l6ZSwgbWF4X2Rpc3RhbmNlOwogCWludCBncm91cCwgaSwgcmM7CiAKIAlhaSA9IHBjcHVfYnVpbGRfYWxsb2NfaW5mbyhyZXNlcnZlZF9zaXplLCBkeW5fc2l6ZSwgYXRvbV9zaXplLApAQCAtMTgzMiw4ICsxOTEyLDI1IEBACiAJfQogCiAJLyogYmFzZSBhZGRyZXNzIGlzIG5vdyBrbm93biwgZGV0ZXJtaW5lIGdyb3VwIGJhc2Ugb2Zmc2V0cyAqLwotCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IGFpLT5ucl9ncm91cHM7IGdyb3VwKyspCisJbWF4X2Rpc3RhbmNlID0gMDsKKwlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBhaS0+bnJfZ3JvdXBzOyBncm91cCsrKSB7CiAJCWFpLT5ncm91cHNbZ3JvdXBdLmJhc2Vfb2Zmc2V0ID0gYXJlYXNbZ3JvdXBdIC0gYmFzZTsKKwkJbWF4X2Rpc3RhbmNlID0gbWF4X3Qoc2l6ZV90LCBtYXhfZGlzdGFuY2UsCisJCQkJICAgICBhaS0+Z3JvdXBzW2dyb3VwXS5iYXNlX29mZnNldCk7CisJfQorCW1heF9kaXN0YW5jZSArPSBhaS0+dW5pdF9zaXplOworCisJLyogd2FybiBpZiBtYXhpbXVtIGRpc3RhbmNlIGlzIGZ1cnRoZXIgdGhhbiA3NSUgb2Ygdm1hbGxvYyBzcGFjZSAqLworCWlmIChtYXhfZGlzdGFuY2UgPiAoVk1BTExPQ19FTkQgLSBWTUFMTE9DX1NUQVJUKSAqIDMgLyA0KSB7CisJCXByX3dhcm5pbmcoIlBFUkNQVTogbWF4X2Rpc3RhbmNlPTB4JXp4IHRvbyBsYXJnZSBmb3Igdm1hbGxvYyAiCisJCQkgICAic3BhY2UgMHglbHhcbiIsCisJCQkgICBtYXhfZGlzdGFuY2UsIFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TVEFSVCk7CisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCisJCS8qIGFuZCBmYWlsIGlmIHdlIGhhdmUgZmFsbGJhY2sgKi8KKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlOworI2VuZGlmCisJfQogCiAJcHJfaW5mbygiUEVSQ1BVOiBFbWJlZGRlZCAlenUgcGFnZXMvY3B1IEAlcCBzJXp1IHIlenUgZCV6dSB1JXp1XG4iLAogCQlQRk5fRE9XTihzaXplX3N1bSksIGJhc2UsIGFpLT5zdGF0aWNfc2l6ZSwgYWktPnJlc2VydmVkX3NpemUsCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMjhhYWZlMi4uZGQ0MzM3MyAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtMjQyLDggKzI0Miw4IEBACiB9CiAKIC8qCi0gKiBBdCB3aGF0IHVzZXIgdmlydHVhbCBhZGRyZXNzIGlzIHBhZ2UgZXhwZWN0ZWQgaW4gdm1hPyBjaGVja2luZyB0aGF0IHRoZQotICogcGFnZSBtYXRjaGVzIHRoZSB2bWE6IGN1cnJlbnRseSBvbmx5IHVzZWQgb24gYW5vbiBwYWdlcywgYnkgdW51c2Vfdm1hOworICogQXQgd2hhdCB1c2VyIHZpcnR1YWwgYWRkcmVzcyBpcyBwYWdlIGV4cGVjdGVkIGluIHZtYT8KKyAqIGNoZWNraW5nIHRoYXQgdGhlIHBhZ2UgbWF0Y2hlcyB0aGUgdm1hLgogICovCiB1bnNpZ25lZCBsb25nIHBhZ2VfYWRkcmVzc19pbl92bWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggOTg2MzFjMi4uMzU2ZGQ5OTUgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMjE4LDcgKzIxOCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1faW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobWVtX3ZtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htZW1fdm1fb3BzOwogCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gc2htZW1fYmFja2luZ19kZXZfaW5mbyAgX19yZWFkX21vc3RseSA9IHsKIAkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KQEAgLTEwNDYsOCArMTA0Niw5IEBACiAJICogc3luYyBmcm9tIGV2ZXIgY2FsbGluZyBzaG1lbV93cml0ZXBhZ2U7IGJ1dCBhIHN0YWNraW5nIGZpbGVzeXN0ZW0KIAkgKiBtYXkgdXNlIHRoZSAtPndyaXRlcGFnZSBvZiBpdHMgdW5kZXJseWluZyBmaWxlc3lzdGVtLCBpbiB3aGljaCBjYXNlCiAJICogdG1wZnMgc2hvdWxkIHdyaXRlIG91dCB0byBzd2FwIG9ubHkgaW4gcmVzcG9uc2UgdG8gbWVtb3J5IHByZXNzdXJlLAotCSAqIGFuZCBub3QgZm9yIHBkZmx1c2ggb3Igc3luYy4gIEhvd2V2ZXIsIGluIHRob3NlIGNhc2VzLCB3ZSBkbyBzdGlsbAotCSAqIHdhbnQgdG8gY2hlY2sgaWYgdGhlcmUncyBhIHJlZHVuZGFudCBzd2FwcGFnZSB0byBiZSBkaXNjYXJkZWQuCisJICogYW5kIG5vdCBmb3IgdGhlIHdyaXRlYmFjayB0aHJlYWRzIG9yIHN5bmMuICBIb3dldmVyLCBpbiB0aG9zZSBjYXNlcywKKwkgKiB3ZSBkbyBzdGlsbCB3YW50IHRvIGNoZWNrIGlmIHRoZXJlJ3MgYSByZWR1bmRhbnQgc3dhcHBhZ2UgdG8gYmUKKwkgKiBkaXNjYXJkZWQuCiAJICovCiAJaWYgKHdiYy0+Zm9yX3JlY2xhaW0pCiAJCXN3YXAgPSBnZXRfc3dhcF9wYWdlKCk7CkBAIC0yNDk3LDcgKzI0OTgsNyBAQAogCS5wdXRfc3VwZXIJPSBzaG1lbV9wdXRfc3VwZXIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobWVtX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htZW1fdm1fb3BzID0gewogCS5mYXVsdAkJPSBzaG1lbV9mYXVsdCwKICNpZmRlZiBDT05GSUdfTlVNQQogCS5zZXRfcG9saWN5ICAgICA9IHNobWVtX3NldF9wb2xpY3ksCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA0ZGU3ZjAyLi45YzU5MGVlIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTExNTEsOCArMTE1MSw3IEBACiAJCQkJfSBlbHNlCiAJCQkJCXJldHZhbCA9IHVudXNlX21tKG1tLCBlbnRyeSwgcGFnZSk7CiAKLQkJCQlpZiAoc2V0X3N0YXJ0X21tICYmCi0JCQkJICAgIHN3YXBfY291bnQoKnN3YXBfbWFwKSA8IHN3Y291bnQpIHsKKwkJCQlpZiAoc2V0X3N0YXJ0X21tICYmICpzd2FwX21hcCA8IHN3Y291bnQpIHsKIAkJCQkJbW1wdXQobmV3X3N0YXJ0X21tKTsKIAkJCQkJYXRvbWljX2luYygmbW0tPm1tX3VzZXJzKTsKIAkJCQkJbmV3X3N0YXJ0X21tID0gbW07CkBAIC0xOTc0LDEyICsxOTczLDE0IEBACiAJCWdvdG8gYmFkX3N3YXA7CiAJfQogCi0JaWYgKGJsa19xdWV1ZV9ub25yb3QoYmRldl9nZXRfcXVldWUocC0+YmRldikpKSB7Ci0JCXAtPmZsYWdzIHw9IFNXUF9TT0xJRFNUQVRFOwotCQlwLT5jbHVzdGVyX25leHQgPSAxICsgKHJhbmRvbTMyKCkgJSBwLT5oaWdoZXN0X2JpdCk7CisJaWYgKHAtPmJkZXYpIHsKKwkJaWYgKGJsa19xdWV1ZV9ub25yb3QoYmRldl9nZXRfcXVldWUocC0+YmRldikpKSB7CisJCQlwLT5mbGFncyB8PSBTV1BfU09MSURTVEFURTsKKwkJCXAtPmNsdXN0ZXJfbmV4dCA9IDEgKyAocmFuZG9tMzIoKSAlIHAtPmhpZ2hlc3RfYml0KTsKKwkJfQorCQlpZiAoZGlzY2FyZF9zd2FwKHApID09IDApCisJCQlwLT5mbGFncyB8PSBTV1BfRElTQ0FSREFCTEU7CiAJfQotCWlmIChkaXNjYXJkX3N3YXAocCkgPT0gMCkKLQkJcC0+ZmxhZ3MgfD0gU1dQX0RJU0NBUkRBQkxFOwogCiAJbXV0ZXhfbG9jaygmc3dhcG9uX211dGV4KTsKIAlzcGluX2xvY2soJnN3YXBfbG9jayk7CmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggNjk1MTFlNi4uMGY1NTFhNCAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0yNSwxMCArMjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgogCiAKIC8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi8KQEAgLTExNTYsMTIgKzExNTcsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsCi0JCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQlpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmNhbGxlcikKKwkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBnZnBfdCBnZnBfbWFzaywgdm9pZCAqY2FsbGVyKQogewogCXN0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwotCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSAxOwogCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAlpZiAoZmxhZ3MgJiBWTV9JT1JFTUFQKSB7CkBAIC0xMjAxLDcgKzEyMDEsNyBAQAogc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBmbGFncywgc3RhcnQsIGVuZCwgLTEsIEdGUF9LRVJORUwsCisJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCAxLCBmbGFncywgc3RhcnQsIGVuZCwgLTEsIEdGUF9LRVJORUwsCiAJCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19nZXRfdm1fYXJlYSk7CkBAIC0xMjEwLDcgKzEyMTAsNyBAQAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkgICAgICAgdm9pZCAqY2FsbGVyKQogewotCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIHN0YXJ0LCBlbmQsIC0xLCBHRlBfS0VSTkVMLAorCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIHN0YXJ0LCBlbmQsIC0xLCBHRlBfS0VSTkVMLAogCQkJCSAgY2FsbGVyKTsKIH0KIApAQCAtMTIyNSwyMiArMTIyNSwyMiBAQAogICovCiBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBmbGFncywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCisJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCAxLCBmbGFncywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCiAJCQkJLTEsIEdGUF9LRVJORUwsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJdm9pZCAqY2FsbGVyKQogewotCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAorCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAogCQkJCQkJLTEsIEdGUF9LRVJORUwsIGNhbGxlcik7CiB9CiAKIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCSAgIGludCBub2RlLCBnZnBfdCBnZnBfbWFzaykKIHsKLQlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGZsYWdzLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwgbm9kZSwKLQkJCQkgIGdmcF9tYXNrLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAorCQkJCSAgbm9kZSwgZ2ZwX21hc2ssIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpmaW5kX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKQEAgLTE0MDMsNyArMTQwMyw4IEBACiB9CiBFWFBPUlRfU1lNQk9MKHZtYXApOwogCi1zdGF0aWMgdm9pZCAqX192bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKK3N0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkgICAgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QsCiAJCQkgICAgaW50IG5vZGUsIHZvaWQgKmNhbGxlcik7CiBzdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzaywKIAkJCQkgcGdwcm90X3QgcHJvdCwgaW50IG5vZGUsIHZvaWQgKmNhbGxlcikKQEAgLTE0MTcsNyArMTQxOCw3IEBACiAJYXJlYS0+bnJfcGFnZXMgPSBucl9wYWdlczsKIAkvKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSByZWN1cnNpb24gaXMgc3RyaWN0bHkgYm91bmRlZC4gKi8KIAlpZiAoYXJyYXlfc2l6ZSA+IFBBR0VfU0laRSkgewotCQlwYWdlcyA9IF9fdm1hbGxvY19ub2RlKGFycmF5X3NpemUsIGdmcF9tYXNrIHwgX19HRlBfWkVSTywKKwkJcGFnZXMgPSBfX3ZtYWxsb2Nfbm9kZShhcnJheV9zaXplLCAxLCBnZnBfbWFzayB8IF9fR0ZQX1pFUk8sCiAJCQkJUEFHRV9LRVJORUwsIG5vZGUsIGNhbGxlcik7CiAJCWFyZWEtPmZsYWdzIHw9IFZNX1ZQQUdFUzsKIAl9IGVsc2UgewpAQCAtMTQ3Niw2ICsxNDc3LDcgQEAKIC8qKgogICoJX192bWFsbG9jX25vZGUgIC0gIGFsbG9jYXRlIHZpcnR1YWxseSBjb250aWd1b3VzIG1lbW9yeQogICoJQHNpemU6CQlhbGxvY2F0aW9uIHNpemUKKyAqCUBhbGlnbjoJCWRlc2lyZWQgYWxpZ25tZW50CiAgKglAZ2ZwX21hc2s6CWZsYWdzIGZvciB0aGUgcGFnZSBsZXZlbCBhbGxvY2F0b3IKICAqCUBwcm90OgkJcHJvdGVjdGlvbiBtYXNrIGZvciB0aGUgYWxsb2NhdGVkIHBhZ2VzCiAgKglAbm9kZToJCW5vZGUgdG8gdXNlIGZvciBhbGxvY2F0aW9uIG9yIC0xCkBAIC0xNDg1LDggKzE0ODcsOSBAQAogICoJYWxsb2NhdG9yIHdpdGggQGdmcF9tYXNrIGZsYWdzLiAgTWFwIHRoZW0gaW50byBjb250aWd1b3VzCiAgKglrZXJuZWwgdmlydHVhbCBzcGFjZSwgdXNpbmcgYSBwYWdldGFibGUgcHJvdGVjdGlvbiBvZiBAcHJvdC4KICAqLwotc3RhdGljIHZvaWQgKl9fdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QsCi0JCQkJCQlpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKQorc3RhdGljIHZvaWQgKl9fdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCSAgICBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKKwkJCSAgICBpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKQogewogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdm9pZCAqYWRkcjsKQEAgLTE0OTYsOCArMTQ5OSw4IEBACiAJaWYgKCFzaXplIHx8IChzaXplID4+IFBBR0VfU0hJRlQpID4gdG90YWxyYW1fcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCi0JYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBWTV9BTExPQywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCi0JCQkJCQlub2RlLCBnZnBfbWFzaywgY2FsbGVyKTsKKwlhcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGFsaWduLCBWTV9BTExPQywgVk1BTExPQ19TVEFSVCwKKwkJCQkgIFZNQUxMT0NfRU5ELCBub2RlLCBnZnBfbWFzaywgY2FsbGVyKTsKIAogCWlmICghYXJlYSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNTE2LDcgKzE1MTksNyBAQAogCiB2b2lkICpfX3ZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCkKIHsKLQlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgZ2ZwX21hc2ssIHByb3QsIC0xLAorCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCAxLCBnZnBfbWFzaywgcHJvdCwgLTEsCiAJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woX192bWFsbG9jKTsKQEAgLTE1MzIsNyArMTUzNSw3IEBACiAgKi8KIHZvaWQgKnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSwgUEFHRV9LRVJORUwsCisJcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTCwKIAkJCQkJLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHZtYWxsb2MpOwpAQCAtMTU0OSw3ICsxNTUyLDggQEAKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXZvaWQgKnJldDsKIAotCXJldCA9IF9fdm1hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTywKKwlyZXQgPSBfX3ZtYWxsb2Nfbm9kZShzaXplLCBTSE1MQkEsCisJCQkgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTywKIAkJCSAgICAgUEFHRV9LRVJORUwsIC0xLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCWlmIChyZXQpIHsKIAkJYXJlYSA9IGZpbmRfdm1fYXJlYShyZXQpOwpAQCAtMTU3Miw3ICsxNTc2LDcgQEAKICAqLwogdm9pZCAqdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5vZGUpCiB7Ci0JcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTCwKKwlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgMSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sIFBBR0VfS0VSTkVMLAogCQkJCQlub2RlLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTCh2bWFsbG9jX25vZGUpOwpAQCAtMTU5NSw3ICsxNTk5LDcgQEAKIAogdm9pZCAqdm1hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sIFBBR0VfS0VSTkVMX0VYRUMsCisJcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTF9FWEVDLAogCQkJICAgICAgLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKQEAgLTE2MTYsNyArMTYyMCw3IEBACiAgKi8KIHZvaWQgKnZtYWxsb2NfMzIodW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCBHRlBfVk1BTExPQzMyLCBQQUdFX0tFUk5FTCwKKwlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgMSwgR0ZQX1ZNQUxMT0MzMiwgUEFHRV9LRVJORUwsCiAJCQkgICAgICAtMSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY18zMik7CkBAIC0xNjMzLDcgKzE2MzcsNyBAQAogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdm9pZCAqcmV0OwogCi0JcmV0ID0gX192bWFsbG9jX25vZGUoc2l6ZSwgR0ZQX1ZNQUxMT0MzMiB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMLAorCXJldCA9IF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9WTUFMTE9DMzIgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCwKIAkJCSAgICAgLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJaWYgKHJldCkgewogCQlhcmVhID0gZmluZF92bV9hcmVhKHJldCk7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDEyMTljZWIuLjc3N2FmNTcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC01NDQsNiArNTQ0LDE2IEBACiAJCSAqLwogCQlscnUgPSBMUlVfVU5FVklDVEFCTEU7CiAJCWFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3QocGFnZSk7CisJCS8qCisJCSAqIFdoZW4gcmFjaW5nIHdpdGggYW4gbWxvY2sgY2xlYXJpbmcgKHBhZ2UgaXMKKwkJICogdW5sb2NrZWQpLCBtYWtlIHN1cmUgdGhhdCBpZiB0aGUgb3RoZXIgdGhyZWFkIGRvZXMKKwkJICogbm90IG9ic2VydmUgb3VyIHNldHRpbmcgb2YgUEdfbHJ1IGFuZCBmYWlscworCQkgKiBpc29sYXRpb24sIHdlIHNlZSBQR19tbG9ja2VkIGNsZWFyZWQgYmVsb3cgYW5kIG1vdmUKKwkJICogdGhlIHBhZ2UgYmFjayB0byB0aGUgZXZpY3RhYmxlIGxpc3QuCisJCSAqCisJCSAqIFRoZSBvdGhlciBzaWRlIGlzIFRlc3RDbGVhclBhZ2VNbG9ja2VkKCkuCisJCSAqLworCQlzbXBfbWIoKTsKIAl9CiAKIAkvKgpAQCAtMTA4OCw3ICsxMDk4LDcgQEAKIAlpbnQgbHVtcHlfcmVjbGFpbSA9IDA7CiAKIAl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQoem9uZSwgZmlsZSwgc2MpKSkgewotCQljb25nZXN0aW9uX3dhaXQoV1JJVEUsIEhaLzEwKTsKKwkJY29uZ2VzdGlvbl93YWl0KEJMS19SV19BU1lOQywgSFovMTApOwogCiAJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KIAkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQpAQCAtMTM1Niw3ICsxMzY2LDcgQEAKIAkJCSAqIElPLCBwbHVzIEpWTSBjYW4gY3JlYXRlIGxvdHMgb2YgYW5vbiBWTV9FWEVDIHBhZ2VzLAogCQkJICogc28gd2UgaWdub3JlIHRoZW0gaGVyZS4KIAkJCSAqLwotCQkJaWYgKCh2bV9mbGFncyAmIFZNX0VYRUMpICYmICFQYWdlQW5vbihwYWdlKSkgeworCQkJaWYgKCh2bV9mbGFncyAmIFZNX0VYRUMpICYmIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSkgewogCQkJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZsX2FjdGl2ZSk7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0xNzA5LDEwICsxNzE5LDEwIEBACiAgKgogICogSWYgdGhlIGNhbGxlciBpcyAhX19HRlBfRlMgdGhlbiB0aGUgcHJvYmFiaWxpdHkgb2YgYSBmYWlsdXJlIGlzIHJlYXNvbmFibHkKICAqIGhpZ2ggLSB0aGUgem9uZSBtYXkgYmUgZnVsbCBvZiBkaXJ0eSBvciB1bmRlci13cml0ZWJhY2sgcGFnZXMsIHdoaWNoIHRoaXMKLSAqIGNhbGxlciBjYW4ndCBkbyBtdWNoIGFib3V0LiAgV2Uga2ljayBwZGZsdXNoIGFuZCB0YWtlIGV4cGxpY2l0IG5hcHMgaW4gdGhlCi0gKiBob3BlIHRoYXQgc29tZSBvZiB0aGVzZSBwYWdlcyBjYW4gYmUgd3JpdHRlbi4gIEJ1dCBpZiB0aGUgYWxsb2NhdGluZyB0YXNrCi0gKiBob2xkcyBmaWxlc3lzdGVtIGxvY2tzIHdoaWNoIHByZXZlbnQgd3JpdGVvdXQgdGhpcyBtaWdodCBub3Qgd29yaywgYW5kIHRoZQotICogYWxsb2NhdGlvbiBhdHRlbXB0IHdpbGwgZmFpbC4KKyAqIGNhbGxlciBjYW4ndCBkbyBtdWNoIGFib3V0LiAgV2Uga2ljayB0aGUgd3JpdGViYWNrIHRocmVhZHMgYW5kIHRha2UgZXhwbGljaXQKKyAqIG5hcHMgaW4gdGhlIGhvcGUgdGhhdCBzb21lIG9mIHRoZXNlIHBhZ2VzIGNhbiBiZSB3cml0dGVuLiAgQnV0IGlmIHRoZQorICogYWxsb2NhdGluZyB0YXNrIGhvbGRzIGZpbGVzeXN0ZW0gbG9ja3Mgd2hpY2ggcHJldmVudCB3cml0ZW91dCB0aGlzIG1pZ2h0IG5vdAorICogd29yaywgYW5kIHRoZSBhbGxvY2F0aW9uIGF0dGVtcHQgd2lsbCBmYWlsLgogICoKICAqIHJldHVybnM6CTAsIGlmIG5vIHBhZ2VzIHJlY2xhaW1lZAogICogCQllbHNlLCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHJlY2xhaW1lZApkaWZmIC0tZ2l0IGEvbmV0LzlwL2NsaWVudC5jIGIvbmV0LzlwL2NsaWVudC5jCmluZGV4IDViZjVmMjIuLjhhZjk1YjIgMTAwNjQ0Ci0tLSBhL25ldC85cC9jbGllbnQuYworKysgYi9uZXQvOXAvY2xpZW50LmMKQEAgLTU4MiwxMSArNTgyLDkgQEAKIAogCW1lbXNldCgmZmlkLT5xaWQsIDAsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CiAJZmlkLT5tb2RlID0gLTE7Ci0JZmlkLT5yZGlyX2Zwb3MgPSAwOwogCWZpZC0+dWlkID0gY3VycmVudF9mc3VpZCgpOwogCWZpZC0+Y2xudCA9IGNsbnQ7Ci0JZmlkLT5hdXggPSBOVUxMOwotCisJZmlkLT5yZGlyID0gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xudC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkKCZmaWQtPmZsaXN0LCAmY2xudC0+ZmlkbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xudC0+bG9jaywgZmxhZ3MpOwpAQCAtNjA5LDYgKzYwNyw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsbnQtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmZmlkLT5mbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xudC0+bG9jaywgZmxhZ3MpOworCWtmcmVlKGZpZC0+cmRpcik7CiAJa2ZyZWUoZmlkKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCmluZGV4IGIyZTA3ZjAuLmVhMWUzZGEgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc192aXJ0aW8uYworKysgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvXzlwLmg+CiAKICNkZWZpbmUgVklSVFFVRVVFX05VTQkxMjgKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggNmViOGQ0Ny4uNTRjNjM0ZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTM2Myw2ICszNjMsNyBAQAogCQkJCSAgKiBkZXZpY2UgbmFtZSAobm90IHdoZW4gdGhlIGluamVjdCBpcwogCQkJCSAgKiBzdGFydGVkIGFzIGl0IHVzZWQgdG8gZG8uKQogCQkJCSAgKi8KKwljaGFyIG9kZXZuYW1lWzMyXTsKIAlzdHJ1Y3QgZmxvd19zdGF0ZSAqZmxvd3M7CiAJdW5zaWduZWQgY2Zsb3dzOwkvKiBDb25jdXJyZW50IGZsb3dzIChjb25maWcpICovCiAJdW5zaWduZWQgbGZsb3c7CQkvKiBGbG93IGxlbmd0aCAgKGNvbmZpZykgKi8KQEAgLTUyOCw3ICs1MjksNyBAQAogCXNlcV9wcmludGYoc2VxLAogCQkgICAiICAgICBmcmFnczogJWQgIGRlbGF5OiAlbGx1ICBjbG9uZV9za2I6ICVkICBpZm5hbWU6ICVzXG4iLAogCQkgICBwa3RfZGV2LT5uZnJhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtPmRlbGF5LAotCQkgICBwa3RfZGV2LT5jbG9uZV9za2IsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICBwa3RfZGV2LT5jbG9uZV9za2IsIHBrdF9kZXYtPm9kZXZuYW1lKTsKIAogCXNlcV9wcmludGYoc2VxLCAiICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcbiIsIHBrdF9kZXYtPmNmbG93cywKIAkJICAgcGt0X2Rldi0+bGZsb3cpOwpAQCAtMTY4OCwxMyArMTY4OSwxMyBAQAogCWlmX2xvY2sodCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwa3RfZGV2LCAmdC0+aWZfbGlzdCwgbGlzdCkKIAkJaWYgKHBrdF9kZXYtPnJ1bm5pbmcpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIlxuU3RvcHBlZDogIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBrdF9kZXYsICZ0LT5pZl9saXN0LCBsaXN0KQogCQlpZiAoIXBrdF9kZXYtPnJ1bm5pbmcpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAKIAlpZiAodC0+cmVzdWx0WzBdKQogCQlzZXFfcHJpbnRmKHNlcSwgIlxuUmVzdWx0OiAlc1xuIiwgdC0+cmVzdWx0KTsKQEAgLTE5OTQsNyArMTk5NSw3IEBACiAJCSAgICAgICAicXVldWVfbWFwX21pbiAoemVyby1iYXNlZCkgKCVkKSBleGNlZWRzIHZhbGlkIHJhbmdlICIKIAkJICAgICAgICJbMCAtICVkXSBmb3IgKCVkKSBxdWV1ZXMgb24gJXMsIHJlc2V0dGluZ1xuIiwKIAkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9taW4sIChudHhxID86IDEpIC0gMSwgbnR4cSwKLQkJICAgICAgIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICAgICAgcGt0X2Rldi0+b2Rldm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWluID0gbnR4cSAtIDE7CiAJfQogCWlmIChwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4ID49IG50eHEpIHsKQEAgLTIwMDIsNyArMjAwMyw3IEBACiAJCSAgICAgICAicXVldWVfbWFwX21heCAoemVyby1iYXNlZCkgKCVkKSBleGNlZWRzIHZhbGlkIHJhbmdlICIKIAkJICAgICAgICJbMCAtICVkXSBmb3IgKCVkKSBxdWV1ZXMgb24gJXMsIHJlc2V0dGluZ1xuIiwKIAkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9tYXgsIChudHhxID86IDEpIC0gMSwgbnR4cSwKLQkJICAgICAgIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICAgICAgcGt0X2Rldi0+b2Rldm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4ID0gbnR4cSAtIDE7CiAJfQogCkBAIC0zMjYyLDcgKzMyNjMsNyBAQAogCiAJaWYgKCFwa3RfZGV2LT5ydW5uaW5nKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBrdGdlbjogaW50ZXJmYWNlOiAlcyBpcyBhbHJlYWR5ICIKLQkJICAgICAgICJzdG9wcGVkXG4iLCBwa3RfZGV2LT5vZGV2LT5uYW1lKTsKKwkJICAgICAgICJzdG9wcGVkXG4iLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzQ2NCw3ICszNDY1LDcgQEAKIAlkZWZhdWx0OiAvKiBEcml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gcmV0dXJuIG90aGVyIHZhbHVlcyEgKi8KIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByX2luZm8oInBrdGdlbjogJXMgeG1pdCBlcnJvcjogJWRcbiIsCi0JCQkJb2Rldi0+bmFtZSwgcmV0KTsKKwkJCQlwa3RfZGV2LT5vZGV2bmFtZSwgcmV0KTsKIAkJcGt0X2Rldi0+ZXJyb3JzKys7CiAJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSBORVRERVZfVFhfTE9DS0VEOgpAQCAtMzU3Miw3ICszNTczLDcgQEAKIAlpZl9sb2NrKHQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdC0+aWZfbGlzdCwgbGlzdCkKLQkJaWYgKHN0cm5jbXAocC0+b2Rldi0+bmFtZSwgaWZuYW1lLCBJRk5BTVNJWikgPT0gMCkgeworCQlpZiAoc3RybmNtcChwLT5vZGV2bmFtZSwgaWZuYW1lLCBJRk5BTVNJWikgPT0gMCkgewogCQkJcGt0X2RldiA9IHA7CiAJCQlicmVhazsKIAkJfQpAQCAtMzYyOCw2ICszNjI5LDcgQEAKIAlpZiAoIXBrdF9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJc3RyY3B5KHBrdF9kZXYtPm9kZXZuYW1lLCBpZm5hbWUpOwogCXBrdF9kZXYtPmZsb3dzID0gdm1hbGxvYyhNQVhfQ0ZMT1dTICogc2l6ZW9mKHN0cnVjdCBmbG93X3N0YXRlKSk7CiAJaWYgKHBrdF9kZXYtPmZsb3dzID09IE5VTEwpIHsKIAkJa2ZyZWUocGt0X2Rldik7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9hdHRhY2guYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCmluZGV4IGVhZmMwMTAuLjNjMTc1NDAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxtcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYwppbmRleCA2MjExNjgyLi4zMTVlYWQzIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCmluZGV4IDdiNmI2MzEuLmQzNDAxMTAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jCmluZGV4IGNmOWE0YjUuLmNjY2MyZTkgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0X2lyZGEuYworKysgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9pcmRhLmMKQEAgLTksNiArOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImlybmV0X2lyZGEuaCIJCS8qIFByaXZhdGUgaGVhZGVyICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYwppbmRleCA2OGNiY2IxLi43ZGVhODgyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYworKysgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYwpAQCAtMTMsNiArMTMsNyBAQAogICoJMikgYXMgYSBjb250cm9sIGNoYW5uZWwgKHdyaXRlIGNvbW1hbmRzLCByZWFkIGV2ZW50cykKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgImlybmV0X3BwcC5oIgkJLyogUHJpdmF0ZSBoZWFkZXIgKi8KIC8qIFBsZWFzZSBwdXQgb3RoZXIgaGVhZGVycyBpbiBpcm5ldC5oIC0gVGhhbmtzICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYwppbmRleCBhNTkwNDNmYi4uNDU2NjcwNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jCkBAIC02LDYgKzYsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggMGNkZmIzOC4uYjkxNjhjMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKaW5kZXggYzkzNDk0Zi4uZDY1ZDM0OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCkBAIC0xMjgsOSArMTI4LDggQEAKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgdm9pZCAqc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLQlfX2FjcXVpcmVzKFJDVSkKIHsKLQlyY3VfcmVhZF9sb2NrKCk7CisJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKIAogCWlmICgqcG9zID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCiAJCXJldHVybiBOVUxMOwpAQCAtMTQ5LDkgKzE0OCw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHNlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKLQlfX3JlbGVhc2VzKFJDVSkKIHsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQpAQCAtMTYxLDcgKzE1OSw3IEBACiAJc3RydWN0IG5mX2xvZ2dlciAqdDsKIAlpbnQgcmV0OwogCi0JbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbKnBvc10pOworCWxvZ2dlciA9IG5mX2xvZ2dlcnNbKnBvc107CiAKIAlpZiAoIWxvZ2dlcikKIAkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJTJsbGQgTk9ORSAoIiwgKnBvcyk7CkBAIC0xNzEsMjIgKzE2OSwxNiBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZuZl9sb2dnZXJzX2xbKnBvc10sIGxpc3RbKnBvc10pIHsKIAkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJXMiLCB0LT5uYW1lKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJCWlmICgmdC0+bGlzdFsqcG9zXSAhPSBuZl9sb2dnZXJzX2xbKnBvc10ucHJldikgewogCQkJcmV0ID0gc2VxX3ByaW50ZihzLCAiLCIpOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJfQogCQl9CiAJfQotCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKIAogCXJldHVybiBzZXFfcHJpbnRmKHMsICIpXG4iKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYwppbmRleCAyZTgwODllLi4yNzczYmU2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogCXByaXYgPSBrbWFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwogCWlmIChwcml2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgb2Ygc3RhdGUuICovCiAJci0+bWFzdGVyID0gcHJpdjsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCmluZGV4IDYzZTE5MDUuLjRkMWE0MWIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9vc2YuYwpAQCAtMTE4LDcgKzExOCw3IEBACiB7CiAJc3RydWN0IHh0X29zZl91c2VyX2ZpbmdlciAqZjsKIAlzdHJ1Y3QgeHRfb3NmX2ZpbmdlciAqc2Y7Ci0JaW50IGVyciA9IEVOT0VOVDsKKwlpbnQgZXJyID0gLUVOT0VOVDsKIAogCWlmICghb3NmX2F0dHJzW09TRl9BVFRSX0ZJTkdFUl0pCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggNDhiMThkYS4uZjJkMTE2YSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0yMDgxLDcgKzIwODEsNyBAQAogCQlhdG9taWNfZGVjKCZwa3Rfc2soc2spLT5tYXBwZWQpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBhY2tldF9tbWFwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGFja2V0X21tYXBfb3BzID0gewogCS5vcGVuCT0JcGFja2V0X21tX29wZW4sCiAJLmNsb3NlCT0JcGFja2V0X21tX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL25ldC9yZmtpbGwvY29yZS5jIGIvbmV0L3Jma2lsbC9jb3JlLmMKaW5kZXggN2NiNTdmZi4uYTAwMWY3YyAxMDA2NDQKLS0tIGEvbmV0L3Jma2lsbC9jb3JlLmMKKysrIGIvbmV0L3Jma2lsbC9jb3JlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCmluZGV4IDBjZjVlOGMuLjNmYTU3NTEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNfeHBydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9kZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9ycGNfcmRtYS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CiAjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCA0NWIyYmUzLi5hNTk1ZjcxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgIm5sODAyMTEuaCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYwppbmRleCA5Y2Y4MGExLi4yNmZhYjMzIDEwMDY0NAotLS0gYS9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtc2FtcGxlLmMKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jCkBAIC0yOCw3ICsyOCw3IEBACiAJcmV0dXJuIC1FUEVSTTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWFya19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYXJrX29wcyA9IHsKIAkub3BlbiA9IG15X29wZW4sCiB9OwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL0tidWlsZC5pbmNsdWRlIGIvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQppbmRleCA0ZjljMTkwLi5jNjdlNzNlIDEwMDY0NAotLS0gYS9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCisrKyBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKQEAgLTEwMCw3ICsxMDAsNyBAQAogIyBVc2FnZTogY2ZsYWdzLXkgKz0gJChjYWxsIGFzLWluc3RyLGluc3RyLG9wdGlvbjEsb3B0aW9uMikKIAogYXMtaW5zdHIgPSAkKGNhbGwgdHJ5LXJ1bixcCi0JZWNobyAtZSAiJCgxKSIgfCAkKENDKSAkKEtCVUlMRF9BRkxBR1MpIC1jIC14YXNzZW1ibGVyIC1vICIkJFRNUCIgLSwkKDIpLCQoMykpCisJL2Jpbi9lY2hvIC1lICIkKDEpIiB8ICQoQ0MpICQoS0JVSUxEX0FGTEFHUykgLWMgLXhhc3NlbWJsZXIgLW8gIiQkVE1QIiAtLCQoMiksJCgzKSkKIAogIyBjYy1vcHRpb24KICMgVXNhZ2U6IGNmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPXdpbmNoaXAtYzYsLW1hcmNoPWk1ODYpCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmxpYiBiL3NjcmlwdHMvTWFrZWZpbGUubGliCmluZGV4IDdhNzc3ODcuLmZmZGFmYjIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogIyBCemlwMiBhbmQgTFpNQSBkbyBub3QgaW5jbHVkZSBzaXplIGluIGZpbGUuLi4gc28gd2UgaGF2ZSB0byBmYWtlIHRoYXQ7CiAjIGFwcGVuZCB0aGUgc2l6ZSBhcyBhIDMyLWJpdCBsaXR0bGVlbmRpYW4gbnVtYmVyIGFzIGd6aXAgZG9lcy4KLXNpemVfYXBwZW5kID0gZWNobyAtbmUgJChzaGVsbAkJCQkJCVwKK3NpemVfYXBwZW5kID0gL2Jpbi9lY2hvIC1uZSAkKHNoZWxsCQkJCQlcCiBkZWNfc2l6ZT0wOwkJCQkJCQkJXAogZm9yIEYgaW4gJDE7IGRvCQkJCQkJCQlcCiAJZnNpemU9JCQoc3RhdCAtYyAiJXMiICQkRik7CQkJCQlcCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNra2NvbmZpZ3N5bWJvbHMuc2ggYi9zY3JpcHRzL2NoZWNra2NvbmZpZ3N5bWJvbHMuc2gKaW5kZXggMzk2NzdjOC4uNDZiZTNjNSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja2tjb25maWdzeW1ib2xzLnNoCisrKyBiL3NjcmlwdHMvY2hlY2trY29uZmlnc3ltYm9scy5zaApAQCAtOSw3ICs5LDcgQEAKICMgRG9pbmcgdGhpcyBvbmNlIGF0IHRoZSBiZWdpbm5pbmcgc2F2ZXMgYSBsb3Qgb2YgdGltZSwgb24gYSBjYWNoZS1ob3QgdHJlZS4KIEtjb25maWdzPSJgZmluZCAuIC1uYW1lICdLY29uZmlnJyAtbyAtbmFtZSAnS2NvbmZpZypbXn5dJ2AiCiAKLWVjaG8gLWUgIkZpbGUgbGlzdCBcdHVuZGVmaW5lZCBzeW1ib2wgdXNlZCIKKy9iaW4vZWNobyAtZSAiRmlsZSBsaXN0IFx0dW5kZWZpbmVkIHN5bWJvbCB1c2VkIgogZmluZCAkcGF0aHMgLW5hbWUgJyouW2NoU10nIC1vIC1uYW1lICdNYWtlZmlsZScgLW8gLW5hbWUgJ01ha2VmaWxlKltefl0nfCB3aGlsZSByZWFkIGkKIGRvCiAJIyBPdXRwdXQgdGhlIGJhcmUgS2NvbmZpZyB2YXJpYWJsZSBhbmQgdGhlIGZpbGVuYW1lOyB0aGUgX01PRFVMRSBwYXJ0IGF0CkBAIC01NCw2ICs1NCw2IEBACiAJIyBiZXlvbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzY3JpcHQuCiAJc3ltYl9iYXJlPWBlY2hvICRzeW1iIHwgc2VkIC1lICdzL19NT0RVTEUvLydgCiAJaWYgISBncmVwIC1xICJcPCRzeW1iX2JhcmVcPiIgJEtjb25maWdzOyB0aGVuCi0JCWVjaG8gLWUgIiRmaWxlczogXHQkc3ltYiIKKwkJL2Jpbi9lY2hvIC1lICIkZmlsZXM6IFx0JHN5bWIiCiAJZmkKIGRvbmV8c29ydApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCmluZGV4IDg3YmJiOGIuLmJjNDExNGYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbAorKysgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKQEAgLTIsNyArMiw3IEBACiAjIChjKSAyMDAxLCBEYXZlIEpvbmVzLiA8ZGF2ZWpAcmVkaGF0LmNvbT4gKHRoZSBmaWxlIGhhbmRsaW5nIGJpdCkKICMgKGMpIDIwMDUsIEpvZWwgU2Nob3BwIDxqc2Nob3BwQGF1c3Rpbi5pYm0uY29tPiAodGhlIHVnbHkgYml0KQogIyAoYykgMjAwNywyMDA4LCBBbmR5IFdoaXRjcm9mdCA8YXB3QHVrLmlibS5jb20+IChuZXcgY29uZGl0aW9ucywgdGVzdCBzdWl0ZSkKLSMgKGMpIDIwMDgsIEFuZHkgV2hpdGNyb2Z0IDxhcHdAY2Fub25pY2FsLmNvbT4KKyMgKGMpIDIwMDgsMjAwOSwgQW5keSBXaGl0Y3JvZnQgPGFwd0BjYW5vbmljYWwuY29tPgogIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKIAogdXNlIHN0cmljdDsKQEAgLTEwLDcgKzEwLDcgQEAKIG15ICRQID0gJDA7CiAkUCA9fiBzQC4qL0BAZzsKIAotbXkgJFYgPSAnMC4yOSc7CitteSAkViA9ICcwLjMwJzsKIAogdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2KTsKIApAQCAtMTMwLDcgKzEzMCwxMCBAQAogCiBteSAkZW1pdHRlZF9jb3JydXB0ID0gMDsKIAotb3VyICRJZGVudCAgICAgICA9IHFye1tBLVphLXpfXVtBLVphLXpcZF9dKn07CitvdXIgJElkZW50CT0gcXJ7CisJCQlbQS1aYS16X11bQS1aYS16XGRfXSoKKwkJCSg/OlxzKlwjXCNccypbQS1aYS16X11bQS1aYS16XGRfXSopKgorCQl9eDsKIG91ciAkU3RvcmFnZQk9IHFye2V4dGVybnxzdGF0aWN8YXNtbGlua2FnZX07CiBvdXIgJFNwYXJzZQk9IHFyewogCQkJX191c2VyfApAQCAtOTk3LDIzICsxMDAwLDI1IEBACiAKIHN1YiBwb3NzaWJsZSB7CiAJbXkgKCRwb3NzaWJsZSwgJGxpbmUpID0gQF87Ci0KLQlwcmludCAiQ0hFQ0s8JHBvc3NpYmxlPiAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlID4gMik7Ci0JaWYgKCRwb3NzaWJsZSAhfiAvKD86CisJbXkgJG5vdFBlcm1pdHRlZCA9IHFyeyg/OgogCQleKD86CiAJCQkkTW9kaWZpZXJ8CiAJCQkkU3RvcmFnZXwKIAkJCSRUeXBlfAotCQkJREVGSU5FX1xTK3wKKwkJCURFRklORV9cUysKKwkJKSR8CisJCV4oPzoKIAkJCWdvdG98CiAJCQlyZXR1cm58CiAJCQljYXNlfAogCQkJZWxzZXwKIAkJCWFzbXxfX2FzbV9ffAogCQkJZG8KLQkJKSR8CisJCSkoPzpcc3wkKXwKIAkJXig/OnR5cGVkZWZ8c3RydWN0fGVudW0pXGIKLQkgICAgKS94KSB7CisJICAgICl9eDsKKwl3YXJuICJDSEVDSzwkcG9zc2libGU+ICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUgPiAyKTsKKwlpZiAoJHBvc3NpYmxlICF+ICRub3RQZXJtaXR0ZWQpIHsKIAkJIyBDaGVjayBmb3IgbW9kaWZpZXJzLgogCQkkcG9zc2libGUgPX4gcy9ccyokU3RvcmFnZVxzKi8vZzsKIAkJJHBvc3NpYmxlID1+IHMvXHMqJFNwYXJzZVxzKi8vZzsKQEAgLTEwMjIsOCArMTAyNywxMCBAQAogCQl9IGVsc2lmICgkcG9zc2libGUgPX4gL1xzLykgewogCQkJJHBvc3NpYmxlID1+IHMvXHMqJFR5cGVccyovL2c7CiAJCQlmb3IgbXkgJG1vZGlmaWVyIChzcGxpdCgnICcsICRwb3NzaWJsZSkpIHsKLQkJCQl3YXJuICJNT0RJRklFUjogJG1vZGlmaWVyICgkcG9zc2libGUpICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUpOwotCQkJCXB1c2goQG1vZGlmaWVyTGlzdCwgJG1vZGlmaWVyKTsKKwkJCQlpZiAoJG1vZGlmaWVyICF+ICRub3RQZXJtaXR0ZWQpIHsKKwkJCQkJd2FybiAiTU9ESUZJRVI6ICRtb2RpZmllciAoJHBvc3NpYmxlKSAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlKTsKKwkJCQkJcHVzaChAbW9kaWZpZXJMaXN0LCAkbW9kaWZpZXIpOworCQkJCX0KIAkJCX0KIAogCQl9IGVsc2UgewpAQCAtMTEzOCw2ICsxMTQ1LDcgQEAKIAkjIHN1cHByZXNzaW9uIGZsYWdzCiAJbXkgJXN1cHByZXNzX2lmYnJhY2VzOwogCW15ICVzdXBwcmVzc193aGlsZXRyYWlsZXJzOworCW15ICVzdXBwcmVzc19leHBvcnQ7CiAKIAkjIFByZS1zY2FuIHRoZSBwYXRjaCBzYW5pdGl6aW5nIHRoZSBsaW5lcy4KIAkjIFByZS1zY2FuIHRoZSBwYXRjaCBsb29raW5nIGZvciBhbnkgX19zZXR1cCBkb2N1bWVudGF0aW9uLgpAQCAtMTIzMCw3ICsxMjM4LDYgQEAKIAkJJGxpbmVucisrOwogCiAJCW15ICRyYXdsaW5lID0gJHJhd2xpbmVzWyRsaW5lbnIgLSAxXTsKLQkJbXkgJGh1bmtfbGluZSA9ICgkcmVhbGNudCAhPSAwKTsKIAogI2V4dHJhY3QgdGhlIGxpbmUgcmFuZ2UgaW4gdGhlIGZpbGUgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQKIAkJaWYgKCRsaW5lPX4vXlxAXEAgLVxkKyg/OixcZCspPyBcKyhcZCspKCwoXGQrKSk/IFxAXEAvKSB7CkBAIC0xMjQ3LDYgKzEyNTQsNyBAQAogCiAJCQklc3VwcHJlc3NfaWZicmFjZXMgPSAoKTsKIAkJCSVzdXBwcmVzc193aGlsZXRyYWlsZXJzID0gKCk7CisJCQklc3VwcHJlc3NfZXhwb3J0ID0gKCk7CiAJCQluZXh0OwogCiAjIHRyYWNrIHRoZSBsaW5lIG51bWJlciBhcyB3ZSBtb3ZlIHRocm91Z2ggdGhlIGh1bmssIG5vdGUgdGhhdApAQCAtMTI3MCw2ICsxMjc4LDggQEAKIAkJCSRyZWFsY250LS07CiAJCX0KIAorCQlteSAkaHVua19saW5lID0gKCRyZWFsY250ICE9IDApOworCiAjbWFrZSB1cCB0aGUgaGFuZGxlIGZvciBhbnkgZXJyb3Igd2UgcmVwb3J0IG9uIHRoaXMgbGluZQogCQkkcHJlZml4ID0gIiRmaWxlbmFtZTokcmVhbGxpbmU6ICIgaWYgKCRlbWFjcyAmJiAkZmlsZSk7CiAJCSRwcmVmaXggPSAiJGZpbGVuYW1lOiRsaW5lbnI6ICIgaWYgKCRlbWFjcyAmJiAhJGZpbGUpOwpAQCAtMTQyMCwxMyArMTQzMCwyMiBAQAogCQl9CiAKICMgQ2hlY2sgZm9yIHBvdGVudGlhbCAnYmFyZScgdHlwZXMKLQkJbXkgKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpOworCQlteSAoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQsICRvZmZfbmV4dCwKKwkJICAgICRyZWFsbGluZV9uZXh0KTsKIAkJaWYgKCRyZWFsY250ICYmICRsaW5lID1+IC8uXHMqXFMvKSB7CiAJCQkoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQsICRvZmZfbmV4dCkgPQogCQkJCWN0eF9zdGF0ZW1lbnRfYmxvY2soJGxpbmVuciwgJHJlYWxjbnQsIDApOwogCQkJJHN0YXQgPX4gcy9cbi4vXG4gL2c7CiAJCQkkY29uZCA9fiBzL1xuLi9cbiAvZzsKIAorCQkJIyBGaW5kIHRoZSByZWFsIG5leHQgbGluZS4KKwkJCSRyZWFsbGluZV9uZXh0ID0gJGxpbmVfbnJfbmV4dDsKKwkJCWlmIChkZWZpbmVkICRyZWFsbGluZV9uZXh0ICYmCisJCQkgICAgKCFkZWZpbmVkICRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdIHx8CisJCQkgICAgIHN1YnN0cigkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSwgJG9mZl9uZXh0KSA9fiAvXlxzKiQvKSkgeworCQkJCSRyZWFsbGluZV9uZXh0Kys7CisJCQl9CisKIAkJCW15ICRzID0gJHN0YXQ7CiAJCQkkcyA9fiBzL3suKiQvL3M7CiAKQEAgLTE2NjEsOCArMTY4MCw4IEBACiAJCX0KIAogIyBjaGVjayBmb3IgaW5pdGlhbGlzYXRpb24gdG8gYWdncmVnYXRlcyBvcGVuIGJyYWNlIG9uIHRoZSBuZXh0IGxpbmUKLQkJaWYgKCRwcmV2bGluZSA9fiAvJERlY2xhcmVccyokSWRlbnRccyo9XHMqJC8gJiYKLQkJICAgICRsaW5lID1+IC9eLlxzKnsvKSB7CisJCWlmICgkbGluZSA9fiAvXi5ccyp7LyAmJgorCQkgICAgJHByZXZsaW5lID1+IC8oPzpefFtePV0pPVxzKiQvKSB7CiAJCQlFUlJPUigidGhhdCBvcGVuIGJyYWNlIHsgc2hvdWxkIGJlIG9uIHRoZSBwcmV2aW91cyBsaW5lXG4iIC4gJGhlcmVwcmV2KTsKIAkJfQogCkBAIC0xNjg3LDIxICsxNzA2LDQwIEBACiAJCSRsaW5lID1+IHNALy8uKkBAOwogCQkkb3BsaW5lID1+IHNALy8uKkBAOwogCi0jRVhQT1JUX1NZTUJPTCBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IGl0cyBmdW5jdGlvbiBjbG9zaW5nIH0uCi0JCWlmICgoJGxpbmUgPX4gL0VYUE9SVF9TWU1CT0wuKlwoKC4qKVwpLykgfHwKLQkJICAgICgkbGluZSA9fiAvRVhQT1JUX1VOVVNFRF9TWU1CT0wuKlwoKC4qKVwpLykpIHsKKyMgRVhQT1JUX1NZTUJPTCBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IHRoZSB0aGluZyBpdCBpcyBleHBvcnRpbmcsIGNvbnNpZGVyCisjIHRoZSB3aG9sZSBzdGF0ZW1lbnQuCisjcHJpbnQgIkFQVyA8JGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0+XG4iOworCQlpZiAoZGVmaW5lZCAkcmVhbGxpbmVfbmV4dCAmJgorCQkgICAgZXhpc3RzICRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdICYmCisJCSAgICAhZGVmaW5lZCAkc3VwcHJlc3NfZXhwb3J0eyRyZWFsbGluZV9uZXh0fSAmJgorCQkgICAgKCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdID1+IC9FWFBPUlRfU1lNQk9MLipcKCguKilcKS8gfHwKKwkJICAgICAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSA9fiAvRVhQT1JUX1VOVVNFRF9TWU1CT0wuKlwoKC4qKVwpLykpIHsKIAkJCW15ICRuYW1lID0gJDE7Ci0JCQlpZiAoJHByZXZsaW5lICF+IC8oPzoKLQkJCQleLn18CisJCQlpZiAoJHN0YXQgIX4gLyg/OgorCQkJCVxuLn1ccyokfAogCQkJCV4uREVGSU5FXyRJZGVudFwoXFEkbmFtZVxFXCl8CiAJCQkJXi5ERUNMQVJFXyRJZGVudFwoXFEkbmFtZVxFXCl8CiAJCQkJXi5MSVNUX0hFQURcKFxRJG5hbWVcRVwpfAotCQkJCV4uJFR5cGVccypcKFxzKlwqXHMqXFEkbmFtZVxFXHMqXClccypcKHwKLQkJCQlcYlxRJG5hbWVcRSg/OlxzKyRBdHRyaWJ1dGUpP1xzKig/Ojt8PXxcWykKKwkJCQleLig/OiRTdG9yYWdlXHMrKT8kVHlwZVxzKlwoXHMqXCpccypcUSRuYW1lXEVccypcKVxzKlwofAorCQkJCVxiXFEkbmFtZVxFKD86XHMrJEF0dHJpYnV0ZSkqXHMqKD86O3w9fFxbfFwoKQogCQkJICAgICkveCkgewotCQkJCVdBUk4oIkVYUE9SVF9TWU1CT0woZm9vKTsgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24vdmFyaWFibGVcbiIgLiAkaGVyZWN1cnIpOworI3ByaW50ICJGT08gQTwkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXT4gc3RhdDwkc3RhdD4gbmFtZTwkbmFtZT5cbiI7CisJCQkJJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gPSAyOworCQkJfSBlbHNlIHsKKwkJCQkkc3VwcHJlc3NfZXhwb3J0eyRyZWFsbGluZV9uZXh0fSA9IDE7CiAJCQl9CiAJCX0KKwkJaWYgKCFkZWZpbmVkICRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gJiYKKwkJICAgICRwcmV2bGluZSA9fiAvXi5ccyokLyAmJgorCQkgICAgKCRsaW5lID1+IC9FWFBPUlRfU1lNQk9MLipcKCguKilcKS8gfHwKKwkJICAgICAkbGluZSA9fiAvRVhQT1JUX1VOVVNFRF9TWU1CT0wuKlwoKC4qKVwpLykpIHsKKyNwcmludCAiRk9PIEIgPCRsaW5lc1skbGluZW5yIC0gMV0+XG4iOworCQkJJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSA9IDI7CisJCX0KKwkJaWYgKGRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSAmJgorCQkgICAgJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSA9PSAyKSB7CisJCQlXQVJOKCJFWFBPUlRfU1lNQk9MKGZvbyk7IHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgaXRzIGZ1bmN0aW9uL3ZhcmlhYmxlXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQogCiAjIGNoZWNrIGZvciBleHRlcm5hbCBpbml0aWFsaXNlcnMuCiAJCWlmICgkbGluZSA9fiAvXi4kVHlwZVxzKiRJZGVudFxzKig/OlxzKyRNb2RpZmllcikqXHMqPVxzKigwfE5VTEx8ZmFsc2UpXHMqOy8pIHsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZHRjL2RhdGEuYyBiL3NjcmlwdHMvZHRjL2RhdGEuYwppbmRleCBkZDJlM2QzLi5mZTU1NWU4IDEwMDY0NAotLS0gYS9zY3JpcHRzL2R0Yy9kYXRhLmMKKysrIGIvc2NyaXB0cy9kdGMvZGF0YS5jCkBAIC0yMTcsNyArMjE3LDcgQEAKIAlyZXR1cm4gZDsKIH0KIAotc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfbWFya2VycyhzdHJ1Y3QgZGF0YSBkLCBzdHJ1Y3QgbWFya2VyICptKQorc3RhdGljIHN0cnVjdCBkYXRhIGRhdGFfYXBwZW5kX21hcmtlcnMoc3RydWN0IGRhdGEgZCwgc3RydWN0IG1hcmtlciAqbSkKIHsKIAlzdHJ1Y3QgbWFya2VyICoqbXAgPSAmZC5tYXJrZXJzOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubCBiL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sCmluZGV4IDQ0ZGJmZDMuLmE2MjdiYmUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sCisrKyBiL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0EKICAqLwogCi0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgeXlsaW5lbm8KKyVvcHRpb24gbm95eXdyYXAgbm9pbnB1dCBub3VucHV0IHl5bGluZW5vCiAKICV4IElOQ0xVREUKICV4IEJZVEVTVFJJTkcKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkIGIvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQKaW5kZXggYWMzOTJjYi4uZTI3Y2M2MyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIEZMRVhfU0NBTk5FUgogI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgogI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzQKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1CiAjaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAogI2RlZmluZSBGTEVYX0JFVEEKICNlbmRpZgpAQCAtNTQsNyArNTQsNiBAQAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwogCiAvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCiAjaWZuZGVmIElOVDhfTUlOCkBAIC04NSw2ICs4NCw4IEBACiAjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQogI2VuZGlmCiAKKyNlbmRpZiAvKiAhIEM5OSAqLworCiAjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0xNDEsNyArMTQyLDE1IEBACiAKIC8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCiAjaWZuZGVmIFlZX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsuCisgKiBNb3Jlb3ZlciwgWVlfQlVGX1NJWkUgaXMgMipZWV9SRUFEX0JVRl9TSVpFIGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKiBEaXR0byBmb3IgdGhlIF9faWE2NF9fIGNhc2UgYWNjb3JkaW5nbHkuCisgKi8KKyNkZWZpbmUgWVlfQlVGX1NJWkUgMzI3NjgKKyNlbHNlCiAjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYgLyogX19pYTY0X18gKi8KICNlbmRpZgogCiAvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgpAQCAtMTkyLDEzICsyMDEsNiBAQAogCiAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsICh5eXRleHRfcHRyKSAgKQogCi0vKiBUaGUgZm9sbG93aW5nIGlzIGJlY2F1c2Ugd2UgY2Fubm90IHBvcnRhYmx5IGdldCBvdXIgaGFuZHMgb24gc2l6ZV90Ci0gKiAod2l0aG91dCBhdXRvY29uZidzIGhlbHAsIHdoaWNoIGlzbid0IGF2YWlsYWJsZSBiZWNhdXNlIHdlIHdhbnQKLSAqIGZsZXgtZ2VuZXJhdGVkIHNjYW5uZXJzIHRvIGNvbXBpbGUgb24gdGhlaXIgb3duKS4KLSAqIEdpdmVuIHRoYXQgdGhlIHN0YW5kYXJkIGhhcyBkZWNyZWVkIHRoYXQgc2l6ZV90IGV4aXN0cyBzaW5jZSAxOTg5LAotICogSSBndWVzcyB3ZSBjYW4gYWZmb3JkIHRvIGRlcGVuZCBvbiBpdC4gTWFub2ouCi0gKi8KLQogI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAogI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAogdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwpAQCAtNjA0LDYgKzYwNiw3IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQQogICovCisjZGVmaW5lIFlZX05PX0lOUFVUIDEKIAogCiAKQEAgLTYzNCw3ICs2MzcsNyBAQAogCiBzdGF0aWMgdm9pZCBwdXNoX2lucHV0X2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpOwogc3RhdGljIGludCBwb3BfaW5wdXRfZmlsZSh2b2lkKTsKLSNsaW5lIDYzOCAiZHRjLWxleGVyLmxleC5jIgorI2xpbmUgNjQxICJkdGMtbGV4ZXIubGV4LmMiCiAKICNkZWZpbmUgSU5JVElBTCAwCiAjZGVmaW5lIElOQ0xVREUgMQpAQCAtNjU2LDYgKzY1OSwzNSBAQAogCiBzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCApOwogCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhfZGVzdHJveSAodm9pZCApOworCitpbnQgeXlnZXRfZGVidWcgKHZvaWQgKTsKKwordm9pZCB5eXNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgICk7CisKK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgKHZvaWQgKTsKKwordm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgICk7CisKK0ZJTEUgKnl5Z2V0X2luICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfaW4gIChGSUxFICogaW5fc3RyICApOworCitGSUxFICp5eWdldF9vdXQgKHZvaWQgKTsKKwordm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAgKTsKKworaW50IHl5Z2V0X2xlbmcgKHZvaWQgKTsKKworY2hhciAqeXlnZXRfdGV4dCAodm9pZCApOworCitpbnQgeXlnZXRfbGluZW5vICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgICk7CisKIC8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCiAgKiBzZWN0aW9uIDEuCiAgKi8KQEAgLTY4OCw3ICs3MjAsMTIgQEAKIAogLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwogI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NAorI2Vsc2UKICNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYgLyogX19pYTY0X18gKi8KICNlbmRpZgogCiAvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwpAQCAtNjk2LDcgKzczMyw3IEBACiAvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKICAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCiAgKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCisjZGVmaW5lIEVDSE8gZG8geyBpZiAoZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKSkge30gfSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCkBAIC03MDcsNyArNzQ0LDcgQEAKIAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCiAJCXsgXAogCQlpbnQgYyA9ICcqJzsgXAotCQlpbnQgbjsgXAorCQlzaXplX3QgbjsgXAogCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKIAkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCkBAIC03OTEsNyArODI4LDcgQEAKICAgICAKICNsaW5lIDY0ICJkdGMtbGV4ZXIubCIKIAotI2xpbmUgNzk1ICJkdGMtbGV4ZXIubGV4LmMiCisjbGluZSA4MzIgImR0Yy1sZXhlci5sZXguYyIKIAogCWlmICggISh5eV9pbml0KSApCiAJCXsKQEAgLTExMTYsNyArMTE1Myw3IEBACiAjbGluZSAyMjIgImR0Yy1sZXhlci5sIgogRUNITzsKIAlZWV9CUkVBSwotI2xpbmUgMTEyMCAiZHRjLWxleGVyLmxleC5jIgorI2xpbmUgMTE1NyAiZHRjLWxleGVyLmxleC5jIgogCiAJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgogCQl7CkBAIC0xODQwLDggKzE4NzcsOCBAQAogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwKICAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KICAqIAogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCiAgKi8KZGlmZiAtLWdpdCBhL3NjcmlwdHMvZHRjL2xpYmZkdC9mZHRfcm8uYyBiL3NjcmlwdHMvZHRjL2xpYmZkdC9mZHRfcm8uYwppbmRleCBmYmJiYTQ0Li4yMmU2OTI5MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kdGMvbGliZmR0L2ZkdF9yby5jCisrKyBiL3NjcmlwdHMvZHRjL2xpYmZkdC9mZHRfcm8uYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJCQkJCSAgICAgJnBoYW5kbGUsIHNpemVvZihwaGFuZGxlKSk7CiB9CiAKLWludCBfc3RyaW5nbGlzdF9jb250YWlucyhjb25zdCBjaGFyICpzdHJsaXN0LCBpbnQgbGlzdGxlbiwgY29uc3QgY2hhciAqc3RyKQorc3RhdGljIGludCBfc3RyaW5nbGlzdF9jb250YWlucyhjb25zdCBjaGFyICpzdHJsaXN0LCBpbnQgbGlzdGxlbiwgY29uc3QgY2hhciAqc3RyKQogewogCWludCBsZW4gPSBzdHJsZW4oc3RyKTsKIAljb25zdCBjaGFyICpwOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kdGMvdHJlZXNvdXJjZS5jIGIvc2NyaXB0cy9kdGMvdHJlZXNvdXJjZS5jCmluZGV4IGViZWI2ZWIuLjE1MjFmZjEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL3RyZWVzb3VyY2UuYworKysgYi9zY3JpcHRzL2R0Yy90cmVlc291cmNlLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAkJZnB1dGMoJ1x0JywgZik7CiB9CiAKLWludCBpc3N0cmluZyhjaGFyIGMpCitzdGF0aWMgaW50IGlzc3RyaW5nKGNoYXIgYykKIHsKIAlyZXR1cm4gKGlzcHJpbnQoYykKIAkJfHwgKGMgPT0gJ1wwJykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuY19zaGlwcGVkIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKaW5kZXggOTcxZTAxMS4uMjg3NDY3YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKQEAgLTEsNCArMSw0IEBACi0vKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4yICovCisvKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4zICovCiAvKiBDb21tYW5kLWxpbmU6IGdwZXJmIC1MIEFOU0ktQyAtYSAtQyAtRSAtZyAtSCBpc19yZXNlcnZlZF9oYXNoIC1rICcxLDMsJCcgLU4gaXNfcmVzZXJ2ZWRfd29yZCAtcCAtdCBzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmICAqLwogCiAjaWYgISgoJyAnID09IDMyKSAmJiAoJyEnID09IDMzKSAmJiAoJyInID09IDM0KSAmJiAoJyMnID09IDM1KSBcCkBAIC0zMCw3ICszMCw5IEBACiAKICNsaW5lIDEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAKLSNsaW5lIDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCitzdHJ1Y3QgcmVzd29yZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzd29yZCAqaXNfcmVzZXJ2ZWRfd29yZChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOworI2xpbmUgNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKIHN0cnVjdCByZXN3b3JkIHsgY29uc3QgY2hhciAqbmFtZTsgaW50IHRva2VuOyB9OwogLyogbWF4aW11bSBrZXkgcmFuZ2UgPSA2MiwgZHVwbGljYXRlcyA9IDAgKi8KIApAQCAtNzgsNiArODAsOSBAQAogCiAjaWZkZWYgX19HTlVDX18KIF9faW5saW5lCisjaWZkZWYgX19HTlVDX1NURENfSU5MSU5FX18KK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCisjZW5kaWYKICNlbmRpZgogY29uc3Qgc3RydWN0IHJlc3dvcmQgKgogaXNfcmVzZXJ2ZWRfd29yZCAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtOTQsMTA1ICs5OSwxMDUgQEAKICAgc3RhdGljIGNvbnN0IHN0cnVjdCByZXN3b3JkIHdvcmRsaXN0W10gPQogICAgIHsKICAgICAgIHsiIn0sIHsiIn0sIHsiIn0sCi0jbGluZSAyNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDI4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJhc20iLCBBU01fS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDEwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2FzbSIsIEFTTV9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSA5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fYXNtX18iLCBBU01fS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUgNTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1NCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX190eXBlb2ZfXyIsIFRZUEVPRl9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSAxMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2NvbnN0IiwgQ09OU1RfS0VZV30sCi0jbGluZSAxMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiX19hdHRyaWJ1dGVfXyIsIEFUVFJJQlVURV9LRVlXfSwKICNsaW5lIDEzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX2F0dHJpYnV0ZV9fIiwgQVRUUklCVVRFX0tFWVd9LAorI2xpbmUgMTUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fY29uc3RfXyIsIENPTlNUX0tFWVd9LAotI2xpbmUgMTggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fc2lnbmVkX18iLCBTSUdORURfS0VZV30sCi0jbGluZSA0NCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsic3RhdGljIiwgU1RBVElDX0tFWVd9LAogI2xpbmUgMjAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7Il9fc2lnbmVkX18iLCBTSUdORURfS0VZV30sCisjbGluZSA0NiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsic3RhdGljIiwgU1RBVElDX0tFWVd9LAorI2xpbmUgMjIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fdm9sYXRpbGVfXyIsIFZPTEFUSUxFX0tFWVd9LAotI2xpbmUgMzkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0MSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiaW50IiwgSU5UX0tFWVd9LAotI2xpbmUgMzIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiY2hhciIsIENIQVJfS0VZV30sCi0jbGluZSAzMyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDM1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJjb25zdCIsIENPTlNUX0tFWVd9LAotI2xpbmUgNDUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0NyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsic3RydWN0IiwgU1RSVUNUX0tFWVd9LAotI2xpbmUgMjQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19yZXN0cmljdF9fIiwgUkVTVFJJQ1RfS0VZV30sCi0jbGluZSAyNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDI3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJyZXN0cmljdCIsIFJFU1RSSUNUX0tFWVd9LAotI2xpbmUgMjMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX3Jlc3RyaWN0IiwgUkVTVFJJQ1RfS0VZV30sCi0jbGluZSAxNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2lubGluZV9fIiwgSU5MSU5FX0tFWVd9LAotI2xpbmUgMTAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19hdHRyaWJ1dGUiLCBBVFRSSUJVVEVfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMTQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19leHRlbnNpb25fXyIsIEVYVEVOU0lPTl9LRVlXfSwKLSNsaW5lIDM1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImVudW0iLCBFTlVNX0tFWVd9LAotI2xpbmUgMTkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX192b2xhdGlsZSIsIFZPTEFUSUxFX0tFWVd9LAotI2xpbmUgMzYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiZXh0ZXJuIiwgRVhURVJOX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDE3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fc2lnbmVkIiwgU0lHTkVEX0tFWVd9LAotI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7IkVYUE9SVF9TWU1CT0xfR1BMX0ZVVFVSRSIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgNTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1MyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidHlwZW9mIiwgVFlQRU9GX0tFWVd9LAotI2xpbmUgNDYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0OCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidHlwZWRlZiIsIFRZUEVERUZfS0VZV30sCi0jbGluZSAxNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2lubGluZSIsIElOTElORV9LRVlXfSwKLSNsaW5lIDMxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImF1dG8iLCBBVVRPX0tFWVd9LAotI2xpbmUgNDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0OSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidW5pb24iLCBVTklPTl9LRVlXfSwKICAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSA0OCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDUwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJ1bnNpZ25lZCIsIFVOU0lHTkVEX0tFWVd9LAotI2xpbmUgNDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1MSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidm9pZCIsIFZPSURfS0VZV30sCi0jbGluZSA0MiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQ0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJzaG9ydCIsIFNIT1JUX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDUwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMzcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiZmxvYXQiLCBGTE9BVF9LRVlXfSwKLSNsaW5lIDM0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImRvdWJsZSIsIERPVUJMRV9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSA1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiRVhQT1JUX1NZTUJPTCIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUgMzggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0MCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiaW5saW5lIiwgSU5MSU5FX0tFWVd9LAotI2xpbmUgNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7IkVYUE9SVF9TWU1CT0xfR1BMIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKLSNsaW5lIDQxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InJlZ2lzdGVyIiwgUkVHSVNURVJfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMjIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX0Jvb2wiLCBCT09MX0tFWVd9LAotI2xpbmUgNDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0NSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsic2lnbmVkIiwgU0lHTkVEX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDQwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImxvbmciLCBMT05HX0tFWVd9CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiBiL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYKaW5kZXggNWVmMzczMy4uOGZlOTc3YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZgorKysgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmCkBAIC0xLDQgKzEsNiBAQAogJXsKK3N0cnVjdCByZXN3b3JkOworc3RhdGljIGNvbnN0IHN0cnVjdCByZXN3b3JkICppc19yZXNlcnZlZF93b3JkKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbik7CiAlfQogc3RydWN0IHJlc3dvcmQgeyBjb25zdCBjaGFyICpuYW1lOyBpbnQgdG9rZW47IH0KICUlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAppbmRleCBjZGI0NGI2Li44MWE2N2E0IDEwMDc1NQotLS0gYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCisrKyBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKQEAgLTUsMTUgKzUsMTUgQEAKICMgUHJpbnQgc2VsZWN0ZWQgTUFJTlRBSU5FUlMgaW5mb3JtYXRpb24gZm9yCiAjIHRoZSBmaWxlcyBtb2RpZmllZCBpbiBhIHBhdGNoIG9yIGZvciBhIGZpbGUKICMKLSMgdXNhZ2U6IHBlcmwgc2NyaXB0cy9nZXRfbWFpbnRhaW5lcnMucGwgW09QVElPTlNdIDxwYXRjaD4KLSMgICAgICAgIHBlcmwgc2NyaXB0cy9nZXRfbWFpbnRhaW5lcnMucGwgW09QVElPTlNdIC1mIDxmaWxlPgorIyB1c2FnZTogcGVybCBzY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIFtPUFRJT05TXSA8cGF0Y2g+CisjICAgICAgICBwZXJsIHNjcmlwdHMvZ2V0X21haW50YWluZXIucGwgW09QVElPTlNdIC1mIDxmaWxlPgogIwogIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKIAogdXNlIHN0cmljdDsKIAogbXkgJFAgPSAkMDsKLW15ICRWID0gJzAuMjAnOworbXkgJFYgPSAnMC4yMSc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTM3LDYgKzM3LDcgQEAKIG15ICR3ZWIgPSAwOwogbXkgJHN1YnN5c3RlbSA9IDA7CiBteSAkc3RhdHVzID0gMDsKK215ICRrZXl3b3JkcyA9IDE7CiBteSAkZnJvbV9maWxlbmFtZSA9IDA7CiBteSAkcGF0dGVybl9kZXB0aCA9IDA7CiBteSAkdmVyc2lvbiA9IDA7CkBAIC04NCw2ICs4NSw3IEBACiAJCSdzY20hJyA9PiBcJHNjbSwKIAkJJ3dlYiEnID0+IFwkd2ViLAogCQkncGF0dGVybi1kZXB0aD1pJyA9PiBcJHBhdHRlcm5fZGVwdGgsCisJCSdrfGtleXdvcmRzIScgPT4gXCRrZXl3b3JkcywKIAkJJ2Z8ZmlsZScgPT4gXCRmcm9tX2ZpbGVuYW1lLAogCQkndnx2ZXJzaW9uJyA9PiBcJHZlcnNpb24sCiAJCSdofGhlbHAnID0+IFwkaGVscCwKQEAgLTEzMiw2ICsxMzQsOCBAQAogIyMgUmVhZCBNQUlOVEFJTkVSUyBmb3IgdHlwZS92YWx1ZSBwYWlycwogCiBteSBAdHlwZXZhbHVlID0gKCk7CitteSAla2V5d29yZF9oYXNoOworCiBvcGVuKE1BSU5ULCAiPCR7bGtfcGF0aH1NQUlOVEFJTkVSUyIpIHx8IGRpZSAiJFA6IENhbid0IG9wZW4gTUFJTlRBSU5FUlNcbiI7CiB3aGlsZSAoPE1BSU5UPikgewogICAgIG15ICRsaW5lID0gJF87CkBAIC0xNDksNiArMTUzLDggQEAKIAkgICAgaWYgKCgtZCAkdmFsdWUpKSB7CiAJCSR2YWx1ZSA9fiBzQChbXi9dKSRAJDEvQDsKIAkgICAgfQorCX0gZWxzaWYgKCR0eXBlIGVxICJLIikgeworCSAgICAka2V5d29yZF9oYXNoe0B0eXBldmFsdWV9ID0gJHZhbHVlOwogCX0KIAlwdXNoKEB0eXBldmFsdWUsICIkdHlwZTokdmFsdWUiKTsKICAgICB9IGVsc2lmICghL14oXHMpKiQvKSB7CkBAIC0xODgsNiArMTk0LDcgQEAKIAogbXkgQGZpbGVzID0gKCk7CiBteSBAcmFuZ2UgPSAoKTsKK215IEBrZXl3b3JkX3R2aSA9ICgpOwogCiBmb3JlYWNoIG15ICRmaWxlIChAQVJHVikgewogICAgICMjaWYgJGZpbGUgaXMgYSBkaXJlY3RvcnkgYW5kIGl0IGxhY2tzIGEgdHJhaWxpbmcgc2xhc2gsIGFkZCBvbmUKQEAgLTE5OCwxMSArMjA1LDI0IEBACiAgICAgfQogICAgIGlmICgkZnJvbV9maWxlbmFtZSkgewogCXB1c2goQGZpbGVzLCAkZmlsZSk7CisJaWYgKC1mICRmaWxlICYmICRrZXl3b3JkcykgeworCSAgICBvcGVuKEZJTEUsICI8JGZpbGUiKSBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICR7ZmlsZX1cbiI7CisJICAgIHdoaWxlICg8RklMRT4pIHsKKwkJbXkgJHBhdGNoX2xpbmUgPSAkXzsKKwkJZm9yZWFjaCBteSAkbGluZSAoa2V5cyAla2V5d29yZF9oYXNoKSB7CisJCSAgICBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eLioka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CisJCQlwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgY2xvc2UoRklMRSk7CisJfQogICAgIH0gZWxzZSB7CiAJbXkgJGZpbGVfY250ID0gQGZpbGVzOwogCW15ICRsYXN0ZmlsZTsKIAlvcGVuKFBBVENILCAiPCRmaWxlIikgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAke2ZpbGV9XG4iOwogCXdoaWxlICg8UEFUQ0g+KSB7CisJICAgIG15ICRwYXRjaF9saW5lID0gJF87CiAJICAgIGlmIChtL15cK1wrXCtccysoXFMrKS8pIHsKIAkJbXkgJGZpbGVuYW1lID0gJDE7CiAJCSRmaWxlbmFtZSA9fiBzQF5bXi9dKi9AQDsKQEAgLTIxMyw2ICsyMzMsMTIgQEAKIAkJaWYgKCRlbWFpbF9naXRfYmxhbWUpIHsKIAkJICAgIHB1c2goQHJhbmdlLCAiJGxhc3RmaWxlOiQxOiQyIik7CiAJCX0KKwkgICAgfSBlbHNpZiAoJGtleXdvcmRzKSB7CisJCWZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtleXdvcmRfaGFzaCkgeworCQkgICAgaWYgKCRwYXRjaF9saW5lID1+IG0vXlsrLV0uKiRrZXl3b3JkX2hhc2h7JGxpbmV9L3gpIHsKKwkJCXB1c2goQGtleXdvcmRfdHZpLCAkbGluZSk7CisJCSAgICB9CisJCX0KIAkgICAgfQogCX0KIAljbG9zZShQQVRDSCk7CkBAIC0yODYsNiArMzEyLDEzIEBACiAgICAgfQogfQogCitpZiAoJGtleXdvcmRzKSB7CisgICAgQGtleXdvcmRfdHZpID0gc29ydF9hbmRfdW5pcShAa2V5d29yZF90dmkpOworICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBrZXl3b3JkX3R2aSkgeworCWFkZF9jYXRlZ29yaWVzKCRsaW5lKTsKKyAgICB9Cit9CisKIGlmICgkZW1haWwpIHsKICAgICBmb3JlYWNoIG15ICRjaGllZiAoQHBlbmd1aW5fY2hpZWYpIHsKIAlpZiAoJGNoaWVmID1+IG0vXiguKik6KC4qKS8pIHsKQEAgLTM4NCw2ICs0MTcsNyBAQAogCiBPdGhlciBvcHRpb25zOgogICAtLXBhdHRlcm4tZGVwdGggPT4gTnVtYmVyIG9mIHBhdHRlcm4gZGlyZWN0b3J5IHRyYXZlcnNhbHMgKGRlZmF1bHQ6IDAgKGFsbCkpCisgIC0ta2V5d29yZHMgPT4gc2NhbiBwYXRjaCBmb3Iga2V5d29yZHMgKGRlZmF1bHQ6IDEgKG9uKSkKICAgLS12ZXJzaW9uID0+IHNob3cgdmVyc2lvbgogICAtLWhlbHAgPT4gc2hvdyB0aGlzIGhlbHAgaW5mb3JtYXRpb24KIApAQCAtNDg2LDcgKzUyMCw2IEBACiB9CiAKIHN1YiBmaW5kX3N0YXJ0aW5nX2luZGV4IHsKLQogICAgIG15ICgkaW5kZXgpID0gQF87CiAKICAgICB3aGlsZSAoJGluZGV4ID4gMCkgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwgYi9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbAppbmRleCBjNmFlNDA1Li5iODljYTJjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbAorKysgYi9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbApAQCAtMjAsNyArMjAsNyBAQAogCiBteSAoJHJlYWRkaXIsICRpbnN0YWxsZGlyLCAkYXJjaCwgQGZpbGVzKSA9IEBBUkdWOwogCi1teSAkdW5pZmRlZiA9ICJzY3JpcHRzL3VuaWZkZWYgLVVfX0tFUk5FTF9fIjsKK215ICR1bmlmZGVmID0gInNjcmlwdHMvdW5pZmRlZiAtVV9fS0VSTkVMX18gLURfX0VYUE9SVEVEX0hFQURFUlNfXyI7CiAKIGZvcmVhY2ggbXkgJGZpbGUgKEBmaWxlcykgewogCWxvY2FsICpJTkZJTEU7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCmluZGV4IGRjM2U4MTguLmZkYzcxMTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCkBAIC0xNjAsNyArMTYwLDE1IEBACiAKIC8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCiAjaWZuZGVmIFlZX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsuCisgKiBNb3Jlb3ZlciwgWVlfQlVGX1NJWkUgaXMgMipZWV9SRUFEX0JVRl9TSVpFIGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKiBEaXR0byBmb3IgdGhlIF9faWE2NF9fIGNhc2UgYWNjb3JkaW5nbHkuCisgKi8KKyNkZWZpbmUgWVlfQlVGX1NJWkUgMzI3NjgKKyNlbHNlCiAjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYgLyogX19pYTY0X18gKi8KICNlbmRpZgogCiAvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgpAQCAtODAyLDcgKzgxMCw3IEBACiBzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpOwogc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKIAotdm9pZCBuZXdfc3RyaW5nKHZvaWQpCitzdGF0aWMgdm9pZCBuZXdfc3RyaW5nKHZvaWQpCiB7CiAJdGV4dCA9IG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKIAl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsKQEAgLTgxMCw3ICs4MTgsNyBAQAogCSp0ZXh0ID0gMDsKIH0KIAotdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCiB7CiAJaW50IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7CiAJaWYgKG5ld19zaXplID4gdGV4dF9hc2l6ZSkgewpAQCAtODI0LDcgKzgzMiw3IEBACiAJdGV4dFt0ZXh0X3NpemVdID0gMDsKIH0KIAotdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIGFsbG9jX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCXRleHQgPSBtYWxsb2Moc2l6ZSArIDEpOwogCW1lbWNweSh0ZXh0LCBzdHIsIHNpemUpOwpAQCAtOTE0LDcgKzkyMiwxMiBAQAogCiAvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCiAjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNpZmRlZiBfX2lhNjRfXworLyogT24gSUEtNjQsIHRoZSBidWZmZXIgc2l6ZSBpcyAxNmssIG5vdCA4ayAqLworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Mzg0CisjZWxzZQogI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZiAvKiBfX2lhNjRfXyAqLwogI2VuZGlmCiAKIC8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCkBAIC05MjIsNyArOTM1LDcgQEAKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggemNvbmZ0ZXh0LCB6Y29uZmxlbmcsIDEsIHpjb25mb3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHpjb25mdGV4dCwgemNvbmZsZW5nLCAxLCB6Y29uZm91dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKQEAgLTIwNjAsOCArMjA3Myw4IEBACiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHpjb25mbGV4KCkgd2lsbAogICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgogICogCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmCmluZGV4IDI1ZWY1ZDAuLmQ4YmM3NDIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZgorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYKQEAgLTksNiArOSw4IEBACiAKIHN0cnVjdCBrY29uZl9pZDsKIAorc3RhdGljIHN0cnVjdCBrY29uZl9pZCAqa2NvbmZfaWRfbG9va3VwKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbik7CisKICUlCiBtYWlubWVudSwJVF9NQUlOTUVOVSwJVEZfQ09NTUFORAogbWVudSwJCVRfTUVOVSwJCVRGX0NPTU1BTkQKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZAppbmRleCA1YzczZDUxMzMuLmMxNzQ4ZmEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKQEAgLTMwLDYgKzMwLDggQEAKICNlbmRpZgogCiBzdHJ1Y3Qga2NvbmZfaWQ7CisKK3N0YXRpYyBzdHJ1Y3Qga2NvbmZfaWQgKmtjb25mX2lkX2xvb2t1cChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOwogLyogbWF4aW11bSBrZXkgcmFuZ2UgPSA0NywgZHVwbGljYXRlcyA9IDAgKi8KIAogI2lmZGVmIF9fR05VQ19fCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYubCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCmluZGV4IDIxZmY2OWMuLmQ4ZjcyMzYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCkBAIC0zOSw3ICszOSw3IEBACiBzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpOwogc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKIAotdm9pZCBuZXdfc3RyaW5nKHZvaWQpCitzdGF0aWMgdm9pZCBuZXdfc3RyaW5nKHZvaWQpCiB7CiAJdGV4dCA9IG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKIAl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAkqdGV4dCA9IDA7CiB9CiAKLXZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQorc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCWludCBuZXdfc2l6ZSA9IHRleHRfc2l6ZSArIHNpemUgKyAxOwogCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKQEAgLTYxLDcgKzYxLDcgQEAKIAl0ZXh0W3RleHRfc2l6ZV0gPSAwOwogfQogCi12b2lkIGFsbG9jX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQorc3RhdGljIHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCiB7CiAJdGV4dCA9IG1hbGxvYyhzaXplICsgMSk7CiAJbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCmluZGV4IDk1ZGY4MzMuLjZlOWRjZDUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCkBAIC0xLDI0ICsxLDIzIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KKworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4xLiAgKi8KIAogLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSw3ICsyOCw3IEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAKQEAgLTQ3LDcgKzQ2LDcgQEAKICNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMSIKIAogLyogU2tlbGV0b24gbmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNTUsMTcgKzU0LDg0IEBACiAvKiBQdXJlIHBhcnNlcnMuICAqLwogI2RlZmluZSBZWVBVUkUgMAogCisvKiBQdXNoIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVTEwgMQorCiAvKiBVc2luZyBsb2NhdGlvbnMuICAqLwogI2RlZmluZSBZWUxTUF9ORUVERUQgMAogCiAvKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5eXBhcnNlIHpjb25mcGFyc2UKLSNkZWZpbmUgeXlsZXggICB6Y29uZmxleAotI2RlZmluZSB5eWVycm9yIHpjb25mZXJyb3IKLSNkZWZpbmUgeXlsdmFsICB6Y29uZmx2YWwKLSNkZWZpbmUgeXljaGFyICB6Y29uZmNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyB6Y29uZmRlYnVnCi0jZGVmaW5lIHl5bmVycnMgemNvbmZuZXJycworI2RlZmluZSB5eXBhcnNlICAgICAgICAgemNvbmZwYXJzZQorI2RlZmluZSB5eWxleCAgICAgICAgICAgemNvbmZsZXgKKyNkZWZpbmUgeXllcnJvciAgICAgICAgIHpjb25mZXJyb3IKKyNkZWZpbmUgeXlsdmFsICAgICAgICAgIHpjb25mbHZhbAorI2RlZmluZSB5eWNoYXIgICAgICAgICAgemNvbmZjaGFyCisjZGVmaW5lIHl5ZGVidWcgICAgICAgICB6Y29uZmRlYnVnCisjZGVmaW5lIHl5bmVycnMgICAgICAgICB6Y29uZm5lcnJzCisKKworLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjZGVmaW5lIExLQ19ESVJFQ1RfTElOSworI2luY2x1ZGUgImxrYy5oIgorCisjZGVmaW5lIHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpCisKKyNkZWZpbmUgUFJJTlRECQkweDAwMDEKKyNkZWZpbmUgREVCVUdfUEFSU0UJMHgwMDAyCisKK2ludCBjZGVidWcgPSBQUklOVEQ7CisKK2V4dGVybiBpbnQgemNvbmZsZXgodm9pZCk7CitzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKK3N0YXRpYyB2b2lkIHpjb25mZXJyb3IoY29uc3QgY2hhciAqZXJyKTsKK3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pOworCitzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xfaGFzaFsyNTddOworCitzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVudSwgKmN1cnJlbnRfZW50cnk7CisKKyNkZWZpbmUgWVlERUJVRyAwCisjaWYgWVlERUJVRworI2RlZmluZSBZWUVSUk9SX1ZFUkJPU0UKKyNlbmRpZgorCisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCiAKIAogLyogVG9rZW5zLiAgKi8KQEAgLTEwOCwxMjkgKzE3NCwzNiBAQAogICAgICBUX05PVCA9IDI4OQogICAgfTsKICNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgVF9NQUlOTUVOVSAyNTgKLSNkZWZpbmUgVF9NRU5VIDI1OQotI2RlZmluZSBUX0VORE1FTlUgMjYwCi0jZGVmaW5lIFRfU09VUkNFIDI2MQotI2RlZmluZSBUX0NIT0lDRSAyNjIKLSNkZWZpbmUgVF9FTkRDSE9JQ0UgMjYzCi0jZGVmaW5lIFRfQ09NTUVOVCAyNjQKLSNkZWZpbmUgVF9DT05GSUcgMjY1Ci0jZGVmaW5lIFRfTUVOVUNPTkZJRyAyNjYKLSNkZWZpbmUgVF9IRUxQIDI2NwotI2RlZmluZSBUX0hFTFBURVhUIDI2OAotI2RlZmluZSBUX0lGIDI2OQotI2RlZmluZSBUX0VORElGIDI3MAotI2RlZmluZSBUX0RFUEVORFMgMjcxCi0jZGVmaW5lIFRfT1BUSU9OQUwgMjcyCi0jZGVmaW5lIFRfUFJPTVBUIDI3MwotI2RlZmluZSBUX1RZUEUgMjc0Ci0jZGVmaW5lIFRfREVGQVVMVCAyNzUKLSNkZWZpbmUgVF9TRUxFQ1QgMjc2Ci0jZGVmaW5lIFRfUkFOR0UgMjc3Ci0jZGVmaW5lIFRfT1BUSU9OIDI3OAotI2RlZmluZSBUX09OIDI3OQotI2RlZmluZSBUX1dPUkQgMjgwCi0jZGVmaW5lIFRfV09SRF9RVU9URSAyODEKLSNkZWZpbmUgVF9VTkVRVUFMIDI4MgotI2RlZmluZSBUX0NMT1NFX1BBUkVOIDI4MwotI2RlZmluZSBUX09QRU5fUEFSRU4gMjg0Ci0jZGVmaW5lIFRfRU9MIDI4NQotI2RlZmluZSBUX09SIDI4NgotI2RlZmluZSBUX0FORCAyODcKLSNkZWZpbmUgVF9FUVVBTCAyODgKLSNkZWZpbmUgVF9OT1QgMjg5CiAKIAogCi0KLS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotCi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+Ci0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KLSAqLwotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLQotI2RlZmluZSBMS0NfRElSRUNUX0xJTksKLSNpbmNsdWRlICJsa2MuaCIKLQotI2luY2x1ZGUgInpjb25mLmhhc2guYyIKLQotI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQotCi0jZGVmaW5lIFBSSU5URAkJMHgwMDAxCi0jZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMgotCi1pbnQgY2RlYnVnID0gUFJJTlREOwotCi1leHRlcm4gaW50IHpjb25mbGV4KHZvaWQpOwotc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLik7Ci1zdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLik7Ci1zdGF0aWMgdm9pZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycik7Ci1zdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKTsKLQotc3RydWN0IHN5bWJvbCAqc3ltYm9sX2hhc2hbMjU3XTsKLQotc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnUsICpjdXJyZW50X2VudHJ5OwotCi0jZGVmaW5lIFlZREVCVUcgMAotI2lmIFlZREVCVUcKLSNkZWZpbmUgWVlFUlJPUl9WRVJCT1NFCi0jZW5kaWYKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQogI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQogeworCisKIAljaGFyICpzdHJpbmc7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3RydWN0IHN5bWJvbCAqc3ltYm9sOwogCXN0cnVjdCBleHByICpleHByOwogCXN0cnVjdCBtZW51ICptZW51OwogCXN0cnVjdCBrY29uZl9pZCAqaWQ7Ci19Ci0vKiBMaW5lIDE4NyBvZiB5YWNjLmMuICAqLwogCi0JWVlTVFlQRTsKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlmCiAKIAotCiAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIAotLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KKy8qIEluY2x1ZGUgemNvbmYuaGFzaC5jIGhlcmUgc28gaXQgY2FuIHNlZSB0aGUgdG9rZW4gY29uc3RhbnRzLiAqLworI2luY2x1ZGUgInpjb25mLmhhc2guYyIKKwogCiAKICNpZmRlZiBzaG9ydApAQCAtMzA2LDE0ICsyNzksMTQgQEAKICNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKK1lZSUQgKGludCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKK1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1cm4geXlpOwogfQogI2VuZGlmCiAKQEAgLTM5NCw5ICszNjcsOSBAQAogLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1bmlvbiB5eWFsbG9jCiB7Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gIH07CisgIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5dnNfYWxsb2M7Cit9OwogCiAvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwogIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCkBAIC00MzAsMTIgKzQwMywxMiBAQAogICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKICAgICBkbwkJCQkJCQkJCVwKICAgICAgIHsJCQkJCQkJCQlcCiAJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAotCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAogCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKIAl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCiAgICAgICB9CQkJCQkJCQkJXApAQCAtNTU4LDE4ICs1MzEsMTggQEAKIC8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgIDEwNCwgICAxMDQsICAgMTA2LCAgIDEwOCwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLAotICAgICAxMTQsICAgMTE4LCAgIDEyMiwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjYsCi0gICAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAxMzEsICAgMTM1LCAgIDEzNiwgICAxNDIsICAgMTUwLCAgIDE1NiwKLSAgICAgMTY0LCAgIDE3NCwgICAxNzYsICAgMTc3LCAgIDE3OCwgICAxNzksICAgMTgwLCAgIDE4MSwgICAxODQsICAgMTkyLAotICAgICAxOTgsICAgMjA4LCAgIDIxNCwgICAyMjAsICAgMjIzLCAgIDIyNSwgICAyMzYsICAgMjM3LCAgIDI0MiwgICAyNTEsCi0gICAgIDI1NiwgICAyNjQsICAgMjY3LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc2LCAgIDI4MiwKLSAgICAgMjkzLCAgIDI5OSwgICAzMDksICAgMzExLCAgIDMxNiwgICAzMjQsICAgMzMyLCAgIDMzNSwgICAzMzcsICAgMzM4LAotICAgICAzMzksICAgMzQ0LCAgIDM1MSwgICAzNTYsICAgMzY0LCAgIDM2NywgICAzNjksICAgMzcwLCAgIDM3MSwgICAzNzQsCi0gICAgIDM4MiwgICAzODksICAgMzk2LCAgIDQwMiwgICA0MDksICAgNDExLCAgIDQxMiwgICA0MTMsICAgNDE2LCAgIDQyNCwKLSAgICAgNDI2LCAgIDQzMSwgICA0MzIsICAgNDM1LCAgIDQzNiwgICA0MzcsICAgNDQxLCAgIDQ0MiwgICA0NDUsICAgNDQ2LAotICAgICA0NDksICAgNDUwLCAgIDQ1MSwgICA0NTIsICAgNDUzLCAgIDQ1NCwgICA0NTUsICAgNDU4LCAgIDQ1OSwgICA0NjIsCi0gICAgIDQ2MworICAgICAgIDAsICAgMTA3LCAgIDEwNywgICAxMDksICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsCisgICAgIDExNywgICAxMjEsICAgMTI1LCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyOSwKKyAgICAgMTMwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgIDEzNCwgICAxMzgsICAgMTM5LCAgIDE0NSwgICAxNTMsICAgMTU5LAorICAgICAxNjcsICAgMTc3LCAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NywgICAxOTUsCisgICAgIDIwMSwgICAyMTEsICAgMjE3LCAgIDIyMywgICAyMjYsICAgMjI4LCAgIDIzOSwgICAyNDAsICAgMjQ1LCAgIDI1NCwKKyAgICAgMjU5LCAgIDI2NywgICAyNzAsICAgMjcyLCAgIDI3MywgICAyNzQsICAgMjc1LCAgIDI3NiwgICAyNzksICAgMjg1LAorICAgICAyOTYsICAgMzAyLCAgIDMxMiwgICAzMTQsICAgMzE5LCAgIDMyNywgICAzMzUsICAgMzM4LCAgIDM0MCwgICAzNDEsCisgICAgIDM0MiwgICAzNDcsICAgMzU0LCAgIDM1OSwgICAzNjcsICAgMzcwLCAgIDM3MiwgICAzNzMsICAgMzc0LCAgIDM3NywKKyAgICAgMzg1LCAgIDM5MiwgICAzOTksICAgNDA1LCAgIDQxMiwgICA0MTQsICAgNDE1LCAgIDQxNiwgICA0MTksICAgNDI3LAorICAgICA0MjksICAgNDM0LCAgIDQzNSwgICA0MzgsICAgNDM5LCAgIDQ0MCwgICA0NDQsICAgNDQ1LCAgIDQ0OCwgICA0NDksCisgICAgIDQ1MiwgICA0NTMsICAgNDU0LCAgIDQ1NSwgICA0NTYsICAgNDU3LCAgIDQ1OCwgICA0NjEsICAgNDYyLCAgIDQ2NSwKKyAgICAgNDY2CiB9OwogI2VuZGlmCiAKQEAgLTk4NSwxNyArOTU4LDIwIEBACiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0b3ApCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKICNlbHNlCiBzdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOworeXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CiAjZW5kaWYKIHsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAgICB9CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIApAQCAtMTAyOSwxMSArMTAwNSwxMSBAQAogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCiAJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKIAkJICAgICAgIAkJICAgICAgICk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApAQCAtMTM0MywxMCArMTMxOSw4IEBACiAJYnJlYWs7CiAgICAgfQogfQotDAogCiAvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotCiAjaWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwogaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwpAQCAtMTM2MiwxMSArMTMzNiwxMCBAQAogI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwogCiAKLQotLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIGludCB5eWNoYXI7CiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIFlZU1RZUEUgeXlsdmFsOwogCiAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwpAQCAtMTM3NCw5ICsxMzQ3LDkgQEAKIAogCiAKLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlwYXJzZSBvciB5eXB1c2hfcGFyc2UuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZmRlZiBZWVBBUlNFX1BBUkFNCiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKQEAgLTE0MDAsMTQgKzEzNzMsMzkgQEAKICNlbmRpZgogI2VuZGlmCiB7Ci0gIAotICBpbnQgeXlzdGF0ZTsKKworCisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3RhdHVzOworCisgICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgorCisgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisKKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5eXNzOworICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICAgIFlZU1RZUEUgKnl5dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKwogICBpbnQgeXluOwogICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRva2VuID0gMDsKKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbjsKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKwogI2lmIFlZRVJST1JfVkVSQk9TRQogICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KICAgY2hhciB5eW1zZ2J1ZlsxMjhdOwpAQCAtMTQxNSw1MSArMTQxMywyOCBAQAogICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKICNlbmRpZgogCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0gIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Ci0gIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5c3NwOwotCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNwOwotCi0KLQogI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLQotCiAgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCiAgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KICAgaW50IHl5bGVuID0gMDsKIAorICB5eXRva2VuID0gMDsKKyAgeXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKIAogICB5eXN0YXRlID0gMDsKICAgeXllcnJzdGF0dXMgPSAwOwogICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCiAKICAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KICAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCiAgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KICAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotCiAgIHl5c3NwID0geXlzczsKICAgeXl2c3AgPSB5eXZzOwogCkBAIC0xNDg5LDcgKzE0NjQsNiBAQAogCVlZU1RZUEUgKnl5dnMxID0geXl2czsKIAl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKIAotCiAJLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCiAJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQogCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKQEAgLTE0OTcsNyArMTQ3MSw2IEBACiAJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCiAJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKIAkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotCiAJCSAgICAmeXlzdGFja3NpemUpOwogCiAJeXlzcyA9IHl5c3MxOwpAQCAtMTUyMCw5ICsxNDkzLDggQEAKIAkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CiAJaWYgKCEgeXlwdHIpCiAJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotCisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCiAJaWYgKHl5c3MxICE9IHl5c3NhKQogCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CkBAIC0xNTMzLDcgKzE1MDUsNiBAQAogICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKICAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CiAKLQogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAogCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKIApAQCAtMTU0Myw2ICsxNTE0LDkgQEAKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTE1NTEsMTYgKzE1MjUsMTYgQEAKIHl5YmFja3VwOgogCiAgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwogICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQogICAgIGdvdG8geXlkZWZhdWx0OwogCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKICAgICB7CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKQEAgLTE1OTIsMjAgKzE1NjYsMTYgQEAKICAgICAgIGdvdG8geXlyZWR1Y2U7CiAgICAgfQogCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQogICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCiAgICAgIHN0YXR1cy4gICovCiAgIGlmICh5eWVycnN0YXR1cykKICAgICB5eWVycnN0YXR1cy0tOwogCi0gIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCiAgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CiAKLSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAgaWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNoYXIgPSBZWUVNUFRZOworICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsKIAogICB5eXN0YXRlID0geXluOwogICAqKyt5eXZzcCA9IHl5bHZhbDsKQEAgLTIwMjksNyArMTk5OSw2IEBACiAgICAgYnJlYWs7CiAKIAotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCiAKICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgIH0KQEAgLTIwNDEsNyArMjAxMCw2IEBACiAKICAgKisreXl2c3AgPSB5eXZhbDsKIAotCiAgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCiAgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQogICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCkBAIC0yMTA2LDcgKzIwNzQsNyBAQAogCiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTIxMjMsNyArMjA5MSw3IEBACiAJfQogICAgIH0KIAotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgogICAgICB0b2tlbi4gICovCiAgIGdvdG8geXllcnJsYWIxOwogCkBAIC0yMTgwLDkgKzIxNDgsNiBAQAogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXlsdmFsOwogCiAKQEAgLTIyMDcsNyArMjE3Miw3IEBACiAgIHl5cmVzdWx0ID0gMTsKICAgZ290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMjE4LDcgKzIxODMsNyBAQAogI2VuZGlmCiAKIHl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCiAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAJCSB5eXRva2VuLCAmeXlsdmFsKTsKICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZApAQCAtMjI4NCw3ICsyMjQ5LDcgQEAKIAlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKIH0KIAotY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKK3N0YXRpYyBjb25zdCBjaGFyICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQogewogCXN3aXRjaCAodG9rZW4pIHsKIAljYXNlIFRfTUVOVToJCXJldHVybiAibWVudSI7CkBAIC0yMzQ4LDcgKzIzMTMsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKK3N0YXRpYyB2b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCiB7CiAJY29uc3QgY2hhciAqcDsKIAlpbnQgbGVuOwpAQCAtMjM2NSw3ICsyMzMwLDcgQEAKIAlwdXRjKCciJywgb3V0KTsKIH0KIAotdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKK3N0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBtZW51ICptZW51KQogewogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYueSBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CmluZGV4IDk3MTBiODIuLjhjNDM0OTEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CkBAIC0xNCw4ICsxNCw2IEBACiAjZGVmaW5lIExLQ19ESVJFQ1RfTElOSwogI2luY2x1ZGUgImxrYy5oIgogCi0jaW5jbHVkZSAiemNvbmYuaGFzaC5jIgotCiAjZGVmaW5lIHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpCiAKICNkZWZpbmUgUFJJTlRECQkweDAwMDEKQEAgLTEwMCw2ICs5OCwxMSBAQAogCQltZW51X2VuZF9tZW51KCk7CiB9IGlmX2VudHJ5IG1lbnVfZW50cnkgY2hvaWNlX2VudHJ5CiAKKyV7CisvKiBJbmNsdWRlIHpjb25mLmhhc2guYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhlIHRva2VuIGNvbnN0YW50cy4gKi8KKyNpbmNsdWRlICJ6Y29uZi5oYXNoLmMiCislfQorCiAlJQogaW5wdXQ6IHN0bXRfbGlzdDsKIApAQCAtNTAxLDcgKzUwNCw3IEBACiAJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7CiB9CiAKLWNvbnN0IGNoYXIgKnpjb25mX3Rva2VubmFtZShpbnQgdG9rZW4pCitzdGF0aWMgY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKIHsKIAlzd2l0Y2ggKHRva2VuKSB7CiAJY2FzZSBUX01FTlU6CQlyZXR1cm4gIm1lbnUiOwpAQCAtNTY1LDcgKzU2OCw3IEBACiAjZW5kaWYKIH0KIAotdm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQorc3RhdGljIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKIHsKIAljb25zdCBjaGFyICpwOwogCWludCBsZW47CkBAIC01ODIsNyArNTg1LDcgQEAKIAlwdXRjKCciJywgb3V0KTsKIH0KIAotdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKK3N0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBtZW51ICptZW51KQogewogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21rY29tcGlsZV9oIGIvc2NyaXB0cy9ta2NvbXBpbGVfaAppbmRleCA2YTEyZGQ5Li5iY2UzZDBmIDEwMDc1NQotLS0gYS9zY3JpcHRzL21rY29tcGlsZV9oCisrKyBiL3NjcmlwdHMvbWtjb21waWxlX2gKQEAgLTEsMyArMSw1IEBACisjIS9iaW4vc2gKKwogVEFSR0VUPSQxCiBBUkNIPSQyCiBTTVA9JDMKQEAgLTUwLDcgKzUyLDcgQEAKICMgVHJ1bmNhdGUgdG8gbWF4aW11bSBsZW5ndGgKIAogVVRTX0xFTj02NAotVVRTX1RSVU5DQVRFPSJzZWQgLWUgcy9cKC5cezEsJFVUU19MRU5cfVwpLiovXDEvIgorVVRTX1RSVU5DQVRFPSJjdXQgLWIgLSRVVFNfTEVOIgogCiAjIEdlbmVyYXRlIGEgdGVtcG9yYXJ5IGNvbXBpbGUuaAogCkBAIC02Niw5ICs2OCwxMyBAQAogICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfSE9TVCBcImBob3N0bmFtZSB8ICRVVFNfVFJVTkNBVEVgXCIKIAogICBpZiBbIC14IC9iaW4vZG5zZG9tYWlubmFtZSBdOyB0aGVuCi0gICAgZWNobyBcI2RlZmluZSBMSU5VWF9DT01QSUxFX0RPTUFJTiBcImBkbnNkb21haW5uYW1lIHwgJFVUU19UUlVOQ0FURWBcIgorICAgIGRvbWFpbj1gZG5zZG9tYWlubmFtZSAyPiAvZGV2L251bGxgCiAgIGVsaWYgWyAteCAvYmluL2RvbWFpbm5hbWUgXTsgdGhlbgotICAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9ET01BSU4gXCJgZG9tYWlubmFtZSB8ICRVVFNfVFJVTkNBVEVgXCIKKyAgICBkb21haW49YGRvbWFpbm5hbWUgMj4gL2Rldi9udWxsYAorICBmaQorCisgIGlmIFsgLW4gIiRkb21haW4iIF07IHRoZW4KKyAgICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfRE9NQUlOIFwiYGVjaG8gJGRvbWFpbiB8ICRVVFNfVFJVTkNBVEVgXCIKICAgZWxzZQogICAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9ET01BSU4KICAgZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZSBiL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQppbmRleCBmYTRhMGExLi5mNjdjYzg4IDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw5IEBACiAjIGUpIGdlbmVyYXRlIHRoZSBycG0gZmlsZXMsIGJhc2VkIG9uIGtlcm5lbC5zcGVjCiAjIC0gVXNlIC8uIHRvIGF2b2lkIHRhciBwYWNraW5nIGp1c3QgdGhlIHN5bWxpbmsKIAorIyBOb3RlIHRoYXQgdGhlIHJwbS1wa2cgdGFyZ2V0IGNhbm5vdCBiZSB1c2VkIHdpdGggS0JVSUxEX09VVFBVVCwKKyMgYnV0IHRoZSBiaW5ycG0tcGtnIHRhcmdldCBjYW47IGZvciBzb21lIHJlYXNvbiBPPSBnZXRzIGlnbm9yZWQuCisKICMgRG8gd2UgaGF2ZSBycG1idWlsZCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byB0aGUgb2xkZXIgcnBtCiBSUE0gOj0gJChzaGVsbCBpZiBbIC14ICIvdXNyL2Jpbi9ycG1idWlsZCIgXTsgdGhlbiBlY2hvIHJwbWJ1aWxkOyBcCiAJICAgICAgICAgICBlbHNlIGVjaG8gcnBtOyBmaSkKQEAgLTMzLDYgKzM2LDEyIEBACiAJJChDT05GSUdfU0hFTEwpICQoTUtTUEVDKSA+ICRACiAKIHJwbS1wa2cgcnBtOiAkKG9ianRyZWUpL2tlcm5lbC5zcGVjIEZPUkNFCisJQGlmIHRlc3QgLW4gIiQoS0JVSUxEX09VVFBVVCkiOyB0aGVuIFwKKwkJZWNobyAiQnVpbGRpbmcgc291cmNlICsgYmluYXJ5IFJQTSBpcyBub3QgcG9zc2libGUgb3V0c2lkZSB0aGUiOyBcCisJCWVjaG8gImtlcm5lbCBzb3VyY2UgdHJlZS4gRG9uJ3Qgc2V0IEtCVUlMRF9PVVRQVVQsIG9yIHVzZSB0aGUiOyBcCisJCWVjaG8gImJpbnJwbS1wa2cgdGFyZ2V0IGluc3RlYWQuIjsgXAorCQlmYWxzZTsgXAorCWZpCiAJJChNQUtFKSBjbGVhbgogCSQoUFJFVikgbG4gLXNmICQoc3JjdHJlZSkgJChLRVJORUxQQVRIKQogCSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uID4gJChvYmp0cmVlKS8uc2NtdmVyc2lvbgpAQCAtNjEsNyArNzAsNyBAQAogCXNldCAtZTsgXAogCW12IC1mICQob2JqdHJlZSkvLnRtcF92ZXJzaW9uICQob2JqdHJlZSkvLnZlcnNpb24KIAotCSQoUlBNKSAkKFJQTU9QVFMpIC0tZGVmaW5lICJfYnVpbGRkaXIgJChzcmN0cmVlKSIgLS10YXJnZXQgXAorCSQoUlBNKSAkKFJQTU9QVFMpIC0tZGVmaW5lICJfYnVpbGRkaXIgJChvYmp0cmVlKSIgLS10YXJnZXQgXAogCQkkKFVUU19NQUNISU5FKSAtYmIgJDwKIAogY2xlYW4tZmlsZXMgKz0gJChvYmp0cmVlKS9iaW5rZXJuZWwuc3BlYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYyBiL3NjcmlwdHMvcGFja2FnZS9ta3NwZWMKaW5kZXggM2Q5M2Y4Yy4uNDdiZGQyZiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYworKysgYi9zY3JpcHRzL3BhY2thZ2UvbWtzcGVjCkBAIC03MCw3ICs3MCw3IEBACiBlY2hvICdta2RpciAtcCAkUlBNX0JVSUxEX1JPT1QvbGliL2Zpcm13YXJlJwogZWNobyAiJWVuZGlmIgogCi1lY2hvICdJTlNUQUxMX01PRF9QQVRIPSRSUE1fQlVJTERfUk9PVCBtYWtlICV7X3NtcF9tZmxhZ3N9IG1vZHVsZXNfaW5zdGFsbCcKK2VjaG8gJ0lOU1RBTExfTU9EX1BBVEg9JFJQTV9CVUlMRF9ST09UIG1ha2UgJXtfc21wX21mbGFnc30gS0JVSUxEX1NSQz0gbW9kdWxlc19pbnN0YWxsJwogZWNobyAiJWlmYXJjaCBpYTY0IgogZWNobyAnY3AgJEtCVUlMRF9JTUFHRSAkUlBNX0JVSUxEX1JPT1QnIi9ib290L2VmaS92bWxpbnV6LSRLRVJORUxSRUxFQVNFIgogZWNobyAnbG4gLXMgJyJlZmkvdm1saW51ei0kS0VSTkVMUkVMRUFTRSIgJyRSUE1fQlVJTERfUk9PVCciL2Jvb3QvIgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKaW5kZXggOGU5Nzc3Yi4uMGM3MmM5YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCkBAIC00Myw3ICs0Myw3IEBACiAJcmV0dXJuIGltYV9zaG93X2h0YWJsZV92YWx1ZShidWYsIGNvdW50LCBwcG9zLCAmaW1hX2h0YWJsZS52aW9sYXRpb25zKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2h0YWJsZV92aW9sYXRpb25zX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9odGFibGVfdmlvbGF0aW9uc19vcHMgPSB7CiAJLnJlYWQgPSBpbWFfc2hvd19odGFibGVfdmlvbGF0aW9ucwogfTsKIApAQCAtNTUsNyArNTUsNyBAQAogCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfY291bnRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19jb3VudF9vcHMgPSB7CiAJLnJlYWQgPSBpbWFfc2hvd19tZWFzdXJlbWVudHNfY291bnQKIH07CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogCXJldHVybiBzZXFfb3BlbihmaWxlLCAmaW1hX21lYXN1cm1lbnRzX3NlcW9wcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19vcHMgPSB7CiAJLm9wZW4gPSBpbWFfbWVhc3VyZW1lbnRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMjMzLDcgKzIzMyw3IEBACiAJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3NlcW9wcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcHMgPSB7CiAJLm9wZW4gPSBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMzEzLDcgKzMxMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlX3BvbGljeV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZV9wb2xpY3lfb3BzID0gewogCS5vcGVuID0gaW1hX29wZW5fcG9saWN5LAogCS53cml0ZSA9IGltYV93cml0ZV9wb2xpY3ksCiAJLnJlbGVhc2UgPSBpbWFfcmVsZWFzZV9wb2xpY3kKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwppbmRleCBiOGRkNjkzLi5hNGUyYjFkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCkBAIC01OCwxMSArNTgsMTEgQEAKIAogCWlmICghaW1hX2luaXRpYWxpemVkKQogCQlyZXR1cm4gaWludDsKLQlpaW50ID0ga21lbV9jYWNoZV9hbGxvYyhpaW50X2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpaW50ID0ga21lbV9jYWNoZV9hbGxvYyhpaW50X2NhY2hlLCBHRlBfTk9GUyk7CiAJaWYgKCFpaW50KQogCQlyZXR1cm4gaWludDsKIAotCXJjID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpOworCXJjID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9OT0ZTKTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKaW5kZXggMmZiMjhlZi4uMDZlYzcyMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYworKysgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCkBAIC04NzMsNyArODczLDcgQEAKIAkvKiBvdGhlcndpc2Ugc3BlY2lmeSB0aGUgZGVzdGluYXRpb24ga2V5cmluZyByZWNvcmRlZCBpbiB0aGUKIAkgKiBhdXRob3Jpc2F0aW9uIGtleSAoYW55IEtFWV9TUEVDXypfS0VZUklORykgKi8KIAlpZiAocmluZ2lkID49IEtFWV9TUEVDX1JFUVVFU1RPUl9LRVlSSU5HKSB7Ci0JCSpfZGVzdF9rZXlyaW5nID0gcmthLT5kZXN0X2tleXJpbmc7CisJCSpfZGVzdF9rZXlyaW5nID0ga2V5X2dldChya2EtPmRlc3Rfa2V5cmluZyk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvZGVjcy90YXMuYyBiL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMKaW5kZXggZjBlYmM5NzEuLjFkZDY2ZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMKKysrIGIvc291bmQvYW9hL2NvZGVjcy90YXMuYwpAQCAtODk3LDYgKzg5NywxNSBAQAogCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKIAlpZiAoIWNsaWVudCkKIAkJcmV0dXJuIC1FTk9ERVY7CisJLyoKKwkgKiBXZSBrbm93IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBsb2FkZWQsIHNvIHRoZSBkZXZpY2Ugc2hvdWxkIGJlCisJICogYWxyZWFkeSBib3VuZC4gSWYgbm90IGl0IG1lYW5zIGJpbmRpbmcgZmFpbGVkLCBhbmQgdGhlbiB0aGVyZQorCSAqIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgdGhlIGRldmljZSBpbnN0YW50aWF0ZWQuCisJICovCisJaWYgKCFjbGllbnQtPmRyaXZlcikgeworCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJLyoKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggZGM3ODI3Mi4uMWYwZjgyMSAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC05MzcsNiArOTM3LDcgQEAKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTc7CiAJaW50IHJldDsKIAorCXdyaXRlbCgwLCBhYWNpLT5iYXNlICsgQUM5N19QT1dFUkRPV04pOwogCS8qCiAJICogQXNzZXJ0IEFBQ0lSRVNFVCBmb3IgMnVzCiAJICovCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCmluZGV4IDRlMzRkMTkuLmI0YjQ4YWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCkBAIC0xMzcsOSArMTM3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfYWM5N19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGNhcmQpCkBAIC0xNDgsOSArMTQ4LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjYXJkKQpAQCAtMTU5LDkgKzE1OSwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNlbHNlCi0jZGVmaW5lIHB4YTJ4eF9hYzk3X3N1c3BlbmQJTlVMTAotI2RlZmluZSBweGEyeHhfYWM5N19yZXN1bWUJTlVMTAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHB4YTJ4eF9hYzk3X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YTJ4eF9hYzk3X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGEyeHhfYWM5N19yZXN1bWUsCit9OwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHB4YTJ4eF9hYzk3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKQEAgLTI0MSwxMSArMjQyLDEyIEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGEyeHhfYWM5N19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YTJ4eF9hYzk3X3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocHhhMnh4X2FjOTdfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHB4YTJ4eF9hYzk3X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBweGEyeHhfYWM5N19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTJ4eC1hYzk3IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGEyeHhfYWM5N19wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggMGMxNDQwMS4uYzY5YzYwYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY20uYworKysgYi9zb3VuZC9jb3JlL3BjbS5jCkBAIC05NTMsMTEgKzk1MywxMiBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXN0cnVjdCBzbmRfcGNtX25vdGlmeSAqbm90aWZ5OwogCWNoYXIgc3RyWzE2XTsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCWlmIChzbmRfQlVHX09OKCFwY20gfHwgIWRldmljZSkpCisJaWYgKHNuZF9CVUdfT04oIWRldmljZSB8fCAhZGV2aWNlLT5kZXZpY2VfZGF0YSkpCiAJCXJldHVybiAtRU5YSU87CisJcGNtID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKIAltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJZXJyID0gc25kX3BjbV9hZGQocGNtKTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCmluZGV4IDU2MWQ2ZDkuLmFiNzNlZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC0yOTg1LDcgKzI5ODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX3N0YXR1cyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX3N0YXR1cyA9CiB7CiAJLmZhdWx0ID0Jc25kX3BjbV9tbWFwX3N0YXR1c19mYXVsdCwKIH07CkBAIC0zMDI0LDcgKzMwMjQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX2NvbnRyb2wgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19jb250cm9sID0KIHsKIAkuZmF1bHQgPQlzbmRfcGNtX21tYXBfY29udHJvbF9mYXVsdCwKIH07CkBAIC0zMDk0LDcgKzMwOTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX2RhdGEgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhID0KIHsKIAkub3BlbiA9CQlzbmRfcGNtX21tYXBfZGF0YV9vcGVuLAogCS5jbG9zZSA9CXNuZF9wY21fbW1hcF9kYXRhX2Nsb3NlLApAQCAtMzExOCw3ICszMTE4LDcgQEAKICAqIG1tYXAgdGhlIERNQSBidWZmZXIgb24gSS9PIG1lbW9yeSBhcmVhCiAgKi8KICNpZiBTTkRSVl9QQ01fSU5GT19NTUFQX0lPTUVNCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX2RhdGFfbW1pbyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX2RhdGFfbW1pbyA9CiB7CiAJLm9wZW4gPQkJc25kX3BjbV9tbWFwX2RhdGFfb3BlbiwKIAkuY2xvc2UgPQlzbmRfcGNtX21tYXBfZGF0YV9jbG9zZSwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jIGIvc291bmQvY29yZS9yYXdtaWRpLmMKaW5kZXggYzBhZGMxNC4uNzBkNmYyNSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9yYXdtaWRpLmMKKysrIGIvc291bmQvY29yZS9yYXdtaWRpLmMKQEAgLTI0OCw3ICsyNDgsOCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc3Vic3RyZWFtLCAmcy0+c3Vic3RyZWFtcywgbGlzdCkgewogCQlpZiAoc3Vic3RyZWFtLT5vcGVuZWQpIHsKIAkJCWlmIChzdHJlYW0gPT0gU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQgfHwKLQkJCSAgICAhKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKSkKKwkJCSAgICAhKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKSB8fAorCQkJICAgICFzdWJzdHJlYW0tPmFwcGVuZCkKIAkJCQljb250aW51ZTsKIAkJfQogCQlpZiAoc3ViZGV2aWNlIDwgMCB8fCBzdWJkZXZpY2UgPT0gc3Vic3RyZWFtLT5udW1iZXIpIHsKQEAgLTI2NiwxNyArMjY3LDIxIEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IHNuZF9yYXdtaWRpX3J1bnRpbWVfY3JlYXRlKHN1YnN0cmVhbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc3Vic3RyZWFtLT5vcHMtPm9wZW4oc3Vic3RyZWFtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlzdWJzdHJlYW0tPm9wZW5lZCA9IDE7Ci0JaWYgKHN1YnN0cmVhbS0+dXNlX2NvdW50KysgPT0gMCkKKwlpZiAoc3Vic3RyZWFtLT51c2VfY291bnQgPT0gMCkgeworCQllcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IHN1YnN0cmVhbS0+b3BzLT5vcGVuKHN1YnN0cmVhbSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc3Vic3RyZWFtKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJc3Vic3RyZWFtLT5vcGVuZWQgPSAxOwogCQlzdWJzdHJlYW0tPmFjdGl2ZV9zZW5zaW5nID0gMDsKLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpCi0JCXN1YnN0cmVhbS0+YXBwZW5kID0gMTsKKwkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKQorCQkJc3Vic3RyZWFtLT5hcHBlbmQgPSAxOworCX0KKwlzdWJzdHJlYW0tPnVzZV9jb3VudCsrOwogCXJtaWRpLT5zdHJlYW1zW3N1YnN0cmVhbS0+c3RyZWFtXS5zdWJzdHJlYW1fb3BlbmVkKys7CiAJcmV0dXJuIDA7CiB9CkBAIC0yOTcsMjcgKzMwMiwyNyBAQAogCQkJCSAgICAgICBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKIAkJCQkgICAgICAgbW9kZSwgJnNpbnB1dCk7CiAJCWlmIChlcnIgPCAwKQotCQkJZ290byBfX2Vycm9yOworCQkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7CiAJCWVyciA9IGFzc2lnbl9zdWJzdHJlYW0ocm1pZGksIHN1YmRldmljZSwKIAkJCQkgICAgICAgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULAogCQkJCSAgICAgICBtb2RlLCAmc291dHB1dCk7CiAJCWlmIChlcnIgPCAwKQotCQkJZ290byBfX2Vycm9yOworCQkJcmV0dXJuIGVycjsKIAl9CiAKIAlpZiAoc2lucHV0KSB7CiAJCWVyciA9IG9wZW5fc3Vic3RyZWFtKHJtaWRpLCBzaW5wdXQsIG1vZGUpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJfQogCWlmIChzb3V0cHV0KSB7CiAJCWVyciA9IG9wZW5fc3Vic3RyZWFtKHJtaWRpLCBzb3V0cHV0LCBtb2RlKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWlmIChzaW5wdXQpCiAJCQkJY2xvc2Vfc3Vic3RyZWFtKHJtaWRpLCBzaW5wdXQsIDApOwotCQkJZ290byBfX2Vycm9yOworCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIApAQCAtMzI1LDEzICszMzAsNiBAQAogCXJmaWxlLT5pbnB1dCA9IHNpbnB1dDsKIAlyZmlsZS0+b3V0cHV0ID0gc291dHB1dDsKIAlyZXR1cm4gMDsKLQotICAgICAgX19lcnJvcjoKLQlpZiAoc2lucHV0ICYmIHNpbnB1dC0+cnVudGltZSkKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNpbnB1dCk7Ci0JaWYgKHNvdXRwdXQgJiYgc291dHB1dC0+cnVudGltZSkKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNvdXRwdXQpOwotCXJldHVybiBlcnI7CiB9CiAKIC8qIGNhbGxlZCBmcm9tIHNvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCA2YmEwNjZjLi4yNTJlMDRjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShwY21fZGV2cywgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocGNtX2RldnMsICJQQ00gZGV2aWNlcyAjICgwLTQpIGZvciBkdW1teSBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkocGNtX3N1YnN0cmVhbXMsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBjbV9zdWJzdHJlYW1zLCAiUENNIHN1YnN0cmVhbXMgIyAoMS0xNikgZm9yIGR1bW15IGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MocGNtX3N1YnN0cmVhbXMsICJQQ00gc3Vic3RyZWFtcyAjICgxLTEyOCkgZm9yIGR1bW15IGRyaXZlci4iKTsKIC8vbW9kdWxlX3BhcmFtX2FycmF5KG1pZGlfZGV2cywgaW50LCBOVUxMLCAwNDQ0KTsKIC8vTU9EVUxFX1BBUk1fREVTQyhtaWRpX2RldnMsICJNSURJIGRldmljZXMgIyAoMC0yKSBmb3IgZHVtbXkgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtKGZha2VfYnVmZmVyLCBib29sLCAwNDQ0KTsKQEAgLTgwOCw4ICs4MDgsNiBAQAogCXVuc2lnbmVkIGludCBpZHg7CiAJaW50IGVycjsKIAotCWlmIChzbmRfQlVHX09OKCFkdW1teSkpCi0JCXJldHVybiAtRUlOVkFMOwogCXNwaW5fbG9ja19pbml0KCZkdW1teS0+bWl4ZXJfbG9jayk7CiAJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIkR1bW15IE1peGVyIik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYwppbmRleCA2ZTdkMDlhLi43ZDcyMmEwIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCkBAIC0yOSw2ICsyOSw4IEBACiAKIGV4dGVybiBpbnQgdXNlX2ludGVybmFsX2RydW1zOwogCitzdGF0aWMgdm9pZCBzbmRfb3BsM19ub3RlX29mZl91bnNhZmUodm9pZCAqcCwgaW50IG5vdGUsIGludCB2ZWwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX21pZGlfY2hhbm5lbCAqY2hhbik7CiAvKgogICogVGhlIG5leHQgdGFibGUgbG9va3MgbWFnaWNhbCwgYnV0IGl0IGNlcnRhaW5seSBpcyBub3QuIEl0cyB2YWx1ZXMgaGF2ZQogICogYmVlbiBjYWxjdWxhdGVkIGFzIHRhYmxlW2ldPTgqbG9nKGkvNjQpL2xvZygyKSB3aXRoIGFuIG9idmlvdXMgZXhjZXB0aW9uCkBAIC0yNDIsMTYgKzI0NCwyMCBAQAogCWludCBhZ2FpbiA9IDA7CiAJaW50IGk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmb3BsMy0+c3lzX3RpbWVyX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBvcGwzLT5tYXhfdm9pY2VzOyBpKyspIHsKIAkJc3RydWN0IHNuZF9vcGwzX3ZvaWNlICp2cCA9ICZvcGwzLT52b2ljZXNbaV07CiAJCWlmICh2cC0+c3RhdGUgPiAwICYmIHZwLT5ub3RlX29mZl9jaGVjaykgewogCQkJaWYgKHZwLT5ub3RlX29mZiA9PSBqaWZmaWVzKQotCQkJCXNuZF9vcGwzX25vdGVfb2ZmKG9wbDMsIHZwLT5ub3RlLCAwLCB2cC0+Y2hhbik7CisJCQkJc25kX29wbDNfbm90ZV9vZmZfdW5zYWZlKG9wbDMsIHZwLT5ub3RlLCAwLAorCQkJCQkJCSB2cC0+Y2hhbik7CiAJCQllbHNlCiAJCQkJYWdhaW4rKzsKIAkJfQogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGwzLT52b2ljZV9sb2NrLCBmbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3BsMy0+c3lzX3RpbWVyX2xvY2ssIGZsYWdzKTsKIAlpZiAoYWdhaW4pIHsKIAkJb3BsMy0+dGxpc3QuZXhwaXJlcyA9IGppZmZpZXMgKyAxOwkvKiBpbnZva2UgYWdhaW4gKi8KIAkJYWRkX3RpbWVyKCZvcGwzLT50bGlzdCk7CkBAIC02NTgsMTUgKzY2NCwxNCBAQAogLyoKICAqIFJlbGVhc2UgYSBub3RlIGluIHJlc3BvbnNlIHRvIGEgbWlkaSBub3RlIG9mZi4KICAqLwotdm9pZCBzbmRfb3BsM19ub3RlX29mZih2b2lkICpwLCBpbnQgbm90ZSwgaW50IHZlbCwgc3RydWN0IHNuZF9taWRpX2NoYW5uZWwgKmNoYW4pCitzdGF0aWMgdm9pZCBzbmRfb3BsM19ub3RlX29mZl91bnNhZmUodm9pZCAqcCwgaW50IG5vdGUsIGludCB2ZWwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX21pZGlfY2hhbm5lbCAqY2hhbikKIHsKICAgCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAogCWludCB2b2ljZTsKIAlzdHJ1Y3Qgc25kX29wbDNfdm9pY2UgKnZwOwogCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCW9wbDMgPSBwOwogCiAjaWZkZWYgREVCVUdfTUlESQpAQCAtNjc0LDEyICs2NzksOSBAQAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSwgbm90ZSk7CiAjZW5kaWYKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZvcGwzLT52b2ljZV9sb2NrLCBmbGFncyk7Ci0KIAlpZiAob3BsMy0+c3ludGhfbW9kZSA9PSBTTkRSVl9PUEwzX01PREVfU0VRKSB7CiAJCWlmIChjaGFuLT5kcnVtX2NoYW5uZWwgJiYgdXNlX2ludGVybmFsX2RydW1zKSB7CiAJCQlzbmRfb3BsM19kcnVtX3N3aXRjaChvcGwzLCBub3RlLCB2ZWwsIDAsIGNoYW4pOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCS8qIHRoaXMgbG9vcCB3aWxsIGhvcGVmdWxseSBraWxsIGFsbCBleHRyYSB2b2ljZXMsIGJlY2F1c2UKQEAgLTY5Nyw2ICs2OTksMTYgQEAKIAkJCXNuZF9vcGwzX2tpbGxfdm9pY2Uob3BsMywgdm9pY2UpOwogCQl9CiAJfQorfQorCit2b2lkIHNuZF9vcGwzX25vdGVfb2ZmKHZvaWQgKnAsIGludCBub3RlLCBpbnQgdmVsLAorCQkgICAgICAgc3RydWN0IHNuZF9taWRpX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IHNuZF9vcGwzICpvcGwzID0gcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wbDMtPnZvaWNlX2xvY2ssIGZsYWdzKTsKKwlzbmRfb3BsM19ub3RlX29mZl91bnNhZmUocCwgbm90ZSwgdmVsLCBjaGFuKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGwzLT52b2ljZV9sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbGliLmMKaW5kZXggODRjYzI2NS4uZTExNDVhYyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbGliLmMKKysrIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbGliLmMKQEAgLTM5LDI1ICszOSwyMCBAQAogLyogd3JpdGUgdGhlIHBvcnQgYW5kIHJldHVybnMgdGhlIG5leHQgZXhwaXJlIHRpbWUgaW4gbnM7CiAgKiBjYWxsZWQgYXQgdGhlIHRyaWdnZXItc3RhcnQgYW5kIGluIGhydGltZXIgY2FsbGJhY2sKICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNzcF90aW1lcl91cGRhdGUoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3N0YXRpYyB1NjQgcGNzcF90aW1lcl91cGRhdGUoc3RydWN0IHNuZF9wY3NwICpjaGlwKQogewogCXVuc2lnbmVkIGNoYXIgdGltZXJfY250LCB2YWw7CiAJdTY0IG5zOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7Ci0Jc3RydWN0IHNuZF9wY3NwICpjaGlwID0gY29udGFpbmVyX29mKGhhbmRsZSwgc3RydWN0IHNuZF9wY3NwLCB0aW1lcik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChjaGlwLT50aGFsZikgewogCQlvdXRiKGNoaXAtPnZhbDYxLCAweDYxKTsKIAkJY2hpcC0+dGhhbGYgPSAwOwotCQlpZiAoIWF0b21pY19yZWFkKCZjaGlwLT50aW1lcl9hY3RpdmUpKQotCQkJcmV0dXJuIDA7CiAJCXJldHVybiBjaGlwLT5uc19yZW07CiAJfQogCi0JaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSkKLQkJcmV0dXJuIDA7CiAJc3Vic3RyZWFtID0gY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtOwogCWlmICghc3Vic3RyZWFtKQogCQlyZXR1cm4gMDsKQEAgLTg4LDI0ICs4MywxNyBAQAogCXJldHVybiBuczsKIH0KIAotZW51bSBocnRpbWVyX3Jlc3RhcnQgcGNzcF9kb190aW1lcihzdHJ1Y3QgaHJ0aW1lciAqaGFuZGxlKQorc3RhdGljIHZvaWQgcGNzcF9wb2ludGVyX3VwZGF0ZShzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXApCiB7Ci0Jc3RydWN0IHNuZF9wY3NwICpjaGlwID0gY29udGFpbmVyX29mKGhhbmRsZSwgc3RydWN0IHNuZF9wY3NwLCB0aW1lcik7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07Ci0JaW50IHBlcmlvZHNfZWxhcHNlZCwgcG9pbnRlcl91cGRhdGU7CiAJc2l6ZV90IHBlcmlvZF9ieXRlcywgYnVmZmVyX2J5dGVzOwotCXVuc2lnbmVkIGxvbmcgbnM7CisJaW50IHBlcmlvZHNfZWxhcHNlZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcG9pbnRlcl91cGRhdGUgPSAhY2hpcC0+dGhhbGY7Ci0JbnMgPSBwY3NwX3RpbWVyX3VwZGF0ZShoYW5kbGUpOwotCWlmICghbnMpCi0JCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKLQogCS8qIHVwZGF0ZSB0aGUgcGxheWJhY2sgcG9zaXRpb24gKi8KIAlzdWJzdHJlYW0gPSBjaGlwLT5wbGF5YmFja19zdWJzdHJlYW07CiAJaWYgKCFzdWJzdHJlYW0pCi0JCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKwkJcmV0dXJuOwogCiAJcGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CiAJYnVmZmVyX2J5dGVzID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CkBAIC0xMzQsNiArMTIyLDI2IEBACiAKIAlpZiAocGVyaW9kc19lbGFwc2VkKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZwY3NwX3BjbV90YXNrbGV0KTsKK30KKworZW51bSBocnRpbWVyX3Jlc3RhcnQgcGNzcF9kb190aW1lcihzdHJ1Y3QgaHJ0aW1lciAqaGFuZGxlKQoreworCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOworCWludCBwb2ludGVyX3VwZGF0ZTsKKwl1NjQgbnM7CisKKwlpZiAoIWF0b21pY19yZWFkKCZjaGlwLT50aW1lcl9hY3RpdmUpIHx8ICFjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0pCisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKworCXBvaW50ZXJfdXBkYXRlID0gIWNoaXAtPnRoYWxmOworCW5zID0gcGNzcF90aW1lcl91cGRhdGUoY2hpcCk7CisJaWYgKCFucykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ1NQOiB1bmV4cGVjdGVkIHN0b3BcbiIpOworCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisJfQorCisJaWYgKHBvaW50ZXJfdXBkYXRlKQorCQlwY3NwX3BvaW50ZXJfdXBkYXRlKGNoaXApOwogCiAJaHJ0aW1lcl9mb3J3YXJkKGhhbmRsZSwgaHJ0aW1lcl9nZXRfZXhwaXJlcyhoYW5kbGUpLCBuc190b19rdGltZShucykpOwogCkBAIC0xNDIsOCArMTUwLDYgQEAKIAogc3RhdGljIGludCBwY3NwX3N0YXJ0X3BsYXlpbmcoc3RydWN0IHNuZF9wY3NwICpjaGlwKQogewotCXVuc2lnbmVkIGxvbmcgbnM7Ci0KICNpZiBQQ1NQX0RFQlVHCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENTUDogc3RhcnRfcGxheWluZyBjYWxsZWRcbiIpOwogI2VuZGlmCkBAIC0xNTksMTEgKzE2NSw3IEBACiAJYXRvbWljX3NldCgmY2hpcC0+dGltZXJfYWN0aXZlLCAxKTsKIAljaGlwLT50aGFsZiA9IDA7CiAKLQlucyA9IHBjc3BfdGltZXJfdXBkYXRlKCZwY3NwX2NoaXAudGltZXIpOwotCWlmICghbnMpCi0JCXJldHVybiAtRUlPOwotCi0JaHJ0aW1lcl9zdGFydCgmcGNzcF9jaGlwLnRpbWVyLCBrdGltZV9zZXQoMCwgbnMpLCBIUlRJTUVSX01PREVfUkVMKTsKKwlocnRpbWVyX3N0YXJ0KCZwY3NwX2NoaXAudGltZXIsIGt0aW1lX3NldCgwLCAwKSwgSFJUSU1FUl9NT0RFX1JFTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzMiwyMSArMjM0LDIyIEBACiBzdGF0aWMgaW50IHNuZF9wY3NwX3BsYXliYWNrX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY3NwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotI2lmIFBDU1BfREVCVUcKLQlwcmludGsoS0VSTl9JTkZPICJQQ1NQOiBwcmVwYXJlIGNhbGxlZCwgIgotCQkJInNpemU9JXppIHBzaXplPSV6aSBmPSV6aSBmMT0laVxuIiwKLQkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pLAotCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSksCi0JCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSAvCi0JCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSwKLQkJCXN1YnN0cmVhbS0+cnVudGltZS0+cGVyaW9kcyk7Ci0jZW5kaWYKIAlwY3NwX3N5bmNfc3RvcChjaGlwKTsKIAljaGlwLT5wbGF5YmFja19wdHIgPSAwOwogCWNoaXAtPnBlcmlvZF9wdHIgPSAwOwogCWNoaXAtPmZtdF9zaXplID0KIAkJc25kX3BjbV9mb3JtYXRfcGh5c2ljYWxfd2lkdGgoc3Vic3RyZWFtLT5ydW50aW1lLT5mb3JtYXQpID4+IDM7CiAJY2hpcC0+aXNfc2lnbmVkID0gc25kX3BjbV9mb3JtYXRfc2lnbmVkKHN1YnN0cmVhbS0+cnVudGltZS0+Zm9ybWF0KTsKKyNpZiBQQ1NQX0RFQlVHCisJcHJpbnRrKEtFUk5fSU5GTyAiUENTUDogcHJlcGFyZSBjYWxsZWQsICIKKwkJCSJzaXplPSV6aSBwc2l6ZT0lemkgZj0lemkgZjE9JWkgZnNpemU9JWlcbiIsCisJCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSwKKwkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAorCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSkgLworCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSksCisJCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZHMsCisJCQljaGlwLT5mbXRfc2l6ZSk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbWl4ZXIuYyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMKaW5kZXggMTk5YjAzMy4uOTAzYmM4NCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbWl4ZXIuYworKysgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9taXhlci5jCkBAIC03Miw3ICs3Miw3IEBACiAJaWYgKHRyZWJsZSAhPSBjaGlwLT50cmVibGUpIHsKIAkJY2hpcC0+dHJlYmxlID0gdHJlYmxlOwogI2lmIFBDU1BfREVCVUcKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENTUDogcmF0ZSBzZXQgdG8gJWlcbiIsIFBDU1BfUkFURSgpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUENTUDogcmF0ZSBzZXQgdG8gJWxpXG4iLCBQQ1NQX1JBVEUoKSk7CiAjZW5kaWYKIAkJY2hhbmdlZCA9IDE7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9oYWwyLmMgYi9zb3VuZC9taXBzL2hhbDIuYwppbmRleCBjNTI2OTFjLi45YTg4Y2RmIDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL2hhbDIuYworKysgYi9zb3VuZC9taXBzL2hhbDIuYwpAQCAtOTE1LDcgKzkxNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IGhhbDJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBoYWwyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCmluZGV4IGU0OTc1MjUuLjg2OTFmNGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCisrKyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCkBAIC05NzMsNyArOTczLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgc25kX3NnaW8yYXVkaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfc2dpbzJhdWRpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKaW5kZXggNzkzYjdmNC4uM2YzYzNmNyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCkBAIC0yMTksNyArMjE5LDkgQEAKICAgICAgKiAgTWlkIGxldmVsIHN0dWZmCiAgICAgICovCiAKLXN0cnVjdCBzb3VuZF9zZXR0aW5ncyBkbWFzb3VuZCA9IHsgLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQgfTsKK3N0cnVjdCBzb3VuZF9zZXR0aW5ncyBkbWFzb3VuZCA9IHsKKwkubG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGRtYXNvdW5kLmxvY2spCit9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc291bmRfc2lsZW5jZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2hleDJoZXguYyBiL3NvdW5kL29zcy9oZXgyaGV4LmMKaW5kZXggNTQ2MGZhYS4uMDQxZWY1YyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2hleDJoZXguYworKysgYi9zb3VuZC9vc3MvaGV4MmhleC5jCkBAIC0xMiw3ICsxMiw3IEBACiAjZGVmaW5lIE1BWF9TSVpFICgyNTYqMTAyNCkKIHVuc2lnbmVkIGNoYXIgYnVmW01BWF9TSVpFXTsKIAotaW50IGxvYWRoZXgoRklMRSAqaW5mLCB1bnNpZ25lZCBjaGFyICpidWYpCitzdGF0aWMgaW50IGxvYWRoZXgoRklMRSAqaW5mLCB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAJaW50IGw9MCwgYywgaTsKIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NiX2NvbW1vbi5jIGIvc291bmQvb3NzL3NiX2NvbW1vbi5jCmluZGV4IDc3ZDBlNWUuLmNlNGRiNDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zYl9jb21tb24uYworKysgYi9zb3VuZC9vc3Mvc2JfY29tbW9uLmMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgotCQkJCS8qIHByaW50ayhLRVJOX1dBUk4gIlNvdW5kIEJsYXN0ZXI6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KKwkJCQkvKiBwcmludGsoS0VSTl9XQVJOSU5HICJTb3VuZCBCbGFzdGVyOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCiAJCQkJOwogCQl9CiAJfQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6Ci0JCQkJLyogcHJpbnRrKEtFUk5fV0FSTiAiU291bmQgQmxhc3RlcjogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLworCQkJCS8qIHByaW50ayhLRVJOX1dBUk5JTkcgIlNvdW5kIEJsYXN0ZXI6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KIAkJCQk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2JfZXNzLmMgYi9zb3VuZC9vc3Mvc2JfZXNzLmMKaW5kZXggMTgwZTk1Yy4uNTFhM2QzOCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NiX2Vzcy5jCisrKyBiL3NvdW5kL29zcy9zYl9lc3MuYwpAQCAtNzgyLDcgKzc4Miw3IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OjsKLQkJCS8qIHByaW50ayhLRVJOX1dBUk4gIkVTUzogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLworCQkJLyogcHJpbnRrKEtFUk5fV0FSTklORyAiRVNTOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCiAJfQogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wYXJpc2MvaGFybW9ueS5jIGIvc291bmQvcGFyaXNjL2hhcm1vbnkuYwppbmRleCBlOTI0NDkyLi5mNDdmOWUyIDEwMDY0NAotLS0gYS9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCisrKyBiL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKQEAgLTYyNCw2ICs2MjQsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKIAorCWlmIChzbmRfQlVHX09OKCFoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAloYXJtb255X2Rpc2FibGVfaW50ZXJydXB0cyhoKTsKIAkKICAgIAllcnIgPSBzbmRfcGNtX25ldyhoLT5jYXJkLCAiaGFybW9ueSIsIDAsIDEsIDEsICZwY20pOwpAQCAtODY1LDExICs4NjgsMTIgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBzbmRfaGFybW9ueV9taXhlcl9pbml0KHN0cnVjdCBzbmRfaGFybW9ueSAqaCkKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBoLT5jYXJkOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgaWR4LCBlcnI7CiAKIAlpZiAoc25kX0JVR19PTighaCkpCiAJCXJldHVybiAtRUlOVkFMOworCWNhcmQgPSBoLT5jYXJkOwogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJIYXJtb255IEdhaW4gY29udHJvbCBpbnRlcmZhY2UiKTsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgSEFSTU9OWV9DT05UUk9MUzsgaWR4KyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9LY29uZmlnIGIvc291bmQvcGNpL0tjb25maWcKaW5kZXggZmI1ZWUzYy4uNzVjNjAyYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL0tjb25maWcKKysrIGIvc291bmQvcGNpL0tjb25maWcKQEAgLTI1OSw3ICsyNTksNiBAQAogCiBjb25maWcgU05EX0NTNTUzNUFVRElPCiAJdHJpc3RhdGUgIkNTNTUzNS9DUzU1MzYgQXVkaW8iCi0JZGVwZW5kcyBvbiBYODYgJiYgIVg4Nl82NAogCXNlbGVjdCBTTkRfUENNCiAJc2VsZWN0IFNORF9BQzk3X0NPREVDCiAJaGVscApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCmluZGV4IGI0NThkMjAuLmFhZjRkYTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYworKysgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKQEAgLTk3Myw3ICs5NzMsNyBAQAogCXZvaWQgKnByaXZhdGVfZGF0YTsKIAogCXNuZF9hbGlfcHJpbnRrKCJmcmVlX3ZvaWNlOiBjaGFubmVsPSVkXG4iLHB2b2ljZS0+bnVtYmVyKTsKLQlpZiAocHZvaWNlID09IE5VTEwgfHwgIXB2b2ljZS0+dXNlKQorCWlmICghcHZvaWNlLT51c2UpCiAJCXJldHVybjsKIAlzbmRfYWxpX2NsZWFyX3ZvaWNlcyhjb2RlYywgcHZvaWNlLT5udW1iZXIsIHB2b2ljZS0+bnVtYmVyKTsKIAlzcGluX2xvY2tfaXJxKCZjb2RlYy0+dm9pY2VfYWxsb2MpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2J0ODd4LmMgYi9zb3VuZC9wY2kvYnQ4N3guYwppbmRleCAyNDU4NWM2Li40ZTJiOTI1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYnQ4N3guYworKysgYi9zb3VuZC9wY2kvYnQ4N3guYwpAQCAtODA4LDYgKzgwOCw4IEBACiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgMHgxMDAyLCAweDAwMDEsIEdFTkVSSUMpLAogCS8qIExlYWR0ZWsgV2luZmFzdCB0diAyMDAweHAgZGVsdXggKi8KIAlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCAweDEwN2QsIDB4NjYwNiwgR0VORVJJQyksCisJLyogUGlubmFjbGUgUENUViAqLworCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTFiZCwgMHgwMDEyLCBHRU5FUklDKSwKIAkvKiBWb29kb28gVFYgMjAwICovCiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgMHgxMjFhLCAweDMwMDAsIEdFTkVSSUMpLAogCS8qIEFza2V5IENvbXB1dGVyIENvcnAuIE1hZ2ljVFZpZXcnOTkgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jIGIvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKaW5kZXggYjFiM2E2NC4uNzU0NTQ2NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKQEAgLTEwMzcsNyArMTAzNyw3IEBACiAKIHN0YXRpYyBpbnQgYXRjX2xpbmVfc3Vycm91bmRfdW5tdXRlKHN0cnVjdCBjdF9hdGMgKmF0YywgdW5zaWduZWQgY2hhciBzdGF0ZSkKIHsKLQlyZXR1cm4gYXRjX2RhaW9fdW5tdXRlKGF0Yywgc3RhdGUsIExJTkVPNCk7CisJcmV0dXJuIGF0Y19kYWlvX3VubXV0ZShhdGMsIHN0YXRlLCBMSU5FTzIpOwogfQogCiBzdGF0aWMgaW50IGF0Y19saW5lX2NsZmVfdW5tdXRlKHN0cnVjdCBjdF9hdGMgKmF0YywgdW5zaWduZWQgY2hhciBzdGF0ZSkKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiAKIHN0YXRpYyBpbnQgYXRjX2xpbmVfcmVhcl91bm11dGUoc3RydWN0IGN0X2F0YyAqYXRjLCB1bnNpZ25lZCBjaGFyIHN0YXRlKQogewotCXJldHVybiBhdGNfZGFpb191bm11dGUoYXRjLCBzdGF0ZSwgTElORU8yKTsKKwlyZXR1cm4gYXRjX2RhaW9fdW5tdXRlKGF0Yywgc3RhdGUsIExJTkVPNCk7CiB9CiAKIHN0YXRpYyBpbnQgYXRjX2xpbmVfaW5fdW5tdXRlKHN0cnVjdCBjdF9hdGMgKmF0YywgdW5zaWduZWQgY2hhciBzdGF0ZSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCmluZGV4IGRhMjA2NWMuLjEzMDVmN2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwpAQCAtOTUwLDcgKzk1MCw3IEBACiAJQ29udHJvbCBpbnRlcmZhY2UKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmbmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisjaWYgIWRlZmluZWQoRUNIT0NBUkRfSEFTX1ZNSVhFUikgfHwgZGVmaW5lZChFQ0hPQ0FSRF9IQVNfTElORV9PVVRfR0FJTikKIAogLyoqKioqKioqKioqKioqKioqKiogUENNIG91dHB1dCB2b2x1bWUgKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgc25kX2VjaG9fb3V0cHV0X2dhaW5faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTEwMDMsNiArMTAwMywxOSBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCisjaWZkZWYgRUNIT0NBUkRfSEFTX0xJTkVfT1VUX0dBSU4KKy8qIE9uIHRoZSBNaWEgdGhpcyBvbmUgY29udHJvbHMgdGhlIGxpbmUtb3V0IHZvbHVtZSAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX2xpbmVfb3V0cHV0X2dhaW4gX19kZXZpbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJMaW5lIFBsYXliYWNrIFZvbHVtZSIsCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCwKKwkuaW5mbyA9IHNuZF9lY2hvX291dHB1dF9nYWluX2luZm8sCisJLmdldCA9IHNuZF9lY2hvX291dHB1dF9nYWluX2dldCwKKwkucHV0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fcHV0LAorCS50bHYgPSB7LnAgPSBkYl9zY2FsZV9vdXRwdXRfZ2Fpbn0sCit9OworI2Vsc2UKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19wY21fb3V0cHV0X2dhaW4gX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZSA9ICJQQ00gUGxheWJhY2sgVm9sdW1lIiwKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTEwMTIsOSArMTAyNSwxMCBAQAogCS5wdXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9wdXQsCiAJLnRsdiA9IHsucCA9IGRiX3NjYWxlX291dHB1dF9nYWlufSwKIH07Ci0KICNlbmRpZgogCisjZW5kaWYgLyogIUVDSE9DQVJEX0hBU19WTUlYRVIgfHwgRUNIT0NBUkRfSEFTX0xJTkVfT1VUX0dBSU4gKi8KKwogCiAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgpAQCAtMjAzMCwxMCArMjA0NCwxOCBAQAogCXNuZF9lY2hvX3ZtaXhlci5jb3VudCA9IG51bV9waXBlc19vdXQoY2hpcCkgKiBudW1fYnVzc2VzX291dChjaGlwKTsKIAlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fdm1peGVyLCBjaGlwKSkpIDwgMCkKIAkJZ290byBjdGxfZXJyb3I7Ci0jZWxzZQotCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob19wY21fb3V0cHV0X2dhaW4sIGNoaXApKSkgPCAwKQorI2lmZGVmIEVDSE9DQVJEX0hBU19MSU5FX09VVF9HQUlOCisJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJCSAgc25kX2N0bF9uZXcxKCZzbmRfZWNob19saW5lX291dHB1dF9nYWluLCBjaGlwKSk7CisJaWYgKGVyciA8IDApCiAJCWdvdG8gY3RsX2Vycm9yOwogI2VuZGlmCisjZWxzZSAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCisJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJCSAgc25kX2N0bF9uZXcxKCZzbmRfZWNob19wY21fb3V0cHV0X2dhaW4sIGNoaXApKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBjdGxfZXJyb3I7CisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX1ZNSVhFUiAqLwogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX0lOUFVUX0dBSU4KIAlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fbGluZV9pbnB1dF9nYWluLCBjaGlwKSkpIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCmluZGV4IGYzYjliNDUuLmYwNWM4YzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYwpAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBFQ0hPQ0FSRF9IQVNfQURBVAlGQUxTRQogI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1RFUkVPX0JJR19FTkRJQU4zMgogI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTUlESQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTElORV9PVVRfR0FJTgogCiAvKiBQaXBlIGluZGV4ZXMgKi8KICNkZWZpbmUgUFhfQU5BTE9HX09VVAkwCS8qIDggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDIwYTY2ZjguLjY1MTdmNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtNzIyLDkgKzcyMiwxMCBAQAogCQkgICBjaGlwLT5sYXN0X2NtZFthZGRyXSk7CiAJY2hpcC0+c2luZ2xlX2NtZCA9IDE7CiAJYnVzLT5yZXNwb25zZV9yZXNldCA9IDA7Ci0JLyogcmUtaW5pdGlhbGl6ZSBDT1JCL1JJUkIgKi8KKwkvKiByZWxlYXNlIENPUkIvUklSQiAqLwogCWF6eF9mcmVlX2NtZF9pbyhjaGlwKTsKLQlhenhfaW5pdF9jbWRfaW8oY2hpcCk7CisJLyogZGlzYWJsZSB1bnNvbGljaXRlZCByZXNwb25zZXMgKi8KKwlhenhfd3JpdGVsKGNoaXAsIEdDVEwsIGF6eF9yZWFkbChjaGlwLCBHQ1RMKSAmIH5JQ0g2X0dDVExfVU5TT0wpOwogCXJldHVybiAtMTsKIH0KIApAQCAtODY1LDcgKzg2Niw5IEBACiAJfQogCiAJLyogQWNjZXB0IHVuc29saWNpdGVkIHJlc3BvbnNlcyAqLwotCWF6eF93cml0ZWwoY2hpcCwgR0NUTCwgYXp4X3JlYWRsKGNoaXAsIEdDVEwpIHwgSUNINl9HQ1RMX1VOU09MKTsKKwlpZiAoIWNoaXAtPnNpbmdsZV9jbWQpCisJCWF6eF93cml0ZWwoY2hpcCwgR0NUTCwgYXp4X3JlYWRsKGNoaXAsIEdDVEwpIHwKKwkJCSAgIElDSDZfR0NUTF9VTlNPTCk7CiAKIAkvKiBkZXRlY3QgY29kZWNzICovCiAJaWYgKCFjaGlwLT5jb2RlY19tYXNrKSB7CkBAIC05ODAsNyArOTgzLDggQEAKIAlhenhfaW50X2VuYWJsZShjaGlwKTsKIAogCS8qIGluaXRpYWxpemUgdGhlIGNvZGVjIGNvbW1hbmQgSS9PICovCi0JYXp4X2luaXRfY21kX2lvKGNoaXApOworCWlmICghY2hpcC0+c2luZ2xlX2NtZCkKKwkJYXp4X2luaXRfY21kX2lvKGNoaXApOwogCiAJLyogcHJvZ3JhbSB0aGUgcG9zaXRpb24gYnVmZmVyICovCiAJYXp4X3dyaXRlbChjaGlwLCBEUExCQVNFLCAodTMyKWNoaXAtPnBvc2J1Zi5hZGRyKTsKQEAgLTIzMDMsNiArMjMwNyw3IEBACiAgKiB3aGl0ZS1saXN0IGZvciBlbmFibGVfbXNpCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBtc2lfd2hpdGVfbGlzdFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBmNywgIkhQIFBhdmlsaW9uIGR2NHQtMTMwMCIsIDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDM2MDcsICJIUCBDb21wYSBDUTQwIiwgMSksCiAJe30KIH07CkBAIC0yNjczLDYgKzI2NzgsNyBAQAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDQ0YiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTVjKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1NWQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU5MCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwppbmRleCAyMTVlNzJhLi4yZDYwM2Y2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKQEAgLTQwMzIsNiArNDAzMiwxMjcgQEAKIH0KIAogLyoKKyAqIEhQIFRvdWNoc21hcnQKKyAqIHBvcnQtQSAoMHgxMSkgICAgICAtIGZyb250IGhwLW91dAorICogcG9ydC1CICgweDE0KSAgICAgIC0gdW51c2VkCisgKiBwb3J0LUMgKDB4MTUpICAgICAgLSB1bnVzZWQKKyAqIHBvcnQtRCAoMHgxMikgICAgICAtIHJlYXIgbGluZSBvdXQKKyAqIHBvcnQtRSAoMHgxYykgICAgICAtIGZyb250IG1pYy1pbgorICogcG9ydC1GICgweDE2KSAgICAgIC0gSW50ZXJuYWwgc3BlYWtlcnMKKyAqIGRpZ2l0YWwtbWljICgweDE3KSAtIEludGVybmFsIG1pYworICovCisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg0YV90b3VjaHNtYXJ0X3ZlcmJzW10gPSB7CisJLyogREFDczsgdW5tdXRlIGFzIGRlZmF1bHQgKi8KKwl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgyN30sIC8qIDBkQiAqLworCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDI3fSwgLyogMGRCICovCisJLyogUG9ydC1BIChIUCkgbWl4ZXIgLSByb3V0ZSBvbmx5IGZyb20gYW5hbG9nIG1peGVyICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJLyogUG9ydC1BIHBpbiAqLworCXsweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJLyogUG9ydC1BIChIUCkgcGluIC0gYWx3YXlzIHVubXV0ZWQgKi8KKwl7MHgxMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIFBvcnQtRSAoaW50IHNwZWFrZXIpIG1peGVyIC0gcm91dGUgb25seSBmcm9tIGFuYWxvZyBtaXhlciAqLworCXsweDI1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDAzfSwKKwkvKiBQb3J0LUUgcGluICovCisJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCS8qIFBvcnQtRiAoaW50IHNwZWFrZXIpIG1peGVyIC0gcm91dGUgb25seSBmcm9tIGFuYWxvZyBtaXhlciAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCS8qIFBvcnQtRiBwaW4gKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCS8qIEFuYWxvZyBtaXhlcjsgbXV0ZSBhcyBkZWZhdWx0ICovCisJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCisJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAorCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg1KX0sCisJLyogQW5hbG9nIE1peCBvdXRwdXQgYW1wICovCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJLyogY2FwdHVyZSBzb3VyY2VzICovCisJLyogezB4MGMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LCAqLyAvKiBzZXQgdmlhIHVuc29sICovCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBwaW4tc2Vuc2UgKi8KKwl7MHgxMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFEMTg4NEFfSFBfRVZFTlR9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUQxODg0QV9NSUNfRVZFTlR9LAorCS8qIGFsbG93IHRvIHRvdWNoIEdQSU8xIChmb3IgbXV0ZSBjb250cm9sKSAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDJ9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwMn0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMn0sIC8qIGZpcnN0IG11dGVkICovCisJLyogaW50ZXJuYWwgbWljIC0gZG1pYyAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJLyogc2V0IG1hZ2ljIENPRUZzIGZvciBkbWljICovCisJezB4MDEsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDB4MTNmN30sCisJezB4MDEsIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHgwOH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4NGFfdG91Y2hzbWFydF9taXhlcnNbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKKy8qCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwqLworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLAorCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwKKwkJLnB1dCA9IGFkMTg4NGFfbW9iaWxlX21hc3Rlcl9zd19wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTCgweDIxLCAzLCAwLCBIREFfT1VUUFVUKSwKKwl9LAorCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDUsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDUsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworLyogc3dpdGNoIHRvIGV4dGVybmFsIG1pYyBpZiBwbHVnZ2VkICovCitzdGF0aWMgdm9pZCBhZDE5ODRhX3RvdWNoc21hcnRfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlpZiAoc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFjLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDApIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgwYywgMCwKKwkJCQkgICAgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDQpOworCX0gZWxzZSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MGMsIDAsCisJCQkJICAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHg1KTsKKwl9Cit9CisKKworLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAqLworc3RhdGljIHZvaWQgYWQxOTg0YV90b3VjaHNtYXJ0X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCXVuc2lnbmVkIGludCByZXMpCit7CisJc3dpdGNoIChyZXMgPj4gMjYpIHsKKwljYXNlIEFEMTg4NEFfSFBfRVZFTlQ6CisJCWFkMTg4NGFfaHBfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwljYXNlIEFEMTg4NEFfTUlDX0VWRU5UOgorCQlhZDE5ODRhX3RvdWNoc21hcnRfYXV0b21pYyhjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKworLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLworc3RhdGljIGludCBhZDE5ODRhX3RvdWNoc21hcnRfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlhZDE5OHhfaW5pdChjb2RlYyk7CisJYWQxODg0YV9ocF9hdXRvbXV0ZShjb2RlYyk7CisJYWQxOTg0YV90b3VjaHNtYXJ0X2F1dG9taWMoY29kZWMpOworCXJldHVybiAwOworfQorCisKKy8qCiAgKi8KIAogZW51bSB7CkBAIC00MDM5LDYgKzQxNjAsNyBAQAogCUFEMTg4NEFfTEFQVE9QLAogCUFEMTg4NEFfTU9CSUxFLAogCUFEMTg4NEFfVEhJTktQQUQsCisJQUQxOTg0QV9UT1VDSFNNQVJULAogCUFEMTg4NEFfTU9ERUxTCiB9OwogCkBAIC00MDQ3LDYgKzQxNjksNyBAQAogCVtBRDE4ODRBX0xBUFRPUF0JPSAibGFwdG9wIiwKIAlbQUQxODg0QV9NT0JJTEVdCT0gIm1vYmlsZSIsCiAJW0FEMTg4NEFfVEhJTktQQURdCT0gInRoaW5rcGFkIiwKKwlbQUQxOTg0QV9UT1VDSFNNQVJUXQk9ICJ0b3VjaHNtYXJ0IiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhZDE4ODRhX2NmZ190YmxbXSA9IHsKQEAgLTQwNTksNiArNDE4Miw3IEBACiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDM2MDAsICJIUCBsYXB0b3AiLCBBRDE4ODRBX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZmYwLCAweDcwMTAsICJIUCBsYXB0b3AiLCBBRDE4ODRBX01PQklMRSksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBhYywgIlRoaW5rcGFkIFgzMDAiLCBBRDE4ODRBX1RISU5LUEFEKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTgyLCAiVG91Y2hzbWFydCIsIEFEMTk4NEFfVE9VQ0hTTUFSVCksCiAJe30KIH07CiAKQEAgLTQxNDIsNiArNDI2NiwyMSBAQAogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gYWQxOTg0YV90aGlua3BhZF91bnNvbF9ldmVudDsKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gYWQxOTg0YV90aGlua3BhZF9pbml0OwogCQlicmVhazsKKwljYXNlIEFEMTk4NEFfVE9VQ0hTTUFSVDoKKwkJc3BlYy0+bWl4ZXJzWzBdID0gYWQxOTg0YV90b3VjaHNtYXJ0X21peGVyczsKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGFkMTk4NGFfdG91Y2hzbWFydF92ZXJiczsKKwkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gYWQxOTg0YV90b3VjaHNtYXJ0X3Vuc29sX2V2ZW50OworCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBhZDE5ODRhX3RvdWNoc21hcnRfaW5pdDsKKwkJLyogc2V0IHRoZSB1cHBlci1saW1pdCBmb3IgbWl4ZXIgYW1wIHRvIDBkQiBmb3IgYXZvaWRpbmcgdGhlCisJCSAqIHBvc3NpYmxlIGRhbWFnZSBieSBvdmVybG9hZGluZworCQkgKi8KKwkJc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyhjb2RlYywgMHgyMCwgSERBX0lOUFVULAorCQkJCQkgICgweDE3IDw8IEFDX0FNUENBUF9PRkZTRVRfU0hJRlQpIHwKKwkJCQkJICAoMHgxNyA8PCBBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUKSB8CisJCQkJCSAgKDB4MDUgPDwgQUNfQU1QQ0FQX1NURVBfU0laRV9TSElGVCkgfAorCQkJCQkgICgxIDw8IEFDX0FNUENBUF9NVVRFX1NISUZUKSk7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDlkODk5ZWQuLjkwNTg1OWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTExMCw2ICsxMTAsNyBAQAogCiAJdW5zaWduZWQgaW50IGRlbGxfYXV0b211dGU7CiAJdW5zaWduZWQgaW50IHBvcnRfZF9tb2RlOworCXVuc2lnbmVkIGNoYXIgZXh0X21pY19iaWFzOwogfTsKIAogc3RhdGljIGludCBjb25leGFudF9wbGF5YmFja19wY21fb3BlbihzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLApAQCAtNjgyLDExICs2ODMsMTMgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ1X2NhcHR1cmVfc291cmNlX2JlbnEgPSB7Ci0JLm51bV9pdGVtcyA9IDMsCisJLm51bV9pdGVtcyA9IDUsCiAJLml0ZW1zID0gewogCQl7ICJJbnRNaWMiLCAweDEgfSwKIAkJeyAiRXh0TWljIiwgMHgyIH0sCiAJCXsgIkxpbmVJbiIsIDB4MyB9LAorCQl7ICJDRCIsICAgICAweDQgfSwKKwkJeyAiTWl4ZXIiLCAgMHgwIH0sCiAJfQogfTsKIApAQCAtODExLDExICs4MTQsMTkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X2JlbnFfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgxNywgMHg0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAweDQsIEhEQV9JTlBVVCksCisKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEluIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBJbiBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBJbiBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgSW4gUGxheWJhY2sgU3dpdGNoIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAogCisJSERBX0NPREVDX1ZPTFVNRSgiTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1peGVyIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwLCBIREFfSU5QVVQpLAorCiAJe30KIH07CiAKQEAgLTE5MTcsNiArMTkyOCwxMSBAQAogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2NhcHNyY19uaWRzWzFdID0geyAweDE3IH07CiAjZGVmaW5lIENYVDUwNjZfU1BESUZfT1VUCTB4MjEKIAorLyogT0xQQydzIG1pY3JvcGhvbmUgcG9ydCBpcyBEQyBjb3VwbGVkIGZvciB1c2Ugd2l0aCBleHRlcm5hbCBzZW5zb3JzLAorICogdGhlcmVmb3JlIHdlIHVzZSBhIDUwJSBtaWMgYmlhcyBpbiBvcmRlciB0byBjZW50ZXIgdGhlIGlucHV0IHNpZ25hbCB3aXRoCisgKiB0aGUgREMgaW5wdXQgcmFuZ2Ugb2YgdGhlIGNvZGVjLiAqLworI2RlZmluZSBDWFQ1MDY2X09MUENfRVhUX01JQ19CSUFTIFBJTl9WUkVGNTAKKwogc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGN4dDUwNjZfbW9kZXNbMV0gPSB7CiAJeyAyLCBOVUxMIH0sCiB9OwpAQCAtMTk3MCw5ICsxOTg2LDEwIEBACiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNjZfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0geworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0gewogCQkvKiBlbmFibGUgZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KLQkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHNwZWMtPmV4dF9taWNfYmlhc30sCiAKIAkJLyogc3dpdGNoIHRvIGV4dGVybmFsIG1pYyBpbnB1dCAqLwogCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LApAQCAtMjIyNSw3ICsyMjQyLDcgQEAKIAl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBEQUMxICovCiAKIAkvKiBQb3J0IEI6IGV4dGVybmFsIG1pY3JvcGhvbmUgKi8KLQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBDWFQ1MDY2X09MUENfRVhUX01JQ19CSUFTfSwKIAogCS8qIFBvcnQgQzogaW50ZXJuYWwgbWljcm9waG9uZSAqLwogCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LApAQCAtMjMxNSw2ICsyMzMyLDcgQEAKIAkJICAgICAgQ1hUNTA2Nl9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZjUsICJEZWxsIiwKIAkJICAgICAgQ1hUNTA2Nl9ERUxMX0xBUFRPUCksCisJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDgzMywgIk9MUEMgWE8tMS41IiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCiAJe30KIH07CiAKQEAgLTIzNDIsNiArMjM2MCw3IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNjZfY2FwdHVyZV9zb3VyY2U7CiAKIAlzcGVjLT5wb3J0X2RfbW9kZSA9IFBJTl9IUDsKKwlzcGVjLT5leHRfbWljX2JpYXMgPSBQSU5fVlJFRjgwOwogCiAJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAxOwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnM7CkBAIC0yMzczLDYgKzIzOTIsNyBAQAogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCXNwZWMtPnBvcnRfZF9tb2RlID0gMDsKKwkJc3BlYy0+ZXh0X21pY19iaWFzID0gQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBUzsKIAogCQkvKiBubyBTL1BESUYgb3V0ICovCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCmluZGV4IGM4NDM1YzkuLjZhZmRhYjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwpAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgogCisvKiBkZWZpbmUgYmVsb3cgdG8gcmVzdHJpY3QgdGhlIHN1cHBvcnRlZCByYXRlcyBhbmQgZm9ybWF0cyAqLworLyogI2RlZmluZSBMSU1JVEVEX1JBVEVfRk1UX1NVUFBPUlQgKi8KKwogc3RydWN0IG52aGRtaV9zcGVjIHsKIAlzdHJ1Y3QgaGRhX211bHRpX291dCBtdWx0aW91dDsKIApAQCAtNjAsNiArNjMsMjIgQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCisjaWZkZWYgTElNSVRFRF9SQVRFX0ZNVF9TVVBQT1JUCisvKiBzdXBwb3J0IG9ubHkgdGhlIHNhZmUgZm9ybWF0IGFuZCByYXRlICovCisjZGVmaW5lIFNVUFBPUlRFRF9SQVRFUwkJU05EUlZfUENNX1JBVEVfNDgwMDAKKyNkZWZpbmUgU1VQUE9SVEVEX01BWEJQUwkxNgorI2RlZmluZSBTVVBQT1JURURfRk9STUFUUwlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQorI2Vsc2UKKy8qIHN1cHBvcnQgYWxsIHJhdGVzIGFuZCBmb3JtYXRzICovCisjZGVmaW5lIFNVUFBPUlRFRF9SQVRFUyBcCisJKFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCB8XAorCVNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDAgfCBTTkRSVl9QQ01fUkFURV8xNzY0MDAgfFwKKwkgU05EUlZfUENNX1JBVEVfMTkyMDAwKQorI2RlZmluZSBTVVBQT1JURURfTUFYQlBTCTI0CisjZGVmaW5lIFNVUFBPUlRFRF9GT1JNQVRTIFwKKwkoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKyNlbmRpZgorCiAvKgogICogQ29udHJvbHMKICAqLwpAQCAtMjU4LDkgKzI3Nyw5IEBACiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDgsCiAJLm5pZCA9IE52X01hc3Rlcl9Db252ZXJ0X25pZCwKLQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKLQkubWF4YnBzID0gMTYsCi0JLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPSBTVVBQT1JURURfUkFURVMsCisJLm1heGJwcyA9IFNVUFBPUlRFRF9NQVhCUFMsCisJLmZvcm1hdHMgPSBTVVBQT1JURURfRk9STUFUUywKIAkub3BzID0gewogCQkub3BlbiA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX29wZW4sCiAJCS5jbG9zZSA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlXzhjaCwKQEAgLTI3Myw5ICsyOTIsOSBAQAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLAogCS5uaWQgPSBOdl9NYXN0ZXJfQ29udmVydF9uaWQsCi0JLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCi0JLm1heGJwcyA9IDE2LAotCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0gU1VQUE9SVEVEX1JBVEVTLAorCS5tYXhicHMgPSBTVVBQT1JURURfTUFYQlBTLAorCS5mb3JtYXRzID0gU1VQUE9SVEVEX0ZPUk1BVFMsCiAJLm9wcyA9IHsKIAkJLm9wZW4gPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAogCQkuY2xvc2UgPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9jbG9zZV8yY2gsCkBAIC0zNzgsNiArMzk3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX3ByZXNldCBzbmRfaGRhX3ByZXNldF9udmhkbWlbXSA9IHsKIAl7IC5pZCA9IDB4MTBkZTAwMDIsIC5uYW1lID0gIk1DUDc4IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCiAJeyAuaWQgPSAweDEwZGUwMDAzLCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAorCXsgLmlkID0gMHgxMGRlMDAwNSwgLm5hbWUgPSAiTUNQNzggSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKIAl7IC5pZCA9IDB4MTBkZTAwMDYsIC5uYW1lID0gIk1DUDc4IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCiAJeyAuaWQgPSAweDEwZGUwMDA3LCAubmFtZSA9ICJNQ1A3QSBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAogCXsgLmlkID0gMHgxMGRlMDA2NywgLm5hbWUgPSAiTUNQNjcgSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV8yY2ggfSwKQEAgLTM4Nyw2ICs0MDcsNyBAQAogCiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDIiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwMyIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDA1Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDYiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwNyIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDY3Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDEyOTYwNTguLjcwNTgzNzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0yNzUsNyArMjc1LDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2FwX21peGVyOwkvKiBjYXB0dXJlIG1peGVyICovCiAJdW5zaWduZWQgaW50IGJlZXBfYW1wOwkvKiBiZWVwIGFtcCB2YWx1ZSwgc2V0IHZpYSBzZXRfYmVlcF9hbXAoKSAqLwogCi0JY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzVdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicworCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1sxMF07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCiAJCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTAogCQkJCQkJICogdGVybWluYXRpb24hCiAJCQkJCQkgKi8KQEAgLTk2NSw2ICs5NjUsOCBAQAogCXVuc2lnbmVkIGludCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07CiAJaW50IGk7CiAKKwlpZiAoIW5pZCkKKwkJcmV0dXJuOwogCXBpbmNhcCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CiAJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9UUklHX1JFUSkgLyogbmVlZCB0cmlnZ2VyPyAqLwogCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1NFTlNFLCAwKTsKQEAgLTEzMzIsMTUgKzEzMzQsMjAgQEAKIAkgKgkgICAgICAgIHdoZW4gdGhlIGV4dGVybmFsIGhlYWRwaG9uZSBvdXQgamFjayBpcyBwbHVnZ2VkIgogCSAqLwogCWlmICghc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdKSB7CisJCWhkYV9uaWRfdCBuaWQ7CiAJCXRtcCA9IChhc3MgPj4gMTEpICYgMHgzOwkvKiBIUCB0byBjaGFzc2lzICovCiAJCWlmICh0bXAgPT0gMCkKLQkJCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IHBvcnRhOworCQkJbmlkID0gcG9ydGE7CiAJCWVsc2UgaWYgKHRtcCA9PSAxKQotCQkJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gcG9ydGU7CisJCQluaWQgPSBwb3J0ZTsKIAkJZWxzZSBpZiAodG1wID09IDIpCi0JCQlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSBwb3J0ZDsKKwkJCW5pZCA9IHBvcnRkOwogCQllbHNlCiAJCQlyZXR1cm4gMTsKKwkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzOyBpKyspCisJCQlpZiAoc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW2ldID09IG5pZCkKKwkJCQlyZXR1cm4gMTsKKwkJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gbmlkOwogCX0KIAogCWFsY19pbml0X2F1dG9faHAoY29kZWMpOwpAQCAtMTM2Miw3ICsxMzY5LDcgQEAKIH0KIAogLyoKLSAqIEZpeC11cCBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9ucworICogRml4LXVwIHBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGFuZCBhZGQgZGVmYXVsdCB2ZXJicwogICovCiAKIHN0cnVjdCBhbGNfcGluY2ZnIHsKQEAgLTEzNzAsOSArMTM3NywxNCBAQAogCXUzMiB2YWw7CiB9OwogCi1zdGF0aWMgdm9pZCBhbGNfZml4X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKK3N0cnVjdCBhbGNfZml4dXAgeworCWNvbnN0IHN0cnVjdCBhbGNfcGluY2ZnICpwaW5zOworCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqdmVyYnM7Cit9OworCitzdGF0aWMgdm9pZCBhbGNfcGlja19maXh1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCSAgIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxdWlyaywKLQkJCSAgIGNvbnN0IHN0cnVjdCBhbGNfcGluY2ZnICoqcGluZml4KQorCQkJICAgY29uc3Qgc3RydWN0IGFsY19maXh1cCAqZml4KQogewogCWNvbnN0IHN0cnVjdCBhbGNfcGluY2ZnICpjZmc7CiAKQEAgLTEzODAsOSArMTM5MiwxNCBAQAogCWlmICghcXVpcmspCiAJCXJldHVybjsKIAotCWNmZyA9IHBpbmZpeFtxdWlyay0+dmFsdWVdOwotCWZvciAoOyBjZmctPm5pZDsgY2ZnKyspCi0JCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgY2ZnLT5uaWQsIGNmZy0+dmFsKTsKKwlmaXggKz0gcXVpcmstPnZhbHVlOworCWNmZyA9IGZpeC0+cGluczsKKwlpZiAoY2ZnKSB7CisJCWZvciAoOyBjZmctPm5pZDsgY2ZnKyspCisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIGNmZy0+bmlkLCBjZmctPnZhbCk7CisJfQorCWlmIChmaXgtPnZlcmJzKQorCQlhZGRfdmVyYihjb2RlYy0+c3BlYywgZml4LT52ZXJicyk7CiB9CiAKIC8qCkBAIC00NjY3LDkgKzQ2ODQsOSBAQAogCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfbmlkOwogCQllbHNlIHsKIAkJCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+c2xhdmVfZGlnX291dHM7Ci0JCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOwotCQkJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQorCQkJaWYgKGkgPj0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQogCQkJCWJyZWFrOworCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKIAkJfQogCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQpAQCAtNjIzMiw3ICs2MjQ5LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDhmLCAiQWNlciIsIEFMQzI2MF9BQ0VSKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHg0NTQwLCAiRmF2b3JpdCAxMDBYUyIsIEFMQzI2MF9GQVZPUklUMTAwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODA4LCAiSFAgZDU3MDAiLCBBTEMyNjBfSFBfMzAxMyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwYSwgIkhQIGQ1NzUwIiwgQUxDMjYwX0hQXzMwMTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MGEsICJIUCBkNTc1MCIsIEFMQzI2MF9BVVRPKSwgLyogbm8gcXVpcmsgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDEwLCAiSFAiLCBBTEMyNjBfSFBfMzAxMyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAxMSwgIkhQIiwgQUxDMjYwX0hQXzMwMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMTIsICJIUCIsIEFMQzI2MF9IUF9EQzc2MDApLApAQCAtODg5NCwxMCArODkxMSwxMSBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDM4MDAsICJNYWNib29rUHJvIDQsMSIsIEFMQzg4NV9NQlAzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgzZTAwLCAiaU1hYyAyNCBBbHVtaW51bSIsIEFMQzg4NV9JTUFDMjQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDNmMDAsICJNYWNib29rIDUsMSIsIEFMQzg4NV9NQjUpLAotCS8qIEZJWE1FOiBIUCBqYWNrIHNlbnNlIHNlZW1zIG5vdCB3b3JraW5nIGZvciBNQlAgNSwxLCBzbyBhcHBhcmVudGx5Ci0JICogbm8gcGVyZmVjdCBzb2x1dGlvbiB5ZXQKKwkvKiBGSVhNRTogSFAgamFjayBzZW5zZSBzZWVtcyBub3Qgd29ya2luZyBmb3IgTUJQIDUsMSBvciA1LDIsCisJICogc28gYXBwYXJlbnRseSBubyBwZXJmZWN0IHNvbHV0aW9uIHlldAogCSAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDQwMDAsICJNYWNib29rUHJvIDUsMSIsIEFMQzg4NV9NQjUpLAorCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDQ2MDAsICJNYWNib29rUHJvIDUsMiIsIEFMQzg4NV9NQjUpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTk1OTMsMTEgKzk2MTEsMTMgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZyAqYWxjODgyX3Bpbl9maXhlc1tdID0gewotCVtQSU5GSVhfQUJJVF9BVzlEX01BWF0gPSBhbGM4ODJfYWJpdF9hdzlkX3BpbmZpeCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwIGFsYzg4Ml9maXh1cHNbXSA9IHsKKwlbUElORklYX0FCSVRfQVc5RF9NQVhdID0geworCQkucGlucyA9IGFsYzg4Ml9hYml0X2F3OWRfcGluZml4CisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfcGluZml4X3RibFtdID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg4Ml9maXh1cF90YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxMDdhLCAiQWJpdCBBVzlELU1BWCIsIFBJTkZJWF9BQklUX0FXOURfTUFYKSwKIAl7fQogfTsKQEAgLTk3OTQsOSArOTgxNCw5IEBACiAJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IGRpZ19uaWQ7CiAJCWVsc2UgewogCQkJc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHMgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKLQkJCXNwZWMtPnNsYXZlX2RpZ19vdXRzW2kgLSAxXSA9IGRpZ19uaWQ7Ci0JCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHNwZWMtPnNsYXZlX2RpZ19vdXRzKSAtIDEpCisJCQlpZiAoaSA+PSBBUlJBWV9TSVpFKHNwZWMtPnNsYXZlX2RpZ19vdXRzKSAtIDEpCiAJCQkJYnJlYWs7CisJCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOwogCQl9CiAJfQogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCkBAIC05ODY5LDcgKzk4ODksNyBAQAogCQlib2FyZF9jb25maWcgPSBBTEM4ODJfQVVUTzsKIAl9CiAKLQlhbGNfZml4X3BpbmNmZyhjb2RlYywgYWxjODgyX3BpbmZpeF90YmwsIGFsYzg4Ml9waW5fZml4ZXMpOworCWFsY19waWNrX2ZpeHVwKGNvZGVjLCBhbGM4ODJfZml4dXBfdGJsLCBhbGM4ODJfZml4dXBzKTsKIAogCWlmIChib2FyZF9jb25maWcgPT0gQUxDODgyX0FVVE8pIHsKIAkJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCkBAIC0xMTQ0MSw2ICsxMTQ2MSw4IEBACiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwZiwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDE2LCAiU29ueSBWQUlPIiwgQUxDMjYyX0FVVE8pLCAvKiBkaWctb25seSAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMjUsICJTb255IFZBSU8gWjIxTU4iLCBBTEMyNjJfVE9TSElCQV9TMDYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMzUsICJTb255IFZBSU8gVkdOLUZXMTcwSiIsIEFMQzI2Ml9BVVRPKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDQ3LCAiU29ueSBWQUlPIFR5cGUgRyIsIEFMQzI2Ml9BVVRPKSwKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDRkLCAweGZmMDAsIDB4OTAwMCwgIlNvbnkgVkFJTyIsCiAJCQkgICBBTEMyNjJfU09OWV9BU1NBTUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweDAwMDEsICJUb3NoaWJhIGR5bmFib29rIFNTIFJYMSIsCkBAIC0xMjU4NSw3ICsxMjYwNyw4IEBACiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1YiwgIkFjZXIgQXNwaXJlIE9uZSIsCiAJCQkJCQlBTEMyNjhfQUNFUl9BU1BJUkVfT05FKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMjUzLCAiRGVsbCBPRU0iLCBBTEMyNjhfREVMTCksCi0JU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDJiMCwgIkRlbGwgSW5zcGlyb24gTWluaTkiLCBBTEMyNjhfREVMTCksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAyOCwgMHhmZmYwLCAweDAyYjAsCisJCQkiRGVsbCBJbnNwaXJvbiBNaW5pOS9Wb3N0cm8gQTkwIiwgQUxDMjY4X0RFTEwpLAogCS8qIGFsbW9zdCBjb21wYXRpYmxlIHdpdGggdG9zaGliYSBidXQgd2l0aCBvcHRpb25hbCBkaWdpdGFsIG91dHM7CiAJICogYXV0by1wcm9iaW5nIHNlZW1zIHdvcmtpbmcgZmluZQogCSAqLwpAQCAtMTI2NjAsNyArMTI2ODMsNyBAQAogCQkuaW5pdF9ob29rID0gYWxjMjY4X3Rvc2hpYmFfYXV0b211dGUsCiAJfSwKIAlbQUxDMjY4X0FDRVJdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9taXhlciwgYWxjMjY4X2NhcHR1cmVfbm9zcmNfbWl4ZXIsCisJCS5taXhlcnMgPSB7IGFsYzI2OF9hY2VyX21peGVyLCBhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIsCiAJCQkgICAgYWxjMjY4X2JlZXBfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2OF9hY2VyX3ZlcmJzIH0sCkBAIC0xMjg0MiwxMiArMTI4NjUsMTUgQEAKIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwogCQlpbnQgaTsKIAorCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2OF9jYXBzcmNfbmlkczsKIAkJLyogZ2V0IHR5cGUgKi8KIAkJd2NhcCA9IGdldF93Y2Fwc190eXBlKHdjYXApOwogCQlpZiAoc3BlYy0+YXV0b19taWMgfHwKIAkJICAgIHdjYXAgIT0gQUNfV0lEX0FVRF9JTiB8fCBzcGVjLT5pbnB1dF9tdXgtPm51bV9pdGVtcyA9PSAxKSB7CiAJCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzI2OF9hZGNfbmlkc19hbHQ7CiAJCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2OF9hZGNfbmlkc19hbHQpOworCQkJaWYgKHNwZWMtPmF1dG9fbWljKQorCQkJCWZpeHVwX2F1dG9taWNfYWRjKGNvZGVjKTsKIAkJCWlmIChzcGVjLT5hdXRvX21pYyB8fCBzcGVjLT5pbnB1dF9tdXgtPm51bV9pdGVtcyA9PSAxKQogCQkJCWFkZF9taXhlcihzcGVjLCBhbGMyNjhfY2FwdHVyZV9ub3NyY19taXhlcik7CiAJCQllbHNlCkBAIC0xMjg1Nyw3ICsxMjg4Myw2IEBACiAJCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2OF9hZGNfbmlkcyk7CiAJCQlhZGRfbWl4ZXIoc3BlYywgYWxjMjY4X2NhcHR1cmVfbWl4ZXIpOwogCQl9Ci0JCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY4X2NhcHNyY19uaWRzOwogCQkvKiBzZXQgZGVmYXVsdCBpbnB1dCBzb3VyY2UgKi8KIAkJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9hZGNfbmlkczsgaSsrKQogCQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgYWxjMjY4X2NhcHNyY19uaWRzW2ldLApAQCAtMTQzNTcsMTUgKzE0MzgyLDE2IEBACiBzdGF0aWMgdm9pZCBhbGM4NjFfYXV0b19pbml0X2hwX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgcGluOwogCi0JcGluID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwotCWlmIChwaW4pCi0JCWFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fSFAsCisJaWYgKHNwZWMtPmF1dG9jZmcuaHBfb3V0cykKKwkJYWxjODYxX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLAorCQkJCQkJICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0sCisJCQkJCQkgIFBJTl9IUCwKIAkJCQkJCSAgc3BlYy0+bXVsdGlvdXQuaHBfbmlkKTsKLQlwaW4gPSBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXTsKLQlpZiAocGluKQotCQlhbGM4NjFfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwKKwlpZiAoc3BlYy0+YXV0b2NmZy5zcGVha2VyX291dHMpCisJCWFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywKKwkJCQkJCSAgc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0sCisJCQkJCQkgIFBJTl9PVVQsCiAJCQkJCQkgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdKTsKIH0KIApAQCAtMTUxNTgsNyArMTUxODQsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweGE4OGQsICJSZWFsdGVrIEFMQzY2MCBkZW1vIiwgQUxDNjYwVkRfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGJmLCAiSFAgVFgxMDAwIiwgQUxDODYxVkRfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyZTIsICJBc3VzIHozNW0iLCBBTEM2NjBWRF8zU1QpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMzksICJBc3VzIEcxIiwgQUxDNjYwVkRfM1NUKSwKKwkvKlNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMzksICJBc3VzIEcxIiwgQUxDNjYwVkRfM1NUKSwqLyAvKiBhdXRvICovCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTYzMywgIkFzdXMgVjFTbiIsIEFMQzY2MFZEX0FTVVNfVjFTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWU3LCAiQVNVUyIsIEFMQzY2MFZEXzNTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMGRlLCAweDAzZjAsICJSZWFsdGVrIEFMQzY2MCBkZW1vIiwgQUxDNjYwVkRfM1NUKSwKQEAgLTE1NTUxLDYgKzE1NTc3LDI5IEBACiAJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKK2VudW0geworCUFMQzY2MFZEX0ZJWF9BU1VTX0dQSU8xCit9OworCisvKiByZXNldCBHUElPMSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM2NjB2ZF9maXhfYXN1c19ncGlvMV92ZXJic1tdID0geworCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDN9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwMX0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMX0sCisJeyB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19maXh1cCBhbGM4NjF2ZF9maXh1cHNbXSA9IHsKKwlbQUxDNjYwVkRfRklYX0FTVVNfR1BJTzFdID0geworCQkudmVyYnMgPSBhbGM2NjB2ZF9maXhfYXN1c19ncGlvMV92ZXJicywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg2MXZkX2ZpeHVwX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMzksICJBU1VTIEE3LUsiLCBBTEM2NjBWRF9GSVhfQVNVU19HUElPMSksCisJe30KK307CisKIHN0YXRpYyBpbnQgcGF0Y2hfYWxjODYxdmQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjOwpAQCAtMTU1NzIsNiArMTU2MjEsOCBAQAogCQlib2FyZF9jb25maWcgPSBBTEM4NjFWRF9BVVRPOwogCX0KIAorCWFsY19waWNrX2ZpeHVwKGNvZGVjLCBhbGM4NjF2ZF9maXh1cF90YmwsIGFsYzg2MXZkX2ZpeHVwcyk7CisKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg2MVZEX0FVVE8pIHsKIAkJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJCWVyciA9IGFsYzg2MXZkX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKQEAgLTE2ODUyLDYgKzE2OTAzLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwY2Q2LCAiRm94Y29ubiIsIEFMQzY2Ml9FQ1MpLAogCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBkNDcsICJGb3hjb25uIDQ1Q01YLzQ1R01YLzQ1Q01YLUsiLAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNmUsICJUb3NoaWJhIE5CMjAwIiwgQUxDNjYzX0FTVVNfTU9ERTQpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGNhMDAsICJTYW1zdW5nIE5DMTAiLCBBTEMyNzJfU0FNU1VOR19OQzEwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCkBAIC0xNzE0NSw3MCArMTcxOTcsMTQ1IEBACiAgKiBCSU9TIGF1dG8gY29uZmlndXJhdGlvbgogICovCiAKLS8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCi1zdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCi0JCQkJCSAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQorLyogY29udmVydCBmcm9tIE1JWCBuaWQgdG8gREFDICovCitzdGF0aWMgaW5saW5lIGhkYV9uaWRfdCBhbGM2NjJfbWl4X3RvX2RhYyhoZGFfbmlkX3QgbmlkKQoreworCWlmIChuaWQgPT0gMHgwZikKKwkJcmV0dXJuIDB4MDI7CisJZWxzZSBpZiAobmlkID49IDB4MGMgJiYgbmlkIDw9IDB4MGUpCisJCXJldHVybiBuaWQgLSAweDBjICsgMHgwMjsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKiBnZXQgTUlYIG5pZCBjb25uZWN0ZWQgdG8gdGhlIGdpdmVuIHBpbiB0YXJnZXRlZCB0byBEQUMgKi8KK3N0YXRpYyBoZGFfbmlkX3QgYWxjNjYyX2RhY190b19taXgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4sCisJCQkJICAgaGRhX25pZF90IGRhYykKK3sKKwloZGFfbmlkX3QgbWl4WzRdOworCWludCBpLCBudW07CisKKwludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluLCBtaXgsIEFSUkFZX1NJWkUobWl4KSk7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWlmIChhbGM2NjJfbWl4X3RvX2RhYyhtaXhbaV0pID09IGRhYykKKwkJCXJldHVybiBtaXhbaV07CisJfQorCXJldHVybiAwOworfQorCisvKiBsb29rIGZvciBhbiBlbXB0eSBEQUMgc2xvdCAqLworc3RhdGljIGhkYV9uaWRfdCBhbGM2NjJfbG9va19mb3JfZGFjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCBzcmNzWzVdOworCWludCBpLCBqLCBudW07CisKKwludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluLCBzcmNzLCBBUlJBWV9TSVpFKHNyY3MpKTsKKwlpZiAobnVtIDwgMCkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWhkYV9uaWRfdCBuaWQgPSBhbGM2NjJfbWl4X3RvX2RhYyhzcmNzW2ldKTsKKwkJaWYgKCFuaWQpCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzOyBqKyspCisJCQlpZiAoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbal0gPT0gbmlkKQorCQkJCWJyZWFrOworCQlpZiAoaiA+PSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcykKKwkJCXJldHVybiBuaWQ7CisJfQorCXJldHVybiAwOworfQorCisvKiBmaWxsIGluIHRoZSBkYWNfbmlkcyB0YWJsZSBmcm9tIHRoZSBwYXJzZWQgcGluIGNvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBpbnQgYWxjNjYyX2F1dG9fZmlsbF9kYWNfbmlkcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaTsKKwloZGFfbmlkX3QgZGFjOworCisJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5wcml2YXRlX2RhY19uaWRzOworCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CisJCWRhYyA9IGFsYzY2Ml9sb29rX2Zvcl9kYWMoY29kZWMsIGNmZy0+bGluZV9vdXRfcGluc1tpXSk7CisJCWlmICghZGFjKQorCQkJY29udGludWU7CisJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW3NwZWMtPm11bHRpb3V0Lm51bV9kYWNzKytdID0gZGFjOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGM2NjJfYWRkX3ZvbF9jdGwoc3RydWN0IGFsY19zcGVjICpzcGVjLCBjb25zdCBjaGFyICpwZngsCisJCQkgICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2hzKQogewogCWNoYXIgbmFtZVszMl07CisJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgcGZ4KTsKKwlyZXR1cm4gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAorCQkJICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgMCwgSERBX09VVFBVVCkpOworfQorCitzdGF0aWMgaW50IGFsYzY2Ml9hZGRfc3dfY3RsKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgY29uc3QgY2hhciAqcGZ4LAorCQkJICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2hzKQoreworCWNoYXIgbmFtZVszMl07CisJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKKwlyZXR1cm4gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKKwkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9JTlBVVCkpOworfQorCisjZGVmaW5lIGFsYzY2Ml9hZGRfc3RlcmVvX3ZvbChzcGVjLCBwZngsIG5pZCkgXAorCWFsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCBwZngsIG5pZCwgMykKKyNkZWZpbmUgYWxjNjYyX2FkZF9zdGVyZW9fc3coc3BlYywgcGZ4LCBuaWQpIFwKKwlhbGM2NjJfYWRkX3N3X2N0bChzcGVjLCBwZngsIG5pZCwgMykKKworLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KK3N0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdGF0aWMgY29uc3QgY2hhciAqY2huYW1lWzRdID0gewogCQkiRnJvbnQiLCAiU3Vycm91bmQiLCBOVUxMIC8qQ0xGRSovLCAiU2lkZSIKIAl9OwotCWhkYV9uaWRfdCBuaWQ7CisJaGRhX25pZF90IG5pZCwgbWl4OwogCWludCBpLCBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5saW5lX291dHM7IGkrKykgewotCQlpZiAoIXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldKQorCQluaWQgPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXTsKKwkJaWYgKCFuaWQpCiAJCQljb250aW51ZTsKLQkJbmlkID0gYWxjODgwX2lkeF90b19kYWMoaSk7CisJCW1peCA9IGFsYzY2Ml9kYWNfdG9fbWl4KGNvZGVjLCBjZmctPmxpbmVfb3V0X3BpbnNbaV0sIG5pZCk7CisJCWlmICghbWl4KQorCQkJY29udGludWU7CiAJCWlmIChpID09IDIpIHsKIAkJCS8qIENlbnRlci9MRkUgKi8KLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKLQkJCQkJICAiQ2VudGVyIFBsYXliYWNrIFZvbHVtZSIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDEsIDAsCi0JCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJZXJyID0gYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsICJDZW50ZXIiLCBuaWQsIDEpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKLQkJCQkJICAiTEZFIFBsYXliYWNrIFZvbHVtZSIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsCi0JCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJZXJyID0gYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsICJMRkUiLCBuaWQsIDIpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsCi0JCQkJCSAgIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwZSwgMSwgMCwKLQkJCQkJCQkgICAgICBIREFfSU5QVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfc3dfY3RsKHNwZWMsICJDZW50ZXIiLCBtaXgsIDEpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsCi0JCQkJCSAgIkxGRSBQbGF5YmFjayBTd2l0Y2giLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwZSwgMiwgMCwKLQkJCQkJCQkgICAgICBIREFfSU5QVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfc3dfY3RsKHNwZWMsICJMRkUiLCBtaXgsIDIpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfSBlbHNlIHsKIAkJCWNvbnN0IGNoYXIgKnBmeDsKIAkJCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxICYmCiAJCQkgICAgY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKSB7Ci0JCQkJaWYgKCFjZmctPmhwX3BpbnMpCisJCQkJaWYgKGNmZy0+aHBfb3V0cykKIAkJCQkJcGZ4ID0gIlNwZWFrZXIiOwogCQkJCWVsc2UKIAkJCQkJcGZ4ID0gIlBDTSI7CiAJCQl9IGVsc2UKIAkJCQlwZnggPSBjaG5hbWVbaV07Ci0JCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBWb2x1bWUiLCBwZngpOwotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCBwZngsIG5pZCwgMyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQkJaWYgKGNmZy0+bGluZV9vdXRzID09IDEgJiYKIAkJCSAgICBjZmctPmxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fU1BFQUtFUl9PVVQpCiAJCQkJcGZ4ID0gIlNwZWFrZXIiOwotCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCi0JCQkJSERBX0NPTVBPU0VfQU1QX1ZBTChhbGM4ODBfaWR4X3RvX21peGVyKGkpLAotCQkJCQkJICAgIDMsIDAsIEhEQV9JTlBVVCkpOworCQkJZXJyID0gYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgcGZ4LCBtaXgsIDMpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTcyMTcsODYgKzE3MzQ0LDc1IEBACiB9CiAKIC8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmb3Igc3BlYWtlciBhbmQgSFAgb3V0cHV0cyAqLwotc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgaGRhX25pZF90IHBpbiwKKy8qIHJldHVybiBEQUMgbmlkIGlmIGFueSBuZXcgREFDIGlzIGFzc2lnbmVkICovCitzdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4sCiAJCQkJCWNvbnN0IGNoYXIgKnBmeCkKIHsKLQloZGFfbmlkX3QgbmlkOworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCBuaWQsIG1peDsKIAlpbnQgZXJyOwotCWNoYXIgbmFtZVszMl07CiAKIAlpZiAoIXBpbikKIAkJcmV0dXJuIDA7Ci0KLQlpZiAocGluID09IDB4MTcpIHsKLQkJLyogQUxDNjYzIGhhcyBhIG1vbm8gb3V0cHV0IHBpbiBvbiAweDE3ICovCisJbmlkID0gYWxjNjYyX2xvb2tfZm9yX2RhYyhjb2RlYywgcGluKTsKKwlpZiAoIW5pZCkgeworCQljaGFyIG5hbWVbMzJdOworCQkvKiB0aGUgY29ycmVzcG9uZGluZyBEQUMgaXMgYWxyZWFkeSBvY2N1cGllZCAqLworCQlpZiAoIShnZXRfd2NhcHMoY29kZWMsIHBpbikgJiBBQ19XQ0FQX09VVF9BTVApKQorCQkJcmV0dXJuIDA7IC8qIG5vIHdheSAqLworCQkvKiBjcmVhdGUgYSBzd2l0Y2ggb25seSAqLwogCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAotCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChwaW4sIDIsIDAsIEhEQV9PVVRQVVQpKTsKKwkJcmV0dXJuIGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCisJCQkJICAgSERBX0NPTVBPU0VfQU1QX1ZBTChwaW4sIDMsIDAsIEhEQV9PVVRQVVQpKTsKKwl9CisKKwltaXggPSBhbGM2NjJfZGFjX3RvX21peChjb2RlYywgcGluLCBuaWQpOworCWlmICghbWl4KQorCQlyZXR1cm4gMDsKKwllcnIgPSBhbGM2NjJfYWRkX3ZvbF9jdGwoc3BlYywgcGZ4LCBuaWQsIDMpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmIChhbGM4ODBfaXNfZml4ZWRfcGluKHBpbikpIHsKLQkJbmlkID0gYWxjODgwX2lkeF90b19kYWMoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7Ci0JCS8qIHByaW50ayhLRVJOX0RFQlVHICJEQUMgbmlkPSV4XG4iLG5pZCk7ICovCi0JCS8qIHNwZWNpZnkgdGhlIERBQyBhcyB0aGUgZXh0cmEgb3V0cHV0ICovCi0JCWlmICghc3BlYy0+bXVsdGlvdXQuaHBfbmlkKQotCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gbmlkOwotCQllbHNlCi0JCQlzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkWzBdID0gbmlkOwotCQkvKiBjb250cm9sIEhQIHZvbHVtZS9zd2l0Y2ggb24gdGhlIG91dHB1dCBtaXhlciBhbXAgKi8KLQkJbmlkID0gYWxjODgwX2lkeF90b19kYWMoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7Ci0JCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7Ci0JCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKLQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBIREFfT1VUUFVUKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsIG5hbWUsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMiwgSERBX0lOUFVUKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9IGVsc2UgaWYgKGFsYzg4MF9pc19tdWx0aV9waW4ocGluKSkgewotCQkvKiBzZXQgbWFudWFsIGNvbm5lY3Rpb24gKi8KLQkJLyogd2UgaGF2ZSBvbmx5IGEgc3dpdGNoIG9uIEhQLW91dCBQSU4gKi8KLQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKLQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwocGluLCAzLCAwLCBIREFfT1VUUFVUKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7CisJZXJyID0gYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgcGZ4LCBtaXgsIDMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJldHVybiBuaWQ7CiB9CiAKIC8qIGNyZWF0ZSBwbGF5YmFjay9jYXB0dXJlIGNvbnRyb2xzIGZvciBpbnB1dCBwaW5zICovCiAjZGVmaW5lIGFsYzY2Ml9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzIFwKLQlhbGM4ODBfYXV0b19jcmVhdGVfaW5wdXRfY3RscworCWFsYzg4Ml9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzCiAKIHN0YXRpYyB2b2lkIGFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJICAgICAgaGRhX25pZF90IG5pZCwgaW50IHBpbl90eXBlLAotCQkJCQkgICAgICBpbnQgZGFjX2lkeCkKKwkJCQkJICAgICAgaGRhX25pZF90IGRhYykKIHsKKwlpbnQgaSwgbnVtOworCWhkYV9uaWRfdCBzcmNzWzRdOworCiAJYWxjX3NldF9waW5fb3V0cHV0KGNvZGVjLCBuaWQsIHBpbl90eXBlKTsKIAkvKiBuZWVkIHRoZSBtYW51YWwgY29ubmVjdGlvbj8gKi8KLQlpZiAoYWxjODgwX2lzX211bHRpX3BpbihuaWQpKSB7Ci0JCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCQlpbnQgaWR4ID0gYWxjODgwX211bHRpX3Bpbl9pZHgobmlkKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgYWxjODgwX2lkeF90b19zZWxlY3RvcihpZHgpLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKLQkJCQkgICAgYWxjODgwX2RhY190b19pZHgoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbZGFjX2lkeF0pKTsKKwludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBzcmNzLCBBUlJBWV9TSVpFKHNyY3MpKTsKKwlpZiAobnVtIDw9IDEpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaWYgKGFsYzY2Ml9taXhfdG9fZGFjKHNyY3NbaV0pICE9IGRhYykKKwkJCWNvbnRpbnVlOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBpKTsKKwkJcmV0dXJuOwogCX0KIH0KIAogc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9faW5pdF9tdWx0aV9vdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IHBpbl90eXBlID0gZ2V0X3Bpbl90eXBlKHNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSk7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDw9IEhEQV9TSURFOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1tpXTsKLQkJaW50IHBpbl90eXBlID0gZ2V0X3Bpbl90eXBlKHNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSk7CiAJCWlmIChuaWQpCiAJCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIG5pZCwgcGluX3R5cGUsCi0JCQkJCQkJICBpKTsKKwkJCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0pOwogCX0KIH0KIApAQCAtMTczMDYsMTIgKzE3NDIyLDEzIEBACiAJaGRhX25pZF90IHBpbjsKIAogCXBpbiA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKLQlpZiAocGluKSAvKiBjb25uZWN0IHRvIGZyb250ICovCi0JCS8qIHVzZSBkYWMgMCAqLwotCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX0hQLCAwKTsKKwlpZiAocGluKQorCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX0hQLAorCQkJCQkJICBzcGVjLT5tdWx0aW91dC5ocF9uaWQpOwogCXBpbiA9IHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdOwogCWlmIChwaW4pCi0JCWFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VULCAwKTsKKwkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQsCisJCQkJCXNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWRbMF0pOwogfQogCiAjZGVmaW5lIEFMQzY2Ml9QSU5fQ0RfTklECQlBTEM4ODBfUElOX0NEX05JRApAQCAtMTczNDksMjEgKzE3NDY2LDI1IEBACiAJaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCiAKLQllcnIgPSBhbGM4ODBfYXV0b19maWxsX2RhY19uaWRzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSBhbGM2NjJfYXV0b19maWxsX2RhY19uaWRzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHNwZWMsCisJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChjb2RlYywKIAkJCQkJICAgc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0sCiAJCQkJCSAgICJTcGVha2VyIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChzcGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0sCisJaWYgKGVycikKKwkJc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFswXSA9IGVycjsKKwllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0sCiAJCQkJCSAgICJIZWFkcGhvbmUiKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKKwlpZiAoZXJyKQorCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBlcnI7CiAJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCA4MjYxMzdlLi44NmRlMzA1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAjaW5jbHVkZSA8c291bmQvamFjay5oPgpAQCAtMTU4LDYgKzE1OSw3IEBACiAJU1RBQ19EOTY1XzVTVF9OT19GUCwKIAlTVEFDX0RFTExfM1NULAogCVNUQUNfREVMTF9CSU9TLAorCVNUQUNfOTI3WF9WT0xLTk9CLAogCVNUQUNfOTI3WF9NT0RFTFMKIH07CiAKQEAgLTE4Miw4ICsxODQsOCBAQAogCiBzdHJ1Y3Qgc2lnbWF0ZWxfbWljX3JvdXRlIHsKIAloZGFfbmlkX3QgcGluOwotCXVuc2lnbmVkIGNoYXIgbXV4X2lkeDsKLQl1bnNpZ25lZCBjaGFyIGRtdXhfaWR4OworCXNpZ25lZCBjaGFyIG11eF9pZHg7CisJc2lnbmVkIGNoYXIgZG11eF9pZHg7CiB9OwogCiBzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyB7CkBAIC05MDcsNiArOTA5LDE2IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgZGVsbF8zc3RfY29yZV9pbml0W10gPSB7CisJLyogZG9uJ3Qgc2V0IGRlbHRhIGJpdCAqLworCXsweDI0LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweDdmfSwKKwkvKiB1bm11dGUgbm9kZSAweDFiICovCisJezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCisJLyogc2VsZWN0IG5vZGUgMHgwMyBhcyBEQUMgKi8KKwl7MHgwYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5Mjd4X2NvcmVfaW5pdFtdID0gewogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwkKIAl7IDB4MjQsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZmZ9LApAQCAtOTE1LDYgKzkyNywxNCBAQAogCXt9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5Mjd4X3ZvbGtub2JfY29yZV9pbml0W10gPSB7CisJLyogZG9uJ3Qgc2V0IGRlbHRhIGJpdCAqLworCXsweDI0LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweDdmfSwKKwkvKiBlbmFibGUgYW5hbG9nIHBjIGJlZXAgcGF0aCAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMiwgMSA8PCA1fSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTIwNV9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8JCiAJeyAweDI0LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKQEAgLTE1NzAsNiArMTU5MCw4IEBACiAJCQkJIkRlbGwgU3R1ZGlvIDE3IiwgU1RBQ19ERUxMX002X0RNSUMpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyYmUsCiAJCQkJIkRlbGwgU3R1ZGlvIDE1NTUiLCBTVEFDX0RFTExfTTZfRE1JQyksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDJiZCwKKwkJCQkiRGVsbCBTdHVkaW8gMTU1NyIsIFNUQUNfREVMTF9NNl9ETUlDKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC0xNjc0LDYgKzE2OTYsOCBAQAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmYiwKIAkJICAgICAgIkhQIGR2NC0xMjIybnIiLCBTVEFDX0hQX0RWNF8xMjIyTlIpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MTcyMCwKKwkJCSAgIkhQIiwgU1RBQ19IUF9EVjUpLAogCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MzA4MCwKIAkJICAgICAgIkhQIiwgU1RBQ19IUF9EVjUpLAogCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MzBmMCwKQEAgLTE5OTksNiArMjAyMyw3IEBACiAJW1NUQUNfRDk2NV81U1RfTk9fRlBdICA9IGQ5NjVfNXN0X25vX2ZwX3Bpbl9jb25maWdzLAogCVtTVEFDX0RFTExfM1NUXSAgPSBkZWxsXzNzdF9waW5fY29uZmlncywKIAlbU1RBQ19ERUxMX0JJT1NdID0gTlVMTCwKKwlbU1RBQ185MjdYX1ZPTEtOT0JdID0gTlVMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTI3eF9tb2RlbHNbU1RBQ185MjdYX01PREVMU10gPSB7CkBAIC0yMDEwLDYgKzIwMzUsNyBAQAogCVtTVEFDX0Q5NjVfNVNUX05PX0ZQXQk9ICI1c3RhY2stbm8tZnAiLAogCVtTVEFDX0RFTExfM1NUXQkJPSAiZGVsbC0zc3RhY2siLAogCVtTVEFDX0RFTExfQklPU10JPSAiZGVsbC1iaW9zIiwKKwlbU1RBQ185MjdYX1ZPTEtOT0JdCT0gInZvbGtub2IiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5Mjd4X2NmZ190YmxbXSA9IHsKQEAgLTIwNDUsNiArMjA3MSw4IEBACiAJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAogCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweGZmMDAsIDB4MjUwMCwKIAkJCSAgICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCisJLyogdm9sdW1lLWtub2IgZml4ZXMgKi8KKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwY2YsICJGU0MiLCBTVEFDXzkyN1hfVk9MS05PQiksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApAQCAtMzQ2OSwxOCArMzQ5NywyNiBAQAogCQkJYnJlYWs7CiAJaWYgKGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDKSB7CiAJCS8qIGFuYWxvZyBwaW4gKi8KLQkJbWljLT5kbXV4X2lkeCA9IDA7CiAJCWkgPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywgc3BlYy0+bXV4X25pZHNbMF0sIHBpbik7CiAJCWlmIChpIDwgMCkKIAkJCXJldHVybiAtMTsKIAkJbWljLT5tdXhfaWR4ID0gaTsKKwkJbWljLT5kbXV4X2lkeCA9IC0xOworCQlpZiAoc3BlYy0+ZG11eF9uaWRzKQorCQkJbWljLT5kbXV4X2lkeCA9IGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLAorCQkJCQkJCSAgICAgc3BlYy0+ZG11eF9uaWRzWzBdLAorCQkJCQkJCSAgICAgc3BlYy0+bXV4X25pZHNbMF0pOwogCX0gIGVsc2UgaWYgKHNwZWMtPmRtdXhfbmlkcykgewogCQkvKiBkaWdpdGFsIHBpbiAqLwotCQltaWMtPm11eF9pZHggPSAwOwogCQlpID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIHNwZWMtPmRtdXhfbmlkc1swXSwgcGluKTsKIAkJaWYgKGkgPCAwKQogCQkJcmV0dXJuIC0xOwogCQltaWMtPmRtdXhfaWR4ID0gaTsKKwkJbWljLT5tdXhfaWR4ID0gLTE7CisJCWlmIChzcGVjLT5tdXhfbmlkcykKKwkJCW1pYy0+bXV4X2lkeCA9IGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLAorCQkJCQkJCSAgICBzcGVjLT5tdXhfbmlkc1swXSwKKwkJCQkJCQkgICAgc3BlYy0+ZG11eF9uaWRzWzBdKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00NTU3LDExICs0NTkzLDExIEBACiAJCW1pYyA9ICZzcGVjLT5leHRfbWljOwogCWVsc2UKIAkJbWljID0gJnNwZWMtPmludF9taWM7Ci0JaWYgKG1pYy0+ZG11eF9pZHgpCisJaWYgKG1pYy0+ZG11eF9pZHggPj0gMCkKIAkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgc3BlYy0+ZG11eF9uaWRzWzBdLCAwLAogCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAogCQkJCQkgIG1pYy0+ZG11eF9pZHgpOwotCWVsc2UKKwlpZiAobWljLT5tdXhfaWR4ID49IDApCiAJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIHNwZWMtPm11eF9uaWRzWzBdLCAwLAogCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAogCQkJCQkgIG1pYy0+bXV4X2lkeCk7CkBAIC00NjM0LDYgKzQ2NzAsMjYgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgaHBfYnNlcmllc19zeXN0ZW0odTMyIHN1YnN5c3RlbV9pZCkKK3sKKwlzd2l0Y2ggKHN1YnN5c3RlbV9pZCkgeworCWNhc2UgMHgxMDNjMzA3ZToKKwljYXNlIDB4MTAzYzMwN2Y6CisJY2FzZSAweDEwM2MzMDgwOgorCWNhc2UgMHgxMDNjMzA4MToKKwljYXNlIDB4MTAzYzE3MjI6CisJY2FzZSAweDEwM2MxNzIzOgorCWNhc2UgMHgxMDNjMTcyNDoKKwljYXNlIDB4MTAzYzE3MjU6CisJY2FzZSAweDEwM2MxNzI2OgorCWNhc2UgMHgxMDNjMTcyNzoKKwljYXNlIDB4MTAzYzE3Mjg6CisJY2FzZSAweDEwM2MxNzI5OgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHZvaWQgc3RhYzkyaGRfcHJvY19ob29rKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwKIAkJCSAgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKQEAgLTQ3MjMsNiArNDc3OSwxMSBAQAogCQllbHNlCiAJCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7IC8qIHdoaXRlICovCiAKKwkJaWYgKGhwX2JzZXJpZXNfc3lzdGVtKGNvZGVjLT5zdWJzeXN0ZW1faWQpKSB7CisJCQkvKiBMRUQgc3RhdGUgaXMgaW52ZXJ0ZWQgb24gdGhlc2Ugc3lzdGVtcyAqLworCQkJc3BlYy0+Z3Bpb19kYXRhIF49IHNwZWMtPmdwaW9fbGVkOworCQl9CisKIAkJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLAogCQkJICAgICAgc3BlYy0+Z3Bpb19kaXIsCiAJCQkgICAgICBzcGVjLT5ncGlvX2RhdGEpOwpAQCAtNTIxMiw2ICs1MjczLDcgQEAKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYzsKIAlzdHJ1Y3QgaGRhX3ZlcmIgKnVubXV0ZV9pbml0ID0gc3RhYzkyaGQ3MWJ4eF91bm11dGVfY29yZV9pbml0OworCXVuc2lnbmVkIGludCBwaW5fY2ZnOwogCWludCBlcnIgPSAwOwogCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwpAQCAtNTM5NSw2ICs1NDU3LDQ1IEBACiAJCWJyZWFrOwogCX0KIAorCWlmIChocF9ic2VyaWVzX3N5c3RlbShjb2RlYy0+c3Vic3lzdGVtX2lkKSkgeworCQlwaW5fY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDBmKTsKKwkJaWYgKGdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfTElORV9PVVQgfHwKKwkJCWdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfU1BFQUtFUiAgfHwKKwkJCWdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfSFBfT1VUKSB7CisJCQkvKiBJdCB3YXMgY2hhbmdlZCBpbiB0aGUgQklPUyB0byBqdXN0IHNhdGlzZnkgTVMgRFRNLgorCQkJICogTGV0cyB0dXJuIGl0IGJhY2sgaW50byBzbGF2ZWQgSFAKKwkJCSAqLworCQkJcGluX2NmZyA9IChwaW5fY2ZnICYgKH5BQ19ERUZDRkdfREVWSUNFKSkKKwkJCQkJfCAoQUNfSkFDS19IUF9PVVQgPDwKKwkJCQkJCUFDX0RFRkNGR19ERVZJQ0VfU0hJRlQpOworCQkJcGluX2NmZyA9IChwaW5fY2ZnICYgKH4oQUNfREVGQ0ZHX0RFRl9BU1NPQworCQkJCQkJCXwgQUNfREVGQ0ZHX1NFUVVFTkNFKSkpCisJCQkJCQkJCXwgMHgxZjsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZiwgcGluX2NmZyk7CisJCX0KKwl9CisKKwlpZiAoKGNvZGVjLT5zdWJzeXN0ZW1faWQgPj4gMTYpID09IFBDSV9WRU5ET1JfSURfSFApIHsKKwkJY29uc3Qgc3RydWN0IGRtaV9kZXZpY2UgKmRldiA9IE5VTEw7CisJCXdoaWxlICgoZGV2ID0gZG1pX2ZpbmRfZGV2aWNlKERNSV9ERVZfVFlQRV9PRU1fU1RSSU5HLAorCQkJCQkgICAgICBOVUxMLCBkZXYpKSkgeworCQkJaWYgKHN0cmNtcChkZXYtPm5hbWUsICJIUF9NdXRlX0xFRF8xIikpIHsKKwkJCQlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKKwkJCQljYXNlIDB4MTExZDc2MDg6CisJCQkJCXNwZWMtPmdwaW9fbGVkID0gMHgwMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAweDExMWQ3NjAwOgorCQkJCWNhc2UgMHgxMTFkNzYwMToKKwkJCQljYXNlIDB4MTExZDc2MDI6CisJCQkJY2FzZSAweDExMWQ3NjAzOgorCQkJCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDg7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAlpZiAoc3BlYy0+Z3Bpb19sZWQpIHsKIAkJc3BlYy0+Z3Bpb19tYXNrIHw9IHNwZWMtPmdwaW9fbGVkOwpAQCAtNTYwNCwxMCArNTcwNSwxNCBAQAogCQlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTI3eF9kbWljX25pZHM7CiAJCXNwZWMtPm51bV9kbWljcyA9IFNUQUM5MjdYX05VTV9ETUlDUzsKIAotCQlzcGVjLT5pbml0ID0gZDk2NV9jb3JlX2luaXQ7CisJCXNwZWMtPmluaXQgPSBkZWxsXzNzdF9jb3JlX2luaXQ7CiAJCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5Mjd4X2RtdXhfbmlkczsKIAkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyN3hfZG11eF9uaWRzKTsKIAkJYnJlYWs7CisJY2FzZSBTVEFDXzkyN1hfVk9MS05PQjoKKwkJc3BlYy0+bnVtX2RtaWNzID0gMDsKKwkJc3BlYy0+aW5pdCA9IHN0YWM5Mjd4X3ZvbGtub2JfY29yZV9pbml0OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlzcGVjLT5udW1fZG1pY3MgPSAwOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyN3hfY29yZV9pbml0OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYW1wLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYwppbmRleCAzNzU2NDMwLi42ZGEyMWEyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYwpAQCAtNTIsMTEgKzUyLDEzIEBACiAKIAkvKiBvbmx5IHVzZSBiYXNpYyBmdW5jdGlvbmFsaXR5IGZvciBub3cgKi8KIAotCWljZS0+bnVtX3RvdGFsX2RhY3MgPSAyOwkvKiBvbmx5IFBTRE9VVDAgaXMgY29ubmVjdGVkICovCisJLyogVlQxNjE2IDZjaCBjb2RlYyBjb25uZWN0ZWQgdG8gUFNET1VUMCB1c2luZyBwYWNrZWQgbW9kZSAqLworCWljZS0+bnVtX3RvdGFsX2RhY3MgPSA2OwogCWljZS0+bnVtX3RvdGFsX2FkY3MgPSAyOwogCi0JLyogQ2hhaW50ZWNoIEFWLTcxMCBoYXMgYW5vdGhlciBjb2RlY3MsIHdoaWNoIG5lZWQgaW5pdGlhbGl6YXRpb24gKi8KLQkvKiBpbml0aWFsaXplIFdNODcyOCBjb2RlYyAqLworCS8qIENoYWludGVjaCBBVi03MTAgaGFzIGFub3RoZXIgV004NzI4IGNvZGVjIGNvbm5lY3RlZCB0byBQU0RPVVQ0CisJICAgKHNoYXJlZCB3aXRoIHRoZSBTUERJRiBvdXRwdXQpLiBNaXhlciBjb250cm9sIGZvciB0aGlzIGNvZGVjCisJICAgaXMgbm90IHlldCBzdXBwb3J0ZWQuICovCiAJaWYgKGljZS0+ZWVwcm9tLnN1YnZlbmRvciA9PSBWVDE3MjRfU1VCREVWSUNFX0FWNzEwKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtX2luaXRzKTsgaSArPSAyKQogCQkJd21fcHV0KGljZSwgd21faW5pdHNbaV0sIHdtX2luaXRzW2krMV0pOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCmluZGV4IGNlY2YxZmYuLmQ3NDAzM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKQEAgLTIyNTksNyArMjI1OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9taXhlcl9wcm9fcGVhayBfX2RldmluaXRkYXRhID0gewotCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKIAkubmFtZSA9ICJNdWx0aSBUcmFjayBQZWFrIiwKIAkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsCiAJLmluZm8gPSBzbmRfaWNlMTcxMl9wcm9fcGVha19pbmZvLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCmluZGV4IDlkYTJkYWUuLmQwNjMxNDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaAorKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmgKQEAgLTM4Miw4ICszODIsOCBAQAogI2lmZGVmIENPTkZJR19QTQogCWludCAoKnBtX3N1c3BlbmQpKHN0cnVjdCBzbmRfaWNlMTcxMiAqKTsKIAlpbnQgKCpwbV9yZXN1bWUpKHN0cnVjdCBzbmRfaWNlMTcxMiAqKTsKLQlpbnQgcG1fc3VzcGVuZF9lbmFibGVkOjE7Ci0JaW50IHBtX3NhdmVkX2lzX3NwZGlmX21hc3RlcjoxOworCXVuc2lnbmVkIGludCBwbV9zdXNwZW5kX2VuYWJsZWQ6MTsKKwl1bnNpZ25lZCBpbnQgcG1fc2F2ZWRfaXNfc3BkaWZfbWFzdGVyOjE7CiAJdW5zaWduZWQgaW50IHBtX3NhdmVkX3NwZGlmX2N0cmw7CiAJdW5zaWduZWQgY2hhciBwbV9zYXZlZF9zcGRpZl9jZmc7CiAJdW5zaWduZWQgaW50IHBtX3NhdmVkX3JvdXRlOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCmluZGV4IGFmNmUwMDEuLjEwZmM5MmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTY0OCw3ICs2NDgsNyBAQAogCSAgICAoaW5iKElDRU1UMTcyNChpY2UsIERNQV9QQVVTRSkpICYgRE1BX1BBVVNFUykpIHsKIAkJLyogcnVubmluZz8gd2UgY2Fubm90IGNoYW5nZSB0aGUgcmF0ZSBub3cuLi4gKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNlLT5yZWdfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gKChyYXRlID09IGljZS0+Y3VyX3JhdGUpICYmICFmb3JjZSkgPyAwIDogLUVCVVNZOwogCX0KIAlpZiAoIWZvcmNlICYmIGlzX3Byb19yYXRlX2xvY2tlZChpY2UpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljZS0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTEyOTQsNyArMTI5NCw3IEBACiAKIAlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAogCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKGljZS0+cGNpKSwKLQkJCQkJICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7CisJCQkJCSAgICAgIDI1NioxMDI0LCAyNTYqMTAyNCk7CiAKIAlpY2UtPnBjbSA9IHBjbTsKIApAQCAtMTQwOCw3ICsxNDA4LDcgQEAKIAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoaWNlLT5wY2kpLAotCQkJCQkgICAgICA2NCoxMDI0LCA2NCoxMDI0KTsKKwkJCQkJICAgICAgMjU2KjEwMjQsIDI1NioxMDI0KTsKIAogCWljZS0+cGNtX2RzID0gcGNtOwogCkBAIC0yMTEwLDcgKzIxMTAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3Z0MTcyNF9taXhlcl9wcm9fcGVhayBfX2RldmluaXRkYXRhID0gewotCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKIAkubmFtZSA9ICJNdWx0aSBUcmFjayBQZWFrIiwKIAkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsCiAJLmluZm8gPSBzbmRfdnQxNzI0X3Byb19wZWFrX2luZm8sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3lfaGlmaS5jCmluZGV4IGM3NTUxNWYuLjZhOWZlZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3lfaGlmaS5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3lfaGlmaS5jCkBAIC0xMTAwLDcgKzExMDAsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwcm9kaWd5X2hkMl9yZXN1bWUoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCitzdGF0aWMgaW50IHByb2RpZ3lfaGQyX3Jlc3VtZShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKIHsKIAkvKiBpbml0aWFsaXplIGFrNDM5NiBjb2RlYyBhbmQgcmVzdG9yZSBwcmV2aW91cyBtaXhlciB2b2x1bWVzICovCiAJc3RydWN0IHByb2RpZ3lfaGlmaV9zcGVjICpzcGVjID0gaWNlLT5zcGVjOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCAxNzFhZGE1Li5hYWMyMGZiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtMTk1MCwxMCArMTk1MCwyOCBAQAogCX0sCiAJewogCQkuc3VidmVuZG9yID0gMHgxMDRkLAorCQkuc3ViZGV2aWNlID0gMHg4MTQ0LAorCQkubmFtZSA9ICJTb255IiwKKwkJLnR5cGUgPSBBQzk3X1RVTkVfSU5WX0VBUEQKKwl9LAorCXsKKwkJLnN1YnZlbmRvciA9IDB4MTA0ZCwKIAkJLnN1YmRldmljZSA9IDB4ODE5NywKIAkJLm5hbWUgPSAiU29ueSBTMVhQIiwKIAkJLnR5cGUgPSBBQzk3X1RVTkVfSU5WX0VBUEQKIAl9LAorCXsKKwkJLnN1YnZlbmRvciA9IDB4MTA0ZCwKKwkJLnN1YmRldmljZSA9IDB4ODFjMCwKKwkJLm5hbWUgPSAiU29ueSBWQUlPIFZHTi1UMzUwUCIsIC8qQUQxOTgxQiovCisJCS50eXBlID0gQUM5N19UVU5FX0lOVl9FQVBECisJfSwKKwl7CisJCS5zdWJ2ZW5kb3IgPSAweDEwNGQsCisJCS5zdWJkZXZpY2UgPSAweDgxYzUsCisJCS5uYW1lID0gIlNvbnkgVkFJTyBWR04tQjFWUCIsIC8qQUQxOTgxQiovCisJCS50eXBlID0gQUM5N19UVU5FX0lOVl9FQVBECisJfSwKICAJewogCQkuc3VidmVuZG9yID0gMHgxMDQzLAogCQkuc3ViZGV2aWNlID0gMHg4MGYzLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggYWNmYTQ3Ni4uOGEzMzJkMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0zODYsNiArMzg2LDcgQEAKIAogCXN0cnVjdCBzbmRfcGNtICpwY21zWzJdOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisJc3RydWN0IHNuZF9rY29udHJvbCAqZHhzX2NvbnRyb2xzWzRdOwogCiAJc3RydWN0IHNuZF9hYzk3X2J1cyAqYWM5N19idXM7CiAJc3RydWN0IHNuZF9hYzk3ICphYzk3OwpAQCAtMTIxNiw5ICsxMjE3LDkgQEAKIAogCiAvKgotICogb3BlbiBjYWxsYmFjayBmb3IgcGxheWJhY2sgb24gdmlhNjg2IGFuZCB2aWE4MjN4IERTWAorICogb3BlbiBjYWxsYmFjayBmb3IgcGxheWJhY2sgb24gdmlhNjg2CiAgKi8KLXN0YXRpYyBpbnQgc25kX3ZpYTgyeHhfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgc25kX3ZpYTY4Nl9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCB2aWFkZXYgKnZpYWRldiA9ICZjaGlwLT5kZXZzW2NoaXAtPnBsYXliYWNrX2Rldm5vICsgc3Vic3RyZWFtLT5udW1iZXJdOwpAQCAtMTIzMCw2ICsxMjMxLDMyIEBACiB9CiAKIC8qCisgKiBvcGVuIGNhbGxiYWNrIGZvciBwbGF5YmFjayBvbiB2aWE4MjN4IERYUworICovCitzdGF0aWMgaW50IHNuZF92aWE4MjMzX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHZpYWRldiAqdmlhZGV2OworCXVuc2lnbmVkIGludCBzdHJlYW07CisJaW50IGVycjsKKworCXZpYWRldiA9ICZjaGlwLT5kZXZzW2NoaXAtPnBsYXliYWNrX2Rldm5vICsgc3Vic3RyZWFtLT5udW1iZXJdOworCWlmICgoZXJyID0gc25kX3ZpYTgyeHhfcGNtX29wZW4oY2hpcCwgdmlhZGV2LCBzdWJzdHJlYW0pKSA8IDApCisJCXJldHVybiBlcnI7CisJc3RyZWFtID0gdmlhZGV2LT5yZWdfb2Zmc2V0IC8gMHgxMDsKKwlpZiAoY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0pIHsKKwkJY2hpcC0+cGxheWJhY2tfdm9sdW1lW3N0cmVhbV1bMF0gPSAwOworCQljaGlwLT5wbGF5YmFja192b2x1bWVbc3RyZWFtXVsxXSA9IDA7CisJCWNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT52ZFswXS5hY2Nlc3MgJj0KKwkJCX5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFIHwKKwkJCSAgICAgICBTTkRSVl9DVExfRVZFTlRfTUFTS19JTkZPLAorCQkJICAgICAgICZjaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXS0+aWQpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKICAqIG9wZW4gY2FsbGJhY2sgZm9yIHBsYXliYWNrIG9uIHZpYTgyM3ggbXVsdGktY2hhbm5lbAogICovCiBzdGF0aWMgaW50IHNuZF92aWE4MjMzX211bHRpX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0xMzAyLDEwICsxMzI5LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc25kX3ZpYTgyMzNfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHZpYWRldiAqdmlhZGV2ID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IHN0cmVhbTsKKworCXN0cmVhbSA9IHZpYWRldi0+cmVnX29mZnNldCAvIDB4MTA7CisJaWYgKGNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dKSB7CisJCWNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT52ZFswXS5hY2Nlc3MgfD0KKwkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRTsKKwkJc25kX2N0bF9ub3RpZnkoY2hpcC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTywKKwkJCSAgICAgICAmY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0tPmlkKTsKKwl9CisJcmV0dXJuIHNuZF92aWE4Mnh4X3BjbV9jbG9zZShzdWJzdHJlYW0pOworfQorCiAKIC8qIHZpYTY4NiBwbGF5YmFjayBjYWxsYmFja3MgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3ZpYTY4Nl9wbGF5YmFja19vcHMgPSB7Ci0JLm9wZW4gPQkJc25kX3ZpYTgyeHhfcGxheWJhY2tfb3BlbiwKKwkub3BlbiA9CQlzbmRfdmlhNjg2X3BsYXliYWNrX29wZW4sCiAJLmNsb3NlID0Jc25kX3ZpYTgyeHhfcGNtX2Nsb3NlLAogCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMgPQlzbmRfdmlhODJ4eF9od19wYXJhbXMsCkBAIC0xMzMxLDggKzEzNzQsOCBAQAogCiAvKiB2aWE4MjN4IERTWCBwbGF5YmFjayBjYWxsYmFja3MgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3ZpYTgyMzNfcGxheWJhY2tfb3BzID0gewotCS5vcGVuID0JCXNuZF92aWE4Mnh4X3BsYXliYWNrX29wZW4sCi0JLmNsb3NlID0Jc25kX3ZpYTgyeHhfcGNtX2Nsb3NlLAorCS5vcGVuID0JCXNuZF92aWE4MjMzX3BsYXliYWNrX29wZW4sCisJLmNsb3NlID0Jc25kX3ZpYTgyMzNfcGxheWJhY2tfY2xvc2UsCiAJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcyA9CXNuZF92aWE4Mnh4X2h3X3BhcmFtcywKIAkuaHdfZnJlZSA9CXNuZF92aWE4Mnh4X2h3X2ZyZWUsCkBAIC0xNjI2LDcgKzE2NjksNyBAQAogCQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXVuc2lnbmVkIGludCBpZHggPSBzbmRfY3RsX2dldF9pb2ZmKGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKTsKKwl1bnNpZ25lZCBpbnQgaWR4ID0ga2NvbnRyb2wtPmlkLnN1YmRldmljZTsKIAogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gVklBX0RYU19NQVhfVk9MVU1FIC0gY2hpcC0+cGxheWJhY2tfdm9sdW1lW2lkeF1bMF07CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBWSUFfRFhTX01BWF9WT0xVTUUgLSBjaGlwLT5wbGF5YmFja192b2x1bWVbaWR4XVsxXTsKQEAgLTE2NDYsNyArMTY4OSw3IEBACiAJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JdW5zaWduZWQgaW50IGlkeCA9IHNuZF9jdGxfZ2V0X2lvZmYoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpOworCXVuc2lnbmVkIGludCBpZHggPSBrY29udHJvbC0+aWQuc3ViZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGNoaXAtPnBvcnQgKyAweDEwICogaWR4OwogCXVuc2lnbmVkIGNoYXIgdmFsOwogCWludCBpLCBjaGFuZ2UgPSAwOwpAQCAtMTcwNSwxMSArMTc0OCwxMyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92aWE4MjMzX2R4c192b2x1bWVfY29udHJvbCBfX2RldmluaXRkYXRhID0gewotCS5uYW1lID0gIlZJQSBEWFMgUGxheWJhY2sgVm9sdW1lIiwKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkuYWNjZXNzID0gKFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAotCQkgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQpLAotCS5jb3VudCA9IDQsCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCS5kZXZpY2UgPSAwLAorCS8qIC5zdWJkZXZpY2Ugc2V0IGxhdGVyICovCisJLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFLAogCS5pbmZvID0gc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9pbmZvLAogCS5nZXQgPSBzbmRfdmlhODIzM19keHNfdm9sdW1lX2dldCwKIAkucHV0ID0gc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9wdXQsCkBAIC0xOTM2LDEwICsxOTgxLDE5IEBACiAJCX0KIAkJZWxzZSAvKiBVc2luZyBEWFMgd2hlbiBQQ00gZW11bGF0aW9uIGlzIGVuYWJsZWQgaXMgcmVhbGx5IHdlaXJkICovCiAJCXsKLQkJCS8qIFN0YW5kYWxvbmUgRFhTIGNvbnRyb2xzICovCi0JCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF92aWE4MjMzX2R4c192b2x1bWVfY29udHJvbCwgY2hpcCkpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKKwkJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCisJCQkJa2N0bCA9IHNuZF9jdGxfbmV3MSgKKwkJCQkJJnNuZF92aWE4MjMzX2R4c192b2x1bWVfY29udHJvbCwgY2hpcCk7CisJCQkJaWYgKCFrY3RsKQorCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQlrY3RsLT5pZC5zdWJkZXZpY2UgPSBpOworCQkJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGtjdGwpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWNoaXAtPmR4c19jb250cm9sc1tpXSA9IGtjdGw7CisJCQl9CiAJCX0KIAl9CiAJLyogc2VsZWN0IHNwZGlmIGRhdGEgc2xvdCAxMC8xMSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKaW5kZXggN2RlYTc0Yi4uNjRiODU5OSAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCkBAIC0yMTcsMjAgKzIxNywyNSBAQAogICogY29uZmlndXJhdGlvbiBjYWxsYmFjawogICovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLQogc3RhdGljIGludCBwZGFjZl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IHNuZF9wZGFjZiAqcGRhY2YgPSBsaW5rLT5wcml2OwotCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKKwlpbnQgcmV0OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAicGRhY2ZfY29uZmlnIGNhbGxlZFxuIik7CiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4NTsKIAotCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCWlmIChzbmRfcGRhY2ZfYXNzaWduX3Jlc291cmNlcyhwZGFjZiwgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpIDwgMCkKIAkJZ290byBmYWlsZWQ7CkBAIC0yMzgsOCArMjQzLDYgQEAKIAlsaW5rLT5kZXZfbm9kZSA9ICZwZGFjZi0+bm9kZTsKIAlyZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCmluZGV4IDc0NDVjYzguLjE0OTI3NDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCkBAIC0yMTMsMTQgKzIxMywxMSBAQAogICogY29uZmlndXJhdGlvbiBjYWxsYmFjawogICovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLQogc3RhdGljIGludCB2eHBvY2tldF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IHZ4X2NvcmUgKmNoaXAgPSBsaW5rLT5wcml2OwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKnZ4cCA9IChzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICopY2hpcDsKLQlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CisJaW50IHJldDsKIAogCXNuZF9wcmludGRkKEtFUk5fREVCVUcgInZ4cG9ja2V0X2NvbmZpZyBjYWxsZWRcbiIpOwogCkBAIC0yMzUsOSArMjMyLDE3IEBACiAJCXN0cmNweShjaGlwLT5jYXJkLT5kcml2ZXIsIHZ4cDQ0MF9ody5uYW1lKTsKIAl9CiAKLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAljaGlwLT5kZXYgPSAmaGFuZGxlX3RvX2RldihsaW5rKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNoaXAtPmNhcmQsIGNoaXAtPmRldik7CkBAIC0yNDgsOCArMjUzLDYgQEAKIAlsaW5rLT5kZXZfbm9kZSA9ICZ2eHAtPm5vZGU7CiAJcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL0tjb25maWcgYi9zb3VuZC9wcGMvS2NvbmZpZwppbmRleCBiZDIzMzhhLi4wNTE5YzYwIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvS2NvbmZpZworKysgYi9zb3VuZC9wcGMvS2NvbmZpZwpAQCAtMiw3ICsyLDcgQEAKIAogbWVudWNvbmZpZyBTTkRfUFBDCiAJYm9vbCAiUG93ZXJQQyBzb3VuZCBkZXZpY2VzIgotCWRlcGVuZHMgb24gUFBDNjQgfHwgUFBDMzIKKwlkZXBlbmRzIG9uIFBQQwogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHNvdW5kIGRldmljZXMgc3BlY2lmaWMgdG8gUG93ZXJQQyBhcmNoaXRlY3R1cmVzLgpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2tleXdlc3QuYyBiL3NvdW5kL3BwYy9rZXl3ZXN0LmMKaW5kZXggODM1ZmExOS4uZDA2Zjc4MCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2tleXdlc3QuYworKysgYi9zb3VuZC9wcGMva2V5d2VzdC5jCkBAIC01OSw2ICs1OSwxOCBAQAogCXN0cmxjcHkoaW5mby50eXBlLCAia2V5d2VzdCIsIEkyQ19OQU1FX1NJWkUpOwogCWluZm8uYWRkciA9IGtleXdlc3RfY3R4LT5hZGRyOwogCWtleXdlc3RfY3R4LT5jbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJaWYgKCFrZXl3ZXN0X2N0eC0+Y2xpZW50KQorCQlyZXR1cm4gLUVOT0RFVjsKKwkvKgorCSAqIFdlIGtub3cgdGhlIGRyaXZlciBpcyBhbHJlYWR5IGxvYWRlZCwgc28gdGhlIGRldmljZSBzaG91bGQgYmUKKwkgKiBhbHJlYWR5IGJvdW5kLiBJZiBub3QgaXQgbWVhbnMgYmluZGluZyBmYWlsZWQsIGFuZCB0aGVuIHRoZXJlCisJICogaXMgbm8gcG9pbnQgaW4ga2VlcGluZyB0aGUgZGV2aWNlIGluc3RhbnRpYXRlZC4KKwkgKi8KKwlpZiAoIWtleXdlc3RfY3R4LT5jbGllbnQtPmRyaXZlcikgeworCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2Uoa2V5d2VzdF9jdHgtPmNsaWVudCk7CisJCWtleXdlc3RfY3R4LT5jbGllbnQgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJCiAJLyoKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgpAQCAtODYsNyArOTgsNyBAQAogCXsgfQogfTsKIAotc3RydWN0IGkyY19kcml2ZXIga2V5d2VzdF9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIga2V5d2VzdF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAiUE1hYyBLZXl3ZXN0IEF1ZGlvIiwKIAl9LApkaWZmIC0tZ2l0IGEvc291bmQvc2gvYWljYS5jIGIvc291bmQvc2gvYWljYS5jCmluZGV4IDU4M2EzNjkuLmEwZGY0MDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NoL2FpY2EuYworKysgYi9zb3VuZC9zaC9haWNhLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJlYW1jYXN0IEFJQ0Egc291bmQgKHBjbSkgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tZYW1haGEvU0VHQSwgQUlDQX19Iik7CitNT0RVTEVfRklSTVdBUkUoImFpY2FfZmlybXdhcmUuYmluIik7CiAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIENBUkRfTkFNRSAiQUlDQSIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnIGIvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcKaW5kZXggYWM5MjdmZi4uOTdmMWEyNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcKKysrIGIvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcKQEAgLTcsMTUgKzcsNiBAQAogCSAgbW9kZSAoc3VwcG9ydHMgc2luZ2xlIHN0ZXJlbyBJbi9PdXQpLgogCSAgWW91IHdpbGwgYWxzbyBuZWVkIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgogCi1jb25maWcgU05EX0JGNVhYX1RETQotCXRyaXN0YXRlICJTb0MgSTJTKFRETSBtb2RlKSBBdWRpbyBmb3IgdGhlIEFESSBCRjV4eCBjaGlwIgotCWRlcGVuZHMgb24gKEJMQUNLRklOICYmIFNORF9TT0MpCi0JaGVscAotCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCi0JICB0aGUgQmxhY2tmaW4gU1BPUlQgKHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0cykgaW50ZXJmYWNlIGluIFRETQotCSAgbW9kZS4KLQkgIFlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KLQogY29uZmlnIFNORF9CRjVYWF9TT0NfU1NNMjYwMgogCXRyaXN0YXRlICJTb0MgU1NNMjYwMiBBdWRpbyBzdXBwb3J0IGZvciBCRjUyeCBlemtpdCIKIAlkZXBlbmRzIG9uIFNORF9CRjVYWF9JMlMKQEAgLTQxLDYgKzMyLDMxIEBACiAJICBFbnRlciB0aGUgR1BJTyB1c2VkIHRvIGNvbnRyb2wgQUQ3MzMxMSdzIFNFIHBpbi4gQWNjZXB0YWJsZQogCSAgdmFsdWVzIGFyZSAwIHRvIDcKIAorY29uZmlnIFNORF9CRjVYWF9URE0KKwl0cmlzdGF0ZSAiU29DIEkyUyhURE0gbW9kZSkgQXVkaW8gZm9yIHRoZSBBREkgQkY1eHggY2hpcCIKKwlkZXBlbmRzIG9uIChCTEFDS0ZJTiAmJiBTTkRfU09DKQorCWhlbHAKKwkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bworCSAgdGhlIEJsYWNrZmluIFNQT1JUIChzeW5jaHJvbm91cyBzZXJpYWwgcG9ydHMpIGludGVyZmFjZSBpbiBURE0KKwkgIG1vZGUuCisJICBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gc2VsZWN0IHRoZSBhdWRpbyBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgYmVsb3cuCisKK2NvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTgzNgorCXRyaXN0YXRlICJTb0MgQUQxODM2IEF1ZGlvIHN1cHBvcnQgZm9yIEJGNXh4IgorCWRlcGVuZHMgb24gU05EX0JGNVhYX1RETQorCXNlbGVjdCBTTkRfQkY1WFhfU09DX1RETQorCXNlbGVjdCBTTkRfU09DX0FEMTgzNgorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQkY1eHggU1RBTVAvRVpLSVQuCisKK2NvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTkzOAorCXRyaXN0YXRlICJTb0MgQUQxOTM4IEF1ZGlvIHN1cHBvcnQgZm9yIEJsYWNrZmluIgorCWRlcGVuZHMgb24gU05EX0JGNVhYX1RETQorCXNlbGVjdCBTTkRfQkY1WFhfU09DX1RETQorCXNlbGVjdCBTTkRfU09DX0FEMTkzOAorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBBRDE5MzggY29kZWMgb24gQmxhY2tmaW4uCisKIGNvbmZpZyBTTkRfQkY1WFhfQUM5NwogCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBmb3IgdGhlIEFESSBCRjV4eCBjaGlwIgogCWRlcGVuZHMgb24gQkxBQ0tGSU4KQEAgLTcxLDYgKzg3LDMwIEBACiAJICBTYXkgeSBpZiB5b3Ugd2FudCBBQzk3IGRyaXZlciB0byBzdXBwb3J0IHVwIHRvIDUuMSBjaGFubmVsIGF1ZGlvLgogCSAgdGhpcyBtb2RlIHdpbGwgY29uc3VtZSBtdWNoIG1vcmUgbWVtb3J5IGZvciBETUEuCiAKK2NvbmZpZyBTTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCisJYm9vbCAiQk9BUkQgaGFzIENPTEQgUmVzZXQgR1BJTyIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9BQzk3CisJZGVmYXVsdCB5IGlmIEJGSU41NDhfRVpLSVQKKwlkZWZhdWx0IG4gaWYgIUJGSU41NDhfRVpLSVQKKworY29uZmlnIFNORF9CRjVYWF9SRVNFVF9HUElPX05VTQorCWludCAiU2V0IGEgR1BJTyBmb3IgY29sZCByZXNldCIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKKwlyYW5nZSAwIDE1OQorCWRlZmF1bHQgMTkgaWYgQkZJTjU0OF9FWktJVAorCWRlZmF1bHQgNSBpZiBCRklONTM3X1NUQU1QCisJZGVmYXVsdCAwCisJaGVscAorCSAgU2V0IHRoZSBjb3JyZWN0IEdQSU8gZm9yIFJFU0VUIHRoZSBzb3VuZCBjaGlwLgorCitjb25maWcgU05EX0JGNVhYX1NPQ19BRDE5ODAKKwl0cmlzdGF0ZSAiU29DIEFEMTk4MC8xIEF1ZGlvIHN1cHBvcnQgZm9yIEJGNXh4IgorCWRlcGVuZHMgb24gU05EX0JGNVhYX0FDOTcKKwlzZWxlY3QgU05EX0JGNVhYX1NPQ19BQzk3CisJc2VsZWN0IFNORF9TT0NfQUQxOTgwCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBCRjV4eCBTVEFNUC9FWktJVC4KKwogY29uZmlnIFNORF9CRjVYWF9TT0NfU1BPUlQKIAl0cmlzdGF0ZQogCkBAIC04OCwzMCArMTI4LDYgQEAKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfQkY1WFhfU09DX1NQT1JUCiAKLWNvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTgzNgotCXRyaXN0YXRlICJTb0MgQUQxODM2IEF1ZGlvIHN1cHBvcnQgZm9yIEJGNXh4IgotCWRlcGVuZHMgb24gU05EX0JGNVhYX1RETQotCXNlbGVjdCBTTkRfQkY1WFhfU09DX1RETQotCXNlbGVjdCBTTkRfU09DX0FEMTgzNgotCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQkY1eHggU1RBTVAvRVpLSVQuCi0KLWNvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTk4MAotCXRyaXN0YXRlICJTb0MgQUQxOTgwLzEgQXVkaW8gc3VwcG9ydCBmb3IgQkY1eHgiCi0JZGVwZW5kcyBvbiBTTkRfQkY1WFhfQUM5NwotCXNlbGVjdCBTTkRfQkY1WFhfU09DX0FDOTcKLQlzZWxlY3QgU05EX1NPQ19BRDE5ODAKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIEJGNXh4IFNUQU1QL0VaS0lULgotCi1jb25maWcgU05EX0JGNVhYX1NPQ19BRDE5MzgKLSAgICAgICAgdHJpc3RhdGUgIlNvQyBBRDE5MzggQXVkaW8gc3VwcG9ydCBmb3IgQmxhY2tmaW4iCi0gICAgICAgIGRlcGVuZHMgb24gU05EX0JGNVhYX1RETQotICAgICAgICBzZWxlY3QgU05EX0JGNVhYX1NPQ19URE0KLSAgICAgICAgc2VsZWN0IFNORF9TT0NfQUQxOTM4Ci0gICAgICAgIGhlbHAKLSAgICAgICAgICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgQUQxOTM4IGNvZGVjIG9uIEJsYWNrZmluLgotCiBjb25maWcgU05EX0JGNVhYX1NQT1JUX05VTQogCWludCAiU2V0IGEgU1BPUlQgZm9yIFNvdW5kIGNoaXAiCiAJZGVwZW5kcyBvbiAoU05EX0JGNVhYX0kyUyB8fCBTTkRfQkY1WFhfQUM5NyB8fCBTTkRfQkY1WFhfVERNKQpAQCAtMTIwLDE5ICsxMzYsMyBAQAogCWRlZmF1bHQgMAogCWhlbHAKIAkgIFNldCB0aGUgY29ycmVjdCBTUE9SVCBmb3Igc291bmQgY2hpcC4KLQotY29uZmlnIFNORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKLQlib29sICJCT0FSRCBoYXMgQ09MRCBSZXNldCBHUElPIgotCWRlcGVuZHMgb24gU05EX0JGNVhYX0FDOTcKLQlkZWZhdWx0IHkgaWYgQkZJTjU0OF9FWktJVAotCWRlZmF1bHQgbiBpZiAhQkZJTjU0OF9FWktJVAotCi1jb25maWcgU05EX0JGNVhYX1JFU0VUX0dQSU9fTlVNCi0JaW50ICJTZXQgYSBHUElPIGZvciBjb2xkIHJlc2V0IgotCWRlcGVuZHMgb24gU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAotCXJhbmdlIDAgMTU5Ci0JZGVmYXVsdCAxOSBpZiBCRklONTQ4X0VaS0lUCi0JZGVmYXVsdCA1IGlmIEJGSU41MzdfU1RBTVAKLQlkZWZhdWx0IDAKLQloZWxwCi0JICBTZXQgdGhlIGNvcnJlY3QgR1BJTyBmb3IgUkVTRVQgdGhlIHNvdW5kIGNoaXAuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKaW5kZXggMWU5ZDE2MS4uMDg0YjY4OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYwpAQCAtNzcsMTIgKzc3LDEyIEBACiAgKiBURlMuIFdoZW4gUG9ydCBHIGlzIHNlbGVjdGVkIGFuZCBFTUFDIHRoZW4gdGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuCiAgKiB0aGUgUEhZIGludGVycnVwdCBsaW5lIGFuZCBURlMuICBDdXJyZW50IHNldHRpbmdzIHByZXZlbnQgdGhlIGNvbmZsaWN0CiAgKiBieSBpZ25vcmluZyB0aGUgVEZTIHBpbiB3aGVuIFBvcnQgRyBpcyBzZWxlY3RlZC4gVGhpcyBhbGxvd3MgYm90aAotICogc3NtMjYwMiB1c2luZyBQb3J0IEcgYW5kIEVNQUMgY29uY3VycmVudGx5LgorICogY29kZWNzIGFuZCBFTUFDIHVzaW5nIFBvcnQgRyBjb25jdXJyZW50bHkuCiAgKi8KLSNpZmRlZiBDT05GSUdfQkY1MjdfU1BPUlQwX1BPUlRGCi0jZGVmaW5lIExPQ0FMX1NQT1JUMF9URlMgKFBfU1BPUlQwX1RGUykKLSNlbHNlCisjaWZkZWYgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURwogI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTICgwKQorI2Vsc2UKKyNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoUF9TUE9SVDBfVEZTKQogI2VuZGlmCiAKIHN0YXRpYyB1MTYgc3BvcnRfcmVxW11bN10gPSB7IHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uYwppbmRleCAzMDk2YmFkLi5mZjU0NmU5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5jCkBAIC03OCwxMiArNzgsMTIgQEAKICAqIFRGUy4gV2hlbiBQb3J0IEcgaXMgc2VsZWN0ZWQgYW5kIEVNQUMgdGhlbiB0aGVyZSBpcyBhIGNvbmZsaWN0IGJldHdlZW4KICAqIHRoZSBQSFkgaW50ZXJydXB0IGxpbmUgYW5kIFRGUy4gIEN1cnJlbnQgc2V0dGluZ3MgcHJldmVudCB0aGUgY29uZmxpY3QKICAqIGJ5IGlnbm9yaW5nIHRoZSBURlMgcGluIHdoZW4gUG9ydCBHIGlzIHNlbGVjdGVkLiBUaGlzIGFsbG93cyBib3RoCi0gKiBzc20yNjAyIHVzaW5nIFBvcnQgRyBhbmQgRU1BQyBjb25jdXJyZW50bHkuCisgKiBjb2RlY3MgYW5kIEVNQUMgdXNpbmcgUG9ydCBHIGNvbmN1cnJlbnRseS4KICAqLwotI2lmZGVmIENPTkZJR19CRjUyN19TUE9SVDBfUE9SVEYKLSNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoUF9TUE9SVDBfVEZTKQotI2Vsc2UKKyNpZmRlZiBDT05GSUdfQkY1MjdfU1BPUlQwX1BPUlRHCiAjZGVmaW5lIExPQ0FMX1NQT1JUMF9URlMgKDApCisjZWxzZQorI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTIChQX1NQT1JUMF9URlMpCiAjZW5kaWYKIAogc3RhdGljIHUxNiBzcG9ydF9yZXFbXVs3XSA9IHsge1BfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCmluZGV4IDBiOGRjYjUuLjZiMjRkOGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogI2RlZmluZSBVUFBFUl9HUk9VUCAoKDE8PDgpIHwgKDE8PDkpIHwgKDE8PDEwKSB8ICgxPDwxMSkgICAgICAgIHwgKDE8PDE1KSkKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzcl92YWxpZF9tYXNrW10gPSB7CiAJTE9XRVJfR1JPVVB8VVBQRVJfR1JPVVAsCS8qIE5vcm1hbCwgYm9zciAtIDAqLwotCUxPV0VSX0dST1VQfFVQUEVSX0dST1VQLAkvKiBOb3JtYWwsIGJvc3IgLSAxKi8KIAlMT1dFUl9HUk9VUCwJCQkvKiBVc2IsIGJvc3IgLSAwKi8KKwlMT1dFUl9HUk9VUHxVUFBFUl9HUk9VUCwJLyogTm9ybWFsLCBib3NyIC0gMSovCiAJVVBQRVJfR1JPVVAsCQkJLyogVXNiLCBib3NyIC0gMSovCiB9OwogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCmluZGV4IDNmZjAzNzMuLjU5M2Q1YjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwpAQCAtNTc5LDcgKzU3OSw3IEBACiAJU09DX0RBUE1fU0lOR0xFX1RMVigiTDMgQ2FwdHVyZSBWb2x1bWUiLAogCQkJICAgIFdNODM1MF9JTlBVVF9NSVhFUl9WT0xVTUVfTCwgOSwgNywgMCwgb3V0X21peF90bHYpLAogCVNPQ19EQVBNX1NJTkdMRSgiUEdBIENhcHR1cmUgU3dpdGNoIiwKLQkJCVdNODM1MF9MRUZUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDApLAorCQkJV004MzUwX0xFRlRfSU5QVVRfVk9MVU1FLCAxNCwgMSwgMSksCiB9OwogCiAvKiBSaWdodCBJbnB1dCBNaXhlciAqLwpAQCAtNTg5LDcgKzU4OSw3IEBACiAJU09DX0RBUE1fU0lOR0xFX1RMVigiTDMgQ2FwdHVyZSBWb2x1bWUiLAogCQkJICAgIFdNODM1MF9JTlBVVF9NSVhFUl9WT0xVTUVfUiwgMTMsIDcsIDAsIG91dF9taXhfdGx2KSwKIAlTT0NfREFQTV9TSU5HTEUoIlBHQSBDYXB0dXJlIFN3aXRjaCIsCi0JCQlXTTgzNTBfUklHSFRfSU5QVVRfVk9MVU1FLCAxNCwgMSwgMCksCisJCQlXTTgzNTBfUklHSFRfSU5QVVRfVk9MVU1FLCAxNCwgMSwgMSksCiB9OwogCiAvKiBMZWZ0IE1pYyBNaXhlciAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMKaW5kZXggZGE5N2FhZS4uMWVmMjQ1NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jCkBAIC03OTAsNyArNzkwLDcgQEAKIAljb2RlYy0+cmVnX2NhY2hlID0gJndtODk0MC0+cmVnX2NhY2hlOwogCiAJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDgsIDE2LCBjb250cm9sKTsKLQlpZiAocmV0ID09IDApIHsKKwlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKaW5kZXggMTJhNmM1NC4uNGFlNzA3MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCkBAIC05NywyMiArOTcsMTkgQEAKIAlEQVZJTkNJX01DQlNQX1dPUkRfMzIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgZGF2aW5jaV9pMnNfcGNtX291dCA9IHsKLQkubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBvdXQiLAotfTsKLQotc3RhdGljIHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zIGRhdmluY2lfaTJzX3BjbV9pbiA9IHsKLQkubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBpbiIsCi19OwotCiBzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgeworCS8qCisJICogZG1hX3BhcmFtcyBtdXN0IGJlIGZpcnN0IGJlY2F1c2UgcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YQorCSAqIGlzIGNhc3QgdG8gYSBwb2ludGVyIG9mIGFuIGFycmF5IG9mIHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zIGluCisJICogZGF2aW5jaV9wY21fb3Blbi4KKwkgKi8KKwlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcwlkbWFfcGFyYW1zWzJdOwogCXZvaWQgX19pb21lbQkJCSpiYXNlOwogI2RlZmluZSBNT0RfRFNQX0EJMAogI2RlZmluZSBNT0RfRFNQX0IJMQogCWludAkJCQltb2RlOwogCXUzMgkJCQlwY3I7CiAJc3RydWN0IGNsawkJCSpjbGs7Ci0Jc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMJKmRtYV9wYXJhbXNbMl07CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoc3RydWN0IGRhdmluY2lfbWNic3BfZGV2ICpkZXYsCkBAIC0yMTUsMTQgKzIxMiw2IEBACiAJdG9nZ2xlX2Nsb2NrKGRldiwgcGxheWJhY2spOwogfQogCi1zdGF0aWMgaW50IGRhdmluY2lfaTJzX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKQotewotCXN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwotCWNwdV9kYWktPmRtYV9kYXRhID0gZGV2LT5kbWFfcGFyYW1zW3N1YnN0cmVhbS0+c3RyZWFtXTsKLQlyZXR1cm4gMDsKLX0KLQogI2RlZmluZSBERUZBVUxUX0JJVFBFUlNBTVBMRQkxNgogCiBzdGF0aWMgaW50IGRhdmluY2lfaTJzX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKQEAgLTM1Myw4ICszNDIsOSBAQAogCQkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKIAkJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0Jc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXMgPSBkYWktPmRtYV9kYXRhOwogCXN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2ID0gZGFpLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXMgPQorCQkJCQkmZGV2LT5kbWFfcGFyYW1zW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAlzdHJ1Y3Qgc25kX2ludGVydmFsICppID0gTlVMTDsKIAlpbnQgbWNic3Bfd29yZF9sZW5ndGg7CiAJdW5zaWduZWQgaW50IHJjciwgeGNyLCBzcmdyOwpAQCAtNDcyLDcgKzQ2Miw2IEBACiAjZGVmaW5lIERBVklOQ0lfSTJTX1JBVEVTCVNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGF2aW5jaV9pMnNfZGFpX29wcyA9IHsKLQkuc3RhcnR1cCAJPSBkYXZpbmNpX2kyc19zdGFydHVwLAogCS5zaHV0ZG93bgk9IGRhdmluY2lfaTJzX3NodXRkb3duLAogCS5wcmVwYXJlCT0gZGF2aW5jaV9pMnNfcHJlcGFyZSwKIAkudHJpZ2dlcgk9IGRhdmluY2lfaTJzX3RyaWdnZXIsCkBAIC01MzQsMTIgKzUyMywxMCBAQAogCiAJZGV2LT5iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MobWVtLT5zdGFydCk7CiAKLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSAmZGF2aW5jaV9pMnNfcGNtX291dDsKLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10tPmRtYV9hZGRyID0KKwlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uZG1hX2FkZHIgPQogCSAgICAoZG1hX2FkZHJfdCkoaW9fdjJwKGRldi0+YmFzZSkgKyBEQVZJTkNJX01DQlNQX0RYUl9SRUcpOwogCi0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0gPSAmZGF2aW5jaV9pMnNfcGNtX2luOwotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLT5kbWFfYWRkciA9CisJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uZG1hX2FkZHIgPQogCSAgICAoZG1hX2FkZHJfdCkoaW9fdjJwKGRldi0+YmFzZSkgKyBEQVZJTkNJX01DQlNQX0RSUl9SRUcpOwogCiAJLyogZmlyc3QgVFgsIHRoZW4gUlggKi8KQEAgLTU0OSw3ICs1MzYsNyBAQAogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCX0KLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10tPmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5jaGFubmVsID0gcmVzLT5zdGFydDsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7CiAJaWYgKCFyZXMpIHsKQEAgLTU1Nyw3ICs1NDQsNyBAQAogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCX0KLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS0+Y2hhbm5lbCA9IHJlcy0+c3RhcnQ7CisJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7CiAKIAlkYXZpbmNpX2kyc19kYWkucHJpdmF0ZV9kYXRhID0gZGV2OwogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZkYXZpbmNpX2kyc19kYWkpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCmluZGV4IDdhMDZjMGEuLjVkMWY5OGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKQEAgLTMzMiwxNCArMzMyLDYgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJHQkxDVEwgd3JpdGUgZXJyb3JcbiIpOwogfQogCi1zdGF0aWMgaW50IGRhdmluY2lfbWNhc3Bfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKLXsKLQlzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKLQljcHVfZGFpLT5kbWFfZGF0YSA9IGRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIG1jYXNwX3N0YXJ0X3J4KHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2KQogewogCW1jYXNwX3NldF9jdGxfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfR0JMQ1RMUl9SRUcsIFJYSENMS1JTVCk7CkBAIC0zODYsMTcgKzM3OCwxNyBAQAogCiBzdGF0aWMgdm9pZCBkYXZpbmNpX21jYXNwX3N0YXJ0KHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2LCBpbnQgc3RyZWFtKQogewotCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKGRldi0+dHhudW1ldnQpCS8qIGVuYWJsZSBGSUZPICovCisJCQltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1dGSUZPQ1RMLAorCQkJCQkJCQlGSUZPX0VOQUJMRSk7CiAJCW1jYXNwX3N0YXJ0X3R4KGRldik7Ci0JZWxzZQorCX0gZWxzZSB7CisJCWlmIChkZXYtPnJ4bnVtZXZ0KQkvKiBlbmFibGUgRklGTyAqLworCQkJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SRklGT0NUTCwKKwkJCQkJCQkJRklGT19FTkFCTEUpOwogCQltY2FzcF9zdGFydF9yeChkZXYpOwotCi0JLyogZW5hYmxlIEZJRk8gKi8KLQlpZiAoZGV2LT50eG51bWV2dCkKLQkJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwgRklGT19FTkFCTEUpOwotCi0JaWYgKGRldi0+cnhudW1ldnQpCi0JCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIG1jYXNwX3N0b3Bfcngoc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYpCkBAIC00MTMsMTcgKzQwNSwxNyBAQAogCiBzdGF0aWMgdm9pZCBkYXZpbmNpX21jYXNwX3N0b3Aoc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYsIGludCBzdHJlYW0pCiB7Ci0JaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlpZiAoZGV2LT50eG51bWV2dCkJLyogZGlzYWJsZSBGSUZPICovCisJCQltY2FzcF9jbHJfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1dGSUZPQ1RMLAorCQkJCQkJCQlGSUZPX0VOQUJMRSk7CiAJCW1jYXNwX3N0b3BfdHgoZGV2KTsKLQllbHNlCisJfSBlbHNlIHsKKwkJaWYgKGRldi0+cnhudW1ldnQpCS8qIGRpc2FibGUgRklGTyAqLworCQkJbWNhc3BfY2xyX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SRklGT0NUTCwKKwkJCQkJCQkJRklGT19FTkFCTEUpOwogCQltY2FzcF9zdG9wX3J4KGRldik7Ci0KLQkvKiBkaXNhYmxlIEZJRk8gKi8KLQlpZiAoZGV2LT50eG51bWV2dCkKLQkJbWNhc3BfY2xyX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwgRklGT19FTkFCTEUpOwotCi0JaWYgKGRldi0+cnhudW1ldnQpCi0JCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgZGF2aW5jaV9tY2FzcF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCkBAIC03MjAsNyArNzEyLDcgQEAKIHsKIAlzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX3BhcmFtcyA9Ci0JCQkJCWRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07CisJCQkJCSZkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOwogCWludCB3b3JkX2xlbmd0aDsKIAl1OCBudW1ldnQ7CiAKQEAgLTc5OCw3ICs3OTAsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBkYXZpbmNpX21jYXNwX2RhaV9vcHMgPSB7Ci0JLnN0YXJ0dXAgCT0gZGF2aW5jaV9tY2FzcF9zdGFydHVwLAogCS50cmlnZ2VyCT0gZGF2aW5jaV9tY2FzcF90cmlnZ2VyLAogCS5od19wYXJhbXMJPSBkYXZpbmNpX21jYXNwX2h3X3BhcmFtcywKIAkuc2V0X2ZtdAk9IGRhdmluY2lfbWNhc3Bfc2V0X2RhaV9mbXQsCkBAIC04NDksMjAgKzg0MCwxMiBAQAogCXN0cnVjdCByZXNvdXJjZSAqbWVtLCAqaW9hcmVhLCAqcmVzOwogCXN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXY7Ci0JaW50IGNvdW50ID0gMDsKIAlpbnQgcmV0ID0gMDsKIAogCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KQogCQlyZXR1cm4JLUVOT01FTTsKIAotCWRtYV9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMpICogMiwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkbWFfZGF0YSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9yZWxlYXNlX2RldjsKLQl9Ci0KIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghbWVtKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbSByZXNvdXJjZT9cbiIpOwpAQCAtODk3LDExICs4ODAsMTAgQEAKIAlkZXYtPnR4bnVtZXZ0ID0gcGRhdGEtPnR4bnVtZXZ0OwogCWRldi0+cnhudW1ldnQgPSBwZGF0YS0+cnhudW1ldnQ7CiAKLQlkbWFfZGF0YVtjb3VudF0ubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBvdXQiOwotCWRtYV9kYXRhW2NvdW50XS5ldmVudHFfbm8gPSBwZGF0YS0+ZXZlbnRxX25vOwotCWRtYV9kYXRhW2NvdW50XS5kbWFfYWRkciA9IChkbWFfYWRkcl90KSAocGRhdGEtPnR4X2RtYV9vZmZzZXQgKworCWRtYV9kYXRhID0gJmRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKKwlkbWFfZGF0YS0+ZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKKwlkbWFfZGF0YS0+ZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkgKHBkYXRhLT50eF9kbWFfb2Zmc2V0ICsKIAkJCQkJCQlpb192MnAoZGV2LT5iYXNlKSk7Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0gJmRtYV9kYXRhW2NvdW50XTsKIAogCS8qIGZpcnN0IFRYLCB0aGVuIFJYICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKQEAgLTkxMCwxMyArODkyLDEyIEBACiAJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCX0KIAotCWRtYV9kYXRhW2NvdW50XS5jaGFubmVsID0gcmVzLT5zdGFydDsKLQljb3VudCsrOwotCWRtYV9kYXRhW2NvdW50XS5uYW1lID0gIkkyUyBQQ00gU3RlcmVvIGluIjsKLQlkbWFfZGF0YVtjb3VudF0uZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKLQlkbWFfZGF0YVtjb3VudF0uZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkocGRhdGEtPnJ4X2RtYV9vZmZzZXQgKworCWRtYV9kYXRhLT5jaGFubmVsID0gcmVzLT5zdGFydDsKKworCWRtYV9kYXRhID0gJmRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdOworCWRtYV9kYXRhLT5ldmVudHFfbm8gPSBwZGF0YS0+ZXZlbnRxX25vOworCWRtYV9kYXRhLT5kbWFfYWRkciA9IChkbWFfYWRkcl90KShwZGF0YS0+cnhfZG1hX29mZnNldCArCiAJCQkJCQkJaW9fdjJwKGRldi0+YmFzZSkpOwotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0gJmRtYV9kYXRhW2NvdW50XTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7CiAJaWYgKCFyZXMpIHsKQEAgLTkyNCw3ICs5MDUsNyBAQAogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKLQlkbWFfZGF0YVtjb3VudF0uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7CisJZG1hX2RhdGEtPmNoYW5uZWwgPSByZXMtPnN0YXJ0OwogCWRhdmluY2lfbWNhc3BfZGFpW3BkYXRhLT5vcF9tb2RlXS5wcml2YXRlX2RhdGEgPSBkZXY7CiAJZGF2aW5jaV9tY2FzcF9kYWlbcGRhdGEtPm9wX21vZGVdLmRldiA9ICZwZGV2LT5kZXY7CiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmRhdmluY2lfbWNhc3BfZGFpW3BkYXRhLT5vcF9tb2RlXSk7CkBAIC05MzYsOCArOTE3LDYgQEAKIGVycl9yZWxlYXNlX3JlZ2lvbjoKIAlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgKG1lbS0+ZW5kIC0gbWVtLT5zdGFydCkgKyAxKTsKIGVycl9yZWxlYXNlX2RhdGE6Ci0Ja2ZyZWUoZG1hX2RhdGEpOwotZXJyX3JlbGVhc2VfZGV2OgogCWtmcmVlKGRldik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtOTQ2LDcgKzkyNSw2IEBACiBzdGF0aWMgaW50IGRhdmluY2lfbWNhc3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfZGF0YTsKIAlzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKIApAQCAtOTU5LDggKzkzNyw2IEBACiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgKG1lbS0+ZW5kIC0gbWVtLT5zdGFydCkgKyAxKTsKIAotCWRtYV9kYXRhID0gZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdOwotCWtmcmVlKGRtYV9kYXRhKTsKIAlrZnJlZShkZXYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmggYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmgKaW5kZXggNTU0MzU0Yy4uOWQxNzljYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaApAQCAtMzksMTAgKzM5LDE1IEBACiB9OwogCiBzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgeworCS8qCisJICogZG1hX3BhcmFtcyBtdXN0IGJlIGZpcnN0IGJlY2F1c2UgcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YQorCSAqIGlzIGNhc3QgdG8gYSBwb2ludGVyIG9mIGFuIGFycmF5IG9mIHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zIGluCisJICogZGF2aW5jaV9wY21fb3Blbi4KKwkgKi8KKwlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBkbWFfcGFyYW1zWzJdOwogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlpbnQgc2FtcGxlX3JhdGU7CiAJc3RydWN0IGNsayAqY2xrOwotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zWzJdOwogCXVuc2lnbmVkIGludCBjb2RlY19mbXQ7CiAKIAkvKiBNY0FTUCBzcGVjaWZpYyBkYXRhICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYwppbmRleCAyZjdkYTQ5Li5jNzNhOTE1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKQEAgLTEyNiwxNiArMTI2LDkgQEAKIHN0YXRpYyBpbnQgZGF2aW5jaV9wY21fZG1hX3JlcXVlc3Qoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IGRhdmluY2lfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfZGF0YSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKIAlzdHJ1Y3QgZWRtYWNjX3BhcmFtIHBfcmFtOwogCWludCByZXQ7CiAKLQlpZiAoIWRtYV9kYXRhKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXBydGQtPnBhcmFtcyA9IGRtYV9kYXRhOwotCiAJLyogUmVxdWVzdCBtYXN0ZXIgRE1BIGNoYW5uZWwgKi8KIAlyZXQgPSBlZG1hX2FsbG9jX2NoYW5uZWwocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLAogCQkJCSAgZGF2aW5jaV9wY21fZG1hX2lycSwgc3Vic3RyZWFtLApAQCAtMjQ0LDYgKzIzNywxMSBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IGRhdmluY2lfcnVudGltZV9kYXRhICpwcnRkOwogCWludCByZXQgPSAwOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqcGEgPSBydGQtPmRhaS0+Y3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpwYXJhbXMgPSAmcGFbc3Vic3RyZWFtLT5zdHJlYW1dOworCWlmICghcGFyYW1zKQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmZGF2aW5jaV9wY21faGFyZHdhcmUpOwogCS8qIGVuc3VyZSB0aGF0IGJ1ZmZlciBzaXplIGlzIGEgbXVsdGlwbGUgb2YgcGVyaW9kIHNpemUgKi8KQEAgLTI1Nyw2ICsyNTUsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pbml0KCZwcnRkLT5sb2NrKTsKKwlwcnRkLT5wYXJhbXMgPSBwYXJhbXM7CiAKIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBwcnRkOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5oIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaAppbmRleCA2M2Q5NjI1Li44NzQ2NjA2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5oCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmgKQEAgLTE3LDcgKzE3LDYgQEAKIAogCiBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyB7Ci0JY2hhciAqbmFtZTsJCQkvKiBzdHJlYW0gaWRlbnRpZmllciAqLwogCWludCBjaGFubmVsOwkJCS8qIHN5bmMgZG1hIGNoYW5uZWwgSUQgKi8KIAl1bnNpZ25lZCBzaG9ydCBhY250OwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CQkvKiBkZXZpY2UgcGh5c2ljYWwgYWRkcmVzcyBmb3IgRE1BICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuYyBiL3NvdW5kL3NvYy9pbXgvbXhjLXNzaS5jCmluZGV4IDM4MDZmZjIuLmNjZGVmZTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvbXhjLXNzaS5jCisrKyBiL3NvdW5kL3NvYy9pbXgvbXhjLXNzaS5jCkBAIC0zOTcsMTQgKzM5Nyw2IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIHN5bmMgKi8KLQlpZiAoIShmbXQgJiBTTkRfU09DX0RBSUZNVF9BU1lOQykpCi0JCXNjciB8PSBTU0lfU0NSX1NZTjsKLQotCS8qIHRkbSAtIG9ubHkgZm9yIHN0ZXJlbyBhdG0gKi8KLQlpZiAoZm10ICYgU05EX1NPQ19EQUlGTVRfVERNKQotCQlzY3IgfD0gU1NJX1NDUl9ORVQ7Ci0KIAlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewogCQlTU0kxX1NUQ1IgPSBzdGNyOwogCQlTU0kxX1NSQ1IgPSBzcmNyOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvS2NvbmZpZyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKaW5kZXggMmRlZTk4My4uNjUzYTM2MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCkBAIC0yMSw3ICsyMSwxOCBAQAogCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKIAlzZWxlY3QgU05EX1NPQ19DWDIwNDQyCiAJaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBBbXN0cmFkIERlbHRhLgorCSAgU2F5IFkgIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0ICBmb3IgU29DIGF1ZGlvIGRldmljZSAgY29ubmVjdGVkIHRvCisJICBhIGhhbmRzZXQgYW5kIGEgc3BlYWtlcnBob25lIGZvdW5kIG9uIEFtc3RyYWQgRTMgKERlbHRhKSB2aWRlb3Bob25lLgorCisJICBOb3RlIHRoYXQgaW4gb3JkZXIgdG8gZ2V0IHRob3NlIGRldmljZXMgZnVsbHkgc3VwcG9ydGVkLCAgeW91IGhhdmUgdG8KKwkgIGJ1aWxkICB0aGUga2VybmVsICB3aXRoICBzdGFuZGFyZCAgc2VyaWFsIHBvcnQgIGRyaXZlciAgaW5jbHVkZWQgIGFuZAorCSAgY29uZmlndXJlZCBmb3IgYXQgbGVhc3QgNCBwb3J0cy4gIFRoZW4sIGZyb20gdXNlcnNwYWNlLCB5b3UgbXVzdCBsb2FkCisJICBhIGxpbmUgZGlzY2lwbGluZSAjMTkgb24gdGhlIG1vZGVtICh0dHlTMykgc2VyaWFsIGxpbmUuICBUaGUgc2ltcGxlc3QKKwkgIHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gaW5zdGFsbCB1dGlsLWxpbnV4LW5nICBhbmQgdXNlIHRoZSBpbmNsdWRlZAorCSAgbGRhdHRhY2ggIHV0aWxpdHkuICBUaGlzICBjYW4gYmUgIHN0YXJ0ZWQgIGF1dG9tYXRpY2FsbHkgIGZyb20gIHVkZXYsCisJICBhIHNpbXBsZSBydWxlIGxpa2UgdGhpcyBvbmUgc2hvdWxkIGRvIHRoZSB0cmljayAoaXQgZG9lcyBmb3IgbWUpOgorCSAgCUFDVElPTj09ImFkZCIsIEtFUk5FTD09ImNvbnRyb2xDMCIsIFwKKwkJCQlSVU4rPSIvdXNyL3NiaW4vbGRhdHRhY2ggMTkgL2Rldi90dHlTMyIKIAogY29uZmlnIFNORF9PTUFQX1NPQ19PU0s1OTEyCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBvbWFwIG9zazU5MTIiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uYwppbmRleCA1NzM1OTQ1Li42YTgyOWVlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKQEAgLTE5NSw4ICsxOTUsMTIgQEAKIAllbHNlCiAJCW9tYXBfZW5hYmxlX2RtYV9pcnEocHJ0ZC0+ZG1hX2NoLCBPTUFQX0RNQV9GUkFNRV9JUlEpOwogCi0Jb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKHBydGQtPmRtYV9jaCwgT01BUF9ETUFfREFUQV9CVVJTVF8xNik7Ci0Jb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShwcnRkLT5kbWFfY2gsIE9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCWlmICghKGNwdV9jbGFzc19pc19vbWFwMSgpKSkgeworCQlvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUocHJ0ZC0+ZG1hX2NoLAorCQkJCQkJT01BUF9ETUFfREFUQV9CVVJTVF8xNik7CisJCW9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUocHJ0ZC0+ZG1hX2NoLAorCQkJCQkJT01BUF9ETUFfREFUQV9CVVJTVF8xNik7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM2V2bS5jIGIvc291bmQvc29jL29tYXAvb21hcDNldm0uYwppbmRleCA5MTE0YzI2Li4xM2FhMzgwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM2V2bS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzZXZtLmMKQEAgLTE0NCw0ICsxNDQsNCBAQAogCiBNT0RVTEVfQVVUSE9SKCJBbnVqIEFnZ2Fyd2FsIDxhbnVqLmFnZ2Fyd2FsQHRpLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgT01BUDMgRVZNIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMdjIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jIGIvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMKaW5kZXggYWQyMTlhYS4uMGNkMDZmNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogICogIHxQfCA8LS0tIFRXTDQwMzAgPC0tLS0tLS0tLSBMaW5lIEluIGFuZCBNSUNzCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBvbWFwM3BhbmRvcmFfb3V0X2RhcG1fd2lkZ2V0c1tdID0gewotCVNORF9TT0NfREFQTV9EQUMoIlBDTSBEQUMiLCAiUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIlBDTSBEQUMiLCAiSGlGaSBQbGF5YmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCksCiAJU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgQW1wbGlmaWVyIiwgU05EX1NPQ19OT1BNLAogCQkJICAgMCwgMCwgTlVMTCwgMCwgb21hcDNwYW5kb3JhX2hwX2V2ZW50LAogCQkJICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLApAQCAtMTgxLDYgKzE4MSw3IEBACiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVFIiKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSEZMIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJWSUJSQSIpOwogCiAJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgb21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHMsCiAJCQkJQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfb3V0X2RhcG1fd2lkZ2V0cykpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9LY29uZmlnIGIvc291bmQvc29jL3B4YS9LY29uZmlnCmluZGV4IDYzNzViNGUuLmRjYjMxODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvcHhhL0tjb25maWcKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiBjb25maWcgU05EX1BYQTJYWF9TT0NfSU1PVEUyCiAgICAgICAgdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBJTW90ZSAyIgotICAgICAgIGRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9JTlRFTE1PVEUyCisgICAgICAgZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX0lOVEVMTU9URTIgJiYgSTJDCiAgICAgICAgc2VsZWN0IFNORF9QWEEyWFhfU09DX0kyUwogICAgICAgIHNlbGVjdCBTTkRfU09DX1dNODk0MAogICAgICAgIGhlbHAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCmluZGV4IDVjYmJkYzguLjFmMzVjNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYwpAQCAtNzUsMTEgKzc1LDE5IEBACiB7CiAJc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJZG1hX2FkZHJfdCBwb3MgPSBwcnRkLT5kbWFfcG9zOworCXVuc2lnbmVkIGludCBsaW1pdDsKIAlpbnQgcmV0OwogCiAJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAotCXdoaWxlIChwcnRkLT5kbWFfbG9hZGVkIDwgcHJ0ZC0+ZG1hX2xpbWl0KSB7CisJaWYgKHMzY19kbWFfaGFzX2NpcmN1bGFyKCkpIHsKKwkJbGltaXQgPSAocHJ0ZC0+ZG1hX2VuZCAtIHBydGQtPmRtYV9zdGFydCkgLyBwcnRkLT5kbWFfcGVyaW9kOworCX0gZWxzZQorCQlsaW1pdCA9IHBydGQtPmRtYV9saW1pdDsKKworCXByX2RlYnVnKCIlczogbG9hZGVkICVkLCBsaW1pdCAlZFxuIiwgX19mdW5jX18sIHBydGQtPmRtYV9sb2FkZWQsIGxpbWl0KTsKKworCXdoaWxlIChwcnRkLT5kbWFfbG9hZGVkIDwgbGltaXQpIHsKIAkJdW5zaWduZWQgbG9uZyBsZW4gPSBwcnRkLT5kbWFfcGVyaW9kOwogCiAJCXByX2RlYnVnKCJkbWFfbG9hZGVkOiAlZFxuIiwgcHJ0ZC0+ZG1hX2xvYWRlZCk7CkBAIC0xMjMsNyArMTMxLDcgQEAKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCiAJc3Bpbl9sb2NrKCZwcnRkLT5sb2NrKTsKLQlpZiAocHJ0ZC0+c3RhdGUgJiBTVF9SVU5OSU5HKSB7CisJaWYgKHBydGQtPnN0YXRlICYgU1RfUlVOTklORyAmJiAhczNjX2RtYV9oYXNfY2lyY3VsYXIoKSkgewogCQlwcnRkLT5kbWFfbG9hZGVkLS07CiAJCXMzYzI0eHhfcGNtX2VucXVldWUoc3Vic3RyZWFtKTsKIAl9CkBAIC0xNjQsNiArMTcyLDExIEBACiAJCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgZG1hIGNoYW5uZWxcbiIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQorCisJCS8qIHVzZSB0aGUgY2lyY3VsYXIgYnVmZmVyaW5nIGlmIHdlIGhhdmUgaXQgYXZhaWxhYmxlLiAqLworCQlpZiAoczNjX2RtYV9oYXNfY2lyY3VsYXIoKSkKKwkJCXMzYzI0MTBfZG1hX3NldGZsYWdzKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKKwkJCQkJICAgICBTM0MyNDEwX0RNQUZfQ0lSQ1VMQVIpOwogCX0KIAogCXMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYwppbmRleCAzYzA2YzQwLi4xMDVhNzdlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKQEAgLTIyMCw2ICsyMjAsOCBAQAogCQlnb3RvIGVycjsKIAl9CiAKKwljbGtfZW5hYmxlKGkycy0+aWlzX2NjbGspOworCiAJcmV0ID0gczNjX2kyc3YyX3Byb2JlKHBkZXYsIGRhaSwgaTJzLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9jbGs7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IDdmZjA0YWQuLjBhMWIyZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC04MzQsNiArODM0LDkgQEAKICNkZWZpbmUgc29jX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgbnVsbF9kYWlfb3BzID0geworfTsKKwogc3RhdGljIHZvaWQgc25kX3NvY19pbnN0YW50aWF0ZV9jYXJkKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGNvbnRhaW5lcl9vZihjYXJkLT5kZXYsCkBAIC04NzcsNiArODgwLDExIEBACiAJCQlhYzk3ID0gMTsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKKwkJaWYgKCFjYXJkLT5kYWlfbGlua1tpXS5jb2RlY19kYWktPm9wcykKKwkJCWNhcmQtPmRhaV9saW5rW2ldLmNvZGVjX2RhaS0+b3BzID0gJm51bGxfZGFpX29wczsKKwl9CisKIAkvKiBJZiB3ZSBoYXZlIEFDOTcgaW4gdGhlIHN5c3RlbSB0aGVuIGRvbid0IHdhaXQgZm9yIHRoZQogCSAqIGNvZGVjLiAgVGhpcyB3aWxsIG5lZWQgcmV2aXNpdGluZyBpZiB3ZSBoYXZlIHRvIGhhbmRsZQogCSAqIHN5c3RlbXMgd2l0aCBtaXhlZCBBQzk3IGFuZCBub24tQUM5NyBwYXJ0cy4gIE9ubHkgY2hlY2sgZm9yCkBAIC0yMzI5LDkgKzIzMzcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBudWxsX2RhaV9vcHMgPSB7Ci19OwotCiAvKioKICAqIHNuZF9zb2NfcmVnaXN0ZXJfZGFpIC0gUmVnaXN0ZXIgYSBEQUkgd2l0aCB0aGUgQVNvQyBjb3JlCiAgKgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCBmNzk3MTFiLi5kODlmNmRjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtNTI0LDcgKzUyNCw3IEBACiAKIAkJLyogY29ubmVjdGVkIGphY2sgb3Igc3BrID8gKi8KIAkJaWYgKHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX2hwIHx8IHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX3NwayB8fAotCQkJd2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbGluZSkKKwkJICAgICh3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9saW5lICYmICFsaXN0X2VtcHR5KCZ3aWRnZXQtPnNvdXJjZXMpKSkKIAkJCXJldHVybiAxOwogCX0KIApAQCAtNTczLDcgKzU3Myw4IEBACiAJCQlyZXR1cm4gMTsKIAogCQkvKiBjb25uZWN0ZWQgamFjayA/ICovCi0JCWlmICh3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9taWMgfHwgd2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbGluZSkKKwkJaWYgKHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX21pYyB8fAorCQkgICAgKHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUgJiYgIWxpc3RfZW1wdHkoJndpZGdldC0+c2lua3MpKSkKIAkJCXJldHVybiAxOwogCX0KIApAQCAtMjA3MSw5ICsyMDcyLDkgQEAKIAkJCX0KIAkJfQogCX0KLQltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CiAKIAlkYXBtX3Bvd2VyX3dpZGdldHMoY29kZWMsIGV2ZW50KTsKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CiAJZHVtcF9kYXBtKGNvZGVjLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYyBiL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCmluZGV4IDEyMWFmMDYuLjg2YjJjM2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCkBAIC02MiwxMCArNjIsMTQgQEAKIGFjdGl2YXRlX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LAogCSAgICAgICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWIpCiB7CisJc3Bpbl9sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKwogCWlmIChzdWItPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQlkZXYtPnN1Yl9wbGF5YmFja1tzdWItPm51bWJlcl0gPSBzdWI7CiAJZWxzZQogCQlkZXYtPnN1Yl9jYXB0dXJlW3N1Yi0+bnVtYmVyXSA9IHN1YjsKKworCXNwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTI2OSwxNiArMjczLDIyIEBACiB7CiAJaW50IGluZGV4ID0gc3ViLT5udW1iZXI7CiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3ViKTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBwdHI7CisKKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOwogCiAJaWYgKGRldi0+aW5wdXRfcGFuaWMgfHwgZGV2LT5vdXRwdXRfcGFuaWMpCi0JCXJldHVybiBTTkRSVl9QQ01fUE9TX1hSVU47CisJCXB0ciA9IFNORFJWX1BDTV9QT1NfWFJVTjsKIAogCWlmIChzdWItPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwKKwkJcHRyID0gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwKIAkJCQkJZGV2LT5hdWRpb19vdXRfYnVmX3Bvc1tpbmRleF0pOwogCWVsc2UKLQkJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWItPnJ1bnRpbWUsCisJCXB0ciA9IGJ5dGVzX3RvX2ZyYW1lcyhzdWItPnJ1bnRpbWUsCiAJCQkJCWRldi0+YXVkaW9faW5fYnVmX3Bvc1tpbmRleF0pOworCisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCXJldHVybiBwdHI7CiB9CiAKIC8qIG9wZXJhdG9ycyBmb3IgYm90aCBwbGF5YmFjayBhbmQgY2FwdHVyZSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2RldmljZS5jIGIvc291bmQvdXNiL2NhaWFxL2RldmljZS5jCmluZGV4IDgzZTZjMTMuLmEzZjAyZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYworKysgYi9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJpbnB1dC5oIgogCiBNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJjYWlhcSBVU0IgYXVkaW8sIHZlcnNpb24gMS4zLjE5Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImNhaWFxIFVTQiBhdWRpbywgdmVyc2lvbiAxLjMuMjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e05hdGl2ZSBJbnN0cnVtZW50cywgUmlnS29udHJvbDJ9LCIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgUmlnS29udHJvbDN9LCIKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5oIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKaW5kZXggOGU3Zjc4OS4uZTlhM2E5ZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmgKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKQEAgLTIxMCw3ICsyMTAsNyBAQAogLyoKICAqLwogCi0jZGVmaW5lIGNvbWJpbmVfd29yZChzKSAgICAoKCpzKSB8ICgodW5zaWduZWQgaW50KShzKVsxXSA8PCA4KSkKKyNkZWZpbmUgY29tYmluZV93b3JkKHMpICAgICgoKihzKSkgfCAoKHVuc2lnbmVkIGludCkocylbMV0gPDwgOCkpCiAjZGVmaW5lIGNvbWJpbmVfdHJpcGxlKHMpICAoY29tYmluZV93b3JkKHMpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzJdIDw8IDE2KSkKICNkZWZpbmUgY29tYmluZV9xdWFkKHMpICAgIChjb21iaW5lX3RyaXBsZShzKSB8ICgodW5zaWduZWQgaW50KShzKVszXSA8PCAyNCkpCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlci5jIGIvc291bmQvdXNiL3VzYm1peGVyLmMKaW5kZXggYWI1YTNhYy4uYzk5ODIyMCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyLmMKQEAgLTg5OCw2ICs4OTgsMTEgQEAKICAqIGJ1aWxkIGEgZmVhdHVyZSBjb250cm9sCiAgKi8KIAorc3RhdGljIHNpemVfdCBhcHBlbmRfY3RsX25hbWUoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwgY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiBzdHJsY2F0KGtjdGwtPmlkLm5hbWUsIHN0ciwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKK30KKwogc3RhdGljIHZvaWQgYnVpbGRfZmVhdHVyZV9jdGwoc3RydWN0IG1peGVyX2J1aWxkICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGVzYywKIAkJCSAgICAgIHVuc2lnbmVkIGludCBjdGxfbWFzaywgaW50IGNvbnRyb2wsCiAJCQkgICAgICBzdHJ1Y3QgdXNiX2F1ZGlvX3Rlcm0gKml0ZXJtLCBpbnQgdW5pdGlkKQpAQCAtOTc4LDEzICs5ODMsMTMgQEAKIAkJICovCiAJCWlmICghIG1hcHBlZF9uYW1lICYmICEgKHN0YXRlLT5vdGVybS50eXBlID4+IDE2KSkgewogCQkJaWYgKChzdGF0ZS0+b3Rlcm0udHlwZSAmIDB4ZmYwMCkgPT0gMHgwMTAwKSB7Ci0JCQkJbGVuID0gc3RybGNhdChrY3RsLT5pZC5uYW1lLCAiIENhcHR1cmUiLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQkJCWxlbiA9IGFwcGVuZF9jdGxfbmFtZShrY3RsLCAiIENhcHR1cmUiKTsKIAkJCX0gZWxzZSB7Ci0JCQkJbGVuID0gc3RybGNhdChrY3RsLT5pZC5uYW1lICsgbGVuLCAiIFBsYXliYWNrIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJCQlsZW4gPSBhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiBQbGF5YmFjayIpOwogCQkJfQogCQl9Ci0JCXN0cmxjYXQoa2N0bC0+aWQubmFtZSArIGxlbiwgY29udHJvbCA9PSBVU0JfRkVBVFVSRV9NVVRFID8gIiBTd2l0Y2giIDogIiBWb2x1bWUiLAotCQkJc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJYXBwZW5kX2N0bF9uYW1lKGtjdGwsIGNvbnRyb2wgPT0gVVNCX0ZFQVRVUkVfTVVURSA/CisJCQkJIiBTd2l0Y2giIDogIiBWb2x1bWUiKTsKIAkJaWYgKGNvbnRyb2wgPT0gVVNCX0ZFQVRVUkVfVk9MVU1FKSB7CiAJCQlrY3RsLT50bHYuYyA9IG1peGVyX3ZvbF90bHY7CiAJCQlrY3RsLT52ZFswXS5hY2Nlc3MgfD0gCkBAIC0xMDY2LDYgKzEwNzEsMTUgQEAKIAljaGFubmVscyA9IChmdHJbMF0gLSA3KSAvIGNzaXplIC0gMTsKIAogCW1hc3Rlcl9iaXRzID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ciArIDYsIGNzaXplKTsKKwkvKiBtYXN0ZXIgY29uZmlndXJhdGlvbiBxdWlya3MgKi8KKwlzd2l0Y2ggKHN0YXRlLT5jaGlwLT51c2JfaWQpIHsKKwljYXNlIFVTQl9JRCgweDA4YmIsIDB4MjcwMik6CisJCXNuZF9wcmludGsoS0VSTl9JTkZPCisJCQkgICAidXNibWl4ZXI6IG1hc3RlciB2b2x1bWUgcXVpcmsgZm9yIFBDTTI3MDIgY2hpcFxuIik7CisJCS8qIGRpc2FibGUgbm9uLWZ1bmN0aW9uYWwgdm9sdW1lIGNvbnRyb2wgKi8KKwkJbWFzdGVyX2JpdHMgJj0gfigxIDw8IChVU0JfRkVBVFVSRV9WT0xVTUUgLSAxKSk7CisJCWJyZWFrOworCX0KIAlpZiAoY2hhbm5lbHMgPiAwKQogCQlmaXJzdF9jaF9iaXRzID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ciArIDYgKyBjc2l6ZSwgY3NpemUpOwogCWVsc2UKQEAgLTExNDMsNyArMTE1Nyw3IEBACiAJCWxlbiA9IGdldF90ZXJtX25hbWUoc3RhdGUsIGl0ZXJtLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSksIDApOwogCWlmICghIGxlbikKIAkJbGVuID0gc3ByaW50ZihrY3RsLT5pZC5uYW1lLCAiTWl4ZXIgU291cmNlICVkIiwgaW5fY2ggKyAxKTsKLQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUgKyBsZW4sICIgVm9sdW1lIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwlhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiBWb2x1bWUiKTsKIAogCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiWyVkXSBNVSBbJXNdIGNoID0gJWQsIHZhbCA9ICVkLyVkXG4iLAogCQkgICAgY3ZhbC0+aWQsIGtjdGwtPmlkLm5hbWUsIGN2YWwtPmNoYW5uZWxzLCBjdmFsLT5taW4sIGN2YWwtPm1heCk7CkBAIC0xNDAwLDggKzE0MTQsOCBAQAogCQkJaWYgKCEgbGVuKQogCQkJCXN0cmxjcHkoa2N0bC0+aWQubmFtZSwgbmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAkJfQotCQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUsICIgIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKLQkJc3RybGNhdChrY3RsLT5pZC5uYW1lLCB2YWxpbmZvLT5zdWZmaXgsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCWFwcGVuZF9jdGxfbmFtZShrY3RsLCAiICIpOworCQlhcHBlbmRfY3RsX25hbWUoa2N0bCwgdmFsaW5mby0+c3VmZml4KTsKIAogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIlslZF0gUFUgWyVzXSBjaCA9ICVkLCB2YWwgPSAlZC8lZFxuIiwKIAkJCSAgICBjdmFsLT5pZCwga2N0bC0+aWQubmFtZSwgY3ZhbC0+Y2hhbm5lbHMsIGN2YWwtPm1pbiwgY3ZhbC0+bWF4KTsKQEAgLTE2MTAsOSArMTYyNCw5IEBACiAJCQlzdHJsY3B5KGtjdGwtPmlkLm5hbWUsICJVU0IiLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwogCiAJCWlmICgoc3RhdGUtPm90ZXJtLnR5cGUgJiAweGZmMDApID09IDB4MDEwMCkKLQkJCXN0cmxjYXQoa2N0bC0+aWQubmFtZSwgIiBDYXB0dXJlIFNvdXJjZSIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCQlhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiBDYXB0dXJlIFNvdXJjZSIpOwogCQllbHNlCi0JCQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUsICIgUGxheWJhY2sgU291cmNlIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJCWFwcGVuZF9jdGxfbmFtZShrY3RsLCAiIFBsYXliYWNrIFNvdXJjZSIpOwogCX0KIAogCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiWyVkXSBTVSBbJXNdIGl0ZW1zID0gJWRcbiIsCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKaW5kZXggZmQ0NDk0Ni4uOTlmMzM3NiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiJWlcbiIsIGF0b21pY19yZWFkKCZ1czEyMmwtPm1tYXBfY291bnQpKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXNiX3N0cmVhbV9od2RlcF92bV9vcHMgPSB7CiAJLm9wZW4gPSB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX29wZW4sCiAJLmZhdWx0ID0gdXNiX3N0cmVhbV9od2RlcF92bV9mYXVsdCwKIAkuY2xvc2UgPSB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX2Nsb3NlLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYyBiL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKaW5kZXggZjNkOGY3MS4uNTJlMDRiMiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCkBAIC01Myw3ICs1Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXM0MjhjdGxzX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXM0MjhjdGxzX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBzbmRfdXM0MjhjdGxzX3ZtX2ZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKaW5kZXggMTE3OTQ2Zi4uNGIyMzA0YyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5jCkBAIC02OTcsNyArNjk3LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF91c1gyWV9od2RlcF9wY21fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfdXNYMllfaHdkZXBfcGNtX3ZtX29wcyA9IHsKIAkub3BlbiA9IHNuZF91c1gyWV9od2RlcF9wY21fdm1fb3BlbiwKIAkuY2xvc2UgPSBzbmRfdXNYMllfaHdkZXBfcGNtX3ZtX2Nsb3NlLAogCS5mYXVsdCA9IHNuZF91c1gyWV9od2RlcF9wY21fdm1fZmF1bHQsCmRpZmYgLS1naXQgYS90b29scy9wZXJmLy5naXRpZ25vcmUgYi90b29scy9wZXJmLy5naXRpZ25vcmUKaW5kZXggZDY5YTc1OS4uMDg1NGYxMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCisrKyBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQpAQCAtMTAsNiArMTAsNyBAQAogcGVyZi10b3AKIHBlcmYqLjEKIHBlcmYqLnhtbAorcGVyZiouaHRtbAogY29tbW9uLWNtZHMuaAogdGFncwogVEFHUwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQKaW5kZXggMWMyZWQzMC4uYTc5MTAwOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0CkBAIC0zMSw2ICszMSw5IEBACiAtdzo6CiAtLXdpZHRoPTo6CiAgICAgICAgIFNlbGVjdCB0aGUgd2lkdGggb2YgdGhlIFNWRyBmaWxlIChkZWZhdWx0OiAxMDAwKQorLXA6OgorLS1wb3dlci1vbmx5OjoKKyAgICAgICAgT25seSBvdXRwdXQgdGhlIENQVSBwb3dlciBzZWN0aW9uIG9mIHRoZSBkaWFncmFtCiAKIAogU0VFIEFMU08KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IGI1ZjE5NTMuLjdlMTkwZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtMTU3LDExICsxNTcsMTggQEAKIHVuYW1lX1AgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXAgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQogdW5hbWVfViA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtdiAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCiAKLSMgSWYgd2UncmUgb24gYSA2NC1iaXQga2VybmVsLCB1c2UgLW02NAotaWZuZGVmIE5PXzY0QklUCi0JaWZuZXEgKCQocGF0c3Vic3QgJTY0LCUsJCh1bmFtZV9NKSksJCh1bmFtZV9NKSkKLQkgIE02NCA6PSAtbTY0Ci0JZW5kaWYKKyMKKyMgQWRkIC1tMzIgZm9yIGNyb3NzLWJ1aWxkczoKKyMKK2lmZGVmIE5PXzY0QklUCisgIE1CSVRTIDo9IC1tMzIKK2Vsc2UKKyAgIworICAjIElmIHdlJ3JlIG9uIGEgNjQtYml0IGtlcm5lbCwgdXNlIC1tNjQ6CisgICMKKyAgaWZuZXEgKCQocGF0c3Vic3QgJTY0LCUsJCh1bmFtZV9NKSksJCh1bmFtZV9NKSkKKyAgICBNQklUUyA6PSAtbTY0CisgIGVuZGlmCiBlbmRpZgogCiAjIENGTEFHUyBhbmQgTERGTEFHUyBhcmUgZm9yIHRoZSB1c2VycyB0byBvdmVycmlkZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCkBAIC0xNzAsOCArMTc3LDcgQEAKICMgSW5jbHVkZSBzYW5lciB3YXJuaW5ncyBoZXJlLCB3aGljaCBjYW4gY2F0Y2ggYnVnczoKICMKIAotRVhUUkFfV0FSTklOR1MgOj0gLVdjYXN0LWFsaWduCi1FWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdAorRVhUUkFfV0FSTklOR1MgOj0gLVdmb3JtYXQKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XZm9ybWF0LXNlY3VyaXR5CiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdC15MmsKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc2hhZG93CkBAIC0xOTQsNyArMjAwLDcgQEAKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3RyaWN0LXByb3RvdHlwZXMKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50CiAKLUNGTEFHUyA9ICQoTTY0KSAtZ2dkYjMgLVdhbGwgLVdleHRyYSAtc3RkPWdudTk5IC1XZXJyb3IgLU82IC1mc3RhY2stcHJvdGVjdG9yLWFsbCAtRF9GT1JUSUZZX1NPVVJDRT0yICQoRVhUUkFfV0FSTklOR1MpCitDRkxBR1MgPSAkKE1CSVRTKSAtZ2dkYjMgLVdhbGwgLVdleHRyYSAtc3RkPWdudTk5IC1XZXJyb3IgLU82IC1mc3RhY2stcHJvdGVjdG9yLWFsbCAtRF9GT1JUSUZZX1NPVVJDRT0yICQoRVhUUkFfV0FSTklOR1MpCiBMREZMQUdTID0gLWxwdGhyZWFkIC1scnQgLWxlbGYgLWxtCiBBTExfQ0ZMQUdTID0gJChDRkxBR1MpCiBBTExfTERGTEFHUyA9ICQoTERGTEFHUykKQEAgLTQxNSw4ICs0MjEsMTIgQEAKIAlQVEhSRUFEX0xJQlMgPQogZW5kaWYKIAotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmVsZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRWxmICogZWxmID0gZWxmX2JlZ2luKDAsIEVMRl9DX1JFQURfTU1BUCwgMCk7IHJldHVybiAobG9uZyllbGY7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQotCW1zZyA6PSAkKGVycm9yIE5vIGxpYmVsZi5oL2xpYmVsZiBmb3VuZCwgcGxlYXNlIGluc3RhbGwgbGliZWxmLWRldi9lbGZ1dGlscy1saWJlbGYtZGV2ZWwpOworaWZlcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8bGliZWxmLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBFbGYgKiBlbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRCwgMCk7IHJldHVybiAobG9uZyllbGY7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQorCWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxsaWJlbGYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IEVsZiAqIGVsZiA9IGVsZl9iZWdpbigwLCBFTEZfQ19SRUFEX01NQVAsIDApOyByZXR1cm4gKGxvbmcpZWxmOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKKwkJQkFTSUNfQ0ZMQUdTICs9IC1ETElCRUxGX05PX01NQVAKKwllbmRpZgorZWxzZQorCW1zZyA6PSAkKGVycm9yIE5vIGxpYmVsZi5oL2xpYmVsZiBmb3VuZCwgcGxlYXNlIGluc3RhbGwgbGliZWxmLWRldi9lbGZ1dGlscy1saWJlbGYtZGV2ZWwgYW5kIGdsaWJjLWRldltlbF0pOwogZW5kaWYKIAogaWZkZWYgTk9fREVNQU5HTEUKQEAgLTcyOCw3ICs3MzgsNyBAQAogY29tbW9uLWNtZHMuaDogdXRpbC9nZW5lcmF0ZS1jbWRsaXN0LnNoIGNvbW1hbmQtbGlzdC50eHQKIAogY29tbW9uLWNtZHMuaDogJCh3aWxkY2FyZCBEb2N1bWVudGF0aW9uL3BlcmYtKi50eHQpCi0JJChRVUlFVF9HRU4pdXRpbC9nZW5lcmF0ZS1jbWRsaXN0LnNoID4gJEArICYmIG12ICRAKyAkQAorCSQoUVVJRVRfR0VOKS4gdXRpbC9nZW5lcmF0ZS1jbWRsaXN0LnNoID4gJEArICYmIG12ICRAKyAkQAogCiAkKHBhdHN1YnN0ICUuc2gsJSwkKFNDUklQVF9TSCkpIDogJSA6ICUuc2gKIAkkKFFVSUVUX0dFTikkKFJNKSAkQCAkQCsgJiYgXApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IGE1YTA1MGEuLmE0YmU0NTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTQxLDYgKzQxLDcgQEAKIHN0YXRpYyBpbnQJCQlzeXN0ZW1fd2lkZQkJCT0gMDsKIHN0YXRpYyBpbnQJCQlwcm9maWxlX2NwdQkJCT0gLTE7CiBzdGF0aWMgcGlkX3QJCQl0YXJnZXRfcGlkCQkJPSAtMTsKK3N0YXRpYyBwaWRfdAkJCWNoaWxkX3BpZAkJCT0gLTE7CiBzdGF0aWMgaW50CQkJaW5oZXJpdAkJCQk9IDE7CiBzdGF0aWMgaW50CQkJZm9yY2UJCQkJPSAwOwogc3RhdGljIGludAkJCWFwcGVuZF9maWxlCQkJPSAwOwpAQCAtMTg0LDYgKzE4NSw5IEBACiAKIHN0YXRpYyB2b2lkIHNpZ19hdGV4aXQodm9pZCkKIHsKKwlpZiAoY2hpbGRfcGlkICE9IC0xKQorCQlraWxsKGNoaWxkX3BpZCwgU0lHVEVSTSk7CisKIAlpZiAoc2lnbnIgPT0gLTEpCiAJCXJldHVybjsKIApAQCAtNDIyLDcgKzQyNiw3IEBACiAJaWYgKGZkW25yX2NwdV1bY291bnRlcl0gPCAwKSB7CiAJCWludCBlcnIgPSBlcnJubzsKIAotCQlpZiAoZXJyID09IEVQRVJNKQorCQlpZiAoZXJyID09IEVQRVJNIHx8IGVyciA9PSBFQUNDRVMpCiAJCQlkaWUoIlBlcm1pc3Npb24gZXJyb3IgLSBhcmUgeW91IHJvb3Q/XG4iKTsKIAkJZWxzZSBpZiAoZXJyID09ICBFTk9ERVYgJiYgcHJvZmlsZV9jcHUgIT0gLTEpCiAJCQlkaWUoIk5vIHN1Y2ggZGV2aWNlIC0gZGlkIHlvdSBzcGVjaWZ5IGFuIG91dC1vZi1yYW5nZSBwcm9maWxlIENQVT9cbiIpOwpAQCAtNjEwLDYgKzYxNCw4IEBACiAJCQkJZXhpdCgtMSk7CiAJCQl9CiAJCX0KKworCQljaGlsZF9waWQgPSBwaWQ7CiAJfQogCiAJaWYgKHJlYWx0aW1lX3ByaW8pIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKaW5kZXggZWE5YzE1Yy4uY2UyZDViZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKQEAgLTEyODcsNyArMTI4Nyw3IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoc29ydF9saXN0KTsKIAotc3RhdGljIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNoYXIgKnRvaywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3N0YXRpYyBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjb25zdCBjaGFyICp0b2ssIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJaW50IGk7CiAKQEAgLTE5MTcsNyArMTkxNyw3IEBACiAKIAlmcmVlKHN0cik7CiAKLQlzb3J0X2RpbWVuc2lvbl9fYWRkKChjaGFyICopInBpZCIsICZjbXBfcGlkKTsKKwlzb3J0X2RpbWVuc2lvbl9fYWRkKCJwaWQiLCAmY21wX3BpZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpyZWNvcmRfYXJnc1tdID0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggMTZhZjJkOC4uM2RiMzFlNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC02OSw3ICs2OSw4IEBACiBzdGF0aWMgaW50CQkJcnVuX2NvdW50CQkJPSAgMTsKIHN0YXRpYyBpbnQJCQlpbmhlcml0CQkJCT0gIDE7CiBzdGF0aWMgaW50CQkJc2NhbGUJCQkJPSAgMTsKLXN0YXRpYyBpbnQJCQl0YXJnZXRfcGlkCQkJPSAtMTsKK3N0YXRpYyBwaWRfdAkJCXRhcmdldF9waWQJCQk9IC0xOworc3RhdGljIHBpZF90CQkJY2hpbGRfcGlkCQkJPSAtMTsKIHN0YXRpYyBpbnQJCQludWxsX3J1bgkJCT0gIDA7CiAKIHN0YXRpYyBpbnQJCQlmZFtNQVhfTlJfQ1BVU11bTUFYX0NPVU5URVJTXTsKQEAgLTI4NSw2ICsyODYsOCBAQAogCQlleGl0KC0xKTsKIAl9CiAKKwljaGlsZF9waWQgPSBwaWQ7CisKIAkvKgogCSAqIFdhaXQgZm9yIHRoZSBjaGlsZCB0byBiZSByZWFkeSB0byBleGVjLgogCSAqLwpAQCAtMzM4LDE0ICszNDEsMjQgQEAKIAogc3RhdGljIHZvaWQgYWJzX3ByaW50b3V0KGludCBjb3VudGVyLCBkb3VibGUgYXZnKQogeworCWRvdWJsZSB0b3RhbCwgcmF0aW8gPSAwLjA7CisKIAlmcHJpbnRmKHN0ZGVyciwgIiAlMTQuMGYgICUtMjRzIiwgYXZnLCBldmVudF9uYW1lKGNvdW50ZXIpKTsKIAogCWlmIChNQVRDSF9FVkVOVChIQVJEV0FSRSwgSFdfSU5TVFJVQ1RJT05TLCBjb3VudGVyKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBJUEMgICIsCi0JCQkJYXZnIC8gYXZnX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0cykpOworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9jeWNsZXNfc3RhdHMpOworCisJCWlmICh0b3RhbCkKKwkJCXJhdGlvID0gYXZnIC8gdG90YWw7CisKKwkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgSVBDICAiLCByYXRpbyk7CiAJfSBlbHNlIHsKLQkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgTS9zZWMiLAotCQkJCTEwMDAuMCAqIGF2ZyAvIGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0cykpOworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0cyk7CisKKwkJaWYgKHRvdGFsKQorCQkJcmF0aW8gPSAxMDAwLjAgKiBhdmcgLyB0b3RhbDsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBNL3NlYyIsIHJhdGlvKTsKIAl9CiB9CiAKQEAgLTQyMyw2ICs0MzYsOSBAQAogCiBzdGF0aWMgdm9pZCBzaWdfYXRleGl0KHZvaWQpCiB7CisJaWYgKGNoaWxkX3BpZCAhPSAtMSkKKwkJa2lsbChjaGlsZF9waWQsIFNJR1RFUk0pOworCiAJaWYgKHNpZ25yID09IC0xKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwppbmRleCA0NDA1NjgxLi5lOGE1MTBkOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwpAQCAtNDYsNiArNDYsOCBAQAogCiBzdGF0aWMgdTY0CQlmaXJzdF90aW1lLCBsYXN0X3RpbWU7CiAKK3N0YXRpYyBpbnQJCXBvd2VyX29ubHk7CisKIAogc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlcgkqaGVhZGVyOwogCkBAIC01NDcsNyArNTQ5LDcgQEAKIAl1NjQgY3B1OwogCXN0cnVjdCBwb3dlcl9ldmVudCAqcHdyOwogCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBudW1jcHVzOyBjcHUrKykgeworCWZvciAoY3B1ID0gMDsgY3B1IDw9IG51bWNwdXM7IGNwdSsrKSB7CiAJCXB3ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBvd2VyX2V2ZW50KSk7CiAJCWlmICghcHdyKQogCQkJcmV0dXJuOwpAQCAtNzYzLDE5ICs3NjUsNDAgQEAKIAkJCQkJaWYgKGMtPlkgJiYgYy0+c3RhcnRfdGltZSA8PSB3ZS0+dGltZSAmJiBjLT5lbmRfdGltZSA+PSB3ZS0+dGltZSkgewogCQkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIpIHsKIAkJCQkJCQlmcm9tID0gYy0+WTsKLQkJCQkJCQl0YXNrX2Zyb20gPSBjLT5jb21tOworCQkJCQkJCXRhc2tfZnJvbSA9IHN0cmR1cChjLT5jb21tKTsKIAkJCQkJCX0KIAkJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlKSB7CiAJCQkJCQkJdG8gPSBjLT5ZOwotCQkJCQkJCXRhc2tfdG8gPSBjLT5jb21tOworCQkJCQkJCXRhc2tfdG8gPSBzdHJkdXAoYy0+Y29tbSk7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJYyA9IGMtPm5leHQ7CiAJCQkJfQorCQkJCWMgPSBwLT5hbGw7CisJCQkJd2hpbGUgKGMpIHsKKwkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIgJiYgIWZyb20pIHsKKwkJCQkJCWZyb20gPSBjLT5ZOworCQkJCQkJdGFza19mcm9tID0gc3RyZHVwKGMtPmNvbW0pOworCQkJCQl9CisJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlICYmICF0bykgeworCQkJCQkJdG8gPSBjLT5ZOworCQkJCQkJdGFza190byA9IHN0cmR1cChjLT5jb21tKTsKKwkJCQkJfQorCQkJCQljID0gYy0+bmV4dDsKKwkJCQl9CiAJCQl9CiAJCQlwID0gcC0+bmV4dDsKIAkJfQogCisJCWlmICghdGFza19mcm9tKSB7CisJCQl0YXNrX2Zyb20gPSBtYWxsb2MoNDApOworCQkJc3ByaW50Zih0YXNrX2Zyb20sICJbJWldIiwgd2UtPndha2VyKTsKKwkJfQorCQlpZiAoIXRhc2tfdG8pIHsKKwkJCXRhc2tfdG8gPSBtYWxsb2MoNDApOworCQkJc3ByaW50Zih0YXNrX3RvLCAiWyVpXSIsIHdlLT53YWtlZSk7CisJCX0KKwogCQlpZiAod2UtPndha2VyID09IC0xKQogCQkJc3ZnX2ludGVycnVwdCh3ZS0+dGltZSwgdG8pOwogCQllbHNlIGlmIChmcm9tICYmIHRvICYmIGFicyhmcm9tIC0gdG8pID09IDEpCkBAIC03ODMsNiArODA2LDkgQEAKIAkJZWxzZQogCQkJc3ZnX3BhcnRpYWxfd2FrZWxpbmUod2UtPnRpbWUsIGZyb20sIHRhc2tfZnJvbSwgdG8sIHRhc2tfdG8pOwogCQl3ZSA9IHdlLT5uZXh0OworCisJCWZyZWUodGFza19mcm9tKTsKKwkJZnJlZSh0YXNrX3RvKTsKIAl9CiB9CiAKQEAgLTg3MSw3ICs4OTcsNyBAQAogCQkvKiBubyBleGl0IG1hcmtlciwgdGFzayBrZXB0IHJ1bm5pbmcgdG8gdGhlIGVuZCAqLwogCQlpZiAocC0+ZW5kX3RpbWUgPT0gMCkKIAkJCXAtPmVuZF90aW1lID0gbGFzdF90aW1lOwotCQlpZiAocC0+dG90YWxfdGltZSA+PSB0aHJlc2hvbGQpCisJCWlmIChwLT50b3RhbF90aW1lID49IHRocmVzaG9sZCAmJiAhcG93ZXJfb25seSkKIAkJCXAtPmRpc3BsYXkgPSAxOwogCiAJCWMgPSBwLT5hbGw7CkBAIC04ODIsNyArOTA4LDcgQEAKIAkJCWlmIChjLT5zdGFydF90aW1lID09IDEpCiAJCQkJYy0+c3RhcnRfdGltZSA9IGZpcnN0X3RpbWU7CiAKLQkJCWlmIChjLT50b3RhbF90aW1lID49IHRocmVzaG9sZCkgeworCQkJaWYgKGMtPnRvdGFsX3RpbWUgPj0gdGhyZXNob2xkICYmICFwb3dlcl9vbmx5KSB7CiAJCQkJYy0+ZGlzcGxheSA9IDE7CiAJCQkJY291bnQrKzsKIAkJCX0KQEAgLTExMzQsNiArMTE2MCw4IEBACiAJCSAgICAib3V0cHV0IGZpbGUgbmFtZSIpLAogCU9QVF9JTlRFR0VSKCd3JywgIndpZHRoIiwgJnN2Z19wYWdlX3dpZHRoLAogCQkgICAgInBhZ2Ugd2lkdGgiKSwKKwlPUFRfQk9PTEVBTigncCcsICJwb3dlci1vbmx5IiwgJnBvd2VyX29ubHksCisJCSAgICAib3V0cHV0IHBvd2VyIGRhdGEgb25seSIpLAogCU9QVF9FTkQoKQogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDFjYTg4ODkuLmUyM2JjNzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTY4Niw2ICs2ODYsOCBAQAogCXN3aXRjaCAoYykgewogCQljYXNlICdkJzoKIAkJCXByb21wdF9pbnRlZ2VyKCZkZWxheV9zZWNzLCAiRW50ZXIgZGlzcGxheSBkZWxheSIpOworCQkJaWYgKGRlbGF5X3NlY3MgPCAxKQorCQkJCWRlbGF5X3NlY3MgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2UnOgogCQkJcHJvbXB0X2ludGVnZXIoJnByaW50X2VudHJpZXMsICJFbnRlciBkaXNwbGF5IGVudHJpZXMgKGxpbmVzKSIpOwpAQCAtNzgyLDYgKzc4NCw3IEBACiAJImV4aXRfaWRsZSIsCiAJIm13YWl0X2lkbGUiLAogCSJtd2FpdF9pZGxlX3dpdGhfaGludHMiLAorCSJwb2xsX2lkbGUiLAogCSJwcGM2NF9ydW5sYXRjaF9vZmYiLAogCSJwc2VyaWVzX2RlZGljYXRlZF9pZGxlX3NsZWVwIiwKIAlOVUxMCkBAIC0xMDI0LDcgKzEwMjcsNyBAQAogCWlmIChmZFtpXVtjb3VudGVyXSA8IDApIHsKIAkJaW50IGVyciA9IGVycm5vOwogCi0JCWlmIChlcnIgPT0gRVBFUk0pCisJCWlmIChlcnIgPT0gRVBFUk0gfHwgZXJyID09IEVBQ0NFUykKIAkJCWRpZSgiTm8gcGVybWlzc2lvbiAtIGFyZSB5b3Ugcm9vdD9cbiIpOwogCQkvKgogCQkgKiBJZiBpdCdzIGN5Y2xlcyB0aGVuIGZhbGwgYmFjayB0byBocnRpbWVyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCmluZGV4IGU5ZDI1NmUuLjBjNWU0ZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCkBAIC0yMTksMTAgKzIxOSw2IEBACiBtb3JlOgogCWV2ZW50ID0gKGV2ZW50X3QgKikoYnVmICsgaGVhZCk7CiAKLQlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwotCWlmICghc2l6ZSkKLQkJc2l6ZSA9IDg7Ci0KIAlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdykgewogCQl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwogCQlpbnQgcmVzOwpAQCAtMjM3LDcgKzIzMyw2IEBACiAKIAlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwogCi0KIAlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKSA8IDApIHsKIAogCQkvKgpAQCAtMjkwLDcgKzI4NSw2IEBACiAJCQl1c2FnZV93aXRoX29wdGlvbnMoYW5ub3RhdGVfdXNhZ2UsIG9wdGlvbnMpOwogCX0KIAotCiAJc2V0dXBfcGFnZXIoKTsKIAogCXJldHVybiBfX2NtZF90cmFjZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9kZXNpZ24udHh0IGIvdG9vbHMvcGVyZi9kZXNpZ24udHh0CmluZGV4IGYxOTQ2ZDEuLmZkZDQyYTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvZGVzaWduLnR4dAorKysgYi90b29scy9wZXJmL2Rlc2lnbi50eHQKQEAgLTQ1NSwzICs0NTUsNiBAQAogCiBJZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2VzIGhhdmUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCB5b3UgY2FuIG92ZXJyaWRlIHRoZQogd2VhayBzdHViIGh3X3BlcmZfZXZlbnRfaW5pdCgpIHRvIHJlZ2lzdGVyIGhhcmR3YXJlIGNvdW50ZXJzLgorCitBcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBkLWNhY2hlIGFsaWFzc2luZyBpc3N1ZXMsIHN1Y2ggYXMgU3BhcmMgYW5kIEFSTSwKK3Nob3VsZCBzZWxlY3QgUEVSRl9VU0VfVk1BTExPQyBpbiBvcmRlciB0byBhdm9pZCB0aGVzZSBmb3IgcGVyZiBtbWFwKCkuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvUEVSRi1WRVJTSU9OLUdFTiBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCmluZGV4IGM1NjFkMTUuLjU0NTUyYTAgMTAwNzU1Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAKIEdWRj1QRVJGLVZFUlNJT04tRklMRQotREVGX1ZFUj12MC4wLjEuUEVSRgorREVGX1ZFUj12MC4wLjIuUEVSRgogCiBMRj0nCiAnCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMgYi90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMKaW5kZXggM2Q1NjdmZS4uMGQ4Yzg1ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21vZHVsZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tb2R1bGUuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlICJtb2R1bGUuaCIKIAogI2luY2x1ZGUgPGxpYmVsZi5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgogI2luY2x1ZGUgPGdlbGYuaD4KICNpbmNsdWRlIDxlbGYuaD4KICNpbmNsdWRlIDxkaXJlbnQuaD4KQEAgLTQwOSwzNSArNDEwLDQwIEBACiBzdGF0aWMgaW50IG1vZF9kc29fX2xvYWRfbW9kdWxlX3BhdGhzKHN0cnVjdCBtb2RfZHNvICpzZWxmKQogewogCXN0cnVjdCB1dHNuYW1lIHV0czsKLQlpbnQgY291bnQgPSAwLCBsZW47CisJaW50IGNvdW50ID0gMCwgbGVuLCBlcnIgPSAtMTsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlGSUxFICpmaWxlOwotCWNoYXIgKnBhdGg7CisJY2hhciAqZHBhdGgsICpkaXI7CiAJc2l6ZV90IG47CiAKIAlpZiAodW5hbWUoJnV0cykgPCAwKQotCQlnb3RvIG91dF9mYWlsdXJlOworCQlyZXR1cm4gZXJyOwogCiAJbGVuID0gc3RybGVuKCIvbGliL21vZHVsZXMvIik7CiAJbGVuICs9IHN0cmxlbih1dHMucmVsZWFzZSk7CiAJbGVuICs9IHN0cmxlbigiL21vZHVsZXMuZGVwIik7CiAKLQlwYXRoID0gY2FsbG9jKDEsIGxlbik7Ci0JaWYgKHBhdGggPT0gTlVMTCkKLQkJZ290byBvdXRfZmFpbHVyZTsKKwlkcGF0aCA9IGNhbGxvYygxLCBsZW4gKyAxKTsKKwlpZiAoZHBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIGVycjsKIAotCXN0cmNhdChwYXRoLCAiL2xpYi9tb2R1bGVzLyIpOwotCXN0cmNhdChwYXRoLCB1dHMucmVsZWFzZSk7Ci0Jc3RyY2F0KHBhdGgsICIvbW9kdWxlcy5kZXAiKTsKKwlzdHJjYXQoZHBhdGgsICIvbGliL21vZHVsZXMvIik7CisJc3RyY2F0KGRwYXRoLCB1dHMucmVsZWFzZSk7CisJc3RyY2F0KGRwYXRoLCAiL21vZHVsZXMuZGVwIik7CiAKLQlmaWxlID0gZm9wZW4ocGF0aCwgInIiKTsKLQlmcmVlKHBhdGgpOworCWZpbGUgPSBmb3BlbihkcGF0aCwgInIiKTsKIAlpZiAoZmlsZSA9PSBOVUxMKQogCQlnb3RvIG91dF9mYWlsdXJlOwogCisJZGlyID0gZGlybmFtZShkcGF0aCk7CisJaWYgKCFkaXIpCisJCWdvdG8gb3V0X2ZhaWx1cmU7CisJc3RyY2F0KGRpciwgIi8iKTsKKwogCXdoaWxlICghZmVvZihmaWxlKSkgewotCQljaGFyICpuYW1lLCAqdG1wOwogCQlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CisJCWNoYXIgKm5hbWUsICpwYXRoLCAqdG1wOworCQlGSUxFICptb2RmaWxlOwogCQlpbnQgbGluZV9sZW47CiAKIAkJbGluZV9sZW4gPSBnZXRsaW5lKCZsaW5lLCAmbiwgZmlsZSk7CkBAIC00NDUsMTcgKzQ1MSw0MSBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKCFsaW5lKQotCQkJZ290byBvdXRfZmFpbHVyZTsKKwkJCWJyZWFrOwogCiAJCWxpbmVbLS1saW5lX2xlbl0gPSAnXDAnOyAvKiBcbiAqLwogCi0JCXBhdGggPSBzdHJ0b2sobGluZSwgIjoiKTsKKwkJcGF0aCA9IHN0cmNocihsaW5lLCAnOicpOwogCQlpZiAoIXBhdGgpCi0JCQlnb3RvIG91dF9mYWlsdXJlOworCQkJYnJlYWs7CisJCSpwYXRoID0gJ1wwJzsKKworCQlwYXRoID0gc3RyZHVwKGxpbmUpOworCQlpZiAoIXBhdGgpCisJCQlicmVhazsKKworCQlpZiAoIXN0cnN0cihwYXRoLCBkaXIpKSB7CisJCQlpZiAoc3RybmNtcChwYXRoLCAia2VybmVsLyIsIDcpKQorCQkJCWJyZWFrOworCisJCQlmcmVlKHBhdGgpOworCQkJcGF0aCA9IGNhbGxvYygxLCBzdHJsZW4oZGlyKSArIHN0cmxlbihsaW5lKSArIDEpOworCQkJaWYgKCFwYXRoKQorCQkJCWJyZWFrOworCQkJc3RyY2F0KHBhdGgsIGRpcik7CisJCQlzdHJjYXQocGF0aCwgbGluZSk7CisJCX0KKworCQltb2RmaWxlID0gZm9wZW4ocGF0aCwgInIiKTsKKwkJaWYgKG1vZGZpbGUgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlmY2xvc2UobW9kZmlsZSk7CiAKIAkJbmFtZSA9IHN0cmR1cChwYXRoKTsKLQkJbmFtZSA9IHN0cnRvayhuYW1lLCAiLyIpOworCQlpZiAoIW5hbWUpCisJCQlicmVhazsKIAorCQluYW1lID0gc3RydG9rKG5hbWUsICIvIik7CiAJCXRtcCA9IG5hbWU7CiAKIAkJd2hpbGUgKHRtcCkgewpAQCAtNDYzLDI2ICs0OTMsMjUgQEAKIAkJCWlmICh0bXApCiAJCQkJbmFtZSA9IHRtcDsKIAkJfQotCQluYW1lID0gc3Ryc2VwKCZuYW1lLCAiLiIpOwogCi0JCS8qIFF1aXJrOiByZXBsYWNlICctJyB3aXRoICdfJyBpbiBzb3VuZCBtb2R1bGVzICovCisJCW5hbWUgPSBzdHJzZXAoJm5hbWUsICIuIik7CisJCWlmICghbmFtZSkKKwkJCWJyZWFrOworCisJCS8qIFF1aXJrOiByZXBsYWNlICctJyB3aXRoICdfJyBpbiBhbGwgbW9kdWxlcyAqLwogCQlmb3IgKGxlbiA9IHN0cmxlbihuYW1lKTsgbGVuOyBsZW4tLSkgewogCQkJaWYgKCoobmFtZStsZW4pID09ICctJykKIAkJCQkqKG5hbWUrbGVuKSA9ICdfJzsKIAkJfQogCiAJCW1vZHVsZSA9IG1vZHVsZV9fbmV3KG5hbWUsIHBhdGgpOwotCQlpZiAoIW1vZHVsZSkgewotCQkJZnByaW50ZihzdGRlcnIsICJsb2FkX21vZHVsZV9wYXRoczogYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCQlnb3RvIG91dF9mYWlsdXJlOwotCQl9CisJCWlmICghbW9kdWxlKQorCQkJYnJlYWs7CiAJCW1vZF9kc29fX2luc2VydF9tb2R1bGUoc2VsZiwgbW9kdWxlKTsKIAogCQltb2R1bGUtPnNlY3Rpb25zID0gc2VjX2Rzb19fbmV3X2Rzbygic2VjdGlvbnMiKTsKLQkJaWYgKCFtb2R1bGUtPnNlY3Rpb25zKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImxvYWRfbW9kdWxlX3BhdGhzOiBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJCWdvdG8gb3V0X2ZhaWx1cmU7Ci0JCX0KKwkJaWYgKCFtb2R1bGUtPnNlY3Rpb25zKQorCQkJYnJlYWs7CiAKIAkJbW9kdWxlLT5hY3RpdmUgPSBtb2RfZHNvX19sb2FkX3NlY3Rpb25zKG1vZHVsZSk7CiAKQEAgLTQ5MCwxMyArNTE5LDIwIEBACiAJCQljb3VudCsrOwogCX0KIAotCWZyZWUobGluZSk7Ci0JZmNsb3NlKGZpbGUpOwotCi0JcmV0dXJuIGNvdW50OworCWlmIChmZW9mKGZpbGUpKQorCQllcnIgPSBjb3VudDsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAibG9hZF9tb2R1bGVfcGF0aHM6IG1vZHVsZXMuZGVwIHBhcnNpbmcgZmFpbHVyZSFcbiIpOwogCiBvdXRfZmFpbHVyZToKLQlyZXR1cm4gLTE7CisJaWYgKGRwYXRoKQorCQlmcmVlKGRwYXRoKTsKKwlpZiAoZmlsZSkKKwkJZmNsb3NlKGZpbGUpOworCWlmIChsaW5lKQorCQlmcmVlKGxpbmUpOworCisJcmV0dXJuIGVycjsKIH0KIAogaW50IG1vZF9kc29fX2xvYWRfbW9kdWxlcyhzdHJ1Y3QgbW9kX2RzbyAqZHNvKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IDEzYWI0YjguLjhjZmI0OGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTE2NSwzMyArMTY1LDMxIEBACiAJRElSICpzeXNfZGlyLCAqZXZ0X2RpcjsKIAlzdHJ1Y3QgZGlyZW50ICpzeXNfbmV4dCwgKmV2dF9uZXh0LCBzeXNfZGlyZW50LCBldnRfZGlyZW50OwogCWNoYXIgaWRfYnVmWzRdOwotCWludCBzeXNfZGlyX2ZkLCBmZDsKKwlpbnQgZmQ7CiAJdTY0IGlkOwogCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CisJY2hhciBkaXJfcGF0aFtNQVhQQVRITEVOXTsKIAogCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCiAJCXJldHVybiBOVUxMOwogCiAJc3lzX2RpciA9IG9wZW5kaXIoZGVidWdmc19wYXRoKTsKIAlpZiAoIXN5c19kaXIpCi0JCWdvdG8gY2xlYW51cDsKLQlzeXNfZGlyX2ZkID0gZGlyZmQoc3lzX2Rpcik7CisJCXJldHVybiBOVUxMOwogCiAJZm9yX2VhY2hfc3Vic3lzdGVtKHN5c19kaXIsIHN5c19kaXJlbnQsIHN5c19uZXh0KSB7Ci0JCWludCBkZmQgPSBvcGVuYXQoc3lzX2Rpcl9mZCwgc3lzX2RpcmVudC5kX25hbWUsCi0JCQkJIE9fUkRPTkxZfE9fRElSRUNUT1JZKSwgZXZ0X2Rpcl9mZDsKLQkJaWYgKGRmZCA9PSAtMSkKKworCQlzbnByaW50ZihkaXJfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzIiwgZGVidWdmc19wYXRoLAorCQkJIHN5c19kaXJlbnQuZF9uYW1lKTsKKwkJZXZ0X2RpciA9IG9wZW5kaXIoZGlyX3BhdGgpOworCQlpZiAoIWV2dF9kaXIpCiAJCQljb250aW51ZTsKLQkJZXZ0X2RpciA9IGZkb3BlbmRpcihkZmQpOwotCQlpZiAoIWV2dF9kaXIpIHsKLQkJCWNsb3NlKGRmZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlldnRfZGlyX2ZkID0gZGlyZmQoZXZ0X2Rpcik7CisKIAkJZm9yX2VhY2hfZXZlbnQoc3lzX2RpcmVudCwgZXZ0X2RpciwgZXZ0X2RpcmVudCwgZXZ0X25leHQpIHsKLQkJCXNucHJpbnRmKGV2dF9wYXRoLCBNQVhQQVRITEVOLCAiJXMvaWQiLAorCisJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzL2lkIiwgZGlyX3BhdGgsCiAJCQkJIGV2dF9kaXJlbnQuZF9uYW1lKTsKLQkJCWZkID0gb3BlbmF0KGV2dF9kaXJfZmQsIGV2dF9wYXRoLCBPX1JET05MWSk7CisJCQlmZCA9IG9wZW4oZXZ0X3BhdGgsIE9fUkRPTkxZKTsKIAkJCWlmIChmZCA8IDApCiAJCQkJY29udGludWU7CiAJCQlpZiAocmVhZChmZCwgaWRfYnVmLCBzaXplb2YoaWRfYnVmKSkgPCAwKSB7CkBAIC0yMjUsNyArMjIzLDYgQEAKIAkJY2xvc2VkaXIoZXZ0X2Rpcik7CiAJfQogCi1jbGVhbnVwOgogCWNsb3NlZGlyKHN5c19kaXIpOwogCXJldHVybiBOVUxMOwogfQpAQCAtNjk0LDcgKzY5MSwxMCBAQAogCUZJTEUgKmZpbGU7CiAJaW50IGlkOwogCi0Jc3ByaW50ZihmaWxlbmFtZSwgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzLyVzL2lkIiwgb3JnbmFtZSk7CisJc3ByaW50ZihmaWxlbmFtZSwgIiVzLyIsIGRlYnVnZnNfcGF0aCk7CisJc3RybmNhdChmaWxlbmFtZSwgb3JnbmFtZSwgc3RybGVuKG9yZ25hbWUpKTsKKwlzdHJjYXQoZmlsZW5hbWUsICIvaWQiKTsKKwogCWMgPSBzdHJjaHIoZmlsZW5hbWUsICc6Jyk7CiAJaWYgKGMpCiAJCSpjID0gJy8nOwpAQCAtNzYxLDI4ICs3NjEsMjQgQEAKIHsKIAlESVIgKnN5c19kaXIsICpldnRfZGlyOwogCXN0cnVjdCBkaXJlbnQgKnN5c19uZXh0LCAqZXZ0X25leHQsIHN5c19kaXJlbnQsIGV2dF9kaXJlbnQ7Ci0JaW50IHN5c19kaXJfZmQ7CiAJY2hhciBldnRfcGF0aFtNQVhQQVRITEVOXTsKKwljaGFyIGRpcl9wYXRoW01BWFBBVEhMRU5dOwogCiAJaWYgKHZhbGlkX2RlYnVnZnNfbW91bnQoZGVidWdmc19wYXRoKSkKIAkJcmV0dXJuOwogCiAJc3lzX2RpciA9IG9wZW5kaXIoZGVidWdmc19wYXRoKTsKIAlpZiAoIXN5c19kaXIpCi0JCWdvdG8gY2xlYW51cDsKLQlzeXNfZGlyX2ZkID0gZGlyZmQoc3lzX2Rpcik7CisJCXJldHVybjsKIAogCWZvcl9lYWNoX3N1YnN5c3RlbShzeXNfZGlyLCBzeXNfZGlyZW50LCBzeXNfbmV4dCkgewotCQlpbnQgZGZkID0gb3BlbmF0KHN5c19kaXJfZmQsIHN5c19kaXJlbnQuZF9uYW1lLAotCQkJCSBPX1JET05MWXxPX0RJUkVDVE9SWSksIGV2dF9kaXJfZmQ7Ci0JCWlmIChkZmQgPT0gLTEpCisKKwkJc25wcmludGYoZGlyX3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcyIsIGRlYnVnZnNfcGF0aCwKKwkJCSBzeXNfZGlyZW50LmRfbmFtZSk7CisJCWV2dF9kaXIgPSBvcGVuZGlyKGRpcl9wYXRoKTsKKwkJaWYgKCFldnRfZGlyKQogCQkJY29udGludWU7Ci0JCWV2dF9kaXIgPSBmZG9wZW5kaXIoZGZkKTsKLQkJaWYgKCFldnRfZGlyKSB7Ci0JCQljbG9zZShkZmQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJZXZ0X2Rpcl9mZCA9IGRpcmZkKGV2dF9kaXIpOworCiAJCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0KSB7CiAJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzOiVzIiwKIAkJCQkgc3lzX2RpcmVudC5kX25hbWUsIGV2dF9kaXJlbnQuZF9uYW1lKTsKQEAgLTc5MSw4ICs3ODcsNiBAQAogCQl9CiAJCWNsb3NlZGlyKGV2dF9kaXIpOwogCX0KLQotY2xlYW51cDoKIAljbG9zZWRpcihzeXNfZGlyKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCmluZGV4IGE3NzhmZDAuLmIzNjM3ZGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogaW50IHN2Z19wYWdlX3dpZHRoID0gMTAwMDsKIAotI2RlZmluZSBNSU5fVEVYVF9TSVpFIDAuMDAxCisjZGVmaW5lIE1JTl9URVhUX1NJWkUgMC4wMQogCiBzdGF0aWMgdTY0IHRvdGFsX2hlaWdodDsKIHN0YXRpYyBGSUxFICpzdmdmaWxlOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5wcm9jZXNzMiB7IGZpbGw6cmdiKDE4MCwxODAsMTgwKTsgZmlsbC1vcGFjaXR5OjAuOTsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnNhbXBsZSAgIHsgZmlsbDpyZ2IoICAwLCAgMCwyNTUpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuYmxvY2tlZCAgeyBmaWxsOnJnYigyNTUsICAwLCAgMCk7IGZpbGwtb3BhY2l0eTowLjU7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7Ci0JZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC53YWl0aW5nICB7IGZpbGw6cmdiKDIxNCwyMTQsICAwKTsgZmlsbC1vcGFjaXR5OjAuMzsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LndhaXRpbmcgIHsgZmlsbDpyZ2IoMjI0LDIxNCwgIDApOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuV0FJVElORyAgeyBmaWxsOnJnYigyNTUsMjE0LCA0OCk7IGZpbGwtb3BhY2l0eTowLjY7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5jcHUgICAgICB7IGZpbGw6cmdiKDE5MiwxOTIsMTkyKTsgZmlsbC1vcGFjaXR5OjAuMjsgc3Ryb2tlLXdpZHRoOjAuNTsgc3Ryb2tlOnJnYigxMjgsMTI4LDEyOCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnBzdGF0ZSAgIHsgZmlsbDpyZ2IoMTI4LDEyOCwxMjgpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgfSBcbiIpOwpAQCAtMjE3LDYgKzIxNywxOCBAQAogCQl9CiAJCWZjbG9zZShmaWxlKTsKIAl9CisKKwkvKiBDUFUgdHlwZSAqLworCWZpbGUgPSBmb3BlbigiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIiwgInIiKTsKKwlpZiAoZmlsZSkgeworCQl3aGlsZSAoZmdldHMoYnVmLCAyNTUsIGZpbGUpKSB7CisJCQl1bnNpZ25lZCBpbnQgZnJlcTsKKwkJCWZyZXEgPSBzdHJ0b3VsbChidWYsIE5VTEwsIDEwKTsKKwkJCWlmIChmcmVxID4gbWF4X2ZyZXEpCisJCQkJbWF4X2ZyZXEgPSBmcmVxOworCQl9CisJCWZjbG9zZShmaWxlKTsKKwl9CiAJcmV0dXJuIGNwdV9tOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggZmQzZDljOC4uMjI2ZjQ0YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMzI0LDggKzMyNCw3IEBACiB7CiAJcmV0dXJuIGVsZl9zeW1fX3R5cGUoc3ltKSA9PSBTVFRfRlVOQyAmJgogCSAgICAgICBzeW0tPnN0X25hbWUgIT0gMCAmJgotCSAgICAgICBzeW0tPnN0X3NobmR4ICE9IFNITl9VTkRFRiAmJgotCSAgICAgICBzeW0tPnN0X3NpemUgIT0gMDsKKwkgICAgICAgc3ltLT5zdF9zaG5keCAhPSBTSE5fVU5ERUY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVsZl9zeW1fX2lzX2xhYmVsKGNvbnN0IEdFbGZfU3ltICpzeW0pCkBAIC00MTQsNyArNDEzLDcgQEAKIAlpZiAoZmQgPCAwKQogCQlnb3RvIG91dDsKIAotCWVsZiA9IGVsZl9iZWdpbihmZCwgRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKKwllbGYgPSBlbGZfYmVnaW4oZmQsIFBFUkZfRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKIAlpZiAoZWxmID09IE5VTEwpCiAJCWdvdG8gb3V0X2Nsb3NlOwogCkBAIC01MzQsNyArNTMzLDcgQEAKIAlFbGYgKmVsZjsKIAlpbnQgbnIgPSAwLCBrZXJuZWwgPSAhc3RyY21wKCJba2VybmVsXSIsIHNlbGYtPm5hbWUpOwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewogCQlpZiAodikKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwKQEAgLTY3Niw3ICs2NzUsNyBAQAogCWlmIChmZCA8IDApCiAJCWdvdG8gb3V0OwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewogCQlpZiAodikKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwKQEAgLTgzMyw3ICs4MzIsNyBAQAogCXN0cnVjdCBtb2RfZHNvICptb2RzID0gbW9kX2Rzb19fbmV3X2RzbygibW9kdWxlcyIpOwogCXN0cnVjdCBtb2R1bGUgKnBvczsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKLQlpbnQgZXJyOworCWludCBlcnIsIGNvdW50ID0gMDsKIAogCWVyciA9IG1vZF9kc29fX2xvYWRfbW9kdWxlcyhtb2RzKTsKIApAQCAtODUyLDE0ICs4NTEsMTYgQEAKIAkJCWJyZWFrOwogCiAJCW5leHQgPSByYl9uZXh0KCZwb3MtPnJiX25vZGUpOworCQljb3VudCArPSBlcnI7CiAJfQogCiAJaWYgKGVyciA8IDApIHsKIAkJbW9kX2Rzb19fZGVsZXRlX21vZHVsZXMobW9kcyk7CiAJCW1vZF9kc29fX2RlbGV0ZV9zZWxmKG1vZHMpOworCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiBlcnI7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHNvX19maWxsX3N5bWJvbF9ob2xlcyhzdHJ1Y3QgZHNvICpzZWxmKQpAQCAtOTEzLDggKzkxNCwxNSBAQAogCiAJaWYgKHZtbGludXgpIHsKIAkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgdm1saW51eCwgZmlsdGVyLCB2KTsKLQkJaWYgKGVyciA+IDAgJiYgdXNlX21vZHVsZXMpCi0JCQllcnIgPSBkc29fX2xvYWRfbW9kdWxlcyhzZWxmLCBmaWx0ZXIsIHYpOworCQlpZiAoZXJyID4gMCAmJiB1c2VfbW9kdWxlcykgeworCQkJaW50IHN5bXMgPSBkc29fX2xvYWRfbW9kdWxlcyhzZWxmLCBmaWx0ZXIsIHYpOworCisJCQlpZiAoc3ltcyA8IDApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgImRzb19fbG9hZF9tb2R1bGVzIGZhaWxlZCFcbiIpOworCQkJCXJldHVybiBzeW1zOworCQkJfQorCQkJZXJyICs9IHN5bXM7CisJCX0KIAl9CiAKIAlpZiAoZXJyIDw9IDApCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggNmU4NDkwNy4uODI5ZGE5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtMjcsNiArMjcsMTYgQEAKICNlbmRpZgogI2VuZGlmCiAKKy8qCisgKiBsaWJlbGYgMC44LnggYW5kIGVhcmxpZXIgZG8gbm90IHN1cHBvcnQgRUxGX0NfUkVBRF9NTUFQOworICogZm9yIG5ld2VyIHZlcnNpb25zIHdlIGNhbiB1c2UgbW1hcCB0byByZWR1Y2UgbWVtb3J5IHVzYWdlOgorICovCisjaWZkZWYgTElCRUxGX05PX01NQVAKKyMgZGVmaW5lIFBFUkZfRUxGX0NfUkVBRF9NTUFQIEVMRl9DX1JFQUQKKyNlbHNlCisjIGRlZmluZSBQRVJGX0VMRl9DX1JFQURfTU1BUCBFTEZfQ19SRUFEX01NQVAKKyNlbmRpZgorCiAjaWZuZGVmIERNR0xfUEFSQU1TCiAjZGVmaW5lIERNR0xfUEFSQU1TICAgICAgKDEgPDwgMCkgICAgICAgLyogSW5jbHVkZSBmdW5jdGlvbiBhcmdzICovCiAjZGVmaW5lIERNR0xfQU5TSSAgICAgICAgKDEgPDwgMSkgICAgICAgLyogSW5jbHVkZSBjb25zdCwgdm9sYXRpbGUsIGV0YyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwppbmRleCBmNmE4NDM3Li41NWM5NjU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwpAQCAtNjE4LDcgKzYxOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgdGVzdF90eXBlX3Rva2VuKGVudW0gZXZlbnRfdHlwZSB0eXBlLCBjaGFyICp0b2tlbiwKLQkJICAgIGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNoYXIgKmV4cGVjdF90b2spCisJCSAgICBlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjb25zdCBjaGFyICpleHBlY3RfdG9rKQogewogCWlmICh0eXBlICE9IGV4cGVjdCkgewogCQlkaWUoIkVycm9yOiBleHBlY3RlZCB0eXBlICVkIGJ1dCByZWFkICVkIiwKQEAgLTY1MCw3ICs2NTAsNyBAQAogCXJldHVybiBfX3JlYWRfZXhwZWN0X3R5cGUoZXhwZWN0LCB0b2ssIDEpOwogfQogCi1zdGF0aWMgaW50IF9fcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIsIGludCBuZXdsaW5lX29rKQorc3RhdGljIGludCBfX3JlYWRfZXhwZWN0ZWQoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqc3RyLCBpbnQgbmV3bGluZV9vaykKIHsKIAllbnVtIGV2ZW50X3R5cGUgdHlwZTsKIAljaGFyICp0b2tlbjsKQEAgLTY2OCwxMiArNjY4LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIpCitzdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWQoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqc3RyKQogewogCXJldHVybiBfX3JlYWRfZXhwZWN0ZWQoZXhwZWN0LCBzdHIsIDEpOwogfQogCi1zdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWRfaXRlbShlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIpCitzdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWRfaXRlbShlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjb25zdCBjaGFyICpzdHIpCiB7CiAJcmV0dXJuIF9fcmVhZF9leHBlY3RlZChleHBlY3QsIHN0ciwgMCk7CiB9CkBAIC0xOTY4LDEwICsxOTY4LDExIEBACiAJeyAiTkVUX1RYX1NPRlRJUlEiLCAyIH0sCiAJeyAiTkVUX1JYX1NPRlRJUlEiLCAzIH0sCiAJeyAiQkxPQ0tfU09GVElSUSIsIDQgfSwKLQl7ICJUQVNLTEVUX1NPRlRJUlEiLCA1IH0sCi0JeyAiU0NIRURfU09GVElSUSIsIDYgfSwKLQl7ICJIUlRJTUVSX1NPRlRJUlEiLCA3IH0sCi0JeyAiUkNVX1NPRlRJUlEiLCA4IH0sCisJeyAiQkxPQ0tfSU9QT0xMX1NPRlRJUlEiLCA1IH0sCisJeyAiVEFTS0xFVF9TT0ZUSVJRIiwgNiB9LAorCXsgIlNDSEVEX1NPRlRJUlEiLCA3IH0sCisJeyAiSFJUSU1FUl9TT0ZUSVJRIiwgOCB9LAorCXsgIlJDVV9TT0ZUSVJRIiwgOSB9LAogCiAJeyAiSFJUSU1FUl9OT1JFU1RBUlQiLCAwIH0sCiAJeyAiSFJUSU1FUl9SRVNUQVJUIiwgMSB9LApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMDM0YTc5OC4uNzQ5NWNlMyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC04NTAsNiArODUwLDE5IEBACiAKIH0KIAorc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAorCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCQlwdGVfdCBwdGUpCit7CisJc3RydWN0IGt2bSAqa3ZtID0gbW11X25vdGlmaWVyX3RvX2t2bShtbik7CisKKwlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOworCWt2bS0+bW11X25vdGlmaWVyX3NlcSsrOworCWt2bV9zZXRfc3B0ZV9odmEoa3ZtLCBhZGRyZXNzLCBwdGUpOworCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKK30KKwogc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAogCQkJCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCkBAIC05MjksNiArOTQyLDcgQEAKIAkuaW52YWxpZGF0ZV9yYW5nZV9zdGFydAk9IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKIAkuaW52YWxpZGF0ZV9yYW5nZV9lbmQJPSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLAogCS5jbGVhcl9mbHVzaF95b3VuZwk9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsCisJLmNoYW5nZV9wdGUJCT0ga3ZtX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlLAogCS5yZWxlYXNlCQk9IGt2bV9tbXVfbm90aWZpZXJfcmVsZWFzZSwKIH07CiAjZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAmJiBLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUiAqLwpAQCAtMTcxMyw3ICsxNzI3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBrdm1fdmNwdV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGt2bV92Y3B1X3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBrdm1fdmNwdV9mYXVsdCwKIH07CiAKQEAgLTIzMTcsNyArMjMzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qga3ZtX3ZtX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qga3ZtX3ZtX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBrdm1fdm1fZmF1bHQsCiB9OwogCkBAIC0yNjI1LDcgKzI2MzksNyBAQAogCiBERUZJTkVfU0lNUExFX0FUVFJJQlVURSh2Y3B1X3N0YXRfZm9wcywgdmNwdV9zdGF0X2dldCwgTlVMTCwgIiVsbHVcbiIpOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdF9mb3BzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdF9mb3BzW10gPSB7CiAJW0tWTV9TVEFUX1ZDUFVdID0gJnZjcHVfc3RhdF9mb3BzLAogCVtLVk1fU1RBVF9WTV0gICA9ICZ2bV9zdGF0X2ZvcHMsCiB9OwpAQCAtMjcwMyw4ICsyNzE3LDYgQEAKIAlpbnQgcjsKIAlpbnQgY3B1OwogCi0Ja3ZtX2luaXRfZGVidWcoKTsKLQogCXIgPSBrdm1fYXJjaF9pbml0KG9wYXF1ZSk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0X2ZhaWw7CkBAIC0yNzcxLDYgKzI3ODMsOCBAQAogCWt2bV9wcmVlbXB0X29wcy5zY2hlZF9pbiA9IGt2bV9zY2hlZF9pbjsKIAlrdm1fcHJlZW1wdF9vcHMuc2NoZWRfb3V0ID0ga3ZtX3NjaGVkX291dDsKIAorCWt2bV9pbml0X2RlYnVnKCk7CisKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWU6CkBAIC0yNzkzLDcgKzI4MDcsNiBAQAogb3V0OgogCWt2bV9hcmNoX2V4aXQoKTsKIG91dF9mYWlsOgotCWt2bV9leGl0X2RlYnVnKCk7CiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1faW5pdCk7CkBAIC0yODAxLDYgKzI4MTQsNyBAQAogdm9pZCBrdm1fZXhpdCh2b2lkKQogewogCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOworCWt2bV9leGl0X2RlYnVnKCk7CiAJbWlzY19kZXJlZ2lzdGVyKCZrdm1fZGV2KTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koa3ZtX3ZjcHVfY2FjaGUpOwogCXN5c2Rldl91bnJlZ2lzdGVyKCZrdm1fc3lzZGV2KTsKQEAgLTI4MTAsNyArMjgyNCw2IEBACiAJb25fZWFjaF9jcHUoaGFyZHdhcmVfZGlzYWJsZSwgTlVMTCwgMSk7CiAJa3ZtX2FyY2hfaGFyZHdhcmVfdW5zZXR1cCgpOwogCWt2bV9hcmNoX2V4aXQoKTsKLQlrdm1fZXhpdF9kZWJ1ZygpOwogCWZyZWVfY3B1bWFza192YXIoY3B1c19oYXJkd2FyZV9lbmFibGVkKTsKIAlfX2ZyZWVfcGFnZShiYWRfcGFnZSk7CiB9Cg==